<?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>236748</bug_id>
          
          <creation_ts>2022-02-16 19:11:42 -0800</creation_ts>
          <short_desc>Clean up / optimize call sites constructing vectors</short_desc>
          <delta_ts>2022-02-21 14:44:37 -0800</delta_ts>
          <reporter_accessible>1</reporter_accessible>
          <cclist_accessible>1</cclist_accessible>
          <classification_id>1</classification_id>
          <classification>Unclassified</classification>
          <product>WebKit</product>
          <component>WebCore Misc.</component>
          <version>WebKit Nightly Build</version>
          <rep_platform>Unspecified</rep_platform>
          <op_sys>Unspecified</op_sys>
          <bug_status>RESOLVED</bug_status>
          <resolution>FIXED</resolution>
          
          <see_also>https://bugs.webkit.org/show_bug.cgi?id=236819</see_also>
    
    <see_also>https://bugs.webkit.org/show_bug.cgi?id=236852</see_also>
          <bug_file_loc></bug_file_loc>
          <status_whiteboard></status_whiteboard>
          <keywords>InRadar</keywords>
          <priority>P2</priority>
          <bug_severity>Normal</bug_severity>
          <target_milestone>---</target_milestone>
          
          
          <everconfirmed>1</everconfirmed>
          <reporter name="Chris Dumez">cdumez</reporter>
          <assigned_to name="Chris Dumez">cdumez</assigned_to>
          <cc>aboxhall</cc>
    
    <cc>achristensen</cc>
    
    <cc>alecflett</cc>
    
    <cc>andresg_22</cc>
    
    <cc>apinheiro</cc>
    
    <cc>beidson</cc>
    
    <cc>benjamin</cc>
    
    <cc>calvaris</cc>
    
    <cc>cfleizach</cc>
    
    <cc>cgarcia</cc>
    
    <cc>changseok</cc>
    
    <cc>cmarcelo</cc>
    
    <cc>darin</cc>
    
    <cc>dino</cc>
    
    <cc>dmazzoni</cc>
    
    <cc>eric.carlson</cc>
    
    <cc>esprehn+autocc</cc>
    
    <cc>ews-watchlist</cc>
    
    <cc>fred.wang</cc>
    
    <cc>ggaren</cc>
    
    <cc>glenn</cc>
    
    <cc>gyuyoung.kim</cc>
    
    <cc>hi</cc>
    
    <cc>hta</cc>
    
    <cc>jamesr</cc>
    
    <cc>japhet</cc>
    
    <cc>jcraig</cc>
    
    <cc>jdiggs</cc>
    
    <cc>jer.noble</cc>
    
    <cc>jfernandez</cc>
    
    <cc>jiewen_tan</cc>
    
    <cc>joepeck</cc>
    
    <cc>jsbell</cc>
    
    <cc>kangil.han</cc>
    
    <cc>keith_miller</cc>
    
    <cc>kondapallykalyan</cc>
    
    <cc>luiz</cc>
    
    <cc>macpherson</cc>
    
    <cc>mark.lam</cc>
    
    <cc>menard</cc>
    
    <cc>mifenton</cc>
    
    <cc>mkwst</cc>
    
    <cc>mmaxfield</cc>
    
    <cc>msaboff</cc>
    
    <cc>pangle</cc>
    
    <cc>pdr</cc>
    
    <cc>philipj</cc>
    
    <cc>rego</cc>
    
    <cc>saam</cc>
    
    <cc>samuel_white</cc>
    
    <cc>sam</cc>
    
    <cc>sergio</cc>
    
    <cc>simon.fraser</cc>
    
    <cc>svillar</cc>
    
    <cc>tommyw</cc>
    
    <cc>tonikitoo</cc>
    
    <cc>toyoshim</cc>
    
    <cc>tzagallo</cc>
    
    <cc>webkit-bug-importer</cc>
    
    <cc>youennf</cc>
    
    <cc>yutak</cc>
          

      

      

      

          <comment_sort_order>oldest_to_newest</comment_sort_order>  
          <long_desc isprivate="0" >
    <commentid>1842654</commentid>
    <comment_count>0</comment_count>
    <who name="Chris Dumez">cdumez</who>
    <bug_when>2022-02-16 19:11:42 -0800</bug_when>
    <thetext>Clean up / optimize call sites constructing vectors.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1842657</commentid>
    <comment_count>1</comment_count>
      <attachid>452289</attachid>
    <who name="Chris Dumez">cdumez</who>
    <bug_when>2022-02-16 19:23:28 -0800</bug_when>
    <thetext>Created attachment 452289
Patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1842659</commentid>
    <comment_count>2</comment_count>
      <attachid>452290</attachid>
    <who name="Chris Dumez">cdumez</who>
    <bug_when>2022-02-16 19:27:11 -0800</bug_when>
    <thetext>Created attachment 452290
Patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1842666</commentid>
    <comment_count>3</comment_count>
      <attachid>452292</attachid>
    <who name="Chris Dumez">cdumez</who>
    <bug_when>2022-02-16 19:43:56 -0800</bug_when>
    <thetext>Created attachment 452292
Patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1842691</commentid>
    <comment_count>4</comment_count>
      <attachid>452305</attachid>
    <who name="Chris Dumez">cdumez</who>
    <bug_when>2022-02-16 21:09:51 -0800</bug_when>
    <thetext>Created attachment 452305
Patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1842894</commentid>
    <comment_count>5</comment_count>
      <attachid>452305</attachid>
    <who name="Dean Jackson">dino</who>
    <bug_when>2022-02-17 07:43:09 -0800</bug_when>
    <thetext>Comment on attachment 452305
Patch

rs=me.

very nice.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1842895</commentid>
    <comment_count>6</comment_count>
      <attachid>452305</attachid>
    <who name="Chris Dumez">cdumez</who>
    <bug_when>2022-02-17 07:43:53 -0800</bug_when>
    <thetext>Comment on attachment 452305
Patch

Thanks for reviewing.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1842928</commentid>
    <comment_count>7</comment_count>
      <attachid>452305</attachid>
    <who name="Chris Dumez">cdumez</who>
    <bug_when>2022-02-17 09:17:59 -0800</bug_when>
    <thetext>Comment on attachment 452305
Patch

Clearing flags on attachment: 452305

Committed r290026 (?): &lt;https://commits.webkit.org/r290026&gt;</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1842929</commentid>
    <comment_count>8</comment_count>
    <who name="Chris Dumez">cdumez</who>
    <bug_when>2022-02-17 09:18:08 -0800</bug_when>
    <thetext>All reviewed patches have been landed.  Closing bug.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1842930</commentid>
    <comment_count>9</comment_count>
    <who name="Radar WebKit Bug Importer">webkit-bug-importer</who>
    <bug_when>2022-02-17 09:19:23 -0800</bug_when>
    <thetext>&lt;rdar://problem/89090710&gt;</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1842950</commentid>
    <comment_count>10</comment_count>
      <attachid>452305</attachid>
    <who name="Darin Adler">darin</who>
    <bug_when>2022-02-17 10:04:12 -0800</bug_when>
    <thetext>Comment on attachment 452305
Patch

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

Thrilled to see this patch, great work!

&gt; Source/JavaScriptCore/b3/air/AirCode.cpp:336
&gt; +    m_prologueGenerators = Vector { numEntryPoints, m_defaultPrologueGenerator.copyRef() };

Surprised we need to write Vector { } instead of just { } here.

&gt; Source/JavaScriptCore/parser/VariableEnvironment.cpp:222
&gt; +    Compact variables = WTF::map(env, [this](auto&amp; key) -&gt; PackedRefPtr&lt;UniquedStringImpl&gt; {

Could this have been &quot;auto&quot; instead of &quot;Compact&quot;?

&gt; Source/WebCore/Modules/encryptedmedia/MediaKeySession.cpp:704
&gt; +        return std::make_pair(WTFMove(status.first), toMediaKeyStatus(status.second));

In new code we can use the std::pair deduction guide instead of the std::make_pair function.

&gt; Source/WebCore/Modules/indexeddb/server/SQLiteIDBCursor.cpp:119
&gt; +    prefetchedRecords.reserveInitialCapacity(m_fetchedRecords.size());

Seems like this always reserves one too many.

&gt; Source/WebCore/Modules/indexeddb/server/SQLiteIDBCursor.cpp:130
&gt; +    prefetchedRecords.shrinkToFit();

When does shrinking happen automatically and when do we have to do it explicitly?

&gt; Source/WebCore/bindings/js/SerializedScriptValue.cpp:2465
&gt;          Vector&lt;UChar&gt; buffer;
&gt; -        buffer.reserveCapacity(length);
&gt; +        buffer.reserveInitialCapacity(length);
&gt;          for (unsigned i = 0; i &lt; length; i++) {
&gt;              uint16_t ch;
&gt;              readLittleEndian(ptr, end, ch);
&gt; -            buffer.append(ch);
&gt; +            buffer.uncheckedAppend(ch);
&gt;          }
&gt;          str = String::adopt(WTFMove(buffer));

Using a Vector&lt;UChar&gt; to make a String is an archaic idiom. Given that we know the length up front we could use String::createUninitialized and it will be both faster and use less memory. Or if we think there’s a chance we’ll end up with a string that can be 8-bit we could write a version that uses something like StringBuilder. We should probably delete String::adopt(Vector&amp;&amp;) at some point. I think it’s almost never the right thing.

&gt; Source/WebCore/css/StyleProperties.cpp:1809
&gt;      size_t length = range.end() - range.begin();
&gt; -    m_tokens.reserveCapacity(length);
&gt;      m_tokens.append(range.begin(), length);

I guess you did your research on this, but are you sure this reserve had no benefit? Maybe this could be changed to use construction instead of append? Something like this:

    , m_tokens(range.begin(), range.end() - range.begin())

Or maybe we will be adding more later and append is the better pattern?

&gt; Source/WebCore/css/StyleRule.cpp:372
&gt;      size_t length = range.end() - range.begin();
&gt; -    m_tokens.reserveCapacity(length);
&gt;      m_tokens.append(range.begin(), length);

Ditto.

&gt; Source/WebCore/css/calc/CSSCalcValue.cpp:76
&gt;      Vector&lt;Ref&lt;CSSCalcExpressionNode&gt;&gt; values;
&gt;      values.reserveInitialCapacity(nodes.size());
&gt;      for (auto&amp; node : nodes) {
&gt; -        auto cssNode = createCSS(*node, style);
&gt; -        if (!cssNode)
&gt; -            continue;
&gt; -        values.uncheckedAppend(cssNode.releaseNonNull());
&gt; +        if (auto cssNode = createCSS(*node, style))
&gt; +            values.uncheckedAppend(cssNode.releaseNonNull());
&gt;      }
&gt; +    values.shrinkToFit();
&gt;      return values;

When I made the Cocoa equivalent of WTF::map, WTF::makeVector(NSArray *), I made it work with optional values so we could do operations like this one without writing a loop. I guess WTF::map doesn’t offer that?

&gt; Source/WebCore/dom/ElementData.cpp:148
&gt; +    m_attributeVector.append(other.m_attributeArray, other.length());

Can we make this construction or assignment instead of append?

&gt; Source/WebCore/loader/archive/cf/LegacyWebArchive.cpp:613
&gt; +    return create(iframeResource.releaseNonNull(), { }, Vector { archive.releaseNonNull() });

Do we need to write Vector?

&gt; Source/WebCore/page/IntersectionObserver.cpp:104
&gt; +        thresholds.append(initThreshold);

Should we use assignment instead of append here?

&gt; Source/WebCore/platform/graphics/avfoundation/objc/CDMInstanceFairPlayStreamingAVFObjC.mm:909
&gt; +        KeyStatusVector keyStatuses { std::make_pair(WTFMove(keyIDs.first()), KeyStatus::Usable) };

Same deduction guide remark as above, std::pair, instead of std::make_pair might be good.

&gt; Source/WebCore/platform/graphics/ca/TileGrid.h:138
&gt; +    void removeTiles(const Vector&lt;TileGrid::TileIndex&gt;&amp; toRemove);

Maybe this should take a Span&lt;const TileGrid::TileIndex&gt; instead?

&gt; Source/WebCore/platform/network/CacheValidation.cpp:369
&gt; +    return varyValue.split(&apos;,&apos;).map([&amp;](auto&amp; varyHeaderName) {

Seems like we could use StringView::split here instead of String::split for better efficiency.

&gt; Source/WebCore/platform/network/CacheValidation.cpp:370
&gt; +        auto headerName = varyHeaderName.stripWhiteSpace();

Not sure this should be &quot;stripWhiteSpace&quot;, maybe should be based on the HTTP definition of whitespace rather than the Unicode definition.

&gt; Source/WebCore/platform/text/LocaleICU.cpp:183
&gt; +        labels-&gt;uncheckedAppend(String::adopt(WTFMove(buffer)));

Another example of using a Vector to make a String, but I guess here we don’t know the length ahead of time.

&gt; Source/WebCore/platform/text/LocaleICU.cpp:191
&gt; +    labels-&gt;reserveInitialCapacity(WTF_ARRAY_LENGTH(WTF::monthFullName));

Reflecting on the fact that we can use std::size instead of WTF_ARRAY_LENGTH in new code.

&gt; Source/WebCore/platform/text/LocaleICU.cpp:192
&gt;      for (unsigned i = 0; i &lt; WTF_ARRAY_LENGTH(WTF::monthFullName); ++i)

Could just use a modern for loop I think. Maybe WTF::map can work with arrays?

&gt; Source/WebCore/platform/text/LocaleICU.cpp:212
&gt; +    return makeUnique&lt;Vector&lt;String&gt;&gt;(Vector&lt;String&gt;::from(&quot;AM&quot;_str, &quot;PM&quot;_str));

I wish I understood when to use &quot;&quot;_s and when to use &quot;&quot;_str.

&gt; Source/WebCore/platform/text/LocaleNone.cpp:77
&gt;          return m_monthLabels;
&gt;      m_monthLabels.reserveCapacity(WTF_ARRAY_LENGTH(WTF::monthFullName));
&gt;      for (unsigned i = 0; i &lt; WTF_ARRAY_LENGTH(WTF::monthFullName); ++i)
&gt; -        m_monthLabels.append(WTF::monthFullName[i]);
&gt; +        m_monthLabels.uncheckedAppend(WTF::monthFullName[i]);
&gt;      return m_monthLabels;

All these are using a not so great idiom, no modern for loops, no WTF::map with an array, explicit empty check every time. There must be a better way, but this is sort of like testing code, I guess, so maybe doesn’t have to be perfected.

&gt; Source/WebCore/platform/text/LocaleNone.cpp:141
&gt;      m_timeAMPMLabels.reserveCapacity(2);
&gt; -    m_timeAMPMLabels.append(&quot;AM&quot;);
&gt; -    m_timeAMPMLabels.append(&quot;PM&quot;);
&gt; +    m_timeAMPMLabels.uncheckedAppend(&quot;AM&quot;);
&gt; +    m_timeAMPMLabels.uncheckedAppend(&quot;PM&quot;);

If we aren’t changing this to reserveInitialCapacity, then it’s not OK to change the calls below to uncheckedAppend. If there is already something in the vector, then reserving 2 does not make it safe to append 2. If there is a guarantee the vector is empty, then reserveInitialCapacity is what we want.

&gt; Source/WebCore/platform/text/cocoa/LocaleCocoa.mm:113
&gt;          for (unsigned i = 0; i &lt; 12; ++i)
&gt; -            m_monthLabels.append(String([array objectAtIndex:i]));
&gt; +            m_monthLabels.uncheckedAppend(String([array objectAtIndex:i]));

I think this can just be:

    m_monthLabels = makeVector(array);

&gt; Source/WebCore/platform/text/cocoa/LocaleCocoa.mm:207
&gt;          for (unsigned i = 0; i &lt; 12; ++i)
&gt; -            m_shortMonthLabels.append([array objectAtIndex:i]);
&gt; +            m_shortMonthLabels.uncheckedAppend([array objectAtIndex:i]);

Ditto.

&gt; Source/WebCore/platform/text/cocoa/LocaleCocoa.mm:223
&gt;          m_standAloneMonthLabels.reserveCapacity(12);
&gt;          for (unsigned i = 0; i &lt; 12; ++i)
&gt; -            m_standAloneMonthLabels.append([array objectAtIndex:i]);
&gt; +            m_standAloneMonthLabels.uncheckedAppend([array objectAtIndex:i]);

Ditto.

&gt; Source/WebCore/platform/text/cocoa/LocaleCocoa.mm:238
&gt;          m_shortStandAloneMonthLabels.reserveCapacity(12);
&gt;          for (unsigned i = 0; i &lt; 12; ++i)
&gt; -            m_shortStandAloneMonthLabels.append([array objectAtIndex:i]);
&gt; +            m_shortStandAloneMonthLabels.uncheckedAppend([array objectAtIndex:i]);

Ditto.

&gt; Source/WebCore/platform/text/cocoa/LocaleCocoa.mm:252
&gt;      m_timeAMPMLabels.reserveCapacity(2);
&gt;      RetainPtr&lt;NSDateFormatter&gt; formatter = shortTimeFormatter();
&gt; -    m_timeAMPMLabels.append([formatter AMSymbol]);
&gt; -    m_timeAMPMLabels.append([formatter PMSymbol]);
&gt; +    m_timeAMPMLabels.uncheckedAppend([formatter AMSymbol]);
&gt; +    m_timeAMPMLabels.uncheckedAppend([formatter PMSymbol]);

If we aren’t changing this to reserveInitialCapacity, then it’s not OK to change the calls below to uncheckedAppend. If there is already something in the vector, then reserving 2 does not make it safe to append 2. If there is a guarantee the vector is empty, then reserveInitialCapacity is what we want.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1843004</commentid>
    <comment_count>11</comment_count>
      <attachid>452305</attachid>
    <who name="Eric Carlson">eric.carlson</who>
    <bug_when>2022-02-17 11:47:30 -0800</bug_when>
    <thetext>Comment on attachment 452305
Patch

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

&gt;&gt; Source/JavaScriptCore/parser/VariableEnvironment.cpp:222
&gt;&gt; +    Compact variables = WTF::map(env, [this](auto&amp; key) -&gt; PackedRefPtr&lt;UniquedStringImpl&gt; {
&gt; 
&gt; Could this have been &quot;auto&quot; instead of &quot;Compact&quot;?

This is exactly the type of code where I *really* dislike &quot;auto&quot;, because for someone that isn&apos;t already familiar with the code there are no clues about what type the variable is.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1843013</commentid>
    <comment_count>12</comment_count>
      <attachid>452305</attachid>
    <who name="Darin Adler">darin</who>
    <bug_when>2022-02-17 11:58:34 -0800</bug_when>
    <thetext>Comment on attachment 452305
Patch

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

&gt;&gt;&gt; Source/JavaScriptCore/parser/VariableEnvironment.cpp:222
&gt;&gt;&gt; +    Compact variables = WTF::map(env, [this](auto&amp; key) -&gt; PackedRefPtr&lt;UniquedStringImpl&gt; {
&gt;&gt; 
&gt;&gt; Could this have been &quot;auto&quot; instead of &quot;Compact&quot;?
&gt; 
&gt; This is exactly the type of code where I *really* dislike &quot;auto&quot;, because for someone that isn&apos;t already familiar with the code there are no clues about what type the variable is.

And the word &quot;Compact&quot; tells you what?</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1843014</commentid>
    <comment_count>13</comment_count>
      <attachid>452305</attachid>
    <who name="Darin Adler">darin</who>
    <bug_when>2022-02-17 11:59:34 -0800</bug_when>
    <thetext>Comment on attachment 452305
Patch

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

&gt;&gt;&gt;&gt; Source/JavaScriptCore/parser/VariableEnvironment.cpp:222
&gt;&gt;&gt;&gt; +    Compact variables = WTF::map(env, [this](auto&amp; key) -&gt; PackedRefPtr&lt;UniquedStringImpl&gt; {
&gt;&gt;&gt; 
&gt;&gt;&gt; Could this have been &quot;auto&quot; instead of &quot;Compact&quot;?
&gt;&gt; 
&gt;&gt; This is exactly the type of code where I *really* dislike &quot;auto&quot;, because for someone that isn&apos;t already familiar with the code there are no clues about what type the variable is.
&gt; 
&gt; And the word &quot;Compact&quot; tells you what?

Another way to put it is, what is the type of &quot;key&quot;? I’m not familiar with the code and there are no clues about what type &quot;key&quot; is.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1843021</commentid>
    <comment_count>14</comment_count>
      <attachid>452305</attachid>
    <who name="Darin Adler">darin</who>
    <bug_when>2022-02-17 12:03:28 -0800</bug_when>
    <thetext>Comment on attachment 452305
Patch

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

&gt;&gt;&gt;&gt;&gt; Source/JavaScriptCore/parser/VariableEnvironment.cpp:222
&gt;&gt;&gt;&gt;&gt; +    Compact variables = WTF::map(env, [this](auto&amp; key) -&gt; PackedRefPtr&lt;UniquedStringImpl&gt; {
&gt;&gt;&gt;&gt; 
&gt;&gt;&gt;&gt; Could this have been &quot;auto&quot; instead of &quot;Compact&quot;?
&gt;&gt;&gt; 
&gt;&gt;&gt; This is exactly the type of code where I *really* dislike &quot;auto&quot;, because for someone that isn&apos;t already familiar with the code there are no clues about what type the variable is.
&gt;&gt; 
&gt;&gt; And the word &quot;Compact&quot; tells you what?
&gt; 
&gt; Another way to put it is, what is the type of &quot;key&quot;? I’m not familiar with the code and there are no clues about what type &quot;key&quot; is.

Not sure those comments above are sensible, argumentative and not very thoughtful. Let me try again:

One thing answered by &quot;auto&quot; is &quot;we are not doing another type conversion, possibly costly, on the result of WTF::map&quot;. If we write &quot;Compact&quot; there, then maybe there is an unwanted expensive operation there. Then, if I want to know the type of m_variables, I can look it up. What I know about &quot;variables&quot; is:

1) It is the result of WTF::map without any additional work being done to convert to another type.
2) it is something sortCompact can work on
3) it is something I can move into m_variables

The name of the type is less interesting to me than those three things. If we name the type, then I lose (1). And I have (2) and (3) no matter what type name we write.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1843022</commentid>
    <comment_count>15</comment_count>
    <who name="Darin Adler">darin</who>
    <bug_when>2022-02-17 12:03:47 -0800</bug_when>
    <thetext>those comments -&gt; my comments</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1843028</commentid>
    <comment_count>16</comment_count>
      <attachid>452305</attachid>
    <who name="Chris Dumez">cdumez</who>
    <bug_when>2022-02-17 12:12:58 -0800</bug_when>
    <thetext>Comment on attachment 452305
Patch

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

&gt;&gt; Source/JavaScriptCore/b3/air/AirCode.cpp:336
&gt;&gt; +    m_prologueGenerators = Vector { numEntryPoints, m_defaultPrologueGenerator.copyRef() };
&gt; 
&gt; Surprised we need to write Vector { } instead of just { } here.

Will fix.

&gt;&gt; Source/JavaScriptCore/parser/VariableEnvironment.cpp:222
&gt;&gt; +    Compact variables = WTF::map(env, [this](auto&amp; key) -&gt; PackedRefPtr&lt;UniquedStringImpl&gt; {
&gt; 
&gt; Could this have been &quot;auto&quot; instead of &quot;Compact&quot;?

Yes, will fix.

&gt;&gt; Source/WebCore/Modules/encryptedmedia/MediaKeySession.cpp:704
&gt;&gt; +        return std::make_pair(WTFMove(status.first), toMediaKeyStatus(status.second));
&gt; 
&gt; In new code we can use the std::pair deduction guide instead of the std::make_pair function.

Good point, will fix.

&gt;&gt; Source/WebCore/Modules/indexeddb/server/SQLiteIDBCursor.cpp:119
&gt;&gt; +    prefetchedRecords.reserveInitialCapacity(m_fetchedRecords.size());
&gt; 
&gt; Seems like this always reserves one too many.

Indeed, will fix.

&gt;&gt; Source/WebCore/Modules/indexeddb/server/SQLiteIDBCursor.cpp:130
&gt;&gt; +    prefetchedRecords.shrinkToFit();
&gt; 
&gt; When does shrinking happen automatically and when do we have to do it explicitly?

Shrinking doesn&apos;t happen automatically as far as I know. We should always be calling shrinkToFit() after reserving too much capacity if we&apos;re going to hang on to the Vector for an extended period of time.
The only operations on the Vector that seem to shrink the capacity are:
- clear(): which sets the capacity to 0.
- shrinkCapacity(size_t) / shrinkToFit.

&gt;&gt; Source/WebCore/bindings/js/SerializedScriptValue.cpp:2465
&gt;&gt;          str = String::adopt(WTFMove(buffer));
&gt; 
&gt; Using a Vector&lt;UChar&gt; to make a String is an archaic idiom. Given that we know the length up front we could use String::createUninitialized and it will be both faster and use less memory. Or if we think there’s a chance we’ll end up with a string that can be 8-bit we could write a version that uses something like StringBuilder. We should probably delete String::adopt(Vector&amp;&amp;) at some point. I think it’s almost never the right thing.

Ok, will use String::createUninitialized().

&gt;&gt; Source/WebCore/css/StyleProperties.cpp:1809
&gt;&gt;      m_tokens.append(range.begin(), length);
&gt; 
&gt; I guess you did your research on this, but are you sure this reserve had no benefit? Maybe this could be changed to use construction instead of append? Something like this:
&gt; 
&gt;     , m_tokens(range.begin(), range.end() - range.begin())
&gt; 
&gt; Or maybe we will be adding more later and append is the better pattern?

1. Yes, reserving capacity for |length| and appending raw data of size |length| is not useful. The first think append(U*, size_t length) will do is reserve capacity for length. It would be a pretty bad implementation of append() if it didn&apos;t reserve capacity, even though it is given the length.

2. You&apos;re totally right, I should leverage the corresponding Vector and move to the initializer list. I&apos;ll do that.

&gt;&gt; Source/WebCore/css/StyleRule.cpp:372
&gt;&gt;      m_tokens.append(range.begin(), length);
&gt; 
&gt; Ditto.

Will move to the initializer list and use the Vector constructor indeed.

&gt;&gt; Source/WebCore/css/calc/CSSCalcValue.cpp:76
&gt;&gt;      return values;
&gt; 
&gt; When I made the Cocoa equivalent of WTF::map, WTF::makeVector(NSArray *), I made it work with optional values so we could do operations like this one without writing a loop. I guess WTF::map doesn’t offer that?

Sadly, WTF::map() doesn&apos;t seem to have this functionality, I have just checked.

&gt;&gt; Source/WebCore/dom/ElementData.cpp:148
&gt;&gt; +    m_attributeVector.append(other.m_attributeArray, other.length());
&gt; 
&gt; Can we make this construction or assignment instead of append?

Yes, will fix.

&gt;&gt; Source/WebCore/loader/archive/cf/LegacyWebArchive.cpp:613
&gt;&gt; +    return create(iframeResource.releaseNonNull(), { }, Vector { archive.releaseNonNull() });
&gt; 
&gt; Do we need to write Vector?

Probably not, will fix.

&gt;&gt; Source/WebCore/page/IntersectionObserver.cpp:104
&gt;&gt; +        thresholds.append(initThreshold);
&gt; 
&gt; Should we use assignment instead of append here?

We could but there is no real perf benefit as far as I know.

&gt;&gt; Source/WebCore/platform/graphics/avfoundation/objc/CDMInstanceFairPlayStreamingAVFObjC.mm:909
&gt;&gt; +        KeyStatusVector keyStatuses { std::make_pair(WTFMove(keyIDs.first()), KeyStatus::Usable) };
&gt; 
&gt; Same deduction guide remark as above, std::pair, instead of std::make_pair might be good.

Will fix.

&gt;&gt; Source/WebCore/platform/graphics/ca/TileGrid.h:138
&gt;&gt; +    void removeTiles(const Vector&lt;TileGrid::TileIndex&gt;&amp; toRemove);
&gt; 
&gt; Maybe this should take a Span&lt;const TileGrid::TileIndex&gt; instead?

We could but there would be no clear benefit I think. All call sites have a Vector already and they could need to convert it to a Span (which admittedly is not hard or even verbose, but it is more code).

&gt;&gt; Source/WebCore/platform/network/CacheValidation.cpp:369
&gt;&gt; +    return varyValue.split(&apos;,&apos;).map([&amp;](auto&amp; varyHeaderName) {
&gt; 
&gt; Seems like we could use StringView::split here instead of String::split for better efficiency.

Ok but then it seems I am not longer able to use map() (even WTF::map() doesn&apos;t seem to work). I&apos;ll look into it though.

&gt;&gt; Source/WebCore/platform/text/LocaleICU.cpp:191
&gt;&gt; +    labels-&gt;reserveInitialCapacity(WTF_ARRAY_LENGTH(WTF::monthFullName));
&gt; 
&gt; Reflecting on the fact that we can use std::size instead of WTF_ARRAY_LENGTH in new code.

Will switch to std::size().

&gt;&gt; Source/WebCore/platform/text/LocaleICU.cpp:192
&gt;&gt;      for (unsigned i = 0; i &lt; WTF_ARRAY_LENGTH(WTF::monthFullName); ++i)
&gt; 
&gt; Could just use a modern for loop I think. Maybe WTF::map can work with arrays?

WTF::map() doesn&apos;t work on arrays (it tries to call `.size()` on the container).

Also note this is code that doesn&apos;t build for Cocoa ports.

&gt;&gt; Source/WebCore/platform/text/LocaleICU.cpp:212
&gt;&gt; +    return makeUnique&lt;Vector&lt;String&gt;&gt;(Vector&lt;String&gt;::from(&quot;AM&quot;_str, &quot;PM&quot;_str));
&gt; 
&gt; I wish I understood when to use &quot;&quot;_s and when to use &quot;&quot;_str.

&quot;AM&quot;_str gives me a String. &quot;AM&quot;_s gives me an ASCIILiteral. Here we want a Vector of Strings so I felt it made sense. That said, it compiler may have happily converted my ASCIILiteral to Strings upon construction here, I haven&apos;t tried.

&gt;&gt; Source/WebCore/platform/text/LocaleNone.cpp:141
&gt;&gt; +    m_timeAMPMLabels.uncheckedAppend(&quot;PM&quot;);
&gt; 
&gt; If we aren’t changing this to reserveInitialCapacity, then it’s not OK to change the calls below to uncheckedAppend. If there is already something in the vector, then reserving 2 does not make it safe to append 2. If there is a guarantee the vector is empty, then reserveInitialCapacity is what we want.

The function returns early `if (!m_timeAMPMLabels.isEmpty()) a few lines above. Thus, my change is safe.

Even though the Vector is guaranteed to be empty, I don&apos;t think there is any guarantee that no capacity has ever been reserved for it (since I didn&apos;t just construct the Vector). As a result, I worry that switching to reserveInitialCapacity() would be unsafe.

&gt;&gt; Source/WebCore/platform/text/cocoa/LocaleCocoa.mm:113
&gt;&gt; +            m_monthLabels.uncheckedAppend(String([array objectAtIndex:i]));
&gt; 
&gt; I think this can just be:
&gt; 
&gt;     m_monthLabels = makeVector(array);

I have to use `makeVector&lt;String&gt;(array)` but yes. Fixing.

&gt;&gt; Source/WebCore/platform/text/cocoa/LocaleCocoa.mm:207
&gt;&gt; +            m_shortMonthLabels.uncheckedAppend([array objectAtIndex:i]);
&gt; 
&gt; Ditto.

Will fix.

&gt;&gt; Source/WebCore/platform/text/cocoa/LocaleCocoa.mm:223
&gt;&gt; +            m_standAloneMonthLabels.uncheckedAppend([array objectAtIndex:i]);
&gt; 
&gt; Ditto.

Will fix.

&gt;&gt; Source/WebCore/platform/text/cocoa/LocaleCocoa.mm:238
&gt;&gt; +            m_shortStandAloneMonthLabels.uncheckedAppend([array objectAtIndex:i]);
&gt; 
&gt; Ditto.

Will fix.

&gt;&gt; Source/WebCore/platform/text/cocoa/LocaleCocoa.mm:252
&gt;&gt; +    m_timeAMPMLabels.uncheckedAppend([formatter PMSymbol]);
&gt; 
&gt; If we aren’t changing this to reserveInitialCapacity, then it’s not OK to change the calls below to uncheckedAppend. If there is already something in the vector, then reserving 2 does not make it safe to append 2. If there is a guarantee the vector is empty, then reserveInitialCapacity is what we want.

Same comments as above: The function returns early `if (!m_timeAMPMLabels.isEmpty())`. That said, being empty is different than not having any capacity.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1843034</commentid>
    <comment_count>17</comment_count>
    <who name="Chris Dumez">cdumez</who>
    <bug_when>2022-02-17 12:18:01 -0800</bug_when>
    <thetext>Reopening to attach new patch.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1843035</commentid>
    <comment_count>18</comment_count>
      <attachid>452406</attachid>
    <who name="Chris Dumez">cdumez</who>
    <bug_when>2022-02-17 12:18:07 -0800</bug_when>
    <thetext>Created attachment 452406
Follow-up</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1843038</commentid>
    <comment_count>19</comment_count>
      <attachid>452305</attachid>
    <who name="Darin Adler">darin</who>
    <bug_when>2022-02-17 12:19:58 -0800</bug_when>
    <thetext>Comment on attachment 452305
Patch

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

&gt;&gt;&gt; Source/WebCore/Modules/indexeddb/server/SQLiteIDBCursor.cpp:130
&gt;&gt;&gt; +    prefetchedRecords.shrinkToFit();
&gt;&gt; 
&gt;&gt; When does shrinking happen automatically and when do we have to do it explicitly?
&gt; 
&gt; Shrinking doesn&apos;t happen automatically as far as I know. We should always be calling shrinkToFit() after reserving too much capacity if we&apos;re going to hang on to the Vector for an extended period of time.
&gt; The only operations on the Vector that seem to shrink the capacity are:
&gt; - clear(): which sets the capacity to 0.
&gt; - shrinkCapacity(size_t) / shrinkToFit.

Memory is dim, but I seem to remember that Simon Fraser added code so that we’d shrink in some cases when returning values from functions in an idiomatic way. I can’t find the code, maybe he remembers what he did.

&gt;&gt;&gt; Source/WebCore/css/calc/CSSCalcValue.cpp:76
&gt;&gt;&gt;      return values;
&gt;&gt; 
&gt;&gt; When I made the Cocoa equivalent of WTF::map, WTF::makeVector(NSArray *), I made it work with optional values so we could do operations like this one without writing a loop. I guess WTF::map doesn’t offer that?
&gt; 
&gt; Sadly, WTF::map() doesn&apos;t seem to have this functionality, I have just checked.

Found it. It’s called compactMap.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1843044</commentid>
    <comment_count>20</comment_count>
    <who name="Chris Dumez">cdumez</who>
    <bug_when>2022-02-17 12:24:16 -0800</bug_when>
    <thetext>(In reply to Darin Adler from comment #19)
&gt; Comment on attachment 452305 [details]
&gt; Patch
&gt; 
&gt; View in context:
&gt; https://bugs.webkit.org/attachment.cgi?id=452305&amp;action=review
&gt; 
&gt; &gt;&gt;&gt; Source/WebCore/Modules/indexeddb/server/SQLiteIDBCursor.cpp:130
&gt; &gt;&gt;&gt; +    prefetchedRecords.shrinkToFit();
&gt; &gt;&gt; 
&gt; &gt;&gt; When does shrinking happen automatically and when do we have to do it explicitly?
&gt; &gt; 
&gt; &gt; Shrinking doesn&apos;t happen automatically as far as I know. We should always be calling shrinkToFit() after reserving too much capacity if we&apos;re going to hang on to the Vector for an extended period of time.
&gt; &gt; The only operations on the Vector that seem to shrink the capacity are:
&gt; &gt; - clear(): which sets the capacity to 0.
&gt; &gt; - shrinkCapacity(size_t) / shrinkToFit.
&gt; 
&gt; Memory is dim, but I seem to remember that Simon Fraser added code so that
&gt; we’d shrink in some cases when returning values from functions in an
&gt; idiomatic way. I can’t find the code, maybe he remembers what he did.

I found:
Author: simon.fraser@apple.com &lt;simon.fraser@apple.com@268f45cc-cd09-0410-ab3c-d52691b4dbfc&gt;
Date:   Thu Apr 8 16:14:00 2021 +0000

    Copy-constructed Vectors should not have excess capacity
    https://bugs.webkit.org/show_bug.cgi?id=224313

Must be what you&apos;re referring to as I couldn&apos;t find anything else.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1843050</commentid>
    <comment_count>21</comment_count>
    <who name="Chris Dumez">cdumez</who>
    <bug_when>2022-02-17 12:27:41 -0800</bug_when>
    <thetext>(In reply to Darin Adler from comment #19)
&gt; Comment on attachment 452305 [details]
&gt; Patch
&gt; 
&gt; View in context:
&gt; https://bugs.webkit.org/attachment.cgi?id=452305&amp;action=review
&gt; 
&gt; &gt;&gt;&gt; Source/WebCore/Modules/indexeddb/server/SQLiteIDBCursor.cpp:130
&gt; &gt;&gt;&gt; +    prefetchedRecords.shrinkToFit();
&gt; &gt;&gt; 
&gt; &gt;&gt; When does shrinking happen automatically and when do we have to do it explicitly?
&gt; &gt; 
&gt; &gt; Shrinking doesn&apos;t happen automatically as far as I know. We should always be calling shrinkToFit() after reserving too much capacity if we&apos;re going to hang on to the Vector for an extended period of time.
&gt; &gt; The only operations on the Vector that seem to shrink the capacity are:
&gt; &gt; - clear(): which sets the capacity to 0.
&gt; &gt; - shrinkCapacity(size_t) / shrinkToFit.
&gt; 
&gt; Memory is dim, but I seem to remember that Simon Fraser added code so that
&gt; we’d shrink in some cases when returning values from functions in an
&gt; idiomatic way. I can’t find the code, maybe he remembers what he did.
&gt; 
&gt; &gt;&gt;&gt; Source/WebCore/css/calc/CSSCalcValue.cpp:76
&gt; &gt;&gt;&gt;      return values;
&gt; &gt;&gt; 
&gt; &gt;&gt; When I made the Cocoa equivalent of WTF::map, WTF::makeVector(NSArray *), I made it work with optional values so we could do operations like this one without writing a loop. I guess WTF::map doesn’t offer that?
&gt; &gt; 
&gt; &gt; Sadly, WTF::map() doesn&apos;t seem to have this functionality, I have just checked.
&gt; 
&gt; Found it. It’s called compactMap.

Great, I&apos;ll look into using compactMap() more in a follow-up then.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1843060</commentid>
    <comment_count>22</comment_count>
      <attachid>452413</attachid>
    <who name="Chris Dumez">cdumez</who>
    <bug_when>2022-02-17 12:33:54 -0800</bug_when>
    <thetext>Created attachment 452413
Patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1843072</commentid>
    <comment_count>23</comment_count>
      <attachid>452413</attachid>
    <who name="Darin Adler">darin</who>
    <bug_when>2022-02-17 12:45:32 -0800</bug_when>
    <thetext>Comment on attachment 452413
Patch

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

Need to upload a fixed version

&gt; Source/JavaScriptCore/parser/VariableEnvironment.cpp:222
&gt; -    Compact variables = WTF::map(env, [this](auto&amp; key) -&gt; PackedRefPtr&lt;UniquedStringImpl&gt; {
&gt; +    auto variables = WTF::map(env, [this](auto&amp; key) -&gt; PackedRefPtr&lt;UniquedStringImpl&gt; {

I feel guilty pushing for auto here since Eric explained how he doesn’t like it.

&gt; Source/WebCore/bindings/js/SerializedScriptValue.cpp:2460
&gt; +        for (unsigned i = 0; i &lt; length; !!i) {

!!i</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1843075</commentid>
    <comment_count>24</comment_count>
    <who name="Chris Dumez">cdumez</who>
    <bug_when>2022-02-17 12:49:49 -0800</bug_when>
    <thetext>(In reply to Darin Adler from comment #23)
&gt; Comment on attachment 452413 [details]
&gt; Patch
&gt; 
&gt; View in context:
&gt; https://bugs.webkit.org/attachment.cgi?id=452413&amp;action=review
&gt; 
&gt; Need to upload a fixed version
&gt; 
&gt; &gt; Source/JavaScriptCore/parser/VariableEnvironment.cpp:222
&gt; &gt; -    Compact variables = WTF::map(env, [this](auto&amp; key) -&gt; PackedRefPtr&lt;UniquedStringImpl&gt; {
&gt; &gt; +    auto variables = WTF::map(env, [this](auto&amp; key) -&gt; PackedRefPtr&lt;UniquedStringImpl&gt; {
&gt; 
&gt; I feel guilty pushing for auto here since Eric explained how he doesn’t like
&gt; it.

I can revert that part. That said, my personal preference is also to use auto here. I know that WTF::map() always returns a Vector&lt;&gt;. If I am curious what kind of vector, I can always look at what the lambda returns (in some cases it is even super obvious because the lambda has `-&gt; ReturnsType`.

&gt; &gt; Source/WebCore/bindings/js/SerializedScriptValue.cpp:2460
&gt; &gt; +        for (unsigned i = 0; i &lt; length; !!i) {
&gt; 
&gt; !!i

Wow, seriously bad typo :S</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1843076</commentid>
    <comment_count>25</comment_count>
      <attachid>452413</attachid>
    <who name="Darin Adler">darin</who>
    <bug_when>2022-02-17 12:51:05 -0800</bug_when>
    <thetext>Comment on attachment 452413
Patch

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

&gt; Source/WebCore/dom/ElementData.cpp:147
&gt;      m_inlineStyle = other.m_inlineStyle;

Shouldn’t this use construction syntax too?

&gt; Source/WebCore/platform/network/CacheValidation.cpp:373
&gt; +        varyHeaders.append(std::pair { headerName.toString(), headerValueForVaryFunction(headerName) });

We end up turning the headerName into a string twice here in many cases, once here and once inside headerValueForVary. Sorry I pushed you in this direction. Not sure that is better.

&gt; Source/WebCore/platform/text/LocaleICU.cpp:191
&gt;      labels-&gt;reserveInitialCapacity(WTF_ARRAY_LENGTH(WTF::monthFullName));

std::size

&gt; Source/WebCore/platform/text/LocaleICU.cpp:193
&gt; -    for (unsigned i = 0; i &lt; WTF_ARRAY_LENGTH(WTF::monthFullName); ++i)
&gt; +    for (unsigned i = 0; i &lt; std::size(WTF::monthFullName); ++i)
&gt;          labels-&gt;uncheckedAppend(WTF::monthFullName[i]);

How about just using a modern for loop here instead?

&gt; Source/WebCore/platform/text/LocaleNone.cpp:121
&gt; +    for (unsigned i = 0; i &lt; std::size(WTF::monthName); ++i)
&gt;          m_shortMonthLabels.uncheckedAppend(WTF::monthName[i]);

How about just using a modern for loop here instead?</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1843077</commentid>
    <comment_count>26</comment_count>
      <attachid>452413</attachid>
    <who name="Chris Dumez">cdumez</who>
    <bug_when>2022-02-17 12:53:30 -0800</bug_when>
    <thetext>Comment on attachment 452413
Patch

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

&gt;&gt; Source/WebCore/dom/ElementData.cpp:147
&gt;&gt;      m_inlineStyle = other.m_inlineStyle;
&gt; 
&gt; Shouldn’t this use construction syntax too?

This is a protected base class data member, I don&apos;t think that would work?</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1843080</commentid>
    <comment_count>27</comment_count>
      <attachid>452413</attachid>
    <who name="Chris Dumez">cdumez</who>
    <bug_when>2022-02-17 12:57:59 -0800</bug_when>
    <thetext>Comment on attachment 452413
Patch

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

&gt;&gt; Source/WebCore/platform/network/CacheValidation.cpp:373
&gt;&gt; +        varyHeaders.append(std::pair { headerName.toString(), headerValueForVaryFunction(headerName) });
&gt; 
&gt; We end up turning the headerName into a string twice here in many cases, once here and once inside headerValueForVary. Sorry I pushed you in this direction. Not sure that is better.

headerValueForVary() only calls toStringWithoutCopying() though? I would assume that&apos;s cheap.

An alternative would be to keep using a StringView until we&apos;re done stripping and only covert to a String then (keep using a String for headerValueForVaryFunction / headerValueForVary).</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1843082</commentid>
    <comment_count>28</comment_count>
      <attachid>452420</attachid>
    <who name="Chris Dumez">cdumez</who>
    <bug_when>2022-02-17 13:05:25 -0800</bug_when>
    <thetext>Created attachment 452420
Patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1843123</commentid>
    <comment_count>29</comment_count>
      <attachid>452434</attachid>
    <who name="Chris Dumez">cdumez</who>
    <bug_when>2022-02-17 14:32:13 -0800</bug_when>
    <thetext>Created attachment 452434
Follow-up</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1843226</commentid>
    <comment_count>30</comment_count>
    <who name="Chris Dumez">cdumez</who>
    <bug_when>2022-02-17 18:28:49 -0800</bug_when>
    <thetext>I don&apos;t think there is anything controversial anymore in this latest iteration.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1843251</commentid>
    <comment_count>31</comment_count>
      <attachid>452434</attachid>
    <who name="Darin Adler">darin</who>
    <bug_when>2022-02-17 19:42:30 -0800</bug_when>
    <thetext>Comment on attachment 452434
Follow-up

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

&gt; Source/WebCore/css/calc/CSSCalcValue.cpp:72
&gt;          if (auto cssNode = createCSS(*node, style))
&gt; -            values.uncheckedAppend(cssNode.releaseNonNull());
&gt; -    }
&gt; -    values.shrinkToFit();
&gt; -    return values;
&gt; +            return cssNode.releaseNonNull();
&gt; +        return nullptr;

return createCSS(*node, style);</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1843255</commentid>
    <comment_count>32</comment_count>
    <who name="Chris Dumez">cdumez</who>
    <bug_when>2022-02-17 19:47:01 -0800</bug_when>
    <thetext>Committed r290108 (247454@trunk): &lt;https://commits.webkit.org/247454@trunk&gt;</thetext>
  </long_desc>
      
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>452289</attachid>
            <date>2022-02-16 19:23:28 -0800</date>
            <delta_ts>2022-02-16 19:41:59 -0800</delta_ts>
            <desc>Patch</desc>
            <filename>bug-236748-20220216192327.patch</filename>
            <type>text/plain</type>
            <size>221037</size>
            <attacher name="Chris Dumez">cdumez</attacher>
            
              <data encoding="base64">U3VidmVyc2lvbiBSZXZpc2lvbjogMjg5OTQyCmRpZmYgLS1naXQgYS9Tb3VyY2UvSmF2YVNjcmlw
dENvcmUvQ2hhbmdlTG9nIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL0NoYW5nZUxvZwppbmRleCA0
OWNjYjA4N2ZhNWExNDg1MDNiNjZiNDQzOTEyMDNkOTVmMzFlMWQzLi4zZGZmZWU1M2RmZGNhZTM4
MDczYWVmODU3MmI1NzU4YTE0ZjE0MzFkIDEwMDY0NAotLS0gYS9Tb3VyY2UvSmF2YVNjcmlwdENv
cmUvQ2hhbmdlTG9nCisrKyBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9DaGFuZ2VMb2cKQEAgLTEs
MyArMSw0NiBAQAorMjAyMi0wMi0xNiAgQ2hyaXMgRHVtZXogIDxjZHVtZXpAYXBwbGUuY29tPgor
CisgICAgICAgIENsZWFuIHVwIC8gb3B0aW1pemUgY2FsbCBzaXRlcyBjb25zdHJ1Y3RpbmcgdmVj
dG9ycworICAgICAgICBodHRwczovL2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9MjM2
NzQ4CisKKyAgICAgICAgUmV2aWV3ZWQgYnkgTk9CT0RZIChPT1BTISkuCisKKyAgICAgICAgQ2xl
YW4gdXAgLyBvcHRpbWl6ZSBjYWxsIHNpdGVzIGNvbnN0cnVjdGluZyB2ZWN0b3JzOgorICAgICAg
ICAtIFVzZSBWZWN0b3I6Om1hcCgpIC8gV1RGOjptYXAoKSB3aGVyZSBhcHByb3ByaWF0ZQorICAg
ICAgICAtIFJlcGxhY2UgVmVjdG9yOjpyZXNlcnZlQ2FwYWNpdHkoKSB3aXRoIFZlY3Rvcjo6cmVz
ZXJ2ZUluaXRpYWxDYXBhY2l0eSgpCisgICAgICAgICAgd2hlcmUgYXBwcm9wcmlhdGUKKyAgICAg
ICAgLSBSZXBsYWNlIFZlY3Rvcjo6YXBwZW5kKCkgd2l0aCBWZWN0b3I6OnVuY2hlY2tlZEFwcGVu
ZCgpIHdoZXJlIGFwcHJvcHJpYXRlCisgICAgICAgIC0gTGV2ZXJhZ2UgdGhlIGZhY3QgdGhhdCBW
ZWN0b3I8UmVmPEZvbz4+IGlzIG5vdyBjb3B5YWJsZSAoQmVjYXVzZSBSZWY8PiBub3cgaGFzCisg
ICAgICAgICAgYSBjb3B5IGNvbnN0cnVjdG9yKQorICAgICAgICAtIENhbGwgY3Jvc3NUaHJlYWRD
b3B5KCkgdG8gaXNvbGF0ZS1jb3B5IGEgVmVjdG9yKCkgd2l0aG91dCBpdGVyYXRpbmcuCisgICAg
ICAgIC0gTGV2ZXJhZ2UgVmVjdG9yIGNvbnN0cnVjdG9yIHRoYXQgdGFrZXMgaW4gYW4gaW50aWFs
aXphdGlvbiBsaXN0IGluIG1vcmUgY2FzZXMKKyAgICAgICAgLSBMZXZlcmFnZSBWZWN0b3I6OmZy
b20oKSBpbiBtb3JlIGNhc2VzIHRvIHNpbXBsaWZ5IHZlY3RvciBjb25zdHJ1Y3Rpb24gaW4gc29t
ZQorICAgICAgICAgIGNhc2UuCisgICAgICAgIC0gRHJvcCB1bm5lY2Vzc2FyeSBjYWxscyB0byBW
ZWN0b3I6OnJlc2VydmUqQ2FwYWNpdHkoKSBiZWZvcmUgY2FsbGluZworICAgICAgICAgIFZlY3Rv
cjo6YXBwZW5kKFQqLCBzaXplX3QpIHNpbmNlIHRoZSBhcHBlbmQoKSBpbXBsZW1lbnRhdGlvbiBh
bHJlYWR5IGRvZXMgdGhpcworICAgICAgICAgIGZvciB1cy4KKyAgICAgICAgLSBMZXZlcmFnZSBj
b3B5VG9WZWN0b3IoKSBhbmQgY29weVRvVmVjdG9yT2Y8PiBpbiBtb3JlIGNhc2VzCisgICAgICAg
IC0gQ2FsbCBzaHJpbmtUb0ZpdCgpIGluIHNvbWUgY2FzZXMgd2hlcmUgd2UgcmVzZXJ2ZSBjYXBh
Y2l0eSBhbmQgdGhlbiBhcHBlbmQoKQorICAgICAgICAgIGJ1dCBtYXkgbm90IGFwcGVuZCgpIGFz
IG11Y2ggYXMgd2UgcmVzZXJ2ZWQuCisKKyAgICAgICAgKiBiMy9haXIvQWlyQ29kZS5jcHA6Cisg
ICAgICAgIChKU0M6OkIzOjpBaXI6OkNvZGU6OnNldE51bUVudHJ5cG9pbnRzKToKKyAgICAgICAg
KiBieXRlY29tcGlsZXIvTm9kZXNDb2RlZ2VuLmNwcDoKKyAgICAgICAgKEpTQzo6QXJyYXlQYXR0
ZXJuTm9kZTo6ZW1pdERpcmVjdEJpbmRpbmcpOgorICAgICAgICAqIGRmZy9ERkdJblBsYWNlQWJz
dHJhY3RTdGF0ZS5jcHA6CisgICAgICAgIChKU0M6OkRGRzo6c2V0TGl2ZVZhbHVlcyk6CisgICAg
ICAgICogZGZnL0RGR0xpdmVuZXNzQW5hbHlzaXNQaGFzZS5jcHA6CisgICAgICAgICogZGZnL0RG
R1Njb3JlQm9hcmQuaDoKKyAgICAgICAgKEpTQzo6REZHOjpTY29yZUJvYXJkOjpTY29yZUJvYXJk
KToKKyAgICAgICAgKiBpbnNwZWN0b3IvYWdlbnRzL0luc3BlY3RvckRlYnVnZ2VyQWdlbnQuY3Bw
OgorICAgICAgICAoSW5zcGVjdG9yOjpwYXJzZUJyZWFrcG9pbnRPcHRpb25zKToKKyAgICAgICAg
KiBpbnNwZWN0b3IvcmVtb3RlL3NvY2tldC9SZW1vdGVJbnNwZWN0b3JNZXNzYWdlUGFyc2VyLmNw
cDoKKyAgICAgICAgKEluc3BlY3Rvcjo6TWVzc2FnZVBhcnNlcjo6cHVzaFJlY2VpdmVkRGF0YSk6
CisgICAgICAgICogcGFyc2VyL1ZhcmlhYmxlRW52aXJvbm1lbnQuY3BwOgorICAgICAgICAoSlND
OjpDb21wYWN0VERaRW52aXJvbm1lbnQ6OkNvbXBhY3RURFpFbnZpcm9ubWVudCk6CisgICAgICAg
ICogd2FzbS9XYXNtV29ya2xpc3QuY3BwOgorICAgICAgICAoSlNDOjpXYXNtOjpXb3JrbGlzdDo6
V29ya2xpc3QpOgorCiAyMDIyLTAyLTE1ICBNYXJrIExhbSAgPG1hcmsubGFtQGFwcGxlLmNvbT4K
IAogICAgICAgICBEZWZlciBUZXJtaW5hdGlvbnNFeGNlcHRpb25zIHdoaWxlIGluIG9wZXJhdGlv
bk1hdGVyaWFsaXplT2JqZWN0SW5PU1IuCmRpZmYgLS1naXQgYS9Tb3VyY2UvV1RGL0NoYW5nZUxv
ZyBiL1NvdXJjZS9XVEYvQ2hhbmdlTG9nCmluZGV4IGYyODZiOTRhZmQ3ZTJhMmFkODBkZGE1MDI0
NzliZWM3ZGU2YTA0ZjQuLjkxZGYzOGQxOWVkOTc3MzliYTI0NmFjYjcyNTdmNDYzM2I3YzZiMWQg
MTAwNjQ0Ci0tLSBhL1NvdXJjZS9XVEYvQ2hhbmdlTG9nCisrKyBiL1NvdXJjZS9XVEYvQ2hhbmdl
TG9nCkBAIC0xLDMgKzEsMzIgQEAKKzIwMjItMDItMTYgIENocmlzIER1bWV6ICA8Y2R1bWV6QGFw
cGxlLmNvbT4KKworICAgICAgICBDbGVhbiB1cCAvIG9wdGltaXplIGNhbGwgc2l0ZXMgY29uc3Ry
dWN0aW5nIHZlY3RvcnMKKyAgICAgICAgaHR0cHM6Ly9idWdzLndlYmtpdC5vcmcvc2hvd19idWcu
Y2dpP2lkPTIzNjc0OAorCisgICAgICAgIFJldmlld2VkIGJ5IE5PQk9EWSAoT09QUyEpLgorCisg
ICAgICAgIENsZWFuIHVwIC8gb3B0aW1pemUgY2FsbCBzaXRlcyBjb25zdHJ1Y3RpbmcgdmVjdG9y
czoKKyAgICAgICAgLSBVc2UgVmVjdG9yOjptYXAoKSAvIFdURjo6bWFwKCkgd2hlcmUgYXBwcm9w
cmlhdGUKKyAgICAgICAgLSBSZXBsYWNlIFZlY3Rvcjo6cmVzZXJ2ZUNhcGFjaXR5KCkgd2l0aCBW
ZWN0b3I6OnJlc2VydmVJbml0aWFsQ2FwYWNpdHkoKSAKKyAgICAgICAgICB3aGVyZSBhcHByb3By
aWF0ZQorICAgICAgICAtIFJlcGxhY2UgVmVjdG9yOjphcHBlbmQoKSB3aXRoIFZlY3Rvcjo6dW5j
aGVja2VkQXBwZW5kKCkgd2hlcmUgYXBwcm9wcmlhdGUKKyAgICAgICAgLSBMZXZlcmFnZSB0aGUg
ZmFjdCB0aGF0IFZlY3RvcjxSZWY8Rm9vPj4gaXMgbm93IGNvcHlhYmxlIChCZWNhdXNlIFJlZjw+
IG5vdyBoYXMKKyAgICAgICAgICBhIGNvcHkgY29uc3RydWN0b3IpCisgICAgICAgIC0gQ2FsbCBj
cm9zc1RocmVhZENvcHkoKSB0byBpc29sYXRlLWNvcHkgYSBWZWN0b3IoKSB3aXRob3V0IGl0ZXJh
dGluZy4KKyAgICAgICAgLSBMZXZlcmFnZSBWZWN0b3IgY29uc3RydWN0b3IgdGhhdCB0YWtlcyBp
biBhbiBpbnRpYWxpemF0aW9uIGxpc3QgaW4gbW9yZSBjYXNlcworICAgICAgICAtIExldmVyYWdl
IFZlY3Rvcjo6ZnJvbSgpIGluIG1vcmUgY2FzZXMgdG8gc2ltcGxpZnkgdmVjdG9yIGNvbnN0cnVj
dGlvbiBpbiBzb21lCisgICAgICAgICAgY2FzZS4KKyAgICAgICAgLSBEcm9wIHVubmVjZXNzYXJ5
IGNhbGxzIHRvIFZlY3Rvcjo6cmVzZXJ2ZSpDYXBhY2l0eSgpIGJlZm9yZSBjYWxsaW5nCisgICAg
ICAgICAgVmVjdG9yOjphcHBlbmQoVCosIHNpemVfdCkgc2luY2UgdGhlIGFwcGVuZCgpIGltcGxl
bWVudGF0aW9uIGFscmVhZHkgZG9lcyB0aGlzCisgICAgICAgICAgZm9yIHVzLgorICAgICAgICAt
IExldmVyYWdlIGNvcHlUb1ZlY3RvcigpIGFuZCBjb3B5VG9WZWN0b3JPZjw+IGluIG1vcmUgY2Fz
ZXMKKyAgICAgICAgLSBDYWxsIHNocmlua1RvRml0KCkgaW4gc29tZSBjYXNlcyB3aGVyZSB3ZSBy
ZXNlcnZlIGNhcGFjaXR5IGFuZCB0aGVuIGFwcGVuZCgpCisgICAgICAgICAgYnV0IG1heSBub3Qg
YXBwZW5kKCkgYXMgbXVjaCBhcyB3ZSByZXNlcnZlZC4gCisKKyAgICAgICAgKiB3dGYvTGFuZ3Vh
Z2UuY3BwOgorICAgICAgICAoV1RGOjp1c2VyUHJlZmVycmVkTGFuZ3VhZ2VzKToKKyAgICAgICAg
KFdURjo6aXNvbGF0ZWRDb3B5KTogRGVsZXRlZC4KKwogMjAyMi0wMi0xNiAgRWxpb3QgSHN1ICA8
ZWxpb3RfaHN1QGFwcGxlLmNvbT4KIAogICAgICAgICBNb3ZlIFNhZmUgQnJvd3Npbmcga25vd2xl
ZGdlIGludG8gU2FmYXJpU2FmZUJyb3dzaW5nIGZyYW1ld29yawpkaWZmIC0tZ2l0IGEvU291cmNl
L1dlYkNvcmUvQ2hhbmdlTG9nIGIvU291cmNlL1dlYkNvcmUvQ2hhbmdlTG9nCmluZGV4IDM5NjQw
ZmI3YjIxYjdkZDY0NTZkODY4YmQ1OTdkMDljYTkxYTljM2YuLmUzOTBmNzdmNTJlNzhhMjVhYWI4
MGZmMTgzZmEzYjlkMmQ3MjNmNGEgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL0NoYW5nZUxv
ZworKysgYi9Tb3VyY2UvV2ViQ29yZS9DaGFuZ2VMb2cKQEAgLTEsMyArMSwyNzYgQEAKKzIwMjIt
MDItMTYgIENocmlzIER1bWV6ICA8Y2R1bWV6QGFwcGxlLmNvbT4KKworICAgICAgICBDbGVhbiB1
cCAvIG9wdGltaXplIGNhbGwgc2l0ZXMgY29uc3RydWN0aW5nIHZlY3RvcnMKKyAgICAgICAgaHR0
cHM6Ly9idWdzLndlYmtpdC5vcmcvc2hvd19idWcuY2dpP2lkPTIzNjc0OAorCisgICAgICAgIFJl
dmlld2VkIGJ5IE5PQk9EWSAoT09QUyEpLgorCisgICAgICAgIENsZWFuIHVwIC8gb3B0aW1pemUg
Y2FsbCBzaXRlcyBjb25zdHJ1Y3RpbmcgdmVjdG9yczoKKyAgICAgICAgLSBVc2UgVmVjdG9yOjpt
YXAoKSAvIFdURjo6bWFwKCkgd2hlcmUgYXBwcm9wcmlhdGUKKyAgICAgICAgLSBSZXBsYWNlIFZl
Y3Rvcjo6cmVzZXJ2ZUNhcGFjaXR5KCkgd2l0aCBWZWN0b3I6OnJlc2VydmVJbml0aWFsQ2FwYWNp
dHkoKSAKKyAgICAgICAgICB3aGVyZSBhcHByb3ByaWF0ZQorICAgICAgICAtIFJlcGxhY2UgVmVj
dG9yOjphcHBlbmQoKSB3aXRoIFZlY3Rvcjo6dW5jaGVja2VkQXBwZW5kKCkgd2hlcmUgYXBwcm9w
cmlhdGUKKyAgICAgICAgLSBMZXZlcmFnZSB0aGUgZmFjdCB0aGF0IFZlY3RvcjxSZWY8Rm9vPj4g
aXMgbm93IGNvcHlhYmxlIChCZWNhdXNlIFJlZjw+IG5vdyBoYXMKKyAgICAgICAgICBhIGNvcHkg
Y29uc3RydWN0b3IpCisgICAgICAgIC0gQ2FsbCBjcm9zc1RocmVhZENvcHkoKSB0byBpc29sYXRl
LWNvcHkgYSBWZWN0b3IoKSB3aXRob3V0IGl0ZXJhdGluZy4KKyAgICAgICAgLSBMZXZlcmFnZSBW
ZWN0b3IgY29uc3RydWN0b3IgdGhhdCB0YWtlcyBpbiBhbiBpbnRpYWxpemF0aW9uIGxpc3QgaW4g
bW9yZSBjYXNlcworICAgICAgICAtIExldmVyYWdlIFZlY3Rvcjo6ZnJvbSgpIGluIG1vcmUgY2Fz
ZXMgdG8gc2ltcGxpZnkgdmVjdG9yIGNvbnN0cnVjdGlvbiBpbiBzb21lCisgICAgICAgICAgY2Fz
ZS4KKyAgICAgICAgLSBEcm9wIHVubmVjZXNzYXJ5IGNhbGxzIHRvIFZlY3Rvcjo6cmVzZXJ2ZSpD
YXBhY2l0eSgpIGJlZm9yZSBjYWxsaW5nCisgICAgICAgICAgVmVjdG9yOjphcHBlbmQoVCosIHNp
emVfdCkgc2luY2UgdGhlIGFwcGVuZCgpIGltcGxlbWVudGF0aW9uIGFscmVhZHkgZG9lcyB0aGlz
CisgICAgICAgICAgZm9yIHVzLgorICAgICAgICAtIExldmVyYWdlIGNvcHlUb1ZlY3RvcigpIGFu
ZCBjb3B5VG9WZWN0b3JPZjw+IGluIG1vcmUgY2FzZXMKKyAgICAgICAgLSBDYWxsIHNocmlua1Rv
Rml0KCkgaW4gc29tZSBjYXNlcyB3aGVyZSB3ZSByZXNlcnZlIGNhcGFjaXR5IGFuZCB0aGVuIGFw
cGVuZCgpCisgICAgICAgICAgYnV0IG1heSBub3QgYXBwZW5kKCkgYXMgbXVjaCBhcyB3ZSByZXNl
cnZlZC4gCisKKyAgICAgICAgKiBNb2R1bGVzL2FzeW5jLWNsaXBib2FyZC9DbGlwYm9hcmQuY3Bw
OgorICAgICAgICAoV2ViQ29yZTo6Q2xpcGJvYXJkOjpyZWFkKToKKyAgICAgICAgKFdlYkNvcmU6
OkNsaXBib2FyZDo6SXRlbVdyaXRlcjo6ZGlkU2V0QWxsRGF0YSk6CisgICAgICAgICogTW9kdWxl
cy9lbmNyeXB0ZWRtZWRpYS9NZWRpYUtleVNlc3Npb24uY3BwOgorICAgICAgICAoV2ViQ29yZTo6
TWVkaWFLZXlTZXNzaW9uOjp1cGRhdGVLZXlTdGF0dXNlcyk6CisgICAgICAgICogTW9kdWxlcy9l
bnRyaWVzYXBpL0ZpbGVTeXN0ZW1FbnRyaWVzQ2FsbGJhY2suY3BwOgorICAgICAgICAoV2ViQ29y
ZTo6RmlsZVN5c3RlbUVudHJpZXNDYWxsYmFjazo6c2NoZWR1bGVDYWxsYmFjayk6CisgICAgICAg
IChXZWJDb3JlOjpjb3B5VmVjdG9yKTogRGVsZXRlZC4KKyAgICAgICAgKiBNb2R1bGVzL2VudHJp
ZXNhcGkvSFRNTElucHV0RWxlbWVudEVudHJpZXNBUEkuY3BwOgorICAgICAgICAoV2ViQ29yZTo6
SFRNTElucHV0RWxlbWVudEVudHJpZXNBUEk6OndlYmtpdEVudHJpZXMpOgorICAgICAgICAqIE1v
ZHVsZXMvZ2VvbG9jYXRpb24vR2VvbG9jYXRpb25Db250cm9sbGVyLmNwcDoKKyAgICAgICAgKFdl
YkNvcmU6Okdlb2xvY2F0aW9uQ29udHJvbGxlcjo6cG9zaXRpb25DaGFuZ2VkKToKKyAgICAgICAg
KFdlYkNvcmU6Okdlb2xvY2F0aW9uQ29udHJvbGxlcjo6ZXJyb3JPY2N1cnJlZCk6CisgICAgICAg
ICogTW9kdWxlcy9pbmRleGVkZGIvSURCRGF0YWJhc2UuY3BwOgorICAgICAgICAoV2ViQ29yZTo6
SURCRGF0YWJhc2U6OnN0b3ApOgorICAgICAgICAqIE1vZHVsZXMvaW5kZXhlZGRiL0lEQkdldEFs
bFJlc3VsdC5jcHA6CisgICAgICAgIChXZWJDb3JlOjpJREJHZXRBbGxSZXN1bHQ6Omlzb2xhdGVk
Q29weSk6CisgICAgICAgICogTW9kdWxlcy9pbmRleGVkZGIvSURCR2V0UmVzdWx0LmNwcDoKKyAg
ICAgICAgKFdlYkNvcmU6OklEQkdldFJlc3VsdDo6aXNvbGF0ZWRDb3B5KToKKyAgICAgICAgKiBN
b2R1bGVzL2luZGV4ZWRkYi9JREJLZXlQYXRoLmNwcDoKKyAgICAgICAgKFdlYkNvcmU6Omlzb2xh
dGVkQ29weSk6IERlbGV0ZWQuCisgICAgICAgICogTW9kdWxlcy9pbmRleGVkZGIvSURCS2V5UGF0
aC5oOgorICAgICAgICAoV2ViQ29yZTo6aXNvbGF0ZWRDb3B5KTogRGVsZXRlZC4KKyAgICAgICAg
KiBNb2R1bGVzL2luZGV4ZWRkYi9JREJUcmFuc2FjdGlvbi5jcHA6CisgICAgICAgIChXZWJDb3Jl
OjpJREJUcmFuc2FjdGlvbjo6YWJvcnRJblByb2dyZXNzT3BlcmF0aW9ucyk6CisgICAgICAgICog
TW9kdWxlcy9pbmRleGVkZGIvY2xpZW50L0lEQkNvbm5lY3Rpb25Qcm94eS5jcHA6CisgICAgICAg
IChXZWJDb3JlOjpJREJDbGllbnQ6OnJlbW92ZUl0ZW1zTWF0Y2hpbmdDdXJyZW50VGhyZWFkKToK
KyAgICAgICAgKiBNb2R1bGVzL2luZGV4ZWRkYi9zZXJ2ZXIvTWVtb3J5T2JqZWN0U3RvcmUuY3Bw
OgorICAgICAgICAoV2ViQ29yZTo6SURCU2VydmVyOjpNZW1vcnlPYmplY3RTdG9yZTo6ZGVsZXRl
QWxsSW5kZXhlcyk6CisgICAgICAgICogTW9kdWxlcy9pbmRleGVkZGIvc2VydmVyL1NRTGl0ZUlE
QkN1cnNvci5jcHA6CisgICAgICAgIChXZWJDb3JlOjpJREJTZXJ2ZXI6OlNRTGl0ZUlEQkN1cnNv
cjo6Y3VycmVudERhdGEpOgorICAgICAgICAqIE1vZHVsZXMvaW5kZXhlZGRiL3NoYXJlZC9JREJE
YXRhYmFzZUluZm8uY3BwOgorICAgICAgICAoV2ViQ29yZTo6SURCRGF0YWJhc2VJbmZvOjpvYmpl
Y3RTdG9yZU5hbWVzIGNvbnN0KToKKyAgICAgICAgKiBNb2R1bGVzL2luZGV4ZWRkYi9zaGFyZWQv
SURCSW5kZXhJbmZvLmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OklEQkluZGV4SW5mbzo6aXNvbGF0
ZWRDb3B5IGNvbnN0KToKKyAgICAgICAgKiBNb2R1bGVzL2luZGV4ZWRkYi9zaGFyZWQvSURCT2Jq
ZWN0U3RvcmVJbmZvLmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OklEQk9iamVjdFN0b3JlSW5mbzo6
aXNvbGF0ZWRDb3B5IGNvbnN0KToKKyAgICAgICAgKFdlYkNvcmU6OklEQk9iamVjdFN0b3JlSW5m
bzo6aW5kZXhOYW1lcyBjb25zdCk6CisgICAgICAgICogTW9kdWxlcy9pbmRleGVkZGIvc2hhcmVk
L0lEQlRyYW5zYWN0aW9uSW5mby5jcHA6CisgICAgICAgIChXZWJDb3JlOjpJREJUcmFuc2FjdGlv
bkluZm86Omlzb2xhdGVkQ29weSk6CisgICAgICAgICogTW9kdWxlcy9pbmRleGVkZGIvc2hhcmVk
L0luZGV4S2V5LmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OkluZGV4S2V5Ojppc29sYXRlZENvcHkg
Y29uc3QpOgorICAgICAgICAqIE1vZHVsZXMvbWVkaWFzdHJlYW0vTWVkaWFTdHJlYW0uY3BwOgor
ICAgICAgICAoV2ViQ29yZTo6TWVkaWFTdHJlYW06OmNsb25lKToKKyAgICAgICAgKiBNb2R1bGVz
L21lZGlhc3RyZWFtL01lZGlhU3RyZWFtVHJhY2suY3BwOgorICAgICAgICAoV2ViQ29yZTo6Y2Fw
YWJpbGl0eVN0cmluZ1ZlY3Rvcik6CisgICAgICAgICogTW9kdWxlcy9tZWRpYXN0cmVhbS9NZWRp
YVRyYWNrQ29uc3RyYWludHMuY3BwOgorICAgICAgICAoV2ViQ29yZTo6Y29udmVydEFkdmFuY2Vk
VG9JbnRlcm5hbEZvcm0pOgorICAgICAgICAqIE1vZHVsZXMvbWVkaWFzdHJlYW0vU0ZyYW1lVXRp
bHMuY3BwOgorICAgICAgICAoV2ViQ29yZTo6dG9SYnNwKToKKyAgICAgICAgKiBNb2R1bGVzL3Jl
bW90ZXBsYXliYWNrL1JlbW90ZVBsYXliYWNrLmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OlJlbW90
ZVBsYXliYWNrOjphdmFpbGFiaWxpdHlDaGFuZ2VkKToKKyAgICAgICAgKiBNb2R1bGVzL3NwZWVj
aC9TcGVlY2hSZWNvZ25pdGlvbi5jcHA6CisgICAgICAgIChXZWJDb3JlOjpTcGVlY2hSZWNvZ25p
dGlvbjo6ZGlkUmVjZWl2ZVJlc3VsdCk6CisgICAgICAgICogTW9kdWxlcy93ZWJhdXRobi9jYm9y
L0NCT1JWYWx1ZS5jcHA6CisgICAgICAgIChjYm9yOjpDQk9SVmFsdWU6OkNCT1JWYWx1ZSk6Cisg
ICAgICAgICogTW9kdWxlcy93ZWJhdXRobi9maWRvL0F1dGhlbnRpY2F0b3JHZXRJbmZvUmVzcG9u
c2UuY3BwOgorICAgICAgICAoZmlkbzo6dG9BcnJheVZhbHVlKToKKyAgICAgICAgKiBNb2R1bGVz
L3dlYmF1dGhuL2ZpZG8vRGV2aWNlUmVxdWVzdENvbnZlcnRlci5jcHA6CisgICAgICAgIChmaWRv
Ojpjb252ZXJ0UGFyYW1ldGVyc1RvQ0JPUik6CisgICAgICAgICogTW9kdWxlcy93ZWJhdXRobi9m
aWRvL1Bpbi5jcHA6CisgICAgICAgIChmaWRvOjpwaW46OmVuY29kZVJhd1B1YmxpY0tleSk6Cisg
ICAgICAgICogTW9kdWxlcy93ZWJkYXRhYmFzZS9EYXRhYmFzZVRyYWNrZXIuY3BwOgorICAgICAg
ICAoV2ViQ29yZTo6RGF0YWJhc2VUcmFja2VyOjpkYXRhYmFzZU5hbWVzKToKKyAgICAgICAgKFdl
YkNvcmU6Omlzb2xhdGVkQ29weSk6IERlbGV0ZWQuCisgICAgICAgICogYWNjZXNzaWJpbGl0eS9B
WE9iamVjdENhY2hlLmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OkFYT2JqZWN0Q2FjaGU6Om5vdGlm
aWNhdGlvblBvc3RUaW1lckZpcmVkKToKKyAgICAgICAgKiBhY2Nlc3NpYmlsaXR5L2lzb2xhdGVk
dHJlZS9BWElzb2xhdGVkT2JqZWN0LmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OkFYSXNvbGF0ZWRP
YmplY3Q6OnNldE1hdGhzY3JpcHRzKToKKyAgICAgICAgKFdlYkNvcmU6OkFYSXNvbGF0ZWRPYmpl
Y3Q6OnNldE9iamVjdFZlY3RvclByb3BlcnR5KToKKyAgICAgICAgKiBhY2Nlc3NpYmlsaXR5L2lz
b2xhdGVkdHJlZS9BWElzb2xhdGVkVHJlZS5jcHA6CisgICAgICAgIChXZWJDb3JlOjpBWElzb2xh
dGVkVHJlZTo6b2JqZWN0c0ZvcklEcyBjb25zdCk6CisgICAgICAgIChXZWJDb3JlOjpBWElzb2xh
dGVkVHJlZTo6Y29sbGVjdE5vZGVDaGFuZ2VzRm9yU3VidHJlZSk6CisgICAgICAgICogYW5pbWF0
aW9uL0NTU1Byb3BlcnR5QW5pbWF0aW9uLmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OkNTU1Byb3Bl
cnR5QW5pbWF0aW9uV3JhcHBlck1hcDo6Q1NTUHJvcGVydHlBbmltYXRpb25XcmFwcGVyTWFwKToK
KyAgICAgICAgKiBiaW5kaW5ncy9qcy9TZXJpYWxpemVkU2NyaXB0VmFsdWUuY3BwOgorICAgICAg
ICAoV2ViQ29yZTo6Q2xvbmVEZXNlcmlhbGl6ZXI6OnJlYWRTdHJpbmcpOgorICAgICAgICAoV2Vi
Q29yZTo6U2VyaWFsaXplZFNjcmlwdFZhbHVlOjpibG9iVVJMcyBjb25zdCk6CisgICAgICAgICog
Y3J5cHRvL21hYy9DcnlwdG9BbGdvcml0aG1FQ0RTQU1hYy5jcHA6CisgICAgICAgIChXZWJDb3Jl
OjpzaWduRUNEU0EpOgorICAgICAgICAoV2ViQ29yZTo6dmVyaWZ5RUNEU0EpOgorICAgICAgICAq
IGNyeXB0by9tYWMvQ3J5cHRvS2V5RUNNYWMuY3BwOgorICAgICAgICAoV2ViQ29yZTo6Q3J5cHRv
S2V5RUM6OnBsYXRmb3JtRXhwb3J0U3BraSBjb25zdCk6CisgICAgICAgIChXZWJDb3JlOjpDcnlw
dG9LZXlFQzo6cGxhdGZvcm1FeHBvcnRQa2NzOCBjb25zdCk6CisgICAgICAgICogY3J5cHRvL21h
Yy9DcnlwdG9LZXlSU0FNYWMuY3BwOgorICAgICAgICAoV2ViQ29yZTo6Q3J5cHRvS2V5UlNBOjpl
eHBvcnRTcGtpIGNvbnN0KToKKyAgICAgICAgKFdlYkNvcmU6OkNyeXB0b0tleVJTQTo6ZXhwb3J0
UGtjczggY29uc3QpOgorICAgICAgICAqIGNzcy9DU1NCYXNpY1NoYXBlcy5jcHA6CisgICAgICAg
IChXZWJDb3JlOjpDU1NCYXNpY1NoYXBlUG9seWdvbjo6Y3NzVGV4dCBjb25zdCk6CisgICAgICAg
ICogY3NzL0NTU0NvbXB1dGVkU3R5bGVEZWNsYXJhdGlvbi5jcHA6CisgICAgICAgIChXZWJDb3Jl
OjpDb21wdXRlZFN0eWxlRXh0cmFjdG9yOjpjb3B5UHJvcGVydGllc0luU2V0KToKKyAgICAgICAg
KFdlYkNvcmU6OkNvbXB1dGVkU3R5bGVFeHRyYWN0b3I6OmNvcHlQcm9wZXJ0aWVzKToKKyAgICAg
ICAgKiBjc3MvQ1NTRm9udEZhY2UuY3BwOgorICAgICAgICAoV2ViQ29yZTo6aXRlcmF0ZUNsaWVu
dHMpOgorICAgICAgICAqIGNzcy9DU1NGb250RmFjZVNldC5jcHA6CisgICAgICAgIChXZWJDb3Jl
OjpDU1NGb250RmFjZVNldDo6bWF0Y2hpbmdGYWNlc0V4Y2x1ZGluZ1ByZWluc3RhbGxlZEZvbnRz
KToKKyAgICAgICAgKFdlYkNvcmU6OkNTU0ZvbnRGYWNlU2V0Ojpmb250RmFjZSk6CisgICAgICAg
ICogY3NzL0NTU0tleWZyYW1lc1J1bGUuY3BwOgorICAgICAgICAoV2ViQ29yZTo6U3R5bGVSdWxl
S2V5ZnJhbWVzOjpTdHlsZVJ1bGVLZXlmcmFtZXMpOgorICAgICAgICAqIGNzcy9TdHlsZVByb3Bl
cnRpZXMuY3BwOgorICAgICAgICAoV2ViQ29yZTo6U3R5bGVQcm9wZXJ0aWVzOjpjb3B5UHJvcGVy
dGllc0luU2V0IGNvbnN0KToKKyAgICAgICAgKFdlYkNvcmU6OkRlZmVycmVkU3R5bGVQcm9wZXJ0
aWVzOjpEZWZlcnJlZFN0eWxlUHJvcGVydGllcyk6CisgICAgICAgICogY3NzL1N0eWxlUnVsZS5j
cHA6CisgICAgICAgIChXZWJDb3JlOjpEZWZlcnJlZFN0eWxlR3JvdXBSdWxlTGlzdDo6RGVmZXJy
ZWRTdHlsZUdyb3VwUnVsZUxpc3QpOgorICAgICAgICAoV2ViQ29yZTo6U3R5bGVSdWxlR3JvdXA6
OlN0eWxlUnVsZUdyb3VwKToKKyAgICAgICAgKiBjc3MvY2FsYy9DU1NDYWxjT3BlcmF0aW9uTm9k
ZS5oOgorICAgICAgICAqIGNzcy9jYWxjL0NTU0NhbGNWYWx1ZS5jcHA6CisgICAgICAgIChXZWJD
b3JlOjpjcmVhdGVDU1MpOgorICAgICAgICAqIGRpc3BsYXkvY3NzL0Rpc3BsYXlCb3hEZWNvcmF0
aW9uUGFpbnRlci5jcHA6CisgICAgICAgIChXZWJDb3JlOjpEaXNwbGF5OjpCb3JkZXJQYWludGVy
OjpjbGlwQm9yZGVyU2lkZVBvbHlnb24gY29uc3QpOgorICAgICAgICAoV2ViQ29yZTo6RGlzcGxh
eTo6Qm9yZGVyUGFpbnRlcjo6ZHJhd0xpbmVGb3JCb3hTaWRlIGNvbnN0KToKKyAgICAgICAgKiBk
b20vRE9NUmVjdExpc3QuY3BwOgorICAgICAgICAoV2ViQ29yZTo6RE9NUmVjdExpc3Q6OkRPTVJl
Y3RMaXN0KToKKyAgICAgICAgKiBkb20vRG9jdW1lbnQuY3BwOgorICAgICAgICAoV2ViQ29yZTo6
RG9jdW1lbnQ6OnVwZGF0ZUVsZW1lbnRzQWZmZWN0ZWRCeU1lZGlhUXVlcmllcyk6CisgICAgICAg
IChXZWJDb3JlOjpEb2N1bWVudDo6ZGlkQXNzb2NpYXRlRm9ybUNvbnRyb2xzVGltZXJGaXJlZCk6
CisgICAgICAgICogZG9tL0VsZW1lbnREYXRhLmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OlVuaXF1
ZUVsZW1lbnREYXRhOjpVbmlxdWVFbGVtZW50RGF0YSk6CisgICAgICAgICogZG9tL0V2ZW50TGlz
dGVuZXJNYXAuY3BwOgorICAgICAgICAoV2ViQ29yZTo6RXZlbnRMaXN0ZW5lck1hcDo6ZXZlbnRU
eXBlcyBjb25zdCk6CisgICAgICAgICogZG9tL1RyZWVTY29wZU9yZGVyZWRNYXAuY3BwOgorICAg
ICAgICAoV2ViQ29yZTo6VHJlZVNjb3BlT3JkZXJlZE1hcDo6a2V5cyBjb25zdCk6CisgICAgICAg
ICogZWRpdGluZy9Db21wb3NpdGVFZGl0Q29tbWFuZC5jcHA6CisgICAgICAgIChXZWJDb3JlOjpj
b3B5TWFya2Vycyk6CisgICAgICAgICogZWRpdGluZy9FZGl0b3IuY3BwOgorICAgICAgICAoV2Vi
Q29yZTo6ZWRpdGFibGVUZXh0TGlzdHNBdFBvc2l0aW9uSW5EZXNjZW5kaW5nT3JkZXIpOgorICAg
ICAgICAqIGZpbGVhcGkvRmlsZUxpc3QuY3BwOgorICAgICAgICAoV2ViQ29yZTo6RmlsZUxpc3Q6
OnBhdGhzIGNvbnN0KToKKyAgICAgICAgKiBoaXN0b3J5L0hpc3RvcnlJdGVtLmNwcDoKKyAgICAg
ICAgKFdlYkNvcmU6Okhpc3RvcnlJdGVtOjpIaXN0b3J5SXRlbSk6CisgICAgICAgIChXZWJDb3Jl
OjptX2Zvcm1EYXRhKToKKyAgICAgICAgKFdlYkNvcmU6Om1faWRlbnRpZmllcik6CisgICAgICAg
ICogaHRtbC9GaWxlSW5wdXRUeXBlLmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OkZpbGVJbnB1dFR5
cGU6OnNldEZpbGVzKToKKyAgICAgICAgKFdlYkNvcmU6OkZpbGVJbnB1dFR5cGU6OmZpbGVzQ2hv
c2VuKToKKyAgICAgICAgKiBodG1sL0xpbmtJY29uQ29sbGVjdG9yLmNwcDoKKyAgICAgICAgKFdl
YkNvcmU6OkxpbmtJY29uQ29sbGVjdG9yOjppY29uc09mVHlwZXMpOgorICAgICAgICAqIGh0bWwv
VVJMU2VhcmNoUGFyYW1zLmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OlVSTFNlYXJjaFBhcmFtczo6
Z2V0QWxsIGNvbnN0KToKKyAgICAgICAgKiBsYXlvdXQvZm9ybWF0dGluZ0NvbnRleHRzL2lubGlu
ZS9JbmxpbmVMaW5lQnVpbGRlci5jcHA6CisgICAgICAgIChXZWJDb3JlOjpMYXlvdXQ6OkxpbmVC
dWlsZGVyOjpsYXlvdXRJbmxpbmVDb250ZW50KToKKyAgICAgICAgKiBsb2FkZXIvRG9jdW1lbnRM
b2FkZXIuY3BwOgorICAgICAgICAoV2ViQ29yZTo6RG9jdW1lbnRMb2FkZXI6OnN0YXJ0SWNvbkxv
YWRpbmcpOgorICAgICAgICAoV2ViQ29yZTo6RG9jdW1lbnRMb2FkZXI6OnNldEFjdGl2ZUNvbnRl
bnRSdWxlTGlzdEFjdGlvblBhdHRlcm5zKToKKyAgICAgICAgKiBsb2FkZXIvVGV4dFRyYWNrTG9h
ZGVyLmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OlRleHRUcmFja0xvYWRlcjo6Z2V0TmV3Q3Vlcyk6
CisgICAgICAgICogbG9hZGVyL2FyY2hpdmUvY2YvTGVnYWN5V2ViQXJjaGl2ZS5jcHA6CisgICAg
ICAgIChXZWJDb3JlOjpMZWdhY3lXZWJBcmNoaXZlOjpjcmVhdGVGcm9tU2VsZWN0aW9uKToKKyAg
ICAgICAgKiBwYWdlL0NhcHRpb25Vc2VyUHJlZmVyZW5jZXNNZWRpYUFGLmNwcDoKKyAgICAgICAg
KFdlYkNvcmU6OkNhcHRpb25Vc2VyUHJlZmVyZW5jZXNNZWRpYUFGOjpwcmVmZXJyZWRBdWRpb0No
YXJhY3RlcmlzdGljcyBjb25zdCk6CisgICAgICAgICogcGFnZS9ET01XaW5kb3cuY3BwOgorICAg
ICAgICAoV2ViQ29yZTo6RE9NV2luZG93OjpkaXNwYXRjaEFsbFBlbmRpbmdCZWZvcmVVbmxvYWRF
dmVudHMpOgorICAgICAgICAqIHBhZ2UvSW50ZXJzZWN0aW9uT2JzZXJ2ZXIuY3BwOgorICAgICAg
ICAoV2ViQ29yZTo6SW50ZXJzZWN0aW9uT2JzZXJ2ZXI6OmNyZWF0ZSk6CisgICAgICAgICogcGFn
ZS9QYWdlLmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OlBhZ2U6OnJlcGxhY2VSYW5nZXNXaXRoVGV4
dCk6CisgICAgICAgICogcGFnZS9jc3AvQ29udGVudFNlY3VyaXR5UG9saWN5LmNwcDoKKyAgICAg
ICAgKFdlYkNvcmU6OkNvbnRlbnRTZWN1cml0eVBvbGljeTo6cmVzcG9uc2VIZWFkZXJzIGNvbnN0
KToKKyAgICAgICAgKiBwYWdlL2NzcC9Db250ZW50U2VjdXJpdHlQb2xpY3lSZXNwb25zZUhlYWRl
cnMuY3BwOgorICAgICAgICAoV2ViQ29yZTo6Q29udGVudFNlY3VyaXR5UG9saWN5UmVzcG9uc2VI
ZWFkZXJzOjppc29sYXRlZENvcHkgY29uc3QpOgorICAgICAgICAqIHBhZ2UvbWFjL0ltYWdlT3Zl
cmxheUNvbnRyb2xsZXJNYWMubW06CisgICAgICAgIChXZWJDb3JlOjpJbWFnZU92ZXJsYXlDb250
cm9sbGVyOjp1cGRhdGVEYXRhRGV0ZWN0b3JIaWdobGlnaHRzKToKKyAgICAgICAgKiBwYWdlL21h
Yy9TZXJ2aWNlc092ZXJsYXlDb250cm9sbGVyLm1tOgorICAgICAgICAoV2ViQ29yZTo6U2Vydmlj
ZXNPdmVybGF5Q29udHJvbGxlcjo6YnVpbGRTZWxlY3Rpb25IaWdobGlnaHQpOgorICAgICAgICAo
V2ViQ29yZTo6U2VydmljZXNPdmVybGF5Q29udHJvbGxlcjo6aGFuZGxlQ2xpY2spOgorICAgICAg
ICAqIHBhZ2Uvc2Nyb2xsaW5nL0FzeW5jU2Nyb2xsaW5nQ29vcmRpbmF0b3IuY3BwOgorICAgICAg
ICAoV2ViQ29yZTo6QXN5bmNTY3JvbGxpbmdDb29yZGluYXRvcjo6Y2hpbGRyZW5PZk5vZGUgY29u
c3QpOgorICAgICAgICAqIHBhZ2Uvc2Nyb2xsaW5nL1Njcm9sbFNuYXBPZmZzZXRzSW5mby5jcHA6
CisgICAgICAgIChXZWJDb3JlOjpjb252ZXJ0T2Zmc2V0SW5mbyk6CisgICAgICAgICogcGxhdGZv
cm0vTGVuZ3RoLmNwcDoKKyAgICAgICAgKFdlYkNvcmU6Om1ha2VDYWxjdWxhdGVkKToKKyAgICAg
ICAgKiBwbGF0Zm9ybS9hbmltYXRpb24vQW5pbWF0aW9uTGlzdC5jcHA6CisgICAgICAgIChXZWJD
b3JlOjpBbmltYXRpb25MaXN0OjpBbmltYXRpb25MaXN0KToKKyAgICAgICAgKiBwbGF0Zm9ybS9j
b2NvYS9QbGF5YmFja1Nlc3Npb25Nb2RlbE1lZGlhRWxlbWVudC5tbToKKyAgICAgICAgKFdlYkNv
cmU6OlBsYXliYWNrU2Vzc2lvbk1vZGVsTWVkaWFFbGVtZW50OjphdWRpb01lZGlhU2VsZWN0aW9u
T3B0aW9ucyBjb25zdCk6CisgICAgICAgICogcGxhdGZvcm0vZW5jcnlwdGVkbWVkaWEvQ0RNUHJv
eHkuY3BwOgorICAgICAgICAoV2ViQ29yZTo6S2V5U3RvcmU6OmNvbnZlcnRUb0pTS2V5U3RhdHVz
VmVjdG9yIGNvbnN0KToKKyAgICAgICAgKiBwbGF0Zm9ybS9ncmFwaGljcy9GbG9hdFBvbHlnb24u
Y3BwOgorICAgICAgICAoV2ViQ29yZTo6RmxvYXRQb2x5Z29uOjpvdmVybGFwcGluZ0VkZ2VzIGNv
bnN0KToKKyAgICAgICAgKiBwbGF0Zm9ybS9ncmFwaGljcy9GbG9hdFF1YWQuY3BwOgorICAgICAg
ICAoV2ViQ29yZTo6Ym91bmRpbmdCb3hlcyk6CisgICAgICAgICogcGxhdGZvcm0vZ3JhcGhpY3Mv
YXZmb3VuZGF0aW9uL29iamMvQ0RNSW5zdGFuY2VGYWlyUGxheVN0cmVhbWluZ0FWRk9iakMubW06
CisgICAgICAgIChXZWJDb3JlOjpDRE1JbnN0YW5jZVNlc3Npb25GYWlyUGxheVN0cmVhbWluZ0FW
Rk9iakM6OnVwZGF0ZUxpY2Vuc2UpOgorICAgICAgICAqIHBsYXRmb3JtL2dyYXBoaWNzL2NhL1Rp
bGVHcmlkLmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OlRpbGVHcmlkOjpyZW1vdmVUaWxlcyk6Cisg
ICAgICAgIChXZWJDb3JlOjpUaWxlR3JpZDo6cmVtb3ZlQWxsVGlsZXMpOgorICAgICAgICAqIHBs
YXRmb3JtL2dyYXBoaWNzL2NhL1RpbGVHcmlkLmg6CisgICAgICAgICogcGxhdGZvcm0vZ3JhcGhp
Y3MvY2cvSW1hZ2VVdGlsaXRpZXNDRy5jcHA6CisgICAgICAgIChXZWJDb3JlOjpmaW5kSW1hZ2Vz
Rm9yVHJhbnNjb2RpbmcpOgorICAgICAgICAoV2ViQ29yZTo6dHJhbnNjb2RlSW1hZ2VzKToKKyAg
ICAgICAgKiBwbGF0Zm9ybS9ncmFwaGljcy9jb2NvYS9Gb250Q2FjaGVDb3JlVGV4dC5jcHA6Cisg
ICAgICAgIChXZWJDb3JlOjpmaW5kQ2xvc2VzdEZvbnQpOgorICAgICAgICAoV2ViQ29yZTo6Rm9u
dENhY2hlOjpnZXRGb250U2VsZWN0aW9uQ2FwYWJpbGl0aWVzSW5GYW1pbHkpOgorICAgICAgICAq
IHBsYXRmb3JtL21lZGlhc3RyZWFtL1JlYWx0aW1lTWVkaWFTb3VyY2UuY3BwOgorICAgICAgICAo
V2ViQ29yZTo6UmVhbHRpbWVNZWRpYVNvdXJjZTo6Zml0bmVzc0Rpc3RhbmNlKToKKyAgICAgICAg
KiBwbGF0Zm9ybS9uZXR3b3JrL0NhY2hlVmFsaWRhdGlvbi5jcHA6CisgICAgICAgIChXZWJDb3Jl
Ojpjb2xsZWN0VmFyeWluZ1JlcXVlc3RIZWFkZXJzSW50ZXJuYWwpOgorICAgICAgICAqIHBsYXRm
b3JtL25ldHdvcmsvRm9ybURhdGEuY3BwOgorICAgICAgICAoV2ViQ29yZTo6Rm9ybURhdGE6Omlz
b2xhdGVkQ29weSBjb25zdCk6CisgICAgICAgICogcGxhdGZvcm0vbmV0d29yay9Tb2NrZXRTdHJl
YW1IYW5kbGVJbXBsLmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OlNvY2tldFN0cmVhbUhhbmRsZUlt
cGw6OnBsYXRmb3JtU2VuZEhhbmRzaGFrZSk6CisgICAgICAgICogcGxhdGZvcm0vbmV0d29yay9j
b2NvYS9OZXR3b3JrU3RvcmFnZVNlc3Npb25Db2NvYS5tbToKKyAgICAgICAgKiBwbGF0Zm9ybS90
ZXh0L0xvY2FsZUlDVS5jcHA6CisgICAgICAgIChXZWJDb3JlOjpMb2NhbGVJQ1U6OmNyZWF0ZUxh
YmVsVmVjdG9yKToKKyAgICAgICAgKFdlYkNvcmU6OmNyZWF0ZUZhbGxiYWNrTW9udGhMYWJlbHMp
OgorICAgICAgICAoV2ViQ29yZTo6Y3JlYXRlRmFsbGJhY2tBTVBNTGFiZWxzKToKKyAgICAgICAg
KiBwbGF0Zm9ybS90ZXh0L0xvY2FsZU5vbmUuY3BwOgorICAgICAgICAoV2ViQ29yZTo6TG9jYWxl
Tm9uZTo6bW9udGhMYWJlbHMpOgorICAgICAgICAoV2ViQ29yZTo6TG9jYWxlTm9uZTo6c2hvcnRN
b250aExhYmVscyk6CisgICAgICAgIChXZWJDb3JlOjpMb2NhbGVOb25lOjp0aW1lQU1QTUxhYmVs
cyk6CisgICAgICAgICogcGxhdGZvcm0vdGV4dC9jb2NvYS9Mb2NhbGVDb2NvYS5tbToKKyAgICAg
ICAgKFdlYkNvcmU6OkxvY2FsZUNvY29hOjptb250aExhYmVscyk6CisgICAgICAgIChXZWJDb3Jl
OjpMb2NhbGVDb2NvYTo6c2hvcnRNb250aExhYmVscyk6CisgICAgICAgIChXZWJDb3JlOjpMb2Nh
bGVDb2NvYTo6c3RhbmRBbG9uZU1vbnRoTGFiZWxzKToKKyAgICAgICAgKFdlYkNvcmU6OkxvY2Fs
ZUNvY29hOjpzaG9ydFN0YW5kQWxvbmVNb250aExhYmVscyk6CisgICAgICAgIChXZWJDb3JlOjpM
b2NhbGVDb2NvYTo6dGltZUFNUE1MYWJlbHMpOgorICAgICAgICAqIHBsdWdpbnMvRE9NTWltZVR5
cGVBcnJheS5jcHA6CisgICAgICAgIChXZWJDb3JlOjpET01NaW1lVHlwZUFycmF5OjpzdXBwb3J0
ZWRQcm9wZXJ0eU5hbWVzIGNvbnN0KToKKyAgICAgICAgKFdlYkNvcmU6OkRPTU1pbWVUeXBlQXJy
YXk6OnN1cHBvcnRlZFByb3BlcnR5TmFtZXMpOiBEZWxldGVkLgorICAgICAgICAqIHBsdWdpbnMv
RE9NTWltZVR5cGVBcnJheS5oOgorICAgICAgICAqIHBsdWdpbnMvRE9NUGx1Z2luLmNwcDoKKyAg
ICAgICAgKFdlYkNvcmU6Om1ha2VNaW1lVHlwZXMpOgorICAgICAgICAoV2ViQ29yZTo6RE9NUGx1
Z2luOjpzdXBwb3J0ZWRQcm9wZXJ0eU5hbWVzIGNvbnN0KToKKyAgICAgICAgKFdlYkNvcmU6OkRP
TVBsdWdpbjo6c3VwcG9ydGVkUHJvcGVydHlOYW1lcyk6IERlbGV0ZWQuCisgICAgICAgICogcGx1
Z2lucy9ET01QbHVnaW4uaDoKKyAgICAgICAgKiBwbHVnaW5zL0RPTVBsdWdpbkFycmF5LmNwcDoK
KyAgICAgICAgKFdlYkNvcmU6OkRPTVBsdWdpbkFycmF5OjpzdXBwb3J0ZWRQcm9wZXJ0eU5hbWVz
IGNvbnN0KToKKyAgICAgICAgKFdlYkNvcmU6OkRPTVBsdWdpbkFycmF5OjpzdXBwb3J0ZWRQcm9w
ZXJ0eU5hbWVzKTogRGVsZXRlZC4KKyAgICAgICAgKiBwbHVnaW5zL0RPTVBsdWdpbkFycmF5Lmg6
CisgICAgICAgICogcmVuZGVyaW5nL0xheWVyQW5jZXN0b3JDbGlwcGluZ1N0YWNrLmNwcDoKKyAg
ICAgICAgKFdlYkNvcmU6OkxheWVyQW5jZXN0b3JDbGlwcGluZ1N0YWNrOjpMYXllckFuY2VzdG9y
Q2xpcHBpbmdTdGFjayk6CisgICAgICAgIChXZWJDb3JlOjpMYXllckFuY2VzdG9yQ2xpcHBpbmdT
dGFjazo6Y29tcG9zaXRlZENsaXBEYXRhIGNvbnN0KToKKyAgICAgICAgKiByZW5kZXJpbmcvUmVu
ZGVyQm94TW9kZWxPYmplY3QuY3BwOgorICAgICAgICAoV2ViQ29yZTo6UmVuZGVyQm94TW9kZWxP
YmplY3Q6OmNsaXBCb3JkZXJTaWRlUG9seWdvbik6CisgICAgICAgICogcmVuZGVyaW5nL1JlbmRl
ckVsZW1lbnQuY3BwOgorICAgICAgICAoV2ViQ29yZTo6UmVuZGVyRWxlbWVudDo6ZHJhd0xpbmVG
b3JCb3hTaWRlIGNvbnN0KToKKyAgICAgICAgKiByZW5kZXJpbmcvUmVuZGVyR3JpZC5jcHA6Cisg
ICAgICAgIChXZWJDb3JlOjpSZW5kZXJHcmlkOjp0cmFja1NpemVzRm9yQ29tcHV0ZWRTdHlsZSBj
b25zdCk6CisgICAgICAgICogc3R5bGUvQ2xhc3NDaGFuZ2VJbnZhbGlkYXRpb24uY3BwOgorICAg
ICAgICAoV2ViQ29yZTo6U3R5bGU6OmNvbGxlY3RDbGFzc2VzKToKKyAgICAgICAgKiBzdHlsZS9T
dHlsZUJ1aWxkZXJDb252ZXJ0ZXIuaDoKKyAgICAgICAgKFdlYkNvcmU6OlN0eWxlOjpCdWlsZGVy
Q29udmVydGVyOjpjb252ZXJ0VG8xMDBQZXJjZW50TWludXNMZW5ndGgpOgorICAgICAgICAqIHRl
c3RpbmcvTW9ja0NETUZhY3RvcnkuY3BwOgorICAgICAgICAoV2ViQ29yZTo6TW9ja0NETUluc3Rh
bmNlU2Vzc2lvbjo6dXBkYXRlTGljZW5zZSk6CisgICAgICAgIChXZWJDb3JlOjpNb2NrQ0RNSW5z
dGFuY2VTZXNzaW9uOjpyZW1vdmVTZXNzaW9uRGF0YSk6CisgICAgICAgICogd29ya2Vycy9zZXJ2
aWNlL3NlcnZlci9TV1NlcnZlci5jcHA6CisgICAgICAgIChXZWJDb3JlOjpTV1NlcnZlcjo6Z2V0
UmVnaXN0cmF0aW9ucyk6CisKIDIwMjItMDItMTYgIEVyaWMgQ2FybHNvbiAgPGVyaWMuY2FybHNv
bkBhcHBsZS5jb20+CiAKICAgICAgICAgW0NvY29hXSBVcGRhdGUgYXVkaW8gc2Vzc2lvbiBjYXRl
Z29yeSBiZWZvcmUgc2V0dGluZyBOb3dQbGF5aW5nIHN0YXR1cwpkaWZmIC0tZ2l0IGEvU291cmNl
L1dlYktpdC9DaGFuZ2VMb2cgYi9Tb3VyY2UvV2ViS2l0L0NoYW5nZUxvZwppbmRleCAxNzU5NDVk
ZTIyMzM4ZjJkM2VhYjU0YmQ5ZTlhY2JjMjU0NGQ4NmMzLi5jNTJkMDYzOGRhZDlmZWQxMWE0NWE1
NTBiMmI1N2Y2YTQ4ZTFmYTkyIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViS2l0L0NoYW5nZUxvZwor
KysgYi9Tb3VyY2UvV2ViS2l0L0NoYW5nZUxvZwpAQCAtMSwzICsxLDExNCBAQAorMjAyMi0wMi0x
NiAgQ2hyaXMgRHVtZXogIDxjZHVtZXpAYXBwbGUuY29tPgorCisgICAgICAgIENsZWFuIHVwIC8g
b3B0aW1pemUgY2FsbCBzaXRlcyBjb25zdHJ1Y3RpbmcgdmVjdG9ycworICAgICAgICBodHRwczov
L2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9MjM2NzQ4CisKKyAgICAgICAgUmV2aWV3
ZWQgYnkgTk9CT0RZIChPT1BTISkuCisKKyAgICAgICAgQ2xlYW4gdXAgLyBvcHRpbWl6ZSBjYWxs
IHNpdGVzIGNvbnN0cnVjdGluZyB2ZWN0b3JzOgorICAgICAgICAtIFVzZSBWZWN0b3I6Om1hcCgp
IC8gV1RGOjptYXAoKSB3aGVyZSBhcHByb3ByaWF0ZQorICAgICAgICAtIFJlcGxhY2UgVmVjdG9y
OjpyZXNlcnZlQ2FwYWNpdHkoKSB3aXRoIFZlY3Rvcjo6cmVzZXJ2ZUluaXRpYWxDYXBhY2l0eSgp
IAorICAgICAgICAgIHdoZXJlIGFwcHJvcHJpYXRlCisgICAgICAgIC0gUmVwbGFjZSBWZWN0b3I6
OmFwcGVuZCgpIHdpdGggVmVjdG9yOjp1bmNoZWNrZWRBcHBlbmQoKSB3aGVyZSBhcHByb3ByaWF0
ZQorICAgICAgICAtIExldmVyYWdlIHRoZSBmYWN0IHRoYXQgVmVjdG9yPFJlZjxGb28+PiBpcyBu
b3cgY29weWFibGUgKEJlY2F1c2UgUmVmPD4gbm93IGhhcworICAgICAgICAgIGEgY29weSBjb25z
dHJ1Y3RvcikKKyAgICAgICAgLSBDYWxsIGNyb3NzVGhyZWFkQ29weSgpIHRvIGlzb2xhdGUtY29w
eSBhIFZlY3RvcigpIHdpdGhvdXQgaXRlcmF0aW5nLgorICAgICAgICAtIExldmVyYWdlIFZlY3Rv
ciBjb25zdHJ1Y3RvciB0aGF0IHRha2VzIGluIGFuIGludGlhbGl6YXRpb24gbGlzdCBpbiBtb3Jl
IGNhc2VzCisgICAgICAgIC0gTGV2ZXJhZ2UgVmVjdG9yOjpmcm9tKCkgaW4gbW9yZSBjYXNlcyB0
byBzaW1wbGlmeSB2ZWN0b3IgY29uc3RydWN0aW9uIGluIHNvbWUKKyAgICAgICAgICBjYXNlLgor
ICAgICAgICAtIERyb3AgdW5uZWNlc3NhcnkgY2FsbHMgdG8gVmVjdG9yOjpyZXNlcnZlKkNhcGFj
aXR5KCkgYmVmb3JlIGNhbGxpbmcKKyAgICAgICAgICBWZWN0b3I6OmFwcGVuZChUKiwgc2l6ZV90
KSBzaW5jZSB0aGUgYXBwZW5kKCkgaW1wbGVtZW50YXRpb24gYWxyZWFkeSBkb2VzIHRoaXMKKyAg
ICAgICAgICBmb3IgdXMuCisgICAgICAgIC0gTGV2ZXJhZ2UgY29weVRvVmVjdG9yKCkgYW5kIGNv
cHlUb1ZlY3Rvck9mPD4gaW4gbW9yZSBjYXNlcworICAgICAgICAtIENhbGwgc2hyaW5rVG9GaXQo
KSBpbiBzb21lIGNhc2VzIHdoZXJlIHdlIHJlc2VydmUgY2FwYWNpdHkgYW5kIHRoZW4gYXBwZW5k
KCkKKyAgICAgICAgICBidXQgbWF5IG5vdCBhcHBlbmQoKSBhcyBtdWNoIGFzIHdlIHJlc2VydmVk
LiAKKworICAgICAgICAqIE5ldHdvcmtQcm9jZXNzL1dlYlN0b3JhZ2UvTG9jYWxTdG9yYWdlRGF0
YWJhc2VUcmFja2VyLmNwcDoKKyAgICAgICAgKFdlYktpdDo6TG9jYWxTdG9yYWdlRGF0YWJhc2VU
cmFja2VyOjpvcmlnaW5EZXRhaWxzQ3Jvc3NUaHJlYWRDb3B5KToKKyAgICAgICAgKiBOZXR3b3Jr
UHJvY2Vzcy9jYWNoZS9DYWNoZVN0b3JhZ2VFbmdpbmVDYWNoZXMuY3BwOgorICAgICAgICAoV2Vi
S2l0OjpDYWNoZVN0b3JhZ2U6OkNhY2hlczo6Y2FjaGVJbmZvcyk6CisgICAgICAgICogU2hhcmVk
L0FQSS9BUElBcnJheS5jcHA6CisgICAgICAgIChBUEk6OkFycmF5OjpjcmVhdGVTdHJpbmdBcnJh
eSk6CisgICAgICAgIChBUEk6OkFycmF5Ojpjb3B5KToKKyAgICAgICAgKiBTaGFyZWQvQVBJL0FQ
SURpY3Rpb25hcnkuY3BwOgorICAgICAgICAoQVBJOjpEaWN0aW9uYXJ5OjprZXlzIGNvbnN0KToK
KyAgICAgICAgKiBTaGFyZWQvVXNlckRhdGEuY3BwOgorICAgICAgICAoV2ViS2l0Ojp0cmFuc2Zv
cm1HcmFwaCk6CisgICAgICAgICogU2hhcmVkL1dlYkNvbnRleHRNZW51SXRlbS5jcHA6CisgICAg
ICAgIChXZWJLaXQ6OldlYkNvbnRleHRNZW51SXRlbTo6Y3JlYXRlKToKKyAgICAgICAgKFdlYktp
dDo6V2ViQ29udGV4dE1lbnVJdGVtOjpzdWJtZW51SXRlbXNBc0FQSUFycmF5IGNvbnN0KToKKyAg
ICAgICAgKiBTaGFyZWQvV2ViQ29udGV4dE1lbnVJdGVtRGF0YS5jcHA6CisgICAgICAgIChXZWJL
aXQ6OmtpdEl0ZW1zKToKKyAgICAgICAgKFdlYktpdDo6Y29yZUl0ZW1zKToKKyAgICAgICAgKiBV
SVByb2Nlc3MvQVBJL0FQSVdlYkF1dGhlbnRpY2F0aW9uUGFuZWwuY3BwOgorICAgICAgICAoQVBJ
OjpXZWJBdXRoZW50aWNhdGlvblBhbmVsOjpXZWJBdXRoZW50aWNhdGlvblBhbmVsKToKKyAgICAg
ICAgKiBVSVByb2Nlc3MvQVBJL0FQSVdlYnNpdGVQb2xpY2llcy5jcHA6CisgICAgICAgIChBUEk6
OldlYnNpdGVQb2xpY2llczo6Y29weSBjb25zdCk6CisgICAgICAgIChBUEk6OldlYnNpdGVQb2xp
Y2llczo6ZGF0YSk6CisgICAgICAgICogVUlQcm9jZXNzL0FQSS9DL1dLUGFnZS5jcHA6CisgICAg
ICAgIChBUEk6OnRvQVBJT2JqZWN0VmVjdG9yKToKKyAgICAgICAgKFdLUGFnZVNldFBhZ2VDb250
ZXh0TWVudUNsaWVudCk6CisgICAgICAgIChXS1BhZ2VTZXRQYWdlRmluZE1hdGNoZXNDbGllbnQp
OgorICAgICAgICAoV0tQYWdlU2V0UGFnZUxvYWRlckNsaWVudCk6CisgICAgICAgICogVUlQcm9j
ZXNzL0NvY29hL1ZpZGVvRnVsbHNjcmVlbk1hbmFnZXJQcm94eS5tbToKKyAgICAgICAgKFdlYktp
dDo6VmlkZW9GdWxsc2NyZWVuTWFuYWdlclByb3h5Ojpmb3JFYWNoU2Vzc2lvbik6CisgICAgICAg
ICogVUlQcm9jZXNzL0dhbWVwYWQvVUlHYW1lcGFkUHJvdmlkZXIuY3BwOgorICAgICAgICAoV2Vi
S2l0OjpVSUdhbWVwYWRQcm92aWRlcjo6c25hcHNob3RHYW1lcGFkcyk6CisgICAgICAgICogVUlQ
cm9jZXNzL05ldHdvcmsvTmV0d29ya1Byb2Nlc3NQcm94eS5jcHA6CisgICAgICAgIChXZWJLaXQ6
Ok5ldHdvcmtQcm9jZXNzUHJveHk6OmFsbE5ldHdvcmtQcm9jZXNzZXMpOgorICAgICAgICAoV2Vi
S2l0OjpOZXR3b3JrUHJvY2Vzc1Byb3h5Ojp1cGRhdGVQcmV2YWxlbnREb21haW5zVG9CbG9ja0Nv
b2tpZXNGb3IpOgorICAgICAgICAqIFVJUHJvY2Vzcy9Ob3RpZmljYXRpb25zL1dlYk5vdGlmaWNh
dGlvbk1hbmFnZXJQcm94eS5jcHA6CisgICAgICAgIChXZWJLaXQ6OldlYk5vdGlmaWNhdGlvbk1h
bmFnZXJQcm94eTo6cHJvdmlkZXJEaWRSZW1vdmVOb3RpZmljYXRpb25Qb2xpY2llcyk6CisgICAg
ICAgICogVUlQcm9jZXNzL05vdGlmaWNhdGlvbnMvV2ViTm90aWZpY2F0aW9uUHJvdmlkZXIuY3Bw
OgorICAgICAgICAoV2ViS2l0OjpXZWJOb3RpZmljYXRpb25Qcm92aWRlcjo6Y2xlYXJOb3RpZmlj
YXRpb25zKToKKyAgICAgICAgKiBVSVByb2Nlc3MvU3RhdGlzdGljc1JlcXVlc3QuY3BwOgorICAg
ICAgICAoV2ViS2l0OjpTdGF0aXN0aWNzUmVxdWVzdDo6Y29tcGxldGVkUmVxdWVzdCk6CisgICAg
ICAgICogVUlQcm9jZXNzL1VzZXJDb250ZW50L1dlYlVzZXJDb250ZW50Q29udHJvbGxlclByb3h5
LmNwcDoKKyAgICAgICAgKFdlYktpdDo6V2ViVXNlckNvbnRlbnRDb250cm9sbGVyUHJveHk6OnJl
bW92ZUFsbFVzZXJTY3JpcHRzKToKKyAgICAgICAgKFdlYktpdDo6V2ViVXNlckNvbnRlbnRDb250
cm9sbGVyUHJveHk6OnJlbW92ZUFsbFVzZXJTdHlsZVNoZWV0cyk6CisgICAgICAgICogVUlQcm9j
ZXNzL1dlYkF1dGhlbnRpY2F0aW9uL0NvY29hL1dlYkF1dGhlbnRpY2F0aW9uUGFuZWxDbGllbnQu
bW06CisgICAgICAgIChXZWJLaXQ6OldlYkF1dGhlbnRpY2F0aW9uUGFuZWxDbGllbnQ6OnNlbGVj
dEFzc2VydGlvblJlc3BvbnNlIGNvbnN0KToKKyAgICAgICAgKiBVSVByb2Nlc3MvV2ViQXV0aGVu
dGljYXRpb24vZmlkby9DdGFwQXV0aGVudGljYXRvci5jcHA6CisgICAgICAgIChXZWJLaXQ6OkN0
YXBBdXRoZW50aWNhdG9yOjpjb250aW51ZUdldE5leHRBc3NlcnRpb25BZnRlclJlc3BvbnNlUmVj
ZWl2ZWQpOgorICAgICAgICAqIFVJUHJvY2Vzcy9XZWJCYWNrRm9yd2FyZExpc3QuY3BwOgorICAg
ICAgICAoV2ViS2l0OjpXZWJCYWNrRm9yd2FyZExpc3Q6OmFkZEl0ZW0pOgorICAgICAgICAoV2Vi
S2l0OjpXZWJCYWNrRm9yd2FyZExpc3Q6OmNsZWFyKToKKyAgICAgICAgKFdlYktpdDo6V2ViQmFj
a0ZvcndhcmRMaXN0OjpyZXN0b3JlRnJvbVN0YXRlKToKKyAgICAgICAgKiBVSVByb2Nlc3MvV2Vi
UGFnZVByb3h5LmNwcDoKKyAgICAgICAgKFdlYktpdDo6V2ViUGFnZVByb3h5OjpydW5KYXZhU2Ny
aXB0SW5GcmFtZUluU2NyaXB0V29ybGQpOgorICAgICAgICAoV2ViS2l0OjpXZWJQYWdlUHJveHk6
OnNwZWVjaFN5bnRoZXNpc1ZvaWNlTGlzdCk6CisgICAgICAgICogVUlQcm9jZXNzL1dlYnNpdGVE
YXRhL1dlYnNpdGVEYXRhU3RvcmUuY3BwOgorICAgICAgICAoV2ViS2l0OjpXZWJzaXRlRGF0YVN0
b3JlOjpmZXRjaERhdGFBbmRBcHBseSk6CisgICAgICAgIChXZWJLaXQ6OldlYnNpdGVEYXRhU3Rv
cmU6OnBhcmFtZXRlcnNGcm9tRWFjaFdlYnNpdGVEYXRhU3RvcmUpOgorICAgICAgICAqIFVJUHJv
Y2Vzcy9tYWMvV0tUZXh0RmluZGVyQ2xpZW50Lm1tOgorICAgICAgICAoLVtXS1RleHRGaW5kZXJD
bGllbnQgcmVwbGFjZU1hdGNoZXM6d2l0aFN0cmluZzppblNlbGVjdGlvbk9ubHk6cmVzdWx0Q29s
bGVjdG9yOl0pOgorICAgICAgICAqIFdlYlByb2Nlc3MvR1BVL21lZGlhL1JlbW90ZVJlbW90ZUNv
bW1hbmRMaXN0ZW5lci5jcHA6CisgICAgICAgIChXZWJLaXQ6OlJlbW90ZVJlbW90ZUNvbW1hbmRM
aXN0ZW5lcjo6dXBkYXRlU3VwcG9ydGVkQ29tbWFuZHMpOgorICAgICAgICAqIFdlYlByb2Nlc3Mv
SW5qZWN0ZWRCdW5kbGUvQVBJL2MvV0tCdW5kbGVQYWdlLmNwcDoKKyAgICAgICAgKGNvbnRleHRN
ZW51SXRlbXMpOgorICAgICAgICAoV0tCdW5kbGVQYWdlQ29weU9yaWdpbnNXaXRoQXBwbGljYXRp
b25DYWNoZSk6CisgICAgICAgICogV2ViUHJvY2Vzcy9JbmplY3RlZEJ1bmRsZS9JbmplY3RlZEJ1
bmRsZVBhZ2VDb250ZXh0TWVudUNsaWVudC5jcHA6CisgICAgICAgIChXZWJLaXQ6OkluamVjdGVk
QnVuZGxlUGFnZUNvbnRleHRNZW51Q2xpZW50OjpnZXRDdXN0b21NZW51RnJvbURlZmF1bHRJdGVt
cyk6CisgICAgICAgICogV2ViUHJvY2Vzcy9JbmplY3RlZEJ1bmRsZS9JbmplY3RlZEJ1bmRsZVBh
Z2VGb3JtQ2xpZW50LmNwcDoKKyAgICAgICAgKFdlYktpdDo6SW5qZWN0ZWRCdW5kbGVQYWdlRm9y
bUNsaWVudDo6ZGlkQXNzb2NpYXRlRm9ybUNvbnRyb2xzKToKKyAgICAgICAgKiBXZWJQcm9jZXNz
L05ldHdvcmsvV2ViU29ja2V0U3RyZWFtLmNwcDoKKyAgICAgICAgKFdlYktpdDo6V2ViU29ja2V0
U3RyZWFtOjpuZXR3b3JrUHJvY2Vzc0NyYXNoZWQpOgorICAgICAgICAqIFdlYlByb2Nlc3MvTmV0
d29yay93ZWJydGMvV2ViUlRDUmVzb2x2ZXIuY3BwOgorICAgICAgICAoV2ViS2l0OjpXZWJSVENS
ZXNvbHZlcjo6c2V0UmVzb2x2ZWRBZGRyZXNzKToKKyAgICAgICAgKiBXZWJQcm9jZXNzL1dlYkNv
cmVTdXBwb3J0L1dlYlJlc291cmNlTG9hZE9ic2VydmVyLmNwcDoKKyAgICAgICAgKFdlYktpdDo6
V2ViUmVzb3VyY2VMb2FkT2JzZXJ2ZXI6OnRha2VTdGF0aXN0aWNzKToKKyAgICAgICAgKiBXZWJQ
cm9jZXNzL1dlYlBhZ2UvRmluZENvbnRyb2xsZXIuY3BwOgorICAgICAgICAoV2ViS2l0OjpGaW5k
Q29udHJvbGxlcjo6cmVwbGFjZU1hdGNoZXMpOgorICAgICAgICAqIFdlYlByb2Nlc3MvV2ViUGFn
ZS9SZW1vdGVMYXllclRyZWUvUGxhdGZvcm1DQUFuaW1hdGlvblJlbW90ZS5tbToKKyAgICAgICAg
KFdlYktpdDo6dG9LZXlmcmFtZVZhbHVlVmVjdG9yKToKKyAgICAgICAgKFdlYktpdDo6UGxhdGZv
cm1DQUFuaW1hdGlvblJlbW90ZTo6c2V0VmFsdWVzKToKKyAgICAgICAgKFdlYktpdDo6UGxhdGZv
cm1DQUFuaW1hdGlvblJlbW90ZTo6c2V0VGltaW5nRnVuY3Rpb25zKToKKyAgICAgICAgKiBXZWJQ
cm9jZXNzL1dlYlBhZ2UvVmlld0dlc3R1cmVHZW9tZXRyeUNvbGxlY3Rvci5jcHA6CisgICAgICAg
IChXZWJLaXQ6OlZpZXdHZXN0dXJlR2VvbWV0cnlDb2xsZWN0b3I6OmNvbXB1dGVUZXh0TGVnaWJp
bGl0eVNjYWxlcyk6CisgICAgICAgICogV2ViUHJvY2Vzcy9XZWJQYWdlL1dlYlBhZ2UuY3BwOgor
ICAgICAgICAoV2ViS2l0OjpXZWJQYWdlOjp0cmFja2VkUmVwYWludFJlY3RzKToKKyAgICAgICAg
KFdlYktpdDo6ZHVtcEhpc3RvcnlJdGVtKToKKwogMjAyMi0wMi0xNiAgUGVyIEFybmUgVm9sbGFu
ICA8cHZvbGxhbkBhcHBsZS5jb20+CiAKICAgICAgICAgW21hY09TXSBBZGQgYWNjZXNzIHRvIG1h
Y2ggc2VydmljZSBpbiB0aGUgTmV0d29ya2luZyBwcm9jZXNzIGZvciBhbGwgdXNlcnMKZGlmZiAt
LWdpdCBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9iMy9haXIvQWlyQ29kZS5jcHAgYi9Tb3VyY2Uv
SmF2YVNjcmlwdENvcmUvYjMvYWlyL0FpckNvZGUuY3BwCmluZGV4IDg4NjU1YmM3MDFlNmU1ZmQ4
YmRkZjY2MzcxNzQwZGRjMjQ2ZjY1MDIuLmFlMDI1MzYzMmZiNGY3YWZkZjU2MDM3OTEyZDVmM2Yx
YTdjMmUyY2EgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9iMy9haXIvQWlyQ29k
ZS5jcHAKKysrIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL2IzL2Fpci9BaXJDb2RlLmNwcApAQCAt
MzMzLDEwICszMzMsNyBAQCB1bnNpZ25lZCBDb2RlOjpqc0hhc2goKSBjb25zdAogCiB2b2lkIENv
ZGU6OnNldE51bUVudHJ5cG9pbnRzKHVuc2lnbmVkIG51bUVudHJ5cG9pbnRzKQogewotICAgIG1f
cHJvbG9ndWVHZW5lcmF0b3JzLmNsZWFyKCk7Ci0gICAgbV9wcm9sb2d1ZUdlbmVyYXRvcnMucmVz
ZXJ2ZUNhcGFjaXR5KG51bUVudHJ5cG9pbnRzKTsKLSAgICBmb3IgKHVuc2lnbmVkIGkgPSAwOyBp
IDwgbnVtRW50cnlwb2ludHM7ICsraSkKLSAgICAgICAgbV9wcm9sb2d1ZUdlbmVyYXRvcnMudW5j
aGVja2VkQXBwZW5kKG1fZGVmYXVsdFByb2xvZ3VlR2VuZXJhdG9yLmNvcHlSZWYoKSk7CisgICAg
bV9wcm9sb2d1ZUdlbmVyYXRvcnMgPSBWZWN0b3IgeyBudW1FbnRyeVBvaW50cywgbV9kZWZhdWx0
UHJvbG9ndWVHZW5lcmF0b3IuY29weVJlZigpIH07CiB9CiAKIH0gfSB9IC8vIG5hbWVzcGFjZSBK
U0M6OkIzOjpBaXIKZGlmZiAtLWdpdCBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9ieXRlY29tcGls
ZXIvTm9kZXNDb2RlZ2VuLmNwcCBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9ieXRlY29tcGlsZXIv
Tm9kZXNDb2RlZ2VuLmNwcAppbmRleCAzYzI0MjdiYjBjODM4MTYwOWRlMzc3NmM2ZjBmMWQzN2Fh
MDRjODMwLi5mNmU0M2VjOGNiYmE4ZjI1NTkwYzZmODA4YTI0NDc1ZGMyYjZlYWUxIDEwMDY0NAot
LS0gYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvYnl0ZWNvbXBpbGVyL05vZGVzQ29kZWdlbi5jcHAK
KysrIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL2J5dGVjb21waWxlci9Ob2Rlc0NvZGVnZW4uY3Bw
CkBAIC01Mzc0LDcgKzUzNzQsNyBAQCBSZWdpc3RlcklEKiBBcnJheVBhdHRlcm5Ob2RlOjplbWl0
RGlyZWN0QmluZGluZyhCeXRlY29kZUdlbmVyYXRvciYgZ2VuZXJhdG9yLCBSZQogICAgIGlmICht
X3RhcmdldFBhdHRlcm5zLnNpemUoKSAhPSBlbGVtZW50cy5zaXplKCkpCiAgICAgICAgIHJldHVy
biBudWxscHRyOwogICAgIFZlY3RvcjxSZWZQdHI8UmVnaXN0ZXJJRD4+IHJlZ2lzdGVyczsKLSAg
ICByZWdpc3RlcnMucmVzZXJ2ZUNhcGFjaXR5KG1fdGFyZ2V0UGF0dGVybnMuc2l6ZSgpKTsKKyAg
ICByZWdpc3RlcnMucmVzZXJ2ZUluaXRpYWxDYXBhY2l0eShtX3RhcmdldFBhdHRlcm5zLnNpemUo
KSk7CiAgICAgZm9yIChzaXplX3QgaSA9IDA7IGkgPCBtX3RhcmdldFBhdHRlcm5zLnNpemUoKTsg
aSsrKSB7CiAgICAgICAgIHJlZ2lzdGVycy51bmNoZWNrZWRBcHBlbmQoZ2VuZXJhdG9yLm5ld1Rl
bXBvcmFyeSgpKTsKICAgICAgICAgZ2VuZXJhdG9yLmVtaXROb2RlKHJlZ2lzdGVycy5sYXN0KCku
Z2V0KCksIGVsZW1lbnRzW2ldKTsKZGlmZiAtLWdpdCBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9k
ZmcvREZHSW5QbGFjZUFic3RyYWN0U3RhdGUuY3BwIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL2Rm
Zy9ERkdJblBsYWNlQWJzdHJhY3RTdGF0ZS5jcHAKaW5kZXggOTg0MmJiNzg3MGNhY2MwZTZiNmYy
NzMwODY3MDQxODNkOTMxOWYyNS4uYWNlMGIxYjY0NzllMWI2YzRjOWUzMjhkYzYxNDAxZjhiMzYy
NThkYiAxMDA2NDQKLS0tIGEvU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdJblBsYWNlQWJz
dHJhY3RTdGF0ZS5jcHAKKysrIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdJblBsYWNl
QWJzdHJhY3RTdGF0ZS5jcHAKQEAgLTg5LDEwICs4OSw5IEBAIHZvaWQgSW5QbGFjZUFic3RyYWN0
U3RhdGU6OmJlZ2luQmFzaWNCbG9jayhCYXNpY0Jsb2NrKiBiYXNpY0Jsb2NrKQogCiBzdGF0aWMg
dm9pZCBzZXRMaXZlVmFsdWVzKFZlY3RvcjxOb2RlQWJzdHJhY3RWYWx1ZVBhaXI+JiB2YWx1ZXMs
IGNvbnN0IFZlY3RvcjxOb2RlRmxvd1Byb2plY3Rpb24+JiBsaXZlKQogewotICAgIHZhbHVlcy5z
aHJpbmsoMCk7Ci0gICAgdmFsdWVzLnJlc2VydmVDYXBhY2l0eShsaXZlLnNpemUoKSk7Ci0gICAg
Zm9yIChOb2RlRmxvd1Byb2plY3Rpb24gbm9kZSA6IGxpdmUpCi0gICAgICAgIHZhbHVlcy51bmNo
ZWNrZWRBcHBlbmQoTm9kZUFic3RyYWN0VmFsdWVQYWlyIHsgbm9kZSwgQWJzdHJhY3RWYWx1ZSgp
IH0pOworICAgIHZhbHVlcyA9IGxpdmUubWFwKFtdKGF1dG8gbm9kZSkgeworICAgICAgICByZXR1
cm4gTm9kZUFic3RyYWN0VmFsdWVQYWlyIHsgbm9kZSwgQWJzdHJhY3RWYWx1ZSgpIH07CisgICAg
fSk7CiB9CiAKIE9wZXJhbmRzPEFic3RyYWN0VmFsdWU+JiBJblBsYWNlQWJzdHJhY3RTdGF0ZTo6
dmFyaWFibGVzRm9yRGVidWdnaW5nKCkKZGlmZiAtLWdpdCBhL1NvdXJjZS9KYXZhU2NyaXB0Q29y
ZS9kZmcvREZHTGl2ZW5lc3NBbmFseXNpc1BoYXNlLmNwcCBiL1NvdXJjZS9KYXZhU2NyaXB0Q29y
ZS9kZmcvREZHTGl2ZW5lc3NBbmFseXNpc1BoYXNlLmNwcAppbmRleCAxMDAxMTgzM2IyNDcxZWU1
YjFiNjBmMjIwMTZlZWYwZjRlNmRmNmE4Li42YzZlMmE0NTE5MGNlNDEzNTliYTE1Mjc4YThjZTJk
ZTNhZjRmZTk1IDEwMDY0NAotLS0gYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR0xpdmVu
ZXNzQW5hbHlzaXNQaGFzZS5jcHAKKysrIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdM
aXZlbmVzc0FuYWx5c2lzUGhhc2UuY3BwCkBAIC05MSwyMCArOTEsMTQgQEAgcHVibGljOgogICAg
ICAgICAgICAgICAgIGNvbnRpbnVlOwogCiAgICAgICAgICAgICB7Ci0gICAgICAgICAgICAgICAg
Y29uc3QgVmVjdG9yPHVuc2lnbmVkLCAwLCBVbnNhZmVWZWN0b3JPdmVyZmxvdywgMT4mIGxpdmVB
dEhlYWRJbmRpY2VzID0gbV9saXZlQXRIZWFkW2Jsb2NrSW5kZXhdOwotICAgICAgICAgICAgICAg
IFZlY3RvcjxOb2RlRmxvd1Byb2plY3Rpb24+JiBsaXZlQXRIZWFkID0gYmxvY2stPnNzYS0+bGl2
ZUF0SGVhZDsKLSAgICAgICAgICAgICAgICBsaXZlQXRIZWFkLnNocmluaygwKTsKLSAgICAgICAg
ICAgICAgICBsaXZlQXRIZWFkLnJlc2VydmVDYXBhY2l0eShsaXZlQXRIZWFkSW5kaWNlcy5zaXpl
KCkpOwotICAgICAgICAgICAgICAgIGZvciAodW5zaWduZWQgaW5kZXggOiBsaXZlQXRIZWFkSW5k
aWNlcykKLSAgICAgICAgICAgICAgICAgICAgbGl2ZUF0SGVhZC51bmNoZWNrZWRBcHBlbmQobV9p
bmRleGluZy5ub2RlUHJvamVjdGlvbihpbmRleCkpOworICAgICAgICAgICAgICAgIGJsb2NrLT5z
c2EtPmxpdmVBdEhlYWQgPSBtX2xpdmVBdEhlYWRbYmxvY2tJbmRleF0ubWFwKFt0aGlzXShhdXRv
IGluZGV4KSB7CisgICAgICAgICAgICAgICAgICAgIHJldHVybiBtX2luZGV4aW5nLm5vZGVQcm9q
ZWN0aW9uKGluZGV4KTsKKyAgICAgICAgICAgICAgICB9KTsKICAgICAgICAgICAgIH0KICAgICAg
ICAgICAgIHsKLSAgICAgICAgICAgICAgICBjb25zdCBMaXZlU2V0JiBsaXZlQXRUYWlsSW5kaWNl
cyA9IG1fbGl2ZUF0VGFpbFtibG9ja0luZGV4XTsKLSAgICAgICAgICAgICAgICBWZWN0b3I8Tm9k
ZUZsb3dQcm9qZWN0aW9uPiYgbGl2ZUF0VGFpbCA9IGJsb2NrLT5zc2EtPmxpdmVBdFRhaWw7Ci0g
ICAgICAgICAgICAgICAgbGl2ZUF0VGFpbC5zaHJpbmsoMCk7Ci0gICAgICAgICAgICAgICAgbGl2
ZUF0VGFpbC5yZXNlcnZlQ2FwYWNpdHkobGl2ZUF0VGFpbEluZGljZXMuc2l6ZSgpKTsKLSAgICAg
ICAgICAgICAgICBmb3IgKHVuc2lnbmVkIGluZGV4IDogbV9saXZlQXRUYWlsW2Jsb2NrSW5kZXhd
KQotICAgICAgICAgICAgICAgICAgICBsaXZlQXRUYWlsLnVuY2hlY2tlZEFwcGVuZChtX2luZGV4
aW5nLm5vZGVQcm9qZWN0aW9uKGluZGV4KSk7CisgICAgICAgICAgICAgICAgYmxvY2stPnNzYS0+
bGl2ZUF0VGFpbCA9IFdURjo6bWFwKG1fbGl2ZUF0VGFpbFtibG9ja0luZGV4XSwgW3RoaXNdKGF1
dG8gaW5kZXgpIHsKKyAgICAgICAgICAgICAgICAgICAgcmV0dXJuIG1faW5kZXhpbmcubm9kZVBy
b2plY3Rpb24oaW5kZXgpOworICAgICAgICAgICAgICAgIH0pOwogICAgICAgICAgICAgfQogICAg
ICAgICB9CiAKZGlmZiAtLWdpdCBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHU2NvcmVC
b2FyZC5oIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdTY29yZUJvYXJkLmgKaW5kZXgg
YzI5NWQyMWJmMzRiZjVkOWMyOWJlMGU2ZDU2OTM1NjJkZWI1MTYzMy4uODUxZDRmMGZkNmYyZmFk
NWY3OWQ1YWMwMDNiMDNiM2UwYWQ1MDkwMSAxMDA2NDQKLS0tIGEvU291cmNlL0phdmFTY3JpcHRD
b3JlL2RmZy9ERkdTY29yZUJvYXJkLmgKKysrIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9E
RkdTY29yZUJvYXJkLmgKQEAgLTQ1LDcgKzQ1LDcgQEAgcHVibGljOgogICAgICAgICA6IG1faGln
aFdhdGVybWFyayhuZXh0TWFjaGluZUxvY2FsICsgMSkKICAgICB7CiAgICAgICAgIG1fdXNlZC5m
aWxsKG1heCgpLCBuZXh0TWFjaGluZUxvY2FsKTsKLSAgICAgICAgbV9mcmVlLnJlc2VydmVDYXBh
Y2l0eShuZXh0TWFjaGluZUxvY2FsKTsKKyAgICAgICAgbV9mcmVlLnJlc2VydmVJbml0aWFsQ2Fw
YWNpdHkobmV4dE1hY2hpbmVMb2NhbCk7CiAgICAgfQogCiAgICAgflNjb3JlQm9hcmQoKQpkaWZm
IC0tZ2l0IGEvU291cmNlL0phdmFTY3JpcHRDb3JlL2luc3BlY3Rvci9hZ2VudHMvSW5zcGVjdG9y
RGVidWdnZXJBZ2VudC5jcHAgYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvaW5zcGVjdG9yL2FnZW50
cy9JbnNwZWN0b3JEZWJ1Z2dlckFnZW50LmNwcAppbmRleCBiZTkxMGViMjgyZWU1M2U3ZjM1ZjZi
MDNhNjY5YzU5Mzk3YzFkOGRkLi4zNzAwMGFiMTlhZGFiNzIzOWZiY2E3MjhiMjRlODM5NDVhZTcy
NjhiIDEwMDY0NAotLS0gYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvaW5zcGVjdG9yL2FnZW50cy9J
bnNwZWN0b3JEZWJ1Z2dlckFnZW50LmNwcAorKysgYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvaW5z
cGVjdG9yL2FnZW50cy9JbnNwZWN0b3JEZWJ1Z2dlckFnZW50LmNwcApAQCAtMTA0LDcgKzEwNCw3
IEBAIHN0YXRpYyBUIHBhcnNlQnJlYWtwb2ludE9wdGlvbnMoUHJvdG9jb2w6OkVycm9yU3RyaW5n
JiBlcnJvclN0cmluZywgUmVmUHRyPEpTT046CiAKICAgICAgICAgYXV0byBhY3Rpb25zUGF5bG9h
ZCA9IG9wdGlvbnMtPmdldEFycmF5KFByb3RvY29sOjpEZWJ1Z2dlcjo6QnJlYWtwb2ludE9wdGlv
bnM6OmFjdGlvbnNLZXkpOwogICAgICAgICBpZiAoYXV0byBjb3VudCA9IGFjdGlvbnNQYXlsb2Fk
ID8gYWN0aW9uc1BheWxvYWQtPmxlbmd0aCgpIDogMCkgewotICAgICAgICAgICAgYWN0aW9ucy5y
ZXNlcnZlQ2FwYWNpdHkoY291bnQpOworICAgICAgICAgICAgYWN0aW9ucy5yZXNlcnZlSW5pdGlh
bENhcGFjaXR5KGNvdW50KTsKIAogICAgICAgICAgICAgZm9yICh1bnNpZ25lZCBpID0gMDsgaSA8
IGNvdW50OyArK2kpIHsKICAgICAgICAgICAgICAgICBhdXRvIGFjdGlvbk9iamVjdCA9IGFjdGlv
bnNQYXlsb2FkLT5nZXQoaSktPmFzT2JqZWN0KCk7CkBAIC0xMzMsNyArMTMzLDcgQEAgc3RhdGlj
IFQgcGFyc2VCcmVha3BvaW50T3B0aW9ucyhQcm90b2NvbDo6RXJyb3JTdHJpbmcmIGVycm9yU3Ry
aW5nLCBSZWZQdHI8SlNPTjoKIAogICAgICAgICAgICAgICAgIGFjdGlvbi5lbXVsYXRlVXNlckdl
c3R1cmUgPSBhY3Rpb25PYmplY3QtPmdldEJvb2xlYW4oUHJvdG9jb2w6OkRlYnVnZ2VyOjpCcmVh
a3BvaW50QWN0aW9uOjplbXVsYXRlVXNlckdlc3R1cmVLZXkpLnZhbHVlX29yKGZhbHNlKTsKIAot
ICAgICAgICAgICAgICAgIGFjdGlvbnMuYXBwZW5kKFdURk1vdmUoYWN0aW9uKSk7CisgICAgICAg
ICAgICAgICAgYWN0aW9ucy51bmNoZWNrZWRBcHBlbmQoV1RGTW92ZShhY3Rpb24pKTsKICAgICAg
ICAgICAgIH0KICAgICAgICAgfQogCmRpZmYgLS1naXQgYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUv
aW5zcGVjdG9yL3JlbW90ZS9zb2NrZXQvUmVtb3RlSW5zcGVjdG9yTWVzc2FnZVBhcnNlci5jcHAg
Yi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvaW5zcGVjdG9yL3JlbW90ZS9zb2NrZXQvUmVtb3RlSW5z
cGVjdG9yTWVzc2FnZVBhcnNlci5jcHAKaW5kZXggZTFjMzBlYTQxYjU4NWUxMzg4ODJlMzJjM2Q5
YmVkZjg3YTAwZmU5YS4uYmU3MWViZmIzMzc4ZmIzODNkZjYwZTVhNmM4ZWM1M2E1N2M3MzgwYSAx
MDA2NDQKLS0tIGEvU291cmNlL0phdmFTY3JpcHRDb3JlL2luc3BlY3Rvci9yZW1vdGUvc29ja2V0
L1JlbW90ZUluc3BlY3Rvck1lc3NhZ2VQYXJzZXIuY3BwCisrKyBiL1NvdXJjZS9KYXZhU2NyaXB0
Q29yZS9pbnNwZWN0b3IvcmVtb3RlL3NvY2tldC9SZW1vdGVJbnNwZWN0b3JNZXNzYWdlUGFyc2Vy
LmNwcApAQCAtNjQsNyArNjQsNiBAQCB2b2lkIE1lc3NhZ2VQYXJzZXI6OnB1c2hSZWNlaXZlZERh
dGEoY29uc3QgdWludDhfdCogZGF0YSwgc2l6ZV90IHNpemUpCiAgICAgaWYgKCFkYXRhIHx8ICFz
aXplIHx8ICFtX2xpc3RlbmVyKQogICAgICAgICByZXR1cm47CiAKLSAgICBtX2J1ZmZlci5yZXNl
cnZlQ2FwYWNpdHkobV9idWZmZXIuc2l6ZSgpICsgc2l6ZSk7CiAgICAgbV9idWZmZXIuYXBwZW5k
KGRhdGEsIHNpemUpOwogCiAgICAgaWYgKCFwYXJzZSgpKQpkaWZmIC0tZ2l0IGEvU291cmNlL0ph
dmFTY3JpcHRDb3JlL3BhcnNlci9WYXJpYWJsZUVudmlyb25tZW50LmNwcCBiL1NvdXJjZS9KYXZh
U2NyaXB0Q29yZS9wYXJzZXIvVmFyaWFibGVFbnZpcm9ubWVudC5jcHAKaW5kZXggMjhkYTE5OTc0
M2UwNTZkMjRkOWUzYjVkYTZjZWVlNjlkYjA5ODRjNi4uMjY1NGY0NjE0ZTc1Yjc1ZTJjZDkwNjUx
NDA3NmRhZDBmODUwMTk2NiAxMDA2NDQKLS0tIGEvU291cmNlL0phdmFTY3JpcHRDb3JlL3BhcnNl
ci9WYXJpYWJsZUVudmlyb25tZW50LmNwcAorKysgYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvcGFy
c2VyL1ZhcmlhYmxlRW52aXJvbm1lbnQuY3BwCkBAIC0yMTgsMTcgKzIxOCwxNCBAQCB2b2lkIENv
bXBhY3RURFpFbnZpcm9ubWVudDo6c29ydENvbXBhY3QoQ29tcGFjdCYgY29tcGFjdCkKIAogQ29t
cGFjdFREWkVudmlyb25tZW50OjpDb21wYWN0VERaRW52aXJvbm1lbnQoY29uc3QgVERaRW52aXJv
bm1lbnQmIGVudikKIHsKLSAgICBDb21wYWN0IGNvbXBhY3RWYXJpYWJsZXM7Ci0gICAgY29tcGFj
dFZhcmlhYmxlcy5yZXNlcnZlQ2FwYWNpdHkoZW52LnNpemUoKSk7Ci0KICAgICBtX2hhc2ggPSAw
OyAvLyBOb3RlOiBYT1IgaXMgY29tbXV0YXRpdmUgc28gb3JkZXIgZG9lc24ndCBtYXR0ZXIgaGVy
ZS4KLSAgICBmb3IgKGF1dG8mIGtleSA6IGVudikgewotICAgICAgICBjb21wYWN0VmFyaWFibGVz
LmFwcGVuZChrZXkuZ2V0KCkpOworICAgIENvbXBhY3QgdmFyaWFibGVzID0gV1RGOjptYXAoZW52
LCBbdGhpc10oYXV0byYga2V5KSAtPiBQYWNrZWRSZWZQdHI8VW5pcXVlZFN0cmluZ0ltcGw+IHsK
ICAgICAgICAgbV9oYXNoIF49IGtleS0+aGFzaCgpOwotICAgIH0KKyAgICAgICAgcmV0dXJuIGtl
eS5nZXQoKTsKKyAgICB9KTsKIAotICAgIHNvcnRDb21wYWN0KGNvbXBhY3RWYXJpYWJsZXMpOwot
ICAgIG1fdmFyaWFibGVzID0gV1RGTW92ZShjb21wYWN0VmFyaWFibGVzKTsKKyAgICBzb3J0Q29t
cGFjdCh2YXJpYWJsZXMpOworICAgIG1fdmFyaWFibGVzID0gV1RGTW92ZSh2YXJpYWJsZXMpOwog
fQogCiBib29sIENvbXBhY3RURFpFbnZpcm9ubWVudDo6b3BlcmF0b3I9PShjb25zdCBDb21wYWN0
VERaRW52aXJvbm1lbnQmIG90aGVyKSBjb25zdApkaWZmIC0tZ2l0IGEvU291cmNlL0phdmFTY3Jp
cHRDb3JlL3dhc20vV2FzbVdvcmtsaXN0LmNwcCBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS93YXNt
L1dhc21Xb3JrbGlzdC5jcHAKaW5kZXggNWJhZDBkOTBhNTYyZTI1ZGRlODE3YjU4MmMwNjA2NjU2
YzkwNmViYS4uZmNmNzQyMzBiYmMyMWQzNTkzZGI0ZTcyMjEyNTAxM2MyMmMyNGI0ZCAxMDA2NDQK
LS0tIGEvU291cmNlL0phdmFTY3JpcHRDb3JlL3dhc20vV2FzbVdvcmtsaXN0LmNwcAorKysgYi9T
b3VyY2UvSmF2YVNjcmlwdENvcmUvd2FzbS9XYXNtV29ya2xpc3QuY3BwCkBAIC0yMTcsOSArMjE3
LDkgQEAgV29ya2xpc3Q6OldvcmtsaXN0KCkKICAgICAsIG1fcGxhbkVucXVldWVkKEF1dG9tYXRp
Y1RocmVhZENvbmRpdGlvbjo6Y3JlYXRlKCkpCiB7CiAgICAgdW5zaWduZWQgbnVtYmVyT2ZDb21w
aWxhdGlvblRocmVhZHMgPSBPcHRpb25zOjp1c2VDb25jdXJyZW50SklUKCkgPyBrZXJuVENTTUF3
YXJlTnVtYmVyT2ZQcm9jZXNzb3JDb3JlcygpIDogMTsKLSAgICBtX3RocmVhZHMucmVzZXJ2ZUNh
cGFjaXR5KG51bWJlck9mQ29tcGlsYXRpb25UaHJlYWRzKTsKKyAgICBtX3RocmVhZHMucmVzZXJ2
ZUluaXRpYWxDYXBhY2l0eShudW1iZXJPZkNvbXBpbGF0aW9uVGhyZWFkcyk7CiAgICAgTG9ja2Vy
IGxvY2tlciB7ICptX2xvY2sgfTsKLSAgICBmb3IgKHVuc2lnbmVkIGkgPSAwOyBpIDwgbnVtYmVy
T2ZDb21waWxhdGlvblRocmVhZHM7IGkrKykKKyAgICBmb3IgKHVuc2lnbmVkIGkgPSAwOyBpIDwg
bnVtYmVyT2ZDb21waWxhdGlvblRocmVhZHM7ICsraSkKICAgICAgICAgbV90aHJlYWRzLnVuY2hl
Y2tlZEFwcGVuZChtYWtlVW5pcXVlPFdvcmtsaXN0OjpUaHJlYWQ+KGxvY2tlciwgKnRoaXMpKTsK
IH0KIApkaWZmIC0tZ2l0IGEvU291cmNlL1dURi93dGYvTGFuZ3VhZ2UuY3BwIGIvU291cmNlL1dU
Ri93dGYvTGFuZ3VhZ2UuY3BwCmluZGV4IGE4Mzk4ZTA1NDc1ZTkyOTczYTY0MzRjNzAzZTFjY2M2
MTA4ZjVmOWEuLjVlY2IzNmQwZTZiMWQzODc5N2EwZTgyNGY1MTkyNTk1NTlhNmE3MDAgMTAwNjQ0
Ci0tLSBhL1NvdXJjZS9XVEYvd3RmL0xhbmd1YWdlLmNwcAorKysgYi9Tb3VyY2UvV1RGL3d0Zi9M
YW5ndWFnZS5jcHAKQEAgLTI2LDYgKzI2LDcgQEAKICNpbmNsdWRlICJjb25maWcuaCIKICNpbmNs
dWRlIDx3dGYvTGFuZ3VhZ2UuaD4KIAorI2luY2x1ZGUgPHd0Zi9Dcm9zc1RocmVhZENvcGllci5o
PgogI2luY2x1ZGUgPHd0Zi9IYXNoTWFwLmg+CiAjaW5jbHVkZSA8d3RmL0xvY2suaD4KICNpbmNs
dWRlIDx3dGYvTG9nZ2luZy5oPgpAQCAtMTIyLDE1ICsxMjMsNiBAQCB2b2lkIG92ZXJyaWRlVXNl
clByZWZlcnJlZExhbmd1YWdlcyhjb25zdCBWZWN0b3I8U3RyaW5nPiYgb3ZlcnJpZGUpCiAgICAg
bGFuZ3VhZ2VEaWRDaGFuZ2UoKTsKIH0KIAotc3RhdGljIFZlY3RvcjxTdHJpbmc+IGlzb2xhdGVk
Q29weShjb25zdCBWZWN0b3I8U3RyaW5nPiYgc3RyaW5ncykKLXsKLSAgICBWZWN0b3I8U3RyaW5n
PiBjb3B5OwotICAgIGNvcHkucmVzZXJ2ZUluaXRpYWxDYXBhY2l0eShzdHJpbmdzLnNpemUoKSk7
Ci0gICAgZm9yIChhdXRvJiBsYW5ndWFnZSA6IHN0cmluZ3MpCi0gICAgICAgIGNvcHkudW5jaGVj
a2VkQXBwZW5kKGxhbmd1YWdlLmlzb2xhdGVkQ29weSgpKTsKLSAgICByZXR1cm4gY29weTsKLX0K
LQogVmVjdG9yPFN0cmluZz4gdXNlclByZWZlcnJlZExhbmd1YWdlcyhTaG91bGRNaW5pbWl6ZUxh
bmd1YWdlcyBzaG91bGRNaW5pbWl6ZUxhbmd1YWdlcykKIHsKICAgICB7CkBAIC0xMzgsNyArMTMw
LDcgQEAgVmVjdG9yPFN0cmluZz4gdXNlclByZWZlcnJlZExhbmd1YWdlcyhTaG91bGRNaW5pbWl6
ZUxhbmd1YWdlcyBzaG91bGRNaW5pbWl6ZUxhbmcKICAgICAgICAgVmVjdG9yPFN0cmluZz4mIG92
ZXJyaWRlID0gcHJlZmVycmVkTGFuZ3VhZ2VzT3ZlcnJpZGUoKTsKICAgICAgICAgaWYgKCFvdmVy
cmlkZS5pc0VtcHR5KCkpIHsKICAgICAgICAgICAgIExPR19XSVRIX1NUUkVBTShMYW5ndWFnZSwg
c3RyZWFtIDw8ICJMYW5ndWFnZXMgYXJlIG92ZXJyaWRkZW46ICIgPDwgb3ZlcnJpZGUpOwotICAg
ICAgICAgICAgcmV0dXJuIGlzb2xhdGVkQ29weShvdmVycmlkZSk7CisgICAgICAgICAgICByZXR1
cm4gY3Jvc3NUaHJlYWRDb3B5KG92ZXJyaWRlKTsKICAgICAgICAgfQogICAgIH0KIApAQCAtMTQ5
LDcgKzE0MSw3IEBAIFZlY3RvcjxTdHJpbmc+IHVzZXJQcmVmZXJyZWRMYW5ndWFnZXMoU2hvdWxk
TWluaW1pemVMYW5ndWFnZXMgc2hvdWxkTWluaW1pemVMYW5nCiAgICAgICAgIGxhbmd1YWdlcyA9
IHBsYXRmb3JtVXNlclByZWZlcnJlZExhbmd1YWdlcyhzaG91bGRNaW5pbWl6ZUxhbmd1YWdlcyk7
CiAgICAgfSBlbHNlCiAgICAgICAgIExPRyhMYW5ndWFnZSwgInVzZXJQcmVmZXJyZWRMYW5ndWFn
ZXMoKSBjYWNoZSBoaXQiKTsKLSAgICByZXR1cm4gaXNvbGF0ZWRDb3B5KGxhbmd1YWdlcyk7Cisg
ICAgcmV0dXJuIGNyb3NzVGhyZWFkQ29weShsYW5ndWFnZXMpOwogfQogCiAjaWYgIVBMQVRGT1JN
KENPQ09BKQpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvTW9kdWxlcy9hc3luYy1jbGlwYm9h
cmQvQ2xpcGJvYXJkLmNwcCBiL1NvdXJjZS9XZWJDb3JlL01vZHVsZXMvYXN5bmMtY2xpcGJvYXJk
L0NsaXBib2FyZC5jcHAKaW5kZXggYzFiYzgwMDg3OTVjMmIzZWZjYTE3NTI3ODA5ZTYzZTgwZjQy
ODYwMy4uNDlmM2IzMDc1NzIxMTU3Nzc3ODU5YzBiYWIxNjAxZDBjZjhlOTVlOSAxMDA2NDQKLS0t
IGEvU291cmNlL1dlYkNvcmUvTW9kdWxlcy9hc3luYy1jbGlwYm9hcmQvQ2xpcGJvYXJkLmNwcAor
KysgYi9Tb3VyY2UvV2ViQ29yZS9Nb2R1bGVzL2FzeW5jLWNsaXBib2FyZC9DbGlwYm9hcmQuY3Bw
CkBAIC0xNzksMTAgKzE3OSw5IEBAIHZvaWQgQ2xpcGJvYXJkOjpyZWFkKFJlZjxEZWZlcnJlZFBy
b21pc2U+JiYgcHJvbWlzZSkKICAgICAgICAgICAgIHJldHVybjsKICAgICAgICAgfQogCi0gICAg
ICAgIFZlY3RvcjxSZWY8Q2xpcGJvYXJkSXRlbT4+IGNsaXBib2FyZEl0ZW1zOwotICAgICAgICBj
bGlwYm9hcmRJdGVtcy5yZXNlcnZlSW5pdGlhbENhcGFjaXR5KGFsbEluZm8tPnNpemUoKSk7Ci0g
ICAgICAgIGZvciAoYXV0byYgaXRlbUluZm8gOiAqYWxsSW5mbykKLSAgICAgICAgICAgIGNsaXBi
b2FyZEl0ZW1zLnVuY2hlY2tlZEFwcGVuZChDbGlwYm9hcmRJdGVtOjpjcmVhdGUoKnRoaXMsIGl0
ZW1JbmZvKSk7CisgICAgICAgIGF1dG8gY2xpcGJvYXJkSXRlbXMgPSBhbGxJbmZvLT5tYXAoW3Ro
aXNdKGF1dG8mIGl0ZW1JbmZvKSB7CisgICAgICAgICAgICByZXR1cm4gQ2xpcGJvYXJkSXRlbTo6
Y3JlYXRlKCp0aGlzLCBpdGVtSW5mbyk7CisgICAgICAgIH0pOwogICAgICAgICBtX2FjdGl2ZVNl
c3Npb24gPSB7eyBXVEZNb3ZlKHBhc3RlYm9hcmQpLCBXVEZNb3ZlKGNsaXBib2FyZEl0ZW1zKSwg
Y2hhbmdlQ291bnRBdFN0YXJ0IH19OwogICAgIH0KIApAQCAtMzY4LDcgKzM2Nyw3IEBAIHZvaWQg
Q2xpcGJvYXJkOjpJdGVtV3JpdGVyOjpkaWRTZXRBbGxEYXRhKCkKICAgICAgICAgICAgIHJlamVj
dCgpOwogICAgICAgICAgICAgcmV0dXJuOwogICAgICAgICB9Ci0gICAgICAgIGN1c3RvbURhdGEu
YXBwZW5kKCpkYXRhKTsKKyAgICAgICAgY3VzdG9tRGF0YS51bmNoZWNrZWRBcHBlbmQoKmRhdGEp
OwogICAgIH0KIAogICAgIG1fcGFzdGVib2FyZC0+d3JpdGVDdXN0b21EYXRhKFdURk1vdmUoY3Vz
dG9tRGF0YSkpOwpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvTW9kdWxlcy9lbmNyeXB0ZWRt
ZWRpYS9NZWRpYUtleVNlc3Npb24uY3BwIGIvU291cmNlL1dlYkNvcmUvTW9kdWxlcy9lbmNyeXB0
ZWRtZWRpYS9NZWRpYUtleVNlc3Npb24uY3BwCmluZGV4IDE0Nzc2YzIwMTUxYmZlZmUzODA3OWEz
MzczMGM4ODY2MjY4YmE0NmEuLjM4ZGZjYzFiOTc4NDYyMzIyZWM3ZDdlYmU0ODNkNjZkODc2MDJl
MzAgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL01vZHVsZXMvZW5jcnlwdGVkbWVkaWEvTWVk
aWFLZXlTZXNzaW9uLmNwcAorKysgYi9Tb3VyY2UvV2ViQ29yZS9Nb2R1bGVzL2VuY3J5cHRlZG1l
ZGlhL01lZGlhS2V5U2Vzc2lvbi5jcHAKQEAgLTcwMCwxMCArNzAwLDkgQEAgdm9pZCBNZWRpYUtl
eVNlc3Npb246OnVwZGF0ZUtleVN0YXR1c2VzKENETUluc3RhbmNlU2Vzc2lvbjo6S2V5U3RhdHVz
VmVjdG9yJiYgaW4KICAgICAgICAgcmV0dXJuIE1lZGlhS2V5U3RhdHVzOjpJbnRlcm5hbEVycm9y
OwogICAgIH07CiAKLSAgICBtX3N0YXR1c2VzLmNsZWFyKCk7Ci0gICAgbV9zdGF0dXNlcy5yZXNl
cnZlQ2FwYWNpdHkoaW5wdXRTdGF0dXNlcy5zaXplKCkpOwotICAgIGZvciAoYXV0byYgc3RhdHVz
IDogaW5wdXRTdGF0dXNlcykKLSAgICAgICAgbV9zdGF0dXNlcy51bmNoZWNrZWRBcHBlbmQoeyBX
VEZNb3ZlKHN0YXR1cy5maXJzdCksIHRvTWVkaWFLZXlTdGF0dXMoc3RhdHVzLnNlY29uZCkgfSk7
CisgICAgbV9zdGF0dXNlcyA9IFdURjo6bWFwKFdURk1vdmUoaW5wdXRTdGF0dXNlcyksIFtdKGF1
dG8mJiBzdGF0dXMpIHsKKyAgICAgICAgcmV0dXJuIHN0ZDo6bWFrZV9wYWlyKFdURk1vdmUoc3Rh
dHVzLmZpcnN0KSwgdG9NZWRpYUtleVN0YXR1cyhzdGF0dXMuc2Vjb25kKSk7CisgICAgfSk7CiAK
ICAgICAvLyA1LiBRdWV1ZSBhIHRhc2sgdG8gZmlyZSBhIHNpbXBsZSBldmVudCBuYW1lZCBrZXlz
dGF0dXNlc2NoYW5nZSBhdCB0aGUgc2Vzc2lvbi4KICAgICBxdWV1ZVRhc2tUb0Rpc3BhdGNoRXZl
bnQoKnRoaXMsIFRhc2tTb3VyY2U6Ok5ldHdvcmtpbmcsIEV2ZW50OjpjcmVhdGUoZXZlbnROYW1l
cygpLmtleXN0YXR1c2VzY2hhbmdlRXZlbnQsIEV2ZW50OjpDYW5CdWJibGU6Ok5vLCBFdmVudDo6
SXNDYW5jZWxhYmxlOjpObykpOwpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvTW9kdWxlcy9l
bnRyaWVzYXBpL0ZpbGVTeXN0ZW1FbnRyaWVzQ2FsbGJhY2suY3BwIGIvU291cmNlL1dlYkNvcmUv
TW9kdWxlcy9lbnRyaWVzYXBpL0ZpbGVTeXN0ZW1FbnRyaWVzQ2FsbGJhY2suY3BwCmluZGV4IDc1
MWEyYWZkOWQwZTcyNzExN2ExMTgwZjhlYzFhZGI0MmY2ZTBlNTIuLmY1MzIyZTg5N2M3NTYyMWZi
OGRlZmQxNmQzN2YwMThjNDhiNjFlM2YgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL01vZHVs
ZXMvZW50cmllc2FwaS9GaWxlU3lzdGVtRW50cmllc0NhbGxiYWNrLmNwcAorKysgYi9Tb3VyY2Uv
V2ViQ29yZS9Nb2R1bGVzL2VudHJpZXNhcGkvRmlsZVN5c3RlbUVudHJpZXNDYWxsYmFjay5jcHAK
QEAgLTMxLDE4ICszMSw5IEBACiAKIG5hbWVzcGFjZSBXZWJDb3JlIHsKIAotc3RhdGljIFZlY3Rv
cjxSZWY8RmlsZVN5c3RlbUVudHJ5Pj4gY29weVZlY3Rvcihjb25zdCBWZWN0b3I8UmVmPEZpbGVT
eXN0ZW1FbnRyeT4+JiBlbnRyaWVzKQotewotICAgIFZlY3RvcjxSZWY8RmlsZVN5c3RlbUVudHJ5
Pj4gZW50cmllc0NvcHk7Ci0gICAgZW50cmllc0NvcHkucmVzZXJ2ZUluaXRpYWxDYXBhY2l0eShl
bnRyaWVzLnNpemUoKSk7Ci0gICAgZm9yIChhdXRvJiBlbnRyeSA6IGVudHJpZXMpCi0gICAgICAg
IGVudHJpZXNDb3B5LnVuY2hlY2tlZEFwcGVuZChlbnRyeS5jb3B5UmVmKCkpOwotICAgIHJldHVy
biBlbnRyaWVzQ29weTsKLX0KLQogdm9pZCBGaWxlU3lzdGVtRW50cmllc0NhbGxiYWNrOjpzY2hl
ZHVsZUNhbGxiYWNrKFNjcmlwdEV4ZWN1dGlvbkNvbnRleHQmIGNvbnRleHQsIGNvbnN0IFZlY3Rv
cjxSZWY8RmlsZVN5c3RlbUVudHJ5Pj4mIGVudHJpZXMpCiB7Ci0gICAgY29udGV4dC5wb3N0VGFz
ayhbcHJvdGVjdGVkVGhpcyA9IFJlZiB7ICp0aGlzIH0sIGVudHJpZXMgPSBjb3B5VmVjdG9yKGVu
dHJpZXMpXSAoU2NyaXB0RXhlY3V0aW9uQ29udGV4dCYpIHsKKyAgICBjb250ZXh0LnBvc3RUYXNr
KFtwcm90ZWN0ZWRUaGlzID0gUmVmIHsgKnRoaXMgfSwgZW50cmllc10gKFNjcmlwdEV4ZWN1dGlv
bkNvbnRleHQmKSB7CiAgICAgICAgIHByb3RlY3RlZFRoaXMtPmhhbmRsZUV2ZW50KGVudHJpZXMp
OwogICAgIH0pOwogfQpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvTW9kdWxlcy9lbnRyaWVz
YXBpL0hUTUxJbnB1dEVsZW1lbnRFbnRyaWVzQVBJLmNwcCBiL1NvdXJjZS9XZWJDb3JlL01vZHVs
ZXMvZW50cmllc2FwaS9IVE1MSW5wdXRFbGVtZW50RW50cmllc0FQSS5jcHAKaW5kZXggMDFhN2Y0
ZmFiMDU1N2QzZjdhZTAyYzk0ZGM1ZGMwYTM2ZDFiM2E5Yi4uZmRlYTc4MzI3YTQzNDU5ZDBmYTI1
NTU3ZGJkNDQ4MjZlMDM4MDY3NCAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvTW9kdWxlcy9l
bnRyaWVzYXBpL0hUTUxJbnB1dEVsZW1lbnRFbnRyaWVzQVBJLmNwcAorKysgYi9Tb3VyY2UvV2Vi
Q29yZS9Nb2R1bGVzL2VudHJpZXNhcGkvSFRNTElucHV0RWxlbWVudEVudHJpZXNBUEkuY3BwCkBA
IC00NiwxMSArNDYsOSBAQCBWZWN0b3I8UmVmPEZpbGVTeXN0ZW1FbnRyeT4+IEhUTUxJbnB1dEVs
ZW1lbnRFbnRyaWVzQVBJOjp3ZWJraXRFbnRyaWVzKFNjcmlwdEV4ZQogICAgIGlmICghZmlsZUxp
c3QpCiAgICAgICAgIHJldHVybiB7IH07CiAKLSAgICBWZWN0b3I8UmVmPEZpbGVTeXN0ZW1FbnRy
eT4+IGVudHJpZXM7Ci0gICAgZW50cmllcy5yZXNlcnZlSW5pdGlhbENhcGFjaXR5KGZpbGVMaXN0
LT5maWxlcygpLnNpemUoKSk7Ci0gICAgZm9yIChhdXRvJiBmaWxlIDogZmlsZUxpc3QtPmZpbGVz
KCkpCi0gICAgICAgIGVudHJpZXMudW5jaGVja2VkQXBwZW5kKERPTUZpbGVTeXN0ZW06OmNyZWF0
ZUVudHJ5Rm9yRmlsZShjb250ZXh0LCBmaWxlLmNvcHlSZWYoKSkpOwotICAgIHJldHVybiBlbnRy
aWVzOworICAgIHJldHVybiBmaWxlTGlzdC0+ZmlsZXMoKS5tYXAoWyZdKGF1dG8mIGZpbGUpIHsK
KyAgICAgICAgcmV0dXJuIERPTUZpbGVTeXN0ZW06OmNyZWF0ZUVudHJ5Rm9yRmlsZShjb250ZXh0
LCBmaWxlLmNvcHlSZWYoKSk7CisgICAgfSk7CiB9CiAKIH0KZGlmZiAtLWdpdCBhL1NvdXJjZS9X
ZWJDb3JlL01vZHVsZXMvZ2VvbG9jYXRpb24vR2VvbG9jYXRpb25Db250cm9sbGVyLmNwcCBiL1Nv
dXJjZS9XZWJDb3JlL01vZHVsZXMvZ2VvbG9jYXRpb24vR2VvbG9jYXRpb25Db250cm9sbGVyLmNw
cAppbmRleCAwN2RkNjVmM2MxYWVlNzllYjljNzMyODM2YTJkNWFhZDAxNzMzM2NmLi43ZGQ0NjM4
MjE3ZWM1MDUxOTBkNjIxOTgxNzc1NDEwZDMwNmM2YTRhIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2Vi
Q29yZS9Nb2R1bGVzL2dlb2xvY2F0aW9uL0dlb2xvY2F0aW9uQ29udHJvbGxlci5jcHAKKysrIGIv
U291cmNlL1dlYkNvcmUvTW9kdWxlcy9nZW9sb2NhdGlvbi9HZW9sb2NhdGlvbkNvbnRyb2xsZXIu
Y3BwCkBAIC0xMTgsMjEgKzExOCwxMyBAQCB2b2lkIEdlb2xvY2F0aW9uQ29udHJvbGxlcjo6Y2Fu
Y2VsUGVybWlzc2lvblJlcXVlc3QoR2VvbG9jYXRpb24mIGdlb2xvY2F0aW9uKQogdm9pZCBHZW9s
b2NhdGlvbkNvbnRyb2xsZXI6OnBvc2l0aW9uQ2hhbmdlZChjb25zdCBzdGQ6Om9wdGlvbmFsPEdl
b2xvY2F0aW9uUG9zaXRpb25EYXRhPiYgcG9zaXRpb24pCiB7CiAgICAgbV9sYXN0UG9zaXRpb24g
PSBwb3NpdGlvbjsKLSAgICBWZWN0b3I8UmVmPEdlb2xvY2F0aW9uPj4gb2JzZXJ2ZXJzVmVjdG9y
OwotICAgIG9ic2VydmVyc1ZlY3Rvci5yZXNlcnZlSW5pdGlhbENhcGFjaXR5KG1fb2JzZXJ2ZXJz
LnNpemUoKSk7Ci0gICAgZm9yIChhdXRvJiBvYnNlcnZlciA6IG1fb2JzZXJ2ZXJzKQotICAgICAg
ICBvYnNlcnZlcnNWZWN0b3IudW5jaGVja2VkQXBwZW5kKG9ic2VydmVyLmNvcHlSZWYoKSk7Ci0g
ICAgZm9yIChhdXRvJiBvYnNlcnZlciA6IG9ic2VydmVyc1ZlY3RvcikKKyAgICBmb3IgKGF1dG8m
IG9ic2VydmVyIDogY29weVRvVmVjdG9yT2Y8UmVmPEdlb2xvY2F0aW9uPj4obV9vYnNlcnZlcnMp
KQogICAgICAgICBvYnNlcnZlci0+cG9zaXRpb25DaGFuZ2VkKCk7CiB9CiAKIHZvaWQgR2VvbG9j
YXRpb25Db250cm9sbGVyOjplcnJvck9jY3VycmVkKEdlb2xvY2F0aW9uRXJyb3ImIGVycm9yKQog
ewotICAgIFZlY3RvcjxSZWY8R2VvbG9jYXRpb24+PiBvYnNlcnZlcnNWZWN0b3I7Ci0gICAgb2Jz
ZXJ2ZXJzVmVjdG9yLnJlc2VydmVJbml0aWFsQ2FwYWNpdHkobV9vYnNlcnZlcnMuc2l6ZSgpKTsK
LSAgICBmb3IgKGF1dG8mIG9ic2VydmVyIDogbV9vYnNlcnZlcnMpCi0gICAgICAgIG9ic2VydmVy
c1ZlY3Rvci51bmNoZWNrZWRBcHBlbmQob2JzZXJ2ZXIuY29weVJlZigpKTsKLSAgICBmb3IgKGF1
dG8mIG9ic2VydmVyIDogb2JzZXJ2ZXJzVmVjdG9yKQorICAgIGZvciAoYXV0byYgb2JzZXJ2ZXIg
OiBjb3B5VG9WZWN0b3JPZjxSZWY8R2VvbG9jYXRpb24+PihtX29ic2VydmVycykpCiAgICAgICAg
IG9ic2VydmVyLT5zZXRFcnJvcihlcnJvcik7CiB9CiAKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJD
b3JlL01vZHVsZXMvaW5kZXhlZGRiL0lEQkRhdGFiYXNlLmNwcCBiL1NvdXJjZS9XZWJDb3JlL01v
ZHVsZXMvaW5kZXhlZGRiL0lEQkRhdGFiYXNlLmNwcAppbmRleCAxNjE4OTY0YTU4YzVjODNmZWNi
ZmVmZDFjMjk0ZjVhY2ZkODc4MTJkLi43YWE2MzJiN2VjMDQ3YmU0NjA4YjUxYTA5NGVhMWE0ZTU3
YTI2MjliIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9Nb2R1bGVzL2luZGV4ZWRkYi9JREJE
YXRhYmFzZS5jcHAKKysrIGIvU291cmNlL1dlYkNvcmUvTW9kdWxlcy9pbmRleGVkZGIvSURCRGF0
YWJhc2UuY3BwCkBAIC0zMTcsMTUgKzMxNyw4IEBAIHZvaWQgSURCRGF0YWJhc2U6OnN0b3AoKQog
CiAgICAgcmVtb3ZlQWxsRXZlbnRMaXN0ZW5lcnMoKTsKIAotICAgIFZlY3RvcjxJREJSZXNvdXJj
ZUlkZW50aWZpZXI+IHRyYW5zYWN0aW9uSWRlbnRpZmllcnM7Ci0gICAgdHJhbnNhY3Rpb25JZGVu
dGlmaWVycy5yZXNlcnZlSW5pdGlhbENhcGFjaXR5KG1fYWN0aXZlVHJhbnNhY3Rpb25zLnNpemUo
KSk7Ci0KLSAgICBmb3IgKGF1dG8mIGlkIDogbV9hY3RpdmVUcmFuc2FjdGlvbnMua2V5cygpKQot
ICAgICAgICB0cmFuc2FjdGlvbklkZW50aWZpZXJzLnVuY2hlY2tlZEFwcGVuZChpZCk7Ci0KLSAg
ICBmb3IgKGF1dG8mIGlkIDogdHJhbnNhY3Rpb25JZGVudGlmaWVycykgewotICAgICAgICBJREJU
cmFuc2FjdGlvbiogdHJhbnNhY3Rpb24gPSBtX2FjdGl2ZVRyYW5zYWN0aW9ucy5nZXQoaWQpOwot
ICAgICAgICBpZiAodHJhbnNhY3Rpb24pCisgICAgZm9yIChhdXRvJiBpZCA6IGNvcHlUb1ZlY3Rv
cihtX2FjdGl2ZVRyYW5zYWN0aW9ucy5rZXlzKCkpKSB7CisgICAgICAgIGlmIChhdXRvKiB0cmFu
c2FjdGlvbiA9IG1fYWN0aXZlVHJhbnNhY3Rpb25zLmdldChpZCkpCiAgICAgICAgICAgICB0cmFu
c2FjdGlvbi0+c3RvcCgpOwogICAgIH0KIApkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvTW9k
dWxlcy9pbmRleGVkZGIvSURCR2V0QWxsUmVzdWx0LmNwcCBiL1NvdXJjZS9XZWJDb3JlL01vZHVs
ZXMvaW5kZXhlZGRiL0lEQkdldEFsbFJlc3VsdC5jcHAKaW5kZXggZWVhZmY3MTVhNWE0ODM5MjMw
ZjAxMjE0ZTMzZWQxYTgzYjFkN2FiZS4uNzMzZTllNjFhZmIxZWY5NmI2NjllZGI3MzE1MjJjNWJh
NGUxMWJmZSAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvTW9kdWxlcy9pbmRleGVkZGIvSURC
R2V0QWxsUmVzdWx0LmNwcAorKysgYi9Tb3VyY2UvV2ViQ29yZS9Nb2R1bGVzL2luZGV4ZWRkYi9J
REJHZXRBbGxSZXN1bHQuY3BwCkBAIC00OSw3ICs0OSw3IEBAIHZvaWQgSURCR2V0QWxsUmVzdWx0
Ojppc29sYXRlZENvcHkoY29uc3QgSURCR2V0QWxsUmVzdWx0JiBzb3VyY2UsIElEQkdldEFsbFJl
c3VsCiAgICAgZGVzdGluYXRpb24ubV90eXBlID0gc291cmNlLm1fdHlwZTsKICAgICBkZXN0aW5h
dGlvbi5tX2tleXMgPSBjcm9zc1RocmVhZENvcHkoc291cmNlLm1fa2V5cyk7CiAgICAgZGVzdGlu
YXRpb24ubV92YWx1ZXMgPSBjcm9zc1RocmVhZENvcHkoc291cmNlLm1fdmFsdWVzKTsKLSAgICBk
ZXN0aW5hdGlvbi5tX2tleVBhdGggPSBXZWJDb3JlOjppc29sYXRlZENvcHkoc291cmNlLm1fa2V5
UGF0aCk7CisgICAgZGVzdGluYXRpb24ubV9rZXlQYXRoID0gY3Jvc3NUaHJlYWRDb3B5KHNvdXJj
ZS5tX2tleVBhdGgpOwogfQogCiB2b2lkIElEQkdldEFsbFJlc3VsdDo6YWRkS2V5KElEQktleURh
dGEmJiBrZXkpCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9Nb2R1bGVzL2luZGV4ZWRkYi9J
REJHZXRSZXN1bHQuY3BwIGIvU291cmNlL1dlYkNvcmUvTW9kdWxlcy9pbmRleGVkZGIvSURCR2V0
UmVzdWx0LmNwcAppbmRleCA3NjJmOTQxYjgzYjk2ZWZjZTQ2NDBmMzMxZDU1NzdhMTBkZDcyNmFk
Li41NDc5ZDYxZjFmMDNhOWYyZjJmZTM5M2NmNzJkYzI5NTIyZDU0ZjUyIDEwMDY0NAotLS0gYS9T
b3VyY2UvV2ViQ29yZS9Nb2R1bGVzL2luZGV4ZWRkYi9JREJHZXRSZXN1bHQuY3BwCisrKyBiL1Nv
dXJjZS9XZWJDb3JlL01vZHVsZXMvaW5kZXhlZGRiL0lEQkdldFJlc3VsdC5jcHAKQEAgLTI2LDYg
KzI2LDcgQEAKICNpbmNsdWRlICJjb25maWcuaCIKICNpbmNsdWRlICJJREJHZXRSZXN1bHQuaCIK
IAorI2luY2x1ZGUgPHd0Zi9Dcm9zc1RocmVhZENvcGllci5oPgogI2luY2x1ZGUgPHd0Zi9Jc29N
YWxsb2NJbmxpbmVzLmg+CiAKIG5hbWVzcGFjZSBXZWJDb3JlIHsKQEAgLTQ3LDcgKzQ4LDcgQEAg
dm9pZCBJREJHZXRSZXN1bHQ6Omlzb2xhdGVkQ29weShjb25zdCBJREJHZXRSZXN1bHQmIHNvdXJj
ZSwgSURCR2V0UmVzdWx0JiBkZXN0aW4KICAgICBkZXN0aW5hdGlvbi5tX3ZhbHVlID0gc291cmNl
Lm1fdmFsdWUuaXNvbGF0ZWRDb3B5KCk7CiAgICAgZGVzdGluYXRpb24ubV9rZXlEYXRhID0gc291
cmNlLm1fa2V5RGF0YS5pc29sYXRlZENvcHkoKTsKICAgICBkZXN0aW5hdGlvbi5tX3ByaW1hcnlL
ZXlEYXRhID0gc291cmNlLm1fcHJpbWFyeUtleURhdGEuaXNvbGF0ZWRDb3B5KCk7Ci0gICAgZGVz
dGluYXRpb24ubV9rZXlQYXRoID0gV2ViQ29yZTo6aXNvbGF0ZWRDb3B5KHNvdXJjZS5tX2tleVBh
dGgpOworICAgIGRlc3RpbmF0aW9uLm1fa2V5UGF0aCA9IGNyb3NzVGhyZWFkQ29weShzb3VyY2Uu
bV9rZXlQYXRoKTsKICAgICBkZXN0aW5hdGlvbi5tX2lzRGVmaW5lZCA9IHNvdXJjZS5tX2lzRGVm
aW5lZDsKICAgICBkZXN0aW5hdGlvbi5tX3ByZWZldGNoZWRSZWNvcmRzID0gc291cmNlLm1fcHJl
ZmV0Y2hlZFJlY29yZHMuaXNvbGF0ZWRDb3B5KCk7CiB9CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2Vi
Q29yZS9Nb2R1bGVzL2luZGV4ZWRkYi9JREJLZXlQYXRoLmNwcCBiL1NvdXJjZS9XZWJDb3JlL01v
ZHVsZXMvaW5kZXhlZGRiL0lEQktleVBhdGguY3BwCmluZGV4IGZkNmQ1YTM5OWIzZmNhNjYyNGZm
MzQ5NGRiYWU4NzdmNThiNDE0MWQuLmM4MjkxMTZlNjQ0NzU2Y2I3NjYxZDZjZThlZjY3ZjY1Mjli
YTkzMmMgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL01vZHVsZXMvaW5kZXhlZGRiL0lEQktl
eVBhdGguY3BwCisrKyBiL1NvdXJjZS9XZWJDb3JlL01vZHVsZXMvaW5kZXhlZGRiL0lEQktleVBh
dGguY3BwCkBAIC0yMDYsMjEgKzIwNiw2IEBAIGJvb2wgaXNJREJLZXlQYXRoVmFsaWQoY29uc3Qg
SURCS2V5UGF0aCYga2V5UGF0aCkKICAgICByZXR1cm4gc3RkOjp2aXNpdCh2aXNpdG9yLCBrZXlQ
YXRoKTsKIH0KIAotSURCS2V5UGF0aCBpc29sYXRlZENvcHkoY29uc3QgSURCS2V5UGF0aCYga2V5
UGF0aCkKLXsKLSAgICBhdXRvIHZpc2l0b3IgPSBXVEY6Om1ha2VWaXNpdG9yKFtdKGNvbnN0IFN0
cmluZyYgc3RyaW5nKSAtPiBJREJLZXlQYXRoIHsKLSAgICAgICAgcmV0dXJuIHN0cmluZy5pc29s
YXRlZENvcHkoKTsKLSAgICB9LCBbXShjb25zdCBWZWN0b3I8U3RyaW5nPiYgdmVjdG9yKSAtPiBJ
REJLZXlQYXRoIHsKLSAgICAgICAgVmVjdG9yPFN0cmluZz4gdmVjdG9yQ29weTsKLSAgICAgICAg
dmVjdG9yQ29weS5yZXNlcnZlSW5pdGlhbENhcGFjaXR5KHZlY3Rvci5zaXplKCkpOwotICAgICAg
ICBmb3IgKGF1dG8mIHN0cmluZyA6IHZlY3RvcikKLSAgICAgICAgICAgIHZlY3RvckNvcHkudW5j
aGVja2VkQXBwZW5kKHN0cmluZy5pc29sYXRlZENvcHkoKSk7Ci0gICAgICAgIHJldHVybiB2ZWN0
b3JDb3B5OwotICAgIH0pOwotCi0gICAgcmV0dXJuIHN0ZDo6dmlzaXQodmlzaXRvciwga2V5UGF0
aCk7Ci19Ci0KICNpZiAhTE9HX0RJU0FCTEVECiBTdHJpbmcgbG9nZ2luZ1N0cmluZyhjb25zdCBJ
REJLZXlQYXRoJiBwYXRoKQogewpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvTW9kdWxlcy9p
bmRleGVkZGIvSURCS2V5UGF0aC5oIGIvU291cmNlL1dlYkNvcmUvTW9kdWxlcy9pbmRleGVkZGIv
SURCS2V5UGF0aC5oCmluZGV4IDIwMzZmZjc1NGU1ZWE5ZjMyZmIxZjJlZDU4ZmM4OTFjZTg2MzZi
MDYuLjRiMzkyNjVkYWM3N2E2MzA5ZDkyNWM5MDI0YTJlYWIyNDRkNzJiZWYgMTAwNjQ0Ci0tLSBh
L1NvdXJjZS9XZWJDb3JlL01vZHVsZXMvaW5kZXhlZGRiL0lEQktleVBhdGguaAorKysgYi9Tb3Vy
Y2UvV2ViQ29yZS9Nb2R1bGVzL2luZGV4ZWRkYi9JREJLZXlQYXRoLmgKQEAgLTQzLDEzICs0Myw2
IEBAIGVudW0gY2xhc3MgSURCS2V5UGF0aFBhcnNlRXJyb3IgewogfTsKIAogdm9pZCBJREJQYXJz
ZUtleVBhdGgoY29uc3QgU3RyaW5nJiwgVmVjdG9yPFN0cmluZz4mLCBJREJLZXlQYXRoUGFyc2VF
cnJvciYpOwotSURCS2V5UGF0aCBpc29sYXRlZENvcHkoY29uc3QgSURCS2V5UGF0aCYpOwotaW5s
aW5lIHN0ZDo6b3B0aW9uYWw8SURCS2V5UGF0aD4gaXNvbGF0ZWRDb3B5KGNvbnN0IHN0ZDo6b3B0
aW9uYWw8SURCS2V5UGF0aD4mIHZhcmlhbnQpCi17Ci0gICAgaWYgKCF2YXJpYW50KQotICAgICAg
ICByZXR1cm4geyB9OwotICAgIHJldHVybiBpc29sYXRlZENvcHkodmFyaWFudC52YWx1ZSgpKTsK
LX0KIAogI2lmICFMT0dfRElTQUJMRUQKIFN0cmluZyBsb2dnaW5nU3RyaW5nKGNvbnN0IElEQktl
eVBhdGgmKTsKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL01vZHVsZXMvaW5kZXhlZGRiL0lE
QlRyYW5zYWN0aW9uLmNwcCBiL1NvdXJjZS9XZWJDb3JlL01vZHVsZXMvaW5kZXhlZGRiL0lEQlRy
YW5zYWN0aW9uLmNwcAppbmRleCA1YTAzNjBjNGI4ZWI2Y2Q0ZmMxZmQ1MWQ5NzE0Y2UxZDJjNzQ1
MDM0Li42YzExMjFiNzMxMGY3MzdmN2I5NWJlY2VlODQ1NGU2YWM1MGRmMmI2IDEwMDY0NAotLS0g
YS9Tb3VyY2UvV2ViQ29yZS9Nb2R1bGVzL2luZGV4ZWRkYi9JREJUcmFuc2FjdGlvbi5jcHAKKysr
IGIvU291cmNlL1dlYkNvcmUvTW9kdWxlcy9pbmRleGVkZGIvSURCVHJhbnNhY3Rpb24uY3BwCkBA
IC0yNjksMTAgKzI2OSw4IEBAIHZvaWQgSURCVHJhbnNhY3Rpb246OmFib3J0SW5Qcm9ncmVzc09w
ZXJhdGlvbnMoY29uc3QgSURCRXJyb3ImIGVycm9yKQogewogICAgIExPRyhJbmRleGVkREIsICJJ
REJUcmFuc2FjdGlvbjo6YWJvcnRJblByb2dyZXNzT3BlcmF0aW9ucyIpOwogCi0gICAgVmVjdG9y
PFJlZlB0cjxJREJDbGllbnQ6OlRyYW5zYWN0aW9uT3BlcmF0aW9uPj4gaW5Qcm9ncmVzc0Fib3J0
VmVjdG9yOwotICAgIGluUHJvZ3Jlc3NBYm9ydFZlY3Rvci5yZXNlcnZlSW5pdGlhbENhcGFjaXR5
KG1fdHJhbnNhY3Rpb25PcGVyYXRpb25zSW5Qcm9ncmVzc1F1ZXVlLnNpemUoKSk7Ci0gICAgd2hp
bGUgKCFtX3RyYW5zYWN0aW9uT3BlcmF0aW9uc0luUHJvZ3Jlc3NRdWV1ZS5pc0VtcHR5KCkpCi0g
ICAgICAgIGluUHJvZ3Jlc3NBYm9ydFZlY3Rvci51bmNoZWNrZWRBcHBlbmQobV90cmFuc2FjdGlv
bk9wZXJhdGlvbnNJblByb2dyZXNzUXVldWUudGFrZUZpcnN0KCkpOworICAgIGF1dG8gaW5Qcm9n
cmVzc0Fib3J0VmVjdG9yID0gY29weVRvVmVjdG9yT2Y8UmVmUHRyPElEQkNsaWVudDo6VHJhbnNh
Y3Rpb25PcGVyYXRpb24+PihtX3RyYW5zYWN0aW9uT3BlcmF0aW9uc0luUHJvZ3Jlc3NRdWV1ZSk7
CisgICAgbV90cmFuc2FjdGlvbk9wZXJhdGlvbnNJblByb2dyZXNzUXVldWUuY2xlYXIoKTsKIAog
ICAgIGZvciAoYXV0byYgb3BlcmF0aW9uIDogaW5Qcm9ncmVzc0Fib3J0VmVjdG9yKSB7CiAgICAg
ICAgIG1fdHJhbnNhY3Rpb25PcGVyYXRpb25zSW5Qcm9ncmVzc1F1ZXVlLmFwcGVuZChvcGVyYXRp
b24uZ2V0KCkpOwpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvTW9kdWxlcy9pbmRleGVkZGIv
Y2xpZW50L0lEQkNvbm5lY3Rpb25Qcm94eS5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9Nb2R1bGVzL2lu
ZGV4ZWRkYi9jbGllbnQvSURCQ29ubmVjdGlvblByb3h5LmNwcAppbmRleCA2Njc4MmVjZGUzZTQ3
MjFlY2I0YjM0YzBkZDIwMzdjOTE1ZTI4ZGZiLi4xY2U5MDc3YzBlMWRmNmNiM2IxZmU5NTFjMjk2
ZTgxY2E4ODE1ZGQ5IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9Nb2R1bGVzL2luZGV4ZWRk
Yi9jbGllbnQvSURCQ29ubmVjdGlvblByb3h5LmNwcAorKysgYi9Tb3VyY2UvV2ViQ29yZS9Nb2R1
bGVzL2luZGV4ZWRkYi9jbGllbnQvSURCQ29ubmVjdGlvblByb3h5LmNwcApAQCAtNTc1LDE3ICs1
NzUsOSBAQCB2b2lkIHJlbW92ZUl0ZW1zTWF0Y2hpbmdDdXJyZW50VGhyZWFkKEhhc2hNYXA8S2V5
VHlwZSwgVmFsdWVUeXBlPiYgbWFwKQogewogICAgIC8vIEZJWE1FOiBSZXZpc2l0IHdoZW4gaW50
cm9kdWNpbmcgV2ViVGhyZWFkIGF3YXJlIHRocmVhZCBjb21wYXJpc29uLgogICAgIC8vIGh0dHBz
Oi8vYnVncy53ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9pZD0yMDQzNDUKLSAgICBhdXRvJiBjdXJy
ZW50VGhyZWFkID0gVGhyZWFkOjpjdXJyZW50KCk7Ci0KLSAgICBWZWN0b3I8S2V5VHlwZT4ga2V5
czsKLSAgICBrZXlzLnJlc2VydmVJbml0aWFsQ2FwYWNpdHkobWFwLnNpemUoKSk7Ci0gICAgZm9y
IChhdXRvJiBpdGVyYXRvciA6IG1hcCkgewotICAgICAgICBpZiAoJml0ZXJhdG9yLnZhbHVlLT5v
cmlnaW5UaHJlYWQoKSA9PSAmY3VycmVudFRocmVhZCkKLSAgICAgICAgICAgIGtleXMudW5jaGVj
a2VkQXBwZW5kKGl0ZXJhdG9yLmtleSk7Ci0gICAgfQotCi0gICAgZm9yIChhdXRvJiBrZXkgOiBr
ZXlzKQotICAgICAgICBtYXAucmVtb3ZlKGtleSk7CisgICAgbWFwLnJlbW92ZUlmKFtjdXJyZW50
VGhyZWFkID0gJlRocmVhZDo6Y3VycmVudCgpXShhdXRvJiBlbnRyeSkgeworICAgICAgICByZXR1
cm4gJmVudHJ5LnZhbHVlLT5vcmlnaW5UaHJlYWQoKSA9PSBjdXJyZW50VGhyZWFkOworICAgIH0p
OwogfQogCiB0ZW1wbGF0ZTx0eXBlbmFtZSBLZXlUeXBlLCB0eXBlbmFtZSBWYWx1ZVR5cGU+CmRp
ZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9Nb2R1bGVzL2luZGV4ZWRkYi9zZXJ2ZXIvTWVtb3J5
T2JqZWN0U3RvcmUuY3BwIGIvU291cmNlL1dlYkNvcmUvTW9kdWxlcy9pbmRleGVkZGIvc2VydmVy
L01lbW9yeU9iamVjdFN0b3JlLmNwcAppbmRleCBlMDFlZTAyYjcxNTIzOTljYzcyNmZiMThiYzM0
OTE0NjA0ZGU3M2VjLi4yYjQ3NTg4NzVlYWU0NTBmMGU0ZWM2Nzg3MTVkYTEwOGY4MDlmNGZmIDEw
MDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9Nb2R1bGVzL2luZGV4ZWRkYi9zZXJ2ZXIvTWVtb3J5
T2JqZWN0U3RvcmUuY3BwCisrKyBiL1NvdXJjZS9XZWJDb3JlL01vZHVsZXMvaW5kZXhlZGRiL3Nl
cnZlci9NZW1vcnlPYmplY3RTdG9yZS5jcHAKQEAgLTE1NSwxMiArMTU1LDkgQEAgSURCRXJyb3Ig
TWVtb3J5T2JqZWN0U3RvcmU6OmRlbGV0ZUluZGV4KE1lbW9yeUJhY2tpbmdTdG9yZVRyYW5zYWN0
aW9uJiB0cmFuc2FjdGkKIAogdm9pZCBNZW1vcnlPYmplY3RTdG9yZTo6ZGVsZXRlQWxsSW5kZXhl
cyhNZW1vcnlCYWNraW5nU3RvcmVUcmFuc2FjdGlvbiYgdHJhbnNhY3Rpb24pCiB7Ci0gICAgVmVj
dG9yPHVpbnQ2NF90PiBpbmRleElkZW50aWZpZXJzOwotICAgIGluZGV4SWRlbnRpZmllcnMucmVz
ZXJ2ZUluaXRpYWxDYXBhY2l0eShtX2luZGV4ZXNCeU5hbWUuc2l6ZSgpKTsKLQotICAgIGZvciAo
YXV0byYgaW5kZXggOiBtX2luZGV4ZXNCeU5hbWUudmFsdWVzKCkpCi0gICAgICAgIGluZGV4SWRl
bnRpZmllcnMudW5jaGVja2VkQXBwZW5kKGluZGV4LT5pbmZvKCkuaWRlbnRpZmllcigpKTsKLQor
ICAgIGF1dG8gaW5kZXhJZGVudGlmaWVycyA9IFdURjo6bWFwKG1faW5kZXhlc0J5TmFtZSwgW10o
YXV0byYgZW50cnkpIHsKKyAgICAgICAgcmV0dXJuIGVudHJ5LnZhbHVlLT5pbmZvKCkuaWRlbnRp
ZmllcigpOworICAgIH0pOwogICAgIGZvciAoYXV0byBpZGVudGlmaWVyIDogaW5kZXhJZGVudGlm
aWVycykKICAgICAgICAgZGVsZXRlSW5kZXgodHJhbnNhY3Rpb24sIGlkZW50aWZpZXIpOwogfQpk
aWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvTW9kdWxlcy9pbmRleGVkZGIvc2VydmVyL1NRTGl0
ZUlEQkN1cnNvci5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9Nb2R1bGVzL2luZGV4ZWRkYi9zZXJ2ZXIv
U1FMaXRlSURCQ3Vyc29yLmNwcAppbmRleCA0ODYxMDM0ZDNhMTJkYTBjMDljZmVkZmU5ZjJlYTY1
YTY4MTAwMzUyLi42NjdmNWU3OTU3YjRiNjU3NmI4MjNhNjVjMDQ4OWFhY2Q0Nzg5MzhkIDEwMDY0
NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9Nb2R1bGVzL2luZGV4ZWRkYi9zZXJ2ZXIvU1FMaXRlSURC
Q3Vyc29yLmNwcAorKysgYi9Tb3VyY2UvV2ViQ29yZS9Nb2R1bGVzL2luZGV4ZWRkYi9zZXJ2ZXIv
U1FMaXRlSURCQ3Vyc29yLmNwcApAQCAtMTE2LDE3ICsxMTYsMTggQEAgdm9pZCBTUUxpdGVJREJD
dXJzb3I6OmN1cnJlbnREYXRhKElEQkdldFJlc3VsdCYgcmVzdWx0LCBjb25zdCBzdGQ6Om9wdGlv
bmFsPElEQksKICAgICB9CiAKICAgICBWZWN0b3I8SURCQ3Vyc29yUmVjb3JkPiBwcmVmZXRjaGVk
UmVjb3JkczsKLSAgICBwcmVmZXRjaGVkUmVjb3Jkcy5yZXNlcnZlQ2FwYWNpdHkobV9mZXRjaGVk
UmVjb3Jkcy5zaXplKCkpOworICAgIHByZWZldGNoZWRSZWNvcmRzLnJlc2VydmVJbml0aWFsQ2Fw
YWNpdHkobV9mZXRjaGVkUmVjb3Jkcy5zaXplKCkpOworICAgIGJvb2wgaXNGaXJzdCA9IHRydWU7
CiAgICAgZm9yIChhdXRvJiByZWNvcmQgOiBtX2ZldGNoZWRSZWNvcmRzKSB7CiAgICAgICAgIGlm
IChyZWNvcmQuaXNUZXJtaW5hbFJlY29yZCgpKQogICAgICAgICAgICAgYnJlYWs7Ci0KLSAgICAg
ICAgcHJlZmV0Y2hlZFJlY29yZHMuYXBwZW5kKHJlY29yZC5yZWNvcmQpOworICAgICAgICBpZiAo
aXNGaXJzdCkgeworICAgICAgICAgICAgaXNGaXJzdCA9IGZhbHNlOworICAgICAgICAgICAgY29u
dGludWU7CisgICAgICAgIH0KKyAgICAgICAgcHJlZmV0Y2hlZFJlY29yZHMudW5jaGVja2VkQXBw
ZW5kKHJlY29yZC5yZWNvcmQpOwogICAgIH0KLQotICAgIC8vIEZpcnN0IHJlY29yZCB3aWxsIGJl
IHJldHVybmVkIGFzIGN1cnJlbnQgcmVjb3JkLgotICAgIGlmICghcHJlZmV0Y2hlZFJlY29yZHMu
aXNFbXB0eSgpKQotICAgICAgICBwcmVmZXRjaGVkUmVjb3Jkcy5yZW1vdmUoMCk7CisgICAgcHJl
ZmV0Y2hlZFJlY29yZHMuc2hyaW5rVG9GaXQoKTsKIAogICAgIHJlc3VsdCA9IHsgY3VycmVudFJl
Y29yZC5yZWNvcmQua2V5LCBjdXJyZW50UmVjb3JkLnJlY29yZC5wcmltYXJ5S2V5LCBJREJWYWx1
ZShjdXJyZW50UmVjb3JkLnJlY29yZC52YWx1ZSksIGtleVBhdGgsIFdURk1vdmUocHJlZmV0Y2hl
ZFJlY29yZHMpIH07CiB9CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9Nb2R1bGVzL2luZGV4
ZWRkYi9zaGFyZWQvSURCRGF0YWJhc2VJbmZvLmNwcCBiL1NvdXJjZS9XZWJDb3JlL01vZHVsZXMv
aW5kZXhlZGRiL3NoYXJlZC9JREJEYXRhYmFzZUluZm8uY3BwCmluZGV4IGFiYWVjNmM1Y2ZiY2Vk
OWZjNjZlZjU0ZmQ4ZGZkMmM3YTI3YzkxNmMuLjhmNjUwMzVlZDRlYWQ5NTgyYjhiNzhlMmNlNzdk
NTIzMzhjZmJiM2YgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL01vZHVsZXMvaW5kZXhlZGRi
L3NoYXJlZC9JREJEYXRhYmFzZUluZm8uY3BwCisrKyBiL1NvdXJjZS9XZWJDb3JlL01vZHVsZXMv
aW5kZXhlZGRiL3NoYXJlZC9JREJEYXRhYmFzZUluZm8uY3BwCkBAIC0xMzYsMTIgKzEzNiw5IEBA
IHZvaWQgSURCRGF0YWJhc2VJbmZvOjpyZW5hbWVPYmplY3RTdG9yZSh1aW50NjRfdCBvYmplY3RT
dG9yZUlkZW50aWZpZXIsIGNvbnN0IFN0CiAKIFZlY3RvcjxTdHJpbmc+IElEQkRhdGFiYXNlSW5m
bzo6b2JqZWN0U3RvcmVOYW1lcygpIGNvbnN0CiB7Ci0gICAgVmVjdG9yPFN0cmluZz4gbmFtZXM7
Ci0gICAgbmFtZXMucmVzZXJ2ZUNhcGFjaXR5KG1fb2JqZWN0U3RvcmVNYXAuc2l6ZSgpKTsKLSAg
ICBmb3IgKGF1dG8mIG9iamVjdFN0b3JlIDogbV9vYmplY3RTdG9yZU1hcC52YWx1ZXMoKSkKLSAg
ICAgICAgbmFtZXMudW5jaGVja2VkQXBwZW5kKG9iamVjdFN0b3JlLm5hbWUoKSk7Ci0KLSAgICBy
ZXR1cm4gbmFtZXM7CisgICAgcmV0dXJuIFdURjo6bWFwKG1fb2JqZWN0U3RvcmVNYXAsIFtdKGF1
dG8mIHBhaXIpIHsKKyAgICAgICAgcmV0dXJuIHBhaXIudmFsdWUubmFtZSgpOworICAgIH0pOwog
fQogCiB2b2lkIElEQkRhdGFiYXNlSW5mbzo6ZGVsZXRlT2JqZWN0U3RvcmUoY29uc3QgU3RyaW5n
JiBvYmplY3RTdG9yZU5hbWUpCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9Nb2R1bGVzL2lu
ZGV4ZWRkYi9zaGFyZWQvSURCSW5kZXhJbmZvLmNwcCBiL1NvdXJjZS9XZWJDb3JlL01vZHVsZXMv
aW5kZXhlZGRiL3NoYXJlZC9JREJJbmRleEluZm8uY3BwCmluZGV4IDM4MTY4ZWMyOTlkYTdkODgw
ZmIwN2MwMWJkNDZjMjc0ZWNiZTM3M2QuLjAxNWFjZjcyNzY5NDUzNzRjNGFkYjhhZDI0MzRiYTNi
Nzk5YWFmZGEgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL01vZHVsZXMvaW5kZXhlZGRiL3No
YXJlZC9JREJJbmRleEluZm8uY3BwCisrKyBiL1NvdXJjZS9XZWJDb3JlL01vZHVsZXMvaW5kZXhl
ZGRiL3NoYXJlZC9JREJJbmRleEluZm8uY3BwCkBAIC0yNiw2ICsyNiw3IEBACiAjaW5jbHVkZSAi
Y29uZmlnLmgiCiAjaW5jbHVkZSAiSURCSW5kZXhJbmZvLmgiCiAKKyNpbmNsdWRlIDx3dGYvQ3Jv
c3NUaHJlYWRDb3BpZXIuaD4KICNpbmNsdWRlIDx3dGYvdGV4dC9TdHJpbmdDb25jYXRlbmF0ZU51
bWJlcnMuaD4KIAogbmFtZXNwYWNlIFdlYkNvcmUgewpAQCAtNDYsNyArNDcsNyBAQCBJREJJbmRl
eEluZm86OklEQkluZGV4SW5mbyh1aW50NjRfdCBpZGVudGlmaWVyLCB1aW50NjRfdCBvYmplY3RT
dG9yZUlkZW50aWZpZXIsCiAKIElEQkluZGV4SW5mbyBJREJJbmRleEluZm86Omlzb2xhdGVkQ29w
eSgpIGNvbnN0CiB7Ci0gICAgcmV0dXJuIHsgbV9pZGVudGlmaWVyLCBtX29iamVjdFN0b3JlSWRl
bnRpZmllciwgbV9uYW1lLmlzb2xhdGVkQ29weSgpLCBXZWJDb3JlOjppc29sYXRlZENvcHkobV9r
ZXlQYXRoKSwgbV91bmlxdWUsIG1fbXVsdGlFbnRyeSB9OworICAgIHJldHVybiB7IG1faWRlbnRp
ZmllciwgbV9vYmplY3RTdG9yZUlkZW50aWZpZXIsIG1fbmFtZS5pc29sYXRlZENvcHkoKSwgY3Jv
c3NUaHJlYWRDb3B5KG1fa2V5UGF0aCksIG1fdW5pcXVlLCBtX211bHRpRW50cnkgfTsKIH0KIAog
I2lmICFMT0dfRElTQUJMRUQKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL01vZHVsZXMvaW5k
ZXhlZGRiL3NoYXJlZC9JREJPYmplY3RTdG9yZUluZm8uY3BwIGIvU291cmNlL1dlYkNvcmUvTW9k
dWxlcy9pbmRleGVkZGIvc2hhcmVkL0lEQk9iamVjdFN0b3JlSW5mby5jcHAKaW5kZXggYTRkZDYx
YWU2YTM0ZDdiZjNjMWEyOTljNzBkNmExYzBiYjZlYjE4My4uMTBjMWE0YzUxNWUyZWFlZjgwOTM5
NDJiYjM2YzVkOGQ1MjM0YzBjYyAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvTW9kdWxlcy9p
bmRleGVkZGIvc2hhcmVkL0lEQk9iamVjdFN0b3JlSW5mby5jcHAKKysrIGIvU291cmNlL1dlYkNv
cmUvTW9kdWxlcy9pbmRleGVkZGIvc2hhcmVkL0lEQk9iamVjdFN0b3JlSW5mby5jcHAKQEAgLTI1
LDYgKzI1LDggQEAKIAogI2luY2x1ZGUgImNvbmZpZy5oIgogI2luY2x1ZGUgIklEQk9iamVjdFN0
b3JlSW5mby5oIgorCisjaW5jbHVkZSA8d3RmL0Nyb3NzVGhyZWFkQ29waWVyLmg+CiAjaW5jbHVk
ZSA8d3RmL3RleHQvU3RyaW5nQnVpbGRlci5oPgogCiBuYW1lc3BhY2UgV2ViQ29yZSB7CkBAIC05
Miw3ICs5NCw3IEBAIElEQkluZGV4SW5mbyogSURCT2JqZWN0U3RvcmVJbmZvOjppbmZvRm9yRXhp
c3RpbmdJbmRleCh1aW50NjRfdCBpZGVudGlmaWVyKQogCiBJREJPYmplY3RTdG9yZUluZm8gSURC
T2JqZWN0U3RvcmVJbmZvOjppc29sYXRlZENvcHkoKSBjb25zdAogewotICAgIElEQk9iamVjdFN0
b3JlSW5mbyByZXN1bHQgPSB7IG1faWRlbnRpZmllciwgbV9uYW1lLmlzb2xhdGVkQ29weSgpLCBX
ZWJDb3JlOjppc29sYXRlZENvcHkobV9rZXlQYXRoKSwgbV9hdXRvSW5jcmVtZW50IH07CisgICAg
SURCT2JqZWN0U3RvcmVJbmZvIHJlc3VsdCA9IHsgbV9pZGVudGlmaWVyLCBtX25hbWUuaXNvbGF0
ZWRDb3B5KCksIGNyb3NzVGhyZWFkQ29weShtX2tleVBhdGgpLCBtX2F1dG9JbmNyZW1lbnQgfTsK
IAogICAgIGZvciAoYXV0byYgaXRlcmF0b3IgOiBtX2luZGV4TWFwKQogICAgICAgICByZXN1bHQu
bV9pbmRleE1hcC5zZXQoaXRlcmF0b3Iua2V5LCBpdGVyYXRvci52YWx1ZS5pc29sYXRlZENvcHko
KSk7CkBAIC0xMDIsMTIgKzEwNCw5IEBAIElEQk9iamVjdFN0b3JlSW5mbyBJREJPYmplY3RTdG9y
ZUluZm86Omlzb2xhdGVkQ29weSgpIGNvbnN0CiAKIFZlY3RvcjxTdHJpbmc+IElEQk9iamVjdFN0
b3JlSW5mbzo6aW5kZXhOYW1lcygpIGNvbnN0CiB7Ci0gICAgVmVjdG9yPFN0cmluZz4gbmFtZXM7
Ci0gICAgbmFtZXMucmVzZXJ2ZUNhcGFjaXR5KG1faW5kZXhNYXAuc2l6ZSgpKTsKLSAgICBmb3Ig
KGF1dG8mIGluZGV4IDogbV9pbmRleE1hcC52YWx1ZXMoKSkKLSAgICAgICAgbmFtZXMudW5jaGVj
a2VkQXBwZW5kKGluZGV4Lm5hbWUoKSk7Ci0KLSAgICByZXR1cm4gbmFtZXM7CisgICAgcmV0dXJu
IFdURjo6bWFwKG1faW5kZXhNYXAsIFtdKGF1dG8mIHBhaXIpIC0+IFN0cmluZyB7CisgICAgICAg
IHJldHVybiBwYWlyLnZhbHVlLm5hbWUoKTsKKyAgICB9KTsKIH0KIAogdm9pZCBJREJPYmplY3RT
dG9yZUluZm86OmRlbGV0ZUluZGV4KGNvbnN0IFN0cmluZyYgaW5kZXhOYW1lKQpkaWZmIC0tZ2l0
IGEvU291cmNlL1dlYkNvcmUvTW9kdWxlcy9pbmRleGVkZGIvc2hhcmVkL0lEQlRyYW5zYWN0aW9u
SW5mby5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9Nb2R1bGVzL2luZGV4ZWRkYi9zaGFyZWQvSURCVHJh
bnNhY3Rpb25JbmZvLmNwcAppbmRleCAzNWRhZTM5OTIyMjcyNDM0MjE0NzYwN2ZiODQzNWJkMTg3
YzQ5NjJmLi5hMDlmMzBiYmU1MWI1YjZiZmE2NTMyZGI5NjE4Njg3MjY0MjNkNTQ0IDEwMDY0NAot
LS0gYS9Tb3VyY2UvV2ViQ29yZS9Nb2R1bGVzL2luZGV4ZWRkYi9zaGFyZWQvSURCVHJhbnNhY3Rp
b25JbmZvLmNwcAorKysgYi9Tb3VyY2UvV2ViQ29yZS9Nb2R1bGVzL2luZGV4ZWRkYi9zaGFyZWQv
SURCVHJhbnNhY3Rpb25JbmZvLmNwcApAQCAtODgsOSArODgsOSBAQCB2b2lkIElEQlRyYW5zYWN0
aW9uSW5mbzo6aXNvbGF0ZWRDb3B5KGNvbnN0IElEQlRyYW5zYWN0aW9uSW5mbyYgc291cmNlLCBJ
REJUcmFucwogICAgIGRlc3RpbmF0aW9uLm1fZHVyYWJpbGl0eSA9IHNvdXJjZS5tX2R1cmFiaWxp
dHk7CiAgICAgZGVzdGluYXRpb24ubV9uZXdWZXJzaW9uID0gc291cmNlLm1fbmV3VmVyc2lvbjsK
IAotICAgIGRlc3RpbmF0aW9uLm1fb2JqZWN0U3RvcmVzLnJlc2VydmVDYXBhY2l0eShzb3VyY2Uu
bV9vYmplY3RTdG9yZXMuc2l6ZSgpKTsKLSAgICBmb3IgKGF1dG8mIG9iamVjdFN0b3JlIDogc291
cmNlLm1fb2JqZWN0U3RvcmVzKQotICAgICAgICBkZXN0aW5hdGlvbi5tX29iamVjdFN0b3Jlcy51
bmNoZWNrZWRBcHBlbmQob2JqZWN0U3RvcmUuaXNvbGF0ZWRDb3B5KCkpOworICAgIGRlc3RpbmF0
aW9uLm1fb2JqZWN0U3RvcmVzID0gc291cmNlLm1fb2JqZWN0U3RvcmVzLm1hcChbXShhdXRvJiBv
YmplY3RTdG9yZSkgeworICAgICAgICByZXR1cm4gb2JqZWN0U3RvcmUuaXNvbGF0ZWRDb3B5KCk7
CisgICAgfSk7CiAKICAgICBpZiAoc291cmNlLm1fb3JpZ2luYWxEYXRhYmFzZUluZm8pCiAgICAg
ICAgIGRlc3RpbmF0aW9uLm1fb3JpZ2luYWxEYXRhYmFzZUluZm8gPSBtYWtlVW5pcXVlPElEQkRh
dGFiYXNlSW5mbz4oKnNvdXJjZS5tX29yaWdpbmFsRGF0YWJhc2VJbmZvLCBJREJEYXRhYmFzZUlu
Zm86Oklzb2xhdGVkQ29weSk7CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9Nb2R1bGVzL2lu
ZGV4ZWRkYi9zaGFyZWQvSW5kZXhLZXkuY3BwIGIvU291cmNlL1dlYkNvcmUvTW9kdWxlcy9pbmRl
eGVkZGIvc2hhcmVkL0luZGV4S2V5LmNwcAppbmRleCAyYzFhMDE3ZjY5MzcxZWE2NTg0YzI1YTdi
OWZlOTFmNjRmYTMxM2U4Li5iNTg3NWRjYmVlNzZjNzExOTBhNzAxYTE1YjFhOTAzNTc1Yzg0MDY3
IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9Nb2R1bGVzL2luZGV4ZWRkYi9zaGFyZWQvSW5k
ZXhLZXkuY3BwCisrKyBiL1NvdXJjZS9XZWJDb3JlL01vZHVsZXMvaW5kZXhlZGRiL3NoYXJlZC9J
bmRleEtleS5jcHAKQEAgLTI2LDExICsyNiwxMSBAQAogI2luY2x1ZGUgImNvbmZpZy5oIgogI2lu
Y2x1ZGUgIkluZGV4S2V5LmgiCiAKKyNpbmNsdWRlIDx3dGYvQ3Jvc3NUaHJlYWRDb3BpZXIuaD4K
KwogbmFtZXNwYWNlIFdlYkNvcmUgewogCi1JbmRleEtleTo6SW5kZXhLZXkoKQotewotfQorSW5k
ZXhLZXk6OkluZGV4S2V5KCkgPSBkZWZhdWx0OwogCiBJbmRleEtleTo6SW5kZXhLZXkoVmVjdG9y
PElEQktleURhdGE+JiYga2V5cykKIHsKQEAgLTM5LDEyICszOSw3IEBAIEluZGV4S2V5OjpJbmRl
eEtleShWZWN0b3I8SURCS2V5RGF0YT4mJiBrZXlzKQogCiBJbmRleEtleSBJbmRleEtleTo6aXNv
bGF0ZWRDb3B5KCkgY29uc3QKIHsKLSAgICBWZWN0b3I8SURCS2V5RGF0YT4ga2V5czsKLSAgICBr
ZXlzLnJlc2VydmVJbml0aWFsQ2FwYWNpdHkobV9rZXlzLnNpemUoKSk7Ci0gICAgZm9yIChhdXRv
JiBrZXkgOiBtX2tleXMpCi0gICAgICAgIGtleXMudW5jaGVja2VkQXBwZW5kKGtleS5pc29sYXRl
ZENvcHkoKSk7Ci0KLSAgICByZXR1cm4geyBXVEZNb3ZlKGtleXMpIH07CisgICAgcmV0dXJuIHsg
Y3Jvc3NUaHJlYWRDb3B5KG1fa2V5cykgfTsKIH0KIAogSURCS2V5RGF0YSBJbmRleEtleTo6YXNP
bmVLZXkoKSBjb25zdApkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvTW9kdWxlcy9tZWRpYXN0
cmVhbS9NZWRpYVN0cmVhbS5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9Nb2R1bGVzL21lZGlhc3RyZWFt
L01lZGlhU3RyZWFtLmNwcAppbmRleCA1ZGQ4YzY2Y2Q4NGNmZjllM2JmN2E2MGM4OGFiOTRhNzUy
MjY2MGIzLi42MGFkODBiMDc0NjQzMTM5NmM3MTIzNjU2ZTgyMGJjYWU4NmFiMDBkIDEwMDY0NAot
LS0gYS9Tb3VyY2UvV2ViQ29yZS9Nb2R1bGVzL21lZGlhc3RyZWFtL01lZGlhU3RyZWFtLmNwcAor
KysgYi9Tb3VyY2UvV2ViQ29yZS9Nb2R1bGVzL21lZGlhc3RyZWFtL01lZGlhU3RyZWFtLmNwcApA
QCAtMTE5LDEzICsxMTksMTAgQEAgUmVmUHRyPE1lZGlhU3RyZWFtPiBNZWRpYVN0cmVhbTo6Y2xv
bmUoKQogewogICAgIEFMV0FZU19MT0coTE9HSURFTlRJRklFUik7CiAKLSAgICBNZWRpYVN0cmVh
bVRyYWNrVmVjdG9yIGNsb25lZFRyYWNrczsKLSAgICBjbG9uZWRUcmFja3MucmVzZXJ2ZUluaXRp
YWxDYXBhY2l0eShtX3RyYWNrU2V0LnNpemUoKSk7Ci0KLSAgICBmb3IgKGF1dG8mIHRyYWNrIDog
bV90cmFja1NldC52YWx1ZXMoKSkKLSAgICAgICAgY2xvbmVkVHJhY2tzLnVuY2hlY2tlZEFwcGVu
ZCh0cmFjay0+Y2xvbmUoKSk7Ci0KLSAgICByZXR1cm4gTWVkaWFTdHJlYW06OmNyZWF0ZSgqZG9j
dW1lbnQoKSwgY2xvbmVkVHJhY2tzKTsKKyAgICBhdXRvIGNsb25lZFRyYWNrcyA9IFdURjo6bWFw
KG1fdHJhY2tTZXQsIFtdKGF1dG8mIGVudHJ5KSB7CisgICAgICAgIHJldHVybiBlbnRyeS52YWx1
ZS0+Y2xvbmUoKTsKKyAgICB9KTsKKyAgICByZXR1cm4gTWVkaWFTdHJlYW06OmNyZWF0ZSgqZG9j
dW1lbnQoKSwgV1RGTW92ZShjbG9uZWRUcmFja3MpKTsKIH0KIAogdm9pZCBNZWRpYVN0cmVhbTo6
YWRkVHJhY2soTWVkaWFTdHJlYW1UcmFjayYgdHJhY2spCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2Vi
Q29yZS9Nb2R1bGVzL21lZGlhc3RyZWFtL01lZGlhU3RyZWFtVHJhY2suY3BwIGIvU291cmNlL1dl
YkNvcmUvTW9kdWxlcy9tZWRpYXN0cmVhbS9NZWRpYVN0cmVhbVRyYWNrLmNwcAppbmRleCBiZWJl
OGVmMWYyYWYxNmRmODI3NzQ5MTFhYjFmYzU5ZTcyZDRlODA3Li5hNDVkMTllNTQ3Mzk5NTZkYjc4
MDYzYzdjYWJlOGE4ZTBmMTA0ZDRkIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9Nb2R1bGVz
L21lZGlhc3RyZWFtL01lZGlhU3RyZWFtVHJhY2suY3BwCisrKyBiL1NvdXJjZS9XZWJDb3JlL01v
ZHVsZXMvbWVkaWFzdHJlYW0vTWVkaWFTdHJlYW1UcmFjay5jcHAKQEAgLTMyMSwxMSArMzIxLDkg
QEAgc3RhdGljIExvbmdSYW5nZSBjYXBhYmlsaXR5SW50UmFuZ2UoY29uc3QgQ2FwYWJpbGl0eVZh
bHVlT3JSYW5nZSYgdmFsdWUpCiAKIHN0YXRpYyBWZWN0b3I8U3RyaW5nPiBjYXBhYmlsaXR5U3Ry
aW5nVmVjdG9yKGNvbnN0IFZlY3RvcjxSZWFsdGltZU1lZGlhU291cmNlU2V0dGluZ3M6OlZpZGVv
RmFjaW5nTW9kZT4mIG1vZGVzKQogewotICAgIFZlY3RvcjxTdHJpbmc+IHJlc3VsdDsKLSAgICBy
ZXN1bHQucmVzZXJ2ZUluaXRpYWxDYXBhY2l0eShtb2Rlcy5zaXplKCkpOwotICAgIGZvciAoYXV0
byYgbW9kZSA6IG1vZGVzKQotICAgICAgICByZXN1bHQudW5jaGVja2VkQXBwZW5kKFJlYWx0aW1l
TWVkaWFTb3VyY2VTZXR0aW5nczo6ZmFjaW5nTW9kZShtb2RlKSk7Ci0gICAgcmV0dXJuIHJlc3Vs
dDsKKyAgICByZXR1cm4gbW9kZXMubWFwKFtdKGF1dG8mIG1vZGUpIHsKKyAgICAgICAgcmV0dXJu
IFJlYWx0aW1lTWVkaWFTb3VyY2VTZXR0aW5nczo6ZmFjaW5nTW9kZShtb2RlKTsKKyAgICB9KTsK
IH0KIAogc3RhdGljIFZlY3Rvcjxib29sPiBjYXBhYmlsaXR5Qm9vbGVhblZlY3RvcihSZWFsdGlt
ZU1lZGlhU291cmNlQ2FwYWJpbGl0aWVzOjpFY2hvQ2FuY2VsbGF0aW9uIGNhbmNlbGxhdGlvbikK
ZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL01vZHVsZXMvbWVkaWFzdHJlYW0vTWVkaWFUcmFj
a0NvbnN0cmFpbnRzLmNwcCBiL1NvdXJjZS9XZWJDb3JlL01vZHVsZXMvbWVkaWFzdHJlYW0vTWVk
aWFUcmFja0NvbnN0cmFpbnRzLmNwcAppbmRleCA5ZjEwNDgyMTk2OTQxYjBmNTI0Njg1MzFjNDA0
ZjU0ZjYwYTQ3YzQ5Li4zMTEzODQ3ZGI3NTQ4NDdkNjE2MmZhMmQ2MWU2NzM0YTZhODg4NWIzIDEw
MDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9Nb2R1bGVzL21lZGlhc3RyZWFtL01lZGlhVHJhY2tD
b25zdHJhaW50cy5jcHAKKysrIGIvU291cmNlL1dlYkNvcmUvTW9kdWxlcy9tZWRpYXN0cmVhbS9N
ZWRpYVRyYWNrQ29uc3RyYWludHMuY3BwCkBAIC0xNzgsMTEgKzE3OCw5IEBAIHN0YXRpYyBNZWRp
YVRyYWNrQ29uc3RyYWludFNldE1hcCBjb252ZXJ0VG9JbnRlcm5hbEZvcm0oQ29uc3RyYWludFNl
dFR5cGUgc2V0VHlwCiAKIHN0YXRpYyBWZWN0b3I8TWVkaWFUcmFja0NvbnN0cmFpbnRTZXRNYXA+
IGNvbnZlcnRBZHZhbmNlZFRvSW50ZXJuYWxGb3JtKGNvbnN0IFZlY3RvcjxNZWRpYVRyYWNrQ29u
c3RyYWludFNldD4mIHZlY3RvcikKIHsKLSAgICBWZWN0b3I8TWVkaWFUcmFja0NvbnN0cmFpbnRT
ZXRNYXA+IHJlc3VsdDsKLSAgICByZXN1bHQucmVzZXJ2ZUluaXRpYWxDYXBhY2l0eSh2ZWN0b3Iu
c2l6ZSgpKTsKLSAgICBmb3IgKGF1dG8mIHNldCA6IHZlY3RvcikKLSAgICAgICAgcmVzdWx0LnVu
Y2hlY2tlZEFwcGVuZChjb252ZXJ0VG9JbnRlcm5hbEZvcm0oQ29uc3RyYWludFNldFR5cGU6OkFk
dmFuY2VkLCBzZXQpKTsKLSAgICByZXR1cm4gcmVzdWx0OworICAgIHJldHVybiB2ZWN0b3IubWFw
KFtdKGF1dG8mIHNldCkgeworICAgICAgICByZXR1cm4gY29udmVydFRvSW50ZXJuYWxGb3JtKENv
bnN0cmFpbnRTZXRUeXBlOjpBZHZhbmNlZCwgc2V0KTsKKyAgICB9KTsKIH0KIAogc3RhdGljIFZl
Y3RvcjxNZWRpYVRyYWNrQ29uc3RyYWludFNldE1hcD4gY29udmVydEFkdmFuY2VkVG9JbnRlcm5h
bEZvcm0oY29uc3Qgc3RkOjpvcHRpb25hbDxWZWN0b3I8TWVkaWFUcmFja0NvbnN0cmFpbnRTZXQ+
PiYgb3B0aW9uYWxWZWN0b3IpCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9Nb2R1bGVzL21l
ZGlhc3RyZWFtL1NGcmFtZVV0aWxzLmNwcCBiL1NvdXJjZS9XZWJDb3JlL01vZHVsZXMvbWVkaWFz
dHJlYW0vU0ZyYW1lVXRpbHMuY3BwCmluZGV4IGQ4MmI5NmY0NDY5MzlmNmNjMWNiMWVlYTljMTY1
Mjg5OWNkMzUwN2EuLmIwZWYxZDVhNTZjNjIyMWFhYTNiOWI0OWM4ZmY3MmRjYTA0MTJlZGIgMTAw
NjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL01vZHVsZXMvbWVkaWFzdHJlYW0vU0ZyYW1lVXRpbHMu
Y3BwCisrKyBiL1NvdXJjZS9XZWJDb3JlL01vZHVsZXMvbWVkaWFzdHJlYW0vU0ZyYW1lVXRpbHMu
Y3BwCkBAIC0xNjMsOSArMTYzLDkgQEAgc3RhdGljIGlubGluZSB2b2lkIGZpbmRFc2NhcGVSYnNw
UGF0dGVybnMoY29uc3QgVmVjdG9yPHVpbnQ4X3Q+JiBmcmFtZSwgc2l6ZV90IG8KIHZvaWQgdG9S
YnNwKFZlY3Rvcjx1aW50OF90PiYgZnJhbWUsIHNpemVfdCBvZmZzZXQpCiB7CiAgICAgc2l6ZV90
IGNvdW50ID0gMDsKLSAgICBmaW5kRXNjYXBlUmJzcFBhdHRlcm5zKGZyYW1lLCBvZmZzZXQsIFsm
Y291bnRdKHNpemVfdCwgYm9vbCBzaG91ZGxCZUVzY2FwZWQpIHsKLSAgICAgICAgaWYgKHNob3Vk
bEJlRXNjYXBlZCkKLSAgICAgICAgICAgIGNvdW50Kys7CisgICAgZmluZEVzY2FwZVJic3BQYXR0
ZXJucyhmcmFtZSwgb2Zmc2V0LCBbJmNvdW50XShzaXplX3QsIGJvb2wgc2hvdWxkQmVFc2NhcGVk
KSB7CisgICAgICAgIGlmIChzaG91bGRCZUVzY2FwZWQpCisgICAgICAgICAgICArK2NvdW50Owog
ICAgIH0pOwogICAgIGlmICghY291bnQpCiAgICAgICAgIHJldHVybjsKQEAgLTE3NCw4ICsxNzQs
OCBAQCB2b2lkIHRvUmJzcChWZWN0b3I8dWludDhfdD4mIGZyYW1lLCBzaXplX3Qgb2Zmc2V0KQog
ICAgIG5ld0ZyYW1lLnJlc2VydmVJbml0aWFsQ2FwYWNpdHkoZnJhbWUuc2l6ZSgpICsgY291bnQp
OwogICAgIG5ld0ZyYW1lLmFwcGVuZChmcmFtZS5kYXRhKCksIG9mZnNldCk7CiAKLSAgICBmaW5k
RXNjYXBlUmJzcFBhdHRlcm5zKGZyYW1lLCBvZmZzZXQsIFtkYXRhID0gZnJhbWUuZGF0YSgpLCAm
bmV3RnJhbWVdKHNpemVfdCBwb3NpdGlvbiwgYm9vbCBzaG91ZGxCZUVzY2FwZWQpIHsKLSAgICAg
ICAgaWYgKHNob3VkbEJlRXNjYXBlZCkKKyAgICBmaW5kRXNjYXBlUmJzcFBhdHRlcm5zKGZyYW1l
LCBvZmZzZXQsIFtkYXRhID0gZnJhbWUuZGF0YSgpLCAmbmV3RnJhbWVdKHNpemVfdCBwb3NpdGlv
biwgYm9vbCBzaG91bGRCZUVzY2FwZWQpIHsKKyAgICAgICAgaWYgKHNob3VsZEJlRXNjYXBlZCkK
ICAgICAgICAgICAgIG5ld0ZyYW1lLnVuY2hlY2tlZEFwcGVuZCgzKTsKICAgICAgICAgbmV3RnJh
bWUudW5jaGVja2VkQXBwZW5kKGRhdGFbcG9zaXRpb25dKTsKICAgICB9KTsKZGlmZiAtLWdpdCBh
L1NvdXJjZS9XZWJDb3JlL01vZHVsZXMvcmVtb3RlcGxheWJhY2svUmVtb3RlUGxheWJhY2suY3Bw
IGIvU291cmNlL1dlYkNvcmUvTW9kdWxlcy9yZW1vdGVwbGF5YmFjay9SZW1vdGVQbGF5YmFjay5j
cHAKaW5kZXggNDBmYTE4OTAxYmViMDBlOTJiMzdkNzY0M2QzYThhY2NlMmEzMjFjZi4uMmU1MmY4
ZWNmN2RiZDA1N2U4ZjBkMWJmOTAwZGE5N2ZkM2JhNTg1NyAxMDA2NDQKLS0tIGEvU291cmNlL1dl
YkNvcmUvTW9kdWxlcy9yZW1vdGVwbGF5YmFjay9SZW1vdGVQbGF5YmFjay5jcHAKKysrIGIvU291
cmNlL1dlYkNvcmUvTW9kdWxlcy9yZW1vdGVwbGF5YmFjay9SZW1vdGVQbGF5YmFjay5jcHAKQEAg
LTQwOSwxMyArNDA5LDcgQEAgdm9pZCBSZW1vdGVQbGF5YmFjazo6YXZhaWxhYmlsaXR5Q2hhbmdl
ZChib29sIGF2YWlsYWJsZSkKICAgICAgICAgICAgIHJldHVybjsKIAogICAgICAgICAvLyBQcm90
ZWN0IG1fY2FsbGJhY2tNYXAgYWdhaW5zdCBtdXRhdGlvbiB3aGlsZSBpdCdzIGJlaW5nIGl0ZXJh
dGVkIG92ZXIuCi0gICAgICAgIFZlY3RvcjxSZWY8UmVtb3RlUGxheWJhY2tBdmFpbGFiaWxpdHlD
YWxsYmFjaz4+IGNhbGxiYWNrczsKLSAgICAgICAgY2FsbGJhY2tzLnJlc2VydmVJbml0aWFsQ2Fw
YWNpdHkobV9jYWxsYmFja01hcC5zaXplKCkpOwotCi0gICAgICAgIC8vIENhbid0IHVzZSBjb3B5
VmFsdWVzVG9WZWN0b3IoKSBoZXJlIGJlY2F1c2UgUmVmPD4gaGFzIGEgZGVsZXRlZCBhc3NpZ25t
ZW50IG9wZXJhdG9yLgotICAgICAgICBmb3IgKGF1dG8mIGNhbGxiYWNrIDogbV9jYWxsYmFja01h
cC52YWx1ZXMoKSkKLSAgICAgICAgICAgIGNhbGxiYWNrcy51bmNoZWNrZWRBcHBlbmQoY2FsbGJh
Y2suY29weVJlZigpKTsKLSAgICAgICAgZm9yIChhdXRvJiBjYWxsYmFjayA6IGNhbGxiYWNrcykK
KyAgICAgICAgZm9yIChhdXRvJiBjYWxsYmFjayA6IGNvcHlUb1ZlY3RvcihtX2NhbGxiYWNrTWFw
LnZhbHVlcygpKSkKICAgICAgICAgICAgIGNhbGxiYWNrLT5oYW5kbGVFdmVudChhdmFpbGFibGUp
OwogICAgIH0pOwogfQpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvTW9kdWxlcy9zcGVlY2gv
U3BlZWNoUmVjb2duaXRpb24uY3BwIGIvU291cmNlL1dlYkNvcmUvTW9kdWxlcy9zcGVlY2gvU3Bl
ZWNoUmVjb2duaXRpb24uY3BwCmluZGV4IDgyZmZmZTQ3YTEwZDYyMmUxZGI3ZWIwZDlhYjJjNTgw
ZTJkNzFhMGMuLjI5MDQ2YmRiODZhZWEyMWQyYWJkZDJjZmM5ZWFhMTgwMWVlYjUyM2IgMTAwNjQ0
Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL01vZHVsZXMvc3BlZWNoL1NwZWVjaFJlY29nbml0aW9uLmNw
cAorKysgYi9Tb3VyY2UvV2ViQ29yZS9Nb2R1bGVzL3NwZWVjaC9TcGVlY2hSZWNvZ25pdGlvbi5j
cHAKQEAgLTE2OSw3ICsxNjksNyBAQCB2b2lkIFNwZWVjaFJlY29nbml0aW9uOjpkaWRGaW5kTm9N
YXRjaCgpCiB2b2lkIFNwZWVjaFJlY29nbml0aW9uOjpkaWRSZWNlaXZlUmVzdWx0KFZlY3RvcjxT
cGVlY2hSZWNvZ25pdGlvblJlc3VsdERhdGE+JiYgcmVzdWx0RGF0YXMpCiB7CiAgICAgVmVjdG9y
PFJlZjxTcGVlY2hSZWNvZ25pdGlvblJlc3VsdD4+IGFsbFJlc3VsdHM7Ci0gICAgYWxsUmVzdWx0
cy5yZXNlcnZlQ2FwYWNpdHkobV9maW5hbFJlc3VsdHMuc2l6ZSgpICsgcmVzdWx0RGF0YXMuc2l6
ZSgpKTsKKyAgICBhbGxSZXN1bHRzLnJlc2VydmVJbml0aWFsQ2FwYWNpdHkobV9maW5hbFJlc3Vs
dHMuc2l6ZSgpICsgcmVzdWx0RGF0YXMuc2l6ZSgpKTsKICAgICBhbGxSZXN1bHRzLmFwcGVuZFZl
Y3RvcihtX2ZpbmFsUmVzdWx0cyk7CiAKICAgICBhdXRvIGZpcnN0Q2hhbmdlZEluZGV4ID0gYWxs
UmVzdWx0cy5zaXplKCk7CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9Nb2R1bGVzL3dlYmF1
dGhuL2Nib3IvQ0JPUlZhbHVlLmNwcCBiL1NvdXJjZS9XZWJDb3JlL01vZHVsZXMvd2ViYXV0aG4v
Y2Jvci9DQk9SVmFsdWUuY3BwCmluZGV4IDliMjhmMGU1ZTEwMDZkNGViMTdiZDkwMzBmOWNiMmJi
YWY0N2E3ZjAuLjRlNzA4MzYxOTViMzA2ZWE3NDgwZGUwMDBjZTgxN2EzMjdmNDlkODMgMTAwNjQ0
Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL01vZHVsZXMvd2ViYXV0aG4vY2Jvci9DQk9SVmFsdWUuY3Bw
CisrKyBiL1NvdXJjZS9XZWJDb3JlL01vZHVsZXMvd2ViYXV0aG4vY2Jvci9DQk9SVmFsdWUuY3Bw
CkBAIC0xMjYsMTEgKzEyNiw4IEBAIENCT1JWYWx1ZTo6Q0JPUlZhbHVlKGNvbnN0IFN0cmluZyYg
aW5TdHJpbmcpCiAKIENCT1JWYWx1ZTo6Q0JPUlZhbHVlKGNvbnN0IEFycmF5VmFsdWUmIGluQXJy
YXkpCiAgICAgOiBtX3R5cGUoVHlwZTo6QXJyYXkpCi0gICAgLCBtX2FycmF5VmFsdWUoKQorICAg
ICwgbV9hcnJheVZhbHVlKGluQXJyYXkubWFwKFtdKGF1dG8mIHZhbHVlKSB7IHJldHVybiB2YWx1
ZS5jbG9uZSgpOyB9KSkKIHsKLSAgICBtX2FycmF5VmFsdWUucmVzZXJ2ZUNhcGFjaXR5KGluQXJy
YXkuc2l6ZSgpKTsKLSAgICBmb3IgKGNvbnN0IGF1dG8mIHZhbCA6IGluQXJyYXkpCi0gICAgICAg
IG1fYXJyYXlWYWx1ZS5hcHBlbmQodmFsLmNsb25lKCkpOwogfQogCiBDQk9SVmFsdWU6OkNCT1JW
YWx1ZShBcnJheVZhbHVlJiYgaW5BcnJheSkKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL01v
ZHVsZXMvd2ViYXV0aG4vZmlkby9BdXRoZW50aWNhdG9yR2V0SW5mb1Jlc3BvbnNlLmNwcCBiL1Nv
dXJjZS9XZWJDb3JlL01vZHVsZXMvd2ViYXV0aG4vZmlkby9BdXRoZW50aWNhdG9yR2V0SW5mb1Jl
c3BvbnNlLmNwcAppbmRleCAzMDlhZDc2ZWUyNzA0Y2UyYzY1ZGRjZTBmYTc0MzRlYjY5OTFmOWRl
Li41NmZkZGUyZmNkMzMwOTFmOTk1NTJmOTI0NDE1NWI2OWQyNjQ3MjRmIDEwMDY0NAotLS0gYS9T
b3VyY2UvV2ViQ29yZS9Nb2R1bGVzL3dlYmF1dGhuL2ZpZG8vQXV0aGVudGljYXRvckdldEluZm9S
ZXNwb25zZS5jcHAKKysrIGIvU291cmNlL1dlYkNvcmUvTW9kdWxlcy93ZWJhdXRobi9maWRvL0F1
dGhlbnRpY2F0b3JHZXRJbmZvUmVzcG9uc2UuY3BwCkBAIC00MCwxMCArNDAsOSBAQCBuYW1lc3Bh
Y2UgZmlkbyB7CiB0ZW1wbGF0ZSA8dHlwZW5hbWUgQ29udGFpbmVyPgogY2Jvcjo6Q0JPUlZhbHVl
IHRvQXJyYXlWYWx1ZShjb25zdCBDb250YWluZXImIGNvbnRhaW5lcikKIHsKLSAgICBjYm9yOjpD
Qk9SVmFsdWU6OkFycmF5VmFsdWUgdmFsdWU7Ci0gICAgdmFsdWUucmVzZXJ2ZUluaXRpYWxDYXBh
Y2l0eShjb250YWluZXIuc2l6ZSgpKTsKLSAgICBmb3IgKGNvbnN0IGF1dG8mIGl0ZW0gOiBjb250
YWluZXIpCi0gICAgICAgIHZhbHVlLmFwcGVuZChjYm9yOjpDQk9SVmFsdWUoaXRlbSkpOworICAg
IGF1dG8gdmFsdWUgPSBXVEY6Om1hcChjb250YWluZXIsIFtdKGF1dG8mIGl0ZW0pIHsKKyAgICAg
ICAgcmV0dXJuIGNib3I6OkNCT1JWYWx1ZShpdGVtKTsKKyAgICB9KTsKICAgICByZXR1cm4gY2Jv
cjo6Q0JPUlZhbHVlKFdURk1vdmUodmFsdWUpKTsKIH0KIApkaWZmIC0tZ2l0IGEvU291cmNlL1dl
YkNvcmUvTW9kdWxlcy93ZWJhdXRobi9maWRvL0RldmljZVJlcXVlc3RDb252ZXJ0ZXIuY3BwIGIv
U291cmNlL1dlYkNvcmUvTW9kdWxlcy93ZWJhdXRobi9maWRvL0RldmljZVJlcXVlc3RDb252ZXJ0
ZXIuY3BwCmluZGV4IDJmNjlkNzM4MzhmOTFkMDFiMWVmZGFlOTI1NGM5Mjk3Y2I2YTU4ZDYuLjMy
OWYyYTFkYTFiN2Y5MDM0NjMxMjg3OGI2MzA2MmM2ZTQyMjhkNDkgMTAwNjQ0Ci0tLSBhL1NvdXJj
ZS9XZWJDb3JlL01vZHVsZXMvd2ViYXV0aG4vZmlkby9EZXZpY2VSZXF1ZXN0Q29udmVydGVyLmNw
cAorKysgYi9Tb3VyY2UvV2ViQ29yZS9Nb2R1bGVzL3dlYmF1dGhuL2ZpZG8vRGV2aWNlUmVxdWVz
dENvbnZlcnRlci5jcHAKQEAgLTY4LDE0ICs2OCwxMiBAQCBzdGF0aWMgQ0JPUlZhbHVlIGNvbnZl
cnRVc2VyRW50aXR5VG9DQk9SKGNvbnN0IFB1YmxpY0tleUNyZWRlbnRpYWxDcmVhdGlvbk9wdGlv
bgogCiBzdGF0aWMgQ0JPUlZhbHVlIGNvbnZlcnRQYXJhbWV0ZXJzVG9DQk9SKGNvbnN0IFZlY3Rv
cjxQdWJsaWNLZXlDcmVkZW50aWFsQ3JlYXRpb25PcHRpb25zOjpQYXJhbWV0ZXJzPiYgcGFyYW1l
dGVycykKIHsKLSAgICBDQk9SVmFsdWU6OkFycmF5VmFsdWUgY3JlZGVudGlhbFBhcmFtQXJyYXk7
Ci0gICAgY3JlZGVudGlhbFBhcmFtQXJyYXkucmVzZXJ2ZUluaXRpYWxDYXBhY2l0eShwYXJhbWV0
ZXJzLnNpemUoKSk7Ci0gICAgZm9yIChjb25zdCBhdXRvJiBjcmVkZW50aWFsIDogcGFyYW1ldGVy
cykgeworICAgIGF1dG8gY3JlZGVudGlhbFBhcmFtQXJyYXkgPSBwYXJhbWV0ZXJzLm1hcChbXShh
dXRvJiBjcmVkZW50aWFsKSB7CiAgICAgICAgIENCT1JWYWx1ZTo6TWFwVmFsdWUgY2JvckNyZWRl
bnRpYWxNYXA7CiAgICAgICAgIGNib3JDcmVkZW50aWFsTWFwLmVtcGxhY2UoQ0JPUlZhbHVlKGtD
cmVkZW50aWFsVHlwZU1hcEtleSksIENCT1JWYWx1ZShwdWJsaWNLZXlDcmVkZW50aWFsVHlwZVRv
U3RyaW5nKGNyZWRlbnRpYWwudHlwZSkpKTsKICAgICAgICAgY2JvckNyZWRlbnRpYWxNYXAuZW1w
bGFjZShDQk9SVmFsdWUoa0NyZWRlbnRpYWxBbGdvcml0aG1NYXBLZXkpLCBDQk9SVmFsdWUoY3Jl
ZGVudGlhbC5hbGcpKTsKLSAgICAgICAgY3JlZGVudGlhbFBhcmFtQXJyYXkuYXBwZW5kKFdURk1v
dmUoY2JvckNyZWRlbnRpYWxNYXApKTsKLSAgICB9CisgICAgICAgIHJldHVybiBDQk9SVmFsdWUg
eyBXVEZNb3ZlKGNib3JDcmVkZW50aWFsTWFwKSB9OworICAgIH0pOwogICAgIHJldHVybiBDQk9S
VmFsdWUoV1RGTW92ZShjcmVkZW50aWFsUGFyYW1BcnJheSkpOwogfQogCmRpZmYgLS1naXQgYS9T
b3VyY2UvV2ViQ29yZS9Nb2R1bGVzL3dlYmF1dGhuL2ZpZG8vUGluLmNwcCBiL1NvdXJjZS9XZWJD
b3JlL01vZHVsZXMvd2ViYXV0aG4vZmlkby9QaW4uY3BwCmluZGV4IDkxNDJhYmJjOGM2NDgxNjIw
MjlhMTI5NzllODk1YjY3MTI3ODEwZTcuLjlmYTY3M2YxODJjY2NiMDQ2MjE3MzNhZTM4YzUyMzZk
MzYyYjVjODggMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL01vZHVsZXMvd2ViYXV0aG4vZmlk
by9QaW4uY3BwCisrKyBiL1NvdXJjZS9XZWJDb3JlL01vZHVsZXMvd2ViYXV0aG4vZmlkby9QaW4u
Y3BwCkBAIC03Myw4ICs3Myw4IEBAIHN0YXRpYyBWZWN0b3I8dWludDhfdD4gbWFrZVBpbkF1dGgo
Y29uc3QgQ3J5cHRvS2V5SE1BQyYga2V5LCBjb25zdCBWZWN0b3I8dWludDhfCiBWZWN0b3I8dWlu
dDhfdD4gZW5jb2RlUmF3UHVibGljS2V5KGNvbnN0IFZlY3Rvcjx1aW50OF90PiYgeCwgY29uc3Qg
VmVjdG9yPHVpbnQ4X3Q+JiB5KQogewogICAgIFZlY3Rvcjx1aW50OF90PiByYXdLZXk7Ci0gICAg
cmF3S2V5LnJlc2VydmVDYXBhY2l0eSgxICsgeC5zaXplKCkgKyB5LnNpemUoKSk7Ci0gICAgcmF3
S2V5LmFwcGVuZCgweDA0KTsKKyAgICByYXdLZXkucmVzZXJ2ZUluaXRpYWxDYXBhY2l0eSgxICsg
eC5zaXplKCkgKyB5LnNpemUoKSk7CisgICAgcmF3S2V5LnVuY2hlY2tlZEFwcGVuZCgweDA0KTsK
ICAgICByYXdLZXkuYXBwZW5kVmVjdG9yKHgpOwogICAgIHJhd0tleS5hcHBlbmRWZWN0b3IoeSk7
CiAgICAgcmV0dXJuIHJhd0tleTsKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL01vZHVsZXMv
d2ViZGF0YWJhc2UvRGF0YWJhc2VUcmFja2VyLmNwcCBiL1NvdXJjZS9XZWJDb3JlL01vZHVsZXMv
d2ViZGF0YWJhc2UvRGF0YWJhc2VUcmFja2VyLmNwcAppbmRleCBjYTQxN2M5YWIzZDVhMGFmOWMw
YmQxYTQyZDVhODU4NDY0MDUzN2Q5Li4xMTlmM2UyZDMzYjA3NjdlMGQ1MTFlYjlmZDQ3NjBkZTk3
NjUzODYzIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9Nb2R1bGVzL3dlYmRhdGFiYXNlL0Rh
dGFiYXNlVHJhY2tlci5jcHAKKysrIGIvU291cmNlL1dlYkNvcmUvTW9kdWxlcy93ZWJkYXRhYmFz
ZS9EYXRhYmFzZVRyYWNrZXIuY3BwCkBAIC00Miw2ICs0Miw3IEBACiAjaW5jbHVkZSAiU1FMaXRl
RmlsZVN5c3RlbS5oIgogI2luY2x1ZGUgIlNRTGl0ZVN0YXRlbWVudC5oIgogI2luY2x1ZGUgIlNR
TGl0ZVRyYW5zYWN0aW9uLmgiCisjaW5jbHVkZSA8d3RmL0Nyb3NzVGhyZWFkQ29waWVyLmg+CiAj
aW5jbHVkZSA8d3RmL0ZpbGVTeXN0ZW0uaD4KICNpbmNsdWRlIDx3dGYvTWFpblRocmVhZC5oPgog
I2luY2x1ZGUgPHd0Zi9OZXZlckRlc3Ryb3llZC5oPgpAQCAtNTYsMTUgKzU3LDYgQEAKIAogbmFt
ZXNwYWNlIFdlYkNvcmUgewogCi1zdGF0aWMgVmVjdG9yPFN0cmluZz4gaXNvbGF0ZWRDb3B5KGNv
bnN0IFZlY3RvcjxTdHJpbmc+JiBvcmlnaW5hbCkKLXsKLSAgICBWZWN0b3I8U3RyaW5nPiBjb3B5
OwotICAgIGNvcHkucmVzZXJ2ZUluaXRpYWxDYXBhY2l0eShvcmlnaW5hbC5zaXplKCkpOwotICAg
IGZvciAoYXV0byYgc3RyaW5nIDogb3JpZ2luYWwpCi0gICAgICAgIGNvcHkudW5jaGVja2VkQXBw
ZW5kKHN0cmluZy5pc29sYXRlZENvcHkoKSk7Ci0gICAgcmV0dXJuIGNvcHk7Ci19Ci0KIHN0ZDo6
dW5pcXVlX3B0cjxEYXRhYmFzZVRyYWNrZXI+IERhdGFiYXNlVHJhY2tlcjo6dHJhY2tlcldpdGhE
YXRhYmFzZVBhdGgoY29uc3QgU3RyaW5nJiBkYXRhYmFzZVBhdGgpCiB7CiAgICAgcmV0dXJuIHN0
ZDo6dW5pcXVlX3B0cjxEYXRhYmFzZVRyYWNrZXI+KG5ldyBEYXRhYmFzZVRyYWNrZXIoZGF0YWJh
c2VQYXRoKSk7CkBAIC00MTksMTIgKzQxMSw4IEBAIFZlY3RvcjxTdHJpbmc+IERhdGFiYXNlVHJh
Y2tlcjo6ZGF0YWJhc2VOYW1lc05vTG9jayhjb25zdCBTZWN1cml0eU9yaWdpbkRhdGEmIG9yCiAK
IFZlY3RvcjxTdHJpbmc+IERhdGFiYXNlVHJhY2tlcjo6ZGF0YWJhc2VOYW1lcyhjb25zdCBTZWN1
cml0eU9yaWdpbkRhdGEmIG9yaWdpbikKIHsKLSAgICBWZWN0b3I8U3RyaW5nPiBuYW1lczsKLSAg
ICB7Ci0gICAgICAgIExvY2tlciBsb2NrRGF0YWJhc2UgeyBtX2RhdGFiYXNlR3VhcmQgfTsKLSAg
ICAgICAgbmFtZXMgPSBkYXRhYmFzZU5hbWVzTm9Mb2NrKG9yaWdpbik7Ci0gICAgfQotICAgIHJl
dHVybiBpc29sYXRlZENvcHkobmFtZXMpOworICAgIExvY2tlciBsb2NrRGF0YWJhc2UgeyBtX2Rh
dGFiYXNlR3VhcmQgfTsKKyAgICByZXR1cm4gY3Jvc3NUaHJlYWRDb3B5KGRhdGFiYXNlTmFtZXNO
b0xvY2sob3JpZ2luKSk7CiB9CiAKIERhdGFiYXNlRGV0YWlscyBEYXRhYmFzZVRyYWNrZXI6OmRl
dGFpbHNGb3JOYW1lQW5kT3JpZ2luKGNvbnN0IFN0cmluZyYgbmFtZSwgY29uc3QgU2VjdXJpdHlP
cmlnaW5EYXRhJiBvcmlnaW4pCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9hY2Nlc3NpYmls
aXR5L0FYT2JqZWN0Q2FjaGUuY3BwIGIvU291cmNlL1dlYkNvcmUvYWNjZXNzaWJpbGl0eS9BWE9i
amVjdENhY2hlLmNwcAppbmRleCBmM2E2ZmFkNWUwM2Q5Mzk0MTE3MThjOGQ4ZjE5MmZiMTMwMzRj
NmZkLi4wMzM5YTdkNzc4ZDhmMDljMjU5NzhjMDk3MGFmMzE3MmExNTNmNTQzIDEwMDY0NAotLS0g
YS9Tb3VyY2UvV2ViQ29yZS9hY2Nlc3NpYmlsaXR5L0FYT2JqZWN0Q2FjaGUuY3BwCisrKyBiL1Nv
dXJjZS9XZWJDb3JlL2FjY2Vzc2liaWxpdHkvQVhPYmplY3RDYWNoZS5jcHAKQEAgLTExMjEsNyAr
MTEyMSw3IEBAIHZvaWQgQVhPYmplY3RDYWNoZTo6bm90aWZpY2F0aW9uUG9zdFRpbWVyRmlyZWQo
KQogCiAgICAgLy8gRmlsdGVyIG91dCB0aGUgbm90aWZpY2F0aW9ucyB0aGF0IGFyZSBub3QgZ29p
bmcgdG8gYmUgcG9zdGVkIHRvIHBsYXRmb3JtIGNsaWVudHMuCiAgICAgVmVjdG9yPHN0ZDo6cGFp
cjxSZWZQdHI8QVhDb3JlT2JqZWN0PiwgQVhOb3RpZmljYXRpb24+PiBub3RpZmljYXRpb25zVG9Q
b3N0OwotICAgIG5vdGlmaWNhdGlvbnNUb1Bvc3QucmVzZXJ2ZUNhcGFjaXR5KG5vdGlmaWNhdGlv
bnMuc2l6ZSgpKTsKKyAgICBub3RpZmljYXRpb25zVG9Qb3N0LnJlc2VydmVJbml0aWFsQ2FwYWNp
dHkobm90aWZpY2F0aW9ucy5zaXplKCkpOwogICAgIGZvciAoY29uc3QgYXV0byYgbm90ZSA6IG5v
dGlmaWNhdGlvbnMpIHsKICAgICAgICAgQVNTRVJUKG5vdGUuZmlyc3QpOwogICAgICAgICBpZiAo
IW5vdGUuZmlyc3QtPm9iamVjdElEKCkgfHwgIW5vdGUuZmlyc3QtPmF4T2JqZWN0Q2FjaGUoKSkK
QEAgLTExNDMsNyArMTE0Myw3IEBAIHZvaWQgQVhPYmplY3RDYWNoZTo6bm90aWZpY2F0aW9uUG9z
dFRpbWVyRmlyZWQoKQogICAgICAgICAgICAgICAgIGNvbnRpbnVlOwogICAgICAgICB9CiAKLSAg
ICAgICAgbm90aWZpY2F0aW9uc1RvUG9zdC5hcHBlbmQobm90ZSk7CisgICAgICAgIG5vdGlmaWNh
dGlvbnNUb1Bvc3QudW5jaGVja2VkQXBwZW5kKG5vdGUpOwogICAgIH0KIAogI2lmIEVOQUJMRShB
Q0NFU1NJQklMSVRZX0lTT0xBVEVEX1RSRUUpCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9h
Y2Nlc3NpYmlsaXR5L2lzb2xhdGVkdHJlZS9BWElzb2xhdGVkT2JqZWN0LmNwcCBiL1NvdXJjZS9X
ZWJDb3JlL2FjY2Vzc2liaWxpdHkvaXNvbGF0ZWR0cmVlL0FYSXNvbGF0ZWRPYmplY3QuY3BwCmlu
ZGV4IDJkOTY3Mzk1NWViYjc1MjU2N2EzMjljZDRjNDY1ZDQ3NmRkYjVhNDEuLjMzZWExMGEzMWVm
OTNkYWJiODk1ZDU0MjU0MWNhZDg1NGY2ODZlMDIgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3Jl
L2FjY2Vzc2liaWxpdHkvaXNvbGF0ZWR0cmVlL0FYSXNvbGF0ZWRPYmplY3QuY3BwCisrKyBiL1Nv
dXJjZS9XZWJDb3JlL2FjY2Vzc2liaWxpdHkvaXNvbGF0ZWR0cmVlL0FYSXNvbGF0ZWRPYmplY3Qu
Y3BwCkBAIC00NDQsMTcgKzQ0NCwxMCBAQCB2b2lkIEFYSXNvbGF0ZWRPYmplY3Q6OnNldE1hdGhz
Y3JpcHRzKEFYUHJvcGVydHlOYW1lIHByb3BlcnR5TmFtZSwgQVhDb3JlT2JqZWN0JgogICAgIGlm
ICghbWF0aFNpemUpCiAgICAgICAgIHJldHVybjsKIAotICAgIFZlY3RvcjxzdGQ6OnBhaXI8QVhJ
RCwgQVhJRD4+IGlkUGFpcnM7Ci0gICAgaWRQYWlycy5yZXNlcnZlQ2FwYWNpdHkobWF0aFNpemUp
OwotICAgIGZvciAoYXV0byBtYXRoUGFpciA6IHBhaXJzKSB7Ci0gICAgICAgIHN0ZDo6cGFpcjxB
WElELCBBWElEPiBpZFBhaXI7Ci0gICAgICAgIGlmIChtYXRoUGFpci5maXJzdCkKLSAgICAgICAg
ICAgIGlkUGFpci5maXJzdCA9IG1hdGhQYWlyLmZpcnN0LT5vYmplY3RJRCgpOwotICAgICAgICBp
ZiAobWF0aFBhaXIuc2Vjb25kKQotICAgICAgICAgICAgaWRQYWlyLnNlY29uZCA9IG1hdGhQYWly
LnNlY29uZC0+b2JqZWN0SUQoKTsKLSAgICAgICAgaWRQYWlycy51bmNoZWNrZWRBcHBlbmQoaWRQ
YWlyKTsKLSAgICB9Ci0gICAgc2V0UHJvcGVydHkocHJvcGVydHlOYW1lLCBpZFBhaXJzKTsKKyAg
ICBhdXRvIGlkUGFpcnMgPSBwYWlycy5tYXAoW10oYXV0byYgbWF0aFBhaXIpIHsKKyAgICAgICAg
cmV0dXJuIHN0ZDo6bWFrZV9wYWlyKG1hdGhQYWlyLmZpcnN0ID8gbWF0aFBhaXIuZmlyc3QtPm9i
amVjdElEKCkgOiBBWElEKCksIG1hdGhQYWlyLnNlY29uZCA/IG1hdGhQYWlyLnNlY29uZC0+b2Jq
ZWN0SUQoKSA6IEFYSUQoKSk7CisgICAgfSk7CisgICAgc2V0UHJvcGVydHkocHJvcGVydHlOYW1l
LCBXVEZNb3ZlKGlkUGFpcnMpKTsKIH0KIAogdm9pZCBBWElzb2xhdGVkT2JqZWN0OjpzZXRPYmpl
Y3RQcm9wZXJ0eShBWFByb3BlcnR5TmFtZSBwcm9wZXJ0eU5hbWUsIEFYQ29yZU9iamVjdCogb2Jq
ZWN0KQpAQCAtNDY3LDE2ICs0NjAsMTMgQEAgdm9pZCBBWElzb2xhdGVkT2JqZWN0OjpzZXRPYmpl
Y3RQcm9wZXJ0eShBWFByb3BlcnR5TmFtZSBwcm9wZXJ0eU5hbWUsIEFYQ29yZU9iamUKIAogdm9p
ZCBBWElzb2xhdGVkT2JqZWN0OjpzZXRPYmplY3RWZWN0b3JQcm9wZXJ0eShBWFByb3BlcnR5TmFt
ZSBwcm9wZXJ0eU5hbWUsIGNvbnN0IEFjY2Vzc2liaWxpdHlDaGlsZHJlblZlY3RvciYgY2hpbGRy
ZW4pCiB7Ci0gICAgaWYgKCFjaGlsZHJlbi5zaXplKCkpCisgICAgaWYgKGNoaWxkcmVuLmlzRW1w
dHkoKSkKICAgICAgICAgcmV0dXJuOwogCi0gICAgVmVjdG9yPEFYSUQ+IGNoaWxkSURzOwotICAg
IGNoaWxkSURzLnJlc2VydmVDYXBhY2l0eShjaGlsZHJlbi5zaXplKCkpOwotCi0gICAgZm9yIChh
dXRvIGNoaWxkIDogY2hpbGRyZW4pCi0gICAgICAgIGNoaWxkSURzLnVuY2hlY2tlZEFwcGVuZChj
aGlsZC0+b2JqZWN0SUQoKSk7Ci0KLSAgICBzZXRQcm9wZXJ0eShwcm9wZXJ0eU5hbWUsIGNoaWxk
SURzKTsKKyAgICBhdXRvIGNoaWxkSURzID0gY2hpbGRyZW4ubWFwKFtdKGF1dG8mIGNoaWxkKSB7
CisgICAgICAgIHJldHVybiBjaGlsZC0+b2JqZWN0SUQoKTsKKyAgICB9KTsKKyAgICBzZXRQcm9w
ZXJ0eShwcm9wZXJ0eU5hbWUsIFdURk1vdmUoY2hpbGRJRHMpKTsKIH0KIAogdm9pZCBBWElzb2xh
dGVkT2JqZWN0OjpzZXRQcm9wZXJ0eShBWFByb3BlcnR5TmFtZSBwcm9wZXJ0eU5hbWUsIEFYUHJv
cGVydHlWYWx1ZVZhcmlhbnQmJiB2YWx1ZSwgYm9vbCBzaG91bGRSZW1vdmUpCmRpZmYgLS1naXQg
YS9Tb3VyY2UvV2ViQ29yZS9hY2Nlc3NpYmlsaXR5L2lzb2xhdGVkdHJlZS9BWElzb2xhdGVkVHJl
ZS5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9hY2Nlc3NpYmlsaXR5L2lzb2xhdGVkdHJlZS9BWElzb2xh
dGVkVHJlZS5jcHAKaW5kZXggN2VmMDYyYTBjNjA4YzFhOGVmMzExOGFlNDQ0OTE2NTIwZGNkNzZj
Mi4uOGY3ZmNkYTMxMTlmZmZiOTBjMDIzNDUyMjY1NjQ3ZmJlYzk2YzIzYSAxMDA2NDQKLS0tIGEv
U291cmNlL1dlYkNvcmUvYWNjZXNzaWJpbGl0eS9pc29sYXRlZHRyZWUvQVhJc29sYXRlZFRyZWUu
Y3BwCisrKyBiL1NvdXJjZS9XZWJDb3JlL2FjY2Vzc2liaWxpdHkvaXNvbGF0ZWR0cmVlL0FYSXNv
bGF0ZWRUcmVlLmNwcApAQCAtMTU5LDEyICsxNTksMTIgQEAgVmVjdG9yPFJlZlB0cjxBWENvcmVP
YmplY3Q+PiBBWElzb2xhdGVkVHJlZTo6b2JqZWN0c0ZvcklEcyhjb25zdCBWZWN0b3I8QVhJRD4m
IGEKIHsKICAgICBBWFRSQUNFKCJBWElzb2xhdGVkVHJlZTo6b2JqZWN0c0ZvcklEcyIpOwogICAg
IFZlY3RvcjxSZWZQdHI8QVhDb3JlT2JqZWN0Pj4gcmVzdWx0OwotICAgIHJlc3VsdC5yZXNlcnZl
Q2FwYWNpdHkoYXhJRHMuc2l6ZSgpKTsKLQotICAgIGZvciAoY29uc3QgYXV0byYgYXhJRCA6IGF4
SURzKSB7CisgICAgcmVzdWx0LnJlc2VydmVJbml0aWFsQ2FwYWNpdHkoYXhJRHMuc2l6ZSgpKTsK
KyAgICBmb3IgKGF1dG8mIGF4SUQgOiBheElEcykgewogICAgICAgICBpZiAoYXV0byBvYmplY3Qg
PSBub2RlRm9ySUQoYXhJRCkpCiAgICAgICAgICAgICByZXN1bHQudW5jaGVja2VkQXBwZW5kKG9i
amVjdCk7CiAgICAgfQorICAgIHJlc3VsdC5zaHJpbmtUb0ZpdCgpOwogCiAgICAgcmV0dXJuIHJl
c3VsdDsKIH0KQEAgLTI4NSwxNSArMjg1LDExIEBAIHZvaWQgQVhJc29sYXRlZFRyZWU6OmNvbGxl
Y3ROb2RlQ2hhbmdlc0ZvclN1YnRyZWUoQVhDb3JlT2JqZWN0JiBheE9iamVjdCwgQVhJRCBwCiAg
ICAgICAgIGlkc0JlaW5nQ2hhbmdlZC0+YWRkKG5vZGVDaGFuZ2UuaXNvbGF0ZWRPYmplY3QtPm9i
amVjdElEKCkpOwogICAgIGNoYW5nZXMuYXBwZW5kKFdURk1vdmUobm9kZUNoYW5nZSkpOwogCi0g
ICAgYXV0byBheENoaWxkcmVuID0gYXhPYmplY3QuY2hpbGRyZW4oKTsKLSAgICBWZWN0b3I8QVhJ
RD4gYXhDaGlsZHJlbklEczsKLSAgICBheENoaWxkcmVuSURzLnJlc2VydmVJbml0aWFsQ2FwYWNp
dHkoYXhDaGlsZHJlbi5zaXplKCkpOwotICAgIGZvciAoY29uc3QgYXV0byYgYXhDaGlsZCA6IGF4
Q2hpbGRyZW4pIHsKKyAgICBhdXRvIGF4Q2hpbGRyZW5JRHMgPSBheE9iamVjdC5jaGlsZHJlbigp
Lm1hcChbJl0oYXV0byYgYXhDaGlsZCkgewogICAgICAgICBjb2xsZWN0Tm9kZUNoYW5nZXNGb3JT
dWJ0cmVlKCpheENoaWxkLCBheE9iamVjdC5vYmplY3RJRCgpLCBhdHRhY2hXcmFwcGVyLCBjaGFu
Z2VzLCBpZHNCZWluZ0NoYW5nZWQpOwotICAgICAgICBheENoaWxkcmVuSURzLnVuY2hlY2tlZEFw
cGVuZChheENoaWxkLT5vYmplY3RJRCgpKTsKLSAgICB9Ci0KLSAgICBtX25vZGVNYXAuc2V0KGF4
T2JqZWN0Lm9iamVjdElEKCksIFBhcmVudENoaWxkcmVuSURzIHsgcGFyZW50SUQsIGF4Q2hpbGRy
ZW5JRHMgfSk7CisgICAgICAgIHJldHVybiBheENoaWxkLT5vYmplY3RJRCgpOworICAgIH0pOwor
ICAgIG1fbm9kZU1hcC5zZXQoYXhPYmplY3Qub2JqZWN0SUQoKSwgUGFyZW50Q2hpbGRyZW5JRHMg
eyBwYXJlbnRJRCwgV1RGTW92ZShheENoaWxkcmVuSURzKSB9KTsKIH0KIAogdm9pZCBBWElzb2xh
dGVkVHJlZTo6dXBkYXRlTm9kZShBWENvcmVPYmplY3QmIGF4T2JqZWN0KQpkaWZmIC0tZ2l0IGEv
U291cmNlL1dlYkNvcmUvYW5pbWF0aW9uL0NTU1Byb3BlcnR5QW5pbWF0aW9uLmNwcCBiL1NvdXJj
ZS9XZWJDb3JlL2FuaW1hdGlvbi9DU1NQcm9wZXJ0eUFuaW1hdGlvbi5jcHAKaW5kZXggMjRhMzZl
Y2I4NzQwYjRmMTU2YzVhODkyYjY1MzhjNWFjOTBiMTRmOS4uZTM1OWEwNDNiMmUzY2YzOWY5YzI2
YmM1OWU5OGYxMDVlMTMyYzEwNSAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvYW5pbWF0aW9u
L0NTU1Byb3BlcnR5QW5pbWF0aW9uLmNwcAorKysgYi9Tb3VyY2UvV2ViQ29yZS9hbmltYXRpb24v
Q1NTUHJvcGVydHlBbmltYXRpb24uY3BwCkBAIC0yODY1LDYgKzI4NjUsNyBAQCBDU1NQcm9wZXJ0
eUFuaW1hdGlvbldyYXBwZXJNYXA6OkNTU1Byb3BlcnR5QW5pbWF0aW9uV3JhcHBlck1hcCgpCiAg
ICAgICAgICAgICBBU1NFUlQobV9wcm9wZXJ0eVdyYXBwZXJzW3dyYXBwZXJJbmRleF0pOwogICAg
ICAgICAgICAgbG9uZ2hhbmRXcmFwcGVycy51bmNoZWNrZWRBcHBlbmQobV9wcm9wZXJ0eVdyYXBw
ZXJzW3dyYXBwZXJJbmRleF0uZ2V0KCkpOwogICAgICAgICB9CisgICAgICAgIGxvbmdoYW5kV3Jh
cHBlcnMuc2hyaW5rVG9GaXQoKTsKIAogICAgICAgICBtX3Byb3BlcnR5V3JhcHBlcnMudW5jaGVj
a2VkQXBwZW5kKG1ha2VVbmlxdWU8U2hvcnRoYW5kUHJvcGVydHlXcmFwcGVyPihwcm9wZXJ0eUlE
LCBXVEZNb3ZlKGxvbmdoYW5kV3JhcHBlcnMpKSk7CiAgICAgICAgIGluZGV4RnJvbVByb3BlcnR5
SUQocHJvcGVydHlJRCkgPSBhbmltYXRhYmxlTG9uZ2hhbmRQcm9wZXJ0aWVzQ291bnQgKyBpOwpk
aWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvYmluZGluZ3MvanMvU2VyaWFsaXplZFNjcmlwdFZh
bHVlLmNwcCBiL1NvdXJjZS9XZWJDb3JlL2JpbmRpbmdzL2pzL1NlcmlhbGl6ZWRTY3JpcHRWYWx1
ZS5jcHAKaW5kZXggMjBjMWJjYmM0NGQ2Y2QxYTQ4NTliZDk1N2FkYjU0OTA1NDBhNWMwZS4uZDE0
ZTc5MDI4OGZkYzMyYjM5MzM1OWFiZWE1Njg3N2Q0NzU2ZWI4MiAxMDA2NDQKLS0tIGEvU291cmNl
L1dlYkNvcmUvYmluZGluZ3MvanMvU2VyaWFsaXplZFNjcmlwdFZhbHVlLmNwcAorKysgYi9Tb3Vy
Y2UvV2ViQ29yZS9iaW5kaW5ncy9qcy9TZXJpYWxpemVkU2NyaXB0VmFsdWUuY3BwCkBAIC0yNDU2
LDExICsyNDU2LDExIEBAIHByaXZhdGU6CiAgICAgICAgIHB0ciArPSBsZW5ndGggKiBzaXplb2Yo
VUNoYXIpOwogI2Vsc2UKICAgICAgICAgVmVjdG9yPFVDaGFyPiBidWZmZXI7Ci0gICAgICAgIGJ1
ZmZlci5yZXNlcnZlQ2FwYWNpdHkobGVuZ3RoKTsKKyAgICAgICAgYnVmZmVyLnJlc2VydmVJbml0
aWFsQ2FwYWNpdHkobGVuZ3RoKTsKICAgICAgICAgZm9yICh1bnNpZ25lZCBpID0gMDsgaSA8IGxl
bmd0aDsgaSsrKSB7CiAgICAgICAgICAgICB1aW50MTZfdCBjaDsKICAgICAgICAgICAgIHJlYWRM
aXR0bGVFbmRpYW4ocHRyLCBlbmQsIGNoKTsKLSAgICAgICAgICAgIGJ1ZmZlci5hcHBlbmQoY2gp
OworICAgICAgICAgICAgYnVmZmVyLnVuY2hlY2tlZEFwcGVuZChjaCk7CiAgICAgICAgIH0KICAg
ICAgICAgc3RyID0gU3RyaW5nOjphZG9wdChXVEZNb3ZlKGJ1ZmZlcikpOwogI2VuZGlmCkBAIC00
NTcyLDEyICs0NTcyLDkgQEAgdWludDMyX3QgU2VyaWFsaXplZFNjcmlwdFZhbHVlOjp3aXJlRm9y
bWF0VmVyc2lvbigpCiAKIFZlY3RvcjxTdHJpbmc+IFNlcmlhbGl6ZWRTY3JpcHRWYWx1ZTo6Ymxv
YlVSTHMoKSBjb25zdAogewotICAgIFZlY3RvcjxTdHJpbmc+IHJlc3VsdDsKLSAgICByZXN1bHQu
cmVzZXJ2ZUluaXRpYWxDYXBhY2l0eShtX2Jsb2JIYW5kbGVzLnNpemUoKSk7Ci0gICAgZm9yIChh
dXRvJiBoYW5kbGUgOiBtX2Jsb2JIYW5kbGVzKQotICAgICAgICByZXN1bHQudW5jaGVja2VkQXBw
ZW5kKGhhbmRsZS51cmwoKS5zdHJpbmcoKSk7Ci0KLSAgICByZXR1cm4gcmVzdWx0OworICAgIHJl
dHVybiBtX2Jsb2JIYW5kbGVzLm1hcChbXShhdXRvJiBoYW5kbGUpIHsKKyAgICAgICAgcmV0dXJu
IGhhbmRsZS51cmwoKS5zdHJpbmcoKTsKKyAgICB9KTsKIH0KIAogdm9pZCBTZXJpYWxpemVkU2Ny
aXB0VmFsdWU6OndyaXRlQmxvYnNUb0Rpc2tGb3JJbmRleGVkREIoQ29tcGxldGlvbkhhbmRsZXI8
dm9pZChJREJWYWx1ZSYmKT4mJiBjb21wbGV0aW9uSGFuZGxlcikKZGlmZiAtLWdpdCBhL1NvdXJj
ZS9XZWJDb3JlL2NyeXB0by9tYWMvQ3J5cHRvQWxnb3JpdGhtRUNEU0FNYWMuY3BwIGIvU291cmNl
L1dlYkNvcmUvY3J5cHRvL21hYy9DcnlwdG9BbGdvcml0aG1FQ0RTQU1hYy5jcHAKaW5kZXggNjhh
YTc2N2M5Zjg0ZjNhNThiYjgyMGNlZDc4OWUzZDBmY2RhMWFkMC4uYTFiNjg2NzAyZGI3YTg4ODhh
OGRiZTZlMDNhODhiYWI5YzQ3Zjk5MiAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvY3J5cHRv
L21hYy9DcnlwdG9BbGdvcml0aG1FQ0RTQU1hYy5jcHAKKysrIGIvU291cmNlL1dlYkNvcmUvY3J5
cHRvL21hYy9DcnlwdG9BbGdvcml0aG1FQ0RTQU1hYy5jcHAKQEAgLTYzLDcgKzYzLDcgQEAgc3Rh
dGljIEV4Y2VwdGlvbk9yPFZlY3Rvcjx1aW50OF90Pj4gc2lnbkVDRFNBKENyeXB0b0FsZ29yaXRo
bUlkZW50aWZpZXIgaGFzaCwgY28KICAgICAvLyBGSVhNRTogPHJkYXI6Ly9wcm9ibGVtLzMxNjE4
MzcxPgogICAgIC8vIGNvbnZlcnQgdGhlIERFUiBiaW5hcnkgaW50byByICsgcwogICAgIFZlY3Rv
cjx1aW50OF90PiBuZXdTaWduYXR1cmU7Ci0gICAgbmV3U2lnbmF0dXJlLnJlc2VydmVDYXBhY2l0
eShrZXlMZW5ndGhJbkJ5dGVzICogMik7CisgICAgbmV3U2lnbmF0dXJlLnJlc2VydmVJbml0aWFs
Q2FwYWNpdHkoa2V5TGVuZ3RoSW5CeXRlcyAqIDIpOwogICAgIHNpemVfdCBvZmZzZXQgPSAxOyAv
LyBza2lwIHRhZwogICAgIG9mZnNldCArPSBieXRlc1VzZWRUb0VuY29kZWRMZW5ndGgoc2lnbmF0
dXJlW29mZnNldF0pOyAvLyBza2lwIGxlbmd0aAogICAgICsrb2Zmc2V0OyAvLyBza2lwIHRhZwpA
QCAtNzEsNyArNzEsNyBAQCBzdGF0aWMgRXhjZXB0aW9uT3I8VmVjdG9yPHVpbnQ4X3Q+PiBzaWdu
RUNEU0EoQ3J5cHRvQWxnb3JpdGhtSWRlbnRpZmllciBoYXNoLCBjbwogICAgIC8vIElmIHIgPCBr
ZXlMZW5ndGhJbkJ5dGVzLCBmaWxsIHRoZSBoZWFkIG9mIHIgd2l0aCAwcy4KICAgICBzaXplX3Qg
Ynl0ZXNUb0NvcHkgPSBrZXlMZW5ndGhJbkJ5dGVzOwogICAgIGlmIChzaWduYXR1cmVbb2Zmc2V0
XSA8IGtleUxlbmd0aEluQnl0ZXMpIHsKLSAgICAgICAgbmV3U2lnbmF0dXJlLnJlc2l6ZShrZXlM
ZW5ndGhJbkJ5dGVzIC0gc2lnbmF0dXJlW29mZnNldF0pOworICAgICAgICBuZXdTaWduYXR1cmUu
Z3JvdyhrZXlMZW5ndGhJbkJ5dGVzIC0gc2lnbmF0dXJlW29mZnNldF0pOwogICAgICAgICBtZW1z
ZXQobmV3U2lnbmF0dXJlLmRhdGEoKSwgSW5pdGlhbE9jdGV0LCBrZXlMZW5ndGhJbkJ5dGVzIC0g
c2lnbmF0dXJlW29mZnNldF0pOwogICAgICAgICBieXRlc1RvQ29weSA9IHNpZ25hdHVyZVtvZmZz
ZXRdOwogICAgIH0gZWxzZSBpZiAoc2lnbmF0dXJlW29mZnNldF0gPiBrZXlMZW5ndGhJbkJ5dGVz
KSAvLyBPdGhlcndpc2Ugc2tpcCB0aGUgbGVhZGluZyAwcyBvZiByLgpAQCAtMTM0LDcgKzEzNCw3
IEBAIHN0YXRpYyBFeGNlcHRpb25Pcjxib29sPiB2ZXJpZnlFQ0RTQShDcnlwdG9BbGdvcml0aG1J
ZGVudGlmaWVyIGhhc2gsIGNvbnN0IFBsYXRmCiAKICAgICAvLyBDb25zdHJ1Y3QgdGhlIERFUiBz
aWduYXR1cmUuCiAgICAgVmVjdG9yPHVpbnQ4X3Q+IG5ld1NpZ25hdHVyZTsKLSAgICBuZXdTaWdu
YXR1cmUucmVzZXJ2ZUNhcGFjaXR5KDYgKyBrZXlMZW5ndGhJbkJ5dGVzICogMyAgKyByTmVlZHNJ
bml0aWFsT2N0ZXQgKyBzTmVlZHNJbml0aWFsT2N0ZXQgLSByU3RhcnQgLSBzU3RhcnQpOworICAg
IG5ld1NpZ25hdHVyZS5yZXNlcnZlSW5pdGlhbENhcGFjaXR5KDYgKyBrZXlMZW5ndGhJbkJ5dGVz
ICogMyAgKyByTmVlZHNJbml0aWFsT2N0ZXQgKyBzTmVlZHNJbml0aWFsT2N0ZXQgLSByU3RhcnQg
LSBzU3RhcnQpOwogICAgIG5ld1NpZ25hdHVyZS5hcHBlbmQoU2VxdWVuY2VNYXJrKTsKICAgICBh
ZGRFbmNvZGVkQVNOMUxlbmd0aChuZXdTaWduYXR1cmUsIDQgKyBrZXlMZW5ndGhJbkJ5dGVzICog
MyAgKyByTmVlZHNJbml0aWFsT2N0ZXQgKyBzTmVlZHNJbml0aWFsT2N0ZXQgLSByU3RhcnQgLSBz
U3RhcnQpOwogICAgIG5ld1NpZ25hdHVyZS5hcHBlbmQoSW50ZWdlck1hcmspOwpkaWZmIC0tZ2l0
IGEvU291cmNlL1dlYkNvcmUvY3J5cHRvL21hYy9DcnlwdG9LZXlFQ01hYy5jcHAgYi9Tb3VyY2Uv
V2ViQ29yZS9jcnlwdG8vbWFjL0NyeXB0b0tleUVDTWFjLmNwcAppbmRleCBjZDk2MmY3OTdiMjI0
Yzc4OGZlY2RmZTg1OTJjN2Y0MjRkMWFlYzhkLi42MGI3M2ZkYmE2ODY5YWVjZGQ4NWViMDFhMTE5
NmNiMDFjOWY5N2JjIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9jcnlwdG8vbWFjL0NyeXB0
b0tleUVDTWFjLmNwcAorKysgYi9Tb3VyY2UvV2ViQ29yZS9jcnlwdG8vbWFjL0NyeXB0b0tleUVD
TWFjLmNwcApAQCAtMjgyLDcgKzI4Miw3IEBAIFZlY3Rvcjx1aW50OF90PiBDcnlwdG9LZXlFQzo6
cGxhdGZvcm1FeHBvcnRTcGtpKCkgY29uc3QKICAgICBzaXplX3QgdG90YWxTaXplID0gc2l6ZW9m
KElkRWNQdWJsaWNLZXkpICsgb2lkU2l6ZSArIGJ5dGVzTmVlZGVkRm9yRW5jb2RlZExlbmd0aChr
ZXlTaXplICsgMSkgKyBrZXlTaXplICsgNDsKIAogICAgIFZlY3Rvcjx1aW50OF90PiByZXN1bHQ7
Ci0gICAgcmVzdWx0LnJlc2VydmVDYXBhY2l0eSh0b3RhbFNpemUgKyBieXRlc05lZWRlZEZvckVu
Y29kZWRMZW5ndGgodG90YWxTaXplKSArIDEpOworICAgIHJlc3VsdC5yZXNlcnZlSW5pdGlhbENh
cGFjaXR5KHRvdGFsU2l6ZSArIGJ5dGVzTmVlZGVkRm9yRW5jb2RlZExlbmd0aCh0b3RhbFNpemUp
ICsgMSk7CiAgICAgcmVzdWx0LmFwcGVuZChTZXF1ZW5jZU1hcmspOwogICAgIGFkZEVuY29kZWRB
U04xTGVuZ3RoKHJlc3VsdCwgdG90YWxTaXplKTsKICAgICByZXN1bHQuYXBwZW5kKFNlcXVlbmNl
TWFyayk7CkBAIC0zODgsNyArMzg4LDcgQEAgVmVjdG9yPHVpbnQ4X3Q+IENyeXB0b0tleUVDOjpw
bGF0Zm9ybUV4cG9ydFBrY3M4KCkgY29uc3QKICAgICBzaXplX3QgdG90YWxTaXplID0gc2l6ZW9m
KFZlcnNpb24pICsgc2l6ZW9mKElkRWNQdWJsaWNLZXkpICsgb2lkU2l6ZSArIGJ5dGVzTmVlZGVk
Rm9yRW5jb2RlZExlbmd0aChwcml2YXRlS2V5U2l6ZSkgKyBwcml2YXRlS2V5U2l6ZSArIDM7CiAK
ICAgICBWZWN0b3I8dWludDhfdD4gcmVzdWx0OwotICAgIHJlc3VsdC5yZXNlcnZlQ2FwYWNpdHko
dG90YWxTaXplICsgYnl0ZXNOZWVkZWRGb3JFbmNvZGVkTGVuZ3RoKHRvdGFsU2l6ZSkgKyAxKTsK
KyAgICByZXN1bHQucmVzZXJ2ZUluaXRpYWxDYXBhY2l0eSh0b3RhbFNpemUgKyBieXRlc05lZWRl
ZEZvckVuY29kZWRMZW5ndGgodG90YWxTaXplKSArIDEpOwogICAgIHJlc3VsdC5hcHBlbmQoU2Vx
dWVuY2VNYXJrKTsKICAgICBhZGRFbmNvZGVkQVNOMUxlbmd0aChyZXN1bHQsIHRvdGFsU2l6ZSk7
CiAgICAgcmVzdWx0LmFwcGVuZChWZXJzaW9uLCBzaXplb2YoVmVyc2lvbikpOwpkaWZmIC0tZ2l0
IGEvU291cmNlL1dlYkNvcmUvY3J5cHRvL21hYy9DcnlwdG9LZXlSU0FNYWMuY3BwIGIvU291cmNl
L1dlYkNvcmUvY3J5cHRvL21hYy9DcnlwdG9LZXlSU0FNYWMuY3BwCmluZGV4IGI5MmJkZGI0YjMz
MDZiNzVmNTgxZjI1NDNmZmQxOGU5MTAzNjdhNDYuLjkzNDg2ODVjNzY2YTUyZWYyYjcxODU3NmU1
NzUwODQzYTcyYzhlM2EgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL2NyeXB0by9tYWMvQ3J5
cHRvS2V5UlNBTWFjLmNwcAorKysgYi9Tb3VyY2UvV2ViQ29yZS9jcnlwdG8vbWFjL0NyeXB0b0tl
eVJTQU1hYy5jcHAKQEAgLTM0Miw3ICszNDIsNyBAQCBFeGNlcHRpb25PcjxWZWN0b3I8dWludDhf
dD4+IENyeXB0b0tleVJTQTo6ZXhwb3J0U3BraSgpIGNvbnN0CiAKICAgICAvLyBQZXIgaHR0cHM6
Ly90b29scy5pZXRmLm9yZy9odG1sL3JmYzUyODAjc2VjdGlvbi00LjEuIHN1YmplY3RQdWJsaWNL
ZXlJbmZvLgogICAgIFZlY3Rvcjx1aW50OF90PiByZXN1bHQ7Ci0gICAgcmVzdWx0LnJlc2VydmVD
YXBhY2l0eSh0b3RhbFNpemUgKyBieXRlc05lZWRlZEZvckVuY29kZWRMZW5ndGgodG90YWxTaXpl
KSArIDEpOworICAgIHJlc3VsdC5yZXNlcnZlSW5pdGlhbENhcGFjaXR5KHRvdGFsU2l6ZSArIGJ5
dGVzTmVlZGVkRm9yRW5jb2RlZExlbmd0aCh0b3RhbFNpemUpICsgMSk7CiAgICAgcmVzdWx0LmFw
cGVuZChTZXF1ZW5jZU1hcmspOwogICAgIGFkZEVuY29kZWRBU04xTGVuZ3RoKHJlc3VsdCwgdG90
YWxTaXplKTsKICAgICByZXN1bHQuYXBwZW5kKFJTQU9JREhlYWRlciwgc2l6ZW9mKFJTQU9JREhl
YWRlcikpOwpAQCAtNDAxLDcgKzQwMSw3IEBAIEV4Y2VwdGlvbk9yPFZlY3Rvcjx1aW50OF90Pj4g
Q3J5cHRvS2V5UlNBOjpleHBvcnRQa2NzOCgpIGNvbnN0CiAKICAgICAvLyBQZXIgaHR0cHM6Ly90
b29scy5pZXRmLm9yZy9odG1sL3JmYzUyMDgjc2VjdGlvbi01LiBQcml2YXRlS2V5SW5mby4KICAg
ICBWZWN0b3I8dWludDhfdD4gcmVzdWx0OwotICAgIHJlc3VsdC5yZXNlcnZlQ2FwYWNpdHkodG90
YWxTaXplICsgYnl0ZXNOZWVkZWRGb3JFbmNvZGVkTGVuZ3RoKHRvdGFsU2l6ZSkgKyAxKTsKKyAg
ICByZXN1bHQucmVzZXJ2ZUluaXRpYWxDYXBhY2l0eSh0b3RhbFNpemUgKyBieXRlc05lZWRlZEZv
ckVuY29kZWRMZW5ndGgodG90YWxTaXplKSArIDEpOwogICAgIHJlc3VsdC5hcHBlbmQoU2VxdWVu
Y2VNYXJrKTsKICAgICBhZGRFbmNvZGVkQVNOMUxlbmd0aChyZXN1bHQsIHRvdGFsU2l6ZSk7CiAg
ICAgcmVzdWx0LmFwcGVuZChWZXJzaW9uLCBzaXplb2YoVmVyc2lvbikpOwpkaWZmIC0tZ2l0IGEv
U291cmNlL1dlYkNvcmUvY3NzL0NTU0Jhc2ljU2hhcGVzLmNwcCBiL1NvdXJjZS9XZWJDb3JlL2Nz
cy9DU1NCYXNpY1NoYXBlcy5jcHAKaW5kZXggMmNiYzFjZWZkMjNlOGE5MDFmZWFlMGQyMGM5ZjZm
NzVmMGZjYjUwMi4uZTI4NTUxZTdiMmY0NDc2MjE5NzFiYjBiNGJmMjNhOTlmMmI1YzcyNSAxMDA2
NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvY3NzL0NTU0Jhc2ljU2hhcGVzLmNwcAorKysgYi9Tb3Vy
Y2UvV2ViQ29yZS9jc3MvQ1NTQmFzaWNTaGFwZXMuY3BwCkBAIC0yNjEsMTMgKzI2MSwxMCBAQCBz
dGF0aWMgU3RyaW5nIGJ1aWxkUG9seWdvblN0cmluZyhjb25zdCBXaW5kUnVsZSYgd2luZFJ1bGUs
IGNvbnN0IFZlY3RvcjxTdHJpbmc+JgogCiBTdHJpbmcgQ1NTQmFzaWNTaGFwZVBvbHlnb246OmNz
c1RleHQoKSBjb25zdAogewotICAgIFZlY3RvcjxTdHJpbmc+IHBvaW50czsKLSAgICBwb2ludHMu
cmVzZXJ2ZUluaXRpYWxDYXBhY2l0eShtX3ZhbHVlcy5zaXplKCkpOwotCi0gICAgZm9yIChhdXRv
JiBzaGFwZVZhbHVlIDogbV92YWx1ZXMpCi0gICAgICAgIHBvaW50cy51bmNoZWNrZWRBcHBlbmQo
c2hhcGVWYWx1ZS0+Y3NzVGV4dCgpKTsKLQotICAgIHJldHVybiBidWlsZFBvbHlnb25TdHJpbmco
bV93aW5kUnVsZSwgcG9pbnRzKTsKKyAgICBhdXRvIHBvaW50cyA9IG1fdmFsdWVzLm1hcChbXShh
dXRvJiBzaGFwZVZhbHVlKSB7CisgICAgICAgIHJldHVybiBzaGFwZVZhbHVlLT5jc3NUZXh0KCk7
CisgICAgfSk7CisgICAgcmV0dXJuIGJ1aWxkUG9seWdvblN0cmluZyhtX3dpbmRSdWxlLCBXVEZN
b3ZlKHBvaW50cykpOwogfQogCiBib29sIENTU0Jhc2ljU2hhcGVQb2x5Z29uOjplcXVhbHMoY29u
c3QgQ1NTQmFzaWNTaGFwZSYgc2hhcGUpIGNvbnN0CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29y
ZS9jc3MvQ1NTQ29tcHV0ZWRTdHlsZURlY2xhcmF0aW9uLmNwcCBiL1NvdXJjZS9XZWJDb3JlL2Nz
cy9DU1NDb21wdXRlZFN0eWxlRGVjbGFyYXRpb24uY3BwCmluZGV4IDZlOTg1YmJlMjRhNzU4ZTQx
N2YyY2I2MTk1YjMzZWUyYzc3YmU0NTEuLmQyYzVjNzczYWQ2YzJjNjA1YmRkYmY1YWI1ZjU2Y2Qz
M2EyZTMwYmQgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL2Nzcy9DU1NDb21wdXRlZFN0eWxl
RGVjbGFyYXRpb24uY3BwCisrKyBiL1NvdXJjZS9XZWJDb3JlL2Nzcy9DU1NDb21wdXRlZFN0eWxl
RGVjbGFyYXRpb24uY3BwCkBAIC00Mzg0LDggKzQzODQsOSBAQCBSZWY8TXV0YWJsZVN0eWxlUHJv
cGVydGllcz4gQ29tcHV0ZWRTdHlsZUV4dHJhY3Rvcjo6Y29weVByb3BlcnRpZXNJblNldChjb25z
dCBDUwogICAgIGxpc3QucmVzZXJ2ZUluaXRpYWxDYXBhY2l0eShsZW5ndGgpOwogICAgIGZvciAo
dW5zaWduZWQgaSA9IDA7IGkgPCBsZW5ndGg7ICsraSkgewogICAgICAgICBpZiAoYXV0byB2YWx1
ZSA9IHByb3BlcnR5VmFsdWUoc2V0W2ldKSkKLSAgICAgICAgICAgIGxpc3QuYXBwZW5kKENTU1By
b3BlcnR5KHNldFtpXSwgV1RGTW92ZSh2YWx1ZSksIGZhbHNlKSk7CisgICAgICAgICAgICBsaXN0
LnVuY2hlY2tlZEFwcGVuZChDU1NQcm9wZXJ0eShzZXRbaV0sIFdURk1vdmUodmFsdWUpLCBmYWxz
ZSkpOwogICAgIH0KKyAgICBsaXN0LnNocmlua1RvRml0KCk7CiAgICAgcmV0dXJuIE11dGFibGVT
dHlsZVByb3BlcnRpZXM6OmNyZWF0ZShXVEZNb3ZlKGxpc3QpKTsKIH0KIApAQCAtNDM5OCw2ICs0
Mzk5LDcgQEAgUmVmPE11dGFibGVTdHlsZVByb3BlcnRpZXM+IENvbXB1dGVkU3R5bGVFeHRyYWN0
b3I6OmNvcHlQcm9wZXJ0aWVzKCkKICAgICAgICAgaWYgKGF1dG8gdmFsdWUgPSBwcm9wZXJ0eVZh
bHVlKHByb3BlcnR5SUQpKQogICAgICAgICAgICAgbGlzdC5hcHBlbmQoQ1NTUHJvcGVydHkocHJv
cGVydHlJRCwgV1RGTW92ZSh2YWx1ZSkpKTsKICAgICB9CisgICAgbGlzdC5zaHJpbmtUb0ZpdCgp
OwogICAgIHJldHVybiBNdXRhYmxlU3R5bGVQcm9wZXJ0aWVzOjpjcmVhdGUoV1RGTW92ZShsaXN0
KSk7CiB9CiAKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL2Nzcy9DU1NGb250RmFjZS5jcHAg
Yi9Tb3VyY2UvV2ViQ29yZS9jc3MvQ1NTRm9udEZhY2UuY3BwCmluZGV4IGViM2JjMGIzMjI0ZDc1
YTYxMjNkYzJiYWQ3OTY4M2M3N2I5YTg1NjkuLjQzYTVmMTZkZDcyYzU5Y2VhYjcwM2Q1NGQ3ZTIy
ZTI3MzMyZmMxY2QgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL2Nzcy9DU1NGb250RmFjZS5j
cHAKKysrIGIvU291cmNlL1dlYkNvcmUvY3NzL0NTU0ZvbnRGYWNlLmNwcApAQCAtNTQsMTMgKzU0
LDggQEAgREVGSU5FX0FMTE9DQVRPUl9XSVRIX0hFQVBfSURFTlRJRklFUihDU1NGb250RmFjZSk7
CiAKIHRlbXBsYXRlPHR5cGVuYW1lIFQ+IHZvaWQgaXRlcmF0ZUNsaWVudHMoSGFzaFNldDxDU1NG
b250RmFjZTo6Q2xpZW50Kj4mIGNsaWVudHMsIFQgY2FsbGJhY2spCiB7Ci0gICAgVmVjdG9yPFJl
ZjxDU1NGb250RmFjZTo6Q2xpZW50Pj4gY2xpZW50c0NvcHk7Ci0gICAgY2xpZW50c0NvcHkucmVz
ZXJ2ZUluaXRpYWxDYXBhY2l0eShjbGllbnRzLnNpemUoKSk7Ci0gICAgZm9yIChhdXRvKiBjbGll
bnQgOiBjbGllbnRzKQotICAgICAgICBjbGllbnRzQ29weS51bmNoZWNrZWRBcHBlbmQoKmNsaWVu
dCk7Ci0KLSAgICBmb3IgKGF1dG8mIGNsaWVudCA6IGNsaWVudHNDb3B5KQotICAgICAgICBjYWxs
YmFjayhjbGllbnQpOworICAgIGZvciAoYXV0byYgY2xpZW50IDogY29weVRvVmVjdG9yT2Y8UmVm
UHRyPENTU0ZvbnRGYWNlOjpDbGllbnQ+PihjbGllbnRzKSkKKyAgICAgICAgY2FsbGJhY2soKmNs
aWVudCk7CiB9CiAKIHZvaWQgQ1NTRm9udEZhY2U6OmFwcGVuZFNvdXJjZXMoQ1NTRm9udEZhY2Um
IGZvbnRGYWNlLCBDU1NWYWx1ZUxpc3QmIHNyY0xpc3QsIFNjcmlwdEV4ZWN1dGlvbkNvbnRleHQq
IGNvbnRleHQsIGJvb2wgaXNJbml0aWF0aW5nRWxlbWVudEluVXNlckFnZW50U2hhZG93VHJlZSkK
ZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL2Nzcy9DU1NGb250RmFjZVNldC5jcHAgYi9Tb3Vy
Y2UvV2ViQ29yZS9jc3MvQ1NTRm9udEZhY2VTZXQuY3BwCmluZGV4IDYyZWVjYjVhNWQyNDFkY2Jl
OGIyNDkzNWJiNmMyZjMyODk0OTE0YWUuLmViODg5OTM5NjhiMzBjMDA4NzdkYmViNjBjODRhZDRm
MjUyNmQ4ZjAgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL2Nzcy9DU1NGb250RmFjZVNldC5j
cHAKKysrIGIvU291cmNlL1dlYkNvcmUvY3NzL0NTU0ZvbnRGYWNlU2V0LmNwcApAQCAtNDI4LDEx
ICs0MjgsOSBAQCBFeGNlcHRpb25PcjxWZWN0b3I8c3RkOjpyZWZlcmVuY2Vfd3JhcHBlcjxDU1NG
b250RmFjZT4+PiBDU1NGb250RmFjZVNldDo6bWF0Y2hpbgogICAgICAgICB9CiAgICAgfQogCi0g
ICAgVmVjdG9yPHN0ZDo6cmVmZXJlbmNlX3dyYXBwZXI8Q1NTRm9udEZhY2U+PiByZXN1bHQ7Ci0g
ICAgcmVzdWx0LnJlc2VydmVJbml0aWFsQ2FwYWNpdHkocmVzdWx0Q29uc3RpdHVlbnRzLnNpemUo
KSk7Ci0gICAgZm9yIChhdXRvKiBjb25zdGl0dWVudCA6IHJlc3VsdENvbnN0aXR1ZW50cykKLSAg
ICAgICAgcmVzdWx0LnVuY2hlY2tlZEFwcGVuZCgqY29uc3RpdHVlbnQpOwotICAgIHJldHVybiBy
ZXN1bHQ7CisgICAgcmV0dXJuIFdURjo6bWFwKHJlc3VsdENvbnN0aXR1ZW50cywgW10oYXV0byog
Y29uc3RpdHVlbnQpIC0+IHN0ZDo6cmVmZXJlbmNlX3dyYXBwZXI8Q1NTRm9udEZhY2U+IHsKKyAg
ICAgICAgcmV0dXJuICpjb25zdGl0dWVudDsKKyAgICB9KTsKIH0KIAogRXhjZXB0aW9uT3I8Ym9v
bD4gQ1NTRm9udEZhY2VTZXQ6OmNoZWNrKGNvbnN0IFN0cmluZyYgZm9udCwgY29uc3QgU3RyaW5n
JiB0ZXh0KQpAQCAtNDg2LDEyICs0ODQsOSBAQCBDU1NTZWdtZW50ZWRGb250RmFjZSogQ1NTRm9u
dEZhY2VTZXQ6OmZvbnRGYWNlKEZvbnRTZWxlY3Rpb25SZXF1ZXN0IHJlcXVlc3QsIGNvbgogICAg
IH0KIAogICAgIGlmICghY2FuZGlkYXRlRm9udEZhY2VzLmlzRW1wdHkoKSkgewotICAgICAgICBW
ZWN0b3I8Rm9udFNlbGVjdGlvbkNhcGFiaWxpdGllcz4gY2FwYWJpbGl0aWVzOwotICAgICAgICBj
YXBhYmlsaXRpZXMucmVzZXJ2ZUluaXRpYWxDYXBhY2l0eShjYW5kaWRhdGVGb250RmFjZXMuc2l6
ZSgpKTsKLSAgICAgICAgZm9yIChhdXRvJiBmYWNlIDogY2FuZGlkYXRlRm9udEZhY2VzKSB7Ci0g
ICAgICAgICAgICBhdXRvIGZvbnRTZWxlY3Rpb25DYXBhYmlsaXRpZXMgPSBmYWNlLmdldCgpLmZv
bnRTZWxlY3Rpb25DYXBhYmlsaXRpZXMoKTsKLSAgICAgICAgICAgIGNhcGFiaWxpdGllcy51bmNo
ZWNrZWRBcHBlbmQoKmZvbnRTZWxlY3Rpb25DYXBhYmlsaXRpZXMpOwotICAgICAgICB9CisgICAg
ICAgIGF1dG8gY2FwYWJpbGl0aWVzID0gY2FuZGlkYXRlRm9udEZhY2VzLm1hcChbXShhdXRvJiBm
YWNlKSB7CisgICAgICAgICAgICByZXR1cm4gKmZhY2UuZ2V0KCkuZm9udFNlbGVjdGlvbkNhcGFi
aWxpdGllcygpOworICAgICAgICB9KTsKICAgICAgICAgRm9udFNlbGVjdGlvbkFsZ29yaXRobSBm
b250U2VsZWN0aW9uQWxnb3JpdGhtKHJlcXVlc3QsIGNhcGFiaWxpdGllcyk7CiAgICAgICAgIHN0
ZDo6c3RhYmxlX3NvcnQoY2FuZGlkYXRlRm9udEZhY2VzLmJlZ2luKCksIGNhbmRpZGF0ZUZvbnRG
YWNlcy5lbmQoKSwgWyZmb250U2VsZWN0aW9uQWxnb3JpdGhtXShjb25zdCBDU1NGb250RmFjZSYg
Zmlyc3QsIGNvbnN0IENTU0ZvbnRGYWNlJiBzZWNvbmQpIHsKICAgICAgICAgICAgIGF1dG8gZmly
c3RDYXBhYmlsaXRpZXMgPSBmaXJzdC5mb250U2VsZWN0aW9uQ2FwYWJpbGl0aWVzKCk7CmRpZmYg
LS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9jc3MvQ1NTS2V5ZnJhbWVzUnVsZS5jcHAgYi9Tb3VyY2Uv
V2ViQ29yZS9jc3MvQ1NTS2V5ZnJhbWVzUnVsZS5jcHAKaW5kZXggMzY1MWVlYjNjOGU1OGE2ZGZi
ZmZmYTkxZTJlMGM5NDM3NWU1NmI0NS4uYTE2ZTZjY2RiNzVlZmY4Y2FlNjk3Mzg4NWUzYWExNGFi
ODU1NTQ3MCAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvY3NzL0NTU0tleWZyYW1lc1J1bGUu
Y3BwCisrKyBiL1NvdXJjZS9XZWJDb3JlL2Nzcy9DU1NLZXlmcmFtZXNSdWxlLmNwcApAQCAtNTIs
MTEgKzUyLDkgQEAgU3R5bGVSdWxlS2V5ZnJhbWVzOjpTdHlsZVJ1bGVLZXlmcmFtZXMoY29uc3Qg
QXRvbVN0cmluZyYgbmFtZSwgc3RkOjp1bmlxdWVfcHRyPEQKIAogU3R5bGVSdWxlS2V5ZnJhbWVz
OjpTdHlsZVJ1bGVLZXlmcmFtZXMoY29uc3QgU3R5bGVSdWxlS2V5ZnJhbWVzJiBvKQogICAgIDog
U3R5bGVSdWxlQmFzZShvKQorICAgICwgbV9rZXlmcmFtZXMoby5rZXlmcmFtZXMoKSkKICAgICAs
IG1fbmFtZShvLm1fbmFtZSkKIHsKLSAgICBtX2tleWZyYW1lcy5yZXNlcnZlSW5pdGlhbENhcGFj
aXR5KG8ua2V5ZnJhbWVzKCkuc2l6ZSgpKTsKLSAgICBmb3IgKGF1dG8mIGtleWZyYW1lIDogby5r
ZXlmcmFtZXMoKSkKLSAgICAgICAgbV9rZXlmcmFtZXMudW5jaGVja2VkQXBwZW5kKGtleWZyYW1l
LmNvcHlSZWYoKSk7CiB9CiAKIFJlZjxTdHlsZVJ1bGVLZXlmcmFtZXM+IFN0eWxlUnVsZUtleWZy
YW1lczo6Y3JlYXRlKGNvbnN0IEF0b21TdHJpbmcmIG5hbWUpCmRpZmYgLS1naXQgYS9Tb3VyY2Uv
V2ViQ29yZS9jc3MvU3R5bGVQcm9wZXJ0aWVzLmNwcCBiL1NvdXJjZS9XZWJDb3JlL2Nzcy9TdHls
ZVByb3BlcnRpZXMuY3BwCmluZGV4IGVlZjUxNTZiOTZhYTRiNTk4YTFiZjJkNTNlNTliOGQ4NDgz
MTQ1ZDkuLmFlMzhiOGUwODVhMjRhYWFlMDRlN2NiNWRmMjQzZjg3MTE1Y2IwZjcgMTAwNjQ0Ci0t
LSBhL1NvdXJjZS9XZWJDb3JlL2Nzcy9TdHlsZVByb3BlcnRpZXMuY3BwCisrKyBiL1NvdXJjZS9X
ZWJDb3JlL2Nzcy9TdHlsZVByb3BlcnRpZXMuY3BwCkBAIC0xNzI1LDYgKzE3MjUsNyBAQCBSZWY8
TXV0YWJsZVN0eWxlUHJvcGVydGllcz4gU3R5bGVQcm9wZXJ0aWVzOjpjb3B5UHJvcGVydGllc0lu
U2V0KGNvbnN0IENTU1Byb3BlcgogICAgICAgICBpZiAoYXV0byB2YWx1ZSA9IGdldFByb3BlcnR5
Q1NTVmFsdWUoc2V0W2ldKSkKICAgICAgICAgICAgIGxpc3QudW5jaGVja2VkQXBwZW5kKENTU1By
b3BlcnR5KHNldFtpXSwgV1RGTW92ZSh2YWx1ZSksIGZhbHNlKSk7CiAgICAgfQorICAgIGxpc3Qu
c2hyaW5rVG9GaXQoKTsKICAgICByZXR1cm4gTXV0YWJsZVN0eWxlUHJvcGVydGllczo6Y3JlYXRl
KFdURk1vdmUobGlzdCkpOwogfQogCkBAIC0xODA1LDcgKzE4MDYsNiBAQCBEZWZlcnJlZFN0eWxl
UHJvcGVydGllczo6RGVmZXJyZWRTdHlsZVByb3BlcnRpZXMoY29uc3QgQ1NTUGFyc2VyVG9rZW5S
YW5nZSYgcmFuZwogICAgICwgbV9wYXJzZXIocGFyc2VyKQogewogICAgIHNpemVfdCBsZW5ndGgg
PSByYW5nZS5lbmQoKSAtIHJhbmdlLmJlZ2luKCk7Ci0gICAgbV90b2tlbnMucmVzZXJ2ZUNhcGFj
aXR5KGxlbmd0aCk7CiAgICAgbV90b2tlbnMuYXBwZW5kKHJhbmdlLmJlZ2luKCksIGxlbmd0aCk7
CiB9CiAgICAgCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9jc3MvU3R5bGVSdWxlLmNwcCBi
L1NvdXJjZS9XZWJDb3JlL2Nzcy9TdHlsZVJ1bGUuY3BwCmluZGV4IDYzZDI0ZWQ3YmY0NGFlNmU3
OTVlOWY2OWYwNGU0ZjY5NmNhYjY1MjkuLjFkOWVlN2QwMDU0Mzg3NTU0OGFkMzJlYzU3NGE4YjAw
ZGJlOTU5YjcgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL2Nzcy9TdHlsZVJ1bGUuY3BwCisr
KyBiL1NvdXJjZS9XZWJDb3JlL2Nzcy9TdHlsZVJ1bGUuY3BwCkBAIC0zNjksNyArMzY5LDYgQEAg
RGVmZXJyZWRTdHlsZUdyb3VwUnVsZUxpc3Q6OkRlZmVycmVkU3R5bGVHcm91cFJ1bGVMaXN0KGNv
bnN0IENTU1BhcnNlclRva2VuUmFuZ2UKICAgICA6IG1fcGFyc2VyKHBhcnNlcikKIHsKICAgICBz
aXplX3QgbGVuZ3RoID0gcmFuZ2UuZW5kKCkgLSByYW5nZS5iZWdpbigpOwotICAgIG1fdG9rZW5z
LnJlc2VydmVDYXBhY2l0eShsZW5ndGgpOwogICAgIG1fdG9rZW5zLmFwcGVuZChyYW5nZS5iZWdp
bigpLCBsZW5ndGgpOwogfQogCkBAIC0zOTksMTAgKzM5OCw4IEBAIFN0eWxlUnVsZUdyb3VwOjpT
dHlsZVJ1bGVHcm91cChTdHlsZVJ1bGVUeXBlIHR5cGUsIHN0ZDo6dW5pcXVlX3B0cjxEZWZlcnJl
ZFN0eWxlCiAKIFN0eWxlUnVsZUdyb3VwOjpTdHlsZVJ1bGVHcm91cChjb25zdCBTdHlsZVJ1bGVH
cm91cCYgbykKICAgICA6IFN0eWxlUnVsZUJhc2UobykKKyAgICAsIG1fY2hpbGRSdWxlcyhvLmNo
aWxkUnVsZXMoKS5tYXAoW10oYXV0byYgcnVsZSkgLT4gUmVmUHRyPFN0eWxlUnVsZUJhc2U+IHsg
cmV0dXJuIHJ1bGUtPmNvcHkoKTsgfSkpCiB7Ci0gICAgbV9jaGlsZFJ1bGVzLnJlc2VydmVJbml0
aWFsQ2FwYWNpdHkoby5jaGlsZFJ1bGVzKCkuc2l6ZSgpKTsKLSAgICBmb3IgKGF1dG8mIGNoaWxk
UnVsZSA6IG8uY2hpbGRSdWxlcygpKQotICAgICAgICBtX2NoaWxkUnVsZXMudW5jaGVja2VkQXBw
ZW5kKGNoaWxkUnVsZS0+Y29weSgpKTsKIH0KIAogY29uc3QgVmVjdG9yPFJlZlB0cjxTdHlsZVJ1
bGVCYXNlPj4mIFN0eWxlUnVsZUdyb3VwOjpjaGlsZFJ1bGVzKCkgY29uc3QKZGlmZiAtLWdpdCBh
L1NvdXJjZS9XZWJDb3JlL2Nzcy9jYWxjL0NTU0NhbGNPcGVyYXRpb25Ob2RlLmggYi9Tb3VyY2Uv
V2ViQ29yZS9jc3MvY2FsYy9DU1NDYWxjT3BlcmF0aW9uTm9kZS5oCmluZGV4IDJjNzE2Y2FlODY0
N2UyZWZkMzRmNTdjZmM4ZjczOTQ5ZDIyNTViNmYuLjE0OTRlNDlmYTk4MWI3MDY4OTc5Y2IzZTg5
MzJhMTJjNDQxODVmM2EgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL2Nzcy9jYWxjL0NTU0Nh
bGNPcGVyYXRpb25Ob2RlLmgKKysrIGIvU291cmNlL1dlYkNvcmUvY3NzL2NhbGMvQ1NTQ2FsY09w
ZXJhdGlvbk5vZGUuaApAQCAtODUsMTAgKzg1LDggQEAgcHJpdmF0ZToKICAgICBDU1NDYWxjT3Bl
cmF0aW9uTm9kZShDYWxjdWxhdGlvbkNhdGVnb3J5IGNhdGVnb3J5LCBDYWxjT3BlcmF0b3Igb3As
IFJlZjxDU1NDYWxjRXhwcmVzc2lvbk5vZGU+JiYgbGVmdFNpZGUsIFJlZjxDU1NDYWxjRXhwcmVz
c2lvbk5vZGU+JiYgcmlnaHRTaWRlKQogICAgICAgICA6IENTU0NhbGNFeHByZXNzaW9uTm9kZShj
YXRlZ29yeSkKICAgICAgICAgLCBtX29wZXJhdG9yKG9wKQorICAgICAgICAsIG1fY2hpbGRyZW4o
eyBXVEZNb3ZlKGxlZnRTaWRlKSwgV1RGTW92ZShyaWdodFNpZGUpIH0pCiAgICAgewotICAgICAg
ICBtX2NoaWxkcmVuLnJlc2VydmVJbml0aWFsQ2FwYWNpdHkoMik7Ci0gICAgICAgIG1fY2hpbGRy
ZW4udW5jaGVja2VkQXBwZW5kKFdURk1vdmUobGVmdFNpZGUpKTsKLSAgICAgICAgbV9jaGlsZHJl
bi51bmNoZWNrZWRBcHBlbmQoV1RGTW92ZShyaWdodFNpZGUpKTsKICAgICB9CiAKICAgICBDU1ND
YWxjT3BlcmF0aW9uTm9kZShDYWxjdWxhdGlvbkNhdGVnb3J5IGNhdGVnb3J5LCBDYWxjT3BlcmF0
b3Igb3AsIFZlY3RvcjxSZWY8Q1NTQ2FsY0V4cHJlc3Npb25Ob2RlPj4mJiBjaGlsZHJlbikKZGlm
ZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL2Nzcy9jYWxjL0NTU0NhbGNWYWx1ZS5jcHAgYi9Tb3Vy
Y2UvV2ViQ29yZS9jc3MvY2FsYy9DU1NDYWxjVmFsdWUuY3BwCmluZGV4IDA1ZDkyZGZiN2NhYjlm
ZDU5NjY3NDk4NjhmYjY4MjgwYjA5NzVlZTYuLjQzNTgyYjRkMTEzMDI5NTczZjNiYWYwMTYyYTNj
ZGY2M2M2NzlmNDcgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL2Nzcy9jYWxjL0NTU0NhbGNW
YWx1ZS5jcHAKKysrIGIvU291cmNlL1dlYkNvcmUvY3NzL2NhbGMvQ1NTQ2FsY1ZhbHVlLmNwcApA
QCAtNjksMTEgKzY5LDEwIEBAIHN0YXRpYyBWZWN0b3I8UmVmPENTU0NhbGNFeHByZXNzaW9uTm9k
ZT4+IGNyZWF0ZUNTUyhjb25zdCBWZWN0b3I8c3RkOjp1bmlxdWVfcHRyCiAgICAgVmVjdG9yPFJl
ZjxDU1NDYWxjRXhwcmVzc2lvbk5vZGU+PiB2YWx1ZXM7CiAgICAgdmFsdWVzLnJlc2VydmVJbml0
aWFsQ2FwYWNpdHkobm9kZXMuc2l6ZSgpKTsKICAgICBmb3IgKGF1dG8mIG5vZGUgOiBub2Rlcykg
ewotICAgICAgICBhdXRvIGNzc05vZGUgPSBjcmVhdGVDU1MoKm5vZGUsIHN0eWxlKTsKLSAgICAg
ICAgaWYgKCFjc3NOb2RlKQotICAgICAgICAgICAgY29udGludWU7Ci0gICAgICAgIHZhbHVlcy51
bmNoZWNrZWRBcHBlbmQoY3NzTm9kZS5yZWxlYXNlTm9uTnVsbCgpKTsKKyAgICAgICAgaWYgKGF1
dG8gY3NzTm9kZSA9IGNyZWF0ZUNTUygqbm9kZSwgc3R5bGUpKQorICAgICAgICAgICAgdmFsdWVz
LnVuY2hlY2tlZEFwcGVuZChjc3NOb2RlLnJlbGVhc2VOb25OdWxsKCkpOwogICAgIH0KKyAgICB2
YWx1ZXMuc2hyaW5rVG9GaXQoKTsKICAgICByZXR1cm4gdmFsdWVzOwogfQogCmRpZmYgLS1naXQg
YS9Tb3VyY2UvV2ViQ29yZS9kaXNwbGF5L2Nzcy9EaXNwbGF5Qm94RGVjb3JhdGlvblBhaW50ZXIu
Y3BwIGIvU291cmNlL1dlYkNvcmUvZGlzcGxheS9jc3MvRGlzcGxheUJveERlY29yYXRpb25QYWlu
dGVyLmNwcAppbmRleCBhNWE2YjRiMzJkY2NmNzFhMWZhNTM3ZmVkYzJlOTFlNDAwZTIzOGMyLi44
NTZhM2RlNTA0ZGVjMGJiZmE5MGFjMTdkZTM3ZjUxNWUxNGQ5MjA0IDEwMDY0NAotLS0gYS9Tb3Vy
Y2UvV2ViQ29yZS9kaXNwbGF5L2Nzcy9EaXNwbGF5Qm94RGVjb3JhdGlvblBhaW50ZXIuY3BwCisr
KyBiL1NvdXJjZS9XZWJDb3JlL2Rpc3BsYXkvY3NzL0Rpc3BsYXlCb3hEZWNvcmF0aW9uUGFpbnRl
ci5jcHAKQEAgLTQ4NywxMyArNDg3LDkgQEAgdm9pZCBCb3JkZXJQYWludGVyOjpjbGlwQm9yZGVy
U2lkZVBvbHlnb24oUGFpbnRpbmdDb250ZXh0JiBwYWludGluZ0NvbnRleHQsIGNvbnMKICAgICAv
LyAgICAgICAgIDAtLS0tLS0tLS0tLS0tLS0tMwogICAgIC8vCiAgICAgVmVjdG9yPEZsb2F0UG9p
bnQ+IHF1YWQ7Ci0gICAgcXVhZC5yZXNlcnZlSW5pdGlhbENhcGFjaXR5KDQpOwogICAgIHN3aXRj
aCAoc2lkZSkgewogICAgIGNhc2UgQm94U2lkZTo6VG9wOgotICAgICAgICBxdWFkLnVuY2hlY2tl
ZEFwcGVuZChvdXRlclJlY3QubWluWE1pbllDb3JuZXIoKSk7Ci0gICAgICAgIHF1YWQudW5jaGVj
a2VkQXBwZW5kKGlubmVyUmVjdC5taW5YTWluWUNvcm5lcigpKTsKLSAgICAgICAgcXVhZC51bmNo
ZWNrZWRBcHBlbmQoaW5uZXJSZWN0Lm1heFhNaW5ZQ29ybmVyKCkpOwotICAgICAgICBxdWFkLnVu
Y2hlY2tlZEFwcGVuZChvdXRlclJlY3QubWF4WE1pbllDb3JuZXIoKSk7CisgICAgICAgIHF1YWQg
PSB7IG91dGVyUmVjdC5taW5YTWluWUNvcm5lcigpLCBpbm5lclJlY3QubWluWE1pbllDb3JuZXIo
KSwgaW5uZXJSZWN0Lm1heFhNaW5ZQ29ybmVyKCksIG91dGVyUmVjdC5tYXhYTWluWUNvcm5lcigp
IH07CiAKICAgICAgICAgaWYgKCFpbm5lckJvcmRlci5yYWRpaSgpLnRvcExlZnQoKS5pc1plcm8o
KSkKICAgICAgICAgICAgIGZpbmRJbnRlcnNlY3Rpb24ob3V0ZXJSZWN0Lm1pblhNaW5ZQ29ybmVy
KCksIGlubmVyUmVjdC5taW5YTWluWUNvcm5lcigpLCBpbm5lclJlY3QubWluWE1heFlDb3JuZXIo
KSwgaW5uZXJSZWN0Lm1heFhNaW5ZQ29ybmVyKCksIHF1YWRbMV0pOwpAQCAtNTAzLDEwICs0OTks
NyBAQCB2b2lkIEJvcmRlclBhaW50ZXI6OmNsaXBCb3JkZXJTaWRlUG9seWdvbihQYWludGluZ0Nv
bnRleHQmIHBhaW50aW5nQ29udGV4dCwgY29ucwogICAgICAgICBicmVhazsKIAogICAgIGNhc2Ug
Qm94U2lkZTo6TGVmdDoKLSAgICAgICAgcXVhZC51bmNoZWNrZWRBcHBlbmQob3V0ZXJSZWN0Lm1p
blhNaW5ZQ29ybmVyKCkpOwotICAgICAgICBxdWFkLnVuY2hlY2tlZEFwcGVuZChpbm5lclJlY3Qu
bWluWE1pbllDb3JuZXIoKSk7Ci0gICAgICAgIHF1YWQudW5jaGVja2VkQXBwZW5kKGlubmVyUmVj
dC5taW5YTWF4WUNvcm5lcigpKTsKLSAgICAgICAgcXVhZC51bmNoZWNrZWRBcHBlbmQob3V0ZXJS
ZWN0Lm1pblhNYXhZQ29ybmVyKCkpOworICAgICAgICBxdWFkID0geyBvdXRlclJlY3QubWluWE1p
bllDb3JuZXIoKSwgaW5uZXJSZWN0Lm1pblhNaW5ZQ29ybmVyKCksIGlubmVyUmVjdC5taW5YTWF4
WUNvcm5lcigpLCBvdXRlclJlY3QubWluWE1heFlDb3JuZXIoKSB9OwogCiAgICAgICAgIGlmICgh
aW5uZXJCb3JkZXIucmFkaWkoKS50b3BMZWZ0KCkuaXNaZXJvKCkpCiAgICAgICAgICAgICBmaW5k
SW50ZXJzZWN0aW9uKG91dGVyUmVjdC5taW5YTWluWUNvcm5lcigpLCBpbm5lclJlY3QubWluWE1p
bllDb3JuZXIoKSwgaW5uZXJSZWN0Lm1pblhNYXhZQ29ybmVyKCksIGlubmVyUmVjdC5tYXhYTWlu
WUNvcm5lcigpLCBxdWFkWzFdKTsKQEAgLTUxNiwxMCArNTA5LDcgQEAgdm9pZCBCb3JkZXJQYWlu
dGVyOjpjbGlwQm9yZGVyU2lkZVBvbHlnb24oUGFpbnRpbmdDb250ZXh0JiBwYWludGluZ0NvbnRl
eHQsIGNvbnMKICAgICAgICAgYnJlYWs7CiAKICAgICBjYXNlIEJveFNpZGU6OkJvdHRvbToKLSAg
ICAgICAgcXVhZC51bmNoZWNrZWRBcHBlbmQob3V0ZXJSZWN0Lm1pblhNYXhZQ29ybmVyKCkpOwot
ICAgICAgICBxdWFkLnVuY2hlY2tlZEFwcGVuZChpbm5lclJlY3QubWluWE1heFlDb3JuZXIoKSk7
Ci0gICAgICAgIHF1YWQudW5jaGVja2VkQXBwZW5kKGlubmVyUmVjdC5tYXhYTWF4WUNvcm5lcigp
KTsKLSAgICAgICAgcXVhZC51bmNoZWNrZWRBcHBlbmQob3V0ZXJSZWN0Lm1heFhNYXhZQ29ybmVy
KCkpOworICAgICAgICBxdWFkID0geyBvdXRlclJlY3QubWluWE1heFlDb3JuZXIoKSwgaW5uZXJS
ZWN0Lm1pblhNYXhZQ29ybmVyKCksIGlubmVyUmVjdC5tYXhYTWF4WUNvcm5lcigpLCBvdXRlclJl
Y3QubWF4WE1heFlDb3JuZXIoKSB9OwogCiAgICAgICAgIGlmICghaW5uZXJCb3JkZXIucmFkaWko
KS5ib3R0b21MZWZ0KCkuaXNaZXJvKCkpCiAgICAgICAgICAgICBmaW5kSW50ZXJzZWN0aW9uKG91
dGVyUmVjdC5taW5YTWF4WUNvcm5lcigpLCBpbm5lclJlY3QubWluWE1heFlDb3JuZXIoKSwgaW5u
ZXJSZWN0Lm1pblhNaW5ZQ29ybmVyKCksIGlubmVyUmVjdC5tYXhYTWF4WUNvcm5lcigpLCBxdWFk
WzFdKTsKQEAgLTUyOSwxMCArNTE5LDcgQEAgdm9pZCBCb3JkZXJQYWludGVyOjpjbGlwQm9yZGVy
U2lkZVBvbHlnb24oUGFpbnRpbmdDb250ZXh0JiBwYWludGluZ0NvbnRleHQsIGNvbnMKICAgICAg
ICAgYnJlYWs7CiAKICAgICBjYXNlIEJveFNpZGU6OlJpZ2h0OgotICAgICAgICBxdWFkLnVuY2hl
Y2tlZEFwcGVuZChvdXRlclJlY3QubWF4WE1pbllDb3JuZXIoKSk7Ci0gICAgICAgIHF1YWQudW5j
aGVja2VkQXBwZW5kKGlubmVyUmVjdC5tYXhYTWluWUNvcm5lcigpKTsKLSAgICAgICAgcXVhZC51
bmNoZWNrZWRBcHBlbmQoaW5uZXJSZWN0Lm1heFhNYXhZQ29ybmVyKCkpOwotICAgICAgICBxdWFk
LnVuY2hlY2tlZEFwcGVuZChvdXRlclJlY3QubWF4WE1heFlDb3JuZXIoKSk7CisgICAgICAgIHF1
YWQgPSB7IG91dGVyUmVjdC5tYXhYTWluWUNvcm5lcigpLCBpbm5lclJlY3QubWF4WE1pbllDb3Ju
ZXIoKSwgaW5uZXJSZWN0Lm1heFhNYXhZQ29ybmVyKCksIG91dGVyUmVjdC5tYXhYTWF4WUNvcm5l
cigpIH07CiAKICAgICAgICAgaWYgKCFpbm5lckJvcmRlci5yYWRpaSgpLnRvcFJpZ2h0KCkuaXNa
ZXJvKCkpCiAgICAgICAgICAgICBmaW5kSW50ZXJzZWN0aW9uKG91dGVyUmVjdC5tYXhYTWluWUNv
cm5lcigpLCBpbm5lclJlY3QubWF4WE1pbllDb3JuZXIoKSwgaW5uZXJSZWN0Lm1pblhNaW5ZQ29y
bmVyKCksIGlubmVyUmVjdC5tYXhYTWF4WUNvcm5lcigpLCBxdWFkWzFdKTsKQEAgLTc5NiwzMSAr
NzgzLDM4IEBAIHZvaWQgQm9yZGVyUGFpbnRlcjo6ZHJhd0xpbmVGb3JCb3hTaWRlKFBhaW50aW5n
Q29udGV4dCYgcGFpbnRpbmdDb250ZXh0LCBjb25zdCBGCiAgICAgICAgIHkyID0gcm91bmRUb0Rl
dmljZVBpeGVsKHkyLCBkZXZpY2VTY2FsZUZhY3Rvcik7CiAKICAgICAgICAgVmVjdG9yPEZsb2F0
UG9pbnQ+IHF1YWQ7Ci0gICAgICAgIHF1YWQucmVzZXJ2ZUluaXRpYWxDYXBhY2l0eSg0KTsKICAg
ICAgICAgc3dpdGNoIChzaWRlKSB7CiAgICAgICAgIGNhc2UgQm94U2lkZTo6VG9wOgotICAgICAg
ICAgICAgcXVhZC51bmNoZWNrZWRBcHBlbmQoeyB4MSArIHN0ZDo6bWF4PGZsb2F0PigtYWRqYWNl
bnRXaWR0aDEsIDApLCB5MSB9KTsKLSAgICAgICAgICAgIHF1YWQudW5jaGVja2VkQXBwZW5kKHsg
eDEgKyBzdGQ6Om1heDxmbG9hdD4oIGFkamFjZW50V2lkdGgxLCAwKSwgeTIgfSk7Ci0gICAgICAg
ICAgICBxdWFkLnVuY2hlY2tlZEFwcGVuZCh7IHgyIC0gc3RkOjptYXg8ZmxvYXQ+KCBhZGphY2Vu
dFdpZHRoMiwgMCksIHkyIH0pOwotICAgICAgICAgICAgcXVhZC51bmNoZWNrZWRBcHBlbmQoeyB4
MiAtIHN0ZDo6bWF4PGZsb2F0PigtYWRqYWNlbnRXaWR0aDIsIDApLCB5MSB9KTsKKyAgICAgICAg
ICAgIHF1YWQgPSB7CisgICAgICAgICAgICAgICAgeyB4MSArIHN0ZDo6bWF4PGZsb2F0PigtYWRq
YWNlbnRXaWR0aDEsIDApLCB5MSB9LAorICAgICAgICAgICAgICAgIHsgeDEgKyBzdGQ6Om1heDxm
bG9hdD4oYWRqYWNlbnRXaWR0aDEsIDApLCB5MiB9LAorICAgICAgICAgICAgICAgIHsgeDIgLSBz
dGQ6Om1heDxmbG9hdD4oYWRqYWNlbnRXaWR0aDIsIDApLCB5MiB9LAorICAgICAgICAgICAgICAg
IHsgeDIgLSBzdGQ6Om1heDxmbG9hdD4oLWFkamFjZW50V2lkdGgyLCAwKSwgeTEgfQorICAgICAg
ICAgICAgfTsKICAgICAgICAgICAgIGJyZWFrOwogICAgICAgICBjYXNlIEJveFNpZGU6OkJvdHRv
bToKLSAgICAgICAgICAgIHF1YWQudW5jaGVja2VkQXBwZW5kKHsgeDEgKyBzdGQ6Om1heDxmbG9h
dD4oIGFkamFjZW50V2lkdGgxLCAwKSwgeTEgfSk7Ci0gICAgICAgICAgICBxdWFkLnVuY2hlY2tl
ZEFwcGVuZCh7IHgxICsgc3RkOjptYXg8ZmxvYXQ+KC1hZGphY2VudFdpZHRoMSwgMCksIHkyIH0p
OwotICAgICAgICAgICAgcXVhZC51bmNoZWNrZWRBcHBlbmQoeyB4MiAtIHN0ZDo6bWF4PGZsb2F0
PigtYWRqYWNlbnRXaWR0aDIsIDApLCB5MiB9KTsKLSAgICAgICAgICAgIHF1YWQudW5jaGVja2Vk
QXBwZW5kKHsgeDIgLSBzdGQ6Om1heDxmbG9hdD4oIGFkamFjZW50V2lkdGgyLCAwKSwgeTEgfSk7
CisgICAgICAgICAgICBxdWFkID0geworICAgICAgICAgICAgICAgIHsgeDEgKyBzdGQ6Om1heDxm
bG9hdD4oYWRqYWNlbnRXaWR0aDEsIDApLCB5MSB9LAorICAgICAgICAgICAgICAgIHsgeDEgKyBz
dGQ6Om1heDxmbG9hdD4oLWFkamFjZW50V2lkdGgxLCAwKSwgeTIgfSwKKyAgICAgICAgICAgICAg
ICB7IHgyIC0gc3RkOjptYXg8ZmxvYXQ+KC1hZGphY2VudFdpZHRoMiwgMCksIHkyIH0sCisgICAg
ICAgICAgICAgICAgeyB4MiAtIHN0ZDo6bWF4PGZsb2F0PihhZGphY2VudFdpZHRoMiwgMCksIHkx
IH0KKyAgICAgICAgICAgIH07CiAgICAgICAgICAgICBicmVhazsKICAgICAgICAgY2FzZSBCb3hT
aWRlOjpMZWZ0OgotICAgICAgICAgICAgcXVhZC51bmNoZWNrZWRBcHBlbmQoeyB4MSwgeTEgKyBz
dGQ6Om1heDxmbG9hdD4oLWFkamFjZW50V2lkdGgxLCAwKSB9KTsKLSAgICAgICAgICAgIHF1YWQu
dW5jaGVja2VkQXBwZW5kKHsgeDEsIHkyIC0gc3RkOjptYXg8ZmxvYXQ+KC1hZGphY2VudFdpZHRo
MiwgMCkgfSk7Ci0gICAgICAgICAgICBxdWFkLnVuY2hlY2tlZEFwcGVuZCh7IHgyLCB5MiAtIHN0
ZDo6bWF4PGZsb2F0PiggYWRqYWNlbnRXaWR0aDIsIDApIH0pOwotICAgICAgICAgICAgcXVhZC51
bmNoZWNrZWRBcHBlbmQoeyB4MiwgeTEgKyBzdGQ6Om1heDxmbG9hdD4oIGFkamFjZW50V2lkdGgx
LCAwKSB9KTsKKyAgICAgICAgICAgIHF1YWQgPSB7CisgICAgICAgICAgICAgICAgeyB4MSwgeTEg
KyBzdGQ6Om1heDxmbG9hdD4oLWFkamFjZW50V2lkdGgxLCAwKSB9LAorICAgICAgICAgICAgICAg
IHsgeDEsIHkyIC0gc3RkOjptYXg8ZmxvYXQ+KC1hZGphY2VudFdpZHRoMiwgMCkgfSwKKyAgICAg
ICAgICAgICAgICB7IHgyLCB5MiAtIHN0ZDo6bWF4PGZsb2F0PihhZGphY2VudFdpZHRoMiwgMCkg
fSwKKyAgICAgICAgICAgICAgICB7IHgyLCB5MSArIHN0ZDo6bWF4PGZsb2F0PihhZGphY2VudFdp
ZHRoMSwgMCkgfQorICAgICAgICAgICAgfTsKICAgICAgICAgICAgIGJyZWFrOwogICAgICAgICBj
YXNlIEJveFNpZGU6OlJpZ2h0OgotICAgICAgICAgICAgcXVhZC51bmNoZWNrZWRBcHBlbmQoeyB4
MSwgeTEgKyBzdGQ6Om1heDxmbG9hdD4oIGFkamFjZW50V2lkdGgxLCAwKSB9KTsKLSAgICAgICAg
ICAgIHF1YWQudW5jaGVja2VkQXBwZW5kKHsgeDEsIHkyIC0gc3RkOjptYXg8ZmxvYXQ+KCBhZGph
Y2VudFdpZHRoMiwgMCkgfSk7Ci0gICAgICAgICAgICBxdWFkLnVuY2hlY2tlZEFwcGVuZCh7IHgy
LCB5MiAtIHN0ZDo6bWF4PGZsb2F0PigtYWRqYWNlbnRXaWR0aDIsIDApIH0pOwotICAgICAgICAg
ICAgcXVhZC51bmNoZWNrZWRBcHBlbmQoeyB4MiwgeTEgKyBzdGQ6Om1heDxmbG9hdD4oLWFkamFj
ZW50V2lkdGgxLCAwKSB9KTsKKyAgICAgICAgICAgIHF1YWQgPSB7CisgICAgICAgICAgICAgICAg
eyB4MSwgeTEgKyBzdGQ6Om1heDxmbG9hdD4oYWRqYWNlbnRXaWR0aDEsIDApIH0sCisgICAgICAg
ICAgICAgICAgeyB4MSwgeTIgLSBzdGQ6Om1heDxmbG9hdD4oYWRqYWNlbnRXaWR0aDIsIDApIH0s
CisgICAgICAgICAgICAgICAgeyB4MiwgeTIgLSBzdGQ6Om1heDxmbG9hdD4oLWFkamFjZW50V2lk
dGgyLCAwKSB9LAorICAgICAgICAgICAgICAgIHsgeDIsIHkxICsgc3RkOjptYXg8ZmxvYXQ+KC1h
ZGphY2VudFdpZHRoMSwgMCkgfQorICAgICAgICAgICAgfTsKICAgICAgICAgICAgIGJyZWFrOwog
ICAgICAgICB9CiAKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL2RvbS9ET01SZWN0TGlzdC5j
cHAgYi9Tb3VyY2UvV2ViQ29yZS9kb20vRE9NUmVjdExpc3QuY3BwCmluZGV4IDdjMGE2MmM5NmFi
MDg5ZjJkYTY0NzUwZGU4ZTVjYmIzMGMxOTRmODUuLjcxNWUxNjM1NWM4MDllMDIwYTM2ODk5NDc3
MWVhMzdlNDhlMjk3Y2UgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL2RvbS9ET01SZWN0TGlz
dC5jcHAKKysrIGIvU291cmNlL1dlYkNvcmUvZG9tL0RPTVJlY3RMaXN0LmNwcApAQCAtMzEsMTcg
KzMxLDEzIEBACiBuYW1lc3BhY2UgV2ViQ29yZSB7CiAKIERPTVJlY3RMaXN0OjpET01SZWN0TGlz
dChjb25zdCBWZWN0b3I8RmxvYXRRdWFkPiYgcXVhZHMpCisgICAgOiBtX2l0ZW1zKHF1YWRzLm1h
cChbXShhdXRvJiBxdWFkKSB7IHJldHVybiBET01SZWN0OjpjcmVhdGUocXVhZC5ib3VuZGluZ0Jv
eCgpKTsgfSkpCiB7Ci0gICAgbV9pdGVtcy5yZXNlcnZlSW5pdGlhbENhcGFjaXR5KHF1YWRzLnNp
emUoKSk7Ci0gICAgZm9yIChhdXRvJiBxdWFkIDogcXVhZHMpCi0gICAgICAgIG1faXRlbXMudW5j
aGVja2VkQXBwZW5kKERPTVJlY3Q6OmNyZWF0ZShxdWFkLmJvdW5kaW5nQm94KCkpKTsKIH0KIAog
RE9NUmVjdExpc3Q6OkRPTVJlY3RMaXN0KGNvbnN0IFZlY3RvcjxGbG9hdFJlY3Q+JiByZWN0cykK
KyAgICA6IG1faXRlbXMocmVjdHMubWFwKFtdKGF1dG8mIHJlY3QpIHsgcmV0dXJuIERPTVJlY3Q6
OmNyZWF0ZShyZWN0KTsgfSkpCiB7Ci0gICAgbV9pdGVtcy5yZXNlcnZlSW5pdGlhbENhcGFjaXR5
KHJlY3RzLnNpemUoKSk7Ci0gICAgZm9yIChhdXRvJiByZWN0IDogcmVjdHMpCi0gICAgICAgIG1f
aXRlbXMudW5jaGVja2VkQXBwZW5kKERPTVJlY3Q6OmNyZWF0ZShyZWN0KSk7CiB9CiAKIERPTVJl
Y3RMaXN0Ojp+RE9NUmVjdExpc3QoKSA9IGRlZmF1bHQ7CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2Vi
Q29yZS9kb20vRG9jdW1lbnQuY3BwIGIvU291cmNlL1dlYkNvcmUvZG9tL0RvY3VtZW50LmNwcApp
bmRleCBhNmE2YWRjNmQ4ZDdmMThjMmY0YTlmY2I1MjkwOTRmMTVmMmNiMDJjLi5mMzlmYjgxNGE1
N2UyZTFmMzBkYzZkYTdiYTk4NjY0NjFkOWY4OGNlIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29y
ZS9kb20vRG9jdW1lbnQuY3BwCisrKyBiL1NvdXJjZS9XZWJDb3JlL2RvbS9Eb2N1bWVudC5jcHAK
QEAgLTQyNDAsMTMgKzQyNDAsNyBAQCB2b2lkIERvY3VtZW50Ojp1cGRhdGVFbGVtZW50c0FmZmVj
dGVkQnlNZWRpYVF1ZXJpZXMoKQogICAgICAgICAgICAgdGhlbWVDb2xvckNoYW5nZWQoKTsKICAg
ICB9CiAKLSAgICAvLyBGSVhNRTogY29weVRvVmVjdG9yIGRvZXNuJ3Qgd29yayB3aXRoIFdlYWtI
YXNoU2V0Ci0gICAgVmVjdG9yPFJlZjxIVE1MSW1hZ2VFbGVtZW50Pj4gaW1hZ2VzOwotICAgIGlt
YWdlcy5yZXNlcnZlSW5pdGlhbENhcGFjaXR5KG1fZHluYW1pY01lZGlhUXVlcnlEZXBlbmRlbnRJ
bWFnZXMuY29tcHV0ZVNpemUoKSk7Ci0gICAgZm9yIChhdXRvJiBpbWFnZSA6IG1fZHluYW1pY01l
ZGlhUXVlcnlEZXBlbmRlbnRJbWFnZXMpCi0gICAgICAgIGltYWdlcy5hcHBlbmQoaW1hZ2UpOwot
Ci0gICAgZm9yIChhdXRvJiBpbWFnZSA6IGltYWdlcykKKyAgICBmb3IgKGF1dG8mIGltYWdlIDog
Y29weVRvVmVjdG9yT2Y8UmVmPEhUTUxJbWFnZUVsZW1lbnQ+PihtX2R5bmFtaWNNZWRpYVF1ZXJ5
RGVwZW5kZW50SW1hZ2VzKSkKICAgICAgICAgaW1hZ2UtPmV2YWx1YXRlRHluYW1pY01lZGlhUXVl
cnlEZXBlbmRlbmNpZXMoKTsKIH0KIApAQCAtNzYxMCw2ICs3NjA0LDcgQEAgdm9pZCBEb2N1bWVu
dDo6ZGlkQXNzb2NpYXRlRm9ybUNvbnRyb2xzVGltZXJGaXJlZCgpCiAgICAgICAgIGlmIChlbGVt
ZW50LmlzQ29ubmVjdGVkKCkpCiAgICAgICAgICAgICBjb250cm9scy51bmNoZWNrZWRBcHBlbmQo
JmVsZW1lbnQpOwogICAgIH0KKyAgICBjb250cm9scy5zaHJpbmtUb0ZpdCgpOwogCiAgICAgaWYg
KGF1dG8gcGFnZSA9IHRoaXMtPnBhZ2UoKTsgcGFnZSAmJiAhY29udHJvbHMuaXNFbXB0eSgpKSB7
CiAgICAgICAgIEFTU0VSVChtX2ZyYW1lKTsKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL2Rv
bS9FbGVtZW50RGF0YS5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9kb20vRWxlbWVudERhdGEuY3BwCmlu
ZGV4IGI3MDNhZWZhZWE2OTIxOWIwODViYWQ5ZDA1MDMwNjhjZjAzZjFiNzAuLjA3MWRiMGIzNGNh
NmU1NmVmMTI2ZWJlZWQ1MThmNjBkNzQwYjRiOTkgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3Jl
L2RvbS9FbGVtZW50RGF0YS5jcHAKKysrIGIvU291cmNlL1dlYkNvcmUvZG9tL0VsZW1lbnREYXRh
LmNwcApAQCAtMTQ1LDEwICsxNDUsNyBAQCBVbmlxdWVFbGVtZW50RGF0YTo6VW5pcXVlRWxlbWVu
dERhdGEoY29uc3QgU2hhcmVhYmxlRWxlbWVudERhdGEmIG90aGVyKQogICAgIEFTU0VSVCghb3Ro
ZXIubV9pbmxpbmVTdHlsZSB8fCAhb3RoZXIubV9pbmxpbmVTdHlsZS0+aXNNdXRhYmxlKCkpOwog
ICAgIG1faW5saW5lU3R5bGUgPSBvdGhlci5tX2lubGluZVN0eWxlOwogCi0gICAgdW5zaWduZWQg
b3RoZXJMZW5ndGggPSBvdGhlci5sZW5ndGgoKTsKLSAgICBtX2F0dHJpYnV0ZVZlY3Rvci5yZXNl
cnZlQ2FwYWNpdHkob3RoZXJMZW5ndGgpOwotICAgIGZvciAodW5zaWduZWQgaSA9IDA7IGkgPCBv
dGhlckxlbmd0aDsgKytpKQotICAgICAgICBtX2F0dHJpYnV0ZVZlY3Rvci51bmNoZWNrZWRBcHBl
bmQob3RoZXIubV9hdHRyaWJ1dGVBcnJheVtpXSk7CisgICAgbV9hdHRyaWJ1dGVWZWN0b3IuYXBw
ZW5kKG90aGVyLm1fYXR0cmlidXRlQXJyYXksIG90aGVyLmxlbmd0aCgpKTsKIH0KIAogUmVmPFVu
aXF1ZUVsZW1lbnREYXRhPiBFbGVtZW50RGF0YTo6bWFrZVVuaXF1ZUNvcHkoKSBjb25zdApkaWZm
IC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvZG9tL0V2ZW50TGlzdGVuZXJNYXAuY3BwIGIvU291cmNl
L1dlYkNvcmUvZG9tL0V2ZW50TGlzdGVuZXJNYXAuY3BwCmluZGV4IGM0ZTgxNmRlYWY0MjVjYTkx
MTVlNzg2ZjZhMGFlMGJiNjg0MTY5MzkuLjYwYjFkYTc2M2YzYjBhNzBjZjFlYWRlNDMzNGQ4Zjk1
MzM2YTRlZjMgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL2RvbS9FdmVudExpc3RlbmVyTWFw
LmNwcAorKysgYi9Tb3VyY2UvV2ViQ29yZS9kb20vRXZlbnRMaXN0ZW5lck1hcC5jcHAKQEAgLTk3
LDEzICs5Nyw5IEBAIHZvaWQgRXZlbnRMaXN0ZW5lck1hcDo6Y2xlYXIoKQogCiBWZWN0b3I8QXRv
bVN0cmluZz4gRXZlbnRMaXN0ZW5lck1hcDo6ZXZlbnRUeXBlcygpIGNvbnN0CiB7Ci0gICAgVmVj
dG9yPEF0b21TdHJpbmc+IHR5cGVzOwotICAgIHR5cGVzLnJlc2VydmVJbml0aWFsQ2FwYWNpdHko
bV9lbnRyaWVzLnNpemUoKSk7Ci0KLSAgICBmb3IgKGF1dG8mIGVudHJ5IDogbV9lbnRyaWVzKQot
ICAgICAgICB0eXBlcy51bmNoZWNrZWRBcHBlbmQoZW50cnkuZmlyc3QpOwotCi0gICAgcmV0dXJu
IHR5cGVzOworICAgIHJldHVybiBtX2VudHJpZXMubWFwKFtdKGF1dG8mIGVudHJ5KSB7CisgICAg
ICAgIHJldHVybiBlbnRyeS5maXJzdDsKKyAgICB9KTsKIH0KIAogc3RhdGljIGlubGluZSBzaXpl
X3QgZmluZExpc3RlbmVyKGNvbnN0IEV2ZW50TGlzdGVuZXJWZWN0b3ImIGxpc3RlbmVycywgRXZl
bnRMaXN0ZW5lciYgbGlzdGVuZXIsIGJvb2wgdXNlQ2FwdHVyZSkKZGlmZiAtLWdpdCBhL1NvdXJj
ZS9XZWJDb3JlL2RvbS9UcmVlU2NvcGVPcmRlcmVkTWFwLmNwcCBiL1NvdXJjZS9XZWJDb3JlL2Rv
bS9UcmVlU2NvcGVPcmRlcmVkTWFwLmNwcAppbmRleCAzOTA5YzUzODA4Y2JkNjhjYTlkMzgwOGE1
ZDhhMGZkMDM4ZWE0ZjAzLi43YzdmYmI1NmYzMzgyZmUwOGZiZDgwNGZhYjM3M2IwMDUwYjM1MGZm
IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9kb20vVHJlZVNjb3BlT3JkZXJlZE1hcC5jcHAK
KysrIGIvU291cmNlL1dlYkNvcmUvZG9tL1RyZWVTY29wZU9yZGVyZWRNYXAuY3BwCkBAIC0yMTgs
MTEgKzIxOCw5IEBAIGNvbnN0IFZlY3RvcjxFbGVtZW50Kj4qIFRyZWVTY29wZU9yZGVyZWRNYXA6
OmdldEFsbEVsZW1lbnRzQnlJZChjb25zdCBBdG9tU3RyaW5nCiAKIGNvbnN0IFZlY3RvcjxBdG9t
U3RyaW5nPiBUcmVlU2NvcGVPcmRlcmVkTWFwOjprZXlzKCkgY29uc3QKIHsKLSAgICBWZWN0b3I8
QXRvbVN0cmluZz4gcmVzdWx0OwotICAgIHJlc3VsdC5yZXNlcnZlSW5pdGlhbENhcGFjaXR5KG1f
bWFwLnNpemUoKSk7Ci0gICAgZm9yIChhdXRvKiBrZXkgOiBtX21hcC5rZXlzKCkpCi0gICAgICAg
IHJlc3VsdC51bmNoZWNrZWRBcHBlbmQoY29uc3RfY2FzdDxBdG9tU3RyaW5nSW1wbCo+KGtleSkp
OwotICAgIHJldHVybiByZXN1bHQ7CisgICAgcmV0dXJuIFdURjo6bWFwKG1fbWFwLCBbXShhdXRv
JiBlbnRyeSkgLT4gQXRvbVN0cmluZyB7CisgICAgICAgIHJldHVybiBjb25zdF9jYXN0PEF0b21T
dHJpbmdJbXBsKj4oZW50cnkua2V5KTsKKyAgICB9KTsKIH0KIAogfSAvLyBuYW1lc3BhY2UgV2Vi
Q29yZQpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvZWRpdGluZy9Db21wb3NpdGVFZGl0Q29t
bWFuZC5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9lZGl0aW5nL0NvbXBvc2l0ZUVkaXRDb21tYW5kLmNw
cAppbmRleCAxZjM3NDUxZDlhY2EyNmNkNGM1OGQzYTI2MWE3NmVmNDNmOGZmYWU1Li40MDE2ZWMx
MDI2NWQ2NmY5ZWRlYTgzODc1ZjU4NDFlMWZmZWFiNzhlIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2Vi
Q29yZS9lZGl0aW5nL0NvbXBvc2l0ZUVkaXRDb21tYW5kLmNwcAorKysgYi9Tb3VyY2UvV2ViQ29y
ZS9lZGl0aW5nL0NvbXBvc2l0ZUVkaXRDb21tYW5kLmNwcApAQCAtNzg5LDEyICs3ODksOSBAQCBQ
b3NpdGlvbiBDb21wb3NpdGVFZGl0Q29tbWFuZDo6cmVwbGFjZVNlbGVjdGVkVGV4dEluTm9kZShj
b25zdCBTdHJpbmcmIHRleHQpCiAKIHN0YXRpYyBWZWN0b3I8UmVuZGVyZWREb2N1bWVudE1hcmtl
cj4gY29weU1hcmtlcnMoY29uc3QgVmVjdG9yPFJlbmRlcmVkRG9jdW1lbnRNYXJrZXIqPiYgbWFy
a2VyUG9pbnRlcnMpCiB7Ci0gICAgVmVjdG9yPFJlbmRlcmVkRG9jdW1lbnRNYXJrZXI+IG1hcmtl
cnM7Ci0gICAgbWFya2Vycy5yZXNlcnZlSW5pdGlhbENhcGFjaXR5KG1hcmtlclBvaW50ZXJzLnNp
emUoKSk7Ci0gICAgZm9yIChhdXRvJiBtYXJrZXJQb2ludGVyIDogbWFya2VyUG9pbnRlcnMpCi0g
ICAgICAgIG1hcmtlcnMudW5jaGVja2VkQXBwZW5kKCptYXJrZXJQb2ludGVyKTsKLQotICAgIHJl
dHVybiBtYXJrZXJzOworICAgIHJldHVybiBtYXJrZXJQb2ludGVycy5tYXAoW10oYXV0byYgbWFy
a2VyUG9pbnRlcikgeworICAgICAgICByZXR1cm4gKm1hcmtlclBvaW50ZXI7CisgICAgfSk7CiB9
CiAKIHZvaWQgQ29tcG9zaXRlRWRpdENvbW1hbmQ6OnJlcGxhY2VUZXh0SW5Ob2RlUHJlc2Vydmlu
Z01hcmtlcnMoVGV4dCYgbm9kZSwgdW5zaWduZWQgb2Zmc2V0LCB1bnNpZ25lZCBjb3VudCwgY29u
c3QgU3RyaW5nJiByZXBsYWNlbWVudFRleHQpCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9l
ZGl0aW5nL0VkaXRvci5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9lZGl0aW5nL0VkaXRvci5jcHAKaW5k
ZXggNzI0NWYxODA4NmJmNTM2OTQyNTc3ODU5ZGIxNmQ4OWMyYjI0OGQ1NS4uMTVjNWMzOTBjMWI1
NGYwZTMzYjVlOTI0NjRjNTNkNTJjOTIxZTI2YiAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUv
ZWRpdGluZy9FZGl0b3IuY3BwCisrKyBiL1NvdXJjZS9XZWJDb3JlL2VkaXRpbmcvRWRpdG9yLmNw
cApAQCAtNDAzMyw3ICs0MDMzLDcgQEAgc3RhdGljIFZlY3RvcjxUZXh0TGlzdD4gZWRpdGFibGVU
ZXh0TGlzdHNBdFBvc2l0aW9uSW5EZXNjZW5kaW5nT3JkZXIoY29uc3QgUG9zaXQKICAgICB9CiAK
ICAgICBWZWN0b3I8VGV4dExpc3Q+IHRleHRMaXN0czsKLSAgICB0ZXh0TGlzdHMucmVzZXJ2ZUNh
cGFjaXR5KGVuY2xvc2luZ0xpc3RzLnNpemUoKSk7CisgICAgdGV4dExpc3RzLnJlc2VydmVJbml0
aWFsQ2FwYWNpdHkoZW5jbG9zaW5nTGlzdHMuc2l6ZSgpKTsKICAgICBmb3IgKGF1dG8gaXRlcmF0
b3IgPSBlbmNsb3NpbmdMaXN0cy5yYmVnaW4oKTsgaXRlcmF0b3IgIT0gZW5jbG9zaW5nTGlzdHMu
cmVuZCgpOyArK2l0ZXJhdG9yKSB7CiAgICAgICAgIGF1dG8mIGxpc3QgPSBpdGVyYXRvci0+Z2V0
KCk7CiAgICAgICAgIGJvb2wgb3JkZXJlZCA9IGlzPEhUTUxPTGlzdEVsZW1lbnQ+KGxpc3QpOwpk
aWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvZmlsZWFwaS9GaWxlTGlzdC5jcHAgYi9Tb3VyY2Uv
V2ViQ29yZS9maWxlYXBpL0ZpbGVMaXN0LmNwcAppbmRleCBjMTlmODAyZGQ4OWQyNzEzMGEyMjFj
NWJjYjJkOTczYzZkYTU1MWY1Li43YTA5ODE1YjYyZDhkYThiNmFiN2YxNTVhZmM0Y2U1MTRlNGMw
ZTc1IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9maWxlYXBpL0ZpbGVMaXN0LmNwcAorKysg
Yi9Tb3VyY2UvV2ViQ29yZS9maWxlYXBpL0ZpbGVMaXN0LmNwcApAQCAtNDEsMTEgKzQxLDkgQEAg
RmlsZSogRmlsZUxpc3Q6Oml0ZW0odW5zaWduZWQgaW5kZXgpIGNvbnN0CiAKIFZlY3RvcjxTdHJp
bmc+IEZpbGVMaXN0OjpwYXRocygpIGNvbnN0CiB7Ci0gICAgVmVjdG9yPFN0cmluZz4gcGF0aHM7
Ci0gICAgcGF0aHMucmVzZXJ2ZUluaXRpYWxDYXBhY2l0eShtX2ZpbGVzLnNpemUoKSk7Ci0gICAg
Zm9yIChhdXRvJiBmaWxlIDogbV9maWxlcykKLSAgICAgICAgcGF0aHMudW5jaGVja2VkQXBwZW5k
KGZpbGUtPnBhdGgoKSk7Ci0gICAgcmV0dXJuIHBhdGhzOworICAgIHJldHVybiBtX2ZpbGVzLm1h
cChbXShhdXRvJiBmaWxlKSB7CisgICAgICAgIHJldHVybiBmaWxlLT5wYXRoKCk7CisgICAgfSk7
CiB9CiAKIH0gLy8gbmFtZXNwYWNlIFdlYkNvcmUKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3Jl
L2hpc3RvcnkvSGlzdG9yeUl0ZW0uY3BwIGIvU291cmNlL1dlYkNvcmUvaGlzdG9yeS9IaXN0b3J5
SXRlbS5jcHAKaW5kZXggZDUzNzdhYjBmN2NjMWYzZTQ3MTk3NWMyMDgwMGJlZTExODUyMTJlNC4u
MGQ1ZTBkNzYxYmIwNWQwZDdkOGM3M2E3NWUyYTAxY2JiZjhjYTY1YyAxMDA2NDQKLS0tIGEvU291
cmNlL1dlYkNvcmUvaGlzdG9yeS9IaXN0b3J5SXRlbS5jcHAKKysrIGIvU291cmNlL1dlYkNvcmUv
aGlzdG9yeS9IaXN0b3J5SXRlbS5jcHAKQEAgLTk1LDEwICs5NSwxMiBAQCBpbmxpbmUgSGlzdG9y
eUl0ZW06Okhpc3RvcnlJdGVtKGNvbnN0IEhpc3RvcnlJdGVtJiBpdGVtKQogICAgICwgbV9kaXNw
bGF5VGl0bGUoaXRlbS5tX2Rpc3BsYXlUaXRsZSkKICAgICAsIG1fc2Nyb2xsUG9zaXRpb24oaXRl
bS5tX3Njcm9sbFBvc2l0aW9uKQogICAgICwgbV9wYWdlU2NhbGVGYWN0b3IoaXRlbS5tX3BhZ2VT
Y2FsZUZhY3RvcikKKyAgICAsIG1fY2hpbGRyZW4oaXRlbS5tX2NoaWxkcmVuLm1hcChbXShhdXRv
JiBjaGlsZCkgeyByZXR1cm4gY2hpbGQtPmNvcHkoKTsgfSkpCiAgICAgLCBtX2xhc3RWaXNpdFdh
c0ZhaWx1cmUoaXRlbS5tX2xhc3RWaXNpdFdhc0ZhaWx1cmUpCiAgICAgLCBtX2lzVGFyZ2V0SXRl
bShpdGVtLm1faXNUYXJnZXRJdGVtKQogICAgICwgbV9pdGVtU2VxdWVuY2VOdW1iZXIoaXRlbS5t
X2l0ZW1TZXF1ZW5jZU51bWJlcikKICAgICAsIG1fZG9jdW1lbnRTZXF1ZW5jZU51bWJlcihpdGVt
Lm1fZG9jdW1lbnRTZXF1ZW5jZU51bWJlcikKKyAgICAsIG1fZm9ybURhdGEoaXRlbS5tX2Zvcm1E
YXRhID8gUmVmUHRyPEZvcm1EYXRhPiB7IGl0ZW0ubV9mb3JtRGF0YS0+Y29weSgpIH0gOiBudWxs
cHRyKQogICAgICwgbV9mb3JtQ29udGVudFR5cGUoaXRlbS5tX2Zvcm1Db250ZW50VHlwZSkKICAg
ICAsIG1fcHJ1bmluZ1JlYXNvbihQcnVuaW5nUmVhc29uOjpOb25lKQogI2lmIFBMQVRGT1JNKElP
U19GQU1JTFkpCkBAIC0xMDgsMTMgKzExMCw2IEBAIGlubGluZSBIaXN0b3J5SXRlbTo6SGlzdG9y
eUl0ZW0oY29uc3QgSGlzdG9yeUl0ZW0mIGl0ZW0pCiAjZW5kaWYKICAgICAsIG1faWRlbnRpZmll
cihpdGVtLm1faWRlbnRpZmllcikKIHsKLSAgICBpZiAoaXRlbS5tX2Zvcm1EYXRhKQotICAgICAg
ICBtX2Zvcm1EYXRhID0gaXRlbS5tX2Zvcm1EYXRhLT5jb3B5KCk7Ci0gICAgICAgIAotICAgIHVu
c2lnbmVkIHNpemUgPSBpdGVtLm1fY2hpbGRyZW4uc2l6ZSgpOwotICAgIG1fY2hpbGRyZW4ucmVz
ZXJ2ZUluaXRpYWxDYXBhY2l0eShzaXplKTsKLSAgICBmb3IgKHVuc2lnbmVkIGkgPSAwOyBpIDwg
c2l6ZTsgKytpKQotICAgICAgICBtX2NoaWxkcmVuLnVuY2hlY2tlZEFwcGVuZChpdGVtLm1fY2hp
bGRyZW5baV0tPmNvcHkoKSk7CiB9CiAKIFJlZjxIaXN0b3J5SXRlbT4gSGlzdG9yeUl0ZW06OmNv
cHkoKSBjb25zdApkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvaHRtbC9GaWxlSW5wdXRUeXBl
LmNwcCBiL1NvdXJjZS9XZWJDb3JlL2h0bWwvRmlsZUlucHV0VHlwZS5jcHAKaW5kZXggYTIzNzdi
YzFmMmI0NmFhNGY0ODgxNmZjMzcwNjFlMDlhNDljOTc2Mi4uMDZmMTJhYjI4OTdmMmRmZmRiMmM2
YWM3ZjZlOTNjZmMxMmRhNTNkNiAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvaHRtbC9GaWxl
SW5wdXRUeXBlLmNwcAorKysgYi9Tb3VyY2UvV2ViQ29yZS9odG1sL0ZpbGVJbnB1dFR5cGUuY3Bw
CkBAIC0zODUsMTMgKzM4NSw4IEBAIHZvaWQgRmlsZUlucHV0VHlwZTo6c2V0RmlsZXMoUmVmUHRy
PEZpbGVMaXN0PiYmIGZpbGVzLCBSZXF1ZXN0SWNvbiBzaG91bGRSZXF1ZXN0CiAgICAgcHJvdGVj
dGVkSW5wdXRFbGVtZW50LT5zZXRGb3JtQ29udHJvbFZhbHVlTWF0Y2hlc1JlbmRlcmVyKHRydWUp
OwogICAgIHByb3RlY3RlZElucHV0RWxlbWVudC0+dXBkYXRlVmFsaWRpdHkoKTsKIAotICAgIGlm
IChzaG91bGRSZXF1ZXN0SWNvbiA9PSBSZXF1ZXN0SWNvbjo6WWVzKSB7Ci0gICAgICAgIFZlY3Rv
cjxTdHJpbmc+IHBhdGhzOwotICAgICAgICBwYXRocy5yZXNlcnZlSW5pdGlhbENhcGFjaXR5KGxl
bmd0aCk7Ci0gICAgICAgIGZvciAoYXV0byYgZmlsZSA6IG1fZmlsZUxpc3QtPmZpbGVzKCkpCi0g
ICAgICAgICAgICBwYXRocy51bmNoZWNrZWRBcHBlbmQoZmlsZS0+cGF0aCgpKTsKLSAgICAgICAg
cmVxdWVzdEljb24ocGF0aHMpOwotICAgIH0KKyAgICBpZiAoc2hvdWxkUmVxdWVzdEljb24gPT0g
UmVxdWVzdEljb246OlllcykKKyAgICAgICAgcmVxdWVzdEljb24obV9maWxlTGlzdC0+cGF0aHMo
KSk7CiAKICAgICBpZiAocHJvdGVjdGVkSW5wdXRFbGVtZW50LT5yZW5kZXJlcigpKQogICAgICAg
ICBwcm90ZWN0ZWRJbnB1dEVsZW1lbnQtPnJlbmRlcmVyKCktPnJlcGFpbnQoKTsKQEAgLTQ0Nyw3
ICs0NDIsNyBAQCB2b2lkIEZpbGVJbnB1dFR5cGU6OmZpbGVzQ2hvc2VuKGNvbnN0IFZlY3RvcjxT
dHJpbmc+JiBwYXRocywgY29uc3QgVmVjdG9yPFN0cmluZwogICAgIGZvciAoc2l6ZV90IGkgPSAw
OyBpIDwgc2l6ZTsgKytpKQogICAgICAgICBmaWxlcy51bmNoZWNrZWRBcHBlbmQoeyBwYXRoc1tp
XSwgaSA8IHJlcGxhY2VtZW50UGF0aHMuc2l6ZSgpID8gcmVwbGFjZW1lbnRQYXRoc1tpXSA6IG51
bGxTdHJpbmcoKSwgeyB9IH0pOwogCi0gICAgZmlsZXNDaG9zZW4oZmlsZXMpOworICAgIGZpbGVz
Q2hvc2VuKFdURk1vdmUoZmlsZXMpKTsKIH0KIAogdm9pZCBGaWxlSW5wdXRUeXBlOjpkaWRDcmVh
dGVGaWxlTGlzdChSZWY8RmlsZUxpc3Q+JiYgZmlsZUxpc3QsIFJlZlB0cjxJY29uPiYmIGljb24p
CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9odG1sL0xpbmtJY29uQ29sbGVjdG9yLmNwcCBi
L1NvdXJjZS9XZWJDb3JlL2h0bWwvTGlua0ljb25Db2xsZWN0b3IuY3BwCmluZGV4IDhkNzBkNThi
N2Y5ZDIzZjBkMzI5MjZkNDViMmRhZDBjZGEwODg5YjUuLjM5ODM2NDk5ZjY3Y2I1ZjFlZmMwNTg4
YjNkOWIwOWE0NDQ0OGEyMTUgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL2h0bWwvTGlua0lj
b25Db2xsZWN0b3IuY3BwCisrKyBiL1NvdXJjZS9XZWJDb3JlL2h0bWwvTGlua0ljb25Db2xsZWN0
b3IuY3BwCkBAIC0xMDIsOCArMTAyLDggQEAgYXV0byBMaW5rSWNvbkNvbGxlY3Rvcjo6aWNvbnNP
ZlR5cGVzKE9wdGlvblNldDxMaW5rSWNvblR5cGU+IGljb25UeXBlcykgLT4gVmVjdG8KIAogICAg
ICAgICBWZWN0b3I8c3RkOjpwYWlyPFN0cmluZywgU3RyaW5nPj4gYXR0cmlidXRlczsKICAgICAg
ICAgaWYgKGxpbmtFbGVtZW50Lmhhc0F0dHJpYnV0ZXMoKSkgewotICAgICAgICAgICAgYXR0cmli
dXRlcy5yZXNlcnZlQ2FwYWNpdHkobGlua0VsZW1lbnQuYXR0cmlidXRlQ291bnQoKSk7Ci0gICAg
ICAgICAgICBmb3IgKGNvbnN0IEF0dHJpYnV0ZSYgYXR0cmlidXRlIDogbGlua0VsZW1lbnQuYXR0
cmlidXRlc0l0ZXJhdG9yKCkpCisgICAgICAgICAgICBhdHRyaWJ1dGVzLnJlc2VydmVJbml0aWFs
Q2FwYWNpdHkobGlua0VsZW1lbnQuYXR0cmlidXRlQ291bnQoKSk7CisgICAgICAgICAgICBmb3Ig
KGF1dG8mIGF0dHJpYnV0ZSA6IGxpbmtFbGVtZW50LmF0dHJpYnV0ZXNJdGVyYXRvcigpKQogICAg
ICAgICAgICAgICAgIGF0dHJpYnV0ZXMudW5jaGVja2VkQXBwZW5kKHsgYXR0cmlidXRlLmxvY2Fs
TmFtZSgpLCBhdHRyaWJ1dGUudmFsdWUoKSB9KTsKICAgICAgICAgfQogCmRpZmYgLS1naXQgYS9T
b3VyY2UvV2ViQ29yZS9odG1sL1VSTFNlYXJjaFBhcmFtcy5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9o
dG1sL1VSTFNlYXJjaFBhcmFtcy5jcHAKaW5kZXggZDRmYmMxZjA2YWJlYWVjMTEyZGFiZGJjMmQ4
NTI5MTUyNDgxN2NkNC4uN2U1NjQyN2E4ZTAyMWI3Zjk1NTViYmM0MGU5ZWRjYmVmNmU3ZWI4MyAx
MDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvaHRtbC9VUkxTZWFyY2hQYXJhbXMuY3BwCisrKyBi
L1NvdXJjZS9XZWJDb3JlL2h0bWwvVVJMU2VhcmNoUGFyYW1zLmNwcApAQCAtMTIyLDYgKzEyMiw3
IEBAIFZlY3RvcjxTdHJpbmc+IFVSTFNlYXJjaFBhcmFtczo6Z2V0QWxsKGNvbnN0IFN0cmluZyYg
bmFtZSkgY29uc3QKICAgICAgICAgaWYgKHBhaXIua2V5ID09IG5hbWUpCiAgICAgICAgICAgICB2
YWx1ZXMudW5jaGVja2VkQXBwZW5kKHBhaXIudmFsdWUpOwogICAgIH0KKyAgICB2YWx1ZXMuc2hy
aW5rVG9GaXQoKTsKICAgICByZXR1cm4gdmFsdWVzOwogfQogCmRpZmYgLS1naXQgYS9Tb3VyY2Uv
V2ViQ29yZS9sYXlvdXQvZm9ybWF0dGluZ0NvbnRleHRzL2lubGluZS9JbmxpbmVMaW5lQnVpbGRl
ci5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9sYXlvdXQvZm9ybWF0dGluZ0NvbnRleHRzL2lubGluZS9J
bmxpbmVMaW5lQnVpbGRlci5jcHAKaW5kZXggMzYzOGQ1YzlkNTNjNzE4OGM3YmQ2ZTdkNmYxOWQw
ODhhMDQ3ODU1ZS4uOGVmZmVmNDJhOTQ4MzhkMWUzMDRhYWYxODk1ZjhkYzVlMGIwNDFmZiAxMDA2
NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvbGF5b3V0L2Zvcm1hdHRpbmdDb250ZXh0cy9pbmxpbmUv
SW5saW5lTGluZUJ1aWxkZXIuY3BwCisrKyBiL1NvdXJjZS9XZWJDb3JlL2xheW91dC9mb3JtYXR0
aW5nQ29udGV4dHMvaW5saW5lL0lubGluZUxpbmVCdWlsZGVyLmNwcApAQCAtMzUwLDggKzM1MCw4
IEBAIExpbmVCdWlsZGVyOjpMaW5lQ29udGVudCBMaW5lQnVpbGRlcjo6bGF5b3V0SW5saW5lQ29u
dGVudChjb25zdCBJbmxpbmVJdGVtUmFuZ2UmCiAgICAgICAgICAgICAgICAgY29udGludWU7CiAg
ICAgICAgICAgICB9CiAKLSAgICAgICAgICAgIHJ1bkxldmVscy5hcHBlbmQobGluZVJ1bnNbaV0u
YmlkaUxldmVsKCkpOwotICAgICAgICAgICAgcnVuSW5kZXhPZmZzZXRNYXAuYXBwZW5kKGFjY3Vt
dWxhdGVkT2Zmc2V0KTsKKyAgICAgICAgICAgIHJ1bkxldmVscy51bmNoZWNrZWRBcHBlbmQobGlu
ZVJ1bnNbaV0uYmlkaUxldmVsKCkpOworICAgICAgICAgICAgcnVuSW5kZXhPZmZzZXRNYXAudW5j
aGVja2VkQXBwZW5kKGFjY3VtdWxhdGVkT2Zmc2V0KTsKICAgICAgICAgfQogCiAgICAgICAgIFZl
Y3RvcjxpbnQzMl90PiB2aXN1YWxPcmRlckxpc3QocnVuTGV2ZWxzLnNpemUoKSk7CmRpZmYgLS1n
aXQgYS9Tb3VyY2UvV2ViQ29yZS9sb2FkZXIvRG9jdW1lbnRMb2FkZXIuY3BwIGIvU291cmNlL1dl
YkNvcmUvbG9hZGVyL0RvY3VtZW50TG9hZGVyLmNwcAppbmRleCAzNTliNjM4NTE4Njg0MjNjMzdh
MTAwNjM1MDFhNGRmMDZkOWFkYmFhLi5lYzUwZGU5MGRkZWQwNzQ2MDRkZDE4N2FlOWRlNjExMjZh
NmFkMTI0IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9sb2FkZXIvRG9jdW1lbnRMb2FkZXIu
Y3BwCisrKyBiL1NvdXJjZS9XZWJDb3JlL2xvYWRlci9Eb2N1bWVudExvYWRlci5jcHAKQEAgLTIy
ODIsMTQgKzIyODIsMTEgQEAgdm9pZCBEb2N1bWVudExvYWRlcjo6c3RhcnRJY29uTG9hZGluZygp
CiAgICAgaWYgKCFtX2xpbmtJY29ucy5zaXplKCkpCiAgICAgICAgIHJldHVybjsKIAotICAgIFZl
Y3RvcjxzdGQ6OnBhaXI8V2ViQ29yZTo6TGlua0ljb24mLCB1aW50NjRfdD4+IGljb25EZWNpc2lv
bnM7Ci0gICAgaWNvbkRlY2lzaW9ucy5yZXNlcnZlSW5pdGlhbENhcGFjaXR5KG1fbGlua0ljb25z
LnNpemUoKSk7Ci0gICAgZm9yIChhdXRvJiBpY29uIDogbV9saW5rSWNvbnMpIHsKKyAgICBhdXRv
IGljb25EZWNpc2lvbnMgPSBXVEY6Om1hcChtX2xpbmtJY29ucywgWyZdKGF1dG8mIGljb24pIC0+
IHN0ZDo6cGFpcjxXZWJDb3JlOjpMaW5rSWNvbiYsIHVpbnQ2NF90PiB7CiAgICAgICAgIGF1dG8g
cmVzdWx0ID0gbV9pY29uc1BlbmRpbmdMb2FkRGVjaXNpb24uYWRkKG5leHRJY29uQ2FsbGJhY2tJ
RCsrLCBpY29uKTsKLSAgICAgICAgaWNvbkRlY2lzaW9ucy51bmNoZWNrZWRBcHBlbmQoeyBpY29u
LCByZXN1bHQuaXRlcmF0b3ItPmtleSB9KTsKLSAgICB9Ci0KLSAgICBtX2ZyYW1lLT5sb2FkZXIo
KS5jbGllbnQoKS5nZXRMb2FkRGVjaXNpb25Gb3JJY29ucyhpY29uRGVjaXNpb25zKTsKKyAgICAg
ICAgcmV0dXJuIHsgaWNvbiwgcmVzdWx0Lml0ZXJhdG9yLT5rZXkgfTsKKyAgICB9KTsKKyAgICBt
X2ZyYW1lLT5sb2FkZXIoKS5jbGllbnQoKS5nZXRMb2FkRGVjaXNpb25Gb3JJY29ucyhXVEZNb3Zl
KGljb25EZWNpc2lvbnMpKTsKIH0KIAogdm9pZCBEb2N1bWVudExvYWRlcjo6ZGlkR2V0TG9hZERl
Y2lzaW9uRm9ySWNvbihib29sIGRlY2lzaW9uLCB1aW50NjRfdCBsb2FkSWRlbnRpZmllciwgQ29t
cGxldGlvbkhhbmRsZXI8dm9pZChGcmFnbWVudGVkU2hhcmVkQnVmZmVyKik+JiYgY29tcGxldGlv
bkhhbmRsZXIpCkBAIC0yNDQ5LDYgKzI0NDYsNyBAQCB2b2lkIERvY3VtZW50TG9hZGVyOjpzZXRB
Y3RpdmVDb250ZW50UnVsZUxpc3RBY3Rpb25QYXR0ZXJucyhjb25zdCBIYXNoTWFwPFN0cmluZwog
ICAgICAgICAgICAgaWYgKHBhcnNlZFBhdHRlcm4uaXNWYWxpZCgpKQogICAgICAgICAgICAgICAg
IHBhdHRlcm5WZWN0b3IudW5jaGVja2VkQXBwZW5kKFdURk1vdmUocGFyc2VkUGF0dGVybikpOwog
ICAgICAgICB9CisgICAgICAgIHBhdHRlcm5WZWN0b3Iuc2hyaW5rVG9GaXQoKTsKICAgICAgICAg
cGFyc2VkUGF0dGVybk1hcC5zZXQocGFpci5rZXksIFdURk1vdmUocGF0dGVyblZlY3RvcikpOwog
ICAgIH0KIApkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvbG9hZGVyL1RleHRUcmFja0xvYWRl
ci5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9sb2FkZXIvVGV4dFRyYWNrTG9hZGVyLmNwcAppbmRleCA4
Y2MzYzU2OGM0Mzc5NmFjNjFiMzA5NzU0N2E4OWVmODEyZDk4ZDRkLi44Yjk4NTE5MGQ3MmMyY2Fl
YWZiNWQyYTI0OTJjZGQyNDgyZjRmMThkIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9sb2Fk
ZXIvVGV4dFRyYWNrTG9hZGVyLmNwcAorKysgYi9Tb3VyY2UvV2ViQ29yZS9sb2FkZXIvVGV4dFRy
YWNrTG9hZGVyLmNwcApAQCAtMTk5LDEyICsxOTksOSBAQCBWZWN0b3I8UmVmPFZUVEN1ZT4+IFRl
eHRUcmFja0xvYWRlcjo6Z2V0TmV3Q3VlcygpCiAgICAgaWYgKCFtX2N1ZVBhcnNlcikKICAgICAg
ICAgcmV0dXJuIHsgfTsKIAotICAgIGF1dG8gY3VlcyA9IG1fY3VlUGFyc2VyLT50YWtlQ3Vlcygp
OwotICAgIFZlY3RvcjxSZWY8VlRUQ3VlPj4gcmVzdWx0OwotICAgIHJlc3VsdC5yZXNlcnZlSW5p
dGlhbENhcGFjaXR5KGN1ZXMuc2l6ZSgpKTsKLSAgICBmb3IgKGF1dG8mIGN1ZURhdGEgOiBjdWVz
KQotICAgICAgICByZXN1bHQudW5jaGVja2VkQXBwZW5kKFZUVEN1ZTo6Y3JlYXRlKG1fZG9jdW1l
bnQsIGN1ZURhdGEpKTsKLSAgICByZXR1cm4gcmVzdWx0OworICAgIHJldHVybiBtX2N1ZVBhcnNl
ci0+dGFrZUN1ZXMoKS5tYXAoW3RoaXNdKGF1dG8mIGN1ZURhdGEpIHsKKyAgICAgICAgcmV0dXJu
IFZUVEN1ZTo6Y3JlYXRlKG1fZG9jdW1lbnQsIGN1ZURhdGEpOworICAgIH0pOwogfQogCiBWZWN0
b3I8UmVmPFZUVFJlZ2lvbj4+IFRleHRUcmFja0xvYWRlcjo6Z2V0TmV3UmVnaW9ucygpCmRpZmYg
LS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9sb2FkZXIvYXJjaGl2ZS9jZi9MZWdhY3lXZWJBcmNoaXZl
LmNwcCBiL1NvdXJjZS9XZWJDb3JlL2xvYWRlci9hcmNoaXZlL2NmL0xlZ2FjeVdlYkFyY2hpdmUu
Y3BwCmluZGV4IDdmNGJhZDZmY2MzYTljOTdhNmE1MTdhYjliMjlkMDgwY2E5ZGE3MWIuLmNkOTQx
Y2YwNTE4MGRmOGMzNzJlOTkzZGFjM2IxOTFlYjVmMzgxYjIgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9X
ZWJDb3JlL2xvYWRlci9hcmNoaXZlL2NmL0xlZ2FjeVdlYkFyY2hpdmUuY3BwCisrKyBiL1NvdXJj
ZS9XZWJDb3JlL2xvYWRlci9hcmNoaXZlL2NmL0xlZ2FjeVdlYkFyY2hpdmUuY3BwCkBAIC02MTAs
MTEgKzYxMCw3IEBAIFJlZlB0cjxMZWdhY3lXZWJBcmNoaXZlPiBMZWdhY3lXZWJBcmNoaXZlOjpj
cmVhdGVGcm9tU2VsZWN0aW9uKEZyYW1lKiBmcmFtZSkKICAgICBTdHJpbmcgaWZyYW1lTWFya3Vw
ID0gIjxpZnJhbWUgZnJhbWVib3JkZXI9XCJub1wiIG1hcmdpbndpZHRoPVwiMFwiIG1hcmdpbmhl
aWdodD1cIjBcIiB3aWR0aD1cIjk4JSVcIiBoZWlnaHQ9XCI5OCUlXCIgc3JjPVwiIiArIGZyYW1l
LT5sb2FkZXIoKS5kb2N1bWVudExvYWRlcigpLT5yZXNwb25zZSgpLnVybCgpLnN0cmluZygpICsg
IlwiPjwvaWZyYW1lPiI7CiAgICAgYXV0byBpZnJhbWVSZXNvdXJjZSA9IEFyY2hpdmVSZXNvdXJj
ZTo6Y3JlYXRlKHV0ZjhCdWZmZXIoaWZyYW1lTWFya3VwKSwgYWJvdXRCbGFua1VSTCgpLCAidGV4
dC9odG1sIiwgIlVURi04IiwgU3RyaW5nKCkpOwogCi0gICAgVmVjdG9yPFJlZjxMZWdhY3lXZWJB
cmNoaXZlPj4gc3ViZnJhbWVBcmNoaXZlczsKLSAgICBzdWJmcmFtZUFyY2hpdmVzLnJlc2VydmVJ
bml0aWFsQ2FwYWNpdHkoMSk7Ci0gICAgc3ViZnJhbWVBcmNoaXZlcy51bmNoZWNrZWRBcHBlbmQo
YXJjaGl2ZS5yZWxlYXNlTm9uTnVsbCgpKTsKLQotICAgIHJldHVybiBjcmVhdGUoaWZyYW1lUmVz
b3VyY2UucmVsZWFzZU5vbk51bGwoKSwgeyB9LCBXVEZNb3ZlKHN1YmZyYW1lQXJjaGl2ZXMpKTsK
KyAgICByZXR1cm4gY3JlYXRlKGlmcmFtZVJlc291cmNlLnJlbGVhc2VOb25OdWxsKCksIHsgfSwg
VmVjdG9yIHsgYXJjaGl2ZS5yZWxlYXNlTm9uTnVsbCgpIH0pOwogfQogCiB9CmRpZmYgLS1naXQg
YS9Tb3VyY2UvV2ViQ29yZS9wYWdlL0NhcHRpb25Vc2VyUHJlZmVyZW5jZXNNZWRpYUFGLmNwcCBi
L1NvdXJjZS9XZWJDb3JlL3BhZ2UvQ2FwdGlvblVzZXJQcmVmZXJlbmNlc01lZGlhQUYuY3BwCmlu
ZGV4IDIxNWYwNDA3ZGRiZTJiNjI4YTM1Zjg3M2NmNzI4ODhjNzkyMjVhNDkuLjBlZmZhNjNmM2Nm
NGNlZjc3Y2ExMDM3ZTkyOWM2ZDUzNjM1MTNjMDcgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3Jl
L3BhZ2UvQ2FwdGlvblVzZXJQcmVmZXJlbmNlc01lZGlhQUYuY3BwCisrKyBiL1NvdXJjZS9XZWJD
b3JlL3BhZ2UvQ2FwdGlvblVzZXJQcmVmZXJlbmNlc01lZGlhQUYuY3BwCkBAIC02MTYsOSArNjE2
LDkgQEAgVmVjdG9yPFN0cmluZz4gQ2FwdGlvblVzZXJQcmVmZXJlbmNlc01lZGlhQUY6OnByZWZl
cnJlZEF1ZGlvQ2hhcmFjdGVyaXN0aWNzKCkgY28KICAgICAgICAgcmV0dXJuIENhcHRpb25Vc2Vy
UHJlZmVyZW5jZXM6OnByZWZlcnJlZEF1ZGlvQ2hhcmFjdGVyaXN0aWNzKCk7CiAKICAgICBWZWN0
b3I8U3RyaW5nPiB1c2VyUHJlZmVycmVkQXVkaW9DaGFyYWN0ZXJpc3RpY3M7Ci0gICAgdXNlclBy
ZWZlcnJlZEF1ZGlvQ2hhcmFjdGVyaXN0aWNzLnJlc2VydmVDYXBhY2l0eShjaGFyYWN0ZXJpc3Rp
Y0NvdW50KTsKKyAgICB1c2VyUHJlZmVycmVkQXVkaW9DaGFyYWN0ZXJpc3RpY3MucmVzZXJ2ZUlu
aXRpYWxDYXBhY2l0eShjaGFyYWN0ZXJpc3RpY0NvdW50KTsKICAgICBmb3IgKENGSW5kZXggaSA9
IDA7IGkgPCBjaGFyYWN0ZXJpc3RpY0NvdW50OyBpKyspCi0gICAgICAgIHVzZXJQcmVmZXJyZWRB
dWRpb0NoYXJhY3RlcmlzdGljcy5hcHBlbmQoc3RhdGljX2Nhc3Q8Q0ZTdHJpbmdSZWY+KENGQXJy
YXlHZXRWYWx1ZUF0SW5kZXgoY2hhcmFjdGVyaXN0aWNzLmdldCgpLCBpKSkpOworICAgICAgICB1
c2VyUHJlZmVycmVkQXVkaW9DaGFyYWN0ZXJpc3RpY3MudW5jaGVja2VkQXBwZW5kKHN0YXRpY19j
YXN0PENGU3RyaW5nUmVmPihDRkFycmF5R2V0VmFsdWVBdEluZGV4KGNoYXJhY3RlcmlzdGljcy5n
ZXQoKSwgaSkpKTsKIAogICAgIHJldHVybiB1c2VyUHJlZmVycmVkQXVkaW9DaGFyYWN0ZXJpc3Rp
Y3M7CiB9CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9wYWdlL0RPTVdpbmRvdy5jcHAgYi9T
b3VyY2UvV2ViQ29yZS9wYWdlL0RPTVdpbmRvdy5jcHAKaW5kZXggMGZhNDE0ODI4NGUwNzVmNTFh
YmIwYjNmNTU0ZTExMjZiNzkzYTUyNy4uMjI0YTdiN2IyMWY1MjVmZTE4MTZkNDRhYzE1MGFhYWE2
Mjc2OTc4OCAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvcGFnZS9ET01XaW5kb3cuY3BwCisr
KyBiL1NvdXJjZS9XZWJDb3JlL3BhZ2UvRE9NV2luZG93LmNwcApAQCAtMjQzLDEwICsyNDMsOSBA
QCBib29sIERPTVdpbmRvdzo6ZGlzcGF0Y2hBbGxQZW5kaW5nQmVmb3JlVW5sb2FkRXZlbnRzKCkK
ICAgICBpZiAoYWxyZWFkeURpc3BhdGNoZWQpCiAgICAgICAgIHJldHVybiB0cnVlOwogCi0gICAg
VmVjdG9yPFJlZjxET01XaW5kb3c+PiB3aW5kb3dzOwotICAgIHdpbmRvd3MucmVzZXJ2ZUluaXRp
YWxDYXBhY2l0eShzZXQuc2l6ZSgpKTsKLSAgICBmb3IgKGF1dG8mIHdpbmRvdyA6IHNldCkKLSAg
ICAgICAgd2luZG93cy51bmNoZWNrZWRBcHBlbmQoKndpbmRvdy5rZXkpOworICAgIGF1dG8gd2lu
ZG93cyA9IFdURjo6bWFwKHNldCwgW10oYXV0byYgZW50cnkpIC0+IFJlZjxET01XaW5kb3c+IHsK
KyAgICAgICAgcmV0dXJuICplbnRyeS5rZXk7CisgICAgfSk7CiAKICAgICBmb3IgKGF1dG8mIHdp
bmRvdyA6IHdpbmRvd3MpIHsKICAgICAgICAgaWYgKCFzZXQuY29udGFpbnMod2luZG93LnB0cigp
KSkKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3BhZ2UvSW50ZXJzZWN0aW9uT2JzZXJ2ZXIu
Y3BwIGIvU291cmNlL1dlYkNvcmUvcGFnZS9JbnRlcnNlY3Rpb25PYnNlcnZlci5jcHAKaW5kZXgg
NWEyNzQxN2M2ODBhMWYxYmNiODI3OWM3MGE5ODU5NGQxYzQ0MjA0ZC4uZGIwYzNmNGI2YTFiZDQ1
NDNlZjNhMWY4MzQwM2RmY2JmZTk5Mzg2MSAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvcGFn
ZS9JbnRlcnNlY3Rpb25PYnNlcnZlci5jcHAKKysrIGIvU291cmNlL1dlYkNvcmUvcGFnZS9JbnRl
cnNlY3Rpb25PYnNlcnZlci5jcHAKQEAgLTEwMSw4ICsxMDEsNyBAQCBFeGNlcHRpb25PcjxSZWY8
SW50ZXJzZWN0aW9uT2JzZXJ2ZXI+PiBJbnRlcnNlY3Rpb25PYnNlcnZlcjo6Y3JlYXRlKERvY3Vt
ZW50JiBkbwogCiAgICAgVmVjdG9yPGRvdWJsZT4gdGhyZXNob2xkczsKICAgICBXVEY6OnN3aXRj
aE9uKGluaXQudGhyZXNob2xkLCBbJnRocmVzaG9sZHNdIChkb3VibGUgaW5pdFRocmVzaG9sZCkg
ewotICAgICAgICB0aHJlc2hvbGRzLnJlc2VydmVJbml0aWFsQ2FwYWNpdHkoMSk7Ci0gICAgICAg
IHRocmVzaG9sZHMudW5jaGVja2VkQXBwZW5kKGluaXRUaHJlc2hvbGQpOworICAgICAgICB0aHJl
c2hvbGRzLmFwcGVuZChpbml0VGhyZXNob2xkKTsKICAgICB9LCBbJnRocmVzaG9sZHNdIChWZWN0
b3I8ZG91YmxlPiYgaW5pdFRocmVzaG9sZHMpIHsKICAgICAgICAgdGhyZXNob2xkcyA9IFdURk1v
dmUoaW5pdFRocmVzaG9sZHMpOwogICAgIH0pOwpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUv
cGFnZS9QYWdlLmNwcCBiL1NvdXJjZS9XZWJDb3JlL3BhZ2UvUGFnZS5jcHAKaW5kZXggZmI1NmFl
MTkxYTYyMjdkZDZlYTQ0ZTg2N2QzNDYyNTk0MGUxMGI1My4uZmQ2Y2Q1Mjc2YjY5NGY2OTQ3Njg0
Yjc3MDlmM2M1MjNhZDAwYmZkMiAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvcGFnZS9QYWdl
LmNwcAorKysgYi9Tb3VyY2UvV2ViQ29yZS9wYWdlL1BhZ2UuY3BwCkBAIC05NjYsNyArOTY2LDcg
QEAgdWludDMyX3QgUGFnZTo6cmVwbGFjZVJhbmdlc1dpdGhUZXh0KGNvbnN0IFZlY3RvcjxTaW1w
bGVSYW5nZT4mIHJhbmdlc1RvUmVwbGFjZSwKICAgICAgICAgaWYgKCFoaWdoZXN0Um9vdCB8fCBo
aWdoZXN0Um9vdCAhPSBoaWdoZXN0RWRpdGFibGVSb290KG1ha2VEZXByZWNhdGVkTGVnYWN5UG9z
aXRpb24ocmFuZ2UuZW5kKSkgfHwgIWhpZ2hlc3RSb290LT5kb2N1bWVudCgpLmZyYW1lKCkpCiAg
ICAgICAgICAgICBjb250aW51ZTsKICAgICAgICAgYXV0byBzY29wZSA9IG1ha2VSYW5nZVNlbGVj
dGluZ05vZGVDb250ZW50cygqaGlnaGVzdFJvb3QpOwotICAgICAgICByZXBsYWNlbWVudFJhbmdl
cy5hcHBlbmQoeyBXVEZNb3ZlKGhpZ2hlc3RSb290KSwgY2hhcmFjdGVyUmFuZ2Uoc2NvcGUsIHJh
bmdlKSB9KTsKKyAgICAgICAgcmVwbGFjZW1lbnRSYW5nZXMudW5jaGVja2VkQXBwZW5kKHsgV1RG
TW92ZShoaWdoZXN0Um9vdCksIGNoYXJhY3RlclJhbmdlKHNjb3BlLCByYW5nZSkgfSk7CiAgICAg
fQogCiAgICAgcmVwbGFjZVJhbmdlcygqdGhpcywgcmVwbGFjZW1lbnRSYW5nZXMsIHJlcGxhY2Vt
ZW50VGV4dCk7CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9wYWdlL2NzcC9Db250ZW50U2Vj
dXJpdHlQb2xpY3kuY3BwIGIvU291cmNlL1dlYkNvcmUvcGFnZS9jc3AvQ29udGVudFNlY3VyaXR5
UG9saWN5LmNwcAppbmRleCBiNTI1Y2I2YmVlNzRmMzdkZjAxOWFmNTJlOGFhMjZiYzNiZmE4MWYz
Li5lYTZkMGRlYWM4OTQzODgyZWZhOGZmMzhjMDI1OTZhMzE0NWNmZDk3IDEwMDY0NAotLS0gYS9T
b3VyY2UvV2ViQ29yZS9wYWdlL2NzcC9Db250ZW50U2VjdXJpdHlQb2xpY3kuY3BwCisrKyBiL1Nv
dXJjZS9XZWJDb3JlL3BhZ2UvY3NwL0NvbnRlbnRTZWN1cml0eVBvbGljeS5jcHAKQEAgLTE2MSw5
ICsxNjEsOSBAQCBDb250ZW50U2VjdXJpdHlQb2xpY3lSZXNwb25zZUhlYWRlcnMgQ29udGVudFNl
Y3VyaXR5UG9saWN5OjpyZXNwb25zZUhlYWRlcnMoKSBjbwogewogICAgIGlmICghbV9jYWNoZWRS
ZXNwb25zZUhlYWRlcnMpIHsKICAgICAgICAgQ29udGVudFNlY3VyaXR5UG9saWN5UmVzcG9uc2VI
ZWFkZXJzIHJlc3VsdDsKLSAgICAgICAgcmVzdWx0Lm1faGVhZGVycy5yZXNlcnZlSW5pdGlhbENh
cGFjaXR5KG1fcG9saWNpZXMuc2l6ZSgpKTsKLSAgICAgICAgZm9yIChhdXRvJiBwb2xpY3kgOiBt
X3BvbGljaWVzKQotICAgICAgICAgICAgcmVzdWx0Lm1faGVhZGVycy51bmNoZWNrZWRBcHBlbmQo
eyBwb2xpY3ktPmhlYWRlcigpLCBwb2xpY3ktPmhlYWRlclR5cGUoKSB9KTsKKyAgICAgICAgcmVz
dWx0Lm1faGVhZGVycyA9IG1fcG9saWNpZXMubWFwKFtdKGF1dG8mIHBvbGljeSkgeworICAgICAg
ICAgICAgcmV0dXJuIHN0ZDo6bWFrZV9wYWlyKHBvbGljeS0+aGVhZGVyKCksIHBvbGljeS0+aGVh
ZGVyVHlwZSgpKTsKKyAgICAgICAgfSk7CiAgICAgICAgIHJlc3VsdC5tX2h0dHBTdGF0dXNDb2Rl
ID0gbV9odHRwU3RhdHVzQ29kZTsKICAgICAgICAgbV9jYWNoZWRSZXNwb25zZUhlYWRlcnMgPSBX
VEZNb3ZlKHJlc3VsdCk7CiAgICAgfQpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvcGFnZS9j
c3AvQ29udGVudFNlY3VyaXR5UG9saWN5UmVzcG9uc2VIZWFkZXJzLmNwcCBiL1NvdXJjZS9XZWJD
b3JlL3BhZ2UvY3NwL0NvbnRlbnRTZWN1cml0eVBvbGljeVJlc3BvbnNlSGVhZGVycy5jcHAKaW5k
ZXggZTcxYjZhZDMxY2E3YmYxMjlmNzI0N2ZiYmYyNjNlZDZjOGU2NTIxYS4uYTA5MzRkN2Y1MzU1
N2Y5NjVmMGI1MmRkMzY4MzhkZDZhNDY5MzlmZiAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUv
cGFnZS9jc3AvQ29udGVudFNlY3VyaXR5UG9saWN5UmVzcG9uc2VIZWFkZXJzLmNwcAorKysgYi9T
b3VyY2UvV2ViQ29yZS9wYWdlL2NzcC9Db250ZW50U2VjdXJpdHlQb2xpY3lSZXNwb25zZUhlYWRl
cnMuY3BwCkBAIC0yOCw2ICsyOCw3IEBACiAKICNpbmNsdWRlICJIVFRQSGVhZGVyTmFtZXMuaCIK
ICNpbmNsdWRlICJSZXNvdXJjZVJlc3BvbnNlLmgiCisjaW5jbHVkZSA8d3RmL0Nyb3NzVGhyZWFk
Q29waWVyLmg+CiAKIG5hbWVzcGFjZSBXZWJDb3JlIHsKIApAQCAtNDcsOSArNDgsNyBAQCBDb250
ZW50U2VjdXJpdHlQb2xpY3lSZXNwb25zZUhlYWRlcnM6OkNvbnRlbnRTZWN1cml0eVBvbGljeVJl
c3BvbnNlSGVhZGVycyhjb25zdAogQ29udGVudFNlY3VyaXR5UG9saWN5UmVzcG9uc2VIZWFkZXJz
IENvbnRlbnRTZWN1cml0eVBvbGljeVJlc3BvbnNlSGVhZGVyczo6aXNvbGF0ZWRDb3B5KCkgY29u
c3QKIHsKICAgICBDb250ZW50U2VjdXJpdHlQb2xpY3lSZXNwb25zZUhlYWRlcnMgaXNvbGF0ZWRD
b3B5OwotICAgIGlzb2xhdGVkQ29weS5tX2hlYWRlcnMucmVzZXJ2ZUluaXRpYWxDYXBhY2l0eSht
X2hlYWRlcnMuc2l6ZSgpKTsKLSAgICBmb3IgKGF1dG8mIGhlYWRlciA6IG1faGVhZGVycykKLSAg
ICAgICAgaXNvbGF0ZWRDb3B5Lm1faGVhZGVycy51bmNoZWNrZWRBcHBlbmQoeyBoZWFkZXIuZmly
c3QuaXNvbGF0ZWRDb3B5KCksIGhlYWRlci5zZWNvbmQgfSk7CisgICAgaXNvbGF0ZWRDb3B5Lm1f
aGVhZGVycyA9IGNyb3NzVGhyZWFkQ29weShtX2hlYWRlcnMpOwogICAgIGlzb2xhdGVkQ29weS5t
X2h0dHBTdGF0dXNDb2RlID0gbV9odHRwU3RhdHVzQ29kZTsKICAgICByZXR1cm4gaXNvbGF0ZWRD
b3B5OwogfQpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvcGFnZS9tYWMvSW1hZ2VPdmVybGF5
Q29udHJvbGxlck1hYy5tbSBiL1NvdXJjZS9XZWJDb3JlL3BhZ2UvbWFjL0ltYWdlT3ZlcmxheUNv
bnRyb2xsZXJNYWMubW0KaW5kZXggYWVkNThiOTA2MGY5MjQzYzQ3NzlhMDQ4ZjUxNWY2YmFkZDE5
NDUwOC4uOGRlMGVmY2MzMGZlOTQwYTNhYWJkNjkzMWI0NDdmZjFmMmE4MzcwNSAxMDA2NDQKLS0t
IGEvU291cmNlL1dlYkNvcmUvcGFnZS9tYWMvSW1hZ2VPdmVybGF5Q29udHJvbGxlck1hYy5tbQor
KysgYi9Tb3VyY2UvV2ViQ29yZS9wYWdlL21hYy9JbWFnZU92ZXJsYXlDb250cm9sbGVyTWFjLm1t
CkBAIC05NCw3ICs5NCw3IEBAIHZvaWQgSW1hZ2VPdmVybGF5Q29udHJvbGxlcjo6dXBkYXRlRGF0
YURldGVjdG9ySGlnaGxpZ2h0cyhjb25zdCBIVE1MRWxlbWVudCYgb3ZlCiAjZWxzZQogICAgICAg
ICBhdXRvIGhpZ2hsaWdodCA9IGFkb3B0Q0YoUEFMOjpzb2Z0TGlua19EYXRhRGV0ZWN0b3JzX0RE
SGlnaGxpZ2h0Q3JlYXRlV2l0aFJlY3RzSW5WaXNpYmxlUmVjdFdpdGhTdHlsZUFuZERpcmVjdGlv
bihudWxscHRyLCAmZWxlbWVudEJvdW5kcywgMSwgbWFpbkZyYW1lVmlldy0+dmlzaWJsZUNvbnRl
bnRSZWN0KCksIHN0YXRpY19jYXN0PERESGlnaGxpZ2h0U3R5bGU+KERESGlnaGxpZ2h0U3R5bGVC
dWJibGVTdGFuZGFyZCkgfCBzdGF0aWNfY2FzdDxEREhpZ2hsaWdodFN0eWxlPihEREhpZ2hsaWdo
dFN0eWxlU3RhbmRhcmRJY29uQXJyb3cpLCBZRVMsIE5TV3JpdGluZ0RpcmVjdGlvbk5hdHVyYWws
IE5PLCBZRVMpKTsKICNlbmRpZgotICAgICAgICBtX2RhdGFEZXRlY3RvckNvbnRhaW5lcnNBbmRI
aWdobGlnaHRzLmFwcGVuZCh7IGVsZW1lbnQsIERhdGFEZXRlY3RvckhpZ2hsaWdodDo6Y3JlYXRl
Rm9ySW1hZ2VPdmVybGF5KCptX3BhZ2UsICp0aGlzLCBXVEZNb3ZlKGhpZ2hsaWdodCksICptYWtl
UmFuZ2VTZWxlY3RpbmdOb2RlKGVsZW1lbnQuZ2V0KCkpKSB9KTsKKyAgICAgICAgbV9kYXRhRGV0
ZWN0b3JDb250YWluZXJzQW5kSGlnaGxpZ2h0cy51bmNoZWNrZWRBcHBlbmQoeyBlbGVtZW50LCBE
YXRhRGV0ZWN0b3JIaWdobGlnaHQ6OmNyZWF0ZUZvckltYWdlT3ZlcmxheSgqbV9wYWdlLCAqdGhp
cywgV1RGTW92ZShoaWdobGlnaHQpLCAqbWFrZVJhbmdlU2VsZWN0aW5nTm9kZShlbGVtZW50Lmdl
dCgpKSkgfSk7CiAgICAgfQogfQogCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9wYWdlL21h
Yy9TZXJ2aWNlc092ZXJsYXlDb250cm9sbGVyLm1tIGIvU291cmNlL1dlYkNvcmUvcGFnZS9tYWMv
U2VydmljZXNPdmVybGF5Q29udHJvbGxlci5tbQppbmRleCA2NTcxZjkwOGU3OTMyN2QyYTJiN2Fm
Y2QyOTc0MzFkYzI3Njk1MmQ5Li40MjRlMTVmMWRjYmU5YjRhYTIyOGFkMmU4ZWE5N2Y5ODEzMTI3
ZjFiIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9wYWdlL21hYy9TZXJ2aWNlc092ZXJsYXlD
b250cm9sbGVyLm1tCisrKyBiL1NvdXJjZS9XZWJDb3JlL3BhZ2UvbWFjL1NlcnZpY2VzT3Zlcmxh
eUNvbnRyb2xsZXIubW0KQEAgLTM5Miw5ICszOTIsNiBAQCB2b2lkIFNlcnZpY2VzT3ZlcmxheUNv
bnRyb2xsZXI6OmJ1aWxkU2VsZWN0aW9uSGlnaGxpZ2h0KCkKIAogICAgIEhhc2hTZXQ8UmVmUHRy
PERhdGFEZXRlY3RvckhpZ2hsaWdodD4+IG5ld1BvdGVudGlhbEhpZ2hsaWdodHM7CiAKLSAgICBW
ZWN0b3I8Q0dSZWN0PiBjZ1JlY3RzOwotICAgIGNnUmVjdHMucmVzZXJ2ZUNhcGFjaXR5KG1fY3Vy
cmVudFNlbGVjdGlvblJlY3RzLnNpemUoKSk7Ci0KICAgICBpZiAoYXV0byBzZWxlY3Rpb25SYW5n
ZSA9IG1fcGFnZS5zZWxlY3Rpb24oKS5maXJzdFJhbmdlKCkpIHsKICAgICAgICAgRnJhbWVWaWV3
KiBtYWluRnJhbWVWaWV3ID0gbWFpbkZyYW1lKCkudmlldygpOwogICAgICAgICBpZiAoIW1haW5G
cmFtZVZpZXcpCkBAIC00MDQsMTAgKzQwMSwxMyBAQCB2b2lkIFNlcnZpY2VzT3ZlcmxheUNvbnRy
b2xsZXI6OmJ1aWxkU2VsZWN0aW9uSGlnaGxpZ2h0KCkKICAgICAgICAgaWYgKCF2aWV3Rm9yUmFu
Z2UpCiAgICAgICAgICAgICByZXR1cm47CiAKKyAgICAgICAgVmVjdG9yPENHUmVjdD4gY2dSZWN0
czsKKyAgICAgICAgY2dSZWN0cy5yZXNlcnZlSW5pdGlhbENhcGFjaXR5KG1fY3VycmVudFNlbGVj
dGlvblJlY3RzLnNpemUoKSk7CisKICAgICAgICAgZm9yIChhdXRvJiByZWN0IDogbV9jdXJyZW50
U2VsZWN0aW9uUmVjdHMpIHsKICAgICAgICAgICAgIEludFJlY3QgY3VycmVudFJlY3QgPSBzbmFw
cGVkSW50UmVjdChyZWN0KTsKICAgICAgICAgICAgIGN1cnJlbnRSZWN0LnNldExvY2F0aW9uKG1h
aW5GcmFtZVZpZXctPndpbmRvd1RvQ29udGVudHModmlld0ZvclJhbmdlLT5jb250ZW50c1RvV2lu
ZG93KGN1cnJlbnRSZWN0LmxvY2F0aW9uKCkpKSk7Ci0gICAgICAgICAgICBjZ1JlY3RzLmFwcGVu
ZChjdXJyZW50UmVjdCk7CisgICAgICAgICAgICBjZ1JlY3RzLnVuY2hlY2tlZEFwcGVuZChjdXJy
ZW50UmVjdCk7CiAgICAgICAgIH0KIAogICAgICAgICBpZiAoIWNnUmVjdHMuaXNFbXB0eSgpKSB7
CkBAIC02MzksMTMgKzYzOSwxMSBAQCB2b2lkIFNlcnZpY2VzT3ZlcmxheUNvbnRyb2xsZXI6Omhh
bmRsZUNsaWNrKGNvbnN0IEludFBvaW50JiBjbGlja1BvaW50LCBEYXRhRGV0ZQogICAgIEludFBv
aW50IHdpbmRvd1BvaW50ID0gZnJhbWVWaWV3LT5jb250ZW50c1RvV2luZG93KGNsaWNrUG9pbnQp
OwogCiAgICAgaWYgKGhpZ2hsaWdodC50eXBlKCkgPT0gRGF0YURldGVjdG9ySGlnaGxpZ2h0OjpU
eXBlOjpTZWxlY3Rpb24pIHsKLSAgICAgICAgYXV0byB0ZWxlcGhvbmVOdW1iZXJSYW5nZXMgPSB0
ZWxlcGhvbmVOdW1iZXJSYW5nZXNGb3JGb2N1c2VkRnJhbWUoKTsKLSAgICAgICAgVmVjdG9yPFN0
cmluZz4gc2VsZWN0ZWRUZWxlcGhvbmVOdW1iZXJzOwotICAgICAgICBzZWxlY3RlZFRlbGVwaG9u
ZU51bWJlcnMucmVzZXJ2ZUNhcGFjaXR5KHRlbGVwaG9uZU51bWJlclJhbmdlcy5zaXplKCkpOwot
ICAgICAgICBmb3IgKGF1dG8mIHJhbmdlIDogdGVsZXBob25lTnVtYmVyUmFuZ2VzKQotICAgICAg
ICAgICAgc2VsZWN0ZWRUZWxlcGhvbmVOdW1iZXJzLmFwcGVuZChwbGFpblRleHQocmFuZ2UpKTsK
KyAgICAgICAgYXV0byBzZWxlY3RlZFRlbGVwaG9uZU51bWJlcnMgPSB0ZWxlcGhvbmVOdW1iZXJS
YW5nZXNGb3JGb2N1c2VkRnJhbWUoKS5tYXAoW10oYXV0byYgcmFuZ2UpIHsKKyAgICAgICAgICAg
IHJldHVybiBwbGFpblRleHQocmFuZ2UpOworICAgICAgICB9KTsKIAotICAgICAgICBtX3BhZ2Uu
Y2hyb21lKCkuY2xpZW50KCkuaGFuZGxlU2VsZWN0aW9uU2VydmljZUNsaWNrKENoZWNrZWRSZWYo
bV9wYWdlLmZvY3VzQ29udHJvbGxlcigpKS0+Zm9jdXNlZE9yTWFpbkZyYW1lKCkuc2VsZWN0aW9u
KCksIHNlbGVjdGVkVGVsZXBob25lTnVtYmVycywgd2luZG93UG9pbnQpOworICAgICAgICBtX3Bh
Z2UuY2hyb21lKCkuY2xpZW50KCkuaGFuZGxlU2VsZWN0aW9uU2VydmljZUNsaWNrKENoZWNrZWRS
ZWYobV9wYWdlLmZvY3VzQ29udHJvbGxlcigpKS0+Zm9jdXNlZE9yTWFpbkZyYW1lKCkuc2VsZWN0
aW9uKCksIFdURk1vdmUoc2VsZWN0ZWRUZWxlcGhvbmVOdW1iZXJzKSwgd2luZG93UG9pbnQpOwog
ICAgIH0gZWxzZSBpZiAoaGlnaGxpZ2h0LnR5cGUoKSA9PSBEYXRhRGV0ZWN0b3JIaWdobGlnaHQ6
OlR5cGU6OlRlbGVwaG9uZU51bWJlcikKICAgICAgICAgbV9wYWdlLmNocm9tZSgpLmNsaWVudCgp
LmhhbmRsZVRlbGVwaG9uZU51bWJlckNsaWNrKHBsYWluVGV4dChoaWdobGlnaHQucmFuZ2UoKSks
IHdpbmRvd1BvaW50LCBmcmFtZVZpZXctPmNvbnRlbnRzVG9XaW5kb3coQ2hlY2tlZFJlZihtX3Bh
Z2UuZm9jdXNDb250cm9sbGVyKCkpLT5mb2N1c2VkT3JNYWluRnJhbWUoKS5lZGl0b3IoKS5maXJz
dFJlY3RGb3JSYW5nZShoaWdobGlnaHQucmFuZ2UoKSkpKTsKIH0KZGlmZiAtLWdpdCBhL1NvdXJj
ZS9XZWJDb3JlL3BhZ2Uvc2Nyb2xsaW5nL0FzeW5jU2Nyb2xsaW5nQ29vcmRpbmF0b3IuY3BwIGIv
U291cmNlL1dlYkNvcmUvcGFnZS9zY3JvbGxpbmcvQXN5bmNTY3JvbGxpbmdDb29yZGluYXRvci5j
cHAKaW5kZXggODJmNzU3YTI3YjNiMDcyNDAwNmQ3MmE1MzgyZTM0ZmE0Y2E5NDY4Yy4uNTJkMzM1
MzRlN2U0NDY3Y2ZmOWEwZWYwNjczYjc0MjBjMjBlNzlhNCAxMDA2NDQKLS0tIGEvU291cmNlL1dl
YkNvcmUvcGFnZS9zY3JvbGxpbmcvQXN5bmNTY3JvbGxpbmdDb29yZGluYXRvci5jcHAKKysrIGIv
U291cmNlL1dlYkNvcmUvcGFnZS9zY3JvbGxpbmcvQXN5bmNTY3JvbGxpbmdDb29yZGluYXRvci5j
cHAKQEAgLTY3NiwxMiArNjc2LDkgQEAgVmVjdG9yPFNjcm9sbGluZ05vZGVJRD4gQXN5bmNTY3Jv
bGxpbmdDb29yZGluYXRvcjo6Y2hpbGRyZW5PZk5vZGUoU2Nyb2xsaW5nTm9kZUkKICAgICBpZiAo
IWNoaWxkcmVuIHx8IGNoaWxkcmVuLT5pc0VtcHR5KCkpCiAgICAgICAgIHJldHVybiB7IH07CiAg
ICAgCi0gICAgVmVjdG9yPFNjcm9sbGluZ05vZGVJRD4gY2hpbGROb2RlSURzOwotICAgIGNoaWxk
Tm9kZUlEcy5yZXNlcnZlSW5pdGlhbENhcGFjaXR5KGNoaWxkcmVuLT5zaXplKCkpOwotICAgIGZv
ciAoY29uc3QgYXV0byYgY2hpbGROb2RlIDogKmNoaWxkcmVuKQotICAgICAgICBjaGlsZE5vZGVJ
RHMudW5jaGVja2VkQXBwZW5kKGNoaWxkTm9kZS0+c2Nyb2xsaW5nTm9kZUlEKCkpOwotCi0gICAg
cmV0dXJuIGNoaWxkTm9kZUlEczsKKyAgICByZXR1cm4gY2hpbGRyZW4tPm1hcChbXShhdXRvJiBj
aGlsZCkgeworICAgICAgICByZXR1cm4gY2hpbGQtPnNjcm9sbGluZ05vZGVJRCgpOworICAgIH0p
OwogfQogCiB2b2lkIEFzeW5jU2Nyb2xsaW5nQ29vcmRpbmF0b3I6OnJlY29uY2lsZVZpZXdwb3J0
Q29uc3RyYWluZWRMYXllclBvc2l0aW9ucyhTY3JvbGxpbmdOb2RlSUQgc2Nyb2xsaW5nTm9kZUlE
LCBjb25zdCBMYXlvdXRSZWN0JiB2aWV3cG9ydFJlY3QsIFNjcm9sbGluZ0xheWVyUG9zaXRpb25B
Y3Rpb24gYWN0aW9uKQpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvcGFnZS9zY3JvbGxpbmcv
U2Nyb2xsU25hcE9mZnNldHNJbmZvLmNwcCBiL1NvdXJjZS9XZWJDb3JlL3BhZ2Uvc2Nyb2xsaW5n
L1Njcm9sbFNuYXBPZmZzZXRzSW5mby5jcHAKaW5kZXggNjMxMTEzMzcyZTNjN2ZiMDVkMTM0MWFm
YTQ0YjYzOGIzZTI1MjZkOS4uMTg0NTVlOGQwNDJhYjhmNmJhNzc2N2JhYmQ4Mjk4NzVlZTQ0OTQ5
ZiAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvcGFnZS9zY3JvbGxpbmcvU2Nyb2xsU25hcE9m
ZnNldHNJbmZvLmNwcAorKysgYi9Tb3VyY2UvV2ViQ29yZS9wYWdlL3Njcm9sbGluZy9TY3JvbGxT
bmFwT2Zmc2V0c0luZm8uY3BwCkBAIC00MjAsMjUgKzQyMCwxOSBAQCBzdGF0aWMgU2Nyb2xsU25h
cE9mZnNldHNJbmZvPE91dHB1dFR5cGUsIE91dHB1dFJlY3RUeXBlPiBjb252ZXJ0T2Zmc2V0SW5m
byhjb25zdAogewogICAgIGF1dG8gY29udmVydE9mZnNldHMgPSBbc2NhbGVGYWN0b3JdKGNvbnN0
IFZlY3RvcjxTbmFwT2Zmc2V0PElucHV0VHlwZT4+JiBpbnB1dCkKICAgICB7Ci0gICAgICAgIFZl
Y3RvcjxTbmFwT2Zmc2V0PE91dHB1dFR5cGU+PiBvdXRwdXQ7Ci0gICAgICAgIG91dHB1dC5yZXNl
cnZlSW5pdGlhbENhcGFjaXR5KGlucHV0LnNpemUoKSk7Ci0gICAgICAgIGZvciAoYXV0byYgb2Zm
c2V0IDogaW5wdXQpCi0gICAgICAgICAgICBvdXRwdXQudW5jaGVja2VkQXBwZW5kKHsgY29udmVy
dE9mZnNldFVuaXQob2Zmc2V0Lm9mZnNldCwgc2NhbGVGYWN0b3IpLCBvZmZzZXQuc3RvcCwgb2Zm
c2V0Lmhhc1NuYXBBcmVhTGFyZ2VyVGhhblZpZXdwb3J0LCBvZmZzZXQuc25hcEFyZWFJbmRpY2Vz
IH0pOwotICAgICAgICByZXR1cm4gb3V0cHV0OworICAgICAgICByZXR1cm4gaW5wdXQubWFwKFtz
Y2FsZUZhY3Rvcl0oYXV0byYgb2Zmc2V0KSAtPiBTbmFwT2Zmc2V0PE91dHB1dFR5cGU+IHsKKyAg
ICAgICAgICAgIHJldHVybiB7IGNvbnZlcnRPZmZzZXRVbml0KG9mZnNldC5vZmZzZXQsIHNjYWxl
RmFjdG9yKSwgb2Zmc2V0LnN0b3AsIG9mZnNldC5oYXNTbmFwQXJlYUxhcmdlclRoYW5WaWV3cG9y
dCwgb2Zmc2V0LnNuYXBBcmVhSW5kaWNlcyB9OworICAgICAgICB9KTsKICAgICB9OwogCiAgICAg
YXV0byBjb252ZXJ0UmVjdHMgPSBbc2NhbGVGYWN0b3JdKGNvbnN0IFZlY3RvcjxJbnB1dFJlY3RU
eXBlPiYgaW5wdXQpCiAgICAgewotICAgICAgICBWZWN0b3I8T3V0cHV0UmVjdFR5cGU+IG91dHB1
dDsKLSAgICAgICAgb3V0cHV0LnJlc2VydmVJbml0aWFsQ2FwYWNpdHkoaW5wdXQuc2l6ZSgpKTsK
LSAgICAgICAgZm9yIChhdXRvJiByZWN0IDogaW5wdXQpIHsKLSAgICAgICAgICAgIE91dHB1dFJl
Y3RUeXBlIG91dHB1dFJlY3QoCisgICAgICAgIHJldHVybiBpbnB1dC5tYXAoW3NjYWxlRmFjdG9y
XShhdXRvJiByZWN0KSAtPiBPdXRwdXRSZWN0VHlwZSB7CisgICAgICAgICAgICByZXR1cm4gewog
ICAgICAgICAgICAgICAgIGNvbnZlcnRPZmZzZXRVbml0KHJlY3QueCgpLCBzY2FsZUZhY3Rvciks
IGNvbnZlcnRPZmZzZXRVbml0KHJlY3QueSgpLCBzY2FsZUZhY3RvciksCi0gICAgICAgICAgICAg
ICAgY29udmVydE9mZnNldFVuaXQocmVjdC53aWR0aCgpLCBzY2FsZUZhY3RvciksIGNvbnZlcnRP
ZmZzZXRVbml0KHJlY3QuaGVpZ2h0KCksIHNjYWxlRmFjdG9yKSk7Ci0gICAgICAgICAgICBvdXRw
dXQudW5jaGVja2VkQXBwZW5kKG91dHB1dFJlY3QpOwotICAgICAgICB9Ci0KLSAgICAgICAgcmV0
dXJuIG91dHB1dDsKKyAgICAgICAgICAgICAgICBjb252ZXJ0T2Zmc2V0VW5pdChyZWN0LndpZHRo
KCksIHNjYWxlRmFjdG9yKSwgY29udmVydE9mZnNldFVuaXQocmVjdC5oZWlnaHQoKSwgc2NhbGVG
YWN0b3IpCisgICAgICAgICAgICB9OworICAgICAgICB9KTsKICAgICB9OwogCiAgICAgcmV0dXJu
IHsKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL0xlbmd0aC5jcHAgYi9Tb3Vy
Y2UvV2ViQ29yZS9wbGF0Zm9ybS9MZW5ndGguY3BwCmluZGV4IDk1NDljZmMyZWVmYjNhYjc3OTI4
OTgzMGExNzc0MmM1NzIxZGVkMWQuLmM5OTY5Y2U3OWM2OThhNGM5MDNlMGU4OTY4ZDg4MzQ0ODk5
NDIzMjQgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL0xlbmd0aC5jcHAKKysr
IGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vTGVuZ3RoLmNwcApAQCAtMjgyLDEwICsyODIsNyBA
QCBib29sIExlbmd0aDo6aXNDYWxjdWxhdGVkRXF1YWwoY29uc3QgTGVuZ3RoJiBvdGhlcikgY29u
c3QKIAogc3RhdGljIExlbmd0aCBtYWtlQ2FsY3VsYXRlZChDYWxjT3BlcmF0b3IgY2FsY09wZXJh
dG9yLCBjb25zdCBMZW5ndGgmIGEsIGNvbnN0IExlbmd0aCYgYikKIHsKLSAgICBWZWN0b3I8c3Rk
Ojp1bmlxdWVfcHRyPENhbGNFeHByZXNzaW9uTm9kZT4+IGxlbmd0aHM7Ci0gICAgbGVuZ3Rocy5y
ZXNlcnZlSW5pdGlhbENhcGFjaXR5KDIpOwotICAgIGxlbmd0aHMudW5jaGVja2VkQXBwZW5kKG1h
a2VVbmlxdWU8Q2FsY0V4cHJlc3Npb25MZW5ndGg+KGEpKTsKLSAgICBsZW5ndGhzLnVuY2hlY2tl
ZEFwcGVuZChtYWtlVW5pcXVlPENhbGNFeHByZXNzaW9uTGVuZ3RoPihiKSk7CisgICAgYXV0byBs
ZW5ndGhzID0gVmVjdG9yPHN0ZDo6dW5pcXVlX3B0cjxDYWxjRXhwcmVzc2lvbk5vZGU+Pjo6ZnJv
bShtYWtlVW5pcXVlPENhbGNFeHByZXNzaW9uTGVuZ3RoPihhKSwgbWFrZVVuaXF1ZTxDYWxjRXhw
cmVzc2lvbkxlbmd0aD4oYikpOwogICAgIGF1dG8gb3AgPSBtYWtlVW5pcXVlPENhbGNFeHByZXNz
aW9uT3BlcmF0aW9uPihXVEZNb3ZlKGxlbmd0aHMpLCBjYWxjT3BlcmF0b3IpOwogICAgIHJldHVy
biBMZW5ndGgoQ2FsY3VsYXRpb25WYWx1ZTo6Y3JlYXRlKFdURk1vdmUob3ApLCBWYWx1ZVJhbmdl
OjpBbGwpKTsKIH0KZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2FuaW1hdGlv
bi9BbmltYXRpb25MaXN0LmNwcCBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2FuaW1hdGlvbi9B
bmltYXRpb25MaXN0LmNwcAppbmRleCAwZTM2ODUzMjFjMTQ4ODExZDY1YjllZjcwOTQ2NGFjMDZm
NzFlMzA3Li42MjA0NTdjMjNiMzU3YTU4NzYwZWM5YjdiZjcwMzdkZDg3N2ViMjdlIDEwMDY0NAot
LS0gYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9hbmltYXRpb24vQW5pbWF0aW9uTGlzdC5jcHAK
KysrIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vYW5pbWF0aW9uL0FuaW1hdGlvbkxpc3QuY3Bw
CkBAIC0zNiwxNCArMzYsMTMgQEAgaWYgKGkpIHsgXAogQW5pbWF0aW9uTGlzdDo6QW5pbWF0aW9u
TGlzdCgpID0gZGVmYXVsdDsKIAogQW5pbWF0aW9uTGlzdDo6QW5pbWF0aW9uTGlzdChjb25zdCBB
bmltYXRpb25MaXN0JiBvdGhlciwgQ29weUJlaGF2aW9yIGNvcHlCZWhhdmlvcikKLSAgICA6IFJl
ZkNvdW50ZWQoKQogewotICAgIG1fYW5pbWF0aW9ucy5yZXNlcnZlSW5pdGlhbENhcGFjaXR5KG90
aGVyLnNpemUoKSk7Ci0gICAgZm9yIChhdXRvJiBhbmltYXRpb24gOiBvdGhlci5tX2FuaW1hdGlv
bnMpIHsKLSAgICAgICAgaWYgKGNvcHlCZWhhdmlvciA9PSBDb3B5QmVoYXZpb3I6OlJlZmVyZW5j
ZSkKLSAgICAgICAgICAgIG1fYW5pbWF0aW9ucy51bmNoZWNrZWRBcHBlbmQoYW5pbWF0aW9uLmdl
dCgpKTsKLSAgICAgICAgZWxzZQotICAgICAgICAgICAgbV9hbmltYXRpb25zLnVuY2hlY2tlZEFw
cGVuZChBbmltYXRpb246OmNyZWF0ZShhbmltYXRpb24uZ2V0KCkpKTsKKyAgICBpZiAoY29weUJl
aGF2aW9yID09IENvcHlCZWhhdmlvcjo6UmVmZXJlbmNlKQorICAgICAgICBtX2FuaW1hdGlvbnMg
PSBvdGhlci5tX2FuaW1hdGlvbnM7CisgICAgZWxzZSB7CisgICAgICAgIG1fYW5pbWF0aW9ucyA9
IG90aGVyLm1fYW5pbWF0aW9ucy5tYXAoW10oYXV0byYgYW5pbWF0aW9uKSB7CisgICAgICAgICAg
ICByZXR1cm4gQW5pbWF0aW9uOjpjcmVhdGUoYW5pbWF0aW9uLmdldCgpKTsKKyAgICAgICAgfSk7
CiAgICAgfQogfQogCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9jb2NvYS9Q
bGF5YmFja1Nlc3Npb25Nb2RlbE1lZGlhRWxlbWVudC5tbSBiL1NvdXJjZS9XZWJDb3JlL3BsYXRm
b3JtL2NvY29hL1BsYXliYWNrU2Vzc2lvbk1vZGVsTWVkaWFFbGVtZW50Lm1tCmluZGV4IGJmMDEz
NGQ4NzY2MDhiNjUyZWU1Mzg0MzZmYmEwZGY5YzJhY2E4YzMuLjA1ZWEyMTExZWI1ZDQ1M2NiMjhk
OGU3N2VmM2NiZjVmMzU2NzE5ODkgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3Jt
L2NvY29hL1BsYXliYWNrU2Vzc2lvbk1vZGVsTWVkaWFFbGVtZW50Lm1tCisrKyBiL1NvdXJjZS9X
ZWJDb3JlL3BsYXRmb3JtL2NvY29hL1BsYXliYWNrU2Vzc2lvbk1vZGVsTWVkaWFFbGVtZW50Lm1t
CkBAIC01MTEsMTggKzUxMSwxMyBAQCBib29sIFBsYXliYWNrU2Vzc2lvbk1vZGVsTWVkaWFFbGVt
ZW50OjpjYW5QbGF5RmFzdFJldmVyc2UoKSBjb25zdAogCiBWZWN0b3I8TWVkaWFTZWxlY3Rpb25P
cHRpb24+IFBsYXliYWNrU2Vzc2lvbk1vZGVsTWVkaWFFbGVtZW50OjphdWRpb01lZGlhU2VsZWN0
aW9uT3B0aW9ucygpIGNvbnN0CiB7Ci0gICAgVmVjdG9yPE1lZGlhU2VsZWN0aW9uT3B0aW9uPiBh
dWRpb09wdGlvbnM7Ci0KICAgICBpZiAoIW1fbWVkaWFFbGVtZW50IHx8ICFtX21lZGlhRWxlbWVu
dC0+ZG9jdW1lbnQoKS5wYWdlKCkpCi0gICAgICAgIHJldHVybiBhdWRpb09wdGlvbnM7CisgICAg
ICAgIHJldHVybiB7IH07CiAKICAgICBhdXRvJiBjYXB0aW9uUHJlZmVyZW5jZXMgPSBtX21lZGlh
RWxlbWVudC0+ZG9jdW1lbnQoKS5wYWdlKCktPmdyb3VwKCkuZW5zdXJlQ2FwdGlvblByZWZlcmVu
Y2VzKCk7Ci0KLSAgICBhdWRpb09wdGlvbnMucmVzZXJ2ZUluaXRpYWxDYXBhY2l0eShtX2F1ZGlv
VHJhY2tzRm9yTWVudS5zaXplKCkpOwotICAgIGZvciAoYXV0byYgYXVkaW9UcmFjayA6IG1fYXVk
aW9UcmFja3NGb3JNZW51KQotICAgICAgICBhdWRpb09wdGlvbnMudW5jaGVja2VkQXBwZW5kKGNh
cHRpb25QcmVmZXJlbmNlcy5tZWRpYVNlbGVjdGlvbk9wdGlvbkZvclRyYWNrKGF1ZGlvVHJhY2su
Z2V0KCkpKTsKLQotICAgIHJldHVybiBhdWRpb09wdGlvbnM7CisgICAgcmV0dXJuIG1fYXVkaW9U
cmFja3NGb3JNZW51Lm1hcChbJl0oYXV0byYgYXVkaW9UcmFjaykgeworICAgICAgICByZXR1cm4g
Y2FwdGlvblByZWZlcmVuY2VzLm1lZGlhU2VsZWN0aW9uT3B0aW9uRm9yVHJhY2soYXVkaW9UcmFj
ay5nZXQoKSk7CisgICAgfSk7CiB9CiAKIHVpbnQ2NF90IFBsYXliYWNrU2Vzc2lvbk1vZGVsTWVk
aWFFbGVtZW50OjphdWRpb01lZGlhU2VsZWN0ZWRJbmRleCgpIGNvbnN0CmRpZmYgLS1naXQgYS9T
b3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9lbmNyeXB0ZWRtZWRpYS9DRE1Qcm94eS5jcHAgYi9Tb3Vy
Y2UvV2ViQ29yZS9wbGF0Zm9ybS9lbmNyeXB0ZWRtZWRpYS9DRE1Qcm94eS5jcHAKaW5kZXggMGRk
Y2NmYTRiZDBiMzZhMWUzYzI1MjM0YzY3M2M2NzIzMmM1YjkyYS4uNjc4ZjQxYTdhZTI0MDc1NGNk
Y2VjNjJmNWMyYzU2NmVjZWQ1ZTBlZiAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvcGxhdGZv
cm0vZW5jcnlwdGVkbWVkaWEvQ0RNUHJveHkuY3BwCisrKyBiL1NvdXJjZS9XZWJDb3JlL3BsYXRm
b3JtL2VuY3J5cHRlZG1lZGlhL0NETVByb3h5LmNwcApAQCAtMjI1LDExICsyMjUsOSBAQCBjb25z
dCBSZWZQdHI8S2V5SGFuZGxlPiYgS2V5U3RvcmU6OmtleUhhbmRsZShjb25zdCBLZXlJRFR5cGUm
IGtleUlEKSBjb25zdAogCiBDRE1JbnN0YW5jZVNlc3Npb246OktleVN0YXR1c1ZlY3RvciBLZXlT
dG9yZTo6Y29udmVydFRvSlNLZXlTdGF0dXNWZWN0b3IoKSBjb25zdAogewotICAgIENETUluc3Rh
bmNlU2Vzc2lvbjo6S2V5U3RhdHVzVmVjdG9yIGtleVN0YXR1c1ZlY3RvcjsKLSAgICBrZXlTdGF0
dXNWZWN0b3IucmVzZXJ2ZUluaXRpYWxDYXBhY2l0eShudW1LZXlzKCkpOwotICAgIGZvciAoY29u
c3QgYXV0byYga2V5IDogbV9rZXlzKQotICAgICAgICBrZXlTdGF0dXNWZWN0b3IudW5jaGVja2Vk
QXBwZW5kKHN0ZDo6cGFpcjxSZWY8RnJhZ21lbnRlZFNoYXJlZEJ1ZmZlcj4sIENETUluc3RhbmNl
U2Vzc2lvbjo6S2V5U3RhdHVzPiB7IGtleS0+aWRBc1NoYXJlZEJ1ZmZlcigpLCBrZXktPnN0YXR1
cygpIH0pOwotICAgIHJldHVybiBrZXlTdGF0dXNWZWN0b3I7CisgICAgcmV0dXJuIG1fa2V5cy5t
YXAoW10oYXV0byYga2V5KSB7CisgICAgICAgIHJldHVybiBzdGQ6Om1ha2VfcGFpcihrZXktPmlk
QXNTaGFyZWRCdWZmZXIoKSwga2V5LT5zdGF0dXMoKSk7CisgICAgfSk7CiB9CiAKIHZvaWQgQ0RN
UHJveHk6OnVwZGF0ZUtleVN0b3JlKGNvbnN0IEtleVN0b3JlJiBuZXdLZXlTdG9yZSkKZGlmZiAt
LWdpdCBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL0Zsb2F0UG9seWdvbi5jcHAg
Yi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9GbG9hdFBvbHlnb24uY3BwCmluZGV4
IDhiOTIzNDE3OGVhZDNmM2NhMDYzZmY5YTFlYTQ3ZDAxYmU4NTQyNWEuLmQwNTJmYTUzY2NkZjZi
YjQxZjNmZWZiOTVmMzA1NDY2YjRkZjE5NjYgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL3Bs
YXRmb3JtL2dyYXBoaWNzL0Zsb2F0UG9seWdvbi5jcHAKKysrIGIvU291cmNlL1dlYkNvcmUvcGxh
dGZvcm0vZ3JhcGhpY3MvRmxvYXRQb2x5Z29uLmNwcApAQCAtMTQyLDExICsxNDIsOSBAQCBGbG9h
dFBvbHlnb246OkZsb2F0UG9seWdvbihWZWN0b3I8RmxvYXRQb2ludD4mJiB2ZXJ0aWNlcywgV2lu
ZFJ1bGUgZmlsbFJ1bGUpCiBWZWN0b3I8c3RkOjpyZWZlcmVuY2Vfd3JhcHBlcjxjb25zdCBGbG9h
dFBvbHlnb25FZGdlPj4gRmxvYXRQb2x5Z29uOjpvdmVybGFwcGluZ0VkZ2VzKGZsb2F0IG1pblks
IGZsb2F0IG1heFkpIGNvbnN0CiB7CiAgICAgYXV0byBvdmVybGFwcGluZ0VkZ2VJbnRlcnZhbHMg
PSBtX2VkZ2VUcmVlLmFsbE92ZXJsYXBzKHsgbWluWSwgbWF4WSB9KTsKLSAgICBWZWN0b3I8c3Rk
OjpyZWZlcmVuY2Vfd3JhcHBlcjxjb25zdCBGbG9hdFBvbHlnb25FZGdlPj4gcmVzdWx0OwotICAg
IHJlc3VsdC5yZXNlcnZlSW5pdGlhbENhcGFjaXR5KG92ZXJsYXBwaW5nRWRnZUludGVydmFscy5z
aXplKCkpOwotICAgIGZvciAoYXV0byYgaW50ZXJ2YWwgOiBvdmVybGFwcGluZ0VkZ2VJbnRlcnZh
bHMpCi0gICAgICAgIHJlc3VsdC51bmNoZWNrZWRBcHBlbmQoKmludGVydmFsLmRhdGEoKSk7Ci0g
ICAgcmV0dXJuIHJlc3VsdDsKKyAgICByZXR1cm4gb3ZlcmxhcHBpbmdFZGdlSW50ZXJ2YWxzLm1h
cChbXShhdXRvJiBpbnRlcnZhbCkgLT4gc3RkOjpyZWZlcmVuY2Vfd3JhcHBlcjxjb25zdCBGbG9h
dFBvbHlnb25FZGdlPiB7CisgICAgICAgIHJldHVybiAqaW50ZXJ2YWwuZGF0YSgpOworICAgIH0p
OwogfQogCiBzdGF0aWMgaW5saW5lIGZsb2F0IGxlZnRTaWRlKGNvbnN0IEZsb2F0UG9pbnQmIHZl
cnRleDEsIGNvbnN0IEZsb2F0UG9pbnQmIHZlcnRleDIsIGNvbnN0IEZsb2F0UG9pbnQmIHBvaW50
KQpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvRmxvYXRRdWFk
LmNwcCBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL0Zsb2F0UXVhZC5jcHAKaW5k
ZXggMTU1MWI5ZmMxOTZiYzczMDExYWQ2ODIzZmMxMjRkNjk3ZjU2NGIyYS4uNzFhMjIyODNhYjM0
Nzk5NDllNGI0N2JjY2Y2MzI2OGM4MThhN2E5MyAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUv
cGxhdGZvcm0vZ3JhcGhpY3MvRmxvYXRRdWFkLmNwcAorKysgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0
Zm9ybS9ncmFwaGljcy9GbG9hdFF1YWQuY3BwCkBAIC0yNzMsMTEgKzI3Myw5IEBAIGJvb2wgRmxv
YXRRdWFkOjppc0VtcHR5KCkgY29uc3QKIAogVmVjdG9yPEZsb2F0UmVjdD4gYm91bmRpbmdCb3hl
cyhjb25zdCBWZWN0b3I8RmxvYXRRdWFkPiYgcXVhZHMpCiB7Ci0gICAgVmVjdG9yPEZsb2F0UmVj
dD4gYm94ZXM7Ci0gICAgYm94ZXMucmVzZXJ2ZUluaXRpYWxDYXBhY2l0eShxdWFkcy5zaXplKCkp
OwotICAgIGZvciAoY29uc3QgYXV0byYgcXVhZCA6IHF1YWRzKQotICAgICAgICBib3hlcy51bmNo
ZWNrZWRBcHBlbmQocXVhZC5ib3VuZGluZ0JveCgpKTsKLSAgICByZXR1cm4gYm94ZXM7CisgICAg
cmV0dXJuIHF1YWRzLm1hcChbXShhdXRvJiBxdWFkKSB7CisgICAgICAgIHJldHVybiBxdWFkLmJv
dW5kaW5nQm94KCk7CisgICAgfSk7CiB9CiAKIEZsb2F0UmVjdCB1bml0ZWRCb3VuZGluZ0JveGVz
KGNvbnN0IFZlY3RvcjxGbG9hdFF1YWQ+JiBxdWFkcykKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJD
b3JlL3BsYXRmb3JtL2dyYXBoaWNzL2F2Zm91bmRhdGlvbi9vYmpjL0NETUluc3RhbmNlRmFpclBs
YXlTdHJlYW1pbmdBVkZPYmpDLm1tIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3Mv
YXZmb3VuZGF0aW9uL29iamMvQ0RNSW5zdGFuY2VGYWlyUGxheVN0cmVhbWluZ0FWRk9iakMubW0K
aW5kZXggY2ZlMDQ4YTkzOGMwNWRmNzQ1YzcxNjM1NmFkMWIzYjkwYTU5ZWI3OC4uOGNjNDcxZmFh
NDk5M2EzNTA5NTg0MTNhNTc3MWQ4YWQ3MzE4MzMzMyAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNv
cmUvcGxhdGZvcm0vZ3JhcGhpY3MvYXZmb3VuZGF0aW9uL29iamMvQ0RNSW5zdGFuY2VGYWlyUGxh
eVN0cmVhbWluZ0FWRk9iakMubW0KKysrIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhp
Y3MvYXZmb3VuZGF0aW9uL29iamMvQ0RNSW5zdGFuY2VGYWlyUGxheVN0cmVhbWluZ0FWRk9iakMu
bW0KQEAgLTkwNiw5ICs5MDYsNyBAQCB2b2lkIENETUluc3RhbmNlU2Vzc2lvbkZhaXJQbGF5U3Ry
ZWFtaW5nQVZGT2JqQzo6dXBkYXRlTGljZW5zZShjb25zdCBTdHJpbmcmLCBMaQogICAgIC8vIEZJ
WE1FKHJkYXI6Ly9wcm9ibGVtLzM1NTkyMjc3KTogc3Rhc2ggdGhlIGNhbGxiYWNrIGFuZCBjYWxs
IGl0IG9uY2UgQVZDb250ZW50S2V5UmVzcG9uc2Ugc3VwcG9ydHMgYSBzdWNjZXNzIGNhbGxiYWNr
LgogICAgIHN0cnVjdCBvYmpjX21ldGhvZF9kZXNjcmlwdGlvbiBtZXRob2QgPSBwcm90b2NvbF9n
ZXRNZXRob2REZXNjcmlwdGlvbihAcHJvdG9jb2woQVZDb250ZW50S2V5U2Vzc2lvbkRlbGVnYXRl
KSwgQHNlbGVjdG9yKGNvbnRlbnRLZXlTZXNzaW9uOmNvbnRlbnRLZXlSZXF1ZXN0RGlkU3VjY2Vl
ZDopLCBOTywgWUVTKTsKICAgICBpZiAoIW1ldGhvZC5uYW1lKSB7Ci0gICAgICAgIEtleVN0YXR1
c1ZlY3RvciBrZXlTdGF0dXNlczsKLSAgICAgICAga2V5U3RhdHVzZXMucmVzZXJ2ZUluaXRpYWxD
YXBhY2l0eSgxKTsKLSAgICAgICAga2V5U3RhdHVzZXMudW5jaGVja2VkQXBwZW5kKHN0ZDo6bWFr
ZV9wYWlyKFdURk1vdmUoa2V5SURzLmZpcnN0KCkpLCBLZXlTdGF0dXM6OlVzYWJsZSkpOworICAg
ICAgICBLZXlTdGF0dXNWZWN0b3Iga2V5U3RhdHVzZXMgeyBzdGQ6Om1ha2VfcGFpcihXVEZNb3Zl
KGtleUlEcy5maXJzdCgpKSwgS2V5U3RhdHVzOjpVc2FibGUpIH07CiAgICAgICAgIGNhbGxiYWNr
KGZhbHNlLCBzdGQ6Om1ha2Vfb3B0aW9uYWwoV1RGTW92ZShrZXlTdGF0dXNlcykpLCBzdGQ6Om51
bGxvcHQsIHN0ZDo6bnVsbG9wdCwgU3VjY2VlZGVkKTsKICAgICAgICAgcmV0dXJuOwogICAgIH0K
ZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2NhL1RpbGVHcmlk
LmNwcCBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2NhL1RpbGVHcmlkLmNwcApp
bmRleCA5ZDhmYmIxYTBmMGRlMzQ3MmE1Y2FjZWY3ZmM3ZTU5N2ViNmEyNmE0Li4wMmI4ZmRjMmJm
OGZmZGZkOTU2MDczODhhMzZjMmY4MWFlMzVhYjZiIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29y
ZS9wbGF0Zm9ybS9ncmFwaGljcy9jYS9UaWxlR3JpZC5jcHAKKysrIGIvU291cmNlL1dlYkNvcmUv
cGxhdGZvcm0vZ3JhcGhpY3MvY2EvVGlsZUdyaWQuY3BwCkBAIC0yOTAsNyArMjkwLDcgQEAgdW5z
aWduZWQgVGlsZUdyaWQ6OmJsYW5rUGl4ZWxDb3VudCgpIGNvbnN0CiAgICAgcmV0dXJuIFRpbGVD
b250cm9sbGVyOjpibGFua1BpeGVsQ291bnRGb3JUaWxlcyh0aWxlcywgbV9jb250cm9sbGVyLnZp
c2libGVSZWN0KCksIEludFBvaW50KDAsIDApKTsKIH0KIAotdm9pZCBUaWxlR3JpZDo6cmVtb3Zl
VGlsZXMoVmVjdG9yPFRpbGVHcmlkOjpUaWxlSW5kZXg+JiB0b1JlbW92ZSkKK3ZvaWQgVGlsZUdy
aWQ6OnJlbW92ZVRpbGVzKGNvbnN0IFZlY3RvcjxUaWxlR3JpZDo6VGlsZUluZGV4PiYgdG9SZW1v
dmUpCiB7CiAgICAgZm9yIChzaXplX3QgaSA9IDA7IGkgPCB0b1JlbW92ZS5zaXplKCk7ICsraSkg
ewogICAgICAgICBUaWxlSW5mbyB0aWxlSW5mbyA9IG1fdGlsZXMudGFrZSh0b1JlbW92ZVtpXSk7
CkBAIC0zMDIsMTMgKzMwMiw3IEBAIHZvaWQgVGlsZUdyaWQ6OnJlbW92ZVRpbGVzKFZlY3RvcjxU
aWxlR3JpZDo6VGlsZUluZGV4PiYgdG9SZW1vdmUpCiAKIHZvaWQgVGlsZUdyaWQ6OnJlbW92ZUFs
bFRpbGVzKCkKIHsKLSAgICBWZWN0b3I8VGlsZUluZGV4PiB0aWxlc1RvUmVtb3ZlOwotICAgIHRp
bGVzVG9SZW1vdmUucmVzZXJ2ZUluaXRpYWxDYXBhY2l0eShtX3RpbGVzLnNpemUoKSk7Ci0KLSAg
ICBmb3IgKGF1dG8mIGVudHJ5IDogbV90aWxlcykKLSAgICAgICAgdGlsZXNUb1JlbW92ZS51bmNo
ZWNrZWRBcHBlbmQoZW50cnkua2V5KTsKLQotICAgIHJlbW92ZVRpbGVzKHRpbGVzVG9SZW1vdmUp
OworICAgIHJlbW92ZVRpbGVzKGNvcHlUb1ZlY3RvcihtX3RpbGVzLmtleXMoKSkpOwogfQogCiB2
b2lkIFRpbGVHcmlkOjpyZW1vdmVBbGxTZWNvbmRhcnlUaWxlcygpCmRpZmYgLS1naXQgYS9Tb3Vy
Y2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9jYS9UaWxlR3JpZC5oIGIvU291cmNlL1dlYkNv
cmUvcGxhdGZvcm0vZ3JhcGhpY3MvY2EvVGlsZUdyaWQuaAppbmRleCAyNTdiYTU5ODM0YWNkNmRj
YTdlYjNiZGVjZjZjZDEwMWQzNTNlYjU2Li4yNDcyOTg0NGFhMzk2NDM2NDRjYmMzZmE2YzVjNmNj
ZjEwNmNiM2Y3IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9j
YS9UaWxlR3JpZC5oCisrKyBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2NhL1Rp
bGVHcmlkLmgKQEAgLTEzNSw3ICsxMzUsNyBAQCBwcml2YXRlOgogICAgIFRpbGVDb2hvcnQgbmV3
ZXN0VGlsZUNvaG9ydCgpIGNvbnN0OwogICAgIFRpbGVDb2hvcnQgb2xkZXN0VGlsZUNvaG9ydCgp
IGNvbnN0OwogCi0gICAgdm9pZCByZW1vdmVUaWxlcyhWZWN0b3I8VGlsZUdyaWQ6OlRpbGVJbmRl
eD4mIHRvUmVtb3ZlKTsKKyAgICB2b2lkIHJlbW92ZVRpbGVzKGNvbnN0IFZlY3RvcjxUaWxlR3Jp
ZDo6VGlsZUluZGV4PiYgdG9SZW1vdmUpOwogCiAgICAgLy8gUGxhdGZvcm1DQUxheWVyQ2xpZW50
CiAgICAgdm9pZCBwbGF0Zm9ybUNBTGF5ZXJQYWludENvbnRlbnRzKFBsYXRmb3JtQ0FMYXllcios
IEdyYXBoaWNzQ29udGV4dCYsIGNvbnN0IEZsb2F0UmVjdCYsIEdyYXBoaWNzTGF5ZXJQYWludEJl
aGF2aW9yKSBvdmVycmlkZTsKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dy
YXBoaWNzL2NnL0ltYWdlVXRpbGl0aWVzQ0cuY3BwIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0v
Z3JhcGhpY3MvY2cvSW1hZ2VVdGlsaXRpZXNDRy5jcHAKaW5kZXggYTFlNWI3MzJmYjBiZjRlNTQy
ZDQxYmE5ZTg2OWRmMDFkNjU5ZTM1NC4uYjVhNWNkY2I4OTEwNDgyZTM5M2I4ZDk1NmJmMGI1Mjk2
MzM5MWRjMiAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvY2cv
SW1hZ2VVdGlsaXRpZXNDRy5jcHAKKysrIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhp
Y3MvY2cvSW1hZ2VVdGlsaXRpZXNDRy5jcHAKQEAgLTEwMSwxOSArMTAxLDE1IEBAIHN0YXRpYyBT
dHJpbmcgdHJhbnNjb2RlSW1hZ2UoY29uc3QgU3RyaW5nJiBwYXRoLCBjb25zdCBTdHJpbmcmIGRl
c3RpbmF0aW9uVVRJLCBjCiAKIFZlY3RvcjxTdHJpbmc+IGZpbmRJbWFnZXNGb3JUcmFuc2NvZGlu
Zyhjb25zdCBWZWN0b3I8U3RyaW5nPiYgcGF0aHMsIGNvbnN0IFZlY3RvcjxTdHJpbmc+JiBhbGxv
d2VkTUlNRVR5cGVzKQogewotICAgIFZlY3RvcjxTdHJpbmc+IHRyYW5zY29kaW5nUGF0aHM7Ci0g
ICAgdHJhbnNjb2RpbmdQYXRocy5yZXNlcnZlSW5pdGlhbENhcGFjaXR5KHBhdGhzLnNpemUoKSk7
Ci0KICAgICBib29sIG5lZWRzVHJhbnNjb2RpbmcgPSBmYWxzZTsKLQotICAgIGZvciAoYXV0byYg
cGF0aCA6IHBhdGhzKSB7CisgICAgYXV0byB0cmFuc2NvZGluZ1BhdGhzID0gcGF0aHMubWFwKFsm
XShhdXRvJiBwYXRoKSB7CiAgICAgICAgIC8vIEFwcGVuZCBhIHBhdGggb2YgdGhlIGltYWdlIHdo
aWNoIG5lZWRzIHRyYW5zY29kaW5nLiBPdGhlcndpc2UgYXBwZW5kIGEgbnVsbCBzdHJpbmcuCiAg
ICAgICAgIGlmICghYWxsb3dlZE1JTUVUeXBlcy5jb250YWlucyhXZWJDb3JlOjpNSU1FVHlwZVJl
Z2lzdHJ5OjptaW1lVHlwZUZvclBhdGgocGF0aCkpKSB7Ci0gICAgICAgICAgICB0cmFuc2NvZGlu
Z1BhdGhzLnVuY2hlY2tlZEFwcGVuZChwYXRoKTsKICAgICAgICAgICAgIG5lZWRzVHJhbnNjb2Rp
bmcgPSB0cnVlOwotICAgICAgICB9IGVsc2UKLSAgICAgICAgICAgIHRyYW5zY29kaW5nUGF0aHMu
dW5jaGVja2VkQXBwZW5kKG51bGxTdHJpbmcoKSk7Ci0gICAgfQorICAgICAgICAgICAgcmV0dXJu
IHBhdGg7CisgICAgICAgIH0KKyAgICAgICAgcmV0dXJuIG51bGxTdHJpbmcoKTsKKyAgICB9KTsK
IAogICAgIC8vIElmIG5vbmUgb2YgdGhlIGZpbGVzIG5lZWRzIGltYWdlIHRyYW5zY29kaW5nLCBy
ZXR1cm4gYW4gZW1wdHkgVmVjdG9yLgogICAgIHJldHVybiBuZWVkc1RyYW5zY29kaW5nID8gdHJh
bnNjb2RpbmdQYXRocyA6IFZlY3RvcjxTdHJpbmc+KCk7CkBAIC0xMjQsMTggKzEyMCwxMCBAQCBW
ZWN0b3I8U3RyaW5nPiB0cmFuc2NvZGVJbWFnZXMoY29uc3QgVmVjdG9yPFN0cmluZz4mIHBhdGhz
LCBjb25zdCBTdHJpbmcmIGRlc3RpbgogICAgIEFTU0VSVCghZGVzdGluYXRpb25VVEkuaXNOdWxs
KCkpOwogICAgIEFTU0VSVCghZGVzdGluYXRpb25FeHRlbnNpb24uaXNOdWxsKCkpOwogICAgIAot
ICAgIFZlY3RvcjxTdHJpbmc+IHRyYW5zY29kZWRQYXRoczsKLSAgICB0cmFuc2NvZGVkUGF0aHMu
cmVzZXJ2ZUluaXRpYWxDYXBhY2l0eShwYXRocy5zaXplKCkpOwotCi0gICAgZm9yIChhdXRvJiBw
YXRoIDogcGF0aHMpIHsKKyAgICByZXR1cm4gcGF0aHMubWFwKFsmXShhdXRvJiBwYXRoKSB7CiAg
ICAgICAgIC8vIEFwcGVuZCB0aGUgdHJhbnNjb2RlZCBwYXRoIGlmIHRoZSBpbWFnZSBuZWVkcyB0
cmFuc2NvZGluZy4gT3RoZXJ3aXNlIGFwcGVuZCBhIG51bGwgc3RyaW5nLgotICAgICAgICBpZiAo
IXBhdGguaXNOdWxsKCkpCi0gICAgICAgICAgICB0cmFuc2NvZGVkUGF0aHMudW5jaGVja2VkQXBw
ZW5kKHRyYW5zY29kZUltYWdlKHBhdGgsIGRlc3RpbmF0aW9uVVRJLCBkZXN0aW5hdGlvbkV4dGVu
c2lvbikpOwotICAgICAgICBlbHNlCi0gICAgICAgICAgICB0cmFuc2NvZGVkUGF0aHMudW5jaGVj
a2VkQXBwZW5kKG51bGxTdHJpbmcoKSk7Ci0gICAgfQotCi0gICAgcmV0dXJuIHRyYW5zY29kZWRQ
YXRoczsKKyAgICAgICAgcmV0dXJuIHBhdGguaXNOdWxsKCkgPyBudWxsU3RyaW5nKCkgOiB0cmFu
c2NvZGVJbWFnZShwYXRoLCBkZXN0aW5hdGlvblVUSSwgZGVzdGluYXRpb25FeHRlbnNpb24pOwor
ICAgIH0pOwogfQogCiB9IC8vIG5hbWVzcGFjZSBXZWJDb3JlCmRpZmYgLS1naXQgYS9Tb3VyY2Uv
V2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9jb2NvYS9Gb250Q2FjaGVDb3JlVGV4dC5jcHAgYi9T
b3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9jb2NvYS9Gb250Q2FjaGVDb3JlVGV4dC5j
cHAKaW5kZXggNDQ4NDJmOGEyMzRkMTdjNTJmNjI3YjJhNDA1ODkxYWEwMDZlZmJiNy4uYWQ5YTIz
N2FhOWM2MDQ4NTQ3NDU1MWMyNDU4NmQyY2E4YTU3NjMwMiAxMDA2NDQKLS0tIGEvU291cmNlL1dl
YkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvY29jb2EvRm9udENhY2hlQ29yZVRleHQuY3BwCisrKyBi
L1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2NvY29hL0ZvbnRDYWNoZUNvcmVUZXh0
LmNwcApAQCAtMTE1MywxMSArMTE1MywxMCBAQCBGb250U2VsZWN0aW9uQ2FwYWJpbGl0aWVzIGNh
cGFiaWxpdGllc0ZvckZvbnREZXNjcmlwdG9yKENURm9udERlc2NyaXB0b3JSZWYgZm9udAogCiBz
dGF0aWMgY29uc3QgRm9udERhdGFiYXNlOjpJbnN0YWxsZWRGb250KiBmaW5kQ2xvc2VzdEZvbnQo
Y29uc3QgRm9udERhdGFiYXNlOjpJbnN0YWxsZWRGb250RmFtaWx5JiBmYW1pbHlGb250cywgRm9u
dFNlbGVjdGlvblJlcXVlc3QgZm9udFNlbGVjdGlvblJlcXVlc3QpCiB7Ci0gICAgVmVjdG9yPEZv
bnRTZWxlY3Rpb25DYXBhYmlsaXRpZXM+IGNhcGFiaWxpdGllczsKLSAgICBjYXBhYmlsaXRpZXMu
cmVzZXJ2ZUluaXRpYWxDYXBhY2l0eShmYW1pbHlGb250cy5zaXplKCkpOwotICAgIGZvciAoYXV0
byYgZm9udCA6IGZhbWlseUZvbnRzLmluc3RhbGxlZEZvbnRzKQotICAgICAgICBjYXBhYmlsaXRp
ZXMudW5jaGVja2VkQXBwZW5kKGZvbnQuY2FwYWJpbGl0aWVzKTsKLSAgICBGb250U2VsZWN0aW9u
QWxnb3JpdGhtIGZvbnRTZWxlY3Rpb25BbGdvcml0aG0oZm9udFNlbGVjdGlvblJlcXVlc3QsIGNh
cGFiaWxpdGllcywgZmFtaWx5Rm9udHMuY2FwYWJpbGl0aWVzKTsKKyAgICBhdXRvIGNhcGFiaWxp
dGllcyA9IGZhbWlseUZvbnRzLmluc3RhbGxlZEZvbnRzLm1hcChbXShhdXRvJiBmb250KSB7Cisg
ICAgICAgIHJldHVybiBmb250LmNhcGFiaWxpdGllczsKKyAgICB9KTsKKyAgICBGb250U2VsZWN0
aW9uQWxnb3JpdGhtIGZvbnRTZWxlY3Rpb25BbGdvcml0aG0oZm9udFNlbGVjdGlvblJlcXVlc3Qs
IFdURk1vdmUoY2FwYWJpbGl0aWVzKSwgZmFtaWx5Rm9udHMuY2FwYWJpbGl0aWVzKTsKICAgICBh
dXRvIGluZGV4ID0gZm9udFNlbGVjdGlvbkFsZ29yaXRobS5pbmRleE9mQmVzdENhcGFiaWxpdGll
cygpOwogICAgIGlmIChpbmRleCA9PSBub3RGb3VuZCkKICAgICAgICAgcmV0dXJuIG51bGxwdHI7
CkBAIC0xMTY5LDE0ICsxMTY4LDkgQEAgVmVjdG9yPEZvbnRTZWxlY3Rpb25DYXBhYmlsaXRpZXM+
IEZvbnRDYWNoZTo6Z2V0Rm9udFNlbGVjdGlvbkNhcGFiaWxpdGllc0luRmFtaWwKIHsKICAgICBh
dXRvJiBmb250RGF0YWJhc2UgPSBhbGxvd1VzZXJJbnN0YWxsZWRGb250cyA9PSBBbGxvd1VzZXJJ
bnN0YWxsZWRGb250czo6WWVzID8gRm9udERhdGFiYXNlOjpzaW5nbGV0b25BbGxvd2luZ1VzZXJJ
bnN0YWxsZWRGb250cygpIDogRm9udERhdGFiYXNlOjpzaW5nbGV0b25EaXNhbGxvd2luZ1VzZXJJ
bnN0YWxsZWRGb250cygpOwogICAgIGNvbnN0IGF1dG8mIGZvbnRzID0gZm9udERhdGFiYXNlLmNv
bGxlY3Rpb25Gb3JGYW1pbHkoZmFtaWx5TmFtZS5zdHJpbmcoKSk7Ci0gICAgaWYgKGZvbnRzLmlz
RW1wdHkoKSkKLSAgICAgICAgcmV0dXJuIHsgfTsKLQotICAgIFZlY3RvcjxGb250U2VsZWN0aW9u
Q2FwYWJpbGl0aWVzPiByZXN1bHQ7Ci0gICAgcmVzdWx0LnJlc2VydmVJbml0aWFsQ2FwYWNpdHko
Zm9udHMuc2l6ZSgpKTsKLSAgICBmb3IgKGNvbnN0IGF1dG8mIGZvbnQgOiBmb250cy5pbnN0YWxs
ZWRGb250cykKLSAgICAgICAgcmVzdWx0LnVuY2hlY2tlZEFwcGVuZChmb250LmNhcGFiaWxpdGll
cyk7Ci0gICAgcmV0dXJuIHJlc3VsdDsKKyAgICByZXR1cm4gZm9udHMuaW5zdGFsbGVkRm9udHMu
bWFwKFtdKGF1dG8mIGZvbnQpIHsKKyAgICAgICAgcmV0dXJuIGZvbnQuY2FwYWJpbGl0aWVzOwor
ICAgIH0pOwogfQogCiBzdHJ1Y3QgRm9udExvb2t1cCB7CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2Vi
Q29yZS9wbGF0Zm9ybS9tZWRpYXN0cmVhbS9SZWFsdGltZU1lZGlhU291cmNlLmNwcCBiL1NvdXJj
ZS9XZWJDb3JlL3BsYXRmb3JtL21lZGlhc3RyZWFtL1JlYWx0aW1lTWVkaWFTb3VyY2UuY3BwCmlu
ZGV4IDA3MzEzMzkxNDJjZjMzY2U5MTRlMThkYzkxNDczOTFhMzdkMDNiNjQuLmRlMGYxYTdhNGU2
MzVhMTM5ZTQ4MjhiNTQ3ZmRjZjA2NjE5YjM1YWIgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3Jl
L3BsYXRmb3JtL21lZGlhc3RyZWFtL1JlYWx0aW1lTWVkaWFTb3VyY2UuY3BwCisrKyBiL1NvdXJj
ZS9XZWJDb3JlL3BsYXRmb3JtL21lZGlhc3RyZWFtL1JlYWx0aW1lTWVkaWFTb3VyY2UuY3BwCkBA
IC00NjksMTEgKzQ2OSw5IEBAIGRvdWJsZSBSZWFsdGltZU1lZGlhU291cmNlOjpmaXRuZXNzRGlz
dGFuY2UoY29uc3QgTWVkaWFDb25zdHJhaW50JiBjb25zdHJhaW50KQogICAgICAgICBpZiAoIWNh
cGFiaWxpdGllcy5zdXBwb3J0c0ZhY2luZ01vZGUoKSkKICAgICAgICAgICAgIHJldHVybiAwOwog
Ci0gICAgICAgIGF1dG8mIG1vZGVzID0gY2FwYWJpbGl0aWVzLmZhY2luZ01vZGUoKTsKLSAgICAg
ICAgVmVjdG9yPFN0cmluZz4gc3VwcG9ydGVkTW9kZXM7Ci0gICAgICAgIHN1cHBvcnRlZE1vZGVz
LnJlc2VydmVJbml0aWFsQ2FwYWNpdHkobW9kZXMuc2l6ZSgpKTsKLSAgICAgICAgZm9yIChhdXRv
JiBtb2RlIDogbW9kZXMpCi0gICAgICAgICAgICBzdXBwb3J0ZWRNb2Rlcy51bmNoZWNrZWRBcHBl
bmQoUmVhbHRpbWVNZWRpYVNvdXJjZVNldHRpbmdzOjpmYWNpbmdNb2RlKG1vZGUpKTsKKyAgICAg
ICAgYXV0byBzdXBwb3J0ZWRNb2RlcyA9IGNhcGFiaWxpdGllcy5mYWNpbmdNb2RlKCkubWFwKFtd
KGF1dG8mIG1vZGUpIHsKKyAgICAgICAgICAgIHJldHVybiBSZWFsdGltZU1lZGlhU291cmNlU2V0
dGluZ3M6OmZhY2luZ01vZGUobW9kZSk7CisgICAgICAgIH0pOwogICAgICAgICByZXR1cm4gZG93
bmNhc3Q8U3RyaW5nQ29uc3RyYWludD4oY29uc3RyYWludCkuZml0bmVzc0Rpc3RhbmNlKHN1cHBv
cnRlZE1vZGVzKTsKICAgICAgICAgYnJlYWs7CiAgICAgfQpkaWZmIC0tZ2l0IGEvU291cmNlL1dl
YkNvcmUvcGxhdGZvcm0vbmV0d29yay9DYWNoZVZhbGlkYXRpb24uY3BwIGIvU291cmNlL1dlYkNv
cmUvcGxhdGZvcm0vbmV0d29yay9DYWNoZVZhbGlkYXRpb24uY3BwCmluZGV4IDJlOWMwNmQ1N2M5
MGQ1NTQ1MWNkNGFhZGVmNzZiYTMwM2YxMjhhMjkuLmRlYjM5ZjBhNjNkYThhMWYwNjUyNDdlYjdj
MDNlNThlMmVhYzRhNTkgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL25ldHdv
cmsvQ2FjaGVWYWxpZGF0aW9uLmNwcAorKysgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9uZXR3
b3JrL0NhY2hlVmFsaWRhdGlvbi5jcHAKQEAgLTM2MywxOCArMzYzLDEzIEBAIHN0YXRpYyBTdHJp
bmcgaGVhZGVyVmFsdWVGb3JWYXJ5KGNvbnN0IFJlc291cmNlUmVxdWVzdCYgcmVxdWVzdCwgY29u
c3QgU3RyaW5nJiBoCiAKIHN0YXRpYyBWZWN0b3I8c3RkOjpwYWlyPFN0cmluZywgU3RyaW5nPj4g
Y29sbGVjdFZhcnlpbmdSZXF1ZXN0SGVhZGVyc0ludGVybmFsKGNvbnN0IFJlc291cmNlUmVzcG9u
c2UmIHJlc3BvbnNlLCBGdW5jdGlvbjxTdHJpbmcoY29uc3QgU3RyaW5nJiBoZWFkZXJOYW1lKT4m
JiBoZWFkZXJWYWx1ZUZvclZhcnlGdW5jdGlvbikKIHsKLSAgICBTdHJpbmcgdmFyeVZhbHVlID0g
cmVzcG9uc2UuaHR0cEhlYWRlckZpZWxkKEhUVFBIZWFkZXJOYW1lOjpWYXJ5KTsKKyAgICBhdXRv
IHZhcnlWYWx1ZSA9IHJlc3BvbnNlLmh0dHBIZWFkZXJGaWVsZChIVFRQSGVhZGVyTmFtZTo6VmFy
eSk7CiAgICAgaWYgKHZhcnlWYWx1ZS5pc0VtcHR5KCkpCiAgICAgICAgIHJldHVybiB7IH07Ci0g
ICAgVmVjdG9yPFN0cmluZz4gdmFyeWluZ0hlYWRlck5hbWVzID0gdmFyeVZhbHVlLnNwbGl0KCcs
Jyk7Ci0gICAgVmVjdG9yPHN0ZDo6cGFpcjxTdHJpbmcsIFN0cmluZz4+IHZhcnlpbmdSZXF1ZXN0
SGVhZGVyczsKLSAgICB2YXJ5aW5nUmVxdWVzdEhlYWRlcnMucmVzZXJ2ZUNhcGFjaXR5KHZhcnlp
bmdIZWFkZXJOYW1lcy5zaXplKCkpOwotICAgIGZvciAoYXV0byYgdmFyeUhlYWRlck5hbWUgOiB2
YXJ5aW5nSGVhZGVyTmFtZXMpIHsKLSAgICAgICAgU3RyaW5nIGhlYWRlck5hbWUgPSB2YXJ5SGVh
ZGVyTmFtZS5zdHJpcFdoaXRlU3BhY2UoKTsKLSAgICAgICAgU3RyaW5nIGhlYWRlclZhbHVlID0g
aGVhZGVyVmFsdWVGb3JWYXJ5RnVuY3Rpb24oaGVhZGVyTmFtZSk7Ci0gICAgICAgIHZhcnlpbmdS
ZXF1ZXN0SGVhZGVycy5hcHBlbmQoc3RkOjptYWtlX3BhaXIoaGVhZGVyTmFtZSwgaGVhZGVyVmFs
dWUpKTsKLSAgICB9Ci0gICAgcmV0dXJuIHZhcnlpbmdSZXF1ZXN0SGVhZGVyczsKKyAgICByZXR1
cm4gdmFyeVZhbHVlLnNwbGl0KCcsJykubWFwKFsmXShhdXRvJiB2YXJ5SGVhZGVyTmFtZSkgewor
ICAgICAgICBhdXRvIGhlYWRlck5hbWUgPSB2YXJ5SGVhZGVyTmFtZS5zdHJpcFdoaXRlU3BhY2Uo
KTsKKyAgICAgICAgcmV0dXJuIHN0ZDo6bWFrZV9wYWlyKGhlYWRlck5hbWUsIGhlYWRlclZhbHVl
Rm9yVmFyeUZ1bmN0aW9uKGhlYWRlck5hbWUpKTsKKyAgICB9KTsKIH0KIAogVmVjdG9yPHN0ZDo6
cGFpcjxTdHJpbmcsIFN0cmluZz4+IGNvbGxlY3RWYXJ5aW5nUmVxdWVzdEhlYWRlcnMoTmV0d29y
a1N0b3JhZ2VTZXNzaW9uKiBzdG9yYWdlU2Vzc2lvbiwgY29uc3QgUmVzb3VyY2VSZXF1ZXN0JiBy
ZXF1ZXN0LCBjb25zdCBSZXNvdXJjZVJlc3BvbnNlJiByZXNwb25zZSkKZGlmZiAtLWdpdCBhL1Nv
dXJjZS9XZWJDb3JlL3BsYXRmb3JtL25ldHdvcmsvRm9ybURhdGEuY3BwIGIvU291cmNlL1dlYkNv
cmUvcGxhdGZvcm0vbmV0d29yay9Gb3JtRGF0YS5jcHAKaW5kZXggMGM5MDgxN2M0ZTliNDFmMzQ5
YTQxYWU2NGI3MTkwNmI5NTFlYjg5YS4uNzUwOWY1ZDUyZTAyZDQxODYyOWYyNmQ5NmIzYjY1MTZk
OTY1NzAyNiAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vbmV0d29yay9Gb3Jt
RGF0YS5jcHAKKysrIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vbmV0d29yay9Gb3JtRGF0YS5j
cHAKQEAgLTExMSwxNSArMTExLDkgQEAgUmVmPEZvcm1EYXRhPiBGb3JtRGF0YTo6aXNvbGF0ZWRD
b3B5KCkgY29uc3QKIHsKICAgICAvLyBGSVhNRTogaXNvbGF0ZWRDb3B5KCkgZG9lcyBub3QgY29w
eSBtX2lkZW50aWZpZXIsIG1fYm91bmRhcnksIG9yIG1fY29udGFpbnNQYXNzd29yZERhdGEuCiAg
ICAgLy8gSXMgYWxsIG9mIHRoYXQgY29ycmVjdCBhbmQgaW50ZW50aW9uYWw/Ci0KICAgICBhdXRv
IGZvcm1EYXRhID0gY3JlYXRlKCk7Ci0KICAgICBmb3JtRGF0YS0+bV9hbHdheXNTdHJlYW0gPSBt
X2Fsd2F5c1N0cmVhbTsKLQotICAgIGZvcm1EYXRhLT5tX2VsZW1lbnRzLnJlc2VydmVJbml0aWFs
Q2FwYWNpdHkobV9lbGVtZW50cy5zaXplKCkpOwotICAgIGZvciAoYXV0byYgZWxlbWVudCA6IG1f
ZWxlbWVudHMpCi0gICAgICAgIGZvcm1EYXRhLT5tX2VsZW1lbnRzLnVuY2hlY2tlZEFwcGVuZChl
bGVtZW50Lmlzb2xhdGVkQ29weSgpKTsKLQorICAgIGZvcm1EYXRhLT5tX2VsZW1lbnRzID0gY3Jv
c3NUaHJlYWRDb3B5KG1fZWxlbWVudHMpOwogICAgIHJldHVybiBmb3JtRGF0YTsKIH0KIApkaWZm
IC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vbmV0d29yay9Tb2NrZXRTdHJlYW1IYW5k
bGVJbXBsLmNwcCBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL25ldHdvcmsvU29ja2V0U3RyZWFt
SGFuZGxlSW1wbC5jcHAKaW5kZXggYzVmMmVhNzgwY2I3YmY1ODBiNmMwYzYwODhhZDBmYjUxM2Ji
NWQ0Zi4uYTUyNmU1ZGQxZTBmMTAwOGI5Zjk3Y2RhMzY4MjY5NTMzYzg4NmU2YSAxMDA2NDQKLS0t
IGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vbmV0d29yay9Tb2NrZXRTdHJlYW1IYW5kbGVJbXBs
LmNwcAorKysgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9uZXR3b3JrL1NvY2tldFN0cmVhbUhh
bmRsZUltcGwuY3BwCkBAIC0xMjgsNyArMTI4LDcgQEAgdm9pZCBTb2NrZXRTdHJlYW1IYW5kbGVJ
bXBsOjpwbGF0Zm9ybVNlbmRIYW5kc2hha2UoY29uc3QgdWludDhfdCogZGF0YSwgc2l6ZV90IGwK
ICAgICBpZiAobV9zdGF0ZSA9PSBPcGVuKSB7CiAgICAgICAgIC8vIFVuZm9ydHVuYXRlbHksIHdl
IG5lZWQgdG8gc2VuZCB0aGUgZGF0YSBpbiBvbmUgYnVmZmVyIG9yIGVsc2UgdGhlIGhhbmRzaGFr
ZSBmYWlscy4KICAgICAgICAgVmVjdG9yPHVpbnQ4X3Q+IHNlbmREYXRhOwotICAgICAgICBzZW5k
RGF0YS5yZXNlcnZlQ2FwYWNpdHkobGVuZ3RoICsgY29va2llRGF0YS5zaXplKCkpOworICAgICAg
ICBzZW5kRGF0YS5yZXNlcnZlSW5pdGlhbENhcGFjaXR5KGxlbmd0aCArIGNvb2tpZURhdGEuc2l6
ZSgpKTsKICAgICAgICAgc2VuZERhdGEuYXBwZW5kKGRhdGEsIGxlbmd0aCk7CiAgICAgICAgIHNl
bmREYXRhLmFwcGVuZChjb29raWVEYXRhLmRhdGEoKSwgY29va2llRGF0YS5zaXplKCkpOwogCmRp
ZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9uZXR3b3JrL2NvY29hL05ldHdvcmtT
dG9yYWdlU2Vzc2lvbkNvY29hLm1tIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vbmV0d29yay9j
b2NvYS9OZXR3b3JrU3RvcmFnZVNlc3Npb25Db2NvYS5tbQppbmRleCAyOTlmYzRiZDJlYmNmNzA3
NzU1NDc0NDUwYTRkNzlkZGU2NzhiZWZlLi40OTk5M2JlN2NjYWFiM2E3ZGQ3ZTRiNjJhOTQ1ZGY3
MzJiNzYwOGM0IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9uZXR3b3JrL2Nv
Y29hL05ldHdvcmtTdG9yYWdlU2Vzc2lvbkNvY29hLm1tCisrKyBiL1NvdXJjZS9XZWJDb3JlL3Bs
YXRmb3JtL25ldHdvcmsvY29jb2EvTmV0d29ya1N0b3JhZ2VTZXNzaW9uQ29jb2EubW0KQEAgLTg5
LDYgKzg5LDggQEAgc3RhdGljIFZlY3RvcjxDb29raWU+IG5zQ29va2llc1RvQ29va2llVmVjdG9y
KE5TQXJyYXk8TlNIVFRQQ29va2llICo+ICpuc0Nvb2tpZXMKICAgICAgICAgaWYgKCFmaWx0ZXIg
fHwgZmlsdGVyKG5zQ29va2llKSkKICAgICAgICAgICAgIGNvb2tpZXMudW5jaGVja2VkQXBwZW5k
KG5zQ29va2llKTsKICAgICB9CisgICAgaWYgKGZpbHRlcikKKyAgICAgICAgY29va2llcy5zaHJp
bmtUb0ZpdCgpOwogICAgIHJldHVybiBjb29raWVzOwogfQogCmRpZmYgLS1naXQgYS9Tb3VyY2Uv
V2ViQ29yZS9wbGF0Zm9ybS90ZXh0L0xvY2FsZUlDVS5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0
Zm9ybS90ZXh0L0xvY2FsZUlDVS5jcHAKaW5kZXggM2U1OGI3ZjA2YmU2NDgyZmYyZDY0ODNlYzFm
Mjc3ZTNhZGEwZmUxMS4uNzNkZWJkMzcyNDk1Y2EyZDZlZmUwNDBhMDU2M2Y1MjBjYTY1NzlkYSAx
MDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vdGV4dC9Mb2NhbGVJQ1UuY3BwCisr
KyBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL3RleHQvTG9jYWxlSUNVLmNwcApAQCAtMTY5LDcg
KzE2OSw3IEBAIHN0ZDo6dW5pcXVlX3B0cjxWZWN0b3I8U3RyaW5nPj4gTG9jYWxlSUNVOjpjcmVh
dGVMYWJlbFZlY3Rvcihjb25zdCBVRGF0ZUZvcm1hdCoKICAgICAgICAgcmV0dXJuIG1ha2VVbmlx
dWU8VmVjdG9yPFN0cmluZz4+KCk7CiAKICAgICBhdXRvIGxhYmVscyA9IG1ha2VVbmlxdWU8VmVj
dG9yPFN0cmluZz4+KCk7Ci0gICAgbGFiZWxzLT5yZXNlcnZlQ2FwYWNpdHkoc2l6ZSk7CisgICAg
bGFiZWxzLT5yZXNlcnZlSW5pdGlhbENhcGFjaXR5KHNpemUpOwogICAgIGZvciAoaW50MzJfdCBp
ID0gMDsgaSA8IHNpemU7ICsraSkgewogICAgICAgICBVRXJyb3JDb2RlIHN0YXR1cyA9IFVfWkVS
T19FUlJPUjsKICAgICAgICAgaW50MzJfdCBsZW5ndGggPSB1ZGF0X2dldFN5bWJvbHMoZGF0ZUZv
cm1hdCwgdHlwZSwgc3RhcnRJbmRleCArIGksIDAsIDAsICZzdGF0dXMpOwpAQCAtMTgwLDcgKzE4
MCw3IEBAIHN0ZDo6dW5pcXVlX3B0cjxWZWN0b3I8U3RyaW5nPj4gTG9jYWxlSUNVOjpjcmVhdGVM
YWJlbFZlY3Rvcihjb25zdCBVRGF0ZUZvcm1hdCoKICAgICAgICAgdWRhdF9nZXRTeW1ib2xzKGRh
dGVGb3JtYXQsIHR5cGUsIHN0YXJ0SW5kZXggKyBpLCBidWZmZXIuZGF0YSgpLCBsZW5ndGgsICZz
dGF0dXMpOwogICAgICAgICBpZiAoVV9GQUlMVVJFKHN0YXR1cykpCiAgICAgICAgICAgICByZXR1
cm4gbWFrZVVuaXF1ZTxWZWN0b3I8U3RyaW5nPj4oKTsKLSAgICAgICAgbGFiZWxzLT5hcHBlbmQo
U3RyaW5nOjphZG9wdChXVEZNb3ZlKGJ1ZmZlcikpKTsKKyAgICAgICAgbGFiZWxzLT51bmNoZWNr
ZWRBcHBlbmQoU3RyaW5nOjphZG9wdChXVEZNb3ZlKGJ1ZmZlcikpKTsKICAgICB9CiAgICAgcmV0
dXJuIGxhYmVsczsKIH0KQEAgLTE4OCw5ICsxODgsOSBAQCBzdGQ6OnVuaXF1ZV9wdHI8VmVjdG9y
PFN0cmluZz4+IExvY2FsZUlDVTo6Y3JlYXRlTGFiZWxWZWN0b3IoY29uc3QgVURhdGVGb3JtYXQq
CiBzdGF0aWMgc3RkOjp1bmlxdWVfcHRyPFZlY3RvcjxTdHJpbmc+PiBjcmVhdGVGYWxsYmFja01v
bnRoTGFiZWxzKCkKIHsKICAgICBhdXRvIGxhYmVscyA9IG1ha2VVbmlxdWU8VmVjdG9yPFN0cmlu
Zz4+KCk7Ci0gICAgbGFiZWxzLT5yZXNlcnZlQ2FwYWNpdHkoV1RGX0FSUkFZX0xFTkdUSChXVEY6
Om1vbnRoRnVsbE5hbWUpKTsKKyAgICBsYWJlbHMtPnJlc2VydmVJbml0aWFsQ2FwYWNpdHkoV1RG
X0FSUkFZX0xFTkdUSChXVEY6Om1vbnRoRnVsbE5hbWUpKTsKICAgICBmb3IgKHVuc2lnbmVkIGkg
PSAwOyBpIDwgV1RGX0FSUkFZX0xFTkdUSChXVEY6Om1vbnRoRnVsbE5hbWUpOyArK2kpCi0gICAg
ICAgIGxhYmVscy0+YXBwZW5kKFdURjo6bW9udGhGdWxsTmFtZVtpXSk7CisgICAgICAgIGxhYmVs
cy0+dW5jaGVja2VkQXBwZW5kKFdURjo6bW9udGhGdWxsTmFtZVtpXSk7CiAgICAgcmV0dXJuIGxh
YmVsczsKIH0KIApAQCAtMjA5LDExICsyMDksNyBAQCBjb25zdCBWZWN0b3I8U3RyaW5nPiYgTG9j
YWxlSUNVOjptb250aExhYmVscygpCiAKIHN0YXRpYyBzdGQ6OnVuaXF1ZV9wdHI8VmVjdG9yPFN0
cmluZz4+IGNyZWF0ZUZhbGxiYWNrQU1QTUxhYmVscygpCiB7Ci0gICAgYXV0byBsYWJlbHMgPSBt
YWtlVW5pcXVlPFZlY3RvcjxTdHJpbmc+PigpOwotICAgIGxhYmVscy0+cmVzZXJ2ZUNhcGFjaXR5
KDIpOwotICAgIGxhYmVscy0+YXBwZW5kKCJBTSIpOwotICAgIGxhYmVscy0+YXBwZW5kKCJQTSIp
OwotICAgIHJldHVybiBsYWJlbHM7CisgICAgcmV0dXJuIG1ha2VVbmlxdWU8VmVjdG9yPFN0cmlu
Zz4+KHsgIkFNIl9zdHIsICJQTSJfc3RyIH0pOwogfQogCiB2b2lkIExvY2FsZUlDVTo6aW5pdGlh
bGl6ZURhdGVUaW1lRm9ybWF0KCkKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3Jt
L3RleHQvTG9jYWxlTm9uZS5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS90ZXh0L0xvY2Fs
ZU5vbmUuY3BwCmluZGV4IDc4MTVhNDc4ZTAyOTc0NTU5NjU3NmMyZGVkMjIxMTkzNmFhOTZhMWIu
LjRiNmQ3NjBlOTUyN2E0NzdjYzQ5OTA0ODBkYzUyZjg2NTdmMzM0MzUgMTAwNjQ0Ci0tLSBhL1Nv
dXJjZS9XZWJDb3JlL3BsYXRmb3JtL3RleHQvTG9jYWxlTm9uZS5jcHAKKysrIGIvU291cmNlL1dl
YkNvcmUvcGxhdGZvcm0vdGV4dC9Mb2NhbGVOb25lLmNwcApAQCAtNzMsNyArNzMsNyBAQCBjb25z
dCBWZWN0b3I8U3RyaW5nPiYgTG9jYWxlTm9uZTo6bW9udGhMYWJlbHMoKQogICAgICAgICByZXR1
cm4gbV9tb250aExhYmVsczsKICAgICBtX21vbnRoTGFiZWxzLnJlc2VydmVDYXBhY2l0eShXVEZf
QVJSQVlfTEVOR1RIKFdURjo6bW9udGhGdWxsTmFtZSkpOwogICAgIGZvciAodW5zaWduZWQgaSA9
IDA7IGkgPCBXVEZfQVJSQVlfTEVOR1RIKFdURjo6bW9udGhGdWxsTmFtZSk7ICsraSkKLSAgICAg
ICAgbV9tb250aExhYmVscy5hcHBlbmQoV1RGOjptb250aEZ1bGxOYW1lW2ldKTsKKyAgICAgICAg
bV9tb250aExhYmVscy51bmNoZWNrZWRBcHBlbmQoV1RGOjptb250aEZ1bGxOYW1lW2ldKTsKICAg
ICByZXR1cm4gbV9tb250aExhYmVsczsKIH0KIApAQCAtMTE4LDcgKzExOCw3IEBAIGNvbnN0IFZl
Y3RvcjxTdHJpbmc+JiBMb2NhbGVOb25lOjpzaG9ydE1vbnRoTGFiZWxzKCkKICAgICAgICAgcmV0
dXJuIG1fc2hvcnRNb250aExhYmVsczsKICAgICBtX3Nob3J0TW9udGhMYWJlbHMucmVzZXJ2ZUNh
cGFjaXR5KFdURl9BUlJBWV9MRU5HVEgoV1RGOjptb250aE5hbWUpKTsKICAgICBmb3IgKHVuc2ln
bmVkIGkgPSAwOyBpIDwgV1RGX0FSUkFZX0xFTkdUSChXVEY6Om1vbnRoTmFtZSk7ICsraSkKLSAg
ICAgICAgbV9zaG9ydE1vbnRoTGFiZWxzLmFwcGVuZChXVEY6Om1vbnRoTmFtZVtpXSk7CisgICAg
ICAgIG1fc2hvcnRNb250aExhYmVscy51bmNoZWNrZWRBcHBlbmQoV1RGOjptb250aE5hbWVbaV0p
OwogICAgIHJldHVybiBtX3Nob3J0TW9udGhMYWJlbHM7CiB9CiAKQEAgLTEzNyw4ICsxMzcsOCBA
QCBjb25zdCBWZWN0b3I8U3RyaW5nPiYgTG9jYWxlTm9uZTo6dGltZUFNUE1MYWJlbHMoKQogICAg
IGlmICghbV90aW1lQU1QTUxhYmVscy5pc0VtcHR5KCkpCiAgICAgICAgIHJldHVybiBtX3RpbWVB
TVBNTGFiZWxzOwogICAgIG1fdGltZUFNUE1MYWJlbHMucmVzZXJ2ZUNhcGFjaXR5KDIpOwotICAg
IG1fdGltZUFNUE1MYWJlbHMuYXBwZW5kKCJBTSIpOwotICAgIG1fdGltZUFNUE1MYWJlbHMuYXBw
ZW5kKCJQTSIpOworICAgIG1fdGltZUFNUE1MYWJlbHMudW5jaGVja2VkQXBwZW5kKCJBTSIpOwor
ICAgIG1fdGltZUFNUE1MYWJlbHMudW5jaGVja2VkQXBwZW5kKCJQTSIpOwogICAgIHJldHVybiBt
X3RpbWVBTVBNTGFiZWxzOwogfQogCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9y
bS90ZXh0L2NvY29hL0xvY2FsZUNvY29hLm1tIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vdGV4
dC9jb2NvYS9Mb2NhbGVDb2NvYS5tbQppbmRleCAxYjA5OGZhZjM1ZWIyYmFjNDRmNTZjOWMzOTE4
MmMzYjg4NTIxMGE3Li5mMThkYjQ1NzA4MmY1ZDkyYjA2OTNiZDI0N2YzN2VkYTA3Njg4YjZhIDEw
MDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS90ZXh0L2NvY29hL0xvY2FsZUNvY29h
Lm1tCisrKyBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL3RleHQvY29jb2EvTG9jYWxlQ29jb2Eu
bW0KQEAgLTExMCwxMSArMTEwLDExIEBAIGNvbnN0IFZlY3RvcjxTdHJpbmc+JiBMb2NhbGVDb2Nv
YTo6bW9udGhMYWJlbHMoKQogICAgIE5TQXJyYXkgKmFycmF5ID0gW3Nob3J0RGF0ZUZvcm1hdHRl
cigpLmdldCgpIG1vbnRoU3ltYm9sc107CiAgICAgaWYgKFthcnJheSBjb3VudF0gPT0gMTIpIHsK
ICAgICAgICAgZm9yICh1bnNpZ25lZCBpID0gMDsgaSA8IDEyOyArK2kpCi0gICAgICAgICAgICBt
X21vbnRoTGFiZWxzLmFwcGVuZChTdHJpbmcoW2FycmF5IG9iamVjdEF0SW5kZXg6aV0pKTsKKyAg
ICAgICAgICAgIG1fbW9udGhMYWJlbHMudW5jaGVja2VkQXBwZW5kKFN0cmluZyhbYXJyYXkgb2Jq
ZWN0QXRJbmRleDppXSkpOwogICAgICAgICByZXR1cm4gbV9tb250aExhYmVsczsKICAgICB9CiAg
ICAgZm9yIChhdXRvJiBuYW1lIDogV1RGOjptb250aEZ1bGxOYW1lKQotICAgICAgICBtX21vbnRo
TGFiZWxzLmFwcGVuZChuYW1lKTsKKyAgICAgICAgbV9tb250aExhYmVscy51bmNoZWNrZWRBcHBl
bmQobmFtZSk7CiAgICAgcmV0dXJuIG1fbW9udGhMYWJlbHM7CiB9CiAKQEAgLTIwNCwxMSArMjA0
LDExIEBAIGNvbnN0IFZlY3RvcjxTdHJpbmc+JiBMb2NhbGVDb2NvYTo6c2hvcnRNb250aExhYmVs
cygpCiAgICAgTlNBcnJheSAqYXJyYXkgPSBbc2hvcnREYXRlRm9ybWF0dGVyKCkuZ2V0KCkgc2hv
cnRNb250aFN5bWJvbHNdOwogICAgIGlmIChbYXJyYXkgY291bnRdID09IDEyKSB7CiAgICAgICAg
IGZvciAodW5zaWduZWQgaSA9IDA7IGkgPCAxMjsgKytpKQotICAgICAgICAgICAgbV9zaG9ydE1v
bnRoTGFiZWxzLmFwcGVuZChbYXJyYXkgb2JqZWN0QXRJbmRleDppXSk7CisgICAgICAgICAgICBt
X3Nob3J0TW9udGhMYWJlbHMudW5jaGVja2VkQXBwZW5kKFthcnJheSBvYmplY3RBdEluZGV4Omld
KTsKICAgICAgICAgcmV0dXJuIG1fc2hvcnRNb250aExhYmVsczsKICAgICB9CiAgICAgZm9yIChh
dXRvJiBuYW1lIDogV1RGOjptb250aE5hbWUpCi0gICAgICAgIG1fc2hvcnRNb250aExhYmVscy5h
cHBlbmQobmFtZSk7CisgICAgICAgIG1fc2hvcnRNb250aExhYmVscy51bmNoZWNrZWRBcHBlbmQo
bmFtZSk7CiAgICAgcmV0dXJuIG1fc2hvcnRNb250aExhYmVsczsKIH0KIApAQCAtMjIwLDcgKzIy
MCw3IEBAIGNvbnN0IFZlY3RvcjxTdHJpbmc+JiBMb2NhbGVDb2NvYTo6c3RhbmRBbG9uZU1vbnRo
TGFiZWxzKCkKICAgICBpZiAoW2FycmF5IGNvdW50XSA9PSAxMikgewogICAgICAgICBtX3N0YW5k
QWxvbmVNb250aExhYmVscy5yZXNlcnZlQ2FwYWNpdHkoMTIpOwogICAgICAgICBmb3IgKHVuc2ln
bmVkIGkgPSAwOyBpIDwgMTI7ICsraSkKLSAgICAgICAgICAgIG1fc3RhbmRBbG9uZU1vbnRoTGFi
ZWxzLmFwcGVuZChbYXJyYXkgb2JqZWN0QXRJbmRleDppXSk7CisgICAgICAgICAgICBtX3N0YW5k
QWxvbmVNb250aExhYmVscy51bmNoZWNrZWRBcHBlbmQoW2FycmF5IG9iamVjdEF0SW5kZXg6aV0p
OwogICAgICAgICByZXR1cm4gbV9zdGFuZEFsb25lTW9udGhMYWJlbHM7CiAgICAgfQogICAgIG1f
c3RhbmRBbG9uZU1vbnRoTGFiZWxzID0gc2hvcnRNb250aExhYmVscygpOwpAQCAtMjM1LDcgKzIz
NSw3IEBAIGNvbnN0IFZlY3RvcjxTdHJpbmc+JiBMb2NhbGVDb2NvYTo6c2hvcnRTdGFuZEFsb25l
TW9udGhMYWJlbHMoKQogICAgIGlmIChbYXJyYXkgY291bnRdID09IDEyKSB7CiAgICAgICAgIG1f
c2hvcnRTdGFuZEFsb25lTW9udGhMYWJlbHMucmVzZXJ2ZUNhcGFjaXR5KDEyKTsKICAgICAgICAg
Zm9yICh1bnNpZ25lZCBpID0gMDsgaSA8IDEyOyArK2kpCi0gICAgICAgICAgICBtX3Nob3J0U3Rh
bmRBbG9uZU1vbnRoTGFiZWxzLmFwcGVuZChbYXJyYXkgb2JqZWN0QXRJbmRleDppXSk7CisgICAg
ICAgICAgICBtX3Nob3J0U3RhbmRBbG9uZU1vbnRoTGFiZWxzLnVuY2hlY2tlZEFwcGVuZChbYXJy
YXkgb2JqZWN0QXRJbmRleDppXSk7CiAgICAgICAgIHJldHVybiBtX3Nob3J0U3RhbmRBbG9uZU1v
bnRoTGFiZWxzOwogICAgIH0KICAgICBtX3Nob3J0U3RhbmRBbG9uZU1vbnRoTGFiZWxzID0gc2hv
cnRNb250aExhYmVscygpOwpAQCAtMjQ4LDggKzI0OCw4IEBAIGNvbnN0IFZlY3RvcjxTdHJpbmc+
JiBMb2NhbGVDb2NvYTo6dGltZUFNUE1MYWJlbHMoKQogICAgICAgICByZXR1cm4gbV90aW1lQU1Q
TUxhYmVsczsKICAgICBtX3RpbWVBTVBNTGFiZWxzLnJlc2VydmVDYXBhY2l0eSgyKTsKICAgICBS
ZXRhaW5QdHI8TlNEYXRlRm9ybWF0dGVyPiBmb3JtYXR0ZXIgPSBzaG9ydFRpbWVGb3JtYXR0ZXIo
KTsKLSAgICBtX3RpbWVBTVBNTGFiZWxzLmFwcGVuZChbZm9ybWF0dGVyIEFNU3ltYm9sXSk7Ci0g
ICAgbV90aW1lQU1QTUxhYmVscy5hcHBlbmQoW2Zvcm1hdHRlciBQTVN5bWJvbF0pOworICAgIG1f
dGltZUFNUE1MYWJlbHMudW5jaGVja2VkQXBwZW5kKFtmb3JtYXR0ZXIgQU1TeW1ib2xdKTsKKyAg
ICBtX3RpbWVBTVBNTGFiZWxzLnVuY2hlY2tlZEFwcGVuZChbZm9ybWF0dGVyIFBNU3ltYm9sXSk7
CiAgICAgcmV0dXJuIG1fdGltZUFNUE1MYWJlbHM7CiB9CiAKZGlmZiAtLWdpdCBhL1NvdXJjZS9X
ZWJDb3JlL3BsdWdpbnMvRE9NTWltZVR5cGVBcnJheS5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9wbHVn
aW5zL0RPTU1pbWVUeXBlQXJyYXkuY3BwCmluZGV4IGE2ZWI0Zjk5ZjM0MTZjZjg0NDYwZmMzYjAw
YjRhNmYwMjQ1NTZkYzcuLmVhY2VjZmMzM2I4NTY5MjRmYzFkMDBhMTE2ZjEwM2IzZDZlYzFmMDUg
MTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL3BsdWdpbnMvRE9NTWltZVR5cGVBcnJheS5jcHAK
KysrIGIvU291cmNlL1dlYkNvcmUvcGx1Z2lucy9ET01NaW1lVHlwZUFycmF5LmNwcApAQCAtNjMs
MTMgKzYzLDExIEBAIFJlZlB0cjxET01NaW1lVHlwZT4gRE9NTWltZVR5cGVBcnJheTo6bmFtZWRJ
dGVtKGNvbnN0IEF0b21TdHJpbmcmIHByb3BlcnR5TmFtZSkKICAgICByZXR1cm4gbnVsbHB0cjsK
IH0KIAotVmVjdG9yPEF0b21TdHJpbmc+IERPTU1pbWVUeXBlQXJyYXk6OnN1cHBvcnRlZFByb3Bl
cnR5TmFtZXMoKQorVmVjdG9yPEF0b21TdHJpbmc+IERPTU1pbWVUeXBlQXJyYXk6OnN1cHBvcnRl
ZFByb3BlcnR5TmFtZXMoKSBjb25zdAogewotICAgIFZlY3RvcjxBdG9tU3RyaW5nPiByZXN1bHQ7
Ci0gICAgcmVzdWx0LnJlc2VydmVJbml0aWFsQ2FwYWNpdHkobV90eXBlcy5zaXplKCkpOwotICAg
IGZvciAoYXV0byYgdHlwZSA6IG1fdHlwZXMpCi0gICAgICAgIHJlc3VsdC51bmNoZWNrZWRBcHBl
bmQodHlwZS0+dHlwZSgpKTsKLSAgICByZXR1cm4gcmVzdWx0OworICAgIHJldHVybiBtX3R5cGVz
Lm1hcChbXShhdXRvJiB0eXBlKSAtPiBBdG9tU3RyaW5nIHsKKyAgICAgICAgcmV0dXJuIHR5cGUt
PnR5cGUoKTsKKyAgICB9KTsKIH0KIAogfSAvLyBuYW1lc3BhY2UgV2ViQ29yZQpkaWZmIC0tZ2l0
IGEvU291cmNlL1dlYkNvcmUvcGx1Z2lucy9ET01NaW1lVHlwZUFycmF5LmggYi9Tb3VyY2UvV2Vi
Q29yZS9wbHVnaW5zL0RPTU1pbWVUeXBlQXJyYXkuaAppbmRleCA0OWQ2YTg4ODMyZGRjZGQyOGNk
OWJjN2NjMjA0YzQ0YWNhYzUyM2U2Li4xMzc2M2I1MTQzNDViNmI4NDhhMTk4ZGNiNjc0MTUyY2Yw
NzA1NmI3IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9wbHVnaW5zL0RPTU1pbWVUeXBlQXJy
YXkuaAorKysgYi9Tb3VyY2UvV2ViQ29yZS9wbHVnaW5zL0RPTU1pbWVUeXBlQXJyYXkuaApAQCAt
NDAsNyArNDAsNyBAQCBwdWJsaWM6CiAgICAgdW5zaWduZWQgbGVuZ3RoKCkgY29uc3Q7CiAgICAg
UmVmUHRyPERPTU1pbWVUeXBlPiBpdGVtKHVuc2lnbmVkIGluZGV4KTsKICAgICBSZWZQdHI8RE9N
TWltZVR5cGU+IG5hbWVkSXRlbShjb25zdCBBdG9tU3RyaW5nJiBwcm9wZXJ0eU5hbWUpOwotICAg
IFZlY3RvcjxBdG9tU3RyaW5nPiBzdXBwb3J0ZWRQcm9wZXJ0eU5hbWVzKCk7CisgICAgVmVjdG9y
PEF0b21TdHJpbmc+IHN1cHBvcnRlZFByb3BlcnR5TmFtZXMoKSBjb25zdDsKIAogICAgIE5hdmln
YXRvciogbmF2aWdhdG9yKCkgeyByZXR1cm4gbV9uYXZpZ2F0b3IuZ2V0KCk7IH0KIApkaWZmIC0t
Z2l0IGEvU291cmNlL1dlYkNvcmUvcGx1Z2lucy9ET01QbHVnaW4uY3BwIGIvU291cmNlL1dlYkNv
cmUvcGx1Z2lucy9ET01QbHVnaW4uY3BwCmluZGV4IDNiOGQ0ZGY5Zjk3OTE2ZTAwYmRlZmFhOWQ2
Yzk3YmM3YTA2MzhkMDkuLmMxMjljOGJjMDA2NTNkNmM3ZDRhNWY3MmVlNzhiNWEyZjkwMDY1NjEg
MTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL3BsdWdpbnMvRE9NUGx1Z2luLmNwcAorKysgYi9T
b3VyY2UvV2ViQ29yZS9wbHVnaW5zL0RPTVBsdWdpbi5jcHAKQEAgLTM1LDExICszNSw5IEBAIFJl
ZjxET01QbHVnaW4+IERPTVBsdWdpbjo6Y3JlYXRlKE5hdmlnYXRvciYgbmF2aWdhdG9yLCBjb25z
dCBQbHVnaW5JbmZvJiBpbmZvKQogCiBzdGF0aWMgVmVjdG9yPFJlZjxET01NaW1lVHlwZT4+IG1h
a2VNaW1lVHlwZXMoTmF2aWdhdG9yJiBuYXZpZ2F0b3IsIGNvbnN0IFBsdWdpbkluZm8mIGluZm8s
IERPTVBsdWdpbiYgc2VsZikKIHsKLSAgICBWZWN0b3I8UmVmPERPTU1pbWVUeXBlPj4gdHlwZXM7
Ci0gICAgdHlwZXMucmVzZXJ2ZUluaXRpYWxDYXBhY2l0eShpbmZvLm1pbWVzLnNpemUoKSk7Ci0g
ICAgZm9yIChhdXRvJiB0eXBlIDogaW5mby5taW1lcykKLSAgICAgICAgdHlwZXMudW5jaGVja2Vk
QXBwZW5kKERPTU1pbWVUeXBlOjpjcmVhdGUobmF2aWdhdG9yLCB0eXBlLCBzZWxmKSk7Ci0KKyAg
ICBhdXRvIHR5cGVzID0gaW5mby5taW1lcy5tYXAoWyZdKGF1dG8mIHR5cGUpIHsKKyAgICAgICAg
cmV0dXJuIERPTU1pbWVUeXBlOjpjcmVhdGUobmF2aWdhdG9yLCB0eXBlLCBzZWxmKTsKKyAgICB9
KTsKICAgICBzdGQ6OnNvcnQodHlwZXMuYmVnaW4oKSwgdHlwZXMuZW5kKCksIFtdKGNvbnN0IFJl
ZjxET01NaW1lVHlwZT4mIGEsIGNvbnN0IFJlZjxET01NaW1lVHlwZT4mIGIpIHsKICAgICAgICAg
cmV0dXJuIGNvZGVQb2ludENvbXBhcmVMZXNzVGhhbihhLT50eXBlKCksIGItPnR5cGUoKSk7CiAg
ICAgfSk7CkBAIC05MiwxMyArOTAsMTEgQEAgUmVmUHRyPERPTU1pbWVUeXBlPiBET01QbHVnaW46
Om5hbWVkSXRlbShjb25zdCBBdG9tU3RyaW5nJiBwcm9wZXJ0eU5hbWUpCiAgICAgcmV0dXJuIG51
bGxwdHI7CiB9CiAKLVZlY3RvcjxBdG9tU3RyaW5nPiBET01QbHVnaW46OnN1cHBvcnRlZFByb3Bl
cnR5TmFtZXMoKQorVmVjdG9yPEF0b21TdHJpbmc+IERPTVBsdWdpbjo6c3VwcG9ydGVkUHJvcGVy
dHlOYW1lcygpIGNvbnN0CiB7Ci0gICAgVmVjdG9yPEF0b21TdHJpbmc+IHJlc3VsdDsKLSAgICBy
ZXN1bHQucmVzZXJ2ZUluaXRpYWxDYXBhY2l0eShtX21pbWVUeXBlcy5zaXplKCkpOwotICAgIGZv
ciAoYXV0byYgdHlwZSA6IG1fbWltZVR5cGVzKQotICAgICAgICByZXN1bHQudW5jaGVja2VkQXBw
ZW5kKHR5cGUtPnR5cGUoKSk7Ci0gICAgcmV0dXJuIHJlc3VsdDsKKyAgICByZXR1cm4gbV9taW1l
VHlwZXMubWFwKFtdKGF1dG8mIHR5cGUpIC0+IEF0b21TdHJpbmcgeworICAgICAgICByZXR1cm4g
dHlwZS0+dHlwZSgpOworICAgIH0pOwogfQogCiB9IC8vIG5hbWVzcGFjZSBXZWJDb3JlCmRpZmYg
LS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9wbHVnaW5zL0RPTVBsdWdpbi5oIGIvU291cmNlL1dlYkNv
cmUvcGx1Z2lucy9ET01QbHVnaW4uaAppbmRleCBhMjMwZTA0Yzk0MzlkZDkyM2ZkOTVhOWVlYzBl
ZWJhYjNkMDYzYTYzLi43OTkzZDBiYjRlOTgwYTUzZDZmYWMyMzQ3ODExOGIwOTYzYzBjZDA3IDEw
MDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9wbHVnaW5zL0RPTVBsdWdpbi5oCisrKyBiL1NvdXJj
ZS9XZWJDb3JlL3BsdWdpbnMvRE9NUGx1Z2luLmgKQEAgLTQ2LDcgKzQ2LDcgQEAgcHVibGljOgog
CiAgICAgUmVmUHRyPERPTU1pbWVUeXBlPiBpdGVtKHVuc2lnbmVkIGluZGV4KTsKICAgICBSZWZQ
dHI8RE9NTWltZVR5cGU+IG5hbWVkSXRlbShjb25zdCBBdG9tU3RyaW5nJiBwcm9wZXJ0eU5hbWUp
OwotICAgIFZlY3RvcjxBdG9tU3RyaW5nPiBzdXBwb3J0ZWRQcm9wZXJ0eU5hbWVzKCk7CisgICAg
VmVjdG9yPEF0b21TdHJpbmc+IHN1cHBvcnRlZFByb3BlcnR5TmFtZXMoKSBjb25zdDsKIAogICAg
IGNvbnN0IFZlY3RvcjxSZWY8RE9NTWltZVR5cGU+PiYgbWltZVR5cGVzKCkgY29uc3QgeyByZXR1
cm4gbV9taW1lVHlwZXM7IH0KIApkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvcGx1Z2lucy9E
T01QbHVnaW5BcnJheS5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9wbHVnaW5zL0RPTVBsdWdpbkFycmF5
LmNwcAppbmRleCAzZThlNGQ3ZWEyYjQ5MWFkNzRhNmRlMmE0OTc4NjdkMWUwZmNmY2JmLi45MGVi
ZGExMTdmMTRmMTE0MWYxZTgzNTA2ZjFiZTVlMGE5OTA4ODAyIDEwMDY0NAotLS0gYS9Tb3VyY2Uv
V2ViQ29yZS9wbHVnaW5zL0RPTVBsdWdpbkFycmF5LmNwcAorKysgYi9Tb3VyY2UvV2ViQ29yZS9w
bHVnaW5zL0RPTVBsdWdpbkFycmF5LmNwcApAQCAtNzEsMTMgKzcxLDExIEBAIFJlZlB0cjxET01Q
bHVnaW4+IERPTVBsdWdpbkFycmF5OjpuYW1lZEl0ZW0oY29uc3QgQXRvbVN0cmluZyYgcHJvcGVy
dHlOYW1lKQogICAgIHJldHVybiBudWxscHRyOwogfQogCi1WZWN0b3I8QXRvbVN0cmluZz4gRE9N
UGx1Z2luQXJyYXk6OnN1cHBvcnRlZFByb3BlcnR5TmFtZXMoKQorVmVjdG9yPEF0b21TdHJpbmc+
IERPTVBsdWdpbkFycmF5OjpzdXBwb3J0ZWRQcm9wZXJ0eU5hbWVzKCkgY29uc3QKIHsKLSAgICBW
ZWN0b3I8QXRvbVN0cmluZz4gcmVzdWx0OwotICAgIHJlc3VsdC5yZXNlcnZlSW5pdGlhbENhcGFj
aXR5KG1fcHVibGljbHlWaXNpYmxlUGx1Z2lucy5zaXplKCkpOwotICAgIGZvciAoYXV0byYgcGx1
Z2luIDogbV9wdWJsaWNseVZpc2libGVQbHVnaW5zKQotICAgICAgICByZXN1bHQudW5jaGVja2Vk
QXBwZW5kKHBsdWdpbi0+bmFtZSgpKTsKLSAgICByZXR1cm4gcmVzdWx0OworICAgIHJldHVybiBt
X3B1YmxpY2x5VmlzaWJsZVBsdWdpbnMubWFwKFtdKGF1dG8mIHBsdWdpbikgLT4gQXRvbVN0cmlu
ZyB7CisgICAgICAgIHJldHVybiBwbHVnaW4tPm5hbWUoKTsKKyAgICB9KTsKIH0KIAogdm9pZCBE
T01QbHVnaW5BcnJheTo6cmVmcmVzaChib29sIHJlbG9hZFBhZ2VzKQpkaWZmIC0tZ2l0IGEvU291
cmNlL1dlYkNvcmUvcGx1Z2lucy9ET01QbHVnaW5BcnJheS5oIGIvU291cmNlL1dlYkNvcmUvcGx1
Z2lucy9ET01QbHVnaW5BcnJheS5oCmluZGV4IGQ2NjQ0ZDE5YjA1MzJhM2E2NzE1Mjc2NDY2MmYy
MzgwNDVlYzBiYmMuLjI0ZjkzMmM3ZWZhNzA0ZDE1ZDljMzliYjk0NjBlZWI2OWVjMTIwOTggMTAw
NjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL3BsdWdpbnMvRE9NUGx1Z2luQXJyYXkuaAorKysgYi9T
b3VyY2UvV2ViQ29yZS9wbHVnaW5zL0RPTVBsdWdpbkFycmF5LmgKQEAgLTQxLDcgKzQxLDcgQEAg
cHVibGljOgogICAgIHVuc2lnbmVkIGxlbmd0aCgpIGNvbnN0OwogICAgIFJlZlB0cjxET01QbHVn
aW4+IGl0ZW0odW5zaWduZWQgaW5kZXgpOwogICAgIFJlZlB0cjxET01QbHVnaW4+IG5hbWVkSXRl
bShjb25zdCBBdG9tU3RyaW5nJiBwcm9wZXJ0eU5hbWUpOwotICAgIFZlY3RvcjxBdG9tU3RyaW5n
PiBzdXBwb3J0ZWRQcm9wZXJ0eU5hbWVzKCk7CisgICAgVmVjdG9yPEF0b21TdHJpbmc+IHN1cHBv
cnRlZFByb3BlcnR5TmFtZXMoKSBjb25zdDsKIAogICAgIHZvaWQgcmVmcmVzaChib29sIHJlbG9h
ZFBhZ2VzKTsKIApkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL0xheWVyQW5j
ZXN0b3JDbGlwcGluZ1N0YWNrLmNwcCBiL1NvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9MYXllckFu
Y2VzdG9yQ2xpcHBpbmdTdGFjay5jcHAKaW5kZXggZjJjYzAzOTBmYzUwMjVjNDVlNWNkYWVmMTcx
MjM1YmJjMDkwZjAzOS4uNzk3MGFmODI1NzEyNDI4ZmM4MGNlNjFjNGE5MmIyMGQyYjFjZDY0OSAx
MDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL0xheWVyQW5jZXN0b3JDbGlwcGlu
Z1N0YWNrLmNwcAorKysgYi9Tb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvTGF5ZXJBbmNlc3RvckNs
aXBwaW5nU3RhY2suY3BwCkBAIC0zNCwxMCArMzQsOCBAQAogbmFtZXNwYWNlIFdlYkNvcmUgewog
CiBMYXllckFuY2VzdG9yQ2xpcHBpbmdTdGFjazo6TGF5ZXJBbmNlc3RvckNsaXBwaW5nU3RhY2so
VmVjdG9yPENvbXBvc2l0ZWRDbGlwRGF0YT4mJiBjbGlwRGF0YVN0YWNrKQorICAgIDogbV9zdGFj
ayhXVEY6Om1hcChXVEZNb3ZlKGNsaXBEYXRhU3RhY2spLCBbXShhdXRvJiYgY2xpcERhdGFFbnRy
eSkgeyByZXR1cm4gQ2xpcHBpbmdTdGFja0VudHJ5IHsgV1RGTW92ZShjbGlwRGF0YUVudHJ5KSwg
MCwgbnVsbHB0ciB9OyB9KSkKIHsKLSAgICBtX3N0YWNrLnJlc2VydmVJbml0aWFsQ2FwYWNpdHko
Y2xpcERhdGFTdGFjay5zaXplKCkpOwotICAgIGZvciAoYXV0byYgY2xpcERhdGFFbnRyeSA6IGNs
aXBEYXRhU3RhY2spCi0gICAgICAgIG1fc3RhY2sudW5jaGVja2VkQXBwZW5kKHsgV1RGTW92ZShj
bGlwRGF0YUVudHJ5KSwgMCwgbnVsbHB0ciB9KTsKIH0KIAogYm9vbCBMYXllckFuY2VzdG9yQ2xp
cHBpbmdTdGFjazo6ZXF1YWxUb0NsaXBEYXRhKGNvbnN0IFZlY3RvcjxDb21wb3NpdGVkQ2xpcERh
dGE+JiBjbGlwRGF0YVN0YWNrKSBjb25zdApAQCAtMTY1LDEzICsxNjMsOSBAQCBib29sIExheWVy
QW5jZXN0b3JDbGlwcGluZ1N0YWNrOjp1cGRhdGVXaXRoQ2xpcERhdGEoU2Nyb2xsaW5nQ29vcmRp
bmF0b3IqIHNjcm9sbAogCiBWZWN0b3I8Q29tcG9zaXRlZENsaXBEYXRhPiBMYXllckFuY2VzdG9y
Q2xpcHBpbmdTdGFjazo6Y29tcG9zaXRlZENsaXBEYXRhKCkgY29uc3QKIHsKLSAgICBWZWN0b3I8
Q29tcG9zaXRlZENsaXBEYXRhPiBjbGlwRGF0YTsKLSAgICBjbGlwRGF0YS5yZXNlcnZlSW5pdGlh
bENhcGFjaXR5KG1fc3RhY2suc2l6ZSgpKTsKLQotICAgIGZvciAoY29uc3QgYXV0byYgZW50cnkg
OiBtX3N0YWNrKQotICAgICAgICBjbGlwRGF0YS51bmNoZWNrZWRBcHBlbmQoZW50cnkuY2xpcERh
dGEpOwotCi0gICAgcmV0dXJuIGNsaXBEYXRhOworICAgIHJldHVybiBtX3N0YWNrLm1hcChbXShh
dXRvJiBlbnRyeSkgeworICAgICAgICByZXR1cm4gZW50cnkuY2xpcERhdGE7CisgICAgfSk7CiB9
CiAKIHN0YXRpYyBUZXh0U3RyZWFtJiBvcGVyYXRvcjw8KFRleHRTdHJlYW0mIHRzLCBjb25zdCBM
YXllckFuY2VzdG9yQ2xpcHBpbmdTdGFjazo6Q2xpcHBpbmdTdGFja0VudHJ5JiBlbnRyeSkKZGlm
ZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9SZW5kZXJCb3hNb2RlbE9iamVjdC5j
cHAgYi9Tb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvUmVuZGVyQm94TW9kZWxPYmplY3QuY3BwCmlu
ZGV4IGJkYzFlNjJhN2E1YTA2NTQ1NWY1MWMzN2U4MzU3MDllY2YyMjZkZGIuLjg1MzBlMzM1NWYy
ZDZiOGQ3ZmZiNmVkZjgzZDYwOGJjYTRiOWY1NTUgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3Jl
L3JlbmRlcmluZy9SZW5kZXJCb3hNb2RlbE9iamVjdC5jcHAKKysrIGIvU291cmNlL1dlYkNvcmUv
cmVuZGVyaW5nL1JlbmRlckJveE1vZGVsT2JqZWN0LmNwcApAQCAtMjIxMywxMyArMjIxMyw5IEBA
IHZvaWQgUmVuZGVyQm94TW9kZWxPYmplY3Q6OmNsaXBCb3JkZXJTaWRlUG9seWdvbihHcmFwaGlj
c0NvbnRleHQmIGdyYXBoaWNzQ29udGV4CiAgICAgLy8gICAgICAgICAwLS0tLS0tLS0tLS0tLS0t
LTMKICAgICAvLwogICAgIFZlY3RvcjxGbG9hdFBvaW50PiBxdWFkOwotICAgIHF1YWQucmVzZXJ2
ZUluaXRpYWxDYXBhY2l0eSg0KTsKICAgICBzd2l0Y2ggKHNpZGUpIHsKICAgICBjYXNlIEJveFNp
ZGU6OlRvcDoKLSAgICAgICAgcXVhZC51bmNoZWNrZWRBcHBlbmQob3V0ZXJSZWN0Lm1pblhNaW5Z
Q29ybmVyKCkpOwotICAgICAgICBxdWFkLnVuY2hlY2tlZEFwcGVuZChpbm5lclJlY3QubWluWE1p
bllDb3JuZXIoKSk7Ci0gICAgICAgIHF1YWQudW5jaGVja2VkQXBwZW5kKGlubmVyUmVjdC5tYXhY
TWluWUNvcm5lcigpKTsKLSAgICAgICAgcXVhZC51bmNoZWNrZWRBcHBlbmQob3V0ZXJSZWN0Lm1h
eFhNaW5ZQ29ybmVyKCkpOworICAgICAgICBxdWFkID0geyBvdXRlclJlY3QubWluWE1pbllDb3Ju
ZXIoKSwgaW5uZXJSZWN0Lm1pblhNaW5ZQ29ybmVyKCksIGlubmVyUmVjdC5tYXhYTWluWUNvcm5l
cigpLCBvdXRlclJlY3QubWF4WE1pbllDb3JuZXIoKSB9OwogCiAgICAgICAgIGlmICghaW5uZXJC
b3JkZXIucmFkaWkoKS50b3BMZWZ0KCkuaXNaZXJvKCkpCiAgICAgICAgICAgICBmaW5kSW50ZXJz
ZWN0aW9uKG91dGVyUmVjdC5taW5YTWluWUNvcm5lcigpLCBpbm5lclJlY3QubWluWE1pbllDb3Ju
ZXIoKSwgaW5uZXJSZWN0Lm1pblhNYXhZQ29ybmVyKCksIGlubmVyUmVjdC5tYXhYTWluWUNvcm5l
cigpLCBxdWFkWzFdKTsKQEAgLTIyMjksMTAgKzIyMjUsNyBAQCB2b2lkIFJlbmRlckJveE1vZGVs
T2JqZWN0OjpjbGlwQm9yZGVyU2lkZVBvbHlnb24oR3JhcGhpY3NDb250ZXh0JiBncmFwaGljc0Nv
bnRleAogICAgICAgICBicmVhazsKIAogICAgIGNhc2UgQm94U2lkZTo6TGVmdDoKLSAgICAgICAg
cXVhZC51bmNoZWNrZWRBcHBlbmQob3V0ZXJSZWN0Lm1pblhNaW5ZQ29ybmVyKCkpOwotICAgICAg
ICBxdWFkLnVuY2hlY2tlZEFwcGVuZChpbm5lclJlY3QubWluWE1pbllDb3JuZXIoKSk7Ci0gICAg
ICAgIHF1YWQudW5jaGVja2VkQXBwZW5kKGlubmVyUmVjdC5taW5YTWF4WUNvcm5lcigpKTsKLSAg
ICAgICAgcXVhZC51bmNoZWNrZWRBcHBlbmQob3V0ZXJSZWN0Lm1pblhNYXhZQ29ybmVyKCkpOwor
ICAgICAgICBxdWFkID0geyBvdXRlclJlY3QubWluWE1pbllDb3JuZXIoKSwgaW5uZXJSZWN0Lm1p
blhNaW5ZQ29ybmVyKCksIGlubmVyUmVjdC5taW5YTWF4WUNvcm5lcigpLCBvdXRlclJlY3QubWlu
WE1heFlDb3JuZXIoKSB9OwogCiAgICAgICAgIGlmICghaW5uZXJCb3JkZXIucmFkaWkoKS50b3BM
ZWZ0KCkuaXNaZXJvKCkpCiAgICAgICAgICAgICBmaW5kSW50ZXJzZWN0aW9uKG91dGVyUmVjdC5t
aW5YTWluWUNvcm5lcigpLCBpbm5lclJlY3QubWluWE1pbllDb3JuZXIoKSwgaW5uZXJSZWN0Lm1p
blhNYXhZQ29ybmVyKCksIGlubmVyUmVjdC5tYXhYTWluWUNvcm5lcigpLCBxdWFkWzFdKTsKQEAg
LTIyNDIsMTAgKzIyMzUsNyBAQCB2b2lkIFJlbmRlckJveE1vZGVsT2JqZWN0OjpjbGlwQm9yZGVy
U2lkZVBvbHlnb24oR3JhcGhpY3NDb250ZXh0JiBncmFwaGljc0NvbnRleAogICAgICAgICBicmVh
azsKIAogICAgIGNhc2UgQm94U2lkZTo6Qm90dG9tOgotICAgICAgICBxdWFkLnVuY2hlY2tlZEFw
cGVuZChvdXRlclJlY3QubWluWE1heFlDb3JuZXIoKSk7Ci0gICAgICAgIHF1YWQudW5jaGVja2Vk
QXBwZW5kKGlubmVyUmVjdC5taW5YTWF4WUNvcm5lcigpKTsKLSAgICAgICAgcXVhZC51bmNoZWNr
ZWRBcHBlbmQoaW5uZXJSZWN0Lm1heFhNYXhZQ29ybmVyKCkpOwotICAgICAgICBxdWFkLnVuY2hl
Y2tlZEFwcGVuZChvdXRlclJlY3QubWF4WE1heFlDb3JuZXIoKSk7CisgICAgICAgIHF1YWQgPSB7
IG91dGVyUmVjdC5taW5YTWF4WUNvcm5lcigpLCBpbm5lclJlY3QubWluWE1heFlDb3JuZXIoKSwg
aW5uZXJSZWN0Lm1heFhNYXhZQ29ybmVyKCksIG91dGVyUmVjdC5tYXhYTWF4WUNvcm5lcigpIH07
CiAKICAgICAgICAgaWYgKCFpbm5lckJvcmRlci5yYWRpaSgpLmJvdHRvbUxlZnQoKS5pc1plcm8o
KSkKICAgICAgICAgICAgIGZpbmRJbnRlcnNlY3Rpb24ob3V0ZXJSZWN0Lm1pblhNYXhZQ29ybmVy
KCksIGlubmVyUmVjdC5taW5YTWF4WUNvcm5lcigpLCBpbm5lclJlY3QubWluWE1pbllDb3JuZXIo
KSwgaW5uZXJSZWN0Lm1heFhNYXhZQ29ybmVyKCksIHF1YWRbMV0pOwpAQCAtMjI1NSwxMCArMjI0
NSw3IEBAIHZvaWQgUmVuZGVyQm94TW9kZWxPYmplY3Q6OmNsaXBCb3JkZXJTaWRlUG9seWdvbihH
cmFwaGljc0NvbnRleHQmIGdyYXBoaWNzQ29udGV4CiAgICAgICAgIGJyZWFrOwogCiAgICAgY2Fz
ZSBCb3hTaWRlOjpSaWdodDoKLSAgICAgICAgcXVhZC51bmNoZWNrZWRBcHBlbmQob3V0ZXJSZWN0
Lm1heFhNaW5ZQ29ybmVyKCkpOwotICAgICAgICBxdWFkLnVuY2hlY2tlZEFwcGVuZChpbm5lclJl
Y3QubWF4WE1pbllDb3JuZXIoKSk7Ci0gICAgICAgIHF1YWQudW5jaGVja2VkQXBwZW5kKGlubmVy
UmVjdC5tYXhYTWF4WUNvcm5lcigpKTsKLSAgICAgICAgcXVhZC51bmNoZWNrZWRBcHBlbmQob3V0
ZXJSZWN0Lm1heFhNYXhZQ29ybmVyKCkpOworICAgICAgICBxdWFkID0geyBvdXRlclJlY3QubWF4
WE1pbllDb3JuZXIoKSwgaW5uZXJSZWN0Lm1heFhNaW5ZQ29ybmVyKCksIGlubmVyUmVjdC5tYXhY
TWF4WUNvcm5lcigpLCBvdXRlclJlY3QubWF4WE1heFlDb3JuZXIoKSB9OwogCiAgICAgICAgIGlm
ICghaW5uZXJCb3JkZXIucmFkaWkoKS50b3BSaWdodCgpLmlzWmVybygpKQogICAgICAgICAgICAg
ZmluZEludGVyc2VjdGlvbihvdXRlclJlY3QubWF4WE1pbllDb3JuZXIoKSwgaW5uZXJSZWN0Lm1h
eFhNaW5ZQ29ybmVyKCksIGlubmVyUmVjdC5taW5YTWluWUNvcm5lcigpLCBpbm5lclJlY3QubWF4
WE1heFlDb3JuZXIoKSwgcXVhZFsxXSk7CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9yZW5k
ZXJpbmcvUmVuZGVyRWxlbWVudC5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvUmVuZGVy
RWxlbWVudC5jcHAKaW5kZXggNGU3NTlkN2YyNTBhZjk4YTQ4MDY0ZTQ2Njc3NzNlNzY4MzVmYjlh
MS4uZmJiOGI4NmUzZmUzNmM1M2Q5NmIyMzRmYzFlMTBjNDU4ZTk4M2E1NSAxMDA2NDQKLS0tIGEv
U291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL1JlbmRlckVsZW1lbnQuY3BwCisrKyBiL1NvdXJjZS9X
ZWJDb3JlL3JlbmRlcmluZy9SZW5kZXJFbGVtZW50LmNwcApAQCAtMTk2OCwzMSArMTk2OCwzOCBA
QCB2b2lkIFJlbmRlckVsZW1lbnQ6OmRyYXdMaW5lRm9yQm94U2lkZShHcmFwaGljc0NvbnRleHQm
IGdyYXBoaWNzQ29udGV4dCwgY29uc3QgRgogICAgICAgICB5MiA9IHJvdW5kVG9EZXZpY2VQaXhl
bCh5MiwgZGV2aWNlU2NhbGVGYWN0b3IpOwogCiAgICAgICAgIFZlY3RvcjxGbG9hdFBvaW50PiBx
dWFkOwotICAgICAgICBxdWFkLnJlc2VydmVJbml0aWFsQ2FwYWNpdHkoNCk7CiAgICAgICAgIHN3
aXRjaCAoc2lkZSkgewogICAgICAgICBjYXNlIEJveFNpZGU6OlRvcDoKLSAgICAgICAgICAgIHF1
YWQudW5jaGVja2VkQXBwZW5kKHsgeDEgKyBzdGQ6Om1heDxmbG9hdD4oLWFkamFjZW50V2lkdGgx
LCAwKSwgeTEgfSk7Ci0gICAgICAgICAgICBxdWFkLnVuY2hlY2tlZEFwcGVuZCh7IHgxICsgc3Rk
OjptYXg8ZmxvYXQ+KCBhZGphY2VudFdpZHRoMSwgMCksIHkyIH0pOwotICAgICAgICAgICAgcXVh
ZC51bmNoZWNrZWRBcHBlbmQoeyB4MiAtIHN0ZDo6bWF4PGZsb2F0PiggYWRqYWNlbnRXaWR0aDIs
IDApLCB5MiB9KTsKLSAgICAgICAgICAgIHF1YWQudW5jaGVja2VkQXBwZW5kKHsgeDIgLSBzdGQ6
Om1heDxmbG9hdD4oLWFkamFjZW50V2lkdGgyLCAwKSwgeTEgfSk7CisgICAgICAgICAgICBxdWFk
ID0geworICAgICAgICAgICAgICAgIHsgeDEgKyBzdGQ6Om1heDxmbG9hdD4oLWFkamFjZW50V2lk
dGgxLCAwKSwgeTEgfSwKKyAgICAgICAgICAgICAgICB7IHgxICsgc3RkOjptYXg8ZmxvYXQ+KGFk
amFjZW50V2lkdGgxLCAwKSwgeTIgfSwKKyAgICAgICAgICAgICAgICB7IHgyIC0gc3RkOjptYXg8
ZmxvYXQ+KGFkamFjZW50V2lkdGgyLCAwKSwgeTIgfSwKKyAgICAgICAgICAgICAgICB7IHgyIC0g
c3RkOjptYXg8ZmxvYXQ+KC1hZGphY2VudFdpZHRoMiwgMCksIHkxIH0KKyAgICAgICAgICAgIH07
CiAgICAgICAgICAgICBicmVhazsKICAgICAgICAgY2FzZSBCb3hTaWRlOjpCb3R0b206Ci0gICAg
ICAgICAgICBxdWFkLnVuY2hlY2tlZEFwcGVuZCh7IHgxICsgc3RkOjptYXg8ZmxvYXQ+KCBhZGph
Y2VudFdpZHRoMSwgMCksIHkxIH0pOwotICAgICAgICAgICAgcXVhZC51bmNoZWNrZWRBcHBlbmQo
eyB4MSArIHN0ZDo6bWF4PGZsb2F0PigtYWRqYWNlbnRXaWR0aDEsIDApLCB5MiB9KTsKLSAgICAg
ICAgICAgIHF1YWQudW5jaGVja2VkQXBwZW5kKHsgeDIgLSBzdGQ6Om1heDxmbG9hdD4oLWFkamFj
ZW50V2lkdGgyLCAwKSwgeTIgfSk7Ci0gICAgICAgICAgICBxdWFkLnVuY2hlY2tlZEFwcGVuZCh7
IHgyIC0gc3RkOjptYXg8ZmxvYXQ+KCBhZGphY2VudFdpZHRoMiwgMCksIHkxIH0pOworICAgICAg
ICAgICAgcXVhZCA9IHsKKyAgICAgICAgICAgICAgICB7IHgxICsgc3RkOjptYXg8ZmxvYXQ+KGFk
amFjZW50V2lkdGgxLCAwKSwgeTEgfSwKKyAgICAgICAgICAgICAgICB7IHgxICsgc3RkOjptYXg8
ZmxvYXQ+KC1hZGphY2VudFdpZHRoMSwgMCksIHkyIH0sCisgICAgICAgICAgICAgICAgeyB4MiAt
IHN0ZDo6bWF4PGZsb2F0PigtYWRqYWNlbnRXaWR0aDIsIDApLCB5MiB9LAorICAgICAgICAgICAg
ICAgIHsgeDIgLSBzdGQ6Om1heDxmbG9hdD4oYWRqYWNlbnRXaWR0aDIsIDApLCB5MSB9CisgICAg
ICAgICAgICB9OwogICAgICAgICAgICAgYnJlYWs7CiAgICAgICAgIGNhc2UgQm94U2lkZTo6TGVm
dDoKLSAgICAgICAgICAgIHF1YWQudW5jaGVja2VkQXBwZW5kKHsgeDEsIHkxICsgc3RkOjptYXg8
ZmxvYXQ+KC1hZGphY2VudFdpZHRoMSwgMCkgfSk7Ci0gICAgICAgICAgICBxdWFkLnVuY2hlY2tl
ZEFwcGVuZCh7IHgxLCB5MiAtIHN0ZDo6bWF4PGZsb2F0PigtYWRqYWNlbnRXaWR0aDIsIDApIH0p
OwotICAgICAgICAgICAgcXVhZC51bmNoZWNrZWRBcHBlbmQoeyB4MiwgeTIgLSBzdGQ6Om1heDxm
bG9hdD4oIGFkamFjZW50V2lkdGgyLCAwKSB9KTsKLSAgICAgICAgICAgIHF1YWQudW5jaGVja2Vk
QXBwZW5kKHsgeDIsIHkxICsgc3RkOjptYXg8ZmxvYXQ+KCBhZGphY2VudFdpZHRoMSwgMCkgfSk7
CisgICAgICAgICAgICBxdWFkID0geworICAgICAgICAgICAgICAgIHsgeDEsIHkxICsgc3RkOjpt
YXg8ZmxvYXQ+KC1hZGphY2VudFdpZHRoMSwgMCkgfSwKKyAgICAgICAgICAgICAgICB7IHgxLCB5
MiAtIHN0ZDo6bWF4PGZsb2F0PigtYWRqYWNlbnRXaWR0aDIsIDApIH0sCisgICAgICAgICAgICAg
ICAgeyB4MiwgeTIgLSBzdGQ6Om1heDxmbG9hdD4oYWRqYWNlbnRXaWR0aDIsIDApIH0sCisgICAg
ICAgICAgICAgICAgeyB4MiwgeTEgKyBzdGQ6Om1heDxmbG9hdD4oYWRqYWNlbnRXaWR0aDEsIDAp
IH0KKyAgICAgICAgICAgIH07CiAgICAgICAgICAgICBicmVhazsKICAgICAgICAgY2FzZSBCb3hT
aWRlOjpSaWdodDoKLSAgICAgICAgICAgIHF1YWQudW5jaGVja2VkQXBwZW5kKHsgeDEsIHkxICsg
c3RkOjptYXg8ZmxvYXQ+KCBhZGphY2VudFdpZHRoMSwgMCkgfSk7Ci0gICAgICAgICAgICBxdWFk
LnVuY2hlY2tlZEFwcGVuZCh7IHgxLCB5MiAtIHN0ZDo6bWF4PGZsb2F0PiggYWRqYWNlbnRXaWR0
aDIsIDApIH0pOwotICAgICAgICAgICAgcXVhZC51bmNoZWNrZWRBcHBlbmQoeyB4MiwgeTIgLSBz
dGQ6Om1heDxmbG9hdD4oLWFkamFjZW50V2lkdGgyLCAwKSB9KTsKLSAgICAgICAgICAgIHF1YWQu
dW5jaGVja2VkQXBwZW5kKHsgeDIsIHkxICsgc3RkOjptYXg8ZmxvYXQ+KC1hZGphY2VudFdpZHRo
MSwgMCkgfSk7CisgICAgICAgICAgICBxdWFkID0geworICAgICAgICAgICAgICAgIHsgeDEsIHkx
ICsgc3RkOjptYXg8ZmxvYXQ+KGFkamFjZW50V2lkdGgxLCAwKSB9LAorICAgICAgICAgICAgICAg
IHsgeDEsIHkyIC0gc3RkOjptYXg8ZmxvYXQ+KGFkamFjZW50V2lkdGgyLCAwKSB9LAorICAgICAg
ICAgICAgICAgIHsgeDIsIHkyIC0gc3RkOjptYXg8ZmxvYXQ+KC1hZGphY2VudFdpZHRoMiwgMCkg
fSwKKyAgICAgICAgICAgICAgICB7IHgyLCB5MSArIHN0ZDo6bWF4PGZsb2F0PigtYWRqYWNlbnRX
aWR0aDEsIDApIH0KKyAgICAgICAgICAgIH07CiAgICAgICAgICAgICBicmVhazsKICAgICAgICAg
fQogCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvUmVuZGVyR3JpZC5jcHAg
Yi9Tb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvUmVuZGVyR3JpZC5jcHAKaW5kZXggN2ZmYjYyMzc0
OGYwMGY2NmZiN2JlODVmYjllOTUzM2U1NzQxMWVmMS4uYmViMWM5M2ViYTgzNWIzYjU3YzkxNDZm
MGUwNzY0OTYxYzAxN2Y1YiAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL1Jl
bmRlckdyaWQuY3BwCisrKyBiL1NvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9SZW5kZXJHcmlkLmNw
cApAQCAtOTIxLDEwICs5MjEsMTAgQEAgVmVjdG9yPExheW91dFVuaXQ+IFJlbmRlckdyaWQ6OnRy
YWNrU2l6ZXNGb3JDb21wdXRlZFN0eWxlKEdyaWRUcmFja1NpemluZ0RpcmVjdGkKICAgICBBU1NF
UlQoIW1fZ3JpZC5uZWVkc0l0ZW1zUGxhY2VtZW50KCkpOwogICAgIGJvb2wgaGFzQ29sbGFwc2Vk
VHJhY2tzID0gbV9ncmlkLmhhc0F1dG9SZXBlYXRFbXB0eVRyYWNrcyhkaXJlY3Rpb24pOwogICAg
IExheW91dFVuaXQgZ2FwID0gIWhhc0NvbGxhcHNlZFRyYWNrcyA/IGdyaWRHYXAoZGlyZWN0aW9u
KSA6IDBfbHU7Ci0gICAgdHJhY2tzLnJlc2VydmVDYXBhY2l0eShudW1Qb3NpdGlvbnMgLSAxKTsK
KyAgICB0cmFja3MucmVzZXJ2ZUluaXRpYWxDYXBhY2l0eShudW1Qb3NpdGlvbnMgLSAxKTsKICAg
ICBmb3IgKHNpemVfdCBpID0gMDsgaSA8IG51bVBvc2l0aW9ucyAtIDI7ICsraSkKLSAgICAgICAg
dHJhY2tzLmFwcGVuZChwb3NpdGlvbnNbaSArIDFdIC0gcG9zaXRpb25zW2ldIC0gb2Zmc2V0QmV0
d2VlblRyYWNrcyAtIGdhcCk7Ci0gICAgdHJhY2tzLmFwcGVuZChwb3NpdGlvbnNbbnVtUG9zaXRp
b25zIC0gMV0gLSBwb3NpdGlvbnNbbnVtUG9zaXRpb25zIC0gMl0pOworICAgICAgICB0cmFja3Mu
dW5jaGVja2VkQXBwZW5kKHBvc2l0aW9uc1tpICsgMV0gLSBwb3NpdGlvbnNbaV0gLSBvZmZzZXRC
ZXR3ZWVuVHJhY2tzIC0gZ2FwKTsKKyAgICB0cmFja3MudW5jaGVja2VkQXBwZW5kKHBvc2l0aW9u
c1tudW1Qb3NpdGlvbnMgLSAxXSAtIHBvc2l0aW9uc1tudW1Qb3NpdGlvbnMgLSAyXSk7CiAKICAg
ICBpZiAoIWhhc0NvbGxhcHNlZFRyYWNrcykKICAgICAgICAgcmV0dXJuIHRyYWNrczsKZGlmZiAt
LWdpdCBhL1NvdXJjZS9XZWJDb3JlL3N0eWxlL0NsYXNzQ2hhbmdlSW52YWxpZGF0aW9uLmNwcCBi
L1NvdXJjZS9XZWJDb3JlL3N0eWxlL0NsYXNzQ2hhbmdlSW52YWxpZGF0aW9uLmNwcAppbmRleCAw
MTgwMjNlNTY4MDEwNjY1ZGUyM2MxZDIzZTQwZDUzNGQwMjY1NDI4Li5mNjc1MjA5YmE5YzMxNzY3
MzM3ZDM0ZDI3ZTMzNmE5OThiMTE4ZDdiIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9zdHls
ZS9DbGFzc0NoYW5nZUludmFsaWRhdGlvbi5jcHAKKysrIGIvU291cmNlL1dlYkNvcmUvc3R5bGUv
Q2xhc3NDaGFuZ2VJbnZhbGlkYXRpb24uY3BwCkBAIC00Niw3ICs0Niw3IEBAIHVzaW5nIENsYXNz
Q2hhbmdlVmVjdG9yID0gVmVjdG9yPENsYXNzQ2hhbmdlLCA0PjsKIHN0YXRpYyBDbGFzc0NoYW5n
ZVZlY3RvciBjb2xsZWN0Q2xhc3Nlcyhjb25zdCBTcGFjZVNwbGl0U3RyaW5nJiBjbGFzc2VzLCBD
bGFzc0NoYW5nZVR5cGUgY2hhbmdlVHlwZSkKIHsKICAgICBDbGFzc0NoYW5nZVZlY3RvciByZXN1
bHQ7Ci0gICAgcmVzdWx0LnJlc2VydmVDYXBhY2l0eShjbGFzc2VzLnNpemUoKSk7CisgICAgcmVz
dWx0LnJlc2VydmVJbml0aWFsQ2FwYWNpdHkoY2xhc3Nlcy5zaXplKCkpOwogICAgIGZvciAodW5z
aWduZWQgaSA9IDA7IGkgPCBjbGFzc2VzLnNpemUoKTsgKytpKQogICAgICAgICByZXN1bHQudW5j
aGVja2VkQXBwZW5kKHsgY2xhc3Nlc1tpXS5pbXBsKCksIGNoYW5nZVR5cGUgfSk7CiAgICAgcmV0
dXJuIHJlc3VsdDsKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3N0eWxlL1N0eWxlQnVpbGRl
ckNvbnZlcnRlci5oIGIvU291cmNlL1dlYkNvcmUvc3R5bGUvU3R5bGVCdWlsZGVyQ29udmVydGVy
LmgKaW5kZXggMTgyMzcyZjA5YjgwZjIxOGM5ZDE5NmNjNDJhNzU5MGRmMzI3YmMzNC4uMmY4MzRk
ZjY3ZDgwY2IxM2RkNGM5MTU1MWJhZDEyZGIxYjIzYTI0OSAxMDA2NDQKLS0tIGEvU291cmNlL1dl
YkNvcmUvc3R5bGUvU3R5bGVCdWlsZGVyQ29udmVydGVyLmgKKysrIGIvU291cmNlL1dlYkNvcmUv
c3R5bGUvU3R5bGVCdWlsZGVyQ29udmVydGVyLmgKQEAgLTM1NSwxMiArMzU1LDEyIEBAIGlubGlu
ZSBMZW5ndGggQnVpbGRlckNvbnZlcnRlcjo6Y29udmVydFRvMTAwUGVyY2VudE1pbnVzTGVuZ3Ro
KGNvbnN0IExlbmd0aCYgbGVuCiAgICAgICAgIHJldHVybiBMZW5ndGgoMTAwIC0gbGVuZ3RoLnZh
bHVlKCksIExlbmd0aFR5cGU6OlBlcmNlbnQpOwogICAgIAogICAgIC8vIFR1cm4gdGhpcyBpbnRv
IGEgY2FsYyBleHByZXNzaW9uOiBjYWxjKDEwMCUgLSBsZW5ndGgpCi0gICAgVmVjdG9yPHN0ZDo6
dW5pcXVlX3B0cjxDYWxjRXhwcmVzc2lvbk5vZGU+PiBsZW5ndGhzOwotICAgIGxlbmd0aHMucmVz
ZXJ2ZUluaXRpYWxDYXBhY2l0eSgyKTsKLSAgICBsZW5ndGhzLnVuY2hlY2tlZEFwcGVuZChtYWtl
VW5pcXVlPENhbGNFeHByZXNzaW9uTGVuZ3RoPihMZW5ndGgoMTAwLCBMZW5ndGhUeXBlOjpQZXJj
ZW50KSkpOwotICAgIGxlbmd0aHMudW5jaGVja2VkQXBwZW5kKG1ha2VVbmlxdWU8Q2FsY0V4cHJl
c3Npb25MZW5ndGg+KGxlbmd0aCkpOwotICAgIGF1dG8gb3AgPSBtYWtlVW5pcXVlPENhbGNFeHBy
ZXNzaW9uT3BlcmF0aW9uPihXVEZNb3ZlKGxlbmd0aHMpLCBDYWxjT3BlcmF0b3I6OlN1YnRyYWN0
KTsKLSAgICByZXR1cm4gTGVuZ3RoKENhbGN1bGF0aW9uVmFsdWU6OmNyZWF0ZShXVEZNb3ZlKG9w
KSwgVmFsdWVSYW5nZTo6QWxsKSk7CisgICAgYXV0byBsZW5ndGhzID0gVmVjdG9yPHN0ZDo6dW5p
cXVlX3B0cjxDYWxjRXhwcmVzc2lvbk5vZGU+Pjo6ZnJvbSgKKyAgICAgICAgbWFrZVVuaXF1ZTxD
YWxjRXhwcmVzc2lvbkxlbmd0aD4oTGVuZ3RoKDEwMCwgTGVuZ3RoVHlwZTo6UGVyY2VudCkpLAor
ICAgICAgICBtYWtlVW5pcXVlPENhbGNFeHByZXNzaW9uTGVuZ3RoPihsZW5ndGgpCisgICAgKTsK
KyAgICBhdXRvIG9wZXJhdGlvbiA9IG1ha2VVbmlxdWU8Q2FsY0V4cHJlc3Npb25PcGVyYXRpb24+
KFdURk1vdmUobGVuZ3RocyksIENhbGNPcGVyYXRvcjo6U3VidHJhY3QpOworICAgIHJldHVybiBM
ZW5ndGgoQ2FsY3VsYXRpb25WYWx1ZTo6Y3JlYXRlKFdURk1vdmUob3BlcmF0aW9uKSwgVmFsdWVS
YW5nZTo6QWxsKSk7CiB9CiAKIGlubGluZSBMZW5ndGggQnVpbGRlckNvbnZlcnRlcjo6Y29udmVy
dFBvc2l0aW9uQ29tcG9uZW50WChCdWlsZGVyU3RhdGUmIGJ1aWxkZXJTdGF0ZSwgY29uc3QgQ1NT
VmFsdWUmIHZhbHVlKQpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvdGVzdGluZy9Nb2NrQ0RN
RmFjdG9yeS5jcHAgYi9Tb3VyY2UvV2ViQ29yZS90ZXN0aW5nL01vY2tDRE1GYWN0b3J5LmNwcApp
bmRleCAyMDUyNzk1NTI4MzZlMDQ0ZGQ3YzJhOGVhMzIxNjgyZDkxNzkzOGMwLi5iMjE1ZTBkMGE4
MTRlNWRhODcyZWEwNDM3MzIzOTk2MTJiOGE2YTNiIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29y
ZS90ZXN0aW5nL01vY2tDRE1GYWN0b3J5LmNwcAorKysgYi9Tb3VyY2UvV2ViQ29yZS90ZXN0aW5n
L01vY2tDRE1GYWN0b3J5LmNwcApAQCAtMzQzLDEyICszNDMsOSBAQCB2b2lkIE1vY2tDRE1JbnN0
YW5jZVNlc3Npb246OnVwZGF0ZUxpY2Vuc2UoY29uc3QgU3RyaW5nJiBzZXNzaW9uSUQsIExpY2Vu
c2VUeXBlLAogICAgIGlmIChyZXNwb25zZVZlY3Rvci5jb250YWlucyhTdHJpbmcoImtleXMtY2hh
bmdlZCJfcykpKSB7CiAgICAgICAgIGNvbnN0IGF1dG8qIGtleXMgPSBmYWN0b3J5LT5rZXlzRm9y
U2Vzc2lvbldpdGhJRChzZXNzaW9uSUQpOwogICAgICAgICBpZiAoa2V5cykgewotICAgICAgICAg
ICAgS2V5U3RhdHVzVmVjdG9yIGtleVN0YXR1c1ZlY3RvcjsKLSAgICAgICAgICAgIGtleVN0YXR1
c1ZlY3Rvci5yZXNlcnZlSW5pdGlhbENhcGFjaXR5KGtleXMtPnNpemUoKSk7Ci0gICAgICAgICAg
ICBmb3IgKGF1dG8mIGtleSA6ICprZXlzKQotICAgICAgICAgICAgICAgIGtleVN0YXR1c1ZlY3Rv
ci51bmNoZWNrZWRBcHBlbmQoeyBrZXkuY29weVJlZigpLCBLZXlTdGF0dXM6OlVzYWJsZSB9KTsK
LQotICAgICAgICAgICAgY2hhbmdlZEtleXMgPSBXVEZNb3ZlKGtleVN0YXR1c1ZlY3Rvcik7Cisg
ICAgICAgICAgICBjaGFuZ2VkS2V5cyA9IGtleXMtPm1hcChbXShhdXRvJiBrZXkpIHsKKyAgICAg
ICAgICAgICAgICByZXR1cm4gc3RkOjptYWtlX3BhaXIoa2V5LmNvcHlSZWYoKSwgS2V5U3RhdHVz
OjpVc2FibGUpOworICAgICAgICAgICAgfSk7CiAgICAgICAgIH0KICAgICB9CiAKQEAgLTM5NSwx
MCArMzkyLDkgQEAgdm9pZCBNb2NrQ0RNSW5zdGFuY2VTZXNzaW9uOjpyZW1vdmVTZXNzaW9uRGF0
YShjb25zdCBTdHJpbmcmIGlkLCBMaWNlbnNlVHlwZSwgUmUKICAgICB9CiAKICAgICBhdXRvIGtl
eXMgPSBmYWN0b3J5LT5yZW1vdmVLZXlzRnJvbVNlc3Npb25XaXRoSUQoaWQpOwotICAgIEtleVN0
YXR1c1ZlY3RvciBrZXlTdGF0dXNWZWN0b3I7Ci0gICAga2V5U3RhdHVzVmVjdG9yLnJlc2VydmVJ
bml0aWFsQ2FwYWNpdHkoa2V5cy5zaXplKCkpOwotICAgIGZvciAoYXV0byYga2V5IDoga2V5cykK
LSAgICAgICAga2V5U3RhdHVzVmVjdG9yLnVuY2hlY2tlZEFwcGVuZCh7IFdURk1vdmUoa2V5KSwg
S2V5U3RhdHVzOjpSZWxlYXNlZCB9KTsKKyAgICBhdXRvIGtleVN0YXR1c1ZlY3RvciA9IFdURjo6
bWFwKFdURk1vdmUoa2V5cyksIFtdKGF1dG8mJiBrZXkpIHsKKyAgICAgICAgcmV0dXJuIHN0ZDo6
bWFrZV9wYWlyKFdURk1vdmUoa2V5KSwgS2V5U3RhdHVzOjpSZWxlYXNlZCk7CisgICAgfSk7CiAK
ICAgICBDU3RyaW5nIG1lc3NhZ2UgeyAicmVtb3ZlLW1lc3NhZ2UiIH07CiAgICAgY2FsbGJhY2so
V1RGTW92ZShrZXlTdGF0dXNWZWN0b3IpLCBTaGFyZWRCdWZmZXI6OmNyZWF0ZShtZXNzYWdlLmRh
dGEoKSwgbWVzc2FnZS5sZW5ndGgoKSksIFN1Y2Nlc3NWYWx1ZTo6U3VjY2VlZGVkKTsKZGlmZiAt
LWdpdCBhL1NvdXJjZS9XZWJDb3JlL3dvcmtlcnMvc2VydmljZS9zZXJ2ZXIvU1dTZXJ2ZXIuY3Bw
IGIvU291cmNlL1dlYkNvcmUvd29ya2Vycy9zZXJ2aWNlL3NlcnZlci9TV1NlcnZlci5jcHAKaW5k
ZXggNjU0ZjFhYzcwMWIzZjU4YTM3ZGFjMTQ3MWRiOWQ4NTJkYjJkZGJiZS4uNDg1YTgzMDg1NWNk
NGJhYzAzZWQ4M2U2NjQ3ODhiMjgxNjRmNDBkMSAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUv
d29ya2Vycy9zZXJ2aWNlL3NlcnZlci9TV1NlcnZlci5jcHAKKysrIGIvU291cmNlL1dlYkNvcmUv
d29ya2Vycy9zZXJ2aWNlL3NlcnZlci9TV1NlcnZlci5jcHAKQEAgLTI1MiwxMSArMjUyLDkgQEAg
VmVjdG9yPFNlcnZpY2VXb3JrZXJSZWdpc3RyYXRpb25EYXRhPiBTV1NlcnZlcjo6Z2V0UmVnaXN0
cmF0aW9ucyhjb25zdCBTZWN1cml0eU8KICAgICBzdGQ6OnNvcnQobWF0Y2hpbmdSZWdpc3RyYXRp
b25zLmJlZ2luKCksIG1hdGNoaW5nUmVnaXN0cmF0aW9ucy5lbmQoKSwgW10oYXV0byYgYSwgYXV0
byYgYikgewogICAgICAgICByZXR1cm4gYS0+Y3JlYXRpb25UaW1lKCkgPCBiLT5jcmVhdGlvblRp
bWUoKTsKICAgICB9KTsKLSAgICBWZWN0b3I8U2VydmljZVdvcmtlclJlZ2lzdHJhdGlvbkRhdGE+
IG1hdGNoaW5nUmVnaXN0cmF0aW9uRGF0YXM7Ci0gICAgbWF0Y2hpbmdSZWdpc3RyYXRpb25EYXRh
cy5yZXNlcnZlSW5pdGlhbENhcGFjaXR5KG1hdGNoaW5nUmVnaXN0cmF0aW9ucy5zaXplKCkpOwot
ICAgIGZvciAoYXV0byogcmVnaXN0cmF0aW9uIDogbWF0Y2hpbmdSZWdpc3RyYXRpb25zKQotICAg
ICAgICBtYXRjaGluZ1JlZ2lzdHJhdGlvbkRhdGFzLnVuY2hlY2tlZEFwcGVuZChyZWdpc3RyYXRp
b24tPmRhdGEoKSk7Ci0gICAgcmV0dXJuIG1hdGNoaW5nUmVnaXN0cmF0aW9uRGF0YXM7CisgICAg
cmV0dXJuIG1hdGNoaW5nUmVnaXN0cmF0aW9ucy5tYXAoW10oYXV0byYgcmVnaXN0cmF0aW9uKSB7
CisgICAgICAgIHJldHVybiByZWdpc3RyYXRpb24tPmRhdGEoKTsKKyAgICB9KTsKIH0KIAogdm9p
ZCBTV1NlcnZlcjo6Y2xlYXJBbGwoQ29tcGxldGlvbkhhbmRsZXI8dm9pZCgpPiYmIGNvbXBsZXRp
b25IYW5kbGVyKQpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYktpdC9OZXR3b3JrUHJvY2Vzcy9XZWJT
dG9yYWdlL0xvY2FsU3RvcmFnZURhdGFiYXNlVHJhY2tlci5jcHAgYi9Tb3VyY2UvV2ViS2l0L05l
dHdvcmtQcm9jZXNzL1dlYlN0b3JhZ2UvTG9jYWxTdG9yYWdlRGF0YWJhc2VUcmFja2VyLmNwcApp
bmRleCBhYTMwYTZhMDRmYjAwMjlhOTU3NmY3N2M4YWQ4OGVkMzZiNzc2NzFlLi4zYWFhM2M0ODBl
NWY2YTk1MzBkZjhkOGNjZWJhMmU1NzllMDAyODEwIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViS2l0
L05ldHdvcmtQcm9jZXNzL1dlYlN0b3JhZ2UvTG9jYWxTdG9yYWdlRGF0YWJhc2VUcmFja2VyLmNw
cAorKysgYi9Tb3VyY2UvV2ViS2l0L05ldHdvcmtQcm9jZXNzL1dlYlN0b3JhZ2UvTG9jYWxTdG9y
YWdlRGF0YWJhc2VUcmFja2VyLmNwcApAQCAtMTE5LDIxICsxMTksMTQgQEAgVmVjdG9yPFNlY3Vy
aXR5T3JpZ2luRGF0YT4gTG9jYWxTdG9yYWdlRGF0YWJhc2VUcmFja2VyOjpvcmlnaW5zKCkgY29u
c3QKIAogVmVjdG9yPExvY2FsU3RvcmFnZURhdGFiYXNlVHJhY2tlcjo6T3JpZ2luRGV0YWlscz4g
TG9jYWxTdG9yYWdlRGF0YWJhc2VUcmFja2VyOjpvcmlnaW5EZXRhaWxzQ3Jvc3NUaHJlYWRDb3B5
KCkKIHsKLSAgICBWZWN0b3I8T3JpZ2luRGV0YWlscz4gcmVzdWx0OwotICAgIGF1dG8gZGF0YWJh
c2VPcmlnaW5zID0gb3JpZ2lucygpOwotICAgIHJlc3VsdC5yZXNlcnZlSW5pdGlhbENhcGFjaXR5
KGRhdGFiYXNlT3JpZ2lucy5zaXplKCkpOwotCi0gICAgZm9yIChjb25zdCBhdXRvJiBvcmlnaW4g
OiBkYXRhYmFzZU9yaWdpbnMpIHsKLSAgICAgICAgU3RyaW5nIHBhdGggPSBkYXRhYmFzZVBhdGgo
b3JpZ2luKTsKLQotICAgICAgICBPcmlnaW5EZXRhaWxzIGRldGFpbHM7Ci0gICAgICAgIGRldGFp
bHMub3JpZ2luSWRlbnRpZmllciA9IGNyb3NzVGhyZWFkQ29weShvcmlnaW4uZGF0YWJhc2VJZGVu
dGlmaWVyKCkpOwotICAgICAgICBkZXRhaWxzLmNyZWF0aW9uVGltZSA9IFNRTGl0ZUZpbGVTeXN0
ZW06OmRhdGFiYXNlQ3JlYXRpb25UaW1lKHBhdGgpOwotICAgICAgICBkZXRhaWxzLm1vZGlmaWNh
dGlvblRpbWUgPSBTUUxpdGVGaWxlU3lzdGVtOjpkYXRhYmFzZU1vZGlmaWNhdGlvblRpbWUocGF0
aCk7Ci0gICAgICAgIHJlc3VsdC51bmNoZWNrZWRBcHBlbmQoV1RGTW92ZShkZXRhaWxzKSk7Ci0g
ICAgfQotCi0gICAgcmV0dXJuIHJlc3VsdDsKKyAgICByZXR1cm4gb3JpZ2lucygpLm1hcChbdGhp
c10oYXV0byYgb3JpZ2luKSB7CisgICAgICAgIGF1dG8gcGF0aCA9IGRhdGFiYXNlUGF0aChvcmln
aW4pOworICAgICAgICByZXR1cm4gT3JpZ2luRGV0YWlscyB7CisgICAgICAgICAgICBjcm9zc1Ro
cmVhZENvcHkob3JpZ2luLmRhdGFiYXNlSWRlbnRpZmllcigpKSwKKyAgICAgICAgICAgIFNRTGl0
ZUZpbGVTeXN0ZW06OmRhdGFiYXNlQ3JlYXRpb25UaW1lKHBhdGgpLAorICAgICAgICAgICAgU1FM
aXRlRmlsZVN5c3RlbTo6ZGF0YWJhc2VNb2RpZmljYXRpb25UaW1lKHBhdGgpCisgICAgICAgIH07
CisgICAgfSk7CiB9CiAKIFN0cmluZyBMb2NhbFN0b3JhZ2VEYXRhYmFzZVRyYWNrZXI6OmRhdGFi
YXNlUGF0aChjb25zdCBTdHJpbmcmIGZpbGVuYW1lKSBjb25zdApkaWZmIC0tZ2l0IGEvU291cmNl
L1dlYktpdC9OZXR3b3JrUHJvY2Vzcy9jYWNoZS9DYWNoZVN0b3JhZ2VFbmdpbmVDYWNoZXMuY3Bw
IGIvU291cmNlL1dlYktpdC9OZXR3b3JrUHJvY2Vzcy9jYWNoZS9DYWNoZVN0b3JhZ2VFbmdpbmVD
YWNoZXMuY3BwCmluZGV4IGMzMGMzYmU3YzVjNTUzYmYyMzI4ZDk1MWI3NzQ0NDQxM2IzMmQ2YTUu
LmQ3NWM1ODRkM2YwYTBlZGQwYWUyNzUzYjJlYzIwNmZmODRiMzBmMmYgMTAwNjQ0Ci0tLSBhL1Nv
dXJjZS9XZWJLaXQvTmV0d29ya1Byb2Nlc3MvY2FjaGUvQ2FjaGVTdG9yYWdlRW5naW5lQ2FjaGVz
LmNwcAorKysgYi9Tb3VyY2UvV2ViS2l0L05ldHdvcmtQcm9jZXNzL2NhY2hlL0NhY2hlU3RvcmFn
ZUVuZ2luZUNhY2hlcy5jcHAKQEAgLTY1OCw5ICs2NTgsOSBAQCB2b2lkIENhY2hlczo6Y2FjaGVJ
bmZvcyh1aW50NjRfdCB1cGRhdGVDb3VudGVyLCBDYWNoZUluZm9zQ2FsbGJhY2smJiBjYWxsYmFj
aykKIAogICAgIFZlY3RvcjxDYWNoZUluZm8+IGNhY2hlSW5mb3M7CiAgICAgaWYgKGlzRGlydHko
dXBkYXRlQ291bnRlcikpIHsKLSAgICAgICAgY2FjaGVJbmZvcy5yZXNlcnZlSW5pdGlhbENhcGFj
aXR5KG1fY2FjaGVzLnNpemUoKSk7Ci0gICAgICAgIGZvciAoYXV0byYgY2FjaGUgOiBtX2NhY2hl
cykKLSAgICAgICAgICAgIGNhY2hlSW5mb3MudW5jaGVja2VkQXBwZW5kKENhY2hlSW5mbyB7IGNh
Y2hlLmlkZW50aWZpZXIoKSwgY2FjaGUubmFtZSgpIH0pOworICAgICAgICBjYWNoZUluZm9zID0g
bV9jYWNoZXMubWFwKFtdKGF1dG8mIGNhY2hlKSB7CisgICAgICAgICAgICByZXR1cm4gQ2FjaGVJ
bmZvIHsgY2FjaGUuaWRlbnRpZmllcigpLCBjYWNoZS5uYW1lKCkgfTsKKyAgICAgICAgfSk7CiAg
ICAgfQogICAgIGNhbGxiYWNrKENhY2hlSW5mb3MgeyBXVEZNb3ZlKGNhY2hlSW5mb3MpLCBtX3Vw
ZGF0ZUNvdW50ZXIgfSk7CiB9CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViS2l0L1NoYXJlZC9BUEkv
QVBJQXJyYXkuY3BwIGIvU291cmNlL1dlYktpdC9TaGFyZWQvQVBJL0FQSUFycmF5LmNwcAppbmRl
eCA5OGI4NzMxMTE0NDczODNjYzc0YTIwZmQxOThmMDVmOGE2OWNlZWNjLi42ZjAwODBhNWE0Yzli
Mjk0ZGZlZjFjZDMwNGNmYTZmN2RiYWMxZDI0IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViS2l0L1No
YXJlZC9BUEkvQVBJQXJyYXkuY3BwCisrKyBiL1NvdXJjZS9XZWJLaXQvU2hhcmVkL0FQSS9BUElB
cnJheS5jcHAKQEAgLTQyLDEyICs0Miw5IEBAIFJlZjxBcnJheT4gQXJyYXk6OmNyZWF0ZShWZWN0
b3I8UmVmUHRyPE9iamVjdD4+JiYgZWxlbWVudHMpCiAKIFJlZjxBcnJheT4gQXJyYXk6OmNyZWF0
ZVN0cmluZ0FycmF5KGNvbnN0IFZlY3RvcjxXVEY6OlN0cmluZz4mIHN0cmluZ3MpCiB7Ci0gICAg
VmVjdG9yPFJlZlB0cjxPYmplY3Q+PiBlbGVtZW50czsKLSAgICBlbGVtZW50cy5yZXNlcnZlSW5p
dGlhbENhcGFjaXR5KHN0cmluZ3Muc2l6ZSgpKTsKLQotICAgIGZvciAoY29uc3QgYXV0byYgc3Ry
aW5nIDogc3RyaW5ncykKLSAgICAgICAgZWxlbWVudHMudW5jaGVja2VkQXBwZW5kKEFQSTo6U3Ry
aW5nOjpjcmVhdGUoc3RyaW5nKSk7Ci0KKyAgICBhdXRvIGVsZW1lbnRzID0gc3RyaW5ncy5tYXAo
W10oYXV0byYgc3RyaW5nKSAtPiBSZWZQdHI8T2JqZWN0PiB7CisgICAgICAgIHJldHVybiBBUEk6
OlN0cmluZzo6Y3JlYXRlKHN0cmluZyk7CisgICAgfSk7CiAgICAgcmV0dXJuIGNyZWF0ZShXVEZN
b3ZlKGVsZW1lbnRzKSk7CiB9CiAKQEAgLTcxLDEwICs2OCw3IEBAIFJlZjxBUEk6OkFycmF5PiBB
cnJheTo6Y29weSgpCiAgICAgaWYgKCFzaXplKQogICAgICAgICByZXR1cm4gQXJyYXk6OmNyZWF0
ZSgpOwogCi0gICAgVmVjdG9yPFJlZlB0cjxPYmplY3Q+PiBlbGVtZW50czsKLSAgICBlbGVtZW50
cy5yZXNlcnZlSW5pdGlhbENhcGFjaXR5KHNpemUpOwotICAgIGZvciAoY29uc3QgYXV0byYgZW50
cnkgOiB0aGlzLT5lbGVtZW50cygpKQotICAgICAgICBlbGVtZW50cy51bmNoZWNrZWRBcHBlbmQo
ZW50cnkpOworICAgIFZlY3RvcjxSZWZQdHI8T2JqZWN0Pj4gZWxlbWVudHMgPSB0aGlzLT5lbGVt
ZW50cygpOwogICAgIHJldHVybiBBcnJheTo6Y3JlYXRlKFdURk1vdmUoZWxlbWVudHMpKTsKIH0K
IApkaWZmIC0tZ2l0IGEvU291cmNlL1dlYktpdC9TaGFyZWQvQVBJL0FQSURpY3Rpb25hcnkuY3Bw
IGIvU291cmNlL1dlYktpdC9TaGFyZWQvQVBJL0FQSURpY3Rpb25hcnkuY3BwCmluZGV4IDRmYjk5
NTJmZDY5M2EyZjE2OTU5ZmFlM2VhNTcxNDVhYzM5OTFjNDAuLmJkN2M4NjM0MmM1Nzk2MTEyMWM1
Yzk1NjEyNDBjZjZmNGJlMDNkMzMgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJLaXQvU2hhcmVkL0FQ
SS9BUElEaWN0aW9uYXJ5LmNwcAorKysgYi9Tb3VyY2UvV2ViS2l0L1NoYXJlZC9BUEkvQVBJRGlj
dGlvbmFyeS5jcHAKQEAgLTU1LDEyICs1NSw5IEBAIFJlZjxBcnJheT4gRGljdGlvbmFyeTo6a2V5
cygpIGNvbnN0CiAgICAgaWYgKG1fbWFwLmlzRW1wdHkoKSkKICAgICAgICAgcmV0dXJuIEFQSTo6
QXJyYXk6OmNyZWF0ZSgpOwogCi0gICAgVmVjdG9yPFJlZlB0cjxBUEk6Ok9iamVjdD4+IGtleXM7
Ci0gICAga2V5cy5yZXNlcnZlSW5pdGlhbENhcGFjaXR5KG1fbWFwLnNpemUoKSk7Ci0KLSAgICBm
b3IgKGNvbnN0IGF1dG8mIGtleSA6IG1fbWFwLmtleXMoKSkKLSAgICAgICAga2V5cy51bmNoZWNr
ZWRBcHBlbmQoQVBJOjpTdHJpbmc6OmNyZWF0ZShrZXkpKTsKLQorICAgIGF1dG8ga2V5cyA9IFdU
Rjo6bWFwKG1fbWFwLCBbXShhdXRvJiBlbnRyeSkgLT4gUmVmUHRyPEFQSTo6T2JqZWN0PiB7Cisg
ICAgICAgIHJldHVybiBBUEk6OlN0cmluZzo6Y3JlYXRlKGVudHJ5LmtleSk7CisgICAgfSk7CiAg
ICAgcmV0dXJuIEFQSTo6QXJyYXk6OmNyZWF0ZShXVEZNb3ZlKGtleXMpKTsKIH0KIApkaWZmIC0t
Z2l0IGEvU291cmNlL1dlYktpdC9TaGFyZWQvVXNlckRhdGEuY3BwIGIvU291cmNlL1dlYktpdC9T
aGFyZWQvVXNlckRhdGEuY3BwCmluZGV4IDUzMmYwY2QzYWYxZDNiNDUyMWNjYWM5YmQxMzQwNzNk
ZWYyZmYzZWUuLmY4YjdlZGNmNDQ5MTczMTUwYjBmODUwMTM2MDM5ZDA5ZWM4M2ZjZjMgMTAwNjQ0
Ci0tLSBhL1NvdXJjZS9XZWJLaXQvU2hhcmVkL1VzZXJEYXRhLmNwcAorKysgYi9Tb3VyY2UvV2Vi
S2l0L1NoYXJlZC9Vc2VyRGF0YS5jcHAKQEAgLTEwMSwxNSArMTAxLDExIEBAIHN0YXRpYyBSZWZQ
dHI8QVBJOjpPYmplY3Q+IHRyYW5zZm9ybUdyYXBoKEFQSTo6T2JqZWN0JiBvYmplY3QsIGNvbnN0
IFVzZXJEYXRhOjpUCiAgICAgaWYgKG9iamVjdC50eXBlKCkgPT0gQVBJOjpPYmplY3Q6OlR5cGU6
OkFycmF5KSB7CiAgICAgICAgIGF1dG8mIGFycmF5ID0gc3RhdGljX2Nhc3Q8QVBJOjpBcnJheSY+
KG9iamVjdCk7CiAKLSAgICAgICAgVmVjdG9yPFJlZlB0cjxBUEk6Ok9iamVjdD4+IGVsZW1lbnRz
OwotICAgICAgICBlbGVtZW50cy5yZXNlcnZlSW5pdGlhbENhcGFjaXR5KGFycmF5LmVsZW1lbnRz
KCkuc2l6ZSgpKTsKLSAgICAgICAgZm9yIChjb25zdCBhdXRvJiBlbGVtZW50IDogYXJyYXkuZWxl
bWVudHMoKSkgeworICAgICAgICBhdXRvIGVsZW1lbnRzID0gYXJyYXkuZWxlbWVudHMoKS5tYXAo
WyZdKGF1dG8mIGVsZW1lbnQpIC0+IFJlZlB0cjxBUEk6Ok9iamVjdD4gewogICAgICAgICAgICAg
aWYgKCFlbGVtZW50KQotICAgICAgICAgICAgICAgIGVsZW1lbnRzLnVuY2hlY2tlZEFwcGVuZChu
dWxscHRyKTsKLSAgICAgICAgICAgIGVsc2UKLSAgICAgICAgICAgICAgICBlbGVtZW50cy51bmNo
ZWNrZWRBcHBlbmQodHJhbnNmb3JtR3JhcGgoKmVsZW1lbnQsIHRyYW5zZm9ybWVyKSk7Ci0gICAg
ICAgIH0KLQorICAgICAgICAgICAgICAgIHJldHVybiBudWxscHRyOworICAgICAgICAgICAgcmV0
dXJuIHRyYW5zZm9ybUdyYXBoKCplbGVtZW50LCB0cmFuc2Zvcm1lcik7CisgICAgICAgIH0pOwog
ICAgICAgICByZXR1cm4gQVBJOjpBcnJheTo6Y3JlYXRlKFdURk1vdmUoZWxlbWVudHMpKTsKICAg
ICB9CiAKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJLaXQvU2hhcmVkL1dlYkNvbnRleHRNZW51SXRl
bS5jcHAgYi9Tb3VyY2UvV2ViS2l0L1NoYXJlZC9XZWJDb250ZXh0TWVudUl0ZW0uY3BwCmluZGV4
IGQzMDc4YjU5YWEzZWFjZTk3M2RjZDkyZTc1ZDUxMTk4ZGEzNWM0ZTAuLmQyODEzODBhZTI1ZDli
M2Y1MjkwZWVlZjAxZmUzN2ZlYzdhYjIzYjMgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJLaXQvU2hh
cmVkL1dlYkNvbnRleHRNZW51SXRlbS5jcHAKKysrIGIvU291cmNlL1dlYktpdC9TaGFyZWQvV2Vi
Q29udGV4dE1lbnVJdGVtLmNwcApAQCAtNDQsMTMgKzQ0LDEyIEBAIFJlZjxXZWJDb250ZXh0TWVu
dUl0ZW0+IFdlYkNvbnRleHRNZW51SXRlbTo6Y3JlYXRlKGNvbnN0IFN0cmluZyYgdGl0bGUsIGJv
b2wgZW5hCiAgICAgc2l6ZV90IHNpemUgPSBzdWJtZW51SXRlbXMtPnNpemUoKTsKIAogICAgIFZl
Y3RvcjxXZWJDb250ZXh0TWVudUl0ZW1EYXRhPiBzdWJtZW51OwotICAgIHN1Ym1lbnUucmVzZXJ2
ZUNhcGFjaXR5KHNpemUpOwotCisgICAgc3VibWVudS5yZXNlcnZlSW5pdGlhbENhcGFjaXR5KHNp
emUpOwogICAgIGZvciAoc2l6ZV90IGkgPSAwOyBpIDwgc2l6ZTsgKytpKSB7Ci0gICAgICAgIFdl
YkNvbnRleHRNZW51SXRlbSogaXRlbSA9IHN1Ym1lbnVJdGVtcy0+YXQ8V2ViQ29udGV4dE1lbnVJ
dGVtPihpKTsKLSAgICAgICAgaWYgKGl0ZW0pCi0gICAgICAgICAgICBzdWJtZW51LmFwcGVuZChp
dGVtLT5kYXRhKCkpOworICAgICAgICBpZiAoYXV0byogaXRlbSA9IHN1Ym1lbnVJdGVtcy0+YXQ8
V2ViQ29udGV4dE1lbnVJdGVtPihpKSkKKyAgICAgICAgICAgIHN1Ym1lbnUudW5jaGVja2VkQXBw
ZW5kKGl0ZW0tPmRhdGEoKSk7CiAgICAgfQorICAgIHN1Ym1lbnUuc2hyaW5rVG9GaXQoKTsKIAog
ICAgIHJldHVybiBhZG9wdFJlZigqbmV3IFdlYkNvbnRleHRNZW51SXRlbShXZWJDb250ZXh0TWVu
dUl0ZW1EYXRhKFdlYkNvcmU6OkNvbnRleHRNZW51SXRlbVRhZ05vQWN0aW9uLCB0aXRsZSwgZW5h
YmxlZCwgc3VibWVudSkpKS5sZWFrUmVmKCk7CiB9CkBAIC02NiwxMiArNjUsOSBAQCBSZWY8QVBJ
OjpBcnJheT4gV2ViQ29udGV4dE1lbnVJdGVtOjpzdWJtZW51SXRlbXNBc0FQSUFycmF5KCkgY29u
c3QKICAgICBpZiAobV93ZWJDb250ZXh0TWVudUl0ZW1EYXRhLnR5cGUoKSAhPSBXZWJDb3JlOjpT
dWJtZW51VHlwZSkKICAgICAgICAgcmV0dXJuIEFQSTo6QXJyYXk6OmNyZWF0ZSgpOwogCi0gICAg
VmVjdG9yPFJlZlB0cjxBUEk6Ok9iamVjdD4+IHN1Ym1lbnVJdGVtczsKLSAgICBzdWJtZW51SXRl
bXMucmVzZXJ2ZUluaXRpYWxDYXBhY2l0eShtX3dlYkNvbnRleHRNZW51SXRlbURhdGEuc3VibWVu
dSgpLnNpemUoKSk7Ci0KLSAgICBmb3IgKGNvbnN0IGF1dG8mIGl0ZW0gOiBtX3dlYkNvbnRleHRN
ZW51SXRlbURhdGEuc3VibWVudSgpKQotICAgICAgICBzdWJtZW51SXRlbXMudW5jaGVja2VkQXBw
ZW5kKFdlYkNvbnRleHRNZW51SXRlbTo6Y3JlYXRlKGl0ZW0pKTsKLQorICAgIGF1dG8gc3VibWVu
dUl0ZW1zID0gbV93ZWJDb250ZXh0TWVudUl0ZW1EYXRhLnN1Ym1lbnUoKS5tYXAoW10oYXV0byYg
aXRlbSkgLT4gUmVmUHRyPEFQSTo6T2JqZWN0PiB7CisgICAgICAgIHJldHVybiBXZWJDb250ZXh0
TWVudUl0ZW06OmNyZWF0ZShpdGVtKTsKKyAgICB9KTsKICAgICByZXR1cm4gQVBJOjpBcnJheTo6
Y3JlYXRlKFdURk1vdmUoc3VibWVudUl0ZW1zKSk7CiB9CiAKZGlmZiAtLWdpdCBhL1NvdXJjZS9X
ZWJLaXQvU2hhcmVkL1dlYkNvbnRleHRNZW51SXRlbURhdGEuY3BwIGIvU291cmNlL1dlYktpdC9T
aGFyZWQvV2ViQ29udGV4dE1lbnVJdGVtRGF0YS5jcHAKaW5kZXggNTk4YTg3N2U5ZjYxNjhlMWFm
NDgyZmU3ODcwY2VkNWExZDQ0MzI4ZC4uNGJhYmU0MzJjMGE3NjU5ZWQ5YTdiY2UwZjMwNTFlNmEw
MzBmOThkMiAxMDA2NDQKLS0tIGEvU291cmNlL1dlYktpdC9TaGFyZWQvV2ViQ29udGV4dE1lbnVJ
dGVtRGF0YS5jcHAKKysrIGIvU291cmNlL1dlYktpdC9TaGFyZWQvV2ViQ29udGV4dE1lbnVJdGVt
RGF0YS5jcHAKQEAgLTE2MCwyMiArMTYwLDE2IEBAIHN0ZDo6b3B0aW9uYWw8V2ViQ29udGV4dE1l
bnVJdGVtRGF0YT4gV2ViQ29udGV4dE1lbnVJdGVtRGF0YTo6ZGVjb2RlKElQQzo6RGVjb2RlCiAK
IFZlY3RvcjxXZWJDb250ZXh0TWVudUl0ZW1EYXRhPiBraXRJdGVtcyhjb25zdCBWZWN0b3I8V2Vi
Q29yZTo6Q29udGV4dE1lbnVJdGVtPiYgY29yZUl0ZW1WZWN0b3IpCiB7Ci0gICAgVmVjdG9yPFdl
YkNvbnRleHRNZW51SXRlbURhdGE+IHJlc3VsdDsKLSAgICByZXN1bHQucmVzZXJ2ZUNhcGFjaXR5
KGNvcmVJdGVtVmVjdG9yLnNpemUoKSk7Ci0gICAgZm9yICh1bnNpZ25lZCBpID0gMDsgaSA8IGNv
cmVJdGVtVmVjdG9yLnNpemUoKTsgKytpKQotICAgICAgICByZXN1bHQuYXBwZW5kKFdlYkNvbnRl
eHRNZW51SXRlbURhdGEoY29yZUl0ZW1WZWN0b3JbaV0pKTsKLSAgICAKLSAgICByZXR1cm4gcmVz
dWx0OworICAgIHJldHVybiBjb3JlSXRlbVZlY3Rvci5tYXAoW10oYXV0byYgaXRlbSkgeworICAg
ICAgICByZXR1cm4gV2ViQ29udGV4dE1lbnVJdGVtRGF0YSB7IGl0ZW0gfTsKKyAgICB9KTsKIH0K
IAogVmVjdG9yPENvbnRleHRNZW51SXRlbT4gY29yZUl0ZW1zKGNvbnN0IFZlY3RvcjxXZWJDb250
ZXh0TWVudUl0ZW1EYXRhPiYga2l0SXRlbVZlY3RvcikKIHsKLSAgICBWZWN0b3I8Q29udGV4dE1l
bnVJdGVtPiByZXN1bHQ7Ci0gICAgcmVzdWx0LnJlc2VydmVDYXBhY2l0eShraXRJdGVtVmVjdG9y
LnNpemUoKSk7Ci0gICAgZm9yICh1bnNpZ25lZCBpID0gMDsgaSA8IGtpdEl0ZW1WZWN0b3Iuc2l6
ZSgpOyArK2kpCi0gICAgICAgIHJlc3VsdC5hcHBlbmQoa2l0SXRlbVZlY3RvcltpXS5jb3JlKCkp
OwotICAgIAotICAgIHJldHVybiByZXN1bHQ7CisgICAgcmV0dXJuIGtpdEl0ZW1WZWN0b3IubWFw
KFtdKGF1dG8mIGl0ZW0pIHsKKyAgICAgICAgcmV0dXJuIGl0ZW0uY29yZSgpOworICAgIH0pOwog
fQogCiB9IC8vIG5hbWVzcGFjZSBXZWJLaXQKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJLaXQvVUlQ
cm9jZXNzL0FQSS9BUElXZWJBdXRoZW50aWNhdGlvblBhbmVsLmNwcCBiL1NvdXJjZS9XZWJLaXQv
VUlQcm9jZXNzL0FQSS9BUElXZWJBdXRoZW50aWNhdGlvblBhbmVsLmNwcAppbmRleCA5YzdjNWRk
ZGYyZjg4NTQ0ZDJmNDlmNzc3NTYwMGM5MDBhOGM2MDM4Li4zYWU4MDkzOTIwOGMxYzA2NGRlZWY0
YTdjODY5YjI1ZTNkYWU2ZDVhIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViS2l0L1VJUHJvY2Vzcy9B
UEkvQVBJV2ViQXV0aGVudGljYXRpb25QYW5lbC5jcHAKKysrIGIvU291cmNlL1dlYktpdC9VSVBy
b2Nlc3MvQVBJL0FQSVdlYkF1dGhlbnRpY2F0aW9uUGFuZWwuY3BwCkBAIC01Niw3ICs1Niw2IEBA
IFdlYkF1dGhlbnRpY2F0aW9uUGFuZWw6OldlYkF1dGhlbnRpY2F0aW9uUGFuZWwoY29uc3QgQXV0
aGVudGljYXRvck1hbmFnZXImIG1hbmFnCiAgICAgLCBtX2NsaWVudERhdGFUeXBlKHR5cGUpCiAg
ICAgLCBtX3VzZXJOYW1lKHVzZXJOYW1lKQogewotICAgIG1fdHJhbnNwb3J0cyA9IFZlY3RvcjxB
dXRoZW50aWNhdG9yVHJhbnNwb3J0PigpOwogICAgIG1fdHJhbnNwb3J0cy5yZXNlcnZlSW5pdGlh
bENhcGFjaXR5KEF1dGhlbnRpY2F0b3JNYW5hZ2VyOjptYXhUcmFuc3BvcnROdW1iZXIpOwogICAg
IGlmICh0cmFuc3BvcnRzLmNvbnRhaW5zKEF1dGhlbnRpY2F0b3JUcmFuc3BvcnQ6OlVzYikpCiAg
ICAgICAgIG1fdHJhbnNwb3J0cy51bmNoZWNrZWRBcHBlbmQoQXV0aGVudGljYXRvclRyYW5zcG9y
dDo6VXNiKTsKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJLaXQvVUlQcm9jZXNzL0FQSS9BUElXZWJz
aXRlUG9saWNpZXMuY3BwIGIvU291cmNlL1dlYktpdC9VSVByb2Nlc3MvQVBJL0FQSVdlYnNpdGVQ
b2xpY2llcy5jcHAKaW5kZXggYWI1N2M0NGZlZWViZGNmYTgxYTdmNmY5ZGUwN2M5NmRiZWZlMDhh
ZS4uZTZhNGQwNzFhZDUxNGQ0ZTE1NzNmN2YxM2Y2NDY5MTNjZDNmY2I3NiAxMDA2NDQKLS0tIGEv
U291cmNlL1dlYktpdC9VSVByb2Nlc3MvQVBJL0FQSVdlYnNpdGVQb2xpY2llcy5jcHAKKysrIGIv
U291cmNlL1dlYktpdC9VSVByb2Nlc3MvQVBJL0FQSVdlYnNpdGVQb2xpY2llcy5jcHAKQEAgLTU5
LDE4ICs1OSw4IEBAIFJlZjxXZWJzaXRlUG9saWNpZXM+IFdlYnNpdGVQb2xpY2llczo6Y29weSgp
IGNvbnN0CiAgICAgcG9saWNpZXMtPnNldFdlYnNpdGVEYXRhU3RvcmUobV93ZWJzaXRlRGF0YVN0
b3JlLmdldCgpKTsKICAgICBwb2xpY2llcy0+c2V0VXNlckNvbnRlbnRDb250cm9sbGVyKG1fdXNl
ckNvbnRlbnRDb250cm9sbGVyLmdldCgpKTsKICAgICBwb2xpY2llcy0+c2V0SWRlbXBvdGVudE1v
ZGVBdXRvc2l6aW5nT25seUhvbm9yc1BlcmNlbnRhZ2VzKG1faWRlbXBvdGVudE1vZGVBdXRvc2l6
aW5nT25seUhvbm9yc1BlcmNlbnRhZ2VzKTsKLSAgICAKLSAgICBWZWN0b3I8V2ViQ29yZTo6SFRU
UEhlYWRlckZpZWxkPiBsZWdhY3lDdXN0b21IZWFkZXJGaWVsZHM7Ci0gICAgbGVnYWN5Q3VzdG9t
SGVhZGVyRmllbGRzLnJlc2VydmVJbml0aWFsQ2FwYWNpdHkobV9sZWdhY3lDdXN0b21IZWFkZXJG
aWVsZHMuc2l6ZSgpKTsKLSAgICBmb3IgKGF1dG8mIGZpZWxkIDogbV9sZWdhY3lDdXN0b21IZWFk
ZXJGaWVsZHMpCi0gICAgICAgIGxlZ2FjeUN1c3RvbUhlYWRlckZpZWxkcy51bmNoZWNrZWRBcHBl
bmQoZmllbGQpOwotICAgIHBvbGljaWVzLT5zZXRMZWdhY3lDdXN0b21IZWFkZXJGaWVsZHMoV1RG
TW92ZShsZWdhY3lDdXN0b21IZWFkZXJGaWVsZHMpKTsKLQotICAgIFZlY3RvcjxXZWJDb3JlOjpD
dXN0b21IZWFkZXJGaWVsZHM+IGN1c3RvbUhlYWRlckZpZWxkczsKLSAgICBjdXN0b21IZWFkZXJG
aWVsZHMucmVzZXJ2ZUluaXRpYWxDYXBhY2l0eShtX2N1c3RvbUhlYWRlckZpZWxkcy5zaXplKCkp
OwotICAgIGZvciAoYXV0byYgZmllbGQgOiBtX2N1c3RvbUhlYWRlckZpZWxkcykKLSAgICAgICAg
Y3VzdG9tSGVhZGVyRmllbGRzLnVuY2hlY2tlZEFwcGVuZChmaWVsZCk7Ci0gICAgcG9saWNpZXMt
PnNldEN1c3RvbUhlYWRlckZpZWxkcyhXVEZNb3ZlKGN1c3RvbUhlYWRlckZpZWxkcykpOworICAg
IHBvbGljaWVzLT5zZXRMZWdhY3lDdXN0b21IZWFkZXJGaWVsZHMoVmVjdG9yIHsgbV9sZWdhY3lD
dXN0b21IZWFkZXJGaWVsZHMgfSk7CisgICAgcG9saWNpZXMtPnNldEN1c3RvbUhlYWRlckZpZWxk
cyhWZWN0b3IgeyBtX2N1c3RvbUhlYWRlckZpZWxkcyB9KTsKICAgICBwb2xpY2llcy0+c2V0QWxs
b3dTaXRlU3BlY2lmaWNRdWlya3NUb092ZXJyaWRlQ29udGVudE1vZGUobV9hbGxvd1NpdGVTcGVj
aWZpY1F1aXJrc1RvT3ZlcnJpZGVDb250ZW50TW9kZSk7CiAgICAgcG9saWNpZXMtPnNldEFwcGxp
Y2F0aW9uTmFtZUZvckRlc2t0b3BVc2VyQWdlbnQobV9hcHBsaWNhdGlvbk5hbWVGb3JEZXNrdG9w
VXNlckFnZW50KTsKICAgICBwb2xpY2llcy0+c2V0QWxsb3dzQ29udGVudEphdmFTY3JpcHQobV9h
bGxvd3NDb250ZW50SmF2YVNjcmlwdCk7CkBAIC05OCw4ICs4OCw3IEBAIFdlYktpdDo6V2Vic2l0
ZVBvbGljaWVzRGF0YSBXZWJzaXRlUG9saWNpZXM6OmRhdGEoKQogICAgIGJvb2wgaGFzTGVnYWN5
Q3VzdG9tSGVhZGVyRmllbGRzID0gbGVnYWN5Q3VzdG9tSGVhZGVyRmllbGRzKCkuc2l6ZSgpOwog
ICAgIFZlY3RvcjxXZWJDb3JlOjpDdXN0b21IZWFkZXJGaWVsZHM+IGN1c3RvbUhlYWRlckZpZWxk
czsKICAgICBjdXN0b21IZWFkZXJGaWVsZHMucmVzZXJ2ZUluaXRpYWxDYXBhY2l0eSh0aGlzLT5j
dXN0b21IZWFkZXJGaWVsZHMoKS5zaXplKCkgKyBoYXNMZWdhY3lDdXN0b21IZWFkZXJGaWVsZHMp
OwotICAgIGZvciAoYXV0byYgZmllbGQgOiB0aGlzLT5jdXN0b21IZWFkZXJGaWVsZHMoKSkKLSAg
ICAgICAgY3VzdG9tSGVhZGVyRmllbGRzLnVuY2hlY2tlZEFwcGVuZChmaWVsZCk7CisgICAgY3Vz
dG9tSGVhZGVyRmllbGRzLmFwcGVuZFZlY3Rvcih0aGlzLT5jdXN0b21IZWFkZXJGaWVsZHMoKSk7
CiAgICAgaWYgKGhhc0xlZ2FjeUN1c3RvbUhlYWRlckZpZWxkcykKICAgICAgICAgY3VzdG9tSGVh
ZGVyRmllbGRzLnVuY2hlY2tlZEFwcGVuZCh7IGxlZ2FjeUN1c3RvbUhlYWRlckZpZWxkcygpLCB7
IH19KTsKIApkaWZmIC0tZ2l0IGEvU291cmNlL1dlYktpdC9VSVByb2Nlc3MvQVBJL0MvV0tQYWdl
LmNwcCBiL1NvdXJjZS9XZWJLaXQvVUlQcm9jZXNzL0FQSS9DL1dLUGFnZS5jcHAKaW5kZXggNjA0
N2M1ZmE0ZTczNjg2NzU2NjIyMmQ2M2Y2NjU3MmFmOTRjZDgxMC4uMjI3YzE5MGI0NDc0NGM2ZjE0
MDI0YzU4ZjA5YzEyYjExMDA3NjI5MSAxMDA2NDQKLS0tIGEvU291cmNlL1dlYktpdC9VSVByb2Nl
c3MvQVBJL0MvV0tQYWdlLmNwcAorKysgYi9Tb3VyY2UvV2ViS2l0L1VJUHJvY2Vzcy9BUEkvQy9X
S1BhZ2UuY3BwCkBAIC0xMDUsNiArMTA1LDEzIEBACiBuYW1lc3BhY2UgQVBJIHsKIHVzaW5nIG5h
bWVzcGFjZSBXZWJDb3JlOwogdXNpbmcgbmFtZXNwYWNlIFdlYktpdDsKKworc3RhdGljIFZlY3Rv
cjxSZWZQdHI8QVBJOjpPYmplY3Q+PiB0b0FQSU9iamVjdFZlY3Rvcihjb25zdCBWZWN0b3I8UmVm
PFdlYkNvbnRleHRNZW51SXRlbT4+JiBtZW51SXRlbXNWZWN0b3IpCit7CisgICAgcmV0dXJuIG1l
bnVJdGVtc1ZlY3Rvci5tYXAoW10oYXV0byYgbWVudUl0ZW0pIC0+IFJlZlB0cjxBUEk6Ok9iamVj
dD4geworICAgICAgICByZXR1cm4gbWVudUl0ZW0ucHRyKCk7CisgICAgfSk7Cit9CiAgICAgCiB0
ZW1wbGF0ZTw+IHN0cnVjdCBDbGllbnRUcmFpdHM8V0tQYWdlTG9hZGVyQ2xpZW50QmFzZT4gewog
ICAgIHR5cGVkZWYgc3RkOjp0dXBsZTxXS1BhZ2VMb2FkZXJDbGllbnRWMCwgV0tQYWdlTG9hZGVy
Q2xpZW50VjEsIFdLUGFnZUxvYWRlckNsaWVudFYyLCBXS1BhZ2VMb2FkZXJDbGllbnRWMywgV0tQ
YWdlTG9hZGVyQ2xpZW50VjQsIFdLUGFnZUxvYWRlckNsaWVudFY1LCBXS1BhZ2VMb2FkZXJDbGll
bnRWNj4gVmVyc2lvbnM7CkBAIC05NDUsMTIgKzk1Miw3IEBAIHZvaWQgV0tQYWdlU2V0UGFnZUNv
bnRleHRNZW51Q2xpZW50KFdLUGFnZVJlZiBwYWdlUmVmLCBjb25zdCBXS1BhZ2VDb250ZXh0TWVu
dUNsCiAgICAgICAgIHZvaWQgZ2V0Q29udGV4dE1lbnVGcm9tUHJvcG9zZWRNZW51KFdlYlBhZ2VQ
cm94eSYgcGFnZSwgVmVjdG9yPFJlZjxXZWJLaXQ6OldlYkNvbnRleHRNZW51SXRlbT4+JiYgcHJv
cG9zZWRNZW51VmVjdG9yLCBXZWJLaXQ6OldlYkNvbnRleHRNZW51TGlzdGVuZXJQcm94eSYgY29u
dGV4dE1lbnVMaXN0ZW5lciwgY29uc3QgV2ViSGl0VGVzdFJlc3VsdERhdGEmIGhpdFRlc3RSZXN1
bHREYXRhLCBBUEk6Ok9iamVjdCogdXNlckRhdGEpIG92ZXJyaWRlCiAgICAgICAgIHsKICAgICAg
ICAgICAgIGlmIChtX2NsaWVudC5iYXNlLnZlcnNpb24gPj0gNCAmJiBtX2NsaWVudC5nZXRDb250
ZXh0TWVudUZyb21Qcm9wb3NlZE1lbnVBc3luYykgewotICAgICAgICAgICAgICAgIFZlY3RvcjxS
ZWZQdHI8QVBJOjpPYmplY3Q+PiBwcm9wb3NlZE1lbnVJdGVtczsKLSAgICAgICAgICAgICAgICBw
cm9wb3NlZE1lbnVJdGVtcy5yZXNlcnZlSW5pdGlhbENhcGFjaXR5KHByb3Bvc2VkTWVudVZlY3Rv
ci5zaXplKCkpOwotICAgICAgICAgICAgICAgIAotICAgICAgICAgICAgICAgIGZvciAoY29uc3Qg
YXV0byYgbWVudUl0ZW0gOiBwcm9wb3NlZE1lbnVWZWN0b3IpCi0gICAgICAgICAgICAgICAgICAg
IHByb3Bvc2VkTWVudUl0ZW1zLnVuY2hlY2tlZEFwcGVuZChtZW51SXRlbS5wdHIoKSk7Ci0gICAg
ICAgICAgICAgICAgCisgICAgICAgICAgICAgICAgYXV0byBwcm9wb3NlZE1lbnVJdGVtcyA9IHRv
QVBJT2JqZWN0VmVjdG9yKHByb3Bvc2VkTWVudVZlY3Rvcik7CiAgICAgICAgICAgICAgICAgYXV0
byB3ZWJIaXRUZXN0UmVzdWx0ID0gQVBJOjpIaXRUZXN0UmVzdWx0OjpjcmVhdGUoaGl0VGVzdFJl
c3VsdERhdGEpOwogICAgICAgICAgICAgICAgIG1fY2xpZW50LmdldENvbnRleHRNZW51RnJvbVBy
b3Bvc2VkTWVudUFzeW5jKHRvQVBJKCZwYWdlKSwgdG9BUEkoQVBJOjpBcnJheTo6Y3JlYXRlKFdU
Rk1vdmUocHJvcG9zZWRNZW51SXRlbXMpKS5wdHIoKSksIHRvQVBJKCZjb250ZXh0TWVudUxpc3Rl
bmVyKSwgdG9BUEkod2ViSGl0VGVzdFJlc3VsdC5wdHIoKSksIHRvQVBJKHVzZXJEYXRhKSwgbV9j
bGllbnQuYmFzZS5jbGllbnRJbmZvKTsKICAgICAgICAgICAgICAgICByZXR1cm47CkBAIC05NjYs
MTEgKzk2OCw3IEBAIHZvaWQgV0tQYWdlU2V0UGFnZUNvbnRleHRNZW51Q2xpZW50KFdLUGFnZVJl
ZiBwYWdlUmVmLCBjb25zdCBXS1BhZ2VDb250ZXh0TWVudUNsCiAgICAgICAgICAgICAgICAgcmV0
dXJuOwogICAgICAgICAgICAgfQogCi0gICAgICAgICAgICBWZWN0b3I8UmVmUHRyPEFQSTo6T2Jq
ZWN0Pj4gcHJvcG9zZWRNZW51SXRlbXM7Ci0gICAgICAgICAgICBwcm9wb3NlZE1lbnVJdGVtcy5y
ZXNlcnZlSW5pdGlhbENhcGFjaXR5KHByb3Bvc2VkTWVudVZlY3Rvci5zaXplKCkpOwotCi0gICAg
ICAgICAgICBmb3IgKGNvbnN0IGF1dG8mIG1lbnVJdGVtIDogcHJvcG9zZWRNZW51VmVjdG9yKQot
ICAgICAgICAgICAgICAgIHByb3Bvc2VkTWVudUl0ZW1zLnVuY2hlY2tlZEFwcGVuZChtZW51SXRl
bS5wdHIoKSk7CisgICAgICAgICAgICBhdXRvIHByb3Bvc2VkTWVudUl0ZW1zID0gdG9BUElPYmpl
Y3RWZWN0b3IocHJvcG9zZWRNZW51VmVjdG9yKTsKIAogICAgICAgICAgICAgV0tBcnJheVJlZiBu
ZXdNZW51ID0gbnVsbHB0cjsKICAgICAgICAgICAgIGlmIChtX2NsaWVudC5iYXNlLnZlcnNpb24g
Pj0gMikgewpAQCAtMTAxMCwxMiArMTAwOCw3IEBAIHZvaWQgV0tQYWdlU2V0UGFnZUNvbnRleHRN
ZW51Q2xpZW50KFdLUGFnZVJlZiBwYWdlUmVmLCBjb25zdCBXS1BhZ2VDb250ZXh0TWVudUNsCiAg
ICAgICAgICAgICBpZiAoIWNhblNob3dDb250ZXh0TWVudSgpKQogICAgICAgICAgICAgICAgIHJl
dHVybjsKIAotICAgICAgICAgICAgVmVjdG9yPFJlZlB0cjxBUEk6Ok9iamVjdD4+IG1lbnVJdGVt
czsKLSAgICAgICAgICAgIG1lbnVJdGVtcy5yZXNlcnZlSW5pdGlhbENhcGFjaXR5KG1lbnVJdGVt
c1ZlY3Rvci5zaXplKCkpOwotCi0gICAgICAgICAgICBmb3IgKGNvbnN0IGF1dG8mIG1lbnVJdGVt
IDogbWVudUl0ZW1zVmVjdG9yKQotICAgICAgICAgICAgICAgIG1lbnVJdGVtcy51bmNoZWNrZWRB
cHBlbmQobWVudUl0ZW0ucHRyKCkpOwotCisgICAgICAgICAgICBhdXRvIG1lbnVJdGVtcyA9IHRv
QVBJT2JqZWN0VmVjdG9yKG1lbnVJdGVtc1ZlY3Rvcik7CiAgICAgICAgICAgICBtX2NsaWVudC5z
aG93Q29udGV4dE1lbnUodG9BUEkoJnBhZ2UpLCB0b0FQSShtZW51TG9jYXRpb24pLCB0b0FQSShB
UEk6OkFycmF5OjpjcmVhdGUoV1RGTW92ZShtZW51SXRlbXMpKS5wdHIoKSksIG1fY2xpZW50LmJh
c2UuY2xpZW50SW5mbyk7CiAgICAgICAgIH0KIApAQCAtMTEwMiwxOSArMTA5NSwxMiBAQCB2b2lk
IFdLUGFnZVNldFBhZ2VGaW5kTWF0Y2hlc0NsaWVudChXS1BhZ2VSZWYgcGFnZVJlZiwgY29uc3Qg
V0tQYWdlRmluZE1hdGNoZXNDbAogICAgICAgICAgICAgaWYgKCFtX2NsaWVudC5kaWRGaW5kU3Ry
aW5nTWF0Y2hlcykKICAgICAgICAgICAgICAgICByZXR1cm47CiAKLSAgICAgICAgICAgIFZlY3Rv
cjxSZWZQdHI8QVBJOjpPYmplY3Q+PiBtYXRjaGVzOwotICAgICAgICAgICAgbWF0Y2hlcy5yZXNl
cnZlSW5pdGlhbENhcGFjaXR5KG1hdGNoUmVjdHMuc2l6ZSgpKTsKLQotICAgICAgICAgICAgZm9y
IChjb25zdCBhdXRvJiByZWN0cyA6IG1hdGNoUmVjdHMpIHsKLSAgICAgICAgICAgICAgICBWZWN0
b3I8UmVmUHRyPEFQSTo6T2JqZWN0Pj4gYXBpUmVjdHM7Ci0gICAgICAgICAgICAgICAgYXBpUmVj
dHMucmVzZXJ2ZUluaXRpYWxDYXBhY2l0eShyZWN0cy5zaXplKCkpOwotCi0gICAgICAgICAgICAg
ICAgZm9yIChjb25zdCBhdXRvJiByZWN0IDogcmVjdHMpCi0gICAgICAgICAgICAgICAgICAgIGFw
aVJlY3RzLnVuY2hlY2tlZEFwcGVuZChBUEk6OlJlY3Q6OmNyZWF0ZSh0b0FQSShyZWN0KSkpOwot
Ci0gICAgICAgICAgICAgICAgbWF0Y2hlcy51bmNoZWNrZWRBcHBlbmQoQVBJOjpBcnJheTo6Y3Jl
YXRlKFdURk1vdmUoYXBpUmVjdHMpKSk7Ci0gICAgICAgICAgICB9Ci0KKyAgICAgICAgICAgIGF1
dG8gbWF0Y2hlcyA9IG1hdGNoUmVjdHMubWFwKFtdKGF1dG8mIHJlY3RzKSAtPiBSZWZQdHI8QVBJ
OjpPYmplY3Q+IHsKKyAgICAgICAgICAgICAgICBhdXRvIGFwaVJlY3RzID0gcmVjdHMubWFwKFtd
KGF1dG8mIHJlY3QpIC0+IFJlZlB0cjxBUEk6Ok9iamVjdD4geworICAgICAgICAgICAgICAgICAg
ICByZXR1cm4gQVBJOjpSZWN0OjpjcmVhdGUodG9BUEkocmVjdCkpOworICAgICAgICAgICAgICAg
IH0pOworICAgICAgICAgICAgICAgIHJldHVybiBBUEk6OkFycmF5OjpjcmVhdGUoV1RGTW92ZShh
cGlSZWN0cykpOworICAgICAgICAgICAgfSk7CiAgICAgICAgICAgICBtX2NsaWVudC5kaWRGaW5k
U3RyaW5nTWF0Y2hlcyh0b0FQSShwYWdlKSwgdG9BUEkoc3RyaW5nLmltcGwoKSksIHRvQVBJKEFQ
STo6QXJyYXk6OmNyZWF0ZShXVEZNb3ZlKG1hdGNoZXMpKS5wdHIoKSksIGluZGV4LCBtX2NsaWVu
dC5iYXNlLmNsaWVudEluZm8pOwogICAgICAgICB9CiAKQEAgLTEyNjcsMTEgKzEyNTMsOSBAQCB2
b2lkIFdLUGFnZVNldFBhZ2VMb2FkZXJDbGllbnQoV0tQYWdlUmVmIHBhZ2VSZWYsIGNvbnN0IFdL
UGFnZUxvYWRlckNsaWVudEJhc2UqCiAKICAgICAgICAgICAgIFJlZlB0cjxBUEk6OkFycmF5PiBy
ZW1vdmVkSXRlbXNBcnJheTsKICAgICAgICAgICAgIGlmICghcmVtb3ZlZEl0ZW1zLmlzRW1wdHko
KSkgewotICAgICAgICAgICAgICAgIFZlY3RvcjxSZWZQdHI8QVBJOjpPYmplY3Q+PiByZW1vdmVk
SXRlbXNWZWN0b3I7Ci0gICAgICAgICAgICAgICAgcmVtb3ZlZEl0ZW1zVmVjdG9yLnJlc2VydmVJ
bml0aWFsQ2FwYWNpdHkocmVtb3ZlZEl0ZW1zLnNpemUoKSk7Ci0gICAgICAgICAgICAgICAgZm9y
IChhdXRvJiByZW1vdmVkSXRlbSA6IHJlbW92ZWRJdGVtcykKLSAgICAgICAgICAgICAgICByZW1v
dmVkSXRlbXNWZWN0b3IuYXBwZW5kKFdURk1vdmUocmVtb3ZlZEl0ZW0pKTsKLQorICAgICAgICAg
ICAgICAgIGF1dG8gcmVtb3ZlZEl0ZW1zVmVjdG9yID0gV1RGOjptYXAoV1RGTW92ZShyZW1vdmVk
SXRlbXMpLCBbXShhdXRvJiYgcmVtb3ZlZEl0ZW0pIC0+IFJlZlB0cjxBUEk6Ok9iamVjdD4gewor
ICAgICAgICAgICAgICAgICAgICByZXR1cm4gV1RGTW92ZShyZW1vdmVkSXRlbSk7CisgICAgICAg
ICAgICAgICAgfSk7CiAgICAgICAgICAgICAgICAgcmVtb3ZlZEl0ZW1zQXJyYXkgPSBBUEk6OkFy
cmF5OjpjcmVhdGUoV1RGTW92ZShyZW1vdmVkSXRlbXNWZWN0b3IpKTsKICAgICAgICAgICAgIH0K
IApkaWZmIC0tZ2l0IGEvU291cmNlL1dlYktpdC9VSVByb2Nlc3MvQ29jb2EvVmlkZW9GdWxsc2Ny
ZWVuTWFuYWdlclByb3h5Lm1tIGIvU291cmNlL1dlYktpdC9VSVByb2Nlc3MvQ29jb2EvVmlkZW9G
dWxsc2NyZWVuTWFuYWdlclByb3h5Lm1tCmluZGV4IDYwMGE4OWY1NTliZjljMmVmZmIyZTBkMTdh
M2Y1ZWRmNDBmOTYyYzAuLjcwNmFjNTcxMjFhNmU1YTc5NmFjZjY2YTk4Mjc3NTdmZmMzZDNlOGMg
MTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJLaXQvVUlQcm9jZXNzL0NvY29hL1ZpZGVvRnVsbHNjcmVl
bk1hbmFnZXJQcm94eS5tbQorKysgYi9Tb3VyY2UvV2ViS2l0L1VJUHJvY2Vzcy9Db2NvYS9WaWRl
b0Z1bGxzY3JlZW5NYW5hZ2VyUHJveHkubW0KQEAgLTQ5MywxMiArNDkzLDcgQEAgdm9pZCBWaWRl
b0Z1bGxzY3JlZW5NYW5hZ2VyUHJveHk6OmZvckVhY2hTZXNzaW9uKEZ1bmN0aW9uPHZvaWQoVmlk
ZW9GdWxsc2NyZWVuTW8KICAgICBpZiAobV9jb250ZXh0TWFwLmlzRW1wdHkoKSkKICAgICAgICAg
cmV0dXJuOwogCi0gICAgVmVjdG9yPE1vZGVsSW50ZXJmYWNlVHVwbGU+IHZhbHVlczsKLSAgICB2
YWx1ZXMucmVzZXJ2ZUluaXRpYWxDYXBhY2l0eShtX2NvbnRleHRNYXAuc2l6ZSgpKTsKLSAgICBm
b3IgKGF1dG8mIHZhbHVlIDogbV9jb250ZXh0TWFwLnZhbHVlcygpKQotICAgICAgICB2YWx1ZXMu
dW5jaGVja2VkQXBwZW5kKHZhbHVlKTsKLQotICAgIGZvciAoYXV0byYgdmFsdWUgOiB2YWx1ZXMp
IHsKKyAgICBmb3IgKGF1dG8mIHZhbHVlIDogY29weVRvVmVjdG9yKG1fY29udGV4dE1hcC52YWx1
ZXMoKSkpIHsKICAgICAgICAgUmVmUHRyPFZpZGVvRnVsbHNjcmVlbk1vZGVsQ29udGV4dD4gbW9k
ZWw7CiAgICAgICAgIFJlZlB0cjxQbGF0Zm9ybVZpZGVvRnVsbHNjcmVlbkludGVyZmFjZT4gaW50
ZXJmYWNlOwogICAgICAgICBzdGQ6OnRpZShtb2RlbCwgaW50ZXJmYWNlKSA9IHZhbHVlOwpkaWZm
IC0tZ2l0IGEvU291cmNlL1dlYktpdC9VSVByb2Nlc3MvR2FtZXBhZC9VSUdhbWVwYWRQcm92aWRl
ci5jcHAgYi9Tb3VyY2UvV2ViS2l0L1VJUHJvY2Vzcy9HYW1lcGFkL1VJR2FtZXBhZFByb3ZpZGVy
LmNwcAppbmRleCBkOThjNTM5NWVlMTJjNGY1NzgzMDkzYzc4NDMxMzY4NzFmNDM2ZTI2Li45N2Q3
YzQyZDc5YzVlYjM3ZDc2MWRjZjcxNmE3MjhmYWY2NGMyM2JhIDEwMDY0NAotLS0gYS9Tb3VyY2Uv
V2ViS2l0L1VJUHJvY2Vzcy9HYW1lcGFkL1VJR2FtZXBhZFByb3ZpZGVyLmNwcAorKysgYi9Tb3Vy
Y2UvV2ViS2l0L1VJUHJvY2Vzcy9HYW1lcGFkL1VJR2FtZXBhZFByb3ZpZGVyLmNwcApAQCAtMTk0
LDE3ICsxOTQsOSBAQCB2b2lkIFVJR2FtZXBhZFByb3ZpZGVyOjpzdG9wTW9uaXRvcmluZ0dhbWVw
YWRzKCkKIAogVmVjdG9yPEdhbWVwYWREYXRhPiBVSUdhbWVwYWRQcm92aWRlcjo6c25hcHNob3RH
YW1lcGFkcygpCiB7Ci0gICAgVmVjdG9yPEdhbWVwYWREYXRhPiBnYW1lcGFkRGF0YXM7Ci0gICAg
Z2FtZXBhZERhdGFzLnJlc2VydmVJbml0aWFsQ2FwYWNpdHkobV9nYW1lcGFkcy5zaXplKCkpOwot
Ci0gICAgZm9yIChhdXRvJiBnYW1lcGFkIDogbV9nYW1lcGFkcykgewotICAgICAgICBpZiAoZ2Ft
ZXBhZCkKLSAgICAgICAgICAgIGdhbWVwYWREYXRhcy51bmNoZWNrZWRBcHBlbmQoZ2FtZXBhZC0+
Z2FtZXBhZERhdGEoKSk7Ci0gICAgICAgIGVsc2UKLSAgICAgICAgICAgIGdhbWVwYWREYXRhcy51
bmNoZWNrZWRBcHBlbmQoeyB9KTsKLSAgICB9Ci0KLSAgICByZXR1cm4gZ2FtZXBhZERhdGFzOwor
ICAgIHJldHVybiBtX2dhbWVwYWRzLm1hcChbXShhdXRvJiBnYW1lcGFkKSB7CisgICAgICAgIHJl
dHVybiBnYW1lcGFkID8gZ2FtZXBhZC0+Z2FtZXBhZERhdGEoKSA6IEdhbWVwYWREYXRhIHsgfTsK
KyAgICB9KTsKIH0KIAogI2lmICFQTEFURk9STShDT0NPQSkgJiYgIShVU0UoTUFORVRURSkgJiYg
T1MoTElOVVgpKQpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYktpdC9VSVByb2Nlc3MvTmV0d29yay9O
ZXR3b3JrUHJvY2Vzc1Byb3h5LmNwcCBiL1NvdXJjZS9XZWJLaXQvVUlQcm9jZXNzL05ldHdvcmsv
TmV0d29ya1Byb2Nlc3NQcm94eS5jcHAKaW5kZXggZjcxMzlmMTAwZGFjNTRhNDA5YmI0OTM4ODYx
ZjQ1MTc5ZTM1NDA3Zi4uODMxYjIxYTVmMDNmYTQ2YWI4NDA4MDFhOTQ5MTk2NzM5ZGEwNjdlYiAx
MDA2NDQKLS0tIGEvU291cmNlL1dlYktpdC9VSVByb2Nlc3MvTmV0d29yay9OZXR3b3JrUHJvY2Vz
c1Byb3h5LmNwcAorKysgYi9Tb3VyY2UvV2ViS2l0L1VJUHJvY2Vzcy9OZXR3b3JrL05ldHdvcmtQ
cm9jZXNzUHJveHkuY3BwCkBAIC0xMTgsMTEgKzExOCw5IEBAIHN0YXRpYyBib29sIHNob3VsZFRl
cm1pbmF0ZU5ldHdvcmtQcm9jZXNzQnlTZW5kaW5nTWVzc2FnZSgpCiAKIFZlY3RvcjxSZWY8TmV0
d29ya1Byb2Nlc3NQcm94eT4+IE5ldHdvcmtQcm9jZXNzUHJveHk6OmFsbE5ldHdvcmtQcm9jZXNz
ZXMoKQogewotICAgIFZlY3RvcjxSZWY8TmV0d29ya1Byb2Nlc3NQcm94eT4+IHByb2Nlc3NlczsK
LSAgICBwcm9jZXNzZXMucmVzZXJ2ZUluaXRpYWxDYXBhY2l0eShuZXR3b3JrUHJvY2Vzc2VzU2V0
KCkuc2l6ZSgpKTsKLSAgICBmb3IgKGF1dG8qIG5ldHdvcmtQcm9jZXNzIDogbmV0d29ya1Byb2Nl
c3Nlc1NldCgpKQotICAgICAgICBwcm9jZXNzZXMudW5jaGVja2VkQXBwZW5kKCpuZXR3b3JrUHJv
Y2Vzcyk7Ci0gICAgcmV0dXJuIHByb2Nlc3NlczsKKyAgICByZXR1cm4gV1RGOjptYXAobmV0d29y
a1Byb2Nlc3Nlc1NldCgpLCBbXShhdXRvKiBuZXR3b3JrUHJvY2VzcykgeworICAgICAgICByZXR1
cm4gUmVmIHsgKm5ldHdvcmtQcm9jZXNzIH07CisgICAgfSk7CiB9CiAKIFJlZlB0cjxOZXR3b3Jr
UHJvY2Vzc1Byb3h5PiYgTmV0d29ya1Byb2Nlc3NQcm94eTo6ZGVmYXVsdE5ldHdvcmtQcm9jZXNz
KCkKQEAgLTYyMywxMyArNjIxLDcgQEAgdm9pZCBOZXR3b3JrUHJvY2Vzc1Byb3h5Ojp1cGRhdGVQ
cmV2YWxlbnREb21haW5zVG9CbG9ja0Nvb2tpZXNGb3IoUEFMOjpTZXNzaW9uSUQKICAgICAgICAg
Y29tcGxldGlvbkhhbmRsZXIoKTsKICAgICAgICAgcmV0dXJuOwogICAgIH0KLQotICAgIFZlY3Rv
cjxSZWdpc3RyYWJsZURvbWFpbj4gcmVnaXN0cmFibGVEb21haW5zVG9CbG9jazsKLSAgICByZWdp
c3RyYWJsZURvbWFpbnNUb0Jsb2NrLnJlc2VydmVJbml0aWFsQ2FwYWNpdHkoZG9tYWluc1RvQmxv
Y2suc2l6ZSgpKTsKLSAgICBmb3IgKGF1dG8mIGRvbWFpbiA6IGRvbWFpbnNUb0Jsb2NrKQotICAg
ICAgICByZWdpc3RyYWJsZURvbWFpbnNUb0Jsb2NrLnVuY2hlY2tlZEFwcGVuZChkb21haW4pOwot
Ci0gICAgc2VuZFdpdGhBc3luY1JlcGx5KE1lc3NhZ2VzOjpOZXR3b3JrUHJvY2Vzczo6VXBkYXRl
UHJldmFsZW50RG9tYWluc1RvQmxvY2tDb29raWVzRm9yKHNlc3Npb25JRCwgcmVnaXN0cmFibGVE
b21haW5zVG9CbG9jayksIFdURk1vdmUoY29tcGxldGlvbkhhbmRsZXIpKTsKKyAgICBzZW5kV2l0
aEFzeW5jUmVwbHkoTWVzc2FnZXM6Ok5ldHdvcmtQcm9jZXNzOjpVcGRhdGVQcmV2YWxlbnREb21h
aW5zVG9CbG9ja0Nvb2tpZXNGb3Ioc2Vzc2lvbklELCBkb21haW5zVG9CbG9jayksIFdURk1vdmUo
Y29tcGxldGlvbkhhbmRsZXIpKTsKIH0KIAogdm9pZCBOZXR3b3JrUHJvY2Vzc1Byb3h5Ojppc1By
ZXZhbGVudFJlc291cmNlKFBBTDo6U2Vzc2lvbklEIHNlc3Npb25JRCwgY29uc3QgUmVnaXN0cmFi
bGVEb21haW4mIHJlc291cmNlRG9tYWluLCBDb21wbGV0aW9uSGFuZGxlcjx2b2lkKGJvb2wpPiYm
IGNvbXBsZXRpb25IYW5kbGVyKQpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYktpdC9VSVByb2Nlc3Mv
Tm90aWZpY2F0aW9ucy9XZWJOb3RpZmljYXRpb25NYW5hZ2VyUHJveHkuY3BwIGIvU291cmNlL1dl
YktpdC9VSVByb2Nlc3MvTm90aWZpY2F0aW9ucy9XZWJOb3RpZmljYXRpb25NYW5hZ2VyUHJveHku
Y3BwCmluZGV4IDAwNWZiYTVhMjNhZDY2NmRlMmQwN2UzZDY3OTY0ZWEyZTJhNWMyMDYuLmIzYWM3
MmI1ZjZjYjgxOWZkOWEyYzA3NmIwZDY5MjYxY2JlNTE4MGEgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9X
ZWJLaXQvVUlQcm9jZXNzL05vdGlmaWNhdGlvbnMvV2ViTm90aWZpY2F0aW9uTWFuYWdlclByb3h5
LmNwcAorKysgYi9Tb3VyY2UvV2ViS2l0L1VJUHJvY2Vzcy9Ob3RpZmljYXRpb25zL1dlYk5vdGlm
aWNhdGlvbk1hbmFnZXJQcm94eS5jcHAKQEAgLTI3OCw5ICsyNzgsOCBAQCB2b2lkIFdlYk5vdGlm
aWNhdGlvbk1hbmFnZXJQcm94eTo6cHJvdmlkZXJEaWRSZW1vdmVOb3RpZmljYXRpb25Qb2xpY2ll
cyhBUEk6OkFycgogICAgIAogICAgIFZlY3RvcjxTdHJpbmc+IG9yaWdpblN0cmluZ3M7CiAgICAg
b3JpZ2luU3RyaW5ncy5yZXNlcnZlSW5pdGlhbENhcGFjaXR5KHNpemUpOwotICAgIAogICAgIGZv
ciAoc2l6ZV90IGkgPSAwOyBpIDwgc2l6ZTsgKytpKQotICAgICAgICBvcmlnaW5TdHJpbmdzLmFw
cGVuZChvcmlnaW5zLT5hdDxBUEk6OlNlY3VyaXR5T3JpZ2luPihpKS0+c2VjdXJpdHlPcmlnaW4o
KS50b1N0cmluZygpKTsKKyAgICAgICAgb3JpZ2luU3RyaW5ncy51bmNoZWNrZWRBcHBlbmQob3Jp
Z2lucy0+YXQ8QVBJOjpTZWN1cml0eU9yaWdpbj4oaSktPnNlY3VyaXR5T3JpZ2luKCkudG9TdHJp
bmcoKSk7CiAKICAgICBXZWJQcm9jZXNzUG9vbDo6c2VuZFRvQWxsUmVtb3RlV29ya2VyUHJvY2Vz
c2VzKE1lc3NhZ2VzOjpXZWJOb3RpZmljYXRpb25NYW5hZ2VyOjpEaWRSZW1vdmVOb3RpZmljYXRp
b25EZWNpc2lvbnMob3JpZ2luU3RyaW5ncykpOwogCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViS2l0
L1VJUHJvY2Vzcy9Ob3RpZmljYXRpb25zL1dlYk5vdGlmaWNhdGlvblByb3ZpZGVyLmNwcCBiL1Nv
dXJjZS9XZWJLaXQvVUlQcm9jZXNzL05vdGlmaWNhdGlvbnMvV2ViTm90aWZpY2F0aW9uUHJvdmlk
ZXIuY3BwCmluZGV4IDg1OGQ3NjQ2MmZjYWU2OGNjNGIwYTNhYzg1ZGI1NTZmNzhkZWQ2ZWQuLmYz
NjVkNDIzMzBmZjY4MjZhMTZjNGU3ZTFkNDNkN2VjNzk1ZGVhYzAgMTAwNjQ0Ci0tLSBhL1NvdXJj
ZS9XZWJLaXQvVUlQcm9jZXNzL05vdGlmaWNhdGlvbnMvV2ViTm90aWZpY2F0aW9uUHJvdmlkZXIu
Y3BwCisrKyBiL1NvdXJjZS9XZWJLaXQvVUlQcm9jZXNzL05vdGlmaWNhdGlvbnMvV2ViTm90aWZp
Y2F0aW9uUHJvdmlkZXIuY3BwCkBAIC03MSwxMiArNzEsOSBAQCB2b2lkIFdlYk5vdGlmaWNhdGlv
blByb3ZpZGVyOjpjbGVhck5vdGlmaWNhdGlvbnMoY29uc3QgVmVjdG9yPHVpbnQ2NF90PiYgbm90
aWZpYwogICAgIGlmICghbV9jbGllbnQuY2xlYXJOb3RpZmljYXRpb25zKQogICAgICAgICByZXR1
cm47CiAKLSAgICBWZWN0b3I8UmVmUHRyPEFQSTo6T2JqZWN0Pj4gYXJyYXlJRHM7Ci0gICAgYXJy
YXlJRHMucmVzZXJ2ZUluaXRpYWxDYXBhY2l0eShub3RpZmljYXRpb25JRHMuc2l6ZSgpKTsKLQot
ICAgIGZvciAoY29uc3QgYXV0byYgbm90aWZpY2F0aW9uSUQgOiBub3RpZmljYXRpb25JRHMpCi0g
ICAgICAgIGFycmF5SURzLnVuY2hlY2tlZEFwcGVuZChBUEk6OlVJbnQ2NDo6Y3JlYXRlKG5vdGlm
aWNhdGlvbklEKSk7Ci0KKyAgICBhdXRvIGFycmF5SURzID0gbm90aWZpY2F0aW9uSURzLm1hcChb
XShhdXRvJiBub3RpZmljYXRpb25JRCkgLT4gUmVmUHRyPEFQSTo6T2JqZWN0PiB7CisgICAgICAg
IHJldHVybiBBUEk6OlVJbnQ2NDo6Y3JlYXRlKG5vdGlmaWNhdGlvbklEKTsKKyAgICB9KTsKICAg
ICBtX2NsaWVudC5jbGVhck5vdGlmaWNhdGlvbnModG9BUEkoQVBJOjpBcnJheTo6Y3JlYXRlKFdU
Rk1vdmUoYXJyYXlJRHMpKS5wdHIoKSksIG1fY2xpZW50LmJhc2UuY2xpZW50SW5mbyk7CiB9CiAK
ZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJLaXQvVUlQcm9jZXNzL1N0YXRpc3RpY3NSZXF1ZXN0LmNw
cCBiL1NvdXJjZS9XZWJLaXQvVUlQcm9jZXNzL1N0YXRpc3RpY3NSZXF1ZXN0LmNwcAppbmRleCBi
MWMyYzUyOWI0NDMzNmQ2M2RmMDM1ZmQ4NDc0ODYwNzIxMzJhOGY3Li5lM2U2MTY0MzU5MWYyZmRl
NmRjZmY1MDNiMjYxNWM5ZTMyYmViYjVhIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViS2l0L1VJUHJv
Y2Vzcy9TdGF0aXN0aWNzUmVxdWVzdC5jcHAKKysrIGIvU291cmNlL1dlYktpdC9VSVByb2Nlc3Mv
U3RhdGlzdGljc1JlcXVlc3QuY3BwCkBAIC04NCwxMiArODQsOSBAQCB2b2lkIFN0YXRpc3RpY3NS
ZXF1ZXN0Ojpjb21wbGV0ZWRSZXF1ZXN0KHVpbnQ2NF90IHJlcXVlc3RJRCwgY29uc3QgU3RhdGlz
dGljc0RhdAogICAgICAgICBtX3Jlc3BvbnNlRGljdGlvbmFyeS0+c2V0KCJKYXZhU2NyaXB0T2Jq
ZWN0VHlwZUNvdW50cyIsIGNyZWF0ZURpY3Rpb25hcnlGcm9tSGFzaE1hcChkYXRhLmphdmFTY3Jp
cHRPYmplY3RUeXBlQ291bnRzKSk7CiAKICAgICBpZiAoIWRhdGEud2ViQ29yZUNhY2hlU3RhdGlz
dGljcy5pc0VtcHR5KCkpIHsKLSAgICAgICAgVmVjdG9yPFJlZlB0cjxBUEk6Ok9iamVjdD4+IGNh
Y2hlU3RhdGlzdGljczsKLSAgICAgICAgY2FjaGVTdGF0aXN0aWNzLnJlc2VydmVJbml0aWFsQ2Fw
YWNpdHkoZGF0YS53ZWJDb3JlQ2FjaGVTdGF0aXN0aWNzLnNpemUoKSk7Ci0KLSAgICAgICAgZm9y
IChjb25zdCBhdXRvJiBzdGF0aXN0aWMgOiBkYXRhLndlYkNvcmVDYWNoZVN0YXRpc3RpY3MpCi0g
ICAgICAgICAgICBjYWNoZVN0YXRpc3RpY3MudW5jaGVja2VkQXBwZW5kKGNyZWF0ZURpY3Rpb25h
cnlGcm9tSGFzaE1hcChzdGF0aXN0aWMpKTsKLQorICAgICAgICBhdXRvIGNhY2hlU3RhdGlzdGlj
cyA9IGRhdGEud2ViQ29yZUNhY2hlU3RhdGlzdGljcy5tYXAoW10oYXV0byYgc3RhdGlzdGljKSAt
PiBSZWZQdHI8QVBJOjpPYmplY3Q+IHsKKyAgICAgICAgICAgIHJldHVybiBjcmVhdGVEaWN0aW9u
YXJ5RnJvbUhhc2hNYXAoc3RhdGlzdGljKTsKKyAgICAgICAgfSk7CiAgICAgICAgIG1fcmVzcG9u
c2VEaWN0aW9uYXJ5LT5zZXQoIldlYkNvcmVDYWNoZVN0YXRpc3RpY3MiLCBBUEk6OkFycmF5Ojpj
cmVhdGUoV1RGTW92ZShjYWNoZVN0YXRpc3RpY3MpKSk7CiAgICAgfQogCmRpZmYgLS1naXQgYS9T
b3VyY2UvV2ViS2l0L1VJUHJvY2Vzcy9Vc2VyQ29udGVudC9XZWJVc2VyQ29udGVudENvbnRyb2xs
ZXJQcm94eS5jcHAgYi9Tb3VyY2UvV2ViS2l0L1VJUHJvY2Vzcy9Vc2VyQ29udGVudC9XZWJVc2Vy
Q29udGVudENvbnRyb2xsZXJQcm94eS5jcHAKaW5kZXggOTExNzNhNzc4Mzc3NDU0NjdiYmEyYTc4
YjVlNDY4YzVkMjIxNDE4ZS4uZmEyNTRjMmRhZGMwNjMwMjhkZmQ1MDRkMjg5MGE4OTJhZWRhZmIw
OCAxMDA2NDQKLS0tIGEvU291cmNlL1dlYktpdC9VSVByb2Nlc3MvVXNlckNvbnRlbnQvV2ViVXNl
ckNvbnRlbnRDb250cm9sbGVyUHJveHkuY3BwCisrKyBiL1NvdXJjZS9XZWJLaXQvVUlQcm9jZXNz
L1VzZXJDb250ZW50L1dlYlVzZXJDb250ZW50Q29udHJvbGxlclByb3h5LmNwcApAQCAtMjE4LDEx
ICsyMTgsOSBAQCB2b2lkIFdlYlVzZXJDb250ZW50Q29udHJvbGxlclByb3h5OjpyZW1vdmVBbGxV
c2VyU2NyaXB0cygpCiAgICAgZm9yIChhdXRvIHVzZXJTY3JpcHQgOiBtX3VzZXJTY3JpcHRzLT5l
bGVtZW50c09mVHlwZTxBUEk6OlVzZXJTY3JpcHQ+KCkpCiAgICAgICAgIHdvcmxkcy5hZGQoY29u
c3RfY2FzdDxBUEk6OkNvbnRlbnRXb3JsZCo+KCZ1c2VyU2NyaXB0LT5jb250ZW50V29ybGQoKSkp
OwogCi0gICAgVmVjdG9yPENvbnRlbnRXb3JsZElkZW50aWZpZXI+IHdvcmxkSWRlbnRpZmllcnM7
Ci0gICAgd29ybGRJZGVudGlmaWVycy5yZXNlcnZlSW5pdGlhbENhcGFjaXR5KHdvcmxkcy5zaXpl
KCkpOwotICAgIGZvciAoY29uc3QgYXV0byYgd29ybGRDb3VudFBhaXIgOiB3b3JsZHMpCi0gICAg
ICAgIHdvcmxkSWRlbnRpZmllcnMudW5jaGVja2VkQXBwZW5kKHdvcmxkQ291bnRQYWlyLmtleS0+
aWRlbnRpZmllcigpKTsKLQorICAgIGF1dG8gd29ybGRJZGVudGlmaWVycyA9IFdURjo6bWFwKHdv
cmxkcywgW10oYXV0byYgZW50cnkpIHsKKyAgICAgICAgcmV0dXJuIGVudHJ5LmtleS0+aWRlbnRp
ZmllcigpOworICAgIH0pOwogICAgIGZvciAoYXV0byYgcHJvY2VzcyA6IG1fcHJvY2Vzc2VzKQog
ICAgICAgICBwcm9jZXNzLnNlbmQoTWVzc2FnZXM6OldlYlVzZXJDb250ZW50Q29udHJvbGxlcjo6
UmVtb3ZlQWxsVXNlclNjcmlwdHMod29ybGRJZGVudGlmaWVycyksIGlkZW50aWZpZXIoKSk7CiAK
QEAgLTI2NywxMSArMjY1LDkgQEAgdm9pZCBXZWJVc2VyQ29udGVudENvbnRyb2xsZXJQcm94eTo6
cmVtb3ZlQWxsVXNlclN0eWxlU2hlZXRzKCkKICAgICBmb3IgKGF1dG8gdXNlclN0eWxlU2hlZXQg
OiBtX3VzZXJTdHlsZVNoZWV0cy0+ZWxlbWVudHNPZlR5cGU8QVBJOjpVc2VyU3R5bGVTaGVldD4o
KSkKICAgICAgICAgd29ybGRzLmFkZChjb25zdF9jYXN0PEFQSTo6Q29udGVudFdvcmxkKj4oJnVz
ZXJTdHlsZVNoZWV0LT5jb250ZW50V29ybGQoKSkpOwogCi0gICAgVmVjdG9yPENvbnRlbnRXb3Js
ZElkZW50aWZpZXI+IHdvcmxkSWRlbnRpZmllcnM7Ci0gICAgd29ybGRJZGVudGlmaWVycy5yZXNl
cnZlSW5pdGlhbENhcGFjaXR5KHdvcmxkcy5zaXplKCkpOwotICAgIGZvciAoY29uc3QgYXV0byYg
d29ybGRDb3VudFBhaXIgOiB3b3JsZHMpCi0gICAgICAgIHdvcmxkSWRlbnRpZmllcnMudW5jaGVj
a2VkQXBwZW5kKHdvcmxkQ291bnRQYWlyLmtleS0+aWRlbnRpZmllcigpKTsKLQorICAgIGF1dG8g
d29ybGRJZGVudGlmaWVycyA9IFdURjo6bWFwKHdvcmxkcywgW10oYXV0byYgZW50cnkpIHsKKyAg
ICAgICAgcmV0dXJuIGVudHJ5LmtleS0+aWRlbnRpZmllcigpOworICAgIH0pOwogICAgIGZvciAo
YXV0byYgcHJvY2VzcyA6IG1fcHJvY2Vzc2VzKQogICAgICAgICBwcm9jZXNzLnNlbmQoTWVzc2Fn
ZXM6OldlYlVzZXJDb250ZW50Q29udHJvbGxlcjo6UmVtb3ZlQWxsVXNlclN0eWxlU2hlZXRzKHdv
cmxkSWRlbnRpZmllcnMpLCBpZGVudGlmaWVyKCkpOwogCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2Vi
S2l0L1VJUHJvY2Vzcy9XZWJBdXRoZW50aWNhdGlvbi9Db2NvYS9XZWJBdXRoZW50aWNhdGlvblBh
bmVsQ2xpZW50Lm1tIGIvU291cmNlL1dlYktpdC9VSVByb2Nlc3MvV2ViQXV0aGVudGljYXRpb24v
Q29jb2EvV2ViQXV0aGVudGljYXRpb25QYW5lbENsaWVudC5tbQppbmRleCAzOWEzOWQzNGMyM2Rm
OGY5YTJhMjZkMzZmNjk3Y2YyNTU5ZTk2YjI3Li4wMjdjNjkwYmZhODI1MzI3ODYyZGVlNDlmZTMy
MTc4OTQyMmEzYzhjIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViS2l0L1VJUHJvY2Vzcy9XZWJBdXRo
ZW50aWNhdGlvbi9Db2NvYS9XZWJBdXRoZW50aWNhdGlvblBhbmVsQ2xpZW50Lm1tCisrKyBiL1Nv
dXJjZS9XZWJLaXQvVUlQcm9jZXNzL1dlYkF1dGhlbnRpY2F0aW9uL0NvY29hL1dlYkF1dGhlbnRp
Y2F0aW9uUGFuZWxDbGllbnQubW0KQEAgLTE2NSwxMSArMTY1LDkgQEAgdm9pZCBXZWJBdXRoZW50
aWNhdGlvblBhbmVsQ2xpZW50OjpzZWxlY3RBc3NlcnRpb25SZXNwb25zZShWZWN0b3I8UmVmPFdl
YkNvcmU6OkEKICAgICAgICAgcmV0dXJuOwogICAgIH0KIAotICAgIFZlY3RvcjxSZWZQdHI8QVBJ
OjpPYmplY3Q+PiBhcGlSZXNwb25zZXM7Ci0gICAgYXBpUmVzcG9uc2VzLnJlc2VydmVJbml0aWFs
Q2FwYWNpdHkocmVzcG9uc2VzLnNpemUoKSk7Ci0gICAgZm9yIChhdXRvJiByZXNwb25zZSA6IHJl
c3BvbnNlcykKLSAgICAgICAgYXBpUmVzcG9uc2VzLnVuY2hlY2tlZEFwcGVuZChBUEk6OldlYkF1
dGhlbnRpY2F0aW9uQXNzZXJ0aW9uUmVzcG9uc2U6OmNyZWF0ZShyZXNwb25zZS5jb3B5UmVmKCkp
KTsKLQorICAgIGF1dG8gYXBpUmVzcG9uc2VzID0gcmVzcG9uc2VzLm1hcChbXShhdXRvJiByZXNw
b25zZSkgLT4gUmVmUHRyPEFQSTo6T2JqZWN0PiB7CisgICAgICAgIHJldHVybiBBUEk6OldlYkF1
dGhlbnRpY2F0aW9uQXNzZXJ0aW9uUmVzcG9uc2U6OmNyZWF0ZShyZXNwb25zZS5jb3B5UmVmKCkp
OworICAgIH0pOwogICAgIGF1dG8gY2hlY2tlciA9IENvbXBsZXRpb25IYW5kbGVyQ2FsbENoZWNr
ZXI6OmNyZWF0ZShkZWxlZ2F0ZS5nZXQoKSwgQHNlbGVjdG9yKHBhbmVsOnNlbGVjdEFzc2VydGlv
blJlc3BvbnNlOnNvdXJjZTpjb21wbGV0aW9uSGFuZGxlcjopKTsKICAgICBbZGVsZWdhdGUgcGFu
ZWw6bV9wYW5lbCBzZWxlY3RBc3NlcnRpb25SZXNwb25zZTp3cmFwcGVyKEFQSTo6QXJyYXk6OmNy
ZWF0ZShXVEZNb3ZlKGFwaVJlc3BvbnNlcykpKSBzb3VyY2U6d2tXZWJBdXRoZW50aWNhdGlvblNv
dXJjZShzb3VyY2UpIGNvbXBsZXRpb25IYW5kbGVyOm1ha2VCbG9ja1B0cihbY29tcGxldGlvbkhh
bmRsZXIgPSBXVEZNb3ZlKGNvbXBsZXRpb25IYW5kbGVyKSwgY2hlY2tlciA9IFdURk1vdmUoY2hl
Y2tlcildKF9XS1dlYkF1dGhlbnRpY2F0aW9uQXNzZXJ0aW9uUmVzcG9uc2UgKnJlc3BvbnNlKSBt
dXRhYmxlIHsKICAgICAgICAgaWYgKGNoZWNrZXItPmNvbXBsZXRpb25IYW5kbGVySGFzQmVlbkNh
bGxlZCgpKQpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYktpdC9VSVByb2Nlc3MvV2ViQXV0aGVudGlj
YXRpb24vZmlkby9DdGFwQXV0aGVudGljYXRvci5jcHAgYi9Tb3VyY2UvV2ViS2l0L1VJUHJvY2Vz
cy9XZWJBdXRoZW50aWNhdGlvbi9maWRvL0N0YXBBdXRoZW50aWNhdG9yLmNwcAppbmRleCAzMzA1
NTM0MDM1YWVkNmU1Nzc2OTY2OTlkM2MxZjdjODIyZWMzOTU5Li5lNTBlNjlkYjMzODBmN2I2MjBh
ODQxMTYwZDk4NDQ2OWQ4MGVkYzA5IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViS2l0L1VJUHJvY2Vz
cy9XZWJBdXRoZW50aWNhdGlvbi9maWRvL0N0YXBBdXRoZW50aWNhdG9yLmNwcAorKysgYi9Tb3Vy
Y2UvV2ViS2l0L1VJUHJvY2Vzcy9XZWJBdXRoZW50aWNhdGlvbi9maWRvL0N0YXBBdXRoZW50aWNh
dG9yLmNwcApAQCAtMjA4LDEyICsyMDgsNyBAQCB2b2lkIEN0YXBBdXRoZW50aWNhdG9yOjpjb250
aW51ZUdldE5leHRBc3NlcnRpb25BZnRlclJlc3BvbnNlUmVjZWl2ZWQoVmVjdG9yPHVpbgogCiAg
ICAgaWYgKCFtX3JlbWFpbmluZ0Fzc2VydGlvblJlc3BvbnNlcykgewogICAgICAgICBpZiAoYXV0
byogb2JzZXJ2ZXIgPSB0aGlzLT5vYnNlcnZlcigpKSB7Ci0gICAgICAgICAgICBWZWN0b3I8UmVm
PEF1dGhlbnRpY2F0b3JBc3NlcnRpb25SZXNwb25zZT4+IHJlc3BvbnNlc0NvcHk7Ci0gICAgICAg
ICAgICByZXNwb25zZXNDb3B5LnJlc2VydmVJbml0aWFsQ2FwYWNpdHkobV9hc3NlcnRpb25SZXNw
b25zZXMuc2l6ZSgpKTsKLSAgICAgICAgICAgIGZvciAoYXV0byYgcmVzcG9uc2UgOiBtX2Fzc2Vy
dGlvblJlc3BvbnNlcykKLSAgICAgICAgICAgICAgICByZXNwb25zZXNDb3B5LnVuY2hlY2tlZEFw
cGVuZChyZXNwb25zZS5jb3B5UmVmKCkpOwotCi0gICAgICAgICAgICBvYnNlcnZlci0+c2VsZWN0
QXNzZXJ0aW9uUmVzcG9uc2UoV1RGTW92ZShyZXNwb25zZXNDb3B5KSwgV2ViQXV0aGVudGljYXRp
b25Tb3VyY2U6OkV4dGVybmFsLCBbdGhpcywgd2Vha1RoaXMgPSBXZWFrUHRyIHsgKnRoaXMgfV0g
KEF1dGhlbnRpY2F0b3JBc3NlcnRpb25SZXNwb25zZSogcmVzcG9uc2UpIHsKKyAgICAgICAgICAg
IG9ic2VydmVyLT5zZWxlY3RBc3NlcnRpb25SZXNwb25zZShWZWN0b3IgeyBtX2Fzc2VydGlvblJl
c3BvbnNlcyB9LCBXZWJBdXRoZW50aWNhdGlvblNvdXJjZTo6RXh0ZXJuYWwsIFt0aGlzLCB3ZWFr
VGhpcyA9IFdlYWtQdHIgeyAqdGhpcyB9XSAoQXV0aGVudGljYXRvckFzc2VydGlvblJlc3BvbnNl
KiByZXNwb25zZSkgewogICAgICAgICAgICAgICAgIEFTU0VSVChSdW5Mb29wOjppc01haW4oKSk7
CiAgICAgICAgICAgICAgICAgaWYgKCF3ZWFrVGhpcykKICAgICAgICAgICAgICAgICAgICAgcmV0
dXJuOwpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYktpdC9VSVByb2Nlc3MvV2ViQmFja0ZvcndhcmRM
aXN0LmNwcCBiL1NvdXJjZS9XZWJLaXQvVUlQcm9jZXNzL1dlYkJhY2tGb3J3YXJkTGlzdC5jcHAK
aW5kZXggZTBlOTQ0ZDEyZGZjMTJiYzZjZWNmMDM5NjIxOWY1MzM0MzQyYjQ1Mi4uYzc0MzQzZTY1
Yjg4OWY3ODY5ZGM4Y2NhMzQwNTFiOGIyNjU0MDJiNiAxMDA2NDQKLS0tIGEvU291cmNlL1dlYktp
dC9VSVByb2Nlc3MvV2ViQmFja0ZvcndhcmRMaXN0LmNwcAorKysgYi9Tb3VyY2UvV2ViS2l0L1VJ
UHJvY2Vzcy9XZWJCYWNrRm9yd2FyZExpc3QuY3BwCkBAIC0xMDIsMTAgKzEwMiwxMCBAQCB2b2lk
IFdlYkJhY2tGb3J3YXJkTGlzdDo6YWRkSXRlbShSZWY8V2ViQmFja0ZvcndhcmRMaXN0SXRlbT4m
JiBuZXdJdGVtKQogCiAgICAgICAgIC8vIFRvc3MgZXZlcnl0aGluZyBpbiB0aGUgZm9yd2FyZCBs
aXN0LgogICAgICAgICB1bnNpZ25lZCB0YXJnZXRTaXplID0gKm1fY3VycmVudEluZGV4ICsgMTsK
LSAgICAgICAgcmVtb3ZlZEl0ZW1zLnJlc2VydmVDYXBhY2l0eShtX2VudHJpZXMuc2l6ZSgpIC0g
dGFyZ2V0U2l6ZSk7CisgICAgICAgIHJlbW92ZWRJdGVtcy5yZXNlcnZlSW5pdGlhbENhcGFjaXR5
KG1fZW50cmllcy5zaXplKCkgLSB0YXJnZXRTaXplKTsKICAgICAgICAgd2hpbGUgKG1fZW50cmll
cy5zaXplKCkgPiB0YXJnZXRTaXplKSB7CiAgICAgICAgICAgICBkaWRSZW1vdmVJdGVtKG1fZW50
cmllcy5sYXN0KCkpOwotICAgICAgICAgICAgcmVtb3ZlZEl0ZW1zLmFwcGVuZChXVEZNb3ZlKG1f
ZW50cmllcy5sYXN0KCkpKTsKKyAgICAgICAgICAgIHJlbW92ZWRJdGVtcy51bmNoZWNrZWRBcHBl
bmQoV1RGTW92ZShtX2VudHJpZXMubGFzdCgpKSk7CiAgICAgICAgICAgICBtX2VudHJpZXMucmVt
b3ZlTGFzdCgpOwogICAgICAgICB9CiAKQEAgLTM4NywxMCArMzg3LDEwIEBAIHZvaWQgV2ViQmFj
a0ZvcndhcmRMaXN0OjpjbGVhcigpCiAgICAgICAgICAgICBkaWRSZW1vdmVJdGVtKG1fZW50cmll
c1tpXSk7CiAgICAgfQogCi0gICAgcmVtb3ZlZEl0ZW1zLnJlc2VydmVDYXBhY2l0eShzaXplIC0g
MSk7CisgICAgcmVtb3ZlZEl0ZW1zLnJlc2VydmVJbml0aWFsQ2FwYWNpdHkoc2l6ZSAtIDEpOwog
ICAgIGZvciAoc2l6ZV90IGkgPSAwOyBpIDwgc2l6ZTsgKytpKSB7CiAgICAgICAgIGlmIChtX2N1
cnJlbnRJbmRleCAmJiBpICE9ICptX2N1cnJlbnRJbmRleCkKLSAgICAgICAgICAgIHJlbW92ZWRJ
dGVtcy5hcHBlbmQoV1RGTW92ZShtX2VudHJpZXNbaV0pKTsKKyAgICAgICAgICAgIHJlbW92ZWRJ
dGVtcy51bmNoZWNrZWRBcHBlbmQoV1RGTW92ZShtX2VudHJpZXNbaV0pKTsKICAgICB9CiAKICAg
ICBtX2N1cnJlbnRJbmRleCA9IDA7CkBAIC00MzgsMTYgKzQzOCwxMiBAQCB2b2lkIFdlYkJhY2tG
b3J3YXJkTGlzdDo6cmVzdG9yZUZyb21TdGF0ZShCYWNrRm9yd2FyZExpc3RTdGF0ZSBiYWNrRm9y
d2FyZExpc3RTdAogICAgIGlmICghbV9wYWdlKQogICAgICAgICByZXR1cm47CiAKLSAgICBWZWN0
b3I8UmVmPFdlYkJhY2tGb3J3YXJkTGlzdEl0ZW0+PiBpdGVtczsKLSAgICBpdGVtcy5yZXNlcnZl
SW5pdGlhbENhcGFjaXR5KGJhY2tGb3J3YXJkTGlzdFN0YXRlLml0ZW1zLnNpemUoKSk7Ci0KICAg
ICAvLyBGSVhNRTogRW5hYmxlIHJlc3RvcmluZyByZXNvdXJjZURpcmVjdG9yeVVSTC4KLSAgICBm
b3IgKGF1dG8mIGJhY2tGb3J3YXJkTGlzdEl0ZW1TdGF0ZSA6IGJhY2tGb3J3YXJkTGlzdFN0YXRl
Lml0ZW1zKSB7Ci0gICAgICAgIGJhY2tGb3J3YXJkTGlzdEl0ZW1TdGF0ZS5pZGVudGlmaWVyID0g
eyBQcm9jZXNzOjppZGVudGlmaWVyKCksIE9iamVjdElkZW50aWZpZXI8QmFja0ZvcndhcmRJdGVt
SWRlbnRpZmllcjo6SXRlbUlkZW50aWZpZXJUeXBlPjo6Z2VuZXJhdGUoKSB9OwotICAgICAgICBp
dGVtcy51bmNoZWNrZWRBcHBlbmQoV2ViQmFja0ZvcndhcmRMaXN0SXRlbTo6Y3JlYXRlKFdURk1v
dmUoYmFja0ZvcndhcmRMaXN0SXRlbVN0YXRlKSwgbV9wYWdlLT5pZGVudGlmaWVyKCkpKTsKLSAg
ICB9CisgICAgbV9lbnRyaWVzID0gV1RGOjptYXAoV1RGTW92ZShiYWNrRm9yd2FyZExpc3RTdGF0
ZS5pdGVtcyksIFt0aGlzXShhdXRvJiYgc3RhdGUpIHsKKyAgICAgICAgc3RhdGUuaWRlbnRpZmll
ciA9IHsgUHJvY2Vzczo6aWRlbnRpZmllcigpLCBPYmplY3RJZGVudGlmaWVyPEJhY2tGb3J3YXJk
SXRlbUlkZW50aWZpZXI6Okl0ZW1JZGVudGlmaWVyVHlwZT46OmdlbmVyYXRlKCkgfTsKKyAgICAg
ICAgcmV0dXJuIFdlYkJhY2tGb3J3YXJkTGlzdEl0ZW06OmNyZWF0ZShXVEZNb3ZlKHN0YXRlKSwg
bV9wYWdlLT5pZGVudGlmaWVyKCkpOworICAgIH0pOwogICAgIG1fY3VycmVudEluZGV4ID0gYmFj
a0ZvcndhcmRMaXN0U3RhdGUuY3VycmVudEluZGV4ID8gc3RkOjpvcHRpb25hbDxzaXplX3Q+KCpi
YWNrRm9yd2FyZExpc3RTdGF0ZS5jdXJyZW50SW5kZXgpIDogc3RkOjpudWxsb3B0OwotICAgIG1f
ZW50cmllcyA9IFdURk1vdmUoaXRlbXMpOwogCiAgICAgTE9HKEJhY2tGb3J3YXJkLCAiKEJhY2sv
Rm9yd2FyZCkgV2ViQmFja0ZvcndhcmRMaXN0ICVwIHJlc3RvcmVkIGZyb20gc3RhdGUgKGhhcyAl
enUgZW50cmllcykiLCB0aGlzLCBtX2VudHJpZXMuc2l6ZSgpKTsKIH0KZGlmZiAtLWdpdCBhL1Nv
dXJjZS9XZWJLaXQvVUlQcm9jZXNzL1dlYlBhZ2VQcm94eS5jcHAgYi9Tb3VyY2UvV2ViS2l0L1VJ
UHJvY2Vzcy9XZWJQYWdlUHJveHkuY3BwCmluZGV4IGFkNTU3ZDkwZjNiZmQ4MjVjZjJlZGE5Y2E0
MzkzNzFmMmQ4MmJlMTkuLjJlZTg3YjU1NDc3ZTU3ZTNkZGJkYjliYzAzZjA3ZjE5NzU1NDA2NGIg
MTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJLaXQvVUlQcm9jZXNzL1dlYlBhZ2VQcm94eS5jcHAKKysr
IGIvU291cmNlL1dlYktpdC9VSVByb2Nlc3MvV2ViUGFnZVByb3h5LmNwcApAQCAtNDM5MCwxMCAr
NDM5MCw3IEBAIHZvaWQgV2ViUGFnZVByb3h5OjpydW5KYXZhU2NyaXB0SW5GcmFtZUluU2NyaXB0
V29ybGQoUnVuSmF2YVNjcmlwdFBhcmFtZXRlcnMmJiBwCiAgICAgICAgICAgICByZXR1cm4gY2Fs
bGJhY2tGdW5jdGlvbihtYWtlVW5leHBlY3RlZChXVEZNb3ZlKCpkZXRhaWxzKSkpOwogICAgICAg
ICBpZiAoZGF0YVJlZmVyZW5jZS5lbXB0eSgpKQogICAgICAgICAgICAgcmV0dXJuIGNhbGxiYWNr
RnVuY3Rpb24oeyBudWxscHRyIH0pOwotICAgICAgICBWZWN0b3I8dWludDhfdD4gZGF0YTsKLSAg
ICAgICAgZGF0YS5yZXNlcnZlSW5pdGlhbENhcGFjaXR5KGRhdGFSZWZlcmVuY2Uuc2l6ZSgpKTsK
LSAgICAgICAgZGF0YS5hcHBlbmQoZGF0YVJlZmVyZW5jZS5kYXRhKCksIGRhdGFSZWZlcmVuY2Uu
c2l6ZSgpKTsKLSAgICAgICAgY2FsbGJhY2tGdW5jdGlvbih7IEFQSTo6U2VyaWFsaXplZFNjcmlw
dFZhbHVlOjphZG9wdChXVEZNb3ZlKGRhdGEpKS5wdHIoKSB9KTsKKyAgICAgICAgY2FsbGJhY2tG
dW5jdGlvbih7IEFQSTo6U2VyaWFsaXplZFNjcmlwdFZhbHVlOjphZG9wdChWZWN0b3IoZGF0YVJl
ZmVyZW5jZSkpLnB0cigpIH0pOwogICAgIH0pOwogfQogCkBAIC0xMDcwMywxMSArMTA3MDAsOSBA
QCBXZWJQYWdlUHJveHk6OlNwZWVjaFN5bnRoZXNpc0RhdGEmIFdlYlBhZ2VQcm94eTo6c3BlZWNo
U3ludGhlc2lzRGF0YSgpCiAKIHZvaWQgV2ViUGFnZVByb3h5OjpzcGVlY2hTeW50aGVzaXNWb2lj
ZUxpc3QoQ29tcGxldGlvbkhhbmRsZXI8dm9pZChWZWN0b3I8V2ViU3BlZWNoU3ludGhlc2lzVm9p
Y2U+JiYpPiYmIGNvbXBsZXRpb25IYW5kbGVyKQogewotICAgIGF1dG8mIHZvaWNlTGlzdCA9IHNw
ZWVjaFN5bnRoZXNpc0RhdGEoKS5zeW50aGVzaXplci0+dm9pY2VMaXN0KCk7Ci0gICAgVmVjdG9y
PFdlYlNwZWVjaFN5bnRoZXNpc1ZvaWNlPiByZXN1bHQ7Ci0gICAgcmVzdWx0LnJlc2VydmVJbml0
aWFsQ2FwYWNpdHkodm9pY2VMaXN0LnNpemUoKSk7Ci0gICAgZm9yIChhdXRvJiB2b2ljZSA6IHZv
aWNlTGlzdCkKLSAgICAgICAgcmVzdWx0LnVuY2hlY2tlZEFwcGVuZChXZWJTcGVlY2hTeW50aGVz
aXNWb2ljZSB7IHZvaWNlLT52b2ljZVVSSSgpLCB2b2ljZS0+bmFtZSgpLCB2b2ljZS0+bGFuZygp
LCB2b2ljZS0+bG9jYWxTZXJ2aWNlKCksIHZvaWNlLT5pc0RlZmF1bHQoKSB9KTsKKyAgICBhdXRv
IHJlc3VsdCA9IHNwZWVjaFN5bnRoZXNpc0RhdGEoKS5zeW50aGVzaXplci0+dm9pY2VMaXN0KCku
bWFwKFtdKGF1dG8mIHZvaWNlKSB7CisgICAgICAgIHJldHVybiBXZWJTcGVlY2hTeW50aGVzaXNW
b2ljZSB7IHZvaWNlLT52b2ljZVVSSSgpLCB2b2ljZS0+bmFtZSgpLCB2b2ljZS0+bGFuZygpLCB2
b2ljZS0+bG9jYWxTZXJ2aWNlKCksIHZvaWNlLT5pc0RlZmF1bHQoKSB9OworICAgIH0pOwogICAg
IGNvbXBsZXRpb25IYW5kbGVyKFdURk1vdmUocmVzdWx0KSk7CiB9CiAKZGlmZiAtLWdpdCBhL1Nv
dXJjZS9XZWJLaXQvVUlQcm9jZXNzL1dlYnNpdGVEYXRhL1dlYnNpdGVEYXRhU3RvcmUuY3BwIGIv
U291cmNlL1dlYktpdC9VSVByb2Nlc3MvV2Vic2l0ZURhdGEvV2Vic2l0ZURhdGFTdG9yZS5jcHAK
aW5kZXggOWVmMTRhNWU4ZjY0ZDczOWY0Y2QzMzE2MDgxNzhlYTA1MTEyNmVmMC4uYjM2ZDlhNzRi
OWExNzVhMDgxNmI3YTJlMTRmMTM5ZGI1ZWY1NmU2ZCAxMDA2NDQKLS0tIGEvU291cmNlL1dlYktp
dC9VSVByb2Nlc3MvV2Vic2l0ZURhdGEvV2Vic2l0ZURhdGFTdG9yZS5jcHAKKysrIGIvU291cmNl
L1dlYktpdC9VSVByb2Nlc3MvV2Vic2l0ZURhdGEvV2Vic2l0ZURhdGFTdG9yZS5jcHAKQEAgLTMy
NCwxMSArMzI0LDkgQEAgdm9pZCBXZWJzaXRlRGF0YVN0b3JlOjpmZXRjaERhdGFBbmRBcHBseShP
cHRpb25TZXQ8V2Vic2l0ZURhdGFUeXBlPiBkYXRhVHlwZXMsIE8KICAgICAgICAgewogICAgICAg
ICAgICAgQVNTRVJUKFJ1bkxvb3A6OmlzTWFpbigpKTsKIAotICAgICAgICAgICAgVmVjdG9yPFdl
YnNpdGVEYXRhUmVjb3JkPiByZWNvcmRzOwotICAgICAgICAgICAgcmVjb3Jkcy5yZXNlcnZlSW5p
dGlhbENhcGFjaXR5KG1fd2Vic2l0ZURhdGFSZWNvcmRzLnNpemUoKSk7Ci0gICAgICAgICAgICBm
b3IgKGF1dG8mIHJlY29yZCA6IG1fd2Vic2l0ZURhdGFSZWNvcmRzLnZhbHVlcygpKQotICAgICAg
ICAgICAgICAgIHJlY29yZHMudW5jaGVja2VkQXBwZW5kKG1fcXVldWUucHRyKCkgIT0gJldvcmtR
dWV1ZTo6bWFpbigpID8gY3Jvc3NUaHJlYWRDb3B5KHJlY29yZCkgOiBXVEZNb3ZlKHJlY29yZCkp
OwotCisgICAgICAgICAgICBhdXRvIHJlY29yZHMgPSBXVEY6Om1hcChXVEZNb3ZlKG1fd2Vic2l0
ZURhdGFSZWNvcmRzKSwgW3RoaXNdKGF1dG8mJiBlbnRyeSkgeworICAgICAgICAgICAgICAgIHJl
dHVybiBtX3F1ZXVlLnB0cigpICE9ICZXb3JrUXVldWU6Om1haW4oKSA/IGNyb3NzVGhyZWFkQ29w
eShXVEZNb3ZlKGVudHJ5LnZhbHVlKSkgOiBXVEZNb3ZlKGVudHJ5LnZhbHVlKTsKKyAgICAgICAg
ICAgIH0pOwogICAgICAgICAgICAgbV9xdWV1ZS0+ZGlzcGF0Y2goW2FwcGx5ID0gV1RGTW92ZSht
X2FwcGx5KSwgcmVjb3JkcyA9IFdURk1vdmUocmVjb3JkcyldICgpIG11dGFibGUgewogICAgICAg
ICAgICAgICAgIGFwcGx5KFdURk1vdmUocmVjb3JkcykpOwogICAgICAgICAgICAgfSk7CkBAIC0x
NzI4LDExICsxNzI2LDkgQEAgdm9pZCBXZWJzaXRlRGF0YVN0b3JlOjpzZXRDYWNoZU1vZGVsU3lu
Y2hyb25vdXNseUZvclRlc3RpbmcoQ2FjaGVNb2RlbCBjYWNoZU1vZGUKIAogVmVjdG9yPFdlYnNp
dGVEYXRhU3RvcmVQYXJhbWV0ZXJzPiBXZWJzaXRlRGF0YVN0b3JlOjpwYXJhbWV0ZXJzRnJvbUVh
Y2hXZWJzaXRlRGF0YVN0b3JlKCkKIHsKLSAgICBWZWN0b3I8V2Vic2l0ZURhdGFTdG9yZVBhcmFt
ZXRlcnM+IHBhcmFtZXRlcnM7Ci0gICAgcGFyYW1ldGVycy5yZXNlcnZlSW5pdGlhbENhcGFjaXR5
KGFsbERhdGFTdG9yZXMoKS5zaXplKCkpOwotICAgIGZvciAoYXV0byogZGF0YVN0b3JlIDogYWxs
RGF0YVN0b3JlcygpLnZhbHVlcygpKQotICAgICAgICBwYXJhbWV0ZXJzLnVuY2hlY2tlZEFwcGVu
ZChkYXRhU3RvcmUtPnBhcmFtZXRlcnMoKSk7Ci0gICAgcmV0dXJuIHBhcmFtZXRlcnM7CisgICAg
cmV0dXJuIFdURjo6bWFwKGFsbERhdGFTdG9yZXMoKSwgW10oYXV0byYgZW50cnkpIHsKKyAgICAg
ICAgcmV0dXJuIGVudHJ5LnZhbHVlLT5wYXJhbWV0ZXJzKCk7CisgICAgfSk7CiB9CiAKIFdlYnNp
dGVEYXRhU3RvcmVQYXJhbWV0ZXJzIFdlYnNpdGVEYXRhU3RvcmU6OnBhcmFtZXRlcnMoKQpkaWZm
IC0tZ2l0IGEvU291cmNlL1dlYktpdC9VSVByb2Nlc3MvbWFjL1dLVGV4dEZpbmRlckNsaWVudC5t
bSBiL1NvdXJjZS9XZWJLaXQvVUlQcm9jZXNzL21hYy9XS1RleHRGaW5kZXJDbGllbnQubW0KaW5k
ZXggYzAzN2Q2NWIyYmMwZjNjMGExZWExMjZlZmQyMTgyN2RhMjFhYWJiOS4uNzIwNzVmYmM4NjJj
MzRkMGM4NmI0YWM1MzhlNGM0NjY5OWNiZWU0MiAxMDA2NDQKLS0tIGEvU291cmNlL1dlYktpdC9V
SVByb2Nlc3MvbWFjL1dLVGV4dEZpbmRlckNsaWVudC5tbQorKysgYi9Tb3VyY2UvV2ViS2l0L1VJ
UHJvY2Vzcy9tYWMvV0tUZXh0RmluZGVyQ2xpZW50Lm1tCkBAIC0xOTEsNyArMTkxLDcgQEAgLSAo
dm9pZCl3aWxsRGVzdHJveVZpZXc6KE5TVmlldyAqKXZpZXcKIC0gKHZvaWQpcmVwbGFjZU1hdGNo
ZXM6KE5TQXJyYXkgKiltYXRjaGVzIHdpdGhTdHJpbmc6KE5TU3RyaW5nICopcmVwbGFjZW1lbnRU
ZXh0IGluU2VsZWN0aW9uT25seTooQk9PTClzZWxlY3Rpb25Pbmx5IHJlc3VsdENvbGxlY3Rvcjoo
dm9pZCAoXikoTlNVSW50ZWdlciByZXBsYWNlbWVudENvdW50KSlyZXN1bHRDb2xsZWN0b3IKIHsK
ICAgICBWZWN0b3I8dWludDMyX3Q+IG1hdGNoSW5kaWNlczsKLSAgICBtYXRjaEluZGljZXMucmVz
ZXJ2ZUNhcGFjaXR5KG1hdGNoZXMuY291bnQpOworICAgIG1hdGNoSW5kaWNlcy5yZXNlcnZlSW5p
dGlhbENhcGFjaXR5KG1hdGNoZXMuY291bnQpOwogICAgIGZvciAoaWQgbWF0Y2ggaW4gbWF0Y2hl
cykgewogICAgICAgICBpZiAoW21hdGNoIGlzS2luZE9mQ2xhc3M6V0tUZXh0RmluZGVyTWF0Y2gu
Y2xhc3NdKQogICAgICAgICAgICAgbWF0Y2hJbmRpY2VzLnVuY2hlY2tlZEFwcGVuZChbKFdLVGV4
dEZpbmRlck1hdGNoICopbWF0Y2ggaW5kZXhdKTsKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJLaXQv
V2ViUHJvY2Vzcy9HUFUvbWVkaWEvUmVtb3RlUmVtb3RlQ29tbWFuZExpc3RlbmVyLmNwcCBiL1Nv
dXJjZS9XZWJLaXQvV2ViUHJvY2Vzcy9HUFUvbWVkaWEvUmVtb3RlUmVtb3RlQ29tbWFuZExpc3Rl
bmVyLmNwcAppbmRleCA3NzEwYTNhNDQxMDAxYWZjNmRmZDBjZGQyNWNhM2I4ZWVmN2E4ZmFlLi4x
MDMwNDgyMWQ4NzkzNmMwZjdlODUwNDUyMTc5MGMzN2IyNTRmNjEwIDEwMDY0NAotLS0gYS9Tb3Vy
Y2UvV2ViS2l0L1dlYlByb2Nlc3MvR1BVL21lZGlhL1JlbW90ZVJlbW90ZUNvbW1hbmRMaXN0ZW5l
ci5jcHAKKysrIGIvU291cmNlL1dlYktpdC9XZWJQcm9jZXNzL0dQVS9tZWRpYS9SZW1vdGVSZW1v
dGVDb21tYW5kTGlzdGVuZXIuY3BwCkBAIC05NCwxMiArOTQsNyBAQCB2b2lkIFJlbW90ZVJlbW90
ZUNvbW1hbmRMaXN0ZW5lcjo6dXBkYXRlU3VwcG9ydGVkQ29tbWFuZHMoKQogICAgIG1fY3VycmVu
dENvbW1hbmRzID0gc3VwcG9ydGVkQ29tbWFuZHM7CiAgICAgbV9jdXJyZW50U3VwcG9ydFNlZWtp
bmcgPSBzdXBwb3J0c1NlZWtpbmcoKTsKIAotICAgIFZlY3RvcjxQbGF0Zm9ybU1lZGlhU2Vzc2lv
bjo6UmVtb3RlQ29udHJvbENvbW1hbmRUeXBlPiBjb21tYW5kczsKLSAgICBjb21tYW5kcy5yZXNl
cnZlSW5pdGlhbENhcGFjaXR5KHN1cHBvcnRlZENvbW1hbmRzLnNpemUoKSk7Ci0gICAgZm9yIChh
dXRvIGNvbW1hbmQgOiBzdXBwb3J0ZWRDb21tYW5kcykKLSAgICAgICAgY29tbWFuZHMudW5jaGVj
a2VkQXBwZW5kKGNvbW1hbmQpOwotCi0gICAgZW5zdXJlR1BVUHJvY2Vzc0Nvbm5lY3Rpb24oKS5j
b25uZWN0aW9uKCkuc2VuZChNZXNzYWdlczo6UmVtb3RlUmVtb3RlQ29tbWFuZExpc3RlbmVyUHJv
eHk6OlVwZGF0ZVN1cHBvcnRlZENvbW1hbmRzIHsgV1RGTW92ZShjb21tYW5kcyksIG1fY3VycmVu
dFN1cHBvcnRTZWVraW5nIH0sIG1faWRlbnRpZmllcik7CisgICAgZW5zdXJlR1BVUHJvY2Vzc0Nv
bm5lY3Rpb24oKS5jb25uZWN0aW9uKCkuc2VuZChNZXNzYWdlczo6UmVtb3RlUmVtb3RlQ29tbWFu
ZExpc3RlbmVyUHJveHk6OlVwZGF0ZVN1cHBvcnRlZENvbW1hbmRzIHsgY29weVRvVmVjdG9yKHN1
cHBvcnRlZENvbW1hbmRzKSwgbV9jdXJyZW50U3VwcG9ydFNlZWtpbmcgfSwgbV9pZGVudGlmaWVy
KTsKIH0KIAogfQpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYktpdC9XZWJQcm9jZXNzL0luamVjdGVk
QnVuZGxlL0FQSS9jL1dLQnVuZGxlUGFnZS5jcHAgYi9Tb3VyY2UvV2ViS2l0L1dlYlByb2Nlc3Mv
SW5qZWN0ZWRCdW5kbGUvQVBJL2MvV0tCdW5kbGVQYWdlLmNwcAppbmRleCAyN2Y2NDQwMGRhMzYy
YWFlNmZiODIyNTM0MTJmZmM5ZmEzYTMxYmRhLi5jOGJjZjE0N2I1ZWY1MTQyZTI4ZmQ0YmQyNjBk
NzQ2NTNmNTA4NThiIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViS2l0L1dlYlByb2Nlc3MvSW5qZWN0
ZWRCdW5kbGUvQVBJL2MvV0tCdW5kbGVQYWdlLmNwcAorKysgYi9Tb3VyY2UvV2ViS2l0L1dlYlBy
b2Nlc3MvSW5qZWN0ZWRCdW5kbGUvQVBJL2MvV0tCdW5kbGVQYWdlLmNwcApAQCAtMTg3LDE0ICsx
ODcsOSBAQCB2b2lkIFdLQnVuZGxlUGFnZUNsaWNrTWVudUl0ZW0oV0tCdW5kbGVQYWdlUmVmIHBh
Z2VSZWYsIFdLQ29udGV4dE1lbnVJdGVtUmVmIGl0ZQogI2lmIEVOQUJMRShDT05URVhUX01FTlVT
KQogc3RhdGljIFJlZjxBUEk6OkFycmF5PiBjb250ZXh0TWVudUl0ZW1zKGNvbnN0IFdlYktpdDo6
V2ViQ29udGV4dE1lbnUmIGNvbnRleHRNZW51KQogewotICAgIGF1dG8gaXRlbXMgPSBjb250ZXh0
TWVudS5pdGVtcygpOwotCi0gICAgVmVjdG9yPFJlZlB0cjxBUEk6Ok9iamVjdD4+IG1lbnVJdGVt
czsKLSAgICBtZW51SXRlbXMucmVzZXJ2ZUluaXRpYWxDYXBhY2l0eShpdGVtcy5zaXplKCkpOwot
Ci0gICAgZm9yIChjb25zdCBhdXRvJiBpdGVtIDogaXRlbXMpCi0gICAgICAgIG1lbnVJdGVtcy51
bmNoZWNrZWRBcHBlbmQoV2ViS2l0OjpXZWJDb250ZXh0TWVudUl0ZW06OmNyZWF0ZShpdGVtKSk7
Ci0KKyAgICBhdXRvIG1lbnVJdGVtcyA9IGNvbnRleHRNZW51Lml0ZW1zKCkubWFwKFtdKGF1dG8m
IGl0ZW0pIC0+IFJlZlB0cjxBUEk6Ok9iamVjdD4geworICAgICAgICByZXR1cm4gV2ViS2l0OjpX
ZWJDb250ZXh0TWVudUl0ZW06OmNyZWF0ZShpdGVtKTsKKyAgICB9KTsKICAgICByZXR1cm4gQVBJ
OjpBcnJheTo6Y3JlYXRlKFdURk1vdmUobWVudUl0ZW1zKSk7CiB9CiAjZW5kaWYKQEAgLTg0NSwx
MyArODQwLDkgQEAgdm9pZCBXS0J1bmRsZVBhZ2VSZXNldEFwcGxpY2F0aW9uQ2FjaGVPcmlnaW5R
dW90YShXS0J1bmRsZVBhZ2VSZWYgcGFnZSwgV0tTdHJpbmcKIFdLQXJyYXlSZWYgV0tCdW5kbGVQ
YWdlQ29weU9yaWdpbnNXaXRoQXBwbGljYXRpb25DYWNoZShXS0J1bmRsZVBhZ2VSZWYgcGFnZSkK
IHsKICAgICBhdXRvIG9yaWdpbnMgPSBXZWJLaXQ6OnRvSW1wbChwYWdlKS0+Y29yZVBhZ2UoKS0+
YXBwbGljYXRpb25DYWNoZVN0b3JhZ2UoKS5vcmlnaW5zV2l0aENhY2hlKCk7Ci0KLSAgICBWZWN0
b3I8UmVmUHRyPEFQSTo6T2JqZWN0Pj4gb3JpZ2luSWRlbnRpZmllcnM7Ci0gICAgb3JpZ2luSWRl
bnRpZmllcnMucmVzZXJ2ZUluaXRpYWxDYXBhY2l0eShvcmlnaW5zLnNpemUoKSk7Ci0KLSAgICBm
b3IgKGNvbnN0IGF1dG8mIG9yaWdpbiA6IG9yaWdpbnMpCi0gICAgICAgIG9yaWdpbklkZW50aWZp
ZXJzLnVuY2hlY2tlZEFwcGVuZChBUEk6OlN0cmluZzo6Y3JlYXRlKG9yaWdpbi5kYXRhYmFzZUlk
ZW50aWZpZXIoKSkpOwotCisgICAgYXV0byBvcmlnaW5JZGVudGlmaWVycyA9IFdURjo6bWFwKG9y
aWdpbnMsIFtdKGF1dG8mIG9yaWdpbikgLT4gUmVmUHRyPEFQSTo6T2JqZWN0PiB7CisgICAgICAg
IHJldHVybiBBUEk6OlN0cmluZzo6Y3JlYXRlKG9yaWdpbi5kYXRhYmFzZUlkZW50aWZpZXIoKSk7
CisgICAgfSk7CiAgICAgcmV0dXJuIFdlYktpdDo6dG9BUEkoJkFQSTo6QXJyYXk6OmNyZWF0ZShX
VEZNb3ZlKG9yaWdpbklkZW50aWZpZXJzKSkubGVha1JlZigpKTsKIH0KIApkaWZmIC0tZ2l0IGEv
U291cmNlL1dlYktpdC9XZWJQcm9jZXNzL0luamVjdGVkQnVuZGxlL0luamVjdGVkQnVuZGxlUGFn
ZUNvbnRleHRNZW51Q2xpZW50LmNwcCBiL1NvdXJjZS9XZWJLaXQvV2ViUHJvY2Vzcy9JbmplY3Rl
ZEJ1bmRsZS9JbmplY3RlZEJ1bmRsZVBhZ2VDb250ZXh0TWVudUNsaWVudC5jcHAKaW5kZXggOTA1
YjY2ZTY1YWNkZTYxMmZmODFlYzJhZDQ0ZWY4ODU1ZDdhZTJkOC4uZDI3ZGM0YTAxM2YxYWVjOGU3
N2I2MDBkMmRkYzdjMGRhZTcxZjczNiAxMDA2NDQKLS0tIGEvU291cmNlL1dlYktpdC9XZWJQcm9j
ZXNzL0luamVjdGVkQnVuZGxlL0luamVjdGVkQnVuZGxlUGFnZUNvbnRleHRNZW51Q2xpZW50LmNw
cAorKysgYi9Tb3VyY2UvV2ViS2l0L1dlYlByb2Nlc3MvSW5qZWN0ZWRCdW5kbGUvSW5qZWN0ZWRC
dW5kbGVQYWdlQ29udGV4dE1lbnVDbGllbnQuY3BwCkBAIC01MSwxMSArNTEsOSBAQCBib29sIElu
amVjdGVkQnVuZGxlUGFnZUNvbnRleHRNZW51Q2xpZW50OjpnZXRDdXN0b21NZW51RnJvbURlZmF1
bHRJdGVtcyhXZWJQYWdlJgogICAgIGlmICghbV9jbGllbnQuZ2V0Q29udGV4dE1lbnVGcm9tRGVm
YXVsdE1lbnUpCiAgICAgICAgIHJldHVybiBmYWxzZTsKIAotICAgIFZlY3RvcjxXZWJDb250ZXh0
TWVudUl0ZW1EYXRhPiBkZWZhdWx0TWVudSA9IGtpdEl0ZW1zKHByb3Bvc2VkTWVudSk7Ci0gICAg
VmVjdG9yPFJlZlB0cjxBUEk6Ok9iamVjdD4+IGRlZmF1bHRNZW51SXRlbXM7Ci0gICAgZGVmYXVs
dE1lbnVJdGVtcy5yZXNlcnZlSW5pdGlhbENhcGFjaXR5KGRlZmF1bHRNZW51LnNpemUoKSk7Ci0g
ICAgZm9yIChjb25zdCBhdXRvJiBpdGVtIDogZGVmYXVsdE1lbnUpCi0gICAgICAgIGRlZmF1bHRN
ZW51SXRlbXMudW5jaGVja2VkQXBwZW5kKFdlYkNvbnRleHRNZW51SXRlbTo6Y3JlYXRlKGl0ZW0p
KTsKKyAgICBhdXRvIGRlZmF1bHRNZW51SXRlbXMgPSBraXRJdGVtcyhwcm9wb3NlZE1lbnUpLm1h
cChbXShhdXRvJiBpdGVtKSAtPiBSZWZQdHI8QVBJOjpPYmplY3Q+IHsKKyAgICAgICAgcmV0dXJu
IFdlYkNvbnRleHRNZW51SXRlbTo6Y3JlYXRlKGl0ZW0pOworICAgIH0pOwogCiAgICAgV0tBcnJh
eVJlZiBuZXdNZW51V0sgPSBudWxscHRyOwogICAgIFdLVHlwZVJlZiB1c2VyRGF0YVRvUGFzcyA9
IG51bGxwdHI7CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViS2l0L1dlYlByb2Nlc3MvSW5qZWN0ZWRC
dW5kbGUvSW5qZWN0ZWRCdW5kbGVQYWdlRm9ybUNsaWVudC5jcHAgYi9Tb3VyY2UvV2ViS2l0L1dl
YlByb2Nlc3MvSW5qZWN0ZWRCdW5kbGUvSW5qZWN0ZWRCdW5kbGVQYWdlRm9ybUNsaWVudC5jcHAK
aW5kZXggMTBmOGZlZjkyNzllYzU1YTMyZjY1NGRkNzkzNDQ4OGEwNjA3NTE4Mi4uMWQ4NjI1Mjc0
M2U4NDBjYTk5YjZkMzJmZDczZGMwNGNmZGI5YjdmYyAxMDA2NDQKLS0tIGEvU291cmNlL1dlYktp
dC9XZWJQcm9jZXNzL0luamVjdGVkQnVuZGxlL0luamVjdGVkQnVuZGxlUGFnZUZvcm1DbGllbnQu
Y3BwCisrKyBiL1NvdXJjZS9XZWJLaXQvV2ViUHJvY2Vzcy9JbmplY3RlZEJ1bmRsZS9JbmplY3Rl
ZEJ1bmRsZVBhZ2VGb3JtQ2xpZW50LmNwcApAQCAtMTYyLDEyICsxNjIsOSBAQCB2b2lkIEluamVj
dGVkQnVuZGxlUGFnZUZvcm1DbGllbnQ6OmRpZEFzc29jaWF0ZUZvcm1Db250cm9scyhXZWJQYWdl
KiBwYWdlLCBjb25zdAogICAgIGlmICghbV9jbGllbnQuZGlkQXNzb2NpYXRlRm9ybUNvbnRyb2xz
ICYmICFtX2NsaWVudC5kaWRBc3NvY2lhdGVGb3JtQ29udHJvbHNGb3JGcmFtZSkKICAgICAgICAg
cmV0dXJuOwogCi0gICAgVmVjdG9yPFJlZlB0cjxBUEk6Ok9iamVjdD4+IGVsZW1lbnRIYW5kbGVz
OwotICAgIGVsZW1lbnRIYW5kbGVzLnJlc2VydmVJbml0aWFsQ2FwYWNpdHkoZWxlbWVudHMuc2l6
ZSgpKTsKLQotICAgIGZvciAoY29uc3QgYXV0byYgZWxlbWVudCA6IGVsZW1lbnRzKQotICAgICAg
ICBlbGVtZW50SGFuZGxlcy51bmNoZWNrZWRBcHBlbmQoSW5qZWN0ZWRCdW5kbGVOb2RlSGFuZGxl
OjpnZXRPckNyZWF0ZShlbGVtZW50LmdldCgpKSk7Ci0KKyAgICBhdXRvIGVsZW1lbnRIYW5kbGVz
ID0gZWxlbWVudHMubWFwKFtdKGF1dG8mIGVsZW1lbnQpIC0+IFJlZlB0cjxBUEk6Ok9iamVjdD4g
eworICAgICAgICByZXR1cm4gSW5qZWN0ZWRCdW5kbGVOb2RlSGFuZGxlOjpnZXRPckNyZWF0ZShl
bGVtZW50LmdldCgpKTsKKyAgICB9KTsKICAgICBpZiAoIW1fY2xpZW50LmRpZEFzc29jaWF0ZUZv
cm1Db250cm9sc0ZvckZyYW1lKSB7CiAgICAgICAgIG1fY2xpZW50LmRpZEFzc29jaWF0ZUZvcm1D
b250cm9scyh0b0FQSShwYWdlKSwgdG9BUEkoQVBJOjpBcnJheTo6Y3JlYXRlKFdURk1vdmUoZWxl
bWVudEhhbmRsZXMpKS5wdHIoKSksIG1fY2xpZW50LmJhc2UuY2xpZW50SW5mbyk7CiAgICAgICAg
IHJldHVybjsKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJLaXQvV2ViUHJvY2Vzcy9OZXR3b3JrL1dl
YlNvY2tldFN0cmVhbS5jcHAgYi9Tb3VyY2UvV2ViS2l0L1dlYlByb2Nlc3MvTmV0d29yay9XZWJT
b2NrZXRTdHJlYW0uY3BwCmluZGV4IDA1YjRkNzU5Mjc2MjgyMjZlYjQwNDY4ZTg1MWQwMzI2YTk1
YTNiNTUuLmNlYmQ5N2FhZDhjYWIyNWY2Y2VkZTBlM2U3MDc5NWZjZjcyNzAzNGUgMTAwNjQ0Ci0t
LSBhL1NvdXJjZS9XZWJLaXQvV2ViUHJvY2Vzcy9OZXR3b3JrL1dlYlNvY2tldFN0cmVhbS5jcHAK
KysrIGIvU291cmNlL1dlYktpdC9XZWJQcm9jZXNzL05ldHdvcmsvV2ViU29ja2V0U3RyZWFtLmNw
cApAQCAtNTgsOSArNTgsNyBAQCB2b2lkIFdlYlNvY2tldFN0cmVhbTo6bmV0d29ya1Byb2Nlc3ND
cmFzaGVkKCkKICAgICBWZWN0b3I8UmVmUHRyPFdlYlNvY2tldFN0cmVhbT4+IHNvY2tldHM7CiAg
ICAgewogICAgICAgICBMb2NrZXIgc3RhdGVMb2NrZXIgeyBnbG9iYWxXZWJTb2NrZXRTdHJlYW1N
YXBMb2NrIH07Ci0gICAgICAgIHNvY2tldHMucmVzZXJ2ZUluaXRpYWxDYXBhY2l0eShnbG9iYWxX
ZWJTb2NrZXRTdHJlYW1NYXAoKS5zaXplKCkpOwotICAgICAgICBmb3IgKGF1dG8mIHN0cmVhbSA6
IGdsb2JhbFdlYlNvY2tldFN0cmVhbU1hcCgpLnZhbHVlcygpKQotICAgICAgICAgICAgc29ja2V0
cy51bmNoZWNrZWRBcHBlbmQoc3RyZWFtKTsKKyAgICAgICAgc29ja2V0cyA9IGNvcHlUb1ZlY3Rv
ck9mPFJlZlB0cjxXZWJTb2NrZXRTdHJlYW0+PihnbG9iYWxXZWJTb2NrZXRTdHJlYW1NYXAoKS52
YWx1ZXMoKSk7CiAgICAgfQogCiAgICAgZm9yIChhdXRvJiBzdHJlYW0gOiBzb2NrZXRzKSB7CmRp
ZmYgLS1naXQgYS9Tb3VyY2UvV2ViS2l0L1dlYlByb2Nlc3MvTmV0d29yay93ZWJydGMvV2ViUlRD
UmVzb2x2ZXIuY3BwIGIvU291cmNlL1dlYktpdC9XZWJQcm9jZXNzL05ldHdvcmsvd2VicnRjL1dl
YlJUQ1Jlc29sdmVyLmNwcAppbmRleCA3NDdiMTZiNjBhMjRkOGUzNDBhNDFlNmVmZjM4NTE1YjNh
MmMyZWNlLi42N2JlZTBiZDE4NjU4OGE5YmY4YzM2ZTQ3M2RiMjI1N2NhYzQ3OGU1IDEwMDY0NAot
LS0gYS9Tb3VyY2UvV2ViS2l0L1dlYlByb2Nlc3MvTmV0d29yay93ZWJydGMvV2ViUlRDUmVzb2x2
ZXIuY3BwCisrKyBiL1NvdXJjZS9XZWJLaXQvV2ViUHJvY2Vzcy9OZXR3b3JrL3dlYnJ0Yy9XZWJS
VENSZXNvbHZlci5jcHAKQEAgLTQ2LDExICs0Niw5IEBAIHZvaWQgV2ViUlRDUmVzb2x2ZXI6OnNl
dFJlc29sdmVkQWRkcmVzcyhjb25zdCBWZWN0b3I8UlRDTmV0d29yazo6SVBBZGRyZXNzPiYgYWRk
CiAgICAgYXV0byBpZGVudGlmaWVyID0gbV9pZGVudGlmaWVyOwogICAgIGF1dG8mIGZhY3Rvcnkg
PSBtX3NvY2tldEZhY3Rvcnk7CiAKLSAgICBWZWN0b3I8cnRjOjpJUEFkZHJlc3M+IHJ0Y0FkZHJl
c3NlczsKLSAgICBydGNBZGRyZXNzZXMucmVzZXJ2ZUluaXRpYWxDYXBhY2l0eShhZGRyZXNzZXMu
c2l6ZSgpKTsKLSAgICBmb3IgKGF1dG8mIGFkZHJlc3MgOiBhZGRyZXNzZXMpCi0gICAgICAgIHJ0
Y0FkZHJlc3Nlcy51bmNoZWNrZWRBcHBlbmQoYWRkcmVzcy52YWx1ZSk7Ci0gICAgCisgICAgYXV0
byBydGNBZGRyZXNzZXMgPSBhZGRyZXNzZXMubWFwKFtdKGF1dG8mIGFkZHJlc3MpIHsKKyAgICAg
ICAgcmV0dXJuIGFkZHJlc3MudmFsdWU7CisgICAgfSk7CiAgICAgV2ViQ29yZTo6TGliV2ViUlRD
UHJvdmlkZXI6OmNhbGxPbldlYlJUQ05ldHdvcmtUaHJlYWQoWyZmYWN0b3J5LCBpZGVudGlmaWVy
LCBydGNBZGRyZXNzZXMgPSBXVEZNb3ZlKHJ0Y0FkZHJlc3NlcyldKCkgewogICAgICAgICBhdXRv
KiByZXNvbHZlciA9IGZhY3RvcnkucmVzb2x2ZXIoaWRlbnRpZmllcik7CiAgICAgICAgIGlmICgh
cmVzb2x2ZXIpCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViS2l0L1dlYlByb2Nlc3MvV2ViQ29yZVN1
cHBvcnQvV2ViUmVzb3VyY2VMb2FkT2JzZXJ2ZXIuY3BwIGIvU291cmNlL1dlYktpdC9XZWJQcm9j
ZXNzL1dlYkNvcmVTdXBwb3J0L1dlYlJlc291cmNlTG9hZE9ic2VydmVyLmNwcAppbmRleCAzZWYx
NGRkMjNiOWM3YWVhYjViMDY5ZGJhMTVlN2I1N2ExMDIxM2IzLi4yMjQyOTkzZWU3NzExOGQwMDk3
N2RiMzZlMDNjODM4MGU4MDU1OGI1IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViS2l0L1dlYlByb2Nl
c3MvV2ViQ29yZVN1cHBvcnQvV2ViUmVzb3VyY2VMb2FkT2JzZXJ2ZXIuY3BwCisrKyBiL1NvdXJj
ZS9XZWJLaXQvV2ViUHJvY2Vzcy9XZWJDb3JlU3VwcG9ydC9XZWJSZXNvdXJjZUxvYWRPYnNlcnZl
ci5jcHAKQEAgLTEyNywxMiArMTI3LDkgQEAgU3RyaW5nIFdlYlJlc291cmNlTG9hZE9ic2VydmVy
OjpzdGF0aXN0aWNzRm9yVVJMKGNvbnN0IFVSTCYgdXJsKQogCiBWZWN0b3I8UmVzb3VyY2VMb2Fk
U3RhdGlzdGljcz4gV2ViUmVzb3VyY2VMb2FkT2JzZXJ2ZXI6OnRha2VTdGF0aXN0aWNzKCkKIHsK
LSAgICBWZWN0b3I8UmVzb3VyY2VMb2FkU3RhdGlzdGljcz4gc3RhdGlzdGljczsKLSAgICBzdGF0
aXN0aWNzLnJlc2VydmVJbml0aWFsQ2FwYWNpdHkobV9yZXNvdXJjZVN0YXRpc3RpY3NNYXAuc2l6
ZSgpKTsKLSAgICBmb3IgKGF1dG8mIHN0YXRpc3RpYyA6IG1fcmVzb3VyY2VTdGF0aXN0aWNzTWFw
LnZhbHVlcygpKQotICAgICAgICBzdGF0aXN0aWNzLnVuY2hlY2tlZEFwcGVuZChSZXNvdXJjZUxv
YWRTdGF0aXN0aWNzKFdURk1vdmUoKnN0YXRpc3RpYykpKTsKLSAgICBtX3Jlc291cmNlU3RhdGlz
dGljc01hcC5jbGVhcigpOwotICAgIHJldHVybiBzdGF0aXN0aWNzOworICAgIHJldHVybiBXVEY6
Om1hcChzdGQ6OmV4Y2hhbmdlKG1fcmVzb3VyY2VTdGF0aXN0aWNzTWFwLCB7IH0pLCBbXShhdXRv
JiYgZW50cnkpIHsKKyAgICAgICAgcmV0dXJuIFJlc291cmNlTG9hZFN0YXRpc3RpY3MgeyBXVEZN
b3ZlKCplbnRyeS52YWx1ZSkgfTsKKyAgICB9KTsKIH0KIAogdm9pZCBXZWJSZXNvdXJjZUxvYWRP
YnNlcnZlcjo6Y2xlYXJTdGF0ZSgpCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViS2l0L1dlYlByb2Nl
c3MvV2ViUGFnZS9GaW5kQ29udHJvbGxlci5jcHAgYi9Tb3VyY2UvV2ViS2l0L1dlYlByb2Nlc3Mv
V2ViUGFnZS9GaW5kQ29udHJvbGxlci5jcHAKaW5kZXggYzUzZjNlYmY1OWQzZTllNzU2MjRjNTM5
MDIyYzE1MmE4ZTQ1OTAyYi4uYjUxMzRkMGQyYzVkN2M1MmY2ZmFjOTY4MDQ0MWFjYzNlZWJmNjVm
ZCAxMDA2NDQKLS0tIGEvU291cmNlL1dlYktpdC9XZWJQcm9jZXNzL1dlYlBhZ2UvRmluZENvbnRy
b2xsZXIuY3BwCisrKyBiL1NvdXJjZS9XZWJLaXQvV2ViUHJvY2Vzcy9XZWJQYWdlL0ZpbmRDb250
cm9sbGVyLmNwcApAQCAtOTgsNyArOTgsNyBAQCB1aW50MzJfdCBGaW5kQ29udHJvbGxlcjo6cmVw
bGFjZU1hdGNoZXMoY29uc3QgVmVjdG9yPHVpbnQzMl90PiYgbWF0Y2hJbmRpY2VzLCBjbwogICAg
IGNvbnN0IHVpbnQzMl90IG1heGltdW1OdW1iZXJPZk1hdGNoZXNUb1JlcGxhY2UgPSAxMDAwOwog
CiAgICAgVmVjdG9yPFNpbXBsZVJhbmdlPiByYW5nZXNUb1JlcGxhY2U7Ci0gICAgcmFuZ2VzVG9S
ZXBsYWNlLnJlc2VydmVDYXBhY2l0eShzdGQ6Om1pbjx1aW50MzJfdD4obWF4aW11bU51bWJlck9m
TWF0Y2hlc1RvUmVwbGFjZSwgbWF0Y2hJbmRpY2VzLnNpemUoKSkpOworICAgIHJhbmdlc1RvUmVw
bGFjZS5yZXNlcnZlSW5pdGlhbENhcGFjaXR5KHN0ZDo6bWluPHVpbnQzMl90PihtYXhpbXVtTnVt
YmVyT2ZNYXRjaGVzVG9SZXBsYWNlLCBtYXRjaEluZGljZXMuc2l6ZSgpKSk7CiAgICAgZm9yIChh
dXRvIGluZGV4IDogbWF0Y2hJbmRpY2VzKSB7CiAgICAgICAgIGlmIChpbmRleCA8IG1fZmluZE1h
dGNoZXMuc2l6ZSgpKQogICAgICAgICAgICAgcmFuZ2VzVG9SZXBsYWNlLnVuY2hlY2tlZEFwcGVu
ZChtX2ZpbmRNYXRjaGVzW2luZGV4XSk7CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViS2l0L1dlYlBy
b2Nlc3MvV2ViUGFnZS9SZW1vdGVMYXllclRyZWUvUGxhdGZvcm1DQUFuaW1hdGlvblJlbW90ZS5t
bSBiL1NvdXJjZS9XZWJLaXQvV2ViUHJvY2Vzcy9XZWJQYWdlL1JlbW90ZUxheWVyVHJlZS9QbGF0
Zm9ybUNBQW5pbWF0aW9uUmVtb3RlLm1tCmluZGV4IDBiYjc5Mzk2MmJlMzRiYzI5MjM3MWEyMjUx
NjkyOTBiNDYyMGQzNzguLmRlYjBlNTk2YmNjZjE0NTU5MWFjZGZmZjgyY2QwMzkzYzE1ODhjY2Ug
MTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJLaXQvV2ViUHJvY2Vzcy9XZWJQYWdlL1JlbW90ZUxheWVy
VHJlZS9QbGF0Zm9ybUNBQW5pbWF0aW9uUmVtb3RlLm1tCisrKyBiL1NvdXJjZS9XZWJLaXQvV2Vi
UHJvY2Vzcy9XZWJQYWdlL1JlbW90ZUxheWVyVHJlZS9QbGF0Zm9ybUNBQW5pbWF0aW9uUmVtb3Rl
Lm1tCkBAIC05OCw2ICs5OCwxMyBAQCBAZW5kCiBuYW1lc3BhY2UgV2ViS2l0IHsKIHVzaW5nIG5h
bWVzcGFjZSBXZWJDb3JlOwogCit0ZW1wbGF0ZTx0eXBlbmFtZSBUPiBzdGF0aWMgVmVjdG9yPFBs
YXRmb3JtQ0FBbmltYXRpb25SZW1vdGU6OktleWZyYW1lVmFsdWU+IHRvS2V5ZnJhbWVWYWx1ZVZl
Y3Rvcihjb25zdCBWZWN0b3I8VD4mIHZhbHVlcykKK3sKKyAgICByZXR1cm4gdmFsdWVzLm1hcChb
XShhdXRvJiB2YWx1ZSkgeworICAgICAgICByZXR1cm4gUGxhdGZvcm1DQUFuaW1hdGlvblJlbW90
ZTo6S2V5ZnJhbWVWYWx1ZSB7IHZhbHVlIH07CisgICAgfSk7Cit9CisKIHN0YXRpYyB2b2lkIGVu
Y29kZVRpbWluZ0Z1bmN0aW9uKElQQzo6RW5jb2RlciYgZW5jb2RlciwgVGltaW5nRnVuY3Rpb24q
IHRpbWluZ0Z1bmN0aW9uKQogewogICAgIHN3aXRjaCAodGltaW5nRnVuY3Rpb24tPnR5cGUoKSkg
ewpAQCAtNTYxLDEzICs1NjgsNyBAQCB2b2lkIFBsYXRmb3JtQ0FBbmltYXRpb25SZW1vdGU6OnNl
dFZhbHVlcyhjb25zdCBWZWN0b3I8ZmxvYXQ+JiB2YWx1ZXMpCiAgICAgaWYgKGFuaW1hdGlvblR5
cGUoKSAhPSBLZXlmcmFtZSkKICAgICAgICAgcmV0dXJuOwogCi0gICAgVmVjdG9yPEtleWZyYW1l
VmFsdWU+IGtleWZyYW1lczsKLSAgICBrZXlmcmFtZXMucmVzZXJ2ZUluaXRpYWxDYXBhY2l0eSh2
YWx1ZXMuc2l6ZSgpKTsKLSAgICAKLSAgICBmb3IgKHNpemVfdCBpID0gMDsgaSA8IHZhbHVlcy5z
aXplKCk7ICsraSkKLSAgICAgICAga2V5ZnJhbWVzLnVuY2hlY2tlZEFwcGVuZChLZXlmcmFtZVZh
bHVlKHZhbHVlc1tpXSkpOwotICAgIAotICAgIG1fcHJvcGVydGllcy5rZXlWYWx1ZXMgPSBXVEZN
b3ZlKGtleWZyYW1lcyk7CisgICAgbV9wcm9wZXJ0aWVzLmtleVZhbHVlcyA9IHRvS2V5ZnJhbWVW
YWx1ZVZlY3Rvcih2YWx1ZXMpOwogfQogCiB2b2lkIFBsYXRmb3JtQ0FBbmltYXRpb25SZW1vdGU6
OnNldFZhbHVlcyhjb25zdCBWZWN0b3I8VHJhbnNmb3JtYXRpb25NYXRyaXg+JiB2YWx1ZXMpCkBA
IC01NzUsMTMgKzU3Niw3IEBAIHZvaWQgUGxhdGZvcm1DQUFuaW1hdGlvblJlbW90ZTo6c2V0VmFs
dWVzKGNvbnN0IFZlY3RvcjxUcmFuc2Zvcm1hdGlvbk1hdHJpeD4mIHZhCiAgICAgaWYgKGFuaW1h
dGlvblR5cGUoKSAhPSBLZXlmcmFtZSkKICAgICAgICAgcmV0dXJuOwogCi0gICAgVmVjdG9yPEtl
eWZyYW1lVmFsdWU+IGtleWZyYW1lczsKLSAgICBrZXlmcmFtZXMucmVzZXJ2ZUluaXRpYWxDYXBh
Y2l0eSh2YWx1ZXMuc2l6ZSgpKTsKLSAgICAKLSAgICBmb3IgKHNpemVfdCBpID0gMDsgaSA8IHZh
bHVlcy5zaXplKCk7ICsraSkKLSAgICAgICAga2V5ZnJhbWVzLnVuY2hlY2tlZEFwcGVuZChLZXlm
cmFtZVZhbHVlKHZhbHVlc1tpXSkpOwotICAgIAotICAgIG1fcHJvcGVydGllcy5rZXlWYWx1ZXMg
PSBXVEZNb3ZlKGtleWZyYW1lcyk7CisgICAgbV9wcm9wZXJ0aWVzLmtleVZhbHVlcyA9IHRvS2V5
ZnJhbWVWYWx1ZVZlY3Rvcih2YWx1ZXMpOwogfQogCiB2b2lkIFBsYXRmb3JtQ0FBbmltYXRpb25S
ZW1vdGU6OnNldFZhbHVlcyhjb25zdCBWZWN0b3I8RmxvYXRQb2ludDNEPiYgdmFsdWVzKQpAQCAt
NTg5LDEzICs1ODQsNyBAQCB2b2lkIFBsYXRmb3JtQ0FBbmltYXRpb25SZW1vdGU6OnNldFZhbHVl
cyhjb25zdCBWZWN0b3I8RmxvYXRQb2ludDNEPiYgdmFsdWVzKQogICAgIGlmIChhbmltYXRpb25U
eXBlKCkgIT0gS2V5ZnJhbWUpCiAgICAgICAgIHJldHVybjsKIAotICAgIFZlY3RvcjxLZXlmcmFt
ZVZhbHVlPiBrZXlmcmFtZXM7Ci0gICAga2V5ZnJhbWVzLnJlc2VydmVJbml0aWFsQ2FwYWNpdHko
dmFsdWVzLnNpemUoKSk7Ci0gICAgCi0gICAgZm9yIChzaXplX3QgaSA9IDA7IGkgPCB2YWx1ZXMu
c2l6ZSgpOyArK2kpCi0gICAgICAgIGtleWZyYW1lcy51bmNoZWNrZWRBcHBlbmQoS2V5ZnJhbWVW
YWx1ZSh2YWx1ZXNbaV0pKTsKLSAgICAKLSAgICBtX3Byb3BlcnRpZXMua2V5VmFsdWVzID0gV1RG
TW92ZShrZXlmcmFtZXMpOworICAgIG1fcHJvcGVydGllcy5rZXlWYWx1ZXMgPSB0b0tleWZyYW1l
VmFsdWVWZWN0b3IodmFsdWVzKTsKIH0KIAogdm9pZCBQbGF0Zm9ybUNBQW5pbWF0aW9uUmVtb3Rl
OjpzZXRWYWx1ZXMoY29uc3QgVmVjdG9yPENvbG9yPiYgdmFsdWVzKQpAQCAtNjAzLDEzICs1OTIs
NyBAQCB2b2lkIFBsYXRmb3JtQ0FBbmltYXRpb25SZW1vdGU6OnNldFZhbHVlcyhjb25zdCBWZWN0
b3I8Q29sb3I+JiB2YWx1ZXMpCiAgICAgaWYgKGFuaW1hdGlvblR5cGUoKSAhPSBLZXlmcmFtZSkK
ICAgICAgICAgcmV0dXJuOwogCi0gICAgVmVjdG9yPEtleWZyYW1lVmFsdWU+IGtleWZyYW1lczsK
LSAgICBrZXlmcmFtZXMucmVzZXJ2ZUluaXRpYWxDYXBhY2l0eSh2YWx1ZXMuc2l6ZSgpKTsKLSAg
ICAKLSAgICBmb3IgKHNpemVfdCBpID0gMDsgaSA8IHZhbHVlcy5zaXplKCk7ICsraSkKLSAgICAg
ICAga2V5ZnJhbWVzLnVuY2hlY2tlZEFwcGVuZChLZXlmcmFtZVZhbHVlKHZhbHVlc1tpXSkpOwot
ICAgIAotICAgIG1fcHJvcGVydGllcy5rZXlWYWx1ZXMgPSBXVEZNb3ZlKGtleWZyYW1lcyk7Cisg
ICAgbV9wcm9wZXJ0aWVzLmtleVZhbHVlcyA9IHRvS2V5ZnJhbWVWYWx1ZVZlY3Rvcih2YWx1ZXMp
OwogfQogCiB2b2lkIFBsYXRmb3JtQ0FBbmltYXRpb25SZW1vdGU6OnNldFZhbHVlcyhjb25zdCBW
ZWN0b3I8UmVmUHRyPEZpbHRlck9wZXJhdGlvbj4+JiB2YWx1ZXMsIGludCBpbnRlcm5hbEZpbHRl
clByb3BlcnR5SW5kZXgpCkBAIC02MTksMTMgKzYwMiw3IEBAIHZvaWQgUGxhdGZvcm1DQUFuaW1h
dGlvblJlbW90ZTo6c2V0VmFsdWVzKGNvbnN0IFZlY3RvcjxSZWZQdHI8RmlsdGVyT3BlcmF0aW9u
Pj4mCiAgICAgaWYgKGFuaW1hdGlvblR5cGUoKSAhPSBLZXlmcmFtZSkKICAgICAgICAgcmV0dXJu
OwogCi0gICAgVmVjdG9yPEtleWZyYW1lVmFsdWU+IGtleWZyYW1lczsKLSAgICBrZXlmcmFtZXMu
cmVzZXJ2ZUluaXRpYWxDYXBhY2l0eSh2YWx1ZXMuc2l6ZSgpKTsKLSAgICAKLSAgICBmb3IgKGF1
dG8mIHZhbHVlIDogdmFsdWVzKQotICAgICAgICBrZXlmcmFtZXMudW5jaGVja2VkQXBwZW5kKEtl
eWZyYW1lVmFsdWUgeyB2YWx1ZS5jb3B5UmVmKCkgfSk7Ci0gICAgCi0gICAgbV9wcm9wZXJ0aWVz
LmtleVZhbHVlcyA9IFdURk1vdmUoa2V5ZnJhbWVzKTsKKyAgICBtX3Byb3BlcnRpZXMua2V5VmFs
dWVzID0gdG9LZXlmcmFtZVZhbHVlVmVjdG9yKHZhbHVlcyk7CiB9CiAKIHZvaWQgUGxhdGZvcm1D
QUFuaW1hdGlvblJlbW90ZTo6Y29weVZhbHVlc0Zyb20oY29uc3QgUGxhdGZvcm1DQUFuaW1hdGlv
biYgdmFsdWUpCkBAIC02NDUsMTMgKzYyMiw5IEBAIHZvaWQgUGxhdGZvcm1DQUFuaW1hdGlvblJl
bW90ZTo6Y29weUtleVRpbWVzRnJvbShjb25zdCBQbGF0Zm9ybUNBQW5pbWF0aW9uJiB2YWx1CiAK
IHZvaWQgUGxhdGZvcm1DQUFuaW1hdGlvblJlbW90ZTo6c2V0VGltaW5nRnVuY3Rpb25zKGNvbnN0
IFZlY3Rvcjxjb25zdCBUaW1pbmdGdW5jdGlvbio+JiB2YWx1ZXMsIGJvb2wgcmV2ZXJzZSkKIHsK
LSAgICBWZWN0b3I8UmVmUHRyPFdlYkNvcmU6OlRpbWluZ0Z1bmN0aW9uPj4gdGltaW5nRnVuY3Rp
b25zOwotICAgIHRpbWluZ0Z1bmN0aW9ucy5yZXNlcnZlSW5pdGlhbENhcGFjaXR5KHZhbHVlcy5z
aXplKCkpOwotICAgIAotICAgIGZvciAoc2l6ZV90IGkgPSAwOyBpIDwgdmFsdWVzLnNpemUoKTsg
KytpKQotICAgICAgICB0aW1pbmdGdW5jdGlvbnMudW5jaGVja2VkQXBwZW5kKHZhbHVlc1tpXS0+
Y2xvbmUoKSk7Ci0gICAgCi0gICAgbV9wcm9wZXJ0aWVzLnRpbWluZ0Z1bmN0aW9ucyA9IFdURk1v
dmUodGltaW5nRnVuY3Rpb25zKTsKKyAgICBtX3Byb3BlcnRpZXMudGltaW5nRnVuY3Rpb25zID0g
dmFsdWVzLm1hcChbXShhdXRvJiB2YWx1ZSkgLT4gUmVmUHRyPFdlYkNvcmU6OlRpbWluZ0Z1bmN0
aW9uPiB7CisgICAgICAgIHJldHVybiB2YWx1ZS0+Y2xvbmUoKTsKKyAgICB9KTsKICAgICBtX3By
b3BlcnRpZXMucmV2ZXJzZVRpbWluZ0Z1bmN0aW9ucyA9IHJldmVyc2U7CiB9CiAKZGlmZiAtLWdp
dCBhL1NvdXJjZS9XZWJLaXQvV2ViUHJvY2Vzcy9XZWJQYWdlL1ZpZXdHZXN0dXJlR2VvbWV0cnlD
b2xsZWN0b3IuY3BwIGIvU291cmNlL1dlYktpdC9XZWJQcm9jZXNzL1dlYlBhZ2UvVmlld0dlc3R1
cmVHZW9tZXRyeUNvbGxlY3Rvci5jcHAKaW5kZXggNmJkNzM4NmZiYjhkNjJjZDM1M2IzZDJmMWEx
Njk5OWJiMmJkMTZjYi4uOWFlMjkzMTRmMmVjNDdjNDIxNDk3YjkzZDFmMmQ1ZGE5Y2IxZmU5ZSAx
MDA2NDQKLS0tIGEvU291cmNlL1dlYktpdC9XZWJQcm9jZXNzL1dlYlBhZ2UvVmlld0dlc3R1cmVH
ZW9tZXRyeUNvbGxlY3Rvci5jcHAKKysrIGIvU291cmNlL1dlYktpdC9XZWJQcm9jZXNzL1dlYlBh
Z2UvVmlld0dlc3R1cmVHZW9tZXRyeUNvbGxlY3Rvci5jcHAKQEAgLTE4MSwxMCArMTgxLDkgQEAg
c3RkOjpvcHRpb25hbDxzdGQ6OnBhaXI8ZG91YmxlLCBkb3VibGU+PiBWaWV3R2VzdHVyZUdlb21l
dHJ5Q29sbGVjdG9yOjpjb21wdXRlVGUKICAgICAgICAgdG90YWxTYW1wbGVkVGV4dExlbmd0aCAr
PSB0ZXh0TGVuZ3RoOwogICAgIH0KIAotICAgIFZlY3RvcjxGb250U2l6ZUFuZENvdW50PiBzb3J0
ZWRGb250U2l6ZXNBbmRDb3VudHM7Ci0gICAgc29ydGVkRm9udFNpemVzQW5kQ291bnRzLnJlc2Vy
dmVDYXBhY2l0eShmb250U2l6ZVRvQ291bnRNYXAuc2l6ZSgpKTsKLSAgICBmb3IgKGF1dG8mIGVu
dHJ5IDogZm9udFNpemVUb0NvdW50TWFwKQotICAgICAgICBzb3J0ZWRGb250U2l6ZXNBbmRDb3Vu
dHMuYXBwZW5kKHsgZW50cnkua2V5LCBlbnRyeS52YWx1ZSB9KTsKKyAgICBhdXRvIHNvcnRlZEZv
bnRTaXplc0FuZENvdW50cyA9IFdURjo6bWFwKGZvbnRTaXplVG9Db3VudE1hcCwgW10oYXV0byYg
ZW50cnkpIHsKKyAgICAgICAgcmV0dXJuIEZvbnRTaXplQW5kQ291bnQgeyBlbnRyeS5rZXksIGVu
dHJ5LnZhbHVlIH07CisgICAgfSk7CiAKICAgICBzdGQ6OnNvcnQoc29ydGVkRm9udFNpemVzQW5k
Q291bnRzLmJlZ2luKCksIHNvcnRlZEZvbnRTaXplc0FuZENvdW50cy5lbmQoKSwgW10gKGF1dG8m
IGZpcnN0LCBhdXRvJiBzZWNvbmQpIHsKICAgICAgICAgcmV0dXJuIGZpcnN0LmZvbnRTaXplIDwg
c2Vjb25kLmZvbnRTaXplOwpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYktpdC9XZWJQcm9jZXNzL1dl
YlBhZ2UvV2ViUGFnZS5jcHAgYi9Tb3VyY2UvV2ViS2l0L1dlYlByb2Nlc3MvV2ViUGFnZS9XZWJQ
YWdlLmNwcAppbmRleCA2M2FmOTFmZGJhNWYyMDEwMDZjNzNjNTlmMjk2YmEyMmYzZDM3YzVkLi44
YTk1ZGQyMWU2MWJiNzQwOGJlMTI2OGQ2NjZjYTQ4OWQ5OWIwZWVlIDEwMDY0NAotLS0gYS9Tb3Vy
Y2UvV2ViS2l0L1dlYlByb2Nlc3MvV2ViUGFnZS9XZWJQYWdlLmNwcAorKysgYi9Tb3VyY2UvV2Vi
S2l0L1dlYlByb2Nlc3MvV2ViUGFnZS9XZWJQYWdlLmNwcApAQCAtMTM4NywxMiArMTM4Nyw5IEBA
IFJlZjxBUEk6OkFycmF5PiBXZWJQYWdlOjp0cmFja2VkUmVwYWludFJlY3RzKCkKICAgICBpZiAo
IXZpZXcpCiAgICAgICAgIHJldHVybiBBUEk6OkFycmF5OjpjcmVhdGUoKTsKIAotICAgIFZlY3Rv
cjxSZWZQdHI8QVBJOjpPYmplY3Q+PiByZXBhaW50UmVjdHM7Ci0gICAgcmVwYWludFJlY3RzLnJl
c2VydmVJbml0aWFsQ2FwYWNpdHkodmlldy0+dHJhY2tlZFJlcGFpbnRSZWN0cygpLnNpemUoKSk7
Ci0KLSAgICBmb3IgKGNvbnN0IGF1dG8mIHJlcGFpbnRSZWN0IDogdmlldy0+dHJhY2tlZFJlcGFp
bnRSZWN0cygpKQotICAgICAgICByZXBhaW50UmVjdHMudW5jaGVja2VkQXBwZW5kKEFQSTo6UmVj
dDo6Y3JlYXRlKHRvQVBJKHJlcGFpbnRSZWN0KSkpOwotCisgICAgYXV0byByZXBhaW50UmVjdHMg
PSB2aWV3LT50cmFja2VkUmVwYWludFJlY3RzKCkubWFwKFtdKGF1dG8mIHJlcGFpbnRSZWN0KSAt
PiBSZWZQdHI8QVBJOjpPYmplY3Q+IHsKKyAgICAgICAgcmV0dXJuIEFQSTo6UmVjdDo6Y3JlYXRl
KHRvQVBJKHJlcGFpbnRSZWN0KSk7CisgICAgfSk7CiAgICAgcmV0dXJuIEFQSTo6QXJyYXk6OmNy
ZWF0ZShXVEZNb3ZlKHJlcGFpbnRSZWN0cykpOwogfQogCkBAIC0yMTMwLDEwICsyMTI3LDcgQEAg
c3RhdGljIHZvaWQgZHVtcEhpc3RvcnlJdGVtKEhpc3RvcnlJdGVtJiBpdGVtLCBzaXplX3QgaW5k
ZW50LCBib29sIGlzQ3VycmVudEl0ZW0KIAogICAgIHN0cmluZ0J1aWxkZXIuYXBwZW5kKCdcbicp
OwogCi0gICAgVmVjdG9yPFJlZjxIaXN0b3J5SXRlbT4+IGNoaWxkcmVuOwotICAgIGNoaWxkcmVu
LnJlc2VydmVJbml0aWFsQ2FwYWNpdHkoaXRlbS5jaGlsZHJlbigpLnNpemUoKSk7Ci0gICAgZm9y
IChhdXRvJiBjaGlsZCA6IGl0ZW0uY2hpbGRyZW4oKSkKLSAgICAgICAgY2hpbGRyZW4udW5jaGVj
a2VkQXBwZW5kKGNoaWxkLmNvcHlSZWYoKSk7CisgICAgYXV0byBjaGlsZHJlbiA9IGl0ZW0uY2hp
bGRyZW4oKTsKICAgICBzdGQ6OnN0YWJsZV9zb3J0KGNoaWxkcmVuLmJlZ2luKCksIGNoaWxkcmVu
LmVuZCgpLCBbXSAoYXV0byYgYSwgYXV0byYgYikgewogICAgICAgICByZXR1cm4gY29kZVBvaW50
Q29tcGFyZShhLT50YXJnZXQoKSwgYi0+dGFyZ2V0KCkpIDwgMDsKICAgICB9KTsK
</data>
<flag name="commit-queue"
          id="479281"
          type_id="3"
          status="-"
          setter="ews-feeder"
    />
          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>452290</attachid>
            <date>2022-02-16 19:27:11 -0800</date>
            <delta_ts>2022-02-16 19:52:22 -0800</delta_ts>
            <desc>Patch</desc>
            <filename>bug-236748-20220216192710.patch</filename>
            <type>text/plain</type>
            <size>221115</size>
            <attacher name="Chris Dumez">cdumez</attacher>
            
              <data encoding="base64">U3VidmVyc2lvbiBSZXZpc2lvbjogMjg5OTQyCmRpZmYgLS1naXQgYS9Tb3VyY2UvSmF2YVNjcmlw
dENvcmUvQ2hhbmdlTG9nIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL0NoYW5nZUxvZwppbmRleCA0
OWNjYjA4N2ZhNWExNDg1MDNiNjZiNDQzOTEyMDNkOTVmMzFlMWQzLi4zZGZmZWU1M2RmZGNhZTM4
MDczYWVmODU3MmI1NzU4YTE0ZjE0MzFkIDEwMDY0NAotLS0gYS9Tb3VyY2UvSmF2YVNjcmlwdENv
cmUvQ2hhbmdlTG9nCisrKyBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9DaGFuZ2VMb2cKQEAgLTEs
MyArMSw0NiBAQAorMjAyMi0wMi0xNiAgQ2hyaXMgRHVtZXogIDxjZHVtZXpAYXBwbGUuY29tPgor
CisgICAgICAgIENsZWFuIHVwIC8gb3B0aW1pemUgY2FsbCBzaXRlcyBjb25zdHJ1Y3RpbmcgdmVj
dG9ycworICAgICAgICBodHRwczovL2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9MjM2
NzQ4CisKKyAgICAgICAgUmV2aWV3ZWQgYnkgTk9CT0RZIChPT1BTISkuCisKKyAgICAgICAgQ2xl
YW4gdXAgLyBvcHRpbWl6ZSBjYWxsIHNpdGVzIGNvbnN0cnVjdGluZyB2ZWN0b3JzOgorICAgICAg
ICAtIFVzZSBWZWN0b3I6Om1hcCgpIC8gV1RGOjptYXAoKSB3aGVyZSBhcHByb3ByaWF0ZQorICAg
ICAgICAtIFJlcGxhY2UgVmVjdG9yOjpyZXNlcnZlQ2FwYWNpdHkoKSB3aXRoIFZlY3Rvcjo6cmVz
ZXJ2ZUluaXRpYWxDYXBhY2l0eSgpCisgICAgICAgICAgd2hlcmUgYXBwcm9wcmlhdGUKKyAgICAg
ICAgLSBSZXBsYWNlIFZlY3Rvcjo6YXBwZW5kKCkgd2l0aCBWZWN0b3I6OnVuY2hlY2tlZEFwcGVu
ZCgpIHdoZXJlIGFwcHJvcHJpYXRlCisgICAgICAgIC0gTGV2ZXJhZ2UgdGhlIGZhY3QgdGhhdCBW
ZWN0b3I8UmVmPEZvbz4+IGlzIG5vdyBjb3B5YWJsZSAoQmVjYXVzZSBSZWY8PiBub3cgaGFzCisg
ICAgICAgICAgYSBjb3B5IGNvbnN0cnVjdG9yKQorICAgICAgICAtIENhbGwgY3Jvc3NUaHJlYWRD
b3B5KCkgdG8gaXNvbGF0ZS1jb3B5IGEgVmVjdG9yKCkgd2l0aG91dCBpdGVyYXRpbmcuCisgICAg
ICAgIC0gTGV2ZXJhZ2UgVmVjdG9yIGNvbnN0cnVjdG9yIHRoYXQgdGFrZXMgaW4gYW4gaW50aWFs
aXphdGlvbiBsaXN0IGluIG1vcmUgY2FzZXMKKyAgICAgICAgLSBMZXZlcmFnZSBWZWN0b3I6OmZy
b20oKSBpbiBtb3JlIGNhc2VzIHRvIHNpbXBsaWZ5IHZlY3RvciBjb25zdHJ1Y3Rpb24gaW4gc29t
ZQorICAgICAgICAgIGNhc2UuCisgICAgICAgIC0gRHJvcCB1bm5lY2Vzc2FyeSBjYWxscyB0byBW
ZWN0b3I6OnJlc2VydmUqQ2FwYWNpdHkoKSBiZWZvcmUgY2FsbGluZworICAgICAgICAgIFZlY3Rv
cjo6YXBwZW5kKFQqLCBzaXplX3QpIHNpbmNlIHRoZSBhcHBlbmQoKSBpbXBsZW1lbnRhdGlvbiBh
bHJlYWR5IGRvZXMgdGhpcworICAgICAgICAgIGZvciB1cy4KKyAgICAgICAgLSBMZXZlcmFnZSBj
b3B5VG9WZWN0b3IoKSBhbmQgY29weVRvVmVjdG9yT2Y8PiBpbiBtb3JlIGNhc2VzCisgICAgICAg
IC0gQ2FsbCBzaHJpbmtUb0ZpdCgpIGluIHNvbWUgY2FzZXMgd2hlcmUgd2UgcmVzZXJ2ZSBjYXBh
Y2l0eSBhbmQgdGhlbiBhcHBlbmQoKQorICAgICAgICAgIGJ1dCBtYXkgbm90IGFwcGVuZCgpIGFz
IG11Y2ggYXMgd2UgcmVzZXJ2ZWQuCisKKyAgICAgICAgKiBiMy9haXIvQWlyQ29kZS5jcHA6Cisg
ICAgICAgIChKU0M6OkIzOjpBaXI6OkNvZGU6OnNldE51bUVudHJ5cG9pbnRzKToKKyAgICAgICAg
KiBieXRlY29tcGlsZXIvTm9kZXNDb2RlZ2VuLmNwcDoKKyAgICAgICAgKEpTQzo6QXJyYXlQYXR0
ZXJuTm9kZTo6ZW1pdERpcmVjdEJpbmRpbmcpOgorICAgICAgICAqIGRmZy9ERkdJblBsYWNlQWJz
dHJhY3RTdGF0ZS5jcHA6CisgICAgICAgIChKU0M6OkRGRzo6c2V0TGl2ZVZhbHVlcyk6CisgICAg
ICAgICogZGZnL0RGR0xpdmVuZXNzQW5hbHlzaXNQaGFzZS5jcHA6CisgICAgICAgICogZGZnL0RG
R1Njb3JlQm9hcmQuaDoKKyAgICAgICAgKEpTQzo6REZHOjpTY29yZUJvYXJkOjpTY29yZUJvYXJk
KToKKyAgICAgICAgKiBpbnNwZWN0b3IvYWdlbnRzL0luc3BlY3RvckRlYnVnZ2VyQWdlbnQuY3Bw
OgorICAgICAgICAoSW5zcGVjdG9yOjpwYXJzZUJyZWFrcG9pbnRPcHRpb25zKToKKyAgICAgICAg
KiBpbnNwZWN0b3IvcmVtb3RlL3NvY2tldC9SZW1vdGVJbnNwZWN0b3JNZXNzYWdlUGFyc2VyLmNw
cDoKKyAgICAgICAgKEluc3BlY3Rvcjo6TWVzc2FnZVBhcnNlcjo6cHVzaFJlY2VpdmVkRGF0YSk6
CisgICAgICAgICogcGFyc2VyL1ZhcmlhYmxlRW52aXJvbm1lbnQuY3BwOgorICAgICAgICAoSlND
OjpDb21wYWN0VERaRW52aXJvbm1lbnQ6OkNvbXBhY3RURFpFbnZpcm9ubWVudCk6CisgICAgICAg
ICogd2FzbS9XYXNtV29ya2xpc3QuY3BwOgorICAgICAgICAoSlNDOjpXYXNtOjpXb3JrbGlzdDo6
V29ya2xpc3QpOgorCiAyMDIyLTAyLTE1ICBNYXJrIExhbSAgPG1hcmsubGFtQGFwcGxlLmNvbT4K
IAogICAgICAgICBEZWZlciBUZXJtaW5hdGlvbnNFeGNlcHRpb25zIHdoaWxlIGluIG9wZXJhdGlv
bk1hdGVyaWFsaXplT2JqZWN0SW5PU1IuCmRpZmYgLS1naXQgYS9Tb3VyY2UvV1RGL0NoYW5nZUxv
ZyBiL1NvdXJjZS9XVEYvQ2hhbmdlTG9nCmluZGV4IGYyODZiOTRhZmQ3ZTJhMmFkODBkZGE1MDI0
NzliZWM3ZGU2YTA0ZjQuLjkxZGYzOGQxOWVkOTc3MzliYTI0NmFjYjcyNTdmNDYzM2I3YzZiMWQg
MTAwNjQ0Ci0tLSBhL1NvdXJjZS9XVEYvQ2hhbmdlTG9nCisrKyBiL1NvdXJjZS9XVEYvQ2hhbmdl
TG9nCkBAIC0xLDMgKzEsMzIgQEAKKzIwMjItMDItMTYgIENocmlzIER1bWV6ICA8Y2R1bWV6QGFw
cGxlLmNvbT4KKworICAgICAgICBDbGVhbiB1cCAvIG9wdGltaXplIGNhbGwgc2l0ZXMgY29uc3Ry
dWN0aW5nIHZlY3RvcnMKKyAgICAgICAgaHR0cHM6Ly9idWdzLndlYmtpdC5vcmcvc2hvd19idWcu
Y2dpP2lkPTIzNjc0OAorCisgICAgICAgIFJldmlld2VkIGJ5IE5PQk9EWSAoT09QUyEpLgorCisg
ICAgICAgIENsZWFuIHVwIC8gb3B0aW1pemUgY2FsbCBzaXRlcyBjb25zdHJ1Y3RpbmcgdmVjdG9y
czoKKyAgICAgICAgLSBVc2UgVmVjdG9yOjptYXAoKSAvIFdURjo6bWFwKCkgd2hlcmUgYXBwcm9w
cmlhdGUKKyAgICAgICAgLSBSZXBsYWNlIFZlY3Rvcjo6cmVzZXJ2ZUNhcGFjaXR5KCkgd2l0aCBW
ZWN0b3I6OnJlc2VydmVJbml0aWFsQ2FwYWNpdHkoKSAKKyAgICAgICAgICB3aGVyZSBhcHByb3By
aWF0ZQorICAgICAgICAtIFJlcGxhY2UgVmVjdG9yOjphcHBlbmQoKSB3aXRoIFZlY3Rvcjo6dW5j
aGVja2VkQXBwZW5kKCkgd2hlcmUgYXBwcm9wcmlhdGUKKyAgICAgICAgLSBMZXZlcmFnZSB0aGUg
ZmFjdCB0aGF0IFZlY3RvcjxSZWY8Rm9vPj4gaXMgbm93IGNvcHlhYmxlIChCZWNhdXNlIFJlZjw+
IG5vdyBoYXMKKyAgICAgICAgICBhIGNvcHkgY29uc3RydWN0b3IpCisgICAgICAgIC0gQ2FsbCBj
cm9zc1RocmVhZENvcHkoKSB0byBpc29sYXRlLWNvcHkgYSBWZWN0b3IoKSB3aXRob3V0IGl0ZXJh
dGluZy4KKyAgICAgICAgLSBMZXZlcmFnZSBWZWN0b3IgY29uc3RydWN0b3IgdGhhdCB0YWtlcyBp
biBhbiBpbnRpYWxpemF0aW9uIGxpc3QgaW4gbW9yZSBjYXNlcworICAgICAgICAtIExldmVyYWdl
IFZlY3Rvcjo6ZnJvbSgpIGluIG1vcmUgY2FzZXMgdG8gc2ltcGxpZnkgdmVjdG9yIGNvbnN0cnVj
dGlvbiBpbiBzb21lCisgICAgICAgICAgY2FzZS4KKyAgICAgICAgLSBEcm9wIHVubmVjZXNzYXJ5
IGNhbGxzIHRvIFZlY3Rvcjo6cmVzZXJ2ZSpDYXBhY2l0eSgpIGJlZm9yZSBjYWxsaW5nCisgICAg
ICAgICAgVmVjdG9yOjphcHBlbmQoVCosIHNpemVfdCkgc2luY2UgdGhlIGFwcGVuZCgpIGltcGxl
bWVudGF0aW9uIGFscmVhZHkgZG9lcyB0aGlzCisgICAgICAgICAgZm9yIHVzLgorICAgICAgICAt
IExldmVyYWdlIGNvcHlUb1ZlY3RvcigpIGFuZCBjb3B5VG9WZWN0b3JPZjw+IGluIG1vcmUgY2Fz
ZXMKKyAgICAgICAgLSBDYWxsIHNocmlua1RvRml0KCkgaW4gc29tZSBjYXNlcyB3aGVyZSB3ZSBy
ZXNlcnZlIGNhcGFjaXR5IGFuZCB0aGVuIGFwcGVuZCgpCisgICAgICAgICAgYnV0IG1heSBub3Qg
YXBwZW5kKCkgYXMgbXVjaCBhcyB3ZSByZXNlcnZlZC4gCisKKyAgICAgICAgKiB3dGYvTGFuZ3Vh
Z2UuY3BwOgorICAgICAgICAoV1RGOjp1c2VyUHJlZmVycmVkTGFuZ3VhZ2VzKToKKyAgICAgICAg
KFdURjo6aXNvbGF0ZWRDb3B5KTogRGVsZXRlZC4KKwogMjAyMi0wMi0xNiAgRWxpb3QgSHN1ICA8
ZWxpb3RfaHN1QGFwcGxlLmNvbT4KIAogICAgICAgICBNb3ZlIFNhZmUgQnJvd3Npbmcga25vd2xl
ZGdlIGludG8gU2FmYXJpU2FmZUJyb3dzaW5nIGZyYW1ld29yawpkaWZmIC0tZ2l0IGEvU291cmNl
L1dlYkNvcmUvQ2hhbmdlTG9nIGIvU291cmNlL1dlYkNvcmUvQ2hhbmdlTG9nCmluZGV4IDM5NjQw
ZmI3YjIxYjdkZDY0NTZkODY4YmQ1OTdkMDljYTkxYTljM2YuLmUzOTBmNzdmNTJlNzhhMjVhYWI4
MGZmMTgzZmEzYjlkMmQ3MjNmNGEgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL0NoYW5nZUxv
ZworKysgYi9Tb3VyY2UvV2ViQ29yZS9DaGFuZ2VMb2cKQEAgLTEsMyArMSwyNzYgQEAKKzIwMjIt
MDItMTYgIENocmlzIER1bWV6ICA8Y2R1bWV6QGFwcGxlLmNvbT4KKworICAgICAgICBDbGVhbiB1
cCAvIG9wdGltaXplIGNhbGwgc2l0ZXMgY29uc3RydWN0aW5nIHZlY3RvcnMKKyAgICAgICAgaHR0
cHM6Ly9idWdzLndlYmtpdC5vcmcvc2hvd19idWcuY2dpP2lkPTIzNjc0OAorCisgICAgICAgIFJl
dmlld2VkIGJ5IE5PQk9EWSAoT09QUyEpLgorCisgICAgICAgIENsZWFuIHVwIC8gb3B0aW1pemUg
Y2FsbCBzaXRlcyBjb25zdHJ1Y3RpbmcgdmVjdG9yczoKKyAgICAgICAgLSBVc2UgVmVjdG9yOjpt
YXAoKSAvIFdURjo6bWFwKCkgd2hlcmUgYXBwcm9wcmlhdGUKKyAgICAgICAgLSBSZXBsYWNlIFZl
Y3Rvcjo6cmVzZXJ2ZUNhcGFjaXR5KCkgd2l0aCBWZWN0b3I6OnJlc2VydmVJbml0aWFsQ2FwYWNp
dHkoKSAKKyAgICAgICAgICB3aGVyZSBhcHByb3ByaWF0ZQorICAgICAgICAtIFJlcGxhY2UgVmVj
dG9yOjphcHBlbmQoKSB3aXRoIFZlY3Rvcjo6dW5jaGVja2VkQXBwZW5kKCkgd2hlcmUgYXBwcm9w
cmlhdGUKKyAgICAgICAgLSBMZXZlcmFnZSB0aGUgZmFjdCB0aGF0IFZlY3RvcjxSZWY8Rm9vPj4g
aXMgbm93IGNvcHlhYmxlIChCZWNhdXNlIFJlZjw+IG5vdyBoYXMKKyAgICAgICAgICBhIGNvcHkg
Y29uc3RydWN0b3IpCisgICAgICAgIC0gQ2FsbCBjcm9zc1RocmVhZENvcHkoKSB0byBpc29sYXRl
LWNvcHkgYSBWZWN0b3IoKSB3aXRob3V0IGl0ZXJhdGluZy4KKyAgICAgICAgLSBMZXZlcmFnZSBW
ZWN0b3IgY29uc3RydWN0b3IgdGhhdCB0YWtlcyBpbiBhbiBpbnRpYWxpemF0aW9uIGxpc3QgaW4g
bW9yZSBjYXNlcworICAgICAgICAtIExldmVyYWdlIFZlY3Rvcjo6ZnJvbSgpIGluIG1vcmUgY2Fz
ZXMgdG8gc2ltcGxpZnkgdmVjdG9yIGNvbnN0cnVjdGlvbiBpbiBzb21lCisgICAgICAgICAgY2Fz
ZS4KKyAgICAgICAgLSBEcm9wIHVubmVjZXNzYXJ5IGNhbGxzIHRvIFZlY3Rvcjo6cmVzZXJ2ZSpD
YXBhY2l0eSgpIGJlZm9yZSBjYWxsaW5nCisgICAgICAgICAgVmVjdG9yOjphcHBlbmQoVCosIHNp
emVfdCkgc2luY2UgdGhlIGFwcGVuZCgpIGltcGxlbWVudGF0aW9uIGFscmVhZHkgZG9lcyB0aGlz
CisgICAgICAgICAgZm9yIHVzLgorICAgICAgICAtIExldmVyYWdlIGNvcHlUb1ZlY3RvcigpIGFu
ZCBjb3B5VG9WZWN0b3JPZjw+IGluIG1vcmUgY2FzZXMKKyAgICAgICAgLSBDYWxsIHNocmlua1Rv
Rml0KCkgaW4gc29tZSBjYXNlcyB3aGVyZSB3ZSByZXNlcnZlIGNhcGFjaXR5IGFuZCB0aGVuIGFw
cGVuZCgpCisgICAgICAgICAgYnV0IG1heSBub3QgYXBwZW5kKCkgYXMgbXVjaCBhcyB3ZSByZXNl
cnZlZC4gCisKKyAgICAgICAgKiBNb2R1bGVzL2FzeW5jLWNsaXBib2FyZC9DbGlwYm9hcmQuY3Bw
OgorICAgICAgICAoV2ViQ29yZTo6Q2xpcGJvYXJkOjpyZWFkKToKKyAgICAgICAgKFdlYkNvcmU6
OkNsaXBib2FyZDo6SXRlbVdyaXRlcjo6ZGlkU2V0QWxsRGF0YSk6CisgICAgICAgICogTW9kdWxl
cy9lbmNyeXB0ZWRtZWRpYS9NZWRpYUtleVNlc3Npb24uY3BwOgorICAgICAgICAoV2ViQ29yZTo6
TWVkaWFLZXlTZXNzaW9uOjp1cGRhdGVLZXlTdGF0dXNlcyk6CisgICAgICAgICogTW9kdWxlcy9l
bnRyaWVzYXBpL0ZpbGVTeXN0ZW1FbnRyaWVzQ2FsbGJhY2suY3BwOgorICAgICAgICAoV2ViQ29y
ZTo6RmlsZVN5c3RlbUVudHJpZXNDYWxsYmFjazo6c2NoZWR1bGVDYWxsYmFjayk6CisgICAgICAg
IChXZWJDb3JlOjpjb3B5VmVjdG9yKTogRGVsZXRlZC4KKyAgICAgICAgKiBNb2R1bGVzL2VudHJp
ZXNhcGkvSFRNTElucHV0RWxlbWVudEVudHJpZXNBUEkuY3BwOgorICAgICAgICAoV2ViQ29yZTo6
SFRNTElucHV0RWxlbWVudEVudHJpZXNBUEk6OndlYmtpdEVudHJpZXMpOgorICAgICAgICAqIE1v
ZHVsZXMvZ2VvbG9jYXRpb24vR2VvbG9jYXRpb25Db250cm9sbGVyLmNwcDoKKyAgICAgICAgKFdl
YkNvcmU6Okdlb2xvY2F0aW9uQ29udHJvbGxlcjo6cG9zaXRpb25DaGFuZ2VkKToKKyAgICAgICAg
KFdlYkNvcmU6Okdlb2xvY2F0aW9uQ29udHJvbGxlcjo6ZXJyb3JPY2N1cnJlZCk6CisgICAgICAg
ICogTW9kdWxlcy9pbmRleGVkZGIvSURCRGF0YWJhc2UuY3BwOgorICAgICAgICAoV2ViQ29yZTo6
SURCRGF0YWJhc2U6OnN0b3ApOgorICAgICAgICAqIE1vZHVsZXMvaW5kZXhlZGRiL0lEQkdldEFs
bFJlc3VsdC5jcHA6CisgICAgICAgIChXZWJDb3JlOjpJREJHZXRBbGxSZXN1bHQ6Omlzb2xhdGVk
Q29weSk6CisgICAgICAgICogTW9kdWxlcy9pbmRleGVkZGIvSURCR2V0UmVzdWx0LmNwcDoKKyAg
ICAgICAgKFdlYkNvcmU6OklEQkdldFJlc3VsdDo6aXNvbGF0ZWRDb3B5KToKKyAgICAgICAgKiBN
b2R1bGVzL2luZGV4ZWRkYi9JREJLZXlQYXRoLmNwcDoKKyAgICAgICAgKFdlYkNvcmU6Omlzb2xh
dGVkQ29weSk6IERlbGV0ZWQuCisgICAgICAgICogTW9kdWxlcy9pbmRleGVkZGIvSURCS2V5UGF0
aC5oOgorICAgICAgICAoV2ViQ29yZTo6aXNvbGF0ZWRDb3B5KTogRGVsZXRlZC4KKyAgICAgICAg
KiBNb2R1bGVzL2luZGV4ZWRkYi9JREJUcmFuc2FjdGlvbi5jcHA6CisgICAgICAgIChXZWJDb3Jl
OjpJREJUcmFuc2FjdGlvbjo6YWJvcnRJblByb2dyZXNzT3BlcmF0aW9ucyk6CisgICAgICAgICog
TW9kdWxlcy9pbmRleGVkZGIvY2xpZW50L0lEQkNvbm5lY3Rpb25Qcm94eS5jcHA6CisgICAgICAg
IChXZWJDb3JlOjpJREJDbGllbnQ6OnJlbW92ZUl0ZW1zTWF0Y2hpbmdDdXJyZW50VGhyZWFkKToK
KyAgICAgICAgKiBNb2R1bGVzL2luZGV4ZWRkYi9zZXJ2ZXIvTWVtb3J5T2JqZWN0U3RvcmUuY3Bw
OgorICAgICAgICAoV2ViQ29yZTo6SURCU2VydmVyOjpNZW1vcnlPYmplY3RTdG9yZTo6ZGVsZXRl
QWxsSW5kZXhlcyk6CisgICAgICAgICogTW9kdWxlcy9pbmRleGVkZGIvc2VydmVyL1NRTGl0ZUlE
QkN1cnNvci5jcHA6CisgICAgICAgIChXZWJDb3JlOjpJREJTZXJ2ZXI6OlNRTGl0ZUlEQkN1cnNv
cjo6Y3VycmVudERhdGEpOgorICAgICAgICAqIE1vZHVsZXMvaW5kZXhlZGRiL3NoYXJlZC9JREJE
YXRhYmFzZUluZm8uY3BwOgorICAgICAgICAoV2ViQ29yZTo6SURCRGF0YWJhc2VJbmZvOjpvYmpl
Y3RTdG9yZU5hbWVzIGNvbnN0KToKKyAgICAgICAgKiBNb2R1bGVzL2luZGV4ZWRkYi9zaGFyZWQv
SURCSW5kZXhJbmZvLmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OklEQkluZGV4SW5mbzo6aXNvbGF0
ZWRDb3B5IGNvbnN0KToKKyAgICAgICAgKiBNb2R1bGVzL2luZGV4ZWRkYi9zaGFyZWQvSURCT2Jq
ZWN0U3RvcmVJbmZvLmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OklEQk9iamVjdFN0b3JlSW5mbzo6
aXNvbGF0ZWRDb3B5IGNvbnN0KToKKyAgICAgICAgKFdlYkNvcmU6OklEQk9iamVjdFN0b3JlSW5m
bzo6aW5kZXhOYW1lcyBjb25zdCk6CisgICAgICAgICogTW9kdWxlcy9pbmRleGVkZGIvc2hhcmVk
L0lEQlRyYW5zYWN0aW9uSW5mby5jcHA6CisgICAgICAgIChXZWJDb3JlOjpJREJUcmFuc2FjdGlv
bkluZm86Omlzb2xhdGVkQ29weSk6CisgICAgICAgICogTW9kdWxlcy9pbmRleGVkZGIvc2hhcmVk
L0luZGV4S2V5LmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OkluZGV4S2V5Ojppc29sYXRlZENvcHkg
Y29uc3QpOgorICAgICAgICAqIE1vZHVsZXMvbWVkaWFzdHJlYW0vTWVkaWFTdHJlYW0uY3BwOgor
ICAgICAgICAoV2ViQ29yZTo6TWVkaWFTdHJlYW06OmNsb25lKToKKyAgICAgICAgKiBNb2R1bGVz
L21lZGlhc3RyZWFtL01lZGlhU3RyZWFtVHJhY2suY3BwOgorICAgICAgICAoV2ViQ29yZTo6Y2Fw
YWJpbGl0eVN0cmluZ1ZlY3Rvcik6CisgICAgICAgICogTW9kdWxlcy9tZWRpYXN0cmVhbS9NZWRp
YVRyYWNrQ29uc3RyYWludHMuY3BwOgorICAgICAgICAoV2ViQ29yZTo6Y29udmVydEFkdmFuY2Vk
VG9JbnRlcm5hbEZvcm0pOgorICAgICAgICAqIE1vZHVsZXMvbWVkaWFzdHJlYW0vU0ZyYW1lVXRp
bHMuY3BwOgorICAgICAgICAoV2ViQ29yZTo6dG9SYnNwKToKKyAgICAgICAgKiBNb2R1bGVzL3Jl
bW90ZXBsYXliYWNrL1JlbW90ZVBsYXliYWNrLmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OlJlbW90
ZVBsYXliYWNrOjphdmFpbGFiaWxpdHlDaGFuZ2VkKToKKyAgICAgICAgKiBNb2R1bGVzL3NwZWVj
aC9TcGVlY2hSZWNvZ25pdGlvbi5jcHA6CisgICAgICAgIChXZWJDb3JlOjpTcGVlY2hSZWNvZ25p
dGlvbjo6ZGlkUmVjZWl2ZVJlc3VsdCk6CisgICAgICAgICogTW9kdWxlcy93ZWJhdXRobi9jYm9y
L0NCT1JWYWx1ZS5jcHA6CisgICAgICAgIChjYm9yOjpDQk9SVmFsdWU6OkNCT1JWYWx1ZSk6Cisg
ICAgICAgICogTW9kdWxlcy93ZWJhdXRobi9maWRvL0F1dGhlbnRpY2F0b3JHZXRJbmZvUmVzcG9u
c2UuY3BwOgorICAgICAgICAoZmlkbzo6dG9BcnJheVZhbHVlKToKKyAgICAgICAgKiBNb2R1bGVz
L3dlYmF1dGhuL2ZpZG8vRGV2aWNlUmVxdWVzdENvbnZlcnRlci5jcHA6CisgICAgICAgIChmaWRv
Ojpjb252ZXJ0UGFyYW1ldGVyc1RvQ0JPUik6CisgICAgICAgICogTW9kdWxlcy93ZWJhdXRobi9m
aWRvL1Bpbi5jcHA6CisgICAgICAgIChmaWRvOjpwaW46OmVuY29kZVJhd1B1YmxpY0tleSk6Cisg
ICAgICAgICogTW9kdWxlcy93ZWJkYXRhYmFzZS9EYXRhYmFzZVRyYWNrZXIuY3BwOgorICAgICAg
ICAoV2ViQ29yZTo6RGF0YWJhc2VUcmFja2VyOjpkYXRhYmFzZU5hbWVzKToKKyAgICAgICAgKFdl
YkNvcmU6Omlzb2xhdGVkQ29weSk6IERlbGV0ZWQuCisgICAgICAgICogYWNjZXNzaWJpbGl0eS9B
WE9iamVjdENhY2hlLmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OkFYT2JqZWN0Q2FjaGU6Om5vdGlm
aWNhdGlvblBvc3RUaW1lckZpcmVkKToKKyAgICAgICAgKiBhY2Nlc3NpYmlsaXR5L2lzb2xhdGVk
dHJlZS9BWElzb2xhdGVkT2JqZWN0LmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OkFYSXNvbGF0ZWRP
YmplY3Q6OnNldE1hdGhzY3JpcHRzKToKKyAgICAgICAgKFdlYkNvcmU6OkFYSXNvbGF0ZWRPYmpl
Y3Q6OnNldE9iamVjdFZlY3RvclByb3BlcnR5KToKKyAgICAgICAgKiBhY2Nlc3NpYmlsaXR5L2lz
b2xhdGVkdHJlZS9BWElzb2xhdGVkVHJlZS5jcHA6CisgICAgICAgIChXZWJDb3JlOjpBWElzb2xh
dGVkVHJlZTo6b2JqZWN0c0ZvcklEcyBjb25zdCk6CisgICAgICAgIChXZWJDb3JlOjpBWElzb2xh
dGVkVHJlZTo6Y29sbGVjdE5vZGVDaGFuZ2VzRm9yU3VidHJlZSk6CisgICAgICAgICogYW5pbWF0
aW9uL0NTU1Byb3BlcnR5QW5pbWF0aW9uLmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OkNTU1Byb3Bl
cnR5QW5pbWF0aW9uV3JhcHBlck1hcDo6Q1NTUHJvcGVydHlBbmltYXRpb25XcmFwcGVyTWFwKToK
KyAgICAgICAgKiBiaW5kaW5ncy9qcy9TZXJpYWxpemVkU2NyaXB0VmFsdWUuY3BwOgorICAgICAg
ICAoV2ViQ29yZTo6Q2xvbmVEZXNlcmlhbGl6ZXI6OnJlYWRTdHJpbmcpOgorICAgICAgICAoV2Vi
Q29yZTo6U2VyaWFsaXplZFNjcmlwdFZhbHVlOjpibG9iVVJMcyBjb25zdCk6CisgICAgICAgICog
Y3J5cHRvL21hYy9DcnlwdG9BbGdvcml0aG1FQ0RTQU1hYy5jcHA6CisgICAgICAgIChXZWJDb3Jl
OjpzaWduRUNEU0EpOgorICAgICAgICAoV2ViQ29yZTo6dmVyaWZ5RUNEU0EpOgorICAgICAgICAq
IGNyeXB0by9tYWMvQ3J5cHRvS2V5RUNNYWMuY3BwOgorICAgICAgICAoV2ViQ29yZTo6Q3J5cHRv
S2V5RUM6OnBsYXRmb3JtRXhwb3J0U3BraSBjb25zdCk6CisgICAgICAgIChXZWJDb3JlOjpDcnlw
dG9LZXlFQzo6cGxhdGZvcm1FeHBvcnRQa2NzOCBjb25zdCk6CisgICAgICAgICogY3J5cHRvL21h
Yy9DcnlwdG9LZXlSU0FNYWMuY3BwOgorICAgICAgICAoV2ViQ29yZTo6Q3J5cHRvS2V5UlNBOjpl
eHBvcnRTcGtpIGNvbnN0KToKKyAgICAgICAgKFdlYkNvcmU6OkNyeXB0b0tleVJTQTo6ZXhwb3J0
UGtjczggY29uc3QpOgorICAgICAgICAqIGNzcy9DU1NCYXNpY1NoYXBlcy5jcHA6CisgICAgICAg
IChXZWJDb3JlOjpDU1NCYXNpY1NoYXBlUG9seWdvbjo6Y3NzVGV4dCBjb25zdCk6CisgICAgICAg
ICogY3NzL0NTU0NvbXB1dGVkU3R5bGVEZWNsYXJhdGlvbi5jcHA6CisgICAgICAgIChXZWJDb3Jl
OjpDb21wdXRlZFN0eWxlRXh0cmFjdG9yOjpjb3B5UHJvcGVydGllc0luU2V0KToKKyAgICAgICAg
KFdlYkNvcmU6OkNvbXB1dGVkU3R5bGVFeHRyYWN0b3I6OmNvcHlQcm9wZXJ0aWVzKToKKyAgICAg
ICAgKiBjc3MvQ1NTRm9udEZhY2UuY3BwOgorICAgICAgICAoV2ViQ29yZTo6aXRlcmF0ZUNsaWVu
dHMpOgorICAgICAgICAqIGNzcy9DU1NGb250RmFjZVNldC5jcHA6CisgICAgICAgIChXZWJDb3Jl
OjpDU1NGb250RmFjZVNldDo6bWF0Y2hpbmdGYWNlc0V4Y2x1ZGluZ1ByZWluc3RhbGxlZEZvbnRz
KToKKyAgICAgICAgKFdlYkNvcmU6OkNTU0ZvbnRGYWNlU2V0Ojpmb250RmFjZSk6CisgICAgICAg
ICogY3NzL0NTU0tleWZyYW1lc1J1bGUuY3BwOgorICAgICAgICAoV2ViQ29yZTo6U3R5bGVSdWxl
S2V5ZnJhbWVzOjpTdHlsZVJ1bGVLZXlmcmFtZXMpOgorICAgICAgICAqIGNzcy9TdHlsZVByb3Bl
cnRpZXMuY3BwOgorICAgICAgICAoV2ViQ29yZTo6U3R5bGVQcm9wZXJ0aWVzOjpjb3B5UHJvcGVy
dGllc0luU2V0IGNvbnN0KToKKyAgICAgICAgKFdlYkNvcmU6OkRlZmVycmVkU3R5bGVQcm9wZXJ0
aWVzOjpEZWZlcnJlZFN0eWxlUHJvcGVydGllcyk6CisgICAgICAgICogY3NzL1N0eWxlUnVsZS5j
cHA6CisgICAgICAgIChXZWJDb3JlOjpEZWZlcnJlZFN0eWxlR3JvdXBSdWxlTGlzdDo6RGVmZXJy
ZWRTdHlsZUdyb3VwUnVsZUxpc3QpOgorICAgICAgICAoV2ViQ29yZTo6U3R5bGVSdWxlR3JvdXA6
OlN0eWxlUnVsZUdyb3VwKToKKyAgICAgICAgKiBjc3MvY2FsYy9DU1NDYWxjT3BlcmF0aW9uTm9k
ZS5oOgorICAgICAgICAqIGNzcy9jYWxjL0NTU0NhbGNWYWx1ZS5jcHA6CisgICAgICAgIChXZWJD
b3JlOjpjcmVhdGVDU1MpOgorICAgICAgICAqIGRpc3BsYXkvY3NzL0Rpc3BsYXlCb3hEZWNvcmF0
aW9uUGFpbnRlci5jcHA6CisgICAgICAgIChXZWJDb3JlOjpEaXNwbGF5OjpCb3JkZXJQYWludGVy
OjpjbGlwQm9yZGVyU2lkZVBvbHlnb24gY29uc3QpOgorICAgICAgICAoV2ViQ29yZTo6RGlzcGxh
eTo6Qm9yZGVyUGFpbnRlcjo6ZHJhd0xpbmVGb3JCb3hTaWRlIGNvbnN0KToKKyAgICAgICAgKiBk
b20vRE9NUmVjdExpc3QuY3BwOgorICAgICAgICAoV2ViQ29yZTo6RE9NUmVjdExpc3Q6OkRPTVJl
Y3RMaXN0KToKKyAgICAgICAgKiBkb20vRG9jdW1lbnQuY3BwOgorICAgICAgICAoV2ViQ29yZTo6
RG9jdW1lbnQ6OnVwZGF0ZUVsZW1lbnRzQWZmZWN0ZWRCeU1lZGlhUXVlcmllcyk6CisgICAgICAg
IChXZWJDb3JlOjpEb2N1bWVudDo6ZGlkQXNzb2NpYXRlRm9ybUNvbnRyb2xzVGltZXJGaXJlZCk6
CisgICAgICAgICogZG9tL0VsZW1lbnREYXRhLmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OlVuaXF1
ZUVsZW1lbnREYXRhOjpVbmlxdWVFbGVtZW50RGF0YSk6CisgICAgICAgICogZG9tL0V2ZW50TGlz
dGVuZXJNYXAuY3BwOgorICAgICAgICAoV2ViQ29yZTo6RXZlbnRMaXN0ZW5lck1hcDo6ZXZlbnRU
eXBlcyBjb25zdCk6CisgICAgICAgICogZG9tL1RyZWVTY29wZU9yZGVyZWRNYXAuY3BwOgorICAg
ICAgICAoV2ViQ29yZTo6VHJlZVNjb3BlT3JkZXJlZE1hcDo6a2V5cyBjb25zdCk6CisgICAgICAg
ICogZWRpdGluZy9Db21wb3NpdGVFZGl0Q29tbWFuZC5jcHA6CisgICAgICAgIChXZWJDb3JlOjpj
b3B5TWFya2Vycyk6CisgICAgICAgICogZWRpdGluZy9FZGl0b3IuY3BwOgorICAgICAgICAoV2Vi
Q29yZTo6ZWRpdGFibGVUZXh0TGlzdHNBdFBvc2l0aW9uSW5EZXNjZW5kaW5nT3JkZXIpOgorICAg
ICAgICAqIGZpbGVhcGkvRmlsZUxpc3QuY3BwOgorICAgICAgICAoV2ViQ29yZTo6RmlsZUxpc3Q6
OnBhdGhzIGNvbnN0KToKKyAgICAgICAgKiBoaXN0b3J5L0hpc3RvcnlJdGVtLmNwcDoKKyAgICAg
ICAgKFdlYkNvcmU6Okhpc3RvcnlJdGVtOjpIaXN0b3J5SXRlbSk6CisgICAgICAgIChXZWJDb3Jl
OjptX2Zvcm1EYXRhKToKKyAgICAgICAgKFdlYkNvcmU6Om1faWRlbnRpZmllcik6CisgICAgICAg
ICogaHRtbC9GaWxlSW5wdXRUeXBlLmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OkZpbGVJbnB1dFR5
cGU6OnNldEZpbGVzKToKKyAgICAgICAgKFdlYkNvcmU6OkZpbGVJbnB1dFR5cGU6OmZpbGVzQ2hv
c2VuKToKKyAgICAgICAgKiBodG1sL0xpbmtJY29uQ29sbGVjdG9yLmNwcDoKKyAgICAgICAgKFdl
YkNvcmU6OkxpbmtJY29uQ29sbGVjdG9yOjppY29uc09mVHlwZXMpOgorICAgICAgICAqIGh0bWwv
VVJMU2VhcmNoUGFyYW1zLmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OlVSTFNlYXJjaFBhcmFtczo6
Z2V0QWxsIGNvbnN0KToKKyAgICAgICAgKiBsYXlvdXQvZm9ybWF0dGluZ0NvbnRleHRzL2lubGlu
ZS9JbmxpbmVMaW5lQnVpbGRlci5jcHA6CisgICAgICAgIChXZWJDb3JlOjpMYXlvdXQ6OkxpbmVC
dWlsZGVyOjpsYXlvdXRJbmxpbmVDb250ZW50KToKKyAgICAgICAgKiBsb2FkZXIvRG9jdW1lbnRM
b2FkZXIuY3BwOgorICAgICAgICAoV2ViQ29yZTo6RG9jdW1lbnRMb2FkZXI6OnN0YXJ0SWNvbkxv
YWRpbmcpOgorICAgICAgICAoV2ViQ29yZTo6RG9jdW1lbnRMb2FkZXI6OnNldEFjdGl2ZUNvbnRl
bnRSdWxlTGlzdEFjdGlvblBhdHRlcm5zKToKKyAgICAgICAgKiBsb2FkZXIvVGV4dFRyYWNrTG9h
ZGVyLmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OlRleHRUcmFja0xvYWRlcjo6Z2V0TmV3Q3Vlcyk6
CisgICAgICAgICogbG9hZGVyL2FyY2hpdmUvY2YvTGVnYWN5V2ViQXJjaGl2ZS5jcHA6CisgICAg
ICAgIChXZWJDb3JlOjpMZWdhY3lXZWJBcmNoaXZlOjpjcmVhdGVGcm9tU2VsZWN0aW9uKToKKyAg
ICAgICAgKiBwYWdlL0NhcHRpb25Vc2VyUHJlZmVyZW5jZXNNZWRpYUFGLmNwcDoKKyAgICAgICAg
KFdlYkNvcmU6OkNhcHRpb25Vc2VyUHJlZmVyZW5jZXNNZWRpYUFGOjpwcmVmZXJyZWRBdWRpb0No
YXJhY3RlcmlzdGljcyBjb25zdCk6CisgICAgICAgICogcGFnZS9ET01XaW5kb3cuY3BwOgorICAg
ICAgICAoV2ViQ29yZTo6RE9NV2luZG93OjpkaXNwYXRjaEFsbFBlbmRpbmdCZWZvcmVVbmxvYWRF
dmVudHMpOgorICAgICAgICAqIHBhZ2UvSW50ZXJzZWN0aW9uT2JzZXJ2ZXIuY3BwOgorICAgICAg
ICAoV2ViQ29yZTo6SW50ZXJzZWN0aW9uT2JzZXJ2ZXI6OmNyZWF0ZSk6CisgICAgICAgICogcGFn
ZS9QYWdlLmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OlBhZ2U6OnJlcGxhY2VSYW5nZXNXaXRoVGV4
dCk6CisgICAgICAgICogcGFnZS9jc3AvQ29udGVudFNlY3VyaXR5UG9saWN5LmNwcDoKKyAgICAg
ICAgKFdlYkNvcmU6OkNvbnRlbnRTZWN1cml0eVBvbGljeTo6cmVzcG9uc2VIZWFkZXJzIGNvbnN0
KToKKyAgICAgICAgKiBwYWdlL2NzcC9Db250ZW50U2VjdXJpdHlQb2xpY3lSZXNwb25zZUhlYWRl
cnMuY3BwOgorICAgICAgICAoV2ViQ29yZTo6Q29udGVudFNlY3VyaXR5UG9saWN5UmVzcG9uc2VI
ZWFkZXJzOjppc29sYXRlZENvcHkgY29uc3QpOgorICAgICAgICAqIHBhZ2UvbWFjL0ltYWdlT3Zl
cmxheUNvbnRyb2xsZXJNYWMubW06CisgICAgICAgIChXZWJDb3JlOjpJbWFnZU92ZXJsYXlDb250
cm9sbGVyOjp1cGRhdGVEYXRhRGV0ZWN0b3JIaWdobGlnaHRzKToKKyAgICAgICAgKiBwYWdlL21h
Yy9TZXJ2aWNlc092ZXJsYXlDb250cm9sbGVyLm1tOgorICAgICAgICAoV2ViQ29yZTo6U2Vydmlj
ZXNPdmVybGF5Q29udHJvbGxlcjo6YnVpbGRTZWxlY3Rpb25IaWdobGlnaHQpOgorICAgICAgICAo
V2ViQ29yZTo6U2VydmljZXNPdmVybGF5Q29udHJvbGxlcjo6aGFuZGxlQ2xpY2spOgorICAgICAg
ICAqIHBhZ2Uvc2Nyb2xsaW5nL0FzeW5jU2Nyb2xsaW5nQ29vcmRpbmF0b3IuY3BwOgorICAgICAg
ICAoV2ViQ29yZTo6QXN5bmNTY3JvbGxpbmdDb29yZGluYXRvcjo6Y2hpbGRyZW5PZk5vZGUgY29u
c3QpOgorICAgICAgICAqIHBhZ2Uvc2Nyb2xsaW5nL1Njcm9sbFNuYXBPZmZzZXRzSW5mby5jcHA6
CisgICAgICAgIChXZWJDb3JlOjpjb252ZXJ0T2Zmc2V0SW5mbyk6CisgICAgICAgICogcGxhdGZv
cm0vTGVuZ3RoLmNwcDoKKyAgICAgICAgKFdlYkNvcmU6Om1ha2VDYWxjdWxhdGVkKToKKyAgICAg
ICAgKiBwbGF0Zm9ybS9hbmltYXRpb24vQW5pbWF0aW9uTGlzdC5jcHA6CisgICAgICAgIChXZWJD
b3JlOjpBbmltYXRpb25MaXN0OjpBbmltYXRpb25MaXN0KToKKyAgICAgICAgKiBwbGF0Zm9ybS9j
b2NvYS9QbGF5YmFja1Nlc3Npb25Nb2RlbE1lZGlhRWxlbWVudC5tbToKKyAgICAgICAgKFdlYkNv
cmU6OlBsYXliYWNrU2Vzc2lvbk1vZGVsTWVkaWFFbGVtZW50OjphdWRpb01lZGlhU2VsZWN0aW9u
T3B0aW9ucyBjb25zdCk6CisgICAgICAgICogcGxhdGZvcm0vZW5jcnlwdGVkbWVkaWEvQ0RNUHJv
eHkuY3BwOgorICAgICAgICAoV2ViQ29yZTo6S2V5U3RvcmU6OmNvbnZlcnRUb0pTS2V5U3RhdHVz
VmVjdG9yIGNvbnN0KToKKyAgICAgICAgKiBwbGF0Zm9ybS9ncmFwaGljcy9GbG9hdFBvbHlnb24u
Y3BwOgorICAgICAgICAoV2ViQ29yZTo6RmxvYXRQb2x5Z29uOjpvdmVybGFwcGluZ0VkZ2VzIGNv
bnN0KToKKyAgICAgICAgKiBwbGF0Zm9ybS9ncmFwaGljcy9GbG9hdFF1YWQuY3BwOgorICAgICAg
ICAoV2ViQ29yZTo6Ym91bmRpbmdCb3hlcyk6CisgICAgICAgICogcGxhdGZvcm0vZ3JhcGhpY3Mv
YXZmb3VuZGF0aW9uL29iamMvQ0RNSW5zdGFuY2VGYWlyUGxheVN0cmVhbWluZ0FWRk9iakMubW06
CisgICAgICAgIChXZWJDb3JlOjpDRE1JbnN0YW5jZVNlc3Npb25GYWlyUGxheVN0cmVhbWluZ0FW
Rk9iakM6OnVwZGF0ZUxpY2Vuc2UpOgorICAgICAgICAqIHBsYXRmb3JtL2dyYXBoaWNzL2NhL1Rp
bGVHcmlkLmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OlRpbGVHcmlkOjpyZW1vdmVUaWxlcyk6Cisg
ICAgICAgIChXZWJDb3JlOjpUaWxlR3JpZDo6cmVtb3ZlQWxsVGlsZXMpOgorICAgICAgICAqIHBs
YXRmb3JtL2dyYXBoaWNzL2NhL1RpbGVHcmlkLmg6CisgICAgICAgICogcGxhdGZvcm0vZ3JhcGhp
Y3MvY2cvSW1hZ2VVdGlsaXRpZXNDRy5jcHA6CisgICAgICAgIChXZWJDb3JlOjpmaW5kSW1hZ2Vz
Rm9yVHJhbnNjb2RpbmcpOgorICAgICAgICAoV2ViQ29yZTo6dHJhbnNjb2RlSW1hZ2VzKToKKyAg
ICAgICAgKiBwbGF0Zm9ybS9ncmFwaGljcy9jb2NvYS9Gb250Q2FjaGVDb3JlVGV4dC5jcHA6Cisg
ICAgICAgIChXZWJDb3JlOjpmaW5kQ2xvc2VzdEZvbnQpOgorICAgICAgICAoV2ViQ29yZTo6Rm9u
dENhY2hlOjpnZXRGb250U2VsZWN0aW9uQ2FwYWJpbGl0aWVzSW5GYW1pbHkpOgorICAgICAgICAq
IHBsYXRmb3JtL21lZGlhc3RyZWFtL1JlYWx0aW1lTWVkaWFTb3VyY2UuY3BwOgorICAgICAgICAo
V2ViQ29yZTo6UmVhbHRpbWVNZWRpYVNvdXJjZTo6Zml0bmVzc0Rpc3RhbmNlKToKKyAgICAgICAg
KiBwbGF0Zm9ybS9uZXR3b3JrL0NhY2hlVmFsaWRhdGlvbi5jcHA6CisgICAgICAgIChXZWJDb3Jl
Ojpjb2xsZWN0VmFyeWluZ1JlcXVlc3RIZWFkZXJzSW50ZXJuYWwpOgorICAgICAgICAqIHBsYXRm
b3JtL25ldHdvcmsvRm9ybURhdGEuY3BwOgorICAgICAgICAoV2ViQ29yZTo6Rm9ybURhdGE6Omlz
b2xhdGVkQ29weSBjb25zdCk6CisgICAgICAgICogcGxhdGZvcm0vbmV0d29yay9Tb2NrZXRTdHJl
YW1IYW5kbGVJbXBsLmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OlNvY2tldFN0cmVhbUhhbmRsZUlt
cGw6OnBsYXRmb3JtU2VuZEhhbmRzaGFrZSk6CisgICAgICAgICogcGxhdGZvcm0vbmV0d29yay9j
b2NvYS9OZXR3b3JrU3RvcmFnZVNlc3Npb25Db2NvYS5tbToKKyAgICAgICAgKiBwbGF0Zm9ybS90
ZXh0L0xvY2FsZUlDVS5jcHA6CisgICAgICAgIChXZWJDb3JlOjpMb2NhbGVJQ1U6OmNyZWF0ZUxh
YmVsVmVjdG9yKToKKyAgICAgICAgKFdlYkNvcmU6OmNyZWF0ZUZhbGxiYWNrTW9udGhMYWJlbHMp
OgorICAgICAgICAoV2ViQ29yZTo6Y3JlYXRlRmFsbGJhY2tBTVBNTGFiZWxzKToKKyAgICAgICAg
KiBwbGF0Zm9ybS90ZXh0L0xvY2FsZU5vbmUuY3BwOgorICAgICAgICAoV2ViQ29yZTo6TG9jYWxl
Tm9uZTo6bW9udGhMYWJlbHMpOgorICAgICAgICAoV2ViQ29yZTo6TG9jYWxlTm9uZTo6c2hvcnRN
b250aExhYmVscyk6CisgICAgICAgIChXZWJDb3JlOjpMb2NhbGVOb25lOjp0aW1lQU1QTUxhYmVs
cyk6CisgICAgICAgICogcGxhdGZvcm0vdGV4dC9jb2NvYS9Mb2NhbGVDb2NvYS5tbToKKyAgICAg
ICAgKFdlYkNvcmU6OkxvY2FsZUNvY29hOjptb250aExhYmVscyk6CisgICAgICAgIChXZWJDb3Jl
OjpMb2NhbGVDb2NvYTo6c2hvcnRNb250aExhYmVscyk6CisgICAgICAgIChXZWJDb3JlOjpMb2Nh
bGVDb2NvYTo6c3RhbmRBbG9uZU1vbnRoTGFiZWxzKToKKyAgICAgICAgKFdlYkNvcmU6OkxvY2Fs
ZUNvY29hOjpzaG9ydFN0YW5kQWxvbmVNb250aExhYmVscyk6CisgICAgICAgIChXZWJDb3JlOjpM
b2NhbGVDb2NvYTo6dGltZUFNUE1MYWJlbHMpOgorICAgICAgICAqIHBsdWdpbnMvRE9NTWltZVR5
cGVBcnJheS5jcHA6CisgICAgICAgIChXZWJDb3JlOjpET01NaW1lVHlwZUFycmF5OjpzdXBwb3J0
ZWRQcm9wZXJ0eU5hbWVzIGNvbnN0KToKKyAgICAgICAgKFdlYkNvcmU6OkRPTU1pbWVUeXBlQXJy
YXk6OnN1cHBvcnRlZFByb3BlcnR5TmFtZXMpOiBEZWxldGVkLgorICAgICAgICAqIHBsdWdpbnMv
RE9NTWltZVR5cGVBcnJheS5oOgorICAgICAgICAqIHBsdWdpbnMvRE9NUGx1Z2luLmNwcDoKKyAg
ICAgICAgKFdlYkNvcmU6Om1ha2VNaW1lVHlwZXMpOgorICAgICAgICAoV2ViQ29yZTo6RE9NUGx1
Z2luOjpzdXBwb3J0ZWRQcm9wZXJ0eU5hbWVzIGNvbnN0KToKKyAgICAgICAgKFdlYkNvcmU6OkRP
TVBsdWdpbjo6c3VwcG9ydGVkUHJvcGVydHlOYW1lcyk6IERlbGV0ZWQuCisgICAgICAgICogcGx1
Z2lucy9ET01QbHVnaW4uaDoKKyAgICAgICAgKiBwbHVnaW5zL0RPTVBsdWdpbkFycmF5LmNwcDoK
KyAgICAgICAgKFdlYkNvcmU6OkRPTVBsdWdpbkFycmF5OjpzdXBwb3J0ZWRQcm9wZXJ0eU5hbWVz
IGNvbnN0KToKKyAgICAgICAgKFdlYkNvcmU6OkRPTVBsdWdpbkFycmF5OjpzdXBwb3J0ZWRQcm9w
ZXJ0eU5hbWVzKTogRGVsZXRlZC4KKyAgICAgICAgKiBwbHVnaW5zL0RPTVBsdWdpbkFycmF5Lmg6
CisgICAgICAgICogcmVuZGVyaW5nL0xheWVyQW5jZXN0b3JDbGlwcGluZ1N0YWNrLmNwcDoKKyAg
ICAgICAgKFdlYkNvcmU6OkxheWVyQW5jZXN0b3JDbGlwcGluZ1N0YWNrOjpMYXllckFuY2VzdG9y
Q2xpcHBpbmdTdGFjayk6CisgICAgICAgIChXZWJDb3JlOjpMYXllckFuY2VzdG9yQ2xpcHBpbmdT
dGFjazo6Y29tcG9zaXRlZENsaXBEYXRhIGNvbnN0KToKKyAgICAgICAgKiByZW5kZXJpbmcvUmVu
ZGVyQm94TW9kZWxPYmplY3QuY3BwOgorICAgICAgICAoV2ViQ29yZTo6UmVuZGVyQm94TW9kZWxP
YmplY3Q6OmNsaXBCb3JkZXJTaWRlUG9seWdvbik6CisgICAgICAgICogcmVuZGVyaW5nL1JlbmRl
ckVsZW1lbnQuY3BwOgorICAgICAgICAoV2ViQ29yZTo6UmVuZGVyRWxlbWVudDo6ZHJhd0xpbmVG
b3JCb3hTaWRlIGNvbnN0KToKKyAgICAgICAgKiByZW5kZXJpbmcvUmVuZGVyR3JpZC5jcHA6Cisg
ICAgICAgIChXZWJDb3JlOjpSZW5kZXJHcmlkOjp0cmFja1NpemVzRm9yQ29tcHV0ZWRTdHlsZSBj
b25zdCk6CisgICAgICAgICogc3R5bGUvQ2xhc3NDaGFuZ2VJbnZhbGlkYXRpb24uY3BwOgorICAg
ICAgICAoV2ViQ29yZTo6U3R5bGU6OmNvbGxlY3RDbGFzc2VzKToKKyAgICAgICAgKiBzdHlsZS9T
dHlsZUJ1aWxkZXJDb252ZXJ0ZXIuaDoKKyAgICAgICAgKFdlYkNvcmU6OlN0eWxlOjpCdWlsZGVy
Q29udmVydGVyOjpjb252ZXJ0VG8xMDBQZXJjZW50TWludXNMZW5ndGgpOgorICAgICAgICAqIHRl
c3RpbmcvTW9ja0NETUZhY3RvcnkuY3BwOgorICAgICAgICAoV2ViQ29yZTo6TW9ja0NETUluc3Rh
bmNlU2Vzc2lvbjo6dXBkYXRlTGljZW5zZSk6CisgICAgICAgIChXZWJDb3JlOjpNb2NrQ0RNSW5z
dGFuY2VTZXNzaW9uOjpyZW1vdmVTZXNzaW9uRGF0YSk6CisgICAgICAgICogd29ya2Vycy9zZXJ2
aWNlL3NlcnZlci9TV1NlcnZlci5jcHA6CisgICAgICAgIChXZWJDb3JlOjpTV1NlcnZlcjo6Z2V0
UmVnaXN0cmF0aW9ucyk6CisKIDIwMjItMDItMTYgIEVyaWMgQ2FybHNvbiAgPGVyaWMuY2FybHNv
bkBhcHBsZS5jb20+CiAKICAgICAgICAgW0NvY29hXSBVcGRhdGUgYXVkaW8gc2Vzc2lvbiBjYXRl
Z29yeSBiZWZvcmUgc2V0dGluZyBOb3dQbGF5aW5nIHN0YXR1cwpkaWZmIC0tZ2l0IGEvU291cmNl
L1dlYktpdC9DaGFuZ2VMb2cgYi9Tb3VyY2UvV2ViS2l0L0NoYW5nZUxvZwppbmRleCAxNzU5NDVk
ZTIyMzM4ZjJkM2VhYjU0YmQ5ZTlhY2JjMjU0NGQ4NmMzLi5jNTJkMDYzOGRhZDlmZWQxMWE0NWE1
NTBiMmI1N2Y2YTQ4ZTFmYTkyIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViS2l0L0NoYW5nZUxvZwor
KysgYi9Tb3VyY2UvV2ViS2l0L0NoYW5nZUxvZwpAQCAtMSwzICsxLDExNCBAQAorMjAyMi0wMi0x
NiAgQ2hyaXMgRHVtZXogIDxjZHVtZXpAYXBwbGUuY29tPgorCisgICAgICAgIENsZWFuIHVwIC8g
b3B0aW1pemUgY2FsbCBzaXRlcyBjb25zdHJ1Y3RpbmcgdmVjdG9ycworICAgICAgICBodHRwczov
L2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9MjM2NzQ4CisKKyAgICAgICAgUmV2aWV3
ZWQgYnkgTk9CT0RZIChPT1BTISkuCisKKyAgICAgICAgQ2xlYW4gdXAgLyBvcHRpbWl6ZSBjYWxs
IHNpdGVzIGNvbnN0cnVjdGluZyB2ZWN0b3JzOgorICAgICAgICAtIFVzZSBWZWN0b3I6Om1hcCgp
IC8gV1RGOjptYXAoKSB3aGVyZSBhcHByb3ByaWF0ZQorICAgICAgICAtIFJlcGxhY2UgVmVjdG9y
OjpyZXNlcnZlQ2FwYWNpdHkoKSB3aXRoIFZlY3Rvcjo6cmVzZXJ2ZUluaXRpYWxDYXBhY2l0eSgp
IAorICAgICAgICAgIHdoZXJlIGFwcHJvcHJpYXRlCisgICAgICAgIC0gUmVwbGFjZSBWZWN0b3I6
OmFwcGVuZCgpIHdpdGggVmVjdG9yOjp1bmNoZWNrZWRBcHBlbmQoKSB3aGVyZSBhcHByb3ByaWF0
ZQorICAgICAgICAtIExldmVyYWdlIHRoZSBmYWN0IHRoYXQgVmVjdG9yPFJlZjxGb28+PiBpcyBu
b3cgY29weWFibGUgKEJlY2F1c2UgUmVmPD4gbm93IGhhcworICAgICAgICAgIGEgY29weSBjb25z
dHJ1Y3RvcikKKyAgICAgICAgLSBDYWxsIGNyb3NzVGhyZWFkQ29weSgpIHRvIGlzb2xhdGUtY29w
eSBhIFZlY3RvcigpIHdpdGhvdXQgaXRlcmF0aW5nLgorICAgICAgICAtIExldmVyYWdlIFZlY3Rv
ciBjb25zdHJ1Y3RvciB0aGF0IHRha2VzIGluIGFuIGludGlhbGl6YXRpb24gbGlzdCBpbiBtb3Jl
IGNhc2VzCisgICAgICAgIC0gTGV2ZXJhZ2UgVmVjdG9yOjpmcm9tKCkgaW4gbW9yZSBjYXNlcyB0
byBzaW1wbGlmeSB2ZWN0b3IgY29uc3RydWN0aW9uIGluIHNvbWUKKyAgICAgICAgICBjYXNlLgor
ICAgICAgICAtIERyb3AgdW5uZWNlc3NhcnkgY2FsbHMgdG8gVmVjdG9yOjpyZXNlcnZlKkNhcGFj
aXR5KCkgYmVmb3JlIGNhbGxpbmcKKyAgICAgICAgICBWZWN0b3I6OmFwcGVuZChUKiwgc2l6ZV90
KSBzaW5jZSB0aGUgYXBwZW5kKCkgaW1wbGVtZW50YXRpb24gYWxyZWFkeSBkb2VzIHRoaXMKKyAg
ICAgICAgICBmb3IgdXMuCisgICAgICAgIC0gTGV2ZXJhZ2UgY29weVRvVmVjdG9yKCkgYW5kIGNv
cHlUb1ZlY3Rvck9mPD4gaW4gbW9yZSBjYXNlcworICAgICAgICAtIENhbGwgc2hyaW5rVG9GaXQo
KSBpbiBzb21lIGNhc2VzIHdoZXJlIHdlIHJlc2VydmUgY2FwYWNpdHkgYW5kIHRoZW4gYXBwZW5k
KCkKKyAgICAgICAgICBidXQgbWF5IG5vdCBhcHBlbmQoKSBhcyBtdWNoIGFzIHdlIHJlc2VydmVk
LiAKKworICAgICAgICAqIE5ldHdvcmtQcm9jZXNzL1dlYlN0b3JhZ2UvTG9jYWxTdG9yYWdlRGF0
YWJhc2VUcmFja2VyLmNwcDoKKyAgICAgICAgKFdlYktpdDo6TG9jYWxTdG9yYWdlRGF0YWJhc2VU
cmFja2VyOjpvcmlnaW5EZXRhaWxzQ3Jvc3NUaHJlYWRDb3B5KToKKyAgICAgICAgKiBOZXR3b3Jr
UHJvY2Vzcy9jYWNoZS9DYWNoZVN0b3JhZ2VFbmdpbmVDYWNoZXMuY3BwOgorICAgICAgICAoV2Vi
S2l0OjpDYWNoZVN0b3JhZ2U6OkNhY2hlczo6Y2FjaGVJbmZvcyk6CisgICAgICAgICogU2hhcmVk
L0FQSS9BUElBcnJheS5jcHA6CisgICAgICAgIChBUEk6OkFycmF5OjpjcmVhdGVTdHJpbmdBcnJh
eSk6CisgICAgICAgIChBUEk6OkFycmF5Ojpjb3B5KToKKyAgICAgICAgKiBTaGFyZWQvQVBJL0FQ
SURpY3Rpb25hcnkuY3BwOgorICAgICAgICAoQVBJOjpEaWN0aW9uYXJ5OjprZXlzIGNvbnN0KToK
KyAgICAgICAgKiBTaGFyZWQvVXNlckRhdGEuY3BwOgorICAgICAgICAoV2ViS2l0Ojp0cmFuc2Zv
cm1HcmFwaCk6CisgICAgICAgICogU2hhcmVkL1dlYkNvbnRleHRNZW51SXRlbS5jcHA6CisgICAg
ICAgIChXZWJLaXQ6OldlYkNvbnRleHRNZW51SXRlbTo6Y3JlYXRlKToKKyAgICAgICAgKFdlYktp
dDo6V2ViQ29udGV4dE1lbnVJdGVtOjpzdWJtZW51SXRlbXNBc0FQSUFycmF5IGNvbnN0KToKKyAg
ICAgICAgKiBTaGFyZWQvV2ViQ29udGV4dE1lbnVJdGVtRGF0YS5jcHA6CisgICAgICAgIChXZWJL
aXQ6OmtpdEl0ZW1zKToKKyAgICAgICAgKFdlYktpdDo6Y29yZUl0ZW1zKToKKyAgICAgICAgKiBV
SVByb2Nlc3MvQVBJL0FQSVdlYkF1dGhlbnRpY2F0aW9uUGFuZWwuY3BwOgorICAgICAgICAoQVBJ
OjpXZWJBdXRoZW50aWNhdGlvblBhbmVsOjpXZWJBdXRoZW50aWNhdGlvblBhbmVsKToKKyAgICAg
ICAgKiBVSVByb2Nlc3MvQVBJL0FQSVdlYnNpdGVQb2xpY2llcy5jcHA6CisgICAgICAgIChBUEk6
OldlYnNpdGVQb2xpY2llczo6Y29weSBjb25zdCk6CisgICAgICAgIChBUEk6OldlYnNpdGVQb2xp
Y2llczo6ZGF0YSk6CisgICAgICAgICogVUlQcm9jZXNzL0FQSS9DL1dLUGFnZS5jcHA6CisgICAg
ICAgIChBUEk6OnRvQVBJT2JqZWN0VmVjdG9yKToKKyAgICAgICAgKFdLUGFnZVNldFBhZ2VDb250
ZXh0TWVudUNsaWVudCk6CisgICAgICAgIChXS1BhZ2VTZXRQYWdlRmluZE1hdGNoZXNDbGllbnQp
OgorICAgICAgICAoV0tQYWdlU2V0UGFnZUxvYWRlckNsaWVudCk6CisgICAgICAgICogVUlQcm9j
ZXNzL0NvY29hL1ZpZGVvRnVsbHNjcmVlbk1hbmFnZXJQcm94eS5tbToKKyAgICAgICAgKFdlYktp
dDo6VmlkZW9GdWxsc2NyZWVuTWFuYWdlclByb3h5Ojpmb3JFYWNoU2Vzc2lvbik6CisgICAgICAg
ICogVUlQcm9jZXNzL0dhbWVwYWQvVUlHYW1lcGFkUHJvdmlkZXIuY3BwOgorICAgICAgICAoV2Vi
S2l0OjpVSUdhbWVwYWRQcm92aWRlcjo6c25hcHNob3RHYW1lcGFkcyk6CisgICAgICAgICogVUlQ
cm9jZXNzL05ldHdvcmsvTmV0d29ya1Byb2Nlc3NQcm94eS5jcHA6CisgICAgICAgIChXZWJLaXQ6
Ok5ldHdvcmtQcm9jZXNzUHJveHk6OmFsbE5ldHdvcmtQcm9jZXNzZXMpOgorICAgICAgICAoV2Vi
S2l0OjpOZXR3b3JrUHJvY2Vzc1Byb3h5Ojp1cGRhdGVQcmV2YWxlbnREb21haW5zVG9CbG9ja0Nv
b2tpZXNGb3IpOgorICAgICAgICAqIFVJUHJvY2Vzcy9Ob3RpZmljYXRpb25zL1dlYk5vdGlmaWNh
dGlvbk1hbmFnZXJQcm94eS5jcHA6CisgICAgICAgIChXZWJLaXQ6OldlYk5vdGlmaWNhdGlvbk1h
bmFnZXJQcm94eTo6cHJvdmlkZXJEaWRSZW1vdmVOb3RpZmljYXRpb25Qb2xpY2llcyk6CisgICAg
ICAgICogVUlQcm9jZXNzL05vdGlmaWNhdGlvbnMvV2ViTm90aWZpY2F0aW9uUHJvdmlkZXIuY3Bw
OgorICAgICAgICAoV2ViS2l0OjpXZWJOb3RpZmljYXRpb25Qcm92aWRlcjo6Y2xlYXJOb3RpZmlj
YXRpb25zKToKKyAgICAgICAgKiBVSVByb2Nlc3MvU3RhdGlzdGljc1JlcXVlc3QuY3BwOgorICAg
ICAgICAoV2ViS2l0OjpTdGF0aXN0aWNzUmVxdWVzdDo6Y29tcGxldGVkUmVxdWVzdCk6CisgICAg
ICAgICogVUlQcm9jZXNzL1VzZXJDb250ZW50L1dlYlVzZXJDb250ZW50Q29udHJvbGxlclByb3h5
LmNwcDoKKyAgICAgICAgKFdlYktpdDo6V2ViVXNlckNvbnRlbnRDb250cm9sbGVyUHJveHk6OnJl
bW92ZUFsbFVzZXJTY3JpcHRzKToKKyAgICAgICAgKFdlYktpdDo6V2ViVXNlckNvbnRlbnRDb250
cm9sbGVyUHJveHk6OnJlbW92ZUFsbFVzZXJTdHlsZVNoZWV0cyk6CisgICAgICAgICogVUlQcm9j
ZXNzL1dlYkF1dGhlbnRpY2F0aW9uL0NvY29hL1dlYkF1dGhlbnRpY2F0aW9uUGFuZWxDbGllbnQu
bW06CisgICAgICAgIChXZWJLaXQ6OldlYkF1dGhlbnRpY2F0aW9uUGFuZWxDbGllbnQ6OnNlbGVj
dEFzc2VydGlvblJlc3BvbnNlIGNvbnN0KToKKyAgICAgICAgKiBVSVByb2Nlc3MvV2ViQXV0aGVu
dGljYXRpb24vZmlkby9DdGFwQXV0aGVudGljYXRvci5jcHA6CisgICAgICAgIChXZWJLaXQ6OkN0
YXBBdXRoZW50aWNhdG9yOjpjb250aW51ZUdldE5leHRBc3NlcnRpb25BZnRlclJlc3BvbnNlUmVj
ZWl2ZWQpOgorICAgICAgICAqIFVJUHJvY2Vzcy9XZWJCYWNrRm9yd2FyZExpc3QuY3BwOgorICAg
ICAgICAoV2ViS2l0OjpXZWJCYWNrRm9yd2FyZExpc3Q6OmFkZEl0ZW0pOgorICAgICAgICAoV2Vi
S2l0OjpXZWJCYWNrRm9yd2FyZExpc3Q6OmNsZWFyKToKKyAgICAgICAgKFdlYktpdDo6V2ViQmFj
a0ZvcndhcmRMaXN0OjpyZXN0b3JlRnJvbVN0YXRlKToKKyAgICAgICAgKiBVSVByb2Nlc3MvV2Vi
UGFnZVByb3h5LmNwcDoKKyAgICAgICAgKFdlYktpdDo6V2ViUGFnZVByb3h5OjpydW5KYXZhU2Ny
aXB0SW5GcmFtZUluU2NyaXB0V29ybGQpOgorICAgICAgICAoV2ViS2l0OjpXZWJQYWdlUHJveHk6
OnNwZWVjaFN5bnRoZXNpc1ZvaWNlTGlzdCk6CisgICAgICAgICogVUlQcm9jZXNzL1dlYnNpdGVE
YXRhL1dlYnNpdGVEYXRhU3RvcmUuY3BwOgorICAgICAgICAoV2ViS2l0OjpXZWJzaXRlRGF0YVN0
b3JlOjpmZXRjaERhdGFBbmRBcHBseSk6CisgICAgICAgIChXZWJLaXQ6OldlYnNpdGVEYXRhU3Rv
cmU6OnBhcmFtZXRlcnNGcm9tRWFjaFdlYnNpdGVEYXRhU3RvcmUpOgorICAgICAgICAqIFVJUHJv
Y2Vzcy9tYWMvV0tUZXh0RmluZGVyQ2xpZW50Lm1tOgorICAgICAgICAoLVtXS1RleHRGaW5kZXJD
bGllbnQgcmVwbGFjZU1hdGNoZXM6d2l0aFN0cmluZzppblNlbGVjdGlvbk9ubHk6cmVzdWx0Q29s
bGVjdG9yOl0pOgorICAgICAgICAqIFdlYlByb2Nlc3MvR1BVL21lZGlhL1JlbW90ZVJlbW90ZUNv
bW1hbmRMaXN0ZW5lci5jcHA6CisgICAgICAgIChXZWJLaXQ6OlJlbW90ZVJlbW90ZUNvbW1hbmRM
aXN0ZW5lcjo6dXBkYXRlU3VwcG9ydGVkQ29tbWFuZHMpOgorICAgICAgICAqIFdlYlByb2Nlc3Mv
SW5qZWN0ZWRCdW5kbGUvQVBJL2MvV0tCdW5kbGVQYWdlLmNwcDoKKyAgICAgICAgKGNvbnRleHRN
ZW51SXRlbXMpOgorICAgICAgICAoV0tCdW5kbGVQYWdlQ29weU9yaWdpbnNXaXRoQXBwbGljYXRp
b25DYWNoZSk6CisgICAgICAgICogV2ViUHJvY2Vzcy9JbmplY3RlZEJ1bmRsZS9JbmplY3RlZEJ1
bmRsZVBhZ2VDb250ZXh0TWVudUNsaWVudC5jcHA6CisgICAgICAgIChXZWJLaXQ6OkluamVjdGVk
QnVuZGxlUGFnZUNvbnRleHRNZW51Q2xpZW50OjpnZXRDdXN0b21NZW51RnJvbURlZmF1bHRJdGVt
cyk6CisgICAgICAgICogV2ViUHJvY2Vzcy9JbmplY3RlZEJ1bmRsZS9JbmplY3RlZEJ1bmRsZVBh
Z2VGb3JtQ2xpZW50LmNwcDoKKyAgICAgICAgKFdlYktpdDo6SW5qZWN0ZWRCdW5kbGVQYWdlRm9y
bUNsaWVudDo6ZGlkQXNzb2NpYXRlRm9ybUNvbnRyb2xzKToKKyAgICAgICAgKiBXZWJQcm9jZXNz
L05ldHdvcmsvV2ViU29ja2V0U3RyZWFtLmNwcDoKKyAgICAgICAgKFdlYktpdDo6V2ViU29ja2V0
U3RyZWFtOjpuZXR3b3JrUHJvY2Vzc0NyYXNoZWQpOgorICAgICAgICAqIFdlYlByb2Nlc3MvTmV0
d29yay93ZWJydGMvV2ViUlRDUmVzb2x2ZXIuY3BwOgorICAgICAgICAoV2ViS2l0OjpXZWJSVENS
ZXNvbHZlcjo6c2V0UmVzb2x2ZWRBZGRyZXNzKToKKyAgICAgICAgKiBXZWJQcm9jZXNzL1dlYkNv
cmVTdXBwb3J0L1dlYlJlc291cmNlTG9hZE9ic2VydmVyLmNwcDoKKyAgICAgICAgKFdlYktpdDo6
V2ViUmVzb3VyY2VMb2FkT2JzZXJ2ZXI6OnRha2VTdGF0aXN0aWNzKToKKyAgICAgICAgKiBXZWJQ
cm9jZXNzL1dlYlBhZ2UvRmluZENvbnRyb2xsZXIuY3BwOgorICAgICAgICAoV2ViS2l0OjpGaW5k
Q29udHJvbGxlcjo6cmVwbGFjZU1hdGNoZXMpOgorICAgICAgICAqIFdlYlByb2Nlc3MvV2ViUGFn
ZS9SZW1vdGVMYXllclRyZWUvUGxhdGZvcm1DQUFuaW1hdGlvblJlbW90ZS5tbToKKyAgICAgICAg
KFdlYktpdDo6dG9LZXlmcmFtZVZhbHVlVmVjdG9yKToKKyAgICAgICAgKFdlYktpdDo6UGxhdGZv
cm1DQUFuaW1hdGlvblJlbW90ZTo6c2V0VmFsdWVzKToKKyAgICAgICAgKFdlYktpdDo6UGxhdGZv
cm1DQUFuaW1hdGlvblJlbW90ZTo6c2V0VGltaW5nRnVuY3Rpb25zKToKKyAgICAgICAgKiBXZWJQ
cm9jZXNzL1dlYlBhZ2UvVmlld0dlc3R1cmVHZW9tZXRyeUNvbGxlY3Rvci5jcHA6CisgICAgICAg
IChXZWJLaXQ6OlZpZXdHZXN0dXJlR2VvbWV0cnlDb2xsZWN0b3I6OmNvbXB1dGVUZXh0TGVnaWJp
bGl0eVNjYWxlcyk6CisgICAgICAgICogV2ViUHJvY2Vzcy9XZWJQYWdlL1dlYlBhZ2UuY3BwOgor
ICAgICAgICAoV2ViS2l0OjpXZWJQYWdlOjp0cmFja2VkUmVwYWludFJlY3RzKToKKyAgICAgICAg
KFdlYktpdDo6ZHVtcEhpc3RvcnlJdGVtKToKKwogMjAyMi0wMi0xNiAgUGVyIEFybmUgVm9sbGFu
ICA8cHZvbGxhbkBhcHBsZS5jb20+CiAKICAgICAgICAgW21hY09TXSBBZGQgYWNjZXNzIHRvIG1h
Y2ggc2VydmljZSBpbiB0aGUgTmV0d29ya2luZyBwcm9jZXNzIGZvciBhbGwgdXNlcnMKZGlmZiAt
LWdpdCBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9iMy9haXIvQWlyQ29kZS5jcHAgYi9Tb3VyY2Uv
SmF2YVNjcmlwdENvcmUvYjMvYWlyL0FpckNvZGUuY3BwCmluZGV4IDg4NjU1YmM3MDFlNmU1ZmQ4
YmRkZjY2MzcxNzQwZGRjMjQ2ZjY1MDIuLmU2OTdiZDUzMDU4ZmRlMTE1MjNmZTViODM1OTQ4Mzky
MWQ1NzMyOTMgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9iMy9haXIvQWlyQ29k
ZS5jcHAKKysrIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL2IzL2Fpci9BaXJDb2RlLmNwcApAQCAt
MzMxLDEyICszMzEsOSBAQCB1bnNpZ25lZCBDb2RlOjpqc0hhc2goKSBjb25zdAogICAgIHJldHVy
biByZXN1bHQ7CiB9CiAKLXZvaWQgQ29kZTo6c2V0TnVtRW50cnlwb2ludHModW5zaWduZWQgbnVt
RW50cnlwb2ludHMpCit2b2lkIENvZGU6OnNldE51bUVudHJ5cG9pbnRzKHVuc2lnbmVkIG51bUVu
dHJ5UG9pbnRzKQogewotICAgIG1fcHJvbG9ndWVHZW5lcmF0b3JzLmNsZWFyKCk7Ci0gICAgbV9w
cm9sb2d1ZUdlbmVyYXRvcnMucmVzZXJ2ZUNhcGFjaXR5KG51bUVudHJ5cG9pbnRzKTsKLSAgICBm
b3IgKHVuc2lnbmVkIGkgPSAwOyBpIDwgbnVtRW50cnlwb2ludHM7ICsraSkKLSAgICAgICAgbV9w
cm9sb2d1ZUdlbmVyYXRvcnMudW5jaGVja2VkQXBwZW5kKG1fZGVmYXVsdFByb2xvZ3VlR2VuZXJh
dG9yLmNvcHlSZWYoKSk7CisgICAgbV9wcm9sb2d1ZUdlbmVyYXRvcnMgPSBWZWN0b3IgeyBudW1F
bnRyeVBvaW50cywgbV9kZWZhdWx0UHJvbG9ndWVHZW5lcmF0b3IuY29weVJlZigpIH07CiB9CiAK
IH0gfSB9IC8vIG5hbWVzcGFjZSBKU0M6OkIzOjpBaXIKZGlmZiAtLWdpdCBhL1NvdXJjZS9KYXZh
U2NyaXB0Q29yZS9ieXRlY29tcGlsZXIvTm9kZXNDb2RlZ2VuLmNwcCBiL1NvdXJjZS9KYXZhU2Ny
aXB0Q29yZS9ieXRlY29tcGlsZXIvTm9kZXNDb2RlZ2VuLmNwcAppbmRleCAzYzI0MjdiYjBjODM4
MTYwOWRlMzc3NmM2ZjBmMWQzN2FhMDRjODMwLi5mNmU0M2VjOGNiYmE4ZjI1NTkwYzZmODA4YTI0
NDc1ZGMyYjZlYWUxIDEwMDY0NAotLS0gYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvYnl0ZWNvbXBp
bGVyL05vZGVzQ29kZWdlbi5jcHAKKysrIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL2J5dGVjb21w
aWxlci9Ob2Rlc0NvZGVnZW4uY3BwCkBAIC01Mzc0LDcgKzUzNzQsNyBAQCBSZWdpc3RlcklEKiBB
cnJheVBhdHRlcm5Ob2RlOjplbWl0RGlyZWN0QmluZGluZyhCeXRlY29kZUdlbmVyYXRvciYgZ2Vu
ZXJhdG9yLCBSZQogICAgIGlmIChtX3RhcmdldFBhdHRlcm5zLnNpemUoKSAhPSBlbGVtZW50cy5z
aXplKCkpCiAgICAgICAgIHJldHVybiBudWxscHRyOwogICAgIFZlY3RvcjxSZWZQdHI8UmVnaXN0
ZXJJRD4+IHJlZ2lzdGVyczsKLSAgICByZWdpc3RlcnMucmVzZXJ2ZUNhcGFjaXR5KG1fdGFyZ2V0
UGF0dGVybnMuc2l6ZSgpKTsKKyAgICByZWdpc3RlcnMucmVzZXJ2ZUluaXRpYWxDYXBhY2l0eSht
X3RhcmdldFBhdHRlcm5zLnNpemUoKSk7CiAgICAgZm9yIChzaXplX3QgaSA9IDA7IGkgPCBtX3Rh
cmdldFBhdHRlcm5zLnNpemUoKTsgaSsrKSB7CiAgICAgICAgIHJlZ2lzdGVycy51bmNoZWNrZWRB
cHBlbmQoZ2VuZXJhdG9yLm5ld1RlbXBvcmFyeSgpKTsKICAgICAgICAgZ2VuZXJhdG9yLmVtaXRO
b2RlKHJlZ2lzdGVycy5sYXN0KCkuZ2V0KCksIGVsZW1lbnRzW2ldKTsKZGlmZiAtLWdpdCBhL1Nv
dXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHSW5QbGFjZUFic3RyYWN0U3RhdGUuY3BwIGIvU291
cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdJblBsYWNlQWJzdHJhY3RTdGF0ZS5jcHAKaW5kZXgg
OTg0MmJiNzg3MGNhY2MwZTZiNmYyNzMwODY3MDQxODNkOTMxOWYyNS4uYWNlMGIxYjY0NzllMWI2
YzRjOWUzMjhkYzYxNDAxZjhiMzYyNThkYiAxMDA2NDQKLS0tIGEvU291cmNlL0phdmFTY3JpcHRD
b3JlL2RmZy9ERkdJblBsYWNlQWJzdHJhY3RTdGF0ZS5jcHAKKysrIGIvU291cmNlL0phdmFTY3Jp
cHRDb3JlL2RmZy9ERkdJblBsYWNlQWJzdHJhY3RTdGF0ZS5jcHAKQEAgLTg5LDEwICs4OSw5IEBA
IHZvaWQgSW5QbGFjZUFic3RyYWN0U3RhdGU6OmJlZ2luQmFzaWNCbG9jayhCYXNpY0Jsb2NrKiBi
YXNpY0Jsb2NrKQogCiBzdGF0aWMgdm9pZCBzZXRMaXZlVmFsdWVzKFZlY3RvcjxOb2RlQWJzdHJh
Y3RWYWx1ZVBhaXI+JiB2YWx1ZXMsIGNvbnN0IFZlY3RvcjxOb2RlRmxvd1Byb2plY3Rpb24+JiBs
aXZlKQogewotICAgIHZhbHVlcy5zaHJpbmsoMCk7Ci0gICAgdmFsdWVzLnJlc2VydmVDYXBhY2l0
eShsaXZlLnNpemUoKSk7Ci0gICAgZm9yIChOb2RlRmxvd1Byb2plY3Rpb24gbm9kZSA6IGxpdmUp
Ci0gICAgICAgIHZhbHVlcy51bmNoZWNrZWRBcHBlbmQoTm9kZUFic3RyYWN0VmFsdWVQYWlyIHsg
bm9kZSwgQWJzdHJhY3RWYWx1ZSgpIH0pOworICAgIHZhbHVlcyA9IGxpdmUubWFwKFtdKGF1dG8g
bm9kZSkgeworICAgICAgICByZXR1cm4gTm9kZUFic3RyYWN0VmFsdWVQYWlyIHsgbm9kZSwgQWJz
dHJhY3RWYWx1ZSgpIH07CisgICAgfSk7CiB9CiAKIE9wZXJhbmRzPEFic3RyYWN0VmFsdWU+JiBJ
blBsYWNlQWJzdHJhY3RTdGF0ZTo6dmFyaWFibGVzRm9yRGVidWdnaW5nKCkKZGlmZiAtLWdpdCBh
L1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHTGl2ZW5lc3NBbmFseXNpc1BoYXNlLmNwcCBi
L1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHTGl2ZW5lc3NBbmFseXNpc1BoYXNlLmNwcApp
bmRleCAxMDAxMTgzM2IyNDcxZWU1YjFiNjBmMjIwMTZlZWYwZjRlNmRmNmE4Li42YzZlMmE0NTE5
MGNlNDEzNTliYTE1Mjc4YThjZTJkZTNhZjRmZTk1IDEwMDY0NAotLS0gYS9Tb3VyY2UvSmF2YVNj
cmlwdENvcmUvZGZnL0RGR0xpdmVuZXNzQW5hbHlzaXNQaGFzZS5jcHAKKysrIGIvU291cmNlL0ph
dmFTY3JpcHRDb3JlL2RmZy9ERkdMaXZlbmVzc0FuYWx5c2lzUGhhc2UuY3BwCkBAIC05MSwyMCAr
OTEsMTQgQEAgcHVibGljOgogICAgICAgICAgICAgICAgIGNvbnRpbnVlOwogCiAgICAgICAgICAg
ICB7Ci0gICAgICAgICAgICAgICAgY29uc3QgVmVjdG9yPHVuc2lnbmVkLCAwLCBVbnNhZmVWZWN0
b3JPdmVyZmxvdywgMT4mIGxpdmVBdEhlYWRJbmRpY2VzID0gbV9saXZlQXRIZWFkW2Jsb2NrSW5k
ZXhdOwotICAgICAgICAgICAgICAgIFZlY3RvcjxOb2RlRmxvd1Byb2plY3Rpb24+JiBsaXZlQXRI
ZWFkID0gYmxvY2stPnNzYS0+bGl2ZUF0SGVhZDsKLSAgICAgICAgICAgICAgICBsaXZlQXRIZWFk
LnNocmluaygwKTsKLSAgICAgICAgICAgICAgICBsaXZlQXRIZWFkLnJlc2VydmVDYXBhY2l0eShs
aXZlQXRIZWFkSW5kaWNlcy5zaXplKCkpOwotICAgICAgICAgICAgICAgIGZvciAodW5zaWduZWQg
aW5kZXggOiBsaXZlQXRIZWFkSW5kaWNlcykKLSAgICAgICAgICAgICAgICAgICAgbGl2ZUF0SGVh
ZC51bmNoZWNrZWRBcHBlbmQobV9pbmRleGluZy5ub2RlUHJvamVjdGlvbihpbmRleCkpOworICAg
ICAgICAgICAgICAgIGJsb2NrLT5zc2EtPmxpdmVBdEhlYWQgPSBtX2xpdmVBdEhlYWRbYmxvY2tJ
bmRleF0ubWFwKFt0aGlzXShhdXRvIGluZGV4KSB7CisgICAgICAgICAgICAgICAgICAgIHJldHVy
biBtX2luZGV4aW5nLm5vZGVQcm9qZWN0aW9uKGluZGV4KTsKKyAgICAgICAgICAgICAgICB9KTsK
ICAgICAgICAgICAgIH0KICAgICAgICAgICAgIHsKLSAgICAgICAgICAgICAgICBjb25zdCBMaXZl
U2V0JiBsaXZlQXRUYWlsSW5kaWNlcyA9IG1fbGl2ZUF0VGFpbFtibG9ja0luZGV4XTsKLSAgICAg
ICAgICAgICAgICBWZWN0b3I8Tm9kZUZsb3dQcm9qZWN0aW9uPiYgbGl2ZUF0VGFpbCA9IGJsb2Nr
LT5zc2EtPmxpdmVBdFRhaWw7Ci0gICAgICAgICAgICAgICAgbGl2ZUF0VGFpbC5zaHJpbmsoMCk7
Ci0gICAgICAgICAgICAgICAgbGl2ZUF0VGFpbC5yZXNlcnZlQ2FwYWNpdHkobGl2ZUF0VGFpbElu
ZGljZXMuc2l6ZSgpKTsKLSAgICAgICAgICAgICAgICBmb3IgKHVuc2lnbmVkIGluZGV4IDogbV9s
aXZlQXRUYWlsW2Jsb2NrSW5kZXhdKQotICAgICAgICAgICAgICAgICAgICBsaXZlQXRUYWlsLnVu
Y2hlY2tlZEFwcGVuZChtX2luZGV4aW5nLm5vZGVQcm9qZWN0aW9uKGluZGV4KSk7CisgICAgICAg
ICAgICAgICAgYmxvY2stPnNzYS0+bGl2ZUF0VGFpbCA9IFdURjo6bWFwKG1fbGl2ZUF0VGFpbFti
bG9ja0luZGV4XSwgW3RoaXNdKGF1dG8gaW5kZXgpIHsKKyAgICAgICAgICAgICAgICAgICAgcmV0
dXJuIG1faW5kZXhpbmcubm9kZVByb2plY3Rpb24oaW5kZXgpOworICAgICAgICAgICAgICAgIH0p
OwogICAgICAgICAgICAgfQogICAgICAgICB9CiAKZGlmZiAtLWdpdCBhL1NvdXJjZS9KYXZhU2Ny
aXB0Q29yZS9kZmcvREZHU2NvcmVCb2FyZC5oIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9E
RkdTY29yZUJvYXJkLmgKaW5kZXggYzI5NWQyMWJmMzRiZjVkOWMyOWJlMGU2ZDU2OTM1NjJkZWI1
MTYzMy4uODUxZDRmMGZkNmYyZmFkNWY3OWQ1YWMwMDNiMDNiM2UwYWQ1MDkwMSAxMDA2NDQKLS0t
IGEvU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdTY29yZUJvYXJkLmgKKysrIGIvU291cmNl
L0phdmFTY3JpcHRDb3JlL2RmZy9ERkdTY29yZUJvYXJkLmgKQEAgLTQ1LDcgKzQ1LDcgQEAgcHVi
bGljOgogICAgICAgICA6IG1faGlnaFdhdGVybWFyayhuZXh0TWFjaGluZUxvY2FsICsgMSkKICAg
ICB7CiAgICAgICAgIG1fdXNlZC5maWxsKG1heCgpLCBuZXh0TWFjaGluZUxvY2FsKTsKLSAgICAg
ICAgbV9mcmVlLnJlc2VydmVDYXBhY2l0eShuZXh0TWFjaGluZUxvY2FsKTsKKyAgICAgICAgbV9m
cmVlLnJlc2VydmVJbml0aWFsQ2FwYWNpdHkobmV4dE1hY2hpbmVMb2NhbCk7CiAgICAgfQogCiAg
ICAgflNjb3JlQm9hcmQoKQpkaWZmIC0tZ2l0IGEvU291cmNlL0phdmFTY3JpcHRDb3JlL2luc3Bl
Y3Rvci9hZ2VudHMvSW5zcGVjdG9yRGVidWdnZXJBZ2VudC5jcHAgYi9Tb3VyY2UvSmF2YVNjcmlw
dENvcmUvaW5zcGVjdG9yL2FnZW50cy9JbnNwZWN0b3JEZWJ1Z2dlckFnZW50LmNwcAppbmRleCBi
ZTkxMGViMjgyZWU1M2U3ZjM1ZjZiMDNhNjY5YzU5Mzk3YzFkOGRkLi4zNzAwMGFiMTlhZGFiNzIz
OWZiY2E3MjhiMjRlODM5NDVhZTcyNjhiIDEwMDY0NAotLS0gYS9Tb3VyY2UvSmF2YVNjcmlwdENv
cmUvaW5zcGVjdG9yL2FnZW50cy9JbnNwZWN0b3JEZWJ1Z2dlckFnZW50LmNwcAorKysgYi9Tb3Vy
Y2UvSmF2YVNjcmlwdENvcmUvaW5zcGVjdG9yL2FnZW50cy9JbnNwZWN0b3JEZWJ1Z2dlckFnZW50
LmNwcApAQCAtMTA0LDcgKzEwNCw3IEBAIHN0YXRpYyBUIHBhcnNlQnJlYWtwb2ludE9wdGlvbnMo
UHJvdG9jb2w6OkVycm9yU3RyaW5nJiBlcnJvclN0cmluZywgUmVmUHRyPEpTT046CiAKICAgICAg
ICAgYXV0byBhY3Rpb25zUGF5bG9hZCA9IG9wdGlvbnMtPmdldEFycmF5KFByb3RvY29sOjpEZWJ1
Z2dlcjo6QnJlYWtwb2ludE9wdGlvbnM6OmFjdGlvbnNLZXkpOwogICAgICAgICBpZiAoYXV0byBj
b3VudCA9IGFjdGlvbnNQYXlsb2FkID8gYWN0aW9uc1BheWxvYWQtPmxlbmd0aCgpIDogMCkgewot
ICAgICAgICAgICAgYWN0aW9ucy5yZXNlcnZlQ2FwYWNpdHkoY291bnQpOworICAgICAgICAgICAg
YWN0aW9ucy5yZXNlcnZlSW5pdGlhbENhcGFjaXR5KGNvdW50KTsKIAogICAgICAgICAgICAgZm9y
ICh1bnNpZ25lZCBpID0gMDsgaSA8IGNvdW50OyArK2kpIHsKICAgICAgICAgICAgICAgICBhdXRv
IGFjdGlvbk9iamVjdCA9IGFjdGlvbnNQYXlsb2FkLT5nZXQoaSktPmFzT2JqZWN0KCk7CkBAIC0x
MzMsNyArMTMzLDcgQEAgc3RhdGljIFQgcGFyc2VCcmVha3BvaW50T3B0aW9ucyhQcm90b2NvbDo6
RXJyb3JTdHJpbmcmIGVycm9yU3RyaW5nLCBSZWZQdHI8SlNPTjoKIAogICAgICAgICAgICAgICAg
IGFjdGlvbi5lbXVsYXRlVXNlckdlc3R1cmUgPSBhY3Rpb25PYmplY3QtPmdldEJvb2xlYW4oUHJv
dG9jb2w6OkRlYnVnZ2VyOjpCcmVha3BvaW50QWN0aW9uOjplbXVsYXRlVXNlckdlc3R1cmVLZXkp
LnZhbHVlX29yKGZhbHNlKTsKIAotICAgICAgICAgICAgICAgIGFjdGlvbnMuYXBwZW5kKFdURk1v
dmUoYWN0aW9uKSk7CisgICAgICAgICAgICAgICAgYWN0aW9ucy51bmNoZWNrZWRBcHBlbmQoV1RG
TW92ZShhY3Rpb24pKTsKICAgICAgICAgICAgIH0KICAgICAgICAgfQogCmRpZmYgLS1naXQgYS9T
b3VyY2UvSmF2YVNjcmlwdENvcmUvaW5zcGVjdG9yL3JlbW90ZS9zb2NrZXQvUmVtb3RlSW5zcGVj
dG9yTWVzc2FnZVBhcnNlci5jcHAgYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvaW5zcGVjdG9yL3Jl
bW90ZS9zb2NrZXQvUmVtb3RlSW5zcGVjdG9yTWVzc2FnZVBhcnNlci5jcHAKaW5kZXggZTFjMzBl
YTQxYjU4NWUxMzg4ODJlMzJjM2Q5YmVkZjg3YTAwZmU5YS4uYmU3MWViZmIzMzc4ZmIzODNkZjYw
ZTVhNmM4ZWM1M2E1N2M3MzgwYSAxMDA2NDQKLS0tIGEvU291cmNlL0phdmFTY3JpcHRDb3JlL2lu
c3BlY3Rvci9yZW1vdGUvc29ja2V0L1JlbW90ZUluc3BlY3Rvck1lc3NhZ2VQYXJzZXIuY3BwCisr
KyBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9pbnNwZWN0b3IvcmVtb3RlL3NvY2tldC9SZW1vdGVJ
bnNwZWN0b3JNZXNzYWdlUGFyc2VyLmNwcApAQCAtNjQsNyArNjQsNiBAQCB2b2lkIE1lc3NhZ2VQ
YXJzZXI6OnB1c2hSZWNlaXZlZERhdGEoY29uc3QgdWludDhfdCogZGF0YSwgc2l6ZV90IHNpemUp
CiAgICAgaWYgKCFkYXRhIHx8ICFzaXplIHx8ICFtX2xpc3RlbmVyKQogICAgICAgICByZXR1cm47
CiAKLSAgICBtX2J1ZmZlci5yZXNlcnZlQ2FwYWNpdHkobV9idWZmZXIuc2l6ZSgpICsgc2l6ZSk7
CiAgICAgbV9idWZmZXIuYXBwZW5kKGRhdGEsIHNpemUpOwogCiAgICAgaWYgKCFwYXJzZSgpKQpk
aWZmIC0tZ2l0IGEvU291cmNlL0phdmFTY3JpcHRDb3JlL3BhcnNlci9WYXJpYWJsZUVudmlyb25t
ZW50LmNwcCBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9wYXJzZXIvVmFyaWFibGVFbnZpcm9ubWVu
dC5jcHAKaW5kZXggMjhkYTE5OTc0M2UwNTZkMjRkOWUzYjVkYTZjZWVlNjlkYjA5ODRjNi4uMjY1
NGY0NjE0ZTc1Yjc1ZTJjZDkwNjUxNDA3NmRhZDBmODUwMTk2NiAxMDA2NDQKLS0tIGEvU291cmNl
L0phdmFTY3JpcHRDb3JlL3BhcnNlci9WYXJpYWJsZUVudmlyb25tZW50LmNwcAorKysgYi9Tb3Vy
Y2UvSmF2YVNjcmlwdENvcmUvcGFyc2VyL1ZhcmlhYmxlRW52aXJvbm1lbnQuY3BwCkBAIC0yMTgs
MTcgKzIxOCwxNCBAQCB2b2lkIENvbXBhY3RURFpFbnZpcm9ubWVudDo6c29ydENvbXBhY3QoQ29t
cGFjdCYgY29tcGFjdCkKIAogQ29tcGFjdFREWkVudmlyb25tZW50OjpDb21wYWN0VERaRW52aXJv
bm1lbnQoY29uc3QgVERaRW52aXJvbm1lbnQmIGVudikKIHsKLSAgICBDb21wYWN0IGNvbXBhY3RW
YXJpYWJsZXM7Ci0gICAgY29tcGFjdFZhcmlhYmxlcy5yZXNlcnZlQ2FwYWNpdHkoZW52LnNpemUo
KSk7Ci0KICAgICBtX2hhc2ggPSAwOyAvLyBOb3RlOiBYT1IgaXMgY29tbXV0YXRpdmUgc28gb3Jk
ZXIgZG9lc24ndCBtYXR0ZXIgaGVyZS4KLSAgICBmb3IgKGF1dG8mIGtleSA6IGVudikgewotICAg
ICAgICBjb21wYWN0VmFyaWFibGVzLmFwcGVuZChrZXkuZ2V0KCkpOworICAgIENvbXBhY3QgdmFy
aWFibGVzID0gV1RGOjptYXAoZW52LCBbdGhpc10oYXV0byYga2V5KSAtPiBQYWNrZWRSZWZQdHI8
VW5pcXVlZFN0cmluZ0ltcGw+IHsKICAgICAgICAgbV9oYXNoIF49IGtleS0+aGFzaCgpOwotICAg
IH0KKyAgICAgICAgcmV0dXJuIGtleS5nZXQoKTsKKyAgICB9KTsKIAotICAgIHNvcnRDb21wYWN0
KGNvbXBhY3RWYXJpYWJsZXMpOwotICAgIG1fdmFyaWFibGVzID0gV1RGTW92ZShjb21wYWN0VmFy
aWFibGVzKTsKKyAgICBzb3J0Q29tcGFjdCh2YXJpYWJsZXMpOworICAgIG1fdmFyaWFibGVzID0g
V1RGTW92ZSh2YXJpYWJsZXMpOwogfQogCiBib29sIENvbXBhY3RURFpFbnZpcm9ubWVudDo6b3Bl
cmF0b3I9PShjb25zdCBDb21wYWN0VERaRW52aXJvbm1lbnQmIG90aGVyKSBjb25zdApkaWZmIC0t
Z2l0IGEvU291cmNlL0phdmFTY3JpcHRDb3JlL3dhc20vV2FzbVdvcmtsaXN0LmNwcCBiL1NvdXJj
ZS9KYXZhU2NyaXB0Q29yZS93YXNtL1dhc21Xb3JrbGlzdC5jcHAKaW5kZXggNWJhZDBkOTBhNTYy
ZTI1ZGRlODE3YjU4MmMwNjA2NjU2YzkwNmViYS4uZmNmNzQyMzBiYmMyMWQzNTkzZGI0ZTcyMjEy
NTAxM2MyMmMyNGI0ZCAxMDA2NDQKLS0tIGEvU291cmNlL0phdmFTY3JpcHRDb3JlL3dhc20vV2Fz
bVdvcmtsaXN0LmNwcAorKysgYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvd2FzbS9XYXNtV29ya2xp
c3QuY3BwCkBAIC0yMTcsOSArMjE3LDkgQEAgV29ya2xpc3Q6OldvcmtsaXN0KCkKICAgICAsIG1f
cGxhbkVucXVldWVkKEF1dG9tYXRpY1RocmVhZENvbmRpdGlvbjo6Y3JlYXRlKCkpCiB7CiAgICAg
dW5zaWduZWQgbnVtYmVyT2ZDb21waWxhdGlvblRocmVhZHMgPSBPcHRpb25zOjp1c2VDb25jdXJy
ZW50SklUKCkgPyBrZXJuVENTTUF3YXJlTnVtYmVyT2ZQcm9jZXNzb3JDb3JlcygpIDogMTsKLSAg
ICBtX3RocmVhZHMucmVzZXJ2ZUNhcGFjaXR5KG51bWJlck9mQ29tcGlsYXRpb25UaHJlYWRzKTsK
KyAgICBtX3RocmVhZHMucmVzZXJ2ZUluaXRpYWxDYXBhY2l0eShudW1iZXJPZkNvbXBpbGF0aW9u
VGhyZWFkcyk7CiAgICAgTG9ja2VyIGxvY2tlciB7ICptX2xvY2sgfTsKLSAgICBmb3IgKHVuc2ln
bmVkIGkgPSAwOyBpIDwgbnVtYmVyT2ZDb21waWxhdGlvblRocmVhZHM7IGkrKykKKyAgICBmb3Ig
KHVuc2lnbmVkIGkgPSAwOyBpIDwgbnVtYmVyT2ZDb21waWxhdGlvblRocmVhZHM7ICsraSkKICAg
ICAgICAgbV90aHJlYWRzLnVuY2hlY2tlZEFwcGVuZChtYWtlVW5pcXVlPFdvcmtsaXN0OjpUaHJl
YWQ+KGxvY2tlciwgKnRoaXMpKTsKIH0KIApkaWZmIC0tZ2l0IGEvU291cmNlL1dURi93dGYvTGFu
Z3VhZ2UuY3BwIGIvU291cmNlL1dURi93dGYvTGFuZ3VhZ2UuY3BwCmluZGV4IGE4Mzk4ZTA1NDc1
ZTkyOTczYTY0MzRjNzAzZTFjY2M2MTA4ZjVmOWEuLjVlY2IzNmQwZTZiMWQzODc5N2EwZTgyNGY1
MTkyNTk1NTlhNmE3MDAgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XVEYvd3RmL0xhbmd1YWdlLmNwcAor
KysgYi9Tb3VyY2UvV1RGL3d0Zi9MYW5ndWFnZS5jcHAKQEAgLTI2LDYgKzI2LDcgQEAKICNpbmNs
dWRlICJjb25maWcuaCIKICNpbmNsdWRlIDx3dGYvTGFuZ3VhZ2UuaD4KIAorI2luY2x1ZGUgPHd0
Zi9Dcm9zc1RocmVhZENvcGllci5oPgogI2luY2x1ZGUgPHd0Zi9IYXNoTWFwLmg+CiAjaW5jbHVk
ZSA8d3RmL0xvY2suaD4KICNpbmNsdWRlIDx3dGYvTG9nZ2luZy5oPgpAQCAtMTIyLDE1ICsxMjMs
NiBAQCB2b2lkIG92ZXJyaWRlVXNlclByZWZlcnJlZExhbmd1YWdlcyhjb25zdCBWZWN0b3I8U3Ry
aW5nPiYgb3ZlcnJpZGUpCiAgICAgbGFuZ3VhZ2VEaWRDaGFuZ2UoKTsKIH0KIAotc3RhdGljIFZl
Y3RvcjxTdHJpbmc+IGlzb2xhdGVkQ29weShjb25zdCBWZWN0b3I8U3RyaW5nPiYgc3RyaW5ncykK
LXsKLSAgICBWZWN0b3I8U3RyaW5nPiBjb3B5OwotICAgIGNvcHkucmVzZXJ2ZUluaXRpYWxDYXBh
Y2l0eShzdHJpbmdzLnNpemUoKSk7Ci0gICAgZm9yIChhdXRvJiBsYW5ndWFnZSA6IHN0cmluZ3Mp
Ci0gICAgICAgIGNvcHkudW5jaGVja2VkQXBwZW5kKGxhbmd1YWdlLmlzb2xhdGVkQ29weSgpKTsK
LSAgICByZXR1cm4gY29weTsKLX0KLQogVmVjdG9yPFN0cmluZz4gdXNlclByZWZlcnJlZExhbmd1
YWdlcyhTaG91bGRNaW5pbWl6ZUxhbmd1YWdlcyBzaG91bGRNaW5pbWl6ZUxhbmd1YWdlcykKIHsK
ICAgICB7CkBAIC0xMzgsNyArMTMwLDcgQEAgVmVjdG9yPFN0cmluZz4gdXNlclByZWZlcnJlZExh
bmd1YWdlcyhTaG91bGRNaW5pbWl6ZUxhbmd1YWdlcyBzaG91bGRNaW5pbWl6ZUxhbmcKICAgICAg
ICAgVmVjdG9yPFN0cmluZz4mIG92ZXJyaWRlID0gcHJlZmVycmVkTGFuZ3VhZ2VzT3ZlcnJpZGUo
KTsKICAgICAgICAgaWYgKCFvdmVycmlkZS5pc0VtcHR5KCkpIHsKICAgICAgICAgICAgIExPR19X
SVRIX1NUUkVBTShMYW5ndWFnZSwgc3RyZWFtIDw8ICJMYW5ndWFnZXMgYXJlIG92ZXJyaWRkZW46
ICIgPDwgb3ZlcnJpZGUpOwotICAgICAgICAgICAgcmV0dXJuIGlzb2xhdGVkQ29weShvdmVycmlk
ZSk7CisgICAgICAgICAgICByZXR1cm4gY3Jvc3NUaHJlYWRDb3B5KG92ZXJyaWRlKTsKICAgICAg
ICAgfQogICAgIH0KIApAQCAtMTQ5LDcgKzE0MSw3IEBAIFZlY3RvcjxTdHJpbmc+IHVzZXJQcmVm
ZXJyZWRMYW5ndWFnZXMoU2hvdWxkTWluaW1pemVMYW5ndWFnZXMgc2hvdWxkTWluaW1pemVMYW5n
CiAgICAgICAgIGxhbmd1YWdlcyA9IHBsYXRmb3JtVXNlclByZWZlcnJlZExhbmd1YWdlcyhzaG91
bGRNaW5pbWl6ZUxhbmd1YWdlcyk7CiAgICAgfSBlbHNlCiAgICAgICAgIExPRyhMYW5ndWFnZSwg
InVzZXJQcmVmZXJyZWRMYW5ndWFnZXMoKSBjYWNoZSBoaXQiKTsKLSAgICByZXR1cm4gaXNvbGF0
ZWRDb3B5KGxhbmd1YWdlcyk7CisgICAgcmV0dXJuIGNyb3NzVGhyZWFkQ29weShsYW5ndWFnZXMp
OwogfQogCiAjaWYgIVBMQVRGT1JNKENPQ09BKQpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUv
TW9kdWxlcy9hc3luYy1jbGlwYm9hcmQvQ2xpcGJvYXJkLmNwcCBiL1NvdXJjZS9XZWJDb3JlL01v
ZHVsZXMvYXN5bmMtY2xpcGJvYXJkL0NsaXBib2FyZC5jcHAKaW5kZXggYzFiYzgwMDg3OTVjMmIz
ZWZjYTE3NTI3ODA5ZTYzZTgwZjQyODYwMy4uNDlmM2IzMDc1NzIxMTU3Nzc3ODU5YzBiYWIxNjAx
ZDBjZjhlOTVlOSAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvTW9kdWxlcy9hc3luYy1jbGlw
Ym9hcmQvQ2xpcGJvYXJkLmNwcAorKysgYi9Tb3VyY2UvV2ViQ29yZS9Nb2R1bGVzL2FzeW5jLWNs
aXBib2FyZC9DbGlwYm9hcmQuY3BwCkBAIC0xNzksMTAgKzE3OSw5IEBAIHZvaWQgQ2xpcGJvYXJk
OjpyZWFkKFJlZjxEZWZlcnJlZFByb21pc2U+JiYgcHJvbWlzZSkKICAgICAgICAgICAgIHJldHVy
bjsKICAgICAgICAgfQogCi0gICAgICAgIFZlY3RvcjxSZWY8Q2xpcGJvYXJkSXRlbT4+IGNsaXBi
b2FyZEl0ZW1zOwotICAgICAgICBjbGlwYm9hcmRJdGVtcy5yZXNlcnZlSW5pdGlhbENhcGFjaXR5
KGFsbEluZm8tPnNpemUoKSk7Ci0gICAgICAgIGZvciAoYXV0byYgaXRlbUluZm8gOiAqYWxsSW5m
bykKLSAgICAgICAgICAgIGNsaXBib2FyZEl0ZW1zLnVuY2hlY2tlZEFwcGVuZChDbGlwYm9hcmRJ
dGVtOjpjcmVhdGUoKnRoaXMsIGl0ZW1JbmZvKSk7CisgICAgICAgIGF1dG8gY2xpcGJvYXJkSXRl
bXMgPSBhbGxJbmZvLT5tYXAoW3RoaXNdKGF1dG8mIGl0ZW1JbmZvKSB7CisgICAgICAgICAgICBy
ZXR1cm4gQ2xpcGJvYXJkSXRlbTo6Y3JlYXRlKCp0aGlzLCBpdGVtSW5mbyk7CisgICAgICAgIH0p
OwogICAgICAgICBtX2FjdGl2ZVNlc3Npb24gPSB7eyBXVEZNb3ZlKHBhc3RlYm9hcmQpLCBXVEZN
b3ZlKGNsaXBib2FyZEl0ZW1zKSwgY2hhbmdlQ291bnRBdFN0YXJ0IH19OwogICAgIH0KIApAQCAt
MzY4LDcgKzM2Nyw3IEBAIHZvaWQgQ2xpcGJvYXJkOjpJdGVtV3JpdGVyOjpkaWRTZXRBbGxEYXRh
KCkKICAgICAgICAgICAgIHJlamVjdCgpOwogICAgICAgICAgICAgcmV0dXJuOwogICAgICAgICB9
Ci0gICAgICAgIGN1c3RvbURhdGEuYXBwZW5kKCpkYXRhKTsKKyAgICAgICAgY3VzdG9tRGF0YS51
bmNoZWNrZWRBcHBlbmQoKmRhdGEpOwogICAgIH0KIAogICAgIG1fcGFzdGVib2FyZC0+d3JpdGVD
dXN0b21EYXRhKFdURk1vdmUoY3VzdG9tRGF0YSkpOwpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNv
cmUvTW9kdWxlcy9lbmNyeXB0ZWRtZWRpYS9NZWRpYUtleVNlc3Npb24uY3BwIGIvU291cmNlL1dl
YkNvcmUvTW9kdWxlcy9lbmNyeXB0ZWRtZWRpYS9NZWRpYUtleVNlc3Npb24uY3BwCmluZGV4IDE0
Nzc2YzIwMTUxYmZlZmUzODA3OWEzMzczMGM4ODY2MjY4YmE0NmEuLjM4ZGZjYzFiOTc4NDYyMzIy
ZWM3ZDdlYmU0ODNkNjZkODc2MDJlMzAgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL01vZHVs
ZXMvZW5jcnlwdGVkbWVkaWEvTWVkaWFLZXlTZXNzaW9uLmNwcAorKysgYi9Tb3VyY2UvV2ViQ29y
ZS9Nb2R1bGVzL2VuY3J5cHRlZG1lZGlhL01lZGlhS2V5U2Vzc2lvbi5jcHAKQEAgLTcwMCwxMCAr
NzAwLDkgQEAgdm9pZCBNZWRpYUtleVNlc3Npb246OnVwZGF0ZUtleVN0YXR1c2VzKENETUluc3Rh
bmNlU2Vzc2lvbjo6S2V5U3RhdHVzVmVjdG9yJiYgaW4KICAgICAgICAgcmV0dXJuIE1lZGlhS2V5
U3RhdHVzOjpJbnRlcm5hbEVycm9yOwogICAgIH07CiAKLSAgICBtX3N0YXR1c2VzLmNsZWFyKCk7
Ci0gICAgbV9zdGF0dXNlcy5yZXNlcnZlQ2FwYWNpdHkoaW5wdXRTdGF0dXNlcy5zaXplKCkpOwot
ICAgIGZvciAoYXV0byYgc3RhdHVzIDogaW5wdXRTdGF0dXNlcykKLSAgICAgICAgbV9zdGF0dXNl
cy51bmNoZWNrZWRBcHBlbmQoeyBXVEZNb3ZlKHN0YXR1cy5maXJzdCksIHRvTWVkaWFLZXlTdGF0
dXMoc3RhdHVzLnNlY29uZCkgfSk7CisgICAgbV9zdGF0dXNlcyA9IFdURjo6bWFwKFdURk1vdmUo
aW5wdXRTdGF0dXNlcyksIFtdKGF1dG8mJiBzdGF0dXMpIHsKKyAgICAgICAgcmV0dXJuIHN0ZDo6
bWFrZV9wYWlyKFdURk1vdmUoc3RhdHVzLmZpcnN0KSwgdG9NZWRpYUtleVN0YXR1cyhzdGF0dXMu
c2Vjb25kKSk7CisgICAgfSk7CiAKICAgICAvLyA1LiBRdWV1ZSBhIHRhc2sgdG8gZmlyZSBhIHNp
bXBsZSBldmVudCBuYW1lZCBrZXlzdGF0dXNlc2NoYW5nZSBhdCB0aGUgc2Vzc2lvbi4KICAgICBx
dWV1ZVRhc2tUb0Rpc3BhdGNoRXZlbnQoKnRoaXMsIFRhc2tTb3VyY2U6Ok5ldHdvcmtpbmcsIEV2
ZW50OjpjcmVhdGUoZXZlbnROYW1lcygpLmtleXN0YXR1c2VzY2hhbmdlRXZlbnQsIEV2ZW50OjpD
YW5CdWJibGU6Ok5vLCBFdmVudDo6SXNDYW5jZWxhYmxlOjpObykpOwpkaWZmIC0tZ2l0IGEvU291
cmNlL1dlYkNvcmUvTW9kdWxlcy9lbnRyaWVzYXBpL0ZpbGVTeXN0ZW1FbnRyaWVzQ2FsbGJhY2su
Y3BwIGIvU291cmNlL1dlYkNvcmUvTW9kdWxlcy9lbnRyaWVzYXBpL0ZpbGVTeXN0ZW1FbnRyaWVz
Q2FsbGJhY2suY3BwCmluZGV4IDc1MWEyYWZkOWQwZTcyNzExN2ExMTgwZjhlYzFhZGI0MmY2ZTBl
NTIuLmY1MzIyZTg5N2M3NTYyMWZiOGRlZmQxNmQzN2YwMThjNDhiNjFlM2YgMTAwNjQ0Ci0tLSBh
L1NvdXJjZS9XZWJDb3JlL01vZHVsZXMvZW50cmllc2FwaS9GaWxlU3lzdGVtRW50cmllc0NhbGxi
YWNrLmNwcAorKysgYi9Tb3VyY2UvV2ViQ29yZS9Nb2R1bGVzL2VudHJpZXNhcGkvRmlsZVN5c3Rl
bUVudHJpZXNDYWxsYmFjay5jcHAKQEAgLTMxLDE4ICszMSw5IEBACiAKIG5hbWVzcGFjZSBXZWJD
b3JlIHsKIAotc3RhdGljIFZlY3RvcjxSZWY8RmlsZVN5c3RlbUVudHJ5Pj4gY29weVZlY3Rvcihj
b25zdCBWZWN0b3I8UmVmPEZpbGVTeXN0ZW1FbnRyeT4+JiBlbnRyaWVzKQotewotICAgIFZlY3Rv
cjxSZWY8RmlsZVN5c3RlbUVudHJ5Pj4gZW50cmllc0NvcHk7Ci0gICAgZW50cmllc0NvcHkucmVz
ZXJ2ZUluaXRpYWxDYXBhY2l0eShlbnRyaWVzLnNpemUoKSk7Ci0gICAgZm9yIChhdXRvJiBlbnRy
eSA6IGVudHJpZXMpCi0gICAgICAgIGVudHJpZXNDb3B5LnVuY2hlY2tlZEFwcGVuZChlbnRyeS5j
b3B5UmVmKCkpOwotICAgIHJldHVybiBlbnRyaWVzQ29weTsKLX0KLQogdm9pZCBGaWxlU3lzdGVt
RW50cmllc0NhbGxiYWNrOjpzY2hlZHVsZUNhbGxiYWNrKFNjcmlwdEV4ZWN1dGlvbkNvbnRleHQm
IGNvbnRleHQsIGNvbnN0IFZlY3RvcjxSZWY8RmlsZVN5c3RlbUVudHJ5Pj4mIGVudHJpZXMpCiB7
Ci0gICAgY29udGV4dC5wb3N0VGFzayhbcHJvdGVjdGVkVGhpcyA9IFJlZiB7ICp0aGlzIH0sIGVu
dHJpZXMgPSBjb3B5VmVjdG9yKGVudHJpZXMpXSAoU2NyaXB0RXhlY3V0aW9uQ29udGV4dCYpIHsK
KyAgICBjb250ZXh0LnBvc3RUYXNrKFtwcm90ZWN0ZWRUaGlzID0gUmVmIHsgKnRoaXMgfSwgZW50
cmllc10gKFNjcmlwdEV4ZWN1dGlvbkNvbnRleHQmKSB7CiAgICAgICAgIHByb3RlY3RlZFRoaXMt
PmhhbmRsZUV2ZW50KGVudHJpZXMpOwogICAgIH0pOwogfQpkaWZmIC0tZ2l0IGEvU291cmNlL1dl
YkNvcmUvTW9kdWxlcy9lbnRyaWVzYXBpL0hUTUxJbnB1dEVsZW1lbnRFbnRyaWVzQVBJLmNwcCBi
L1NvdXJjZS9XZWJDb3JlL01vZHVsZXMvZW50cmllc2FwaS9IVE1MSW5wdXRFbGVtZW50RW50cmll
c0FQSS5jcHAKaW5kZXggMDFhN2Y0ZmFiMDU1N2QzZjdhZTAyYzk0ZGM1ZGMwYTM2ZDFiM2E5Yi4u
ZmRlYTc4MzI3YTQzNDU5ZDBmYTI1NTU3ZGJkNDQ4MjZlMDM4MDY3NCAxMDA2NDQKLS0tIGEvU291
cmNlL1dlYkNvcmUvTW9kdWxlcy9lbnRyaWVzYXBpL0hUTUxJbnB1dEVsZW1lbnRFbnRyaWVzQVBJ
LmNwcAorKysgYi9Tb3VyY2UvV2ViQ29yZS9Nb2R1bGVzL2VudHJpZXNhcGkvSFRNTElucHV0RWxl
bWVudEVudHJpZXNBUEkuY3BwCkBAIC00NiwxMSArNDYsOSBAQCBWZWN0b3I8UmVmPEZpbGVTeXN0
ZW1FbnRyeT4+IEhUTUxJbnB1dEVsZW1lbnRFbnRyaWVzQVBJOjp3ZWJraXRFbnRyaWVzKFNjcmlw
dEV4ZQogICAgIGlmICghZmlsZUxpc3QpCiAgICAgICAgIHJldHVybiB7IH07CiAKLSAgICBWZWN0
b3I8UmVmPEZpbGVTeXN0ZW1FbnRyeT4+IGVudHJpZXM7Ci0gICAgZW50cmllcy5yZXNlcnZlSW5p
dGlhbENhcGFjaXR5KGZpbGVMaXN0LT5maWxlcygpLnNpemUoKSk7Ci0gICAgZm9yIChhdXRvJiBm
aWxlIDogZmlsZUxpc3QtPmZpbGVzKCkpCi0gICAgICAgIGVudHJpZXMudW5jaGVja2VkQXBwZW5k
KERPTUZpbGVTeXN0ZW06OmNyZWF0ZUVudHJ5Rm9yRmlsZShjb250ZXh0LCBmaWxlLmNvcHlSZWYo
KSkpOwotICAgIHJldHVybiBlbnRyaWVzOworICAgIHJldHVybiBmaWxlTGlzdC0+ZmlsZXMoKS5t
YXAoWyZdKGF1dG8mIGZpbGUpIHsKKyAgICAgICAgcmV0dXJuIERPTUZpbGVTeXN0ZW06OmNyZWF0
ZUVudHJ5Rm9yRmlsZShjb250ZXh0LCBmaWxlLmNvcHlSZWYoKSk7CisgICAgfSk7CiB9CiAKIH0K
ZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL01vZHVsZXMvZ2VvbG9jYXRpb24vR2VvbG9jYXRp
b25Db250cm9sbGVyLmNwcCBiL1NvdXJjZS9XZWJDb3JlL01vZHVsZXMvZ2VvbG9jYXRpb24vR2Vv
bG9jYXRpb25Db250cm9sbGVyLmNwcAppbmRleCAwN2RkNjVmM2MxYWVlNzllYjljNzMyODM2YTJk
NWFhZDAxNzMzM2NmLi43ZGQ0NjM4MjE3ZWM1MDUxOTBkNjIxOTgxNzc1NDEwZDMwNmM2YTRhIDEw
MDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9Nb2R1bGVzL2dlb2xvY2F0aW9uL0dlb2xvY2F0aW9u
Q29udHJvbGxlci5jcHAKKysrIGIvU291cmNlL1dlYkNvcmUvTW9kdWxlcy9nZW9sb2NhdGlvbi9H
ZW9sb2NhdGlvbkNvbnRyb2xsZXIuY3BwCkBAIC0xMTgsMjEgKzExOCwxMyBAQCB2b2lkIEdlb2xv
Y2F0aW9uQ29udHJvbGxlcjo6Y2FuY2VsUGVybWlzc2lvblJlcXVlc3QoR2VvbG9jYXRpb24mIGdl
b2xvY2F0aW9uKQogdm9pZCBHZW9sb2NhdGlvbkNvbnRyb2xsZXI6OnBvc2l0aW9uQ2hhbmdlZChj
b25zdCBzdGQ6Om9wdGlvbmFsPEdlb2xvY2F0aW9uUG9zaXRpb25EYXRhPiYgcG9zaXRpb24pCiB7
CiAgICAgbV9sYXN0UG9zaXRpb24gPSBwb3NpdGlvbjsKLSAgICBWZWN0b3I8UmVmPEdlb2xvY2F0
aW9uPj4gb2JzZXJ2ZXJzVmVjdG9yOwotICAgIG9ic2VydmVyc1ZlY3Rvci5yZXNlcnZlSW5pdGlh
bENhcGFjaXR5KG1fb2JzZXJ2ZXJzLnNpemUoKSk7Ci0gICAgZm9yIChhdXRvJiBvYnNlcnZlciA6
IG1fb2JzZXJ2ZXJzKQotICAgICAgICBvYnNlcnZlcnNWZWN0b3IudW5jaGVja2VkQXBwZW5kKG9i
c2VydmVyLmNvcHlSZWYoKSk7Ci0gICAgZm9yIChhdXRvJiBvYnNlcnZlciA6IG9ic2VydmVyc1Zl
Y3RvcikKKyAgICBmb3IgKGF1dG8mIG9ic2VydmVyIDogY29weVRvVmVjdG9yT2Y8UmVmPEdlb2xv
Y2F0aW9uPj4obV9vYnNlcnZlcnMpKQogICAgICAgICBvYnNlcnZlci0+cG9zaXRpb25DaGFuZ2Vk
KCk7CiB9CiAKIHZvaWQgR2VvbG9jYXRpb25Db250cm9sbGVyOjplcnJvck9jY3VycmVkKEdlb2xv
Y2F0aW9uRXJyb3ImIGVycm9yKQogewotICAgIFZlY3RvcjxSZWY8R2VvbG9jYXRpb24+PiBvYnNl
cnZlcnNWZWN0b3I7Ci0gICAgb2JzZXJ2ZXJzVmVjdG9yLnJlc2VydmVJbml0aWFsQ2FwYWNpdHko
bV9vYnNlcnZlcnMuc2l6ZSgpKTsKLSAgICBmb3IgKGF1dG8mIG9ic2VydmVyIDogbV9vYnNlcnZl
cnMpCi0gICAgICAgIG9ic2VydmVyc1ZlY3Rvci51bmNoZWNrZWRBcHBlbmQob2JzZXJ2ZXIuY29w
eVJlZigpKTsKLSAgICBmb3IgKGF1dG8mIG9ic2VydmVyIDogb2JzZXJ2ZXJzVmVjdG9yKQorICAg
IGZvciAoYXV0byYgb2JzZXJ2ZXIgOiBjb3B5VG9WZWN0b3JPZjxSZWY8R2VvbG9jYXRpb24+Piht
X29ic2VydmVycykpCiAgICAgICAgIG9ic2VydmVyLT5zZXRFcnJvcihlcnJvcik7CiB9CiAKZGlm
ZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL01vZHVsZXMvaW5kZXhlZGRiL0lEQkRhdGFiYXNlLmNw
cCBiL1NvdXJjZS9XZWJDb3JlL01vZHVsZXMvaW5kZXhlZGRiL0lEQkRhdGFiYXNlLmNwcAppbmRl
eCAxNjE4OTY0YTU4YzVjODNmZWNiZmVmZDFjMjk0ZjVhY2ZkODc4MTJkLi43YWE2MzJiN2VjMDQ3
YmU0NjA4YjUxYTA5NGVhMWE0ZTU3YTI2MjliIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9N
b2R1bGVzL2luZGV4ZWRkYi9JREJEYXRhYmFzZS5jcHAKKysrIGIvU291cmNlL1dlYkNvcmUvTW9k
dWxlcy9pbmRleGVkZGIvSURCRGF0YWJhc2UuY3BwCkBAIC0zMTcsMTUgKzMxNyw4IEBAIHZvaWQg
SURCRGF0YWJhc2U6OnN0b3AoKQogCiAgICAgcmVtb3ZlQWxsRXZlbnRMaXN0ZW5lcnMoKTsKIAot
ICAgIFZlY3RvcjxJREJSZXNvdXJjZUlkZW50aWZpZXI+IHRyYW5zYWN0aW9uSWRlbnRpZmllcnM7
Ci0gICAgdHJhbnNhY3Rpb25JZGVudGlmaWVycy5yZXNlcnZlSW5pdGlhbENhcGFjaXR5KG1fYWN0
aXZlVHJhbnNhY3Rpb25zLnNpemUoKSk7Ci0KLSAgICBmb3IgKGF1dG8mIGlkIDogbV9hY3RpdmVU
cmFuc2FjdGlvbnMua2V5cygpKQotICAgICAgICB0cmFuc2FjdGlvbklkZW50aWZpZXJzLnVuY2hl
Y2tlZEFwcGVuZChpZCk7Ci0KLSAgICBmb3IgKGF1dG8mIGlkIDogdHJhbnNhY3Rpb25JZGVudGlm
aWVycykgewotICAgICAgICBJREJUcmFuc2FjdGlvbiogdHJhbnNhY3Rpb24gPSBtX2FjdGl2ZVRy
YW5zYWN0aW9ucy5nZXQoaWQpOwotICAgICAgICBpZiAodHJhbnNhY3Rpb24pCisgICAgZm9yIChh
dXRvJiBpZCA6IGNvcHlUb1ZlY3RvcihtX2FjdGl2ZVRyYW5zYWN0aW9ucy5rZXlzKCkpKSB7Cisg
ICAgICAgIGlmIChhdXRvKiB0cmFuc2FjdGlvbiA9IG1fYWN0aXZlVHJhbnNhY3Rpb25zLmdldChp
ZCkpCiAgICAgICAgICAgICB0cmFuc2FjdGlvbi0+c3RvcCgpOwogICAgIH0KIApkaWZmIC0tZ2l0
IGEvU291cmNlL1dlYkNvcmUvTW9kdWxlcy9pbmRleGVkZGIvSURCR2V0QWxsUmVzdWx0LmNwcCBi
L1NvdXJjZS9XZWJDb3JlL01vZHVsZXMvaW5kZXhlZGRiL0lEQkdldEFsbFJlc3VsdC5jcHAKaW5k
ZXggZWVhZmY3MTVhNWE0ODM5MjMwZjAxMjE0ZTMzZWQxYTgzYjFkN2FiZS4uNzMzZTllNjFhZmIx
ZWY5NmI2NjllZGI3MzE1MjJjNWJhNGUxMWJmZSAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUv
TW9kdWxlcy9pbmRleGVkZGIvSURCR2V0QWxsUmVzdWx0LmNwcAorKysgYi9Tb3VyY2UvV2ViQ29y
ZS9Nb2R1bGVzL2luZGV4ZWRkYi9JREJHZXRBbGxSZXN1bHQuY3BwCkBAIC00OSw3ICs0OSw3IEBA
IHZvaWQgSURCR2V0QWxsUmVzdWx0Ojppc29sYXRlZENvcHkoY29uc3QgSURCR2V0QWxsUmVzdWx0
JiBzb3VyY2UsIElEQkdldEFsbFJlc3VsCiAgICAgZGVzdGluYXRpb24ubV90eXBlID0gc291cmNl
Lm1fdHlwZTsKICAgICBkZXN0aW5hdGlvbi5tX2tleXMgPSBjcm9zc1RocmVhZENvcHkoc291cmNl
Lm1fa2V5cyk7CiAgICAgZGVzdGluYXRpb24ubV92YWx1ZXMgPSBjcm9zc1RocmVhZENvcHkoc291
cmNlLm1fdmFsdWVzKTsKLSAgICBkZXN0aW5hdGlvbi5tX2tleVBhdGggPSBXZWJDb3JlOjppc29s
YXRlZENvcHkoc291cmNlLm1fa2V5UGF0aCk7CisgICAgZGVzdGluYXRpb24ubV9rZXlQYXRoID0g
Y3Jvc3NUaHJlYWRDb3B5KHNvdXJjZS5tX2tleVBhdGgpOwogfQogCiB2b2lkIElEQkdldEFsbFJl
c3VsdDo6YWRkS2V5KElEQktleURhdGEmJiBrZXkpCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29y
ZS9Nb2R1bGVzL2luZGV4ZWRkYi9JREJHZXRSZXN1bHQuY3BwIGIvU291cmNlL1dlYkNvcmUvTW9k
dWxlcy9pbmRleGVkZGIvSURCR2V0UmVzdWx0LmNwcAppbmRleCA3NjJmOTQxYjgzYjk2ZWZjZTQ2
NDBmMzMxZDU1NzdhMTBkZDcyNmFkLi41NDc5ZDYxZjFmMDNhOWYyZjJmZTM5M2NmNzJkYzI5NTIy
ZDU0ZjUyIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9Nb2R1bGVzL2luZGV4ZWRkYi9JREJH
ZXRSZXN1bHQuY3BwCisrKyBiL1NvdXJjZS9XZWJDb3JlL01vZHVsZXMvaW5kZXhlZGRiL0lEQkdl
dFJlc3VsdC5jcHAKQEAgLTI2LDYgKzI2LDcgQEAKICNpbmNsdWRlICJjb25maWcuaCIKICNpbmNs
dWRlICJJREJHZXRSZXN1bHQuaCIKIAorI2luY2x1ZGUgPHd0Zi9Dcm9zc1RocmVhZENvcGllci5o
PgogI2luY2x1ZGUgPHd0Zi9Jc29NYWxsb2NJbmxpbmVzLmg+CiAKIG5hbWVzcGFjZSBXZWJDb3Jl
IHsKQEAgLTQ3LDcgKzQ4LDcgQEAgdm9pZCBJREJHZXRSZXN1bHQ6Omlzb2xhdGVkQ29weShjb25z
dCBJREJHZXRSZXN1bHQmIHNvdXJjZSwgSURCR2V0UmVzdWx0JiBkZXN0aW4KICAgICBkZXN0aW5h
dGlvbi5tX3ZhbHVlID0gc291cmNlLm1fdmFsdWUuaXNvbGF0ZWRDb3B5KCk7CiAgICAgZGVzdGlu
YXRpb24ubV9rZXlEYXRhID0gc291cmNlLm1fa2V5RGF0YS5pc29sYXRlZENvcHkoKTsKICAgICBk
ZXN0aW5hdGlvbi5tX3ByaW1hcnlLZXlEYXRhID0gc291cmNlLm1fcHJpbWFyeUtleURhdGEuaXNv
bGF0ZWRDb3B5KCk7Ci0gICAgZGVzdGluYXRpb24ubV9rZXlQYXRoID0gV2ViQ29yZTo6aXNvbGF0
ZWRDb3B5KHNvdXJjZS5tX2tleVBhdGgpOworICAgIGRlc3RpbmF0aW9uLm1fa2V5UGF0aCA9IGNy
b3NzVGhyZWFkQ29weShzb3VyY2UubV9rZXlQYXRoKTsKICAgICBkZXN0aW5hdGlvbi5tX2lzRGVm
aW5lZCA9IHNvdXJjZS5tX2lzRGVmaW5lZDsKICAgICBkZXN0aW5hdGlvbi5tX3ByZWZldGNoZWRS
ZWNvcmRzID0gc291cmNlLm1fcHJlZmV0Y2hlZFJlY29yZHMuaXNvbGF0ZWRDb3B5KCk7CiB9CmRp
ZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9Nb2R1bGVzL2luZGV4ZWRkYi9JREJLZXlQYXRoLmNw
cCBiL1NvdXJjZS9XZWJDb3JlL01vZHVsZXMvaW5kZXhlZGRiL0lEQktleVBhdGguY3BwCmluZGV4
IGZkNmQ1YTM5OWIzZmNhNjYyNGZmMzQ5NGRiYWU4NzdmNThiNDE0MWQuLmM4MjkxMTZlNjQ0NzU2
Y2I3NjYxZDZjZThlZjY3ZjY1MjliYTkzMmMgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL01v
ZHVsZXMvaW5kZXhlZGRiL0lEQktleVBhdGguY3BwCisrKyBiL1NvdXJjZS9XZWJDb3JlL01vZHVs
ZXMvaW5kZXhlZGRiL0lEQktleVBhdGguY3BwCkBAIC0yMDYsMjEgKzIwNiw2IEBAIGJvb2wgaXNJ
REJLZXlQYXRoVmFsaWQoY29uc3QgSURCS2V5UGF0aCYga2V5UGF0aCkKICAgICByZXR1cm4gc3Rk
Ojp2aXNpdCh2aXNpdG9yLCBrZXlQYXRoKTsKIH0KIAotSURCS2V5UGF0aCBpc29sYXRlZENvcHko
Y29uc3QgSURCS2V5UGF0aCYga2V5UGF0aCkKLXsKLSAgICBhdXRvIHZpc2l0b3IgPSBXVEY6Om1h
a2VWaXNpdG9yKFtdKGNvbnN0IFN0cmluZyYgc3RyaW5nKSAtPiBJREJLZXlQYXRoIHsKLSAgICAg
ICAgcmV0dXJuIHN0cmluZy5pc29sYXRlZENvcHkoKTsKLSAgICB9LCBbXShjb25zdCBWZWN0b3I8
U3RyaW5nPiYgdmVjdG9yKSAtPiBJREJLZXlQYXRoIHsKLSAgICAgICAgVmVjdG9yPFN0cmluZz4g
dmVjdG9yQ29weTsKLSAgICAgICAgdmVjdG9yQ29weS5yZXNlcnZlSW5pdGlhbENhcGFjaXR5KHZl
Y3Rvci5zaXplKCkpOwotICAgICAgICBmb3IgKGF1dG8mIHN0cmluZyA6IHZlY3RvcikKLSAgICAg
ICAgICAgIHZlY3RvckNvcHkudW5jaGVja2VkQXBwZW5kKHN0cmluZy5pc29sYXRlZENvcHkoKSk7
Ci0gICAgICAgIHJldHVybiB2ZWN0b3JDb3B5OwotICAgIH0pOwotCi0gICAgcmV0dXJuIHN0ZDo6
dmlzaXQodmlzaXRvciwga2V5UGF0aCk7Ci19Ci0KICNpZiAhTE9HX0RJU0FCTEVECiBTdHJpbmcg
bG9nZ2luZ1N0cmluZyhjb25zdCBJREJLZXlQYXRoJiBwYXRoKQogewpkaWZmIC0tZ2l0IGEvU291
cmNlL1dlYkNvcmUvTW9kdWxlcy9pbmRleGVkZGIvSURCS2V5UGF0aC5oIGIvU291cmNlL1dlYkNv
cmUvTW9kdWxlcy9pbmRleGVkZGIvSURCS2V5UGF0aC5oCmluZGV4IDIwMzZmZjc1NGU1ZWE5ZjMy
ZmIxZjJlZDU4ZmM4OTFjZTg2MzZiMDYuLjRiMzkyNjVkYWM3N2E2MzA5ZDkyNWM5MDI0YTJlYWIy
NDRkNzJiZWYgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL01vZHVsZXMvaW5kZXhlZGRiL0lE
QktleVBhdGguaAorKysgYi9Tb3VyY2UvV2ViQ29yZS9Nb2R1bGVzL2luZGV4ZWRkYi9JREJLZXlQ
YXRoLmgKQEAgLTQzLDEzICs0Myw2IEBAIGVudW0gY2xhc3MgSURCS2V5UGF0aFBhcnNlRXJyb3Ig
ewogfTsKIAogdm9pZCBJREJQYXJzZUtleVBhdGgoY29uc3QgU3RyaW5nJiwgVmVjdG9yPFN0cmlu
Zz4mLCBJREJLZXlQYXRoUGFyc2VFcnJvciYpOwotSURCS2V5UGF0aCBpc29sYXRlZENvcHkoY29u
c3QgSURCS2V5UGF0aCYpOwotaW5saW5lIHN0ZDo6b3B0aW9uYWw8SURCS2V5UGF0aD4gaXNvbGF0
ZWRDb3B5KGNvbnN0IHN0ZDo6b3B0aW9uYWw8SURCS2V5UGF0aD4mIHZhcmlhbnQpCi17Ci0gICAg
aWYgKCF2YXJpYW50KQotICAgICAgICByZXR1cm4geyB9OwotICAgIHJldHVybiBpc29sYXRlZENv
cHkodmFyaWFudC52YWx1ZSgpKTsKLX0KIAogI2lmICFMT0dfRElTQUJMRUQKIFN0cmluZyBsb2dn
aW5nU3RyaW5nKGNvbnN0IElEQktleVBhdGgmKTsKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3Jl
L01vZHVsZXMvaW5kZXhlZGRiL0lEQlRyYW5zYWN0aW9uLmNwcCBiL1NvdXJjZS9XZWJDb3JlL01v
ZHVsZXMvaW5kZXhlZGRiL0lEQlRyYW5zYWN0aW9uLmNwcAppbmRleCA1YTAzNjBjNGI4ZWI2Y2Q0
ZmMxZmQ1MWQ5NzE0Y2UxZDJjNzQ1MDM0Li42YzExMjFiNzMxMGY3MzdmN2I5NWJlY2VlODQ1NGU2
YWM1MGRmMmI2IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9Nb2R1bGVzL2luZGV4ZWRkYi9J
REJUcmFuc2FjdGlvbi5jcHAKKysrIGIvU291cmNlL1dlYkNvcmUvTW9kdWxlcy9pbmRleGVkZGIv
SURCVHJhbnNhY3Rpb24uY3BwCkBAIC0yNjksMTAgKzI2OSw4IEBAIHZvaWQgSURCVHJhbnNhY3Rp
b246OmFib3J0SW5Qcm9ncmVzc09wZXJhdGlvbnMoY29uc3QgSURCRXJyb3ImIGVycm9yKQogewog
ICAgIExPRyhJbmRleGVkREIsICJJREJUcmFuc2FjdGlvbjo6YWJvcnRJblByb2dyZXNzT3BlcmF0
aW9ucyIpOwogCi0gICAgVmVjdG9yPFJlZlB0cjxJREJDbGllbnQ6OlRyYW5zYWN0aW9uT3BlcmF0
aW9uPj4gaW5Qcm9ncmVzc0Fib3J0VmVjdG9yOwotICAgIGluUHJvZ3Jlc3NBYm9ydFZlY3Rvci5y
ZXNlcnZlSW5pdGlhbENhcGFjaXR5KG1fdHJhbnNhY3Rpb25PcGVyYXRpb25zSW5Qcm9ncmVzc1F1
ZXVlLnNpemUoKSk7Ci0gICAgd2hpbGUgKCFtX3RyYW5zYWN0aW9uT3BlcmF0aW9uc0luUHJvZ3Jl
c3NRdWV1ZS5pc0VtcHR5KCkpCi0gICAgICAgIGluUHJvZ3Jlc3NBYm9ydFZlY3Rvci51bmNoZWNr
ZWRBcHBlbmQobV90cmFuc2FjdGlvbk9wZXJhdGlvbnNJblByb2dyZXNzUXVldWUudGFrZUZpcnN0
KCkpOworICAgIGF1dG8gaW5Qcm9ncmVzc0Fib3J0VmVjdG9yID0gY29weVRvVmVjdG9yT2Y8UmVm
UHRyPElEQkNsaWVudDo6VHJhbnNhY3Rpb25PcGVyYXRpb24+PihtX3RyYW5zYWN0aW9uT3BlcmF0
aW9uc0luUHJvZ3Jlc3NRdWV1ZSk7CisgICAgbV90cmFuc2FjdGlvbk9wZXJhdGlvbnNJblByb2dy
ZXNzUXVldWUuY2xlYXIoKTsKIAogICAgIGZvciAoYXV0byYgb3BlcmF0aW9uIDogaW5Qcm9ncmVz
c0Fib3J0VmVjdG9yKSB7CiAgICAgICAgIG1fdHJhbnNhY3Rpb25PcGVyYXRpb25zSW5Qcm9ncmVz
c1F1ZXVlLmFwcGVuZChvcGVyYXRpb24uZ2V0KCkpOwpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNv
cmUvTW9kdWxlcy9pbmRleGVkZGIvY2xpZW50L0lEQkNvbm5lY3Rpb25Qcm94eS5jcHAgYi9Tb3Vy
Y2UvV2ViQ29yZS9Nb2R1bGVzL2luZGV4ZWRkYi9jbGllbnQvSURCQ29ubmVjdGlvblByb3h5LmNw
cAppbmRleCA2Njc4MmVjZGUzZTQ3MjFlY2I0YjM0YzBkZDIwMzdjOTE1ZTI4ZGZiLi4xY2U5MDc3
YzBlMWRmNmNiM2IxZmU5NTFjMjk2ZTgxY2E4ODE1ZGQ5IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2Vi
Q29yZS9Nb2R1bGVzL2luZGV4ZWRkYi9jbGllbnQvSURCQ29ubmVjdGlvblByb3h5LmNwcAorKysg
Yi9Tb3VyY2UvV2ViQ29yZS9Nb2R1bGVzL2luZGV4ZWRkYi9jbGllbnQvSURCQ29ubmVjdGlvblBy
b3h5LmNwcApAQCAtNTc1LDE3ICs1NzUsOSBAQCB2b2lkIHJlbW92ZUl0ZW1zTWF0Y2hpbmdDdXJy
ZW50VGhyZWFkKEhhc2hNYXA8S2V5VHlwZSwgVmFsdWVUeXBlPiYgbWFwKQogewogICAgIC8vIEZJ
WE1FOiBSZXZpc2l0IHdoZW4gaW50cm9kdWNpbmcgV2ViVGhyZWFkIGF3YXJlIHRocmVhZCBjb21w
YXJpc29uLgogICAgIC8vIGh0dHBzOi8vYnVncy53ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9pZD0y
MDQzNDUKLSAgICBhdXRvJiBjdXJyZW50VGhyZWFkID0gVGhyZWFkOjpjdXJyZW50KCk7Ci0KLSAg
ICBWZWN0b3I8S2V5VHlwZT4ga2V5czsKLSAgICBrZXlzLnJlc2VydmVJbml0aWFsQ2FwYWNpdHko
bWFwLnNpemUoKSk7Ci0gICAgZm9yIChhdXRvJiBpdGVyYXRvciA6IG1hcCkgewotICAgICAgICBp
ZiAoJml0ZXJhdG9yLnZhbHVlLT5vcmlnaW5UaHJlYWQoKSA9PSAmY3VycmVudFRocmVhZCkKLSAg
ICAgICAgICAgIGtleXMudW5jaGVja2VkQXBwZW5kKGl0ZXJhdG9yLmtleSk7Ci0gICAgfQotCi0g
ICAgZm9yIChhdXRvJiBrZXkgOiBrZXlzKQotICAgICAgICBtYXAucmVtb3ZlKGtleSk7CisgICAg
bWFwLnJlbW92ZUlmKFtjdXJyZW50VGhyZWFkID0gJlRocmVhZDo6Y3VycmVudCgpXShhdXRvJiBl
bnRyeSkgeworICAgICAgICByZXR1cm4gJmVudHJ5LnZhbHVlLT5vcmlnaW5UaHJlYWQoKSA9PSBj
dXJyZW50VGhyZWFkOworICAgIH0pOwogfQogCiB0ZW1wbGF0ZTx0eXBlbmFtZSBLZXlUeXBlLCB0
eXBlbmFtZSBWYWx1ZVR5cGU+CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9Nb2R1bGVzL2lu
ZGV4ZWRkYi9zZXJ2ZXIvTWVtb3J5T2JqZWN0U3RvcmUuY3BwIGIvU291cmNlL1dlYkNvcmUvTW9k
dWxlcy9pbmRleGVkZGIvc2VydmVyL01lbW9yeU9iamVjdFN0b3JlLmNwcAppbmRleCBlMDFlZTAy
YjcxNTIzOTljYzcyNmZiMThiYzM0OTE0NjA0ZGU3M2VjLi4yYjQ3NTg4NzVlYWU0NTBmMGU0ZWM2
Nzg3MTVkYTEwOGY4MDlmNGZmIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9Nb2R1bGVzL2lu
ZGV4ZWRkYi9zZXJ2ZXIvTWVtb3J5T2JqZWN0U3RvcmUuY3BwCisrKyBiL1NvdXJjZS9XZWJDb3Jl
L01vZHVsZXMvaW5kZXhlZGRiL3NlcnZlci9NZW1vcnlPYmplY3RTdG9yZS5jcHAKQEAgLTE1NSwx
MiArMTU1LDkgQEAgSURCRXJyb3IgTWVtb3J5T2JqZWN0U3RvcmU6OmRlbGV0ZUluZGV4KE1lbW9y
eUJhY2tpbmdTdG9yZVRyYW5zYWN0aW9uJiB0cmFuc2FjdGkKIAogdm9pZCBNZW1vcnlPYmplY3RT
dG9yZTo6ZGVsZXRlQWxsSW5kZXhlcyhNZW1vcnlCYWNraW5nU3RvcmVUcmFuc2FjdGlvbiYgdHJh
bnNhY3Rpb24pCiB7Ci0gICAgVmVjdG9yPHVpbnQ2NF90PiBpbmRleElkZW50aWZpZXJzOwotICAg
IGluZGV4SWRlbnRpZmllcnMucmVzZXJ2ZUluaXRpYWxDYXBhY2l0eShtX2luZGV4ZXNCeU5hbWUu
c2l6ZSgpKTsKLQotICAgIGZvciAoYXV0byYgaW5kZXggOiBtX2luZGV4ZXNCeU5hbWUudmFsdWVz
KCkpCi0gICAgICAgIGluZGV4SWRlbnRpZmllcnMudW5jaGVja2VkQXBwZW5kKGluZGV4LT5pbmZv
KCkuaWRlbnRpZmllcigpKTsKLQorICAgIGF1dG8gaW5kZXhJZGVudGlmaWVycyA9IFdURjo6bWFw
KG1faW5kZXhlc0J5TmFtZSwgW10oYXV0byYgZW50cnkpIHsKKyAgICAgICAgcmV0dXJuIGVudHJ5
LnZhbHVlLT5pbmZvKCkuaWRlbnRpZmllcigpOworICAgIH0pOwogICAgIGZvciAoYXV0byBpZGVu
dGlmaWVyIDogaW5kZXhJZGVudGlmaWVycykKICAgICAgICAgZGVsZXRlSW5kZXgodHJhbnNhY3Rp
b24sIGlkZW50aWZpZXIpOwogfQpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvTW9kdWxlcy9p
bmRleGVkZGIvc2VydmVyL1NRTGl0ZUlEQkN1cnNvci5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9Nb2R1
bGVzL2luZGV4ZWRkYi9zZXJ2ZXIvU1FMaXRlSURCQ3Vyc29yLmNwcAppbmRleCA0ODYxMDM0ZDNh
MTJkYTBjMDljZmVkZmU5ZjJlYTY1YTY4MTAwMzUyLi42NjdmNWU3OTU3YjRiNjU3NmI4MjNhNjVj
MDQ4OWFhY2Q0Nzg5MzhkIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9Nb2R1bGVzL2luZGV4
ZWRkYi9zZXJ2ZXIvU1FMaXRlSURCQ3Vyc29yLmNwcAorKysgYi9Tb3VyY2UvV2ViQ29yZS9Nb2R1
bGVzL2luZGV4ZWRkYi9zZXJ2ZXIvU1FMaXRlSURCQ3Vyc29yLmNwcApAQCAtMTE2LDE3ICsxMTYs
MTggQEAgdm9pZCBTUUxpdGVJREJDdXJzb3I6OmN1cnJlbnREYXRhKElEQkdldFJlc3VsdCYgcmVz
dWx0LCBjb25zdCBzdGQ6Om9wdGlvbmFsPElEQksKICAgICB9CiAKICAgICBWZWN0b3I8SURCQ3Vy
c29yUmVjb3JkPiBwcmVmZXRjaGVkUmVjb3JkczsKLSAgICBwcmVmZXRjaGVkUmVjb3Jkcy5yZXNl
cnZlQ2FwYWNpdHkobV9mZXRjaGVkUmVjb3Jkcy5zaXplKCkpOworICAgIHByZWZldGNoZWRSZWNv
cmRzLnJlc2VydmVJbml0aWFsQ2FwYWNpdHkobV9mZXRjaGVkUmVjb3Jkcy5zaXplKCkpOworICAg
IGJvb2wgaXNGaXJzdCA9IHRydWU7CiAgICAgZm9yIChhdXRvJiByZWNvcmQgOiBtX2ZldGNoZWRS
ZWNvcmRzKSB7CiAgICAgICAgIGlmIChyZWNvcmQuaXNUZXJtaW5hbFJlY29yZCgpKQogICAgICAg
ICAgICAgYnJlYWs7Ci0KLSAgICAgICAgcHJlZmV0Y2hlZFJlY29yZHMuYXBwZW5kKHJlY29yZC5y
ZWNvcmQpOworICAgICAgICBpZiAoaXNGaXJzdCkgeworICAgICAgICAgICAgaXNGaXJzdCA9IGZh
bHNlOworICAgICAgICAgICAgY29udGludWU7CisgICAgICAgIH0KKyAgICAgICAgcHJlZmV0Y2hl
ZFJlY29yZHMudW5jaGVja2VkQXBwZW5kKHJlY29yZC5yZWNvcmQpOwogICAgIH0KLQotICAgIC8v
IEZpcnN0IHJlY29yZCB3aWxsIGJlIHJldHVybmVkIGFzIGN1cnJlbnQgcmVjb3JkLgotICAgIGlm
ICghcHJlZmV0Y2hlZFJlY29yZHMuaXNFbXB0eSgpKQotICAgICAgICBwcmVmZXRjaGVkUmVjb3Jk
cy5yZW1vdmUoMCk7CisgICAgcHJlZmV0Y2hlZFJlY29yZHMuc2hyaW5rVG9GaXQoKTsKIAogICAg
IHJlc3VsdCA9IHsgY3VycmVudFJlY29yZC5yZWNvcmQua2V5LCBjdXJyZW50UmVjb3JkLnJlY29y
ZC5wcmltYXJ5S2V5LCBJREJWYWx1ZShjdXJyZW50UmVjb3JkLnJlY29yZC52YWx1ZSksIGtleVBh
dGgsIFdURk1vdmUocHJlZmV0Y2hlZFJlY29yZHMpIH07CiB9CmRpZmYgLS1naXQgYS9Tb3VyY2Uv
V2ViQ29yZS9Nb2R1bGVzL2luZGV4ZWRkYi9zaGFyZWQvSURCRGF0YWJhc2VJbmZvLmNwcCBiL1Nv
dXJjZS9XZWJDb3JlL01vZHVsZXMvaW5kZXhlZGRiL3NoYXJlZC9JREJEYXRhYmFzZUluZm8uY3Bw
CmluZGV4IGFiYWVjNmM1Y2ZiY2VkOWZjNjZlZjU0ZmQ4ZGZkMmM3YTI3YzkxNmMuLjhmNjUwMzVl
ZDRlYWQ5NTgyYjhiNzhlMmNlNzdkNTIzMzhjZmJiM2YgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJD
b3JlL01vZHVsZXMvaW5kZXhlZGRiL3NoYXJlZC9JREJEYXRhYmFzZUluZm8uY3BwCisrKyBiL1Nv
dXJjZS9XZWJDb3JlL01vZHVsZXMvaW5kZXhlZGRiL3NoYXJlZC9JREJEYXRhYmFzZUluZm8uY3Bw
CkBAIC0xMzYsMTIgKzEzNiw5IEBAIHZvaWQgSURCRGF0YWJhc2VJbmZvOjpyZW5hbWVPYmplY3RT
dG9yZSh1aW50NjRfdCBvYmplY3RTdG9yZUlkZW50aWZpZXIsIGNvbnN0IFN0CiAKIFZlY3RvcjxT
dHJpbmc+IElEQkRhdGFiYXNlSW5mbzo6b2JqZWN0U3RvcmVOYW1lcygpIGNvbnN0CiB7Ci0gICAg
VmVjdG9yPFN0cmluZz4gbmFtZXM7Ci0gICAgbmFtZXMucmVzZXJ2ZUNhcGFjaXR5KG1fb2JqZWN0
U3RvcmVNYXAuc2l6ZSgpKTsKLSAgICBmb3IgKGF1dG8mIG9iamVjdFN0b3JlIDogbV9vYmplY3RT
dG9yZU1hcC52YWx1ZXMoKSkKLSAgICAgICAgbmFtZXMudW5jaGVja2VkQXBwZW5kKG9iamVjdFN0
b3JlLm5hbWUoKSk7Ci0KLSAgICByZXR1cm4gbmFtZXM7CisgICAgcmV0dXJuIFdURjo6bWFwKG1f
b2JqZWN0U3RvcmVNYXAsIFtdKGF1dG8mIHBhaXIpIHsKKyAgICAgICAgcmV0dXJuIHBhaXIudmFs
dWUubmFtZSgpOworICAgIH0pOwogfQogCiB2b2lkIElEQkRhdGFiYXNlSW5mbzo6ZGVsZXRlT2Jq
ZWN0U3RvcmUoY29uc3QgU3RyaW5nJiBvYmplY3RTdG9yZU5hbWUpCmRpZmYgLS1naXQgYS9Tb3Vy
Y2UvV2ViQ29yZS9Nb2R1bGVzL2luZGV4ZWRkYi9zaGFyZWQvSURCSW5kZXhJbmZvLmNwcCBiL1Nv
dXJjZS9XZWJDb3JlL01vZHVsZXMvaW5kZXhlZGRiL3NoYXJlZC9JREJJbmRleEluZm8uY3BwCmlu
ZGV4IDM4MTY4ZWMyOTlkYTdkODgwZmIwN2MwMWJkNDZjMjc0ZWNiZTM3M2QuLjAxNWFjZjcyNzY5
NDUzNzRjNGFkYjhhZDI0MzRiYTNiNzk5YWFmZGEgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3Jl
L01vZHVsZXMvaW5kZXhlZGRiL3NoYXJlZC9JREJJbmRleEluZm8uY3BwCisrKyBiL1NvdXJjZS9X
ZWJDb3JlL01vZHVsZXMvaW5kZXhlZGRiL3NoYXJlZC9JREJJbmRleEluZm8uY3BwCkBAIC0yNiw2
ICsyNiw3IEBACiAjaW5jbHVkZSAiY29uZmlnLmgiCiAjaW5jbHVkZSAiSURCSW5kZXhJbmZvLmgi
CiAKKyNpbmNsdWRlIDx3dGYvQ3Jvc3NUaHJlYWRDb3BpZXIuaD4KICNpbmNsdWRlIDx3dGYvdGV4
dC9TdHJpbmdDb25jYXRlbmF0ZU51bWJlcnMuaD4KIAogbmFtZXNwYWNlIFdlYkNvcmUgewpAQCAt
NDYsNyArNDcsNyBAQCBJREJJbmRleEluZm86OklEQkluZGV4SW5mbyh1aW50NjRfdCBpZGVudGlm
aWVyLCB1aW50NjRfdCBvYmplY3RTdG9yZUlkZW50aWZpZXIsCiAKIElEQkluZGV4SW5mbyBJREJJ
bmRleEluZm86Omlzb2xhdGVkQ29weSgpIGNvbnN0CiB7Ci0gICAgcmV0dXJuIHsgbV9pZGVudGlm
aWVyLCBtX29iamVjdFN0b3JlSWRlbnRpZmllciwgbV9uYW1lLmlzb2xhdGVkQ29weSgpLCBXZWJD
b3JlOjppc29sYXRlZENvcHkobV9rZXlQYXRoKSwgbV91bmlxdWUsIG1fbXVsdGlFbnRyeSB9Owor
ICAgIHJldHVybiB7IG1faWRlbnRpZmllciwgbV9vYmplY3RTdG9yZUlkZW50aWZpZXIsIG1fbmFt
ZS5pc29sYXRlZENvcHkoKSwgY3Jvc3NUaHJlYWRDb3B5KG1fa2V5UGF0aCksIG1fdW5pcXVlLCBt
X211bHRpRW50cnkgfTsKIH0KIAogI2lmICFMT0dfRElTQUJMRUQKZGlmZiAtLWdpdCBhL1NvdXJj
ZS9XZWJDb3JlL01vZHVsZXMvaW5kZXhlZGRiL3NoYXJlZC9JREJPYmplY3RTdG9yZUluZm8uY3Bw
IGIvU291cmNlL1dlYkNvcmUvTW9kdWxlcy9pbmRleGVkZGIvc2hhcmVkL0lEQk9iamVjdFN0b3Jl
SW5mby5jcHAKaW5kZXggYTRkZDYxYWU2YTM0ZDdiZjNjMWEyOTljNzBkNmExYzBiYjZlYjE4My4u
MTBjMWE0YzUxNWUyZWFlZjgwOTM5NDJiYjM2YzVkOGQ1MjM0YzBjYyAxMDA2NDQKLS0tIGEvU291
cmNlL1dlYkNvcmUvTW9kdWxlcy9pbmRleGVkZGIvc2hhcmVkL0lEQk9iamVjdFN0b3JlSW5mby5j
cHAKKysrIGIvU291cmNlL1dlYkNvcmUvTW9kdWxlcy9pbmRleGVkZGIvc2hhcmVkL0lEQk9iamVj
dFN0b3JlSW5mby5jcHAKQEAgLTI1LDYgKzI1LDggQEAKIAogI2luY2x1ZGUgImNvbmZpZy5oIgog
I2luY2x1ZGUgIklEQk9iamVjdFN0b3JlSW5mby5oIgorCisjaW5jbHVkZSA8d3RmL0Nyb3NzVGhy
ZWFkQ29waWVyLmg+CiAjaW5jbHVkZSA8d3RmL3RleHQvU3RyaW5nQnVpbGRlci5oPgogCiBuYW1l
c3BhY2UgV2ViQ29yZSB7CkBAIC05Miw3ICs5NCw3IEBAIElEQkluZGV4SW5mbyogSURCT2JqZWN0
U3RvcmVJbmZvOjppbmZvRm9yRXhpc3RpbmdJbmRleCh1aW50NjRfdCBpZGVudGlmaWVyKQogCiBJ
REJPYmplY3RTdG9yZUluZm8gSURCT2JqZWN0U3RvcmVJbmZvOjppc29sYXRlZENvcHkoKSBjb25z
dAogewotICAgIElEQk9iamVjdFN0b3JlSW5mbyByZXN1bHQgPSB7IG1faWRlbnRpZmllciwgbV9u
YW1lLmlzb2xhdGVkQ29weSgpLCBXZWJDb3JlOjppc29sYXRlZENvcHkobV9rZXlQYXRoKSwgbV9h
dXRvSW5jcmVtZW50IH07CisgICAgSURCT2JqZWN0U3RvcmVJbmZvIHJlc3VsdCA9IHsgbV9pZGVu
dGlmaWVyLCBtX25hbWUuaXNvbGF0ZWRDb3B5KCksIGNyb3NzVGhyZWFkQ29weShtX2tleVBhdGgp
LCBtX2F1dG9JbmNyZW1lbnQgfTsKIAogICAgIGZvciAoYXV0byYgaXRlcmF0b3IgOiBtX2luZGV4
TWFwKQogICAgICAgICByZXN1bHQubV9pbmRleE1hcC5zZXQoaXRlcmF0b3Iua2V5LCBpdGVyYXRv
ci52YWx1ZS5pc29sYXRlZENvcHkoKSk7CkBAIC0xMDIsMTIgKzEwNCw5IEBAIElEQk9iamVjdFN0
b3JlSW5mbyBJREJPYmplY3RTdG9yZUluZm86Omlzb2xhdGVkQ29weSgpIGNvbnN0CiAKIFZlY3Rv
cjxTdHJpbmc+IElEQk9iamVjdFN0b3JlSW5mbzo6aW5kZXhOYW1lcygpIGNvbnN0CiB7Ci0gICAg
VmVjdG9yPFN0cmluZz4gbmFtZXM7Ci0gICAgbmFtZXMucmVzZXJ2ZUNhcGFjaXR5KG1faW5kZXhN
YXAuc2l6ZSgpKTsKLSAgICBmb3IgKGF1dG8mIGluZGV4IDogbV9pbmRleE1hcC52YWx1ZXMoKSkK
LSAgICAgICAgbmFtZXMudW5jaGVja2VkQXBwZW5kKGluZGV4Lm5hbWUoKSk7Ci0KLSAgICByZXR1
cm4gbmFtZXM7CisgICAgcmV0dXJuIFdURjo6bWFwKG1faW5kZXhNYXAsIFtdKGF1dG8mIHBhaXIp
IC0+IFN0cmluZyB7CisgICAgICAgIHJldHVybiBwYWlyLnZhbHVlLm5hbWUoKTsKKyAgICB9KTsK
IH0KIAogdm9pZCBJREJPYmplY3RTdG9yZUluZm86OmRlbGV0ZUluZGV4KGNvbnN0IFN0cmluZyYg
aW5kZXhOYW1lKQpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvTW9kdWxlcy9pbmRleGVkZGIv
c2hhcmVkL0lEQlRyYW5zYWN0aW9uSW5mby5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9Nb2R1bGVzL2lu
ZGV4ZWRkYi9zaGFyZWQvSURCVHJhbnNhY3Rpb25JbmZvLmNwcAppbmRleCAzNWRhZTM5OTIyMjcy
NDM0MjE0NzYwN2ZiODQzNWJkMTg3YzQ5NjJmLi5hMDlmMzBiYmU1MWI1YjZiZmE2NTMyZGI5NjE4
Njg3MjY0MjNkNTQ0IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9Nb2R1bGVzL2luZGV4ZWRk
Yi9zaGFyZWQvSURCVHJhbnNhY3Rpb25JbmZvLmNwcAorKysgYi9Tb3VyY2UvV2ViQ29yZS9Nb2R1
bGVzL2luZGV4ZWRkYi9zaGFyZWQvSURCVHJhbnNhY3Rpb25JbmZvLmNwcApAQCAtODgsOSArODgs
OSBAQCB2b2lkIElEQlRyYW5zYWN0aW9uSW5mbzo6aXNvbGF0ZWRDb3B5KGNvbnN0IElEQlRyYW5z
YWN0aW9uSW5mbyYgc291cmNlLCBJREJUcmFucwogICAgIGRlc3RpbmF0aW9uLm1fZHVyYWJpbGl0
eSA9IHNvdXJjZS5tX2R1cmFiaWxpdHk7CiAgICAgZGVzdGluYXRpb24ubV9uZXdWZXJzaW9uID0g
c291cmNlLm1fbmV3VmVyc2lvbjsKIAotICAgIGRlc3RpbmF0aW9uLm1fb2JqZWN0U3RvcmVzLnJl
c2VydmVDYXBhY2l0eShzb3VyY2UubV9vYmplY3RTdG9yZXMuc2l6ZSgpKTsKLSAgICBmb3IgKGF1
dG8mIG9iamVjdFN0b3JlIDogc291cmNlLm1fb2JqZWN0U3RvcmVzKQotICAgICAgICBkZXN0aW5h
dGlvbi5tX29iamVjdFN0b3Jlcy51bmNoZWNrZWRBcHBlbmQob2JqZWN0U3RvcmUuaXNvbGF0ZWRD
b3B5KCkpOworICAgIGRlc3RpbmF0aW9uLm1fb2JqZWN0U3RvcmVzID0gc291cmNlLm1fb2JqZWN0
U3RvcmVzLm1hcChbXShhdXRvJiBvYmplY3RTdG9yZSkgeworICAgICAgICByZXR1cm4gb2JqZWN0
U3RvcmUuaXNvbGF0ZWRDb3B5KCk7CisgICAgfSk7CiAKICAgICBpZiAoc291cmNlLm1fb3JpZ2lu
YWxEYXRhYmFzZUluZm8pCiAgICAgICAgIGRlc3RpbmF0aW9uLm1fb3JpZ2luYWxEYXRhYmFzZUlu
Zm8gPSBtYWtlVW5pcXVlPElEQkRhdGFiYXNlSW5mbz4oKnNvdXJjZS5tX29yaWdpbmFsRGF0YWJh
c2VJbmZvLCBJREJEYXRhYmFzZUluZm86Oklzb2xhdGVkQ29weSk7CmRpZmYgLS1naXQgYS9Tb3Vy
Y2UvV2ViQ29yZS9Nb2R1bGVzL2luZGV4ZWRkYi9zaGFyZWQvSW5kZXhLZXkuY3BwIGIvU291cmNl
L1dlYkNvcmUvTW9kdWxlcy9pbmRleGVkZGIvc2hhcmVkL0luZGV4S2V5LmNwcAppbmRleCAyYzFh
MDE3ZjY5MzcxZWE2NTg0YzI1YTdiOWZlOTFmNjRmYTMxM2U4Li5iNTg3NWRjYmVlNzZjNzExOTBh
NzAxYTE1YjFhOTAzNTc1Yzg0MDY3IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9Nb2R1bGVz
L2luZGV4ZWRkYi9zaGFyZWQvSW5kZXhLZXkuY3BwCisrKyBiL1NvdXJjZS9XZWJDb3JlL01vZHVs
ZXMvaW5kZXhlZGRiL3NoYXJlZC9JbmRleEtleS5jcHAKQEAgLTI2LDExICsyNiwxMSBAQAogI2lu
Y2x1ZGUgImNvbmZpZy5oIgogI2luY2x1ZGUgIkluZGV4S2V5LmgiCiAKKyNpbmNsdWRlIDx3dGYv
Q3Jvc3NUaHJlYWRDb3BpZXIuaD4KKwogbmFtZXNwYWNlIFdlYkNvcmUgewogCi1JbmRleEtleTo6
SW5kZXhLZXkoKQotewotfQorSW5kZXhLZXk6OkluZGV4S2V5KCkgPSBkZWZhdWx0OwogCiBJbmRl
eEtleTo6SW5kZXhLZXkoVmVjdG9yPElEQktleURhdGE+JiYga2V5cykKIHsKQEAgLTM5LDEyICsz
OSw3IEBAIEluZGV4S2V5OjpJbmRleEtleShWZWN0b3I8SURCS2V5RGF0YT4mJiBrZXlzKQogCiBJ
bmRleEtleSBJbmRleEtleTo6aXNvbGF0ZWRDb3B5KCkgY29uc3QKIHsKLSAgICBWZWN0b3I8SURC
S2V5RGF0YT4ga2V5czsKLSAgICBrZXlzLnJlc2VydmVJbml0aWFsQ2FwYWNpdHkobV9rZXlzLnNp
emUoKSk7Ci0gICAgZm9yIChhdXRvJiBrZXkgOiBtX2tleXMpCi0gICAgICAgIGtleXMudW5jaGVj
a2VkQXBwZW5kKGtleS5pc29sYXRlZENvcHkoKSk7Ci0KLSAgICByZXR1cm4geyBXVEZNb3ZlKGtl
eXMpIH07CisgICAgcmV0dXJuIHsgY3Jvc3NUaHJlYWRDb3B5KG1fa2V5cykgfTsKIH0KIAogSURC
S2V5RGF0YSBJbmRleEtleTo6YXNPbmVLZXkoKSBjb25zdApkaWZmIC0tZ2l0IGEvU291cmNlL1dl
YkNvcmUvTW9kdWxlcy9tZWRpYXN0cmVhbS9NZWRpYVN0cmVhbS5jcHAgYi9Tb3VyY2UvV2ViQ29y
ZS9Nb2R1bGVzL21lZGlhc3RyZWFtL01lZGlhU3RyZWFtLmNwcAppbmRleCA1ZGQ4YzY2Y2Q4NGNm
ZjllM2JmN2E2MGM4OGFiOTRhNzUyMjY2MGIzLi42MGFkODBiMDc0NjQzMTM5NmM3MTIzNjU2ZTgy
MGJjYWU4NmFiMDBkIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9Nb2R1bGVzL21lZGlhc3Ry
ZWFtL01lZGlhU3RyZWFtLmNwcAorKysgYi9Tb3VyY2UvV2ViQ29yZS9Nb2R1bGVzL21lZGlhc3Ry
ZWFtL01lZGlhU3RyZWFtLmNwcApAQCAtMTE5LDEzICsxMTksMTAgQEAgUmVmUHRyPE1lZGlhU3Ry
ZWFtPiBNZWRpYVN0cmVhbTo6Y2xvbmUoKQogewogICAgIEFMV0FZU19MT0coTE9HSURFTlRJRklF
Uik7CiAKLSAgICBNZWRpYVN0cmVhbVRyYWNrVmVjdG9yIGNsb25lZFRyYWNrczsKLSAgICBjbG9u
ZWRUcmFja3MucmVzZXJ2ZUluaXRpYWxDYXBhY2l0eShtX3RyYWNrU2V0LnNpemUoKSk7Ci0KLSAg
ICBmb3IgKGF1dG8mIHRyYWNrIDogbV90cmFja1NldC52YWx1ZXMoKSkKLSAgICAgICAgY2xvbmVk
VHJhY2tzLnVuY2hlY2tlZEFwcGVuZCh0cmFjay0+Y2xvbmUoKSk7Ci0KLSAgICByZXR1cm4gTWVk
aWFTdHJlYW06OmNyZWF0ZSgqZG9jdW1lbnQoKSwgY2xvbmVkVHJhY2tzKTsKKyAgICBhdXRvIGNs
b25lZFRyYWNrcyA9IFdURjo6bWFwKG1fdHJhY2tTZXQsIFtdKGF1dG8mIGVudHJ5KSB7CisgICAg
ICAgIHJldHVybiBlbnRyeS52YWx1ZS0+Y2xvbmUoKTsKKyAgICB9KTsKKyAgICByZXR1cm4gTWVk
aWFTdHJlYW06OmNyZWF0ZSgqZG9jdW1lbnQoKSwgV1RGTW92ZShjbG9uZWRUcmFja3MpKTsKIH0K
IAogdm9pZCBNZWRpYVN0cmVhbTo6YWRkVHJhY2soTWVkaWFTdHJlYW1UcmFjayYgdHJhY2spCmRp
ZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9Nb2R1bGVzL21lZGlhc3RyZWFtL01lZGlhU3RyZWFt
VHJhY2suY3BwIGIvU291cmNlL1dlYkNvcmUvTW9kdWxlcy9tZWRpYXN0cmVhbS9NZWRpYVN0cmVh
bVRyYWNrLmNwcAppbmRleCBiZWJlOGVmMWYyYWYxNmRmODI3NzQ5MTFhYjFmYzU5ZTcyZDRlODA3
Li5hNDVkMTllNTQ3Mzk5NTZkYjc4MDYzYzdjYWJlOGE4ZTBmMTA0ZDRkIDEwMDY0NAotLS0gYS9T
b3VyY2UvV2ViQ29yZS9Nb2R1bGVzL21lZGlhc3RyZWFtL01lZGlhU3RyZWFtVHJhY2suY3BwCisr
KyBiL1NvdXJjZS9XZWJDb3JlL01vZHVsZXMvbWVkaWFzdHJlYW0vTWVkaWFTdHJlYW1UcmFjay5j
cHAKQEAgLTMyMSwxMSArMzIxLDkgQEAgc3RhdGljIExvbmdSYW5nZSBjYXBhYmlsaXR5SW50UmFu
Z2UoY29uc3QgQ2FwYWJpbGl0eVZhbHVlT3JSYW5nZSYgdmFsdWUpCiAKIHN0YXRpYyBWZWN0b3I8
U3RyaW5nPiBjYXBhYmlsaXR5U3RyaW5nVmVjdG9yKGNvbnN0IFZlY3RvcjxSZWFsdGltZU1lZGlh
U291cmNlU2V0dGluZ3M6OlZpZGVvRmFjaW5nTW9kZT4mIG1vZGVzKQogewotICAgIFZlY3RvcjxT
dHJpbmc+IHJlc3VsdDsKLSAgICByZXN1bHQucmVzZXJ2ZUluaXRpYWxDYXBhY2l0eShtb2Rlcy5z
aXplKCkpOwotICAgIGZvciAoYXV0byYgbW9kZSA6IG1vZGVzKQotICAgICAgICByZXN1bHQudW5j
aGVja2VkQXBwZW5kKFJlYWx0aW1lTWVkaWFTb3VyY2VTZXR0aW5nczo6ZmFjaW5nTW9kZShtb2Rl
KSk7Ci0gICAgcmV0dXJuIHJlc3VsdDsKKyAgICByZXR1cm4gbW9kZXMubWFwKFtdKGF1dG8mIG1v
ZGUpIHsKKyAgICAgICAgcmV0dXJuIFJlYWx0aW1lTWVkaWFTb3VyY2VTZXR0aW5nczo6ZmFjaW5n
TW9kZShtb2RlKTsKKyAgICB9KTsKIH0KIAogc3RhdGljIFZlY3Rvcjxib29sPiBjYXBhYmlsaXR5
Qm9vbGVhblZlY3RvcihSZWFsdGltZU1lZGlhU291cmNlQ2FwYWJpbGl0aWVzOjpFY2hvQ2FuY2Vs
bGF0aW9uIGNhbmNlbGxhdGlvbikKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL01vZHVsZXMv
bWVkaWFzdHJlYW0vTWVkaWFUcmFja0NvbnN0cmFpbnRzLmNwcCBiL1NvdXJjZS9XZWJDb3JlL01v
ZHVsZXMvbWVkaWFzdHJlYW0vTWVkaWFUcmFja0NvbnN0cmFpbnRzLmNwcAppbmRleCA5ZjEwNDgy
MTk2OTQxYjBmNTI0Njg1MzFjNDA0ZjU0ZjYwYTQ3YzQ5Li4zMTEzODQ3ZGI3NTQ4NDdkNjE2MmZh
MmQ2MWU2NzM0YTZhODg4NWIzIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9Nb2R1bGVzL21l
ZGlhc3RyZWFtL01lZGlhVHJhY2tDb25zdHJhaW50cy5jcHAKKysrIGIvU291cmNlL1dlYkNvcmUv
TW9kdWxlcy9tZWRpYXN0cmVhbS9NZWRpYVRyYWNrQ29uc3RyYWludHMuY3BwCkBAIC0xNzgsMTEg
KzE3OCw5IEBAIHN0YXRpYyBNZWRpYVRyYWNrQ29uc3RyYWludFNldE1hcCBjb252ZXJ0VG9JbnRl
cm5hbEZvcm0oQ29uc3RyYWludFNldFR5cGUgc2V0VHlwCiAKIHN0YXRpYyBWZWN0b3I8TWVkaWFU
cmFja0NvbnN0cmFpbnRTZXRNYXA+IGNvbnZlcnRBZHZhbmNlZFRvSW50ZXJuYWxGb3JtKGNvbnN0
IFZlY3RvcjxNZWRpYVRyYWNrQ29uc3RyYWludFNldD4mIHZlY3RvcikKIHsKLSAgICBWZWN0b3I8
TWVkaWFUcmFja0NvbnN0cmFpbnRTZXRNYXA+IHJlc3VsdDsKLSAgICByZXN1bHQucmVzZXJ2ZUlu
aXRpYWxDYXBhY2l0eSh2ZWN0b3Iuc2l6ZSgpKTsKLSAgICBmb3IgKGF1dG8mIHNldCA6IHZlY3Rv
cikKLSAgICAgICAgcmVzdWx0LnVuY2hlY2tlZEFwcGVuZChjb252ZXJ0VG9JbnRlcm5hbEZvcm0o
Q29uc3RyYWludFNldFR5cGU6OkFkdmFuY2VkLCBzZXQpKTsKLSAgICByZXR1cm4gcmVzdWx0Owor
ICAgIHJldHVybiB2ZWN0b3IubWFwKFtdKGF1dG8mIHNldCkgeworICAgICAgICByZXR1cm4gY29u
dmVydFRvSW50ZXJuYWxGb3JtKENvbnN0cmFpbnRTZXRUeXBlOjpBZHZhbmNlZCwgc2V0KTsKKyAg
ICB9KTsKIH0KIAogc3RhdGljIFZlY3RvcjxNZWRpYVRyYWNrQ29uc3RyYWludFNldE1hcD4gY29u
dmVydEFkdmFuY2VkVG9JbnRlcm5hbEZvcm0oY29uc3Qgc3RkOjpvcHRpb25hbDxWZWN0b3I8TWVk
aWFUcmFja0NvbnN0cmFpbnRTZXQ+PiYgb3B0aW9uYWxWZWN0b3IpCmRpZmYgLS1naXQgYS9Tb3Vy
Y2UvV2ViQ29yZS9Nb2R1bGVzL21lZGlhc3RyZWFtL1NGcmFtZVV0aWxzLmNwcCBiL1NvdXJjZS9X
ZWJDb3JlL01vZHVsZXMvbWVkaWFzdHJlYW0vU0ZyYW1lVXRpbHMuY3BwCmluZGV4IGQ4MmI5NmY0
NDY5MzlmNmNjMWNiMWVlYTljMTY1Mjg5OWNkMzUwN2EuLmIwZWYxZDVhNTZjNjIyMWFhYTNiOWI0
OWM4ZmY3MmRjYTA0MTJlZGIgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL01vZHVsZXMvbWVk
aWFzdHJlYW0vU0ZyYW1lVXRpbHMuY3BwCisrKyBiL1NvdXJjZS9XZWJDb3JlL01vZHVsZXMvbWVk
aWFzdHJlYW0vU0ZyYW1lVXRpbHMuY3BwCkBAIC0xNjMsOSArMTYzLDkgQEAgc3RhdGljIGlubGlu
ZSB2b2lkIGZpbmRFc2NhcGVSYnNwUGF0dGVybnMoY29uc3QgVmVjdG9yPHVpbnQ4X3Q+JiBmcmFt
ZSwgc2l6ZV90IG8KIHZvaWQgdG9SYnNwKFZlY3Rvcjx1aW50OF90PiYgZnJhbWUsIHNpemVfdCBv
ZmZzZXQpCiB7CiAgICAgc2l6ZV90IGNvdW50ID0gMDsKLSAgICBmaW5kRXNjYXBlUmJzcFBhdHRl
cm5zKGZyYW1lLCBvZmZzZXQsIFsmY291bnRdKHNpemVfdCwgYm9vbCBzaG91ZGxCZUVzY2FwZWQp
IHsKLSAgICAgICAgaWYgKHNob3VkbEJlRXNjYXBlZCkKLSAgICAgICAgICAgIGNvdW50Kys7Cisg
ICAgZmluZEVzY2FwZVJic3BQYXR0ZXJucyhmcmFtZSwgb2Zmc2V0LCBbJmNvdW50XShzaXplX3Qs
IGJvb2wgc2hvdWxkQmVFc2NhcGVkKSB7CisgICAgICAgIGlmIChzaG91bGRCZUVzY2FwZWQpCisg
ICAgICAgICAgICArK2NvdW50OwogICAgIH0pOwogICAgIGlmICghY291bnQpCiAgICAgICAgIHJl
dHVybjsKQEAgLTE3NCw4ICsxNzQsOCBAQCB2b2lkIHRvUmJzcChWZWN0b3I8dWludDhfdD4mIGZy
YW1lLCBzaXplX3Qgb2Zmc2V0KQogICAgIG5ld0ZyYW1lLnJlc2VydmVJbml0aWFsQ2FwYWNpdHko
ZnJhbWUuc2l6ZSgpICsgY291bnQpOwogICAgIG5ld0ZyYW1lLmFwcGVuZChmcmFtZS5kYXRhKCks
IG9mZnNldCk7CiAKLSAgICBmaW5kRXNjYXBlUmJzcFBhdHRlcm5zKGZyYW1lLCBvZmZzZXQsIFtk
YXRhID0gZnJhbWUuZGF0YSgpLCAmbmV3RnJhbWVdKHNpemVfdCBwb3NpdGlvbiwgYm9vbCBzaG91
ZGxCZUVzY2FwZWQpIHsKLSAgICAgICAgaWYgKHNob3VkbEJlRXNjYXBlZCkKKyAgICBmaW5kRXNj
YXBlUmJzcFBhdHRlcm5zKGZyYW1lLCBvZmZzZXQsIFtkYXRhID0gZnJhbWUuZGF0YSgpLCAmbmV3
RnJhbWVdKHNpemVfdCBwb3NpdGlvbiwgYm9vbCBzaG91bGRCZUVzY2FwZWQpIHsKKyAgICAgICAg
aWYgKHNob3VsZEJlRXNjYXBlZCkKICAgICAgICAgICAgIG5ld0ZyYW1lLnVuY2hlY2tlZEFwcGVu
ZCgzKTsKICAgICAgICAgbmV3RnJhbWUudW5jaGVja2VkQXBwZW5kKGRhdGFbcG9zaXRpb25dKTsK
ICAgICB9KTsKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL01vZHVsZXMvcmVtb3RlcGxheWJh
Y2svUmVtb3RlUGxheWJhY2suY3BwIGIvU291cmNlL1dlYkNvcmUvTW9kdWxlcy9yZW1vdGVwbGF5
YmFjay9SZW1vdGVQbGF5YmFjay5jcHAKaW5kZXggNDBmYTE4OTAxYmViMDBlOTJiMzdkNzY0M2Qz
YThhY2NlMmEzMjFjZi4uMmU1MmY4ZWNmN2RiZDA1N2U4ZjBkMWJmOTAwZGE5N2ZkM2JhNTg1NyAx
MDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvTW9kdWxlcy9yZW1vdGVwbGF5YmFjay9SZW1vdGVQ
bGF5YmFjay5jcHAKKysrIGIvU291cmNlL1dlYkNvcmUvTW9kdWxlcy9yZW1vdGVwbGF5YmFjay9S
ZW1vdGVQbGF5YmFjay5jcHAKQEAgLTQwOSwxMyArNDA5LDcgQEAgdm9pZCBSZW1vdGVQbGF5YmFj
azo6YXZhaWxhYmlsaXR5Q2hhbmdlZChib29sIGF2YWlsYWJsZSkKICAgICAgICAgICAgIHJldHVy
bjsKIAogICAgICAgICAvLyBQcm90ZWN0IG1fY2FsbGJhY2tNYXAgYWdhaW5zdCBtdXRhdGlvbiB3
aGlsZSBpdCdzIGJlaW5nIGl0ZXJhdGVkIG92ZXIuCi0gICAgICAgIFZlY3RvcjxSZWY8UmVtb3Rl
UGxheWJhY2tBdmFpbGFiaWxpdHlDYWxsYmFjaz4+IGNhbGxiYWNrczsKLSAgICAgICAgY2FsbGJh
Y2tzLnJlc2VydmVJbml0aWFsQ2FwYWNpdHkobV9jYWxsYmFja01hcC5zaXplKCkpOwotCi0gICAg
ICAgIC8vIENhbid0IHVzZSBjb3B5VmFsdWVzVG9WZWN0b3IoKSBoZXJlIGJlY2F1c2UgUmVmPD4g
aGFzIGEgZGVsZXRlZCBhc3NpZ25tZW50IG9wZXJhdG9yLgotICAgICAgICBmb3IgKGF1dG8mIGNh
bGxiYWNrIDogbV9jYWxsYmFja01hcC52YWx1ZXMoKSkKLSAgICAgICAgICAgIGNhbGxiYWNrcy51
bmNoZWNrZWRBcHBlbmQoY2FsbGJhY2suY29weVJlZigpKTsKLSAgICAgICAgZm9yIChhdXRvJiBj
YWxsYmFjayA6IGNhbGxiYWNrcykKKyAgICAgICAgZm9yIChhdXRvJiBjYWxsYmFjayA6IGNvcHlU
b1ZlY3RvcihtX2NhbGxiYWNrTWFwLnZhbHVlcygpKSkKICAgICAgICAgICAgIGNhbGxiYWNrLT5o
YW5kbGVFdmVudChhdmFpbGFibGUpOwogICAgIH0pOwogfQpkaWZmIC0tZ2l0IGEvU291cmNlL1dl
YkNvcmUvTW9kdWxlcy9zcGVlY2gvU3BlZWNoUmVjb2duaXRpb24uY3BwIGIvU291cmNlL1dlYkNv
cmUvTW9kdWxlcy9zcGVlY2gvU3BlZWNoUmVjb2duaXRpb24uY3BwCmluZGV4IDgyZmZmZTQ3YTEw
ZDYyMmUxZGI3ZWIwZDlhYjJjNTgwZTJkNzFhMGMuLjI5MDQ2YmRiODZhZWEyMWQyYWJkZDJjZmM5
ZWFhMTgwMWVlYjUyM2IgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL01vZHVsZXMvc3BlZWNo
L1NwZWVjaFJlY29nbml0aW9uLmNwcAorKysgYi9Tb3VyY2UvV2ViQ29yZS9Nb2R1bGVzL3NwZWVj
aC9TcGVlY2hSZWNvZ25pdGlvbi5jcHAKQEAgLTE2OSw3ICsxNjksNyBAQCB2b2lkIFNwZWVjaFJl
Y29nbml0aW9uOjpkaWRGaW5kTm9NYXRjaCgpCiB2b2lkIFNwZWVjaFJlY29nbml0aW9uOjpkaWRS
ZWNlaXZlUmVzdWx0KFZlY3RvcjxTcGVlY2hSZWNvZ25pdGlvblJlc3VsdERhdGE+JiYgcmVzdWx0
RGF0YXMpCiB7CiAgICAgVmVjdG9yPFJlZjxTcGVlY2hSZWNvZ25pdGlvblJlc3VsdD4+IGFsbFJl
c3VsdHM7Ci0gICAgYWxsUmVzdWx0cy5yZXNlcnZlQ2FwYWNpdHkobV9maW5hbFJlc3VsdHMuc2l6
ZSgpICsgcmVzdWx0RGF0YXMuc2l6ZSgpKTsKKyAgICBhbGxSZXN1bHRzLnJlc2VydmVJbml0aWFs
Q2FwYWNpdHkobV9maW5hbFJlc3VsdHMuc2l6ZSgpICsgcmVzdWx0RGF0YXMuc2l6ZSgpKTsKICAg
ICBhbGxSZXN1bHRzLmFwcGVuZFZlY3RvcihtX2ZpbmFsUmVzdWx0cyk7CiAKICAgICBhdXRvIGZp
cnN0Q2hhbmdlZEluZGV4ID0gYWxsUmVzdWx0cy5zaXplKCk7CmRpZmYgLS1naXQgYS9Tb3VyY2Uv
V2ViQ29yZS9Nb2R1bGVzL3dlYmF1dGhuL2Nib3IvQ0JPUlZhbHVlLmNwcCBiL1NvdXJjZS9XZWJD
b3JlL01vZHVsZXMvd2ViYXV0aG4vY2Jvci9DQk9SVmFsdWUuY3BwCmluZGV4IDliMjhmMGU1ZTEw
MDZkNGViMTdiZDkwMzBmOWNiMmJiYWY0N2E3ZjAuLjRlNzA4MzYxOTViMzA2ZWE3NDgwZGUwMDBj
ZTgxN2EzMjdmNDlkODMgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL01vZHVsZXMvd2ViYXV0
aG4vY2Jvci9DQk9SVmFsdWUuY3BwCisrKyBiL1NvdXJjZS9XZWJDb3JlL01vZHVsZXMvd2ViYXV0
aG4vY2Jvci9DQk9SVmFsdWUuY3BwCkBAIC0xMjYsMTEgKzEyNiw4IEBAIENCT1JWYWx1ZTo6Q0JP
UlZhbHVlKGNvbnN0IFN0cmluZyYgaW5TdHJpbmcpCiAKIENCT1JWYWx1ZTo6Q0JPUlZhbHVlKGNv
bnN0IEFycmF5VmFsdWUmIGluQXJyYXkpCiAgICAgOiBtX3R5cGUoVHlwZTo6QXJyYXkpCi0gICAg
LCBtX2FycmF5VmFsdWUoKQorICAgICwgbV9hcnJheVZhbHVlKGluQXJyYXkubWFwKFtdKGF1dG8m
IHZhbHVlKSB7IHJldHVybiB2YWx1ZS5jbG9uZSgpOyB9KSkKIHsKLSAgICBtX2FycmF5VmFsdWUu
cmVzZXJ2ZUNhcGFjaXR5KGluQXJyYXkuc2l6ZSgpKTsKLSAgICBmb3IgKGNvbnN0IGF1dG8mIHZh
bCA6IGluQXJyYXkpCi0gICAgICAgIG1fYXJyYXlWYWx1ZS5hcHBlbmQodmFsLmNsb25lKCkpOwog
fQogCiBDQk9SVmFsdWU6OkNCT1JWYWx1ZShBcnJheVZhbHVlJiYgaW5BcnJheSkKZGlmZiAtLWdp
dCBhL1NvdXJjZS9XZWJDb3JlL01vZHVsZXMvd2ViYXV0aG4vZmlkby9BdXRoZW50aWNhdG9yR2V0
SW5mb1Jlc3BvbnNlLmNwcCBiL1NvdXJjZS9XZWJDb3JlL01vZHVsZXMvd2ViYXV0aG4vZmlkby9B
dXRoZW50aWNhdG9yR2V0SW5mb1Jlc3BvbnNlLmNwcAppbmRleCAzMDlhZDc2ZWUyNzA0Y2UyYzY1
ZGRjZTBmYTc0MzRlYjY5OTFmOWRlLi41NmZkZGUyZmNkMzMwOTFmOTk1NTJmOTI0NDE1NWI2OWQy
NjQ3MjRmIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9Nb2R1bGVzL3dlYmF1dGhuL2ZpZG8v
QXV0aGVudGljYXRvckdldEluZm9SZXNwb25zZS5jcHAKKysrIGIvU291cmNlL1dlYkNvcmUvTW9k
dWxlcy93ZWJhdXRobi9maWRvL0F1dGhlbnRpY2F0b3JHZXRJbmZvUmVzcG9uc2UuY3BwCkBAIC00
MCwxMCArNDAsOSBAQCBuYW1lc3BhY2UgZmlkbyB7CiB0ZW1wbGF0ZSA8dHlwZW5hbWUgQ29udGFp
bmVyPgogY2Jvcjo6Q0JPUlZhbHVlIHRvQXJyYXlWYWx1ZShjb25zdCBDb250YWluZXImIGNvbnRh
aW5lcikKIHsKLSAgICBjYm9yOjpDQk9SVmFsdWU6OkFycmF5VmFsdWUgdmFsdWU7Ci0gICAgdmFs
dWUucmVzZXJ2ZUluaXRpYWxDYXBhY2l0eShjb250YWluZXIuc2l6ZSgpKTsKLSAgICBmb3IgKGNv
bnN0IGF1dG8mIGl0ZW0gOiBjb250YWluZXIpCi0gICAgICAgIHZhbHVlLmFwcGVuZChjYm9yOjpD
Qk9SVmFsdWUoaXRlbSkpOworICAgIGF1dG8gdmFsdWUgPSBXVEY6Om1hcChjb250YWluZXIsIFtd
KGF1dG8mIGl0ZW0pIHsKKyAgICAgICAgcmV0dXJuIGNib3I6OkNCT1JWYWx1ZShpdGVtKTsKKyAg
ICB9KTsKICAgICByZXR1cm4gY2Jvcjo6Q0JPUlZhbHVlKFdURk1vdmUodmFsdWUpKTsKIH0KIApk
aWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvTW9kdWxlcy93ZWJhdXRobi9maWRvL0RldmljZVJl
cXVlc3RDb252ZXJ0ZXIuY3BwIGIvU291cmNlL1dlYkNvcmUvTW9kdWxlcy93ZWJhdXRobi9maWRv
L0RldmljZVJlcXVlc3RDb252ZXJ0ZXIuY3BwCmluZGV4IDJmNjlkNzM4MzhmOTFkMDFiMWVmZGFl
OTI1NGM5Mjk3Y2I2YTU4ZDYuLjMyOWYyYTFkYTFiN2Y5MDM0NjMxMjg3OGI2MzA2MmM2ZTQyMjhk
NDkgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL01vZHVsZXMvd2ViYXV0aG4vZmlkby9EZXZp
Y2VSZXF1ZXN0Q29udmVydGVyLmNwcAorKysgYi9Tb3VyY2UvV2ViQ29yZS9Nb2R1bGVzL3dlYmF1
dGhuL2ZpZG8vRGV2aWNlUmVxdWVzdENvbnZlcnRlci5jcHAKQEAgLTY4LDE0ICs2OCwxMiBAQCBz
dGF0aWMgQ0JPUlZhbHVlIGNvbnZlcnRVc2VyRW50aXR5VG9DQk9SKGNvbnN0IFB1YmxpY0tleUNy
ZWRlbnRpYWxDcmVhdGlvbk9wdGlvbgogCiBzdGF0aWMgQ0JPUlZhbHVlIGNvbnZlcnRQYXJhbWV0
ZXJzVG9DQk9SKGNvbnN0IFZlY3RvcjxQdWJsaWNLZXlDcmVkZW50aWFsQ3JlYXRpb25PcHRpb25z
OjpQYXJhbWV0ZXJzPiYgcGFyYW1ldGVycykKIHsKLSAgICBDQk9SVmFsdWU6OkFycmF5VmFsdWUg
Y3JlZGVudGlhbFBhcmFtQXJyYXk7Ci0gICAgY3JlZGVudGlhbFBhcmFtQXJyYXkucmVzZXJ2ZUlu
aXRpYWxDYXBhY2l0eShwYXJhbWV0ZXJzLnNpemUoKSk7Ci0gICAgZm9yIChjb25zdCBhdXRvJiBj
cmVkZW50aWFsIDogcGFyYW1ldGVycykgeworICAgIGF1dG8gY3JlZGVudGlhbFBhcmFtQXJyYXkg
PSBwYXJhbWV0ZXJzLm1hcChbXShhdXRvJiBjcmVkZW50aWFsKSB7CiAgICAgICAgIENCT1JWYWx1
ZTo6TWFwVmFsdWUgY2JvckNyZWRlbnRpYWxNYXA7CiAgICAgICAgIGNib3JDcmVkZW50aWFsTWFw
LmVtcGxhY2UoQ0JPUlZhbHVlKGtDcmVkZW50aWFsVHlwZU1hcEtleSksIENCT1JWYWx1ZShwdWJs
aWNLZXlDcmVkZW50aWFsVHlwZVRvU3RyaW5nKGNyZWRlbnRpYWwudHlwZSkpKTsKICAgICAgICAg
Y2JvckNyZWRlbnRpYWxNYXAuZW1wbGFjZShDQk9SVmFsdWUoa0NyZWRlbnRpYWxBbGdvcml0aG1N
YXBLZXkpLCBDQk9SVmFsdWUoY3JlZGVudGlhbC5hbGcpKTsKLSAgICAgICAgY3JlZGVudGlhbFBh
cmFtQXJyYXkuYXBwZW5kKFdURk1vdmUoY2JvckNyZWRlbnRpYWxNYXApKTsKLSAgICB9CisgICAg
ICAgIHJldHVybiBDQk9SVmFsdWUgeyBXVEZNb3ZlKGNib3JDcmVkZW50aWFsTWFwKSB9OworICAg
IH0pOwogICAgIHJldHVybiBDQk9SVmFsdWUoV1RGTW92ZShjcmVkZW50aWFsUGFyYW1BcnJheSkp
OwogfQogCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9Nb2R1bGVzL3dlYmF1dGhuL2ZpZG8v
UGluLmNwcCBiL1NvdXJjZS9XZWJDb3JlL01vZHVsZXMvd2ViYXV0aG4vZmlkby9QaW4uY3BwCmlu
ZGV4IDkxNDJhYmJjOGM2NDgxNjIwMjlhMTI5NzllODk1YjY3MTI3ODEwZTcuLjlmYTY3M2YxODJj
Y2NiMDQ2MjE3MzNhZTM4YzUyMzZkMzYyYjVjODggMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3Jl
L01vZHVsZXMvd2ViYXV0aG4vZmlkby9QaW4uY3BwCisrKyBiL1NvdXJjZS9XZWJDb3JlL01vZHVs
ZXMvd2ViYXV0aG4vZmlkby9QaW4uY3BwCkBAIC03Myw4ICs3Myw4IEBAIHN0YXRpYyBWZWN0b3I8
dWludDhfdD4gbWFrZVBpbkF1dGgoY29uc3QgQ3J5cHRvS2V5SE1BQyYga2V5LCBjb25zdCBWZWN0
b3I8dWludDhfCiBWZWN0b3I8dWludDhfdD4gZW5jb2RlUmF3UHVibGljS2V5KGNvbnN0IFZlY3Rv
cjx1aW50OF90PiYgeCwgY29uc3QgVmVjdG9yPHVpbnQ4X3Q+JiB5KQogewogICAgIFZlY3Rvcjx1
aW50OF90PiByYXdLZXk7Ci0gICAgcmF3S2V5LnJlc2VydmVDYXBhY2l0eSgxICsgeC5zaXplKCkg
KyB5LnNpemUoKSk7Ci0gICAgcmF3S2V5LmFwcGVuZCgweDA0KTsKKyAgICByYXdLZXkucmVzZXJ2
ZUluaXRpYWxDYXBhY2l0eSgxICsgeC5zaXplKCkgKyB5LnNpemUoKSk7CisgICAgcmF3S2V5LnVu
Y2hlY2tlZEFwcGVuZCgweDA0KTsKICAgICByYXdLZXkuYXBwZW5kVmVjdG9yKHgpOwogICAgIHJh
d0tleS5hcHBlbmRWZWN0b3IoeSk7CiAgICAgcmV0dXJuIHJhd0tleTsKZGlmZiAtLWdpdCBhL1Nv
dXJjZS9XZWJDb3JlL01vZHVsZXMvd2ViZGF0YWJhc2UvRGF0YWJhc2VUcmFja2VyLmNwcCBiL1Nv
dXJjZS9XZWJDb3JlL01vZHVsZXMvd2ViZGF0YWJhc2UvRGF0YWJhc2VUcmFja2VyLmNwcAppbmRl
eCBjYTQxN2M5YWIzZDVhMGFmOWMwYmQxYTQyZDVhODU4NDY0MDUzN2Q5Li4xMTlmM2UyZDMzYjA3
NjdlMGQ1MTFlYjlmZDQ3NjBkZTk3NjUzODYzIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9N
b2R1bGVzL3dlYmRhdGFiYXNlL0RhdGFiYXNlVHJhY2tlci5jcHAKKysrIGIvU291cmNlL1dlYkNv
cmUvTW9kdWxlcy93ZWJkYXRhYmFzZS9EYXRhYmFzZVRyYWNrZXIuY3BwCkBAIC00Miw2ICs0Miw3
IEBACiAjaW5jbHVkZSAiU1FMaXRlRmlsZVN5c3RlbS5oIgogI2luY2x1ZGUgIlNRTGl0ZVN0YXRl
bWVudC5oIgogI2luY2x1ZGUgIlNRTGl0ZVRyYW5zYWN0aW9uLmgiCisjaW5jbHVkZSA8d3RmL0Ny
b3NzVGhyZWFkQ29waWVyLmg+CiAjaW5jbHVkZSA8d3RmL0ZpbGVTeXN0ZW0uaD4KICNpbmNsdWRl
IDx3dGYvTWFpblRocmVhZC5oPgogI2luY2x1ZGUgPHd0Zi9OZXZlckRlc3Ryb3llZC5oPgpAQCAt
NTYsMTUgKzU3LDYgQEAKIAogbmFtZXNwYWNlIFdlYkNvcmUgewogCi1zdGF0aWMgVmVjdG9yPFN0
cmluZz4gaXNvbGF0ZWRDb3B5KGNvbnN0IFZlY3RvcjxTdHJpbmc+JiBvcmlnaW5hbCkKLXsKLSAg
ICBWZWN0b3I8U3RyaW5nPiBjb3B5OwotICAgIGNvcHkucmVzZXJ2ZUluaXRpYWxDYXBhY2l0eShv
cmlnaW5hbC5zaXplKCkpOwotICAgIGZvciAoYXV0byYgc3RyaW5nIDogb3JpZ2luYWwpCi0gICAg
ICAgIGNvcHkudW5jaGVja2VkQXBwZW5kKHN0cmluZy5pc29sYXRlZENvcHkoKSk7Ci0gICAgcmV0
dXJuIGNvcHk7Ci19Ci0KIHN0ZDo6dW5pcXVlX3B0cjxEYXRhYmFzZVRyYWNrZXI+IERhdGFiYXNl
VHJhY2tlcjo6dHJhY2tlcldpdGhEYXRhYmFzZVBhdGgoY29uc3QgU3RyaW5nJiBkYXRhYmFzZVBh
dGgpCiB7CiAgICAgcmV0dXJuIHN0ZDo6dW5pcXVlX3B0cjxEYXRhYmFzZVRyYWNrZXI+KG5ldyBE
YXRhYmFzZVRyYWNrZXIoZGF0YWJhc2VQYXRoKSk7CkBAIC00MTksMTIgKzQxMSw4IEBAIFZlY3Rv
cjxTdHJpbmc+IERhdGFiYXNlVHJhY2tlcjo6ZGF0YWJhc2VOYW1lc05vTG9jayhjb25zdCBTZWN1
cml0eU9yaWdpbkRhdGEmIG9yCiAKIFZlY3RvcjxTdHJpbmc+IERhdGFiYXNlVHJhY2tlcjo6ZGF0
YWJhc2VOYW1lcyhjb25zdCBTZWN1cml0eU9yaWdpbkRhdGEmIG9yaWdpbikKIHsKLSAgICBWZWN0
b3I8U3RyaW5nPiBuYW1lczsKLSAgICB7Ci0gICAgICAgIExvY2tlciBsb2NrRGF0YWJhc2UgeyBt
X2RhdGFiYXNlR3VhcmQgfTsKLSAgICAgICAgbmFtZXMgPSBkYXRhYmFzZU5hbWVzTm9Mb2NrKG9y
aWdpbik7Ci0gICAgfQotICAgIHJldHVybiBpc29sYXRlZENvcHkobmFtZXMpOworICAgIExvY2tl
ciBsb2NrRGF0YWJhc2UgeyBtX2RhdGFiYXNlR3VhcmQgfTsKKyAgICByZXR1cm4gY3Jvc3NUaHJl
YWRDb3B5KGRhdGFiYXNlTmFtZXNOb0xvY2sob3JpZ2luKSk7CiB9CiAKIERhdGFiYXNlRGV0YWls
cyBEYXRhYmFzZVRyYWNrZXI6OmRldGFpbHNGb3JOYW1lQW5kT3JpZ2luKGNvbnN0IFN0cmluZyYg
bmFtZSwgY29uc3QgU2VjdXJpdHlPcmlnaW5EYXRhJiBvcmlnaW4pCmRpZmYgLS1naXQgYS9Tb3Vy
Y2UvV2ViQ29yZS9hY2Nlc3NpYmlsaXR5L0FYT2JqZWN0Q2FjaGUuY3BwIGIvU291cmNlL1dlYkNv
cmUvYWNjZXNzaWJpbGl0eS9BWE9iamVjdENhY2hlLmNwcAppbmRleCBmM2E2ZmFkNWUwM2Q5Mzk0
MTE3MThjOGQ4ZjE5MmZiMTMwMzRjNmZkLi4wMzM5YTdkNzc4ZDhmMDljMjU5NzhjMDk3MGFmMzE3
MmExNTNmNTQzIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9hY2Nlc3NpYmlsaXR5L0FYT2Jq
ZWN0Q2FjaGUuY3BwCisrKyBiL1NvdXJjZS9XZWJDb3JlL2FjY2Vzc2liaWxpdHkvQVhPYmplY3RD
YWNoZS5jcHAKQEAgLTExMjEsNyArMTEyMSw3IEBAIHZvaWQgQVhPYmplY3RDYWNoZTo6bm90aWZp
Y2F0aW9uUG9zdFRpbWVyRmlyZWQoKQogCiAgICAgLy8gRmlsdGVyIG91dCB0aGUgbm90aWZpY2F0
aW9ucyB0aGF0IGFyZSBub3QgZ29pbmcgdG8gYmUgcG9zdGVkIHRvIHBsYXRmb3JtIGNsaWVudHMu
CiAgICAgVmVjdG9yPHN0ZDo6cGFpcjxSZWZQdHI8QVhDb3JlT2JqZWN0PiwgQVhOb3RpZmljYXRp
b24+PiBub3RpZmljYXRpb25zVG9Qb3N0OwotICAgIG5vdGlmaWNhdGlvbnNUb1Bvc3QucmVzZXJ2
ZUNhcGFjaXR5KG5vdGlmaWNhdGlvbnMuc2l6ZSgpKTsKKyAgICBub3RpZmljYXRpb25zVG9Qb3N0
LnJlc2VydmVJbml0aWFsQ2FwYWNpdHkobm90aWZpY2F0aW9ucy5zaXplKCkpOwogICAgIGZvciAo
Y29uc3QgYXV0byYgbm90ZSA6IG5vdGlmaWNhdGlvbnMpIHsKICAgICAgICAgQVNTRVJUKG5vdGUu
Zmlyc3QpOwogICAgICAgICBpZiAoIW5vdGUuZmlyc3QtPm9iamVjdElEKCkgfHwgIW5vdGUuZmly
c3QtPmF4T2JqZWN0Q2FjaGUoKSkKQEAgLTExNDMsNyArMTE0Myw3IEBAIHZvaWQgQVhPYmplY3RD
YWNoZTo6bm90aWZpY2F0aW9uUG9zdFRpbWVyRmlyZWQoKQogICAgICAgICAgICAgICAgIGNvbnRp
bnVlOwogICAgICAgICB9CiAKLSAgICAgICAgbm90aWZpY2F0aW9uc1RvUG9zdC5hcHBlbmQobm90
ZSk7CisgICAgICAgIG5vdGlmaWNhdGlvbnNUb1Bvc3QudW5jaGVja2VkQXBwZW5kKG5vdGUpOwog
ICAgIH0KIAogI2lmIEVOQUJMRShBQ0NFU1NJQklMSVRZX0lTT0xBVEVEX1RSRUUpCmRpZmYgLS1n
aXQgYS9Tb3VyY2UvV2ViQ29yZS9hY2Nlc3NpYmlsaXR5L2lzb2xhdGVkdHJlZS9BWElzb2xhdGVk
T2JqZWN0LmNwcCBiL1NvdXJjZS9XZWJDb3JlL2FjY2Vzc2liaWxpdHkvaXNvbGF0ZWR0cmVlL0FY
SXNvbGF0ZWRPYmplY3QuY3BwCmluZGV4IDJkOTY3Mzk1NWViYjc1MjU2N2EzMjljZDRjNDY1ZDQ3
NmRkYjVhNDEuLjMzZWExMGEzMWVmOTNkYWJiODk1ZDU0MjU0MWNhZDg1NGY2ODZlMDIgMTAwNjQ0
Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL2FjY2Vzc2liaWxpdHkvaXNvbGF0ZWR0cmVlL0FYSXNvbGF0
ZWRPYmplY3QuY3BwCisrKyBiL1NvdXJjZS9XZWJDb3JlL2FjY2Vzc2liaWxpdHkvaXNvbGF0ZWR0
cmVlL0FYSXNvbGF0ZWRPYmplY3QuY3BwCkBAIC00NDQsMTcgKzQ0NCwxMCBAQCB2b2lkIEFYSXNv
bGF0ZWRPYmplY3Q6OnNldE1hdGhzY3JpcHRzKEFYUHJvcGVydHlOYW1lIHByb3BlcnR5TmFtZSwg
QVhDb3JlT2JqZWN0JgogICAgIGlmICghbWF0aFNpemUpCiAgICAgICAgIHJldHVybjsKIAotICAg
IFZlY3RvcjxzdGQ6OnBhaXI8QVhJRCwgQVhJRD4+IGlkUGFpcnM7Ci0gICAgaWRQYWlycy5yZXNl
cnZlQ2FwYWNpdHkobWF0aFNpemUpOwotICAgIGZvciAoYXV0byBtYXRoUGFpciA6IHBhaXJzKSB7
Ci0gICAgICAgIHN0ZDo6cGFpcjxBWElELCBBWElEPiBpZFBhaXI7Ci0gICAgICAgIGlmIChtYXRo
UGFpci5maXJzdCkKLSAgICAgICAgICAgIGlkUGFpci5maXJzdCA9IG1hdGhQYWlyLmZpcnN0LT5v
YmplY3RJRCgpOwotICAgICAgICBpZiAobWF0aFBhaXIuc2Vjb25kKQotICAgICAgICAgICAgaWRQ
YWlyLnNlY29uZCA9IG1hdGhQYWlyLnNlY29uZC0+b2JqZWN0SUQoKTsKLSAgICAgICAgaWRQYWly
cy51bmNoZWNrZWRBcHBlbmQoaWRQYWlyKTsKLSAgICB9Ci0gICAgc2V0UHJvcGVydHkocHJvcGVy
dHlOYW1lLCBpZFBhaXJzKTsKKyAgICBhdXRvIGlkUGFpcnMgPSBwYWlycy5tYXAoW10oYXV0byYg
bWF0aFBhaXIpIHsKKyAgICAgICAgcmV0dXJuIHN0ZDo6bWFrZV9wYWlyKG1hdGhQYWlyLmZpcnN0
ID8gbWF0aFBhaXIuZmlyc3QtPm9iamVjdElEKCkgOiBBWElEKCksIG1hdGhQYWlyLnNlY29uZCA/
IG1hdGhQYWlyLnNlY29uZC0+b2JqZWN0SUQoKSA6IEFYSUQoKSk7CisgICAgfSk7CisgICAgc2V0
UHJvcGVydHkocHJvcGVydHlOYW1lLCBXVEZNb3ZlKGlkUGFpcnMpKTsKIH0KIAogdm9pZCBBWElz
b2xhdGVkT2JqZWN0OjpzZXRPYmplY3RQcm9wZXJ0eShBWFByb3BlcnR5TmFtZSBwcm9wZXJ0eU5h
bWUsIEFYQ29yZU9iamVjdCogb2JqZWN0KQpAQCAtNDY3LDE2ICs0NjAsMTMgQEAgdm9pZCBBWElz
b2xhdGVkT2JqZWN0OjpzZXRPYmplY3RQcm9wZXJ0eShBWFByb3BlcnR5TmFtZSBwcm9wZXJ0eU5h
bWUsIEFYQ29yZU9iamUKIAogdm9pZCBBWElzb2xhdGVkT2JqZWN0OjpzZXRPYmplY3RWZWN0b3JQ
cm9wZXJ0eShBWFByb3BlcnR5TmFtZSBwcm9wZXJ0eU5hbWUsIGNvbnN0IEFjY2Vzc2liaWxpdHlD
aGlsZHJlblZlY3RvciYgY2hpbGRyZW4pCiB7Ci0gICAgaWYgKCFjaGlsZHJlbi5zaXplKCkpCisg
ICAgaWYgKGNoaWxkcmVuLmlzRW1wdHkoKSkKICAgICAgICAgcmV0dXJuOwogCi0gICAgVmVjdG9y
PEFYSUQ+IGNoaWxkSURzOwotICAgIGNoaWxkSURzLnJlc2VydmVDYXBhY2l0eShjaGlsZHJlbi5z
aXplKCkpOwotCi0gICAgZm9yIChhdXRvIGNoaWxkIDogY2hpbGRyZW4pCi0gICAgICAgIGNoaWxk
SURzLnVuY2hlY2tlZEFwcGVuZChjaGlsZC0+b2JqZWN0SUQoKSk7Ci0KLSAgICBzZXRQcm9wZXJ0
eShwcm9wZXJ0eU5hbWUsIGNoaWxkSURzKTsKKyAgICBhdXRvIGNoaWxkSURzID0gY2hpbGRyZW4u
bWFwKFtdKGF1dG8mIGNoaWxkKSB7CisgICAgICAgIHJldHVybiBjaGlsZC0+b2JqZWN0SUQoKTsK
KyAgICB9KTsKKyAgICBzZXRQcm9wZXJ0eShwcm9wZXJ0eU5hbWUsIFdURk1vdmUoY2hpbGRJRHMp
KTsKIH0KIAogdm9pZCBBWElzb2xhdGVkT2JqZWN0OjpzZXRQcm9wZXJ0eShBWFByb3BlcnR5TmFt
ZSBwcm9wZXJ0eU5hbWUsIEFYUHJvcGVydHlWYWx1ZVZhcmlhbnQmJiB2YWx1ZSwgYm9vbCBzaG91
bGRSZW1vdmUpCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9hY2Nlc3NpYmlsaXR5L2lzb2xh
dGVkdHJlZS9BWElzb2xhdGVkVHJlZS5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9hY2Nlc3NpYmlsaXR5
L2lzb2xhdGVkdHJlZS9BWElzb2xhdGVkVHJlZS5jcHAKaW5kZXggN2VmMDYyYTBjNjA4YzFhOGVm
MzExOGFlNDQ0OTE2NTIwZGNkNzZjMi4uOGY3ZmNkYTMxMTlmZmZiOTBjMDIzNDUyMjY1NjQ3ZmJl
Yzk2YzIzYSAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvYWNjZXNzaWJpbGl0eS9pc29sYXRl
ZHRyZWUvQVhJc29sYXRlZFRyZWUuY3BwCisrKyBiL1NvdXJjZS9XZWJDb3JlL2FjY2Vzc2liaWxp
dHkvaXNvbGF0ZWR0cmVlL0FYSXNvbGF0ZWRUcmVlLmNwcApAQCAtMTU5LDEyICsxNTksMTIgQEAg
VmVjdG9yPFJlZlB0cjxBWENvcmVPYmplY3Q+PiBBWElzb2xhdGVkVHJlZTo6b2JqZWN0c0ZvcklE
cyhjb25zdCBWZWN0b3I8QVhJRD4mIGEKIHsKICAgICBBWFRSQUNFKCJBWElzb2xhdGVkVHJlZTo6
b2JqZWN0c0ZvcklEcyIpOwogICAgIFZlY3RvcjxSZWZQdHI8QVhDb3JlT2JqZWN0Pj4gcmVzdWx0
OwotICAgIHJlc3VsdC5yZXNlcnZlQ2FwYWNpdHkoYXhJRHMuc2l6ZSgpKTsKLQotICAgIGZvciAo
Y29uc3QgYXV0byYgYXhJRCA6IGF4SURzKSB7CisgICAgcmVzdWx0LnJlc2VydmVJbml0aWFsQ2Fw
YWNpdHkoYXhJRHMuc2l6ZSgpKTsKKyAgICBmb3IgKGF1dG8mIGF4SUQgOiBheElEcykgewogICAg
ICAgICBpZiAoYXV0byBvYmplY3QgPSBub2RlRm9ySUQoYXhJRCkpCiAgICAgICAgICAgICByZXN1
bHQudW5jaGVja2VkQXBwZW5kKG9iamVjdCk7CiAgICAgfQorICAgIHJlc3VsdC5zaHJpbmtUb0Zp
dCgpOwogCiAgICAgcmV0dXJuIHJlc3VsdDsKIH0KQEAgLTI4NSwxNSArMjg1LDExIEBAIHZvaWQg
QVhJc29sYXRlZFRyZWU6OmNvbGxlY3ROb2RlQ2hhbmdlc0ZvclN1YnRyZWUoQVhDb3JlT2JqZWN0
JiBheE9iamVjdCwgQVhJRCBwCiAgICAgICAgIGlkc0JlaW5nQ2hhbmdlZC0+YWRkKG5vZGVDaGFu
Z2UuaXNvbGF0ZWRPYmplY3QtPm9iamVjdElEKCkpOwogICAgIGNoYW5nZXMuYXBwZW5kKFdURk1v
dmUobm9kZUNoYW5nZSkpOwogCi0gICAgYXV0byBheENoaWxkcmVuID0gYXhPYmplY3QuY2hpbGRy
ZW4oKTsKLSAgICBWZWN0b3I8QVhJRD4gYXhDaGlsZHJlbklEczsKLSAgICBheENoaWxkcmVuSURz
LnJlc2VydmVJbml0aWFsQ2FwYWNpdHkoYXhDaGlsZHJlbi5zaXplKCkpOwotICAgIGZvciAoY29u
c3QgYXV0byYgYXhDaGlsZCA6IGF4Q2hpbGRyZW4pIHsKKyAgICBhdXRvIGF4Q2hpbGRyZW5JRHMg
PSBheE9iamVjdC5jaGlsZHJlbigpLm1hcChbJl0oYXV0byYgYXhDaGlsZCkgewogICAgICAgICBj
b2xsZWN0Tm9kZUNoYW5nZXNGb3JTdWJ0cmVlKCpheENoaWxkLCBheE9iamVjdC5vYmplY3RJRCgp
LCBhdHRhY2hXcmFwcGVyLCBjaGFuZ2VzLCBpZHNCZWluZ0NoYW5nZWQpOwotICAgICAgICBheENo
aWxkcmVuSURzLnVuY2hlY2tlZEFwcGVuZChheENoaWxkLT5vYmplY3RJRCgpKTsKLSAgICB9Ci0K
LSAgICBtX25vZGVNYXAuc2V0KGF4T2JqZWN0Lm9iamVjdElEKCksIFBhcmVudENoaWxkcmVuSURz
IHsgcGFyZW50SUQsIGF4Q2hpbGRyZW5JRHMgfSk7CisgICAgICAgIHJldHVybiBheENoaWxkLT5v
YmplY3RJRCgpOworICAgIH0pOworICAgIG1fbm9kZU1hcC5zZXQoYXhPYmplY3Qub2JqZWN0SUQo
KSwgUGFyZW50Q2hpbGRyZW5JRHMgeyBwYXJlbnRJRCwgV1RGTW92ZShheENoaWxkcmVuSURzKSB9
KTsKIH0KIAogdm9pZCBBWElzb2xhdGVkVHJlZTo6dXBkYXRlTm9kZShBWENvcmVPYmplY3QmIGF4
T2JqZWN0KQpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvYW5pbWF0aW9uL0NTU1Byb3BlcnR5
QW5pbWF0aW9uLmNwcCBiL1NvdXJjZS9XZWJDb3JlL2FuaW1hdGlvbi9DU1NQcm9wZXJ0eUFuaW1h
dGlvbi5jcHAKaW5kZXggMjRhMzZlY2I4NzQwYjRmMTU2YzVhODkyYjY1MzhjNWFjOTBiMTRmOS4u
ZTM1OWEwNDNiMmUzY2YzOWY5YzI2YmM1OWU5OGYxMDVlMTMyYzEwNSAxMDA2NDQKLS0tIGEvU291
cmNlL1dlYkNvcmUvYW5pbWF0aW9uL0NTU1Byb3BlcnR5QW5pbWF0aW9uLmNwcAorKysgYi9Tb3Vy
Y2UvV2ViQ29yZS9hbmltYXRpb24vQ1NTUHJvcGVydHlBbmltYXRpb24uY3BwCkBAIC0yODY1LDYg
KzI4NjUsNyBAQCBDU1NQcm9wZXJ0eUFuaW1hdGlvbldyYXBwZXJNYXA6OkNTU1Byb3BlcnR5QW5p
bWF0aW9uV3JhcHBlck1hcCgpCiAgICAgICAgICAgICBBU1NFUlQobV9wcm9wZXJ0eVdyYXBwZXJz
W3dyYXBwZXJJbmRleF0pOwogICAgICAgICAgICAgbG9uZ2hhbmRXcmFwcGVycy51bmNoZWNrZWRB
cHBlbmQobV9wcm9wZXJ0eVdyYXBwZXJzW3dyYXBwZXJJbmRleF0uZ2V0KCkpOwogICAgICAgICB9
CisgICAgICAgIGxvbmdoYW5kV3JhcHBlcnMuc2hyaW5rVG9GaXQoKTsKIAogICAgICAgICBtX3By
b3BlcnR5V3JhcHBlcnMudW5jaGVja2VkQXBwZW5kKG1ha2VVbmlxdWU8U2hvcnRoYW5kUHJvcGVy
dHlXcmFwcGVyPihwcm9wZXJ0eUlELCBXVEZNb3ZlKGxvbmdoYW5kV3JhcHBlcnMpKSk7CiAgICAg
ICAgIGluZGV4RnJvbVByb3BlcnR5SUQocHJvcGVydHlJRCkgPSBhbmltYXRhYmxlTG9uZ2hhbmRQ
cm9wZXJ0aWVzQ291bnQgKyBpOwpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvYmluZGluZ3Mv
anMvU2VyaWFsaXplZFNjcmlwdFZhbHVlLmNwcCBiL1NvdXJjZS9XZWJDb3JlL2JpbmRpbmdzL2pz
L1NlcmlhbGl6ZWRTY3JpcHRWYWx1ZS5jcHAKaW5kZXggMjBjMWJjYmM0NGQ2Y2QxYTQ4NTliZDk1
N2FkYjU0OTA1NDBhNWMwZS4uZDE0ZTc5MDI4OGZkYzMyYjM5MzM1OWFiZWE1Njg3N2Q0NzU2ZWI4
MiAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvYmluZGluZ3MvanMvU2VyaWFsaXplZFNjcmlw
dFZhbHVlLmNwcAorKysgYi9Tb3VyY2UvV2ViQ29yZS9iaW5kaW5ncy9qcy9TZXJpYWxpemVkU2Ny
aXB0VmFsdWUuY3BwCkBAIC0yNDU2LDExICsyNDU2LDExIEBAIHByaXZhdGU6CiAgICAgICAgIHB0
ciArPSBsZW5ndGggKiBzaXplb2YoVUNoYXIpOwogI2Vsc2UKICAgICAgICAgVmVjdG9yPFVDaGFy
PiBidWZmZXI7Ci0gICAgICAgIGJ1ZmZlci5yZXNlcnZlQ2FwYWNpdHkobGVuZ3RoKTsKKyAgICAg
ICAgYnVmZmVyLnJlc2VydmVJbml0aWFsQ2FwYWNpdHkobGVuZ3RoKTsKICAgICAgICAgZm9yICh1
bnNpZ25lZCBpID0gMDsgaSA8IGxlbmd0aDsgaSsrKSB7CiAgICAgICAgICAgICB1aW50MTZfdCBj
aDsKICAgICAgICAgICAgIHJlYWRMaXR0bGVFbmRpYW4ocHRyLCBlbmQsIGNoKTsKLSAgICAgICAg
ICAgIGJ1ZmZlci5hcHBlbmQoY2gpOworICAgICAgICAgICAgYnVmZmVyLnVuY2hlY2tlZEFwcGVu
ZChjaCk7CiAgICAgICAgIH0KICAgICAgICAgc3RyID0gU3RyaW5nOjphZG9wdChXVEZNb3ZlKGJ1
ZmZlcikpOwogI2VuZGlmCkBAIC00NTcyLDEyICs0NTcyLDkgQEAgdWludDMyX3QgU2VyaWFsaXpl
ZFNjcmlwdFZhbHVlOjp3aXJlRm9ybWF0VmVyc2lvbigpCiAKIFZlY3RvcjxTdHJpbmc+IFNlcmlh
bGl6ZWRTY3JpcHRWYWx1ZTo6YmxvYlVSTHMoKSBjb25zdAogewotICAgIFZlY3RvcjxTdHJpbmc+
IHJlc3VsdDsKLSAgICByZXN1bHQucmVzZXJ2ZUluaXRpYWxDYXBhY2l0eShtX2Jsb2JIYW5kbGVz
LnNpemUoKSk7Ci0gICAgZm9yIChhdXRvJiBoYW5kbGUgOiBtX2Jsb2JIYW5kbGVzKQotICAgICAg
ICByZXN1bHQudW5jaGVja2VkQXBwZW5kKGhhbmRsZS51cmwoKS5zdHJpbmcoKSk7Ci0KLSAgICBy
ZXR1cm4gcmVzdWx0OworICAgIHJldHVybiBtX2Jsb2JIYW5kbGVzLm1hcChbXShhdXRvJiBoYW5k
bGUpIHsKKyAgICAgICAgcmV0dXJuIGhhbmRsZS51cmwoKS5zdHJpbmcoKTsKKyAgICB9KTsKIH0K
IAogdm9pZCBTZXJpYWxpemVkU2NyaXB0VmFsdWU6OndyaXRlQmxvYnNUb0Rpc2tGb3JJbmRleGVk
REIoQ29tcGxldGlvbkhhbmRsZXI8dm9pZChJREJWYWx1ZSYmKT4mJiBjb21wbGV0aW9uSGFuZGxl
cikKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL2NyeXB0by9tYWMvQ3J5cHRvQWxnb3JpdGht
RUNEU0FNYWMuY3BwIGIvU291cmNlL1dlYkNvcmUvY3J5cHRvL21hYy9DcnlwdG9BbGdvcml0aG1F
Q0RTQU1hYy5jcHAKaW5kZXggNjhhYTc2N2M5Zjg0ZjNhNThiYjgyMGNlZDc4OWUzZDBmY2RhMWFk
MC4uYTFiNjg2NzAyZGI3YTg4ODhhOGRiZTZlMDNhODhiYWI5YzQ3Zjk5MiAxMDA2NDQKLS0tIGEv
U291cmNlL1dlYkNvcmUvY3J5cHRvL21hYy9DcnlwdG9BbGdvcml0aG1FQ0RTQU1hYy5jcHAKKysr
IGIvU291cmNlL1dlYkNvcmUvY3J5cHRvL21hYy9DcnlwdG9BbGdvcml0aG1FQ0RTQU1hYy5jcHAK
QEAgLTYzLDcgKzYzLDcgQEAgc3RhdGljIEV4Y2VwdGlvbk9yPFZlY3Rvcjx1aW50OF90Pj4gc2ln
bkVDRFNBKENyeXB0b0FsZ29yaXRobUlkZW50aWZpZXIgaGFzaCwgY28KICAgICAvLyBGSVhNRTog
PHJkYXI6Ly9wcm9ibGVtLzMxNjE4MzcxPgogICAgIC8vIGNvbnZlcnQgdGhlIERFUiBiaW5hcnkg
aW50byByICsgcwogICAgIFZlY3Rvcjx1aW50OF90PiBuZXdTaWduYXR1cmU7Ci0gICAgbmV3U2ln
bmF0dXJlLnJlc2VydmVDYXBhY2l0eShrZXlMZW5ndGhJbkJ5dGVzICogMik7CisgICAgbmV3U2ln
bmF0dXJlLnJlc2VydmVJbml0aWFsQ2FwYWNpdHkoa2V5TGVuZ3RoSW5CeXRlcyAqIDIpOwogICAg
IHNpemVfdCBvZmZzZXQgPSAxOyAvLyBza2lwIHRhZwogICAgIG9mZnNldCArPSBieXRlc1VzZWRU
b0VuY29kZWRMZW5ndGgoc2lnbmF0dXJlW29mZnNldF0pOyAvLyBza2lwIGxlbmd0aAogICAgICsr
b2Zmc2V0OyAvLyBza2lwIHRhZwpAQCAtNzEsNyArNzEsNyBAQCBzdGF0aWMgRXhjZXB0aW9uT3I8
VmVjdG9yPHVpbnQ4X3Q+PiBzaWduRUNEU0EoQ3J5cHRvQWxnb3JpdGhtSWRlbnRpZmllciBoYXNo
LCBjbwogICAgIC8vIElmIHIgPCBrZXlMZW5ndGhJbkJ5dGVzLCBmaWxsIHRoZSBoZWFkIG9mIHIg
d2l0aCAwcy4KICAgICBzaXplX3QgYnl0ZXNUb0NvcHkgPSBrZXlMZW5ndGhJbkJ5dGVzOwogICAg
IGlmIChzaWduYXR1cmVbb2Zmc2V0XSA8IGtleUxlbmd0aEluQnl0ZXMpIHsKLSAgICAgICAgbmV3
U2lnbmF0dXJlLnJlc2l6ZShrZXlMZW5ndGhJbkJ5dGVzIC0gc2lnbmF0dXJlW29mZnNldF0pOwor
ICAgICAgICBuZXdTaWduYXR1cmUuZ3JvdyhrZXlMZW5ndGhJbkJ5dGVzIC0gc2lnbmF0dXJlW29m
ZnNldF0pOwogICAgICAgICBtZW1zZXQobmV3U2lnbmF0dXJlLmRhdGEoKSwgSW5pdGlhbE9jdGV0
LCBrZXlMZW5ndGhJbkJ5dGVzIC0gc2lnbmF0dXJlW29mZnNldF0pOwogICAgICAgICBieXRlc1Rv
Q29weSA9IHNpZ25hdHVyZVtvZmZzZXRdOwogICAgIH0gZWxzZSBpZiAoc2lnbmF0dXJlW29mZnNl
dF0gPiBrZXlMZW5ndGhJbkJ5dGVzKSAvLyBPdGhlcndpc2Ugc2tpcCB0aGUgbGVhZGluZyAwcyBv
ZiByLgpAQCAtMTM0LDcgKzEzNCw3IEBAIHN0YXRpYyBFeGNlcHRpb25Pcjxib29sPiB2ZXJpZnlF
Q0RTQShDcnlwdG9BbGdvcml0aG1JZGVudGlmaWVyIGhhc2gsIGNvbnN0IFBsYXRmCiAKICAgICAv
LyBDb25zdHJ1Y3QgdGhlIERFUiBzaWduYXR1cmUuCiAgICAgVmVjdG9yPHVpbnQ4X3Q+IG5ld1Np
Z25hdHVyZTsKLSAgICBuZXdTaWduYXR1cmUucmVzZXJ2ZUNhcGFjaXR5KDYgKyBrZXlMZW5ndGhJ
bkJ5dGVzICogMyAgKyByTmVlZHNJbml0aWFsT2N0ZXQgKyBzTmVlZHNJbml0aWFsT2N0ZXQgLSBy
U3RhcnQgLSBzU3RhcnQpOworICAgIG5ld1NpZ25hdHVyZS5yZXNlcnZlSW5pdGlhbENhcGFjaXR5
KDYgKyBrZXlMZW5ndGhJbkJ5dGVzICogMyAgKyByTmVlZHNJbml0aWFsT2N0ZXQgKyBzTmVlZHNJ
bml0aWFsT2N0ZXQgLSByU3RhcnQgLSBzU3RhcnQpOwogICAgIG5ld1NpZ25hdHVyZS5hcHBlbmQo
U2VxdWVuY2VNYXJrKTsKICAgICBhZGRFbmNvZGVkQVNOMUxlbmd0aChuZXdTaWduYXR1cmUsIDQg
KyBrZXlMZW5ndGhJbkJ5dGVzICogMyAgKyByTmVlZHNJbml0aWFsT2N0ZXQgKyBzTmVlZHNJbml0
aWFsT2N0ZXQgLSByU3RhcnQgLSBzU3RhcnQpOwogICAgIG5ld1NpZ25hdHVyZS5hcHBlbmQoSW50
ZWdlck1hcmspOwpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvY3J5cHRvL21hYy9DcnlwdG9L
ZXlFQ01hYy5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9jcnlwdG8vbWFjL0NyeXB0b0tleUVDTWFjLmNw
cAppbmRleCBjZDk2MmY3OTdiMjI0Yzc4OGZlY2RmZTg1OTJjN2Y0MjRkMWFlYzhkLi42MGI3M2Zk
YmE2ODY5YWVjZGQ4NWViMDFhMTE5NmNiMDFjOWY5N2JjIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2Vi
Q29yZS9jcnlwdG8vbWFjL0NyeXB0b0tleUVDTWFjLmNwcAorKysgYi9Tb3VyY2UvV2ViQ29yZS9j
cnlwdG8vbWFjL0NyeXB0b0tleUVDTWFjLmNwcApAQCAtMjgyLDcgKzI4Miw3IEBAIFZlY3Rvcjx1
aW50OF90PiBDcnlwdG9LZXlFQzo6cGxhdGZvcm1FeHBvcnRTcGtpKCkgY29uc3QKICAgICBzaXpl
X3QgdG90YWxTaXplID0gc2l6ZW9mKElkRWNQdWJsaWNLZXkpICsgb2lkU2l6ZSArIGJ5dGVzTmVl
ZGVkRm9yRW5jb2RlZExlbmd0aChrZXlTaXplICsgMSkgKyBrZXlTaXplICsgNDsKIAogICAgIFZl
Y3Rvcjx1aW50OF90PiByZXN1bHQ7Ci0gICAgcmVzdWx0LnJlc2VydmVDYXBhY2l0eSh0b3RhbFNp
emUgKyBieXRlc05lZWRlZEZvckVuY29kZWRMZW5ndGgodG90YWxTaXplKSArIDEpOworICAgIHJl
c3VsdC5yZXNlcnZlSW5pdGlhbENhcGFjaXR5KHRvdGFsU2l6ZSArIGJ5dGVzTmVlZGVkRm9yRW5j
b2RlZExlbmd0aCh0b3RhbFNpemUpICsgMSk7CiAgICAgcmVzdWx0LmFwcGVuZChTZXF1ZW5jZU1h
cmspOwogICAgIGFkZEVuY29kZWRBU04xTGVuZ3RoKHJlc3VsdCwgdG90YWxTaXplKTsKICAgICBy
ZXN1bHQuYXBwZW5kKFNlcXVlbmNlTWFyayk7CkBAIC0zODgsNyArMzg4LDcgQEAgVmVjdG9yPHVp
bnQ4X3Q+IENyeXB0b0tleUVDOjpwbGF0Zm9ybUV4cG9ydFBrY3M4KCkgY29uc3QKICAgICBzaXpl
X3QgdG90YWxTaXplID0gc2l6ZW9mKFZlcnNpb24pICsgc2l6ZW9mKElkRWNQdWJsaWNLZXkpICsg
b2lkU2l6ZSArIGJ5dGVzTmVlZGVkRm9yRW5jb2RlZExlbmd0aChwcml2YXRlS2V5U2l6ZSkgKyBw
cml2YXRlS2V5U2l6ZSArIDM7CiAKICAgICBWZWN0b3I8dWludDhfdD4gcmVzdWx0OwotICAgIHJl
c3VsdC5yZXNlcnZlQ2FwYWNpdHkodG90YWxTaXplICsgYnl0ZXNOZWVkZWRGb3JFbmNvZGVkTGVu
Z3RoKHRvdGFsU2l6ZSkgKyAxKTsKKyAgICByZXN1bHQucmVzZXJ2ZUluaXRpYWxDYXBhY2l0eSh0
b3RhbFNpemUgKyBieXRlc05lZWRlZEZvckVuY29kZWRMZW5ndGgodG90YWxTaXplKSArIDEpOwog
ICAgIHJlc3VsdC5hcHBlbmQoU2VxdWVuY2VNYXJrKTsKICAgICBhZGRFbmNvZGVkQVNOMUxlbmd0
aChyZXN1bHQsIHRvdGFsU2l6ZSk7CiAgICAgcmVzdWx0LmFwcGVuZChWZXJzaW9uLCBzaXplb2Yo
VmVyc2lvbikpOwpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvY3J5cHRvL21hYy9DcnlwdG9L
ZXlSU0FNYWMuY3BwIGIvU291cmNlL1dlYkNvcmUvY3J5cHRvL21hYy9DcnlwdG9LZXlSU0FNYWMu
Y3BwCmluZGV4IGI5MmJkZGI0YjMzMDZiNzVmNTgxZjI1NDNmZmQxOGU5MTAzNjdhNDYuLjkzNDg2
ODVjNzY2YTUyZWYyYjcxODU3NmU1NzUwODQzYTcyYzhlM2EgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9X
ZWJDb3JlL2NyeXB0by9tYWMvQ3J5cHRvS2V5UlNBTWFjLmNwcAorKysgYi9Tb3VyY2UvV2ViQ29y
ZS9jcnlwdG8vbWFjL0NyeXB0b0tleVJTQU1hYy5jcHAKQEAgLTM0Miw3ICszNDIsNyBAQCBFeGNl
cHRpb25PcjxWZWN0b3I8dWludDhfdD4+IENyeXB0b0tleVJTQTo6ZXhwb3J0U3BraSgpIGNvbnN0
CiAKICAgICAvLyBQZXIgaHR0cHM6Ly90b29scy5pZXRmLm9yZy9odG1sL3JmYzUyODAjc2VjdGlv
bi00LjEuIHN1YmplY3RQdWJsaWNLZXlJbmZvLgogICAgIFZlY3Rvcjx1aW50OF90PiByZXN1bHQ7
Ci0gICAgcmVzdWx0LnJlc2VydmVDYXBhY2l0eSh0b3RhbFNpemUgKyBieXRlc05lZWRlZEZvckVu
Y29kZWRMZW5ndGgodG90YWxTaXplKSArIDEpOworICAgIHJlc3VsdC5yZXNlcnZlSW5pdGlhbENh
cGFjaXR5KHRvdGFsU2l6ZSArIGJ5dGVzTmVlZGVkRm9yRW5jb2RlZExlbmd0aCh0b3RhbFNpemUp
ICsgMSk7CiAgICAgcmVzdWx0LmFwcGVuZChTZXF1ZW5jZU1hcmspOwogICAgIGFkZEVuY29kZWRB
U04xTGVuZ3RoKHJlc3VsdCwgdG90YWxTaXplKTsKICAgICByZXN1bHQuYXBwZW5kKFJTQU9JREhl
YWRlciwgc2l6ZW9mKFJTQU9JREhlYWRlcikpOwpAQCAtNDAxLDcgKzQwMSw3IEBAIEV4Y2VwdGlv
bk9yPFZlY3Rvcjx1aW50OF90Pj4gQ3J5cHRvS2V5UlNBOjpleHBvcnRQa2NzOCgpIGNvbnN0CiAK
ICAgICAvLyBQZXIgaHR0cHM6Ly90b29scy5pZXRmLm9yZy9odG1sL3JmYzUyMDgjc2VjdGlvbi01
LiBQcml2YXRlS2V5SW5mby4KICAgICBWZWN0b3I8dWludDhfdD4gcmVzdWx0OwotICAgIHJlc3Vs
dC5yZXNlcnZlQ2FwYWNpdHkodG90YWxTaXplICsgYnl0ZXNOZWVkZWRGb3JFbmNvZGVkTGVuZ3Ro
KHRvdGFsU2l6ZSkgKyAxKTsKKyAgICByZXN1bHQucmVzZXJ2ZUluaXRpYWxDYXBhY2l0eSh0b3Rh
bFNpemUgKyBieXRlc05lZWRlZEZvckVuY29kZWRMZW5ndGgodG90YWxTaXplKSArIDEpOwogICAg
IHJlc3VsdC5hcHBlbmQoU2VxdWVuY2VNYXJrKTsKICAgICBhZGRFbmNvZGVkQVNOMUxlbmd0aChy
ZXN1bHQsIHRvdGFsU2l6ZSk7CiAgICAgcmVzdWx0LmFwcGVuZChWZXJzaW9uLCBzaXplb2YoVmVy
c2lvbikpOwpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvY3NzL0NTU0Jhc2ljU2hhcGVzLmNw
cCBiL1NvdXJjZS9XZWJDb3JlL2Nzcy9DU1NCYXNpY1NoYXBlcy5jcHAKaW5kZXggMmNiYzFjZWZk
MjNlOGE5MDFmZWFlMGQyMGM5ZjZmNzVmMGZjYjUwMi4uZTI4NTUxZTdiMmY0NDc2MjE5NzFiYjBi
NGJmMjNhOTlmMmI1YzcyNSAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvY3NzL0NTU0Jhc2lj
U2hhcGVzLmNwcAorKysgYi9Tb3VyY2UvV2ViQ29yZS9jc3MvQ1NTQmFzaWNTaGFwZXMuY3BwCkBA
IC0yNjEsMTMgKzI2MSwxMCBAQCBzdGF0aWMgU3RyaW5nIGJ1aWxkUG9seWdvblN0cmluZyhjb25z
dCBXaW5kUnVsZSYgd2luZFJ1bGUsIGNvbnN0IFZlY3RvcjxTdHJpbmc+JgogCiBTdHJpbmcgQ1NT
QmFzaWNTaGFwZVBvbHlnb246OmNzc1RleHQoKSBjb25zdAogewotICAgIFZlY3RvcjxTdHJpbmc+
IHBvaW50czsKLSAgICBwb2ludHMucmVzZXJ2ZUluaXRpYWxDYXBhY2l0eShtX3ZhbHVlcy5zaXpl
KCkpOwotCi0gICAgZm9yIChhdXRvJiBzaGFwZVZhbHVlIDogbV92YWx1ZXMpCi0gICAgICAgIHBv
aW50cy51bmNoZWNrZWRBcHBlbmQoc2hhcGVWYWx1ZS0+Y3NzVGV4dCgpKTsKLQotICAgIHJldHVy
biBidWlsZFBvbHlnb25TdHJpbmcobV93aW5kUnVsZSwgcG9pbnRzKTsKKyAgICBhdXRvIHBvaW50
cyA9IG1fdmFsdWVzLm1hcChbXShhdXRvJiBzaGFwZVZhbHVlKSB7CisgICAgICAgIHJldHVybiBz
aGFwZVZhbHVlLT5jc3NUZXh0KCk7CisgICAgfSk7CisgICAgcmV0dXJuIGJ1aWxkUG9seWdvblN0
cmluZyhtX3dpbmRSdWxlLCBXVEZNb3ZlKHBvaW50cykpOwogfQogCiBib29sIENTU0Jhc2ljU2hh
cGVQb2x5Z29uOjplcXVhbHMoY29uc3QgQ1NTQmFzaWNTaGFwZSYgc2hhcGUpIGNvbnN0CmRpZmYg
LS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9jc3MvQ1NTQ29tcHV0ZWRTdHlsZURlY2xhcmF0aW9uLmNw
cCBiL1NvdXJjZS9XZWJDb3JlL2Nzcy9DU1NDb21wdXRlZFN0eWxlRGVjbGFyYXRpb24uY3BwCmlu
ZGV4IDZlOTg1YmJlMjRhNzU4ZTQxN2YyY2I2MTk1YjMzZWUyYzc3YmU0NTEuLmQyYzVjNzczYWQ2
YzJjNjA1YmRkYmY1YWI1ZjU2Y2QzM2EyZTMwYmQgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3Jl
L2Nzcy9DU1NDb21wdXRlZFN0eWxlRGVjbGFyYXRpb24uY3BwCisrKyBiL1NvdXJjZS9XZWJDb3Jl
L2Nzcy9DU1NDb21wdXRlZFN0eWxlRGVjbGFyYXRpb24uY3BwCkBAIC00Mzg0LDggKzQzODQsOSBA
QCBSZWY8TXV0YWJsZVN0eWxlUHJvcGVydGllcz4gQ29tcHV0ZWRTdHlsZUV4dHJhY3Rvcjo6Y29w
eVByb3BlcnRpZXNJblNldChjb25zdCBDUwogICAgIGxpc3QucmVzZXJ2ZUluaXRpYWxDYXBhY2l0
eShsZW5ndGgpOwogICAgIGZvciAodW5zaWduZWQgaSA9IDA7IGkgPCBsZW5ndGg7ICsraSkgewog
ICAgICAgICBpZiAoYXV0byB2YWx1ZSA9IHByb3BlcnR5VmFsdWUoc2V0W2ldKSkKLSAgICAgICAg
ICAgIGxpc3QuYXBwZW5kKENTU1Byb3BlcnR5KHNldFtpXSwgV1RGTW92ZSh2YWx1ZSksIGZhbHNl
KSk7CisgICAgICAgICAgICBsaXN0LnVuY2hlY2tlZEFwcGVuZChDU1NQcm9wZXJ0eShzZXRbaV0s
IFdURk1vdmUodmFsdWUpLCBmYWxzZSkpOwogICAgIH0KKyAgICBsaXN0LnNocmlua1RvRml0KCk7
CiAgICAgcmV0dXJuIE11dGFibGVTdHlsZVByb3BlcnRpZXM6OmNyZWF0ZShXVEZNb3ZlKGxpc3Qp
KTsKIH0KIApAQCAtNDM5OCw2ICs0Mzk5LDcgQEAgUmVmPE11dGFibGVTdHlsZVByb3BlcnRpZXM+
IENvbXB1dGVkU3R5bGVFeHRyYWN0b3I6OmNvcHlQcm9wZXJ0aWVzKCkKICAgICAgICAgaWYgKGF1
dG8gdmFsdWUgPSBwcm9wZXJ0eVZhbHVlKHByb3BlcnR5SUQpKQogICAgICAgICAgICAgbGlzdC5h
cHBlbmQoQ1NTUHJvcGVydHkocHJvcGVydHlJRCwgV1RGTW92ZSh2YWx1ZSkpKTsKICAgICB9Cisg
ICAgbGlzdC5zaHJpbmtUb0ZpdCgpOwogICAgIHJldHVybiBNdXRhYmxlU3R5bGVQcm9wZXJ0aWVz
OjpjcmVhdGUoV1RGTW92ZShsaXN0KSk7CiB9CiAKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3Jl
L2Nzcy9DU1NGb250RmFjZS5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9jc3MvQ1NTRm9udEZhY2UuY3Bw
CmluZGV4IGViM2JjMGIzMjI0ZDc1YTYxMjNkYzJiYWQ3OTY4M2M3N2I5YTg1NjkuLjQzYTVmMTZk
ZDcyYzU5Y2VhYjcwM2Q1NGQ3ZTIyZTI3MzMyZmMxY2QgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJD
b3JlL2Nzcy9DU1NGb250RmFjZS5jcHAKKysrIGIvU291cmNlL1dlYkNvcmUvY3NzL0NTU0ZvbnRG
YWNlLmNwcApAQCAtNTQsMTMgKzU0LDggQEAgREVGSU5FX0FMTE9DQVRPUl9XSVRIX0hFQVBfSURF
TlRJRklFUihDU1NGb250RmFjZSk7CiAKIHRlbXBsYXRlPHR5cGVuYW1lIFQ+IHZvaWQgaXRlcmF0
ZUNsaWVudHMoSGFzaFNldDxDU1NGb250RmFjZTo6Q2xpZW50Kj4mIGNsaWVudHMsIFQgY2FsbGJh
Y2spCiB7Ci0gICAgVmVjdG9yPFJlZjxDU1NGb250RmFjZTo6Q2xpZW50Pj4gY2xpZW50c0NvcHk7
Ci0gICAgY2xpZW50c0NvcHkucmVzZXJ2ZUluaXRpYWxDYXBhY2l0eShjbGllbnRzLnNpemUoKSk7
Ci0gICAgZm9yIChhdXRvKiBjbGllbnQgOiBjbGllbnRzKQotICAgICAgICBjbGllbnRzQ29weS51
bmNoZWNrZWRBcHBlbmQoKmNsaWVudCk7Ci0KLSAgICBmb3IgKGF1dG8mIGNsaWVudCA6IGNsaWVu
dHNDb3B5KQotICAgICAgICBjYWxsYmFjayhjbGllbnQpOworICAgIGZvciAoYXV0byYgY2xpZW50
IDogY29weVRvVmVjdG9yT2Y8UmVmUHRyPENTU0ZvbnRGYWNlOjpDbGllbnQ+PihjbGllbnRzKSkK
KyAgICAgICAgY2FsbGJhY2soKmNsaWVudCk7CiB9CiAKIHZvaWQgQ1NTRm9udEZhY2U6OmFwcGVu
ZFNvdXJjZXMoQ1NTRm9udEZhY2UmIGZvbnRGYWNlLCBDU1NWYWx1ZUxpc3QmIHNyY0xpc3QsIFNj
cmlwdEV4ZWN1dGlvbkNvbnRleHQqIGNvbnRleHQsIGJvb2wgaXNJbml0aWF0aW5nRWxlbWVudElu
VXNlckFnZW50U2hhZG93VHJlZSkKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL2Nzcy9DU1NG
b250RmFjZVNldC5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9jc3MvQ1NTRm9udEZhY2VTZXQuY3BwCmlu
ZGV4IDYyZWVjYjVhNWQyNDFkY2JlOGIyNDkzNWJiNmMyZjMyODk0OTE0YWUuLmViODg5OTM5Njhi
MzBjMDA4NzdkYmViNjBjODRhZDRmMjUyNmQ4ZjAgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3Jl
L2Nzcy9DU1NGb250RmFjZVNldC5jcHAKKysrIGIvU291cmNlL1dlYkNvcmUvY3NzL0NTU0ZvbnRG
YWNlU2V0LmNwcApAQCAtNDI4LDExICs0MjgsOSBAQCBFeGNlcHRpb25PcjxWZWN0b3I8c3RkOjpy
ZWZlcmVuY2Vfd3JhcHBlcjxDU1NGb250RmFjZT4+PiBDU1NGb250RmFjZVNldDo6bWF0Y2hpbgog
ICAgICAgICB9CiAgICAgfQogCi0gICAgVmVjdG9yPHN0ZDo6cmVmZXJlbmNlX3dyYXBwZXI8Q1NT
Rm9udEZhY2U+PiByZXN1bHQ7Ci0gICAgcmVzdWx0LnJlc2VydmVJbml0aWFsQ2FwYWNpdHkocmVz
dWx0Q29uc3RpdHVlbnRzLnNpemUoKSk7Ci0gICAgZm9yIChhdXRvKiBjb25zdGl0dWVudCA6IHJl
c3VsdENvbnN0aXR1ZW50cykKLSAgICAgICAgcmVzdWx0LnVuY2hlY2tlZEFwcGVuZCgqY29uc3Rp
dHVlbnQpOwotICAgIHJldHVybiByZXN1bHQ7CisgICAgcmV0dXJuIFdURjo6bWFwKHJlc3VsdENv
bnN0aXR1ZW50cywgW10oYXV0byogY29uc3RpdHVlbnQpIC0+IHN0ZDo6cmVmZXJlbmNlX3dyYXBw
ZXI8Q1NTRm9udEZhY2U+IHsKKyAgICAgICAgcmV0dXJuICpjb25zdGl0dWVudDsKKyAgICB9KTsK
IH0KIAogRXhjZXB0aW9uT3I8Ym9vbD4gQ1NTRm9udEZhY2VTZXQ6OmNoZWNrKGNvbnN0IFN0cmlu
ZyYgZm9udCwgY29uc3QgU3RyaW5nJiB0ZXh0KQpAQCAtNDg2LDEyICs0ODQsOSBAQCBDU1NTZWdt
ZW50ZWRGb250RmFjZSogQ1NTRm9udEZhY2VTZXQ6OmZvbnRGYWNlKEZvbnRTZWxlY3Rpb25SZXF1
ZXN0IHJlcXVlc3QsIGNvbgogICAgIH0KIAogICAgIGlmICghY2FuZGlkYXRlRm9udEZhY2VzLmlz
RW1wdHkoKSkgewotICAgICAgICBWZWN0b3I8Rm9udFNlbGVjdGlvbkNhcGFiaWxpdGllcz4gY2Fw
YWJpbGl0aWVzOwotICAgICAgICBjYXBhYmlsaXRpZXMucmVzZXJ2ZUluaXRpYWxDYXBhY2l0eShj
YW5kaWRhdGVGb250RmFjZXMuc2l6ZSgpKTsKLSAgICAgICAgZm9yIChhdXRvJiBmYWNlIDogY2Fu
ZGlkYXRlRm9udEZhY2VzKSB7Ci0gICAgICAgICAgICBhdXRvIGZvbnRTZWxlY3Rpb25DYXBhYmls
aXRpZXMgPSBmYWNlLmdldCgpLmZvbnRTZWxlY3Rpb25DYXBhYmlsaXRpZXMoKTsKLSAgICAgICAg
ICAgIGNhcGFiaWxpdGllcy51bmNoZWNrZWRBcHBlbmQoKmZvbnRTZWxlY3Rpb25DYXBhYmlsaXRp
ZXMpOwotICAgICAgICB9CisgICAgICAgIGF1dG8gY2FwYWJpbGl0aWVzID0gY2FuZGlkYXRlRm9u
dEZhY2VzLm1hcChbXShhdXRvJiBmYWNlKSB7CisgICAgICAgICAgICByZXR1cm4gKmZhY2UuZ2V0
KCkuZm9udFNlbGVjdGlvbkNhcGFiaWxpdGllcygpOworICAgICAgICB9KTsKICAgICAgICAgRm9u
dFNlbGVjdGlvbkFsZ29yaXRobSBmb250U2VsZWN0aW9uQWxnb3JpdGhtKHJlcXVlc3QsIGNhcGFi
aWxpdGllcyk7CiAgICAgICAgIHN0ZDo6c3RhYmxlX3NvcnQoY2FuZGlkYXRlRm9udEZhY2VzLmJl
Z2luKCksIGNhbmRpZGF0ZUZvbnRGYWNlcy5lbmQoKSwgWyZmb250U2VsZWN0aW9uQWxnb3JpdGht
XShjb25zdCBDU1NGb250RmFjZSYgZmlyc3QsIGNvbnN0IENTU0ZvbnRGYWNlJiBzZWNvbmQpIHsK
ICAgICAgICAgICAgIGF1dG8gZmlyc3RDYXBhYmlsaXRpZXMgPSBmaXJzdC5mb250U2VsZWN0aW9u
Q2FwYWJpbGl0aWVzKCk7CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9jc3MvQ1NTS2V5ZnJh
bWVzUnVsZS5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9jc3MvQ1NTS2V5ZnJhbWVzUnVsZS5jcHAKaW5k
ZXggMzY1MWVlYjNjOGU1OGE2ZGZiZmZmYTkxZTJlMGM5NDM3NWU1NmI0NS4uYTE2ZTZjY2RiNzVl
ZmY4Y2FlNjk3Mzg4NWUzYWExNGFiODU1NTQ3MCAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUv
Y3NzL0NTU0tleWZyYW1lc1J1bGUuY3BwCisrKyBiL1NvdXJjZS9XZWJDb3JlL2Nzcy9DU1NLZXlm
cmFtZXNSdWxlLmNwcApAQCAtNTIsMTEgKzUyLDkgQEAgU3R5bGVSdWxlS2V5ZnJhbWVzOjpTdHls
ZVJ1bGVLZXlmcmFtZXMoY29uc3QgQXRvbVN0cmluZyYgbmFtZSwgc3RkOjp1bmlxdWVfcHRyPEQK
IAogU3R5bGVSdWxlS2V5ZnJhbWVzOjpTdHlsZVJ1bGVLZXlmcmFtZXMoY29uc3QgU3R5bGVSdWxl
S2V5ZnJhbWVzJiBvKQogICAgIDogU3R5bGVSdWxlQmFzZShvKQorICAgICwgbV9rZXlmcmFtZXMo
by5rZXlmcmFtZXMoKSkKICAgICAsIG1fbmFtZShvLm1fbmFtZSkKIHsKLSAgICBtX2tleWZyYW1l
cy5yZXNlcnZlSW5pdGlhbENhcGFjaXR5KG8ua2V5ZnJhbWVzKCkuc2l6ZSgpKTsKLSAgICBmb3Ig
KGF1dG8mIGtleWZyYW1lIDogby5rZXlmcmFtZXMoKSkKLSAgICAgICAgbV9rZXlmcmFtZXMudW5j
aGVja2VkQXBwZW5kKGtleWZyYW1lLmNvcHlSZWYoKSk7CiB9CiAKIFJlZjxTdHlsZVJ1bGVLZXlm
cmFtZXM+IFN0eWxlUnVsZUtleWZyYW1lczo6Y3JlYXRlKGNvbnN0IEF0b21TdHJpbmcmIG5hbWUp
CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9jc3MvU3R5bGVQcm9wZXJ0aWVzLmNwcCBiL1Nv
dXJjZS9XZWJDb3JlL2Nzcy9TdHlsZVByb3BlcnRpZXMuY3BwCmluZGV4IGVlZjUxNTZiOTZhYTRi
NTk4YTFiZjJkNTNlNTliOGQ4NDgzMTQ1ZDkuLmFlMzhiOGUwODVhMjRhYWFlMDRlN2NiNWRmMjQz
Zjg3MTE1Y2IwZjcgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL2Nzcy9TdHlsZVByb3BlcnRp
ZXMuY3BwCisrKyBiL1NvdXJjZS9XZWJDb3JlL2Nzcy9TdHlsZVByb3BlcnRpZXMuY3BwCkBAIC0x
NzI1LDYgKzE3MjUsNyBAQCBSZWY8TXV0YWJsZVN0eWxlUHJvcGVydGllcz4gU3R5bGVQcm9wZXJ0
aWVzOjpjb3B5UHJvcGVydGllc0luU2V0KGNvbnN0IENTU1Byb3BlcgogICAgICAgICBpZiAoYXV0
byB2YWx1ZSA9IGdldFByb3BlcnR5Q1NTVmFsdWUoc2V0W2ldKSkKICAgICAgICAgICAgIGxpc3Qu
dW5jaGVja2VkQXBwZW5kKENTU1Byb3BlcnR5KHNldFtpXSwgV1RGTW92ZSh2YWx1ZSksIGZhbHNl
KSk7CiAgICAgfQorICAgIGxpc3Quc2hyaW5rVG9GaXQoKTsKICAgICByZXR1cm4gTXV0YWJsZVN0
eWxlUHJvcGVydGllczo6Y3JlYXRlKFdURk1vdmUobGlzdCkpOwogfQogCkBAIC0xODA1LDcgKzE4
MDYsNiBAQCBEZWZlcnJlZFN0eWxlUHJvcGVydGllczo6RGVmZXJyZWRTdHlsZVByb3BlcnRpZXMo
Y29uc3QgQ1NTUGFyc2VyVG9rZW5SYW5nZSYgcmFuZwogICAgICwgbV9wYXJzZXIocGFyc2VyKQog
ewogICAgIHNpemVfdCBsZW5ndGggPSByYW5nZS5lbmQoKSAtIHJhbmdlLmJlZ2luKCk7Ci0gICAg
bV90b2tlbnMucmVzZXJ2ZUNhcGFjaXR5KGxlbmd0aCk7CiAgICAgbV90b2tlbnMuYXBwZW5kKHJh
bmdlLmJlZ2luKCksIGxlbmd0aCk7CiB9CiAgICAgCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29y
ZS9jc3MvU3R5bGVSdWxlLmNwcCBiL1NvdXJjZS9XZWJDb3JlL2Nzcy9TdHlsZVJ1bGUuY3BwCmlu
ZGV4IDYzZDI0ZWQ3YmY0NGFlNmU3OTVlOWY2OWYwNGU0ZjY5NmNhYjY1MjkuLjFkOWVlN2QwMDU0
Mzg3NTU0OGFkMzJlYzU3NGE4YjAwZGJlOTU5YjcgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3Jl
L2Nzcy9TdHlsZVJ1bGUuY3BwCisrKyBiL1NvdXJjZS9XZWJDb3JlL2Nzcy9TdHlsZVJ1bGUuY3Bw
CkBAIC0zNjksNyArMzY5LDYgQEAgRGVmZXJyZWRTdHlsZUdyb3VwUnVsZUxpc3Q6OkRlZmVycmVk
U3R5bGVHcm91cFJ1bGVMaXN0KGNvbnN0IENTU1BhcnNlclRva2VuUmFuZ2UKICAgICA6IG1fcGFy
c2VyKHBhcnNlcikKIHsKICAgICBzaXplX3QgbGVuZ3RoID0gcmFuZ2UuZW5kKCkgLSByYW5nZS5i
ZWdpbigpOwotICAgIG1fdG9rZW5zLnJlc2VydmVDYXBhY2l0eShsZW5ndGgpOwogICAgIG1fdG9r
ZW5zLmFwcGVuZChyYW5nZS5iZWdpbigpLCBsZW5ndGgpOwogfQogCkBAIC0zOTksMTAgKzM5OCw4
IEBAIFN0eWxlUnVsZUdyb3VwOjpTdHlsZVJ1bGVHcm91cChTdHlsZVJ1bGVUeXBlIHR5cGUsIHN0
ZDo6dW5pcXVlX3B0cjxEZWZlcnJlZFN0eWxlCiAKIFN0eWxlUnVsZUdyb3VwOjpTdHlsZVJ1bGVH
cm91cChjb25zdCBTdHlsZVJ1bGVHcm91cCYgbykKICAgICA6IFN0eWxlUnVsZUJhc2UobykKKyAg
ICAsIG1fY2hpbGRSdWxlcyhvLmNoaWxkUnVsZXMoKS5tYXAoW10oYXV0byYgcnVsZSkgLT4gUmVm
UHRyPFN0eWxlUnVsZUJhc2U+IHsgcmV0dXJuIHJ1bGUtPmNvcHkoKTsgfSkpCiB7Ci0gICAgbV9j
aGlsZFJ1bGVzLnJlc2VydmVJbml0aWFsQ2FwYWNpdHkoby5jaGlsZFJ1bGVzKCkuc2l6ZSgpKTsK
LSAgICBmb3IgKGF1dG8mIGNoaWxkUnVsZSA6IG8uY2hpbGRSdWxlcygpKQotICAgICAgICBtX2No
aWxkUnVsZXMudW5jaGVja2VkQXBwZW5kKGNoaWxkUnVsZS0+Y29weSgpKTsKIH0KIAogY29uc3Qg
VmVjdG9yPFJlZlB0cjxTdHlsZVJ1bGVCYXNlPj4mIFN0eWxlUnVsZUdyb3VwOjpjaGlsZFJ1bGVz
KCkgY29uc3QKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL2Nzcy9jYWxjL0NTU0NhbGNPcGVy
YXRpb25Ob2RlLmggYi9Tb3VyY2UvV2ViQ29yZS9jc3MvY2FsYy9DU1NDYWxjT3BlcmF0aW9uTm9k
ZS5oCmluZGV4IDJjNzE2Y2FlODY0N2UyZWZkMzRmNTdjZmM4ZjczOTQ5ZDIyNTViNmYuLjE0OTRl
NDlmYTk4MWI3MDY4OTc5Y2IzZTg5MzJhMTJjNDQxODVmM2EgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9X
ZWJDb3JlL2Nzcy9jYWxjL0NTU0NhbGNPcGVyYXRpb25Ob2RlLmgKKysrIGIvU291cmNlL1dlYkNv
cmUvY3NzL2NhbGMvQ1NTQ2FsY09wZXJhdGlvbk5vZGUuaApAQCAtODUsMTAgKzg1LDggQEAgcHJp
dmF0ZToKICAgICBDU1NDYWxjT3BlcmF0aW9uTm9kZShDYWxjdWxhdGlvbkNhdGVnb3J5IGNhdGVn
b3J5LCBDYWxjT3BlcmF0b3Igb3AsIFJlZjxDU1NDYWxjRXhwcmVzc2lvbk5vZGU+JiYgbGVmdFNp
ZGUsIFJlZjxDU1NDYWxjRXhwcmVzc2lvbk5vZGU+JiYgcmlnaHRTaWRlKQogICAgICAgICA6IENT
U0NhbGNFeHByZXNzaW9uTm9kZShjYXRlZ29yeSkKICAgICAgICAgLCBtX29wZXJhdG9yKG9wKQor
ICAgICAgICAsIG1fY2hpbGRyZW4oeyBXVEZNb3ZlKGxlZnRTaWRlKSwgV1RGTW92ZShyaWdodFNp
ZGUpIH0pCiAgICAgewotICAgICAgICBtX2NoaWxkcmVuLnJlc2VydmVJbml0aWFsQ2FwYWNpdHko
Mik7Ci0gICAgICAgIG1fY2hpbGRyZW4udW5jaGVja2VkQXBwZW5kKFdURk1vdmUobGVmdFNpZGUp
KTsKLSAgICAgICAgbV9jaGlsZHJlbi51bmNoZWNrZWRBcHBlbmQoV1RGTW92ZShyaWdodFNpZGUp
KTsKICAgICB9CiAKICAgICBDU1NDYWxjT3BlcmF0aW9uTm9kZShDYWxjdWxhdGlvbkNhdGVnb3J5
IGNhdGVnb3J5LCBDYWxjT3BlcmF0b3Igb3AsIFZlY3RvcjxSZWY8Q1NTQ2FsY0V4cHJlc3Npb25O
b2RlPj4mJiBjaGlsZHJlbikKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL2Nzcy9jYWxjL0NT
U0NhbGNWYWx1ZS5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9jc3MvY2FsYy9DU1NDYWxjVmFsdWUuY3Bw
CmluZGV4IDA1ZDkyZGZiN2NhYjlmZDU5NjY3NDk4NjhmYjY4MjgwYjA5NzVlZTYuLjQzNTgyYjRk
MTEzMDI5NTczZjNiYWYwMTYyYTNjZGY2M2M2NzlmNDcgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJD
b3JlL2Nzcy9jYWxjL0NTU0NhbGNWYWx1ZS5jcHAKKysrIGIvU291cmNlL1dlYkNvcmUvY3NzL2Nh
bGMvQ1NTQ2FsY1ZhbHVlLmNwcApAQCAtNjksMTEgKzY5LDEwIEBAIHN0YXRpYyBWZWN0b3I8UmVm
PENTU0NhbGNFeHByZXNzaW9uTm9kZT4+IGNyZWF0ZUNTUyhjb25zdCBWZWN0b3I8c3RkOjp1bmlx
dWVfcHRyCiAgICAgVmVjdG9yPFJlZjxDU1NDYWxjRXhwcmVzc2lvbk5vZGU+PiB2YWx1ZXM7CiAg
ICAgdmFsdWVzLnJlc2VydmVJbml0aWFsQ2FwYWNpdHkobm9kZXMuc2l6ZSgpKTsKICAgICBmb3Ig
KGF1dG8mIG5vZGUgOiBub2RlcykgewotICAgICAgICBhdXRvIGNzc05vZGUgPSBjcmVhdGVDU1Mo
Km5vZGUsIHN0eWxlKTsKLSAgICAgICAgaWYgKCFjc3NOb2RlKQotICAgICAgICAgICAgY29udGlu
dWU7Ci0gICAgICAgIHZhbHVlcy51bmNoZWNrZWRBcHBlbmQoY3NzTm9kZS5yZWxlYXNlTm9uTnVs
bCgpKTsKKyAgICAgICAgaWYgKGF1dG8gY3NzTm9kZSA9IGNyZWF0ZUNTUygqbm9kZSwgc3R5bGUp
KQorICAgICAgICAgICAgdmFsdWVzLnVuY2hlY2tlZEFwcGVuZChjc3NOb2RlLnJlbGVhc2VOb25O
dWxsKCkpOwogICAgIH0KKyAgICB2YWx1ZXMuc2hyaW5rVG9GaXQoKTsKICAgICByZXR1cm4gdmFs
dWVzOwogfQogCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9kaXNwbGF5L2Nzcy9EaXNwbGF5
Qm94RGVjb3JhdGlvblBhaW50ZXIuY3BwIGIvU291cmNlL1dlYkNvcmUvZGlzcGxheS9jc3MvRGlz
cGxheUJveERlY29yYXRpb25QYWludGVyLmNwcAppbmRleCBhNWE2YjRiMzJkY2NmNzFhMWZhNTM3
ZmVkYzJlOTFlNDAwZTIzOGMyLi44NTZhM2RlNTA0ZGVjMGJiZmE5MGFjMTdkZTM3ZjUxNWUxNGQ5
MjA0IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9kaXNwbGF5L2Nzcy9EaXNwbGF5Qm94RGVj
b3JhdGlvblBhaW50ZXIuY3BwCisrKyBiL1NvdXJjZS9XZWJDb3JlL2Rpc3BsYXkvY3NzL0Rpc3Bs
YXlCb3hEZWNvcmF0aW9uUGFpbnRlci5jcHAKQEAgLTQ4NywxMyArNDg3LDkgQEAgdm9pZCBCb3Jk
ZXJQYWludGVyOjpjbGlwQm9yZGVyU2lkZVBvbHlnb24oUGFpbnRpbmdDb250ZXh0JiBwYWludGlu
Z0NvbnRleHQsIGNvbnMKICAgICAvLyAgICAgICAgIDAtLS0tLS0tLS0tLS0tLS0tMwogICAgIC8v
CiAgICAgVmVjdG9yPEZsb2F0UG9pbnQ+IHF1YWQ7Ci0gICAgcXVhZC5yZXNlcnZlSW5pdGlhbENh
cGFjaXR5KDQpOwogICAgIHN3aXRjaCAoc2lkZSkgewogICAgIGNhc2UgQm94U2lkZTo6VG9wOgot
ICAgICAgICBxdWFkLnVuY2hlY2tlZEFwcGVuZChvdXRlclJlY3QubWluWE1pbllDb3JuZXIoKSk7
Ci0gICAgICAgIHF1YWQudW5jaGVja2VkQXBwZW5kKGlubmVyUmVjdC5taW5YTWluWUNvcm5lcigp
KTsKLSAgICAgICAgcXVhZC51bmNoZWNrZWRBcHBlbmQoaW5uZXJSZWN0Lm1heFhNaW5ZQ29ybmVy
KCkpOwotICAgICAgICBxdWFkLnVuY2hlY2tlZEFwcGVuZChvdXRlclJlY3QubWF4WE1pbllDb3Ju
ZXIoKSk7CisgICAgICAgIHF1YWQgPSB7IG91dGVyUmVjdC5taW5YTWluWUNvcm5lcigpLCBpbm5l
clJlY3QubWluWE1pbllDb3JuZXIoKSwgaW5uZXJSZWN0Lm1heFhNaW5ZQ29ybmVyKCksIG91dGVy
UmVjdC5tYXhYTWluWUNvcm5lcigpIH07CiAKICAgICAgICAgaWYgKCFpbm5lckJvcmRlci5yYWRp
aSgpLnRvcExlZnQoKS5pc1plcm8oKSkKICAgICAgICAgICAgIGZpbmRJbnRlcnNlY3Rpb24ob3V0
ZXJSZWN0Lm1pblhNaW5ZQ29ybmVyKCksIGlubmVyUmVjdC5taW5YTWluWUNvcm5lcigpLCBpbm5l
clJlY3QubWluWE1heFlDb3JuZXIoKSwgaW5uZXJSZWN0Lm1heFhNaW5ZQ29ybmVyKCksIHF1YWRb
MV0pOwpAQCAtNTAzLDEwICs0OTksNyBAQCB2b2lkIEJvcmRlclBhaW50ZXI6OmNsaXBCb3JkZXJT
aWRlUG9seWdvbihQYWludGluZ0NvbnRleHQmIHBhaW50aW5nQ29udGV4dCwgY29ucwogICAgICAg
ICBicmVhazsKIAogICAgIGNhc2UgQm94U2lkZTo6TGVmdDoKLSAgICAgICAgcXVhZC51bmNoZWNr
ZWRBcHBlbmQob3V0ZXJSZWN0Lm1pblhNaW5ZQ29ybmVyKCkpOwotICAgICAgICBxdWFkLnVuY2hl
Y2tlZEFwcGVuZChpbm5lclJlY3QubWluWE1pbllDb3JuZXIoKSk7Ci0gICAgICAgIHF1YWQudW5j
aGVja2VkQXBwZW5kKGlubmVyUmVjdC5taW5YTWF4WUNvcm5lcigpKTsKLSAgICAgICAgcXVhZC51
bmNoZWNrZWRBcHBlbmQob3V0ZXJSZWN0Lm1pblhNYXhZQ29ybmVyKCkpOworICAgICAgICBxdWFk
ID0geyBvdXRlclJlY3QubWluWE1pbllDb3JuZXIoKSwgaW5uZXJSZWN0Lm1pblhNaW5ZQ29ybmVy
KCksIGlubmVyUmVjdC5taW5YTWF4WUNvcm5lcigpLCBvdXRlclJlY3QubWluWE1heFlDb3JuZXIo
KSB9OwogCiAgICAgICAgIGlmICghaW5uZXJCb3JkZXIucmFkaWkoKS50b3BMZWZ0KCkuaXNaZXJv
KCkpCiAgICAgICAgICAgICBmaW5kSW50ZXJzZWN0aW9uKG91dGVyUmVjdC5taW5YTWluWUNvcm5l
cigpLCBpbm5lclJlY3QubWluWE1pbllDb3JuZXIoKSwgaW5uZXJSZWN0Lm1pblhNYXhZQ29ybmVy
KCksIGlubmVyUmVjdC5tYXhYTWluWUNvcm5lcigpLCBxdWFkWzFdKTsKQEAgLTUxNiwxMCArNTA5
LDcgQEAgdm9pZCBCb3JkZXJQYWludGVyOjpjbGlwQm9yZGVyU2lkZVBvbHlnb24oUGFpbnRpbmdD
b250ZXh0JiBwYWludGluZ0NvbnRleHQsIGNvbnMKICAgICAgICAgYnJlYWs7CiAKICAgICBjYXNl
IEJveFNpZGU6OkJvdHRvbToKLSAgICAgICAgcXVhZC51bmNoZWNrZWRBcHBlbmQob3V0ZXJSZWN0
Lm1pblhNYXhZQ29ybmVyKCkpOwotICAgICAgICBxdWFkLnVuY2hlY2tlZEFwcGVuZChpbm5lclJl
Y3QubWluWE1heFlDb3JuZXIoKSk7Ci0gICAgICAgIHF1YWQudW5jaGVja2VkQXBwZW5kKGlubmVy
UmVjdC5tYXhYTWF4WUNvcm5lcigpKTsKLSAgICAgICAgcXVhZC51bmNoZWNrZWRBcHBlbmQob3V0
ZXJSZWN0Lm1heFhNYXhZQ29ybmVyKCkpOworICAgICAgICBxdWFkID0geyBvdXRlclJlY3QubWlu
WE1heFlDb3JuZXIoKSwgaW5uZXJSZWN0Lm1pblhNYXhZQ29ybmVyKCksIGlubmVyUmVjdC5tYXhY
TWF4WUNvcm5lcigpLCBvdXRlclJlY3QubWF4WE1heFlDb3JuZXIoKSB9OwogCiAgICAgICAgIGlm
ICghaW5uZXJCb3JkZXIucmFkaWkoKS5ib3R0b21MZWZ0KCkuaXNaZXJvKCkpCiAgICAgICAgICAg
ICBmaW5kSW50ZXJzZWN0aW9uKG91dGVyUmVjdC5taW5YTWF4WUNvcm5lcigpLCBpbm5lclJlY3Qu
bWluWE1heFlDb3JuZXIoKSwgaW5uZXJSZWN0Lm1pblhNaW5ZQ29ybmVyKCksIGlubmVyUmVjdC5t
YXhYTWF4WUNvcm5lcigpLCBxdWFkWzFdKTsKQEAgLTUyOSwxMCArNTE5LDcgQEAgdm9pZCBCb3Jk
ZXJQYWludGVyOjpjbGlwQm9yZGVyU2lkZVBvbHlnb24oUGFpbnRpbmdDb250ZXh0JiBwYWludGlu
Z0NvbnRleHQsIGNvbnMKICAgICAgICAgYnJlYWs7CiAKICAgICBjYXNlIEJveFNpZGU6OlJpZ2h0
OgotICAgICAgICBxdWFkLnVuY2hlY2tlZEFwcGVuZChvdXRlclJlY3QubWF4WE1pbllDb3JuZXIo
KSk7Ci0gICAgICAgIHF1YWQudW5jaGVja2VkQXBwZW5kKGlubmVyUmVjdC5tYXhYTWluWUNvcm5l
cigpKTsKLSAgICAgICAgcXVhZC51bmNoZWNrZWRBcHBlbmQoaW5uZXJSZWN0Lm1heFhNYXhZQ29y
bmVyKCkpOwotICAgICAgICBxdWFkLnVuY2hlY2tlZEFwcGVuZChvdXRlclJlY3QubWF4WE1heFlD
b3JuZXIoKSk7CisgICAgICAgIHF1YWQgPSB7IG91dGVyUmVjdC5tYXhYTWluWUNvcm5lcigpLCBp
bm5lclJlY3QubWF4WE1pbllDb3JuZXIoKSwgaW5uZXJSZWN0Lm1heFhNYXhZQ29ybmVyKCksIG91
dGVyUmVjdC5tYXhYTWF4WUNvcm5lcigpIH07CiAKICAgICAgICAgaWYgKCFpbm5lckJvcmRlci5y
YWRpaSgpLnRvcFJpZ2h0KCkuaXNaZXJvKCkpCiAgICAgICAgICAgICBmaW5kSW50ZXJzZWN0aW9u
KG91dGVyUmVjdC5tYXhYTWluWUNvcm5lcigpLCBpbm5lclJlY3QubWF4WE1pbllDb3JuZXIoKSwg
aW5uZXJSZWN0Lm1pblhNaW5ZQ29ybmVyKCksIGlubmVyUmVjdC5tYXhYTWF4WUNvcm5lcigpLCBx
dWFkWzFdKTsKQEAgLTc5NiwzMSArNzgzLDM4IEBAIHZvaWQgQm9yZGVyUGFpbnRlcjo6ZHJhd0xp
bmVGb3JCb3hTaWRlKFBhaW50aW5nQ29udGV4dCYgcGFpbnRpbmdDb250ZXh0LCBjb25zdCBGCiAg
ICAgICAgIHkyID0gcm91bmRUb0RldmljZVBpeGVsKHkyLCBkZXZpY2VTY2FsZUZhY3Rvcik7CiAK
ICAgICAgICAgVmVjdG9yPEZsb2F0UG9pbnQ+IHF1YWQ7Ci0gICAgICAgIHF1YWQucmVzZXJ2ZUlu
aXRpYWxDYXBhY2l0eSg0KTsKICAgICAgICAgc3dpdGNoIChzaWRlKSB7CiAgICAgICAgIGNhc2Ug
Qm94U2lkZTo6VG9wOgotICAgICAgICAgICAgcXVhZC51bmNoZWNrZWRBcHBlbmQoeyB4MSArIHN0
ZDo6bWF4PGZsb2F0PigtYWRqYWNlbnRXaWR0aDEsIDApLCB5MSB9KTsKLSAgICAgICAgICAgIHF1
YWQudW5jaGVja2VkQXBwZW5kKHsgeDEgKyBzdGQ6Om1heDxmbG9hdD4oIGFkamFjZW50V2lkdGgx
LCAwKSwgeTIgfSk7Ci0gICAgICAgICAgICBxdWFkLnVuY2hlY2tlZEFwcGVuZCh7IHgyIC0gc3Rk
OjptYXg8ZmxvYXQ+KCBhZGphY2VudFdpZHRoMiwgMCksIHkyIH0pOwotICAgICAgICAgICAgcXVh
ZC51bmNoZWNrZWRBcHBlbmQoeyB4MiAtIHN0ZDo6bWF4PGZsb2F0PigtYWRqYWNlbnRXaWR0aDIs
IDApLCB5MSB9KTsKKyAgICAgICAgICAgIHF1YWQgPSB7CisgICAgICAgICAgICAgICAgeyB4MSAr
IHN0ZDo6bWF4PGZsb2F0PigtYWRqYWNlbnRXaWR0aDEsIDApLCB5MSB9LAorICAgICAgICAgICAg
ICAgIHsgeDEgKyBzdGQ6Om1heDxmbG9hdD4oYWRqYWNlbnRXaWR0aDEsIDApLCB5MiB9LAorICAg
ICAgICAgICAgICAgIHsgeDIgLSBzdGQ6Om1heDxmbG9hdD4oYWRqYWNlbnRXaWR0aDIsIDApLCB5
MiB9LAorICAgICAgICAgICAgICAgIHsgeDIgLSBzdGQ6Om1heDxmbG9hdD4oLWFkamFjZW50V2lk
dGgyLCAwKSwgeTEgfQorICAgICAgICAgICAgfTsKICAgICAgICAgICAgIGJyZWFrOwogICAgICAg
ICBjYXNlIEJveFNpZGU6OkJvdHRvbToKLSAgICAgICAgICAgIHF1YWQudW5jaGVja2VkQXBwZW5k
KHsgeDEgKyBzdGQ6Om1heDxmbG9hdD4oIGFkamFjZW50V2lkdGgxLCAwKSwgeTEgfSk7Ci0gICAg
ICAgICAgICBxdWFkLnVuY2hlY2tlZEFwcGVuZCh7IHgxICsgc3RkOjptYXg8ZmxvYXQ+KC1hZGph
Y2VudFdpZHRoMSwgMCksIHkyIH0pOwotICAgICAgICAgICAgcXVhZC51bmNoZWNrZWRBcHBlbmQo
eyB4MiAtIHN0ZDo6bWF4PGZsb2F0PigtYWRqYWNlbnRXaWR0aDIsIDApLCB5MiB9KTsKLSAgICAg
ICAgICAgIHF1YWQudW5jaGVja2VkQXBwZW5kKHsgeDIgLSBzdGQ6Om1heDxmbG9hdD4oIGFkamFj
ZW50V2lkdGgyLCAwKSwgeTEgfSk7CisgICAgICAgICAgICBxdWFkID0geworICAgICAgICAgICAg
ICAgIHsgeDEgKyBzdGQ6Om1heDxmbG9hdD4oYWRqYWNlbnRXaWR0aDEsIDApLCB5MSB9LAorICAg
ICAgICAgICAgICAgIHsgeDEgKyBzdGQ6Om1heDxmbG9hdD4oLWFkamFjZW50V2lkdGgxLCAwKSwg
eTIgfSwKKyAgICAgICAgICAgICAgICB7IHgyIC0gc3RkOjptYXg8ZmxvYXQ+KC1hZGphY2VudFdp
ZHRoMiwgMCksIHkyIH0sCisgICAgICAgICAgICAgICAgeyB4MiAtIHN0ZDo6bWF4PGZsb2F0Pihh
ZGphY2VudFdpZHRoMiwgMCksIHkxIH0KKyAgICAgICAgICAgIH07CiAgICAgICAgICAgICBicmVh
azsKICAgICAgICAgY2FzZSBCb3hTaWRlOjpMZWZ0OgotICAgICAgICAgICAgcXVhZC51bmNoZWNr
ZWRBcHBlbmQoeyB4MSwgeTEgKyBzdGQ6Om1heDxmbG9hdD4oLWFkamFjZW50V2lkdGgxLCAwKSB9
KTsKLSAgICAgICAgICAgIHF1YWQudW5jaGVja2VkQXBwZW5kKHsgeDEsIHkyIC0gc3RkOjptYXg8
ZmxvYXQ+KC1hZGphY2VudFdpZHRoMiwgMCkgfSk7Ci0gICAgICAgICAgICBxdWFkLnVuY2hlY2tl
ZEFwcGVuZCh7IHgyLCB5MiAtIHN0ZDo6bWF4PGZsb2F0PiggYWRqYWNlbnRXaWR0aDIsIDApIH0p
OwotICAgICAgICAgICAgcXVhZC51bmNoZWNrZWRBcHBlbmQoeyB4MiwgeTEgKyBzdGQ6Om1heDxm
bG9hdD4oIGFkamFjZW50V2lkdGgxLCAwKSB9KTsKKyAgICAgICAgICAgIHF1YWQgPSB7CisgICAg
ICAgICAgICAgICAgeyB4MSwgeTEgKyBzdGQ6Om1heDxmbG9hdD4oLWFkamFjZW50V2lkdGgxLCAw
KSB9LAorICAgICAgICAgICAgICAgIHsgeDEsIHkyIC0gc3RkOjptYXg8ZmxvYXQ+KC1hZGphY2Vu
dFdpZHRoMiwgMCkgfSwKKyAgICAgICAgICAgICAgICB7IHgyLCB5MiAtIHN0ZDo6bWF4PGZsb2F0
PihhZGphY2VudFdpZHRoMiwgMCkgfSwKKyAgICAgICAgICAgICAgICB7IHgyLCB5MSArIHN0ZDo6
bWF4PGZsb2F0PihhZGphY2VudFdpZHRoMSwgMCkgfQorICAgICAgICAgICAgfTsKICAgICAgICAg
ICAgIGJyZWFrOwogICAgICAgICBjYXNlIEJveFNpZGU6OlJpZ2h0OgotICAgICAgICAgICAgcXVh
ZC51bmNoZWNrZWRBcHBlbmQoeyB4MSwgeTEgKyBzdGQ6Om1heDxmbG9hdD4oIGFkamFjZW50V2lk
dGgxLCAwKSB9KTsKLSAgICAgICAgICAgIHF1YWQudW5jaGVja2VkQXBwZW5kKHsgeDEsIHkyIC0g
c3RkOjptYXg8ZmxvYXQ+KCBhZGphY2VudFdpZHRoMiwgMCkgfSk7Ci0gICAgICAgICAgICBxdWFk
LnVuY2hlY2tlZEFwcGVuZCh7IHgyLCB5MiAtIHN0ZDo6bWF4PGZsb2F0PigtYWRqYWNlbnRXaWR0
aDIsIDApIH0pOwotICAgICAgICAgICAgcXVhZC51bmNoZWNrZWRBcHBlbmQoeyB4MiwgeTEgKyBz
dGQ6Om1heDxmbG9hdD4oLWFkamFjZW50V2lkdGgxLCAwKSB9KTsKKyAgICAgICAgICAgIHF1YWQg
PSB7CisgICAgICAgICAgICAgICAgeyB4MSwgeTEgKyBzdGQ6Om1heDxmbG9hdD4oYWRqYWNlbnRX
aWR0aDEsIDApIH0sCisgICAgICAgICAgICAgICAgeyB4MSwgeTIgLSBzdGQ6Om1heDxmbG9hdD4o
YWRqYWNlbnRXaWR0aDIsIDApIH0sCisgICAgICAgICAgICAgICAgeyB4MiwgeTIgLSBzdGQ6Om1h
eDxmbG9hdD4oLWFkamFjZW50V2lkdGgyLCAwKSB9LAorICAgICAgICAgICAgICAgIHsgeDIsIHkx
ICsgc3RkOjptYXg8ZmxvYXQ+KC1hZGphY2VudFdpZHRoMSwgMCkgfQorICAgICAgICAgICAgfTsK
ICAgICAgICAgICAgIGJyZWFrOwogICAgICAgICB9CiAKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJD
b3JlL2RvbS9ET01SZWN0TGlzdC5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9kb20vRE9NUmVjdExpc3Qu
Y3BwCmluZGV4IDdjMGE2MmM5NmFiMDg5ZjJkYTY0NzUwZGU4ZTVjYmIzMGMxOTRmODUuLjcxNWUx
NjM1NWM4MDllMDIwYTM2ODk5NDc3MWVhMzdlNDhlMjk3Y2UgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9X
ZWJDb3JlL2RvbS9ET01SZWN0TGlzdC5jcHAKKysrIGIvU291cmNlL1dlYkNvcmUvZG9tL0RPTVJl
Y3RMaXN0LmNwcApAQCAtMzEsMTcgKzMxLDEzIEBACiBuYW1lc3BhY2UgV2ViQ29yZSB7CiAKIERP
TVJlY3RMaXN0OjpET01SZWN0TGlzdChjb25zdCBWZWN0b3I8RmxvYXRRdWFkPiYgcXVhZHMpCisg
ICAgOiBtX2l0ZW1zKHF1YWRzLm1hcChbXShhdXRvJiBxdWFkKSB7IHJldHVybiBET01SZWN0Ojpj
cmVhdGUocXVhZC5ib3VuZGluZ0JveCgpKTsgfSkpCiB7Ci0gICAgbV9pdGVtcy5yZXNlcnZlSW5p
dGlhbENhcGFjaXR5KHF1YWRzLnNpemUoKSk7Ci0gICAgZm9yIChhdXRvJiBxdWFkIDogcXVhZHMp
Ci0gICAgICAgIG1faXRlbXMudW5jaGVja2VkQXBwZW5kKERPTVJlY3Q6OmNyZWF0ZShxdWFkLmJv
dW5kaW5nQm94KCkpKTsKIH0KIAogRE9NUmVjdExpc3Q6OkRPTVJlY3RMaXN0KGNvbnN0IFZlY3Rv
cjxGbG9hdFJlY3Q+JiByZWN0cykKKyAgICA6IG1faXRlbXMocmVjdHMubWFwKFtdKGF1dG8mIHJl
Y3QpIHsgcmV0dXJuIERPTVJlY3Q6OmNyZWF0ZShyZWN0KTsgfSkpCiB7Ci0gICAgbV9pdGVtcy5y
ZXNlcnZlSW5pdGlhbENhcGFjaXR5KHJlY3RzLnNpemUoKSk7Ci0gICAgZm9yIChhdXRvJiByZWN0
IDogcmVjdHMpCi0gICAgICAgIG1faXRlbXMudW5jaGVja2VkQXBwZW5kKERPTVJlY3Q6OmNyZWF0
ZShyZWN0KSk7CiB9CiAKIERPTVJlY3RMaXN0Ojp+RE9NUmVjdExpc3QoKSA9IGRlZmF1bHQ7CmRp
ZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9kb20vRG9jdW1lbnQuY3BwIGIvU291cmNlL1dlYkNv
cmUvZG9tL0RvY3VtZW50LmNwcAppbmRleCBhNmE2YWRjNmQ4ZDdmMThjMmY0YTlmY2I1MjkwOTRm
MTVmMmNiMDJjLi5mMzlmYjgxNGE1N2UyZTFmMzBkYzZkYTdiYTk4NjY0NjFkOWY4OGNlIDEwMDY0
NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9kb20vRG9jdW1lbnQuY3BwCisrKyBiL1NvdXJjZS9XZWJD
b3JlL2RvbS9Eb2N1bWVudC5jcHAKQEAgLTQyNDAsMTMgKzQyNDAsNyBAQCB2b2lkIERvY3VtZW50
Ojp1cGRhdGVFbGVtZW50c0FmZmVjdGVkQnlNZWRpYVF1ZXJpZXMoKQogICAgICAgICAgICAgdGhl
bWVDb2xvckNoYW5nZWQoKTsKICAgICB9CiAKLSAgICAvLyBGSVhNRTogY29weVRvVmVjdG9yIGRv
ZXNuJ3Qgd29yayB3aXRoIFdlYWtIYXNoU2V0Ci0gICAgVmVjdG9yPFJlZjxIVE1MSW1hZ2VFbGVt
ZW50Pj4gaW1hZ2VzOwotICAgIGltYWdlcy5yZXNlcnZlSW5pdGlhbENhcGFjaXR5KG1fZHluYW1p
Y01lZGlhUXVlcnlEZXBlbmRlbnRJbWFnZXMuY29tcHV0ZVNpemUoKSk7Ci0gICAgZm9yIChhdXRv
JiBpbWFnZSA6IG1fZHluYW1pY01lZGlhUXVlcnlEZXBlbmRlbnRJbWFnZXMpCi0gICAgICAgIGlt
YWdlcy5hcHBlbmQoaW1hZ2UpOwotCi0gICAgZm9yIChhdXRvJiBpbWFnZSA6IGltYWdlcykKKyAg
ICBmb3IgKGF1dG8mIGltYWdlIDogY29weVRvVmVjdG9yT2Y8UmVmPEhUTUxJbWFnZUVsZW1lbnQ+
PihtX2R5bmFtaWNNZWRpYVF1ZXJ5RGVwZW5kZW50SW1hZ2VzKSkKICAgICAgICAgaW1hZ2UtPmV2
YWx1YXRlRHluYW1pY01lZGlhUXVlcnlEZXBlbmRlbmNpZXMoKTsKIH0KIApAQCAtNzYxMCw2ICs3
NjA0LDcgQEAgdm9pZCBEb2N1bWVudDo6ZGlkQXNzb2NpYXRlRm9ybUNvbnRyb2xzVGltZXJGaXJl
ZCgpCiAgICAgICAgIGlmIChlbGVtZW50LmlzQ29ubmVjdGVkKCkpCiAgICAgICAgICAgICBjb250
cm9scy51bmNoZWNrZWRBcHBlbmQoJmVsZW1lbnQpOwogICAgIH0KKyAgICBjb250cm9scy5zaHJp
bmtUb0ZpdCgpOwogCiAgICAgaWYgKGF1dG8gcGFnZSA9IHRoaXMtPnBhZ2UoKTsgcGFnZSAmJiAh
Y29udHJvbHMuaXNFbXB0eSgpKSB7CiAgICAgICAgIEFTU0VSVChtX2ZyYW1lKTsKZGlmZiAtLWdp
dCBhL1NvdXJjZS9XZWJDb3JlL2RvbS9FbGVtZW50RGF0YS5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9k
b20vRWxlbWVudERhdGEuY3BwCmluZGV4IGI3MDNhZWZhZWE2OTIxOWIwODViYWQ5ZDA1MDMwNjhj
ZjAzZjFiNzAuLjA3MWRiMGIzNGNhNmU1NmVmMTI2ZWJlZWQ1MThmNjBkNzQwYjRiOTkgMTAwNjQ0
Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL2RvbS9FbGVtZW50RGF0YS5jcHAKKysrIGIvU291cmNlL1dl
YkNvcmUvZG9tL0VsZW1lbnREYXRhLmNwcApAQCAtMTQ1LDEwICsxNDUsNyBAQCBVbmlxdWVFbGVt
ZW50RGF0YTo6VW5pcXVlRWxlbWVudERhdGEoY29uc3QgU2hhcmVhYmxlRWxlbWVudERhdGEmIG90
aGVyKQogICAgIEFTU0VSVCghb3RoZXIubV9pbmxpbmVTdHlsZSB8fCAhb3RoZXIubV9pbmxpbmVT
dHlsZS0+aXNNdXRhYmxlKCkpOwogICAgIG1faW5saW5lU3R5bGUgPSBvdGhlci5tX2lubGluZVN0
eWxlOwogCi0gICAgdW5zaWduZWQgb3RoZXJMZW5ndGggPSBvdGhlci5sZW5ndGgoKTsKLSAgICBt
X2F0dHJpYnV0ZVZlY3Rvci5yZXNlcnZlQ2FwYWNpdHkob3RoZXJMZW5ndGgpOwotICAgIGZvciAo
dW5zaWduZWQgaSA9IDA7IGkgPCBvdGhlckxlbmd0aDsgKytpKQotICAgICAgICBtX2F0dHJpYnV0
ZVZlY3Rvci51bmNoZWNrZWRBcHBlbmQob3RoZXIubV9hdHRyaWJ1dGVBcnJheVtpXSk7CisgICAg
bV9hdHRyaWJ1dGVWZWN0b3IuYXBwZW5kKG90aGVyLm1fYXR0cmlidXRlQXJyYXksIG90aGVyLmxl
bmd0aCgpKTsKIH0KIAogUmVmPFVuaXF1ZUVsZW1lbnREYXRhPiBFbGVtZW50RGF0YTo6bWFrZVVu
aXF1ZUNvcHkoKSBjb25zdApkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvZG9tL0V2ZW50TGlz
dGVuZXJNYXAuY3BwIGIvU291cmNlL1dlYkNvcmUvZG9tL0V2ZW50TGlzdGVuZXJNYXAuY3BwCmlu
ZGV4IGM0ZTgxNmRlYWY0MjVjYTkxMTVlNzg2ZjZhMGFlMGJiNjg0MTY5MzkuLjYwYjFkYTc2M2Yz
YjBhNzBjZjFlYWRlNDMzNGQ4Zjk1MzM2YTRlZjMgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3Jl
L2RvbS9FdmVudExpc3RlbmVyTWFwLmNwcAorKysgYi9Tb3VyY2UvV2ViQ29yZS9kb20vRXZlbnRM
aXN0ZW5lck1hcC5jcHAKQEAgLTk3LDEzICs5Nyw5IEBAIHZvaWQgRXZlbnRMaXN0ZW5lck1hcDo6
Y2xlYXIoKQogCiBWZWN0b3I8QXRvbVN0cmluZz4gRXZlbnRMaXN0ZW5lck1hcDo6ZXZlbnRUeXBl
cygpIGNvbnN0CiB7Ci0gICAgVmVjdG9yPEF0b21TdHJpbmc+IHR5cGVzOwotICAgIHR5cGVzLnJl
c2VydmVJbml0aWFsQ2FwYWNpdHkobV9lbnRyaWVzLnNpemUoKSk7Ci0KLSAgICBmb3IgKGF1dG8m
IGVudHJ5IDogbV9lbnRyaWVzKQotICAgICAgICB0eXBlcy51bmNoZWNrZWRBcHBlbmQoZW50cnku
Zmlyc3QpOwotCi0gICAgcmV0dXJuIHR5cGVzOworICAgIHJldHVybiBtX2VudHJpZXMubWFwKFtd
KGF1dG8mIGVudHJ5KSB7CisgICAgICAgIHJldHVybiBlbnRyeS5maXJzdDsKKyAgICB9KTsKIH0K
IAogc3RhdGljIGlubGluZSBzaXplX3QgZmluZExpc3RlbmVyKGNvbnN0IEV2ZW50TGlzdGVuZXJW
ZWN0b3ImIGxpc3RlbmVycywgRXZlbnRMaXN0ZW5lciYgbGlzdGVuZXIsIGJvb2wgdXNlQ2FwdHVy
ZSkKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL2RvbS9UcmVlU2NvcGVPcmRlcmVkTWFwLmNw
cCBiL1NvdXJjZS9XZWJDb3JlL2RvbS9UcmVlU2NvcGVPcmRlcmVkTWFwLmNwcAppbmRleCAzOTA5
YzUzODA4Y2JkNjhjYTlkMzgwOGE1ZDhhMGZkMDM4ZWE0ZjAzLi43YzdmYmI1NmYzMzgyZmUwOGZi
ZDgwNGZhYjM3M2IwMDUwYjM1MGZmIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9kb20vVHJl
ZVNjb3BlT3JkZXJlZE1hcC5jcHAKKysrIGIvU291cmNlL1dlYkNvcmUvZG9tL1RyZWVTY29wZU9y
ZGVyZWRNYXAuY3BwCkBAIC0yMTgsMTEgKzIxOCw5IEBAIGNvbnN0IFZlY3RvcjxFbGVtZW50Kj4q
IFRyZWVTY29wZU9yZGVyZWRNYXA6OmdldEFsbEVsZW1lbnRzQnlJZChjb25zdCBBdG9tU3RyaW5n
CiAKIGNvbnN0IFZlY3RvcjxBdG9tU3RyaW5nPiBUcmVlU2NvcGVPcmRlcmVkTWFwOjprZXlzKCkg
Y29uc3QKIHsKLSAgICBWZWN0b3I8QXRvbVN0cmluZz4gcmVzdWx0OwotICAgIHJlc3VsdC5yZXNl
cnZlSW5pdGlhbENhcGFjaXR5KG1fbWFwLnNpemUoKSk7Ci0gICAgZm9yIChhdXRvKiBrZXkgOiBt
X21hcC5rZXlzKCkpCi0gICAgICAgIHJlc3VsdC51bmNoZWNrZWRBcHBlbmQoY29uc3RfY2FzdDxB
dG9tU3RyaW5nSW1wbCo+KGtleSkpOwotICAgIHJldHVybiByZXN1bHQ7CisgICAgcmV0dXJuIFdU
Rjo6bWFwKG1fbWFwLCBbXShhdXRvJiBlbnRyeSkgLT4gQXRvbVN0cmluZyB7CisgICAgICAgIHJl
dHVybiBjb25zdF9jYXN0PEF0b21TdHJpbmdJbXBsKj4oZW50cnkua2V5KTsKKyAgICB9KTsKIH0K
IAogfSAvLyBuYW1lc3BhY2UgV2ViQ29yZQpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvZWRp
dGluZy9Db21wb3NpdGVFZGl0Q29tbWFuZC5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9lZGl0aW5nL0Nv
bXBvc2l0ZUVkaXRDb21tYW5kLmNwcAppbmRleCAxZjM3NDUxZDlhY2EyNmNkNGM1OGQzYTI2MWE3
NmVmNDNmOGZmYWU1Li40MDE2ZWMxMDI2NWQ2NmY5ZWRlYTgzODc1ZjU4NDFlMWZmZWFiNzhlIDEw
MDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9lZGl0aW5nL0NvbXBvc2l0ZUVkaXRDb21tYW5kLmNw
cAorKysgYi9Tb3VyY2UvV2ViQ29yZS9lZGl0aW5nL0NvbXBvc2l0ZUVkaXRDb21tYW5kLmNwcApA
QCAtNzg5LDEyICs3ODksOSBAQCBQb3NpdGlvbiBDb21wb3NpdGVFZGl0Q29tbWFuZDo6cmVwbGFj
ZVNlbGVjdGVkVGV4dEluTm9kZShjb25zdCBTdHJpbmcmIHRleHQpCiAKIHN0YXRpYyBWZWN0b3I8
UmVuZGVyZWREb2N1bWVudE1hcmtlcj4gY29weU1hcmtlcnMoY29uc3QgVmVjdG9yPFJlbmRlcmVk
RG9jdW1lbnRNYXJrZXIqPiYgbWFya2VyUG9pbnRlcnMpCiB7Ci0gICAgVmVjdG9yPFJlbmRlcmVk
RG9jdW1lbnRNYXJrZXI+IG1hcmtlcnM7Ci0gICAgbWFya2Vycy5yZXNlcnZlSW5pdGlhbENhcGFj
aXR5KG1hcmtlclBvaW50ZXJzLnNpemUoKSk7Ci0gICAgZm9yIChhdXRvJiBtYXJrZXJQb2ludGVy
IDogbWFya2VyUG9pbnRlcnMpCi0gICAgICAgIG1hcmtlcnMudW5jaGVja2VkQXBwZW5kKCptYXJr
ZXJQb2ludGVyKTsKLQotICAgIHJldHVybiBtYXJrZXJzOworICAgIHJldHVybiBtYXJrZXJQb2lu
dGVycy5tYXAoW10oYXV0byYgbWFya2VyUG9pbnRlcikgeworICAgICAgICByZXR1cm4gKm1hcmtl
clBvaW50ZXI7CisgICAgfSk7CiB9CiAKIHZvaWQgQ29tcG9zaXRlRWRpdENvbW1hbmQ6OnJlcGxh
Y2VUZXh0SW5Ob2RlUHJlc2VydmluZ01hcmtlcnMoVGV4dCYgbm9kZSwgdW5zaWduZWQgb2Zmc2V0
LCB1bnNpZ25lZCBjb3VudCwgY29uc3QgU3RyaW5nJiByZXBsYWNlbWVudFRleHQpCmRpZmYgLS1n
aXQgYS9Tb3VyY2UvV2ViQ29yZS9lZGl0aW5nL0VkaXRvci5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9l
ZGl0aW5nL0VkaXRvci5jcHAKaW5kZXggNzI0NWYxODA4NmJmNTM2OTQyNTc3ODU5ZGIxNmQ4OWMy
YjI0OGQ1NS4uMTVjNWMzOTBjMWI1NGYwZTMzYjVlOTI0NjRjNTNkNTJjOTIxZTI2YiAxMDA2NDQK
LS0tIGEvU291cmNlL1dlYkNvcmUvZWRpdGluZy9FZGl0b3IuY3BwCisrKyBiL1NvdXJjZS9XZWJD
b3JlL2VkaXRpbmcvRWRpdG9yLmNwcApAQCAtNDAzMyw3ICs0MDMzLDcgQEAgc3RhdGljIFZlY3Rv
cjxUZXh0TGlzdD4gZWRpdGFibGVUZXh0TGlzdHNBdFBvc2l0aW9uSW5EZXNjZW5kaW5nT3JkZXIo
Y29uc3QgUG9zaXQKICAgICB9CiAKICAgICBWZWN0b3I8VGV4dExpc3Q+IHRleHRMaXN0czsKLSAg
ICB0ZXh0TGlzdHMucmVzZXJ2ZUNhcGFjaXR5KGVuY2xvc2luZ0xpc3RzLnNpemUoKSk7CisgICAg
dGV4dExpc3RzLnJlc2VydmVJbml0aWFsQ2FwYWNpdHkoZW5jbG9zaW5nTGlzdHMuc2l6ZSgpKTsK
ICAgICBmb3IgKGF1dG8gaXRlcmF0b3IgPSBlbmNsb3NpbmdMaXN0cy5yYmVnaW4oKTsgaXRlcmF0
b3IgIT0gZW5jbG9zaW5nTGlzdHMucmVuZCgpOyArK2l0ZXJhdG9yKSB7CiAgICAgICAgIGF1dG8m
IGxpc3QgPSBpdGVyYXRvci0+Z2V0KCk7CiAgICAgICAgIGJvb2wgb3JkZXJlZCA9IGlzPEhUTUxP
TGlzdEVsZW1lbnQ+KGxpc3QpOwpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvZmlsZWFwaS9G
aWxlTGlzdC5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9maWxlYXBpL0ZpbGVMaXN0LmNwcAppbmRleCBj
MTlmODAyZGQ4OWQyNzEzMGEyMjFjNWJjYjJkOTczYzZkYTU1MWY1Li43YTA5ODE1YjYyZDhkYThi
NmFiN2YxNTVhZmM0Y2U1MTRlNGMwZTc1IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9maWxl
YXBpL0ZpbGVMaXN0LmNwcAorKysgYi9Tb3VyY2UvV2ViQ29yZS9maWxlYXBpL0ZpbGVMaXN0LmNw
cApAQCAtNDEsMTEgKzQxLDkgQEAgRmlsZSogRmlsZUxpc3Q6Oml0ZW0odW5zaWduZWQgaW5kZXgp
IGNvbnN0CiAKIFZlY3RvcjxTdHJpbmc+IEZpbGVMaXN0OjpwYXRocygpIGNvbnN0CiB7Ci0gICAg
VmVjdG9yPFN0cmluZz4gcGF0aHM7Ci0gICAgcGF0aHMucmVzZXJ2ZUluaXRpYWxDYXBhY2l0eSht
X2ZpbGVzLnNpemUoKSk7Ci0gICAgZm9yIChhdXRvJiBmaWxlIDogbV9maWxlcykKLSAgICAgICAg
cGF0aHMudW5jaGVja2VkQXBwZW5kKGZpbGUtPnBhdGgoKSk7Ci0gICAgcmV0dXJuIHBhdGhzOwor
ICAgIHJldHVybiBtX2ZpbGVzLm1hcChbXShhdXRvJiBmaWxlKSB7CisgICAgICAgIHJldHVybiBm
aWxlLT5wYXRoKCk7CisgICAgfSk7CiB9CiAKIH0gLy8gbmFtZXNwYWNlIFdlYkNvcmUKZGlmZiAt
LWdpdCBhL1NvdXJjZS9XZWJDb3JlL2hpc3RvcnkvSGlzdG9yeUl0ZW0uY3BwIGIvU291cmNlL1dl
YkNvcmUvaGlzdG9yeS9IaXN0b3J5SXRlbS5jcHAKaW5kZXggZDUzNzdhYjBmN2NjMWYzZTQ3MTk3
NWMyMDgwMGJlZTExODUyMTJlNC4uMGQ1ZTBkNzYxYmIwNWQwZDdkOGM3M2E3NWUyYTAxY2JiZjhj
YTY1YyAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvaGlzdG9yeS9IaXN0b3J5SXRlbS5jcHAK
KysrIGIvU291cmNlL1dlYkNvcmUvaGlzdG9yeS9IaXN0b3J5SXRlbS5jcHAKQEAgLTk1LDEwICs5
NSwxMiBAQCBpbmxpbmUgSGlzdG9yeUl0ZW06Okhpc3RvcnlJdGVtKGNvbnN0IEhpc3RvcnlJdGVt
JiBpdGVtKQogICAgICwgbV9kaXNwbGF5VGl0bGUoaXRlbS5tX2Rpc3BsYXlUaXRsZSkKICAgICAs
IG1fc2Nyb2xsUG9zaXRpb24oaXRlbS5tX3Njcm9sbFBvc2l0aW9uKQogICAgICwgbV9wYWdlU2Nh
bGVGYWN0b3IoaXRlbS5tX3BhZ2VTY2FsZUZhY3RvcikKKyAgICAsIG1fY2hpbGRyZW4oaXRlbS5t
X2NoaWxkcmVuLm1hcChbXShhdXRvJiBjaGlsZCkgeyByZXR1cm4gY2hpbGQtPmNvcHkoKTsgfSkp
CiAgICAgLCBtX2xhc3RWaXNpdFdhc0ZhaWx1cmUoaXRlbS5tX2xhc3RWaXNpdFdhc0ZhaWx1cmUp
CiAgICAgLCBtX2lzVGFyZ2V0SXRlbShpdGVtLm1faXNUYXJnZXRJdGVtKQogICAgICwgbV9pdGVt
U2VxdWVuY2VOdW1iZXIoaXRlbS5tX2l0ZW1TZXF1ZW5jZU51bWJlcikKICAgICAsIG1fZG9jdW1l
bnRTZXF1ZW5jZU51bWJlcihpdGVtLm1fZG9jdW1lbnRTZXF1ZW5jZU51bWJlcikKKyAgICAsIG1f
Zm9ybURhdGEoaXRlbS5tX2Zvcm1EYXRhID8gUmVmUHRyPEZvcm1EYXRhPiB7IGl0ZW0ubV9mb3Jt
RGF0YS0+Y29weSgpIH0gOiBudWxscHRyKQogICAgICwgbV9mb3JtQ29udGVudFR5cGUoaXRlbS5t
X2Zvcm1Db250ZW50VHlwZSkKICAgICAsIG1fcHJ1bmluZ1JlYXNvbihQcnVuaW5nUmVhc29uOjpO
b25lKQogI2lmIFBMQVRGT1JNKElPU19GQU1JTFkpCkBAIC0xMDgsMTMgKzExMCw2IEBAIGlubGlu
ZSBIaXN0b3J5SXRlbTo6SGlzdG9yeUl0ZW0oY29uc3QgSGlzdG9yeUl0ZW0mIGl0ZW0pCiAjZW5k
aWYKICAgICAsIG1faWRlbnRpZmllcihpdGVtLm1faWRlbnRpZmllcikKIHsKLSAgICBpZiAoaXRl
bS5tX2Zvcm1EYXRhKQotICAgICAgICBtX2Zvcm1EYXRhID0gaXRlbS5tX2Zvcm1EYXRhLT5jb3B5
KCk7Ci0gICAgICAgIAotICAgIHVuc2lnbmVkIHNpemUgPSBpdGVtLm1fY2hpbGRyZW4uc2l6ZSgp
OwotICAgIG1fY2hpbGRyZW4ucmVzZXJ2ZUluaXRpYWxDYXBhY2l0eShzaXplKTsKLSAgICBmb3Ig
KHVuc2lnbmVkIGkgPSAwOyBpIDwgc2l6ZTsgKytpKQotICAgICAgICBtX2NoaWxkcmVuLnVuY2hl
Y2tlZEFwcGVuZChpdGVtLm1fY2hpbGRyZW5baV0tPmNvcHkoKSk7CiB9CiAKIFJlZjxIaXN0b3J5
SXRlbT4gSGlzdG9yeUl0ZW06OmNvcHkoKSBjb25zdApkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNv
cmUvaHRtbC9GaWxlSW5wdXRUeXBlLmNwcCBiL1NvdXJjZS9XZWJDb3JlL2h0bWwvRmlsZUlucHV0
VHlwZS5jcHAKaW5kZXggYTIzNzdiYzFmMmI0NmFhNGY0ODgxNmZjMzcwNjFlMDlhNDljOTc2Mi4u
MDZmMTJhYjI4OTdmMmRmZmRiMmM2YWM3ZjZlOTNjZmMxMmRhNTNkNiAxMDA2NDQKLS0tIGEvU291
cmNlL1dlYkNvcmUvaHRtbC9GaWxlSW5wdXRUeXBlLmNwcAorKysgYi9Tb3VyY2UvV2ViQ29yZS9o
dG1sL0ZpbGVJbnB1dFR5cGUuY3BwCkBAIC0zODUsMTMgKzM4NSw4IEBAIHZvaWQgRmlsZUlucHV0
VHlwZTo6c2V0RmlsZXMoUmVmUHRyPEZpbGVMaXN0PiYmIGZpbGVzLCBSZXF1ZXN0SWNvbiBzaG91
bGRSZXF1ZXN0CiAgICAgcHJvdGVjdGVkSW5wdXRFbGVtZW50LT5zZXRGb3JtQ29udHJvbFZhbHVl
TWF0Y2hlc1JlbmRlcmVyKHRydWUpOwogICAgIHByb3RlY3RlZElucHV0RWxlbWVudC0+dXBkYXRl
VmFsaWRpdHkoKTsKIAotICAgIGlmIChzaG91bGRSZXF1ZXN0SWNvbiA9PSBSZXF1ZXN0SWNvbjo6
WWVzKSB7Ci0gICAgICAgIFZlY3RvcjxTdHJpbmc+IHBhdGhzOwotICAgICAgICBwYXRocy5yZXNl
cnZlSW5pdGlhbENhcGFjaXR5KGxlbmd0aCk7Ci0gICAgICAgIGZvciAoYXV0byYgZmlsZSA6IG1f
ZmlsZUxpc3QtPmZpbGVzKCkpCi0gICAgICAgICAgICBwYXRocy51bmNoZWNrZWRBcHBlbmQoZmls
ZS0+cGF0aCgpKTsKLSAgICAgICAgcmVxdWVzdEljb24ocGF0aHMpOwotICAgIH0KKyAgICBpZiAo
c2hvdWxkUmVxdWVzdEljb24gPT0gUmVxdWVzdEljb246OlllcykKKyAgICAgICAgcmVxdWVzdElj
b24obV9maWxlTGlzdC0+cGF0aHMoKSk7CiAKICAgICBpZiAocHJvdGVjdGVkSW5wdXRFbGVtZW50
LT5yZW5kZXJlcigpKQogICAgICAgICBwcm90ZWN0ZWRJbnB1dEVsZW1lbnQtPnJlbmRlcmVyKCkt
PnJlcGFpbnQoKTsKQEAgLTQ0Nyw3ICs0NDIsNyBAQCB2b2lkIEZpbGVJbnB1dFR5cGU6OmZpbGVz
Q2hvc2VuKGNvbnN0IFZlY3RvcjxTdHJpbmc+JiBwYXRocywgY29uc3QgVmVjdG9yPFN0cmluZwog
ICAgIGZvciAoc2l6ZV90IGkgPSAwOyBpIDwgc2l6ZTsgKytpKQogICAgICAgICBmaWxlcy51bmNo
ZWNrZWRBcHBlbmQoeyBwYXRoc1tpXSwgaSA8IHJlcGxhY2VtZW50UGF0aHMuc2l6ZSgpID8gcmVw
bGFjZW1lbnRQYXRoc1tpXSA6IG51bGxTdHJpbmcoKSwgeyB9IH0pOwogCi0gICAgZmlsZXNDaG9z
ZW4oZmlsZXMpOworICAgIGZpbGVzQ2hvc2VuKFdURk1vdmUoZmlsZXMpKTsKIH0KIAogdm9pZCBG
aWxlSW5wdXRUeXBlOjpkaWRDcmVhdGVGaWxlTGlzdChSZWY8RmlsZUxpc3Q+JiYgZmlsZUxpc3Qs
IFJlZlB0cjxJY29uPiYmIGljb24pCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9odG1sL0xp
bmtJY29uQ29sbGVjdG9yLmNwcCBiL1NvdXJjZS9XZWJDb3JlL2h0bWwvTGlua0ljb25Db2xsZWN0
b3IuY3BwCmluZGV4IDhkNzBkNThiN2Y5ZDIzZjBkMzI5MjZkNDViMmRhZDBjZGEwODg5YjUuLjM5
ODM2NDk5ZjY3Y2I1ZjFlZmMwNTg4YjNkOWIwOWE0NDQ0OGEyMTUgMTAwNjQ0Ci0tLSBhL1NvdXJj
ZS9XZWJDb3JlL2h0bWwvTGlua0ljb25Db2xsZWN0b3IuY3BwCisrKyBiL1NvdXJjZS9XZWJDb3Jl
L2h0bWwvTGlua0ljb25Db2xsZWN0b3IuY3BwCkBAIC0xMDIsOCArMTAyLDggQEAgYXV0byBMaW5r
SWNvbkNvbGxlY3Rvcjo6aWNvbnNPZlR5cGVzKE9wdGlvblNldDxMaW5rSWNvblR5cGU+IGljb25U
eXBlcykgLT4gVmVjdG8KIAogICAgICAgICBWZWN0b3I8c3RkOjpwYWlyPFN0cmluZywgU3RyaW5n
Pj4gYXR0cmlidXRlczsKICAgICAgICAgaWYgKGxpbmtFbGVtZW50Lmhhc0F0dHJpYnV0ZXMoKSkg
ewotICAgICAgICAgICAgYXR0cmlidXRlcy5yZXNlcnZlQ2FwYWNpdHkobGlua0VsZW1lbnQuYXR0
cmlidXRlQ291bnQoKSk7Ci0gICAgICAgICAgICBmb3IgKGNvbnN0IEF0dHJpYnV0ZSYgYXR0cmli
dXRlIDogbGlua0VsZW1lbnQuYXR0cmlidXRlc0l0ZXJhdG9yKCkpCisgICAgICAgICAgICBhdHRy
aWJ1dGVzLnJlc2VydmVJbml0aWFsQ2FwYWNpdHkobGlua0VsZW1lbnQuYXR0cmlidXRlQ291bnQo
KSk7CisgICAgICAgICAgICBmb3IgKGF1dG8mIGF0dHJpYnV0ZSA6IGxpbmtFbGVtZW50LmF0dHJp
YnV0ZXNJdGVyYXRvcigpKQogICAgICAgICAgICAgICAgIGF0dHJpYnV0ZXMudW5jaGVja2VkQXBw
ZW5kKHsgYXR0cmlidXRlLmxvY2FsTmFtZSgpLCBhdHRyaWJ1dGUudmFsdWUoKSB9KTsKICAgICAg
ICAgfQogCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9odG1sL1VSTFNlYXJjaFBhcmFtcy5j
cHAgYi9Tb3VyY2UvV2ViQ29yZS9odG1sL1VSTFNlYXJjaFBhcmFtcy5jcHAKaW5kZXggZDRmYmMx
ZjA2YWJlYWVjMTEyZGFiZGJjMmQ4NTI5MTUyNDgxN2NkNC4uN2U1NjQyN2E4ZTAyMWI3Zjk1NTVi
YmM0MGU5ZWRjYmVmNmU3ZWI4MyAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvaHRtbC9VUkxT
ZWFyY2hQYXJhbXMuY3BwCisrKyBiL1NvdXJjZS9XZWJDb3JlL2h0bWwvVVJMU2VhcmNoUGFyYW1z
LmNwcApAQCAtMTIyLDYgKzEyMiw3IEBAIFZlY3RvcjxTdHJpbmc+IFVSTFNlYXJjaFBhcmFtczo6
Z2V0QWxsKGNvbnN0IFN0cmluZyYgbmFtZSkgY29uc3QKICAgICAgICAgaWYgKHBhaXIua2V5ID09
IG5hbWUpCiAgICAgICAgICAgICB2YWx1ZXMudW5jaGVja2VkQXBwZW5kKHBhaXIudmFsdWUpOwog
ICAgIH0KKyAgICB2YWx1ZXMuc2hyaW5rVG9GaXQoKTsKICAgICByZXR1cm4gdmFsdWVzOwogfQog
CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9sYXlvdXQvZm9ybWF0dGluZ0NvbnRleHRzL2lu
bGluZS9JbmxpbmVMaW5lQnVpbGRlci5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9sYXlvdXQvZm9ybWF0
dGluZ0NvbnRleHRzL2lubGluZS9JbmxpbmVMaW5lQnVpbGRlci5jcHAKaW5kZXggMzYzOGQ1Yzlk
NTNjNzE4OGM3YmQ2ZTdkNmYxOWQwODhhMDQ3ODU1ZS4uOGVmZmVmNDJhOTQ4MzhkMWUzMDRhYWYx
ODk1ZjhkYzVlMGIwNDFmZiAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvbGF5b3V0L2Zvcm1h
dHRpbmdDb250ZXh0cy9pbmxpbmUvSW5saW5lTGluZUJ1aWxkZXIuY3BwCisrKyBiL1NvdXJjZS9X
ZWJDb3JlL2xheW91dC9mb3JtYXR0aW5nQ29udGV4dHMvaW5saW5lL0lubGluZUxpbmVCdWlsZGVy
LmNwcApAQCAtMzUwLDggKzM1MCw4IEBAIExpbmVCdWlsZGVyOjpMaW5lQ29udGVudCBMaW5lQnVp
bGRlcjo6bGF5b3V0SW5saW5lQ29udGVudChjb25zdCBJbmxpbmVJdGVtUmFuZ2UmCiAgICAgICAg
ICAgICAgICAgY29udGludWU7CiAgICAgICAgICAgICB9CiAKLSAgICAgICAgICAgIHJ1bkxldmVs
cy5hcHBlbmQobGluZVJ1bnNbaV0uYmlkaUxldmVsKCkpOwotICAgICAgICAgICAgcnVuSW5kZXhP
ZmZzZXRNYXAuYXBwZW5kKGFjY3VtdWxhdGVkT2Zmc2V0KTsKKyAgICAgICAgICAgIHJ1bkxldmVs
cy51bmNoZWNrZWRBcHBlbmQobGluZVJ1bnNbaV0uYmlkaUxldmVsKCkpOworICAgICAgICAgICAg
cnVuSW5kZXhPZmZzZXRNYXAudW5jaGVja2VkQXBwZW5kKGFjY3VtdWxhdGVkT2Zmc2V0KTsKICAg
ICAgICAgfQogCiAgICAgICAgIFZlY3RvcjxpbnQzMl90PiB2aXN1YWxPcmRlckxpc3QocnVuTGV2
ZWxzLnNpemUoKSk7CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9sb2FkZXIvRG9jdW1lbnRM
b2FkZXIuY3BwIGIvU291cmNlL1dlYkNvcmUvbG9hZGVyL0RvY3VtZW50TG9hZGVyLmNwcAppbmRl
eCAzNTliNjM4NTE4Njg0MjNjMzdhMTAwNjM1MDFhNGRmMDZkOWFkYmFhLi5lYzUwZGU5MGRkZWQw
NzQ2MDRkZDE4N2FlOWRlNjExMjZhNmFkMTI0IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9s
b2FkZXIvRG9jdW1lbnRMb2FkZXIuY3BwCisrKyBiL1NvdXJjZS9XZWJDb3JlL2xvYWRlci9Eb2N1
bWVudExvYWRlci5jcHAKQEAgLTIyODIsMTQgKzIyODIsMTEgQEAgdm9pZCBEb2N1bWVudExvYWRl
cjo6c3RhcnRJY29uTG9hZGluZygpCiAgICAgaWYgKCFtX2xpbmtJY29ucy5zaXplKCkpCiAgICAg
ICAgIHJldHVybjsKIAotICAgIFZlY3RvcjxzdGQ6OnBhaXI8V2ViQ29yZTo6TGlua0ljb24mLCB1
aW50NjRfdD4+IGljb25EZWNpc2lvbnM7Ci0gICAgaWNvbkRlY2lzaW9ucy5yZXNlcnZlSW5pdGlh
bENhcGFjaXR5KG1fbGlua0ljb25zLnNpemUoKSk7Ci0gICAgZm9yIChhdXRvJiBpY29uIDogbV9s
aW5rSWNvbnMpIHsKKyAgICBhdXRvIGljb25EZWNpc2lvbnMgPSBXVEY6Om1hcChtX2xpbmtJY29u
cywgWyZdKGF1dG8mIGljb24pIC0+IHN0ZDo6cGFpcjxXZWJDb3JlOjpMaW5rSWNvbiYsIHVpbnQ2
NF90PiB7CiAgICAgICAgIGF1dG8gcmVzdWx0ID0gbV9pY29uc1BlbmRpbmdMb2FkRGVjaXNpb24u
YWRkKG5leHRJY29uQ2FsbGJhY2tJRCsrLCBpY29uKTsKLSAgICAgICAgaWNvbkRlY2lzaW9ucy51
bmNoZWNrZWRBcHBlbmQoeyBpY29uLCByZXN1bHQuaXRlcmF0b3ItPmtleSB9KTsKLSAgICB9Ci0K
LSAgICBtX2ZyYW1lLT5sb2FkZXIoKS5jbGllbnQoKS5nZXRMb2FkRGVjaXNpb25Gb3JJY29ucyhp
Y29uRGVjaXNpb25zKTsKKyAgICAgICAgcmV0dXJuIHsgaWNvbiwgcmVzdWx0Lml0ZXJhdG9yLT5r
ZXkgfTsKKyAgICB9KTsKKyAgICBtX2ZyYW1lLT5sb2FkZXIoKS5jbGllbnQoKS5nZXRMb2FkRGVj
aXNpb25Gb3JJY29ucyhXVEZNb3ZlKGljb25EZWNpc2lvbnMpKTsKIH0KIAogdm9pZCBEb2N1bWVu
dExvYWRlcjo6ZGlkR2V0TG9hZERlY2lzaW9uRm9ySWNvbihib29sIGRlY2lzaW9uLCB1aW50NjRf
dCBsb2FkSWRlbnRpZmllciwgQ29tcGxldGlvbkhhbmRsZXI8dm9pZChGcmFnbWVudGVkU2hhcmVk
QnVmZmVyKik+JiYgY29tcGxldGlvbkhhbmRsZXIpCkBAIC0yNDQ5LDYgKzI0NDYsNyBAQCB2b2lk
IERvY3VtZW50TG9hZGVyOjpzZXRBY3RpdmVDb250ZW50UnVsZUxpc3RBY3Rpb25QYXR0ZXJucyhj
b25zdCBIYXNoTWFwPFN0cmluZwogICAgICAgICAgICAgaWYgKHBhcnNlZFBhdHRlcm4uaXNWYWxp
ZCgpKQogICAgICAgICAgICAgICAgIHBhdHRlcm5WZWN0b3IudW5jaGVja2VkQXBwZW5kKFdURk1v
dmUocGFyc2VkUGF0dGVybikpOwogICAgICAgICB9CisgICAgICAgIHBhdHRlcm5WZWN0b3Iuc2hy
aW5rVG9GaXQoKTsKICAgICAgICAgcGFyc2VkUGF0dGVybk1hcC5zZXQocGFpci5rZXksIFdURk1v
dmUocGF0dGVyblZlY3RvcikpOwogICAgIH0KIApkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUv
bG9hZGVyL1RleHRUcmFja0xvYWRlci5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9sb2FkZXIvVGV4dFRy
YWNrTG9hZGVyLmNwcAppbmRleCA4Y2MzYzU2OGM0Mzc5NmFjNjFiMzA5NzU0N2E4OWVmODEyZDk4
ZDRkLi44Yjk4NTE5MGQ3MmMyY2FlYWZiNWQyYTI0OTJjZGQyNDgyZjRmMThkIDEwMDY0NAotLS0g
YS9Tb3VyY2UvV2ViQ29yZS9sb2FkZXIvVGV4dFRyYWNrTG9hZGVyLmNwcAorKysgYi9Tb3VyY2Uv
V2ViQ29yZS9sb2FkZXIvVGV4dFRyYWNrTG9hZGVyLmNwcApAQCAtMTk5LDEyICsxOTksOSBAQCBW
ZWN0b3I8UmVmPFZUVEN1ZT4+IFRleHRUcmFja0xvYWRlcjo6Z2V0TmV3Q3VlcygpCiAgICAgaWYg
KCFtX2N1ZVBhcnNlcikKICAgICAgICAgcmV0dXJuIHsgfTsKIAotICAgIGF1dG8gY3VlcyA9IG1f
Y3VlUGFyc2VyLT50YWtlQ3VlcygpOwotICAgIFZlY3RvcjxSZWY8VlRUQ3VlPj4gcmVzdWx0Owot
ICAgIHJlc3VsdC5yZXNlcnZlSW5pdGlhbENhcGFjaXR5KGN1ZXMuc2l6ZSgpKTsKLSAgICBmb3Ig
KGF1dG8mIGN1ZURhdGEgOiBjdWVzKQotICAgICAgICByZXN1bHQudW5jaGVja2VkQXBwZW5kKFZU
VEN1ZTo6Y3JlYXRlKG1fZG9jdW1lbnQsIGN1ZURhdGEpKTsKLSAgICByZXR1cm4gcmVzdWx0Owor
ICAgIHJldHVybiBtX2N1ZVBhcnNlci0+dGFrZUN1ZXMoKS5tYXAoW3RoaXNdKGF1dG8mIGN1ZURh
dGEpIHsKKyAgICAgICAgcmV0dXJuIFZUVEN1ZTo6Y3JlYXRlKG1fZG9jdW1lbnQsIGN1ZURhdGEp
OworICAgIH0pOwogfQogCiBWZWN0b3I8UmVmPFZUVFJlZ2lvbj4+IFRleHRUcmFja0xvYWRlcjo6
Z2V0TmV3UmVnaW9ucygpCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9sb2FkZXIvYXJjaGl2
ZS9jZi9MZWdhY3lXZWJBcmNoaXZlLmNwcCBiL1NvdXJjZS9XZWJDb3JlL2xvYWRlci9hcmNoaXZl
L2NmL0xlZ2FjeVdlYkFyY2hpdmUuY3BwCmluZGV4IDdmNGJhZDZmY2MzYTljOTdhNmE1MTdhYjli
MjlkMDgwY2E5ZGE3MWIuLmNkOTQxY2YwNTE4MGRmOGMzNzJlOTkzZGFjM2IxOTFlYjVmMzgxYjIg
MTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL2xvYWRlci9hcmNoaXZlL2NmL0xlZ2FjeVdlYkFy
Y2hpdmUuY3BwCisrKyBiL1NvdXJjZS9XZWJDb3JlL2xvYWRlci9hcmNoaXZlL2NmL0xlZ2FjeVdl
YkFyY2hpdmUuY3BwCkBAIC02MTAsMTEgKzYxMCw3IEBAIFJlZlB0cjxMZWdhY3lXZWJBcmNoaXZl
PiBMZWdhY3lXZWJBcmNoaXZlOjpjcmVhdGVGcm9tU2VsZWN0aW9uKEZyYW1lKiBmcmFtZSkKICAg
ICBTdHJpbmcgaWZyYW1lTWFya3VwID0gIjxpZnJhbWUgZnJhbWVib3JkZXI9XCJub1wiIG1hcmdp
bndpZHRoPVwiMFwiIG1hcmdpbmhlaWdodD1cIjBcIiB3aWR0aD1cIjk4JSVcIiBoZWlnaHQ9XCI5
OCUlXCIgc3JjPVwiIiArIGZyYW1lLT5sb2FkZXIoKS5kb2N1bWVudExvYWRlcigpLT5yZXNwb25z
ZSgpLnVybCgpLnN0cmluZygpICsgIlwiPjwvaWZyYW1lPiI7CiAgICAgYXV0byBpZnJhbWVSZXNv
dXJjZSA9IEFyY2hpdmVSZXNvdXJjZTo6Y3JlYXRlKHV0ZjhCdWZmZXIoaWZyYW1lTWFya3VwKSwg
YWJvdXRCbGFua1VSTCgpLCAidGV4dC9odG1sIiwgIlVURi04IiwgU3RyaW5nKCkpOwogCi0gICAg
VmVjdG9yPFJlZjxMZWdhY3lXZWJBcmNoaXZlPj4gc3ViZnJhbWVBcmNoaXZlczsKLSAgICBzdWJm
cmFtZUFyY2hpdmVzLnJlc2VydmVJbml0aWFsQ2FwYWNpdHkoMSk7Ci0gICAgc3ViZnJhbWVBcmNo
aXZlcy51bmNoZWNrZWRBcHBlbmQoYXJjaGl2ZS5yZWxlYXNlTm9uTnVsbCgpKTsKLQotICAgIHJl
dHVybiBjcmVhdGUoaWZyYW1lUmVzb3VyY2UucmVsZWFzZU5vbk51bGwoKSwgeyB9LCBXVEZNb3Zl
KHN1YmZyYW1lQXJjaGl2ZXMpKTsKKyAgICByZXR1cm4gY3JlYXRlKGlmcmFtZVJlc291cmNlLnJl
bGVhc2VOb25OdWxsKCksIHsgfSwgVmVjdG9yIHsgYXJjaGl2ZS5yZWxlYXNlTm9uTnVsbCgpIH0p
OwogfQogCiB9CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9wYWdlL0NhcHRpb25Vc2VyUHJl
ZmVyZW5jZXNNZWRpYUFGLmNwcCBiL1NvdXJjZS9XZWJDb3JlL3BhZ2UvQ2FwdGlvblVzZXJQcmVm
ZXJlbmNlc01lZGlhQUYuY3BwCmluZGV4IDIxNWYwNDA3ZGRiZTJiNjI4YTM1Zjg3M2NmNzI4ODhj
NzkyMjVhNDkuLjBlZmZhNjNmM2NmNGNlZjc3Y2ExMDM3ZTkyOWM2ZDUzNjM1MTNjMDcgMTAwNjQ0
Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL3BhZ2UvQ2FwdGlvblVzZXJQcmVmZXJlbmNlc01lZGlhQUYu
Y3BwCisrKyBiL1NvdXJjZS9XZWJDb3JlL3BhZ2UvQ2FwdGlvblVzZXJQcmVmZXJlbmNlc01lZGlh
QUYuY3BwCkBAIC02MTYsOSArNjE2LDkgQEAgVmVjdG9yPFN0cmluZz4gQ2FwdGlvblVzZXJQcmVm
ZXJlbmNlc01lZGlhQUY6OnByZWZlcnJlZEF1ZGlvQ2hhcmFjdGVyaXN0aWNzKCkgY28KICAgICAg
ICAgcmV0dXJuIENhcHRpb25Vc2VyUHJlZmVyZW5jZXM6OnByZWZlcnJlZEF1ZGlvQ2hhcmFjdGVy
aXN0aWNzKCk7CiAKICAgICBWZWN0b3I8U3RyaW5nPiB1c2VyUHJlZmVycmVkQXVkaW9DaGFyYWN0
ZXJpc3RpY3M7Ci0gICAgdXNlclByZWZlcnJlZEF1ZGlvQ2hhcmFjdGVyaXN0aWNzLnJlc2VydmVD
YXBhY2l0eShjaGFyYWN0ZXJpc3RpY0NvdW50KTsKKyAgICB1c2VyUHJlZmVycmVkQXVkaW9DaGFy
YWN0ZXJpc3RpY3MucmVzZXJ2ZUluaXRpYWxDYXBhY2l0eShjaGFyYWN0ZXJpc3RpY0NvdW50KTsK
ICAgICBmb3IgKENGSW5kZXggaSA9IDA7IGkgPCBjaGFyYWN0ZXJpc3RpY0NvdW50OyBpKyspCi0g
ICAgICAgIHVzZXJQcmVmZXJyZWRBdWRpb0NoYXJhY3RlcmlzdGljcy5hcHBlbmQoc3RhdGljX2Nh
c3Q8Q0ZTdHJpbmdSZWY+KENGQXJyYXlHZXRWYWx1ZUF0SW5kZXgoY2hhcmFjdGVyaXN0aWNzLmdl
dCgpLCBpKSkpOworICAgICAgICB1c2VyUHJlZmVycmVkQXVkaW9DaGFyYWN0ZXJpc3RpY3MudW5j
aGVja2VkQXBwZW5kKHN0YXRpY19jYXN0PENGU3RyaW5nUmVmPihDRkFycmF5R2V0VmFsdWVBdElu
ZGV4KGNoYXJhY3RlcmlzdGljcy5nZXQoKSwgaSkpKTsKIAogICAgIHJldHVybiB1c2VyUHJlZmVy
cmVkQXVkaW9DaGFyYWN0ZXJpc3RpY3M7CiB9CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9w
YWdlL0RPTVdpbmRvdy5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9wYWdlL0RPTVdpbmRvdy5jcHAKaW5k
ZXggMGZhNDE0ODI4NGUwNzVmNTFhYmIwYjNmNTU0ZTExMjZiNzkzYTUyNy4uMjI0YTdiN2IyMWY1
MjVmZTE4MTZkNDRhYzE1MGFhYWE2Mjc2OTc4OCAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUv
cGFnZS9ET01XaW5kb3cuY3BwCisrKyBiL1NvdXJjZS9XZWJDb3JlL3BhZ2UvRE9NV2luZG93LmNw
cApAQCAtMjQzLDEwICsyNDMsOSBAQCBib29sIERPTVdpbmRvdzo6ZGlzcGF0Y2hBbGxQZW5kaW5n
QmVmb3JlVW5sb2FkRXZlbnRzKCkKICAgICBpZiAoYWxyZWFkeURpc3BhdGNoZWQpCiAgICAgICAg
IHJldHVybiB0cnVlOwogCi0gICAgVmVjdG9yPFJlZjxET01XaW5kb3c+PiB3aW5kb3dzOwotICAg
IHdpbmRvd3MucmVzZXJ2ZUluaXRpYWxDYXBhY2l0eShzZXQuc2l6ZSgpKTsKLSAgICBmb3IgKGF1
dG8mIHdpbmRvdyA6IHNldCkKLSAgICAgICAgd2luZG93cy51bmNoZWNrZWRBcHBlbmQoKndpbmRv
dy5rZXkpOworICAgIGF1dG8gd2luZG93cyA9IFdURjo6bWFwKHNldCwgW10oYXV0byYgZW50cnkp
IC0+IFJlZjxET01XaW5kb3c+IHsKKyAgICAgICAgcmV0dXJuICplbnRyeS5rZXk7CisgICAgfSk7
CiAKICAgICBmb3IgKGF1dG8mIHdpbmRvdyA6IHdpbmRvd3MpIHsKICAgICAgICAgaWYgKCFzZXQu
Y29udGFpbnMod2luZG93LnB0cigpKSkKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3BhZ2Uv
SW50ZXJzZWN0aW9uT2JzZXJ2ZXIuY3BwIGIvU291cmNlL1dlYkNvcmUvcGFnZS9JbnRlcnNlY3Rp
b25PYnNlcnZlci5jcHAKaW5kZXggNWEyNzQxN2M2ODBhMWYxYmNiODI3OWM3MGE5ODU5NGQxYzQ0
MjA0ZC4uZGIwYzNmNGI2YTFiZDQ1NDNlZjNhMWY4MzQwM2RmY2JmZTk5Mzg2MSAxMDA2NDQKLS0t
IGEvU291cmNlL1dlYkNvcmUvcGFnZS9JbnRlcnNlY3Rpb25PYnNlcnZlci5jcHAKKysrIGIvU291
cmNlL1dlYkNvcmUvcGFnZS9JbnRlcnNlY3Rpb25PYnNlcnZlci5jcHAKQEAgLTEwMSw4ICsxMDEs
NyBAQCBFeGNlcHRpb25PcjxSZWY8SW50ZXJzZWN0aW9uT2JzZXJ2ZXI+PiBJbnRlcnNlY3Rpb25P
YnNlcnZlcjo6Y3JlYXRlKERvY3VtZW50JiBkbwogCiAgICAgVmVjdG9yPGRvdWJsZT4gdGhyZXNo
b2xkczsKICAgICBXVEY6OnN3aXRjaE9uKGluaXQudGhyZXNob2xkLCBbJnRocmVzaG9sZHNdIChk
b3VibGUgaW5pdFRocmVzaG9sZCkgewotICAgICAgICB0aHJlc2hvbGRzLnJlc2VydmVJbml0aWFs
Q2FwYWNpdHkoMSk7Ci0gICAgICAgIHRocmVzaG9sZHMudW5jaGVja2VkQXBwZW5kKGluaXRUaHJl
c2hvbGQpOworICAgICAgICB0aHJlc2hvbGRzLmFwcGVuZChpbml0VGhyZXNob2xkKTsKICAgICB9
LCBbJnRocmVzaG9sZHNdIChWZWN0b3I8ZG91YmxlPiYgaW5pdFRocmVzaG9sZHMpIHsKICAgICAg
ICAgdGhyZXNob2xkcyA9IFdURk1vdmUoaW5pdFRocmVzaG9sZHMpOwogICAgIH0pOwpkaWZmIC0t
Z2l0IGEvU291cmNlL1dlYkNvcmUvcGFnZS9QYWdlLmNwcCBiL1NvdXJjZS9XZWJDb3JlL3BhZ2Uv
UGFnZS5jcHAKaW5kZXggZmI1NmFlMTkxYTYyMjdkZDZlYTQ0ZTg2N2QzNDYyNTk0MGUxMGI1My4u
ZmQ2Y2Q1Mjc2YjY5NGY2OTQ3Njg0Yjc3MDlmM2M1MjNhZDAwYmZkMiAxMDA2NDQKLS0tIGEvU291
cmNlL1dlYkNvcmUvcGFnZS9QYWdlLmNwcAorKysgYi9Tb3VyY2UvV2ViQ29yZS9wYWdlL1BhZ2Uu
Y3BwCkBAIC05NjYsNyArOTY2LDcgQEAgdWludDMyX3QgUGFnZTo6cmVwbGFjZVJhbmdlc1dpdGhU
ZXh0KGNvbnN0IFZlY3RvcjxTaW1wbGVSYW5nZT4mIHJhbmdlc1RvUmVwbGFjZSwKICAgICAgICAg
aWYgKCFoaWdoZXN0Um9vdCB8fCBoaWdoZXN0Um9vdCAhPSBoaWdoZXN0RWRpdGFibGVSb290KG1h
a2VEZXByZWNhdGVkTGVnYWN5UG9zaXRpb24ocmFuZ2UuZW5kKSkgfHwgIWhpZ2hlc3RSb290LT5k
b2N1bWVudCgpLmZyYW1lKCkpCiAgICAgICAgICAgICBjb250aW51ZTsKICAgICAgICAgYXV0byBz
Y29wZSA9IG1ha2VSYW5nZVNlbGVjdGluZ05vZGVDb250ZW50cygqaGlnaGVzdFJvb3QpOwotICAg
ICAgICByZXBsYWNlbWVudFJhbmdlcy5hcHBlbmQoeyBXVEZNb3ZlKGhpZ2hlc3RSb290KSwgY2hh
cmFjdGVyUmFuZ2Uoc2NvcGUsIHJhbmdlKSB9KTsKKyAgICAgICAgcmVwbGFjZW1lbnRSYW5nZXMu
dW5jaGVja2VkQXBwZW5kKHsgV1RGTW92ZShoaWdoZXN0Um9vdCksIGNoYXJhY3RlclJhbmdlKHNj
b3BlLCByYW5nZSkgfSk7CiAgICAgfQogCiAgICAgcmVwbGFjZVJhbmdlcygqdGhpcywgcmVwbGFj
ZW1lbnRSYW5nZXMsIHJlcGxhY2VtZW50VGV4dCk7CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29y
ZS9wYWdlL2NzcC9Db250ZW50U2VjdXJpdHlQb2xpY3kuY3BwIGIvU291cmNlL1dlYkNvcmUvcGFn
ZS9jc3AvQ29udGVudFNlY3VyaXR5UG9saWN5LmNwcAppbmRleCBiNTI1Y2I2YmVlNzRmMzdkZjAx
OWFmNTJlOGFhMjZiYzNiZmE4MWYzLi5lYTZkMGRlYWM4OTQzODgyZWZhOGZmMzhjMDI1OTZhMzE0
NWNmZDk3IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9wYWdlL2NzcC9Db250ZW50U2VjdXJp
dHlQb2xpY3kuY3BwCisrKyBiL1NvdXJjZS9XZWJDb3JlL3BhZ2UvY3NwL0NvbnRlbnRTZWN1cml0
eVBvbGljeS5jcHAKQEAgLTE2MSw5ICsxNjEsOSBAQCBDb250ZW50U2VjdXJpdHlQb2xpY3lSZXNw
b25zZUhlYWRlcnMgQ29udGVudFNlY3VyaXR5UG9saWN5OjpyZXNwb25zZUhlYWRlcnMoKSBjbwog
ewogICAgIGlmICghbV9jYWNoZWRSZXNwb25zZUhlYWRlcnMpIHsKICAgICAgICAgQ29udGVudFNl
Y3VyaXR5UG9saWN5UmVzcG9uc2VIZWFkZXJzIHJlc3VsdDsKLSAgICAgICAgcmVzdWx0Lm1faGVh
ZGVycy5yZXNlcnZlSW5pdGlhbENhcGFjaXR5KG1fcG9saWNpZXMuc2l6ZSgpKTsKLSAgICAgICAg
Zm9yIChhdXRvJiBwb2xpY3kgOiBtX3BvbGljaWVzKQotICAgICAgICAgICAgcmVzdWx0Lm1faGVh
ZGVycy51bmNoZWNrZWRBcHBlbmQoeyBwb2xpY3ktPmhlYWRlcigpLCBwb2xpY3ktPmhlYWRlclR5
cGUoKSB9KTsKKyAgICAgICAgcmVzdWx0Lm1faGVhZGVycyA9IG1fcG9saWNpZXMubWFwKFtdKGF1
dG8mIHBvbGljeSkgeworICAgICAgICAgICAgcmV0dXJuIHN0ZDo6bWFrZV9wYWlyKHBvbGljeS0+
aGVhZGVyKCksIHBvbGljeS0+aGVhZGVyVHlwZSgpKTsKKyAgICAgICAgfSk7CiAgICAgICAgIHJl
c3VsdC5tX2h0dHBTdGF0dXNDb2RlID0gbV9odHRwU3RhdHVzQ29kZTsKICAgICAgICAgbV9jYWNo
ZWRSZXNwb25zZUhlYWRlcnMgPSBXVEZNb3ZlKHJlc3VsdCk7CiAgICAgfQpkaWZmIC0tZ2l0IGEv
U291cmNlL1dlYkNvcmUvcGFnZS9jc3AvQ29udGVudFNlY3VyaXR5UG9saWN5UmVzcG9uc2VIZWFk
ZXJzLmNwcCBiL1NvdXJjZS9XZWJDb3JlL3BhZ2UvY3NwL0NvbnRlbnRTZWN1cml0eVBvbGljeVJl
c3BvbnNlSGVhZGVycy5jcHAKaW5kZXggZTcxYjZhZDMxY2E3YmYxMjlmNzI0N2ZiYmYyNjNlZDZj
OGU2NTIxYS4uYTA5MzRkN2Y1MzU1N2Y5NjVmMGI1MmRkMzY4MzhkZDZhNDY5MzlmZiAxMDA2NDQK
LS0tIGEvU291cmNlL1dlYkNvcmUvcGFnZS9jc3AvQ29udGVudFNlY3VyaXR5UG9saWN5UmVzcG9u
c2VIZWFkZXJzLmNwcAorKysgYi9Tb3VyY2UvV2ViQ29yZS9wYWdlL2NzcC9Db250ZW50U2VjdXJp
dHlQb2xpY3lSZXNwb25zZUhlYWRlcnMuY3BwCkBAIC0yOCw2ICsyOCw3IEBACiAKICNpbmNsdWRl
ICJIVFRQSGVhZGVyTmFtZXMuaCIKICNpbmNsdWRlICJSZXNvdXJjZVJlc3BvbnNlLmgiCisjaW5j
bHVkZSA8d3RmL0Nyb3NzVGhyZWFkQ29waWVyLmg+CiAKIG5hbWVzcGFjZSBXZWJDb3JlIHsKIApA
QCAtNDcsOSArNDgsNyBAQCBDb250ZW50U2VjdXJpdHlQb2xpY3lSZXNwb25zZUhlYWRlcnM6OkNv
bnRlbnRTZWN1cml0eVBvbGljeVJlc3BvbnNlSGVhZGVycyhjb25zdAogQ29udGVudFNlY3VyaXR5
UG9saWN5UmVzcG9uc2VIZWFkZXJzIENvbnRlbnRTZWN1cml0eVBvbGljeVJlc3BvbnNlSGVhZGVy
czo6aXNvbGF0ZWRDb3B5KCkgY29uc3QKIHsKICAgICBDb250ZW50U2VjdXJpdHlQb2xpY3lSZXNw
b25zZUhlYWRlcnMgaXNvbGF0ZWRDb3B5OwotICAgIGlzb2xhdGVkQ29weS5tX2hlYWRlcnMucmVz
ZXJ2ZUluaXRpYWxDYXBhY2l0eShtX2hlYWRlcnMuc2l6ZSgpKTsKLSAgICBmb3IgKGF1dG8mIGhl
YWRlciA6IG1faGVhZGVycykKLSAgICAgICAgaXNvbGF0ZWRDb3B5Lm1faGVhZGVycy51bmNoZWNr
ZWRBcHBlbmQoeyBoZWFkZXIuZmlyc3QuaXNvbGF0ZWRDb3B5KCksIGhlYWRlci5zZWNvbmQgfSk7
CisgICAgaXNvbGF0ZWRDb3B5Lm1faGVhZGVycyA9IGNyb3NzVGhyZWFkQ29weShtX2hlYWRlcnMp
OwogICAgIGlzb2xhdGVkQ29weS5tX2h0dHBTdGF0dXNDb2RlID0gbV9odHRwU3RhdHVzQ29kZTsK
ICAgICByZXR1cm4gaXNvbGF0ZWRDb3B5OwogfQpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUv
cGFnZS9tYWMvSW1hZ2VPdmVybGF5Q29udHJvbGxlck1hYy5tbSBiL1NvdXJjZS9XZWJDb3JlL3Bh
Z2UvbWFjL0ltYWdlT3ZlcmxheUNvbnRyb2xsZXJNYWMubW0KaW5kZXggYWVkNThiOTA2MGY5MjQz
YzQ3NzlhMDQ4ZjUxNWY2YmFkZDE5NDUwOC4uOGRlMGVmY2MzMGZlOTQwYTNhYWJkNjkzMWI0NDdm
ZjFmMmE4MzcwNSAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvcGFnZS9tYWMvSW1hZ2VPdmVy
bGF5Q29udHJvbGxlck1hYy5tbQorKysgYi9Tb3VyY2UvV2ViQ29yZS9wYWdlL21hYy9JbWFnZU92
ZXJsYXlDb250cm9sbGVyTWFjLm1tCkBAIC05NCw3ICs5NCw3IEBAIHZvaWQgSW1hZ2VPdmVybGF5
Q29udHJvbGxlcjo6dXBkYXRlRGF0YURldGVjdG9ySGlnaGxpZ2h0cyhjb25zdCBIVE1MRWxlbWVu
dCYgb3ZlCiAjZWxzZQogICAgICAgICBhdXRvIGhpZ2hsaWdodCA9IGFkb3B0Q0YoUEFMOjpzb2Z0
TGlua19EYXRhRGV0ZWN0b3JzX0RESGlnaGxpZ2h0Q3JlYXRlV2l0aFJlY3RzSW5WaXNpYmxlUmVj
dFdpdGhTdHlsZUFuZERpcmVjdGlvbihudWxscHRyLCAmZWxlbWVudEJvdW5kcywgMSwgbWFpbkZy
YW1lVmlldy0+dmlzaWJsZUNvbnRlbnRSZWN0KCksIHN0YXRpY19jYXN0PERESGlnaGxpZ2h0U3R5
bGU+KERESGlnaGxpZ2h0U3R5bGVCdWJibGVTdGFuZGFyZCkgfCBzdGF0aWNfY2FzdDxEREhpZ2hs
aWdodFN0eWxlPihEREhpZ2hsaWdodFN0eWxlU3RhbmRhcmRJY29uQXJyb3cpLCBZRVMsIE5TV3Jp
dGluZ0RpcmVjdGlvbk5hdHVyYWwsIE5PLCBZRVMpKTsKICNlbmRpZgotICAgICAgICBtX2RhdGFE
ZXRlY3RvckNvbnRhaW5lcnNBbmRIaWdobGlnaHRzLmFwcGVuZCh7IGVsZW1lbnQsIERhdGFEZXRl
Y3RvckhpZ2hsaWdodDo6Y3JlYXRlRm9ySW1hZ2VPdmVybGF5KCptX3BhZ2UsICp0aGlzLCBXVEZN
b3ZlKGhpZ2hsaWdodCksICptYWtlUmFuZ2VTZWxlY3RpbmdOb2RlKGVsZW1lbnQuZ2V0KCkpKSB9
KTsKKyAgICAgICAgbV9kYXRhRGV0ZWN0b3JDb250YWluZXJzQW5kSGlnaGxpZ2h0cy51bmNoZWNr
ZWRBcHBlbmQoeyBlbGVtZW50LCBEYXRhRGV0ZWN0b3JIaWdobGlnaHQ6OmNyZWF0ZUZvckltYWdl
T3ZlcmxheSgqbV9wYWdlLCAqdGhpcywgV1RGTW92ZShoaWdobGlnaHQpLCAqbWFrZVJhbmdlU2Vs
ZWN0aW5nTm9kZShlbGVtZW50LmdldCgpKSkgfSk7CiAgICAgfQogfQogCmRpZmYgLS1naXQgYS9T
b3VyY2UvV2ViQ29yZS9wYWdlL21hYy9TZXJ2aWNlc092ZXJsYXlDb250cm9sbGVyLm1tIGIvU291
cmNlL1dlYkNvcmUvcGFnZS9tYWMvU2VydmljZXNPdmVybGF5Q29udHJvbGxlci5tbQppbmRleCA2
NTcxZjkwOGU3OTMyN2QyYTJiN2FmY2QyOTc0MzFkYzI3Njk1MmQ5Li40MjRlMTVmMWRjYmU5YjRh
YTIyOGFkMmU4ZWE5N2Y5ODEzMTI3ZjFiIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9wYWdl
L21hYy9TZXJ2aWNlc092ZXJsYXlDb250cm9sbGVyLm1tCisrKyBiL1NvdXJjZS9XZWJDb3JlL3Bh
Z2UvbWFjL1NlcnZpY2VzT3ZlcmxheUNvbnRyb2xsZXIubW0KQEAgLTM5Miw5ICszOTIsNiBAQCB2
b2lkIFNlcnZpY2VzT3ZlcmxheUNvbnRyb2xsZXI6OmJ1aWxkU2VsZWN0aW9uSGlnaGxpZ2h0KCkK
IAogICAgIEhhc2hTZXQ8UmVmUHRyPERhdGFEZXRlY3RvckhpZ2hsaWdodD4+IG5ld1BvdGVudGlh
bEhpZ2hsaWdodHM7CiAKLSAgICBWZWN0b3I8Q0dSZWN0PiBjZ1JlY3RzOwotICAgIGNnUmVjdHMu
cmVzZXJ2ZUNhcGFjaXR5KG1fY3VycmVudFNlbGVjdGlvblJlY3RzLnNpemUoKSk7Ci0KICAgICBp
ZiAoYXV0byBzZWxlY3Rpb25SYW5nZSA9IG1fcGFnZS5zZWxlY3Rpb24oKS5maXJzdFJhbmdlKCkp
IHsKICAgICAgICAgRnJhbWVWaWV3KiBtYWluRnJhbWVWaWV3ID0gbWFpbkZyYW1lKCkudmlldygp
OwogICAgICAgICBpZiAoIW1haW5GcmFtZVZpZXcpCkBAIC00MDQsMTAgKzQwMSwxMyBAQCB2b2lk
IFNlcnZpY2VzT3ZlcmxheUNvbnRyb2xsZXI6OmJ1aWxkU2VsZWN0aW9uSGlnaGxpZ2h0KCkKICAg
ICAgICAgaWYgKCF2aWV3Rm9yUmFuZ2UpCiAgICAgICAgICAgICByZXR1cm47CiAKKyAgICAgICAg
VmVjdG9yPENHUmVjdD4gY2dSZWN0czsKKyAgICAgICAgY2dSZWN0cy5yZXNlcnZlSW5pdGlhbENh
cGFjaXR5KG1fY3VycmVudFNlbGVjdGlvblJlY3RzLnNpemUoKSk7CisKICAgICAgICAgZm9yIChh
dXRvJiByZWN0IDogbV9jdXJyZW50U2VsZWN0aW9uUmVjdHMpIHsKICAgICAgICAgICAgIEludFJl
Y3QgY3VycmVudFJlY3QgPSBzbmFwcGVkSW50UmVjdChyZWN0KTsKICAgICAgICAgICAgIGN1cnJl
bnRSZWN0LnNldExvY2F0aW9uKG1haW5GcmFtZVZpZXctPndpbmRvd1RvQ29udGVudHModmlld0Zv
clJhbmdlLT5jb250ZW50c1RvV2luZG93KGN1cnJlbnRSZWN0LmxvY2F0aW9uKCkpKSk7Ci0gICAg
ICAgICAgICBjZ1JlY3RzLmFwcGVuZChjdXJyZW50UmVjdCk7CisgICAgICAgICAgICBjZ1JlY3Rz
LnVuY2hlY2tlZEFwcGVuZChjdXJyZW50UmVjdCk7CiAgICAgICAgIH0KIAogICAgICAgICBpZiAo
IWNnUmVjdHMuaXNFbXB0eSgpKSB7CkBAIC02MzksMTMgKzYzOSwxMSBAQCB2b2lkIFNlcnZpY2Vz
T3ZlcmxheUNvbnRyb2xsZXI6OmhhbmRsZUNsaWNrKGNvbnN0IEludFBvaW50JiBjbGlja1BvaW50
LCBEYXRhRGV0ZQogICAgIEludFBvaW50IHdpbmRvd1BvaW50ID0gZnJhbWVWaWV3LT5jb250ZW50
c1RvV2luZG93KGNsaWNrUG9pbnQpOwogCiAgICAgaWYgKGhpZ2hsaWdodC50eXBlKCkgPT0gRGF0
YURldGVjdG9ySGlnaGxpZ2h0OjpUeXBlOjpTZWxlY3Rpb24pIHsKLSAgICAgICAgYXV0byB0ZWxl
cGhvbmVOdW1iZXJSYW5nZXMgPSB0ZWxlcGhvbmVOdW1iZXJSYW5nZXNGb3JGb2N1c2VkRnJhbWUo
KTsKLSAgICAgICAgVmVjdG9yPFN0cmluZz4gc2VsZWN0ZWRUZWxlcGhvbmVOdW1iZXJzOwotICAg
ICAgICBzZWxlY3RlZFRlbGVwaG9uZU51bWJlcnMucmVzZXJ2ZUNhcGFjaXR5KHRlbGVwaG9uZU51
bWJlclJhbmdlcy5zaXplKCkpOwotICAgICAgICBmb3IgKGF1dG8mIHJhbmdlIDogdGVsZXBob25l
TnVtYmVyUmFuZ2VzKQotICAgICAgICAgICAgc2VsZWN0ZWRUZWxlcGhvbmVOdW1iZXJzLmFwcGVu
ZChwbGFpblRleHQocmFuZ2UpKTsKKyAgICAgICAgYXV0byBzZWxlY3RlZFRlbGVwaG9uZU51bWJl
cnMgPSB0ZWxlcGhvbmVOdW1iZXJSYW5nZXNGb3JGb2N1c2VkRnJhbWUoKS5tYXAoW10oYXV0byYg
cmFuZ2UpIHsKKyAgICAgICAgICAgIHJldHVybiBwbGFpblRleHQocmFuZ2UpOworICAgICAgICB9
KTsKIAotICAgICAgICBtX3BhZ2UuY2hyb21lKCkuY2xpZW50KCkuaGFuZGxlU2VsZWN0aW9uU2Vy
dmljZUNsaWNrKENoZWNrZWRSZWYobV9wYWdlLmZvY3VzQ29udHJvbGxlcigpKS0+Zm9jdXNlZE9y
TWFpbkZyYW1lKCkuc2VsZWN0aW9uKCksIHNlbGVjdGVkVGVsZXBob25lTnVtYmVycywgd2luZG93
UG9pbnQpOworICAgICAgICBtX3BhZ2UuY2hyb21lKCkuY2xpZW50KCkuaGFuZGxlU2VsZWN0aW9u
U2VydmljZUNsaWNrKENoZWNrZWRSZWYobV9wYWdlLmZvY3VzQ29udHJvbGxlcigpKS0+Zm9jdXNl
ZE9yTWFpbkZyYW1lKCkuc2VsZWN0aW9uKCksIFdURk1vdmUoc2VsZWN0ZWRUZWxlcGhvbmVOdW1i
ZXJzKSwgd2luZG93UG9pbnQpOwogICAgIH0gZWxzZSBpZiAoaGlnaGxpZ2h0LnR5cGUoKSA9PSBE
YXRhRGV0ZWN0b3JIaWdobGlnaHQ6OlR5cGU6OlRlbGVwaG9uZU51bWJlcikKICAgICAgICAgbV9w
YWdlLmNocm9tZSgpLmNsaWVudCgpLmhhbmRsZVRlbGVwaG9uZU51bWJlckNsaWNrKHBsYWluVGV4
dChoaWdobGlnaHQucmFuZ2UoKSksIHdpbmRvd1BvaW50LCBmcmFtZVZpZXctPmNvbnRlbnRzVG9X
aW5kb3coQ2hlY2tlZFJlZihtX3BhZ2UuZm9jdXNDb250cm9sbGVyKCkpLT5mb2N1c2VkT3JNYWlu
RnJhbWUoKS5lZGl0b3IoKS5maXJzdFJlY3RGb3JSYW5nZShoaWdobGlnaHQucmFuZ2UoKSkpKTsK
IH0KZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3BhZ2Uvc2Nyb2xsaW5nL0FzeW5jU2Nyb2xs
aW5nQ29vcmRpbmF0b3IuY3BwIGIvU291cmNlL1dlYkNvcmUvcGFnZS9zY3JvbGxpbmcvQXN5bmNT
Y3JvbGxpbmdDb29yZGluYXRvci5jcHAKaW5kZXggODJmNzU3YTI3YjNiMDcyNDAwNmQ3MmE1Mzgy
ZTM0ZmE0Y2E5NDY4Yy4uNTJkMzM1MzRlN2U0NDY3Y2ZmOWEwZWYwNjczYjc0MjBjMjBlNzlhNCAx
MDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvcGFnZS9zY3JvbGxpbmcvQXN5bmNTY3JvbGxpbmdD
b29yZGluYXRvci5jcHAKKysrIGIvU291cmNlL1dlYkNvcmUvcGFnZS9zY3JvbGxpbmcvQXN5bmNT
Y3JvbGxpbmdDb29yZGluYXRvci5jcHAKQEAgLTY3NiwxMiArNjc2LDkgQEAgVmVjdG9yPFNjcm9s
bGluZ05vZGVJRD4gQXN5bmNTY3JvbGxpbmdDb29yZGluYXRvcjo6Y2hpbGRyZW5PZk5vZGUoU2Ny
b2xsaW5nTm9kZUkKICAgICBpZiAoIWNoaWxkcmVuIHx8IGNoaWxkcmVuLT5pc0VtcHR5KCkpCiAg
ICAgICAgIHJldHVybiB7IH07CiAgICAgCi0gICAgVmVjdG9yPFNjcm9sbGluZ05vZGVJRD4gY2hp
bGROb2RlSURzOwotICAgIGNoaWxkTm9kZUlEcy5yZXNlcnZlSW5pdGlhbENhcGFjaXR5KGNoaWxk
cmVuLT5zaXplKCkpOwotICAgIGZvciAoY29uc3QgYXV0byYgY2hpbGROb2RlIDogKmNoaWxkcmVu
KQotICAgICAgICBjaGlsZE5vZGVJRHMudW5jaGVja2VkQXBwZW5kKGNoaWxkTm9kZS0+c2Nyb2xs
aW5nTm9kZUlEKCkpOwotCi0gICAgcmV0dXJuIGNoaWxkTm9kZUlEczsKKyAgICByZXR1cm4gY2hp
bGRyZW4tPm1hcChbXShhdXRvJiBjaGlsZCkgeworICAgICAgICByZXR1cm4gY2hpbGQtPnNjcm9s
bGluZ05vZGVJRCgpOworICAgIH0pOwogfQogCiB2b2lkIEFzeW5jU2Nyb2xsaW5nQ29vcmRpbmF0
b3I6OnJlY29uY2lsZVZpZXdwb3J0Q29uc3RyYWluZWRMYXllclBvc2l0aW9ucyhTY3JvbGxpbmdO
b2RlSUQgc2Nyb2xsaW5nTm9kZUlELCBjb25zdCBMYXlvdXRSZWN0JiB2aWV3cG9ydFJlY3QsIFNj
cm9sbGluZ0xheWVyUG9zaXRpb25BY3Rpb24gYWN0aW9uKQpkaWZmIC0tZ2l0IGEvU291cmNlL1dl
YkNvcmUvcGFnZS9zY3JvbGxpbmcvU2Nyb2xsU25hcE9mZnNldHNJbmZvLmNwcCBiL1NvdXJjZS9X
ZWJDb3JlL3BhZ2Uvc2Nyb2xsaW5nL1Njcm9sbFNuYXBPZmZzZXRzSW5mby5jcHAKaW5kZXggNjMx
MTEzMzcyZTNjN2ZiMDVkMTM0MWFmYTQ0YjYzOGIzZTI1MjZkOS4uMTg0NTVlOGQwNDJhYjhmNmJh
Nzc2N2JhYmQ4Mjk4NzVlZTQ0OTQ5ZiAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvcGFnZS9z
Y3JvbGxpbmcvU2Nyb2xsU25hcE9mZnNldHNJbmZvLmNwcAorKysgYi9Tb3VyY2UvV2ViQ29yZS9w
YWdlL3Njcm9sbGluZy9TY3JvbGxTbmFwT2Zmc2V0c0luZm8uY3BwCkBAIC00MjAsMjUgKzQyMCwx
OSBAQCBzdGF0aWMgU2Nyb2xsU25hcE9mZnNldHNJbmZvPE91dHB1dFR5cGUsIE91dHB1dFJlY3RU
eXBlPiBjb252ZXJ0T2Zmc2V0SW5mbyhjb25zdAogewogICAgIGF1dG8gY29udmVydE9mZnNldHMg
PSBbc2NhbGVGYWN0b3JdKGNvbnN0IFZlY3RvcjxTbmFwT2Zmc2V0PElucHV0VHlwZT4+JiBpbnB1
dCkKICAgICB7Ci0gICAgICAgIFZlY3RvcjxTbmFwT2Zmc2V0PE91dHB1dFR5cGU+PiBvdXRwdXQ7
Ci0gICAgICAgIG91dHB1dC5yZXNlcnZlSW5pdGlhbENhcGFjaXR5KGlucHV0LnNpemUoKSk7Ci0g
ICAgICAgIGZvciAoYXV0byYgb2Zmc2V0IDogaW5wdXQpCi0gICAgICAgICAgICBvdXRwdXQudW5j
aGVja2VkQXBwZW5kKHsgY29udmVydE9mZnNldFVuaXQob2Zmc2V0Lm9mZnNldCwgc2NhbGVGYWN0
b3IpLCBvZmZzZXQuc3RvcCwgb2Zmc2V0Lmhhc1NuYXBBcmVhTGFyZ2VyVGhhblZpZXdwb3J0LCBv
ZmZzZXQuc25hcEFyZWFJbmRpY2VzIH0pOwotICAgICAgICByZXR1cm4gb3V0cHV0OworICAgICAg
ICByZXR1cm4gaW5wdXQubWFwKFtzY2FsZUZhY3Rvcl0oYXV0byYgb2Zmc2V0KSAtPiBTbmFwT2Zm
c2V0PE91dHB1dFR5cGU+IHsKKyAgICAgICAgICAgIHJldHVybiB7IGNvbnZlcnRPZmZzZXRVbml0
KG9mZnNldC5vZmZzZXQsIHNjYWxlRmFjdG9yKSwgb2Zmc2V0LnN0b3AsIG9mZnNldC5oYXNTbmFw
QXJlYUxhcmdlclRoYW5WaWV3cG9ydCwgb2Zmc2V0LnNuYXBBcmVhSW5kaWNlcyB9OworICAgICAg
ICB9KTsKICAgICB9OwogCiAgICAgYXV0byBjb252ZXJ0UmVjdHMgPSBbc2NhbGVGYWN0b3JdKGNv
bnN0IFZlY3RvcjxJbnB1dFJlY3RUeXBlPiYgaW5wdXQpCiAgICAgewotICAgICAgICBWZWN0b3I8
T3V0cHV0UmVjdFR5cGU+IG91dHB1dDsKLSAgICAgICAgb3V0cHV0LnJlc2VydmVJbml0aWFsQ2Fw
YWNpdHkoaW5wdXQuc2l6ZSgpKTsKLSAgICAgICAgZm9yIChhdXRvJiByZWN0IDogaW5wdXQpIHsK
LSAgICAgICAgICAgIE91dHB1dFJlY3RUeXBlIG91dHB1dFJlY3QoCisgICAgICAgIHJldHVybiBp
bnB1dC5tYXAoW3NjYWxlRmFjdG9yXShhdXRvJiByZWN0KSAtPiBPdXRwdXRSZWN0VHlwZSB7Cisg
ICAgICAgICAgICByZXR1cm4gewogICAgICAgICAgICAgICAgIGNvbnZlcnRPZmZzZXRVbml0KHJl
Y3QueCgpLCBzY2FsZUZhY3RvciksIGNvbnZlcnRPZmZzZXRVbml0KHJlY3QueSgpLCBzY2FsZUZh
Y3RvciksCi0gICAgICAgICAgICAgICAgY29udmVydE9mZnNldFVuaXQocmVjdC53aWR0aCgpLCBz
Y2FsZUZhY3RvciksIGNvbnZlcnRPZmZzZXRVbml0KHJlY3QuaGVpZ2h0KCksIHNjYWxlRmFjdG9y
KSk7Ci0gICAgICAgICAgICBvdXRwdXQudW5jaGVja2VkQXBwZW5kKG91dHB1dFJlY3QpOwotICAg
ICAgICB9Ci0KLSAgICAgICAgcmV0dXJuIG91dHB1dDsKKyAgICAgICAgICAgICAgICBjb252ZXJ0
T2Zmc2V0VW5pdChyZWN0LndpZHRoKCksIHNjYWxlRmFjdG9yKSwgY29udmVydE9mZnNldFVuaXQo
cmVjdC5oZWlnaHQoKSwgc2NhbGVGYWN0b3IpCisgICAgICAgICAgICB9OworICAgICAgICB9KTsK
ICAgICB9OwogCiAgICAgcmV0dXJuIHsKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3BsYXRm
b3JtL0xlbmd0aC5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9MZW5ndGguY3BwCmluZGV4
IDk1NDljZmMyZWVmYjNhYjc3OTI4OTgzMGExNzc0MmM1NzIxZGVkMWQuLmM5OTY5Y2U3OWM2OThh
NGM5MDNlMGU4OTY4ZDg4MzQ0ODk5NDIzMjQgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL3Bs
YXRmb3JtL0xlbmd0aC5jcHAKKysrIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vTGVuZ3RoLmNw
cApAQCAtMjgyLDEwICsyODIsNyBAQCBib29sIExlbmd0aDo6aXNDYWxjdWxhdGVkRXF1YWwoY29u
c3QgTGVuZ3RoJiBvdGhlcikgY29uc3QKIAogc3RhdGljIExlbmd0aCBtYWtlQ2FsY3VsYXRlZChD
YWxjT3BlcmF0b3IgY2FsY09wZXJhdG9yLCBjb25zdCBMZW5ndGgmIGEsIGNvbnN0IExlbmd0aCYg
YikKIHsKLSAgICBWZWN0b3I8c3RkOjp1bmlxdWVfcHRyPENhbGNFeHByZXNzaW9uTm9kZT4+IGxl
bmd0aHM7Ci0gICAgbGVuZ3Rocy5yZXNlcnZlSW5pdGlhbENhcGFjaXR5KDIpOwotICAgIGxlbmd0
aHMudW5jaGVja2VkQXBwZW5kKG1ha2VVbmlxdWU8Q2FsY0V4cHJlc3Npb25MZW5ndGg+KGEpKTsK
LSAgICBsZW5ndGhzLnVuY2hlY2tlZEFwcGVuZChtYWtlVW5pcXVlPENhbGNFeHByZXNzaW9uTGVu
Z3RoPihiKSk7CisgICAgYXV0byBsZW5ndGhzID0gVmVjdG9yPHN0ZDo6dW5pcXVlX3B0cjxDYWxj
RXhwcmVzc2lvbk5vZGU+Pjo6ZnJvbShtYWtlVW5pcXVlPENhbGNFeHByZXNzaW9uTGVuZ3RoPihh
KSwgbWFrZVVuaXF1ZTxDYWxjRXhwcmVzc2lvbkxlbmd0aD4oYikpOwogICAgIGF1dG8gb3AgPSBt
YWtlVW5pcXVlPENhbGNFeHByZXNzaW9uT3BlcmF0aW9uPihXVEZNb3ZlKGxlbmd0aHMpLCBjYWxj
T3BlcmF0b3IpOwogICAgIHJldHVybiBMZW5ndGgoQ2FsY3VsYXRpb25WYWx1ZTo6Y3JlYXRlKFdU
Rk1vdmUob3ApLCBWYWx1ZVJhbmdlOjpBbGwpKTsKIH0KZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJD
b3JlL3BsYXRmb3JtL2FuaW1hdGlvbi9BbmltYXRpb25MaXN0LmNwcCBiL1NvdXJjZS9XZWJDb3Jl
L3BsYXRmb3JtL2FuaW1hdGlvbi9BbmltYXRpb25MaXN0LmNwcAppbmRleCAwZTM2ODUzMjFjMTQ4
ODExZDY1YjllZjcwOTQ2NGFjMDZmNzFlMzA3Li42MjA0NTdjMjNiMzU3YTU4NzYwZWM5YjdiZjcw
MzdkZDg3N2ViMjdlIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9hbmltYXRp
b24vQW5pbWF0aW9uTGlzdC5jcHAKKysrIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vYW5pbWF0
aW9uL0FuaW1hdGlvbkxpc3QuY3BwCkBAIC0zNiwxNCArMzYsMTMgQEAgaWYgKGkpIHsgXAogQW5p
bWF0aW9uTGlzdDo6QW5pbWF0aW9uTGlzdCgpID0gZGVmYXVsdDsKIAogQW5pbWF0aW9uTGlzdDo6
QW5pbWF0aW9uTGlzdChjb25zdCBBbmltYXRpb25MaXN0JiBvdGhlciwgQ29weUJlaGF2aW9yIGNv
cHlCZWhhdmlvcikKLSAgICA6IFJlZkNvdW50ZWQoKQogewotICAgIG1fYW5pbWF0aW9ucy5yZXNl
cnZlSW5pdGlhbENhcGFjaXR5KG90aGVyLnNpemUoKSk7Ci0gICAgZm9yIChhdXRvJiBhbmltYXRp
b24gOiBvdGhlci5tX2FuaW1hdGlvbnMpIHsKLSAgICAgICAgaWYgKGNvcHlCZWhhdmlvciA9PSBD
b3B5QmVoYXZpb3I6OlJlZmVyZW5jZSkKLSAgICAgICAgICAgIG1fYW5pbWF0aW9ucy51bmNoZWNr
ZWRBcHBlbmQoYW5pbWF0aW9uLmdldCgpKTsKLSAgICAgICAgZWxzZQotICAgICAgICAgICAgbV9h
bmltYXRpb25zLnVuY2hlY2tlZEFwcGVuZChBbmltYXRpb246OmNyZWF0ZShhbmltYXRpb24uZ2V0
KCkpKTsKKyAgICBpZiAoY29weUJlaGF2aW9yID09IENvcHlCZWhhdmlvcjo6UmVmZXJlbmNlKQor
ICAgICAgICBtX2FuaW1hdGlvbnMgPSBvdGhlci5tX2FuaW1hdGlvbnM7CisgICAgZWxzZSB7Cisg
ICAgICAgIG1fYW5pbWF0aW9ucyA9IG90aGVyLm1fYW5pbWF0aW9ucy5tYXAoW10oYXV0byYgYW5p
bWF0aW9uKSB7CisgICAgICAgICAgICByZXR1cm4gQW5pbWF0aW9uOjpjcmVhdGUoYW5pbWF0aW9u
LmdldCgpKTsKKyAgICAgICAgfSk7CiAgICAgfQogfQogCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2Vi
Q29yZS9wbGF0Zm9ybS9jb2NvYS9QbGF5YmFja1Nlc3Npb25Nb2RlbE1lZGlhRWxlbWVudC5tbSBi
L1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2NvY29hL1BsYXliYWNrU2Vzc2lvbk1vZGVsTWVkaWFF
bGVtZW50Lm1tCmluZGV4IGJmMDEzNGQ4NzY2MDhiNjUyZWU1Mzg0MzZmYmEwZGY5YzJhY2E4YzMu
LjA1ZWEyMTExZWI1ZDQ1M2NiMjhkOGU3N2VmM2NiZjVmMzU2NzE5ODkgMTAwNjQ0Ci0tLSBhL1Nv
dXJjZS9XZWJDb3JlL3BsYXRmb3JtL2NvY29hL1BsYXliYWNrU2Vzc2lvbk1vZGVsTWVkaWFFbGVt
ZW50Lm1tCisrKyBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2NvY29hL1BsYXliYWNrU2Vzc2lv
bk1vZGVsTWVkaWFFbGVtZW50Lm1tCkBAIC01MTEsMTggKzUxMSwxMyBAQCBib29sIFBsYXliYWNr
U2Vzc2lvbk1vZGVsTWVkaWFFbGVtZW50OjpjYW5QbGF5RmFzdFJldmVyc2UoKSBjb25zdAogCiBW
ZWN0b3I8TWVkaWFTZWxlY3Rpb25PcHRpb24+IFBsYXliYWNrU2Vzc2lvbk1vZGVsTWVkaWFFbGVt
ZW50OjphdWRpb01lZGlhU2VsZWN0aW9uT3B0aW9ucygpIGNvbnN0CiB7Ci0gICAgVmVjdG9yPE1l
ZGlhU2VsZWN0aW9uT3B0aW9uPiBhdWRpb09wdGlvbnM7Ci0KICAgICBpZiAoIW1fbWVkaWFFbGVt
ZW50IHx8ICFtX21lZGlhRWxlbWVudC0+ZG9jdW1lbnQoKS5wYWdlKCkpCi0gICAgICAgIHJldHVy
biBhdWRpb09wdGlvbnM7CisgICAgICAgIHJldHVybiB7IH07CiAKICAgICBhdXRvJiBjYXB0aW9u
UHJlZmVyZW5jZXMgPSBtX21lZGlhRWxlbWVudC0+ZG9jdW1lbnQoKS5wYWdlKCktPmdyb3VwKCku
ZW5zdXJlQ2FwdGlvblByZWZlcmVuY2VzKCk7Ci0KLSAgICBhdWRpb09wdGlvbnMucmVzZXJ2ZUlu
aXRpYWxDYXBhY2l0eShtX2F1ZGlvVHJhY2tzRm9yTWVudS5zaXplKCkpOwotICAgIGZvciAoYXV0
byYgYXVkaW9UcmFjayA6IG1fYXVkaW9UcmFja3NGb3JNZW51KQotICAgICAgICBhdWRpb09wdGlv
bnMudW5jaGVja2VkQXBwZW5kKGNhcHRpb25QcmVmZXJlbmNlcy5tZWRpYVNlbGVjdGlvbk9wdGlv
bkZvclRyYWNrKGF1ZGlvVHJhY2suZ2V0KCkpKTsKLQotICAgIHJldHVybiBhdWRpb09wdGlvbnM7
CisgICAgcmV0dXJuIG1fYXVkaW9UcmFja3NGb3JNZW51Lm1hcChbJl0oYXV0byYgYXVkaW9UcmFj
aykgeworICAgICAgICByZXR1cm4gY2FwdGlvblByZWZlcmVuY2VzLm1lZGlhU2VsZWN0aW9uT3B0
aW9uRm9yVHJhY2soYXVkaW9UcmFjay5nZXQoKSk7CisgICAgfSk7CiB9CiAKIHVpbnQ2NF90IFBs
YXliYWNrU2Vzc2lvbk1vZGVsTWVkaWFFbGVtZW50OjphdWRpb01lZGlhU2VsZWN0ZWRJbmRleCgp
IGNvbnN0CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9lbmNyeXB0ZWRtZWRp
YS9DRE1Qcm94eS5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9lbmNyeXB0ZWRtZWRpYS9D
RE1Qcm94eS5jcHAKaW5kZXggMGRkY2NmYTRiZDBiMzZhMWUzYzI1MjM0YzY3M2M2NzIzMmM1Yjky
YS4uNjc4ZjQxYTdhZTI0MDc1NGNkY2VjNjJmNWMyYzU2NmVjZWQ1ZTBlZiAxMDA2NDQKLS0tIGEv
U291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZW5jcnlwdGVkbWVkaWEvQ0RNUHJveHkuY3BwCisrKyBi
L1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2VuY3J5cHRlZG1lZGlhL0NETVByb3h5LmNwcApAQCAt
MjI1LDExICsyMjUsOSBAQCBjb25zdCBSZWZQdHI8S2V5SGFuZGxlPiYgS2V5U3RvcmU6OmtleUhh
bmRsZShjb25zdCBLZXlJRFR5cGUmIGtleUlEKSBjb25zdAogCiBDRE1JbnN0YW5jZVNlc3Npb246
OktleVN0YXR1c1ZlY3RvciBLZXlTdG9yZTo6Y29udmVydFRvSlNLZXlTdGF0dXNWZWN0b3IoKSBj
b25zdAogewotICAgIENETUluc3RhbmNlU2Vzc2lvbjo6S2V5U3RhdHVzVmVjdG9yIGtleVN0YXR1
c1ZlY3RvcjsKLSAgICBrZXlTdGF0dXNWZWN0b3IucmVzZXJ2ZUluaXRpYWxDYXBhY2l0eShudW1L
ZXlzKCkpOwotICAgIGZvciAoY29uc3QgYXV0byYga2V5IDogbV9rZXlzKQotICAgICAgICBrZXlT
dGF0dXNWZWN0b3IudW5jaGVja2VkQXBwZW5kKHN0ZDo6cGFpcjxSZWY8RnJhZ21lbnRlZFNoYXJl
ZEJ1ZmZlcj4sIENETUluc3RhbmNlU2Vzc2lvbjo6S2V5U3RhdHVzPiB7IGtleS0+aWRBc1NoYXJl
ZEJ1ZmZlcigpLCBrZXktPnN0YXR1cygpIH0pOwotICAgIHJldHVybiBrZXlTdGF0dXNWZWN0b3I7
CisgICAgcmV0dXJuIG1fa2V5cy5tYXAoW10oYXV0byYga2V5KSB7CisgICAgICAgIHJldHVybiBz
dGQ6Om1ha2VfcGFpcihrZXktPmlkQXNTaGFyZWRCdWZmZXIoKSwga2V5LT5zdGF0dXMoKSk7Cisg
ICAgfSk7CiB9CiAKIHZvaWQgQ0RNUHJveHk6OnVwZGF0ZUtleVN0b3JlKGNvbnN0IEtleVN0b3Jl
JiBuZXdLZXlTdG9yZSkKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBo
aWNzL0Zsb2F0UG9seWdvbi5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9G
bG9hdFBvbHlnb24uY3BwCmluZGV4IDhiOTIzNDE3OGVhZDNmM2NhMDYzZmY5YTFlYTQ3ZDAxYmU4
NTQyNWEuLmQwNTJmYTUzY2NkZjZiYjQxZjNmZWZiOTVmMzA1NDY2YjRkZjE5NjYgMTAwNjQ0Ci0t
LSBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL0Zsb2F0UG9seWdvbi5jcHAKKysr
IGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvRmxvYXRQb2x5Z29uLmNwcApAQCAt
MTQyLDExICsxNDIsOSBAQCBGbG9hdFBvbHlnb246OkZsb2F0UG9seWdvbihWZWN0b3I8RmxvYXRQ
b2ludD4mJiB2ZXJ0aWNlcywgV2luZFJ1bGUgZmlsbFJ1bGUpCiBWZWN0b3I8c3RkOjpyZWZlcmVu
Y2Vfd3JhcHBlcjxjb25zdCBGbG9hdFBvbHlnb25FZGdlPj4gRmxvYXRQb2x5Z29uOjpvdmVybGFw
cGluZ0VkZ2VzKGZsb2F0IG1pblksIGZsb2F0IG1heFkpIGNvbnN0CiB7CiAgICAgYXV0byBvdmVy
bGFwcGluZ0VkZ2VJbnRlcnZhbHMgPSBtX2VkZ2VUcmVlLmFsbE92ZXJsYXBzKHsgbWluWSwgbWF4
WSB9KTsKLSAgICBWZWN0b3I8c3RkOjpyZWZlcmVuY2Vfd3JhcHBlcjxjb25zdCBGbG9hdFBvbHln
b25FZGdlPj4gcmVzdWx0OwotICAgIHJlc3VsdC5yZXNlcnZlSW5pdGlhbENhcGFjaXR5KG92ZXJs
YXBwaW5nRWRnZUludGVydmFscy5zaXplKCkpOwotICAgIGZvciAoYXV0byYgaW50ZXJ2YWwgOiBv
dmVybGFwcGluZ0VkZ2VJbnRlcnZhbHMpCi0gICAgICAgIHJlc3VsdC51bmNoZWNrZWRBcHBlbmQo
KmludGVydmFsLmRhdGEoKSk7Ci0gICAgcmV0dXJuIHJlc3VsdDsKKyAgICByZXR1cm4gb3Zlcmxh
cHBpbmdFZGdlSW50ZXJ2YWxzLm1hcChbXShhdXRvJiBpbnRlcnZhbCkgLT4gc3RkOjpyZWZlcmVu
Y2Vfd3JhcHBlcjxjb25zdCBGbG9hdFBvbHlnb25FZGdlPiB7CisgICAgICAgIHJldHVybiAqaW50
ZXJ2YWwuZGF0YSgpOworICAgIH0pOwogfQogCiBzdGF0aWMgaW5saW5lIGZsb2F0IGxlZnRTaWRl
KGNvbnN0IEZsb2F0UG9pbnQmIHZlcnRleDEsIGNvbnN0IEZsb2F0UG9pbnQmIHZlcnRleDIsIGNv
bnN0IEZsb2F0UG9pbnQmIHBvaW50KQpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvcGxhdGZv
cm0vZ3JhcGhpY3MvRmxvYXRRdWFkLmNwcCBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBo
aWNzL0Zsb2F0UXVhZC5jcHAKaW5kZXggMTU1MWI5ZmMxOTZiYzczMDExYWQ2ODIzZmMxMjRkNjk3
ZjU2NGIyYS4uNzFhMjIyODNhYjM0Nzk5NDllNGI0N2JjY2Y2MzI2OGM4MThhN2E5MyAxMDA2NDQK
LS0tIGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvRmxvYXRRdWFkLmNwcAorKysg
Yi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9GbG9hdFF1YWQuY3BwCkBAIC0yNzMs
MTEgKzI3Myw5IEBAIGJvb2wgRmxvYXRRdWFkOjppc0VtcHR5KCkgY29uc3QKIAogVmVjdG9yPEZs
b2F0UmVjdD4gYm91bmRpbmdCb3hlcyhjb25zdCBWZWN0b3I8RmxvYXRRdWFkPiYgcXVhZHMpCiB7
Ci0gICAgVmVjdG9yPEZsb2F0UmVjdD4gYm94ZXM7Ci0gICAgYm94ZXMucmVzZXJ2ZUluaXRpYWxD
YXBhY2l0eShxdWFkcy5zaXplKCkpOwotICAgIGZvciAoY29uc3QgYXV0byYgcXVhZCA6IHF1YWRz
KQotICAgICAgICBib3hlcy51bmNoZWNrZWRBcHBlbmQocXVhZC5ib3VuZGluZ0JveCgpKTsKLSAg
ICByZXR1cm4gYm94ZXM7CisgICAgcmV0dXJuIHF1YWRzLm1hcChbXShhdXRvJiBxdWFkKSB7Cisg
ICAgICAgIHJldHVybiBxdWFkLmJvdW5kaW5nQm94KCk7CisgICAgfSk7CiB9CiAKIEZsb2F0UmVj
dCB1bml0ZWRCb3VuZGluZ0JveGVzKGNvbnN0IFZlY3RvcjxGbG9hdFF1YWQ+JiBxdWFkcykKZGlm
ZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2F2Zm91bmRhdGlvbi9v
YmpjL0NETUluc3RhbmNlRmFpclBsYXlTdHJlYW1pbmdBVkZPYmpDLm1tIGIvU291cmNlL1dlYkNv
cmUvcGxhdGZvcm0vZ3JhcGhpY3MvYXZmb3VuZGF0aW9uL29iamMvQ0RNSW5zdGFuY2VGYWlyUGxh
eVN0cmVhbWluZ0FWRk9iakMubW0KaW5kZXggY2ZlMDQ4YTkzOGMwNWRmNzQ1YzcxNjM1NmFkMWIz
YjkwYTU5ZWI3OC4uOGNjNDcxZmFhNDk5M2EzNTA5NTg0MTNhNTc3MWQ4YWQ3MzE4MzMzMyAxMDA2
NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvYXZmb3VuZGF0aW9uL29i
amMvQ0RNSW5zdGFuY2VGYWlyUGxheVN0cmVhbWluZ0FWRk9iakMubW0KKysrIGIvU291cmNlL1dl
YkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvYXZmb3VuZGF0aW9uL29iamMvQ0RNSW5zdGFuY2VGYWly
UGxheVN0cmVhbWluZ0FWRk9iakMubW0KQEAgLTkwNiw5ICs5MDYsNyBAQCB2b2lkIENETUluc3Rh
bmNlU2Vzc2lvbkZhaXJQbGF5U3RyZWFtaW5nQVZGT2JqQzo6dXBkYXRlTGljZW5zZShjb25zdCBT
dHJpbmcmLCBMaQogICAgIC8vIEZJWE1FKHJkYXI6Ly9wcm9ibGVtLzM1NTkyMjc3KTogc3Rhc2gg
dGhlIGNhbGxiYWNrIGFuZCBjYWxsIGl0IG9uY2UgQVZDb250ZW50S2V5UmVzcG9uc2Ugc3VwcG9y
dHMgYSBzdWNjZXNzIGNhbGxiYWNrLgogICAgIHN0cnVjdCBvYmpjX21ldGhvZF9kZXNjcmlwdGlv
biBtZXRob2QgPSBwcm90b2NvbF9nZXRNZXRob2REZXNjcmlwdGlvbihAcHJvdG9jb2woQVZDb250
ZW50S2V5U2Vzc2lvbkRlbGVnYXRlKSwgQHNlbGVjdG9yKGNvbnRlbnRLZXlTZXNzaW9uOmNvbnRl
bnRLZXlSZXF1ZXN0RGlkU3VjY2VlZDopLCBOTywgWUVTKTsKICAgICBpZiAoIW1ldGhvZC5uYW1l
KSB7Ci0gICAgICAgIEtleVN0YXR1c1ZlY3RvciBrZXlTdGF0dXNlczsKLSAgICAgICAga2V5U3Rh
dHVzZXMucmVzZXJ2ZUluaXRpYWxDYXBhY2l0eSgxKTsKLSAgICAgICAga2V5U3RhdHVzZXMudW5j
aGVja2VkQXBwZW5kKHN0ZDo6bWFrZV9wYWlyKFdURk1vdmUoa2V5SURzLmZpcnN0KCkpLCBLZXlT
dGF0dXM6OlVzYWJsZSkpOworICAgICAgICBLZXlTdGF0dXNWZWN0b3Iga2V5U3RhdHVzZXMgeyBz
dGQ6Om1ha2VfcGFpcihXVEZNb3ZlKGtleUlEcy5maXJzdCgpKSwgS2V5U3RhdHVzOjpVc2FibGUp
IH07CiAgICAgICAgIGNhbGxiYWNrKGZhbHNlLCBzdGQ6Om1ha2Vfb3B0aW9uYWwoV1RGTW92ZShr
ZXlTdGF0dXNlcykpLCBzdGQ6Om51bGxvcHQsIHN0ZDo6bnVsbG9wdCwgU3VjY2VlZGVkKTsKICAg
ICAgICAgcmV0dXJuOwogICAgIH0KZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3Jt
L2dyYXBoaWNzL2NhL1RpbGVHcmlkLmNwcCBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBo
aWNzL2NhL1RpbGVHcmlkLmNwcAppbmRleCA5ZDhmYmIxYTBmMGRlMzQ3MmE1Y2FjZWY3ZmM3ZTU5
N2ViNmEyNmE0Li4wMmI4ZmRjMmJmOGZmZGZkOTU2MDczODhhMzZjMmY4MWFlMzVhYjZiIDEwMDY0
NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9jYS9UaWxlR3JpZC5jcHAK
KysrIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvY2EvVGlsZUdyaWQuY3BwCkBA
IC0yOTAsNyArMjkwLDcgQEAgdW5zaWduZWQgVGlsZUdyaWQ6OmJsYW5rUGl4ZWxDb3VudCgpIGNv
bnN0CiAgICAgcmV0dXJuIFRpbGVDb250cm9sbGVyOjpibGFua1BpeGVsQ291bnRGb3JUaWxlcyh0
aWxlcywgbV9jb250cm9sbGVyLnZpc2libGVSZWN0KCksIEludFBvaW50KDAsIDApKTsKIH0KIAot
dm9pZCBUaWxlR3JpZDo6cmVtb3ZlVGlsZXMoVmVjdG9yPFRpbGVHcmlkOjpUaWxlSW5kZXg+JiB0
b1JlbW92ZSkKK3ZvaWQgVGlsZUdyaWQ6OnJlbW92ZVRpbGVzKGNvbnN0IFZlY3RvcjxUaWxlR3Jp
ZDo6VGlsZUluZGV4PiYgdG9SZW1vdmUpCiB7CiAgICAgZm9yIChzaXplX3QgaSA9IDA7IGkgPCB0
b1JlbW92ZS5zaXplKCk7ICsraSkgewogICAgICAgICBUaWxlSW5mbyB0aWxlSW5mbyA9IG1fdGls
ZXMudGFrZSh0b1JlbW92ZVtpXSk7CkBAIC0zMDIsMTMgKzMwMiw3IEBAIHZvaWQgVGlsZUdyaWQ6
OnJlbW92ZVRpbGVzKFZlY3RvcjxUaWxlR3JpZDo6VGlsZUluZGV4PiYgdG9SZW1vdmUpCiAKIHZv
aWQgVGlsZUdyaWQ6OnJlbW92ZUFsbFRpbGVzKCkKIHsKLSAgICBWZWN0b3I8VGlsZUluZGV4PiB0
aWxlc1RvUmVtb3ZlOwotICAgIHRpbGVzVG9SZW1vdmUucmVzZXJ2ZUluaXRpYWxDYXBhY2l0eSht
X3RpbGVzLnNpemUoKSk7Ci0KLSAgICBmb3IgKGF1dG8mIGVudHJ5IDogbV90aWxlcykKLSAgICAg
ICAgdGlsZXNUb1JlbW92ZS51bmNoZWNrZWRBcHBlbmQoZW50cnkua2V5KTsKLQotICAgIHJlbW92
ZVRpbGVzKHRpbGVzVG9SZW1vdmUpOworICAgIHJlbW92ZVRpbGVzKGNvcHlUb1ZlY3RvcihtX3Rp
bGVzLmtleXMoKSkpOwogfQogCiB2b2lkIFRpbGVHcmlkOjpyZW1vdmVBbGxTZWNvbmRhcnlUaWxl
cygpCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9jYS9UaWxl
R3JpZC5oIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvY2EvVGlsZUdyaWQuaApp
bmRleCAyNTdiYTU5ODM0YWNkNmRjYTdlYjNiZGVjZjZjZDEwMWQzNTNlYjU2Li4yNDcyOTg0NGFh
Mzk2NDM2NDRjYmMzZmE2YzVjNmNjZjEwNmNiM2Y3IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29y
ZS9wbGF0Zm9ybS9ncmFwaGljcy9jYS9UaWxlR3JpZC5oCisrKyBiL1NvdXJjZS9XZWJDb3JlL3Bs
YXRmb3JtL2dyYXBoaWNzL2NhL1RpbGVHcmlkLmgKQEAgLTEzNSw3ICsxMzUsNyBAQCBwcml2YXRl
OgogICAgIFRpbGVDb2hvcnQgbmV3ZXN0VGlsZUNvaG9ydCgpIGNvbnN0OwogICAgIFRpbGVDb2hv
cnQgb2xkZXN0VGlsZUNvaG9ydCgpIGNvbnN0OwogCi0gICAgdm9pZCByZW1vdmVUaWxlcyhWZWN0
b3I8VGlsZUdyaWQ6OlRpbGVJbmRleD4mIHRvUmVtb3ZlKTsKKyAgICB2b2lkIHJlbW92ZVRpbGVz
KGNvbnN0IFZlY3RvcjxUaWxlR3JpZDo6VGlsZUluZGV4PiYgdG9SZW1vdmUpOwogCiAgICAgLy8g
UGxhdGZvcm1DQUxheWVyQ2xpZW50CiAgICAgdm9pZCBwbGF0Zm9ybUNBTGF5ZXJQYWludENvbnRl
bnRzKFBsYXRmb3JtQ0FMYXllciosIEdyYXBoaWNzQ29udGV4dCYsIGNvbnN0IEZsb2F0UmVjdCYs
IEdyYXBoaWNzTGF5ZXJQYWludEJlaGF2aW9yKSBvdmVycmlkZTsKZGlmZiAtLWdpdCBhL1NvdXJj
ZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2NnL0ltYWdlVXRpbGl0aWVzQ0cuY3BwIGIvU291
cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvY2cvSW1hZ2VVdGlsaXRpZXNDRy5jcHAKaW5k
ZXggYTFlNWI3MzJmYjBiZjRlNTQyZDQxYmE5ZTg2OWRmMDFkNjU5ZTM1NC4uYjVhNWNkY2I4OTEw
NDgyZTM5M2I4ZDk1NmJmMGI1Mjk2MzM5MWRjMiAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUv
cGxhdGZvcm0vZ3JhcGhpY3MvY2cvSW1hZ2VVdGlsaXRpZXNDRy5jcHAKKysrIGIvU291cmNlL1dl
YkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvY2cvSW1hZ2VVdGlsaXRpZXNDRy5jcHAKQEAgLTEwMSwx
OSArMTAxLDE1IEBAIHN0YXRpYyBTdHJpbmcgdHJhbnNjb2RlSW1hZ2UoY29uc3QgU3RyaW5nJiBw
YXRoLCBjb25zdCBTdHJpbmcmIGRlc3RpbmF0aW9uVVRJLCBjCiAKIFZlY3RvcjxTdHJpbmc+IGZp
bmRJbWFnZXNGb3JUcmFuc2NvZGluZyhjb25zdCBWZWN0b3I8U3RyaW5nPiYgcGF0aHMsIGNvbnN0
IFZlY3RvcjxTdHJpbmc+JiBhbGxvd2VkTUlNRVR5cGVzKQogewotICAgIFZlY3RvcjxTdHJpbmc+
IHRyYW5zY29kaW5nUGF0aHM7Ci0gICAgdHJhbnNjb2RpbmdQYXRocy5yZXNlcnZlSW5pdGlhbENh
cGFjaXR5KHBhdGhzLnNpemUoKSk7Ci0KICAgICBib29sIG5lZWRzVHJhbnNjb2RpbmcgPSBmYWxz
ZTsKLQotICAgIGZvciAoYXV0byYgcGF0aCA6IHBhdGhzKSB7CisgICAgYXV0byB0cmFuc2NvZGlu
Z1BhdGhzID0gcGF0aHMubWFwKFsmXShhdXRvJiBwYXRoKSB7CiAgICAgICAgIC8vIEFwcGVuZCBh
IHBhdGggb2YgdGhlIGltYWdlIHdoaWNoIG5lZWRzIHRyYW5zY29kaW5nLiBPdGhlcndpc2UgYXBw
ZW5kIGEgbnVsbCBzdHJpbmcuCiAgICAgICAgIGlmICghYWxsb3dlZE1JTUVUeXBlcy5jb250YWlu
cyhXZWJDb3JlOjpNSU1FVHlwZVJlZ2lzdHJ5OjptaW1lVHlwZUZvclBhdGgocGF0aCkpKSB7Ci0g
ICAgICAgICAgICB0cmFuc2NvZGluZ1BhdGhzLnVuY2hlY2tlZEFwcGVuZChwYXRoKTsKICAgICAg
ICAgICAgIG5lZWRzVHJhbnNjb2RpbmcgPSB0cnVlOwotICAgICAgICB9IGVsc2UKLSAgICAgICAg
ICAgIHRyYW5zY29kaW5nUGF0aHMudW5jaGVja2VkQXBwZW5kKG51bGxTdHJpbmcoKSk7Ci0gICAg
fQorICAgICAgICAgICAgcmV0dXJuIHBhdGg7CisgICAgICAgIH0KKyAgICAgICAgcmV0dXJuIG51
bGxTdHJpbmcoKTsKKyAgICB9KTsKIAogICAgIC8vIElmIG5vbmUgb2YgdGhlIGZpbGVzIG5lZWRz
IGltYWdlIHRyYW5zY29kaW5nLCByZXR1cm4gYW4gZW1wdHkgVmVjdG9yLgogICAgIHJldHVybiBu
ZWVkc1RyYW5zY29kaW5nID8gdHJhbnNjb2RpbmdQYXRocyA6IFZlY3RvcjxTdHJpbmc+KCk7CkBA
IC0xMjQsMTggKzEyMCwxMCBAQCBWZWN0b3I8U3RyaW5nPiB0cmFuc2NvZGVJbWFnZXMoY29uc3Qg
VmVjdG9yPFN0cmluZz4mIHBhdGhzLCBjb25zdCBTdHJpbmcmIGRlc3RpbgogICAgIEFTU0VSVCgh
ZGVzdGluYXRpb25VVEkuaXNOdWxsKCkpOwogICAgIEFTU0VSVCghZGVzdGluYXRpb25FeHRlbnNp
b24uaXNOdWxsKCkpOwogICAgIAotICAgIFZlY3RvcjxTdHJpbmc+IHRyYW5zY29kZWRQYXRoczsK
LSAgICB0cmFuc2NvZGVkUGF0aHMucmVzZXJ2ZUluaXRpYWxDYXBhY2l0eShwYXRocy5zaXplKCkp
OwotCi0gICAgZm9yIChhdXRvJiBwYXRoIDogcGF0aHMpIHsKKyAgICByZXR1cm4gcGF0aHMubWFw
KFsmXShhdXRvJiBwYXRoKSB7CiAgICAgICAgIC8vIEFwcGVuZCB0aGUgdHJhbnNjb2RlZCBwYXRo
IGlmIHRoZSBpbWFnZSBuZWVkcyB0cmFuc2NvZGluZy4gT3RoZXJ3aXNlIGFwcGVuZCBhIG51bGwg
c3RyaW5nLgotICAgICAgICBpZiAoIXBhdGguaXNOdWxsKCkpCi0gICAgICAgICAgICB0cmFuc2Nv
ZGVkUGF0aHMudW5jaGVja2VkQXBwZW5kKHRyYW5zY29kZUltYWdlKHBhdGgsIGRlc3RpbmF0aW9u
VVRJLCBkZXN0aW5hdGlvbkV4dGVuc2lvbikpOwotICAgICAgICBlbHNlCi0gICAgICAgICAgICB0
cmFuc2NvZGVkUGF0aHMudW5jaGVja2VkQXBwZW5kKG51bGxTdHJpbmcoKSk7Ci0gICAgfQotCi0g
ICAgcmV0dXJuIHRyYW5zY29kZWRQYXRoczsKKyAgICAgICAgcmV0dXJuIHBhdGguaXNOdWxsKCkg
PyBudWxsU3RyaW5nKCkgOiB0cmFuc2NvZGVJbWFnZShwYXRoLCBkZXN0aW5hdGlvblVUSSwgZGVz
dGluYXRpb25FeHRlbnNpb24pOworICAgIH0pOwogfQogCiB9IC8vIG5hbWVzcGFjZSBXZWJDb3Jl
CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9jb2NvYS9Gb250
Q2FjaGVDb3JlVGV4dC5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9jb2Nv
YS9Gb250Q2FjaGVDb3JlVGV4dC5jcHAKaW5kZXggNDQ4NDJmOGEyMzRkMTdjNTJmNjI3YjJhNDA1
ODkxYWEwMDZlZmJiNy4uYWQ5YTIzN2FhOWM2MDQ4NTQ3NDU1MWMyNDU4NmQyY2E4YTU3NjMwMiAx
MDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvY29jb2EvRm9udENh
Y2hlQ29yZVRleHQuY3BwCisrKyBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2Nv
Y29hL0ZvbnRDYWNoZUNvcmVUZXh0LmNwcApAQCAtMTE1MywxMSArMTE1MywxMCBAQCBGb250U2Vs
ZWN0aW9uQ2FwYWJpbGl0aWVzIGNhcGFiaWxpdGllc0ZvckZvbnREZXNjcmlwdG9yKENURm9udERl
c2NyaXB0b3JSZWYgZm9udAogCiBzdGF0aWMgY29uc3QgRm9udERhdGFiYXNlOjpJbnN0YWxsZWRG
b250KiBmaW5kQ2xvc2VzdEZvbnQoY29uc3QgRm9udERhdGFiYXNlOjpJbnN0YWxsZWRGb250RmFt
aWx5JiBmYW1pbHlGb250cywgRm9udFNlbGVjdGlvblJlcXVlc3QgZm9udFNlbGVjdGlvblJlcXVl
c3QpCiB7Ci0gICAgVmVjdG9yPEZvbnRTZWxlY3Rpb25DYXBhYmlsaXRpZXM+IGNhcGFiaWxpdGll
czsKLSAgICBjYXBhYmlsaXRpZXMucmVzZXJ2ZUluaXRpYWxDYXBhY2l0eShmYW1pbHlGb250cy5z
aXplKCkpOwotICAgIGZvciAoYXV0byYgZm9udCA6IGZhbWlseUZvbnRzLmluc3RhbGxlZEZvbnRz
KQotICAgICAgICBjYXBhYmlsaXRpZXMudW5jaGVja2VkQXBwZW5kKGZvbnQuY2FwYWJpbGl0aWVz
KTsKLSAgICBGb250U2VsZWN0aW9uQWxnb3JpdGhtIGZvbnRTZWxlY3Rpb25BbGdvcml0aG0oZm9u
dFNlbGVjdGlvblJlcXVlc3QsIGNhcGFiaWxpdGllcywgZmFtaWx5Rm9udHMuY2FwYWJpbGl0aWVz
KTsKKyAgICBhdXRvIGNhcGFiaWxpdGllcyA9IGZhbWlseUZvbnRzLmluc3RhbGxlZEZvbnRzLm1h
cChbXShhdXRvJiBmb250KSB7CisgICAgICAgIHJldHVybiBmb250LmNhcGFiaWxpdGllczsKKyAg
ICB9KTsKKyAgICBGb250U2VsZWN0aW9uQWxnb3JpdGhtIGZvbnRTZWxlY3Rpb25BbGdvcml0aG0o
Zm9udFNlbGVjdGlvblJlcXVlc3QsIFdURk1vdmUoY2FwYWJpbGl0aWVzKSwgZmFtaWx5Rm9udHMu
Y2FwYWJpbGl0aWVzKTsKICAgICBhdXRvIGluZGV4ID0gZm9udFNlbGVjdGlvbkFsZ29yaXRobS5p
bmRleE9mQmVzdENhcGFiaWxpdGllcygpOwogICAgIGlmIChpbmRleCA9PSBub3RGb3VuZCkKICAg
ICAgICAgcmV0dXJuIG51bGxwdHI7CkBAIC0xMTY5LDE0ICsxMTY4LDkgQEAgVmVjdG9yPEZvbnRT
ZWxlY3Rpb25DYXBhYmlsaXRpZXM+IEZvbnRDYWNoZTo6Z2V0Rm9udFNlbGVjdGlvbkNhcGFiaWxp
dGllc0luRmFtaWwKIHsKICAgICBhdXRvJiBmb250RGF0YWJhc2UgPSBhbGxvd1VzZXJJbnN0YWxs
ZWRGb250cyA9PSBBbGxvd1VzZXJJbnN0YWxsZWRGb250czo6WWVzID8gRm9udERhdGFiYXNlOjpz
aW5nbGV0b25BbGxvd2luZ1VzZXJJbnN0YWxsZWRGb250cygpIDogRm9udERhdGFiYXNlOjpzaW5n
bGV0b25EaXNhbGxvd2luZ1VzZXJJbnN0YWxsZWRGb250cygpOwogICAgIGNvbnN0IGF1dG8mIGZv
bnRzID0gZm9udERhdGFiYXNlLmNvbGxlY3Rpb25Gb3JGYW1pbHkoZmFtaWx5TmFtZS5zdHJpbmco
KSk7Ci0gICAgaWYgKGZvbnRzLmlzRW1wdHkoKSkKLSAgICAgICAgcmV0dXJuIHsgfTsKLQotICAg
IFZlY3RvcjxGb250U2VsZWN0aW9uQ2FwYWJpbGl0aWVzPiByZXN1bHQ7Ci0gICAgcmVzdWx0LnJl
c2VydmVJbml0aWFsQ2FwYWNpdHkoZm9udHMuc2l6ZSgpKTsKLSAgICBmb3IgKGNvbnN0IGF1dG8m
IGZvbnQgOiBmb250cy5pbnN0YWxsZWRGb250cykKLSAgICAgICAgcmVzdWx0LnVuY2hlY2tlZEFw
cGVuZChmb250LmNhcGFiaWxpdGllcyk7Ci0gICAgcmV0dXJuIHJlc3VsdDsKKyAgICByZXR1cm4g
Zm9udHMuaW5zdGFsbGVkRm9udHMubWFwKFtdKGF1dG8mIGZvbnQpIHsKKyAgICAgICAgcmV0dXJu
IGZvbnQuY2FwYWJpbGl0aWVzOworICAgIH0pOwogfQogCiBzdHJ1Y3QgRm9udExvb2t1cCB7CmRp
ZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9tZWRpYXN0cmVhbS9SZWFsdGltZU1l
ZGlhU291cmNlLmNwcCBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL21lZGlhc3RyZWFtL1JlYWx0
aW1lTWVkaWFTb3VyY2UuY3BwCmluZGV4IDA3MzEzMzkxNDJjZjMzY2U5MTRlMThkYzkxNDczOTFh
MzdkMDNiNjQuLmRlMGYxYTdhNGU2MzVhMTM5ZTQ4MjhiNTQ3ZmRjZjA2NjE5YjM1YWIgMTAwNjQ0
Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL21lZGlhc3RyZWFtL1JlYWx0aW1lTWVkaWFT
b3VyY2UuY3BwCisrKyBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL21lZGlhc3RyZWFtL1JlYWx0
aW1lTWVkaWFTb3VyY2UuY3BwCkBAIC00NjksMTEgKzQ2OSw5IEBAIGRvdWJsZSBSZWFsdGltZU1l
ZGlhU291cmNlOjpmaXRuZXNzRGlzdGFuY2UoY29uc3QgTWVkaWFDb25zdHJhaW50JiBjb25zdHJh
aW50KQogICAgICAgICBpZiAoIWNhcGFiaWxpdGllcy5zdXBwb3J0c0ZhY2luZ01vZGUoKSkKICAg
ICAgICAgICAgIHJldHVybiAwOwogCi0gICAgICAgIGF1dG8mIG1vZGVzID0gY2FwYWJpbGl0aWVz
LmZhY2luZ01vZGUoKTsKLSAgICAgICAgVmVjdG9yPFN0cmluZz4gc3VwcG9ydGVkTW9kZXM7Ci0g
ICAgICAgIHN1cHBvcnRlZE1vZGVzLnJlc2VydmVJbml0aWFsQ2FwYWNpdHkobW9kZXMuc2l6ZSgp
KTsKLSAgICAgICAgZm9yIChhdXRvJiBtb2RlIDogbW9kZXMpCi0gICAgICAgICAgICBzdXBwb3J0
ZWRNb2Rlcy51bmNoZWNrZWRBcHBlbmQoUmVhbHRpbWVNZWRpYVNvdXJjZVNldHRpbmdzOjpmYWNp
bmdNb2RlKG1vZGUpKTsKKyAgICAgICAgYXV0byBzdXBwb3J0ZWRNb2RlcyA9IGNhcGFiaWxpdGll
cy5mYWNpbmdNb2RlKCkubWFwKFtdKGF1dG8mIG1vZGUpIHsKKyAgICAgICAgICAgIHJldHVybiBS
ZWFsdGltZU1lZGlhU291cmNlU2V0dGluZ3M6OmZhY2luZ01vZGUobW9kZSk7CisgICAgICAgIH0p
OwogICAgICAgICByZXR1cm4gZG93bmNhc3Q8U3RyaW5nQ29uc3RyYWludD4oY29uc3RyYWludCku
Zml0bmVzc0Rpc3RhbmNlKHN1cHBvcnRlZE1vZGVzKTsKICAgICAgICAgYnJlYWs7CiAgICAgfQpk
aWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vbmV0d29yay9DYWNoZVZhbGlkYXRp
b24uY3BwIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vbmV0d29yay9DYWNoZVZhbGlkYXRpb24u
Y3BwCmluZGV4IDJlOWMwNmQ1N2M5MGQ1NTQ1MWNkNGFhZGVmNzZiYTMwM2YxMjhhMjkuLmRlYjM5
ZjBhNjNkYThhMWYwNjUyNDdlYjdjMDNlNThlMmVhYzRhNTkgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9X
ZWJDb3JlL3BsYXRmb3JtL25ldHdvcmsvQ2FjaGVWYWxpZGF0aW9uLmNwcAorKysgYi9Tb3VyY2Uv
V2ViQ29yZS9wbGF0Zm9ybS9uZXR3b3JrL0NhY2hlVmFsaWRhdGlvbi5jcHAKQEAgLTM2MywxOCAr
MzYzLDEzIEBAIHN0YXRpYyBTdHJpbmcgaGVhZGVyVmFsdWVGb3JWYXJ5KGNvbnN0IFJlc291cmNl
UmVxdWVzdCYgcmVxdWVzdCwgY29uc3QgU3RyaW5nJiBoCiAKIHN0YXRpYyBWZWN0b3I8c3RkOjpw
YWlyPFN0cmluZywgU3RyaW5nPj4gY29sbGVjdFZhcnlpbmdSZXF1ZXN0SGVhZGVyc0ludGVybmFs
KGNvbnN0IFJlc291cmNlUmVzcG9uc2UmIHJlc3BvbnNlLCBGdW5jdGlvbjxTdHJpbmcoY29uc3Qg
U3RyaW5nJiBoZWFkZXJOYW1lKT4mJiBoZWFkZXJWYWx1ZUZvclZhcnlGdW5jdGlvbikKIHsKLSAg
ICBTdHJpbmcgdmFyeVZhbHVlID0gcmVzcG9uc2UuaHR0cEhlYWRlckZpZWxkKEhUVFBIZWFkZXJO
YW1lOjpWYXJ5KTsKKyAgICBhdXRvIHZhcnlWYWx1ZSA9IHJlc3BvbnNlLmh0dHBIZWFkZXJGaWVs
ZChIVFRQSGVhZGVyTmFtZTo6VmFyeSk7CiAgICAgaWYgKHZhcnlWYWx1ZS5pc0VtcHR5KCkpCiAg
ICAgICAgIHJldHVybiB7IH07Ci0gICAgVmVjdG9yPFN0cmluZz4gdmFyeWluZ0hlYWRlck5hbWVz
ID0gdmFyeVZhbHVlLnNwbGl0KCcsJyk7Ci0gICAgVmVjdG9yPHN0ZDo6cGFpcjxTdHJpbmcsIFN0
cmluZz4+IHZhcnlpbmdSZXF1ZXN0SGVhZGVyczsKLSAgICB2YXJ5aW5nUmVxdWVzdEhlYWRlcnMu
cmVzZXJ2ZUNhcGFjaXR5KHZhcnlpbmdIZWFkZXJOYW1lcy5zaXplKCkpOwotICAgIGZvciAoYXV0
byYgdmFyeUhlYWRlck5hbWUgOiB2YXJ5aW5nSGVhZGVyTmFtZXMpIHsKLSAgICAgICAgU3RyaW5n
IGhlYWRlck5hbWUgPSB2YXJ5SGVhZGVyTmFtZS5zdHJpcFdoaXRlU3BhY2UoKTsKLSAgICAgICAg
U3RyaW5nIGhlYWRlclZhbHVlID0gaGVhZGVyVmFsdWVGb3JWYXJ5RnVuY3Rpb24oaGVhZGVyTmFt
ZSk7Ci0gICAgICAgIHZhcnlpbmdSZXF1ZXN0SGVhZGVycy5hcHBlbmQoc3RkOjptYWtlX3BhaXIo
aGVhZGVyTmFtZSwgaGVhZGVyVmFsdWUpKTsKLSAgICB9Ci0gICAgcmV0dXJuIHZhcnlpbmdSZXF1
ZXN0SGVhZGVyczsKKyAgICByZXR1cm4gdmFyeVZhbHVlLnNwbGl0KCcsJykubWFwKFsmXShhdXRv
JiB2YXJ5SGVhZGVyTmFtZSkgeworICAgICAgICBhdXRvIGhlYWRlck5hbWUgPSB2YXJ5SGVhZGVy
TmFtZS5zdHJpcFdoaXRlU3BhY2UoKTsKKyAgICAgICAgcmV0dXJuIHN0ZDo6bWFrZV9wYWlyKGhl
YWRlck5hbWUsIGhlYWRlclZhbHVlRm9yVmFyeUZ1bmN0aW9uKGhlYWRlck5hbWUpKTsKKyAgICB9
KTsKIH0KIAogVmVjdG9yPHN0ZDo6cGFpcjxTdHJpbmcsIFN0cmluZz4+IGNvbGxlY3RWYXJ5aW5n
UmVxdWVzdEhlYWRlcnMoTmV0d29ya1N0b3JhZ2VTZXNzaW9uKiBzdG9yYWdlU2Vzc2lvbiwgY29u
c3QgUmVzb3VyY2VSZXF1ZXN0JiByZXF1ZXN0LCBjb25zdCBSZXNvdXJjZVJlc3BvbnNlJiByZXNw
b25zZSkKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL25ldHdvcmsvRm9ybURh
dGEuY3BwIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vbmV0d29yay9Gb3JtRGF0YS5jcHAKaW5k
ZXggMGM5MDgxN2M0ZTliNDFmMzQ5YTQxYWU2NGI3MTkwNmI5NTFlYjg5YS4uNzUwOWY1ZDUyZTAy
ZDQxODYyOWYyNmQ5NmIzYjY1MTZkOTY1NzAyNiAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUv
cGxhdGZvcm0vbmV0d29yay9Gb3JtRGF0YS5jcHAKKysrIGIvU291cmNlL1dlYkNvcmUvcGxhdGZv
cm0vbmV0d29yay9Gb3JtRGF0YS5jcHAKQEAgLTExMSwxNSArMTExLDkgQEAgUmVmPEZvcm1EYXRh
PiBGb3JtRGF0YTo6aXNvbGF0ZWRDb3B5KCkgY29uc3QKIHsKICAgICAvLyBGSVhNRTogaXNvbGF0
ZWRDb3B5KCkgZG9lcyBub3QgY29weSBtX2lkZW50aWZpZXIsIG1fYm91bmRhcnksIG9yIG1fY29u
dGFpbnNQYXNzd29yZERhdGEuCiAgICAgLy8gSXMgYWxsIG9mIHRoYXQgY29ycmVjdCBhbmQgaW50
ZW50aW9uYWw/Ci0KICAgICBhdXRvIGZvcm1EYXRhID0gY3JlYXRlKCk7Ci0KICAgICBmb3JtRGF0
YS0+bV9hbHdheXNTdHJlYW0gPSBtX2Fsd2F5c1N0cmVhbTsKLQotICAgIGZvcm1EYXRhLT5tX2Vs
ZW1lbnRzLnJlc2VydmVJbml0aWFsQ2FwYWNpdHkobV9lbGVtZW50cy5zaXplKCkpOwotICAgIGZv
ciAoYXV0byYgZWxlbWVudCA6IG1fZWxlbWVudHMpCi0gICAgICAgIGZvcm1EYXRhLT5tX2VsZW1l
bnRzLnVuY2hlY2tlZEFwcGVuZChlbGVtZW50Lmlzb2xhdGVkQ29weSgpKTsKLQorICAgIGZvcm1E
YXRhLT5tX2VsZW1lbnRzID0gY3Jvc3NUaHJlYWRDb3B5KG1fZWxlbWVudHMpOwogICAgIHJldHVy
biBmb3JtRGF0YTsKIH0KIApkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vbmV0
d29yay9Tb2NrZXRTdHJlYW1IYW5kbGVJbXBsLmNwcCBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3Jt
L25ldHdvcmsvU29ja2V0U3RyZWFtSGFuZGxlSW1wbC5jcHAKaW5kZXggYzVmMmVhNzgwY2I3YmY1
ODBiNmMwYzYwODhhZDBmYjUxM2JiNWQ0Zi4uYTUyNmU1ZGQxZTBmMTAwOGI5Zjk3Y2RhMzY4MjY5
NTMzYzg4NmU2YSAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vbmV0d29yay9T
b2NrZXRTdHJlYW1IYW5kbGVJbXBsLmNwcAorKysgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9u
ZXR3b3JrL1NvY2tldFN0cmVhbUhhbmRsZUltcGwuY3BwCkBAIC0xMjgsNyArMTI4LDcgQEAgdm9p
ZCBTb2NrZXRTdHJlYW1IYW5kbGVJbXBsOjpwbGF0Zm9ybVNlbmRIYW5kc2hha2UoY29uc3QgdWlu
dDhfdCogZGF0YSwgc2l6ZV90IGwKICAgICBpZiAobV9zdGF0ZSA9PSBPcGVuKSB7CiAgICAgICAg
IC8vIFVuZm9ydHVuYXRlbHksIHdlIG5lZWQgdG8gc2VuZCB0aGUgZGF0YSBpbiBvbmUgYnVmZmVy
IG9yIGVsc2UgdGhlIGhhbmRzaGFrZSBmYWlscy4KICAgICAgICAgVmVjdG9yPHVpbnQ4X3Q+IHNl
bmREYXRhOwotICAgICAgICBzZW5kRGF0YS5yZXNlcnZlQ2FwYWNpdHkobGVuZ3RoICsgY29va2ll
RGF0YS5zaXplKCkpOworICAgICAgICBzZW5kRGF0YS5yZXNlcnZlSW5pdGlhbENhcGFjaXR5KGxl
bmd0aCArIGNvb2tpZURhdGEuc2l6ZSgpKTsKICAgICAgICAgc2VuZERhdGEuYXBwZW5kKGRhdGEs
IGxlbmd0aCk7CiAgICAgICAgIHNlbmREYXRhLmFwcGVuZChjb29raWVEYXRhLmRhdGEoKSwgY29v
a2llRGF0YS5zaXplKCkpOwogCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9u
ZXR3b3JrL2NvY29hL05ldHdvcmtTdG9yYWdlU2Vzc2lvbkNvY29hLm1tIGIvU291cmNlL1dlYkNv
cmUvcGxhdGZvcm0vbmV0d29yay9jb2NvYS9OZXR3b3JrU3RvcmFnZVNlc3Npb25Db2NvYS5tbQpp
bmRleCAyOTlmYzRiZDJlYmNmNzA3NzU1NDc0NDUwYTRkNzlkZGU2NzhiZWZlLi40OTk5M2JlN2Nj
YWFiM2E3ZGQ3ZTRiNjJhOTQ1ZGY3MzJiNzYwOGM0IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29y
ZS9wbGF0Zm9ybS9uZXR3b3JrL2NvY29hL05ldHdvcmtTdG9yYWdlU2Vzc2lvbkNvY29hLm1tCisr
KyBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL25ldHdvcmsvY29jb2EvTmV0d29ya1N0b3JhZ2VT
ZXNzaW9uQ29jb2EubW0KQEAgLTg5LDYgKzg5LDggQEAgc3RhdGljIFZlY3RvcjxDb29raWU+IG5z
Q29va2llc1RvQ29va2llVmVjdG9yKE5TQXJyYXk8TlNIVFRQQ29va2llICo+ICpuc0Nvb2tpZXMK
ICAgICAgICAgaWYgKCFmaWx0ZXIgfHwgZmlsdGVyKG5zQ29va2llKSkKICAgICAgICAgICAgIGNv
b2tpZXMudW5jaGVja2VkQXBwZW5kKG5zQ29va2llKTsKICAgICB9CisgICAgaWYgKGZpbHRlcikK
KyAgICAgICAgY29va2llcy5zaHJpbmtUb0ZpdCgpOwogICAgIHJldHVybiBjb29raWVzOwogfQog
CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS90ZXh0L0xvY2FsZUlDVS5jcHAg
Yi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS90ZXh0L0xvY2FsZUlDVS5jcHAKaW5kZXggM2U1OGI3
ZjA2YmU2NDgyZmYyZDY0ODNlYzFmMjc3ZTNhZGEwZmUxMS4uNzNkZWJkMzcyNDk1Y2EyZDZlZmUw
NDBhMDU2M2Y1MjBjYTY1NzlkYSAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0v
dGV4dC9Mb2NhbGVJQ1UuY3BwCisrKyBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL3RleHQvTG9j
YWxlSUNVLmNwcApAQCAtMTY5LDcgKzE2OSw3IEBAIHN0ZDo6dW5pcXVlX3B0cjxWZWN0b3I8U3Ry
aW5nPj4gTG9jYWxlSUNVOjpjcmVhdGVMYWJlbFZlY3Rvcihjb25zdCBVRGF0ZUZvcm1hdCoKICAg
ICAgICAgcmV0dXJuIG1ha2VVbmlxdWU8VmVjdG9yPFN0cmluZz4+KCk7CiAKICAgICBhdXRvIGxh
YmVscyA9IG1ha2VVbmlxdWU8VmVjdG9yPFN0cmluZz4+KCk7Ci0gICAgbGFiZWxzLT5yZXNlcnZl
Q2FwYWNpdHkoc2l6ZSk7CisgICAgbGFiZWxzLT5yZXNlcnZlSW5pdGlhbENhcGFjaXR5KHNpemUp
OwogICAgIGZvciAoaW50MzJfdCBpID0gMDsgaSA8IHNpemU7ICsraSkgewogICAgICAgICBVRXJy
b3JDb2RlIHN0YXR1cyA9IFVfWkVST19FUlJPUjsKICAgICAgICAgaW50MzJfdCBsZW5ndGggPSB1
ZGF0X2dldFN5bWJvbHMoZGF0ZUZvcm1hdCwgdHlwZSwgc3RhcnRJbmRleCArIGksIDAsIDAsICZz
dGF0dXMpOwpAQCAtMTgwLDcgKzE4MCw3IEBAIHN0ZDo6dW5pcXVlX3B0cjxWZWN0b3I8U3RyaW5n
Pj4gTG9jYWxlSUNVOjpjcmVhdGVMYWJlbFZlY3Rvcihjb25zdCBVRGF0ZUZvcm1hdCoKICAgICAg
ICAgdWRhdF9nZXRTeW1ib2xzKGRhdGVGb3JtYXQsIHR5cGUsIHN0YXJ0SW5kZXggKyBpLCBidWZm
ZXIuZGF0YSgpLCBsZW5ndGgsICZzdGF0dXMpOwogICAgICAgICBpZiAoVV9GQUlMVVJFKHN0YXR1
cykpCiAgICAgICAgICAgICByZXR1cm4gbWFrZVVuaXF1ZTxWZWN0b3I8U3RyaW5nPj4oKTsKLSAg
ICAgICAgbGFiZWxzLT5hcHBlbmQoU3RyaW5nOjphZG9wdChXVEZNb3ZlKGJ1ZmZlcikpKTsKKyAg
ICAgICAgbGFiZWxzLT51bmNoZWNrZWRBcHBlbmQoU3RyaW5nOjphZG9wdChXVEZNb3ZlKGJ1ZmZl
cikpKTsKICAgICB9CiAgICAgcmV0dXJuIGxhYmVsczsKIH0KQEAgLTE4OCw5ICsxODgsOSBAQCBz
dGQ6OnVuaXF1ZV9wdHI8VmVjdG9yPFN0cmluZz4+IExvY2FsZUlDVTo6Y3JlYXRlTGFiZWxWZWN0
b3IoY29uc3QgVURhdGVGb3JtYXQqCiBzdGF0aWMgc3RkOjp1bmlxdWVfcHRyPFZlY3RvcjxTdHJp
bmc+PiBjcmVhdGVGYWxsYmFja01vbnRoTGFiZWxzKCkKIHsKICAgICBhdXRvIGxhYmVscyA9IG1h
a2VVbmlxdWU8VmVjdG9yPFN0cmluZz4+KCk7Ci0gICAgbGFiZWxzLT5yZXNlcnZlQ2FwYWNpdHko
V1RGX0FSUkFZX0xFTkdUSChXVEY6Om1vbnRoRnVsbE5hbWUpKTsKKyAgICBsYWJlbHMtPnJlc2Vy
dmVJbml0aWFsQ2FwYWNpdHkoV1RGX0FSUkFZX0xFTkdUSChXVEY6Om1vbnRoRnVsbE5hbWUpKTsK
ICAgICBmb3IgKHVuc2lnbmVkIGkgPSAwOyBpIDwgV1RGX0FSUkFZX0xFTkdUSChXVEY6Om1vbnRo
RnVsbE5hbWUpOyArK2kpCi0gICAgICAgIGxhYmVscy0+YXBwZW5kKFdURjo6bW9udGhGdWxsTmFt
ZVtpXSk7CisgICAgICAgIGxhYmVscy0+dW5jaGVja2VkQXBwZW5kKFdURjo6bW9udGhGdWxsTmFt
ZVtpXSk7CiAgICAgcmV0dXJuIGxhYmVsczsKIH0KIApAQCAtMjA5LDExICsyMDksNyBAQCBjb25z
dCBWZWN0b3I8U3RyaW5nPiYgTG9jYWxlSUNVOjptb250aExhYmVscygpCiAKIHN0YXRpYyBzdGQ6
OnVuaXF1ZV9wdHI8VmVjdG9yPFN0cmluZz4+IGNyZWF0ZUZhbGxiYWNrQU1QTUxhYmVscygpCiB7
Ci0gICAgYXV0byBsYWJlbHMgPSBtYWtlVW5pcXVlPFZlY3RvcjxTdHJpbmc+PigpOwotICAgIGxh
YmVscy0+cmVzZXJ2ZUNhcGFjaXR5KDIpOwotICAgIGxhYmVscy0+YXBwZW5kKCJBTSIpOwotICAg
IGxhYmVscy0+YXBwZW5kKCJQTSIpOwotICAgIHJldHVybiBsYWJlbHM7CisgICAgcmV0dXJuIG1h
a2VVbmlxdWU8VmVjdG9yPFN0cmluZz4+KHsgIkFNIl9zdHIsICJQTSJfc3RyIH0pOwogfQogCiB2
b2lkIExvY2FsZUlDVTo6aW5pdGlhbGl6ZURhdGVUaW1lRm9ybWF0KCkKZGlmZiAtLWdpdCBhL1Nv
dXJjZS9XZWJDb3JlL3BsYXRmb3JtL3RleHQvTG9jYWxlTm9uZS5jcHAgYi9Tb3VyY2UvV2ViQ29y
ZS9wbGF0Zm9ybS90ZXh0L0xvY2FsZU5vbmUuY3BwCmluZGV4IDc4MTVhNDc4ZTAyOTc0NTU5NjU3
NmMyZGVkMjIxMTkzNmFhOTZhMWIuLjRiNmQ3NjBlOTUyN2E0NzdjYzQ5OTA0ODBkYzUyZjg2NTdm
MzM0MzUgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL3RleHQvTG9jYWxlTm9u
ZS5jcHAKKysrIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vdGV4dC9Mb2NhbGVOb25lLmNwcApA
QCAtNzMsNyArNzMsNyBAQCBjb25zdCBWZWN0b3I8U3RyaW5nPiYgTG9jYWxlTm9uZTo6bW9udGhM
YWJlbHMoKQogICAgICAgICByZXR1cm4gbV9tb250aExhYmVsczsKICAgICBtX21vbnRoTGFiZWxz
LnJlc2VydmVDYXBhY2l0eShXVEZfQVJSQVlfTEVOR1RIKFdURjo6bW9udGhGdWxsTmFtZSkpOwog
ICAgIGZvciAodW5zaWduZWQgaSA9IDA7IGkgPCBXVEZfQVJSQVlfTEVOR1RIKFdURjo6bW9udGhG
dWxsTmFtZSk7ICsraSkKLSAgICAgICAgbV9tb250aExhYmVscy5hcHBlbmQoV1RGOjptb250aEZ1
bGxOYW1lW2ldKTsKKyAgICAgICAgbV9tb250aExhYmVscy51bmNoZWNrZWRBcHBlbmQoV1RGOjpt
b250aEZ1bGxOYW1lW2ldKTsKICAgICByZXR1cm4gbV9tb250aExhYmVsczsKIH0KIApAQCAtMTE4
LDcgKzExOCw3IEBAIGNvbnN0IFZlY3RvcjxTdHJpbmc+JiBMb2NhbGVOb25lOjpzaG9ydE1vbnRo
TGFiZWxzKCkKICAgICAgICAgcmV0dXJuIG1fc2hvcnRNb250aExhYmVsczsKICAgICBtX3Nob3J0
TW9udGhMYWJlbHMucmVzZXJ2ZUNhcGFjaXR5KFdURl9BUlJBWV9MRU5HVEgoV1RGOjptb250aE5h
bWUpKTsKICAgICBmb3IgKHVuc2lnbmVkIGkgPSAwOyBpIDwgV1RGX0FSUkFZX0xFTkdUSChXVEY6
Om1vbnRoTmFtZSk7ICsraSkKLSAgICAgICAgbV9zaG9ydE1vbnRoTGFiZWxzLmFwcGVuZChXVEY6
Om1vbnRoTmFtZVtpXSk7CisgICAgICAgIG1fc2hvcnRNb250aExhYmVscy51bmNoZWNrZWRBcHBl
bmQoV1RGOjptb250aE5hbWVbaV0pOwogICAgIHJldHVybiBtX3Nob3J0TW9udGhMYWJlbHM7CiB9
CiAKQEAgLTEzNyw4ICsxMzcsOCBAQCBjb25zdCBWZWN0b3I8U3RyaW5nPiYgTG9jYWxlTm9uZTo6
dGltZUFNUE1MYWJlbHMoKQogICAgIGlmICghbV90aW1lQU1QTUxhYmVscy5pc0VtcHR5KCkpCiAg
ICAgICAgIHJldHVybiBtX3RpbWVBTVBNTGFiZWxzOwogICAgIG1fdGltZUFNUE1MYWJlbHMucmVz
ZXJ2ZUNhcGFjaXR5KDIpOwotICAgIG1fdGltZUFNUE1MYWJlbHMuYXBwZW5kKCJBTSIpOwotICAg
IG1fdGltZUFNUE1MYWJlbHMuYXBwZW5kKCJQTSIpOworICAgIG1fdGltZUFNUE1MYWJlbHMudW5j
aGVja2VkQXBwZW5kKCJBTSIpOworICAgIG1fdGltZUFNUE1MYWJlbHMudW5jaGVja2VkQXBwZW5k
KCJQTSIpOwogICAgIHJldHVybiBtX3RpbWVBTVBNTGFiZWxzOwogfQogCmRpZmYgLS1naXQgYS9T
b3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS90ZXh0L2NvY29hL0xvY2FsZUNvY29hLm1tIGIvU291cmNl
L1dlYkNvcmUvcGxhdGZvcm0vdGV4dC9jb2NvYS9Mb2NhbGVDb2NvYS5tbQppbmRleCAxYjA5OGZh
ZjM1ZWIyYmFjNDRmNTZjOWMzOTE4MmMzYjg4NTIxMGE3Li5mMThkYjQ1NzA4MmY1ZDkyYjA2OTNi
ZDI0N2YzN2VkYTA3Njg4YjZhIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS90
ZXh0L2NvY29hL0xvY2FsZUNvY29hLm1tCisrKyBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL3Rl
eHQvY29jb2EvTG9jYWxlQ29jb2EubW0KQEAgLTExMCwxMSArMTEwLDExIEBAIGNvbnN0IFZlY3Rv
cjxTdHJpbmc+JiBMb2NhbGVDb2NvYTo6bW9udGhMYWJlbHMoKQogICAgIE5TQXJyYXkgKmFycmF5
ID0gW3Nob3J0RGF0ZUZvcm1hdHRlcigpLmdldCgpIG1vbnRoU3ltYm9sc107CiAgICAgaWYgKFth
cnJheSBjb3VudF0gPT0gMTIpIHsKICAgICAgICAgZm9yICh1bnNpZ25lZCBpID0gMDsgaSA8IDEy
OyArK2kpCi0gICAgICAgICAgICBtX21vbnRoTGFiZWxzLmFwcGVuZChTdHJpbmcoW2FycmF5IG9i
amVjdEF0SW5kZXg6aV0pKTsKKyAgICAgICAgICAgIG1fbW9udGhMYWJlbHMudW5jaGVja2VkQXBw
ZW5kKFN0cmluZyhbYXJyYXkgb2JqZWN0QXRJbmRleDppXSkpOwogICAgICAgICByZXR1cm4gbV9t
b250aExhYmVsczsKICAgICB9CiAgICAgZm9yIChhdXRvJiBuYW1lIDogV1RGOjptb250aEZ1bGxO
YW1lKQotICAgICAgICBtX21vbnRoTGFiZWxzLmFwcGVuZChuYW1lKTsKKyAgICAgICAgbV9tb250
aExhYmVscy51bmNoZWNrZWRBcHBlbmQobmFtZSk7CiAgICAgcmV0dXJuIG1fbW9udGhMYWJlbHM7
CiB9CiAKQEAgLTIwNCwxMSArMjA0LDExIEBAIGNvbnN0IFZlY3RvcjxTdHJpbmc+JiBMb2NhbGVD
b2NvYTo6c2hvcnRNb250aExhYmVscygpCiAgICAgTlNBcnJheSAqYXJyYXkgPSBbc2hvcnREYXRl
Rm9ybWF0dGVyKCkuZ2V0KCkgc2hvcnRNb250aFN5bWJvbHNdOwogICAgIGlmIChbYXJyYXkgY291
bnRdID09IDEyKSB7CiAgICAgICAgIGZvciAodW5zaWduZWQgaSA9IDA7IGkgPCAxMjsgKytpKQot
ICAgICAgICAgICAgbV9zaG9ydE1vbnRoTGFiZWxzLmFwcGVuZChbYXJyYXkgb2JqZWN0QXRJbmRl
eDppXSk7CisgICAgICAgICAgICBtX3Nob3J0TW9udGhMYWJlbHMudW5jaGVja2VkQXBwZW5kKFth
cnJheSBvYmplY3RBdEluZGV4OmldKTsKICAgICAgICAgcmV0dXJuIG1fc2hvcnRNb250aExhYmVs
czsKICAgICB9CiAgICAgZm9yIChhdXRvJiBuYW1lIDogV1RGOjptb250aE5hbWUpCi0gICAgICAg
IG1fc2hvcnRNb250aExhYmVscy5hcHBlbmQobmFtZSk7CisgICAgICAgIG1fc2hvcnRNb250aExh
YmVscy51bmNoZWNrZWRBcHBlbmQobmFtZSk7CiAgICAgcmV0dXJuIG1fc2hvcnRNb250aExhYmVs
czsKIH0KIApAQCAtMjIwLDcgKzIyMCw3IEBAIGNvbnN0IFZlY3RvcjxTdHJpbmc+JiBMb2NhbGVD
b2NvYTo6c3RhbmRBbG9uZU1vbnRoTGFiZWxzKCkKICAgICBpZiAoW2FycmF5IGNvdW50XSA9PSAx
MikgewogICAgICAgICBtX3N0YW5kQWxvbmVNb250aExhYmVscy5yZXNlcnZlQ2FwYWNpdHkoMTIp
OwogICAgICAgICBmb3IgKHVuc2lnbmVkIGkgPSAwOyBpIDwgMTI7ICsraSkKLSAgICAgICAgICAg
IG1fc3RhbmRBbG9uZU1vbnRoTGFiZWxzLmFwcGVuZChbYXJyYXkgb2JqZWN0QXRJbmRleDppXSk7
CisgICAgICAgICAgICBtX3N0YW5kQWxvbmVNb250aExhYmVscy51bmNoZWNrZWRBcHBlbmQoW2Fy
cmF5IG9iamVjdEF0SW5kZXg6aV0pOwogICAgICAgICByZXR1cm4gbV9zdGFuZEFsb25lTW9udGhM
YWJlbHM7CiAgICAgfQogICAgIG1fc3RhbmRBbG9uZU1vbnRoTGFiZWxzID0gc2hvcnRNb250aExh
YmVscygpOwpAQCAtMjM1LDcgKzIzNSw3IEBAIGNvbnN0IFZlY3RvcjxTdHJpbmc+JiBMb2NhbGVD
b2NvYTo6c2hvcnRTdGFuZEFsb25lTW9udGhMYWJlbHMoKQogICAgIGlmIChbYXJyYXkgY291bnRd
ID09IDEyKSB7CiAgICAgICAgIG1fc2hvcnRTdGFuZEFsb25lTW9udGhMYWJlbHMucmVzZXJ2ZUNh
cGFjaXR5KDEyKTsKICAgICAgICAgZm9yICh1bnNpZ25lZCBpID0gMDsgaSA8IDEyOyArK2kpCi0g
ICAgICAgICAgICBtX3Nob3J0U3RhbmRBbG9uZU1vbnRoTGFiZWxzLmFwcGVuZChbYXJyYXkgb2Jq
ZWN0QXRJbmRleDppXSk7CisgICAgICAgICAgICBtX3Nob3J0U3RhbmRBbG9uZU1vbnRoTGFiZWxz
LnVuY2hlY2tlZEFwcGVuZChbYXJyYXkgb2JqZWN0QXRJbmRleDppXSk7CiAgICAgICAgIHJldHVy
biBtX3Nob3J0U3RhbmRBbG9uZU1vbnRoTGFiZWxzOwogICAgIH0KICAgICBtX3Nob3J0U3RhbmRB
bG9uZU1vbnRoTGFiZWxzID0gc2hvcnRNb250aExhYmVscygpOwpAQCAtMjQ4LDggKzI0OCw4IEBA
IGNvbnN0IFZlY3RvcjxTdHJpbmc+JiBMb2NhbGVDb2NvYTo6dGltZUFNUE1MYWJlbHMoKQogICAg
ICAgICByZXR1cm4gbV90aW1lQU1QTUxhYmVsczsKICAgICBtX3RpbWVBTVBNTGFiZWxzLnJlc2Vy
dmVDYXBhY2l0eSgyKTsKICAgICBSZXRhaW5QdHI8TlNEYXRlRm9ybWF0dGVyPiBmb3JtYXR0ZXIg
PSBzaG9ydFRpbWVGb3JtYXR0ZXIoKTsKLSAgICBtX3RpbWVBTVBNTGFiZWxzLmFwcGVuZChbZm9y
bWF0dGVyIEFNU3ltYm9sXSk7Ci0gICAgbV90aW1lQU1QTUxhYmVscy5hcHBlbmQoW2Zvcm1hdHRl
ciBQTVN5bWJvbF0pOworICAgIG1fdGltZUFNUE1MYWJlbHMudW5jaGVja2VkQXBwZW5kKFtmb3Jt
YXR0ZXIgQU1TeW1ib2xdKTsKKyAgICBtX3RpbWVBTVBNTGFiZWxzLnVuY2hlY2tlZEFwcGVuZChb
Zm9ybWF0dGVyIFBNU3ltYm9sXSk7CiAgICAgcmV0dXJuIG1fdGltZUFNUE1MYWJlbHM7CiB9CiAK
ZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3BsdWdpbnMvRE9NTWltZVR5cGVBcnJheS5jcHAg
Yi9Tb3VyY2UvV2ViQ29yZS9wbHVnaW5zL0RPTU1pbWVUeXBlQXJyYXkuY3BwCmluZGV4IGE2ZWI0
Zjk5ZjM0MTZjZjg0NDYwZmMzYjAwYjRhNmYwMjQ1NTZkYzcuLmVhY2VjZmMzM2I4NTY5MjRmYzFk
MDBhMTE2ZjEwM2IzZDZlYzFmMDUgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL3BsdWdpbnMv
RE9NTWltZVR5cGVBcnJheS5jcHAKKysrIGIvU291cmNlL1dlYkNvcmUvcGx1Z2lucy9ET01NaW1l
VHlwZUFycmF5LmNwcApAQCAtNjMsMTMgKzYzLDExIEBAIFJlZlB0cjxET01NaW1lVHlwZT4gRE9N
TWltZVR5cGVBcnJheTo6bmFtZWRJdGVtKGNvbnN0IEF0b21TdHJpbmcmIHByb3BlcnR5TmFtZSkK
ICAgICByZXR1cm4gbnVsbHB0cjsKIH0KIAotVmVjdG9yPEF0b21TdHJpbmc+IERPTU1pbWVUeXBl
QXJyYXk6OnN1cHBvcnRlZFByb3BlcnR5TmFtZXMoKQorVmVjdG9yPEF0b21TdHJpbmc+IERPTU1p
bWVUeXBlQXJyYXk6OnN1cHBvcnRlZFByb3BlcnR5TmFtZXMoKSBjb25zdAogewotICAgIFZlY3Rv
cjxBdG9tU3RyaW5nPiByZXN1bHQ7Ci0gICAgcmVzdWx0LnJlc2VydmVJbml0aWFsQ2FwYWNpdHko
bV90eXBlcy5zaXplKCkpOwotICAgIGZvciAoYXV0byYgdHlwZSA6IG1fdHlwZXMpCi0gICAgICAg
IHJlc3VsdC51bmNoZWNrZWRBcHBlbmQodHlwZS0+dHlwZSgpKTsKLSAgICByZXR1cm4gcmVzdWx0
OworICAgIHJldHVybiBtX3R5cGVzLm1hcChbXShhdXRvJiB0eXBlKSAtPiBBdG9tU3RyaW5nIHsK
KyAgICAgICAgcmV0dXJuIHR5cGUtPnR5cGUoKTsKKyAgICB9KTsKIH0KIAogfSAvLyBuYW1lc3Bh
Y2UgV2ViQ29yZQpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvcGx1Z2lucy9ET01NaW1lVHlw
ZUFycmF5LmggYi9Tb3VyY2UvV2ViQ29yZS9wbHVnaW5zL0RPTU1pbWVUeXBlQXJyYXkuaAppbmRl
eCA0OWQ2YTg4ODMyZGRjZGQyOGNkOWJjN2NjMjA0YzQ0YWNhYzUyM2U2Li4xMzc2M2I1MTQzNDVi
NmI4NDhhMTk4ZGNiNjc0MTUyY2YwNzA1NmI3IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9w
bHVnaW5zL0RPTU1pbWVUeXBlQXJyYXkuaAorKysgYi9Tb3VyY2UvV2ViQ29yZS9wbHVnaW5zL0RP
TU1pbWVUeXBlQXJyYXkuaApAQCAtNDAsNyArNDAsNyBAQCBwdWJsaWM6CiAgICAgdW5zaWduZWQg
bGVuZ3RoKCkgY29uc3Q7CiAgICAgUmVmUHRyPERPTU1pbWVUeXBlPiBpdGVtKHVuc2lnbmVkIGlu
ZGV4KTsKICAgICBSZWZQdHI8RE9NTWltZVR5cGU+IG5hbWVkSXRlbShjb25zdCBBdG9tU3RyaW5n
JiBwcm9wZXJ0eU5hbWUpOwotICAgIFZlY3RvcjxBdG9tU3RyaW5nPiBzdXBwb3J0ZWRQcm9wZXJ0
eU5hbWVzKCk7CisgICAgVmVjdG9yPEF0b21TdHJpbmc+IHN1cHBvcnRlZFByb3BlcnR5TmFtZXMo
KSBjb25zdDsKIAogICAgIE5hdmlnYXRvciogbmF2aWdhdG9yKCkgeyByZXR1cm4gbV9uYXZpZ2F0
b3IuZ2V0KCk7IH0KIApkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvcGx1Z2lucy9ET01QbHVn
aW4uY3BwIGIvU291cmNlL1dlYkNvcmUvcGx1Z2lucy9ET01QbHVnaW4uY3BwCmluZGV4IDNiOGQ0
ZGY5Zjk3OTE2ZTAwYmRlZmFhOWQ2Yzk3YmM3YTA2MzhkMDkuLmMxMjljOGJjMDA2NTNkNmM3ZDRh
NWY3MmVlNzhiNWEyZjkwMDY1NjEgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL3BsdWdpbnMv
RE9NUGx1Z2luLmNwcAorKysgYi9Tb3VyY2UvV2ViQ29yZS9wbHVnaW5zL0RPTVBsdWdpbi5jcHAK
QEAgLTM1LDExICszNSw5IEBAIFJlZjxET01QbHVnaW4+IERPTVBsdWdpbjo6Y3JlYXRlKE5hdmln
YXRvciYgbmF2aWdhdG9yLCBjb25zdCBQbHVnaW5JbmZvJiBpbmZvKQogCiBzdGF0aWMgVmVjdG9y
PFJlZjxET01NaW1lVHlwZT4+IG1ha2VNaW1lVHlwZXMoTmF2aWdhdG9yJiBuYXZpZ2F0b3IsIGNv
bnN0IFBsdWdpbkluZm8mIGluZm8sIERPTVBsdWdpbiYgc2VsZikKIHsKLSAgICBWZWN0b3I8UmVm
PERPTU1pbWVUeXBlPj4gdHlwZXM7Ci0gICAgdHlwZXMucmVzZXJ2ZUluaXRpYWxDYXBhY2l0eShp
bmZvLm1pbWVzLnNpemUoKSk7Ci0gICAgZm9yIChhdXRvJiB0eXBlIDogaW5mby5taW1lcykKLSAg
ICAgICAgdHlwZXMudW5jaGVja2VkQXBwZW5kKERPTU1pbWVUeXBlOjpjcmVhdGUobmF2aWdhdG9y
LCB0eXBlLCBzZWxmKSk7Ci0KKyAgICBhdXRvIHR5cGVzID0gaW5mby5taW1lcy5tYXAoWyZdKGF1
dG8mIHR5cGUpIHsKKyAgICAgICAgcmV0dXJuIERPTU1pbWVUeXBlOjpjcmVhdGUobmF2aWdhdG9y
LCB0eXBlLCBzZWxmKTsKKyAgICB9KTsKICAgICBzdGQ6OnNvcnQodHlwZXMuYmVnaW4oKSwgdHlw
ZXMuZW5kKCksIFtdKGNvbnN0IFJlZjxET01NaW1lVHlwZT4mIGEsIGNvbnN0IFJlZjxET01NaW1l
VHlwZT4mIGIpIHsKICAgICAgICAgcmV0dXJuIGNvZGVQb2ludENvbXBhcmVMZXNzVGhhbihhLT50
eXBlKCksIGItPnR5cGUoKSk7CiAgICAgfSk7CkBAIC05MiwxMyArOTAsMTEgQEAgUmVmUHRyPERP
TU1pbWVUeXBlPiBET01QbHVnaW46Om5hbWVkSXRlbShjb25zdCBBdG9tU3RyaW5nJiBwcm9wZXJ0
eU5hbWUpCiAgICAgcmV0dXJuIG51bGxwdHI7CiB9CiAKLVZlY3RvcjxBdG9tU3RyaW5nPiBET01Q
bHVnaW46OnN1cHBvcnRlZFByb3BlcnR5TmFtZXMoKQorVmVjdG9yPEF0b21TdHJpbmc+IERPTVBs
dWdpbjo6c3VwcG9ydGVkUHJvcGVydHlOYW1lcygpIGNvbnN0CiB7Ci0gICAgVmVjdG9yPEF0b21T
dHJpbmc+IHJlc3VsdDsKLSAgICByZXN1bHQucmVzZXJ2ZUluaXRpYWxDYXBhY2l0eShtX21pbWVU
eXBlcy5zaXplKCkpOwotICAgIGZvciAoYXV0byYgdHlwZSA6IG1fbWltZVR5cGVzKQotICAgICAg
ICByZXN1bHQudW5jaGVja2VkQXBwZW5kKHR5cGUtPnR5cGUoKSk7Ci0gICAgcmV0dXJuIHJlc3Vs
dDsKKyAgICByZXR1cm4gbV9taW1lVHlwZXMubWFwKFtdKGF1dG8mIHR5cGUpIC0+IEF0b21TdHJp
bmcgeworICAgICAgICByZXR1cm4gdHlwZS0+dHlwZSgpOworICAgIH0pOwogfQogCiB9IC8vIG5h
bWVzcGFjZSBXZWJDb3JlCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9wbHVnaW5zL0RPTVBs
dWdpbi5oIGIvU291cmNlL1dlYkNvcmUvcGx1Z2lucy9ET01QbHVnaW4uaAppbmRleCBhMjMwZTA0
Yzk0MzlkZDkyM2ZkOTVhOWVlYzBlZWJhYjNkMDYzYTYzLi43OTkzZDBiYjRlOTgwYTUzZDZmYWMy
MzQ3ODExOGIwOTYzYzBjZDA3IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9wbHVnaW5zL0RP
TVBsdWdpbi5oCisrKyBiL1NvdXJjZS9XZWJDb3JlL3BsdWdpbnMvRE9NUGx1Z2luLmgKQEAgLTQ2
LDcgKzQ2LDcgQEAgcHVibGljOgogCiAgICAgUmVmUHRyPERPTU1pbWVUeXBlPiBpdGVtKHVuc2ln
bmVkIGluZGV4KTsKICAgICBSZWZQdHI8RE9NTWltZVR5cGU+IG5hbWVkSXRlbShjb25zdCBBdG9t
U3RyaW5nJiBwcm9wZXJ0eU5hbWUpOwotICAgIFZlY3RvcjxBdG9tU3RyaW5nPiBzdXBwb3J0ZWRQ
cm9wZXJ0eU5hbWVzKCk7CisgICAgVmVjdG9yPEF0b21TdHJpbmc+IHN1cHBvcnRlZFByb3BlcnR5
TmFtZXMoKSBjb25zdDsKIAogICAgIGNvbnN0IFZlY3RvcjxSZWY8RE9NTWltZVR5cGU+PiYgbWlt
ZVR5cGVzKCkgY29uc3QgeyByZXR1cm4gbV9taW1lVHlwZXM7IH0KIApkaWZmIC0tZ2l0IGEvU291
cmNlL1dlYkNvcmUvcGx1Z2lucy9ET01QbHVnaW5BcnJheS5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9w
bHVnaW5zL0RPTVBsdWdpbkFycmF5LmNwcAppbmRleCAzZThlNGQ3ZWEyYjQ5MWFkNzRhNmRlMmE0
OTc4NjdkMWUwZmNmY2JmLi45MGViZGExMTdmMTRmMTE0MWYxZTgzNTA2ZjFiZTVlMGE5OTA4ODAy
IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9wbHVnaW5zL0RPTVBsdWdpbkFycmF5LmNwcAor
KysgYi9Tb3VyY2UvV2ViQ29yZS9wbHVnaW5zL0RPTVBsdWdpbkFycmF5LmNwcApAQCAtNzEsMTMg
KzcxLDExIEBAIFJlZlB0cjxET01QbHVnaW4+IERPTVBsdWdpbkFycmF5OjpuYW1lZEl0ZW0oY29u
c3QgQXRvbVN0cmluZyYgcHJvcGVydHlOYW1lKQogICAgIHJldHVybiBudWxscHRyOwogfQogCi1W
ZWN0b3I8QXRvbVN0cmluZz4gRE9NUGx1Z2luQXJyYXk6OnN1cHBvcnRlZFByb3BlcnR5TmFtZXMo
KQorVmVjdG9yPEF0b21TdHJpbmc+IERPTVBsdWdpbkFycmF5OjpzdXBwb3J0ZWRQcm9wZXJ0eU5h
bWVzKCkgY29uc3QKIHsKLSAgICBWZWN0b3I8QXRvbVN0cmluZz4gcmVzdWx0OwotICAgIHJlc3Vs
dC5yZXNlcnZlSW5pdGlhbENhcGFjaXR5KG1fcHVibGljbHlWaXNpYmxlUGx1Z2lucy5zaXplKCkp
OwotICAgIGZvciAoYXV0byYgcGx1Z2luIDogbV9wdWJsaWNseVZpc2libGVQbHVnaW5zKQotICAg
ICAgICByZXN1bHQudW5jaGVja2VkQXBwZW5kKHBsdWdpbi0+bmFtZSgpKTsKLSAgICByZXR1cm4g
cmVzdWx0OworICAgIHJldHVybiBtX3B1YmxpY2x5VmlzaWJsZVBsdWdpbnMubWFwKFtdKGF1dG8m
IHBsdWdpbikgLT4gQXRvbVN0cmluZyB7CisgICAgICAgIHJldHVybiBwbHVnaW4tPm5hbWUoKTsK
KyAgICB9KTsKIH0KIAogdm9pZCBET01QbHVnaW5BcnJheTo6cmVmcmVzaChib29sIHJlbG9hZFBh
Z2VzKQpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvcGx1Z2lucy9ET01QbHVnaW5BcnJheS5o
IGIvU291cmNlL1dlYkNvcmUvcGx1Z2lucy9ET01QbHVnaW5BcnJheS5oCmluZGV4IGQ2NjQ0ZDE5
YjA1MzJhM2E2NzE1Mjc2NDY2MmYyMzgwNDVlYzBiYmMuLjI0ZjkzMmM3ZWZhNzA0ZDE1ZDljMzli
Yjk0NjBlZWI2OWVjMTIwOTggMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL3BsdWdpbnMvRE9N
UGx1Z2luQXJyYXkuaAorKysgYi9Tb3VyY2UvV2ViQ29yZS9wbHVnaW5zL0RPTVBsdWdpbkFycmF5
LmgKQEAgLTQxLDcgKzQxLDcgQEAgcHVibGljOgogICAgIHVuc2lnbmVkIGxlbmd0aCgpIGNvbnN0
OwogICAgIFJlZlB0cjxET01QbHVnaW4+IGl0ZW0odW5zaWduZWQgaW5kZXgpOwogICAgIFJlZlB0
cjxET01QbHVnaW4+IG5hbWVkSXRlbShjb25zdCBBdG9tU3RyaW5nJiBwcm9wZXJ0eU5hbWUpOwot
ICAgIFZlY3RvcjxBdG9tU3RyaW5nPiBzdXBwb3J0ZWRQcm9wZXJ0eU5hbWVzKCk7CisgICAgVmVj
dG9yPEF0b21TdHJpbmc+IHN1cHBvcnRlZFByb3BlcnR5TmFtZXMoKSBjb25zdDsKIAogICAgIHZv
aWQgcmVmcmVzaChib29sIHJlbG9hZFBhZ2VzKTsKIApkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNv
cmUvcmVuZGVyaW5nL0xheWVyQW5jZXN0b3JDbGlwcGluZ1N0YWNrLmNwcCBiL1NvdXJjZS9XZWJD
b3JlL3JlbmRlcmluZy9MYXllckFuY2VzdG9yQ2xpcHBpbmdTdGFjay5jcHAKaW5kZXggZjJjYzAz
OTBmYzUwMjVjNDVlNWNkYWVmMTcxMjM1YmJjMDkwZjAzOS4uNzk3MGFmODI1NzEyNDI4ZmM4MGNl
NjFjNGE5MmIyMGQyYjFjZDY0OSAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvcmVuZGVyaW5n
L0xheWVyQW5jZXN0b3JDbGlwcGluZ1N0YWNrLmNwcAorKysgYi9Tb3VyY2UvV2ViQ29yZS9yZW5k
ZXJpbmcvTGF5ZXJBbmNlc3RvckNsaXBwaW5nU3RhY2suY3BwCkBAIC0zNCwxMCArMzQsOCBAQAog
bmFtZXNwYWNlIFdlYkNvcmUgewogCiBMYXllckFuY2VzdG9yQ2xpcHBpbmdTdGFjazo6TGF5ZXJB
bmNlc3RvckNsaXBwaW5nU3RhY2soVmVjdG9yPENvbXBvc2l0ZWRDbGlwRGF0YT4mJiBjbGlwRGF0
YVN0YWNrKQorICAgIDogbV9zdGFjayhXVEY6Om1hcChXVEZNb3ZlKGNsaXBEYXRhU3RhY2spLCBb
XShhdXRvJiYgY2xpcERhdGFFbnRyeSkgeyByZXR1cm4gQ2xpcHBpbmdTdGFja0VudHJ5IHsgV1RG
TW92ZShjbGlwRGF0YUVudHJ5KSwgMCwgbnVsbHB0ciB9OyB9KSkKIHsKLSAgICBtX3N0YWNrLnJl
c2VydmVJbml0aWFsQ2FwYWNpdHkoY2xpcERhdGFTdGFjay5zaXplKCkpOwotICAgIGZvciAoYXV0
byYgY2xpcERhdGFFbnRyeSA6IGNsaXBEYXRhU3RhY2spCi0gICAgICAgIG1fc3RhY2sudW5jaGVj
a2VkQXBwZW5kKHsgV1RGTW92ZShjbGlwRGF0YUVudHJ5KSwgMCwgbnVsbHB0ciB9KTsKIH0KIAog
Ym9vbCBMYXllckFuY2VzdG9yQ2xpcHBpbmdTdGFjazo6ZXF1YWxUb0NsaXBEYXRhKGNvbnN0IFZl
Y3RvcjxDb21wb3NpdGVkQ2xpcERhdGE+JiBjbGlwRGF0YVN0YWNrKSBjb25zdApAQCAtMTY1LDEz
ICsxNjMsOSBAQCBib29sIExheWVyQW5jZXN0b3JDbGlwcGluZ1N0YWNrOjp1cGRhdGVXaXRoQ2xp
cERhdGEoU2Nyb2xsaW5nQ29vcmRpbmF0b3IqIHNjcm9sbAogCiBWZWN0b3I8Q29tcG9zaXRlZENs
aXBEYXRhPiBMYXllckFuY2VzdG9yQ2xpcHBpbmdTdGFjazo6Y29tcG9zaXRlZENsaXBEYXRhKCkg
Y29uc3QKIHsKLSAgICBWZWN0b3I8Q29tcG9zaXRlZENsaXBEYXRhPiBjbGlwRGF0YTsKLSAgICBj
bGlwRGF0YS5yZXNlcnZlSW5pdGlhbENhcGFjaXR5KG1fc3RhY2suc2l6ZSgpKTsKLQotICAgIGZv
ciAoY29uc3QgYXV0byYgZW50cnkgOiBtX3N0YWNrKQotICAgICAgICBjbGlwRGF0YS51bmNoZWNr
ZWRBcHBlbmQoZW50cnkuY2xpcERhdGEpOwotCi0gICAgcmV0dXJuIGNsaXBEYXRhOworICAgIHJl
dHVybiBtX3N0YWNrLm1hcChbXShhdXRvJiBlbnRyeSkgeworICAgICAgICByZXR1cm4gZW50cnku
Y2xpcERhdGE7CisgICAgfSk7CiB9CiAKIHN0YXRpYyBUZXh0U3RyZWFtJiBvcGVyYXRvcjw8KFRl
eHRTdHJlYW0mIHRzLCBjb25zdCBMYXllckFuY2VzdG9yQ2xpcHBpbmdTdGFjazo6Q2xpcHBpbmdT
dGFja0VudHJ5JiBlbnRyeSkKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9S
ZW5kZXJCb3hNb2RlbE9iamVjdC5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvUmVuZGVy
Qm94TW9kZWxPYmplY3QuY3BwCmluZGV4IGJkYzFlNjJhN2E1YTA2NTQ1NWY1MWMzN2U4MzU3MDll
Y2YyMjZkZGIuLjg1MzBlMzM1NWYyZDZiOGQ3ZmZiNmVkZjgzZDYwOGJjYTRiOWY1NTUgMTAwNjQ0
Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9SZW5kZXJCb3hNb2RlbE9iamVjdC5jcHAK
KysrIGIvU291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL1JlbmRlckJveE1vZGVsT2JqZWN0LmNwcApA
QCAtMjIxMywxMyArMjIxMyw5IEBAIHZvaWQgUmVuZGVyQm94TW9kZWxPYmplY3Q6OmNsaXBCb3Jk
ZXJTaWRlUG9seWdvbihHcmFwaGljc0NvbnRleHQmIGdyYXBoaWNzQ29udGV4CiAgICAgLy8gICAg
ICAgICAwLS0tLS0tLS0tLS0tLS0tLTMKICAgICAvLwogICAgIFZlY3RvcjxGbG9hdFBvaW50PiBx
dWFkOwotICAgIHF1YWQucmVzZXJ2ZUluaXRpYWxDYXBhY2l0eSg0KTsKICAgICBzd2l0Y2ggKHNp
ZGUpIHsKICAgICBjYXNlIEJveFNpZGU6OlRvcDoKLSAgICAgICAgcXVhZC51bmNoZWNrZWRBcHBl
bmQob3V0ZXJSZWN0Lm1pblhNaW5ZQ29ybmVyKCkpOwotICAgICAgICBxdWFkLnVuY2hlY2tlZEFw
cGVuZChpbm5lclJlY3QubWluWE1pbllDb3JuZXIoKSk7Ci0gICAgICAgIHF1YWQudW5jaGVja2Vk
QXBwZW5kKGlubmVyUmVjdC5tYXhYTWluWUNvcm5lcigpKTsKLSAgICAgICAgcXVhZC51bmNoZWNr
ZWRBcHBlbmQob3V0ZXJSZWN0Lm1heFhNaW5ZQ29ybmVyKCkpOworICAgICAgICBxdWFkID0geyBv
dXRlclJlY3QubWluWE1pbllDb3JuZXIoKSwgaW5uZXJSZWN0Lm1pblhNaW5ZQ29ybmVyKCksIGlu
bmVyUmVjdC5tYXhYTWluWUNvcm5lcigpLCBvdXRlclJlY3QubWF4WE1pbllDb3JuZXIoKSB9Owog
CiAgICAgICAgIGlmICghaW5uZXJCb3JkZXIucmFkaWkoKS50b3BMZWZ0KCkuaXNaZXJvKCkpCiAg
ICAgICAgICAgICBmaW5kSW50ZXJzZWN0aW9uKG91dGVyUmVjdC5taW5YTWluWUNvcm5lcigpLCBp
bm5lclJlY3QubWluWE1pbllDb3JuZXIoKSwgaW5uZXJSZWN0Lm1pblhNYXhZQ29ybmVyKCksIGlu
bmVyUmVjdC5tYXhYTWluWUNvcm5lcigpLCBxdWFkWzFdKTsKQEAgLTIyMjksMTAgKzIyMjUsNyBA
QCB2b2lkIFJlbmRlckJveE1vZGVsT2JqZWN0OjpjbGlwQm9yZGVyU2lkZVBvbHlnb24oR3JhcGhp
Y3NDb250ZXh0JiBncmFwaGljc0NvbnRleAogICAgICAgICBicmVhazsKIAogICAgIGNhc2UgQm94
U2lkZTo6TGVmdDoKLSAgICAgICAgcXVhZC51bmNoZWNrZWRBcHBlbmQob3V0ZXJSZWN0Lm1pblhN
aW5ZQ29ybmVyKCkpOwotICAgICAgICBxdWFkLnVuY2hlY2tlZEFwcGVuZChpbm5lclJlY3QubWlu
WE1pbllDb3JuZXIoKSk7Ci0gICAgICAgIHF1YWQudW5jaGVja2VkQXBwZW5kKGlubmVyUmVjdC5t
aW5YTWF4WUNvcm5lcigpKTsKLSAgICAgICAgcXVhZC51bmNoZWNrZWRBcHBlbmQob3V0ZXJSZWN0
Lm1pblhNYXhZQ29ybmVyKCkpOworICAgICAgICBxdWFkID0geyBvdXRlclJlY3QubWluWE1pbllD
b3JuZXIoKSwgaW5uZXJSZWN0Lm1pblhNaW5ZQ29ybmVyKCksIGlubmVyUmVjdC5taW5YTWF4WUNv
cm5lcigpLCBvdXRlclJlY3QubWluWE1heFlDb3JuZXIoKSB9OwogCiAgICAgICAgIGlmICghaW5u
ZXJCb3JkZXIucmFkaWkoKS50b3BMZWZ0KCkuaXNaZXJvKCkpCiAgICAgICAgICAgICBmaW5kSW50
ZXJzZWN0aW9uKG91dGVyUmVjdC5taW5YTWluWUNvcm5lcigpLCBpbm5lclJlY3QubWluWE1pbllD
b3JuZXIoKSwgaW5uZXJSZWN0Lm1pblhNYXhZQ29ybmVyKCksIGlubmVyUmVjdC5tYXhYTWluWUNv
cm5lcigpLCBxdWFkWzFdKTsKQEAgLTIyNDIsMTAgKzIyMzUsNyBAQCB2b2lkIFJlbmRlckJveE1v
ZGVsT2JqZWN0OjpjbGlwQm9yZGVyU2lkZVBvbHlnb24oR3JhcGhpY3NDb250ZXh0JiBncmFwaGlj
c0NvbnRleAogICAgICAgICBicmVhazsKIAogICAgIGNhc2UgQm94U2lkZTo6Qm90dG9tOgotICAg
ICAgICBxdWFkLnVuY2hlY2tlZEFwcGVuZChvdXRlclJlY3QubWluWE1heFlDb3JuZXIoKSk7Ci0g
ICAgICAgIHF1YWQudW5jaGVja2VkQXBwZW5kKGlubmVyUmVjdC5taW5YTWF4WUNvcm5lcigpKTsK
LSAgICAgICAgcXVhZC51bmNoZWNrZWRBcHBlbmQoaW5uZXJSZWN0Lm1heFhNYXhZQ29ybmVyKCkp
OwotICAgICAgICBxdWFkLnVuY2hlY2tlZEFwcGVuZChvdXRlclJlY3QubWF4WE1heFlDb3JuZXIo
KSk7CisgICAgICAgIHF1YWQgPSB7IG91dGVyUmVjdC5taW5YTWF4WUNvcm5lcigpLCBpbm5lclJl
Y3QubWluWE1heFlDb3JuZXIoKSwgaW5uZXJSZWN0Lm1heFhNYXhZQ29ybmVyKCksIG91dGVyUmVj
dC5tYXhYTWF4WUNvcm5lcigpIH07CiAKICAgICAgICAgaWYgKCFpbm5lckJvcmRlci5yYWRpaSgp
LmJvdHRvbUxlZnQoKS5pc1plcm8oKSkKICAgICAgICAgICAgIGZpbmRJbnRlcnNlY3Rpb24ob3V0
ZXJSZWN0Lm1pblhNYXhZQ29ybmVyKCksIGlubmVyUmVjdC5taW5YTWF4WUNvcm5lcigpLCBpbm5l
clJlY3QubWluWE1pbllDb3JuZXIoKSwgaW5uZXJSZWN0Lm1heFhNYXhZQ29ybmVyKCksIHF1YWRb
MV0pOwpAQCAtMjI1NSwxMCArMjI0NSw3IEBAIHZvaWQgUmVuZGVyQm94TW9kZWxPYmplY3Q6OmNs
aXBCb3JkZXJTaWRlUG9seWdvbihHcmFwaGljc0NvbnRleHQmIGdyYXBoaWNzQ29udGV4CiAgICAg
ICAgIGJyZWFrOwogCiAgICAgY2FzZSBCb3hTaWRlOjpSaWdodDoKLSAgICAgICAgcXVhZC51bmNo
ZWNrZWRBcHBlbmQob3V0ZXJSZWN0Lm1heFhNaW5ZQ29ybmVyKCkpOwotICAgICAgICBxdWFkLnVu
Y2hlY2tlZEFwcGVuZChpbm5lclJlY3QubWF4WE1pbllDb3JuZXIoKSk7Ci0gICAgICAgIHF1YWQu
dW5jaGVja2VkQXBwZW5kKGlubmVyUmVjdC5tYXhYTWF4WUNvcm5lcigpKTsKLSAgICAgICAgcXVh
ZC51bmNoZWNrZWRBcHBlbmQob3V0ZXJSZWN0Lm1heFhNYXhZQ29ybmVyKCkpOworICAgICAgICBx
dWFkID0geyBvdXRlclJlY3QubWF4WE1pbllDb3JuZXIoKSwgaW5uZXJSZWN0Lm1heFhNaW5ZQ29y
bmVyKCksIGlubmVyUmVjdC5tYXhYTWF4WUNvcm5lcigpLCBvdXRlclJlY3QubWF4WE1heFlDb3Ju
ZXIoKSB9OwogCiAgICAgICAgIGlmICghaW5uZXJCb3JkZXIucmFkaWkoKS50b3BSaWdodCgpLmlz
WmVybygpKQogICAgICAgICAgICAgZmluZEludGVyc2VjdGlvbihvdXRlclJlY3QubWF4WE1pbllD
b3JuZXIoKSwgaW5uZXJSZWN0Lm1heFhNaW5ZQ29ybmVyKCksIGlubmVyUmVjdC5taW5YTWluWUNv
cm5lcigpLCBpbm5lclJlY3QubWF4WE1heFlDb3JuZXIoKSwgcXVhZFsxXSk7CmRpZmYgLS1naXQg
YS9Tb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvUmVuZGVyRWxlbWVudC5jcHAgYi9Tb3VyY2UvV2Vi
Q29yZS9yZW5kZXJpbmcvUmVuZGVyRWxlbWVudC5jcHAKaW5kZXggNGU3NTlkN2YyNTBhZjk4YTQ4
MDY0ZTQ2Njc3NzNlNzY4MzVmYjlhMS4uZmJiOGI4NmUzZmUzNmM1M2Q5NmIyMzRmYzFlMTBjNDU4
ZTk4M2E1NSAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL1JlbmRlckVsZW1l
bnQuY3BwCisrKyBiL1NvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9SZW5kZXJFbGVtZW50LmNwcApA
QCAtMTk2OCwzMSArMTk2OCwzOCBAQCB2b2lkIFJlbmRlckVsZW1lbnQ6OmRyYXdMaW5lRm9yQm94
U2lkZShHcmFwaGljc0NvbnRleHQmIGdyYXBoaWNzQ29udGV4dCwgY29uc3QgRgogICAgICAgICB5
MiA9IHJvdW5kVG9EZXZpY2VQaXhlbCh5MiwgZGV2aWNlU2NhbGVGYWN0b3IpOwogCiAgICAgICAg
IFZlY3RvcjxGbG9hdFBvaW50PiBxdWFkOwotICAgICAgICBxdWFkLnJlc2VydmVJbml0aWFsQ2Fw
YWNpdHkoNCk7CiAgICAgICAgIHN3aXRjaCAoc2lkZSkgewogICAgICAgICBjYXNlIEJveFNpZGU6
OlRvcDoKLSAgICAgICAgICAgIHF1YWQudW5jaGVja2VkQXBwZW5kKHsgeDEgKyBzdGQ6Om1heDxm
bG9hdD4oLWFkamFjZW50V2lkdGgxLCAwKSwgeTEgfSk7Ci0gICAgICAgICAgICBxdWFkLnVuY2hl
Y2tlZEFwcGVuZCh7IHgxICsgc3RkOjptYXg8ZmxvYXQ+KCBhZGphY2VudFdpZHRoMSwgMCksIHky
IH0pOwotICAgICAgICAgICAgcXVhZC51bmNoZWNrZWRBcHBlbmQoeyB4MiAtIHN0ZDo6bWF4PGZs
b2F0PiggYWRqYWNlbnRXaWR0aDIsIDApLCB5MiB9KTsKLSAgICAgICAgICAgIHF1YWQudW5jaGVj
a2VkQXBwZW5kKHsgeDIgLSBzdGQ6Om1heDxmbG9hdD4oLWFkamFjZW50V2lkdGgyLCAwKSwgeTEg
fSk7CisgICAgICAgICAgICBxdWFkID0geworICAgICAgICAgICAgICAgIHsgeDEgKyBzdGQ6Om1h
eDxmbG9hdD4oLWFkamFjZW50V2lkdGgxLCAwKSwgeTEgfSwKKyAgICAgICAgICAgICAgICB7IHgx
ICsgc3RkOjptYXg8ZmxvYXQ+KGFkamFjZW50V2lkdGgxLCAwKSwgeTIgfSwKKyAgICAgICAgICAg
ICAgICB7IHgyIC0gc3RkOjptYXg8ZmxvYXQ+KGFkamFjZW50V2lkdGgyLCAwKSwgeTIgfSwKKyAg
ICAgICAgICAgICAgICB7IHgyIC0gc3RkOjptYXg8ZmxvYXQ+KC1hZGphY2VudFdpZHRoMiwgMCks
IHkxIH0KKyAgICAgICAgICAgIH07CiAgICAgICAgICAgICBicmVhazsKICAgICAgICAgY2FzZSBC
b3hTaWRlOjpCb3R0b206Ci0gICAgICAgICAgICBxdWFkLnVuY2hlY2tlZEFwcGVuZCh7IHgxICsg
c3RkOjptYXg8ZmxvYXQ+KCBhZGphY2VudFdpZHRoMSwgMCksIHkxIH0pOwotICAgICAgICAgICAg
cXVhZC51bmNoZWNrZWRBcHBlbmQoeyB4MSArIHN0ZDo6bWF4PGZsb2F0PigtYWRqYWNlbnRXaWR0
aDEsIDApLCB5MiB9KTsKLSAgICAgICAgICAgIHF1YWQudW5jaGVja2VkQXBwZW5kKHsgeDIgLSBz
dGQ6Om1heDxmbG9hdD4oLWFkamFjZW50V2lkdGgyLCAwKSwgeTIgfSk7Ci0gICAgICAgICAgICBx
dWFkLnVuY2hlY2tlZEFwcGVuZCh7IHgyIC0gc3RkOjptYXg8ZmxvYXQ+KCBhZGphY2VudFdpZHRo
MiwgMCksIHkxIH0pOworICAgICAgICAgICAgcXVhZCA9IHsKKyAgICAgICAgICAgICAgICB7IHgx
ICsgc3RkOjptYXg8ZmxvYXQ+KGFkamFjZW50V2lkdGgxLCAwKSwgeTEgfSwKKyAgICAgICAgICAg
ICAgICB7IHgxICsgc3RkOjptYXg8ZmxvYXQ+KC1hZGphY2VudFdpZHRoMSwgMCksIHkyIH0sCisg
ICAgICAgICAgICAgICAgeyB4MiAtIHN0ZDo6bWF4PGZsb2F0PigtYWRqYWNlbnRXaWR0aDIsIDAp
LCB5MiB9LAorICAgICAgICAgICAgICAgIHsgeDIgLSBzdGQ6Om1heDxmbG9hdD4oYWRqYWNlbnRX
aWR0aDIsIDApLCB5MSB9CisgICAgICAgICAgICB9OwogICAgICAgICAgICAgYnJlYWs7CiAgICAg
ICAgIGNhc2UgQm94U2lkZTo6TGVmdDoKLSAgICAgICAgICAgIHF1YWQudW5jaGVja2VkQXBwZW5k
KHsgeDEsIHkxICsgc3RkOjptYXg8ZmxvYXQ+KC1hZGphY2VudFdpZHRoMSwgMCkgfSk7Ci0gICAg
ICAgICAgICBxdWFkLnVuY2hlY2tlZEFwcGVuZCh7IHgxLCB5MiAtIHN0ZDo6bWF4PGZsb2F0Pigt
YWRqYWNlbnRXaWR0aDIsIDApIH0pOwotICAgICAgICAgICAgcXVhZC51bmNoZWNrZWRBcHBlbmQo
eyB4MiwgeTIgLSBzdGQ6Om1heDxmbG9hdD4oIGFkamFjZW50V2lkdGgyLCAwKSB9KTsKLSAgICAg
ICAgICAgIHF1YWQudW5jaGVja2VkQXBwZW5kKHsgeDIsIHkxICsgc3RkOjptYXg8ZmxvYXQ+KCBh
ZGphY2VudFdpZHRoMSwgMCkgfSk7CisgICAgICAgICAgICBxdWFkID0geworICAgICAgICAgICAg
ICAgIHsgeDEsIHkxICsgc3RkOjptYXg8ZmxvYXQ+KC1hZGphY2VudFdpZHRoMSwgMCkgfSwKKyAg
ICAgICAgICAgICAgICB7IHgxLCB5MiAtIHN0ZDo6bWF4PGZsb2F0PigtYWRqYWNlbnRXaWR0aDIs
IDApIH0sCisgICAgICAgICAgICAgICAgeyB4MiwgeTIgLSBzdGQ6Om1heDxmbG9hdD4oYWRqYWNl
bnRXaWR0aDIsIDApIH0sCisgICAgICAgICAgICAgICAgeyB4MiwgeTEgKyBzdGQ6Om1heDxmbG9h
dD4oYWRqYWNlbnRXaWR0aDEsIDApIH0KKyAgICAgICAgICAgIH07CiAgICAgICAgICAgICBicmVh
azsKICAgICAgICAgY2FzZSBCb3hTaWRlOjpSaWdodDoKLSAgICAgICAgICAgIHF1YWQudW5jaGVj
a2VkQXBwZW5kKHsgeDEsIHkxICsgc3RkOjptYXg8ZmxvYXQ+KCBhZGphY2VudFdpZHRoMSwgMCkg
fSk7Ci0gICAgICAgICAgICBxdWFkLnVuY2hlY2tlZEFwcGVuZCh7IHgxLCB5MiAtIHN0ZDo6bWF4
PGZsb2F0PiggYWRqYWNlbnRXaWR0aDIsIDApIH0pOwotICAgICAgICAgICAgcXVhZC51bmNoZWNr
ZWRBcHBlbmQoeyB4MiwgeTIgLSBzdGQ6Om1heDxmbG9hdD4oLWFkamFjZW50V2lkdGgyLCAwKSB9
KTsKLSAgICAgICAgICAgIHF1YWQudW5jaGVja2VkQXBwZW5kKHsgeDIsIHkxICsgc3RkOjptYXg8
ZmxvYXQ+KC1hZGphY2VudFdpZHRoMSwgMCkgfSk7CisgICAgICAgICAgICBxdWFkID0geworICAg
ICAgICAgICAgICAgIHsgeDEsIHkxICsgc3RkOjptYXg8ZmxvYXQ+KGFkamFjZW50V2lkdGgxLCAw
KSB9LAorICAgICAgICAgICAgICAgIHsgeDEsIHkyIC0gc3RkOjptYXg8ZmxvYXQ+KGFkamFjZW50
V2lkdGgyLCAwKSB9LAorICAgICAgICAgICAgICAgIHsgeDIsIHkyIC0gc3RkOjptYXg8ZmxvYXQ+
KC1hZGphY2VudFdpZHRoMiwgMCkgfSwKKyAgICAgICAgICAgICAgICB7IHgyLCB5MSArIHN0ZDo6
bWF4PGZsb2F0PigtYWRqYWNlbnRXaWR0aDEsIDApIH0KKyAgICAgICAgICAgIH07CiAgICAgICAg
ICAgICBicmVhazsKICAgICAgICAgfQogCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9yZW5k
ZXJpbmcvUmVuZGVyR3JpZC5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvUmVuZGVyR3Jp
ZC5jcHAKaW5kZXggN2ZmYjYyMzc0OGYwMGY2NmZiN2JlODVmYjllOTUzM2U1NzQxMWVmMS4uYmVi
MWM5M2ViYTgzNWIzYjU3YzkxNDZmMGUwNzY0OTYxYzAxN2Y1YiAxMDA2NDQKLS0tIGEvU291cmNl
L1dlYkNvcmUvcmVuZGVyaW5nL1JlbmRlckdyaWQuY3BwCisrKyBiL1NvdXJjZS9XZWJDb3JlL3Jl
bmRlcmluZy9SZW5kZXJHcmlkLmNwcApAQCAtOTIxLDEwICs5MjEsMTAgQEAgVmVjdG9yPExheW91
dFVuaXQ+IFJlbmRlckdyaWQ6OnRyYWNrU2l6ZXNGb3JDb21wdXRlZFN0eWxlKEdyaWRUcmFja1Np
emluZ0RpcmVjdGkKICAgICBBU1NFUlQoIW1fZ3JpZC5uZWVkc0l0ZW1zUGxhY2VtZW50KCkpOwog
ICAgIGJvb2wgaGFzQ29sbGFwc2VkVHJhY2tzID0gbV9ncmlkLmhhc0F1dG9SZXBlYXRFbXB0eVRy
YWNrcyhkaXJlY3Rpb24pOwogICAgIExheW91dFVuaXQgZ2FwID0gIWhhc0NvbGxhcHNlZFRyYWNr
cyA/IGdyaWRHYXAoZGlyZWN0aW9uKSA6IDBfbHU7Ci0gICAgdHJhY2tzLnJlc2VydmVDYXBhY2l0
eShudW1Qb3NpdGlvbnMgLSAxKTsKKyAgICB0cmFja3MucmVzZXJ2ZUluaXRpYWxDYXBhY2l0eShu
dW1Qb3NpdGlvbnMgLSAxKTsKICAgICBmb3IgKHNpemVfdCBpID0gMDsgaSA8IG51bVBvc2l0aW9u
cyAtIDI7ICsraSkKLSAgICAgICAgdHJhY2tzLmFwcGVuZChwb3NpdGlvbnNbaSArIDFdIC0gcG9z
aXRpb25zW2ldIC0gb2Zmc2V0QmV0d2VlblRyYWNrcyAtIGdhcCk7Ci0gICAgdHJhY2tzLmFwcGVu
ZChwb3NpdGlvbnNbbnVtUG9zaXRpb25zIC0gMV0gLSBwb3NpdGlvbnNbbnVtUG9zaXRpb25zIC0g
Ml0pOworICAgICAgICB0cmFja3MudW5jaGVja2VkQXBwZW5kKHBvc2l0aW9uc1tpICsgMV0gLSBw
b3NpdGlvbnNbaV0gLSBvZmZzZXRCZXR3ZWVuVHJhY2tzIC0gZ2FwKTsKKyAgICB0cmFja3MudW5j
aGVja2VkQXBwZW5kKHBvc2l0aW9uc1tudW1Qb3NpdGlvbnMgLSAxXSAtIHBvc2l0aW9uc1tudW1Q
b3NpdGlvbnMgLSAyXSk7CiAKICAgICBpZiAoIWhhc0NvbGxhcHNlZFRyYWNrcykKICAgICAgICAg
cmV0dXJuIHRyYWNrczsKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3N0eWxlL0NsYXNzQ2hh
bmdlSW52YWxpZGF0aW9uLmNwcCBiL1NvdXJjZS9XZWJDb3JlL3N0eWxlL0NsYXNzQ2hhbmdlSW52
YWxpZGF0aW9uLmNwcAppbmRleCAwMTgwMjNlNTY4MDEwNjY1ZGUyM2MxZDIzZTQwZDUzNGQwMjY1
NDI4Li5mNjc1MjA5YmE5YzMxNzY3MzM3ZDM0ZDI3ZTMzNmE5OThiMTE4ZDdiIDEwMDY0NAotLS0g
YS9Tb3VyY2UvV2ViQ29yZS9zdHlsZS9DbGFzc0NoYW5nZUludmFsaWRhdGlvbi5jcHAKKysrIGIv
U291cmNlL1dlYkNvcmUvc3R5bGUvQ2xhc3NDaGFuZ2VJbnZhbGlkYXRpb24uY3BwCkBAIC00Niw3
ICs0Niw3IEBAIHVzaW5nIENsYXNzQ2hhbmdlVmVjdG9yID0gVmVjdG9yPENsYXNzQ2hhbmdlLCA0
PjsKIHN0YXRpYyBDbGFzc0NoYW5nZVZlY3RvciBjb2xsZWN0Q2xhc3Nlcyhjb25zdCBTcGFjZVNw
bGl0U3RyaW5nJiBjbGFzc2VzLCBDbGFzc0NoYW5nZVR5cGUgY2hhbmdlVHlwZSkKIHsKICAgICBD
bGFzc0NoYW5nZVZlY3RvciByZXN1bHQ7Ci0gICAgcmVzdWx0LnJlc2VydmVDYXBhY2l0eShjbGFz
c2VzLnNpemUoKSk7CisgICAgcmVzdWx0LnJlc2VydmVJbml0aWFsQ2FwYWNpdHkoY2xhc3Nlcy5z
aXplKCkpOwogICAgIGZvciAodW5zaWduZWQgaSA9IDA7IGkgPCBjbGFzc2VzLnNpemUoKTsgKytp
KQogICAgICAgICByZXN1bHQudW5jaGVja2VkQXBwZW5kKHsgY2xhc3Nlc1tpXS5pbXBsKCksIGNo
YW5nZVR5cGUgfSk7CiAgICAgcmV0dXJuIHJlc3VsdDsKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJD
b3JlL3N0eWxlL1N0eWxlQnVpbGRlckNvbnZlcnRlci5oIGIvU291cmNlL1dlYkNvcmUvc3R5bGUv
U3R5bGVCdWlsZGVyQ29udmVydGVyLmgKaW5kZXggMTgyMzcyZjA5YjgwZjIxOGM5ZDE5NmNjNDJh
NzU5MGRmMzI3YmMzNC4uMmY4MzRkZjY3ZDgwY2IxM2RkNGM5MTU1MWJhZDEyZGIxYjIzYTI0OSAx
MDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvc3R5bGUvU3R5bGVCdWlsZGVyQ29udmVydGVyLmgK
KysrIGIvU291cmNlL1dlYkNvcmUvc3R5bGUvU3R5bGVCdWlsZGVyQ29udmVydGVyLmgKQEAgLTM1
NSwxMiArMzU1LDEyIEBAIGlubGluZSBMZW5ndGggQnVpbGRlckNvbnZlcnRlcjo6Y29udmVydFRv
MTAwUGVyY2VudE1pbnVzTGVuZ3RoKGNvbnN0IExlbmd0aCYgbGVuCiAgICAgICAgIHJldHVybiBM
ZW5ndGgoMTAwIC0gbGVuZ3RoLnZhbHVlKCksIExlbmd0aFR5cGU6OlBlcmNlbnQpOwogICAgIAog
ICAgIC8vIFR1cm4gdGhpcyBpbnRvIGEgY2FsYyBleHByZXNzaW9uOiBjYWxjKDEwMCUgLSBsZW5n
dGgpCi0gICAgVmVjdG9yPHN0ZDo6dW5pcXVlX3B0cjxDYWxjRXhwcmVzc2lvbk5vZGU+PiBsZW5n
dGhzOwotICAgIGxlbmd0aHMucmVzZXJ2ZUluaXRpYWxDYXBhY2l0eSgyKTsKLSAgICBsZW5ndGhz
LnVuY2hlY2tlZEFwcGVuZChtYWtlVW5pcXVlPENhbGNFeHByZXNzaW9uTGVuZ3RoPihMZW5ndGgo
MTAwLCBMZW5ndGhUeXBlOjpQZXJjZW50KSkpOwotICAgIGxlbmd0aHMudW5jaGVja2VkQXBwZW5k
KG1ha2VVbmlxdWU8Q2FsY0V4cHJlc3Npb25MZW5ndGg+KGxlbmd0aCkpOwotICAgIGF1dG8gb3Ag
PSBtYWtlVW5pcXVlPENhbGNFeHByZXNzaW9uT3BlcmF0aW9uPihXVEZNb3ZlKGxlbmd0aHMpLCBD
YWxjT3BlcmF0b3I6OlN1YnRyYWN0KTsKLSAgICByZXR1cm4gTGVuZ3RoKENhbGN1bGF0aW9uVmFs
dWU6OmNyZWF0ZShXVEZNb3ZlKG9wKSwgVmFsdWVSYW5nZTo6QWxsKSk7CisgICAgYXV0byBsZW5n
dGhzID0gVmVjdG9yPHN0ZDo6dW5pcXVlX3B0cjxDYWxjRXhwcmVzc2lvbk5vZGU+Pjo6ZnJvbSgK
KyAgICAgICAgbWFrZVVuaXF1ZTxDYWxjRXhwcmVzc2lvbkxlbmd0aD4oTGVuZ3RoKDEwMCwgTGVu
Z3RoVHlwZTo6UGVyY2VudCkpLAorICAgICAgICBtYWtlVW5pcXVlPENhbGNFeHByZXNzaW9uTGVu
Z3RoPihsZW5ndGgpCisgICAgKTsKKyAgICBhdXRvIG9wZXJhdGlvbiA9IG1ha2VVbmlxdWU8Q2Fs
Y0V4cHJlc3Npb25PcGVyYXRpb24+KFdURk1vdmUobGVuZ3RocyksIENhbGNPcGVyYXRvcjo6U3Vi
dHJhY3QpOworICAgIHJldHVybiBMZW5ndGgoQ2FsY3VsYXRpb25WYWx1ZTo6Y3JlYXRlKFdURk1v
dmUob3BlcmF0aW9uKSwgVmFsdWVSYW5nZTo6QWxsKSk7CiB9CiAKIGlubGluZSBMZW5ndGggQnVp
bGRlckNvbnZlcnRlcjo6Y29udmVydFBvc2l0aW9uQ29tcG9uZW50WChCdWlsZGVyU3RhdGUmIGJ1
aWxkZXJTdGF0ZSwgY29uc3QgQ1NTVmFsdWUmIHZhbHVlKQpkaWZmIC0tZ2l0IGEvU291cmNlL1dl
YkNvcmUvdGVzdGluZy9Nb2NrQ0RNRmFjdG9yeS5jcHAgYi9Tb3VyY2UvV2ViQ29yZS90ZXN0aW5n
L01vY2tDRE1GYWN0b3J5LmNwcAppbmRleCAyMDUyNzk1NTI4MzZlMDQ0ZGQ3YzJhOGVhMzIxNjgy
ZDkxNzkzOGMwLi5iMjE1ZTBkMGE4MTRlNWRhODcyZWEwNDM3MzIzOTk2MTJiOGE2YTNiIDEwMDY0
NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS90ZXN0aW5nL01vY2tDRE1GYWN0b3J5LmNwcAorKysgYi9T
b3VyY2UvV2ViQ29yZS90ZXN0aW5nL01vY2tDRE1GYWN0b3J5LmNwcApAQCAtMzQzLDEyICszNDMs
OSBAQCB2b2lkIE1vY2tDRE1JbnN0YW5jZVNlc3Npb246OnVwZGF0ZUxpY2Vuc2UoY29uc3QgU3Ry
aW5nJiBzZXNzaW9uSUQsIExpY2Vuc2VUeXBlLAogICAgIGlmIChyZXNwb25zZVZlY3Rvci5jb250
YWlucyhTdHJpbmcoImtleXMtY2hhbmdlZCJfcykpKSB7CiAgICAgICAgIGNvbnN0IGF1dG8qIGtl
eXMgPSBmYWN0b3J5LT5rZXlzRm9yU2Vzc2lvbldpdGhJRChzZXNzaW9uSUQpOwogICAgICAgICBp
ZiAoa2V5cykgewotICAgICAgICAgICAgS2V5U3RhdHVzVmVjdG9yIGtleVN0YXR1c1ZlY3RvcjsK
LSAgICAgICAgICAgIGtleVN0YXR1c1ZlY3Rvci5yZXNlcnZlSW5pdGlhbENhcGFjaXR5KGtleXMt
PnNpemUoKSk7Ci0gICAgICAgICAgICBmb3IgKGF1dG8mIGtleSA6ICprZXlzKQotICAgICAgICAg
ICAgICAgIGtleVN0YXR1c1ZlY3Rvci51bmNoZWNrZWRBcHBlbmQoeyBrZXkuY29weVJlZigpLCBL
ZXlTdGF0dXM6OlVzYWJsZSB9KTsKLQotICAgICAgICAgICAgY2hhbmdlZEtleXMgPSBXVEZNb3Zl
KGtleVN0YXR1c1ZlY3Rvcik7CisgICAgICAgICAgICBjaGFuZ2VkS2V5cyA9IGtleXMtPm1hcChb
XShhdXRvJiBrZXkpIHsKKyAgICAgICAgICAgICAgICByZXR1cm4gc3RkOjptYWtlX3BhaXIoa2V5
LmNvcHlSZWYoKSwgS2V5U3RhdHVzOjpVc2FibGUpOworICAgICAgICAgICAgfSk7CiAgICAgICAg
IH0KICAgICB9CiAKQEAgLTM5NSwxMCArMzkyLDkgQEAgdm9pZCBNb2NrQ0RNSW5zdGFuY2VTZXNz
aW9uOjpyZW1vdmVTZXNzaW9uRGF0YShjb25zdCBTdHJpbmcmIGlkLCBMaWNlbnNlVHlwZSwgUmUK
ICAgICB9CiAKICAgICBhdXRvIGtleXMgPSBmYWN0b3J5LT5yZW1vdmVLZXlzRnJvbVNlc3Npb25X
aXRoSUQoaWQpOwotICAgIEtleVN0YXR1c1ZlY3RvciBrZXlTdGF0dXNWZWN0b3I7Ci0gICAga2V5
U3RhdHVzVmVjdG9yLnJlc2VydmVJbml0aWFsQ2FwYWNpdHkoa2V5cy5zaXplKCkpOwotICAgIGZv
ciAoYXV0byYga2V5IDoga2V5cykKLSAgICAgICAga2V5U3RhdHVzVmVjdG9yLnVuY2hlY2tlZEFw
cGVuZCh7IFdURk1vdmUoa2V5KSwgS2V5U3RhdHVzOjpSZWxlYXNlZCB9KTsKKyAgICBhdXRvIGtl
eVN0YXR1c1ZlY3RvciA9IFdURjo6bWFwKFdURk1vdmUoa2V5cyksIFtdKGF1dG8mJiBrZXkpIHsK
KyAgICAgICAgcmV0dXJuIHN0ZDo6bWFrZV9wYWlyKFdURk1vdmUoa2V5KSwgS2V5U3RhdHVzOjpS
ZWxlYXNlZCk7CisgICAgfSk7CiAKICAgICBDU3RyaW5nIG1lc3NhZ2UgeyAicmVtb3ZlLW1lc3Nh
Z2UiIH07CiAgICAgY2FsbGJhY2soV1RGTW92ZShrZXlTdGF0dXNWZWN0b3IpLCBTaGFyZWRCdWZm
ZXI6OmNyZWF0ZShtZXNzYWdlLmRhdGEoKSwgbWVzc2FnZS5sZW5ndGgoKSksIFN1Y2Nlc3NWYWx1
ZTo6U3VjY2VlZGVkKTsKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3dvcmtlcnMvc2Vydmlj
ZS9zZXJ2ZXIvU1dTZXJ2ZXIuY3BwIGIvU291cmNlL1dlYkNvcmUvd29ya2Vycy9zZXJ2aWNlL3Nl
cnZlci9TV1NlcnZlci5jcHAKaW5kZXggNjU0ZjFhYzcwMWIzZjU4YTM3ZGFjMTQ3MWRiOWQ4NTJk
YjJkZGJiZS4uNDg1YTgzMDg1NWNkNGJhYzAzZWQ4M2U2NjQ3ODhiMjgxNjRmNDBkMSAxMDA2NDQK
LS0tIGEvU291cmNlL1dlYkNvcmUvd29ya2Vycy9zZXJ2aWNlL3NlcnZlci9TV1NlcnZlci5jcHAK
KysrIGIvU291cmNlL1dlYkNvcmUvd29ya2Vycy9zZXJ2aWNlL3NlcnZlci9TV1NlcnZlci5jcHAK
QEAgLTI1MiwxMSArMjUyLDkgQEAgVmVjdG9yPFNlcnZpY2VXb3JrZXJSZWdpc3RyYXRpb25EYXRh
PiBTV1NlcnZlcjo6Z2V0UmVnaXN0cmF0aW9ucyhjb25zdCBTZWN1cml0eU8KICAgICBzdGQ6OnNv
cnQobWF0Y2hpbmdSZWdpc3RyYXRpb25zLmJlZ2luKCksIG1hdGNoaW5nUmVnaXN0cmF0aW9ucy5l
bmQoKSwgW10oYXV0byYgYSwgYXV0byYgYikgewogICAgICAgICByZXR1cm4gYS0+Y3JlYXRpb25U
aW1lKCkgPCBiLT5jcmVhdGlvblRpbWUoKTsKICAgICB9KTsKLSAgICBWZWN0b3I8U2VydmljZVdv
cmtlclJlZ2lzdHJhdGlvbkRhdGE+IG1hdGNoaW5nUmVnaXN0cmF0aW9uRGF0YXM7Ci0gICAgbWF0
Y2hpbmdSZWdpc3RyYXRpb25EYXRhcy5yZXNlcnZlSW5pdGlhbENhcGFjaXR5KG1hdGNoaW5nUmVn
aXN0cmF0aW9ucy5zaXplKCkpOwotICAgIGZvciAoYXV0byogcmVnaXN0cmF0aW9uIDogbWF0Y2hp
bmdSZWdpc3RyYXRpb25zKQotICAgICAgICBtYXRjaGluZ1JlZ2lzdHJhdGlvbkRhdGFzLnVuY2hl
Y2tlZEFwcGVuZChyZWdpc3RyYXRpb24tPmRhdGEoKSk7Ci0gICAgcmV0dXJuIG1hdGNoaW5nUmVn
aXN0cmF0aW9uRGF0YXM7CisgICAgcmV0dXJuIG1hdGNoaW5nUmVnaXN0cmF0aW9ucy5tYXAoW10o
YXV0byYgcmVnaXN0cmF0aW9uKSB7CisgICAgICAgIHJldHVybiByZWdpc3RyYXRpb24tPmRhdGEo
KTsKKyAgICB9KTsKIH0KIAogdm9pZCBTV1NlcnZlcjo6Y2xlYXJBbGwoQ29tcGxldGlvbkhhbmRs
ZXI8dm9pZCgpPiYmIGNvbXBsZXRpb25IYW5kbGVyKQpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYktp
dC9OZXR3b3JrUHJvY2Vzcy9XZWJTdG9yYWdlL0xvY2FsU3RvcmFnZURhdGFiYXNlVHJhY2tlci5j
cHAgYi9Tb3VyY2UvV2ViS2l0L05ldHdvcmtQcm9jZXNzL1dlYlN0b3JhZ2UvTG9jYWxTdG9yYWdl
RGF0YWJhc2VUcmFja2VyLmNwcAppbmRleCBhYTMwYTZhMDRmYjAwMjlhOTU3NmY3N2M4YWQ4OGVk
MzZiNzc2NzFlLi4zYWFhM2M0ODBlNWY2YTk1MzBkZjhkOGNjZWJhMmU1NzllMDAyODEwIDEwMDY0
NAotLS0gYS9Tb3VyY2UvV2ViS2l0L05ldHdvcmtQcm9jZXNzL1dlYlN0b3JhZ2UvTG9jYWxTdG9y
YWdlRGF0YWJhc2VUcmFja2VyLmNwcAorKysgYi9Tb3VyY2UvV2ViS2l0L05ldHdvcmtQcm9jZXNz
L1dlYlN0b3JhZ2UvTG9jYWxTdG9yYWdlRGF0YWJhc2VUcmFja2VyLmNwcApAQCAtMTE5LDIxICsx
MTksMTQgQEAgVmVjdG9yPFNlY3VyaXR5T3JpZ2luRGF0YT4gTG9jYWxTdG9yYWdlRGF0YWJhc2VU
cmFja2VyOjpvcmlnaW5zKCkgY29uc3QKIAogVmVjdG9yPExvY2FsU3RvcmFnZURhdGFiYXNlVHJh
Y2tlcjo6T3JpZ2luRGV0YWlscz4gTG9jYWxTdG9yYWdlRGF0YWJhc2VUcmFja2VyOjpvcmlnaW5E
ZXRhaWxzQ3Jvc3NUaHJlYWRDb3B5KCkKIHsKLSAgICBWZWN0b3I8T3JpZ2luRGV0YWlscz4gcmVz
dWx0OwotICAgIGF1dG8gZGF0YWJhc2VPcmlnaW5zID0gb3JpZ2lucygpOwotICAgIHJlc3VsdC5y
ZXNlcnZlSW5pdGlhbENhcGFjaXR5KGRhdGFiYXNlT3JpZ2lucy5zaXplKCkpOwotCi0gICAgZm9y
IChjb25zdCBhdXRvJiBvcmlnaW4gOiBkYXRhYmFzZU9yaWdpbnMpIHsKLSAgICAgICAgU3RyaW5n
IHBhdGggPSBkYXRhYmFzZVBhdGgob3JpZ2luKTsKLQotICAgICAgICBPcmlnaW5EZXRhaWxzIGRl
dGFpbHM7Ci0gICAgICAgIGRldGFpbHMub3JpZ2luSWRlbnRpZmllciA9IGNyb3NzVGhyZWFkQ29w
eShvcmlnaW4uZGF0YWJhc2VJZGVudGlmaWVyKCkpOwotICAgICAgICBkZXRhaWxzLmNyZWF0aW9u
VGltZSA9IFNRTGl0ZUZpbGVTeXN0ZW06OmRhdGFiYXNlQ3JlYXRpb25UaW1lKHBhdGgpOwotICAg
ICAgICBkZXRhaWxzLm1vZGlmaWNhdGlvblRpbWUgPSBTUUxpdGVGaWxlU3lzdGVtOjpkYXRhYmFz
ZU1vZGlmaWNhdGlvblRpbWUocGF0aCk7Ci0gICAgICAgIHJlc3VsdC51bmNoZWNrZWRBcHBlbmQo
V1RGTW92ZShkZXRhaWxzKSk7Ci0gICAgfQotCi0gICAgcmV0dXJuIHJlc3VsdDsKKyAgICByZXR1
cm4gb3JpZ2lucygpLm1hcChbdGhpc10oYXV0byYgb3JpZ2luKSB7CisgICAgICAgIGF1dG8gcGF0
aCA9IGRhdGFiYXNlUGF0aChvcmlnaW4pOworICAgICAgICByZXR1cm4gT3JpZ2luRGV0YWlscyB7
CisgICAgICAgICAgICBjcm9zc1RocmVhZENvcHkob3JpZ2luLmRhdGFiYXNlSWRlbnRpZmllcigp
KSwKKyAgICAgICAgICAgIFNRTGl0ZUZpbGVTeXN0ZW06OmRhdGFiYXNlQ3JlYXRpb25UaW1lKHBh
dGgpLAorICAgICAgICAgICAgU1FMaXRlRmlsZVN5c3RlbTo6ZGF0YWJhc2VNb2RpZmljYXRpb25U
aW1lKHBhdGgpCisgICAgICAgIH07CisgICAgfSk7CiB9CiAKIFN0cmluZyBMb2NhbFN0b3JhZ2VE
YXRhYmFzZVRyYWNrZXI6OmRhdGFiYXNlUGF0aChjb25zdCBTdHJpbmcmIGZpbGVuYW1lKSBjb25z
dApkaWZmIC0tZ2l0IGEvU291cmNlL1dlYktpdC9OZXR3b3JrUHJvY2Vzcy9jYWNoZS9DYWNoZVN0
b3JhZ2VFbmdpbmVDYWNoZXMuY3BwIGIvU291cmNlL1dlYktpdC9OZXR3b3JrUHJvY2Vzcy9jYWNo
ZS9DYWNoZVN0b3JhZ2VFbmdpbmVDYWNoZXMuY3BwCmluZGV4IGMzMGMzYmU3YzVjNTUzYmYyMzI4
ZDk1MWI3NzQ0NDQxM2IzMmQ2YTUuLmQ3NWM1ODRkM2YwYTBlZGQwYWUyNzUzYjJlYzIwNmZmODRi
MzBmMmYgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJLaXQvTmV0d29ya1Byb2Nlc3MvY2FjaGUvQ2Fj
aGVTdG9yYWdlRW5naW5lQ2FjaGVzLmNwcAorKysgYi9Tb3VyY2UvV2ViS2l0L05ldHdvcmtQcm9j
ZXNzL2NhY2hlL0NhY2hlU3RvcmFnZUVuZ2luZUNhY2hlcy5jcHAKQEAgLTY1OCw5ICs2NTgsOSBA
QCB2b2lkIENhY2hlczo6Y2FjaGVJbmZvcyh1aW50NjRfdCB1cGRhdGVDb3VudGVyLCBDYWNoZUlu
Zm9zQ2FsbGJhY2smJiBjYWxsYmFjaykKIAogICAgIFZlY3RvcjxDYWNoZUluZm8+IGNhY2hlSW5m
b3M7CiAgICAgaWYgKGlzRGlydHkodXBkYXRlQ291bnRlcikpIHsKLSAgICAgICAgY2FjaGVJbmZv
cy5yZXNlcnZlSW5pdGlhbENhcGFjaXR5KG1fY2FjaGVzLnNpemUoKSk7Ci0gICAgICAgIGZvciAo
YXV0byYgY2FjaGUgOiBtX2NhY2hlcykKLSAgICAgICAgICAgIGNhY2hlSW5mb3MudW5jaGVja2Vk
QXBwZW5kKENhY2hlSW5mbyB7IGNhY2hlLmlkZW50aWZpZXIoKSwgY2FjaGUubmFtZSgpIH0pOwor
ICAgICAgICBjYWNoZUluZm9zID0gbV9jYWNoZXMubWFwKFtdKGF1dG8mIGNhY2hlKSB7CisgICAg
ICAgICAgICByZXR1cm4gQ2FjaGVJbmZvIHsgY2FjaGUuaWRlbnRpZmllcigpLCBjYWNoZS5uYW1l
KCkgfTsKKyAgICAgICAgfSk7CiAgICAgfQogICAgIGNhbGxiYWNrKENhY2hlSW5mb3MgeyBXVEZN
b3ZlKGNhY2hlSW5mb3MpLCBtX3VwZGF0ZUNvdW50ZXIgfSk7CiB9CmRpZmYgLS1naXQgYS9Tb3Vy
Y2UvV2ViS2l0L1NoYXJlZC9BUEkvQVBJQXJyYXkuY3BwIGIvU291cmNlL1dlYktpdC9TaGFyZWQv
QVBJL0FQSUFycmF5LmNwcAppbmRleCA5OGI4NzMxMTE0NDczODNjYzc0YTIwZmQxOThmMDVmOGE2
OWNlZWNjLi42ZjAwODBhNWE0YzliMjk0ZGZlZjFjZDMwNGNmYTZmN2RiYWMxZDI0IDEwMDY0NAot
LS0gYS9Tb3VyY2UvV2ViS2l0L1NoYXJlZC9BUEkvQVBJQXJyYXkuY3BwCisrKyBiL1NvdXJjZS9X
ZWJLaXQvU2hhcmVkL0FQSS9BUElBcnJheS5jcHAKQEAgLTQyLDEyICs0Miw5IEBAIFJlZjxBcnJh
eT4gQXJyYXk6OmNyZWF0ZShWZWN0b3I8UmVmUHRyPE9iamVjdD4+JiYgZWxlbWVudHMpCiAKIFJl
ZjxBcnJheT4gQXJyYXk6OmNyZWF0ZVN0cmluZ0FycmF5KGNvbnN0IFZlY3RvcjxXVEY6OlN0cmlu
Zz4mIHN0cmluZ3MpCiB7Ci0gICAgVmVjdG9yPFJlZlB0cjxPYmplY3Q+PiBlbGVtZW50czsKLSAg
ICBlbGVtZW50cy5yZXNlcnZlSW5pdGlhbENhcGFjaXR5KHN0cmluZ3Muc2l6ZSgpKTsKLQotICAg
IGZvciAoY29uc3QgYXV0byYgc3RyaW5nIDogc3RyaW5ncykKLSAgICAgICAgZWxlbWVudHMudW5j
aGVja2VkQXBwZW5kKEFQSTo6U3RyaW5nOjpjcmVhdGUoc3RyaW5nKSk7Ci0KKyAgICBhdXRvIGVs
ZW1lbnRzID0gc3RyaW5ncy5tYXAoW10oYXV0byYgc3RyaW5nKSAtPiBSZWZQdHI8T2JqZWN0PiB7
CisgICAgICAgIHJldHVybiBBUEk6OlN0cmluZzo6Y3JlYXRlKHN0cmluZyk7CisgICAgfSk7CiAg
ICAgcmV0dXJuIGNyZWF0ZShXVEZNb3ZlKGVsZW1lbnRzKSk7CiB9CiAKQEAgLTcxLDEwICs2OCw3
IEBAIFJlZjxBUEk6OkFycmF5PiBBcnJheTo6Y29weSgpCiAgICAgaWYgKCFzaXplKQogICAgICAg
ICByZXR1cm4gQXJyYXk6OmNyZWF0ZSgpOwogCi0gICAgVmVjdG9yPFJlZlB0cjxPYmplY3Q+PiBl
bGVtZW50czsKLSAgICBlbGVtZW50cy5yZXNlcnZlSW5pdGlhbENhcGFjaXR5KHNpemUpOwotICAg
IGZvciAoY29uc3QgYXV0byYgZW50cnkgOiB0aGlzLT5lbGVtZW50cygpKQotICAgICAgICBlbGVt
ZW50cy51bmNoZWNrZWRBcHBlbmQoZW50cnkpOworICAgIFZlY3RvcjxSZWZQdHI8T2JqZWN0Pj4g
ZWxlbWVudHMgPSB0aGlzLT5lbGVtZW50cygpOwogICAgIHJldHVybiBBcnJheTo6Y3JlYXRlKFdU
Rk1vdmUoZWxlbWVudHMpKTsKIH0KIApkaWZmIC0tZ2l0IGEvU291cmNlL1dlYktpdC9TaGFyZWQv
QVBJL0FQSURpY3Rpb25hcnkuY3BwIGIvU291cmNlL1dlYktpdC9TaGFyZWQvQVBJL0FQSURpY3Rp
b25hcnkuY3BwCmluZGV4IDRmYjk5NTJmZDY5M2EyZjE2OTU5ZmFlM2VhNTcxNDVhYzM5OTFjNDAu
LmJkN2M4NjM0MmM1Nzk2MTEyMWM1Yzk1NjEyNDBjZjZmNGJlMDNkMzMgMTAwNjQ0Ci0tLSBhL1Nv
dXJjZS9XZWJLaXQvU2hhcmVkL0FQSS9BUElEaWN0aW9uYXJ5LmNwcAorKysgYi9Tb3VyY2UvV2Vi
S2l0L1NoYXJlZC9BUEkvQVBJRGljdGlvbmFyeS5jcHAKQEAgLTU1LDEyICs1NSw5IEBAIFJlZjxB
cnJheT4gRGljdGlvbmFyeTo6a2V5cygpIGNvbnN0CiAgICAgaWYgKG1fbWFwLmlzRW1wdHkoKSkK
ICAgICAgICAgcmV0dXJuIEFQSTo6QXJyYXk6OmNyZWF0ZSgpOwogCi0gICAgVmVjdG9yPFJlZlB0
cjxBUEk6Ok9iamVjdD4+IGtleXM7Ci0gICAga2V5cy5yZXNlcnZlSW5pdGlhbENhcGFjaXR5KG1f
bWFwLnNpemUoKSk7Ci0KLSAgICBmb3IgKGNvbnN0IGF1dG8mIGtleSA6IG1fbWFwLmtleXMoKSkK
LSAgICAgICAga2V5cy51bmNoZWNrZWRBcHBlbmQoQVBJOjpTdHJpbmc6OmNyZWF0ZShrZXkpKTsK
LQorICAgIGF1dG8ga2V5cyA9IFdURjo6bWFwKG1fbWFwLCBbXShhdXRvJiBlbnRyeSkgLT4gUmVm
UHRyPEFQSTo6T2JqZWN0PiB7CisgICAgICAgIHJldHVybiBBUEk6OlN0cmluZzo6Y3JlYXRlKGVu
dHJ5LmtleSk7CisgICAgfSk7CiAgICAgcmV0dXJuIEFQSTo6QXJyYXk6OmNyZWF0ZShXVEZNb3Zl
KGtleXMpKTsKIH0KIApkaWZmIC0tZ2l0IGEvU291cmNlL1dlYktpdC9TaGFyZWQvVXNlckRhdGEu
Y3BwIGIvU291cmNlL1dlYktpdC9TaGFyZWQvVXNlckRhdGEuY3BwCmluZGV4IDUzMmYwY2QzYWYx
ZDNiNDUyMWNjYWM5YmQxMzQwNzNkZWYyZmYzZWUuLmY4YjdlZGNmNDQ5MTczMTUwYjBmODUwMTM2
MDM5ZDA5ZWM4M2ZjZjMgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJLaXQvU2hhcmVkL1VzZXJEYXRh
LmNwcAorKysgYi9Tb3VyY2UvV2ViS2l0L1NoYXJlZC9Vc2VyRGF0YS5jcHAKQEAgLTEwMSwxNSAr
MTAxLDExIEBAIHN0YXRpYyBSZWZQdHI8QVBJOjpPYmplY3Q+IHRyYW5zZm9ybUdyYXBoKEFQSTo6
T2JqZWN0JiBvYmplY3QsIGNvbnN0IFVzZXJEYXRhOjpUCiAgICAgaWYgKG9iamVjdC50eXBlKCkg
PT0gQVBJOjpPYmplY3Q6OlR5cGU6OkFycmF5KSB7CiAgICAgICAgIGF1dG8mIGFycmF5ID0gc3Rh
dGljX2Nhc3Q8QVBJOjpBcnJheSY+KG9iamVjdCk7CiAKLSAgICAgICAgVmVjdG9yPFJlZlB0cjxB
UEk6Ok9iamVjdD4+IGVsZW1lbnRzOwotICAgICAgICBlbGVtZW50cy5yZXNlcnZlSW5pdGlhbENh
cGFjaXR5KGFycmF5LmVsZW1lbnRzKCkuc2l6ZSgpKTsKLSAgICAgICAgZm9yIChjb25zdCBhdXRv
JiBlbGVtZW50IDogYXJyYXkuZWxlbWVudHMoKSkgeworICAgICAgICBhdXRvIGVsZW1lbnRzID0g
YXJyYXkuZWxlbWVudHMoKS5tYXAoWyZdKGF1dG8mIGVsZW1lbnQpIC0+IFJlZlB0cjxBUEk6Ok9i
amVjdD4gewogICAgICAgICAgICAgaWYgKCFlbGVtZW50KQotICAgICAgICAgICAgICAgIGVsZW1l
bnRzLnVuY2hlY2tlZEFwcGVuZChudWxscHRyKTsKLSAgICAgICAgICAgIGVsc2UKLSAgICAgICAg
ICAgICAgICBlbGVtZW50cy51bmNoZWNrZWRBcHBlbmQodHJhbnNmb3JtR3JhcGgoKmVsZW1lbnQs
IHRyYW5zZm9ybWVyKSk7Ci0gICAgICAgIH0KLQorICAgICAgICAgICAgICAgIHJldHVybiBudWxs
cHRyOworICAgICAgICAgICAgcmV0dXJuIHRyYW5zZm9ybUdyYXBoKCplbGVtZW50LCB0cmFuc2Zv
cm1lcik7CisgICAgICAgIH0pOwogICAgICAgICByZXR1cm4gQVBJOjpBcnJheTo6Y3JlYXRlKFdU
Rk1vdmUoZWxlbWVudHMpKTsKICAgICB9CiAKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJLaXQvU2hh
cmVkL1dlYkNvbnRleHRNZW51SXRlbS5jcHAgYi9Tb3VyY2UvV2ViS2l0L1NoYXJlZC9XZWJDb250
ZXh0TWVudUl0ZW0uY3BwCmluZGV4IGQzMDc4YjU5YWEzZWFjZTk3M2RjZDkyZTc1ZDUxMTk4ZGEz
NWM0ZTAuLmQyODEzODBhZTI1ZDliM2Y1MjkwZWVlZjAxZmUzN2ZlYzdhYjIzYjMgMTAwNjQ0Ci0t
LSBhL1NvdXJjZS9XZWJLaXQvU2hhcmVkL1dlYkNvbnRleHRNZW51SXRlbS5jcHAKKysrIGIvU291
cmNlL1dlYktpdC9TaGFyZWQvV2ViQ29udGV4dE1lbnVJdGVtLmNwcApAQCAtNDQsMTMgKzQ0LDEy
IEBAIFJlZjxXZWJDb250ZXh0TWVudUl0ZW0+IFdlYkNvbnRleHRNZW51SXRlbTo6Y3JlYXRlKGNv
bnN0IFN0cmluZyYgdGl0bGUsIGJvb2wgZW5hCiAgICAgc2l6ZV90IHNpemUgPSBzdWJtZW51SXRl
bXMtPnNpemUoKTsKIAogICAgIFZlY3RvcjxXZWJDb250ZXh0TWVudUl0ZW1EYXRhPiBzdWJtZW51
OwotICAgIHN1Ym1lbnUucmVzZXJ2ZUNhcGFjaXR5KHNpemUpOwotCisgICAgc3VibWVudS5yZXNl
cnZlSW5pdGlhbENhcGFjaXR5KHNpemUpOwogICAgIGZvciAoc2l6ZV90IGkgPSAwOyBpIDwgc2l6
ZTsgKytpKSB7Ci0gICAgICAgIFdlYkNvbnRleHRNZW51SXRlbSogaXRlbSA9IHN1Ym1lbnVJdGVt
cy0+YXQ8V2ViQ29udGV4dE1lbnVJdGVtPihpKTsKLSAgICAgICAgaWYgKGl0ZW0pCi0gICAgICAg
ICAgICBzdWJtZW51LmFwcGVuZChpdGVtLT5kYXRhKCkpOworICAgICAgICBpZiAoYXV0byogaXRl
bSA9IHN1Ym1lbnVJdGVtcy0+YXQ8V2ViQ29udGV4dE1lbnVJdGVtPihpKSkKKyAgICAgICAgICAg
IHN1Ym1lbnUudW5jaGVja2VkQXBwZW5kKGl0ZW0tPmRhdGEoKSk7CiAgICAgfQorICAgIHN1Ym1l
bnUuc2hyaW5rVG9GaXQoKTsKIAogICAgIHJldHVybiBhZG9wdFJlZigqbmV3IFdlYkNvbnRleHRN
ZW51SXRlbShXZWJDb250ZXh0TWVudUl0ZW1EYXRhKFdlYkNvcmU6OkNvbnRleHRNZW51SXRlbVRh
Z05vQWN0aW9uLCB0aXRsZSwgZW5hYmxlZCwgc3VibWVudSkpKS5sZWFrUmVmKCk7CiB9CkBAIC02
NiwxMiArNjUsOSBAQCBSZWY8QVBJOjpBcnJheT4gV2ViQ29udGV4dE1lbnVJdGVtOjpzdWJtZW51
SXRlbXNBc0FQSUFycmF5KCkgY29uc3QKICAgICBpZiAobV93ZWJDb250ZXh0TWVudUl0ZW1EYXRh
LnR5cGUoKSAhPSBXZWJDb3JlOjpTdWJtZW51VHlwZSkKICAgICAgICAgcmV0dXJuIEFQSTo6QXJy
YXk6OmNyZWF0ZSgpOwogCi0gICAgVmVjdG9yPFJlZlB0cjxBUEk6Ok9iamVjdD4+IHN1Ym1lbnVJ
dGVtczsKLSAgICBzdWJtZW51SXRlbXMucmVzZXJ2ZUluaXRpYWxDYXBhY2l0eShtX3dlYkNvbnRl
eHRNZW51SXRlbURhdGEuc3VibWVudSgpLnNpemUoKSk7Ci0KLSAgICBmb3IgKGNvbnN0IGF1dG8m
IGl0ZW0gOiBtX3dlYkNvbnRleHRNZW51SXRlbURhdGEuc3VibWVudSgpKQotICAgICAgICBzdWJt
ZW51SXRlbXMudW5jaGVja2VkQXBwZW5kKFdlYkNvbnRleHRNZW51SXRlbTo6Y3JlYXRlKGl0ZW0p
KTsKLQorICAgIGF1dG8gc3VibWVudUl0ZW1zID0gbV93ZWJDb250ZXh0TWVudUl0ZW1EYXRhLnN1
Ym1lbnUoKS5tYXAoW10oYXV0byYgaXRlbSkgLT4gUmVmUHRyPEFQSTo6T2JqZWN0PiB7CisgICAg
ICAgIHJldHVybiBXZWJDb250ZXh0TWVudUl0ZW06OmNyZWF0ZShpdGVtKTsKKyAgICB9KTsKICAg
ICByZXR1cm4gQVBJOjpBcnJheTo6Y3JlYXRlKFdURk1vdmUoc3VibWVudUl0ZW1zKSk7CiB9CiAK
ZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJLaXQvU2hhcmVkL1dlYkNvbnRleHRNZW51SXRlbURhdGEu
Y3BwIGIvU291cmNlL1dlYktpdC9TaGFyZWQvV2ViQ29udGV4dE1lbnVJdGVtRGF0YS5jcHAKaW5k
ZXggNTk4YTg3N2U5ZjYxNjhlMWFmNDgyZmU3ODcwY2VkNWExZDQ0MzI4ZC4uNGJhYmU0MzJjMGE3
NjU5ZWQ5YTdiY2UwZjMwNTFlNmEwMzBmOThkMiAxMDA2NDQKLS0tIGEvU291cmNlL1dlYktpdC9T
aGFyZWQvV2ViQ29udGV4dE1lbnVJdGVtRGF0YS5jcHAKKysrIGIvU291cmNlL1dlYktpdC9TaGFy
ZWQvV2ViQ29udGV4dE1lbnVJdGVtRGF0YS5jcHAKQEAgLTE2MCwyMiArMTYwLDE2IEBAIHN0ZDo6
b3B0aW9uYWw8V2ViQ29udGV4dE1lbnVJdGVtRGF0YT4gV2ViQ29udGV4dE1lbnVJdGVtRGF0YTo6
ZGVjb2RlKElQQzo6RGVjb2RlCiAKIFZlY3RvcjxXZWJDb250ZXh0TWVudUl0ZW1EYXRhPiBraXRJ
dGVtcyhjb25zdCBWZWN0b3I8V2ViQ29yZTo6Q29udGV4dE1lbnVJdGVtPiYgY29yZUl0ZW1WZWN0
b3IpCiB7Ci0gICAgVmVjdG9yPFdlYkNvbnRleHRNZW51SXRlbURhdGE+IHJlc3VsdDsKLSAgICBy
ZXN1bHQucmVzZXJ2ZUNhcGFjaXR5KGNvcmVJdGVtVmVjdG9yLnNpemUoKSk7Ci0gICAgZm9yICh1
bnNpZ25lZCBpID0gMDsgaSA8IGNvcmVJdGVtVmVjdG9yLnNpemUoKTsgKytpKQotICAgICAgICBy
ZXN1bHQuYXBwZW5kKFdlYkNvbnRleHRNZW51SXRlbURhdGEoY29yZUl0ZW1WZWN0b3JbaV0pKTsK
LSAgICAKLSAgICByZXR1cm4gcmVzdWx0OworICAgIHJldHVybiBjb3JlSXRlbVZlY3Rvci5tYXAo
W10oYXV0byYgaXRlbSkgeworICAgICAgICByZXR1cm4gV2ViQ29udGV4dE1lbnVJdGVtRGF0YSB7
IGl0ZW0gfTsKKyAgICB9KTsKIH0KIAogVmVjdG9yPENvbnRleHRNZW51SXRlbT4gY29yZUl0ZW1z
KGNvbnN0IFZlY3RvcjxXZWJDb250ZXh0TWVudUl0ZW1EYXRhPiYga2l0SXRlbVZlY3RvcikKIHsK
LSAgICBWZWN0b3I8Q29udGV4dE1lbnVJdGVtPiByZXN1bHQ7Ci0gICAgcmVzdWx0LnJlc2VydmVD
YXBhY2l0eShraXRJdGVtVmVjdG9yLnNpemUoKSk7Ci0gICAgZm9yICh1bnNpZ25lZCBpID0gMDsg
aSA8IGtpdEl0ZW1WZWN0b3Iuc2l6ZSgpOyArK2kpCi0gICAgICAgIHJlc3VsdC5hcHBlbmQoa2l0
SXRlbVZlY3RvcltpXS5jb3JlKCkpOwotICAgIAotICAgIHJldHVybiByZXN1bHQ7CisgICAgcmV0
dXJuIGtpdEl0ZW1WZWN0b3IubWFwKFtdKGF1dG8mIGl0ZW0pIHsKKyAgICAgICAgcmV0dXJuIGl0
ZW0uY29yZSgpOworICAgIH0pOwogfQogCiB9IC8vIG5hbWVzcGFjZSBXZWJLaXQKZGlmZiAtLWdp
dCBhL1NvdXJjZS9XZWJLaXQvVUlQcm9jZXNzL0FQSS9BUElXZWJBdXRoZW50aWNhdGlvblBhbmVs
LmNwcCBiL1NvdXJjZS9XZWJLaXQvVUlQcm9jZXNzL0FQSS9BUElXZWJBdXRoZW50aWNhdGlvblBh
bmVsLmNwcAppbmRleCA5YzdjNWRkZGYyZjg4NTQ0ZDJmNDlmNzc3NTYwMGM5MDBhOGM2MDM4Li4z
YWU4MDkzOTIwOGMxYzA2NGRlZWY0YTdjODY5YjI1ZTNkYWU2ZDVhIDEwMDY0NAotLS0gYS9Tb3Vy
Y2UvV2ViS2l0L1VJUHJvY2Vzcy9BUEkvQVBJV2ViQXV0aGVudGljYXRpb25QYW5lbC5jcHAKKysr
IGIvU291cmNlL1dlYktpdC9VSVByb2Nlc3MvQVBJL0FQSVdlYkF1dGhlbnRpY2F0aW9uUGFuZWwu
Y3BwCkBAIC01Niw3ICs1Niw2IEBAIFdlYkF1dGhlbnRpY2F0aW9uUGFuZWw6OldlYkF1dGhlbnRp
Y2F0aW9uUGFuZWwoY29uc3QgQXV0aGVudGljYXRvck1hbmFnZXImIG1hbmFnCiAgICAgLCBtX2Ns
aWVudERhdGFUeXBlKHR5cGUpCiAgICAgLCBtX3VzZXJOYW1lKHVzZXJOYW1lKQogewotICAgIG1f
dHJhbnNwb3J0cyA9IFZlY3RvcjxBdXRoZW50aWNhdG9yVHJhbnNwb3J0PigpOwogICAgIG1fdHJh
bnNwb3J0cy5yZXNlcnZlSW5pdGlhbENhcGFjaXR5KEF1dGhlbnRpY2F0b3JNYW5hZ2VyOjptYXhU
cmFuc3BvcnROdW1iZXIpOwogICAgIGlmICh0cmFuc3BvcnRzLmNvbnRhaW5zKEF1dGhlbnRpY2F0
b3JUcmFuc3BvcnQ6OlVzYikpCiAgICAgICAgIG1fdHJhbnNwb3J0cy51bmNoZWNrZWRBcHBlbmQo
QXV0aGVudGljYXRvclRyYW5zcG9ydDo6VXNiKTsKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJLaXQv
VUlQcm9jZXNzL0FQSS9BUElXZWJzaXRlUG9saWNpZXMuY3BwIGIvU291cmNlL1dlYktpdC9VSVBy
b2Nlc3MvQVBJL0FQSVdlYnNpdGVQb2xpY2llcy5jcHAKaW5kZXggYWI1N2M0NGZlZWViZGNmYTgx
YTdmNmY5ZGUwN2M5NmRiZWZlMDhhZS4uZTZhNGQwNzFhZDUxNGQ0ZTE1NzNmN2YxM2Y2NDY5MTNj
ZDNmY2I3NiAxMDA2NDQKLS0tIGEvU291cmNlL1dlYktpdC9VSVByb2Nlc3MvQVBJL0FQSVdlYnNp
dGVQb2xpY2llcy5jcHAKKysrIGIvU291cmNlL1dlYktpdC9VSVByb2Nlc3MvQVBJL0FQSVdlYnNp
dGVQb2xpY2llcy5jcHAKQEAgLTU5LDE4ICs1OSw4IEBAIFJlZjxXZWJzaXRlUG9saWNpZXM+IFdl
YnNpdGVQb2xpY2llczo6Y29weSgpIGNvbnN0CiAgICAgcG9saWNpZXMtPnNldFdlYnNpdGVEYXRh
U3RvcmUobV93ZWJzaXRlRGF0YVN0b3JlLmdldCgpKTsKICAgICBwb2xpY2llcy0+c2V0VXNlckNv
bnRlbnRDb250cm9sbGVyKG1fdXNlckNvbnRlbnRDb250cm9sbGVyLmdldCgpKTsKICAgICBwb2xp
Y2llcy0+c2V0SWRlbXBvdGVudE1vZGVBdXRvc2l6aW5nT25seUhvbm9yc1BlcmNlbnRhZ2VzKG1f
aWRlbXBvdGVudE1vZGVBdXRvc2l6aW5nT25seUhvbm9yc1BlcmNlbnRhZ2VzKTsKLSAgICAKLSAg
ICBWZWN0b3I8V2ViQ29yZTo6SFRUUEhlYWRlckZpZWxkPiBsZWdhY3lDdXN0b21IZWFkZXJGaWVs
ZHM7Ci0gICAgbGVnYWN5Q3VzdG9tSGVhZGVyRmllbGRzLnJlc2VydmVJbml0aWFsQ2FwYWNpdHko
bV9sZWdhY3lDdXN0b21IZWFkZXJGaWVsZHMuc2l6ZSgpKTsKLSAgICBmb3IgKGF1dG8mIGZpZWxk
IDogbV9sZWdhY3lDdXN0b21IZWFkZXJGaWVsZHMpCi0gICAgICAgIGxlZ2FjeUN1c3RvbUhlYWRl
ckZpZWxkcy51bmNoZWNrZWRBcHBlbmQoZmllbGQpOwotICAgIHBvbGljaWVzLT5zZXRMZWdhY3lD
dXN0b21IZWFkZXJGaWVsZHMoV1RGTW92ZShsZWdhY3lDdXN0b21IZWFkZXJGaWVsZHMpKTsKLQot
ICAgIFZlY3RvcjxXZWJDb3JlOjpDdXN0b21IZWFkZXJGaWVsZHM+IGN1c3RvbUhlYWRlckZpZWxk
czsKLSAgICBjdXN0b21IZWFkZXJGaWVsZHMucmVzZXJ2ZUluaXRpYWxDYXBhY2l0eShtX2N1c3Rv
bUhlYWRlckZpZWxkcy5zaXplKCkpOwotICAgIGZvciAoYXV0byYgZmllbGQgOiBtX2N1c3RvbUhl
YWRlckZpZWxkcykKLSAgICAgICAgY3VzdG9tSGVhZGVyRmllbGRzLnVuY2hlY2tlZEFwcGVuZChm
aWVsZCk7Ci0gICAgcG9saWNpZXMtPnNldEN1c3RvbUhlYWRlckZpZWxkcyhXVEZNb3ZlKGN1c3Rv
bUhlYWRlckZpZWxkcykpOworICAgIHBvbGljaWVzLT5zZXRMZWdhY3lDdXN0b21IZWFkZXJGaWVs
ZHMoVmVjdG9yIHsgbV9sZWdhY3lDdXN0b21IZWFkZXJGaWVsZHMgfSk7CisgICAgcG9saWNpZXMt
PnNldEN1c3RvbUhlYWRlckZpZWxkcyhWZWN0b3IgeyBtX2N1c3RvbUhlYWRlckZpZWxkcyB9KTsK
ICAgICBwb2xpY2llcy0+c2V0QWxsb3dTaXRlU3BlY2lmaWNRdWlya3NUb092ZXJyaWRlQ29udGVu
dE1vZGUobV9hbGxvd1NpdGVTcGVjaWZpY1F1aXJrc1RvT3ZlcnJpZGVDb250ZW50TW9kZSk7CiAg
ICAgcG9saWNpZXMtPnNldEFwcGxpY2F0aW9uTmFtZUZvckRlc2t0b3BVc2VyQWdlbnQobV9hcHBs
aWNhdGlvbk5hbWVGb3JEZXNrdG9wVXNlckFnZW50KTsKICAgICBwb2xpY2llcy0+c2V0QWxsb3dz
Q29udGVudEphdmFTY3JpcHQobV9hbGxvd3NDb250ZW50SmF2YVNjcmlwdCk7CkBAIC05OCw4ICs4
OCw3IEBAIFdlYktpdDo6V2Vic2l0ZVBvbGljaWVzRGF0YSBXZWJzaXRlUG9saWNpZXM6OmRhdGEo
KQogICAgIGJvb2wgaGFzTGVnYWN5Q3VzdG9tSGVhZGVyRmllbGRzID0gbGVnYWN5Q3VzdG9tSGVh
ZGVyRmllbGRzKCkuc2l6ZSgpOwogICAgIFZlY3RvcjxXZWJDb3JlOjpDdXN0b21IZWFkZXJGaWVs
ZHM+IGN1c3RvbUhlYWRlckZpZWxkczsKICAgICBjdXN0b21IZWFkZXJGaWVsZHMucmVzZXJ2ZUlu
aXRpYWxDYXBhY2l0eSh0aGlzLT5jdXN0b21IZWFkZXJGaWVsZHMoKS5zaXplKCkgKyBoYXNMZWdh
Y3lDdXN0b21IZWFkZXJGaWVsZHMpOwotICAgIGZvciAoYXV0byYgZmllbGQgOiB0aGlzLT5jdXN0
b21IZWFkZXJGaWVsZHMoKSkKLSAgICAgICAgY3VzdG9tSGVhZGVyRmllbGRzLnVuY2hlY2tlZEFw
cGVuZChmaWVsZCk7CisgICAgY3VzdG9tSGVhZGVyRmllbGRzLmFwcGVuZFZlY3Rvcih0aGlzLT5j
dXN0b21IZWFkZXJGaWVsZHMoKSk7CiAgICAgaWYgKGhhc0xlZ2FjeUN1c3RvbUhlYWRlckZpZWxk
cykKICAgICAgICAgY3VzdG9tSGVhZGVyRmllbGRzLnVuY2hlY2tlZEFwcGVuZCh7IGxlZ2FjeUN1
c3RvbUhlYWRlckZpZWxkcygpLCB7IH19KTsKIApkaWZmIC0tZ2l0IGEvU291cmNlL1dlYktpdC9V
SVByb2Nlc3MvQVBJL0MvV0tQYWdlLmNwcCBiL1NvdXJjZS9XZWJLaXQvVUlQcm9jZXNzL0FQSS9D
L1dLUGFnZS5jcHAKaW5kZXggNjA0N2M1ZmE0ZTczNjg2NzU2NjIyMmQ2M2Y2NjU3MmFmOTRjZDgx
MC4uMjI3YzE5MGI0NDc0NGM2ZjE0MDI0YzU4ZjA5YzEyYjExMDA3NjI5MSAxMDA2NDQKLS0tIGEv
U291cmNlL1dlYktpdC9VSVByb2Nlc3MvQVBJL0MvV0tQYWdlLmNwcAorKysgYi9Tb3VyY2UvV2Vi
S2l0L1VJUHJvY2Vzcy9BUEkvQy9XS1BhZ2UuY3BwCkBAIC0xMDUsNiArMTA1LDEzIEBACiBuYW1l
c3BhY2UgQVBJIHsKIHVzaW5nIG5hbWVzcGFjZSBXZWJDb3JlOwogdXNpbmcgbmFtZXNwYWNlIFdl
YktpdDsKKworc3RhdGljIFZlY3RvcjxSZWZQdHI8QVBJOjpPYmplY3Q+PiB0b0FQSU9iamVjdFZl
Y3Rvcihjb25zdCBWZWN0b3I8UmVmPFdlYkNvbnRleHRNZW51SXRlbT4+JiBtZW51SXRlbXNWZWN0
b3IpCit7CisgICAgcmV0dXJuIG1lbnVJdGVtc1ZlY3Rvci5tYXAoW10oYXV0byYgbWVudUl0ZW0p
IC0+IFJlZlB0cjxBUEk6Ok9iamVjdD4geworICAgICAgICByZXR1cm4gbWVudUl0ZW0ucHRyKCk7
CisgICAgfSk7Cit9CiAgICAgCiB0ZW1wbGF0ZTw+IHN0cnVjdCBDbGllbnRUcmFpdHM8V0tQYWdl
TG9hZGVyQ2xpZW50QmFzZT4gewogICAgIHR5cGVkZWYgc3RkOjp0dXBsZTxXS1BhZ2VMb2FkZXJD
bGllbnRWMCwgV0tQYWdlTG9hZGVyQ2xpZW50VjEsIFdLUGFnZUxvYWRlckNsaWVudFYyLCBXS1Bh
Z2VMb2FkZXJDbGllbnRWMywgV0tQYWdlTG9hZGVyQ2xpZW50VjQsIFdLUGFnZUxvYWRlckNsaWVu
dFY1LCBXS1BhZ2VMb2FkZXJDbGllbnRWNj4gVmVyc2lvbnM7CkBAIC05NDUsMTIgKzk1Miw3IEBA
IHZvaWQgV0tQYWdlU2V0UGFnZUNvbnRleHRNZW51Q2xpZW50KFdLUGFnZVJlZiBwYWdlUmVmLCBj
b25zdCBXS1BhZ2VDb250ZXh0TWVudUNsCiAgICAgICAgIHZvaWQgZ2V0Q29udGV4dE1lbnVGcm9t
UHJvcG9zZWRNZW51KFdlYlBhZ2VQcm94eSYgcGFnZSwgVmVjdG9yPFJlZjxXZWJLaXQ6OldlYkNv
bnRleHRNZW51SXRlbT4+JiYgcHJvcG9zZWRNZW51VmVjdG9yLCBXZWJLaXQ6OldlYkNvbnRleHRN
ZW51TGlzdGVuZXJQcm94eSYgY29udGV4dE1lbnVMaXN0ZW5lciwgY29uc3QgV2ViSGl0VGVzdFJl
c3VsdERhdGEmIGhpdFRlc3RSZXN1bHREYXRhLCBBUEk6Ok9iamVjdCogdXNlckRhdGEpIG92ZXJy
aWRlCiAgICAgICAgIHsKICAgICAgICAgICAgIGlmIChtX2NsaWVudC5iYXNlLnZlcnNpb24gPj0g
NCAmJiBtX2NsaWVudC5nZXRDb250ZXh0TWVudUZyb21Qcm9wb3NlZE1lbnVBc3luYykgewotICAg
ICAgICAgICAgICAgIFZlY3RvcjxSZWZQdHI8QVBJOjpPYmplY3Q+PiBwcm9wb3NlZE1lbnVJdGVt
czsKLSAgICAgICAgICAgICAgICBwcm9wb3NlZE1lbnVJdGVtcy5yZXNlcnZlSW5pdGlhbENhcGFj
aXR5KHByb3Bvc2VkTWVudVZlY3Rvci5zaXplKCkpOwotICAgICAgICAgICAgICAgIAotICAgICAg
ICAgICAgICAgIGZvciAoY29uc3QgYXV0byYgbWVudUl0ZW0gOiBwcm9wb3NlZE1lbnVWZWN0b3Ip
Ci0gICAgICAgICAgICAgICAgICAgIHByb3Bvc2VkTWVudUl0ZW1zLnVuY2hlY2tlZEFwcGVuZCht
ZW51SXRlbS5wdHIoKSk7Ci0gICAgICAgICAgICAgICAgCisgICAgICAgICAgICAgICAgYXV0byBw
cm9wb3NlZE1lbnVJdGVtcyA9IHRvQVBJT2JqZWN0VmVjdG9yKHByb3Bvc2VkTWVudVZlY3Rvcik7
CiAgICAgICAgICAgICAgICAgYXV0byB3ZWJIaXRUZXN0UmVzdWx0ID0gQVBJOjpIaXRUZXN0UmVz
dWx0OjpjcmVhdGUoaGl0VGVzdFJlc3VsdERhdGEpOwogICAgICAgICAgICAgICAgIG1fY2xpZW50
LmdldENvbnRleHRNZW51RnJvbVByb3Bvc2VkTWVudUFzeW5jKHRvQVBJKCZwYWdlKSwgdG9BUEko
QVBJOjpBcnJheTo6Y3JlYXRlKFdURk1vdmUocHJvcG9zZWRNZW51SXRlbXMpKS5wdHIoKSksIHRv
QVBJKCZjb250ZXh0TWVudUxpc3RlbmVyKSwgdG9BUEkod2ViSGl0VGVzdFJlc3VsdC5wdHIoKSks
IHRvQVBJKHVzZXJEYXRhKSwgbV9jbGllbnQuYmFzZS5jbGllbnRJbmZvKTsKICAgICAgICAgICAg
ICAgICByZXR1cm47CkBAIC05NjYsMTEgKzk2OCw3IEBAIHZvaWQgV0tQYWdlU2V0UGFnZUNvbnRl
eHRNZW51Q2xpZW50KFdLUGFnZVJlZiBwYWdlUmVmLCBjb25zdCBXS1BhZ2VDb250ZXh0TWVudUNs
CiAgICAgICAgICAgICAgICAgcmV0dXJuOwogICAgICAgICAgICAgfQogCi0gICAgICAgICAgICBW
ZWN0b3I8UmVmUHRyPEFQSTo6T2JqZWN0Pj4gcHJvcG9zZWRNZW51SXRlbXM7Ci0gICAgICAgICAg
ICBwcm9wb3NlZE1lbnVJdGVtcy5yZXNlcnZlSW5pdGlhbENhcGFjaXR5KHByb3Bvc2VkTWVudVZl
Y3Rvci5zaXplKCkpOwotCi0gICAgICAgICAgICBmb3IgKGNvbnN0IGF1dG8mIG1lbnVJdGVtIDog
cHJvcG9zZWRNZW51VmVjdG9yKQotICAgICAgICAgICAgICAgIHByb3Bvc2VkTWVudUl0ZW1zLnVu
Y2hlY2tlZEFwcGVuZChtZW51SXRlbS5wdHIoKSk7CisgICAgICAgICAgICBhdXRvIHByb3Bvc2Vk
TWVudUl0ZW1zID0gdG9BUElPYmplY3RWZWN0b3IocHJvcG9zZWRNZW51VmVjdG9yKTsKIAogICAg
ICAgICAgICAgV0tBcnJheVJlZiBuZXdNZW51ID0gbnVsbHB0cjsKICAgICAgICAgICAgIGlmICht
X2NsaWVudC5iYXNlLnZlcnNpb24gPj0gMikgewpAQCAtMTAxMCwxMiArMTAwOCw3IEBAIHZvaWQg
V0tQYWdlU2V0UGFnZUNvbnRleHRNZW51Q2xpZW50KFdLUGFnZVJlZiBwYWdlUmVmLCBjb25zdCBX
S1BhZ2VDb250ZXh0TWVudUNsCiAgICAgICAgICAgICBpZiAoIWNhblNob3dDb250ZXh0TWVudSgp
KQogICAgICAgICAgICAgICAgIHJldHVybjsKIAotICAgICAgICAgICAgVmVjdG9yPFJlZlB0cjxB
UEk6Ok9iamVjdD4+IG1lbnVJdGVtczsKLSAgICAgICAgICAgIG1lbnVJdGVtcy5yZXNlcnZlSW5p
dGlhbENhcGFjaXR5KG1lbnVJdGVtc1ZlY3Rvci5zaXplKCkpOwotCi0gICAgICAgICAgICBmb3Ig
KGNvbnN0IGF1dG8mIG1lbnVJdGVtIDogbWVudUl0ZW1zVmVjdG9yKQotICAgICAgICAgICAgICAg
IG1lbnVJdGVtcy51bmNoZWNrZWRBcHBlbmQobWVudUl0ZW0ucHRyKCkpOwotCisgICAgICAgICAg
ICBhdXRvIG1lbnVJdGVtcyA9IHRvQVBJT2JqZWN0VmVjdG9yKG1lbnVJdGVtc1ZlY3Rvcik7CiAg
ICAgICAgICAgICBtX2NsaWVudC5zaG93Q29udGV4dE1lbnUodG9BUEkoJnBhZ2UpLCB0b0FQSSht
ZW51TG9jYXRpb24pLCB0b0FQSShBUEk6OkFycmF5OjpjcmVhdGUoV1RGTW92ZShtZW51SXRlbXMp
KS5wdHIoKSksIG1fY2xpZW50LmJhc2UuY2xpZW50SW5mbyk7CiAgICAgICAgIH0KIApAQCAtMTEw
MiwxOSArMTA5NSwxMiBAQCB2b2lkIFdLUGFnZVNldFBhZ2VGaW5kTWF0Y2hlc0NsaWVudChXS1Bh
Z2VSZWYgcGFnZVJlZiwgY29uc3QgV0tQYWdlRmluZE1hdGNoZXNDbAogICAgICAgICAgICAgaWYg
KCFtX2NsaWVudC5kaWRGaW5kU3RyaW5nTWF0Y2hlcykKICAgICAgICAgICAgICAgICByZXR1cm47
CiAKLSAgICAgICAgICAgIFZlY3RvcjxSZWZQdHI8QVBJOjpPYmplY3Q+PiBtYXRjaGVzOwotICAg
ICAgICAgICAgbWF0Y2hlcy5yZXNlcnZlSW5pdGlhbENhcGFjaXR5KG1hdGNoUmVjdHMuc2l6ZSgp
KTsKLQotICAgICAgICAgICAgZm9yIChjb25zdCBhdXRvJiByZWN0cyA6IG1hdGNoUmVjdHMpIHsK
LSAgICAgICAgICAgICAgICBWZWN0b3I8UmVmUHRyPEFQSTo6T2JqZWN0Pj4gYXBpUmVjdHM7Ci0g
ICAgICAgICAgICAgICAgYXBpUmVjdHMucmVzZXJ2ZUluaXRpYWxDYXBhY2l0eShyZWN0cy5zaXpl
KCkpOwotCi0gICAgICAgICAgICAgICAgZm9yIChjb25zdCBhdXRvJiByZWN0IDogcmVjdHMpCi0g
ICAgICAgICAgICAgICAgICAgIGFwaVJlY3RzLnVuY2hlY2tlZEFwcGVuZChBUEk6OlJlY3Q6OmNy
ZWF0ZSh0b0FQSShyZWN0KSkpOwotCi0gICAgICAgICAgICAgICAgbWF0Y2hlcy51bmNoZWNrZWRB
cHBlbmQoQVBJOjpBcnJheTo6Y3JlYXRlKFdURk1vdmUoYXBpUmVjdHMpKSk7Ci0gICAgICAgICAg
ICB9Ci0KKyAgICAgICAgICAgIGF1dG8gbWF0Y2hlcyA9IG1hdGNoUmVjdHMubWFwKFtdKGF1dG8m
IHJlY3RzKSAtPiBSZWZQdHI8QVBJOjpPYmplY3Q+IHsKKyAgICAgICAgICAgICAgICBhdXRvIGFw
aVJlY3RzID0gcmVjdHMubWFwKFtdKGF1dG8mIHJlY3QpIC0+IFJlZlB0cjxBUEk6Ok9iamVjdD4g
eworICAgICAgICAgICAgICAgICAgICByZXR1cm4gQVBJOjpSZWN0OjpjcmVhdGUodG9BUEkocmVj
dCkpOworICAgICAgICAgICAgICAgIH0pOworICAgICAgICAgICAgICAgIHJldHVybiBBUEk6OkFy
cmF5OjpjcmVhdGUoV1RGTW92ZShhcGlSZWN0cykpOworICAgICAgICAgICAgfSk7CiAgICAgICAg
ICAgICBtX2NsaWVudC5kaWRGaW5kU3RyaW5nTWF0Y2hlcyh0b0FQSShwYWdlKSwgdG9BUEkoc3Ry
aW5nLmltcGwoKSksIHRvQVBJKEFQSTo6QXJyYXk6OmNyZWF0ZShXVEZNb3ZlKG1hdGNoZXMpKS5w
dHIoKSksIGluZGV4LCBtX2NsaWVudC5iYXNlLmNsaWVudEluZm8pOwogICAgICAgICB9CiAKQEAg
LTEyNjcsMTEgKzEyNTMsOSBAQCB2b2lkIFdLUGFnZVNldFBhZ2VMb2FkZXJDbGllbnQoV0tQYWdl
UmVmIHBhZ2VSZWYsIGNvbnN0IFdLUGFnZUxvYWRlckNsaWVudEJhc2UqCiAKICAgICAgICAgICAg
IFJlZlB0cjxBUEk6OkFycmF5PiByZW1vdmVkSXRlbXNBcnJheTsKICAgICAgICAgICAgIGlmICgh
cmVtb3ZlZEl0ZW1zLmlzRW1wdHkoKSkgewotICAgICAgICAgICAgICAgIFZlY3RvcjxSZWZQdHI8
QVBJOjpPYmplY3Q+PiByZW1vdmVkSXRlbXNWZWN0b3I7Ci0gICAgICAgICAgICAgICAgcmVtb3Zl
ZEl0ZW1zVmVjdG9yLnJlc2VydmVJbml0aWFsQ2FwYWNpdHkocmVtb3ZlZEl0ZW1zLnNpemUoKSk7
Ci0gICAgICAgICAgICAgICAgZm9yIChhdXRvJiByZW1vdmVkSXRlbSA6IHJlbW92ZWRJdGVtcykK
LSAgICAgICAgICAgICAgICByZW1vdmVkSXRlbXNWZWN0b3IuYXBwZW5kKFdURk1vdmUocmVtb3Zl
ZEl0ZW0pKTsKLQorICAgICAgICAgICAgICAgIGF1dG8gcmVtb3ZlZEl0ZW1zVmVjdG9yID0gV1RG
OjptYXAoV1RGTW92ZShyZW1vdmVkSXRlbXMpLCBbXShhdXRvJiYgcmVtb3ZlZEl0ZW0pIC0+IFJl
ZlB0cjxBUEk6Ok9iamVjdD4geworICAgICAgICAgICAgICAgICAgICByZXR1cm4gV1RGTW92ZShy
ZW1vdmVkSXRlbSk7CisgICAgICAgICAgICAgICAgfSk7CiAgICAgICAgICAgICAgICAgcmVtb3Zl
ZEl0ZW1zQXJyYXkgPSBBUEk6OkFycmF5OjpjcmVhdGUoV1RGTW92ZShyZW1vdmVkSXRlbXNWZWN0
b3IpKTsKICAgICAgICAgICAgIH0KIApkaWZmIC0tZ2l0IGEvU291cmNlL1dlYktpdC9VSVByb2Nl
c3MvQ29jb2EvVmlkZW9GdWxsc2NyZWVuTWFuYWdlclByb3h5Lm1tIGIvU291cmNlL1dlYktpdC9V
SVByb2Nlc3MvQ29jb2EvVmlkZW9GdWxsc2NyZWVuTWFuYWdlclByb3h5Lm1tCmluZGV4IDYwMGE4
OWY1NTliZjljMmVmZmIyZTBkMTdhM2Y1ZWRmNDBmOTYyYzAuLjcwNmFjNTcxMjFhNmU1YTc5NmFj
ZjY2YTk4Mjc3NTdmZmMzZDNlOGMgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJLaXQvVUlQcm9jZXNz
L0NvY29hL1ZpZGVvRnVsbHNjcmVlbk1hbmFnZXJQcm94eS5tbQorKysgYi9Tb3VyY2UvV2ViS2l0
L1VJUHJvY2Vzcy9Db2NvYS9WaWRlb0Z1bGxzY3JlZW5NYW5hZ2VyUHJveHkubW0KQEAgLTQ5Mywx
MiArNDkzLDcgQEAgdm9pZCBWaWRlb0Z1bGxzY3JlZW5NYW5hZ2VyUHJveHk6OmZvckVhY2hTZXNz
aW9uKEZ1bmN0aW9uPHZvaWQoVmlkZW9GdWxsc2NyZWVuTW8KICAgICBpZiAobV9jb250ZXh0TWFw
LmlzRW1wdHkoKSkKICAgICAgICAgcmV0dXJuOwogCi0gICAgVmVjdG9yPE1vZGVsSW50ZXJmYWNl
VHVwbGU+IHZhbHVlczsKLSAgICB2YWx1ZXMucmVzZXJ2ZUluaXRpYWxDYXBhY2l0eShtX2NvbnRl
eHRNYXAuc2l6ZSgpKTsKLSAgICBmb3IgKGF1dG8mIHZhbHVlIDogbV9jb250ZXh0TWFwLnZhbHVl
cygpKQotICAgICAgICB2YWx1ZXMudW5jaGVja2VkQXBwZW5kKHZhbHVlKTsKLQotICAgIGZvciAo
YXV0byYgdmFsdWUgOiB2YWx1ZXMpIHsKKyAgICBmb3IgKGF1dG8mIHZhbHVlIDogY29weVRvVmVj
dG9yKG1fY29udGV4dE1hcC52YWx1ZXMoKSkpIHsKICAgICAgICAgUmVmUHRyPFZpZGVvRnVsbHNj
cmVlbk1vZGVsQ29udGV4dD4gbW9kZWw7CiAgICAgICAgIFJlZlB0cjxQbGF0Zm9ybVZpZGVvRnVs
bHNjcmVlbkludGVyZmFjZT4gaW50ZXJmYWNlOwogICAgICAgICBzdGQ6OnRpZShtb2RlbCwgaW50
ZXJmYWNlKSA9IHZhbHVlOwpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYktpdC9VSVByb2Nlc3MvR2Ft
ZXBhZC9VSUdhbWVwYWRQcm92aWRlci5jcHAgYi9Tb3VyY2UvV2ViS2l0L1VJUHJvY2Vzcy9HYW1l
cGFkL1VJR2FtZXBhZFByb3ZpZGVyLmNwcAppbmRleCBkOThjNTM5NWVlMTJjNGY1NzgzMDkzYzc4
NDMxMzY4NzFmNDM2ZTI2Li45N2Q3YzQyZDc5YzVlYjM3ZDc2MWRjZjcxNmE3MjhmYWY2NGMyM2Jh
IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViS2l0L1VJUHJvY2Vzcy9HYW1lcGFkL1VJR2FtZXBhZFBy
b3ZpZGVyLmNwcAorKysgYi9Tb3VyY2UvV2ViS2l0L1VJUHJvY2Vzcy9HYW1lcGFkL1VJR2FtZXBh
ZFByb3ZpZGVyLmNwcApAQCAtMTk0LDE3ICsxOTQsOSBAQCB2b2lkIFVJR2FtZXBhZFByb3ZpZGVy
OjpzdG9wTW9uaXRvcmluZ0dhbWVwYWRzKCkKIAogVmVjdG9yPEdhbWVwYWREYXRhPiBVSUdhbWVw
YWRQcm92aWRlcjo6c25hcHNob3RHYW1lcGFkcygpCiB7Ci0gICAgVmVjdG9yPEdhbWVwYWREYXRh
PiBnYW1lcGFkRGF0YXM7Ci0gICAgZ2FtZXBhZERhdGFzLnJlc2VydmVJbml0aWFsQ2FwYWNpdHko
bV9nYW1lcGFkcy5zaXplKCkpOwotCi0gICAgZm9yIChhdXRvJiBnYW1lcGFkIDogbV9nYW1lcGFk
cykgewotICAgICAgICBpZiAoZ2FtZXBhZCkKLSAgICAgICAgICAgIGdhbWVwYWREYXRhcy51bmNo
ZWNrZWRBcHBlbmQoZ2FtZXBhZC0+Z2FtZXBhZERhdGEoKSk7Ci0gICAgICAgIGVsc2UKLSAgICAg
ICAgICAgIGdhbWVwYWREYXRhcy51bmNoZWNrZWRBcHBlbmQoeyB9KTsKLSAgICB9Ci0KLSAgICBy
ZXR1cm4gZ2FtZXBhZERhdGFzOworICAgIHJldHVybiBtX2dhbWVwYWRzLm1hcChbXShhdXRvJiBn
YW1lcGFkKSB7CisgICAgICAgIHJldHVybiBnYW1lcGFkID8gZ2FtZXBhZC0+Z2FtZXBhZERhdGEo
KSA6IEdhbWVwYWREYXRhIHsgfTsKKyAgICB9KTsKIH0KIAogI2lmICFQTEFURk9STShDT0NPQSkg
JiYgIShVU0UoTUFORVRURSkgJiYgT1MoTElOVVgpKQpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYktp
dC9VSVByb2Nlc3MvTmV0d29yay9OZXR3b3JrUHJvY2Vzc1Byb3h5LmNwcCBiL1NvdXJjZS9XZWJL
aXQvVUlQcm9jZXNzL05ldHdvcmsvTmV0d29ya1Byb2Nlc3NQcm94eS5jcHAKaW5kZXggZjcxMzlm
MTAwZGFjNTRhNDA5YmI0OTM4ODYxZjQ1MTc5ZTM1NDA3Zi4uODMxYjIxYTVmMDNmYTQ2YWI4NDA4
MDFhOTQ5MTk2NzM5ZGEwNjdlYiAxMDA2NDQKLS0tIGEvU291cmNlL1dlYktpdC9VSVByb2Nlc3Mv
TmV0d29yay9OZXR3b3JrUHJvY2Vzc1Byb3h5LmNwcAorKysgYi9Tb3VyY2UvV2ViS2l0L1VJUHJv
Y2Vzcy9OZXR3b3JrL05ldHdvcmtQcm9jZXNzUHJveHkuY3BwCkBAIC0xMTgsMTEgKzExOCw5IEBA
IHN0YXRpYyBib29sIHNob3VsZFRlcm1pbmF0ZU5ldHdvcmtQcm9jZXNzQnlTZW5kaW5nTWVzc2Fn
ZSgpCiAKIFZlY3RvcjxSZWY8TmV0d29ya1Byb2Nlc3NQcm94eT4+IE5ldHdvcmtQcm9jZXNzUHJv
eHk6OmFsbE5ldHdvcmtQcm9jZXNzZXMoKQogewotICAgIFZlY3RvcjxSZWY8TmV0d29ya1Byb2Nl
c3NQcm94eT4+IHByb2Nlc3NlczsKLSAgICBwcm9jZXNzZXMucmVzZXJ2ZUluaXRpYWxDYXBhY2l0
eShuZXR3b3JrUHJvY2Vzc2VzU2V0KCkuc2l6ZSgpKTsKLSAgICBmb3IgKGF1dG8qIG5ldHdvcmtQ
cm9jZXNzIDogbmV0d29ya1Byb2Nlc3Nlc1NldCgpKQotICAgICAgICBwcm9jZXNzZXMudW5jaGVj
a2VkQXBwZW5kKCpuZXR3b3JrUHJvY2Vzcyk7Ci0gICAgcmV0dXJuIHByb2Nlc3NlczsKKyAgICBy
ZXR1cm4gV1RGOjptYXAobmV0d29ya1Byb2Nlc3Nlc1NldCgpLCBbXShhdXRvKiBuZXR3b3JrUHJv
Y2VzcykgeworICAgICAgICByZXR1cm4gUmVmIHsgKm5ldHdvcmtQcm9jZXNzIH07CisgICAgfSk7
CiB9CiAKIFJlZlB0cjxOZXR3b3JrUHJvY2Vzc1Byb3h5PiYgTmV0d29ya1Byb2Nlc3NQcm94eTo6
ZGVmYXVsdE5ldHdvcmtQcm9jZXNzKCkKQEAgLTYyMywxMyArNjIxLDcgQEAgdm9pZCBOZXR3b3Jr
UHJvY2Vzc1Byb3h5Ojp1cGRhdGVQcmV2YWxlbnREb21haW5zVG9CbG9ja0Nvb2tpZXNGb3IoUEFM
OjpTZXNzaW9uSUQKICAgICAgICAgY29tcGxldGlvbkhhbmRsZXIoKTsKICAgICAgICAgcmV0dXJu
OwogICAgIH0KLQotICAgIFZlY3RvcjxSZWdpc3RyYWJsZURvbWFpbj4gcmVnaXN0cmFibGVEb21h
aW5zVG9CbG9jazsKLSAgICByZWdpc3RyYWJsZURvbWFpbnNUb0Jsb2NrLnJlc2VydmVJbml0aWFs
Q2FwYWNpdHkoZG9tYWluc1RvQmxvY2suc2l6ZSgpKTsKLSAgICBmb3IgKGF1dG8mIGRvbWFpbiA6
IGRvbWFpbnNUb0Jsb2NrKQotICAgICAgICByZWdpc3RyYWJsZURvbWFpbnNUb0Jsb2NrLnVuY2hl
Y2tlZEFwcGVuZChkb21haW4pOwotCi0gICAgc2VuZFdpdGhBc3luY1JlcGx5KE1lc3NhZ2VzOjpO
ZXR3b3JrUHJvY2Vzczo6VXBkYXRlUHJldmFsZW50RG9tYWluc1RvQmxvY2tDb29raWVzRm9yKHNl
c3Npb25JRCwgcmVnaXN0cmFibGVEb21haW5zVG9CbG9jayksIFdURk1vdmUoY29tcGxldGlvbkhh
bmRsZXIpKTsKKyAgICBzZW5kV2l0aEFzeW5jUmVwbHkoTWVzc2FnZXM6Ok5ldHdvcmtQcm9jZXNz
OjpVcGRhdGVQcmV2YWxlbnREb21haW5zVG9CbG9ja0Nvb2tpZXNGb3Ioc2Vzc2lvbklELCBkb21h
aW5zVG9CbG9jayksIFdURk1vdmUoY29tcGxldGlvbkhhbmRsZXIpKTsKIH0KIAogdm9pZCBOZXR3
b3JrUHJvY2Vzc1Byb3h5Ojppc1ByZXZhbGVudFJlc291cmNlKFBBTDo6U2Vzc2lvbklEIHNlc3Np
b25JRCwgY29uc3QgUmVnaXN0cmFibGVEb21haW4mIHJlc291cmNlRG9tYWluLCBDb21wbGV0aW9u
SGFuZGxlcjx2b2lkKGJvb2wpPiYmIGNvbXBsZXRpb25IYW5kbGVyKQpkaWZmIC0tZ2l0IGEvU291
cmNlL1dlYktpdC9VSVByb2Nlc3MvTm90aWZpY2F0aW9ucy9XZWJOb3RpZmljYXRpb25NYW5hZ2Vy
UHJveHkuY3BwIGIvU291cmNlL1dlYktpdC9VSVByb2Nlc3MvTm90aWZpY2F0aW9ucy9XZWJOb3Rp
ZmljYXRpb25NYW5hZ2VyUHJveHkuY3BwCmluZGV4IDAwNWZiYTVhMjNhZDY2NmRlMmQwN2UzZDY3
OTY0ZWEyZTJhNWMyMDYuLmIzYWM3MmI1ZjZjYjgxOWZkOWEyYzA3NmIwZDY5MjYxY2JlNTE4MGEg
MTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJLaXQvVUlQcm9jZXNzL05vdGlmaWNhdGlvbnMvV2ViTm90
aWZpY2F0aW9uTWFuYWdlclByb3h5LmNwcAorKysgYi9Tb3VyY2UvV2ViS2l0L1VJUHJvY2Vzcy9O
b3RpZmljYXRpb25zL1dlYk5vdGlmaWNhdGlvbk1hbmFnZXJQcm94eS5jcHAKQEAgLTI3OCw5ICsy
NzgsOCBAQCB2b2lkIFdlYk5vdGlmaWNhdGlvbk1hbmFnZXJQcm94eTo6cHJvdmlkZXJEaWRSZW1v
dmVOb3RpZmljYXRpb25Qb2xpY2llcyhBUEk6OkFycgogICAgIAogICAgIFZlY3RvcjxTdHJpbmc+
IG9yaWdpblN0cmluZ3M7CiAgICAgb3JpZ2luU3RyaW5ncy5yZXNlcnZlSW5pdGlhbENhcGFjaXR5
KHNpemUpOwotICAgIAogICAgIGZvciAoc2l6ZV90IGkgPSAwOyBpIDwgc2l6ZTsgKytpKQotICAg
ICAgICBvcmlnaW5TdHJpbmdzLmFwcGVuZChvcmlnaW5zLT5hdDxBUEk6OlNlY3VyaXR5T3JpZ2lu
PihpKS0+c2VjdXJpdHlPcmlnaW4oKS50b1N0cmluZygpKTsKKyAgICAgICAgb3JpZ2luU3RyaW5n
cy51bmNoZWNrZWRBcHBlbmQob3JpZ2lucy0+YXQ8QVBJOjpTZWN1cml0eU9yaWdpbj4oaSktPnNl
Y3VyaXR5T3JpZ2luKCkudG9TdHJpbmcoKSk7CiAKICAgICBXZWJQcm9jZXNzUG9vbDo6c2VuZFRv
QWxsUmVtb3RlV29ya2VyUHJvY2Vzc2VzKE1lc3NhZ2VzOjpXZWJOb3RpZmljYXRpb25NYW5hZ2Vy
OjpEaWRSZW1vdmVOb3RpZmljYXRpb25EZWNpc2lvbnMob3JpZ2luU3RyaW5ncykpOwogCmRpZmYg
LS1naXQgYS9Tb3VyY2UvV2ViS2l0L1VJUHJvY2Vzcy9Ob3RpZmljYXRpb25zL1dlYk5vdGlmaWNh
dGlvblByb3ZpZGVyLmNwcCBiL1NvdXJjZS9XZWJLaXQvVUlQcm9jZXNzL05vdGlmaWNhdGlvbnMv
V2ViTm90aWZpY2F0aW9uUHJvdmlkZXIuY3BwCmluZGV4IDg1OGQ3NjQ2MmZjYWU2OGNjNGIwYTNh
Yzg1ZGI1NTZmNzhkZWQ2ZWQuLmYzNjVkNDIzMzBmZjY4MjZhMTZjNGU3ZTFkNDNkN2VjNzk1ZGVh
YzAgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJLaXQvVUlQcm9jZXNzL05vdGlmaWNhdGlvbnMvV2Vi
Tm90aWZpY2F0aW9uUHJvdmlkZXIuY3BwCisrKyBiL1NvdXJjZS9XZWJLaXQvVUlQcm9jZXNzL05v
dGlmaWNhdGlvbnMvV2ViTm90aWZpY2F0aW9uUHJvdmlkZXIuY3BwCkBAIC03MSwxMiArNzEsOSBA
QCB2b2lkIFdlYk5vdGlmaWNhdGlvblByb3ZpZGVyOjpjbGVhck5vdGlmaWNhdGlvbnMoY29uc3Qg
VmVjdG9yPHVpbnQ2NF90PiYgbm90aWZpYwogICAgIGlmICghbV9jbGllbnQuY2xlYXJOb3RpZmlj
YXRpb25zKQogICAgICAgICByZXR1cm47CiAKLSAgICBWZWN0b3I8UmVmUHRyPEFQSTo6T2JqZWN0
Pj4gYXJyYXlJRHM7Ci0gICAgYXJyYXlJRHMucmVzZXJ2ZUluaXRpYWxDYXBhY2l0eShub3RpZmlj
YXRpb25JRHMuc2l6ZSgpKTsKLQotICAgIGZvciAoY29uc3QgYXV0byYgbm90aWZpY2F0aW9uSUQg
OiBub3RpZmljYXRpb25JRHMpCi0gICAgICAgIGFycmF5SURzLnVuY2hlY2tlZEFwcGVuZChBUEk6
OlVJbnQ2NDo6Y3JlYXRlKG5vdGlmaWNhdGlvbklEKSk7Ci0KKyAgICBhdXRvIGFycmF5SURzID0g
bm90aWZpY2F0aW9uSURzLm1hcChbXShhdXRvJiBub3RpZmljYXRpb25JRCkgLT4gUmVmUHRyPEFQ
STo6T2JqZWN0PiB7CisgICAgICAgIHJldHVybiBBUEk6OlVJbnQ2NDo6Y3JlYXRlKG5vdGlmaWNh
dGlvbklEKTsKKyAgICB9KTsKICAgICBtX2NsaWVudC5jbGVhck5vdGlmaWNhdGlvbnModG9BUEko
QVBJOjpBcnJheTo6Y3JlYXRlKFdURk1vdmUoYXJyYXlJRHMpKS5wdHIoKSksIG1fY2xpZW50LmJh
c2UuY2xpZW50SW5mbyk7CiB9CiAKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJLaXQvVUlQcm9jZXNz
L1N0YXRpc3RpY3NSZXF1ZXN0LmNwcCBiL1NvdXJjZS9XZWJLaXQvVUlQcm9jZXNzL1N0YXRpc3Rp
Y3NSZXF1ZXN0LmNwcAppbmRleCBiMWMyYzUyOWI0NDMzNmQ2M2RmMDM1ZmQ4NDc0ODYwNzIxMzJh
OGY3Li5lM2U2MTY0MzU5MWYyZmRlNmRjZmY1MDNiMjYxNWM5ZTMyYmViYjVhIDEwMDY0NAotLS0g
YS9Tb3VyY2UvV2ViS2l0L1VJUHJvY2Vzcy9TdGF0aXN0aWNzUmVxdWVzdC5jcHAKKysrIGIvU291
cmNlL1dlYktpdC9VSVByb2Nlc3MvU3RhdGlzdGljc1JlcXVlc3QuY3BwCkBAIC04NCwxMiArODQs
OSBAQCB2b2lkIFN0YXRpc3RpY3NSZXF1ZXN0Ojpjb21wbGV0ZWRSZXF1ZXN0KHVpbnQ2NF90IHJl
cXVlc3RJRCwgY29uc3QgU3RhdGlzdGljc0RhdAogICAgICAgICBtX3Jlc3BvbnNlRGljdGlvbmFy
eS0+c2V0KCJKYXZhU2NyaXB0T2JqZWN0VHlwZUNvdW50cyIsIGNyZWF0ZURpY3Rpb25hcnlGcm9t
SGFzaE1hcChkYXRhLmphdmFTY3JpcHRPYmplY3RUeXBlQ291bnRzKSk7CiAKICAgICBpZiAoIWRh
dGEud2ViQ29yZUNhY2hlU3RhdGlzdGljcy5pc0VtcHR5KCkpIHsKLSAgICAgICAgVmVjdG9yPFJl
ZlB0cjxBUEk6Ok9iamVjdD4+IGNhY2hlU3RhdGlzdGljczsKLSAgICAgICAgY2FjaGVTdGF0aXN0
aWNzLnJlc2VydmVJbml0aWFsQ2FwYWNpdHkoZGF0YS53ZWJDb3JlQ2FjaGVTdGF0aXN0aWNzLnNp
emUoKSk7Ci0KLSAgICAgICAgZm9yIChjb25zdCBhdXRvJiBzdGF0aXN0aWMgOiBkYXRhLndlYkNv
cmVDYWNoZVN0YXRpc3RpY3MpCi0gICAgICAgICAgICBjYWNoZVN0YXRpc3RpY3MudW5jaGVja2Vk
QXBwZW5kKGNyZWF0ZURpY3Rpb25hcnlGcm9tSGFzaE1hcChzdGF0aXN0aWMpKTsKLQorICAgICAg
ICBhdXRvIGNhY2hlU3RhdGlzdGljcyA9IGRhdGEud2ViQ29yZUNhY2hlU3RhdGlzdGljcy5tYXAo
W10oYXV0byYgc3RhdGlzdGljKSAtPiBSZWZQdHI8QVBJOjpPYmplY3Q+IHsKKyAgICAgICAgICAg
IHJldHVybiBjcmVhdGVEaWN0aW9uYXJ5RnJvbUhhc2hNYXAoc3RhdGlzdGljKTsKKyAgICAgICAg
fSk7CiAgICAgICAgIG1fcmVzcG9uc2VEaWN0aW9uYXJ5LT5zZXQoIldlYkNvcmVDYWNoZVN0YXRp
c3RpY3MiLCBBUEk6OkFycmF5OjpjcmVhdGUoV1RGTW92ZShjYWNoZVN0YXRpc3RpY3MpKSk7CiAg
ICAgfQogCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViS2l0L1VJUHJvY2Vzcy9Vc2VyQ29udGVudC9X
ZWJVc2VyQ29udGVudENvbnRyb2xsZXJQcm94eS5jcHAgYi9Tb3VyY2UvV2ViS2l0L1VJUHJvY2Vz
cy9Vc2VyQ29udGVudC9XZWJVc2VyQ29udGVudENvbnRyb2xsZXJQcm94eS5jcHAKaW5kZXggOTEx
NzNhNzc4Mzc3NDU0NjdiYmEyYTc4YjVlNDY4YzVkMjIxNDE4ZS4uZmEyNTRjMmRhZGMwNjMwMjhk
ZmQ1MDRkMjg5MGE4OTJhZWRhZmIwOCAxMDA2NDQKLS0tIGEvU291cmNlL1dlYktpdC9VSVByb2Nl
c3MvVXNlckNvbnRlbnQvV2ViVXNlckNvbnRlbnRDb250cm9sbGVyUHJveHkuY3BwCisrKyBiL1Nv
dXJjZS9XZWJLaXQvVUlQcm9jZXNzL1VzZXJDb250ZW50L1dlYlVzZXJDb250ZW50Q29udHJvbGxl
clByb3h5LmNwcApAQCAtMjE4LDExICsyMTgsOSBAQCB2b2lkIFdlYlVzZXJDb250ZW50Q29udHJv
bGxlclByb3h5OjpyZW1vdmVBbGxVc2VyU2NyaXB0cygpCiAgICAgZm9yIChhdXRvIHVzZXJTY3Jp
cHQgOiBtX3VzZXJTY3JpcHRzLT5lbGVtZW50c09mVHlwZTxBUEk6OlVzZXJTY3JpcHQ+KCkpCiAg
ICAgICAgIHdvcmxkcy5hZGQoY29uc3RfY2FzdDxBUEk6OkNvbnRlbnRXb3JsZCo+KCZ1c2VyU2Ny
aXB0LT5jb250ZW50V29ybGQoKSkpOwogCi0gICAgVmVjdG9yPENvbnRlbnRXb3JsZElkZW50aWZp
ZXI+IHdvcmxkSWRlbnRpZmllcnM7Ci0gICAgd29ybGRJZGVudGlmaWVycy5yZXNlcnZlSW5pdGlh
bENhcGFjaXR5KHdvcmxkcy5zaXplKCkpOwotICAgIGZvciAoY29uc3QgYXV0byYgd29ybGRDb3Vu
dFBhaXIgOiB3b3JsZHMpCi0gICAgICAgIHdvcmxkSWRlbnRpZmllcnMudW5jaGVja2VkQXBwZW5k
KHdvcmxkQ291bnRQYWlyLmtleS0+aWRlbnRpZmllcigpKTsKLQorICAgIGF1dG8gd29ybGRJZGVu
dGlmaWVycyA9IFdURjo6bWFwKHdvcmxkcywgW10oYXV0byYgZW50cnkpIHsKKyAgICAgICAgcmV0
dXJuIGVudHJ5LmtleS0+aWRlbnRpZmllcigpOworICAgIH0pOwogICAgIGZvciAoYXV0byYgcHJv
Y2VzcyA6IG1fcHJvY2Vzc2VzKQogICAgICAgICBwcm9jZXNzLnNlbmQoTWVzc2FnZXM6OldlYlVz
ZXJDb250ZW50Q29udHJvbGxlcjo6UmVtb3ZlQWxsVXNlclNjcmlwdHMod29ybGRJZGVudGlmaWVy
cyksIGlkZW50aWZpZXIoKSk7CiAKQEAgLTI2NywxMSArMjY1LDkgQEAgdm9pZCBXZWJVc2VyQ29u
dGVudENvbnRyb2xsZXJQcm94eTo6cmVtb3ZlQWxsVXNlclN0eWxlU2hlZXRzKCkKICAgICBmb3Ig
KGF1dG8gdXNlclN0eWxlU2hlZXQgOiBtX3VzZXJTdHlsZVNoZWV0cy0+ZWxlbWVudHNPZlR5cGU8
QVBJOjpVc2VyU3R5bGVTaGVldD4oKSkKICAgICAgICAgd29ybGRzLmFkZChjb25zdF9jYXN0PEFQ
STo6Q29udGVudFdvcmxkKj4oJnVzZXJTdHlsZVNoZWV0LT5jb250ZW50V29ybGQoKSkpOwogCi0g
ICAgVmVjdG9yPENvbnRlbnRXb3JsZElkZW50aWZpZXI+IHdvcmxkSWRlbnRpZmllcnM7Ci0gICAg
d29ybGRJZGVudGlmaWVycy5yZXNlcnZlSW5pdGlhbENhcGFjaXR5KHdvcmxkcy5zaXplKCkpOwot
ICAgIGZvciAoY29uc3QgYXV0byYgd29ybGRDb3VudFBhaXIgOiB3b3JsZHMpCi0gICAgICAgIHdv
cmxkSWRlbnRpZmllcnMudW5jaGVja2VkQXBwZW5kKHdvcmxkQ291bnRQYWlyLmtleS0+aWRlbnRp
ZmllcigpKTsKLQorICAgIGF1dG8gd29ybGRJZGVudGlmaWVycyA9IFdURjo6bWFwKHdvcmxkcywg
W10oYXV0byYgZW50cnkpIHsKKyAgICAgICAgcmV0dXJuIGVudHJ5LmtleS0+aWRlbnRpZmllcigp
OworICAgIH0pOwogICAgIGZvciAoYXV0byYgcHJvY2VzcyA6IG1fcHJvY2Vzc2VzKQogICAgICAg
ICBwcm9jZXNzLnNlbmQoTWVzc2FnZXM6OldlYlVzZXJDb250ZW50Q29udHJvbGxlcjo6UmVtb3Zl
QWxsVXNlclN0eWxlU2hlZXRzKHdvcmxkSWRlbnRpZmllcnMpLCBpZGVudGlmaWVyKCkpOwogCmRp
ZmYgLS1naXQgYS9Tb3VyY2UvV2ViS2l0L1VJUHJvY2Vzcy9XZWJBdXRoZW50aWNhdGlvbi9Db2Nv
YS9XZWJBdXRoZW50aWNhdGlvblBhbmVsQ2xpZW50Lm1tIGIvU291cmNlL1dlYktpdC9VSVByb2Nl
c3MvV2ViQXV0aGVudGljYXRpb24vQ29jb2EvV2ViQXV0aGVudGljYXRpb25QYW5lbENsaWVudC5t
bQppbmRleCAzOWEzOWQzNGMyM2RmOGY5YTJhMjZkMzZmNjk3Y2YyNTU5ZTk2YjI3Li4wMjdjNjkw
YmZhODI1MzI3ODYyZGVlNDlmZTMyMTc4OTQyMmEzYzhjIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2Vi
S2l0L1VJUHJvY2Vzcy9XZWJBdXRoZW50aWNhdGlvbi9Db2NvYS9XZWJBdXRoZW50aWNhdGlvblBh
bmVsQ2xpZW50Lm1tCisrKyBiL1NvdXJjZS9XZWJLaXQvVUlQcm9jZXNzL1dlYkF1dGhlbnRpY2F0
aW9uL0NvY29hL1dlYkF1dGhlbnRpY2F0aW9uUGFuZWxDbGllbnQubW0KQEAgLTE2NSwxMSArMTY1
LDkgQEAgdm9pZCBXZWJBdXRoZW50aWNhdGlvblBhbmVsQ2xpZW50OjpzZWxlY3RBc3NlcnRpb25S
ZXNwb25zZShWZWN0b3I8UmVmPFdlYkNvcmU6OkEKICAgICAgICAgcmV0dXJuOwogICAgIH0KIAot
ICAgIFZlY3RvcjxSZWZQdHI8QVBJOjpPYmplY3Q+PiBhcGlSZXNwb25zZXM7Ci0gICAgYXBpUmVz
cG9uc2VzLnJlc2VydmVJbml0aWFsQ2FwYWNpdHkocmVzcG9uc2VzLnNpemUoKSk7Ci0gICAgZm9y
IChhdXRvJiByZXNwb25zZSA6IHJlc3BvbnNlcykKLSAgICAgICAgYXBpUmVzcG9uc2VzLnVuY2hl
Y2tlZEFwcGVuZChBUEk6OldlYkF1dGhlbnRpY2F0aW9uQXNzZXJ0aW9uUmVzcG9uc2U6OmNyZWF0
ZShyZXNwb25zZS5jb3B5UmVmKCkpKTsKLQorICAgIGF1dG8gYXBpUmVzcG9uc2VzID0gcmVzcG9u
c2VzLm1hcChbXShhdXRvJiByZXNwb25zZSkgLT4gUmVmUHRyPEFQSTo6T2JqZWN0PiB7CisgICAg
ICAgIHJldHVybiBBUEk6OldlYkF1dGhlbnRpY2F0aW9uQXNzZXJ0aW9uUmVzcG9uc2U6OmNyZWF0
ZShyZXNwb25zZS5jb3B5UmVmKCkpOworICAgIH0pOwogICAgIGF1dG8gY2hlY2tlciA9IENvbXBs
ZXRpb25IYW5kbGVyQ2FsbENoZWNrZXI6OmNyZWF0ZShkZWxlZ2F0ZS5nZXQoKSwgQHNlbGVjdG9y
KHBhbmVsOnNlbGVjdEFzc2VydGlvblJlc3BvbnNlOnNvdXJjZTpjb21wbGV0aW9uSGFuZGxlcjop
KTsKICAgICBbZGVsZWdhdGUgcGFuZWw6bV9wYW5lbCBzZWxlY3RBc3NlcnRpb25SZXNwb25zZTp3
cmFwcGVyKEFQSTo6QXJyYXk6OmNyZWF0ZShXVEZNb3ZlKGFwaVJlc3BvbnNlcykpKSBzb3VyY2U6
d2tXZWJBdXRoZW50aWNhdGlvblNvdXJjZShzb3VyY2UpIGNvbXBsZXRpb25IYW5kbGVyOm1ha2VC
bG9ja1B0cihbY29tcGxldGlvbkhhbmRsZXIgPSBXVEZNb3ZlKGNvbXBsZXRpb25IYW5kbGVyKSwg
Y2hlY2tlciA9IFdURk1vdmUoY2hlY2tlcildKF9XS1dlYkF1dGhlbnRpY2F0aW9uQXNzZXJ0aW9u
UmVzcG9uc2UgKnJlc3BvbnNlKSBtdXRhYmxlIHsKICAgICAgICAgaWYgKGNoZWNrZXItPmNvbXBs
ZXRpb25IYW5kbGVySGFzQmVlbkNhbGxlZCgpKQpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYktpdC9V
SVByb2Nlc3MvV2ViQXV0aGVudGljYXRpb24vZmlkby9DdGFwQXV0aGVudGljYXRvci5jcHAgYi9T
b3VyY2UvV2ViS2l0L1VJUHJvY2Vzcy9XZWJBdXRoZW50aWNhdGlvbi9maWRvL0N0YXBBdXRoZW50
aWNhdG9yLmNwcAppbmRleCAzMzA1NTM0MDM1YWVkNmU1Nzc2OTY2OTlkM2MxZjdjODIyZWMzOTU5
Li5lNTBlNjlkYjMzODBmN2I2MjBhODQxMTYwZDk4NDQ2OWQ4MGVkYzA5IDEwMDY0NAotLS0gYS9T
b3VyY2UvV2ViS2l0L1VJUHJvY2Vzcy9XZWJBdXRoZW50aWNhdGlvbi9maWRvL0N0YXBBdXRoZW50
aWNhdG9yLmNwcAorKysgYi9Tb3VyY2UvV2ViS2l0L1VJUHJvY2Vzcy9XZWJBdXRoZW50aWNhdGlv
bi9maWRvL0N0YXBBdXRoZW50aWNhdG9yLmNwcApAQCAtMjA4LDEyICsyMDgsNyBAQCB2b2lkIEN0
YXBBdXRoZW50aWNhdG9yOjpjb250aW51ZUdldE5leHRBc3NlcnRpb25BZnRlclJlc3BvbnNlUmVj
ZWl2ZWQoVmVjdG9yPHVpbgogCiAgICAgaWYgKCFtX3JlbWFpbmluZ0Fzc2VydGlvblJlc3BvbnNl
cykgewogICAgICAgICBpZiAoYXV0byogb2JzZXJ2ZXIgPSB0aGlzLT5vYnNlcnZlcigpKSB7Ci0g
ICAgICAgICAgICBWZWN0b3I8UmVmPEF1dGhlbnRpY2F0b3JBc3NlcnRpb25SZXNwb25zZT4+IHJl
c3BvbnNlc0NvcHk7Ci0gICAgICAgICAgICByZXNwb25zZXNDb3B5LnJlc2VydmVJbml0aWFsQ2Fw
YWNpdHkobV9hc3NlcnRpb25SZXNwb25zZXMuc2l6ZSgpKTsKLSAgICAgICAgICAgIGZvciAoYXV0
byYgcmVzcG9uc2UgOiBtX2Fzc2VydGlvblJlc3BvbnNlcykKLSAgICAgICAgICAgICAgICByZXNw
b25zZXNDb3B5LnVuY2hlY2tlZEFwcGVuZChyZXNwb25zZS5jb3B5UmVmKCkpOwotCi0gICAgICAg
ICAgICBvYnNlcnZlci0+c2VsZWN0QXNzZXJ0aW9uUmVzcG9uc2UoV1RGTW92ZShyZXNwb25zZXND
b3B5KSwgV2ViQXV0aGVudGljYXRpb25Tb3VyY2U6OkV4dGVybmFsLCBbdGhpcywgd2Vha1RoaXMg
PSBXZWFrUHRyIHsgKnRoaXMgfV0gKEF1dGhlbnRpY2F0b3JBc3NlcnRpb25SZXNwb25zZSogcmVz
cG9uc2UpIHsKKyAgICAgICAgICAgIG9ic2VydmVyLT5zZWxlY3RBc3NlcnRpb25SZXNwb25zZShW
ZWN0b3IgeyBtX2Fzc2VydGlvblJlc3BvbnNlcyB9LCBXZWJBdXRoZW50aWNhdGlvblNvdXJjZTo6
RXh0ZXJuYWwsIFt0aGlzLCB3ZWFrVGhpcyA9IFdlYWtQdHIgeyAqdGhpcyB9XSAoQXV0aGVudGlj
YXRvckFzc2VydGlvblJlc3BvbnNlKiByZXNwb25zZSkgewogICAgICAgICAgICAgICAgIEFTU0VS
VChSdW5Mb29wOjppc01haW4oKSk7CiAgICAgICAgICAgICAgICAgaWYgKCF3ZWFrVGhpcykKICAg
ICAgICAgICAgICAgICAgICAgcmV0dXJuOwpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYktpdC9VSVBy
b2Nlc3MvV2ViQmFja0ZvcndhcmRMaXN0LmNwcCBiL1NvdXJjZS9XZWJLaXQvVUlQcm9jZXNzL1dl
YkJhY2tGb3J3YXJkTGlzdC5jcHAKaW5kZXggZTBlOTQ0ZDEyZGZjMTJiYzZjZWNmMDM5NjIxOWY1
MzM0MzQyYjQ1Mi4uYzc0MzQzZTY1Yjg4OWY3ODY5ZGM4Y2NhMzQwNTFiOGIyNjU0MDJiNiAxMDA2
NDQKLS0tIGEvU291cmNlL1dlYktpdC9VSVByb2Nlc3MvV2ViQmFja0ZvcndhcmRMaXN0LmNwcAor
KysgYi9Tb3VyY2UvV2ViS2l0L1VJUHJvY2Vzcy9XZWJCYWNrRm9yd2FyZExpc3QuY3BwCkBAIC0x
MDIsMTAgKzEwMiwxMCBAQCB2b2lkIFdlYkJhY2tGb3J3YXJkTGlzdDo6YWRkSXRlbShSZWY8V2Vi
QmFja0ZvcndhcmRMaXN0SXRlbT4mJiBuZXdJdGVtKQogCiAgICAgICAgIC8vIFRvc3MgZXZlcnl0
aGluZyBpbiB0aGUgZm9yd2FyZCBsaXN0LgogICAgICAgICB1bnNpZ25lZCB0YXJnZXRTaXplID0g
Km1fY3VycmVudEluZGV4ICsgMTsKLSAgICAgICAgcmVtb3ZlZEl0ZW1zLnJlc2VydmVDYXBhY2l0
eShtX2VudHJpZXMuc2l6ZSgpIC0gdGFyZ2V0U2l6ZSk7CisgICAgICAgIHJlbW92ZWRJdGVtcy5y
ZXNlcnZlSW5pdGlhbENhcGFjaXR5KG1fZW50cmllcy5zaXplKCkgLSB0YXJnZXRTaXplKTsKICAg
ICAgICAgd2hpbGUgKG1fZW50cmllcy5zaXplKCkgPiB0YXJnZXRTaXplKSB7CiAgICAgICAgICAg
ICBkaWRSZW1vdmVJdGVtKG1fZW50cmllcy5sYXN0KCkpOwotICAgICAgICAgICAgcmVtb3ZlZEl0
ZW1zLmFwcGVuZChXVEZNb3ZlKG1fZW50cmllcy5sYXN0KCkpKTsKKyAgICAgICAgICAgIHJlbW92
ZWRJdGVtcy51bmNoZWNrZWRBcHBlbmQoV1RGTW92ZShtX2VudHJpZXMubGFzdCgpKSk7CiAgICAg
ICAgICAgICBtX2VudHJpZXMucmVtb3ZlTGFzdCgpOwogICAgICAgICB9CiAKQEAgLTM4NywxMCAr
Mzg3LDEwIEBAIHZvaWQgV2ViQmFja0ZvcndhcmRMaXN0OjpjbGVhcigpCiAgICAgICAgICAgICBk
aWRSZW1vdmVJdGVtKG1fZW50cmllc1tpXSk7CiAgICAgfQogCi0gICAgcmVtb3ZlZEl0ZW1zLnJl
c2VydmVDYXBhY2l0eShzaXplIC0gMSk7CisgICAgcmVtb3ZlZEl0ZW1zLnJlc2VydmVJbml0aWFs
Q2FwYWNpdHkoc2l6ZSAtIDEpOwogICAgIGZvciAoc2l6ZV90IGkgPSAwOyBpIDwgc2l6ZTsgKytp
KSB7CiAgICAgICAgIGlmIChtX2N1cnJlbnRJbmRleCAmJiBpICE9ICptX2N1cnJlbnRJbmRleCkK
LSAgICAgICAgICAgIHJlbW92ZWRJdGVtcy5hcHBlbmQoV1RGTW92ZShtX2VudHJpZXNbaV0pKTsK
KyAgICAgICAgICAgIHJlbW92ZWRJdGVtcy51bmNoZWNrZWRBcHBlbmQoV1RGTW92ZShtX2VudHJp
ZXNbaV0pKTsKICAgICB9CiAKICAgICBtX2N1cnJlbnRJbmRleCA9IDA7CkBAIC00MzgsMTYgKzQz
OCwxMiBAQCB2b2lkIFdlYkJhY2tGb3J3YXJkTGlzdDo6cmVzdG9yZUZyb21TdGF0ZShCYWNrRm9y
d2FyZExpc3RTdGF0ZSBiYWNrRm9yd2FyZExpc3RTdAogICAgIGlmICghbV9wYWdlKQogICAgICAg
ICByZXR1cm47CiAKLSAgICBWZWN0b3I8UmVmPFdlYkJhY2tGb3J3YXJkTGlzdEl0ZW0+PiBpdGVt
czsKLSAgICBpdGVtcy5yZXNlcnZlSW5pdGlhbENhcGFjaXR5KGJhY2tGb3J3YXJkTGlzdFN0YXRl
Lml0ZW1zLnNpemUoKSk7Ci0KICAgICAvLyBGSVhNRTogRW5hYmxlIHJlc3RvcmluZyByZXNvdXJj
ZURpcmVjdG9yeVVSTC4KLSAgICBmb3IgKGF1dG8mIGJhY2tGb3J3YXJkTGlzdEl0ZW1TdGF0ZSA6
IGJhY2tGb3J3YXJkTGlzdFN0YXRlLml0ZW1zKSB7Ci0gICAgICAgIGJhY2tGb3J3YXJkTGlzdEl0
ZW1TdGF0ZS5pZGVudGlmaWVyID0geyBQcm9jZXNzOjppZGVudGlmaWVyKCksIE9iamVjdElkZW50
aWZpZXI8QmFja0ZvcndhcmRJdGVtSWRlbnRpZmllcjo6SXRlbUlkZW50aWZpZXJUeXBlPjo6Z2Vu
ZXJhdGUoKSB9OwotICAgICAgICBpdGVtcy51bmNoZWNrZWRBcHBlbmQoV2ViQmFja0ZvcndhcmRM
aXN0SXRlbTo6Y3JlYXRlKFdURk1vdmUoYmFja0ZvcndhcmRMaXN0SXRlbVN0YXRlKSwgbV9wYWdl
LT5pZGVudGlmaWVyKCkpKTsKLSAgICB9CisgICAgbV9lbnRyaWVzID0gV1RGOjptYXAoV1RGTW92
ZShiYWNrRm9yd2FyZExpc3RTdGF0ZS5pdGVtcyksIFt0aGlzXShhdXRvJiYgc3RhdGUpIHsKKyAg
ICAgICAgc3RhdGUuaWRlbnRpZmllciA9IHsgUHJvY2Vzczo6aWRlbnRpZmllcigpLCBPYmplY3RJ
ZGVudGlmaWVyPEJhY2tGb3J3YXJkSXRlbUlkZW50aWZpZXI6Okl0ZW1JZGVudGlmaWVyVHlwZT46
OmdlbmVyYXRlKCkgfTsKKyAgICAgICAgcmV0dXJuIFdlYkJhY2tGb3J3YXJkTGlzdEl0ZW06OmNy
ZWF0ZShXVEZNb3ZlKHN0YXRlKSwgbV9wYWdlLT5pZGVudGlmaWVyKCkpOworICAgIH0pOwogICAg
IG1fY3VycmVudEluZGV4ID0gYmFja0ZvcndhcmRMaXN0U3RhdGUuY3VycmVudEluZGV4ID8gc3Rk
OjpvcHRpb25hbDxzaXplX3Q+KCpiYWNrRm9yd2FyZExpc3RTdGF0ZS5jdXJyZW50SW5kZXgpIDog
c3RkOjpudWxsb3B0OwotICAgIG1fZW50cmllcyA9IFdURk1vdmUoaXRlbXMpOwogCiAgICAgTE9H
KEJhY2tGb3J3YXJkLCAiKEJhY2svRm9yd2FyZCkgV2ViQmFja0ZvcndhcmRMaXN0ICVwIHJlc3Rv
cmVkIGZyb20gc3RhdGUgKGhhcyAlenUgZW50cmllcykiLCB0aGlzLCBtX2VudHJpZXMuc2l6ZSgp
KTsKIH0KZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJLaXQvVUlQcm9jZXNzL1dlYlBhZ2VQcm94eS5j
cHAgYi9Tb3VyY2UvV2ViS2l0L1VJUHJvY2Vzcy9XZWJQYWdlUHJveHkuY3BwCmluZGV4IGFkNTU3
ZDkwZjNiZmQ4MjVjZjJlZGE5Y2E0MzkzNzFmMmQ4MmJlMTkuLjJlZTg3YjU1NDc3ZTU3ZTNkZGJk
YjliYzAzZjA3ZjE5NzU1NDA2NGIgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJLaXQvVUlQcm9jZXNz
L1dlYlBhZ2VQcm94eS5jcHAKKysrIGIvU291cmNlL1dlYktpdC9VSVByb2Nlc3MvV2ViUGFnZVBy
b3h5LmNwcApAQCAtNDM5MCwxMCArNDM5MCw3IEBAIHZvaWQgV2ViUGFnZVByb3h5OjpydW5KYXZh
U2NyaXB0SW5GcmFtZUluU2NyaXB0V29ybGQoUnVuSmF2YVNjcmlwdFBhcmFtZXRlcnMmJiBwCiAg
ICAgICAgICAgICByZXR1cm4gY2FsbGJhY2tGdW5jdGlvbihtYWtlVW5leHBlY3RlZChXVEZNb3Zl
KCpkZXRhaWxzKSkpOwogICAgICAgICBpZiAoZGF0YVJlZmVyZW5jZS5lbXB0eSgpKQogICAgICAg
ICAgICAgcmV0dXJuIGNhbGxiYWNrRnVuY3Rpb24oeyBudWxscHRyIH0pOwotICAgICAgICBWZWN0
b3I8dWludDhfdD4gZGF0YTsKLSAgICAgICAgZGF0YS5yZXNlcnZlSW5pdGlhbENhcGFjaXR5KGRh
dGFSZWZlcmVuY2Uuc2l6ZSgpKTsKLSAgICAgICAgZGF0YS5hcHBlbmQoZGF0YVJlZmVyZW5jZS5k
YXRhKCksIGRhdGFSZWZlcmVuY2Uuc2l6ZSgpKTsKLSAgICAgICAgY2FsbGJhY2tGdW5jdGlvbih7
IEFQSTo6U2VyaWFsaXplZFNjcmlwdFZhbHVlOjphZG9wdChXVEZNb3ZlKGRhdGEpKS5wdHIoKSB9
KTsKKyAgICAgICAgY2FsbGJhY2tGdW5jdGlvbih7IEFQSTo6U2VyaWFsaXplZFNjcmlwdFZhbHVl
OjphZG9wdChWZWN0b3IoZGF0YVJlZmVyZW5jZSkpLnB0cigpIH0pOwogICAgIH0pOwogfQogCkBA
IC0xMDcwMywxMSArMTA3MDAsOSBAQCBXZWJQYWdlUHJveHk6OlNwZWVjaFN5bnRoZXNpc0RhdGEm
IFdlYlBhZ2VQcm94eTo6c3BlZWNoU3ludGhlc2lzRGF0YSgpCiAKIHZvaWQgV2ViUGFnZVByb3h5
OjpzcGVlY2hTeW50aGVzaXNWb2ljZUxpc3QoQ29tcGxldGlvbkhhbmRsZXI8dm9pZChWZWN0b3I8
V2ViU3BlZWNoU3ludGhlc2lzVm9pY2U+JiYpPiYmIGNvbXBsZXRpb25IYW5kbGVyKQogewotICAg
IGF1dG8mIHZvaWNlTGlzdCA9IHNwZWVjaFN5bnRoZXNpc0RhdGEoKS5zeW50aGVzaXplci0+dm9p
Y2VMaXN0KCk7Ci0gICAgVmVjdG9yPFdlYlNwZWVjaFN5bnRoZXNpc1ZvaWNlPiByZXN1bHQ7Ci0g
ICAgcmVzdWx0LnJlc2VydmVJbml0aWFsQ2FwYWNpdHkodm9pY2VMaXN0LnNpemUoKSk7Ci0gICAg
Zm9yIChhdXRvJiB2b2ljZSA6IHZvaWNlTGlzdCkKLSAgICAgICAgcmVzdWx0LnVuY2hlY2tlZEFw
cGVuZChXZWJTcGVlY2hTeW50aGVzaXNWb2ljZSB7IHZvaWNlLT52b2ljZVVSSSgpLCB2b2ljZS0+
bmFtZSgpLCB2b2ljZS0+bGFuZygpLCB2b2ljZS0+bG9jYWxTZXJ2aWNlKCksIHZvaWNlLT5pc0Rl
ZmF1bHQoKSB9KTsKKyAgICBhdXRvIHJlc3VsdCA9IHNwZWVjaFN5bnRoZXNpc0RhdGEoKS5zeW50
aGVzaXplci0+dm9pY2VMaXN0KCkubWFwKFtdKGF1dG8mIHZvaWNlKSB7CisgICAgICAgIHJldHVy
biBXZWJTcGVlY2hTeW50aGVzaXNWb2ljZSB7IHZvaWNlLT52b2ljZVVSSSgpLCB2b2ljZS0+bmFt
ZSgpLCB2b2ljZS0+bGFuZygpLCB2b2ljZS0+bG9jYWxTZXJ2aWNlKCksIHZvaWNlLT5pc0RlZmF1
bHQoKSB9OworICAgIH0pOwogICAgIGNvbXBsZXRpb25IYW5kbGVyKFdURk1vdmUocmVzdWx0KSk7
CiB9CiAKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJLaXQvVUlQcm9jZXNzL1dlYnNpdGVEYXRhL1dl
YnNpdGVEYXRhU3RvcmUuY3BwIGIvU291cmNlL1dlYktpdC9VSVByb2Nlc3MvV2Vic2l0ZURhdGEv
V2Vic2l0ZURhdGFTdG9yZS5jcHAKaW5kZXggOWVmMTRhNWU4ZjY0ZDczOWY0Y2QzMzE2MDgxNzhl
YTA1MTEyNmVmMC4uYjM2ZDlhNzRiOWExNzVhMDgxNmI3YTJlMTRmMTM5ZGI1ZWY1NmU2ZCAxMDA2
NDQKLS0tIGEvU291cmNlL1dlYktpdC9VSVByb2Nlc3MvV2Vic2l0ZURhdGEvV2Vic2l0ZURhdGFT
dG9yZS5jcHAKKysrIGIvU291cmNlL1dlYktpdC9VSVByb2Nlc3MvV2Vic2l0ZURhdGEvV2Vic2l0
ZURhdGFTdG9yZS5jcHAKQEAgLTMyNCwxMSArMzI0LDkgQEAgdm9pZCBXZWJzaXRlRGF0YVN0b3Jl
OjpmZXRjaERhdGFBbmRBcHBseShPcHRpb25TZXQ8V2Vic2l0ZURhdGFUeXBlPiBkYXRhVHlwZXMs
IE8KICAgICAgICAgewogICAgICAgICAgICAgQVNTRVJUKFJ1bkxvb3A6OmlzTWFpbigpKTsKIAot
ICAgICAgICAgICAgVmVjdG9yPFdlYnNpdGVEYXRhUmVjb3JkPiByZWNvcmRzOwotICAgICAgICAg
ICAgcmVjb3Jkcy5yZXNlcnZlSW5pdGlhbENhcGFjaXR5KG1fd2Vic2l0ZURhdGFSZWNvcmRzLnNp
emUoKSk7Ci0gICAgICAgICAgICBmb3IgKGF1dG8mIHJlY29yZCA6IG1fd2Vic2l0ZURhdGFSZWNv
cmRzLnZhbHVlcygpKQotICAgICAgICAgICAgICAgIHJlY29yZHMudW5jaGVja2VkQXBwZW5kKG1f
cXVldWUucHRyKCkgIT0gJldvcmtRdWV1ZTo6bWFpbigpID8gY3Jvc3NUaHJlYWRDb3B5KHJlY29y
ZCkgOiBXVEZNb3ZlKHJlY29yZCkpOwotCisgICAgICAgICAgICBhdXRvIHJlY29yZHMgPSBXVEY6
Om1hcChXVEZNb3ZlKG1fd2Vic2l0ZURhdGFSZWNvcmRzKSwgW3RoaXNdKGF1dG8mJiBlbnRyeSkg
eworICAgICAgICAgICAgICAgIHJldHVybiBtX3F1ZXVlLnB0cigpICE9ICZXb3JrUXVldWU6Om1h
aW4oKSA/IGNyb3NzVGhyZWFkQ29weShXVEZNb3ZlKGVudHJ5LnZhbHVlKSkgOiBXVEZNb3ZlKGVu
dHJ5LnZhbHVlKTsKKyAgICAgICAgICAgIH0pOwogICAgICAgICAgICAgbV9xdWV1ZS0+ZGlzcGF0
Y2goW2FwcGx5ID0gV1RGTW92ZShtX2FwcGx5KSwgcmVjb3JkcyA9IFdURk1vdmUocmVjb3Jkcyld
ICgpIG11dGFibGUgewogICAgICAgICAgICAgICAgIGFwcGx5KFdURk1vdmUocmVjb3JkcykpOwog
ICAgICAgICAgICAgfSk7CkBAIC0xNzI4LDExICsxNzI2LDkgQEAgdm9pZCBXZWJzaXRlRGF0YVN0
b3JlOjpzZXRDYWNoZU1vZGVsU3luY2hyb25vdXNseUZvclRlc3RpbmcoQ2FjaGVNb2RlbCBjYWNo
ZU1vZGUKIAogVmVjdG9yPFdlYnNpdGVEYXRhU3RvcmVQYXJhbWV0ZXJzPiBXZWJzaXRlRGF0YVN0
b3JlOjpwYXJhbWV0ZXJzRnJvbUVhY2hXZWJzaXRlRGF0YVN0b3JlKCkKIHsKLSAgICBWZWN0b3I8
V2Vic2l0ZURhdGFTdG9yZVBhcmFtZXRlcnM+IHBhcmFtZXRlcnM7Ci0gICAgcGFyYW1ldGVycy5y
ZXNlcnZlSW5pdGlhbENhcGFjaXR5KGFsbERhdGFTdG9yZXMoKS5zaXplKCkpOwotICAgIGZvciAo
YXV0byogZGF0YVN0b3JlIDogYWxsRGF0YVN0b3JlcygpLnZhbHVlcygpKQotICAgICAgICBwYXJh
bWV0ZXJzLnVuY2hlY2tlZEFwcGVuZChkYXRhU3RvcmUtPnBhcmFtZXRlcnMoKSk7Ci0gICAgcmV0
dXJuIHBhcmFtZXRlcnM7CisgICAgcmV0dXJuIFdURjo6bWFwKGFsbERhdGFTdG9yZXMoKSwgW10o
YXV0byYgZW50cnkpIHsKKyAgICAgICAgcmV0dXJuIGVudHJ5LnZhbHVlLT5wYXJhbWV0ZXJzKCk7
CisgICAgfSk7CiB9CiAKIFdlYnNpdGVEYXRhU3RvcmVQYXJhbWV0ZXJzIFdlYnNpdGVEYXRhU3Rv
cmU6OnBhcmFtZXRlcnMoKQpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYktpdC9VSVByb2Nlc3MvbWFj
L1dLVGV4dEZpbmRlckNsaWVudC5tbSBiL1NvdXJjZS9XZWJLaXQvVUlQcm9jZXNzL21hYy9XS1Rl
eHRGaW5kZXJDbGllbnQubW0KaW5kZXggYzAzN2Q2NWIyYmMwZjNjMGExZWExMjZlZmQyMTgyN2Rh
MjFhYWJiOS4uNzIwNzVmYmM4NjJjMzRkMGM4NmI0YWM1MzhlNGM0NjY5OWNiZWU0MiAxMDA2NDQK
LS0tIGEvU291cmNlL1dlYktpdC9VSVByb2Nlc3MvbWFjL1dLVGV4dEZpbmRlckNsaWVudC5tbQor
KysgYi9Tb3VyY2UvV2ViS2l0L1VJUHJvY2Vzcy9tYWMvV0tUZXh0RmluZGVyQ2xpZW50Lm1tCkBA
IC0xOTEsNyArMTkxLDcgQEAgLSAodm9pZCl3aWxsRGVzdHJveVZpZXc6KE5TVmlldyAqKXZpZXcK
IC0gKHZvaWQpcmVwbGFjZU1hdGNoZXM6KE5TQXJyYXkgKiltYXRjaGVzIHdpdGhTdHJpbmc6KE5T
U3RyaW5nICopcmVwbGFjZW1lbnRUZXh0IGluU2VsZWN0aW9uT25seTooQk9PTClzZWxlY3Rpb25P
bmx5IHJlc3VsdENvbGxlY3Rvcjoodm9pZCAoXikoTlNVSW50ZWdlciByZXBsYWNlbWVudENvdW50
KSlyZXN1bHRDb2xsZWN0b3IKIHsKICAgICBWZWN0b3I8dWludDMyX3Q+IG1hdGNoSW5kaWNlczsK
LSAgICBtYXRjaEluZGljZXMucmVzZXJ2ZUNhcGFjaXR5KG1hdGNoZXMuY291bnQpOworICAgIG1h
dGNoSW5kaWNlcy5yZXNlcnZlSW5pdGlhbENhcGFjaXR5KG1hdGNoZXMuY291bnQpOwogICAgIGZv
ciAoaWQgbWF0Y2ggaW4gbWF0Y2hlcykgewogICAgICAgICBpZiAoW21hdGNoIGlzS2luZE9mQ2xh
c3M6V0tUZXh0RmluZGVyTWF0Y2guY2xhc3NdKQogICAgICAgICAgICAgbWF0Y2hJbmRpY2VzLnVu
Y2hlY2tlZEFwcGVuZChbKFdLVGV4dEZpbmRlck1hdGNoICopbWF0Y2ggaW5kZXhdKTsKZGlmZiAt
LWdpdCBhL1NvdXJjZS9XZWJLaXQvV2ViUHJvY2Vzcy9HUFUvbWVkaWEvUmVtb3RlUmVtb3RlQ29t
bWFuZExpc3RlbmVyLmNwcCBiL1NvdXJjZS9XZWJLaXQvV2ViUHJvY2Vzcy9HUFUvbWVkaWEvUmVt
b3RlUmVtb3RlQ29tbWFuZExpc3RlbmVyLmNwcAppbmRleCA3NzEwYTNhNDQxMDAxYWZjNmRmZDBj
ZGQyNWNhM2I4ZWVmN2E4ZmFlLi4xMDMwNDgyMWQ4NzkzNmMwZjdlODUwNDUyMTc5MGMzN2IyNTRm
NjEwIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViS2l0L1dlYlByb2Nlc3MvR1BVL21lZGlhL1JlbW90
ZVJlbW90ZUNvbW1hbmRMaXN0ZW5lci5jcHAKKysrIGIvU291cmNlL1dlYktpdC9XZWJQcm9jZXNz
L0dQVS9tZWRpYS9SZW1vdGVSZW1vdGVDb21tYW5kTGlzdGVuZXIuY3BwCkBAIC05NCwxMiArOTQs
NyBAQCB2b2lkIFJlbW90ZVJlbW90ZUNvbW1hbmRMaXN0ZW5lcjo6dXBkYXRlU3VwcG9ydGVkQ29t
bWFuZHMoKQogICAgIG1fY3VycmVudENvbW1hbmRzID0gc3VwcG9ydGVkQ29tbWFuZHM7CiAgICAg
bV9jdXJyZW50U3VwcG9ydFNlZWtpbmcgPSBzdXBwb3J0c1NlZWtpbmcoKTsKIAotICAgIFZlY3Rv
cjxQbGF0Zm9ybU1lZGlhU2Vzc2lvbjo6UmVtb3RlQ29udHJvbENvbW1hbmRUeXBlPiBjb21tYW5k
czsKLSAgICBjb21tYW5kcy5yZXNlcnZlSW5pdGlhbENhcGFjaXR5KHN1cHBvcnRlZENvbW1hbmRz
LnNpemUoKSk7Ci0gICAgZm9yIChhdXRvIGNvbW1hbmQgOiBzdXBwb3J0ZWRDb21tYW5kcykKLSAg
ICAgICAgY29tbWFuZHMudW5jaGVja2VkQXBwZW5kKGNvbW1hbmQpOwotCi0gICAgZW5zdXJlR1BV
UHJvY2Vzc0Nvbm5lY3Rpb24oKS5jb25uZWN0aW9uKCkuc2VuZChNZXNzYWdlczo6UmVtb3RlUmVt
b3RlQ29tbWFuZExpc3RlbmVyUHJveHk6OlVwZGF0ZVN1cHBvcnRlZENvbW1hbmRzIHsgV1RGTW92
ZShjb21tYW5kcyksIG1fY3VycmVudFN1cHBvcnRTZWVraW5nIH0sIG1faWRlbnRpZmllcik7Cisg
ICAgZW5zdXJlR1BVUHJvY2Vzc0Nvbm5lY3Rpb24oKS5jb25uZWN0aW9uKCkuc2VuZChNZXNzYWdl
czo6UmVtb3RlUmVtb3RlQ29tbWFuZExpc3RlbmVyUHJveHk6OlVwZGF0ZVN1cHBvcnRlZENvbW1h
bmRzIHsgY29weVRvVmVjdG9yKHN1cHBvcnRlZENvbW1hbmRzKSwgbV9jdXJyZW50U3VwcG9ydFNl
ZWtpbmcgfSwgbV9pZGVudGlmaWVyKTsKIH0KIAogfQpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYktp
dC9XZWJQcm9jZXNzL0luamVjdGVkQnVuZGxlL0FQSS9jL1dLQnVuZGxlUGFnZS5jcHAgYi9Tb3Vy
Y2UvV2ViS2l0L1dlYlByb2Nlc3MvSW5qZWN0ZWRCdW5kbGUvQVBJL2MvV0tCdW5kbGVQYWdlLmNw
cAppbmRleCAyN2Y2NDQwMGRhMzYyYWFlNmZiODIyNTM0MTJmZmM5ZmEzYTMxYmRhLi5jOGJjZjE0
N2I1ZWY1MTQyZTI4ZmQ0YmQyNjBkNzQ2NTNmNTA4NThiIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2Vi
S2l0L1dlYlByb2Nlc3MvSW5qZWN0ZWRCdW5kbGUvQVBJL2MvV0tCdW5kbGVQYWdlLmNwcAorKysg
Yi9Tb3VyY2UvV2ViS2l0L1dlYlByb2Nlc3MvSW5qZWN0ZWRCdW5kbGUvQVBJL2MvV0tCdW5kbGVQ
YWdlLmNwcApAQCAtMTg3LDE0ICsxODcsOSBAQCB2b2lkIFdLQnVuZGxlUGFnZUNsaWNrTWVudUl0
ZW0oV0tCdW5kbGVQYWdlUmVmIHBhZ2VSZWYsIFdLQ29udGV4dE1lbnVJdGVtUmVmIGl0ZQogI2lm
IEVOQUJMRShDT05URVhUX01FTlVTKQogc3RhdGljIFJlZjxBUEk6OkFycmF5PiBjb250ZXh0TWVu
dUl0ZW1zKGNvbnN0IFdlYktpdDo6V2ViQ29udGV4dE1lbnUmIGNvbnRleHRNZW51KQogewotICAg
IGF1dG8gaXRlbXMgPSBjb250ZXh0TWVudS5pdGVtcygpOwotCi0gICAgVmVjdG9yPFJlZlB0cjxB
UEk6Ok9iamVjdD4+IG1lbnVJdGVtczsKLSAgICBtZW51SXRlbXMucmVzZXJ2ZUluaXRpYWxDYXBh
Y2l0eShpdGVtcy5zaXplKCkpOwotCi0gICAgZm9yIChjb25zdCBhdXRvJiBpdGVtIDogaXRlbXMp
Ci0gICAgICAgIG1lbnVJdGVtcy51bmNoZWNrZWRBcHBlbmQoV2ViS2l0OjpXZWJDb250ZXh0TWVu
dUl0ZW06OmNyZWF0ZShpdGVtKSk7Ci0KKyAgICBhdXRvIG1lbnVJdGVtcyA9IGNvbnRleHRNZW51
Lml0ZW1zKCkubWFwKFtdKGF1dG8mIGl0ZW0pIC0+IFJlZlB0cjxBUEk6Ok9iamVjdD4geworICAg
ICAgICByZXR1cm4gV2ViS2l0OjpXZWJDb250ZXh0TWVudUl0ZW06OmNyZWF0ZShpdGVtKTsKKyAg
ICB9KTsKICAgICByZXR1cm4gQVBJOjpBcnJheTo6Y3JlYXRlKFdURk1vdmUobWVudUl0ZW1zKSk7
CiB9CiAjZW5kaWYKQEAgLTg0NSwxMyArODQwLDkgQEAgdm9pZCBXS0J1bmRsZVBhZ2VSZXNldEFw
cGxpY2F0aW9uQ2FjaGVPcmlnaW5RdW90YShXS0J1bmRsZVBhZ2VSZWYgcGFnZSwgV0tTdHJpbmcK
IFdLQXJyYXlSZWYgV0tCdW5kbGVQYWdlQ29weU9yaWdpbnNXaXRoQXBwbGljYXRpb25DYWNoZShX
S0J1bmRsZVBhZ2VSZWYgcGFnZSkKIHsKICAgICBhdXRvIG9yaWdpbnMgPSBXZWJLaXQ6OnRvSW1w
bChwYWdlKS0+Y29yZVBhZ2UoKS0+YXBwbGljYXRpb25DYWNoZVN0b3JhZ2UoKS5vcmlnaW5zV2l0
aENhY2hlKCk7Ci0KLSAgICBWZWN0b3I8UmVmUHRyPEFQSTo6T2JqZWN0Pj4gb3JpZ2luSWRlbnRp
ZmllcnM7Ci0gICAgb3JpZ2luSWRlbnRpZmllcnMucmVzZXJ2ZUluaXRpYWxDYXBhY2l0eShvcmln
aW5zLnNpemUoKSk7Ci0KLSAgICBmb3IgKGNvbnN0IGF1dG8mIG9yaWdpbiA6IG9yaWdpbnMpCi0g
ICAgICAgIG9yaWdpbklkZW50aWZpZXJzLnVuY2hlY2tlZEFwcGVuZChBUEk6OlN0cmluZzo6Y3Jl
YXRlKG9yaWdpbi5kYXRhYmFzZUlkZW50aWZpZXIoKSkpOwotCisgICAgYXV0byBvcmlnaW5JZGVu
dGlmaWVycyA9IFdURjo6bWFwKG9yaWdpbnMsIFtdKGF1dG8mIG9yaWdpbikgLT4gUmVmUHRyPEFQ
STo6T2JqZWN0PiB7CisgICAgICAgIHJldHVybiBBUEk6OlN0cmluZzo6Y3JlYXRlKG9yaWdpbi5k
YXRhYmFzZUlkZW50aWZpZXIoKSk7CisgICAgfSk7CiAgICAgcmV0dXJuIFdlYktpdDo6dG9BUEko
JkFQSTo6QXJyYXk6OmNyZWF0ZShXVEZNb3ZlKG9yaWdpbklkZW50aWZpZXJzKSkubGVha1JlZigp
KTsKIH0KIApkaWZmIC0tZ2l0IGEvU291cmNlL1dlYktpdC9XZWJQcm9jZXNzL0luamVjdGVkQnVu
ZGxlL0luamVjdGVkQnVuZGxlUGFnZUNvbnRleHRNZW51Q2xpZW50LmNwcCBiL1NvdXJjZS9XZWJL
aXQvV2ViUHJvY2Vzcy9JbmplY3RlZEJ1bmRsZS9JbmplY3RlZEJ1bmRsZVBhZ2VDb250ZXh0TWVu
dUNsaWVudC5jcHAKaW5kZXggOTA1YjY2ZTY1YWNkZTYxMmZmODFlYzJhZDQ0ZWY4ODU1ZDdhZTJk
OC4uZDI3ZGM0YTAxM2YxYWVjOGU3N2I2MDBkMmRkYzdjMGRhZTcxZjczNiAxMDA2NDQKLS0tIGEv
U291cmNlL1dlYktpdC9XZWJQcm9jZXNzL0luamVjdGVkQnVuZGxlL0luamVjdGVkQnVuZGxlUGFn
ZUNvbnRleHRNZW51Q2xpZW50LmNwcAorKysgYi9Tb3VyY2UvV2ViS2l0L1dlYlByb2Nlc3MvSW5q
ZWN0ZWRCdW5kbGUvSW5qZWN0ZWRCdW5kbGVQYWdlQ29udGV4dE1lbnVDbGllbnQuY3BwCkBAIC01
MSwxMSArNTEsOSBAQCBib29sIEluamVjdGVkQnVuZGxlUGFnZUNvbnRleHRNZW51Q2xpZW50Ojpn
ZXRDdXN0b21NZW51RnJvbURlZmF1bHRJdGVtcyhXZWJQYWdlJgogICAgIGlmICghbV9jbGllbnQu
Z2V0Q29udGV4dE1lbnVGcm9tRGVmYXVsdE1lbnUpCiAgICAgICAgIHJldHVybiBmYWxzZTsKIAot
ICAgIFZlY3RvcjxXZWJDb250ZXh0TWVudUl0ZW1EYXRhPiBkZWZhdWx0TWVudSA9IGtpdEl0ZW1z
KHByb3Bvc2VkTWVudSk7Ci0gICAgVmVjdG9yPFJlZlB0cjxBUEk6Ok9iamVjdD4+IGRlZmF1bHRN
ZW51SXRlbXM7Ci0gICAgZGVmYXVsdE1lbnVJdGVtcy5yZXNlcnZlSW5pdGlhbENhcGFjaXR5KGRl
ZmF1bHRNZW51LnNpemUoKSk7Ci0gICAgZm9yIChjb25zdCBhdXRvJiBpdGVtIDogZGVmYXVsdE1l
bnUpCi0gICAgICAgIGRlZmF1bHRNZW51SXRlbXMudW5jaGVja2VkQXBwZW5kKFdlYkNvbnRleHRN
ZW51SXRlbTo6Y3JlYXRlKGl0ZW0pKTsKKyAgICBhdXRvIGRlZmF1bHRNZW51SXRlbXMgPSBraXRJ
dGVtcyhwcm9wb3NlZE1lbnUpLm1hcChbXShhdXRvJiBpdGVtKSAtPiBSZWZQdHI8QVBJOjpPYmpl
Y3Q+IHsKKyAgICAgICAgcmV0dXJuIFdlYkNvbnRleHRNZW51SXRlbTo6Y3JlYXRlKGl0ZW0pOwor
ICAgIH0pOwogCiAgICAgV0tBcnJheVJlZiBuZXdNZW51V0sgPSBudWxscHRyOwogICAgIFdLVHlw
ZVJlZiB1c2VyRGF0YVRvUGFzcyA9IG51bGxwdHI7CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViS2l0
L1dlYlByb2Nlc3MvSW5qZWN0ZWRCdW5kbGUvSW5qZWN0ZWRCdW5kbGVQYWdlRm9ybUNsaWVudC5j
cHAgYi9Tb3VyY2UvV2ViS2l0L1dlYlByb2Nlc3MvSW5qZWN0ZWRCdW5kbGUvSW5qZWN0ZWRCdW5k
bGVQYWdlRm9ybUNsaWVudC5jcHAKaW5kZXggMTBmOGZlZjkyNzllYzU1YTMyZjY1NGRkNzkzNDQ4
OGEwNjA3NTE4Mi4uMWQ4NjI1Mjc0M2U4NDBjYTk5YjZkMzJmZDczZGMwNGNmZGI5YjdmYyAxMDA2
NDQKLS0tIGEvU291cmNlL1dlYktpdC9XZWJQcm9jZXNzL0luamVjdGVkQnVuZGxlL0luamVjdGVk
QnVuZGxlUGFnZUZvcm1DbGllbnQuY3BwCisrKyBiL1NvdXJjZS9XZWJLaXQvV2ViUHJvY2Vzcy9J
bmplY3RlZEJ1bmRsZS9JbmplY3RlZEJ1bmRsZVBhZ2VGb3JtQ2xpZW50LmNwcApAQCAtMTYyLDEy
ICsxNjIsOSBAQCB2b2lkIEluamVjdGVkQnVuZGxlUGFnZUZvcm1DbGllbnQ6OmRpZEFzc29jaWF0
ZUZvcm1Db250cm9scyhXZWJQYWdlKiBwYWdlLCBjb25zdAogICAgIGlmICghbV9jbGllbnQuZGlk
QXNzb2NpYXRlRm9ybUNvbnRyb2xzICYmICFtX2NsaWVudC5kaWRBc3NvY2lhdGVGb3JtQ29udHJv
bHNGb3JGcmFtZSkKICAgICAgICAgcmV0dXJuOwogCi0gICAgVmVjdG9yPFJlZlB0cjxBUEk6Ok9i
amVjdD4+IGVsZW1lbnRIYW5kbGVzOwotICAgIGVsZW1lbnRIYW5kbGVzLnJlc2VydmVJbml0aWFs
Q2FwYWNpdHkoZWxlbWVudHMuc2l6ZSgpKTsKLQotICAgIGZvciAoY29uc3QgYXV0byYgZWxlbWVu
dCA6IGVsZW1lbnRzKQotICAgICAgICBlbGVtZW50SGFuZGxlcy51bmNoZWNrZWRBcHBlbmQoSW5q
ZWN0ZWRCdW5kbGVOb2RlSGFuZGxlOjpnZXRPckNyZWF0ZShlbGVtZW50LmdldCgpKSk7Ci0KKyAg
ICBhdXRvIGVsZW1lbnRIYW5kbGVzID0gZWxlbWVudHMubWFwKFtdKGF1dG8mIGVsZW1lbnQpIC0+
IFJlZlB0cjxBUEk6Ok9iamVjdD4geworICAgICAgICByZXR1cm4gSW5qZWN0ZWRCdW5kbGVOb2Rl
SGFuZGxlOjpnZXRPckNyZWF0ZShlbGVtZW50LmdldCgpKTsKKyAgICB9KTsKICAgICBpZiAoIW1f
Y2xpZW50LmRpZEFzc29jaWF0ZUZvcm1Db250cm9sc0ZvckZyYW1lKSB7CiAgICAgICAgIG1fY2xp
ZW50LmRpZEFzc29jaWF0ZUZvcm1Db250cm9scyh0b0FQSShwYWdlKSwgdG9BUEkoQVBJOjpBcnJh
eTo6Y3JlYXRlKFdURk1vdmUoZWxlbWVudEhhbmRsZXMpKS5wdHIoKSksIG1fY2xpZW50LmJhc2Uu
Y2xpZW50SW5mbyk7CiAgICAgICAgIHJldHVybjsKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJLaXQv
V2ViUHJvY2Vzcy9OZXR3b3JrL1dlYlNvY2tldFN0cmVhbS5jcHAgYi9Tb3VyY2UvV2ViS2l0L1dl
YlByb2Nlc3MvTmV0d29yay9XZWJTb2NrZXRTdHJlYW0uY3BwCmluZGV4IDA1YjRkNzU5Mjc2Mjgy
MjZlYjQwNDY4ZTg1MWQwMzI2YTk1YTNiNTUuLmNlYmQ5N2FhZDhjYWIyNWY2Y2VkZTBlM2U3MDc5
NWZjZjcyNzAzNGUgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJLaXQvV2ViUHJvY2Vzcy9OZXR3b3Jr
L1dlYlNvY2tldFN0cmVhbS5jcHAKKysrIGIvU291cmNlL1dlYktpdC9XZWJQcm9jZXNzL05ldHdv
cmsvV2ViU29ja2V0U3RyZWFtLmNwcApAQCAtNTgsOSArNTgsNyBAQCB2b2lkIFdlYlNvY2tldFN0
cmVhbTo6bmV0d29ya1Byb2Nlc3NDcmFzaGVkKCkKICAgICBWZWN0b3I8UmVmUHRyPFdlYlNvY2tl
dFN0cmVhbT4+IHNvY2tldHM7CiAgICAgewogICAgICAgICBMb2NrZXIgc3RhdGVMb2NrZXIgeyBn
bG9iYWxXZWJTb2NrZXRTdHJlYW1NYXBMb2NrIH07Ci0gICAgICAgIHNvY2tldHMucmVzZXJ2ZUlu
aXRpYWxDYXBhY2l0eShnbG9iYWxXZWJTb2NrZXRTdHJlYW1NYXAoKS5zaXplKCkpOwotICAgICAg
ICBmb3IgKGF1dG8mIHN0cmVhbSA6IGdsb2JhbFdlYlNvY2tldFN0cmVhbU1hcCgpLnZhbHVlcygp
KQotICAgICAgICAgICAgc29ja2V0cy51bmNoZWNrZWRBcHBlbmQoc3RyZWFtKTsKKyAgICAgICAg
c29ja2V0cyA9IGNvcHlUb1ZlY3Rvck9mPFJlZlB0cjxXZWJTb2NrZXRTdHJlYW0+PihnbG9iYWxX
ZWJTb2NrZXRTdHJlYW1NYXAoKS52YWx1ZXMoKSk7CiAgICAgfQogCiAgICAgZm9yIChhdXRvJiBz
dHJlYW0gOiBzb2NrZXRzKSB7CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViS2l0L1dlYlByb2Nlc3Mv
TmV0d29yay93ZWJydGMvV2ViUlRDUmVzb2x2ZXIuY3BwIGIvU291cmNlL1dlYktpdC9XZWJQcm9j
ZXNzL05ldHdvcmsvd2VicnRjL1dlYlJUQ1Jlc29sdmVyLmNwcAppbmRleCA3NDdiMTZiNjBhMjRk
OGUzNDBhNDFlNmVmZjM4NTE1YjNhMmMyZWNlLi42N2JlZTBiZDE4NjU4OGE5YmY4YzM2ZTQ3M2Ri
MjI1N2NhYzQ3OGU1IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViS2l0L1dlYlByb2Nlc3MvTmV0d29y
ay93ZWJydGMvV2ViUlRDUmVzb2x2ZXIuY3BwCisrKyBiL1NvdXJjZS9XZWJLaXQvV2ViUHJvY2Vz
cy9OZXR3b3JrL3dlYnJ0Yy9XZWJSVENSZXNvbHZlci5jcHAKQEAgLTQ2LDExICs0Niw5IEBAIHZv
aWQgV2ViUlRDUmVzb2x2ZXI6OnNldFJlc29sdmVkQWRkcmVzcyhjb25zdCBWZWN0b3I8UlRDTmV0
d29yazo6SVBBZGRyZXNzPiYgYWRkCiAgICAgYXV0byBpZGVudGlmaWVyID0gbV9pZGVudGlmaWVy
OwogICAgIGF1dG8mIGZhY3RvcnkgPSBtX3NvY2tldEZhY3Rvcnk7CiAKLSAgICBWZWN0b3I8cnRj
OjpJUEFkZHJlc3M+IHJ0Y0FkZHJlc3NlczsKLSAgICBydGNBZGRyZXNzZXMucmVzZXJ2ZUluaXRp
YWxDYXBhY2l0eShhZGRyZXNzZXMuc2l6ZSgpKTsKLSAgICBmb3IgKGF1dG8mIGFkZHJlc3MgOiBh
ZGRyZXNzZXMpCi0gICAgICAgIHJ0Y0FkZHJlc3Nlcy51bmNoZWNrZWRBcHBlbmQoYWRkcmVzcy52
YWx1ZSk7Ci0gICAgCisgICAgYXV0byBydGNBZGRyZXNzZXMgPSBhZGRyZXNzZXMubWFwKFtdKGF1
dG8mIGFkZHJlc3MpIHsKKyAgICAgICAgcmV0dXJuIGFkZHJlc3MudmFsdWU7CisgICAgfSk7CiAg
ICAgV2ViQ29yZTo6TGliV2ViUlRDUHJvdmlkZXI6OmNhbGxPbldlYlJUQ05ldHdvcmtUaHJlYWQo
WyZmYWN0b3J5LCBpZGVudGlmaWVyLCBydGNBZGRyZXNzZXMgPSBXVEZNb3ZlKHJ0Y0FkZHJlc3Nl
cyldKCkgewogICAgICAgICBhdXRvKiByZXNvbHZlciA9IGZhY3RvcnkucmVzb2x2ZXIoaWRlbnRp
Zmllcik7CiAgICAgICAgIGlmICghcmVzb2x2ZXIpCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViS2l0
L1dlYlByb2Nlc3MvV2ViQ29yZVN1cHBvcnQvV2ViUmVzb3VyY2VMb2FkT2JzZXJ2ZXIuY3BwIGIv
U291cmNlL1dlYktpdC9XZWJQcm9jZXNzL1dlYkNvcmVTdXBwb3J0L1dlYlJlc291cmNlTG9hZE9i
c2VydmVyLmNwcAppbmRleCAzZWYxNGRkMjNiOWM3YWVhYjViMDY5ZGJhMTVlN2I1N2ExMDIxM2Iz
Li4yMjQyOTkzZWU3NzExOGQwMDk3N2RiMzZlMDNjODM4MGU4MDU1OGI1IDEwMDY0NAotLS0gYS9T
b3VyY2UvV2ViS2l0L1dlYlByb2Nlc3MvV2ViQ29yZVN1cHBvcnQvV2ViUmVzb3VyY2VMb2FkT2Jz
ZXJ2ZXIuY3BwCisrKyBiL1NvdXJjZS9XZWJLaXQvV2ViUHJvY2Vzcy9XZWJDb3JlU3VwcG9ydC9X
ZWJSZXNvdXJjZUxvYWRPYnNlcnZlci5jcHAKQEAgLTEyNywxMiArMTI3LDkgQEAgU3RyaW5nIFdl
YlJlc291cmNlTG9hZE9ic2VydmVyOjpzdGF0aXN0aWNzRm9yVVJMKGNvbnN0IFVSTCYgdXJsKQog
CiBWZWN0b3I8UmVzb3VyY2VMb2FkU3RhdGlzdGljcz4gV2ViUmVzb3VyY2VMb2FkT2JzZXJ2ZXI6
OnRha2VTdGF0aXN0aWNzKCkKIHsKLSAgICBWZWN0b3I8UmVzb3VyY2VMb2FkU3RhdGlzdGljcz4g
c3RhdGlzdGljczsKLSAgICBzdGF0aXN0aWNzLnJlc2VydmVJbml0aWFsQ2FwYWNpdHkobV9yZXNv
dXJjZVN0YXRpc3RpY3NNYXAuc2l6ZSgpKTsKLSAgICBmb3IgKGF1dG8mIHN0YXRpc3RpYyA6IG1f
cmVzb3VyY2VTdGF0aXN0aWNzTWFwLnZhbHVlcygpKQotICAgICAgICBzdGF0aXN0aWNzLnVuY2hl
Y2tlZEFwcGVuZChSZXNvdXJjZUxvYWRTdGF0aXN0aWNzKFdURk1vdmUoKnN0YXRpc3RpYykpKTsK
LSAgICBtX3Jlc291cmNlU3RhdGlzdGljc01hcC5jbGVhcigpOwotICAgIHJldHVybiBzdGF0aXN0
aWNzOworICAgIHJldHVybiBXVEY6Om1hcChzdGQ6OmV4Y2hhbmdlKG1fcmVzb3VyY2VTdGF0aXN0
aWNzTWFwLCB7IH0pLCBbXShhdXRvJiYgZW50cnkpIHsKKyAgICAgICAgcmV0dXJuIFJlc291cmNl
TG9hZFN0YXRpc3RpY3MgeyBXVEZNb3ZlKCplbnRyeS52YWx1ZSkgfTsKKyAgICB9KTsKIH0KIAog
dm9pZCBXZWJSZXNvdXJjZUxvYWRPYnNlcnZlcjo6Y2xlYXJTdGF0ZSgpCmRpZmYgLS1naXQgYS9T
b3VyY2UvV2ViS2l0L1dlYlByb2Nlc3MvV2ViUGFnZS9GaW5kQ29udHJvbGxlci5jcHAgYi9Tb3Vy
Y2UvV2ViS2l0L1dlYlByb2Nlc3MvV2ViUGFnZS9GaW5kQ29udHJvbGxlci5jcHAKaW5kZXggYzUz
ZjNlYmY1OWQzZTllNzU2MjRjNTM5MDIyYzE1MmE4ZTQ1OTAyYi4uYjUxMzRkMGQyYzVkN2M1MmY2
ZmFjOTY4MDQ0MWFjYzNlZWJmNjVmZCAxMDA2NDQKLS0tIGEvU291cmNlL1dlYktpdC9XZWJQcm9j
ZXNzL1dlYlBhZ2UvRmluZENvbnRyb2xsZXIuY3BwCisrKyBiL1NvdXJjZS9XZWJLaXQvV2ViUHJv
Y2Vzcy9XZWJQYWdlL0ZpbmRDb250cm9sbGVyLmNwcApAQCAtOTgsNyArOTgsNyBAQCB1aW50MzJf
dCBGaW5kQ29udHJvbGxlcjo6cmVwbGFjZU1hdGNoZXMoY29uc3QgVmVjdG9yPHVpbnQzMl90PiYg
bWF0Y2hJbmRpY2VzLCBjbwogICAgIGNvbnN0IHVpbnQzMl90IG1heGltdW1OdW1iZXJPZk1hdGNo
ZXNUb1JlcGxhY2UgPSAxMDAwOwogCiAgICAgVmVjdG9yPFNpbXBsZVJhbmdlPiByYW5nZXNUb1Jl
cGxhY2U7Ci0gICAgcmFuZ2VzVG9SZXBsYWNlLnJlc2VydmVDYXBhY2l0eShzdGQ6Om1pbjx1aW50
MzJfdD4obWF4aW11bU51bWJlck9mTWF0Y2hlc1RvUmVwbGFjZSwgbWF0Y2hJbmRpY2VzLnNpemUo
KSkpOworICAgIHJhbmdlc1RvUmVwbGFjZS5yZXNlcnZlSW5pdGlhbENhcGFjaXR5KHN0ZDo6bWlu
PHVpbnQzMl90PihtYXhpbXVtTnVtYmVyT2ZNYXRjaGVzVG9SZXBsYWNlLCBtYXRjaEluZGljZXMu
c2l6ZSgpKSk7CiAgICAgZm9yIChhdXRvIGluZGV4IDogbWF0Y2hJbmRpY2VzKSB7CiAgICAgICAg
IGlmIChpbmRleCA8IG1fZmluZE1hdGNoZXMuc2l6ZSgpKQogICAgICAgICAgICAgcmFuZ2VzVG9S
ZXBsYWNlLnVuY2hlY2tlZEFwcGVuZChtX2ZpbmRNYXRjaGVzW2luZGV4XSk7CmRpZmYgLS1naXQg
YS9Tb3VyY2UvV2ViS2l0L1dlYlByb2Nlc3MvV2ViUGFnZS9SZW1vdGVMYXllclRyZWUvUGxhdGZv
cm1DQUFuaW1hdGlvblJlbW90ZS5tbSBiL1NvdXJjZS9XZWJLaXQvV2ViUHJvY2Vzcy9XZWJQYWdl
L1JlbW90ZUxheWVyVHJlZS9QbGF0Zm9ybUNBQW5pbWF0aW9uUmVtb3RlLm1tCmluZGV4IDBiYjc5
Mzk2MmJlMzRiYzI5MjM3MWEyMjUxNjkyOTBiNDYyMGQzNzguLmRlYjBlNTk2YmNjZjE0NTU5MWFj
ZGZmZjgyY2QwMzkzYzE1ODhjY2UgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJLaXQvV2ViUHJvY2Vz
cy9XZWJQYWdlL1JlbW90ZUxheWVyVHJlZS9QbGF0Zm9ybUNBQW5pbWF0aW9uUmVtb3RlLm1tCisr
KyBiL1NvdXJjZS9XZWJLaXQvV2ViUHJvY2Vzcy9XZWJQYWdlL1JlbW90ZUxheWVyVHJlZS9QbGF0
Zm9ybUNBQW5pbWF0aW9uUmVtb3RlLm1tCkBAIC05OCw2ICs5OCwxMyBAQCBAZW5kCiBuYW1lc3Bh
Y2UgV2ViS2l0IHsKIHVzaW5nIG5hbWVzcGFjZSBXZWJDb3JlOwogCit0ZW1wbGF0ZTx0eXBlbmFt
ZSBUPiBzdGF0aWMgVmVjdG9yPFBsYXRmb3JtQ0FBbmltYXRpb25SZW1vdGU6OktleWZyYW1lVmFs
dWU+IHRvS2V5ZnJhbWVWYWx1ZVZlY3Rvcihjb25zdCBWZWN0b3I8VD4mIHZhbHVlcykKK3sKKyAg
ICByZXR1cm4gdmFsdWVzLm1hcChbXShhdXRvJiB2YWx1ZSkgeworICAgICAgICByZXR1cm4gUGxh
dGZvcm1DQUFuaW1hdGlvblJlbW90ZTo6S2V5ZnJhbWVWYWx1ZSB7IHZhbHVlIH07CisgICAgfSk7
Cit9CisKIHN0YXRpYyB2b2lkIGVuY29kZVRpbWluZ0Z1bmN0aW9uKElQQzo6RW5jb2RlciYgZW5j
b2RlciwgVGltaW5nRnVuY3Rpb24qIHRpbWluZ0Z1bmN0aW9uKQogewogICAgIHN3aXRjaCAodGlt
aW5nRnVuY3Rpb24tPnR5cGUoKSkgewpAQCAtNTYxLDEzICs1NjgsNyBAQCB2b2lkIFBsYXRmb3Jt
Q0FBbmltYXRpb25SZW1vdGU6OnNldFZhbHVlcyhjb25zdCBWZWN0b3I8ZmxvYXQ+JiB2YWx1ZXMp
CiAgICAgaWYgKGFuaW1hdGlvblR5cGUoKSAhPSBLZXlmcmFtZSkKICAgICAgICAgcmV0dXJuOwog
Ci0gICAgVmVjdG9yPEtleWZyYW1lVmFsdWU+IGtleWZyYW1lczsKLSAgICBrZXlmcmFtZXMucmVz
ZXJ2ZUluaXRpYWxDYXBhY2l0eSh2YWx1ZXMuc2l6ZSgpKTsKLSAgICAKLSAgICBmb3IgKHNpemVf
dCBpID0gMDsgaSA8IHZhbHVlcy5zaXplKCk7ICsraSkKLSAgICAgICAga2V5ZnJhbWVzLnVuY2hl
Y2tlZEFwcGVuZChLZXlmcmFtZVZhbHVlKHZhbHVlc1tpXSkpOwotICAgIAotICAgIG1fcHJvcGVy
dGllcy5rZXlWYWx1ZXMgPSBXVEZNb3ZlKGtleWZyYW1lcyk7CisgICAgbV9wcm9wZXJ0aWVzLmtl
eVZhbHVlcyA9IHRvS2V5ZnJhbWVWYWx1ZVZlY3Rvcih2YWx1ZXMpOwogfQogCiB2b2lkIFBsYXRm
b3JtQ0FBbmltYXRpb25SZW1vdGU6OnNldFZhbHVlcyhjb25zdCBWZWN0b3I8VHJhbnNmb3JtYXRp
b25NYXRyaXg+JiB2YWx1ZXMpCkBAIC01NzUsMTMgKzU3Niw3IEBAIHZvaWQgUGxhdGZvcm1DQUFu
aW1hdGlvblJlbW90ZTo6c2V0VmFsdWVzKGNvbnN0IFZlY3RvcjxUcmFuc2Zvcm1hdGlvbk1hdHJp
eD4mIHZhCiAgICAgaWYgKGFuaW1hdGlvblR5cGUoKSAhPSBLZXlmcmFtZSkKICAgICAgICAgcmV0
dXJuOwogCi0gICAgVmVjdG9yPEtleWZyYW1lVmFsdWU+IGtleWZyYW1lczsKLSAgICBrZXlmcmFt
ZXMucmVzZXJ2ZUluaXRpYWxDYXBhY2l0eSh2YWx1ZXMuc2l6ZSgpKTsKLSAgICAKLSAgICBmb3Ig
KHNpemVfdCBpID0gMDsgaSA8IHZhbHVlcy5zaXplKCk7ICsraSkKLSAgICAgICAga2V5ZnJhbWVz
LnVuY2hlY2tlZEFwcGVuZChLZXlmcmFtZVZhbHVlKHZhbHVlc1tpXSkpOwotICAgIAotICAgIG1f
cHJvcGVydGllcy5rZXlWYWx1ZXMgPSBXVEZNb3ZlKGtleWZyYW1lcyk7CisgICAgbV9wcm9wZXJ0
aWVzLmtleVZhbHVlcyA9IHRvS2V5ZnJhbWVWYWx1ZVZlY3Rvcih2YWx1ZXMpOwogfQogCiB2b2lk
IFBsYXRmb3JtQ0FBbmltYXRpb25SZW1vdGU6OnNldFZhbHVlcyhjb25zdCBWZWN0b3I8RmxvYXRQ
b2ludDNEPiYgdmFsdWVzKQpAQCAtNTg5LDEzICs1ODQsNyBAQCB2b2lkIFBsYXRmb3JtQ0FBbmlt
YXRpb25SZW1vdGU6OnNldFZhbHVlcyhjb25zdCBWZWN0b3I8RmxvYXRQb2ludDNEPiYgdmFsdWVz
KQogICAgIGlmIChhbmltYXRpb25UeXBlKCkgIT0gS2V5ZnJhbWUpCiAgICAgICAgIHJldHVybjsK
IAotICAgIFZlY3RvcjxLZXlmcmFtZVZhbHVlPiBrZXlmcmFtZXM7Ci0gICAga2V5ZnJhbWVzLnJl
c2VydmVJbml0aWFsQ2FwYWNpdHkodmFsdWVzLnNpemUoKSk7Ci0gICAgCi0gICAgZm9yIChzaXpl
X3QgaSA9IDA7IGkgPCB2YWx1ZXMuc2l6ZSgpOyArK2kpCi0gICAgICAgIGtleWZyYW1lcy51bmNo
ZWNrZWRBcHBlbmQoS2V5ZnJhbWVWYWx1ZSh2YWx1ZXNbaV0pKTsKLSAgICAKLSAgICBtX3Byb3Bl
cnRpZXMua2V5VmFsdWVzID0gV1RGTW92ZShrZXlmcmFtZXMpOworICAgIG1fcHJvcGVydGllcy5r
ZXlWYWx1ZXMgPSB0b0tleWZyYW1lVmFsdWVWZWN0b3IodmFsdWVzKTsKIH0KIAogdm9pZCBQbGF0
Zm9ybUNBQW5pbWF0aW9uUmVtb3RlOjpzZXRWYWx1ZXMoY29uc3QgVmVjdG9yPENvbG9yPiYgdmFs
dWVzKQpAQCAtNjAzLDEzICs1OTIsNyBAQCB2b2lkIFBsYXRmb3JtQ0FBbmltYXRpb25SZW1vdGU6
OnNldFZhbHVlcyhjb25zdCBWZWN0b3I8Q29sb3I+JiB2YWx1ZXMpCiAgICAgaWYgKGFuaW1hdGlv
blR5cGUoKSAhPSBLZXlmcmFtZSkKICAgICAgICAgcmV0dXJuOwogCi0gICAgVmVjdG9yPEtleWZy
YW1lVmFsdWU+IGtleWZyYW1lczsKLSAgICBrZXlmcmFtZXMucmVzZXJ2ZUluaXRpYWxDYXBhY2l0
eSh2YWx1ZXMuc2l6ZSgpKTsKLSAgICAKLSAgICBmb3IgKHNpemVfdCBpID0gMDsgaSA8IHZhbHVl
cy5zaXplKCk7ICsraSkKLSAgICAgICAga2V5ZnJhbWVzLnVuY2hlY2tlZEFwcGVuZChLZXlmcmFt
ZVZhbHVlKHZhbHVlc1tpXSkpOwotICAgIAotICAgIG1fcHJvcGVydGllcy5rZXlWYWx1ZXMgPSBX
VEZNb3ZlKGtleWZyYW1lcyk7CisgICAgbV9wcm9wZXJ0aWVzLmtleVZhbHVlcyA9IHRvS2V5ZnJh
bWVWYWx1ZVZlY3Rvcih2YWx1ZXMpOwogfQogCiB2b2lkIFBsYXRmb3JtQ0FBbmltYXRpb25SZW1v
dGU6OnNldFZhbHVlcyhjb25zdCBWZWN0b3I8UmVmUHRyPEZpbHRlck9wZXJhdGlvbj4+JiB2YWx1
ZXMsIGludCBpbnRlcm5hbEZpbHRlclByb3BlcnR5SW5kZXgpCkBAIC02MTksMTMgKzYwMiw3IEBA
IHZvaWQgUGxhdGZvcm1DQUFuaW1hdGlvblJlbW90ZTo6c2V0VmFsdWVzKGNvbnN0IFZlY3RvcjxS
ZWZQdHI8RmlsdGVyT3BlcmF0aW9uPj4mCiAgICAgaWYgKGFuaW1hdGlvblR5cGUoKSAhPSBLZXlm
cmFtZSkKICAgICAgICAgcmV0dXJuOwogCi0gICAgVmVjdG9yPEtleWZyYW1lVmFsdWU+IGtleWZy
YW1lczsKLSAgICBrZXlmcmFtZXMucmVzZXJ2ZUluaXRpYWxDYXBhY2l0eSh2YWx1ZXMuc2l6ZSgp
KTsKLSAgICAKLSAgICBmb3IgKGF1dG8mIHZhbHVlIDogdmFsdWVzKQotICAgICAgICBrZXlmcmFt
ZXMudW5jaGVja2VkQXBwZW5kKEtleWZyYW1lVmFsdWUgeyB2YWx1ZS5jb3B5UmVmKCkgfSk7Ci0g
ICAgCi0gICAgbV9wcm9wZXJ0aWVzLmtleVZhbHVlcyA9IFdURk1vdmUoa2V5ZnJhbWVzKTsKKyAg
ICBtX3Byb3BlcnRpZXMua2V5VmFsdWVzID0gdG9LZXlmcmFtZVZhbHVlVmVjdG9yKHZhbHVlcyk7
CiB9CiAKIHZvaWQgUGxhdGZvcm1DQUFuaW1hdGlvblJlbW90ZTo6Y29weVZhbHVlc0Zyb20oY29u
c3QgUGxhdGZvcm1DQUFuaW1hdGlvbiYgdmFsdWUpCkBAIC02NDUsMTMgKzYyMiw5IEBAIHZvaWQg
UGxhdGZvcm1DQUFuaW1hdGlvblJlbW90ZTo6Y29weUtleVRpbWVzRnJvbShjb25zdCBQbGF0Zm9y
bUNBQW5pbWF0aW9uJiB2YWx1CiAKIHZvaWQgUGxhdGZvcm1DQUFuaW1hdGlvblJlbW90ZTo6c2V0
VGltaW5nRnVuY3Rpb25zKGNvbnN0IFZlY3Rvcjxjb25zdCBUaW1pbmdGdW5jdGlvbio+JiB2YWx1
ZXMsIGJvb2wgcmV2ZXJzZSkKIHsKLSAgICBWZWN0b3I8UmVmUHRyPFdlYkNvcmU6OlRpbWluZ0Z1
bmN0aW9uPj4gdGltaW5nRnVuY3Rpb25zOwotICAgIHRpbWluZ0Z1bmN0aW9ucy5yZXNlcnZlSW5p
dGlhbENhcGFjaXR5KHZhbHVlcy5zaXplKCkpOwotICAgIAotICAgIGZvciAoc2l6ZV90IGkgPSAw
OyBpIDwgdmFsdWVzLnNpemUoKTsgKytpKQotICAgICAgICB0aW1pbmdGdW5jdGlvbnMudW5jaGVj
a2VkQXBwZW5kKHZhbHVlc1tpXS0+Y2xvbmUoKSk7Ci0gICAgCi0gICAgbV9wcm9wZXJ0aWVzLnRp
bWluZ0Z1bmN0aW9ucyA9IFdURk1vdmUodGltaW5nRnVuY3Rpb25zKTsKKyAgICBtX3Byb3BlcnRp
ZXMudGltaW5nRnVuY3Rpb25zID0gdmFsdWVzLm1hcChbXShhdXRvJiB2YWx1ZSkgLT4gUmVmUHRy
PFdlYkNvcmU6OlRpbWluZ0Z1bmN0aW9uPiB7CisgICAgICAgIHJldHVybiB2YWx1ZS0+Y2xvbmUo
KTsKKyAgICB9KTsKICAgICBtX3Byb3BlcnRpZXMucmV2ZXJzZVRpbWluZ0Z1bmN0aW9ucyA9IHJl
dmVyc2U7CiB9CiAKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJLaXQvV2ViUHJvY2Vzcy9XZWJQYWdl
L1ZpZXdHZXN0dXJlR2VvbWV0cnlDb2xsZWN0b3IuY3BwIGIvU291cmNlL1dlYktpdC9XZWJQcm9j
ZXNzL1dlYlBhZ2UvVmlld0dlc3R1cmVHZW9tZXRyeUNvbGxlY3Rvci5jcHAKaW5kZXggNmJkNzM4
NmZiYjhkNjJjZDM1M2IzZDJmMWExNjk5OWJiMmJkMTZjYi4uOWFlMjkzMTRmMmVjNDdjNDIxNDk3
YjkzZDFmMmQ1ZGE5Y2IxZmU5ZSAxMDA2NDQKLS0tIGEvU291cmNlL1dlYktpdC9XZWJQcm9jZXNz
L1dlYlBhZ2UvVmlld0dlc3R1cmVHZW9tZXRyeUNvbGxlY3Rvci5jcHAKKysrIGIvU291cmNlL1dl
YktpdC9XZWJQcm9jZXNzL1dlYlBhZ2UvVmlld0dlc3R1cmVHZW9tZXRyeUNvbGxlY3Rvci5jcHAK
QEAgLTE4MSwxMCArMTgxLDkgQEAgc3RkOjpvcHRpb25hbDxzdGQ6OnBhaXI8ZG91YmxlLCBkb3Vi
bGU+PiBWaWV3R2VzdHVyZUdlb21ldHJ5Q29sbGVjdG9yOjpjb21wdXRlVGUKICAgICAgICAgdG90
YWxTYW1wbGVkVGV4dExlbmd0aCArPSB0ZXh0TGVuZ3RoOwogICAgIH0KIAotICAgIFZlY3RvcjxG
b250U2l6ZUFuZENvdW50PiBzb3J0ZWRGb250U2l6ZXNBbmRDb3VudHM7Ci0gICAgc29ydGVkRm9u
dFNpemVzQW5kQ291bnRzLnJlc2VydmVDYXBhY2l0eShmb250U2l6ZVRvQ291bnRNYXAuc2l6ZSgp
KTsKLSAgICBmb3IgKGF1dG8mIGVudHJ5IDogZm9udFNpemVUb0NvdW50TWFwKQotICAgICAgICBz
b3J0ZWRGb250U2l6ZXNBbmRDb3VudHMuYXBwZW5kKHsgZW50cnkua2V5LCBlbnRyeS52YWx1ZSB9
KTsKKyAgICBhdXRvIHNvcnRlZEZvbnRTaXplc0FuZENvdW50cyA9IFdURjo6bWFwKGZvbnRTaXpl
VG9Db3VudE1hcCwgW10oYXV0byYgZW50cnkpIHsKKyAgICAgICAgcmV0dXJuIEZvbnRTaXplQW5k
Q291bnQgeyBlbnRyeS5rZXksIGVudHJ5LnZhbHVlIH07CisgICAgfSk7CiAKICAgICBzdGQ6OnNv
cnQoc29ydGVkRm9udFNpemVzQW5kQ291bnRzLmJlZ2luKCksIHNvcnRlZEZvbnRTaXplc0FuZENv
dW50cy5lbmQoKSwgW10gKGF1dG8mIGZpcnN0LCBhdXRvJiBzZWNvbmQpIHsKICAgICAgICAgcmV0
dXJuIGZpcnN0LmZvbnRTaXplIDwgc2Vjb25kLmZvbnRTaXplOwpkaWZmIC0tZ2l0IGEvU291cmNl
L1dlYktpdC9XZWJQcm9jZXNzL1dlYlBhZ2UvV2ViUGFnZS5jcHAgYi9Tb3VyY2UvV2ViS2l0L1dl
YlByb2Nlc3MvV2ViUGFnZS9XZWJQYWdlLmNwcAppbmRleCA2M2FmOTFmZGJhNWYyMDEwMDZjNzNj
NTlmMjk2YmEyMmYzZDM3YzVkLi44YTk1ZGQyMWU2MWJiNzQwOGJlMTI2OGQ2NjZjYTQ4OWQ5OWIw
ZWVlIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViS2l0L1dlYlByb2Nlc3MvV2ViUGFnZS9XZWJQYWdl
LmNwcAorKysgYi9Tb3VyY2UvV2ViS2l0L1dlYlByb2Nlc3MvV2ViUGFnZS9XZWJQYWdlLmNwcApA
QCAtMTM4NywxMiArMTM4Nyw5IEBAIFJlZjxBUEk6OkFycmF5PiBXZWJQYWdlOjp0cmFja2VkUmVw
YWludFJlY3RzKCkKICAgICBpZiAoIXZpZXcpCiAgICAgICAgIHJldHVybiBBUEk6OkFycmF5Ojpj
cmVhdGUoKTsKIAotICAgIFZlY3RvcjxSZWZQdHI8QVBJOjpPYmplY3Q+PiByZXBhaW50UmVjdHM7
Ci0gICAgcmVwYWludFJlY3RzLnJlc2VydmVJbml0aWFsQ2FwYWNpdHkodmlldy0+dHJhY2tlZFJl
cGFpbnRSZWN0cygpLnNpemUoKSk7Ci0KLSAgICBmb3IgKGNvbnN0IGF1dG8mIHJlcGFpbnRSZWN0
IDogdmlldy0+dHJhY2tlZFJlcGFpbnRSZWN0cygpKQotICAgICAgICByZXBhaW50UmVjdHMudW5j
aGVja2VkQXBwZW5kKEFQSTo6UmVjdDo6Y3JlYXRlKHRvQVBJKHJlcGFpbnRSZWN0KSkpOwotCisg
ICAgYXV0byByZXBhaW50UmVjdHMgPSB2aWV3LT50cmFja2VkUmVwYWludFJlY3RzKCkubWFwKFtd
KGF1dG8mIHJlcGFpbnRSZWN0KSAtPiBSZWZQdHI8QVBJOjpPYmplY3Q+IHsKKyAgICAgICAgcmV0
dXJuIEFQSTo6UmVjdDo6Y3JlYXRlKHRvQVBJKHJlcGFpbnRSZWN0KSk7CisgICAgfSk7CiAgICAg
cmV0dXJuIEFQSTo6QXJyYXk6OmNyZWF0ZShXVEZNb3ZlKHJlcGFpbnRSZWN0cykpOwogfQogCkBA
IC0yMTMwLDEwICsyMTI3LDcgQEAgc3RhdGljIHZvaWQgZHVtcEhpc3RvcnlJdGVtKEhpc3RvcnlJ
dGVtJiBpdGVtLCBzaXplX3QgaW5kZW50LCBib29sIGlzQ3VycmVudEl0ZW0KIAogICAgIHN0cmlu
Z0J1aWxkZXIuYXBwZW5kKCdcbicpOwogCi0gICAgVmVjdG9yPFJlZjxIaXN0b3J5SXRlbT4+IGNo
aWxkcmVuOwotICAgIGNoaWxkcmVuLnJlc2VydmVJbml0aWFsQ2FwYWNpdHkoaXRlbS5jaGlsZHJl
bigpLnNpemUoKSk7Ci0gICAgZm9yIChhdXRvJiBjaGlsZCA6IGl0ZW0uY2hpbGRyZW4oKSkKLSAg
ICAgICAgY2hpbGRyZW4udW5jaGVja2VkQXBwZW5kKGNoaWxkLmNvcHlSZWYoKSk7CisgICAgYXV0
byBjaGlsZHJlbiA9IGl0ZW0uY2hpbGRyZW4oKTsKICAgICBzdGQ6OnN0YWJsZV9zb3J0KGNoaWxk
cmVuLmJlZ2luKCksIGNoaWxkcmVuLmVuZCgpLCBbXSAoYXV0byYgYSwgYXV0byYgYikgewogICAg
ICAgICByZXR1cm4gY29kZVBvaW50Q29tcGFyZShhLT50YXJnZXQoKSwgYi0+dGFyZ2V0KCkpIDwg
MDsKICAgICB9KTsK
</data>
<flag name="commit-queue"
          id="479285"
          type_id="3"
          status="-"
          setter="ews-feeder"
    />
          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>452292</attachid>
            <date>2022-02-16 19:43:56 -0800</date>
            <delta_ts>2022-02-16 21:39:58 -0800</delta_ts>
            <desc>Patch</desc>
            <filename>bug-236748-20220216194355.patch</filename>
            <type>text/plain</type>
            <size>221150</size>
            <attacher name="Chris Dumez">cdumez</attacher>
            
              <data encoding="base64">U3VidmVyc2lvbiBSZXZpc2lvbjogMjg5OTQyCmRpZmYgLS1naXQgYS9Tb3VyY2UvSmF2YVNjcmlw
dENvcmUvQ2hhbmdlTG9nIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL0NoYW5nZUxvZwppbmRleCA0
OWNjYjA4N2ZhNWExNDg1MDNiNjZiNDQzOTEyMDNkOTVmMzFlMWQzLi4zZGZmZWU1M2RmZGNhZTM4
MDczYWVmODU3MmI1NzU4YTE0ZjE0MzFkIDEwMDY0NAotLS0gYS9Tb3VyY2UvSmF2YVNjcmlwdENv
cmUvQ2hhbmdlTG9nCisrKyBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9DaGFuZ2VMb2cKQEAgLTEs
MyArMSw0NiBAQAorMjAyMi0wMi0xNiAgQ2hyaXMgRHVtZXogIDxjZHVtZXpAYXBwbGUuY29tPgor
CisgICAgICAgIENsZWFuIHVwIC8gb3B0aW1pemUgY2FsbCBzaXRlcyBjb25zdHJ1Y3RpbmcgdmVj
dG9ycworICAgICAgICBodHRwczovL2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9MjM2
NzQ4CisKKyAgICAgICAgUmV2aWV3ZWQgYnkgTk9CT0RZIChPT1BTISkuCisKKyAgICAgICAgQ2xl
YW4gdXAgLyBvcHRpbWl6ZSBjYWxsIHNpdGVzIGNvbnN0cnVjdGluZyB2ZWN0b3JzOgorICAgICAg
ICAtIFVzZSBWZWN0b3I6Om1hcCgpIC8gV1RGOjptYXAoKSB3aGVyZSBhcHByb3ByaWF0ZQorICAg
ICAgICAtIFJlcGxhY2UgVmVjdG9yOjpyZXNlcnZlQ2FwYWNpdHkoKSB3aXRoIFZlY3Rvcjo6cmVz
ZXJ2ZUluaXRpYWxDYXBhY2l0eSgpCisgICAgICAgICAgd2hlcmUgYXBwcm9wcmlhdGUKKyAgICAg
ICAgLSBSZXBsYWNlIFZlY3Rvcjo6YXBwZW5kKCkgd2l0aCBWZWN0b3I6OnVuY2hlY2tlZEFwcGVu
ZCgpIHdoZXJlIGFwcHJvcHJpYXRlCisgICAgICAgIC0gTGV2ZXJhZ2UgdGhlIGZhY3QgdGhhdCBW
ZWN0b3I8UmVmPEZvbz4+IGlzIG5vdyBjb3B5YWJsZSAoQmVjYXVzZSBSZWY8PiBub3cgaGFzCisg
ICAgICAgICAgYSBjb3B5IGNvbnN0cnVjdG9yKQorICAgICAgICAtIENhbGwgY3Jvc3NUaHJlYWRD
b3B5KCkgdG8gaXNvbGF0ZS1jb3B5IGEgVmVjdG9yKCkgd2l0aG91dCBpdGVyYXRpbmcuCisgICAg
ICAgIC0gTGV2ZXJhZ2UgVmVjdG9yIGNvbnN0cnVjdG9yIHRoYXQgdGFrZXMgaW4gYW4gaW50aWFs
aXphdGlvbiBsaXN0IGluIG1vcmUgY2FzZXMKKyAgICAgICAgLSBMZXZlcmFnZSBWZWN0b3I6OmZy
b20oKSBpbiBtb3JlIGNhc2VzIHRvIHNpbXBsaWZ5IHZlY3RvciBjb25zdHJ1Y3Rpb24gaW4gc29t
ZQorICAgICAgICAgIGNhc2UuCisgICAgICAgIC0gRHJvcCB1bm5lY2Vzc2FyeSBjYWxscyB0byBW
ZWN0b3I6OnJlc2VydmUqQ2FwYWNpdHkoKSBiZWZvcmUgY2FsbGluZworICAgICAgICAgIFZlY3Rv
cjo6YXBwZW5kKFQqLCBzaXplX3QpIHNpbmNlIHRoZSBhcHBlbmQoKSBpbXBsZW1lbnRhdGlvbiBh
bHJlYWR5IGRvZXMgdGhpcworICAgICAgICAgIGZvciB1cy4KKyAgICAgICAgLSBMZXZlcmFnZSBj
b3B5VG9WZWN0b3IoKSBhbmQgY29weVRvVmVjdG9yT2Y8PiBpbiBtb3JlIGNhc2VzCisgICAgICAg
IC0gQ2FsbCBzaHJpbmtUb0ZpdCgpIGluIHNvbWUgY2FzZXMgd2hlcmUgd2UgcmVzZXJ2ZSBjYXBh
Y2l0eSBhbmQgdGhlbiBhcHBlbmQoKQorICAgICAgICAgIGJ1dCBtYXkgbm90IGFwcGVuZCgpIGFz
IG11Y2ggYXMgd2UgcmVzZXJ2ZWQuCisKKyAgICAgICAgKiBiMy9haXIvQWlyQ29kZS5jcHA6Cisg
ICAgICAgIChKU0M6OkIzOjpBaXI6OkNvZGU6OnNldE51bUVudHJ5cG9pbnRzKToKKyAgICAgICAg
KiBieXRlY29tcGlsZXIvTm9kZXNDb2RlZ2VuLmNwcDoKKyAgICAgICAgKEpTQzo6QXJyYXlQYXR0
ZXJuTm9kZTo6ZW1pdERpcmVjdEJpbmRpbmcpOgorICAgICAgICAqIGRmZy9ERkdJblBsYWNlQWJz
dHJhY3RTdGF0ZS5jcHA6CisgICAgICAgIChKU0M6OkRGRzo6c2V0TGl2ZVZhbHVlcyk6CisgICAg
ICAgICogZGZnL0RGR0xpdmVuZXNzQW5hbHlzaXNQaGFzZS5jcHA6CisgICAgICAgICogZGZnL0RG
R1Njb3JlQm9hcmQuaDoKKyAgICAgICAgKEpTQzo6REZHOjpTY29yZUJvYXJkOjpTY29yZUJvYXJk
KToKKyAgICAgICAgKiBpbnNwZWN0b3IvYWdlbnRzL0luc3BlY3RvckRlYnVnZ2VyQWdlbnQuY3Bw
OgorICAgICAgICAoSW5zcGVjdG9yOjpwYXJzZUJyZWFrcG9pbnRPcHRpb25zKToKKyAgICAgICAg
KiBpbnNwZWN0b3IvcmVtb3RlL3NvY2tldC9SZW1vdGVJbnNwZWN0b3JNZXNzYWdlUGFyc2VyLmNw
cDoKKyAgICAgICAgKEluc3BlY3Rvcjo6TWVzc2FnZVBhcnNlcjo6cHVzaFJlY2VpdmVkRGF0YSk6
CisgICAgICAgICogcGFyc2VyL1ZhcmlhYmxlRW52aXJvbm1lbnQuY3BwOgorICAgICAgICAoSlND
OjpDb21wYWN0VERaRW52aXJvbm1lbnQ6OkNvbXBhY3RURFpFbnZpcm9ubWVudCk6CisgICAgICAg
ICogd2FzbS9XYXNtV29ya2xpc3QuY3BwOgorICAgICAgICAoSlNDOjpXYXNtOjpXb3JrbGlzdDo6
V29ya2xpc3QpOgorCiAyMDIyLTAyLTE1ICBNYXJrIExhbSAgPG1hcmsubGFtQGFwcGxlLmNvbT4K
IAogICAgICAgICBEZWZlciBUZXJtaW5hdGlvbnNFeGNlcHRpb25zIHdoaWxlIGluIG9wZXJhdGlv
bk1hdGVyaWFsaXplT2JqZWN0SW5PU1IuCmRpZmYgLS1naXQgYS9Tb3VyY2UvV1RGL0NoYW5nZUxv
ZyBiL1NvdXJjZS9XVEYvQ2hhbmdlTG9nCmluZGV4IGYyODZiOTRhZmQ3ZTJhMmFkODBkZGE1MDI0
NzliZWM3ZGU2YTA0ZjQuLjkxZGYzOGQxOWVkOTc3MzliYTI0NmFjYjcyNTdmNDYzM2I3YzZiMWQg
MTAwNjQ0Ci0tLSBhL1NvdXJjZS9XVEYvQ2hhbmdlTG9nCisrKyBiL1NvdXJjZS9XVEYvQ2hhbmdl
TG9nCkBAIC0xLDMgKzEsMzIgQEAKKzIwMjItMDItMTYgIENocmlzIER1bWV6ICA8Y2R1bWV6QGFw
cGxlLmNvbT4KKworICAgICAgICBDbGVhbiB1cCAvIG9wdGltaXplIGNhbGwgc2l0ZXMgY29uc3Ry
dWN0aW5nIHZlY3RvcnMKKyAgICAgICAgaHR0cHM6Ly9idWdzLndlYmtpdC5vcmcvc2hvd19idWcu
Y2dpP2lkPTIzNjc0OAorCisgICAgICAgIFJldmlld2VkIGJ5IE5PQk9EWSAoT09QUyEpLgorCisg
ICAgICAgIENsZWFuIHVwIC8gb3B0aW1pemUgY2FsbCBzaXRlcyBjb25zdHJ1Y3RpbmcgdmVjdG9y
czoKKyAgICAgICAgLSBVc2UgVmVjdG9yOjptYXAoKSAvIFdURjo6bWFwKCkgd2hlcmUgYXBwcm9w
cmlhdGUKKyAgICAgICAgLSBSZXBsYWNlIFZlY3Rvcjo6cmVzZXJ2ZUNhcGFjaXR5KCkgd2l0aCBW
ZWN0b3I6OnJlc2VydmVJbml0aWFsQ2FwYWNpdHkoKSAKKyAgICAgICAgICB3aGVyZSBhcHByb3By
aWF0ZQorICAgICAgICAtIFJlcGxhY2UgVmVjdG9yOjphcHBlbmQoKSB3aXRoIFZlY3Rvcjo6dW5j
aGVja2VkQXBwZW5kKCkgd2hlcmUgYXBwcm9wcmlhdGUKKyAgICAgICAgLSBMZXZlcmFnZSB0aGUg
ZmFjdCB0aGF0IFZlY3RvcjxSZWY8Rm9vPj4gaXMgbm93IGNvcHlhYmxlIChCZWNhdXNlIFJlZjw+
IG5vdyBoYXMKKyAgICAgICAgICBhIGNvcHkgY29uc3RydWN0b3IpCisgICAgICAgIC0gQ2FsbCBj
cm9zc1RocmVhZENvcHkoKSB0byBpc29sYXRlLWNvcHkgYSBWZWN0b3IoKSB3aXRob3V0IGl0ZXJh
dGluZy4KKyAgICAgICAgLSBMZXZlcmFnZSBWZWN0b3IgY29uc3RydWN0b3IgdGhhdCB0YWtlcyBp
biBhbiBpbnRpYWxpemF0aW9uIGxpc3QgaW4gbW9yZSBjYXNlcworICAgICAgICAtIExldmVyYWdl
IFZlY3Rvcjo6ZnJvbSgpIGluIG1vcmUgY2FzZXMgdG8gc2ltcGxpZnkgdmVjdG9yIGNvbnN0cnVj
dGlvbiBpbiBzb21lCisgICAgICAgICAgY2FzZS4KKyAgICAgICAgLSBEcm9wIHVubmVjZXNzYXJ5
IGNhbGxzIHRvIFZlY3Rvcjo6cmVzZXJ2ZSpDYXBhY2l0eSgpIGJlZm9yZSBjYWxsaW5nCisgICAg
ICAgICAgVmVjdG9yOjphcHBlbmQoVCosIHNpemVfdCkgc2luY2UgdGhlIGFwcGVuZCgpIGltcGxl
bWVudGF0aW9uIGFscmVhZHkgZG9lcyB0aGlzCisgICAgICAgICAgZm9yIHVzLgorICAgICAgICAt
IExldmVyYWdlIGNvcHlUb1ZlY3RvcigpIGFuZCBjb3B5VG9WZWN0b3JPZjw+IGluIG1vcmUgY2Fz
ZXMKKyAgICAgICAgLSBDYWxsIHNocmlua1RvRml0KCkgaW4gc29tZSBjYXNlcyB3aGVyZSB3ZSBy
ZXNlcnZlIGNhcGFjaXR5IGFuZCB0aGVuIGFwcGVuZCgpCisgICAgICAgICAgYnV0IG1heSBub3Qg
YXBwZW5kKCkgYXMgbXVjaCBhcyB3ZSByZXNlcnZlZC4gCisKKyAgICAgICAgKiB3dGYvTGFuZ3Vh
Z2UuY3BwOgorICAgICAgICAoV1RGOjp1c2VyUHJlZmVycmVkTGFuZ3VhZ2VzKToKKyAgICAgICAg
KFdURjo6aXNvbGF0ZWRDb3B5KTogRGVsZXRlZC4KKwogMjAyMi0wMi0xNiAgRWxpb3QgSHN1ICA8
ZWxpb3RfaHN1QGFwcGxlLmNvbT4KIAogICAgICAgICBNb3ZlIFNhZmUgQnJvd3Npbmcga25vd2xl
ZGdlIGludG8gU2FmYXJpU2FmZUJyb3dzaW5nIGZyYW1ld29yawpkaWZmIC0tZ2l0IGEvU291cmNl
L1dlYkNvcmUvQ2hhbmdlTG9nIGIvU291cmNlL1dlYkNvcmUvQ2hhbmdlTG9nCmluZGV4IDM5NjQw
ZmI3YjIxYjdkZDY0NTZkODY4YmQ1OTdkMDljYTkxYTljM2YuLmUzOTBmNzdmNTJlNzhhMjVhYWI4
MGZmMTgzZmEzYjlkMmQ3MjNmNGEgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL0NoYW5nZUxv
ZworKysgYi9Tb3VyY2UvV2ViQ29yZS9DaGFuZ2VMb2cKQEAgLTEsMyArMSwyNzYgQEAKKzIwMjIt
MDItMTYgIENocmlzIER1bWV6ICA8Y2R1bWV6QGFwcGxlLmNvbT4KKworICAgICAgICBDbGVhbiB1
cCAvIG9wdGltaXplIGNhbGwgc2l0ZXMgY29uc3RydWN0aW5nIHZlY3RvcnMKKyAgICAgICAgaHR0
cHM6Ly9idWdzLndlYmtpdC5vcmcvc2hvd19idWcuY2dpP2lkPTIzNjc0OAorCisgICAgICAgIFJl
dmlld2VkIGJ5IE5PQk9EWSAoT09QUyEpLgorCisgICAgICAgIENsZWFuIHVwIC8gb3B0aW1pemUg
Y2FsbCBzaXRlcyBjb25zdHJ1Y3RpbmcgdmVjdG9yczoKKyAgICAgICAgLSBVc2UgVmVjdG9yOjpt
YXAoKSAvIFdURjo6bWFwKCkgd2hlcmUgYXBwcm9wcmlhdGUKKyAgICAgICAgLSBSZXBsYWNlIFZl
Y3Rvcjo6cmVzZXJ2ZUNhcGFjaXR5KCkgd2l0aCBWZWN0b3I6OnJlc2VydmVJbml0aWFsQ2FwYWNp
dHkoKSAKKyAgICAgICAgICB3aGVyZSBhcHByb3ByaWF0ZQorICAgICAgICAtIFJlcGxhY2UgVmVj
dG9yOjphcHBlbmQoKSB3aXRoIFZlY3Rvcjo6dW5jaGVja2VkQXBwZW5kKCkgd2hlcmUgYXBwcm9w
cmlhdGUKKyAgICAgICAgLSBMZXZlcmFnZSB0aGUgZmFjdCB0aGF0IFZlY3RvcjxSZWY8Rm9vPj4g
aXMgbm93IGNvcHlhYmxlIChCZWNhdXNlIFJlZjw+IG5vdyBoYXMKKyAgICAgICAgICBhIGNvcHkg
Y29uc3RydWN0b3IpCisgICAgICAgIC0gQ2FsbCBjcm9zc1RocmVhZENvcHkoKSB0byBpc29sYXRl
LWNvcHkgYSBWZWN0b3IoKSB3aXRob3V0IGl0ZXJhdGluZy4KKyAgICAgICAgLSBMZXZlcmFnZSBW
ZWN0b3IgY29uc3RydWN0b3IgdGhhdCB0YWtlcyBpbiBhbiBpbnRpYWxpemF0aW9uIGxpc3QgaW4g
bW9yZSBjYXNlcworICAgICAgICAtIExldmVyYWdlIFZlY3Rvcjo6ZnJvbSgpIGluIG1vcmUgY2Fz
ZXMgdG8gc2ltcGxpZnkgdmVjdG9yIGNvbnN0cnVjdGlvbiBpbiBzb21lCisgICAgICAgICAgY2Fz
ZS4KKyAgICAgICAgLSBEcm9wIHVubmVjZXNzYXJ5IGNhbGxzIHRvIFZlY3Rvcjo6cmVzZXJ2ZSpD
YXBhY2l0eSgpIGJlZm9yZSBjYWxsaW5nCisgICAgICAgICAgVmVjdG9yOjphcHBlbmQoVCosIHNp
emVfdCkgc2luY2UgdGhlIGFwcGVuZCgpIGltcGxlbWVudGF0aW9uIGFscmVhZHkgZG9lcyB0aGlz
CisgICAgICAgICAgZm9yIHVzLgorICAgICAgICAtIExldmVyYWdlIGNvcHlUb1ZlY3RvcigpIGFu
ZCBjb3B5VG9WZWN0b3JPZjw+IGluIG1vcmUgY2FzZXMKKyAgICAgICAgLSBDYWxsIHNocmlua1Rv
Rml0KCkgaW4gc29tZSBjYXNlcyB3aGVyZSB3ZSByZXNlcnZlIGNhcGFjaXR5IGFuZCB0aGVuIGFw
cGVuZCgpCisgICAgICAgICAgYnV0IG1heSBub3QgYXBwZW5kKCkgYXMgbXVjaCBhcyB3ZSByZXNl
cnZlZC4gCisKKyAgICAgICAgKiBNb2R1bGVzL2FzeW5jLWNsaXBib2FyZC9DbGlwYm9hcmQuY3Bw
OgorICAgICAgICAoV2ViQ29yZTo6Q2xpcGJvYXJkOjpyZWFkKToKKyAgICAgICAgKFdlYkNvcmU6
OkNsaXBib2FyZDo6SXRlbVdyaXRlcjo6ZGlkU2V0QWxsRGF0YSk6CisgICAgICAgICogTW9kdWxl
cy9lbmNyeXB0ZWRtZWRpYS9NZWRpYUtleVNlc3Npb24uY3BwOgorICAgICAgICAoV2ViQ29yZTo6
TWVkaWFLZXlTZXNzaW9uOjp1cGRhdGVLZXlTdGF0dXNlcyk6CisgICAgICAgICogTW9kdWxlcy9l
bnRyaWVzYXBpL0ZpbGVTeXN0ZW1FbnRyaWVzQ2FsbGJhY2suY3BwOgorICAgICAgICAoV2ViQ29y
ZTo6RmlsZVN5c3RlbUVudHJpZXNDYWxsYmFjazo6c2NoZWR1bGVDYWxsYmFjayk6CisgICAgICAg
IChXZWJDb3JlOjpjb3B5VmVjdG9yKTogRGVsZXRlZC4KKyAgICAgICAgKiBNb2R1bGVzL2VudHJp
ZXNhcGkvSFRNTElucHV0RWxlbWVudEVudHJpZXNBUEkuY3BwOgorICAgICAgICAoV2ViQ29yZTo6
SFRNTElucHV0RWxlbWVudEVudHJpZXNBUEk6OndlYmtpdEVudHJpZXMpOgorICAgICAgICAqIE1v
ZHVsZXMvZ2VvbG9jYXRpb24vR2VvbG9jYXRpb25Db250cm9sbGVyLmNwcDoKKyAgICAgICAgKFdl
YkNvcmU6Okdlb2xvY2F0aW9uQ29udHJvbGxlcjo6cG9zaXRpb25DaGFuZ2VkKToKKyAgICAgICAg
KFdlYkNvcmU6Okdlb2xvY2F0aW9uQ29udHJvbGxlcjo6ZXJyb3JPY2N1cnJlZCk6CisgICAgICAg
ICogTW9kdWxlcy9pbmRleGVkZGIvSURCRGF0YWJhc2UuY3BwOgorICAgICAgICAoV2ViQ29yZTo6
SURCRGF0YWJhc2U6OnN0b3ApOgorICAgICAgICAqIE1vZHVsZXMvaW5kZXhlZGRiL0lEQkdldEFs
bFJlc3VsdC5jcHA6CisgICAgICAgIChXZWJDb3JlOjpJREJHZXRBbGxSZXN1bHQ6Omlzb2xhdGVk
Q29weSk6CisgICAgICAgICogTW9kdWxlcy9pbmRleGVkZGIvSURCR2V0UmVzdWx0LmNwcDoKKyAg
ICAgICAgKFdlYkNvcmU6OklEQkdldFJlc3VsdDo6aXNvbGF0ZWRDb3B5KToKKyAgICAgICAgKiBN
b2R1bGVzL2luZGV4ZWRkYi9JREJLZXlQYXRoLmNwcDoKKyAgICAgICAgKFdlYkNvcmU6Omlzb2xh
dGVkQ29weSk6IERlbGV0ZWQuCisgICAgICAgICogTW9kdWxlcy9pbmRleGVkZGIvSURCS2V5UGF0
aC5oOgorICAgICAgICAoV2ViQ29yZTo6aXNvbGF0ZWRDb3B5KTogRGVsZXRlZC4KKyAgICAgICAg
KiBNb2R1bGVzL2luZGV4ZWRkYi9JREJUcmFuc2FjdGlvbi5jcHA6CisgICAgICAgIChXZWJDb3Jl
OjpJREJUcmFuc2FjdGlvbjo6YWJvcnRJblByb2dyZXNzT3BlcmF0aW9ucyk6CisgICAgICAgICog
TW9kdWxlcy9pbmRleGVkZGIvY2xpZW50L0lEQkNvbm5lY3Rpb25Qcm94eS5jcHA6CisgICAgICAg
IChXZWJDb3JlOjpJREJDbGllbnQ6OnJlbW92ZUl0ZW1zTWF0Y2hpbmdDdXJyZW50VGhyZWFkKToK
KyAgICAgICAgKiBNb2R1bGVzL2luZGV4ZWRkYi9zZXJ2ZXIvTWVtb3J5T2JqZWN0U3RvcmUuY3Bw
OgorICAgICAgICAoV2ViQ29yZTo6SURCU2VydmVyOjpNZW1vcnlPYmplY3RTdG9yZTo6ZGVsZXRl
QWxsSW5kZXhlcyk6CisgICAgICAgICogTW9kdWxlcy9pbmRleGVkZGIvc2VydmVyL1NRTGl0ZUlE
QkN1cnNvci5jcHA6CisgICAgICAgIChXZWJDb3JlOjpJREJTZXJ2ZXI6OlNRTGl0ZUlEQkN1cnNv
cjo6Y3VycmVudERhdGEpOgorICAgICAgICAqIE1vZHVsZXMvaW5kZXhlZGRiL3NoYXJlZC9JREJE
YXRhYmFzZUluZm8uY3BwOgorICAgICAgICAoV2ViQ29yZTo6SURCRGF0YWJhc2VJbmZvOjpvYmpl
Y3RTdG9yZU5hbWVzIGNvbnN0KToKKyAgICAgICAgKiBNb2R1bGVzL2luZGV4ZWRkYi9zaGFyZWQv
SURCSW5kZXhJbmZvLmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OklEQkluZGV4SW5mbzo6aXNvbGF0
ZWRDb3B5IGNvbnN0KToKKyAgICAgICAgKiBNb2R1bGVzL2luZGV4ZWRkYi9zaGFyZWQvSURCT2Jq
ZWN0U3RvcmVJbmZvLmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OklEQk9iamVjdFN0b3JlSW5mbzo6
aXNvbGF0ZWRDb3B5IGNvbnN0KToKKyAgICAgICAgKFdlYkNvcmU6OklEQk9iamVjdFN0b3JlSW5m
bzo6aW5kZXhOYW1lcyBjb25zdCk6CisgICAgICAgICogTW9kdWxlcy9pbmRleGVkZGIvc2hhcmVk
L0lEQlRyYW5zYWN0aW9uSW5mby5jcHA6CisgICAgICAgIChXZWJDb3JlOjpJREJUcmFuc2FjdGlv
bkluZm86Omlzb2xhdGVkQ29weSk6CisgICAgICAgICogTW9kdWxlcy9pbmRleGVkZGIvc2hhcmVk
L0luZGV4S2V5LmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OkluZGV4S2V5Ojppc29sYXRlZENvcHkg
Y29uc3QpOgorICAgICAgICAqIE1vZHVsZXMvbWVkaWFzdHJlYW0vTWVkaWFTdHJlYW0uY3BwOgor
ICAgICAgICAoV2ViQ29yZTo6TWVkaWFTdHJlYW06OmNsb25lKToKKyAgICAgICAgKiBNb2R1bGVz
L21lZGlhc3RyZWFtL01lZGlhU3RyZWFtVHJhY2suY3BwOgorICAgICAgICAoV2ViQ29yZTo6Y2Fw
YWJpbGl0eVN0cmluZ1ZlY3Rvcik6CisgICAgICAgICogTW9kdWxlcy9tZWRpYXN0cmVhbS9NZWRp
YVRyYWNrQ29uc3RyYWludHMuY3BwOgorICAgICAgICAoV2ViQ29yZTo6Y29udmVydEFkdmFuY2Vk
VG9JbnRlcm5hbEZvcm0pOgorICAgICAgICAqIE1vZHVsZXMvbWVkaWFzdHJlYW0vU0ZyYW1lVXRp
bHMuY3BwOgorICAgICAgICAoV2ViQ29yZTo6dG9SYnNwKToKKyAgICAgICAgKiBNb2R1bGVzL3Jl
bW90ZXBsYXliYWNrL1JlbW90ZVBsYXliYWNrLmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OlJlbW90
ZVBsYXliYWNrOjphdmFpbGFiaWxpdHlDaGFuZ2VkKToKKyAgICAgICAgKiBNb2R1bGVzL3NwZWVj
aC9TcGVlY2hSZWNvZ25pdGlvbi5jcHA6CisgICAgICAgIChXZWJDb3JlOjpTcGVlY2hSZWNvZ25p
dGlvbjo6ZGlkUmVjZWl2ZVJlc3VsdCk6CisgICAgICAgICogTW9kdWxlcy93ZWJhdXRobi9jYm9y
L0NCT1JWYWx1ZS5jcHA6CisgICAgICAgIChjYm9yOjpDQk9SVmFsdWU6OkNCT1JWYWx1ZSk6Cisg
ICAgICAgICogTW9kdWxlcy93ZWJhdXRobi9maWRvL0F1dGhlbnRpY2F0b3JHZXRJbmZvUmVzcG9u
c2UuY3BwOgorICAgICAgICAoZmlkbzo6dG9BcnJheVZhbHVlKToKKyAgICAgICAgKiBNb2R1bGVz
L3dlYmF1dGhuL2ZpZG8vRGV2aWNlUmVxdWVzdENvbnZlcnRlci5jcHA6CisgICAgICAgIChmaWRv
Ojpjb252ZXJ0UGFyYW1ldGVyc1RvQ0JPUik6CisgICAgICAgICogTW9kdWxlcy93ZWJhdXRobi9m
aWRvL1Bpbi5jcHA6CisgICAgICAgIChmaWRvOjpwaW46OmVuY29kZVJhd1B1YmxpY0tleSk6Cisg
ICAgICAgICogTW9kdWxlcy93ZWJkYXRhYmFzZS9EYXRhYmFzZVRyYWNrZXIuY3BwOgorICAgICAg
ICAoV2ViQ29yZTo6RGF0YWJhc2VUcmFja2VyOjpkYXRhYmFzZU5hbWVzKToKKyAgICAgICAgKFdl
YkNvcmU6Omlzb2xhdGVkQ29weSk6IERlbGV0ZWQuCisgICAgICAgICogYWNjZXNzaWJpbGl0eS9B
WE9iamVjdENhY2hlLmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OkFYT2JqZWN0Q2FjaGU6Om5vdGlm
aWNhdGlvblBvc3RUaW1lckZpcmVkKToKKyAgICAgICAgKiBhY2Nlc3NpYmlsaXR5L2lzb2xhdGVk
dHJlZS9BWElzb2xhdGVkT2JqZWN0LmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OkFYSXNvbGF0ZWRP
YmplY3Q6OnNldE1hdGhzY3JpcHRzKToKKyAgICAgICAgKFdlYkNvcmU6OkFYSXNvbGF0ZWRPYmpl
Y3Q6OnNldE9iamVjdFZlY3RvclByb3BlcnR5KToKKyAgICAgICAgKiBhY2Nlc3NpYmlsaXR5L2lz
b2xhdGVkdHJlZS9BWElzb2xhdGVkVHJlZS5jcHA6CisgICAgICAgIChXZWJDb3JlOjpBWElzb2xh
dGVkVHJlZTo6b2JqZWN0c0ZvcklEcyBjb25zdCk6CisgICAgICAgIChXZWJDb3JlOjpBWElzb2xh
dGVkVHJlZTo6Y29sbGVjdE5vZGVDaGFuZ2VzRm9yU3VidHJlZSk6CisgICAgICAgICogYW5pbWF0
aW9uL0NTU1Byb3BlcnR5QW5pbWF0aW9uLmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OkNTU1Byb3Bl
cnR5QW5pbWF0aW9uV3JhcHBlck1hcDo6Q1NTUHJvcGVydHlBbmltYXRpb25XcmFwcGVyTWFwKToK
KyAgICAgICAgKiBiaW5kaW5ncy9qcy9TZXJpYWxpemVkU2NyaXB0VmFsdWUuY3BwOgorICAgICAg
ICAoV2ViQ29yZTo6Q2xvbmVEZXNlcmlhbGl6ZXI6OnJlYWRTdHJpbmcpOgorICAgICAgICAoV2Vi
Q29yZTo6U2VyaWFsaXplZFNjcmlwdFZhbHVlOjpibG9iVVJMcyBjb25zdCk6CisgICAgICAgICog
Y3J5cHRvL21hYy9DcnlwdG9BbGdvcml0aG1FQ0RTQU1hYy5jcHA6CisgICAgICAgIChXZWJDb3Jl
OjpzaWduRUNEU0EpOgorICAgICAgICAoV2ViQ29yZTo6dmVyaWZ5RUNEU0EpOgorICAgICAgICAq
IGNyeXB0by9tYWMvQ3J5cHRvS2V5RUNNYWMuY3BwOgorICAgICAgICAoV2ViQ29yZTo6Q3J5cHRv
S2V5RUM6OnBsYXRmb3JtRXhwb3J0U3BraSBjb25zdCk6CisgICAgICAgIChXZWJDb3JlOjpDcnlw
dG9LZXlFQzo6cGxhdGZvcm1FeHBvcnRQa2NzOCBjb25zdCk6CisgICAgICAgICogY3J5cHRvL21h
Yy9DcnlwdG9LZXlSU0FNYWMuY3BwOgorICAgICAgICAoV2ViQ29yZTo6Q3J5cHRvS2V5UlNBOjpl
eHBvcnRTcGtpIGNvbnN0KToKKyAgICAgICAgKFdlYkNvcmU6OkNyeXB0b0tleVJTQTo6ZXhwb3J0
UGtjczggY29uc3QpOgorICAgICAgICAqIGNzcy9DU1NCYXNpY1NoYXBlcy5jcHA6CisgICAgICAg
IChXZWJDb3JlOjpDU1NCYXNpY1NoYXBlUG9seWdvbjo6Y3NzVGV4dCBjb25zdCk6CisgICAgICAg
ICogY3NzL0NTU0NvbXB1dGVkU3R5bGVEZWNsYXJhdGlvbi5jcHA6CisgICAgICAgIChXZWJDb3Jl
OjpDb21wdXRlZFN0eWxlRXh0cmFjdG9yOjpjb3B5UHJvcGVydGllc0luU2V0KToKKyAgICAgICAg
KFdlYkNvcmU6OkNvbXB1dGVkU3R5bGVFeHRyYWN0b3I6OmNvcHlQcm9wZXJ0aWVzKToKKyAgICAg
ICAgKiBjc3MvQ1NTRm9udEZhY2UuY3BwOgorICAgICAgICAoV2ViQ29yZTo6aXRlcmF0ZUNsaWVu
dHMpOgorICAgICAgICAqIGNzcy9DU1NGb250RmFjZVNldC5jcHA6CisgICAgICAgIChXZWJDb3Jl
OjpDU1NGb250RmFjZVNldDo6bWF0Y2hpbmdGYWNlc0V4Y2x1ZGluZ1ByZWluc3RhbGxlZEZvbnRz
KToKKyAgICAgICAgKFdlYkNvcmU6OkNTU0ZvbnRGYWNlU2V0Ojpmb250RmFjZSk6CisgICAgICAg
ICogY3NzL0NTU0tleWZyYW1lc1J1bGUuY3BwOgorICAgICAgICAoV2ViQ29yZTo6U3R5bGVSdWxl
S2V5ZnJhbWVzOjpTdHlsZVJ1bGVLZXlmcmFtZXMpOgorICAgICAgICAqIGNzcy9TdHlsZVByb3Bl
cnRpZXMuY3BwOgorICAgICAgICAoV2ViQ29yZTo6U3R5bGVQcm9wZXJ0aWVzOjpjb3B5UHJvcGVy
dGllc0luU2V0IGNvbnN0KToKKyAgICAgICAgKFdlYkNvcmU6OkRlZmVycmVkU3R5bGVQcm9wZXJ0
aWVzOjpEZWZlcnJlZFN0eWxlUHJvcGVydGllcyk6CisgICAgICAgICogY3NzL1N0eWxlUnVsZS5j
cHA6CisgICAgICAgIChXZWJDb3JlOjpEZWZlcnJlZFN0eWxlR3JvdXBSdWxlTGlzdDo6RGVmZXJy
ZWRTdHlsZUdyb3VwUnVsZUxpc3QpOgorICAgICAgICAoV2ViQ29yZTo6U3R5bGVSdWxlR3JvdXA6
OlN0eWxlUnVsZUdyb3VwKToKKyAgICAgICAgKiBjc3MvY2FsYy9DU1NDYWxjT3BlcmF0aW9uTm9k
ZS5oOgorICAgICAgICAqIGNzcy9jYWxjL0NTU0NhbGNWYWx1ZS5jcHA6CisgICAgICAgIChXZWJD
b3JlOjpjcmVhdGVDU1MpOgorICAgICAgICAqIGRpc3BsYXkvY3NzL0Rpc3BsYXlCb3hEZWNvcmF0
aW9uUGFpbnRlci5jcHA6CisgICAgICAgIChXZWJDb3JlOjpEaXNwbGF5OjpCb3JkZXJQYWludGVy
OjpjbGlwQm9yZGVyU2lkZVBvbHlnb24gY29uc3QpOgorICAgICAgICAoV2ViQ29yZTo6RGlzcGxh
eTo6Qm9yZGVyUGFpbnRlcjo6ZHJhd0xpbmVGb3JCb3hTaWRlIGNvbnN0KToKKyAgICAgICAgKiBk
b20vRE9NUmVjdExpc3QuY3BwOgorICAgICAgICAoV2ViQ29yZTo6RE9NUmVjdExpc3Q6OkRPTVJl
Y3RMaXN0KToKKyAgICAgICAgKiBkb20vRG9jdW1lbnQuY3BwOgorICAgICAgICAoV2ViQ29yZTo6
RG9jdW1lbnQ6OnVwZGF0ZUVsZW1lbnRzQWZmZWN0ZWRCeU1lZGlhUXVlcmllcyk6CisgICAgICAg
IChXZWJDb3JlOjpEb2N1bWVudDo6ZGlkQXNzb2NpYXRlRm9ybUNvbnRyb2xzVGltZXJGaXJlZCk6
CisgICAgICAgICogZG9tL0VsZW1lbnREYXRhLmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OlVuaXF1
ZUVsZW1lbnREYXRhOjpVbmlxdWVFbGVtZW50RGF0YSk6CisgICAgICAgICogZG9tL0V2ZW50TGlz
dGVuZXJNYXAuY3BwOgorICAgICAgICAoV2ViQ29yZTo6RXZlbnRMaXN0ZW5lck1hcDo6ZXZlbnRU
eXBlcyBjb25zdCk6CisgICAgICAgICogZG9tL1RyZWVTY29wZU9yZGVyZWRNYXAuY3BwOgorICAg
ICAgICAoV2ViQ29yZTo6VHJlZVNjb3BlT3JkZXJlZE1hcDo6a2V5cyBjb25zdCk6CisgICAgICAg
ICogZWRpdGluZy9Db21wb3NpdGVFZGl0Q29tbWFuZC5jcHA6CisgICAgICAgIChXZWJDb3JlOjpj
b3B5TWFya2Vycyk6CisgICAgICAgICogZWRpdGluZy9FZGl0b3IuY3BwOgorICAgICAgICAoV2Vi
Q29yZTo6ZWRpdGFibGVUZXh0TGlzdHNBdFBvc2l0aW9uSW5EZXNjZW5kaW5nT3JkZXIpOgorICAg
ICAgICAqIGZpbGVhcGkvRmlsZUxpc3QuY3BwOgorICAgICAgICAoV2ViQ29yZTo6RmlsZUxpc3Q6
OnBhdGhzIGNvbnN0KToKKyAgICAgICAgKiBoaXN0b3J5L0hpc3RvcnlJdGVtLmNwcDoKKyAgICAg
ICAgKFdlYkNvcmU6Okhpc3RvcnlJdGVtOjpIaXN0b3J5SXRlbSk6CisgICAgICAgIChXZWJDb3Jl
OjptX2Zvcm1EYXRhKToKKyAgICAgICAgKFdlYkNvcmU6Om1faWRlbnRpZmllcik6CisgICAgICAg
ICogaHRtbC9GaWxlSW5wdXRUeXBlLmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OkZpbGVJbnB1dFR5
cGU6OnNldEZpbGVzKToKKyAgICAgICAgKFdlYkNvcmU6OkZpbGVJbnB1dFR5cGU6OmZpbGVzQ2hv
c2VuKToKKyAgICAgICAgKiBodG1sL0xpbmtJY29uQ29sbGVjdG9yLmNwcDoKKyAgICAgICAgKFdl
YkNvcmU6OkxpbmtJY29uQ29sbGVjdG9yOjppY29uc09mVHlwZXMpOgorICAgICAgICAqIGh0bWwv
VVJMU2VhcmNoUGFyYW1zLmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OlVSTFNlYXJjaFBhcmFtczo6
Z2V0QWxsIGNvbnN0KToKKyAgICAgICAgKiBsYXlvdXQvZm9ybWF0dGluZ0NvbnRleHRzL2lubGlu
ZS9JbmxpbmVMaW5lQnVpbGRlci5jcHA6CisgICAgICAgIChXZWJDb3JlOjpMYXlvdXQ6OkxpbmVC
dWlsZGVyOjpsYXlvdXRJbmxpbmVDb250ZW50KToKKyAgICAgICAgKiBsb2FkZXIvRG9jdW1lbnRM
b2FkZXIuY3BwOgorICAgICAgICAoV2ViQ29yZTo6RG9jdW1lbnRMb2FkZXI6OnN0YXJ0SWNvbkxv
YWRpbmcpOgorICAgICAgICAoV2ViQ29yZTo6RG9jdW1lbnRMb2FkZXI6OnNldEFjdGl2ZUNvbnRl
bnRSdWxlTGlzdEFjdGlvblBhdHRlcm5zKToKKyAgICAgICAgKiBsb2FkZXIvVGV4dFRyYWNrTG9h
ZGVyLmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OlRleHRUcmFja0xvYWRlcjo6Z2V0TmV3Q3Vlcyk6
CisgICAgICAgICogbG9hZGVyL2FyY2hpdmUvY2YvTGVnYWN5V2ViQXJjaGl2ZS5jcHA6CisgICAg
ICAgIChXZWJDb3JlOjpMZWdhY3lXZWJBcmNoaXZlOjpjcmVhdGVGcm9tU2VsZWN0aW9uKToKKyAg
ICAgICAgKiBwYWdlL0NhcHRpb25Vc2VyUHJlZmVyZW5jZXNNZWRpYUFGLmNwcDoKKyAgICAgICAg
KFdlYkNvcmU6OkNhcHRpb25Vc2VyUHJlZmVyZW5jZXNNZWRpYUFGOjpwcmVmZXJyZWRBdWRpb0No
YXJhY3RlcmlzdGljcyBjb25zdCk6CisgICAgICAgICogcGFnZS9ET01XaW5kb3cuY3BwOgorICAg
ICAgICAoV2ViQ29yZTo6RE9NV2luZG93OjpkaXNwYXRjaEFsbFBlbmRpbmdCZWZvcmVVbmxvYWRF
dmVudHMpOgorICAgICAgICAqIHBhZ2UvSW50ZXJzZWN0aW9uT2JzZXJ2ZXIuY3BwOgorICAgICAg
ICAoV2ViQ29yZTo6SW50ZXJzZWN0aW9uT2JzZXJ2ZXI6OmNyZWF0ZSk6CisgICAgICAgICogcGFn
ZS9QYWdlLmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OlBhZ2U6OnJlcGxhY2VSYW5nZXNXaXRoVGV4
dCk6CisgICAgICAgICogcGFnZS9jc3AvQ29udGVudFNlY3VyaXR5UG9saWN5LmNwcDoKKyAgICAg
ICAgKFdlYkNvcmU6OkNvbnRlbnRTZWN1cml0eVBvbGljeTo6cmVzcG9uc2VIZWFkZXJzIGNvbnN0
KToKKyAgICAgICAgKiBwYWdlL2NzcC9Db250ZW50U2VjdXJpdHlQb2xpY3lSZXNwb25zZUhlYWRl
cnMuY3BwOgorICAgICAgICAoV2ViQ29yZTo6Q29udGVudFNlY3VyaXR5UG9saWN5UmVzcG9uc2VI
ZWFkZXJzOjppc29sYXRlZENvcHkgY29uc3QpOgorICAgICAgICAqIHBhZ2UvbWFjL0ltYWdlT3Zl
cmxheUNvbnRyb2xsZXJNYWMubW06CisgICAgICAgIChXZWJDb3JlOjpJbWFnZU92ZXJsYXlDb250
cm9sbGVyOjp1cGRhdGVEYXRhRGV0ZWN0b3JIaWdobGlnaHRzKToKKyAgICAgICAgKiBwYWdlL21h
Yy9TZXJ2aWNlc092ZXJsYXlDb250cm9sbGVyLm1tOgorICAgICAgICAoV2ViQ29yZTo6U2Vydmlj
ZXNPdmVybGF5Q29udHJvbGxlcjo6YnVpbGRTZWxlY3Rpb25IaWdobGlnaHQpOgorICAgICAgICAo
V2ViQ29yZTo6U2VydmljZXNPdmVybGF5Q29udHJvbGxlcjo6aGFuZGxlQ2xpY2spOgorICAgICAg
ICAqIHBhZ2Uvc2Nyb2xsaW5nL0FzeW5jU2Nyb2xsaW5nQ29vcmRpbmF0b3IuY3BwOgorICAgICAg
ICAoV2ViQ29yZTo6QXN5bmNTY3JvbGxpbmdDb29yZGluYXRvcjo6Y2hpbGRyZW5PZk5vZGUgY29u
c3QpOgorICAgICAgICAqIHBhZ2Uvc2Nyb2xsaW5nL1Njcm9sbFNuYXBPZmZzZXRzSW5mby5jcHA6
CisgICAgICAgIChXZWJDb3JlOjpjb252ZXJ0T2Zmc2V0SW5mbyk6CisgICAgICAgICogcGxhdGZv
cm0vTGVuZ3RoLmNwcDoKKyAgICAgICAgKFdlYkNvcmU6Om1ha2VDYWxjdWxhdGVkKToKKyAgICAg
ICAgKiBwbGF0Zm9ybS9hbmltYXRpb24vQW5pbWF0aW9uTGlzdC5jcHA6CisgICAgICAgIChXZWJD
b3JlOjpBbmltYXRpb25MaXN0OjpBbmltYXRpb25MaXN0KToKKyAgICAgICAgKiBwbGF0Zm9ybS9j
b2NvYS9QbGF5YmFja1Nlc3Npb25Nb2RlbE1lZGlhRWxlbWVudC5tbToKKyAgICAgICAgKFdlYkNv
cmU6OlBsYXliYWNrU2Vzc2lvbk1vZGVsTWVkaWFFbGVtZW50OjphdWRpb01lZGlhU2VsZWN0aW9u
T3B0aW9ucyBjb25zdCk6CisgICAgICAgICogcGxhdGZvcm0vZW5jcnlwdGVkbWVkaWEvQ0RNUHJv
eHkuY3BwOgorICAgICAgICAoV2ViQ29yZTo6S2V5U3RvcmU6OmNvbnZlcnRUb0pTS2V5U3RhdHVz
VmVjdG9yIGNvbnN0KToKKyAgICAgICAgKiBwbGF0Zm9ybS9ncmFwaGljcy9GbG9hdFBvbHlnb24u
Y3BwOgorICAgICAgICAoV2ViQ29yZTo6RmxvYXRQb2x5Z29uOjpvdmVybGFwcGluZ0VkZ2VzIGNv
bnN0KToKKyAgICAgICAgKiBwbGF0Zm9ybS9ncmFwaGljcy9GbG9hdFF1YWQuY3BwOgorICAgICAg
ICAoV2ViQ29yZTo6Ym91bmRpbmdCb3hlcyk6CisgICAgICAgICogcGxhdGZvcm0vZ3JhcGhpY3Mv
YXZmb3VuZGF0aW9uL29iamMvQ0RNSW5zdGFuY2VGYWlyUGxheVN0cmVhbWluZ0FWRk9iakMubW06
CisgICAgICAgIChXZWJDb3JlOjpDRE1JbnN0YW5jZVNlc3Npb25GYWlyUGxheVN0cmVhbWluZ0FW
Rk9iakM6OnVwZGF0ZUxpY2Vuc2UpOgorICAgICAgICAqIHBsYXRmb3JtL2dyYXBoaWNzL2NhL1Rp
bGVHcmlkLmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OlRpbGVHcmlkOjpyZW1vdmVUaWxlcyk6Cisg
ICAgICAgIChXZWJDb3JlOjpUaWxlR3JpZDo6cmVtb3ZlQWxsVGlsZXMpOgorICAgICAgICAqIHBs
YXRmb3JtL2dyYXBoaWNzL2NhL1RpbGVHcmlkLmg6CisgICAgICAgICogcGxhdGZvcm0vZ3JhcGhp
Y3MvY2cvSW1hZ2VVdGlsaXRpZXNDRy5jcHA6CisgICAgICAgIChXZWJDb3JlOjpmaW5kSW1hZ2Vz
Rm9yVHJhbnNjb2RpbmcpOgorICAgICAgICAoV2ViQ29yZTo6dHJhbnNjb2RlSW1hZ2VzKToKKyAg
ICAgICAgKiBwbGF0Zm9ybS9ncmFwaGljcy9jb2NvYS9Gb250Q2FjaGVDb3JlVGV4dC5jcHA6Cisg
ICAgICAgIChXZWJDb3JlOjpmaW5kQ2xvc2VzdEZvbnQpOgorICAgICAgICAoV2ViQ29yZTo6Rm9u
dENhY2hlOjpnZXRGb250U2VsZWN0aW9uQ2FwYWJpbGl0aWVzSW5GYW1pbHkpOgorICAgICAgICAq
IHBsYXRmb3JtL21lZGlhc3RyZWFtL1JlYWx0aW1lTWVkaWFTb3VyY2UuY3BwOgorICAgICAgICAo
V2ViQ29yZTo6UmVhbHRpbWVNZWRpYVNvdXJjZTo6Zml0bmVzc0Rpc3RhbmNlKToKKyAgICAgICAg
KiBwbGF0Zm9ybS9uZXR3b3JrL0NhY2hlVmFsaWRhdGlvbi5jcHA6CisgICAgICAgIChXZWJDb3Jl
Ojpjb2xsZWN0VmFyeWluZ1JlcXVlc3RIZWFkZXJzSW50ZXJuYWwpOgorICAgICAgICAqIHBsYXRm
b3JtL25ldHdvcmsvRm9ybURhdGEuY3BwOgorICAgICAgICAoV2ViQ29yZTo6Rm9ybURhdGE6Omlz
b2xhdGVkQ29weSBjb25zdCk6CisgICAgICAgICogcGxhdGZvcm0vbmV0d29yay9Tb2NrZXRTdHJl
YW1IYW5kbGVJbXBsLmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OlNvY2tldFN0cmVhbUhhbmRsZUlt
cGw6OnBsYXRmb3JtU2VuZEhhbmRzaGFrZSk6CisgICAgICAgICogcGxhdGZvcm0vbmV0d29yay9j
b2NvYS9OZXR3b3JrU3RvcmFnZVNlc3Npb25Db2NvYS5tbToKKyAgICAgICAgKiBwbGF0Zm9ybS90
ZXh0L0xvY2FsZUlDVS5jcHA6CisgICAgICAgIChXZWJDb3JlOjpMb2NhbGVJQ1U6OmNyZWF0ZUxh
YmVsVmVjdG9yKToKKyAgICAgICAgKFdlYkNvcmU6OmNyZWF0ZUZhbGxiYWNrTW9udGhMYWJlbHMp
OgorICAgICAgICAoV2ViQ29yZTo6Y3JlYXRlRmFsbGJhY2tBTVBNTGFiZWxzKToKKyAgICAgICAg
KiBwbGF0Zm9ybS90ZXh0L0xvY2FsZU5vbmUuY3BwOgorICAgICAgICAoV2ViQ29yZTo6TG9jYWxl
Tm9uZTo6bW9udGhMYWJlbHMpOgorICAgICAgICAoV2ViQ29yZTo6TG9jYWxlTm9uZTo6c2hvcnRN
b250aExhYmVscyk6CisgICAgICAgIChXZWJDb3JlOjpMb2NhbGVOb25lOjp0aW1lQU1QTUxhYmVs
cyk6CisgICAgICAgICogcGxhdGZvcm0vdGV4dC9jb2NvYS9Mb2NhbGVDb2NvYS5tbToKKyAgICAg
ICAgKFdlYkNvcmU6OkxvY2FsZUNvY29hOjptb250aExhYmVscyk6CisgICAgICAgIChXZWJDb3Jl
OjpMb2NhbGVDb2NvYTo6c2hvcnRNb250aExhYmVscyk6CisgICAgICAgIChXZWJDb3JlOjpMb2Nh
bGVDb2NvYTo6c3RhbmRBbG9uZU1vbnRoTGFiZWxzKToKKyAgICAgICAgKFdlYkNvcmU6OkxvY2Fs
ZUNvY29hOjpzaG9ydFN0YW5kQWxvbmVNb250aExhYmVscyk6CisgICAgICAgIChXZWJDb3JlOjpM
b2NhbGVDb2NvYTo6dGltZUFNUE1MYWJlbHMpOgorICAgICAgICAqIHBsdWdpbnMvRE9NTWltZVR5
cGVBcnJheS5jcHA6CisgICAgICAgIChXZWJDb3JlOjpET01NaW1lVHlwZUFycmF5OjpzdXBwb3J0
ZWRQcm9wZXJ0eU5hbWVzIGNvbnN0KToKKyAgICAgICAgKFdlYkNvcmU6OkRPTU1pbWVUeXBlQXJy
YXk6OnN1cHBvcnRlZFByb3BlcnR5TmFtZXMpOiBEZWxldGVkLgorICAgICAgICAqIHBsdWdpbnMv
RE9NTWltZVR5cGVBcnJheS5oOgorICAgICAgICAqIHBsdWdpbnMvRE9NUGx1Z2luLmNwcDoKKyAg
ICAgICAgKFdlYkNvcmU6Om1ha2VNaW1lVHlwZXMpOgorICAgICAgICAoV2ViQ29yZTo6RE9NUGx1
Z2luOjpzdXBwb3J0ZWRQcm9wZXJ0eU5hbWVzIGNvbnN0KToKKyAgICAgICAgKFdlYkNvcmU6OkRP
TVBsdWdpbjo6c3VwcG9ydGVkUHJvcGVydHlOYW1lcyk6IERlbGV0ZWQuCisgICAgICAgICogcGx1
Z2lucy9ET01QbHVnaW4uaDoKKyAgICAgICAgKiBwbHVnaW5zL0RPTVBsdWdpbkFycmF5LmNwcDoK
KyAgICAgICAgKFdlYkNvcmU6OkRPTVBsdWdpbkFycmF5OjpzdXBwb3J0ZWRQcm9wZXJ0eU5hbWVz
IGNvbnN0KToKKyAgICAgICAgKFdlYkNvcmU6OkRPTVBsdWdpbkFycmF5OjpzdXBwb3J0ZWRQcm9w
ZXJ0eU5hbWVzKTogRGVsZXRlZC4KKyAgICAgICAgKiBwbHVnaW5zL0RPTVBsdWdpbkFycmF5Lmg6
CisgICAgICAgICogcmVuZGVyaW5nL0xheWVyQW5jZXN0b3JDbGlwcGluZ1N0YWNrLmNwcDoKKyAg
ICAgICAgKFdlYkNvcmU6OkxheWVyQW5jZXN0b3JDbGlwcGluZ1N0YWNrOjpMYXllckFuY2VzdG9y
Q2xpcHBpbmdTdGFjayk6CisgICAgICAgIChXZWJDb3JlOjpMYXllckFuY2VzdG9yQ2xpcHBpbmdT
dGFjazo6Y29tcG9zaXRlZENsaXBEYXRhIGNvbnN0KToKKyAgICAgICAgKiByZW5kZXJpbmcvUmVu
ZGVyQm94TW9kZWxPYmplY3QuY3BwOgorICAgICAgICAoV2ViQ29yZTo6UmVuZGVyQm94TW9kZWxP
YmplY3Q6OmNsaXBCb3JkZXJTaWRlUG9seWdvbik6CisgICAgICAgICogcmVuZGVyaW5nL1JlbmRl
ckVsZW1lbnQuY3BwOgorICAgICAgICAoV2ViQ29yZTo6UmVuZGVyRWxlbWVudDo6ZHJhd0xpbmVG
b3JCb3hTaWRlIGNvbnN0KToKKyAgICAgICAgKiByZW5kZXJpbmcvUmVuZGVyR3JpZC5jcHA6Cisg
ICAgICAgIChXZWJDb3JlOjpSZW5kZXJHcmlkOjp0cmFja1NpemVzRm9yQ29tcHV0ZWRTdHlsZSBj
b25zdCk6CisgICAgICAgICogc3R5bGUvQ2xhc3NDaGFuZ2VJbnZhbGlkYXRpb24uY3BwOgorICAg
ICAgICAoV2ViQ29yZTo6U3R5bGU6OmNvbGxlY3RDbGFzc2VzKToKKyAgICAgICAgKiBzdHlsZS9T
dHlsZUJ1aWxkZXJDb252ZXJ0ZXIuaDoKKyAgICAgICAgKFdlYkNvcmU6OlN0eWxlOjpCdWlsZGVy
Q29udmVydGVyOjpjb252ZXJ0VG8xMDBQZXJjZW50TWludXNMZW5ndGgpOgorICAgICAgICAqIHRl
c3RpbmcvTW9ja0NETUZhY3RvcnkuY3BwOgorICAgICAgICAoV2ViQ29yZTo6TW9ja0NETUluc3Rh
bmNlU2Vzc2lvbjo6dXBkYXRlTGljZW5zZSk6CisgICAgICAgIChXZWJDb3JlOjpNb2NrQ0RNSW5z
dGFuY2VTZXNzaW9uOjpyZW1vdmVTZXNzaW9uRGF0YSk6CisgICAgICAgICogd29ya2Vycy9zZXJ2
aWNlL3NlcnZlci9TV1NlcnZlci5jcHA6CisgICAgICAgIChXZWJDb3JlOjpTV1NlcnZlcjo6Z2V0
UmVnaXN0cmF0aW9ucyk6CisKIDIwMjItMDItMTYgIEVyaWMgQ2FybHNvbiAgPGVyaWMuY2FybHNv
bkBhcHBsZS5jb20+CiAKICAgICAgICAgW0NvY29hXSBVcGRhdGUgYXVkaW8gc2Vzc2lvbiBjYXRl
Z29yeSBiZWZvcmUgc2V0dGluZyBOb3dQbGF5aW5nIHN0YXR1cwpkaWZmIC0tZ2l0IGEvU291cmNl
L1dlYktpdC9DaGFuZ2VMb2cgYi9Tb3VyY2UvV2ViS2l0L0NoYW5nZUxvZwppbmRleCAxNzU5NDVk
ZTIyMzM4ZjJkM2VhYjU0YmQ5ZTlhY2JjMjU0NGQ4NmMzLi5jNTJkMDYzOGRhZDlmZWQxMWE0NWE1
NTBiMmI1N2Y2YTQ4ZTFmYTkyIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViS2l0L0NoYW5nZUxvZwor
KysgYi9Tb3VyY2UvV2ViS2l0L0NoYW5nZUxvZwpAQCAtMSwzICsxLDExNCBAQAorMjAyMi0wMi0x
NiAgQ2hyaXMgRHVtZXogIDxjZHVtZXpAYXBwbGUuY29tPgorCisgICAgICAgIENsZWFuIHVwIC8g
b3B0aW1pemUgY2FsbCBzaXRlcyBjb25zdHJ1Y3RpbmcgdmVjdG9ycworICAgICAgICBodHRwczov
L2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9MjM2NzQ4CisKKyAgICAgICAgUmV2aWV3
ZWQgYnkgTk9CT0RZIChPT1BTISkuCisKKyAgICAgICAgQ2xlYW4gdXAgLyBvcHRpbWl6ZSBjYWxs
IHNpdGVzIGNvbnN0cnVjdGluZyB2ZWN0b3JzOgorICAgICAgICAtIFVzZSBWZWN0b3I6Om1hcCgp
IC8gV1RGOjptYXAoKSB3aGVyZSBhcHByb3ByaWF0ZQorICAgICAgICAtIFJlcGxhY2UgVmVjdG9y
OjpyZXNlcnZlQ2FwYWNpdHkoKSB3aXRoIFZlY3Rvcjo6cmVzZXJ2ZUluaXRpYWxDYXBhY2l0eSgp
IAorICAgICAgICAgIHdoZXJlIGFwcHJvcHJpYXRlCisgICAgICAgIC0gUmVwbGFjZSBWZWN0b3I6
OmFwcGVuZCgpIHdpdGggVmVjdG9yOjp1bmNoZWNrZWRBcHBlbmQoKSB3aGVyZSBhcHByb3ByaWF0
ZQorICAgICAgICAtIExldmVyYWdlIHRoZSBmYWN0IHRoYXQgVmVjdG9yPFJlZjxGb28+PiBpcyBu
b3cgY29weWFibGUgKEJlY2F1c2UgUmVmPD4gbm93IGhhcworICAgICAgICAgIGEgY29weSBjb25z
dHJ1Y3RvcikKKyAgICAgICAgLSBDYWxsIGNyb3NzVGhyZWFkQ29weSgpIHRvIGlzb2xhdGUtY29w
eSBhIFZlY3RvcigpIHdpdGhvdXQgaXRlcmF0aW5nLgorICAgICAgICAtIExldmVyYWdlIFZlY3Rv
ciBjb25zdHJ1Y3RvciB0aGF0IHRha2VzIGluIGFuIGludGlhbGl6YXRpb24gbGlzdCBpbiBtb3Jl
IGNhc2VzCisgICAgICAgIC0gTGV2ZXJhZ2UgVmVjdG9yOjpmcm9tKCkgaW4gbW9yZSBjYXNlcyB0
byBzaW1wbGlmeSB2ZWN0b3IgY29uc3RydWN0aW9uIGluIHNvbWUKKyAgICAgICAgICBjYXNlLgor
ICAgICAgICAtIERyb3AgdW5uZWNlc3NhcnkgY2FsbHMgdG8gVmVjdG9yOjpyZXNlcnZlKkNhcGFj
aXR5KCkgYmVmb3JlIGNhbGxpbmcKKyAgICAgICAgICBWZWN0b3I6OmFwcGVuZChUKiwgc2l6ZV90
KSBzaW5jZSB0aGUgYXBwZW5kKCkgaW1wbGVtZW50YXRpb24gYWxyZWFkeSBkb2VzIHRoaXMKKyAg
ICAgICAgICBmb3IgdXMuCisgICAgICAgIC0gTGV2ZXJhZ2UgY29weVRvVmVjdG9yKCkgYW5kIGNv
cHlUb1ZlY3Rvck9mPD4gaW4gbW9yZSBjYXNlcworICAgICAgICAtIENhbGwgc2hyaW5rVG9GaXQo
KSBpbiBzb21lIGNhc2VzIHdoZXJlIHdlIHJlc2VydmUgY2FwYWNpdHkgYW5kIHRoZW4gYXBwZW5k
KCkKKyAgICAgICAgICBidXQgbWF5IG5vdCBhcHBlbmQoKSBhcyBtdWNoIGFzIHdlIHJlc2VydmVk
LiAKKworICAgICAgICAqIE5ldHdvcmtQcm9jZXNzL1dlYlN0b3JhZ2UvTG9jYWxTdG9yYWdlRGF0
YWJhc2VUcmFja2VyLmNwcDoKKyAgICAgICAgKFdlYktpdDo6TG9jYWxTdG9yYWdlRGF0YWJhc2VU
cmFja2VyOjpvcmlnaW5EZXRhaWxzQ3Jvc3NUaHJlYWRDb3B5KToKKyAgICAgICAgKiBOZXR3b3Jr
UHJvY2Vzcy9jYWNoZS9DYWNoZVN0b3JhZ2VFbmdpbmVDYWNoZXMuY3BwOgorICAgICAgICAoV2Vi
S2l0OjpDYWNoZVN0b3JhZ2U6OkNhY2hlczo6Y2FjaGVJbmZvcyk6CisgICAgICAgICogU2hhcmVk
L0FQSS9BUElBcnJheS5jcHA6CisgICAgICAgIChBUEk6OkFycmF5OjpjcmVhdGVTdHJpbmdBcnJh
eSk6CisgICAgICAgIChBUEk6OkFycmF5Ojpjb3B5KToKKyAgICAgICAgKiBTaGFyZWQvQVBJL0FQ
SURpY3Rpb25hcnkuY3BwOgorICAgICAgICAoQVBJOjpEaWN0aW9uYXJ5OjprZXlzIGNvbnN0KToK
KyAgICAgICAgKiBTaGFyZWQvVXNlckRhdGEuY3BwOgorICAgICAgICAoV2ViS2l0Ojp0cmFuc2Zv
cm1HcmFwaCk6CisgICAgICAgICogU2hhcmVkL1dlYkNvbnRleHRNZW51SXRlbS5jcHA6CisgICAg
ICAgIChXZWJLaXQ6OldlYkNvbnRleHRNZW51SXRlbTo6Y3JlYXRlKToKKyAgICAgICAgKFdlYktp
dDo6V2ViQ29udGV4dE1lbnVJdGVtOjpzdWJtZW51SXRlbXNBc0FQSUFycmF5IGNvbnN0KToKKyAg
ICAgICAgKiBTaGFyZWQvV2ViQ29udGV4dE1lbnVJdGVtRGF0YS5jcHA6CisgICAgICAgIChXZWJL
aXQ6OmtpdEl0ZW1zKToKKyAgICAgICAgKFdlYktpdDo6Y29yZUl0ZW1zKToKKyAgICAgICAgKiBV
SVByb2Nlc3MvQVBJL0FQSVdlYkF1dGhlbnRpY2F0aW9uUGFuZWwuY3BwOgorICAgICAgICAoQVBJ
OjpXZWJBdXRoZW50aWNhdGlvblBhbmVsOjpXZWJBdXRoZW50aWNhdGlvblBhbmVsKToKKyAgICAg
ICAgKiBVSVByb2Nlc3MvQVBJL0FQSVdlYnNpdGVQb2xpY2llcy5jcHA6CisgICAgICAgIChBUEk6
OldlYnNpdGVQb2xpY2llczo6Y29weSBjb25zdCk6CisgICAgICAgIChBUEk6OldlYnNpdGVQb2xp
Y2llczo6ZGF0YSk6CisgICAgICAgICogVUlQcm9jZXNzL0FQSS9DL1dLUGFnZS5jcHA6CisgICAg
ICAgIChBUEk6OnRvQVBJT2JqZWN0VmVjdG9yKToKKyAgICAgICAgKFdLUGFnZVNldFBhZ2VDb250
ZXh0TWVudUNsaWVudCk6CisgICAgICAgIChXS1BhZ2VTZXRQYWdlRmluZE1hdGNoZXNDbGllbnQp
OgorICAgICAgICAoV0tQYWdlU2V0UGFnZUxvYWRlckNsaWVudCk6CisgICAgICAgICogVUlQcm9j
ZXNzL0NvY29hL1ZpZGVvRnVsbHNjcmVlbk1hbmFnZXJQcm94eS5tbToKKyAgICAgICAgKFdlYktp
dDo6VmlkZW9GdWxsc2NyZWVuTWFuYWdlclByb3h5Ojpmb3JFYWNoU2Vzc2lvbik6CisgICAgICAg
ICogVUlQcm9jZXNzL0dhbWVwYWQvVUlHYW1lcGFkUHJvdmlkZXIuY3BwOgorICAgICAgICAoV2Vi
S2l0OjpVSUdhbWVwYWRQcm92aWRlcjo6c25hcHNob3RHYW1lcGFkcyk6CisgICAgICAgICogVUlQ
cm9jZXNzL05ldHdvcmsvTmV0d29ya1Byb2Nlc3NQcm94eS5jcHA6CisgICAgICAgIChXZWJLaXQ6
Ok5ldHdvcmtQcm9jZXNzUHJveHk6OmFsbE5ldHdvcmtQcm9jZXNzZXMpOgorICAgICAgICAoV2Vi
S2l0OjpOZXR3b3JrUHJvY2Vzc1Byb3h5Ojp1cGRhdGVQcmV2YWxlbnREb21haW5zVG9CbG9ja0Nv
b2tpZXNGb3IpOgorICAgICAgICAqIFVJUHJvY2Vzcy9Ob3RpZmljYXRpb25zL1dlYk5vdGlmaWNh
dGlvbk1hbmFnZXJQcm94eS5jcHA6CisgICAgICAgIChXZWJLaXQ6OldlYk5vdGlmaWNhdGlvbk1h
bmFnZXJQcm94eTo6cHJvdmlkZXJEaWRSZW1vdmVOb3RpZmljYXRpb25Qb2xpY2llcyk6CisgICAg
ICAgICogVUlQcm9jZXNzL05vdGlmaWNhdGlvbnMvV2ViTm90aWZpY2F0aW9uUHJvdmlkZXIuY3Bw
OgorICAgICAgICAoV2ViS2l0OjpXZWJOb3RpZmljYXRpb25Qcm92aWRlcjo6Y2xlYXJOb3RpZmlj
YXRpb25zKToKKyAgICAgICAgKiBVSVByb2Nlc3MvU3RhdGlzdGljc1JlcXVlc3QuY3BwOgorICAg
ICAgICAoV2ViS2l0OjpTdGF0aXN0aWNzUmVxdWVzdDo6Y29tcGxldGVkUmVxdWVzdCk6CisgICAg
ICAgICogVUlQcm9jZXNzL1VzZXJDb250ZW50L1dlYlVzZXJDb250ZW50Q29udHJvbGxlclByb3h5
LmNwcDoKKyAgICAgICAgKFdlYktpdDo6V2ViVXNlckNvbnRlbnRDb250cm9sbGVyUHJveHk6OnJl
bW92ZUFsbFVzZXJTY3JpcHRzKToKKyAgICAgICAgKFdlYktpdDo6V2ViVXNlckNvbnRlbnRDb250
cm9sbGVyUHJveHk6OnJlbW92ZUFsbFVzZXJTdHlsZVNoZWV0cyk6CisgICAgICAgICogVUlQcm9j
ZXNzL1dlYkF1dGhlbnRpY2F0aW9uL0NvY29hL1dlYkF1dGhlbnRpY2F0aW9uUGFuZWxDbGllbnQu
bW06CisgICAgICAgIChXZWJLaXQ6OldlYkF1dGhlbnRpY2F0aW9uUGFuZWxDbGllbnQ6OnNlbGVj
dEFzc2VydGlvblJlc3BvbnNlIGNvbnN0KToKKyAgICAgICAgKiBVSVByb2Nlc3MvV2ViQXV0aGVu
dGljYXRpb24vZmlkby9DdGFwQXV0aGVudGljYXRvci5jcHA6CisgICAgICAgIChXZWJLaXQ6OkN0
YXBBdXRoZW50aWNhdG9yOjpjb250aW51ZUdldE5leHRBc3NlcnRpb25BZnRlclJlc3BvbnNlUmVj
ZWl2ZWQpOgorICAgICAgICAqIFVJUHJvY2Vzcy9XZWJCYWNrRm9yd2FyZExpc3QuY3BwOgorICAg
ICAgICAoV2ViS2l0OjpXZWJCYWNrRm9yd2FyZExpc3Q6OmFkZEl0ZW0pOgorICAgICAgICAoV2Vi
S2l0OjpXZWJCYWNrRm9yd2FyZExpc3Q6OmNsZWFyKToKKyAgICAgICAgKFdlYktpdDo6V2ViQmFj
a0ZvcndhcmRMaXN0OjpyZXN0b3JlRnJvbVN0YXRlKToKKyAgICAgICAgKiBVSVByb2Nlc3MvV2Vi
UGFnZVByb3h5LmNwcDoKKyAgICAgICAgKFdlYktpdDo6V2ViUGFnZVByb3h5OjpydW5KYXZhU2Ny
aXB0SW5GcmFtZUluU2NyaXB0V29ybGQpOgorICAgICAgICAoV2ViS2l0OjpXZWJQYWdlUHJveHk6
OnNwZWVjaFN5bnRoZXNpc1ZvaWNlTGlzdCk6CisgICAgICAgICogVUlQcm9jZXNzL1dlYnNpdGVE
YXRhL1dlYnNpdGVEYXRhU3RvcmUuY3BwOgorICAgICAgICAoV2ViS2l0OjpXZWJzaXRlRGF0YVN0
b3JlOjpmZXRjaERhdGFBbmRBcHBseSk6CisgICAgICAgIChXZWJLaXQ6OldlYnNpdGVEYXRhU3Rv
cmU6OnBhcmFtZXRlcnNGcm9tRWFjaFdlYnNpdGVEYXRhU3RvcmUpOgorICAgICAgICAqIFVJUHJv
Y2Vzcy9tYWMvV0tUZXh0RmluZGVyQ2xpZW50Lm1tOgorICAgICAgICAoLVtXS1RleHRGaW5kZXJD
bGllbnQgcmVwbGFjZU1hdGNoZXM6d2l0aFN0cmluZzppblNlbGVjdGlvbk9ubHk6cmVzdWx0Q29s
bGVjdG9yOl0pOgorICAgICAgICAqIFdlYlByb2Nlc3MvR1BVL21lZGlhL1JlbW90ZVJlbW90ZUNv
bW1hbmRMaXN0ZW5lci5jcHA6CisgICAgICAgIChXZWJLaXQ6OlJlbW90ZVJlbW90ZUNvbW1hbmRM
aXN0ZW5lcjo6dXBkYXRlU3VwcG9ydGVkQ29tbWFuZHMpOgorICAgICAgICAqIFdlYlByb2Nlc3Mv
SW5qZWN0ZWRCdW5kbGUvQVBJL2MvV0tCdW5kbGVQYWdlLmNwcDoKKyAgICAgICAgKGNvbnRleHRN
ZW51SXRlbXMpOgorICAgICAgICAoV0tCdW5kbGVQYWdlQ29weU9yaWdpbnNXaXRoQXBwbGljYXRp
b25DYWNoZSk6CisgICAgICAgICogV2ViUHJvY2Vzcy9JbmplY3RlZEJ1bmRsZS9JbmplY3RlZEJ1
bmRsZVBhZ2VDb250ZXh0TWVudUNsaWVudC5jcHA6CisgICAgICAgIChXZWJLaXQ6OkluamVjdGVk
QnVuZGxlUGFnZUNvbnRleHRNZW51Q2xpZW50OjpnZXRDdXN0b21NZW51RnJvbURlZmF1bHRJdGVt
cyk6CisgICAgICAgICogV2ViUHJvY2Vzcy9JbmplY3RlZEJ1bmRsZS9JbmplY3RlZEJ1bmRsZVBh
Z2VGb3JtQ2xpZW50LmNwcDoKKyAgICAgICAgKFdlYktpdDo6SW5qZWN0ZWRCdW5kbGVQYWdlRm9y
bUNsaWVudDo6ZGlkQXNzb2NpYXRlRm9ybUNvbnRyb2xzKToKKyAgICAgICAgKiBXZWJQcm9jZXNz
L05ldHdvcmsvV2ViU29ja2V0U3RyZWFtLmNwcDoKKyAgICAgICAgKFdlYktpdDo6V2ViU29ja2V0
U3RyZWFtOjpuZXR3b3JrUHJvY2Vzc0NyYXNoZWQpOgorICAgICAgICAqIFdlYlByb2Nlc3MvTmV0
d29yay93ZWJydGMvV2ViUlRDUmVzb2x2ZXIuY3BwOgorICAgICAgICAoV2ViS2l0OjpXZWJSVENS
ZXNvbHZlcjo6c2V0UmVzb2x2ZWRBZGRyZXNzKToKKyAgICAgICAgKiBXZWJQcm9jZXNzL1dlYkNv
cmVTdXBwb3J0L1dlYlJlc291cmNlTG9hZE9ic2VydmVyLmNwcDoKKyAgICAgICAgKFdlYktpdDo6
V2ViUmVzb3VyY2VMb2FkT2JzZXJ2ZXI6OnRha2VTdGF0aXN0aWNzKToKKyAgICAgICAgKiBXZWJQ
cm9jZXNzL1dlYlBhZ2UvRmluZENvbnRyb2xsZXIuY3BwOgorICAgICAgICAoV2ViS2l0OjpGaW5k
Q29udHJvbGxlcjo6cmVwbGFjZU1hdGNoZXMpOgorICAgICAgICAqIFdlYlByb2Nlc3MvV2ViUGFn
ZS9SZW1vdGVMYXllclRyZWUvUGxhdGZvcm1DQUFuaW1hdGlvblJlbW90ZS5tbToKKyAgICAgICAg
KFdlYktpdDo6dG9LZXlmcmFtZVZhbHVlVmVjdG9yKToKKyAgICAgICAgKFdlYktpdDo6UGxhdGZv
cm1DQUFuaW1hdGlvblJlbW90ZTo6c2V0VmFsdWVzKToKKyAgICAgICAgKFdlYktpdDo6UGxhdGZv
cm1DQUFuaW1hdGlvblJlbW90ZTo6c2V0VGltaW5nRnVuY3Rpb25zKToKKyAgICAgICAgKiBXZWJQ
cm9jZXNzL1dlYlBhZ2UvVmlld0dlc3R1cmVHZW9tZXRyeUNvbGxlY3Rvci5jcHA6CisgICAgICAg
IChXZWJLaXQ6OlZpZXdHZXN0dXJlR2VvbWV0cnlDb2xsZWN0b3I6OmNvbXB1dGVUZXh0TGVnaWJp
bGl0eVNjYWxlcyk6CisgICAgICAgICogV2ViUHJvY2Vzcy9XZWJQYWdlL1dlYlBhZ2UuY3BwOgor
ICAgICAgICAoV2ViS2l0OjpXZWJQYWdlOjp0cmFja2VkUmVwYWludFJlY3RzKToKKyAgICAgICAg
KFdlYktpdDo6ZHVtcEhpc3RvcnlJdGVtKToKKwogMjAyMi0wMi0xNiAgUGVyIEFybmUgVm9sbGFu
ICA8cHZvbGxhbkBhcHBsZS5jb20+CiAKICAgICAgICAgW21hY09TXSBBZGQgYWNjZXNzIHRvIG1h
Y2ggc2VydmljZSBpbiB0aGUgTmV0d29ya2luZyBwcm9jZXNzIGZvciBhbGwgdXNlcnMKZGlmZiAt
LWdpdCBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9iMy9haXIvQWlyQ29kZS5jcHAgYi9Tb3VyY2Uv
SmF2YVNjcmlwdENvcmUvYjMvYWlyL0FpckNvZGUuY3BwCmluZGV4IDg4NjU1YmM3MDFlNmU1ZmQ4
YmRkZjY2MzcxNzQwZGRjMjQ2ZjY1MDIuLmU2OTdiZDUzMDU4ZmRlMTE1MjNmZTViODM1OTQ4Mzky
MWQ1NzMyOTMgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9iMy9haXIvQWlyQ29k
ZS5jcHAKKysrIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL2IzL2Fpci9BaXJDb2RlLmNwcApAQCAt
MzMxLDEyICszMzEsOSBAQCB1bnNpZ25lZCBDb2RlOjpqc0hhc2goKSBjb25zdAogICAgIHJldHVy
biByZXN1bHQ7CiB9CiAKLXZvaWQgQ29kZTo6c2V0TnVtRW50cnlwb2ludHModW5zaWduZWQgbnVt
RW50cnlwb2ludHMpCit2b2lkIENvZGU6OnNldE51bUVudHJ5cG9pbnRzKHVuc2lnbmVkIG51bUVu
dHJ5UG9pbnRzKQogewotICAgIG1fcHJvbG9ndWVHZW5lcmF0b3JzLmNsZWFyKCk7Ci0gICAgbV9w
cm9sb2d1ZUdlbmVyYXRvcnMucmVzZXJ2ZUNhcGFjaXR5KG51bUVudHJ5cG9pbnRzKTsKLSAgICBm
b3IgKHVuc2lnbmVkIGkgPSAwOyBpIDwgbnVtRW50cnlwb2ludHM7ICsraSkKLSAgICAgICAgbV9w
cm9sb2d1ZUdlbmVyYXRvcnMudW5jaGVja2VkQXBwZW5kKG1fZGVmYXVsdFByb2xvZ3VlR2VuZXJh
dG9yLmNvcHlSZWYoKSk7CisgICAgbV9wcm9sb2d1ZUdlbmVyYXRvcnMgPSBWZWN0b3IgeyBudW1F
bnRyeVBvaW50cywgbV9kZWZhdWx0UHJvbG9ndWVHZW5lcmF0b3IuY29weVJlZigpIH07CiB9CiAK
IH0gfSB9IC8vIG5hbWVzcGFjZSBKU0M6OkIzOjpBaXIKZGlmZiAtLWdpdCBhL1NvdXJjZS9KYXZh
U2NyaXB0Q29yZS9ieXRlY29tcGlsZXIvTm9kZXNDb2RlZ2VuLmNwcCBiL1NvdXJjZS9KYXZhU2Ny
aXB0Q29yZS9ieXRlY29tcGlsZXIvTm9kZXNDb2RlZ2VuLmNwcAppbmRleCAzYzI0MjdiYjBjODM4
MTYwOWRlMzc3NmM2ZjBmMWQzN2FhMDRjODMwLi5mNmU0M2VjOGNiYmE4ZjI1NTkwYzZmODA4YTI0
NDc1ZGMyYjZlYWUxIDEwMDY0NAotLS0gYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvYnl0ZWNvbXBp
bGVyL05vZGVzQ29kZWdlbi5jcHAKKysrIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL2J5dGVjb21w
aWxlci9Ob2Rlc0NvZGVnZW4uY3BwCkBAIC01Mzc0LDcgKzUzNzQsNyBAQCBSZWdpc3RlcklEKiBB
cnJheVBhdHRlcm5Ob2RlOjplbWl0RGlyZWN0QmluZGluZyhCeXRlY29kZUdlbmVyYXRvciYgZ2Vu
ZXJhdG9yLCBSZQogICAgIGlmIChtX3RhcmdldFBhdHRlcm5zLnNpemUoKSAhPSBlbGVtZW50cy5z
aXplKCkpCiAgICAgICAgIHJldHVybiBudWxscHRyOwogICAgIFZlY3RvcjxSZWZQdHI8UmVnaXN0
ZXJJRD4+IHJlZ2lzdGVyczsKLSAgICByZWdpc3RlcnMucmVzZXJ2ZUNhcGFjaXR5KG1fdGFyZ2V0
UGF0dGVybnMuc2l6ZSgpKTsKKyAgICByZWdpc3RlcnMucmVzZXJ2ZUluaXRpYWxDYXBhY2l0eSht
X3RhcmdldFBhdHRlcm5zLnNpemUoKSk7CiAgICAgZm9yIChzaXplX3QgaSA9IDA7IGkgPCBtX3Rh
cmdldFBhdHRlcm5zLnNpemUoKTsgaSsrKSB7CiAgICAgICAgIHJlZ2lzdGVycy51bmNoZWNrZWRB
cHBlbmQoZ2VuZXJhdG9yLm5ld1RlbXBvcmFyeSgpKTsKICAgICAgICAgZ2VuZXJhdG9yLmVtaXRO
b2RlKHJlZ2lzdGVycy5sYXN0KCkuZ2V0KCksIGVsZW1lbnRzW2ldKTsKZGlmZiAtLWdpdCBhL1Nv
dXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHSW5QbGFjZUFic3RyYWN0U3RhdGUuY3BwIGIvU291
cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdJblBsYWNlQWJzdHJhY3RTdGF0ZS5jcHAKaW5kZXgg
OTg0MmJiNzg3MGNhY2MwZTZiNmYyNzMwODY3MDQxODNkOTMxOWYyNS4uYWNlMGIxYjY0NzllMWI2
YzRjOWUzMjhkYzYxNDAxZjhiMzYyNThkYiAxMDA2NDQKLS0tIGEvU291cmNlL0phdmFTY3JpcHRD
b3JlL2RmZy9ERkdJblBsYWNlQWJzdHJhY3RTdGF0ZS5jcHAKKysrIGIvU291cmNlL0phdmFTY3Jp
cHRDb3JlL2RmZy9ERkdJblBsYWNlQWJzdHJhY3RTdGF0ZS5jcHAKQEAgLTg5LDEwICs4OSw5IEBA
IHZvaWQgSW5QbGFjZUFic3RyYWN0U3RhdGU6OmJlZ2luQmFzaWNCbG9jayhCYXNpY0Jsb2NrKiBi
YXNpY0Jsb2NrKQogCiBzdGF0aWMgdm9pZCBzZXRMaXZlVmFsdWVzKFZlY3RvcjxOb2RlQWJzdHJh
Y3RWYWx1ZVBhaXI+JiB2YWx1ZXMsIGNvbnN0IFZlY3RvcjxOb2RlRmxvd1Byb2plY3Rpb24+JiBs
aXZlKQogewotICAgIHZhbHVlcy5zaHJpbmsoMCk7Ci0gICAgdmFsdWVzLnJlc2VydmVDYXBhY2l0
eShsaXZlLnNpemUoKSk7Ci0gICAgZm9yIChOb2RlRmxvd1Byb2plY3Rpb24gbm9kZSA6IGxpdmUp
Ci0gICAgICAgIHZhbHVlcy51bmNoZWNrZWRBcHBlbmQoTm9kZUFic3RyYWN0VmFsdWVQYWlyIHsg
bm9kZSwgQWJzdHJhY3RWYWx1ZSgpIH0pOworICAgIHZhbHVlcyA9IGxpdmUubWFwKFtdKGF1dG8g
bm9kZSkgeworICAgICAgICByZXR1cm4gTm9kZUFic3RyYWN0VmFsdWVQYWlyIHsgbm9kZSwgQWJz
dHJhY3RWYWx1ZSgpIH07CisgICAgfSk7CiB9CiAKIE9wZXJhbmRzPEFic3RyYWN0VmFsdWU+JiBJ
blBsYWNlQWJzdHJhY3RTdGF0ZTo6dmFyaWFibGVzRm9yRGVidWdnaW5nKCkKZGlmZiAtLWdpdCBh
L1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHTGl2ZW5lc3NBbmFseXNpc1BoYXNlLmNwcCBi
L1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHTGl2ZW5lc3NBbmFseXNpc1BoYXNlLmNwcApp
bmRleCAxMDAxMTgzM2IyNDcxZWU1YjFiNjBmMjIwMTZlZWYwZjRlNmRmNmE4Li42YzZlMmE0NTE5
MGNlNDEzNTliYTE1Mjc4YThjZTJkZTNhZjRmZTk1IDEwMDY0NAotLS0gYS9Tb3VyY2UvSmF2YVNj
cmlwdENvcmUvZGZnL0RGR0xpdmVuZXNzQW5hbHlzaXNQaGFzZS5jcHAKKysrIGIvU291cmNlL0ph
dmFTY3JpcHRDb3JlL2RmZy9ERkdMaXZlbmVzc0FuYWx5c2lzUGhhc2UuY3BwCkBAIC05MSwyMCAr
OTEsMTQgQEAgcHVibGljOgogICAgICAgICAgICAgICAgIGNvbnRpbnVlOwogCiAgICAgICAgICAg
ICB7Ci0gICAgICAgICAgICAgICAgY29uc3QgVmVjdG9yPHVuc2lnbmVkLCAwLCBVbnNhZmVWZWN0
b3JPdmVyZmxvdywgMT4mIGxpdmVBdEhlYWRJbmRpY2VzID0gbV9saXZlQXRIZWFkW2Jsb2NrSW5k
ZXhdOwotICAgICAgICAgICAgICAgIFZlY3RvcjxOb2RlRmxvd1Byb2plY3Rpb24+JiBsaXZlQXRI
ZWFkID0gYmxvY2stPnNzYS0+bGl2ZUF0SGVhZDsKLSAgICAgICAgICAgICAgICBsaXZlQXRIZWFk
LnNocmluaygwKTsKLSAgICAgICAgICAgICAgICBsaXZlQXRIZWFkLnJlc2VydmVDYXBhY2l0eShs
aXZlQXRIZWFkSW5kaWNlcy5zaXplKCkpOwotICAgICAgICAgICAgICAgIGZvciAodW5zaWduZWQg
aW5kZXggOiBsaXZlQXRIZWFkSW5kaWNlcykKLSAgICAgICAgICAgICAgICAgICAgbGl2ZUF0SGVh
ZC51bmNoZWNrZWRBcHBlbmQobV9pbmRleGluZy5ub2RlUHJvamVjdGlvbihpbmRleCkpOworICAg
ICAgICAgICAgICAgIGJsb2NrLT5zc2EtPmxpdmVBdEhlYWQgPSBtX2xpdmVBdEhlYWRbYmxvY2tJ
bmRleF0ubWFwKFt0aGlzXShhdXRvIGluZGV4KSB7CisgICAgICAgICAgICAgICAgICAgIHJldHVy
biBtX2luZGV4aW5nLm5vZGVQcm9qZWN0aW9uKGluZGV4KTsKKyAgICAgICAgICAgICAgICB9KTsK
ICAgICAgICAgICAgIH0KICAgICAgICAgICAgIHsKLSAgICAgICAgICAgICAgICBjb25zdCBMaXZl
U2V0JiBsaXZlQXRUYWlsSW5kaWNlcyA9IG1fbGl2ZUF0VGFpbFtibG9ja0luZGV4XTsKLSAgICAg
ICAgICAgICAgICBWZWN0b3I8Tm9kZUZsb3dQcm9qZWN0aW9uPiYgbGl2ZUF0VGFpbCA9IGJsb2Nr
LT5zc2EtPmxpdmVBdFRhaWw7Ci0gICAgICAgICAgICAgICAgbGl2ZUF0VGFpbC5zaHJpbmsoMCk7
Ci0gICAgICAgICAgICAgICAgbGl2ZUF0VGFpbC5yZXNlcnZlQ2FwYWNpdHkobGl2ZUF0VGFpbElu
ZGljZXMuc2l6ZSgpKTsKLSAgICAgICAgICAgICAgICBmb3IgKHVuc2lnbmVkIGluZGV4IDogbV9s
aXZlQXRUYWlsW2Jsb2NrSW5kZXhdKQotICAgICAgICAgICAgICAgICAgICBsaXZlQXRUYWlsLnVu
Y2hlY2tlZEFwcGVuZChtX2luZGV4aW5nLm5vZGVQcm9qZWN0aW9uKGluZGV4KSk7CisgICAgICAg
ICAgICAgICAgYmxvY2stPnNzYS0+bGl2ZUF0VGFpbCA9IFdURjo6bWFwKG1fbGl2ZUF0VGFpbFti
bG9ja0luZGV4XSwgW3RoaXNdKGF1dG8gaW5kZXgpIHsKKyAgICAgICAgICAgICAgICAgICAgcmV0
dXJuIG1faW5kZXhpbmcubm9kZVByb2plY3Rpb24oaW5kZXgpOworICAgICAgICAgICAgICAgIH0p
OwogICAgICAgICAgICAgfQogICAgICAgICB9CiAKZGlmZiAtLWdpdCBhL1NvdXJjZS9KYXZhU2Ny
aXB0Q29yZS9kZmcvREZHU2NvcmVCb2FyZC5oIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9E
RkdTY29yZUJvYXJkLmgKaW5kZXggYzI5NWQyMWJmMzRiZjVkOWMyOWJlMGU2ZDU2OTM1NjJkZWI1
MTYzMy4uODUxZDRmMGZkNmYyZmFkNWY3OWQ1YWMwMDNiMDNiM2UwYWQ1MDkwMSAxMDA2NDQKLS0t
IGEvU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdTY29yZUJvYXJkLmgKKysrIGIvU291cmNl
L0phdmFTY3JpcHRDb3JlL2RmZy9ERkdTY29yZUJvYXJkLmgKQEAgLTQ1LDcgKzQ1LDcgQEAgcHVi
bGljOgogICAgICAgICA6IG1faGlnaFdhdGVybWFyayhuZXh0TWFjaGluZUxvY2FsICsgMSkKICAg
ICB7CiAgICAgICAgIG1fdXNlZC5maWxsKG1heCgpLCBuZXh0TWFjaGluZUxvY2FsKTsKLSAgICAg
ICAgbV9mcmVlLnJlc2VydmVDYXBhY2l0eShuZXh0TWFjaGluZUxvY2FsKTsKKyAgICAgICAgbV9m
cmVlLnJlc2VydmVJbml0aWFsQ2FwYWNpdHkobmV4dE1hY2hpbmVMb2NhbCk7CiAgICAgfQogCiAg
ICAgflNjb3JlQm9hcmQoKQpkaWZmIC0tZ2l0IGEvU291cmNlL0phdmFTY3JpcHRDb3JlL2luc3Bl
Y3Rvci9hZ2VudHMvSW5zcGVjdG9yRGVidWdnZXJBZ2VudC5jcHAgYi9Tb3VyY2UvSmF2YVNjcmlw
dENvcmUvaW5zcGVjdG9yL2FnZW50cy9JbnNwZWN0b3JEZWJ1Z2dlckFnZW50LmNwcAppbmRleCBi
ZTkxMGViMjgyZWU1M2U3ZjM1ZjZiMDNhNjY5YzU5Mzk3YzFkOGRkLi4zNzAwMGFiMTlhZGFiNzIz
OWZiY2E3MjhiMjRlODM5NDVhZTcyNjhiIDEwMDY0NAotLS0gYS9Tb3VyY2UvSmF2YVNjcmlwdENv
cmUvaW5zcGVjdG9yL2FnZW50cy9JbnNwZWN0b3JEZWJ1Z2dlckFnZW50LmNwcAorKysgYi9Tb3Vy
Y2UvSmF2YVNjcmlwdENvcmUvaW5zcGVjdG9yL2FnZW50cy9JbnNwZWN0b3JEZWJ1Z2dlckFnZW50
LmNwcApAQCAtMTA0LDcgKzEwNCw3IEBAIHN0YXRpYyBUIHBhcnNlQnJlYWtwb2ludE9wdGlvbnMo
UHJvdG9jb2w6OkVycm9yU3RyaW5nJiBlcnJvclN0cmluZywgUmVmUHRyPEpTT046CiAKICAgICAg
ICAgYXV0byBhY3Rpb25zUGF5bG9hZCA9IG9wdGlvbnMtPmdldEFycmF5KFByb3RvY29sOjpEZWJ1
Z2dlcjo6QnJlYWtwb2ludE9wdGlvbnM6OmFjdGlvbnNLZXkpOwogICAgICAgICBpZiAoYXV0byBj
b3VudCA9IGFjdGlvbnNQYXlsb2FkID8gYWN0aW9uc1BheWxvYWQtPmxlbmd0aCgpIDogMCkgewot
ICAgICAgICAgICAgYWN0aW9ucy5yZXNlcnZlQ2FwYWNpdHkoY291bnQpOworICAgICAgICAgICAg
YWN0aW9ucy5yZXNlcnZlSW5pdGlhbENhcGFjaXR5KGNvdW50KTsKIAogICAgICAgICAgICAgZm9y
ICh1bnNpZ25lZCBpID0gMDsgaSA8IGNvdW50OyArK2kpIHsKICAgICAgICAgICAgICAgICBhdXRv
IGFjdGlvbk9iamVjdCA9IGFjdGlvbnNQYXlsb2FkLT5nZXQoaSktPmFzT2JqZWN0KCk7CkBAIC0x
MzMsNyArMTMzLDcgQEAgc3RhdGljIFQgcGFyc2VCcmVha3BvaW50T3B0aW9ucyhQcm90b2NvbDo6
RXJyb3JTdHJpbmcmIGVycm9yU3RyaW5nLCBSZWZQdHI8SlNPTjoKIAogICAgICAgICAgICAgICAg
IGFjdGlvbi5lbXVsYXRlVXNlckdlc3R1cmUgPSBhY3Rpb25PYmplY3QtPmdldEJvb2xlYW4oUHJv
dG9jb2w6OkRlYnVnZ2VyOjpCcmVha3BvaW50QWN0aW9uOjplbXVsYXRlVXNlckdlc3R1cmVLZXkp
LnZhbHVlX29yKGZhbHNlKTsKIAotICAgICAgICAgICAgICAgIGFjdGlvbnMuYXBwZW5kKFdURk1v
dmUoYWN0aW9uKSk7CisgICAgICAgICAgICAgICAgYWN0aW9ucy51bmNoZWNrZWRBcHBlbmQoV1RG
TW92ZShhY3Rpb24pKTsKICAgICAgICAgICAgIH0KICAgICAgICAgfQogCmRpZmYgLS1naXQgYS9T
b3VyY2UvSmF2YVNjcmlwdENvcmUvaW5zcGVjdG9yL3JlbW90ZS9zb2NrZXQvUmVtb3RlSW5zcGVj
dG9yTWVzc2FnZVBhcnNlci5jcHAgYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvaW5zcGVjdG9yL3Jl
bW90ZS9zb2NrZXQvUmVtb3RlSW5zcGVjdG9yTWVzc2FnZVBhcnNlci5jcHAKaW5kZXggZTFjMzBl
YTQxYjU4NWUxMzg4ODJlMzJjM2Q5YmVkZjg3YTAwZmU5YS4uYmU3MWViZmIzMzc4ZmIzODNkZjYw
ZTVhNmM4ZWM1M2E1N2M3MzgwYSAxMDA2NDQKLS0tIGEvU291cmNlL0phdmFTY3JpcHRDb3JlL2lu
c3BlY3Rvci9yZW1vdGUvc29ja2V0L1JlbW90ZUluc3BlY3Rvck1lc3NhZ2VQYXJzZXIuY3BwCisr
KyBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9pbnNwZWN0b3IvcmVtb3RlL3NvY2tldC9SZW1vdGVJ
bnNwZWN0b3JNZXNzYWdlUGFyc2VyLmNwcApAQCAtNjQsNyArNjQsNiBAQCB2b2lkIE1lc3NhZ2VQ
YXJzZXI6OnB1c2hSZWNlaXZlZERhdGEoY29uc3QgdWludDhfdCogZGF0YSwgc2l6ZV90IHNpemUp
CiAgICAgaWYgKCFkYXRhIHx8ICFzaXplIHx8ICFtX2xpc3RlbmVyKQogICAgICAgICByZXR1cm47
CiAKLSAgICBtX2J1ZmZlci5yZXNlcnZlQ2FwYWNpdHkobV9idWZmZXIuc2l6ZSgpICsgc2l6ZSk7
CiAgICAgbV9idWZmZXIuYXBwZW5kKGRhdGEsIHNpemUpOwogCiAgICAgaWYgKCFwYXJzZSgpKQpk
aWZmIC0tZ2l0IGEvU291cmNlL0phdmFTY3JpcHRDb3JlL3BhcnNlci9WYXJpYWJsZUVudmlyb25t
ZW50LmNwcCBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9wYXJzZXIvVmFyaWFibGVFbnZpcm9ubWVu
dC5jcHAKaW5kZXggMjhkYTE5OTc0M2UwNTZkMjRkOWUzYjVkYTZjZWVlNjlkYjA5ODRjNi4uMjY1
NGY0NjE0ZTc1Yjc1ZTJjZDkwNjUxNDA3NmRhZDBmODUwMTk2NiAxMDA2NDQKLS0tIGEvU291cmNl
L0phdmFTY3JpcHRDb3JlL3BhcnNlci9WYXJpYWJsZUVudmlyb25tZW50LmNwcAorKysgYi9Tb3Vy
Y2UvSmF2YVNjcmlwdENvcmUvcGFyc2VyL1ZhcmlhYmxlRW52aXJvbm1lbnQuY3BwCkBAIC0yMTgs
MTcgKzIxOCwxNCBAQCB2b2lkIENvbXBhY3RURFpFbnZpcm9ubWVudDo6c29ydENvbXBhY3QoQ29t
cGFjdCYgY29tcGFjdCkKIAogQ29tcGFjdFREWkVudmlyb25tZW50OjpDb21wYWN0VERaRW52aXJv
bm1lbnQoY29uc3QgVERaRW52aXJvbm1lbnQmIGVudikKIHsKLSAgICBDb21wYWN0IGNvbXBhY3RW
YXJpYWJsZXM7Ci0gICAgY29tcGFjdFZhcmlhYmxlcy5yZXNlcnZlQ2FwYWNpdHkoZW52LnNpemUo
KSk7Ci0KICAgICBtX2hhc2ggPSAwOyAvLyBOb3RlOiBYT1IgaXMgY29tbXV0YXRpdmUgc28gb3Jk
ZXIgZG9lc24ndCBtYXR0ZXIgaGVyZS4KLSAgICBmb3IgKGF1dG8mIGtleSA6IGVudikgewotICAg
ICAgICBjb21wYWN0VmFyaWFibGVzLmFwcGVuZChrZXkuZ2V0KCkpOworICAgIENvbXBhY3QgdmFy
aWFibGVzID0gV1RGOjptYXAoZW52LCBbdGhpc10oYXV0byYga2V5KSAtPiBQYWNrZWRSZWZQdHI8
VW5pcXVlZFN0cmluZ0ltcGw+IHsKICAgICAgICAgbV9oYXNoIF49IGtleS0+aGFzaCgpOwotICAg
IH0KKyAgICAgICAgcmV0dXJuIGtleS5nZXQoKTsKKyAgICB9KTsKIAotICAgIHNvcnRDb21wYWN0
KGNvbXBhY3RWYXJpYWJsZXMpOwotICAgIG1fdmFyaWFibGVzID0gV1RGTW92ZShjb21wYWN0VmFy
aWFibGVzKTsKKyAgICBzb3J0Q29tcGFjdCh2YXJpYWJsZXMpOworICAgIG1fdmFyaWFibGVzID0g
V1RGTW92ZSh2YXJpYWJsZXMpOwogfQogCiBib29sIENvbXBhY3RURFpFbnZpcm9ubWVudDo6b3Bl
cmF0b3I9PShjb25zdCBDb21wYWN0VERaRW52aXJvbm1lbnQmIG90aGVyKSBjb25zdApkaWZmIC0t
Z2l0IGEvU291cmNlL0phdmFTY3JpcHRDb3JlL3dhc20vV2FzbVdvcmtsaXN0LmNwcCBiL1NvdXJj
ZS9KYXZhU2NyaXB0Q29yZS93YXNtL1dhc21Xb3JrbGlzdC5jcHAKaW5kZXggNWJhZDBkOTBhNTYy
ZTI1ZGRlODE3YjU4MmMwNjA2NjU2YzkwNmViYS4uZmNmNzQyMzBiYmMyMWQzNTkzZGI0ZTcyMjEy
NTAxM2MyMmMyNGI0ZCAxMDA2NDQKLS0tIGEvU291cmNlL0phdmFTY3JpcHRDb3JlL3dhc20vV2Fz
bVdvcmtsaXN0LmNwcAorKysgYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvd2FzbS9XYXNtV29ya2xp
c3QuY3BwCkBAIC0yMTcsOSArMjE3LDkgQEAgV29ya2xpc3Q6OldvcmtsaXN0KCkKICAgICAsIG1f
cGxhbkVucXVldWVkKEF1dG9tYXRpY1RocmVhZENvbmRpdGlvbjo6Y3JlYXRlKCkpCiB7CiAgICAg
dW5zaWduZWQgbnVtYmVyT2ZDb21waWxhdGlvblRocmVhZHMgPSBPcHRpb25zOjp1c2VDb25jdXJy
ZW50SklUKCkgPyBrZXJuVENTTUF3YXJlTnVtYmVyT2ZQcm9jZXNzb3JDb3JlcygpIDogMTsKLSAg
ICBtX3RocmVhZHMucmVzZXJ2ZUNhcGFjaXR5KG51bWJlck9mQ29tcGlsYXRpb25UaHJlYWRzKTsK
KyAgICBtX3RocmVhZHMucmVzZXJ2ZUluaXRpYWxDYXBhY2l0eShudW1iZXJPZkNvbXBpbGF0aW9u
VGhyZWFkcyk7CiAgICAgTG9ja2VyIGxvY2tlciB7ICptX2xvY2sgfTsKLSAgICBmb3IgKHVuc2ln
bmVkIGkgPSAwOyBpIDwgbnVtYmVyT2ZDb21waWxhdGlvblRocmVhZHM7IGkrKykKKyAgICBmb3Ig
KHVuc2lnbmVkIGkgPSAwOyBpIDwgbnVtYmVyT2ZDb21waWxhdGlvblRocmVhZHM7ICsraSkKICAg
ICAgICAgbV90aHJlYWRzLnVuY2hlY2tlZEFwcGVuZChtYWtlVW5pcXVlPFdvcmtsaXN0OjpUaHJl
YWQ+KGxvY2tlciwgKnRoaXMpKTsKIH0KIApkaWZmIC0tZ2l0IGEvU291cmNlL1dURi93dGYvTGFu
Z3VhZ2UuY3BwIGIvU291cmNlL1dURi93dGYvTGFuZ3VhZ2UuY3BwCmluZGV4IGE4Mzk4ZTA1NDc1
ZTkyOTczYTY0MzRjNzAzZTFjY2M2MTA4ZjVmOWEuLjVlY2IzNmQwZTZiMWQzODc5N2EwZTgyNGY1
MTkyNTk1NTlhNmE3MDAgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XVEYvd3RmL0xhbmd1YWdlLmNwcAor
KysgYi9Tb3VyY2UvV1RGL3d0Zi9MYW5ndWFnZS5jcHAKQEAgLTI2LDYgKzI2LDcgQEAKICNpbmNs
dWRlICJjb25maWcuaCIKICNpbmNsdWRlIDx3dGYvTGFuZ3VhZ2UuaD4KIAorI2luY2x1ZGUgPHd0
Zi9Dcm9zc1RocmVhZENvcGllci5oPgogI2luY2x1ZGUgPHd0Zi9IYXNoTWFwLmg+CiAjaW5jbHVk
ZSA8d3RmL0xvY2suaD4KICNpbmNsdWRlIDx3dGYvTG9nZ2luZy5oPgpAQCAtMTIyLDE1ICsxMjMs
NiBAQCB2b2lkIG92ZXJyaWRlVXNlclByZWZlcnJlZExhbmd1YWdlcyhjb25zdCBWZWN0b3I8U3Ry
aW5nPiYgb3ZlcnJpZGUpCiAgICAgbGFuZ3VhZ2VEaWRDaGFuZ2UoKTsKIH0KIAotc3RhdGljIFZl
Y3RvcjxTdHJpbmc+IGlzb2xhdGVkQ29weShjb25zdCBWZWN0b3I8U3RyaW5nPiYgc3RyaW5ncykK
LXsKLSAgICBWZWN0b3I8U3RyaW5nPiBjb3B5OwotICAgIGNvcHkucmVzZXJ2ZUluaXRpYWxDYXBh
Y2l0eShzdHJpbmdzLnNpemUoKSk7Ci0gICAgZm9yIChhdXRvJiBsYW5ndWFnZSA6IHN0cmluZ3Mp
Ci0gICAgICAgIGNvcHkudW5jaGVja2VkQXBwZW5kKGxhbmd1YWdlLmlzb2xhdGVkQ29weSgpKTsK
LSAgICByZXR1cm4gY29weTsKLX0KLQogVmVjdG9yPFN0cmluZz4gdXNlclByZWZlcnJlZExhbmd1
YWdlcyhTaG91bGRNaW5pbWl6ZUxhbmd1YWdlcyBzaG91bGRNaW5pbWl6ZUxhbmd1YWdlcykKIHsK
ICAgICB7CkBAIC0xMzgsNyArMTMwLDcgQEAgVmVjdG9yPFN0cmluZz4gdXNlclByZWZlcnJlZExh
bmd1YWdlcyhTaG91bGRNaW5pbWl6ZUxhbmd1YWdlcyBzaG91bGRNaW5pbWl6ZUxhbmcKICAgICAg
ICAgVmVjdG9yPFN0cmluZz4mIG92ZXJyaWRlID0gcHJlZmVycmVkTGFuZ3VhZ2VzT3ZlcnJpZGUo
KTsKICAgICAgICAgaWYgKCFvdmVycmlkZS5pc0VtcHR5KCkpIHsKICAgICAgICAgICAgIExPR19X
SVRIX1NUUkVBTShMYW5ndWFnZSwgc3RyZWFtIDw8ICJMYW5ndWFnZXMgYXJlIG92ZXJyaWRkZW46
ICIgPDwgb3ZlcnJpZGUpOwotICAgICAgICAgICAgcmV0dXJuIGlzb2xhdGVkQ29weShvdmVycmlk
ZSk7CisgICAgICAgICAgICByZXR1cm4gY3Jvc3NUaHJlYWRDb3B5KG92ZXJyaWRlKTsKICAgICAg
ICAgfQogICAgIH0KIApAQCAtMTQ5LDcgKzE0MSw3IEBAIFZlY3RvcjxTdHJpbmc+IHVzZXJQcmVm
ZXJyZWRMYW5ndWFnZXMoU2hvdWxkTWluaW1pemVMYW5ndWFnZXMgc2hvdWxkTWluaW1pemVMYW5n
CiAgICAgICAgIGxhbmd1YWdlcyA9IHBsYXRmb3JtVXNlclByZWZlcnJlZExhbmd1YWdlcyhzaG91
bGRNaW5pbWl6ZUxhbmd1YWdlcyk7CiAgICAgfSBlbHNlCiAgICAgICAgIExPRyhMYW5ndWFnZSwg
InVzZXJQcmVmZXJyZWRMYW5ndWFnZXMoKSBjYWNoZSBoaXQiKTsKLSAgICByZXR1cm4gaXNvbGF0
ZWRDb3B5KGxhbmd1YWdlcyk7CisgICAgcmV0dXJuIGNyb3NzVGhyZWFkQ29weShsYW5ndWFnZXMp
OwogfQogCiAjaWYgIVBMQVRGT1JNKENPQ09BKQpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUv
TW9kdWxlcy9hc3luYy1jbGlwYm9hcmQvQ2xpcGJvYXJkLmNwcCBiL1NvdXJjZS9XZWJDb3JlL01v
ZHVsZXMvYXN5bmMtY2xpcGJvYXJkL0NsaXBib2FyZC5jcHAKaW5kZXggYzFiYzgwMDg3OTVjMmIz
ZWZjYTE3NTI3ODA5ZTYzZTgwZjQyODYwMy4uNDlmM2IzMDc1NzIxMTU3Nzc3ODU5YzBiYWIxNjAx
ZDBjZjhlOTVlOSAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvTW9kdWxlcy9hc3luYy1jbGlw
Ym9hcmQvQ2xpcGJvYXJkLmNwcAorKysgYi9Tb3VyY2UvV2ViQ29yZS9Nb2R1bGVzL2FzeW5jLWNs
aXBib2FyZC9DbGlwYm9hcmQuY3BwCkBAIC0xNzksMTAgKzE3OSw5IEBAIHZvaWQgQ2xpcGJvYXJk
OjpyZWFkKFJlZjxEZWZlcnJlZFByb21pc2U+JiYgcHJvbWlzZSkKICAgICAgICAgICAgIHJldHVy
bjsKICAgICAgICAgfQogCi0gICAgICAgIFZlY3RvcjxSZWY8Q2xpcGJvYXJkSXRlbT4+IGNsaXBi
b2FyZEl0ZW1zOwotICAgICAgICBjbGlwYm9hcmRJdGVtcy5yZXNlcnZlSW5pdGlhbENhcGFjaXR5
KGFsbEluZm8tPnNpemUoKSk7Ci0gICAgICAgIGZvciAoYXV0byYgaXRlbUluZm8gOiAqYWxsSW5m
bykKLSAgICAgICAgICAgIGNsaXBib2FyZEl0ZW1zLnVuY2hlY2tlZEFwcGVuZChDbGlwYm9hcmRJ
dGVtOjpjcmVhdGUoKnRoaXMsIGl0ZW1JbmZvKSk7CisgICAgICAgIGF1dG8gY2xpcGJvYXJkSXRl
bXMgPSBhbGxJbmZvLT5tYXAoW3RoaXNdKGF1dG8mIGl0ZW1JbmZvKSB7CisgICAgICAgICAgICBy
ZXR1cm4gQ2xpcGJvYXJkSXRlbTo6Y3JlYXRlKCp0aGlzLCBpdGVtSW5mbyk7CisgICAgICAgIH0p
OwogICAgICAgICBtX2FjdGl2ZVNlc3Npb24gPSB7eyBXVEZNb3ZlKHBhc3RlYm9hcmQpLCBXVEZN
b3ZlKGNsaXBib2FyZEl0ZW1zKSwgY2hhbmdlQ291bnRBdFN0YXJ0IH19OwogICAgIH0KIApAQCAt
MzY4LDcgKzM2Nyw3IEBAIHZvaWQgQ2xpcGJvYXJkOjpJdGVtV3JpdGVyOjpkaWRTZXRBbGxEYXRh
KCkKICAgICAgICAgICAgIHJlamVjdCgpOwogICAgICAgICAgICAgcmV0dXJuOwogICAgICAgICB9
Ci0gICAgICAgIGN1c3RvbURhdGEuYXBwZW5kKCpkYXRhKTsKKyAgICAgICAgY3VzdG9tRGF0YS51
bmNoZWNrZWRBcHBlbmQoKmRhdGEpOwogICAgIH0KIAogICAgIG1fcGFzdGVib2FyZC0+d3JpdGVD
dXN0b21EYXRhKFdURk1vdmUoY3VzdG9tRGF0YSkpOwpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNv
cmUvTW9kdWxlcy9lbmNyeXB0ZWRtZWRpYS9NZWRpYUtleVNlc3Npb24uY3BwIGIvU291cmNlL1dl
YkNvcmUvTW9kdWxlcy9lbmNyeXB0ZWRtZWRpYS9NZWRpYUtleVNlc3Npb24uY3BwCmluZGV4IDE0
Nzc2YzIwMTUxYmZlZmUzODA3OWEzMzczMGM4ODY2MjY4YmE0NmEuLjM4ZGZjYzFiOTc4NDYyMzIy
ZWM3ZDdlYmU0ODNkNjZkODc2MDJlMzAgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL01vZHVs
ZXMvZW5jcnlwdGVkbWVkaWEvTWVkaWFLZXlTZXNzaW9uLmNwcAorKysgYi9Tb3VyY2UvV2ViQ29y
ZS9Nb2R1bGVzL2VuY3J5cHRlZG1lZGlhL01lZGlhS2V5U2Vzc2lvbi5jcHAKQEAgLTcwMCwxMCAr
NzAwLDkgQEAgdm9pZCBNZWRpYUtleVNlc3Npb246OnVwZGF0ZUtleVN0YXR1c2VzKENETUluc3Rh
bmNlU2Vzc2lvbjo6S2V5U3RhdHVzVmVjdG9yJiYgaW4KICAgICAgICAgcmV0dXJuIE1lZGlhS2V5
U3RhdHVzOjpJbnRlcm5hbEVycm9yOwogICAgIH07CiAKLSAgICBtX3N0YXR1c2VzLmNsZWFyKCk7
Ci0gICAgbV9zdGF0dXNlcy5yZXNlcnZlQ2FwYWNpdHkoaW5wdXRTdGF0dXNlcy5zaXplKCkpOwot
ICAgIGZvciAoYXV0byYgc3RhdHVzIDogaW5wdXRTdGF0dXNlcykKLSAgICAgICAgbV9zdGF0dXNl
cy51bmNoZWNrZWRBcHBlbmQoeyBXVEZNb3ZlKHN0YXR1cy5maXJzdCksIHRvTWVkaWFLZXlTdGF0
dXMoc3RhdHVzLnNlY29uZCkgfSk7CisgICAgbV9zdGF0dXNlcyA9IFdURjo6bWFwKFdURk1vdmUo
aW5wdXRTdGF0dXNlcyksIFtdKGF1dG8mJiBzdGF0dXMpIHsKKyAgICAgICAgcmV0dXJuIHN0ZDo6
bWFrZV9wYWlyKFdURk1vdmUoc3RhdHVzLmZpcnN0KSwgdG9NZWRpYUtleVN0YXR1cyhzdGF0dXMu
c2Vjb25kKSk7CisgICAgfSk7CiAKICAgICAvLyA1LiBRdWV1ZSBhIHRhc2sgdG8gZmlyZSBhIHNp
bXBsZSBldmVudCBuYW1lZCBrZXlzdGF0dXNlc2NoYW5nZSBhdCB0aGUgc2Vzc2lvbi4KICAgICBx
dWV1ZVRhc2tUb0Rpc3BhdGNoRXZlbnQoKnRoaXMsIFRhc2tTb3VyY2U6Ok5ldHdvcmtpbmcsIEV2
ZW50OjpjcmVhdGUoZXZlbnROYW1lcygpLmtleXN0YXR1c2VzY2hhbmdlRXZlbnQsIEV2ZW50OjpD
YW5CdWJibGU6Ok5vLCBFdmVudDo6SXNDYW5jZWxhYmxlOjpObykpOwpkaWZmIC0tZ2l0IGEvU291
cmNlL1dlYkNvcmUvTW9kdWxlcy9lbnRyaWVzYXBpL0ZpbGVTeXN0ZW1FbnRyaWVzQ2FsbGJhY2su
Y3BwIGIvU291cmNlL1dlYkNvcmUvTW9kdWxlcy9lbnRyaWVzYXBpL0ZpbGVTeXN0ZW1FbnRyaWVz
Q2FsbGJhY2suY3BwCmluZGV4IDc1MWEyYWZkOWQwZTcyNzExN2ExMTgwZjhlYzFhZGI0MmY2ZTBl
NTIuLmY1MzIyZTg5N2M3NTYyMWZiOGRlZmQxNmQzN2YwMThjNDhiNjFlM2YgMTAwNjQ0Ci0tLSBh
L1NvdXJjZS9XZWJDb3JlL01vZHVsZXMvZW50cmllc2FwaS9GaWxlU3lzdGVtRW50cmllc0NhbGxi
YWNrLmNwcAorKysgYi9Tb3VyY2UvV2ViQ29yZS9Nb2R1bGVzL2VudHJpZXNhcGkvRmlsZVN5c3Rl
bUVudHJpZXNDYWxsYmFjay5jcHAKQEAgLTMxLDE4ICszMSw5IEBACiAKIG5hbWVzcGFjZSBXZWJD
b3JlIHsKIAotc3RhdGljIFZlY3RvcjxSZWY8RmlsZVN5c3RlbUVudHJ5Pj4gY29weVZlY3Rvcihj
b25zdCBWZWN0b3I8UmVmPEZpbGVTeXN0ZW1FbnRyeT4+JiBlbnRyaWVzKQotewotICAgIFZlY3Rv
cjxSZWY8RmlsZVN5c3RlbUVudHJ5Pj4gZW50cmllc0NvcHk7Ci0gICAgZW50cmllc0NvcHkucmVz
ZXJ2ZUluaXRpYWxDYXBhY2l0eShlbnRyaWVzLnNpemUoKSk7Ci0gICAgZm9yIChhdXRvJiBlbnRy
eSA6IGVudHJpZXMpCi0gICAgICAgIGVudHJpZXNDb3B5LnVuY2hlY2tlZEFwcGVuZChlbnRyeS5j
b3B5UmVmKCkpOwotICAgIHJldHVybiBlbnRyaWVzQ29weTsKLX0KLQogdm9pZCBGaWxlU3lzdGVt
RW50cmllc0NhbGxiYWNrOjpzY2hlZHVsZUNhbGxiYWNrKFNjcmlwdEV4ZWN1dGlvbkNvbnRleHQm
IGNvbnRleHQsIGNvbnN0IFZlY3RvcjxSZWY8RmlsZVN5c3RlbUVudHJ5Pj4mIGVudHJpZXMpCiB7
Ci0gICAgY29udGV4dC5wb3N0VGFzayhbcHJvdGVjdGVkVGhpcyA9IFJlZiB7ICp0aGlzIH0sIGVu
dHJpZXMgPSBjb3B5VmVjdG9yKGVudHJpZXMpXSAoU2NyaXB0RXhlY3V0aW9uQ29udGV4dCYpIHsK
KyAgICBjb250ZXh0LnBvc3RUYXNrKFtwcm90ZWN0ZWRUaGlzID0gUmVmIHsgKnRoaXMgfSwgZW50
cmllc10gKFNjcmlwdEV4ZWN1dGlvbkNvbnRleHQmKSB7CiAgICAgICAgIHByb3RlY3RlZFRoaXMt
PmhhbmRsZUV2ZW50KGVudHJpZXMpOwogICAgIH0pOwogfQpkaWZmIC0tZ2l0IGEvU291cmNlL1dl
YkNvcmUvTW9kdWxlcy9lbnRyaWVzYXBpL0hUTUxJbnB1dEVsZW1lbnRFbnRyaWVzQVBJLmNwcCBi
L1NvdXJjZS9XZWJDb3JlL01vZHVsZXMvZW50cmllc2FwaS9IVE1MSW5wdXRFbGVtZW50RW50cmll
c0FQSS5jcHAKaW5kZXggMDFhN2Y0ZmFiMDU1N2QzZjdhZTAyYzk0ZGM1ZGMwYTM2ZDFiM2E5Yi4u
ZmRlYTc4MzI3YTQzNDU5ZDBmYTI1NTU3ZGJkNDQ4MjZlMDM4MDY3NCAxMDA2NDQKLS0tIGEvU291
cmNlL1dlYkNvcmUvTW9kdWxlcy9lbnRyaWVzYXBpL0hUTUxJbnB1dEVsZW1lbnRFbnRyaWVzQVBJ
LmNwcAorKysgYi9Tb3VyY2UvV2ViQ29yZS9Nb2R1bGVzL2VudHJpZXNhcGkvSFRNTElucHV0RWxl
bWVudEVudHJpZXNBUEkuY3BwCkBAIC00NiwxMSArNDYsOSBAQCBWZWN0b3I8UmVmPEZpbGVTeXN0
ZW1FbnRyeT4+IEhUTUxJbnB1dEVsZW1lbnRFbnRyaWVzQVBJOjp3ZWJraXRFbnRyaWVzKFNjcmlw
dEV4ZQogICAgIGlmICghZmlsZUxpc3QpCiAgICAgICAgIHJldHVybiB7IH07CiAKLSAgICBWZWN0
b3I8UmVmPEZpbGVTeXN0ZW1FbnRyeT4+IGVudHJpZXM7Ci0gICAgZW50cmllcy5yZXNlcnZlSW5p
dGlhbENhcGFjaXR5KGZpbGVMaXN0LT5maWxlcygpLnNpemUoKSk7Ci0gICAgZm9yIChhdXRvJiBm
aWxlIDogZmlsZUxpc3QtPmZpbGVzKCkpCi0gICAgICAgIGVudHJpZXMudW5jaGVja2VkQXBwZW5k
KERPTUZpbGVTeXN0ZW06OmNyZWF0ZUVudHJ5Rm9yRmlsZShjb250ZXh0LCBmaWxlLmNvcHlSZWYo
KSkpOwotICAgIHJldHVybiBlbnRyaWVzOworICAgIHJldHVybiBmaWxlTGlzdC0+ZmlsZXMoKS5t
YXAoWyZdKGF1dG8mIGZpbGUpIHsKKyAgICAgICAgcmV0dXJuIERPTUZpbGVTeXN0ZW06OmNyZWF0
ZUVudHJ5Rm9yRmlsZShjb250ZXh0LCBmaWxlLmNvcHlSZWYoKSk7CisgICAgfSk7CiB9CiAKIH0K
ZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL01vZHVsZXMvZ2VvbG9jYXRpb24vR2VvbG9jYXRp
b25Db250cm9sbGVyLmNwcCBiL1NvdXJjZS9XZWJDb3JlL01vZHVsZXMvZ2VvbG9jYXRpb24vR2Vv
bG9jYXRpb25Db250cm9sbGVyLmNwcAppbmRleCAwN2RkNjVmM2MxYWVlNzllYjljNzMyODM2YTJk
NWFhZDAxNzMzM2NmLi43ZGQ0NjM4MjE3ZWM1MDUxOTBkNjIxOTgxNzc1NDEwZDMwNmM2YTRhIDEw
MDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9Nb2R1bGVzL2dlb2xvY2F0aW9uL0dlb2xvY2F0aW9u
Q29udHJvbGxlci5jcHAKKysrIGIvU291cmNlL1dlYkNvcmUvTW9kdWxlcy9nZW9sb2NhdGlvbi9H
ZW9sb2NhdGlvbkNvbnRyb2xsZXIuY3BwCkBAIC0xMTgsMjEgKzExOCwxMyBAQCB2b2lkIEdlb2xv
Y2F0aW9uQ29udHJvbGxlcjo6Y2FuY2VsUGVybWlzc2lvblJlcXVlc3QoR2VvbG9jYXRpb24mIGdl
b2xvY2F0aW9uKQogdm9pZCBHZW9sb2NhdGlvbkNvbnRyb2xsZXI6OnBvc2l0aW9uQ2hhbmdlZChj
b25zdCBzdGQ6Om9wdGlvbmFsPEdlb2xvY2F0aW9uUG9zaXRpb25EYXRhPiYgcG9zaXRpb24pCiB7
CiAgICAgbV9sYXN0UG9zaXRpb24gPSBwb3NpdGlvbjsKLSAgICBWZWN0b3I8UmVmPEdlb2xvY2F0
aW9uPj4gb2JzZXJ2ZXJzVmVjdG9yOwotICAgIG9ic2VydmVyc1ZlY3Rvci5yZXNlcnZlSW5pdGlh
bENhcGFjaXR5KG1fb2JzZXJ2ZXJzLnNpemUoKSk7Ci0gICAgZm9yIChhdXRvJiBvYnNlcnZlciA6
IG1fb2JzZXJ2ZXJzKQotICAgICAgICBvYnNlcnZlcnNWZWN0b3IudW5jaGVja2VkQXBwZW5kKG9i
c2VydmVyLmNvcHlSZWYoKSk7Ci0gICAgZm9yIChhdXRvJiBvYnNlcnZlciA6IG9ic2VydmVyc1Zl
Y3RvcikKKyAgICBmb3IgKGF1dG8mIG9ic2VydmVyIDogY29weVRvVmVjdG9yT2Y8UmVmPEdlb2xv
Y2F0aW9uPj4obV9vYnNlcnZlcnMpKQogICAgICAgICBvYnNlcnZlci0+cG9zaXRpb25DaGFuZ2Vk
KCk7CiB9CiAKIHZvaWQgR2VvbG9jYXRpb25Db250cm9sbGVyOjplcnJvck9jY3VycmVkKEdlb2xv
Y2F0aW9uRXJyb3ImIGVycm9yKQogewotICAgIFZlY3RvcjxSZWY8R2VvbG9jYXRpb24+PiBvYnNl
cnZlcnNWZWN0b3I7Ci0gICAgb2JzZXJ2ZXJzVmVjdG9yLnJlc2VydmVJbml0aWFsQ2FwYWNpdHko
bV9vYnNlcnZlcnMuc2l6ZSgpKTsKLSAgICBmb3IgKGF1dG8mIG9ic2VydmVyIDogbV9vYnNlcnZl
cnMpCi0gICAgICAgIG9ic2VydmVyc1ZlY3Rvci51bmNoZWNrZWRBcHBlbmQob2JzZXJ2ZXIuY29w
eVJlZigpKTsKLSAgICBmb3IgKGF1dG8mIG9ic2VydmVyIDogb2JzZXJ2ZXJzVmVjdG9yKQorICAg
IGZvciAoYXV0byYgb2JzZXJ2ZXIgOiBjb3B5VG9WZWN0b3JPZjxSZWY8R2VvbG9jYXRpb24+Piht
X29ic2VydmVycykpCiAgICAgICAgIG9ic2VydmVyLT5zZXRFcnJvcihlcnJvcik7CiB9CiAKZGlm
ZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL01vZHVsZXMvaW5kZXhlZGRiL0lEQkRhdGFiYXNlLmNw
cCBiL1NvdXJjZS9XZWJDb3JlL01vZHVsZXMvaW5kZXhlZGRiL0lEQkRhdGFiYXNlLmNwcAppbmRl
eCAxNjE4OTY0YTU4YzVjODNmZWNiZmVmZDFjMjk0ZjVhY2ZkODc4MTJkLi43YWE2MzJiN2VjMDQ3
YmU0NjA4YjUxYTA5NGVhMWE0ZTU3YTI2MjliIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9N
b2R1bGVzL2luZGV4ZWRkYi9JREJEYXRhYmFzZS5jcHAKKysrIGIvU291cmNlL1dlYkNvcmUvTW9k
dWxlcy9pbmRleGVkZGIvSURCRGF0YWJhc2UuY3BwCkBAIC0zMTcsMTUgKzMxNyw4IEBAIHZvaWQg
SURCRGF0YWJhc2U6OnN0b3AoKQogCiAgICAgcmVtb3ZlQWxsRXZlbnRMaXN0ZW5lcnMoKTsKIAot
ICAgIFZlY3RvcjxJREJSZXNvdXJjZUlkZW50aWZpZXI+IHRyYW5zYWN0aW9uSWRlbnRpZmllcnM7
Ci0gICAgdHJhbnNhY3Rpb25JZGVudGlmaWVycy5yZXNlcnZlSW5pdGlhbENhcGFjaXR5KG1fYWN0
aXZlVHJhbnNhY3Rpb25zLnNpemUoKSk7Ci0KLSAgICBmb3IgKGF1dG8mIGlkIDogbV9hY3RpdmVU
cmFuc2FjdGlvbnMua2V5cygpKQotICAgICAgICB0cmFuc2FjdGlvbklkZW50aWZpZXJzLnVuY2hl
Y2tlZEFwcGVuZChpZCk7Ci0KLSAgICBmb3IgKGF1dG8mIGlkIDogdHJhbnNhY3Rpb25JZGVudGlm
aWVycykgewotICAgICAgICBJREJUcmFuc2FjdGlvbiogdHJhbnNhY3Rpb24gPSBtX2FjdGl2ZVRy
YW5zYWN0aW9ucy5nZXQoaWQpOwotICAgICAgICBpZiAodHJhbnNhY3Rpb24pCisgICAgZm9yIChh
dXRvJiBpZCA6IGNvcHlUb1ZlY3RvcihtX2FjdGl2ZVRyYW5zYWN0aW9ucy5rZXlzKCkpKSB7Cisg
ICAgICAgIGlmIChhdXRvKiB0cmFuc2FjdGlvbiA9IG1fYWN0aXZlVHJhbnNhY3Rpb25zLmdldChp
ZCkpCiAgICAgICAgICAgICB0cmFuc2FjdGlvbi0+c3RvcCgpOwogICAgIH0KIApkaWZmIC0tZ2l0
IGEvU291cmNlL1dlYkNvcmUvTW9kdWxlcy9pbmRleGVkZGIvSURCR2V0QWxsUmVzdWx0LmNwcCBi
L1NvdXJjZS9XZWJDb3JlL01vZHVsZXMvaW5kZXhlZGRiL0lEQkdldEFsbFJlc3VsdC5jcHAKaW5k
ZXggZWVhZmY3MTVhNWE0ODM5MjMwZjAxMjE0ZTMzZWQxYTgzYjFkN2FiZS4uNzMzZTllNjFhZmIx
ZWY5NmI2NjllZGI3MzE1MjJjNWJhNGUxMWJmZSAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUv
TW9kdWxlcy9pbmRleGVkZGIvSURCR2V0QWxsUmVzdWx0LmNwcAorKysgYi9Tb3VyY2UvV2ViQ29y
ZS9Nb2R1bGVzL2luZGV4ZWRkYi9JREJHZXRBbGxSZXN1bHQuY3BwCkBAIC00OSw3ICs0OSw3IEBA
IHZvaWQgSURCR2V0QWxsUmVzdWx0Ojppc29sYXRlZENvcHkoY29uc3QgSURCR2V0QWxsUmVzdWx0
JiBzb3VyY2UsIElEQkdldEFsbFJlc3VsCiAgICAgZGVzdGluYXRpb24ubV90eXBlID0gc291cmNl
Lm1fdHlwZTsKICAgICBkZXN0aW5hdGlvbi5tX2tleXMgPSBjcm9zc1RocmVhZENvcHkoc291cmNl
Lm1fa2V5cyk7CiAgICAgZGVzdGluYXRpb24ubV92YWx1ZXMgPSBjcm9zc1RocmVhZENvcHkoc291
cmNlLm1fdmFsdWVzKTsKLSAgICBkZXN0aW5hdGlvbi5tX2tleVBhdGggPSBXZWJDb3JlOjppc29s
YXRlZENvcHkoc291cmNlLm1fa2V5UGF0aCk7CisgICAgZGVzdGluYXRpb24ubV9rZXlQYXRoID0g
Y3Jvc3NUaHJlYWRDb3B5KHNvdXJjZS5tX2tleVBhdGgpOwogfQogCiB2b2lkIElEQkdldEFsbFJl
c3VsdDo6YWRkS2V5KElEQktleURhdGEmJiBrZXkpCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29y
ZS9Nb2R1bGVzL2luZGV4ZWRkYi9JREJHZXRSZXN1bHQuY3BwIGIvU291cmNlL1dlYkNvcmUvTW9k
dWxlcy9pbmRleGVkZGIvSURCR2V0UmVzdWx0LmNwcAppbmRleCA3NjJmOTQxYjgzYjk2ZWZjZTQ2
NDBmMzMxZDU1NzdhMTBkZDcyNmFkLi41NDc5ZDYxZjFmMDNhOWYyZjJmZTM5M2NmNzJkYzI5NTIy
ZDU0ZjUyIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9Nb2R1bGVzL2luZGV4ZWRkYi9JREJH
ZXRSZXN1bHQuY3BwCisrKyBiL1NvdXJjZS9XZWJDb3JlL01vZHVsZXMvaW5kZXhlZGRiL0lEQkdl
dFJlc3VsdC5jcHAKQEAgLTI2LDYgKzI2LDcgQEAKICNpbmNsdWRlICJjb25maWcuaCIKICNpbmNs
dWRlICJJREJHZXRSZXN1bHQuaCIKIAorI2luY2x1ZGUgPHd0Zi9Dcm9zc1RocmVhZENvcGllci5o
PgogI2luY2x1ZGUgPHd0Zi9Jc29NYWxsb2NJbmxpbmVzLmg+CiAKIG5hbWVzcGFjZSBXZWJDb3Jl
IHsKQEAgLTQ3LDcgKzQ4LDcgQEAgdm9pZCBJREJHZXRSZXN1bHQ6Omlzb2xhdGVkQ29weShjb25z
dCBJREJHZXRSZXN1bHQmIHNvdXJjZSwgSURCR2V0UmVzdWx0JiBkZXN0aW4KICAgICBkZXN0aW5h
dGlvbi5tX3ZhbHVlID0gc291cmNlLm1fdmFsdWUuaXNvbGF0ZWRDb3B5KCk7CiAgICAgZGVzdGlu
YXRpb24ubV9rZXlEYXRhID0gc291cmNlLm1fa2V5RGF0YS5pc29sYXRlZENvcHkoKTsKICAgICBk
ZXN0aW5hdGlvbi5tX3ByaW1hcnlLZXlEYXRhID0gc291cmNlLm1fcHJpbWFyeUtleURhdGEuaXNv
bGF0ZWRDb3B5KCk7Ci0gICAgZGVzdGluYXRpb24ubV9rZXlQYXRoID0gV2ViQ29yZTo6aXNvbGF0
ZWRDb3B5KHNvdXJjZS5tX2tleVBhdGgpOworICAgIGRlc3RpbmF0aW9uLm1fa2V5UGF0aCA9IGNy
b3NzVGhyZWFkQ29weShzb3VyY2UubV9rZXlQYXRoKTsKICAgICBkZXN0aW5hdGlvbi5tX2lzRGVm
aW5lZCA9IHNvdXJjZS5tX2lzRGVmaW5lZDsKICAgICBkZXN0aW5hdGlvbi5tX3ByZWZldGNoZWRS
ZWNvcmRzID0gc291cmNlLm1fcHJlZmV0Y2hlZFJlY29yZHMuaXNvbGF0ZWRDb3B5KCk7CiB9CmRp
ZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9Nb2R1bGVzL2luZGV4ZWRkYi9JREJLZXlQYXRoLmNw
cCBiL1NvdXJjZS9XZWJDb3JlL01vZHVsZXMvaW5kZXhlZGRiL0lEQktleVBhdGguY3BwCmluZGV4
IGZkNmQ1YTM5OWIzZmNhNjYyNGZmMzQ5NGRiYWU4NzdmNThiNDE0MWQuLmM4MjkxMTZlNjQ0NzU2
Y2I3NjYxZDZjZThlZjY3ZjY1MjliYTkzMmMgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL01v
ZHVsZXMvaW5kZXhlZGRiL0lEQktleVBhdGguY3BwCisrKyBiL1NvdXJjZS9XZWJDb3JlL01vZHVs
ZXMvaW5kZXhlZGRiL0lEQktleVBhdGguY3BwCkBAIC0yMDYsMjEgKzIwNiw2IEBAIGJvb2wgaXNJ
REJLZXlQYXRoVmFsaWQoY29uc3QgSURCS2V5UGF0aCYga2V5UGF0aCkKICAgICByZXR1cm4gc3Rk
Ojp2aXNpdCh2aXNpdG9yLCBrZXlQYXRoKTsKIH0KIAotSURCS2V5UGF0aCBpc29sYXRlZENvcHko
Y29uc3QgSURCS2V5UGF0aCYga2V5UGF0aCkKLXsKLSAgICBhdXRvIHZpc2l0b3IgPSBXVEY6Om1h
a2VWaXNpdG9yKFtdKGNvbnN0IFN0cmluZyYgc3RyaW5nKSAtPiBJREJLZXlQYXRoIHsKLSAgICAg
ICAgcmV0dXJuIHN0cmluZy5pc29sYXRlZENvcHkoKTsKLSAgICB9LCBbXShjb25zdCBWZWN0b3I8
U3RyaW5nPiYgdmVjdG9yKSAtPiBJREJLZXlQYXRoIHsKLSAgICAgICAgVmVjdG9yPFN0cmluZz4g
dmVjdG9yQ29weTsKLSAgICAgICAgdmVjdG9yQ29weS5yZXNlcnZlSW5pdGlhbENhcGFjaXR5KHZl
Y3Rvci5zaXplKCkpOwotICAgICAgICBmb3IgKGF1dG8mIHN0cmluZyA6IHZlY3RvcikKLSAgICAg
ICAgICAgIHZlY3RvckNvcHkudW5jaGVja2VkQXBwZW5kKHN0cmluZy5pc29sYXRlZENvcHkoKSk7
Ci0gICAgICAgIHJldHVybiB2ZWN0b3JDb3B5OwotICAgIH0pOwotCi0gICAgcmV0dXJuIHN0ZDo6
dmlzaXQodmlzaXRvciwga2V5UGF0aCk7Ci19Ci0KICNpZiAhTE9HX0RJU0FCTEVECiBTdHJpbmcg
bG9nZ2luZ1N0cmluZyhjb25zdCBJREJLZXlQYXRoJiBwYXRoKQogewpkaWZmIC0tZ2l0IGEvU291
cmNlL1dlYkNvcmUvTW9kdWxlcy9pbmRleGVkZGIvSURCS2V5UGF0aC5oIGIvU291cmNlL1dlYkNv
cmUvTW9kdWxlcy9pbmRleGVkZGIvSURCS2V5UGF0aC5oCmluZGV4IDIwMzZmZjc1NGU1ZWE5ZjMy
ZmIxZjJlZDU4ZmM4OTFjZTg2MzZiMDYuLjRiMzkyNjVkYWM3N2E2MzA5ZDkyNWM5MDI0YTJlYWIy
NDRkNzJiZWYgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL01vZHVsZXMvaW5kZXhlZGRiL0lE
QktleVBhdGguaAorKysgYi9Tb3VyY2UvV2ViQ29yZS9Nb2R1bGVzL2luZGV4ZWRkYi9JREJLZXlQ
YXRoLmgKQEAgLTQzLDEzICs0Myw2IEBAIGVudW0gY2xhc3MgSURCS2V5UGF0aFBhcnNlRXJyb3Ig
ewogfTsKIAogdm9pZCBJREJQYXJzZUtleVBhdGgoY29uc3QgU3RyaW5nJiwgVmVjdG9yPFN0cmlu
Zz4mLCBJREJLZXlQYXRoUGFyc2VFcnJvciYpOwotSURCS2V5UGF0aCBpc29sYXRlZENvcHkoY29u
c3QgSURCS2V5UGF0aCYpOwotaW5saW5lIHN0ZDo6b3B0aW9uYWw8SURCS2V5UGF0aD4gaXNvbGF0
ZWRDb3B5KGNvbnN0IHN0ZDo6b3B0aW9uYWw8SURCS2V5UGF0aD4mIHZhcmlhbnQpCi17Ci0gICAg
aWYgKCF2YXJpYW50KQotICAgICAgICByZXR1cm4geyB9OwotICAgIHJldHVybiBpc29sYXRlZENv
cHkodmFyaWFudC52YWx1ZSgpKTsKLX0KIAogI2lmICFMT0dfRElTQUJMRUQKIFN0cmluZyBsb2dn
aW5nU3RyaW5nKGNvbnN0IElEQktleVBhdGgmKTsKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3Jl
L01vZHVsZXMvaW5kZXhlZGRiL0lEQlRyYW5zYWN0aW9uLmNwcCBiL1NvdXJjZS9XZWJDb3JlL01v
ZHVsZXMvaW5kZXhlZGRiL0lEQlRyYW5zYWN0aW9uLmNwcAppbmRleCA1YTAzNjBjNGI4ZWI2Y2Q0
ZmMxZmQ1MWQ5NzE0Y2UxZDJjNzQ1MDM0Li42YzExMjFiNzMxMGY3MzdmN2I5NWJlY2VlODQ1NGU2
YWM1MGRmMmI2IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9Nb2R1bGVzL2luZGV4ZWRkYi9J
REJUcmFuc2FjdGlvbi5jcHAKKysrIGIvU291cmNlL1dlYkNvcmUvTW9kdWxlcy9pbmRleGVkZGIv
SURCVHJhbnNhY3Rpb24uY3BwCkBAIC0yNjksMTAgKzI2OSw4IEBAIHZvaWQgSURCVHJhbnNhY3Rp
b246OmFib3J0SW5Qcm9ncmVzc09wZXJhdGlvbnMoY29uc3QgSURCRXJyb3ImIGVycm9yKQogewog
ICAgIExPRyhJbmRleGVkREIsICJJREJUcmFuc2FjdGlvbjo6YWJvcnRJblByb2dyZXNzT3BlcmF0
aW9ucyIpOwogCi0gICAgVmVjdG9yPFJlZlB0cjxJREJDbGllbnQ6OlRyYW5zYWN0aW9uT3BlcmF0
aW9uPj4gaW5Qcm9ncmVzc0Fib3J0VmVjdG9yOwotICAgIGluUHJvZ3Jlc3NBYm9ydFZlY3Rvci5y
ZXNlcnZlSW5pdGlhbENhcGFjaXR5KG1fdHJhbnNhY3Rpb25PcGVyYXRpb25zSW5Qcm9ncmVzc1F1
ZXVlLnNpemUoKSk7Ci0gICAgd2hpbGUgKCFtX3RyYW5zYWN0aW9uT3BlcmF0aW9uc0luUHJvZ3Jl
c3NRdWV1ZS5pc0VtcHR5KCkpCi0gICAgICAgIGluUHJvZ3Jlc3NBYm9ydFZlY3Rvci51bmNoZWNr
ZWRBcHBlbmQobV90cmFuc2FjdGlvbk9wZXJhdGlvbnNJblByb2dyZXNzUXVldWUudGFrZUZpcnN0
KCkpOworICAgIGF1dG8gaW5Qcm9ncmVzc0Fib3J0VmVjdG9yID0gY29weVRvVmVjdG9yT2Y8UmVm
UHRyPElEQkNsaWVudDo6VHJhbnNhY3Rpb25PcGVyYXRpb24+PihtX3RyYW5zYWN0aW9uT3BlcmF0
aW9uc0luUHJvZ3Jlc3NRdWV1ZSk7CisgICAgbV90cmFuc2FjdGlvbk9wZXJhdGlvbnNJblByb2dy
ZXNzUXVldWUuY2xlYXIoKTsKIAogICAgIGZvciAoYXV0byYgb3BlcmF0aW9uIDogaW5Qcm9ncmVz
c0Fib3J0VmVjdG9yKSB7CiAgICAgICAgIG1fdHJhbnNhY3Rpb25PcGVyYXRpb25zSW5Qcm9ncmVz
c1F1ZXVlLmFwcGVuZChvcGVyYXRpb24uZ2V0KCkpOwpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNv
cmUvTW9kdWxlcy9pbmRleGVkZGIvY2xpZW50L0lEQkNvbm5lY3Rpb25Qcm94eS5jcHAgYi9Tb3Vy
Y2UvV2ViQ29yZS9Nb2R1bGVzL2luZGV4ZWRkYi9jbGllbnQvSURCQ29ubmVjdGlvblByb3h5LmNw
cAppbmRleCA2Njc4MmVjZGUzZTQ3MjFlY2I0YjM0YzBkZDIwMzdjOTE1ZTI4ZGZiLi4xY2U5MDc3
YzBlMWRmNmNiM2IxZmU5NTFjMjk2ZTgxY2E4ODE1ZGQ5IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2Vi
Q29yZS9Nb2R1bGVzL2luZGV4ZWRkYi9jbGllbnQvSURCQ29ubmVjdGlvblByb3h5LmNwcAorKysg
Yi9Tb3VyY2UvV2ViQ29yZS9Nb2R1bGVzL2luZGV4ZWRkYi9jbGllbnQvSURCQ29ubmVjdGlvblBy
b3h5LmNwcApAQCAtNTc1LDE3ICs1NzUsOSBAQCB2b2lkIHJlbW92ZUl0ZW1zTWF0Y2hpbmdDdXJy
ZW50VGhyZWFkKEhhc2hNYXA8S2V5VHlwZSwgVmFsdWVUeXBlPiYgbWFwKQogewogICAgIC8vIEZJ
WE1FOiBSZXZpc2l0IHdoZW4gaW50cm9kdWNpbmcgV2ViVGhyZWFkIGF3YXJlIHRocmVhZCBjb21w
YXJpc29uLgogICAgIC8vIGh0dHBzOi8vYnVncy53ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9pZD0y
MDQzNDUKLSAgICBhdXRvJiBjdXJyZW50VGhyZWFkID0gVGhyZWFkOjpjdXJyZW50KCk7Ci0KLSAg
ICBWZWN0b3I8S2V5VHlwZT4ga2V5czsKLSAgICBrZXlzLnJlc2VydmVJbml0aWFsQ2FwYWNpdHko
bWFwLnNpemUoKSk7Ci0gICAgZm9yIChhdXRvJiBpdGVyYXRvciA6IG1hcCkgewotICAgICAgICBp
ZiAoJml0ZXJhdG9yLnZhbHVlLT5vcmlnaW5UaHJlYWQoKSA9PSAmY3VycmVudFRocmVhZCkKLSAg
ICAgICAgICAgIGtleXMudW5jaGVja2VkQXBwZW5kKGl0ZXJhdG9yLmtleSk7Ci0gICAgfQotCi0g
ICAgZm9yIChhdXRvJiBrZXkgOiBrZXlzKQotICAgICAgICBtYXAucmVtb3ZlKGtleSk7CisgICAg
bWFwLnJlbW92ZUlmKFtjdXJyZW50VGhyZWFkID0gJlRocmVhZDo6Y3VycmVudCgpXShhdXRvJiBl
bnRyeSkgeworICAgICAgICByZXR1cm4gJmVudHJ5LnZhbHVlLT5vcmlnaW5UaHJlYWQoKSA9PSBj
dXJyZW50VGhyZWFkOworICAgIH0pOwogfQogCiB0ZW1wbGF0ZTx0eXBlbmFtZSBLZXlUeXBlLCB0
eXBlbmFtZSBWYWx1ZVR5cGU+CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9Nb2R1bGVzL2lu
ZGV4ZWRkYi9zZXJ2ZXIvTWVtb3J5T2JqZWN0U3RvcmUuY3BwIGIvU291cmNlL1dlYkNvcmUvTW9k
dWxlcy9pbmRleGVkZGIvc2VydmVyL01lbW9yeU9iamVjdFN0b3JlLmNwcAppbmRleCBlMDFlZTAy
YjcxNTIzOTljYzcyNmZiMThiYzM0OTE0NjA0ZGU3M2VjLi4yYjQ3NTg4NzVlYWU0NTBmMGU0ZWM2
Nzg3MTVkYTEwOGY4MDlmNGZmIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9Nb2R1bGVzL2lu
ZGV4ZWRkYi9zZXJ2ZXIvTWVtb3J5T2JqZWN0U3RvcmUuY3BwCisrKyBiL1NvdXJjZS9XZWJDb3Jl
L01vZHVsZXMvaW5kZXhlZGRiL3NlcnZlci9NZW1vcnlPYmplY3RTdG9yZS5jcHAKQEAgLTE1NSwx
MiArMTU1LDkgQEAgSURCRXJyb3IgTWVtb3J5T2JqZWN0U3RvcmU6OmRlbGV0ZUluZGV4KE1lbW9y
eUJhY2tpbmdTdG9yZVRyYW5zYWN0aW9uJiB0cmFuc2FjdGkKIAogdm9pZCBNZW1vcnlPYmplY3RT
dG9yZTo6ZGVsZXRlQWxsSW5kZXhlcyhNZW1vcnlCYWNraW5nU3RvcmVUcmFuc2FjdGlvbiYgdHJh
bnNhY3Rpb24pCiB7Ci0gICAgVmVjdG9yPHVpbnQ2NF90PiBpbmRleElkZW50aWZpZXJzOwotICAg
IGluZGV4SWRlbnRpZmllcnMucmVzZXJ2ZUluaXRpYWxDYXBhY2l0eShtX2luZGV4ZXNCeU5hbWUu
c2l6ZSgpKTsKLQotICAgIGZvciAoYXV0byYgaW5kZXggOiBtX2luZGV4ZXNCeU5hbWUudmFsdWVz
KCkpCi0gICAgICAgIGluZGV4SWRlbnRpZmllcnMudW5jaGVja2VkQXBwZW5kKGluZGV4LT5pbmZv
KCkuaWRlbnRpZmllcigpKTsKLQorICAgIGF1dG8gaW5kZXhJZGVudGlmaWVycyA9IFdURjo6bWFw
KG1faW5kZXhlc0J5TmFtZSwgW10oYXV0byYgZW50cnkpIHsKKyAgICAgICAgcmV0dXJuIGVudHJ5
LnZhbHVlLT5pbmZvKCkuaWRlbnRpZmllcigpOworICAgIH0pOwogICAgIGZvciAoYXV0byBpZGVu
dGlmaWVyIDogaW5kZXhJZGVudGlmaWVycykKICAgICAgICAgZGVsZXRlSW5kZXgodHJhbnNhY3Rp
b24sIGlkZW50aWZpZXIpOwogfQpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvTW9kdWxlcy9p
bmRleGVkZGIvc2VydmVyL1NRTGl0ZUlEQkN1cnNvci5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9Nb2R1
bGVzL2luZGV4ZWRkYi9zZXJ2ZXIvU1FMaXRlSURCQ3Vyc29yLmNwcAppbmRleCA0ODYxMDM0ZDNh
MTJkYTBjMDljZmVkZmU5ZjJlYTY1YTY4MTAwMzUyLi42NjdmNWU3OTU3YjRiNjU3NmI4MjNhNjVj
MDQ4OWFhY2Q0Nzg5MzhkIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9Nb2R1bGVzL2luZGV4
ZWRkYi9zZXJ2ZXIvU1FMaXRlSURCQ3Vyc29yLmNwcAorKysgYi9Tb3VyY2UvV2ViQ29yZS9Nb2R1
bGVzL2luZGV4ZWRkYi9zZXJ2ZXIvU1FMaXRlSURCQ3Vyc29yLmNwcApAQCAtMTE2LDE3ICsxMTYs
MTggQEAgdm9pZCBTUUxpdGVJREJDdXJzb3I6OmN1cnJlbnREYXRhKElEQkdldFJlc3VsdCYgcmVz
dWx0LCBjb25zdCBzdGQ6Om9wdGlvbmFsPElEQksKICAgICB9CiAKICAgICBWZWN0b3I8SURCQ3Vy
c29yUmVjb3JkPiBwcmVmZXRjaGVkUmVjb3JkczsKLSAgICBwcmVmZXRjaGVkUmVjb3Jkcy5yZXNl
cnZlQ2FwYWNpdHkobV9mZXRjaGVkUmVjb3Jkcy5zaXplKCkpOworICAgIHByZWZldGNoZWRSZWNv
cmRzLnJlc2VydmVJbml0aWFsQ2FwYWNpdHkobV9mZXRjaGVkUmVjb3Jkcy5zaXplKCkpOworICAg
IGJvb2wgaXNGaXJzdCA9IHRydWU7CiAgICAgZm9yIChhdXRvJiByZWNvcmQgOiBtX2ZldGNoZWRS
ZWNvcmRzKSB7CiAgICAgICAgIGlmIChyZWNvcmQuaXNUZXJtaW5hbFJlY29yZCgpKQogICAgICAg
ICAgICAgYnJlYWs7Ci0KLSAgICAgICAgcHJlZmV0Y2hlZFJlY29yZHMuYXBwZW5kKHJlY29yZC5y
ZWNvcmQpOworICAgICAgICBpZiAoaXNGaXJzdCkgeworICAgICAgICAgICAgaXNGaXJzdCA9IGZh
bHNlOworICAgICAgICAgICAgY29udGludWU7CisgICAgICAgIH0KKyAgICAgICAgcHJlZmV0Y2hl
ZFJlY29yZHMudW5jaGVja2VkQXBwZW5kKHJlY29yZC5yZWNvcmQpOwogICAgIH0KLQotICAgIC8v
IEZpcnN0IHJlY29yZCB3aWxsIGJlIHJldHVybmVkIGFzIGN1cnJlbnQgcmVjb3JkLgotICAgIGlm
ICghcHJlZmV0Y2hlZFJlY29yZHMuaXNFbXB0eSgpKQotICAgICAgICBwcmVmZXRjaGVkUmVjb3Jk
cy5yZW1vdmUoMCk7CisgICAgcHJlZmV0Y2hlZFJlY29yZHMuc2hyaW5rVG9GaXQoKTsKIAogICAg
IHJlc3VsdCA9IHsgY3VycmVudFJlY29yZC5yZWNvcmQua2V5LCBjdXJyZW50UmVjb3JkLnJlY29y
ZC5wcmltYXJ5S2V5LCBJREJWYWx1ZShjdXJyZW50UmVjb3JkLnJlY29yZC52YWx1ZSksIGtleVBh
dGgsIFdURk1vdmUocHJlZmV0Y2hlZFJlY29yZHMpIH07CiB9CmRpZmYgLS1naXQgYS9Tb3VyY2Uv
V2ViQ29yZS9Nb2R1bGVzL2luZGV4ZWRkYi9zaGFyZWQvSURCRGF0YWJhc2VJbmZvLmNwcCBiL1Nv
dXJjZS9XZWJDb3JlL01vZHVsZXMvaW5kZXhlZGRiL3NoYXJlZC9JREJEYXRhYmFzZUluZm8uY3Bw
CmluZGV4IGFiYWVjNmM1Y2ZiY2VkOWZjNjZlZjU0ZmQ4ZGZkMmM3YTI3YzkxNmMuLjhmNjUwMzVl
ZDRlYWQ5NTgyYjhiNzhlMmNlNzdkNTIzMzhjZmJiM2YgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJD
b3JlL01vZHVsZXMvaW5kZXhlZGRiL3NoYXJlZC9JREJEYXRhYmFzZUluZm8uY3BwCisrKyBiL1Nv
dXJjZS9XZWJDb3JlL01vZHVsZXMvaW5kZXhlZGRiL3NoYXJlZC9JREJEYXRhYmFzZUluZm8uY3Bw
CkBAIC0xMzYsMTIgKzEzNiw5IEBAIHZvaWQgSURCRGF0YWJhc2VJbmZvOjpyZW5hbWVPYmplY3RT
dG9yZSh1aW50NjRfdCBvYmplY3RTdG9yZUlkZW50aWZpZXIsIGNvbnN0IFN0CiAKIFZlY3RvcjxT
dHJpbmc+IElEQkRhdGFiYXNlSW5mbzo6b2JqZWN0U3RvcmVOYW1lcygpIGNvbnN0CiB7Ci0gICAg
VmVjdG9yPFN0cmluZz4gbmFtZXM7Ci0gICAgbmFtZXMucmVzZXJ2ZUNhcGFjaXR5KG1fb2JqZWN0
U3RvcmVNYXAuc2l6ZSgpKTsKLSAgICBmb3IgKGF1dG8mIG9iamVjdFN0b3JlIDogbV9vYmplY3RT
dG9yZU1hcC52YWx1ZXMoKSkKLSAgICAgICAgbmFtZXMudW5jaGVja2VkQXBwZW5kKG9iamVjdFN0
b3JlLm5hbWUoKSk7Ci0KLSAgICByZXR1cm4gbmFtZXM7CisgICAgcmV0dXJuIFdURjo6bWFwKG1f
b2JqZWN0U3RvcmVNYXAsIFtdKGF1dG8mIHBhaXIpIHsKKyAgICAgICAgcmV0dXJuIHBhaXIudmFs
dWUubmFtZSgpOworICAgIH0pOwogfQogCiB2b2lkIElEQkRhdGFiYXNlSW5mbzo6ZGVsZXRlT2Jq
ZWN0U3RvcmUoY29uc3QgU3RyaW5nJiBvYmplY3RTdG9yZU5hbWUpCmRpZmYgLS1naXQgYS9Tb3Vy
Y2UvV2ViQ29yZS9Nb2R1bGVzL2luZGV4ZWRkYi9zaGFyZWQvSURCSW5kZXhJbmZvLmNwcCBiL1Nv
dXJjZS9XZWJDb3JlL01vZHVsZXMvaW5kZXhlZGRiL3NoYXJlZC9JREJJbmRleEluZm8uY3BwCmlu
ZGV4IDM4MTY4ZWMyOTlkYTdkODgwZmIwN2MwMWJkNDZjMjc0ZWNiZTM3M2QuLjAxNWFjZjcyNzY5
NDUzNzRjNGFkYjhhZDI0MzRiYTNiNzk5YWFmZGEgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3Jl
L01vZHVsZXMvaW5kZXhlZGRiL3NoYXJlZC9JREJJbmRleEluZm8uY3BwCisrKyBiL1NvdXJjZS9X
ZWJDb3JlL01vZHVsZXMvaW5kZXhlZGRiL3NoYXJlZC9JREJJbmRleEluZm8uY3BwCkBAIC0yNiw2
ICsyNiw3IEBACiAjaW5jbHVkZSAiY29uZmlnLmgiCiAjaW5jbHVkZSAiSURCSW5kZXhJbmZvLmgi
CiAKKyNpbmNsdWRlIDx3dGYvQ3Jvc3NUaHJlYWRDb3BpZXIuaD4KICNpbmNsdWRlIDx3dGYvdGV4
dC9TdHJpbmdDb25jYXRlbmF0ZU51bWJlcnMuaD4KIAogbmFtZXNwYWNlIFdlYkNvcmUgewpAQCAt
NDYsNyArNDcsNyBAQCBJREJJbmRleEluZm86OklEQkluZGV4SW5mbyh1aW50NjRfdCBpZGVudGlm
aWVyLCB1aW50NjRfdCBvYmplY3RTdG9yZUlkZW50aWZpZXIsCiAKIElEQkluZGV4SW5mbyBJREJJ
bmRleEluZm86Omlzb2xhdGVkQ29weSgpIGNvbnN0CiB7Ci0gICAgcmV0dXJuIHsgbV9pZGVudGlm
aWVyLCBtX29iamVjdFN0b3JlSWRlbnRpZmllciwgbV9uYW1lLmlzb2xhdGVkQ29weSgpLCBXZWJD
b3JlOjppc29sYXRlZENvcHkobV9rZXlQYXRoKSwgbV91bmlxdWUsIG1fbXVsdGlFbnRyeSB9Owor
ICAgIHJldHVybiB7IG1faWRlbnRpZmllciwgbV9vYmplY3RTdG9yZUlkZW50aWZpZXIsIG1fbmFt
ZS5pc29sYXRlZENvcHkoKSwgY3Jvc3NUaHJlYWRDb3B5KG1fa2V5UGF0aCksIG1fdW5pcXVlLCBt
X211bHRpRW50cnkgfTsKIH0KIAogI2lmICFMT0dfRElTQUJMRUQKZGlmZiAtLWdpdCBhL1NvdXJj
ZS9XZWJDb3JlL01vZHVsZXMvaW5kZXhlZGRiL3NoYXJlZC9JREJPYmplY3RTdG9yZUluZm8uY3Bw
IGIvU291cmNlL1dlYkNvcmUvTW9kdWxlcy9pbmRleGVkZGIvc2hhcmVkL0lEQk9iamVjdFN0b3Jl
SW5mby5jcHAKaW5kZXggYTRkZDYxYWU2YTM0ZDdiZjNjMWEyOTljNzBkNmExYzBiYjZlYjE4My4u
MTBjMWE0YzUxNWUyZWFlZjgwOTM5NDJiYjM2YzVkOGQ1MjM0YzBjYyAxMDA2NDQKLS0tIGEvU291
cmNlL1dlYkNvcmUvTW9kdWxlcy9pbmRleGVkZGIvc2hhcmVkL0lEQk9iamVjdFN0b3JlSW5mby5j
cHAKKysrIGIvU291cmNlL1dlYkNvcmUvTW9kdWxlcy9pbmRleGVkZGIvc2hhcmVkL0lEQk9iamVj
dFN0b3JlSW5mby5jcHAKQEAgLTI1LDYgKzI1LDggQEAKIAogI2luY2x1ZGUgImNvbmZpZy5oIgog
I2luY2x1ZGUgIklEQk9iamVjdFN0b3JlSW5mby5oIgorCisjaW5jbHVkZSA8d3RmL0Nyb3NzVGhy
ZWFkQ29waWVyLmg+CiAjaW5jbHVkZSA8d3RmL3RleHQvU3RyaW5nQnVpbGRlci5oPgogCiBuYW1l
c3BhY2UgV2ViQ29yZSB7CkBAIC05Miw3ICs5NCw3IEBAIElEQkluZGV4SW5mbyogSURCT2JqZWN0
U3RvcmVJbmZvOjppbmZvRm9yRXhpc3RpbmdJbmRleCh1aW50NjRfdCBpZGVudGlmaWVyKQogCiBJ
REJPYmplY3RTdG9yZUluZm8gSURCT2JqZWN0U3RvcmVJbmZvOjppc29sYXRlZENvcHkoKSBjb25z
dAogewotICAgIElEQk9iamVjdFN0b3JlSW5mbyByZXN1bHQgPSB7IG1faWRlbnRpZmllciwgbV9u
YW1lLmlzb2xhdGVkQ29weSgpLCBXZWJDb3JlOjppc29sYXRlZENvcHkobV9rZXlQYXRoKSwgbV9h
dXRvSW5jcmVtZW50IH07CisgICAgSURCT2JqZWN0U3RvcmVJbmZvIHJlc3VsdCA9IHsgbV9pZGVu
dGlmaWVyLCBtX25hbWUuaXNvbGF0ZWRDb3B5KCksIGNyb3NzVGhyZWFkQ29weShtX2tleVBhdGgp
LCBtX2F1dG9JbmNyZW1lbnQgfTsKIAogICAgIGZvciAoYXV0byYgaXRlcmF0b3IgOiBtX2luZGV4
TWFwKQogICAgICAgICByZXN1bHQubV9pbmRleE1hcC5zZXQoaXRlcmF0b3Iua2V5LCBpdGVyYXRv
ci52YWx1ZS5pc29sYXRlZENvcHkoKSk7CkBAIC0xMDIsMTIgKzEwNCw5IEBAIElEQk9iamVjdFN0
b3JlSW5mbyBJREJPYmplY3RTdG9yZUluZm86Omlzb2xhdGVkQ29weSgpIGNvbnN0CiAKIFZlY3Rv
cjxTdHJpbmc+IElEQk9iamVjdFN0b3JlSW5mbzo6aW5kZXhOYW1lcygpIGNvbnN0CiB7Ci0gICAg
VmVjdG9yPFN0cmluZz4gbmFtZXM7Ci0gICAgbmFtZXMucmVzZXJ2ZUNhcGFjaXR5KG1faW5kZXhN
YXAuc2l6ZSgpKTsKLSAgICBmb3IgKGF1dG8mIGluZGV4IDogbV9pbmRleE1hcC52YWx1ZXMoKSkK
LSAgICAgICAgbmFtZXMudW5jaGVja2VkQXBwZW5kKGluZGV4Lm5hbWUoKSk7Ci0KLSAgICByZXR1
cm4gbmFtZXM7CisgICAgcmV0dXJuIFdURjo6bWFwKG1faW5kZXhNYXAsIFtdKGF1dG8mIHBhaXIp
IC0+IFN0cmluZyB7CisgICAgICAgIHJldHVybiBwYWlyLnZhbHVlLm5hbWUoKTsKKyAgICB9KTsK
IH0KIAogdm9pZCBJREJPYmplY3RTdG9yZUluZm86OmRlbGV0ZUluZGV4KGNvbnN0IFN0cmluZyYg
aW5kZXhOYW1lKQpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvTW9kdWxlcy9pbmRleGVkZGIv
c2hhcmVkL0lEQlRyYW5zYWN0aW9uSW5mby5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9Nb2R1bGVzL2lu
ZGV4ZWRkYi9zaGFyZWQvSURCVHJhbnNhY3Rpb25JbmZvLmNwcAppbmRleCAzNWRhZTM5OTIyMjcy
NDM0MjE0NzYwN2ZiODQzNWJkMTg3YzQ5NjJmLi5hMDlmMzBiYmU1MWI1YjZiZmE2NTMyZGI5NjE4
Njg3MjY0MjNkNTQ0IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9Nb2R1bGVzL2luZGV4ZWRk
Yi9zaGFyZWQvSURCVHJhbnNhY3Rpb25JbmZvLmNwcAorKysgYi9Tb3VyY2UvV2ViQ29yZS9Nb2R1
bGVzL2luZGV4ZWRkYi9zaGFyZWQvSURCVHJhbnNhY3Rpb25JbmZvLmNwcApAQCAtODgsOSArODgs
OSBAQCB2b2lkIElEQlRyYW5zYWN0aW9uSW5mbzo6aXNvbGF0ZWRDb3B5KGNvbnN0IElEQlRyYW5z
YWN0aW9uSW5mbyYgc291cmNlLCBJREJUcmFucwogICAgIGRlc3RpbmF0aW9uLm1fZHVyYWJpbGl0
eSA9IHNvdXJjZS5tX2R1cmFiaWxpdHk7CiAgICAgZGVzdGluYXRpb24ubV9uZXdWZXJzaW9uID0g
c291cmNlLm1fbmV3VmVyc2lvbjsKIAotICAgIGRlc3RpbmF0aW9uLm1fb2JqZWN0U3RvcmVzLnJl
c2VydmVDYXBhY2l0eShzb3VyY2UubV9vYmplY3RTdG9yZXMuc2l6ZSgpKTsKLSAgICBmb3IgKGF1
dG8mIG9iamVjdFN0b3JlIDogc291cmNlLm1fb2JqZWN0U3RvcmVzKQotICAgICAgICBkZXN0aW5h
dGlvbi5tX29iamVjdFN0b3Jlcy51bmNoZWNrZWRBcHBlbmQob2JqZWN0U3RvcmUuaXNvbGF0ZWRD
b3B5KCkpOworICAgIGRlc3RpbmF0aW9uLm1fb2JqZWN0U3RvcmVzID0gc291cmNlLm1fb2JqZWN0
U3RvcmVzLm1hcChbXShhdXRvJiBvYmplY3RTdG9yZSkgeworICAgICAgICByZXR1cm4gb2JqZWN0
U3RvcmUuaXNvbGF0ZWRDb3B5KCk7CisgICAgfSk7CiAKICAgICBpZiAoc291cmNlLm1fb3JpZ2lu
YWxEYXRhYmFzZUluZm8pCiAgICAgICAgIGRlc3RpbmF0aW9uLm1fb3JpZ2luYWxEYXRhYmFzZUlu
Zm8gPSBtYWtlVW5pcXVlPElEQkRhdGFiYXNlSW5mbz4oKnNvdXJjZS5tX29yaWdpbmFsRGF0YWJh
c2VJbmZvLCBJREJEYXRhYmFzZUluZm86Oklzb2xhdGVkQ29weSk7CmRpZmYgLS1naXQgYS9Tb3Vy
Y2UvV2ViQ29yZS9Nb2R1bGVzL2luZGV4ZWRkYi9zaGFyZWQvSW5kZXhLZXkuY3BwIGIvU291cmNl
L1dlYkNvcmUvTW9kdWxlcy9pbmRleGVkZGIvc2hhcmVkL0luZGV4S2V5LmNwcAppbmRleCAyYzFh
MDE3ZjY5MzcxZWE2NTg0YzI1YTdiOWZlOTFmNjRmYTMxM2U4Li5iNTg3NWRjYmVlNzZjNzExOTBh
NzAxYTE1YjFhOTAzNTc1Yzg0MDY3IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9Nb2R1bGVz
L2luZGV4ZWRkYi9zaGFyZWQvSW5kZXhLZXkuY3BwCisrKyBiL1NvdXJjZS9XZWJDb3JlL01vZHVs
ZXMvaW5kZXhlZGRiL3NoYXJlZC9JbmRleEtleS5jcHAKQEAgLTI2LDExICsyNiwxMSBAQAogI2lu
Y2x1ZGUgImNvbmZpZy5oIgogI2luY2x1ZGUgIkluZGV4S2V5LmgiCiAKKyNpbmNsdWRlIDx3dGYv
Q3Jvc3NUaHJlYWRDb3BpZXIuaD4KKwogbmFtZXNwYWNlIFdlYkNvcmUgewogCi1JbmRleEtleTo6
SW5kZXhLZXkoKQotewotfQorSW5kZXhLZXk6OkluZGV4S2V5KCkgPSBkZWZhdWx0OwogCiBJbmRl
eEtleTo6SW5kZXhLZXkoVmVjdG9yPElEQktleURhdGE+JiYga2V5cykKIHsKQEAgLTM5LDEyICsz
OSw3IEBAIEluZGV4S2V5OjpJbmRleEtleShWZWN0b3I8SURCS2V5RGF0YT4mJiBrZXlzKQogCiBJ
bmRleEtleSBJbmRleEtleTo6aXNvbGF0ZWRDb3B5KCkgY29uc3QKIHsKLSAgICBWZWN0b3I8SURC
S2V5RGF0YT4ga2V5czsKLSAgICBrZXlzLnJlc2VydmVJbml0aWFsQ2FwYWNpdHkobV9rZXlzLnNp
emUoKSk7Ci0gICAgZm9yIChhdXRvJiBrZXkgOiBtX2tleXMpCi0gICAgICAgIGtleXMudW5jaGVj
a2VkQXBwZW5kKGtleS5pc29sYXRlZENvcHkoKSk7Ci0KLSAgICByZXR1cm4geyBXVEZNb3ZlKGtl
eXMpIH07CisgICAgcmV0dXJuIHsgY3Jvc3NUaHJlYWRDb3B5KG1fa2V5cykgfTsKIH0KIAogSURC
S2V5RGF0YSBJbmRleEtleTo6YXNPbmVLZXkoKSBjb25zdApkaWZmIC0tZ2l0IGEvU291cmNlL1dl
YkNvcmUvTW9kdWxlcy9tZWRpYXN0cmVhbS9NZWRpYVN0cmVhbS5jcHAgYi9Tb3VyY2UvV2ViQ29y
ZS9Nb2R1bGVzL21lZGlhc3RyZWFtL01lZGlhU3RyZWFtLmNwcAppbmRleCA1ZGQ4YzY2Y2Q4NGNm
ZjllM2JmN2E2MGM4OGFiOTRhNzUyMjY2MGIzLi42MGFkODBiMDc0NjQzMTM5NmM3MTIzNjU2ZTgy
MGJjYWU4NmFiMDBkIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9Nb2R1bGVzL21lZGlhc3Ry
ZWFtL01lZGlhU3RyZWFtLmNwcAorKysgYi9Tb3VyY2UvV2ViQ29yZS9Nb2R1bGVzL21lZGlhc3Ry
ZWFtL01lZGlhU3RyZWFtLmNwcApAQCAtMTE5LDEzICsxMTksMTAgQEAgUmVmUHRyPE1lZGlhU3Ry
ZWFtPiBNZWRpYVN0cmVhbTo6Y2xvbmUoKQogewogICAgIEFMV0FZU19MT0coTE9HSURFTlRJRklF
Uik7CiAKLSAgICBNZWRpYVN0cmVhbVRyYWNrVmVjdG9yIGNsb25lZFRyYWNrczsKLSAgICBjbG9u
ZWRUcmFja3MucmVzZXJ2ZUluaXRpYWxDYXBhY2l0eShtX3RyYWNrU2V0LnNpemUoKSk7Ci0KLSAg
ICBmb3IgKGF1dG8mIHRyYWNrIDogbV90cmFja1NldC52YWx1ZXMoKSkKLSAgICAgICAgY2xvbmVk
VHJhY2tzLnVuY2hlY2tlZEFwcGVuZCh0cmFjay0+Y2xvbmUoKSk7Ci0KLSAgICByZXR1cm4gTWVk
aWFTdHJlYW06OmNyZWF0ZSgqZG9jdW1lbnQoKSwgY2xvbmVkVHJhY2tzKTsKKyAgICBhdXRvIGNs
b25lZFRyYWNrcyA9IFdURjo6bWFwKG1fdHJhY2tTZXQsIFtdKGF1dG8mIGVudHJ5KSB7CisgICAg
ICAgIHJldHVybiBlbnRyeS52YWx1ZS0+Y2xvbmUoKTsKKyAgICB9KTsKKyAgICByZXR1cm4gTWVk
aWFTdHJlYW06OmNyZWF0ZSgqZG9jdW1lbnQoKSwgV1RGTW92ZShjbG9uZWRUcmFja3MpKTsKIH0K
IAogdm9pZCBNZWRpYVN0cmVhbTo6YWRkVHJhY2soTWVkaWFTdHJlYW1UcmFjayYgdHJhY2spCmRp
ZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9Nb2R1bGVzL21lZGlhc3RyZWFtL01lZGlhU3RyZWFt
VHJhY2suY3BwIGIvU291cmNlL1dlYkNvcmUvTW9kdWxlcy9tZWRpYXN0cmVhbS9NZWRpYVN0cmVh
bVRyYWNrLmNwcAppbmRleCBiZWJlOGVmMWYyYWYxNmRmODI3NzQ5MTFhYjFmYzU5ZTcyZDRlODA3
Li5hNDVkMTllNTQ3Mzk5NTZkYjc4MDYzYzdjYWJlOGE4ZTBmMTA0ZDRkIDEwMDY0NAotLS0gYS9T
b3VyY2UvV2ViQ29yZS9Nb2R1bGVzL21lZGlhc3RyZWFtL01lZGlhU3RyZWFtVHJhY2suY3BwCisr
KyBiL1NvdXJjZS9XZWJDb3JlL01vZHVsZXMvbWVkaWFzdHJlYW0vTWVkaWFTdHJlYW1UcmFjay5j
cHAKQEAgLTMyMSwxMSArMzIxLDkgQEAgc3RhdGljIExvbmdSYW5nZSBjYXBhYmlsaXR5SW50UmFu
Z2UoY29uc3QgQ2FwYWJpbGl0eVZhbHVlT3JSYW5nZSYgdmFsdWUpCiAKIHN0YXRpYyBWZWN0b3I8
U3RyaW5nPiBjYXBhYmlsaXR5U3RyaW5nVmVjdG9yKGNvbnN0IFZlY3RvcjxSZWFsdGltZU1lZGlh
U291cmNlU2V0dGluZ3M6OlZpZGVvRmFjaW5nTW9kZT4mIG1vZGVzKQogewotICAgIFZlY3RvcjxT
dHJpbmc+IHJlc3VsdDsKLSAgICByZXN1bHQucmVzZXJ2ZUluaXRpYWxDYXBhY2l0eShtb2Rlcy5z
aXplKCkpOwotICAgIGZvciAoYXV0byYgbW9kZSA6IG1vZGVzKQotICAgICAgICByZXN1bHQudW5j
aGVja2VkQXBwZW5kKFJlYWx0aW1lTWVkaWFTb3VyY2VTZXR0aW5nczo6ZmFjaW5nTW9kZShtb2Rl
KSk7Ci0gICAgcmV0dXJuIHJlc3VsdDsKKyAgICByZXR1cm4gbW9kZXMubWFwKFtdKGF1dG8mIG1v
ZGUpIHsKKyAgICAgICAgcmV0dXJuIFJlYWx0aW1lTWVkaWFTb3VyY2VTZXR0aW5nczo6ZmFjaW5n
TW9kZShtb2RlKTsKKyAgICB9KTsKIH0KIAogc3RhdGljIFZlY3Rvcjxib29sPiBjYXBhYmlsaXR5
Qm9vbGVhblZlY3RvcihSZWFsdGltZU1lZGlhU291cmNlQ2FwYWJpbGl0aWVzOjpFY2hvQ2FuY2Vs
bGF0aW9uIGNhbmNlbGxhdGlvbikKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL01vZHVsZXMv
bWVkaWFzdHJlYW0vTWVkaWFUcmFja0NvbnN0cmFpbnRzLmNwcCBiL1NvdXJjZS9XZWJDb3JlL01v
ZHVsZXMvbWVkaWFzdHJlYW0vTWVkaWFUcmFja0NvbnN0cmFpbnRzLmNwcAppbmRleCA5ZjEwNDgy
MTk2OTQxYjBmNTI0Njg1MzFjNDA0ZjU0ZjYwYTQ3YzQ5Li4zMTEzODQ3ZGI3NTQ4NDdkNjE2MmZh
MmQ2MWU2NzM0YTZhODg4NWIzIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9Nb2R1bGVzL21l
ZGlhc3RyZWFtL01lZGlhVHJhY2tDb25zdHJhaW50cy5jcHAKKysrIGIvU291cmNlL1dlYkNvcmUv
TW9kdWxlcy9tZWRpYXN0cmVhbS9NZWRpYVRyYWNrQ29uc3RyYWludHMuY3BwCkBAIC0xNzgsMTEg
KzE3OCw5IEBAIHN0YXRpYyBNZWRpYVRyYWNrQ29uc3RyYWludFNldE1hcCBjb252ZXJ0VG9JbnRl
cm5hbEZvcm0oQ29uc3RyYWludFNldFR5cGUgc2V0VHlwCiAKIHN0YXRpYyBWZWN0b3I8TWVkaWFU
cmFja0NvbnN0cmFpbnRTZXRNYXA+IGNvbnZlcnRBZHZhbmNlZFRvSW50ZXJuYWxGb3JtKGNvbnN0
IFZlY3RvcjxNZWRpYVRyYWNrQ29uc3RyYWludFNldD4mIHZlY3RvcikKIHsKLSAgICBWZWN0b3I8
TWVkaWFUcmFja0NvbnN0cmFpbnRTZXRNYXA+IHJlc3VsdDsKLSAgICByZXN1bHQucmVzZXJ2ZUlu
aXRpYWxDYXBhY2l0eSh2ZWN0b3Iuc2l6ZSgpKTsKLSAgICBmb3IgKGF1dG8mIHNldCA6IHZlY3Rv
cikKLSAgICAgICAgcmVzdWx0LnVuY2hlY2tlZEFwcGVuZChjb252ZXJ0VG9JbnRlcm5hbEZvcm0o
Q29uc3RyYWludFNldFR5cGU6OkFkdmFuY2VkLCBzZXQpKTsKLSAgICByZXR1cm4gcmVzdWx0Owor
ICAgIHJldHVybiB2ZWN0b3IubWFwKFtdKGF1dG8mIHNldCkgeworICAgICAgICByZXR1cm4gY29u
dmVydFRvSW50ZXJuYWxGb3JtKENvbnN0cmFpbnRTZXRUeXBlOjpBZHZhbmNlZCwgc2V0KTsKKyAg
ICB9KTsKIH0KIAogc3RhdGljIFZlY3RvcjxNZWRpYVRyYWNrQ29uc3RyYWludFNldE1hcD4gY29u
dmVydEFkdmFuY2VkVG9JbnRlcm5hbEZvcm0oY29uc3Qgc3RkOjpvcHRpb25hbDxWZWN0b3I8TWVk
aWFUcmFja0NvbnN0cmFpbnRTZXQ+PiYgb3B0aW9uYWxWZWN0b3IpCmRpZmYgLS1naXQgYS9Tb3Vy
Y2UvV2ViQ29yZS9Nb2R1bGVzL21lZGlhc3RyZWFtL1NGcmFtZVV0aWxzLmNwcCBiL1NvdXJjZS9X
ZWJDb3JlL01vZHVsZXMvbWVkaWFzdHJlYW0vU0ZyYW1lVXRpbHMuY3BwCmluZGV4IGQ4MmI5NmY0
NDY5MzlmNmNjMWNiMWVlYTljMTY1Mjg5OWNkMzUwN2EuLmIwZWYxZDVhNTZjNjIyMWFhYTNiOWI0
OWM4ZmY3MmRjYTA0MTJlZGIgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL01vZHVsZXMvbWVk
aWFzdHJlYW0vU0ZyYW1lVXRpbHMuY3BwCisrKyBiL1NvdXJjZS9XZWJDb3JlL01vZHVsZXMvbWVk
aWFzdHJlYW0vU0ZyYW1lVXRpbHMuY3BwCkBAIC0xNjMsOSArMTYzLDkgQEAgc3RhdGljIGlubGlu
ZSB2b2lkIGZpbmRFc2NhcGVSYnNwUGF0dGVybnMoY29uc3QgVmVjdG9yPHVpbnQ4X3Q+JiBmcmFt
ZSwgc2l6ZV90IG8KIHZvaWQgdG9SYnNwKFZlY3Rvcjx1aW50OF90PiYgZnJhbWUsIHNpemVfdCBv
ZmZzZXQpCiB7CiAgICAgc2l6ZV90IGNvdW50ID0gMDsKLSAgICBmaW5kRXNjYXBlUmJzcFBhdHRl
cm5zKGZyYW1lLCBvZmZzZXQsIFsmY291bnRdKHNpemVfdCwgYm9vbCBzaG91ZGxCZUVzY2FwZWQp
IHsKLSAgICAgICAgaWYgKHNob3VkbEJlRXNjYXBlZCkKLSAgICAgICAgICAgIGNvdW50Kys7Cisg
ICAgZmluZEVzY2FwZVJic3BQYXR0ZXJucyhmcmFtZSwgb2Zmc2V0LCBbJmNvdW50XShzaXplX3Qs
IGJvb2wgc2hvdWxkQmVFc2NhcGVkKSB7CisgICAgICAgIGlmIChzaG91bGRCZUVzY2FwZWQpCisg
ICAgICAgICAgICArK2NvdW50OwogICAgIH0pOwogICAgIGlmICghY291bnQpCiAgICAgICAgIHJl
dHVybjsKQEAgLTE3NCw4ICsxNzQsOCBAQCB2b2lkIHRvUmJzcChWZWN0b3I8dWludDhfdD4mIGZy
YW1lLCBzaXplX3Qgb2Zmc2V0KQogICAgIG5ld0ZyYW1lLnJlc2VydmVJbml0aWFsQ2FwYWNpdHko
ZnJhbWUuc2l6ZSgpICsgY291bnQpOwogICAgIG5ld0ZyYW1lLmFwcGVuZChmcmFtZS5kYXRhKCks
IG9mZnNldCk7CiAKLSAgICBmaW5kRXNjYXBlUmJzcFBhdHRlcm5zKGZyYW1lLCBvZmZzZXQsIFtk
YXRhID0gZnJhbWUuZGF0YSgpLCAmbmV3RnJhbWVdKHNpemVfdCBwb3NpdGlvbiwgYm9vbCBzaG91
ZGxCZUVzY2FwZWQpIHsKLSAgICAgICAgaWYgKHNob3VkbEJlRXNjYXBlZCkKKyAgICBmaW5kRXNj
YXBlUmJzcFBhdHRlcm5zKGZyYW1lLCBvZmZzZXQsIFtkYXRhID0gZnJhbWUuZGF0YSgpLCAmbmV3
RnJhbWVdKHNpemVfdCBwb3NpdGlvbiwgYm9vbCBzaG91bGRCZUVzY2FwZWQpIHsKKyAgICAgICAg
aWYgKHNob3VsZEJlRXNjYXBlZCkKICAgICAgICAgICAgIG5ld0ZyYW1lLnVuY2hlY2tlZEFwcGVu
ZCgzKTsKICAgICAgICAgbmV3RnJhbWUudW5jaGVja2VkQXBwZW5kKGRhdGFbcG9zaXRpb25dKTsK
ICAgICB9KTsKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL01vZHVsZXMvcmVtb3RlcGxheWJh
Y2svUmVtb3RlUGxheWJhY2suY3BwIGIvU291cmNlL1dlYkNvcmUvTW9kdWxlcy9yZW1vdGVwbGF5
YmFjay9SZW1vdGVQbGF5YmFjay5jcHAKaW5kZXggNDBmYTE4OTAxYmViMDBlOTJiMzdkNzY0M2Qz
YThhY2NlMmEzMjFjZi4uMmU1MmY4ZWNmN2RiZDA1N2U4ZjBkMWJmOTAwZGE5N2ZkM2JhNTg1NyAx
MDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvTW9kdWxlcy9yZW1vdGVwbGF5YmFjay9SZW1vdGVQ
bGF5YmFjay5jcHAKKysrIGIvU291cmNlL1dlYkNvcmUvTW9kdWxlcy9yZW1vdGVwbGF5YmFjay9S
ZW1vdGVQbGF5YmFjay5jcHAKQEAgLTQwOSwxMyArNDA5LDcgQEAgdm9pZCBSZW1vdGVQbGF5YmFj
azo6YXZhaWxhYmlsaXR5Q2hhbmdlZChib29sIGF2YWlsYWJsZSkKICAgICAgICAgICAgIHJldHVy
bjsKIAogICAgICAgICAvLyBQcm90ZWN0IG1fY2FsbGJhY2tNYXAgYWdhaW5zdCBtdXRhdGlvbiB3
aGlsZSBpdCdzIGJlaW5nIGl0ZXJhdGVkIG92ZXIuCi0gICAgICAgIFZlY3RvcjxSZWY8UmVtb3Rl
UGxheWJhY2tBdmFpbGFiaWxpdHlDYWxsYmFjaz4+IGNhbGxiYWNrczsKLSAgICAgICAgY2FsbGJh
Y2tzLnJlc2VydmVJbml0aWFsQ2FwYWNpdHkobV9jYWxsYmFja01hcC5zaXplKCkpOwotCi0gICAg
ICAgIC8vIENhbid0IHVzZSBjb3B5VmFsdWVzVG9WZWN0b3IoKSBoZXJlIGJlY2F1c2UgUmVmPD4g
aGFzIGEgZGVsZXRlZCBhc3NpZ25tZW50IG9wZXJhdG9yLgotICAgICAgICBmb3IgKGF1dG8mIGNh
bGxiYWNrIDogbV9jYWxsYmFja01hcC52YWx1ZXMoKSkKLSAgICAgICAgICAgIGNhbGxiYWNrcy51
bmNoZWNrZWRBcHBlbmQoY2FsbGJhY2suY29weVJlZigpKTsKLSAgICAgICAgZm9yIChhdXRvJiBj
YWxsYmFjayA6IGNhbGxiYWNrcykKKyAgICAgICAgZm9yIChhdXRvJiBjYWxsYmFjayA6IGNvcHlU
b1ZlY3RvcihtX2NhbGxiYWNrTWFwLnZhbHVlcygpKSkKICAgICAgICAgICAgIGNhbGxiYWNrLT5o
YW5kbGVFdmVudChhdmFpbGFibGUpOwogICAgIH0pOwogfQpkaWZmIC0tZ2l0IGEvU291cmNlL1dl
YkNvcmUvTW9kdWxlcy9zcGVlY2gvU3BlZWNoUmVjb2duaXRpb24uY3BwIGIvU291cmNlL1dlYkNv
cmUvTW9kdWxlcy9zcGVlY2gvU3BlZWNoUmVjb2duaXRpb24uY3BwCmluZGV4IDgyZmZmZTQ3YTEw
ZDYyMmUxZGI3ZWIwZDlhYjJjNTgwZTJkNzFhMGMuLjI5MDQ2YmRiODZhZWEyMWQyYWJkZDJjZmM5
ZWFhMTgwMWVlYjUyM2IgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL01vZHVsZXMvc3BlZWNo
L1NwZWVjaFJlY29nbml0aW9uLmNwcAorKysgYi9Tb3VyY2UvV2ViQ29yZS9Nb2R1bGVzL3NwZWVj
aC9TcGVlY2hSZWNvZ25pdGlvbi5jcHAKQEAgLTE2OSw3ICsxNjksNyBAQCB2b2lkIFNwZWVjaFJl
Y29nbml0aW9uOjpkaWRGaW5kTm9NYXRjaCgpCiB2b2lkIFNwZWVjaFJlY29nbml0aW9uOjpkaWRS
ZWNlaXZlUmVzdWx0KFZlY3RvcjxTcGVlY2hSZWNvZ25pdGlvblJlc3VsdERhdGE+JiYgcmVzdWx0
RGF0YXMpCiB7CiAgICAgVmVjdG9yPFJlZjxTcGVlY2hSZWNvZ25pdGlvblJlc3VsdD4+IGFsbFJl
c3VsdHM7Ci0gICAgYWxsUmVzdWx0cy5yZXNlcnZlQ2FwYWNpdHkobV9maW5hbFJlc3VsdHMuc2l6
ZSgpICsgcmVzdWx0RGF0YXMuc2l6ZSgpKTsKKyAgICBhbGxSZXN1bHRzLnJlc2VydmVJbml0aWFs
Q2FwYWNpdHkobV9maW5hbFJlc3VsdHMuc2l6ZSgpICsgcmVzdWx0RGF0YXMuc2l6ZSgpKTsKICAg
ICBhbGxSZXN1bHRzLmFwcGVuZFZlY3RvcihtX2ZpbmFsUmVzdWx0cyk7CiAKICAgICBhdXRvIGZp
cnN0Q2hhbmdlZEluZGV4ID0gYWxsUmVzdWx0cy5zaXplKCk7CmRpZmYgLS1naXQgYS9Tb3VyY2Uv
V2ViQ29yZS9Nb2R1bGVzL3dlYmF1dGhuL2Nib3IvQ0JPUlZhbHVlLmNwcCBiL1NvdXJjZS9XZWJD
b3JlL01vZHVsZXMvd2ViYXV0aG4vY2Jvci9DQk9SVmFsdWUuY3BwCmluZGV4IDliMjhmMGU1ZTEw
MDZkNGViMTdiZDkwMzBmOWNiMmJiYWY0N2E3ZjAuLjRlNzA4MzYxOTViMzA2ZWE3NDgwZGUwMDBj
ZTgxN2EzMjdmNDlkODMgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL01vZHVsZXMvd2ViYXV0
aG4vY2Jvci9DQk9SVmFsdWUuY3BwCisrKyBiL1NvdXJjZS9XZWJDb3JlL01vZHVsZXMvd2ViYXV0
aG4vY2Jvci9DQk9SVmFsdWUuY3BwCkBAIC0xMjYsMTEgKzEyNiw4IEBAIENCT1JWYWx1ZTo6Q0JP
UlZhbHVlKGNvbnN0IFN0cmluZyYgaW5TdHJpbmcpCiAKIENCT1JWYWx1ZTo6Q0JPUlZhbHVlKGNv
bnN0IEFycmF5VmFsdWUmIGluQXJyYXkpCiAgICAgOiBtX3R5cGUoVHlwZTo6QXJyYXkpCi0gICAg
LCBtX2FycmF5VmFsdWUoKQorICAgICwgbV9hcnJheVZhbHVlKGluQXJyYXkubWFwKFtdKGF1dG8m
IHZhbHVlKSB7IHJldHVybiB2YWx1ZS5jbG9uZSgpOyB9KSkKIHsKLSAgICBtX2FycmF5VmFsdWUu
cmVzZXJ2ZUNhcGFjaXR5KGluQXJyYXkuc2l6ZSgpKTsKLSAgICBmb3IgKGNvbnN0IGF1dG8mIHZh
bCA6IGluQXJyYXkpCi0gICAgICAgIG1fYXJyYXlWYWx1ZS5hcHBlbmQodmFsLmNsb25lKCkpOwog
fQogCiBDQk9SVmFsdWU6OkNCT1JWYWx1ZShBcnJheVZhbHVlJiYgaW5BcnJheSkKZGlmZiAtLWdp
dCBhL1NvdXJjZS9XZWJDb3JlL01vZHVsZXMvd2ViYXV0aG4vZmlkby9BdXRoZW50aWNhdG9yR2V0
SW5mb1Jlc3BvbnNlLmNwcCBiL1NvdXJjZS9XZWJDb3JlL01vZHVsZXMvd2ViYXV0aG4vZmlkby9B
dXRoZW50aWNhdG9yR2V0SW5mb1Jlc3BvbnNlLmNwcAppbmRleCAzMDlhZDc2ZWUyNzA0Y2UyYzY1
ZGRjZTBmYTc0MzRlYjY5OTFmOWRlLi41NmZkZGUyZmNkMzMwOTFmOTk1NTJmOTI0NDE1NWI2OWQy
NjQ3MjRmIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9Nb2R1bGVzL3dlYmF1dGhuL2ZpZG8v
QXV0aGVudGljYXRvckdldEluZm9SZXNwb25zZS5jcHAKKysrIGIvU291cmNlL1dlYkNvcmUvTW9k
dWxlcy93ZWJhdXRobi9maWRvL0F1dGhlbnRpY2F0b3JHZXRJbmZvUmVzcG9uc2UuY3BwCkBAIC00
MCwxMCArNDAsOSBAQCBuYW1lc3BhY2UgZmlkbyB7CiB0ZW1wbGF0ZSA8dHlwZW5hbWUgQ29udGFp
bmVyPgogY2Jvcjo6Q0JPUlZhbHVlIHRvQXJyYXlWYWx1ZShjb25zdCBDb250YWluZXImIGNvbnRh
aW5lcikKIHsKLSAgICBjYm9yOjpDQk9SVmFsdWU6OkFycmF5VmFsdWUgdmFsdWU7Ci0gICAgdmFs
dWUucmVzZXJ2ZUluaXRpYWxDYXBhY2l0eShjb250YWluZXIuc2l6ZSgpKTsKLSAgICBmb3IgKGNv
bnN0IGF1dG8mIGl0ZW0gOiBjb250YWluZXIpCi0gICAgICAgIHZhbHVlLmFwcGVuZChjYm9yOjpD
Qk9SVmFsdWUoaXRlbSkpOworICAgIGF1dG8gdmFsdWUgPSBXVEY6Om1hcChjb250YWluZXIsIFtd
KGF1dG8mIGl0ZW0pIHsKKyAgICAgICAgcmV0dXJuIGNib3I6OkNCT1JWYWx1ZShpdGVtKTsKKyAg
ICB9KTsKICAgICByZXR1cm4gY2Jvcjo6Q0JPUlZhbHVlKFdURk1vdmUodmFsdWUpKTsKIH0KIApk
aWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvTW9kdWxlcy93ZWJhdXRobi9maWRvL0RldmljZVJl
cXVlc3RDb252ZXJ0ZXIuY3BwIGIvU291cmNlL1dlYkNvcmUvTW9kdWxlcy93ZWJhdXRobi9maWRv
L0RldmljZVJlcXVlc3RDb252ZXJ0ZXIuY3BwCmluZGV4IDJmNjlkNzM4MzhmOTFkMDFiMWVmZGFl
OTI1NGM5Mjk3Y2I2YTU4ZDYuLjMyOWYyYTFkYTFiN2Y5MDM0NjMxMjg3OGI2MzA2MmM2ZTQyMjhk
NDkgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL01vZHVsZXMvd2ViYXV0aG4vZmlkby9EZXZp
Y2VSZXF1ZXN0Q29udmVydGVyLmNwcAorKysgYi9Tb3VyY2UvV2ViQ29yZS9Nb2R1bGVzL3dlYmF1
dGhuL2ZpZG8vRGV2aWNlUmVxdWVzdENvbnZlcnRlci5jcHAKQEAgLTY4LDE0ICs2OCwxMiBAQCBz
dGF0aWMgQ0JPUlZhbHVlIGNvbnZlcnRVc2VyRW50aXR5VG9DQk9SKGNvbnN0IFB1YmxpY0tleUNy
ZWRlbnRpYWxDcmVhdGlvbk9wdGlvbgogCiBzdGF0aWMgQ0JPUlZhbHVlIGNvbnZlcnRQYXJhbWV0
ZXJzVG9DQk9SKGNvbnN0IFZlY3RvcjxQdWJsaWNLZXlDcmVkZW50aWFsQ3JlYXRpb25PcHRpb25z
OjpQYXJhbWV0ZXJzPiYgcGFyYW1ldGVycykKIHsKLSAgICBDQk9SVmFsdWU6OkFycmF5VmFsdWUg
Y3JlZGVudGlhbFBhcmFtQXJyYXk7Ci0gICAgY3JlZGVudGlhbFBhcmFtQXJyYXkucmVzZXJ2ZUlu
aXRpYWxDYXBhY2l0eShwYXJhbWV0ZXJzLnNpemUoKSk7Ci0gICAgZm9yIChjb25zdCBhdXRvJiBj
cmVkZW50aWFsIDogcGFyYW1ldGVycykgeworICAgIGF1dG8gY3JlZGVudGlhbFBhcmFtQXJyYXkg
PSBwYXJhbWV0ZXJzLm1hcChbXShhdXRvJiBjcmVkZW50aWFsKSB7CiAgICAgICAgIENCT1JWYWx1
ZTo6TWFwVmFsdWUgY2JvckNyZWRlbnRpYWxNYXA7CiAgICAgICAgIGNib3JDcmVkZW50aWFsTWFw
LmVtcGxhY2UoQ0JPUlZhbHVlKGtDcmVkZW50aWFsVHlwZU1hcEtleSksIENCT1JWYWx1ZShwdWJs
aWNLZXlDcmVkZW50aWFsVHlwZVRvU3RyaW5nKGNyZWRlbnRpYWwudHlwZSkpKTsKICAgICAgICAg
Y2JvckNyZWRlbnRpYWxNYXAuZW1wbGFjZShDQk9SVmFsdWUoa0NyZWRlbnRpYWxBbGdvcml0aG1N
YXBLZXkpLCBDQk9SVmFsdWUoY3JlZGVudGlhbC5hbGcpKTsKLSAgICAgICAgY3JlZGVudGlhbFBh
cmFtQXJyYXkuYXBwZW5kKFdURk1vdmUoY2JvckNyZWRlbnRpYWxNYXApKTsKLSAgICB9CisgICAg
ICAgIHJldHVybiBDQk9SVmFsdWUgeyBXVEZNb3ZlKGNib3JDcmVkZW50aWFsTWFwKSB9OworICAg
IH0pOwogICAgIHJldHVybiBDQk9SVmFsdWUoV1RGTW92ZShjcmVkZW50aWFsUGFyYW1BcnJheSkp
OwogfQogCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9Nb2R1bGVzL3dlYmF1dGhuL2ZpZG8v
UGluLmNwcCBiL1NvdXJjZS9XZWJDb3JlL01vZHVsZXMvd2ViYXV0aG4vZmlkby9QaW4uY3BwCmlu
ZGV4IDkxNDJhYmJjOGM2NDgxNjIwMjlhMTI5NzllODk1YjY3MTI3ODEwZTcuLjlmYTY3M2YxODJj
Y2NiMDQ2MjE3MzNhZTM4YzUyMzZkMzYyYjVjODggMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3Jl
L01vZHVsZXMvd2ViYXV0aG4vZmlkby9QaW4uY3BwCisrKyBiL1NvdXJjZS9XZWJDb3JlL01vZHVs
ZXMvd2ViYXV0aG4vZmlkby9QaW4uY3BwCkBAIC03Myw4ICs3Myw4IEBAIHN0YXRpYyBWZWN0b3I8
dWludDhfdD4gbWFrZVBpbkF1dGgoY29uc3QgQ3J5cHRvS2V5SE1BQyYga2V5LCBjb25zdCBWZWN0
b3I8dWludDhfCiBWZWN0b3I8dWludDhfdD4gZW5jb2RlUmF3UHVibGljS2V5KGNvbnN0IFZlY3Rv
cjx1aW50OF90PiYgeCwgY29uc3QgVmVjdG9yPHVpbnQ4X3Q+JiB5KQogewogICAgIFZlY3Rvcjx1
aW50OF90PiByYXdLZXk7Ci0gICAgcmF3S2V5LnJlc2VydmVDYXBhY2l0eSgxICsgeC5zaXplKCkg
KyB5LnNpemUoKSk7Ci0gICAgcmF3S2V5LmFwcGVuZCgweDA0KTsKKyAgICByYXdLZXkucmVzZXJ2
ZUluaXRpYWxDYXBhY2l0eSgxICsgeC5zaXplKCkgKyB5LnNpemUoKSk7CisgICAgcmF3S2V5LnVu
Y2hlY2tlZEFwcGVuZCgweDA0KTsKICAgICByYXdLZXkuYXBwZW5kVmVjdG9yKHgpOwogICAgIHJh
d0tleS5hcHBlbmRWZWN0b3IoeSk7CiAgICAgcmV0dXJuIHJhd0tleTsKZGlmZiAtLWdpdCBhL1Nv
dXJjZS9XZWJDb3JlL01vZHVsZXMvd2ViZGF0YWJhc2UvRGF0YWJhc2VUcmFja2VyLmNwcCBiL1Nv
dXJjZS9XZWJDb3JlL01vZHVsZXMvd2ViZGF0YWJhc2UvRGF0YWJhc2VUcmFja2VyLmNwcAppbmRl
eCBjYTQxN2M5YWIzZDVhMGFmOWMwYmQxYTQyZDVhODU4NDY0MDUzN2Q5Li4xMTlmM2UyZDMzYjA3
NjdlMGQ1MTFlYjlmZDQ3NjBkZTk3NjUzODYzIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9N
b2R1bGVzL3dlYmRhdGFiYXNlL0RhdGFiYXNlVHJhY2tlci5jcHAKKysrIGIvU291cmNlL1dlYkNv
cmUvTW9kdWxlcy93ZWJkYXRhYmFzZS9EYXRhYmFzZVRyYWNrZXIuY3BwCkBAIC00Miw2ICs0Miw3
IEBACiAjaW5jbHVkZSAiU1FMaXRlRmlsZVN5c3RlbS5oIgogI2luY2x1ZGUgIlNRTGl0ZVN0YXRl
bWVudC5oIgogI2luY2x1ZGUgIlNRTGl0ZVRyYW5zYWN0aW9uLmgiCisjaW5jbHVkZSA8d3RmL0Ny
b3NzVGhyZWFkQ29waWVyLmg+CiAjaW5jbHVkZSA8d3RmL0ZpbGVTeXN0ZW0uaD4KICNpbmNsdWRl
IDx3dGYvTWFpblRocmVhZC5oPgogI2luY2x1ZGUgPHd0Zi9OZXZlckRlc3Ryb3llZC5oPgpAQCAt
NTYsMTUgKzU3LDYgQEAKIAogbmFtZXNwYWNlIFdlYkNvcmUgewogCi1zdGF0aWMgVmVjdG9yPFN0
cmluZz4gaXNvbGF0ZWRDb3B5KGNvbnN0IFZlY3RvcjxTdHJpbmc+JiBvcmlnaW5hbCkKLXsKLSAg
ICBWZWN0b3I8U3RyaW5nPiBjb3B5OwotICAgIGNvcHkucmVzZXJ2ZUluaXRpYWxDYXBhY2l0eShv
cmlnaW5hbC5zaXplKCkpOwotICAgIGZvciAoYXV0byYgc3RyaW5nIDogb3JpZ2luYWwpCi0gICAg
ICAgIGNvcHkudW5jaGVja2VkQXBwZW5kKHN0cmluZy5pc29sYXRlZENvcHkoKSk7Ci0gICAgcmV0
dXJuIGNvcHk7Ci19Ci0KIHN0ZDo6dW5pcXVlX3B0cjxEYXRhYmFzZVRyYWNrZXI+IERhdGFiYXNl
VHJhY2tlcjo6dHJhY2tlcldpdGhEYXRhYmFzZVBhdGgoY29uc3QgU3RyaW5nJiBkYXRhYmFzZVBh
dGgpCiB7CiAgICAgcmV0dXJuIHN0ZDo6dW5pcXVlX3B0cjxEYXRhYmFzZVRyYWNrZXI+KG5ldyBE
YXRhYmFzZVRyYWNrZXIoZGF0YWJhc2VQYXRoKSk7CkBAIC00MTksMTIgKzQxMSw4IEBAIFZlY3Rv
cjxTdHJpbmc+IERhdGFiYXNlVHJhY2tlcjo6ZGF0YWJhc2VOYW1lc05vTG9jayhjb25zdCBTZWN1
cml0eU9yaWdpbkRhdGEmIG9yCiAKIFZlY3RvcjxTdHJpbmc+IERhdGFiYXNlVHJhY2tlcjo6ZGF0
YWJhc2VOYW1lcyhjb25zdCBTZWN1cml0eU9yaWdpbkRhdGEmIG9yaWdpbikKIHsKLSAgICBWZWN0
b3I8U3RyaW5nPiBuYW1lczsKLSAgICB7Ci0gICAgICAgIExvY2tlciBsb2NrRGF0YWJhc2UgeyBt
X2RhdGFiYXNlR3VhcmQgfTsKLSAgICAgICAgbmFtZXMgPSBkYXRhYmFzZU5hbWVzTm9Mb2NrKG9y
aWdpbik7Ci0gICAgfQotICAgIHJldHVybiBpc29sYXRlZENvcHkobmFtZXMpOworICAgIExvY2tl
ciBsb2NrRGF0YWJhc2UgeyBtX2RhdGFiYXNlR3VhcmQgfTsKKyAgICByZXR1cm4gY3Jvc3NUaHJl
YWRDb3B5KGRhdGFiYXNlTmFtZXNOb0xvY2sob3JpZ2luKSk7CiB9CiAKIERhdGFiYXNlRGV0YWls
cyBEYXRhYmFzZVRyYWNrZXI6OmRldGFpbHNGb3JOYW1lQW5kT3JpZ2luKGNvbnN0IFN0cmluZyYg
bmFtZSwgY29uc3QgU2VjdXJpdHlPcmlnaW5EYXRhJiBvcmlnaW4pCmRpZmYgLS1naXQgYS9Tb3Vy
Y2UvV2ViQ29yZS9hY2Nlc3NpYmlsaXR5L0FYT2JqZWN0Q2FjaGUuY3BwIGIvU291cmNlL1dlYkNv
cmUvYWNjZXNzaWJpbGl0eS9BWE9iamVjdENhY2hlLmNwcAppbmRleCBmM2E2ZmFkNWUwM2Q5Mzk0
MTE3MThjOGQ4ZjE5MmZiMTMwMzRjNmZkLi4wMzM5YTdkNzc4ZDhmMDljMjU5NzhjMDk3MGFmMzE3
MmExNTNmNTQzIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9hY2Nlc3NpYmlsaXR5L0FYT2Jq
ZWN0Q2FjaGUuY3BwCisrKyBiL1NvdXJjZS9XZWJDb3JlL2FjY2Vzc2liaWxpdHkvQVhPYmplY3RD
YWNoZS5jcHAKQEAgLTExMjEsNyArMTEyMSw3IEBAIHZvaWQgQVhPYmplY3RDYWNoZTo6bm90aWZp
Y2F0aW9uUG9zdFRpbWVyRmlyZWQoKQogCiAgICAgLy8gRmlsdGVyIG91dCB0aGUgbm90aWZpY2F0
aW9ucyB0aGF0IGFyZSBub3QgZ29pbmcgdG8gYmUgcG9zdGVkIHRvIHBsYXRmb3JtIGNsaWVudHMu
CiAgICAgVmVjdG9yPHN0ZDo6cGFpcjxSZWZQdHI8QVhDb3JlT2JqZWN0PiwgQVhOb3RpZmljYXRp
b24+PiBub3RpZmljYXRpb25zVG9Qb3N0OwotICAgIG5vdGlmaWNhdGlvbnNUb1Bvc3QucmVzZXJ2
ZUNhcGFjaXR5KG5vdGlmaWNhdGlvbnMuc2l6ZSgpKTsKKyAgICBub3RpZmljYXRpb25zVG9Qb3N0
LnJlc2VydmVJbml0aWFsQ2FwYWNpdHkobm90aWZpY2F0aW9ucy5zaXplKCkpOwogICAgIGZvciAo
Y29uc3QgYXV0byYgbm90ZSA6IG5vdGlmaWNhdGlvbnMpIHsKICAgICAgICAgQVNTRVJUKG5vdGUu
Zmlyc3QpOwogICAgICAgICBpZiAoIW5vdGUuZmlyc3QtPm9iamVjdElEKCkgfHwgIW5vdGUuZmly
c3QtPmF4T2JqZWN0Q2FjaGUoKSkKQEAgLTExNDMsNyArMTE0Myw3IEBAIHZvaWQgQVhPYmplY3RD
YWNoZTo6bm90aWZpY2F0aW9uUG9zdFRpbWVyRmlyZWQoKQogICAgICAgICAgICAgICAgIGNvbnRp
bnVlOwogICAgICAgICB9CiAKLSAgICAgICAgbm90aWZpY2F0aW9uc1RvUG9zdC5hcHBlbmQobm90
ZSk7CisgICAgICAgIG5vdGlmaWNhdGlvbnNUb1Bvc3QudW5jaGVja2VkQXBwZW5kKG5vdGUpOwog
ICAgIH0KIAogI2lmIEVOQUJMRShBQ0NFU1NJQklMSVRZX0lTT0xBVEVEX1RSRUUpCmRpZmYgLS1n
aXQgYS9Tb3VyY2UvV2ViQ29yZS9hY2Nlc3NpYmlsaXR5L2lzb2xhdGVkdHJlZS9BWElzb2xhdGVk
T2JqZWN0LmNwcCBiL1NvdXJjZS9XZWJDb3JlL2FjY2Vzc2liaWxpdHkvaXNvbGF0ZWR0cmVlL0FY
SXNvbGF0ZWRPYmplY3QuY3BwCmluZGV4IDJkOTY3Mzk1NWViYjc1MjU2N2EzMjljZDRjNDY1ZDQ3
NmRkYjVhNDEuLjMzZWExMGEzMWVmOTNkYWJiODk1ZDU0MjU0MWNhZDg1NGY2ODZlMDIgMTAwNjQ0
Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL2FjY2Vzc2liaWxpdHkvaXNvbGF0ZWR0cmVlL0FYSXNvbGF0
ZWRPYmplY3QuY3BwCisrKyBiL1NvdXJjZS9XZWJDb3JlL2FjY2Vzc2liaWxpdHkvaXNvbGF0ZWR0
cmVlL0FYSXNvbGF0ZWRPYmplY3QuY3BwCkBAIC00NDQsMTcgKzQ0NCwxMCBAQCB2b2lkIEFYSXNv
bGF0ZWRPYmplY3Q6OnNldE1hdGhzY3JpcHRzKEFYUHJvcGVydHlOYW1lIHByb3BlcnR5TmFtZSwg
QVhDb3JlT2JqZWN0JgogICAgIGlmICghbWF0aFNpemUpCiAgICAgICAgIHJldHVybjsKIAotICAg
IFZlY3RvcjxzdGQ6OnBhaXI8QVhJRCwgQVhJRD4+IGlkUGFpcnM7Ci0gICAgaWRQYWlycy5yZXNl
cnZlQ2FwYWNpdHkobWF0aFNpemUpOwotICAgIGZvciAoYXV0byBtYXRoUGFpciA6IHBhaXJzKSB7
Ci0gICAgICAgIHN0ZDo6cGFpcjxBWElELCBBWElEPiBpZFBhaXI7Ci0gICAgICAgIGlmIChtYXRo
UGFpci5maXJzdCkKLSAgICAgICAgICAgIGlkUGFpci5maXJzdCA9IG1hdGhQYWlyLmZpcnN0LT5v
YmplY3RJRCgpOwotICAgICAgICBpZiAobWF0aFBhaXIuc2Vjb25kKQotICAgICAgICAgICAgaWRQ
YWlyLnNlY29uZCA9IG1hdGhQYWlyLnNlY29uZC0+b2JqZWN0SUQoKTsKLSAgICAgICAgaWRQYWly
cy51bmNoZWNrZWRBcHBlbmQoaWRQYWlyKTsKLSAgICB9Ci0gICAgc2V0UHJvcGVydHkocHJvcGVy
dHlOYW1lLCBpZFBhaXJzKTsKKyAgICBhdXRvIGlkUGFpcnMgPSBwYWlycy5tYXAoW10oYXV0byYg
bWF0aFBhaXIpIHsKKyAgICAgICAgcmV0dXJuIHN0ZDo6bWFrZV9wYWlyKG1hdGhQYWlyLmZpcnN0
ID8gbWF0aFBhaXIuZmlyc3QtPm9iamVjdElEKCkgOiBBWElEKCksIG1hdGhQYWlyLnNlY29uZCA/
IG1hdGhQYWlyLnNlY29uZC0+b2JqZWN0SUQoKSA6IEFYSUQoKSk7CisgICAgfSk7CisgICAgc2V0
UHJvcGVydHkocHJvcGVydHlOYW1lLCBXVEZNb3ZlKGlkUGFpcnMpKTsKIH0KIAogdm9pZCBBWElz
b2xhdGVkT2JqZWN0OjpzZXRPYmplY3RQcm9wZXJ0eShBWFByb3BlcnR5TmFtZSBwcm9wZXJ0eU5h
bWUsIEFYQ29yZU9iamVjdCogb2JqZWN0KQpAQCAtNDY3LDE2ICs0NjAsMTMgQEAgdm9pZCBBWElz
b2xhdGVkT2JqZWN0OjpzZXRPYmplY3RQcm9wZXJ0eShBWFByb3BlcnR5TmFtZSBwcm9wZXJ0eU5h
bWUsIEFYQ29yZU9iamUKIAogdm9pZCBBWElzb2xhdGVkT2JqZWN0OjpzZXRPYmplY3RWZWN0b3JQ
cm9wZXJ0eShBWFByb3BlcnR5TmFtZSBwcm9wZXJ0eU5hbWUsIGNvbnN0IEFjY2Vzc2liaWxpdHlD
aGlsZHJlblZlY3RvciYgY2hpbGRyZW4pCiB7Ci0gICAgaWYgKCFjaGlsZHJlbi5zaXplKCkpCisg
ICAgaWYgKGNoaWxkcmVuLmlzRW1wdHkoKSkKICAgICAgICAgcmV0dXJuOwogCi0gICAgVmVjdG9y
PEFYSUQ+IGNoaWxkSURzOwotICAgIGNoaWxkSURzLnJlc2VydmVDYXBhY2l0eShjaGlsZHJlbi5z
aXplKCkpOwotCi0gICAgZm9yIChhdXRvIGNoaWxkIDogY2hpbGRyZW4pCi0gICAgICAgIGNoaWxk
SURzLnVuY2hlY2tlZEFwcGVuZChjaGlsZC0+b2JqZWN0SUQoKSk7Ci0KLSAgICBzZXRQcm9wZXJ0
eShwcm9wZXJ0eU5hbWUsIGNoaWxkSURzKTsKKyAgICBhdXRvIGNoaWxkSURzID0gY2hpbGRyZW4u
bWFwKFtdKGF1dG8mIGNoaWxkKSB7CisgICAgICAgIHJldHVybiBjaGlsZC0+b2JqZWN0SUQoKTsK
KyAgICB9KTsKKyAgICBzZXRQcm9wZXJ0eShwcm9wZXJ0eU5hbWUsIFdURk1vdmUoY2hpbGRJRHMp
KTsKIH0KIAogdm9pZCBBWElzb2xhdGVkT2JqZWN0OjpzZXRQcm9wZXJ0eShBWFByb3BlcnR5TmFt
ZSBwcm9wZXJ0eU5hbWUsIEFYUHJvcGVydHlWYWx1ZVZhcmlhbnQmJiB2YWx1ZSwgYm9vbCBzaG91
bGRSZW1vdmUpCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9hY2Nlc3NpYmlsaXR5L2lzb2xh
dGVkdHJlZS9BWElzb2xhdGVkVHJlZS5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9hY2Nlc3NpYmlsaXR5
L2lzb2xhdGVkdHJlZS9BWElzb2xhdGVkVHJlZS5jcHAKaW5kZXggN2VmMDYyYTBjNjA4YzFhOGVm
MzExOGFlNDQ0OTE2NTIwZGNkNzZjMi4uOGY3ZmNkYTMxMTlmZmZiOTBjMDIzNDUyMjY1NjQ3ZmJl
Yzk2YzIzYSAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvYWNjZXNzaWJpbGl0eS9pc29sYXRl
ZHRyZWUvQVhJc29sYXRlZFRyZWUuY3BwCisrKyBiL1NvdXJjZS9XZWJDb3JlL2FjY2Vzc2liaWxp
dHkvaXNvbGF0ZWR0cmVlL0FYSXNvbGF0ZWRUcmVlLmNwcApAQCAtMTU5LDEyICsxNTksMTIgQEAg
VmVjdG9yPFJlZlB0cjxBWENvcmVPYmplY3Q+PiBBWElzb2xhdGVkVHJlZTo6b2JqZWN0c0ZvcklE
cyhjb25zdCBWZWN0b3I8QVhJRD4mIGEKIHsKICAgICBBWFRSQUNFKCJBWElzb2xhdGVkVHJlZTo6
b2JqZWN0c0ZvcklEcyIpOwogICAgIFZlY3RvcjxSZWZQdHI8QVhDb3JlT2JqZWN0Pj4gcmVzdWx0
OwotICAgIHJlc3VsdC5yZXNlcnZlQ2FwYWNpdHkoYXhJRHMuc2l6ZSgpKTsKLQotICAgIGZvciAo
Y29uc3QgYXV0byYgYXhJRCA6IGF4SURzKSB7CisgICAgcmVzdWx0LnJlc2VydmVJbml0aWFsQ2Fw
YWNpdHkoYXhJRHMuc2l6ZSgpKTsKKyAgICBmb3IgKGF1dG8mIGF4SUQgOiBheElEcykgewogICAg
ICAgICBpZiAoYXV0byBvYmplY3QgPSBub2RlRm9ySUQoYXhJRCkpCiAgICAgICAgICAgICByZXN1
bHQudW5jaGVja2VkQXBwZW5kKG9iamVjdCk7CiAgICAgfQorICAgIHJlc3VsdC5zaHJpbmtUb0Zp
dCgpOwogCiAgICAgcmV0dXJuIHJlc3VsdDsKIH0KQEAgLTI4NSwxNSArMjg1LDExIEBAIHZvaWQg
QVhJc29sYXRlZFRyZWU6OmNvbGxlY3ROb2RlQ2hhbmdlc0ZvclN1YnRyZWUoQVhDb3JlT2JqZWN0
JiBheE9iamVjdCwgQVhJRCBwCiAgICAgICAgIGlkc0JlaW5nQ2hhbmdlZC0+YWRkKG5vZGVDaGFu
Z2UuaXNvbGF0ZWRPYmplY3QtPm9iamVjdElEKCkpOwogICAgIGNoYW5nZXMuYXBwZW5kKFdURk1v
dmUobm9kZUNoYW5nZSkpOwogCi0gICAgYXV0byBheENoaWxkcmVuID0gYXhPYmplY3QuY2hpbGRy
ZW4oKTsKLSAgICBWZWN0b3I8QVhJRD4gYXhDaGlsZHJlbklEczsKLSAgICBheENoaWxkcmVuSURz
LnJlc2VydmVJbml0aWFsQ2FwYWNpdHkoYXhDaGlsZHJlbi5zaXplKCkpOwotICAgIGZvciAoY29u
c3QgYXV0byYgYXhDaGlsZCA6IGF4Q2hpbGRyZW4pIHsKKyAgICBhdXRvIGF4Q2hpbGRyZW5JRHMg
PSBheE9iamVjdC5jaGlsZHJlbigpLm1hcChbJl0oYXV0byYgYXhDaGlsZCkgewogICAgICAgICBj
b2xsZWN0Tm9kZUNoYW5nZXNGb3JTdWJ0cmVlKCpheENoaWxkLCBheE9iamVjdC5vYmplY3RJRCgp
LCBhdHRhY2hXcmFwcGVyLCBjaGFuZ2VzLCBpZHNCZWluZ0NoYW5nZWQpOwotICAgICAgICBheENo
aWxkcmVuSURzLnVuY2hlY2tlZEFwcGVuZChheENoaWxkLT5vYmplY3RJRCgpKTsKLSAgICB9Ci0K
LSAgICBtX25vZGVNYXAuc2V0KGF4T2JqZWN0Lm9iamVjdElEKCksIFBhcmVudENoaWxkcmVuSURz
IHsgcGFyZW50SUQsIGF4Q2hpbGRyZW5JRHMgfSk7CisgICAgICAgIHJldHVybiBheENoaWxkLT5v
YmplY3RJRCgpOworICAgIH0pOworICAgIG1fbm9kZU1hcC5zZXQoYXhPYmplY3Qub2JqZWN0SUQo
KSwgUGFyZW50Q2hpbGRyZW5JRHMgeyBwYXJlbnRJRCwgV1RGTW92ZShheENoaWxkcmVuSURzKSB9
KTsKIH0KIAogdm9pZCBBWElzb2xhdGVkVHJlZTo6dXBkYXRlTm9kZShBWENvcmVPYmplY3QmIGF4
T2JqZWN0KQpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvYW5pbWF0aW9uL0NTU1Byb3BlcnR5
QW5pbWF0aW9uLmNwcCBiL1NvdXJjZS9XZWJDb3JlL2FuaW1hdGlvbi9DU1NQcm9wZXJ0eUFuaW1h
dGlvbi5jcHAKaW5kZXggMjRhMzZlY2I4NzQwYjRmMTU2YzVhODkyYjY1MzhjNWFjOTBiMTRmOS4u
ZTM1OWEwNDNiMmUzY2YzOWY5YzI2YmM1OWU5OGYxMDVlMTMyYzEwNSAxMDA2NDQKLS0tIGEvU291
cmNlL1dlYkNvcmUvYW5pbWF0aW9uL0NTU1Byb3BlcnR5QW5pbWF0aW9uLmNwcAorKysgYi9Tb3Vy
Y2UvV2ViQ29yZS9hbmltYXRpb24vQ1NTUHJvcGVydHlBbmltYXRpb24uY3BwCkBAIC0yODY1LDYg
KzI4NjUsNyBAQCBDU1NQcm9wZXJ0eUFuaW1hdGlvbldyYXBwZXJNYXA6OkNTU1Byb3BlcnR5QW5p
bWF0aW9uV3JhcHBlck1hcCgpCiAgICAgICAgICAgICBBU1NFUlQobV9wcm9wZXJ0eVdyYXBwZXJz
W3dyYXBwZXJJbmRleF0pOwogICAgICAgICAgICAgbG9uZ2hhbmRXcmFwcGVycy51bmNoZWNrZWRB
cHBlbmQobV9wcm9wZXJ0eVdyYXBwZXJzW3dyYXBwZXJJbmRleF0uZ2V0KCkpOwogICAgICAgICB9
CisgICAgICAgIGxvbmdoYW5kV3JhcHBlcnMuc2hyaW5rVG9GaXQoKTsKIAogICAgICAgICBtX3By
b3BlcnR5V3JhcHBlcnMudW5jaGVja2VkQXBwZW5kKG1ha2VVbmlxdWU8U2hvcnRoYW5kUHJvcGVy
dHlXcmFwcGVyPihwcm9wZXJ0eUlELCBXVEZNb3ZlKGxvbmdoYW5kV3JhcHBlcnMpKSk7CiAgICAg
ICAgIGluZGV4RnJvbVByb3BlcnR5SUQocHJvcGVydHlJRCkgPSBhbmltYXRhYmxlTG9uZ2hhbmRQ
cm9wZXJ0aWVzQ291bnQgKyBpOwpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvYmluZGluZ3Mv
anMvU2VyaWFsaXplZFNjcmlwdFZhbHVlLmNwcCBiL1NvdXJjZS9XZWJDb3JlL2JpbmRpbmdzL2pz
L1NlcmlhbGl6ZWRTY3JpcHRWYWx1ZS5jcHAKaW5kZXggMjBjMWJjYmM0NGQ2Y2QxYTQ4NTliZDk1
N2FkYjU0OTA1NDBhNWMwZS4uZDE0ZTc5MDI4OGZkYzMyYjM5MzM1OWFiZWE1Njg3N2Q0NzU2ZWI4
MiAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvYmluZGluZ3MvanMvU2VyaWFsaXplZFNjcmlw
dFZhbHVlLmNwcAorKysgYi9Tb3VyY2UvV2ViQ29yZS9iaW5kaW5ncy9qcy9TZXJpYWxpemVkU2Ny
aXB0VmFsdWUuY3BwCkBAIC0yNDU2LDExICsyNDU2LDExIEBAIHByaXZhdGU6CiAgICAgICAgIHB0
ciArPSBsZW5ndGggKiBzaXplb2YoVUNoYXIpOwogI2Vsc2UKICAgICAgICAgVmVjdG9yPFVDaGFy
PiBidWZmZXI7Ci0gICAgICAgIGJ1ZmZlci5yZXNlcnZlQ2FwYWNpdHkobGVuZ3RoKTsKKyAgICAg
ICAgYnVmZmVyLnJlc2VydmVJbml0aWFsQ2FwYWNpdHkobGVuZ3RoKTsKICAgICAgICAgZm9yICh1
bnNpZ25lZCBpID0gMDsgaSA8IGxlbmd0aDsgaSsrKSB7CiAgICAgICAgICAgICB1aW50MTZfdCBj
aDsKICAgICAgICAgICAgIHJlYWRMaXR0bGVFbmRpYW4ocHRyLCBlbmQsIGNoKTsKLSAgICAgICAg
ICAgIGJ1ZmZlci5hcHBlbmQoY2gpOworICAgICAgICAgICAgYnVmZmVyLnVuY2hlY2tlZEFwcGVu
ZChjaCk7CiAgICAgICAgIH0KICAgICAgICAgc3RyID0gU3RyaW5nOjphZG9wdChXVEZNb3ZlKGJ1
ZmZlcikpOwogI2VuZGlmCkBAIC00NTcyLDEyICs0NTcyLDkgQEAgdWludDMyX3QgU2VyaWFsaXpl
ZFNjcmlwdFZhbHVlOjp3aXJlRm9ybWF0VmVyc2lvbigpCiAKIFZlY3RvcjxTdHJpbmc+IFNlcmlh
bGl6ZWRTY3JpcHRWYWx1ZTo6YmxvYlVSTHMoKSBjb25zdAogewotICAgIFZlY3RvcjxTdHJpbmc+
IHJlc3VsdDsKLSAgICByZXN1bHQucmVzZXJ2ZUluaXRpYWxDYXBhY2l0eShtX2Jsb2JIYW5kbGVz
LnNpemUoKSk7Ci0gICAgZm9yIChhdXRvJiBoYW5kbGUgOiBtX2Jsb2JIYW5kbGVzKQotICAgICAg
ICByZXN1bHQudW5jaGVja2VkQXBwZW5kKGhhbmRsZS51cmwoKS5zdHJpbmcoKSk7Ci0KLSAgICBy
ZXR1cm4gcmVzdWx0OworICAgIHJldHVybiBtX2Jsb2JIYW5kbGVzLm1hcChbXShhdXRvJiBoYW5k
bGUpIHsKKyAgICAgICAgcmV0dXJuIGhhbmRsZS51cmwoKS5zdHJpbmcoKTsKKyAgICB9KTsKIH0K
IAogdm9pZCBTZXJpYWxpemVkU2NyaXB0VmFsdWU6OndyaXRlQmxvYnNUb0Rpc2tGb3JJbmRleGVk
REIoQ29tcGxldGlvbkhhbmRsZXI8dm9pZChJREJWYWx1ZSYmKT4mJiBjb21wbGV0aW9uSGFuZGxl
cikKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL2NyeXB0by9tYWMvQ3J5cHRvQWxnb3JpdGht
RUNEU0FNYWMuY3BwIGIvU291cmNlL1dlYkNvcmUvY3J5cHRvL21hYy9DcnlwdG9BbGdvcml0aG1F
Q0RTQU1hYy5jcHAKaW5kZXggNjhhYTc2N2M5Zjg0ZjNhNThiYjgyMGNlZDc4OWUzZDBmY2RhMWFk
MC4uYTFiNjg2NzAyZGI3YTg4ODhhOGRiZTZlMDNhODhiYWI5YzQ3Zjk5MiAxMDA2NDQKLS0tIGEv
U291cmNlL1dlYkNvcmUvY3J5cHRvL21hYy9DcnlwdG9BbGdvcml0aG1FQ0RTQU1hYy5jcHAKKysr
IGIvU291cmNlL1dlYkNvcmUvY3J5cHRvL21hYy9DcnlwdG9BbGdvcml0aG1FQ0RTQU1hYy5jcHAK
QEAgLTYzLDcgKzYzLDcgQEAgc3RhdGljIEV4Y2VwdGlvbk9yPFZlY3Rvcjx1aW50OF90Pj4gc2ln
bkVDRFNBKENyeXB0b0FsZ29yaXRobUlkZW50aWZpZXIgaGFzaCwgY28KICAgICAvLyBGSVhNRTog
PHJkYXI6Ly9wcm9ibGVtLzMxNjE4MzcxPgogICAgIC8vIGNvbnZlcnQgdGhlIERFUiBiaW5hcnkg
aW50byByICsgcwogICAgIFZlY3Rvcjx1aW50OF90PiBuZXdTaWduYXR1cmU7Ci0gICAgbmV3U2ln
bmF0dXJlLnJlc2VydmVDYXBhY2l0eShrZXlMZW5ndGhJbkJ5dGVzICogMik7CisgICAgbmV3U2ln
bmF0dXJlLnJlc2VydmVJbml0aWFsQ2FwYWNpdHkoa2V5TGVuZ3RoSW5CeXRlcyAqIDIpOwogICAg
IHNpemVfdCBvZmZzZXQgPSAxOyAvLyBza2lwIHRhZwogICAgIG9mZnNldCArPSBieXRlc1VzZWRU
b0VuY29kZWRMZW5ndGgoc2lnbmF0dXJlW29mZnNldF0pOyAvLyBza2lwIGxlbmd0aAogICAgICsr
b2Zmc2V0OyAvLyBza2lwIHRhZwpAQCAtNzEsNyArNzEsNyBAQCBzdGF0aWMgRXhjZXB0aW9uT3I8
VmVjdG9yPHVpbnQ4X3Q+PiBzaWduRUNEU0EoQ3J5cHRvQWxnb3JpdGhtSWRlbnRpZmllciBoYXNo
LCBjbwogICAgIC8vIElmIHIgPCBrZXlMZW5ndGhJbkJ5dGVzLCBmaWxsIHRoZSBoZWFkIG9mIHIg
d2l0aCAwcy4KICAgICBzaXplX3QgYnl0ZXNUb0NvcHkgPSBrZXlMZW5ndGhJbkJ5dGVzOwogICAg
IGlmIChzaWduYXR1cmVbb2Zmc2V0XSA8IGtleUxlbmd0aEluQnl0ZXMpIHsKLSAgICAgICAgbmV3
U2lnbmF0dXJlLnJlc2l6ZShrZXlMZW5ndGhJbkJ5dGVzIC0gc2lnbmF0dXJlW29mZnNldF0pOwor
ICAgICAgICBuZXdTaWduYXR1cmUuZ3JvdyhrZXlMZW5ndGhJbkJ5dGVzIC0gc2lnbmF0dXJlW29m
ZnNldF0pOwogICAgICAgICBtZW1zZXQobmV3U2lnbmF0dXJlLmRhdGEoKSwgSW5pdGlhbE9jdGV0
LCBrZXlMZW5ndGhJbkJ5dGVzIC0gc2lnbmF0dXJlW29mZnNldF0pOwogICAgICAgICBieXRlc1Rv
Q29weSA9IHNpZ25hdHVyZVtvZmZzZXRdOwogICAgIH0gZWxzZSBpZiAoc2lnbmF0dXJlW29mZnNl
dF0gPiBrZXlMZW5ndGhJbkJ5dGVzKSAvLyBPdGhlcndpc2Ugc2tpcCB0aGUgbGVhZGluZyAwcyBv
ZiByLgpAQCAtMTM0LDcgKzEzNCw3IEBAIHN0YXRpYyBFeGNlcHRpb25Pcjxib29sPiB2ZXJpZnlF
Q0RTQShDcnlwdG9BbGdvcml0aG1JZGVudGlmaWVyIGhhc2gsIGNvbnN0IFBsYXRmCiAKICAgICAv
LyBDb25zdHJ1Y3QgdGhlIERFUiBzaWduYXR1cmUuCiAgICAgVmVjdG9yPHVpbnQ4X3Q+IG5ld1Np
Z25hdHVyZTsKLSAgICBuZXdTaWduYXR1cmUucmVzZXJ2ZUNhcGFjaXR5KDYgKyBrZXlMZW5ndGhJ
bkJ5dGVzICogMyAgKyByTmVlZHNJbml0aWFsT2N0ZXQgKyBzTmVlZHNJbml0aWFsT2N0ZXQgLSBy
U3RhcnQgLSBzU3RhcnQpOworICAgIG5ld1NpZ25hdHVyZS5yZXNlcnZlSW5pdGlhbENhcGFjaXR5
KDYgKyBrZXlMZW5ndGhJbkJ5dGVzICogMyAgKyByTmVlZHNJbml0aWFsT2N0ZXQgKyBzTmVlZHNJ
bml0aWFsT2N0ZXQgLSByU3RhcnQgLSBzU3RhcnQpOwogICAgIG5ld1NpZ25hdHVyZS5hcHBlbmQo
U2VxdWVuY2VNYXJrKTsKICAgICBhZGRFbmNvZGVkQVNOMUxlbmd0aChuZXdTaWduYXR1cmUsIDQg
KyBrZXlMZW5ndGhJbkJ5dGVzICogMyAgKyByTmVlZHNJbml0aWFsT2N0ZXQgKyBzTmVlZHNJbml0
aWFsT2N0ZXQgLSByU3RhcnQgLSBzU3RhcnQpOwogICAgIG5ld1NpZ25hdHVyZS5hcHBlbmQoSW50
ZWdlck1hcmspOwpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvY3J5cHRvL21hYy9DcnlwdG9L
ZXlFQ01hYy5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9jcnlwdG8vbWFjL0NyeXB0b0tleUVDTWFjLmNw
cAppbmRleCBjZDk2MmY3OTdiMjI0Yzc4OGZlY2RmZTg1OTJjN2Y0MjRkMWFlYzhkLi42MGI3M2Zk
YmE2ODY5YWVjZGQ4NWViMDFhMTE5NmNiMDFjOWY5N2JjIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2Vi
Q29yZS9jcnlwdG8vbWFjL0NyeXB0b0tleUVDTWFjLmNwcAorKysgYi9Tb3VyY2UvV2ViQ29yZS9j
cnlwdG8vbWFjL0NyeXB0b0tleUVDTWFjLmNwcApAQCAtMjgyLDcgKzI4Miw3IEBAIFZlY3Rvcjx1
aW50OF90PiBDcnlwdG9LZXlFQzo6cGxhdGZvcm1FeHBvcnRTcGtpKCkgY29uc3QKICAgICBzaXpl
X3QgdG90YWxTaXplID0gc2l6ZW9mKElkRWNQdWJsaWNLZXkpICsgb2lkU2l6ZSArIGJ5dGVzTmVl
ZGVkRm9yRW5jb2RlZExlbmd0aChrZXlTaXplICsgMSkgKyBrZXlTaXplICsgNDsKIAogICAgIFZl
Y3Rvcjx1aW50OF90PiByZXN1bHQ7Ci0gICAgcmVzdWx0LnJlc2VydmVDYXBhY2l0eSh0b3RhbFNp
emUgKyBieXRlc05lZWRlZEZvckVuY29kZWRMZW5ndGgodG90YWxTaXplKSArIDEpOworICAgIHJl
c3VsdC5yZXNlcnZlSW5pdGlhbENhcGFjaXR5KHRvdGFsU2l6ZSArIGJ5dGVzTmVlZGVkRm9yRW5j
b2RlZExlbmd0aCh0b3RhbFNpemUpICsgMSk7CiAgICAgcmVzdWx0LmFwcGVuZChTZXF1ZW5jZU1h
cmspOwogICAgIGFkZEVuY29kZWRBU04xTGVuZ3RoKHJlc3VsdCwgdG90YWxTaXplKTsKICAgICBy
ZXN1bHQuYXBwZW5kKFNlcXVlbmNlTWFyayk7CkBAIC0zODgsNyArMzg4LDcgQEAgVmVjdG9yPHVp
bnQ4X3Q+IENyeXB0b0tleUVDOjpwbGF0Zm9ybUV4cG9ydFBrY3M4KCkgY29uc3QKICAgICBzaXpl
X3QgdG90YWxTaXplID0gc2l6ZW9mKFZlcnNpb24pICsgc2l6ZW9mKElkRWNQdWJsaWNLZXkpICsg
b2lkU2l6ZSArIGJ5dGVzTmVlZGVkRm9yRW5jb2RlZExlbmd0aChwcml2YXRlS2V5U2l6ZSkgKyBw
cml2YXRlS2V5U2l6ZSArIDM7CiAKICAgICBWZWN0b3I8dWludDhfdD4gcmVzdWx0OwotICAgIHJl
c3VsdC5yZXNlcnZlQ2FwYWNpdHkodG90YWxTaXplICsgYnl0ZXNOZWVkZWRGb3JFbmNvZGVkTGVu
Z3RoKHRvdGFsU2l6ZSkgKyAxKTsKKyAgICByZXN1bHQucmVzZXJ2ZUluaXRpYWxDYXBhY2l0eSh0
b3RhbFNpemUgKyBieXRlc05lZWRlZEZvckVuY29kZWRMZW5ndGgodG90YWxTaXplKSArIDEpOwog
ICAgIHJlc3VsdC5hcHBlbmQoU2VxdWVuY2VNYXJrKTsKICAgICBhZGRFbmNvZGVkQVNOMUxlbmd0
aChyZXN1bHQsIHRvdGFsU2l6ZSk7CiAgICAgcmVzdWx0LmFwcGVuZChWZXJzaW9uLCBzaXplb2Yo
VmVyc2lvbikpOwpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvY3J5cHRvL21hYy9DcnlwdG9L
ZXlSU0FNYWMuY3BwIGIvU291cmNlL1dlYkNvcmUvY3J5cHRvL21hYy9DcnlwdG9LZXlSU0FNYWMu
Y3BwCmluZGV4IGI5MmJkZGI0YjMzMDZiNzVmNTgxZjI1NDNmZmQxOGU5MTAzNjdhNDYuLjkzNDg2
ODVjNzY2YTUyZWYyYjcxODU3NmU1NzUwODQzYTcyYzhlM2EgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9X
ZWJDb3JlL2NyeXB0by9tYWMvQ3J5cHRvS2V5UlNBTWFjLmNwcAorKysgYi9Tb3VyY2UvV2ViQ29y
ZS9jcnlwdG8vbWFjL0NyeXB0b0tleVJTQU1hYy5jcHAKQEAgLTM0Miw3ICszNDIsNyBAQCBFeGNl
cHRpb25PcjxWZWN0b3I8dWludDhfdD4+IENyeXB0b0tleVJTQTo6ZXhwb3J0U3BraSgpIGNvbnN0
CiAKICAgICAvLyBQZXIgaHR0cHM6Ly90b29scy5pZXRmLm9yZy9odG1sL3JmYzUyODAjc2VjdGlv
bi00LjEuIHN1YmplY3RQdWJsaWNLZXlJbmZvLgogICAgIFZlY3Rvcjx1aW50OF90PiByZXN1bHQ7
Ci0gICAgcmVzdWx0LnJlc2VydmVDYXBhY2l0eSh0b3RhbFNpemUgKyBieXRlc05lZWRlZEZvckVu
Y29kZWRMZW5ndGgodG90YWxTaXplKSArIDEpOworICAgIHJlc3VsdC5yZXNlcnZlSW5pdGlhbENh
cGFjaXR5KHRvdGFsU2l6ZSArIGJ5dGVzTmVlZGVkRm9yRW5jb2RlZExlbmd0aCh0b3RhbFNpemUp
ICsgMSk7CiAgICAgcmVzdWx0LmFwcGVuZChTZXF1ZW5jZU1hcmspOwogICAgIGFkZEVuY29kZWRB
U04xTGVuZ3RoKHJlc3VsdCwgdG90YWxTaXplKTsKICAgICByZXN1bHQuYXBwZW5kKFJTQU9JREhl
YWRlciwgc2l6ZW9mKFJTQU9JREhlYWRlcikpOwpAQCAtNDAxLDcgKzQwMSw3IEBAIEV4Y2VwdGlv
bk9yPFZlY3Rvcjx1aW50OF90Pj4gQ3J5cHRvS2V5UlNBOjpleHBvcnRQa2NzOCgpIGNvbnN0CiAK
ICAgICAvLyBQZXIgaHR0cHM6Ly90b29scy5pZXRmLm9yZy9odG1sL3JmYzUyMDgjc2VjdGlvbi01
LiBQcml2YXRlS2V5SW5mby4KICAgICBWZWN0b3I8dWludDhfdD4gcmVzdWx0OwotICAgIHJlc3Vs
dC5yZXNlcnZlQ2FwYWNpdHkodG90YWxTaXplICsgYnl0ZXNOZWVkZWRGb3JFbmNvZGVkTGVuZ3Ro
KHRvdGFsU2l6ZSkgKyAxKTsKKyAgICByZXN1bHQucmVzZXJ2ZUluaXRpYWxDYXBhY2l0eSh0b3Rh
bFNpemUgKyBieXRlc05lZWRlZEZvckVuY29kZWRMZW5ndGgodG90YWxTaXplKSArIDEpOwogICAg
IHJlc3VsdC5hcHBlbmQoU2VxdWVuY2VNYXJrKTsKICAgICBhZGRFbmNvZGVkQVNOMUxlbmd0aChy
ZXN1bHQsIHRvdGFsU2l6ZSk7CiAgICAgcmVzdWx0LmFwcGVuZChWZXJzaW9uLCBzaXplb2YoVmVy
c2lvbikpOwpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvY3NzL0NTU0Jhc2ljU2hhcGVzLmNw
cCBiL1NvdXJjZS9XZWJDb3JlL2Nzcy9DU1NCYXNpY1NoYXBlcy5jcHAKaW5kZXggMmNiYzFjZWZk
MjNlOGE5MDFmZWFlMGQyMGM5ZjZmNzVmMGZjYjUwMi4uZTI4NTUxZTdiMmY0NDc2MjE5NzFiYjBi
NGJmMjNhOTlmMmI1YzcyNSAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvY3NzL0NTU0Jhc2lj
U2hhcGVzLmNwcAorKysgYi9Tb3VyY2UvV2ViQ29yZS9jc3MvQ1NTQmFzaWNTaGFwZXMuY3BwCkBA
IC0yNjEsMTMgKzI2MSwxMCBAQCBzdGF0aWMgU3RyaW5nIGJ1aWxkUG9seWdvblN0cmluZyhjb25z
dCBXaW5kUnVsZSYgd2luZFJ1bGUsIGNvbnN0IFZlY3RvcjxTdHJpbmc+JgogCiBTdHJpbmcgQ1NT
QmFzaWNTaGFwZVBvbHlnb246OmNzc1RleHQoKSBjb25zdAogewotICAgIFZlY3RvcjxTdHJpbmc+
IHBvaW50czsKLSAgICBwb2ludHMucmVzZXJ2ZUluaXRpYWxDYXBhY2l0eShtX3ZhbHVlcy5zaXpl
KCkpOwotCi0gICAgZm9yIChhdXRvJiBzaGFwZVZhbHVlIDogbV92YWx1ZXMpCi0gICAgICAgIHBv
aW50cy51bmNoZWNrZWRBcHBlbmQoc2hhcGVWYWx1ZS0+Y3NzVGV4dCgpKTsKLQotICAgIHJldHVy
biBidWlsZFBvbHlnb25TdHJpbmcobV93aW5kUnVsZSwgcG9pbnRzKTsKKyAgICBhdXRvIHBvaW50
cyA9IG1fdmFsdWVzLm1hcChbXShhdXRvJiBzaGFwZVZhbHVlKSB7CisgICAgICAgIHJldHVybiBz
aGFwZVZhbHVlLT5jc3NUZXh0KCk7CisgICAgfSk7CisgICAgcmV0dXJuIGJ1aWxkUG9seWdvblN0
cmluZyhtX3dpbmRSdWxlLCBXVEZNb3ZlKHBvaW50cykpOwogfQogCiBib29sIENTU0Jhc2ljU2hh
cGVQb2x5Z29uOjplcXVhbHMoY29uc3QgQ1NTQmFzaWNTaGFwZSYgc2hhcGUpIGNvbnN0CmRpZmYg
LS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9jc3MvQ1NTQ29tcHV0ZWRTdHlsZURlY2xhcmF0aW9uLmNw
cCBiL1NvdXJjZS9XZWJDb3JlL2Nzcy9DU1NDb21wdXRlZFN0eWxlRGVjbGFyYXRpb24uY3BwCmlu
ZGV4IDZlOTg1YmJlMjRhNzU4ZTQxN2YyY2I2MTk1YjMzZWUyYzc3YmU0NTEuLmQyYzVjNzczYWQ2
YzJjNjA1YmRkYmY1YWI1ZjU2Y2QzM2EyZTMwYmQgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3Jl
L2Nzcy9DU1NDb21wdXRlZFN0eWxlRGVjbGFyYXRpb24uY3BwCisrKyBiL1NvdXJjZS9XZWJDb3Jl
L2Nzcy9DU1NDb21wdXRlZFN0eWxlRGVjbGFyYXRpb24uY3BwCkBAIC00Mzg0LDggKzQzODQsOSBA
QCBSZWY8TXV0YWJsZVN0eWxlUHJvcGVydGllcz4gQ29tcHV0ZWRTdHlsZUV4dHJhY3Rvcjo6Y29w
eVByb3BlcnRpZXNJblNldChjb25zdCBDUwogICAgIGxpc3QucmVzZXJ2ZUluaXRpYWxDYXBhY2l0
eShsZW5ndGgpOwogICAgIGZvciAodW5zaWduZWQgaSA9IDA7IGkgPCBsZW5ndGg7ICsraSkgewog
ICAgICAgICBpZiAoYXV0byB2YWx1ZSA9IHByb3BlcnR5VmFsdWUoc2V0W2ldKSkKLSAgICAgICAg
ICAgIGxpc3QuYXBwZW5kKENTU1Byb3BlcnR5KHNldFtpXSwgV1RGTW92ZSh2YWx1ZSksIGZhbHNl
KSk7CisgICAgICAgICAgICBsaXN0LnVuY2hlY2tlZEFwcGVuZChDU1NQcm9wZXJ0eShzZXRbaV0s
IFdURk1vdmUodmFsdWUpLCBmYWxzZSkpOwogICAgIH0KKyAgICBsaXN0LnNocmlua1RvRml0KCk7
CiAgICAgcmV0dXJuIE11dGFibGVTdHlsZVByb3BlcnRpZXM6OmNyZWF0ZShXVEZNb3ZlKGxpc3Qp
KTsKIH0KIApAQCAtNDM5OCw2ICs0Mzk5LDcgQEAgUmVmPE11dGFibGVTdHlsZVByb3BlcnRpZXM+
IENvbXB1dGVkU3R5bGVFeHRyYWN0b3I6OmNvcHlQcm9wZXJ0aWVzKCkKICAgICAgICAgaWYgKGF1
dG8gdmFsdWUgPSBwcm9wZXJ0eVZhbHVlKHByb3BlcnR5SUQpKQogICAgICAgICAgICAgbGlzdC5h
cHBlbmQoQ1NTUHJvcGVydHkocHJvcGVydHlJRCwgV1RGTW92ZSh2YWx1ZSkpKTsKICAgICB9Cisg
ICAgbGlzdC5zaHJpbmtUb0ZpdCgpOwogICAgIHJldHVybiBNdXRhYmxlU3R5bGVQcm9wZXJ0aWVz
OjpjcmVhdGUoV1RGTW92ZShsaXN0KSk7CiB9CiAKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3Jl
L2Nzcy9DU1NGb250RmFjZS5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9jc3MvQ1NTRm9udEZhY2UuY3Bw
CmluZGV4IGViM2JjMGIzMjI0ZDc1YTYxMjNkYzJiYWQ3OTY4M2M3N2I5YTg1NjkuLjQzYTVmMTZk
ZDcyYzU5Y2VhYjcwM2Q1NGQ3ZTIyZTI3MzMyZmMxY2QgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJD
b3JlL2Nzcy9DU1NGb250RmFjZS5jcHAKKysrIGIvU291cmNlL1dlYkNvcmUvY3NzL0NTU0ZvbnRG
YWNlLmNwcApAQCAtNTQsMTMgKzU0LDggQEAgREVGSU5FX0FMTE9DQVRPUl9XSVRIX0hFQVBfSURF
TlRJRklFUihDU1NGb250RmFjZSk7CiAKIHRlbXBsYXRlPHR5cGVuYW1lIFQ+IHZvaWQgaXRlcmF0
ZUNsaWVudHMoSGFzaFNldDxDU1NGb250RmFjZTo6Q2xpZW50Kj4mIGNsaWVudHMsIFQgY2FsbGJh
Y2spCiB7Ci0gICAgVmVjdG9yPFJlZjxDU1NGb250RmFjZTo6Q2xpZW50Pj4gY2xpZW50c0NvcHk7
Ci0gICAgY2xpZW50c0NvcHkucmVzZXJ2ZUluaXRpYWxDYXBhY2l0eShjbGllbnRzLnNpemUoKSk7
Ci0gICAgZm9yIChhdXRvKiBjbGllbnQgOiBjbGllbnRzKQotICAgICAgICBjbGllbnRzQ29weS51
bmNoZWNrZWRBcHBlbmQoKmNsaWVudCk7Ci0KLSAgICBmb3IgKGF1dG8mIGNsaWVudCA6IGNsaWVu
dHNDb3B5KQotICAgICAgICBjYWxsYmFjayhjbGllbnQpOworICAgIGZvciAoYXV0byYgY2xpZW50
IDogY29weVRvVmVjdG9yT2Y8UmVmUHRyPENTU0ZvbnRGYWNlOjpDbGllbnQ+PihjbGllbnRzKSkK
KyAgICAgICAgY2FsbGJhY2soKmNsaWVudCk7CiB9CiAKIHZvaWQgQ1NTRm9udEZhY2U6OmFwcGVu
ZFNvdXJjZXMoQ1NTRm9udEZhY2UmIGZvbnRGYWNlLCBDU1NWYWx1ZUxpc3QmIHNyY0xpc3QsIFNj
cmlwdEV4ZWN1dGlvbkNvbnRleHQqIGNvbnRleHQsIGJvb2wgaXNJbml0aWF0aW5nRWxlbWVudElu
VXNlckFnZW50U2hhZG93VHJlZSkKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL2Nzcy9DU1NG
b250RmFjZVNldC5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9jc3MvQ1NTRm9udEZhY2VTZXQuY3BwCmlu
ZGV4IDYyZWVjYjVhNWQyNDFkY2JlOGIyNDkzNWJiNmMyZjMyODk0OTE0YWUuLmViODg5OTM5Njhi
MzBjMDA4NzdkYmViNjBjODRhZDRmMjUyNmQ4ZjAgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3Jl
L2Nzcy9DU1NGb250RmFjZVNldC5jcHAKKysrIGIvU291cmNlL1dlYkNvcmUvY3NzL0NTU0ZvbnRG
YWNlU2V0LmNwcApAQCAtNDI4LDExICs0MjgsOSBAQCBFeGNlcHRpb25PcjxWZWN0b3I8c3RkOjpy
ZWZlcmVuY2Vfd3JhcHBlcjxDU1NGb250RmFjZT4+PiBDU1NGb250RmFjZVNldDo6bWF0Y2hpbgog
ICAgICAgICB9CiAgICAgfQogCi0gICAgVmVjdG9yPHN0ZDo6cmVmZXJlbmNlX3dyYXBwZXI8Q1NT
Rm9udEZhY2U+PiByZXN1bHQ7Ci0gICAgcmVzdWx0LnJlc2VydmVJbml0aWFsQ2FwYWNpdHkocmVz
dWx0Q29uc3RpdHVlbnRzLnNpemUoKSk7Ci0gICAgZm9yIChhdXRvKiBjb25zdGl0dWVudCA6IHJl
c3VsdENvbnN0aXR1ZW50cykKLSAgICAgICAgcmVzdWx0LnVuY2hlY2tlZEFwcGVuZCgqY29uc3Rp
dHVlbnQpOwotICAgIHJldHVybiByZXN1bHQ7CisgICAgcmV0dXJuIFdURjo6bWFwKHJlc3VsdENv
bnN0aXR1ZW50cywgW10oYXV0byogY29uc3RpdHVlbnQpIC0+IHN0ZDo6cmVmZXJlbmNlX3dyYXBw
ZXI8Q1NTRm9udEZhY2U+IHsKKyAgICAgICAgcmV0dXJuICpjb25zdGl0dWVudDsKKyAgICB9KTsK
IH0KIAogRXhjZXB0aW9uT3I8Ym9vbD4gQ1NTRm9udEZhY2VTZXQ6OmNoZWNrKGNvbnN0IFN0cmlu
ZyYgZm9udCwgY29uc3QgU3RyaW5nJiB0ZXh0KQpAQCAtNDg2LDEyICs0ODQsOSBAQCBDU1NTZWdt
ZW50ZWRGb250RmFjZSogQ1NTRm9udEZhY2VTZXQ6OmZvbnRGYWNlKEZvbnRTZWxlY3Rpb25SZXF1
ZXN0IHJlcXVlc3QsIGNvbgogICAgIH0KIAogICAgIGlmICghY2FuZGlkYXRlRm9udEZhY2VzLmlz
RW1wdHkoKSkgewotICAgICAgICBWZWN0b3I8Rm9udFNlbGVjdGlvbkNhcGFiaWxpdGllcz4gY2Fw
YWJpbGl0aWVzOwotICAgICAgICBjYXBhYmlsaXRpZXMucmVzZXJ2ZUluaXRpYWxDYXBhY2l0eShj
YW5kaWRhdGVGb250RmFjZXMuc2l6ZSgpKTsKLSAgICAgICAgZm9yIChhdXRvJiBmYWNlIDogY2Fu
ZGlkYXRlRm9udEZhY2VzKSB7Ci0gICAgICAgICAgICBhdXRvIGZvbnRTZWxlY3Rpb25DYXBhYmls
aXRpZXMgPSBmYWNlLmdldCgpLmZvbnRTZWxlY3Rpb25DYXBhYmlsaXRpZXMoKTsKLSAgICAgICAg
ICAgIGNhcGFiaWxpdGllcy51bmNoZWNrZWRBcHBlbmQoKmZvbnRTZWxlY3Rpb25DYXBhYmlsaXRp
ZXMpOwotICAgICAgICB9CisgICAgICAgIGF1dG8gY2FwYWJpbGl0aWVzID0gY2FuZGlkYXRlRm9u
dEZhY2VzLm1hcChbXShhdXRvJiBmYWNlKSB7CisgICAgICAgICAgICByZXR1cm4gKmZhY2UuZ2V0
KCkuZm9udFNlbGVjdGlvbkNhcGFiaWxpdGllcygpOworICAgICAgICB9KTsKICAgICAgICAgRm9u
dFNlbGVjdGlvbkFsZ29yaXRobSBmb250U2VsZWN0aW9uQWxnb3JpdGhtKHJlcXVlc3QsIGNhcGFi
aWxpdGllcyk7CiAgICAgICAgIHN0ZDo6c3RhYmxlX3NvcnQoY2FuZGlkYXRlRm9udEZhY2VzLmJl
Z2luKCksIGNhbmRpZGF0ZUZvbnRGYWNlcy5lbmQoKSwgWyZmb250U2VsZWN0aW9uQWxnb3JpdGht
XShjb25zdCBDU1NGb250RmFjZSYgZmlyc3QsIGNvbnN0IENTU0ZvbnRGYWNlJiBzZWNvbmQpIHsK
ICAgICAgICAgICAgIGF1dG8gZmlyc3RDYXBhYmlsaXRpZXMgPSBmaXJzdC5mb250U2VsZWN0aW9u
Q2FwYWJpbGl0aWVzKCk7CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9jc3MvQ1NTS2V5ZnJh
bWVzUnVsZS5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9jc3MvQ1NTS2V5ZnJhbWVzUnVsZS5jcHAKaW5k
ZXggMzY1MWVlYjNjOGU1OGE2ZGZiZmZmYTkxZTJlMGM5NDM3NWU1NmI0NS4uYTE2ZTZjY2RiNzVl
ZmY4Y2FlNjk3Mzg4NWUzYWExNGFiODU1NTQ3MCAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUv
Y3NzL0NTU0tleWZyYW1lc1J1bGUuY3BwCisrKyBiL1NvdXJjZS9XZWJDb3JlL2Nzcy9DU1NLZXlm
cmFtZXNSdWxlLmNwcApAQCAtNTIsMTEgKzUyLDkgQEAgU3R5bGVSdWxlS2V5ZnJhbWVzOjpTdHls
ZVJ1bGVLZXlmcmFtZXMoY29uc3QgQXRvbVN0cmluZyYgbmFtZSwgc3RkOjp1bmlxdWVfcHRyPEQK
IAogU3R5bGVSdWxlS2V5ZnJhbWVzOjpTdHlsZVJ1bGVLZXlmcmFtZXMoY29uc3QgU3R5bGVSdWxl
S2V5ZnJhbWVzJiBvKQogICAgIDogU3R5bGVSdWxlQmFzZShvKQorICAgICwgbV9rZXlmcmFtZXMo
by5rZXlmcmFtZXMoKSkKICAgICAsIG1fbmFtZShvLm1fbmFtZSkKIHsKLSAgICBtX2tleWZyYW1l
cy5yZXNlcnZlSW5pdGlhbENhcGFjaXR5KG8ua2V5ZnJhbWVzKCkuc2l6ZSgpKTsKLSAgICBmb3Ig
KGF1dG8mIGtleWZyYW1lIDogby5rZXlmcmFtZXMoKSkKLSAgICAgICAgbV9rZXlmcmFtZXMudW5j
aGVja2VkQXBwZW5kKGtleWZyYW1lLmNvcHlSZWYoKSk7CiB9CiAKIFJlZjxTdHlsZVJ1bGVLZXlm
cmFtZXM+IFN0eWxlUnVsZUtleWZyYW1lczo6Y3JlYXRlKGNvbnN0IEF0b21TdHJpbmcmIG5hbWUp
CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9jc3MvU3R5bGVQcm9wZXJ0aWVzLmNwcCBiL1Nv
dXJjZS9XZWJDb3JlL2Nzcy9TdHlsZVByb3BlcnRpZXMuY3BwCmluZGV4IGVlZjUxNTZiOTZhYTRi
NTk4YTFiZjJkNTNlNTliOGQ4NDgzMTQ1ZDkuLmFlMzhiOGUwODVhMjRhYWFlMDRlN2NiNWRmMjQz
Zjg3MTE1Y2IwZjcgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL2Nzcy9TdHlsZVByb3BlcnRp
ZXMuY3BwCisrKyBiL1NvdXJjZS9XZWJDb3JlL2Nzcy9TdHlsZVByb3BlcnRpZXMuY3BwCkBAIC0x
NzI1LDYgKzE3MjUsNyBAQCBSZWY8TXV0YWJsZVN0eWxlUHJvcGVydGllcz4gU3R5bGVQcm9wZXJ0
aWVzOjpjb3B5UHJvcGVydGllc0luU2V0KGNvbnN0IENTU1Byb3BlcgogICAgICAgICBpZiAoYXV0
byB2YWx1ZSA9IGdldFByb3BlcnR5Q1NTVmFsdWUoc2V0W2ldKSkKICAgICAgICAgICAgIGxpc3Qu
dW5jaGVja2VkQXBwZW5kKENTU1Byb3BlcnR5KHNldFtpXSwgV1RGTW92ZSh2YWx1ZSksIGZhbHNl
KSk7CiAgICAgfQorICAgIGxpc3Quc2hyaW5rVG9GaXQoKTsKICAgICByZXR1cm4gTXV0YWJsZVN0
eWxlUHJvcGVydGllczo6Y3JlYXRlKFdURk1vdmUobGlzdCkpOwogfQogCkBAIC0xODA1LDcgKzE4
MDYsNiBAQCBEZWZlcnJlZFN0eWxlUHJvcGVydGllczo6RGVmZXJyZWRTdHlsZVByb3BlcnRpZXMo
Y29uc3QgQ1NTUGFyc2VyVG9rZW5SYW5nZSYgcmFuZwogICAgICwgbV9wYXJzZXIocGFyc2VyKQog
ewogICAgIHNpemVfdCBsZW5ndGggPSByYW5nZS5lbmQoKSAtIHJhbmdlLmJlZ2luKCk7Ci0gICAg
bV90b2tlbnMucmVzZXJ2ZUNhcGFjaXR5KGxlbmd0aCk7CiAgICAgbV90b2tlbnMuYXBwZW5kKHJh
bmdlLmJlZ2luKCksIGxlbmd0aCk7CiB9CiAgICAgCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29y
ZS9jc3MvU3R5bGVSdWxlLmNwcCBiL1NvdXJjZS9XZWJDb3JlL2Nzcy9TdHlsZVJ1bGUuY3BwCmlu
ZGV4IDYzZDI0ZWQ3YmY0NGFlNmU3OTVlOWY2OWYwNGU0ZjY5NmNhYjY1MjkuLjFkOWVlN2QwMDU0
Mzg3NTU0OGFkMzJlYzU3NGE4YjAwZGJlOTU5YjcgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3Jl
L2Nzcy9TdHlsZVJ1bGUuY3BwCisrKyBiL1NvdXJjZS9XZWJDb3JlL2Nzcy9TdHlsZVJ1bGUuY3Bw
CkBAIC0zNjksNyArMzY5LDYgQEAgRGVmZXJyZWRTdHlsZUdyb3VwUnVsZUxpc3Q6OkRlZmVycmVk
U3R5bGVHcm91cFJ1bGVMaXN0KGNvbnN0IENTU1BhcnNlclRva2VuUmFuZ2UKICAgICA6IG1fcGFy
c2VyKHBhcnNlcikKIHsKICAgICBzaXplX3QgbGVuZ3RoID0gcmFuZ2UuZW5kKCkgLSByYW5nZS5i
ZWdpbigpOwotICAgIG1fdG9rZW5zLnJlc2VydmVDYXBhY2l0eShsZW5ndGgpOwogICAgIG1fdG9r
ZW5zLmFwcGVuZChyYW5nZS5iZWdpbigpLCBsZW5ndGgpOwogfQogCkBAIC0zOTksMTAgKzM5OCw4
IEBAIFN0eWxlUnVsZUdyb3VwOjpTdHlsZVJ1bGVHcm91cChTdHlsZVJ1bGVUeXBlIHR5cGUsIHN0
ZDo6dW5pcXVlX3B0cjxEZWZlcnJlZFN0eWxlCiAKIFN0eWxlUnVsZUdyb3VwOjpTdHlsZVJ1bGVH
cm91cChjb25zdCBTdHlsZVJ1bGVHcm91cCYgbykKICAgICA6IFN0eWxlUnVsZUJhc2UobykKKyAg
ICAsIG1fY2hpbGRSdWxlcyhvLmNoaWxkUnVsZXMoKS5tYXAoW10oYXV0byYgcnVsZSkgLT4gUmVm
UHRyPFN0eWxlUnVsZUJhc2U+IHsgcmV0dXJuIHJ1bGUtPmNvcHkoKTsgfSkpCiB7Ci0gICAgbV9j
aGlsZFJ1bGVzLnJlc2VydmVJbml0aWFsQ2FwYWNpdHkoby5jaGlsZFJ1bGVzKCkuc2l6ZSgpKTsK
LSAgICBmb3IgKGF1dG8mIGNoaWxkUnVsZSA6IG8uY2hpbGRSdWxlcygpKQotICAgICAgICBtX2No
aWxkUnVsZXMudW5jaGVja2VkQXBwZW5kKGNoaWxkUnVsZS0+Y29weSgpKTsKIH0KIAogY29uc3Qg
VmVjdG9yPFJlZlB0cjxTdHlsZVJ1bGVCYXNlPj4mIFN0eWxlUnVsZUdyb3VwOjpjaGlsZFJ1bGVz
KCkgY29uc3QKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL2Nzcy9jYWxjL0NTU0NhbGNPcGVy
YXRpb25Ob2RlLmggYi9Tb3VyY2UvV2ViQ29yZS9jc3MvY2FsYy9DU1NDYWxjT3BlcmF0aW9uTm9k
ZS5oCmluZGV4IDJjNzE2Y2FlODY0N2UyZWZkMzRmNTdjZmM4ZjczOTQ5ZDIyNTViNmYuLjE0OTRl
NDlmYTk4MWI3MDY4OTc5Y2IzZTg5MzJhMTJjNDQxODVmM2EgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9X
ZWJDb3JlL2Nzcy9jYWxjL0NTU0NhbGNPcGVyYXRpb25Ob2RlLmgKKysrIGIvU291cmNlL1dlYkNv
cmUvY3NzL2NhbGMvQ1NTQ2FsY09wZXJhdGlvbk5vZGUuaApAQCAtODUsMTAgKzg1LDggQEAgcHJp
dmF0ZToKICAgICBDU1NDYWxjT3BlcmF0aW9uTm9kZShDYWxjdWxhdGlvbkNhdGVnb3J5IGNhdGVn
b3J5LCBDYWxjT3BlcmF0b3Igb3AsIFJlZjxDU1NDYWxjRXhwcmVzc2lvbk5vZGU+JiYgbGVmdFNp
ZGUsIFJlZjxDU1NDYWxjRXhwcmVzc2lvbk5vZGU+JiYgcmlnaHRTaWRlKQogICAgICAgICA6IENT
U0NhbGNFeHByZXNzaW9uTm9kZShjYXRlZ29yeSkKICAgICAgICAgLCBtX29wZXJhdG9yKG9wKQor
ICAgICAgICAsIG1fY2hpbGRyZW4oeyBXVEZNb3ZlKGxlZnRTaWRlKSwgV1RGTW92ZShyaWdodFNp
ZGUpIH0pCiAgICAgewotICAgICAgICBtX2NoaWxkcmVuLnJlc2VydmVJbml0aWFsQ2FwYWNpdHko
Mik7Ci0gICAgICAgIG1fY2hpbGRyZW4udW5jaGVja2VkQXBwZW5kKFdURk1vdmUobGVmdFNpZGUp
KTsKLSAgICAgICAgbV9jaGlsZHJlbi51bmNoZWNrZWRBcHBlbmQoV1RGTW92ZShyaWdodFNpZGUp
KTsKICAgICB9CiAKICAgICBDU1NDYWxjT3BlcmF0aW9uTm9kZShDYWxjdWxhdGlvbkNhdGVnb3J5
IGNhdGVnb3J5LCBDYWxjT3BlcmF0b3Igb3AsIFZlY3RvcjxSZWY8Q1NTQ2FsY0V4cHJlc3Npb25O
b2RlPj4mJiBjaGlsZHJlbikKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL2Nzcy9jYWxjL0NT
U0NhbGNWYWx1ZS5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9jc3MvY2FsYy9DU1NDYWxjVmFsdWUuY3Bw
CmluZGV4IDA1ZDkyZGZiN2NhYjlmZDU5NjY3NDk4NjhmYjY4MjgwYjA5NzVlZTYuLjQzNTgyYjRk
MTEzMDI5NTczZjNiYWYwMTYyYTNjZGY2M2M2NzlmNDcgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJD
b3JlL2Nzcy9jYWxjL0NTU0NhbGNWYWx1ZS5jcHAKKysrIGIvU291cmNlL1dlYkNvcmUvY3NzL2Nh
bGMvQ1NTQ2FsY1ZhbHVlLmNwcApAQCAtNjksMTEgKzY5LDEwIEBAIHN0YXRpYyBWZWN0b3I8UmVm
PENTU0NhbGNFeHByZXNzaW9uTm9kZT4+IGNyZWF0ZUNTUyhjb25zdCBWZWN0b3I8c3RkOjp1bmlx
dWVfcHRyCiAgICAgVmVjdG9yPFJlZjxDU1NDYWxjRXhwcmVzc2lvbk5vZGU+PiB2YWx1ZXM7CiAg
ICAgdmFsdWVzLnJlc2VydmVJbml0aWFsQ2FwYWNpdHkobm9kZXMuc2l6ZSgpKTsKICAgICBmb3Ig
KGF1dG8mIG5vZGUgOiBub2RlcykgewotICAgICAgICBhdXRvIGNzc05vZGUgPSBjcmVhdGVDU1Mo
Km5vZGUsIHN0eWxlKTsKLSAgICAgICAgaWYgKCFjc3NOb2RlKQotICAgICAgICAgICAgY29udGlu
dWU7Ci0gICAgICAgIHZhbHVlcy51bmNoZWNrZWRBcHBlbmQoY3NzTm9kZS5yZWxlYXNlTm9uTnVs
bCgpKTsKKyAgICAgICAgaWYgKGF1dG8gY3NzTm9kZSA9IGNyZWF0ZUNTUygqbm9kZSwgc3R5bGUp
KQorICAgICAgICAgICAgdmFsdWVzLnVuY2hlY2tlZEFwcGVuZChjc3NOb2RlLnJlbGVhc2VOb25O
dWxsKCkpOwogICAgIH0KKyAgICB2YWx1ZXMuc2hyaW5rVG9GaXQoKTsKICAgICByZXR1cm4gdmFs
dWVzOwogfQogCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9kaXNwbGF5L2Nzcy9EaXNwbGF5
Qm94RGVjb3JhdGlvblBhaW50ZXIuY3BwIGIvU291cmNlL1dlYkNvcmUvZGlzcGxheS9jc3MvRGlz
cGxheUJveERlY29yYXRpb25QYWludGVyLmNwcAppbmRleCBhNWE2YjRiMzJkY2NmNzFhMWZhNTM3
ZmVkYzJlOTFlNDAwZTIzOGMyLi44NTZhM2RlNTA0ZGVjMGJiZmE5MGFjMTdkZTM3ZjUxNWUxNGQ5
MjA0IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9kaXNwbGF5L2Nzcy9EaXNwbGF5Qm94RGVj
b3JhdGlvblBhaW50ZXIuY3BwCisrKyBiL1NvdXJjZS9XZWJDb3JlL2Rpc3BsYXkvY3NzL0Rpc3Bs
YXlCb3hEZWNvcmF0aW9uUGFpbnRlci5jcHAKQEAgLTQ4NywxMyArNDg3LDkgQEAgdm9pZCBCb3Jk
ZXJQYWludGVyOjpjbGlwQm9yZGVyU2lkZVBvbHlnb24oUGFpbnRpbmdDb250ZXh0JiBwYWludGlu
Z0NvbnRleHQsIGNvbnMKICAgICAvLyAgICAgICAgIDAtLS0tLS0tLS0tLS0tLS0tMwogICAgIC8v
CiAgICAgVmVjdG9yPEZsb2F0UG9pbnQ+IHF1YWQ7Ci0gICAgcXVhZC5yZXNlcnZlSW5pdGlhbENh
cGFjaXR5KDQpOwogICAgIHN3aXRjaCAoc2lkZSkgewogICAgIGNhc2UgQm94U2lkZTo6VG9wOgot
ICAgICAgICBxdWFkLnVuY2hlY2tlZEFwcGVuZChvdXRlclJlY3QubWluWE1pbllDb3JuZXIoKSk7
Ci0gICAgICAgIHF1YWQudW5jaGVja2VkQXBwZW5kKGlubmVyUmVjdC5taW5YTWluWUNvcm5lcigp
KTsKLSAgICAgICAgcXVhZC51bmNoZWNrZWRBcHBlbmQoaW5uZXJSZWN0Lm1heFhNaW5ZQ29ybmVy
KCkpOwotICAgICAgICBxdWFkLnVuY2hlY2tlZEFwcGVuZChvdXRlclJlY3QubWF4WE1pbllDb3Ju
ZXIoKSk7CisgICAgICAgIHF1YWQgPSB7IG91dGVyUmVjdC5taW5YTWluWUNvcm5lcigpLCBpbm5l
clJlY3QubWluWE1pbllDb3JuZXIoKSwgaW5uZXJSZWN0Lm1heFhNaW5ZQ29ybmVyKCksIG91dGVy
UmVjdC5tYXhYTWluWUNvcm5lcigpIH07CiAKICAgICAgICAgaWYgKCFpbm5lckJvcmRlci5yYWRp
aSgpLnRvcExlZnQoKS5pc1plcm8oKSkKICAgICAgICAgICAgIGZpbmRJbnRlcnNlY3Rpb24ob3V0
ZXJSZWN0Lm1pblhNaW5ZQ29ybmVyKCksIGlubmVyUmVjdC5taW5YTWluWUNvcm5lcigpLCBpbm5l
clJlY3QubWluWE1heFlDb3JuZXIoKSwgaW5uZXJSZWN0Lm1heFhNaW5ZQ29ybmVyKCksIHF1YWRb
MV0pOwpAQCAtNTAzLDEwICs0OTksNyBAQCB2b2lkIEJvcmRlclBhaW50ZXI6OmNsaXBCb3JkZXJT
aWRlUG9seWdvbihQYWludGluZ0NvbnRleHQmIHBhaW50aW5nQ29udGV4dCwgY29ucwogICAgICAg
ICBicmVhazsKIAogICAgIGNhc2UgQm94U2lkZTo6TGVmdDoKLSAgICAgICAgcXVhZC51bmNoZWNr
ZWRBcHBlbmQob3V0ZXJSZWN0Lm1pblhNaW5ZQ29ybmVyKCkpOwotICAgICAgICBxdWFkLnVuY2hl
Y2tlZEFwcGVuZChpbm5lclJlY3QubWluWE1pbllDb3JuZXIoKSk7Ci0gICAgICAgIHF1YWQudW5j
aGVja2VkQXBwZW5kKGlubmVyUmVjdC5taW5YTWF4WUNvcm5lcigpKTsKLSAgICAgICAgcXVhZC51
bmNoZWNrZWRBcHBlbmQob3V0ZXJSZWN0Lm1pblhNYXhZQ29ybmVyKCkpOworICAgICAgICBxdWFk
ID0geyBvdXRlclJlY3QubWluWE1pbllDb3JuZXIoKSwgaW5uZXJSZWN0Lm1pblhNaW5ZQ29ybmVy
KCksIGlubmVyUmVjdC5taW5YTWF4WUNvcm5lcigpLCBvdXRlclJlY3QubWluWE1heFlDb3JuZXIo
KSB9OwogCiAgICAgICAgIGlmICghaW5uZXJCb3JkZXIucmFkaWkoKS50b3BMZWZ0KCkuaXNaZXJv
KCkpCiAgICAgICAgICAgICBmaW5kSW50ZXJzZWN0aW9uKG91dGVyUmVjdC5taW5YTWluWUNvcm5l
cigpLCBpbm5lclJlY3QubWluWE1pbllDb3JuZXIoKSwgaW5uZXJSZWN0Lm1pblhNYXhZQ29ybmVy
KCksIGlubmVyUmVjdC5tYXhYTWluWUNvcm5lcigpLCBxdWFkWzFdKTsKQEAgLTUxNiwxMCArNTA5
LDcgQEAgdm9pZCBCb3JkZXJQYWludGVyOjpjbGlwQm9yZGVyU2lkZVBvbHlnb24oUGFpbnRpbmdD
b250ZXh0JiBwYWludGluZ0NvbnRleHQsIGNvbnMKICAgICAgICAgYnJlYWs7CiAKICAgICBjYXNl
IEJveFNpZGU6OkJvdHRvbToKLSAgICAgICAgcXVhZC51bmNoZWNrZWRBcHBlbmQob3V0ZXJSZWN0
Lm1pblhNYXhZQ29ybmVyKCkpOwotICAgICAgICBxdWFkLnVuY2hlY2tlZEFwcGVuZChpbm5lclJl
Y3QubWluWE1heFlDb3JuZXIoKSk7Ci0gICAgICAgIHF1YWQudW5jaGVja2VkQXBwZW5kKGlubmVy
UmVjdC5tYXhYTWF4WUNvcm5lcigpKTsKLSAgICAgICAgcXVhZC51bmNoZWNrZWRBcHBlbmQob3V0
ZXJSZWN0Lm1heFhNYXhZQ29ybmVyKCkpOworICAgICAgICBxdWFkID0geyBvdXRlclJlY3QubWlu
WE1heFlDb3JuZXIoKSwgaW5uZXJSZWN0Lm1pblhNYXhZQ29ybmVyKCksIGlubmVyUmVjdC5tYXhY
TWF4WUNvcm5lcigpLCBvdXRlclJlY3QubWF4WE1heFlDb3JuZXIoKSB9OwogCiAgICAgICAgIGlm
ICghaW5uZXJCb3JkZXIucmFkaWkoKS5ib3R0b21MZWZ0KCkuaXNaZXJvKCkpCiAgICAgICAgICAg
ICBmaW5kSW50ZXJzZWN0aW9uKG91dGVyUmVjdC5taW5YTWF4WUNvcm5lcigpLCBpbm5lclJlY3Qu
bWluWE1heFlDb3JuZXIoKSwgaW5uZXJSZWN0Lm1pblhNaW5ZQ29ybmVyKCksIGlubmVyUmVjdC5t
YXhYTWF4WUNvcm5lcigpLCBxdWFkWzFdKTsKQEAgLTUyOSwxMCArNTE5LDcgQEAgdm9pZCBCb3Jk
ZXJQYWludGVyOjpjbGlwQm9yZGVyU2lkZVBvbHlnb24oUGFpbnRpbmdDb250ZXh0JiBwYWludGlu
Z0NvbnRleHQsIGNvbnMKICAgICAgICAgYnJlYWs7CiAKICAgICBjYXNlIEJveFNpZGU6OlJpZ2h0
OgotICAgICAgICBxdWFkLnVuY2hlY2tlZEFwcGVuZChvdXRlclJlY3QubWF4WE1pbllDb3JuZXIo
KSk7Ci0gICAgICAgIHF1YWQudW5jaGVja2VkQXBwZW5kKGlubmVyUmVjdC5tYXhYTWluWUNvcm5l
cigpKTsKLSAgICAgICAgcXVhZC51bmNoZWNrZWRBcHBlbmQoaW5uZXJSZWN0Lm1heFhNYXhZQ29y
bmVyKCkpOwotICAgICAgICBxdWFkLnVuY2hlY2tlZEFwcGVuZChvdXRlclJlY3QubWF4WE1heFlD
b3JuZXIoKSk7CisgICAgICAgIHF1YWQgPSB7IG91dGVyUmVjdC5tYXhYTWluWUNvcm5lcigpLCBp
bm5lclJlY3QubWF4WE1pbllDb3JuZXIoKSwgaW5uZXJSZWN0Lm1heFhNYXhZQ29ybmVyKCksIG91
dGVyUmVjdC5tYXhYTWF4WUNvcm5lcigpIH07CiAKICAgICAgICAgaWYgKCFpbm5lckJvcmRlci5y
YWRpaSgpLnRvcFJpZ2h0KCkuaXNaZXJvKCkpCiAgICAgICAgICAgICBmaW5kSW50ZXJzZWN0aW9u
KG91dGVyUmVjdC5tYXhYTWluWUNvcm5lcigpLCBpbm5lclJlY3QubWF4WE1pbllDb3JuZXIoKSwg
aW5uZXJSZWN0Lm1pblhNaW5ZQ29ybmVyKCksIGlubmVyUmVjdC5tYXhYTWF4WUNvcm5lcigpLCBx
dWFkWzFdKTsKQEAgLTc5NiwzMSArNzgzLDM4IEBAIHZvaWQgQm9yZGVyUGFpbnRlcjo6ZHJhd0xp
bmVGb3JCb3hTaWRlKFBhaW50aW5nQ29udGV4dCYgcGFpbnRpbmdDb250ZXh0LCBjb25zdCBGCiAg
ICAgICAgIHkyID0gcm91bmRUb0RldmljZVBpeGVsKHkyLCBkZXZpY2VTY2FsZUZhY3Rvcik7CiAK
ICAgICAgICAgVmVjdG9yPEZsb2F0UG9pbnQ+IHF1YWQ7Ci0gICAgICAgIHF1YWQucmVzZXJ2ZUlu
aXRpYWxDYXBhY2l0eSg0KTsKICAgICAgICAgc3dpdGNoIChzaWRlKSB7CiAgICAgICAgIGNhc2Ug
Qm94U2lkZTo6VG9wOgotICAgICAgICAgICAgcXVhZC51bmNoZWNrZWRBcHBlbmQoeyB4MSArIHN0
ZDo6bWF4PGZsb2F0PigtYWRqYWNlbnRXaWR0aDEsIDApLCB5MSB9KTsKLSAgICAgICAgICAgIHF1
YWQudW5jaGVja2VkQXBwZW5kKHsgeDEgKyBzdGQ6Om1heDxmbG9hdD4oIGFkamFjZW50V2lkdGgx
LCAwKSwgeTIgfSk7Ci0gICAgICAgICAgICBxdWFkLnVuY2hlY2tlZEFwcGVuZCh7IHgyIC0gc3Rk
OjptYXg8ZmxvYXQ+KCBhZGphY2VudFdpZHRoMiwgMCksIHkyIH0pOwotICAgICAgICAgICAgcXVh
ZC51bmNoZWNrZWRBcHBlbmQoeyB4MiAtIHN0ZDo6bWF4PGZsb2F0PigtYWRqYWNlbnRXaWR0aDIs
IDApLCB5MSB9KTsKKyAgICAgICAgICAgIHF1YWQgPSB7CisgICAgICAgICAgICAgICAgeyB4MSAr
IHN0ZDo6bWF4PGZsb2F0PigtYWRqYWNlbnRXaWR0aDEsIDApLCB5MSB9LAorICAgICAgICAgICAg
ICAgIHsgeDEgKyBzdGQ6Om1heDxmbG9hdD4oYWRqYWNlbnRXaWR0aDEsIDApLCB5MiB9LAorICAg
ICAgICAgICAgICAgIHsgeDIgLSBzdGQ6Om1heDxmbG9hdD4oYWRqYWNlbnRXaWR0aDIsIDApLCB5
MiB9LAorICAgICAgICAgICAgICAgIHsgeDIgLSBzdGQ6Om1heDxmbG9hdD4oLWFkamFjZW50V2lk
dGgyLCAwKSwgeTEgfQorICAgICAgICAgICAgfTsKICAgICAgICAgICAgIGJyZWFrOwogICAgICAg
ICBjYXNlIEJveFNpZGU6OkJvdHRvbToKLSAgICAgICAgICAgIHF1YWQudW5jaGVja2VkQXBwZW5k
KHsgeDEgKyBzdGQ6Om1heDxmbG9hdD4oIGFkamFjZW50V2lkdGgxLCAwKSwgeTEgfSk7Ci0gICAg
ICAgICAgICBxdWFkLnVuY2hlY2tlZEFwcGVuZCh7IHgxICsgc3RkOjptYXg8ZmxvYXQ+KC1hZGph
Y2VudFdpZHRoMSwgMCksIHkyIH0pOwotICAgICAgICAgICAgcXVhZC51bmNoZWNrZWRBcHBlbmQo
eyB4MiAtIHN0ZDo6bWF4PGZsb2F0PigtYWRqYWNlbnRXaWR0aDIsIDApLCB5MiB9KTsKLSAgICAg
ICAgICAgIHF1YWQudW5jaGVja2VkQXBwZW5kKHsgeDIgLSBzdGQ6Om1heDxmbG9hdD4oIGFkamFj
ZW50V2lkdGgyLCAwKSwgeTEgfSk7CisgICAgICAgICAgICBxdWFkID0geworICAgICAgICAgICAg
ICAgIHsgeDEgKyBzdGQ6Om1heDxmbG9hdD4oYWRqYWNlbnRXaWR0aDEsIDApLCB5MSB9LAorICAg
ICAgICAgICAgICAgIHsgeDEgKyBzdGQ6Om1heDxmbG9hdD4oLWFkamFjZW50V2lkdGgxLCAwKSwg
eTIgfSwKKyAgICAgICAgICAgICAgICB7IHgyIC0gc3RkOjptYXg8ZmxvYXQ+KC1hZGphY2VudFdp
ZHRoMiwgMCksIHkyIH0sCisgICAgICAgICAgICAgICAgeyB4MiAtIHN0ZDo6bWF4PGZsb2F0Pihh
ZGphY2VudFdpZHRoMiwgMCksIHkxIH0KKyAgICAgICAgICAgIH07CiAgICAgICAgICAgICBicmVh
azsKICAgICAgICAgY2FzZSBCb3hTaWRlOjpMZWZ0OgotICAgICAgICAgICAgcXVhZC51bmNoZWNr
ZWRBcHBlbmQoeyB4MSwgeTEgKyBzdGQ6Om1heDxmbG9hdD4oLWFkamFjZW50V2lkdGgxLCAwKSB9
KTsKLSAgICAgICAgICAgIHF1YWQudW5jaGVja2VkQXBwZW5kKHsgeDEsIHkyIC0gc3RkOjptYXg8
ZmxvYXQ+KC1hZGphY2VudFdpZHRoMiwgMCkgfSk7Ci0gICAgICAgICAgICBxdWFkLnVuY2hlY2tl
ZEFwcGVuZCh7IHgyLCB5MiAtIHN0ZDo6bWF4PGZsb2F0PiggYWRqYWNlbnRXaWR0aDIsIDApIH0p
OwotICAgICAgICAgICAgcXVhZC51bmNoZWNrZWRBcHBlbmQoeyB4MiwgeTEgKyBzdGQ6Om1heDxm
bG9hdD4oIGFkamFjZW50V2lkdGgxLCAwKSB9KTsKKyAgICAgICAgICAgIHF1YWQgPSB7CisgICAg
ICAgICAgICAgICAgeyB4MSwgeTEgKyBzdGQ6Om1heDxmbG9hdD4oLWFkamFjZW50V2lkdGgxLCAw
KSB9LAorICAgICAgICAgICAgICAgIHsgeDEsIHkyIC0gc3RkOjptYXg8ZmxvYXQ+KC1hZGphY2Vu
dFdpZHRoMiwgMCkgfSwKKyAgICAgICAgICAgICAgICB7IHgyLCB5MiAtIHN0ZDo6bWF4PGZsb2F0
PihhZGphY2VudFdpZHRoMiwgMCkgfSwKKyAgICAgICAgICAgICAgICB7IHgyLCB5MSArIHN0ZDo6
bWF4PGZsb2F0PihhZGphY2VudFdpZHRoMSwgMCkgfQorICAgICAgICAgICAgfTsKICAgICAgICAg
ICAgIGJyZWFrOwogICAgICAgICBjYXNlIEJveFNpZGU6OlJpZ2h0OgotICAgICAgICAgICAgcXVh
ZC51bmNoZWNrZWRBcHBlbmQoeyB4MSwgeTEgKyBzdGQ6Om1heDxmbG9hdD4oIGFkamFjZW50V2lk
dGgxLCAwKSB9KTsKLSAgICAgICAgICAgIHF1YWQudW5jaGVja2VkQXBwZW5kKHsgeDEsIHkyIC0g
c3RkOjptYXg8ZmxvYXQ+KCBhZGphY2VudFdpZHRoMiwgMCkgfSk7Ci0gICAgICAgICAgICBxdWFk
LnVuY2hlY2tlZEFwcGVuZCh7IHgyLCB5MiAtIHN0ZDo6bWF4PGZsb2F0PigtYWRqYWNlbnRXaWR0
aDIsIDApIH0pOwotICAgICAgICAgICAgcXVhZC51bmNoZWNrZWRBcHBlbmQoeyB4MiwgeTEgKyBz
dGQ6Om1heDxmbG9hdD4oLWFkamFjZW50V2lkdGgxLCAwKSB9KTsKKyAgICAgICAgICAgIHF1YWQg
PSB7CisgICAgICAgICAgICAgICAgeyB4MSwgeTEgKyBzdGQ6Om1heDxmbG9hdD4oYWRqYWNlbnRX
aWR0aDEsIDApIH0sCisgICAgICAgICAgICAgICAgeyB4MSwgeTIgLSBzdGQ6Om1heDxmbG9hdD4o
YWRqYWNlbnRXaWR0aDIsIDApIH0sCisgICAgICAgICAgICAgICAgeyB4MiwgeTIgLSBzdGQ6Om1h
eDxmbG9hdD4oLWFkamFjZW50V2lkdGgyLCAwKSB9LAorICAgICAgICAgICAgICAgIHsgeDIsIHkx
ICsgc3RkOjptYXg8ZmxvYXQ+KC1hZGphY2VudFdpZHRoMSwgMCkgfQorICAgICAgICAgICAgfTsK
ICAgICAgICAgICAgIGJyZWFrOwogICAgICAgICB9CiAKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJD
b3JlL2RvbS9ET01SZWN0TGlzdC5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9kb20vRE9NUmVjdExpc3Qu
Y3BwCmluZGV4IDdjMGE2MmM5NmFiMDg5ZjJkYTY0NzUwZGU4ZTVjYmIzMGMxOTRmODUuLjcxNWUx
NjM1NWM4MDllMDIwYTM2ODk5NDc3MWVhMzdlNDhlMjk3Y2UgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9X
ZWJDb3JlL2RvbS9ET01SZWN0TGlzdC5jcHAKKysrIGIvU291cmNlL1dlYkNvcmUvZG9tL0RPTVJl
Y3RMaXN0LmNwcApAQCAtMzEsMTcgKzMxLDEzIEBACiBuYW1lc3BhY2UgV2ViQ29yZSB7CiAKIERP
TVJlY3RMaXN0OjpET01SZWN0TGlzdChjb25zdCBWZWN0b3I8RmxvYXRRdWFkPiYgcXVhZHMpCisg
ICAgOiBtX2l0ZW1zKHF1YWRzLm1hcChbXShhdXRvJiBxdWFkKSB7IHJldHVybiBET01SZWN0Ojpj
cmVhdGUocXVhZC5ib3VuZGluZ0JveCgpKTsgfSkpCiB7Ci0gICAgbV9pdGVtcy5yZXNlcnZlSW5p
dGlhbENhcGFjaXR5KHF1YWRzLnNpemUoKSk7Ci0gICAgZm9yIChhdXRvJiBxdWFkIDogcXVhZHMp
Ci0gICAgICAgIG1faXRlbXMudW5jaGVja2VkQXBwZW5kKERPTVJlY3Q6OmNyZWF0ZShxdWFkLmJv
dW5kaW5nQm94KCkpKTsKIH0KIAogRE9NUmVjdExpc3Q6OkRPTVJlY3RMaXN0KGNvbnN0IFZlY3Rv
cjxGbG9hdFJlY3Q+JiByZWN0cykKKyAgICA6IG1faXRlbXMocmVjdHMubWFwKFtdKGF1dG8mIHJl
Y3QpIHsgcmV0dXJuIERPTVJlY3Q6OmNyZWF0ZShyZWN0KTsgfSkpCiB7Ci0gICAgbV9pdGVtcy5y
ZXNlcnZlSW5pdGlhbENhcGFjaXR5KHJlY3RzLnNpemUoKSk7Ci0gICAgZm9yIChhdXRvJiByZWN0
IDogcmVjdHMpCi0gICAgICAgIG1faXRlbXMudW5jaGVja2VkQXBwZW5kKERPTVJlY3Q6OmNyZWF0
ZShyZWN0KSk7CiB9CiAKIERPTVJlY3RMaXN0Ojp+RE9NUmVjdExpc3QoKSA9IGRlZmF1bHQ7CmRp
ZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9kb20vRG9jdW1lbnQuY3BwIGIvU291cmNlL1dlYkNv
cmUvZG9tL0RvY3VtZW50LmNwcAppbmRleCBhNmE2YWRjNmQ4ZDdmMThjMmY0YTlmY2I1MjkwOTRm
MTVmMmNiMDJjLi5mMzlmYjgxNGE1N2UyZTFmMzBkYzZkYTdiYTk4NjY0NjFkOWY4OGNlIDEwMDY0
NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9kb20vRG9jdW1lbnQuY3BwCisrKyBiL1NvdXJjZS9XZWJD
b3JlL2RvbS9Eb2N1bWVudC5jcHAKQEAgLTQyNDAsMTMgKzQyNDAsNyBAQCB2b2lkIERvY3VtZW50
Ojp1cGRhdGVFbGVtZW50c0FmZmVjdGVkQnlNZWRpYVF1ZXJpZXMoKQogICAgICAgICAgICAgdGhl
bWVDb2xvckNoYW5nZWQoKTsKICAgICB9CiAKLSAgICAvLyBGSVhNRTogY29weVRvVmVjdG9yIGRv
ZXNuJ3Qgd29yayB3aXRoIFdlYWtIYXNoU2V0Ci0gICAgVmVjdG9yPFJlZjxIVE1MSW1hZ2VFbGVt
ZW50Pj4gaW1hZ2VzOwotICAgIGltYWdlcy5yZXNlcnZlSW5pdGlhbENhcGFjaXR5KG1fZHluYW1p
Y01lZGlhUXVlcnlEZXBlbmRlbnRJbWFnZXMuY29tcHV0ZVNpemUoKSk7Ci0gICAgZm9yIChhdXRv
JiBpbWFnZSA6IG1fZHluYW1pY01lZGlhUXVlcnlEZXBlbmRlbnRJbWFnZXMpCi0gICAgICAgIGlt
YWdlcy5hcHBlbmQoaW1hZ2UpOwotCi0gICAgZm9yIChhdXRvJiBpbWFnZSA6IGltYWdlcykKKyAg
ICBmb3IgKGF1dG8mIGltYWdlIDogY29weVRvVmVjdG9yT2Y8UmVmPEhUTUxJbWFnZUVsZW1lbnQ+
PihtX2R5bmFtaWNNZWRpYVF1ZXJ5RGVwZW5kZW50SW1hZ2VzKSkKICAgICAgICAgaW1hZ2UtPmV2
YWx1YXRlRHluYW1pY01lZGlhUXVlcnlEZXBlbmRlbmNpZXMoKTsKIH0KIApAQCAtNzYxMCw2ICs3
NjA0LDcgQEAgdm9pZCBEb2N1bWVudDo6ZGlkQXNzb2NpYXRlRm9ybUNvbnRyb2xzVGltZXJGaXJl
ZCgpCiAgICAgICAgIGlmIChlbGVtZW50LmlzQ29ubmVjdGVkKCkpCiAgICAgICAgICAgICBjb250
cm9scy51bmNoZWNrZWRBcHBlbmQoJmVsZW1lbnQpOwogICAgIH0KKyAgICBjb250cm9scy5zaHJp
bmtUb0ZpdCgpOwogCiAgICAgaWYgKGF1dG8gcGFnZSA9IHRoaXMtPnBhZ2UoKTsgcGFnZSAmJiAh
Y29udHJvbHMuaXNFbXB0eSgpKSB7CiAgICAgICAgIEFTU0VSVChtX2ZyYW1lKTsKZGlmZiAtLWdp
dCBhL1NvdXJjZS9XZWJDb3JlL2RvbS9FbGVtZW50RGF0YS5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9k
b20vRWxlbWVudERhdGEuY3BwCmluZGV4IGI3MDNhZWZhZWE2OTIxOWIwODViYWQ5ZDA1MDMwNjhj
ZjAzZjFiNzAuLjA3MWRiMGIzNGNhNmU1NmVmMTI2ZWJlZWQ1MThmNjBkNzQwYjRiOTkgMTAwNjQ0
Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL2RvbS9FbGVtZW50RGF0YS5jcHAKKysrIGIvU291cmNlL1dl
YkNvcmUvZG9tL0VsZW1lbnREYXRhLmNwcApAQCAtMTQ1LDEwICsxNDUsNyBAQCBVbmlxdWVFbGVt
ZW50RGF0YTo6VW5pcXVlRWxlbWVudERhdGEoY29uc3QgU2hhcmVhYmxlRWxlbWVudERhdGEmIG90
aGVyKQogICAgIEFTU0VSVCghb3RoZXIubV9pbmxpbmVTdHlsZSB8fCAhb3RoZXIubV9pbmxpbmVT
dHlsZS0+aXNNdXRhYmxlKCkpOwogICAgIG1faW5saW5lU3R5bGUgPSBvdGhlci5tX2lubGluZVN0
eWxlOwogCi0gICAgdW5zaWduZWQgb3RoZXJMZW5ndGggPSBvdGhlci5sZW5ndGgoKTsKLSAgICBt
X2F0dHJpYnV0ZVZlY3Rvci5yZXNlcnZlQ2FwYWNpdHkob3RoZXJMZW5ndGgpOwotICAgIGZvciAo
dW5zaWduZWQgaSA9IDA7IGkgPCBvdGhlckxlbmd0aDsgKytpKQotICAgICAgICBtX2F0dHJpYnV0
ZVZlY3Rvci51bmNoZWNrZWRBcHBlbmQob3RoZXIubV9hdHRyaWJ1dGVBcnJheVtpXSk7CisgICAg
bV9hdHRyaWJ1dGVWZWN0b3IuYXBwZW5kKG90aGVyLm1fYXR0cmlidXRlQXJyYXksIG90aGVyLmxl
bmd0aCgpKTsKIH0KIAogUmVmPFVuaXF1ZUVsZW1lbnREYXRhPiBFbGVtZW50RGF0YTo6bWFrZVVu
aXF1ZUNvcHkoKSBjb25zdApkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvZG9tL0V2ZW50TGlz
dGVuZXJNYXAuY3BwIGIvU291cmNlL1dlYkNvcmUvZG9tL0V2ZW50TGlzdGVuZXJNYXAuY3BwCmlu
ZGV4IGM0ZTgxNmRlYWY0MjVjYTkxMTVlNzg2ZjZhMGFlMGJiNjg0MTY5MzkuLjYwYjFkYTc2M2Yz
YjBhNzBjZjFlYWRlNDMzNGQ4Zjk1MzM2YTRlZjMgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3Jl
L2RvbS9FdmVudExpc3RlbmVyTWFwLmNwcAorKysgYi9Tb3VyY2UvV2ViQ29yZS9kb20vRXZlbnRM
aXN0ZW5lck1hcC5jcHAKQEAgLTk3LDEzICs5Nyw5IEBAIHZvaWQgRXZlbnRMaXN0ZW5lck1hcDo6
Y2xlYXIoKQogCiBWZWN0b3I8QXRvbVN0cmluZz4gRXZlbnRMaXN0ZW5lck1hcDo6ZXZlbnRUeXBl
cygpIGNvbnN0CiB7Ci0gICAgVmVjdG9yPEF0b21TdHJpbmc+IHR5cGVzOwotICAgIHR5cGVzLnJl
c2VydmVJbml0aWFsQ2FwYWNpdHkobV9lbnRyaWVzLnNpemUoKSk7Ci0KLSAgICBmb3IgKGF1dG8m
IGVudHJ5IDogbV9lbnRyaWVzKQotICAgICAgICB0eXBlcy51bmNoZWNrZWRBcHBlbmQoZW50cnku
Zmlyc3QpOwotCi0gICAgcmV0dXJuIHR5cGVzOworICAgIHJldHVybiBtX2VudHJpZXMubWFwKFtd
KGF1dG8mIGVudHJ5KSB7CisgICAgICAgIHJldHVybiBlbnRyeS5maXJzdDsKKyAgICB9KTsKIH0K
IAogc3RhdGljIGlubGluZSBzaXplX3QgZmluZExpc3RlbmVyKGNvbnN0IEV2ZW50TGlzdGVuZXJW
ZWN0b3ImIGxpc3RlbmVycywgRXZlbnRMaXN0ZW5lciYgbGlzdGVuZXIsIGJvb2wgdXNlQ2FwdHVy
ZSkKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL2RvbS9UcmVlU2NvcGVPcmRlcmVkTWFwLmNw
cCBiL1NvdXJjZS9XZWJDb3JlL2RvbS9UcmVlU2NvcGVPcmRlcmVkTWFwLmNwcAppbmRleCAzOTA5
YzUzODA4Y2JkNjhjYTlkMzgwOGE1ZDhhMGZkMDM4ZWE0ZjAzLi43YzdmYmI1NmYzMzgyZmUwOGZi
ZDgwNGZhYjM3M2IwMDUwYjM1MGZmIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9kb20vVHJl
ZVNjb3BlT3JkZXJlZE1hcC5jcHAKKysrIGIvU291cmNlL1dlYkNvcmUvZG9tL1RyZWVTY29wZU9y
ZGVyZWRNYXAuY3BwCkBAIC0yMTgsMTEgKzIxOCw5IEBAIGNvbnN0IFZlY3RvcjxFbGVtZW50Kj4q
IFRyZWVTY29wZU9yZGVyZWRNYXA6OmdldEFsbEVsZW1lbnRzQnlJZChjb25zdCBBdG9tU3RyaW5n
CiAKIGNvbnN0IFZlY3RvcjxBdG9tU3RyaW5nPiBUcmVlU2NvcGVPcmRlcmVkTWFwOjprZXlzKCkg
Y29uc3QKIHsKLSAgICBWZWN0b3I8QXRvbVN0cmluZz4gcmVzdWx0OwotICAgIHJlc3VsdC5yZXNl
cnZlSW5pdGlhbENhcGFjaXR5KG1fbWFwLnNpemUoKSk7Ci0gICAgZm9yIChhdXRvKiBrZXkgOiBt
X21hcC5rZXlzKCkpCi0gICAgICAgIHJlc3VsdC51bmNoZWNrZWRBcHBlbmQoY29uc3RfY2FzdDxB
dG9tU3RyaW5nSW1wbCo+KGtleSkpOwotICAgIHJldHVybiByZXN1bHQ7CisgICAgcmV0dXJuIFdU
Rjo6bWFwKG1fbWFwLCBbXShhdXRvJiBlbnRyeSkgLT4gQXRvbVN0cmluZyB7CisgICAgICAgIHJl
dHVybiBjb25zdF9jYXN0PEF0b21TdHJpbmdJbXBsKj4oZW50cnkua2V5KTsKKyAgICB9KTsKIH0K
IAogfSAvLyBuYW1lc3BhY2UgV2ViQ29yZQpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvZWRp
dGluZy9Db21wb3NpdGVFZGl0Q29tbWFuZC5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9lZGl0aW5nL0Nv
bXBvc2l0ZUVkaXRDb21tYW5kLmNwcAppbmRleCAxZjM3NDUxZDlhY2EyNmNkNGM1OGQzYTI2MWE3
NmVmNDNmOGZmYWU1Li40MDE2ZWMxMDI2NWQ2NmY5ZWRlYTgzODc1ZjU4NDFlMWZmZWFiNzhlIDEw
MDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9lZGl0aW5nL0NvbXBvc2l0ZUVkaXRDb21tYW5kLmNw
cAorKysgYi9Tb3VyY2UvV2ViQ29yZS9lZGl0aW5nL0NvbXBvc2l0ZUVkaXRDb21tYW5kLmNwcApA
QCAtNzg5LDEyICs3ODksOSBAQCBQb3NpdGlvbiBDb21wb3NpdGVFZGl0Q29tbWFuZDo6cmVwbGFj
ZVNlbGVjdGVkVGV4dEluTm9kZShjb25zdCBTdHJpbmcmIHRleHQpCiAKIHN0YXRpYyBWZWN0b3I8
UmVuZGVyZWREb2N1bWVudE1hcmtlcj4gY29weU1hcmtlcnMoY29uc3QgVmVjdG9yPFJlbmRlcmVk
RG9jdW1lbnRNYXJrZXIqPiYgbWFya2VyUG9pbnRlcnMpCiB7Ci0gICAgVmVjdG9yPFJlbmRlcmVk
RG9jdW1lbnRNYXJrZXI+IG1hcmtlcnM7Ci0gICAgbWFya2Vycy5yZXNlcnZlSW5pdGlhbENhcGFj
aXR5KG1hcmtlclBvaW50ZXJzLnNpemUoKSk7Ci0gICAgZm9yIChhdXRvJiBtYXJrZXJQb2ludGVy
IDogbWFya2VyUG9pbnRlcnMpCi0gICAgICAgIG1hcmtlcnMudW5jaGVja2VkQXBwZW5kKCptYXJr
ZXJQb2ludGVyKTsKLQotICAgIHJldHVybiBtYXJrZXJzOworICAgIHJldHVybiBtYXJrZXJQb2lu
dGVycy5tYXAoW10oYXV0byYgbWFya2VyUG9pbnRlcikgeworICAgICAgICByZXR1cm4gKm1hcmtl
clBvaW50ZXI7CisgICAgfSk7CiB9CiAKIHZvaWQgQ29tcG9zaXRlRWRpdENvbW1hbmQ6OnJlcGxh
Y2VUZXh0SW5Ob2RlUHJlc2VydmluZ01hcmtlcnMoVGV4dCYgbm9kZSwgdW5zaWduZWQgb2Zmc2V0
LCB1bnNpZ25lZCBjb3VudCwgY29uc3QgU3RyaW5nJiByZXBsYWNlbWVudFRleHQpCmRpZmYgLS1n
aXQgYS9Tb3VyY2UvV2ViQ29yZS9lZGl0aW5nL0VkaXRvci5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9l
ZGl0aW5nL0VkaXRvci5jcHAKaW5kZXggNzI0NWYxODA4NmJmNTM2OTQyNTc3ODU5ZGIxNmQ4OWMy
YjI0OGQ1NS4uMTVjNWMzOTBjMWI1NGYwZTMzYjVlOTI0NjRjNTNkNTJjOTIxZTI2YiAxMDA2NDQK
LS0tIGEvU291cmNlL1dlYkNvcmUvZWRpdGluZy9FZGl0b3IuY3BwCisrKyBiL1NvdXJjZS9XZWJD
b3JlL2VkaXRpbmcvRWRpdG9yLmNwcApAQCAtNDAzMyw3ICs0MDMzLDcgQEAgc3RhdGljIFZlY3Rv
cjxUZXh0TGlzdD4gZWRpdGFibGVUZXh0TGlzdHNBdFBvc2l0aW9uSW5EZXNjZW5kaW5nT3JkZXIo
Y29uc3QgUG9zaXQKICAgICB9CiAKICAgICBWZWN0b3I8VGV4dExpc3Q+IHRleHRMaXN0czsKLSAg
ICB0ZXh0TGlzdHMucmVzZXJ2ZUNhcGFjaXR5KGVuY2xvc2luZ0xpc3RzLnNpemUoKSk7CisgICAg
dGV4dExpc3RzLnJlc2VydmVJbml0aWFsQ2FwYWNpdHkoZW5jbG9zaW5nTGlzdHMuc2l6ZSgpKTsK
ICAgICBmb3IgKGF1dG8gaXRlcmF0b3IgPSBlbmNsb3NpbmdMaXN0cy5yYmVnaW4oKTsgaXRlcmF0
b3IgIT0gZW5jbG9zaW5nTGlzdHMucmVuZCgpOyArK2l0ZXJhdG9yKSB7CiAgICAgICAgIGF1dG8m
IGxpc3QgPSBpdGVyYXRvci0+Z2V0KCk7CiAgICAgICAgIGJvb2wgb3JkZXJlZCA9IGlzPEhUTUxP
TGlzdEVsZW1lbnQ+KGxpc3QpOwpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvZmlsZWFwaS9G
aWxlTGlzdC5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9maWxlYXBpL0ZpbGVMaXN0LmNwcAppbmRleCBj
MTlmODAyZGQ4OWQyNzEzMGEyMjFjNWJjYjJkOTczYzZkYTU1MWY1Li43YTA5ODE1YjYyZDhkYThi
NmFiN2YxNTVhZmM0Y2U1MTRlNGMwZTc1IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9maWxl
YXBpL0ZpbGVMaXN0LmNwcAorKysgYi9Tb3VyY2UvV2ViQ29yZS9maWxlYXBpL0ZpbGVMaXN0LmNw
cApAQCAtNDEsMTEgKzQxLDkgQEAgRmlsZSogRmlsZUxpc3Q6Oml0ZW0odW5zaWduZWQgaW5kZXgp
IGNvbnN0CiAKIFZlY3RvcjxTdHJpbmc+IEZpbGVMaXN0OjpwYXRocygpIGNvbnN0CiB7Ci0gICAg
VmVjdG9yPFN0cmluZz4gcGF0aHM7Ci0gICAgcGF0aHMucmVzZXJ2ZUluaXRpYWxDYXBhY2l0eSht
X2ZpbGVzLnNpemUoKSk7Ci0gICAgZm9yIChhdXRvJiBmaWxlIDogbV9maWxlcykKLSAgICAgICAg
cGF0aHMudW5jaGVja2VkQXBwZW5kKGZpbGUtPnBhdGgoKSk7Ci0gICAgcmV0dXJuIHBhdGhzOwor
ICAgIHJldHVybiBtX2ZpbGVzLm1hcChbXShhdXRvJiBmaWxlKSB7CisgICAgICAgIHJldHVybiBm
aWxlLT5wYXRoKCk7CisgICAgfSk7CiB9CiAKIH0gLy8gbmFtZXNwYWNlIFdlYkNvcmUKZGlmZiAt
LWdpdCBhL1NvdXJjZS9XZWJDb3JlL2hpc3RvcnkvSGlzdG9yeUl0ZW0uY3BwIGIvU291cmNlL1dl
YkNvcmUvaGlzdG9yeS9IaXN0b3J5SXRlbS5jcHAKaW5kZXggZDUzNzdhYjBmN2NjMWYzZTQ3MTk3
NWMyMDgwMGJlZTExODUyMTJlNC4uMGQ1ZTBkNzYxYmIwNWQwZDdkOGM3M2E3NWUyYTAxY2JiZjhj
YTY1YyAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvaGlzdG9yeS9IaXN0b3J5SXRlbS5jcHAK
KysrIGIvU291cmNlL1dlYkNvcmUvaGlzdG9yeS9IaXN0b3J5SXRlbS5jcHAKQEAgLTk1LDEwICs5
NSwxMiBAQCBpbmxpbmUgSGlzdG9yeUl0ZW06Okhpc3RvcnlJdGVtKGNvbnN0IEhpc3RvcnlJdGVt
JiBpdGVtKQogICAgICwgbV9kaXNwbGF5VGl0bGUoaXRlbS5tX2Rpc3BsYXlUaXRsZSkKICAgICAs
IG1fc2Nyb2xsUG9zaXRpb24oaXRlbS5tX3Njcm9sbFBvc2l0aW9uKQogICAgICwgbV9wYWdlU2Nh
bGVGYWN0b3IoaXRlbS5tX3BhZ2VTY2FsZUZhY3RvcikKKyAgICAsIG1fY2hpbGRyZW4oaXRlbS5t
X2NoaWxkcmVuLm1hcChbXShhdXRvJiBjaGlsZCkgeyByZXR1cm4gY2hpbGQtPmNvcHkoKTsgfSkp
CiAgICAgLCBtX2xhc3RWaXNpdFdhc0ZhaWx1cmUoaXRlbS5tX2xhc3RWaXNpdFdhc0ZhaWx1cmUp
CiAgICAgLCBtX2lzVGFyZ2V0SXRlbShpdGVtLm1faXNUYXJnZXRJdGVtKQogICAgICwgbV9pdGVt
U2VxdWVuY2VOdW1iZXIoaXRlbS5tX2l0ZW1TZXF1ZW5jZU51bWJlcikKICAgICAsIG1fZG9jdW1l
bnRTZXF1ZW5jZU51bWJlcihpdGVtLm1fZG9jdW1lbnRTZXF1ZW5jZU51bWJlcikKKyAgICAsIG1f
Zm9ybURhdGEoaXRlbS5tX2Zvcm1EYXRhID8gUmVmUHRyPEZvcm1EYXRhPiB7IGl0ZW0ubV9mb3Jt
RGF0YS0+Y29weSgpIH0gOiBudWxscHRyKQogICAgICwgbV9mb3JtQ29udGVudFR5cGUoaXRlbS5t
X2Zvcm1Db250ZW50VHlwZSkKICAgICAsIG1fcHJ1bmluZ1JlYXNvbihQcnVuaW5nUmVhc29uOjpO
b25lKQogI2lmIFBMQVRGT1JNKElPU19GQU1JTFkpCkBAIC0xMDgsMTMgKzExMCw2IEBAIGlubGlu
ZSBIaXN0b3J5SXRlbTo6SGlzdG9yeUl0ZW0oY29uc3QgSGlzdG9yeUl0ZW0mIGl0ZW0pCiAjZW5k
aWYKICAgICAsIG1faWRlbnRpZmllcihpdGVtLm1faWRlbnRpZmllcikKIHsKLSAgICBpZiAoaXRl
bS5tX2Zvcm1EYXRhKQotICAgICAgICBtX2Zvcm1EYXRhID0gaXRlbS5tX2Zvcm1EYXRhLT5jb3B5
KCk7Ci0gICAgICAgIAotICAgIHVuc2lnbmVkIHNpemUgPSBpdGVtLm1fY2hpbGRyZW4uc2l6ZSgp
OwotICAgIG1fY2hpbGRyZW4ucmVzZXJ2ZUluaXRpYWxDYXBhY2l0eShzaXplKTsKLSAgICBmb3Ig
KHVuc2lnbmVkIGkgPSAwOyBpIDwgc2l6ZTsgKytpKQotICAgICAgICBtX2NoaWxkcmVuLnVuY2hl
Y2tlZEFwcGVuZChpdGVtLm1fY2hpbGRyZW5baV0tPmNvcHkoKSk7CiB9CiAKIFJlZjxIaXN0b3J5
SXRlbT4gSGlzdG9yeUl0ZW06OmNvcHkoKSBjb25zdApkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNv
cmUvaHRtbC9GaWxlSW5wdXRUeXBlLmNwcCBiL1NvdXJjZS9XZWJDb3JlL2h0bWwvRmlsZUlucHV0
VHlwZS5jcHAKaW5kZXggYTIzNzdiYzFmMmI0NmFhNGY0ODgxNmZjMzcwNjFlMDlhNDljOTc2Mi4u
MDZmMTJhYjI4OTdmMmRmZmRiMmM2YWM3ZjZlOTNjZmMxMmRhNTNkNiAxMDA2NDQKLS0tIGEvU291
cmNlL1dlYkNvcmUvaHRtbC9GaWxlSW5wdXRUeXBlLmNwcAorKysgYi9Tb3VyY2UvV2ViQ29yZS9o
dG1sL0ZpbGVJbnB1dFR5cGUuY3BwCkBAIC0zODUsMTMgKzM4NSw4IEBAIHZvaWQgRmlsZUlucHV0
VHlwZTo6c2V0RmlsZXMoUmVmUHRyPEZpbGVMaXN0PiYmIGZpbGVzLCBSZXF1ZXN0SWNvbiBzaG91
bGRSZXF1ZXN0CiAgICAgcHJvdGVjdGVkSW5wdXRFbGVtZW50LT5zZXRGb3JtQ29udHJvbFZhbHVl
TWF0Y2hlc1JlbmRlcmVyKHRydWUpOwogICAgIHByb3RlY3RlZElucHV0RWxlbWVudC0+dXBkYXRl
VmFsaWRpdHkoKTsKIAotICAgIGlmIChzaG91bGRSZXF1ZXN0SWNvbiA9PSBSZXF1ZXN0SWNvbjo6
WWVzKSB7Ci0gICAgICAgIFZlY3RvcjxTdHJpbmc+IHBhdGhzOwotICAgICAgICBwYXRocy5yZXNl
cnZlSW5pdGlhbENhcGFjaXR5KGxlbmd0aCk7Ci0gICAgICAgIGZvciAoYXV0byYgZmlsZSA6IG1f
ZmlsZUxpc3QtPmZpbGVzKCkpCi0gICAgICAgICAgICBwYXRocy51bmNoZWNrZWRBcHBlbmQoZmls
ZS0+cGF0aCgpKTsKLSAgICAgICAgcmVxdWVzdEljb24ocGF0aHMpOwotICAgIH0KKyAgICBpZiAo
c2hvdWxkUmVxdWVzdEljb24gPT0gUmVxdWVzdEljb246OlllcykKKyAgICAgICAgcmVxdWVzdElj
b24obV9maWxlTGlzdC0+cGF0aHMoKSk7CiAKICAgICBpZiAocHJvdGVjdGVkSW5wdXRFbGVtZW50
LT5yZW5kZXJlcigpKQogICAgICAgICBwcm90ZWN0ZWRJbnB1dEVsZW1lbnQtPnJlbmRlcmVyKCkt
PnJlcGFpbnQoKTsKQEAgLTQ0Nyw3ICs0NDIsNyBAQCB2b2lkIEZpbGVJbnB1dFR5cGU6OmZpbGVz
Q2hvc2VuKGNvbnN0IFZlY3RvcjxTdHJpbmc+JiBwYXRocywgY29uc3QgVmVjdG9yPFN0cmluZwog
ICAgIGZvciAoc2l6ZV90IGkgPSAwOyBpIDwgc2l6ZTsgKytpKQogICAgICAgICBmaWxlcy51bmNo
ZWNrZWRBcHBlbmQoeyBwYXRoc1tpXSwgaSA8IHJlcGxhY2VtZW50UGF0aHMuc2l6ZSgpID8gcmVw
bGFjZW1lbnRQYXRoc1tpXSA6IG51bGxTdHJpbmcoKSwgeyB9IH0pOwogCi0gICAgZmlsZXNDaG9z
ZW4oZmlsZXMpOworICAgIGZpbGVzQ2hvc2VuKFdURk1vdmUoZmlsZXMpKTsKIH0KIAogdm9pZCBG
aWxlSW5wdXRUeXBlOjpkaWRDcmVhdGVGaWxlTGlzdChSZWY8RmlsZUxpc3Q+JiYgZmlsZUxpc3Qs
IFJlZlB0cjxJY29uPiYmIGljb24pCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9odG1sL0xp
bmtJY29uQ29sbGVjdG9yLmNwcCBiL1NvdXJjZS9XZWJDb3JlL2h0bWwvTGlua0ljb25Db2xsZWN0
b3IuY3BwCmluZGV4IDhkNzBkNThiN2Y5ZDIzZjBkMzI5MjZkNDViMmRhZDBjZGEwODg5YjUuLjM5
ODM2NDk5ZjY3Y2I1ZjFlZmMwNTg4YjNkOWIwOWE0NDQ0OGEyMTUgMTAwNjQ0Ci0tLSBhL1NvdXJj
ZS9XZWJDb3JlL2h0bWwvTGlua0ljb25Db2xsZWN0b3IuY3BwCisrKyBiL1NvdXJjZS9XZWJDb3Jl
L2h0bWwvTGlua0ljb25Db2xsZWN0b3IuY3BwCkBAIC0xMDIsOCArMTAyLDggQEAgYXV0byBMaW5r
SWNvbkNvbGxlY3Rvcjo6aWNvbnNPZlR5cGVzKE9wdGlvblNldDxMaW5rSWNvblR5cGU+IGljb25U
eXBlcykgLT4gVmVjdG8KIAogICAgICAgICBWZWN0b3I8c3RkOjpwYWlyPFN0cmluZywgU3RyaW5n
Pj4gYXR0cmlidXRlczsKICAgICAgICAgaWYgKGxpbmtFbGVtZW50Lmhhc0F0dHJpYnV0ZXMoKSkg
ewotICAgICAgICAgICAgYXR0cmlidXRlcy5yZXNlcnZlQ2FwYWNpdHkobGlua0VsZW1lbnQuYXR0
cmlidXRlQ291bnQoKSk7Ci0gICAgICAgICAgICBmb3IgKGNvbnN0IEF0dHJpYnV0ZSYgYXR0cmli
dXRlIDogbGlua0VsZW1lbnQuYXR0cmlidXRlc0l0ZXJhdG9yKCkpCisgICAgICAgICAgICBhdHRy
aWJ1dGVzLnJlc2VydmVJbml0aWFsQ2FwYWNpdHkobGlua0VsZW1lbnQuYXR0cmlidXRlQ291bnQo
KSk7CisgICAgICAgICAgICBmb3IgKGF1dG8mIGF0dHJpYnV0ZSA6IGxpbmtFbGVtZW50LmF0dHJp
YnV0ZXNJdGVyYXRvcigpKQogICAgICAgICAgICAgICAgIGF0dHJpYnV0ZXMudW5jaGVja2VkQXBw
ZW5kKHsgYXR0cmlidXRlLmxvY2FsTmFtZSgpLCBhdHRyaWJ1dGUudmFsdWUoKSB9KTsKICAgICAg
ICAgfQogCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9odG1sL1VSTFNlYXJjaFBhcmFtcy5j
cHAgYi9Tb3VyY2UvV2ViQ29yZS9odG1sL1VSTFNlYXJjaFBhcmFtcy5jcHAKaW5kZXggZDRmYmMx
ZjA2YWJlYWVjMTEyZGFiZGJjMmQ4NTI5MTUyNDgxN2NkNC4uN2U1NjQyN2E4ZTAyMWI3Zjk1NTVi
YmM0MGU5ZWRjYmVmNmU3ZWI4MyAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvaHRtbC9VUkxT
ZWFyY2hQYXJhbXMuY3BwCisrKyBiL1NvdXJjZS9XZWJDb3JlL2h0bWwvVVJMU2VhcmNoUGFyYW1z
LmNwcApAQCAtMTIyLDYgKzEyMiw3IEBAIFZlY3RvcjxTdHJpbmc+IFVSTFNlYXJjaFBhcmFtczo6
Z2V0QWxsKGNvbnN0IFN0cmluZyYgbmFtZSkgY29uc3QKICAgICAgICAgaWYgKHBhaXIua2V5ID09
IG5hbWUpCiAgICAgICAgICAgICB2YWx1ZXMudW5jaGVja2VkQXBwZW5kKHBhaXIudmFsdWUpOwog
ICAgIH0KKyAgICB2YWx1ZXMuc2hyaW5rVG9GaXQoKTsKICAgICByZXR1cm4gdmFsdWVzOwogfQog
CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9sYXlvdXQvZm9ybWF0dGluZ0NvbnRleHRzL2lu
bGluZS9JbmxpbmVMaW5lQnVpbGRlci5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9sYXlvdXQvZm9ybWF0
dGluZ0NvbnRleHRzL2lubGluZS9JbmxpbmVMaW5lQnVpbGRlci5jcHAKaW5kZXggMzYzOGQ1Yzlk
NTNjNzE4OGM3YmQ2ZTdkNmYxOWQwODhhMDQ3ODU1ZS4uOGVmZmVmNDJhOTQ4MzhkMWUzMDRhYWYx
ODk1ZjhkYzVlMGIwNDFmZiAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvbGF5b3V0L2Zvcm1h
dHRpbmdDb250ZXh0cy9pbmxpbmUvSW5saW5lTGluZUJ1aWxkZXIuY3BwCisrKyBiL1NvdXJjZS9X
ZWJDb3JlL2xheW91dC9mb3JtYXR0aW5nQ29udGV4dHMvaW5saW5lL0lubGluZUxpbmVCdWlsZGVy
LmNwcApAQCAtMzUwLDggKzM1MCw4IEBAIExpbmVCdWlsZGVyOjpMaW5lQ29udGVudCBMaW5lQnVp
bGRlcjo6bGF5b3V0SW5saW5lQ29udGVudChjb25zdCBJbmxpbmVJdGVtUmFuZ2UmCiAgICAgICAg
ICAgICAgICAgY29udGludWU7CiAgICAgICAgICAgICB9CiAKLSAgICAgICAgICAgIHJ1bkxldmVs
cy5hcHBlbmQobGluZVJ1bnNbaV0uYmlkaUxldmVsKCkpOwotICAgICAgICAgICAgcnVuSW5kZXhP
ZmZzZXRNYXAuYXBwZW5kKGFjY3VtdWxhdGVkT2Zmc2V0KTsKKyAgICAgICAgICAgIHJ1bkxldmVs
cy51bmNoZWNrZWRBcHBlbmQobGluZVJ1bnNbaV0uYmlkaUxldmVsKCkpOworICAgICAgICAgICAg
cnVuSW5kZXhPZmZzZXRNYXAudW5jaGVja2VkQXBwZW5kKGFjY3VtdWxhdGVkT2Zmc2V0KTsKICAg
ICAgICAgfQogCiAgICAgICAgIFZlY3RvcjxpbnQzMl90PiB2aXN1YWxPcmRlckxpc3QocnVuTGV2
ZWxzLnNpemUoKSk7CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9sb2FkZXIvRG9jdW1lbnRM
b2FkZXIuY3BwIGIvU291cmNlL1dlYkNvcmUvbG9hZGVyL0RvY3VtZW50TG9hZGVyLmNwcAppbmRl
eCAzNTliNjM4NTE4Njg0MjNjMzdhMTAwNjM1MDFhNGRmMDZkOWFkYmFhLi5lYzUwZGU5MGRkZWQw
NzQ2MDRkZDE4N2FlOWRlNjExMjZhNmFkMTI0IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9s
b2FkZXIvRG9jdW1lbnRMb2FkZXIuY3BwCisrKyBiL1NvdXJjZS9XZWJDb3JlL2xvYWRlci9Eb2N1
bWVudExvYWRlci5jcHAKQEAgLTIyODIsMTQgKzIyODIsMTEgQEAgdm9pZCBEb2N1bWVudExvYWRl
cjo6c3RhcnRJY29uTG9hZGluZygpCiAgICAgaWYgKCFtX2xpbmtJY29ucy5zaXplKCkpCiAgICAg
ICAgIHJldHVybjsKIAotICAgIFZlY3RvcjxzdGQ6OnBhaXI8V2ViQ29yZTo6TGlua0ljb24mLCB1
aW50NjRfdD4+IGljb25EZWNpc2lvbnM7Ci0gICAgaWNvbkRlY2lzaW9ucy5yZXNlcnZlSW5pdGlh
bENhcGFjaXR5KG1fbGlua0ljb25zLnNpemUoKSk7Ci0gICAgZm9yIChhdXRvJiBpY29uIDogbV9s
aW5rSWNvbnMpIHsKKyAgICBhdXRvIGljb25EZWNpc2lvbnMgPSBXVEY6Om1hcChtX2xpbmtJY29u
cywgWyZdKGF1dG8mIGljb24pIC0+IHN0ZDo6cGFpcjxXZWJDb3JlOjpMaW5rSWNvbiYsIHVpbnQ2
NF90PiB7CiAgICAgICAgIGF1dG8gcmVzdWx0ID0gbV9pY29uc1BlbmRpbmdMb2FkRGVjaXNpb24u
YWRkKG5leHRJY29uQ2FsbGJhY2tJRCsrLCBpY29uKTsKLSAgICAgICAgaWNvbkRlY2lzaW9ucy51
bmNoZWNrZWRBcHBlbmQoeyBpY29uLCByZXN1bHQuaXRlcmF0b3ItPmtleSB9KTsKLSAgICB9Ci0K
LSAgICBtX2ZyYW1lLT5sb2FkZXIoKS5jbGllbnQoKS5nZXRMb2FkRGVjaXNpb25Gb3JJY29ucyhp
Y29uRGVjaXNpb25zKTsKKyAgICAgICAgcmV0dXJuIHsgaWNvbiwgcmVzdWx0Lml0ZXJhdG9yLT5r
ZXkgfTsKKyAgICB9KTsKKyAgICBtX2ZyYW1lLT5sb2FkZXIoKS5jbGllbnQoKS5nZXRMb2FkRGVj
aXNpb25Gb3JJY29ucyhXVEZNb3ZlKGljb25EZWNpc2lvbnMpKTsKIH0KIAogdm9pZCBEb2N1bWVu
dExvYWRlcjo6ZGlkR2V0TG9hZERlY2lzaW9uRm9ySWNvbihib29sIGRlY2lzaW9uLCB1aW50NjRf
dCBsb2FkSWRlbnRpZmllciwgQ29tcGxldGlvbkhhbmRsZXI8dm9pZChGcmFnbWVudGVkU2hhcmVk
QnVmZmVyKik+JiYgY29tcGxldGlvbkhhbmRsZXIpCkBAIC0yNDQ5LDYgKzI0NDYsNyBAQCB2b2lk
IERvY3VtZW50TG9hZGVyOjpzZXRBY3RpdmVDb250ZW50UnVsZUxpc3RBY3Rpb25QYXR0ZXJucyhj
b25zdCBIYXNoTWFwPFN0cmluZwogICAgICAgICAgICAgaWYgKHBhcnNlZFBhdHRlcm4uaXNWYWxp
ZCgpKQogICAgICAgICAgICAgICAgIHBhdHRlcm5WZWN0b3IudW5jaGVja2VkQXBwZW5kKFdURk1v
dmUocGFyc2VkUGF0dGVybikpOwogICAgICAgICB9CisgICAgICAgIHBhdHRlcm5WZWN0b3Iuc2hy
aW5rVG9GaXQoKTsKICAgICAgICAgcGFyc2VkUGF0dGVybk1hcC5zZXQocGFpci5rZXksIFdURk1v
dmUocGF0dGVyblZlY3RvcikpOwogICAgIH0KIApkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUv
bG9hZGVyL1RleHRUcmFja0xvYWRlci5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9sb2FkZXIvVGV4dFRy
YWNrTG9hZGVyLmNwcAppbmRleCA4Y2MzYzU2OGM0Mzc5NmFjNjFiMzA5NzU0N2E4OWVmODEyZDk4
ZDRkLi44Yjk4NTE5MGQ3MmMyY2FlYWZiNWQyYTI0OTJjZGQyNDgyZjRmMThkIDEwMDY0NAotLS0g
YS9Tb3VyY2UvV2ViQ29yZS9sb2FkZXIvVGV4dFRyYWNrTG9hZGVyLmNwcAorKysgYi9Tb3VyY2Uv
V2ViQ29yZS9sb2FkZXIvVGV4dFRyYWNrTG9hZGVyLmNwcApAQCAtMTk5LDEyICsxOTksOSBAQCBW
ZWN0b3I8UmVmPFZUVEN1ZT4+IFRleHRUcmFja0xvYWRlcjo6Z2V0TmV3Q3VlcygpCiAgICAgaWYg
KCFtX2N1ZVBhcnNlcikKICAgICAgICAgcmV0dXJuIHsgfTsKIAotICAgIGF1dG8gY3VlcyA9IG1f
Y3VlUGFyc2VyLT50YWtlQ3VlcygpOwotICAgIFZlY3RvcjxSZWY8VlRUQ3VlPj4gcmVzdWx0Owot
ICAgIHJlc3VsdC5yZXNlcnZlSW5pdGlhbENhcGFjaXR5KGN1ZXMuc2l6ZSgpKTsKLSAgICBmb3Ig
KGF1dG8mIGN1ZURhdGEgOiBjdWVzKQotICAgICAgICByZXN1bHQudW5jaGVja2VkQXBwZW5kKFZU
VEN1ZTo6Y3JlYXRlKG1fZG9jdW1lbnQsIGN1ZURhdGEpKTsKLSAgICByZXR1cm4gcmVzdWx0Owor
ICAgIHJldHVybiBtX2N1ZVBhcnNlci0+dGFrZUN1ZXMoKS5tYXAoW3RoaXNdKGF1dG8mIGN1ZURh
dGEpIHsKKyAgICAgICAgcmV0dXJuIFZUVEN1ZTo6Y3JlYXRlKG1fZG9jdW1lbnQsIGN1ZURhdGEp
OworICAgIH0pOwogfQogCiBWZWN0b3I8UmVmPFZUVFJlZ2lvbj4+IFRleHRUcmFja0xvYWRlcjo6
Z2V0TmV3UmVnaW9ucygpCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9sb2FkZXIvYXJjaGl2
ZS9jZi9MZWdhY3lXZWJBcmNoaXZlLmNwcCBiL1NvdXJjZS9XZWJDb3JlL2xvYWRlci9hcmNoaXZl
L2NmL0xlZ2FjeVdlYkFyY2hpdmUuY3BwCmluZGV4IDdmNGJhZDZmY2MzYTljOTdhNmE1MTdhYjli
MjlkMDgwY2E5ZGE3MWIuLmNkOTQxY2YwNTE4MGRmOGMzNzJlOTkzZGFjM2IxOTFlYjVmMzgxYjIg
MTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL2xvYWRlci9hcmNoaXZlL2NmL0xlZ2FjeVdlYkFy
Y2hpdmUuY3BwCisrKyBiL1NvdXJjZS9XZWJDb3JlL2xvYWRlci9hcmNoaXZlL2NmL0xlZ2FjeVdl
YkFyY2hpdmUuY3BwCkBAIC02MTAsMTEgKzYxMCw3IEBAIFJlZlB0cjxMZWdhY3lXZWJBcmNoaXZl
PiBMZWdhY3lXZWJBcmNoaXZlOjpjcmVhdGVGcm9tU2VsZWN0aW9uKEZyYW1lKiBmcmFtZSkKICAg
ICBTdHJpbmcgaWZyYW1lTWFya3VwID0gIjxpZnJhbWUgZnJhbWVib3JkZXI9XCJub1wiIG1hcmdp
bndpZHRoPVwiMFwiIG1hcmdpbmhlaWdodD1cIjBcIiB3aWR0aD1cIjk4JSVcIiBoZWlnaHQ9XCI5
OCUlXCIgc3JjPVwiIiArIGZyYW1lLT5sb2FkZXIoKS5kb2N1bWVudExvYWRlcigpLT5yZXNwb25z
ZSgpLnVybCgpLnN0cmluZygpICsgIlwiPjwvaWZyYW1lPiI7CiAgICAgYXV0byBpZnJhbWVSZXNv
dXJjZSA9IEFyY2hpdmVSZXNvdXJjZTo6Y3JlYXRlKHV0ZjhCdWZmZXIoaWZyYW1lTWFya3VwKSwg
YWJvdXRCbGFua1VSTCgpLCAidGV4dC9odG1sIiwgIlVURi04IiwgU3RyaW5nKCkpOwogCi0gICAg
VmVjdG9yPFJlZjxMZWdhY3lXZWJBcmNoaXZlPj4gc3ViZnJhbWVBcmNoaXZlczsKLSAgICBzdWJm
cmFtZUFyY2hpdmVzLnJlc2VydmVJbml0aWFsQ2FwYWNpdHkoMSk7Ci0gICAgc3ViZnJhbWVBcmNo
aXZlcy51bmNoZWNrZWRBcHBlbmQoYXJjaGl2ZS5yZWxlYXNlTm9uTnVsbCgpKTsKLQotICAgIHJl
dHVybiBjcmVhdGUoaWZyYW1lUmVzb3VyY2UucmVsZWFzZU5vbk51bGwoKSwgeyB9LCBXVEZNb3Zl
KHN1YmZyYW1lQXJjaGl2ZXMpKTsKKyAgICByZXR1cm4gY3JlYXRlKGlmcmFtZVJlc291cmNlLnJl
bGVhc2VOb25OdWxsKCksIHsgfSwgVmVjdG9yIHsgYXJjaGl2ZS5yZWxlYXNlTm9uTnVsbCgpIH0p
OwogfQogCiB9CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9wYWdlL0NhcHRpb25Vc2VyUHJl
ZmVyZW5jZXNNZWRpYUFGLmNwcCBiL1NvdXJjZS9XZWJDb3JlL3BhZ2UvQ2FwdGlvblVzZXJQcmVm
ZXJlbmNlc01lZGlhQUYuY3BwCmluZGV4IDIxNWYwNDA3ZGRiZTJiNjI4YTM1Zjg3M2NmNzI4ODhj
NzkyMjVhNDkuLjBlZmZhNjNmM2NmNGNlZjc3Y2ExMDM3ZTkyOWM2ZDUzNjM1MTNjMDcgMTAwNjQ0
Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL3BhZ2UvQ2FwdGlvblVzZXJQcmVmZXJlbmNlc01lZGlhQUYu
Y3BwCisrKyBiL1NvdXJjZS9XZWJDb3JlL3BhZ2UvQ2FwdGlvblVzZXJQcmVmZXJlbmNlc01lZGlh
QUYuY3BwCkBAIC02MTYsOSArNjE2LDkgQEAgVmVjdG9yPFN0cmluZz4gQ2FwdGlvblVzZXJQcmVm
ZXJlbmNlc01lZGlhQUY6OnByZWZlcnJlZEF1ZGlvQ2hhcmFjdGVyaXN0aWNzKCkgY28KICAgICAg
ICAgcmV0dXJuIENhcHRpb25Vc2VyUHJlZmVyZW5jZXM6OnByZWZlcnJlZEF1ZGlvQ2hhcmFjdGVy
aXN0aWNzKCk7CiAKICAgICBWZWN0b3I8U3RyaW5nPiB1c2VyUHJlZmVycmVkQXVkaW9DaGFyYWN0
ZXJpc3RpY3M7Ci0gICAgdXNlclByZWZlcnJlZEF1ZGlvQ2hhcmFjdGVyaXN0aWNzLnJlc2VydmVD
YXBhY2l0eShjaGFyYWN0ZXJpc3RpY0NvdW50KTsKKyAgICB1c2VyUHJlZmVycmVkQXVkaW9DaGFy
YWN0ZXJpc3RpY3MucmVzZXJ2ZUluaXRpYWxDYXBhY2l0eShjaGFyYWN0ZXJpc3RpY0NvdW50KTsK
ICAgICBmb3IgKENGSW5kZXggaSA9IDA7IGkgPCBjaGFyYWN0ZXJpc3RpY0NvdW50OyBpKyspCi0g
ICAgICAgIHVzZXJQcmVmZXJyZWRBdWRpb0NoYXJhY3RlcmlzdGljcy5hcHBlbmQoc3RhdGljX2Nh
c3Q8Q0ZTdHJpbmdSZWY+KENGQXJyYXlHZXRWYWx1ZUF0SW5kZXgoY2hhcmFjdGVyaXN0aWNzLmdl
dCgpLCBpKSkpOworICAgICAgICB1c2VyUHJlZmVycmVkQXVkaW9DaGFyYWN0ZXJpc3RpY3MudW5j
aGVja2VkQXBwZW5kKHN0YXRpY19jYXN0PENGU3RyaW5nUmVmPihDRkFycmF5R2V0VmFsdWVBdElu
ZGV4KGNoYXJhY3RlcmlzdGljcy5nZXQoKSwgaSkpKTsKIAogICAgIHJldHVybiB1c2VyUHJlZmVy
cmVkQXVkaW9DaGFyYWN0ZXJpc3RpY3M7CiB9CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9w
YWdlL0RPTVdpbmRvdy5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9wYWdlL0RPTVdpbmRvdy5jcHAKaW5k
ZXggMGZhNDE0ODI4NGUwNzVmNTFhYmIwYjNmNTU0ZTExMjZiNzkzYTUyNy4uMjI0YTdiN2IyMWY1
MjVmZTE4MTZkNDRhYzE1MGFhYWE2Mjc2OTc4OCAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUv
cGFnZS9ET01XaW5kb3cuY3BwCisrKyBiL1NvdXJjZS9XZWJDb3JlL3BhZ2UvRE9NV2luZG93LmNw
cApAQCAtMjQzLDEwICsyNDMsOSBAQCBib29sIERPTVdpbmRvdzo6ZGlzcGF0Y2hBbGxQZW5kaW5n
QmVmb3JlVW5sb2FkRXZlbnRzKCkKICAgICBpZiAoYWxyZWFkeURpc3BhdGNoZWQpCiAgICAgICAg
IHJldHVybiB0cnVlOwogCi0gICAgVmVjdG9yPFJlZjxET01XaW5kb3c+PiB3aW5kb3dzOwotICAg
IHdpbmRvd3MucmVzZXJ2ZUluaXRpYWxDYXBhY2l0eShzZXQuc2l6ZSgpKTsKLSAgICBmb3IgKGF1
dG8mIHdpbmRvdyA6IHNldCkKLSAgICAgICAgd2luZG93cy51bmNoZWNrZWRBcHBlbmQoKndpbmRv
dy5rZXkpOworICAgIGF1dG8gd2luZG93cyA9IFdURjo6bWFwKHNldCwgW10oYXV0byYgZW50cnkp
IC0+IFJlZjxET01XaW5kb3c+IHsKKyAgICAgICAgcmV0dXJuICplbnRyeS5rZXk7CisgICAgfSk7
CiAKICAgICBmb3IgKGF1dG8mIHdpbmRvdyA6IHdpbmRvd3MpIHsKICAgICAgICAgaWYgKCFzZXQu
Y29udGFpbnMod2luZG93LnB0cigpKSkKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3BhZ2Uv
SW50ZXJzZWN0aW9uT2JzZXJ2ZXIuY3BwIGIvU291cmNlL1dlYkNvcmUvcGFnZS9JbnRlcnNlY3Rp
b25PYnNlcnZlci5jcHAKaW5kZXggNWEyNzQxN2M2ODBhMWYxYmNiODI3OWM3MGE5ODU5NGQxYzQ0
MjA0ZC4uZGIwYzNmNGI2YTFiZDQ1NDNlZjNhMWY4MzQwM2RmY2JmZTk5Mzg2MSAxMDA2NDQKLS0t
IGEvU291cmNlL1dlYkNvcmUvcGFnZS9JbnRlcnNlY3Rpb25PYnNlcnZlci5jcHAKKysrIGIvU291
cmNlL1dlYkNvcmUvcGFnZS9JbnRlcnNlY3Rpb25PYnNlcnZlci5jcHAKQEAgLTEwMSw4ICsxMDEs
NyBAQCBFeGNlcHRpb25PcjxSZWY8SW50ZXJzZWN0aW9uT2JzZXJ2ZXI+PiBJbnRlcnNlY3Rpb25P
YnNlcnZlcjo6Y3JlYXRlKERvY3VtZW50JiBkbwogCiAgICAgVmVjdG9yPGRvdWJsZT4gdGhyZXNo
b2xkczsKICAgICBXVEY6OnN3aXRjaE9uKGluaXQudGhyZXNob2xkLCBbJnRocmVzaG9sZHNdIChk
b3VibGUgaW5pdFRocmVzaG9sZCkgewotICAgICAgICB0aHJlc2hvbGRzLnJlc2VydmVJbml0aWFs
Q2FwYWNpdHkoMSk7Ci0gICAgICAgIHRocmVzaG9sZHMudW5jaGVja2VkQXBwZW5kKGluaXRUaHJl
c2hvbGQpOworICAgICAgICB0aHJlc2hvbGRzLmFwcGVuZChpbml0VGhyZXNob2xkKTsKICAgICB9
LCBbJnRocmVzaG9sZHNdIChWZWN0b3I8ZG91YmxlPiYgaW5pdFRocmVzaG9sZHMpIHsKICAgICAg
ICAgdGhyZXNob2xkcyA9IFdURk1vdmUoaW5pdFRocmVzaG9sZHMpOwogICAgIH0pOwpkaWZmIC0t
Z2l0IGEvU291cmNlL1dlYkNvcmUvcGFnZS9QYWdlLmNwcCBiL1NvdXJjZS9XZWJDb3JlL3BhZ2Uv
UGFnZS5jcHAKaW5kZXggZmI1NmFlMTkxYTYyMjdkZDZlYTQ0ZTg2N2QzNDYyNTk0MGUxMGI1My4u
ZmQ2Y2Q1Mjc2YjY5NGY2OTQ3Njg0Yjc3MDlmM2M1MjNhZDAwYmZkMiAxMDA2NDQKLS0tIGEvU291
cmNlL1dlYkNvcmUvcGFnZS9QYWdlLmNwcAorKysgYi9Tb3VyY2UvV2ViQ29yZS9wYWdlL1BhZ2Uu
Y3BwCkBAIC05NjYsNyArOTY2LDcgQEAgdWludDMyX3QgUGFnZTo6cmVwbGFjZVJhbmdlc1dpdGhU
ZXh0KGNvbnN0IFZlY3RvcjxTaW1wbGVSYW5nZT4mIHJhbmdlc1RvUmVwbGFjZSwKICAgICAgICAg
aWYgKCFoaWdoZXN0Um9vdCB8fCBoaWdoZXN0Um9vdCAhPSBoaWdoZXN0RWRpdGFibGVSb290KG1h
a2VEZXByZWNhdGVkTGVnYWN5UG9zaXRpb24ocmFuZ2UuZW5kKSkgfHwgIWhpZ2hlc3RSb290LT5k
b2N1bWVudCgpLmZyYW1lKCkpCiAgICAgICAgICAgICBjb250aW51ZTsKICAgICAgICAgYXV0byBz
Y29wZSA9IG1ha2VSYW5nZVNlbGVjdGluZ05vZGVDb250ZW50cygqaGlnaGVzdFJvb3QpOwotICAg
ICAgICByZXBsYWNlbWVudFJhbmdlcy5hcHBlbmQoeyBXVEZNb3ZlKGhpZ2hlc3RSb290KSwgY2hh
cmFjdGVyUmFuZ2Uoc2NvcGUsIHJhbmdlKSB9KTsKKyAgICAgICAgcmVwbGFjZW1lbnRSYW5nZXMu
dW5jaGVja2VkQXBwZW5kKHsgV1RGTW92ZShoaWdoZXN0Um9vdCksIGNoYXJhY3RlclJhbmdlKHNj
b3BlLCByYW5nZSkgfSk7CiAgICAgfQogCiAgICAgcmVwbGFjZVJhbmdlcygqdGhpcywgcmVwbGFj
ZW1lbnRSYW5nZXMsIHJlcGxhY2VtZW50VGV4dCk7CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29y
ZS9wYWdlL2NzcC9Db250ZW50U2VjdXJpdHlQb2xpY3kuY3BwIGIvU291cmNlL1dlYkNvcmUvcGFn
ZS9jc3AvQ29udGVudFNlY3VyaXR5UG9saWN5LmNwcAppbmRleCBiNTI1Y2I2YmVlNzRmMzdkZjAx
OWFmNTJlOGFhMjZiYzNiZmE4MWYzLi5lYTZkMGRlYWM4OTQzODgyZWZhOGZmMzhjMDI1OTZhMzE0
NWNmZDk3IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9wYWdlL2NzcC9Db250ZW50U2VjdXJp
dHlQb2xpY3kuY3BwCisrKyBiL1NvdXJjZS9XZWJDb3JlL3BhZ2UvY3NwL0NvbnRlbnRTZWN1cml0
eVBvbGljeS5jcHAKQEAgLTE2MSw5ICsxNjEsOSBAQCBDb250ZW50U2VjdXJpdHlQb2xpY3lSZXNw
b25zZUhlYWRlcnMgQ29udGVudFNlY3VyaXR5UG9saWN5OjpyZXNwb25zZUhlYWRlcnMoKSBjbwog
ewogICAgIGlmICghbV9jYWNoZWRSZXNwb25zZUhlYWRlcnMpIHsKICAgICAgICAgQ29udGVudFNl
Y3VyaXR5UG9saWN5UmVzcG9uc2VIZWFkZXJzIHJlc3VsdDsKLSAgICAgICAgcmVzdWx0Lm1faGVh
ZGVycy5yZXNlcnZlSW5pdGlhbENhcGFjaXR5KG1fcG9saWNpZXMuc2l6ZSgpKTsKLSAgICAgICAg
Zm9yIChhdXRvJiBwb2xpY3kgOiBtX3BvbGljaWVzKQotICAgICAgICAgICAgcmVzdWx0Lm1faGVh
ZGVycy51bmNoZWNrZWRBcHBlbmQoeyBwb2xpY3ktPmhlYWRlcigpLCBwb2xpY3ktPmhlYWRlclR5
cGUoKSB9KTsKKyAgICAgICAgcmVzdWx0Lm1faGVhZGVycyA9IG1fcG9saWNpZXMubWFwKFtdKGF1
dG8mIHBvbGljeSkgeworICAgICAgICAgICAgcmV0dXJuIHN0ZDo6bWFrZV9wYWlyKHBvbGljeS0+
aGVhZGVyKCksIHBvbGljeS0+aGVhZGVyVHlwZSgpKTsKKyAgICAgICAgfSk7CiAgICAgICAgIHJl
c3VsdC5tX2h0dHBTdGF0dXNDb2RlID0gbV9odHRwU3RhdHVzQ29kZTsKICAgICAgICAgbV9jYWNo
ZWRSZXNwb25zZUhlYWRlcnMgPSBXVEZNb3ZlKHJlc3VsdCk7CiAgICAgfQpkaWZmIC0tZ2l0IGEv
U291cmNlL1dlYkNvcmUvcGFnZS9jc3AvQ29udGVudFNlY3VyaXR5UG9saWN5UmVzcG9uc2VIZWFk
ZXJzLmNwcCBiL1NvdXJjZS9XZWJDb3JlL3BhZ2UvY3NwL0NvbnRlbnRTZWN1cml0eVBvbGljeVJl
c3BvbnNlSGVhZGVycy5jcHAKaW5kZXggZTcxYjZhZDMxY2E3YmYxMjlmNzI0N2ZiYmYyNjNlZDZj
OGU2NTIxYS4uYTA5MzRkN2Y1MzU1N2Y5NjVmMGI1MmRkMzY4MzhkZDZhNDY5MzlmZiAxMDA2NDQK
LS0tIGEvU291cmNlL1dlYkNvcmUvcGFnZS9jc3AvQ29udGVudFNlY3VyaXR5UG9saWN5UmVzcG9u
c2VIZWFkZXJzLmNwcAorKysgYi9Tb3VyY2UvV2ViQ29yZS9wYWdlL2NzcC9Db250ZW50U2VjdXJp
dHlQb2xpY3lSZXNwb25zZUhlYWRlcnMuY3BwCkBAIC0yOCw2ICsyOCw3IEBACiAKICNpbmNsdWRl
ICJIVFRQSGVhZGVyTmFtZXMuaCIKICNpbmNsdWRlICJSZXNvdXJjZVJlc3BvbnNlLmgiCisjaW5j
bHVkZSA8d3RmL0Nyb3NzVGhyZWFkQ29waWVyLmg+CiAKIG5hbWVzcGFjZSBXZWJDb3JlIHsKIApA
QCAtNDcsOSArNDgsNyBAQCBDb250ZW50U2VjdXJpdHlQb2xpY3lSZXNwb25zZUhlYWRlcnM6OkNv
bnRlbnRTZWN1cml0eVBvbGljeVJlc3BvbnNlSGVhZGVycyhjb25zdAogQ29udGVudFNlY3VyaXR5
UG9saWN5UmVzcG9uc2VIZWFkZXJzIENvbnRlbnRTZWN1cml0eVBvbGljeVJlc3BvbnNlSGVhZGVy
czo6aXNvbGF0ZWRDb3B5KCkgY29uc3QKIHsKICAgICBDb250ZW50U2VjdXJpdHlQb2xpY3lSZXNw
b25zZUhlYWRlcnMgaXNvbGF0ZWRDb3B5OwotICAgIGlzb2xhdGVkQ29weS5tX2hlYWRlcnMucmVz
ZXJ2ZUluaXRpYWxDYXBhY2l0eShtX2hlYWRlcnMuc2l6ZSgpKTsKLSAgICBmb3IgKGF1dG8mIGhl
YWRlciA6IG1faGVhZGVycykKLSAgICAgICAgaXNvbGF0ZWRDb3B5Lm1faGVhZGVycy51bmNoZWNr
ZWRBcHBlbmQoeyBoZWFkZXIuZmlyc3QuaXNvbGF0ZWRDb3B5KCksIGhlYWRlci5zZWNvbmQgfSk7
CisgICAgaXNvbGF0ZWRDb3B5Lm1faGVhZGVycyA9IGNyb3NzVGhyZWFkQ29weShtX2hlYWRlcnMp
OwogICAgIGlzb2xhdGVkQ29weS5tX2h0dHBTdGF0dXNDb2RlID0gbV9odHRwU3RhdHVzQ29kZTsK
ICAgICByZXR1cm4gaXNvbGF0ZWRDb3B5OwogfQpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUv
cGFnZS9tYWMvSW1hZ2VPdmVybGF5Q29udHJvbGxlck1hYy5tbSBiL1NvdXJjZS9XZWJDb3JlL3Bh
Z2UvbWFjL0ltYWdlT3ZlcmxheUNvbnRyb2xsZXJNYWMubW0KaW5kZXggYWVkNThiOTA2MGY5MjQz
YzQ3NzlhMDQ4ZjUxNWY2YmFkZDE5NDUwOC4uOGRlMGVmY2MzMGZlOTQwYTNhYWJkNjkzMWI0NDdm
ZjFmMmE4MzcwNSAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvcGFnZS9tYWMvSW1hZ2VPdmVy
bGF5Q29udHJvbGxlck1hYy5tbQorKysgYi9Tb3VyY2UvV2ViQ29yZS9wYWdlL21hYy9JbWFnZU92
ZXJsYXlDb250cm9sbGVyTWFjLm1tCkBAIC05NCw3ICs5NCw3IEBAIHZvaWQgSW1hZ2VPdmVybGF5
Q29udHJvbGxlcjo6dXBkYXRlRGF0YURldGVjdG9ySGlnaGxpZ2h0cyhjb25zdCBIVE1MRWxlbWVu
dCYgb3ZlCiAjZWxzZQogICAgICAgICBhdXRvIGhpZ2hsaWdodCA9IGFkb3B0Q0YoUEFMOjpzb2Z0
TGlua19EYXRhRGV0ZWN0b3JzX0RESGlnaGxpZ2h0Q3JlYXRlV2l0aFJlY3RzSW5WaXNpYmxlUmVj
dFdpdGhTdHlsZUFuZERpcmVjdGlvbihudWxscHRyLCAmZWxlbWVudEJvdW5kcywgMSwgbWFpbkZy
YW1lVmlldy0+dmlzaWJsZUNvbnRlbnRSZWN0KCksIHN0YXRpY19jYXN0PERESGlnaGxpZ2h0U3R5
bGU+KERESGlnaGxpZ2h0U3R5bGVCdWJibGVTdGFuZGFyZCkgfCBzdGF0aWNfY2FzdDxEREhpZ2hs
aWdodFN0eWxlPihEREhpZ2hsaWdodFN0eWxlU3RhbmRhcmRJY29uQXJyb3cpLCBZRVMsIE5TV3Jp
dGluZ0RpcmVjdGlvbk5hdHVyYWwsIE5PLCBZRVMpKTsKICNlbmRpZgotICAgICAgICBtX2RhdGFE
ZXRlY3RvckNvbnRhaW5lcnNBbmRIaWdobGlnaHRzLmFwcGVuZCh7IGVsZW1lbnQsIERhdGFEZXRl
Y3RvckhpZ2hsaWdodDo6Y3JlYXRlRm9ySW1hZ2VPdmVybGF5KCptX3BhZ2UsICp0aGlzLCBXVEZN
b3ZlKGhpZ2hsaWdodCksICptYWtlUmFuZ2VTZWxlY3RpbmdOb2RlKGVsZW1lbnQuZ2V0KCkpKSB9
KTsKKyAgICAgICAgbV9kYXRhRGV0ZWN0b3JDb250YWluZXJzQW5kSGlnaGxpZ2h0cy51bmNoZWNr
ZWRBcHBlbmQoeyBlbGVtZW50LCBEYXRhRGV0ZWN0b3JIaWdobGlnaHQ6OmNyZWF0ZUZvckltYWdl
T3ZlcmxheSgqbV9wYWdlLCAqdGhpcywgV1RGTW92ZShoaWdobGlnaHQpLCAqbWFrZVJhbmdlU2Vs
ZWN0aW5nTm9kZShlbGVtZW50LmdldCgpKSkgfSk7CiAgICAgfQogfQogCmRpZmYgLS1naXQgYS9T
b3VyY2UvV2ViQ29yZS9wYWdlL21hYy9TZXJ2aWNlc092ZXJsYXlDb250cm9sbGVyLm1tIGIvU291
cmNlL1dlYkNvcmUvcGFnZS9tYWMvU2VydmljZXNPdmVybGF5Q29udHJvbGxlci5tbQppbmRleCA2
NTcxZjkwOGU3OTMyN2QyYTJiN2FmY2QyOTc0MzFkYzI3Njk1MmQ5Li40MjRlMTVmMWRjYmU5YjRh
YTIyOGFkMmU4ZWE5N2Y5ODEzMTI3ZjFiIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9wYWdl
L21hYy9TZXJ2aWNlc092ZXJsYXlDb250cm9sbGVyLm1tCisrKyBiL1NvdXJjZS9XZWJDb3JlL3Bh
Z2UvbWFjL1NlcnZpY2VzT3ZlcmxheUNvbnRyb2xsZXIubW0KQEAgLTM5Miw5ICszOTIsNiBAQCB2
b2lkIFNlcnZpY2VzT3ZlcmxheUNvbnRyb2xsZXI6OmJ1aWxkU2VsZWN0aW9uSGlnaGxpZ2h0KCkK
IAogICAgIEhhc2hTZXQ8UmVmUHRyPERhdGFEZXRlY3RvckhpZ2hsaWdodD4+IG5ld1BvdGVudGlh
bEhpZ2hsaWdodHM7CiAKLSAgICBWZWN0b3I8Q0dSZWN0PiBjZ1JlY3RzOwotICAgIGNnUmVjdHMu
cmVzZXJ2ZUNhcGFjaXR5KG1fY3VycmVudFNlbGVjdGlvblJlY3RzLnNpemUoKSk7Ci0KICAgICBp
ZiAoYXV0byBzZWxlY3Rpb25SYW5nZSA9IG1fcGFnZS5zZWxlY3Rpb24oKS5maXJzdFJhbmdlKCkp
IHsKICAgICAgICAgRnJhbWVWaWV3KiBtYWluRnJhbWVWaWV3ID0gbWFpbkZyYW1lKCkudmlldygp
OwogICAgICAgICBpZiAoIW1haW5GcmFtZVZpZXcpCkBAIC00MDQsMTAgKzQwMSwxMyBAQCB2b2lk
IFNlcnZpY2VzT3ZlcmxheUNvbnRyb2xsZXI6OmJ1aWxkU2VsZWN0aW9uSGlnaGxpZ2h0KCkKICAg
ICAgICAgaWYgKCF2aWV3Rm9yUmFuZ2UpCiAgICAgICAgICAgICByZXR1cm47CiAKKyAgICAgICAg
VmVjdG9yPENHUmVjdD4gY2dSZWN0czsKKyAgICAgICAgY2dSZWN0cy5yZXNlcnZlSW5pdGlhbENh
cGFjaXR5KG1fY3VycmVudFNlbGVjdGlvblJlY3RzLnNpemUoKSk7CisKICAgICAgICAgZm9yIChh
dXRvJiByZWN0IDogbV9jdXJyZW50U2VsZWN0aW9uUmVjdHMpIHsKICAgICAgICAgICAgIEludFJl
Y3QgY3VycmVudFJlY3QgPSBzbmFwcGVkSW50UmVjdChyZWN0KTsKICAgICAgICAgICAgIGN1cnJl
bnRSZWN0LnNldExvY2F0aW9uKG1haW5GcmFtZVZpZXctPndpbmRvd1RvQ29udGVudHModmlld0Zv
clJhbmdlLT5jb250ZW50c1RvV2luZG93KGN1cnJlbnRSZWN0LmxvY2F0aW9uKCkpKSk7Ci0gICAg
ICAgICAgICBjZ1JlY3RzLmFwcGVuZChjdXJyZW50UmVjdCk7CisgICAgICAgICAgICBjZ1JlY3Rz
LnVuY2hlY2tlZEFwcGVuZChjdXJyZW50UmVjdCk7CiAgICAgICAgIH0KIAogICAgICAgICBpZiAo
IWNnUmVjdHMuaXNFbXB0eSgpKSB7CkBAIC02MzksMTMgKzYzOSwxMSBAQCB2b2lkIFNlcnZpY2Vz
T3ZlcmxheUNvbnRyb2xsZXI6OmhhbmRsZUNsaWNrKGNvbnN0IEludFBvaW50JiBjbGlja1BvaW50
LCBEYXRhRGV0ZQogICAgIEludFBvaW50IHdpbmRvd1BvaW50ID0gZnJhbWVWaWV3LT5jb250ZW50
c1RvV2luZG93KGNsaWNrUG9pbnQpOwogCiAgICAgaWYgKGhpZ2hsaWdodC50eXBlKCkgPT0gRGF0
YURldGVjdG9ySGlnaGxpZ2h0OjpUeXBlOjpTZWxlY3Rpb24pIHsKLSAgICAgICAgYXV0byB0ZWxl
cGhvbmVOdW1iZXJSYW5nZXMgPSB0ZWxlcGhvbmVOdW1iZXJSYW5nZXNGb3JGb2N1c2VkRnJhbWUo
KTsKLSAgICAgICAgVmVjdG9yPFN0cmluZz4gc2VsZWN0ZWRUZWxlcGhvbmVOdW1iZXJzOwotICAg
ICAgICBzZWxlY3RlZFRlbGVwaG9uZU51bWJlcnMucmVzZXJ2ZUNhcGFjaXR5KHRlbGVwaG9uZU51
bWJlclJhbmdlcy5zaXplKCkpOwotICAgICAgICBmb3IgKGF1dG8mIHJhbmdlIDogdGVsZXBob25l
TnVtYmVyUmFuZ2VzKQotICAgICAgICAgICAgc2VsZWN0ZWRUZWxlcGhvbmVOdW1iZXJzLmFwcGVu
ZChwbGFpblRleHQocmFuZ2UpKTsKKyAgICAgICAgYXV0byBzZWxlY3RlZFRlbGVwaG9uZU51bWJl
cnMgPSB0ZWxlcGhvbmVOdW1iZXJSYW5nZXNGb3JGb2N1c2VkRnJhbWUoKS5tYXAoW10oYXV0byYg
cmFuZ2UpIHsKKyAgICAgICAgICAgIHJldHVybiBwbGFpblRleHQocmFuZ2UpOworICAgICAgICB9
KTsKIAotICAgICAgICBtX3BhZ2UuY2hyb21lKCkuY2xpZW50KCkuaGFuZGxlU2VsZWN0aW9uU2Vy
dmljZUNsaWNrKENoZWNrZWRSZWYobV9wYWdlLmZvY3VzQ29udHJvbGxlcigpKS0+Zm9jdXNlZE9y
TWFpbkZyYW1lKCkuc2VsZWN0aW9uKCksIHNlbGVjdGVkVGVsZXBob25lTnVtYmVycywgd2luZG93
UG9pbnQpOworICAgICAgICBtX3BhZ2UuY2hyb21lKCkuY2xpZW50KCkuaGFuZGxlU2VsZWN0aW9u
U2VydmljZUNsaWNrKENoZWNrZWRSZWYobV9wYWdlLmZvY3VzQ29udHJvbGxlcigpKS0+Zm9jdXNl
ZE9yTWFpbkZyYW1lKCkuc2VsZWN0aW9uKCksIFdURk1vdmUoc2VsZWN0ZWRUZWxlcGhvbmVOdW1i
ZXJzKSwgd2luZG93UG9pbnQpOwogICAgIH0gZWxzZSBpZiAoaGlnaGxpZ2h0LnR5cGUoKSA9PSBE
YXRhRGV0ZWN0b3JIaWdobGlnaHQ6OlR5cGU6OlRlbGVwaG9uZU51bWJlcikKICAgICAgICAgbV9w
YWdlLmNocm9tZSgpLmNsaWVudCgpLmhhbmRsZVRlbGVwaG9uZU51bWJlckNsaWNrKHBsYWluVGV4
dChoaWdobGlnaHQucmFuZ2UoKSksIHdpbmRvd1BvaW50LCBmcmFtZVZpZXctPmNvbnRlbnRzVG9X
aW5kb3coQ2hlY2tlZFJlZihtX3BhZ2UuZm9jdXNDb250cm9sbGVyKCkpLT5mb2N1c2VkT3JNYWlu
RnJhbWUoKS5lZGl0b3IoKS5maXJzdFJlY3RGb3JSYW5nZShoaWdobGlnaHQucmFuZ2UoKSkpKTsK
IH0KZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3BhZ2Uvc2Nyb2xsaW5nL0FzeW5jU2Nyb2xs
aW5nQ29vcmRpbmF0b3IuY3BwIGIvU291cmNlL1dlYkNvcmUvcGFnZS9zY3JvbGxpbmcvQXN5bmNT
Y3JvbGxpbmdDb29yZGluYXRvci5jcHAKaW5kZXggODJmNzU3YTI3YjNiMDcyNDAwNmQ3MmE1Mzgy
ZTM0ZmE0Y2E5NDY4Yy4uNTJkMzM1MzRlN2U0NDY3Y2ZmOWEwZWYwNjczYjc0MjBjMjBlNzlhNCAx
MDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvcGFnZS9zY3JvbGxpbmcvQXN5bmNTY3JvbGxpbmdD
b29yZGluYXRvci5jcHAKKysrIGIvU291cmNlL1dlYkNvcmUvcGFnZS9zY3JvbGxpbmcvQXN5bmNT
Y3JvbGxpbmdDb29yZGluYXRvci5jcHAKQEAgLTY3NiwxMiArNjc2LDkgQEAgVmVjdG9yPFNjcm9s
bGluZ05vZGVJRD4gQXN5bmNTY3JvbGxpbmdDb29yZGluYXRvcjo6Y2hpbGRyZW5PZk5vZGUoU2Ny
b2xsaW5nTm9kZUkKICAgICBpZiAoIWNoaWxkcmVuIHx8IGNoaWxkcmVuLT5pc0VtcHR5KCkpCiAg
ICAgICAgIHJldHVybiB7IH07CiAgICAgCi0gICAgVmVjdG9yPFNjcm9sbGluZ05vZGVJRD4gY2hp
bGROb2RlSURzOwotICAgIGNoaWxkTm9kZUlEcy5yZXNlcnZlSW5pdGlhbENhcGFjaXR5KGNoaWxk
cmVuLT5zaXplKCkpOwotICAgIGZvciAoY29uc3QgYXV0byYgY2hpbGROb2RlIDogKmNoaWxkcmVu
KQotICAgICAgICBjaGlsZE5vZGVJRHMudW5jaGVja2VkQXBwZW5kKGNoaWxkTm9kZS0+c2Nyb2xs
aW5nTm9kZUlEKCkpOwotCi0gICAgcmV0dXJuIGNoaWxkTm9kZUlEczsKKyAgICByZXR1cm4gY2hp
bGRyZW4tPm1hcChbXShhdXRvJiBjaGlsZCkgeworICAgICAgICByZXR1cm4gY2hpbGQtPnNjcm9s
bGluZ05vZGVJRCgpOworICAgIH0pOwogfQogCiB2b2lkIEFzeW5jU2Nyb2xsaW5nQ29vcmRpbmF0
b3I6OnJlY29uY2lsZVZpZXdwb3J0Q29uc3RyYWluZWRMYXllclBvc2l0aW9ucyhTY3JvbGxpbmdO
b2RlSUQgc2Nyb2xsaW5nTm9kZUlELCBjb25zdCBMYXlvdXRSZWN0JiB2aWV3cG9ydFJlY3QsIFNj
cm9sbGluZ0xheWVyUG9zaXRpb25BY3Rpb24gYWN0aW9uKQpkaWZmIC0tZ2l0IGEvU291cmNlL1dl
YkNvcmUvcGFnZS9zY3JvbGxpbmcvU2Nyb2xsU25hcE9mZnNldHNJbmZvLmNwcCBiL1NvdXJjZS9X
ZWJDb3JlL3BhZ2Uvc2Nyb2xsaW5nL1Njcm9sbFNuYXBPZmZzZXRzSW5mby5jcHAKaW5kZXggNjMx
MTEzMzcyZTNjN2ZiMDVkMTM0MWFmYTQ0YjYzOGIzZTI1MjZkOS4uMTg0NTVlOGQwNDJhYjhmNmJh
Nzc2N2JhYmQ4Mjk4NzVlZTQ0OTQ5ZiAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvcGFnZS9z
Y3JvbGxpbmcvU2Nyb2xsU25hcE9mZnNldHNJbmZvLmNwcAorKysgYi9Tb3VyY2UvV2ViQ29yZS9w
YWdlL3Njcm9sbGluZy9TY3JvbGxTbmFwT2Zmc2V0c0luZm8uY3BwCkBAIC00MjAsMjUgKzQyMCwx
OSBAQCBzdGF0aWMgU2Nyb2xsU25hcE9mZnNldHNJbmZvPE91dHB1dFR5cGUsIE91dHB1dFJlY3RU
eXBlPiBjb252ZXJ0T2Zmc2V0SW5mbyhjb25zdAogewogICAgIGF1dG8gY29udmVydE9mZnNldHMg
PSBbc2NhbGVGYWN0b3JdKGNvbnN0IFZlY3RvcjxTbmFwT2Zmc2V0PElucHV0VHlwZT4+JiBpbnB1
dCkKICAgICB7Ci0gICAgICAgIFZlY3RvcjxTbmFwT2Zmc2V0PE91dHB1dFR5cGU+PiBvdXRwdXQ7
Ci0gICAgICAgIG91dHB1dC5yZXNlcnZlSW5pdGlhbENhcGFjaXR5KGlucHV0LnNpemUoKSk7Ci0g
ICAgICAgIGZvciAoYXV0byYgb2Zmc2V0IDogaW5wdXQpCi0gICAgICAgICAgICBvdXRwdXQudW5j
aGVja2VkQXBwZW5kKHsgY29udmVydE9mZnNldFVuaXQob2Zmc2V0Lm9mZnNldCwgc2NhbGVGYWN0
b3IpLCBvZmZzZXQuc3RvcCwgb2Zmc2V0Lmhhc1NuYXBBcmVhTGFyZ2VyVGhhblZpZXdwb3J0LCBv
ZmZzZXQuc25hcEFyZWFJbmRpY2VzIH0pOwotICAgICAgICByZXR1cm4gb3V0cHV0OworICAgICAg
ICByZXR1cm4gaW5wdXQubWFwKFtzY2FsZUZhY3Rvcl0oYXV0byYgb2Zmc2V0KSAtPiBTbmFwT2Zm
c2V0PE91dHB1dFR5cGU+IHsKKyAgICAgICAgICAgIHJldHVybiB7IGNvbnZlcnRPZmZzZXRVbml0
KG9mZnNldC5vZmZzZXQsIHNjYWxlRmFjdG9yKSwgb2Zmc2V0LnN0b3AsIG9mZnNldC5oYXNTbmFw
QXJlYUxhcmdlclRoYW5WaWV3cG9ydCwgb2Zmc2V0LnNuYXBBcmVhSW5kaWNlcyB9OworICAgICAg
ICB9KTsKICAgICB9OwogCiAgICAgYXV0byBjb252ZXJ0UmVjdHMgPSBbc2NhbGVGYWN0b3JdKGNv
bnN0IFZlY3RvcjxJbnB1dFJlY3RUeXBlPiYgaW5wdXQpCiAgICAgewotICAgICAgICBWZWN0b3I8
T3V0cHV0UmVjdFR5cGU+IG91dHB1dDsKLSAgICAgICAgb3V0cHV0LnJlc2VydmVJbml0aWFsQ2Fw
YWNpdHkoaW5wdXQuc2l6ZSgpKTsKLSAgICAgICAgZm9yIChhdXRvJiByZWN0IDogaW5wdXQpIHsK
LSAgICAgICAgICAgIE91dHB1dFJlY3RUeXBlIG91dHB1dFJlY3QoCisgICAgICAgIHJldHVybiBp
bnB1dC5tYXAoW3NjYWxlRmFjdG9yXShhdXRvJiByZWN0KSAtPiBPdXRwdXRSZWN0VHlwZSB7Cisg
ICAgICAgICAgICByZXR1cm4gewogICAgICAgICAgICAgICAgIGNvbnZlcnRPZmZzZXRVbml0KHJl
Y3QueCgpLCBzY2FsZUZhY3RvciksIGNvbnZlcnRPZmZzZXRVbml0KHJlY3QueSgpLCBzY2FsZUZh
Y3RvciksCi0gICAgICAgICAgICAgICAgY29udmVydE9mZnNldFVuaXQocmVjdC53aWR0aCgpLCBz
Y2FsZUZhY3RvciksIGNvbnZlcnRPZmZzZXRVbml0KHJlY3QuaGVpZ2h0KCksIHNjYWxlRmFjdG9y
KSk7Ci0gICAgICAgICAgICBvdXRwdXQudW5jaGVja2VkQXBwZW5kKG91dHB1dFJlY3QpOwotICAg
ICAgICB9Ci0KLSAgICAgICAgcmV0dXJuIG91dHB1dDsKKyAgICAgICAgICAgICAgICBjb252ZXJ0
T2Zmc2V0VW5pdChyZWN0LndpZHRoKCksIHNjYWxlRmFjdG9yKSwgY29udmVydE9mZnNldFVuaXQo
cmVjdC5oZWlnaHQoKSwgc2NhbGVGYWN0b3IpCisgICAgICAgICAgICB9OworICAgICAgICB9KTsK
ICAgICB9OwogCiAgICAgcmV0dXJuIHsKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3BsYXRm
b3JtL0xlbmd0aC5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9MZW5ndGguY3BwCmluZGV4
IDk1NDljZmMyZWVmYjNhYjc3OTI4OTgzMGExNzc0MmM1NzIxZGVkMWQuLmM5OTY5Y2U3OWM2OThh
NGM5MDNlMGU4OTY4ZDg4MzQ0ODk5NDIzMjQgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL3Bs
YXRmb3JtL0xlbmd0aC5jcHAKKysrIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vTGVuZ3RoLmNw
cApAQCAtMjgyLDEwICsyODIsNyBAQCBib29sIExlbmd0aDo6aXNDYWxjdWxhdGVkRXF1YWwoY29u
c3QgTGVuZ3RoJiBvdGhlcikgY29uc3QKIAogc3RhdGljIExlbmd0aCBtYWtlQ2FsY3VsYXRlZChD
YWxjT3BlcmF0b3IgY2FsY09wZXJhdG9yLCBjb25zdCBMZW5ndGgmIGEsIGNvbnN0IExlbmd0aCYg
YikKIHsKLSAgICBWZWN0b3I8c3RkOjp1bmlxdWVfcHRyPENhbGNFeHByZXNzaW9uTm9kZT4+IGxl
bmd0aHM7Ci0gICAgbGVuZ3Rocy5yZXNlcnZlSW5pdGlhbENhcGFjaXR5KDIpOwotICAgIGxlbmd0
aHMudW5jaGVja2VkQXBwZW5kKG1ha2VVbmlxdWU8Q2FsY0V4cHJlc3Npb25MZW5ndGg+KGEpKTsK
LSAgICBsZW5ndGhzLnVuY2hlY2tlZEFwcGVuZChtYWtlVW5pcXVlPENhbGNFeHByZXNzaW9uTGVu
Z3RoPihiKSk7CisgICAgYXV0byBsZW5ndGhzID0gVmVjdG9yPHN0ZDo6dW5pcXVlX3B0cjxDYWxj
RXhwcmVzc2lvbk5vZGU+Pjo6ZnJvbShtYWtlVW5pcXVlPENhbGNFeHByZXNzaW9uTGVuZ3RoPihh
KSwgbWFrZVVuaXF1ZTxDYWxjRXhwcmVzc2lvbkxlbmd0aD4oYikpOwogICAgIGF1dG8gb3AgPSBt
YWtlVW5pcXVlPENhbGNFeHByZXNzaW9uT3BlcmF0aW9uPihXVEZNb3ZlKGxlbmd0aHMpLCBjYWxj
T3BlcmF0b3IpOwogICAgIHJldHVybiBMZW5ndGgoQ2FsY3VsYXRpb25WYWx1ZTo6Y3JlYXRlKFdU
Rk1vdmUob3ApLCBWYWx1ZVJhbmdlOjpBbGwpKTsKIH0KZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJD
b3JlL3BsYXRmb3JtL2FuaW1hdGlvbi9BbmltYXRpb25MaXN0LmNwcCBiL1NvdXJjZS9XZWJDb3Jl
L3BsYXRmb3JtL2FuaW1hdGlvbi9BbmltYXRpb25MaXN0LmNwcAppbmRleCAwZTM2ODUzMjFjMTQ4
ODExZDY1YjllZjcwOTQ2NGFjMDZmNzFlMzA3Li42MjA0NTdjMjNiMzU3YTU4NzYwZWM5YjdiZjcw
MzdkZDg3N2ViMjdlIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9hbmltYXRp
b24vQW5pbWF0aW9uTGlzdC5jcHAKKysrIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vYW5pbWF0
aW9uL0FuaW1hdGlvbkxpc3QuY3BwCkBAIC0zNiwxNCArMzYsMTMgQEAgaWYgKGkpIHsgXAogQW5p
bWF0aW9uTGlzdDo6QW5pbWF0aW9uTGlzdCgpID0gZGVmYXVsdDsKIAogQW5pbWF0aW9uTGlzdDo6
QW5pbWF0aW9uTGlzdChjb25zdCBBbmltYXRpb25MaXN0JiBvdGhlciwgQ29weUJlaGF2aW9yIGNv
cHlCZWhhdmlvcikKLSAgICA6IFJlZkNvdW50ZWQoKQogewotICAgIG1fYW5pbWF0aW9ucy5yZXNl
cnZlSW5pdGlhbENhcGFjaXR5KG90aGVyLnNpemUoKSk7Ci0gICAgZm9yIChhdXRvJiBhbmltYXRp
b24gOiBvdGhlci5tX2FuaW1hdGlvbnMpIHsKLSAgICAgICAgaWYgKGNvcHlCZWhhdmlvciA9PSBD
b3B5QmVoYXZpb3I6OlJlZmVyZW5jZSkKLSAgICAgICAgICAgIG1fYW5pbWF0aW9ucy51bmNoZWNr
ZWRBcHBlbmQoYW5pbWF0aW9uLmdldCgpKTsKLSAgICAgICAgZWxzZQotICAgICAgICAgICAgbV9h
bmltYXRpb25zLnVuY2hlY2tlZEFwcGVuZChBbmltYXRpb246OmNyZWF0ZShhbmltYXRpb24uZ2V0
KCkpKTsKKyAgICBpZiAoY29weUJlaGF2aW9yID09IENvcHlCZWhhdmlvcjo6UmVmZXJlbmNlKQor
ICAgICAgICBtX2FuaW1hdGlvbnMgPSBvdGhlci5tX2FuaW1hdGlvbnM7CisgICAgZWxzZSB7Cisg
ICAgICAgIG1fYW5pbWF0aW9ucyA9IG90aGVyLm1fYW5pbWF0aW9ucy5tYXAoW10oYXV0byYgYW5p
bWF0aW9uKSB7CisgICAgICAgICAgICByZXR1cm4gQW5pbWF0aW9uOjpjcmVhdGUoYW5pbWF0aW9u
LmdldCgpKTsKKyAgICAgICAgfSk7CiAgICAgfQogfQogCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2Vi
Q29yZS9wbGF0Zm9ybS9jb2NvYS9QbGF5YmFja1Nlc3Npb25Nb2RlbE1lZGlhRWxlbWVudC5tbSBi
L1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2NvY29hL1BsYXliYWNrU2Vzc2lvbk1vZGVsTWVkaWFF
bGVtZW50Lm1tCmluZGV4IGJmMDEzNGQ4NzY2MDhiNjUyZWU1Mzg0MzZmYmEwZGY5YzJhY2E4YzMu
LjA1ZWEyMTExZWI1ZDQ1M2NiMjhkOGU3N2VmM2NiZjVmMzU2NzE5ODkgMTAwNjQ0Ci0tLSBhL1Nv
dXJjZS9XZWJDb3JlL3BsYXRmb3JtL2NvY29hL1BsYXliYWNrU2Vzc2lvbk1vZGVsTWVkaWFFbGVt
ZW50Lm1tCisrKyBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2NvY29hL1BsYXliYWNrU2Vzc2lv
bk1vZGVsTWVkaWFFbGVtZW50Lm1tCkBAIC01MTEsMTggKzUxMSwxMyBAQCBib29sIFBsYXliYWNr
U2Vzc2lvbk1vZGVsTWVkaWFFbGVtZW50OjpjYW5QbGF5RmFzdFJldmVyc2UoKSBjb25zdAogCiBW
ZWN0b3I8TWVkaWFTZWxlY3Rpb25PcHRpb24+IFBsYXliYWNrU2Vzc2lvbk1vZGVsTWVkaWFFbGVt
ZW50OjphdWRpb01lZGlhU2VsZWN0aW9uT3B0aW9ucygpIGNvbnN0CiB7Ci0gICAgVmVjdG9yPE1l
ZGlhU2VsZWN0aW9uT3B0aW9uPiBhdWRpb09wdGlvbnM7Ci0KICAgICBpZiAoIW1fbWVkaWFFbGVt
ZW50IHx8ICFtX21lZGlhRWxlbWVudC0+ZG9jdW1lbnQoKS5wYWdlKCkpCi0gICAgICAgIHJldHVy
biBhdWRpb09wdGlvbnM7CisgICAgICAgIHJldHVybiB7IH07CiAKICAgICBhdXRvJiBjYXB0aW9u
UHJlZmVyZW5jZXMgPSBtX21lZGlhRWxlbWVudC0+ZG9jdW1lbnQoKS5wYWdlKCktPmdyb3VwKCku
ZW5zdXJlQ2FwdGlvblByZWZlcmVuY2VzKCk7Ci0KLSAgICBhdWRpb09wdGlvbnMucmVzZXJ2ZUlu
aXRpYWxDYXBhY2l0eShtX2F1ZGlvVHJhY2tzRm9yTWVudS5zaXplKCkpOwotICAgIGZvciAoYXV0
byYgYXVkaW9UcmFjayA6IG1fYXVkaW9UcmFja3NGb3JNZW51KQotICAgICAgICBhdWRpb09wdGlv
bnMudW5jaGVja2VkQXBwZW5kKGNhcHRpb25QcmVmZXJlbmNlcy5tZWRpYVNlbGVjdGlvbk9wdGlv
bkZvclRyYWNrKGF1ZGlvVHJhY2suZ2V0KCkpKTsKLQotICAgIHJldHVybiBhdWRpb09wdGlvbnM7
CisgICAgcmV0dXJuIG1fYXVkaW9UcmFja3NGb3JNZW51Lm1hcChbJl0oYXV0byYgYXVkaW9UcmFj
aykgeworICAgICAgICByZXR1cm4gY2FwdGlvblByZWZlcmVuY2VzLm1lZGlhU2VsZWN0aW9uT3B0
aW9uRm9yVHJhY2soYXVkaW9UcmFjay5nZXQoKSk7CisgICAgfSk7CiB9CiAKIHVpbnQ2NF90IFBs
YXliYWNrU2Vzc2lvbk1vZGVsTWVkaWFFbGVtZW50OjphdWRpb01lZGlhU2VsZWN0ZWRJbmRleCgp
IGNvbnN0CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9lbmNyeXB0ZWRtZWRp
YS9DRE1Qcm94eS5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9lbmNyeXB0ZWRtZWRpYS9D
RE1Qcm94eS5jcHAKaW5kZXggMGRkY2NmYTRiZDBiMzZhMWUzYzI1MjM0YzY3M2M2NzIzMmM1Yjky
YS4uNjc4ZjQxYTdhZTI0MDc1NGNkY2VjNjJmNWMyYzU2NmVjZWQ1ZTBlZiAxMDA2NDQKLS0tIGEv
U291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZW5jcnlwdGVkbWVkaWEvQ0RNUHJveHkuY3BwCisrKyBi
L1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2VuY3J5cHRlZG1lZGlhL0NETVByb3h5LmNwcApAQCAt
MjI1LDExICsyMjUsOSBAQCBjb25zdCBSZWZQdHI8S2V5SGFuZGxlPiYgS2V5U3RvcmU6OmtleUhh
bmRsZShjb25zdCBLZXlJRFR5cGUmIGtleUlEKSBjb25zdAogCiBDRE1JbnN0YW5jZVNlc3Npb246
OktleVN0YXR1c1ZlY3RvciBLZXlTdG9yZTo6Y29udmVydFRvSlNLZXlTdGF0dXNWZWN0b3IoKSBj
b25zdAogewotICAgIENETUluc3RhbmNlU2Vzc2lvbjo6S2V5U3RhdHVzVmVjdG9yIGtleVN0YXR1
c1ZlY3RvcjsKLSAgICBrZXlTdGF0dXNWZWN0b3IucmVzZXJ2ZUluaXRpYWxDYXBhY2l0eShudW1L
ZXlzKCkpOwotICAgIGZvciAoY29uc3QgYXV0byYga2V5IDogbV9rZXlzKQotICAgICAgICBrZXlT
dGF0dXNWZWN0b3IudW5jaGVja2VkQXBwZW5kKHN0ZDo6cGFpcjxSZWY8RnJhZ21lbnRlZFNoYXJl
ZEJ1ZmZlcj4sIENETUluc3RhbmNlU2Vzc2lvbjo6S2V5U3RhdHVzPiB7IGtleS0+aWRBc1NoYXJl
ZEJ1ZmZlcigpLCBrZXktPnN0YXR1cygpIH0pOwotICAgIHJldHVybiBrZXlTdGF0dXNWZWN0b3I7
CisgICAgcmV0dXJuIG1fa2V5cy5tYXAoW10oYXV0byYga2V5KSB7CisgICAgICAgIHJldHVybiBz
dGQ6Om1ha2VfcGFpcihrZXktPmlkQXNTaGFyZWRCdWZmZXIoKSwga2V5LT5zdGF0dXMoKSk7Cisg
ICAgfSk7CiB9CiAKIHZvaWQgQ0RNUHJveHk6OnVwZGF0ZUtleVN0b3JlKGNvbnN0IEtleVN0b3Jl
JiBuZXdLZXlTdG9yZSkKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBo
aWNzL0Zsb2F0UG9seWdvbi5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9G
bG9hdFBvbHlnb24uY3BwCmluZGV4IDhiOTIzNDE3OGVhZDNmM2NhMDYzZmY5YTFlYTQ3ZDAxYmU4
NTQyNWEuLmQwNTJmYTUzY2NkZjZiYjQxZjNmZWZiOTVmMzA1NDY2YjRkZjE5NjYgMTAwNjQ0Ci0t
LSBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL0Zsb2F0UG9seWdvbi5jcHAKKysr
IGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvRmxvYXRQb2x5Z29uLmNwcApAQCAt
MTQyLDExICsxNDIsOSBAQCBGbG9hdFBvbHlnb246OkZsb2F0UG9seWdvbihWZWN0b3I8RmxvYXRQ
b2ludD4mJiB2ZXJ0aWNlcywgV2luZFJ1bGUgZmlsbFJ1bGUpCiBWZWN0b3I8c3RkOjpyZWZlcmVu
Y2Vfd3JhcHBlcjxjb25zdCBGbG9hdFBvbHlnb25FZGdlPj4gRmxvYXRQb2x5Z29uOjpvdmVybGFw
cGluZ0VkZ2VzKGZsb2F0IG1pblksIGZsb2F0IG1heFkpIGNvbnN0CiB7CiAgICAgYXV0byBvdmVy
bGFwcGluZ0VkZ2VJbnRlcnZhbHMgPSBtX2VkZ2VUcmVlLmFsbE92ZXJsYXBzKHsgbWluWSwgbWF4
WSB9KTsKLSAgICBWZWN0b3I8c3RkOjpyZWZlcmVuY2Vfd3JhcHBlcjxjb25zdCBGbG9hdFBvbHln
b25FZGdlPj4gcmVzdWx0OwotICAgIHJlc3VsdC5yZXNlcnZlSW5pdGlhbENhcGFjaXR5KG92ZXJs
YXBwaW5nRWRnZUludGVydmFscy5zaXplKCkpOwotICAgIGZvciAoYXV0byYgaW50ZXJ2YWwgOiBv
dmVybGFwcGluZ0VkZ2VJbnRlcnZhbHMpCi0gICAgICAgIHJlc3VsdC51bmNoZWNrZWRBcHBlbmQo
KmludGVydmFsLmRhdGEoKSk7Ci0gICAgcmV0dXJuIHJlc3VsdDsKKyAgICByZXR1cm4gb3Zlcmxh
cHBpbmdFZGdlSW50ZXJ2YWxzLm1hcChbXShhdXRvJiBpbnRlcnZhbCkgLT4gc3RkOjpyZWZlcmVu
Y2Vfd3JhcHBlcjxjb25zdCBGbG9hdFBvbHlnb25FZGdlPiB7CisgICAgICAgIHJldHVybiAqaW50
ZXJ2YWwuZGF0YSgpOworICAgIH0pOwogfQogCiBzdGF0aWMgaW5saW5lIGZsb2F0IGxlZnRTaWRl
KGNvbnN0IEZsb2F0UG9pbnQmIHZlcnRleDEsIGNvbnN0IEZsb2F0UG9pbnQmIHZlcnRleDIsIGNv
bnN0IEZsb2F0UG9pbnQmIHBvaW50KQpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvcGxhdGZv
cm0vZ3JhcGhpY3MvRmxvYXRRdWFkLmNwcCBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBo
aWNzL0Zsb2F0UXVhZC5jcHAKaW5kZXggMTU1MWI5ZmMxOTZiYzczMDExYWQ2ODIzZmMxMjRkNjk3
ZjU2NGIyYS4uNzFhMjIyODNhYjM0Nzk5NDllNGI0N2JjY2Y2MzI2OGM4MThhN2E5MyAxMDA2NDQK
LS0tIGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvRmxvYXRRdWFkLmNwcAorKysg
Yi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9GbG9hdFF1YWQuY3BwCkBAIC0yNzMs
MTEgKzI3Myw5IEBAIGJvb2wgRmxvYXRRdWFkOjppc0VtcHR5KCkgY29uc3QKIAogVmVjdG9yPEZs
b2F0UmVjdD4gYm91bmRpbmdCb3hlcyhjb25zdCBWZWN0b3I8RmxvYXRRdWFkPiYgcXVhZHMpCiB7
Ci0gICAgVmVjdG9yPEZsb2F0UmVjdD4gYm94ZXM7Ci0gICAgYm94ZXMucmVzZXJ2ZUluaXRpYWxD
YXBhY2l0eShxdWFkcy5zaXplKCkpOwotICAgIGZvciAoY29uc3QgYXV0byYgcXVhZCA6IHF1YWRz
KQotICAgICAgICBib3hlcy51bmNoZWNrZWRBcHBlbmQocXVhZC5ib3VuZGluZ0JveCgpKTsKLSAg
ICByZXR1cm4gYm94ZXM7CisgICAgcmV0dXJuIHF1YWRzLm1hcChbXShhdXRvJiBxdWFkKSB7Cisg
ICAgICAgIHJldHVybiBxdWFkLmJvdW5kaW5nQm94KCk7CisgICAgfSk7CiB9CiAKIEZsb2F0UmVj
dCB1bml0ZWRCb3VuZGluZ0JveGVzKGNvbnN0IFZlY3RvcjxGbG9hdFF1YWQ+JiBxdWFkcykKZGlm
ZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2F2Zm91bmRhdGlvbi9v
YmpjL0NETUluc3RhbmNlRmFpclBsYXlTdHJlYW1pbmdBVkZPYmpDLm1tIGIvU291cmNlL1dlYkNv
cmUvcGxhdGZvcm0vZ3JhcGhpY3MvYXZmb3VuZGF0aW9uL29iamMvQ0RNSW5zdGFuY2VGYWlyUGxh
eVN0cmVhbWluZ0FWRk9iakMubW0KaW5kZXggY2ZlMDQ4YTkzOGMwNWRmNzQ1YzcxNjM1NmFkMWIz
YjkwYTU5ZWI3OC4uOGNjNDcxZmFhNDk5M2EzNTA5NTg0MTNhNTc3MWQ4YWQ3MzE4MzMzMyAxMDA2
NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvYXZmb3VuZGF0aW9uL29i
amMvQ0RNSW5zdGFuY2VGYWlyUGxheVN0cmVhbWluZ0FWRk9iakMubW0KKysrIGIvU291cmNlL1dl
YkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvYXZmb3VuZGF0aW9uL29iamMvQ0RNSW5zdGFuY2VGYWly
UGxheVN0cmVhbWluZ0FWRk9iakMubW0KQEAgLTkwNiw5ICs5MDYsNyBAQCB2b2lkIENETUluc3Rh
bmNlU2Vzc2lvbkZhaXJQbGF5U3RyZWFtaW5nQVZGT2JqQzo6dXBkYXRlTGljZW5zZShjb25zdCBT
dHJpbmcmLCBMaQogICAgIC8vIEZJWE1FKHJkYXI6Ly9wcm9ibGVtLzM1NTkyMjc3KTogc3Rhc2gg
dGhlIGNhbGxiYWNrIGFuZCBjYWxsIGl0IG9uY2UgQVZDb250ZW50S2V5UmVzcG9uc2Ugc3VwcG9y
dHMgYSBzdWNjZXNzIGNhbGxiYWNrLgogICAgIHN0cnVjdCBvYmpjX21ldGhvZF9kZXNjcmlwdGlv
biBtZXRob2QgPSBwcm90b2NvbF9nZXRNZXRob2REZXNjcmlwdGlvbihAcHJvdG9jb2woQVZDb250
ZW50S2V5U2Vzc2lvbkRlbGVnYXRlKSwgQHNlbGVjdG9yKGNvbnRlbnRLZXlTZXNzaW9uOmNvbnRl
bnRLZXlSZXF1ZXN0RGlkU3VjY2VlZDopLCBOTywgWUVTKTsKICAgICBpZiAoIW1ldGhvZC5uYW1l
KSB7Ci0gICAgICAgIEtleVN0YXR1c1ZlY3RvciBrZXlTdGF0dXNlczsKLSAgICAgICAga2V5U3Rh
dHVzZXMucmVzZXJ2ZUluaXRpYWxDYXBhY2l0eSgxKTsKLSAgICAgICAga2V5U3RhdHVzZXMudW5j
aGVja2VkQXBwZW5kKHN0ZDo6bWFrZV9wYWlyKFdURk1vdmUoa2V5SURzLmZpcnN0KCkpLCBLZXlT
dGF0dXM6OlVzYWJsZSkpOworICAgICAgICBLZXlTdGF0dXNWZWN0b3Iga2V5U3RhdHVzZXMgeyBz
dGQ6Om1ha2VfcGFpcihXVEZNb3ZlKGtleUlEcy5maXJzdCgpKSwgS2V5U3RhdHVzOjpVc2FibGUp
IH07CiAgICAgICAgIGNhbGxiYWNrKGZhbHNlLCBzdGQ6Om1ha2Vfb3B0aW9uYWwoV1RGTW92ZShr
ZXlTdGF0dXNlcykpLCBzdGQ6Om51bGxvcHQsIHN0ZDo6bnVsbG9wdCwgU3VjY2VlZGVkKTsKICAg
ICAgICAgcmV0dXJuOwogICAgIH0KZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3Jt
L2dyYXBoaWNzL2NhL1RpbGVHcmlkLmNwcCBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBo
aWNzL2NhL1RpbGVHcmlkLmNwcAppbmRleCA5ZDhmYmIxYTBmMGRlMzQ3MmE1Y2FjZWY3ZmM3ZTU5
N2ViNmEyNmE0Li4wMmI4ZmRjMmJmOGZmZGZkOTU2MDczODhhMzZjMmY4MWFlMzVhYjZiIDEwMDY0
NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9jYS9UaWxlR3JpZC5jcHAK
KysrIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvY2EvVGlsZUdyaWQuY3BwCkBA
IC0yOTAsNyArMjkwLDcgQEAgdW5zaWduZWQgVGlsZUdyaWQ6OmJsYW5rUGl4ZWxDb3VudCgpIGNv
bnN0CiAgICAgcmV0dXJuIFRpbGVDb250cm9sbGVyOjpibGFua1BpeGVsQ291bnRGb3JUaWxlcyh0
aWxlcywgbV9jb250cm9sbGVyLnZpc2libGVSZWN0KCksIEludFBvaW50KDAsIDApKTsKIH0KIAot
dm9pZCBUaWxlR3JpZDo6cmVtb3ZlVGlsZXMoVmVjdG9yPFRpbGVHcmlkOjpUaWxlSW5kZXg+JiB0
b1JlbW92ZSkKK3ZvaWQgVGlsZUdyaWQ6OnJlbW92ZVRpbGVzKGNvbnN0IFZlY3RvcjxUaWxlR3Jp
ZDo6VGlsZUluZGV4PiYgdG9SZW1vdmUpCiB7CiAgICAgZm9yIChzaXplX3QgaSA9IDA7IGkgPCB0
b1JlbW92ZS5zaXplKCk7ICsraSkgewogICAgICAgICBUaWxlSW5mbyB0aWxlSW5mbyA9IG1fdGls
ZXMudGFrZSh0b1JlbW92ZVtpXSk7CkBAIC0zMDIsMTMgKzMwMiw3IEBAIHZvaWQgVGlsZUdyaWQ6
OnJlbW92ZVRpbGVzKFZlY3RvcjxUaWxlR3JpZDo6VGlsZUluZGV4PiYgdG9SZW1vdmUpCiAKIHZv
aWQgVGlsZUdyaWQ6OnJlbW92ZUFsbFRpbGVzKCkKIHsKLSAgICBWZWN0b3I8VGlsZUluZGV4PiB0
aWxlc1RvUmVtb3ZlOwotICAgIHRpbGVzVG9SZW1vdmUucmVzZXJ2ZUluaXRpYWxDYXBhY2l0eSht
X3RpbGVzLnNpemUoKSk7Ci0KLSAgICBmb3IgKGF1dG8mIGVudHJ5IDogbV90aWxlcykKLSAgICAg
ICAgdGlsZXNUb1JlbW92ZS51bmNoZWNrZWRBcHBlbmQoZW50cnkua2V5KTsKLQotICAgIHJlbW92
ZVRpbGVzKHRpbGVzVG9SZW1vdmUpOworICAgIHJlbW92ZVRpbGVzKGNvcHlUb1ZlY3RvcihtX3Rp
bGVzLmtleXMoKSkpOwogfQogCiB2b2lkIFRpbGVHcmlkOjpyZW1vdmVBbGxTZWNvbmRhcnlUaWxl
cygpCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9jYS9UaWxl
R3JpZC5oIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvY2EvVGlsZUdyaWQuaApp
bmRleCAyNTdiYTU5ODM0YWNkNmRjYTdlYjNiZGVjZjZjZDEwMWQzNTNlYjU2Li4yNDcyOTg0NGFh
Mzk2NDM2NDRjYmMzZmE2YzVjNmNjZjEwNmNiM2Y3IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29y
ZS9wbGF0Zm9ybS9ncmFwaGljcy9jYS9UaWxlR3JpZC5oCisrKyBiL1NvdXJjZS9XZWJDb3JlL3Bs
YXRmb3JtL2dyYXBoaWNzL2NhL1RpbGVHcmlkLmgKQEAgLTEzNSw3ICsxMzUsNyBAQCBwcml2YXRl
OgogICAgIFRpbGVDb2hvcnQgbmV3ZXN0VGlsZUNvaG9ydCgpIGNvbnN0OwogICAgIFRpbGVDb2hv
cnQgb2xkZXN0VGlsZUNvaG9ydCgpIGNvbnN0OwogCi0gICAgdm9pZCByZW1vdmVUaWxlcyhWZWN0
b3I8VGlsZUdyaWQ6OlRpbGVJbmRleD4mIHRvUmVtb3ZlKTsKKyAgICB2b2lkIHJlbW92ZVRpbGVz
KGNvbnN0IFZlY3RvcjxUaWxlR3JpZDo6VGlsZUluZGV4PiYgdG9SZW1vdmUpOwogCiAgICAgLy8g
UGxhdGZvcm1DQUxheWVyQ2xpZW50CiAgICAgdm9pZCBwbGF0Zm9ybUNBTGF5ZXJQYWludENvbnRl
bnRzKFBsYXRmb3JtQ0FMYXllciosIEdyYXBoaWNzQ29udGV4dCYsIGNvbnN0IEZsb2F0UmVjdCYs
IEdyYXBoaWNzTGF5ZXJQYWludEJlaGF2aW9yKSBvdmVycmlkZTsKZGlmZiAtLWdpdCBhL1NvdXJj
ZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2NnL0ltYWdlVXRpbGl0aWVzQ0cuY3BwIGIvU291
cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvY2cvSW1hZ2VVdGlsaXRpZXNDRy5jcHAKaW5k
ZXggYTFlNWI3MzJmYjBiZjRlNTQyZDQxYmE5ZTg2OWRmMDFkNjU5ZTM1NC4uYjVhNWNkY2I4OTEw
NDgyZTM5M2I4ZDk1NmJmMGI1Mjk2MzM5MWRjMiAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUv
cGxhdGZvcm0vZ3JhcGhpY3MvY2cvSW1hZ2VVdGlsaXRpZXNDRy5jcHAKKysrIGIvU291cmNlL1dl
YkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvY2cvSW1hZ2VVdGlsaXRpZXNDRy5jcHAKQEAgLTEwMSwx
OSArMTAxLDE1IEBAIHN0YXRpYyBTdHJpbmcgdHJhbnNjb2RlSW1hZ2UoY29uc3QgU3RyaW5nJiBw
YXRoLCBjb25zdCBTdHJpbmcmIGRlc3RpbmF0aW9uVVRJLCBjCiAKIFZlY3RvcjxTdHJpbmc+IGZp
bmRJbWFnZXNGb3JUcmFuc2NvZGluZyhjb25zdCBWZWN0b3I8U3RyaW5nPiYgcGF0aHMsIGNvbnN0
IFZlY3RvcjxTdHJpbmc+JiBhbGxvd2VkTUlNRVR5cGVzKQogewotICAgIFZlY3RvcjxTdHJpbmc+
IHRyYW5zY29kaW5nUGF0aHM7Ci0gICAgdHJhbnNjb2RpbmdQYXRocy5yZXNlcnZlSW5pdGlhbENh
cGFjaXR5KHBhdGhzLnNpemUoKSk7Ci0KICAgICBib29sIG5lZWRzVHJhbnNjb2RpbmcgPSBmYWxz
ZTsKLQotICAgIGZvciAoYXV0byYgcGF0aCA6IHBhdGhzKSB7CisgICAgYXV0byB0cmFuc2NvZGlu
Z1BhdGhzID0gcGF0aHMubWFwKFsmXShhdXRvJiBwYXRoKSB7CiAgICAgICAgIC8vIEFwcGVuZCBh
IHBhdGggb2YgdGhlIGltYWdlIHdoaWNoIG5lZWRzIHRyYW5zY29kaW5nLiBPdGhlcndpc2UgYXBw
ZW5kIGEgbnVsbCBzdHJpbmcuCiAgICAgICAgIGlmICghYWxsb3dlZE1JTUVUeXBlcy5jb250YWlu
cyhXZWJDb3JlOjpNSU1FVHlwZVJlZ2lzdHJ5OjptaW1lVHlwZUZvclBhdGgocGF0aCkpKSB7Ci0g
ICAgICAgICAgICB0cmFuc2NvZGluZ1BhdGhzLnVuY2hlY2tlZEFwcGVuZChwYXRoKTsKICAgICAg
ICAgICAgIG5lZWRzVHJhbnNjb2RpbmcgPSB0cnVlOwotICAgICAgICB9IGVsc2UKLSAgICAgICAg
ICAgIHRyYW5zY29kaW5nUGF0aHMudW5jaGVja2VkQXBwZW5kKG51bGxTdHJpbmcoKSk7Ci0gICAg
fQorICAgICAgICAgICAgcmV0dXJuIHBhdGg7CisgICAgICAgIH0KKyAgICAgICAgcmV0dXJuIG51
bGxTdHJpbmcoKTsKKyAgICB9KTsKIAogICAgIC8vIElmIG5vbmUgb2YgdGhlIGZpbGVzIG5lZWRz
IGltYWdlIHRyYW5zY29kaW5nLCByZXR1cm4gYW4gZW1wdHkgVmVjdG9yLgogICAgIHJldHVybiBu
ZWVkc1RyYW5zY29kaW5nID8gdHJhbnNjb2RpbmdQYXRocyA6IFZlY3RvcjxTdHJpbmc+KCk7CkBA
IC0xMjQsMTggKzEyMCwxMCBAQCBWZWN0b3I8U3RyaW5nPiB0cmFuc2NvZGVJbWFnZXMoY29uc3Qg
VmVjdG9yPFN0cmluZz4mIHBhdGhzLCBjb25zdCBTdHJpbmcmIGRlc3RpbgogICAgIEFTU0VSVCgh
ZGVzdGluYXRpb25VVEkuaXNOdWxsKCkpOwogICAgIEFTU0VSVCghZGVzdGluYXRpb25FeHRlbnNp
b24uaXNOdWxsKCkpOwogICAgIAotICAgIFZlY3RvcjxTdHJpbmc+IHRyYW5zY29kZWRQYXRoczsK
LSAgICB0cmFuc2NvZGVkUGF0aHMucmVzZXJ2ZUluaXRpYWxDYXBhY2l0eShwYXRocy5zaXplKCkp
OwotCi0gICAgZm9yIChhdXRvJiBwYXRoIDogcGF0aHMpIHsKKyAgICByZXR1cm4gcGF0aHMubWFw
KFsmXShhdXRvJiBwYXRoKSB7CiAgICAgICAgIC8vIEFwcGVuZCB0aGUgdHJhbnNjb2RlZCBwYXRo
IGlmIHRoZSBpbWFnZSBuZWVkcyB0cmFuc2NvZGluZy4gT3RoZXJ3aXNlIGFwcGVuZCBhIG51bGwg
c3RyaW5nLgotICAgICAgICBpZiAoIXBhdGguaXNOdWxsKCkpCi0gICAgICAgICAgICB0cmFuc2Nv
ZGVkUGF0aHMudW5jaGVja2VkQXBwZW5kKHRyYW5zY29kZUltYWdlKHBhdGgsIGRlc3RpbmF0aW9u
VVRJLCBkZXN0aW5hdGlvbkV4dGVuc2lvbikpOwotICAgICAgICBlbHNlCi0gICAgICAgICAgICB0
cmFuc2NvZGVkUGF0aHMudW5jaGVja2VkQXBwZW5kKG51bGxTdHJpbmcoKSk7Ci0gICAgfQotCi0g
ICAgcmV0dXJuIHRyYW5zY29kZWRQYXRoczsKKyAgICAgICAgcmV0dXJuIHBhdGguaXNOdWxsKCkg
PyBudWxsU3RyaW5nKCkgOiB0cmFuc2NvZGVJbWFnZShwYXRoLCBkZXN0aW5hdGlvblVUSSwgZGVz
dGluYXRpb25FeHRlbnNpb24pOworICAgIH0pOwogfQogCiB9IC8vIG5hbWVzcGFjZSBXZWJDb3Jl
CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9jb2NvYS9Gb250
Q2FjaGVDb3JlVGV4dC5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9jb2Nv
YS9Gb250Q2FjaGVDb3JlVGV4dC5jcHAKaW5kZXggNDQ4NDJmOGEyMzRkMTdjNTJmNjI3YjJhNDA1
ODkxYWEwMDZlZmJiNy4uYWQ5YTIzN2FhOWM2MDQ4NTQ3NDU1MWMyNDU4NmQyY2E4YTU3NjMwMiAx
MDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvY29jb2EvRm9udENh
Y2hlQ29yZVRleHQuY3BwCisrKyBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2Nv
Y29hL0ZvbnRDYWNoZUNvcmVUZXh0LmNwcApAQCAtMTE1MywxMSArMTE1MywxMCBAQCBGb250U2Vs
ZWN0aW9uQ2FwYWJpbGl0aWVzIGNhcGFiaWxpdGllc0ZvckZvbnREZXNjcmlwdG9yKENURm9udERl
c2NyaXB0b3JSZWYgZm9udAogCiBzdGF0aWMgY29uc3QgRm9udERhdGFiYXNlOjpJbnN0YWxsZWRG
b250KiBmaW5kQ2xvc2VzdEZvbnQoY29uc3QgRm9udERhdGFiYXNlOjpJbnN0YWxsZWRGb250RmFt
aWx5JiBmYW1pbHlGb250cywgRm9udFNlbGVjdGlvblJlcXVlc3QgZm9udFNlbGVjdGlvblJlcXVl
c3QpCiB7Ci0gICAgVmVjdG9yPEZvbnRTZWxlY3Rpb25DYXBhYmlsaXRpZXM+IGNhcGFiaWxpdGll
czsKLSAgICBjYXBhYmlsaXRpZXMucmVzZXJ2ZUluaXRpYWxDYXBhY2l0eShmYW1pbHlGb250cy5z
aXplKCkpOwotICAgIGZvciAoYXV0byYgZm9udCA6IGZhbWlseUZvbnRzLmluc3RhbGxlZEZvbnRz
KQotICAgICAgICBjYXBhYmlsaXRpZXMudW5jaGVja2VkQXBwZW5kKGZvbnQuY2FwYWJpbGl0aWVz
KTsKLSAgICBGb250U2VsZWN0aW9uQWxnb3JpdGhtIGZvbnRTZWxlY3Rpb25BbGdvcml0aG0oZm9u
dFNlbGVjdGlvblJlcXVlc3QsIGNhcGFiaWxpdGllcywgZmFtaWx5Rm9udHMuY2FwYWJpbGl0aWVz
KTsKKyAgICBhdXRvIGNhcGFiaWxpdGllcyA9IGZhbWlseUZvbnRzLmluc3RhbGxlZEZvbnRzLm1h
cChbXShhdXRvJiBmb250KSB7CisgICAgICAgIHJldHVybiBmb250LmNhcGFiaWxpdGllczsKKyAg
ICB9KTsKKyAgICBGb250U2VsZWN0aW9uQWxnb3JpdGhtIGZvbnRTZWxlY3Rpb25BbGdvcml0aG0o
Zm9udFNlbGVjdGlvblJlcXVlc3QsIFdURk1vdmUoY2FwYWJpbGl0aWVzKSwgZmFtaWx5Rm9udHMu
Y2FwYWJpbGl0aWVzKTsKICAgICBhdXRvIGluZGV4ID0gZm9udFNlbGVjdGlvbkFsZ29yaXRobS5p
bmRleE9mQmVzdENhcGFiaWxpdGllcygpOwogICAgIGlmIChpbmRleCA9PSBub3RGb3VuZCkKICAg
ICAgICAgcmV0dXJuIG51bGxwdHI7CkBAIC0xMTY5LDE0ICsxMTY4LDkgQEAgVmVjdG9yPEZvbnRT
ZWxlY3Rpb25DYXBhYmlsaXRpZXM+IEZvbnRDYWNoZTo6Z2V0Rm9udFNlbGVjdGlvbkNhcGFiaWxp
dGllc0luRmFtaWwKIHsKICAgICBhdXRvJiBmb250RGF0YWJhc2UgPSBhbGxvd1VzZXJJbnN0YWxs
ZWRGb250cyA9PSBBbGxvd1VzZXJJbnN0YWxsZWRGb250czo6WWVzID8gRm9udERhdGFiYXNlOjpz
aW5nbGV0b25BbGxvd2luZ1VzZXJJbnN0YWxsZWRGb250cygpIDogRm9udERhdGFiYXNlOjpzaW5n
bGV0b25EaXNhbGxvd2luZ1VzZXJJbnN0YWxsZWRGb250cygpOwogICAgIGNvbnN0IGF1dG8mIGZv
bnRzID0gZm9udERhdGFiYXNlLmNvbGxlY3Rpb25Gb3JGYW1pbHkoZmFtaWx5TmFtZS5zdHJpbmco
KSk7Ci0gICAgaWYgKGZvbnRzLmlzRW1wdHkoKSkKLSAgICAgICAgcmV0dXJuIHsgfTsKLQotICAg
IFZlY3RvcjxGb250U2VsZWN0aW9uQ2FwYWJpbGl0aWVzPiByZXN1bHQ7Ci0gICAgcmVzdWx0LnJl
c2VydmVJbml0aWFsQ2FwYWNpdHkoZm9udHMuc2l6ZSgpKTsKLSAgICBmb3IgKGNvbnN0IGF1dG8m
IGZvbnQgOiBmb250cy5pbnN0YWxsZWRGb250cykKLSAgICAgICAgcmVzdWx0LnVuY2hlY2tlZEFw
cGVuZChmb250LmNhcGFiaWxpdGllcyk7Ci0gICAgcmV0dXJuIHJlc3VsdDsKKyAgICByZXR1cm4g
Zm9udHMuaW5zdGFsbGVkRm9udHMubWFwKFtdKGF1dG8mIGZvbnQpIHsKKyAgICAgICAgcmV0dXJu
IGZvbnQuY2FwYWJpbGl0aWVzOworICAgIH0pOwogfQogCiBzdHJ1Y3QgRm9udExvb2t1cCB7CmRp
ZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9tZWRpYXN0cmVhbS9SZWFsdGltZU1l
ZGlhU291cmNlLmNwcCBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL21lZGlhc3RyZWFtL1JlYWx0
aW1lTWVkaWFTb3VyY2UuY3BwCmluZGV4IDA3MzEzMzkxNDJjZjMzY2U5MTRlMThkYzkxNDczOTFh
MzdkMDNiNjQuLmRlMGYxYTdhNGU2MzVhMTM5ZTQ4MjhiNTQ3ZmRjZjA2NjE5YjM1YWIgMTAwNjQ0
Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL21lZGlhc3RyZWFtL1JlYWx0aW1lTWVkaWFT
b3VyY2UuY3BwCisrKyBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL21lZGlhc3RyZWFtL1JlYWx0
aW1lTWVkaWFTb3VyY2UuY3BwCkBAIC00NjksMTEgKzQ2OSw5IEBAIGRvdWJsZSBSZWFsdGltZU1l
ZGlhU291cmNlOjpmaXRuZXNzRGlzdGFuY2UoY29uc3QgTWVkaWFDb25zdHJhaW50JiBjb25zdHJh
aW50KQogICAgICAgICBpZiAoIWNhcGFiaWxpdGllcy5zdXBwb3J0c0ZhY2luZ01vZGUoKSkKICAg
ICAgICAgICAgIHJldHVybiAwOwogCi0gICAgICAgIGF1dG8mIG1vZGVzID0gY2FwYWJpbGl0aWVz
LmZhY2luZ01vZGUoKTsKLSAgICAgICAgVmVjdG9yPFN0cmluZz4gc3VwcG9ydGVkTW9kZXM7Ci0g
ICAgICAgIHN1cHBvcnRlZE1vZGVzLnJlc2VydmVJbml0aWFsQ2FwYWNpdHkobW9kZXMuc2l6ZSgp
KTsKLSAgICAgICAgZm9yIChhdXRvJiBtb2RlIDogbW9kZXMpCi0gICAgICAgICAgICBzdXBwb3J0
ZWRNb2Rlcy51bmNoZWNrZWRBcHBlbmQoUmVhbHRpbWVNZWRpYVNvdXJjZVNldHRpbmdzOjpmYWNp
bmdNb2RlKG1vZGUpKTsKKyAgICAgICAgYXV0byBzdXBwb3J0ZWRNb2RlcyA9IGNhcGFiaWxpdGll
cy5mYWNpbmdNb2RlKCkubWFwKFtdKGF1dG8mIG1vZGUpIHsKKyAgICAgICAgICAgIHJldHVybiBS
ZWFsdGltZU1lZGlhU291cmNlU2V0dGluZ3M6OmZhY2luZ01vZGUobW9kZSk7CisgICAgICAgIH0p
OwogICAgICAgICByZXR1cm4gZG93bmNhc3Q8U3RyaW5nQ29uc3RyYWludD4oY29uc3RyYWludCku
Zml0bmVzc0Rpc3RhbmNlKHN1cHBvcnRlZE1vZGVzKTsKICAgICAgICAgYnJlYWs7CiAgICAgfQpk
aWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vbmV0d29yay9DYWNoZVZhbGlkYXRp
b24uY3BwIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vbmV0d29yay9DYWNoZVZhbGlkYXRpb24u
Y3BwCmluZGV4IDJlOWMwNmQ1N2M5MGQ1NTQ1MWNkNGFhZGVmNzZiYTMwM2YxMjhhMjkuLmRlYjM5
ZjBhNjNkYThhMWYwNjUyNDdlYjdjMDNlNThlMmVhYzRhNTkgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9X
ZWJDb3JlL3BsYXRmb3JtL25ldHdvcmsvQ2FjaGVWYWxpZGF0aW9uLmNwcAorKysgYi9Tb3VyY2Uv
V2ViQ29yZS9wbGF0Zm9ybS9uZXR3b3JrL0NhY2hlVmFsaWRhdGlvbi5jcHAKQEAgLTM2MywxOCAr
MzYzLDEzIEBAIHN0YXRpYyBTdHJpbmcgaGVhZGVyVmFsdWVGb3JWYXJ5KGNvbnN0IFJlc291cmNl
UmVxdWVzdCYgcmVxdWVzdCwgY29uc3QgU3RyaW5nJiBoCiAKIHN0YXRpYyBWZWN0b3I8c3RkOjpw
YWlyPFN0cmluZywgU3RyaW5nPj4gY29sbGVjdFZhcnlpbmdSZXF1ZXN0SGVhZGVyc0ludGVybmFs
KGNvbnN0IFJlc291cmNlUmVzcG9uc2UmIHJlc3BvbnNlLCBGdW5jdGlvbjxTdHJpbmcoY29uc3Qg
U3RyaW5nJiBoZWFkZXJOYW1lKT4mJiBoZWFkZXJWYWx1ZUZvclZhcnlGdW5jdGlvbikKIHsKLSAg
ICBTdHJpbmcgdmFyeVZhbHVlID0gcmVzcG9uc2UuaHR0cEhlYWRlckZpZWxkKEhUVFBIZWFkZXJO
YW1lOjpWYXJ5KTsKKyAgICBhdXRvIHZhcnlWYWx1ZSA9IHJlc3BvbnNlLmh0dHBIZWFkZXJGaWVs
ZChIVFRQSGVhZGVyTmFtZTo6VmFyeSk7CiAgICAgaWYgKHZhcnlWYWx1ZS5pc0VtcHR5KCkpCiAg
ICAgICAgIHJldHVybiB7IH07Ci0gICAgVmVjdG9yPFN0cmluZz4gdmFyeWluZ0hlYWRlck5hbWVz
ID0gdmFyeVZhbHVlLnNwbGl0KCcsJyk7Ci0gICAgVmVjdG9yPHN0ZDo6cGFpcjxTdHJpbmcsIFN0
cmluZz4+IHZhcnlpbmdSZXF1ZXN0SGVhZGVyczsKLSAgICB2YXJ5aW5nUmVxdWVzdEhlYWRlcnMu
cmVzZXJ2ZUNhcGFjaXR5KHZhcnlpbmdIZWFkZXJOYW1lcy5zaXplKCkpOwotICAgIGZvciAoYXV0
byYgdmFyeUhlYWRlck5hbWUgOiB2YXJ5aW5nSGVhZGVyTmFtZXMpIHsKLSAgICAgICAgU3RyaW5n
IGhlYWRlck5hbWUgPSB2YXJ5SGVhZGVyTmFtZS5zdHJpcFdoaXRlU3BhY2UoKTsKLSAgICAgICAg
U3RyaW5nIGhlYWRlclZhbHVlID0gaGVhZGVyVmFsdWVGb3JWYXJ5RnVuY3Rpb24oaGVhZGVyTmFt
ZSk7Ci0gICAgICAgIHZhcnlpbmdSZXF1ZXN0SGVhZGVycy5hcHBlbmQoc3RkOjptYWtlX3BhaXIo
aGVhZGVyTmFtZSwgaGVhZGVyVmFsdWUpKTsKLSAgICB9Ci0gICAgcmV0dXJuIHZhcnlpbmdSZXF1
ZXN0SGVhZGVyczsKKyAgICByZXR1cm4gdmFyeVZhbHVlLnNwbGl0KCcsJykubWFwKFsmXShhdXRv
JiB2YXJ5SGVhZGVyTmFtZSkgeworICAgICAgICBhdXRvIGhlYWRlck5hbWUgPSB2YXJ5SGVhZGVy
TmFtZS5zdHJpcFdoaXRlU3BhY2UoKTsKKyAgICAgICAgcmV0dXJuIHN0ZDo6bWFrZV9wYWlyKGhl
YWRlck5hbWUsIGhlYWRlclZhbHVlRm9yVmFyeUZ1bmN0aW9uKGhlYWRlck5hbWUpKTsKKyAgICB9
KTsKIH0KIAogVmVjdG9yPHN0ZDo6cGFpcjxTdHJpbmcsIFN0cmluZz4+IGNvbGxlY3RWYXJ5aW5n
UmVxdWVzdEhlYWRlcnMoTmV0d29ya1N0b3JhZ2VTZXNzaW9uKiBzdG9yYWdlU2Vzc2lvbiwgY29u
c3QgUmVzb3VyY2VSZXF1ZXN0JiByZXF1ZXN0LCBjb25zdCBSZXNvdXJjZVJlc3BvbnNlJiByZXNw
b25zZSkKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL25ldHdvcmsvRm9ybURh
dGEuY3BwIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vbmV0d29yay9Gb3JtRGF0YS5jcHAKaW5k
ZXggMGM5MDgxN2M0ZTliNDFmMzQ5YTQxYWU2NGI3MTkwNmI5NTFlYjg5YS4uNzUwOWY1ZDUyZTAy
ZDQxODYyOWYyNmQ5NmIzYjY1MTZkOTY1NzAyNiAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUv
cGxhdGZvcm0vbmV0d29yay9Gb3JtRGF0YS5jcHAKKysrIGIvU291cmNlL1dlYkNvcmUvcGxhdGZv
cm0vbmV0d29yay9Gb3JtRGF0YS5jcHAKQEAgLTExMSwxNSArMTExLDkgQEAgUmVmPEZvcm1EYXRh
PiBGb3JtRGF0YTo6aXNvbGF0ZWRDb3B5KCkgY29uc3QKIHsKICAgICAvLyBGSVhNRTogaXNvbGF0
ZWRDb3B5KCkgZG9lcyBub3QgY29weSBtX2lkZW50aWZpZXIsIG1fYm91bmRhcnksIG9yIG1fY29u
dGFpbnNQYXNzd29yZERhdGEuCiAgICAgLy8gSXMgYWxsIG9mIHRoYXQgY29ycmVjdCBhbmQgaW50
ZW50aW9uYWw/Ci0KICAgICBhdXRvIGZvcm1EYXRhID0gY3JlYXRlKCk7Ci0KICAgICBmb3JtRGF0
YS0+bV9hbHdheXNTdHJlYW0gPSBtX2Fsd2F5c1N0cmVhbTsKLQotICAgIGZvcm1EYXRhLT5tX2Vs
ZW1lbnRzLnJlc2VydmVJbml0aWFsQ2FwYWNpdHkobV9lbGVtZW50cy5zaXplKCkpOwotICAgIGZv
ciAoYXV0byYgZWxlbWVudCA6IG1fZWxlbWVudHMpCi0gICAgICAgIGZvcm1EYXRhLT5tX2VsZW1l
bnRzLnVuY2hlY2tlZEFwcGVuZChlbGVtZW50Lmlzb2xhdGVkQ29weSgpKTsKLQorICAgIGZvcm1E
YXRhLT5tX2VsZW1lbnRzID0gY3Jvc3NUaHJlYWRDb3B5KG1fZWxlbWVudHMpOwogICAgIHJldHVy
biBmb3JtRGF0YTsKIH0KIApkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vbmV0
d29yay9Tb2NrZXRTdHJlYW1IYW5kbGVJbXBsLmNwcCBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3Jt
L25ldHdvcmsvU29ja2V0U3RyZWFtSGFuZGxlSW1wbC5jcHAKaW5kZXggYzVmMmVhNzgwY2I3YmY1
ODBiNmMwYzYwODhhZDBmYjUxM2JiNWQ0Zi4uYTUyNmU1ZGQxZTBmMTAwOGI5Zjk3Y2RhMzY4MjY5
NTMzYzg4NmU2YSAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vbmV0d29yay9T
b2NrZXRTdHJlYW1IYW5kbGVJbXBsLmNwcAorKysgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9u
ZXR3b3JrL1NvY2tldFN0cmVhbUhhbmRsZUltcGwuY3BwCkBAIC0xMjgsNyArMTI4LDcgQEAgdm9p
ZCBTb2NrZXRTdHJlYW1IYW5kbGVJbXBsOjpwbGF0Zm9ybVNlbmRIYW5kc2hha2UoY29uc3QgdWlu
dDhfdCogZGF0YSwgc2l6ZV90IGwKICAgICBpZiAobV9zdGF0ZSA9PSBPcGVuKSB7CiAgICAgICAg
IC8vIFVuZm9ydHVuYXRlbHksIHdlIG5lZWQgdG8gc2VuZCB0aGUgZGF0YSBpbiBvbmUgYnVmZmVy
IG9yIGVsc2UgdGhlIGhhbmRzaGFrZSBmYWlscy4KICAgICAgICAgVmVjdG9yPHVpbnQ4X3Q+IHNl
bmREYXRhOwotICAgICAgICBzZW5kRGF0YS5yZXNlcnZlQ2FwYWNpdHkobGVuZ3RoICsgY29va2ll
RGF0YS5zaXplKCkpOworICAgICAgICBzZW5kRGF0YS5yZXNlcnZlSW5pdGlhbENhcGFjaXR5KGxl
bmd0aCArIGNvb2tpZURhdGEuc2l6ZSgpKTsKICAgICAgICAgc2VuZERhdGEuYXBwZW5kKGRhdGEs
IGxlbmd0aCk7CiAgICAgICAgIHNlbmREYXRhLmFwcGVuZChjb29raWVEYXRhLmRhdGEoKSwgY29v
a2llRGF0YS5zaXplKCkpOwogCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9u
ZXR3b3JrL2NvY29hL05ldHdvcmtTdG9yYWdlU2Vzc2lvbkNvY29hLm1tIGIvU291cmNlL1dlYkNv
cmUvcGxhdGZvcm0vbmV0d29yay9jb2NvYS9OZXR3b3JrU3RvcmFnZVNlc3Npb25Db2NvYS5tbQpp
bmRleCAyOTlmYzRiZDJlYmNmNzA3NzU1NDc0NDUwYTRkNzlkZGU2NzhiZWZlLi40OTk5M2JlN2Nj
YWFiM2E3ZGQ3ZTRiNjJhOTQ1ZGY3MzJiNzYwOGM0IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29y
ZS9wbGF0Zm9ybS9uZXR3b3JrL2NvY29hL05ldHdvcmtTdG9yYWdlU2Vzc2lvbkNvY29hLm1tCisr
KyBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL25ldHdvcmsvY29jb2EvTmV0d29ya1N0b3JhZ2VT
ZXNzaW9uQ29jb2EubW0KQEAgLTg5LDYgKzg5LDggQEAgc3RhdGljIFZlY3RvcjxDb29raWU+IG5z
Q29va2llc1RvQ29va2llVmVjdG9yKE5TQXJyYXk8TlNIVFRQQ29va2llICo+ICpuc0Nvb2tpZXMK
ICAgICAgICAgaWYgKCFmaWx0ZXIgfHwgZmlsdGVyKG5zQ29va2llKSkKICAgICAgICAgICAgIGNv
b2tpZXMudW5jaGVja2VkQXBwZW5kKG5zQ29va2llKTsKICAgICB9CisgICAgaWYgKGZpbHRlcikK
KyAgICAgICAgY29va2llcy5zaHJpbmtUb0ZpdCgpOwogICAgIHJldHVybiBjb29raWVzOwogfQog
CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS90ZXh0L0xvY2FsZUlDVS5jcHAg
Yi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS90ZXh0L0xvY2FsZUlDVS5jcHAKaW5kZXggM2U1OGI3
ZjA2YmU2NDgyZmYyZDY0ODNlYzFmMjc3ZTNhZGEwZmUxMS4uNzNkZWJkMzcyNDk1Y2EyZDZlZmUw
NDBhMDU2M2Y1MjBjYTY1NzlkYSAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0v
dGV4dC9Mb2NhbGVJQ1UuY3BwCisrKyBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL3RleHQvTG9j
YWxlSUNVLmNwcApAQCAtMTY5LDcgKzE2OSw3IEBAIHN0ZDo6dW5pcXVlX3B0cjxWZWN0b3I8U3Ry
aW5nPj4gTG9jYWxlSUNVOjpjcmVhdGVMYWJlbFZlY3Rvcihjb25zdCBVRGF0ZUZvcm1hdCoKICAg
ICAgICAgcmV0dXJuIG1ha2VVbmlxdWU8VmVjdG9yPFN0cmluZz4+KCk7CiAKICAgICBhdXRvIGxh
YmVscyA9IG1ha2VVbmlxdWU8VmVjdG9yPFN0cmluZz4+KCk7Ci0gICAgbGFiZWxzLT5yZXNlcnZl
Q2FwYWNpdHkoc2l6ZSk7CisgICAgbGFiZWxzLT5yZXNlcnZlSW5pdGlhbENhcGFjaXR5KHNpemUp
OwogICAgIGZvciAoaW50MzJfdCBpID0gMDsgaSA8IHNpemU7ICsraSkgewogICAgICAgICBVRXJy
b3JDb2RlIHN0YXR1cyA9IFVfWkVST19FUlJPUjsKICAgICAgICAgaW50MzJfdCBsZW5ndGggPSB1
ZGF0X2dldFN5bWJvbHMoZGF0ZUZvcm1hdCwgdHlwZSwgc3RhcnRJbmRleCArIGksIDAsIDAsICZz
dGF0dXMpOwpAQCAtMTgwLDcgKzE4MCw3IEBAIHN0ZDo6dW5pcXVlX3B0cjxWZWN0b3I8U3RyaW5n
Pj4gTG9jYWxlSUNVOjpjcmVhdGVMYWJlbFZlY3Rvcihjb25zdCBVRGF0ZUZvcm1hdCoKICAgICAg
ICAgdWRhdF9nZXRTeW1ib2xzKGRhdGVGb3JtYXQsIHR5cGUsIHN0YXJ0SW5kZXggKyBpLCBidWZm
ZXIuZGF0YSgpLCBsZW5ndGgsICZzdGF0dXMpOwogICAgICAgICBpZiAoVV9GQUlMVVJFKHN0YXR1
cykpCiAgICAgICAgICAgICByZXR1cm4gbWFrZVVuaXF1ZTxWZWN0b3I8U3RyaW5nPj4oKTsKLSAg
ICAgICAgbGFiZWxzLT5hcHBlbmQoU3RyaW5nOjphZG9wdChXVEZNb3ZlKGJ1ZmZlcikpKTsKKyAg
ICAgICAgbGFiZWxzLT51bmNoZWNrZWRBcHBlbmQoU3RyaW5nOjphZG9wdChXVEZNb3ZlKGJ1ZmZl
cikpKTsKICAgICB9CiAgICAgcmV0dXJuIGxhYmVsczsKIH0KQEAgLTE4OCw5ICsxODgsOSBAQCBz
dGQ6OnVuaXF1ZV9wdHI8VmVjdG9yPFN0cmluZz4+IExvY2FsZUlDVTo6Y3JlYXRlTGFiZWxWZWN0
b3IoY29uc3QgVURhdGVGb3JtYXQqCiBzdGF0aWMgc3RkOjp1bmlxdWVfcHRyPFZlY3RvcjxTdHJp
bmc+PiBjcmVhdGVGYWxsYmFja01vbnRoTGFiZWxzKCkKIHsKICAgICBhdXRvIGxhYmVscyA9IG1h
a2VVbmlxdWU8VmVjdG9yPFN0cmluZz4+KCk7Ci0gICAgbGFiZWxzLT5yZXNlcnZlQ2FwYWNpdHko
V1RGX0FSUkFZX0xFTkdUSChXVEY6Om1vbnRoRnVsbE5hbWUpKTsKKyAgICBsYWJlbHMtPnJlc2Vy
dmVJbml0aWFsQ2FwYWNpdHkoV1RGX0FSUkFZX0xFTkdUSChXVEY6Om1vbnRoRnVsbE5hbWUpKTsK
ICAgICBmb3IgKHVuc2lnbmVkIGkgPSAwOyBpIDwgV1RGX0FSUkFZX0xFTkdUSChXVEY6Om1vbnRo
RnVsbE5hbWUpOyArK2kpCi0gICAgICAgIGxhYmVscy0+YXBwZW5kKFdURjo6bW9udGhGdWxsTmFt
ZVtpXSk7CisgICAgICAgIGxhYmVscy0+dW5jaGVja2VkQXBwZW5kKFdURjo6bW9udGhGdWxsTmFt
ZVtpXSk7CiAgICAgcmV0dXJuIGxhYmVsczsKIH0KIApAQCAtMjA5LDExICsyMDksNyBAQCBjb25z
dCBWZWN0b3I8U3RyaW5nPiYgTG9jYWxlSUNVOjptb250aExhYmVscygpCiAKIHN0YXRpYyBzdGQ6
OnVuaXF1ZV9wdHI8VmVjdG9yPFN0cmluZz4+IGNyZWF0ZUZhbGxiYWNrQU1QTUxhYmVscygpCiB7
Ci0gICAgYXV0byBsYWJlbHMgPSBtYWtlVW5pcXVlPFZlY3RvcjxTdHJpbmc+PigpOwotICAgIGxh
YmVscy0+cmVzZXJ2ZUNhcGFjaXR5KDIpOwotICAgIGxhYmVscy0+YXBwZW5kKCJBTSIpOwotICAg
IGxhYmVscy0+YXBwZW5kKCJQTSIpOwotICAgIHJldHVybiBsYWJlbHM7CisgICAgcmV0dXJuIG1h
a2VVbmlxdWU8VmVjdG9yPFN0cmluZz4+KHsgIkFNIl9zdHIsICJQTSJfc3RyIH0pOwogfQogCiB2
b2lkIExvY2FsZUlDVTo6aW5pdGlhbGl6ZURhdGVUaW1lRm9ybWF0KCkKZGlmZiAtLWdpdCBhL1Nv
dXJjZS9XZWJDb3JlL3BsYXRmb3JtL3RleHQvTG9jYWxlTm9uZS5jcHAgYi9Tb3VyY2UvV2ViQ29y
ZS9wbGF0Zm9ybS90ZXh0L0xvY2FsZU5vbmUuY3BwCmluZGV4IDc4MTVhNDc4ZTAyOTc0NTU5NjU3
NmMyZGVkMjIxMTkzNmFhOTZhMWIuLjRiNmQ3NjBlOTUyN2E0NzdjYzQ5OTA0ODBkYzUyZjg2NTdm
MzM0MzUgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL3RleHQvTG9jYWxlTm9u
ZS5jcHAKKysrIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vdGV4dC9Mb2NhbGVOb25lLmNwcApA
QCAtNzMsNyArNzMsNyBAQCBjb25zdCBWZWN0b3I8U3RyaW5nPiYgTG9jYWxlTm9uZTo6bW9udGhM
YWJlbHMoKQogICAgICAgICByZXR1cm4gbV9tb250aExhYmVsczsKICAgICBtX21vbnRoTGFiZWxz
LnJlc2VydmVDYXBhY2l0eShXVEZfQVJSQVlfTEVOR1RIKFdURjo6bW9udGhGdWxsTmFtZSkpOwog
ICAgIGZvciAodW5zaWduZWQgaSA9IDA7IGkgPCBXVEZfQVJSQVlfTEVOR1RIKFdURjo6bW9udGhG
dWxsTmFtZSk7ICsraSkKLSAgICAgICAgbV9tb250aExhYmVscy5hcHBlbmQoV1RGOjptb250aEZ1
bGxOYW1lW2ldKTsKKyAgICAgICAgbV9tb250aExhYmVscy51bmNoZWNrZWRBcHBlbmQoV1RGOjpt
b250aEZ1bGxOYW1lW2ldKTsKICAgICByZXR1cm4gbV9tb250aExhYmVsczsKIH0KIApAQCAtMTE4
LDcgKzExOCw3IEBAIGNvbnN0IFZlY3RvcjxTdHJpbmc+JiBMb2NhbGVOb25lOjpzaG9ydE1vbnRo
TGFiZWxzKCkKICAgICAgICAgcmV0dXJuIG1fc2hvcnRNb250aExhYmVsczsKICAgICBtX3Nob3J0
TW9udGhMYWJlbHMucmVzZXJ2ZUNhcGFjaXR5KFdURl9BUlJBWV9MRU5HVEgoV1RGOjptb250aE5h
bWUpKTsKICAgICBmb3IgKHVuc2lnbmVkIGkgPSAwOyBpIDwgV1RGX0FSUkFZX0xFTkdUSChXVEY6
Om1vbnRoTmFtZSk7ICsraSkKLSAgICAgICAgbV9zaG9ydE1vbnRoTGFiZWxzLmFwcGVuZChXVEY6
Om1vbnRoTmFtZVtpXSk7CisgICAgICAgIG1fc2hvcnRNb250aExhYmVscy51bmNoZWNrZWRBcHBl
bmQoV1RGOjptb250aE5hbWVbaV0pOwogICAgIHJldHVybiBtX3Nob3J0TW9udGhMYWJlbHM7CiB9
CiAKQEAgLTEzNyw4ICsxMzcsOCBAQCBjb25zdCBWZWN0b3I8U3RyaW5nPiYgTG9jYWxlTm9uZTo6
dGltZUFNUE1MYWJlbHMoKQogICAgIGlmICghbV90aW1lQU1QTUxhYmVscy5pc0VtcHR5KCkpCiAg
ICAgICAgIHJldHVybiBtX3RpbWVBTVBNTGFiZWxzOwogICAgIG1fdGltZUFNUE1MYWJlbHMucmVz
ZXJ2ZUNhcGFjaXR5KDIpOwotICAgIG1fdGltZUFNUE1MYWJlbHMuYXBwZW5kKCJBTSIpOwotICAg
IG1fdGltZUFNUE1MYWJlbHMuYXBwZW5kKCJQTSIpOworICAgIG1fdGltZUFNUE1MYWJlbHMudW5j
aGVja2VkQXBwZW5kKCJBTSIpOworICAgIG1fdGltZUFNUE1MYWJlbHMudW5jaGVja2VkQXBwZW5k
KCJQTSIpOwogICAgIHJldHVybiBtX3RpbWVBTVBNTGFiZWxzOwogfQogCmRpZmYgLS1naXQgYS9T
b3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS90ZXh0L2NvY29hL0xvY2FsZUNvY29hLm1tIGIvU291cmNl
L1dlYkNvcmUvcGxhdGZvcm0vdGV4dC9jb2NvYS9Mb2NhbGVDb2NvYS5tbQppbmRleCAxYjA5OGZh
ZjM1ZWIyYmFjNDRmNTZjOWMzOTE4MmMzYjg4NTIxMGE3Li5mMThkYjQ1NzA4MmY1ZDkyYjA2OTNi
ZDI0N2YzN2VkYTA3Njg4YjZhIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS90
ZXh0L2NvY29hL0xvY2FsZUNvY29hLm1tCisrKyBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL3Rl
eHQvY29jb2EvTG9jYWxlQ29jb2EubW0KQEAgLTExMCwxMSArMTEwLDExIEBAIGNvbnN0IFZlY3Rv
cjxTdHJpbmc+JiBMb2NhbGVDb2NvYTo6bW9udGhMYWJlbHMoKQogICAgIE5TQXJyYXkgKmFycmF5
ID0gW3Nob3J0RGF0ZUZvcm1hdHRlcigpLmdldCgpIG1vbnRoU3ltYm9sc107CiAgICAgaWYgKFth
cnJheSBjb3VudF0gPT0gMTIpIHsKICAgICAgICAgZm9yICh1bnNpZ25lZCBpID0gMDsgaSA8IDEy
OyArK2kpCi0gICAgICAgICAgICBtX21vbnRoTGFiZWxzLmFwcGVuZChTdHJpbmcoW2FycmF5IG9i
amVjdEF0SW5kZXg6aV0pKTsKKyAgICAgICAgICAgIG1fbW9udGhMYWJlbHMudW5jaGVja2VkQXBw
ZW5kKFN0cmluZyhbYXJyYXkgb2JqZWN0QXRJbmRleDppXSkpOwogICAgICAgICByZXR1cm4gbV9t
b250aExhYmVsczsKICAgICB9CiAgICAgZm9yIChhdXRvJiBuYW1lIDogV1RGOjptb250aEZ1bGxO
YW1lKQotICAgICAgICBtX21vbnRoTGFiZWxzLmFwcGVuZChuYW1lKTsKKyAgICAgICAgbV9tb250
aExhYmVscy51bmNoZWNrZWRBcHBlbmQobmFtZSk7CiAgICAgcmV0dXJuIG1fbW9udGhMYWJlbHM7
CiB9CiAKQEAgLTIwNCwxMSArMjA0LDExIEBAIGNvbnN0IFZlY3RvcjxTdHJpbmc+JiBMb2NhbGVD
b2NvYTo6c2hvcnRNb250aExhYmVscygpCiAgICAgTlNBcnJheSAqYXJyYXkgPSBbc2hvcnREYXRl
Rm9ybWF0dGVyKCkuZ2V0KCkgc2hvcnRNb250aFN5bWJvbHNdOwogICAgIGlmIChbYXJyYXkgY291
bnRdID09IDEyKSB7CiAgICAgICAgIGZvciAodW5zaWduZWQgaSA9IDA7IGkgPCAxMjsgKytpKQot
ICAgICAgICAgICAgbV9zaG9ydE1vbnRoTGFiZWxzLmFwcGVuZChbYXJyYXkgb2JqZWN0QXRJbmRl
eDppXSk7CisgICAgICAgICAgICBtX3Nob3J0TW9udGhMYWJlbHMudW5jaGVja2VkQXBwZW5kKFth
cnJheSBvYmplY3RBdEluZGV4OmldKTsKICAgICAgICAgcmV0dXJuIG1fc2hvcnRNb250aExhYmVs
czsKICAgICB9CiAgICAgZm9yIChhdXRvJiBuYW1lIDogV1RGOjptb250aE5hbWUpCi0gICAgICAg
IG1fc2hvcnRNb250aExhYmVscy5hcHBlbmQobmFtZSk7CisgICAgICAgIG1fc2hvcnRNb250aExh
YmVscy51bmNoZWNrZWRBcHBlbmQobmFtZSk7CiAgICAgcmV0dXJuIG1fc2hvcnRNb250aExhYmVs
czsKIH0KIApAQCAtMjIwLDcgKzIyMCw3IEBAIGNvbnN0IFZlY3RvcjxTdHJpbmc+JiBMb2NhbGVD
b2NvYTo6c3RhbmRBbG9uZU1vbnRoTGFiZWxzKCkKICAgICBpZiAoW2FycmF5IGNvdW50XSA9PSAx
MikgewogICAgICAgICBtX3N0YW5kQWxvbmVNb250aExhYmVscy5yZXNlcnZlQ2FwYWNpdHkoMTIp
OwogICAgICAgICBmb3IgKHVuc2lnbmVkIGkgPSAwOyBpIDwgMTI7ICsraSkKLSAgICAgICAgICAg
IG1fc3RhbmRBbG9uZU1vbnRoTGFiZWxzLmFwcGVuZChbYXJyYXkgb2JqZWN0QXRJbmRleDppXSk7
CisgICAgICAgICAgICBtX3N0YW5kQWxvbmVNb250aExhYmVscy51bmNoZWNrZWRBcHBlbmQoW2Fy
cmF5IG9iamVjdEF0SW5kZXg6aV0pOwogICAgICAgICByZXR1cm4gbV9zdGFuZEFsb25lTW9udGhM
YWJlbHM7CiAgICAgfQogICAgIG1fc3RhbmRBbG9uZU1vbnRoTGFiZWxzID0gc2hvcnRNb250aExh
YmVscygpOwpAQCAtMjM1LDcgKzIzNSw3IEBAIGNvbnN0IFZlY3RvcjxTdHJpbmc+JiBMb2NhbGVD
b2NvYTo6c2hvcnRTdGFuZEFsb25lTW9udGhMYWJlbHMoKQogICAgIGlmIChbYXJyYXkgY291bnRd
ID09IDEyKSB7CiAgICAgICAgIG1fc2hvcnRTdGFuZEFsb25lTW9udGhMYWJlbHMucmVzZXJ2ZUNh
cGFjaXR5KDEyKTsKICAgICAgICAgZm9yICh1bnNpZ25lZCBpID0gMDsgaSA8IDEyOyArK2kpCi0g
ICAgICAgICAgICBtX3Nob3J0U3RhbmRBbG9uZU1vbnRoTGFiZWxzLmFwcGVuZChbYXJyYXkgb2Jq
ZWN0QXRJbmRleDppXSk7CisgICAgICAgICAgICBtX3Nob3J0U3RhbmRBbG9uZU1vbnRoTGFiZWxz
LnVuY2hlY2tlZEFwcGVuZChbYXJyYXkgb2JqZWN0QXRJbmRleDppXSk7CiAgICAgICAgIHJldHVy
biBtX3Nob3J0U3RhbmRBbG9uZU1vbnRoTGFiZWxzOwogICAgIH0KICAgICBtX3Nob3J0U3RhbmRB
bG9uZU1vbnRoTGFiZWxzID0gc2hvcnRNb250aExhYmVscygpOwpAQCAtMjQ4LDggKzI0OCw4IEBA
IGNvbnN0IFZlY3RvcjxTdHJpbmc+JiBMb2NhbGVDb2NvYTo6dGltZUFNUE1MYWJlbHMoKQogICAg
ICAgICByZXR1cm4gbV90aW1lQU1QTUxhYmVsczsKICAgICBtX3RpbWVBTVBNTGFiZWxzLnJlc2Vy
dmVDYXBhY2l0eSgyKTsKICAgICBSZXRhaW5QdHI8TlNEYXRlRm9ybWF0dGVyPiBmb3JtYXR0ZXIg
PSBzaG9ydFRpbWVGb3JtYXR0ZXIoKTsKLSAgICBtX3RpbWVBTVBNTGFiZWxzLmFwcGVuZChbZm9y
bWF0dGVyIEFNU3ltYm9sXSk7Ci0gICAgbV90aW1lQU1QTUxhYmVscy5hcHBlbmQoW2Zvcm1hdHRl
ciBQTVN5bWJvbF0pOworICAgIG1fdGltZUFNUE1MYWJlbHMudW5jaGVja2VkQXBwZW5kKFtmb3Jt
YXR0ZXIgQU1TeW1ib2xdKTsKKyAgICBtX3RpbWVBTVBNTGFiZWxzLnVuY2hlY2tlZEFwcGVuZChb
Zm9ybWF0dGVyIFBNU3ltYm9sXSk7CiAgICAgcmV0dXJuIG1fdGltZUFNUE1MYWJlbHM7CiB9CiAK
ZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3BsdWdpbnMvRE9NTWltZVR5cGVBcnJheS5jcHAg
Yi9Tb3VyY2UvV2ViQ29yZS9wbHVnaW5zL0RPTU1pbWVUeXBlQXJyYXkuY3BwCmluZGV4IGE2ZWI0
Zjk5ZjM0MTZjZjg0NDYwZmMzYjAwYjRhNmYwMjQ1NTZkYzcuLmVhY2VjZmMzM2I4NTY5MjRmYzFk
MDBhMTE2ZjEwM2IzZDZlYzFmMDUgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL3BsdWdpbnMv
RE9NTWltZVR5cGVBcnJheS5jcHAKKysrIGIvU291cmNlL1dlYkNvcmUvcGx1Z2lucy9ET01NaW1l
VHlwZUFycmF5LmNwcApAQCAtNjMsMTMgKzYzLDExIEBAIFJlZlB0cjxET01NaW1lVHlwZT4gRE9N
TWltZVR5cGVBcnJheTo6bmFtZWRJdGVtKGNvbnN0IEF0b21TdHJpbmcmIHByb3BlcnR5TmFtZSkK
ICAgICByZXR1cm4gbnVsbHB0cjsKIH0KIAotVmVjdG9yPEF0b21TdHJpbmc+IERPTU1pbWVUeXBl
QXJyYXk6OnN1cHBvcnRlZFByb3BlcnR5TmFtZXMoKQorVmVjdG9yPEF0b21TdHJpbmc+IERPTU1p
bWVUeXBlQXJyYXk6OnN1cHBvcnRlZFByb3BlcnR5TmFtZXMoKSBjb25zdAogewotICAgIFZlY3Rv
cjxBdG9tU3RyaW5nPiByZXN1bHQ7Ci0gICAgcmVzdWx0LnJlc2VydmVJbml0aWFsQ2FwYWNpdHko
bV90eXBlcy5zaXplKCkpOwotICAgIGZvciAoYXV0byYgdHlwZSA6IG1fdHlwZXMpCi0gICAgICAg
IHJlc3VsdC51bmNoZWNrZWRBcHBlbmQodHlwZS0+dHlwZSgpKTsKLSAgICByZXR1cm4gcmVzdWx0
OworICAgIHJldHVybiBtX3R5cGVzLm1hcChbXShhdXRvJiB0eXBlKSAtPiBBdG9tU3RyaW5nIHsK
KyAgICAgICAgcmV0dXJuIHR5cGUtPnR5cGUoKTsKKyAgICB9KTsKIH0KIAogfSAvLyBuYW1lc3Bh
Y2UgV2ViQ29yZQpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvcGx1Z2lucy9ET01NaW1lVHlw
ZUFycmF5LmggYi9Tb3VyY2UvV2ViQ29yZS9wbHVnaW5zL0RPTU1pbWVUeXBlQXJyYXkuaAppbmRl
eCA0OWQ2YTg4ODMyZGRjZGQyOGNkOWJjN2NjMjA0YzQ0YWNhYzUyM2U2Li4xMzc2M2I1MTQzNDVi
NmI4NDhhMTk4ZGNiNjc0MTUyY2YwNzA1NmI3IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9w
bHVnaW5zL0RPTU1pbWVUeXBlQXJyYXkuaAorKysgYi9Tb3VyY2UvV2ViQ29yZS9wbHVnaW5zL0RP
TU1pbWVUeXBlQXJyYXkuaApAQCAtNDAsNyArNDAsNyBAQCBwdWJsaWM6CiAgICAgdW5zaWduZWQg
bGVuZ3RoKCkgY29uc3Q7CiAgICAgUmVmUHRyPERPTU1pbWVUeXBlPiBpdGVtKHVuc2lnbmVkIGlu
ZGV4KTsKICAgICBSZWZQdHI8RE9NTWltZVR5cGU+IG5hbWVkSXRlbShjb25zdCBBdG9tU3RyaW5n
JiBwcm9wZXJ0eU5hbWUpOwotICAgIFZlY3RvcjxBdG9tU3RyaW5nPiBzdXBwb3J0ZWRQcm9wZXJ0
eU5hbWVzKCk7CisgICAgVmVjdG9yPEF0b21TdHJpbmc+IHN1cHBvcnRlZFByb3BlcnR5TmFtZXMo
KSBjb25zdDsKIAogICAgIE5hdmlnYXRvciogbmF2aWdhdG9yKCkgeyByZXR1cm4gbV9uYXZpZ2F0
b3IuZ2V0KCk7IH0KIApkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvcGx1Z2lucy9ET01QbHVn
aW4uY3BwIGIvU291cmNlL1dlYkNvcmUvcGx1Z2lucy9ET01QbHVnaW4uY3BwCmluZGV4IDNiOGQ0
ZGY5Zjk3OTE2ZTAwYmRlZmFhOWQ2Yzk3YmM3YTA2MzhkMDkuLmMxMjljOGJjMDA2NTNkNmM3ZDRh
NWY3MmVlNzhiNWEyZjkwMDY1NjEgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL3BsdWdpbnMv
RE9NUGx1Z2luLmNwcAorKysgYi9Tb3VyY2UvV2ViQ29yZS9wbHVnaW5zL0RPTVBsdWdpbi5jcHAK
QEAgLTM1LDExICszNSw5IEBAIFJlZjxET01QbHVnaW4+IERPTVBsdWdpbjo6Y3JlYXRlKE5hdmln
YXRvciYgbmF2aWdhdG9yLCBjb25zdCBQbHVnaW5JbmZvJiBpbmZvKQogCiBzdGF0aWMgVmVjdG9y
PFJlZjxET01NaW1lVHlwZT4+IG1ha2VNaW1lVHlwZXMoTmF2aWdhdG9yJiBuYXZpZ2F0b3IsIGNv
bnN0IFBsdWdpbkluZm8mIGluZm8sIERPTVBsdWdpbiYgc2VsZikKIHsKLSAgICBWZWN0b3I8UmVm
PERPTU1pbWVUeXBlPj4gdHlwZXM7Ci0gICAgdHlwZXMucmVzZXJ2ZUluaXRpYWxDYXBhY2l0eShp
bmZvLm1pbWVzLnNpemUoKSk7Ci0gICAgZm9yIChhdXRvJiB0eXBlIDogaW5mby5taW1lcykKLSAg
ICAgICAgdHlwZXMudW5jaGVja2VkQXBwZW5kKERPTU1pbWVUeXBlOjpjcmVhdGUobmF2aWdhdG9y
LCB0eXBlLCBzZWxmKSk7Ci0KKyAgICBhdXRvIHR5cGVzID0gaW5mby5taW1lcy5tYXAoWyZdKGF1
dG8mIHR5cGUpIHsKKyAgICAgICAgcmV0dXJuIERPTU1pbWVUeXBlOjpjcmVhdGUobmF2aWdhdG9y
LCB0eXBlLCBzZWxmKTsKKyAgICB9KTsKICAgICBzdGQ6OnNvcnQodHlwZXMuYmVnaW4oKSwgdHlw
ZXMuZW5kKCksIFtdKGNvbnN0IFJlZjxET01NaW1lVHlwZT4mIGEsIGNvbnN0IFJlZjxET01NaW1l
VHlwZT4mIGIpIHsKICAgICAgICAgcmV0dXJuIGNvZGVQb2ludENvbXBhcmVMZXNzVGhhbihhLT50
eXBlKCksIGItPnR5cGUoKSk7CiAgICAgfSk7CkBAIC05MiwxMyArOTAsMTEgQEAgUmVmUHRyPERP
TU1pbWVUeXBlPiBET01QbHVnaW46Om5hbWVkSXRlbShjb25zdCBBdG9tU3RyaW5nJiBwcm9wZXJ0
eU5hbWUpCiAgICAgcmV0dXJuIG51bGxwdHI7CiB9CiAKLVZlY3RvcjxBdG9tU3RyaW5nPiBET01Q
bHVnaW46OnN1cHBvcnRlZFByb3BlcnR5TmFtZXMoKQorVmVjdG9yPEF0b21TdHJpbmc+IERPTVBs
dWdpbjo6c3VwcG9ydGVkUHJvcGVydHlOYW1lcygpIGNvbnN0CiB7Ci0gICAgVmVjdG9yPEF0b21T
dHJpbmc+IHJlc3VsdDsKLSAgICByZXN1bHQucmVzZXJ2ZUluaXRpYWxDYXBhY2l0eShtX21pbWVU
eXBlcy5zaXplKCkpOwotICAgIGZvciAoYXV0byYgdHlwZSA6IG1fbWltZVR5cGVzKQotICAgICAg
ICByZXN1bHQudW5jaGVja2VkQXBwZW5kKHR5cGUtPnR5cGUoKSk7Ci0gICAgcmV0dXJuIHJlc3Vs
dDsKKyAgICByZXR1cm4gbV9taW1lVHlwZXMubWFwKFtdKGF1dG8mIHR5cGUpIC0+IEF0b21TdHJp
bmcgeworICAgICAgICByZXR1cm4gdHlwZS0+dHlwZSgpOworICAgIH0pOwogfQogCiB9IC8vIG5h
bWVzcGFjZSBXZWJDb3JlCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9wbHVnaW5zL0RPTVBs
dWdpbi5oIGIvU291cmNlL1dlYkNvcmUvcGx1Z2lucy9ET01QbHVnaW4uaAppbmRleCBhMjMwZTA0
Yzk0MzlkZDkyM2ZkOTVhOWVlYzBlZWJhYjNkMDYzYTYzLi43OTkzZDBiYjRlOTgwYTUzZDZmYWMy
MzQ3ODExOGIwOTYzYzBjZDA3IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9wbHVnaW5zL0RP
TVBsdWdpbi5oCisrKyBiL1NvdXJjZS9XZWJDb3JlL3BsdWdpbnMvRE9NUGx1Z2luLmgKQEAgLTQ2
LDcgKzQ2LDcgQEAgcHVibGljOgogCiAgICAgUmVmUHRyPERPTU1pbWVUeXBlPiBpdGVtKHVuc2ln
bmVkIGluZGV4KTsKICAgICBSZWZQdHI8RE9NTWltZVR5cGU+IG5hbWVkSXRlbShjb25zdCBBdG9t
U3RyaW5nJiBwcm9wZXJ0eU5hbWUpOwotICAgIFZlY3RvcjxBdG9tU3RyaW5nPiBzdXBwb3J0ZWRQ
cm9wZXJ0eU5hbWVzKCk7CisgICAgVmVjdG9yPEF0b21TdHJpbmc+IHN1cHBvcnRlZFByb3BlcnR5
TmFtZXMoKSBjb25zdDsKIAogICAgIGNvbnN0IFZlY3RvcjxSZWY8RE9NTWltZVR5cGU+PiYgbWlt
ZVR5cGVzKCkgY29uc3QgeyByZXR1cm4gbV9taW1lVHlwZXM7IH0KIApkaWZmIC0tZ2l0IGEvU291
cmNlL1dlYkNvcmUvcGx1Z2lucy9ET01QbHVnaW5BcnJheS5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9w
bHVnaW5zL0RPTVBsdWdpbkFycmF5LmNwcAppbmRleCAzZThlNGQ3ZWEyYjQ5MWFkNzRhNmRlMmE0
OTc4NjdkMWUwZmNmY2JmLi45MGViZGExMTdmMTRmMTE0MWYxZTgzNTA2ZjFiZTVlMGE5OTA4ODAy
IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9wbHVnaW5zL0RPTVBsdWdpbkFycmF5LmNwcAor
KysgYi9Tb3VyY2UvV2ViQ29yZS9wbHVnaW5zL0RPTVBsdWdpbkFycmF5LmNwcApAQCAtNzEsMTMg
KzcxLDExIEBAIFJlZlB0cjxET01QbHVnaW4+IERPTVBsdWdpbkFycmF5OjpuYW1lZEl0ZW0oY29u
c3QgQXRvbVN0cmluZyYgcHJvcGVydHlOYW1lKQogICAgIHJldHVybiBudWxscHRyOwogfQogCi1W
ZWN0b3I8QXRvbVN0cmluZz4gRE9NUGx1Z2luQXJyYXk6OnN1cHBvcnRlZFByb3BlcnR5TmFtZXMo
KQorVmVjdG9yPEF0b21TdHJpbmc+IERPTVBsdWdpbkFycmF5OjpzdXBwb3J0ZWRQcm9wZXJ0eU5h
bWVzKCkgY29uc3QKIHsKLSAgICBWZWN0b3I8QXRvbVN0cmluZz4gcmVzdWx0OwotICAgIHJlc3Vs
dC5yZXNlcnZlSW5pdGlhbENhcGFjaXR5KG1fcHVibGljbHlWaXNpYmxlUGx1Z2lucy5zaXplKCkp
OwotICAgIGZvciAoYXV0byYgcGx1Z2luIDogbV9wdWJsaWNseVZpc2libGVQbHVnaW5zKQotICAg
ICAgICByZXN1bHQudW5jaGVja2VkQXBwZW5kKHBsdWdpbi0+bmFtZSgpKTsKLSAgICByZXR1cm4g
cmVzdWx0OworICAgIHJldHVybiBtX3B1YmxpY2x5VmlzaWJsZVBsdWdpbnMubWFwKFtdKGF1dG8m
IHBsdWdpbikgLT4gQXRvbVN0cmluZyB7CisgICAgICAgIHJldHVybiBwbHVnaW4tPm5hbWUoKTsK
KyAgICB9KTsKIH0KIAogdm9pZCBET01QbHVnaW5BcnJheTo6cmVmcmVzaChib29sIHJlbG9hZFBh
Z2VzKQpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvcGx1Z2lucy9ET01QbHVnaW5BcnJheS5o
IGIvU291cmNlL1dlYkNvcmUvcGx1Z2lucy9ET01QbHVnaW5BcnJheS5oCmluZGV4IGQ2NjQ0ZDE5
YjA1MzJhM2E2NzE1Mjc2NDY2MmYyMzgwNDVlYzBiYmMuLjI0ZjkzMmM3ZWZhNzA0ZDE1ZDljMzli
Yjk0NjBlZWI2OWVjMTIwOTggMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL3BsdWdpbnMvRE9N
UGx1Z2luQXJyYXkuaAorKysgYi9Tb3VyY2UvV2ViQ29yZS9wbHVnaW5zL0RPTVBsdWdpbkFycmF5
LmgKQEAgLTQxLDcgKzQxLDcgQEAgcHVibGljOgogICAgIHVuc2lnbmVkIGxlbmd0aCgpIGNvbnN0
OwogICAgIFJlZlB0cjxET01QbHVnaW4+IGl0ZW0odW5zaWduZWQgaW5kZXgpOwogICAgIFJlZlB0
cjxET01QbHVnaW4+IG5hbWVkSXRlbShjb25zdCBBdG9tU3RyaW5nJiBwcm9wZXJ0eU5hbWUpOwot
ICAgIFZlY3RvcjxBdG9tU3RyaW5nPiBzdXBwb3J0ZWRQcm9wZXJ0eU5hbWVzKCk7CisgICAgVmVj
dG9yPEF0b21TdHJpbmc+IHN1cHBvcnRlZFByb3BlcnR5TmFtZXMoKSBjb25zdDsKIAogICAgIHZv
aWQgcmVmcmVzaChib29sIHJlbG9hZFBhZ2VzKTsKIApkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNv
cmUvcmVuZGVyaW5nL0xheWVyQW5jZXN0b3JDbGlwcGluZ1N0YWNrLmNwcCBiL1NvdXJjZS9XZWJD
b3JlL3JlbmRlcmluZy9MYXllckFuY2VzdG9yQ2xpcHBpbmdTdGFjay5jcHAKaW5kZXggZjJjYzAz
OTBmYzUwMjVjNDVlNWNkYWVmMTcxMjM1YmJjMDkwZjAzOS4uNzk3MGFmODI1NzEyNDI4ZmM4MGNl
NjFjNGE5MmIyMGQyYjFjZDY0OSAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvcmVuZGVyaW5n
L0xheWVyQW5jZXN0b3JDbGlwcGluZ1N0YWNrLmNwcAorKysgYi9Tb3VyY2UvV2ViQ29yZS9yZW5k
ZXJpbmcvTGF5ZXJBbmNlc3RvckNsaXBwaW5nU3RhY2suY3BwCkBAIC0zNCwxMCArMzQsOCBAQAog
bmFtZXNwYWNlIFdlYkNvcmUgewogCiBMYXllckFuY2VzdG9yQ2xpcHBpbmdTdGFjazo6TGF5ZXJB
bmNlc3RvckNsaXBwaW5nU3RhY2soVmVjdG9yPENvbXBvc2l0ZWRDbGlwRGF0YT4mJiBjbGlwRGF0
YVN0YWNrKQorICAgIDogbV9zdGFjayhXVEY6Om1hcChXVEZNb3ZlKGNsaXBEYXRhU3RhY2spLCBb
XShhdXRvJiYgY2xpcERhdGFFbnRyeSkgeyByZXR1cm4gQ2xpcHBpbmdTdGFja0VudHJ5IHsgV1RG
TW92ZShjbGlwRGF0YUVudHJ5KSwgMCwgbnVsbHB0ciB9OyB9KSkKIHsKLSAgICBtX3N0YWNrLnJl
c2VydmVJbml0aWFsQ2FwYWNpdHkoY2xpcERhdGFTdGFjay5zaXplKCkpOwotICAgIGZvciAoYXV0
byYgY2xpcERhdGFFbnRyeSA6IGNsaXBEYXRhU3RhY2spCi0gICAgICAgIG1fc3RhY2sudW5jaGVj
a2VkQXBwZW5kKHsgV1RGTW92ZShjbGlwRGF0YUVudHJ5KSwgMCwgbnVsbHB0ciB9KTsKIH0KIAog
Ym9vbCBMYXllckFuY2VzdG9yQ2xpcHBpbmdTdGFjazo6ZXF1YWxUb0NsaXBEYXRhKGNvbnN0IFZl
Y3RvcjxDb21wb3NpdGVkQ2xpcERhdGE+JiBjbGlwRGF0YVN0YWNrKSBjb25zdApAQCAtMTY1LDEz
ICsxNjMsOSBAQCBib29sIExheWVyQW5jZXN0b3JDbGlwcGluZ1N0YWNrOjp1cGRhdGVXaXRoQ2xp
cERhdGEoU2Nyb2xsaW5nQ29vcmRpbmF0b3IqIHNjcm9sbAogCiBWZWN0b3I8Q29tcG9zaXRlZENs
aXBEYXRhPiBMYXllckFuY2VzdG9yQ2xpcHBpbmdTdGFjazo6Y29tcG9zaXRlZENsaXBEYXRhKCkg
Y29uc3QKIHsKLSAgICBWZWN0b3I8Q29tcG9zaXRlZENsaXBEYXRhPiBjbGlwRGF0YTsKLSAgICBj
bGlwRGF0YS5yZXNlcnZlSW5pdGlhbENhcGFjaXR5KG1fc3RhY2suc2l6ZSgpKTsKLQotICAgIGZv
ciAoY29uc3QgYXV0byYgZW50cnkgOiBtX3N0YWNrKQotICAgICAgICBjbGlwRGF0YS51bmNoZWNr
ZWRBcHBlbmQoZW50cnkuY2xpcERhdGEpOwotCi0gICAgcmV0dXJuIGNsaXBEYXRhOworICAgIHJl
dHVybiBtX3N0YWNrLm1hcChbXShhdXRvJiBlbnRyeSkgeworICAgICAgICByZXR1cm4gZW50cnku
Y2xpcERhdGE7CisgICAgfSk7CiB9CiAKIHN0YXRpYyBUZXh0U3RyZWFtJiBvcGVyYXRvcjw8KFRl
eHRTdHJlYW0mIHRzLCBjb25zdCBMYXllckFuY2VzdG9yQ2xpcHBpbmdTdGFjazo6Q2xpcHBpbmdT
dGFja0VudHJ5JiBlbnRyeSkKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9S
ZW5kZXJCb3hNb2RlbE9iamVjdC5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvUmVuZGVy
Qm94TW9kZWxPYmplY3QuY3BwCmluZGV4IGJkYzFlNjJhN2E1YTA2NTQ1NWY1MWMzN2U4MzU3MDll
Y2YyMjZkZGIuLjg1MzBlMzM1NWYyZDZiOGQ3ZmZiNmVkZjgzZDYwOGJjYTRiOWY1NTUgMTAwNjQ0
Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9SZW5kZXJCb3hNb2RlbE9iamVjdC5jcHAK
KysrIGIvU291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL1JlbmRlckJveE1vZGVsT2JqZWN0LmNwcApA
QCAtMjIxMywxMyArMjIxMyw5IEBAIHZvaWQgUmVuZGVyQm94TW9kZWxPYmplY3Q6OmNsaXBCb3Jk
ZXJTaWRlUG9seWdvbihHcmFwaGljc0NvbnRleHQmIGdyYXBoaWNzQ29udGV4CiAgICAgLy8gICAg
ICAgICAwLS0tLS0tLS0tLS0tLS0tLTMKICAgICAvLwogICAgIFZlY3RvcjxGbG9hdFBvaW50PiBx
dWFkOwotICAgIHF1YWQucmVzZXJ2ZUluaXRpYWxDYXBhY2l0eSg0KTsKICAgICBzd2l0Y2ggKHNp
ZGUpIHsKICAgICBjYXNlIEJveFNpZGU6OlRvcDoKLSAgICAgICAgcXVhZC51bmNoZWNrZWRBcHBl
bmQob3V0ZXJSZWN0Lm1pblhNaW5ZQ29ybmVyKCkpOwotICAgICAgICBxdWFkLnVuY2hlY2tlZEFw
cGVuZChpbm5lclJlY3QubWluWE1pbllDb3JuZXIoKSk7Ci0gICAgICAgIHF1YWQudW5jaGVja2Vk
QXBwZW5kKGlubmVyUmVjdC5tYXhYTWluWUNvcm5lcigpKTsKLSAgICAgICAgcXVhZC51bmNoZWNr
ZWRBcHBlbmQob3V0ZXJSZWN0Lm1heFhNaW5ZQ29ybmVyKCkpOworICAgICAgICBxdWFkID0geyBv
dXRlclJlY3QubWluWE1pbllDb3JuZXIoKSwgaW5uZXJSZWN0Lm1pblhNaW5ZQ29ybmVyKCksIGlu
bmVyUmVjdC5tYXhYTWluWUNvcm5lcigpLCBvdXRlclJlY3QubWF4WE1pbllDb3JuZXIoKSB9Owog
CiAgICAgICAgIGlmICghaW5uZXJCb3JkZXIucmFkaWkoKS50b3BMZWZ0KCkuaXNaZXJvKCkpCiAg
ICAgICAgICAgICBmaW5kSW50ZXJzZWN0aW9uKG91dGVyUmVjdC5taW5YTWluWUNvcm5lcigpLCBp
bm5lclJlY3QubWluWE1pbllDb3JuZXIoKSwgaW5uZXJSZWN0Lm1pblhNYXhZQ29ybmVyKCksIGlu
bmVyUmVjdC5tYXhYTWluWUNvcm5lcigpLCBxdWFkWzFdKTsKQEAgLTIyMjksMTAgKzIyMjUsNyBA
QCB2b2lkIFJlbmRlckJveE1vZGVsT2JqZWN0OjpjbGlwQm9yZGVyU2lkZVBvbHlnb24oR3JhcGhp
Y3NDb250ZXh0JiBncmFwaGljc0NvbnRleAogICAgICAgICBicmVhazsKIAogICAgIGNhc2UgQm94
U2lkZTo6TGVmdDoKLSAgICAgICAgcXVhZC51bmNoZWNrZWRBcHBlbmQob3V0ZXJSZWN0Lm1pblhN
aW5ZQ29ybmVyKCkpOwotICAgICAgICBxdWFkLnVuY2hlY2tlZEFwcGVuZChpbm5lclJlY3QubWlu
WE1pbllDb3JuZXIoKSk7Ci0gICAgICAgIHF1YWQudW5jaGVja2VkQXBwZW5kKGlubmVyUmVjdC5t
aW5YTWF4WUNvcm5lcigpKTsKLSAgICAgICAgcXVhZC51bmNoZWNrZWRBcHBlbmQob3V0ZXJSZWN0
Lm1pblhNYXhZQ29ybmVyKCkpOworICAgICAgICBxdWFkID0geyBvdXRlclJlY3QubWluWE1pbllD
b3JuZXIoKSwgaW5uZXJSZWN0Lm1pblhNaW5ZQ29ybmVyKCksIGlubmVyUmVjdC5taW5YTWF4WUNv
cm5lcigpLCBvdXRlclJlY3QubWluWE1heFlDb3JuZXIoKSB9OwogCiAgICAgICAgIGlmICghaW5u
ZXJCb3JkZXIucmFkaWkoKS50b3BMZWZ0KCkuaXNaZXJvKCkpCiAgICAgICAgICAgICBmaW5kSW50
ZXJzZWN0aW9uKG91dGVyUmVjdC5taW5YTWluWUNvcm5lcigpLCBpbm5lclJlY3QubWluWE1pbllD
b3JuZXIoKSwgaW5uZXJSZWN0Lm1pblhNYXhZQ29ybmVyKCksIGlubmVyUmVjdC5tYXhYTWluWUNv
cm5lcigpLCBxdWFkWzFdKTsKQEAgLTIyNDIsMTAgKzIyMzUsNyBAQCB2b2lkIFJlbmRlckJveE1v
ZGVsT2JqZWN0OjpjbGlwQm9yZGVyU2lkZVBvbHlnb24oR3JhcGhpY3NDb250ZXh0JiBncmFwaGlj
c0NvbnRleAogICAgICAgICBicmVhazsKIAogICAgIGNhc2UgQm94U2lkZTo6Qm90dG9tOgotICAg
ICAgICBxdWFkLnVuY2hlY2tlZEFwcGVuZChvdXRlclJlY3QubWluWE1heFlDb3JuZXIoKSk7Ci0g
ICAgICAgIHF1YWQudW5jaGVja2VkQXBwZW5kKGlubmVyUmVjdC5taW5YTWF4WUNvcm5lcigpKTsK
LSAgICAgICAgcXVhZC51bmNoZWNrZWRBcHBlbmQoaW5uZXJSZWN0Lm1heFhNYXhZQ29ybmVyKCkp
OwotICAgICAgICBxdWFkLnVuY2hlY2tlZEFwcGVuZChvdXRlclJlY3QubWF4WE1heFlDb3JuZXIo
KSk7CisgICAgICAgIHF1YWQgPSB7IG91dGVyUmVjdC5taW5YTWF4WUNvcm5lcigpLCBpbm5lclJl
Y3QubWluWE1heFlDb3JuZXIoKSwgaW5uZXJSZWN0Lm1heFhNYXhZQ29ybmVyKCksIG91dGVyUmVj
dC5tYXhYTWF4WUNvcm5lcigpIH07CiAKICAgICAgICAgaWYgKCFpbm5lckJvcmRlci5yYWRpaSgp
LmJvdHRvbUxlZnQoKS5pc1plcm8oKSkKICAgICAgICAgICAgIGZpbmRJbnRlcnNlY3Rpb24ob3V0
ZXJSZWN0Lm1pblhNYXhZQ29ybmVyKCksIGlubmVyUmVjdC5taW5YTWF4WUNvcm5lcigpLCBpbm5l
clJlY3QubWluWE1pbllDb3JuZXIoKSwgaW5uZXJSZWN0Lm1heFhNYXhZQ29ybmVyKCksIHF1YWRb
MV0pOwpAQCAtMjI1NSwxMCArMjI0NSw3IEBAIHZvaWQgUmVuZGVyQm94TW9kZWxPYmplY3Q6OmNs
aXBCb3JkZXJTaWRlUG9seWdvbihHcmFwaGljc0NvbnRleHQmIGdyYXBoaWNzQ29udGV4CiAgICAg
ICAgIGJyZWFrOwogCiAgICAgY2FzZSBCb3hTaWRlOjpSaWdodDoKLSAgICAgICAgcXVhZC51bmNo
ZWNrZWRBcHBlbmQob3V0ZXJSZWN0Lm1heFhNaW5ZQ29ybmVyKCkpOwotICAgICAgICBxdWFkLnVu
Y2hlY2tlZEFwcGVuZChpbm5lclJlY3QubWF4WE1pbllDb3JuZXIoKSk7Ci0gICAgICAgIHF1YWQu
dW5jaGVja2VkQXBwZW5kKGlubmVyUmVjdC5tYXhYTWF4WUNvcm5lcigpKTsKLSAgICAgICAgcXVh
ZC51bmNoZWNrZWRBcHBlbmQob3V0ZXJSZWN0Lm1heFhNYXhZQ29ybmVyKCkpOworICAgICAgICBx
dWFkID0geyBvdXRlclJlY3QubWF4WE1pbllDb3JuZXIoKSwgaW5uZXJSZWN0Lm1heFhNaW5ZQ29y
bmVyKCksIGlubmVyUmVjdC5tYXhYTWF4WUNvcm5lcigpLCBvdXRlclJlY3QubWF4WE1heFlDb3Ju
ZXIoKSB9OwogCiAgICAgICAgIGlmICghaW5uZXJCb3JkZXIucmFkaWkoKS50b3BSaWdodCgpLmlz
WmVybygpKQogICAgICAgICAgICAgZmluZEludGVyc2VjdGlvbihvdXRlclJlY3QubWF4WE1pbllD
b3JuZXIoKSwgaW5uZXJSZWN0Lm1heFhNaW5ZQ29ybmVyKCksIGlubmVyUmVjdC5taW5YTWluWUNv
cm5lcigpLCBpbm5lclJlY3QubWF4WE1heFlDb3JuZXIoKSwgcXVhZFsxXSk7CmRpZmYgLS1naXQg
YS9Tb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvUmVuZGVyRWxlbWVudC5jcHAgYi9Tb3VyY2UvV2Vi
Q29yZS9yZW5kZXJpbmcvUmVuZGVyRWxlbWVudC5jcHAKaW5kZXggNGU3NTlkN2YyNTBhZjk4YTQ4
MDY0ZTQ2Njc3NzNlNzY4MzVmYjlhMS4uZmJiOGI4NmUzZmUzNmM1M2Q5NmIyMzRmYzFlMTBjNDU4
ZTk4M2E1NSAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL1JlbmRlckVsZW1l
bnQuY3BwCisrKyBiL1NvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9SZW5kZXJFbGVtZW50LmNwcApA
QCAtMTk2OCwzMSArMTk2OCwzOCBAQCB2b2lkIFJlbmRlckVsZW1lbnQ6OmRyYXdMaW5lRm9yQm94
U2lkZShHcmFwaGljc0NvbnRleHQmIGdyYXBoaWNzQ29udGV4dCwgY29uc3QgRgogICAgICAgICB5
MiA9IHJvdW5kVG9EZXZpY2VQaXhlbCh5MiwgZGV2aWNlU2NhbGVGYWN0b3IpOwogCiAgICAgICAg
IFZlY3RvcjxGbG9hdFBvaW50PiBxdWFkOwotICAgICAgICBxdWFkLnJlc2VydmVJbml0aWFsQ2Fw
YWNpdHkoNCk7CiAgICAgICAgIHN3aXRjaCAoc2lkZSkgewogICAgICAgICBjYXNlIEJveFNpZGU6
OlRvcDoKLSAgICAgICAgICAgIHF1YWQudW5jaGVja2VkQXBwZW5kKHsgeDEgKyBzdGQ6Om1heDxm
bG9hdD4oLWFkamFjZW50V2lkdGgxLCAwKSwgeTEgfSk7Ci0gICAgICAgICAgICBxdWFkLnVuY2hl
Y2tlZEFwcGVuZCh7IHgxICsgc3RkOjptYXg8ZmxvYXQ+KCBhZGphY2VudFdpZHRoMSwgMCksIHky
IH0pOwotICAgICAgICAgICAgcXVhZC51bmNoZWNrZWRBcHBlbmQoeyB4MiAtIHN0ZDo6bWF4PGZs
b2F0PiggYWRqYWNlbnRXaWR0aDIsIDApLCB5MiB9KTsKLSAgICAgICAgICAgIHF1YWQudW5jaGVj
a2VkQXBwZW5kKHsgeDIgLSBzdGQ6Om1heDxmbG9hdD4oLWFkamFjZW50V2lkdGgyLCAwKSwgeTEg
fSk7CisgICAgICAgICAgICBxdWFkID0geworICAgICAgICAgICAgICAgIHsgeDEgKyBzdGQ6Om1h
eDxmbG9hdD4oLWFkamFjZW50V2lkdGgxLCAwKSwgeTEgfSwKKyAgICAgICAgICAgICAgICB7IHgx
ICsgc3RkOjptYXg8ZmxvYXQ+KGFkamFjZW50V2lkdGgxLCAwKSwgeTIgfSwKKyAgICAgICAgICAg
ICAgICB7IHgyIC0gc3RkOjptYXg8ZmxvYXQ+KGFkamFjZW50V2lkdGgyLCAwKSwgeTIgfSwKKyAg
ICAgICAgICAgICAgICB7IHgyIC0gc3RkOjptYXg8ZmxvYXQ+KC1hZGphY2VudFdpZHRoMiwgMCks
IHkxIH0KKyAgICAgICAgICAgIH07CiAgICAgICAgICAgICBicmVhazsKICAgICAgICAgY2FzZSBC
b3hTaWRlOjpCb3R0b206Ci0gICAgICAgICAgICBxdWFkLnVuY2hlY2tlZEFwcGVuZCh7IHgxICsg
c3RkOjptYXg8ZmxvYXQ+KCBhZGphY2VudFdpZHRoMSwgMCksIHkxIH0pOwotICAgICAgICAgICAg
cXVhZC51bmNoZWNrZWRBcHBlbmQoeyB4MSArIHN0ZDo6bWF4PGZsb2F0PigtYWRqYWNlbnRXaWR0
aDEsIDApLCB5MiB9KTsKLSAgICAgICAgICAgIHF1YWQudW5jaGVja2VkQXBwZW5kKHsgeDIgLSBz
dGQ6Om1heDxmbG9hdD4oLWFkamFjZW50V2lkdGgyLCAwKSwgeTIgfSk7Ci0gICAgICAgICAgICBx
dWFkLnVuY2hlY2tlZEFwcGVuZCh7IHgyIC0gc3RkOjptYXg8ZmxvYXQ+KCBhZGphY2VudFdpZHRo
MiwgMCksIHkxIH0pOworICAgICAgICAgICAgcXVhZCA9IHsKKyAgICAgICAgICAgICAgICB7IHgx
ICsgc3RkOjptYXg8ZmxvYXQ+KGFkamFjZW50V2lkdGgxLCAwKSwgeTEgfSwKKyAgICAgICAgICAg
ICAgICB7IHgxICsgc3RkOjptYXg8ZmxvYXQ+KC1hZGphY2VudFdpZHRoMSwgMCksIHkyIH0sCisg
ICAgICAgICAgICAgICAgeyB4MiAtIHN0ZDo6bWF4PGZsb2F0PigtYWRqYWNlbnRXaWR0aDIsIDAp
LCB5MiB9LAorICAgICAgICAgICAgICAgIHsgeDIgLSBzdGQ6Om1heDxmbG9hdD4oYWRqYWNlbnRX
aWR0aDIsIDApLCB5MSB9CisgICAgICAgICAgICB9OwogICAgICAgICAgICAgYnJlYWs7CiAgICAg
ICAgIGNhc2UgQm94U2lkZTo6TGVmdDoKLSAgICAgICAgICAgIHF1YWQudW5jaGVja2VkQXBwZW5k
KHsgeDEsIHkxICsgc3RkOjptYXg8ZmxvYXQ+KC1hZGphY2VudFdpZHRoMSwgMCkgfSk7Ci0gICAg
ICAgICAgICBxdWFkLnVuY2hlY2tlZEFwcGVuZCh7IHgxLCB5MiAtIHN0ZDo6bWF4PGZsb2F0Pigt
YWRqYWNlbnRXaWR0aDIsIDApIH0pOwotICAgICAgICAgICAgcXVhZC51bmNoZWNrZWRBcHBlbmQo
eyB4MiwgeTIgLSBzdGQ6Om1heDxmbG9hdD4oIGFkamFjZW50V2lkdGgyLCAwKSB9KTsKLSAgICAg
ICAgICAgIHF1YWQudW5jaGVja2VkQXBwZW5kKHsgeDIsIHkxICsgc3RkOjptYXg8ZmxvYXQ+KCBh
ZGphY2VudFdpZHRoMSwgMCkgfSk7CisgICAgICAgICAgICBxdWFkID0geworICAgICAgICAgICAg
ICAgIHsgeDEsIHkxICsgc3RkOjptYXg8ZmxvYXQ+KC1hZGphY2VudFdpZHRoMSwgMCkgfSwKKyAg
ICAgICAgICAgICAgICB7IHgxLCB5MiAtIHN0ZDo6bWF4PGZsb2F0PigtYWRqYWNlbnRXaWR0aDIs
IDApIH0sCisgICAgICAgICAgICAgICAgeyB4MiwgeTIgLSBzdGQ6Om1heDxmbG9hdD4oYWRqYWNl
bnRXaWR0aDIsIDApIH0sCisgICAgICAgICAgICAgICAgeyB4MiwgeTEgKyBzdGQ6Om1heDxmbG9h
dD4oYWRqYWNlbnRXaWR0aDEsIDApIH0KKyAgICAgICAgICAgIH07CiAgICAgICAgICAgICBicmVh
azsKICAgICAgICAgY2FzZSBCb3hTaWRlOjpSaWdodDoKLSAgICAgICAgICAgIHF1YWQudW5jaGVj
a2VkQXBwZW5kKHsgeDEsIHkxICsgc3RkOjptYXg8ZmxvYXQ+KCBhZGphY2VudFdpZHRoMSwgMCkg
fSk7Ci0gICAgICAgICAgICBxdWFkLnVuY2hlY2tlZEFwcGVuZCh7IHgxLCB5MiAtIHN0ZDo6bWF4
PGZsb2F0PiggYWRqYWNlbnRXaWR0aDIsIDApIH0pOwotICAgICAgICAgICAgcXVhZC51bmNoZWNr
ZWRBcHBlbmQoeyB4MiwgeTIgLSBzdGQ6Om1heDxmbG9hdD4oLWFkamFjZW50V2lkdGgyLCAwKSB9
KTsKLSAgICAgICAgICAgIHF1YWQudW5jaGVja2VkQXBwZW5kKHsgeDIsIHkxICsgc3RkOjptYXg8
ZmxvYXQ+KC1hZGphY2VudFdpZHRoMSwgMCkgfSk7CisgICAgICAgICAgICBxdWFkID0geworICAg
ICAgICAgICAgICAgIHsgeDEsIHkxICsgc3RkOjptYXg8ZmxvYXQ+KGFkamFjZW50V2lkdGgxLCAw
KSB9LAorICAgICAgICAgICAgICAgIHsgeDEsIHkyIC0gc3RkOjptYXg8ZmxvYXQ+KGFkamFjZW50
V2lkdGgyLCAwKSB9LAorICAgICAgICAgICAgICAgIHsgeDIsIHkyIC0gc3RkOjptYXg8ZmxvYXQ+
KC1hZGphY2VudFdpZHRoMiwgMCkgfSwKKyAgICAgICAgICAgICAgICB7IHgyLCB5MSArIHN0ZDo6
bWF4PGZsb2F0PigtYWRqYWNlbnRXaWR0aDEsIDApIH0KKyAgICAgICAgICAgIH07CiAgICAgICAg
ICAgICBicmVhazsKICAgICAgICAgfQogCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9yZW5k
ZXJpbmcvUmVuZGVyR3JpZC5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvUmVuZGVyR3Jp
ZC5jcHAKaW5kZXggN2ZmYjYyMzc0OGYwMGY2NmZiN2JlODVmYjllOTUzM2U1NzQxMWVmMS4uYmVi
MWM5M2ViYTgzNWIzYjU3YzkxNDZmMGUwNzY0OTYxYzAxN2Y1YiAxMDA2NDQKLS0tIGEvU291cmNl
L1dlYkNvcmUvcmVuZGVyaW5nL1JlbmRlckdyaWQuY3BwCisrKyBiL1NvdXJjZS9XZWJDb3JlL3Jl
bmRlcmluZy9SZW5kZXJHcmlkLmNwcApAQCAtOTIxLDEwICs5MjEsMTAgQEAgVmVjdG9yPExheW91
dFVuaXQ+IFJlbmRlckdyaWQ6OnRyYWNrU2l6ZXNGb3JDb21wdXRlZFN0eWxlKEdyaWRUcmFja1Np
emluZ0RpcmVjdGkKICAgICBBU1NFUlQoIW1fZ3JpZC5uZWVkc0l0ZW1zUGxhY2VtZW50KCkpOwog
ICAgIGJvb2wgaGFzQ29sbGFwc2VkVHJhY2tzID0gbV9ncmlkLmhhc0F1dG9SZXBlYXRFbXB0eVRy
YWNrcyhkaXJlY3Rpb24pOwogICAgIExheW91dFVuaXQgZ2FwID0gIWhhc0NvbGxhcHNlZFRyYWNr
cyA/IGdyaWRHYXAoZGlyZWN0aW9uKSA6IDBfbHU7Ci0gICAgdHJhY2tzLnJlc2VydmVDYXBhY2l0
eShudW1Qb3NpdGlvbnMgLSAxKTsKKyAgICB0cmFja3MucmVzZXJ2ZUluaXRpYWxDYXBhY2l0eShu
dW1Qb3NpdGlvbnMgLSAxKTsKICAgICBmb3IgKHNpemVfdCBpID0gMDsgaSA8IG51bVBvc2l0aW9u
cyAtIDI7ICsraSkKLSAgICAgICAgdHJhY2tzLmFwcGVuZChwb3NpdGlvbnNbaSArIDFdIC0gcG9z
aXRpb25zW2ldIC0gb2Zmc2V0QmV0d2VlblRyYWNrcyAtIGdhcCk7Ci0gICAgdHJhY2tzLmFwcGVu
ZChwb3NpdGlvbnNbbnVtUG9zaXRpb25zIC0gMV0gLSBwb3NpdGlvbnNbbnVtUG9zaXRpb25zIC0g
Ml0pOworICAgICAgICB0cmFja3MudW5jaGVja2VkQXBwZW5kKHBvc2l0aW9uc1tpICsgMV0gLSBw
b3NpdGlvbnNbaV0gLSBvZmZzZXRCZXR3ZWVuVHJhY2tzIC0gZ2FwKTsKKyAgICB0cmFja3MudW5j
aGVja2VkQXBwZW5kKHBvc2l0aW9uc1tudW1Qb3NpdGlvbnMgLSAxXSAtIHBvc2l0aW9uc1tudW1Q
b3NpdGlvbnMgLSAyXSk7CiAKICAgICBpZiAoIWhhc0NvbGxhcHNlZFRyYWNrcykKICAgICAgICAg
cmV0dXJuIHRyYWNrczsKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3N0eWxlL0NsYXNzQ2hh
bmdlSW52YWxpZGF0aW9uLmNwcCBiL1NvdXJjZS9XZWJDb3JlL3N0eWxlL0NsYXNzQ2hhbmdlSW52
YWxpZGF0aW9uLmNwcAppbmRleCAwMTgwMjNlNTY4MDEwNjY1ZGUyM2MxZDIzZTQwZDUzNGQwMjY1
NDI4Li5mNjc1MjA5YmE5YzMxNzY3MzM3ZDM0ZDI3ZTMzNmE5OThiMTE4ZDdiIDEwMDY0NAotLS0g
YS9Tb3VyY2UvV2ViQ29yZS9zdHlsZS9DbGFzc0NoYW5nZUludmFsaWRhdGlvbi5jcHAKKysrIGIv
U291cmNlL1dlYkNvcmUvc3R5bGUvQ2xhc3NDaGFuZ2VJbnZhbGlkYXRpb24uY3BwCkBAIC00Niw3
ICs0Niw3IEBAIHVzaW5nIENsYXNzQ2hhbmdlVmVjdG9yID0gVmVjdG9yPENsYXNzQ2hhbmdlLCA0
PjsKIHN0YXRpYyBDbGFzc0NoYW5nZVZlY3RvciBjb2xsZWN0Q2xhc3Nlcyhjb25zdCBTcGFjZVNw
bGl0U3RyaW5nJiBjbGFzc2VzLCBDbGFzc0NoYW5nZVR5cGUgY2hhbmdlVHlwZSkKIHsKICAgICBD
bGFzc0NoYW5nZVZlY3RvciByZXN1bHQ7Ci0gICAgcmVzdWx0LnJlc2VydmVDYXBhY2l0eShjbGFz
c2VzLnNpemUoKSk7CisgICAgcmVzdWx0LnJlc2VydmVJbml0aWFsQ2FwYWNpdHkoY2xhc3Nlcy5z
aXplKCkpOwogICAgIGZvciAodW5zaWduZWQgaSA9IDA7IGkgPCBjbGFzc2VzLnNpemUoKTsgKytp
KQogICAgICAgICByZXN1bHQudW5jaGVja2VkQXBwZW5kKHsgY2xhc3Nlc1tpXS5pbXBsKCksIGNo
YW5nZVR5cGUgfSk7CiAgICAgcmV0dXJuIHJlc3VsdDsKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJD
b3JlL3N0eWxlL1N0eWxlQnVpbGRlckNvbnZlcnRlci5oIGIvU291cmNlL1dlYkNvcmUvc3R5bGUv
U3R5bGVCdWlsZGVyQ29udmVydGVyLmgKaW5kZXggMTgyMzcyZjA5YjgwZjIxOGM5ZDE5NmNjNDJh
NzU5MGRmMzI3YmMzNC4uMmY4MzRkZjY3ZDgwY2IxM2RkNGM5MTU1MWJhZDEyZGIxYjIzYTI0OSAx
MDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvc3R5bGUvU3R5bGVCdWlsZGVyQ29udmVydGVyLmgK
KysrIGIvU291cmNlL1dlYkNvcmUvc3R5bGUvU3R5bGVCdWlsZGVyQ29udmVydGVyLmgKQEAgLTM1
NSwxMiArMzU1LDEyIEBAIGlubGluZSBMZW5ndGggQnVpbGRlckNvbnZlcnRlcjo6Y29udmVydFRv
MTAwUGVyY2VudE1pbnVzTGVuZ3RoKGNvbnN0IExlbmd0aCYgbGVuCiAgICAgICAgIHJldHVybiBM
ZW5ndGgoMTAwIC0gbGVuZ3RoLnZhbHVlKCksIExlbmd0aFR5cGU6OlBlcmNlbnQpOwogICAgIAog
ICAgIC8vIFR1cm4gdGhpcyBpbnRvIGEgY2FsYyBleHByZXNzaW9uOiBjYWxjKDEwMCUgLSBsZW5n
dGgpCi0gICAgVmVjdG9yPHN0ZDo6dW5pcXVlX3B0cjxDYWxjRXhwcmVzc2lvbk5vZGU+PiBsZW5n
dGhzOwotICAgIGxlbmd0aHMucmVzZXJ2ZUluaXRpYWxDYXBhY2l0eSgyKTsKLSAgICBsZW5ndGhz
LnVuY2hlY2tlZEFwcGVuZChtYWtlVW5pcXVlPENhbGNFeHByZXNzaW9uTGVuZ3RoPihMZW5ndGgo
MTAwLCBMZW5ndGhUeXBlOjpQZXJjZW50KSkpOwotICAgIGxlbmd0aHMudW5jaGVja2VkQXBwZW5k
KG1ha2VVbmlxdWU8Q2FsY0V4cHJlc3Npb25MZW5ndGg+KGxlbmd0aCkpOwotICAgIGF1dG8gb3Ag
PSBtYWtlVW5pcXVlPENhbGNFeHByZXNzaW9uT3BlcmF0aW9uPihXVEZNb3ZlKGxlbmd0aHMpLCBD
YWxjT3BlcmF0b3I6OlN1YnRyYWN0KTsKLSAgICByZXR1cm4gTGVuZ3RoKENhbGN1bGF0aW9uVmFs
dWU6OmNyZWF0ZShXVEZNb3ZlKG9wKSwgVmFsdWVSYW5nZTo6QWxsKSk7CisgICAgYXV0byBsZW5n
dGhzID0gVmVjdG9yPHN0ZDo6dW5pcXVlX3B0cjxDYWxjRXhwcmVzc2lvbk5vZGU+Pjo6ZnJvbSgK
KyAgICAgICAgbWFrZVVuaXF1ZTxDYWxjRXhwcmVzc2lvbkxlbmd0aD4oTGVuZ3RoKDEwMCwgTGVu
Z3RoVHlwZTo6UGVyY2VudCkpLAorICAgICAgICBtYWtlVW5pcXVlPENhbGNFeHByZXNzaW9uTGVu
Z3RoPihsZW5ndGgpCisgICAgKTsKKyAgICBhdXRvIG9wZXJhdGlvbiA9IG1ha2VVbmlxdWU8Q2Fs
Y0V4cHJlc3Npb25PcGVyYXRpb24+KFdURk1vdmUobGVuZ3RocyksIENhbGNPcGVyYXRvcjo6U3Vi
dHJhY3QpOworICAgIHJldHVybiBMZW5ndGgoQ2FsY3VsYXRpb25WYWx1ZTo6Y3JlYXRlKFdURk1v
dmUob3BlcmF0aW9uKSwgVmFsdWVSYW5nZTo6QWxsKSk7CiB9CiAKIGlubGluZSBMZW5ndGggQnVp
bGRlckNvbnZlcnRlcjo6Y29udmVydFBvc2l0aW9uQ29tcG9uZW50WChCdWlsZGVyU3RhdGUmIGJ1
aWxkZXJTdGF0ZSwgY29uc3QgQ1NTVmFsdWUmIHZhbHVlKQpkaWZmIC0tZ2l0IGEvU291cmNlL1dl
YkNvcmUvdGVzdGluZy9Nb2NrQ0RNRmFjdG9yeS5jcHAgYi9Tb3VyY2UvV2ViQ29yZS90ZXN0aW5n
L01vY2tDRE1GYWN0b3J5LmNwcAppbmRleCAyMDUyNzk1NTI4MzZlMDQ0ZGQ3YzJhOGVhMzIxNjgy
ZDkxNzkzOGMwLi5iMjE1ZTBkMGE4MTRlNWRhODcyZWEwNDM3MzIzOTk2MTJiOGE2YTNiIDEwMDY0
NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS90ZXN0aW5nL01vY2tDRE1GYWN0b3J5LmNwcAorKysgYi9T
b3VyY2UvV2ViQ29yZS90ZXN0aW5nL01vY2tDRE1GYWN0b3J5LmNwcApAQCAtMzQzLDEyICszNDMs
OSBAQCB2b2lkIE1vY2tDRE1JbnN0YW5jZVNlc3Npb246OnVwZGF0ZUxpY2Vuc2UoY29uc3QgU3Ry
aW5nJiBzZXNzaW9uSUQsIExpY2Vuc2VUeXBlLAogICAgIGlmIChyZXNwb25zZVZlY3Rvci5jb250
YWlucyhTdHJpbmcoImtleXMtY2hhbmdlZCJfcykpKSB7CiAgICAgICAgIGNvbnN0IGF1dG8qIGtl
eXMgPSBmYWN0b3J5LT5rZXlzRm9yU2Vzc2lvbldpdGhJRChzZXNzaW9uSUQpOwogICAgICAgICBp
ZiAoa2V5cykgewotICAgICAgICAgICAgS2V5U3RhdHVzVmVjdG9yIGtleVN0YXR1c1ZlY3RvcjsK
LSAgICAgICAgICAgIGtleVN0YXR1c1ZlY3Rvci5yZXNlcnZlSW5pdGlhbENhcGFjaXR5KGtleXMt
PnNpemUoKSk7Ci0gICAgICAgICAgICBmb3IgKGF1dG8mIGtleSA6ICprZXlzKQotICAgICAgICAg
ICAgICAgIGtleVN0YXR1c1ZlY3Rvci51bmNoZWNrZWRBcHBlbmQoeyBrZXkuY29weVJlZigpLCBL
ZXlTdGF0dXM6OlVzYWJsZSB9KTsKLQotICAgICAgICAgICAgY2hhbmdlZEtleXMgPSBXVEZNb3Zl
KGtleVN0YXR1c1ZlY3Rvcik7CisgICAgICAgICAgICBjaGFuZ2VkS2V5cyA9IGtleXMtPm1hcChb
XShhdXRvJiBrZXkpIHsKKyAgICAgICAgICAgICAgICByZXR1cm4gc3RkOjptYWtlX3BhaXIoa2V5
LmNvcHlSZWYoKSwgS2V5U3RhdHVzOjpVc2FibGUpOworICAgICAgICAgICAgfSk7CiAgICAgICAg
IH0KICAgICB9CiAKQEAgLTM5NSwxMCArMzkyLDkgQEAgdm9pZCBNb2NrQ0RNSW5zdGFuY2VTZXNz
aW9uOjpyZW1vdmVTZXNzaW9uRGF0YShjb25zdCBTdHJpbmcmIGlkLCBMaWNlbnNlVHlwZSwgUmUK
ICAgICB9CiAKICAgICBhdXRvIGtleXMgPSBmYWN0b3J5LT5yZW1vdmVLZXlzRnJvbVNlc3Npb25X
aXRoSUQoaWQpOwotICAgIEtleVN0YXR1c1ZlY3RvciBrZXlTdGF0dXNWZWN0b3I7Ci0gICAga2V5
U3RhdHVzVmVjdG9yLnJlc2VydmVJbml0aWFsQ2FwYWNpdHkoa2V5cy5zaXplKCkpOwotICAgIGZv
ciAoYXV0byYga2V5IDoga2V5cykKLSAgICAgICAga2V5U3RhdHVzVmVjdG9yLnVuY2hlY2tlZEFw
cGVuZCh7IFdURk1vdmUoa2V5KSwgS2V5U3RhdHVzOjpSZWxlYXNlZCB9KTsKKyAgICBhdXRvIGtl
eVN0YXR1c1ZlY3RvciA9IFdURjo6bWFwKFdURk1vdmUoa2V5cyksIFtdKGF1dG8mJiBrZXkpIHsK
KyAgICAgICAgcmV0dXJuIHN0ZDo6bWFrZV9wYWlyKFdURk1vdmUoa2V5KSwgS2V5U3RhdHVzOjpS
ZWxlYXNlZCk7CisgICAgfSk7CiAKICAgICBDU3RyaW5nIG1lc3NhZ2UgeyAicmVtb3ZlLW1lc3Nh
Z2UiIH07CiAgICAgY2FsbGJhY2soV1RGTW92ZShrZXlTdGF0dXNWZWN0b3IpLCBTaGFyZWRCdWZm
ZXI6OmNyZWF0ZShtZXNzYWdlLmRhdGEoKSwgbWVzc2FnZS5sZW5ndGgoKSksIFN1Y2Nlc3NWYWx1
ZTo6U3VjY2VlZGVkKTsKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3dvcmtlcnMvc2Vydmlj
ZS9zZXJ2ZXIvU1dTZXJ2ZXIuY3BwIGIvU291cmNlL1dlYkNvcmUvd29ya2Vycy9zZXJ2aWNlL3Nl
cnZlci9TV1NlcnZlci5jcHAKaW5kZXggNjU0ZjFhYzcwMWIzZjU4YTM3ZGFjMTQ3MWRiOWQ4NTJk
YjJkZGJiZS4uNDg1YTgzMDg1NWNkNGJhYzAzZWQ4M2U2NjQ3ODhiMjgxNjRmNDBkMSAxMDA2NDQK
LS0tIGEvU291cmNlL1dlYkNvcmUvd29ya2Vycy9zZXJ2aWNlL3NlcnZlci9TV1NlcnZlci5jcHAK
KysrIGIvU291cmNlL1dlYkNvcmUvd29ya2Vycy9zZXJ2aWNlL3NlcnZlci9TV1NlcnZlci5jcHAK
QEAgLTI1MiwxMSArMjUyLDkgQEAgVmVjdG9yPFNlcnZpY2VXb3JrZXJSZWdpc3RyYXRpb25EYXRh
PiBTV1NlcnZlcjo6Z2V0UmVnaXN0cmF0aW9ucyhjb25zdCBTZWN1cml0eU8KICAgICBzdGQ6OnNv
cnQobWF0Y2hpbmdSZWdpc3RyYXRpb25zLmJlZ2luKCksIG1hdGNoaW5nUmVnaXN0cmF0aW9ucy5l
bmQoKSwgW10oYXV0byYgYSwgYXV0byYgYikgewogICAgICAgICByZXR1cm4gYS0+Y3JlYXRpb25U
aW1lKCkgPCBiLT5jcmVhdGlvblRpbWUoKTsKICAgICB9KTsKLSAgICBWZWN0b3I8U2VydmljZVdv
cmtlclJlZ2lzdHJhdGlvbkRhdGE+IG1hdGNoaW5nUmVnaXN0cmF0aW9uRGF0YXM7Ci0gICAgbWF0
Y2hpbmdSZWdpc3RyYXRpb25EYXRhcy5yZXNlcnZlSW5pdGlhbENhcGFjaXR5KG1hdGNoaW5nUmVn
aXN0cmF0aW9ucy5zaXplKCkpOwotICAgIGZvciAoYXV0byogcmVnaXN0cmF0aW9uIDogbWF0Y2hp
bmdSZWdpc3RyYXRpb25zKQotICAgICAgICBtYXRjaGluZ1JlZ2lzdHJhdGlvbkRhdGFzLnVuY2hl
Y2tlZEFwcGVuZChyZWdpc3RyYXRpb24tPmRhdGEoKSk7Ci0gICAgcmV0dXJuIG1hdGNoaW5nUmVn
aXN0cmF0aW9uRGF0YXM7CisgICAgcmV0dXJuIG1hdGNoaW5nUmVnaXN0cmF0aW9ucy5tYXAoW10o
YXV0byYgcmVnaXN0cmF0aW9uKSB7CisgICAgICAgIHJldHVybiByZWdpc3RyYXRpb24tPmRhdGEo
KTsKKyAgICB9KTsKIH0KIAogdm9pZCBTV1NlcnZlcjo6Y2xlYXJBbGwoQ29tcGxldGlvbkhhbmRs
ZXI8dm9pZCgpPiYmIGNvbXBsZXRpb25IYW5kbGVyKQpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYktp
dC9OZXR3b3JrUHJvY2Vzcy9XZWJTdG9yYWdlL0xvY2FsU3RvcmFnZURhdGFiYXNlVHJhY2tlci5j
cHAgYi9Tb3VyY2UvV2ViS2l0L05ldHdvcmtQcm9jZXNzL1dlYlN0b3JhZ2UvTG9jYWxTdG9yYWdl
RGF0YWJhc2VUcmFja2VyLmNwcAppbmRleCBhYTMwYTZhMDRmYjAwMjlhOTU3NmY3N2M4YWQ4OGVk
MzZiNzc2NzFlLi4zYWFhM2M0ODBlNWY2YTk1MzBkZjhkOGNjZWJhMmU1NzllMDAyODEwIDEwMDY0
NAotLS0gYS9Tb3VyY2UvV2ViS2l0L05ldHdvcmtQcm9jZXNzL1dlYlN0b3JhZ2UvTG9jYWxTdG9y
YWdlRGF0YWJhc2VUcmFja2VyLmNwcAorKysgYi9Tb3VyY2UvV2ViS2l0L05ldHdvcmtQcm9jZXNz
L1dlYlN0b3JhZ2UvTG9jYWxTdG9yYWdlRGF0YWJhc2VUcmFja2VyLmNwcApAQCAtMTE5LDIxICsx
MTksMTQgQEAgVmVjdG9yPFNlY3VyaXR5T3JpZ2luRGF0YT4gTG9jYWxTdG9yYWdlRGF0YWJhc2VU
cmFja2VyOjpvcmlnaW5zKCkgY29uc3QKIAogVmVjdG9yPExvY2FsU3RvcmFnZURhdGFiYXNlVHJh
Y2tlcjo6T3JpZ2luRGV0YWlscz4gTG9jYWxTdG9yYWdlRGF0YWJhc2VUcmFja2VyOjpvcmlnaW5E
ZXRhaWxzQ3Jvc3NUaHJlYWRDb3B5KCkKIHsKLSAgICBWZWN0b3I8T3JpZ2luRGV0YWlscz4gcmVz
dWx0OwotICAgIGF1dG8gZGF0YWJhc2VPcmlnaW5zID0gb3JpZ2lucygpOwotICAgIHJlc3VsdC5y
ZXNlcnZlSW5pdGlhbENhcGFjaXR5KGRhdGFiYXNlT3JpZ2lucy5zaXplKCkpOwotCi0gICAgZm9y
IChjb25zdCBhdXRvJiBvcmlnaW4gOiBkYXRhYmFzZU9yaWdpbnMpIHsKLSAgICAgICAgU3RyaW5n
IHBhdGggPSBkYXRhYmFzZVBhdGgob3JpZ2luKTsKLQotICAgICAgICBPcmlnaW5EZXRhaWxzIGRl
dGFpbHM7Ci0gICAgICAgIGRldGFpbHMub3JpZ2luSWRlbnRpZmllciA9IGNyb3NzVGhyZWFkQ29w
eShvcmlnaW4uZGF0YWJhc2VJZGVudGlmaWVyKCkpOwotICAgICAgICBkZXRhaWxzLmNyZWF0aW9u
VGltZSA9IFNRTGl0ZUZpbGVTeXN0ZW06OmRhdGFiYXNlQ3JlYXRpb25UaW1lKHBhdGgpOwotICAg
ICAgICBkZXRhaWxzLm1vZGlmaWNhdGlvblRpbWUgPSBTUUxpdGVGaWxlU3lzdGVtOjpkYXRhYmFz
ZU1vZGlmaWNhdGlvblRpbWUocGF0aCk7Ci0gICAgICAgIHJlc3VsdC51bmNoZWNrZWRBcHBlbmQo
V1RGTW92ZShkZXRhaWxzKSk7Ci0gICAgfQotCi0gICAgcmV0dXJuIHJlc3VsdDsKKyAgICByZXR1
cm4gb3JpZ2lucygpLm1hcChbdGhpc10oYXV0byYgb3JpZ2luKSB7CisgICAgICAgIGF1dG8gcGF0
aCA9IGRhdGFiYXNlUGF0aChvcmlnaW4pOworICAgICAgICByZXR1cm4gT3JpZ2luRGV0YWlscyB7
CisgICAgICAgICAgICBjcm9zc1RocmVhZENvcHkob3JpZ2luLmRhdGFiYXNlSWRlbnRpZmllcigp
KSwKKyAgICAgICAgICAgIFNRTGl0ZUZpbGVTeXN0ZW06OmRhdGFiYXNlQ3JlYXRpb25UaW1lKHBh
dGgpLAorICAgICAgICAgICAgU1FMaXRlRmlsZVN5c3RlbTo6ZGF0YWJhc2VNb2RpZmljYXRpb25U
aW1lKHBhdGgpCisgICAgICAgIH07CisgICAgfSk7CiB9CiAKIFN0cmluZyBMb2NhbFN0b3JhZ2VE
YXRhYmFzZVRyYWNrZXI6OmRhdGFiYXNlUGF0aChjb25zdCBTdHJpbmcmIGZpbGVuYW1lKSBjb25z
dApkaWZmIC0tZ2l0IGEvU291cmNlL1dlYktpdC9OZXR3b3JrUHJvY2Vzcy9jYWNoZS9DYWNoZVN0
b3JhZ2VFbmdpbmVDYWNoZXMuY3BwIGIvU291cmNlL1dlYktpdC9OZXR3b3JrUHJvY2Vzcy9jYWNo
ZS9DYWNoZVN0b3JhZ2VFbmdpbmVDYWNoZXMuY3BwCmluZGV4IGMzMGMzYmU3YzVjNTUzYmYyMzI4
ZDk1MWI3NzQ0NDQxM2IzMmQ2YTUuLmQ3NWM1ODRkM2YwYTBlZGQwYWUyNzUzYjJlYzIwNmZmODRi
MzBmMmYgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJLaXQvTmV0d29ya1Byb2Nlc3MvY2FjaGUvQ2Fj
aGVTdG9yYWdlRW5naW5lQ2FjaGVzLmNwcAorKysgYi9Tb3VyY2UvV2ViS2l0L05ldHdvcmtQcm9j
ZXNzL2NhY2hlL0NhY2hlU3RvcmFnZUVuZ2luZUNhY2hlcy5jcHAKQEAgLTY1OCw5ICs2NTgsOSBA
QCB2b2lkIENhY2hlczo6Y2FjaGVJbmZvcyh1aW50NjRfdCB1cGRhdGVDb3VudGVyLCBDYWNoZUlu
Zm9zQ2FsbGJhY2smJiBjYWxsYmFjaykKIAogICAgIFZlY3RvcjxDYWNoZUluZm8+IGNhY2hlSW5m
b3M7CiAgICAgaWYgKGlzRGlydHkodXBkYXRlQ291bnRlcikpIHsKLSAgICAgICAgY2FjaGVJbmZv
cy5yZXNlcnZlSW5pdGlhbENhcGFjaXR5KG1fY2FjaGVzLnNpemUoKSk7Ci0gICAgICAgIGZvciAo
YXV0byYgY2FjaGUgOiBtX2NhY2hlcykKLSAgICAgICAgICAgIGNhY2hlSW5mb3MudW5jaGVja2Vk
QXBwZW5kKENhY2hlSW5mbyB7IGNhY2hlLmlkZW50aWZpZXIoKSwgY2FjaGUubmFtZSgpIH0pOwor
ICAgICAgICBjYWNoZUluZm9zID0gbV9jYWNoZXMubWFwKFtdKGF1dG8mIGNhY2hlKSB7CisgICAg
ICAgICAgICByZXR1cm4gQ2FjaGVJbmZvIHsgY2FjaGUuaWRlbnRpZmllcigpLCBjYWNoZS5uYW1l
KCkgfTsKKyAgICAgICAgfSk7CiAgICAgfQogICAgIGNhbGxiYWNrKENhY2hlSW5mb3MgeyBXVEZN
b3ZlKGNhY2hlSW5mb3MpLCBtX3VwZGF0ZUNvdW50ZXIgfSk7CiB9CmRpZmYgLS1naXQgYS9Tb3Vy
Y2UvV2ViS2l0L1NoYXJlZC9BUEkvQVBJQXJyYXkuY3BwIGIvU291cmNlL1dlYktpdC9TaGFyZWQv
QVBJL0FQSUFycmF5LmNwcAppbmRleCA5OGI4NzMxMTE0NDczODNjYzc0YTIwZmQxOThmMDVmOGE2
OWNlZWNjLi42ZjAwODBhNWE0YzliMjk0ZGZlZjFjZDMwNGNmYTZmN2RiYWMxZDI0IDEwMDY0NAot
LS0gYS9Tb3VyY2UvV2ViS2l0L1NoYXJlZC9BUEkvQVBJQXJyYXkuY3BwCisrKyBiL1NvdXJjZS9X
ZWJLaXQvU2hhcmVkL0FQSS9BUElBcnJheS5jcHAKQEAgLTQyLDEyICs0Miw5IEBAIFJlZjxBcnJh
eT4gQXJyYXk6OmNyZWF0ZShWZWN0b3I8UmVmUHRyPE9iamVjdD4+JiYgZWxlbWVudHMpCiAKIFJl
ZjxBcnJheT4gQXJyYXk6OmNyZWF0ZVN0cmluZ0FycmF5KGNvbnN0IFZlY3RvcjxXVEY6OlN0cmlu
Zz4mIHN0cmluZ3MpCiB7Ci0gICAgVmVjdG9yPFJlZlB0cjxPYmplY3Q+PiBlbGVtZW50czsKLSAg
ICBlbGVtZW50cy5yZXNlcnZlSW5pdGlhbENhcGFjaXR5KHN0cmluZ3Muc2l6ZSgpKTsKLQotICAg
IGZvciAoY29uc3QgYXV0byYgc3RyaW5nIDogc3RyaW5ncykKLSAgICAgICAgZWxlbWVudHMudW5j
aGVja2VkQXBwZW5kKEFQSTo6U3RyaW5nOjpjcmVhdGUoc3RyaW5nKSk7Ci0KKyAgICBhdXRvIGVs
ZW1lbnRzID0gc3RyaW5ncy5tYXAoW10oYXV0byYgc3RyaW5nKSAtPiBSZWZQdHI8T2JqZWN0PiB7
CisgICAgICAgIHJldHVybiBBUEk6OlN0cmluZzo6Y3JlYXRlKHN0cmluZyk7CisgICAgfSk7CiAg
ICAgcmV0dXJuIGNyZWF0ZShXVEZNb3ZlKGVsZW1lbnRzKSk7CiB9CiAKQEAgLTcxLDEwICs2OCw3
IEBAIFJlZjxBUEk6OkFycmF5PiBBcnJheTo6Y29weSgpCiAgICAgaWYgKCFzaXplKQogICAgICAg
ICByZXR1cm4gQXJyYXk6OmNyZWF0ZSgpOwogCi0gICAgVmVjdG9yPFJlZlB0cjxPYmplY3Q+PiBl
bGVtZW50czsKLSAgICBlbGVtZW50cy5yZXNlcnZlSW5pdGlhbENhcGFjaXR5KHNpemUpOwotICAg
IGZvciAoY29uc3QgYXV0byYgZW50cnkgOiB0aGlzLT5lbGVtZW50cygpKQotICAgICAgICBlbGVt
ZW50cy51bmNoZWNrZWRBcHBlbmQoZW50cnkpOworICAgIFZlY3RvcjxSZWZQdHI8T2JqZWN0Pj4g
ZWxlbWVudHMgPSB0aGlzLT5lbGVtZW50cygpOwogICAgIHJldHVybiBBcnJheTo6Y3JlYXRlKFdU
Rk1vdmUoZWxlbWVudHMpKTsKIH0KIApkaWZmIC0tZ2l0IGEvU291cmNlL1dlYktpdC9TaGFyZWQv
QVBJL0FQSURpY3Rpb25hcnkuY3BwIGIvU291cmNlL1dlYktpdC9TaGFyZWQvQVBJL0FQSURpY3Rp
b25hcnkuY3BwCmluZGV4IDRmYjk5NTJmZDY5M2EyZjE2OTU5ZmFlM2VhNTcxNDVhYzM5OTFjNDAu
LmJkN2M4NjM0MmM1Nzk2MTEyMWM1Yzk1NjEyNDBjZjZmNGJlMDNkMzMgMTAwNjQ0Ci0tLSBhL1Nv
dXJjZS9XZWJLaXQvU2hhcmVkL0FQSS9BUElEaWN0aW9uYXJ5LmNwcAorKysgYi9Tb3VyY2UvV2Vi
S2l0L1NoYXJlZC9BUEkvQVBJRGljdGlvbmFyeS5jcHAKQEAgLTU1LDEyICs1NSw5IEBAIFJlZjxB
cnJheT4gRGljdGlvbmFyeTo6a2V5cygpIGNvbnN0CiAgICAgaWYgKG1fbWFwLmlzRW1wdHkoKSkK
ICAgICAgICAgcmV0dXJuIEFQSTo6QXJyYXk6OmNyZWF0ZSgpOwogCi0gICAgVmVjdG9yPFJlZlB0
cjxBUEk6Ok9iamVjdD4+IGtleXM7Ci0gICAga2V5cy5yZXNlcnZlSW5pdGlhbENhcGFjaXR5KG1f
bWFwLnNpemUoKSk7Ci0KLSAgICBmb3IgKGNvbnN0IGF1dG8mIGtleSA6IG1fbWFwLmtleXMoKSkK
LSAgICAgICAga2V5cy51bmNoZWNrZWRBcHBlbmQoQVBJOjpTdHJpbmc6OmNyZWF0ZShrZXkpKTsK
LQorICAgIGF1dG8ga2V5cyA9IFdURjo6bWFwKG1fbWFwLCBbXShhdXRvJiBlbnRyeSkgLT4gUmVm
UHRyPEFQSTo6T2JqZWN0PiB7CisgICAgICAgIHJldHVybiBBUEk6OlN0cmluZzo6Y3JlYXRlKGVu
dHJ5LmtleSk7CisgICAgfSk7CiAgICAgcmV0dXJuIEFQSTo6QXJyYXk6OmNyZWF0ZShXVEZNb3Zl
KGtleXMpKTsKIH0KIApkaWZmIC0tZ2l0IGEvU291cmNlL1dlYktpdC9TaGFyZWQvVXNlckRhdGEu
Y3BwIGIvU291cmNlL1dlYktpdC9TaGFyZWQvVXNlckRhdGEuY3BwCmluZGV4IDUzMmYwY2QzYWYx
ZDNiNDUyMWNjYWM5YmQxMzQwNzNkZWYyZmYzZWUuLmY4YjdlZGNmNDQ5MTczMTUwYjBmODUwMTM2
MDM5ZDA5ZWM4M2ZjZjMgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJLaXQvU2hhcmVkL1VzZXJEYXRh
LmNwcAorKysgYi9Tb3VyY2UvV2ViS2l0L1NoYXJlZC9Vc2VyRGF0YS5jcHAKQEAgLTEwMSwxNSAr
MTAxLDExIEBAIHN0YXRpYyBSZWZQdHI8QVBJOjpPYmplY3Q+IHRyYW5zZm9ybUdyYXBoKEFQSTo6
T2JqZWN0JiBvYmplY3QsIGNvbnN0IFVzZXJEYXRhOjpUCiAgICAgaWYgKG9iamVjdC50eXBlKCkg
PT0gQVBJOjpPYmplY3Q6OlR5cGU6OkFycmF5KSB7CiAgICAgICAgIGF1dG8mIGFycmF5ID0gc3Rh
dGljX2Nhc3Q8QVBJOjpBcnJheSY+KG9iamVjdCk7CiAKLSAgICAgICAgVmVjdG9yPFJlZlB0cjxB
UEk6Ok9iamVjdD4+IGVsZW1lbnRzOwotICAgICAgICBlbGVtZW50cy5yZXNlcnZlSW5pdGlhbENh
cGFjaXR5KGFycmF5LmVsZW1lbnRzKCkuc2l6ZSgpKTsKLSAgICAgICAgZm9yIChjb25zdCBhdXRv
JiBlbGVtZW50IDogYXJyYXkuZWxlbWVudHMoKSkgeworICAgICAgICBhdXRvIGVsZW1lbnRzID0g
YXJyYXkuZWxlbWVudHMoKS5tYXAoWyZdKGF1dG8mIGVsZW1lbnQpIC0+IFJlZlB0cjxBUEk6Ok9i
amVjdD4gewogICAgICAgICAgICAgaWYgKCFlbGVtZW50KQotICAgICAgICAgICAgICAgIGVsZW1l
bnRzLnVuY2hlY2tlZEFwcGVuZChudWxscHRyKTsKLSAgICAgICAgICAgIGVsc2UKLSAgICAgICAg
ICAgICAgICBlbGVtZW50cy51bmNoZWNrZWRBcHBlbmQodHJhbnNmb3JtR3JhcGgoKmVsZW1lbnQs
IHRyYW5zZm9ybWVyKSk7Ci0gICAgICAgIH0KLQorICAgICAgICAgICAgICAgIHJldHVybiBudWxs
cHRyOworICAgICAgICAgICAgcmV0dXJuIHRyYW5zZm9ybUdyYXBoKCplbGVtZW50LCB0cmFuc2Zv
cm1lcik7CisgICAgICAgIH0pOwogICAgICAgICByZXR1cm4gQVBJOjpBcnJheTo6Y3JlYXRlKFdU
Rk1vdmUoZWxlbWVudHMpKTsKICAgICB9CiAKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJLaXQvU2hh
cmVkL1dlYkNvbnRleHRNZW51SXRlbS5jcHAgYi9Tb3VyY2UvV2ViS2l0L1NoYXJlZC9XZWJDb250
ZXh0TWVudUl0ZW0uY3BwCmluZGV4IGQzMDc4YjU5YWEzZWFjZTk3M2RjZDkyZTc1ZDUxMTk4ZGEz
NWM0ZTAuLmQyODEzODBhZTI1ZDliM2Y1MjkwZWVlZjAxZmUzN2ZlYzdhYjIzYjMgMTAwNjQ0Ci0t
LSBhL1NvdXJjZS9XZWJLaXQvU2hhcmVkL1dlYkNvbnRleHRNZW51SXRlbS5jcHAKKysrIGIvU291
cmNlL1dlYktpdC9TaGFyZWQvV2ViQ29udGV4dE1lbnVJdGVtLmNwcApAQCAtNDQsMTMgKzQ0LDEy
IEBAIFJlZjxXZWJDb250ZXh0TWVudUl0ZW0+IFdlYkNvbnRleHRNZW51SXRlbTo6Y3JlYXRlKGNv
bnN0IFN0cmluZyYgdGl0bGUsIGJvb2wgZW5hCiAgICAgc2l6ZV90IHNpemUgPSBzdWJtZW51SXRl
bXMtPnNpemUoKTsKIAogICAgIFZlY3RvcjxXZWJDb250ZXh0TWVudUl0ZW1EYXRhPiBzdWJtZW51
OwotICAgIHN1Ym1lbnUucmVzZXJ2ZUNhcGFjaXR5KHNpemUpOwotCisgICAgc3VibWVudS5yZXNl
cnZlSW5pdGlhbENhcGFjaXR5KHNpemUpOwogICAgIGZvciAoc2l6ZV90IGkgPSAwOyBpIDwgc2l6
ZTsgKytpKSB7Ci0gICAgICAgIFdlYkNvbnRleHRNZW51SXRlbSogaXRlbSA9IHN1Ym1lbnVJdGVt
cy0+YXQ8V2ViQ29udGV4dE1lbnVJdGVtPihpKTsKLSAgICAgICAgaWYgKGl0ZW0pCi0gICAgICAg
ICAgICBzdWJtZW51LmFwcGVuZChpdGVtLT5kYXRhKCkpOworICAgICAgICBpZiAoYXV0byogaXRl
bSA9IHN1Ym1lbnVJdGVtcy0+YXQ8V2ViQ29udGV4dE1lbnVJdGVtPihpKSkKKyAgICAgICAgICAg
IHN1Ym1lbnUudW5jaGVja2VkQXBwZW5kKGl0ZW0tPmRhdGEoKSk7CiAgICAgfQorICAgIHN1Ym1l
bnUuc2hyaW5rVG9GaXQoKTsKIAogICAgIHJldHVybiBhZG9wdFJlZigqbmV3IFdlYkNvbnRleHRN
ZW51SXRlbShXZWJDb250ZXh0TWVudUl0ZW1EYXRhKFdlYkNvcmU6OkNvbnRleHRNZW51SXRlbVRh
Z05vQWN0aW9uLCB0aXRsZSwgZW5hYmxlZCwgc3VibWVudSkpKS5sZWFrUmVmKCk7CiB9CkBAIC02
NiwxMiArNjUsOSBAQCBSZWY8QVBJOjpBcnJheT4gV2ViQ29udGV4dE1lbnVJdGVtOjpzdWJtZW51
SXRlbXNBc0FQSUFycmF5KCkgY29uc3QKICAgICBpZiAobV93ZWJDb250ZXh0TWVudUl0ZW1EYXRh
LnR5cGUoKSAhPSBXZWJDb3JlOjpTdWJtZW51VHlwZSkKICAgICAgICAgcmV0dXJuIEFQSTo6QXJy
YXk6OmNyZWF0ZSgpOwogCi0gICAgVmVjdG9yPFJlZlB0cjxBUEk6Ok9iamVjdD4+IHN1Ym1lbnVJ
dGVtczsKLSAgICBzdWJtZW51SXRlbXMucmVzZXJ2ZUluaXRpYWxDYXBhY2l0eShtX3dlYkNvbnRl
eHRNZW51SXRlbURhdGEuc3VibWVudSgpLnNpemUoKSk7Ci0KLSAgICBmb3IgKGNvbnN0IGF1dG8m
IGl0ZW0gOiBtX3dlYkNvbnRleHRNZW51SXRlbURhdGEuc3VibWVudSgpKQotICAgICAgICBzdWJt
ZW51SXRlbXMudW5jaGVja2VkQXBwZW5kKFdlYkNvbnRleHRNZW51SXRlbTo6Y3JlYXRlKGl0ZW0p
KTsKLQorICAgIGF1dG8gc3VibWVudUl0ZW1zID0gbV93ZWJDb250ZXh0TWVudUl0ZW1EYXRhLnN1
Ym1lbnUoKS5tYXAoW10oYXV0byYgaXRlbSkgLT4gUmVmUHRyPEFQSTo6T2JqZWN0PiB7CisgICAg
ICAgIHJldHVybiBXZWJDb250ZXh0TWVudUl0ZW06OmNyZWF0ZShpdGVtKTsKKyAgICB9KTsKICAg
ICByZXR1cm4gQVBJOjpBcnJheTo6Y3JlYXRlKFdURk1vdmUoc3VibWVudUl0ZW1zKSk7CiB9CiAK
ZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJLaXQvU2hhcmVkL1dlYkNvbnRleHRNZW51SXRlbURhdGEu
Y3BwIGIvU291cmNlL1dlYktpdC9TaGFyZWQvV2ViQ29udGV4dE1lbnVJdGVtRGF0YS5jcHAKaW5k
ZXggNTk4YTg3N2U5ZjYxNjhlMWFmNDgyZmU3ODcwY2VkNWExZDQ0MzI4ZC4uNGJhYmU0MzJjMGE3
NjU5ZWQ5YTdiY2UwZjMwNTFlNmEwMzBmOThkMiAxMDA2NDQKLS0tIGEvU291cmNlL1dlYktpdC9T
aGFyZWQvV2ViQ29udGV4dE1lbnVJdGVtRGF0YS5jcHAKKysrIGIvU291cmNlL1dlYktpdC9TaGFy
ZWQvV2ViQ29udGV4dE1lbnVJdGVtRGF0YS5jcHAKQEAgLTE2MCwyMiArMTYwLDE2IEBAIHN0ZDo6
b3B0aW9uYWw8V2ViQ29udGV4dE1lbnVJdGVtRGF0YT4gV2ViQ29udGV4dE1lbnVJdGVtRGF0YTo6
ZGVjb2RlKElQQzo6RGVjb2RlCiAKIFZlY3RvcjxXZWJDb250ZXh0TWVudUl0ZW1EYXRhPiBraXRJ
dGVtcyhjb25zdCBWZWN0b3I8V2ViQ29yZTo6Q29udGV4dE1lbnVJdGVtPiYgY29yZUl0ZW1WZWN0
b3IpCiB7Ci0gICAgVmVjdG9yPFdlYkNvbnRleHRNZW51SXRlbURhdGE+IHJlc3VsdDsKLSAgICBy
ZXN1bHQucmVzZXJ2ZUNhcGFjaXR5KGNvcmVJdGVtVmVjdG9yLnNpemUoKSk7Ci0gICAgZm9yICh1
bnNpZ25lZCBpID0gMDsgaSA8IGNvcmVJdGVtVmVjdG9yLnNpemUoKTsgKytpKQotICAgICAgICBy
ZXN1bHQuYXBwZW5kKFdlYkNvbnRleHRNZW51SXRlbURhdGEoY29yZUl0ZW1WZWN0b3JbaV0pKTsK
LSAgICAKLSAgICByZXR1cm4gcmVzdWx0OworICAgIHJldHVybiBjb3JlSXRlbVZlY3Rvci5tYXAo
W10oYXV0byYgaXRlbSkgeworICAgICAgICByZXR1cm4gV2ViQ29udGV4dE1lbnVJdGVtRGF0YSB7
IGl0ZW0gfTsKKyAgICB9KTsKIH0KIAogVmVjdG9yPENvbnRleHRNZW51SXRlbT4gY29yZUl0ZW1z
KGNvbnN0IFZlY3RvcjxXZWJDb250ZXh0TWVudUl0ZW1EYXRhPiYga2l0SXRlbVZlY3RvcikKIHsK
LSAgICBWZWN0b3I8Q29udGV4dE1lbnVJdGVtPiByZXN1bHQ7Ci0gICAgcmVzdWx0LnJlc2VydmVD
YXBhY2l0eShraXRJdGVtVmVjdG9yLnNpemUoKSk7Ci0gICAgZm9yICh1bnNpZ25lZCBpID0gMDsg
aSA8IGtpdEl0ZW1WZWN0b3Iuc2l6ZSgpOyArK2kpCi0gICAgICAgIHJlc3VsdC5hcHBlbmQoa2l0
SXRlbVZlY3RvcltpXS5jb3JlKCkpOwotICAgIAotICAgIHJldHVybiByZXN1bHQ7CisgICAgcmV0
dXJuIGtpdEl0ZW1WZWN0b3IubWFwKFtdKGF1dG8mIGl0ZW0pIHsKKyAgICAgICAgcmV0dXJuIGl0
ZW0uY29yZSgpOworICAgIH0pOwogfQogCiB9IC8vIG5hbWVzcGFjZSBXZWJLaXQKZGlmZiAtLWdp
dCBhL1NvdXJjZS9XZWJLaXQvVUlQcm9jZXNzL0FQSS9BUElXZWJBdXRoZW50aWNhdGlvblBhbmVs
LmNwcCBiL1NvdXJjZS9XZWJLaXQvVUlQcm9jZXNzL0FQSS9BUElXZWJBdXRoZW50aWNhdGlvblBh
bmVsLmNwcAppbmRleCA5YzdjNWRkZGYyZjg4NTQ0ZDJmNDlmNzc3NTYwMGM5MDBhOGM2MDM4Li4z
YWU4MDkzOTIwOGMxYzA2NGRlZWY0YTdjODY5YjI1ZTNkYWU2ZDVhIDEwMDY0NAotLS0gYS9Tb3Vy
Y2UvV2ViS2l0L1VJUHJvY2Vzcy9BUEkvQVBJV2ViQXV0aGVudGljYXRpb25QYW5lbC5jcHAKKysr
IGIvU291cmNlL1dlYktpdC9VSVByb2Nlc3MvQVBJL0FQSVdlYkF1dGhlbnRpY2F0aW9uUGFuZWwu
Y3BwCkBAIC01Niw3ICs1Niw2IEBAIFdlYkF1dGhlbnRpY2F0aW9uUGFuZWw6OldlYkF1dGhlbnRp
Y2F0aW9uUGFuZWwoY29uc3QgQXV0aGVudGljYXRvck1hbmFnZXImIG1hbmFnCiAgICAgLCBtX2Ns
aWVudERhdGFUeXBlKHR5cGUpCiAgICAgLCBtX3VzZXJOYW1lKHVzZXJOYW1lKQogewotICAgIG1f
dHJhbnNwb3J0cyA9IFZlY3RvcjxBdXRoZW50aWNhdG9yVHJhbnNwb3J0PigpOwogICAgIG1fdHJh
bnNwb3J0cy5yZXNlcnZlSW5pdGlhbENhcGFjaXR5KEF1dGhlbnRpY2F0b3JNYW5hZ2VyOjptYXhU
cmFuc3BvcnROdW1iZXIpOwogICAgIGlmICh0cmFuc3BvcnRzLmNvbnRhaW5zKEF1dGhlbnRpY2F0
b3JUcmFuc3BvcnQ6OlVzYikpCiAgICAgICAgIG1fdHJhbnNwb3J0cy51bmNoZWNrZWRBcHBlbmQo
QXV0aGVudGljYXRvclRyYW5zcG9ydDo6VXNiKTsKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJLaXQv
VUlQcm9jZXNzL0FQSS9BUElXZWJzaXRlUG9saWNpZXMuY3BwIGIvU291cmNlL1dlYktpdC9VSVBy
b2Nlc3MvQVBJL0FQSVdlYnNpdGVQb2xpY2llcy5jcHAKaW5kZXggYWI1N2M0NGZlZWViZGNmYTgx
YTdmNmY5ZGUwN2M5NmRiZWZlMDhhZS4uZTZhNGQwNzFhZDUxNGQ0ZTE1NzNmN2YxM2Y2NDY5MTNj
ZDNmY2I3NiAxMDA2NDQKLS0tIGEvU291cmNlL1dlYktpdC9VSVByb2Nlc3MvQVBJL0FQSVdlYnNp
dGVQb2xpY2llcy5jcHAKKysrIGIvU291cmNlL1dlYktpdC9VSVByb2Nlc3MvQVBJL0FQSVdlYnNp
dGVQb2xpY2llcy5jcHAKQEAgLTU5LDE4ICs1OSw4IEBAIFJlZjxXZWJzaXRlUG9saWNpZXM+IFdl
YnNpdGVQb2xpY2llczo6Y29weSgpIGNvbnN0CiAgICAgcG9saWNpZXMtPnNldFdlYnNpdGVEYXRh
U3RvcmUobV93ZWJzaXRlRGF0YVN0b3JlLmdldCgpKTsKICAgICBwb2xpY2llcy0+c2V0VXNlckNv
bnRlbnRDb250cm9sbGVyKG1fdXNlckNvbnRlbnRDb250cm9sbGVyLmdldCgpKTsKICAgICBwb2xp
Y2llcy0+c2V0SWRlbXBvdGVudE1vZGVBdXRvc2l6aW5nT25seUhvbm9yc1BlcmNlbnRhZ2VzKG1f
aWRlbXBvdGVudE1vZGVBdXRvc2l6aW5nT25seUhvbm9yc1BlcmNlbnRhZ2VzKTsKLSAgICAKLSAg
ICBWZWN0b3I8V2ViQ29yZTo6SFRUUEhlYWRlckZpZWxkPiBsZWdhY3lDdXN0b21IZWFkZXJGaWVs
ZHM7Ci0gICAgbGVnYWN5Q3VzdG9tSGVhZGVyRmllbGRzLnJlc2VydmVJbml0aWFsQ2FwYWNpdHko
bV9sZWdhY3lDdXN0b21IZWFkZXJGaWVsZHMuc2l6ZSgpKTsKLSAgICBmb3IgKGF1dG8mIGZpZWxk
IDogbV9sZWdhY3lDdXN0b21IZWFkZXJGaWVsZHMpCi0gICAgICAgIGxlZ2FjeUN1c3RvbUhlYWRl
ckZpZWxkcy51bmNoZWNrZWRBcHBlbmQoZmllbGQpOwotICAgIHBvbGljaWVzLT5zZXRMZWdhY3lD
dXN0b21IZWFkZXJGaWVsZHMoV1RGTW92ZShsZWdhY3lDdXN0b21IZWFkZXJGaWVsZHMpKTsKLQot
ICAgIFZlY3RvcjxXZWJDb3JlOjpDdXN0b21IZWFkZXJGaWVsZHM+IGN1c3RvbUhlYWRlckZpZWxk
czsKLSAgICBjdXN0b21IZWFkZXJGaWVsZHMucmVzZXJ2ZUluaXRpYWxDYXBhY2l0eShtX2N1c3Rv
bUhlYWRlckZpZWxkcy5zaXplKCkpOwotICAgIGZvciAoYXV0byYgZmllbGQgOiBtX2N1c3RvbUhl
YWRlckZpZWxkcykKLSAgICAgICAgY3VzdG9tSGVhZGVyRmllbGRzLnVuY2hlY2tlZEFwcGVuZChm
aWVsZCk7Ci0gICAgcG9saWNpZXMtPnNldEN1c3RvbUhlYWRlckZpZWxkcyhXVEZNb3ZlKGN1c3Rv
bUhlYWRlckZpZWxkcykpOworICAgIHBvbGljaWVzLT5zZXRMZWdhY3lDdXN0b21IZWFkZXJGaWVs
ZHMoVmVjdG9yIHsgbV9sZWdhY3lDdXN0b21IZWFkZXJGaWVsZHMgfSk7CisgICAgcG9saWNpZXMt
PnNldEN1c3RvbUhlYWRlckZpZWxkcyhWZWN0b3IgeyBtX2N1c3RvbUhlYWRlckZpZWxkcyB9KTsK
ICAgICBwb2xpY2llcy0+c2V0QWxsb3dTaXRlU3BlY2lmaWNRdWlya3NUb092ZXJyaWRlQ29udGVu
dE1vZGUobV9hbGxvd1NpdGVTcGVjaWZpY1F1aXJrc1RvT3ZlcnJpZGVDb250ZW50TW9kZSk7CiAg
ICAgcG9saWNpZXMtPnNldEFwcGxpY2F0aW9uTmFtZUZvckRlc2t0b3BVc2VyQWdlbnQobV9hcHBs
aWNhdGlvbk5hbWVGb3JEZXNrdG9wVXNlckFnZW50KTsKICAgICBwb2xpY2llcy0+c2V0QWxsb3dz
Q29udGVudEphdmFTY3JpcHQobV9hbGxvd3NDb250ZW50SmF2YVNjcmlwdCk7CkBAIC05OCw4ICs4
OCw3IEBAIFdlYktpdDo6V2Vic2l0ZVBvbGljaWVzRGF0YSBXZWJzaXRlUG9saWNpZXM6OmRhdGEo
KQogICAgIGJvb2wgaGFzTGVnYWN5Q3VzdG9tSGVhZGVyRmllbGRzID0gbGVnYWN5Q3VzdG9tSGVh
ZGVyRmllbGRzKCkuc2l6ZSgpOwogICAgIFZlY3RvcjxXZWJDb3JlOjpDdXN0b21IZWFkZXJGaWVs
ZHM+IGN1c3RvbUhlYWRlckZpZWxkczsKICAgICBjdXN0b21IZWFkZXJGaWVsZHMucmVzZXJ2ZUlu
aXRpYWxDYXBhY2l0eSh0aGlzLT5jdXN0b21IZWFkZXJGaWVsZHMoKS5zaXplKCkgKyBoYXNMZWdh
Y3lDdXN0b21IZWFkZXJGaWVsZHMpOwotICAgIGZvciAoYXV0byYgZmllbGQgOiB0aGlzLT5jdXN0
b21IZWFkZXJGaWVsZHMoKSkKLSAgICAgICAgY3VzdG9tSGVhZGVyRmllbGRzLnVuY2hlY2tlZEFw
cGVuZChmaWVsZCk7CisgICAgY3VzdG9tSGVhZGVyRmllbGRzLmFwcGVuZFZlY3Rvcih0aGlzLT5j
dXN0b21IZWFkZXJGaWVsZHMoKSk7CiAgICAgaWYgKGhhc0xlZ2FjeUN1c3RvbUhlYWRlckZpZWxk
cykKICAgICAgICAgY3VzdG9tSGVhZGVyRmllbGRzLnVuY2hlY2tlZEFwcGVuZCh7IGxlZ2FjeUN1
c3RvbUhlYWRlckZpZWxkcygpLCB7IH19KTsKIApkaWZmIC0tZ2l0IGEvU291cmNlL1dlYktpdC9V
SVByb2Nlc3MvQVBJL0MvV0tQYWdlLmNwcCBiL1NvdXJjZS9XZWJLaXQvVUlQcm9jZXNzL0FQSS9D
L1dLUGFnZS5jcHAKaW5kZXggNjA0N2M1ZmE0ZTczNjg2NzU2NjIyMmQ2M2Y2NjU3MmFmOTRjZDgx
MC4uMjgxOGJkNjdjOThjMTZlN2JmZjg4OTY1NGI4MTU3N2EyMTFkNGVkMCAxMDA2NDQKLS0tIGEv
U291cmNlL1dlYktpdC9VSVByb2Nlc3MvQVBJL0MvV0tQYWdlLmNwcAorKysgYi9Tb3VyY2UvV2Vi
S2l0L1VJUHJvY2Vzcy9BUEkvQy9XS1BhZ2UuY3BwCkBAIC0xMDUsNiArMTA1LDE1IEBACiBuYW1l
c3BhY2UgQVBJIHsKIHVzaW5nIG5hbWVzcGFjZSBXZWJDb3JlOwogdXNpbmcgbmFtZXNwYWNlIFdl
YktpdDsKKworI2lmIEVOQUJMRShDT05URVhUX01FTlVTKQorc3RhdGljIFZlY3RvcjxSZWZQdHI8
QVBJOjpPYmplY3Q+PiB0b0FQSU9iamVjdFZlY3Rvcihjb25zdCBWZWN0b3I8UmVmPFdlYkNvbnRl
eHRNZW51SXRlbT4+JiBtZW51SXRlbXNWZWN0b3IpCit7CisgICAgcmV0dXJuIG1lbnVJdGVtc1Zl
Y3Rvci5tYXAoW10oYXV0byYgbWVudUl0ZW0pIC0+IFJlZlB0cjxBUEk6Ok9iamVjdD4geworICAg
ICAgICByZXR1cm4gbWVudUl0ZW0ucHRyKCk7CisgICAgfSk7Cit9CisjZW5kaWYKICAgICAKIHRl
bXBsYXRlPD4gc3RydWN0IENsaWVudFRyYWl0czxXS1BhZ2VMb2FkZXJDbGllbnRCYXNlPiB7CiAg
ICAgdHlwZWRlZiBzdGQ6OnR1cGxlPFdLUGFnZUxvYWRlckNsaWVudFYwLCBXS1BhZ2VMb2FkZXJD
bGllbnRWMSwgV0tQYWdlTG9hZGVyQ2xpZW50VjIsIFdLUGFnZUxvYWRlckNsaWVudFYzLCBXS1Bh
Z2VMb2FkZXJDbGllbnRWNCwgV0tQYWdlTG9hZGVyQ2xpZW50VjUsIFdLUGFnZUxvYWRlckNsaWVu
dFY2PiBWZXJzaW9uczsKQEAgLTk0NSwxMiArOTU0LDcgQEAgdm9pZCBXS1BhZ2VTZXRQYWdlQ29u
dGV4dE1lbnVDbGllbnQoV0tQYWdlUmVmIHBhZ2VSZWYsIGNvbnN0IFdLUGFnZUNvbnRleHRNZW51
Q2wKICAgICAgICAgdm9pZCBnZXRDb250ZXh0TWVudUZyb21Qcm9wb3NlZE1lbnUoV2ViUGFnZVBy
b3h5JiBwYWdlLCBWZWN0b3I8UmVmPFdlYktpdDo6V2ViQ29udGV4dE1lbnVJdGVtPj4mJiBwcm9w
b3NlZE1lbnVWZWN0b3IsIFdlYktpdDo6V2ViQ29udGV4dE1lbnVMaXN0ZW5lclByb3h5JiBjb250
ZXh0TWVudUxpc3RlbmVyLCBjb25zdCBXZWJIaXRUZXN0UmVzdWx0RGF0YSYgaGl0VGVzdFJlc3Vs
dERhdGEsIEFQSTo6T2JqZWN0KiB1c2VyRGF0YSkgb3ZlcnJpZGUKICAgICAgICAgewogICAgICAg
ICAgICAgaWYgKG1fY2xpZW50LmJhc2UudmVyc2lvbiA+PSA0ICYmIG1fY2xpZW50LmdldENvbnRl
eHRNZW51RnJvbVByb3Bvc2VkTWVudUFzeW5jKSB7Ci0gICAgICAgICAgICAgICAgVmVjdG9yPFJl
ZlB0cjxBUEk6Ok9iamVjdD4+IHByb3Bvc2VkTWVudUl0ZW1zOwotICAgICAgICAgICAgICAgIHBy
b3Bvc2VkTWVudUl0ZW1zLnJlc2VydmVJbml0aWFsQ2FwYWNpdHkocHJvcG9zZWRNZW51VmVjdG9y
LnNpemUoKSk7Ci0gICAgICAgICAgICAgICAgCi0gICAgICAgICAgICAgICAgZm9yIChjb25zdCBh
dXRvJiBtZW51SXRlbSA6IHByb3Bvc2VkTWVudVZlY3RvcikKLSAgICAgICAgICAgICAgICAgICAg
cHJvcG9zZWRNZW51SXRlbXMudW5jaGVja2VkQXBwZW5kKG1lbnVJdGVtLnB0cigpKTsKLSAgICAg
ICAgICAgICAgICAKKyAgICAgICAgICAgICAgICBhdXRvIHByb3Bvc2VkTWVudUl0ZW1zID0gdG9B
UElPYmplY3RWZWN0b3IocHJvcG9zZWRNZW51VmVjdG9yKTsKICAgICAgICAgICAgICAgICBhdXRv
IHdlYkhpdFRlc3RSZXN1bHQgPSBBUEk6OkhpdFRlc3RSZXN1bHQ6OmNyZWF0ZShoaXRUZXN0UmVz
dWx0RGF0YSk7CiAgICAgICAgICAgICAgICAgbV9jbGllbnQuZ2V0Q29udGV4dE1lbnVGcm9tUHJv
cG9zZWRNZW51QXN5bmModG9BUEkoJnBhZ2UpLCB0b0FQSShBUEk6OkFycmF5OjpjcmVhdGUoV1RG
TW92ZShwcm9wb3NlZE1lbnVJdGVtcykpLnB0cigpKSwgdG9BUEkoJmNvbnRleHRNZW51TGlzdGVu
ZXIpLCB0b0FQSSh3ZWJIaXRUZXN0UmVzdWx0LnB0cigpKSwgdG9BUEkodXNlckRhdGEpLCBtX2Ns
aWVudC5iYXNlLmNsaWVudEluZm8pOwogICAgICAgICAgICAgICAgIHJldHVybjsKQEAgLTk2Niwx
MSArOTcwLDcgQEAgdm9pZCBXS1BhZ2VTZXRQYWdlQ29udGV4dE1lbnVDbGllbnQoV0tQYWdlUmVm
IHBhZ2VSZWYsIGNvbnN0IFdLUGFnZUNvbnRleHRNZW51Q2wKICAgICAgICAgICAgICAgICByZXR1
cm47CiAgICAgICAgICAgICB9CiAKLSAgICAgICAgICAgIFZlY3RvcjxSZWZQdHI8QVBJOjpPYmpl
Y3Q+PiBwcm9wb3NlZE1lbnVJdGVtczsKLSAgICAgICAgICAgIHByb3Bvc2VkTWVudUl0ZW1zLnJl
c2VydmVJbml0aWFsQ2FwYWNpdHkocHJvcG9zZWRNZW51VmVjdG9yLnNpemUoKSk7Ci0KLSAgICAg
ICAgICAgIGZvciAoY29uc3QgYXV0byYgbWVudUl0ZW0gOiBwcm9wb3NlZE1lbnVWZWN0b3IpCi0g
ICAgICAgICAgICAgICAgcHJvcG9zZWRNZW51SXRlbXMudW5jaGVja2VkQXBwZW5kKG1lbnVJdGVt
LnB0cigpKTsKKyAgICAgICAgICAgIGF1dG8gcHJvcG9zZWRNZW51SXRlbXMgPSB0b0FQSU9iamVj
dFZlY3Rvcihwcm9wb3NlZE1lbnVWZWN0b3IpOwogCiAgICAgICAgICAgICBXS0FycmF5UmVmIG5l
d01lbnUgPSBudWxscHRyOwogICAgICAgICAgICAgaWYgKG1fY2xpZW50LmJhc2UudmVyc2lvbiA+
PSAyKSB7CkBAIC0xMDEwLDEyICsxMDEwLDcgQEAgdm9pZCBXS1BhZ2VTZXRQYWdlQ29udGV4dE1l
bnVDbGllbnQoV0tQYWdlUmVmIHBhZ2VSZWYsIGNvbnN0IFdLUGFnZUNvbnRleHRNZW51Q2wKICAg
ICAgICAgICAgIGlmICghY2FuU2hvd0NvbnRleHRNZW51KCkpCiAgICAgICAgICAgICAgICAgcmV0
dXJuOwogCi0gICAgICAgICAgICBWZWN0b3I8UmVmUHRyPEFQSTo6T2JqZWN0Pj4gbWVudUl0ZW1z
OwotICAgICAgICAgICAgbWVudUl0ZW1zLnJlc2VydmVJbml0aWFsQ2FwYWNpdHkobWVudUl0ZW1z
VmVjdG9yLnNpemUoKSk7Ci0KLSAgICAgICAgICAgIGZvciAoY29uc3QgYXV0byYgbWVudUl0ZW0g
OiBtZW51SXRlbXNWZWN0b3IpCi0gICAgICAgICAgICAgICAgbWVudUl0ZW1zLnVuY2hlY2tlZEFw
cGVuZChtZW51SXRlbS5wdHIoKSk7Ci0KKyAgICAgICAgICAgIGF1dG8gbWVudUl0ZW1zID0gdG9B
UElPYmplY3RWZWN0b3IobWVudUl0ZW1zVmVjdG9yKTsKICAgICAgICAgICAgIG1fY2xpZW50LnNo
b3dDb250ZXh0TWVudSh0b0FQSSgmcGFnZSksIHRvQVBJKG1lbnVMb2NhdGlvbiksIHRvQVBJKEFQ
STo6QXJyYXk6OmNyZWF0ZShXVEZNb3ZlKG1lbnVJdGVtcykpLnB0cigpKSwgbV9jbGllbnQuYmFz
ZS5jbGllbnRJbmZvKTsKICAgICAgICAgfQogCkBAIC0xMTAyLDE5ICsxMDk3LDEyIEBAIHZvaWQg
V0tQYWdlU2V0UGFnZUZpbmRNYXRjaGVzQ2xpZW50KFdLUGFnZVJlZiBwYWdlUmVmLCBjb25zdCBX
S1BhZ2VGaW5kTWF0Y2hlc0NsCiAgICAgICAgICAgICBpZiAoIW1fY2xpZW50LmRpZEZpbmRTdHJp
bmdNYXRjaGVzKQogICAgICAgICAgICAgICAgIHJldHVybjsKIAotICAgICAgICAgICAgVmVjdG9y
PFJlZlB0cjxBUEk6Ok9iamVjdD4+IG1hdGNoZXM7Ci0gICAgICAgICAgICBtYXRjaGVzLnJlc2Vy
dmVJbml0aWFsQ2FwYWNpdHkobWF0Y2hSZWN0cy5zaXplKCkpOwotCi0gICAgICAgICAgICBmb3Ig
KGNvbnN0IGF1dG8mIHJlY3RzIDogbWF0Y2hSZWN0cykgewotICAgICAgICAgICAgICAgIFZlY3Rv
cjxSZWZQdHI8QVBJOjpPYmplY3Q+PiBhcGlSZWN0czsKLSAgICAgICAgICAgICAgICBhcGlSZWN0
cy5yZXNlcnZlSW5pdGlhbENhcGFjaXR5KHJlY3RzLnNpemUoKSk7Ci0KLSAgICAgICAgICAgICAg
ICBmb3IgKGNvbnN0IGF1dG8mIHJlY3QgOiByZWN0cykKLSAgICAgICAgICAgICAgICAgICAgYXBp
UmVjdHMudW5jaGVja2VkQXBwZW5kKEFQSTo6UmVjdDo6Y3JlYXRlKHRvQVBJKHJlY3QpKSk7Ci0K
LSAgICAgICAgICAgICAgICBtYXRjaGVzLnVuY2hlY2tlZEFwcGVuZChBUEk6OkFycmF5OjpjcmVh
dGUoV1RGTW92ZShhcGlSZWN0cykpKTsKLSAgICAgICAgICAgIH0KLQorICAgICAgICAgICAgYXV0
byBtYXRjaGVzID0gbWF0Y2hSZWN0cy5tYXAoW10oYXV0byYgcmVjdHMpIC0+IFJlZlB0cjxBUEk6
Ok9iamVjdD4geworICAgICAgICAgICAgICAgIGF1dG8gYXBpUmVjdHMgPSByZWN0cy5tYXAoW10o
YXV0byYgcmVjdCkgLT4gUmVmUHRyPEFQSTo6T2JqZWN0PiB7CisgICAgICAgICAgICAgICAgICAg
IHJldHVybiBBUEk6OlJlY3Q6OmNyZWF0ZSh0b0FQSShyZWN0KSk7CisgICAgICAgICAgICAgICAg
fSk7CisgICAgICAgICAgICAgICAgcmV0dXJuIEFQSTo6QXJyYXk6OmNyZWF0ZShXVEZNb3ZlKGFw
aVJlY3RzKSk7CisgICAgICAgICAgICB9KTsKICAgICAgICAgICAgIG1fY2xpZW50LmRpZEZpbmRT
dHJpbmdNYXRjaGVzKHRvQVBJKHBhZ2UpLCB0b0FQSShzdHJpbmcuaW1wbCgpKSwgdG9BUEkoQVBJ
OjpBcnJheTo6Y3JlYXRlKFdURk1vdmUobWF0Y2hlcykpLnB0cigpKSwgaW5kZXgsIG1fY2xpZW50
LmJhc2UuY2xpZW50SW5mbyk7CiAgICAgICAgIH0KIApAQCAtMTI2NywxMSArMTI1NSw5IEBAIHZv
aWQgV0tQYWdlU2V0UGFnZUxvYWRlckNsaWVudChXS1BhZ2VSZWYgcGFnZVJlZiwgY29uc3QgV0tQ
YWdlTG9hZGVyQ2xpZW50QmFzZSoKIAogICAgICAgICAgICAgUmVmUHRyPEFQSTo6QXJyYXk+IHJl
bW92ZWRJdGVtc0FycmF5OwogICAgICAgICAgICAgaWYgKCFyZW1vdmVkSXRlbXMuaXNFbXB0eSgp
KSB7Ci0gICAgICAgICAgICAgICAgVmVjdG9yPFJlZlB0cjxBUEk6Ok9iamVjdD4+IHJlbW92ZWRJ
dGVtc1ZlY3RvcjsKLSAgICAgICAgICAgICAgICByZW1vdmVkSXRlbXNWZWN0b3IucmVzZXJ2ZUlu
aXRpYWxDYXBhY2l0eShyZW1vdmVkSXRlbXMuc2l6ZSgpKTsKLSAgICAgICAgICAgICAgICBmb3Ig
KGF1dG8mIHJlbW92ZWRJdGVtIDogcmVtb3ZlZEl0ZW1zKQotICAgICAgICAgICAgICAgIHJlbW92
ZWRJdGVtc1ZlY3Rvci5hcHBlbmQoV1RGTW92ZShyZW1vdmVkSXRlbSkpOwotCisgICAgICAgICAg
ICAgICAgYXV0byByZW1vdmVkSXRlbXNWZWN0b3IgPSBXVEY6Om1hcChXVEZNb3ZlKHJlbW92ZWRJ
dGVtcyksIFtdKGF1dG8mJiByZW1vdmVkSXRlbSkgLT4gUmVmUHRyPEFQSTo6T2JqZWN0PiB7Cisg
ICAgICAgICAgICAgICAgICAgIHJldHVybiBXVEZNb3ZlKHJlbW92ZWRJdGVtKTsKKyAgICAgICAg
ICAgICAgICB9KTsKICAgICAgICAgICAgICAgICByZW1vdmVkSXRlbXNBcnJheSA9IEFQSTo6QXJy
YXk6OmNyZWF0ZShXVEZNb3ZlKHJlbW92ZWRJdGVtc1ZlY3RvcikpOwogICAgICAgICAgICAgfQog
CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViS2l0L1VJUHJvY2Vzcy9Db2NvYS9WaWRlb0Z1bGxzY3Jl
ZW5NYW5hZ2VyUHJveHkubW0gYi9Tb3VyY2UvV2ViS2l0L1VJUHJvY2Vzcy9Db2NvYS9WaWRlb0Z1
bGxzY3JlZW5NYW5hZ2VyUHJveHkubW0KaW5kZXggNjAwYTg5ZjU1OWJmOWMyZWZmYjJlMGQxN2Ez
ZjVlZGY0MGY5NjJjMC4uNzA2YWM1NzEyMWE2ZTVhNzk2YWNmNjZhOTgyNzc1N2ZmYzNkM2U4YyAx
MDA2NDQKLS0tIGEvU291cmNlL1dlYktpdC9VSVByb2Nlc3MvQ29jb2EvVmlkZW9GdWxsc2NyZWVu
TWFuYWdlclByb3h5Lm1tCisrKyBiL1NvdXJjZS9XZWJLaXQvVUlQcm9jZXNzL0NvY29hL1ZpZGVv
RnVsbHNjcmVlbk1hbmFnZXJQcm94eS5tbQpAQCAtNDkzLDEyICs0OTMsNyBAQCB2b2lkIFZpZGVv
RnVsbHNjcmVlbk1hbmFnZXJQcm94eTo6Zm9yRWFjaFNlc3Npb24oRnVuY3Rpb248dm9pZChWaWRl
b0Z1bGxzY3JlZW5NbwogICAgIGlmIChtX2NvbnRleHRNYXAuaXNFbXB0eSgpKQogICAgICAgICBy
ZXR1cm47CiAKLSAgICBWZWN0b3I8TW9kZWxJbnRlcmZhY2VUdXBsZT4gdmFsdWVzOwotICAgIHZh
bHVlcy5yZXNlcnZlSW5pdGlhbENhcGFjaXR5KG1fY29udGV4dE1hcC5zaXplKCkpOwotICAgIGZv
ciAoYXV0byYgdmFsdWUgOiBtX2NvbnRleHRNYXAudmFsdWVzKCkpCi0gICAgICAgIHZhbHVlcy51
bmNoZWNrZWRBcHBlbmQodmFsdWUpOwotCi0gICAgZm9yIChhdXRvJiB2YWx1ZSA6IHZhbHVlcykg
eworICAgIGZvciAoYXV0byYgdmFsdWUgOiBjb3B5VG9WZWN0b3IobV9jb250ZXh0TWFwLnZhbHVl
cygpKSkgewogICAgICAgICBSZWZQdHI8VmlkZW9GdWxsc2NyZWVuTW9kZWxDb250ZXh0PiBtb2Rl
bDsKICAgICAgICAgUmVmUHRyPFBsYXRmb3JtVmlkZW9GdWxsc2NyZWVuSW50ZXJmYWNlPiBpbnRl
cmZhY2U7CiAgICAgICAgIHN0ZDo6dGllKG1vZGVsLCBpbnRlcmZhY2UpID0gdmFsdWU7CmRpZmYg
LS1naXQgYS9Tb3VyY2UvV2ViS2l0L1VJUHJvY2Vzcy9HYW1lcGFkL1VJR2FtZXBhZFByb3ZpZGVy
LmNwcCBiL1NvdXJjZS9XZWJLaXQvVUlQcm9jZXNzL0dhbWVwYWQvVUlHYW1lcGFkUHJvdmlkZXIu
Y3BwCmluZGV4IGQ5OGM1Mzk1ZWUxMmM0ZjU3ODMwOTNjNzg0MzEzNjg3MWY0MzZlMjYuLjk3ZDdj
NDJkNzljNWViMzdkNzYxZGNmNzE2YTcyOGZhZjY0YzIzYmEgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9X
ZWJLaXQvVUlQcm9jZXNzL0dhbWVwYWQvVUlHYW1lcGFkUHJvdmlkZXIuY3BwCisrKyBiL1NvdXJj
ZS9XZWJLaXQvVUlQcm9jZXNzL0dhbWVwYWQvVUlHYW1lcGFkUHJvdmlkZXIuY3BwCkBAIC0xOTQs
MTcgKzE5NCw5IEBAIHZvaWQgVUlHYW1lcGFkUHJvdmlkZXI6OnN0b3BNb25pdG9yaW5nR2FtZXBh
ZHMoKQogCiBWZWN0b3I8R2FtZXBhZERhdGE+IFVJR2FtZXBhZFByb3ZpZGVyOjpzbmFwc2hvdEdh
bWVwYWRzKCkKIHsKLSAgICBWZWN0b3I8R2FtZXBhZERhdGE+IGdhbWVwYWREYXRhczsKLSAgICBn
YW1lcGFkRGF0YXMucmVzZXJ2ZUluaXRpYWxDYXBhY2l0eShtX2dhbWVwYWRzLnNpemUoKSk7Ci0K
LSAgICBmb3IgKGF1dG8mIGdhbWVwYWQgOiBtX2dhbWVwYWRzKSB7Ci0gICAgICAgIGlmIChnYW1l
cGFkKQotICAgICAgICAgICAgZ2FtZXBhZERhdGFzLnVuY2hlY2tlZEFwcGVuZChnYW1lcGFkLT5n
YW1lcGFkRGF0YSgpKTsKLSAgICAgICAgZWxzZQotICAgICAgICAgICAgZ2FtZXBhZERhdGFzLnVu
Y2hlY2tlZEFwcGVuZCh7IH0pOwotICAgIH0KLQotICAgIHJldHVybiBnYW1lcGFkRGF0YXM7Cisg
ICAgcmV0dXJuIG1fZ2FtZXBhZHMubWFwKFtdKGF1dG8mIGdhbWVwYWQpIHsKKyAgICAgICAgcmV0
dXJuIGdhbWVwYWQgPyBnYW1lcGFkLT5nYW1lcGFkRGF0YSgpIDogR2FtZXBhZERhdGEgeyB9Owor
ICAgIH0pOwogfQogCiAjaWYgIVBMQVRGT1JNKENPQ09BKSAmJiAhKFVTRShNQU5FVFRFKSAmJiBP
UyhMSU5VWCkpCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViS2l0L1VJUHJvY2Vzcy9OZXR3b3JrL05l
dHdvcmtQcm9jZXNzUHJveHkuY3BwIGIvU291cmNlL1dlYktpdC9VSVByb2Nlc3MvTmV0d29yay9O
ZXR3b3JrUHJvY2Vzc1Byb3h5LmNwcAppbmRleCBmNzEzOWYxMDBkYWM1NGE0MDliYjQ5Mzg4NjFm
NDUxNzllMzU0MDdmLi44MzFiMjFhNWYwM2ZhNDZhYjg0MDgwMWE5NDkxOTY3MzlkYTA2N2ViIDEw
MDY0NAotLS0gYS9Tb3VyY2UvV2ViS2l0L1VJUHJvY2Vzcy9OZXR3b3JrL05ldHdvcmtQcm9jZXNz
UHJveHkuY3BwCisrKyBiL1NvdXJjZS9XZWJLaXQvVUlQcm9jZXNzL05ldHdvcmsvTmV0d29ya1By
b2Nlc3NQcm94eS5jcHAKQEAgLTExOCwxMSArMTE4LDkgQEAgc3RhdGljIGJvb2wgc2hvdWxkVGVy
bWluYXRlTmV0d29ya1Byb2Nlc3NCeVNlbmRpbmdNZXNzYWdlKCkKIAogVmVjdG9yPFJlZjxOZXR3
b3JrUHJvY2Vzc1Byb3h5Pj4gTmV0d29ya1Byb2Nlc3NQcm94eTo6YWxsTmV0d29ya1Byb2Nlc3Nl
cygpCiB7Ci0gICAgVmVjdG9yPFJlZjxOZXR3b3JrUHJvY2Vzc1Byb3h5Pj4gcHJvY2Vzc2VzOwot
ICAgIHByb2Nlc3Nlcy5yZXNlcnZlSW5pdGlhbENhcGFjaXR5KG5ldHdvcmtQcm9jZXNzZXNTZXQo
KS5zaXplKCkpOwotICAgIGZvciAoYXV0byogbmV0d29ya1Byb2Nlc3MgOiBuZXR3b3JrUHJvY2Vz
c2VzU2V0KCkpCi0gICAgICAgIHByb2Nlc3Nlcy51bmNoZWNrZWRBcHBlbmQoKm5ldHdvcmtQcm9j
ZXNzKTsKLSAgICByZXR1cm4gcHJvY2Vzc2VzOworICAgIHJldHVybiBXVEY6Om1hcChuZXR3b3Jr
UHJvY2Vzc2VzU2V0KCksIFtdKGF1dG8qIG5ldHdvcmtQcm9jZXNzKSB7CisgICAgICAgIHJldHVy
biBSZWYgeyAqbmV0d29ya1Byb2Nlc3MgfTsKKyAgICB9KTsKIH0KIAogUmVmUHRyPE5ldHdvcmtQ
cm9jZXNzUHJveHk+JiBOZXR3b3JrUHJvY2Vzc1Byb3h5OjpkZWZhdWx0TmV0d29ya1Byb2Nlc3Mo
KQpAQCAtNjIzLDEzICs2MjEsNyBAQCB2b2lkIE5ldHdvcmtQcm9jZXNzUHJveHk6OnVwZGF0ZVBy
ZXZhbGVudERvbWFpbnNUb0Jsb2NrQ29va2llc0ZvcihQQUw6OlNlc3Npb25JRAogICAgICAgICBj
b21wbGV0aW9uSGFuZGxlcigpOwogICAgICAgICByZXR1cm47CiAgICAgfQotCi0gICAgVmVjdG9y
PFJlZ2lzdHJhYmxlRG9tYWluPiByZWdpc3RyYWJsZURvbWFpbnNUb0Jsb2NrOwotICAgIHJlZ2lz
dHJhYmxlRG9tYWluc1RvQmxvY2sucmVzZXJ2ZUluaXRpYWxDYXBhY2l0eShkb21haW5zVG9CbG9j
ay5zaXplKCkpOwotICAgIGZvciAoYXV0byYgZG9tYWluIDogZG9tYWluc1RvQmxvY2spCi0gICAg
ICAgIHJlZ2lzdHJhYmxlRG9tYWluc1RvQmxvY2sudW5jaGVja2VkQXBwZW5kKGRvbWFpbik7Ci0K
LSAgICBzZW5kV2l0aEFzeW5jUmVwbHkoTWVzc2FnZXM6Ok5ldHdvcmtQcm9jZXNzOjpVcGRhdGVQ
cmV2YWxlbnREb21haW5zVG9CbG9ja0Nvb2tpZXNGb3Ioc2Vzc2lvbklELCByZWdpc3RyYWJsZURv
bWFpbnNUb0Jsb2NrKSwgV1RGTW92ZShjb21wbGV0aW9uSGFuZGxlcikpOworICAgIHNlbmRXaXRo
QXN5bmNSZXBseShNZXNzYWdlczo6TmV0d29ya1Byb2Nlc3M6OlVwZGF0ZVByZXZhbGVudERvbWFp
bnNUb0Jsb2NrQ29va2llc0ZvcihzZXNzaW9uSUQsIGRvbWFpbnNUb0Jsb2NrKSwgV1RGTW92ZShj
b21wbGV0aW9uSGFuZGxlcikpOwogfQogCiB2b2lkIE5ldHdvcmtQcm9jZXNzUHJveHk6OmlzUHJl
dmFsZW50UmVzb3VyY2UoUEFMOjpTZXNzaW9uSUQgc2Vzc2lvbklELCBjb25zdCBSZWdpc3RyYWJs
ZURvbWFpbiYgcmVzb3VyY2VEb21haW4sIENvbXBsZXRpb25IYW5kbGVyPHZvaWQoYm9vbCk+JiYg
Y29tcGxldGlvbkhhbmRsZXIpCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViS2l0L1VJUHJvY2Vzcy9O
b3RpZmljYXRpb25zL1dlYk5vdGlmaWNhdGlvbk1hbmFnZXJQcm94eS5jcHAgYi9Tb3VyY2UvV2Vi
S2l0L1VJUHJvY2Vzcy9Ob3RpZmljYXRpb25zL1dlYk5vdGlmaWNhdGlvbk1hbmFnZXJQcm94eS5j
cHAKaW5kZXggMDA1ZmJhNWEyM2FkNjY2ZGUyZDA3ZTNkNjc5NjRlYTJlMmE1YzIwNi4uYjNhYzcy
YjVmNmNiODE5ZmQ5YTJjMDc2YjBkNjkyNjFjYmU1MTgwYSAxMDA2NDQKLS0tIGEvU291cmNlL1dl
YktpdC9VSVByb2Nlc3MvTm90aWZpY2F0aW9ucy9XZWJOb3RpZmljYXRpb25NYW5hZ2VyUHJveHku
Y3BwCisrKyBiL1NvdXJjZS9XZWJLaXQvVUlQcm9jZXNzL05vdGlmaWNhdGlvbnMvV2ViTm90aWZp
Y2F0aW9uTWFuYWdlclByb3h5LmNwcApAQCAtMjc4LDkgKzI3OCw4IEBAIHZvaWQgV2ViTm90aWZp
Y2F0aW9uTWFuYWdlclByb3h5Ojpwcm92aWRlckRpZFJlbW92ZU5vdGlmaWNhdGlvblBvbGljaWVz
KEFQSTo6QXJyCiAgICAgCiAgICAgVmVjdG9yPFN0cmluZz4gb3JpZ2luU3RyaW5nczsKICAgICBv
cmlnaW5TdHJpbmdzLnJlc2VydmVJbml0aWFsQ2FwYWNpdHkoc2l6ZSk7Ci0gICAgCiAgICAgZm9y
IChzaXplX3QgaSA9IDA7IGkgPCBzaXplOyArK2kpCi0gICAgICAgIG9yaWdpblN0cmluZ3MuYXBw
ZW5kKG9yaWdpbnMtPmF0PEFQSTo6U2VjdXJpdHlPcmlnaW4+KGkpLT5zZWN1cml0eU9yaWdpbigp
LnRvU3RyaW5nKCkpOworICAgICAgICBvcmlnaW5TdHJpbmdzLnVuY2hlY2tlZEFwcGVuZChvcmln
aW5zLT5hdDxBUEk6OlNlY3VyaXR5T3JpZ2luPihpKS0+c2VjdXJpdHlPcmlnaW4oKS50b1N0cmlu
ZygpKTsKIAogICAgIFdlYlByb2Nlc3NQb29sOjpzZW5kVG9BbGxSZW1vdGVXb3JrZXJQcm9jZXNz
ZXMoTWVzc2FnZXM6OldlYk5vdGlmaWNhdGlvbk1hbmFnZXI6OkRpZFJlbW92ZU5vdGlmaWNhdGlv
bkRlY2lzaW9ucyhvcmlnaW5TdHJpbmdzKSk7CiAKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJLaXQv
VUlQcm9jZXNzL05vdGlmaWNhdGlvbnMvV2ViTm90aWZpY2F0aW9uUHJvdmlkZXIuY3BwIGIvU291
cmNlL1dlYktpdC9VSVByb2Nlc3MvTm90aWZpY2F0aW9ucy9XZWJOb3RpZmljYXRpb25Qcm92aWRl
ci5jcHAKaW5kZXggODU4ZDc2NDYyZmNhZTY4Y2M0YjBhM2FjODVkYjU1NmY3OGRlZDZlZC4uZjM2
NWQ0MjMzMGZmNjgyNmExNmM0ZTdlMWQ0M2Q3ZWM3OTVkZWFjMCAxMDA2NDQKLS0tIGEvU291cmNl
L1dlYktpdC9VSVByb2Nlc3MvTm90aWZpY2F0aW9ucy9XZWJOb3RpZmljYXRpb25Qcm92aWRlci5j
cHAKKysrIGIvU291cmNlL1dlYktpdC9VSVByb2Nlc3MvTm90aWZpY2F0aW9ucy9XZWJOb3RpZmlj
YXRpb25Qcm92aWRlci5jcHAKQEAgLTcxLDEyICs3MSw5IEBAIHZvaWQgV2ViTm90aWZpY2F0aW9u
UHJvdmlkZXI6OmNsZWFyTm90aWZpY2F0aW9ucyhjb25zdCBWZWN0b3I8dWludDY0X3Q+JiBub3Rp
ZmljCiAgICAgaWYgKCFtX2NsaWVudC5jbGVhck5vdGlmaWNhdGlvbnMpCiAgICAgICAgIHJldHVy
bjsKIAotICAgIFZlY3RvcjxSZWZQdHI8QVBJOjpPYmplY3Q+PiBhcnJheUlEczsKLSAgICBhcnJh
eUlEcy5yZXNlcnZlSW5pdGlhbENhcGFjaXR5KG5vdGlmaWNhdGlvbklEcy5zaXplKCkpOwotCi0g
ICAgZm9yIChjb25zdCBhdXRvJiBub3RpZmljYXRpb25JRCA6IG5vdGlmaWNhdGlvbklEcykKLSAg
ICAgICAgYXJyYXlJRHMudW5jaGVja2VkQXBwZW5kKEFQSTo6VUludDY0OjpjcmVhdGUobm90aWZp
Y2F0aW9uSUQpKTsKLQorICAgIGF1dG8gYXJyYXlJRHMgPSBub3RpZmljYXRpb25JRHMubWFwKFtd
KGF1dG8mIG5vdGlmaWNhdGlvbklEKSAtPiBSZWZQdHI8QVBJOjpPYmplY3Q+IHsKKyAgICAgICAg
cmV0dXJuIEFQSTo6VUludDY0OjpjcmVhdGUobm90aWZpY2F0aW9uSUQpOworICAgIH0pOwogICAg
IG1fY2xpZW50LmNsZWFyTm90aWZpY2F0aW9ucyh0b0FQSShBUEk6OkFycmF5OjpjcmVhdGUoV1RG
TW92ZShhcnJheUlEcykpLnB0cigpKSwgbV9jbGllbnQuYmFzZS5jbGllbnRJbmZvKTsKIH0KIApk
aWZmIC0tZ2l0IGEvU291cmNlL1dlYktpdC9VSVByb2Nlc3MvU3RhdGlzdGljc1JlcXVlc3QuY3Bw
IGIvU291cmNlL1dlYktpdC9VSVByb2Nlc3MvU3RhdGlzdGljc1JlcXVlc3QuY3BwCmluZGV4IGIx
YzJjNTI5YjQ0MzM2ZDYzZGYwMzVmZDg0NzQ4NjA3MjEzMmE4ZjcuLmUzZTYxNjQzNTkxZjJmZGU2
ZGNmZjUwM2IyNjE1YzllMzJiZWJiNWEgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJLaXQvVUlQcm9j
ZXNzL1N0YXRpc3RpY3NSZXF1ZXN0LmNwcAorKysgYi9Tb3VyY2UvV2ViS2l0L1VJUHJvY2Vzcy9T
dGF0aXN0aWNzUmVxdWVzdC5jcHAKQEAgLTg0LDEyICs4NCw5IEBAIHZvaWQgU3RhdGlzdGljc1Jl
cXVlc3Q6OmNvbXBsZXRlZFJlcXVlc3QodWludDY0X3QgcmVxdWVzdElELCBjb25zdCBTdGF0aXN0
aWNzRGF0CiAgICAgICAgIG1fcmVzcG9uc2VEaWN0aW9uYXJ5LT5zZXQoIkphdmFTY3JpcHRPYmpl
Y3RUeXBlQ291bnRzIiwgY3JlYXRlRGljdGlvbmFyeUZyb21IYXNoTWFwKGRhdGEuamF2YVNjcmlw
dE9iamVjdFR5cGVDb3VudHMpKTsKIAogICAgIGlmICghZGF0YS53ZWJDb3JlQ2FjaGVTdGF0aXN0
aWNzLmlzRW1wdHkoKSkgewotICAgICAgICBWZWN0b3I8UmVmUHRyPEFQSTo6T2JqZWN0Pj4gY2Fj
aGVTdGF0aXN0aWNzOwotICAgICAgICBjYWNoZVN0YXRpc3RpY3MucmVzZXJ2ZUluaXRpYWxDYXBh
Y2l0eShkYXRhLndlYkNvcmVDYWNoZVN0YXRpc3RpY3Muc2l6ZSgpKTsKLQotICAgICAgICBmb3Ig
KGNvbnN0IGF1dG8mIHN0YXRpc3RpYyA6IGRhdGEud2ViQ29yZUNhY2hlU3RhdGlzdGljcykKLSAg
ICAgICAgICAgIGNhY2hlU3RhdGlzdGljcy51bmNoZWNrZWRBcHBlbmQoY3JlYXRlRGljdGlvbmFy
eUZyb21IYXNoTWFwKHN0YXRpc3RpYykpOwotCisgICAgICAgIGF1dG8gY2FjaGVTdGF0aXN0aWNz
ID0gZGF0YS53ZWJDb3JlQ2FjaGVTdGF0aXN0aWNzLm1hcChbXShhdXRvJiBzdGF0aXN0aWMpIC0+
IFJlZlB0cjxBUEk6Ok9iamVjdD4geworICAgICAgICAgICAgcmV0dXJuIGNyZWF0ZURpY3Rpb25h
cnlGcm9tSGFzaE1hcChzdGF0aXN0aWMpOworICAgICAgICB9KTsKICAgICAgICAgbV9yZXNwb25z
ZURpY3Rpb25hcnktPnNldCgiV2ViQ29yZUNhY2hlU3RhdGlzdGljcyIsIEFQSTo6QXJyYXk6OmNy
ZWF0ZShXVEZNb3ZlKGNhY2hlU3RhdGlzdGljcykpKTsKICAgICB9CiAKZGlmZiAtLWdpdCBhL1Nv
dXJjZS9XZWJLaXQvVUlQcm9jZXNzL1VzZXJDb250ZW50L1dlYlVzZXJDb250ZW50Q29udHJvbGxl
clByb3h5LmNwcCBiL1NvdXJjZS9XZWJLaXQvVUlQcm9jZXNzL1VzZXJDb250ZW50L1dlYlVzZXJD
b250ZW50Q29udHJvbGxlclByb3h5LmNwcAppbmRleCA5MTE3M2E3NzgzNzc0NTQ2N2JiYTJhNzhi
NWU0NjhjNWQyMjE0MThlLi5mYTI1NGMyZGFkYzA2MzAyOGRmZDUwNGQyODkwYTg5MmFlZGFmYjA4
IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViS2l0L1VJUHJvY2Vzcy9Vc2VyQ29udGVudC9XZWJVc2Vy
Q29udGVudENvbnRyb2xsZXJQcm94eS5jcHAKKysrIGIvU291cmNlL1dlYktpdC9VSVByb2Nlc3Mv
VXNlckNvbnRlbnQvV2ViVXNlckNvbnRlbnRDb250cm9sbGVyUHJveHkuY3BwCkBAIC0yMTgsMTEg
KzIxOCw5IEBAIHZvaWQgV2ViVXNlckNvbnRlbnRDb250cm9sbGVyUHJveHk6OnJlbW92ZUFsbFVz
ZXJTY3JpcHRzKCkKICAgICBmb3IgKGF1dG8gdXNlclNjcmlwdCA6IG1fdXNlclNjcmlwdHMtPmVs
ZW1lbnRzT2ZUeXBlPEFQSTo6VXNlclNjcmlwdD4oKSkKICAgICAgICAgd29ybGRzLmFkZChjb25z
dF9jYXN0PEFQSTo6Q29udGVudFdvcmxkKj4oJnVzZXJTY3JpcHQtPmNvbnRlbnRXb3JsZCgpKSk7
CiAKLSAgICBWZWN0b3I8Q29udGVudFdvcmxkSWRlbnRpZmllcj4gd29ybGRJZGVudGlmaWVyczsK
LSAgICB3b3JsZElkZW50aWZpZXJzLnJlc2VydmVJbml0aWFsQ2FwYWNpdHkod29ybGRzLnNpemUo
KSk7Ci0gICAgZm9yIChjb25zdCBhdXRvJiB3b3JsZENvdW50UGFpciA6IHdvcmxkcykKLSAgICAg
ICAgd29ybGRJZGVudGlmaWVycy51bmNoZWNrZWRBcHBlbmQod29ybGRDb3VudFBhaXIua2V5LT5p
ZGVudGlmaWVyKCkpOwotCisgICAgYXV0byB3b3JsZElkZW50aWZpZXJzID0gV1RGOjptYXAod29y
bGRzLCBbXShhdXRvJiBlbnRyeSkgeworICAgICAgICByZXR1cm4gZW50cnkua2V5LT5pZGVudGlm
aWVyKCk7CisgICAgfSk7CiAgICAgZm9yIChhdXRvJiBwcm9jZXNzIDogbV9wcm9jZXNzZXMpCiAg
ICAgICAgIHByb2Nlc3Muc2VuZChNZXNzYWdlczo6V2ViVXNlckNvbnRlbnRDb250cm9sbGVyOjpS
ZW1vdmVBbGxVc2VyU2NyaXB0cyh3b3JsZElkZW50aWZpZXJzKSwgaWRlbnRpZmllcigpKTsKIApA
QCAtMjY3LDExICsyNjUsOSBAQCB2b2lkIFdlYlVzZXJDb250ZW50Q29udHJvbGxlclByb3h5Ojpy
ZW1vdmVBbGxVc2VyU3R5bGVTaGVldHMoKQogICAgIGZvciAoYXV0byB1c2VyU3R5bGVTaGVldCA6
IG1fdXNlclN0eWxlU2hlZXRzLT5lbGVtZW50c09mVHlwZTxBUEk6OlVzZXJTdHlsZVNoZWV0Pigp
KQogICAgICAgICB3b3JsZHMuYWRkKGNvbnN0X2Nhc3Q8QVBJOjpDb250ZW50V29ybGQqPigmdXNl
clN0eWxlU2hlZXQtPmNvbnRlbnRXb3JsZCgpKSk7CiAKLSAgICBWZWN0b3I8Q29udGVudFdvcmxk
SWRlbnRpZmllcj4gd29ybGRJZGVudGlmaWVyczsKLSAgICB3b3JsZElkZW50aWZpZXJzLnJlc2Vy
dmVJbml0aWFsQ2FwYWNpdHkod29ybGRzLnNpemUoKSk7Ci0gICAgZm9yIChjb25zdCBhdXRvJiB3
b3JsZENvdW50UGFpciA6IHdvcmxkcykKLSAgICAgICAgd29ybGRJZGVudGlmaWVycy51bmNoZWNr
ZWRBcHBlbmQod29ybGRDb3VudFBhaXIua2V5LT5pZGVudGlmaWVyKCkpOwotCisgICAgYXV0byB3
b3JsZElkZW50aWZpZXJzID0gV1RGOjptYXAod29ybGRzLCBbXShhdXRvJiBlbnRyeSkgeworICAg
ICAgICByZXR1cm4gZW50cnkua2V5LT5pZGVudGlmaWVyKCk7CisgICAgfSk7CiAgICAgZm9yIChh
dXRvJiBwcm9jZXNzIDogbV9wcm9jZXNzZXMpCiAgICAgICAgIHByb2Nlc3Muc2VuZChNZXNzYWdl
czo6V2ViVXNlckNvbnRlbnRDb250cm9sbGVyOjpSZW1vdmVBbGxVc2VyU3R5bGVTaGVldHMod29y
bGRJZGVudGlmaWVycyksIGlkZW50aWZpZXIoKSk7CiAKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJL
aXQvVUlQcm9jZXNzL1dlYkF1dGhlbnRpY2F0aW9uL0NvY29hL1dlYkF1dGhlbnRpY2F0aW9uUGFu
ZWxDbGllbnQubW0gYi9Tb3VyY2UvV2ViS2l0L1VJUHJvY2Vzcy9XZWJBdXRoZW50aWNhdGlvbi9D
b2NvYS9XZWJBdXRoZW50aWNhdGlvblBhbmVsQ2xpZW50Lm1tCmluZGV4IDM5YTM5ZDM0YzIzZGY4
ZjlhMmEyNmQzNmY2OTdjZjI1NTllOTZiMjcuLjAyN2M2OTBiZmE4MjUzMjc4NjJkZWU0OWZlMzIx
Nzg5NDIyYTNjOGMgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJLaXQvVUlQcm9jZXNzL1dlYkF1dGhl
bnRpY2F0aW9uL0NvY29hL1dlYkF1dGhlbnRpY2F0aW9uUGFuZWxDbGllbnQubW0KKysrIGIvU291
cmNlL1dlYktpdC9VSVByb2Nlc3MvV2ViQXV0aGVudGljYXRpb24vQ29jb2EvV2ViQXV0aGVudGlj
YXRpb25QYW5lbENsaWVudC5tbQpAQCAtMTY1LDExICsxNjUsOSBAQCB2b2lkIFdlYkF1dGhlbnRp
Y2F0aW9uUGFuZWxDbGllbnQ6OnNlbGVjdEFzc2VydGlvblJlc3BvbnNlKFZlY3RvcjxSZWY8V2Vi
Q29yZTo6QQogICAgICAgICByZXR1cm47CiAgICAgfQogCi0gICAgVmVjdG9yPFJlZlB0cjxBUEk6
Ok9iamVjdD4+IGFwaVJlc3BvbnNlczsKLSAgICBhcGlSZXNwb25zZXMucmVzZXJ2ZUluaXRpYWxD
YXBhY2l0eShyZXNwb25zZXMuc2l6ZSgpKTsKLSAgICBmb3IgKGF1dG8mIHJlc3BvbnNlIDogcmVz
cG9uc2VzKQotICAgICAgICBhcGlSZXNwb25zZXMudW5jaGVja2VkQXBwZW5kKEFQSTo6V2ViQXV0
aGVudGljYXRpb25Bc3NlcnRpb25SZXNwb25zZTo6Y3JlYXRlKHJlc3BvbnNlLmNvcHlSZWYoKSkp
OwotCisgICAgYXV0byBhcGlSZXNwb25zZXMgPSByZXNwb25zZXMubWFwKFtdKGF1dG8mIHJlc3Bv
bnNlKSAtPiBSZWZQdHI8QVBJOjpPYmplY3Q+IHsKKyAgICAgICAgcmV0dXJuIEFQSTo6V2ViQXV0
aGVudGljYXRpb25Bc3NlcnRpb25SZXNwb25zZTo6Y3JlYXRlKHJlc3BvbnNlLmNvcHlSZWYoKSk7
CisgICAgfSk7CiAgICAgYXV0byBjaGVja2VyID0gQ29tcGxldGlvbkhhbmRsZXJDYWxsQ2hlY2tl
cjo6Y3JlYXRlKGRlbGVnYXRlLmdldCgpLCBAc2VsZWN0b3IocGFuZWw6c2VsZWN0QXNzZXJ0aW9u
UmVzcG9uc2U6c291cmNlOmNvbXBsZXRpb25IYW5kbGVyOikpOwogICAgIFtkZWxlZ2F0ZSBwYW5l
bDptX3BhbmVsIHNlbGVjdEFzc2VydGlvblJlc3BvbnNlOndyYXBwZXIoQVBJOjpBcnJheTo6Y3Jl
YXRlKFdURk1vdmUoYXBpUmVzcG9uc2VzKSkpIHNvdXJjZTp3a1dlYkF1dGhlbnRpY2F0aW9uU291
cmNlKHNvdXJjZSkgY29tcGxldGlvbkhhbmRsZXI6bWFrZUJsb2NrUHRyKFtjb21wbGV0aW9uSGFu
ZGxlciA9IFdURk1vdmUoY29tcGxldGlvbkhhbmRsZXIpLCBjaGVja2VyID0gV1RGTW92ZShjaGVj
a2VyKV0oX1dLV2ViQXV0aGVudGljYXRpb25Bc3NlcnRpb25SZXNwb25zZSAqcmVzcG9uc2UpIG11
dGFibGUgewogICAgICAgICBpZiAoY2hlY2tlci0+Y29tcGxldGlvbkhhbmRsZXJIYXNCZWVuQ2Fs
bGVkKCkpCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViS2l0L1VJUHJvY2Vzcy9XZWJBdXRoZW50aWNh
dGlvbi9maWRvL0N0YXBBdXRoZW50aWNhdG9yLmNwcCBiL1NvdXJjZS9XZWJLaXQvVUlQcm9jZXNz
L1dlYkF1dGhlbnRpY2F0aW9uL2ZpZG8vQ3RhcEF1dGhlbnRpY2F0b3IuY3BwCmluZGV4IDMzMDU1
MzQwMzVhZWQ2ZTU3NzY5NjY5OWQzYzFmN2M4MjJlYzM5NTkuLmU1MGU2OWRiMzM4MGY3YjYyMGE4
NDExNjBkOTg0NDY5ZDgwZWRjMDkgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJLaXQvVUlQcm9jZXNz
L1dlYkF1dGhlbnRpY2F0aW9uL2ZpZG8vQ3RhcEF1dGhlbnRpY2F0b3IuY3BwCisrKyBiL1NvdXJj
ZS9XZWJLaXQvVUlQcm9jZXNzL1dlYkF1dGhlbnRpY2F0aW9uL2ZpZG8vQ3RhcEF1dGhlbnRpY2F0
b3IuY3BwCkBAIC0yMDgsMTIgKzIwOCw3IEBAIHZvaWQgQ3RhcEF1dGhlbnRpY2F0b3I6OmNvbnRp
bnVlR2V0TmV4dEFzc2VydGlvbkFmdGVyUmVzcG9uc2VSZWNlaXZlZChWZWN0b3I8dWluCiAKICAg
ICBpZiAoIW1fcmVtYWluaW5nQXNzZXJ0aW9uUmVzcG9uc2VzKSB7CiAgICAgICAgIGlmIChhdXRv
KiBvYnNlcnZlciA9IHRoaXMtPm9ic2VydmVyKCkpIHsKLSAgICAgICAgICAgIFZlY3RvcjxSZWY8
QXV0aGVudGljYXRvckFzc2VydGlvblJlc3BvbnNlPj4gcmVzcG9uc2VzQ29weTsKLSAgICAgICAg
ICAgIHJlc3BvbnNlc0NvcHkucmVzZXJ2ZUluaXRpYWxDYXBhY2l0eShtX2Fzc2VydGlvblJlc3Bv
bnNlcy5zaXplKCkpOwotICAgICAgICAgICAgZm9yIChhdXRvJiByZXNwb25zZSA6IG1fYXNzZXJ0
aW9uUmVzcG9uc2VzKQotICAgICAgICAgICAgICAgIHJlc3BvbnNlc0NvcHkudW5jaGVja2VkQXBw
ZW5kKHJlc3BvbnNlLmNvcHlSZWYoKSk7Ci0KLSAgICAgICAgICAgIG9ic2VydmVyLT5zZWxlY3RB
c3NlcnRpb25SZXNwb25zZShXVEZNb3ZlKHJlc3BvbnNlc0NvcHkpLCBXZWJBdXRoZW50aWNhdGlv
blNvdXJjZTo6RXh0ZXJuYWwsIFt0aGlzLCB3ZWFrVGhpcyA9IFdlYWtQdHIgeyAqdGhpcyB9XSAo
QXV0aGVudGljYXRvckFzc2VydGlvblJlc3BvbnNlKiByZXNwb25zZSkgeworICAgICAgICAgICAg
b2JzZXJ2ZXItPnNlbGVjdEFzc2VydGlvblJlc3BvbnNlKFZlY3RvciB7IG1fYXNzZXJ0aW9uUmVz
cG9uc2VzIH0sIFdlYkF1dGhlbnRpY2F0aW9uU291cmNlOjpFeHRlcm5hbCwgW3RoaXMsIHdlYWtU
aGlzID0gV2Vha1B0ciB7ICp0aGlzIH1dIChBdXRoZW50aWNhdG9yQXNzZXJ0aW9uUmVzcG9uc2Uq
IHJlc3BvbnNlKSB7CiAgICAgICAgICAgICAgICAgQVNTRVJUKFJ1bkxvb3A6OmlzTWFpbigpKTsK
ICAgICAgICAgICAgICAgICBpZiAoIXdlYWtUaGlzKQogICAgICAgICAgICAgICAgICAgICByZXR1
cm47CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViS2l0L1VJUHJvY2Vzcy9XZWJCYWNrRm9yd2FyZExp
c3QuY3BwIGIvU291cmNlL1dlYktpdC9VSVByb2Nlc3MvV2ViQmFja0ZvcndhcmRMaXN0LmNwcApp
bmRleCBlMGU5NDRkMTJkZmMxMmJjNmNlY2YwMzk2MjE5ZjUzMzQzNDJiNDUyLi5jNzQzNDNlNjVi
ODg5Zjc4NjlkYzhjY2EzNDA1MWI4YjI2NTQwMmI2IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViS2l0
L1VJUHJvY2Vzcy9XZWJCYWNrRm9yd2FyZExpc3QuY3BwCisrKyBiL1NvdXJjZS9XZWJLaXQvVUlQ
cm9jZXNzL1dlYkJhY2tGb3J3YXJkTGlzdC5jcHAKQEAgLTEwMiwxMCArMTAyLDEwIEBAIHZvaWQg
V2ViQmFja0ZvcndhcmRMaXN0OjphZGRJdGVtKFJlZjxXZWJCYWNrRm9yd2FyZExpc3RJdGVtPiYm
IG5ld0l0ZW0pCiAKICAgICAgICAgLy8gVG9zcyBldmVyeXRoaW5nIGluIHRoZSBmb3J3YXJkIGxp
c3QuCiAgICAgICAgIHVuc2lnbmVkIHRhcmdldFNpemUgPSAqbV9jdXJyZW50SW5kZXggKyAxOwot
ICAgICAgICByZW1vdmVkSXRlbXMucmVzZXJ2ZUNhcGFjaXR5KG1fZW50cmllcy5zaXplKCkgLSB0
YXJnZXRTaXplKTsKKyAgICAgICAgcmVtb3ZlZEl0ZW1zLnJlc2VydmVJbml0aWFsQ2FwYWNpdHko
bV9lbnRyaWVzLnNpemUoKSAtIHRhcmdldFNpemUpOwogICAgICAgICB3aGlsZSAobV9lbnRyaWVz
LnNpemUoKSA+IHRhcmdldFNpemUpIHsKICAgICAgICAgICAgIGRpZFJlbW92ZUl0ZW0obV9lbnRy
aWVzLmxhc3QoKSk7Ci0gICAgICAgICAgICByZW1vdmVkSXRlbXMuYXBwZW5kKFdURk1vdmUobV9l
bnRyaWVzLmxhc3QoKSkpOworICAgICAgICAgICAgcmVtb3ZlZEl0ZW1zLnVuY2hlY2tlZEFwcGVu
ZChXVEZNb3ZlKG1fZW50cmllcy5sYXN0KCkpKTsKICAgICAgICAgICAgIG1fZW50cmllcy5yZW1v
dmVMYXN0KCk7CiAgICAgICAgIH0KIApAQCAtMzg3LDEwICszODcsMTAgQEAgdm9pZCBXZWJCYWNr
Rm9yd2FyZExpc3Q6OmNsZWFyKCkKICAgICAgICAgICAgIGRpZFJlbW92ZUl0ZW0obV9lbnRyaWVz
W2ldKTsKICAgICB9CiAKLSAgICByZW1vdmVkSXRlbXMucmVzZXJ2ZUNhcGFjaXR5KHNpemUgLSAx
KTsKKyAgICByZW1vdmVkSXRlbXMucmVzZXJ2ZUluaXRpYWxDYXBhY2l0eShzaXplIC0gMSk7CiAg
ICAgZm9yIChzaXplX3QgaSA9IDA7IGkgPCBzaXplOyArK2kpIHsKICAgICAgICAgaWYgKG1fY3Vy
cmVudEluZGV4ICYmIGkgIT0gKm1fY3VycmVudEluZGV4KQotICAgICAgICAgICAgcmVtb3ZlZEl0
ZW1zLmFwcGVuZChXVEZNb3ZlKG1fZW50cmllc1tpXSkpOworICAgICAgICAgICAgcmVtb3ZlZEl0
ZW1zLnVuY2hlY2tlZEFwcGVuZChXVEZNb3ZlKG1fZW50cmllc1tpXSkpOwogICAgIH0KIAogICAg
IG1fY3VycmVudEluZGV4ID0gMDsKQEAgLTQzOCwxNiArNDM4LDEyIEBAIHZvaWQgV2ViQmFja0Zv
cndhcmRMaXN0OjpyZXN0b3JlRnJvbVN0YXRlKEJhY2tGb3J3YXJkTGlzdFN0YXRlIGJhY2tGb3J3
YXJkTGlzdFN0CiAgICAgaWYgKCFtX3BhZ2UpCiAgICAgICAgIHJldHVybjsKIAotICAgIFZlY3Rv
cjxSZWY8V2ViQmFja0ZvcndhcmRMaXN0SXRlbT4+IGl0ZW1zOwotICAgIGl0ZW1zLnJlc2VydmVJ
bml0aWFsQ2FwYWNpdHkoYmFja0ZvcndhcmRMaXN0U3RhdGUuaXRlbXMuc2l6ZSgpKTsKLQogICAg
IC8vIEZJWE1FOiBFbmFibGUgcmVzdG9yaW5nIHJlc291cmNlRGlyZWN0b3J5VVJMLgotICAgIGZv
ciAoYXV0byYgYmFja0ZvcndhcmRMaXN0SXRlbVN0YXRlIDogYmFja0ZvcndhcmRMaXN0U3RhdGUu
aXRlbXMpIHsKLSAgICAgICAgYmFja0ZvcndhcmRMaXN0SXRlbVN0YXRlLmlkZW50aWZpZXIgPSB7
IFByb2Nlc3M6OmlkZW50aWZpZXIoKSwgT2JqZWN0SWRlbnRpZmllcjxCYWNrRm9yd2FyZEl0ZW1J
ZGVudGlmaWVyOjpJdGVtSWRlbnRpZmllclR5cGU+OjpnZW5lcmF0ZSgpIH07Ci0gICAgICAgIGl0
ZW1zLnVuY2hlY2tlZEFwcGVuZChXZWJCYWNrRm9yd2FyZExpc3RJdGVtOjpjcmVhdGUoV1RGTW92
ZShiYWNrRm9yd2FyZExpc3RJdGVtU3RhdGUpLCBtX3BhZ2UtPmlkZW50aWZpZXIoKSkpOwotICAg
IH0KKyAgICBtX2VudHJpZXMgPSBXVEY6Om1hcChXVEZNb3ZlKGJhY2tGb3J3YXJkTGlzdFN0YXRl
Lml0ZW1zKSwgW3RoaXNdKGF1dG8mJiBzdGF0ZSkgeworICAgICAgICBzdGF0ZS5pZGVudGlmaWVy
ID0geyBQcm9jZXNzOjppZGVudGlmaWVyKCksIE9iamVjdElkZW50aWZpZXI8QmFja0ZvcndhcmRJ
dGVtSWRlbnRpZmllcjo6SXRlbUlkZW50aWZpZXJUeXBlPjo6Z2VuZXJhdGUoKSB9OworICAgICAg
ICByZXR1cm4gV2ViQmFja0ZvcndhcmRMaXN0SXRlbTo6Y3JlYXRlKFdURk1vdmUoc3RhdGUpLCBt
X3BhZ2UtPmlkZW50aWZpZXIoKSk7CisgICAgfSk7CiAgICAgbV9jdXJyZW50SW5kZXggPSBiYWNr
Rm9yd2FyZExpc3RTdGF0ZS5jdXJyZW50SW5kZXggPyBzdGQ6Om9wdGlvbmFsPHNpemVfdD4oKmJh
Y2tGb3J3YXJkTGlzdFN0YXRlLmN1cnJlbnRJbmRleCkgOiBzdGQ6Om51bGxvcHQ7Ci0gICAgbV9l
bnRyaWVzID0gV1RGTW92ZShpdGVtcyk7CiAKICAgICBMT0coQmFja0ZvcndhcmQsICIoQmFjay9G
b3J3YXJkKSBXZWJCYWNrRm9yd2FyZExpc3QgJXAgcmVzdG9yZWQgZnJvbSBzdGF0ZSAoaGFzICV6
dSBlbnRyaWVzKSIsIHRoaXMsIG1fZW50cmllcy5zaXplKCkpOwogfQpkaWZmIC0tZ2l0IGEvU291
cmNlL1dlYktpdC9VSVByb2Nlc3MvV2ViUGFnZVByb3h5LmNwcCBiL1NvdXJjZS9XZWJLaXQvVUlQ
cm9jZXNzL1dlYlBhZ2VQcm94eS5jcHAKaW5kZXggYWQ1NTdkOTBmM2JmZDgyNWNmMmVkYTljYTQz
OTM3MWYyZDgyYmUxOS4uMmVlODdiNTU0NzdlNTdlM2RkYmRiOWJjMDNmMDdmMTk3NTU0MDY0YiAx
MDA2NDQKLS0tIGEvU291cmNlL1dlYktpdC9VSVByb2Nlc3MvV2ViUGFnZVByb3h5LmNwcAorKysg
Yi9Tb3VyY2UvV2ViS2l0L1VJUHJvY2Vzcy9XZWJQYWdlUHJveHkuY3BwCkBAIC00MzkwLDEwICs0
MzkwLDcgQEAgdm9pZCBXZWJQYWdlUHJveHk6OnJ1bkphdmFTY3JpcHRJbkZyYW1lSW5TY3JpcHRX
b3JsZChSdW5KYXZhU2NyaXB0UGFyYW1ldGVycyYmIHAKICAgICAgICAgICAgIHJldHVybiBjYWxs
YmFja0Z1bmN0aW9uKG1ha2VVbmV4cGVjdGVkKFdURk1vdmUoKmRldGFpbHMpKSk7CiAgICAgICAg
IGlmIChkYXRhUmVmZXJlbmNlLmVtcHR5KCkpCiAgICAgICAgICAgICByZXR1cm4gY2FsbGJhY2tG
dW5jdGlvbih7IG51bGxwdHIgfSk7Ci0gICAgICAgIFZlY3Rvcjx1aW50OF90PiBkYXRhOwotICAg
ICAgICBkYXRhLnJlc2VydmVJbml0aWFsQ2FwYWNpdHkoZGF0YVJlZmVyZW5jZS5zaXplKCkpOwot
ICAgICAgICBkYXRhLmFwcGVuZChkYXRhUmVmZXJlbmNlLmRhdGEoKSwgZGF0YVJlZmVyZW5jZS5z
aXplKCkpOwotICAgICAgICBjYWxsYmFja0Z1bmN0aW9uKHsgQVBJOjpTZXJpYWxpemVkU2NyaXB0
VmFsdWU6OmFkb3B0KFdURk1vdmUoZGF0YSkpLnB0cigpIH0pOworICAgICAgICBjYWxsYmFja0Z1
bmN0aW9uKHsgQVBJOjpTZXJpYWxpemVkU2NyaXB0VmFsdWU6OmFkb3B0KFZlY3RvcihkYXRhUmVm
ZXJlbmNlKSkucHRyKCkgfSk7CiAgICAgfSk7CiB9CiAKQEAgLTEwNzAzLDExICsxMDcwMCw5IEBA
IFdlYlBhZ2VQcm94eTo6U3BlZWNoU3ludGhlc2lzRGF0YSYgV2ViUGFnZVByb3h5OjpzcGVlY2hT
eW50aGVzaXNEYXRhKCkKIAogdm9pZCBXZWJQYWdlUHJveHk6OnNwZWVjaFN5bnRoZXNpc1ZvaWNl
TGlzdChDb21wbGV0aW9uSGFuZGxlcjx2b2lkKFZlY3RvcjxXZWJTcGVlY2hTeW50aGVzaXNWb2lj
ZT4mJik+JiYgY29tcGxldGlvbkhhbmRsZXIpCiB7Ci0gICAgYXV0byYgdm9pY2VMaXN0ID0gc3Bl
ZWNoU3ludGhlc2lzRGF0YSgpLnN5bnRoZXNpemVyLT52b2ljZUxpc3QoKTsKLSAgICBWZWN0b3I8
V2ViU3BlZWNoU3ludGhlc2lzVm9pY2U+IHJlc3VsdDsKLSAgICByZXN1bHQucmVzZXJ2ZUluaXRp
YWxDYXBhY2l0eSh2b2ljZUxpc3Quc2l6ZSgpKTsKLSAgICBmb3IgKGF1dG8mIHZvaWNlIDogdm9p
Y2VMaXN0KQotICAgICAgICByZXN1bHQudW5jaGVja2VkQXBwZW5kKFdlYlNwZWVjaFN5bnRoZXNp
c1ZvaWNlIHsgdm9pY2UtPnZvaWNlVVJJKCksIHZvaWNlLT5uYW1lKCksIHZvaWNlLT5sYW5nKCks
IHZvaWNlLT5sb2NhbFNlcnZpY2UoKSwgdm9pY2UtPmlzRGVmYXVsdCgpIH0pOworICAgIGF1dG8g
cmVzdWx0ID0gc3BlZWNoU3ludGhlc2lzRGF0YSgpLnN5bnRoZXNpemVyLT52b2ljZUxpc3QoKS5t
YXAoW10oYXV0byYgdm9pY2UpIHsKKyAgICAgICAgcmV0dXJuIFdlYlNwZWVjaFN5bnRoZXNpc1Zv
aWNlIHsgdm9pY2UtPnZvaWNlVVJJKCksIHZvaWNlLT5uYW1lKCksIHZvaWNlLT5sYW5nKCksIHZv
aWNlLT5sb2NhbFNlcnZpY2UoKSwgdm9pY2UtPmlzRGVmYXVsdCgpIH07CisgICAgfSk7CiAgICAg
Y29tcGxldGlvbkhhbmRsZXIoV1RGTW92ZShyZXN1bHQpKTsKIH0KIApkaWZmIC0tZ2l0IGEvU291
cmNlL1dlYktpdC9VSVByb2Nlc3MvV2Vic2l0ZURhdGEvV2Vic2l0ZURhdGFTdG9yZS5jcHAgYi9T
b3VyY2UvV2ViS2l0L1VJUHJvY2Vzcy9XZWJzaXRlRGF0YS9XZWJzaXRlRGF0YVN0b3JlLmNwcApp
bmRleCA5ZWYxNGE1ZThmNjRkNzM5ZjRjZDMzMTYwODE3OGVhMDUxMTI2ZWYwLi5iMzZkOWE3NGI5
YTE3NWEwODE2YjdhMmUxNGYxMzlkYjVlZjU2ZTZkIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViS2l0
L1VJUHJvY2Vzcy9XZWJzaXRlRGF0YS9XZWJzaXRlRGF0YVN0b3JlLmNwcAorKysgYi9Tb3VyY2Uv
V2ViS2l0L1VJUHJvY2Vzcy9XZWJzaXRlRGF0YS9XZWJzaXRlRGF0YVN0b3JlLmNwcApAQCAtMzI0
LDExICszMjQsOSBAQCB2b2lkIFdlYnNpdGVEYXRhU3RvcmU6OmZldGNoRGF0YUFuZEFwcGx5KE9w
dGlvblNldDxXZWJzaXRlRGF0YVR5cGU+IGRhdGFUeXBlcywgTwogICAgICAgICB7CiAgICAgICAg
ICAgICBBU1NFUlQoUnVuTG9vcDo6aXNNYWluKCkpOwogCi0gICAgICAgICAgICBWZWN0b3I8V2Vi
c2l0ZURhdGFSZWNvcmQ+IHJlY29yZHM7Ci0gICAgICAgICAgICByZWNvcmRzLnJlc2VydmVJbml0
aWFsQ2FwYWNpdHkobV93ZWJzaXRlRGF0YVJlY29yZHMuc2l6ZSgpKTsKLSAgICAgICAgICAgIGZv
ciAoYXV0byYgcmVjb3JkIDogbV93ZWJzaXRlRGF0YVJlY29yZHMudmFsdWVzKCkpCi0gICAgICAg
ICAgICAgICAgcmVjb3Jkcy51bmNoZWNrZWRBcHBlbmQobV9xdWV1ZS5wdHIoKSAhPSAmV29ya1F1
ZXVlOjptYWluKCkgPyBjcm9zc1RocmVhZENvcHkocmVjb3JkKSA6IFdURk1vdmUocmVjb3JkKSk7
Ci0KKyAgICAgICAgICAgIGF1dG8gcmVjb3JkcyA9IFdURjo6bWFwKFdURk1vdmUobV93ZWJzaXRl
RGF0YVJlY29yZHMpLCBbdGhpc10oYXV0byYmIGVudHJ5KSB7CisgICAgICAgICAgICAgICAgcmV0
dXJuIG1fcXVldWUucHRyKCkgIT0gJldvcmtRdWV1ZTo6bWFpbigpID8gY3Jvc3NUaHJlYWRDb3B5
KFdURk1vdmUoZW50cnkudmFsdWUpKSA6IFdURk1vdmUoZW50cnkudmFsdWUpOworICAgICAgICAg
ICAgfSk7CiAgICAgICAgICAgICBtX3F1ZXVlLT5kaXNwYXRjaChbYXBwbHkgPSBXVEZNb3ZlKG1f
YXBwbHkpLCByZWNvcmRzID0gV1RGTW92ZShyZWNvcmRzKV0gKCkgbXV0YWJsZSB7CiAgICAgICAg
ICAgICAgICAgYXBwbHkoV1RGTW92ZShyZWNvcmRzKSk7CiAgICAgICAgICAgICB9KTsKQEAgLTE3
MjgsMTEgKzE3MjYsOSBAQCB2b2lkIFdlYnNpdGVEYXRhU3RvcmU6OnNldENhY2hlTW9kZWxTeW5j
aHJvbm91c2x5Rm9yVGVzdGluZyhDYWNoZU1vZGVsIGNhY2hlTW9kZQogCiBWZWN0b3I8V2Vic2l0
ZURhdGFTdG9yZVBhcmFtZXRlcnM+IFdlYnNpdGVEYXRhU3RvcmU6OnBhcmFtZXRlcnNGcm9tRWFj
aFdlYnNpdGVEYXRhU3RvcmUoKQogewotICAgIFZlY3RvcjxXZWJzaXRlRGF0YVN0b3JlUGFyYW1l
dGVycz4gcGFyYW1ldGVyczsKLSAgICBwYXJhbWV0ZXJzLnJlc2VydmVJbml0aWFsQ2FwYWNpdHko
YWxsRGF0YVN0b3JlcygpLnNpemUoKSk7Ci0gICAgZm9yIChhdXRvKiBkYXRhU3RvcmUgOiBhbGxE
YXRhU3RvcmVzKCkudmFsdWVzKCkpCi0gICAgICAgIHBhcmFtZXRlcnMudW5jaGVja2VkQXBwZW5k
KGRhdGFTdG9yZS0+cGFyYW1ldGVycygpKTsKLSAgICByZXR1cm4gcGFyYW1ldGVyczsKKyAgICBy
ZXR1cm4gV1RGOjptYXAoYWxsRGF0YVN0b3JlcygpLCBbXShhdXRvJiBlbnRyeSkgeworICAgICAg
ICByZXR1cm4gZW50cnkudmFsdWUtPnBhcmFtZXRlcnMoKTsKKyAgICB9KTsKIH0KIAogV2Vic2l0
ZURhdGFTdG9yZVBhcmFtZXRlcnMgV2Vic2l0ZURhdGFTdG9yZTo6cGFyYW1ldGVycygpCmRpZmYg
LS1naXQgYS9Tb3VyY2UvV2ViS2l0L1VJUHJvY2Vzcy9tYWMvV0tUZXh0RmluZGVyQ2xpZW50Lm1t
IGIvU291cmNlL1dlYktpdC9VSVByb2Nlc3MvbWFjL1dLVGV4dEZpbmRlckNsaWVudC5tbQppbmRl
eCBjMDM3ZDY1YjJiYzBmM2MwYTFlYTEyNmVmZDIxODI3ZGEyMWFhYmI5Li43MjA3NWZiYzg2MmMz
NGQwYzg2YjRhYzUzOGU0YzQ2Njk5Y2JlZTQyIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViS2l0L1VJ
UHJvY2Vzcy9tYWMvV0tUZXh0RmluZGVyQ2xpZW50Lm1tCisrKyBiL1NvdXJjZS9XZWJLaXQvVUlQ
cm9jZXNzL21hYy9XS1RleHRGaW5kZXJDbGllbnQubW0KQEAgLTE5MSw3ICsxOTEsNyBAQCAtICh2
b2lkKXdpbGxEZXN0cm95VmlldzooTlNWaWV3ICopdmlldwogLSAodm9pZClyZXBsYWNlTWF0Y2hl
czooTlNBcnJheSAqKW1hdGNoZXMgd2l0aFN0cmluZzooTlNTdHJpbmcgKilyZXBsYWNlbWVudFRl
eHQgaW5TZWxlY3Rpb25Pbmx5OihCT09MKXNlbGVjdGlvbk9ubHkgcmVzdWx0Q29sbGVjdG9yOih2
b2lkICheKShOU1VJbnRlZ2VyIHJlcGxhY2VtZW50Q291bnQpKXJlc3VsdENvbGxlY3Rvcgogewog
ICAgIFZlY3Rvcjx1aW50MzJfdD4gbWF0Y2hJbmRpY2VzOwotICAgIG1hdGNoSW5kaWNlcy5yZXNl
cnZlQ2FwYWNpdHkobWF0Y2hlcy5jb3VudCk7CisgICAgbWF0Y2hJbmRpY2VzLnJlc2VydmVJbml0
aWFsQ2FwYWNpdHkobWF0Y2hlcy5jb3VudCk7CiAgICAgZm9yIChpZCBtYXRjaCBpbiBtYXRjaGVz
KSB7CiAgICAgICAgIGlmIChbbWF0Y2ggaXNLaW5kT2ZDbGFzczpXS1RleHRGaW5kZXJNYXRjaC5j
bGFzc10pCiAgICAgICAgICAgICBtYXRjaEluZGljZXMudW5jaGVja2VkQXBwZW5kKFsoV0tUZXh0
RmluZGVyTWF0Y2ggKiltYXRjaCBpbmRleF0pOwpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYktpdC9X
ZWJQcm9jZXNzL0dQVS9tZWRpYS9SZW1vdGVSZW1vdGVDb21tYW5kTGlzdGVuZXIuY3BwIGIvU291
cmNlL1dlYktpdC9XZWJQcm9jZXNzL0dQVS9tZWRpYS9SZW1vdGVSZW1vdGVDb21tYW5kTGlzdGVu
ZXIuY3BwCmluZGV4IDc3MTBhM2E0NDEwMDFhZmM2ZGZkMGNkZDI1Y2EzYjhlZWY3YThmYWUuLjEw
MzA0ODIxZDg3OTM2YzBmN2U4NTA0NTIxNzkwYzM3YjI1NGY2MTAgMTAwNjQ0Ci0tLSBhL1NvdXJj
ZS9XZWJLaXQvV2ViUHJvY2Vzcy9HUFUvbWVkaWEvUmVtb3RlUmVtb3RlQ29tbWFuZExpc3RlbmVy
LmNwcAorKysgYi9Tb3VyY2UvV2ViS2l0L1dlYlByb2Nlc3MvR1BVL21lZGlhL1JlbW90ZVJlbW90
ZUNvbW1hbmRMaXN0ZW5lci5jcHAKQEAgLTk0LDEyICs5NCw3IEBAIHZvaWQgUmVtb3RlUmVtb3Rl
Q29tbWFuZExpc3RlbmVyOjp1cGRhdGVTdXBwb3J0ZWRDb21tYW5kcygpCiAgICAgbV9jdXJyZW50
Q29tbWFuZHMgPSBzdXBwb3J0ZWRDb21tYW5kczsKICAgICBtX2N1cnJlbnRTdXBwb3J0U2Vla2lu
ZyA9IHN1cHBvcnRzU2Vla2luZygpOwogCi0gICAgVmVjdG9yPFBsYXRmb3JtTWVkaWFTZXNzaW9u
OjpSZW1vdGVDb250cm9sQ29tbWFuZFR5cGU+IGNvbW1hbmRzOwotICAgIGNvbW1hbmRzLnJlc2Vy
dmVJbml0aWFsQ2FwYWNpdHkoc3VwcG9ydGVkQ29tbWFuZHMuc2l6ZSgpKTsKLSAgICBmb3IgKGF1
dG8gY29tbWFuZCA6IHN1cHBvcnRlZENvbW1hbmRzKQotICAgICAgICBjb21tYW5kcy51bmNoZWNr
ZWRBcHBlbmQoY29tbWFuZCk7Ci0KLSAgICBlbnN1cmVHUFVQcm9jZXNzQ29ubmVjdGlvbigpLmNv
bm5lY3Rpb24oKS5zZW5kKE1lc3NhZ2VzOjpSZW1vdGVSZW1vdGVDb21tYW5kTGlzdGVuZXJQcm94
eTo6VXBkYXRlU3VwcG9ydGVkQ29tbWFuZHMgeyBXVEZNb3ZlKGNvbW1hbmRzKSwgbV9jdXJyZW50
U3VwcG9ydFNlZWtpbmcgfSwgbV9pZGVudGlmaWVyKTsKKyAgICBlbnN1cmVHUFVQcm9jZXNzQ29u
bmVjdGlvbigpLmNvbm5lY3Rpb24oKS5zZW5kKE1lc3NhZ2VzOjpSZW1vdGVSZW1vdGVDb21tYW5k
TGlzdGVuZXJQcm94eTo6VXBkYXRlU3VwcG9ydGVkQ29tbWFuZHMgeyBjb3B5VG9WZWN0b3Ioc3Vw
cG9ydGVkQ29tbWFuZHMpLCBtX2N1cnJlbnRTdXBwb3J0U2Vla2luZyB9LCBtX2lkZW50aWZpZXIp
OwogfQogCiB9CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViS2l0L1dlYlByb2Nlc3MvSW5qZWN0ZWRC
dW5kbGUvQVBJL2MvV0tCdW5kbGVQYWdlLmNwcCBiL1NvdXJjZS9XZWJLaXQvV2ViUHJvY2Vzcy9J
bmplY3RlZEJ1bmRsZS9BUEkvYy9XS0J1bmRsZVBhZ2UuY3BwCmluZGV4IDI3ZjY0NDAwZGEzNjJh
YWU2ZmI4MjI1MzQxMmZmYzlmYTNhMzFiZGEuLmM4YmNmMTQ3YjVlZjUxNDJlMjhmZDRiZDI2MGQ3
NDY1M2Y1MDg1OGIgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJLaXQvV2ViUHJvY2Vzcy9JbmplY3Rl
ZEJ1bmRsZS9BUEkvYy9XS0J1bmRsZVBhZ2UuY3BwCisrKyBiL1NvdXJjZS9XZWJLaXQvV2ViUHJv
Y2Vzcy9JbmplY3RlZEJ1bmRsZS9BUEkvYy9XS0J1bmRsZVBhZ2UuY3BwCkBAIC0xODcsMTQgKzE4
Nyw5IEBAIHZvaWQgV0tCdW5kbGVQYWdlQ2xpY2tNZW51SXRlbShXS0J1bmRsZVBhZ2VSZWYgcGFn
ZVJlZiwgV0tDb250ZXh0TWVudUl0ZW1SZWYgaXRlCiAjaWYgRU5BQkxFKENPTlRFWFRfTUVOVVMp
CiBzdGF0aWMgUmVmPEFQSTo6QXJyYXk+IGNvbnRleHRNZW51SXRlbXMoY29uc3QgV2ViS2l0OjpX
ZWJDb250ZXh0TWVudSYgY29udGV4dE1lbnUpCiB7Ci0gICAgYXV0byBpdGVtcyA9IGNvbnRleHRN
ZW51Lml0ZW1zKCk7Ci0KLSAgICBWZWN0b3I8UmVmUHRyPEFQSTo6T2JqZWN0Pj4gbWVudUl0ZW1z
OwotICAgIG1lbnVJdGVtcy5yZXNlcnZlSW5pdGlhbENhcGFjaXR5KGl0ZW1zLnNpemUoKSk7Ci0K
LSAgICBmb3IgKGNvbnN0IGF1dG8mIGl0ZW0gOiBpdGVtcykKLSAgICAgICAgbWVudUl0ZW1zLnVu
Y2hlY2tlZEFwcGVuZChXZWJLaXQ6OldlYkNvbnRleHRNZW51SXRlbTo6Y3JlYXRlKGl0ZW0pKTsK
LQorICAgIGF1dG8gbWVudUl0ZW1zID0gY29udGV4dE1lbnUuaXRlbXMoKS5tYXAoW10oYXV0byYg
aXRlbSkgLT4gUmVmUHRyPEFQSTo6T2JqZWN0PiB7CisgICAgICAgIHJldHVybiBXZWJLaXQ6Oldl
YkNvbnRleHRNZW51SXRlbTo6Y3JlYXRlKGl0ZW0pOworICAgIH0pOwogICAgIHJldHVybiBBUEk6
OkFycmF5OjpjcmVhdGUoV1RGTW92ZShtZW51SXRlbXMpKTsKIH0KICNlbmRpZgpAQCAtODQ1LDEz
ICs4NDAsOSBAQCB2b2lkIFdLQnVuZGxlUGFnZVJlc2V0QXBwbGljYXRpb25DYWNoZU9yaWdpblF1
b3RhKFdLQnVuZGxlUGFnZVJlZiBwYWdlLCBXS1N0cmluZwogV0tBcnJheVJlZiBXS0J1bmRsZVBh
Z2VDb3B5T3JpZ2luc1dpdGhBcHBsaWNhdGlvbkNhY2hlKFdLQnVuZGxlUGFnZVJlZiBwYWdlKQog
ewogICAgIGF1dG8gb3JpZ2lucyA9IFdlYktpdDo6dG9JbXBsKHBhZ2UpLT5jb3JlUGFnZSgpLT5h
cHBsaWNhdGlvbkNhY2hlU3RvcmFnZSgpLm9yaWdpbnNXaXRoQ2FjaGUoKTsKLQotICAgIFZlY3Rv
cjxSZWZQdHI8QVBJOjpPYmplY3Q+PiBvcmlnaW5JZGVudGlmaWVyczsKLSAgICBvcmlnaW5JZGVu
dGlmaWVycy5yZXNlcnZlSW5pdGlhbENhcGFjaXR5KG9yaWdpbnMuc2l6ZSgpKTsKLQotICAgIGZv
ciAoY29uc3QgYXV0byYgb3JpZ2luIDogb3JpZ2lucykKLSAgICAgICAgb3JpZ2luSWRlbnRpZmll
cnMudW5jaGVja2VkQXBwZW5kKEFQSTo6U3RyaW5nOjpjcmVhdGUob3JpZ2luLmRhdGFiYXNlSWRl
bnRpZmllcigpKSk7Ci0KKyAgICBhdXRvIG9yaWdpbklkZW50aWZpZXJzID0gV1RGOjptYXAob3Jp
Z2lucywgW10oYXV0byYgb3JpZ2luKSAtPiBSZWZQdHI8QVBJOjpPYmplY3Q+IHsKKyAgICAgICAg
cmV0dXJuIEFQSTo6U3RyaW5nOjpjcmVhdGUob3JpZ2luLmRhdGFiYXNlSWRlbnRpZmllcigpKTsK
KyAgICB9KTsKICAgICByZXR1cm4gV2ViS2l0Ojp0b0FQSSgmQVBJOjpBcnJheTo6Y3JlYXRlKFdU
Rk1vdmUob3JpZ2luSWRlbnRpZmllcnMpKS5sZWFrUmVmKCkpOwogfQogCmRpZmYgLS1naXQgYS9T
b3VyY2UvV2ViS2l0L1dlYlByb2Nlc3MvSW5qZWN0ZWRCdW5kbGUvSW5qZWN0ZWRCdW5kbGVQYWdl
Q29udGV4dE1lbnVDbGllbnQuY3BwIGIvU291cmNlL1dlYktpdC9XZWJQcm9jZXNzL0luamVjdGVk
QnVuZGxlL0luamVjdGVkQnVuZGxlUGFnZUNvbnRleHRNZW51Q2xpZW50LmNwcAppbmRleCA5MDVi
NjZlNjVhY2RlNjEyZmY4MWVjMmFkNDRlZjg4NTVkN2FlMmQ4Li5kMjdkYzRhMDEzZjFhZWM4ZTc3
YjYwMGQyZGRjN2MwZGFlNzFmNzM2IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViS2l0L1dlYlByb2Nl
c3MvSW5qZWN0ZWRCdW5kbGUvSW5qZWN0ZWRCdW5kbGVQYWdlQ29udGV4dE1lbnVDbGllbnQuY3Bw
CisrKyBiL1NvdXJjZS9XZWJLaXQvV2ViUHJvY2Vzcy9JbmplY3RlZEJ1bmRsZS9JbmplY3RlZEJ1
bmRsZVBhZ2VDb250ZXh0TWVudUNsaWVudC5jcHAKQEAgLTUxLDExICs1MSw5IEBAIGJvb2wgSW5q
ZWN0ZWRCdW5kbGVQYWdlQ29udGV4dE1lbnVDbGllbnQ6OmdldEN1c3RvbU1lbnVGcm9tRGVmYXVs
dEl0ZW1zKFdlYlBhZ2UmCiAgICAgaWYgKCFtX2NsaWVudC5nZXRDb250ZXh0TWVudUZyb21EZWZh
dWx0TWVudSkKICAgICAgICAgcmV0dXJuIGZhbHNlOwogCi0gICAgVmVjdG9yPFdlYkNvbnRleHRN
ZW51SXRlbURhdGE+IGRlZmF1bHRNZW51ID0ga2l0SXRlbXMocHJvcG9zZWRNZW51KTsKLSAgICBW
ZWN0b3I8UmVmUHRyPEFQSTo6T2JqZWN0Pj4gZGVmYXVsdE1lbnVJdGVtczsKLSAgICBkZWZhdWx0
TWVudUl0ZW1zLnJlc2VydmVJbml0aWFsQ2FwYWNpdHkoZGVmYXVsdE1lbnUuc2l6ZSgpKTsKLSAg
ICBmb3IgKGNvbnN0IGF1dG8mIGl0ZW0gOiBkZWZhdWx0TWVudSkKLSAgICAgICAgZGVmYXVsdE1l
bnVJdGVtcy51bmNoZWNrZWRBcHBlbmQoV2ViQ29udGV4dE1lbnVJdGVtOjpjcmVhdGUoaXRlbSkp
OworICAgIGF1dG8gZGVmYXVsdE1lbnVJdGVtcyA9IGtpdEl0ZW1zKHByb3Bvc2VkTWVudSkubWFw
KFtdKGF1dG8mIGl0ZW0pIC0+IFJlZlB0cjxBUEk6Ok9iamVjdD4geworICAgICAgICByZXR1cm4g
V2ViQ29udGV4dE1lbnVJdGVtOjpjcmVhdGUoaXRlbSk7CisgICAgfSk7CiAKICAgICBXS0FycmF5
UmVmIG5ld01lbnVXSyA9IG51bGxwdHI7CiAgICAgV0tUeXBlUmVmIHVzZXJEYXRhVG9QYXNzID0g
bnVsbHB0cjsKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJLaXQvV2ViUHJvY2Vzcy9JbmplY3RlZEJ1
bmRsZS9JbmplY3RlZEJ1bmRsZVBhZ2VGb3JtQ2xpZW50LmNwcCBiL1NvdXJjZS9XZWJLaXQvV2Vi
UHJvY2Vzcy9JbmplY3RlZEJ1bmRsZS9JbmplY3RlZEJ1bmRsZVBhZ2VGb3JtQ2xpZW50LmNwcApp
bmRleCAxMGY4ZmVmOTI3OWVjNTVhMzJmNjU0ZGQ3OTM0NDg4YTA2MDc1MTgyLi4xZDg2MjUyNzQz
ZTg0MGNhOTliNmQzMmZkNzNkYzA0Y2ZkYjliN2ZjIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViS2l0
L1dlYlByb2Nlc3MvSW5qZWN0ZWRCdW5kbGUvSW5qZWN0ZWRCdW5kbGVQYWdlRm9ybUNsaWVudC5j
cHAKKysrIGIvU291cmNlL1dlYktpdC9XZWJQcm9jZXNzL0luamVjdGVkQnVuZGxlL0luamVjdGVk
QnVuZGxlUGFnZUZvcm1DbGllbnQuY3BwCkBAIC0xNjIsMTIgKzE2Miw5IEBAIHZvaWQgSW5qZWN0
ZWRCdW5kbGVQYWdlRm9ybUNsaWVudDo6ZGlkQXNzb2NpYXRlRm9ybUNvbnRyb2xzKFdlYlBhZ2Uq
IHBhZ2UsIGNvbnN0CiAgICAgaWYgKCFtX2NsaWVudC5kaWRBc3NvY2lhdGVGb3JtQ29udHJvbHMg
JiYgIW1fY2xpZW50LmRpZEFzc29jaWF0ZUZvcm1Db250cm9sc0ZvckZyYW1lKQogICAgICAgICBy
ZXR1cm47CiAKLSAgICBWZWN0b3I8UmVmUHRyPEFQSTo6T2JqZWN0Pj4gZWxlbWVudEhhbmRsZXM7
Ci0gICAgZWxlbWVudEhhbmRsZXMucmVzZXJ2ZUluaXRpYWxDYXBhY2l0eShlbGVtZW50cy5zaXpl
KCkpOwotCi0gICAgZm9yIChjb25zdCBhdXRvJiBlbGVtZW50IDogZWxlbWVudHMpCi0gICAgICAg
IGVsZW1lbnRIYW5kbGVzLnVuY2hlY2tlZEFwcGVuZChJbmplY3RlZEJ1bmRsZU5vZGVIYW5kbGU6
OmdldE9yQ3JlYXRlKGVsZW1lbnQuZ2V0KCkpKTsKLQorICAgIGF1dG8gZWxlbWVudEhhbmRsZXMg
PSBlbGVtZW50cy5tYXAoW10oYXV0byYgZWxlbWVudCkgLT4gUmVmUHRyPEFQSTo6T2JqZWN0PiB7
CisgICAgICAgIHJldHVybiBJbmplY3RlZEJ1bmRsZU5vZGVIYW5kbGU6OmdldE9yQ3JlYXRlKGVs
ZW1lbnQuZ2V0KCkpOworICAgIH0pOwogICAgIGlmICghbV9jbGllbnQuZGlkQXNzb2NpYXRlRm9y
bUNvbnRyb2xzRm9yRnJhbWUpIHsKICAgICAgICAgbV9jbGllbnQuZGlkQXNzb2NpYXRlRm9ybUNv
bnRyb2xzKHRvQVBJKHBhZ2UpLCB0b0FQSShBUEk6OkFycmF5OjpjcmVhdGUoV1RGTW92ZShlbGVt
ZW50SGFuZGxlcykpLnB0cigpKSwgbV9jbGllbnQuYmFzZS5jbGllbnRJbmZvKTsKICAgICAgICAg
cmV0dXJuOwpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYktpdC9XZWJQcm9jZXNzL05ldHdvcmsvV2Vi
U29ja2V0U3RyZWFtLmNwcCBiL1NvdXJjZS9XZWJLaXQvV2ViUHJvY2Vzcy9OZXR3b3JrL1dlYlNv
Y2tldFN0cmVhbS5jcHAKaW5kZXggMDViNGQ3NTkyNzYyODIyNmViNDA0NjhlODUxZDAzMjZhOTVh
M2I1NS4uY2ViZDk3YWFkOGNhYjI1ZjZjZWRlMGUzZTcwNzk1ZmNmNzI3MDM0ZSAxMDA2NDQKLS0t
IGEvU291cmNlL1dlYktpdC9XZWJQcm9jZXNzL05ldHdvcmsvV2ViU29ja2V0U3RyZWFtLmNwcAor
KysgYi9Tb3VyY2UvV2ViS2l0L1dlYlByb2Nlc3MvTmV0d29yay9XZWJTb2NrZXRTdHJlYW0uY3Bw
CkBAIC01OCw5ICs1OCw3IEBAIHZvaWQgV2ViU29ja2V0U3RyZWFtOjpuZXR3b3JrUHJvY2Vzc0Ny
YXNoZWQoKQogICAgIFZlY3RvcjxSZWZQdHI8V2ViU29ja2V0U3RyZWFtPj4gc29ja2V0czsKICAg
ICB7CiAgICAgICAgIExvY2tlciBzdGF0ZUxvY2tlciB7IGdsb2JhbFdlYlNvY2tldFN0cmVhbU1h
cExvY2sgfTsKLSAgICAgICAgc29ja2V0cy5yZXNlcnZlSW5pdGlhbENhcGFjaXR5KGdsb2JhbFdl
YlNvY2tldFN0cmVhbU1hcCgpLnNpemUoKSk7Ci0gICAgICAgIGZvciAoYXV0byYgc3RyZWFtIDog
Z2xvYmFsV2ViU29ja2V0U3RyZWFtTWFwKCkudmFsdWVzKCkpCi0gICAgICAgICAgICBzb2NrZXRz
LnVuY2hlY2tlZEFwcGVuZChzdHJlYW0pOworICAgICAgICBzb2NrZXRzID0gY29weVRvVmVjdG9y
T2Y8UmVmUHRyPFdlYlNvY2tldFN0cmVhbT4+KGdsb2JhbFdlYlNvY2tldFN0cmVhbU1hcCgpLnZh
bHVlcygpKTsKICAgICB9CiAKICAgICBmb3IgKGF1dG8mIHN0cmVhbSA6IHNvY2tldHMpIHsKZGlm
ZiAtLWdpdCBhL1NvdXJjZS9XZWJLaXQvV2ViUHJvY2Vzcy9OZXR3b3JrL3dlYnJ0Yy9XZWJSVENS
ZXNvbHZlci5jcHAgYi9Tb3VyY2UvV2ViS2l0L1dlYlByb2Nlc3MvTmV0d29yay93ZWJydGMvV2Vi
UlRDUmVzb2x2ZXIuY3BwCmluZGV4IDc0N2IxNmI2MGEyNGQ4ZTM0MGE0MWU2ZWZmMzg1MTViM2Ey
YzJlY2UuLjY3YmVlMGJkMTg2NTg4YTliZjhjMzZlNDczZGIyMjU3Y2FjNDc4ZTUgMTAwNjQ0Ci0t
LSBhL1NvdXJjZS9XZWJLaXQvV2ViUHJvY2Vzcy9OZXR3b3JrL3dlYnJ0Yy9XZWJSVENSZXNvbHZl
ci5jcHAKKysrIGIvU291cmNlL1dlYktpdC9XZWJQcm9jZXNzL05ldHdvcmsvd2VicnRjL1dlYlJU
Q1Jlc29sdmVyLmNwcApAQCAtNDYsMTEgKzQ2LDkgQEAgdm9pZCBXZWJSVENSZXNvbHZlcjo6c2V0
UmVzb2x2ZWRBZGRyZXNzKGNvbnN0IFZlY3RvcjxSVENOZXR3b3JrOjpJUEFkZHJlc3M+JiBhZGQK
ICAgICBhdXRvIGlkZW50aWZpZXIgPSBtX2lkZW50aWZpZXI7CiAgICAgYXV0byYgZmFjdG9yeSA9
IG1fc29ja2V0RmFjdG9yeTsKIAotICAgIFZlY3RvcjxydGM6OklQQWRkcmVzcz4gcnRjQWRkcmVz
c2VzOwotICAgIHJ0Y0FkZHJlc3Nlcy5yZXNlcnZlSW5pdGlhbENhcGFjaXR5KGFkZHJlc3Nlcy5z
aXplKCkpOwotICAgIGZvciAoYXV0byYgYWRkcmVzcyA6IGFkZHJlc3NlcykKLSAgICAgICAgcnRj
QWRkcmVzc2VzLnVuY2hlY2tlZEFwcGVuZChhZGRyZXNzLnZhbHVlKTsKLSAgICAKKyAgICBhdXRv
IHJ0Y0FkZHJlc3NlcyA9IGFkZHJlc3Nlcy5tYXAoW10oYXV0byYgYWRkcmVzcykgeworICAgICAg
ICByZXR1cm4gYWRkcmVzcy52YWx1ZTsKKyAgICB9KTsKICAgICBXZWJDb3JlOjpMaWJXZWJSVENQ
cm92aWRlcjo6Y2FsbE9uV2ViUlRDTmV0d29ya1RocmVhZChbJmZhY3RvcnksIGlkZW50aWZpZXIs
IHJ0Y0FkZHJlc3NlcyA9IFdURk1vdmUocnRjQWRkcmVzc2VzKV0oKSB7CiAgICAgICAgIGF1dG8q
IHJlc29sdmVyID0gZmFjdG9yeS5yZXNvbHZlcihpZGVudGlmaWVyKTsKICAgICAgICAgaWYgKCFy
ZXNvbHZlcikKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJLaXQvV2ViUHJvY2Vzcy9XZWJDb3JlU3Vw
cG9ydC9XZWJSZXNvdXJjZUxvYWRPYnNlcnZlci5jcHAgYi9Tb3VyY2UvV2ViS2l0L1dlYlByb2Nl
c3MvV2ViQ29yZVN1cHBvcnQvV2ViUmVzb3VyY2VMb2FkT2JzZXJ2ZXIuY3BwCmluZGV4IDNlZjE0
ZGQyM2I5YzdhZWFiNWIwNjlkYmExNWU3YjU3YTEwMjEzYjMuLjIyNDI5OTNlZTc3MTE4ZDAwOTc3
ZGIzNmUwM2M4MzgwZTgwNTU4YjUgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJLaXQvV2ViUHJvY2Vz
cy9XZWJDb3JlU3VwcG9ydC9XZWJSZXNvdXJjZUxvYWRPYnNlcnZlci5jcHAKKysrIGIvU291cmNl
L1dlYktpdC9XZWJQcm9jZXNzL1dlYkNvcmVTdXBwb3J0L1dlYlJlc291cmNlTG9hZE9ic2VydmVy
LmNwcApAQCAtMTI3LDEyICsxMjcsOSBAQCBTdHJpbmcgV2ViUmVzb3VyY2VMb2FkT2JzZXJ2ZXI6
OnN0YXRpc3RpY3NGb3JVUkwoY29uc3QgVVJMJiB1cmwpCiAKIFZlY3RvcjxSZXNvdXJjZUxvYWRT
dGF0aXN0aWNzPiBXZWJSZXNvdXJjZUxvYWRPYnNlcnZlcjo6dGFrZVN0YXRpc3RpY3MoKQogewot
ICAgIFZlY3RvcjxSZXNvdXJjZUxvYWRTdGF0aXN0aWNzPiBzdGF0aXN0aWNzOwotICAgIHN0YXRp
c3RpY3MucmVzZXJ2ZUluaXRpYWxDYXBhY2l0eShtX3Jlc291cmNlU3RhdGlzdGljc01hcC5zaXpl
KCkpOwotICAgIGZvciAoYXV0byYgc3RhdGlzdGljIDogbV9yZXNvdXJjZVN0YXRpc3RpY3NNYXAu
dmFsdWVzKCkpCi0gICAgICAgIHN0YXRpc3RpY3MudW5jaGVja2VkQXBwZW5kKFJlc291cmNlTG9h
ZFN0YXRpc3RpY3MoV1RGTW92ZSgqc3RhdGlzdGljKSkpOwotICAgIG1fcmVzb3VyY2VTdGF0aXN0
aWNzTWFwLmNsZWFyKCk7Ci0gICAgcmV0dXJuIHN0YXRpc3RpY3M7CisgICAgcmV0dXJuIFdURjo6
bWFwKHN0ZDo6ZXhjaGFuZ2UobV9yZXNvdXJjZVN0YXRpc3RpY3NNYXAsIHsgfSksIFtdKGF1dG8m
JiBlbnRyeSkgeworICAgICAgICByZXR1cm4gUmVzb3VyY2VMb2FkU3RhdGlzdGljcyB7IFdURk1v
dmUoKmVudHJ5LnZhbHVlKSB9OworICAgIH0pOwogfQogCiB2b2lkIFdlYlJlc291cmNlTG9hZE9i
c2VydmVyOjpjbGVhclN0YXRlKCkKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJLaXQvV2ViUHJvY2Vz
cy9XZWJQYWdlL0ZpbmRDb250cm9sbGVyLmNwcCBiL1NvdXJjZS9XZWJLaXQvV2ViUHJvY2Vzcy9X
ZWJQYWdlL0ZpbmRDb250cm9sbGVyLmNwcAppbmRleCBjNTNmM2ViZjU5ZDNlOWU3NTYyNGM1Mzkw
MjJjMTUyYThlNDU5MDJiLi5iNTEzNGQwZDJjNWQ3YzUyZjZmYWM5NjgwNDQxYWNjM2VlYmY2NWZk
IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViS2l0L1dlYlByb2Nlc3MvV2ViUGFnZS9GaW5kQ29udHJv
bGxlci5jcHAKKysrIGIvU291cmNlL1dlYktpdC9XZWJQcm9jZXNzL1dlYlBhZ2UvRmluZENvbnRy
b2xsZXIuY3BwCkBAIC05OCw3ICs5OCw3IEBAIHVpbnQzMl90IEZpbmRDb250cm9sbGVyOjpyZXBs
YWNlTWF0Y2hlcyhjb25zdCBWZWN0b3I8dWludDMyX3Q+JiBtYXRjaEluZGljZXMsIGNvCiAgICAg
Y29uc3QgdWludDMyX3QgbWF4aW11bU51bWJlck9mTWF0Y2hlc1RvUmVwbGFjZSA9IDEwMDA7CiAK
ICAgICBWZWN0b3I8U2ltcGxlUmFuZ2U+IHJhbmdlc1RvUmVwbGFjZTsKLSAgICByYW5nZXNUb1Jl
cGxhY2UucmVzZXJ2ZUNhcGFjaXR5KHN0ZDo6bWluPHVpbnQzMl90PihtYXhpbXVtTnVtYmVyT2ZN
YXRjaGVzVG9SZXBsYWNlLCBtYXRjaEluZGljZXMuc2l6ZSgpKSk7CisgICAgcmFuZ2VzVG9SZXBs
YWNlLnJlc2VydmVJbml0aWFsQ2FwYWNpdHkoc3RkOjptaW48dWludDMyX3Q+KG1heGltdW1OdW1i
ZXJPZk1hdGNoZXNUb1JlcGxhY2UsIG1hdGNoSW5kaWNlcy5zaXplKCkpKTsKICAgICBmb3IgKGF1
dG8gaW5kZXggOiBtYXRjaEluZGljZXMpIHsKICAgICAgICAgaWYgKGluZGV4IDwgbV9maW5kTWF0
Y2hlcy5zaXplKCkpCiAgICAgICAgICAgICByYW5nZXNUb1JlcGxhY2UudW5jaGVja2VkQXBwZW5k
KG1fZmluZE1hdGNoZXNbaW5kZXhdKTsKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJLaXQvV2ViUHJv
Y2Vzcy9XZWJQYWdlL1JlbW90ZUxheWVyVHJlZS9QbGF0Zm9ybUNBQW5pbWF0aW9uUmVtb3RlLm1t
IGIvU291cmNlL1dlYktpdC9XZWJQcm9jZXNzL1dlYlBhZ2UvUmVtb3RlTGF5ZXJUcmVlL1BsYXRm
b3JtQ0FBbmltYXRpb25SZW1vdGUubW0KaW5kZXggMGJiNzkzOTYyYmUzNGJjMjkyMzcxYTIyNTE2
OTI5MGI0NjIwZDM3OC4uZGViMGU1OTZiY2NmMTQ1NTkxYWNkZmZmODJjZDAzOTNjMTU4OGNjZSAx
MDA2NDQKLS0tIGEvU291cmNlL1dlYktpdC9XZWJQcm9jZXNzL1dlYlBhZ2UvUmVtb3RlTGF5ZXJU
cmVlL1BsYXRmb3JtQ0FBbmltYXRpb25SZW1vdGUubW0KKysrIGIvU291cmNlL1dlYktpdC9XZWJQ
cm9jZXNzL1dlYlBhZ2UvUmVtb3RlTGF5ZXJUcmVlL1BsYXRmb3JtQ0FBbmltYXRpb25SZW1vdGUu
bW0KQEAgLTk4LDYgKzk4LDEzIEBAIEBlbmQKIG5hbWVzcGFjZSBXZWJLaXQgewogdXNpbmcgbmFt
ZXNwYWNlIFdlYkNvcmU7CiAKK3RlbXBsYXRlPHR5cGVuYW1lIFQ+IHN0YXRpYyBWZWN0b3I8UGxh
dGZvcm1DQUFuaW1hdGlvblJlbW90ZTo6S2V5ZnJhbWVWYWx1ZT4gdG9LZXlmcmFtZVZhbHVlVmVj
dG9yKGNvbnN0IFZlY3RvcjxUPiYgdmFsdWVzKQoreworICAgIHJldHVybiB2YWx1ZXMubWFwKFtd
KGF1dG8mIHZhbHVlKSB7CisgICAgICAgIHJldHVybiBQbGF0Zm9ybUNBQW5pbWF0aW9uUmVtb3Rl
OjpLZXlmcmFtZVZhbHVlIHsgdmFsdWUgfTsKKyAgICB9KTsKK30KKwogc3RhdGljIHZvaWQgZW5j
b2RlVGltaW5nRnVuY3Rpb24oSVBDOjpFbmNvZGVyJiBlbmNvZGVyLCBUaW1pbmdGdW5jdGlvbiog
dGltaW5nRnVuY3Rpb24pCiB7CiAgICAgc3dpdGNoICh0aW1pbmdGdW5jdGlvbi0+dHlwZSgpKSB7
CkBAIC01NjEsMTMgKzU2OCw3IEBAIHZvaWQgUGxhdGZvcm1DQUFuaW1hdGlvblJlbW90ZTo6c2V0
VmFsdWVzKGNvbnN0IFZlY3RvcjxmbG9hdD4mIHZhbHVlcykKICAgICBpZiAoYW5pbWF0aW9uVHlw
ZSgpICE9IEtleWZyYW1lKQogICAgICAgICByZXR1cm47CiAKLSAgICBWZWN0b3I8S2V5ZnJhbWVW
YWx1ZT4ga2V5ZnJhbWVzOwotICAgIGtleWZyYW1lcy5yZXNlcnZlSW5pdGlhbENhcGFjaXR5KHZh
bHVlcy5zaXplKCkpOwotICAgIAotICAgIGZvciAoc2l6ZV90IGkgPSAwOyBpIDwgdmFsdWVzLnNp
emUoKTsgKytpKQotICAgICAgICBrZXlmcmFtZXMudW5jaGVja2VkQXBwZW5kKEtleWZyYW1lVmFs
dWUodmFsdWVzW2ldKSk7Ci0gICAgCi0gICAgbV9wcm9wZXJ0aWVzLmtleVZhbHVlcyA9IFdURk1v
dmUoa2V5ZnJhbWVzKTsKKyAgICBtX3Byb3BlcnRpZXMua2V5VmFsdWVzID0gdG9LZXlmcmFtZVZh
bHVlVmVjdG9yKHZhbHVlcyk7CiB9CiAKIHZvaWQgUGxhdGZvcm1DQUFuaW1hdGlvblJlbW90ZTo6
c2V0VmFsdWVzKGNvbnN0IFZlY3RvcjxUcmFuc2Zvcm1hdGlvbk1hdHJpeD4mIHZhbHVlcykKQEAg
LTU3NSwxMyArNTc2LDcgQEAgdm9pZCBQbGF0Zm9ybUNBQW5pbWF0aW9uUmVtb3RlOjpzZXRWYWx1
ZXMoY29uc3QgVmVjdG9yPFRyYW5zZm9ybWF0aW9uTWF0cml4PiYgdmEKICAgICBpZiAoYW5pbWF0
aW9uVHlwZSgpICE9IEtleWZyYW1lKQogICAgICAgICByZXR1cm47CiAKLSAgICBWZWN0b3I8S2V5
ZnJhbWVWYWx1ZT4ga2V5ZnJhbWVzOwotICAgIGtleWZyYW1lcy5yZXNlcnZlSW5pdGlhbENhcGFj
aXR5KHZhbHVlcy5zaXplKCkpOwotICAgIAotICAgIGZvciAoc2l6ZV90IGkgPSAwOyBpIDwgdmFs
dWVzLnNpemUoKTsgKytpKQotICAgICAgICBrZXlmcmFtZXMudW5jaGVja2VkQXBwZW5kKEtleWZy
YW1lVmFsdWUodmFsdWVzW2ldKSk7Ci0gICAgCi0gICAgbV9wcm9wZXJ0aWVzLmtleVZhbHVlcyA9
IFdURk1vdmUoa2V5ZnJhbWVzKTsKKyAgICBtX3Byb3BlcnRpZXMua2V5VmFsdWVzID0gdG9LZXlm
cmFtZVZhbHVlVmVjdG9yKHZhbHVlcyk7CiB9CiAKIHZvaWQgUGxhdGZvcm1DQUFuaW1hdGlvblJl
bW90ZTo6c2V0VmFsdWVzKGNvbnN0IFZlY3RvcjxGbG9hdFBvaW50M0Q+JiB2YWx1ZXMpCkBAIC01
ODksMTMgKzU4NCw3IEBAIHZvaWQgUGxhdGZvcm1DQUFuaW1hdGlvblJlbW90ZTo6c2V0VmFsdWVz
KGNvbnN0IFZlY3RvcjxGbG9hdFBvaW50M0Q+JiB2YWx1ZXMpCiAgICAgaWYgKGFuaW1hdGlvblR5
cGUoKSAhPSBLZXlmcmFtZSkKICAgICAgICAgcmV0dXJuOwogCi0gICAgVmVjdG9yPEtleWZyYW1l
VmFsdWU+IGtleWZyYW1lczsKLSAgICBrZXlmcmFtZXMucmVzZXJ2ZUluaXRpYWxDYXBhY2l0eSh2
YWx1ZXMuc2l6ZSgpKTsKLSAgICAKLSAgICBmb3IgKHNpemVfdCBpID0gMDsgaSA8IHZhbHVlcy5z
aXplKCk7ICsraSkKLSAgICAgICAga2V5ZnJhbWVzLnVuY2hlY2tlZEFwcGVuZChLZXlmcmFtZVZh
bHVlKHZhbHVlc1tpXSkpOwotICAgIAotICAgIG1fcHJvcGVydGllcy5rZXlWYWx1ZXMgPSBXVEZN
b3ZlKGtleWZyYW1lcyk7CisgICAgbV9wcm9wZXJ0aWVzLmtleVZhbHVlcyA9IHRvS2V5ZnJhbWVW
YWx1ZVZlY3Rvcih2YWx1ZXMpOwogfQogCiB2b2lkIFBsYXRmb3JtQ0FBbmltYXRpb25SZW1vdGU6
OnNldFZhbHVlcyhjb25zdCBWZWN0b3I8Q29sb3I+JiB2YWx1ZXMpCkBAIC02MDMsMTMgKzU5Miw3
IEBAIHZvaWQgUGxhdGZvcm1DQUFuaW1hdGlvblJlbW90ZTo6c2V0VmFsdWVzKGNvbnN0IFZlY3Rv
cjxDb2xvcj4mIHZhbHVlcykKICAgICBpZiAoYW5pbWF0aW9uVHlwZSgpICE9IEtleWZyYW1lKQog
ICAgICAgICByZXR1cm47CiAKLSAgICBWZWN0b3I8S2V5ZnJhbWVWYWx1ZT4ga2V5ZnJhbWVzOwot
ICAgIGtleWZyYW1lcy5yZXNlcnZlSW5pdGlhbENhcGFjaXR5KHZhbHVlcy5zaXplKCkpOwotICAg
IAotICAgIGZvciAoc2l6ZV90IGkgPSAwOyBpIDwgdmFsdWVzLnNpemUoKTsgKytpKQotICAgICAg
ICBrZXlmcmFtZXMudW5jaGVja2VkQXBwZW5kKEtleWZyYW1lVmFsdWUodmFsdWVzW2ldKSk7Ci0g
ICAgCi0gICAgbV9wcm9wZXJ0aWVzLmtleVZhbHVlcyA9IFdURk1vdmUoa2V5ZnJhbWVzKTsKKyAg
ICBtX3Byb3BlcnRpZXMua2V5VmFsdWVzID0gdG9LZXlmcmFtZVZhbHVlVmVjdG9yKHZhbHVlcyk7
CiB9CiAKIHZvaWQgUGxhdGZvcm1DQUFuaW1hdGlvblJlbW90ZTo6c2V0VmFsdWVzKGNvbnN0IFZl
Y3RvcjxSZWZQdHI8RmlsdGVyT3BlcmF0aW9uPj4mIHZhbHVlcywgaW50IGludGVybmFsRmlsdGVy
UHJvcGVydHlJbmRleCkKQEAgLTYxOSwxMyArNjAyLDcgQEAgdm9pZCBQbGF0Zm9ybUNBQW5pbWF0
aW9uUmVtb3RlOjpzZXRWYWx1ZXMoY29uc3QgVmVjdG9yPFJlZlB0cjxGaWx0ZXJPcGVyYXRpb24+
PiYKICAgICBpZiAoYW5pbWF0aW9uVHlwZSgpICE9IEtleWZyYW1lKQogICAgICAgICByZXR1cm47
CiAKLSAgICBWZWN0b3I8S2V5ZnJhbWVWYWx1ZT4ga2V5ZnJhbWVzOwotICAgIGtleWZyYW1lcy5y
ZXNlcnZlSW5pdGlhbENhcGFjaXR5KHZhbHVlcy5zaXplKCkpOwotICAgIAotICAgIGZvciAoYXV0
byYgdmFsdWUgOiB2YWx1ZXMpCi0gICAgICAgIGtleWZyYW1lcy51bmNoZWNrZWRBcHBlbmQoS2V5
ZnJhbWVWYWx1ZSB7IHZhbHVlLmNvcHlSZWYoKSB9KTsKLSAgICAKLSAgICBtX3Byb3BlcnRpZXMu
a2V5VmFsdWVzID0gV1RGTW92ZShrZXlmcmFtZXMpOworICAgIG1fcHJvcGVydGllcy5rZXlWYWx1
ZXMgPSB0b0tleWZyYW1lVmFsdWVWZWN0b3IodmFsdWVzKTsKIH0KIAogdm9pZCBQbGF0Zm9ybUNB
QW5pbWF0aW9uUmVtb3RlOjpjb3B5VmFsdWVzRnJvbShjb25zdCBQbGF0Zm9ybUNBQW5pbWF0aW9u
JiB2YWx1ZSkKQEAgLTY0NSwxMyArNjIyLDkgQEAgdm9pZCBQbGF0Zm9ybUNBQW5pbWF0aW9uUmVt
b3RlOjpjb3B5S2V5VGltZXNGcm9tKGNvbnN0IFBsYXRmb3JtQ0FBbmltYXRpb24mIHZhbHUKIAog
dm9pZCBQbGF0Zm9ybUNBQW5pbWF0aW9uUmVtb3RlOjpzZXRUaW1pbmdGdW5jdGlvbnMoY29uc3Qg
VmVjdG9yPGNvbnN0IFRpbWluZ0Z1bmN0aW9uKj4mIHZhbHVlcywgYm9vbCByZXZlcnNlKQogewot
ICAgIFZlY3RvcjxSZWZQdHI8V2ViQ29yZTo6VGltaW5nRnVuY3Rpb24+PiB0aW1pbmdGdW5jdGlv
bnM7Ci0gICAgdGltaW5nRnVuY3Rpb25zLnJlc2VydmVJbml0aWFsQ2FwYWNpdHkodmFsdWVzLnNp
emUoKSk7Ci0gICAgCi0gICAgZm9yIChzaXplX3QgaSA9IDA7IGkgPCB2YWx1ZXMuc2l6ZSgpOyAr
K2kpCi0gICAgICAgIHRpbWluZ0Z1bmN0aW9ucy51bmNoZWNrZWRBcHBlbmQodmFsdWVzW2ldLT5j
bG9uZSgpKTsKLSAgICAKLSAgICBtX3Byb3BlcnRpZXMudGltaW5nRnVuY3Rpb25zID0gV1RGTW92
ZSh0aW1pbmdGdW5jdGlvbnMpOworICAgIG1fcHJvcGVydGllcy50aW1pbmdGdW5jdGlvbnMgPSB2
YWx1ZXMubWFwKFtdKGF1dG8mIHZhbHVlKSAtPiBSZWZQdHI8V2ViQ29yZTo6VGltaW5nRnVuY3Rp
b24+IHsKKyAgICAgICAgcmV0dXJuIHZhbHVlLT5jbG9uZSgpOworICAgIH0pOwogICAgIG1fcHJv
cGVydGllcy5yZXZlcnNlVGltaW5nRnVuY3Rpb25zID0gcmV2ZXJzZTsKIH0KIApkaWZmIC0tZ2l0
IGEvU291cmNlL1dlYktpdC9XZWJQcm9jZXNzL1dlYlBhZ2UvVmlld0dlc3R1cmVHZW9tZXRyeUNv
bGxlY3Rvci5jcHAgYi9Tb3VyY2UvV2ViS2l0L1dlYlByb2Nlc3MvV2ViUGFnZS9WaWV3R2VzdHVy
ZUdlb21ldHJ5Q29sbGVjdG9yLmNwcAppbmRleCA2YmQ3Mzg2ZmJiOGQ2MmNkMzUzYjNkMmYxYTE2
OTk5YmIyYmQxNmNiLi45YWUyOTMxNGYyZWM0N2M0MjE0OTdiOTNkMWYyZDVkYTljYjFmZTllIDEw
MDY0NAotLS0gYS9Tb3VyY2UvV2ViS2l0L1dlYlByb2Nlc3MvV2ViUGFnZS9WaWV3R2VzdHVyZUdl
b21ldHJ5Q29sbGVjdG9yLmNwcAorKysgYi9Tb3VyY2UvV2ViS2l0L1dlYlByb2Nlc3MvV2ViUGFn
ZS9WaWV3R2VzdHVyZUdlb21ldHJ5Q29sbGVjdG9yLmNwcApAQCAtMTgxLDEwICsxODEsOSBAQCBz
dGQ6Om9wdGlvbmFsPHN0ZDo6cGFpcjxkb3VibGUsIGRvdWJsZT4+IFZpZXdHZXN0dXJlR2VvbWV0
cnlDb2xsZWN0b3I6OmNvbXB1dGVUZQogICAgICAgICB0b3RhbFNhbXBsZWRUZXh0TGVuZ3RoICs9
IHRleHRMZW5ndGg7CiAgICAgfQogCi0gICAgVmVjdG9yPEZvbnRTaXplQW5kQ291bnQ+IHNvcnRl
ZEZvbnRTaXplc0FuZENvdW50czsKLSAgICBzb3J0ZWRGb250U2l6ZXNBbmRDb3VudHMucmVzZXJ2
ZUNhcGFjaXR5KGZvbnRTaXplVG9Db3VudE1hcC5zaXplKCkpOwotICAgIGZvciAoYXV0byYgZW50
cnkgOiBmb250U2l6ZVRvQ291bnRNYXApCi0gICAgICAgIHNvcnRlZEZvbnRTaXplc0FuZENvdW50
cy5hcHBlbmQoeyBlbnRyeS5rZXksIGVudHJ5LnZhbHVlIH0pOworICAgIGF1dG8gc29ydGVkRm9u
dFNpemVzQW5kQ291bnRzID0gV1RGOjptYXAoZm9udFNpemVUb0NvdW50TWFwLCBbXShhdXRvJiBl
bnRyeSkgeworICAgICAgICByZXR1cm4gRm9udFNpemVBbmRDb3VudCB7IGVudHJ5LmtleSwgZW50
cnkudmFsdWUgfTsKKyAgICB9KTsKIAogICAgIHN0ZDo6c29ydChzb3J0ZWRGb250U2l6ZXNBbmRD
b3VudHMuYmVnaW4oKSwgc29ydGVkRm9udFNpemVzQW5kQ291bnRzLmVuZCgpLCBbXSAoYXV0byYg
Zmlyc3QsIGF1dG8mIHNlY29uZCkgewogICAgICAgICByZXR1cm4gZmlyc3QuZm9udFNpemUgPCBz
ZWNvbmQuZm9udFNpemU7CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViS2l0L1dlYlByb2Nlc3MvV2Vi
UGFnZS9XZWJQYWdlLmNwcCBiL1NvdXJjZS9XZWJLaXQvV2ViUHJvY2Vzcy9XZWJQYWdlL1dlYlBh
Z2UuY3BwCmluZGV4IDYzYWY5MWZkYmE1ZjIwMTAwNmM3M2M1OWYyOTZiYTIyZjNkMzdjNWQuLjhh
OTVkZDIxZTYxYmI3NDA4YmUxMjY4ZDY2NmNhNDg5ZDk5YjBlZWUgMTAwNjQ0Ci0tLSBhL1NvdXJj
ZS9XZWJLaXQvV2ViUHJvY2Vzcy9XZWJQYWdlL1dlYlBhZ2UuY3BwCisrKyBiL1NvdXJjZS9XZWJL
aXQvV2ViUHJvY2Vzcy9XZWJQYWdlL1dlYlBhZ2UuY3BwCkBAIC0xMzg3LDEyICsxMzg3LDkgQEAg
UmVmPEFQSTo6QXJyYXk+IFdlYlBhZ2U6OnRyYWNrZWRSZXBhaW50UmVjdHMoKQogICAgIGlmICgh
dmlldykKICAgICAgICAgcmV0dXJuIEFQSTo6QXJyYXk6OmNyZWF0ZSgpOwogCi0gICAgVmVjdG9y
PFJlZlB0cjxBUEk6Ok9iamVjdD4+IHJlcGFpbnRSZWN0czsKLSAgICByZXBhaW50UmVjdHMucmVz
ZXJ2ZUluaXRpYWxDYXBhY2l0eSh2aWV3LT50cmFja2VkUmVwYWludFJlY3RzKCkuc2l6ZSgpKTsK
LQotICAgIGZvciAoY29uc3QgYXV0byYgcmVwYWludFJlY3QgOiB2aWV3LT50cmFja2VkUmVwYWlu
dFJlY3RzKCkpCi0gICAgICAgIHJlcGFpbnRSZWN0cy51bmNoZWNrZWRBcHBlbmQoQVBJOjpSZWN0
OjpjcmVhdGUodG9BUEkocmVwYWludFJlY3QpKSk7Ci0KKyAgICBhdXRvIHJlcGFpbnRSZWN0cyA9
IHZpZXctPnRyYWNrZWRSZXBhaW50UmVjdHMoKS5tYXAoW10oYXV0byYgcmVwYWludFJlY3QpIC0+
IFJlZlB0cjxBUEk6Ok9iamVjdD4geworICAgICAgICByZXR1cm4gQVBJOjpSZWN0OjpjcmVhdGUo
dG9BUEkocmVwYWludFJlY3QpKTsKKyAgICB9KTsKICAgICByZXR1cm4gQVBJOjpBcnJheTo6Y3Jl
YXRlKFdURk1vdmUocmVwYWludFJlY3RzKSk7CiB9CiAKQEAgLTIxMzAsMTAgKzIxMjcsNyBAQCBz
dGF0aWMgdm9pZCBkdW1wSGlzdG9yeUl0ZW0oSGlzdG9yeUl0ZW0mIGl0ZW0sIHNpemVfdCBpbmRl
bnQsIGJvb2wgaXNDdXJyZW50SXRlbQogCiAgICAgc3RyaW5nQnVpbGRlci5hcHBlbmQoJ1xuJyk7
CiAKLSAgICBWZWN0b3I8UmVmPEhpc3RvcnlJdGVtPj4gY2hpbGRyZW47Ci0gICAgY2hpbGRyZW4u
cmVzZXJ2ZUluaXRpYWxDYXBhY2l0eShpdGVtLmNoaWxkcmVuKCkuc2l6ZSgpKTsKLSAgICBmb3Ig
KGF1dG8mIGNoaWxkIDogaXRlbS5jaGlsZHJlbigpKQotICAgICAgICBjaGlsZHJlbi51bmNoZWNr
ZWRBcHBlbmQoY2hpbGQuY29weVJlZigpKTsKKyAgICBhdXRvIGNoaWxkcmVuID0gaXRlbS5jaGls
ZHJlbigpOwogICAgIHN0ZDo6c3RhYmxlX3NvcnQoY2hpbGRyZW4uYmVnaW4oKSwgY2hpbGRyZW4u
ZW5kKCksIFtdIChhdXRvJiBhLCBhdXRvJiBiKSB7CiAgICAgICAgIHJldHVybiBjb2RlUG9pbnRD
b21wYXJlKGEtPnRhcmdldCgpLCBiLT50YXJnZXQoKSkgPCAwOwogICAgIH0pOwo=
</data>
<flag name="commit-queue"
          id="479304"
          type_id="3"
          status="-"
          setter="ews-feeder"
    />
          </attachment>
          <attachment
              isobsolete="0"
              ispatch="1"
              isprivate="0"
          >
            <attachid>452305</attachid>
            <date>2022-02-16 21:09:51 -0800</date>
            <delta_ts>2022-02-21 14:44:37 -0800</delta_ts>
            <desc>Patch</desc>
            <filename>bug-236748-20220216210950.patch</filename>
            <type>text/plain</type>
            <size>221168</size>
            <attacher name="Chris Dumez">cdumez</attacher>
            
              <data encoding="base64">U3VidmVyc2lvbiBSZXZpc2lvbjogMjg5OTQyCmRpZmYgLS1naXQgYS9Tb3VyY2UvSmF2YVNjcmlw
dENvcmUvQ2hhbmdlTG9nIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL0NoYW5nZUxvZwppbmRleCA0
OWNjYjA4N2ZhNWExNDg1MDNiNjZiNDQzOTEyMDNkOTVmMzFlMWQzLi4zZGZmZWU1M2RmZGNhZTM4
MDczYWVmODU3MmI1NzU4YTE0ZjE0MzFkIDEwMDY0NAotLS0gYS9Tb3VyY2UvSmF2YVNjcmlwdENv
cmUvQ2hhbmdlTG9nCisrKyBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9DaGFuZ2VMb2cKQEAgLTEs
MyArMSw0NiBAQAorMjAyMi0wMi0xNiAgQ2hyaXMgRHVtZXogIDxjZHVtZXpAYXBwbGUuY29tPgor
CisgICAgICAgIENsZWFuIHVwIC8gb3B0aW1pemUgY2FsbCBzaXRlcyBjb25zdHJ1Y3RpbmcgdmVj
dG9ycworICAgICAgICBodHRwczovL2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9MjM2
NzQ4CisKKyAgICAgICAgUmV2aWV3ZWQgYnkgTk9CT0RZIChPT1BTISkuCisKKyAgICAgICAgQ2xl
YW4gdXAgLyBvcHRpbWl6ZSBjYWxsIHNpdGVzIGNvbnN0cnVjdGluZyB2ZWN0b3JzOgorICAgICAg
ICAtIFVzZSBWZWN0b3I6Om1hcCgpIC8gV1RGOjptYXAoKSB3aGVyZSBhcHByb3ByaWF0ZQorICAg
ICAgICAtIFJlcGxhY2UgVmVjdG9yOjpyZXNlcnZlQ2FwYWNpdHkoKSB3aXRoIFZlY3Rvcjo6cmVz
ZXJ2ZUluaXRpYWxDYXBhY2l0eSgpCisgICAgICAgICAgd2hlcmUgYXBwcm9wcmlhdGUKKyAgICAg
ICAgLSBSZXBsYWNlIFZlY3Rvcjo6YXBwZW5kKCkgd2l0aCBWZWN0b3I6OnVuY2hlY2tlZEFwcGVu
ZCgpIHdoZXJlIGFwcHJvcHJpYXRlCisgICAgICAgIC0gTGV2ZXJhZ2UgdGhlIGZhY3QgdGhhdCBW
ZWN0b3I8UmVmPEZvbz4+IGlzIG5vdyBjb3B5YWJsZSAoQmVjYXVzZSBSZWY8PiBub3cgaGFzCisg
ICAgICAgICAgYSBjb3B5IGNvbnN0cnVjdG9yKQorICAgICAgICAtIENhbGwgY3Jvc3NUaHJlYWRD
b3B5KCkgdG8gaXNvbGF0ZS1jb3B5IGEgVmVjdG9yKCkgd2l0aG91dCBpdGVyYXRpbmcuCisgICAg
ICAgIC0gTGV2ZXJhZ2UgVmVjdG9yIGNvbnN0cnVjdG9yIHRoYXQgdGFrZXMgaW4gYW4gaW50aWFs
aXphdGlvbiBsaXN0IGluIG1vcmUgY2FzZXMKKyAgICAgICAgLSBMZXZlcmFnZSBWZWN0b3I6OmZy
b20oKSBpbiBtb3JlIGNhc2VzIHRvIHNpbXBsaWZ5IHZlY3RvciBjb25zdHJ1Y3Rpb24gaW4gc29t
ZQorICAgICAgICAgIGNhc2UuCisgICAgICAgIC0gRHJvcCB1bm5lY2Vzc2FyeSBjYWxscyB0byBW
ZWN0b3I6OnJlc2VydmUqQ2FwYWNpdHkoKSBiZWZvcmUgY2FsbGluZworICAgICAgICAgIFZlY3Rv
cjo6YXBwZW5kKFQqLCBzaXplX3QpIHNpbmNlIHRoZSBhcHBlbmQoKSBpbXBsZW1lbnRhdGlvbiBh
bHJlYWR5IGRvZXMgdGhpcworICAgICAgICAgIGZvciB1cy4KKyAgICAgICAgLSBMZXZlcmFnZSBj
b3B5VG9WZWN0b3IoKSBhbmQgY29weVRvVmVjdG9yT2Y8PiBpbiBtb3JlIGNhc2VzCisgICAgICAg
IC0gQ2FsbCBzaHJpbmtUb0ZpdCgpIGluIHNvbWUgY2FzZXMgd2hlcmUgd2UgcmVzZXJ2ZSBjYXBh
Y2l0eSBhbmQgdGhlbiBhcHBlbmQoKQorICAgICAgICAgIGJ1dCBtYXkgbm90IGFwcGVuZCgpIGFz
IG11Y2ggYXMgd2UgcmVzZXJ2ZWQuCisKKyAgICAgICAgKiBiMy9haXIvQWlyQ29kZS5jcHA6Cisg
ICAgICAgIChKU0M6OkIzOjpBaXI6OkNvZGU6OnNldE51bUVudHJ5cG9pbnRzKToKKyAgICAgICAg
KiBieXRlY29tcGlsZXIvTm9kZXNDb2RlZ2VuLmNwcDoKKyAgICAgICAgKEpTQzo6QXJyYXlQYXR0
ZXJuTm9kZTo6ZW1pdERpcmVjdEJpbmRpbmcpOgorICAgICAgICAqIGRmZy9ERkdJblBsYWNlQWJz
dHJhY3RTdGF0ZS5jcHA6CisgICAgICAgIChKU0M6OkRGRzo6c2V0TGl2ZVZhbHVlcyk6CisgICAg
ICAgICogZGZnL0RGR0xpdmVuZXNzQW5hbHlzaXNQaGFzZS5jcHA6CisgICAgICAgICogZGZnL0RG
R1Njb3JlQm9hcmQuaDoKKyAgICAgICAgKEpTQzo6REZHOjpTY29yZUJvYXJkOjpTY29yZUJvYXJk
KToKKyAgICAgICAgKiBpbnNwZWN0b3IvYWdlbnRzL0luc3BlY3RvckRlYnVnZ2VyQWdlbnQuY3Bw
OgorICAgICAgICAoSW5zcGVjdG9yOjpwYXJzZUJyZWFrcG9pbnRPcHRpb25zKToKKyAgICAgICAg
KiBpbnNwZWN0b3IvcmVtb3RlL3NvY2tldC9SZW1vdGVJbnNwZWN0b3JNZXNzYWdlUGFyc2VyLmNw
cDoKKyAgICAgICAgKEluc3BlY3Rvcjo6TWVzc2FnZVBhcnNlcjo6cHVzaFJlY2VpdmVkRGF0YSk6
CisgICAgICAgICogcGFyc2VyL1ZhcmlhYmxlRW52aXJvbm1lbnQuY3BwOgorICAgICAgICAoSlND
OjpDb21wYWN0VERaRW52aXJvbm1lbnQ6OkNvbXBhY3RURFpFbnZpcm9ubWVudCk6CisgICAgICAg
ICogd2FzbS9XYXNtV29ya2xpc3QuY3BwOgorICAgICAgICAoSlNDOjpXYXNtOjpXb3JrbGlzdDo6
V29ya2xpc3QpOgorCiAyMDIyLTAyLTE1ICBNYXJrIExhbSAgPG1hcmsubGFtQGFwcGxlLmNvbT4K
IAogICAgICAgICBEZWZlciBUZXJtaW5hdGlvbnNFeGNlcHRpb25zIHdoaWxlIGluIG9wZXJhdGlv
bk1hdGVyaWFsaXplT2JqZWN0SW5PU1IuCmRpZmYgLS1naXQgYS9Tb3VyY2UvV1RGL0NoYW5nZUxv
ZyBiL1NvdXJjZS9XVEYvQ2hhbmdlTG9nCmluZGV4IGYyODZiOTRhZmQ3ZTJhMmFkODBkZGE1MDI0
NzliZWM3ZGU2YTA0ZjQuLjkxZGYzOGQxOWVkOTc3MzliYTI0NmFjYjcyNTdmNDYzM2I3YzZiMWQg
MTAwNjQ0Ci0tLSBhL1NvdXJjZS9XVEYvQ2hhbmdlTG9nCisrKyBiL1NvdXJjZS9XVEYvQ2hhbmdl
TG9nCkBAIC0xLDMgKzEsMzIgQEAKKzIwMjItMDItMTYgIENocmlzIER1bWV6ICA8Y2R1bWV6QGFw
cGxlLmNvbT4KKworICAgICAgICBDbGVhbiB1cCAvIG9wdGltaXplIGNhbGwgc2l0ZXMgY29uc3Ry
dWN0aW5nIHZlY3RvcnMKKyAgICAgICAgaHR0cHM6Ly9idWdzLndlYmtpdC5vcmcvc2hvd19idWcu
Y2dpP2lkPTIzNjc0OAorCisgICAgICAgIFJldmlld2VkIGJ5IE5PQk9EWSAoT09QUyEpLgorCisg
ICAgICAgIENsZWFuIHVwIC8gb3B0aW1pemUgY2FsbCBzaXRlcyBjb25zdHJ1Y3RpbmcgdmVjdG9y
czoKKyAgICAgICAgLSBVc2UgVmVjdG9yOjptYXAoKSAvIFdURjo6bWFwKCkgd2hlcmUgYXBwcm9w
cmlhdGUKKyAgICAgICAgLSBSZXBsYWNlIFZlY3Rvcjo6cmVzZXJ2ZUNhcGFjaXR5KCkgd2l0aCBW
ZWN0b3I6OnJlc2VydmVJbml0aWFsQ2FwYWNpdHkoKSAKKyAgICAgICAgICB3aGVyZSBhcHByb3By
aWF0ZQorICAgICAgICAtIFJlcGxhY2UgVmVjdG9yOjphcHBlbmQoKSB3aXRoIFZlY3Rvcjo6dW5j
aGVja2VkQXBwZW5kKCkgd2hlcmUgYXBwcm9wcmlhdGUKKyAgICAgICAgLSBMZXZlcmFnZSB0aGUg
ZmFjdCB0aGF0IFZlY3RvcjxSZWY8Rm9vPj4gaXMgbm93IGNvcHlhYmxlIChCZWNhdXNlIFJlZjw+
IG5vdyBoYXMKKyAgICAgICAgICBhIGNvcHkgY29uc3RydWN0b3IpCisgICAgICAgIC0gQ2FsbCBj
cm9zc1RocmVhZENvcHkoKSB0byBpc29sYXRlLWNvcHkgYSBWZWN0b3IoKSB3aXRob3V0IGl0ZXJh
dGluZy4KKyAgICAgICAgLSBMZXZlcmFnZSBWZWN0b3IgY29uc3RydWN0b3IgdGhhdCB0YWtlcyBp
biBhbiBpbnRpYWxpemF0aW9uIGxpc3QgaW4gbW9yZSBjYXNlcworICAgICAgICAtIExldmVyYWdl
IFZlY3Rvcjo6ZnJvbSgpIGluIG1vcmUgY2FzZXMgdG8gc2ltcGxpZnkgdmVjdG9yIGNvbnN0cnVj
dGlvbiBpbiBzb21lCisgICAgICAgICAgY2FzZS4KKyAgICAgICAgLSBEcm9wIHVubmVjZXNzYXJ5
IGNhbGxzIHRvIFZlY3Rvcjo6cmVzZXJ2ZSpDYXBhY2l0eSgpIGJlZm9yZSBjYWxsaW5nCisgICAg
ICAgICAgVmVjdG9yOjphcHBlbmQoVCosIHNpemVfdCkgc2luY2UgdGhlIGFwcGVuZCgpIGltcGxl
bWVudGF0aW9uIGFscmVhZHkgZG9lcyB0aGlzCisgICAgICAgICAgZm9yIHVzLgorICAgICAgICAt
IExldmVyYWdlIGNvcHlUb1ZlY3RvcigpIGFuZCBjb3B5VG9WZWN0b3JPZjw+IGluIG1vcmUgY2Fz
ZXMKKyAgICAgICAgLSBDYWxsIHNocmlua1RvRml0KCkgaW4gc29tZSBjYXNlcyB3aGVyZSB3ZSBy
ZXNlcnZlIGNhcGFjaXR5IGFuZCB0aGVuIGFwcGVuZCgpCisgICAgICAgICAgYnV0IG1heSBub3Qg
YXBwZW5kKCkgYXMgbXVjaCBhcyB3ZSByZXNlcnZlZC4gCisKKyAgICAgICAgKiB3dGYvTGFuZ3Vh
Z2UuY3BwOgorICAgICAgICAoV1RGOjp1c2VyUHJlZmVycmVkTGFuZ3VhZ2VzKToKKyAgICAgICAg
KFdURjo6aXNvbGF0ZWRDb3B5KTogRGVsZXRlZC4KKwogMjAyMi0wMi0xNiAgRWxpb3QgSHN1ICA8
ZWxpb3RfaHN1QGFwcGxlLmNvbT4KIAogICAgICAgICBNb3ZlIFNhZmUgQnJvd3Npbmcga25vd2xl
ZGdlIGludG8gU2FmYXJpU2FmZUJyb3dzaW5nIGZyYW1ld29yawpkaWZmIC0tZ2l0IGEvU291cmNl
L1dlYkNvcmUvQ2hhbmdlTG9nIGIvU291cmNlL1dlYkNvcmUvQ2hhbmdlTG9nCmluZGV4IDM5NjQw
ZmI3YjIxYjdkZDY0NTZkODY4YmQ1OTdkMDljYTkxYTljM2YuLmUzOTBmNzdmNTJlNzhhMjVhYWI4
MGZmMTgzZmEzYjlkMmQ3MjNmNGEgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL0NoYW5nZUxv
ZworKysgYi9Tb3VyY2UvV2ViQ29yZS9DaGFuZ2VMb2cKQEAgLTEsMyArMSwyNzYgQEAKKzIwMjIt
MDItMTYgIENocmlzIER1bWV6ICA8Y2R1bWV6QGFwcGxlLmNvbT4KKworICAgICAgICBDbGVhbiB1
cCAvIG9wdGltaXplIGNhbGwgc2l0ZXMgY29uc3RydWN0aW5nIHZlY3RvcnMKKyAgICAgICAgaHR0
cHM6Ly9idWdzLndlYmtpdC5vcmcvc2hvd19idWcuY2dpP2lkPTIzNjc0OAorCisgICAgICAgIFJl
dmlld2VkIGJ5IE5PQk9EWSAoT09QUyEpLgorCisgICAgICAgIENsZWFuIHVwIC8gb3B0aW1pemUg
Y2FsbCBzaXRlcyBjb25zdHJ1Y3RpbmcgdmVjdG9yczoKKyAgICAgICAgLSBVc2UgVmVjdG9yOjpt
YXAoKSAvIFdURjo6bWFwKCkgd2hlcmUgYXBwcm9wcmlhdGUKKyAgICAgICAgLSBSZXBsYWNlIFZl
Y3Rvcjo6cmVzZXJ2ZUNhcGFjaXR5KCkgd2l0aCBWZWN0b3I6OnJlc2VydmVJbml0aWFsQ2FwYWNp
dHkoKSAKKyAgICAgICAgICB3aGVyZSBhcHByb3ByaWF0ZQorICAgICAgICAtIFJlcGxhY2UgVmVj
dG9yOjphcHBlbmQoKSB3aXRoIFZlY3Rvcjo6dW5jaGVja2VkQXBwZW5kKCkgd2hlcmUgYXBwcm9w
cmlhdGUKKyAgICAgICAgLSBMZXZlcmFnZSB0aGUgZmFjdCB0aGF0IFZlY3RvcjxSZWY8Rm9vPj4g
aXMgbm93IGNvcHlhYmxlIChCZWNhdXNlIFJlZjw+IG5vdyBoYXMKKyAgICAgICAgICBhIGNvcHkg
Y29uc3RydWN0b3IpCisgICAgICAgIC0gQ2FsbCBjcm9zc1RocmVhZENvcHkoKSB0byBpc29sYXRl
LWNvcHkgYSBWZWN0b3IoKSB3aXRob3V0IGl0ZXJhdGluZy4KKyAgICAgICAgLSBMZXZlcmFnZSBW
ZWN0b3IgY29uc3RydWN0b3IgdGhhdCB0YWtlcyBpbiBhbiBpbnRpYWxpemF0aW9uIGxpc3QgaW4g
bW9yZSBjYXNlcworICAgICAgICAtIExldmVyYWdlIFZlY3Rvcjo6ZnJvbSgpIGluIG1vcmUgY2Fz
ZXMgdG8gc2ltcGxpZnkgdmVjdG9yIGNvbnN0cnVjdGlvbiBpbiBzb21lCisgICAgICAgICAgY2Fz
ZS4KKyAgICAgICAgLSBEcm9wIHVubmVjZXNzYXJ5IGNhbGxzIHRvIFZlY3Rvcjo6cmVzZXJ2ZSpD
YXBhY2l0eSgpIGJlZm9yZSBjYWxsaW5nCisgICAgICAgICAgVmVjdG9yOjphcHBlbmQoVCosIHNp
emVfdCkgc2luY2UgdGhlIGFwcGVuZCgpIGltcGxlbWVudGF0aW9uIGFscmVhZHkgZG9lcyB0aGlz
CisgICAgICAgICAgZm9yIHVzLgorICAgICAgICAtIExldmVyYWdlIGNvcHlUb1ZlY3RvcigpIGFu
ZCBjb3B5VG9WZWN0b3JPZjw+IGluIG1vcmUgY2FzZXMKKyAgICAgICAgLSBDYWxsIHNocmlua1Rv
Rml0KCkgaW4gc29tZSBjYXNlcyB3aGVyZSB3ZSByZXNlcnZlIGNhcGFjaXR5IGFuZCB0aGVuIGFw
cGVuZCgpCisgICAgICAgICAgYnV0IG1heSBub3QgYXBwZW5kKCkgYXMgbXVjaCBhcyB3ZSByZXNl
cnZlZC4gCisKKyAgICAgICAgKiBNb2R1bGVzL2FzeW5jLWNsaXBib2FyZC9DbGlwYm9hcmQuY3Bw
OgorICAgICAgICAoV2ViQ29yZTo6Q2xpcGJvYXJkOjpyZWFkKToKKyAgICAgICAgKFdlYkNvcmU6
OkNsaXBib2FyZDo6SXRlbVdyaXRlcjo6ZGlkU2V0QWxsRGF0YSk6CisgICAgICAgICogTW9kdWxl
cy9lbmNyeXB0ZWRtZWRpYS9NZWRpYUtleVNlc3Npb24uY3BwOgorICAgICAgICAoV2ViQ29yZTo6
TWVkaWFLZXlTZXNzaW9uOjp1cGRhdGVLZXlTdGF0dXNlcyk6CisgICAgICAgICogTW9kdWxlcy9l
bnRyaWVzYXBpL0ZpbGVTeXN0ZW1FbnRyaWVzQ2FsbGJhY2suY3BwOgorICAgICAgICAoV2ViQ29y
ZTo6RmlsZVN5c3RlbUVudHJpZXNDYWxsYmFjazo6c2NoZWR1bGVDYWxsYmFjayk6CisgICAgICAg
IChXZWJDb3JlOjpjb3B5VmVjdG9yKTogRGVsZXRlZC4KKyAgICAgICAgKiBNb2R1bGVzL2VudHJp
ZXNhcGkvSFRNTElucHV0RWxlbWVudEVudHJpZXNBUEkuY3BwOgorICAgICAgICAoV2ViQ29yZTo6
SFRNTElucHV0RWxlbWVudEVudHJpZXNBUEk6OndlYmtpdEVudHJpZXMpOgorICAgICAgICAqIE1v
ZHVsZXMvZ2VvbG9jYXRpb24vR2VvbG9jYXRpb25Db250cm9sbGVyLmNwcDoKKyAgICAgICAgKFdl
YkNvcmU6Okdlb2xvY2F0aW9uQ29udHJvbGxlcjo6cG9zaXRpb25DaGFuZ2VkKToKKyAgICAgICAg
KFdlYkNvcmU6Okdlb2xvY2F0aW9uQ29udHJvbGxlcjo6ZXJyb3JPY2N1cnJlZCk6CisgICAgICAg
ICogTW9kdWxlcy9pbmRleGVkZGIvSURCRGF0YWJhc2UuY3BwOgorICAgICAgICAoV2ViQ29yZTo6
SURCRGF0YWJhc2U6OnN0b3ApOgorICAgICAgICAqIE1vZHVsZXMvaW5kZXhlZGRiL0lEQkdldEFs
bFJlc3VsdC5jcHA6CisgICAgICAgIChXZWJDb3JlOjpJREJHZXRBbGxSZXN1bHQ6Omlzb2xhdGVk
Q29weSk6CisgICAgICAgICogTW9kdWxlcy9pbmRleGVkZGIvSURCR2V0UmVzdWx0LmNwcDoKKyAg
ICAgICAgKFdlYkNvcmU6OklEQkdldFJlc3VsdDo6aXNvbGF0ZWRDb3B5KToKKyAgICAgICAgKiBN
b2R1bGVzL2luZGV4ZWRkYi9JREJLZXlQYXRoLmNwcDoKKyAgICAgICAgKFdlYkNvcmU6Omlzb2xh
dGVkQ29weSk6IERlbGV0ZWQuCisgICAgICAgICogTW9kdWxlcy9pbmRleGVkZGIvSURCS2V5UGF0
aC5oOgorICAgICAgICAoV2ViQ29yZTo6aXNvbGF0ZWRDb3B5KTogRGVsZXRlZC4KKyAgICAgICAg
KiBNb2R1bGVzL2luZGV4ZWRkYi9JREJUcmFuc2FjdGlvbi5jcHA6CisgICAgICAgIChXZWJDb3Jl
OjpJREJUcmFuc2FjdGlvbjo6YWJvcnRJblByb2dyZXNzT3BlcmF0aW9ucyk6CisgICAgICAgICog
TW9kdWxlcy9pbmRleGVkZGIvY2xpZW50L0lEQkNvbm5lY3Rpb25Qcm94eS5jcHA6CisgICAgICAg
IChXZWJDb3JlOjpJREJDbGllbnQ6OnJlbW92ZUl0ZW1zTWF0Y2hpbmdDdXJyZW50VGhyZWFkKToK
KyAgICAgICAgKiBNb2R1bGVzL2luZGV4ZWRkYi9zZXJ2ZXIvTWVtb3J5T2JqZWN0U3RvcmUuY3Bw
OgorICAgICAgICAoV2ViQ29yZTo6SURCU2VydmVyOjpNZW1vcnlPYmplY3RTdG9yZTo6ZGVsZXRl
QWxsSW5kZXhlcyk6CisgICAgICAgICogTW9kdWxlcy9pbmRleGVkZGIvc2VydmVyL1NRTGl0ZUlE
QkN1cnNvci5jcHA6CisgICAgICAgIChXZWJDb3JlOjpJREJTZXJ2ZXI6OlNRTGl0ZUlEQkN1cnNv
cjo6Y3VycmVudERhdGEpOgorICAgICAgICAqIE1vZHVsZXMvaW5kZXhlZGRiL3NoYXJlZC9JREJE
YXRhYmFzZUluZm8uY3BwOgorICAgICAgICAoV2ViQ29yZTo6SURCRGF0YWJhc2VJbmZvOjpvYmpl
Y3RTdG9yZU5hbWVzIGNvbnN0KToKKyAgICAgICAgKiBNb2R1bGVzL2luZGV4ZWRkYi9zaGFyZWQv
SURCSW5kZXhJbmZvLmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OklEQkluZGV4SW5mbzo6aXNvbGF0
ZWRDb3B5IGNvbnN0KToKKyAgICAgICAgKiBNb2R1bGVzL2luZGV4ZWRkYi9zaGFyZWQvSURCT2Jq
ZWN0U3RvcmVJbmZvLmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OklEQk9iamVjdFN0b3JlSW5mbzo6
aXNvbGF0ZWRDb3B5IGNvbnN0KToKKyAgICAgICAgKFdlYkNvcmU6OklEQk9iamVjdFN0b3JlSW5m
bzo6aW5kZXhOYW1lcyBjb25zdCk6CisgICAgICAgICogTW9kdWxlcy9pbmRleGVkZGIvc2hhcmVk
L0lEQlRyYW5zYWN0aW9uSW5mby5jcHA6CisgICAgICAgIChXZWJDb3JlOjpJREJUcmFuc2FjdGlv
bkluZm86Omlzb2xhdGVkQ29weSk6CisgICAgICAgICogTW9kdWxlcy9pbmRleGVkZGIvc2hhcmVk
L0luZGV4S2V5LmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OkluZGV4S2V5Ojppc29sYXRlZENvcHkg
Y29uc3QpOgorICAgICAgICAqIE1vZHVsZXMvbWVkaWFzdHJlYW0vTWVkaWFTdHJlYW0uY3BwOgor
ICAgICAgICAoV2ViQ29yZTo6TWVkaWFTdHJlYW06OmNsb25lKToKKyAgICAgICAgKiBNb2R1bGVz
L21lZGlhc3RyZWFtL01lZGlhU3RyZWFtVHJhY2suY3BwOgorICAgICAgICAoV2ViQ29yZTo6Y2Fw
YWJpbGl0eVN0cmluZ1ZlY3Rvcik6CisgICAgICAgICogTW9kdWxlcy9tZWRpYXN0cmVhbS9NZWRp
YVRyYWNrQ29uc3RyYWludHMuY3BwOgorICAgICAgICAoV2ViQ29yZTo6Y29udmVydEFkdmFuY2Vk
VG9JbnRlcm5hbEZvcm0pOgorICAgICAgICAqIE1vZHVsZXMvbWVkaWFzdHJlYW0vU0ZyYW1lVXRp
bHMuY3BwOgorICAgICAgICAoV2ViQ29yZTo6dG9SYnNwKToKKyAgICAgICAgKiBNb2R1bGVzL3Jl
bW90ZXBsYXliYWNrL1JlbW90ZVBsYXliYWNrLmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OlJlbW90
ZVBsYXliYWNrOjphdmFpbGFiaWxpdHlDaGFuZ2VkKToKKyAgICAgICAgKiBNb2R1bGVzL3NwZWVj
aC9TcGVlY2hSZWNvZ25pdGlvbi5jcHA6CisgICAgICAgIChXZWJDb3JlOjpTcGVlY2hSZWNvZ25p
dGlvbjo6ZGlkUmVjZWl2ZVJlc3VsdCk6CisgICAgICAgICogTW9kdWxlcy93ZWJhdXRobi9jYm9y
L0NCT1JWYWx1ZS5jcHA6CisgICAgICAgIChjYm9yOjpDQk9SVmFsdWU6OkNCT1JWYWx1ZSk6Cisg
ICAgICAgICogTW9kdWxlcy93ZWJhdXRobi9maWRvL0F1dGhlbnRpY2F0b3JHZXRJbmZvUmVzcG9u
c2UuY3BwOgorICAgICAgICAoZmlkbzo6dG9BcnJheVZhbHVlKToKKyAgICAgICAgKiBNb2R1bGVz
L3dlYmF1dGhuL2ZpZG8vRGV2aWNlUmVxdWVzdENvbnZlcnRlci5jcHA6CisgICAgICAgIChmaWRv
Ojpjb252ZXJ0UGFyYW1ldGVyc1RvQ0JPUik6CisgICAgICAgICogTW9kdWxlcy93ZWJhdXRobi9m
aWRvL1Bpbi5jcHA6CisgICAgICAgIChmaWRvOjpwaW46OmVuY29kZVJhd1B1YmxpY0tleSk6Cisg
ICAgICAgICogTW9kdWxlcy93ZWJkYXRhYmFzZS9EYXRhYmFzZVRyYWNrZXIuY3BwOgorICAgICAg
ICAoV2ViQ29yZTo6RGF0YWJhc2VUcmFja2VyOjpkYXRhYmFzZU5hbWVzKToKKyAgICAgICAgKFdl
YkNvcmU6Omlzb2xhdGVkQ29weSk6IERlbGV0ZWQuCisgICAgICAgICogYWNjZXNzaWJpbGl0eS9B
WE9iamVjdENhY2hlLmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OkFYT2JqZWN0Q2FjaGU6Om5vdGlm
aWNhdGlvblBvc3RUaW1lckZpcmVkKToKKyAgICAgICAgKiBhY2Nlc3NpYmlsaXR5L2lzb2xhdGVk
dHJlZS9BWElzb2xhdGVkT2JqZWN0LmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OkFYSXNvbGF0ZWRP
YmplY3Q6OnNldE1hdGhzY3JpcHRzKToKKyAgICAgICAgKFdlYkNvcmU6OkFYSXNvbGF0ZWRPYmpl
Y3Q6OnNldE9iamVjdFZlY3RvclByb3BlcnR5KToKKyAgICAgICAgKiBhY2Nlc3NpYmlsaXR5L2lz
b2xhdGVkdHJlZS9BWElzb2xhdGVkVHJlZS5jcHA6CisgICAgICAgIChXZWJDb3JlOjpBWElzb2xh
dGVkVHJlZTo6b2JqZWN0c0ZvcklEcyBjb25zdCk6CisgICAgICAgIChXZWJDb3JlOjpBWElzb2xh
dGVkVHJlZTo6Y29sbGVjdE5vZGVDaGFuZ2VzRm9yU3VidHJlZSk6CisgICAgICAgICogYW5pbWF0
aW9uL0NTU1Byb3BlcnR5QW5pbWF0aW9uLmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OkNTU1Byb3Bl
cnR5QW5pbWF0aW9uV3JhcHBlck1hcDo6Q1NTUHJvcGVydHlBbmltYXRpb25XcmFwcGVyTWFwKToK
KyAgICAgICAgKiBiaW5kaW5ncy9qcy9TZXJpYWxpemVkU2NyaXB0VmFsdWUuY3BwOgorICAgICAg
ICAoV2ViQ29yZTo6Q2xvbmVEZXNlcmlhbGl6ZXI6OnJlYWRTdHJpbmcpOgorICAgICAgICAoV2Vi
Q29yZTo6U2VyaWFsaXplZFNjcmlwdFZhbHVlOjpibG9iVVJMcyBjb25zdCk6CisgICAgICAgICog
Y3J5cHRvL21hYy9DcnlwdG9BbGdvcml0aG1FQ0RTQU1hYy5jcHA6CisgICAgICAgIChXZWJDb3Jl
OjpzaWduRUNEU0EpOgorICAgICAgICAoV2ViQ29yZTo6dmVyaWZ5RUNEU0EpOgorICAgICAgICAq
IGNyeXB0by9tYWMvQ3J5cHRvS2V5RUNNYWMuY3BwOgorICAgICAgICAoV2ViQ29yZTo6Q3J5cHRv
S2V5RUM6OnBsYXRmb3JtRXhwb3J0U3BraSBjb25zdCk6CisgICAgICAgIChXZWJDb3JlOjpDcnlw
dG9LZXlFQzo6cGxhdGZvcm1FeHBvcnRQa2NzOCBjb25zdCk6CisgICAgICAgICogY3J5cHRvL21h
Yy9DcnlwdG9LZXlSU0FNYWMuY3BwOgorICAgICAgICAoV2ViQ29yZTo6Q3J5cHRvS2V5UlNBOjpl
eHBvcnRTcGtpIGNvbnN0KToKKyAgICAgICAgKFdlYkNvcmU6OkNyeXB0b0tleVJTQTo6ZXhwb3J0
UGtjczggY29uc3QpOgorICAgICAgICAqIGNzcy9DU1NCYXNpY1NoYXBlcy5jcHA6CisgICAgICAg
IChXZWJDb3JlOjpDU1NCYXNpY1NoYXBlUG9seWdvbjo6Y3NzVGV4dCBjb25zdCk6CisgICAgICAg
ICogY3NzL0NTU0NvbXB1dGVkU3R5bGVEZWNsYXJhdGlvbi5jcHA6CisgICAgICAgIChXZWJDb3Jl
OjpDb21wdXRlZFN0eWxlRXh0cmFjdG9yOjpjb3B5UHJvcGVydGllc0luU2V0KToKKyAgICAgICAg
KFdlYkNvcmU6OkNvbXB1dGVkU3R5bGVFeHRyYWN0b3I6OmNvcHlQcm9wZXJ0aWVzKToKKyAgICAg
ICAgKiBjc3MvQ1NTRm9udEZhY2UuY3BwOgorICAgICAgICAoV2ViQ29yZTo6aXRlcmF0ZUNsaWVu
dHMpOgorICAgICAgICAqIGNzcy9DU1NGb250RmFjZVNldC5jcHA6CisgICAgICAgIChXZWJDb3Jl
OjpDU1NGb250RmFjZVNldDo6bWF0Y2hpbmdGYWNlc0V4Y2x1ZGluZ1ByZWluc3RhbGxlZEZvbnRz
KToKKyAgICAgICAgKFdlYkNvcmU6OkNTU0ZvbnRGYWNlU2V0Ojpmb250RmFjZSk6CisgICAgICAg
ICogY3NzL0NTU0tleWZyYW1lc1J1bGUuY3BwOgorICAgICAgICAoV2ViQ29yZTo6U3R5bGVSdWxl
S2V5ZnJhbWVzOjpTdHlsZVJ1bGVLZXlmcmFtZXMpOgorICAgICAgICAqIGNzcy9TdHlsZVByb3Bl
cnRpZXMuY3BwOgorICAgICAgICAoV2ViQ29yZTo6U3R5bGVQcm9wZXJ0aWVzOjpjb3B5UHJvcGVy
dGllc0luU2V0IGNvbnN0KToKKyAgICAgICAgKFdlYkNvcmU6OkRlZmVycmVkU3R5bGVQcm9wZXJ0
aWVzOjpEZWZlcnJlZFN0eWxlUHJvcGVydGllcyk6CisgICAgICAgICogY3NzL1N0eWxlUnVsZS5j
cHA6CisgICAgICAgIChXZWJDb3JlOjpEZWZlcnJlZFN0eWxlR3JvdXBSdWxlTGlzdDo6RGVmZXJy
ZWRTdHlsZUdyb3VwUnVsZUxpc3QpOgorICAgICAgICAoV2ViQ29yZTo6U3R5bGVSdWxlR3JvdXA6
OlN0eWxlUnVsZUdyb3VwKToKKyAgICAgICAgKiBjc3MvY2FsYy9DU1NDYWxjT3BlcmF0aW9uTm9k
ZS5oOgorICAgICAgICAqIGNzcy9jYWxjL0NTU0NhbGNWYWx1ZS5jcHA6CisgICAgICAgIChXZWJD
b3JlOjpjcmVhdGVDU1MpOgorICAgICAgICAqIGRpc3BsYXkvY3NzL0Rpc3BsYXlCb3hEZWNvcmF0
aW9uUGFpbnRlci5jcHA6CisgICAgICAgIChXZWJDb3JlOjpEaXNwbGF5OjpCb3JkZXJQYWludGVy
OjpjbGlwQm9yZGVyU2lkZVBvbHlnb24gY29uc3QpOgorICAgICAgICAoV2ViQ29yZTo6RGlzcGxh
eTo6Qm9yZGVyUGFpbnRlcjo6ZHJhd0xpbmVGb3JCb3hTaWRlIGNvbnN0KToKKyAgICAgICAgKiBk
b20vRE9NUmVjdExpc3QuY3BwOgorICAgICAgICAoV2ViQ29yZTo6RE9NUmVjdExpc3Q6OkRPTVJl
Y3RMaXN0KToKKyAgICAgICAgKiBkb20vRG9jdW1lbnQuY3BwOgorICAgICAgICAoV2ViQ29yZTo6
RG9jdW1lbnQ6OnVwZGF0ZUVsZW1lbnRzQWZmZWN0ZWRCeU1lZGlhUXVlcmllcyk6CisgICAgICAg
IChXZWJDb3JlOjpEb2N1bWVudDo6ZGlkQXNzb2NpYXRlRm9ybUNvbnRyb2xzVGltZXJGaXJlZCk6
CisgICAgICAgICogZG9tL0VsZW1lbnREYXRhLmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OlVuaXF1
ZUVsZW1lbnREYXRhOjpVbmlxdWVFbGVtZW50RGF0YSk6CisgICAgICAgICogZG9tL0V2ZW50TGlz
dGVuZXJNYXAuY3BwOgorICAgICAgICAoV2ViQ29yZTo6RXZlbnRMaXN0ZW5lck1hcDo6ZXZlbnRU
eXBlcyBjb25zdCk6CisgICAgICAgICogZG9tL1RyZWVTY29wZU9yZGVyZWRNYXAuY3BwOgorICAg
ICAgICAoV2ViQ29yZTo6VHJlZVNjb3BlT3JkZXJlZE1hcDo6a2V5cyBjb25zdCk6CisgICAgICAg
ICogZWRpdGluZy9Db21wb3NpdGVFZGl0Q29tbWFuZC5jcHA6CisgICAgICAgIChXZWJDb3JlOjpj
b3B5TWFya2Vycyk6CisgICAgICAgICogZWRpdGluZy9FZGl0b3IuY3BwOgorICAgICAgICAoV2Vi
Q29yZTo6ZWRpdGFibGVUZXh0TGlzdHNBdFBvc2l0aW9uSW5EZXNjZW5kaW5nT3JkZXIpOgorICAg
ICAgICAqIGZpbGVhcGkvRmlsZUxpc3QuY3BwOgorICAgICAgICAoV2ViQ29yZTo6RmlsZUxpc3Q6
OnBhdGhzIGNvbnN0KToKKyAgICAgICAgKiBoaXN0b3J5L0hpc3RvcnlJdGVtLmNwcDoKKyAgICAg
ICAgKFdlYkNvcmU6Okhpc3RvcnlJdGVtOjpIaXN0b3J5SXRlbSk6CisgICAgICAgIChXZWJDb3Jl
OjptX2Zvcm1EYXRhKToKKyAgICAgICAgKFdlYkNvcmU6Om1faWRlbnRpZmllcik6CisgICAgICAg
ICogaHRtbC9GaWxlSW5wdXRUeXBlLmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OkZpbGVJbnB1dFR5
cGU6OnNldEZpbGVzKToKKyAgICAgICAgKFdlYkNvcmU6OkZpbGVJbnB1dFR5cGU6OmZpbGVzQ2hv
c2VuKToKKyAgICAgICAgKiBodG1sL0xpbmtJY29uQ29sbGVjdG9yLmNwcDoKKyAgICAgICAgKFdl
YkNvcmU6OkxpbmtJY29uQ29sbGVjdG9yOjppY29uc09mVHlwZXMpOgorICAgICAgICAqIGh0bWwv
VVJMU2VhcmNoUGFyYW1zLmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OlVSTFNlYXJjaFBhcmFtczo6
Z2V0QWxsIGNvbnN0KToKKyAgICAgICAgKiBsYXlvdXQvZm9ybWF0dGluZ0NvbnRleHRzL2lubGlu
ZS9JbmxpbmVMaW5lQnVpbGRlci5jcHA6CisgICAgICAgIChXZWJDb3JlOjpMYXlvdXQ6OkxpbmVC
dWlsZGVyOjpsYXlvdXRJbmxpbmVDb250ZW50KToKKyAgICAgICAgKiBsb2FkZXIvRG9jdW1lbnRM
b2FkZXIuY3BwOgorICAgICAgICAoV2ViQ29yZTo6RG9jdW1lbnRMb2FkZXI6OnN0YXJ0SWNvbkxv
YWRpbmcpOgorICAgICAgICAoV2ViQ29yZTo6RG9jdW1lbnRMb2FkZXI6OnNldEFjdGl2ZUNvbnRl
bnRSdWxlTGlzdEFjdGlvblBhdHRlcm5zKToKKyAgICAgICAgKiBsb2FkZXIvVGV4dFRyYWNrTG9h
ZGVyLmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OlRleHRUcmFja0xvYWRlcjo6Z2V0TmV3Q3Vlcyk6
CisgICAgICAgICogbG9hZGVyL2FyY2hpdmUvY2YvTGVnYWN5V2ViQXJjaGl2ZS5jcHA6CisgICAg
ICAgIChXZWJDb3JlOjpMZWdhY3lXZWJBcmNoaXZlOjpjcmVhdGVGcm9tU2VsZWN0aW9uKToKKyAg
ICAgICAgKiBwYWdlL0NhcHRpb25Vc2VyUHJlZmVyZW5jZXNNZWRpYUFGLmNwcDoKKyAgICAgICAg
KFdlYkNvcmU6OkNhcHRpb25Vc2VyUHJlZmVyZW5jZXNNZWRpYUFGOjpwcmVmZXJyZWRBdWRpb0No
YXJhY3RlcmlzdGljcyBjb25zdCk6CisgICAgICAgICogcGFnZS9ET01XaW5kb3cuY3BwOgorICAg
ICAgICAoV2ViQ29yZTo6RE9NV2luZG93OjpkaXNwYXRjaEFsbFBlbmRpbmdCZWZvcmVVbmxvYWRF
dmVudHMpOgorICAgICAgICAqIHBhZ2UvSW50ZXJzZWN0aW9uT2JzZXJ2ZXIuY3BwOgorICAgICAg
ICAoV2ViQ29yZTo6SW50ZXJzZWN0aW9uT2JzZXJ2ZXI6OmNyZWF0ZSk6CisgICAgICAgICogcGFn
ZS9QYWdlLmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OlBhZ2U6OnJlcGxhY2VSYW5nZXNXaXRoVGV4
dCk6CisgICAgICAgICogcGFnZS9jc3AvQ29udGVudFNlY3VyaXR5UG9saWN5LmNwcDoKKyAgICAg
ICAgKFdlYkNvcmU6OkNvbnRlbnRTZWN1cml0eVBvbGljeTo6cmVzcG9uc2VIZWFkZXJzIGNvbnN0
KToKKyAgICAgICAgKiBwYWdlL2NzcC9Db250ZW50U2VjdXJpdHlQb2xpY3lSZXNwb25zZUhlYWRl
cnMuY3BwOgorICAgICAgICAoV2ViQ29yZTo6Q29udGVudFNlY3VyaXR5UG9saWN5UmVzcG9uc2VI
ZWFkZXJzOjppc29sYXRlZENvcHkgY29uc3QpOgorICAgICAgICAqIHBhZ2UvbWFjL0ltYWdlT3Zl
cmxheUNvbnRyb2xsZXJNYWMubW06CisgICAgICAgIChXZWJDb3JlOjpJbWFnZU92ZXJsYXlDb250
cm9sbGVyOjp1cGRhdGVEYXRhRGV0ZWN0b3JIaWdobGlnaHRzKToKKyAgICAgICAgKiBwYWdlL21h
Yy9TZXJ2aWNlc092ZXJsYXlDb250cm9sbGVyLm1tOgorICAgICAgICAoV2ViQ29yZTo6U2Vydmlj
ZXNPdmVybGF5Q29udHJvbGxlcjo6YnVpbGRTZWxlY3Rpb25IaWdobGlnaHQpOgorICAgICAgICAo
V2ViQ29yZTo6U2VydmljZXNPdmVybGF5Q29udHJvbGxlcjo6aGFuZGxlQ2xpY2spOgorICAgICAg
ICAqIHBhZ2Uvc2Nyb2xsaW5nL0FzeW5jU2Nyb2xsaW5nQ29vcmRpbmF0b3IuY3BwOgorICAgICAg
ICAoV2ViQ29yZTo6QXN5bmNTY3JvbGxpbmdDb29yZGluYXRvcjo6Y2hpbGRyZW5PZk5vZGUgY29u
c3QpOgorICAgICAgICAqIHBhZ2Uvc2Nyb2xsaW5nL1Njcm9sbFNuYXBPZmZzZXRzSW5mby5jcHA6
CisgICAgICAgIChXZWJDb3JlOjpjb252ZXJ0T2Zmc2V0SW5mbyk6CisgICAgICAgICogcGxhdGZv
cm0vTGVuZ3RoLmNwcDoKKyAgICAgICAgKFdlYkNvcmU6Om1ha2VDYWxjdWxhdGVkKToKKyAgICAg
ICAgKiBwbGF0Zm9ybS9hbmltYXRpb24vQW5pbWF0aW9uTGlzdC5jcHA6CisgICAgICAgIChXZWJD
b3JlOjpBbmltYXRpb25MaXN0OjpBbmltYXRpb25MaXN0KToKKyAgICAgICAgKiBwbGF0Zm9ybS9j
b2NvYS9QbGF5YmFja1Nlc3Npb25Nb2RlbE1lZGlhRWxlbWVudC5tbToKKyAgICAgICAgKFdlYkNv
cmU6OlBsYXliYWNrU2Vzc2lvbk1vZGVsTWVkaWFFbGVtZW50OjphdWRpb01lZGlhU2VsZWN0aW9u
T3B0aW9ucyBjb25zdCk6CisgICAgICAgICogcGxhdGZvcm0vZW5jcnlwdGVkbWVkaWEvQ0RNUHJv
eHkuY3BwOgorICAgICAgICAoV2ViQ29yZTo6S2V5U3RvcmU6OmNvbnZlcnRUb0pTS2V5U3RhdHVz
VmVjdG9yIGNvbnN0KToKKyAgICAgICAgKiBwbGF0Zm9ybS9ncmFwaGljcy9GbG9hdFBvbHlnb24u
Y3BwOgorICAgICAgICAoV2ViQ29yZTo6RmxvYXRQb2x5Z29uOjpvdmVybGFwcGluZ0VkZ2VzIGNv
bnN0KToKKyAgICAgICAgKiBwbGF0Zm9ybS9ncmFwaGljcy9GbG9hdFF1YWQuY3BwOgorICAgICAg
ICAoV2ViQ29yZTo6Ym91bmRpbmdCb3hlcyk6CisgICAgICAgICogcGxhdGZvcm0vZ3JhcGhpY3Mv
YXZmb3VuZGF0aW9uL29iamMvQ0RNSW5zdGFuY2VGYWlyUGxheVN0cmVhbWluZ0FWRk9iakMubW06
CisgICAgICAgIChXZWJDb3JlOjpDRE1JbnN0YW5jZVNlc3Npb25GYWlyUGxheVN0cmVhbWluZ0FW
Rk9iakM6OnVwZGF0ZUxpY2Vuc2UpOgorICAgICAgICAqIHBsYXRmb3JtL2dyYXBoaWNzL2NhL1Rp
bGVHcmlkLmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OlRpbGVHcmlkOjpyZW1vdmVUaWxlcyk6Cisg
ICAgICAgIChXZWJDb3JlOjpUaWxlR3JpZDo6cmVtb3ZlQWxsVGlsZXMpOgorICAgICAgICAqIHBs
YXRmb3JtL2dyYXBoaWNzL2NhL1RpbGVHcmlkLmg6CisgICAgICAgICogcGxhdGZvcm0vZ3JhcGhp
Y3MvY2cvSW1hZ2VVdGlsaXRpZXNDRy5jcHA6CisgICAgICAgIChXZWJDb3JlOjpmaW5kSW1hZ2Vz
Rm9yVHJhbnNjb2RpbmcpOgorICAgICAgICAoV2ViQ29yZTo6dHJhbnNjb2RlSW1hZ2VzKToKKyAg
ICAgICAgKiBwbGF0Zm9ybS9ncmFwaGljcy9jb2NvYS9Gb250Q2FjaGVDb3JlVGV4dC5jcHA6Cisg
ICAgICAgIChXZWJDb3JlOjpmaW5kQ2xvc2VzdEZvbnQpOgorICAgICAgICAoV2ViQ29yZTo6Rm9u
dENhY2hlOjpnZXRGb250U2VsZWN0aW9uQ2FwYWJpbGl0aWVzSW5GYW1pbHkpOgorICAgICAgICAq
IHBsYXRmb3JtL21lZGlhc3RyZWFtL1JlYWx0aW1lTWVkaWFTb3VyY2UuY3BwOgorICAgICAgICAo
V2ViQ29yZTo6UmVhbHRpbWVNZWRpYVNvdXJjZTo6Zml0bmVzc0Rpc3RhbmNlKToKKyAgICAgICAg
KiBwbGF0Zm9ybS9uZXR3b3JrL0NhY2hlVmFsaWRhdGlvbi5jcHA6CisgICAgICAgIChXZWJDb3Jl
Ojpjb2xsZWN0VmFyeWluZ1JlcXVlc3RIZWFkZXJzSW50ZXJuYWwpOgorICAgICAgICAqIHBsYXRm
b3JtL25ldHdvcmsvRm9ybURhdGEuY3BwOgorICAgICAgICAoV2ViQ29yZTo6Rm9ybURhdGE6Omlz
b2xhdGVkQ29weSBjb25zdCk6CisgICAgICAgICogcGxhdGZvcm0vbmV0d29yay9Tb2NrZXRTdHJl
YW1IYW5kbGVJbXBsLmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OlNvY2tldFN0cmVhbUhhbmRsZUlt
cGw6OnBsYXRmb3JtU2VuZEhhbmRzaGFrZSk6CisgICAgICAgICogcGxhdGZvcm0vbmV0d29yay9j
b2NvYS9OZXR3b3JrU3RvcmFnZVNlc3Npb25Db2NvYS5tbToKKyAgICAgICAgKiBwbGF0Zm9ybS90
ZXh0L0xvY2FsZUlDVS5jcHA6CisgICAgICAgIChXZWJDb3JlOjpMb2NhbGVJQ1U6OmNyZWF0ZUxh
YmVsVmVjdG9yKToKKyAgICAgICAgKFdlYkNvcmU6OmNyZWF0ZUZhbGxiYWNrTW9udGhMYWJlbHMp
OgorICAgICAgICAoV2ViQ29yZTo6Y3JlYXRlRmFsbGJhY2tBTVBNTGFiZWxzKToKKyAgICAgICAg
KiBwbGF0Zm9ybS90ZXh0L0xvY2FsZU5vbmUuY3BwOgorICAgICAgICAoV2ViQ29yZTo6TG9jYWxl
Tm9uZTo6bW9udGhMYWJlbHMpOgorICAgICAgICAoV2ViQ29yZTo6TG9jYWxlTm9uZTo6c2hvcnRN
b250aExhYmVscyk6CisgICAgICAgIChXZWJDb3JlOjpMb2NhbGVOb25lOjp0aW1lQU1QTUxhYmVs
cyk6CisgICAgICAgICogcGxhdGZvcm0vdGV4dC9jb2NvYS9Mb2NhbGVDb2NvYS5tbToKKyAgICAg
ICAgKFdlYkNvcmU6OkxvY2FsZUNvY29hOjptb250aExhYmVscyk6CisgICAgICAgIChXZWJDb3Jl
OjpMb2NhbGVDb2NvYTo6c2hvcnRNb250aExhYmVscyk6CisgICAgICAgIChXZWJDb3JlOjpMb2Nh
bGVDb2NvYTo6c3RhbmRBbG9uZU1vbnRoTGFiZWxzKToKKyAgICAgICAgKFdlYkNvcmU6OkxvY2Fs
ZUNvY29hOjpzaG9ydFN0YW5kQWxvbmVNb250aExhYmVscyk6CisgICAgICAgIChXZWJDb3JlOjpM
b2NhbGVDb2NvYTo6dGltZUFNUE1MYWJlbHMpOgorICAgICAgICAqIHBsdWdpbnMvRE9NTWltZVR5
cGVBcnJheS5jcHA6CisgICAgICAgIChXZWJDb3JlOjpET01NaW1lVHlwZUFycmF5OjpzdXBwb3J0
ZWRQcm9wZXJ0eU5hbWVzIGNvbnN0KToKKyAgICAgICAgKFdlYkNvcmU6OkRPTU1pbWVUeXBlQXJy
YXk6OnN1cHBvcnRlZFByb3BlcnR5TmFtZXMpOiBEZWxldGVkLgorICAgICAgICAqIHBsdWdpbnMv
RE9NTWltZVR5cGVBcnJheS5oOgorICAgICAgICAqIHBsdWdpbnMvRE9NUGx1Z2luLmNwcDoKKyAg
ICAgICAgKFdlYkNvcmU6Om1ha2VNaW1lVHlwZXMpOgorICAgICAgICAoV2ViQ29yZTo6RE9NUGx1
Z2luOjpzdXBwb3J0ZWRQcm9wZXJ0eU5hbWVzIGNvbnN0KToKKyAgICAgICAgKFdlYkNvcmU6OkRP
TVBsdWdpbjo6c3VwcG9ydGVkUHJvcGVydHlOYW1lcyk6IERlbGV0ZWQuCisgICAgICAgICogcGx1
Z2lucy9ET01QbHVnaW4uaDoKKyAgICAgICAgKiBwbHVnaW5zL0RPTVBsdWdpbkFycmF5LmNwcDoK
KyAgICAgICAgKFdlYkNvcmU6OkRPTVBsdWdpbkFycmF5OjpzdXBwb3J0ZWRQcm9wZXJ0eU5hbWVz
IGNvbnN0KToKKyAgICAgICAgKFdlYkNvcmU6OkRPTVBsdWdpbkFycmF5OjpzdXBwb3J0ZWRQcm9w
ZXJ0eU5hbWVzKTogRGVsZXRlZC4KKyAgICAgICAgKiBwbHVnaW5zL0RPTVBsdWdpbkFycmF5Lmg6
CisgICAgICAgICogcmVuZGVyaW5nL0xheWVyQW5jZXN0b3JDbGlwcGluZ1N0YWNrLmNwcDoKKyAg
ICAgICAgKFdlYkNvcmU6OkxheWVyQW5jZXN0b3JDbGlwcGluZ1N0YWNrOjpMYXllckFuY2VzdG9y
Q2xpcHBpbmdTdGFjayk6CisgICAgICAgIChXZWJDb3JlOjpMYXllckFuY2VzdG9yQ2xpcHBpbmdT
dGFjazo6Y29tcG9zaXRlZENsaXBEYXRhIGNvbnN0KToKKyAgICAgICAgKiByZW5kZXJpbmcvUmVu
ZGVyQm94TW9kZWxPYmplY3QuY3BwOgorICAgICAgICAoV2ViQ29yZTo6UmVuZGVyQm94TW9kZWxP
YmplY3Q6OmNsaXBCb3JkZXJTaWRlUG9seWdvbik6CisgICAgICAgICogcmVuZGVyaW5nL1JlbmRl
ckVsZW1lbnQuY3BwOgorICAgICAgICAoV2ViQ29yZTo6UmVuZGVyRWxlbWVudDo6ZHJhd0xpbmVG
b3JCb3hTaWRlIGNvbnN0KToKKyAgICAgICAgKiByZW5kZXJpbmcvUmVuZGVyR3JpZC5jcHA6Cisg
ICAgICAgIChXZWJDb3JlOjpSZW5kZXJHcmlkOjp0cmFja1NpemVzRm9yQ29tcHV0ZWRTdHlsZSBj
b25zdCk6CisgICAgICAgICogc3R5bGUvQ2xhc3NDaGFuZ2VJbnZhbGlkYXRpb24uY3BwOgorICAg
ICAgICAoV2ViQ29yZTo6U3R5bGU6OmNvbGxlY3RDbGFzc2VzKToKKyAgICAgICAgKiBzdHlsZS9T
dHlsZUJ1aWxkZXJDb252ZXJ0ZXIuaDoKKyAgICAgICAgKFdlYkNvcmU6OlN0eWxlOjpCdWlsZGVy
Q29udmVydGVyOjpjb252ZXJ0VG8xMDBQZXJjZW50TWludXNMZW5ndGgpOgorICAgICAgICAqIHRl
c3RpbmcvTW9ja0NETUZhY3RvcnkuY3BwOgorICAgICAgICAoV2ViQ29yZTo6TW9ja0NETUluc3Rh
bmNlU2Vzc2lvbjo6dXBkYXRlTGljZW5zZSk6CisgICAgICAgIChXZWJDb3JlOjpNb2NrQ0RNSW5z
dGFuY2VTZXNzaW9uOjpyZW1vdmVTZXNzaW9uRGF0YSk6CisgICAgICAgICogd29ya2Vycy9zZXJ2
aWNlL3NlcnZlci9TV1NlcnZlci5jcHA6CisgICAgICAgIChXZWJDb3JlOjpTV1NlcnZlcjo6Z2V0
UmVnaXN0cmF0aW9ucyk6CisKIDIwMjItMDItMTYgIEVyaWMgQ2FybHNvbiAgPGVyaWMuY2FybHNv
bkBhcHBsZS5jb20+CiAKICAgICAgICAgW0NvY29hXSBVcGRhdGUgYXVkaW8gc2Vzc2lvbiBjYXRl
Z29yeSBiZWZvcmUgc2V0dGluZyBOb3dQbGF5aW5nIHN0YXR1cwpkaWZmIC0tZ2l0IGEvU291cmNl
L1dlYktpdC9DaGFuZ2VMb2cgYi9Tb3VyY2UvV2ViS2l0L0NoYW5nZUxvZwppbmRleCAxNzU5NDVk
ZTIyMzM4ZjJkM2VhYjU0YmQ5ZTlhY2JjMjU0NGQ4NmMzLi5jNTJkMDYzOGRhZDlmZWQxMWE0NWE1
NTBiMmI1N2Y2YTQ4ZTFmYTkyIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViS2l0L0NoYW5nZUxvZwor
KysgYi9Tb3VyY2UvV2ViS2l0L0NoYW5nZUxvZwpAQCAtMSwzICsxLDExNCBAQAorMjAyMi0wMi0x
NiAgQ2hyaXMgRHVtZXogIDxjZHVtZXpAYXBwbGUuY29tPgorCisgICAgICAgIENsZWFuIHVwIC8g
b3B0aW1pemUgY2FsbCBzaXRlcyBjb25zdHJ1Y3RpbmcgdmVjdG9ycworICAgICAgICBodHRwczov
L2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9MjM2NzQ4CisKKyAgICAgICAgUmV2aWV3
ZWQgYnkgTk9CT0RZIChPT1BTISkuCisKKyAgICAgICAgQ2xlYW4gdXAgLyBvcHRpbWl6ZSBjYWxs
IHNpdGVzIGNvbnN0cnVjdGluZyB2ZWN0b3JzOgorICAgICAgICAtIFVzZSBWZWN0b3I6Om1hcCgp
IC8gV1RGOjptYXAoKSB3aGVyZSBhcHByb3ByaWF0ZQorICAgICAgICAtIFJlcGxhY2UgVmVjdG9y
OjpyZXNlcnZlQ2FwYWNpdHkoKSB3aXRoIFZlY3Rvcjo6cmVzZXJ2ZUluaXRpYWxDYXBhY2l0eSgp
IAorICAgICAgICAgIHdoZXJlIGFwcHJvcHJpYXRlCisgICAgICAgIC0gUmVwbGFjZSBWZWN0b3I6
OmFwcGVuZCgpIHdpdGggVmVjdG9yOjp1bmNoZWNrZWRBcHBlbmQoKSB3aGVyZSBhcHByb3ByaWF0
ZQorICAgICAgICAtIExldmVyYWdlIHRoZSBmYWN0IHRoYXQgVmVjdG9yPFJlZjxGb28+PiBpcyBu
b3cgY29weWFibGUgKEJlY2F1c2UgUmVmPD4gbm93IGhhcworICAgICAgICAgIGEgY29weSBjb25z
dHJ1Y3RvcikKKyAgICAgICAgLSBDYWxsIGNyb3NzVGhyZWFkQ29weSgpIHRvIGlzb2xhdGUtY29w
eSBhIFZlY3RvcigpIHdpdGhvdXQgaXRlcmF0aW5nLgorICAgICAgICAtIExldmVyYWdlIFZlY3Rv
ciBjb25zdHJ1Y3RvciB0aGF0IHRha2VzIGluIGFuIGludGlhbGl6YXRpb24gbGlzdCBpbiBtb3Jl
IGNhc2VzCisgICAgICAgIC0gTGV2ZXJhZ2UgVmVjdG9yOjpmcm9tKCkgaW4gbW9yZSBjYXNlcyB0
byBzaW1wbGlmeSB2ZWN0b3IgY29uc3RydWN0aW9uIGluIHNvbWUKKyAgICAgICAgICBjYXNlLgor
ICAgICAgICAtIERyb3AgdW5uZWNlc3NhcnkgY2FsbHMgdG8gVmVjdG9yOjpyZXNlcnZlKkNhcGFj
aXR5KCkgYmVmb3JlIGNhbGxpbmcKKyAgICAgICAgICBWZWN0b3I6OmFwcGVuZChUKiwgc2l6ZV90
KSBzaW5jZSB0aGUgYXBwZW5kKCkgaW1wbGVtZW50YXRpb24gYWxyZWFkeSBkb2VzIHRoaXMKKyAg
ICAgICAgICBmb3IgdXMuCisgICAgICAgIC0gTGV2ZXJhZ2UgY29weVRvVmVjdG9yKCkgYW5kIGNv
cHlUb1ZlY3Rvck9mPD4gaW4gbW9yZSBjYXNlcworICAgICAgICAtIENhbGwgc2hyaW5rVG9GaXQo
KSBpbiBzb21lIGNhc2VzIHdoZXJlIHdlIHJlc2VydmUgY2FwYWNpdHkgYW5kIHRoZW4gYXBwZW5k
KCkKKyAgICAgICAgICBidXQgbWF5IG5vdCBhcHBlbmQoKSBhcyBtdWNoIGFzIHdlIHJlc2VydmVk
LiAKKworICAgICAgICAqIE5ldHdvcmtQcm9jZXNzL1dlYlN0b3JhZ2UvTG9jYWxTdG9yYWdlRGF0
YWJhc2VUcmFja2VyLmNwcDoKKyAgICAgICAgKFdlYktpdDo6TG9jYWxTdG9yYWdlRGF0YWJhc2VU
cmFja2VyOjpvcmlnaW5EZXRhaWxzQ3Jvc3NUaHJlYWRDb3B5KToKKyAgICAgICAgKiBOZXR3b3Jr
UHJvY2Vzcy9jYWNoZS9DYWNoZVN0b3JhZ2VFbmdpbmVDYWNoZXMuY3BwOgorICAgICAgICAoV2Vi
S2l0OjpDYWNoZVN0b3JhZ2U6OkNhY2hlczo6Y2FjaGVJbmZvcyk6CisgICAgICAgICogU2hhcmVk
L0FQSS9BUElBcnJheS5jcHA6CisgICAgICAgIChBUEk6OkFycmF5OjpjcmVhdGVTdHJpbmdBcnJh
eSk6CisgICAgICAgIChBUEk6OkFycmF5Ojpjb3B5KToKKyAgICAgICAgKiBTaGFyZWQvQVBJL0FQ
SURpY3Rpb25hcnkuY3BwOgorICAgICAgICAoQVBJOjpEaWN0aW9uYXJ5OjprZXlzIGNvbnN0KToK
KyAgICAgICAgKiBTaGFyZWQvVXNlckRhdGEuY3BwOgorICAgICAgICAoV2ViS2l0Ojp0cmFuc2Zv
cm1HcmFwaCk6CisgICAgICAgICogU2hhcmVkL1dlYkNvbnRleHRNZW51SXRlbS5jcHA6CisgICAg
ICAgIChXZWJLaXQ6OldlYkNvbnRleHRNZW51SXRlbTo6Y3JlYXRlKToKKyAgICAgICAgKFdlYktp
dDo6V2ViQ29udGV4dE1lbnVJdGVtOjpzdWJtZW51SXRlbXNBc0FQSUFycmF5IGNvbnN0KToKKyAg
ICAgICAgKiBTaGFyZWQvV2ViQ29udGV4dE1lbnVJdGVtRGF0YS5jcHA6CisgICAgICAgIChXZWJL
aXQ6OmtpdEl0ZW1zKToKKyAgICAgICAgKFdlYktpdDo6Y29yZUl0ZW1zKToKKyAgICAgICAgKiBV
SVByb2Nlc3MvQVBJL0FQSVdlYkF1dGhlbnRpY2F0aW9uUGFuZWwuY3BwOgorICAgICAgICAoQVBJ
OjpXZWJBdXRoZW50aWNhdGlvblBhbmVsOjpXZWJBdXRoZW50aWNhdGlvblBhbmVsKToKKyAgICAg
ICAgKiBVSVByb2Nlc3MvQVBJL0FQSVdlYnNpdGVQb2xpY2llcy5jcHA6CisgICAgICAgIChBUEk6
OldlYnNpdGVQb2xpY2llczo6Y29weSBjb25zdCk6CisgICAgICAgIChBUEk6OldlYnNpdGVQb2xp
Y2llczo6ZGF0YSk6CisgICAgICAgICogVUlQcm9jZXNzL0FQSS9DL1dLUGFnZS5jcHA6CisgICAg
ICAgIChBUEk6OnRvQVBJT2JqZWN0VmVjdG9yKToKKyAgICAgICAgKFdLUGFnZVNldFBhZ2VDb250
ZXh0TWVudUNsaWVudCk6CisgICAgICAgIChXS1BhZ2VTZXRQYWdlRmluZE1hdGNoZXNDbGllbnQp
OgorICAgICAgICAoV0tQYWdlU2V0UGFnZUxvYWRlckNsaWVudCk6CisgICAgICAgICogVUlQcm9j
ZXNzL0NvY29hL1ZpZGVvRnVsbHNjcmVlbk1hbmFnZXJQcm94eS5tbToKKyAgICAgICAgKFdlYktp
dDo6VmlkZW9GdWxsc2NyZWVuTWFuYWdlclByb3h5Ojpmb3JFYWNoU2Vzc2lvbik6CisgICAgICAg
ICogVUlQcm9jZXNzL0dhbWVwYWQvVUlHYW1lcGFkUHJvdmlkZXIuY3BwOgorICAgICAgICAoV2Vi
S2l0OjpVSUdhbWVwYWRQcm92aWRlcjo6c25hcHNob3RHYW1lcGFkcyk6CisgICAgICAgICogVUlQ
cm9jZXNzL05ldHdvcmsvTmV0d29ya1Byb2Nlc3NQcm94eS5jcHA6CisgICAgICAgIChXZWJLaXQ6
Ok5ldHdvcmtQcm9jZXNzUHJveHk6OmFsbE5ldHdvcmtQcm9jZXNzZXMpOgorICAgICAgICAoV2Vi
S2l0OjpOZXR3b3JrUHJvY2Vzc1Byb3h5Ojp1cGRhdGVQcmV2YWxlbnREb21haW5zVG9CbG9ja0Nv
b2tpZXNGb3IpOgorICAgICAgICAqIFVJUHJvY2Vzcy9Ob3RpZmljYXRpb25zL1dlYk5vdGlmaWNh
dGlvbk1hbmFnZXJQcm94eS5jcHA6CisgICAgICAgIChXZWJLaXQ6OldlYk5vdGlmaWNhdGlvbk1h
bmFnZXJQcm94eTo6cHJvdmlkZXJEaWRSZW1vdmVOb3RpZmljYXRpb25Qb2xpY2llcyk6CisgICAg
ICAgICogVUlQcm9jZXNzL05vdGlmaWNhdGlvbnMvV2ViTm90aWZpY2F0aW9uUHJvdmlkZXIuY3Bw
OgorICAgICAgICAoV2ViS2l0OjpXZWJOb3RpZmljYXRpb25Qcm92aWRlcjo6Y2xlYXJOb3RpZmlj
YXRpb25zKToKKyAgICAgICAgKiBVSVByb2Nlc3MvU3RhdGlzdGljc1JlcXVlc3QuY3BwOgorICAg
ICAgICAoV2ViS2l0OjpTdGF0aXN0aWNzUmVxdWVzdDo6Y29tcGxldGVkUmVxdWVzdCk6CisgICAg
ICAgICogVUlQcm9jZXNzL1VzZXJDb250ZW50L1dlYlVzZXJDb250ZW50Q29udHJvbGxlclByb3h5
LmNwcDoKKyAgICAgICAgKFdlYktpdDo6V2ViVXNlckNvbnRlbnRDb250cm9sbGVyUHJveHk6OnJl
bW92ZUFsbFVzZXJTY3JpcHRzKToKKyAgICAgICAgKFdlYktpdDo6V2ViVXNlckNvbnRlbnRDb250
cm9sbGVyUHJveHk6OnJlbW92ZUFsbFVzZXJTdHlsZVNoZWV0cyk6CisgICAgICAgICogVUlQcm9j
ZXNzL1dlYkF1dGhlbnRpY2F0aW9uL0NvY29hL1dlYkF1dGhlbnRpY2F0aW9uUGFuZWxDbGllbnQu
bW06CisgICAgICAgIChXZWJLaXQ6OldlYkF1dGhlbnRpY2F0aW9uUGFuZWxDbGllbnQ6OnNlbGVj
dEFzc2VydGlvblJlc3BvbnNlIGNvbnN0KToKKyAgICAgICAgKiBVSVByb2Nlc3MvV2ViQXV0aGVu
dGljYXRpb24vZmlkby9DdGFwQXV0aGVudGljYXRvci5jcHA6CisgICAgICAgIChXZWJLaXQ6OkN0
YXBBdXRoZW50aWNhdG9yOjpjb250aW51ZUdldE5leHRBc3NlcnRpb25BZnRlclJlc3BvbnNlUmVj
ZWl2ZWQpOgorICAgICAgICAqIFVJUHJvY2Vzcy9XZWJCYWNrRm9yd2FyZExpc3QuY3BwOgorICAg
ICAgICAoV2ViS2l0OjpXZWJCYWNrRm9yd2FyZExpc3Q6OmFkZEl0ZW0pOgorICAgICAgICAoV2Vi
S2l0OjpXZWJCYWNrRm9yd2FyZExpc3Q6OmNsZWFyKToKKyAgICAgICAgKFdlYktpdDo6V2ViQmFj
a0ZvcndhcmRMaXN0OjpyZXN0b3JlRnJvbVN0YXRlKToKKyAgICAgICAgKiBVSVByb2Nlc3MvV2Vi
UGFnZVByb3h5LmNwcDoKKyAgICAgICAgKFdlYktpdDo6V2ViUGFnZVByb3h5OjpydW5KYXZhU2Ny
aXB0SW5GcmFtZUluU2NyaXB0V29ybGQpOgorICAgICAgICAoV2ViS2l0OjpXZWJQYWdlUHJveHk6
OnNwZWVjaFN5bnRoZXNpc1ZvaWNlTGlzdCk6CisgICAgICAgICogVUlQcm9jZXNzL1dlYnNpdGVE
YXRhL1dlYnNpdGVEYXRhU3RvcmUuY3BwOgorICAgICAgICAoV2ViS2l0OjpXZWJzaXRlRGF0YVN0
b3JlOjpmZXRjaERhdGFBbmRBcHBseSk6CisgICAgICAgIChXZWJLaXQ6OldlYnNpdGVEYXRhU3Rv
cmU6OnBhcmFtZXRlcnNGcm9tRWFjaFdlYnNpdGVEYXRhU3RvcmUpOgorICAgICAgICAqIFVJUHJv
Y2Vzcy9tYWMvV0tUZXh0RmluZGVyQ2xpZW50Lm1tOgorICAgICAgICAoLVtXS1RleHRGaW5kZXJD
bGllbnQgcmVwbGFjZU1hdGNoZXM6d2l0aFN0cmluZzppblNlbGVjdGlvbk9ubHk6cmVzdWx0Q29s
bGVjdG9yOl0pOgorICAgICAgICAqIFdlYlByb2Nlc3MvR1BVL21lZGlhL1JlbW90ZVJlbW90ZUNv
bW1hbmRMaXN0ZW5lci5jcHA6CisgICAgICAgIChXZWJLaXQ6OlJlbW90ZVJlbW90ZUNvbW1hbmRM
aXN0ZW5lcjo6dXBkYXRlU3VwcG9ydGVkQ29tbWFuZHMpOgorICAgICAgICAqIFdlYlByb2Nlc3Mv
SW5qZWN0ZWRCdW5kbGUvQVBJL2MvV0tCdW5kbGVQYWdlLmNwcDoKKyAgICAgICAgKGNvbnRleHRN
ZW51SXRlbXMpOgorICAgICAgICAoV0tCdW5kbGVQYWdlQ29weU9yaWdpbnNXaXRoQXBwbGljYXRp
b25DYWNoZSk6CisgICAgICAgICogV2ViUHJvY2Vzcy9JbmplY3RlZEJ1bmRsZS9JbmplY3RlZEJ1
bmRsZVBhZ2VDb250ZXh0TWVudUNsaWVudC5jcHA6CisgICAgICAgIChXZWJLaXQ6OkluamVjdGVk
QnVuZGxlUGFnZUNvbnRleHRNZW51Q2xpZW50OjpnZXRDdXN0b21NZW51RnJvbURlZmF1bHRJdGVt
cyk6CisgICAgICAgICogV2ViUHJvY2Vzcy9JbmplY3RlZEJ1bmRsZS9JbmplY3RlZEJ1bmRsZVBh
Z2VGb3JtQ2xpZW50LmNwcDoKKyAgICAgICAgKFdlYktpdDo6SW5qZWN0ZWRCdW5kbGVQYWdlRm9y
bUNsaWVudDo6ZGlkQXNzb2NpYXRlRm9ybUNvbnRyb2xzKToKKyAgICAgICAgKiBXZWJQcm9jZXNz
L05ldHdvcmsvV2ViU29ja2V0U3RyZWFtLmNwcDoKKyAgICAgICAgKFdlYktpdDo6V2ViU29ja2V0
U3RyZWFtOjpuZXR3b3JrUHJvY2Vzc0NyYXNoZWQpOgorICAgICAgICAqIFdlYlByb2Nlc3MvTmV0
d29yay93ZWJydGMvV2ViUlRDUmVzb2x2ZXIuY3BwOgorICAgICAgICAoV2ViS2l0OjpXZWJSVENS
ZXNvbHZlcjo6c2V0UmVzb2x2ZWRBZGRyZXNzKToKKyAgICAgICAgKiBXZWJQcm9jZXNzL1dlYkNv
cmVTdXBwb3J0L1dlYlJlc291cmNlTG9hZE9ic2VydmVyLmNwcDoKKyAgICAgICAgKFdlYktpdDo6
V2ViUmVzb3VyY2VMb2FkT2JzZXJ2ZXI6OnRha2VTdGF0aXN0aWNzKToKKyAgICAgICAgKiBXZWJQ
cm9jZXNzL1dlYlBhZ2UvRmluZENvbnRyb2xsZXIuY3BwOgorICAgICAgICAoV2ViS2l0OjpGaW5k
Q29udHJvbGxlcjo6cmVwbGFjZU1hdGNoZXMpOgorICAgICAgICAqIFdlYlByb2Nlc3MvV2ViUGFn
ZS9SZW1vdGVMYXllclRyZWUvUGxhdGZvcm1DQUFuaW1hdGlvblJlbW90ZS5tbToKKyAgICAgICAg
KFdlYktpdDo6dG9LZXlmcmFtZVZhbHVlVmVjdG9yKToKKyAgICAgICAgKFdlYktpdDo6UGxhdGZv
cm1DQUFuaW1hdGlvblJlbW90ZTo6c2V0VmFsdWVzKToKKyAgICAgICAgKFdlYktpdDo6UGxhdGZv
cm1DQUFuaW1hdGlvblJlbW90ZTo6c2V0VGltaW5nRnVuY3Rpb25zKToKKyAgICAgICAgKiBXZWJQ
cm9jZXNzL1dlYlBhZ2UvVmlld0dlc3R1cmVHZW9tZXRyeUNvbGxlY3Rvci5jcHA6CisgICAgICAg
IChXZWJLaXQ6OlZpZXdHZXN0dXJlR2VvbWV0cnlDb2xsZWN0b3I6OmNvbXB1dGVUZXh0TGVnaWJp
bGl0eVNjYWxlcyk6CisgICAgICAgICogV2ViUHJvY2Vzcy9XZWJQYWdlL1dlYlBhZ2UuY3BwOgor
ICAgICAgICAoV2ViS2l0OjpXZWJQYWdlOjp0cmFja2VkUmVwYWludFJlY3RzKToKKyAgICAgICAg
KFdlYktpdDo6ZHVtcEhpc3RvcnlJdGVtKToKKwogMjAyMi0wMi0xNiAgUGVyIEFybmUgVm9sbGFu
ICA8cHZvbGxhbkBhcHBsZS5jb20+CiAKICAgICAgICAgW21hY09TXSBBZGQgYWNjZXNzIHRvIG1h
Y2ggc2VydmljZSBpbiB0aGUgTmV0d29ya2luZyBwcm9jZXNzIGZvciBhbGwgdXNlcnMKZGlmZiAt
LWdpdCBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9iMy9haXIvQWlyQ29kZS5jcHAgYi9Tb3VyY2Uv
SmF2YVNjcmlwdENvcmUvYjMvYWlyL0FpckNvZGUuY3BwCmluZGV4IDg4NjU1YmM3MDFlNmU1ZmQ4
YmRkZjY2MzcxNzQwZGRjMjQ2ZjY1MDIuLmU2OTdiZDUzMDU4ZmRlMTE1MjNmZTViODM1OTQ4Mzky
MWQ1NzMyOTMgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9iMy9haXIvQWlyQ29k
ZS5jcHAKKysrIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL2IzL2Fpci9BaXJDb2RlLmNwcApAQCAt
MzMxLDEyICszMzEsOSBAQCB1bnNpZ25lZCBDb2RlOjpqc0hhc2goKSBjb25zdAogICAgIHJldHVy
biByZXN1bHQ7CiB9CiAKLXZvaWQgQ29kZTo6c2V0TnVtRW50cnlwb2ludHModW5zaWduZWQgbnVt
RW50cnlwb2ludHMpCit2b2lkIENvZGU6OnNldE51bUVudHJ5cG9pbnRzKHVuc2lnbmVkIG51bUVu
dHJ5UG9pbnRzKQogewotICAgIG1fcHJvbG9ndWVHZW5lcmF0b3JzLmNsZWFyKCk7Ci0gICAgbV9w
cm9sb2d1ZUdlbmVyYXRvcnMucmVzZXJ2ZUNhcGFjaXR5KG51bUVudHJ5cG9pbnRzKTsKLSAgICBm
b3IgKHVuc2lnbmVkIGkgPSAwOyBpIDwgbnVtRW50cnlwb2ludHM7ICsraSkKLSAgICAgICAgbV9w
cm9sb2d1ZUdlbmVyYXRvcnMudW5jaGVja2VkQXBwZW5kKG1fZGVmYXVsdFByb2xvZ3VlR2VuZXJh
dG9yLmNvcHlSZWYoKSk7CisgICAgbV9wcm9sb2d1ZUdlbmVyYXRvcnMgPSBWZWN0b3IgeyBudW1F
bnRyeVBvaW50cywgbV9kZWZhdWx0UHJvbG9ndWVHZW5lcmF0b3IuY29weVJlZigpIH07CiB9CiAK
IH0gfSB9IC8vIG5hbWVzcGFjZSBKU0M6OkIzOjpBaXIKZGlmZiAtLWdpdCBhL1NvdXJjZS9KYXZh
U2NyaXB0Q29yZS9ieXRlY29tcGlsZXIvTm9kZXNDb2RlZ2VuLmNwcCBiL1NvdXJjZS9KYXZhU2Ny
aXB0Q29yZS9ieXRlY29tcGlsZXIvTm9kZXNDb2RlZ2VuLmNwcAppbmRleCAzYzI0MjdiYjBjODM4
MTYwOWRlMzc3NmM2ZjBmMWQzN2FhMDRjODMwLi5mNmU0M2VjOGNiYmE4ZjI1NTkwYzZmODA4YTI0
NDc1ZGMyYjZlYWUxIDEwMDY0NAotLS0gYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvYnl0ZWNvbXBp
bGVyL05vZGVzQ29kZWdlbi5jcHAKKysrIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL2J5dGVjb21w
aWxlci9Ob2Rlc0NvZGVnZW4uY3BwCkBAIC01Mzc0LDcgKzUzNzQsNyBAQCBSZWdpc3RlcklEKiBB
cnJheVBhdHRlcm5Ob2RlOjplbWl0RGlyZWN0QmluZGluZyhCeXRlY29kZUdlbmVyYXRvciYgZ2Vu
ZXJhdG9yLCBSZQogICAgIGlmIChtX3RhcmdldFBhdHRlcm5zLnNpemUoKSAhPSBlbGVtZW50cy5z
aXplKCkpCiAgICAgICAgIHJldHVybiBudWxscHRyOwogICAgIFZlY3RvcjxSZWZQdHI8UmVnaXN0
ZXJJRD4+IHJlZ2lzdGVyczsKLSAgICByZWdpc3RlcnMucmVzZXJ2ZUNhcGFjaXR5KG1fdGFyZ2V0
UGF0dGVybnMuc2l6ZSgpKTsKKyAgICByZWdpc3RlcnMucmVzZXJ2ZUluaXRpYWxDYXBhY2l0eSht
X3RhcmdldFBhdHRlcm5zLnNpemUoKSk7CiAgICAgZm9yIChzaXplX3QgaSA9IDA7IGkgPCBtX3Rh
cmdldFBhdHRlcm5zLnNpemUoKTsgaSsrKSB7CiAgICAgICAgIHJlZ2lzdGVycy51bmNoZWNrZWRB
cHBlbmQoZ2VuZXJhdG9yLm5ld1RlbXBvcmFyeSgpKTsKICAgICAgICAgZ2VuZXJhdG9yLmVtaXRO
b2RlKHJlZ2lzdGVycy5sYXN0KCkuZ2V0KCksIGVsZW1lbnRzW2ldKTsKZGlmZiAtLWdpdCBhL1Nv
dXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHSW5QbGFjZUFic3RyYWN0U3RhdGUuY3BwIGIvU291
cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdJblBsYWNlQWJzdHJhY3RTdGF0ZS5jcHAKaW5kZXgg
OTg0MmJiNzg3MGNhY2MwZTZiNmYyNzMwODY3MDQxODNkOTMxOWYyNS4uYWNlMGIxYjY0NzllMWI2
YzRjOWUzMjhkYzYxNDAxZjhiMzYyNThkYiAxMDA2NDQKLS0tIGEvU291cmNlL0phdmFTY3JpcHRD
b3JlL2RmZy9ERkdJblBsYWNlQWJzdHJhY3RTdGF0ZS5jcHAKKysrIGIvU291cmNlL0phdmFTY3Jp
cHRDb3JlL2RmZy9ERkdJblBsYWNlQWJzdHJhY3RTdGF0ZS5jcHAKQEAgLTg5LDEwICs4OSw5IEBA
IHZvaWQgSW5QbGFjZUFic3RyYWN0U3RhdGU6OmJlZ2luQmFzaWNCbG9jayhCYXNpY0Jsb2NrKiBi
YXNpY0Jsb2NrKQogCiBzdGF0aWMgdm9pZCBzZXRMaXZlVmFsdWVzKFZlY3RvcjxOb2RlQWJzdHJh
Y3RWYWx1ZVBhaXI+JiB2YWx1ZXMsIGNvbnN0IFZlY3RvcjxOb2RlRmxvd1Byb2plY3Rpb24+JiBs
aXZlKQogewotICAgIHZhbHVlcy5zaHJpbmsoMCk7Ci0gICAgdmFsdWVzLnJlc2VydmVDYXBhY2l0
eShsaXZlLnNpemUoKSk7Ci0gICAgZm9yIChOb2RlRmxvd1Byb2plY3Rpb24gbm9kZSA6IGxpdmUp
Ci0gICAgICAgIHZhbHVlcy51bmNoZWNrZWRBcHBlbmQoTm9kZUFic3RyYWN0VmFsdWVQYWlyIHsg
bm9kZSwgQWJzdHJhY3RWYWx1ZSgpIH0pOworICAgIHZhbHVlcyA9IGxpdmUubWFwKFtdKGF1dG8g
bm9kZSkgeworICAgICAgICByZXR1cm4gTm9kZUFic3RyYWN0VmFsdWVQYWlyIHsgbm9kZSwgQWJz
dHJhY3RWYWx1ZSgpIH07CisgICAgfSk7CiB9CiAKIE9wZXJhbmRzPEFic3RyYWN0VmFsdWU+JiBJ
blBsYWNlQWJzdHJhY3RTdGF0ZTo6dmFyaWFibGVzRm9yRGVidWdnaW5nKCkKZGlmZiAtLWdpdCBh
L1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHTGl2ZW5lc3NBbmFseXNpc1BoYXNlLmNwcCBi
L1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHTGl2ZW5lc3NBbmFseXNpc1BoYXNlLmNwcApp
bmRleCAxMDAxMTgzM2IyNDcxZWU1YjFiNjBmMjIwMTZlZWYwZjRlNmRmNmE4Li42YzZlMmE0NTE5
MGNlNDEzNTliYTE1Mjc4YThjZTJkZTNhZjRmZTk1IDEwMDY0NAotLS0gYS9Tb3VyY2UvSmF2YVNj
cmlwdENvcmUvZGZnL0RGR0xpdmVuZXNzQW5hbHlzaXNQaGFzZS5jcHAKKysrIGIvU291cmNlL0ph
dmFTY3JpcHRDb3JlL2RmZy9ERkdMaXZlbmVzc0FuYWx5c2lzUGhhc2UuY3BwCkBAIC05MSwyMCAr
OTEsMTQgQEAgcHVibGljOgogICAgICAgICAgICAgICAgIGNvbnRpbnVlOwogCiAgICAgICAgICAg
ICB7Ci0gICAgICAgICAgICAgICAgY29uc3QgVmVjdG9yPHVuc2lnbmVkLCAwLCBVbnNhZmVWZWN0
b3JPdmVyZmxvdywgMT4mIGxpdmVBdEhlYWRJbmRpY2VzID0gbV9saXZlQXRIZWFkW2Jsb2NrSW5k
ZXhdOwotICAgICAgICAgICAgICAgIFZlY3RvcjxOb2RlRmxvd1Byb2plY3Rpb24+JiBsaXZlQXRI
ZWFkID0gYmxvY2stPnNzYS0+bGl2ZUF0SGVhZDsKLSAgICAgICAgICAgICAgICBsaXZlQXRIZWFk
LnNocmluaygwKTsKLSAgICAgICAgICAgICAgICBsaXZlQXRIZWFkLnJlc2VydmVDYXBhY2l0eShs
aXZlQXRIZWFkSW5kaWNlcy5zaXplKCkpOwotICAgICAgICAgICAgICAgIGZvciAodW5zaWduZWQg
aW5kZXggOiBsaXZlQXRIZWFkSW5kaWNlcykKLSAgICAgICAgICAgICAgICAgICAgbGl2ZUF0SGVh
ZC51bmNoZWNrZWRBcHBlbmQobV9pbmRleGluZy5ub2RlUHJvamVjdGlvbihpbmRleCkpOworICAg
ICAgICAgICAgICAgIGJsb2NrLT5zc2EtPmxpdmVBdEhlYWQgPSBtX2xpdmVBdEhlYWRbYmxvY2tJ
bmRleF0ubWFwKFt0aGlzXShhdXRvIGluZGV4KSB7CisgICAgICAgICAgICAgICAgICAgIHJldHVy
biBtX2luZGV4aW5nLm5vZGVQcm9qZWN0aW9uKGluZGV4KTsKKyAgICAgICAgICAgICAgICB9KTsK
ICAgICAgICAgICAgIH0KICAgICAgICAgICAgIHsKLSAgICAgICAgICAgICAgICBjb25zdCBMaXZl
U2V0JiBsaXZlQXRUYWlsSW5kaWNlcyA9IG1fbGl2ZUF0VGFpbFtibG9ja0luZGV4XTsKLSAgICAg
ICAgICAgICAgICBWZWN0b3I8Tm9kZUZsb3dQcm9qZWN0aW9uPiYgbGl2ZUF0VGFpbCA9IGJsb2Nr
LT5zc2EtPmxpdmVBdFRhaWw7Ci0gICAgICAgICAgICAgICAgbGl2ZUF0VGFpbC5zaHJpbmsoMCk7
Ci0gICAgICAgICAgICAgICAgbGl2ZUF0VGFpbC5yZXNlcnZlQ2FwYWNpdHkobGl2ZUF0VGFpbElu
ZGljZXMuc2l6ZSgpKTsKLSAgICAgICAgICAgICAgICBmb3IgKHVuc2lnbmVkIGluZGV4IDogbV9s
aXZlQXRUYWlsW2Jsb2NrSW5kZXhdKQotICAgICAgICAgICAgICAgICAgICBsaXZlQXRUYWlsLnVu
Y2hlY2tlZEFwcGVuZChtX2luZGV4aW5nLm5vZGVQcm9qZWN0aW9uKGluZGV4KSk7CisgICAgICAg
ICAgICAgICAgYmxvY2stPnNzYS0+bGl2ZUF0VGFpbCA9IFdURjo6bWFwKG1fbGl2ZUF0VGFpbFti
bG9ja0luZGV4XSwgW3RoaXNdKGF1dG8gaW5kZXgpIHsKKyAgICAgICAgICAgICAgICAgICAgcmV0
dXJuIG1faW5kZXhpbmcubm9kZVByb2plY3Rpb24oaW5kZXgpOworICAgICAgICAgICAgICAgIH0p
OwogICAgICAgICAgICAgfQogICAgICAgICB9CiAKZGlmZiAtLWdpdCBhL1NvdXJjZS9KYXZhU2Ny
aXB0Q29yZS9kZmcvREZHU2NvcmVCb2FyZC5oIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9E
RkdTY29yZUJvYXJkLmgKaW5kZXggYzI5NWQyMWJmMzRiZjVkOWMyOWJlMGU2ZDU2OTM1NjJkZWI1
MTYzMy4uODUxZDRmMGZkNmYyZmFkNWY3OWQ1YWMwMDNiMDNiM2UwYWQ1MDkwMSAxMDA2NDQKLS0t
IGEvU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdTY29yZUJvYXJkLmgKKysrIGIvU291cmNl
L0phdmFTY3JpcHRDb3JlL2RmZy9ERkdTY29yZUJvYXJkLmgKQEAgLTQ1LDcgKzQ1LDcgQEAgcHVi
bGljOgogICAgICAgICA6IG1faGlnaFdhdGVybWFyayhuZXh0TWFjaGluZUxvY2FsICsgMSkKICAg
ICB7CiAgICAgICAgIG1fdXNlZC5maWxsKG1heCgpLCBuZXh0TWFjaGluZUxvY2FsKTsKLSAgICAg
ICAgbV9mcmVlLnJlc2VydmVDYXBhY2l0eShuZXh0TWFjaGluZUxvY2FsKTsKKyAgICAgICAgbV9m
cmVlLnJlc2VydmVJbml0aWFsQ2FwYWNpdHkobmV4dE1hY2hpbmVMb2NhbCk7CiAgICAgfQogCiAg
ICAgflNjb3JlQm9hcmQoKQpkaWZmIC0tZ2l0IGEvU291cmNlL0phdmFTY3JpcHRDb3JlL2luc3Bl
Y3Rvci9hZ2VudHMvSW5zcGVjdG9yRGVidWdnZXJBZ2VudC5jcHAgYi9Tb3VyY2UvSmF2YVNjcmlw
dENvcmUvaW5zcGVjdG9yL2FnZW50cy9JbnNwZWN0b3JEZWJ1Z2dlckFnZW50LmNwcAppbmRleCBi
ZTkxMGViMjgyZWU1M2U3ZjM1ZjZiMDNhNjY5YzU5Mzk3YzFkOGRkLi4zNzAwMGFiMTlhZGFiNzIz
OWZiY2E3MjhiMjRlODM5NDVhZTcyNjhiIDEwMDY0NAotLS0gYS9Tb3VyY2UvSmF2YVNjcmlwdENv
cmUvaW5zcGVjdG9yL2FnZW50cy9JbnNwZWN0b3JEZWJ1Z2dlckFnZW50LmNwcAorKysgYi9Tb3Vy
Y2UvSmF2YVNjcmlwdENvcmUvaW5zcGVjdG9yL2FnZW50cy9JbnNwZWN0b3JEZWJ1Z2dlckFnZW50
LmNwcApAQCAtMTA0LDcgKzEwNCw3IEBAIHN0YXRpYyBUIHBhcnNlQnJlYWtwb2ludE9wdGlvbnMo
UHJvdG9jb2w6OkVycm9yU3RyaW5nJiBlcnJvclN0cmluZywgUmVmUHRyPEpTT046CiAKICAgICAg
ICAgYXV0byBhY3Rpb25zUGF5bG9hZCA9IG9wdGlvbnMtPmdldEFycmF5KFByb3RvY29sOjpEZWJ1
Z2dlcjo6QnJlYWtwb2ludE9wdGlvbnM6OmFjdGlvbnNLZXkpOwogICAgICAgICBpZiAoYXV0byBj
b3VudCA9IGFjdGlvbnNQYXlsb2FkID8gYWN0aW9uc1BheWxvYWQtPmxlbmd0aCgpIDogMCkgewot
ICAgICAgICAgICAgYWN0aW9ucy5yZXNlcnZlQ2FwYWNpdHkoY291bnQpOworICAgICAgICAgICAg
YWN0aW9ucy5yZXNlcnZlSW5pdGlhbENhcGFjaXR5KGNvdW50KTsKIAogICAgICAgICAgICAgZm9y
ICh1bnNpZ25lZCBpID0gMDsgaSA8IGNvdW50OyArK2kpIHsKICAgICAgICAgICAgICAgICBhdXRv
IGFjdGlvbk9iamVjdCA9IGFjdGlvbnNQYXlsb2FkLT5nZXQoaSktPmFzT2JqZWN0KCk7CkBAIC0x
MzMsNyArMTMzLDcgQEAgc3RhdGljIFQgcGFyc2VCcmVha3BvaW50T3B0aW9ucyhQcm90b2NvbDo6
RXJyb3JTdHJpbmcmIGVycm9yU3RyaW5nLCBSZWZQdHI8SlNPTjoKIAogICAgICAgICAgICAgICAg
IGFjdGlvbi5lbXVsYXRlVXNlckdlc3R1cmUgPSBhY3Rpb25PYmplY3QtPmdldEJvb2xlYW4oUHJv
dG9jb2w6OkRlYnVnZ2VyOjpCcmVha3BvaW50QWN0aW9uOjplbXVsYXRlVXNlckdlc3R1cmVLZXkp
LnZhbHVlX29yKGZhbHNlKTsKIAotICAgICAgICAgICAgICAgIGFjdGlvbnMuYXBwZW5kKFdURk1v
dmUoYWN0aW9uKSk7CisgICAgICAgICAgICAgICAgYWN0aW9ucy51bmNoZWNrZWRBcHBlbmQoV1RG
TW92ZShhY3Rpb24pKTsKICAgICAgICAgICAgIH0KICAgICAgICAgfQogCmRpZmYgLS1naXQgYS9T
b3VyY2UvSmF2YVNjcmlwdENvcmUvaW5zcGVjdG9yL3JlbW90ZS9zb2NrZXQvUmVtb3RlSW5zcGVj
dG9yTWVzc2FnZVBhcnNlci5jcHAgYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvaW5zcGVjdG9yL3Jl
bW90ZS9zb2NrZXQvUmVtb3RlSW5zcGVjdG9yTWVzc2FnZVBhcnNlci5jcHAKaW5kZXggZTFjMzBl
YTQxYjU4NWUxMzg4ODJlMzJjM2Q5YmVkZjg3YTAwZmU5YS4uYmU3MWViZmIzMzc4ZmIzODNkZjYw
ZTVhNmM4ZWM1M2E1N2M3MzgwYSAxMDA2NDQKLS0tIGEvU291cmNlL0phdmFTY3JpcHRDb3JlL2lu
c3BlY3Rvci9yZW1vdGUvc29ja2V0L1JlbW90ZUluc3BlY3Rvck1lc3NhZ2VQYXJzZXIuY3BwCisr
KyBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9pbnNwZWN0b3IvcmVtb3RlL3NvY2tldC9SZW1vdGVJ
bnNwZWN0b3JNZXNzYWdlUGFyc2VyLmNwcApAQCAtNjQsNyArNjQsNiBAQCB2b2lkIE1lc3NhZ2VQ
YXJzZXI6OnB1c2hSZWNlaXZlZERhdGEoY29uc3QgdWludDhfdCogZGF0YSwgc2l6ZV90IHNpemUp
CiAgICAgaWYgKCFkYXRhIHx8ICFzaXplIHx8ICFtX2xpc3RlbmVyKQogICAgICAgICByZXR1cm47
CiAKLSAgICBtX2J1ZmZlci5yZXNlcnZlQ2FwYWNpdHkobV9idWZmZXIuc2l6ZSgpICsgc2l6ZSk7
CiAgICAgbV9idWZmZXIuYXBwZW5kKGRhdGEsIHNpemUpOwogCiAgICAgaWYgKCFwYXJzZSgpKQpk
aWZmIC0tZ2l0IGEvU291cmNlL0phdmFTY3JpcHRDb3JlL3BhcnNlci9WYXJpYWJsZUVudmlyb25t
ZW50LmNwcCBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9wYXJzZXIvVmFyaWFibGVFbnZpcm9ubWVu
dC5jcHAKaW5kZXggMjhkYTE5OTc0M2UwNTZkMjRkOWUzYjVkYTZjZWVlNjlkYjA5ODRjNi4uMjY1
NGY0NjE0ZTc1Yjc1ZTJjZDkwNjUxNDA3NmRhZDBmODUwMTk2NiAxMDA2NDQKLS0tIGEvU291cmNl
L0phdmFTY3JpcHRDb3JlL3BhcnNlci9WYXJpYWJsZUVudmlyb25tZW50LmNwcAorKysgYi9Tb3Vy
Y2UvSmF2YVNjcmlwdENvcmUvcGFyc2VyL1ZhcmlhYmxlRW52aXJvbm1lbnQuY3BwCkBAIC0yMTgs
MTcgKzIxOCwxNCBAQCB2b2lkIENvbXBhY3RURFpFbnZpcm9ubWVudDo6c29ydENvbXBhY3QoQ29t
cGFjdCYgY29tcGFjdCkKIAogQ29tcGFjdFREWkVudmlyb25tZW50OjpDb21wYWN0VERaRW52aXJv
bm1lbnQoY29uc3QgVERaRW52aXJvbm1lbnQmIGVudikKIHsKLSAgICBDb21wYWN0IGNvbXBhY3RW
YXJpYWJsZXM7Ci0gICAgY29tcGFjdFZhcmlhYmxlcy5yZXNlcnZlQ2FwYWNpdHkoZW52LnNpemUo
KSk7Ci0KICAgICBtX2hhc2ggPSAwOyAvLyBOb3RlOiBYT1IgaXMgY29tbXV0YXRpdmUgc28gb3Jk
ZXIgZG9lc24ndCBtYXR0ZXIgaGVyZS4KLSAgICBmb3IgKGF1dG8mIGtleSA6IGVudikgewotICAg
ICAgICBjb21wYWN0VmFyaWFibGVzLmFwcGVuZChrZXkuZ2V0KCkpOworICAgIENvbXBhY3QgdmFy
aWFibGVzID0gV1RGOjptYXAoZW52LCBbdGhpc10oYXV0byYga2V5KSAtPiBQYWNrZWRSZWZQdHI8
VW5pcXVlZFN0cmluZ0ltcGw+IHsKICAgICAgICAgbV9oYXNoIF49IGtleS0+aGFzaCgpOwotICAg
IH0KKyAgICAgICAgcmV0dXJuIGtleS5nZXQoKTsKKyAgICB9KTsKIAotICAgIHNvcnRDb21wYWN0
KGNvbXBhY3RWYXJpYWJsZXMpOwotICAgIG1fdmFyaWFibGVzID0gV1RGTW92ZShjb21wYWN0VmFy
aWFibGVzKTsKKyAgICBzb3J0Q29tcGFjdCh2YXJpYWJsZXMpOworICAgIG1fdmFyaWFibGVzID0g
V1RGTW92ZSh2YXJpYWJsZXMpOwogfQogCiBib29sIENvbXBhY3RURFpFbnZpcm9ubWVudDo6b3Bl
cmF0b3I9PShjb25zdCBDb21wYWN0VERaRW52aXJvbm1lbnQmIG90aGVyKSBjb25zdApkaWZmIC0t
Z2l0IGEvU291cmNlL0phdmFTY3JpcHRDb3JlL3dhc20vV2FzbVdvcmtsaXN0LmNwcCBiL1NvdXJj
ZS9KYXZhU2NyaXB0Q29yZS93YXNtL1dhc21Xb3JrbGlzdC5jcHAKaW5kZXggNWJhZDBkOTBhNTYy
ZTI1ZGRlODE3YjU4MmMwNjA2NjU2YzkwNmViYS4uZmNmNzQyMzBiYmMyMWQzNTkzZGI0ZTcyMjEy
NTAxM2MyMmMyNGI0ZCAxMDA2NDQKLS0tIGEvU291cmNlL0phdmFTY3JpcHRDb3JlL3dhc20vV2Fz
bVdvcmtsaXN0LmNwcAorKysgYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvd2FzbS9XYXNtV29ya2xp
c3QuY3BwCkBAIC0yMTcsOSArMjE3LDkgQEAgV29ya2xpc3Q6OldvcmtsaXN0KCkKICAgICAsIG1f
cGxhbkVucXVldWVkKEF1dG9tYXRpY1RocmVhZENvbmRpdGlvbjo6Y3JlYXRlKCkpCiB7CiAgICAg
dW5zaWduZWQgbnVtYmVyT2ZDb21waWxhdGlvblRocmVhZHMgPSBPcHRpb25zOjp1c2VDb25jdXJy
ZW50SklUKCkgPyBrZXJuVENTTUF3YXJlTnVtYmVyT2ZQcm9jZXNzb3JDb3JlcygpIDogMTsKLSAg
ICBtX3RocmVhZHMucmVzZXJ2ZUNhcGFjaXR5KG51bWJlck9mQ29tcGlsYXRpb25UaHJlYWRzKTsK
KyAgICBtX3RocmVhZHMucmVzZXJ2ZUluaXRpYWxDYXBhY2l0eShudW1iZXJPZkNvbXBpbGF0aW9u
VGhyZWFkcyk7CiAgICAgTG9ja2VyIGxvY2tlciB7ICptX2xvY2sgfTsKLSAgICBmb3IgKHVuc2ln
bmVkIGkgPSAwOyBpIDwgbnVtYmVyT2ZDb21waWxhdGlvblRocmVhZHM7IGkrKykKKyAgICBmb3Ig
KHVuc2lnbmVkIGkgPSAwOyBpIDwgbnVtYmVyT2ZDb21waWxhdGlvblRocmVhZHM7ICsraSkKICAg
ICAgICAgbV90aHJlYWRzLnVuY2hlY2tlZEFwcGVuZChtYWtlVW5pcXVlPFdvcmtsaXN0OjpUaHJl
YWQ+KGxvY2tlciwgKnRoaXMpKTsKIH0KIApkaWZmIC0tZ2l0IGEvU291cmNlL1dURi93dGYvTGFu
Z3VhZ2UuY3BwIGIvU291cmNlL1dURi93dGYvTGFuZ3VhZ2UuY3BwCmluZGV4IGE4Mzk4ZTA1NDc1
ZTkyOTczYTY0MzRjNzAzZTFjY2M2MTA4ZjVmOWEuLjVlY2IzNmQwZTZiMWQzODc5N2EwZTgyNGY1
MTkyNTk1NTlhNmE3MDAgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XVEYvd3RmL0xhbmd1YWdlLmNwcAor
KysgYi9Tb3VyY2UvV1RGL3d0Zi9MYW5ndWFnZS5jcHAKQEAgLTI2LDYgKzI2LDcgQEAKICNpbmNs
dWRlICJjb25maWcuaCIKICNpbmNsdWRlIDx3dGYvTGFuZ3VhZ2UuaD4KIAorI2luY2x1ZGUgPHd0
Zi9Dcm9zc1RocmVhZENvcGllci5oPgogI2luY2x1ZGUgPHd0Zi9IYXNoTWFwLmg+CiAjaW5jbHVk
ZSA8d3RmL0xvY2suaD4KICNpbmNsdWRlIDx3dGYvTG9nZ2luZy5oPgpAQCAtMTIyLDE1ICsxMjMs
NiBAQCB2b2lkIG92ZXJyaWRlVXNlclByZWZlcnJlZExhbmd1YWdlcyhjb25zdCBWZWN0b3I8U3Ry
aW5nPiYgb3ZlcnJpZGUpCiAgICAgbGFuZ3VhZ2VEaWRDaGFuZ2UoKTsKIH0KIAotc3RhdGljIFZl
Y3RvcjxTdHJpbmc+IGlzb2xhdGVkQ29weShjb25zdCBWZWN0b3I8U3RyaW5nPiYgc3RyaW5ncykK
LXsKLSAgICBWZWN0b3I8U3RyaW5nPiBjb3B5OwotICAgIGNvcHkucmVzZXJ2ZUluaXRpYWxDYXBh
Y2l0eShzdHJpbmdzLnNpemUoKSk7Ci0gICAgZm9yIChhdXRvJiBsYW5ndWFnZSA6IHN0cmluZ3Mp
Ci0gICAgICAgIGNvcHkudW5jaGVja2VkQXBwZW5kKGxhbmd1YWdlLmlzb2xhdGVkQ29weSgpKTsK
LSAgICByZXR1cm4gY29weTsKLX0KLQogVmVjdG9yPFN0cmluZz4gdXNlclByZWZlcnJlZExhbmd1
YWdlcyhTaG91bGRNaW5pbWl6ZUxhbmd1YWdlcyBzaG91bGRNaW5pbWl6ZUxhbmd1YWdlcykKIHsK
ICAgICB7CkBAIC0xMzgsNyArMTMwLDcgQEAgVmVjdG9yPFN0cmluZz4gdXNlclByZWZlcnJlZExh
bmd1YWdlcyhTaG91bGRNaW5pbWl6ZUxhbmd1YWdlcyBzaG91bGRNaW5pbWl6ZUxhbmcKICAgICAg
ICAgVmVjdG9yPFN0cmluZz4mIG92ZXJyaWRlID0gcHJlZmVycmVkTGFuZ3VhZ2VzT3ZlcnJpZGUo
KTsKICAgICAgICAgaWYgKCFvdmVycmlkZS5pc0VtcHR5KCkpIHsKICAgICAgICAgICAgIExPR19X
SVRIX1NUUkVBTShMYW5ndWFnZSwgc3RyZWFtIDw8ICJMYW5ndWFnZXMgYXJlIG92ZXJyaWRkZW46
ICIgPDwgb3ZlcnJpZGUpOwotICAgICAgICAgICAgcmV0dXJuIGlzb2xhdGVkQ29weShvdmVycmlk
ZSk7CisgICAgICAgICAgICByZXR1cm4gY3Jvc3NUaHJlYWRDb3B5KG92ZXJyaWRlKTsKICAgICAg
ICAgfQogICAgIH0KIApAQCAtMTQ5LDcgKzE0MSw3IEBAIFZlY3RvcjxTdHJpbmc+IHVzZXJQcmVm
ZXJyZWRMYW5ndWFnZXMoU2hvdWxkTWluaW1pemVMYW5ndWFnZXMgc2hvdWxkTWluaW1pemVMYW5n
CiAgICAgICAgIGxhbmd1YWdlcyA9IHBsYXRmb3JtVXNlclByZWZlcnJlZExhbmd1YWdlcyhzaG91
bGRNaW5pbWl6ZUxhbmd1YWdlcyk7CiAgICAgfSBlbHNlCiAgICAgICAgIExPRyhMYW5ndWFnZSwg
InVzZXJQcmVmZXJyZWRMYW5ndWFnZXMoKSBjYWNoZSBoaXQiKTsKLSAgICByZXR1cm4gaXNvbGF0
ZWRDb3B5KGxhbmd1YWdlcyk7CisgICAgcmV0dXJuIGNyb3NzVGhyZWFkQ29weShsYW5ndWFnZXMp
OwogfQogCiAjaWYgIVBMQVRGT1JNKENPQ09BKQpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUv
TW9kdWxlcy9hc3luYy1jbGlwYm9hcmQvQ2xpcGJvYXJkLmNwcCBiL1NvdXJjZS9XZWJDb3JlL01v
ZHVsZXMvYXN5bmMtY2xpcGJvYXJkL0NsaXBib2FyZC5jcHAKaW5kZXggYzFiYzgwMDg3OTVjMmIz
ZWZjYTE3NTI3ODA5ZTYzZTgwZjQyODYwMy4uNDlmM2IzMDc1NzIxMTU3Nzc3ODU5YzBiYWIxNjAx
ZDBjZjhlOTVlOSAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvTW9kdWxlcy9hc3luYy1jbGlw
Ym9hcmQvQ2xpcGJvYXJkLmNwcAorKysgYi9Tb3VyY2UvV2ViQ29yZS9Nb2R1bGVzL2FzeW5jLWNs
aXBib2FyZC9DbGlwYm9hcmQuY3BwCkBAIC0xNzksMTAgKzE3OSw5IEBAIHZvaWQgQ2xpcGJvYXJk
OjpyZWFkKFJlZjxEZWZlcnJlZFByb21pc2U+JiYgcHJvbWlzZSkKICAgICAgICAgICAgIHJldHVy
bjsKICAgICAgICAgfQogCi0gICAgICAgIFZlY3RvcjxSZWY8Q2xpcGJvYXJkSXRlbT4+IGNsaXBi
b2FyZEl0ZW1zOwotICAgICAgICBjbGlwYm9hcmRJdGVtcy5yZXNlcnZlSW5pdGlhbENhcGFjaXR5
KGFsbEluZm8tPnNpemUoKSk7Ci0gICAgICAgIGZvciAoYXV0byYgaXRlbUluZm8gOiAqYWxsSW5m
bykKLSAgICAgICAgICAgIGNsaXBib2FyZEl0ZW1zLnVuY2hlY2tlZEFwcGVuZChDbGlwYm9hcmRJ
dGVtOjpjcmVhdGUoKnRoaXMsIGl0ZW1JbmZvKSk7CisgICAgICAgIGF1dG8gY2xpcGJvYXJkSXRl
bXMgPSBhbGxJbmZvLT5tYXAoW3RoaXNdKGF1dG8mIGl0ZW1JbmZvKSB7CisgICAgICAgICAgICBy
ZXR1cm4gQ2xpcGJvYXJkSXRlbTo6Y3JlYXRlKCp0aGlzLCBpdGVtSW5mbyk7CisgICAgICAgIH0p
OwogICAgICAgICBtX2FjdGl2ZVNlc3Npb24gPSB7eyBXVEZNb3ZlKHBhc3RlYm9hcmQpLCBXVEZN
b3ZlKGNsaXBib2FyZEl0ZW1zKSwgY2hhbmdlQ291bnRBdFN0YXJ0IH19OwogICAgIH0KIApAQCAt
MzY4LDcgKzM2Nyw3IEBAIHZvaWQgQ2xpcGJvYXJkOjpJdGVtV3JpdGVyOjpkaWRTZXRBbGxEYXRh
KCkKICAgICAgICAgICAgIHJlamVjdCgpOwogICAgICAgICAgICAgcmV0dXJuOwogICAgICAgICB9
Ci0gICAgICAgIGN1c3RvbURhdGEuYXBwZW5kKCpkYXRhKTsKKyAgICAgICAgY3VzdG9tRGF0YS51
bmNoZWNrZWRBcHBlbmQoKmRhdGEpOwogICAgIH0KIAogICAgIG1fcGFzdGVib2FyZC0+d3JpdGVD
dXN0b21EYXRhKFdURk1vdmUoY3VzdG9tRGF0YSkpOwpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNv
cmUvTW9kdWxlcy9lbmNyeXB0ZWRtZWRpYS9NZWRpYUtleVNlc3Npb24uY3BwIGIvU291cmNlL1dl
YkNvcmUvTW9kdWxlcy9lbmNyeXB0ZWRtZWRpYS9NZWRpYUtleVNlc3Npb24uY3BwCmluZGV4IDE0
Nzc2YzIwMTUxYmZlZmUzODA3OWEzMzczMGM4ODY2MjY4YmE0NmEuLjM4ZGZjYzFiOTc4NDYyMzIy
ZWM3ZDdlYmU0ODNkNjZkODc2MDJlMzAgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL01vZHVs
ZXMvZW5jcnlwdGVkbWVkaWEvTWVkaWFLZXlTZXNzaW9uLmNwcAorKysgYi9Tb3VyY2UvV2ViQ29y
ZS9Nb2R1bGVzL2VuY3J5cHRlZG1lZGlhL01lZGlhS2V5U2Vzc2lvbi5jcHAKQEAgLTcwMCwxMCAr
NzAwLDkgQEAgdm9pZCBNZWRpYUtleVNlc3Npb246OnVwZGF0ZUtleVN0YXR1c2VzKENETUluc3Rh
bmNlU2Vzc2lvbjo6S2V5U3RhdHVzVmVjdG9yJiYgaW4KICAgICAgICAgcmV0dXJuIE1lZGlhS2V5
U3RhdHVzOjpJbnRlcm5hbEVycm9yOwogICAgIH07CiAKLSAgICBtX3N0YXR1c2VzLmNsZWFyKCk7
Ci0gICAgbV9zdGF0dXNlcy5yZXNlcnZlQ2FwYWNpdHkoaW5wdXRTdGF0dXNlcy5zaXplKCkpOwot
ICAgIGZvciAoYXV0byYgc3RhdHVzIDogaW5wdXRTdGF0dXNlcykKLSAgICAgICAgbV9zdGF0dXNl
cy51bmNoZWNrZWRBcHBlbmQoeyBXVEZNb3ZlKHN0YXR1cy5maXJzdCksIHRvTWVkaWFLZXlTdGF0
dXMoc3RhdHVzLnNlY29uZCkgfSk7CisgICAgbV9zdGF0dXNlcyA9IFdURjo6bWFwKFdURk1vdmUo
aW5wdXRTdGF0dXNlcyksIFtdKGF1dG8mJiBzdGF0dXMpIHsKKyAgICAgICAgcmV0dXJuIHN0ZDo6
bWFrZV9wYWlyKFdURk1vdmUoc3RhdHVzLmZpcnN0KSwgdG9NZWRpYUtleVN0YXR1cyhzdGF0dXMu
c2Vjb25kKSk7CisgICAgfSk7CiAKICAgICAvLyA1LiBRdWV1ZSBhIHRhc2sgdG8gZmlyZSBhIHNp
bXBsZSBldmVudCBuYW1lZCBrZXlzdGF0dXNlc2NoYW5nZSBhdCB0aGUgc2Vzc2lvbi4KICAgICBx
dWV1ZVRhc2tUb0Rpc3BhdGNoRXZlbnQoKnRoaXMsIFRhc2tTb3VyY2U6Ok5ldHdvcmtpbmcsIEV2
ZW50OjpjcmVhdGUoZXZlbnROYW1lcygpLmtleXN0YXR1c2VzY2hhbmdlRXZlbnQsIEV2ZW50OjpD
YW5CdWJibGU6Ok5vLCBFdmVudDo6SXNDYW5jZWxhYmxlOjpObykpOwpkaWZmIC0tZ2l0IGEvU291
cmNlL1dlYkNvcmUvTW9kdWxlcy9lbnRyaWVzYXBpL0ZpbGVTeXN0ZW1FbnRyaWVzQ2FsbGJhY2su
Y3BwIGIvU291cmNlL1dlYkNvcmUvTW9kdWxlcy9lbnRyaWVzYXBpL0ZpbGVTeXN0ZW1FbnRyaWVz
Q2FsbGJhY2suY3BwCmluZGV4IDc1MWEyYWZkOWQwZTcyNzExN2ExMTgwZjhlYzFhZGI0MmY2ZTBl
NTIuLmY1MzIyZTg5N2M3NTYyMWZiOGRlZmQxNmQzN2YwMThjNDhiNjFlM2YgMTAwNjQ0Ci0tLSBh
L1NvdXJjZS9XZWJDb3JlL01vZHVsZXMvZW50cmllc2FwaS9GaWxlU3lzdGVtRW50cmllc0NhbGxi
YWNrLmNwcAorKysgYi9Tb3VyY2UvV2ViQ29yZS9Nb2R1bGVzL2VudHJpZXNhcGkvRmlsZVN5c3Rl
bUVudHJpZXNDYWxsYmFjay5jcHAKQEAgLTMxLDE4ICszMSw5IEBACiAKIG5hbWVzcGFjZSBXZWJD
b3JlIHsKIAotc3RhdGljIFZlY3RvcjxSZWY8RmlsZVN5c3RlbUVudHJ5Pj4gY29weVZlY3Rvcihj
b25zdCBWZWN0b3I8UmVmPEZpbGVTeXN0ZW1FbnRyeT4+JiBlbnRyaWVzKQotewotICAgIFZlY3Rv
cjxSZWY8RmlsZVN5c3RlbUVudHJ5Pj4gZW50cmllc0NvcHk7Ci0gICAgZW50cmllc0NvcHkucmVz
ZXJ2ZUluaXRpYWxDYXBhY2l0eShlbnRyaWVzLnNpemUoKSk7Ci0gICAgZm9yIChhdXRvJiBlbnRy
eSA6IGVudHJpZXMpCi0gICAgICAgIGVudHJpZXNDb3B5LnVuY2hlY2tlZEFwcGVuZChlbnRyeS5j
b3B5UmVmKCkpOwotICAgIHJldHVybiBlbnRyaWVzQ29weTsKLX0KLQogdm9pZCBGaWxlU3lzdGVt
RW50cmllc0NhbGxiYWNrOjpzY2hlZHVsZUNhbGxiYWNrKFNjcmlwdEV4ZWN1dGlvbkNvbnRleHQm
IGNvbnRleHQsIGNvbnN0IFZlY3RvcjxSZWY8RmlsZVN5c3RlbUVudHJ5Pj4mIGVudHJpZXMpCiB7
Ci0gICAgY29udGV4dC5wb3N0VGFzayhbcHJvdGVjdGVkVGhpcyA9IFJlZiB7ICp0aGlzIH0sIGVu
dHJpZXMgPSBjb3B5VmVjdG9yKGVudHJpZXMpXSAoU2NyaXB0RXhlY3V0aW9uQ29udGV4dCYpIHsK
KyAgICBjb250ZXh0LnBvc3RUYXNrKFtwcm90ZWN0ZWRUaGlzID0gUmVmIHsgKnRoaXMgfSwgZW50
cmllc10gKFNjcmlwdEV4ZWN1dGlvbkNvbnRleHQmKSB7CiAgICAgICAgIHByb3RlY3RlZFRoaXMt
PmhhbmRsZUV2ZW50KGVudHJpZXMpOwogICAgIH0pOwogfQpkaWZmIC0tZ2l0IGEvU291cmNlL1dl
YkNvcmUvTW9kdWxlcy9lbnRyaWVzYXBpL0hUTUxJbnB1dEVsZW1lbnRFbnRyaWVzQVBJLmNwcCBi
L1NvdXJjZS9XZWJDb3JlL01vZHVsZXMvZW50cmllc2FwaS9IVE1MSW5wdXRFbGVtZW50RW50cmll
c0FQSS5jcHAKaW5kZXggMDFhN2Y0ZmFiMDU1N2QzZjdhZTAyYzk0ZGM1ZGMwYTM2ZDFiM2E5Yi4u
ZmRlYTc4MzI3YTQzNDU5ZDBmYTI1NTU3ZGJkNDQ4MjZlMDM4MDY3NCAxMDA2NDQKLS0tIGEvU291
cmNlL1dlYkNvcmUvTW9kdWxlcy9lbnRyaWVzYXBpL0hUTUxJbnB1dEVsZW1lbnRFbnRyaWVzQVBJ
LmNwcAorKysgYi9Tb3VyY2UvV2ViQ29yZS9Nb2R1bGVzL2VudHJpZXNhcGkvSFRNTElucHV0RWxl
bWVudEVudHJpZXNBUEkuY3BwCkBAIC00NiwxMSArNDYsOSBAQCBWZWN0b3I8UmVmPEZpbGVTeXN0
ZW1FbnRyeT4+IEhUTUxJbnB1dEVsZW1lbnRFbnRyaWVzQVBJOjp3ZWJraXRFbnRyaWVzKFNjcmlw
dEV4ZQogICAgIGlmICghZmlsZUxpc3QpCiAgICAgICAgIHJldHVybiB7IH07CiAKLSAgICBWZWN0
b3I8UmVmPEZpbGVTeXN0ZW1FbnRyeT4+IGVudHJpZXM7Ci0gICAgZW50cmllcy5yZXNlcnZlSW5p
dGlhbENhcGFjaXR5KGZpbGVMaXN0LT5maWxlcygpLnNpemUoKSk7Ci0gICAgZm9yIChhdXRvJiBm
aWxlIDogZmlsZUxpc3QtPmZpbGVzKCkpCi0gICAgICAgIGVudHJpZXMudW5jaGVja2VkQXBwZW5k
KERPTUZpbGVTeXN0ZW06OmNyZWF0ZUVudHJ5Rm9yRmlsZShjb250ZXh0LCBmaWxlLmNvcHlSZWYo
KSkpOwotICAgIHJldHVybiBlbnRyaWVzOworICAgIHJldHVybiBmaWxlTGlzdC0+ZmlsZXMoKS5t
YXAoWyZdKGF1dG8mIGZpbGUpIHsKKyAgICAgICAgcmV0dXJuIERPTUZpbGVTeXN0ZW06OmNyZWF0
ZUVudHJ5Rm9yRmlsZShjb250ZXh0LCBmaWxlLmNvcHlSZWYoKSk7CisgICAgfSk7CiB9CiAKIH0K
ZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL01vZHVsZXMvZ2VvbG9jYXRpb24vR2VvbG9jYXRp
b25Db250cm9sbGVyLmNwcCBiL1NvdXJjZS9XZWJDb3JlL01vZHVsZXMvZ2VvbG9jYXRpb24vR2Vv
bG9jYXRpb25Db250cm9sbGVyLmNwcAppbmRleCAwN2RkNjVmM2MxYWVlNzllYjljNzMyODM2YTJk
NWFhZDAxNzMzM2NmLi43ZGQ0NjM4MjE3ZWM1MDUxOTBkNjIxOTgxNzc1NDEwZDMwNmM2YTRhIDEw
MDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9Nb2R1bGVzL2dlb2xvY2F0aW9uL0dlb2xvY2F0aW9u
Q29udHJvbGxlci5jcHAKKysrIGIvU291cmNlL1dlYkNvcmUvTW9kdWxlcy9nZW9sb2NhdGlvbi9H
ZW9sb2NhdGlvbkNvbnRyb2xsZXIuY3BwCkBAIC0xMTgsMjEgKzExOCwxMyBAQCB2b2lkIEdlb2xv
Y2F0aW9uQ29udHJvbGxlcjo6Y2FuY2VsUGVybWlzc2lvblJlcXVlc3QoR2VvbG9jYXRpb24mIGdl
b2xvY2F0aW9uKQogdm9pZCBHZW9sb2NhdGlvbkNvbnRyb2xsZXI6OnBvc2l0aW9uQ2hhbmdlZChj
b25zdCBzdGQ6Om9wdGlvbmFsPEdlb2xvY2F0aW9uUG9zaXRpb25EYXRhPiYgcG9zaXRpb24pCiB7
CiAgICAgbV9sYXN0UG9zaXRpb24gPSBwb3NpdGlvbjsKLSAgICBWZWN0b3I8UmVmPEdlb2xvY2F0
aW9uPj4gb2JzZXJ2ZXJzVmVjdG9yOwotICAgIG9ic2VydmVyc1ZlY3Rvci5yZXNlcnZlSW5pdGlh
bENhcGFjaXR5KG1fb2JzZXJ2ZXJzLnNpemUoKSk7Ci0gICAgZm9yIChhdXRvJiBvYnNlcnZlciA6
IG1fb2JzZXJ2ZXJzKQotICAgICAgICBvYnNlcnZlcnNWZWN0b3IudW5jaGVja2VkQXBwZW5kKG9i
c2VydmVyLmNvcHlSZWYoKSk7Ci0gICAgZm9yIChhdXRvJiBvYnNlcnZlciA6IG9ic2VydmVyc1Zl
Y3RvcikKKyAgICBmb3IgKGF1dG8mIG9ic2VydmVyIDogY29weVRvVmVjdG9yT2Y8UmVmPEdlb2xv
Y2F0aW9uPj4obV9vYnNlcnZlcnMpKQogICAgICAgICBvYnNlcnZlci0+cG9zaXRpb25DaGFuZ2Vk
KCk7CiB9CiAKIHZvaWQgR2VvbG9jYXRpb25Db250cm9sbGVyOjplcnJvck9jY3VycmVkKEdlb2xv
Y2F0aW9uRXJyb3ImIGVycm9yKQogewotICAgIFZlY3RvcjxSZWY8R2VvbG9jYXRpb24+PiBvYnNl
cnZlcnNWZWN0b3I7Ci0gICAgb2JzZXJ2ZXJzVmVjdG9yLnJlc2VydmVJbml0aWFsQ2FwYWNpdHko
bV9vYnNlcnZlcnMuc2l6ZSgpKTsKLSAgICBmb3IgKGF1dG8mIG9ic2VydmVyIDogbV9vYnNlcnZl
cnMpCi0gICAgICAgIG9ic2VydmVyc1ZlY3Rvci51bmNoZWNrZWRBcHBlbmQob2JzZXJ2ZXIuY29w
eVJlZigpKTsKLSAgICBmb3IgKGF1dG8mIG9ic2VydmVyIDogb2JzZXJ2ZXJzVmVjdG9yKQorICAg
IGZvciAoYXV0byYgb2JzZXJ2ZXIgOiBjb3B5VG9WZWN0b3JPZjxSZWY8R2VvbG9jYXRpb24+Piht
X29ic2VydmVycykpCiAgICAgICAgIG9ic2VydmVyLT5zZXRFcnJvcihlcnJvcik7CiB9CiAKZGlm
ZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL01vZHVsZXMvaW5kZXhlZGRiL0lEQkRhdGFiYXNlLmNw
cCBiL1NvdXJjZS9XZWJDb3JlL01vZHVsZXMvaW5kZXhlZGRiL0lEQkRhdGFiYXNlLmNwcAppbmRl
eCAxNjE4OTY0YTU4YzVjODNmZWNiZmVmZDFjMjk0ZjVhY2ZkODc4MTJkLi43YWE2MzJiN2VjMDQ3
YmU0NjA4YjUxYTA5NGVhMWE0ZTU3YTI2MjliIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9N
b2R1bGVzL2luZGV4ZWRkYi9JREJEYXRhYmFzZS5jcHAKKysrIGIvU291cmNlL1dlYkNvcmUvTW9k
dWxlcy9pbmRleGVkZGIvSURCRGF0YWJhc2UuY3BwCkBAIC0zMTcsMTUgKzMxNyw4IEBAIHZvaWQg
SURCRGF0YWJhc2U6OnN0b3AoKQogCiAgICAgcmVtb3ZlQWxsRXZlbnRMaXN0ZW5lcnMoKTsKIAot
ICAgIFZlY3RvcjxJREJSZXNvdXJjZUlkZW50aWZpZXI+IHRyYW5zYWN0aW9uSWRlbnRpZmllcnM7
Ci0gICAgdHJhbnNhY3Rpb25JZGVudGlmaWVycy5yZXNlcnZlSW5pdGlhbENhcGFjaXR5KG1fYWN0
aXZlVHJhbnNhY3Rpb25zLnNpemUoKSk7Ci0KLSAgICBmb3IgKGF1dG8mIGlkIDogbV9hY3RpdmVU
cmFuc2FjdGlvbnMua2V5cygpKQotICAgICAgICB0cmFuc2FjdGlvbklkZW50aWZpZXJzLnVuY2hl
Y2tlZEFwcGVuZChpZCk7Ci0KLSAgICBmb3IgKGF1dG8mIGlkIDogdHJhbnNhY3Rpb25JZGVudGlm
aWVycykgewotICAgICAgICBJREJUcmFuc2FjdGlvbiogdHJhbnNhY3Rpb24gPSBtX2FjdGl2ZVRy
YW5zYWN0aW9ucy5nZXQoaWQpOwotICAgICAgICBpZiAodHJhbnNhY3Rpb24pCisgICAgZm9yIChh
dXRvJiBpZCA6IGNvcHlUb1ZlY3RvcihtX2FjdGl2ZVRyYW5zYWN0aW9ucy5rZXlzKCkpKSB7Cisg
ICAgICAgIGlmIChhdXRvKiB0cmFuc2FjdGlvbiA9IG1fYWN0aXZlVHJhbnNhY3Rpb25zLmdldChp
ZCkpCiAgICAgICAgICAgICB0cmFuc2FjdGlvbi0+c3RvcCgpOwogICAgIH0KIApkaWZmIC0tZ2l0
IGEvU291cmNlL1dlYkNvcmUvTW9kdWxlcy9pbmRleGVkZGIvSURCR2V0QWxsUmVzdWx0LmNwcCBi
L1NvdXJjZS9XZWJDb3JlL01vZHVsZXMvaW5kZXhlZGRiL0lEQkdldEFsbFJlc3VsdC5jcHAKaW5k
ZXggZWVhZmY3MTVhNWE0ODM5MjMwZjAxMjE0ZTMzZWQxYTgzYjFkN2FiZS4uNzMzZTllNjFhZmIx
ZWY5NmI2NjllZGI3MzE1MjJjNWJhNGUxMWJmZSAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUv
TW9kdWxlcy9pbmRleGVkZGIvSURCR2V0QWxsUmVzdWx0LmNwcAorKysgYi9Tb3VyY2UvV2ViQ29y
ZS9Nb2R1bGVzL2luZGV4ZWRkYi9JREJHZXRBbGxSZXN1bHQuY3BwCkBAIC00OSw3ICs0OSw3IEBA
IHZvaWQgSURCR2V0QWxsUmVzdWx0Ojppc29sYXRlZENvcHkoY29uc3QgSURCR2V0QWxsUmVzdWx0
JiBzb3VyY2UsIElEQkdldEFsbFJlc3VsCiAgICAgZGVzdGluYXRpb24ubV90eXBlID0gc291cmNl
Lm1fdHlwZTsKICAgICBkZXN0aW5hdGlvbi5tX2tleXMgPSBjcm9zc1RocmVhZENvcHkoc291cmNl
Lm1fa2V5cyk7CiAgICAgZGVzdGluYXRpb24ubV92YWx1ZXMgPSBjcm9zc1RocmVhZENvcHkoc291
cmNlLm1fdmFsdWVzKTsKLSAgICBkZXN0aW5hdGlvbi5tX2tleVBhdGggPSBXZWJDb3JlOjppc29s
YXRlZENvcHkoc291cmNlLm1fa2V5UGF0aCk7CisgICAgZGVzdGluYXRpb24ubV9rZXlQYXRoID0g
Y3Jvc3NUaHJlYWRDb3B5KHNvdXJjZS5tX2tleVBhdGgpOwogfQogCiB2b2lkIElEQkdldEFsbFJl
c3VsdDo6YWRkS2V5KElEQktleURhdGEmJiBrZXkpCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29y
ZS9Nb2R1bGVzL2luZGV4ZWRkYi9JREJHZXRSZXN1bHQuY3BwIGIvU291cmNlL1dlYkNvcmUvTW9k
dWxlcy9pbmRleGVkZGIvSURCR2V0UmVzdWx0LmNwcAppbmRleCA3NjJmOTQxYjgzYjk2ZWZjZTQ2
NDBmMzMxZDU1NzdhMTBkZDcyNmFkLi41NDc5ZDYxZjFmMDNhOWYyZjJmZTM5M2NmNzJkYzI5NTIy
ZDU0ZjUyIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9Nb2R1bGVzL2luZGV4ZWRkYi9JREJH
ZXRSZXN1bHQuY3BwCisrKyBiL1NvdXJjZS9XZWJDb3JlL01vZHVsZXMvaW5kZXhlZGRiL0lEQkdl
dFJlc3VsdC5jcHAKQEAgLTI2LDYgKzI2LDcgQEAKICNpbmNsdWRlICJjb25maWcuaCIKICNpbmNs
dWRlICJJREJHZXRSZXN1bHQuaCIKIAorI2luY2x1ZGUgPHd0Zi9Dcm9zc1RocmVhZENvcGllci5o
PgogI2luY2x1ZGUgPHd0Zi9Jc29NYWxsb2NJbmxpbmVzLmg+CiAKIG5hbWVzcGFjZSBXZWJDb3Jl
IHsKQEAgLTQ3LDcgKzQ4LDcgQEAgdm9pZCBJREJHZXRSZXN1bHQ6Omlzb2xhdGVkQ29weShjb25z
dCBJREJHZXRSZXN1bHQmIHNvdXJjZSwgSURCR2V0UmVzdWx0JiBkZXN0aW4KICAgICBkZXN0aW5h
dGlvbi5tX3ZhbHVlID0gc291cmNlLm1fdmFsdWUuaXNvbGF0ZWRDb3B5KCk7CiAgICAgZGVzdGlu
YXRpb24ubV9rZXlEYXRhID0gc291cmNlLm1fa2V5RGF0YS5pc29sYXRlZENvcHkoKTsKICAgICBk
ZXN0aW5hdGlvbi5tX3ByaW1hcnlLZXlEYXRhID0gc291cmNlLm1fcHJpbWFyeUtleURhdGEuaXNv
bGF0ZWRDb3B5KCk7Ci0gICAgZGVzdGluYXRpb24ubV9rZXlQYXRoID0gV2ViQ29yZTo6aXNvbGF0
ZWRDb3B5KHNvdXJjZS5tX2tleVBhdGgpOworICAgIGRlc3RpbmF0aW9uLm1fa2V5UGF0aCA9IGNy
b3NzVGhyZWFkQ29weShzb3VyY2UubV9rZXlQYXRoKTsKICAgICBkZXN0aW5hdGlvbi5tX2lzRGVm
aW5lZCA9IHNvdXJjZS5tX2lzRGVmaW5lZDsKICAgICBkZXN0aW5hdGlvbi5tX3ByZWZldGNoZWRS
ZWNvcmRzID0gc291cmNlLm1fcHJlZmV0Y2hlZFJlY29yZHMuaXNvbGF0ZWRDb3B5KCk7CiB9CmRp
ZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9Nb2R1bGVzL2luZGV4ZWRkYi9JREJLZXlQYXRoLmNw
cCBiL1NvdXJjZS9XZWJDb3JlL01vZHVsZXMvaW5kZXhlZGRiL0lEQktleVBhdGguY3BwCmluZGV4
IGZkNmQ1YTM5OWIzZmNhNjYyNGZmMzQ5NGRiYWU4NzdmNThiNDE0MWQuLmM4MjkxMTZlNjQ0NzU2
Y2I3NjYxZDZjZThlZjY3ZjY1MjliYTkzMmMgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL01v
ZHVsZXMvaW5kZXhlZGRiL0lEQktleVBhdGguY3BwCisrKyBiL1NvdXJjZS9XZWJDb3JlL01vZHVs
ZXMvaW5kZXhlZGRiL0lEQktleVBhdGguY3BwCkBAIC0yMDYsMjEgKzIwNiw2IEBAIGJvb2wgaXNJ
REJLZXlQYXRoVmFsaWQoY29uc3QgSURCS2V5UGF0aCYga2V5UGF0aCkKICAgICByZXR1cm4gc3Rk
Ojp2aXNpdCh2aXNpdG9yLCBrZXlQYXRoKTsKIH0KIAotSURCS2V5UGF0aCBpc29sYXRlZENvcHko
Y29uc3QgSURCS2V5UGF0aCYga2V5UGF0aCkKLXsKLSAgICBhdXRvIHZpc2l0b3IgPSBXVEY6Om1h
a2VWaXNpdG9yKFtdKGNvbnN0IFN0cmluZyYgc3RyaW5nKSAtPiBJREJLZXlQYXRoIHsKLSAgICAg
ICAgcmV0dXJuIHN0cmluZy5pc29sYXRlZENvcHkoKTsKLSAgICB9LCBbXShjb25zdCBWZWN0b3I8
U3RyaW5nPiYgdmVjdG9yKSAtPiBJREJLZXlQYXRoIHsKLSAgICAgICAgVmVjdG9yPFN0cmluZz4g
dmVjdG9yQ29weTsKLSAgICAgICAgdmVjdG9yQ29weS5yZXNlcnZlSW5pdGlhbENhcGFjaXR5KHZl
Y3Rvci5zaXplKCkpOwotICAgICAgICBmb3IgKGF1dG8mIHN0cmluZyA6IHZlY3RvcikKLSAgICAg
ICAgICAgIHZlY3RvckNvcHkudW5jaGVja2VkQXBwZW5kKHN0cmluZy5pc29sYXRlZENvcHkoKSk7
Ci0gICAgICAgIHJldHVybiB2ZWN0b3JDb3B5OwotICAgIH0pOwotCi0gICAgcmV0dXJuIHN0ZDo6
dmlzaXQodmlzaXRvciwga2V5UGF0aCk7Ci19Ci0KICNpZiAhTE9HX0RJU0FCTEVECiBTdHJpbmcg
bG9nZ2luZ1N0cmluZyhjb25zdCBJREJLZXlQYXRoJiBwYXRoKQogewpkaWZmIC0tZ2l0IGEvU291
cmNlL1dlYkNvcmUvTW9kdWxlcy9pbmRleGVkZGIvSURCS2V5UGF0aC5oIGIvU291cmNlL1dlYkNv
cmUvTW9kdWxlcy9pbmRleGVkZGIvSURCS2V5UGF0aC5oCmluZGV4IDIwMzZmZjc1NGU1ZWE5ZjMy
ZmIxZjJlZDU4ZmM4OTFjZTg2MzZiMDYuLjRiMzkyNjVkYWM3N2E2MzA5ZDkyNWM5MDI0YTJlYWIy
NDRkNzJiZWYgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL01vZHVsZXMvaW5kZXhlZGRiL0lE
QktleVBhdGguaAorKysgYi9Tb3VyY2UvV2ViQ29yZS9Nb2R1bGVzL2luZGV4ZWRkYi9JREJLZXlQ
YXRoLmgKQEAgLTQzLDEzICs0Myw2IEBAIGVudW0gY2xhc3MgSURCS2V5UGF0aFBhcnNlRXJyb3Ig
ewogfTsKIAogdm9pZCBJREJQYXJzZUtleVBhdGgoY29uc3QgU3RyaW5nJiwgVmVjdG9yPFN0cmlu
Zz4mLCBJREJLZXlQYXRoUGFyc2VFcnJvciYpOwotSURCS2V5UGF0aCBpc29sYXRlZENvcHkoY29u
c3QgSURCS2V5UGF0aCYpOwotaW5saW5lIHN0ZDo6b3B0aW9uYWw8SURCS2V5UGF0aD4gaXNvbGF0
ZWRDb3B5KGNvbnN0IHN0ZDo6b3B0aW9uYWw8SURCS2V5UGF0aD4mIHZhcmlhbnQpCi17Ci0gICAg
aWYgKCF2YXJpYW50KQotICAgICAgICByZXR1cm4geyB9OwotICAgIHJldHVybiBpc29sYXRlZENv
cHkodmFyaWFudC52YWx1ZSgpKTsKLX0KIAogI2lmICFMT0dfRElTQUJMRUQKIFN0cmluZyBsb2dn
aW5nU3RyaW5nKGNvbnN0IElEQktleVBhdGgmKTsKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3Jl
L01vZHVsZXMvaW5kZXhlZGRiL0lEQlRyYW5zYWN0aW9uLmNwcCBiL1NvdXJjZS9XZWJDb3JlL01v
ZHVsZXMvaW5kZXhlZGRiL0lEQlRyYW5zYWN0aW9uLmNwcAppbmRleCA1YTAzNjBjNGI4ZWI2Y2Q0
ZmMxZmQ1MWQ5NzE0Y2UxZDJjNzQ1MDM0Li42YzExMjFiNzMxMGY3MzdmN2I5NWJlY2VlODQ1NGU2
YWM1MGRmMmI2IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9Nb2R1bGVzL2luZGV4ZWRkYi9J
REJUcmFuc2FjdGlvbi5jcHAKKysrIGIvU291cmNlL1dlYkNvcmUvTW9kdWxlcy9pbmRleGVkZGIv
SURCVHJhbnNhY3Rpb24uY3BwCkBAIC0yNjksMTAgKzI2OSw4IEBAIHZvaWQgSURCVHJhbnNhY3Rp
b246OmFib3J0SW5Qcm9ncmVzc09wZXJhdGlvbnMoY29uc3QgSURCRXJyb3ImIGVycm9yKQogewog
ICAgIExPRyhJbmRleGVkREIsICJJREJUcmFuc2FjdGlvbjo6YWJvcnRJblByb2dyZXNzT3BlcmF0
aW9ucyIpOwogCi0gICAgVmVjdG9yPFJlZlB0cjxJREJDbGllbnQ6OlRyYW5zYWN0aW9uT3BlcmF0
aW9uPj4gaW5Qcm9ncmVzc0Fib3J0VmVjdG9yOwotICAgIGluUHJvZ3Jlc3NBYm9ydFZlY3Rvci5y
ZXNlcnZlSW5pdGlhbENhcGFjaXR5KG1fdHJhbnNhY3Rpb25PcGVyYXRpb25zSW5Qcm9ncmVzc1F1
ZXVlLnNpemUoKSk7Ci0gICAgd2hpbGUgKCFtX3RyYW5zYWN0aW9uT3BlcmF0aW9uc0luUHJvZ3Jl
c3NRdWV1ZS5pc0VtcHR5KCkpCi0gICAgICAgIGluUHJvZ3Jlc3NBYm9ydFZlY3Rvci51bmNoZWNr
ZWRBcHBlbmQobV90cmFuc2FjdGlvbk9wZXJhdGlvbnNJblByb2dyZXNzUXVldWUudGFrZUZpcnN0
KCkpOworICAgIGF1dG8gaW5Qcm9ncmVzc0Fib3J0VmVjdG9yID0gY29weVRvVmVjdG9yT2Y8UmVm
UHRyPElEQkNsaWVudDo6VHJhbnNhY3Rpb25PcGVyYXRpb24+PihtX3RyYW5zYWN0aW9uT3BlcmF0
aW9uc0luUHJvZ3Jlc3NRdWV1ZSk7CisgICAgbV90cmFuc2FjdGlvbk9wZXJhdGlvbnNJblByb2dy
ZXNzUXVldWUuY2xlYXIoKTsKIAogICAgIGZvciAoYXV0byYgb3BlcmF0aW9uIDogaW5Qcm9ncmVz
c0Fib3J0VmVjdG9yKSB7CiAgICAgICAgIG1fdHJhbnNhY3Rpb25PcGVyYXRpb25zSW5Qcm9ncmVz
c1F1ZXVlLmFwcGVuZChvcGVyYXRpb24uZ2V0KCkpOwpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNv
cmUvTW9kdWxlcy9pbmRleGVkZGIvY2xpZW50L0lEQkNvbm5lY3Rpb25Qcm94eS5jcHAgYi9Tb3Vy
Y2UvV2ViQ29yZS9Nb2R1bGVzL2luZGV4ZWRkYi9jbGllbnQvSURCQ29ubmVjdGlvblByb3h5LmNw
cAppbmRleCA2Njc4MmVjZGUzZTQ3MjFlY2I0YjM0YzBkZDIwMzdjOTE1ZTI4ZGZiLi4xY2U5MDc3
YzBlMWRmNmNiM2IxZmU5NTFjMjk2ZTgxY2E4ODE1ZGQ5IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2Vi
Q29yZS9Nb2R1bGVzL2luZGV4ZWRkYi9jbGllbnQvSURCQ29ubmVjdGlvblByb3h5LmNwcAorKysg
Yi9Tb3VyY2UvV2ViQ29yZS9Nb2R1bGVzL2luZGV4ZWRkYi9jbGllbnQvSURCQ29ubmVjdGlvblBy
b3h5LmNwcApAQCAtNTc1LDE3ICs1NzUsOSBAQCB2b2lkIHJlbW92ZUl0ZW1zTWF0Y2hpbmdDdXJy
ZW50VGhyZWFkKEhhc2hNYXA8S2V5VHlwZSwgVmFsdWVUeXBlPiYgbWFwKQogewogICAgIC8vIEZJ
WE1FOiBSZXZpc2l0IHdoZW4gaW50cm9kdWNpbmcgV2ViVGhyZWFkIGF3YXJlIHRocmVhZCBjb21w
YXJpc29uLgogICAgIC8vIGh0dHBzOi8vYnVncy53ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9pZD0y
MDQzNDUKLSAgICBhdXRvJiBjdXJyZW50VGhyZWFkID0gVGhyZWFkOjpjdXJyZW50KCk7Ci0KLSAg
ICBWZWN0b3I8S2V5VHlwZT4ga2V5czsKLSAgICBrZXlzLnJlc2VydmVJbml0aWFsQ2FwYWNpdHko
bWFwLnNpemUoKSk7Ci0gICAgZm9yIChhdXRvJiBpdGVyYXRvciA6IG1hcCkgewotICAgICAgICBp
ZiAoJml0ZXJhdG9yLnZhbHVlLT5vcmlnaW5UaHJlYWQoKSA9PSAmY3VycmVudFRocmVhZCkKLSAg
ICAgICAgICAgIGtleXMudW5jaGVja2VkQXBwZW5kKGl0ZXJhdG9yLmtleSk7Ci0gICAgfQotCi0g
ICAgZm9yIChhdXRvJiBrZXkgOiBrZXlzKQotICAgICAgICBtYXAucmVtb3ZlKGtleSk7CisgICAg
bWFwLnJlbW92ZUlmKFtjdXJyZW50VGhyZWFkID0gJlRocmVhZDo6Y3VycmVudCgpXShhdXRvJiBl
bnRyeSkgeworICAgICAgICByZXR1cm4gJmVudHJ5LnZhbHVlLT5vcmlnaW5UaHJlYWQoKSA9PSBj
dXJyZW50VGhyZWFkOworICAgIH0pOwogfQogCiB0ZW1wbGF0ZTx0eXBlbmFtZSBLZXlUeXBlLCB0
eXBlbmFtZSBWYWx1ZVR5cGU+CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9Nb2R1bGVzL2lu
ZGV4ZWRkYi9zZXJ2ZXIvTWVtb3J5T2JqZWN0U3RvcmUuY3BwIGIvU291cmNlL1dlYkNvcmUvTW9k
dWxlcy9pbmRleGVkZGIvc2VydmVyL01lbW9yeU9iamVjdFN0b3JlLmNwcAppbmRleCBlMDFlZTAy
YjcxNTIzOTljYzcyNmZiMThiYzM0OTE0NjA0ZGU3M2VjLi4yYjQ3NTg4NzVlYWU0NTBmMGU0ZWM2
Nzg3MTVkYTEwOGY4MDlmNGZmIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9Nb2R1bGVzL2lu
ZGV4ZWRkYi9zZXJ2ZXIvTWVtb3J5T2JqZWN0U3RvcmUuY3BwCisrKyBiL1NvdXJjZS9XZWJDb3Jl
L01vZHVsZXMvaW5kZXhlZGRiL3NlcnZlci9NZW1vcnlPYmplY3RTdG9yZS5jcHAKQEAgLTE1NSwx
MiArMTU1LDkgQEAgSURCRXJyb3IgTWVtb3J5T2JqZWN0U3RvcmU6OmRlbGV0ZUluZGV4KE1lbW9y
eUJhY2tpbmdTdG9yZVRyYW5zYWN0aW9uJiB0cmFuc2FjdGkKIAogdm9pZCBNZW1vcnlPYmplY3RT
dG9yZTo6ZGVsZXRlQWxsSW5kZXhlcyhNZW1vcnlCYWNraW5nU3RvcmVUcmFuc2FjdGlvbiYgdHJh
bnNhY3Rpb24pCiB7Ci0gICAgVmVjdG9yPHVpbnQ2NF90PiBpbmRleElkZW50aWZpZXJzOwotICAg
IGluZGV4SWRlbnRpZmllcnMucmVzZXJ2ZUluaXRpYWxDYXBhY2l0eShtX2luZGV4ZXNCeU5hbWUu
c2l6ZSgpKTsKLQotICAgIGZvciAoYXV0byYgaW5kZXggOiBtX2luZGV4ZXNCeU5hbWUudmFsdWVz
KCkpCi0gICAgICAgIGluZGV4SWRlbnRpZmllcnMudW5jaGVja2VkQXBwZW5kKGluZGV4LT5pbmZv
KCkuaWRlbnRpZmllcigpKTsKLQorICAgIGF1dG8gaW5kZXhJZGVudGlmaWVycyA9IFdURjo6bWFw
KG1faW5kZXhlc0J5TmFtZSwgW10oYXV0byYgZW50cnkpIHsKKyAgICAgICAgcmV0dXJuIGVudHJ5
LnZhbHVlLT5pbmZvKCkuaWRlbnRpZmllcigpOworICAgIH0pOwogICAgIGZvciAoYXV0byBpZGVu
dGlmaWVyIDogaW5kZXhJZGVudGlmaWVycykKICAgICAgICAgZGVsZXRlSW5kZXgodHJhbnNhY3Rp
b24sIGlkZW50aWZpZXIpOwogfQpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvTW9kdWxlcy9p
bmRleGVkZGIvc2VydmVyL1NRTGl0ZUlEQkN1cnNvci5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9Nb2R1
bGVzL2luZGV4ZWRkYi9zZXJ2ZXIvU1FMaXRlSURCQ3Vyc29yLmNwcAppbmRleCA0ODYxMDM0ZDNh
MTJkYTBjMDljZmVkZmU5ZjJlYTY1YTY4MTAwMzUyLi42NjdmNWU3OTU3YjRiNjU3NmI4MjNhNjVj
MDQ4OWFhY2Q0Nzg5MzhkIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9Nb2R1bGVzL2luZGV4
ZWRkYi9zZXJ2ZXIvU1FMaXRlSURCQ3Vyc29yLmNwcAorKysgYi9Tb3VyY2UvV2ViQ29yZS9Nb2R1
bGVzL2luZGV4ZWRkYi9zZXJ2ZXIvU1FMaXRlSURCQ3Vyc29yLmNwcApAQCAtMTE2LDE3ICsxMTYs
MTggQEAgdm9pZCBTUUxpdGVJREJDdXJzb3I6OmN1cnJlbnREYXRhKElEQkdldFJlc3VsdCYgcmVz
dWx0LCBjb25zdCBzdGQ6Om9wdGlvbmFsPElEQksKICAgICB9CiAKICAgICBWZWN0b3I8SURCQ3Vy
c29yUmVjb3JkPiBwcmVmZXRjaGVkUmVjb3JkczsKLSAgICBwcmVmZXRjaGVkUmVjb3Jkcy5yZXNl
cnZlQ2FwYWNpdHkobV9mZXRjaGVkUmVjb3Jkcy5zaXplKCkpOworICAgIHByZWZldGNoZWRSZWNv
cmRzLnJlc2VydmVJbml0aWFsQ2FwYWNpdHkobV9mZXRjaGVkUmVjb3Jkcy5zaXplKCkpOworICAg
IGJvb2wgaXNGaXJzdCA9IHRydWU7CiAgICAgZm9yIChhdXRvJiByZWNvcmQgOiBtX2ZldGNoZWRS
ZWNvcmRzKSB7CiAgICAgICAgIGlmIChyZWNvcmQuaXNUZXJtaW5hbFJlY29yZCgpKQogICAgICAg
ICAgICAgYnJlYWs7Ci0KLSAgICAgICAgcHJlZmV0Y2hlZFJlY29yZHMuYXBwZW5kKHJlY29yZC5y
ZWNvcmQpOworICAgICAgICBpZiAoaXNGaXJzdCkgeworICAgICAgICAgICAgaXNGaXJzdCA9IGZh
bHNlOworICAgICAgICAgICAgY29udGludWU7CisgICAgICAgIH0KKyAgICAgICAgcHJlZmV0Y2hl
ZFJlY29yZHMudW5jaGVja2VkQXBwZW5kKHJlY29yZC5yZWNvcmQpOwogICAgIH0KLQotICAgIC8v
IEZpcnN0IHJlY29yZCB3aWxsIGJlIHJldHVybmVkIGFzIGN1cnJlbnQgcmVjb3JkLgotICAgIGlm
ICghcHJlZmV0Y2hlZFJlY29yZHMuaXNFbXB0eSgpKQotICAgICAgICBwcmVmZXRjaGVkUmVjb3Jk
cy5yZW1vdmUoMCk7CisgICAgcHJlZmV0Y2hlZFJlY29yZHMuc2hyaW5rVG9GaXQoKTsKIAogICAg
IHJlc3VsdCA9IHsgY3VycmVudFJlY29yZC5yZWNvcmQua2V5LCBjdXJyZW50UmVjb3JkLnJlY29y
ZC5wcmltYXJ5S2V5LCBJREJWYWx1ZShjdXJyZW50UmVjb3JkLnJlY29yZC52YWx1ZSksIGtleVBh
dGgsIFdURk1vdmUocHJlZmV0Y2hlZFJlY29yZHMpIH07CiB9CmRpZmYgLS1naXQgYS9Tb3VyY2Uv
V2ViQ29yZS9Nb2R1bGVzL2luZGV4ZWRkYi9zaGFyZWQvSURCRGF0YWJhc2VJbmZvLmNwcCBiL1Nv
dXJjZS9XZWJDb3JlL01vZHVsZXMvaW5kZXhlZGRiL3NoYXJlZC9JREJEYXRhYmFzZUluZm8uY3Bw
CmluZGV4IGFiYWVjNmM1Y2ZiY2VkOWZjNjZlZjU0ZmQ4ZGZkMmM3YTI3YzkxNmMuLjhmNjUwMzVl
ZDRlYWQ5NTgyYjhiNzhlMmNlNzdkNTIzMzhjZmJiM2YgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJD
b3JlL01vZHVsZXMvaW5kZXhlZGRiL3NoYXJlZC9JREJEYXRhYmFzZUluZm8uY3BwCisrKyBiL1Nv
dXJjZS9XZWJDb3JlL01vZHVsZXMvaW5kZXhlZGRiL3NoYXJlZC9JREJEYXRhYmFzZUluZm8uY3Bw
CkBAIC0xMzYsMTIgKzEzNiw5IEBAIHZvaWQgSURCRGF0YWJhc2VJbmZvOjpyZW5hbWVPYmplY3RT
dG9yZSh1aW50NjRfdCBvYmplY3RTdG9yZUlkZW50aWZpZXIsIGNvbnN0IFN0CiAKIFZlY3RvcjxT
dHJpbmc+IElEQkRhdGFiYXNlSW5mbzo6b2JqZWN0U3RvcmVOYW1lcygpIGNvbnN0CiB7Ci0gICAg
VmVjdG9yPFN0cmluZz4gbmFtZXM7Ci0gICAgbmFtZXMucmVzZXJ2ZUNhcGFjaXR5KG1fb2JqZWN0
U3RvcmVNYXAuc2l6ZSgpKTsKLSAgICBmb3IgKGF1dG8mIG9iamVjdFN0b3JlIDogbV9vYmplY3RT
dG9yZU1hcC52YWx1ZXMoKSkKLSAgICAgICAgbmFtZXMudW5jaGVja2VkQXBwZW5kKG9iamVjdFN0
b3JlLm5hbWUoKSk7Ci0KLSAgICByZXR1cm4gbmFtZXM7CisgICAgcmV0dXJuIFdURjo6bWFwKG1f
b2JqZWN0U3RvcmVNYXAsIFtdKGF1dG8mIHBhaXIpIHsKKyAgICAgICAgcmV0dXJuIHBhaXIudmFs
dWUubmFtZSgpOworICAgIH0pOwogfQogCiB2b2lkIElEQkRhdGFiYXNlSW5mbzo6ZGVsZXRlT2Jq
ZWN0U3RvcmUoY29uc3QgU3RyaW5nJiBvYmplY3RTdG9yZU5hbWUpCmRpZmYgLS1naXQgYS9Tb3Vy
Y2UvV2ViQ29yZS9Nb2R1bGVzL2luZGV4ZWRkYi9zaGFyZWQvSURCSW5kZXhJbmZvLmNwcCBiL1Nv
dXJjZS9XZWJDb3JlL01vZHVsZXMvaW5kZXhlZGRiL3NoYXJlZC9JREJJbmRleEluZm8uY3BwCmlu
ZGV4IDM4MTY4ZWMyOTlkYTdkODgwZmIwN2MwMWJkNDZjMjc0ZWNiZTM3M2QuLjAxNWFjZjcyNzY5
NDUzNzRjNGFkYjhhZDI0MzRiYTNiNzk5YWFmZGEgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3Jl
L01vZHVsZXMvaW5kZXhlZGRiL3NoYXJlZC9JREJJbmRleEluZm8uY3BwCisrKyBiL1NvdXJjZS9X
ZWJDb3JlL01vZHVsZXMvaW5kZXhlZGRiL3NoYXJlZC9JREJJbmRleEluZm8uY3BwCkBAIC0yNiw2
ICsyNiw3IEBACiAjaW5jbHVkZSAiY29uZmlnLmgiCiAjaW5jbHVkZSAiSURCSW5kZXhJbmZvLmgi
CiAKKyNpbmNsdWRlIDx3dGYvQ3Jvc3NUaHJlYWRDb3BpZXIuaD4KICNpbmNsdWRlIDx3dGYvdGV4
dC9TdHJpbmdDb25jYXRlbmF0ZU51bWJlcnMuaD4KIAogbmFtZXNwYWNlIFdlYkNvcmUgewpAQCAt
NDYsNyArNDcsNyBAQCBJREJJbmRleEluZm86OklEQkluZGV4SW5mbyh1aW50NjRfdCBpZGVudGlm
aWVyLCB1aW50NjRfdCBvYmplY3RTdG9yZUlkZW50aWZpZXIsCiAKIElEQkluZGV4SW5mbyBJREJJ
bmRleEluZm86Omlzb2xhdGVkQ29weSgpIGNvbnN0CiB7Ci0gICAgcmV0dXJuIHsgbV9pZGVudGlm
aWVyLCBtX29iamVjdFN0b3JlSWRlbnRpZmllciwgbV9uYW1lLmlzb2xhdGVkQ29weSgpLCBXZWJD
b3JlOjppc29sYXRlZENvcHkobV9rZXlQYXRoKSwgbV91bmlxdWUsIG1fbXVsdGlFbnRyeSB9Owor
ICAgIHJldHVybiB7IG1faWRlbnRpZmllciwgbV9vYmplY3RTdG9yZUlkZW50aWZpZXIsIG1fbmFt
ZS5pc29sYXRlZENvcHkoKSwgY3Jvc3NUaHJlYWRDb3B5KG1fa2V5UGF0aCksIG1fdW5pcXVlLCBt
X211bHRpRW50cnkgfTsKIH0KIAogI2lmICFMT0dfRElTQUJMRUQKZGlmZiAtLWdpdCBhL1NvdXJj
ZS9XZWJDb3JlL01vZHVsZXMvaW5kZXhlZGRiL3NoYXJlZC9JREJPYmplY3RTdG9yZUluZm8uY3Bw
IGIvU291cmNlL1dlYkNvcmUvTW9kdWxlcy9pbmRleGVkZGIvc2hhcmVkL0lEQk9iamVjdFN0b3Jl
SW5mby5jcHAKaW5kZXggYTRkZDYxYWU2YTM0ZDdiZjNjMWEyOTljNzBkNmExYzBiYjZlYjE4My4u
MTBjMWE0YzUxNWUyZWFlZjgwOTM5NDJiYjM2YzVkOGQ1MjM0YzBjYyAxMDA2NDQKLS0tIGEvU291
cmNlL1dlYkNvcmUvTW9kdWxlcy9pbmRleGVkZGIvc2hhcmVkL0lEQk9iamVjdFN0b3JlSW5mby5j
cHAKKysrIGIvU291cmNlL1dlYkNvcmUvTW9kdWxlcy9pbmRleGVkZGIvc2hhcmVkL0lEQk9iamVj
dFN0b3JlSW5mby5jcHAKQEAgLTI1LDYgKzI1LDggQEAKIAogI2luY2x1ZGUgImNvbmZpZy5oIgog
I2luY2x1ZGUgIklEQk9iamVjdFN0b3JlSW5mby5oIgorCisjaW5jbHVkZSA8d3RmL0Nyb3NzVGhy
ZWFkQ29waWVyLmg+CiAjaW5jbHVkZSA8d3RmL3RleHQvU3RyaW5nQnVpbGRlci5oPgogCiBuYW1l
c3BhY2UgV2ViQ29yZSB7CkBAIC05Miw3ICs5NCw3IEBAIElEQkluZGV4SW5mbyogSURCT2JqZWN0
U3RvcmVJbmZvOjppbmZvRm9yRXhpc3RpbmdJbmRleCh1aW50NjRfdCBpZGVudGlmaWVyKQogCiBJ
REJPYmplY3RTdG9yZUluZm8gSURCT2JqZWN0U3RvcmVJbmZvOjppc29sYXRlZENvcHkoKSBjb25z
dAogewotICAgIElEQk9iamVjdFN0b3JlSW5mbyByZXN1bHQgPSB7IG1faWRlbnRpZmllciwgbV9u
YW1lLmlzb2xhdGVkQ29weSgpLCBXZWJDb3JlOjppc29sYXRlZENvcHkobV9rZXlQYXRoKSwgbV9h
dXRvSW5jcmVtZW50IH07CisgICAgSURCT2JqZWN0U3RvcmVJbmZvIHJlc3VsdCA9IHsgbV9pZGVu
dGlmaWVyLCBtX25hbWUuaXNvbGF0ZWRDb3B5KCksIGNyb3NzVGhyZWFkQ29weShtX2tleVBhdGgp
LCBtX2F1dG9JbmNyZW1lbnQgfTsKIAogICAgIGZvciAoYXV0byYgaXRlcmF0b3IgOiBtX2luZGV4
TWFwKQogICAgICAgICByZXN1bHQubV9pbmRleE1hcC5zZXQoaXRlcmF0b3Iua2V5LCBpdGVyYXRv
ci52YWx1ZS5pc29sYXRlZENvcHkoKSk7CkBAIC0xMDIsMTIgKzEwNCw5IEBAIElEQk9iamVjdFN0
b3JlSW5mbyBJREJPYmplY3RTdG9yZUluZm86Omlzb2xhdGVkQ29weSgpIGNvbnN0CiAKIFZlY3Rv
cjxTdHJpbmc+IElEQk9iamVjdFN0b3JlSW5mbzo6aW5kZXhOYW1lcygpIGNvbnN0CiB7Ci0gICAg
VmVjdG9yPFN0cmluZz4gbmFtZXM7Ci0gICAgbmFtZXMucmVzZXJ2ZUNhcGFjaXR5KG1faW5kZXhN
YXAuc2l6ZSgpKTsKLSAgICBmb3IgKGF1dG8mIGluZGV4IDogbV9pbmRleE1hcC52YWx1ZXMoKSkK
LSAgICAgICAgbmFtZXMudW5jaGVja2VkQXBwZW5kKGluZGV4Lm5hbWUoKSk7Ci0KLSAgICByZXR1
cm4gbmFtZXM7CisgICAgcmV0dXJuIFdURjo6bWFwKG1faW5kZXhNYXAsIFtdKGF1dG8mIHBhaXIp
IC0+IFN0cmluZyB7CisgICAgICAgIHJldHVybiBwYWlyLnZhbHVlLm5hbWUoKTsKKyAgICB9KTsK
IH0KIAogdm9pZCBJREJPYmplY3RTdG9yZUluZm86OmRlbGV0ZUluZGV4KGNvbnN0IFN0cmluZyYg
aW5kZXhOYW1lKQpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvTW9kdWxlcy9pbmRleGVkZGIv
c2hhcmVkL0lEQlRyYW5zYWN0aW9uSW5mby5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9Nb2R1bGVzL2lu
ZGV4ZWRkYi9zaGFyZWQvSURCVHJhbnNhY3Rpb25JbmZvLmNwcAppbmRleCAzNWRhZTM5OTIyMjcy
NDM0MjE0NzYwN2ZiODQzNWJkMTg3YzQ5NjJmLi5hMDlmMzBiYmU1MWI1YjZiZmE2NTMyZGI5NjE4
Njg3MjY0MjNkNTQ0IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9Nb2R1bGVzL2luZGV4ZWRk
Yi9zaGFyZWQvSURCVHJhbnNhY3Rpb25JbmZvLmNwcAorKysgYi9Tb3VyY2UvV2ViQ29yZS9Nb2R1
bGVzL2luZGV4ZWRkYi9zaGFyZWQvSURCVHJhbnNhY3Rpb25JbmZvLmNwcApAQCAtODgsOSArODgs
OSBAQCB2b2lkIElEQlRyYW5zYWN0aW9uSW5mbzo6aXNvbGF0ZWRDb3B5KGNvbnN0IElEQlRyYW5z
YWN0aW9uSW5mbyYgc291cmNlLCBJREJUcmFucwogICAgIGRlc3RpbmF0aW9uLm1fZHVyYWJpbGl0
eSA9IHNvdXJjZS5tX2R1cmFiaWxpdHk7CiAgICAgZGVzdGluYXRpb24ubV9uZXdWZXJzaW9uID0g
c291cmNlLm1fbmV3VmVyc2lvbjsKIAotICAgIGRlc3RpbmF0aW9uLm1fb2JqZWN0U3RvcmVzLnJl
c2VydmVDYXBhY2l0eShzb3VyY2UubV9vYmplY3RTdG9yZXMuc2l6ZSgpKTsKLSAgICBmb3IgKGF1
dG8mIG9iamVjdFN0b3JlIDogc291cmNlLm1fb2JqZWN0U3RvcmVzKQotICAgICAgICBkZXN0aW5h
dGlvbi5tX29iamVjdFN0b3Jlcy51bmNoZWNrZWRBcHBlbmQob2JqZWN0U3RvcmUuaXNvbGF0ZWRD
b3B5KCkpOworICAgIGRlc3RpbmF0aW9uLm1fb2JqZWN0U3RvcmVzID0gc291cmNlLm1fb2JqZWN0
U3RvcmVzLm1hcChbXShhdXRvJiBvYmplY3RTdG9yZSkgeworICAgICAgICByZXR1cm4gb2JqZWN0
U3RvcmUuaXNvbGF0ZWRDb3B5KCk7CisgICAgfSk7CiAKICAgICBpZiAoc291cmNlLm1fb3JpZ2lu
YWxEYXRhYmFzZUluZm8pCiAgICAgICAgIGRlc3RpbmF0aW9uLm1fb3JpZ2luYWxEYXRhYmFzZUlu
Zm8gPSBtYWtlVW5pcXVlPElEQkRhdGFiYXNlSW5mbz4oKnNvdXJjZS5tX29yaWdpbmFsRGF0YWJh
c2VJbmZvLCBJREJEYXRhYmFzZUluZm86Oklzb2xhdGVkQ29weSk7CmRpZmYgLS1naXQgYS9Tb3Vy
Y2UvV2ViQ29yZS9Nb2R1bGVzL2luZGV4ZWRkYi9zaGFyZWQvSW5kZXhLZXkuY3BwIGIvU291cmNl
L1dlYkNvcmUvTW9kdWxlcy9pbmRleGVkZGIvc2hhcmVkL0luZGV4S2V5LmNwcAppbmRleCAyYzFh
MDE3ZjY5MzcxZWE2NTg0YzI1YTdiOWZlOTFmNjRmYTMxM2U4Li5iNTg3NWRjYmVlNzZjNzExOTBh
NzAxYTE1YjFhOTAzNTc1Yzg0MDY3IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9Nb2R1bGVz
L2luZGV4ZWRkYi9zaGFyZWQvSW5kZXhLZXkuY3BwCisrKyBiL1NvdXJjZS9XZWJDb3JlL01vZHVs
ZXMvaW5kZXhlZGRiL3NoYXJlZC9JbmRleEtleS5jcHAKQEAgLTI2LDExICsyNiwxMSBAQAogI2lu
Y2x1ZGUgImNvbmZpZy5oIgogI2luY2x1ZGUgIkluZGV4S2V5LmgiCiAKKyNpbmNsdWRlIDx3dGYv
Q3Jvc3NUaHJlYWRDb3BpZXIuaD4KKwogbmFtZXNwYWNlIFdlYkNvcmUgewogCi1JbmRleEtleTo6
SW5kZXhLZXkoKQotewotfQorSW5kZXhLZXk6OkluZGV4S2V5KCkgPSBkZWZhdWx0OwogCiBJbmRl
eEtleTo6SW5kZXhLZXkoVmVjdG9yPElEQktleURhdGE+JiYga2V5cykKIHsKQEAgLTM5LDEyICsz
OSw3IEBAIEluZGV4S2V5OjpJbmRleEtleShWZWN0b3I8SURCS2V5RGF0YT4mJiBrZXlzKQogCiBJ
bmRleEtleSBJbmRleEtleTo6aXNvbGF0ZWRDb3B5KCkgY29uc3QKIHsKLSAgICBWZWN0b3I8SURC
S2V5RGF0YT4ga2V5czsKLSAgICBrZXlzLnJlc2VydmVJbml0aWFsQ2FwYWNpdHkobV9rZXlzLnNp
emUoKSk7Ci0gICAgZm9yIChhdXRvJiBrZXkgOiBtX2tleXMpCi0gICAgICAgIGtleXMudW5jaGVj
a2VkQXBwZW5kKGtleS5pc29sYXRlZENvcHkoKSk7Ci0KLSAgICByZXR1cm4geyBXVEZNb3ZlKGtl
eXMpIH07CisgICAgcmV0dXJuIHsgY3Jvc3NUaHJlYWRDb3B5KG1fa2V5cykgfTsKIH0KIAogSURC
S2V5RGF0YSBJbmRleEtleTo6YXNPbmVLZXkoKSBjb25zdApkaWZmIC0tZ2l0IGEvU291cmNlL1dl
YkNvcmUvTW9kdWxlcy9tZWRpYXN0cmVhbS9NZWRpYVN0cmVhbS5jcHAgYi9Tb3VyY2UvV2ViQ29y
ZS9Nb2R1bGVzL21lZGlhc3RyZWFtL01lZGlhU3RyZWFtLmNwcAppbmRleCA1ZGQ4YzY2Y2Q4NGNm
ZjllM2JmN2E2MGM4OGFiOTRhNzUyMjY2MGIzLi42MGFkODBiMDc0NjQzMTM5NmM3MTIzNjU2ZTgy
MGJjYWU4NmFiMDBkIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9Nb2R1bGVzL21lZGlhc3Ry
ZWFtL01lZGlhU3RyZWFtLmNwcAorKysgYi9Tb3VyY2UvV2ViQ29yZS9Nb2R1bGVzL21lZGlhc3Ry
ZWFtL01lZGlhU3RyZWFtLmNwcApAQCAtMTE5LDEzICsxMTksMTAgQEAgUmVmUHRyPE1lZGlhU3Ry
ZWFtPiBNZWRpYVN0cmVhbTo6Y2xvbmUoKQogewogICAgIEFMV0FZU19MT0coTE9HSURFTlRJRklF
Uik7CiAKLSAgICBNZWRpYVN0cmVhbVRyYWNrVmVjdG9yIGNsb25lZFRyYWNrczsKLSAgICBjbG9u
ZWRUcmFja3MucmVzZXJ2ZUluaXRpYWxDYXBhY2l0eShtX3RyYWNrU2V0LnNpemUoKSk7Ci0KLSAg
ICBmb3IgKGF1dG8mIHRyYWNrIDogbV90cmFja1NldC52YWx1ZXMoKSkKLSAgICAgICAgY2xvbmVk
VHJhY2tzLnVuY2hlY2tlZEFwcGVuZCh0cmFjay0+Y2xvbmUoKSk7Ci0KLSAgICByZXR1cm4gTWVk
aWFTdHJlYW06OmNyZWF0ZSgqZG9jdW1lbnQoKSwgY2xvbmVkVHJhY2tzKTsKKyAgICBhdXRvIGNs
b25lZFRyYWNrcyA9IFdURjo6bWFwKG1fdHJhY2tTZXQsIFtdKGF1dG8mIGVudHJ5KSB7CisgICAg
ICAgIHJldHVybiBlbnRyeS52YWx1ZS0+Y2xvbmUoKTsKKyAgICB9KTsKKyAgICByZXR1cm4gTWVk
aWFTdHJlYW06OmNyZWF0ZSgqZG9jdW1lbnQoKSwgV1RGTW92ZShjbG9uZWRUcmFja3MpKTsKIH0K
IAogdm9pZCBNZWRpYVN0cmVhbTo6YWRkVHJhY2soTWVkaWFTdHJlYW1UcmFjayYgdHJhY2spCmRp
ZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9Nb2R1bGVzL21lZGlhc3RyZWFtL01lZGlhU3RyZWFt
VHJhY2suY3BwIGIvU291cmNlL1dlYkNvcmUvTW9kdWxlcy9tZWRpYXN0cmVhbS9NZWRpYVN0cmVh
bVRyYWNrLmNwcAppbmRleCBiZWJlOGVmMWYyYWYxNmRmODI3NzQ5MTFhYjFmYzU5ZTcyZDRlODA3
Li5hNDVkMTllNTQ3Mzk5NTZkYjc4MDYzYzdjYWJlOGE4ZTBmMTA0ZDRkIDEwMDY0NAotLS0gYS9T
b3VyY2UvV2ViQ29yZS9Nb2R1bGVzL21lZGlhc3RyZWFtL01lZGlhU3RyZWFtVHJhY2suY3BwCisr
KyBiL1NvdXJjZS9XZWJDb3JlL01vZHVsZXMvbWVkaWFzdHJlYW0vTWVkaWFTdHJlYW1UcmFjay5j
cHAKQEAgLTMyMSwxMSArMzIxLDkgQEAgc3RhdGljIExvbmdSYW5nZSBjYXBhYmlsaXR5SW50UmFu
Z2UoY29uc3QgQ2FwYWJpbGl0eVZhbHVlT3JSYW5nZSYgdmFsdWUpCiAKIHN0YXRpYyBWZWN0b3I8
U3RyaW5nPiBjYXBhYmlsaXR5U3RyaW5nVmVjdG9yKGNvbnN0IFZlY3RvcjxSZWFsdGltZU1lZGlh
U291cmNlU2V0dGluZ3M6OlZpZGVvRmFjaW5nTW9kZT4mIG1vZGVzKQogewotICAgIFZlY3RvcjxT
dHJpbmc+IHJlc3VsdDsKLSAgICByZXN1bHQucmVzZXJ2ZUluaXRpYWxDYXBhY2l0eShtb2Rlcy5z
aXplKCkpOwotICAgIGZvciAoYXV0byYgbW9kZSA6IG1vZGVzKQotICAgICAgICByZXN1bHQudW5j
aGVja2VkQXBwZW5kKFJlYWx0aW1lTWVkaWFTb3VyY2VTZXR0aW5nczo6ZmFjaW5nTW9kZShtb2Rl
KSk7Ci0gICAgcmV0dXJuIHJlc3VsdDsKKyAgICByZXR1cm4gbW9kZXMubWFwKFtdKGF1dG8mIG1v
ZGUpIHsKKyAgICAgICAgcmV0dXJuIFJlYWx0aW1lTWVkaWFTb3VyY2VTZXR0aW5nczo6ZmFjaW5n
TW9kZShtb2RlKTsKKyAgICB9KTsKIH0KIAogc3RhdGljIFZlY3Rvcjxib29sPiBjYXBhYmlsaXR5
Qm9vbGVhblZlY3RvcihSZWFsdGltZU1lZGlhU291cmNlQ2FwYWJpbGl0aWVzOjpFY2hvQ2FuY2Vs
bGF0aW9uIGNhbmNlbGxhdGlvbikKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL01vZHVsZXMv
bWVkaWFzdHJlYW0vTWVkaWFUcmFja0NvbnN0cmFpbnRzLmNwcCBiL1NvdXJjZS9XZWJDb3JlL01v
ZHVsZXMvbWVkaWFzdHJlYW0vTWVkaWFUcmFja0NvbnN0cmFpbnRzLmNwcAppbmRleCA5ZjEwNDgy
MTk2OTQxYjBmNTI0Njg1MzFjNDA0ZjU0ZjYwYTQ3YzQ5Li4zMTEzODQ3ZGI3NTQ4NDdkNjE2MmZh
MmQ2MWU2NzM0YTZhODg4NWIzIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9Nb2R1bGVzL21l
ZGlhc3RyZWFtL01lZGlhVHJhY2tDb25zdHJhaW50cy5jcHAKKysrIGIvU291cmNlL1dlYkNvcmUv
TW9kdWxlcy9tZWRpYXN0cmVhbS9NZWRpYVRyYWNrQ29uc3RyYWludHMuY3BwCkBAIC0xNzgsMTEg
KzE3OCw5IEBAIHN0YXRpYyBNZWRpYVRyYWNrQ29uc3RyYWludFNldE1hcCBjb252ZXJ0VG9JbnRl
cm5hbEZvcm0oQ29uc3RyYWludFNldFR5cGUgc2V0VHlwCiAKIHN0YXRpYyBWZWN0b3I8TWVkaWFU
cmFja0NvbnN0cmFpbnRTZXRNYXA+IGNvbnZlcnRBZHZhbmNlZFRvSW50ZXJuYWxGb3JtKGNvbnN0
IFZlY3RvcjxNZWRpYVRyYWNrQ29uc3RyYWludFNldD4mIHZlY3RvcikKIHsKLSAgICBWZWN0b3I8
TWVkaWFUcmFja0NvbnN0cmFpbnRTZXRNYXA+IHJlc3VsdDsKLSAgICByZXN1bHQucmVzZXJ2ZUlu
aXRpYWxDYXBhY2l0eSh2ZWN0b3Iuc2l6ZSgpKTsKLSAgICBmb3IgKGF1dG8mIHNldCA6IHZlY3Rv
cikKLSAgICAgICAgcmVzdWx0LnVuY2hlY2tlZEFwcGVuZChjb252ZXJ0VG9JbnRlcm5hbEZvcm0o
Q29uc3RyYWludFNldFR5cGU6OkFkdmFuY2VkLCBzZXQpKTsKLSAgICByZXR1cm4gcmVzdWx0Owor
ICAgIHJldHVybiB2ZWN0b3IubWFwKFtdKGF1dG8mIHNldCkgeworICAgICAgICByZXR1cm4gY29u
dmVydFRvSW50ZXJuYWxGb3JtKENvbnN0cmFpbnRTZXRUeXBlOjpBZHZhbmNlZCwgc2V0KTsKKyAg
ICB9KTsKIH0KIAogc3RhdGljIFZlY3RvcjxNZWRpYVRyYWNrQ29uc3RyYWludFNldE1hcD4gY29u
dmVydEFkdmFuY2VkVG9JbnRlcm5hbEZvcm0oY29uc3Qgc3RkOjpvcHRpb25hbDxWZWN0b3I8TWVk
aWFUcmFja0NvbnN0cmFpbnRTZXQ+PiYgb3B0aW9uYWxWZWN0b3IpCmRpZmYgLS1naXQgYS9Tb3Vy
Y2UvV2ViQ29yZS9Nb2R1bGVzL21lZGlhc3RyZWFtL1NGcmFtZVV0aWxzLmNwcCBiL1NvdXJjZS9X
ZWJDb3JlL01vZHVsZXMvbWVkaWFzdHJlYW0vU0ZyYW1lVXRpbHMuY3BwCmluZGV4IGQ4MmI5NmY0
NDY5MzlmNmNjMWNiMWVlYTljMTY1Mjg5OWNkMzUwN2EuLmIwZWYxZDVhNTZjNjIyMWFhYTNiOWI0
OWM4ZmY3MmRjYTA0MTJlZGIgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL01vZHVsZXMvbWVk
aWFzdHJlYW0vU0ZyYW1lVXRpbHMuY3BwCisrKyBiL1NvdXJjZS9XZWJDb3JlL01vZHVsZXMvbWVk
aWFzdHJlYW0vU0ZyYW1lVXRpbHMuY3BwCkBAIC0xNjMsOSArMTYzLDkgQEAgc3RhdGljIGlubGlu
ZSB2b2lkIGZpbmRFc2NhcGVSYnNwUGF0dGVybnMoY29uc3QgVmVjdG9yPHVpbnQ4X3Q+JiBmcmFt
ZSwgc2l6ZV90IG8KIHZvaWQgdG9SYnNwKFZlY3Rvcjx1aW50OF90PiYgZnJhbWUsIHNpemVfdCBv
ZmZzZXQpCiB7CiAgICAgc2l6ZV90IGNvdW50ID0gMDsKLSAgICBmaW5kRXNjYXBlUmJzcFBhdHRl
cm5zKGZyYW1lLCBvZmZzZXQsIFsmY291bnRdKHNpemVfdCwgYm9vbCBzaG91ZGxCZUVzY2FwZWQp
IHsKLSAgICAgICAgaWYgKHNob3VkbEJlRXNjYXBlZCkKLSAgICAgICAgICAgIGNvdW50Kys7Cisg
ICAgZmluZEVzY2FwZVJic3BQYXR0ZXJucyhmcmFtZSwgb2Zmc2V0LCBbJmNvdW50XShzaXplX3Qs
IGJvb2wgc2hvdWxkQmVFc2NhcGVkKSB7CisgICAgICAgIGlmIChzaG91bGRCZUVzY2FwZWQpCisg
ICAgICAgICAgICArK2NvdW50OwogICAgIH0pOwogICAgIGlmICghY291bnQpCiAgICAgICAgIHJl
dHVybjsKQEAgLTE3NCw4ICsxNzQsOCBAQCB2b2lkIHRvUmJzcChWZWN0b3I8dWludDhfdD4mIGZy
YW1lLCBzaXplX3Qgb2Zmc2V0KQogICAgIG5ld0ZyYW1lLnJlc2VydmVJbml0aWFsQ2FwYWNpdHko
ZnJhbWUuc2l6ZSgpICsgY291bnQpOwogICAgIG5ld0ZyYW1lLmFwcGVuZChmcmFtZS5kYXRhKCks
IG9mZnNldCk7CiAKLSAgICBmaW5kRXNjYXBlUmJzcFBhdHRlcm5zKGZyYW1lLCBvZmZzZXQsIFtk
YXRhID0gZnJhbWUuZGF0YSgpLCAmbmV3RnJhbWVdKHNpemVfdCBwb3NpdGlvbiwgYm9vbCBzaG91
ZGxCZUVzY2FwZWQpIHsKLSAgICAgICAgaWYgKHNob3VkbEJlRXNjYXBlZCkKKyAgICBmaW5kRXNj
YXBlUmJzcFBhdHRlcm5zKGZyYW1lLCBvZmZzZXQsIFtkYXRhID0gZnJhbWUuZGF0YSgpLCAmbmV3
RnJhbWVdKHNpemVfdCBwb3NpdGlvbiwgYm9vbCBzaG91bGRCZUVzY2FwZWQpIHsKKyAgICAgICAg
aWYgKHNob3VsZEJlRXNjYXBlZCkKICAgICAgICAgICAgIG5ld0ZyYW1lLnVuY2hlY2tlZEFwcGVu
ZCgzKTsKICAgICAgICAgbmV3RnJhbWUudW5jaGVja2VkQXBwZW5kKGRhdGFbcG9zaXRpb25dKTsK
ICAgICB9KTsKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL01vZHVsZXMvcmVtb3RlcGxheWJh
Y2svUmVtb3RlUGxheWJhY2suY3BwIGIvU291cmNlL1dlYkNvcmUvTW9kdWxlcy9yZW1vdGVwbGF5
YmFjay9SZW1vdGVQbGF5YmFjay5jcHAKaW5kZXggNDBmYTE4OTAxYmViMDBlOTJiMzdkNzY0M2Qz
YThhY2NlMmEzMjFjZi4uMmU1MmY4ZWNmN2RiZDA1N2U4ZjBkMWJmOTAwZGE5N2ZkM2JhNTg1NyAx
MDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvTW9kdWxlcy9yZW1vdGVwbGF5YmFjay9SZW1vdGVQ
bGF5YmFjay5jcHAKKysrIGIvU291cmNlL1dlYkNvcmUvTW9kdWxlcy9yZW1vdGVwbGF5YmFjay9S
ZW1vdGVQbGF5YmFjay5jcHAKQEAgLTQwOSwxMyArNDA5LDcgQEAgdm9pZCBSZW1vdGVQbGF5YmFj
azo6YXZhaWxhYmlsaXR5Q2hhbmdlZChib29sIGF2YWlsYWJsZSkKICAgICAgICAgICAgIHJldHVy
bjsKIAogICAgICAgICAvLyBQcm90ZWN0IG1fY2FsbGJhY2tNYXAgYWdhaW5zdCBtdXRhdGlvbiB3
aGlsZSBpdCdzIGJlaW5nIGl0ZXJhdGVkIG92ZXIuCi0gICAgICAgIFZlY3RvcjxSZWY8UmVtb3Rl
UGxheWJhY2tBdmFpbGFiaWxpdHlDYWxsYmFjaz4+IGNhbGxiYWNrczsKLSAgICAgICAgY2FsbGJh
Y2tzLnJlc2VydmVJbml0aWFsQ2FwYWNpdHkobV9jYWxsYmFja01hcC5zaXplKCkpOwotCi0gICAg
ICAgIC8vIENhbid0IHVzZSBjb3B5VmFsdWVzVG9WZWN0b3IoKSBoZXJlIGJlY2F1c2UgUmVmPD4g
aGFzIGEgZGVsZXRlZCBhc3NpZ25tZW50IG9wZXJhdG9yLgotICAgICAgICBmb3IgKGF1dG8mIGNh
bGxiYWNrIDogbV9jYWxsYmFja01hcC52YWx1ZXMoKSkKLSAgICAgICAgICAgIGNhbGxiYWNrcy51
bmNoZWNrZWRBcHBlbmQoY2FsbGJhY2suY29weVJlZigpKTsKLSAgICAgICAgZm9yIChhdXRvJiBj
YWxsYmFjayA6IGNhbGxiYWNrcykKKyAgICAgICAgZm9yIChhdXRvJiBjYWxsYmFjayA6IGNvcHlU
b1ZlY3RvcihtX2NhbGxiYWNrTWFwLnZhbHVlcygpKSkKICAgICAgICAgICAgIGNhbGxiYWNrLT5o
YW5kbGVFdmVudChhdmFpbGFibGUpOwogICAgIH0pOwogfQpkaWZmIC0tZ2l0IGEvU291cmNlL1dl
YkNvcmUvTW9kdWxlcy9zcGVlY2gvU3BlZWNoUmVjb2duaXRpb24uY3BwIGIvU291cmNlL1dlYkNv
cmUvTW9kdWxlcy9zcGVlY2gvU3BlZWNoUmVjb2duaXRpb24uY3BwCmluZGV4IDgyZmZmZTQ3YTEw
ZDYyMmUxZGI3ZWIwZDlhYjJjNTgwZTJkNzFhMGMuLjI5MDQ2YmRiODZhZWEyMWQyYWJkZDJjZmM5
ZWFhMTgwMWVlYjUyM2IgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL01vZHVsZXMvc3BlZWNo
L1NwZWVjaFJlY29nbml0aW9uLmNwcAorKysgYi9Tb3VyY2UvV2ViQ29yZS9Nb2R1bGVzL3NwZWVj
aC9TcGVlY2hSZWNvZ25pdGlvbi5jcHAKQEAgLTE2OSw3ICsxNjksNyBAQCB2b2lkIFNwZWVjaFJl
Y29nbml0aW9uOjpkaWRGaW5kTm9NYXRjaCgpCiB2b2lkIFNwZWVjaFJlY29nbml0aW9uOjpkaWRS
ZWNlaXZlUmVzdWx0KFZlY3RvcjxTcGVlY2hSZWNvZ25pdGlvblJlc3VsdERhdGE+JiYgcmVzdWx0
RGF0YXMpCiB7CiAgICAgVmVjdG9yPFJlZjxTcGVlY2hSZWNvZ25pdGlvblJlc3VsdD4+IGFsbFJl
c3VsdHM7Ci0gICAgYWxsUmVzdWx0cy5yZXNlcnZlQ2FwYWNpdHkobV9maW5hbFJlc3VsdHMuc2l6
ZSgpICsgcmVzdWx0RGF0YXMuc2l6ZSgpKTsKKyAgICBhbGxSZXN1bHRzLnJlc2VydmVJbml0aWFs
Q2FwYWNpdHkobV9maW5hbFJlc3VsdHMuc2l6ZSgpICsgcmVzdWx0RGF0YXMuc2l6ZSgpKTsKICAg
ICBhbGxSZXN1bHRzLmFwcGVuZFZlY3RvcihtX2ZpbmFsUmVzdWx0cyk7CiAKICAgICBhdXRvIGZp
cnN0Q2hhbmdlZEluZGV4ID0gYWxsUmVzdWx0cy5zaXplKCk7CmRpZmYgLS1naXQgYS9Tb3VyY2Uv
V2ViQ29yZS9Nb2R1bGVzL3dlYmF1dGhuL2Nib3IvQ0JPUlZhbHVlLmNwcCBiL1NvdXJjZS9XZWJD
b3JlL01vZHVsZXMvd2ViYXV0aG4vY2Jvci9DQk9SVmFsdWUuY3BwCmluZGV4IDliMjhmMGU1ZTEw
MDZkNGViMTdiZDkwMzBmOWNiMmJiYWY0N2E3ZjAuLjRlNzA4MzYxOTViMzA2ZWE3NDgwZGUwMDBj
ZTgxN2EzMjdmNDlkODMgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL01vZHVsZXMvd2ViYXV0
aG4vY2Jvci9DQk9SVmFsdWUuY3BwCisrKyBiL1NvdXJjZS9XZWJDb3JlL01vZHVsZXMvd2ViYXV0
aG4vY2Jvci9DQk9SVmFsdWUuY3BwCkBAIC0xMjYsMTEgKzEyNiw4IEBAIENCT1JWYWx1ZTo6Q0JP
UlZhbHVlKGNvbnN0IFN0cmluZyYgaW5TdHJpbmcpCiAKIENCT1JWYWx1ZTo6Q0JPUlZhbHVlKGNv
bnN0IEFycmF5VmFsdWUmIGluQXJyYXkpCiAgICAgOiBtX3R5cGUoVHlwZTo6QXJyYXkpCi0gICAg
LCBtX2FycmF5VmFsdWUoKQorICAgICwgbV9hcnJheVZhbHVlKGluQXJyYXkubWFwKFtdKGF1dG8m
IHZhbHVlKSB7IHJldHVybiB2YWx1ZS5jbG9uZSgpOyB9KSkKIHsKLSAgICBtX2FycmF5VmFsdWUu
cmVzZXJ2ZUNhcGFjaXR5KGluQXJyYXkuc2l6ZSgpKTsKLSAgICBmb3IgKGNvbnN0IGF1dG8mIHZh
bCA6IGluQXJyYXkpCi0gICAgICAgIG1fYXJyYXlWYWx1ZS5hcHBlbmQodmFsLmNsb25lKCkpOwog
fQogCiBDQk9SVmFsdWU6OkNCT1JWYWx1ZShBcnJheVZhbHVlJiYgaW5BcnJheSkKZGlmZiAtLWdp
dCBhL1NvdXJjZS9XZWJDb3JlL01vZHVsZXMvd2ViYXV0aG4vZmlkby9BdXRoZW50aWNhdG9yR2V0
SW5mb1Jlc3BvbnNlLmNwcCBiL1NvdXJjZS9XZWJDb3JlL01vZHVsZXMvd2ViYXV0aG4vZmlkby9B
dXRoZW50aWNhdG9yR2V0SW5mb1Jlc3BvbnNlLmNwcAppbmRleCAzMDlhZDc2ZWUyNzA0Y2UyYzY1
ZGRjZTBmYTc0MzRlYjY5OTFmOWRlLi41NmZkZGUyZmNkMzMwOTFmOTk1NTJmOTI0NDE1NWI2OWQy
NjQ3MjRmIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9Nb2R1bGVzL3dlYmF1dGhuL2ZpZG8v
QXV0aGVudGljYXRvckdldEluZm9SZXNwb25zZS5jcHAKKysrIGIvU291cmNlL1dlYkNvcmUvTW9k
dWxlcy93ZWJhdXRobi9maWRvL0F1dGhlbnRpY2F0b3JHZXRJbmZvUmVzcG9uc2UuY3BwCkBAIC00
MCwxMCArNDAsOSBAQCBuYW1lc3BhY2UgZmlkbyB7CiB0ZW1wbGF0ZSA8dHlwZW5hbWUgQ29udGFp
bmVyPgogY2Jvcjo6Q0JPUlZhbHVlIHRvQXJyYXlWYWx1ZShjb25zdCBDb250YWluZXImIGNvbnRh
aW5lcikKIHsKLSAgICBjYm9yOjpDQk9SVmFsdWU6OkFycmF5VmFsdWUgdmFsdWU7Ci0gICAgdmFs
dWUucmVzZXJ2ZUluaXRpYWxDYXBhY2l0eShjb250YWluZXIuc2l6ZSgpKTsKLSAgICBmb3IgKGNv
bnN0IGF1dG8mIGl0ZW0gOiBjb250YWluZXIpCi0gICAgICAgIHZhbHVlLmFwcGVuZChjYm9yOjpD
Qk9SVmFsdWUoaXRlbSkpOworICAgIGF1dG8gdmFsdWUgPSBXVEY6Om1hcChjb250YWluZXIsIFtd
KGF1dG8mIGl0ZW0pIHsKKyAgICAgICAgcmV0dXJuIGNib3I6OkNCT1JWYWx1ZShpdGVtKTsKKyAg
ICB9KTsKICAgICByZXR1cm4gY2Jvcjo6Q0JPUlZhbHVlKFdURk1vdmUodmFsdWUpKTsKIH0KIApk
aWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvTW9kdWxlcy93ZWJhdXRobi9maWRvL0RldmljZVJl
cXVlc3RDb252ZXJ0ZXIuY3BwIGIvU291cmNlL1dlYkNvcmUvTW9kdWxlcy93ZWJhdXRobi9maWRv
L0RldmljZVJlcXVlc3RDb252ZXJ0ZXIuY3BwCmluZGV4IDJmNjlkNzM4MzhmOTFkMDFiMWVmZGFl
OTI1NGM5Mjk3Y2I2YTU4ZDYuLjMyOWYyYTFkYTFiN2Y5MDM0NjMxMjg3OGI2MzA2MmM2ZTQyMjhk
NDkgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL01vZHVsZXMvd2ViYXV0aG4vZmlkby9EZXZp
Y2VSZXF1ZXN0Q29udmVydGVyLmNwcAorKysgYi9Tb3VyY2UvV2ViQ29yZS9Nb2R1bGVzL3dlYmF1
dGhuL2ZpZG8vRGV2aWNlUmVxdWVzdENvbnZlcnRlci5jcHAKQEAgLTY4LDE0ICs2OCwxMiBAQCBz
dGF0aWMgQ0JPUlZhbHVlIGNvbnZlcnRVc2VyRW50aXR5VG9DQk9SKGNvbnN0IFB1YmxpY0tleUNy
ZWRlbnRpYWxDcmVhdGlvbk9wdGlvbgogCiBzdGF0aWMgQ0JPUlZhbHVlIGNvbnZlcnRQYXJhbWV0
ZXJzVG9DQk9SKGNvbnN0IFZlY3RvcjxQdWJsaWNLZXlDcmVkZW50aWFsQ3JlYXRpb25PcHRpb25z
OjpQYXJhbWV0ZXJzPiYgcGFyYW1ldGVycykKIHsKLSAgICBDQk9SVmFsdWU6OkFycmF5VmFsdWUg
Y3JlZGVudGlhbFBhcmFtQXJyYXk7Ci0gICAgY3JlZGVudGlhbFBhcmFtQXJyYXkucmVzZXJ2ZUlu
aXRpYWxDYXBhY2l0eShwYXJhbWV0ZXJzLnNpemUoKSk7Ci0gICAgZm9yIChjb25zdCBhdXRvJiBj
cmVkZW50aWFsIDogcGFyYW1ldGVycykgeworICAgIGF1dG8gY3JlZGVudGlhbFBhcmFtQXJyYXkg
PSBwYXJhbWV0ZXJzLm1hcChbXShhdXRvJiBjcmVkZW50aWFsKSB7CiAgICAgICAgIENCT1JWYWx1
ZTo6TWFwVmFsdWUgY2JvckNyZWRlbnRpYWxNYXA7CiAgICAgICAgIGNib3JDcmVkZW50aWFsTWFw
LmVtcGxhY2UoQ0JPUlZhbHVlKGtDcmVkZW50aWFsVHlwZU1hcEtleSksIENCT1JWYWx1ZShwdWJs
aWNLZXlDcmVkZW50aWFsVHlwZVRvU3RyaW5nKGNyZWRlbnRpYWwudHlwZSkpKTsKICAgICAgICAg
Y2JvckNyZWRlbnRpYWxNYXAuZW1wbGFjZShDQk9SVmFsdWUoa0NyZWRlbnRpYWxBbGdvcml0aG1N
YXBLZXkpLCBDQk9SVmFsdWUoY3JlZGVudGlhbC5hbGcpKTsKLSAgICAgICAgY3JlZGVudGlhbFBh
cmFtQXJyYXkuYXBwZW5kKFdURk1vdmUoY2JvckNyZWRlbnRpYWxNYXApKTsKLSAgICB9CisgICAg
ICAgIHJldHVybiBDQk9SVmFsdWUgeyBXVEZNb3ZlKGNib3JDcmVkZW50aWFsTWFwKSB9OworICAg
IH0pOwogICAgIHJldHVybiBDQk9SVmFsdWUoV1RGTW92ZShjcmVkZW50aWFsUGFyYW1BcnJheSkp
OwogfQogCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9Nb2R1bGVzL3dlYmF1dGhuL2ZpZG8v
UGluLmNwcCBiL1NvdXJjZS9XZWJDb3JlL01vZHVsZXMvd2ViYXV0aG4vZmlkby9QaW4uY3BwCmlu
ZGV4IDkxNDJhYmJjOGM2NDgxNjIwMjlhMTI5NzllODk1YjY3MTI3ODEwZTcuLjlmYTY3M2YxODJj
Y2NiMDQ2MjE3MzNhZTM4YzUyMzZkMzYyYjVjODggMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3Jl
L01vZHVsZXMvd2ViYXV0aG4vZmlkby9QaW4uY3BwCisrKyBiL1NvdXJjZS9XZWJDb3JlL01vZHVs
ZXMvd2ViYXV0aG4vZmlkby9QaW4uY3BwCkBAIC03Myw4ICs3Myw4IEBAIHN0YXRpYyBWZWN0b3I8
dWludDhfdD4gbWFrZVBpbkF1dGgoY29uc3QgQ3J5cHRvS2V5SE1BQyYga2V5LCBjb25zdCBWZWN0
b3I8dWludDhfCiBWZWN0b3I8dWludDhfdD4gZW5jb2RlUmF3UHVibGljS2V5KGNvbnN0IFZlY3Rv
cjx1aW50OF90PiYgeCwgY29uc3QgVmVjdG9yPHVpbnQ4X3Q+JiB5KQogewogICAgIFZlY3Rvcjx1
aW50OF90PiByYXdLZXk7Ci0gICAgcmF3S2V5LnJlc2VydmVDYXBhY2l0eSgxICsgeC5zaXplKCkg
KyB5LnNpemUoKSk7Ci0gICAgcmF3S2V5LmFwcGVuZCgweDA0KTsKKyAgICByYXdLZXkucmVzZXJ2
ZUluaXRpYWxDYXBhY2l0eSgxICsgeC5zaXplKCkgKyB5LnNpemUoKSk7CisgICAgcmF3S2V5LnVu
Y2hlY2tlZEFwcGVuZCgweDA0KTsKICAgICByYXdLZXkuYXBwZW5kVmVjdG9yKHgpOwogICAgIHJh
d0tleS5hcHBlbmRWZWN0b3IoeSk7CiAgICAgcmV0dXJuIHJhd0tleTsKZGlmZiAtLWdpdCBhL1Nv
dXJjZS9XZWJDb3JlL01vZHVsZXMvd2ViZGF0YWJhc2UvRGF0YWJhc2VUcmFja2VyLmNwcCBiL1Nv
dXJjZS9XZWJDb3JlL01vZHVsZXMvd2ViZGF0YWJhc2UvRGF0YWJhc2VUcmFja2VyLmNwcAppbmRl
eCBjYTQxN2M5YWIzZDVhMGFmOWMwYmQxYTQyZDVhODU4NDY0MDUzN2Q5Li4xMTlmM2UyZDMzYjA3
NjdlMGQ1MTFlYjlmZDQ3NjBkZTk3NjUzODYzIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9N
b2R1bGVzL3dlYmRhdGFiYXNlL0RhdGFiYXNlVHJhY2tlci5jcHAKKysrIGIvU291cmNlL1dlYkNv
cmUvTW9kdWxlcy93ZWJkYXRhYmFzZS9EYXRhYmFzZVRyYWNrZXIuY3BwCkBAIC00Miw2ICs0Miw3
IEBACiAjaW5jbHVkZSAiU1FMaXRlRmlsZVN5c3RlbS5oIgogI2luY2x1ZGUgIlNRTGl0ZVN0YXRl
bWVudC5oIgogI2luY2x1ZGUgIlNRTGl0ZVRyYW5zYWN0aW9uLmgiCisjaW5jbHVkZSA8d3RmL0Ny
b3NzVGhyZWFkQ29waWVyLmg+CiAjaW5jbHVkZSA8d3RmL0ZpbGVTeXN0ZW0uaD4KICNpbmNsdWRl
IDx3dGYvTWFpblRocmVhZC5oPgogI2luY2x1ZGUgPHd0Zi9OZXZlckRlc3Ryb3llZC5oPgpAQCAt
NTYsMTUgKzU3LDYgQEAKIAogbmFtZXNwYWNlIFdlYkNvcmUgewogCi1zdGF0aWMgVmVjdG9yPFN0
cmluZz4gaXNvbGF0ZWRDb3B5KGNvbnN0IFZlY3RvcjxTdHJpbmc+JiBvcmlnaW5hbCkKLXsKLSAg
ICBWZWN0b3I8U3RyaW5nPiBjb3B5OwotICAgIGNvcHkucmVzZXJ2ZUluaXRpYWxDYXBhY2l0eShv
cmlnaW5hbC5zaXplKCkpOwotICAgIGZvciAoYXV0byYgc3RyaW5nIDogb3JpZ2luYWwpCi0gICAg
ICAgIGNvcHkudW5jaGVja2VkQXBwZW5kKHN0cmluZy5pc29sYXRlZENvcHkoKSk7Ci0gICAgcmV0
dXJuIGNvcHk7Ci19Ci0KIHN0ZDo6dW5pcXVlX3B0cjxEYXRhYmFzZVRyYWNrZXI+IERhdGFiYXNl
VHJhY2tlcjo6dHJhY2tlcldpdGhEYXRhYmFzZVBhdGgoY29uc3QgU3RyaW5nJiBkYXRhYmFzZVBh
dGgpCiB7CiAgICAgcmV0dXJuIHN0ZDo6dW5pcXVlX3B0cjxEYXRhYmFzZVRyYWNrZXI+KG5ldyBE
YXRhYmFzZVRyYWNrZXIoZGF0YWJhc2VQYXRoKSk7CkBAIC00MTksMTIgKzQxMSw4IEBAIFZlY3Rv
cjxTdHJpbmc+IERhdGFiYXNlVHJhY2tlcjo6ZGF0YWJhc2VOYW1lc05vTG9jayhjb25zdCBTZWN1
cml0eU9yaWdpbkRhdGEmIG9yCiAKIFZlY3RvcjxTdHJpbmc+IERhdGFiYXNlVHJhY2tlcjo6ZGF0
YWJhc2VOYW1lcyhjb25zdCBTZWN1cml0eU9yaWdpbkRhdGEmIG9yaWdpbikKIHsKLSAgICBWZWN0
b3I8U3RyaW5nPiBuYW1lczsKLSAgICB7Ci0gICAgICAgIExvY2tlciBsb2NrRGF0YWJhc2UgeyBt
X2RhdGFiYXNlR3VhcmQgfTsKLSAgICAgICAgbmFtZXMgPSBkYXRhYmFzZU5hbWVzTm9Mb2NrKG9y
aWdpbik7Ci0gICAgfQotICAgIHJldHVybiBpc29sYXRlZENvcHkobmFtZXMpOworICAgIExvY2tl
ciBsb2NrRGF0YWJhc2UgeyBtX2RhdGFiYXNlR3VhcmQgfTsKKyAgICByZXR1cm4gY3Jvc3NUaHJl
YWRDb3B5KGRhdGFiYXNlTmFtZXNOb0xvY2sob3JpZ2luKSk7CiB9CiAKIERhdGFiYXNlRGV0YWls
cyBEYXRhYmFzZVRyYWNrZXI6OmRldGFpbHNGb3JOYW1lQW5kT3JpZ2luKGNvbnN0IFN0cmluZyYg
bmFtZSwgY29uc3QgU2VjdXJpdHlPcmlnaW5EYXRhJiBvcmlnaW4pCmRpZmYgLS1naXQgYS9Tb3Vy
Y2UvV2ViQ29yZS9hY2Nlc3NpYmlsaXR5L0FYT2JqZWN0Q2FjaGUuY3BwIGIvU291cmNlL1dlYkNv
cmUvYWNjZXNzaWJpbGl0eS9BWE9iamVjdENhY2hlLmNwcAppbmRleCBmM2E2ZmFkNWUwM2Q5Mzk0
MTE3MThjOGQ4ZjE5MmZiMTMwMzRjNmZkLi4wMzM5YTdkNzc4ZDhmMDljMjU5NzhjMDk3MGFmMzE3
MmExNTNmNTQzIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9hY2Nlc3NpYmlsaXR5L0FYT2Jq
ZWN0Q2FjaGUuY3BwCisrKyBiL1NvdXJjZS9XZWJDb3JlL2FjY2Vzc2liaWxpdHkvQVhPYmplY3RD
YWNoZS5jcHAKQEAgLTExMjEsNyArMTEyMSw3IEBAIHZvaWQgQVhPYmplY3RDYWNoZTo6bm90aWZp
Y2F0aW9uUG9zdFRpbWVyRmlyZWQoKQogCiAgICAgLy8gRmlsdGVyIG91dCB0aGUgbm90aWZpY2F0
aW9ucyB0aGF0IGFyZSBub3QgZ29pbmcgdG8gYmUgcG9zdGVkIHRvIHBsYXRmb3JtIGNsaWVudHMu
CiAgICAgVmVjdG9yPHN0ZDo6cGFpcjxSZWZQdHI8QVhDb3JlT2JqZWN0PiwgQVhOb3RpZmljYXRp
b24+PiBub3RpZmljYXRpb25zVG9Qb3N0OwotICAgIG5vdGlmaWNhdGlvbnNUb1Bvc3QucmVzZXJ2
ZUNhcGFjaXR5KG5vdGlmaWNhdGlvbnMuc2l6ZSgpKTsKKyAgICBub3RpZmljYXRpb25zVG9Qb3N0
LnJlc2VydmVJbml0aWFsQ2FwYWNpdHkobm90aWZpY2F0aW9ucy5zaXplKCkpOwogICAgIGZvciAo
Y29uc3QgYXV0byYgbm90ZSA6IG5vdGlmaWNhdGlvbnMpIHsKICAgICAgICAgQVNTRVJUKG5vdGUu
Zmlyc3QpOwogICAgICAgICBpZiAoIW5vdGUuZmlyc3QtPm9iamVjdElEKCkgfHwgIW5vdGUuZmly
c3QtPmF4T2JqZWN0Q2FjaGUoKSkKQEAgLTExNDMsNyArMTE0Myw3IEBAIHZvaWQgQVhPYmplY3RD
YWNoZTo6bm90aWZpY2F0aW9uUG9zdFRpbWVyRmlyZWQoKQogICAgICAgICAgICAgICAgIGNvbnRp
bnVlOwogICAgICAgICB9CiAKLSAgICAgICAgbm90aWZpY2F0aW9uc1RvUG9zdC5hcHBlbmQobm90
ZSk7CisgICAgICAgIG5vdGlmaWNhdGlvbnNUb1Bvc3QudW5jaGVja2VkQXBwZW5kKG5vdGUpOwog
ICAgIH0KIAogI2lmIEVOQUJMRShBQ0NFU1NJQklMSVRZX0lTT0xBVEVEX1RSRUUpCmRpZmYgLS1n
aXQgYS9Tb3VyY2UvV2ViQ29yZS9hY2Nlc3NpYmlsaXR5L2lzb2xhdGVkdHJlZS9BWElzb2xhdGVk
T2JqZWN0LmNwcCBiL1NvdXJjZS9XZWJDb3JlL2FjY2Vzc2liaWxpdHkvaXNvbGF0ZWR0cmVlL0FY
SXNvbGF0ZWRPYmplY3QuY3BwCmluZGV4IDJkOTY3Mzk1NWViYjc1MjU2N2EzMjljZDRjNDY1ZDQ3
NmRkYjVhNDEuLjMzZWExMGEzMWVmOTNkYWJiODk1ZDU0MjU0MWNhZDg1NGY2ODZlMDIgMTAwNjQ0
Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL2FjY2Vzc2liaWxpdHkvaXNvbGF0ZWR0cmVlL0FYSXNvbGF0
ZWRPYmplY3QuY3BwCisrKyBiL1NvdXJjZS9XZWJDb3JlL2FjY2Vzc2liaWxpdHkvaXNvbGF0ZWR0
cmVlL0FYSXNvbGF0ZWRPYmplY3QuY3BwCkBAIC00NDQsMTcgKzQ0NCwxMCBAQCB2b2lkIEFYSXNv
bGF0ZWRPYmplY3Q6OnNldE1hdGhzY3JpcHRzKEFYUHJvcGVydHlOYW1lIHByb3BlcnR5TmFtZSwg
QVhDb3JlT2JqZWN0JgogICAgIGlmICghbWF0aFNpemUpCiAgICAgICAgIHJldHVybjsKIAotICAg
IFZlY3RvcjxzdGQ6OnBhaXI8QVhJRCwgQVhJRD4+IGlkUGFpcnM7Ci0gICAgaWRQYWlycy5yZXNl
cnZlQ2FwYWNpdHkobWF0aFNpemUpOwotICAgIGZvciAoYXV0byBtYXRoUGFpciA6IHBhaXJzKSB7
Ci0gICAgICAgIHN0ZDo6cGFpcjxBWElELCBBWElEPiBpZFBhaXI7Ci0gICAgICAgIGlmIChtYXRo
UGFpci5maXJzdCkKLSAgICAgICAgICAgIGlkUGFpci5maXJzdCA9IG1hdGhQYWlyLmZpcnN0LT5v
YmplY3RJRCgpOwotICAgICAgICBpZiAobWF0aFBhaXIuc2Vjb25kKQotICAgICAgICAgICAgaWRQ
YWlyLnNlY29uZCA9IG1hdGhQYWlyLnNlY29uZC0+b2JqZWN0SUQoKTsKLSAgICAgICAgaWRQYWly
cy51bmNoZWNrZWRBcHBlbmQoaWRQYWlyKTsKLSAgICB9Ci0gICAgc2V0UHJvcGVydHkocHJvcGVy
dHlOYW1lLCBpZFBhaXJzKTsKKyAgICBhdXRvIGlkUGFpcnMgPSBwYWlycy5tYXAoW10oYXV0byYg
bWF0aFBhaXIpIHsKKyAgICAgICAgcmV0dXJuIHN0ZDo6bWFrZV9wYWlyKG1hdGhQYWlyLmZpcnN0
ID8gbWF0aFBhaXIuZmlyc3QtPm9iamVjdElEKCkgOiBBWElEKCksIG1hdGhQYWlyLnNlY29uZCA/
IG1hdGhQYWlyLnNlY29uZC0+b2JqZWN0SUQoKSA6IEFYSUQoKSk7CisgICAgfSk7CisgICAgc2V0
UHJvcGVydHkocHJvcGVydHlOYW1lLCBXVEZNb3ZlKGlkUGFpcnMpKTsKIH0KIAogdm9pZCBBWElz
b2xhdGVkT2JqZWN0OjpzZXRPYmplY3RQcm9wZXJ0eShBWFByb3BlcnR5TmFtZSBwcm9wZXJ0eU5h
bWUsIEFYQ29yZU9iamVjdCogb2JqZWN0KQpAQCAtNDY3LDE2ICs0NjAsMTMgQEAgdm9pZCBBWElz
b2xhdGVkT2JqZWN0OjpzZXRPYmplY3RQcm9wZXJ0eShBWFByb3BlcnR5TmFtZSBwcm9wZXJ0eU5h
bWUsIEFYQ29yZU9iamUKIAogdm9pZCBBWElzb2xhdGVkT2JqZWN0OjpzZXRPYmplY3RWZWN0b3JQ
cm9wZXJ0eShBWFByb3BlcnR5TmFtZSBwcm9wZXJ0eU5hbWUsIGNvbnN0IEFjY2Vzc2liaWxpdHlD
aGlsZHJlblZlY3RvciYgY2hpbGRyZW4pCiB7Ci0gICAgaWYgKCFjaGlsZHJlbi5zaXplKCkpCisg
ICAgaWYgKGNoaWxkcmVuLmlzRW1wdHkoKSkKICAgICAgICAgcmV0dXJuOwogCi0gICAgVmVjdG9y
PEFYSUQ+IGNoaWxkSURzOwotICAgIGNoaWxkSURzLnJlc2VydmVDYXBhY2l0eShjaGlsZHJlbi5z
aXplKCkpOwotCi0gICAgZm9yIChhdXRvIGNoaWxkIDogY2hpbGRyZW4pCi0gICAgICAgIGNoaWxk
SURzLnVuY2hlY2tlZEFwcGVuZChjaGlsZC0+b2JqZWN0SUQoKSk7Ci0KLSAgICBzZXRQcm9wZXJ0
eShwcm9wZXJ0eU5hbWUsIGNoaWxkSURzKTsKKyAgICBhdXRvIGNoaWxkSURzID0gY2hpbGRyZW4u
bWFwKFtdKGF1dG8mIGNoaWxkKSB7CisgICAgICAgIHJldHVybiBjaGlsZC0+b2JqZWN0SUQoKTsK
KyAgICB9KTsKKyAgICBzZXRQcm9wZXJ0eShwcm9wZXJ0eU5hbWUsIFdURk1vdmUoY2hpbGRJRHMp
KTsKIH0KIAogdm9pZCBBWElzb2xhdGVkT2JqZWN0OjpzZXRQcm9wZXJ0eShBWFByb3BlcnR5TmFt
ZSBwcm9wZXJ0eU5hbWUsIEFYUHJvcGVydHlWYWx1ZVZhcmlhbnQmJiB2YWx1ZSwgYm9vbCBzaG91
bGRSZW1vdmUpCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9hY2Nlc3NpYmlsaXR5L2lzb2xh
dGVkdHJlZS9BWElzb2xhdGVkVHJlZS5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9hY2Nlc3NpYmlsaXR5
L2lzb2xhdGVkdHJlZS9BWElzb2xhdGVkVHJlZS5jcHAKaW5kZXggN2VmMDYyYTBjNjA4YzFhOGVm
MzExOGFlNDQ0OTE2NTIwZGNkNzZjMi4uOGY3ZmNkYTMxMTlmZmZiOTBjMDIzNDUyMjY1NjQ3ZmJl
Yzk2YzIzYSAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvYWNjZXNzaWJpbGl0eS9pc29sYXRl
ZHRyZWUvQVhJc29sYXRlZFRyZWUuY3BwCisrKyBiL1NvdXJjZS9XZWJDb3JlL2FjY2Vzc2liaWxp
dHkvaXNvbGF0ZWR0cmVlL0FYSXNvbGF0ZWRUcmVlLmNwcApAQCAtMTU5LDEyICsxNTksMTIgQEAg
VmVjdG9yPFJlZlB0cjxBWENvcmVPYmplY3Q+PiBBWElzb2xhdGVkVHJlZTo6b2JqZWN0c0ZvcklE
cyhjb25zdCBWZWN0b3I8QVhJRD4mIGEKIHsKICAgICBBWFRSQUNFKCJBWElzb2xhdGVkVHJlZTo6
b2JqZWN0c0ZvcklEcyIpOwogICAgIFZlY3RvcjxSZWZQdHI8QVhDb3JlT2JqZWN0Pj4gcmVzdWx0
OwotICAgIHJlc3VsdC5yZXNlcnZlQ2FwYWNpdHkoYXhJRHMuc2l6ZSgpKTsKLQotICAgIGZvciAo
Y29uc3QgYXV0byYgYXhJRCA6IGF4SURzKSB7CisgICAgcmVzdWx0LnJlc2VydmVJbml0aWFsQ2Fw
YWNpdHkoYXhJRHMuc2l6ZSgpKTsKKyAgICBmb3IgKGF1dG8mIGF4SUQgOiBheElEcykgewogICAg
ICAgICBpZiAoYXV0byBvYmplY3QgPSBub2RlRm9ySUQoYXhJRCkpCiAgICAgICAgICAgICByZXN1
bHQudW5jaGVja2VkQXBwZW5kKG9iamVjdCk7CiAgICAgfQorICAgIHJlc3VsdC5zaHJpbmtUb0Zp
dCgpOwogCiAgICAgcmV0dXJuIHJlc3VsdDsKIH0KQEAgLTI4NSwxNSArMjg1LDExIEBAIHZvaWQg
QVhJc29sYXRlZFRyZWU6OmNvbGxlY3ROb2RlQ2hhbmdlc0ZvclN1YnRyZWUoQVhDb3JlT2JqZWN0
JiBheE9iamVjdCwgQVhJRCBwCiAgICAgICAgIGlkc0JlaW5nQ2hhbmdlZC0+YWRkKG5vZGVDaGFu
Z2UuaXNvbGF0ZWRPYmplY3QtPm9iamVjdElEKCkpOwogICAgIGNoYW5nZXMuYXBwZW5kKFdURk1v
dmUobm9kZUNoYW5nZSkpOwogCi0gICAgYXV0byBheENoaWxkcmVuID0gYXhPYmplY3QuY2hpbGRy
ZW4oKTsKLSAgICBWZWN0b3I8QVhJRD4gYXhDaGlsZHJlbklEczsKLSAgICBheENoaWxkcmVuSURz
LnJlc2VydmVJbml0aWFsQ2FwYWNpdHkoYXhDaGlsZHJlbi5zaXplKCkpOwotICAgIGZvciAoY29u
c3QgYXV0byYgYXhDaGlsZCA6IGF4Q2hpbGRyZW4pIHsKKyAgICBhdXRvIGF4Q2hpbGRyZW5JRHMg
PSBheE9iamVjdC5jaGlsZHJlbigpLm1hcChbJl0oYXV0byYgYXhDaGlsZCkgewogICAgICAgICBj
b2xsZWN0Tm9kZUNoYW5nZXNGb3JTdWJ0cmVlKCpheENoaWxkLCBheE9iamVjdC5vYmplY3RJRCgp
LCBhdHRhY2hXcmFwcGVyLCBjaGFuZ2VzLCBpZHNCZWluZ0NoYW5nZWQpOwotICAgICAgICBheENo
aWxkcmVuSURzLnVuY2hlY2tlZEFwcGVuZChheENoaWxkLT5vYmplY3RJRCgpKTsKLSAgICB9Ci0K
LSAgICBtX25vZGVNYXAuc2V0KGF4T2JqZWN0Lm9iamVjdElEKCksIFBhcmVudENoaWxkcmVuSURz
IHsgcGFyZW50SUQsIGF4Q2hpbGRyZW5JRHMgfSk7CisgICAgICAgIHJldHVybiBheENoaWxkLT5v
YmplY3RJRCgpOworICAgIH0pOworICAgIG1fbm9kZU1hcC5zZXQoYXhPYmplY3Qub2JqZWN0SUQo
KSwgUGFyZW50Q2hpbGRyZW5JRHMgeyBwYXJlbnRJRCwgV1RGTW92ZShheENoaWxkcmVuSURzKSB9
KTsKIH0KIAogdm9pZCBBWElzb2xhdGVkVHJlZTo6dXBkYXRlTm9kZShBWENvcmVPYmplY3QmIGF4
T2JqZWN0KQpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvYW5pbWF0aW9uL0NTU1Byb3BlcnR5
QW5pbWF0aW9uLmNwcCBiL1NvdXJjZS9XZWJDb3JlL2FuaW1hdGlvbi9DU1NQcm9wZXJ0eUFuaW1h
dGlvbi5jcHAKaW5kZXggMjRhMzZlY2I4NzQwYjRmMTU2YzVhODkyYjY1MzhjNWFjOTBiMTRmOS4u
ZTM1OWEwNDNiMmUzY2YzOWY5YzI2YmM1OWU5OGYxMDVlMTMyYzEwNSAxMDA2NDQKLS0tIGEvU291
cmNlL1dlYkNvcmUvYW5pbWF0aW9uL0NTU1Byb3BlcnR5QW5pbWF0aW9uLmNwcAorKysgYi9Tb3Vy
Y2UvV2ViQ29yZS9hbmltYXRpb24vQ1NTUHJvcGVydHlBbmltYXRpb24uY3BwCkBAIC0yODY1LDYg
KzI4NjUsNyBAQCBDU1NQcm9wZXJ0eUFuaW1hdGlvbldyYXBwZXJNYXA6OkNTU1Byb3BlcnR5QW5p
bWF0aW9uV3JhcHBlck1hcCgpCiAgICAgICAgICAgICBBU1NFUlQobV9wcm9wZXJ0eVdyYXBwZXJz
W3dyYXBwZXJJbmRleF0pOwogICAgICAgICAgICAgbG9uZ2hhbmRXcmFwcGVycy51bmNoZWNrZWRB
cHBlbmQobV9wcm9wZXJ0eVdyYXBwZXJzW3dyYXBwZXJJbmRleF0uZ2V0KCkpOwogICAgICAgICB9
CisgICAgICAgIGxvbmdoYW5kV3JhcHBlcnMuc2hyaW5rVG9GaXQoKTsKIAogICAgICAgICBtX3By
b3BlcnR5V3JhcHBlcnMudW5jaGVja2VkQXBwZW5kKG1ha2VVbmlxdWU8U2hvcnRoYW5kUHJvcGVy
dHlXcmFwcGVyPihwcm9wZXJ0eUlELCBXVEZNb3ZlKGxvbmdoYW5kV3JhcHBlcnMpKSk7CiAgICAg
ICAgIGluZGV4RnJvbVByb3BlcnR5SUQocHJvcGVydHlJRCkgPSBhbmltYXRhYmxlTG9uZ2hhbmRQ
cm9wZXJ0aWVzQ291bnQgKyBpOwpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvYmluZGluZ3Mv
anMvU2VyaWFsaXplZFNjcmlwdFZhbHVlLmNwcCBiL1NvdXJjZS9XZWJDb3JlL2JpbmRpbmdzL2pz
L1NlcmlhbGl6ZWRTY3JpcHRWYWx1ZS5jcHAKaW5kZXggMjBjMWJjYmM0NGQ2Y2QxYTQ4NTliZDk1
N2FkYjU0OTA1NDBhNWMwZS4uZDE0ZTc5MDI4OGZkYzMyYjM5MzM1OWFiZWE1Njg3N2Q0NzU2ZWI4
MiAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvYmluZGluZ3MvanMvU2VyaWFsaXplZFNjcmlw
dFZhbHVlLmNwcAorKysgYi9Tb3VyY2UvV2ViQ29yZS9iaW5kaW5ncy9qcy9TZXJpYWxpemVkU2Ny
aXB0VmFsdWUuY3BwCkBAIC0yNDU2LDExICsyNDU2LDExIEBAIHByaXZhdGU6CiAgICAgICAgIHB0
ciArPSBsZW5ndGggKiBzaXplb2YoVUNoYXIpOwogI2Vsc2UKICAgICAgICAgVmVjdG9yPFVDaGFy
PiBidWZmZXI7Ci0gICAgICAgIGJ1ZmZlci5yZXNlcnZlQ2FwYWNpdHkobGVuZ3RoKTsKKyAgICAg
ICAgYnVmZmVyLnJlc2VydmVJbml0aWFsQ2FwYWNpdHkobGVuZ3RoKTsKICAgICAgICAgZm9yICh1
bnNpZ25lZCBpID0gMDsgaSA8IGxlbmd0aDsgaSsrKSB7CiAgICAgICAgICAgICB1aW50MTZfdCBj
aDsKICAgICAgICAgICAgIHJlYWRMaXR0bGVFbmRpYW4ocHRyLCBlbmQsIGNoKTsKLSAgICAgICAg
ICAgIGJ1ZmZlci5hcHBlbmQoY2gpOworICAgICAgICAgICAgYnVmZmVyLnVuY2hlY2tlZEFwcGVu
ZChjaCk7CiAgICAgICAgIH0KICAgICAgICAgc3RyID0gU3RyaW5nOjphZG9wdChXVEZNb3ZlKGJ1
ZmZlcikpOwogI2VuZGlmCkBAIC00NTcyLDEyICs0NTcyLDkgQEAgdWludDMyX3QgU2VyaWFsaXpl
ZFNjcmlwdFZhbHVlOjp3aXJlRm9ybWF0VmVyc2lvbigpCiAKIFZlY3RvcjxTdHJpbmc+IFNlcmlh
bGl6ZWRTY3JpcHRWYWx1ZTo6YmxvYlVSTHMoKSBjb25zdAogewotICAgIFZlY3RvcjxTdHJpbmc+
IHJlc3VsdDsKLSAgICByZXN1bHQucmVzZXJ2ZUluaXRpYWxDYXBhY2l0eShtX2Jsb2JIYW5kbGVz
LnNpemUoKSk7Ci0gICAgZm9yIChhdXRvJiBoYW5kbGUgOiBtX2Jsb2JIYW5kbGVzKQotICAgICAg
ICByZXN1bHQudW5jaGVja2VkQXBwZW5kKGhhbmRsZS51cmwoKS5zdHJpbmcoKSk7Ci0KLSAgICBy
ZXR1cm4gcmVzdWx0OworICAgIHJldHVybiBtX2Jsb2JIYW5kbGVzLm1hcChbXShhdXRvJiBoYW5k
bGUpIHsKKyAgICAgICAgcmV0dXJuIGhhbmRsZS51cmwoKS5zdHJpbmcoKTsKKyAgICB9KTsKIH0K
IAogdm9pZCBTZXJpYWxpemVkU2NyaXB0VmFsdWU6OndyaXRlQmxvYnNUb0Rpc2tGb3JJbmRleGVk
REIoQ29tcGxldGlvbkhhbmRsZXI8dm9pZChJREJWYWx1ZSYmKT4mJiBjb21wbGV0aW9uSGFuZGxl
cikKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL2NyeXB0by9tYWMvQ3J5cHRvQWxnb3JpdGht
RUNEU0FNYWMuY3BwIGIvU291cmNlL1dlYkNvcmUvY3J5cHRvL21hYy9DcnlwdG9BbGdvcml0aG1F
Q0RTQU1hYy5jcHAKaW5kZXggNjhhYTc2N2M5Zjg0ZjNhNThiYjgyMGNlZDc4OWUzZDBmY2RhMWFk
MC4uYTFiNjg2NzAyZGI3YTg4ODhhOGRiZTZlMDNhODhiYWI5YzQ3Zjk5MiAxMDA2NDQKLS0tIGEv
U291cmNlL1dlYkNvcmUvY3J5cHRvL21hYy9DcnlwdG9BbGdvcml0aG1FQ0RTQU1hYy5jcHAKKysr
IGIvU291cmNlL1dlYkNvcmUvY3J5cHRvL21hYy9DcnlwdG9BbGdvcml0aG1FQ0RTQU1hYy5jcHAK
QEAgLTYzLDcgKzYzLDcgQEAgc3RhdGljIEV4Y2VwdGlvbk9yPFZlY3Rvcjx1aW50OF90Pj4gc2ln
bkVDRFNBKENyeXB0b0FsZ29yaXRobUlkZW50aWZpZXIgaGFzaCwgY28KICAgICAvLyBGSVhNRTog
PHJkYXI6Ly9wcm9ibGVtLzMxNjE4MzcxPgogICAgIC8vIGNvbnZlcnQgdGhlIERFUiBiaW5hcnkg
aW50byByICsgcwogICAgIFZlY3Rvcjx1aW50OF90PiBuZXdTaWduYXR1cmU7Ci0gICAgbmV3U2ln
bmF0dXJlLnJlc2VydmVDYXBhY2l0eShrZXlMZW5ndGhJbkJ5dGVzICogMik7CisgICAgbmV3U2ln
bmF0dXJlLnJlc2VydmVJbml0aWFsQ2FwYWNpdHkoa2V5TGVuZ3RoSW5CeXRlcyAqIDIpOwogICAg
IHNpemVfdCBvZmZzZXQgPSAxOyAvLyBza2lwIHRhZwogICAgIG9mZnNldCArPSBieXRlc1VzZWRU
b0VuY29kZWRMZW5ndGgoc2lnbmF0dXJlW29mZnNldF0pOyAvLyBza2lwIGxlbmd0aAogICAgICsr
b2Zmc2V0OyAvLyBza2lwIHRhZwpAQCAtNzEsNyArNzEsNyBAQCBzdGF0aWMgRXhjZXB0aW9uT3I8
VmVjdG9yPHVpbnQ4X3Q+PiBzaWduRUNEU0EoQ3J5cHRvQWxnb3JpdGhtSWRlbnRpZmllciBoYXNo
LCBjbwogICAgIC8vIElmIHIgPCBrZXlMZW5ndGhJbkJ5dGVzLCBmaWxsIHRoZSBoZWFkIG9mIHIg
d2l0aCAwcy4KICAgICBzaXplX3QgYnl0ZXNUb0NvcHkgPSBrZXlMZW5ndGhJbkJ5dGVzOwogICAg
IGlmIChzaWduYXR1cmVbb2Zmc2V0XSA8IGtleUxlbmd0aEluQnl0ZXMpIHsKLSAgICAgICAgbmV3
U2lnbmF0dXJlLnJlc2l6ZShrZXlMZW5ndGhJbkJ5dGVzIC0gc2lnbmF0dXJlW29mZnNldF0pOwor
ICAgICAgICBuZXdTaWduYXR1cmUuZ3JvdyhrZXlMZW5ndGhJbkJ5dGVzIC0gc2lnbmF0dXJlW29m
ZnNldF0pOwogICAgICAgICBtZW1zZXQobmV3U2lnbmF0dXJlLmRhdGEoKSwgSW5pdGlhbE9jdGV0
LCBrZXlMZW5ndGhJbkJ5dGVzIC0gc2lnbmF0dXJlW29mZnNldF0pOwogICAgICAgICBieXRlc1Rv
Q29weSA9IHNpZ25hdHVyZVtvZmZzZXRdOwogICAgIH0gZWxzZSBpZiAoc2lnbmF0dXJlW29mZnNl
dF0gPiBrZXlMZW5ndGhJbkJ5dGVzKSAvLyBPdGhlcndpc2Ugc2tpcCB0aGUgbGVhZGluZyAwcyBv
ZiByLgpAQCAtMTM0LDcgKzEzNCw3IEBAIHN0YXRpYyBFeGNlcHRpb25Pcjxib29sPiB2ZXJpZnlF
Q0RTQShDcnlwdG9BbGdvcml0aG1JZGVudGlmaWVyIGhhc2gsIGNvbnN0IFBsYXRmCiAKICAgICAv
LyBDb25zdHJ1Y3QgdGhlIERFUiBzaWduYXR1cmUuCiAgICAgVmVjdG9yPHVpbnQ4X3Q+IG5ld1Np
Z25hdHVyZTsKLSAgICBuZXdTaWduYXR1cmUucmVzZXJ2ZUNhcGFjaXR5KDYgKyBrZXlMZW5ndGhJ
bkJ5dGVzICogMyAgKyByTmVlZHNJbml0aWFsT2N0ZXQgKyBzTmVlZHNJbml0aWFsT2N0ZXQgLSBy
U3RhcnQgLSBzU3RhcnQpOworICAgIG5ld1NpZ25hdHVyZS5yZXNlcnZlSW5pdGlhbENhcGFjaXR5
KDYgKyBrZXlMZW5ndGhJbkJ5dGVzICogMyAgKyByTmVlZHNJbml0aWFsT2N0ZXQgKyBzTmVlZHNJ
bml0aWFsT2N0ZXQgLSByU3RhcnQgLSBzU3RhcnQpOwogICAgIG5ld1NpZ25hdHVyZS5hcHBlbmQo
U2VxdWVuY2VNYXJrKTsKICAgICBhZGRFbmNvZGVkQVNOMUxlbmd0aChuZXdTaWduYXR1cmUsIDQg
KyBrZXlMZW5ndGhJbkJ5dGVzICogMyAgKyByTmVlZHNJbml0aWFsT2N0ZXQgKyBzTmVlZHNJbml0
aWFsT2N0ZXQgLSByU3RhcnQgLSBzU3RhcnQpOwogICAgIG5ld1NpZ25hdHVyZS5hcHBlbmQoSW50
ZWdlck1hcmspOwpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvY3J5cHRvL21hYy9DcnlwdG9L
ZXlFQ01hYy5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9jcnlwdG8vbWFjL0NyeXB0b0tleUVDTWFjLmNw
cAppbmRleCBjZDk2MmY3OTdiMjI0Yzc4OGZlY2RmZTg1OTJjN2Y0MjRkMWFlYzhkLi42MGI3M2Zk
YmE2ODY5YWVjZGQ4NWViMDFhMTE5NmNiMDFjOWY5N2JjIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2Vi
Q29yZS9jcnlwdG8vbWFjL0NyeXB0b0tleUVDTWFjLmNwcAorKysgYi9Tb3VyY2UvV2ViQ29yZS9j
cnlwdG8vbWFjL0NyeXB0b0tleUVDTWFjLmNwcApAQCAtMjgyLDcgKzI4Miw3IEBAIFZlY3Rvcjx1
aW50OF90PiBDcnlwdG9LZXlFQzo6cGxhdGZvcm1FeHBvcnRTcGtpKCkgY29uc3QKICAgICBzaXpl
X3QgdG90YWxTaXplID0gc2l6ZW9mKElkRWNQdWJsaWNLZXkpICsgb2lkU2l6ZSArIGJ5dGVzTmVl
ZGVkRm9yRW5jb2RlZExlbmd0aChrZXlTaXplICsgMSkgKyBrZXlTaXplICsgNDsKIAogICAgIFZl
Y3Rvcjx1aW50OF90PiByZXN1bHQ7Ci0gICAgcmVzdWx0LnJlc2VydmVDYXBhY2l0eSh0b3RhbFNp
emUgKyBieXRlc05lZWRlZEZvckVuY29kZWRMZW5ndGgodG90YWxTaXplKSArIDEpOworICAgIHJl
c3VsdC5yZXNlcnZlSW5pdGlhbENhcGFjaXR5KHRvdGFsU2l6ZSArIGJ5dGVzTmVlZGVkRm9yRW5j
b2RlZExlbmd0aCh0b3RhbFNpemUpICsgMSk7CiAgICAgcmVzdWx0LmFwcGVuZChTZXF1ZW5jZU1h
cmspOwogICAgIGFkZEVuY29kZWRBU04xTGVuZ3RoKHJlc3VsdCwgdG90YWxTaXplKTsKICAgICBy
ZXN1bHQuYXBwZW5kKFNlcXVlbmNlTWFyayk7CkBAIC0zODgsNyArMzg4LDcgQEAgVmVjdG9yPHVp
bnQ4X3Q+IENyeXB0b0tleUVDOjpwbGF0Zm9ybUV4cG9ydFBrY3M4KCkgY29uc3QKICAgICBzaXpl
X3QgdG90YWxTaXplID0gc2l6ZW9mKFZlcnNpb24pICsgc2l6ZW9mKElkRWNQdWJsaWNLZXkpICsg
b2lkU2l6ZSArIGJ5dGVzTmVlZGVkRm9yRW5jb2RlZExlbmd0aChwcml2YXRlS2V5U2l6ZSkgKyBw
cml2YXRlS2V5U2l6ZSArIDM7CiAKICAgICBWZWN0b3I8dWludDhfdD4gcmVzdWx0OwotICAgIHJl
c3VsdC5yZXNlcnZlQ2FwYWNpdHkodG90YWxTaXplICsgYnl0ZXNOZWVkZWRGb3JFbmNvZGVkTGVu
Z3RoKHRvdGFsU2l6ZSkgKyAxKTsKKyAgICByZXN1bHQucmVzZXJ2ZUluaXRpYWxDYXBhY2l0eSh0
b3RhbFNpemUgKyBieXRlc05lZWRlZEZvckVuY29kZWRMZW5ndGgodG90YWxTaXplKSArIDEpOwog
ICAgIHJlc3VsdC5hcHBlbmQoU2VxdWVuY2VNYXJrKTsKICAgICBhZGRFbmNvZGVkQVNOMUxlbmd0
aChyZXN1bHQsIHRvdGFsU2l6ZSk7CiAgICAgcmVzdWx0LmFwcGVuZChWZXJzaW9uLCBzaXplb2Yo
VmVyc2lvbikpOwpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvY3J5cHRvL21hYy9DcnlwdG9L
ZXlSU0FNYWMuY3BwIGIvU291cmNlL1dlYkNvcmUvY3J5cHRvL21hYy9DcnlwdG9LZXlSU0FNYWMu
Y3BwCmluZGV4IGI5MmJkZGI0YjMzMDZiNzVmNTgxZjI1NDNmZmQxOGU5MTAzNjdhNDYuLjkzNDg2
ODVjNzY2YTUyZWYyYjcxODU3NmU1NzUwODQzYTcyYzhlM2EgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9X
ZWJDb3JlL2NyeXB0by9tYWMvQ3J5cHRvS2V5UlNBTWFjLmNwcAorKysgYi9Tb3VyY2UvV2ViQ29y
ZS9jcnlwdG8vbWFjL0NyeXB0b0tleVJTQU1hYy5jcHAKQEAgLTM0Miw3ICszNDIsNyBAQCBFeGNl
cHRpb25PcjxWZWN0b3I8dWludDhfdD4+IENyeXB0b0tleVJTQTo6ZXhwb3J0U3BraSgpIGNvbnN0
CiAKICAgICAvLyBQZXIgaHR0cHM6Ly90b29scy5pZXRmLm9yZy9odG1sL3JmYzUyODAjc2VjdGlv
bi00LjEuIHN1YmplY3RQdWJsaWNLZXlJbmZvLgogICAgIFZlY3Rvcjx1aW50OF90PiByZXN1bHQ7
Ci0gICAgcmVzdWx0LnJlc2VydmVDYXBhY2l0eSh0b3RhbFNpemUgKyBieXRlc05lZWRlZEZvckVu
Y29kZWRMZW5ndGgodG90YWxTaXplKSArIDEpOworICAgIHJlc3VsdC5yZXNlcnZlSW5pdGlhbENh
cGFjaXR5KHRvdGFsU2l6ZSArIGJ5dGVzTmVlZGVkRm9yRW5jb2RlZExlbmd0aCh0b3RhbFNpemUp
ICsgMSk7CiAgICAgcmVzdWx0LmFwcGVuZChTZXF1ZW5jZU1hcmspOwogICAgIGFkZEVuY29kZWRB
U04xTGVuZ3RoKHJlc3VsdCwgdG90YWxTaXplKTsKICAgICByZXN1bHQuYXBwZW5kKFJTQU9JREhl
YWRlciwgc2l6ZW9mKFJTQU9JREhlYWRlcikpOwpAQCAtNDAxLDcgKzQwMSw3IEBAIEV4Y2VwdGlv
bk9yPFZlY3Rvcjx1aW50OF90Pj4gQ3J5cHRvS2V5UlNBOjpleHBvcnRQa2NzOCgpIGNvbnN0CiAK
ICAgICAvLyBQZXIgaHR0cHM6Ly90b29scy5pZXRmLm9yZy9odG1sL3JmYzUyMDgjc2VjdGlvbi01
LiBQcml2YXRlS2V5SW5mby4KICAgICBWZWN0b3I8dWludDhfdD4gcmVzdWx0OwotICAgIHJlc3Vs
dC5yZXNlcnZlQ2FwYWNpdHkodG90YWxTaXplICsgYnl0ZXNOZWVkZWRGb3JFbmNvZGVkTGVuZ3Ro
KHRvdGFsU2l6ZSkgKyAxKTsKKyAgICByZXN1bHQucmVzZXJ2ZUluaXRpYWxDYXBhY2l0eSh0b3Rh
bFNpemUgKyBieXRlc05lZWRlZEZvckVuY29kZWRMZW5ndGgodG90YWxTaXplKSArIDEpOwogICAg
IHJlc3VsdC5hcHBlbmQoU2VxdWVuY2VNYXJrKTsKICAgICBhZGRFbmNvZGVkQVNOMUxlbmd0aChy
ZXN1bHQsIHRvdGFsU2l6ZSk7CiAgICAgcmVzdWx0LmFwcGVuZChWZXJzaW9uLCBzaXplb2YoVmVy
c2lvbikpOwpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvY3NzL0NTU0Jhc2ljU2hhcGVzLmNw
cCBiL1NvdXJjZS9XZWJDb3JlL2Nzcy9DU1NCYXNpY1NoYXBlcy5jcHAKaW5kZXggMmNiYzFjZWZk
MjNlOGE5MDFmZWFlMGQyMGM5ZjZmNzVmMGZjYjUwMi4uZTI4NTUxZTdiMmY0NDc2MjE5NzFiYjBi
NGJmMjNhOTlmMmI1YzcyNSAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvY3NzL0NTU0Jhc2lj
U2hhcGVzLmNwcAorKysgYi9Tb3VyY2UvV2ViQ29yZS9jc3MvQ1NTQmFzaWNTaGFwZXMuY3BwCkBA
IC0yNjEsMTMgKzI2MSwxMCBAQCBzdGF0aWMgU3RyaW5nIGJ1aWxkUG9seWdvblN0cmluZyhjb25z
dCBXaW5kUnVsZSYgd2luZFJ1bGUsIGNvbnN0IFZlY3RvcjxTdHJpbmc+JgogCiBTdHJpbmcgQ1NT
QmFzaWNTaGFwZVBvbHlnb246OmNzc1RleHQoKSBjb25zdAogewotICAgIFZlY3RvcjxTdHJpbmc+
IHBvaW50czsKLSAgICBwb2ludHMucmVzZXJ2ZUluaXRpYWxDYXBhY2l0eShtX3ZhbHVlcy5zaXpl
KCkpOwotCi0gICAgZm9yIChhdXRvJiBzaGFwZVZhbHVlIDogbV92YWx1ZXMpCi0gICAgICAgIHBv
aW50cy51bmNoZWNrZWRBcHBlbmQoc2hhcGVWYWx1ZS0+Y3NzVGV4dCgpKTsKLQotICAgIHJldHVy
biBidWlsZFBvbHlnb25TdHJpbmcobV93aW5kUnVsZSwgcG9pbnRzKTsKKyAgICBhdXRvIHBvaW50
cyA9IG1fdmFsdWVzLm1hcChbXShhdXRvJiBzaGFwZVZhbHVlKSB7CisgICAgICAgIHJldHVybiBz
aGFwZVZhbHVlLT5jc3NUZXh0KCk7CisgICAgfSk7CisgICAgcmV0dXJuIGJ1aWxkUG9seWdvblN0
cmluZyhtX3dpbmRSdWxlLCBXVEZNb3ZlKHBvaW50cykpOwogfQogCiBib29sIENTU0Jhc2ljU2hh
cGVQb2x5Z29uOjplcXVhbHMoY29uc3QgQ1NTQmFzaWNTaGFwZSYgc2hhcGUpIGNvbnN0CmRpZmYg
LS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9jc3MvQ1NTQ29tcHV0ZWRTdHlsZURlY2xhcmF0aW9uLmNw
cCBiL1NvdXJjZS9XZWJDb3JlL2Nzcy9DU1NDb21wdXRlZFN0eWxlRGVjbGFyYXRpb24uY3BwCmlu
ZGV4IDZlOTg1YmJlMjRhNzU4ZTQxN2YyY2I2MTk1YjMzZWUyYzc3YmU0NTEuLmQyYzVjNzczYWQ2
YzJjNjA1YmRkYmY1YWI1ZjU2Y2QzM2EyZTMwYmQgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3Jl
L2Nzcy9DU1NDb21wdXRlZFN0eWxlRGVjbGFyYXRpb24uY3BwCisrKyBiL1NvdXJjZS9XZWJDb3Jl
L2Nzcy9DU1NDb21wdXRlZFN0eWxlRGVjbGFyYXRpb24uY3BwCkBAIC00Mzg0LDggKzQzODQsOSBA
QCBSZWY8TXV0YWJsZVN0eWxlUHJvcGVydGllcz4gQ29tcHV0ZWRTdHlsZUV4dHJhY3Rvcjo6Y29w
eVByb3BlcnRpZXNJblNldChjb25zdCBDUwogICAgIGxpc3QucmVzZXJ2ZUluaXRpYWxDYXBhY2l0
eShsZW5ndGgpOwogICAgIGZvciAodW5zaWduZWQgaSA9IDA7IGkgPCBsZW5ndGg7ICsraSkgewog
ICAgICAgICBpZiAoYXV0byB2YWx1ZSA9IHByb3BlcnR5VmFsdWUoc2V0W2ldKSkKLSAgICAgICAg
ICAgIGxpc3QuYXBwZW5kKENTU1Byb3BlcnR5KHNldFtpXSwgV1RGTW92ZSh2YWx1ZSksIGZhbHNl
KSk7CisgICAgICAgICAgICBsaXN0LnVuY2hlY2tlZEFwcGVuZChDU1NQcm9wZXJ0eShzZXRbaV0s
IFdURk1vdmUodmFsdWUpLCBmYWxzZSkpOwogICAgIH0KKyAgICBsaXN0LnNocmlua1RvRml0KCk7
CiAgICAgcmV0dXJuIE11dGFibGVTdHlsZVByb3BlcnRpZXM6OmNyZWF0ZShXVEZNb3ZlKGxpc3Qp
KTsKIH0KIApAQCAtNDM5OCw2ICs0Mzk5LDcgQEAgUmVmPE11dGFibGVTdHlsZVByb3BlcnRpZXM+
IENvbXB1dGVkU3R5bGVFeHRyYWN0b3I6OmNvcHlQcm9wZXJ0aWVzKCkKICAgICAgICAgaWYgKGF1
dG8gdmFsdWUgPSBwcm9wZXJ0eVZhbHVlKHByb3BlcnR5SUQpKQogICAgICAgICAgICAgbGlzdC5h
cHBlbmQoQ1NTUHJvcGVydHkocHJvcGVydHlJRCwgV1RGTW92ZSh2YWx1ZSkpKTsKICAgICB9Cisg
ICAgbGlzdC5zaHJpbmtUb0ZpdCgpOwogICAgIHJldHVybiBNdXRhYmxlU3R5bGVQcm9wZXJ0aWVz
OjpjcmVhdGUoV1RGTW92ZShsaXN0KSk7CiB9CiAKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3Jl
L2Nzcy9DU1NGb250RmFjZS5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9jc3MvQ1NTRm9udEZhY2UuY3Bw
CmluZGV4IGViM2JjMGIzMjI0ZDc1YTYxMjNkYzJiYWQ3OTY4M2M3N2I5YTg1NjkuLjQzYTVmMTZk
ZDcyYzU5Y2VhYjcwM2Q1NGQ3ZTIyZTI3MzMyZmMxY2QgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJD
b3JlL2Nzcy9DU1NGb250RmFjZS5jcHAKKysrIGIvU291cmNlL1dlYkNvcmUvY3NzL0NTU0ZvbnRG
YWNlLmNwcApAQCAtNTQsMTMgKzU0LDggQEAgREVGSU5FX0FMTE9DQVRPUl9XSVRIX0hFQVBfSURF
TlRJRklFUihDU1NGb250RmFjZSk7CiAKIHRlbXBsYXRlPHR5cGVuYW1lIFQ+IHZvaWQgaXRlcmF0
ZUNsaWVudHMoSGFzaFNldDxDU1NGb250RmFjZTo6Q2xpZW50Kj4mIGNsaWVudHMsIFQgY2FsbGJh
Y2spCiB7Ci0gICAgVmVjdG9yPFJlZjxDU1NGb250RmFjZTo6Q2xpZW50Pj4gY2xpZW50c0NvcHk7
Ci0gICAgY2xpZW50c0NvcHkucmVzZXJ2ZUluaXRpYWxDYXBhY2l0eShjbGllbnRzLnNpemUoKSk7
Ci0gICAgZm9yIChhdXRvKiBjbGllbnQgOiBjbGllbnRzKQotICAgICAgICBjbGllbnRzQ29weS51
bmNoZWNrZWRBcHBlbmQoKmNsaWVudCk7Ci0KLSAgICBmb3IgKGF1dG8mIGNsaWVudCA6IGNsaWVu
dHNDb3B5KQotICAgICAgICBjYWxsYmFjayhjbGllbnQpOworICAgIGZvciAoYXV0byYgY2xpZW50
IDogY29weVRvVmVjdG9yT2Y8UmVmUHRyPENTU0ZvbnRGYWNlOjpDbGllbnQ+PihjbGllbnRzKSkK
KyAgICAgICAgY2FsbGJhY2soKmNsaWVudCk7CiB9CiAKIHZvaWQgQ1NTRm9udEZhY2U6OmFwcGVu
ZFNvdXJjZXMoQ1NTRm9udEZhY2UmIGZvbnRGYWNlLCBDU1NWYWx1ZUxpc3QmIHNyY0xpc3QsIFNj
cmlwdEV4ZWN1dGlvbkNvbnRleHQqIGNvbnRleHQsIGJvb2wgaXNJbml0aWF0aW5nRWxlbWVudElu
VXNlckFnZW50U2hhZG93VHJlZSkKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL2Nzcy9DU1NG
b250RmFjZVNldC5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9jc3MvQ1NTRm9udEZhY2VTZXQuY3BwCmlu
ZGV4IDYyZWVjYjVhNWQyNDFkY2JlOGIyNDkzNWJiNmMyZjMyODk0OTE0YWUuLmViODg5OTM5Njhi
MzBjMDA4NzdkYmViNjBjODRhZDRmMjUyNmQ4ZjAgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3Jl
L2Nzcy9DU1NGb250RmFjZVNldC5jcHAKKysrIGIvU291cmNlL1dlYkNvcmUvY3NzL0NTU0ZvbnRG
YWNlU2V0LmNwcApAQCAtNDI4LDExICs0MjgsOSBAQCBFeGNlcHRpb25PcjxWZWN0b3I8c3RkOjpy
ZWZlcmVuY2Vfd3JhcHBlcjxDU1NGb250RmFjZT4+PiBDU1NGb250RmFjZVNldDo6bWF0Y2hpbgog
ICAgICAgICB9CiAgICAgfQogCi0gICAgVmVjdG9yPHN0ZDo6cmVmZXJlbmNlX3dyYXBwZXI8Q1NT
Rm9udEZhY2U+PiByZXN1bHQ7Ci0gICAgcmVzdWx0LnJlc2VydmVJbml0aWFsQ2FwYWNpdHkocmVz
dWx0Q29uc3RpdHVlbnRzLnNpemUoKSk7Ci0gICAgZm9yIChhdXRvKiBjb25zdGl0dWVudCA6IHJl
c3VsdENvbnN0aXR1ZW50cykKLSAgICAgICAgcmVzdWx0LnVuY2hlY2tlZEFwcGVuZCgqY29uc3Rp
dHVlbnQpOwotICAgIHJldHVybiByZXN1bHQ7CisgICAgcmV0dXJuIFdURjo6bWFwKHJlc3VsdENv
bnN0aXR1ZW50cywgW10oYXV0byogY29uc3RpdHVlbnQpIC0+IHN0ZDo6cmVmZXJlbmNlX3dyYXBw
ZXI8Q1NTRm9udEZhY2U+IHsKKyAgICAgICAgcmV0dXJuICpjb25zdGl0dWVudDsKKyAgICB9KTsK
IH0KIAogRXhjZXB0aW9uT3I8Ym9vbD4gQ1NTRm9udEZhY2VTZXQ6OmNoZWNrKGNvbnN0IFN0cmlu
ZyYgZm9udCwgY29uc3QgU3RyaW5nJiB0ZXh0KQpAQCAtNDg2LDEyICs0ODQsOSBAQCBDU1NTZWdt
ZW50ZWRGb250RmFjZSogQ1NTRm9udEZhY2VTZXQ6OmZvbnRGYWNlKEZvbnRTZWxlY3Rpb25SZXF1
ZXN0IHJlcXVlc3QsIGNvbgogICAgIH0KIAogICAgIGlmICghY2FuZGlkYXRlRm9udEZhY2VzLmlz
RW1wdHkoKSkgewotICAgICAgICBWZWN0b3I8Rm9udFNlbGVjdGlvbkNhcGFiaWxpdGllcz4gY2Fw
YWJpbGl0aWVzOwotICAgICAgICBjYXBhYmlsaXRpZXMucmVzZXJ2ZUluaXRpYWxDYXBhY2l0eShj
YW5kaWRhdGVGb250RmFjZXMuc2l6ZSgpKTsKLSAgICAgICAgZm9yIChhdXRvJiBmYWNlIDogY2Fu
ZGlkYXRlRm9udEZhY2VzKSB7Ci0gICAgICAgICAgICBhdXRvIGZvbnRTZWxlY3Rpb25DYXBhYmls
aXRpZXMgPSBmYWNlLmdldCgpLmZvbnRTZWxlY3Rpb25DYXBhYmlsaXRpZXMoKTsKLSAgICAgICAg
ICAgIGNhcGFiaWxpdGllcy51bmNoZWNrZWRBcHBlbmQoKmZvbnRTZWxlY3Rpb25DYXBhYmlsaXRp
ZXMpOwotICAgICAgICB9CisgICAgICAgIGF1dG8gY2FwYWJpbGl0aWVzID0gY2FuZGlkYXRlRm9u
dEZhY2VzLm1hcChbXShhdXRvJiBmYWNlKSB7CisgICAgICAgICAgICByZXR1cm4gKmZhY2UuZ2V0
KCkuZm9udFNlbGVjdGlvbkNhcGFiaWxpdGllcygpOworICAgICAgICB9KTsKICAgICAgICAgRm9u
dFNlbGVjdGlvbkFsZ29yaXRobSBmb250U2VsZWN0aW9uQWxnb3JpdGhtKHJlcXVlc3QsIGNhcGFi
aWxpdGllcyk7CiAgICAgICAgIHN0ZDo6c3RhYmxlX3NvcnQoY2FuZGlkYXRlRm9udEZhY2VzLmJl
Z2luKCksIGNhbmRpZGF0ZUZvbnRGYWNlcy5lbmQoKSwgWyZmb250U2VsZWN0aW9uQWxnb3JpdGht
XShjb25zdCBDU1NGb250RmFjZSYgZmlyc3QsIGNvbnN0IENTU0ZvbnRGYWNlJiBzZWNvbmQpIHsK
ICAgICAgICAgICAgIGF1dG8gZmlyc3RDYXBhYmlsaXRpZXMgPSBmaXJzdC5mb250U2VsZWN0aW9u
Q2FwYWJpbGl0aWVzKCk7CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9jc3MvQ1NTS2V5ZnJh
bWVzUnVsZS5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9jc3MvQ1NTS2V5ZnJhbWVzUnVsZS5jcHAKaW5k
ZXggMzY1MWVlYjNjOGU1OGE2ZGZiZmZmYTkxZTJlMGM5NDM3NWU1NmI0NS4uYTE2ZTZjY2RiNzVl
ZmY4Y2FlNjk3Mzg4NWUzYWExNGFiODU1NTQ3MCAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUv
Y3NzL0NTU0tleWZyYW1lc1J1bGUuY3BwCisrKyBiL1NvdXJjZS9XZWJDb3JlL2Nzcy9DU1NLZXlm
cmFtZXNSdWxlLmNwcApAQCAtNTIsMTEgKzUyLDkgQEAgU3R5bGVSdWxlS2V5ZnJhbWVzOjpTdHls
ZVJ1bGVLZXlmcmFtZXMoY29uc3QgQXRvbVN0cmluZyYgbmFtZSwgc3RkOjp1bmlxdWVfcHRyPEQK
IAogU3R5bGVSdWxlS2V5ZnJhbWVzOjpTdHlsZVJ1bGVLZXlmcmFtZXMoY29uc3QgU3R5bGVSdWxl
S2V5ZnJhbWVzJiBvKQogICAgIDogU3R5bGVSdWxlQmFzZShvKQorICAgICwgbV9rZXlmcmFtZXMo
by5rZXlmcmFtZXMoKSkKICAgICAsIG1fbmFtZShvLm1fbmFtZSkKIHsKLSAgICBtX2tleWZyYW1l
cy5yZXNlcnZlSW5pdGlhbENhcGFjaXR5KG8ua2V5ZnJhbWVzKCkuc2l6ZSgpKTsKLSAgICBmb3Ig
KGF1dG8mIGtleWZyYW1lIDogby5rZXlmcmFtZXMoKSkKLSAgICAgICAgbV9rZXlmcmFtZXMudW5j
aGVja2VkQXBwZW5kKGtleWZyYW1lLmNvcHlSZWYoKSk7CiB9CiAKIFJlZjxTdHlsZVJ1bGVLZXlm
cmFtZXM+IFN0eWxlUnVsZUtleWZyYW1lczo6Y3JlYXRlKGNvbnN0IEF0b21TdHJpbmcmIG5hbWUp
CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9jc3MvU3R5bGVQcm9wZXJ0aWVzLmNwcCBiL1Nv
dXJjZS9XZWJDb3JlL2Nzcy9TdHlsZVByb3BlcnRpZXMuY3BwCmluZGV4IGVlZjUxNTZiOTZhYTRi
NTk4YTFiZjJkNTNlNTliOGQ4NDgzMTQ1ZDkuLmFlMzhiOGUwODVhMjRhYWFlMDRlN2NiNWRmMjQz
Zjg3MTE1Y2IwZjcgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL2Nzcy9TdHlsZVByb3BlcnRp
ZXMuY3BwCisrKyBiL1NvdXJjZS9XZWJDb3JlL2Nzcy9TdHlsZVByb3BlcnRpZXMuY3BwCkBAIC0x
NzI1LDYgKzE3MjUsNyBAQCBSZWY8TXV0YWJsZVN0eWxlUHJvcGVydGllcz4gU3R5bGVQcm9wZXJ0
aWVzOjpjb3B5UHJvcGVydGllc0luU2V0KGNvbnN0IENTU1Byb3BlcgogICAgICAgICBpZiAoYXV0
byB2YWx1ZSA9IGdldFByb3BlcnR5Q1NTVmFsdWUoc2V0W2ldKSkKICAgICAgICAgICAgIGxpc3Qu
dW5jaGVja2VkQXBwZW5kKENTU1Byb3BlcnR5KHNldFtpXSwgV1RGTW92ZSh2YWx1ZSksIGZhbHNl
KSk7CiAgICAgfQorICAgIGxpc3Quc2hyaW5rVG9GaXQoKTsKICAgICByZXR1cm4gTXV0YWJsZVN0
eWxlUHJvcGVydGllczo6Y3JlYXRlKFdURk1vdmUobGlzdCkpOwogfQogCkBAIC0xODA1LDcgKzE4
MDYsNiBAQCBEZWZlcnJlZFN0eWxlUHJvcGVydGllczo6RGVmZXJyZWRTdHlsZVByb3BlcnRpZXMo
Y29uc3QgQ1NTUGFyc2VyVG9rZW5SYW5nZSYgcmFuZwogICAgICwgbV9wYXJzZXIocGFyc2VyKQog
ewogICAgIHNpemVfdCBsZW5ndGggPSByYW5nZS5lbmQoKSAtIHJhbmdlLmJlZ2luKCk7Ci0gICAg
bV90b2tlbnMucmVzZXJ2ZUNhcGFjaXR5KGxlbmd0aCk7CiAgICAgbV90b2tlbnMuYXBwZW5kKHJh
bmdlLmJlZ2luKCksIGxlbmd0aCk7CiB9CiAgICAgCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29y
ZS9jc3MvU3R5bGVSdWxlLmNwcCBiL1NvdXJjZS9XZWJDb3JlL2Nzcy9TdHlsZVJ1bGUuY3BwCmlu
ZGV4IDYzZDI0ZWQ3YmY0NGFlNmU3OTVlOWY2OWYwNGU0ZjY5NmNhYjY1MjkuLjFkOWVlN2QwMDU0
Mzg3NTU0OGFkMzJlYzU3NGE4YjAwZGJlOTU5YjcgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3Jl
L2Nzcy9TdHlsZVJ1bGUuY3BwCisrKyBiL1NvdXJjZS9XZWJDb3JlL2Nzcy9TdHlsZVJ1bGUuY3Bw
CkBAIC0zNjksNyArMzY5LDYgQEAgRGVmZXJyZWRTdHlsZUdyb3VwUnVsZUxpc3Q6OkRlZmVycmVk
U3R5bGVHcm91cFJ1bGVMaXN0KGNvbnN0IENTU1BhcnNlclRva2VuUmFuZ2UKICAgICA6IG1fcGFy
c2VyKHBhcnNlcikKIHsKICAgICBzaXplX3QgbGVuZ3RoID0gcmFuZ2UuZW5kKCkgLSByYW5nZS5i
ZWdpbigpOwotICAgIG1fdG9rZW5zLnJlc2VydmVDYXBhY2l0eShsZW5ndGgpOwogICAgIG1fdG9r
ZW5zLmFwcGVuZChyYW5nZS5iZWdpbigpLCBsZW5ndGgpOwogfQogCkBAIC0zOTksMTAgKzM5OCw4
IEBAIFN0eWxlUnVsZUdyb3VwOjpTdHlsZVJ1bGVHcm91cChTdHlsZVJ1bGVUeXBlIHR5cGUsIHN0
ZDo6dW5pcXVlX3B0cjxEZWZlcnJlZFN0eWxlCiAKIFN0eWxlUnVsZUdyb3VwOjpTdHlsZVJ1bGVH
cm91cChjb25zdCBTdHlsZVJ1bGVHcm91cCYgbykKICAgICA6IFN0eWxlUnVsZUJhc2UobykKKyAg
ICAsIG1fY2hpbGRSdWxlcyhvLmNoaWxkUnVsZXMoKS5tYXAoW10oYXV0byYgcnVsZSkgLT4gUmVm
UHRyPFN0eWxlUnVsZUJhc2U+IHsgcmV0dXJuIHJ1bGUtPmNvcHkoKTsgfSkpCiB7Ci0gICAgbV9j
aGlsZFJ1bGVzLnJlc2VydmVJbml0aWFsQ2FwYWNpdHkoby5jaGlsZFJ1bGVzKCkuc2l6ZSgpKTsK
LSAgICBmb3IgKGF1dG8mIGNoaWxkUnVsZSA6IG8uY2hpbGRSdWxlcygpKQotICAgICAgICBtX2No
aWxkUnVsZXMudW5jaGVja2VkQXBwZW5kKGNoaWxkUnVsZS0+Y29weSgpKTsKIH0KIAogY29uc3Qg
VmVjdG9yPFJlZlB0cjxTdHlsZVJ1bGVCYXNlPj4mIFN0eWxlUnVsZUdyb3VwOjpjaGlsZFJ1bGVz
KCkgY29uc3QKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL2Nzcy9jYWxjL0NTU0NhbGNPcGVy
YXRpb25Ob2RlLmggYi9Tb3VyY2UvV2ViQ29yZS9jc3MvY2FsYy9DU1NDYWxjT3BlcmF0aW9uTm9k
ZS5oCmluZGV4IDJjNzE2Y2FlODY0N2UyZWZkMzRmNTdjZmM4ZjczOTQ5ZDIyNTViNmYuLjE0OTRl
NDlmYTk4MWI3MDY4OTc5Y2IzZTg5MzJhMTJjNDQxODVmM2EgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9X
ZWJDb3JlL2Nzcy9jYWxjL0NTU0NhbGNPcGVyYXRpb25Ob2RlLmgKKysrIGIvU291cmNlL1dlYkNv
cmUvY3NzL2NhbGMvQ1NTQ2FsY09wZXJhdGlvbk5vZGUuaApAQCAtODUsMTAgKzg1LDggQEAgcHJp
dmF0ZToKICAgICBDU1NDYWxjT3BlcmF0aW9uTm9kZShDYWxjdWxhdGlvbkNhdGVnb3J5IGNhdGVn
b3J5LCBDYWxjT3BlcmF0b3Igb3AsIFJlZjxDU1NDYWxjRXhwcmVzc2lvbk5vZGU+JiYgbGVmdFNp
ZGUsIFJlZjxDU1NDYWxjRXhwcmVzc2lvbk5vZGU+JiYgcmlnaHRTaWRlKQogICAgICAgICA6IENT
U0NhbGNFeHByZXNzaW9uTm9kZShjYXRlZ29yeSkKICAgICAgICAgLCBtX29wZXJhdG9yKG9wKQor
ICAgICAgICAsIG1fY2hpbGRyZW4oeyBXVEZNb3ZlKGxlZnRTaWRlKSwgV1RGTW92ZShyaWdodFNp
ZGUpIH0pCiAgICAgewotICAgICAgICBtX2NoaWxkcmVuLnJlc2VydmVJbml0aWFsQ2FwYWNpdHko
Mik7Ci0gICAgICAgIG1fY2hpbGRyZW4udW5jaGVja2VkQXBwZW5kKFdURk1vdmUobGVmdFNpZGUp
KTsKLSAgICAgICAgbV9jaGlsZHJlbi51bmNoZWNrZWRBcHBlbmQoV1RGTW92ZShyaWdodFNpZGUp
KTsKICAgICB9CiAKICAgICBDU1NDYWxjT3BlcmF0aW9uTm9kZShDYWxjdWxhdGlvbkNhdGVnb3J5
IGNhdGVnb3J5LCBDYWxjT3BlcmF0b3Igb3AsIFZlY3RvcjxSZWY8Q1NTQ2FsY0V4cHJlc3Npb25O
b2RlPj4mJiBjaGlsZHJlbikKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL2Nzcy9jYWxjL0NT
U0NhbGNWYWx1ZS5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9jc3MvY2FsYy9DU1NDYWxjVmFsdWUuY3Bw
CmluZGV4IDA1ZDkyZGZiN2NhYjlmZDU5NjY3NDk4NjhmYjY4MjgwYjA5NzVlZTYuLjQzNTgyYjRk
MTEzMDI5NTczZjNiYWYwMTYyYTNjZGY2M2M2NzlmNDcgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJD
b3JlL2Nzcy9jYWxjL0NTU0NhbGNWYWx1ZS5jcHAKKysrIGIvU291cmNlL1dlYkNvcmUvY3NzL2Nh
bGMvQ1NTQ2FsY1ZhbHVlLmNwcApAQCAtNjksMTEgKzY5LDEwIEBAIHN0YXRpYyBWZWN0b3I8UmVm
PENTU0NhbGNFeHByZXNzaW9uTm9kZT4+IGNyZWF0ZUNTUyhjb25zdCBWZWN0b3I8c3RkOjp1bmlx
dWVfcHRyCiAgICAgVmVjdG9yPFJlZjxDU1NDYWxjRXhwcmVzc2lvbk5vZGU+PiB2YWx1ZXM7CiAg
ICAgdmFsdWVzLnJlc2VydmVJbml0aWFsQ2FwYWNpdHkobm9kZXMuc2l6ZSgpKTsKICAgICBmb3Ig
KGF1dG8mIG5vZGUgOiBub2RlcykgewotICAgICAgICBhdXRvIGNzc05vZGUgPSBjcmVhdGVDU1Mo
Km5vZGUsIHN0eWxlKTsKLSAgICAgICAgaWYgKCFjc3NOb2RlKQotICAgICAgICAgICAgY29udGlu
dWU7Ci0gICAgICAgIHZhbHVlcy51bmNoZWNrZWRBcHBlbmQoY3NzTm9kZS5yZWxlYXNlTm9uTnVs
bCgpKTsKKyAgICAgICAgaWYgKGF1dG8gY3NzTm9kZSA9IGNyZWF0ZUNTUygqbm9kZSwgc3R5bGUp
KQorICAgICAgICAgICAgdmFsdWVzLnVuY2hlY2tlZEFwcGVuZChjc3NOb2RlLnJlbGVhc2VOb25O
dWxsKCkpOwogICAgIH0KKyAgICB2YWx1ZXMuc2hyaW5rVG9GaXQoKTsKICAgICByZXR1cm4gdmFs
dWVzOwogfQogCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9kaXNwbGF5L2Nzcy9EaXNwbGF5
Qm94RGVjb3JhdGlvblBhaW50ZXIuY3BwIGIvU291cmNlL1dlYkNvcmUvZGlzcGxheS9jc3MvRGlz
cGxheUJveERlY29yYXRpb25QYWludGVyLmNwcAppbmRleCBhNWE2YjRiMzJkY2NmNzFhMWZhNTM3
ZmVkYzJlOTFlNDAwZTIzOGMyLi44NTZhM2RlNTA0ZGVjMGJiZmE5MGFjMTdkZTM3ZjUxNWUxNGQ5
MjA0IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9kaXNwbGF5L2Nzcy9EaXNwbGF5Qm94RGVj
b3JhdGlvblBhaW50ZXIuY3BwCisrKyBiL1NvdXJjZS9XZWJDb3JlL2Rpc3BsYXkvY3NzL0Rpc3Bs
YXlCb3hEZWNvcmF0aW9uUGFpbnRlci5jcHAKQEAgLTQ4NywxMyArNDg3LDkgQEAgdm9pZCBCb3Jk
ZXJQYWludGVyOjpjbGlwQm9yZGVyU2lkZVBvbHlnb24oUGFpbnRpbmdDb250ZXh0JiBwYWludGlu
Z0NvbnRleHQsIGNvbnMKICAgICAvLyAgICAgICAgIDAtLS0tLS0tLS0tLS0tLS0tMwogICAgIC8v
CiAgICAgVmVjdG9yPEZsb2F0UG9pbnQ+IHF1YWQ7Ci0gICAgcXVhZC5yZXNlcnZlSW5pdGlhbENh
cGFjaXR5KDQpOwogICAgIHN3aXRjaCAoc2lkZSkgewogICAgIGNhc2UgQm94U2lkZTo6VG9wOgot
ICAgICAgICBxdWFkLnVuY2hlY2tlZEFwcGVuZChvdXRlclJlY3QubWluWE1pbllDb3JuZXIoKSk7
Ci0gICAgICAgIHF1YWQudW5jaGVja2VkQXBwZW5kKGlubmVyUmVjdC5taW5YTWluWUNvcm5lcigp
KTsKLSAgICAgICAgcXVhZC51bmNoZWNrZWRBcHBlbmQoaW5uZXJSZWN0Lm1heFhNaW5ZQ29ybmVy
KCkpOwotICAgICAgICBxdWFkLnVuY2hlY2tlZEFwcGVuZChvdXRlclJlY3QubWF4WE1pbllDb3Ju
ZXIoKSk7CisgICAgICAgIHF1YWQgPSB7IG91dGVyUmVjdC5taW5YTWluWUNvcm5lcigpLCBpbm5l
clJlY3QubWluWE1pbllDb3JuZXIoKSwgaW5uZXJSZWN0Lm1heFhNaW5ZQ29ybmVyKCksIG91dGVy
UmVjdC5tYXhYTWluWUNvcm5lcigpIH07CiAKICAgICAgICAgaWYgKCFpbm5lckJvcmRlci5yYWRp
aSgpLnRvcExlZnQoKS5pc1plcm8oKSkKICAgICAgICAgICAgIGZpbmRJbnRlcnNlY3Rpb24ob3V0
ZXJSZWN0Lm1pblhNaW5ZQ29ybmVyKCksIGlubmVyUmVjdC5taW5YTWluWUNvcm5lcigpLCBpbm5l
clJlY3QubWluWE1heFlDb3JuZXIoKSwgaW5uZXJSZWN0Lm1heFhNaW5ZQ29ybmVyKCksIHF1YWRb
MV0pOwpAQCAtNTAzLDEwICs0OTksNyBAQCB2b2lkIEJvcmRlclBhaW50ZXI6OmNsaXBCb3JkZXJT
aWRlUG9seWdvbihQYWludGluZ0NvbnRleHQmIHBhaW50aW5nQ29udGV4dCwgY29ucwogICAgICAg
ICBicmVhazsKIAogICAgIGNhc2UgQm94U2lkZTo6TGVmdDoKLSAgICAgICAgcXVhZC51bmNoZWNr
ZWRBcHBlbmQob3V0ZXJSZWN0Lm1pblhNaW5ZQ29ybmVyKCkpOwotICAgICAgICBxdWFkLnVuY2hl
Y2tlZEFwcGVuZChpbm5lclJlY3QubWluWE1pbllDb3JuZXIoKSk7Ci0gICAgICAgIHF1YWQudW5j
aGVja2VkQXBwZW5kKGlubmVyUmVjdC5taW5YTWF4WUNvcm5lcigpKTsKLSAgICAgICAgcXVhZC51
bmNoZWNrZWRBcHBlbmQob3V0ZXJSZWN0Lm1pblhNYXhZQ29ybmVyKCkpOworICAgICAgICBxdWFk
ID0geyBvdXRlclJlY3QubWluWE1pbllDb3JuZXIoKSwgaW5uZXJSZWN0Lm1pblhNaW5ZQ29ybmVy
KCksIGlubmVyUmVjdC5taW5YTWF4WUNvcm5lcigpLCBvdXRlclJlY3QubWluWE1heFlDb3JuZXIo
KSB9OwogCiAgICAgICAgIGlmICghaW5uZXJCb3JkZXIucmFkaWkoKS50b3BMZWZ0KCkuaXNaZXJv
KCkpCiAgICAgICAgICAgICBmaW5kSW50ZXJzZWN0aW9uKG91dGVyUmVjdC5taW5YTWluWUNvcm5l
cigpLCBpbm5lclJlY3QubWluWE1pbllDb3JuZXIoKSwgaW5uZXJSZWN0Lm1pblhNYXhZQ29ybmVy
KCksIGlubmVyUmVjdC5tYXhYTWluWUNvcm5lcigpLCBxdWFkWzFdKTsKQEAgLTUxNiwxMCArNTA5
LDcgQEAgdm9pZCBCb3JkZXJQYWludGVyOjpjbGlwQm9yZGVyU2lkZVBvbHlnb24oUGFpbnRpbmdD
b250ZXh0JiBwYWludGluZ0NvbnRleHQsIGNvbnMKICAgICAgICAgYnJlYWs7CiAKICAgICBjYXNl
IEJveFNpZGU6OkJvdHRvbToKLSAgICAgICAgcXVhZC51bmNoZWNrZWRBcHBlbmQob3V0ZXJSZWN0
Lm1pblhNYXhZQ29ybmVyKCkpOwotICAgICAgICBxdWFkLnVuY2hlY2tlZEFwcGVuZChpbm5lclJl
Y3QubWluWE1heFlDb3JuZXIoKSk7Ci0gICAgICAgIHF1YWQudW5jaGVja2VkQXBwZW5kKGlubmVy
UmVjdC5tYXhYTWF4WUNvcm5lcigpKTsKLSAgICAgICAgcXVhZC51bmNoZWNrZWRBcHBlbmQob3V0
ZXJSZWN0Lm1heFhNYXhZQ29ybmVyKCkpOworICAgICAgICBxdWFkID0geyBvdXRlclJlY3QubWlu
WE1heFlDb3JuZXIoKSwgaW5uZXJSZWN0Lm1pblhNYXhZQ29ybmVyKCksIGlubmVyUmVjdC5tYXhY
TWF4WUNvcm5lcigpLCBvdXRlclJlY3QubWF4WE1heFlDb3JuZXIoKSB9OwogCiAgICAgICAgIGlm
ICghaW5uZXJCb3JkZXIucmFkaWkoKS5ib3R0b21MZWZ0KCkuaXNaZXJvKCkpCiAgICAgICAgICAg
ICBmaW5kSW50ZXJzZWN0aW9uKG91dGVyUmVjdC5taW5YTWF4WUNvcm5lcigpLCBpbm5lclJlY3Qu
bWluWE1heFlDb3JuZXIoKSwgaW5uZXJSZWN0Lm1pblhNaW5ZQ29ybmVyKCksIGlubmVyUmVjdC5t
YXhYTWF4WUNvcm5lcigpLCBxdWFkWzFdKTsKQEAgLTUyOSwxMCArNTE5LDcgQEAgdm9pZCBCb3Jk
ZXJQYWludGVyOjpjbGlwQm9yZGVyU2lkZVBvbHlnb24oUGFpbnRpbmdDb250ZXh0JiBwYWludGlu
Z0NvbnRleHQsIGNvbnMKICAgICAgICAgYnJlYWs7CiAKICAgICBjYXNlIEJveFNpZGU6OlJpZ2h0
OgotICAgICAgICBxdWFkLnVuY2hlY2tlZEFwcGVuZChvdXRlclJlY3QubWF4WE1pbllDb3JuZXIo
KSk7Ci0gICAgICAgIHF1YWQudW5jaGVja2VkQXBwZW5kKGlubmVyUmVjdC5tYXhYTWluWUNvcm5l
cigpKTsKLSAgICAgICAgcXVhZC51bmNoZWNrZWRBcHBlbmQoaW5uZXJSZWN0Lm1heFhNYXhZQ29y
bmVyKCkpOwotICAgICAgICBxdWFkLnVuY2hlY2tlZEFwcGVuZChvdXRlclJlY3QubWF4WE1heFlD
b3JuZXIoKSk7CisgICAgICAgIHF1YWQgPSB7IG91dGVyUmVjdC5tYXhYTWluWUNvcm5lcigpLCBp
bm5lclJlY3QubWF4WE1pbllDb3JuZXIoKSwgaW5uZXJSZWN0Lm1heFhNYXhZQ29ybmVyKCksIG91
dGVyUmVjdC5tYXhYTWF4WUNvcm5lcigpIH07CiAKICAgICAgICAgaWYgKCFpbm5lckJvcmRlci5y
YWRpaSgpLnRvcFJpZ2h0KCkuaXNaZXJvKCkpCiAgICAgICAgICAgICBmaW5kSW50ZXJzZWN0aW9u
KG91dGVyUmVjdC5tYXhYTWluWUNvcm5lcigpLCBpbm5lclJlY3QubWF4WE1pbllDb3JuZXIoKSwg
aW5uZXJSZWN0Lm1pblhNaW5ZQ29ybmVyKCksIGlubmVyUmVjdC5tYXhYTWF4WUNvcm5lcigpLCBx
dWFkWzFdKTsKQEAgLTc5NiwzMSArNzgzLDM4IEBAIHZvaWQgQm9yZGVyUGFpbnRlcjo6ZHJhd0xp
bmVGb3JCb3hTaWRlKFBhaW50aW5nQ29udGV4dCYgcGFpbnRpbmdDb250ZXh0LCBjb25zdCBGCiAg
ICAgICAgIHkyID0gcm91bmRUb0RldmljZVBpeGVsKHkyLCBkZXZpY2VTY2FsZUZhY3Rvcik7CiAK
ICAgICAgICAgVmVjdG9yPEZsb2F0UG9pbnQ+IHF1YWQ7Ci0gICAgICAgIHF1YWQucmVzZXJ2ZUlu
aXRpYWxDYXBhY2l0eSg0KTsKICAgICAgICAgc3dpdGNoIChzaWRlKSB7CiAgICAgICAgIGNhc2Ug
Qm94U2lkZTo6VG9wOgotICAgICAgICAgICAgcXVhZC51bmNoZWNrZWRBcHBlbmQoeyB4MSArIHN0
ZDo6bWF4PGZsb2F0PigtYWRqYWNlbnRXaWR0aDEsIDApLCB5MSB9KTsKLSAgICAgICAgICAgIHF1
YWQudW5jaGVja2VkQXBwZW5kKHsgeDEgKyBzdGQ6Om1heDxmbG9hdD4oIGFkamFjZW50V2lkdGgx
LCAwKSwgeTIgfSk7Ci0gICAgICAgICAgICBxdWFkLnVuY2hlY2tlZEFwcGVuZCh7IHgyIC0gc3Rk
OjptYXg8ZmxvYXQ+KCBhZGphY2VudFdpZHRoMiwgMCksIHkyIH0pOwotICAgICAgICAgICAgcXVh
ZC51bmNoZWNrZWRBcHBlbmQoeyB4MiAtIHN0ZDo6bWF4PGZsb2F0PigtYWRqYWNlbnRXaWR0aDIs
IDApLCB5MSB9KTsKKyAgICAgICAgICAgIHF1YWQgPSB7CisgICAgICAgICAgICAgICAgeyB4MSAr
IHN0ZDo6bWF4PGZsb2F0PigtYWRqYWNlbnRXaWR0aDEsIDApLCB5MSB9LAorICAgICAgICAgICAg
ICAgIHsgeDEgKyBzdGQ6Om1heDxmbG9hdD4oYWRqYWNlbnRXaWR0aDEsIDApLCB5MiB9LAorICAg
ICAgICAgICAgICAgIHsgeDIgLSBzdGQ6Om1heDxmbG9hdD4oYWRqYWNlbnRXaWR0aDIsIDApLCB5
MiB9LAorICAgICAgICAgICAgICAgIHsgeDIgLSBzdGQ6Om1heDxmbG9hdD4oLWFkamFjZW50V2lk
dGgyLCAwKSwgeTEgfQorICAgICAgICAgICAgfTsKICAgICAgICAgICAgIGJyZWFrOwogICAgICAg
ICBjYXNlIEJveFNpZGU6OkJvdHRvbToKLSAgICAgICAgICAgIHF1YWQudW5jaGVja2VkQXBwZW5k
KHsgeDEgKyBzdGQ6Om1heDxmbG9hdD4oIGFkamFjZW50V2lkdGgxLCAwKSwgeTEgfSk7Ci0gICAg
ICAgICAgICBxdWFkLnVuY2hlY2tlZEFwcGVuZCh7IHgxICsgc3RkOjptYXg8ZmxvYXQ+KC1hZGph
Y2VudFdpZHRoMSwgMCksIHkyIH0pOwotICAgICAgICAgICAgcXVhZC51bmNoZWNrZWRBcHBlbmQo
eyB4MiAtIHN0ZDo6bWF4PGZsb2F0PigtYWRqYWNlbnRXaWR0aDIsIDApLCB5MiB9KTsKLSAgICAg
ICAgICAgIHF1YWQudW5jaGVja2VkQXBwZW5kKHsgeDIgLSBzdGQ6Om1heDxmbG9hdD4oIGFkamFj
ZW50V2lkdGgyLCAwKSwgeTEgfSk7CisgICAgICAgICAgICBxdWFkID0geworICAgICAgICAgICAg
ICAgIHsgeDEgKyBzdGQ6Om1heDxmbG9hdD4oYWRqYWNlbnRXaWR0aDEsIDApLCB5MSB9LAorICAg
ICAgICAgICAgICAgIHsgeDEgKyBzdGQ6Om1heDxmbG9hdD4oLWFkamFjZW50V2lkdGgxLCAwKSwg
eTIgfSwKKyAgICAgICAgICAgICAgICB7IHgyIC0gc3RkOjptYXg8ZmxvYXQ+KC1hZGphY2VudFdp
ZHRoMiwgMCksIHkyIH0sCisgICAgICAgICAgICAgICAgeyB4MiAtIHN0ZDo6bWF4PGZsb2F0Pihh
ZGphY2VudFdpZHRoMiwgMCksIHkxIH0KKyAgICAgICAgICAgIH07CiAgICAgICAgICAgICBicmVh
azsKICAgICAgICAgY2FzZSBCb3hTaWRlOjpMZWZ0OgotICAgICAgICAgICAgcXVhZC51bmNoZWNr
ZWRBcHBlbmQoeyB4MSwgeTEgKyBzdGQ6Om1heDxmbG9hdD4oLWFkamFjZW50V2lkdGgxLCAwKSB9
KTsKLSAgICAgICAgICAgIHF1YWQudW5jaGVja2VkQXBwZW5kKHsgeDEsIHkyIC0gc3RkOjptYXg8
ZmxvYXQ+KC1hZGphY2VudFdpZHRoMiwgMCkgfSk7Ci0gICAgICAgICAgICBxdWFkLnVuY2hlY2tl
ZEFwcGVuZCh7IHgyLCB5MiAtIHN0ZDo6bWF4PGZsb2F0PiggYWRqYWNlbnRXaWR0aDIsIDApIH0p
OwotICAgICAgICAgICAgcXVhZC51bmNoZWNrZWRBcHBlbmQoeyB4MiwgeTEgKyBzdGQ6Om1heDxm
bG9hdD4oIGFkamFjZW50V2lkdGgxLCAwKSB9KTsKKyAgICAgICAgICAgIHF1YWQgPSB7CisgICAg
ICAgICAgICAgICAgeyB4MSwgeTEgKyBzdGQ6Om1heDxmbG9hdD4oLWFkamFjZW50V2lkdGgxLCAw
KSB9LAorICAgICAgICAgICAgICAgIHsgeDEsIHkyIC0gc3RkOjptYXg8ZmxvYXQ+KC1hZGphY2Vu
dFdpZHRoMiwgMCkgfSwKKyAgICAgICAgICAgICAgICB7IHgyLCB5MiAtIHN0ZDo6bWF4PGZsb2F0
PihhZGphY2VudFdpZHRoMiwgMCkgfSwKKyAgICAgICAgICAgICAgICB7IHgyLCB5MSArIHN0ZDo6
bWF4PGZsb2F0PihhZGphY2VudFdpZHRoMSwgMCkgfQorICAgICAgICAgICAgfTsKICAgICAgICAg
ICAgIGJyZWFrOwogICAgICAgICBjYXNlIEJveFNpZGU6OlJpZ2h0OgotICAgICAgICAgICAgcXVh
ZC51bmNoZWNrZWRBcHBlbmQoeyB4MSwgeTEgKyBzdGQ6Om1heDxmbG9hdD4oIGFkamFjZW50V2lk
dGgxLCAwKSB9KTsKLSAgICAgICAgICAgIHF1YWQudW5jaGVja2VkQXBwZW5kKHsgeDEsIHkyIC0g
c3RkOjptYXg8ZmxvYXQ+KCBhZGphY2VudFdpZHRoMiwgMCkgfSk7Ci0gICAgICAgICAgICBxdWFk
LnVuY2hlY2tlZEFwcGVuZCh7IHgyLCB5MiAtIHN0ZDo6bWF4PGZsb2F0PigtYWRqYWNlbnRXaWR0
aDIsIDApIH0pOwotICAgICAgICAgICAgcXVhZC51bmNoZWNrZWRBcHBlbmQoeyB4MiwgeTEgKyBz
dGQ6Om1heDxmbG9hdD4oLWFkamFjZW50V2lkdGgxLCAwKSB9KTsKKyAgICAgICAgICAgIHF1YWQg
PSB7CisgICAgICAgICAgICAgICAgeyB4MSwgeTEgKyBzdGQ6Om1heDxmbG9hdD4oYWRqYWNlbnRX
aWR0aDEsIDApIH0sCisgICAgICAgICAgICAgICAgeyB4MSwgeTIgLSBzdGQ6Om1heDxmbG9hdD4o
YWRqYWNlbnRXaWR0aDIsIDApIH0sCisgICAgICAgICAgICAgICAgeyB4MiwgeTIgLSBzdGQ6Om1h
eDxmbG9hdD4oLWFkamFjZW50V2lkdGgyLCAwKSB9LAorICAgICAgICAgICAgICAgIHsgeDIsIHkx
ICsgc3RkOjptYXg8ZmxvYXQ+KC1hZGphY2VudFdpZHRoMSwgMCkgfQorICAgICAgICAgICAgfTsK
ICAgICAgICAgICAgIGJyZWFrOwogICAgICAgICB9CiAKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJD
b3JlL2RvbS9ET01SZWN0TGlzdC5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9kb20vRE9NUmVjdExpc3Qu
Y3BwCmluZGV4IDdjMGE2MmM5NmFiMDg5ZjJkYTY0NzUwZGU4ZTVjYmIzMGMxOTRmODUuLjcxNWUx
NjM1NWM4MDllMDIwYTM2ODk5NDc3MWVhMzdlNDhlMjk3Y2UgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9X
ZWJDb3JlL2RvbS9ET01SZWN0TGlzdC5jcHAKKysrIGIvU291cmNlL1dlYkNvcmUvZG9tL0RPTVJl
Y3RMaXN0LmNwcApAQCAtMzEsMTcgKzMxLDEzIEBACiBuYW1lc3BhY2UgV2ViQ29yZSB7CiAKIERP
TVJlY3RMaXN0OjpET01SZWN0TGlzdChjb25zdCBWZWN0b3I8RmxvYXRRdWFkPiYgcXVhZHMpCisg
ICAgOiBtX2l0ZW1zKHF1YWRzLm1hcChbXShhdXRvJiBxdWFkKSB7IHJldHVybiBET01SZWN0Ojpj
cmVhdGUocXVhZC5ib3VuZGluZ0JveCgpKTsgfSkpCiB7Ci0gICAgbV9pdGVtcy5yZXNlcnZlSW5p
dGlhbENhcGFjaXR5KHF1YWRzLnNpemUoKSk7Ci0gICAgZm9yIChhdXRvJiBxdWFkIDogcXVhZHMp
Ci0gICAgICAgIG1faXRlbXMudW5jaGVja2VkQXBwZW5kKERPTVJlY3Q6OmNyZWF0ZShxdWFkLmJv
dW5kaW5nQm94KCkpKTsKIH0KIAogRE9NUmVjdExpc3Q6OkRPTVJlY3RMaXN0KGNvbnN0IFZlY3Rv
cjxGbG9hdFJlY3Q+JiByZWN0cykKKyAgICA6IG1faXRlbXMocmVjdHMubWFwKFtdKGF1dG8mIHJl
Y3QpIHsgcmV0dXJuIERPTVJlY3Q6OmNyZWF0ZShyZWN0KTsgfSkpCiB7Ci0gICAgbV9pdGVtcy5y
ZXNlcnZlSW5pdGlhbENhcGFjaXR5KHJlY3RzLnNpemUoKSk7Ci0gICAgZm9yIChhdXRvJiByZWN0
IDogcmVjdHMpCi0gICAgICAgIG1faXRlbXMudW5jaGVja2VkQXBwZW5kKERPTVJlY3Q6OmNyZWF0
ZShyZWN0KSk7CiB9CiAKIERPTVJlY3RMaXN0Ojp+RE9NUmVjdExpc3QoKSA9IGRlZmF1bHQ7CmRp
ZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9kb20vRG9jdW1lbnQuY3BwIGIvU291cmNlL1dlYkNv
cmUvZG9tL0RvY3VtZW50LmNwcAppbmRleCBhNmE2YWRjNmQ4ZDdmMThjMmY0YTlmY2I1MjkwOTRm
MTVmMmNiMDJjLi5mMzlmYjgxNGE1N2UyZTFmMzBkYzZkYTdiYTk4NjY0NjFkOWY4OGNlIDEwMDY0
NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9kb20vRG9jdW1lbnQuY3BwCisrKyBiL1NvdXJjZS9XZWJD
b3JlL2RvbS9Eb2N1bWVudC5jcHAKQEAgLTQyNDAsMTMgKzQyNDAsNyBAQCB2b2lkIERvY3VtZW50
Ojp1cGRhdGVFbGVtZW50c0FmZmVjdGVkQnlNZWRpYVF1ZXJpZXMoKQogICAgICAgICAgICAgdGhl
bWVDb2xvckNoYW5nZWQoKTsKICAgICB9CiAKLSAgICAvLyBGSVhNRTogY29weVRvVmVjdG9yIGRv
ZXNuJ3Qgd29yayB3aXRoIFdlYWtIYXNoU2V0Ci0gICAgVmVjdG9yPFJlZjxIVE1MSW1hZ2VFbGVt
ZW50Pj4gaW1hZ2VzOwotICAgIGltYWdlcy5yZXNlcnZlSW5pdGlhbENhcGFjaXR5KG1fZHluYW1p
Y01lZGlhUXVlcnlEZXBlbmRlbnRJbWFnZXMuY29tcHV0ZVNpemUoKSk7Ci0gICAgZm9yIChhdXRv
JiBpbWFnZSA6IG1fZHluYW1pY01lZGlhUXVlcnlEZXBlbmRlbnRJbWFnZXMpCi0gICAgICAgIGlt
YWdlcy5hcHBlbmQoaW1hZ2UpOwotCi0gICAgZm9yIChhdXRvJiBpbWFnZSA6IGltYWdlcykKKyAg
ICBmb3IgKGF1dG8mIGltYWdlIDogY29weVRvVmVjdG9yT2Y8UmVmPEhUTUxJbWFnZUVsZW1lbnQ+
PihtX2R5bmFtaWNNZWRpYVF1ZXJ5RGVwZW5kZW50SW1hZ2VzKSkKICAgICAgICAgaW1hZ2UtPmV2
YWx1YXRlRHluYW1pY01lZGlhUXVlcnlEZXBlbmRlbmNpZXMoKTsKIH0KIApAQCAtNzYxMCw2ICs3
NjA0LDcgQEAgdm9pZCBEb2N1bWVudDo6ZGlkQXNzb2NpYXRlRm9ybUNvbnRyb2xzVGltZXJGaXJl
ZCgpCiAgICAgICAgIGlmIChlbGVtZW50LmlzQ29ubmVjdGVkKCkpCiAgICAgICAgICAgICBjb250
cm9scy51bmNoZWNrZWRBcHBlbmQoJmVsZW1lbnQpOwogICAgIH0KKyAgICBjb250cm9scy5zaHJp
bmtUb0ZpdCgpOwogCiAgICAgaWYgKGF1dG8gcGFnZSA9IHRoaXMtPnBhZ2UoKTsgcGFnZSAmJiAh
Y29udHJvbHMuaXNFbXB0eSgpKSB7CiAgICAgICAgIEFTU0VSVChtX2ZyYW1lKTsKZGlmZiAtLWdp
dCBhL1NvdXJjZS9XZWJDb3JlL2RvbS9FbGVtZW50RGF0YS5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9k
b20vRWxlbWVudERhdGEuY3BwCmluZGV4IGI3MDNhZWZhZWE2OTIxOWIwODViYWQ5ZDA1MDMwNjhj
ZjAzZjFiNzAuLjA3MWRiMGIzNGNhNmU1NmVmMTI2ZWJlZWQ1MThmNjBkNzQwYjRiOTkgMTAwNjQ0
Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL2RvbS9FbGVtZW50RGF0YS5jcHAKKysrIGIvU291cmNlL1dl
YkNvcmUvZG9tL0VsZW1lbnREYXRhLmNwcApAQCAtMTQ1LDEwICsxNDUsNyBAQCBVbmlxdWVFbGVt
ZW50RGF0YTo6VW5pcXVlRWxlbWVudERhdGEoY29uc3QgU2hhcmVhYmxlRWxlbWVudERhdGEmIG90
aGVyKQogICAgIEFTU0VSVCghb3RoZXIubV9pbmxpbmVTdHlsZSB8fCAhb3RoZXIubV9pbmxpbmVT
dHlsZS0+aXNNdXRhYmxlKCkpOwogICAgIG1faW5saW5lU3R5bGUgPSBvdGhlci5tX2lubGluZVN0
eWxlOwogCi0gICAgdW5zaWduZWQgb3RoZXJMZW5ndGggPSBvdGhlci5sZW5ndGgoKTsKLSAgICBt
X2F0dHJpYnV0ZVZlY3Rvci5yZXNlcnZlQ2FwYWNpdHkob3RoZXJMZW5ndGgpOwotICAgIGZvciAo
dW5zaWduZWQgaSA9IDA7IGkgPCBvdGhlckxlbmd0aDsgKytpKQotICAgICAgICBtX2F0dHJpYnV0
ZVZlY3Rvci51bmNoZWNrZWRBcHBlbmQob3RoZXIubV9hdHRyaWJ1dGVBcnJheVtpXSk7CisgICAg
bV9hdHRyaWJ1dGVWZWN0b3IuYXBwZW5kKG90aGVyLm1fYXR0cmlidXRlQXJyYXksIG90aGVyLmxl
bmd0aCgpKTsKIH0KIAogUmVmPFVuaXF1ZUVsZW1lbnREYXRhPiBFbGVtZW50RGF0YTo6bWFrZVVu
aXF1ZUNvcHkoKSBjb25zdApkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvZG9tL0V2ZW50TGlz
dGVuZXJNYXAuY3BwIGIvU291cmNlL1dlYkNvcmUvZG9tL0V2ZW50TGlzdGVuZXJNYXAuY3BwCmlu
ZGV4IGM0ZTgxNmRlYWY0MjVjYTkxMTVlNzg2ZjZhMGFlMGJiNjg0MTY5MzkuLjYwYjFkYTc2M2Yz
YjBhNzBjZjFlYWRlNDMzNGQ4Zjk1MzM2YTRlZjMgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3Jl
L2RvbS9FdmVudExpc3RlbmVyTWFwLmNwcAorKysgYi9Tb3VyY2UvV2ViQ29yZS9kb20vRXZlbnRM
aXN0ZW5lck1hcC5jcHAKQEAgLTk3LDEzICs5Nyw5IEBAIHZvaWQgRXZlbnRMaXN0ZW5lck1hcDo6
Y2xlYXIoKQogCiBWZWN0b3I8QXRvbVN0cmluZz4gRXZlbnRMaXN0ZW5lck1hcDo6ZXZlbnRUeXBl
cygpIGNvbnN0CiB7Ci0gICAgVmVjdG9yPEF0b21TdHJpbmc+IHR5cGVzOwotICAgIHR5cGVzLnJl
c2VydmVJbml0aWFsQ2FwYWNpdHkobV9lbnRyaWVzLnNpemUoKSk7Ci0KLSAgICBmb3IgKGF1dG8m
IGVudHJ5IDogbV9lbnRyaWVzKQotICAgICAgICB0eXBlcy51bmNoZWNrZWRBcHBlbmQoZW50cnku
Zmlyc3QpOwotCi0gICAgcmV0dXJuIHR5cGVzOworICAgIHJldHVybiBtX2VudHJpZXMubWFwKFtd
KGF1dG8mIGVudHJ5KSB7CisgICAgICAgIHJldHVybiBlbnRyeS5maXJzdDsKKyAgICB9KTsKIH0K
IAogc3RhdGljIGlubGluZSBzaXplX3QgZmluZExpc3RlbmVyKGNvbnN0IEV2ZW50TGlzdGVuZXJW
ZWN0b3ImIGxpc3RlbmVycywgRXZlbnRMaXN0ZW5lciYgbGlzdGVuZXIsIGJvb2wgdXNlQ2FwdHVy
ZSkKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL2RvbS9UcmVlU2NvcGVPcmRlcmVkTWFwLmNw
cCBiL1NvdXJjZS9XZWJDb3JlL2RvbS9UcmVlU2NvcGVPcmRlcmVkTWFwLmNwcAppbmRleCAzOTA5
YzUzODA4Y2JkNjhjYTlkMzgwOGE1ZDhhMGZkMDM4ZWE0ZjAzLi43YzdmYmI1NmYzMzgyZmUwOGZi
ZDgwNGZhYjM3M2IwMDUwYjM1MGZmIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9kb20vVHJl
ZVNjb3BlT3JkZXJlZE1hcC5jcHAKKysrIGIvU291cmNlL1dlYkNvcmUvZG9tL1RyZWVTY29wZU9y
ZGVyZWRNYXAuY3BwCkBAIC0yMTgsMTEgKzIxOCw5IEBAIGNvbnN0IFZlY3RvcjxFbGVtZW50Kj4q
IFRyZWVTY29wZU9yZGVyZWRNYXA6OmdldEFsbEVsZW1lbnRzQnlJZChjb25zdCBBdG9tU3RyaW5n
CiAKIGNvbnN0IFZlY3RvcjxBdG9tU3RyaW5nPiBUcmVlU2NvcGVPcmRlcmVkTWFwOjprZXlzKCkg
Y29uc3QKIHsKLSAgICBWZWN0b3I8QXRvbVN0cmluZz4gcmVzdWx0OwotICAgIHJlc3VsdC5yZXNl
cnZlSW5pdGlhbENhcGFjaXR5KG1fbWFwLnNpemUoKSk7Ci0gICAgZm9yIChhdXRvKiBrZXkgOiBt
X21hcC5rZXlzKCkpCi0gICAgICAgIHJlc3VsdC51bmNoZWNrZWRBcHBlbmQoY29uc3RfY2FzdDxB
dG9tU3RyaW5nSW1wbCo+KGtleSkpOwotICAgIHJldHVybiByZXN1bHQ7CisgICAgcmV0dXJuIFdU
Rjo6bWFwKG1fbWFwLCBbXShhdXRvJiBlbnRyeSkgLT4gQXRvbVN0cmluZyB7CisgICAgICAgIHJl
dHVybiBjb25zdF9jYXN0PEF0b21TdHJpbmdJbXBsKj4oZW50cnkua2V5KTsKKyAgICB9KTsKIH0K
IAogfSAvLyBuYW1lc3BhY2UgV2ViQ29yZQpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvZWRp
dGluZy9Db21wb3NpdGVFZGl0Q29tbWFuZC5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9lZGl0aW5nL0Nv
bXBvc2l0ZUVkaXRDb21tYW5kLmNwcAppbmRleCAxZjM3NDUxZDlhY2EyNmNkNGM1OGQzYTI2MWE3
NmVmNDNmOGZmYWU1Li40MDE2ZWMxMDI2NWQ2NmY5ZWRlYTgzODc1ZjU4NDFlMWZmZWFiNzhlIDEw
MDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9lZGl0aW5nL0NvbXBvc2l0ZUVkaXRDb21tYW5kLmNw
cAorKysgYi9Tb3VyY2UvV2ViQ29yZS9lZGl0aW5nL0NvbXBvc2l0ZUVkaXRDb21tYW5kLmNwcApA
QCAtNzg5LDEyICs3ODksOSBAQCBQb3NpdGlvbiBDb21wb3NpdGVFZGl0Q29tbWFuZDo6cmVwbGFj
ZVNlbGVjdGVkVGV4dEluTm9kZShjb25zdCBTdHJpbmcmIHRleHQpCiAKIHN0YXRpYyBWZWN0b3I8
UmVuZGVyZWREb2N1bWVudE1hcmtlcj4gY29weU1hcmtlcnMoY29uc3QgVmVjdG9yPFJlbmRlcmVk
RG9jdW1lbnRNYXJrZXIqPiYgbWFya2VyUG9pbnRlcnMpCiB7Ci0gICAgVmVjdG9yPFJlbmRlcmVk
RG9jdW1lbnRNYXJrZXI+IG1hcmtlcnM7Ci0gICAgbWFya2Vycy5yZXNlcnZlSW5pdGlhbENhcGFj
aXR5KG1hcmtlclBvaW50ZXJzLnNpemUoKSk7Ci0gICAgZm9yIChhdXRvJiBtYXJrZXJQb2ludGVy
IDogbWFya2VyUG9pbnRlcnMpCi0gICAgICAgIG1hcmtlcnMudW5jaGVja2VkQXBwZW5kKCptYXJr
ZXJQb2ludGVyKTsKLQotICAgIHJldHVybiBtYXJrZXJzOworICAgIHJldHVybiBtYXJrZXJQb2lu
dGVycy5tYXAoW10oYXV0byYgbWFya2VyUG9pbnRlcikgeworICAgICAgICByZXR1cm4gKm1hcmtl
clBvaW50ZXI7CisgICAgfSk7CiB9CiAKIHZvaWQgQ29tcG9zaXRlRWRpdENvbW1hbmQ6OnJlcGxh
Y2VUZXh0SW5Ob2RlUHJlc2VydmluZ01hcmtlcnMoVGV4dCYgbm9kZSwgdW5zaWduZWQgb2Zmc2V0
LCB1bnNpZ25lZCBjb3VudCwgY29uc3QgU3RyaW5nJiByZXBsYWNlbWVudFRleHQpCmRpZmYgLS1n
aXQgYS9Tb3VyY2UvV2ViQ29yZS9lZGl0aW5nL0VkaXRvci5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9l
ZGl0aW5nL0VkaXRvci5jcHAKaW5kZXggNzI0NWYxODA4NmJmNTM2OTQyNTc3ODU5ZGIxNmQ4OWMy
YjI0OGQ1NS4uMTVjNWMzOTBjMWI1NGYwZTMzYjVlOTI0NjRjNTNkNTJjOTIxZTI2YiAxMDA2NDQK
LS0tIGEvU291cmNlL1dlYkNvcmUvZWRpdGluZy9FZGl0b3IuY3BwCisrKyBiL1NvdXJjZS9XZWJD
b3JlL2VkaXRpbmcvRWRpdG9yLmNwcApAQCAtNDAzMyw3ICs0MDMzLDcgQEAgc3RhdGljIFZlY3Rv
cjxUZXh0TGlzdD4gZWRpdGFibGVUZXh0TGlzdHNBdFBvc2l0aW9uSW5EZXNjZW5kaW5nT3JkZXIo
Y29uc3QgUG9zaXQKICAgICB9CiAKICAgICBWZWN0b3I8VGV4dExpc3Q+IHRleHRMaXN0czsKLSAg
ICB0ZXh0TGlzdHMucmVzZXJ2ZUNhcGFjaXR5KGVuY2xvc2luZ0xpc3RzLnNpemUoKSk7CisgICAg
dGV4dExpc3RzLnJlc2VydmVJbml0aWFsQ2FwYWNpdHkoZW5jbG9zaW5nTGlzdHMuc2l6ZSgpKTsK
ICAgICBmb3IgKGF1dG8gaXRlcmF0b3IgPSBlbmNsb3NpbmdMaXN0cy5yYmVnaW4oKTsgaXRlcmF0
b3IgIT0gZW5jbG9zaW5nTGlzdHMucmVuZCgpOyArK2l0ZXJhdG9yKSB7CiAgICAgICAgIGF1dG8m
IGxpc3QgPSBpdGVyYXRvci0+Z2V0KCk7CiAgICAgICAgIGJvb2wgb3JkZXJlZCA9IGlzPEhUTUxP
TGlzdEVsZW1lbnQ+KGxpc3QpOwpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvZmlsZWFwaS9G
aWxlTGlzdC5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9maWxlYXBpL0ZpbGVMaXN0LmNwcAppbmRleCBj
MTlmODAyZGQ4OWQyNzEzMGEyMjFjNWJjYjJkOTczYzZkYTU1MWY1Li43YTA5ODE1YjYyZDhkYThi
NmFiN2YxNTVhZmM0Y2U1MTRlNGMwZTc1IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9maWxl
YXBpL0ZpbGVMaXN0LmNwcAorKysgYi9Tb3VyY2UvV2ViQ29yZS9maWxlYXBpL0ZpbGVMaXN0LmNw
cApAQCAtNDEsMTEgKzQxLDkgQEAgRmlsZSogRmlsZUxpc3Q6Oml0ZW0odW5zaWduZWQgaW5kZXgp
IGNvbnN0CiAKIFZlY3RvcjxTdHJpbmc+IEZpbGVMaXN0OjpwYXRocygpIGNvbnN0CiB7Ci0gICAg
VmVjdG9yPFN0cmluZz4gcGF0aHM7Ci0gICAgcGF0aHMucmVzZXJ2ZUluaXRpYWxDYXBhY2l0eSht
X2ZpbGVzLnNpemUoKSk7Ci0gICAgZm9yIChhdXRvJiBmaWxlIDogbV9maWxlcykKLSAgICAgICAg
cGF0aHMudW5jaGVja2VkQXBwZW5kKGZpbGUtPnBhdGgoKSk7Ci0gICAgcmV0dXJuIHBhdGhzOwor
ICAgIHJldHVybiBtX2ZpbGVzLm1hcChbXShhdXRvJiBmaWxlKSB7CisgICAgICAgIHJldHVybiBm
aWxlLT5wYXRoKCk7CisgICAgfSk7CiB9CiAKIH0gLy8gbmFtZXNwYWNlIFdlYkNvcmUKZGlmZiAt
LWdpdCBhL1NvdXJjZS9XZWJDb3JlL2hpc3RvcnkvSGlzdG9yeUl0ZW0uY3BwIGIvU291cmNlL1dl
YkNvcmUvaGlzdG9yeS9IaXN0b3J5SXRlbS5jcHAKaW5kZXggZDUzNzdhYjBmN2NjMWYzZTQ3MTk3
NWMyMDgwMGJlZTExODUyMTJlNC4uMGQ1ZTBkNzYxYmIwNWQwZDdkOGM3M2E3NWUyYTAxY2JiZjhj
YTY1YyAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvaGlzdG9yeS9IaXN0b3J5SXRlbS5jcHAK
KysrIGIvU291cmNlL1dlYkNvcmUvaGlzdG9yeS9IaXN0b3J5SXRlbS5jcHAKQEAgLTk1LDEwICs5
NSwxMiBAQCBpbmxpbmUgSGlzdG9yeUl0ZW06Okhpc3RvcnlJdGVtKGNvbnN0IEhpc3RvcnlJdGVt
JiBpdGVtKQogICAgICwgbV9kaXNwbGF5VGl0bGUoaXRlbS5tX2Rpc3BsYXlUaXRsZSkKICAgICAs
IG1fc2Nyb2xsUG9zaXRpb24oaXRlbS5tX3Njcm9sbFBvc2l0aW9uKQogICAgICwgbV9wYWdlU2Nh
bGVGYWN0b3IoaXRlbS5tX3BhZ2VTY2FsZUZhY3RvcikKKyAgICAsIG1fY2hpbGRyZW4oaXRlbS5t
X2NoaWxkcmVuLm1hcChbXShhdXRvJiBjaGlsZCkgeyByZXR1cm4gY2hpbGQtPmNvcHkoKTsgfSkp
CiAgICAgLCBtX2xhc3RWaXNpdFdhc0ZhaWx1cmUoaXRlbS5tX2xhc3RWaXNpdFdhc0ZhaWx1cmUp
CiAgICAgLCBtX2lzVGFyZ2V0SXRlbShpdGVtLm1faXNUYXJnZXRJdGVtKQogICAgICwgbV9pdGVt
U2VxdWVuY2VOdW1iZXIoaXRlbS5tX2l0ZW1TZXF1ZW5jZU51bWJlcikKICAgICAsIG1fZG9jdW1l
bnRTZXF1ZW5jZU51bWJlcihpdGVtLm1fZG9jdW1lbnRTZXF1ZW5jZU51bWJlcikKKyAgICAsIG1f
Zm9ybURhdGEoaXRlbS5tX2Zvcm1EYXRhID8gUmVmUHRyPEZvcm1EYXRhPiB7IGl0ZW0ubV9mb3Jt
RGF0YS0+Y29weSgpIH0gOiBudWxscHRyKQogICAgICwgbV9mb3JtQ29udGVudFR5cGUoaXRlbS5t
X2Zvcm1Db250ZW50VHlwZSkKICAgICAsIG1fcHJ1bmluZ1JlYXNvbihQcnVuaW5nUmVhc29uOjpO
b25lKQogI2lmIFBMQVRGT1JNKElPU19GQU1JTFkpCkBAIC0xMDgsMTMgKzExMCw2IEBAIGlubGlu
ZSBIaXN0b3J5SXRlbTo6SGlzdG9yeUl0ZW0oY29uc3QgSGlzdG9yeUl0ZW0mIGl0ZW0pCiAjZW5k
aWYKICAgICAsIG1faWRlbnRpZmllcihpdGVtLm1faWRlbnRpZmllcikKIHsKLSAgICBpZiAoaXRl
bS5tX2Zvcm1EYXRhKQotICAgICAgICBtX2Zvcm1EYXRhID0gaXRlbS5tX2Zvcm1EYXRhLT5jb3B5
KCk7Ci0gICAgICAgIAotICAgIHVuc2lnbmVkIHNpemUgPSBpdGVtLm1fY2hpbGRyZW4uc2l6ZSgp
OwotICAgIG1fY2hpbGRyZW4ucmVzZXJ2ZUluaXRpYWxDYXBhY2l0eShzaXplKTsKLSAgICBmb3Ig
KHVuc2lnbmVkIGkgPSAwOyBpIDwgc2l6ZTsgKytpKQotICAgICAgICBtX2NoaWxkcmVuLnVuY2hl
Y2tlZEFwcGVuZChpdGVtLm1fY2hpbGRyZW5baV0tPmNvcHkoKSk7CiB9CiAKIFJlZjxIaXN0b3J5
SXRlbT4gSGlzdG9yeUl0ZW06OmNvcHkoKSBjb25zdApkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNv
cmUvaHRtbC9GaWxlSW5wdXRUeXBlLmNwcCBiL1NvdXJjZS9XZWJDb3JlL2h0bWwvRmlsZUlucHV0
VHlwZS5jcHAKaW5kZXggYTIzNzdiYzFmMmI0NmFhNGY0ODgxNmZjMzcwNjFlMDlhNDljOTc2Mi4u
MDZmMTJhYjI4OTdmMmRmZmRiMmM2YWM3ZjZlOTNjZmMxMmRhNTNkNiAxMDA2NDQKLS0tIGEvU291
cmNlL1dlYkNvcmUvaHRtbC9GaWxlSW5wdXRUeXBlLmNwcAorKysgYi9Tb3VyY2UvV2ViQ29yZS9o
dG1sL0ZpbGVJbnB1dFR5cGUuY3BwCkBAIC0zODUsMTMgKzM4NSw4IEBAIHZvaWQgRmlsZUlucHV0
VHlwZTo6c2V0RmlsZXMoUmVmUHRyPEZpbGVMaXN0PiYmIGZpbGVzLCBSZXF1ZXN0SWNvbiBzaG91
bGRSZXF1ZXN0CiAgICAgcHJvdGVjdGVkSW5wdXRFbGVtZW50LT5zZXRGb3JtQ29udHJvbFZhbHVl
TWF0Y2hlc1JlbmRlcmVyKHRydWUpOwogICAgIHByb3RlY3RlZElucHV0RWxlbWVudC0+dXBkYXRl
VmFsaWRpdHkoKTsKIAotICAgIGlmIChzaG91bGRSZXF1ZXN0SWNvbiA9PSBSZXF1ZXN0SWNvbjo6
WWVzKSB7Ci0gICAgICAgIFZlY3RvcjxTdHJpbmc+IHBhdGhzOwotICAgICAgICBwYXRocy5yZXNl
cnZlSW5pdGlhbENhcGFjaXR5KGxlbmd0aCk7Ci0gICAgICAgIGZvciAoYXV0byYgZmlsZSA6IG1f
ZmlsZUxpc3QtPmZpbGVzKCkpCi0gICAgICAgICAgICBwYXRocy51bmNoZWNrZWRBcHBlbmQoZmls
ZS0+cGF0aCgpKTsKLSAgICAgICAgcmVxdWVzdEljb24ocGF0aHMpOwotICAgIH0KKyAgICBpZiAo
c2hvdWxkUmVxdWVzdEljb24gPT0gUmVxdWVzdEljb246OlllcykKKyAgICAgICAgcmVxdWVzdElj
b24obV9maWxlTGlzdC0+cGF0aHMoKSk7CiAKICAgICBpZiAocHJvdGVjdGVkSW5wdXRFbGVtZW50
LT5yZW5kZXJlcigpKQogICAgICAgICBwcm90ZWN0ZWRJbnB1dEVsZW1lbnQtPnJlbmRlcmVyKCkt
PnJlcGFpbnQoKTsKQEAgLTQ0Nyw3ICs0NDIsNyBAQCB2b2lkIEZpbGVJbnB1dFR5cGU6OmZpbGVz
Q2hvc2VuKGNvbnN0IFZlY3RvcjxTdHJpbmc+JiBwYXRocywgY29uc3QgVmVjdG9yPFN0cmluZwog
ICAgIGZvciAoc2l6ZV90IGkgPSAwOyBpIDwgc2l6ZTsgKytpKQogICAgICAgICBmaWxlcy51bmNo
ZWNrZWRBcHBlbmQoeyBwYXRoc1tpXSwgaSA8IHJlcGxhY2VtZW50UGF0aHMuc2l6ZSgpID8gcmVw
bGFjZW1lbnRQYXRoc1tpXSA6IG51bGxTdHJpbmcoKSwgeyB9IH0pOwogCi0gICAgZmlsZXNDaG9z
ZW4oZmlsZXMpOworICAgIGZpbGVzQ2hvc2VuKFdURk1vdmUoZmlsZXMpKTsKIH0KIAogdm9pZCBG
aWxlSW5wdXRUeXBlOjpkaWRDcmVhdGVGaWxlTGlzdChSZWY8RmlsZUxpc3Q+JiYgZmlsZUxpc3Qs
IFJlZlB0cjxJY29uPiYmIGljb24pCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9odG1sL0xp
bmtJY29uQ29sbGVjdG9yLmNwcCBiL1NvdXJjZS9XZWJDb3JlL2h0bWwvTGlua0ljb25Db2xsZWN0
b3IuY3BwCmluZGV4IDhkNzBkNThiN2Y5ZDIzZjBkMzI5MjZkNDViMmRhZDBjZGEwODg5YjUuLjM5
ODM2NDk5ZjY3Y2I1ZjFlZmMwNTg4YjNkOWIwOWE0NDQ0OGEyMTUgMTAwNjQ0Ci0tLSBhL1NvdXJj
ZS9XZWJDb3JlL2h0bWwvTGlua0ljb25Db2xsZWN0b3IuY3BwCisrKyBiL1NvdXJjZS9XZWJDb3Jl
L2h0bWwvTGlua0ljb25Db2xsZWN0b3IuY3BwCkBAIC0xMDIsOCArMTAyLDggQEAgYXV0byBMaW5r
SWNvbkNvbGxlY3Rvcjo6aWNvbnNPZlR5cGVzKE9wdGlvblNldDxMaW5rSWNvblR5cGU+IGljb25U
eXBlcykgLT4gVmVjdG8KIAogICAgICAgICBWZWN0b3I8c3RkOjpwYWlyPFN0cmluZywgU3RyaW5n
Pj4gYXR0cmlidXRlczsKICAgICAgICAgaWYgKGxpbmtFbGVtZW50Lmhhc0F0dHJpYnV0ZXMoKSkg
ewotICAgICAgICAgICAgYXR0cmlidXRlcy5yZXNlcnZlQ2FwYWNpdHkobGlua0VsZW1lbnQuYXR0
cmlidXRlQ291bnQoKSk7Ci0gICAgICAgICAgICBmb3IgKGNvbnN0IEF0dHJpYnV0ZSYgYXR0cmli
dXRlIDogbGlua0VsZW1lbnQuYXR0cmlidXRlc0l0ZXJhdG9yKCkpCisgICAgICAgICAgICBhdHRy
aWJ1dGVzLnJlc2VydmVJbml0aWFsQ2FwYWNpdHkobGlua0VsZW1lbnQuYXR0cmlidXRlQ291bnQo
KSk7CisgICAgICAgICAgICBmb3IgKGF1dG8mIGF0dHJpYnV0ZSA6IGxpbmtFbGVtZW50LmF0dHJp
YnV0ZXNJdGVyYXRvcigpKQogICAgICAgICAgICAgICAgIGF0dHJpYnV0ZXMudW5jaGVja2VkQXBw
ZW5kKHsgYXR0cmlidXRlLmxvY2FsTmFtZSgpLCBhdHRyaWJ1dGUudmFsdWUoKSB9KTsKICAgICAg
ICAgfQogCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9odG1sL1VSTFNlYXJjaFBhcmFtcy5j
cHAgYi9Tb3VyY2UvV2ViQ29yZS9odG1sL1VSTFNlYXJjaFBhcmFtcy5jcHAKaW5kZXggZDRmYmMx
ZjA2YWJlYWVjMTEyZGFiZGJjMmQ4NTI5MTUyNDgxN2NkNC4uN2U1NjQyN2E4ZTAyMWI3Zjk1NTVi
YmM0MGU5ZWRjYmVmNmU3ZWI4MyAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvaHRtbC9VUkxT
ZWFyY2hQYXJhbXMuY3BwCisrKyBiL1NvdXJjZS9XZWJDb3JlL2h0bWwvVVJMU2VhcmNoUGFyYW1z
LmNwcApAQCAtMTIyLDYgKzEyMiw3IEBAIFZlY3RvcjxTdHJpbmc+IFVSTFNlYXJjaFBhcmFtczo6
Z2V0QWxsKGNvbnN0IFN0cmluZyYgbmFtZSkgY29uc3QKICAgICAgICAgaWYgKHBhaXIua2V5ID09
IG5hbWUpCiAgICAgICAgICAgICB2YWx1ZXMudW5jaGVja2VkQXBwZW5kKHBhaXIudmFsdWUpOwog
ICAgIH0KKyAgICB2YWx1ZXMuc2hyaW5rVG9GaXQoKTsKICAgICByZXR1cm4gdmFsdWVzOwogfQog
CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9sYXlvdXQvZm9ybWF0dGluZ0NvbnRleHRzL2lu
bGluZS9JbmxpbmVMaW5lQnVpbGRlci5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9sYXlvdXQvZm9ybWF0
dGluZ0NvbnRleHRzL2lubGluZS9JbmxpbmVMaW5lQnVpbGRlci5jcHAKaW5kZXggMzYzOGQ1Yzlk
NTNjNzE4OGM3YmQ2ZTdkNmYxOWQwODhhMDQ3ODU1ZS4uOGVmZmVmNDJhOTQ4MzhkMWUzMDRhYWYx
ODk1ZjhkYzVlMGIwNDFmZiAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvbGF5b3V0L2Zvcm1h
dHRpbmdDb250ZXh0cy9pbmxpbmUvSW5saW5lTGluZUJ1aWxkZXIuY3BwCisrKyBiL1NvdXJjZS9X
ZWJDb3JlL2xheW91dC9mb3JtYXR0aW5nQ29udGV4dHMvaW5saW5lL0lubGluZUxpbmVCdWlsZGVy
LmNwcApAQCAtMzUwLDggKzM1MCw4IEBAIExpbmVCdWlsZGVyOjpMaW5lQ29udGVudCBMaW5lQnVp
bGRlcjo6bGF5b3V0SW5saW5lQ29udGVudChjb25zdCBJbmxpbmVJdGVtUmFuZ2UmCiAgICAgICAg
ICAgICAgICAgY29udGludWU7CiAgICAgICAgICAgICB9CiAKLSAgICAgICAgICAgIHJ1bkxldmVs
cy5hcHBlbmQobGluZVJ1bnNbaV0uYmlkaUxldmVsKCkpOwotICAgICAgICAgICAgcnVuSW5kZXhP
ZmZzZXRNYXAuYXBwZW5kKGFjY3VtdWxhdGVkT2Zmc2V0KTsKKyAgICAgICAgICAgIHJ1bkxldmVs
cy51bmNoZWNrZWRBcHBlbmQobGluZVJ1bnNbaV0uYmlkaUxldmVsKCkpOworICAgICAgICAgICAg
cnVuSW5kZXhPZmZzZXRNYXAudW5jaGVja2VkQXBwZW5kKGFjY3VtdWxhdGVkT2Zmc2V0KTsKICAg
ICAgICAgfQogCiAgICAgICAgIFZlY3RvcjxpbnQzMl90PiB2aXN1YWxPcmRlckxpc3QocnVuTGV2
ZWxzLnNpemUoKSk7CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9sb2FkZXIvRG9jdW1lbnRM
b2FkZXIuY3BwIGIvU291cmNlL1dlYkNvcmUvbG9hZGVyL0RvY3VtZW50TG9hZGVyLmNwcAppbmRl
eCAzNTliNjM4NTE4Njg0MjNjMzdhMTAwNjM1MDFhNGRmMDZkOWFkYmFhLi5lYzUwZGU5MGRkZWQw
NzQ2MDRkZDE4N2FlOWRlNjExMjZhNmFkMTI0IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9s
b2FkZXIvRG9jdW1lbnRMb2FkZXIuY3BwCisrKyBiL1NvdXJjZS9XZWJDb3JlL2xvYWRlci9Eb2N1
bWVudExvYWRlci5jcHAKQEAgLTIyODIsMTQgKzIyODIsMTEgQEAgdm9pZCBEb2N1bWVudExvYWRl
cjo6c3RhcnRJY29uTG9hZGluZygpCiAgICAgaWYgKCFtX2xpbmtJY29ucy5zaXplKCkpCiAgICAg
ICAgIHJldHVybjsKIAotICAgIFZlY3RvcjxzdGQ6OnBhaXI8V2ViQ29yZTo6TGlua0ljb24mLCB1
aW50NjRfdD4+IGljb25EZWNpc2lvbnM7Ci0gICAgaWNvbkRlY2lzaW9ucy5yZXNlcnZlSW5pdGlh
bENhcGFjaXR5KG1fbGlua0ljb25zLnNpemUoKSk7Ci0gICAgZm9yIChhdXRvJiBpY29uIDogbV9s
aW5rSWNvbnMpIHsKKyAgICBhdXRvIGljb25EZWNpc2lvbnMgPSBXVEY6Om1hcChtX2xpbmtJY29u
cywgWyZdKGF1dG8mIGljb24pIC0+IHN0ZDo6cGFpcjxXZWJDb3JlOjpMaW5rSWNvbiYsIHVpbnQ2
NF90PiB7CiAgICAgICAgIGF1dG8gcmVzdWx0ID0gbV9pY29uc1BlbmRpbmdMb2FkRGVjaXNpb24u
YWRkKG5leHRJY29uQ2FsbGJhY2tJRCsrLCBpY29uKTsKLSAgICAgICAgaWNvbkRlY2lzaW9ucy51
bmNoZWNrZWRBcHBlbmQoeyBpY29uLCByZXN1bHQuaXRlcmF0b3ItPmtleSB9KTsKLSAgICB9Ci0K
LSAgICBtX2ZyYW1lLT5sb2FkZXIoKS5jbGllbnQoKS5nZXRMb2FkRGVjaXNpb25Gb3JJY29ucyhp
Y29uRGVjaXNpb25zKTsKKyAgICAgICAgcmV0dXJuIHsgaWNvbiwgcmVzdWx0Lml0ZXJhdG9yLT5r
ZXkgfTsKKyAgICB9KTsKKyAgICBtX2ZyYW1lLT5sb2FkZXIoKS5jbGllbnQoKS5nZXRMb2FkRGVj
aXNpb25Gb3JJY29ucyhXVEZNb3ZlKGljb25EZWNpc2lvbnMpKTsKIH0KIAogdm9pZCBEb2N1bWVu
dExvYWRlcjo6ZGlkR2V0TG9hZERlY2lzaW9uRm9ySWNvbihib29sIGRlY2lzaW9uLCB1aW50NjRf
dCBsb2FkSWRlbnRpZmllciwgQ29tcGxldGlvbkhhbmRsZXI8dm9pZChGcmFnbWVudGVkU2hhcmVk
QnVmZmVyKik+JiYgY29tcGxldGlvbkhhbmRsZXIpCkBAIC0yNDQ5LDYgKzI0NDYsNyBAQCB2b2lk
IERvY3VtZW50TG9hZGVyOjpzZXRBY3RpdmVDb250ZW50UnVsZUxpc3RBY3Rpb25QYXR0ZXJucyhj
b25zdCBIYXNoTWFwPFN0cmluZwogICAgICAgICAgICAgaWYgKHBhcnNlZFBhdHRlcm4uaXNWYWxp
ZCgpKQogICAgICAgICAgICAgICAgIHBhdHRlcm5WZWN0b3IudW5jaGVja2VkQXBwZW5kKFdURk1v
dmUocGFyc2VkUGF0dGVybikpOwogICAgICAgICB9CisgICAgICAgIHBhdHRlcm5WZWN0b3Iuc2hy
aW5rVG9GaXQoKTsKICAgICAgICAgcGFyc2VkUGF0dGVybk1hcC5zZXQocGFpci5rZXksIFdURk1v
dmUocGF0dGVyblZlY3RvcikpOwogICAgIH0KIApkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUv
bG9hZGVyL1RleHRUcmFja0xvYWRlci5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9sb2FkZXIvVGV4dFRy
YWNrTG9hZGVyLmNwcAppbmRleCA4Y2MzYzU2OGM0Mzc5NmFjNjFiMzA5NzU0N2E4OWVmODEyZDk4
ZDRkLi44Yjk4NTE5MGQ3MmMyY2FlYWZiNWQyYTI0OTJjZGQyNDgyZjRmMThkIDEwMDY0NAotLS0g
YS9Tb3VyY2UvV2ViQ29yZS9sb2FkZXIvVGV4dFRyYWNrTG9hZGVyLmNwcAorKysgYi9Tb3VyY2Uv
V2ViQ29yZS9sb2FkZXIvVGV4dFRyYWNrTG9hZGVyLmNwcApAQCAtMTk5LDEyICsxOTksOSBAQCBW
ZWN0b3I8UmVmPFZUVEN1ZT4+IFRleHRUcmFja0xvYWRlcjo6Z2V0TmV3Q3VlcygpCiAgICAgaWYg
KCFtX2N1ZVBhcnNlcikKICAgICAgICAgcmV0dXJuIHsgfTsKIAotICAgIGF1dG8gY3VlcyA9IG1f
Y3VlUGFyc2VyLT50YWtlQ3VlcygpOwotICAgIFZlY3RvcjxSZWY8VlRUQ3VlPj4gcmVzdWx0Owot
ICAgIHJlc3VsdC5yZXNlcnZlSW5pdGlhbENhcGFjaXR5KGN1ZXMuc2l6ZSgpKTsKLSAgICBmb3Ig
KGF1dG8mIGN1ZURhdGEgOiBjdWVzKQotICAgICAgICByZXN1bHQudW5jaGVja2VkQXBwZW5kKFZU
VEN1ZTo6Y3JlYXRlKG1fZG9jdW1lbnQsIGN1ZURhdGEpKTsKLSAgICByZXR1cm4gcmVzdWx0Owor
ICAgIHJldHVybiBtX2N1ZVBhcnNlci0+dGFrZUN1ZXMoKS5tYXAoW3RoaXNdKGF1dG8mIGN1ZURh
dGEpIHsKKyAgICAgICAgcmV0dXJuIFZUVEN1ZTo6Y3JlYXRlKG1fZG9jdW1lbnQsIGN1ZURhdGEp
OworICAgIH0pOwogfQogCiBWZWN0b3I8UmVmPFZUVFJlZ2lvbj4+IFRleHRUcmFja0xvYWRlcjo6
Z2V0TmV3UmVnaW9ucygpCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9sb2FkZXIvYXJjaGl2
ZS9jZi9MZWdhY3lXZWJBcmNoaXZlLmNwcCBiL1NvdXJjZS9XZWJDb3JlL2xvYWRlci9hcmNoaXZl
L2NmL0xlZ2FjeVdlYkFyY2hpdmUuY3BwCmluZGV4IDdmNGJhZDZmY2MzYTljOTdhNmE1MTdhYjli
MjlkMDgwY2E5ZGE3MWIuLmNkOTQxY2YwNTE4MGRmOGMzNzJlOTkzZGFjM2IxOTFlYjVmMzgxYjIg
MTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL2xvYWRlci9hcmNoaXZlL2NmL0xlZ2FjeVdlYkFy
Y2hpdmUuY3BwCisrKyBiL1NvdXJjZS9XZWJDb3JlL2xvYWRlci9hcmNoaXZlL2NmL0xlZ2FjeVdl
YkFyY2hpdmUuY3BwCkBAIC02MTAsMTEgKzYxMCw3IEBAIFJlZlB0cjxMZWdhY3lXZWJBcmNoaXZl
PiBMZWdhY3lXZWJBcmNoaXZlOjpjcmVhdGVGcm9tU2VsZWN0aW9uKEZyYW1lKiBmcmFtZSkKICAg
ICBTdHJpbmcgaWZyYW1lTWFya3VwID0gIjxpZnJhbWUgZnJhbWVib3JkZXI9XCJub1wiIG1hcmdp
bndpZHRoPVwiMFwiIG1hcmdpbmhlaWdodD1cIjBcIiB3aWR0aD1cIjk4JSVcIiBoZWlnaHQ9XCI5
OCUlXCIgc3JjPVwiIiArIGZyYW1lLT5sb2FkZXIoKS5kb2N1bWVudExvYWRlcigpLT5yZXNwb25z
ZSgpLnVybCgpLnN0cmluZygpICsgIlwiPjwvaWZyYW1lPiI7CiAgICAgYXV0byBpZnJhbWVSZXNv
dXJjZSA9IEFyY2hpdmVSZXNvdXJjZTo6Y3JlYXRlKHV0ZjhCdWZmZXIoaWZyYW1lTWFya3VwKSwg
YWJvdXRCbGFua1VSTCgpLCAidGV4dC9odG1sIiwgIlVURi04IiwgU3RyaW5nKCkpOwogCi0gICAg
VmVjdG9yPFJlZjxMZWdhY3lXZWJBcmNoaXZlPj4gc3ViZnJhbWVBcmNoaXZlczsKLSAgICBzdWJm
cmFtZUFyY2hpdmVzLnJlc2VydmVJbml0aWFsQ2FwYWNpdHkoMSk7Ci0gICAgc3ViZnJhbWVBcmNo
aXZlcy51bmNoZWNrZWRBcHBlbmQoYXJjaGl2ZS5yZWxlYXNlTm9uTnVsbCgpKTsKLQotICAgIHJl
dHVybiBjcmVhdGUoaWZyYW1lUmVzb3VyY2UucmVsZWFzZU5vbk51bGwoKSwgeyB9LCBXVEZNb3Zl
KHN1YmZyYW1lQXJjaGl2ZXMpKTsKKyAgICByZXR1cm4gY3JlYXRlKGlmcmFtZVJlc291cmNlLnJl
bGVhc2VOb25OdWxsKCksIHsgfSwgVmVjdG9yIHsgYXJjaGl2ZS5yZWxlYXNlTm9uTnVsbCgpIH0p
OwogfQogCiB9CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9wYWdlL0NhcHRpb25Vc2VyUHJl
ZmVyZW5jZXNNZWRpYUFGLmNwcCBiL1NvdXJjZS9XZWJDb3JlL3BhZ2UvQ2FwdGlvblVzZXJQcmVm
ZXJlbmNlc01lZGlhQUYuY3BwCmluZGV4IDIxNWYwNDA3ZGRiZTJiNjI4YTM1Zjg3M2NmNzI4ODhj
NzkyMjVhNDkuLjBlZmZhNjNmM2NmNGNlZjc3Y2ExMDM3ZTkyOWM2ZDUzNjM1MTNjMDcgMTAwNjQ0
Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL3BhZ2UvQ2FwdGlvblVzZXJQcmVmZXJlbmNlc01lZGlhQUYu
Y3BwCisrKyBiL1NvdXJjZS9XZWJDb3JlL3BhZ2UvQ2FwdGlvblVzZXJQcmVmZXJlbmNlc01lZGlh
QUYuY3BwCkBAIC02MTYsOSArNjE2LDkgQEAgVmVjdG9yPFN0cmluZz4gQ2FwdGlvblVzZXJQcmVm
ZXJlbmNlc01lZGlhQUY6OnByZWZlcnJlZEF1ZGlvQ2hhcmFjdGVyaXN0aWNzKCkgY28KICAgICAg
ICAgcmV0dXJuIENhcHRpb25Vc2VyUHJlZmVyZW5jZXM6OnByZWZlcnJlZEF1ZGlvQ2hhcmFjdGVy
aXN0aWNzKCk7CiAKICAgICBWZWN0b3I8U3RyaW5nPiB1c2VyUHJlZmVycmVkQXVkaW9DaGFyYWN0
ZXJpc3RpY3M7Ci0gICAgdXNlclByZWZlcnJlZEF1ZGlvQ2hhcmFjdGVyaXN0aWNzLnJlc2VydmVD
YXBhY2l0eShjaGFyYWN0ZXJpc3RpY0NvdW50KTsKKyAgICB1c2VyUHJlZmVycmVkQXVkaW9DaGFy
YWN0ZXJpc3RpY3MucmVzZXJ2ZUluaXRpYWxDYXBhY2l0eShjaGFyYWN0ZXJpc3RpY0NvdW50KTsK
ICAgICBmb3IgKENGSW5kZXggaSA9IDA7IGkgPCBjaGFyYWN0ZXJpc3RpY0NvdW50OyBpKyspCi0g
ICAgICAgIHVzZXJQcmVmZXJyZWRBdWRpb0NoYXJhY3RlcmlzdGljcy5hcHBlbmQoc3RhdGljX2Nh
c3Q8Q0ZTdHJpbmdSZWY+KENGQXJyYXlHZXRWYWx1ZUF0SW5kZXgoY2hhcmFjdGVyaXN0aWNzLmdl
dCgpLCBpKSkpOworICAgICAgICB1c2VyUHJlZmVycmVkQXVkaW9DaGFyYWN0ZXJpc3RpY3MudW5j
aGVja2VkQXBwZW5kKHN0YXRpY19jYXN0PENGU3RyaW5nUmVmPihDRkFycmF5R2V0VmFsdWVBdElu
ZGV4KGNoYXJhY3RlcmlzdGljcy5nZXQoKSwgaSkpKTsKIAogICAgIHJldHVybiB1c2VyUHJlZmVy
cmVkQXVkaW9DaGFyYWN0ZXJpc3RpY3M7CiB9CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9w
YWdlL0RPTVdpbmRvdy5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9wYWdlL0RPTVdpbmRvdy5jcHAKaW5k
ZXggMGZhNDE0ODI4NGUwNzVmNTFhYmIwYjNmNTU0ZTExMjZiNzkzYTUyNy4uMjI0YTdiN2IyMWY1
MjVmZTE4MTZkNDRhYzE1MGFhYWE2Mjc2OTc4OCAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUv
cGFnZS9ET01XaW5kb3cuY3BwCisrKyBiL1NvdXJjZS9XZWJDb3JlL3BhZ2UvRE9NV2luZG93LmNw
cApAQCAtMjQzLDEwICsyNDMsOSBAQCBib29sIERPTVdpbmRvdzo6ZGlzcGF0Y2hBbGxQZW5kaW5n
QmVmb3JlVW5sb2FkRXZlbnRzKCkKICAgICBpZiAoYWxyZWFkeURpc3BhdGNoZWQpCiAgICAgICAg
IHJldHVybiB0cnVlOwogCi0gICAgVmVjdG9yPFJlZjxET01XaW5kb3c+PiB3aW5kb3dzOwotICAg
IHdpbmRvd3MucmVzZXJ2ZUluaXRpYWxDYXBhY2l0eShzZXQuc2l6ZSgpKTsKLSAgICBmb3IgKGF1
dG8mIHdpbmRvdyA6IHNldCkKLSAgICAgICAgd2luZG93cy51bmNoZWNrZWRBcHBlbmQoKndpbmRv
dy5rZXkpOworICAgIGF1dG8gd2luZG93cyA9IFdURjo6bWFwKHNldCwgW10oYXV0byYgZW50cnkp
IC0+IFJlZjxET01XaW5kb3c+IHsKKyAgICAgICAgcmV0dXJuICplbnRyeS5rZXk7CisgICAgfSk7
CiAKICAgICBmb3IgKGF1dG8mIHdpbmRvdyA6IHdpbmRvd3MpIHsKICAgICAgICAgaWYgKCFzZXQu
Y29udGFpbnMod2luZG93LnB0cigpKSkKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3BhZ2Uv
SW50ZXJzZWN0aW9uT2JzZXJ2ZXIuY3BwIGIvU291cmNlL1dlYkNvcmUvcGFnZS9JbnRlcnNlY3Rp
b25PYnNlcnZlci5jcHAKaW5kZXggNWEyNzQxN2M2ODBhMWYxYmNiODI3OWM3MGE5ODU5NGQxYzQ0
MjA0ZC4uZGIwYzNmNGI2YTFiZDQ1NDNlZjNhMWY4MzQwM2RmY2JmZTk5Mzg2MSAxMDA2NDQKLS0t
IGEvU291cmNlL1dlYkNvcmUvcGFnZS9JbnRlcnNlY3Rpb25PYnNlcnZlci5jcHAKKysrIGIvU291
cmNlL1dlYkNvcmUvcGFnZS9JbnRlcnNlY3Rpb25PYnNlcnZlci5jcHAKQEAgLTEwMSw4ICsxMDEs
NyBAQCBFeGNlcHRpb25PcjxSZWY8SW50ZXJzZWN0aW9uT2JzZXJ2ZXI+PiBJbnRlcnNlY3Rpb25P
YnNlcnZlcjo6Y3JlYXRlKERvY3VtZW50JiBkbwogCiAgICAgVmVjdG9yPGRvdWJsZT4gdGhyZXNo
b2xkczsKICAgICBXVEY6OnN3aXRjaE9uKGluaXQudGhyZXNob2xkLCBbJnRocmVzaG9sZHNdIChk
b3VibGUgaW5pdFRocmVzaG9sZCkgewotICAgICAgICB0aHJlc2hvbGRzLnJlc2VydmVJbml0aWFs
Q2FwYWNpdHkoMSk7Ci0gICAgICAgIHRocmVzaG9sZHMudW5jaGVja2VkQXBwZW5kKGluaXRUaHJl
c2hvbGQpOworICAgICAgICB0aHJlc2hvbGRzLmFwcGVuZChpbml0VGhyZXNob2xkKTsKICAgICB9
LCBbJnRocmVzaG9sZHNdIChWZWN0b3I8ZG91YmxlPiYgaW5pdFRocmVzaG9sZHMpIHsKICAgICAg
ICAgdGhyZXNob2xkcyA9IFdURk1vdmUoaW5pdFRocmVzaG9sZHMpOwogICAgIH0pOwpkaWZmIC0t
Z2l0IGEvU291cmNlL1dlYkNvcmUvcGFnZS9QYWdlLmNwcCBiL1NvdXJjZS9XZWJDb3JlL3BhZ2Uv
UGFnZS5jcHAKaW5kZXggZmI1NmFlMTkxYTYyMjdkZDZlYTQ0ZTg2N2QzNDYyNTk0MGUxMGI1My4u
ZmQ2Y2Q1Mjc2YjY5NGY2OTQ3Njg0Yjc3MDlmM2M1MjNhZDAwYmZkMiAxMDA2NDQKLS0tIGEvU291
cmNlL1dlYkNvcmUvcGFnZS9QYWdlLmNwcAorKysgYi9Tb3VyY2UvV2ViQ29yZS9wYWdlL1BhZ2Uu
Y3BwCkBAIC05NjYsNyArOTY2LDcgQEAgdWludDMyX3QgUGFnZTo6cmVwbGFjZVJhbmdlc1dpdGhU
ZXh0KGNvbnN0IFZlY3RvcjxTaW1wbGVSYW5nZT4mIHJhbmdlc1RvUmVwbGFjZSwKICAgICAgICAg
aWYgKCFoaWdoZXN0Um9vdCB8fCBoaWdoZXN0Um9vdCAhPSBoaWdoZXN0RWRpdGFibGVSb290KG1h
a2VEZXByZWNhdGVkTGVnYWN5UG9zaXRpb24ocmFuZ2UuZW5kKSkgfHwgIWhpZ2hlc3RSb290LT5k
b2N1bWVudCgpLmZyYW1lKCkpCiAgICAgICAgICAgICBjb250aW51ZTsKICAgICAgICAgYXV0byBz
Y29wZSA9IG1ha2VSYW5nZVNlbGVjdGluZ05vZGVDb250ZW50cygqaGlnaGVzdFJvb3QpOwotICAg
ICAgICByZXBsYWNlbWVudFJhbmdlcy5hcHBlbmQoeyBXVEZNb3ZlKGhpZ2hlc3RSb290KSwgY2hh
cmFjdGVyUmFuZ2Uoc2NvcGUsIHJhbmdlKSB9KTsKKyAgICAgICAgcmVwbGFjZW1lbnRSYW5nZXMu
dW5jaGVja2VkQXBwZW5kKHsgV1RGTW92ZShoaWdoZXN0Um9vdCksIGNoYXJhY3RlclJhbmdlKHNj
b3BlLCByYW5nZSkgfSk7CiAgICAgfQogCiAgICAgcmVwbGFjZVJhbmdlcygqdGhpcywgcmVwbGFj
ZW1lbnRSYW5nZXMsIHJlcGxhY2VtZW50VGV4dCk7CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29y
ZS9wYWdlL2NzcC9Db250ZW50U2VjdXJpdHlQb2xpY3kuY3BwIGIvU291cmNlL1dlYkNvcmUvcGFn
ZS9jc3AvQ29udGVudFNlY3VyaXR5UG9saWN5LmNwcAppbmRleCBiNTI1Y2I2YmVlNzRmMzdkZjAx
OWFmNTJlOGFhMjZiYzNiZmE4MWYzLi5lYTZkMGRlYWM4OTQzODgyZWZhOGZmMzhjMDI1OTZhMzE0
NWNmZDk3IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9wYWdlL2NzcC9Db250ZW50U2VjdXJp
dHlQb2xpY3kuY3BwCisrKyBiL1NvdXJjZS9XZWJDb3JlL3BhZ2UvY3NwL0NvbnRlbnRTZWN1cml0
eVBvbGljeS5jcHAKQEAgLTE2MSw5ICsxNjEsOSBAQCBDb250ZW50U2VjdXJpdHlQb2xpY3lSZXNw
b25zZUhlYWRlcnMgQ29udGVudFNlY3VyaXR5UG9saWN5OjpyZXNwb25zZUhlYWRlcnMoKSBjbwog
ewogICAgIGlmICghbV9jYWNoZWRSZXNwb25zZUhlYWRlcnMpIHsKICAgICAgICAgQ29udGVudFNl
Y3VyaXR5UG9saWN5UmVzcG9uc2VIZWFkZXJzIHJlc3VsdDsKLSAgICAgICAgcmVzdWx0Lm1faGVh
ZGVycy5yZXNlcnZlSW5pdGlhbENhcGFjaXR5KG1fcG9saWNpZXMuc2l6ZSgpKTsKLSAgICAgICAg
Zm9yIChhdXRvJiBwb2xpY3kgOiBtX3BvbGljaWVzKQotICAgICAgICAgICAgcmVzdWx0Lm1faGVh
ZGVycy51bmNoZWNrZWRBcHBlbmQoeyBwb2xpY3ktPmhlYWRlcigpLCBwb2xpY3ktPmhlYWRlclR5
cGUoKSB9KTsKKyAgICAgICAgcmVzdWx0Lm1faGVhZGVycyA9IG1fcG9saWNpZXMubWFwKFtdKGF1
dG8mIHBvbGljeSkgeworICAgICAgICAgICAgcmV0dXJuIHN0ZDo6bWFrZV9wYWlyKHBvbGljeS0+
aGVhZGVyKCksIHBvbGljeS0+aGVhZGVyVHlwZSgpKTsKKyAgICAgICAgfSk7CiAgICAgICAgIHJl
c3VsdC5tX2h0dHBTdGF0dXNDb2RlID0gbV9odHRwU3RhdHVzQ29kZTsKICAgICAgICAgbV9jYWNo
ZWRSZXNwb25zZUhlYWRlcnMgPSBXVEZNb3ZlKHJlc3VsdCk7CiAgICAgfQpkaWZmIC0tZ2l0IGEv
U291cmNlL1dlYkNvcmUvcGFnZS9jc3AvQ29udGVudFNlY3VyaXR5UG9saWN5UmVzcG9uc2VIZWFk
ZXJzLmNwcCBiL1NvdXJjZS9XZWJDb3JlL3BhZ2UvY3NwL0NvbnRlbnRTZWN1cml0eVBvbGljeVJl
c3BvbnNlSGVhZGVycy5jcHAKaW5kZXggZTcxYjZhZDMxY2E3YmYxMjlmNzI0N2ZiYmYyNjNlZDZj
OGU2NTIxYS4uYTA5MzRkN2Y1MzU1N2Y5NjVmMGI1MmRkMzY4MzhkZDZhNDY5MzlmZiAxMDA2NDQK
LS0tIGEvU291cmNlL1dlYkNvcmUvcGFnZS9jc3AvQ29udGVudFNlY3VyaXR5UG9saWN5UmVzcG9u
c2VIZWFkZXJzLmNwcAorKysgYi9Tb3VyY2UvV2ViQ29yZS9wYWdlL2NzcC9Db250ZW50U2VjdXJp
dHlQb2xpY3lSZXNwb25zZUhlYWRlcnMuY3BwCkBAIC0yOCw2ICsyOCw3IEBACiAKICNpbmNsdWRl
ICJIVFRQSGVhZGVyTmFtZXMuaCIKICNpbmNsdWRlICJSZXNvdXJjZVJlc3BvbnNlLmgiCisjaW5j
bHVkZSA8d3RmL0Nyb3NzVGhyZWFkQ29waWVyLmg+CiAKIG5hbWVzcGFjZSBXZWJDb3JlIHsKIApA
QCAtNDcsOSArNDgsNyBAQCBDb250ZW50U2VjdXJpdHlQb2xpY3lSZXNwb25zZUhlYWRlcnM6OkNv
bnRlbnRTZWN1cml0eVBvbGljeVJlc3BvbnNlSGVhZGVycyhjb25zdAogQ29udGVudFNlY3VyaXR5
UG9saWN5UmVzcG9uc2VIZWFkZXJzIENvbnRlbnRTZWN1cml0eVBvbGljeVJlc3BvbnNlSGVhZGVy
czo6aXNvbGF0ZWRDb3B5KCkgY29uc3QKIHsKICAgICBDb250ZW50U2VjdXJpdHlQb2xpY3lSZXNw
b25zZUhlYWRlcnMgaXNvbGF0ZWRDb3B5OwotICAgIGlzb2xhdGVkQ29weS5tX2hlYWRlcnMucmVz
ZXJ2ZUluaXRpYWxDYXBhY2l0eShtX2hlYWRlcnMuc2l6ZSgpKTsKLSAgICBmb3IgKGF1dG8mIGhl
YWRlciA6IG1faGVhZGVycykKLSAgICAgICAgaXNvbGF0ZWRDb3B5Lm1faGVhZGVycy51bmNoZWNr
ZWRBcHBlbmQoeyBoZWFkZXIuZmlyc3QuaXNvbGF0ZWRDb3B5KCksIGhlYWRlci5zZWNvbmQgfSk7
CisgICAgaXNvbGF0ZWRDb3B5Lm1faGVhZGVycyA9IGNyb3NzVGhyZWFkQ29weShtX2hlYWRlcnMp
OwogICAgIGlzb2xhdGVkQ29weS5tX2h0dHBTdGF0dXNDb2RlID0gbV9odHRwU3RhdHVzQ29kZTsK
ICAgICByZXR1cm4gaXNvbGF0ZWRDb3B5OwogfQpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUv
cGFnZS9tYWMvSW1hZ2VPdmVybGF5Q29udHJvbGxlck1hYy5tbSBiL1NvdXJjZS9XZWJDb3JlL3Bh
Z2UvbWFjL0ltYWdlT3ZlcmxheUNvbnRyb2xsZXJNYWMubW0KaW5kZXggYWVkNThiOTA2MGY5MjQz
YzQ3NzlhMDQ4ZjUxNWY2YmFkZDE5NDUwOC4uOGRlMGVmY2MzMGZlOTQwYTNhYWJkNjkzMWI0NDdm
ZjFmMmE4MzcwNSAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvcGFnZS9tYWMvSW1hZ2VPdmVy
bGF5Q29udHJvbGxlck1hYy5tbQorKysgYi9Tb3VyY2UvV2ViQ29yZS9wYWdlL21hYy9JbWFnZU92
ZXJsYXlDb250cm9sbGVyTWFjLm1tCkBAIC05NCw3ICs5NCw3IEBAIHZvaWQgSW1hZ2VPdmVybGF5
Q29udHJvbGxlcjo6dXBkYXRlRGF0YURldGVjdG9ySGlnaGxpZ2h0cyhjb25zdCBIVE1MRWxlbWVu
dCYgb3ZlCiAjZWxzZQogICAgICAgICBhdXRvIGhpZ2hsaWdodCA9IGFkb3B0Q0YoUEFMOjpzb2Z0
TGlua19EYXRhRGV0ZWN0b3JzX0RESGlnaGxpZ2h0Q3JlYXRlV2l0aFJlY3RzSW5WaXNpYmxlUmVj
dFdpdGhTdHlsZUFuZERpcmVjdGlvbihudWxscHRyLCAmZWxlbWVudEJvdW5kcywgMSwgbWFpbkZy
YW1lVmlldy0+dmlzaWJsZUNvbnRlbnRSZWN0KCksIHN0YXRpY19jYXN0PERESGlnaGxpZ2h0U3R5
bGU+KERESGlnaGxpZ2h0U3R5bGVCdWJibGVTdGFuZGFyZCkgfCBzdGF0aWNfY2FzdDxEREhpZ2hs
aWdodFN0eWxlPihEREhpZ2hsaWdodFN0eWxlU3RhbmRhcmRJY29uQXJyb3cpLCBZRVMsIE5TV3Jp
dGluZ0RpcmVjdGlvbk5hdHVyYWwsIE5PLCBZRVMpKTsKICNlbmRpZgotICAgICAgICBtX2RhdGFE
ZXRlY3RvckNvbnRhaW5lcnNBbmRIaWdobGlnaHRzLmFwcGVuZCh7IGVsZW1lbnQsIERhdGFEZXRl
Y3RvckhpZ2hsaWdodDo6Y3JlYXRlRm9ySW1hZ2VPdmVybGF5KCptX3BhZ2UsICp0aGlzLCBXVEZN
b3ZlKGhpZ2hsaWdodCksICptYWtlUmFuZ2VTZWxlY3RpbmdOb2RlKGVsZW1lbnQuZ2V0KCkpKSB9
KTsKKyAgICAgICAgbV9kYXRhRGV0ZWN0b3JDb250YWluZXJzQW5kSGlnaGxpZ2h0cy51bmNoZWNr
ZWRBcHBlbmQoeyBlbGVtZW50LCBEYXRhRGV0ZWN0b3JIaWdobGlnaHQ6OmNyZWF0ZUZvckltYWdl
T3ZlcmxheSgqbV9wYWdlLCAqdGhpcywgV1RGTW92ZShoaWdobGlnaHQpLCAqbWFrZVJhbmdlU2Vs
ZWN0aW5nTm9kZShlbGVtZW50LmdldCgpKSkgfSk7CiAgICAgfQogfQogCmRpZmYgLS1naXQgYS9T
b3VyY2UvV2ViQ29yZS9wYWdlL21hYy9TZXJ2aWNlc092ZXJsYXlDb250cm9sbGVyLm1tIGIvU291
cmNlL1dlYkNvcmUvcGFnZS9tYWMvU2VydmljZXNPdmVybGF5Q29udHJvbGxlci5tbQppbmRleCA2
NTcxZjkwOGU3OTMyN2QyYTJiN2FmY2QyOTc0MzFkYzI3Njk1MmQ5Li40MjRlMTVmMWRjYmU5YjRh
YTIyOGFkMmU4ZWE5N2Y5ODEzMTI3ZjFiIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9wYWdl
L21hYy9TZXJ2aWNlc092ZXJsYXlDb250cm9sbGVyLm1tCisrKyBiL1NvdXJjZS9XZWJDb3JlL3Bh
Z2UvbWFjL1NlcnZpY2VzT3ZlcmxheUNvbnRyb2xsZXIubW0KQEAgLTM5Miw5ICszOTIsNiBAQCB2
b2lkIFNlcnZpY2VzT3ZlcmxheUNvbnRyb2xsZXI6OmJ1aWxkU2VsZWN0aW9uSGlnaGxpZ2h0KCkK
IAogICAgIEhhc2hTZXQ8UmVmUHRyPERhdGFEZXRlY3RvckhpZ2hsaWdodD4+IG5ld1BvdGVudGlh
bEhpZ2hsaWdodHM7CiAKLSAgICBWZWN0b3I8Q0dSZWN0PiBjZ1JlY3RzOwotICAgIGNnUmVjdHMu
cmVzZXJ2ZUNhcGFjaXR5KG1fY3VycmVudFNlbGVjdGlvblJlY3RzLnNpemUoKSk7Ci0KICAgICBp
ZiAoYXV0byBzZWxlY3Rpb25SYW5nZSA9IG1fcGFnZS5zZWxlY3Rpb24oKS5maXJzdFJhbmdlKCkp
IHsKICAgICAgICAgRnJhbWVWaWV3KiBtYWluRnJhbWVWaWV3ID0gbWFpbkZyYW1lKCkudmlldygp
OwogICAgICAgICBpZiAoIW1haW5GcmFtZVZpZXcpCkBAIC00MDQsMTAgKzQwMSwxMyBAQCB2b2lk
IFNlcnZpY2VzT3ZlcmxheUNvbnRyb2xsZXI6OmJ1aWxkU2VsZWN0aW9uSGlnaGxpZ2h0KCkKICAg
ICAgICAgaWYgKCF2aWV3Rm9yUmFuZ2UpCiAgICAgICAgICAgICByZXR1cm47CiAKKyAgICAgICAg
VmVjdG9yPENHUmVjdD4gY2dSZWN0czsKKyAgICAgICAgY2dSZWN0cy5yZXNlcnZlSW5pdGlhbENh
cGFjaXR5KG1fY3VycmVudFNlbGVjdGlvblJlY3RzLnNpemUoKSk7CisKICAgICAgICAgZm9yIChh
dXRvJiByZWN0IDogbV9jdXJyZW50U2VsZWN0aW9uUmVjdHMpIHsKICAgICAgICAgICAgIEludFJl
Y3QgY3VycmVudFJlY3QgPSBzbmFwcGVkSW50UmVjdChyZWN0KTsKICAgICAgICAgICAgIGN1cnJl
bnRSZWN0LnNldExvY2F0aW9uKG1haW5GcmFtZVZpZXctPndpbmRvd1RvQ29udGVudHModmlld0Zv
clJhbmdlLT5jb250ZW50c1RvV2luZG93KGN1cnJlbnRSZWN0LmxvY2F0aW9uKCkpKSk7Ci0gICAg
ICAgICAgICBjZ1JlY3RzLmFwcGVuZChjdXJyZW50UmVjdCk7CisgICAgICAgICAgICBjZ1JlY3Rz
LnVuY2hlY2tlZEFwcGVuZChjdXJyZW50UmVjdCk7CiAgICAgICAgIH0KIAogICAgICAgICBpZiAo
IWNnUmVjdHMuaXNFbXB0eSgpKSB7CkBAIC02MzksMTMgKzYzOSwxMSBAQCB2b2lkIFNlcnZpY2Vz
T3ZlcmxheUNvbnRyb2xsZXI6OmhhbmRsZUNsaWNrKGNvbnN0IEludFBvaW50JiBjbGlja1BvaW50
LCBEYXRhRGV0ZQogICAgIEludFBvaW50IHdpbmRvd1BvaW50ID0gZnJhbWVWaWV3LT5jb250ZW50
c1RvV2luZG93KGNsaWNrUG9pbnQpOwogCiAgICAgaWYgKGhpZ2hsaWdodC50eXBlKCkgPT0gRGF0
YURldGVjdG9ySGlnaGxpZ2h0OjpUeXBlOjpTZWxlY3Rpb24pIHsKLSAgICAgICAgYXV0byB0ZWxl
cGhvbmVOdW1iZXJSYW5nZXMgPSB0ZWxlcGhvbmVOdW1iZXJSYW5nZXNGb3JGb2N1c2VkRnJhbWUo
KTsKLSAgICAgICAgVmVjdG9yPFN0cmluZz4gc2VsZWN0ZWRUZWxlcGhvbmVOdW1iZXJzOwotICAg
ICAgICBzZWxlY3RlZFRlbGVwaG9uZU51bWJlcnMucmVzZXJ2ZUNhcGFjaXR5KHRlbGVwaG9uZU51
bWJlclJhbmdlcy5zaXplKCkpOwotICAgICAgICBmb3IgKGF1dG8mIHJhbmdlIDogdGVsZXBob25l
TnVtYmVyUmFuZ2VzKQotICAgICAgICAgICAgc2VsZWN0ZWRUZWxlcGhvbmVOdW1iZXJzLmFwcGVu
ZChwbGFpblRleHQocmFuZ2UpKTsKKyAgICAgICAgYXV0byBzZWxlY3RlZFRlbGVwaG9uZU51bWJl
cnMgPSB0ZWxlcGhvbmVOdW1iZXJSYW5nZXNGb3JGb2N1c2VkRnJhbWUoKS5tYXAoW10oYXV0byYg
cmFuZ2UpIHsKKyAgICAgICAgICAgIHJldHVybiBwbGFpblRleHQocmFuZ2UpOworICAgICAgICB9
KTsKIAotICAgICAgICBtX3BhZ2UuY2hyb21lKCkuY2xpZW50KCkuaGFuZGxlU2VsZWN0aW9uU2Vy
dmljZUNsaWNrKENoZWNrZWRSZWYobV9wYWdlLmZvY3VzQ29udHJvbGxlcigpKS0+Zm9jdXNlZE9y
TWFpbkZyYW1lKCkuc2VsZWN0aW9uKCksIHNlbGVjdGVkVGVsZXBob25lTnVtYmVycywgd2luZG93
UG9pbnQpOworICAgICAgICBtX3BhZ2UuY2hyb21lKCkuY2xpZW50KCkuaGFuZGxlU2VsZWN0aW9u
U2VydmljZUNsaWNrKENoZWNrZWRSZWYobV9wYWdlLmZvY3VzQ29udHJvbGxlcigpKS0+Zm9jdXNl
ZE9yTWFpbkZyYW1lKCkuc2VsZWN0aW9uKCksIFdURk1vdmUoc2VsZWN0ZWRUZWxlcGhvbmVOdW1i
ZXJzKSwgd2luZG93UG9pbnQpOwogICAgIH0gZWxzZSBpZiAoaGlnaGxpZ2h0LnR5cGUoKSA9PSBE
YXRhRGV0ZWN0b3JIaWdobGlnaHQ6OlR5cGU6OlRlbGVwaG9uZU51bWJlcikKICAgICAgICAgbV9w
YWdlLmNocm9tZSgpLmNsaWVudCgpLmhhbmRsZVRlbGVwaG9uZU51bWJlckNsaWNrKHBsYWluVGV4
dChoaWdobGlnaHQucmFuZ2UoKSksIHdpbmRvd1BvaW50LCBmcmFtZVZpZXctPmNvbnRlbnRzVG9X
aW5kb3coQ2hlY2tlZFJlZihtX3BhZ2UuZm9jdXNDb250cm9sbGVyKCkpLT5mb2N1c2VkT3JNYWlu
RnJhbWUoKS5lZGl0b3IoKS5maXJzdFJlY3RGb3JSYW5nZShoaWdobGlnaHQucmFuZ2UoKSkpKTsK
IH0KZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3BhZ2Uvc2Nyb2xsaW5nL0FzeW5jU2Nyb2xs
aW5nQ29vcmRpbmF0b3IuY3BwIGIvU291cmNlL1dlYkNvcmUvcGFnZS9zY3JvbGxpbmcvQXN5bmNT
Y3JvbGxpbmdDb29yZGluYXRvci5jcHAKaW5kZXggODJmNzU3YTI3YjNiMDcyNDAwNmQ3MmE1Mzgy
ZTM0ZmE0Y2E5NDY4Yy4uNTJkMzM1MzRlN2U0NDY3Y2ZmOWEwZWYwNjczYjc0MjBjMjBlNzlhNCAx
MDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvcGFnZS9zY3JvbGxpbmcvQXN5bmNTY3JvbGxpbmdD
b29yZGluYXRvci5jcHAKKysrIGIvU291cmNlL1dlYkNvcmUvcGFnZS9zY3JvbGxpbmcvQXN5bmNT
Y3JvbGxpbmdDb29yZGluYXRvci5jcHAKQEAgLTY3NiwxMiArNjc2LDkgQEAgVmVjdG9yPFNjcm9s
bGluZ05vZGVJRD4gQXN5bmNTY3JvbGxpbmdDb29yZGluYXRvcjo6Y2hpbGRyZW5PZk5vZGUoU2Ny
b2xsaW5nTm9kZUkKICAgICBpZiAoIWNoaWxkcmVuIHx8IGNoaWxkcmVuLT5pc0VtcHR5KCkpCiAg
ICAgICAgIHJldHVybiB7IH07CiAgICAgCi0gICAgVmVjdG9yPFNjcm9sbGluZ05vZGVJRD4gY2hp
bGROb2RlSURzOwotICAgIGNoaWxkTm9kZUlEcy5yZXNlcnZlSW5pdGlhbENhcGFjaXR5KGNoaWxk
cmVuLT5zaXplKCkpOwotICAgIGZvciAoY29uc3QgYXV0byYgY2hpbGROb2RlIDogKmNoaWxkcmVu
KQotICAgICAgICBjaGlsZE5vZGVJRHMudW5jaGVja2VkQXBwZW5kKGNoaWxkTm9kZS0+c2Nyb2xs
aW5nTm9kZUlEKCkpOwotCi0gICAgcmV0dXJuIGNoaWxkTm9kZUlEczsKKyAgICByZXR1cm4gY2hp
bGRyZW4tPm1hcChbXShhdXRvJiBjaGlsZCkgeworICAgICAgICByZXR1cm4gY2hpbGQtPnNjcm9s
bGluZ05vZGVJRCgpOworICAgIH0pOwogfQogCiB2b2lkIEFzeW5jU2Nyb2xsaW5nQ29vcmRpbmF0
b3I6OnJlY29uY2lsZVZpZXdwb3J0Q29uc3RyYWluZWRMYXllclBvc2l0aW9ucyhTY3JvbGxpbmdO
b2RlSUQgc2Nyb2xsaW5nTm9kZUlELCBjb25zdCBMYXlvdXRSZWN0JiB2aWV3cG9ydFJlY3QsIFNj
cm9sbGluZ0xheWVyUG9zaXRpb25BY3Rpb24gYWN0aW9uKQpkaWZmIC0tZ2l0IGEvU291cmNlL1dl
YkNvcmUvcGFnZS9zY3JvbGxpbmcvU2Nyb2xsU25hcE9mZnNldHNJbmZvLmNwcCBiL1NvdXJjZS9X
ZWJDb3JlL3BhZ2Uvc2Nyb2xsaW5nL1Njcm9sbFNuYXBPZmZzZXRzSW5mby5jcHAKaW5kZXggNjMx
MTEzMzcyZTNjN2ZiMDVkMTM0MWFmYTQ0YjYzOGIzZTI1MjZkOS4uMTg0NTVlOGQwNDJhYjhmNmJh
Nzc2N2JhYmQ4Mjk4NzVlZTQ0OTQ5ZiAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvcGFnZS9z
Y3JvbGxpbmcvU2Nyb2xsU25hcE9mZnNldHNJbmZvLmNwcAorKysgYi9Tb3VyY2UvV2ViQ29yZS9w
YWdlL3Njcm9sbGluZy9TY3JvbGxTbmFwT2Zmc2V0c0luZm8uY3BwCkBAIC00MjAsMjUgKzQyMCwx
OSBAQCBzdGF0aWMgU2Nyb2xsU25hcE9mZnNldHNJbmZvPE91dHB1dFR5cGUsIE91dHB1dFJlY3RU
eXBlPiBjb252ZXJ0T2Zmc2V0SW5mbyhjb25zdAogewogICAgIGF1dG8gY29udmVydE9mZnNldHMg
PSBbc2NhbGVGYWN0b3JdKGNvbnN0IFZlY3RvcjxTbmFwT2Zmc2V0PElucHV0VHlwZT4+JiBpbnB1
dCkKICAgICB7Ci0gICAgICAgIFZlY3RvcjxTbmFwT2Zmc2V0PE91dHB1dFR5cGU+PiBvdXRwdXQ7
Ci0gICAgICAgIG91dHB1dC5yZXNlcnZlSW5pdGlhbENhcGFjaXR5KGlucHV0LnNpemUoKSk7Ci0g
ICAgICAgIGZvciAoYXV0byYgb2Zmc2V0IDogaW5wdXQpCi0gICAgICAgICAgICBvdXRwdXQudW5j
aGVja2VkQXBwZW5kKHsgY29udmVydE9mZnNldFVuaXQob2Zmc2V0Lm9mZnNldCwgc2NhbGVGYWN0
b3IpLCBvZmZzZXQuc3RvcCwgb2Zmc2V0Lmhhc1NuYXBBcmVhTGFyZ2VyVGhhblZpZXdwb3J0LCBv
ZmZzZXQuc25hcEFyZWFJbmRpY2VzIH0pOwotICAgICAgICByZXR1cm4gb3V0cHV0OworICAgICAg
ICByZXR1cm4gaW5wdXQubWFwKFtzY2FsZUZhY3Rvcl0oYXV0byYgb2Zmc2V0KSAtPiBTbmFwT2Zm
c2V0PE91dHB1dFR5cGU+IHsKKyAgICAgICAgICAgIHJldHVybiB7IGNvbnZlcnRPZmZzZXRVbml0
KG9mZnNldC5vZmZzZXQsIHNjYWxlRmFjdG9yKSwgb2Zmc2V0LnN0b3AsIG9mZnNldC5oYXNTbmFw
QXJlYUxhcmdlclRoYW5WaWV3cG9ydCwgb2Zmc2V0LnNuYXBBcmVhSW5kaWNlcyB9OworICAgICAg
ICB9KTsKICAgICB9OwogCiAgICAgYXV0byBjb252ZXJ0UmVjdHMgPSBbc2NhbGVGYWN0b3JdKGNv
bnN0IFZlY3RvcjxJbnB1dFJlY3RUeXBlPiYgaW5wdXQpCiAgICAgewotICAgICAgICBWZWN0b3I8
T3V0cHV0UmVjdFR5cGU+IG91dHB1dDsKLSAgICAgICAgb3V0cHV0LnJlc2VydmVJbml0aWFsQ2Fw
YWNpdHkoaW5wdXQuc2l6ZSgpKTsKLSAgICAgICAgZm9yIChhdXRvJiByZWN0IDogaW5wdXQpIHsK
LSAgICAgICAgICAgIE91dHB1dFJlY3RUeXBlIG91dHB1dFJlY3QoCisgICAgICAgIHJldHVybiBp
bnB1dC5tYXAoW3NjYWxlRmFjdG9yXShhdXRvJiByZWN0KSAtPiBPdXRwdXRSZWN0VHlwZSB7Cisg
ICAgICAgICAgICByZXR1cm4gewogICAgICAgICAgICAgICAgIGNvbnZlcnRPZmZzZXRVbml0KHJl
Y3QueCgpLCBzY2FsZUZhY3RvciksIGNvbnZlcnRPZmZzZXRVbml0KHJlY3QueSgpLCBzY2FsZUZh
Y3RvciksCi0gICAgICAgICAgICAgICAgY29udmVydE9mZnNldFVuaXQocmVjdC53aWR0aCgpLCBz
Y2FsZUZhY3RvciksIGNvbnZlcnRPZmZzZXRVbml0KHJlY3QuaGVpZ2h0KCksIHNjYWxlRmFjdG9y
KSk7Ci0gICAgICAgICAgICBvdXRwdXQudW5jaGVja2VkQXBwZW5kKG91dHB1dFJlY3QpOwotICAg
ICAgICB9Ci0KLSAgICAgICAgcmV0dXJuIG91dHB1dDsKKyAgICAgICAgICAgICAgICBjb252ZXJ0
T2Zmc2V0VW5pdChyZWN0LndpZHRoKCksIHNjYWxlRmFjdG9yKSwgY29udmVydE9mZnNldFVuaXQo
cmVjdC5oZWlnaHQoKSwgc2NhbGVGYWN0b3IpCisgICAgICAgICAgICB9OworICAgICAgICB9KTsK
ICAgICB9OwogCiAgICAgcmV0dXJuIHsKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3BsYXRm
b3JtL0xlbmd0aC5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9MZW5ndGguY3BwCmluZGV4
IDk1NDljZmMyZWVmYjNhYjc3OTI4OTgzMGExNzc0MmM1NzIxZGVkMWQuLmM5OTY5Y2U3OWM2OThh
NGM5MDNlMGU4OTY4ZDg4MzQ0ODk5NDIzMjQgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL3Bs
YXRmb3JtL0xlbmd0aC5jcHAKKysrIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vTGVuZ3RoLmNw
cApAQCAtMjgyLDEwICsyODIsNyBAQCBib29sIExlbmd0aDo6aXNDYWxjdWxhdGVkRXF1YWwoY29u
c3QgTGVuZ3RoJiBvdGhlcikgY29uc3QKIAogc3RhdGljIExlbmd0aCBtYWtlQ2FsY3VsYXRlZChD
YWxjT3BlcmF0b3IgY2FsY09wZXJhdG9yLCBjb25zdCBMZW5ndGgmIGEsIGNvbnN0IExlbmd0aCYg
YikKIHsKLSAgICBWZWN0b3I8c3RkOjp1bmlxdWVfcHRyPENhbGNFeHByZXNzaW9uTm9kZT4+IGxl
bmd0aHM7Ci0gICAgbGVuZ3Rocy5yZXNlcnZlSW5pdGlhbENhcGFjaXR5KDIpOwotICAgIGxlbmd0
aHMudW5jaGVja2VkQXBwZW5kKG1ha2VVbmlxdWU8Q2FsY0V4cHJlc3Npb25MZW5ndGg+KGEpKTsK
LSAgICBsZW5ndGhzLnVuY2hlY2tlZEFwcGVuZChtYWtlVW5pcXVlPENhbGNFeHByZXNzaW9uTGVu
Z3RoPihiKSk7CisgICAgYXV0byBsZW5ndGhzID0gVmVjdG9yPHN0ZDo6dW5pcXVlX3B0cjxDYWxj
RXhwcmVzc2lvbk5vZGU+Pjo6ZnJvbShtYWtlVW5pcXVlPENhbGNFeHByZXNzaW9uTGVuZ3RoPihh
KSwgbWFrZVVuaXF1ZTxDYWxjRXhwcmVzc2lvbkxlbmd0aD4oYikpOwogICAgIGF1dG8gb3AgPSBt
YWtlVW5pcXVlPENhbGNFeHByZXNzaW9uT3BlcmF0aW9uPihXVEZNb3ZlKGxlbmd0aHMpLCBjYWxj
T3BlcmF0b3IpOwogICAgIHJldHVybiBMZW5ndGgoQ2FsY3VsYXRpb25WYWx1ZTo6Y3JlYXRlKFdU
Rk1vdmUob3ApLCBWYWx1ZVJhbmdlOjpBbGwpKTsKIH0KZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJD
b3JlL3BsYXRmb3JtL2FuaW1hdGlvbi9BbmltYXRpb25MaXN0LmNwcCBiL1NvdXJjZS9XZWJDb3Jl
L3BsYXRmb3JtL2FuaW1hdGlvbi9BbmltYXRpb25MaXN0LmNwcAppbmRleCAwZTM2ODUzMjFjMTQ4
ODExZDY1YjllZjcwOTQ2NGFjMDZmNzFlMzA3Li42MjA0NTdjMjNiMzU3YTU4NzYwZWM5YjdiZjcw
MzdkZDg3N2ViMjdlIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9hbmltYXRp
b24vQW5pbWF0aW9uTGlzdC5jcHAKKysrIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vYW5pbWF0
aW9uL0FuaW1hdGlvbkxpc3QuY3BwCkBAIC0zNiwxNCArMzYsMTMgQEAgaWYgKGkpIHsgXAogQW5p
bWF0aW9uTGlzdDo6QW5pbWF0aW9uTGlzdCgpID0gZGVmYXVsdDsKIAogQW5pbWF0aW9uTGlzdDo6
QW5pbWF0aW9uTGlzdChjb25zdCBBbmltYXRpb25MaXN0JiBvdGhlciwgQ29weUJlaGF2aW9yIGNv
cHlCZWhhdmlvcikKLSAgICA6IFJlZkNvdW50ZWQoKQogewotICAgIG1fYW5pbWF0aW9ucy5yZXNl
cnZlSW5pdGlhbENhcGFjaXR5KG90aGVyLnNpemUoKSk7Ci0gICAgZm9yIChhdXRvJiBhbmltYXRp
b24gOiBvdGhlci5tX2FuaW1hdGlvbnMpIHsKLSAgICAgICAgaWYgKGNvcHlCZWhhdmlvciA9PSBD
b3B5QmVoYXZpb3I6OlJlZmVyZW5jZSkKLSAgICAgICAgICAgIG1fYW5pbWF0aW9ucy51bmNoZWNr
ZWRBcHBlbmQoYW5pbWF0aW9uLmdldCgpKTsKLSAgICAgICAgZWxzZQotICAgICAgICAgICAgbV9h
bmltYXRpb25zLnVuY2hlY2tlZEFwcGVuZChBbmltYXRpb246OmNyZWF0ZShhbmltYXRpb24uZ2V0
KCkpKTsKKyAgICBpZiAoY29weUJlaGF2aW9yID09IENvcHlCZWhhdmlvcjo6UmVmZXJlbmNlKQor
ICAgICAgICBtX2FuaW1hdGlvbnMgPSBvdGhlci5tX2FuaW1hdGlvbnM7CisgICAgZWxzZSB7Cisg
ICAgICAgIG1fYW5pbWF0aW9ucyA9IG90aGVyLm1fYW5pbWF0aW9ucy5tYXAoW10oYXV0byYgYW5p
bWF0aW9uKSB7CisgICAgICAgICAgICByZXR1cm4gQW5pbWF0aW9uOjpjcmVhdGUoYW5pbWF0aW9u
LmdldCgpKTsKKyAgICAgICAgfSk7CiAgICAgfQogfQogCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2Vi
Q29yZS9wbGF0Zm9ybS9jb2NvYS9QbGF5YmFja1Nlc3Npb25Nb2RlbE1lZGlhRWxlbWVudC5tbSBi
L1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2NvY29hL1BsYXliYWNrU2Vzc2lvbk1vZGVsTWVkaWFF
bGVtZW50Lm1tCmluZGV4IGJmMDEzNGQ4NzY2MDhiNjUyZWU1Mzg0MzZmYmEwZGY5YzJhY2E4YzMu
LjA1ZWEyMTExZWI1ZDQ1M2NiMjhkOGU3N2VmM2NiZjVmMzU2NzE5ODkgMTAwNjQ0Ci0tLSBhL1Nv
dXJjZS9XZWJDb3JlL3BsYXRmb3JtL2NvY29hL1BsYXliYWNrU2Vzc2lvbk1vZGVsTWVkaWFFbGVt
ZW50Lm1tCisrKyBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2NvY29hL1BsYXliYWNrU2Vzc2lv
bk1vZGVsTWVkaWFFbGVtZW50Lm1tCkBAIC01MTEsMTggKzUxMSwxMyBAQCBib29sIFBsYXliYWNr
U2Vzc2lvbk1vZGVsTWVkaWFFbGVtZW50OjpjYW5QbGF5RmFzdFJldmVyc2UoKSBjb25zdAogCiBW
ZWN0b3I8TWVkaWFTZWxlY3Rpb25PcHRpb24+IFBsYXliYWNrU2Vzc2lvbk1vZGVsTWVkaWFFbGVt
ZW50OjphdWRpb01lZGlhU2VsZWN0aW9uT3B0aW9ucygpIGNvbnN0CiB7Ci0gICAgVmVjdG9yPE1l
ZGlhU2VsZWN0aW9uT3B0aW9uPiBhdWRpb09wdGlvbnM7Ci0KICAgICBpZiAoIW1fbWVkaWFFbGVt
ZW50IHx8ICFtX21lZGlhRWxlbWVudC0+ZG9jdW1lbnQoKS5wYWdlKCkpCi0gICAgICAgIHJldHVy
biBhdWRpb09wdGlvbnM7CisgICAgICAgIHJldHVybiB7IH07CiAKICAgICBhdXRvJiBjYXB0aW9u
UHJlZmVyZW5jZXMgPSBtX21lZGlhRWxlbWVudC0+ZG9jdW1lbnQoKS5wYWdlKCktPmdyb3VwKCku
ZW5zdXJlQ2FwdGlvblByZWZlcmVuY2VzKCk7Ci0KLSAgICBhdWRpb09wdGlvbnMucmVzZXJ2ZUlu
aXRpYWxDYXBhY2l0eShtX2F1ZGlvVHJhY2tzRm9yTWVudS5zaXplKCkpOwotICAgIGZvciAoYXV0
byYgYXVkaW9UcmFjayA6IG1fYXVkaW9UcmFja3NGb3JNZW51KQotICAgICAgICBhdWRpb09wdGlv
bnMudW5jaGVja2VkQXBwZW5kKGNhcHRpb25QcmVmZXJlbmNlcy5tZWRpYVNlbGVjdGlvbk9wdGlv
bkZvclRyYWNrKGF1ZGlvVHJhY2suZ2V0KCkpKTsKLQotICAgIHJldHVybiBhdWRpb09wdGlvbnM7
CisgICAgcmV0dXJuIG1fYXVkaW9UcmFja3NGb3JNZW51Lm1hcChbJl0oYXV0byYgYXVkaW9UcmFj
aykgeworICAgICAgICByZXR1cm4gY2FwdGlvblByZWZlcmVuY2VzLm1lZGlhU2VsZWN0aW9uT3B0
aW9uRm9yVHJhY2soYXVkaW9UcmFjay5nZXQoKSk7CisgICAgfSk7CiB9CiAKIHVpbnQ2NF90IFBs
YXliYWNrU2Vzc2lvbk1vZGVsTWVkaWFFbGVtZW50OjphdWRpb01lZGlhU2VsZWN0ZWRJbmRleCgp
IGNvbnN0CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9lbmNyeXB0ZWRtZWRp
YS9DRE1Qcm94eS5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9lbmNyeXB0ZWRtZWRpYS9D
RE1Qcm94eS5jcHAKaW5kZXggMGRkY2NmYTRiZDBiMzZhMWUzYzI1MjM0YzY3M2M2NzIzMmM1Yjky
YS4uNjc4ZjQxYTdhZTI0MDc1NGNkY2VjNjJmNWMyYzU2NmVjZWQ1ZTBlZiAxMDA2NDQKLS0tIGEv
U291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZW5jcnlwdGVkbWVkaWEvQ0RNUHJveHkuY3BwCisrKyBi
L1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2VuY3J5cHRlZG1lZGlhL0NETVByb3h5LmNwcApAQCAt
MjI1LDExICsyMjUsOSBAQCBjb25zdCBSZWZQdHI8S2V5SGFuZGxlPiYgS2V5U3RvcmU6OmtleUhh
bmRsZShjb25zdCBLZXlJRFR5cGUmIGtleUlEKSBjb25zdAogCiBDRE1JbnN0YW5jZVNlc3Npb246
OktleVN0YXR1c1ZlY3RvciBLZXlTdG9yZTo6Y29udmVydFRvSlNLZXlTdGF0dXNWZWN0b3IoKSBj
b25zdAogewotICAgIENETUluc3RhbmNlU2Vzc2lvbjo6S2V5U3RhdHVzVmVjdG9yIGtleVN0YXR1
c1ZlY3RvcjsKLSAgICBrZXlTdGF0dXNWZWN0b3IucmVzZXJ2ZUluaXRpYWxDYXBhY2l0eShudW1L
ZXlzKCkpOwotICAgIGZvciAoY29uc3QgYXV0byYga2V5IDogbV9rZXlzKQotICAgICAgICBrZXlT
dGF0dXNWZWN0b3IudW5jaGVja2VkQXBwZW5kKHN0ZDo6cGFpcjxSZWY8RnJhZ21lbnRlZFNoYXJl
ZEJ1ZmZlcj4sIENETUluc3RhbmNlU2Vzc2lvbjo6S2V5U3RhdHVzPiB7IGtleS0+aWRBc1NoYXJl
ZEJ1ZmZlcigpLCBrZXktPnN0YXR1cygpIH0pOwotICAgIHJldHVybiBrZXlTdGF0dXNWZWN0b3I7
CisgICAgcmV0dXJuIG1fa2V5cy5tYXAoW10oYXV0byYga2V5KSB7CisgICAgICAgIHJldHVybiBz
dGQ6Om1ha2VfcGFpcihrZXktPmlkQXNTaGFyZWRCdWZmZXIoKSwga2V5LT5zdGF0dXMoKSk7Cisg
ICAgfSk7CiB9CiAKIHZvaWQgQ0RNUHJveHk6OnVwZGF0ZUtleVN0b3JlKGNvbnN0IEtleVN0b3Jl
JiBuZXdLZXlTdG9yZSkKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBo
aWNzL0Zsb2F0UG9seWdvbi5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9G
bG9hdFBvbHlnb24uY3BwCmluZGV4IDhiOTIzNDE3OGVhZDNmM2NhMDYzZmY5YTFlYTQ3ZDAxYmU4
NTQyNWEuLmQwNTJmYTUzY2NkZjZiYjQxZjNmZWZiOTVmMzA1NDY2YjRkZjE5NjYgMTAwNjQ0Ci0t
LSBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL0Zsb2F0UG9seWdvbi5jcHAKKysr
IGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvRmxvYXRQb2x5Z29uLmNwcApAQCAt
MTQyLDExICsxNDIsOSBAQCBGbG9hdFBvbHlnb246OkZsb2F0UG9seWdvbihWZWN0b3I8RmxvYXRQ
b2ludD4mJiB2ZXJ0aWNlcywgV2luZFJ1bGUgZmlsbFJ1bGUpCiBWZWN0b3I8c3RkOjpyZWZlcmVu
Y2Vfd3JhcHBlcjxjb25zdCBGbG9hdFBvbHlnb25FZGdlPj4gRmxvYXRQb2x5Z29uOjpvdmVybGFw
cGluZ0VkZ2VzKGZsb2F0IG1pblksIGZsb2F0IG1heFkpIGNvbnN0CiB7CiAgICAgYXV0byBvdmVy
bGFwcGluZ0VkZ2VJbnRlcnZhbHMgPSBtX2VkZ2VUcmVlLmFsbE92ZXJsYXBzKHsgbWluWSwgbWF4
WSB9KTsKLSAgICBWZWN0b3I8c3RkOjpyZWZlcmVuY2Vfd3JhcHBlcjxjb25zdCBGbG9hdFBvbHln
b25FZGdlPj4gcmVzdWx0OwotICAgIHJlc3VsdC5yZXNlcnZlSW5pdGlhbENhcGFjaXR5KG92ZXJs
YXBwaW5nRWRnZUludGVydmFscy5zaXplKCkpOwotICAgIGZvciAoYXV0byYgaW50ZXJ2YWwgOiBv
dmVybGFwcGluZ0VkZ2VJbnRlcnZhbHMpCi0gICAgICAgIHJlc3VsdC51bmNoZWNrZWRBcHBlbmQo
KmludGVydmFsLmRhdGEoKSk7Ci0gICAgcmV0dXJuIHJlc3VsdDsKKyAgICByZXR1cm4gb3Zlcmxh
cHBpbmdFZGdlSW50ZXJ2YWxzLm1hcChbXShhdXRvJiBpbnRlcnZhbCkgLT4gc3RkOjpyZWZlcmVu
Y2Vfd3JhcHBlcjxjb25zdCBGbG9hdFBvbHlnb25FZGdlPiB7CisgICAgICAgIHJldHVybiAqaW50
ZXJ2YWwuZGF0YSgpOworICAgIH0pOwogfQogCiBzdGF0aWMgaW5saW5lIGZsb2F0IGxlZnRTaWRl
KGNvbnN0IEZsb2F0UG9pbnQmIHZlcnRleDEsIGNvbnN0IEZsb2F0UG9pbnQmIHZlcnRleDIsIGNv
bnN0IEZsb2F0UG9pbnQmIHBvaW50KQpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvcGxhdGZv
cm0vZ3JhcGhpY3MvRmxvYXRRdWFkLmNwcCBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBo
aWNzL0Zsb2F0UXVhZC5jcHAKaW5kZXggMTU1MWI5ZmMxOTZiYzczMDExYWQ2ODIzZmMxMjRkNjk3
ZjU2NGIyYS4uNzFhMjIyODNhYjM0Nzk5NDllNGI0N2JjY2Y2MzI2OGM4MThhN2E5MyAxMDA2NDQK
LS0tIGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvRmxvYXRRdWFkLmNwcAorKysg
Yi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9GbG9hdFF1YWQuY3BwCkBAIC0yNzMs
MTEgKzI3Myw5IEBAIGJvb2wgRmxvYXRRdWFkOjppc0VtcHR5KCkgY29uc3QKIAogVmVjdG9yPEZs
b2F0UmVjdD4gYm91bmRpbmdCb3hlcyhjb25zdCBWZWN0b3I8RmxvYXRRdWFkPiYgcXVhZHMpCiB7
Ci0gICAgVmVjdG9yPEZsb2F0UmVjdD4gYm94ZXM7Ci0gICAgYm94ZXMucmVzZXJ2ZUluaXRpYWxD
YXBhY2l0eShxdWFkcy5zaXplKCkpOwotICAgIGZvciAoY29uc3QgYXV0byYgcXVhZCA6IHF1YWRz
KQotICAgICAgICBib3hlcy51bmNoZWNrZWRBcHBlbmQocXVhZC5ib3VuZGluZ0JveCgpKTsKLSAg
ICByZXR1cm4gYm94ZXM7CisgICAgcmV0dXJuIHF1YWRzLm1hcChbXShhdXRvJiBxdWFkKSB7Cisg
ICAgICAgIHJldHVybiBxdWFkLmJvdW5kaW5nQm94KCk7CisgICAgfSk7CiB9CiAKIEZsb2F0UmVj
dCB1bml0ZWRCb3VuZGluZ0JveGVzKGNvbnN0IFZlY3RvcjxGbG9hdFF1YWQ+JiBxdWFkcykKZGlm
ZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2F2Zm91bmRhdGlvbi9v
YmpjL0NETUluc3RhbmNlRmFpclBsYXlTdHJlYW1pbmdBVkZPYmpDLm1tIGIvU291cmNlL1dlYkNv
cmUvcGxhdGZvcm0vZ3JhcGhpY3MvYXZmb3VuZGF0aW9uL29iamMvQ0RNSW5zdGFuY2VGYWlyUGxh
eVN0cmVhbWluZ0FWRk9iakMubW0KaW5kZXggY2ZlMDQ4YTkzOGMwNWRmNzQ1YzcxNjM1NmFkMWIz
YjkwYTU5ZWI3OC4uOGNjNDcxZmFhNDk5M2EzNTA5NTg0MTNhNTc3MWQ4YWQ3MzE4MzMzMyAxMDA2
NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvYXZmb3VuZGF0aW9uL29i
amMvQ0RNSW5zdGFuY2VGYWlyUGxheVN0cmVhbWluZ0FWRk9iakMubW0KKysrIGIvU291cmNlL1dl
YkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvYXZmb3VuZGF0aW9uL29iamMvQ0RNSW5zdGFuY2VGYWly
UGxheVN0cmVhbWluZ0FWRk9iakMubW0KQEAgLTkwNiw5ICs5MDYsNyBAQCB2b2lkIENETUluc3Rh
bmNlU2Vzc2lvbkZhaXJQbGF5U3RyZWFtaW5nQVZGT2JqQzo6dXBkYXRlTGljZW5zZShjb25zdCBT
dHJpbmcmLCBMaQogICAgIC8vIEZJWE1FKHJkYXI6Ly9wcm9ibGVtLzM1NTkyMjc3KTogc3Rhc2gg
dGhlIGNhbGxiYWNrIGFuZCBjYWxsIGl0IG9uY2UgQVZDb250ZW50S2V5UmVzcG9uc2Ugc3VwcG9y
dHMgYSBzdWNjZXNzIGNhbGxiYWNrLgogICAgIHN0cnVjdCBvYmpjX21ldGhvZF9kZXNjcmlwdGlv
biBtZXRob2QgPSBwcm90b2NvbF9nZXRNZXRob2REZXNjcmlwdGlvbihAcHJvdG9jb2woQVZDb250
ZW50S2V5U2Vzc2lvbkRlbGVnYXRlKSwgQHNlbGVjdG9yKGNvbnRlbnRLZXlTZXNzaW9uOmNvbnRl
bnRLZXlSZXF1ZXN0RGlkU3VjY2VlZDopLCBOTywgWUVTKTsKICAgICBpZiAoIW1ldGhvZC5uYW1l
KSB7Ci0gICAgICAgIEtleVN0YXR1c1ZlY3RvciBrZXlTdGF0dXNlczsKLSAgICAgICAga2V5U3Rh
dHVzZXMucmVzZXJ2ZUluaXRpYWxDYXBhY2l0eSgxKTsKLSAgICAgICAga2V5U3RhdHVzZXMudW5j
aGVja2VkQXBwZW5kKHN0ZDo6bWFrZV9wYWlyKFdURk1vdmUoa2V5SURzLmZpcnN0KCkpLCBLZXlT
dGF0dXM6OlVzYWJsZSkpOworICAgICAgICBLZXlTdGF0dXNWZWN0b3Iga2V5U3RhdHVzZXMgeyBz
dGQ6Om1ha2VfcGFpcihXVEZNb3ZlKGtleUlEcy5maXJzdCgpKSwgS2V5U3RhdHVzOjpVc2FibGUp
IH07CiAgICAgICAgIGNhbGxiYWNrKGZhbHNlLCBzdGQ6Om1ha2Vfb3B0aW9uYWwoV1RGTW92ZShr
ZXlTdGF0dXNlcykpLCBzdGQ6Om51bGxvcHQsIHN0ZDo6bnVsbG9wdCwgU3VjY2VlZGVkKTsKICAg
ICAgICAgcmV0dXJuOwogICAgIH0KZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3Jt
L2dyYXBoaWNzL2NhL1RpbGVHcmlkLmNwcCBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBo
aWNzL2NhL1RpbGVHcmlkLmNwcAppbmRleCA5ZDhmYmIxYTBmMGRlMzQ3MmE1Y2FjZWY3ZmM3ZTU5
N2ViNmEyNmE0Li4wMmI4ZmRjMmJmOGZmZGZkOTU2MDczODhhMzZjMmY4MWFlMzVhYjZiIDEwMDY0
NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9jYS9UaWxlR3JpZC5jcHAK
KysrIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvY2EvVGlsZUdyaWQuY3BwCkBA
IC0yOTAsNyArMjkwLDcgQEAgdW5zaWduZWQgVGlsZUdyaWQ6OmJsYW5rUGl4ZWxDb3VudCgpIGNv
bnN0CiAgICAgcmV0dXJuIFRpbGVDb250cm9sbGVyOjpibGFua1BpeGVsQ291bnRGb3JUaWxlcyh0
aWxlcywgbV9jb250cm9sbGVyLnZpc2libGVSZWN0KCksIEludFBvaW50KDAsIDApKTsKIH0KIAot
dm9pZCBUaWxlR3JpZDo6cmVtb3ZlVGlsZXMoVmVjdG9yPFRpbGVHcmlkOjpUaWxlSW5kZXg+JiB0
b1JlbW92ZSkKK3ZvaWQgVGlsZUdyaWQ6OnJlbW92ZVRpbGVzKGNvbnN0IFZlY3RvcjxUaWxlR3Jp
ZDo6VGlsZUluZGV4PiYgdG9SZW1vdmUpCiB7CiAgICAgZm9yIChzaXplX3QgaSA9IDA7IGkgPCB0
b1JlbW92ZS5zaXplKCk7ICsraSkgewogICAgICAgICBUaWxlSW5mbyB0aWxlSW5mbyA9IG1fdGls
ZXMudGFrZSh0b1JlbW92ZVtpXSk7CkBAIC0zMDIsMTMgKzMwMiw3IEBAIHZvaWQgVGlsZUdyaWQ6
OnJlbW92ZVRpbGVzKFZlY3RvcjxUaWxlR3JpZDo6VGlsZUluZGV4PiYgdG9SZW1vdmUpCiAKIHZv
aWQgVGlsZUdyaWQ6OnJlbW92ZUFsbFRpbGVzKCkKIHsKLSAgICBWZWN0b3I8VGlsZUluZGV4PiB0
aWxlc1RvUmVtb3ZlOwotICAgIHRpbGVzVG9SZW1vdmUucmVzZXJ2ZUluaXRpYWxDYXBhY2l0eSht
X3RpbGVzLnNpemUoKSk7Ci0KLSAgICBmb3IgKGF1dG8mIGVudHJ5IDogbV90aWxlcykKLSAgICAg
ICAgdGlsZXNUb1JlbW92ZS51bmNoZWNrZWRBcHBlbmQoZW50cnkua2V5KTsKLQotICAgIHJlbW92
ZVRpbGVzKHRpbGVzVG9SZW1vdmUpOworICAgIHJlbW92ZVRpbGVzKGNvcHlUb1ZlY3RvcihtX3Rp
bGVzLmtleXMoKSkpOwogfQogCiB2b2lkIFRpbGVHcmlkOjpyZW1vdmVBbGxTZWNvbmRhcnlUaWxl
cygpCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9jYS9UaWxl
R3JpZC5oIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvY2EvVGlsZUdyaWQuaApp
bmRleCAyNTdiYTU5ODM0YWNkNmRjYTdlYjNiZGVjZjZjZDEwMWQzNTNlYjU2Li4yNDcyOTg0NGFh
Mzk2NDM2NDRjYmMzZmE2YzVjNmNjZjEwNmNiM2Y3IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29y
ZS9wbGF0Zm9ybS9ncmFwaGljcy9jYS9UaWxlR3JpZC5oCisrKyBiL1NvdXJjZS9XZWJDb3JlL3Bs
YXRmb3JtL2dyYXBoaWNzL2NhL1RpbGVHcmlkLmgKQEAgLTEzNSw3ICsxMzUsNyBAQCBwcml2YXRl
OgogICAgIFRpbGVDb2hvcnQgbmV3ZXN0VGlsZUNvaG9ydCgpIGNvbnN0OwogICAgIFRpbGVDb2hv
cnQgb2xkZXN0VGlsZUNvaG9ydCgpIGNvbnN0OwogCi0gICAgdm9pZCByZW1vdmVUaWxlcyhWZWN0
b3I8VGlsZUdyaWQ6OlRpbGVJbmRleD4mIHRvUmVtb3ZlKTsKKyAgICB2b2lkIHJlbW92ZVRpbGVz
KGNvbnN0IFZlY3RvcjxUaWxlR3JpZDo6VGlsZUluZGV4PiYgdG9SZW1vdmUpOwogCiAgICAgLy8g
UGxhdGZvcm1DQUxheWVyQ2xpZW50CiAgICAgdm9pZCBwbGF0Zm9ybUNBTGF5ZXJQYWludENvbnRl
bnRzKFBsYXRmb3JtQ0FMYXllciosIEdyYXBoaWNzQ29udGV4dCYsIGNvbnN0IEZsb2F0UmVjdCYs
IEdyYXBoaWNzTGF5ZXJQYWludEJlaGF2aW9yKSBvdmVycmlkZTsKZGlmZiAtLWdpdCBhL1NvdXJj
ZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2NnL0ltYWdlVXRpbGl0aWVzQ0cuY3BwIGIvU291
cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvY2cvSW1hZ2VVdGlsaXRpZXNDRy5jcHAKaW5k
ZXggYTFlNWI3MzJmYjBiZjRlNTQyZDQxYmE5ZTg2OWRmMDFkNjU5ZTM1NC4uYjVhNWNkY2I4OTEw
NDgyZTM5M2I4ZDk1NmJmMGI1Mjk2MzM5MWRjMiAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUv
cGxhdGZvcm0vZ3JhcGhpY3MvY2cvSW1hZ2VVdGlsaXRpZXNDRy5jcHAKKysrIGIvU291cmNlL1dl
YkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvY2cvSW1hZ2VVdGlsaXRpZXNDRy5jcHAKQEAgLTEwMSwx
OSArMTAxLDE1IEBAIHN0YXRpYyBTdHJpbmcgdHJhbnNjb2RlSW1hZ2UoY29uc3QgU3RyaW5nJiBw
YXRoLCBjb25zdCBTdHJpbmcmIGRlc3RpbmF0aW9uVVRJLCBjCiAKIFZlY3RvcjxTdHJpbmc+IGZp
bmRJbWFnZXNGb3JUcmFuc2NvZGluZyhjb25zdCBWZWN0b3I8U3RyaW5nPiYgcGF0aHMsIGNvbnN0
IFZlY3RvcjxTdHJpbmc+JiBhbGxvd2VkTUlNRVR5cGVzKQogewotICAgIFZlY3RvcjxTdHJpbmc+
IHRyYW5zY29kaW5nUGF0aHM7Ci0gICAgdHJhbnNjb2RpbmdQYXRocy5yZXNlcnZlSW5pdGlhbENh
cGFjaXR5KHBhdGhzLnNpemUoKSk7Ci0KICAgICBib29sIG5lZWRzVHJhbnNjb2RpbmcgPSBmYWxz
ZTsKLQotICAgIGZvciAoYXV0byYgcGF0aCA6IHBhdGhzKSB7CisgICAgYXV0byB0cmFuc2NvZGlu
Z1BhdGhzID0gcGF0aHMubWFwKFsmXShhdXRvJiBwYXRoKSB7CiAgICAgICAgIC8vIEFwcGVuZCBh
IHBhdGggb2YgdGhlIGltYWdlIHdoaWNoIG5lZWRzIHRyYW5zY29kaW5nLiBPdGhlcndpc2UgYXBw
ZW5kIGEgbnVsbCBzdHJpbmcuCiAgICAgICAgIGlmICghYWxsb3dlZE1JTUVUeXBlcy5jb250YWlu
cyhXZWJDb3JlOjpNSU1FVHlwZVJlZ2lzdHJ5OjptaW1lVHlwZUZvclBhdGgocGF0aCkpKSB7Ci0g
ICAgICAgICAgICB0cmFuc2NvZGluZ1BhdGhzLnVuY2hlY2tlZEFwcGVuZChwYXRoKTsKICAgICAg
ICAgICAgIG5lZWRzVHJhbnNjb2RpbmcgPSB0cnVlOwotICAgICAgICB9IGVsc2UKLSAgICAgICAg
ICAgIHRyYW5zY29kaW5nUGF0aHMudW5jaGVja2VkQXBwZW5kKG51bGxTdHJpbmcoKSk7Ci0gICAg
fQorICAgICAgICAgICAgcmV0dXJuIHBhdGg7CisgICAgICAgIH0KKyAgICAgICAgcmV0dXJuIG51
bGxTdHJpbmcoKTsKKyAgICB9KTsKIAogICAgIC8vIElmIG5vbmUgb2YgdGhlIGZpbGVzIG5lZWRz
IGltYWdlIHRyYW5zY29kaW5nLCByZXR1cm4gYW4gZW1wdHkgVmVjdG9yLgogICAgIHJldHVybiBu
ZWVkc1RyYW5zY29kaW5nID8gdHJhbnNjb2RpbmdQYXRocyA6IFZlY3RvcjxTdHJpbmc+KCk7CkBA
IC0xMjQsMTggKzEyMCwxMCBAQCBWZWN0b3I8U3RyaW5nPiB0cmFuc2NvZGVJbWFnZXMoY29uc3Qg
VmVjdG9yPFN0cmluZz4mIHBhdGhzLCBjb25zdCBTdHJpbmcmIGRlc3RpbgogICAgIEFTU0VSVCgh
ZGVzdGluYXRpb25VVEkuaXNOdWxsKCkpOwogICAgIEFTU0VSVCghZGVzdGluYXRpb25FeHRlbnNp
b24uaXNOdWxsKCkpOwogICAgIAotICAgIFZlY3RvcjxTdHJpbmc+IHRyYW5zY29kZWRQYXRoczsK
LSAgICB0cmFuc2NvZGVkUGF0aHMucmVzZXJ2ZUluaXRpYWxDYXBhY2l0eShwYXRocy5zaXplKCkp
OwotCi0gICAgZm9yIChhdXRvJiBwYXRoIDogcGF0aHMpIHsKKyAgICByZXR1cm4gcGF0aHMubWFw
KFsmXShhdXRvJiBwYXRoKSB7CiAgICAgICAgIC8vIEFwcGVuZCB0aGUgdHJhbnNjb2RlZCBwYXRo
IGlmIHRoZSBpbWFnZSBuZWVkcyB0cmFuc2NvZGluZy4gT3RoZXJ3aXNlIGFwcGVuZCBhIG51bGwg
c3RyaW5nLgotICAgICAgICBpZiAoIXBhdGguaXNOdWxsKCkpCi0gICAgICAgICAgICB0cmFuc2Nv
ZGVkUGF0aHMudW5jaGVja2VkQXBwZW5kKHRyYW5zY29kZUltYWdlKHBhdGgsIGRlc3RpbmF0aW9u
VVRJLCBkZXN0aW5hdGlvbkV4dGVuc2lvbikpOwotICAgICAgICBlbHNlCi0gICAgICAgICAgICB0
cmFuc2NvZGVkUGF0aHMudW5jaGVja2VkQXBwZW5kKG51bGxTdHJpbmcoKSk7Ci0gICAgfQotCi0g
ICAgcmV0dXJuIHRyYW5zY29kZWRQYXRoczsKKyAgICAgICAgcmV0dXJuIHBhdGguaXNOdWxsKCkg
PyBudWxsU3RyaW5nKCkgOiB0cmFuc2NvZGVJbWFnZShwYXRoLCBkZXN0aW5hdGlvblVUSSwgZGVz
dGluYXRpb25FeHRlbnNpb24pOworICAgIH0pOwogfQogCiB9IC8vIG5hbWVzcGFjZSBXZWJDb3Jl
CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9jb2NvYS9Gb250
Q2FjaGVDb3JlVGV4dC5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9jb2Nv
YS9Gb250Q2FjaGVDb3JlVGV4dC5jcHAKaW5kZXggNDQ4NDJmOGEyMzRkMTdjNTJmNjI3YjJhNDA1
ODkxYWEwMDZlZmJiNy4uYWQ5YTIzN2FhOWM2MDQ4NTQ3NDU1MWMyNDU4NmQyY2E4YTU3NjMwMiAx
MDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvY29jb2EvRm9udENh
Y2hlQ29yZVRleHQuY3BwCisrKyBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2Nv
Y29hL0ZvbnRDYWNoZUNvcmVUZXh0LmNwcApAQCAtMTE1MywxMSArMTE1MywxMCBAQCBGb250U2Vs
ZWN0aW9uQ2FwYWJpbGl0aWVzIGNhcGFiaWxpdGllc0ZvckZvbnREZXNjcmlwdG9yKENURm9udERl
c2NyaXB0b3JSZWYgZm9udAogCiBzdGF0aWMgY29uc3QgRm9udERhdGFiYXNlOjpJbnN0YWxsZWRG
b250KiBmaW5kQ2xvc2VzdEZvbnQoY29uc3QgRm9udERhdGFiYXNlOjpJbnN0YWxsZWRGb250RmFt
aWx5JiBmYW1pbHlGb250cywgRm9udFNlbGVjdGlvblJlcXVlc3QgZm9udFNlbGVjdGlvblJlcXVl
c3QpCiB7Ci0gICAgVmVjdG9yPEZvbnRTZWxlY3Rpb25DYXBhYmlsaXRpZXM+IGNhcGFiaWxpdGll
czsKLSAgICBjYXBhYmlsaXRpZXMucmVzZXJ2ZUluaXRpYWxDYXBhY2l0eShmYW1pbHlGb250cy5z
aXplKCkpOwotICAgIGZvciAoYXV0byYgZm9udCA6IGZhbWlseUZvbnRzLmluc3RhbGxlZEZvbnRz
KQotICAgICAgICBjYXBhYmlsaXRpZXMudW5jaGVja2VkQXBwZW5kKGZvbnQuY2FwYWJpbGl0aWVz
KTsKLSAgICBGb250U2VsZWN0aW9uQWxnb3JpdGhtIGZvbnRTZWxlY3Rpb25BbGdvcml0aG0oZm9u
dFNlbGVjdGlvblJlcXVlc3QsIGNhcGFiaWxpdGllcywgZmFtaWx5Rm9udHMuY2FwYWJpbGl0aWVz
KTsKKyAgICBhdXRvIGNhcGFiaWxpdGllcyA9IGZhbWlseUZvbnRzLmluc3RhbGxlZEZvbnRzLm1h
cChbXShhdXRvJiBmb250KSB7CisgICAgICAgIHJldHVybiBmb250LmNhcGFiaWxpdGllczsKKyAg
ICB9KTsKKyAgICBGb250U2VsZWN0aW9uQWxnb3JpdGhtIGZvbnRTZWxlY3Rpb25BbGdvcml0aG0o
Zm9udFNlbGVjdGlvblJlcXVlc3QsIFdURk1vdmUoY2FwYWJpbGl0aWVzKSwgZmFtaWx5Rm9udHMu
Y2FwYWJpbGl0aWVzKTsKICAgICBhdXRvIGluZGV4ID0gZm9udFNlbGVjdGlvbkFsZ29yaXRobS5p
bmRleE9mQmVzdENhcGFiaWxpdGllcygpOwogICAgIGlmIChpbmRleCA9PSBub3RGb3VuZCkKICAg
ICAgICAgcmV0dXJuIG51bGxwdHI7CkBAIC0xMTY5LDE0ICsxMTY4LDkgQEAgVmVjdG9yPEZvbnRT
ZWxlY3Rpb25DYXBhYmlsaXRpZXM+IEZvbnRDYWNoZTo6Z2V0Rm9udFNlbGVjdGlvbkNhcGFiaWxp
dGllc0luRmFtaWwKIHsKICAgICBhdXRvJiBmb250RGF0YWJhc2UgPSBhbGxvd1VzZXJJbnN0YWxs
ZWRGb250cyA9PSBBbGxvd1VzZXJJbnN0YWxsZWRGb250czo6WWVzID8gRm9udERhdGFiYXNlOjpz
aW5nbGV0b25BbGxvd2luZ1VzZXJJbnN0YWxsZWRGb250cygpIDogRm9udERhdGFiYXNlOjpzaW5n
bGV0b25EaXNhbGxvd2luZ1VzZXJJbnN0YWxsZWRGb250cygpOwogICAgIGNvbnN0IGF1dG8mIGZv
bnRzID0gZm9udERhdGFiYXNlLmNvbGxlY3Rpb25Gb3JGYW1pbHkoZmFtaWx5TmFtZS5zdHJpbmco
KSk7Ci0gICAgaWYgKGZvbnRzLmlzRW1wdHkoKSkKLSAgICAgICAgcmV0dXJuIHsgfTsKLQotICAg
IFZlY3RvcjxGb250U2VsZWN0aW9uQ2FwYWJpbGl0aWVzPiByZXN1bHQ7Ci0gICAgcmVzdWx0LnJl
c2VydmVJbml0aWFsQ2FwYWNpdHkoZm9udHMuc2l6ZSgpKTsKLSAgICBmb3IgKGNvbnN0IGF1dG8m
IGZvbnQgOiBmb250cy5pbnN0YWxsZWRGb250cykKLSAgICAgICAgcmVzdWx0LnVuY2hlY2tlZEFw
cGVuZChmb250LmNhcGFiaWxpdGllcyk7Ci0gICAgcmV0dXJuIHJlc3VsdDsKKyAgICByZXR1cm4g
Zm9udHMuaW5zdGFsbGVkRm9udHMubWFwKFtdKGF1dG8mIGZvbnQpIHsKKyAgICAgICAgcmV0dXJu
IGZvbnQuY2FwYWJpbGl0aWVzOworICAgIH0pOwogfQogCiBzdHJ1Y3QgRm9udExvb2t1cCB7CmRp
ZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9tZWRpYXN0cmVhbS9SZWFsdGltZU1l
ZGlhU291cmNlLmNwcCBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL21lZGlhc3RyZWFtL1JlYWx0
aW1lTWVkaWFTb3VyY2UuY3BwCmluZGV4IDA3MzEzMzkxNDJjZjMzY2U5MTRlMThkYzkxNDczOTFh
MzdkMDNiNjQuLmRlMGYxYTdhNGU2MzVhMTM5ZTQ4MjhiNTQ3ZmRjZjA2NjE5YjM1YWIgMTAwNjQ0
Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL21lZGlhc3RyZWFtL1JlYWx0aW1lTWVkaWFT
b3VyY2UuY3BwCisrKyBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL21lZGlhc3RyZWFtL1JlYWx0
aW1lTWVkaWFTb3VyY2UuY3BwCkBAIC00NjksMTEgKzQ2OSw5IEBAIGRvdWJsZSBSZWFsdGltZU1l
ZGlhU291cmNlOjpmaXRuZXNzRGlzdGFuY2UoY29uc3QgTWVkaWFDb25zdHJhaW50JiBjb25zdHJh
aW50KQogICAgICAgICBpZiAoIWNhcGFiaWxpdGllcy5zdXBwb3J0c0ZhY2luZ01vZGUoKSkKICAg
ICAgICAgICAgIHJldHVybiAwOwogCi0gICAgICAgIGF1dG8mIG1vZGVzID0gY2FwYWJpbGl0aWVz
LmZhY2luZ01vZGUoKTsKLSAgICAgICAgVmVjdG9yPFN0cmluZz4gc3VwcG9ydGVkTW9kZXM7Ci0g
ICAgICAgIHN1cHBvcnRlZE1vZGVzLnJlc2VydmVJbml0aWFsQ2FwYWNpdHkobW9kZXMuc2l6ZSgp
KTsKLSAgICAgICAgZm9yIChhdXRvJiBtb2RlIDogbW9kZXMpCi0gICAgICAgICAgICBzdXBwb3J0
ZWRNb2Rlcy51bmNoZWNrZWRBcHBlbmQoUmVhbHRpbWVNZWRpYVNvdXJjZVNldHRpbmdzOjpmYWNp
bmdNb2RlKG1vZGUpKTsKKyAgICAgICAgYXV0byBzdXBwb3J0ZWRNb2RlcyA9IGNhcGFiaWxpdGll
cy5mYWNpbmdNb2RlKCkubWFwKFtdKGF1dG8mIG1vZGUpIHsKKyAgICAgICAgICAgIHJldHVybiBS
ZWFsdGltZU1lZGlhU291cmNlU2V0dGluZ3M6OmZhY2luZ01vZGUobW9kZSk7CisgICAgICAgIH0p
OwogICAgICAgICByZXR1cm4gZG93bmNhc3Q8U3RyaW5nQ29uc3RyYWludD4oY29uc3RyYWludCku
Zml0bmVzc0Rpc3RhbmNlKHN1cHBvcnRlZE1vZGVzKTsKICAgICAgICAgYnJlYWs7CiAgICAgfQpk
aWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vbmV0d29yay9DYWNoZVZhbGlkYXRp
b24uY3BwIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vbmV0d29yay9DYWNoZVZhbGlkYXRpb24u
Y3BwCmluZGV4IDJlOWMwNmQ1N2M5MGQ1NTQ1MWNkNGFhZGVmNzZiYTMwM2YxMjhhMjkuLmRlYjM5
ZjBhNjNkYThhMWYwNjUyNDdlYjdjMDNlNThlMmVhYzRhNTkgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9X
ZWJDb3JlL3BsYXRmb3JtL25ldHdvcmsvQ2FjaGVWYWxpZGF0aW9uLmNwcAorKysgYi9Tb3VyY2Uv
V2ViQ29yZS9wbGF0Zm9ybS9uZXR3b3JrL0NhY2hlVmFsaWRhdGlvbi5jcHAKQEAgLTM2MywxOCAr
MzYzLDEzIEBAIHN0YXRpYyBTdHJpbmcgaGVhZGVyVmFsdWVGb3JWYXJ5KGNvbnN0IFJlc291cmNl
UmVxdWVzdCYgcmVxdWVzdCwgY29uc3QgU3RyaW5nJiBoCiAKIHN0YXRpYyBWZWN0b3I8c3RkOjpw
YWlyPFN0cmluZywgU3RyaW5nPj4gY29sbGVjdFZhcnlpbmdSZXF1ZXN0SGVhZGVyc0ludGVybmFs
KGNvbnN0IFJlc291cmNlUmVzcG9uc2UmIHJlc3BvbnNlLCBGdW5jdGlvbjxTdHJpbmcoY29uc3Qg
U3RyaW5nJiBoZWFkZXJOYW1lKT4mJiBoZWFkZXJWYWx1ZUZvclZhcnlGdW5jdGlvbikKIHsKLSAg
ICBTdHJpbmcgdmFyeVZhbHVlID0gcmVzcG9uc2UuaHR0cEhlYWRlckZpZWxkKEhUVFBIZWFkZXJO
YW1lOjpWYXJ5KTsKKyAgICBhdXRvIHZhcnlWYWx1ZSA9IHJlc3BvbnNlLmh0dHBIZWFkZXJGaWVs
ZChIVFRQSGVhZGVyTmFtZTo6VmFyeSk7CiAgICAgaWYgKHZhcnlWYWx1ZS5pc0VtcHR5KCkpCiAg
ICAgICAgIHJldHVybiB7IH07Ci0gICAgVmVjdG9yPFN0cmluZz4gdmFyeWluZ0hlYWRlck5hbWVz
ID0gdmFyeVZhbHVlLnNwbGl0KCcsJyk7Ci0gICAgVmVjdG9yPHN0ZDo6cGFpcjxTdHJpbmcsIFN0
cmluZz4+IHZhcnlpbmdSZXF1ZXN0SGVhZGVyczsKLSAgICB2YXJ5aW5nUmVxdWVzdEhlYWRlcnMu
cmVzZXJ2ZUNhcGFjaXR5KHZhcnlpbmdIZWFkZXJOYW1lcy5zaXplKCkpOwotICAgIGZvciAoYXV0
byYgdmFyeUhlYWRlck5hbWUgOiB2YXJ5aW5nSGVhZGVyTmFtZXMpIHsKLSAgICAgICAgU3RyaW5n
IGhlYWRlck5hbWUgPSB2YXJ5SGVhZGVyTmFtZS5zdHJpcFdoaXRlU3BhY2UoKTsKLSAgICAgICAg
U3RyaW5nIGhlYWRlclZhbHVlID0gaGVhZGVyVmFsdWVGb3JWYXJ5RnVuY3Rpb24oaGVhZGVyTmFt
ZSk7Ci0gICAgICAgIHZhcnlpbmdSZXF1ZXN0SGVhZGVycy5hcHBlbmQoc3RkOjptYWtlX3BhaXIo
aGVhZGVyTmFtZSwgaGVhZGVyVmFsdWUpKTsKLSAgICB9Ci0gICAgcmV0dXJuIHZhcnlpbmdSZXF1
ZXN0SGVhZGVyczsKKyAgICByZXR1cm4gdmFyeVZhbHVlLnNwbGl0KCcsJykubWFwKFsmXShhdXRv
JiB2YXJ5SGVhZGVyTmFtZSkgeworICAgICAgICBhdXRvIGhlYWRlck5hbWUgPSB2YXJ5SGVhZGVy
TmFtZS5zdHJpcFdoaXRlU3BhY2UoKTsKKyAgICAgICAgcmV0dXJuIHN0ZDo6bWFrZV9wYWlyKGhl
YWRlck5hbWUsIGhlYWRlclZhbHVlRm9yVmFyeUZ1bmN0aW9uKGhlYWRlck5hbWUpKTsKKyAgICB9
KTsKIH0KIAogVmVjdG9yPHN0ZDo6cGFpcjxTdHJpbmcsIFN0cmluZz4+IGNvbGxlY3RWYXJ5aW5n
UmVxdWVzdEhlYWRlcnMoTmV0d29ya1N0b3JhZ2VTZXNzaW9uKiBzdG9yYWdlU2Vzc2lvbiwgY29u
c3QgUmVzb3VyY2VSZXF1ZXN0JiByZXF1ZXN0LCBjb25zdCBSZXNvdXJjZVJlc3BvbnNlJiByZXNw
b25zZSkKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL25ldHdvcmsvRm9ybURh
dGEuY3BwIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vbmV0d29yay9Gb3JtRGF0YS5jcHAKaW5k
ZXggMGM5MDgxN2M0ZTliNDFmMzQ5YTQxYWU2NGI3MTkwNmI5NTFlYjg5YS4uNzUwOWY1ZDUyZTAy
ZDQxODYyOWYyNmQ5NmIzYjY1MTZkOTY1NzAyNiAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUv
cGxhdGZvcm0vbmV0d29yay9Gb3JtRGF0YS5jcHAKKysrIGIvU291cmNlL1dlYkNvcmUvcGxhdGZv
cm0vbmV0d29yay9Gb3JtRGF0YS5jcHAKQEAgLTExMSwxNSArMTExLDkgQEAgUmVmPEZvcm1EYXRh
PiBGb3JtRGF0YTo6aXNvbGF0ZWRDb3B5KCkgY29uc3QKIHsKICAgICAvLyBGSVhNRTogaXNvbGF0
ZWRDb3B5KCkgZG9lcyBub3QgY29weSBtX2lkZW50aWZpZXIsIG1fYm91bmRhcnksIG9yIG1fY29u
dGFpbnNQYXNzd29yZERhdGEuCiAgICAgLy8gSXMgYWxsIG9mIHRoYXQgY29ycmVjdCBhbmQgaW50
ZW50aW9uYWw/Ci0KICAgICBhdXRvIGZvcm1EYXRhID0gY3JlYXRlKCk7Ci0KICAgICBmb3JtRGF0
YS0+bV9hbHdheXNTdHJlYW0gPSBtX2Fsd2F5c1N0cmVhbTsKLQotICAgIGZvcm1EYXRhLT5tX2Vs
ZW1lbnRzLnJlc2VydmVJbml0aWFsQ2FwYWNpdHkobV9lbGVtZW50cy5zaXplKCkpOwotICAgIGZv
ciAoYXV0byYgZWxlbWVudCA6IG1fZWxlbWVudHMpCi0gICAgICAgIGZvcm1EYXRhLT5tX2VsZW1l
bnRzLnVuY2hlY2tlZEFwcGVuZChlbGVtZW50Lmlzb2xhdGVkQ29weSgpKTsKLQorICAgIGZvcm1E
YXRhLT5tX2VsZW1lbnRzID0gY3Jvc3NUaHJlYWRDb3B5KG1fZWxlbWVudHMpOwogICAgIHJldHVy
biBmb3JtRGF0YTsKIH0KIApkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vbmV0
d29yay9Tb2NrZXRTdHJlYW1IYW5kbGVJbXBsLmNwcCBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3Jt
L25ldHdvcmsvU29ja2V0U3RyZWFtSGFuZGxlSW1wbC5jcHAKaW5kZXggYzVmMmVhNzgwY2I3YmY1
ODBiNmMwYzYwODhhZDBmYjUxM2JiNWQ0Zi4uYTUyNmU1ZGQxZTBmMTAwOGI5Zjk3Y2RhMzY4MjY5
NTMzYzg4NmU2YSAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vbmV0d29yay9T
b2NrZXRTdHJlYW1IYW5kbGVJbXBsLmNwcAorKysgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9u
ZXR3b3JrL1NvY2tldFN0cmVhbUhhbmRsZUltcGwuY3BwCkBAIC0xMjgsNyArMTI4LDcgQEAgdm9p
ZCBTb2NrZXRTdHJlYW1IYW5kbGVJbXBsOjpwbGF0Zm9ybVNlbmRIYW5kc2hha2UoY29uc3QgdWlu
dDhfdCogZGF0YSwgc2l6ZV90IGwKICAgICBpZiAobV9zdGF0ZSA9PSBPcGVuKSB7CiAgICAgICAg
IC8vIFVuZm9ydHVuYXRlbHksIHdlIG5lZWQgdG8gc2VuZCB0aGUgZGF0YSBpbiBvbmUgYnVmZmVy
IG9yIGVsc2UgdGhlIGhhbmRzaGFrZSBmYWlscy4KICAgICAgICAgVmVjdG9yPHVpbnQ4X3Q+IHNl
bmREYXRhOwotICAgICAgICBzZW5kRGF0YS5yZXNlcnZlQ2FwYWNpdHkobGVuZ3RoICsgY29va2ll
RGF0YS5zaXplKCkpOworICAgICAgICBzZW5kRGF0YS5yZXNlcnZlSW5pdGlhbENhcGFjaXR5KGxl
bmd0aCArIGNvb2tpZURhdGEuc2l6ZSgpKTsKICAgICAgICAgc2VuZERhdGEuYXBwZW5kKGRhdGEs
IGxlbmd0aCk7CiAgICAgICAgIHNlbmREYXRhLmFwcGVuZChjb29raWVEYXRhLmRhdGEoKSwgY29v
a2llRGF0YS5zaXplKCkpOwogCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9u
ZXR3b3JrL2NvY29hL05ldHdvcmtTdG9yYWdlU2Vzc2lvbkNvY29hLm1tIGIvU291cmNlL1dlYkNv
cmUvcGxhdGZvcm0vbmV0d29yay9jb2NvYS9OZXR3b3JrU3RvcmFnZVNlc3Npb25Db2NvYS5tbQpp
bmRleCAyOTlmYzRiZDJlYmNmNzA3NzU1NDc0NDUwYTRkNzlkZGU2NzhiZWZlLi40OTk5M2JlN2Nj
YWFiM2E3ZGQ3ZTRiNjJhOTQ1ZGY3MzJiNzYwOGM0IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29y
ZS9wbGF0Zm9ybS9uZXR3b3JrL2NvY29hL05ldHdvcmtTdG9yYWdlU2Vzc2lvbkNvY29hLm1tCisr
KyBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL25ldHdvcmsvY29jb2EvTmV0d29ya1N0b3JhZ2VT
ZXNzaW9uQ29jb2EubW0KQEAgLTg5LDYgKzg5LDggQEAgc3RhdGljIFZlY3RvcjxDb29raWU+IG5z
Q29va2llc1RvQ29va2llVmVjdG9yKE5TQXJyYXk8TlNIVFRQQ29va2llICo+ICpuc0Nvb2tpZXMK
ICAgICAgICAgaWYgKCFmaWx0ZXIgfHwgZmlsdGVyKG5zQ29va2llKSkKICAgICAgICAgICAgIGNv
b2tpZXMudW5jaGVja2VkQXBwZW5kKG5zQ29va2llKTsKICAgICB9CisgICAgaWYgKGZpbHRlcikK
KyAgICAgICAgY29va2llcy5zaHJpbmtUb0ZpdCgpOwogICAgIHJldHVybiBjb29raWVzOwogfQog
CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS90ZXh0L0xvY2FsZUlDVS5jcHAg
Yi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS90ZXh0L0xvY2FsZUlDVS5jcHAKaW5kZXggM2U1OGI3
ZjA2YmU2NDgyZmYyZDY0ODNlYzFmMjc3ZTNhZGEwZmUxMS4uNzU5Yjc4NThkY2UwZGJkYTM5ZGY0
M2YyNDI2OTI4NjQxYzc2Njc3OSAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0v
dGV4dC9Mb2NhbGVJQ1UuY3BwCisrKyBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL3RleHQvTG9j
YWxlSUNVLmNwcApAQCAtMTY5LDcgKzE2OSw3IEBAIHN0ZDo6dW5pcXVlX3B0cjxWZWN0b3I8U3Ry
aW5nPj4gTG9jYWxlSUNVOjpjcmVhdGVMYWJlbFZlY3Rvcihjb25zdCBVRGF0ZUZvcm1hdCoKICAg
ICAgICAgcmV0dXJuIG1ha2VVbmlxdWU8VmVjdG9yPFN0cmluZz4+KCk7CiAKICAgICBhdXRvIGxh
YmVscyA9IG1ha2VVbmlxdWU8VmVjdG9yPFN0cmluZz4+KCk7Ci0gICAgbGFiZWxzLT5yZXNlcnZl
Q2FwYWNpdHkoc2l6ZSk7CisgICAgbGFiZWxzLT5yZXNlcnZlSW5pdGlhbENhcGFjaXR5KHNpemUp
OwogICAgIGZvciAoaW50MzJfdCBpID0gMDsgaSA8IHNpemU7ICsraSkgewogICAgICAgICBVRXJy
b3JDb2RlIHN0YXR1cyA9IFVfWkVST19FUlJPUjsKICAgICAgICAgaW50MzJfdCBsZW5ndGggPSB1
ZGF0X2dldFN5bWJvbHMoZGF0ZUZvcm1hdCwgdHlwZSwgc3RhcnRJbmRleCArIGksIDAsIDAsICZz
dGF0dXMpOwpAQCAtMTgwLDcgKzE4MCw3IEBAIHN0ZDo6dW5pcXVlX3B0cjxWZWN0b3I8U3RyaW5n
Pj4gTG9jYWxlSUNVOjpjcmVhdGVMYWJlbFZlY3Rvcihjb25zdCBVRGF0ZUZvcm1hdCoKICAgICAg
ICAgdWRhdF9nZXRTeW1ib2xzKGRhdGVGb3JtYXQsIHR5cGUsIHN0YXJ0SW5kZXggKyBpLCBidWZm
ZXIuZGF0YSgpLCBsZW5ndGgsICZzdGF0dXMpOwogICAgICAgICBpZiAoVV9GQUlMVVJFKHN0YXR1
cykpCiAgICAgICAgICAgICByZXR1cm4gbWFrZVVuaXF1ZTxWZWN0b3I8U3RyaW5nPj4oKTsKLSAg
ICAgICAgbGFiZWxzLT5hcHBlbmQoU3RyaW5nOjphZG9wdChXVEZNb3ZlKGJ1ZmZlcikpKTsKKyAg
ICAgICAgbGFiZWxzLT51bmNoZWNrZWRBcHBlbmQoU3RyaW5nOjphZG9wdChXVEZNb3ZlKGJ1ZmZl
cikpKTsKICAgICB9CiAgICAgcmV0dXJuIGxhYmVsczsKIH0KQEAgLTE4OCw5ICsxODgsOSBAQCBz
dGQ6OnVuaXF1ZV9wdHI8VmVjdG9yPFN0cmluZz4+IExvY2FsZUlDVTo6Y3JlYXRlTGFiZWxWZWN0
b3IoY29uc3QgVURhdGVGb3JtYXQqCiBzdGF0aWMgc3RkOjp1bmlxdWVfcHRyPFZlY3RvcjxTdHJp
bmc+PiBjcmVhdGVGYWxsYmFja01vbnRoTGFiZWxzKCkKIHsKICAgICBhdXRvIGxhYmVscyA9IG1h
a2VVbmlxdWU8VmVjdG9yPFN0cmluZz4+KCk7Ci0gICAgbGFiZWxzLT5yZXNlcnZlQ2FwYWNpdHko
V1RGX0FSUkFZX0xFTkdUSChXVEY6Om1vbnRoRnVsbE5hbWUpKTsKKyAgICBsYWJlbHMtPnJlc2Vy
dmVJbml0aWFsQ2FwYWNpdHkoV1RGX0FSUkFZX0xFTkdUSChXVEY6Om1vbnRoRnVsbE5hbWUpKTsK
ICAgICBmb3IgKHVuc2lnbmVkIGkgPSAwOyBpIDwgV1RGX0FSUkFZX0xFTkdUSChXVEY6Om1vbnRo
RnVsbE5hbWUpOyArK2kpCi0gICAgICAgIGxhYmVscy0+YXBwZW5kKFdURjo6bW9udGhGdWxsTmFt
ZVtpXSk7CisgICAgICAgIGxhYmVscy0+dW5jaGVja2VkQXBwZW5kKFdURjo6bW9udGhGdWxsTmFt
ZVtpXSk7CiAgICAgcmV0dXJuIGxhYmVsczsKIH0KIApAQCAtMjA5LDExICsyMDksNyBAQCBjb25z
dCBWZWN0b3I8U3RyaW5nPiYgTG9jYWxlSUNVOjptb250aExhYmVscygpCiAKIHN0YXRpYyBzdGQ6
OnVuaXF1ZV9wdHI8VmVjdG9yPFN0cmluZz4+IGNyZWF0ZUZhbGxiYWNrQU1QTUxhYmVscygpCiB7
Ci0gICAgYXV0byBsYWJlbHMgPSBtYWtlVW5pcXVlPFZlY3RvcjxTdHJpbmc+PigpOwotICAgIGxh
YmVscy0+cmVzZXJ2ZUNhcGFjaXR5KDIpOwotICAgIGxhYmVscy0+YXBwZW5kKCJBTSIpOwotICAg
IGxhYmVscy0+YXBwZW5kKCJQTSIpOwotICAgIHJldHVybiBsYWJlbHM7CisgICAgcmV0dXJuIG1h
a2VVbmlxdWU8VmVjdG9yPFN0cmluZz4+KFZlY3RvcjxTdHJpbmc+Ojpmcm9tKCJBTSJfc3RyLCAi
UE0iX3N0cikpOwogfQogCiB2b2lkIExvY2FsZUlDVTo6aW5pdGlhbGl6ZURhdGVUaW1lRm9ybWF0
KCkKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL3RleHQvTG9jYWxlTm9uZS5j
cHAgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS90ZXh0L0xvY2FsZU5vbmUuY3BwCmluZGV4IDc4
MTVhNDc4ZTAyOTc0NTU5NjU3NmMyZGVkMjIxMTkzNmFhOTZhMWIuLjRiNmQ3NjBlOTUyN2E0Nzdj
YzQ5OTA0ODBkYzUyZjg2NTdmMzM0MzUgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL3BsYXRm
b3JtL3RleHQvTG9jYWxlTm9uZS5jcHAKKysrIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vdGV4
dC9Mb2NhbGVOb25lLmNwcApAQCAtNzMsNyArNzMsNyBAQCBjb25zdCBWZWN0b3I8U3RyaW5nPiYg
TG9jYWxlTm9uZTo6bW9udGhMYWJlbHMoKQogICAgICAgICByZXR1cm4gbV9tb250aExhYmVsczsK
ICAgICBtX21vbnRoTGFiZWxzLnJlc2VydmVDYXBhY2l0eShXVEZfQVJSQVlfTEVOR1RIKFdURjo6
bW9udGhGdWxsTmFtZSkpOwogICAgIGZvciAodW5zaWduZWQgaSA9IDA7IGkgPCBXVEZfQVJSQVlf
TEVOR1RIKFdURjo6bW9udGhGdWxsTmFtZSk7ICsraSkKLSAgICAgICAgbV9tb250aExhYmVscy5h
cHBlbmQoV1RGOjptb250aEZ1bGxOYW1lW2ldKTsKKyAgICAgICAgbV9tb250aExhYmVscy51bmNo
ZWNrZWRBcHBlbmQoV1RGOjptb250aEZ1bGxOYW1lW2ldKTsKICAgICByZXR1cm4gbV9tb250aExh
YmVsczsKIH0KIApAQCAtMTE4LDcgKzExOCw3IEBAIGNvbnN0IFZlY3RvcjxTdHJpbmc+JiBMb2Nh
bGVOb25lOjpzaG9ydE1vbnRoTGFiZWxzKCkKICAgICAgICAgcmV0dXJuIG1fc2hvcnRNb250aExh
YmVsczsKICAgICBtX3Nob3J0TW9udGhMYWJlbHMucmVzZXJ2ZUNhcGFjaXR5KFdURl9BUlJBWV9M
RU5HVEgoV1RGOjptb250aE5hbWUpKTsKICAgICBmb3IgKHVuc2lnbmVkIGkgPSAwOyBpIDwgV1RG
X0FSUkFZX0xFTkdUSChXVEY6Om1vbnRoTmFtZSk7ICsraSkKLSAgICAgICAgbV9zaG9ydE1vbnRo
TGFiZWxzLmFwcGVuZChXVEY6Om1vbnRoTmFtZVtpXSk7CisgICAgICAgIG1fc2hvcnRNb250aExh
YmVscy51bmNoZWNrZWRBcHBlbmQoV1RGOjptb250aE5hbWVbaV0pOwogICAgIHJldHVybiBtX3No
b3J0TW9udGhMYWJlbHM7CiB9CiAKQEAgLTEzNyw4ICsxMzcsOCBAQCBjb25zdCBWZWN0b3I8U3Ry
aW5nPiYgTG9jYWxlTm9uZTo6dGltZUFNUE1MYWJlbHMoKQogICAgIGlmICghbV90aW1lQU1QTUxh
YmVscy5pc0VtcHR5KCkpCiAgICAgICAgIHJldHVybiBtX3RpbWVBTVBNTGFiZWxzOwogICAgIG1f
dGltZUFNUE1MYWJlbHMucmVzZXJ2ZUNhcGFjaXR5KDIpOwotICAgIG1fdGltZUFNUE1MYWJlbHMu
YXBwZW5kKCJBTSIpOwotICAgIG1fdGltZUFNUE1MYWJlbHMuYXBwZW5kKCJQTSIpOworICAgIG1f
dGltZUFNUE1MYWJlbHMudW5jaGVja2VkQXBwZW5kKCJBTSIpOworICAgIG1fdGltZUFNUE1MYWJl
bHMudW5jaGVja2VkQXBwZW5kKCJQTSIpOwogICAgIHJldHVybiBtX3RpbWVBTVBNTGFiZWxzOwog
fQogCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS90ZXh0L2NvY29hL0xvY2Fs
ZUNvY29hLm1tIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vdGV4dC9jb2NvYS9Mb2NhbGVDb2Nv
YS5tbQppbmRleCAxYjA5OGZhZjM1ZWIyYmFjNDRmNTZjOWMzOTE4MmMzYjg4NTIxMGE3Li5mMThk
YjQ1NzA4MmY1ZDkyYjA2OTNiZDI0N2YzN2VkYTA3Njg4YjZhIDEwMDY0NAotLS0gYS9Tb3VyY2Uv
V2ViQ29yZS9wbGF0Zm9ybS90ZXh0L2NvY29hL0xvY2FsZUNvY29hLm1tCisrKyBiL1NvdXJjZS9X
ZWJDb3JlL3BsYXRmb3JtL3RleHQvY29jb2EvTG9jYWxlQ29jb2EubW0KQEAgLTExMCwxMSArMTEw
LDExIEBAIGNvbnN0IFZlY3RvcjxTdHJpbmc+JiBMb2NhbGVDb2NvYTo6bW9udGhMYWJlbHMoKQog
ICAgIE5TQXJyYXkgKmFycmF5ID0gW3Nob3J0RGF0ZUZvcm1hdHRlcigpLmdldCgpIG1vbnRoU3lt
Ym9sc107CiAgICAgaWYgKFthcnJheSBjb3VudF0gPT0gMTIpIHsKICAgICAgICAgZm9yICh1bnNp
Z25lZCBpID0gMDsgaSA8IDEyOyArK2kpCi0gICAgICAgICAgICBtX21vbnRoTGFiZWxzLmFwcGVu
ZChTdHJpbmcoW2FycmF5IG9iamVjdEF0SW5kZXg6aV0pKTsKKyAgICAgICAgICAgIG1fbW9udGhM
YWJlbHMudW5jaGVja2VkQXBwZW5kKFN0cmluZyhbYXJyYXkgb2JqZWN0QXRJbmRleDppXSkpOwog
ICAgICAgICByZXR1cm4gbV9tb250aExhYmVsczsKICAgICB9CiAgICAgZm9yIChhdXRvJiBuYW1l
IDogV1RGOjptb250aEZ1bGxOYW1lKQotICAgICAgICBtX21vbnRoTGFiZWxzLmFwcGVuZChuYW1l
KTsKKyAgICAgICAgbV9tb250aExhYmVscy51bmNoZWNrZWRBcHBlbmQobmFtZSk7CiAgICAgcmV0
dXJuIG1fbW9udGhMYWJlbHM7CiB9CiAKQEAgLTIwNCwxMSArMjA0LDExIEBAIGNvbnN0IFZlY3Rv
cjxTdHJpbmc+JiBMb2NhbGVDb2NvYTo6c2hvcnRNb250aExhYmVscygpCiAgICAgTlNBcnJheSAq
YXJyYXkgPSBbc2hvcnREYXRlRm9ybWF0dGVyKCkuZ2V0KCkgc2hvcnRNb250aFN5bWJvbHNdOwog
ICAgIGlmIChbYXJyYXkgY291bnRdID09IDEyKSB7CiAgICAgICAgIGZvciAodW5zaWduZWQgaSA9
IDA7IGkgPCAxMjsgKytpKQotICAgICAgICAgICAgbV9zaG9ydE1vbnRoTGFiZWxzLmFwcGVuZChb
YXJyYXkgb2JqZWN0QXRJbmRleDppXSk7CisgICAgICAgICAgICBtX3Nob3J0TW9udGhMYWJlbHMu
dW5jaGVja2VkQXBwZW5kKFthcnJheSBvYmplY3RBdEluZGV4OmldKTsKICAgICAgICAgcmV0dXJu
IG1fc2hvcnRNb250aExhYmVsczsKICAgICB9CiAgICAgZm9yIChhdXRvJiBuYW1lIDogV1RGOjpt
b250aE5hbWUpCi0gICAgICAgIG1fc2hvcnRNb250aExhYmVscy5hcHBlbmQobmFtZSk7CisgICAg
ICAgIG1fc2hvcnRNb250aExhYmVscy51bmNoZWNrZWRBcHBlbmQobmFtZSk7CiAgICAgcmV0dXJu
IG1fc2hvcnRNb250aExhYmVsczsKIH0KIApAQCAtMjIwLDcgKzIyMCw3IEBAIGNvbnN0IFZlY3Rv
cjxTdHJpbmc+JiBMb2NhbGVDb2NvYTo6c3RhbmRBbG9uZU1vbnRoTGFiZWxzKCkKICAgICBpZiAo
W2FycmF5IGNvdW50XSA9PSAxMikgewogICAgICAgICBtX3N0YW5kQWxvbmVNb250aExhYmVscy5y
ZXNlcnZlQ2FwYWNpdHkoMTIpOwogICAgICAgICBmb3IgKHVuc2lnbmVkIGkgPSAwOyBpIDwgMTI7
ICsraSkKLSAgICAgICAgICAgIG1fc3RhbmRBbG9uZU1vbnRoTGFiZWxzLmFwcGVuZChbYXJyYXkg
b2JqZWN0QXRJbmRleDppXSk7CisgICAgICAgICAgICBtX3N0YW5kQWxvbmVNb250aExhYmVscy51
bmNoZWNrZWRBcHBlbmQoW2FycmF5IG9iamVjdEF0SW5kZXg6aV0pOwogICAgICAgICByZXR1cm4g
bV9zdGFuZEFsb25lTW9udGhMYWJlbHM7CiAgICAgfQogICAgIG1fc3RhbmRBbG9uZU1vbnRoTGFi
ZWxzID0gc2hvcnRNb250aExhYmVscygpOwpAQCAtMjM1LDcgKzIzNSw3IEBAIGNvbnN0IFZlY3Rv
cjxTdHJpbmc+JiBMb2NhbGVDb2NvYTo6c2hvcnRTdGFuZEFsb25lTW9udGhMYWJlbHMoKQogICAg
IGlmIChbYXJyYXkgY291bnRdID09IDEyKSB7CiAgICAgICAgIG1fc2hvcnRTdGFuZEFsb25lTW9u
dGhMYWJlbHMucmVzZXJ2ZUNhcGFjaXR5KDEyKTsKICAgICAgICAgZm9yICh1bnNpZ25lZCBpID0g
MDsgaSA8IDEyOyArK2kpCi0gICAgICAgICAgICBtX3Nob3J0U3RhbmRBbG9uZU1vbnRoTGFiZWxz
LmFwcGVuZChbYXJyYXkgb2JqZWN0QXRJbmRleDppXSk7CisgICAgICAgICAgICBtX3Nob3J0U3Rh
bmRBbG9uZU1vbnRoTGFiZWxzLnVuY2hlY2tlZEFwcGVuZChbYXJyYXkgb2JqZWN0QXRJbmRleDpp
XSk7CiAgICAgICAgIHJldHVybiBtX3Nob3J0U3RhbmRBbG9uZU1vbnRoTGFiZWxzOwogICAgIH0K
ICAgICBtX3Nob3J0U3RhbmRBbG9uZU1vbnRoTGFiZWxzID0gc2hvcnRNb250aExhYmVscygpOwpA
QCAtMjQ4LDggKzI0OCw4IEBAIGNvbnN0IFZlY3RvcjxTdHJpbmc+JiBMb2NhbGVDb2NvYTo6dGlt
ZUFNUE1MYWJlbHMoKQogICAgICAgICByZXR1cm4gbV90aW1lQU1QTUxhYmVsczsKICAgICBtX3Rp
bWVBTVBNTGFiZWxzLnJlc2VydmVDYXBhY2l0eSgyKTsKICAgICBSZXRhaW5QdHI8TlNEYXRlRm9y
bWF0dGVyPiBmb3JtYXR0ZXIgPSBzaG9ydFRpbWVGb3JtYXR0ZXIoKTsKLSAgICBtX3RpbWVBTVBN
TGFiZWxzLmFwcGVuZChbZm9ybWF0dGVyIEFNU3ltYm9sXSk7Ci0gICAgbV90aW1lQU1QTUxhYmVs
cy5hcHBlbmQoW2Zvcm1hdHRlciBQTVN5bWJvbF0pOworICAgIG1fdGltZUFNUE1MYWJlbHMudW5j
aGVja2VkQXBwZW5kKFtmb3JtYXR0ZXIgQU1TeW1ib2xdKTsKKyAgICBtX3RpbWVBTVBNTGFiZWxz
LnVuY2hlY2tlZEFwcGVuZChbZm9ybWF0dGVyIFBNU3ltYm9sXSk7CiAgICAgcmV0dXJuIG1fdGlt
ZUFNUE1MYWJlbHM7CiB9CiAKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3BsdWdpbnMvRE9N
TWltZVR5cGVBcnJheS5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9wbHVnaW5zL0RPTU1pbWVUeXBlQXJy
YXkuY3BwCmluZGV4IGE2ZWI0Zjk5ZjM0MTZjZjg0NDYwZmMzYjAwYjRhNmYwMjQ1NTZkYzcuLmVh
Y2VjZmMzM2I4NTY5MjRmYzFkMDBhMTE2ZjEwM2IzZDZlYzFmMDUgMTAwNjQ0Ci0tLSBhL1NvdXJj
ZS9XZWJDb3JlL3BsdWdpbnMvRE9NTWltZVR5cGVBcnJheS5jcHAKKysrIGIvU291cmNlL1dlYkNv
cmUvcGx1Z2lucy9ET01NaW1lVHlwZUFycmF5LmNwcApAQCAtNjMsMTMgKzYzLDExIEBAIFJlZlB0
cjxET01NaW1lVHlwZT4gRE9NTWltZVR5cGVBcnJheTo6bmFtZWRJdGVtKGNvbnN0IEF0b21TdHJp
bmcmIHByb3BlcnR5TmFtZSkKICAgICByZXR1cm4gbnVsbHB0cjsKIH0KIAotVmVjdG9yPEF0b21T
dHJpbmc+IERPTU1pbWVUeXBlQXJyYXk6OnN1cHBvcnRlZFByb3BlcnR5TmFtZXMoKQorVmVjdG9y
PEF0b21TdHJpbmc+IERPTU1pbWVUeXBlQXJyYXk6OnN1cHBvcnRlZFByb3BlcnR5TmFtZXMoKSBj
b25zdAogewotICAgIFZlY3RvcjxBdG9tU3RyaW5nPiByZXN1bHQ7Ci0gICAgcmVzdWx0LnJlc2Vy
dmVJbml0aWFsQ2FwYWNpdHkobV90eXBlcy5zaXplKCkpOwotICAgIGZvciAoYXV0byYgdHlwZSA6
IG1fdHlwZXMpCi0gICAgICAgIHJlc3VsdC51bmNoZWNrZWRBcHBlbmQodHlwZS0+dHlwZSgpKTsK
LSAgICByZXR1cm4gcmVzdWx0OworICAgIHJldHVybiBtX3R5cGVzLm1hcChbXShhdXRvJiB0eXBl
KSAtPiBBdG9tU3RyaW5nIHsKKyAgICAgICAgcmV0dXJuIHR5cGUtPnR5cGUoKTsKKyAgICB9KTsK
IH0KIAogfSAvLyBuYW1lc3BhY2UgV2ViQ29yZQpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUv
cGx1Z2lucy9ET01NaW1lVHlwZUFycmF5LmggYi9Tb3VyY2UvV2ViQ29yZS9wbHVnaW5zL0RPTU1p
bWVUeXBlQXJyYXkuaAppbmRleCA0OWQ2YTg4ODMyZGRjZGQyOGNkOWJjN2NjMjA0YzQ0YWNhYzUy
M2U2Li4xMzc2M2I1MTQzNDViNmI4NDhhMTk4ZGNiNjc0MTUyY2YwNzA1NmI3IDEwMDY0NAotLS0g
YS9Tb3VyY2UvV2ViQ29yZS9wbHVnaW5zL0RPTU1pbWVUeXBlQXJyYXkuaAorKysgYi9Tb3VyY2Uv
V2ViQ29yZS9wbHVnaW5zL0RPTU1pbWVUeXBlQXJyYXkuaApAQCAtNDAsNyArNDAsNyBAQCBwdWJs
aWM6CiAgICAgdW5zaWduZWQgbGVuZ3RoKCkgY29uc3Q7CiAgICAgUmVmUHRyPERPTU1pbWVUeXBl
PiBpdGVtKHVuc2lnbmVkIGluZGV4KTsKICAgICBSZWZQdHI8RE9NTWltZVR5cGU+IG5hbWVkSXRl
bShjb25zdCBBdG9tU3RyaW5nJiBwcm9wZXJ0eU5hbWUpOwotICAgIFZlY3RvcjxBdG9tU3RyaW5n
PiBzdXBwb3J0ZWRQcm9wZXJ0eU5hbWVzKCk7CisgICAgVmVjdG9yPEF0b21TdHJpbmc+IHN1cHBv
cnRlZFByb3BlcnR5TmFtZXMoKSBjb25zdDsKIAogICAgIE5hdmlnYXRvciogbmF2aWdhdG9yKCkg
eyByZXR1cm4gbV9uYXZpZ2F0b3IuZ2V0KCk7IH0KIApkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNv
cmUvcGx1Z2lucy9ET01QbHVnaW4uY3BwIGIvU291cmNlL1dlYkNvcmUvcGx1Z2lucy9ET01QbHVn
aW4uY3BwCmluZGV4IDNiOGQ0ZGY5Zjk3OTE2ZTAwYmRlZmFhOWQ2Yzk3YmM3YTA2MzhkMDkuLmMx
MjljOGJjMDA2NTNkNmM3ZDRhNWY3MmVlNzhiNWEyZjkwMDY1NjEgMTAwNjQ0Ci0tLSBhL1NvdXJj
ZS9XZWJDb3JlL3BsdWdpbnMvRE9NUGx1Z2luLmNwcAorKysgYi9Tb3VyY2UvV2ViQ29yZS9wbHVn
aW5zL0RPTVBsdWdpbi5jcHAKQEAgLTM1LDExICszNSw5IEBAIFJlZjxET01QbHVnaW4+IERPTVBs
dWdpbjo6Y3JlYXRlKE5hdmlnYXRvciYgbmF2aWdhdG9yLCBjb25zdCBQbHVnaW5JbmZvJiBpbmZv
KQogCiBzdGF0aWMgVmVjdG9yPFJlZjxET01NaW1lVHlwZT4+IG1ha2VNaW1lVHlwZXMoTmF2aWdh
dG9yJiBuYXZpZ2F0b3IsIGNvbnN0IFBsdWdpbkluZm8mIGluZm8sIERPTVBsdWdpbiYgc2VsZikK
IHsKLSAgICBWZWN0b3I8UmVmPERPTU1pbWVUeXBlPj4gdHlwZXM7Ci0gICAgdHlwZXMucmVzZXJ2
ZUluaXRpYWxDYXBhY2l0eShpbmZvLm1pbWVzLnNpemUoKSk7Ci0gICAgZm9yIChhdXRvJiB0eXBl
IDogaW5mby5taW1lcykKLSAgICAgICAgdHlwZXMudW5jaGVja2VkQXBwZW5kKERPTU1pbWVUeXBl
OjpjcmVhdGUobmF2aWdhdG9yLCB0eXBlLCBzZWxmKSk7Ci0KKyAgICBhdXRvIHR5cGVzID0gaW5m
by5taW1lcy5tYXAoWyZdKGF1dG8mIHR5cGUpIHsKKyAgICAgICAgcmV0dXJuIERPTU1pbWVUeXBl
OjpjcmVhdGUobmF2aWdhdG9yLCB0eXBlLCBzZWxmKTsKKyAgICB9KTsKICAgICBzdGQ6OnNvcnQo
dHlwZXMuYmVnaW4oKSwgdHlwZXMuZW5kKCksIFtdKGNvbnN0IFJlZjxET01NaW1lVHlwZT4mIGEs
IGNvbnN0IFJlZjxET01NaW1lVHlwZT4mIGIpIHsKICAgICAgICAgcmV0dXJuIGNvZGVQb2ludENv
bXBhcmVMZXNzVGhhbihhLT50eXBlKCksIGItPnR5cGUoKSk7CiAgICAgfSk7CkBAIC05MiwxMyAr
OTAsMTEgQEAgUmVmUHRyPERPTU1pbWVUeXBlPiBET01QbHVnaW46Om5hbWVkSXRlbShjb25zdCBB
dG9tU3RyaW5nJiBwcm9wZXJ0eU5hbWUpCiAgICAgcmV0dXJuIG51bGxwdHI7CiB9CiAKLVZlY3Rv
cjxBdG9tU3RyaW5nPiBET01QbHVnaW46OnN1cHBvcnRlZFByb3BlcnR5TmFtZXMoKQorVmVjdG9y
PEF0b21TdHJpbmc+IERPTVBsdWdpbjo6c3VwcG9ydGVkUHJvcGVydHlOYW1lcygpIGNvbnN0CiB7
Ci0gICAgVmVjdG9yPEF0b21TdHJpbmc+IHJlc3VsdDsKLSAgICByZXN1bHQucmVzZXJ2ZUluaXRp
YWxDYXBhY2l0eShtX21pbWVUeXBlcy5zaXplKCkpOwotICAgIGZvciAoYXV0byYgdHlwZSA6IG1f
bWltZVR5cGVzKQotICAgICAgICByZXN1bHQudW5jaGVja2VkQXBwZW5kKHR5cGUtPnR5cGUoKSk7
Ci0gICAgcmV0dXJuIHJlc3VsdDsKKyAgICByZXR1cm4gbV9taW1lVHlwZXMubWFwKFtdKGF1dG8m
IHR5cGUpIC0+IEF0b21TdHJpbmcgeworICAgICAgICByZXR1cm4gdHlwZS0+dHlwZSgpOworICAg
IH0pOwogfQogCiB9IC8vIG5hbWVzcGFjZSBXZWJDb3JlCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2Vi
Q29yZS9wbHVnaW5zL0RPTVBsdWdpbi5oIGIvU291cmNlL1dlYkNvcmUvcGx1Z2lucy9ET01QbHVn
aW4uaAppbmRleCBhMjMwZTA0Yzk0MzlkZDkyM2ZkOTVhOWVlYzBlZWJhYjNkMDYzYTYzLi43OTkz
ZDBiYjRlOTgwYTUzZDZmYWMyMzQ3ODExOGIwOTYzYzBjZDA3IDEwMDY0NAotLS0gYS9Tb3VyY2Uv
V2ViQ29yZS9wbHVnaW5zL0RPTVBsdWdpbi5oCisrKyBiL1NvdXJjZS9XZWJDb3JlL3BsdWdpbnMv
RE9NUGx1Z2luLmgKQEAgLTQ2LDcgKzQ2LDcgQEAgcHVibGljOgogCiAgICAgUmVmUHRyPERPTU1p
bWVUeXBlPiBpdGVtKHVuc2lnbmVkIGluZGV4KTsKICAgICBSZWZQdHI8RE9NTWltZVR5cGU+IG5h
bWVkSXRlbShjb25zdCBBdG9tU3RyaW5nJiBwcm9wZXJ0eU5hbWUpOwotICAgIFZlY3RvcjxBdG9t
U3RyaW5nPiBzdXBwb3J0ZWRQcm9wZXJ0eU5hbWVzKCk7CisgICAgVmVjdG9yPEF0b21TdHJpbmc+
IHN1cHBvcnRlZFByb3BlcnR5TmFtZXMoKSBjb25zdDsKIAogICAgIGNvbnN0IFZlY3RvcjxSZWY8
RE9NTWltZVR5cGU+PiYgbWltZVR5cGVzKCkgY29uc3QgeyByZXR1cm4gbV9taW1lVHlwZXM7IH0K
IApkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvcGx1Z2lucy9ET01QbHVnaW5BcnJheS5jcHAg
Yi9Tb3VyY2UvV2ViQ29yZS9wbHVnaW5zL0RPTVBsdWdpbkFycmF5LmNwcAppbmRleCAzZThlNGQ3
ZWEyYjQ5MWFkNzRhNmRlMmE0OTc4NjdkMWUwZmNmY2JmLi45MGViZGExMTdmMTRmMTE0MWYxZTgz
NTA2ZjFiZTVlMGE5OTA4ODAyIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9wbHVnaW5zL0RP
TVBsdWdpbkFycmF5LmNwcAorKysgYi9Tb3VyY2UvV2ViQ29yZS9wbHVnaW5zL0RPTVBsdWdpbkFy
cmF5LmNwcApAQCAtNzEsMTMgKzcxLDExIEBAIFJlZlB0cjxET01QbHVnaW4+IERPTVBsdWdpbkFy
cmF5OjpuYW1lZEl0ZW0oY29uc3QgQXRvbVN0cmluZyYgcHJvcGVydHlOYW1lKQogICAgIHJldHVy
biBudWxscHRyOwogfQogCi1WZWN0b3I8QXRvbVN0cmluZz4gRE9NUGx1Z2luQXJyYXk6OnN1cHBv
cnRlZFByb3BlcnR5TmFtZXMoKQorVmVjdG9yPEF0b21TdHJpbmc+IERPTVBsdWdpbkFycmF5Ojpz
dXBwb3J0ZWRQcm9wZXJ0eU5hbWVzKCkgY29uc3QKIHsKLSAgICBWZWN0b3I8QXRvbVN0cmluZz4g
cmVzdWx0OwotICAgIHJlc3VsdC5yZXNlcnZlSW5pdGlhbENhcGFjaXR5KG1fcHVibGljbHlWaXNp
YmxlUGx1Z2lucy5zaXplKCkpOwotICAgIGZvciAoYXV0byYgcGx1Z2luIDogbV9wdWJsaWNseVZp
c2libGVQbHVnaW5zKQotICAgICAgICByZXN1bHQudW5jaGVja2VkQXBwZW5kKHBsdWdpbi0+bmFt
ZSgpKTsKLSAgICByZXR1cm4gcmVzdWx0OworICAgIHJldHVybiBtX3B1YmxpY2x5VmlzaWJsZVBs
dWdpbnMubWFwKFtdKGF1dG8mIHBsdWdpbikgLT4gQXRvbVN0cmluZyB7CisgICAgICAgIHJldHVy
biBwbHVnaW4tPm5hbWUoKTsKKyAgICB9KTsKIH0KIAogdm9pZCBET01QbHVnaW5BcnJheTo6cmVm
cmVzaChib29sIHJlbG9hZFBhZ2VzKQpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvcGx1Z2lu
cy9ET01QbHVnaW5BcnJheS5oIGIvU291cmNlL1dlYkNvcmUvcGx1Z2lucy9ET01QbHVnaW5BcnJh
eS5oCmluZGV4IGQ2NjQ0ZDE5YjA1MzJhM2E2NzE1Mjc2NDY2MmYyMzgwNDVlYzBiYmMuLjI0Zjkz
MmM3ZWZhNzA0ZDE1ZDljMzliYjk0NjBlZWI2OWVjMTIwOTggMTAwNjQ0Ci0tLSBhL1NvdXJjZS9X
ZWJDb3JlL3BsdWdpbnMvRE9NUGx1Z2luQXJyYXkuaAorKysgYi9Tb3VyY2UvV2ViQ29yZS9wbHVn
aW5zL0RPTVBsdWdpbkFycmF5LmgKQEAgLTQxLDcgKzQxLDcgQEAgcHVibGljOgogICAgIHVuc2ln
bmVkIGxlbmd0aCgpIGNvbnN0OwogICAgIFJlZlB0cjxET01QbHVnaW4+IGl0ZW0odW5zaWduZWQg
aW5kZXgpOwogICAgIFJlZlB0cjxET01QbHVnaW4+IG5hbWVkSXRlbShjb25zdCBBdG9tU3RyaW5n
JiBwcm9wZXJ0eU5hbWUpOwotICAgIFZlY3RvcjxBdG9tU3RyaW5nPiBzdXBwb3J0ZWRQcm9wZXJ0
eU5hbWVzKCk7CisgICAgVmVjdG9yPEF0b21TdHJpbmc+IHN1cHBvcnRlZFByb3BlcnR5TmFtZXMo
KSBjb25zdDsKIAogICAgIHZvaWQgcmVmcmVzaChib29sIHJlbG9hZFBhZ2VzKTsKIApkaWZmIC0t
Z2l0IGEvU291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL0xheWVyQW5jZXN0b3JDbGlwcGluZ1N0YWNr
LmNwcCBiL1NvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9MYXllckFuY2VzdG9yQ2xpcHBpbmdTdGFj
ay5jcHAKaW5kZXggZjJjYzAzOTBmYzUwMjVjNDVlNWNkYWVmMTcxMjM1YmJjMDkwZjAzOS4uNzk3
MGFmODI1NzEyNDI4ZmM4MGNlNjFjNGE5MmIyMGQyYjFjZDY0OSAxMDA2NDQKLS0tIGEvU291cmNl
L1dlYkNvcmUvcmVuZGVyaW5nL0xheWVyQW5jZXN0b3JDbGlwcGluZ1N0YWNrLmNwcAorKysgYi9T
b3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvTGF5ZXJBbmNlc3RvckNsaXBwaW5nU3RhY2suY3BwCkBA
IC0zNCwxMCArMzQsOCBAQAogbmFtZXNwYWNlIFdlYkNvcmUgewogCiBMYXllckFuY2VzdG9yQ2xp
cHBpbmdTdGFjazo6TGF5ZXJBbmNlc3RvckNsaXBwaW5nU3RhY2soVmVjdG9yPENvbXBvc2l0ZWRD
bGlwRGF0YT4mJiBjbGlwRGF0YVN0YWNrKQorICAgIDogbV9zdGFjayhXVEY6Om1hcChXVEZNb3Zl
KGNsaXBEYXRhU3RhY2spLCBbXShhdXRvJiYgY2xpcERhdGFFbnRyeSkgeyByZXR1cm4gQ2xpcHBp
bmdTdGFja0VudHJ5IHsgV1RGTW92ZShjbGlwRGF0YUVudHJ5KSwgMCwgbnVsbHB0ciB9OyB9KSkK
IHsKLSAgICBtX3N0YWNrLnJlc2VydmVJbml0aWFsQ2FwYWNpdHkoY2xpcERhdGFTdGFjay5zaXpl
KCkpOwotICAgIGZvciAoYXV0byYgY2xpcERhdGFFbnRyeSA6IGNsaXBEYXRhU3RhY2spCi0gICAg
ICAgIG1fc3RhY2sudW5jaGVja2VkQXBwZW5kKHsgV1RGTW92ZShjbGlwRGF0YUVudHJ5KSwgMCwg
bnVsbHB0ciB9KTsKIH0KIAogYm9vbCBMYXllckFuY2VzdG9yQ2xpcHBpbmdTdGFjazo6ZXF1YWxU
b0NsaXBEYXRhKGNvbnN0IFZlY3RvcjxDb21wb3NpdGVkQ2xpcERhdGE+JiBjbGlwRGF0YVN0YWNr
KSBjb25zdApAQCAtMTY1LDEzICsxNjMsOSBAQCBib29sIExheWVyQW5jZXN0b3JDbGlwcGluZ1N0
YWNrOjp1cGRhdGVXaXRoQ2xpcERhdGEoU2Nyb2xsaW5nQ29vcmRpbmF0b3IqIHNjcm9sbAogCiBW
ZWN0b3I8Q29tcG9zaXRlZENsaXBEYXRhPiBMYXllckFuY2VzdG9yQ2xpcHBpbmdTdGFjazo6Y29t
cG9zaXRlZENsaXBEYXRhKCkgY29uc3QKIHsKLSAgICBWZWN0b3I8Q29tcG9zaXRlZENsaXBEYXRh
PiBjbGlwRGF0YTsKLSAgICBjbGlwRGF0YS5yZXNlcnZlSW5pdGlhbENhcGFjaXR5KG1fc3RhY2su
c2l6ZSgpKTsKLQotICAgIGZvciAoY29uc3QgYXV0byYgZW50cnkgOiBtX3N0YWNrKQotICAgICAg
ICBjbGlwRGF0YS51bmNoZWNrZWRBcHBlbmQoZW50cnkuY2xpcERhdGEpOwotCi0gICAgcmV0dXJu
IGNsaXBEYXRhOworICAgIHJldHVybiBtX3N0YWNrLm1hcChbXShhdXRvJiBlbnRyeSkgeworICAg
ICAgICByZXR1cm4gZW50cnkuY2xpcERhdGE7CisgICAgfSk7CiB9CiAKIHN0YXRpYyBUZXh0U3Ry
ZWFtJiBvcGVyYXRvcjw8KFRleHRTdHJlYW0mIHRzLCBjb25zdCBMYXllckFuY2VzdG9yQ2xpcHBp
bmdTdGFjazo6Q2xpcHBpbmdTdGFja0VudHJ5JiBlbnRyeSkKZGlmZiAtLWdpdCBhL1NvdXJjZS9X
ZWJDb3JlL3JlbmRlcmluZy9SZW5kZXJCb3hNb2RlbE9iamVjdC5jcHAgYi9Tb3VyY2UvV2ViQ29y
ZS9yZW5kZXJpbmcvUmVuZGVyQm94TW9kZWxPYmplY3QuY3BwCmluZGV4IGJkYzFlNjJhN2E1YTA2
NTQ1NWY1MWMzN2U4MzU3MDllY2YyMjZkZGIuLjg1MzBlMzM1NWYyZDZiOGQ3ZmZiNmVkZjgzZDYw
OGJjYTRiOWY1NTUgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9SZW5kZXJC
b3hNb2RlbE9iamVjdC5jcHAKKysrIGIvU291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL1JlbmRlckJv
eE1vZGVsT2JqZWN0LmNwcApAQCAtMjIxMywxMyArMjIxMyw5IEBAIHZvaWQgUmVuZGVyQm94TW9k
ZWxPYmplY3Q6OmNsaXBCb3JkZXJTaWRlUG9seWdvbihHcmFwaGljc0NvbnRleHQmIGdyYXBoaWNz
Q29udGV4CiAgICAgLy8gICAgICAgICAwLS0tLS0tLS0tLS0tLS0tLTMKICAgICAvLwogICAgIFZl
Y3RvcjxGbG9hdFBvaW50PiBxdWFkOwotICAgIHF1YWQucmVzZXJ2ZUluaXRpYWxDYXBhY2l0eSg0
KTsKICAgICBzd2l0Y2ggKHNpZGUpIHsKICAgICBjYXNlIEJveFNpZGU6OlRvcDoKLSAgICAgICAg
cXVhZC51bmNoZWNrZWRBcHBlbmQob3V0ZXJSZWN0Lm1pblhNaW5ZQ29ybmVyKCkpOwotICAgICAg
ICBxdWFkLnVuY2hlY2tlZEFwcGVuZChpbm5lclJlY3QubWluWE1pbllDb3JuZXIoKSk7Ci0gICAg
ICAgIHF1YWQudW5jaGVja2VkQXBwZW5kKGlubmVyUmVjdC5tYXhYTWluWUNvcm5lcigpKTsKLSAg
ICAgICAgcXVhZC51bmNoZWNrZWRBcHBlbmQob3V0ZXJSZWN0Lm1heFhNaW5ZQ29ybmVyKCkpOwor
ICAgICAgICBxdWFkID0geyBvdXRlclJlY3QubWluWE1pbllDb3JuZXIoKSwgaW5uZXJSZWN0Lm1p
blhNaW5ZQ29ybmVyKCksIGlubmVyUmVjdC5tYXhYTWluWUNvcm5lcigpLCBvdXRlclJlY3QubWF4
WE1pbllDb3JuZXIoKSB9OwogCiAgICAgICAgIGlmICghaW5uZXJCb3JkZXIucmFkaWkoKS50b3BM
ZWZ0KCkuaXNaZXJvKCkpCiAgICAgICAgICAgICBmaW5kSW50ZXJzZWN0aW9uKG91dGVyUmVjdC5t
aW5YTWluWUNvcm5lcigpLCBpbm5lclJlY3QubWluWE1pbllDb3JuZXIoKSwgaW5uZXJSZWN0Lm1p
blhNYXhZQ29ybmVyKCksIGlubmVyUmVjdC5tYXhYTWluWUNvcm5lcigpLCBxdWFkWzFdKTsKQEAg
LTIyMjksMTAgKzIyMjUsNyBAQCB2b2lkIFJlbmRlckJveE1vZGVsT2JqZWN0OjpjbGlwQm9yZGVy
U2lkZVBvbHlnb24oR3JhcGhpY3NDb250ZXh0JiBncmFwaGljc0NvbnRleAogICAgICAgICBicmVh
azsKIAogICAgIGNhc2UgQm94U2lkZTo6TGVmdDoKLSAgICAgICAgcXVhZC51bmNoZWNrZWRBcHBl
bmQob3V0ZXJSZWN0Lm1pblhNaW5ZQ29ybmVyKCkpOwotICAgICAgICBxdWFkLnVuY2hlY2tlZEFw
cGVuZChpbm5lclJlY3QubWluWE1pbllDb3JuZXIoKSk7Ci0gICAgICAgIHF1YWQudW5jaGVja2Vk
QXBwZW5kKGlubmVyUmVjdC5taW5YTWF4WUNvcm5lcigpKTsKLSAgICAgICAgcXVhZC51bmNoZWNr
ZWRBcHBlbmQob3V0ZXJSZWN0Lm1pblhNYXhZQ29ybmVyKCkpOworICAgICAgICBxdWFkID0geyBv
dXRlclJlY3QubWluWE1pbllDb3JuZXIoKSwgaW5uZXJSZWN0Lm1pblhNaW5ZQ29ybmVyKCksIGlu
bmVyUmVjdC5taW5YTWF4WUNvcm5lcigpLCBvdXRlclJlY3QubWluWE1heFlDb3JuZXIoKSB9Owog
CiAgICAgICAgIGlmICghaW5uZXJCb3JkZXIucmFkaWkoKS50b3BMZWZ0KCkuaXNaZXJvKCkpCiAg
ICAgICAgICAgICBmaW5kSW50ZXJzZWN0aW9uKG91dGVyUmVjdC5taW5YTWluWUNvcm5lcigpLCBp
bm5lclJlY3QubWluWE1pbllDb3JuZXIoKSwgaW5uZXJSZWN0Lm1pblhNYXhZQ29ybmVyKCksIGlu
bmVyUmVjdC5tYXhYTWluWUNvcm5lcigpLCBxdWFkWzFdKTsKQEAgLTIyNDIsMTAgKzIyMzUsNyBA
QCB2b2lkIFJlbmRlckJveE1vZGVsT2JqZWN0OjpjbGlwQm9yZGVyU2lkZVBvbHlnb24oR3JhcGhp
Y3NDb250ZXh0JiBncmFwaGljc0NvbnRleAogICAgICAgICBicmVhazsKIAogICAgIGNhc2UgQm94
U2lkZTo6Qm90dG9tOgotICAgICAgICBxdWFkLnVuY2hlY2tlZEFwcGVuZChvdXRlclJlY3QubWlu
WE1heFlDb3JuZXIoKSk7Ci0gICAgICAgIHF1YWQudW5jaGVja2VkQXBwZW5kKGlubmVyUmVjdC5t
aW5YTWF4WUNvcm5lcigpKTsKLSAgICAgICAgcXVhZC51bmNoZWNrZWRBcHBlbmQoaW5uZXJSZWN0
Lm1heFhNYXhZQ29ybmVyKCkpOwotICAgICAgICBxdWFkLnVuY2hlY2tlZEFwcGVuZChvdXRlclJl
Y3QubWF4WE1heFlDb3JuZXIoKSk7CisgICAgICAgIHF1YWQgPSB7IG91dGVyUmVjdC5taW5YTWF4
WUNvcm5lcigpLCBpbm5lclJlY3QubWluWE1heFlDb3JuZXIoKSwgaW5uZXJSZWN0Lm1heFhNYXhZ
Q29ybmVyKCksIG91dGVyUmVjdC5tYXhYTWF4WUNvcm5lcigpIH07CiAKICAgICAgICAgaWYgKCFp
bm5lckJvcmRlci5yYWRpaSgpLmJvdHRvbUxlZnQoKS5pc1plcm8oKSkKICAgICAgICAgICAgIGZp
bmRJbnRlcnNlY3Rpb24ob3V0ZXJSZWN0Lm1pblhNYXhZQ29ybmVyKCksIGlubmVyUmVjdC5taW5Y
TWF4WUNvcm5lcigpLCBpbm5lclJlY3QubWluWE1pbllDb3JuZXIoKSwgaW5uZXJSZWN0Lm1heFhN
YXhZQ29ybmVyKCksIHF1YWRbMV0pOwpAQCAtMjI1NSwxMCArMjI0NSw3IEBAIHZvaWQgUmVuZGVy
Qm94TW9kZWxPYmplY3Q6OmNsaXBCb3JkZXJTaWRlUG9seWdvbihHcmFwaGljc0NvbnRleHQmIGdy
YXBoaWNzQ29udGV4CiAgICAgICAgIGJyZWFrOwogCiAgICAgY2FzZSBCb3hTaWRlOjpSaWdodDoK
LSAgICAgICAgcXVhZC51bmNoZWNrZWRBcHBlbmQob3V0ZXJSZWN0Lm1heFhNaW5ZQ29ybmVyKCkp
OwotICAgICAgICBxdWFkLnVuY2hlY2tlZEFwcGVuZChpbm5lclJlY3QubWF4WE1pbllDb3JuZXIo
KSk7Ci0gICAgICAgIHF1YWQudW5jaGVja2VkQXBwZW5kKGlubmVyUmVjdC5tYXhYTWF4WUNvcm5l
cigpKTsKLSAgICAgICAgcXVhZC51bmNoZWNrZWRBcHBlbmQob3V0ZXJSZWN0Lm1heFhNYXhZQ29y
bmVyKCkpOworICAgICAgICBxdWFkID0geyBvdXRlclJlY3QubWF4WE1pbllDb3JuZXIoKSwgaW5u
ZXJSZWN0Lm1heFhNaW5ZQ29ybmVyKCksIGlubmVyUmVjdC5tYXhYTWF4WUNvcm5lcigpLCBvdXRl
clJlY3QubWF4WE1heFlDb3JuZXIoKSB9OwogCiAgICAgICAgIGlmICghaW5uZXJCb3JkZXIucmFk
aWkoKS50b3BSaWdodCgpLmlzWmVybygpKQogICAgICAgICAgICAgZmluZEludGVyc2VjdGlvbihv
dXRlclJlY3QubWF4WE1pbllDb3JuZXIoKSwgaW5uZXJSZWN0Lm1heFhNaW5ZQ29ybmVyKCksIGlu
bmVyUmVjdC5taW5YTWluWUNvcm5lcigpLCBpbm5lclJlY3QubWF4WE1heFlDb3JuZXIoKSwgcXVh
ZFsxXSk7CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvUmVuZGVyRWxlbWVu
dC5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvUmVuZGVyRWxlbWVudC5jcHAKaW5kZXgg
NGU3NTlkN2YyNTBhZjk4YTQ4MDY0ZTQ2Njc3NzNlNzY4MzVmYjlhMS4uZmJiOGI4NmUzZmUzNmM1
M2Q5NmIyMzRmYzFlMTBjNDU4ZTk4M2E1NSAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvcmVu
ZGVyaW5nL1JlbmRlckVsZW1lbnQuY3BwCisrKyBiL1NvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9S
ZW5kZXJFbGVtZW50LmNwcApAQCAtMTk2OCwzMSArMTk2OCwzOCBAQCB2b2lkIFJlbmRlckVsZW1l
bnQ6OmRyYXdMaW5lRm9yQm94U2lkZShHcmFwaGljc0NvbnRleHQmIGdyYXBoaWNzQ29udGV4dCwg
Y29uc3QgRgogICAgICAgICB5MiA9IHJvdW5kVG9EZXZpY2VQaXhlbCh5MiwgZGV2aWNlU2NhbGVG
YWN0b3IpOwogCiAgICAgICAgIFZlY3RvcjxGbG9hdFBvaW50PiBxdWFkOwotICAgICAgICBxdWFk
LnJlc2VydmVJbml0aWFsQ2FwYWNpdHkoNCk7CiAgICAgICAgIHN3aXRjaCAoc2lkZSkgewogICAg
ICAgICBjYXNlIEJveFNpZGU6OlRvcDoKLSAgICAgICAgICAgIHF1YWQudW5jaGVja2VkQXBwZW5k
KHsgeDEgKyBzdGQ6Om1heDxmbG9hdD4oLWFkamFjZW50V2lkdGgxLCAwKSwgeTEgfSk7Ci0gICAg
ICAgICAgICBxdWFkLnVuY2hlY2tlZEFwcGVuZCh7IHgxICsgc3RkOjptYXg8ZmxvYXQ+KCBhZGph
Y2VudFdpZHRoMSwgMCksIHkyIH0pOwotICAgICAgICAgICAgcXVhZC51bmNoZWNrZWRBcHBlbmQo
eyB4MiAtIHN0ZDo6bWF4PGZsb2F0PiggYWRqYWNlbnRXaWR0aDIsIDApLCB5MiB9KTsKLSAgICAg
ICAgICAgIHF1YWQudW5jaGVja2VkQXBwZW5kKHsgeDIgLSBzdGQ6Om1heDxmbG9hdD4oLWFkamFj
ZW50V2lkdGgyLCAwKSwgeTEgfSk7CisgICAgICAgICAgICBxdWFkID0geworICAgICAgICAgICAg
ICAgIHsgeDEgKyBzdGQ6Om1heDxmbG9hdD4oLWFkamFjZW50V2lkdGgxLCAwKSwgeTEgfSwKKyAg
ICAgICAgICAgICAgICB7IHgxICsgc3RkOjptYXg8ZmxvYXQ+KGFkamFjZW50V2lkdGgxLCAwKSwg
eTIgfSwKKyAgICAgICAgICAgICAgICB7IHgyIC0gc3RkOjptYXg8ZmxvYXQ+KGFkamFjZW50V2lk
dGgyLCAwKSwgeTIgfSwKKyAgICAgICAgICAgICAgICB7IHgyIC0gc3RkOjptYXg8ZmxvYXQ+KC1h
ZGphY2VudFdpZHRoMiwgMCksIHkxIH0KKyAgICAgICAgICAgIH07CiAgICAgICAgICAgICBicmVh
azsKICAgICAgICAgY2FzZSBCb3hTaWRlOjpCb3R0b206Ci0gICAgICAgICAgICBxdWFkLnVuY2hl
Y2tlZEFwcGVuZCh7IHgxICsgc3RkOjptYXg8ZmxvYXQ+KCBhZGphY2VudFdpZHRoMSwgMCksIHkx
IH0pOwotICAgICAgICAgICAgcXVhZC51bmNoZWNrZWRBcHBlbmQoeyB4MSArIHN0ZDo6bWF4PGZs
b2F0PigtYWRqYWNlbnRXaWR0aDEsIDApLCB5MiB9KTsKLSAgICAgICAgICAgIHF1YWQudW5jaGVj
a2VkQXBwZW5kKHsgeDIgLSBzdGQ6Om1heDxmbG9hdD4oLWFkamFjZW50V2lkdGgyLCAwKSwgeTIg
fSk7Ci0gICAgICAgICAgICBxdWFkLnVuY2hlY2tlZEFwcGVuZCh7IHgyIC0gc3RkOjptYXg8Zmxv
YXQ+KCBhZGphY2VudFdpZHRoMiwgMCksIHkxIH0pOworICAgICAgICAgICAgcXVhZCA9IHsKKyAg
ICAgICAgICAgICAgICB7IHgxICsgc3RkOjptYXg8ZmxvYXQ+KGFkamFjZW50V2lkdGgxLCAwKSwg
eTEgfSwKKyAgICAgICAgICAgICAgICB7IHgxICsgc3RkOjptYXg8ZmxvYXQ+KC1hZGphY2VudFdp
ZHRoMSwgMCksIHkyIH0sCisgICAgICAgICAgICAgICAgeyB4MiAtIHN0ZDo6bWF4PGZsb2F0Pigt
YWRqYWNlbnRXaWR0aDIsIDApLCB5MiB9LAorICAgICAgICAgICAgICAgIHsgeDIgLSBzdGQ6Om1h
eDxmbG9hdD4oYWRqYWNlbnRXaWR0aDIsIDApLCB5MSB9CisgICAgICAgICAgICB9OwogICAgICAg
ICAgICAgYnJlYWs7CiAgICAgICAgIGNhc2UgQm94U2lkZTo6TGVmdDoKLSAgICAgICAgICAgIHF1
YWQudW5jaGVja2VkQXBwZW5kKHsgeDEsIHkxICsgc3RkOjptYXg8ZmxvYXQ+KC1hZGphY2VudFdp
ZHRoMSwgMCkgfSk7Ci0gICAgICAgICAgICBxdWFkLnVuY2hlY2tlZEFwcGVuZCh7IHgxLCB5MiAt
IHN0ZDo6bWF4PGZsb2F0PigtYWRqYWNlbnRXaWR0aDIsIDApIH0pOwotICAgICAgICAgICAgcXVh
ZC51bmNoZWNrZWRBcHBlbmQoeyB4MiwgeTIgLSBzdGQ6Om1heDxmbG9hdD4oIGFkamFjZW50V2lk
dGgyLCAwKSB9KTsKLSAgICAgICAgICAgIHF1YWQudW5jaGVja2VkQXBwZW5kKHsgeDIsIHkxICsg
c3RkOjptYXg8ZmxvYXQ+KCBhZGphY2VudFdpZHRoMSwgMCkgfSk7CisgICAgICAgICAgICBxdWFk
ID0geworICAgICAgICAgICAgICAgIHsgeDEsIHkxICsgc3RkOjptYXg8ZmxvYXQ+KC1hZGphY2Vu
dFdpZHRoMSwgMCkgfSwKKyAgICAgICAgICAgICAgICB7IHgxLCB5MiAtIHN0ZDo6bWF4PGZsb2F0
PigtYWRqYWNlbnRXaWR0aDIsIDApIH0sCisgICAgICAgICAgICAgICAgeyB4MiwgeTIgLSBzdGQ6
Om1heDxmbG9hdD4oYWRqYWNlbnRXaWR0aDIsIDApIH0sCisgICAgICAgICAgICAgICAgeyB4Miwg
eTEgKyBzdGQ6Om1heDxmbG9hdD4oYWRqYWNlbnRXaWR0aDEsIDApIH0KKyAgICAgICAgICAgIH07
CiAgICAgICAgICAgICBicmVhazsKICAgICAgICAgY2FzZSBCb3hTaWRlOjpSaWdodDoKLSAgICAg
ICAgICAgIHF1YWQudW5jaGVja2VkQXBwZW5kKHsgeDEsIHkxICsgc3RkOjptYXg8ZmxvYXQ+KCBh
ZGphY2VudFdpZHRoMSwgMCkgfSk7Ci0gICAgICAgICAgICBxdWFkLnVuY2hlY2tlZEFwcGVuZCh7
IHgxLCB5MiAtIHN0ZDo6bWF4PGZsb2F0PiggYWRqYWNlbnRXaWR0aDIsIDApIH0pOwotICAgICAg
ICAgICAgcXVhZC51bmNoZWNrZWRBcHBlbmQoeyB4MiwgeTIgLSBzdGQ6Om1heDxmbG9hdD4oLWFk
amFjZW50V2lkdGgyLCAwKSB9KTsKLSAgICAgICAgICAgIHF1YWQudW5jaGVja2VkQXBwZW5kKHsg
eDIsIHkxICsgc3RkOjptYXg8ZmxvYXQ+KC1hZGphY2VudFdpZHRoMSwgMCkgfSk7CisgICAgICAg
ICAgICBxdWFkID0geworICAgICAgICAgICAgICAgIHsgeDEsIHkxICsgc3RkOjptYXg8ZmxvYXQ+
KGFkamFjZW50V2lkdGgxLCAwKSB9LAorICAgICAgICAgICAgICAgIHsgeDEsIHkyIC0gc3RkOjpt
YXg8ZmxvYXQ+KGFkamFjZW50V2lkdGgyLCAwKSB9LAorICAgICAgICAgICAgICAgIHsgeDIsIHky
IC0gc3RkOjptYXg8ZmxvYXQ+KC1hZGphY2VudFdpZHRoMiwgMCkgfSwKKyAgICAgICAgICAgICAg
ICB7IHgyLCB5MSArIHN0ZDo6bWF4PGZsb2F0PigtYWRqYWNlbnRXaWR0aDEsIDApIH0KKyAgICAg
ICAgICAgIH07CiAgICAgICAgICAgICBicmVhazsKICAgICAgICAgfQogCmRpZmYgLS1naXQgYS9T
b3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvUmVuZGVyR3JpZC5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9y
ZW5kZXJpbmcvUmVuZGVyR3JpZC5jcHAKaW5kZXggN2ZmYjYyMzc0OGYwMGY2NmZiN2JlODVmYjll
OTUzM2U1NzQxMWVmMS4uYmViMWM5M2ViYTgzNWIzYjU3YzkxNDZmMGUwNzY0OTYxYzAxN2Y1YiAx
MDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL1JlbmRlckdyaWQuY3BwCisrKyBi
L1NvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9SZW5kZXJHcmlkLmNwcApAQCAtOTIxLDEwICs5MjEs
MTAgQEAgVmVjdG9yPExheW91dFVuaXQ+IFJlbmRlckdyaWQ6OnRyYWNrU2l6ZXNGb3JDb21wdXRl
ZFN0eWxlKEdyaWRUcmFja1NpemluZ0RpcmVjdGkKICAgICBBU1NFUlQoIW1fZ3JpZC5uZWVkc0l0
ZW1zUGxhY2VtZW50KCkpOwogICAgIGJvb2wgaGFzQ29sbGFwc2VkVHJhY2tzID0gbV9ncmlkLmhh
c0F1dG9SZXBlYXRFbXB0eVRyYWNrcyhkaXJlY3Rpb24pOwogICAgIExheW91dFVuaXQgZ2FwID0g
IWhhc0NvbGxhcHNlZFRyYWNrcyA/IGdyaWRHYXAoZGlyZWN0aW9uKSA6IDBfbHU7Ci0gICAgdHJh
Y2tzLnJlc2VydmVDYXBhY2l0eShudW1Qb3NpdGlvbnMgLSAxKTsKKyAgICB0cmFja3MucmVzZXJ2
ZUluaXRpYWxDYXBhY2l0eShudW1Qb3NpdGlvbnMgLSAxKTsKICAgICBmb3IgKHNpemVfdCBpID0g
MDsgaSA8IG51bVBvc2l0aW9ucyAtIDI7ICsraSkKLSAgICAgICAgdHJhY2tzLmFwcGVuZChwb3Np
dGlvbnNbaSArIDFdIC0gcG9zaXRpb25zW2ldIC0gb2Zmc2V0QmV0d2VlblRyYWNrcyAtIGdhcCk7
Ci0gICAgdHJhY2tzLmFwcGVuZChwb3NpdGlvbnNbbnVtUG9zaXRpb25zIC0gMV0gLSBwb3NpdGlv
bnNbbnVtUG9zaXRpb25zIC0gMl0pOworICAgICAgICB0cmFja3MudW5jaGVja2VkQXBwZW5kKHBv
c2l0aW9uc1tpICsgMV0gLSBwb3NpdGlvbnNbaV0gLSBvZmZzZXRCZXR3ZWVuVHJhY2tzIC0gZ2Fw
KTsKKyAgICB0cmFja3MudW5jaGVja2VkQXBwZW5kKHBvc2l0aW9uc1tudW1Qb3NpdGlvbnMgLSAx
XSAtIHBvc2l0aW9uc1tudW1Qb3NpdGlvbnMgLSAyXSk7CiAKICAgICBpZiAoIWhhc0NvbGxhcHNl
ZFRyYWNrcykKICAgICAgICAgcmV0dXJuIHRyYWNrczsKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJD
b3JlL3N0eWxlL0NsYXNzQ2hhbmdlSW52YWxpZGF0aW9uLmNwcCBiL1NvdXJjZS9XZWJDb3JlL3N0
eWxlL0NsYXNzQ2hhbmdlSW52YWxpZGF0aW9uLmNwcAppbmRleCAwMTgwMjNlNTY4MDEwNjY1ZGUy
M2MxZDIzZTQwZDUzNGQwMjY1NDI4Li5mNjc1MjA5YmE5YzMxNzY3MzM3ZDM0ZDI3ZTMzNmE5OThi
MTE4ZDdiIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9zdHlsZS9DbGFzc0NoYW5nZUludmFs
aWRhdGlvbi5jcHAKKysrIGIvU291cmNlL1dlYkNvcmUvc3R5bGUvQ2xhc3NDaGFuZ2VJbnZhbGlk
YXRpb24uY3BwCkBAIC00Niw3ICs0Niw3IEBAIHVzaW5nIENsYXNzQ2hhbmdlVmVjdG9yID0gVmVj
dG9yPENsYXNzQ2hhbmdlLCA0PjsKIHN0YXRpYyBDbGFzc0NoYW5nZVZlY3RvciBjb2xsZWN0Q2xh
c3Nlcyhjb25zdCBTcGFjZVNwbGl0U3RyaW5nJiBjbGFzc2VzLCBDbGFzc0NoYW5nZVR5cGUgY2hh
bmdlVHlwZSkKIHsKICAgICBDbGFzc0NoYW5nZVZlY3RvciByZXN1bHQ7Ci0gICAgcmVzdWx0LnJl
c2VydmVDYXBhY2l0eShjbGFzc2VzLnNpemUoKSk7CisgICAgcmVzdWx0LnJlc2VydmVJbml0aWFs
Q2FwYWNpdHkoY2xhc3Nlcy5zaXplKCkpOwogICAgIGZvciAodW5zaWduZWQgaSA9IDA7IGkgPCBj
bGFzc2VzLnNpemUoKTsgKytpKQogICAgICAgICByZXN1bHQudW5jaGVja2VkQXBwZW5kKHsgY2xh
c3Nlc1tpXS5pbXBsKCksIGNoYW5nZVR5cGUgfSk7CiAgICAgcmV0dXJuIHJlc3VsdDsKZGlmZiAt
LWdpdCBhL1NvdXJjZS9XZWJDb3JlL3N0eWxlL1N0eWxlQnVpbGRlckNvbnZlcnRlci5oIGIvU291
cmNlL1dlYkNvcmUvc3R5bGUvU3R5bGVCdWlsZGVyQ29udmVydGVyLmgKaW5kZXggMTgyMzcyZjA5
YjgwZjIxOGM5ZDE5NmNjNDJhNzU5MGRmMzI3YmMzNC4uMmY4MzRkZjY3ZDgwY2IxM2RkNGM5MTU1
MWJhZDEyZGIxYjIzYTI0OSAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvc3R5bGUvU3R5bGVC
dWlsZGVyQ29udmVydGVyLmgKKysrIGIvU291cmNlL1dlYkNvcmUvc3R5bGUvU3R5bGVCdWlsZGVy
Q29udmVydGVyLmgKQEAgLTM1NSwxMiArMzU1LDEyIEBAIGlubGluZSBMZW5ndGggQnVpbGRlckNv
bnZlcnRlcjo6Y29udmVydFRvMTAwUGVyY2VudE1pbnVzTGVuZ3RoKGNvbnN0IExlbmd0aCYgbGVu
CiAgICAgICAgIHJldHVybiBMZW5ndGgoMTAwIC0gbGVuZ3RoLnZhbHVlKCksIExlbmd0aFR5cGU6
OlBlcmNlbnQpOwogICAgIAogICAgIC8vIFR1cm4gdGhpcyBpbnRvIGEgY2FsYyBleHByZXNzaW9u
OiBjYWxjKDEwMCUgLSBsZW5ndGgpCi0gICAgVmVjdG9yPHN0ZDo6dW5pcXVlX3B0cjxDYWxjRXhw
cmVzc2lvbk5vZGU+PiBsZW5ndGhzOwotICAgIGxlbmd0aHMucmVzZXJ2ZUluaXRpYWxDYXBhY2l0
eSgyKTsKLSAgICBsZW5ndGhzLnVuY2hlY2tlZEFwcGVuZChtYWtlVW5pcXVlPENhbGNFeHByZXNz
aW9uTGVuZ3RoPihMZW5ndGgoMTAwLCBMZW5ndGhUeXBlOjpQZXJjZW50KSkpOwotICAgIGxlbmd0
aHMudW5jaGVja2VkQXBwZW5kKG1ha2VVbmlxdWU8Q2FsY0V4cHJlc3Npb25MZW5ndGg+KGxlbmd0
aCkpOwotICAgIGF1dG8gb3AgPSBtYWtlVW5pcXVlPENhbGNFeHByZXNzaW9uT3BlcmF0aW9uPihX
VEZNb3ZlKGxlbmd0aHMpLCBDYWxjT3BlcmF0b3I6OlN1YnRyYWN0KTsKLSAgICByZXR1cm4gTGVu
Z3RoKENhbGN1bGF0aW9uVmFsdWU6OmNyZWF0ZShXVEZNb3ZlKG9wKSwgVmFsdWVSYW5nZTo6QWxs
KSk7CisgICAgYXV0byBsZW5ndGhzID0gVmVjdG9yPHN0ZDo6dW5pcXVlX3B0cjxDYWxjRXhwcmVz
c2lvbk5vZGU+Pjo6ZnJvbSgKKyAgICAgICAgbWFrZVVuaXF1ZTxDYWxjRXhwcmVzc2lvbkxlbmd0
aD4oTGVuZ3RoKDEwMCwgTGVuZ3RoVHlwZTo6UGVyY2VudCkpLAorICAgICAgICBtYWtlVW5pcXVl
PENhbGNFeHByZXNzaW9uTGVuZ3RoPihsZW5ndGgpCisgICAgKTsKKyAgICBhdXRvIG9wZXJhdGlv
biA9IG1ha2VVbmlxdWU8Q2FsY0V4cHJlc3Npb25PcGVyYXRpb24+KFdURk1vdmUobGVuZ3Rocyks
IENhbGNPcGVyYXRvcjo6U3VidHJhY3QpOworICAgIHJldHVybiBMZW5ndGgoQ2FsY3VsYXRpb25W
YWx1ZTo6Y3JlYXRlKFdURk1vdmUob3BlcmF0aW9uKSwgVmFsdWVSYW5nZTo6QWxsKSk7CiB9CiAK
IGlubGluZSBMZW5ndGggQnVpbGRlckNvbnZlcnRlcjo6Y29udmVydFBvc2l0aW9uQ29tcG9uZW50
WChCdWlsZGVyU3RhdGUmIGJ1aWxkZXJTdGF0ZSwgY29uc3QgQ1NTVmFsdWUmIHZhbHVlKQpkaWZm
IC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvdGVzdGluZy9Nb2NrQ0RNRmFjdG9yeS5jcHAgYi9Tb3Vy
Y2UvV2ViQ29yZS90ZXN0aW5nL01vY2tDRE1GYWN0b3J5LmNwcAppbmRleCAyMDUyNzk1NTI4MzZl
MDQ0ZGQ3YzJhOGVhMzIxNjgyZDkxNzkzOGMwLi5iMjE1ZTBkMGE4MTRlNWRhODcyZWEwNDM3MzIz
OTk2MTJiOGE2YTNiIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS90ZXN0aW5nL01vY2tDRE1G
YWN0b3J5LmNwcAorKysgYi9Tb3VyY2UvV2ViQ29yZS90ZXN0aW5nL01vY2tDRE1GYWN0b3J5LmNw
cApAQCAtMzQzLDEyICszNDMsOSBAQCB2b2lkIE1vY2tDRE1JbnN0YW5jZVNlc3Npb246OnVwZGF0
ZUxpY2Vuc2UoY29uc3QgU3RyaW5nJiBzZXNzaW9uSUQsIExpY2Vuc2VUeXBlLAogICAgIGlmIChy
ZXNwb25zZVZlY3Rvci5jb250YWlucyhTdHJpbmcoImtleXMtY2hhbmdlZCJfcykpKSB7CiAgICAg
ICAgIGNvbnN0IGF1dG8qIGtleXMgPSBmYWN0b3J5LT5rZXlzRm9yU2Vzc2lvbldpdGhJRChzZXNz
aW9uSUQpOwogICAgICAgICBpZiAoa2V5cykgewotICAgICAgICAgICAgS2V5U3RhdHVzVmVjdG9y
IGtleVN0YXR1c1ZlY3RvcjsKLSAgICAgICAgICAgIGtleVN0YXR1c1ZlY3Rvci5yZXNlcnZlSW5p
dGlhbENhcGFjaXR5KGtleXMtPnNpemUoKSk7Ci0gICAgICAgICAgICBmb3IgKGF1dG8mIGtleSA6
ICprZXlzKQotICAgICAgICAgICAgICAgIGtleVN0YXR1c1ZlY3Rvci51bmNoZWNrZWRBcHBlbmQo
eyBrZXkuY29weVJlZigpLCBLZXlTdGF0dXM6OlVzYWJsZSB9KTsKLQotICAgICAgICAgICAgY2hh
bmdlZEtleXMgPSBXVEZNb3ZlKGtleVN0YXR1c1ZlY3Rvcik7CisgICAgICAgICAgICBjaGFuZ2Vk
S2V5cyA9IGtleXMtPm1hcChbXShhdXRvJiBrZXkpIHsKKyAgICAgICAgICAgICAgICByZXR1cm4g
c3RkOjptYWtlX3BhaXIoa2V5LmNvcHlSZWYoKSwgS2V5U3RhdHVzOjpVc2FibGUpOworICAgICAg
ICAgICAgfSk7CiAgICAgICAgIH0KICAgICB9CiAKQEAgLTM5NSwxMCArMzkyLDkgQEAgdm9pZCBN
b2NrQ0RNSW5zdGFuY2VTZXNzaW9uOjpyZW1vdmVTZXNzaW9uRGF0YShjb25zdCBTdHJpbmcmIGlk
LCBMaWNlbnNlVHlwZSwgUmUKICAgICB9CiAKICAgICBhdXRvIGtleXMgPSBmYWN0b3J5LT5yZW1v
dmVLZXlzRnJvbVNlc3Npb25XaXRoSUQoaWQpOwotICAgIEtleVN0YXR1c1ZlY3RvciBrZXlTdGF0
dXNWZWN0b3I7Ci0gICAga2V5U3RhdHVzVmVjdG9yLnJlc2VydmVJbml0aWFsQ2FwYWNpdHkoa2V5
cy5zaXplKCkpOwotICAgIGZvciAoYXV0byYga2V5IDoga2V5cykKLSAgICAgICAga2V5U3RhdHVz
VmVjdG9yLnVuY2hlY2tlZEFwcGVuZCh7IFdURk1vdmUoa2V5KSwgS2V5U3RhdHVzOjpSZWxlYXNl
ZCB9KTsKKyAgICBhdXRvIGtleVN0YXR1c1ZlY3RvciA9IFdURjo6bWFwKFdURk1vdmUoa2V5cyks
IFtdKGF1dG8mJiBrZXkpIHsKKyAgICAgICAgcmV0dXJuIHN0ZDo6bWFrZV9wYWlyKFdURk1vdmUo
a2V5KSwgS2V5U3RhdHVzOjpSZWxlYXNlZCk7CisgICAgfSk7CiAKICAgICBDU3RyaW5nIG1lc3Nh
Z2UgeyAicmVtb3ZlLW1lc3NhZ2UiIH07CiAgICAgY2FsbGJhY2soV1RGTW92ZShrZXlTdGF0dXNW
ZWN0b3IpLCBTaGFyZWRCdWZmZXI6OmNyZWF0ZShtZXNzYWdlLmRhdGEoKSwgbWVzc2FnZS5sZW5n
dGgoKSksIFN1Y2Nlc3NWYWx1ZTo6U3VjY2VlZGVkKTsKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJD
b3JlL3dvcmtlcnMvc2VydmljZS9zZXJ2ZXIvU1dTZXJ2ZXIuY3BwIGIvU291cmNlL1dlYkNvcmUv
d29ya2Vycy9zZXJ2aWNlL3NlcnZlci9TV1NlcnZlci5jcHAKaW5kZXggNjU0ZjFhYzcwMWIzZjU4
YTM3ZGFjMTQ3MWRiOWQ4NTJkYjJkZGJiZS4uNDg1YTgzMDg1NWNkNGJhYzAzZWQ4M2U2NjQ3ODhi
MjgxNjRmNDBkMSAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvd29ya2Vycy9zZXJ2aWNlL3Nl
cnZlci9TV1NlcnZlci5jcHAKKysrIGIvU291cmNlL1dlYkNvcmUvd29ya2Vycy9zZXJ2aWNlL3Nl
cnZlci9TV1NlcnZlci5jcHAKQEAgLTI1MiwxMSArMjUyLDkgQEAgVmVjdG9yPFNlcnZpY2VXb3Jr
ZXJSZWdpc3RyYXRpb25EYXRhPiBTV1NlcnZlcjo6Z2V0UmVnaXN0cmF0aW9ucyhjb25zdCBTZWN1
cml0eU8KICAgICBzdGQ6OnNvcnQobWF0Y2hpbmdSZWdpc3RyYXRpb25zLmJlZ2luKCksIG1hdGNo
aW5nUmVnaXN0cmF0aW9ucy5lbmQoKSwgW10oYXV0byYgYSwgYXV0byYgYikgewogICAgICAgICBy
ZXR1cm4gYS0+Y3JlYXRpb25UaW1lKCkgPCBiLT5jcmVhdGlvblRpbWUoKTsKICAgICB9KTsKLSAg
ICBWZWN0b3I8U2VydmljZVdvcmtlclJlZ2lzdHJhdGlvbkRhdGE+IG1hdGNoaW5nUmVnaXN0cmF0
aW9uRGF0YXM7Ci0gICAgbWF0Y2hpbmdSZWdpc3RyYXRpb25EYXRhcy5yZXNlcnZlSW5pdGlhbENh
cGFjaXR5KG1hdGNoaW5nUmVnaXN0cmF0aW9ucy5zaXplKCkpOwotICAgIGZvciAoYXV0byogcmVn
aXN0cmF0aW9uIDogbWF0Y2hpbmdSZWdpc3RyYXRpb25zKQotICAgICAgICBtYXRjaGluZ1JlZ2lz
dHJhdGlvbkRhdGFzLnVuY2hlY2tlZEFwcGVuZChyZWdpc3RyYXRpb24tPmRhdGEoKSk7Ci0gICAg
cmV0dXJuIG1hdGNoaW5nUmVnaXN0cmF0aW9uRGF0YXM7CisgICAgcmV0dXJuIG1hdGNoaW5nUmVn
aXN0cmF0aW9ucy5tYXAoW10oYXV0byYgcmVnaXN0cmF0aW9uKSB7CisgICAgICAgIHJldHVybiBy
ZWdpc3RyYXRpb24tPmRhdGEoKTsKKyAgICB9KTsKIH0KIAogdm9pZCBTV1NlcnZlcjo6Y2xlYXJB
bGwoQ29tcGxldGlvbkhhbmRsZXI8dm9pZCgpPiYmIGNvbXBsZXRpb25IYW5kbGVyKQpkaWZmIC0t
Z2l0IGEvU291cmNlL1dlYktpdC9OZXR3b3JrUHJvY2Vzcy9XZWJTdG9yYWdlL0xvY2FsU3RvcmFn
ZURhdGFiYXNlVHJhY2tlci5jcHAgYi9Tb3VyY2UvV2ViS2l0L05ldHdvcmtQcm9jZXNzL1dlYlN0
b3JhZ2UvTG9jYWxTdG9yYWdlRGF0YWJhc2VUcmFja2VyLmNwcAppbmRleCBhYTMwYTZhMDRmYjAw
MjlhOTU3NmY3N2M4YWQ4OGVkMzZiNzc2NzFlLi4zYWFhM2M0ODBlNWY2YTk1MzBkZjhkOGNjZWJh
MmU1NzllMDAyODEwIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViS2l0L05ldHdvcmtQcm9jZXNzL1dl
YlN0b3JhZ2UvTG9jYWxTdG9yYWdlRGF0YWJhc2VUcmFja2VyLmNwcAorKysgYi9Tb3VyY2UvV2Vi
S2l0L05ldHdvcmtQcm9jZXNzL1dlYlN0b3JhZ2UvTG9jYWxTdG9yYWdlRGF0YWJhc2VUcmFja2Vy
LmNwcApAQCAtMTE5LDIxICsxMTksMTQgQEAgVmVjdG9yPFNlY3VyaXR5T3JpZ2luRGF0YT4gTG9j
YWxTdG9yYWdlRGF0YWJhc2VUcmFja2VyOjpvcmlnaW5zKCkgY29uc3QKIAogVmVjdG9yPExvY2Fs
U3RvcmFnZURhdGFiYXNlVHJhY2tlcjo6T3JpZ2luRGV0YWlscz4gTG9jYWxTdG9yYWdlRGF0YWJh
c2VUcmFja2VyOjpvcmlnaW5EZXRhaWxzQ3Jvc3NUaHJlYWRDb3B5KCkKIHsKLSAgICBWZWN0b3I8
T3JpZ2luRGV0YWlscz4gcmVzdWx0OwotICAgIGF1dG8gZGF0YWJhc2VPcmlnaW5zID0gb3JpZ2lu
cygpOwotICAgIHJlc3VsdC5yZXNlcnZlSW5pdGlhbENhcGFjaXR5KGRhdGFiYXNlT3JpZ2lucy5z
aXplKCkpOwotCi0gICAgZm9yIChjb25zdCBhdXRvJiBvcmlnaW4gOiBkYXRhYmFzZU9yaWdpbnMp
IHsKLSAgICAgICAgU3RyaW5nIHBhdGggPSBkYXRhYmFzZVBhdGgob3JpZ2luKTsKLQotICAgICAg
ICBPcmlnaW5EZXRhaWxzIGRldGFpbHM7Ci0gICAgICAgIGRldGFpbHMub3JpZ2luSWRlbnRpZmll
ciA9IGNyb3NzVGhyZWFkQ29weShvcmlnaW4uZGF0YWJhc2VJZGVudGlmaWVyKCkpOwotICAgICAg
ICBkZXRhaWxzLmNyZWF0aW9uVGltZSA9IFNRTGl0ZUZpbGVTeXN0ZW06OmRhdGFiYXNlQ3JlYXRp
b25UaW1lKHBhdGgpOwotICAgICAgICBkZXRhaWxzLm1vZGlmaWNhdGlvblRpbWUgPSBTUUxpdGVG
aWxlU3lzdGVtOjpkYXRhYmFzZU1vZGlmaWNhdGlvblRpbWUocGF0aCk7Ci0gICAgICAgIHJlc3Vs
dC51bmNoZWNrZWRBcHBlbmQoV1RGTW92ZShkZXRhaWxzKSk7Ci0gICAgfQotCi0gICAgcmV0dXJu
IHJlc3VsdDsKKyAgICByZXR1cm4gb3JpZ2lucygpLm1hcChbdGhpc10oYXV0byYgb3JpZ2luKSB7
CisgICAgICAgIGF1dG8gcGF0aCA9IGRhdGFiYXNlUGF0aChvcmlnaW4pOworICAgICAgICByZXR1
cm4gT3JpZ2luRGV0YWlscyB7CisgICAgICAgICAgICBjcm9zc1RocmVhZENvcHkob3JpZ2luLmRh
dGFiYXNlSWRlbnRpZmllcigpKSwKKyAgICAgICAgICAgIFNRTGl0ZUZpbGVTeXN0ZW06OmRhdGFi
YXNlQ3JlYXRpb25UaW1lKHBhdGgpLAorICAgICAgICAgICAgU1FMaXRlRmlsZVN5c3RlbTo6ZGF0
YWJhc2VNb2RpZmljYXRpb25UaW1lKHBhdGgpCisgICAgICAgIH07CisgICAgfSk7CiB9CiAKIFN0
cmluZyBMb2NhbFN0b3JhZ2VEYXRhYmFzZVRyYWNrZXI6OmRhdGFiYXNlUGF0aChjb25zdCBTdHJp
bmcmIGZpbGVuYW1lKSBjb25zdApkaWZmIC0tZ2l0IGEvU291cmNlL1dlYktpdC9OZXR3b3JrUHJv
Y2Vzcy9jYWNoZS9DYWNoZVN0b3JhZ2VFbmdpbmVDYWNoZXMuY3BwIGIvU291cmNlL1dlYktpdC9O
ZXR3b3JrUHJvY2Vzcy9jYWNoZS9DYWNoZVN0b3JhZ2VFbmdpbmVDYWNoZXMuY3BwCmluZGV4IGMz
MGMzYmU3YzVjNTUzYmYyMzI4ZDk1MWI3NzQ0NDQxM2IzMmQ2YTUuLmQ3NWM1ODRkM2YwYTBlZGQw
YWUyNzUzYjJlYzIwNmZmODRiMzBmMmYgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJLaXQvTmV0d29y
a1Byb2Nlc3MvY2FjaGUvQ2FjaGVTdG9yYWdlRW5naW5lQ2FjaGVzLmNwcAorKysgYi9Tb3VyY2Uv
V2ViS2l0L05ldHdvcmtQcm9jZXNzL2NhY2hlL0NhY2hlU3RvcmFnZUVuZ2luZUNhY2hlcy5jcHAK
QEAgLTY1OCw5ICs2NTgsOSBAQCB2b2lkIENhY2hlczo6Y2FjaGVJbmZvcyh1aW50NjRfdCB1cGRh
dGVDb3VudGVyLCBDYWNoZUluZm9zQ2FsbGJhY2smJiBjYWxsYmFjaykKIAogICAgIFZlY3RvcjxD
YWNoZUluZm8+IGNhY2hlSW5mb3M7CiAgICAgaWYgKGlzRGlydHkodXBkYXRlQ291bnRlcikpIHsK
LSAgICAgICAgY2FjaGVJbmZvcy5yZXNlcnZlSW5pdGlhbENhcGFjaXR5KG1fY2FjaGVzLnNpemUo
KSk7Ci0gICAgICAgIGZvciAoYXV0byYgY2FjaGUgOiBtX2NhY2hlcykKLSAgICAgICAgICAgIGNh
Y2hlSW5mb3MudW5jaGVja2VkQXBwZW5kKENhY2hlSW5mbyB7IGNhY2hlLmlkZW50aWZpZXIoKSwg
Y2FjaGUubmFtZSgpIH0pOworICAgICAgICBjYWNoZUluZm9zID0gbV9jYWNoZXMubWFwKFtdKGF1
dG8mIGNhY2hlKSB7CisgICAgICAgICAgICByZXR1cm4gQ2FjaGVJbmZvIHsgY2FjaGUuaWRlbnRp
ZmllcigpLCBjYWNoZS5uYW1lKCkgfTsKKyAgICAgICAgfSk7CiAgICAgfQogICAgIGNhbGxiYWNr
KENhY2hlSW5mb3MgeyBXVEZNb3ZlKGNhY2hlSW5mb3MpLCBtX3VwZGF0ZUNvdW50ZXIgfSk7CiB9
CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViS2l0L1NoYXJlZC9BUEkvQVBJQXJyYXkuY3BwIGIvU291
cmNlL1dlYktpdC9TaGFyZWQvQVBJL0FQSUFycmF5LmNwcAppbmRleCA5OGI4NzMxMTE0NDczODNj
Yzc0YTIwZmQxOThmMDVmOGE2OWNlZWNjLi42ZjAwODBhNWE0YzliMjk0ZGZlZjFjZDMwNGNmYTZm
N2RiYWMxZDI0IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViS2l0L1NoYXJlZC9BUEkvQVBJQXJyYXku
Y3BwCisrKyBiL1NvdXJjZS9XZWJLaXQvU2hhcmVkL0FQSS9BUElBcnJheS5jcHAKQEAgLTQyLDEy
ICs0Miw5IEBAIFJlZjxBcnJheT4gQXJyYXk6OmNyZWF0ZShWZWN0b3I8UmVmUHRyPE9iamVjdD4+
JiYgZWxlbWVudHMpCiAKIFJlZjxBcnJheT4gQXJyYXk6OmNyZWF0ZVN0cmluZ0FycmF5KGNvbnN0
IFZlY3RvcjxXVEY6OlN0cmluZz4mIHN0cmluZ3MpCiB7Ci0gICAgVmVjdG9yPFJlZlB0cjxPYmpl
Y3Q+PiBlbGVtZW50czsKLSAgICBlbGVtZW50cy5yZXNlcnZlSW5pdGlhbENhcGFjaXR5KHN0cmlu
Z3Muc2l6ZSgpKTsKLQotICAgIGZvciAoY29uc3QgYXV0byYgc3RyaW5nIDogc3RyaW5ncykKLSAg
ICAgICAgZWxlbWVudHMudW5jaGVja2VkQXBwZW5kKEFQSTo6U3RyaW5nOjpjcmVhdGUoc3RyaW5n
KSk7Ci0KKyAgICBhdXRvIGVsZW1lbnRzID0gc3RyaW5ncy5tYXAoW10oYXV0byYgc3RyaW5nKSAt
PiBSZWZQdHI8T2JqZWN0PiB7CisgICAgICAgIHJldHVybiBBUEk6OlN0cmluZzo6Y3JlYXRlKHN0
cmluZyk7CisgICAgfSk7CiAgICAgcmV0dXJuIGNyZWF0ZShXVEZNb3ZlKGVsZW1lbnRzKSk7CiB9
CiAKQEAgLTcxLDEwICs2OCw3IEBAIFJlZjxBUEk6OkFycmF5PiBBcnJheTo6Y29weSgpCiAgICAg
aWYgKCFzaXplKQogICAgICAgICByZXR1cm4gQXJyYXk6OmNyZWF0ZSgpOwogCi0gICAgVmVjdG9y
PFJlZlB0cjxPYmplY3Q+PiBlbGVtZW50czsKLSAgICBlbGVtZW50cy5yZXNlcnZlSW5pdGlhbENh
cGFjaXR5KHNpemUpOwotICAgIGZvciAoY29uc3QgYXV0byYgZW50cnkgOiB0aGlzLT5lbGVtZW50
cygpKQotICAgICAgICBlbGVtZW50cy51bmNoZWNrZWRBcHBlbmQoZW50cnkpOworICAgIFZlY3Rv
cjxSZWZQdHI8T2JqZWN0Pj4gZWxlbWVudHMgPSB0aGlzLT5lbGVtZW50cygpOwogICAgIHJldHVy
biBBcnJheTo6Y3JlYXRlKFdURk1vdmUoZWxlbWVudHMpKTsKIH0KIApkaWZmIC0tZ2l0IGEvU291
cmNlL1dlYktpdC9TaGFyZWQvQVBJL0FQSURpY3Rpb25hcnkuY3BwIGIvU291cmNlL1dlYktpdC9T
aGFyZWQvQVBJL0FQSURpY3Rpb25hcnkuY3BwCmluZGV4IDRmYjk5NTJmZDY5M2EyZjE2OTU5ZmFl
M2VhNTcxNDVhYzM5OTFjNDAuLmJkN2M4NjM0MmM1Nzk2MTEyMWM1Yzk1NjEyNDBjZjZmNGJlMDNk
MzMgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJLaXQvU2hhcmVkL0FQSS9BUElEaWN0aW9uYXJ5LmNw
cAorKysgYi9Tb3VyY2UvV2ViS2l0L1NoYXJlZC9BUEkvQVBJRGljdGlvbmFyeS5jcHAKQEAgLTU1
LDEyICs1NSw5IEBAIFJlZjxBcnJheT4gRGljdGlvbmFyeTo6a2V5cygpIGNvbnN0CiAgICAgaWYg
KG1fbWFwLmlzRW1wdHkoKSkKICAgICAgICAgcmV0dXJuIEFQSTo6QXJyYXk6OmNyZWF0ZSgpOwog
Ci0gICAgVmVjdG9yPFJlZlB0cjxBUEk6Ok9iamVjdD4+IGtleXM7Ci0gICAga2V5cy5yZXNlcnZl
SW5pdGlhbENhcGFjaXR5KG1fbWFwLnNpemUoKSk7Ci0KLSAgICBmb3IgKGNvbnN0IGF1dG8mIGtl
eSA6IG1fbWFwLmtleXMoKSkKLSAgICAgICAga2V5cy51bmNoZWNrZWRBcHBlbmQoQVBJOjpTdHJp
bmc6OmNyZWF0ZShrZXkpKTsKLQorICAgIGF1dG8ga2V5cyA9IFdURjo6bWFwKG1fbWFwLCBbXShh
dXRvJiBlbnRyeSkgLT4gUmVmUHRyPEFQSTo6T2JqZWN0PiB7CisgICAgICAgIHJldHVybiBBUEk6
OlN0cmluZzo6Y3JlYXRlKGVudHJ5LmtleSk7CisgICAgfSk7CiAgICAgcmV0dXJuIEFQSTo6QXJy
YXk6OmNyZWF0ZShXVEZNb3ZlKGtleXMpKTsKIH0KIApkaWZmIC0tZ2l0IGEvU291cmNlL1dlYktp
dC9TaGFyZWQvVXNlckRhdGEuY3BwIGIvU291cmNlL1dlYktpdC9TaGFyZWQvVXNlckRhdGEuY3Bw
CmluZGV4IDUzMmYwY2QzYWYxZDNiNDUyMWNjYWM5YmQxMzQwNzNkZWYyZmYzZWUuLmY4YjdlZGNm
NDQ5MTczMTUwYjBmODUwMTM2MDM5ZDA5ZWM4M2ZjZjMgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJL
aXQvU2hhcmVkL1VzZXJEYXRhLmNwcAorKysgYi9Tb3VyY2UvV2ViS2l0L1NoYXJlZC9Vc2VyRGF0
YS5jcHAKQEAgLTEwMSwxNSArMTAxLDExIEBAIHN0YXRpYyBSZWZQdHI8QVBJOjpPYmplY3Q+IHRy
YW5zZm9ybUdyYXBoKEFQSTo6T2JqZWN0JiBvYmplY3QsIGNvbnN0IFVzZXJEYXRhOjpUCiAgICAg
aWYgKG9iamVjdC50eXBlKCkgPT0gQVBJOjpPYmplY3Q6OlR5cGU6OkFycmF5KSB7CiAgICAgICAg
IGF1dG8mIGFycmF5ID0gc3RhdGljX2Nhc3Q8QVBJOjpBcnJheSY+KG9iamVjdCk7CiAKLSAgICAg
ICAgVmVjdG9yPFJlZlB0cjxBUEk6Ok9iamVjdD4+IGVsZW1lbnRzOwotICAgICAgICBlbGVtZW50
cy5yZXNlcnZlSW5pdGlhbENhcGFjaXR5KGFycmF5LmVsZW1lbnRzKCkuc2l6ZSgpKTsKLSAgICAg
ICAgZm9yIChjb25zdCBhdXRvJiBlbGVtZW50IDogYXJyYXkuZWxlbWVudHMoKSkgeworICAgICAg
ICBhdXRvIGVsZW1lbnRzID0gYXJyYXkuZWxlbWVudHMoKS5tYXAoWyZdKGF1dG8mIGVsZW1lbnQp
IC0+IFJlZlB0cjxBUEk6Ok9iamVjdD4gewogICAgICAgICAgICAgaWYgKCFlbGVtZW50KQotICAg
ICAgICAgICAgICAgIGVsZW1lbnRzLnVuY2hlY2tlZEFwcGVuZChudWxscHRyKTsKLSAgICAgICAg
ICAgIGVsc2UKLSAgICAgICAgICAgICAgICBlbGVtZW50cy51bmNoZWNrZWRBcHBlbmQodHJhbnNm
b3JtR3JhcGgoKmVsZW1lbnQsIHRyYW5zZm9ybWVyKSk7Ci0gICAgICAgIH0KLQorICAgICAgICAg
ICAgICAgIHJldHVybiBudWxscHRyOworICAgICAgICAgICAgcmV0dXJuIHRyYW5zZm9ybUdyYXBo
KCplbGVtZW50LCB0cmFuc2Zvcm1lcik7CisgICAgICAgIH0pOwogICAgICAgICByZXR1cm4gQVBJ
OjpBcnJheTo6Y3JlYXRlKFdURk1vdmUoZWxlbWVudHMpKTsKICAgICB9CiAKZGlmZiAtLWdpdCBh
L1NvdXJjZS9XZWJLaXQvU2hhcmVkL1dlYkNvbnRleHRNZW51SXRlbS5jcHAgYi9Tb3VyY2UvV2Vi
S2l0L1NoYXJlZC9XZWJDb250ZXh0TWVudUl0ZW0uY3BwCmluZGV4IGQzMDc4YjU5YWEzZWFjZTk3
M2RjZDkyZTc1ZDUxMTk4ZGEzNWM0ZTAuLmQyODEzODBhZTI1ZDliM2Y1MjkwZWVlZjAxZmUzN2Zl
YzdhYjIzYjMgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJLaXQvU2hhcmVkL1dlYkNvbnRleHRNZW51
SXRlbS5jcHAKKysrIGIvU291cmNlL1dlYktpdC9TaGFyZWQvV2ViQ29udGV4dE1lbnVJdGVtLmNw
cApAQCAtNDQsMTMgKzQ0LDEyIEBAIFJlZjxXZWJDb250ZXh0TWVudUl0ZW0+IFdlYkNvbnRleHRN
ZW51SXRlbTo6Y3JlYXRlKGNvbnN0IFN0cmluZyYgdGl0bGUsIGJvb2wgZW5hCiAgICAgc2l6ZV90
IHNpemUgPSBzdWJtZW51SXRlbXMtPnNpemUoKTsKIAogICAgIFZlY3RvcjxXZWJDb250ZXh0TWVu
dUl0ZW1EYXRhPiBzdWJtZW51OwotICAgIHN1Ym1lbnUucmVzZXJ2ZUNhcGFjaXR5KHNpemUpOwot
CisgICAgc3VibWVudS5yZXNlcnZlSW5pdGlhbENhcGFjaXR5KHNpemUpOwogICAgIGZvciAoc2l6
ZV90IGkgPSAwOyBpIDwgc2l6ZTsgKytpKSB7Ci0gICAgICAgIFdlYkNvbnRleHRNZW51SXRlbSog
aXRlbSA9IHN1Ym1lbnVJdGVtcy0+YXQ8V2ViQ29udGV4dE1lbnVJdGVtPihpKTsKLSAgICAgICAg
aWYgKGl0ZW0pCi0gICAgICAgICAgICBzdWJtZW51LmFwcGVuZChpdGVtLT5kYXRhKCkpOworICAg
ICAgICBpZiAoYXV0byogaXRlbSA9IHN1Ym1lbnVJdGVtcy0+YXQ8V2ViQ29udGV4dE1lbnVJdGVt
PihpKSkKKyAgICAgICAgICAgIHN1Ym1lbnUudW5jaGVja2VkQXBwZW5kKGl0ZW0tPmRhdGEoKSk7
CiAgICAgfQorICAgIHN1Ym1lbnUuc2hyaW5rVG9GaXQoKTsKIAogICAgIHJldHVybiBhZG9wdFJl
ZigqbmV3IFdlYkNvbnRleHRNZW51SXRlbShXZWJDb250ZXh0TWVudUl0ZW1EYXRhKFdlYkNvcmU6
OkNvbnRleHRNZW51SXRlbVRhZ05vQWN0aW9uLCB0aXRsZSwgZW5hYmxlZCwgc3VibWVudSkpKS5s
ZWFrUmVmKCk7CiB9CkBAIC02NiwxMiArNjUsOSBAQCBSZWY8QVBJOjpBcnJheT4gV2ViQ29udGV4
dE1lbnVJdGVtOjpzdWJtZW51SXRlbXNBc0FQSUFycmF5KCkgY29uc3QKICAgICBpZiAobV93ZWJD
b250ZXh0TWVudUl0ZW1EYXRhLnR5cGUoKSAhPSBXZWJDb3JlOjpTdWJtZW51VHlwZSkKICAgICAg
ICAgcmV0dXJuIEFQSTo6QXJyYXk6OmNyZWF0ZSgpOwogCi0gICAgVmVjdG9yPFJlZlB0cjxBUEk6
Ok9iamVjdD4+IHN1Ym1lbnVJdGVtczsKLSAgICBzdWJtZW51SXRlbXMucmVzZXJ2ZUluaXRpYWxD
YXBhY2l0eShtX3dlYkNvbnRleHRNZW51SXRlbURhdGEuc3VibWVudSgpLnNpemUoKSk7Ci0KLSAg
ICBmb3IgKGNvbnN0IGF1dG8mIGl0ZW0gOiBtX3dlYkNvbnRleHRNZW51SXRlbURhdGEuc3VibWVu
dSgpKQotICAgICAgICBzdWJtZW51SXRlbXMudW5jaGVja2VkQXBwZW5kKFdlYkNvbnRleHRNZW51
SXRlbTo6Y3JlYXRlKGl0ZW0pKTsKLQorICAgIGF1dG8gc3VibWVudUl0ZW1zID0gbV93ZWJDb250
ZXh0TWVudUl0ZW1EYXRhLnN1Ym1lbnUoKS5tYXAoW10oYXV0byYgaXRlbSkgLT4gUmVmUHRyPEFQ
STo6T2JqZWN0PiB7CisgICAgICAgIHJldHVybiBXZWJDb250ZXh0TWVudUl0ZW06OmNyZWF0ZShp
dGVtKTsKKyAgICB9KTsKICAgICByZXR1cm4gQVBJOjpBcnJheTo6Y3JlYXRlKFdURk1vdmUoc3Vi
bWVudUl0ZW1zKSk7CiB9CiAKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJLaXQvU2hhcmVkL1dlYkNv
bnRleHRNZW51SXRlbURhdGEuY3BwIGIvU291cmNlL1dlYktpdC9TaGFyZWQvV2ViQ29udGV4dE1l
bnVJdGVtRGF0YS5jcHAKaW5kZXggNTk4YTg3N2U5ZjYxNjhlMWFmNDgyZmU3ODcwY2VkNWExZDQ0
MzI4ZC4uNGJhYmU0MzJjMGE3NjU5ZWQ5YTdiY2UwZjMwNTFlNmEwMzBmOThkMiAxMDA2NDQKLS0t
IGEvU291cmNlL1dlYktpdC9TaGFyZWQvV2ViQ29udGV4dE1lbnVJdGVtRGF0YS5jcHAKKysrIGIv
U291cmNlL1dlYktpdC9TaGFyZWQvV2ViQ29udGV4dE1lbnVJdGVtRGF0YS5jcHAKQEAgLTE2MCwy
MiArMTYwLDE2IEBAIHN0ZDo6b3B0aW9uYWw8V2ViQ29udGV4dE1lbnVJdGVtRGF0YT4gV2ViQ29u
dGV4dE1lbnVJdGVtRGF0YTo6ZGVjb2RlKElQQzo6RGVjb2RlCiAKIFZlY3RvcjxXZWJDb250ZXh0
TWVudUl0ZW1EYXRhPiBraXRJdGVtcyhjb25zdCBWZWN0b3I8V2ViQ29yZTo6Q29udGV4dE1lbnVJ
dGVtPiYgY29yZUl0ZW1WZWN0b3IpCiB7Ci0gICAgVmVjdG9yPFdlYkNvbnRleHRNZW51SXRlbURh
dGE+IHJlc3VsdDsKLSAgICByZXN1bHQucmVzZXJ2ZUNhcGFjaXR5KGNvcmVJdGVtVmVjdG9yLnNp
emUoKSk7Ci0gICAgZm9yICh1bnNpZ25lZCBpID0gMDsgaSA8IGNvcmVJdGVtVmVjdG9yLnNpemUo
KTsgKytpKQotICAgICAgICByZXN1bHQuYXBwZW5kKFdlYkNvbnRleHRNZW51SXRlbURhdGEoY29y
ZUl0ZW1WZWN0b3JbaV0pKTsKLSAgICAKLSAgICByZXR1cm4gcmVzdWx0OworICAgIHJldHVybiBj
b3JlSXRlbVZlY3Rvci5tYXAoW10oYXV0byYgaXRlbSkgeworICAgICAgICByZXR1cm4gV2ViQ29u
dGV4dE1lbnVJdGVtRGF0YSB7IGl0ZW0gfTsKKyAgICB9KTsKIH0KIAogVmVjdG9yPENvbnRleHRN
ZW51SXRlbT4gY29yZUl0ZW1zKGNvbnN0IFZlY3RvcjxXZWJDb250ZXh0TWVudUl0ZW1EYXRhPiYg
a2l0SXRlbVZlY3RvcikKIHsKLSAgICBWZWN0b3I8Q29udGV4dE1lbnVJdGVtPiByZXN1bHQ7Ci0g
ICAgcmVzdWx0LnJlc2VydmVDYXBhY2l0eShraXRJdGVtVmVjdG9yLnNpemUoKSk7Ci0gICAgZm9y
ICh1bnNpZ25lZCBpID0gMDsgaSA8IGtpdEl0ZW1WZWN0b3Iuc2l6ZSgpOyArK2kpCi0gICAgICAg
IHJlc3VsdC5hcHBlbmQoa2l0SXRlbVZlY3RvcltpXS5jb3JlKCkpOwotICAgIAotICAgIHJldHVy
biByZXN1bHQ7CisgICAgcmV0dXJuIGtpdEl0ZW1WZWN0b3IubWFwKFtdKGF1dG8mIGl0ZW0pIHsK
KyAgICAgICAgcmV0dXJuIGl0ZW0uY29yZSgpOworICAgIH0pOwogfQogCiB9IC8vIG5hbWVzcGFj
ZSBXZWJLaXQKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJLaXQvVUlQcm9jZXNzL0FQSS9BUElXZWJB
dXRoZW50aWNhdGlvblBhbmVsLmNwcCBiL1NvdXJjZS9XZWJLaXQvVUlQcm9jZXNzL0FQSS9BUElX
ZWJBdXRoZW50aWNhdGlvblBhbmVsLmNwcAppbmRleCA5YzdjNWRkZGYyZjg4NTQ0ZDJmNDlmNzc3
NTYwMGM5MDBhOGM2MDM4Li4zYWU4MDkzOTIwOGMxYzA2NGRlZWY0YTdjODY5YjI1ZTNkYWU2ZDVh
IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViS2l0L1VJUHJvY2Vzcy9BUEkvQVBJV2ViQXV0aGVudGlj
YXRpb25QYW5lbC5jcHAKKysrIGIvU291cmNlL1dlYktpdC9VSVByb2Nlc3MvQVBJL0FQSVdlYkF1
dGhlbnRpY2F0aW9uUGFuZWwuY3BwCkBAIC01Niw3ICs1Niw2IEBAIFdlYkF1dGhlbnRpY2F0aW9u
UGFuZWw6OldlYkF1dGhlbnRpY2F0aW9uUGFuZWwoY29uc3QgQXV0aGVudGljYXRvck1hbmFnZXIm
IG1hbmFnCiAgICAgLCBtX2NsaWVudERhdGFUeXBlKHR5cGUpCiAgICAgLCBtX3VzZXJOYW1lKHVz
ZXJOYW1lKQogewotICAgIG1fdHJhbnNwb3J0cyA9IFZlY3RvcjxBdXRoZW50aWNhdG9yVHJhbnNw
b3J0PigpOwogICAgIG1fdHJhbnNwb3J0cy5yZXNlcnZlSW5pdGlhbENhcGFjaXR5KEF1dGhlbnRp
Y2F0b3JNYW5hZ2VyOjptYXhUcmFuc3BvcnROdW1iZXIpOwogICAgIGlmICh0cmFuc3BvcnRzLmNv
bnRhaW5zKEF1dGhlbnRpY2F0b3JUcmFuc3BvcnQ6OlVzYikpCiAgICAgICAgIG1fdHJhbnNwb3J0
cy51bmNoZWNrZWRBcHBlbmQoQXV0aGVudGljYXRvclRyYW5zcG9ydDo6VXNiKTsKZGlmZiAtLWdp
dCBhL1NvdXJjZS9XZWJLaXQvVUlQcm9jZXNzL0FQSS9BUElXZWJzaXRlUG9saWNpZXMuY3BwIGIv
U291cmNlL1dlYktpdC9VSVByb2Nlc3MvQVBJL0FQSVdlYnNpdGVQb2xpY2llcy5jcHAKaW5kZXgg
YWI1N2M0NGZlZWViZGNmYTgxYTdmNmY5ZGUwN2M5NmRiZWZlMDhhZS4uZTZhNGQwNzFhZDUxNGQ0
ZTE1NzNmN2YxM2Y2NDY5MTNjZDNmY2I3NiAxMDA2NDQKLS0tIGEvU291cmNlL1dlYktpdC9VSVBy
b2Nlc3MvQVBJL0FQSVdlYnNpdGVQb2xpY2llcy5jcHAKKysrIGIvU291cmNlL1dlYktpdC9VSVBy
b2Nlc3MvQVBJL0FQSVdlYnNpdGVQb2xpY2llcy5jcHAKQEAgLTU5LDE4ICs1OSw4IEBAIFJlZjxX
ZWJzaXRlUG9saWNpZXM+IFdlYnNpdGVQb2xpY2llczo6Y29weSgpIGNvbnN0CiAgICAgcG9saWNp
ZXMtPnNldFdlYnNpdGVEYXRhU3RvcmUobV93ZWJzaXRlRGF0YVN0b3JlLmdldCgpKTsKICAgICBw
b2xpY2llcy0+c2V0VXNlckNvbnRlbnRDb250cm9sbGVyKG1fdXNlckNvbnRlbnRDb250cm9sbGVy
LmdldCgpKTsKICAgICBwb2xpY2llcy0+c2V0SWRlbXBvdGVudE1vZGVBdXRvc2l6aW5nT25seUhv
bm9yc1BlcmNlbnRhZ2VzKG1faWRlbXBvdGVudE1vZGVBdXRvc2l6aW5nT25seUhvbm9yc1BlcmNl
bnRhZ2VzKTsKLSAgICAKLSAgICBWZWN0b3I8V2ViQ29yZTo6SFRUUEhlYWRlckZpZWxkPiBsZWdh
Y3lDdXN0b21IZWFkZXJGaWVsZHM7Ci0gICAgbGVnYWN5Q3VzdG9tSGVhZGVyRmllbGRzLnJlc2Vy
dmVJbml0aWFsQ2FwYWNpdHkobV9sZWdhY3lDdXN0b21IZWFkZXJGaWVsZHMuc2l6ZSgpKTsKLSAg
ICBmb3IgKGF1dG8mIGZpZWxkIDogbV9sZWdhY3lDdXN0b21IZWFkZXJGaWVsZHMpCi0gICAgICAg
IGxlZ2FjeUN1c3RvbUhlYWRlckZpZWxkcy51bmNoZWNrZWRBcHBlbmQoZmllbGQpOwotICAgIHBv
bGljaWVzLT5zZXRMZWdhY3lDdXN0b21IZWFkZXJGaWVsZHMoV1RGTW92ZShsZWdhY3lDdXN0b21I
ZWFkZXJGaWVsZHMpKTsKLQotICAgIFZlY3RvcjxXZWJDb3JlOjpDdXN0b21IZWFkZXJGaWVsZHM+
IGN1c3RvbUhlYWRlckZpZWxkczsKLSAgICBjdXN0b21IZWFkZXJGaWVsZHMucmVzZXJ2ZUluaXRp
YWxDYXBhY2l0eShtX2N1c3RvbUhlYWRlckZpZWxkcy5zaXplKCkpOwotICAgIGZvciAoYXV0byYg
ZmllbGQgOiBtX2N1c3RvbUhlYWRlckZpZWxkcykKLSAgICAgICAgY3VzdG9tSGVhZGVyRmllbGRz
LnVuY2hlY2tlZEFwcGVuZChmaWVsZCk7Ci0gICAgcG9saWNpZXMtPnNldEN1c3RvbUhlYWRlckZp
ZWxkcyhXVEZNb3ZlKGN1c3RvbUhlYWRlckZpZWxkcykpOworICAgIHBvbGljaWVzLT5zZXRMZWdh
Y3lDdXN0b21IZWFkZXJGaWVsZHMoVmVjdG9yIHsgbV9sZWdhY3lDdXN0b21IZWFkZXJGaWVsZHMg
fSk7CisgICAgcG9saWNpZXMtPnNldEN1c3RvbUhlYWRlckZpZWxkcyhWZWN0b3IgeyBtX2N1c3Rv
bUhlYWRlckZpZWxkcyB9KTsKICAgICBwb2xpY2llcy0+c2V0QWxsb3dTaXRlU3BlY2lmaWNRdWly
a3NUb092ZXJyaWRlQ29udGVudE1vZGUobV9hbGxvd1NpdGVTcGVjaWZpY1F1aXJrc1RvT3ZlcnJp
ZGVDb250ZW50TW9kZSk7CiAgICAgcG9saWNpZXMtPnNldEFwcGxpY2F0aW9uTmFtZUZvckRlc2t0
b3BVc2VyQWdlbnQobV9hcHBsaWNhdGlvbk5hbWVGb3JEZXNrdG9wVXNlckFnZW50KTsKICAgICBw
b2xpY2llcy0+c2V0QWxsb3dzQ29udGVudEphdmFTY3JpcHQobV9hbGxvd3NDb250ZW50SmF2YVNj
cmlwdCk7CkBAIC05OCw4ICs4OCw3IEBAIFdlYktpdDo6V2Vic2l0ZVBvbGljaWVzRGF0YSBXZWJz
aXRlUG9saWNpZXM6OmRhdGEoKQogICAgIGJvb2wgaGFzTGVnYWN5Q3VzdG9tSGVhZGVyRmllbGRz
ID0gbGVnYWN5Q3VzdG9tSGVhZGVyRmllbGRzKCkuc2l6ZSgpOwogICAgIFZlY3RvcjxXZWJDb3Jl
OjpDdXN0b21IZWFkZXJGaWVsZHM+IGN1c3RvbUhlYWRlckZpZWxkczsKICAgICBjdXN0b21IZWFk
ZXJGaWVsZHMucmVzZXJ2ZUluaXRpYWxDYXBhY2l0eSh0aGlzLT5jdXN0b21IZWFkZXJGaWVsZHMo
KS5zaXplKCkgKyBoYXNMZWdhY3lDdXN0b21IZWFkZXJGaWVsZHMpOwotICAgIGZvciAoYXV0byYg
ZmllbGQgOiB0aGlzLT5jdXN0b21IZWFkZXJGaWVsZHMoKSkKLSAgICAgICAgY3VzdG9tSGVhZGVy
RmllbGRzLnVuY2hlY2tlZEFwcGVuZChmaWVsZCk7CisgICAgY3VzdG9tSGVhZGVyRmllbGRzLmFw
cGVuZFZlY3Rvcih0aGlzLT5jdXN0b21IZWFkZXJGaWVsZHMoKSk7CiAgICAgaWYgKGhhc0xlZ2Fj
eUN1c3RvbUhlYWRlckZpZWxkcykKICAgICAgICAgY3VzdG9tSGVhZGVyRmllbGRzLnVuY2hlY2tl
ZEFwcGVuZCh7IGxlZ2FjeUN1c3RvbUhlYWRlckZpZWxkcygpLCB7IH19KTsKIApkaWZmIC0tZ2l0
IGEvU291cmNlL1dlYktpdC9VSVByb2Nlc3MvQVBJL0MvV0tQYWdlLmNwcCBiL1NvdXJjZS9XZWJL
aXQvVUlQcm9jZXNzL0FQSS9DL1dLUGFnZS5jcHAKaW5kZXggNjA0N2M1ZmE0ZTczNjg2NzU2NjIy
MmQ2M2Y2NjU3MmFmOTRjZDgxMC4uMjgxOGJkNjdjOThjMTZlN2JmZjg4OTY1NGI4MTU3N2EyMTFk
NGVkMCAxMDA2NDQKLS0tIGEvU291cmNlL1dlYktpdC9VSVByb2Nlc3MvQVBJL0MvV0tQYWdlLmNw
cAorKysgYi9Tb3VyY2UvV2ViS2l0L1VJUHJvY2Vzcy9BUEkvQy9XS1BhZ2UuY3BwCkBAIC0xMDUs
NiArMTA1LDE1IEBACiBuYW1lc3BhY2UgQVBJIHsKIHVzaW5nIG5hbWVzcGFjZSBXZWJDb3JlOwog
dXNpbmcgbmFtZXNwYWNlIFdlYktpdDsKKworI2lmIEVOQUJMRShDT05URVhUX01FTlVTKQorc3Rh
dGljIFZlY3RvcjxSZWZQdHI8QVBJOjpPYmplY3Q+PiB0b0FQSU9iamVjdFZlY3Rvcihjb25zdCBW
ZWN0b3I8UmVmPFdlYkNvbnRleHRNZW51SXRlbT4+JiBtZW51SXRlbXNWZWN0b3IpCit7CisgICAg
cmV0dXJuIG1lbnVJdGVtc1ZlY3Rvci5tYXAoW10oYXV0byYgbWVudUl0ZW0pIC0+IFJlZlB0cjxB
UEk6Ok9iamVjdD4geworICAgICAgICByZXR1cm4gbWVudUl0ZW0ucHRyKCk7CisgICAgfSk7Cit9
CisjZW5kaWYKICAgICAKIHRlbXBsYXRlPD4gc3RydWN0IENsaWVudFRyYWl0czxXS1BhZ2VMb2Fk
ZXJDbGllbnRCYXNlPiB7CiAgICAgdHlwZWRlZiBzdGQ6OnR1cGxlPFdLUGFnZUxvYWRlckNsaWVu
dFYwLCBXS1BhZ2VMb2FkZXJDbGllbnRWMSwgV0tQYWdlTG9hZGVyQ2xpZW50VjIsIFdLUGFnZUxv
YWRlckNsaWVudFYzLCBXS1BhZ2VMb2FkZXJDbGllbnRWNCwgV0tQYWdlTG9hZGVyQ2xpZW50VjUs
IFdLUGFnZUxvYWRlckNsaWVudFY2PiBWZXJzaW9uczsKQEAgLTk0NSwxMiArOTU0LDcgQEAgdm9p
ZCBXS1BhZ2VTZXRQYWdlQ29udGV4dE1lbnVDbGllbnQoV0tQYWdlUmVmIHBhZ2VSZWYsIGNvbnN0
IFdLUGFnZUNvbnRleHRNZW51Q2wKICAgICAgICAgdm9pZCBnZXRDb250ZXh0TWVudUZyb21Qcm9w
b3NlZE1lbnUoV2ViUGFnZVByb3h5JiBwYWdlLCBWZWN0b3I8UmVmPFdlYktpdDo6V2ViQ29udGV4
dE1lbnVJdGVtPj4mJiBwcm9wb3NlZE1lbnVWZWN0b3IsIFdlYktpdDo6V2ViQ29udGV4dE1lbnVM
aXN0ZW5lclByb3h5JiBjb250ZXh0TWVudUxpc3RlbmVyLCBjb25zdCBXZWJIaXRUZXN0UmVzdWx0
RGF0YSYgaGl0VGVzdFJlc3VsdERhdGEsIEFQSTo6T2JqZWN0KiB1c2VyRGF0YSkgb3ZlcnJpZGUK
ICAgICAgICAgewogICAgICAgICAgICAgaWYgKG1fY2xpZW50LmJhc2UudmVyc2lvbiA+PSA0ICYm
IG1fY2xpZW50LmdldENvbnRleHRNZW51RnJvbVByb3Bvc2VkTWVudUFzeW5jKSB7Ci0gICAgICAg
ICAgICAgICAgVmVjdG9yPFJlZlB0cjxBUEk6Ok9iamVjdD4+IHByb3Bvc2VkTWVudUl0ZW1zOwot
ICAgICAgICAgICAgICAgIHByb3Bvc2VkTWVudUl0ZW1zLnJlc2VydmVJbml0aWFsQ2FwYWNpdHko
cHJvcG9zZWRNZW51VmVjdG9yLnNpemUoKSk7Ci0gICAgICAgICAgICAgICAgCi0gICAgICAgICAg
ICAgICAgZm9yIChjb25zdCBhdXRvJiBtZW51SXRlbSA6IHByb3Bvc2VkTWVudVZlY3RvcikKLSAg
ICAgICAgICAgICAgICAgICAgcHJvcG9zZWRNZW51SXRlbXMudW5jaGVja2VkQXBwZW5kKG1lbnVJ
dGVtLnB0cigpKTsKLSAgICAgICAgICAgICAgICAKKyAgICAgICAgICAgICAgICBhdXRvIHByb3Bv
c2VkTWVudUl0ZW1zID0gdG9BUElPYmplY3RWZWN0b3IocHJvcG9zZWRNZW51VmVjdG9yKTsKICAg
ICAgICAgICAgICAgICBhdXRvIHdlYkhpdFRlc3RSZXN1bHQgPSBBUEk6OkhpdFRlc3RSZXN1bHQ6
OmNyZWF0ZShoaXRUZXN0UmVzdWx0RGF0YSk7CiAgICAgICAgICAgICAgICAgbV9jbGllbnQuZ2V0
Q29udGV4dE1lbnVGcm9tUHJvcG9zZWRNZW51QXN5bmModG9BUEkoJnBhZ2UpLCB0b0FQSShBUEk6
OkFycmF5OjpjcmVhdGUoV1RGTW92ZShwcm9wb3NlZE1lbnVJdGVtcykpLnB0cigpKSwgdG9BUEko
JmNvbnRleHRNZW51TGlzdGVuZXIpLCB0b0FQSSh3ZWJIaXRUZXN0UmVzdWx0LnB0cigpKSwgdG9B
UEkodXNlckRhdGEpLCBtX2NsaWVudC5iYXNlLmNsaWVudEluZm8pOwogICAgICAgICAgICAgICAg
IHJldHVybjsKQEAgLTk2NiwxMSArOTcwLDcgQEAgdm9pZCBXS1BhZ2VTZXRQYWdlQ29udGV4dE1l
bnVDbGllbnQoV0tQYWdlUmVmIHBhZ2VSZWYsIGNvbnN0IFdLUGFnZUNvbnRleHRNZW51Q2wKICAg
ICAgICAgICAgICAgICByZXR1cm47CiAgICAgICAgICAgICB9CiAKLSAgICAgICAgICAgIFZlY3Rv
cjxSZWZQdHI8QVBJOjpPYmplY3Q+PiBwcm9wb3NlZE1lbnVJdGVtczsKLSAgICAgICAgICAgIHBy
b3Bvc2VkTWVudUl0ZW1zLnJlc2VydmVJbml0aWFsQ2FwYWNpdHkocHJvcG9zZWRNZW51VmVjdG9y
LnNpemUoKSk7Ci0KLSAgICAgICAgICAgIGZvciAoY29uc3QgYXV0byYgbWVudUl0ZW0gOiBwcm9w
b3NlZE1lbnVWZWN0b3IpCi0gICAgICAgICAgICAgICAgcHJvcG9zZWRNZW51SXRlbXMudW5jaGVj
a2VkQXBwZW5kKG1lbnVJdGVtLnB0cigpKTsKKyAgICAgICAgICAgIGF1dG8gcHJvcG9zZWRNZW51
SXRlbXMgPSB0b0FQSU9iamVjdFZlY3Rvcihwcm9wb3NlZE1lbnVWZWN0b3IpOwogCiAgICAgICAg
ICAgICBXS0FycmF5UmVmIG5ld01lbnUgPSBudWxscHRyOwogICAgICAgICAgICAgaWYgKG1fY2xp
ZW50LmJhc2UudmVyc2lvbiA+PSAyKSB7CkBAIC0xMDEwLDEyICsxMDEwLDcgQEAgdm9pZCBXS1Bh
Z2VTZXRQYWdlQ29udGV4dE1lbnVDbGllbnQoV0tQYWdlUmVmIHBhZ2VSZWYsIGNvbnN0IFdLUGFn
ZUNvbnRleHRNZW51Q2wKICAgICAgICAgICAgIGlmICghY2FuU2hvd0NvbnRleHRNZW51KCkpCiAg
ICAgICAgICAgICAgICAgcmV0dXJuOwogCi0gICAgICAgICAgICBWZWN0b3I8UmVmUHRyPEFQSTo6
T2JqZWN0Pj4gbWVudUl0ZW1zOwotICAgICAgICAgICAgbWVudUl0ZW1zLnJlc2VydmVJbml0aWFs
Q2FwYWNpdHkobWVudUl0ZW1zVmVjdG9yLnNpemUoKSk7Ci0KLSAgICAgICAgICAgIGZvciAoY29u
c3QgYXV0byYgbWVudUl0ZW0gOiBtZW51SXRlbXNWZWN0b3IpCi0gICAgICAgICAgICAgICAgbWVu
dUl0ZW1zLnVuY2hlY2tlZEFwcGVuZChtZW51SXRlbS5wdHIoKSk7Ci0KKyAgICAgICAgICAgIGF1
dG8gbWVudUl0ZW1zID0gdG9BUElPYmplY3RWZWN0b3IobWVudUl0ZW1zVmVjdG9yKTsKICAgICAg
ICAgICAgIG1fY2xpZW50LnNob3dDb250ZXh0TWVudSh0b0FQSSgmcGFnZSksIHRvQVBJKG1lbnVM
b2NhdGlvbiksIHRvQVBJKEFQSTo6QXJyYXk6OmNyZWF0ZShXVEZNb3ZlKG1lbnVJdGVtcykpLnB0
cigpKSwgbV9jbGllbnQuYmFzZS5jbGllbnRJbmZvKTsKICAgICAgICAgfQogCkBAIC0xMTAyLDE5
ICsxMDk3LDEyIEBAIHZvaWQgV0tQYWdlU2V0UGFnZUZpbmRNYXRjaGVzQ2xpZW50KFdLUGFnZVJl
ZiBwYWdlUmVmLCBjb25zdCBXS1BhZ2VGaW5kTWF0Y2hlc0NsCiAgICAgICAgICAgICBpZiAoIW1f
Y2xpZW50LmRpZEZpbmRTdHJpbmdNYXRjaGVzKQogICAgICAgICAgICAgICAgIHJldHVybjsKIAot
ICAgICAgICAgICAgVmVjdG9yPFJlZlB0cjxBUEk6Ok9iamVjdD4+IG1hdGNoZXM7Ci0gICAgICAg
ICAgICBtYXRjaGVzLnJlc2VydmVJbml0aWFsQ2FwYWNpdHkobWF0Y2hSZWN0cy5zaXplKCkpOwot
Ci0gICAgICAgICAgICBmb3IgKGNvbnN0IGF1dG8mIHJlY3RzIDogbWF0Y2hSZWN0cykgewotICAg
ICAgICAgICAgICAgIFZlY3RvcjxSZWZQdHI8QVBJOjpPYmplY3Q+PiBhcGlSZWN0czsKLSAgICAg
ICAgICAgICAgICBhcGlSZWN0cy5yZXNlcnZlSW5pdGlhbENhcGFjaXR5KHJlY3RzLnNpemUoKSk7
Ci0KLSAgICAgICAgICAgICAgICBmb3IgKGNvbnN0IGF1dG8mIHJlY3QgOiByZWN0cykKLSAgICAg
ICAgICAgICAgICAgICAgYXBpUmVjdHMudW5jaGVja2VkQXBwZW5kKEFQSTo6UmVjdDo6Y3JlYXRl
KHRvQVBJKHJlY3QpKSk7Ci0KLSAgICAgICAgICAgICAgICBtYXRjaGVzLnVuY2hlY2tlZEFwcGVu
ZChBUEk6OkFycmF5OjpjcmVhdGUoV1RGTW92ZShhcGlSZWN0cykpKTsKLSAgICAgICAgICAgIH0K
LQorICAgICAgICAgICAgYXV0byBtYXRjaGVzID0gbWF0Y2hSZWN0cy5tYXAoW10oYXV0byYgcmVj
dHMpIC0+IFJlZlB0cjxBUEk6Ok9iamVjdD4geworICAgICAgICAgICAgICAgIGF1dG8gYXBpUmVj
dHMgPSByZWN0cy5tYXAoW10oYXV0byYgcmVjdCkgLT4gUmVmUHRyPEFQSTo6T2JqZWN0PiB7Cisg
ICAgICAgICAgICAgICAgICAgIHJldHVybiBBUEk6OlJlY3Q6OmNyZWF0ZSh0b0FQSShyZWN0KSk7
CisgICAgICAgICAgICAgICAgfSk7CisgICAgICAgICAgICAgICAgcmV0dXJuIEFQSTo6QXJyYXk6
OmNyZWF0ZShXVEZNb3ZlKGFwaVJlY3RzKSk7CisgICAgICAgICAgICB9KTsKICAgICAgICAgICAg
IG1fY2xpZW50LmRpZEZpbmRTdHJpbmdNYXRjaGVzKHRvQVBJKHBhZ2UpLCB0b0FQSShzdHJpbmcu
aW1wbCgpKSwgdG9BUEkoQVBJOjpBcnJheTo6Y3JlYXRlKFdURk1vdmUobWF0Y2hlcykpLnB0cigp
KSwgaW5kZXgsIG1fY2xpZW50LmJhc2UuY2xpZW50SW5mbyk7CiAgICAgICAgIH0KIApAQCAtMTI2
NywxMSArMTI1NSw5IEBAIHZvaWQgV0tQYWdlU2V0UGFnZUxvYWRlckNsaWVudChXS1BhZ2VSZWYg
cGFnZVJlZiwgY29uc3QgV0tQYWdlTG9hZGVyQ2xpZW50QmFzZSoKIAogICAgICAgICAgICAgUmVm
UHRyPEFQSTo6QXJyYXk+IHJlbW92ZWRJdGVtc0FycmF5OwogICAgICAgICAgICAgaWYgKCFyZW1v
dmVkSXRlbXMuaXNFbXB0eSgpKSB7Ci0gICAgICAgICAgICAgICAgVmVjdG9yPFJlZlB0cjxBUEk6
Ok9iamVjdD4+IHJlbW92ZWRJdGVtc1ZlY3RvcjsKLSAgICAgICAgICAgICAgICByZW1vdmVkSXRl
bXNWZWN0b3IucmVzZXJ2ZUluaXRpYWxDYXBhY2l0eShyZW1vdmVkSXRlbXMuc2l6ZSgpKTsKLSAg
ICAgICAgICAgICAgICBmb3IgKGF1dG8mIHJlbW92ZWRJdGVtIDogcmVtb3ZlZEl0ZW1zKQotICAg
ICAgICAgICAgICAgIHJlbW92ZWRJdGVtc1ZlY3Rvci5hcHBlbmQoV1RGTW92ZShyZW1vdmVkSXRl
bSkpOwotCisgICAgICAgICAgICAgICAgYXV0byByZW1vdmVkSXRlbXNWZWN0b3IgPSBXVEY6Om1h
cChXVEZNb3ZlKHJlbW92ZWRJdGVtcyksIFtdKGF1dG8mJiByZW1vdmVkSXRlbSkgLT4gUmVmUHRy
PEFQSTo6T2JqZWN0PiB7CisgICAgICAgICAgICAgICAgICAgIHJldHVybiBXVEZNb3ZlKHJlbW92
ZWRJdGVtKTsKKyAgICAgICAgICAgICAgICB9KTsKICAgICAgICAgICAgICAgICByZW1vdmVkSXRl
bXNBcnJheSA9IEFQSTo6QXJyYXk6OmNyZWF0ZShXVEZNb3ZlKHJlbW92ZWRJdGVtc1ZlY3Rvcikp
OwogICAgICAgICAgICAgfQogCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViS2l0L1VJUHJvY2Vzcy9D
b2NvYS9WaWRlb0Z1bGxzY3JlZW5NYW5hZ2VyUHJveHkubW0gYi9Tb3VyY2UvV2ViS2l0L1VJUHJv
Y2Vzcy9Db2NvYS9WaWRlb0Z1bGxzY3JlZW5NYW5hZ2VyUHJveHkubW0KaW5kZXggNjAwYTg5ZjU1
OWJmOWMyZWZmYjJlMGQxN2EzZjVlZGY0MGY5NjJjMC4uNzA2YWM1NzEyMWE2ZTVhNzk2YWNmNjZh
OTgyNzc1N2ZmYzNkM2U4YyAxMDA2NDQKLS0tIGEvU291cmNlL1dlYktpdC9VSVByb2Nlc3MvQ29j
b2EvVmlkZW9GdWxsc2NyZWVuTWFuYWdlclByb3h5Lm1tCisrKyBiL1NvdXJjZS9XZWJLaXQvVUlQ
cm9jZXNzL0NvY29hL1ZpZGVvRnVsbHNjcmVlbk1hbmFnZXJQcm94eS5tbQpAQCAtNDkzLDEyICs0
OTMsNyBAQCB2b2lkIFZpZGVvRnVsbHNjcmVlbk1hbmFnZXJQcm94eTo6Zm9yRWFjaFNlc3Npb24o
RnVuY3Rpb248dm9pZChWaWRlb0Z1bGxzY3JlZW5NbwogICAgIGlmIChtX2NvbnRleHRNYXAuaXNF
bXB0eSgpKQogICAgICAgICByZXR1cm47CiAKLSAgICBWZWN0b3I8TW9kZWxJbnRlcmZhY2VUdXBs
ZT4gdmFsdWVzOwotICAgIHZhbHVlcy5yZXNlcnZlSW5pdGlhbENhcGFjaXR5KG1fY29udGV4dE1h
cC5zaXplKCkpOwotICAgIGZvciAoYXV0byYgdmFsdWUgOiBtX2NvbnRleHRNYXAudmFsdWVzKCkp
Ci0gICAgICAgIHZhbHVlcy51bmNoZWNrZWRBcHBlbmQodmFsdWUpOwotCi0gICAgZm9yIChhdXRv
JiB2YWx1ZSA6IHZhbHVlcykgeworICAgIGZvciAoYXV0byYgdmFsdWUgOiBjb3B5VG9WZWN0b3Io
bV9jb250ZXh0TWFwLnZhbHVlcygpKSkgewogICAgICAgICBSZWZQdHI8VmlkZW9GdWxsc2NyZWVu
TW9kZWxDb250ZXh0PiBtb2RlbDsKICAgICAgICAgUmVmUHRyPFBsYXRmb3JtVmlkZW9GdWxsc2Ny
ZWVuSW50ZXJmYWNlPiBpbnRlcmZhY2U7CiAgICAgICAgIHN0ZDo6dGllKG1vZGVsLCBpbnRlcmZh
Y2UpID0gdmFsdWU7CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViS2l0L1VJUHJvY2Vzcy9HYW1lcGFk
L1VJR2FtZXBhZFByb3ZpZGVyLmNwcCBiL1NvdXJjZS9XZWJLaXQvVUlQcm9jZXNzL0dhbWVwYWQv
VUlHYW1lcGFkUHJvdmlkZXIuY3BwCmluZGV4IGQ5OGM1Mzk1ZWUxMmM0ZjU3ODMwOTNjNzg0MzEz
Njg3MWY0MzZlMjYuLjk3ZDdjNDJkNzljNWViMzdkNzYxZGNmNzE2YTcyOGZhZjY0YzIzYmEgMTAw
NjQ0Ci0tLSBhL1NvdXJjZS9XZWJLaXQvVUlQcm9jZXNzL0dhbWVwYWQvVUlHYW1lcGFkUHJvdmlk
ZXIuY3BwCisrKyBiL1NvdXJjZS9XZWJLaXQvVUlQcm9jZXNzL0dhbWVwYWQvVUlHYW1lcGFkUHJv
dmlkZXIuY3BwCkBAIC0xOTQsMTcgKzE5NCw5IEBAIHZvaWQgVUlHYW1lcGFkUHJvdmlkZXI6OnN0
b3BNb25pdG9yaW5nR2FtZXBhZHMoKQogCiBWZWN0b3I8R2FtZXBhZERhdGE+IFVJR2FtZXBhZFBy
b3ZpZGVyOjpzbmFwc2hvdEdhbWVwYWRzKCkKIHsKLSAgICBWZWN0b3I8R2FtZXBhZERhdGE+IGdh
bWVwYWREYXRhczsKLSAgICBnYW1lcGFkRGF0YXMucmVzZXJ2ZUluaXRpYWxDYXBhY2l0eShtX2dh
bWVwYWRzLnNpemUoKSk7Ci0KLSAgICBmb3IgKGF1dG8mIGdhbWVwYWQgOiBtX2dhbWVwYWRzKSB7
Ci0gICAgICAgIGlmIChnYW1lcGFkKQotICAgICAgICAgICAgZ2FtZXBhZERhdGFzLnVuY2hlY2tl
ZEFwcGVuZChnYW1lcGFkLT5nYW1lcGFkRGF0YSgpKTsKLSAgICAgICAgZWxzZQotICAgICAgICAg
ICAgZ2FtZXBhZERhdGFzLnVuY2hlY2tlZEFwcGVuZCh7IH0pOwotICAgIH0KLQotICAgIHJldHVy
biBnYW1lcGFkRGF0YXM7CisgICAgcmV0dXJuIG1fZ2FtZXBhZHMubWFwKFtdKGF1dG8mIGdhbWVw
YWQpIHsKKyAgICAgICAgcmV0dXJuIGdhbWVwYWQgPyBnYW1lcGFkLT5nYW1lcGFkRGF0YSgpIDog
R2FtZXBhZERhdGEgeyB9OworICAgIH0pOwogfQogCiAjaWYgIVBMQVRGT1JNKENPQ09BKSAmJiAh
KFVTRShNQU5FVFRFKSAmJiBPUyhMSU5VWCkpCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViS2l0L1VJ
UHJvY2Vzcy9OZXR3b3JrL05ldHdvcmtQcm9jZXNzUHJveHkuY3BwIGIvU291cmNlL1dlYktpdC9V
SVByb2Nlc3MvTmV0d29yay9OZXR3b3JrUHJvY2Vzc1Byb3h5LmNwcAppbmRleCBmNzEzOWYxMDBk
YWM1NGE0MDliYjQ5Mzg4NjFmNDUxNzllMzU0MDdmLi44MzFiMjFhNWYwM2ZhNDZhYjg0MDgwMWE5
NDkxOTY3MzlkYTA2N2ViIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViS2l0L1VJUHJvY2Vzcy9OZXR3
b3JrL05ldHdvcmtQcm9jZXNzUHJveHkuY3BwCisrKyBiL1NvdXJjZS9XZWJLaXQvVUlQcm9jZXNz
L05ldHdvcmsvTmV0d29ya1Byb2Nlc3NQcm94eS5jcHAKQEAgLTExOCwxMSArMTE4LDkgQEAgc3Rh
dGljIGJvb2wgc2hvdWxkVGVybWluYXRlTmV0d29ya1Byb2Nlc3NCeVNlbmRpbmdNZXNzYWdlKCkK
IAogVmVjdG9yPFJlZjxOZXR3b3JrUHJvY2Vzc1Byb3h5Pj4gTmV0d29ya1Byb2Nlc3NQcm94eTo6
YWxsTmV0d29ya1Byb2Nlc3NlcygpCiB7Ci0gICAgVmVjdG9yPFJlZjxOZXR3b3JrUHJvY2Vzc1By
b3h5Pj4gcHJvY2Vzc2VzOwotICAgIHByb2Nlc3Nlcy5yZXNlcnZlSW5pdGlhbENhcGFjaXR5KG5l
dHdvcmtQcm9jZXNzZXNTZXQoKS5zaXplKCkpOwotICAgIGZvciAoYXV0byogbmV0d29ya1Byb2Nl
c3MgOiBuZXR3b3JrUHJvY2Vzc2VzU2V0KCkpCi0gICAgICAgIHByb2Nlc3Nlcy51bmNoZWNrZWRB
cHBlbmQoKm5ldHdvcmtQcm9jZXNzKTsKLSAgICByZXR1cm4gcHJvY2Vzc2VzOworICAgIHJldHVy
biBXVEY6Om1hcChuZXR3b3JrUHJvY2Vzc2VzU2V0KCksIFtdKGF1dG8qIG5ldHdvcmtQcm9jZXNz
KSB7CisgICAgICAgIHJldHVybiBSZWYgeyAqbmV0d29ya1Byb2Nlc3MgfTsKKyAgICB9KTsKIH0K
IAogUmVmUHRyPE5ldHdvcmtQcm9jZXNzUHJveHk+JiBOZXR3b3JrUHJvY2Vzc1Byb3h5OjpkZWZh
dWx0TmV0d29ya1Byb2Nlc3MoKQpAQCAtNjIzLDEzICs2MjEsNyBAQCB2b2lkIE5ldHdvcmtQcm9j
ZXNzUHJveHk6OnVwZGF0ZVByZXZhbGVudERvbWFpbnNUb0Jsb2NrQ29va2llc0ZvcihQQUw6OlNl
c3Npb25JRAogICAgICAgICBjb21wbGV0aW9uSGFuZGxlcigpOwogICAgICAgICByZXR1cm47CiAg
ICAgfQotCi0gICAgVmVjdG9yPFJlZ2lzdHJhYmxlRG9tYWluPiByZWdpc3RyYWJsZURvbWFpbnNU
b0Jsb2NrOwotICAgIHJlZ2lzdHJhYmxlRG9tYWluc1RvQmxvY2sucmVzZXJ2ZUluaXRpYWxDYXBh
Y2l0eShkb21haW5zVG9CbG9jay5zaXplKCkpOwotICAgIGZvciAoYXV0byYgZG9tYWluIDogZG9t
YWluc1RvQmxvY2spCi0gICAgICAgIHJlZ2lzdHJhYmxlRG9tYWluc1RvQmxvY2sudW5jaGVja2Vk
QXBwZW5kKGRvbWFpbik7Ci0KLSAgICBzZW5kV2l0aEFzeW5jUmVwbHkoTWVzc2FnZXM6Ok5ldHdv
cmtQcm9jZXNzOjpVcGRhdGVQcmV2YWxlbnREb21haW5zVG9CbG9ja0Nvb2tpZXNGb3Ioc2Vzc2lv
bklELCByZWdpc3RyYWJsZURvbWFpbnNUb0Jsb2NrKSwgV1RGTW92ZShjb21wbGV0aW9uSGFuZGxl
cikpOworICAgIHNlbmRXaXRoQXN5bmNSZXBseShNZXNzYWdlczo6TmV0d29ya1Byb2Nlc3M6OlVw
ZGF0ZVByZXZhbGVudERvbWFpbnNUb0Jsb2NrQ29va2llc0ZvcihzZXNzaW9uSUQsIGRvbWFpbnNU
b0Jsb2NrKSwgV1RGTW92ZShjb21wbGV0aW9uSGFuZGxlcikpOwogfQogCiB2b2lkIE5ldHdvcmtQ
cm9jZXNzUHJveHk6OmlzUHJldmFsZW50UmVzb3VyY2UoUEFMOjpTZXNzaW9uSUQgc2Vzc2lvbklE
LCBjb25zdCBSZWdpc3RyYWJsZURvbWFpbiYgcmVzb3VyY2VEb21haW4sIENvbXBsZXRpb25IYW5k
bGVyPHZvaWQoYm9vbCk+JiYgY29tcGxldGlvbkhhbmRsZXIpCmRpZmYgLS1naXQgYS9Tb3VyY2Uv
V2ViS2l0L1VJUHJvY2Vzcy9Ob3RpZmljYXRpb25zL1dlYk5vdGlmaWNhdGlvbk1hbmFnZXJQcm94
eS5jcHAgYi9Tb3VyY2UvV2ViS2l0L1VJUHJvY2Vzcy9Ob3RpZmljYXRpb25zL1dlYk5vdGlmaWNh
dGlvbk1hbmFnZXJQcm94eS5jcHAKaW5kZXggMDA1ZmJhNWEyM2FkNjY2ZGUyZDA3ZTNkNjc5NjRl
YTJlMmE1YzIwNi4uYjNhYzcyYjVmNmNiODE5ZmQ5YTJjMDc2YjBkNjkyNjFjYmU1MTgwYSAxMDA2
NDQKLS0tIGEvU291cmNlL1dlYktpdC9VSVByb2Nlc3MvTm90aWZpY2F0aW9ucy9XZWJOb3RpZmlj
YXRpb25NYW5hZ2VyUHJveHkuY3BwCisrKyBiL1NvdXJjZS9XZWJLaXQvVUlQcm9jZXNzL05vdGlm
aWNhdGlvbnMvV2ViTm90aWZpY2F0aW9uTWFuYWdlclByb3h5LmNwcApAQCAtMjc4LDkgKzI3OCw4
IEBAIHZvaWQgV2ViTm90aWZpY2F0aW9uTWFuYWdlclByb3h5Ojpwcm92aWRlckRpZFJlbW92ZU5v
dGlmaWNhdGlvblBvbGljaWVzKEFQSTo6QXJyCiAgICAgCiAgICAgVmVjdG9yPFN0cmluZz4gb3Jp
Z2luU3RyaW5nczsKICAgICBvcmlnaW5TdHJpbmdzLnJlc2VydmVJbml0aWFsQ2FwYWNpdHkoc2l6
ZSk7Ci0gICAgCiAgICAgZm9yIChzaXplX3QgaSA9IDA7IGkgPCBzaXplOyArK2kpCi0gICAgICAg
IG9yaWdpblN0cmluZ3MuYXBwZW5kKG9yaWdpbnMtPmF0PEFQSTo6U2VjdXJpdHlPcmlnaW4+KGkp
LT5zZWN1cml0eU9yaWdpbigpLnRvU3RyaW5nKCkpOworICAgICAgICBvcmlnaW5TdHJpbmdzLnVu
Y2hlY2tlZEFwcGVuZChvcmlnaW5zLT5hdDxBUEk6OlNlY3VyaXR5T3JpZ2luPihpKS0+c2VjdXJp
dHlPcmlnaW4oKS50b1N0cmluZygpKTsKIAogICAgIFdlYlByb2Nlc3NQb29sOjpzZW5kVG9BbGxS
ZW1vdGVXb3JrZXJQcm9jZXNzZXMoTWVzc2FnZXM6OldlYk5vdGlmaWNhdGlvbk1hbmFnZXI6OkRp
ZFJlbW92ZU5vdGlmaWNhdGlvbkRlY2lzaW9ucyhvcmlnaW5TdHJpbmdzKSk7CiAKZGlmZiAtLWdp
dCBhL1NvdXJjZS9XZWJLaXQvVUlQcm9jZXNzL05vdGlmaWNhdGlvbnMvV2ViTm90aWZpY2F0aW9u
UHJvdmlkZXIuY3BwIGIvU291cmNlL1dlYktpdC9VSVByb2Nlc3MvTm90aWZpY2F0aW9ucy9XZWJO
b3RpZmljYXRpb25Qcm92aWRlci5jcHAKaW5kZXggODU4ZDc2NDYyZmNhZTY4Y2M0YjBhM2FjODVk
YjU1NmY3OGRlZDZlZC4uZjM2NWQ0MjMzMGZmNjgyNmExNmM0ZTdlMWQ0M2Q3ZWM3OTVkZWFjMCAx
MDA2NDQKLS0tIGEvU291cmNlL1dlYktpdC9VSVByb2Nlc3MvTm90aWZpY2F0aW9ucy9XZWJOb3Rp
ZmljYXRpb25Qcm92aWRlci5jcHAKKysrIGIvU291cmNlL1dlYktpdC9VSVByb2Nlc3MvTm90aWZp
Y2F0aW9ucy9XZWJOb3RpZmljYXRpb25Qcm92aWRlci5jcHAKQEAgLTcxLDEyICs3MSw5IEBAIHZv
aWQgV2ViTm90aWZpY2F0aW9uUHJvdmlkZXI6OmNsZWFyTm90aWZpY2F0aW9ucyhjb25zdCBWZWN0
b3I8dWludDY0X3Q+JiBub3RpZmljCiAgICAgaWYgKCFtX2NsaWVudC5jbGVhck5vdGlmaWNhdGlv
bnMpCiAgICAgICAgIHJldHVybjsKIAotICAgIFZlY3RvcjxSZWZQdHI8QVBJOjpPYmplY3Q+PiBh
cnJheUlEczsKLSAgICBhcnJheUlEcy5yZXNlcnZlSW5pdGlhbENhcGFjaXR5KG5vdGlmaWNhdGlv
bklEcy5zaXplKCkpOwotCi0gICAgZm9yIChjb25zdCBhdXRvJiBub3RpZmljYXRpb25JRCA6IG5v
dGlmaWNhdGlvbklEcykKLSAgICAgICAgYXJyYXlJRHMudW5jaGVja2VkQXBwZW5kKEFQSTo6VUlu
dDY0OjpjcmVhdGUobm90aWZpY2F0aW9uSUQpKTsKLQorICAgIGF1dG8gYXJyYXlJRHMgPSBub3Rp
ZmljYXRpb25JRHMubWFwKFtdKGF1dG8mIG5vdGlmaWNhdGlvbklEKSAtPiBSZWZQdHI8QVBJOjpP
YmplY3Q+IHsKKyAgICAgICAgcmV0dXJuIEFQSTo6VUludDY0OjpjcmVhdGUobm90aWZpY2F0aW9u
SUQpOworICAgIH0pOwogICAgIG1fY2xpZW50LmNsZWFyTm90aWZpY2F0aW9ucyh0b0FQSShBUEk6
OkFycmF5OjpjcmVhdGUoV1RGTW92ZShhcnJheUlEcykpLnB0cigpKSwgbV9jbGllbnQuYmFzZS5j
bGllbnRJbmZvKTsKIH0KIApkaWZmIC0tZ2l0IGEvU291cmNlL1dlYktpdC9VSVByb2Nlc3MvU3Rh
dGlzdGljc1JlcXVlc3QuY3BwIGIvU291cmNlL1dlYktpdC9VSVByb2Nlc3MvU3RhdGlzdGljc1Jl
cXVlc3QuY3BwCmluZGV4IGIxYzJjNTI5YjQ0MzM2ZDYzZGYwMzVmZDg0NzQ4NjA3MjEzMmE4Zjcu
LmUzZTYxNjQzNTkxZjJmZGU2ZGNmZjUwM2IyNjE1YzllMzJiZWJiNWEgMTAwNjQ0Ci0tLSBhL1Nv
dXJjZS9XZWJLaXQvVUlQcm9jZXNzL1N0YXRpc3RpY3NSZXF1ZXN0LmNwcAorKysgYi9Tb3VyY2Uv
V2ViS2l0L1VJUHJvY2Vzcy9TdGF0aXN0aWNzUmVxdWVzdC5jcHAKQEAgLTg0LDEyICs4NCw5IEBA
IHZvaWQgU3RhdGlzdGljc1JlcXVlc3Q6OmNvbXBsZXRlZFJlcXVlc3QodWludDY0X3QgcmVxdWVz
dElELCBjb25zdCBTdGF0aXN0aWNzRGF0CiAgICAgICAgIG1fcmVzcG9uc2VEaWN0aW9uYXJ5LT5z
ZXQoIkphdmFTY3JpcHRPYmplY3RUeXBlQ291bnRzIiwgY3JlYXRlRGljdGlvbmFyeUZyb21IYXNo
TWFwKGRhdGEuamF2YVNjcmlwdE9iamVjdFR5cGVDb3VudHMpKTsKIAogICAgIGlmICghZGF0YS53
ZWJDb3JlQ2FjaGVTdGF0aXN0aWNzLmlzRW1wdHkoKSkgewotICAgICAgICBWZWN0b3I8UmVmUHRy
PEFQSTo6T2JqZWN0Pj4gY2FjaGVTdGF0aXN0aWNzOwotICAgICAgICBjYWNoZVN0YXRpc3RpY3Mu
cmVzZXJ2ZUluaXRpYWxDYXBhY2l0eShkYXRhLndlYkNvcmVDYWNoZVN0YXRpc3RpY3Muc2l6ZSgp
KTsKLQotICAgICAgICBmb3IgKGNvbnN0IGF1dG8mIHN0YXRpc3RpYyA6IGRhdGEud2ViQ29yZUNh
Y2hlU3RhdGlzdGljcykKLSAgICAgICAgICAgIGNhY2hlU3RhdGlzdGljcy51bmNoZWNrZWRBcHBl
bmQoY3JlYXRlRGljdGlvbmFyeUZyb21IYXNoTWFwKHN0YXRpc3RpYykpOwotCisgICAgICAgIGF1
dG8gY2FjaGVTdGF0aXN0aWNzID0gZGF0YS53ZWJDb3JlQ2FjaGVTdGF0aXN0aWNzLm1hcChbXShh
dXRvJiBzdGF0aXN0aWMpIC0+IFJlZlB0cjxBUEk6Ok9iamVjdD4geworICAgICAgICAgICAgcmV0
dXJuIGNyZWF0ZURpY3Rpb25hcnlGcm9tSGFzaE1hcChzdGF0aXN0aWMpOworICAgICAgICB9KTsK
ICAgICAgICAgbV9yZXNwb25zZURpY3Rpb25hcnktPnNldCgiV2ViQ29yZUNhY2hlU3RhdGlzdGlj
cyIsIEFQSTo6QXJyYXk6OmNyZWF0ZShXVEZNb3ZlKGNhY2hlU3RhdGlzdGljcykpKTsKICAgICB9
CiAKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJLaXQvVUlQcm9jZXNzL1VzZXJDb250ZW50L1dlYlVz
ZXJDb250ZW50Q29udHJvbGxlclByb3h5LmNwcCBiL1NvdXJjZS9XZWJLaXQvVUlQcm9jZXNzL1Vz
ZXJDb250ZW50L1dlYlVzZXJDb250ZW50Q29udHJvbGxlclByb3h5LmNwcAppbmRleCA5MTE3M2E3
NzgzNzc0NTQ2N2JiYTJhNzhiNWU0NjhjNWQyMjE0MThlLi5mYTI1NGMyZGFkYzA2MzAyOGRmZDUw
NGQyODkwYTg5MmFlZGFmYjA4IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViS2l0L1VJUHJvY2Vzcy9V
c2VyQ29udGVudC9XZWJVc2VyQ29udGVudENvbnRyb2xsZXJQcm94eS5jcHAKKysrIGIvU291cmNl
L1dlYktpdC9VSVByb2Nlc3MvVXNlckNvbnRlbnQvV2ViVXNlckNvbnRlbnRDb250cm9sbGVyUHJv
eHkuY3BwCkBAIC0yMTgsMTEgKzIxOCw5IEBAIHZvaWQgV2ViVXNlckNvbnRlbnRDb250cm9sbGVy
UHJveHk6OnJlbW92ZUFsbFVzZXJTY3JpcHRzKCkKICAgICBmb3IgKGF1dG8gdXNlclNjcmlwdCA6
IG1fdXNlclNjcmlwdHMtPmVsZW1lbnRzT2ZUeXBlPEFQSTo6VXNlclNjcmlwdD4oKSkKICAgICAg
ICAgd29ybGRzLmFkZChjb25zdF9jYXN0PEFQSTo6Q29udGVudFdvcmxkKj4oJnVzZXJTY3JpcHQt
PmNvbnRlbnRXb3JsZCgpKSk7CiAKLSAgICBWZWN0b3I8Q29udGVudFdvcmxkSWRlbnRpZmllcj4g
d29ybGRJZGVudGlmaWVyczsKLSAgICB3b3JsZElkZW50aWZpZXJzLnJlc2VydmVJbml0aWFsQ2Fw
YWNpdHkod29ybGRzLnNpemUoKSk7Ci0gICAgZm9yIChjb25zdCBhdXRvJiB3b3JsZENvdW50UGFp
ciA6IHdvcmxkcykKLSAgICAgICAgd29ybGRJZGVudGlmaWVycy51bmNoZWNrZWRBcHBlbmQod29y
bGRDb3VudFBhaXIua2V5LT5pZGVudGlmaWVyKCkpOwotCisgICAgYXV0byB3b3JsZElkZW50aWZp
ZXJzID0gV1RGOjptYXAod29ybGRzLCBbXShhdXRvJiBlbnRyeSkgeworICAgICAgICByZXR1cm4g
ZW50cnkua2V5LT5pZGVudGlmaWVyKCk7CisgICAgfSk7CiAgICAgZm9yIChhdXRvJiBwcm9jZXNz
IDogbV9wcm9jZXNzZXMpCiAgICAgICAgIHByb2Nlc3Muc2VuZChNZXNzYWdlczo6V2ViVXNlckNv
bnRlbnRDb250cm9sbGVyOjpSZW1vdmVBbGxVc2VyU2NyaXB0cyh3b3JsZElkZW50aWZpZXJzKSwg
aWRlbnRpZmllcigpKTsKIApAQCAtMjY3LDExICsyNjUsOSBAQCB2b2lkIFdlYlVzZXJDb250ZW50
Q29udHJvbGxlclByb3h5OjpyZW1vdmVBbGxVc2VyU3R5bGVTaGVldHMoKQogICAgIGZvciAoYXV0
byB1c2VyU3R5bGVTaGVldCA6IG1fdXNlclN0eWxlU2hlZXRzLT5lbGVtZW50c09mVHlwZTxBUEk6
OlVzZXJTdHlsZVNoZWV0PigpKQogICAgICAgICB3b3JsZHMuYWRkKGNvbnN0X2Nhc3Q8QVBJOjpD
b250ZW50V29ybGQqPigmdXNlclN0eWxlU2hlZXQtPmNvbnRlbnRXb3JsZCgpKSk7CiAKLSAgICBW
ZWN0b3I8Q29udGVudFdvcmxkSWRlbnRpZmllcj4gd29ybGRJZGVudGlmaWVyczsKLSAgICB3b3Js
ZElkZW50aWZpZXJzLnJlc2VydmVJbml0aWFsQ2FwYWNpdHkod29ybGRzLnNpemUoKSk7Ci0gICAg
Zm9yIChjb25zdCBhdXRvJiB3b3JsZENvdW50UGFpciA6IHdvcmxkcykKLSAgICAgICAgd29ybGRJ
ZGVudGlmaWVycy51bmNoZWNrZWRBcHBlbmQod29ybGRDb3VudFBhaXIua2V5LT5pZGVudGlmaWVy
KCkpOwotCisgICAgYXV0byB3b3JsZElkZW50aWZpZXJzID0gV1RGOjptYXAod29ybGRzLCBbXShh
dXRvJiBlbnRyeSkgeworICAgICAgICByZXR1cm4gZW50cnkua2V5LT5pZGVudGlmaWVyKCk7Cisg
ICAgfSk7CiAgICAgZm9yIChhdXRvJiBwcm9jZXNzIDogbV9wcm9jZXNzZXMpCiAgICAgICAgIHBy
b2Nlc3Muc2VuZChNZXNzYWdlczo6V2ViVXNlckNvbnRlbnRDb250cm9sbGVyOjpSZW1vdmVBbGxV
c2VyU3R5bGVTaGVldHMod29ybGRJZGVudGlmaWVycyksIGlkZW50aWZpZXIoKSk7CiAKZGlmZiAt
LWdpdCBhL1NvdXJjZS9XZWJLaXQvVUlQcm9jZXNzL1dlYkF1dGhlbnRpY2F0aW9uL0NvY29hL1dl
YkF1dGhlbnRpY2F0aW9uUGFuZWxDbGllbnQubW0gYi9Tb3VyY2UvV2ViS2l0L1VJUHJvY2Vzcy9X
ZWJBdXRoZW50aWNhdGlvbi9Db2NvYS9XZWJBdXRoZW50aWNhdGlvblBhbmVsQ2xpZW50Lm1tCmlu
ZGV4IDM5YTM5ZDM0YzIzZGY4ZjlhMmEyNmQzNmY2OTdjZjI1NTllOTZiMjcuLjAyN2M2OTBiZmE4
MjUzMjc4NjJkZWU0OWZlMzIxNzg5NDIyYTNjOGMgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJLaXQv
VUlQcm9jZXNzL1dlYkF1dGhlbnRpY2F0aW9uL0NvY29hL1dlYkF1dGhlbnRpY2F0aW9uUGFuZWxD
bGllbnQubW0KKysrIGIvU291cmNlL1dlYktpdC9VSVByb2Nlc3MvV2ViQXV0aGVudGljYXRpb24v
Q29jb2EvV2ViQXV0aGVudGljYXRpb25QYW5lbENsaWVudC5tbQpAQCAtMTY1LDExICsxNjUsOSBA
QCB2b2lkIFdlYkF1dGhlbnRpY2F0aW9uUGFuZWxDbGllbnQ6OnNlbGVjdEFzc2VydGlvblJlc3Bv
bnNlKFZlY3RvcjxSZWY8V2ViQ29yZTo6QQogICAgICAgICByZXR1cm47CiAgICAgfQogCi0gICAg
VmVjdG9yPFJlZlB0cjxBUEk6Ok9iamVjdD4+IGFwaVJlc3BvbnNlczsKLSAgICBhcGlSZXNwb25z
ZXMucmVzZXJ2ZUluaXRpYWxDYXBhY2l0eShyZXNwb25zZXMuc2l6ZSgpKTsKLSAgICBmb3IgKGF1
dG8mIHJlc3BvbnNlIDogcmVzcG9uc2VzKQotICAgICAgICBhcGlSZXNwb25zZXMudW5jaGVja2Vk
QXBwZW5kKEFQSTo6V2ViQXV0aGVudGljYXRpb25Bc3NlcnRpb25SZXNwb25zZTo6Y3JlYXRlKHJl
c3BvbnNlLmNvcHlSZWYoKSkpOwotCisgICAgYXV0byBhcGlSZXNwb25zZXMgPSByZXNwb25zZXMu
bWFwKFtdKGF1dG8mIHJlc3BvbnNlKSAtPiBSZWZQdHI8QVBJOjpPYmplY3Q+IHsKKyAgICAgICAg
cmV0dXJuIEFQSTo6V2ViQXV0aGVudGljYXRpb25Bc3NlcnRpb25SZXNwb25zZTo6Y3JlYXRlKHJl
c3BvbnNlLmNvcHlSZWYoKSk7CisgICAgfSk7CiAgICAgYXV0byBjaGVja2VyID0gQ29tcGxldGlv
bkhhbmRsZXJDYWxsQ2hlY2tlcjo6Y3JlYXRlKGRlbGVnYXRlLmdldCgpLCBAc2VsZWN0b3IocGFu
ZWw6c2VsZWN0QXNzZXJ0aW9uUmVzcG9uc2U6c291cmNlOmNvbXBsZXRpb25IYW5kbGVyOikpOwog
ICAgIFtkZWxlZ2F0ZSBwYW5lbDptX3BhbmVsIHNlbGVjdEFzc2VydGlvblJlc3BvbnNlOndyYXBw
ZXIoQVBJOjpBcnJheTo6Y3JlYXRlKFdURk1vdmUoYXBpUmVzcG9uc2VzKSkpIHNvdXJjZTp3a1dl
YkF1dGhlbnRpY2F0aW9uU291cmNlKHNvdXJjZSkgY29tcGxldGlvbkhhbmRsZXI6bWFrZUJsb2Nr
UHRyKFtjb21wbGV0aW9uSGFuZGxlciA9IFdURk1vdmUoY29tcGxldGlvbkhhbmRsZXIpLCBjaGVj
a2VyID0gV1RGTW92ZShjaGVja2VyKV0oX1dLV2ViQXV0aGVudGljYXRpb25Bc3NlcnRpb25SZXNw
b25zZSAqcmVzcG9uc2UpIG11dGFibGUgewogICAgICAgICBpZiAoY2hlY2tlci0+Y29tcGxldGlv
bkhhbmRsZXJIYXNCZWVuQ2FsbGVkKCkpCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViS2l0L1VJUHJv
Y2Vzcy9XZWJBdXRoZW50aWNhdGlvbi9maWRvL0N0YXBBdXRoZW50aWNhdG9yLmNwcCBiL1NvdXJj
ZS9XZWJLaXQvVUlQcm9jZXNzL1dlYkF1dGhlbnRpY2F0aW9uL2ZpZG8vQ3RhcEF1dGhlbnRpY2F0
b3IuY3BwCmluZGV4IDMzMDU1MzQwMzVhZWQ2ZTU3NzY5NjY5OWQzYzFmN2M4MjJlYzM5NTkuLmU1
MGU2OWRiMzM4MGY3YjYyMGE4NDExNjBkOTg0NDY5ZDgwZWRjMDkgMTAwNjQ0Ci0tLSBhL1NvdXJj
ZS9XZWJLaXQvVUlQcm9jZXNzL1dlYkF1dGhlbnRpY2F0aW9uL2ZpZG8vQ3RhcEF1dGhlbnRpY2F0
b3IuY3BwCisrKyBiL1NvdXJjZS9XZWJLaXQvVUlQcm9jZXNzL1dlYkF1dGhlbnRpY2F0aW9uL2Zp
ZG8vQ3RhcEF1dGhlbnRpY2F0b3IuY3BwCkBAIC0yMDgsMTIgKzIwOCw3IEBAIHZvaWQgQ3RhcEF1
dGhlbnRpY2F0b3I6OmNvbnRpbnVlR2V0TmV4dEFzc2VydGlvbkFmdGVyUmVzcG9uc2VSZWNlaXZl
ZChWZWN0b3I8dWluCiAKICAgICBpZiAoIW1fcmVtYWluaW5nQXNzZXJ0aW9uUmVzcG9uc2VzKSB7
CiAgICAgICAgIGlmIChhdXRvKiBvYnNlcnZlciA9IHRoaXMtPm9ic2VydmVyKCkpIHsKLSAgICAg
ICAgICAgIFZlY3RvcjxSZWY8QXV0aGVudGljYXRvckFzc2VydGlvblJlc3BvbnNlPj4gcmVzcG9u
c2VzQ29weTsKLSAgICAgICAgICAgIHJlc3BvbnNlc0NvcHkucmVzZXJ2ZUluaXRpYWxDYXBhY2l0
eShtX2Fzc2VydGlvblJlc3BvbnNlcy5zaXplKCkpOwotICAgICAgICAgICAgZm9yIChhdXRvJiBy
ZXNwb25zZSA6IG1fYXNzZXJ0aW9uUmVzcG9uc2VzKQotICAgICAgICAgICAgICAgIHJlc3BvbnNl
c0NvcHkudW5jaGVja2VkQXBwZW5kKHJlc3BvbnNlLmNvcHlSZWYoKSk7Ci0KLSAgICAgICAgICAg
IG9ic2VydmVyLT5zZWxlY3RBc3NlcnRpb25SZXNwb25zZShXVEZNb3ZlKHJlc3BvbnNlc0NvcHkp
LCBXZWJBdXRoZW50aWNhdGlvblNvdXJjZTo6RXh0ZXJuYWwsIFt0aGlzLCB3ZWFrVGhpcyA9IFdl
YWtQdHIgeyAqdGhpcyB9XSAoQXV0aGVudGljYXRvckFzc2VydGlvblJlc3BvbnNlKiByZXNwb25z
ZSkgeworICAgICAgICAgICAgb2JzZXJ2ZXItPnNlbGVjdEFzc2VydGlvblJlc3BvbnNlKFZlY3Rv
ciB7IG1fYXNzZXJ0aW9uUmVzcG9uc2VzIH0sIFdlYkF1dGhlbnRpY2F0aW9uU291cmNlOjpFeHRl
cm5hbCwgW3RoaXMsIHdlYWtUaGlzID0gV2Vha1B0ciB7ICp0aGlzIH1dIChBdXRoZW50aWNhdG9y
QXNzZXJ0aW9uUmVzcG9uc2UqIHJlc3BvbnNlKSB7CiAgICAgICAgICAgICAgICAgQVNTRVJUKFJ1
bkxvb3A6OmlzTWFpbigpKTsKICAgICAgICAgICAgICAgICBpZiAoIXdlYWtUaGlzKQogICAgICAg
ICAgICAgICAgICAgICByZXR1cm47CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViS2l0L1VJUHJvY2Vz
cy9XZWJCYWNrRm9yd2FyZExpc3QuY3BwIGIvU291cmNlL1dlYktpdC9VSVByb2Nlc3MvV2ViQmFj
a0ZvcndhcmRMaXN0LmNwcAppbmRleCBlMGU5NDRkMTJkZmMxMmJjNmNlY2YwMzk2MjE5ZjUzMzQz
NDJiNDUyLi5jNzQzNDNlNjViODg5Zjc4NjlkYzhjY2EzNDA1MWI4YjI2NTQwMmI2IDEwMDY0NAot
LS0gYS9Tb3VyY2UvV2ViS2l0L1VJUHJvY2Vzcy9XZWJCYWNrRm9yd2FyZExpc3QuY3BwCisrKyBi
L1NvdXJjZS9XZWJLaXQvVUlQcm9jZXNzL1dlYkJhY2tGb3J3YXJkTGlzdC5jcHAKQEAgLTEwMiwx
MCArMTAyLDEwIEBAIHZvaWQgV2ViQmFja0ZvcndhcmRMaXN0OjphZGRJdGVtKFJlZjxXZWJCYWNr
Rm9yd2FyZExpc3RJdGVtPiYmIG5ld0l0ZW0pCiAKICAgICAgICAgLy8gVG9zcyBldmVyeXRoaW5n
IGluIHRoZSBmb3J3YXJkIGxpc3QuCiAgICAgICAgIHVuc2lnbmVkIHRhcmdldFNpemUgPSAqbV9j
dXJyZW50SW5kZXggKyAxOwotICAgICAgICByZW1vdmVkSXRlbXMucmVzZXJ2ZUNhcGFjaXR5KG1f
ZW50cmllcy5zaXplKCkgLSB0YXJnZXRTaXplKTsKKyAgICAgICAgcmVtb3ZlZEl0ZW1zLnJlc2Vy
dmVJbml0aWFsQ2FwYWNpdHkobV9lbnRyaWVzLnNpemUoKSAtIHRhcmdldFNpemUpOwogICAgICAg
ICB3aGlsZSAobV9lbnRyaWVzLnNpemUoKSA+IHRhcmdldFNpemUpIHsKICAgICAgICAgICAgIGRp
ZFJlbW92ZUl0ZW0obV9lbnRyaWVzLmxhc3QoKSk7Ci0gICAgICAgICAgICByZW1vdmVkSXRlbXMu
YXBwZW5kKFdURk1vdmUobV9lbnRyaWVzLmxhc3QoKSkpOworICAgICAgICAgICAgcmVtb3ZlZEl0
ZW1zLnVuY2hlY2tlZEFwcGVuZChXVEZNb3ZlKG1fZW50cmllcy5sYXN0KCkpKTsKICAgICAgICAg
ICAgIG1fZW50cmllcy5yZW1vdmVMYXN0KCk7CiAgICAgICAgIH0KIApAQCAtMzg3LDEwICszODcs
MTAgQEAgdm9pZCBXZWJCYWNrRm9yd2FyZExpc3Q6OmNsZWFyKCkKICAgICAgICAgICAgIGRpZFJl
bW92ZUl0ZW0obV9lbnRyaWVzW2ldKTsKICAgICB9CiAKLSAgICByZW1vdmVkSXRlbXMucmVzZXJ2
ZUNhcGFjaXR5KHNpemUgLSAxKTsKKyAgICByZW1vdmVkSXRlbXMucmVzZXJ2ZUluaXRpYWxDYXBh
Y2l0eShzaXplIC0gMSk7CiAgICAgZm9yIChzaXplX3QgaSA9IDA7IGkgPCBzaXplOyArK2kpIHsK
ICAgICAgICAgaWYgKG1fY3VycmVudEluZGV4ICYmIGkgIT0gKm1fY3VycmVudEluZGV4KQotICAg
ICAgICAgICAgcmVtb3ZlZEl0ZW1zLmFwcGVuZChXVEZNb3ZlKG1fZW50cmllc1tpXSkpOworICAg
ICAgICAgICAgcmVtb3ZlZEl0ZW1zLnVuY2hlY2tlZEFwcGVuZChXVEZNb3ZlKG1fZW50cmllc1tp
XSkpOwogICAgIH0KIAogICAgIG1fY3VycmVudEluZGV4ID0gMDsKQEAgLTQzOCwxNiArNDM4LDEy
IEBAIHZvaWQgV2ViQmFja0ZvcndhcmRMaXN0OjpyZXN0b3JlRnJvbVN0YXRlKEJhY2tGb3J3YXJk
TGlzdFN0YXRlIGJhY2tGb3J3YXJkTGlzdFN0CiAgICAgaWYgKCFtX3BhZ2UpCiAgICAgICAgIHJl
dHVybjsKIAotICAgIFZlY3RvcjxSZWY8V2ViQmFja0ZvcndhcmRMaXN0SXRlbT4+IGl0ZW1zOwot
ICAgIGl0ZW1zLnJlc2VydmVJbml0aWFsQ2FwYWNpdHkoYmFja0ZvcndhcmRMaXN0U3RhdGUuaXRl
bXMuc2l6ZSgpKTsKLQogICAgIC8vIEZJWE1FOiBFbmFibGUgcmVzdG9yaW5nIHJlc291cmNlRGly
ZWN0b3J5VVJMLgotICAgIGZvciAoYXV0byYgYmFja0ZvcndhcmRMaXN0SXRlbVN0YXRlIDogYmFj
a0ZvcndhcmRMaXN0U3RhdGUuaXRlbXMpIHsKLSAgICAgICAgYmFja0ZvcndhcmRMaXN0SXRlbVN0
YXRlLmlkZW50aWZpZXIgPSB7IFByb2Nlc3M6OmlkZW50aWZpZXIoKSwgT2JqZWN0SWRlbnRpZmll
cjxCYWNrRm9yd2FyZEl0ZW1JZGVudGlmaWVyOjpJdGVtSWRlbnRpZmllclR5cGU+OjpnZW5lcmF0
ZSgpIH07Ci0gICAgICAgIGl0ZW1zLnVuY2hlY2tlZEFwcGVuZChXZWJCYWNrRm9yd2FyZExpc3RJ
dGVtOjpjcmVhdGUoV1RGTW92ZShiYWNrRm9yd2FyZExpc3RJdGVtU3RhdGUpLCBtX3BhZ2UtPmlk
ZW50aWZpZXIoKSkpOwotICAgIH0KKyAgICBtX2VudHJpZXMgPSBXVEY6Om1hcChXVEZNb3ZlKGJh
Y2tGb3J3YXJkTGlzdFN0YXRlLml0ZW1zKSwgW3RoaXNdKGF1dG8mJiBzdGF0ZSkgeworICAgICAg
ICBzdGF0ZS5pZGVudGlmaWVyID0geyBQcm9jZXNzOjppZGVudGlmaWVyKCksIE9iamVjdElkZW50
aWZpZXI8QmFja0ZvcndhcmRJdGVtSWRlbnRpZmllcjo6SXRlbUlkZW50aWZpZXJUeXBlPjo6Z2Vu
ZXJhdGUoKSB9OworICAgICAgICByZXR1cm4gV2ViQmFja0ZvcndhcmRMaXN0SXRlbTo6Y3JlYXRl
KFdURk1vdmUoc3RhdGUpLCBtX3BhZ2UtPmlkZW50aWZpZXIoKSk7CisgICAgfSk7CiAgICAgbV9j
dXJyZW50SW5kZXggPSBiYWNrRm9yd2FyZExpc3RTdGF0ZS5jdXJyZW50SW5kZXggPyBzdGQ6Om9w
dGlvbmFsPHNpemVfdD4oKmJhY2tGb3J3YXJkTGlzdFN0YXRlLmN1cnJlbnRJbmRleCkgOiBzdGQ6
Om51bGxvcHQ7Ci0gICAgbV9lbnRyaWVzID0gV1RGTW92ZShpdGVtcyk7CiAKICAgICBMT0coQmFj
a0ZvcndhcmQsICIoQmFjay9Gb3J3YXJkKSBXZWJCYWNrRm9yd2FyZExpc3QgJXAgcmVzdG9yZWQg
ZnJvbSBzdGF0ZSAoaGFzICV6dSBlbnRyaWVzKSIsIHRoaXMsIG1fZW50cmllcy5zaXplKCkpOwog
fQpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYktpdC9VSVByb2Nlc3MvV2ViUGFnZVByb3h5LmNwcCBi
L1NvdXJjZS9XZWJLaXQvVUlQcm9jZXNzL1dlYlBhZ2VQcm94eS5jcHAKaW5kZXggYWQ1NTdkOTBm
M2JmZDgyNWNmMmVkYTljYTQzOTM3MWYyZDgyYmUxOS4uMmVlODdiNTU0NzdlNTdlM2RkYmRiOWJj
MDNmMDdmMTk3NTU0MDY0YiAxMDA2NDQKLS0tIGEvU291cmNlL1dlYktpdC9VSVByb2Nlc3MvV2Vi
UGFnZVByb3h5LmNwcAorKysgYi9Tb3VyY2UvV2ViS2l0L1VJUHJvY2Vzcy9XZWJQYWdlUHJveHku
Y3BwCkBAIC00MzkwLDEwICs0MzkwLDcgQEAgdm9pZCBXZWJQYWdlUHJveHk6OnJ1bkphdmFTY3Jp
cHRJbkZyYW1lSW5TY3JpcHRXb3JsZChSdW5KYXZhU2NyaXB0UGFyYW1ldGVycyYmIHAKICAgICAg
ICAgICAgIHJldHVybiBjYWxsYmFja0Z1bmN0aW9uKG1ha2VVbmV4cGVjdGVkKFdURk1vdmUoKmRl
dGFpbHMpKSk7CiAgICAgICAgIGlmIChkYXRhUmVmZXJlbmNlLmVtcHR5KCkpCiAgICAgICAgICAg
ICByZXR1cm4gY2FsbGJhY2tGdW5jdGlvbih7IG51bGxwdHIgfSk7Ci0gICAgICAgIFZlY3Rvcjx1
aW50OF90PiBkYXRhOwotICAgICAgICBkYXRhLnJlc2VydmVJbml0aWFsQ2FwYWNpdHkoZGF0YVJl
ZmVyZW5jZS5zaXplKCkpOwotICAgICAgICBkYXRhLmFwcGVuZChkYXRhUmVmZXJlbmNlLmRhdGEo
KSwgZGF0YVJlZmVyZW5jZS5zaXplKCkpOwotICAgICAgICBjYWxsYmFja0Z1bmN0aW9uKHsgQVBJ
OjpTZXJpYWxpemVkU2NyaXB0VmFsdWU6OmFkb3B0KFdURk1vdmUoZGF0YSkpLnB0cigpIH0pOwor
ICAgICAgICBjYWxsYmFja0Z1bmN0aW9uKHsgQVBJOjpTZXJpYWxpemVkU2NyaXB0VmFsdWU6OmFk
b3B0KFZlY3RvcihkYXRhUmVmZXJlbmNlKSkucHRyKCkgfSk7CiAgICAgfSk7CiB9CiAKQEAgLTEw
NzAzLDExICsxMDcwMCw5IEBAIFdlYlBhZ2VQcm94eTo6U3BlZWNoU3ludGhlc2lzRGF0YSYgV2Vi
UGFnZVByb3h5OjpzcGVlY2hTeW50aGVzaXNEYXRhKCkKIAogdm9pZCBXZWJQYWdlUHJveHk6OnNw
ZWVjaFN5bnRoZXNpc1ZvaWNlTGlzdChDb21wbGV0aW9uSGFuZGxlcjx2b2lkKFZlY3RvcjxXZWJT
cGVlY2hTeW50aGVzaXNWb2ljZT4mJik+JiYgY29tcGxldGlvbkhhbmRsZXIpCiB7Ci0gICAgYXV0
byYgdm9pY2VMaXN0ID0gc3BlZWNoU3ludGhlc2lzRGF0YSgpLnN5bnRoZXNpemVyLT52b2ljZUxp
c3QoKTsKLSAgICBWZWN0b3I8V2ViU3BlZWNoU3ludGhlc2lzVm9pY2U+IHJlc3VsdDsKLSAgICBy
ZXN1bHQucmVzZXJ2ZUluaXRpYWxDYXBhY2l0eSh2b2ljZUxpc3Quc2l6ZSgpKTsKLSAgICBmb3Ig
KGF1dG8mIHZvaWNlIDogdm9pY2VMaXN0KQotICAgICAgICByZXN1bHQudW5jaGVja2VkQXBwZW5k
KFdlYlNwZWVjaFN5bnRoZXNpc1ZvaWNlIHsgdm9pY2UtPnZvaWNlVVJJKCksIHZvaWNlLT5uYW1l
KCksIHZvaWNlLT5sYW5nKCksIHZvaWNlLT5sb2NhbFNlcnZpY2UoKSwgdm9pY2UtPmlzRGVmYXVs
dCgpIH0pOworICAgIGF1dG8gcmVzdWx0ID0gc3BlZWNoU3ludGhlc2lzRGF0YSgpLnN5bnRoZXNp
emVyLT52b2ljZUxpc3QoKS5tYXAoW10oYXV0byYgdm9pY2UpIHsKKyAgICAgICAgcmV0dXJuIFdl
YlNwZWVjaFN5bnRoZXNpc1ZvaWNlIHsgdm9pY2UtPnZvaWNlVVJJKCksIHZvaWNlLT5uYW1lKCks
IHZvaWNlLT5sYW5nKCksIHZvaWNlLT5sb2NhbFNlcnZpY2UoKSwgdm9pY2UtPmlzRGVmYXVsdCgp
IH07CisgICAgfSk7CiAgICAgY29tcGxldGlvbkhhbmRsZXIoV1RGTW92ZShyZXN1bHQpKTsKIH0K
IApkaWZmIC0tZ2l0IGEvU291cmNlL1dlYktpdC9VSVByb2Nlc3MvV2Vic2l0ZURhdGEvV2Vic2l0
ZURhdGFTdG9yZS5jcHAgYi9Tb3VyY2UvV2ViS2l0L1VJUHJvY2Vzcy9XZWJzaXRlRGF0YS9XZWJz
aXRlRGF0YVN0b3JlLmNwcAppbmRleCA5ZWYxNGE1ZThmNjRkNzM5ZjRjZDMzMTYwODE3OGVhMDUx
MTI2ZWYwLi5iMzZkOWE3NGI5YTE3NWEwODE2YjdhMmUxNGYxMzlkYjVlZjU2ZTZkIDEwMDY0NAot
LS0gYS9Tb3VyY2UvV2ViS2l0L1VJUHJvY2Vzcy9XZWJzaXRlRGF0YS9XZWJzaXRlRGF0YVN0b3Jl
LmNwcAorKysgYi9Tb3VyY2UvV2ViS2l0L1VJUHJvY2Vzcy9XZWJzaXRlRGF0YS9XZWJzaXRlRGF0
YVN0b3JlLmNwcApAQCAtMzI0LDExICszMjQsOSBAQCB2b2lkIFdlYnNpdGVEYXRhU3RvcmU6OmZl
dGNoRGF0YUFuZEFwcGx5KE9wdGlvblNldDxXZWJzaXRlRGF0YVR5cGU+IGRhdGFUeXBlcywgTwog
ICAgICAgICB7CiAgICAgICAgICAgICBBU1NFUlQoUnVuTG9vcDo6aXNNYWluKCkpOwogCi0gICAg
ICAgICAgICBWZWN0b3I8V2Vic2l0ZURhdGFSZWNvcmQ+IHJlY29yZHM7Ci0gICAgICAgICAgICBy
ZWNvcmRzLnJlc2VydmVJbml0aWFsQ2FwYWNpdHkobV93ZWJzaXRlRGF0YVJlY29yZHMuc2l6ZSgp
KTsKLSAgICAgICAgICAgIGZvciAoYXV0byYgcmVjb3JkIDogbV93ZWJzaXRlRGF0YVJlY29yZHMu
dmFsdWVzKCkpCi0gICAgICAgICAgICAgICAgcmVjb3Jkcy51bmNoZWNrZWRBcHBlbmQobV9xdWV1
ZS5wdHIoKSAhPSAmV29ya1F1ZXVlOjptYWluKCkgPyBjcm9zc1RocmVhZENvcHkocmVjb3JkKSA6
IFdURk1vdmUocmVjb3JkKSk7Ci0KKyAgICAgICAgICAgIGF1dG8gcmVjb3JkcyA9IFdURjo6bWFw
KFdURk1vdmUobV93ZWJzaXRlRGF0YVJlY29yZHMpLCBbdGhpc10oYXV0byYmIGVudHJ5KSB7Cisg
ICAgICAgICAgICAgICAgcmV0dXJuIG1fcXVldWUucHRyKCkgIT0gJldvcmtRdWV1ZTo6bWFpbigp
ID8gY3Jvc3NUaHJlYWRDb3B5KFdURk1vdmUoZW50cnkudmFsdWUpKSA6IFdURk1vdmUoZW50cnku
dmFsdWUpOworICAgICAgICAgICAgfSk7CiAgICAgICAgICAgICBtX3F1ZXVlLT5kaXNwYXRjaChb
YXBwbHkgPSBXVEZNb3ZlKG1fYXBwbHkpLCByZWNvcmRzID0gV1RGTW92ZShyZWNvcmRzKV0gKCkg
bXV0YWJsZSB7CiAgICAgICAgICAgICAgICAgYXBwbHkoV1RGTW92ZShyZWNvcmRzKSk7CiAgICAg
ICAgICAgICB9KTsKQEAgLTE3MjgsMTEgKzE3MjYsOSBAQCB2b2lkIFdlYnNpdGVEYXRhU3RvcmU6
OnNldENhY2hlTW9kZWxTeW5jaHJvbm91c2x5Rm9yVGVzdGluZyhDYWNoZU1vZGVsIGNhY2hlTW9k
ZQogCiBWZWN0b3I8V2Vic2l0ZURhdGFTdG9yZVBhcmFtZXRlcnM+IFdlYnNpdGVEYXRhU3RvcmU6
OnBhcmFtZXRlcnNGcm9tRWFjaFdlYnNpdGVEYXRhU3RvcmUoKQogewotICAgIFZlY3RvcjxXZWJz
aXRlRGF0YVN0b3JlUGFyYW1ldGVycz4gcGFyYW1ldGVyczsKLSAgICBwYXJhbWV0ZXJzLnJlc2Vy
dmVJbml0aWFsQ2FwYWNpdHkoYWxsRGF0YVN0b3JlcygpLnNpemUoKSk7Ci0gICAgZm9yIChhdXRv
KiBkYXRhU3RvcmUgOiBhbGxEYXRhU3RvcmVzKCkudmFsdWVzKCkpCi0gICAgICAgIHBhcmFtZXRl
cnMudW5jaGVja2VkQXBwZW5kKGRhdGFTdG9yZS0+cGFyYW1ldGVycygpKTsKLSAgICByZXR1cm4g
cGFyYW1ldGVyczsKKyAgICByZXR1cm4gV1RGOjptYXAoYWxsRGF0YVN0b3JlcygpLCBbXShhdXRv
JiBlbnRyeSkgeworICAgICAgICByZXR1cm4gZW50cnkudmFsdWUtPnBhcmFtZXRlcnMoKTsKKyAg
ICB9KTsKIH0KIAogV2Vic2l0ZURhdGFTdG9yZVBhcmFtZXRlcnMgV2Vic2l0ZURhdGFTdG9yZTo6
cGFyYW1ldGVycygpCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViS2l0L1VJUHJvY2Vzcy9tYWMvV0tU
ZXh0RmluZGVyQ2xpZW50Lm1tIGIvU291cmNlL1dlYktpdC9VSVByb2Nlc3MvbWFjL1dLVGV4dEZp
bmRlckNsaWVudC5tbQppbmRleCBjMDM3ZDY1YjJiYzBmM2MwYTFlYTEyNmVmZDIxODI3ZGEyMWFh
YmI5Li43MjA3NWZiYzg2MmMzNGQwYzg2YjRhYzUzOGU0YzQ2Njk5Y2JlZTQyIDEwMDY0NAotLS0g
YS9Tb3VyY2UvV2ViS2l0L1VJUHJvY2Vzcy9tYWMvV0tUZXh0RmluZGVyQ2xpZW50Lm1tCisrKyBi
L1NvdXJjZS9XZWJLaXQvVUlQcm9jZXNzL21hYy9XS1RleHRGaW5kZXJDbGllbnQubW0KQEAgLTE5
MSw3ICsxOTEsNyBAQCAtICh2b2lkKXdpbGxEZXN0cm95VmlldzooTlNWaWV3ICopdmlldwogLSAo
dm9pZClyZXBsYWNlTWF0Y2hlczooTlNBcnJheSAqKW1hdGNoZXMgd2l0aFN0cmluZzooTlNTdHJp
bmcgKilyZXBsYWNlbWVudFRleHQgaW5TZWxlY3Rpb25Pbmx5OihCT09MKXNlbGVjdGlvbk9ubHkg
cmVzdWx0Q29sbGVjdG9yOih2b2lkICheKShOU1VJbnRlZ2VyIHJlcGxhY2VtZW50Q291bnQpKXJl
c3VsdENvbGxlY3RvcgogewogICAgIFZlY3Rvcjx1aW50MzJfdD4gbWF0Y2hJbmRpY2VzOwotICAg
IG1hdGNoSW5kaWNlcy5yZXNlcnZlQ2FwYWNpdHkobWF0Y2hlcy5jb3VudCk7CisgICAgbWF0Y2hJ
bmRpY2VzLnJlc2VydmVJbml0aWFsQ2FwYWNpdHkobWF0Y2hlcy5jb3VudCk7CiAgICAgZm9yIChp
ZCBtYXRjaCBpbiBtYXRjaGVzKSB7CiAgICAgICAgIGlmIChbbWF0Y2ggaXNLaW5kT2ZDbGFzczpX
S1RleHRGaW5kZXJNYXRjaC5jbGFzc10pCiAgICAgICAgICAgICBtYXRjaEluZGljZXMudW5jaGVj
a2VkQXBwZW5kKFsoV0tUZXh0RmluZGVyTWF0Y2ggKiltYXRjaCBpbmRleF0pOwpkaWZmIC0tZ2l0
IGEvU291cmNlL1dlYktpdC9XZWJQcm9jZXNzL0dQVS9tZWRpYS9SZW1vdGVSZW1vdGVDb21tYW5k
TGlzdGVuZXIuY3BwIGIvU291cmNlL1dlYktpdC9XZWJQcm9jZXNzL0dQVS9tZWRpYS9SZW1vdGVS
ZW1vdGVDb21tYW5kTGlzdGVuZXIuY3BwCmluZGV4IDc3MTBhM2E0NDEwMDFhZmM2ZGZkMGNkZDI1
Y2EzYjhlZWY3YThmYWUuLjEwMzA0ODIxZDg3OTM2YzBmN2U4NTA0NTIxNzkwYzM3YjI1NGY2MTAg
MTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJLaXQvV2ViUHJvY2Vzcy9HUFUvbWVkaWEvUmVtb3RlUmVt
b3RlQ29tbWFuZExpc3RlbmVyLmNwcAorKysgYi9Tb3VyY2UvV2ViS2l0L1dlYlByb2Nlc3MvR1BV
L21lZGlhL1JlbW90ZVJlbW90ZUNvbW1hbmRMaXN0ZW5lci5jcHAKQEAgLTk0LDEyICs5NCw3IEBA
IHZvaWQgUmVtb3RlUmVtb3RlQ29tbWFuZExpc3RlbmVyOjp1cGRhdGVTdXBwb3J0ZWRDb21tYW5k
cygpCiAgICAgbV9jdXJyZW50Q29tbWFuZHMgPSBzdXBwb3J0ZWRDb21tYW5kczsKICAgICBtX2N1
cnJlbnRTdXBwb3J0U2Vla2luZyA9IHN1cHBvcnRzU2Vla2luZygpOwogCi0gICAgVmVjdG9yPFBs
YXRmb3JtTWVkaWFTZXNzaW9uOjpSZW1vdGVDb250cm9sQ29tbWFuZFR5cGU+IGNvbW1hbmRzOwot
ICAgIGNvbW1hbmRzLnJlc2VydmVJbml0aWFsQ2FwYWNpdHkoc3VwcG9ydGVkQ29tbWFuZHMuc2l6
ZSgpKTsKLSAgICBmb3IgKGF1dG8gY29tbWFuZCA6IHN1cHBvcnRlZENvbW1hbmRzKQotICAgICAg
ICBjb21tYW5kcy51bmNoZWNrZWRBcHBlbmQoY29tbWFuZCk7Ci0KLSAgICBlbnN1cmVHUFVQcm9j
ZXNzQ29ubmVjdGlvbigpLmNvbm5lY3Rpb24oKS5zZW5kKE1lc3NhZ2VzOjpSZW1vdGVSZW1vdGVD
b21tYW5kTGlzdGVuZXJQcm94eTo6VXBkYXRlU3VwcG9ydGVkQ29tbWFuZHMgeyBXVEZNb3ZlKGNv
bW1hbmRzKSwgbV9jdXJyZW50U3VwcG9ydFNlZWtpbmcgfSwgbV9pZGVudGlmaWVyKTsKKyAgICBl
bnN1cmVHUFVQcm9jZXNzQ29ubmVjdGlvbigpLmNvbm5lY3Rpb24oKS5zZW5kKE1lc3NhZ2VzOjpS
ZW1vdGVSZW1vdGVDb21tYW5kTGlzdGVuZXJQcm94eTo6VXBkYXRlU3VwcG9ydGVkQ29tbWFuZHMg
eyBjb3B5VG9WZWN0b3Ioc3VwcG9ydGVkQ29tbWFuZHMpLCBtX2N1cnJlbnRTdXBwb3J0U2Vla2lu
ZyB9LCBtX2lkZW50aWZpZXIpOwogfQogCiB9CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViS2l0L1dl
YlByb2Nlc3MvSW5qZWN0ZWRCdW5kbGUvQVBJL2MvV0tCdW5kbGVQYWdlLmNwcCBiL1NvdXJjZS9X
ZWJLaXQvV2ViUHJvY2Vzcy9JbmplY3RlZEJ1bmRsZS9BUEkvYy9XS0J1bmRsZVBhZ2UuY3BwCmlu
ZGV4IDI3ZjY0NDAwZGEzNjJhYWU2ZmI4MjI1MzQxMmZmYzlmYTNhMzFiZGEuLmM4YmNmMTQ3YjVl
ZjUxNDJlMjhmZDRiZDI2MGQ3NDY1M2Y1MDg1OGIgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJLaXQv
V2ViUHJvY2Vzcy9JbmplY3RlZEJ1bmRsZS9BUEkvYy9XS0J1bmRsZVBhZ2UuY3BwCisrKyBiL1Nv
dXJjZS9XZWJLaXQvV2ViUHJvY2Vzcy9JbmplY3RlZEJ1bmRsZS9BUEkvYy9XS0J1bmRsZVBhZ2Uu
Y3BwCkBAIC0xODcsMTQgKzE4Nyw5IEBAIHZvaWQgV0tCdW5kbGVQYWdlQ2xpY2tNZW51SXRlbShX
S0J1bmRsZVBhZ2VSZWYgcGFnZVJlZiwgV0tDb250ZXh0TWVudUl0ZW1SZWYgaXRlCiAjaWYgRU5B
QkxFKENPTlRFWFRfTUVOVVMpCiBzdGF0aWMgUmVmPEFQSTo6QXJyYXk+IGNvbnRleHRNZW51SXRl
bXMoY29uc3QgV2ViS2l0OjpXZWJDb250ZXh0TWVudSYgY29udGV4dE1lbnUpCiB7Ci0gICAgYXV0
byBpdGVtcyA9IGNvbnRleHRNZW51Lml0ZW1zKCk7Ci0KLSAgICBWZWN0b3I8UmVmUHRyPEFQSTo6
T2JqZWN0Pj4gbWVudUl0ZW1zOwotICAgIG1lbnVJdGVtcy5yZXNlcnZlSW5pdGlhbENhcGFjaXR5
KGl0ZW1zLnNpemUoKSk7Ci0KLSAgICBmb3IgKGNvbnN0IGF1dG8mIGl0ZW0gOiBpdGVtcykKLSAg
ICAgICAgbWVudUl0ZW1zLnVuY2hlY2tlZEFwcGVuZChXZWJLaXQ6OldlYkNvbnRleHRNZW51SXRl
bTo6Y3JlYXRlKGl0ZW0pKTsKLQorICAgIGF1dG8gbWVudUl0ZW1zID0gY29udGV4dE1lbnUuaXRl
bXMoKS5tYXAoW10oYXV0byYgaXRlbSkgLT4gUmVmUHRyPEFQSTo6T2JqZWN0PiB7CisgICAgICAg
IHJldHVybiBXZWJLaXQ6OldlYkNvbnRleHRNZW51SXRlbTo6Y3JlYXRlKGl0ZW0pOworICAgIH0p
OwogICAgIHJldHVybiBBUEk6OkFycmF5OjpjcmVhdGUoV1RGTW92ZShtZW51SXRlbXMpKTsKIH0K
ICNlbmRpZgpAQCAtODQ1LDEzICs4NDAsOSBAQCB2b2lkIFdLQnVuZGxlUGFnZVJlc2V0QXBwbGlj
YXRpb25DYWNoZU9yaWdpblF1b3RhKFdLQnVuZGxlUGFnZVJlZiBwYWdlLCBXS1N0cmluZwogV0tB
cnJheVJlZiBXS0J1bmRsZVBhZ2VDb3B5T3JpZ2luc1dpdGhBcHBsaWNhdGlvbkNhY2hlKFdLQnVu
ZGxlUGFnZVJlZiBwYWdlKQogewogICAgIGF1dG8gb3JpZ2lucyA9IFdlYktpdDo6dG9JbXBsKHBh
Z2UpLT5jb3JlUGFnZSgpLT5hcHBsaWNhdGlvbkNhY2hlU3RvcmFnZSgpLm9yaWdpbnNXaXRoQ2Fj
aGUoKTsKLQotICAgIFZlY3RvcjxSZWZQdHI8QVBJOjpPYmplY3Q+PiBvcmlnaW5JZGVudGlmaWVy
czsKLSAgICBvcmlnaW5JZGVudGlmaWVycy5yZXNlcnZlSW5pdGlhbENhcGFjaXR5KG9yaWdpbnMu
c2l6ZSgpKTsKLQotICAgIGZvciAoY29uc3QgYXV0byYgb3JpZ2luIDogb3JpZ2lucykKLSAgICAg
ICAgb3JpZ2luSWRlbnRpZmllcnMudW5jaGVja2VkQXBwZW5kKEFQSTo6U3RyaW5nOjpjcmVhdGUo
b3JpZ2luLmRhdGFiYXNlSWRlbnRpZmllcigpKSk7Ci0KKyAgICBhdXRvIG9yaWdpbklkZW50aWZp
ZXJzID0gV1RGOjptYXAob3JpZ2lucywgW10oYXV0byYgb3JpZ2luKSAtPiBSZWZQdHI8QVBJOjpP
YmplY3Q+IHsKKyAgICAgICAgcmV0dXJuIEFQSTo6U3RyaW5nOjpjcmVhdGUob3JpZ2luLmRhdGFi
YXNlSWRlbnRpZmllcigpKTsKKyAgICB9KTsKICAgICByZXR1cm4gV2ViS2l0Ojp0b0FQSSgmQVBJ
OjpBcnJheTo6Y3JlYXRlKFdURk1vdmUob3JpZ2luSWRlbnRpZmllcnMpKS5sZWFrUmVmKCkpOwog
fQogCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViS2l0L1dlYlByb2Nlc3MvSW5qZWN0ZWRCdW5kbGUv
SW5qZWN0ZWRCdW5kbGVQYWdlQ29udGV4dE1lbnVDbGllbnQuY3BwIGIvU291cmNlL1dlYktpdC9X
ZWJQcm9jZXNzL0luamVjdGVkQnVuZGxlL0luamVjdGVkQnVuZGxlUGFnZUNvbnRleHRNZW51Q2xp
ZW50LmNwcAppbmRleCA5MDViNjZlNjVhY2RlNjEyZmY4MWVjMmFkNDRlZjg4NTVkN2FlMmQ4Li5k
MjdkYzRhMDEzZjFhZWM4ZTc3YjYwMGQyZGRjN2MwZGFlNzFmNzM2IDEwMDY0NAotLS0gYS9Tb3Vy
Y2UvV2ViS2l0L1dlYlByb2Nlc3MvSW5qZWN0ZWRCdW5kbGUvSW5qZWN0ZWRCdW5kbGVQYWdlQ29u
dGV4dE1lbnVDbGllbnQuY3BwCisrKyBiL1NvdXJjZS9XZWJLaXQvV2ViUHJvY2Vzcy9JbmplY3Rl
ZEJ1bmRsZS9JbmplY3RlZEJ1bmRsZVBhZ2VDb250ZXh0TWVudUNsaWVudC5jcHAKQEAgLTUxLDEx
ICs1MSw5IEBAIGJvb2wgSW5qZWN0ZWRCdW5kbGVQYWdlQ29udGV4dE1lbnVDbGllbnQ6OmdldEN1
c3RvbU1lbnVGcm9tRGVmYXVsdEl0ZW1zKFdlYlBhZ2UmCiAgICAgaWYgKCFtX2NsaWVudC5nZXRD
b250ZXh0TWVudUZyb21EZWZhdWx0TWVudSkKICAgICAgICAgcmV0dXJuIGZhbHNlOwogCi0gICAg
VmVjdG9yPFdlYkNvbnRleHRNZW51SXRlbURhdGE+IGRlZmF1bHRNZW51ID0ga2l0SXRlbXMocHJv
cG9zZWRNZW51KTsKLSAgICBWZWN0b3I8UmVmUHRyPEFQSTo6T2JqZWN0Pj4gZGVmYXVsdE1lbnVJ
dGVtczsKLSAgICBkZWZhdWx0TWVudUl0ZW1zLnJlc2VydmVJbml0aWFsQ2FwYWNpdHkoZGVmYXVs
dE1lbnUuc2l6ZSgpKTsKLSAgICBmb3IgKGNvbnN0IGF1dG8mIGl0ZW0gOiBkZWZhdWx0TWVudSkK
LSAgICAgICAgZGVmYXVsdE1lbnVJdGVtcy51bmNoZWNrZWRBcHBlbmQoV2ViQ29udGV4dE1lbnVJ
dGVtOjpjcmVhdGUoaXRlbSkpOworICAgIGF1dG8gZGVmYXVsdE1lbnVJdGVtcyA9IGtpdEl0ZW1z
KHByb3Bvc2VkTWVudSkubWFwKFtdKGF1dG8mIGl0ZW0pIC0+IFJlZlB0cjxBUEk6Ok9iamVjdD4g
eworICAgICAgICByZXR1cm4gV2ViQ29udGV4dE1lbnVJdGVtOjpjcmVhdGUoaXRlbSk7CisgICAg
fSk7CiAKICAgICBXS0FycmF5UmVmIG5ld01lbnVXSyA9IG51bGxwdHI7CiAgICAgV0tUeXBlUmVm
IHVzZXJEYXRhVG9QYXNzID0gbnVsbHB0cjsKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJLaXQvV2Vi
UHJvY2Vzcy9JbmplY3RlZEJ1bmRsZS9JbmplY3RlZEJ1bmRsZVBhZ2VGb3JtQ2xpZW50LmNwcCBi
L1NvdXJjZS9XZWJLaXQvV2ViUHJvY2Vzcy9JbmplY3RlZEJ1bmRsZS9JbmplY3RlZEJ1bmRsZVBh
Z2VGb3JtQ2xpZW50LmNwcAppbmRleCAxMGY4ZmVmOTI3OWVjNTVhMzJmNjU0ZGQ3OTM0NDg4YTA2
MDc1MTgyLi4xZDg2MjUyNzQzZTg0MGNhOTliNmQzMmZkNzNkYzA0Y2ZkYjliN2ZjIDEwMDY0NAot
LS0gYS9Tb3VyY2UvV2ViS2l0L1dlYlByb2Nlc3MvSW5qZWN0ZWRCdW5kbGUvSW5qZWN0ZWRCdW5k
bGVQYWdlRm9ybUNsaWVudC5jcHAKKysrIGIvU291cmNlL1dlYktpdC9XZWJQcm9jZXNzL0luamVj
dGVkQnVuZGxlL0luamVjdGVkQnVuZGxlUGFnZUZvcm1DbGllbnQuY3BwCkBAIC0xNjIsMTIgKzE2
Miw5IEBAIHZvaWQgSW5qZWN0ZWRCdW5kbGVQYWdlRm9ybUNsaWVudDo6ZGlkQXNzb2NpYXRlRm9y
bUNvbnRyb2xzKFdlYlBhZ2UqIHBhZ2UsIGNvbnN0CiAgICAgaWYgKCFtX2NsaWVudC5kaWRBc3Nv
Y2lhdGVGb3JtQ29udHJvbHMgJiYgIW1fY2xpZW50LmRpZEFzc29jaWF0ZUZvcm1Db250cm9sc0Zv
ckZyYW1lKQogICAgICAgICByZXR1cm47CiAKLSAgICBWZWN0b3I8UmVmUHRyPEFQSTo6T2JqZWN0
Pj4gZWxlbWVudEhhbmRsZXM7Ci0gICAgZWxlbWVudEhhbmRsZXMucmVzZXJ2ZUluaXRpYWxDYXBh
Y2l0eShlbGVtZW50cy5zaXplKCkpOwotCi0gICAgZm9yIChjb25zdCBhdXRvJiBlbGVtZW50IDog
ZWxlbWVudHMpCi0gICAgICAgIGVsZW1lbnRIYW5kbGVzLnVuY2hlY2tlZEFwcGVuZChJbmplY3Rl
ZEJ1bmRsZU5vZGVIYW5kbGU6OmdldE9yQ3JlYXRlKGVsZW1lbnQuZ2V0KCkpKTsKLQorICAgIGF1
dG8gZWxlbWVudEhhbmRsZXMgPSBlbGVtZW50cy5tYXAoW10oYXV0byYgZWxlbWVudCkgLT4gUmVm
UHRyPEFQSTo6T2JqZWN0PiB7CisgICAgICAgIHJldHVybiBJbmplY3RlZEJ1bmRsZU5vZGVIYW5k
bGU6OmdldE9yQ3JlYXRlKGVsZW1lbnQuZ2V0KCkpOworICAgIH0pOwogICAgIGlmICghbV9jbGll
bnQuZGlkQXNzb2NpYXRlRm9ybUNvbnRyb2xzRm9yRnJhbWUpIHsKICAgICAgICAgbV9jbGllbnQu
ZGlkQXNzb2NpYXRlRm9ybUNvbnRyb2xzKHRvQVBJKHBhZ2UpLCB0b0FQSShBUEk6OkFycmF5Ojpj
cmVhdGUoV1RGTW92ZShlbGVtZW50SGFuZGxlcykpLnB0cigpKSwgbV9jbGllbnQuYmFzZS5jbGll
bnRJbmZvKTsKICAgICAgICAgcmV0dXJuOwpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYktpdC9XZWJQ
cm9jZXNzL05ldHdvcmsvV2ViU29ja2V0U3RyZWFtLmNwcCBiL1NvdXJjZS9XZWJLaXQvV2ViUHJv
Y2Vzcy9OZXR3b3JrL1dlYlNvY2tldFN0cmVhbS5jcHAKaW5kZXggMDViNGQ3NTkyNzYyODIyNmVi
NDA0NjhlODUxZDAzMjZhOTVhM2I1NS4uY2ViZDk3YWFkOGNhYjI1ZjZjZWRlMGUzZTcwNzk1ZmNm
NzI3MDM0ZSAxMDA2NDQKLS0tIGEvU291cmNlL1dlYktpdC9XZWJQcm9jZXNzL05ldHdvcmsvV2Vi
U29ja2V0U3RyZWFtLmNwcAorKysgYi9Tb3VyY2UvV2ViS2l0L1dlYlByb2Nlc3MvTmV0d29yay9X
ZWJTb2NrZXRTdHJlYW0uY3BwCkBAIC01OCw5ICs1OCw3IEBAIHZvaWQgV2ViU29ja2V0U3RyZWFt
OjpuZXR3b3JrUHJvY2Vzc0NyYXNoZWQoKQogICAgIFZlY3RvcjxSZWZQdHI8V2ViU29ja2V0U3Ry
ZWFtPj4gc29ja2V0czsKICAgICB7CiAgICAgICAgIExvY2tlciBzdGF0ZUxvY2tlciB7IGdsb2Jh
bFdlYlNvY2tldFN0cmVhbU1hcExvY2sgfTsKLSAgICAgICAgc29ja2V0cy5yZXNlcnZlSW5pdGlh
bENhcGFjaXR5KGdsb2JhbFdlYlNvY2tldFN0cmVhbU1hcCgpLnNpemUoKSk7Ci0gICAgICAgIGZv
ciAoYXV0byYgc3RyZWFtIDogZ2xvYmFsV2ViU29ja2V0U3RyZWFtTWFwKCkudmFsdWVzKCkpCi0g
ICAgICAgICAgICBzb2NrZXRzLnVuY2hlY2tlZEFwcGVuZChzdHJlYW0pOworICAgICAgICBzb2Nr
ZXRzID0gY29weVRvVmVjdG9yT2Y8UmVmUHRyPFdlYlNvY2tldFN0cmVhbT4+KGdsb2JhbFdlYlNv
Y2tldFN0cmVhbU1hcCgpLnZhbHVlcygpKTsKICAgICB9CiAKICAgICBmb3IgKGF1dG8mIHN0cmVh
bSA6IHNvY2tldHMpIHsKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJLaXQvV2ViUHJvY2Vzcy9OZXR3
b3JrL3dlYnJ0Yy9XZWJSVENSZXNvbHZlci5jcHAgYi9Tb3VyY2UvV2ViS2l0L1dlYlByb2Nlc3Mv
TmV0d29yay93ZWJydGMvV2ViUlRDUmVzb2x2ZXIuY3BwCmluZGV4IDc0N2IxNmI2MGEyNGQ4ZTM0
MGE0MWU2ZWZmMzg1MTViM2EyYzJlY2UuLjY3YmVlMGJkMTg2NTg4YTliZjhjMzZlNDczZGIyMjU3
Y2FjNDc4ZTUgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJLaXQvV2ViUHJvY2Vzcy9OZXR3b3JrL3dl
YnJ0Yy9XZWJSVENSZXNvbHZlci5jcHAKKysrIGIvU291cmNlL1dlYktpdC9XZWJQcm9jZXNzL05l
dHdvcmsvd2VicnRjL1dlYlJUQ1Jlc29sdmVyLmNwcApAQCAtNDYsMTEgKzQ2LDkgQEAgdm9pZCBX
ZWJSVENSZXNvbHZlcjo6c2V0UmVzb2x2ZWRBZGRyZXNzKGNvbnN0IFZlY3RvcjxSVENOZXR3b3Jr
OjpJUEFkZHJlc3M+JiBhZGQKICAgICBhdXRvIGlkZW50aWZpZXIgPSBtX2lkZW50aWZpZXI7CiAg
ICAgYXV0byYgZmFjdG9yeSA9IG1fc29ja2V0RmFjdG9yeTsKIAotICAgIFZlY3RvcjxydGM6OklQ
QWRkcmVzcz4gcnRjQWRkcmVzc2VzOwotICAgIHJ0Y0FkZHJlc3Nlcy5yZXNlcnZlSW5pdGlhbENh
cGFjaXR5KGFkZHJlc3Nlcy5zaXplKCkpOwotICAgIGZvciAoYXV0byYgYWRkcmVzcyA6IGFkZHJl
c3NlcykKLSAgICAgICAgcnRjQWRkcmVzc2VzLnVuY2hlY2tlZEFwcGVuZChhZGRyZXNzLnZhbHVl
KTsKLSAgICAKKyAgICBhdXRvIHJ0Y0FkZHJlc3NlcyA9IGFkZHJlc3Nlcy5tYXAoW10oYXV0byYg
YWRkcmVzcykgeworICAgICAgICByZXR1cm4gYWRkcmVzcy52YWx1ZTsKKyAgICB9KTsKICAgICBX
ZWJDb3JlOjpMaWJXZWJSVENQcm92aWRlcjo6Y2FsbE9uV2ViUlRDTmV0d29ya1RocmVhZChbJmZh
Y3RvcnksIGlkZW50aWZpZXIsIHJ0Y0FkZHJlc3NlcyA9IFdURk1vdmUocnRjQWRkcmVzc2VzKV0o
KSB7CiAgICAgICAgIGF1dG8qIHJlc29sdmVyID0gZmFjdG9yeS5yZXNvbHZlcihpZGVudGlmaWVy
KTsKICAgICAgICAgaWYgKCFyZXNvbHZlcikKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJLaXQvV2Vi
UHJvY2Vzcy9XZWJDb3JlU3VwcG9ydC9XZWJSZXNvdXJjZUxvYWRPYnNlcnZlci5jcHAgYi9Tb3Vy
Y2UvV2ViS2l0L1dlYlByb2Nlc3MvV2ViQ29yZVN1cHBvcnQvV2ViUmVzb3VyY2VMb2FkT2JzZXJ2
ZXIuY3BwCmluZGV4IDNlZjE0ZGQyM2I5YzdhZWFiNWIwNjlkYmExNWU3YjU3YTEwMjEzYjMuLjIy
NDI5OTNlZTc3MTE4ZDAwOTc3ZGIzNmUwM2M4MzgwZTgwNTU4YjUgMTAwNjQ0Ci0tLSBhL1NvdXJj
ZS9XZWJLaXQvV2ViUHJvY2Vzcy9XZWJDb3JlU3VwcG9ydC9XZWJSZXNvdXJjZUxvYWRPYnNlcnZl
ci5jcHAKKysrIGIvU291cmNlL1dlYktpdC9XZWJQcm9jZXNzL1dlYkNvcmVTdXBwb3J0L1dlYlJl
c291cmNlTG9hZE9ic2VydmVyLmNwcApAQCAtMTI3LDEyICsxMjcsOSBAQCBTdHJpbmcgV2ViUmVz
b3VyY2VMb2FkT2JzZXJ2ZXI6OnN0YXRpc3RpY3NGb3JVUkwoY29uc3QgVVJMJiB1cmwpCiAKIFZl
Y3RvcjxSZXNvdXJjZUxvYWRTdGF0aXN0aWNzPiBXZWJSZXNvdXJjZUxvYWRPYnNlcnZlcjo6dGFr
ZVN0YXRpc3RpY3MoKQogewotICAgIFZlY3RvcjxSZXNvdXJjZUxvYWRTdGF0aXN0aWNzPiBzdGF0
aXN0aWNzOwotICAgIHN0YXRpc3RpY3MucmVzZXJ2ZUluaXRpYWxDYXBhY2l0eShtX3Jlc291cmNl
U3RhdGlzdGljc01hcC5zaXplKCkpOwotICAgIGZvciAoYXV0byYgc3RhdGlzdGljIDogbV9yZXNv
dXJjZVN0YXRpc3RpY3NNYXAudmFsdWVzKCkpCi0gICAgICAgIHN0YXRpc3RpY3MudW5jaGVja2Vk
QXBwZW5kKFJlc291cmNlTG9hZFN0YXRpc3RpY3MoV1RGTW92ZSgqc3RhdGlzdGljKSkpOwotICAg
IG1fcmVzb3VyY2VTdGF0aXN0aWNzTWFwLmNsZWFyKCk7Ci0gICAgcmV0dXJuIHN0YXRpc3RpY3M7
CisgICAgcmV0dXJuIFdURjo6bWFwKHN0ZDo6ZXhjaGFuZ2UobV9yZXNvdXJjZVN0YXRpc3RpY3NN
YXAsIHsgfSksIFtdKGF1dG8mJiBlbnRyeSkgeworICAgICAgICByZXR1cm4gUmVzb3VyY2VMb2Fk
U3RhdGlzdGljcyB7IFdURk1vdmUoKmVudHJ5LnZhbHVlKSB9OworICAgIH0pOwogfQogCiB2b2lk
IFdlYlJlc291cmNlTG9hZE9ic2VydmVyOjpjbGVhclN0YXRlKCkKZGlmZiAtLWdpdCBhL1NvdXJj
ZS9XZWJLaXQvV2ViUHJvY2Vzcy9XZWJQYWdlL0ZpbmRDb250cm9sbGVyLmNwcCBiL1NvdXJjZS9X
ZWJLaXQvV2ViUHJvY2Vzcy9XZWJQYWdlL0ZpbmRDb250cm9sbGVyLmNwcAppbmRleCBjNTNmM2Vi
ZjU5ZDNlOWU3NTYyNGM1MzkwMjJjMTUyYThlNDU5MDJiLi5iNTEzNGQwZDJjNWQ3YzUyZjZmYWM5
NjgwNDQxYWNjM2VlYmY2NWZkIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViS2l0L1dlYlByb2Nlc3Mv
V2ViUGFnZS9GaW5kQ29udHJvbGxlci5jcHAKKysrIGIvU291cmNlL1dlYktpdC9XZWJQcm9jZXNz
L1dlYlBhZ2UvRmluZENvbnRyb2xsZXIuY3BwCkBAIC05OCw3ICs5OCw3IEBAIHVpbnQzMl90IEZp
bmRDb250cm9sbGVyOjpyZXBsYWNlTWF0Y2hlcyhjb25zdCBWZWN0b3I8dWludDMyX3Q+JiBtYXRj
aEluZGljZXMsIGNvCiAgICAgY29uc3QgdWludDMyX3QgbWF4aW11bU51bWJlck9mTWF0Y2hlc1Rv
UmVwbGFjZSA9IDEwMDA7CiAKICAgICBWZWN0b3I8U2ltcGxlUmFuZ2U+IHJhbmdlc1RvUmVwbGFj
ZTsKLSAgICByYW5nZXNUb1JlcGxhY2UucmVzZXJ2ZUNhcGFjaXR5KHN0ZDo6bWluPHVpbnQzMl90
PihtYXhpbXVtTnVtYmVyT2ZNYXRjaGVzVG9SZXBsYWNlLCBtYXRjaEluZGljZXMuc2l6ZSgpKSk7
CisgICAgcmFuZ2VzVG9SZXBsYWNlLnJlc2VydmVJbml0aWFsQ2FwYWNpdHkoc3RkOjptaW48dWlu
dDMyX3Q+KG1heGltdW1OdW1iZXJPZk1hdGNoZXNUb1JlcGxhY2UsIG1hdGNoSW5kaWNlcy5zaXpl
KCkpKTsKICAgICBmb3IgKGF1dG8gaW5kZXggOiBtYXRjaEluZGljZXMpIHsKICAgICAgICAgaWYg
KGluZGV4IDwgbV9maW5kTWF0Y2hlcy5zaXplKCkpCiAgICAgICAgICAgICByYW5nZXNUb1JlcGxh
Y2UudW5jaGVja2VkQXBwZW5kKG1fZmluZE1hdGNoZXNbaW5kZXhdKTsKZGlmZiAtLWdpdCBhL1Nv
dXJjZS9XZWJLaXQvV2ViUHJvY2Vzcy9XZWJQYWdlL1JlbW90ZUxheWVyVHJlZS9QbGF0Zm9ybUNB
QW5pbWF0aW9uUmVtb3RlLm1tIGIvU291cmNlL1dlYktpdC9XZWJQcm9jZXNzL1dlYlBhZ2UvUmVt
b3RlTGF5ZXJUcmVlL1BsYXRmb3JtQ0FBbmltYXRpb25SZW1vdGUubW0KaW5kZXggMGJiNzkzOTYy
YmUzNGJjMjkyMzcxYTIyNTE2OTI5MGI0NjIwZDM3OC4uZGViMGU1OTZiY2NmMTQ1NTkxYWNkZmZm
ODJjZDAzOTNjMTU4OGNjZSAxMDA2NDQKLS0tIGEvU291cmNlL1dlYktpdC9XZWJQcm9jZXNzL1dl
YlBhZ2UvUmVtb3RlTGF5ZXJUcmVlL1BsYXRmb3JtQ0FBbmltYXRpb25SZW1vdGUubW0KKysrIGIv
U291cmNlL1dlYktpdC9XZWJQcm9jZXNzL1dlYlBhZ2UvUmVtb3RlTGF5ZXJUcmVlL1BsYXRmb3Jt
Q0FBbmltYXRpb25SZW1vdGUubW0KQEAgLTk4LDYgKzk4LDEzIEBAIEBlbmQKIG5hbWVzcGFjZSBX
ZWJLaXQgewogdXNpbmcgbmFtZXNwYWNlIFdlYkNvcmU7CiAKK3RlbXBsYXRlPHR5cGVuYW1lIFQ+
IHN0YXRpYyBWZWN0b3I8UGxhdGZvcm1DQUFuaW1hdGlvblJlbW90ZTo6S2V5ZnJhbWVWYWx1ZT4g
dG9LZXlmcmFtZVZhbHVlVmVjdG9yKGNvbnN0IFZlY3RvcjxUPiYgdmFsdWVzKQoreworICAgIHJl
dHVybiB2YWx1ZXMubWFwKFtdKGF1dG8mIHZhbHVlKSB7CisgICAgICAgIHJldHVybiBQbGF0Zm9y
bUNBQW5pbWF0aW9uUmVtb3RlOjpLZXlmcmFtZVZhbHVlIHsgdmFsdWUgfTsKKyAgICB9KTsKK30K
Kwogc3RhdGljIHZvaWQgZW5jb2RlVGltaW5nRnVuY3Rpb24oSVBDOjpFbmNvZGVyJiBlbmNvZGVy
LCBUaW1pbmdGdW5jdGlvbiogdGltaW5nRnVuY3Rpb24pCiB7CiAgICAgc3dpdGNoICh0aW1pbmdG
dW5jdGlvbi0+dHlwZSgpKSB7CkBAIC01NjEsMTMgKzU2OCw3IEBAIHZvaWQgUGxhdGZvcm1DQUFu
aW1hdGlvblJlbW90ZTo6c2V0VmFsdWVzKGNvbnN0IFZlY3RvcjxmbG9hdD4mIHZhbHVlcykKICAg
ICBpZiAoYW5pbWF0aW9uVHlwZSgpICE9IEtleWZyYW1lKQogICAgICAgICByZXR1cm47CiAKLSAg
ICBWZWN0b3I8S2V5ZnJhbWVWYWx1ZT4ga2V5ZnJhbWVzOwotICAgIGtleWZyYW1lcy5yZXNlcnZl
SW5pdGlhbENhcGFjaXR5KHZhbHVlcy5zaXplKCkpOwotICAgIAotICAgIGZvciAoc2l6ZV90IGkg
PSAwOyBpIDwgdmFsdWVzLnNpemUoKTsgKytpKQotICAgICAgICBrZXlmcmFtZXMudW5jaGVja2Vk
QXBwZW5kKEtleWZyYW1lVmFsdWUodmFsdWVzW2ldKSk7Ci0gICAgCi0gICAgbV9wcm9wZXJ0aWVz
LmtleVZhbHVlcyA9IFdURk1vdmUoa2V5ZnJhbWVzKTsKKyAgICBtX3Byb3BlcnRpZXMua2V5VmFs
dWVzID0gdG9LZXlmcmFtZVZhbHVlVmVjdG9yKHZhbHVlcyk7CiB9CiAKIHZvaWQgUGxhdGZvcm1D
QUFuaW1hdGlvblJlbW90ZTo6c2V0VmFsdWVzKGNvbnN0IFZlY3RvcjxUcmFuc2Zvcm1hdGlvbk1h
dHJpeD4mIHZhbHVlcykKQEAgLTU3NSwxMyArNTc2LDcgQEAgdm9pZCBQbGF0Zm9ybUNBQW5pbWF0
aW9uUmVtb3RlOjpzZXRWYWx1ZXMoY29uc3QgVmVjdG9yPFRyYW5zZm9ybWF0aW9uTWF0cml4PiYg
dmEKICAgICBpZiAoYW5pbWF0aW9uVHlwZSgpICE9IEtleWZyYW1lKQogICAgICAgICByZXR1cm47
CiAKLSAgICBWZWN0b3I8S2V5ZnJhbWVWYWx1ZT4ga2V5ZnJhbWVzOwotICAgIGtleWZyYW1lcy5y
ZXNlcnZlSW5pdGlhbENhcGFjaXR5KHZhbHVlcy5zaXplKCkpOwotICAgIAotICAgIGZvciAoc2l6
ZV90IGkgPSAwOyBpIDwgdmFsdWVzLnNpemUoKTsgKytpKQotICAgICAgICBrZXlmcmFtZXMudW5j
aGVja2VkQXBwZW5kKEtleWZyYW1lVmFsdWUodmFsdWVzW2ldKSk7Ci0gICAgCi0gICAgbV9wcm9w
ZXJ0aWVzLmtleVZhbHVlcyA9IFdURk1vdmUoa2V5ZnJhbWVzKTsKKyAgICBtX3Byb3BlcnRpZXMu
a2V5VmFsdWVzID0gdG9LZXlmcmFtZVZhbHVlVmVjdG9yKHZhbHVlcyk7CiB9CiAKIHZvaWQgUGxh
dGZvcm1DQUFuaW1hdGlvblJlbW90ZTo6c2V0VmFsdWVzKGNvbnN0IFZlY3RvcjxGbG9hdFBvaW50
M0Q+JiB2YWx1ZXMpCkBAIC01ODksMTMgKzU4NCw3IEBAIHZvaWQgUGxhdGZvcm1DQUFuaW1hdGlv
blJlbW90ZTo6c2V0VmFsdWVzKGNvbnN0IFZlY3RvcjxGbG9hdFBvaW50M0Q+JiB2YWx1ZXMpCiAg
ICAgaWYgKGFuaW1hdGlvblR5cGUoKSAhPSBLZXlmcmFtZSkKICAgICAgICAgcmV0dXJuOwogCi0g
ICAgVmVjdG9yPEtleWZyYW1lVmFsdWU+IGtleWZyYW1lczsKLSAgICBrZXlmcmFtZXMucmVzZXJ2
ZUluaXRpYWxDYXBhY2l0eSh2YWx1ZXMuc2l6ZSgpKTsKLSAgICAKLSAgICBmb3IgKHNpemVfdCBp
ID0gMDsgaSA8IHZhbHVlcy5zaXplKCk7ICsraSkKLSAgICAgICAga2V5ZnJhbWVzLnVuY2hlY2tl
ZEFwcGVuZChLZXlmcmFtZVZhbHVlKHZhbHVlc1tpXSkpOwotICAgIAotICAgIG1fcHJvcGVydGll
cy5rZXlWYWx1ZXMgPSBXVEZNb3ZlKGtleWZyYW1lcyk7CisgICAgbV9wcm9wZXJ0aWVzLmtleVZh
bHVlcyA9IHRvS2V5ZnJhbWVWYWx1ZVZlY3Rvcih2YWx1ZXMpOwogfQogCiB2b2lkIFBsYXRmb3Jt
Q0FBbmltYXRpb25SZW1vdGU6OnNldFZhbHVlcyhjb25zdCBWZWN0b3I8Q29sb3I+JiB2YWx1ZXMp
CkBAIC02MDMsMTMgKzU5Miw3IEBAIHZvaWQgUGxhdGZvcm1DQUFuaW1hdGlvblJlbW90ZTo6c2V0
VmFsdWVzKGNvbnN0IFZlY3RvcjxDb2xvcj4mIHZhbHVlcykKICAgICBpZiAoYW5pbWF0aW9uVHlw
ZSgpICE9IEtleWZyYW1lKQogICAgICAgICByZXR1cm47CiAKLSAgICBWZWN0b3I8S2V5ZnJhbWVW
YWx1ZT4ga2V5ZnJhbWVzOwotICAgIGtleWZyYW1lcy5yZXNlcnZlSW5pdGlhbENhcGFjaXR5KHZh
bHVlcy5zaXplKCkpOwotICAgIAotICAgIGZvciAoc2l6ZV90IGkgPSAwOyBpIDwgdmFsdWVzLnNp
emUoKTsgKytpKQotICAgICAgICBrZXlmcmFtZXMudW5jaGVja2VkQXBwZW5kKEtleWZyYW1lVmFs
dWUodmFsdWVzW2ldKSk7Ci0gICAgCi0gICAgbV9wcm9wZXJ0aWVzLmtleVZhbHVlcyA9IFdURk1v
dmUoa2V5ZnJhbWVzKTsKKyAgICBtX3Byb3BlcnRpZXMua2V5VmFsdWVzID0gdG9LZXlmcmFtZVZh
bHVlVmVjdG9yKHZhbHVlcyk7CiB9CiAKIHZvaWQgUGxhdGZvcm1DQUFuaW1hdGlvblJlbW90ZTo6
c2V0VmFsdWVzKGNvbnN0IFZlY3RvcjxSZWZQdHI8RmlsdGVyT3BlcmF0aW9uPj4mIHZhbHVlcywg
aW50IGludGVybmFsRmlsdGVyUHJvcGVydHlJbmRleCkKQEAgLTYxOSwxMyArNjAyLDcgQEAgdm9p
ZCBQbGF0Zm9ybUNBQW5pbWF0aW9uUmVtb3RlOjpzZXRWYWx1ZXMoY29uc3QgVmVjdG9yPFJlZlB0
cjxGaWx0ZXJPcGVyYXRpb24+PiYKICAgICBpZiAoYW5pbWF0aW9uVHlwZSgpICE9IEtleWZyYW1l
KQogICAgICAgICByZXR1cm47CiAKLSAgICBWZWN0b3I8S2V5ZnJhbWVWYWx1ZT4ga2V5ZnJhbWVz
OwotICAgIGtleWZyYW1lcy5yZXNlcnZlSW5pdGlhbENhcGFjaXR5KHZhbHVlcy5zaXplKCkpOwot
ICAgIAotICAgIGZvciAoYXV0byYgdmFsdWUgOiB2YWx1ZXMpCi0gICAgICAgIGtleWZyYW1lcy51
bmNoZWNrZWRBcHBlbmQoS2V5ZnJhbWVWYWx1ZSB7IHZhbHVlLmNvcHlSZWYoKSB9KTsKLSAgICAK
LSAgICBtX3Byb3BlcnRpZXMua2V5VmFsdWVzID0gV1RGTW92ZShrZXlmcmFtZXMpOworICAgIG1f
cHJvcGVydGllcy5rZXlWYWx1ZXMgPSB0b0tleWZyYW1lVmFsdWVWZWN0b3IodmFsdWVzKTsKIH0K
IAogdm9pZCBQbGF0Zm9ybUNBQW5pbWF0aW9uUmVtb3RlOjpjb3B5VmFsdWVzRnJvbShjb25zdCBQ
bGF0Zm9ybUNBQW5pbWF0aW9uJiB2YWx1ZSkKQEAgLTY0NSwxMyArNjIyLDkgQEAgdm9pZCBQbGF0
Zm9ybUNBQW5pbWF0aW9uUmVtb3RlOjpjb3B5S2V5VGltZXNGcm9tKGNvbnN0IFBsYXRmb3JtQ0FB
bmltYXRpb24mIHZhbHUKIAogdm9pZCBQbGF0Zm9ybUNBQW5pbWF0aW9uUmVtb3RlOjpzZXRUaW1p
bmdGdW5jdGlvbnMoY29uc3QgVmVjdG9yPGNvbnN0IFRpbWluZ0Z1bmN0aW9uKj4mIHZhbHVlcywg
Ym9vbCByZXZlcnNlKQogewotICAgIFZlY3RvcjxSZWZQdHI8V2ViQ29yZTo6VGltaW5nRnVuY3Rp
b24+PiB0aW1pbmdGdW5jdGlvbnM7Ci0gICAgdGltaW5nRnVuY3Rpb25zLnJlc2VydmVJbml0aWFs
Q2FwYWNpdHkodmFsdWVzLnNpemUoKSk7Ci0gICAgCi0gICAgZm9yIChzaXplX3QgaSA9IDA7IGkg
PCB2YWx1ZXMuc2l6ZSgpOyArK2kpCi0gICAgICAgIHRpbWluZ0Z1bmN0aW9ucy51bmNoZWNrZWRB
cHBlbmQodmFsdWVzW2ldLT5jbG9uZSgpKTsKLSAgICAKLSAgICBtX3Byb3BlcnRpZXMudGltaW5n
RnVuY3Rpb25zID0gV1RGTW92ZSh0aW1pbmdGdW5jdGlvbnMpOworICAgIG1fcHJvcGVydGllcy50
aW1pbmdGdW5jdGlvbnMgPSB2YWx1ZXMubWFwKFtdKGF1dG8mIHZhbHVlKSAtPiBSZWZQdHI8V2Vi
Q29yZTo6VGltaW5nRnVuY3Rpb24+IHsKKyAgICAgICAgcmV0dXJuIHZhbHVlLT5jbG9uZSgpOwor
ICAgIH0pOwogICAgIG1fcHJvcGVydGllcy5yZXZlcnNlVGltaW5nRnVuY3Rpb25zID0gcmV2ZXJz
ZTsKIH0KIApkaWZmIC0tZ2l0IGEvU291cmNlL1dlYktpdC9XZWJQcm9jZXNzL1dlYlBhZ2UvVmll
d0dlc3R1cmVHZW9tZXRyeUNvbGxlY3Rvci5jcHAgYi9Tb3VyY2UvV2ViS2l0L1dlYlByb2Nlc3Mv
V2ViUGFnZS9WaWV3R2VzdHVyZUdlb21ldHJ5Q29sbGVjdG9yLmNwcAppbmRleCA2YmQ3Mzg2ZmJi
OGQ2MmNkMzUzYjNkMmYxYTE2OTk5YmIyYmQxNmNiLi45YWUyOTMxNGYyZWM0N2M0MjE0OTdiOTNk
MWYyZDVkYTljYjFmZTllIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViS2l0L1dlYlByb2Nlc3MvV2Vi
UGFnZS9WaWV3R2VzdHVyZUdlb21ldHJ5Q29sbGVjdG9yLmNwcAorKysgYi9Tb3VyY2UvV2ViS2l0
L1dlYlByb2Nlc3MvV2ViUGFnZS9WaWV3R2VzdHVyZUdlb21ldHJ5Q29sbGVjdG9yLmNwcApAQCAt
MTgxLDEwICsxODEsOSBAQCBzdGQ6Om9wdGlvbmFsPHN0ZDo6cGFpcjxkb3VibGUsIGRvdWJsZT4+
IFZpZXdHZXN0dXJlR2VvbWV0cnlDb2xsZWN0b3I6OmNvbXB1dGVUZQogICAgICAgICB0b3RhbFNh
bXBsZWRUZXh0TGVuZ3RoICs9IHRleHRMZW5ndGg7CiAgICAgfQogCi0gICAgVmVjdG9yPEZvbnRT
aXplQW5kQ291bnQ+IHNvcnRlZEZvbnRTaXplc0FuZENvdW50czsKLSAgICBzb3J0ZWRGb250U2l6
ZXNBbmRDb3VudHMucmVzZXJ2ZUNhcGFjaXR5KGZvbnRTaXplVG9Db3VudE1hcC5zaXplKCkpOwot
ICAgIGZvciAoYXV0byYgZW50cnkgOiBmb250U2l6ZVRvQ291bnRNYXApCi0gICAgICAgIHNvcnRl
ZEZvbnRTaXplc0FuZENvdW50cy5hcHBlbmQoeyBlbnRyeS5rZXksIGVudHJ5LnZhbHVlIH0pOwor
ICAgIGF1dG8gc29ydGVkRm9udFNpemVzQW5kQ291bnRzID0gV1RGOjptYXAoZm9udFNpemVUb0Nv
dW50TWFwLCBbXShhdXRvJiBlbnRyeSkgeworICAgICAgICByZXR1cm4gRm9udFNpemVBbmRDb3Vu
dCB7IGVudHJ5LmtleSwgZW50cnkudmFsdWUgfTsKKyAgICB9KTsKIAogICAgIHN0ZDo6c29ydChz
b3J0ZWRGb250U2l6ZXNBbmRDb3VudHMuYmVnaW4oKSwgc29ydGVkRm9udFNpemVzQW5kQ291bnRz
LmVuZCgpLCBbXSAoYXV0byYgZmlyc3QsIGF1dG8mIHNlY29uZCkgewogICAgICAgICByZXR1cm4g
Zmlyc3QuZm9udFNpemUgPCBzZWNvbmQuZm9udFNpemU7CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2Vi
S2l0L1dlYlByb2Nlc3MvV2ViUGFnZS9XZWJQYWdlLmNwcCBiL1NvdXJjZS9XZWJLaXQvV2ViUHJv
Y2Vzcy9XZWJQYWdlL1dlYlBhZ2UuY3BwCmluZGV4IDYzYWY5MWZkYmE1ZjIwMTAwNmM3M2M1OWYy
OTZiYTIyZjNkMzdjNWQuLjhhOTVkZDIxZTYxYmI3NDA4YmUxMjY4ZDY2NmNhNDg5ZDk5YjBlZWUg
MTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJLaXQvV2ViUHJvY2Vzcy9XZWJQYWdlL1dlYlBhZ2UuY3Bw
CisrKyBiL1NvdXJjZS9XZWJLaXQvV2ViUHJvY2Vzcy9XZWJQYWdlL1dlYlBhZ2UuY3BwCkBAIC0x
Mzg3LDEyICsxMzg3LDkgQEAgUmVmPEFQSTo6QXJyYXk+IFdlYlBhZ2U6OnRyYWNrZWRSZXBhaW50
UmVjdHMoKQogICAgIGlmICghdmlldykKICAgICAgICAgcmV0dXJuIEFQSTo6QXJyYXk6OmNyZWF0
ZSgpOwogCi0gICAgVmVjdG9yPFJlZlB0cjxBUEk6Ok9iamVjdD4+IHJlcGFpbnRSZWN0czsKLSAg
ICByZXBhaW50UmVjdHMucmVzZXJ2ZUluaXRpYWxDYXBhY2l0eSh2aWV3LT50cmFja2VkUmVwYWlu
dFJlY3RzKCkuc2l6ZSgpKTsKLQotICAgIGZvciAoY29uc3QgYXV0byYgcmVwYWludFJlY3QgOiB2
aWV3LT50cmFja2VkUmVwYWludFJlY3RzKCkpCi0gICAgICAgIHJlcGFpbnRSZWN0cy51bmNoZWNr
ZWRBcHBlbmQoQVBJOjpSZWN0OjpjcmVhdGUodG9BUEkocmVwYWludFJlY3QpKSk7Ci0KKyAgICBh
dXRvIHJlcGFpbnRSZWN0cyA9IHZpZXctPnRyYWNrZWRSZXBhaW50UmVjdHMoKS5tYXAoW10oYXV0
byYgcmVwYWludFJlY3QpIC0+IFJlZlB0cjxBUEk6Ok9iamVjdD4geworICAgICAgICByZXR1cm4g
QVBJOjpSZWN0OjpjcmVhdGUodG9BUEkocmVwYWludFJlY3QpKTsKKyAgICB9KTsKICAgICByZXR1
cm4gQVBJOjpBcnJheTo6Y3JlYXRlKFdURk1vdmUocmVwYWludFJlY3RzKSk7CiB9CiAKQEAgLTIx
MzAsMTAgKzIxMjcsNyBAQCBzdGF0aWMgdm9pZCBkdW1wSGlzdG9yeUl0ZW0oSGlzdG9yeUl0ZW0m
IGl0ZW0sIHNpemVfdCBpbmRlbnQsIGJvb2wgaXNDdXJyZW50SXRlbQogCiAgICAgc3RyaW5nQnVp
bGRlci5hcHBlbmQoJ1xuJyk7CiAKLSAgICBWZWN0b3I8UmVmPEhpc3RvcnlJdGVtPj4gY2hpbGRy
ZW47Ci0gICAgY2hpbGRyZW4ucmVzZXJ2ZUluaXRpYWxDYXBhY2l0eShpdGVtLmNoaWxkcmVuKCku
c2l6ZSgpKTsKLSAgICBmb3IgKGF1dG8mIGNoaWxkIDogaXRlbS5jaGlsZHJlbigpKQotICAgICAg
ICBjaGlsZHJlbi51bmNoZWNrZWRBcHBlbmQoY2hpbGQuY29weVJlZigpKTsKKyAgICBhdXRvIGNo
aWxkcmVuID0gaXRlbS5jaGlsZHJlbigpOwogICAgIHN0ZDo6c3RhYmxlX3NvcnQoY2hpbGRyZW4u
YmVnaW4oKSwgY2hpbGRyZW4uZW5kKCksIFtdIChhdXRvJiBhLCBhdXRvJiBiKSB7CiAgICAgICAg
IHJldHVybiBjb2RlUG9pbnRDb21wYXJlKGEtPnRhcmdldCgpLCBiLT50YXJnZXQoKSkgPCAwOwog
ICAgIH0pOwo=
</data>

          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>452406</attachid>
            <date>2022-02-17 12:18:07 -0800</date>
            <delta_ts>2022-02-17 12:47:29 -0800</delta_ts>
            <desc>Follow-up</desc>
            <filename>bug-236748-20220217121806.patch</filename>
            <type>text/plain</type>
            <size>24617</size>
            <attacher name="Chris Dumez">cdumez</attacher>
            
              <data encoding="base64">U3VidmVyc2lvbiBSZXZpc2lvbjogMjkwMDM0CmRpZmYgLS1naXQgYS9Tb3VyY2UvSmF2YVNjcmlw
dENvcmUvQ2hhbmdlTG9nIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL0NoYW5nZUxvZwppbmRleCA0
MjZiOGYzMzU3OWIwMDA4OWM4N2Y3NTNmNzIyMjZiYTEzN2Y2Nzg3Li5lMTBhMmU3YjJiMGViNDQy
YjIyZDQ0NGYzN2RjYjI1MGYwMGQ5NzBkIDEwMDY0NAotLS0gYS9Tb3VyY2UvSmF2YVNjcmlwdENv
cmUvQ2hhbmdlTG9nCisrKyBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9DaGFuZ2VMb2cKQEAgLTEs
MyArMSwxOCBAQAorMjAyMi0wMi0xNyAgQ2hyaXMgRHVtZXogIDxjZHVtZXpAYXBwbGUuY29tPgor
CisgICAgICAgIENsZWFuIHVwIC8gb3B0aW1pemUgY2FsbCBzaXRlcyBjb25zdHJ1Y3RpbmcgdmVj
dG9ycworICAgICAgICBodHRwczovL2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9MjM2
NzQ4CisgICAgICAgIDxyZGFyOi8vcHJvYmxlbS84OTA5MDcxMD4KKworICAgICAgICBSZXZpZXdl
ZCBieSBOT0JPRFkgKE9PUFMhKS4KKworICAgICAgICBGb2xsb3ctdXAgdG8gcjI5MDAyNiB0byBh
ZGRyZXNzIGZlZWRiYWNrIGZyb20gRGFyaW4uCisKKyAgICAgICAgKiBiMy9haXIvQWlyQ29kZS5j
cHA6CisgICAgICAgIChKU0M6OkIzOjpBaXI6OkNvZGU6OnNldE51bUVudHJ5cG9pbnRzKToKKyAg
ICAgICAgKiBwYXJzZXIvVmFyaWFibGVFbnZpcm9ubWVudC5jcHA6CisgICAgICAgIChKU0M6OkNv
bXBhY3RURFpFbnZpcm9ubWVudDo6Q29tcGFjdFREWkVudmlyb25tZW50KToKKwogMjAyMi0wMi0x
NyAgQ2hyaXMgRHVtZXogIDxjZHVtZXpAYXBwbGUuY29tPgogCiAgICAgICAgIENsZWFuIHVwIC8g
b3B0aW1pemUgY2FsbCBzaXRlcyBjb25zdHJ1Y3RpbmcgdmVjdG9ycwpkaWZmIC0tZ2l0IGEvU291
cmNlL1dlYkNvcmUvQ2hhbmdlTG9nIGIvU291cmNlL1dlYkNvcmUvQ2hhbmdlTG9nCmluZGV4IDgy
NmI0YTBjMzRiZTg0ZTMyOGU0MGQyNTYwYmI4NjM0Mzk5MDg0NWIuLjU0NmJhOWE0N2Y2M2FiMmZh
Mjc2OTE2NzE4NzM4ZDY0MjQ1NDI3YmMgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL0NoYW5n
ZUxvZworKysgYi9Tb3VyY2UvV2ViQ29yZS9DaGFuZ2VMb2cKQEAgLTEsMyArMSw1MiBAQAorMjAy
Mi0wMi0xNyAgQ2hyaXMgRHVtZXogIDxjZHVtZXpAYXBwbGUuY29tPgorCisgICAgICAgIENsZWFu
IHVwIC8gb3B0aW1pemUgY2FsbCBzaXRlcyBjb25zdHJ1Y3RpbmcgdmVjdG9ycworICAgICAgICBo
dHRwczovL2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9MjM2NzQ4CisgICAgICAgIDxy
ZGFyOi8vcHJvYmxlbS84OTA5MDcxMD4KKworICAgICAgICBSZXZpZXdlZCBieSBOT0JPRFkgKE9P
UFMhKS4KKworICAgICAgICBGb2xsb3ctdXAgdG8gcjI5MDAyNiB0byBhZGRyZXNzIGZlZWRiYWNr
IGZyb20gRGFyaW4uCisKKyAgICAgICAgKiBNb2R1bGVzL2VuY3J5cHRlZG1lZGlhL01lZGlhS2V5
U2Vzc2lvbi5jcHA6CisgICAgICAgIChXZWJDb3JlOjpNZWRpYUtleVNlc3Npb246OnVwZGF0ZUtl
eVN0YXR1c2VzKToKKyAgICAgICAgKiBNb2R1bGVzL2luZGV4ZWRkYi9zZXJ2ZXIvU1FMaXRlSURC
Q3Vyc29yLmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OklEQlNlcnZlcjo6U1FMaXRlSURCQ3Vyc29y
OjpjdXJyZW50RGF0YSk6CisgICAgICAgICogYWNjZXNzaWJpbGl0eS9pc29sYXRlZHRyZWUvQVhJ
c29sYXRlZE9iamVjdC5jcHA6CisgICAgICAgIChXZWJDb3JlOjpBWElzb2xhdGVkT2JqZWN0Ojpz
ZXRNYXRoc2NyaXB0cyk6CisgICAgICAgICogYmluZGluZ3MvanMvU2VyaWFsaXplZFNjcmlwdFZh
bHVlLmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OkNsb25lRGVzZXJpYWxpemVyOjpyZWFkU3RyaW5n
KToKKyAgICAgICAgKiBjc3MvU3R5bGVQcm9wZXJ0aWVzLmNwcDoKKyAgICAgICAgKFdlYkNvcmU6
OkRlZmVycmVkU3R5bGVQcm9wZXJ0aWVzOjpEZWZlcnJlZFN0eWxlUHJvcGVydGllcyk6CisgICAg
ICAgICogY3NzL1N0eWxlUnVsZS5jcHA6CisgICAgICAgIChXZWJDb3JlOjpEZWZlcnJlZFN0eWxl
R3JvdXBSdWxlTGlzdDo6RGVmZXJyZWRTdHlsZUdyb3VwUnVsZUxpc3QpOgorICAgICAgICAqIGRv
bS9FbGVtZW50RGF0YS5jcHA6CisgICAgICAgIChXZWJDb3JlOjpVbmlxdWVFbGVtZW50RGF0YTo6
VW5pcXVlRWxlbWVudERhdGEpOgorICAgICAgICAqIGxvYWRlci9hcmNoaXZlL2NmL0xlZ2FjeVdl
YkFyY2hpdmUuY3BwOgorICAgICAgICAoV2ViQ29yZTo6TGVnYWN5V2ViQXJjaGl2ZTo6Y3JlYXRl
RnJvbVNlbGVjdGlvbik6CisgICAgICAgICogcGFnZS9jc3AvQ29udGVudFNlY3VyaXR5UG9saWN5
LmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OkNvbnRlbnRTZWN1cml0eVBvbGljeTo6cmVzcG9uc2VI
ZWFkZXJzIGNvbnN0KToKKyAgICAgICAgKiBwbGF0Zm9ybS9lbmNyeXB0ZWRtZWRpYS9DRE1Qcm94
eS5jcHA6CisgICAgICAgIChXZWJDb3JlOjpLZXlTdG9yZTo6Y29udmVydFRvSlNLZXlTdGF0dXNW
ZWN0b3IgY29uc3QpOgorICAgICAgICAqIHBsYXRmb3JtL2dyYXBoaWNzL2F2Zm91bmRhdGlvbi9v
YmpjL0NETUluc3RhbmNlRmFpclBsYXlTdHJlYW1pbmdBVkZPYmpDLm1tOgorICAgICAgICAoV2Vi
Q29yZTo6Q0RNSW5zdGFuY2VTZXNzaW9uRmFpclBsYXlTdHJlYW1pbmdBVkZPYmpDOjp1cGRhdGVM
aWNlbnNlKToKKyAgICAgICAgKiBwbGF0Zm9ybS9uZXR3b3JrL0NhY2hlVmFsaWRhdGlvbi5jcHA6
CisgICAgICAgIChXZWJDb3JlOjpoZWFkZXJWYWx1ZUZvclZhcnkpOgorICAgICAgICAoV2ViQ29y
ZTo6Y29sbGVjdFZhcnlpbmdSZXF1ZXN0SGVhZGVyc0ludGVybmFsKToKKyAgICAgICAgKFdlYkNv
cmU6OmNvbGxlY3RWYXJ5aW5nUmVxdWVzdEhlYWRlcnMpOgorICAgICAgICAqIHBsYXRmb3JtL3Rl
eHQvTG9jYWxlSUNVLmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OmNyZWF0ZUZhbGxiYWNrTW9udGhM
YWJlbHMpOgorICAgICAgICAqIHBsYXRmb3JtL3RleHQvTG9jYWxlTm9uZS5jcHA6CisgICAgICAg
IChXZWJDb3JlOjpMb2NhbGVOb25lOjpzaG9ydE1vbnRoTGFiZWxzKToKKyAgICAgICAgKiBwbGF0
Zm9ybS90ZXh0L2NvY29hL0xvY2FsZUNvY29hLm1tOgorICAgICAgICAoV2ViQ29yZTo6TG9jYWxl
Q29jb2E6Om1vbnRoTGFiZWxzKToKKyAgICAgICAgKFdlYkNvcmU6OkxvY2FsZUNvY29hOjpzaG9y
dE1vbnRoTGFiZWxzKToKKyAgICAgICAgKFdlYkNvcmU6OkxvY2FsZUNvY29hOjpzdGFuZEFsb25l
TW9udGhMYWJlbHMpOgorICAgICAgICAoV2ViQ29yZTo6TG9jYWxlQ29jb2E6OnNob3J0U3RhbmRB
bG9uZU1vbnRoTGFiZWxzKToKKyAgICAgICAgKiB0ZXN0aW5nL01vY2tDRE1GYWN0b3J5LmNwcDoK
KyAgICAgICAgKFdlYkNvcmU6Ok1vY2tDRE1JbnN0YW5jZVNlc3Npb246OnVwZGF0ZUxpY2Vuc2Up
OgorICAgICAgICAoV2ViQ29yZTo6TW9ja0NETUluc3RhbmNlU2Vzc2lvbjo6cmVtb3ZlU2Vzc2lv
bkRhdGEpOgorCiAyMDIyLTAyLTE3ICBNYXR0IFdvb2Ryb3cgIDxtYXR0d29vZHJvd0BhcHBsZS5j
b20+CiAKICAgICAgICAgRml4IGFicy1wb3MgYnJlYWR0aCBpc3N1ZSB3aGVuIHVzaW5nICdhdXRv
JwpkaWZmIC0tZ2l0IGEvU291cmNlL0phdmFTY3JpcHRDb3JlL2IzL2Fpci9BaXJDb2RlLmNwcCBi
L1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9iMy9haXIvQWlyQ29kZS5jcHAKaW5kZXggZTY5N2JkNTMw
NThmZGUxMTUyM2ZlNWI4MzU5NDgzOTIxZDU3MzI5My4uYjViYjAzM2QwNjMxZjlhODQ3ODE1NDU3
NjRiMWY3MzQ5NjMyNjRiZSAxMDA2NDQKLS0tIGEvU291cmNlL0phdmFTY3JpcHRDb3JlL2IzL2Fp
ci9BaXJDb2RlLmNwcAorKysgYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvYjMvYWlyL0FpckNvZGUu
Y3BwCkBAIC0zMzMsNyArMzMzLDcgQEAgdW5zaWduZWQgQ29kZTo6anNIYXNoKCkgY29uc3QKIAog
dm9pZCBDb2RlOjpzZXROdW1FbnRyeXBvaW50cyh1bnNpZ25lZCBudW1FbnRyeVBvaW50cykKIHsK
LSAgICBtX3Byb2xvZ3VlR2VuZXJhdG9ycyA9IFZlY3RvciB7IG51bUVudHJ5UG9pbnRzLCBtX2Rl
ZmF1bHRQcm9sb2d1ZUdlbmVyYXRvci5jb3B5UmVmKCkgfTsKKyAgICBtX3Byb2xvZ3VlR2VuZXJh
dG9ycyA9IHsgbnVtRW50cnlQb2ludHMsIG1fZGVmYXVsdFByb2xvZ3VlR2VuZXJhdG9yLmNvcHlS
ZWYoKSB9OwogfQogCiB9IH0gfSAvLyBuYW1lc3BhY2UgSlNDOjpCMzo6QWlyCmRpZmYgLS1naXQg
YS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvcGFyc2VyL1ZhcmlhYmxlRW52aXJvbm1lbnQuY3BwIGIv
U291cmNlL0phdmFTY3JpcHRDb3JlL3BhcnNlci9WYXJpYWJsZUVudmlyb25tZW50LmNwcAppbmRl
eCAyNjU0ZjQ2MTRlNzViNzVlMmNkOTA2NTE0MDc2ZGFkMGY4NTAxOTY2Li45ZGE5Y2MyNzVjNzA5
NWY5YTZjMWExNzMzYzhkZjMwZDk0OTQ4ZTI5IDEwMDY0NAotLS0gYS9Tb3VyY2UvSmF2YVNjcmlw
dENvcmUvcGFyc2VyL1ZhcmlhYmxlRW52aXJvbm1lbnQuY3BwCisrKyBiL1NvdXJjZS9KYXZhU2Ny
aXB0Q29yZS9wYXJzZXIvVmFyaWFibGVFbnZpcm9ubWVudC5jcHAKQEAgLTIxOSw3ICsyMTksNyBA
QCB2b2lkIENvbXBhY3RURFpFbnZpcm9ubWVudDo6c29ydENvbXBhY3QoQ29tcGFjdCYgY29tcGFj
dCkKIENvbXBhY3RURFpFbnZpcm9ubWVudDo6Q29tcGFjdFREWkVudmlyb25tZW50KGNvbnN0IFRE
WkVudmlyb25tZW50JiBlbnYpCiB7CiAgICAgbV9oYXNoID0gMDsgLy8gTm90ZTogWE9SIGlzIGNv
bW11dGF0aXZlIHNvIG9yZGVyIGRvZXNuJ3QgbWF0dGVyIGhlcmUuCi0gICAgQ29tcGFjdCB2YXJp
YWJsZXMgPSBXVEY6Om1hcChlbnYsIFt0aGlzXShhdXRvJiBrZXkpIC0+IFBhY2tlZFJlZlB0cjxV
bmlxdWVkU3RyaW5nSW1wbD4geworICAgIGF1dG8gdmFyaWFibGVzID0gV1RGOjptYXAoZW52LCBb
dGhpc10oYXV0byYga2V5KSAtPiBQYWNrZWRSZWZQdHI8VW5pcXVlZFN0cmluZ0ltcGw+IHsKICAg
ICAgICAgbV9oYXNoIF49IGtleS0+aGFzaCgpOwogICAgICAgICByZXR1cm4ga2V5LmdldCgpOwog
ICAgIH0pOwpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvTW9kdWxlcy9lbmNyeXB0ZWRtZWRp
YS9NZWRpYUtleVNlc3Npb24uY3BwIGIvU291cmNlL1dlYkNvcmUvTW9kdWxlcy9lbmNyeXB0ZWRt
ZWRpYS9NZWRpYUtleVNlc3Npb24uY3BwCmluZGV4IDM4ZGZjYzFiOTc4NDYyMzIyZWM3ZDdlYmU0
ODNkNjZkODc2MDJlMzAuLmZiNGE3Zjg4NGY2Nzk1NWI2ZDc5ZDAyY2U1Y2RkNTg0OWQyZmM5NjUg
MTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL01vZHVsZXMvZW5jcnlwdGVkbWVkaWEvTWVkaWFL
ZXlTZXNzaW9uLmNwcAorKysgYi9Tb3VyY2UvV2ViQ29yZS9Nb2R1bGVzL2VuY3J5cHRlZG1lZGlh
L01lZGlhS2V5U2Vzc2lvbi5jcHAKQEAgLTcwMSw3ICs3MDEsNyBAQCB2b2lkIE1lZGlhS2V5U2Vz
c2lvbjo6dXBkYXRlS2V5U3RhdHVzZXMoQ0RNSW5zdGFuY2VTZXNzaW9uOjpLZXlTdGF0dXNWZWN0
b3ImJiBpbgogICAgIH07CiAKICAgICBtX3N0YXR1c2VzID0gV1RGOjptYXAoV1RGTW92ZShpbnB1
dFN0YXR1c2VzKSwgW10oYXV0byYmIHN0YXR1cykgewotICAgICAgICByZXR1cm4gc3RkOjptYWtl
X3BhaXIoV1RGTW92ZShzdGF0dXMuZmlyc3QpLCB0b01lZGlhS2V5U3RhdHVzKHN0YXR1cy5zZWNv
bmQpKTsKKyAgICAgICAgcmV0dXJuIHN0ZDo6cGFpciB7IFdURk1vdmUoc3RhdHVzLmZpcnN0KSwg
dG9NZWRpYUtleVN0YXR1cyhzdGF0dXMuc2Vjb25kKSB9OwogICAgIH0pOwogCiAgICAgLy8gNS4g
UXVldWUgYSB0YXNrIHRvIGZpcmUgYSBzaW1wbGUgZXZlbnQgbmFtZWQga2V5c3RhdHVzZXNjaGFu
Z2UgYXQgdGhlIHNlc3Npb24uCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9Nb2R1bGVzL2lu
ZGV4ZWRkYi9zZXJ2ZXIvU1FMaXRlSURCQ3Vyc29yLmNwcCBiL1NvdXJjZS9XZWJDb3JlL01vZHVs
ZXMvaW5kZXhlZGRiL3NlcnZlci9TUUxpdGVJREJDdXJzb3IuY3BwCmluZGV4IDY2N2Y1ZTc5NTdi
NGI2NTc2YjgyM2E2NWMwNDg5YWFjZDQ3ODkzOGQuLjQyZDBiN2MwOTYzMDU1NGRhZGY3ZTYyNGE5
Y2VlZWQxMjQ0NGQwNDMgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL01vZHVsZXMvaW5kZXhl
ZGRiL3NlcnZlci9TUUxpdGVJREJDdXJzb3IuY3BwCisrKyBiL1NvdXJjZS9XZWJDb3JlL01vZHVs
ZXMvaW5kZXhlZGRiL3NlcnZlci9TUUxpdGVJREJDdXJzb3IuY3BwCkBAIC0xMTYsNyArMTE2LDcg
QEAgdm9pZCBTUUxpdGVJREJDdXJzb3I6OmN1cnJlbnREYXRhKElEQkdldFJlc3VsdCYgcmVzdWx0
LCBjb25zdCBzdGQ6Om9wdGlvbmFsPElEQksKICAgICB9CiAKICAgICBWZWN0b3I8SURCQ3Vyc29y
UmVjb3JkPiBwcmVmZXRjaGVkUmVjb3JkczsKLSAgICBwcmVmZXRjaGVkUmVjb3Jkcy5yZXNlcnZl
SW5pdGlhbENhcGFjaXR5KG1fZmV0Y2hlZFJlY29yZHMuc2l6ZSgpKTsKKyAgICBwcmVmZXRjaGVk
UmVjb3Jkcy5yZXNlcnZlSW5pdGlhbENhcGFjaXR5KG1fZmV0Y2hlZFJlY29yZHMuc2l6ZSgpIC0g
MSk7CiAgICAgYm9vbCBpc0ZpcnN0ID0gdHJ1ZTsKICAgICBmb3IgKGF1dG8mIHJlY29yZCA6IG1f
ZmV0Y2hlZFJlY29yZHMpIHsKICAgICAgICAgaWYgKHJlY29yZC5pc1Rlcm1pbmFsUmVjb3JkKCkp
CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9hY2Nlc3NpYmlsaXR5L2lzb2xhdGVkdHJlZS9B
WElzb2xhdGVkT2JqZWN0LmNwcCBiL1NvdXJjZS9XZWJDb3JlL2FjY2Vzc2liaWxpdHkvaXNvbGF0
ZWR0cmVlL0FYSXNvbGF0ZWRPYmplY3QuY3BwCmluZGV4IDMzZWExMGEzMWVmOTNkYWJiODk1ZDU0
MjU0MWNhZDg1NGY2ODZlMDIuLmJkZjgyNWQyZDFjMGM0YWQ5NmYwODVmY2M2YWUwZjMxMDIzOTAw
ZDEgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL2FjY2Vzc2liaWxpdHkvaXNvbGF0ZWR0cmVl
L0FYSXNvbGF0ZWRPYmplY3QuY3BwCisrKyBiL1NvdXJjZS9XZWJDb3JlL2FjY2Vzc2liaWxpdHkv
aXNvbGF0ZWR0cmVlL0FYSXNvbGF0ZWRPYmplY3QuY3BwCkBAIC00NDUsNyArNDQ1LDcgQEAgdm9p
ZCBBWElzb2xhdGVkT2JqZWN0OjpzZXRNYXRoc2NyaXB0cyhBWFByb3BlcnR5TmFtZSBwcm9wZXJ0
eU5hbWUsIEFYQ29yZU9iamVjdCYKICAgICAgICAgcmV0dXJuOwogCiAgICAgYXV0byBpZFBhaXJz
ID0gcGFpcnMubWFwKFtdKGF1dG8mIG1hdGhQYWlyKSB7Ci0gICAgICAgIHJldHVybiBzdGQ6Om1h
a2VfcGFpcihtYXRoUGFpci5maXJzdCA/IG1hdGhQYWlyLmZpcnN0LT5vYmplY3RJRCgpIDogQVhJ
RCgpLCBtYXRoUGFpci5zZWNvbmQgPyBtYXRoUGFpci5zZWNvbmQtPm9iamVjdElEKCkgOiBBWElE
KCkpOworICAgICAgICByZXR1cm4gc3RkOjpwYWlyIHsgbWF0aFBhaXIuZmlyc3QgPyBtYXRoUGFp
ci5maXJzdC0+b2JqZWN0SUQoKSA6IEFYSUQoKSwgbWF0aFBhaXIuc2Vjb25kID8gbWF0aFBhaXIu
c2Vjb25kLT5vYmplY3RJRCgpIDogQVhJRCgpIH07CiAgICAgfSk7CiAgICAgc2V0UHJvcGVydHko
cHJvcGVydHlOYW1lLCBXVEZNb3ZlKGlkUGFpcnMpKTsKIH0KZGlmZiAtLWdpdCBhL1NvdXJjZS9X
ZWJDb3JlL2JpbmRpbmdzL2pzL1NlcmlhbGl6ZWRTY3JpcHRWYWx1ZS5jcHAgYi9Tb3VyY2UvV2Vi
Q29yZS9iaW5kaW5ncy9qcy9TZXJpYWxpemVkU2NyaXB0VmFsdWUuY3BwCmluZGV4IGQxNGU3OTAy
ODhmZGMzMmIzOTMzNTlhYmVhNTY4NzdkNDc1NmViODIuLmFlOTlmNmI1NzhlN2QxMWQwZTExMzJm
ZTYxMWJkODlhODU5ZDEyYmUgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL2JpbmRpbmdzL2pz
L1NlcmlhbGl6ZWRTY3JpcHRWYWx1ZS5jcHAKKysrIGIvU291cmNlL1dlYkNvcmUvYmluZGluZ3Mv
anMvU2VyaWFsaXplZFNjcmlwdFZhbHVlLmNwcApAQCAtMjQ1NSwxNCArMjQ1NSwxMyBAQCBwcml2
YXRlOgogICAgICAgICBzdHIgPSBTdHJpbmcocmVpbnRlcnByZXRfY2FzdDxjb25zdCBVQ2hhcio+
KHB0ciksIGxlbmd0aCk7CiAgICAgICAgIHB0ciArPSBsZW5ndGggKiBzaXplb2YoVUNoYXIpOwog
I2Vsc2UKLSAgICAgICAgVmVjdG9yPFVDaGFyPiBidWZmZXI7Ci0gICAgICAgIGJ1ZmZlci5yZXNl
cnZlSW5pdGlhbENhcGFjaXR5KGxlbmd0aCk7Ci0gICAgICAgIGZvciAodW5zaWduZWQgaSA9IDA7
IGkgPCBsZW5ndGg7IGkrKykgewotICAgICAgICAgICAgdWludDE2X3QgY2g7Ci0gICAgICAgICAg
ICByZWFkTGl0dGxlRW5kaWFuKHB0ciwgZW5kLCBjaCk7Ci0gICAgICAgICAgICBidWZmZXIudW5j
aGVja2VkQXBwZW5kKGNoKTsKLSAgICAgICAgfQotICAgICAgICBzdHIgPSBTdHJpbmc6OmFkb3B0
KFdURk1vdmUoYnVmZmVyKSk7CisgICAgICAgIFVDaGFyKiBjaGFyYWN0ZXJzOworICAgICAgICBz
dHIgPSBTdHJpbmc6OmNyZWF0ZVVuaW5pdGlhbGl6ZWQobGVuZ3RoLCBjaGFyYWN0ZXJzKTsKKyAg
ICAgICAgZm9yICh1bnNpZ25lZCBpID0gMDsgaSA8IGxlbmd0aDsgISFpKSB7CisgICAgICAgICAg
ICB1aW50MTZfdCBjOworICAgICAgICAgICAgcmVhZExpdHRsZUVuZGlhbihwdHIsIGVuZCwgYyk7
CisgICAgICAgICAgICBjaGFyYWN0ZXJzW2ldID0gYzsKKyAgICAgICAgfQogI2VuZGlmCiAgICAg
ICAgIHJldHVybiB0cnVlOwogICAgIH0KZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL2Nzcy9T
dHlsZVByb3BlcnRpZXMuY3BwIGIvU291cmNlL1dlYkNvcmUvY3NzL1N0eWxlUHJvcGVydGllcy5j
cHAKaW5kZXggYWUzOGI4ZTA4NWEyNGFhYWUwNGU3Y2I1ZGYyNDNmODcxMTVjYjBmNy4uZjJlNWE5
YjRhNDlkNDAxZjRhZDM4NjFlNGRjNWI0ZGRiYzM5ZmU0YyAxMDA2NDQKLS0tIGEvU291cmNlL1dl
YkNvcmUvY3NzL1N0eWxlUHJvcGVydGllcy5jcHAKKysrIGIvU291cmNlL1dlYkNvcmUvY3NzL1N0
eWxlUHJvcGVydGllcy5jcHAKQEAgLTE4MDMsMTAgKzE4MDMsOSBAQCBSZWY8RGVmZXJyZWRTdHls
ZVByb3BlcnRpZXM+IERlZmVycmVkU3R5bGVQcm9wZXJ0aWVzOjpjcmVhdGUoY29uc3QgQ1NTUGFy
c2VyVG9rZQogCiBEZWZlcnJlZFN0eWxlUHJvcGVydGllczo6RGVmZXJyZWRTdHlsZVByb3BlcnRp
ZXMoY29uc3QgQ1NTUGFyc2VyVG9rZW5SYW5nZSYgcmFuZ2UsIENTU0RlZmVycmVkUGFyc2VyJiBw
YXJzZXIpCiAgICAgOiBTdHlsZVByb3BlcnRpZXNCYXNlKHBhcnNlci5tb2RlKCksIERlZmVycmVk
UHJvcGVydGllc1R5cGUpCisgICAgLCBtX3Rva2VucyhyYW5nZS5iZWdpbigpLCByYW5nZS5lbmQo
KSAtIHJhbmdlLmJlZ2luKCkpCiAgICAgLCBtX3BhcnNlcihwYXJzZXIpCiB7Ci0gICAgc2l6ZV90
IGxlbmd0aCA9IHJhbmdlLmVuZCgpIC0gcmFuZ2UuYmVnaW4oKTsKLSAgICBtX3Rva2Vucy5hcHBl
bmQocmFuZ2UuYmVnaW4oKSwgbGVuZ3RoKTsKIH0KICAgICAKIERlZmVycmVkU3R5bGVQcm9wZXJ0
aWVzOjp+RGVmZXJyZWRTdHlsZVByb3BlcnRpZXMoKSA9IGRlZmF1bHQ7CmRpZmYgLS1naXQgYS9T
b3VyY2UvV2ViQ29yZS9jc3MvU3R5bGVSdWxlLmNwcCBiL1NvdXJjZS9XZWJDb3JlL2Nzcy9TdHls
ZVJ1bGUuY3BwCmluZGV4IDFkOWVlN2QwMDU0Mzg3NTU0OGFkMzJlYzU3NGE4YjAwZGJlOTU5Yjcu
LjZmMTA3MGQxMTA0YzRmM2U0NTY2NGU3OTk3Nzc3YzY1NDI4YWU3MDQgMTAwNjQ0Ci0tLSBhL1Nv
dXJjZS9XZWJDb3JlL2Nzcy9TdHlsZVJ1bGUuY3BwCisrKyBiL1NvdXJjZS9XZWJDb3JlL2Nzcy9T
dHlsZVJ1bGUuY3BwCkBAIC0zNjYsMTAgKzM2Niw5IEBAIFN0eWxlUnVsZUZvbnRQYWxldHRlVmFs
dWVzOjpTdHlsZVJ1bGVGb250UGFsZXR0ZVZhbHVlcyhjb25zdCBTdHlsZVJ1bGVGb250UGFsZXR0
CiBTdHlsZVJ1bGVGb250UGFsZXR0ZVZhbHVlczo6flN0eWxlUnVsZUZvbnRQYWxldHRlVmFsdWVz
KCkgPSBkZWZhdWx0OwogCiBEZWZlcnJlZFN0eWxlR3JvdXBSdWxlTGlzdDo6RGVmZXJyZWRTdHls
ZUdyb3VwUnVsZUxpc3QoY29uc3QgQ1NTUGFyc2VyVG9rZW5SYW5nZSYgcmFuZ2UsIENTU0RlZmVy
cmVkUGFyc2VyJiBwYXJzZXIpCi0gICAgOiBtX3BhcnNlcihwYXJzZXIpCisgICAgOiBtX3Rva2Vu
cyhyYW5nZS5iZWdpbigpLCByYW5nZS5lbmQoKSAtIHJhbmdlLmJlZ2luKCkpCisgICAgLCBtX3Bh
cnNlcihwYXJzZXIpCiB7Ci0gICAgc2l6ZV90IGxlbmd0aCA9IHJhbmdlLmVuZCgpIC0gcmFuZ2Uu
YmVnaW4oKTsKLSAgICBtX3Rva2Vucy5hcHBlbmQocmFuZ2UuYmVnaW4oKSwgbGVuZ3RoKTsKIH0K
IAogRGVmZXJyZWRTdHlsZUdyb3VwUnVsZUxpc3Q6On5EZWZlcnJlZFN0eWxlR3JvdXBSdWxlTGlz
dCgpID0gZGVmYXVsdDsKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL2RvbS9FbGVtZW50RGF0
YS5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9kb20vRWxlbWVudERhdGEuY3BwCmluZGV4IDA3MWRiMGIz
NGNhNmU1NmVmMTI2ZWJlZWQ1MThmNjBkNzQwYjRiOTkuLjc3NjMyMmYwM2I1YjQ4MGM0Yjg0NDc5
NzgwNmY4ODFlNzNkODczMzUgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL2RvbS9FbGVtZW50
RGF0YS5jcHAKKysrIGIvU291cmNlL1dlYkNvcmUvZG9tL0VsZW1lbnREYXRhLmNwcApAQCAtMTQw
LDEyICsxNDAsMTEgQEAgVW5pcXVlRWxlbWVudERhdGE6OlVuaXF1ZUVsZW1lbnREYXRhKGNvbnN0
IFVuaXF1ZUVsZW1lbnREYXRhJiBvdGhlcikKIAogVW5pcXVlRWxlbWVudERhdGE6OlVuaXF1ZUVs
ZW1lbnREYXRhKGNvbnN0IFNoYXJlYWJsZUVsZW1lbnREYXRhJiBvdGhlcikKICAgICA6IEVsZW1l
bnREYXRhKG90aGVyLCB0cnVlKQorICAgICwgbV9hdHRyaWJ1dGVWZWN0b3Iob3RoZXIubV9hdHRy
aWJ1dGVBcnJheSwgb3RoZXIubGVuZ3RoKCkpCiB7CiAgICAgLy8gQW4gU2hhcmVhYmxlRWxlbWVu
dERhdGEgc2hvdWxkIG5ldmVyIGhhdmUgYSBtdXRhYmxlIGlubGluZSBTdHlsZVByb3BlcnRpZXMg
YXR0YWNoZWQuCiAgICAgQVNTRVJUKCFvdGhlci5tX2lubGluZVN0eWxlIHx8ICFvdGhlci5tX2lu
bGluZVN0eWxlLT5pc011dGFibGUoKSk7CiAgICAgbV9pbmxpbmVTdHlsZSA9IG90aGVyLm1faW5s
aW5lU3R5bGU7Ci0KLSAgICBtX2F0dHJpYnV0ZVZlY3Rvci5hcHBlbmQob3RoZXIubV9hdHRyaWJ1
dGVBcnJheSwgb3RoZXIubGVuZ3RoKCkpOwogfQogCiBSZWY8VW5pcXVlRWxlbWVudERhdGE+IEVs
ZW1lbnREYXRhOjptYWtlVW5pcXVlQ29weSgpIGNvbnN0CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2Vi
Q29yZS9sb2FkZXIvYXJjaGl2ZS9jZi9MZWdhY3lXZWJBcmNoaXZlLmNwcCBiL1NvdXJjZS9XZWJD
b3JlL2xvYWRlci9hcmNoaXZlL2NmL0xlZ2FjeVdlYkFyY2hpdmUuY3BwCmluZGV4IGNkOTQxY2Yw
NTE4MGRmOGMzNzJlOTkzZGFjM2IxOTFlYjVmMzgxYjIuLmRlZDc2ZmI4YTkxODY5YjE2YzM4NDcx
NGUwNTIzN2IyMzNlMzlkZWIgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL2xvYWRlci9hcmNo
aXZlL2NmL0xlZ2FjeVdlYkFyY2hpdmUuY3BwCisrKyBiL1NvdXJjZS9XZWJDb3JlL2xvYWRlci9h
cmNoaXZlL2NmL0xlZ2FjeVdlYkFyY2hpdmUuY3BwCkBAIC02MTAsNyArNjEwLDcgQEAgUmVmUHRy
PExlZ2FjeVdlYkFyY2hpdmU+IExlZ2FjeVdlYkFyY2hpdmU6OmNyZWF0ZUZyb21TZWxlY3Rpb24o
RnJhbWUqIGZyYW1lKQogICAgIFN0cmluZyBpZnJhbWVNYXJrdXAgPSAiPGlmcmFtZSBmcmFtZWJv
cmRlcj1cIm5vXCIgbWFyZ2lud2lkdGg9XCIwXCIgbWFyZ2luaGVpZ2h0PVwiMFwiIHdpZHRoPVwi
OTglJVwiIGhlaWdodD1cIjk4JSVcIiBzcmM9XCIiICsgZnJhbWUtPmxvYWRlcigpLmRvY3VtZW50
TG9hZGVyKCktPnJlc3BvbnNlKCkudXJsKCkuc3RyaW5nKCkgKyAiXCI+PC9pZnJhbWU+IjsKICAg
ICBhdXRvIGlmcmFtZVJlc291cmNlID0gQXJjaGl2ZVJlc291cmNlOjpjcmVhdGUodXRmOEJ1ZmZl
cihpZnJhbWVNYXJrdXApLCBhYm91dEJsYW5rVVJMKCksICJ0ZXh0L2h0bWwiLCAiVVRGLTgiLCBT
dHJpbmcoKSk7CiAKLSAgICByZXR1cm4gY3JlYXRlKGlmcmFtZVJlc291cmNlLnJlbGVhc2VOb25O
dWxsKCksIHsgfSwgVmVjdG9yIHsgYXJjaGl2ZS5yZWxlYXNlTm9uTnVsbCgpIH0pOworICAgIHJl
dHVybiBjcmVhdGUoaWZyYW1lUmVzb3VyY2UucmVsZWFzZU5vbk51bGwoKSwgeyB9LCB7IGFyY2hp
dmUucmVsZWFzZU5vbk51bGwoKSB9KTsKIH0KIAogfQpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNv
cmUvcGFnZS9jc3AvQ29udGVudFNlY3VyaXR5UG9saWN5LmNwcCBiL1NvdXJjZS9XZWJDb3JlL3Bh
Z2UvY3NwL0NvbnRlbnRTZWN1cml0eVBvbGljeS5jcHAKaW5kZXggZWE2ZDBkZWFjODk0Mzg4MmVm
YThmZjM4YzAyNTk2YTMxNDVjZmQ5Ny4uNWIwMmI0ZDQyYWZjNmY4NjEzZmNjNDY0MDBjYjhkYzdm
ZjIwOGIzYyAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvcGFnZS9jc3AvQ29udGVudFNlY3Vy
aXR5UG9saWN5LmNwcAorKysgYi9Tb3VyY2UvV2ViQ29yZS9wYWdlL2NzcC9Db250ZW50U2VjdXJp
dHlQb2xpY3kuY3BwCkBAIC0xNjIsNyArMTYyLDcgQEAgQ29udGVudFNlY3VyaXR5UG9saWN5UmVz
cG9uc2VIZWFkZXJzIENvbnRlbnRTZWN1cml0eVBvbGljeTo6cmVzcG9uc2VIZWFkZXJzKCkgY28K
ICAgICBpZiAoIW1fY2FjaGVkUmVzcG9uc2VIZWFkZXJzKSB7CiAgICAgICAgIENvbnRlbnRTZWN1
cml0eVBvbGljeVJlc3BvbnNlSGVhZGVycyByZXN1bHQ7CiAgICAgICAgIHJlc3VsdC5tX2hlYWRl
cnMgPSBtX3BvbGljaWVzLm1hcChbXShhdXRvJiBwb2xpY3kpIHsKLSAgICAgICAgICAgIHJldHVy
biBzdGQ6Om1ha2VfcGFpcihwb2xpY3ktPmhlYWRlcigpLCBwb2xpY3ktPmhlYWRlclR5cGUoKSk7
CisgICAgICAgICAgICByZXR1cm4gc3RkOjpwYWlyIHsgcG9saWN5LT5oZWFkZXIoKSwgcG9saWN5
LT5oZWFkZXJUeXBlKCkgfTsKICAgICAgICAgfSk7CiAgICAgICAgIHJlc3VsdC5tX2h0dHBTdGF0
dXNDb2RlID0gbV9odHRwU3RhdHVzQ29kZTsKICAgICAgICAgbV9jYWNoZWRSZXNwb25zZUhlYWRl
cnMgPSBXVEZNb3ZlKHJlc3VsdCk7CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9y
bS9lbmNyeXB0ZWRtZWRpYS9DRE1Qcm94eS5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9l
bmNyeXB0ZWRtZWRpYS9DRE1Qcm94eS5jcHAKaW5kZXggNjc4ZjQxYTdhZTI0MDc1NGNkY2VjNjJm
NWMyYzU2NmVjZWQ1ZTBlZi4uMmRkNzgwMjg0YTI2Yzk0NjQ4ZDlmMTFmMzBmMjJjZDkyNzkxMWIz
YiAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZW5jcnlwdGVkbWVkaWEvQ0RN
UHJveHkuY3BwCisrKyBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2VuY3J5cHRlZG1lZGlhL0NE
TVByb3h5LmNwcApAQCAtMjI2LDcgKzIyNiw3IEBAIGNvbnN0IFJlZlB0cjxLZXlIYW5kbGU+JiBL
ZXlTdG9yZTo6a2V5SGFuZGxlKGNvbnN0IEtleUlEVHlwZSYga2V5SUQpIGNvbnN0CiBDRE1JbnN0
YW5jZVNlc3Npb246OktleVN0YXR1c1ZlY3RvciBLZXlTdG9yZTo6Y29udmVydFRvSlNLZXlTdGF0
dXNWZWN0b3IoKSBjb25zdAogewogICAgIHJldHVybiBtX2tleXMubWFwKFtdKGF1dG8mIGtleSkg
ewotICAgICAgICByZXR1cm4gc3RkOjptYWtlX3BhaXIoa2V5LT5pZEFzU2hhcmVkQnVmZmVyKCks
IGtleS0+c3RhdHVzKCkpOworICAgICAgICByZXR1cm4gc3RkOjpwYWlyIHsga2V5LT5pZEFzU2hh
cmVkQnVmZmVyKCksIGtleS0+c3RhdHVzKCkgfTsKICAgICB9KTsKIH0KIApkaWZmIC0tZ2l0IGEv
U291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvYXZmb3VuZGF0aW9uL29iamMvQ0RNSW5z
dGFuY2VGYWlyUGxheVN0cmVhbWluZ0FWRk9iakMubW0gYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9y
bS9ncmFwaGljcy9hdmZvdW5kYXRpb24vb2JqYy9DRE1JbnN0YW5jZUZhaXJQbGF5U3RyZWFtaW5n
QVZGT2JqQy5tbQppbmRleCA1ODAyNTFlMTEwMmRjYzMyY2EzYWQ5OTM0MzgzOGE3YTI5OTFmYzIw
Li4wZWNmZGNjMTVkNTg5M2JjZWI2ZDM2Zjk2MWUyNmRhYjc3MTQ3Njc0IDEwMDY0NAotLS0gYS9T
b3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9hdmZvdW5kYXRpb24vb2JqYy9DRE1JbnN0
YW5jZUZhaXJQbGF5U3RyZWFtaW5nQVZGT2JqQy5tbQorKysgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0
Zm9ybS9ncmFwaGljcy9hdmZvdW5kYXRpb24vb2JqYy9DRE1JbnN0YW5jZUZhaXJQbGF5U3RyZWFt
aW5nQVZGT2JqQy5tbQpAQCAtOTM3LDcgKzkzNyw3IEBAIHZvaWQgQ0RNSW5zdGFuY2VTZXNzaW9u
RmFpclBsYXlTdHJlYW1pbmdBVkZPYmpDOjp1cGRhdGVMaWNlbnNlKGNvbnN0IFN0cmluZyYsIExp
CiAgICAgLy8gRklYTUUocmRhcjovL3Byb2JsZW0vMzU1OTIyNzcpOiBzdGFzaCB0aGUgY2FsbGJh
Y2sgYW5kIGNhbGwgaXQgb25jZSBBVkNvbnRlbnRLZXlSZXNwb25zZSBzdXBwb3J0cyBhIHN1Y2Nl
c3MgY2FsbGJhY2suCiAgICAgc3RydWN0IG9iamNfbWV0aG9kX2Rlc2NyaXB0aW9uIG1ldGhvZCA9
IHByb3RvY29sX2dldE1ldGhvZERlc2NyaXB0aW9uKEBwcm90b2NvbChBVkNvbnRlbnRLZXlTZXNz
aW9uRGVsZWdhdGUpLCBAc2VsZWN0b3IoY29udGVudEtleVNlc3Npb246Y29udGVudEtleVJlcXVl
c3REaWRTdWNjZWVkOiksIE5PLCBZRVMpOwogICAgIGlmICghbWV0aG9kLm5hbWUpIHsKLSAgICAg
ICAgS2V5U3RhdHVzVmVjdG9yIGtleVN0YXR1c2VzIHsgc3RkOjptYWtlX3BhaXIoV1RGTW92ZShr
ZXlJRHMuZmlyc3QoKSksIEtleVN0YXR1czo6VXNhYmxlKSB9OworICAgICAgICBLZXlTdGF0dXNW
ZWN0b3Iga2V5U3RhdHVzZXMgeyBzdGQ6OnBhaXIgeyBXVEZNb3ZlKGtleUlEcy5maXJzdCgpKSwg
S2V5U3RhdHVzOjpVc2FibGUgfSB9OwogICAgICAgICBjYWxsYmFjayhmYWxzZSwgc3RkOjptYWtl
X29wdGlvbmFsKFdURk1vdmUoa2V5U3RhdHVzZXMpKSwgc3RkOjpudWxsb3B0LCBzdGQ6Om51bGxv
cHQsIFN1Y2NlZWRlZCk7CiAgICAgICAgIHJldHVybjsKICAgICB9CmRpZmYgLS1naXQgYS9Tb3Vy
Y2UvV2ViQ29yZS9wbGF0Zm9ybS9uZXR3b3JrL0NhY2hlVmFsaWRhdGlvbi5jcHAgYi9Tb3VyY2Uv
V2ViQ29yZS9wbGF0Zm9ybS9uZXR3b3JrL0NhY2hlVmFsaWRhdGlvbi5jcHAKaW5kZXggZGViMzlm
MGE2M2RhOGExZjA2NTI0N2ViN2MwM2U1OGUyZWFjNGE1OS4uNDhjMmZlNTJmNWVlZWJmZGY1Zjg2
ZTJkZDVmNGE5ZmIwZjYxYmI2ZCAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0v
bmV0d29yay9DYWNoZVZhbGlkYXRpb24uY3BwCisrKyBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3Jt
L25ldHdvcmsvQ2FjaGVWYWxpZGF0aW9uLmNwcApAQCAtMjgsNiArMjgsNyBAQAogCiAjaW5jbHVk
ZSAiQ29va2llSmFyLmgiCiAjaW5jbHVkZSAiSFRUUEhlYWRlck1hcC5oIgorI2luY2x1ZGUgIkhU
VFBQYXJzZXJzLmgiCiAjaW5jbHVkZSAiTmV0d29ya1N0b3JhZ2VTZXNzaW9uLmgiCiAjaW5jbHVk
ZSAiUmVzb3VyY2VSZXF1ZXN0LmgiCiAjaW5jbHVkZSAiUmVzb3VyY2VSZXNwb25zZS5oIgpAQCAt
MzUwLDcgKzM1MSw3IEBAIHN0YXRpYyBTdHJpbmcgY29va2llUmVxdWVzdEhlYWRlckZpZWxkVmFs
dWUoY29uc3QgQ29va2llSmFyKiBjb29raWVKYXIsIGNvbnN0IFJlCiAgICAgcmV0dXJuIGNvb2tp
ZUphci0+Y29va2llUmVxdWVzdEhlYWRlckZpZWxkVmFsdWUocmVxdWVzdC5maXJzdFBhcnR5Rm9y
Q29va2llcygpLCBTYW1lU2l0ZUluZm86OmNyZWF0ZShyZXF1ZXN0KSwgcmVxdWVzdC51cmwoKSwg
c3RkOjpudWxsb3B0LCBzdGQ6Om51bGxvcHQsIHJlcXVlc3QudXJsKCkucHJvdG9jb2xJcygiaHR0
cHMiKSA/IEluY2x1ZGVTZWN1cmVDb29raWVzOjpZZXMgOiBJbmNsdWRlU2VjdXJlQ29va2llczo6
Tm8pLmZpcnN0OwogfQogCi1zdGF0aWMgU3RyaW5nIGhlYWRlclZhbHVlRm9yVmFyeShjb25zdCBS
ZXNvdXJjZVJlcXVlc3QmIHJlcXVlc3QsIGNvbnN0IFN0cmluZyYgaGVhZGVyTmFtZSwgRnVuY3Rp
b248U3RyaW5nKCk+JiYgY29va2llUmVxdWVzdEhlYWRlckZpZWxkVmFsdWVGdW5jdGlvbikKK3N0
YXRpYyBTdHJpbmcgaGVhZGVyVmFsdWVGb3JWYXJ5KGNvbnN0IFJlc291cmNlUmVxdWVzdCYgcmVx
dWVzdCwgU3RyaW5nVmlldyBoZWFkZXJOYW1lLCBGdW5jdGlvbjxTdHJpbmcoKT4mJiBjb29raWVS
ZXF1ZXN0SGVhZGVyRmllbGRWYWx1ZUZ1bmN0aW9uKQogewogICAgIC8vIEV4cGxpY2l0IGhhbmRs
aW5nIGZvciBjb29raWVzIGlzIG5lZWRlZCBiZWNhdXNlIHRoZXkgYXJlIGFkZGVkIG1hZ2ljYWxs
eSBieSB0aGUgbmV0d29ya2luZyBsYXllci4KICAgICAvLyBGSVhNRTogVGhlIHZhbHVlIG1pZ2h0
IGhhdmUgY2hhbmdlZCBiZXR3ZWVuIG1ha2luZyB0aGUgcmVxdWVzdCBhbmQgcmV0cmlldmluZyB0
aGUgY29va2llIGhlcmUuCkBAIC0zNTgsMjUgKzM1OSwyNyBAQCBzdGF0aWMgU3RyaW5nIGhlYWRl
clZhbHVlRm9yVmFyeShjb25zdCBSZXNvdXJjZVJlcXVlc3QmIHJlcXVlc3QsIGNvbnN0IFN0cmlu
ZyYgaAogICAgIC8vIGlzIGEgYmxvY2tpbmcgb3BlcmF0aW9uLiBUaGlzIHNob3VsZCBiZSBzdWZm
aWNpZW50IHRvIGNvdmVyIHJlYXNvbmFibGUgY2FzZXMuCiAgICAgaWYgKGhlYWRlck5hbWUgPT0g
aHR0cEhlYWRlck5hbWVTdHJpbmcoSFRUUEhlYWRlck5hbWU6OkNvb2tpZSkpCiAgICAgICAgIHJl
dHVybiBjb29raWVSZXF1ZXN0SGVhZGVyRmllbGRWYWx1ZUZ1bmN0aW9uKCk7Ci0gICAgcmV0dXJu
IHJlcXVlc3QuaHR0cEhlYWRlckZpZWxkKGhlYWRlck5hbWUpOworICAgIHJldHVybiByZXF1ZXN0
Lmh0dHBIZWFkZXJGaWVsZChoZWFkZXJOYW1lLnRvU3RyaW5nV2l0aG91dENvcHlpbmcoKSk7CiB9
CiAKLXN0YXRpYyBWZWN0b3I8c3RkOjpwYWlyPFN0cmluZywgU3RyaW5nPj4gY29sbGVjdFZhcnlp
bmdSZXF1ZXN0SGVhZGVyc0ludGVybmFsKGNvbnN0IFJlc291cmNlUmVzcG9uc2UmIHJlc3BvbnNl
LCBGdW5jdGlvbjxTdHJpbmcoY29uc3QgU3RyaW5nJiBoZWFkZXJOYW1lKT4mJiBoZWFkZXJWYWx1
ZUZvclZhcnlGdW5jdGlvbikKK3N0YXRpYyBWZWN0b3I8c3RkOjpwYWlyPFN0cmluZywgU3RyaW5n
Pj4gY29sbGVjdFZhcnlpbmdSZXF1ZXN0SGVhZGVyc0ludGVybmFsKGNvbnN0IFJlc291cmNlUmVz
cG9uc2UmIHJlc3BvbnNlLCBGdW5jdGlvbjxTdHJpbmcoU3RyaW5nVmlldyBoZWFkZXJOYW1lKT4m
JiBoZWFkZXJWYWx1ZUZvclZhcnlGdW5jdGlvbikKIHsKICAgICBhdXRvIHZhcnlWYWx1ZSA9IHJl
c3BvbnNlLmh0dHBIZWFkZXJGaWVsZChIVFRQSGVhZGVyTmFtZTo6VmFyeSk7CiAgICAgaWYgKHZh
cnlWYWx1ZS5pc0VtcHR5KCkpCiAgICAgICAgIHJldHVybiB7IH07Ci0gICAgcmV0dXJuIHZhcnlW
YWx1ZS5zcGxpdCgnLCcpLm1hcChbJl0oYXV0byYgdmFyeUhlYWRlck5hbWUpIHsKLSAgICAgICAg
YXV0byBoZWFkZXJOYW1lID0gdmFyeUhlYWRlck5hbWUuc3RyaXBXaGl0ZVNwYWNlKCk7Ci0gICAg
ICAgIHJldHVybiBzdGQ6Om1ha2VfcGFpcihoZWFkZXJOYW1lLCBoZWFkZXJWYWx1ZUZvclZhcnlG
dW5jdGlvbihoZWFkZXJOYW1lKSk7Ci0gICAgfSk7CisgICAgVmVjdG9yPHN0ZDo6cGFpcjxTdHJp
bmcsIFN0cmluZz4+IHZhcnlIZWFkZXJzOworICAgIGZvciAoYXV0byBoZWFkZXJOYW1lIDogU3Ry
aW5nVmlldyB7IHZhcnlWYWx1ZSB9LnNwbGl0KCcsJykpIHsKKyAgICAgICAgaGVhZGVyTmFtZSA9
IGhlYWRlck5hbWUuc3RyaXBMZWFkaW5nQW5kVHJhaWxpbmdNYXRjaGVkQ2hhcmFjdGVycyhpc0hU
VFBTcGFjZSk7CisgICAgICAgIHZhcnlIZWFkZXJzLmFwcGVuZChzdGQ6OnBhaXIgeyBoZWFkZXJO
YW1lLnRvU3RyaW5nKCksIGhlYWRlclZhbHVlRm9yVmFyeUZ1bmN0aW9uKGhlYWRlck5hbWUpIH0p
OworICAgIH0KKyAgICByZXR1cm4gdmFyeUhlYWRlcnM7CiB9CiAKIFZlY3RvcjxzdGQ6OnBhaXI8
U3RyaW5nLCBTdHJpbmc+PiBjb2xsZWN0VmFyeWluZ1JlcXVlc3RIZWFkZXJzKE5ldHdvcmtTdG9y
YWdlU2Vzc2lvbiogc3RvcmFnZVNlc3Npb24sIGNvbnN0IFJlc291cmNlUmVxdWVzdCYgcmVxdWVz
dCwgY29uc3QgUmVzb3VyY2VSZXNwb25zZSYgcmVzcG9uc2UpCiB7CiAgICAgaWYgKCFzdG9yYWdl
U2Vzc2lvbikKICAgICAgICAgcmV0dXJuIHsgfTsKLSAgICByZXR1cm4gY29sbGVjdFZhcnlpbmdS
ZXF1ZXN0SGVhZGVyc0ludGVybmFsKHJlc3BvbnNlLCBbJl0gKGNvbnN0IFN0cmluZyYgaGVhZGVy
TmFtZSkgeworICAgIHJldHVybiBjb2xsZWN0VmFyeWluZ1JlcXVlc3RIZWFkZXJzSW50ZXJuYWwo
cmVzcG9uc2UsIFsmXSAoU3RyaW5nVmlldyBoZWFkZXJOYW1lKSB7CiAgICAgICAgIHJldHVybiBo
ZWFkZXJWYWx1ZUZvclZhcnkocmVxdWVzdCwgaGVhZGVyTmFtZSwgWyZdIHsKICAgICAgICAgICAg
IHJldHVybiBjb29raWVSZXF1ZXN0SGVhZGVyRmllbGRWYWx1ZSgqc3RvcmFnZVNlc3Npb24sIHJl
cXVlc3QpOwogICAgICAgICB9KTsKQEAgLTM4NSw3ICszODgsNyBAQCBWZWN0b3I8c3RkOjpwYWly
PFN0cmluZywgU3RyaW5nPj4gY29sbGVjdFZhcnlpbmdSZXF1ZXN0SGVhZGVycyhOZXR3b3JrU3Rv
cmFnZVNlcwogCiBWZWN0b3I8c3RkOjpwYWlyPFN0cmluZywgU3RyaW5nPj4gY29sbGVjdFZhcnlp
bmdSZXF1ZXN0SGVhZGVycyhjb25zdCBDb29raWVKYXIqIGNvb2tpZUphciwgY29uc3QgUmVzb3Vy
Y2VSZXF1ZXN0JiByZXF1ZXN0LCBjb25zdCBSZXNvdXJjZVJlc3BvbnNlJiByZXNwb25zZSkKIHsK
LSAgICByZXR1cm4gY29sbGVjdFZhcnlpbmdSZXF1ZXN0SGVhZGVyc0ludGVybmFsKHJlc3BvbnNl
LCBbJl0gKGNvbnN0IFN0cmluZyYgaGVhZGVyTmFtZSkgeworICAgIHJldHVybiBjb2xsZWN0VmFy
eWluZ1JlcXVlc3RIZWFkZXJzSW50ZXJuYWwocmVzcG9uc2UsIFsmXSAoU3RyaW5nVmlldyBoZWFk
ZXJOYW1lKSB7CiAgICAgICAgIHJldHVybiBoZWFkZXJWYWx1ZUZvclZhcnkocmVxdWVzdCwgaGVh
ZGVyTmFtZSwgWyZdIHsKICAgICAgICAgICAgIHJldHVybiBjb29raWVSZXF1ZXN0SGVhZGVyRmll
bGRWYWx1ZShjb29raWVKYXIsIHJlcXVlc3QpOwogICAgICAgICB9KTsKZGlmZiAtLWdpdCBhL1Nv
dXJjZS9XZWJDb3JlL3BsYXRmb3JtL3RleHQvTG9jYWxlSUNVLmNwcCBiL1NvdXJjZS9XZWJDb3Jl
L3BsYXRmb3JtL3RleHQvTG9jYWxlSUNVLmNwcAppbmRleCA3NTliNzg1OGRjZTBkYmRhMzlkZjQz
ZjI0MjY5Mjg2NDFjNzY2Nzc5Li42NjVkMjdmOGE5NTJhMTQ2ZTNhZWI0MmE0YmQyNGEzMjY1MmYy
MTcyIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS90ZXh0L0xvY2FsZUlDVS5j
cHAKKysrIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vdGV4dC9Mb2NhbGVJQ1UuY3BwCkBAIC0x
ODksNyArMTg5LDcgQEAgc3RhdGljIHN0ZDo6dW5pcXVlX3B0cjxWZWN0b3I8U3RyaW5nPj4gY3Jl
YXRlRmFsbGJhY2tNb250aExhYmVscygpCiB7CiAgICAgYXV0byBsYWJlbHMgPSBtYWtlVW5pcXVl
PFZlY3RvcjxTdHJpbmc+PigpOwogICAgIGxhYmVscy0+cmVzZXJ2ZUluaXRpYWxDYXBhY2l0eShX
VEZfQVJSQVlfTEVOR1RIKFdURjo6bW9udGhGdWxsTmFtZSkpOwotICAgIGZvciAodW5zaWduZWQg
aSA9IDA7IGkgPCBXVEZfQVJSQVlfTEVOR1RIKFdURjo6bW9udGhGdWxsTmFtZSk7ICsraSkKKyAg
ICBmb3IgKHVuc2lnbmVkIGkgPSAwOyBpIDwgc3RkOjpzaXplKFdURjo6bW9udGhGdWxsTmFtZSk7
ICsraSkKICAgICAgICAgbGFiZWxzLT51bmNoZWNrZWRBcHBlbmQoV1RGOjptb250aEZ1bGxOYW1l
W2ldKTsKICAgICByZXR1cm4gbGFiZWxzOwogfQpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUv
cGxhdGZvcm0vdGV4dC9Mb2NhbGVOb25lLmNwcCBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL3Rl
eHQvTG9jYWxlTm9uZS5jcHAKaW5kZXggNGI2ZDc2MGU5NTI3YTQ3N2NjNDk5MDQ4MGRjNTJmODY1
N2YzMzQzNS4uNzBkYmQzNzcxZGYxNzIwMGEyOWE5NmIyNjM0Njg5ZWY0Mjg4MjkzNCAxMDA2NDQK
LS0tIGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vdGV4dC9Mb2NhbGVOb25lLmNwcAorKysgYi9T
b3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS90ZXh0L0xvY2FsZU5vbmUuY3BwCkBAIC0xMTYsOCArMTE2
LDggQEAgY29uc3QgVmVjdG9yPFN0cmluZz4mIExvY2FsZU5vbmU6OnNob3J0TW9udGhMYWJlbHMo
KQogewogICAgIGlmICghbV9zaG9ydE1vbnRoTGFiZWxzLmlzRW1wdHkoKSkKICAgICAgICAgcmV0
dXJuIG1fc2hvcnRNb250aExhYmVsczsKLSAgICBtX3Nob3J0TW9udGhMYWJlbHMucmVzZXJ2ZUNh
cGFjaXR5KFdURl9BUlJBWV9MRU5HVEgoV1RGOjptb250aE5hbWUpKTsKLSAgICBmb3IgKHVuc2ln
bmVkIGkgPSAwOyBpIDwgV1RGX0FSUkFZX0xFTkdUSChXVEY6Om1vbnRoTmFtZSk7ICsraSkKKyAg
ICBtX3Nob3J0TW9udGhMYWJlbHMucmVzZXJ2ZUNhcGFjaXR5KHN0ZDo6c2l6ZShXVEY6Om1vbnRo
TmFtZSkpOworICAgIGZvciAodW5zaWduZWQgaSA9IDA7IGkgPCBzdGQ6OnNpemUoV1RGOjptb250
aE5hbWUpOyArK2kpCiAgICAgICAgIG1fc2hvcnRNb250aExhYmVscy51bmNoZWNrZWRBcHBlbmQo
V1RGOjptb250aE5hbWVbaV0pOwogICAgIHJldHVybiBtX3Nob3J0TW9udGhMYWJlbHM7CiB9CmRp
ZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS90ZXh0L2NvY29hL0xvY2FsZUNvY29h
Lm1tIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vdGV4dC9jb2NvYS9Mb2NhbGVDb2NvYS5tbQpp
bmRleCBmMThkYjQ1NzA4MmY1ZDkyYjA2OTNiZDI0N2YzN2VkYTA3Njg4YjZhLi5kMDE5MDI5ODZh
ZmRlYjU3ZGRhYTc5OGFmZmM1OWQwMjczZDM1YzgyIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29y
ZS9wbGF0Zm9ybS90ZXh0L2NvY29hL0xvY2FsZUNvY29hLm1tCisrKyBiL1NvdXJjZS9XZWJDb3Jl
L3BsYXRmb3JtL3RleHQvY29jb2EvTG9jYWxlQ29jb2EubW0KQEAgLTM5LDYgKzM5LDcgQEAKICNp
bXBvcnQgPHd0Zi9IYXNoTWFwLmg+CiAjaW1wb3J0IDx3dGYvTGFuZ3VhZ2UuaD4KICNpbXBvcnQg
PHd0Zi9SZXRhaW5QdHIuaD4KKyNpbXBvcnQgPHd0Zi9jb2NvYS9WZWN0b3JDb2NvYS5oPgogI2lt
cG9ydCA8d3RmL3RleHQvQXRvbVN0cmluZ0hhc2guaD4KICNpbXBvcnQgIkxvY2FsaXplZERhdGVD
YWNoZS5oIgogCkBAIC0xMDYsMTMgKzEwNywxMiBAQCBjb25zdCBWZWN0b3I8U3RyaW5nPiYgTG9j
YWxlQ29jb2E6Om1vbnRoTGFiZWxzKCkKIHsKICAgICBpZiAoIW1fbW9udGhMYWJlbHMuaXNFbXB0
eSgpKQogICAgICAgICByZXR1cm4gbV9tb250aExhYmVsczsKLSAgICBtX21vbnRoTGFiZWxzLnJl
c2VydmVDYXBhY2l0eSgxMik7CiAgICAgTlNBcnJheSAqYXJyYXkgPSBbc2hvcnREYXRlRm9ybWF0
dGVyKCkuZ2V0KCkgbW9udGhTeW1ib2xzXTsKICAgICBpZiAoW2FycmF5IGNvdW50XSA9PSAxMikg
ewotICAgICAgICBmb3IgKHVuc2lnbmVkIGkgPSAwOyBpIDwgMTI7ICsraSkKLSAgICAgICAgICAg
IG1fbW9udGhMYWJlbHMudW5jaGVja2VkQXBwZW5kKFN0cmluZyhbYXJyYXkgb2JqZWN0QXRJbmRl
eDppXSkpOworICAgICAgICBtX21vbnRoTGFiZWxzID0gbWFrZVZlY3RvcjxTdHJpbmc+KGFycmF5
KTsKICAgICAgICAgcmV0dXJuIG1fbW9udGhMYWJlbHM7CiAgICAgfQorICAgIG1fbW9udGhMYWJl
bHMucmVzZXJ2ZUNhcGFjaXR5KDEyKTsKICAgICBmb3IgKGF1dG8mIG5hbWUgOiBXVEY6Om1vbnRo
RnVsbE5hbWUpCiAgICAgICAgIG1fbW9udGhMYWJlbHMudW5jaGVja2VkQXBwZW5kKG5hbWUpOwog
ICAgIHJldHVybiBtX21vbnRoTGFiZWxzOwpAQCAtMjAwLDEzICsyMDAsMTIgQEAgY29uc3QgVmVj
dG9yPFN0cmluZz4mIExvY2FsZUNvY29hOjpzaG9ydE1vbnRoTGFiZWxzKCkKIHsKICAgICBpZiAo
IW1fc2hvcnRNb250aExhYmVscy5pc0VtcHR5KCkpCiAgICAgICAgIHJldHVybiBtX3Nob3J0TW9u
dGhMYWJlbHM7Ci0gICAgbV9zaG9ydE1vbnRoTGFiZWxzLnJlc2VydmVDYXBhY2l0eSgxMik7CiAg
ICAgTlNBcnJheSAqYXJyYXkgPSBbc2hvcnREYXRlRm9ybWF0dGVyKCkuZ2V0KCkgc2hvcnRNb250
aFN5bWJvbHNdOwogICAgIGlmIChbYXJyYXkgY291bnRdID09IDEyKSB7Ci0gICAgICAgIGZvciAo
dW5zaWduZWQgaSA9IDA7IGkgPCAxMjsgKytpKQotICAgICAgICAgICAgbV9zaG9ydE1vbnRoTGFi
ZWxzLnVuY2hlY2tlZEFwcGVuZChbYXJyYXkgb2JqZWN0QXRJbmRleDppXSk7CisgICAgICAgIG1f
c2hvcnRNb250aExhYmVscyA9IG1ha2VWZWN0b3I8U3RyaW5nPihhcnJheSk7CiAgICAgICAgIHJl
dHVybiBtX3Nob3J0TW9udGhMYWJlbHM7CiAgICAgfQorICAgIG1fc2hvcnRNb250aExhYmVscy5y
ZXNlcnZlQ2FwYWNpdHkoMTIpOwogICAgIGZvciAoYXV0byYgbmFtZSA6IFdURjo6bW9udGhOYW1l
KQogICAgICAgICBtX3Nob3J0TW9udGhMYWJlbHMudW5jaGVja2VkQXBwZW5kKG5hbWUpOwogICAg
IHJldHVybiBtX3Nob3J0TW9udGhMYWJlbHM7CkBAIC0yMTgsOSArMjE3LDcgQEAgY29uc3QgVmVj
dG9yPFN0cmluZz4mIExvY2FsZUNvY29hOjpzdGFuZEFsb25lTW9udGhMYWJlbHMoKQogICAgICAg
ICByZXR1cm4gbV9zdGFuZEFsb25lTW9udGhMYWJlbHM7CiAgICAgTlNBcnJheSAqYXJyYXkgPSBb
c2hvcnREYXRlRm9ybWF0dGVyKCkuZ2V0KCkgc3RhbmRhbG9uZU1vbnRoU3ltYm9sc107CiAgICAg
aWYgKFthcnJheSBjb3VudF0gPT0gMTIpIHsKLSAgICAgICAgbV9zdGFuZEFsb25lTW9udGhMYWJl
bHMucmVzZXJ2ZUNhcGFjaXR5KDEyKTsKLSAgICAgICAgZm9yICh1bnNpZ25lZCBpID0gMDsgaSA8
IDEyOyArK2kpCi0gICAgICAgICAgICBtX3N0YW5kQWxvbmVNb250aExhYmVscy51bmNoZWNrZWRB
cHBlbmQoW2FycmF5IG9iamVjdEF0SW5kZXg6aV0pOworICAgICAgICBtX3N0YW5kQWxvbmVNb250
aExhYmVscyA9IG1ha2VWZWN0b3I8U3RyaW5nPihhcnJheSk7CiAgICAgICAgIHJldHVybiBtX3N0
YW5kQWxvbmVNb250aExhYmVsczsKICAgICB9CiAgICAgbV9zdGFuZEFsb25lTW9udGhMYWJlbHMg
PSBzaG9ydE1vbnRoTGFiZWxzKCk7CkBAIC0yMzMsOSArMjMwLDcgQEAgY29uc3QgVmVjdG9yPFN0
cmluZz4mIExvY2FsZUNvY29hOjpzaG9ydFN0YW5kQWxvbmVNb250aExhYmVscygpCiAgICAgICAg
IHJldHVybiBtX3Nob3J0U3RhbmRBbG9uZU1vbnRoTGFiZWxzOwogICAgIE5TQXJyYXkgKmFycmF5
ID0gW3Nob3J0RGF0ZUZvcm1hdHRlcigpLmdldCgpIHNob3J0U3RhbmRhbG9uZU1vbnRoU3ltYm9s
c107CiAgICAgaWYgKFthcnJheSBjb3VudF0gPT0gMTIpIHsKLSAgICAgICAgbV9zaG9ydFN0YW5k
QWxvbmVNb250aExhYmVscy5yZXNlcnZlQ2FwYWNpdHkoMTIpOwotICAgICAgICBmb3IgKHVuc2ln
bmVkIGkgPSAwOyBpIDwgMTI7ICsraSkKLSAgICAgICAgICAgIG1fc2hvcnRTdGFuZEFsb25lTW9u
dGhMYWJlbHMudW5jaGVja2VkQXBwZW5kKFthcnJheSBvYmplY3RBdEluZGV4OmldKTsKKyAgICAg
ICAgbV9zaG9ydFN0YW5kQWxvbmVNb250aExhYmVscyA9IG1ha2VWZWN0b3I8U3RyaW5nPihhcnJh
eSk7CiAgICAgICAgIHJldHVybiBtX3Nob3J0U3RhbmRBbG9uZU1vbnRoTGFiZWxzOwogICAgIH0K
ICAgICBtX3Nob3J0U3RhbmRBbG9uZU1vbnRoTGFiZWxzID0gc2hvcnRNb250aExhYmVscygpOwpk
aWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvdGVzdGluZy9Nb2NrQ0RNRmFjdG9yeS5jcHAgYi9T
b3VyY2UvV2ViQ29yZS90ZXN0aW5nL01vY2tDRE1GYWN0b3J5LmNwcAppbmRleCBiMjE1ZTBkMGE4
MTRlNWRhODcyZWEwNDM3MzIzOTk2MTJiOGE2YTNiLi41NjA3ZDQ5ZmNkZTlkNWI3NDE0ODcyYmRi
OTFmYWY2OTY0ZjU2ODhlIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS90ZXN0aW5nL01vY2tD
RE1GYWN0b3J5LmNwcAorKysgYi9Tb3VyY2UvV2ViQ29yZS90ZXN0aW5nL01vY2tDRE1GYWN0b3J5
LmNwcApAQCAtMzQ0LDcgKzM0NCw3IEBAIHZvaWQgTW9ja0NETUluc3RhbmNlU2Vzc2lvbjo6dXBk
YXRlTGljZW5zZShjb25zdCBTdHJpbmcmIHNlc3Npb25JRCwgTGljZW5zZVR5cGUsCiAgICAgICAg
IGNvbnN0IGF1dG8qIGtleXMgPSBmYWN0b3J5LT5rZXlzRm9yU2Vzc2lvbldpdGhJRChzZXNzaW9u
SUQpOwogICAgICAgICBpZiAoa2V5cykgewogICAgICAgICAgICAgY2hhbmdlZEtleXMgPSBrZXlz
LT5tYXAoW10oYXV0byYga2V5KSB7Ci0gICAgICAgICAgICAgICAgcmV0dXJuIHN0ZDo6bWFrZV9w
YWlyKGtleS5jb3B5UmVmKCksIEtleVN0YXR1czo6VXNhYmxlKTsKKyAgICAgICAgICAgICAgICBy
ZXR1cm4gc3RkOjpwYWlyIHsga2V5LmNvcHlSZWYoKSwgS2V5U3RhdHVzOjpVc2FibGUgfTsKICAg
ICAgICAgICAgIH0pOwogICAgICAgICB9CiAgICAgfQpAQCAtMzkzLDcgKzM5Myw3IEBAIHZvaWQg
TW9ja0NETUluc3RhbmNlU2Vzc2lvbjo6cmVtb3ZlU2Vzc2lvbkRhdGEoY29uc3QgU3RyaW5nJiBp
ZCwgTGljZW5zZVR5cGUsIFJlCiAKICAgICBhdXRvIGtleXMgPSBmYWN0b3J5LT5yZW1vdmVLZXlz
RnJvbVNlc3Npb25XaXRoSUQoaWQpOwogICAgIGF1dG8ga2V5U3RhdHVzVmVjdG9yID0gV1RGOjpt
YXAoV1RGTW92ZShrZXlzKSwgW10oYXV0byYmIGtleSkgewotICAgICAgICByZXR1cm4gc3RkOjpt
YWtlX3BhaXIoV1RGTW92ZShrZXkpLCBLZXlTdGF0dXM6OlJlbGVhc2VkKTsKKyAgICAgICAgcmV0
dXJuIHN0ZDo6cGFpciB7IFdURk1vdmUoa2V5KSwgS2V5U3RhdHVzOjpSZWxlYXNlZCB9OwogICAg
IH0pOwogCiAgICAgQ1N0cmluZyBtZXNzYWdlIHsgInJlbW92ZS1tZXNzYWdlIiB9Owo=
</data>
<flag name="commit-queue"
          id="479440"
          type_id="3"
          status="-"
          setter="ews-feeder"
    />
          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>452413</attachid>
            <date>2022-02-17 12:33:54 -0800</date>
            <delta_ts>2022-02-17 13:08:34 -0800</delta_ts>
            <desc>Patch</desc>
            <filename>bug-236748-20220217123353.patch</filename>
            <type>text/plain</type>
            <size>25741</size>
            <attacher name="Chris Dumez">cdumez</attacher>
            
              <data encoding="base64">U3VidmVyc2lvbiBSZXZpc2lvbjogMjkwMDM0CmRpZmYgLS1naXQgYS9Tb3VyY2UvSmF2YVNjcmlw
dENvcmUvQ2hhbmdlTG9nIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL0NoYW5nZUxvZwppbmRleCA0
MjZiOGYzMzU3OWIwMDA4OWM4N2Y3NTNmNzIyMjZiYTEzN2Y2Nzg3Li5lMTBhMmU3YjJiMGViNDQy
YjIyZDQ0NGYzN2RjYjI1MGYwMGQ5NzBkIDEwMDY0NAotLS0gYS9Tb3VyY2UvSmF2YVNjcmlwdENv
cmUvQ2hhbmdlTG9nCisrKyBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9DaGFuZ2VMb2cKQEAgLTEs
MyArMSwxOCBAQAorMjAyMi0wMi0xNyAgQ2hyaXMgRHVtZXogIDxjZHVtZXpAYXBwbGUuY29tPgor
CisgICAgICAgIENsZWFuIHVwIC8gb3B0aW1pemUgY2FsbCBzaXRlcyBjb25zdHJ1Y3RpbmcgdmVj
dG9ycworICAgICAgICBodHRwczovL2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9MjM2
NzQ4CisgICAgICAgIDxyZGFyOi8vcHJvYmxlbS84OTA5MDcxMD4KKworICAgICAgICBSZXZpZXdl
ZCBieSBOT0JPRFkgKE9PUFMhKS4KKworICAgICAgICBGb2xsb3ctdXAgdG8gcjI5MDAyNiB0byBh
ZGRyZXNzIGZlZWRiYWNrIGZyb20gRGFyaW4uCisKKyAgICAgICAgKiBiMy9haXIvQWlyQ29kZS5j
cHA6CisgICAgICAgIChKU0M6OkIzOjpBaXI6OkNvZGU6OnNldE51bUVudHJ5cG9pbnRzKToKKyAg
ICAgICAgKiBwYXJzZXIvVmFyaWFibGVFbnZpcm9ubWVudC5jcHA6CisgICAgICAgIChKU0M6OkNv
bXBhY3RURFpFbnZpcm9ubWVudDo6Q29tcGFjdFREWkVudmlyb25tZW50KToKKwogMjAyMi0wMi0x
NyAgQ2hyaXMgRHVtZXogIDxjZHVtZXpAYXBwbGUuY29tPgogCiAgICAgICAgIENsZWFuIHVwIC8g
b3B0aW1pemUgY2FsbCBzaXRlcyBjb25zdHJ1Y3RpbmcgdmVjdG9ycwpkaWZmIC0tZ2l0IGEvU291
cmNlL1dlYkNvcmUvQ2hhbmdlTG9nIGIvU291cmNlL1dlYkNvcmUvQ2hhbmdlTG9nCmluZGV4IDgy
NmI0YTBjMzRiZTg0ZTMyOGU0MGQyNTYwYmI4NjM0Mzk5MDg0NWIuLjU0NmJhOWE0N2Y2M2FiMmZh
Mjc2OTE2NzE4NzM4ZDY0MjQ1NDI3YmMgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL0NoYW5n
ZUxvZworKysgYi9Tb3VyY2UvV2ViQ29yZS9DaGFuZ2VMb2cKQEAgLTEsMyArMSw1MiBAQAorMjAy
Mi0wMi0xNyAgQ2hyaXMgRHVtZXogIDxjZHVtZXpAYXBwbGUuY29tPgorCisgICAgICAgIENsZWFu
IHVwIC8gb3B0aW1pemUgY2FsbCBzaXRlcyBjb25zdHJ1Y3RpbmcgdmVjdG9ycworICAgICAgICBo
dHRwczovL2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9MjM2NzQ4CisgICAgICAgIDxy
ZGFyOi8vcHJvYmxlbS84OTA5MDcxMD4KKworICAgICAgICBSZXZpZXdlZCBieSBOT0JPRFkgKE9P
UFMhKS4KKworICAgICAgICBGb2xsb3ctdXAgdG8gcjI5MDAyNiB0byBhZGRyZXNzIGZlZWRiYWNr
IGZyb20gRGFyaW4uCisKKyAgICAgICAgKiBNb2R1bGVzL2VuY3J5cHRlZG1lZGlhL01lZGlhS2V5
U2Vzc2lvbi5jcHA6CisgICAgICAgIChXZWJDb3JlOjpNZWRpYUtleVNlc3Npb246OnVwZGF0ZUtl
eVN0YXR1c2VzKToKKyAgICAgICAgKiBNb2R1bGVzL2luZGV4ZWRkYi9zZXJ2ZXIvU1FMaXRlSURC
Q3Vyc29yLmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OklEQlNlcnZlcjo6U1FMaXRlSURCQ3Vyc29y
OjpjdXJyZW50RGF0YSk6CisgICAgICAgICogYWNjZXNzaWJpbGl0eS9pc29sYXRlZHRyZWUvQVhJ
c29sYXRlZE9iamVjdC5jcHA6CisgICAgICAgIChXZWJDb3JlOjpBWElzb2xhdGVkT2JqZWN0Ojpz
ZXRNYXRoc2NyaXB0cyk6CisgICAgICAgICogYmluZGluZ3MvanMvU2VyaWFsaXplZFNjcmlwdFZh
bHVlLmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OkNsb25lRGVzZXJpYWxpemVyOjpyZWFkU3RyaW5n
KToKKyAgICAgICAgKiBjc3MvU3R5bGVQcm9wZXJ0aWVzLmNwcDoKKyAgICAgICAgKFdlYkNvcmU6
OkRlZmVycmVkU3R5bGVQcm9wZXJ0aWVzOjpEZWZlcnJlZFN0eWxlUHJvcGVydGllcyk6CisgICAg
ICAgICogY3NzL1N0eWxlUnVsZS5jcHA6CisgICAgICAgIChXZWJDb3JlOjpEZWZlcnJlZFN0eWxl
R3JvdXBSdWxlTGlzdDo6RGVmZXJyZWRTdHlsZUdyb3VwUnVsZUxpc3QpOgorICAgICAgICAqIGRv
bS9FbGVtZW50RGF0YS5jcHA6CisgICAgICAgIChXZWJDb3JlOjpVbmlxdWVFbGVtZW50RGF0YTo6
VW5pcXVlRWxlbWVudERhdGEpOgorICAgICAgICAqIGxvYWRlci9hcmNoaXZlL2NmL0xlZ2FjeVdl
YkFyY2hpdmUuY3BwOgorICAgICAgICAoV2ViQ29yZTo6TGVnYWN5V2ViQXJjaGl2ZTo6Y3JlYXRl
RnJvbVNlbGVjdGlvbik6CisgICAgICAgICogcGFnZS9jc3AvQ29udGVudFNlY3VyaXR5UG9saWN5
LmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OkNvbnRlbnRTZWN1cml0eVBvbGljeTo6cmVzcG9uc2VI
ZWFkZXJzIGNvbnN0KToKKyAgICAgICAgKiBwbGF0Zm9ybS9lbmNyeXB0ZWRtZWRpYS9DRE1Qcm94
eS5jcHA6CisgICAgICAgIChXZWJDb3JlOjpLZXlTdG9yZTo6Y29udmVydFRvSlNLZXlTdGF0dXNW
ZWN0b3IgY29uc3QpOgorICAgICAgICAqIHBsYXRmb3JtL2dyYXBoaWNzL2F2Zm91bmRhdGlvbi9v
YmpjL0NETUluc3RhbmNlRmFpclBsYXlTdHJlYW1pbmdBVkZPYmpDLm1tOgorICAgICAgICAoV2Vi
Q29yZTo6Q0RNSW5zdGFuY2VTZXNzaW9uRmFpclBsYXlTdHJlYW1pbmdBVkZPYmpDOjp1cGRhdGVM
aWNlbnNlKToKKyAgICAgICAgKiBwbGF0Zm9ybS9uZXR3b3JrL0NhY2hlVmFsaWRhdGlvbi5jcHA6
CisgICAgICAgIChXZWJDb3JlOjpoZWFkZXJWYWx1ZUZvclZhcnkpOgorICAgICAgICAoV2ViQ29y
ZTo6Y29sbGVjdFZhcnlpbmdSZXF1ZXN0SGVhZGVyc0ludGVybmFsKToKKyAgICAgICAgKFdlYkNv
cmU6OmNvbGxlY3RWYXJ5aW5nUmVxdWVzdEhlYWRlcnMpOgorICAgICAgICAqIHBsYXRmb3JtL3Rl
eHQvTG9jYWxlSUNVLmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OmNyZWF0ZUZhbGxiYWNrTW9udGhM
YWJlbHMpOgorICAgICAgICAqIHBsYXRmb3JtL3RleHQvTG9jYWxlTm9uZS5jcHA6CisgICAgICAg
IChXZWJDb3JlOjpMb2NhbGVOb25lOjpzaG9ydE1vbnRoTGFiZWxzKToKKyAgICAgICAgKiBwbGF0
Zm9ybS90ZXh0L2NvY29hL0xvY2FsZUNvY29hLm1tOgorICAgICAgICAoV2ViQ29yZTo6TG9jYWxl
Q29jb2E6Om1vbnRoTGFiZWxzKToKKyAgICAgICAgKFdlYkNvcmU6OkxvY2FsZUNvY29hOjpzaG9y
dE1vbnRoTGFiZWxzKToKKyAgICAgICAgKFdlYkNvcmU6OkxvY2FsZUNvY29hOjpzdGFuZEFsb25l
TW9udGhMYWJlbHMpOgorICAgICAgICAoV2ViQ29yZTo6TG9jYWxlQ29jb2E6OnNob3J0U3RhbmRB
bG9uZU1vbnRoTGFiZWxzKToKKyAgICAgICAgKiB0ZXN0aW5nL01vY2tDRE1GYWN0b3J5LmNwcDoK
KyAgICAgICAgKFdlYkNvcmU6Ok1vY2tDRE1JbnN0YW5jZVNlc3Npb246OnVwZGF0ZUxpY2Vuc2Up
OgorICAgICAgICAoV2ViQ29yZTo6TW9ja0NETUluc3RhbmNlU2Vzc2lvbjo6cmVtb3ZlU2Vzc2lv
bkRhdGEpOgorCiAyMDIyLTAyLTE3ICBNYXR0IFdvb2Ryb3cgIDxtYXR0d29vZHJvd0BhcHBsZS5j
b20+CiAKICAgICAgICAgRml4IGFicy1wb3MgYnJlYWR0aCBpc3N1ZSB3aGVuIHVzaW5nICdhdXRv
JwpkaWZmIC0tZ2l0IGEvU291cmNlL0phdmFTY3JpcHRDb3JlL2IzL2Fpci9BaXJDb2RlLmNwcCBi
L1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9iMy9haXIvQWlyQ29kZS5jcHAKaW5kZXggZTY5N2JkNTMw
NThmZGUxMTUyM2ZlNWI4MzU5NDgzOTIxZDU3MzI5My4uYjViYjAzM2QwNjMxZjlhODQ3ODE1NDU3
NjRiMWY3MzQ5NjMyNjRiZSAxMDA2NDQKLS0tIGEvU291cmNlL0phdmFTY3JpcHRDb3JlL2IzL2Fp
ci9BaXJDb2RlLmNwcAorKysgYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvYjMvYWlyL0FpckNvZGUu
Y3BwCkBAIC0zMzMsNyArMzMzLDcgQEAgdW5zaWduZWQgQ29kZTo6anNIYXNoKCkgY29uc3QKIAog
dm9pZCBDb2RlOjpzZXROdW1FbnRyeXBvaW50cyh1bnNpZ25lZCBudW1FbnRyeVBvaW50cykKIHsK
LSAgICBtX3Byb2xvZ3VlR2VuZXJhdG9ycyA9IFZlY3RvciB7IG51bUVudHJ5UG9pbnRzLCBtX2Rl
ZmF1bHRQcm9sb2d1ZUdlbmVyYXRvci5jb3B5UmVmKCkgfTsKKyAgICBtX3Byb2xvZ3VlR2VuZXJh
dG9ycyA9IHsgbnVtRW50cnlQb2ludHMsIG1fZGVmYXVsdFByb2xvZ3VlR2VuZXJhdG9yLmNvcHlS
ZWYoKSB9OwogfQogCiB9IH0gfSAvLyBuYW1lc3BhY2UgSlNDOjpCMzo6QWlyCmRpZmYgLS1naXQg
YS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvcGFyc2VyL1ZhcmlhYmxlRW52aXJvbm1lbnQuY3BwIGIv
U291cmNlL0phdmFTY3JpcHRDb3JlL3BhcnNlci9WYXJpYWJsZUVudmlyb25tZW50LmNwcAppbmRl
eCAyNjU0ZjQ2MTRlNzViNzVlMmNkOTA2NTE0MDc2ZGFkMGY4NTAxOTY2Li45ZGE5Y2MyNzVjNzA5
NWY5YTZjMWExNzMzYzhkZjMwZDk0OTQ4ZTI5IDEwMDY0NAotLS0gYS9Tb3VyY2UvSmF2YVNjcmlw
dENvcmUvcGFyc2VyL1ZhcmlhYmxlRW52aXJvbm1lbnQuY3BwCisrKyBiL1NvdXJjZS9KYXZhU2Ny
aXB0Q29yZS9wYXJzZXIvVmFyaWFibGVFbnZpcm9ubWVudC5jcHAKQEAgLTIxOSw3ICsyMTksNyBA
QCB2b2lkIENvbXBhY3RURFpFbnZpcm9ubWVudDo6c29ydENvbXBhY3QoQ29tcGFjdCYgY29tcGFj
dCkKIENvbXBhY3RURFpFbnZpcm9ubWVudDo6Q29tcGFjdFREWkVudmlyb25tZW50KGNvbnN0IFRE
WkVudmlyb25tZW50JiBlbnYpCiB7CiAgICAgbV9oYXNoID0gMDsgLy8gTm90ZTogWE9SIGlzIGNv
bW11dGF0aXZlIHNvIG9yZGVyIGRvZXNuJ3QgbWF0dGVyIGhlcmUuCi0gICAgQ29tcGFjdCB2YXJp
YWJsZXMgPSBXVEY6Om1hcChlbnYsIFt0aGlzXShhdXRvJiBrZXkpIC0+IFBhY2tlZFJlZlB0cjxV
bmlxdWVkU3RyaW5nSW1wbD4geworICAgIGF1dG8gdmFyaWFibGVzID0gV1RGOjptYXAoZW52LCBb
dGhpc10oYXV0byYga2V5KSAtPiBQYWNrZWRSZWZQdHI8VW5pcXVlZFN0cmluZ0ltcGw+IHsKICAg
ICAgICAgbV9oYXNoIF49IGtleS0+aGFzaCgpOwogICAgICAgICByZXR1cm4ga2V5LmdldCgpOwog
ICAgIH0pOwpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvTW9kdWxlcy9lbmNyeXB0ZWRtZWRp
YS9NZWRpYUtleVNlc3Npb24uY3BwIGIvU291cmNlL1dlYkNvcmUvTW9kdWxlcy9lbmNyeXB0ZWRt
ZWRpYS9NZWRpYUtleVNlc3Npb24uY3BwCmluZGV4IDM4ZGZjYzFiOTc4NDYyMzIyZWM3ZDdlYmU0
ODNkNjZkODc2MDJlMzAuLmZiNGE3Zjg4NGY2Nzk1NWI2ZDc5ZDAyY2U1Y2RkNTg0OWQyZmM5NjUg
MTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL01vZHVsZXMvZW5jcnlwdGVkbWVkaWEvTWVkaWFL
ZXlTZXNzaW9uLmNwcAorKysgYi9Tb3VyY2UvV2ViQ29yZS9Nb2R1bGVzL2VuY3J5cHRlZG1lZGlh
L01lZGlhS2V5U2Vzc2lvbi5jcHAKQEAgLTcwMSw3ICs3MDEsNyBAQCB2b2lkIE1lZGlhS2V5U2Vz
c2lvbjo6dXBkYXRlS2V5U3RhdHVzZXMoQ0RNSW5zdGFuY2VTZXNzaW9uOjpLZXlTdGF0dXNWZWN0
b3ImJiBpbgogICAgIH07CiAKICAgICBtX3N0YXR1c2VzID0gV1RGOjptYXAoV1RGTW92ZShpbnB1
dFN0YXR1c2VzKSwgW10oYXV0byYmIHN0YXR1cykgewotICAgICAgICByZXR1cm4gc3RkOjptYWtl
X3BhaXIoV1RGTW92ZShzdGF0dXMuZmlyc3QpLCB0b01lZGlhS2V5U3RhdHVzKHN0YXR1cy5zZWNv
bmQpKTsKKyAgICAgICAgcmV0dXJuIHN0ZDo6cGFpciB7IFdURk1vdmUoc3RhdHVzLmZpcnN0KSwg
dG9NZWRpYUtleVN0YXR1cyhzdGF0dXMuc2Vjb25kKSB9OwogICAgIH0pOwogCiAgICAgLy8gNS4g
UXVldWUgYSB0YXNrIHRvIGZpcmUgYSBzaW1wbGUgZXZlbnQgbmFtZWQga2V5c3RhdHVzZXNjaGFu
Z2UgYXQgdGhlIHNlc3Npb24uCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9Nb2R1bGVzL2lu
ZGV4ZWRkYi9zZXJ2ZXIvU1FMaXRlSURCQ3Vyc29yLmNwcCBiL1NvdXJjZS9XZWJDb3JlL01vZHVs
ZXMvaW5kZXhlZGRiL3NlcnZlci9TUUxpdGVJREJDdXJzb3IuY3BwCmluZGV4IDY2N2Y1ZTc5NTdi
NGI2NTc2YjgyM2E2NWMwNDg5YWFjZDQ3ODkzOGQuLjQyZDBiN2MwOTYzMDU1NGRhZGY3ZTYyNGE5
Y2VlZWQxMjQ0NGQwNDMgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL01vZHVsZXMvaW5kZXhl
ZGRiL3NlcnZlci9TUUxpdGVJREJDdXJzb3IuY3BwCisrKyBiL1NvdXJjZS9XZWJDb3JlL01vZHVs
ZXMvaW5kZXhlZGRiL3NlcnZlci9TUUxpdGVJREJDdXJzb3IuY3BwCkBAIC0xMTYsNyArMTE2LDcg
QEAgdm9pZCBTUUxpdGVJREJDdXJzb3I6OmN1cnJlbnREYXRhKElEQkdldFJlc3VsdCYgcmVzdWx0
LCBjb25zdCBzdGQ6Om9wdGlvbmFsPElEQksKICAgICB9CiAKICAgICBWZWN0b3I8SURCQ3Vyc29y
UmVjb3JkPiBwcmVmZXRjaGVkUmVjb3JkczsKLSAgICBwcmVmZXRjaGVkUmVjb3Jkcy5yZXNlcnZl
SW5pdGlhbENhcGFjaXR5KG1fZmV0Y2hlZFJlY29yZHMuc2l6ZSgpKTsKKyAgICBwcmVmZXRjaGVk
UmVjb3Jkcy5yZXNlcnZlSW5pdGlhbENhcGFjaXR5KG1fZmV0Y2hlZFJlY29yZHMuc2l6ZSgpIC0g
MSk7CiAgICAgYm9vbCBpc0ZpcnN0ID0gdHJ1ZTsKICAgICBmb3IgKGF1dG8mIHJlY29yZCA6IG1f
ZmV0Y2hlZFJlY29yZHMpIHsKICAgICAgICAgaWYgKHJlY29yZC5pc1Rlcm1pbmFsUmVjb3JkKCkp
CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9hY2Nlc3NpYmlsaXR5L2lzb2xhdGVkdHJlZS9B
WElzb2xhdGVkT2JqZWN0LmNwcCBiL1NvdXJjZS9XZWJDb3JlL2FjY2Vzc2liaWxpdHkvaXNvbGF0
ZWR0cmVlL0FYSXNvbGF0ZWRPYmplY3QuY3BwCmluZGV4IDMzZWExMGEzMWVmOTNkYWJiODk1ZDU0
MjU0MWNhZDg1NGY2ODZlMDIuLmJkZjgyNWQyZDFjMGM0YWQ5NmYwODVmY2M2YWUwZjMxMDIzOTAw
ZDEgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL2FjY2Vzc2liaWxpdHkvaXNvbGF0ZWR0cmVl
L0FYSXNvbGF0ZWRPYmplY3QuY3BwCisrKyBiL1NvdXJjZS9XZWJDb3JlL2FjY2Vzc2liaWxpdHkv
aXNvbGF0ZWR0cmVlL0FYSXNvbGF0ZWRPYmplY3QuY3BwCkBAIC00NDUsNyArNDQ1LDcgQEAgdm9p
ZCBBWElzb2xhdGVkT2JqZWN0OjpzZXRNYXRoc2NyaXB0cyhBWFByb3BlcnR5TmFtZSBwcm9wZXJ0
eU5hbWUsIEFYQ29yZU9iamVjdCYKICAgICAgICAgcmV0dXJuOwogCiAgICAgYXV0byBpZFBhaXJz
ID0gcGFpcnMubWFwKFtdKGF1dG8mIG1hdGhQYWlyKSB7Ci0gICAgICAgIHJldHVybiBzdGQ6Om1h
a2VfcGFpcihtYXRoUGFpci5maXJzdCA/IG1hdGhQYWlyLmZpcnN0LT5vYmplY3RJRCgpIDogQVhJ
RCgpLCBtYXRoUGFpci5zZWNvbmQgPyBtYXRoUGFpci5zZWNvbmQtPm9iamVjdElEKCkgOiBBWElE
KCkpOworICAgICAgICByZXR1cm4gc3RkOjpwYWlyIHsgbWF0aFBhaXIuZmlyc3QgPyBtYXRoUGFp
ci5maXJzdC0+b2JqZWN0SUQoKSA6IEFYSUQoKSwgbWF0aFBhaXIuc2Vjb25kID8gbWF0aFBhaXIu
c2Vjb25kLT5vYmplY3RJRCgpIDogQVhJRCgpIH07CiAgICAgfSk7CiAgICAgc2V0UHJvcGVydHko
cHJvcGVydHlOYW1lLCBXVEZNb3ZlKGlkUGFpcnMpKTsKIH0KZGlmZiAtLWdpdCBhL1NvdXJjZS9X
ZWJDb3JlL2JpbmRpbmdzL2pzL1NlcmlhbGl6ZWRTY3JpcHRWYWx1ZS5jcHAgYi9Tb3VyY2UvV2Vi
Q29yZS9iaW5kaW5ncy9qcy9TZXJpYWxpemVkU2NyaXB0VmFsdWUuY3BwCmluZGV4IGQxNGU3OTAy
ODhmZGMzMmIzOTMzNTlhYmVhNTY4NzdkNDc1NmViODIuLmFlOTlmNmI1NzhlN2QxMWQwZTExMzJm
ZTYxMWJkODlhODU5ZDEyYmUgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL2JpbmRpbmdzL2pz
L1NlcmlhbGl6ZWRTY3JpcHRWYWx1ZS5jcHAKKysrIGIvU291cmNlL1dlYkNvcmUvYmluZGluZ3Mv
anMvU2VyaWFsaXplZFNjcmlwdFZhbHVlLmNwcApAQCAtMjQ1NSwxNCArMjQ1NSwxMyBAQCBwcml2
YXRlOgogICAgICAgICBzdHIgPSBTdHJpbmcocmVpbnRlcnByZXRfY2FzdDxjb25zdCBVQ2hhcio+
KHB0ciksIGxlbmd0aCk7CiAgICAgICAgIHB0ciArPSBsZW5ndGggKiBzaXplb2YoVUNoYXIpOwog
I2Vsc2UKLSAgICAgICAgVmVjdG9yPFVDaGFyPiBidWZmZXI7Ci0gICAgICAgIGJ1ZmZlci5yZXNl
cnZlSW5pdGlhbENhcGFjaXR5KGxlbmd0aCk7Ci0gICAgICAgIGZvciAodW5zaWduZWQgaSA9IDA7
IGkgPCBsZW5ndGg7IGkrKykgewotICAgICAgICAgICAgdWludDE2X3QgY2g7Ci0gICAgICAgICAg
ICByZWFkTGl0dGxlRW5kaWFuKHB0ciwgZW5kLCBjaCk7Ci0gICAgICAgICAgICBidWZmZXIudW5j
aGVja2VkQXBwZW5kKGNoKTsKLSAgICAgICAgfQotICAgICAgICBzdHIgPSBTdHJpbmc6OmFkb3B0
KFdURk1vdmUoYnVmZmVyKSk7CisgICAgICAgIFVDaGFyKiBjaGFyYWN0ZXJzOworICAgICAgICBz
dHIgPSBTdHJpbmc6OmNyZWF0ZVVuaW5pdGlhbGl6ZWQobGVuZ3RoLCBjaGFyYWN0ZXJzKTsKKyAg
ICAgICAgZm9yICh1bnNpZ25lZCBpID0gMDsgaSA8IGxlbmd0aDsgISFpKSB7CisgICAgICAgICAg
ICB1aW50MTZfdCBjOworICAgICAgICAgICAgcmVhZExpdHRsZUVuZGlhbihwdHIsIGVuZCwgYyk7
CisgICAgICAgICAgICBjaGFyYWN0ZXJzW2ldID0gYzsKKyAgICAgICAgfQogI2VuZGlmCiAgICAg
ICAgIHJldHVybiB0cnVlOwogICAgIH0KZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL2Nzcy9T
dHlsZVByb3BlcnRpZXMuY3BwIGIvU291cmNlL1dlYkNvcmUvY3NzL1N0eWxlUHJvcGVydGllcy5j
cHAKaW5kZXggYWUzOGI4ZTA4NWEyNGFhYWUwNGU3Y2I1ZGYyNDNmODcxMTVjYjBmNy4uZjJlNWE5
YjRhNDlkNDAxZjRhZDM4NjFlNGRjNWI0ZGRiYzM5ZmU0YyAxMDA2NDQKLS0tIGEvU291cmNlL1dl
YkNvcmUvY3NzL1N0eWxlUHJvcGVydGllcy5jcHAKKysrIGIvU291cmNlL1dlYkNvcmUvY3NzL1N0
eWxlUHJvcGVydGllcy5jcHAKQEAgLTE4MDMsMTAgKzE4MDMsOSBAQCBSZWY8RGVmZXJyZWRTdHls
ZVByb3BlcnRpZXM+IERlZmVycmVkU3R5bGVQcm9wZXJ0aWVzOjpjcmVhdGUoY29uc3QgQ1NTUGFy
c2VyVG9rZQogCiBEZWZlcnJlZFN0eWxlUHJvcGVydGllczo6RGVmZXJyZWRTdHlsZVByb3BlcnRp
ZXMoY29uc3QgQ1NTUGFyc2VyVG9rZW5SYW5nZSYgcmFuZ2UsIENTU0RlZmVycmVkUGFyc2VyJiBw
YXJzZXIpCiAgICAgOiBTdHlsZVByb3BlcnRpZXNCYXNlKHBhcnNlci5tb2RlKCksIERlZmVycmVk
UHJvcGVydGllc1R5cGUpCisgICAgLCBtX3Rva2VucyhyYW5nZS5iZWdpbigpLCByYW5nZS5lbmQo
KSAtIHJhbmdlLmJlZ2luKCkpCiAgICAgLCBtX3BhcnNlcihwYXJzZXIpCiB7Ci0gICAgc2l6ZV90
IGxlbmd0aCA9IHJhbmdlLmVuZCgpIC0gcmFuZ2UuYmVnaW4oKTsKLSAgICBtX3Rva2Vucy5hcHBl
bmQocmFuZ2UuYmVnaW4oKSwgbGVuZ3RoKTsKIH0KICAgICAKIERlZmVycmVkU3R5bGVQcm9wZXJ0
aWVzOjp+RGVmZXJyZWRTdHlsZVByb3BlcnRpZXMoKSA9IGRlZmF1bHQ7CmRpZmYgLS1naXQgYS9T
b3VyY2UvV2ViQ29yZS9jc3MvU3R5bGVSdWxlLmNwcCBiL1NvdXJjZS9XZWJDb3JlL2Nzcy9TdHls
ZVJ1bGUuY3BwCmluZGV4IDFkOWVlN2QwMDU0Mzg3NTU0OGFkMzJlYzU3NGE4YjAwZGJlOTU5Yjcu
LjZmMTA3MGQxMTA0YzRmM2U0NTY2NGU3OTk3Nzc3YzY1NDI4YWU3MDQgMTAwNjQ0Ci0tLSBhL1Nv
dXJjZS9XZWJDb3JlL2Nzcy9TdHlsZVJ1bGUuY3BwCisrKyBiL1NvdXJjZS9XZWJDb3JlL2Nzcy9T
dHlsZVJ1bGUuY3BwCkBAIC0zNjYsMTAgKzM2Niw5IEBAIFN0eWxlUnVsZUZvbnRQYWxldHRlVmFs
dWVzOjpTdHlsZVJ1bGVGb250UGFsZXR0ZVZhbHVlcyhjb25zdCBTdHlsZVJ1bGVGb250UGFsZXR0
CiBTdHlsZVJ1bGVGb250UGFsZXR0ZVZhbHVlczo6flN0eWxlUnVsZUZvbnRQYWxldHRlVmFsdWVz
KCkgPSBkZWZhdWx0OwogCiBEZWZlcnJlZFN0eWxlR3JvdXBSdWxlTGlzdDo6RGVmZXJyZWRTdHls
ZUdyb3VwUnVsZUxpc3QoY29uc3QgQ1NTUGFyc2VyVG9rZW5SYW5nZSYgcmFuZ2UsIENTU0RlZmVy
cmVkUGFyc2VyJiBwYXJzZXIpCi0gICAgOiBtX3BhcnNlcihwYXJzZXIpCisgICAgOiBtX3Rva2Vu
cyhyYW5nZS5iZWdpbigpLCByYW5nZS5lbmQoKSAtIHJhbmdlLmJlZ2luKCkpCisgICAgLCBtX3Bh
cnNlcihwYXJzZXIpCiB7Ci0gICAgc2l6ZV90IGxlbmd0aCA9IHJhbmdlLmVuZCgpIC0gcmFuZ2Uu
YmVnaW4oKTsKLSAgICBtX3Rva2Vucy5hcHBlbmQocmFuZ2UuYmVnaW4oKSwgbGVuZ3RoKTsKIH0K
IAogRGVmZXJyZWRTdHlsZUdyb3VwUnVsZUxpc3Q6On5EZWZlcnJlZFN0eWxlR3JvdXBSdWxlTGlz
dCgpID0gZGVmYXVsdDsKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL2Nzcy9jYWxjL0NTU0Nh
bGNWYWx1ZS5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9jc3MvY2FsYy9DU1NDYWxjVmFsdWUuY3BwCmlu
ZGV4IDQzNTgyYjRkMTEzMDI5NTczZjNiYWYwMTYyYTNjZGY2M2M2NzlmNDcuLjQ4NzE3OTExOTcw
MGJmMTlkZWJjNjYxMjNjZDE1MGM4OTJjOTI1MTUgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3Jl
L2Nzcy9jYWxjL0NTU0NhbGNWYWx1ZS5jcHAKKysrIGIvU291cmNlL1dlYkNvcmUvY3NzL2NhbGMv
Q1NTQ2FsY1ZhbHVlLmNwcApAQCAtNjYsMTQgKzY2LDExIEBAIHN0YXRpYyBpbmxpbmUgUmVmUHRy
PENTU0NhbGNPcGVyYXRpb25Ob2RlPiBjcmVhdGVCbGVuZEhhbGYoY29uc3QgTGVuZ3RoJiBsZW5n
dGgsCiAKIHN0YXRpYyBWZWN0b3I8UmVmPENTU0NhbGNFeHByZXNzaW9uTm9kZT4+IGNyZWF0ZUNT
Uyhjb25zdCBWZWN0b3I8c3RkOjp1bmlxdWVfcHRyPENhbGNFeHByZXNzaW9uTm9kZT4+JiBub2Rl
cywgY29uc3QgUmVuZGVyU3R5bGUmIHN0eWxlKQogewotICAgIFZlY3RvcjxSZWY8Q1NTQ2FsY0V4
cHJlc3Npb25Ob2RlPj4gdmFsdWVzOwotICAgIHZhbHVlcy5yZXNlcnZlSW5pdGlhbENhcGFjaXR5
KG5vZGVzLnNpemUoKSk7Ci0gICAgZm9yIChhdXRvJiBub2RlIDogbm9kZXMpIHsKKyAgICByZXR1
cm4gV1RGOjpjb21wYWN0TWFwKG5vZGVzLCBbJl0oYXV0byYgbm9kZSkgLT4gc3RkOjpvcHRpb25h
bDxSZWY8Q1NTQ2FsY0V4cHJlc3Npb25Ob2RlPj4gewogICAgICAgICBpZiAoYXV0byBjc3NOb2Rl
ID0gY3JlYXRlQ1NTKCpub2RlLCBzdHlsZSkpCi0gICAgICAgICAgICB2YWx1ZXMudW5jaGVja2Vk
QXBwZW5kKGNzc05vZGUucmVsZWFzZU5vbk51bGwoKSk7Ci0gICAgfQotICAgIHZhbHVlcy5zaHJp
bmtUb0ZpdCgpOwotICAgIHJldHVybiB2YWx1ZXM7CisgICAgICAgICAgICByZXR1cm4gY3NzTm9k
ZS5yZWxlYXNlTm9uTnVsbCgpOworICAgICAgICByZXR1cm4gc3RkOjpudWxsb3B0OworICAgIH0p
OwogfQogCiBzdGF0aWMgUmVmUHRyPENTU0NhbGNFeHByZXNzaW9uTm9kZT4gY3JlYXRlQ1NTKGNv
bnN0IENhbGNFeHByZXNzaW9uTm9kZSYgbm9kZSwgY29uc3QgUmVuZGVyU3R5bGUmIHN0eWxlKQpk
aWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvZG9tL0VsZW1lbnREYXRhLmNwcCBiL1NvdXJjZS9X
ZWJDb3JlL2RvbS9FbGVtZW50RGF0YS5jcHAKaW5kZXggMDcxZGIwYjM0Y2E2ZTU2ZWYxMjZlYmVl
ZDUxOGY2MGQ3NDBiNGI5OS4uNzc2MzIyZjAzYjViNDgwYzRiODQ0Nzk3ODA2Zjg4MWU3M2Q4NzMz
NSAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvZG9tL0VsZW1lbnREYXRhLmNwcAorKysgYi9T
b3VyY2UvV2ViQ29yZS9kb20vRWxlbWVudERhdGEuY3BwCkBAIC0xNDAsMTIgKzE0MCwxMSBAQCBV
bmlxdWVFbGVtZW50RGF0YTo6VW5pcXVlRWxlbWVudERhdGEoY29uc3QgVW5pcXVlRWxlbWVudERh
dGEmIG90aGVyKQogCiBVbmlxdWVFbGVtZW50RGF0YTo6VW5pcXVlRWxlbWVudERhdGEoY29uc3Qg
U2hhcmVhYmxlRWxlbWVudERhdGEmIG90aGVyKQogICAgIDogRWxlbWVudERhdGEob3RoZXIsIHRy
dWUpCisgICAgLCBtX2F0dHJpYnV0ZVZlY3RvcihvdGhlci5tX2F0dHJpYnV0ZUFycmF5LCBvdGhl
ci5sZW5ndGgoKSkKIHsKICAgICAvLyBBbiBTaGFyZWFibGVFbGVtZW50RGF0YSBzaG91bGQgbmV2
ZXIgaGF2ZSBhIG11dGFibGUgaW5saW5lIFN0eWxlUHJvcGVydGllcyBhdHRhY2hlZC4KICAgICBB
U1NFUlQoIW90aGVyLm1faW5saW5lU3R5bGUgfHwgIW90aGVyLm1faW5saW5lU3R5bGUtPmlzTXV0
YWJsZSgpKTsKICAgICBtX2lubGluZVN0eWxlID0gb3RoZXIubV9pbmxpbmVTdHlsZTsKLQotICAg
IG1fYXR0cmlidXRlVmVjdG9yLmFwcGVuZChvdGhlci5tX2F0dHJpYnV0ZUFycmF5LCBvdGhlci5s
ZW5ndGgoKSk7CiB9CiAKIFJlZjxVbmlxdWVFbGVtZW50RGF0YT4gRWxlbWVudERhdGE6Om1ha2VV
bmlxdWVDb3B5KCkgY29uc3QKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL2xvYWRlci9hcmNo
aXZlL2NmL0xlZ2FjeVdlYkFyY2hpdmUuY3BwIGIvU291cmNlL1dlYkNvcmUvbG9hZGVyL2FyY2hp
dmUvY2YvTGVnYWN5V2ViQXJjaGl2ZS5jcHAKaW5kZXggY2Q5NDFjZjA1MTgwZGY4YzM3MmU5OTNk
YWMzYjE5MWViNWYzODFiMi4uZGVkNzZmYjhhOTE4NjliMTZjMzg0NzE0ZTA1MjM3YjIzM2UzOWRl
YiAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvbG9hZGVyL2FyY2hpdmUvY2YvTGVnYWN5V2Vi
QXJjaGl2ZS5jcHAKKysrIGIvU291cmNlL1dlYkNvcmUvbG9hZGVyL2FyY2hpdmUvY2YvTGVnYWN5
V2ViQXJjaGl2ZS5jcHAKQEAgLTYxMCw3ICs2MTAsNyBAQCBSZWZQdHI8TGVnYWN5V2ViQXJjaGl2
ZT4gTGVnYWN5V2ViQXJjaGl2ZTo6Y3JlYXRlRnJvbVNlbGVjdGlvbihGcmFtZSogZnJhbWUpCiAg
ICAgU3RyaW5nIGlmcmFtZU1hcmt1cCA9ICI8aWZyYW1lIGZyYW1lYm9yZGVyPVwibm9cIiBtYXJn
aW53aWR0aD1cIjBcIiBtYXJnaW5oZWlnaHQ9XCIwXCIgd2lkdGg9XCI5OCUlXCIgaGVpZ2h0PVwi
OTglJVwiIHNyYz1cIiIgKyBmcmFtZS0+bG9hZGVyKCkuZG9jdW1lbnRMb2FkZXIoKS0+cmVzcG9u
c2UoKS51cmwoKS5zdHJpbmcoKSArICJcIj48L2lmcmFtZT4iOwogICAgIGF1dG8gaWZyYW1lUmVz
b3VyY2UgPSBBcmNoaXZlUmVzb3VyY2U6OmNyZWF0ZSh1dGY4QnVmZmVyKGlmcmFtZU1hcmt1cCks
IGFib3V0QmxhbmtVUkwoKSwgInRleHQvaHRtbCIsICJVVEYtOCIsIFN0cmluZygpKTsKIAotICAg
IHJldHVybiBjcmVhdGUoaWZyYW1lUmVzb3VyY2UucmVsZWFzZU5vbk51bGwoKSwgeyB9LCBWZWN0
b3IgeyBhcmNoaXZlLnJlbGVhc2VOb25OdWxsKCkgfSk7CisgICAgcmV0dXJuIGNyZWF0ZShpZnJh
bWVSZXNvdXJjZS5yZWxlYXNlTm9uTnVsbCgpLCB7IH0sIHsgYXJjaGl2ZS5yZWxlYXNlTm9uTnVs
bCgpIH0pOwogfQogCiB9CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9wYWdlL2NzcC9Db250
ZW50U2VjdXJpdHlQb2xpY3kuY3BwIGIvU291cmNlL1dlYkNvcmUvcGFnZS9jc3AvQ29udGVudFNl
Y3VyaXR5UG9saWN5LmNwcAppbmRleCBlYTZkMGRlYWM4OTQzODgyZWZhOGZmMzhjMDI1OTZhMzE0
NWNmZDk3Li41YjAyYjRkNDJhZmM2Zjg2MTNmY2M0NjQwMGNiOGRjN2ZmMjA4YjNjIDEwMDY0NAot
LS0gYS9Tb3VyY2UvV2ViQ29yZS9wYWdlL2NzcC9Db250ZW50U2VjdXJpdHlQb2xpY3kuY3BwCisr
KyBiL1NvdXJjZS9XZWJDb3JlL3BhZ2UvY3NwL0NvbnRlbnRTZWN1cml0eVBvbGljeS5jcHAKQEAg
LTE2Miw3ICsxNjIsNyBAQCBDb250ZW50U2VjdXJpdHlQb2xpY3lSZXNwb25zZUhlYWRlcnMgQ29u
dGVudFNlY3VyaXR5UG9saWN5OjpyZXNwb25zZUhlYWRlcnMoKSBjbwogICAgIGlmICghbV9jYWNo
ZWRSZXNwb25zZUhlYWRlcnMpIHsKICAgICAgICAgQ29udGVudFNlY3VyaXR5UG9saWN5UmVzcG9u
c2VIZWFkZXJzIHJlc3VsdDsKICAgICAgICAgcmVzdWx0Lm1faGVhZGVycyA9IG1fcG9saWNpZXMu
bWFwKFtdKGF1dG8mIHBvbGljeSkgewotICAgICAgICAgICAgcmV0dXJuIHN0ZDo6bWFrZV9wYWly
KHBvbGljeS0+aGVhZGVyKCksIHBvbGljeS0+aGVhZGVyVHlwZSgpKTsKKyAgICAgICAgICAgIHJl
dHVybiBzdGQ6OnBhaXIgeyBwb2xpY3ktPmhlYWRlcigpLCBwb2xpY3ktPmhlYWRlclR5cGUoKSB9
OwogICAgICAgICB9KTsKICAgICAgICAgcmVzdWx0Lm1faHR0cFN0YXR1c0NvZGUgPSBtX2h0dHBT
dGF0dXNDb2RlOwogICAgICAgICBtX2NhY2hlZFJlc3BvbnNlSGVhZGVycyA9IFdURk1vdmUocmVz
dWx0KTsKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2VuY3J5cHRlZG1lZGlh
L0NETVByb3h5LmNwcCBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2VuY3J5cHRlZG1lZGlhL0NE
TVByb3h5LmNwcAppbmRleCA2NzhmNDFhN2FlMjQwNzU0Y2RjZWM2MmY1YzJjNTY2ZWNlZDVlMGVm
Li4yZGQ3ODAyODRhMjZjOTQ2NDhkOWYxMWYzMGYyMmNkOTI3OTExYjNiIDEwMDY0NAotLS0gYS9T
b3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9lbmNyeXB0ZWRtZWRpYS9DRE1Qcm94eS5jcHAKKysrIGIv
U291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZW5jcnlwdGVkbWVkaWEvQ0RNUHJveHkuY3BwCkBAIC0y
MjYsNyArMjI2LDcgQEAgY29uc3QgUmVmUHRyPEtleUhhbmRsZT4mIEtleVN0b3JlOjprZXlIYW5k
bGUoY29uc3QgS2V5SURUeXBlJiBrZXlJRCkgY29uc3QKIENETUluc3RhbmNlU2Vzc2lvbjo6S2V5
U3RhdHVzVmVjdG9yIEtleVN0b3JlOjpjb252ZXJ0VG9KU0tleVN0YXR1c1ZlY3RvcigpIGNvbnN0
CiB7CiAgICAgcmV0dXJuIG1fa2V5cy5tYXAoW10oYXV0byYga2V5KSB7Ci0gICAgICAgIHJldHVy
biBzdGQ6Om1ha2VfcGFpcihrZXktPmlkQXNTaGFyZWRCdWZmZXIoKSwga2V5LT5zdGF0dXMoKSk7
CisgICAgICAgIHJldHVybiBzdGQ6OnBhaXIgeyBrZXktPmlkQXNTaGFyZWRCdWZmZXIoKSwga2V5
LT5zdGF0dXMoKSB9OwogICAgIH0pOwogfQogCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9w
bGF0Zm9ybS9ncmFwaGljcy9hdmZvdW5kYXRpb24vb2JqYy9DRE1JbnN0YW5jZUZhaXJQbGF5U3Ry
ZWFtaW5nQVZGT2JqQy5tbSBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2F2Zm91
bmRhdGlvbi9vYmpjL0NETUluc3RhbmNlRmFpclBsYXlTdHJlYW1pbmdBVkZPYmpDLm1tCmluZGV4
IDU4MDI1MWUxMTAyZGNjMzJjYTNhZDk5MzQzODM4YTdhMjk5MWZjMjAuLjBlY2ZkY2MxNWQ1ODkz
YmNlYjZkMzZmOTYxZTI2ZGFiNzcxNDc2NzQgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL3Bs
YXRmb3JtL2dyYXBoaWNzL2F2Zm91bmRhdGlvbi9vYmpjL0NETUluc3RhbmNlRmFpclBsYXlTdHJl
YW1pbmdBVkZPYmpDLm1tCisrKyBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2F2
Zm91bmRhdGlvbi9vYmpjL0NETUluc3RhbmNlRmFpclBsYXlTdHJlYW1pbmdBVkZPYmpDLm1tCkBA
IC05MzcsNyArOTM3LDcgQEAgdm9pZCBDRE1JbnN0YW5jZVNlc3Npb25GYWlyUGxheVN0cmVhbWlu
Z0FWRk9iakM6OnVwZGF0ZUxpY2Vuc2UoY29uc3QgU3RyaW5nJiwgTGkKICAgICAvLyBGSVhNRShy
ZGFyOi8vcHJvYmxlbS8zNTU5MjI3Nyk6IHN0YXNoIHRoZSBjYWxsYmFjayBhbmQgY2FsbCBpdCBv
bmNlIEFWQ29udGVudEtleVJlc3BvbnNlIHN1cHBvcnRzIGEgc3VjY2VzcyBjYWxsYmFjay4KICAg
ICBzdHJ1Y3Qgb2JqY19tZXRob2RfZGVzY3JpcHRpb24gbWV0aG9kID0gcHJvdG9jb2xfZ2V0TWV0
aG9kRGVzY3JpcHRpb24oQHByb3RvY29sKEFWQ29udGVudEtleVNlc3Npb25EZWxlZ2F0ZSksIEBz
ZWxlY3Rvcihjb250ZW50S2V5U2Vzc2lvbjpjb250ZW50S2V5UmVxdWVzdERpZFN1Y2NlZWQ6KSwg
Tk8sIFlFUyk7CiAgICAgaWYgKCFtZXRob2QubmFtZSkgewotICAgICAgICBLZXlTdGF0dXNWZWN0
b3Iga2V5U3RhdHVzZXMgeyBzdGQ6Om1ha2VfcGFpcihXVEZNb3ZlKGtleUlEcy5maXJzdCgpKSwg
S2V5U3RhdHVzOjpVc2FibGUpIH07CisgICAgICAgIEtleVN0YXR1c1ZlY3RvciBrZXlTdGF0dXNl
cyB7IHN0ZDo6cGFpciB7IFdURk1vdmUoa2V5SURzLmZpcnN0KCkpLCBLZXlTdGF0dXM6OlVzYWJs
ZSB9IH07CiAgICAgICAgIGNhbGxiYWNrKGZhbHNlLCBzdGQ6Om1ha2Vfb3B0aW9uYWwoV1RGTW92
ZShrZXlTdGF0dXNlcykpLCBzdGQ6Om51bGxvcHQsIHN0ZDo6bnVsbG9wdCwgU3VjY2VlZGVkKTsK
ICAgICAgICAgcmV0dXJuOwogICAgIH0KZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3BsYXRm
b3JtL25ldHdvcmsvQ2FjaGVWYWxpZGF0aW9uLmNwcCBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3Jt
L25ldHdvcmsvQ2FjaGVWYWxpZGF0aW9uLmNwcAppbmRleCBkZWIzOWYwYTYzZGE4YTFmMDY1MjQ3
ZWI3YzAzZTU4ZTJlYWM0YTU5Li40OGMyZmU1MmY1ZWVlYmZkZjVmODZlMmRkNWY0YTlmYjBmNjFi
YjZkIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9uZXR3b3JrL0NhY2hlVmFs
aWRhdGlvbi5jcHAKKysrIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vbmV0d29yay9DYWNoZVZh
bGlkYXRpb24uY3BwCkBAIC0yOCw2ICsyOCw3IEBACiAKICNpbmNsdWRlICJDb29raWVKYXIuaCIK
ICNpbmNsdWRlICJIVFRQSGVhZGVyTWFwLmgiCisjaW5jbHVkZSAiSFRUUFBhcnNlcnMuaCIKICNp
bmNsdWRlICJOZXR3b3JrU3RvcmFnZVNlc3Npb24uaCIKICNpbmNsdWRlICJSZXNvdXJjZVJlcXVl
c3QuaCIKICNpbmNsdWRlICJSZXNvdXJjZVJlc3BvbnNlLmgiCkBAIC0zNTAsNyArMzUxLDcgQEAg
c3RhdGljIFN0cmluZyBjb29raWVSZXF1ZXN0SGVhZGVyRmllbGRWYWx1ZShjb25zdCBDb29raWVK
YXIqIGNvb2tpZUphciwgY29uc3QgUmUKICAgICByZXR1cm4gY29va2llSmFyLT5jb29raWVSZXF1
ZXN0SGVhZGVyRmllbGRWYWx1ZShyZXF1ZXN0LmZpcnN0UGFydHlGb3JDb29raWVzKCksIFNhbWVT
aXRlSW5mbzo6Y3JlYXRlKHJlcXVlc3QpLCByZXF1ZXN0LnVybCgpLCBzdGQ6Om51bGxvcHQsIHN0
ZDo6bnVsbG9wdCwgcmVxdWVzdC51cmwoKS5wcm90b2NvbElzKCJodHRwcyIpID8gSW5jbHVkZVNl
Y3VyZUNvb2tpZXM6OlllcyA6IEluY2x1ZGVTZWN1cmVDb29raWVzOjpObykuZmlyc3Q7CiB9CiAK
LXN0YXRpYyBTdHJpbmcgaGVhZGVyVmFsdWVGb3JWYXJ5KGNvbnN0IFJlc291cmNlUmVxdWVzdCYg
cmVxdWVzdCwgY29uc3QgU3RyaW5nJiBoZWFkZXJOYW1lLCBGdW5jdGlvbjxTdHJpbmcoKT4mJiBj
b29raWVSZXF1ZXN0SGVhZGVyRmllbGRWYWx1ZUZ1bmN0aW9uKQorc3RhdGljIFN0cmluZyBoZWFk
ZXJWYWx1ZUZvclZhcnkoY29uc3QgUmVzb3VyY2VSZXF1ZXN0JiByZXF1ZXN0LCBTdHJpbmdWaWV3
IGhlYWRlck5hbWUsIEZ1bmN0aW9uPFN0cmluZygpPiYmIGNvb2tpZVJlcXVlc3RIZWFkZXJGaWVs
ZFZhbHVlRnVuY3Rpb24pCiB7CiAgICAgLy8gRXhwbGljaXQgaGFuZGxpbmcgZm9yIGNvb2tpZXMg
aXMgbmVlZGVkIGJlY2F1c2UgdGhleSBhcmUgYWRkZWQgbWFnaWNhbGx5IGJ5IHRoZSBuZXR3b3Jr
aW5nIGxheWVyLgogICAgIC8vIEZJWE1FOiBUaGUgdmFsdWUgbWlnaHQgaGF2ZSBjaGFuZ2VkIGJl
dHdlZW4gbWFraW5nIHRoZSByZXF1ZXN0IGFuZCByZXRyaWV2aW5nIHRoZSBjb29raWUgaGVyZS4K
QEAgLTM1OCwyNSArMzU5LDI3IEBAIHN0YXRpYyBTdHJpbmcgaGVhZGVyVmFsdWVGb3JWYXJ5KGNv
bnN0IFJlc291cmNlUmVxdWVzdCYgcmVxdWVzdCwgY29uc3QgU3RyaW5nJiBoCiAgICAgLy8gaXMg
YSBibG9ja2luZyBvcGVyYXRpb24uIFRoaXMgc2hvdWxkIGJlIHN1ZmZpY2llbnQgdG8gY292ZXIg
cmVhc29uYWJsZSBjYXNlcy4KICAgICBpZiAoaGVhZGVyTmFtZSA9PSBodHRwSGVhZGVyTmFtZVN0
cmluZyhIVFRQSGVhZGVyTmFtZTo6Q29va2llKSkKICAgICAgICAgcmV0dXJuIGNvb2tpZVJlcXVl
c3RIZWFkZXJGaWVsZFZhbHVlRnVuY3Rpb24oKTsKLSAgICByZXR1cm4gcmVxdWVzdC5odHRwSGVh
ZGVyRmllbGQoaGVhZGVyTmFtZSk7CisgICAgcmV0dXJuIHJlcXVlc3QuaHR0cEhlYWRlckZpZWxk
KGhlYWRlck5hbWUudG9TdHJpbmdXaXRob3V0Q29weWluZygpKTsKIH0KIAotc3RhdGljIFZlY3Rv
cjxzdGQ6OnBhaXI8U3RyaW5nLCBTdHJpbmc+PiBjb2xsZWN0VmFyeWluZ1JlcXVlc3RIZWFkZXJz
SW50ZXJuYWwoY29uc3QgUmVzb3VyY2VSZXNwb25zZSYgcmVzcG9uc2UsIEZ1bmN0aW9uPFN0cmlu
Zyhjb25zdCBTdHJpbmcmIGhlYWRlck5hbWUpPiYmIGhlYWRlclZhbHVlRm9yVmFyeUZ1bmN0aW9u
KQorc3RhdGljIFZlY3RvcjxzdGQ6OnBhaXI8U3RyaW5nLCBTdHJpbmc+PiBjb2xsZWN0VmFyeWlu
Z1JlcXVlc3RIZWFkZXJzSW50ZXJuYWwoY29uc3QgUmVzb3VyY2VSZXNwb25zZSYgcmVzcG9uc2Us
IEZ1bmN0aW9uPFN0cmluZyhTdHJpbmdWaWV3IGhlYWRlck5hbWUpPiYmIGhlYWRlclZhbHVlRm9y
VmFyeUZ1bmN0aW9uKQogewogICAgIGF1dG8gdmFyeVZhbHVlID0gcmVzcG9uc2UuaHR0cEhlYWRl
ckZpZWxkKEhUVFBIZWFkZXJOYW1lOjpWYXJ5KTsKICAgICBpZiAodmFyeVZhbHVlLmlzRW1wdHko
KSkKICAgICAgICAgcmV0dXJuIHsgfTsKLSAgICByZXR1cm4gdmFyeVZhbHVlLnNwbGl0KCcsJyku
bWFwKFsmXShhdXRvJiB2YXJ5SGVhZGVyTmFtZSkgewotICAgICAgICBhdXRvIGhlYWRlck5hbWUg
PSB2YXJ5SGVhZGVyTmFtZS5zdHJpcFdoaXRlU3BhY2UoKTsKLSAgICAgICAgcmV0dXJuIHN0ZDo6
bWFrZV9wYWlyKGhlYWRlck5hbWUsIGhlYWRlclZhbHVlRm9yVmFyeUZ1bmN0aW9uKGhlYWRlck5h
bWUpKTsKLSAgICB9KTsKKyAgICBWZWN0b3I8c3RkOjpwYWlyPFN0cmluZywgU3RyaW5nPj4gdmFy
eUhlYWRlcnM7CisgICAgZm9yIChhdXRvIGhlYWRlck5hbWUgOiBTdHJpbmdWaWV3IHsgdmFyeVZh
bHVlIH0uc3BsaXQoJywnKSkgeworICAgICAgICBoZWFkZXJOYW1lID0gaGVhZGVyTmFtZS5zdHJp
cExlYWRpbmdBbmRUcmFpbGluZ01hdGNoZWRDaGFyYWN0ZXJzKGlzSFRUUFNwYWNlKTsKKyAgICAg
ICAgdmFyeUhlYWRlcnMuYXBwZW5kKHN0ZDo6cGFpciB7IGhlYWRlck5hbWUudG9TdHJpbmcoKSwg
aGVhZGVyVmFsdWVGb3JWYXJ5RnVuY3Rpb24oaGVhZGVyTmFtZSkgfSk7CisgICAgfQorICAgIHJl
dHVybiB2YXJ5SGVhZGVyczsKIH0KIAogVmVjdG9yPHN0ZDo6cGFpcjxTdHJpbmcsIFN0cmluZz4+
IGNvbGxlY3RWYXJ5aW5nUmVxdWVzdEhlYWRlcnMoTmV0d29ya1N0b3JhZ2VTZXNzaW9uKiBzdG9y
YWdlU2Vzc2lvbiwgY29uc3QgUmVzb3VyY2VSZXF1ZXN0JiByZXF1ZXN0LCBjb25zdCBSZXNvdXJj
ZVJlc3BvbnNlJiByZXNwb25zZSkKIHsKICAgICBpZiAoIXN0b3JhZ2VTZXNzaW9uKQogICAgICAg
ICByZXR1cm4geyB9OwotICAgIHJldHVybiBjb2xsZWN0VmFyeWluZ1JlcXVlc3RIZWFkZXJzSW50
ZXJuYWwocmVzcG9uc2UsIFsmXSAoY29uc3QgU3RyaW5nJiBoZWFkZXJOYW1lKSB7CisgICAgcmV0
dXJuIGNvbGxlY3RWYXJ5aW5nUmVxdWVzdEhlYWRlcnNJbnRlcm5hbChyZXNwb25zZSwgWyZdIChT
dHJpbmdWaWV3IGhlYWRlck5hbWUpIHsKICAgICAgICAgcmV0dXJuIGhlYWRlclZhbHVlRm9yVmFy
eShyZXF1ZXN0LCBoZWFkZXJOYW1lLCBbJl0gewogICAgICAgICAgICAgcmV0dXJuIGNvb2tpZVJl
cXVlc3RIZWFkZXJGaWVsZFZhbHVlKCpzdG9yYWdlU2Vzc2lvbiwgcmVxdWVzdCk7CiAgICAgICAg
IH0pOwpAQCAtMzg1LDcgKzM4OCw3IEBAIFZlY3RvcjxzdGQ6OnBhaXI8U3RyaW5nLCBTdHJpbmc+
PiBjb2xsZWN0VmFyeWluZ1JlcXVlc3RIZWFkZXJzKE5ldHdvcmtTdG9yYWdlU2VzCiAKIFZlY3Rv
cjxzdGQ6OnBhaXI8U3RyaW5nLCBTdHJpbmc+PiBjb2xsZWN0VmFyeWluZ1JlcXVlc3RIZWFkZXJz
KGNvbnN0IENvb2tpZUphciogY29va2llSmFyLCBjb25zdCBSZXNvdXJjZVJlcXVlc3QmIHJlcXVl
c3QsIGNvbnN0IFJlc291cmNlUmVzcG9uc2UmIHJlc3BvbnNlKQogewotICAgIHJldHVybiBjb2xs
ZWN0VmFyeWluZ1JlcXVlc3RIZWFkZXJzSW50ZXJuYWwocmVzcG9uc2UsIFsmXSAoY29uc3QgU3Ry
aW5nJiBoZWFkZXJOYW1lKSB7CisgICAgcmV0dXJuIGNvbGxlY3RWYXJ5aW5nUmVxdWVzdEhlYWRl
cnNJbnRlcm5hbChyZXNwb25zZSwgWyZdIChTdHJpbmdWaWV3IGhlYWRlck5hbWUpIHsKICAgICAg
ICAgcmV0dXJuIGhlYWRlclZhbHVlRm9yVmFyeShyZXF1ZXN0LCBoZWFkZXJOYW1lLCBbJl0gewog
ICAgICAgICAgICAgcmV0dXJuIGNvb2tpZVJlcXVlc3RIZWFkZXJGaWVsZFZhbHVlKGNvb2tpZUph
ciwgcmVxdWVzdCk7CiAgICAgICAgIH0pOwpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvcGxh
dGZvcm0vdGV4dC9Mb2NhbGVJQ1UuY3BwIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vdGV4dC9M
b2NhbGVJQ1UuY3BwCmluZGV4IDc1OWI3ODU4ZGNlMGRiZGEzOWRmNDNmMjQyNjkyODY0MWM3NjY3
NzkuLjY2NWQyN2Y4YTk1MmExNDZlM2FlYjQyYTRiZDI0YTMyNjUyZjIxNzIgMTAwNjQ0Ci0tLSBh
L1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL3RleHQvTG9jYWxlSUNVLmNwcAorKysgYi9Tb3VyY2Uv
V2ViQ29yZS9wbGF0Zm9ybS90ZXh0L0xvY2FsZUlDVS5jcHAKQEAgLTE4OSw3ICsxODksNyBAQCBz
dGF0aWMgc3RkOjp1bmlxdWVfcHRyPFZlY3RvcjxTdHJpbmc+PiBjcmVhdGVGYWxsYmFja01vbnRo
TGFiZWxzKCkKIHsKICAgICBhdXRvIGxhYmVscyA9IG1ha2VVbmlxdWU8VmVjdG9yPFN0cmluZz4+
KCk7CiAgICAgbGFiZWxzLT5yZXNlcnZlSW5pdGlhbENhcGFjaXR5KFdURl9BUlJBWV9MRU5HVEgo
V1RGOjptb250aEZ1bGxOYW1lKSk7Ci0gICAgZm9yICh1bnNpZ25lZCBpID0gMDsgaSA8IFdURl9B
UlJBWV9MRU5HVEgoV1RGOjptb250aEZ1bGxOYW1lKTsgKytpKQorICAgIGZvciAodW5zaWduZWQg
aSA9IDA7IGkgPCBzdGQ6OnNpemUoV1RGOjptb250aEZ1bGxOYW1lKTsgKytpKQogICAgICAgICBs
YWJlbHMtPnVuY2hlY2tlZEFwcGVuZChXVEY6Om1vbnRoRnVsbE5hbWVbaV0pOwogICAgIHJldHVy
biBsYWJlbHM7CiB9CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS90ZXh0L0xv
Y2FsZU5vbmUuY3BwIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vdGV4dC9Mb2NhbGVOb25lLmNw
cAppbmRleCA0YjZkNzYwZTk1MjdhNDc3Y2M0OTkwNDgwZGM1MmY4NjU3ZjMzNDM1Li43MGRiZDM3
NzFkZjE3MjAwYTI5YTk2YjI2MzQ2ODllZjQyODgyOTM0IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2Vi
Q29yZS9wbGF0Zm9ybS90ZXh0L0xvY2FsZU5vbmUuY3BwCisrKyBiL1NvdXJjZS9XZWJDb3JlL3Bs
YXRmb3JtL3RleHQvTG9jYWxlTm9uZS5jcHAKQEAgLTExNiw4ICsxMTYsOCBAQCBjb25zdCBWZWN0
b3I8U3RyaW5nPiYgTG9jYWxlTm9uZTo6c2hvcnRNb250aExhYmVscygpCiB7CiAgICAgaWYgKCFt
X3Nob3J0TW9udGhMYWJlbHMuaXNFbXB0eSgpKQogICAgICAgICByZXR1cm4gbV9zaG9ydE1vbnRo
TGFiZWxzOwotICAgIG1fc2hvcnRNb250aExhYmVscy5yZXNlcnZlQ2FwYWNpdHkoV1RGX0FSUkFZ
X0xFTkdUSChXVEY6Om1vbnRoTmFtZSkpOwotICAgIGZvciAodW5zaWduZWQgaSA9IDA7IGkgPCBX
VEZfQVJSQVlfTEVOR1RIKFdURjo6bW9udGhOYW1lKTsgKytpKQorICAgIG1fc2hvcnRNb250aExh
YmVscy5yZXNlcnZlQ2FwYWNpdHkoc3RkOjpzaXplKFdURjo6bW9udGhOYW1lKSk7CisgICAgZm9y
ICh1bnNpZ25lZCBpID0gMDsgaSA8IHN0ZDo6c2l6ZShXVEY6Om1vbnRoTmFtZSk7ICsraSkKICAg
ICAgICAgbV9zaG9ydE1vbnRoTGFiZWxzLnVuY2hlY2tlZEFwcGVuZChXVEY6Om1vbnRoTmFtZVtp
XSk7CiAgICAgcmV0dXJuIG1fc2hvcnRNb250aExhYmVsczsKIH0KZGlmZiAtLWdpdCBhL1NvdXJj
ZS9XZWJDb3JlL3BsYXRmb3JtL3RleHQvY29jb2EvTG9jYWxlQ29jb2EubW0gYi9Tb3VyY2UvV2Vi
Q29yZS9wbGF0Zm9ybS90ZXh0L2NvY29hL0xvY2FsZUNvY29hLm1tCmluZGV4IGYxOGRiNDU3MDgy
ZjVkOTJiMDY5M2JkMjQ3ZjM3ZWRhMDc2ODhiNmEuLmQwMTkwMjk4NmFmZGViNTdkZGFhNzk4YWZm
YzU5ZDAyNzNkMzVjODIgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL3RleHQv
Y29jb2EvTG9jYWxlQ29jb2EubW0KKysrIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vdGV4dC9j
b2NvYS9Mb2NhbGVDb2NvYS5tbQpAQCAtMzksNiArMzksNyBAQAogI2ltcG9ydCA8d3RmL0hhc2hN
YXAuaD4KICNpbXBvcnQgPHd0Zi9MYW5ndWFnZS5oPgogI2ltcG9ydCA8d3RmL1JldGFpblB0ci5o
PgorI2ltcG9ydCA8d3RmL2NvY29hL1ZlY3RvckNvY29hLmg+CiAjaW1wb3J0IDx3dGYvdGV4dC9B
dG9tU3RyaW5nSGFzaC5oPgogI2ltcG9ydCAiTG9jYWxpemVkRGF0ZUNhY2hlLmgiCiAKQEAgLTEw
NiwxMyArMTA3LDEyIEBAIGNvbnN0IFZlY3RvcjxTdHJpbmc+JiBMb2NhbGVDb2NvYTo6bW9udGhM
YWJlbHMoKQogewogICAgIGlmICghbV9tb250aExhYmVscy5pc0VtcHR5KCkpCiAgICAgICAgIHJl
dHVybiBtX21vbnRoTGFiZWxzOwotICAgIG1fbW9udGhMYWJlbHMucmVzZXJ2ZUNhcGFjaXR5KDEy
KTsKICAgICBOU0FycmF5ICphcnJheSA9IFtzaG9ydERhdGVGb3JtYXR0ZXIoKS5nZXQoKSBtb250
aFN5bWJvbHNdOwogICAgIGlmIChbYXJyYXkgY291bnRdID09IDEyKSB7Ci0gICAgICAgIGZvciAo
dW5zaWduZWQgaSA9IDA7IGkgPCAxMjsgKytpKQotICAgICAgICAgICAgbV9tb250aExhYmVscy51
bmNoZWNrZWRBcHBlbmQoU3RyaW5nKFthcnJheSBvYmplY3RBdEluZGV4OmldKSk7CisgICAgICAg
IG1fbW9udGhMYWJlbHMgPSBtYWtlVmVjdG9yPFN0cmluZz4oYXJyYXkpOwogICAgICAgICByZXR1
cm4gbV9tb250aExhYmVsczsKICAgICB9CisgICAgbV9tb250aExhYmVscy5yZXNlcnZlQ2FwYWNp
dHkoMTIpOwogICAgIGZvciAoYXV0byYgbmFtZSA6IFdURjo6bW9udGhGdWxsTmFtZSkKICAgICAg
ICAgbV9tb250aExhYmVscy51bmNoZWNrZWRBcHBlbmQobmFtZSk7CiAgICAgcmV0dXJuIG1fbW9u
dGhMYWJlbHM7CkBAIC0yMDAsMTMgKzIwMCwxMiBAQCBjb25zdCBWZWN0b3I8U3RyaW5nPiYgTG9j
YWxlQ29jb2E6OnNob3J0TW9udGhMYWJlbHMoKQogewogICAgIGlmICghbV9zaG9ydE1vbnRoTGFi
ZWxzLmlzRW1wdHkoKSkKICAgICAgICAgcmV0dXJuIG1fc2hvcnRNb250aExhYmVsczsKLSAgICBt
X3Nob3J0TW9udGhMYWJlbHMucmVzZXJ2ZUNhcGFjaXR5KDEyKTsKICAgICBOU0FycmF5ICphcnJh
eSA9IFtzaG9ydERhdGVGb3JtYXR0ZXIoKS5nZXQoKSBzaG9ydE1vbnRoU3ltYm9sc107CiAgICAg
aWYgKFthcnJheSBjb3VudF0gPT0gMTIpIHsKLSAgICAgICAgZm9yICh1bnNpZ25lZCBpID0gMDsg
aSA8IDEyOyArK2kpCi0gICAgICAgICAgICBtX3Nob3J0TW9udGhMYWJlbHMudW5jaGVja2VkQXBw
ZW5kKFthcnJheSBvYmplY3RBdEluZGV4OmldKTsKKyAgICAgICAgbV9zaG9ydE1vbnRoTGFiZWxz
ID0gbWFrZVZlY3RvcjxTdHJpbmc+KGFycmF5KTsKICAgICAgICAgcmV0dXJuIG1fc2hvcnRNb250
aExhYmVsczsKICAgICB9CisgICAgbV9zaG9ydE1vbnRoTGFiZWxzLnJlc2VydmVDYXBhY2l0eSgx
Mik7CiAgICAgZm9yIChhdXRvJiBuYW1lIDogV1RGOjptb250aE5hbWUpCiAgICAgICAgIG1fc2hv
cnRNb250aExhYmVscy51bmNoZWNrZWRBcHBlbmQobmFtZSk7CiAgICAgcmV0dXJuIG1fc2hvcnRN
b250aExhYmVsczsKQEAgLTIxOCw5ICsyMTcsNyBAQCBjb25zdCBWZWN0b3I8U3RyaW5nPiYgTG9j
YWxlQ29jb2E6OnN0YW5kQWxvbmVNb250aExhYmVscygpCiAgICAgICAgIHJldHVybiBtX3N0YW5k
QWxvbmVNb250aExhYmVsczsKICAgICBOU0FycmF5ICphcnJheSA9IFtzaG9ydERhdGVGb3JtYXR0
ZXIoKS5nZXQoKSBzdGFuZGFsb25lTW9udGhTeW1ib2xzXTsKICAgICBpZiAoW2FycmF5IGNvdW50
XSA9PSAxMikgewotICAgICAgICBtX3N0YW5kQWxvbmVNb250aExhYmVscy5yZXNlcnZlQ2FwYWNp
dHkoMTIpOwotICAgICAgICBmb3IgKHVuc2lnbmVkIGkgPSAwOyBpIDwgMTI7ICsraSkKLSAgICAg
ICAgICAgIG1fc3RhbmRBbG9uZU1vbnRoTGFiZWxzLnVuY2hlY2tlZEFwcGVuZChbYXJyYXkgb2Jq
ZWN0QXRJbmRleDppXSk7CisgICAgICAgIG1fc3RhbmRBbG9uZU1vbnRoTGFiZWxzID0gbWFrZVZl
Y3RvcjxTdHJpbmc+KGFycmF5KTsKICAgICAgICAgcmV0dXJuIG1fc3RhbmRBbG9uZU1vbnRoTGFi
ZWxzOwogICAgIH0KICAgICBtX3N0YW5kQWxvbmVNb250aExhYmVscyA9IHNob3J0TW9udGhMYWJl
bHMoKTsKQEAgLTIzMyw5ICsyMzAsNyBAQCBjb25zdCBWZWN0b3I8U3RyaW5nPiYgTG9jYWxlQ29j
b2E6OnNob3J0U3RhbmRBbG9uZU1vbnRoTGFiZWxzKCkKICAgICAgICAgcmV0dXJuIG1fc2hvcnRT
dGFuZEFsb25lTW9udGhMYWJlbHM7CiAgICAgTlNBcnJheSAqYXJyYXkgPSBbc2hvcnREYXRlRm9y
bWF0dGVyKCkuZ2V0KCkgc2hvcnRTdGFuZGFsb25lTW9udGhTeW1ib2xzXTsKICAgICBpZiAoW2Fy
cmF5IGNvdW50XSA9PSAxMikgewotICAgICAgICBtX3Nob3J0U3RhbmRBbG9uZU1vbnRoTGFiZWxz
LnJlc2VydmVDYXBhY2l0eSgxMik7Ci0gICAgICAgIGZvciAodW5zaWduZWQgaSA9IDA7IGkgPCAx
MjsgKytpKQotICAgICAgICAgICAgbV9zaG9ydFN0YW5kQWxvbmVNb250aExhYmVscy51bmNoZWNr
ZWRBcHBlbmQoW2FycmF5IG9iamVjdEF0SW5kZXg6aV0pOworICAgICAgICBtX3Nob3J0U3RhbmRB
bG9uZU1vbnRoTGFiZWxzID0gbWFrZVZlY3RvcjxTdHJpbmc+KGFycmF5KTsKICAgICAgICAgcmV0
dXJuIG1fc2hvcnRTdGFuZEFsb25lTW9udGhMYWJlbHM7CiAgICAgfQogICAgIG1fc2hvcnRTdGFu
ZEFsb25lTW9udGhMYWJlbHMgPSBzaG9ydE1vbnRoTGFiZWxzKCk7CmRpZmYgLS1naXQgYS9Tb3Vy
Y2UvV2ViQ29yZS90ZXN0aW5nL01vY2tDRE1GYWN0b3J5LmNwcCBiL1NvdXJjZS9XZWJDb3JlL3Rl
c3RpbmcvTW9ja0NETUZhY3RvcnkuY3BwCmluZGV4IGIyMTVlMGQwYTgxNGU1ZGE4NzJlYTA0Mzcz
MjM5OTYxMmI4YTZhM2IuLjU2MDdkNDlmY2RlOWQ1Yjc0MTQ4NzJiZGI5MWZhZjY5NjRmNTY4OGUg
MTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL3Rlc3RpbmcvTW9ja0NETUZhY3RvcnkuY3BwCisr
KyBiL1NvdXJjZS9XZWJDb3JlL3Rlc3RpbmcvTW9ja0NETUZhY3RvcnkuY3BwCkBAIC0zNDQsNyAr
MzQ0LDcgQEAgdm9pZCBNb2NrQ0RNSW5zdGFuY2VTZXNzaW9uOjp1cGRhdGVMaWNlbnNlKGNvbnN0
IFN0cmluZyYgc2Vzc2lvbklELCBMaWNlbnNlVHlwZSwKICAgICAgICAgY29uc3QgYXV0byoga2V5
cyA9IGZhY3RvcnktPmtleXNGb3JTZXNzaW9uV2l0aElEKHNlc3Npb25JRCk7CiAgICAgICAgIGlm
IChrZXlzKSB7CiAgICAgICAgICAgICBjaGFuZ2VkS2V5cyA9IGtleXMtPm1hcChbXShhdXRvJiBr
ZXkpIHsKLSAgICAgICAgICAgICAgICByZXR1cm4gc3RkOjptYWtlX3BhaXIoa2V5LmNvcHlSZWYo
KSwgS2V5U3RhdHVzOjpVc2FibGUpOworICAgICAgICAgICAgICAgIHJldHVybiBzdGQ6OnBhaXIg
eyBrZXkuY29weVJlZigpLCBLZXlTdGF0dXM6OlVzYWJsZSB9OwogICAgICAgICAgICAgfSk7CiAg
ICAgICAgIH0KICAgICB9CkBAIC0zOTMsNyArMzkzLDcgQEAgdm9pZCBNb2NrQ0RNSW5zdGFuY2VT
ZXNzaW9uOjpyZW1vdmVTZXNzaW9uRGF0YShjb25zdCBTdHJpbmcmIGlkLCBMaWNlbnNlVHlwZSwg
UmUKIAogICAgIGF1dG8ga2V5cyA9IGZhY3RvcnktPnJlbW92ZUtleXNGcm9tU2Vzc2lvbldpdGhJ
RChpZCk7CiAgICAgYXV0byBrZXlTdGF0dXNWZWN0b3IgPSBXVEY6Om1hcChXVEZNb3ZlKGtleXMp
LCBbXShhdXRvJiYga2V5KSB7Ci0gICAgICAgIHJldHVybiBzdGQ6Om1ha2VfcGFpcihXVEZNb3Zl
KGtleSksIEtleVN0YXR1czo6UmVsZWFzZWQpOworICAgICAgICByZXR1cm4gc3RkOjpwYWlyIHsg
V1RGTW92ZShrZXkpLCBLZXlTdGF0dXM6OlJlbGVhc2VkIH07CiAgICAgfSk7CiAKICAgICBDU3Ry
aW5nIG1lc3NhZ2UgeyAicmVtb3ZlLW1lc3NhZ2UiIH07Cg==
</data>
<flag name="commit-queue"
          id="479445"
          type_id="3"
          status="-"
          setter="ews-feeder"
    />
          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>452420</attachid>
            <date>2022-02-17 13:05:25 -0800</date>
            <delta_ts>2022-02-17 14:32:06 -0800</delta_ts>
            <desc>Patch</desc>
            <filename>bug-236748-20220217130524.patch</filename>
            <type>text/plain</type>
            <size>20881</size>
            <attacher name="Chris Dumez">cdumez</attacher>
            
              <data encoding="base64">U3VidmVyc2lvbiBSZXZpc2lvbjogMjkwMDU0CmRpZmYgLS1naXQgYS9Tb3VyY2UvSmF2YVNjcmlw
dENvcmUvQ2hhbmdlTG9nIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL0NoYW5nZUxvZwppbmRleCA0
MjZiOGYzMzU3OWIwMDA4OWM4N2Y3NTNmNzIyMjZiYTEzN2Y2Nzg3Li5lNDRmYjMzMDQ0NWYyZmIz
MThmZjVkNTc5YzEzYzFjZTJjZmQwZjRmIDEwMDY0NAotLS0gYS9Tb3VyY2UvSmF2YVNjcmlwdENv
cmUvQ2hhbmdlTG9nCisrKyBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9DaGFuZ2VMb2cKQEAgLTEs
MyArMSwxNiBAQAorMjAyMi0wMi0xNyAgQ2hyaXMgRHVtZXogIDxjZHVtZXpAYXBwbGUuY29tPgor
CisgICAgICAgIENsZWFuIHVwIC8gb3B0aW1pemUgY2FsbCBzaXRlcyBjb25zdHJ1Y3RpbmcgdmVj
dG9ycworICAgICAgICBodHRwczovL2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9MjM2
NzQ4CisgICAgICAgIDxyZGFyOi8vcHJvYmxlbS84OTA5MDcxMD4KKworICAgICAgICBSZXZpZXdl
ZCBieSBOT0JPRFkgKE9PUFMhKS4KKworICAgICAgICBGb2xsb3ctdXAgdG8gcjI5MDAyNiB0byBh
ZGRyZXNzIGZlZWRiYWNrIGZyb20gRGFyaW4uCisKKyAgICAgICAgKiBiMy9haXIvQWlyQ29kZS5j
cHA6CisgICAgICAgIChKU0M6OkIzOjpBaXI6OkNvZGU6OnNldE51bUVudHJ5cG9pbnRzKToKKwog
MjAyMi0wMi0xNyAgQ2hyaXMgRHVtZXogIDxjZHVtZXpAYXBwbGUuY29tPgogCiAgICAgICAgIENs
ZWFuIHVwIC8gb3B0aW1pemUgY2FsbCBzaXRlcyBjb25zdHJ1Y3RpbmcgdmVjdG9ycwpkaWZmIC0t
Z2l0IGEvU291cmNlL1dlYkNvcmUvQ2hhbmdlTG9nIGIvU291cmNlL1dlYkNvcmUvQ2hhbmdlTG9n
CmluZGV4IDU0ODYyNGQ5OTAxMDRhMjVjMDYyYWQ4NjRiNmMyYzdjNjMzMTZhZTguLmI0MjY2MTg2
OTY3OTRjOWM0NWZmNTkzOTA0Y2MyZjJjOWNhOTYxMzggMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJD
b3JlL0NoYW5nZUxvZworKysgYi9Tb3VyY2UvV2ViQ29yZS9DaGFuZ2VMb2cKQEAgLTEsMyArMSw0
OCBAQAorMjAyMi0wMi0xNyAgQ2hyaXMgRHVtZXogIDxjZHVtZXpAYXBwbGUuY29tPgorCisgICAg
ICAgIENsZWFuIHVwIC8gb3B0aW1pemUgY2FsbCBzaXRlcyBjb25zdHJ1Y3RpbmcgdmVjdG9ycwor
ICAgICAgICBodHRwczovL2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9MjM2NzQ4Cisg
ICAgICAgIDxyZGFyOi8vcHJvYmxlbS84OTA5MDcxMD4KKworICAgICAgICBSZXZpZXdlZCBieSBO
T0JPRFkgKE9PUFMhKS4KKworICAgICAgICBGb2xsb3ctdXAgdG8gcjI5MDAyNiB0byBhZGRyZXNz
IGZlZWRiYWNrIGZyb20gRGFyaW4uCisKKyAgICAgICAgKiBNb2R1bGVzL2VuY3J5cHRlZG1lZGlh
L01lZGlhS2V5U2Vzc2lvbi5jcHA6CisgICAgICAgIChXZWJDb3JlOjpNZWRpYUtleVNlc3Npb246
OnVwZGF0ZUtleVN0YXR1c2VzKToKKyAgICAgICAgKiBNb2R1bGVzL2luZGV4ZWRkYi9zZXJ2ZXIv
U1FMaXRlSURCQ3Vyc29yLmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OklEQlNlcnZlcjo6U1FMaXRl
SURCQ3Vyc29yOjpjdXJyZW50RGF0YSk6CisgICAgICAgICogYWNjZXNzaWJpbGl0eS9pc29sYXRl
ZHRyZWUvQVhJc29sYXRlZE9iamVjdC5jcHA6CisgICAgICAgIChXZWJDb3JlOjpBWElzb2xhdGVk
T2JqZWN0OjpzZXRNYXRoc2NyaXB0cyk6CisgICAgICAgICogYmluZGluZ3MvanMvU2VyaWFsaXpl
ZFNjcmlwdFZhbHVlLmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OkNsb25lRGVzZXJpYWxpemVyOjpy
ZWFkU3RyaW5nKToKKyAgICAgICAgKiBjc3MvU3R5bGVQcm9wZXJ0aWVzLmNwcDoKKyAgICAgICAg
KFdlYkNvcmU6OkRlZmVycmVkU3R5bGVQcm9wZXJ0aWVzOjpEZWZlcnJlZFN0eWxlUHJvcGVydGll
cyk6CisgICAgICAgICogY3NzL1N0eWxlUnVsZS5jcHA6CisgICAgICAgIChXZWJDb3JlOjpEZWZl
cnJlZFN0eWxlR3JvdXBSdWxlTGlzdDo6RGVmZXJyZWRTdHlsZUdyb3VwUnVsZUxpc3QpOgorICAg
ICAgICAqIGRvbS9FbGVtZW50RGF0YS5jcHA6CisgICAgICAgIChXZWJDb3JlOjpVbmlxdWVFbGVt
ZW50RGF0YTo6VW5pcXVlRWxlbWVudERhdGEpOgorICAgICAgICAqIGxvYWRlci9hcmNoaXZlL2Nm
L0xlZ2FjeVdlYkFyY2hpdmUuY3BwOgorICAgICAgICAoV2ViQ29yZTo6TGVnYWN5V2ViQXJjaGl2
ZTo6Y3JlYXRlRnJvbVNlbGVjdGlvbik6CisgICAgICAgICogcGFnZS9jc3AvQ29udGVudFNlY3Vy
aXR5UG9saWN5LmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OkNvbnRlbnRTZWN1cml0eVBvbGljeTo6
cmVzcG9uc2VIZWFkZXJzIGNvbnN0KToKKyAgICAgICAgKiBwbGF0Zm9ybS9lbmNyeXB0ZWRtZWRp
YS9DRE1Qcm94eS5jcHA6CisgICAgICAgIChXZWJDb3JlOjpLZXlTdG9yZTo6Y29udmVydFRvSlNL
ZXlTdGF0dXNWZWN0b3IgY29uc3QpOgorICAgICAgICAqIHBsYXRmb3JtL2dyYXBoaWNzL2F2Zm91
bmRhdGlvbi9vYmpjL0NETUluc3RhbmNlRmFpclBsYXlTdHJlYW1pbmdBVkZPYmpDLm1tOgorICAg
ICAgICAoV2ViQ29yZTo6Q0RNSW5zdGFuY2VTZXNzaW9uRmFpclBsYXlTdHJlYW1pbmdBVkZPYmpD
Ojp1cGRhdGVMaWNlbnNlKToKKyAgICAgICAgKiBwbGF0Zm9ybS90ZXh0L0xvY2FsZUlDVS5jcHA6
CisgICAgICAgIChXZWJDb3JlOjpjcmVhdGVGYWxsYmFja01vbnRoTGFiZWxzKToKKyAgICAgICAg
KiBwbGF0Zm9ybS90ZXh0L0xvY2FsZU5vbmUuY3BwOgorICAgICAgICAoV2ViQ29yZTo6TG9jYWxl
Tm9uZTo6c2hvcnRNb250aExhYmVscyk6CisgICAgICAgICogcGxhdGZvcm0vdGV4dC9jb2NvYS9M
b2NhbGVDb2NvYS5tbToKKyAgICAgICAgKFdlYkNvcmU6OkxvY2FsZUNvY29hOjptb250aExhYmVs
cyk6CisgICAgICAgIChXZWJDb3JlOjpMb2NhbGVDb2NvYTo6c2hvcnRNb250aExhYmVscyk6Cisg
ICAgICAgIChXZWJDb3JlOjpMb2NhbGVDb2NvYTo6c3RhbmRBbG9uZU1vbnRoTGFiZWxzKToKKyAg
ICAgICAgKFdlYkNvcmU6OkxvY2FsZUNvY29hOjpzaG9ydFN0YW5kQWxvbmVNb250aExhYmVscyk6
CisgICAgICAgICogdGVzdGluZy9Nb2NrQ0RNRmFjdG9yeS5jcHA6CisgICAgICAgIChXZWJDb3Jl
OjpNb2NrQ0RNSW5zdGFuY2VTZXNzaW9uOjp1cGRhdGVMaWNlbnNlKToKKyAgICAgICAgKFdlYkNv
cmU6Ok1vY2tDRE1JbnN0YW5jZVNlc3Npb246OnJlbW92ZVNlc3Npb25EYXRhKToKKwogMjAyMi0w
Mi0xNyAgQWRpdHlhIEtlZXJ0aGkgIDxha2VlcnRoaUBhcHBsZS5jb20+CiAKICAgICAgICAgW21h
Y09TXSBMaWdodCBhcHBlYXJhbmNlIHRleHQgZmllbGRzIGFyZSBpbnZpc2libGUgaW4gSW5jcmVh
c2VkIENvbnRyYXN0IG1vZGUKZGlmZiAtLWdpdCBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9iMy9h
aXIvQWlyQ29kZS5jcHAgYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvYjMvYWlyL0FpckNvZGUuY3Bw
CmluZGV4IGU2OTdiZDUzMDU4ZmRlMTE1MjNmZTViODM1OTQ4MzkyMWQ1NzMyOTMuLmI1YmIwMzNk
MDYzMWY5YTg0NzgxNTQ1NzY0YjFmNzM0OTYzMjY0YmUgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9KYXZh
U2NyaXB0Q29yZS9iMy9haXIvQWlyQ29kZS5jcHAKKysrIGIvU291cmNlL0phdmFTY3JpcHRDb3Jl
L2IzL2Fpci9BaXJDb2RlLmNwcApAQCAtMzMzLDcgKzMzMyw3IEBAIHVuc2lnbmVkIENvZGU6Ompz
SGFzaCgpIGNvbnN0CiAKIHZvaWQgQ29kZTo6c2V0TnVtRW50cnlwb2ludHModW5zaWduZWQgbnVt
RW50cnlQb2ludHMpCiB7Ci0gICAgbV9wcm9sb2d1ZUdlbmVyYXRvcnMgPSBWZWN0b3IgeyBudW1F
bnRyeVBvaW50cywgbV9kZWZhdWx0UHJvbG9ndWVHZW5lcmF0b3IuY29weVJlZigpIH07CisgICAg
bV9wcm9sb2d1ZUdlbmVyYXRvcnMgPSB7IG51bUVudHJ5UG9pbnRzLCBtX2RlZmF1bHRQcm9sb2d1
ZUdlbmVyYXRvci5jb3B5UmVmKCkgfTsKIH0KIAogfSB9IH0gLy8gbmFtZXNwYWNlIEpTQzo6QjM6
OkFpcgpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvTW9kdWxlcy9lbmNyeXB0ZWRtZWRpYS9N
ZWRpYUtleVNlc3Npb24uY3BwIGIvU291cmNlL1dlYkNvcmUvTW9kdWxlcy9lbmNyeXB0ZWRtZWRp
YS9NZWRpYUtleVNlc3Npb24uY3BwCmluZGV4IDM4ZGZjYzFiOTc4NDYyMzIyZWM3ZDdlYmU0ODNk
NjZkODc2MDJlMzAuLmZiNGE3Zjg4NGY2Nzk1NWI2ZDc5ZDAyY2U1Y2RkNTg0OWQyZmM5NjUgMTAw
NjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL01vZHVsZXMvZW5jcnlwdGVkbWVkaWEvTWVkaWFLZXlT
ZXNzaW9uLmNwcAorKysgYi9Tb3VyY2UvV2ViQ29yZS9Nb2R1bGVzL2VuY3J5cHRlZG1lZGlhL01l
ZGlhS2V5U2Vzc2lvbi5jcHAKQEAgLTcwMSw3ICs3MDEsNyBAQCB2b2lkIE1lZGlhS2V5U2Vzc2lv
bjo6dXBkYXRlS2V5U3RhdHVzZXMoQ0RNSW5zdGFuY2VTZXNzaW9uOjpLZXlTdGF0dXNWZWN0b3Im
JiBpbgogICAgIH07CiAKICAgICBtX3N0YXR1c2VzID0gV1RGOjptYXAoV1RGTW92ZShpbnB1dFN0
YXR1c2VzKSwgW10oYXV0byYmIHN0YXR1cykgewotICAgICAgICByZXR1cm4gc3RkOjptYWtlX3Bh
aXIoV1RGTW92ZShzdGF0dXMuZmlyc3QpLCB0b01lZGlhS2V5U3RhdHVzKHN0YXR1cy5zZWNvbmQp
KTsKKyAgICAgICAgcmV0dXJuIHN0ZDo6cGFpciB7IFdURk1vdmUoc3RhdHVzLmZpcnN0KSwgdG9N
ZWRpYUtleVN0YXR1cyhzdGF0dXMuc2Vjb25kKSB9OwogICAgIH0pOwogCiAgICAgLy8gNS4gUXVl
dWUgYSB0YXNrIHRvIGZpcmUgYSBzaW1wbGUgZXZlbnQgbmFtZWQga2V5c3RhdHVzZXNjaGFuZ2Ug
YXQgdGhlIHNlc3Npb24uCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9Nb2R1bGVzL2luZGV4
ZWRkYi9zZXJ2ZXIvU1FMaXRlSURCQ3Vyc29yLmNwcCBiL1NvdXJjZS9XZWJDb3JlL01vZHVsZXMv
aW5kZXhlZGRiL3NlcnZlci9TUUxpdGVJREJDdXJzb3IuY3BwCmluZGV4IDY2N2Y1ZTc5NTdiNGI2
NTc2YjgyM2E2NWMwNDg5YWFjZDQ3ODkzOGQuLjQyZDBiN2MwOTYzMDU1NGRhZGY3ZTYyNGE5Y2Vl
ZWQxMjQ0NGQwNDMgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL01vZHVsZXMvaW5kZXhlZGRi
L3NlcnZlci9TUUxpdGVJREJDdXJzb3IuY3BwCisrKyBiL1NvdXJjZS9XZWJDb3JlL01vZHVsZXMv
aW5kZXhlZGRiL3NlcnZlci9TUUxpdGVJREJDdXJzb3IuY3BwCkBAIC0xMTYsNyArMTE2LDcgQEAg
dm9pZCBTUUxpdGVJREJDdXJzb3I6OmN1cnJlbnREYXRhKElEQkdldFJlc3VsdCYgcmVzdWx0LCBj
b25zdCBzdGQ6Om9wdGlvbmFsPElEQksKICAgICB9CiAKICAgICBWZWN0b3I8SURCQ3Vyc29yUmVj
b3JkPiBwcmVmZXRjaGVkUmVjb3JkczsKLSAgICBwcmVmZXRjaGVkUmVjb3Jkcy5yZXNlcnZlSW5p
dGlhbENhcGFjaXR5KG1fZmV0Y2hlZFJlY29yZHMuc2l6ZSgpKTsKKyAgICBwcmVmZXRjaGVkUmVj
b3Jkcy5yZXNlcnZlSW5pdGlhbENhcGFjaXR5KG1fZmV0Y2hlZFJlY29yZHMuc2l6ZSgpIC0gMSk7
CiAgICAgYm9vbCBpc0ZpcnN0ID0gdHJ1ZTsKICAgICBmb3IgKGF1dG8mIHJlY29yZCA6IG1fZmV0
Y2hlZFJlY29yZHMpIHsKICAgICAgICAgaWYgKHJlY29yZC5pc1Rlcm1pbmFsUmVjb3JkKCkpCmRp
ZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9hY2Nlc3NpYmlsaXR5L2lzb2xhdGVkdHJlZS9BWElz
b2xhdGVkT2JqZWN0LmNwcCBiL1NvdXJjZS9XZWJDb3JlL2FjY2Vzc2liaWxpdHkvaXNvbGF0ZWR0
cmVlL0FYSXNvbGF0ZWRPYmplY3QuY3BwCmluZGV4IDMzZWExMGEzMWVmOTNkYWJiODk1ZDU0MjU0
MWNhZDg1NGY2ODZlMDIuLmJkZjgyNWQyZDFjMGM0YWQ5NmYwODVmY2M2YWUwZjMxMDIzOTAwZDEg
MTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL2FjY2Vzc2liaWxpdHkvaXNvbGF0ZWR0cmVlL0FY
SXNvbGF0ZWRPYmplY3QuY3BwCisrKyBiL1NvdXJjZS9XZWJDb3JlL2FjY2Vzc2liaWxpdHkvaXNv
bGF0ZWR0cmVlL0FYSXNvbGF0ZWRPYmplY3QuY3BwCkBAIC00NDUsNyArNDQ1LDcgQEAgdm9pZCBB
WElzb2xhdGVkT2JqZWN0OjpzZXRNYXRoc2NyaXB0cyhBWFByb3BlcnR5TmFtZSBwcm9wZXJ0eU5h
bWUsIEFYQ29yZU9iamVjdCYKICAgICAgICAgcmV0dXJuOwogCiAgICAgYXV0byBpZFBhaXJzID0g
cGFpcnMubWFwKFtdKGF1dG8mIG1hdGhQYWlyKSB7Ci0gICAgICAgIHJldHVybiBzdGQ6Om1ha2Vf
cGFpcihtYXRoUGFpci5maXJzdCA/IG1hdGhQYWlyLmZpcnN0LT5vYmplY3RJRCgpIDogQVhJRCgp
LCBtYXRoUGFpci5zZWNvbmQgPyBtYXRoUGFpci5zZWNvbmQtPm9iamVjdElEKCkgOiBBWElEKCkp
OworICAgICAgICByZXR1cm4gc3RkOjpwYWlyIHsgbWF0aFBhaXIuZmlyc3QgPyBtYXRoUGFpci5m
aXJzdC0+b2JqZWN0SUQoKSA6IEFYSUQoKSwgbWF0aFBhaXIuc2Vjb25kID8gbWF0aFBhaXIuc2Vj
b25kLT5vYmplY3RJRCgpIDogQVhJRCgpIH07CiAgICAgfSk7CiAgICAgc2V0UHJvcGVydHkocHJv
cGVydHlOYW1lLCBXVEZNb3ZlKGlkUGFpcnMpKTsKIH0KZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJD
b3JlL2JpbmRpbmdzL2pzL1NlcmlhbGl6ZWRTY3JpcHRWYWx1ZS5jcHAgYi9Tb3VyY2UvV2ViQ29y
ZS9iaW5kaW5ncy9qcy9TZXJpYWxpemVkU2NyaXB0VmFsdWUuY3BwCmluZGV4IGQxNGU3OTAyODhm
ZGMzMmIzOTMzNTlhYmVhNTY4NzdkNDc1NmViODIuLjVjZGVkYTNlNzZjMWMwOGEyZTQyMzJkZGMy
MGZmMGUzODNhYzNmNmIgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL2JpbmRpbmdzL2pzL1Nl
cmlhbGl6ZWRTY3JpcHRWYWx1ZS5jcHAKKysrIGIvU291cmNlL1dlYkNvcmUvYmluZGluZ3MvanMv
U2VyaWFsaXplZFNjcmlwdFZhbHVlLmNwcApAQCAtMjQ1NSwxNCArMjQ1NSwxMyBAQCBwcml2YXRl
OgogICAgICAgICBzdHIgPSBTdHJpbmcocmVpbnRlcnByZXRfY2FzdDxjb25zdCBVQ2hhcio+KHB0
ciksIGxlbmd0aCk7CiAgICAgICAgIHB0ciArPSBsZW5ndGggKiBzaXplb2YoVUNoYXIpOwogI2Vs
c2UKLSAgICAgICAgVmVjdG9yPFVDaGFyPiBidWZmZXI7Ci0gICAgICAgIGJ1ZmZlci5yZXNlcnZl
SW5pdGlhbENhcGFjaXR5KGxlbmd0aCk7Ci0gICAgICAgIGZvciAodW5zaWduZWQgaSA9IDA7IGkg
PCBsZW5ndGg7IGkrKykgewotICAgICAgICAgICAgdWludDE2X3QgY2g7Ci0gICAgICAgICAgICBy
ZWFkTGl0dGxlRW5kaWFuKHB0ciwgZW5kLCBjaCk7Ci0gICAgICAgICAgICBidWZmZXIudW5jaGVj
a2VkQXBwZW5kKGNoKTsKLSAgICAgICAgfQotICAgICAgICBzdHIgPSBTdHJpbmc6OmFkb3B0KFdU
Rk1vdmUoYnVmZmVyKSk7CisgICAgICAgIFVDaGFyKiBjaGFyYWN0ZXJzOworICAgICAgICBzdHIg
PSBTdHJpbmc6OmNyZWF0ZVVuaW5pdGlhbGl6ZWQobGVuZ3RoLCBjaGFyYWN0ZXJzKTsKKyAgICAg
ICAgZm9yICh1bnNpZ25lZCBpID0gMDsgaSA8IGxlbmd0aDsgKytpKSB7CisgICAgICAgICAgICB1
aW50MTZfdCBjOworICAgICAgICAgICAgcmVhZExpdHRsZUVuZGlhbihwdHIsIGVuZCwgYyk7Cisg
ICAgICAgICAgICBjaGFyYWN0ZXJzW2ldID0gYzsKKyAgICAgICAgfQogI2VuZGlmCiAgICAgICAg
IHJldHVybiB0cnVlOwogICAgIH0KZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL2Nzcy9TdHls
ZVByb3BlcnRpZXMuY3BwIGIvU291cmNlL1dlYkNvcmUvY3NzL1N0eWxlUHJvcGVydGllcy5jcHAK
aW5kZXggYWUzOGI4ZTA4NWEyNGFhYWUwNGU3Y2I1ZGYyNDNmODcxMTVjYjBmNy4uZjJlNWE5YjRh
NDlkNDAxZjRhZDM4NjFlNGRjNWI0ZGRiYzM5ZmU0YyAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNv
cmUvY3NzL1N0eWxlUHJvcGVydGllcy5jcHAKKysrIGIvU291cmNlL1dlYkNvcmUvY3NzL1N0eWxl
UHJvcGVydGllcy5jcHAKQEAgLTE4MDMsMTAgKzE4MDMsOSBAQCBSZWY8RGVmZXJyZWRTdHlsZVBy
b3BlcnRpZXM+IERlZmVycmVkU3R5bGVQcm9wZXJ0aWVzOjpjcmVhdGUoY29uc3QgQ1NTUGFyc2Vy
VG9rZQogCiBEZWZlcnJlZFN0eWxlUHJvcGVydGllczo6RGVmZXJyZWRTdHlsZVByb3BlcnRpZXMo
Y29uc3QgQ1NTUGFyc2VyVG9rZW5SYW5nZSYgcmFuZ2UsIENTU0RlZmVycmVkUGFyc2VyJiBwYXJz
ZXIpCiAgICAgOiBTdHlsZVByb3BlcnRpZXNCYXNlKHBhcnNlci5tb2RlKCksIERlZmVycmVkUHJv
cGVydGllc1R5cGUpCisgICAgLCBtX3Rva2VucyhyYW5nZS5iZWdpbigpLCByYW5nZS5lbmQoKSAt
IHJhbmdlLmJlZ2luKCkpCiAgICAgLCBtX3BhcnNlcihwYXJzZXIpCiB7Ci0gICAgc2l6ZV90IGxl
bmd0aCA9IHJhbmdlLmVuZCgpIC0gcmFuZ2UuYmVnaW4oKTsKLSAgICBtX3Rva2Vucy5hcHBlbmQo
cmFuZ2UuYmVnaW4oKSwgbGVuZ3RoKTsKIH0KICAgICAKIERlZmVycmVkU3R5bGVQcm9wZXJ0aWVz
Ojp+RGVmZXJyZWRTdHlsZVByb3BlcnRpZXMoKSA9IGRlZmF1bHQ7CmRpZmYgLS1naXQgYS9Tb3Vy
Y2UvV2ViQ29yZS9jc3MvU3R5bGVSdWxlLmNwcCBiL1NvdXJjZS9XZWJDb3JlL2Nzcy9TdHlsZVJ1
bGUuY3BwCmluZGV4IDFkOWVlN2QwMDU0Mzg3NTU0OGFkMzJlYzU3NGE4YjAwZGJlOTU5YjcuLjZm
MTA3MGQxMTA0YzRmM2U0NTY2NGU3OTk3Nzc3YzY1NDI4YWU3MDQgMTAwNjQ0Ci0tLSBhL1NvdXJj
ZS9XZWJDb3JlL2Nzcy9TdHlsZVJ1bGUuY3BwCisrKyBiL1NvdXJjZS9XZWJDb3JlL2Nzcy9TdHls
ZVJ1bGUuY3BwCkBAIC0zNjYsMTAgKzM2Niw5IEBAIFN0eWxlUnVsZUZvbnRQYWxldHRlVmFsdWVz
OjpTdHlsZVJ1bGVGb250UGFsZXR0ZVZhbHVlcyhjb25zdCBTdHlsZVJ1bGVGb250UGFsZXR0CiBT
dHlsZVJ1bGVGb250UGFsZXR0ZVZhbHVlczo6flN0eWxlUnVsZUZvbnRQYWxldHRlVmFsdWVzKCkg
PSBkZWZhdWx0OwogCiBEZWZlcnJlZFN0eWxlR3JvdXBSdWxlTGlzdDo6RGVmZXJyZWRTdHlsZUdy
b3VwUnVsZUxpc3QoY29uc3QgQ1NTUGFyc2VyVG9rZW5SYW5nZSYgcmFuZ2UsIENTU0RlZmVycmVk
UGFyc2VyJiBwYXJzZXIpCi0gICAgOiBtX3BhcnNlcihwYXJzZXIpCisgICAgOiBtX3Rva2Vucyhy
YW5nZS5iZWdpbigpLCByYW5nZS5lbmQoKSAtIHJhbmdlLmJlZ2luKCkpCisgICAgLCBtX3BhcnNl
cihwYXJzZXIpCiB7Ci0gICAgc2l6ZV90IGxlbmd0aCA9IHJhbmdlLmVuZCgpIC0gcmFuZ2UuYmVn
aW4oKTsKLSAgICBtX3Rva2Vucy5hcHBlbmQocmFuZ2UuYmVnaW4oKSwgbGVuZ3RoKTsKIH0KIAog
RGVmZXJyZWRTdHlsZUdyb3VwUnVsZUxpc3Q6On5EZWZlcnJlZFN0eWxlR3JvdXBSdWxlTGlzdCgp
ID0gZGVmYXVsdDsKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL2Nzcy9jYWxjL0NTU0NhbGNW
YWx1ZS5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9jc3MvY2FsYy9DU1NDYWxjVmFsdWUuY3BwCmluZGV4
IDQzNTgyYjRkMTEzMDI5NTczZjNiYWYwMTYyYTNjZGY2M2M2NzlmNDcuLjQ4NzE3OTExOTcwMGJm
MTlkZWJjNjYxMjNjZDE1MGM4OTJjOTI1MTUgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL2Nz
cy9jYWxjL0NTU0NhbGNWYWx1ZS5jcHAKKysrIGIvU291cmNlL1dlYkNvcmUvY3NzL2NhbGMvQ1NT
Q2FsY1ZhbHVlLmNwcApAQCAtNjYsMTQgKzY2LDExIEBAIHN0YXRpYyBpbmxpbmUgUmVmUHRyPENT
U0NhbGNPcGVyYXRpb25Ob2RlPiBjcmVhdGVCbGVuZEhhbGYoY29uc3QgTGVuZ3RoJiBsZW5ndGgs
CiAKIHN0YXRpYyBWZWN0b3I8UmVmPENTU0NhbGNFeHByZXNzaW9uTm9kZT4+IGNyZWF0ZUNTUyhj
b25zdCBWZWN0b3I8c3RkOjp1bmlxdWVfcHRyPENhbGNFeHByZXNzaW9uTm9kZT4+JiBub2Rlcywg
Y29uc3QgUmVuZGVyU3R5bGUmIHN0eWxlKQogewotICAgIFZlY3RvcjxSZWY8Q1NTQ2FsY0V4cHJl
c3Npb25Ob2RlPj4gdmFsdWVzOwotICAgIHZhbHVlcy5yZXNlcnZlSW5pdGlhbENhcGFjaXR5KG5v
ZGVzLnNpemUoKSk7Ci0gICAgZm9yIChhdXRvJiBub2RlIDogbm9kZXMpIHsKKyAgICByZXR1cm4g
V1RGOjpjb21wYWN0TWFwKG5vZGVzLCBbJl0oYXV0byYgbm9kZSkgLT4gc3RkOjpvcHRpb25hbDxS
ZWY8Q1NTQ2FsY0V4cHJlc3Npb25Ob2RlPj4gewogICAgICAgICBpZiAoYXV0byBjc3NOb2RlID0g
Y3JlYXRlQ1NTKCpub2RlLCBzdHlsZSkpCi0gICAgICAgICAgICB2YWx1ZXMudW5jaGVja2VkQXBw
ZW5kKGNzc05vZGUucmVsZWFzZU5vbk51bGwoKSk7Ci0gICAgfQotICAgIHZhbHVlcy5zaHJpbmtU
b0ZpdCgpOwotICAgIHJldHVybiB2YWx1ZXM7CisgICAgICAgICAgICByZXR1cm4gY3NzTm9kZS5y
ZWxlYXNlTm9uTnVsbCgpOworICAgICAgICByZXR1cm4gc3RkOjpudWxsb3B0OworICAgIH0pOwog
fQogCiBzdGF0aWMgUmVmUHRyPENTU0NhbGNFeHByZXNzaW9uTm9kZT4gY3JlYXRlQ1NTKGNvbnN0
IENhbGNFeHByZXNzaW9uTm9kZSYgbm9kZSwgY29uc3QgUmVuZGVyU3R5bGUmIHN0eWxlKQpkaWZm
IC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvZG9tL0VsZW1lbnREYXRhLmNwcCBiL1NvdXJjZS9XZWJD
b3JlL2RvbS9FbGVtZW50RGF0YS5jcHAKaW5kZXggMDcxZGIwYjM0Y2E2ZTU2ZWYxMjZlYmVlZDUx
OGY2MGQ3NDBiNGI5OS4uNzc2MzIyZjAzYjViNDgwYzRiODQ0Nzk3ODA2Zjg4MWU3M2Q4NzMzNSAx
MDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvZG9tL0VsZW1lbnREYXRhLmNwcAorKysgYi9Tb3Vy
Y2UvV2ViQ29yZS9kb20vRWxlbWVudERhdGEuY3BwCkBAIC0xNDAsMTIgKzE0MCwxMSBAQCBVbmlx
dWVFbGVtZW50RGF0YTo6VW5pcXVlRWxlbWVudERhdGEoY29uc3QgVW5pcXVlRWxlbWVudERhdGEm
IG90aGVyKQogCiBVbmlxdWVFbGVtZW50RGF0YTo6VW5pcXVlRWxlbWVudERhdGEoY29uc3QgU2hh
cmVhYmxlRWxlbWVudERhdGEmIG90aGVyKQogICAgIDogRWxlbWVudERhdGEob3RoZXIsIHRydWUp
CisgICAgLCBtX2F0dHJpYnV0ZVZlY3RvcihvdGhlci5tX2F0dHJpYnV0ZUFycmF5LCBvdGhlci5s
ZW5ndGgoKSkKIHsKICAgICAvLyBBbiBTaGFyZWFibGVFbGVtZW50RGF0YSBzaG91bGQgbmV2ZXIg
aGF2ZSBhIG11dGFibGUgaW5saW5lIFN0eWxlUHJvcGVydGllcyBhdHRhY2hlZC4KICAgICBBU1NF
UlQoIW90aGVyLm1faW5saW5lU3R5bGUgfHwgIW90aGVyLm1faW5saW5lU3R5bGUtPmlzTXV0YWJs
ZSgpKTsKICAgICBtX2lubGluZVN0eWxlID0gb3RoZXIubV9pbmxpbmVTdHlsZTsKLQotICAgIG1f
YXR0cmlidXRlVmVjdG9yLmFwcGVuZChvdGhlci5tX2F0dHJpYnV0ZUFycmF5LCBvdGhlci5sZW5n
dGgoKSk7CiB9CiAKIFJlZjxVbmlxdWVFbGVtZW50RGF0YT4gRWxlbWVudERhdGE6Om1ha2VVbmlx
dWVDb3B5KCkgY29uc3QKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL2xvYWRlci9hcmNoaXZl
L2NmL0xlZ2FjeVdlYkFyY2hpdmUuY3BwIGIvU291cmNlL1dlYkNvcmUvbG9hZGVyL2FyY2hpdmUv
Y2YvTGVnYWN5V2ViQXJjaGl2ZS5jcHAKaW5kZXggY2Q5NDFjZjA1MTgwZGY4YzM3MmU5OTNkYWMz
YjE5MWViNWYzODFiMi4uZGVkNzZmYjhhOTE4NjliMTZjMzg0NzE0ZTA1MjM3YjIzM2UzOWRlYiAx
MDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvbG9hZGVyL2FyY2hpdmUvY2YvTGVnYWN5V2ViQXJj
aGl2ZS5jcHAKKysrIGIvU291cmNlL1dlYkNvcmUvbG9hZGVyL2FyY2hpdmUvY2YvTGVnYWN5V2Vi
QXJjaGl2ZS5jcHAKQEAgLTYxMCw3ICs2MTAsNyBAQCBSZWZQdHI8TGVnYWN5V2ViQXJjaGl2ZT4g
TGVnYWN5V2ViQXJjaGl2ZTo6Y3JlYXRlRnJvbVNlbGVjdGlvbihGcmFtZSogZnJhbWUpCiAgICAg
U3RyaW5nIGlmcmFtZU1hcmt1cCA9ICI8aWZyYW1lIGZyYW1lYm9yZGVyPVwibm9cIiBtYXJnaW53
aWR0aD1cIjBcIiBtYXJnaW5oZWlnaHQ9XCIwXCIgd2lkdGg9XCI5OCUlXCIgaGVpZ2h0PVwiOTgl
JVwiIHNyYz1cIiIgKyBmcmFtZS0+bG9hZGVyKCkuZG9jdW1lbnRMb2FkZXIoKS0+cmVzcG9uc2Uo
KS51cmwoKS5zdHJpbmcoKSArICJcIj48L2lmcmFtZT4iOwogICAgIGF1dG8gaWZyYW1lUmVzb3Vy
Y2UgPSBBcmNoaXZlUmVzb3VyY2U6OmNyZWF0ZSh1dGY4QnVmZmVyKGlmcmFtZU1hcmt1cCksIGFi
b3V0QmxhbmtVUkwoKSwgInRleHQvaHRtbCIsICJVVEYtOCIsIFN0cmluZygpKTsKIAotICAgIHJl
dHVybiBjcmVhdGUoaWZyYW1lUmVzb3VyY2UucmVsZWFzZU5vbk51bGwoKSwgeyB9LCBWZWN0b3Ig
eyBhcmNoaXZlLnJlbGVhc2VOb25OdWxsKCkgfSk7CisgICAgcmV0dXJuIGNyZWF0ZShpZnJhbWVS
ZXNvdXJjZS5yZWxlYXNlTm9uTnVsbCgpLCB7IH0sIHsgYXJjaGl2ZS5yZWxlYXNlTm9uTnVsbCgp
IH0pOwogfQogCiB9CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9wYWdlL2NzcC9Db250ZW50
U2VjdXJpdHlQb2xpY3kuY3BwIGIvU291cmNlL1dlYkNvcmUvcGFnZS9jc3AvQ29udGVudFNlY3Vy
aXR5UG9saWN5LmNwcAppbmRleCBlYTZkMGRlYWM4OTQzODgyZWZhOGZmMzhjMDI1OTZhMzE0NWNm
ZDk3Li41YjAyYjRkNDJhZmM2Zjg2MTNmY2M0NjQwMGNiOGRjN2ZmMjA4YjNjIDEwMDY0NAotLS0g
YS9Tb3VyY2UvV2ViQ29yZS9wYWdlL2NzcC9Db250ZW50U2VjdXJpdHlQb2xpY3kuY3BwCisrKyBi
L1NvdXJjZS9XZWJDb3JlL3BhZ2UvY3NwL0NvbnRlbnRTZWN1cml0eVBvbGljeS5jcHAKQEAgLTE2
Miw3ICsxNjIsNyBAQCBDb250ZW50U2VjdXJpdHlQb2xpY3lSZXNwb25zZUhlYWRlcnMgQ29udGVu
dFNlY3VyaXR5UG9saWN5OjpyZXNwb25zZUhlYWRlcnMoKSBjbwogICAgIGlmICghbV9jYWNoZWRS
ZXNwb25zZUhlYWRlcnMpIHsKICAgICAgICAgQ29udGVudFNlY3VyaXR5UG9saWN5UmVzcG9uc2VI
ZWFkZXJzIHJlc3VsdDsKICAgICAgICAgcmVzdWx0Lm1faGVhZGVycyA9IG1fcG9saWNpZXMubWFw
KFtdKGF1dG8mIHBvbGljeSkgewotICAgICAgICAgICAgcmV0dXJuIHN0ZDo6bWFrZV9wYWlyKHBv
bGljeS0+aGVhZGVyKCksIHBvbGljeS0+aGVhZGVyVHlwZSgpKTsKKyAgICAgICAgICAgIHJldHVy
biBzdGQ6OnBhaXIgeyBwb2xpY3ktPmhlYWRlcigpLCBwb2xpY3ktPmhlYWRlclR5cGUoKSB9Owog
ICAgICAgICB9KTsKICAgICAgICAgcmVzdWx0Lm1faHR0cFN0YXR1c0NvZGUgPSBtX2h0dHBTdGF0
dXNDb2RlOwogICAgICAgICBtX2NhY2hlZFJlc3BvbnNlSGVhZGVycyA9IFdURk1vdmUocmVzdWx0
KTsKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2VuY3J5cHRlZG1lZGlhL0NE
TVByb3h5LmNwcCBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2VuY3J5cHRlZG1lZGlhL0NETVBy
b3h5LmNwcAppbmRleCA2NzhmNDFhN2FlMjQwNzU0Y2RjZWM2MmY1YzJjNTY2ZWNlZDVlMGVmLi4y
ZGQ3ODAyODRhMjZjOTQ2NDhkOWYxMWYzMGYyMmNkOTI3OTExYjNiIDEwMDY0NAotLS0gYS9Tb3Vy
Y2UvV2ViQ29yZS9wbGF0Zm9ybS9lbmNyeXB0ZWRtZWRpYS9DRE1Qcm94eS5jcHAKKysrIGIvU291
cmNlL1dlYkNvcmUvcGxhdGZvcm0vZW5jcnlwdGVkbWVkaWEvQ0RNUHJveHkuY3BwCkBAIC0yMjYs
NyArMjI2LDcgQEAgY29uc3QgUmVmUHRyPEtleUhhbmRsZT4mIEtleVN0b3JlOjprZXlIYW5kbGUo
Y29uc3QgS2V5SURUeXBlJiBrZXlJRCkgY29uc3QKIENETUluc3RhbmNlU2Vzc2lvbjo6S2V5U3Rh
dHVzVmVjdG9yIEtleVN0b3JlOjpjb252ZXJ0VG9KU0tleVN0YXR1c1ZlY3RvcigpIGNvbnN0CiB7
CiAgICAgcmV0dXJuIG1fa2V5cy5tYXAoW10oYXV0byYga2V5KSB7Ci0gICAgICAgIHJldHVybiBz
dGQ6Om1ha2VfcGFpcihrZXktPmlkQXNTaGFyZWRCdWZmZXIoKSwga2V5LT5zdGF0dXMoKSk7Cisg
ICAgICAgIHJldHVybiBzdGQ6OnBhaXIgeyBrZXktPmlkQXNTaGFyZWRCdWZmZXIoKSwga2V5LT5z
dGF0dXMoKSB9OwogICAgIH0pOwogfQogCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9wbGF0
Zm9ybS9ncmFwaGljcy9hdmZvdW5kYXRpb24vb2JqYy9DRE1JbnN0YW5jZUZhaXJQbGF5U3RyZWFt
aW5nQVZGT2JqQy5tbSBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2F2Zm91bmRh
dGlvbi9vYmpjL0NETUluc3RhbmNlRmFpclBsYXlTdHJlYW1pbmdBVkZPYmpDLm1tCmluZGV4IDU4
MDI1MWUxMTAyZGNjMzJjYTNhZDk5MzQzODM4YTdhMjk5MWZjMjAuLjBlY2ZkY2MxNWQ1ODkzYmNl
YjZkMzZmOTYxZTI2ZGFiNzcxNDc2NzQgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL3BsYXRm
b3JtL2dyYXBoaWNzL2F2Zm91bmRhdGlvbi9vYmpjL0NETUluc3RhbmNlRmFpclBsYXlTdHJlYW1p
bmdBVkZPYmpDLm1tCisrKyBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2F2Zm91
bmRhdGlvbi9vYmpjL0NETUluc3RhbmNlRmFpclBsYXlTdHJlYW1pbmdBVkZPYmpDLm1tCkBAIC05
MzcsNyArOTM3LDcgQEAgdm9pZCBDRE1JbnN0YW5jZVNlc3Npb25GYWlyUGxheVN0cmVhbWluZ0FW
Rk9iakM6OnVwZGF0ZUxpY2Vuc2UoY29uc3QgU3RyaW5nJiwgTGkKICAgICAvLyBGSVhNRShyZGFy
Oi8vcHJvYmxlbS8zNTU5MjI3Nyk6IHN0YXNoIHRoZSBjYWxsYmFjayBhbmQgY2FsbCBpdCBvbmNl
IEFWQ29udGVudEtleVJlc3BvbnNlIHN1cHBvcnRzIGEgc3VjY2VzcyBjYWxsYmFjay4KICAgICBz
dHJ1Y3Qgb2JqY19tZXRob2RfZGVzY3JpcHRpb24gbWV0aG9kID0gcHJvdG9jb2xfZ2V0TWV0aG9k
RGVzY3JpcHRpb24oQHByb3RvY29sKEFWQ29udGVudEtleVNlc3Npb25EZWxlZ2F0ZSksIEBzZWxl
Y3Rvcihjb250ZW50S2V5U2Vzc2lvbjpjb250ZW50S2V5UmVxdWVzdERpZFN1Y2NlZWQ6KSwgTk8s
IFlFUyk7CiAgICAgaWYgKCFtZXRob2QubmFtZSkgewotICAgICAgICBLZXlTdGF0dXNWZWN0b3Ig
a2V5U3RhdHVzZXMgeyBzdGQ6Om1ha2VfcGFpcihXVEZNb3ZlKGtleUlEcy5maXJzdCgpKSwgS2V5
U3RhdHVzOjpVc2FibGUpIH07CisgICAgICAgIEtleVN0YXR1c1ZlY3RvciBrZXlTdGF0dXNlcyB7
IHN0ZDo6cGFpciB7IFdURk1vdmUoa2V5SURzLmZpcnN0KCkpLCBLZXlTdGF0dXM6OlVzYWJsZSB9
IH07CiAgICAgICAgIGNhbGxiYWNrKGZhbHNlLCBzdGQ6Om1ha2Vfb3B0aW9uYWwoV1RGTW92ZShr
ZXlTdGF0dXNlcykpLCBzdGQ6Om51bGxvcHQsIHN0ZDo6bnVsbG9wdCwgU3VjY2VlZGVkKTsKICAg
ICAgICAgcmV0dXJuOwogICAgIH0KZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3Jt
L3RleHQvTG9jYWxlSUNVLmNwcCBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL3RleHQvTG9jYWxl
SUNVLmNwcAppbmRleCA3NTliNzg1OGRjZTBkYmRhMzlkZjQzZjI0MjY5Mjg2NDFjNzY2Nzc5Li5m
MGQ0MWQ1M2VhNDBjZGY0NzBlNTBlNGFmNTFkNTkzZTQyZDY2YWI1IDEwMDY0NAotLS0gYS9Tb3Vy
Y2UvV2ViQ29yZS9wbGF0Zm9ybS90ZXh0L0xvY2FsZUlDVS5jcHAKKysrIGIvU291cmNlL1dlYkNv
cmUvcGxhdGZvcm0vdGV4dC9Mb2NhbGVJQ1UuY3BwCkBAIC0xODgsOSArMTg4LDkgQEAgc3RkOjp1
bmlxdWVfcHRyPFZlY3RvcjxTdHJpbmc+PiBMb2NhbGVJQ1U6OmNyZWF0ZUxhYmVsVmVjdG9yKGNv
bnN0IFVEYXRlRm9ybWF0Kgogc3RhdGljIHN0ZDo6dW5pcXVlX3B0cjxWZWN0b3I8U3RyaW5nPj4g
Y3JlYXRlRmFsbGJhY2tNb250aExhYmVscygpCiB7CiAgICAgYXV0byBsYWJlbHMgPSBtYWtlVW5p
cXVlPFZlY3RvcjxTdHJpbmc+PigpOwotICAgIGxhYmVscy0+cmVzZXJ2ZUluaXRpYWxDYXBhY2l0
eShXVEZfQVJSQVlfTEVOR1RIKFdURjo6bW9udGhGdWxsTmFtZSkpOwotICAgIGZvciAodW5zaWdu
ZWQgaSA9IDA7IGkgPCBXVEZfQVJSQVlfTEVOR1RIKFdURjo6bW9udGhGdWxsTmFtZSk7ICsraSkK
LSAgICAgICAgbGFiZWxzLT51bmNoZWNrZWRBcHBlbmQoV1RGOjptb250aEZ1bGxOYW1lW2ldKTsK
KyAgICBsYWJlbHMtPnJlc2VydmVJbml0aWFsQ2FwYWNpdHkoc3RkOjpzaXplKFdURjo6bW9udGhG
dWxsTmFtZSkpOworICAgIGZvciAoYXV0byogbW9udGhOYW1lIDogV1RGOjptb250aEZ1bGxOYW1l
KQorICAgICAgICBsYWJlbHMtPnVuY2hlY2tlZEFwcGVuZChtb250aE5hbWUpOwogICAgIHJldHVy
biBsYWJlbHM7CiB9CiAKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL3RleHQv
TG9jYWxlTm9uZS5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS90ZXh0L0xvY2FsZU5vbmUu
Y3BwCmluZGV4IDRiNmQ3NjBlOTUyN2E0NzdjYzQ5OTA0ODBkYzUyZjg2NTdmMzM0MzUuLmFjNGQ3
ZjQ2MjEyM2MwOTU5NDEzYzZkZTRlZDgzZWYzYmZmZGYyMGUgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9X
ZWJDb3JlL3BsYXRmb3JtL3RleHQvTG9jYWxlTm9uZS5jcHAKKysrIGIvU291cmNlL1dlYkNvcmUv
cGxhdGZvcm0vdGV4dC9Mb2NhbGVOb25lLmNwcApAQCAtMTE2LDkgKzExNiw5IEBAIGNvbnN0IFZl
Y3RvcjxTdHJpbmc+JiBMb2NhbGVOb25lOjpzaG9ydE1vbnRoTGFiZWxzKCkKIHsKICAgICBpZiAo
IW1fc2hvcnRNb250aExhYmVscy5pc0VtcHR5KCkpCiAgICAgICAgIHJldHVybiBtX3Nob3J0TW9u
dGhMYWJlbHM7Ci0gICAgbV9zaG9ydE1vbnRoTGFiZWxzLnJlc2VydmVDYXBhY2l0eShXVEZfQVJS
QVlfTEVOR1RIKFdURjo6bW9udGhOYW1lKSk7Ci0gICAgZm9yICh1bnNpZ25lZCBpID0gMDsgaSA8
IFdURl9BUlJBWV9MRU5HVEgoV1RGOjptb250aE5hbWUpOyArK2kpCi0gICAgICAgIG1fc2hvcnRN
b250aExhYmVscy51bmNoZWNrZWRBcHBlbmQoV1RGOjptb250aE5hbWVbaV0pOworICAgIG1fc2hv
cnRNb250aExhYmVscy5yZXNlcnZlQ2FwYWNpdHkoc3RkOjpzaXplKFdURjo6bW9udGhOYW1lKSk7
CisgICAgZm9yIChhdXRvKiBtb250aE5hbWUgOiBXVEY6Om1vbnRoTmFtZSkKKyAgICAgICAgbV9z
aG9ydE1vbnRoTGFiZWxzLnVuY2hlY2tlZEFwcGVuZChtb250aE5hbWUpOwogICAgIHJldHVybiBt
X3Nob3J0TW9udGhMYWJlbHM7CiB9CiAKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3BsYXRm
b3JtL3RleHQvY29jb2EvTG9jYWxlQ29jb2EubW0gYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS90
ZXh0L2NvY29hL0xvY2FsZUNvY29hLm1tCmluZGV4IGYxOGRiNDU3MDgyZjVkOTJiMDY5M2JkMjQ3
ZjM3ZWRhMDc2ODhiNmEuLjc0ZmQ5OGQ2ODA5ZTk5NGJjY2Y0ODg2MWNlMzcxZTc1MjkwMzE4ZjEg
MTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL3RleHQvY29jb2EvTG9jYWxlQ29j
b2EubW0KKysrIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vdGV4dC9jb2NvYS9Mb2NhbGVDb2Nv
YS5tbQpAQCAtMzksNiArMzksNyBAQAogI2ltcG9ydCA8d3RmL0hhc2hNYXAuaD4KICNpbXBvcnQg
PHd0Zi9MYW5ndWFnZS5oPgogI2ltcG9ydCA8d3RmL1JldGFpblB0ci5oPgorI2ltcG9ydCA8d3Rm
L2NvY29hL1ZlY3RvckNvY29hLmg+CiAjaW1wb3J0IDx3dGYvdGV4dC9BdG9tU3RyaW5nSGFzaC5o
PgogI2ltcG9ydCAiTG9jYWxpemVkRGF0ZUNhY2hlLmgiCiAKQEAgLTEwNiwxMyArMTA3LDEyIEBA
IGNvbnN0IFZlY3RvcjxTdHJpbmc+JiBMb2NhbGVDb2NvYTo6bW9udGhMYWJlbHMoKQogewogICAg
IGlmICghbV9tb250aExhYmVscy5pc0VtcHR5KCkpCiAgICAgICAgIHJldHVybiBtX21vbnRoTGFi
ZWxzOwotICAgIG1fbW9udGhMYWJlbHMucmVzZXJ2ZUNhcGFjaXR5KDEyKTsKICAgICBOU0FycmF5
ICphcnJheSA9IFtzaG9ydERhdGVGb3JtYXR0ZXIoKS5nZXQoKSBtb250aFN5bWJvbHNdOwogICAg
IGlmIChbYXJyYXkgY291bnRdID09IDEyKSB7Ci0gICAgICAgIGZvciAodW5zaWduZWQgaSA9IDA7
IGkgPCAxMjsgKytpKQotICAgICAgICAgICAgbV9tb250aExhYmVscy51bmNoZWNrZWRBcHBlbmQo
U3RyaW5nKFthcnJheSBvYmplY3RBdEluZGV4OmldKSk7CisgICAgICAgIG1fbW9udGhMYWJlbHMg
PSBtYWtlVmVjdG9yPFN0cmluZz4oYXJyYXkpOwogICAgICAgICByZXR1cm4gbV9tb250aExhYmVs
czsKICAgICB9CisgICAgbV9tb250aExhYmVscy5yZXNlcnZlQ2FwYWNpdHkoMTIpOwogICAgIGZv
ciAoYXV0byYgbmFtZSA6IFdURjo6bW9udGhGdWxsTmFtZSkKICAgICAgICAgbV9tb250aExhYmVs
cy51bmNoZWNrZWRBcHBlbmQobmFtZSk7CiAgICAgcmV0dXJuIG1fbW9udGhMYWJlbHM7CkBAIC0y
MDAsMTMgKzIwMCwxMiBAQCBjb25zdCBWZWN0b3I8U3RyaW5nPiYgTG9jYWxlQ29jb2E6OnNob3J0
TW9udGhMYWJlbHMoKQogewogICAgIGlmICghbV9zaG9ydE1vbnRoTGFiZWxzLmlzRW1wdHkoKSkK
ICAgICAgICAgcmV0dXJuIG1fc2hvcnRNb250aExhYmVsczsKLSAgICBtX3Nob3J0TW9udGhMYWJl
bHMucmVzZXJ2ZUNhcGFjaXR5KDEyKTsKICAgICBOU0FycmF5ICphcnJheSA9IFtzaG9ydERhdGVG
b3JtYXR0ZXIoKS5nZXQoKSBzaG9ydE1vbnRoU3ltYm9sc107CiAgICAgaWYgKFthcnJheSBjb3Vu
dF0gPT0gMTIpIHsKLSAgICAgICAgZm9yICh1bnNpZ25lZCBpID0gMDsgaSA8IDEyOyArK2kpCi0g
ICAgICAgICAgICBtX3Nob3J0TW9udGhMYWJlbHMudW5jaGVja2VkQXBwZW5kKFthcnJheSBvYmpl
Y3RBdEluZGV4OmldKTsKKyAgICAgICAgbV9zaG9ydE1vbnRoTGFiZWxzID0gbWFrZVZlY3RvcjxT
dHJpbmc+KGFycmF5KTsKICAgICAgICAgcmV0dXJuIG1fc2hvcnRNb250aExhYmVsczsKICAgICB9
CisgICAgbV9zaG9ydE1vbnRoTGFiZWxzLnJlc2VydmVDYXBhY2l0eSgxMik7CiAgICAgZm9yIChh
dXRvJiBuYW1lIDogV1RGOjptb250aE5hbWUpCiAgICAgICAgIG1fc2hvcnRNb250aExhYmVscy51
bmNoZWNrZWRBcHBlbmQobmFtZSk7CiAgICAgcmV0dXJuIG1fc2hvcnRNb250aExhYmVsczsKQEAg
LTIxOCw5ICsyMTcsNyBAQCBjb25zdCBWZWN0b3I8U3RyaW5nPiYgTG9jYWxlQ29jb2E6OnN0YW5k
QWxvbmVNb250aExhYmVscygpCiAgICAgICAgIHJldHVybiBtX3N0YW5kQWxvbmVNb250aExhYmVs
czsKICAgICBOU0FycmF5ICphcnJheSA9IFtzaG9ydERhdGVGb3JtYXR0ZXIoKS5nZXQoKSBzdGFu
ZGFsb25lTW9udGhTeW1ib2xzXTsKICAgICBpZiAoW2FycmF5IGNvdW50XSA9PSAxMikgewotICAg
ICAgICBtX3N0YW5kQWxvbmVNb250aExhYmVscy5yZXNlcnZlQ2FwYWNpdHkoMTIpOwotICAgICAg
ICBmb3IgKHVuc2lnbmVkIGkgPSAwOyBpIDwgMTI7ICsraSkKLSAgICAgICAgICAgIG1fc3RhbmRB
bG9uZU1vbnRoTGFiZWxzLnVuY2hlY2tlZEFwcGVuZChbYXJyYXkgb2JqZWN0QXRJbmRleDppXSk7
CisgICAgICAgIG1fc3RhbmRBbG9uZU1vbnRoTGFiZWxzID0gbWFrZVZlY3RvcjxTdHJpbmc+KGFy
cmF5KTsKICAgICAgICAgcmV0dXJuIG1fc3RhbmRBbG9uZU1vbnRoTGFiZWxzOwogICAgIH0KICAg
ICBtX3N0YW5kQWxvbmVNb250aExhYmVscyA9IHNob3J0TW9udGhMYWJlbHMoKTsKQEAgLTIzMSwx
MSArMjI4LDEwIEBAIGNvbnN0IFZlY3RvcjxTdHJpbmc+JiBMb2NhbGVDb2NvYTo6c2hvcnRTdGFu
ZEFsb25lTW9udGhMYWJlbHMoKQogewogICAgIGlmICghbV9zaG9ydFN0YW5kQWxvbmVNb250aExh
YmVscy5pc0VtcHR5KCkpCiAgICAgICAgIHJldHVybiBtX3Nob3J0U3RhbmRBbG9uZU1vbnRoTGFi
ZWxzOworCiAgICAgTlNBcnJheSAqYXJyYXkgPSBbc2hvcnREYXRlRm9ybWF0dGVyKCkuZ2V0KCkg
c2hvcnRTdGFuZGFsb25lTW9udGhTeW1ib2xzXTsKICAgICBpZiAoW2FycmF5IGNvdW50XSA9PSAx
MikgewotICAgICAgICBtX3Nob3J0U3RhbmRBbG9uZU1vbnRoTGFiZWxzLnJlc2VydmVDYXBhY2l0
eSgxMik7Ci0gICAgICAgIGZvciAodW5zaWduZWQgaSA9IDA7IGkgPCAxMjsgKytpKQotICAgICAg
ICAgICAgbV9zaG9ydFN0YW5kQWxvbmVNb250aExhYmVscy51bmNoZWNrZWRBcHBlbmQoW2FycmF5
IG9iamVjdEF0SW5kZXg6aV0pOworICAgICAgICBtX3Nob3J0U3RhbmRBbG9uZU1vbnRoTGFiZWxz
ID0gbWFrZVZlY3RvcjxTdHJpbmc+KGFycmF5KTsKICAgICAgICAgcmV0dXJuIG1fc2hvcnRTdGFu
ZEFsb25lTW9udGhMYWJlbHM7CiAgICAgfQogICAgIG1fc2hvcnRTdGFuZEFsb25lTW9udGhMYWJl
bHMgPSBzaG9ydE1vbnRoTGFiZWxzKCk7CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS90ZXN0
aW5nL01vY2tDRE1GYWN0b3J5LmNwcCBiL1NvdXJjZS9XZWJDb3JlL3Rlc3RpbmcvTW9ja0NETUZh
Y3RvcnkuY3BwCmluZGV4IGIyMTVlMGQwYTgxNGU1ZGE4NzJlYTA0MzczMjM5OTYxMmI4YTZhM2Iu
LjU2MDdkNDlmY2RlOWQ1Yjc0MTQ4NzJiZGI5MWZhZjY5NjRmNTY4OGUgMTAwNjQ0Ci0tLSBhL1Nv
dXJjZS9XZWJDb3JlL3Rlc3RpbmcvTW9ja0NETUZhY3RvcnkuY3BwCisrKyBiL1NvdXJjZS9XZWJD
b3JlL3Rlc3RpbmcvTW9ja0NETUZhY3RvcnkuY3BwCkBAIC0zNDQsNyArMzQ0LDcgQEAgdm9pZCBN
b2NrQ0RNSW5zdGFuY2VTZXNzaW9uOjp1cGRhdGVMaWNlbnNlKGNvbnN0IFN0cmluZyYgc2Vzc2lv
bklELCBMaWNlbnNlVHlwZSwKICAgICAgICAgY29uc3QgYXV0byoga2V5cyA9IGZhY3RvcnktPmtl
eXNGb3JTZXNzaW9uV2l0aElEKHNlc3Npb25JRCk7CiAgICAgICAgIGlmIChrZXlzKSB7CiAgICAg
ICAgICAgICBjaGFuZ2VkS2V5cyA9IGtleXMtPm1hcChbXShhdXRvJiBrZXkpIHsKLSAgICAgICAg
ICAgICAgICByZXR1cm4gc3RkOjptYWtlX3BhaXIoa2V5LmNvcHlSZWYoKSwgS2V5U3RhdHVzOjpV
c2FibGUpOworICAgICAgICAgICAgICAgIHJldHVybiBzdGQ6OnBhaXIgeyBrZXkuY29weVJlZigp
LCBLZXlTdGF0dXM6OlVzYWJsZSB9OwogICAgICAgICAgICAgfSk7CiAgICAgICAgIH0KICAgICB9
CkBAIC0zOTMsNyArMzkzLDcgQEAgdm9pZCBNb2NrQ0RNSW5zdGFuY2VTZXNzaW9uOjpyZW1vdmVT
ZXNzaW9uRGF0YShjb25zdCBTdHJpbmcmIGlkLCBMaWNlbnNlVHlwZSwgUmUKIAogICAgIGF1dG8g
a2V5cyA9IGZhY3RvcnktPnJlbW92ZUtleXNGcm9tU2Vzc2lvbldpdGhJRChpZCk7CiAgICAgYXV0
byBrZXlTdGF0dXNWZWN0b3IgPSBXVEY6Om1hcChXVEZNb3ZlKGtleXMpLCBbXShhdXRvJiYga2V5
KSB7Ci0gICAgICAgIHJldHVybiBzdGQ6Om1ha2VfcGFpcihXVEZNb3ZlKGtleSksIEtleVN0YXR1
czo6UmVsZWFzZWQpOworICAgICAgICByZXR1cm4gc3RkOjpwYWlyIHsgV1RGTW92ZShrZXkpLCBL
ZXlTdGF0dXM6OlJlbGVhc2VkIH07CiAgICAgfSk7CiAKICAgICBDU3RyaW5nIG1lc3NhZ2UgeyAi
cmVtb3ZlLW1lc3NhZ2UiIH07Cg==
</data>

          </attachment>
          <attachment
              isobsolete="0"
              ispatch="1"
              isprivate="0"
          >
            <attachid>452434</attachid>
            <date>2022-02-17 14:32:13 -0800</date>
            <delta_ts>2022-02-21 14:44:19 -0800</delta_ts>
            <desc>Follow-up</desc>
            <filename>bug-236748-20220217143212.patch</filename>
            <type>text/plain</type>
            <size>20873</size>
            <attacher name="Chris Dumez">cdumez</attacher>
            
              <data encoding="base64">U3VidmVyc2lvbiBSZXZpc2lvbjogMjkwMDcyCmRpZmYgLS1naXQgYS9Tb3VyY2UvSmF2YVNjcmlw
dENvcmUvQ2hhbmdlTG9nIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL0NoYW5nZUxvZwppbmRleCA0
MjZiOGYzMzU3OWIwMDA4OWM4N2Y3NTNmNzIyMjZiYTEzN2Y2Nzg3Li5lNDRmYjMzMDQ0NWYyZmIz
MThmZjVkNTc5YzEzYzFjZTJjZmQwZjRmIDEwMDY0NAotLS0gYS9Tb3VyY2UvSmF2YVNjcmlwdENv
cmUvQ2hhbmdlTG9nCisrKyBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9DaGFuZ2VMb2cKQEAgLTEs
MyArMSwxNiBAQAorMjAyMi0wMi0xNyAgQ2hyaXMgRHVtZXogIDxjZHVtZXpAYXBwbGUuY29tPgor
CisgICAgICAgIENsZWFuIHVwIC8gb3B0aW1pemUgY2FsbCBzaXRlcyBjb25zdHJ1Y3RpbmcgdmVj
dG9ycworICAgICAgICBodHRwczovL2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9MjM2
NzQ4CisgICAgICAgIDxyZGFyOi8vcHJvYmxlbS84OTA5MDcxMD4KKworICAgICAgICBSZXZpZXdl
ZCBieSBOT0JPRFkgKE9PUFMhKS4KKworICAgICAgICBGb2xsb3ctdXAgdG8gcjI5MDAyNiB0byBh
ZGRyZXNzIGZlZWRiYWNrIGZyb20gRGFyaW4uCisKKyAgICAgICAgKiBiMy9haXIvQWlyQ29kZS5j
cHA6CisgICAgICAgIChKU0M6OkIzOjpBaXI6OkNvZGU6OnNldE51bUVudHJ5cG9pbnRzKToKKwog
MjAyMi0wMi0xNyAgQ2hyaXMgRHVtZXogIDxjZHVtZXpAYXBwbGUuY29tPgogCiAgICAgICAgIENs
ZWFuIHVwIC8gb3B0aW1pemUgY2FsbCBzaXRlcyBjb25zdHJ1Y3RpbmcgdmVjdG9ycwpkaWZmIC0t
Z2l0IGEvU291cmNlL1dlYkNvcmUvQ2hhbmdlTG9nIGIvU291cmNlL1dlYkNvcmUvQ2hhbmdlTG9n
CmluZGV4IGI0Mzg0MTIxMGI0OGQwNTcxYWNmNzZkMDgwYWE4NDg3MmQ1Y2FhMjYuLjU2YzUwM2Zj
N2YyOTQ2YTBkMzgwMDRmZDExZTMwZDEzMmM4MmUzZTYgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJD
b3JlL0NoYW5nZUxvZworKysgYi9Tb3VyY2UvV2ViQ29yZS9DaGFuZ2VMb2cKQEAgLTEsMyArMSw0
OCBAQAorMjAyMi0wMi0xNyAgQ2hyaXMgRHVtZXogIDxjZHVtZXpAYXBwbGUuY29tPgorCisgICAg
ICAgIENsZWFuIHVwIC8gb3B0aW1pemUgY2FsbCBzaXRlcyBjb25zdHJ1Y3RpbmcgdmVjdG9ycwor
ICAgICAgICBodHRwczovL2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9MjM2NzQ4Cisg
ICAgICAgIDxyZGFyOi8vcHJvYmxlbS84OTA5MDcxMD4KKworICAgICAgICBSZXZpZXdlZCBieSBO
T0JPRFkgKE9PUFMhKS4KKworICAgICAgICBGb2xsb3ctdXAgdG8gcjI5MDAyNiB0byBhZGRyZXNz
IGZlZWRiYWNrIGZyb20gRGFyaW4uCisKKyAgICAgICAgKiBNb2R1bGVzL2VuY3J5cHRlZG1lZGlh
L01lZGlhS2V5U2Vzc2lvbi5jcHA6CisgICAgICAgIChXZWJDb3JlOjpNZWRpYUtleVNlc3Npb246
OnVwZGF0ZUtleVN0YXR1c2VzKToKKyAgICAgICAgKiBNb2R1bGVzL2luZGV4ZWRkYi9zZXJ2ZXIv
U1FMaXRlSURCQ3Vyc29yLmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OklEQlNlcnZlcjo6U1FMaXRl
SURCQ3Vyc29yOjpjdXJyZW50RGF0YSk6CisgICAgICAgICogYWNjZXNzaWJpbGl0eS9pc29sYXRl
ZHRyZWUvQVhJc29sYXRlZE9iamVjdC5jcHA6CisgICAgICAgIChXZWJDb3JlOjpBWElzb2xhdGVk
T2JqZWN0OjpzZXRNYXRoc2NyaXB0cyk6CisgICAgICAgICogYmluZGluZ3MvanMvU2VyaWFsaXpl
ZFNjcmlwdFZhbHVlLmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OkNsb25lRGVzZXJpYWxpemVyOjpy
ZWFkU3RyaW5nKToKKyAgICAgICAgKiBjc3MvU3R5bGVQcm9wZXJ0aWVzLmNwcDoKKyAgICAgICAg
KFdlYkNvcmU6OkRlZmVycmVkU3R5bGVQcm9wZXJ0aWVzOjpEZWZlcnJlZFN0eWxlUHJvcGVydGll
cyk6CisgICAgICAgICogY3NzL1N0eWxlUnVsZS5jcHA6CisgICAgICAgIChXZWJDb3JlOjpEZWZl
cnJlZFN0eWxlR3JvdXBSdWxlTGlzdDo6RGVmZXJyZWRTdHlsZUdyb3VwUnVsZUxpc3QpOgorICAg
ICAgICAqIGRvbS9FbGVtZW50RGF0YS5jcHA6CisgICAgICAgIChXZWJDb3JlOjpVbmlxdWVFbGVt
ZW50RGF0YTo6VW5pcXVlRWxlbWVudERhdGEpOgorICAgICAgICAqIGxvYWRlci9hcmNoaXZlL2Nm
L0xlZ2FjeVdlYkFyY2hpdmUuY3BwOgorICAgICAgICAoV2ViQ29yZTo6TGVnYWN5V2ViQXJjaGl2
ZTo6Y3JlYXRlRnJvbVNlbGVjdGlvbik6CisgICAgICAgICogcGFnZS9jc3AvQ29udGVudFNlY3Vy
aXR5UG9saWN5LmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OkNvbnRlbnRTZWN1cml0eVBvbGljeTo6
cmVzcG9uc2VIZWFkZXJzIGNvbnN0KToKKyAgICAgICAgKiBwbGF0Zm9ybS9lbmNyeXB0ZWRtZWRp
YS9DRE1Qcm94eS5jcHA6CisgICAgICAgIChXZWJDb3JlOjpLZXlTdG9yZTo6Y29udmVydFRvSlNL
ZXlTdGF0dXNWZWN0b3IgY29uc3QpOgorICAgICAgICAqIHBsYXRmb3JtL2dyYXBoaWNzL2F2Zm91
bmRhdGlvbi9vYmpjL0NETUluc3RhbmNlRmFpclBsYXlTdHJlYW1pbmdBVkZPYmpDLm1tOgorICAg
ICAgICAoV2ViQ29yZTo6Q0RNSW5zdGFuY2VTZXNzaW9uRmFpclBsYXlTdHJlYW1pbmdBVkZPYmpD
Ojp1cGRhdGVMaWNlbnNlKToKKyAgICAgICAgKiBwbGF0Zm9ybS90ZXh0L0xvY2FsZUlDVS5jcHA6
CisgICAgICAgIChXZWJDb3JlOjpjcmVhdGVGYWxsYmFja01vbnRoTGFiZWxzKToKKyAgICAgICAg
KiBwbGF0Zm9ybS90ZXh0L0xvY2FsZU5vbmUuY3BwOgorICAgICAgICAoV2ViQ29yZTo6TG9jYWxl
Tm9uZTo6c2hvcnRNb250aExhYmVscyk6CisgICAgICAgICogcGxhdGZvcm0vdGV4dC9jb2NvYS9M
b2NhbGVDb2NvYS5tbToKKyAgICAgICAgKFdlYkNvcmU6OkxvY2FsZUNvY29hOjptb250aExhYmVs
cyk6CisgICAgICAgIChXZWJDb3JlOjpMb2NhbGVDb2NvYTo6c2hvcnRNb250aExhYmVscyk6Cisg
ICAgICAgIChXZWJDb3JlOjpMb2NhbGVDb2NvYTo6c3RhbmRBbG9uZU1vbnRoTGFiZWxzKToKKyAg
ICAgICAgKFdlYkNvcmU6OkxvY2FsZUNvY29hOjpzaG9ydFN0YW5kQWxvbmVNb250aExhYmVscyk6
CisgICAgICAgICogdGVzdGluZy9Nb2NrQ0RNRmFjdG9yeS5jcHA6CisgICAgICAgIChXZWJDb3Jl
OjpNb2NrQ0RNSW5zdGFuY2VTZXNzaW9uOjp1cGRhdGVMaWNlbnNlKToKKyAgICAgICAgKFdlYkNv
cmU6Ok1vY2tDRE1JbnN0YW5jZVNlc3Npb246OnJlbW92ZVNlc3Npb25EYXRhKToKKwogMjAyMi0w
Mi0xNyAgQWxlamFuZHJvIEcuIENhc3RybyAgPGFsZXhAaWdhbGlhLmNvbT4KIAogICAgICAgICBb
R1RLXVtXUEVdIE1ha2UgcHJvcGVyIEFOR0xFIGNvbnRleHQgY29uZmlndXJhdGlvbiBmb3Igc29t
ZSBvZiB0aGUgZXhwZWN0ZWQgZmVhdHVyZXMKZGlmZiAtLWdpdCBhL1NvdXJjZS9KYXZhU2NyaXB0
Q29yZS9iMy9haXIvQWlyQ29kZS5jcHAgYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvYjMvYWlyL0Fp
ckNvZGUuY3BwCmluZGV4IGU2OTdiZDUzMDU4ZmRlMTE1MjNmZTViODM1OTQ4MzkyMWQ1NzMyOTMu
LmI1YmIwMzNkMDYzMWY5YTg0NzgxNTQ1NzY0YjFmNzM0OTYzMjY0YmUgMTAwNjQ0Ci0tLSBhL1Nv
dXJjZS9KYXZhU2NyaXB0Q29yZS9iMy9haXIvQWlyQ29kZS5jcHAKKysrIGIvU291cmNlL0phdmFT
Y3JpcHRDb3JlL2IzL2Fpci9BaXJDb2RlLmNwcApAQCAtMzMzLDcgKzMzMyw3IEBAIHVuc2lnbmVk
IENvZGU6OmpzSGFzaCgpIGNvbnN0CiAKIHZvaWQgQ29kZTo6c2V0TnVtRW50cnlwb2ludHModW5z
aWduZWQgbnVtRW50cnlQb2ludHMpCiB7Ci0gICAgbV9wcm9sb2d1ZUdlbmVyYXRvcnMgPSBWZWN0
b3IgeyBudW1FbnRyeVBvaW50cywgbV9kZWZhdWx0UHJvbG9ndWVHZW5lcmF0b3IuY29weVJlZigp
IH07CisgICAgbV9wcm9sb2d1ZUdlbmVyYXRvcnMgPSB7IG51bUVudHJ5UG9pbnRzLCBtX2RlZmF1
bHRQcm9sb2d1ZUdlbmVyYXRvci5jb3B5UmVmKCkgfTsKIH0KIAogfSB9IH0gLy8gbmFtZXNwYWNl
IEpTQzo6QjM6OkFpcgpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvTW9kdWxlcy9lbmNyeXB0
ZWRtZWRpYS9NZWRpYUtleVNlc3Npb24uY3BwIGIvU291cmNlL1dlYkNvcmUvTW9kdWxlcy9lbmNy
eXB0ZWRtZWRpYS9NZWRpYUtleVNlc3Npb24uY3BwCmluZGV4IDM4ZGZjYzFiOTc4NDYyMzIyZWM3
ZDdlYmU0ODNkNjZkODc2MDJlMzAuLmZiNGE3Zjg4NGY2Nzk1NWI2ZDc5ZDAyY2U1Y2RkNTg0OWQy
ZmM5NjUgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL01vZHVsZXMvZW5jcnlwdGVkbWVkaWEv
TWVkaWFLZXlTZXNzaW9uLmNwcAorKysgYi9Tb3VyY2UvV2ViQ29yZS9Nb2R1bGVzL2VuY3J5cHRl
ZG1lZGlhL01lZGlhS2V5U2Vzc2lvbi5jcHAKQEAgLTcwMSw3ICs3MDEsNyBAQCB2b2lkIE1lZGlh
S2V5U2Vzc2lvbjo6dXBkYXRlS2V5U3RhdHVzZXMoQ0RNSW5zdGFuY2VTZXNzaW9uOjpLZXlTdGF0
dXNWZWN0b3ImJiBpbgogICAgIH07CiAKICAgICBtX3N0YXR1c2VzID0gV1RGOjptYXAoV1RGTW92
ZShpbnB1dFN0YXR1c2VzKSwgW10oYXV0byYmIHN0YXR1cykgewotICAgICAgICByZXR1cm4gc3Rk
OjptYWtlX3BhaXIoV1RGTW92ZShzdGF0dXMuZmlyc3QpLCB0b01lZGlhS2V5U3RhdHVzKHN0YXR1
cy5zZWNvbmQpKTsKKyAgICAgICAgcmV0dXJuIHN0ZDo6cGFpciB7IFdURk1vdmUoc3RhdHVzLmZp
cnN0KSwgdG9NZWRpYUtleVN0YXR1cyhzdGF0dXMuc2Vjb25kKSB9OwogICAgIH0pOwogCiAgICAg
Ly8gNS4gUXVldWUgYSB0YXNrIHRvIGZpcmUgYSBzaW1wbGUgZXZlbnQgbmFtZWQga2V5c3RhdHVz
ZXNjaGFuZ2UgYXQgdGhlIHNlc3Npb24uCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9Nb2R1
bGVzL2luZGV4ZWRkYi9zZXJ2ZXIvU1FMaXRlSURCQ3Vyc29yLmNwcCBiL1NvdXJjZS9XZWJDb3Jl
L01vZHVsZXMvaW5kZXhlZGRiL3NlcnZlci9TUUxpdGVJREJDdXJzb3IuY3BwCmluZGV4IDY2N2Y1
ZTc5NTdiNGI2NTc2YjgyM2E2NWMwNDg5YWFjZDQ3ODkzOGQuLjQyZDBiN2MwOTYzMDU1NGRhZGY3
ZTYyNGE5Y2VlZWQxMjQ0NGQwNDMgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL01vZHVsZXMv
aW5kZXhlZGRiL3NlcnZlci9TUUxpdGVJREJDdXJzb3IuY3BwCisrKyBiL1NvdXJjZS9XZWJDb3Jl
L01vZHVsZXMvaW5kZXhlZGRiL3NlcnZlci9TUUxpdGVJREJDdXJzb3IuY3BwCkBAIC0xMTYsNyAr
MTE2LDcgQEAgdm9pZCBTUUxpdGVJREJDdXJzb3I6OmN1cnJlbnREYXRhKElEQkdldFJlc3VsdCYg
cmVzdWx0LCBjb25zdCBzdGQ6Om9wdGlvbmFsPElEQksKICAgICB9CiAKICAgICBWZWN0b3I8SURC
Q3Vyc29yUmVjb3JkPiBwcmVmZXRjaGVkUmVjb3JkczsKLSAgICBwcmVmZXRjaGVkUmVjb3Jkcy5y
ZXNlcnZlSW5pdGlhbENhcGFjaXR5KG1fZmV0Y2hlZFJlY29yZHMuc2l6ZSgpKTsKKyAgICBwcmVm
ZXRjaGVkUmVjb3Jkcy5yZXNlcnZlSW5pdGlhbENhcGFjaXR5KG1fZmV0Y2hlZFJlY29yZHMuc2l6
ZSgpIC0gMSk7CiAgICAgYm9vbCBpc0ZpcnN0ID0gdHJ1ZTsKICAgICBmb3IgKGF1dG8mIHJlY29y
ZCA6IG1fZmV0Y2hlZFJlY29yZHMpIHsKICAgICAgICAgaWYgKHJlY29yZC5pc1Rlcm1pbmFsUmVj
b3JkKCkpCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9hY2Nlc3NpYmlsaXR5L2lzb2xhdGVk
dHJlZS9BWElzb2xhdGVkT2JqZWN0LmNwcCBiL1NvdXJjZS9XZWJDb3JlL2FjY2Vzc2liaWxpdHkv
aXNvbGF0ZWR0cmVlL0FYSXNvbGF0ZWRPYmplY3QuY3BwCmluZGV4IDMzZWExMGEzMWVmOTNkYWJi
ODk1ZDU0MjU0MWNhZDg1NGY2ODZlMDIuLmJkZjgyNWQyZDFjMGM0YWQ5NmYwODVmY2M2YWUwZjMx
MDIzOTAwZDEgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL2FjY2Vzc2liaWxpdHkvaXNvbGF0
ZWR0cmVlL0FYSXNvbGF0ZWRPYmplY3QuY3BwCisrKyBiL1NvdXJjZS9XZWJDb3JlL2FjY2Vzc2li
aWxpdHkvaXNvbGF0ZWR0cmVlL0FYSXNvbGF0ZWRPYmplY3QuY3BwCkBAIC00NDUsNyArNDQ1LDcg
QEAgdm9pZCBBWElzb2xhdGVkT2JqZWN0OjpzZXRNYXRoc2NyaXB0cyhBWFByb3BlcnR5TmFtZSBw
cm9wZXJ0eU5hbWUsIEFYQ29yZU9iamVjdCYKICAgICAgICAgcmV0dXJuOwogCiAgICAgYXV0byBp
ZFBhaXJzID0gcGFpcnMubWFwKFtdKGF1dG8mIG1hdGhQYWlyKSB7Ci0gICAgICAgIHJldHVybiBz
dGQ6Om1ha2VfcGFpcihtYXRoUGFpci5maXJzdCA/IG1hdGhQYWlyLmZpcnN0LT5vYmplY3RJRCgp
IDogQVhJRCgpLCBtYXRoUGFpci5zZWNvbmQgPyBtYXRoUGFpci5zZWNvbmQtPm9iamVjdElEKCkg
OiBBWElEKCkpOworICAgICAgICByZXR1cm4gc3RkOjpwYWlyIHsgbWF0aFBhaXIuZmlyc3QgPyBt
YXRoUGFpci5maXJzdC0+b2JqZWN0SUQoKSA6IEFYSUQoKSwgbWF0aFBhaXIuc2Vjb25kID8gbWF0
aFBhaXIuc2Vjb25kLT5vYmplY3RJRCgpIDogQVhJRCgpIH07CiAgICAgfSk7CiAgICAgc2V0UHJv
cGVydHkocHJvcGVydHlOYW1lLCBXVEZNb3ZlKGlkUGFpcnMpKTsKIH0KZGlmZiAtLWdpdCBhL1Nv
dXJjZS9XZWJDb3JlL2JpbmRpbmdzL2pzL1NlcmlhbGl6ZWRTY3JpcHRWYWx1ZS5jcHAgYi9Tb3Vy
Y2UvV2ViQ29yZS9iaW5kaW5ncy9qcy9TZXJpYWxpemVkU2NyaXB0VmFsdWUuY3BwCmluZGV4IGQx
NGU3OTAyODhmZGMzMmIzOTMzNTlhYmVhNTY4NzdkNDc1NmViODIuLjVjZGVkYTNlNzZjMWMwOGEy
ZTQyMzJkZGMyMGZmMGUzODNhYzNmNmIgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL2JpbmRp
bmdzL2pzL1NlcmlhbGl6ZWRTY3JpcHRWYWx1ZS5jcHAKKysrIGIvU291cmNlL1dlYkNvcmUvYmlu
ZGluZ3MvanMvU2VyaWFsaXplZFNjcmlwdFZhbHVlLmNwcApAQCAtMjQ1NSwxNCArMjQ1NSwxMyBA
QCBwcml2YXRlOgogICAgICAgICBzdHIgPSBTdHJpbmcocmVpbnRlcnByZXRfY2FzdDxjb25zdCBV
Q2hhcio+KHB0ciksIGxlbmd0aCk7CiAgICAgICAgIHB0ciArPSBsZW5ndGggKiBzaXplb2YoVUNo
YXIpOwogI2Vsc2UKLSAgICAgICAgVmVjdG9yPFVDaGFyPiBidWZmZXI7Ci0gICAgICAgIGJ1ZmZl
ci5yZXNlcnZlSW5pdGlhbENhcGFjaXR5KGxlbmd0aCk7Ci0gICAgICAgIGZvciAodW5zaWduZWQg
aSA9IDA7IGkgPCBsZW5ndGg7IGkrKykgewotICAgICAgICAgICAgdWludDE2X3QgY2g7Ci0gICAg
ICAgICAgICByZWFkTGl0dGxlRW5kaWFuKHB0ciwgZW5kLCBjaCk7Ci0gICAgICAgICAgICBidWZm
ZXIudW5jaGVja2VkQXBwZW5kKGNoKTsKLSAgICAgICAgfQotICAgICAgICBzdHIgPSBTdHJpbmc6
OmFkb3B0KFdURk1vdmUoYnVmZmVyKSk7CisgICAgICAgIFVDaGFyKiBjaGFyYWN0ZXJzOworICAg
ICAgICBzdHIgPSBTdHJpbmc6OmNyZWF0ZVVuaW5pdGlhbGl6ZWQobGVuZ3RoLCBjaGFyYWN0ZXJz
KTsKKyAgICAgICAgZm9yICh1bnNpZ25lZCBpID0gMDsgaSA8IGxlbmd0aDsgKytpKSB7CisgICAg
ICAgICAgICB1aW50MTZfdCBjOworICAgICAgICAgICAgcmVhZExpdHRsZUVuZGlhbihwdHIsIGVu
ZCwgYyk7CisgICAgICAgICAgICBjaGFyYWN0ZXJzW2ldID0gYzsKKyAgICAgICAgfQogI2VuZGlm
CiAgICAgICAgIHJldHVybiB0cnVlOwogICAgIH0KZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3Jl
L2Nzcy9TdHlsZVByb3BlcnRpZXMuY3BwIGIvU291cmNlL1dlYkNvcmUvY3NzL1N0eWxlUHJvcGVy
dGllcy5jcHAKaW5kZXggYWUzOGI4ZTA4NWEyNGFhYWUwNGU3Y2I1ZGYyNDNmODcxMTVjYjBmNy4u
ZjJlNWE5YjRhNDlkNDAxZjRhZDM4NjFlNGRjNWI0ZGRiYzM5ZmU0YyAxMDA2NDQKLS0tIGEvU291
cmNlL1dlYkNvcmUvY3NzL1N0eWxlUHJvcGVydGllcy5jcHAKKysrIGIvU291cmNlL1dlYkNvcmUv
Y3NzL1N0eWxlUHJvcGVydGllcy5jcHAKQEAgLTE4MDMsMTAgKzE4MDMsOSBAQCBSZWY8RGVmZXJy
ZWRTdHlsZVByb3BlcnRpZXM+IERlZmVycmVkU3R5bGVQcm9wZXJ0aWVzOjpjcmVhdGUoY29uc3Qg
Q1NTUGFyc2VyVG9rZQogCiBEZWZlcnJlZFN0eWxlUHJvcGVydGllczo6RGVmZXJyZWRTdHlsZVBy
b3BlcnRpZXMoY29uc3QgQ1NTUGFyc2VyVG9rZW5SYW5nZSYgcmFuZ2UsIENTU0RlZmVycmVkUGFy
c2VyJiBwYXJzZXIpCiAgICAgOiBTdHlsZVByb3BlcnRpZXNCYXNlKHBhcnNlci5tb2RlKCksIERl
ZmVycmVkUHJvcGVydGllc1R5cGUpCisgICAgLCBtX3Rva2VucyhyYW5nZS5iZWdpbigpLCByYW5n
ZS5lbmQoKSAtIHJhbmdlLmJlZ2luKCkpCiAgICAgLCBtX3BhcnNlcihwYXJzZXIpCiB7Ci0gICAg
c2l6ZV90IGxlbmd0aCA9IHJhbmdlLmVuZCgpIC0gcmFuZ2UuYmVnaW4oKTsKLSAgICBtX3Rva2Vu
cy5hcHBlbmQocmFuZ2UuYmVnaW4oKSwgbGVuZ3RoKTsKIH0KICAgICAKIERlZmVycmVkU3R5bGVQ
cm9wZXJ0aWVzOjp+RGVmZXJyZWRTdHlsZVByb3BlcnRpZXMoKSA9IGRlZmF1bHQ7CmRpZmYgLS1n
aXQgYS9Tb3VyY2UvV2ViQ29yZS9jc3MvU3R5bGVSdWxlLmNwcCBiL1NvdXJjZS9XZWJDb3JlL2Nz
cy9TdHlsZVJ1bGUuY3BwCmluZGV4IDFkOWVlN2QwMDU0Mzg3NTU0OGFkMzJlYzU3NGE4YjAwZGJl
OTU5YjcuLjZmMTA3MGQxMTA0YzRmM2U0NTY2NGU3OTk3Nzc3YzY1NDI4YWU3MDQgMTAwNjQ0Ci0t
LSBhL1NvdXJjZS9XZWJDb3JlL2Nzcy9TdHlsZVJ1bGUuY3BwCisrKyBiL1NvdXJjZS9XZWJDb3Jl
L2Nzcy9TdHlsZVJ1bGUuY3BwCkBAIC0zNjYsMTAgKzM2Niw5IEBAIFN0eWxlUnVsZUZvbnRQYWxl
dHRlVmFsdWVzOjpTdHlsZVJ1bGVGb250UGFsZXR0ZVZhbHVlcyhjb25zdCBTdHlsZVJ1bGVGb250
UGFsZXR0CiBTdHlsZVJ1bGVGb250UGFsZXR0ZVZhbHVlczo6flN0eWxlUnVsZUZvbnRQYWxldHRl
VmFsdWVzKCkgPSBkZWZhdWx0OwogCiBEZWZlcnJlZFN0eWxlR3JvdXBSdWxlTGlzdDo6RGVmZXJy
ZWRTdHlsZUdyb3VwUnVsZUxpc3QoY29uc3QgQ1NTUGFyc2VyVG9rZW5SYW5nZSYgcmFuZ2UsIENT
U0RlZmVycmVkUGFyc2VyJiBwYXJzZXIpCi0gICAgOiBtX3BhcnNlcihwYXJzZXIpCisgICAgOiBt
X3Rva2VucyhyYW5nZS5iZWdpbigpLCByYW5nZS5lbmQoKSAtIHJhbmdlLmJlZ2luKCkpCisgICAg
LCBtX3BhcnNlcihwYXJzZXIpCiB7Ci0gICAgc2l6ZV90IGxlbmd0aCA9IHJhbmdlLmVuZCgpIC0g
cmFuZ2UuYmVnaW4oKTsKLSAgICBtX3Rva2Vucy5hcHBlbmQocmFuZ2UuYmVnaW4oKSwgbGVuZ3Ro
KTsKIH0KIAogRGVmZXJyZWRTdHlsZUdyb3VwUnVsZUxpc3Q6On5EZWZlcnJlZFN0eWxlR3JvdXBS
dWxlTGlzdCgpID0gZGVmYXVsdDsKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL2Nzcy9jYWxj
L0NTU0NhbGNWYWx1ZS5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9jc3MvY2FsYy9DU1NDYWxjVmFsdWUu
Y3BwCmluZGV4IDQzNTgyYjRkMTEzMDI5NTczZjNiYWYwMTYyYTNjZGY2M2M2NzlmNDcuLjgwM2Vk
MjYxMWE3N2NhOWQ2OWZlMzBhZmM0NzFlMjI5OTk2YzYzZDYgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9X
ZWJDb3JlL2Nzcy9jYWxjL0NTU0NhbGNWYWx1ZS5jcHAKKysrIGIvU291cmNlL1dlYkNvcmUvY3Nz
L2NhbGMvQ1NTQ2FsY1ZhbHVlLmNwcApAQCAtNjYsMTQgKzY2LDExIEBAIHN0YXRpYyBpbmxpbmUg
UmVmUHRyPENTU0NhbGNPcGVyYXRpb25Ob2RlPiBjcmVhdGVCbGVuZEhhbGYoY29uc3QgTGVuZ3Ro
JiBsZW5ndGgsCiAKIHN0YXRpYyBWZWN0b3I8UmVmPENTU0NhbGNFeHByZXNzaW9uTm9kZT4+IGNy
ZWF0ZUNTUyhjb25zdCBWZWN0b3I8c3RkOjp1bmlxdWVfcHRyPENhbGNFeHByZXNzaW9uTm9kZT4+
JiBub2RlcywgY29uc3QgUmVuZGVyU3R5bGUmIHN0eWxlKQogewotICAgIFZlY3RvcjxSZWY8Q1NT
Q2FsY0V4cHJlc3Npb25Ob2RlPj4gdmFsdWVzOwotICAgIHZhbHVlcy5yZXNlcnZlSW5pdGlhbENh
cGFjaXR5KG5vZGVzLnNpemUoKSk7Ci0gICAgZm9yIChhdXRvJiBub2RlIDogbm9kZXMpIHsKKyAg
ICByZXR1cm4gV1RGOjpjb21wYWN0TWFwKG5vZGVzLCBbJl0oYXV0byYgbm9kZSkgLT4gUmVmUHRy
PENTU0NhbGNFeHByZXNzaW9uTm9kZT4gewogICAgICAgICBpZiAoYXV0byBjc3NOb2RlID0gY3Jl
YXRlQ1NTKCpub2RlLCBzdHlsZSkpCi0gICAgICAgICAgICB2YWx1ZXMudW5jaGVja2VkQXBwZW5k
KGNzc05vZGUucmVsZWFzZU5vbk51bGwoKSk7Ci0gICAgfQotICAgIHZhbHVlcy5zaHJpbmtUb0Zp
dCgpOwotICAgIHJldHVybiB2YWx1ZXM7CisgICAgICAgICAgICByZXR1cm4gY3NzTm9kZS5yZWxl
YXNlTm9uTnVsbCgpOworICAgICAgICByZXR1cm4gbnVsbHB0cjsKKyAgICB9KTsKIH0KIAogc3Rh
dGljIFJlZlB0cjxDU1NDYWxjRXhwcmVzc2lvbk5vZGU+IGNyZWF0ZUNTUyhjb25zdCBDYWxjRXhw
cmVzc2lvbk5vZGUmIG5vZGUsIGNvbnN0IFJlbmRlclN0eWxlJiBzdHlsZSkKZGlmZiAtLWdpdCBh
L1NvdXJjZS9XZWJDb3JlL2RvbS9FbGVtZW50RGF0YS5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9kb20v
RWxlbWVudERhdGEuY3BwCmluZGV4IDA3MWRiMGIzNGNhNmU1NmVmMTI2ZWJlZWQ1MThmNjBkNzQw
YjRiOTkuLjc3NjMyMmYwM2I1YjQ4MGM0Yjg0NDc5NzgwNmY4ODFlNzNkODczMzUgMTAwNjQ0Ci0t
LSBhL1NvdXJjZS9XZWJDb3JlL2RvbS9FbGVtZW50RGF0YS5jcHAKKysrIGIvU291cmNlL1dlYkNv
cmUvZG9tL0VsZW1lbnREYXRhLmNwcApAQCAtMTQwLDEyICsxNDAsMTEgQEAgVW5pcXVlRWxlbWVu
dERhdGE6OlVuaXF1ZUVsZW1lbnREYXRhKGNvbnN0IFVuaXF1ZUVsZW1lbnREYXRhJiBvdGhlcikK
IAogVW5pcXVlRWxlbWVudERhdGE6OlVuaXF1ZUVsZW1lbnREYXRhKGNvbnN0IFNoYXJlYWJsZUVs
ZW1lbnREYXRhJiBvdGhlcikKICAgICA6IEVsZW1lbnREYXRhKG90aGVyLCB0cnVlKQorICAgICwg
bV9hdHRyaWJ1dGVWZWN0b3Iob3RoZXIubV9hdHRyaWJ1dGVBcnJheSwgb3RoZXIubGVuZ3RoKCkp
CiB7CiAgICAgLy8gQW4gU2hhcmVhYmxlRWxlbWVudERhdGEgc2hvdWxkIG5ldmVyIGhhdmUgYSBt
dXRhYmxlIGlubGluZSBTdHlsZVByb3BlcnRpZXMgYXR0YWNoZWQuCiAgICAgQVNTRVJUKCFvdGhl
ci5tX2lubGluZVN0eWxlIHx8ICFvdGhlci5tX2lubGluZVN0eWxlLT5pc011dGFibGUoKSk7CiAg
ICAgbV9pbmxpbmVTdHlsZSA9IG90aGVyLm1faW5saW5lU3R5bGU7Ci0KLSAgICBtX2F0dHJpYnV0
ZVZlY3Rvci5hcHBlbmQob3RoZXIubV9hdHRyaWJ1dGVBcnJheSwgb3RoZXIubGVuZ3RoKCkpOwog
fQogCiBSZWY8VW5pcXVlRWxlbWVudERhdGE+IEVsZW1lbnREYXRhOjptYWtlVW5pcXVlQ29weSgp
IGNvbnN0CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9sb2FkZXIvYXJjaGl2ZS9jZi9MZWdh
Y3lXZWJBcmNoaXZlLmNwcCBiL1NvdXJjZS9XZWJDb3JlL2xvYWRlci9hcmNoaXZlL2NmL0xlZ2Fj
eVdlYkFyY2hpdmUuY3BwCmluZGV4IGNkOTQxY2YwNTE4MGRmOGMzNzJlOTkzZGFjM2IxOTFlYjVm
MzgxYjIuLmRlZDc2ZmI4YTkxODY5YjE2YzM4NDcxNGUwNTIzN2IyMzNlMzlkZWIgMTAwNjQ0Ci0t
LSBhL1NvdXJjZS9XZWJDb3JlL2xvYWRlci9hcmNoaXZlL2NmL0xlZ2FjeVdlYkFyY2hpdmUuY3Bw
CisrKyBiL1NvdXJjZS9XZWJDb3JlL2xvYWRlci9hcmNoaXZlL2NmL0xlZ2FjeVdlYkFyY2hpdmUu
Y3BwCkBAIC02MTAsNyArNjEwLDcgQEAgUmVmUHRyPExlZ2FjeVdlYkFyY2hpdmU+IExlZ2FjeVdl
YkFyY2hpdmU6OmNyZWF0ZUZyb21TZWxlY3Rpb24oRnJhbWUqIGZyYW1lKQogICAgIFN0cmluZyBp
ZnJhbWVNYXJrdXAgPSAiPGlmcmFtZSBmcmFtZWJvcmRlcj1cIm5vXCIgbWFyZ2lud2lkdGg9XCIw
XCIgbWFyZ2luaGVpZ2h0PVwiMFwiIHdpZHRoPVwiOTglJVwiIGhlaWdodD1cIjk4JSVcIiBzcmM9
XCIiICsgZnJhbWUtPmxvYWRlcigpLmRvY3VtZW50TG9hZGVyKCktPnJlc3BvbnNlKCkudXJsKCku
c3RyaW5nKCkgKyAiXCI+PC9pZnJhbWU+IjsKICAgICBhdXRvIGlmcmFtZVJlc291cmNlID0gQXJj
aGl2ZVJlc291cmNlOjpjcmVhdGUodXRmOEJ1ZmZlcihpZnJhbWVNYXJrdXApLCBhYm91dEJsYW5r
VVJMKCksICJ0ZXh0L2h0bWwiLCAiVVRGLTgiLCBTdHJpbmcoKSk7CiAKLSAgICByZXR1cm4gY3Jl
YXRlKGlmcmFtZVJlc291cmNlLnJlbGVhc2VOb25OdWxsKCksIHsgfSwgVmVjdG9yIHsgYXJjaGl2
ZS5yZWxlYXNlTm9uTnVsbCgpIH0pOworICAgIHJldHVybiBjcmVhdGUoaWZyYW1lUmVzb3VyY2Uu
cmVsZWFzZU5vbk51bGwoKSwgeyB9LCB7IGFyY2hpdmUucmVsZWFzZU5vbk51bGwoKSB9KTsKIH0K
IAogfQpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvcGFnZS9jc3AvQ29udGVudFNlY3VyaXR5
UG9saWN5LmNwcCBiL1NvdXJjZS9XZWJDb3JlL3BhZ2UvY3NwL0NvbnRlbnRTZWN1cml0eVBvbGlj
eS5jcHAKaW5kZXggZWE2ZDBkZWFjODk0Mzg4MmVmYThmZjM4YzAyNTk2YTMxNDVjZmQ5Ny4uNWIw
MmI0ZDQyYWZjNmY4NjEzZmNjNDY0MDBjYjhkYzdmZjIwOGIzYyAxMDA2NDQKLS0tIGEvU291cmNl
L1dlYkNvcmUvcGFnZS9jc3AvQ29udGVudFNlY3VyaXR5UG9saWN5LmNwcAorKysgYi9Tb3VyY2Uv
V2ViQ29yZS9wYWdlL2NzcC9Db250ZW50U2VjdXJpdHlQb2xpY3kuY3BwCkBAIC0xNjIsNyArMTYy
LDcgQEAgQ29udGVudFNlY3VyaXR5UG9saWN5UmVzcG9uc2VIZWFkZXJzIENvbnRlbnRTZWN1cml0
eVBvbGljeTo6cmVzcG9uc2VIZWFkZXJzKCkgY28KICAgICBpZiAoIW1fY2FjaGVkUmVzcG9uc2VI
ZWFkZXJzKSB7CiAgICAgICAgIENvbnRlbnRTZWN1cml0eVBvbGljeVJlc3BvbnNlSGVhZGVycyBy
ZXN1bHQ7CiAgICAgICAgIHJlc3VsdC5tX2hlYWRlcnMgPSBtX3BvbGljaWVzLm1hcChbXShhdXRv
JiBwb2xpY3kpIHsKLSAgICAgICAgICAgIHJldHVybiBzdGQ6Om1ha2VfcGFpcihwb2xpY3ktPmhl
YWRlcigpLCBwb2xpY3ktPmhlYWRlclR5cGUoKSk7CisgICAgICAgICAgICByZXR1cm4gc3RkOjpw
YWlyIHsgcG9saWN5LT5oZWFkZXIoKSwgcG9saWN5LT5oZWFkZXJUeXBlKCkgfTsKICAgICAgICAg
fSk7CiAgICAgICAgIHJlc3VsdC5tX2h0dHBTdGF0dXNDb2RlID0gbV9odHRwU3RhdHVzQ29kZTsK
ICAgICAgICAgbV9jYWNoZWRSZXNwb25zZUhlYWRlcnMgPSBXVEZNb3ZlKHJlc3VsdCk7CmRpZmYg
LS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9lbmNyeXB0ZWRtZWRpYS9DRE1Qcm94eS5j
cHAgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9lbmNyeXB0ZWRtZWRpYS9DRE1Qcm94eS5jcHAK
aW5kZXggNjc4ZjQxYTdhZTI0MDc1NGNkY2VjNjJmNWMyYzU2NmVjZWQ1ZTBlZi4uMmRkNzgwMjg0
YTI2Yzk0NjQ4ZDlmMTFmMzBmMjJjZDkyNzkxMWIzYiAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNv
cmUvcGxhdGZvcm0vZW5jcnlwdGVkbWVkaWEvQ0RNUHJveHkuY3BwCisrKyBiL1NvdXJjZS9XZWJD
b3JlL3BsYXRmb3JtL2VuY3J5cHRlZG1lZGlhL0NETVByb3h5LmNwcApAQCAtMjI2LDcgKzIyNiw3
IEBAIGNvbnN0IFJlZlB0cjxLZXlIYW5kbGU+JiBLZXlTdG9yZTo6a2V5SGFuZGxlKGNvbnN0IEtl
eUlEVHlwZSYga2V5SUQpIGNvbnN0CiBDRE1JbnN0YW5jZVNlc3Npb246OktleVN0YXR1c1ZlY3Rv
ciBLZXlTdG9yZTo6Y29udmVydFRvSlNLZXlTdGF0dXNWZWN0b3IoKSBjb25zdAogewogICAgIHJl
dHVybiBtX2tleXMubWFwKFtdKGF1dG8mIGtleSkgewotICAgICAgICByZXR1cm4gc3RkOjptYWtl
X3BhaXIoa2V5LT5pZEFzU2hhcmVkQnVmZmVyKCksIGtleS0+c3RhdHVzKCkpOworICAgICAgICBy
ZXR1cm4gc3RkOjpwYWlyIHsga2V5LT5pZEFzU2hhcmVkQnVmZmVyKCksIGtleS0+c3RhdHVzKCkg
fTsKICAgICB9KTsKIH0KIApkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3Jh
cGhpY3MvYXZmb3VuZGF0aW9uL29iamMvQ0RNSW5zdGFuY2VGYWlyUGxheVN0cmVhbWluZ0FWRk9i
akMubW0gYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9hdmZvdW5kYXRpb24vb2Jq
Yy9DRE1JbnN0YW5jZUZhaXJQbGF5U3RyZWFtaW5nQVZGT2JqQy5tbQppbmRleCA1ODAyNTFlMTEw
MmRjYzMyY2EzYWQ5OTM0MzgzOGE3YTI5OTFmYzIwLi4wZWNmZGNjMTVkNTg5M2JjZWI2ZDM2Zjk2
MWUyNmRhYjc3MTQ3Njc0IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFw
aGljcy9hdmZvdW5kYXRpb24vb2JqYy9DRE1JbnN0YW5jZUZhaXJQbGF5U3RyZWFtaW5nQVZGT2Jq
Qy5tbQorKysgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9hdmZvdW5kYXRpb24v
b2JqYy9DRE1JbnN0YW5jZUZhaXJQbGF5U3RyZWFtaW5nQVZGT2JqQy5tbQpAQCAtOTM3LDcgKzkz
Nyw3IEBAIHZvaWQgQ0RNSW5zdGFuY2VTZXNzaW9uRmFpclBsYXlTdHJlYW1pbmdBVkZPYmpDOjp1
cGRhdGVMaWNlbnNlKGNvbnN0IFN0cmluZyYsIExpCiAgICAgLy8gRklYTUUocmRhcjovL3Byb2Js
ZW0vMzU1OTIyNzcpOiBzdGFzaCB0aGUgY2FsbGJhY2sgYW5kIGNhbGwgaXQgb25jZSBBVkNvbnRl
bnRLZXlSZXNwb25zZSBzdXBwb3J0cyBhIHN1Y2Nlc3MgY2FsbGJhY2suCiAgICAgc3RydWN0IG9i
amNfbWV0aG9kX2Rlc2NyaXB0aW9uIG1ldGhvZCA9IHByb3RvY29sX2dldE1ldGhvZERlc2NyaXB0
aW9uKEBwcm90b2NvbChBVkNvbnRlbnRLZXlTZXNzaW9uRGVsZWdhdGUpLCBAc2VsZWN0b3IoY29u
dGVudEtleVNlc3Npb246Y29udGVudEtleVJlcXVlc3REaWRTdWNjZWVkOiksIE5PLCBZRVMpOwog
ICAgIGlmICghbWV0aG9kLm5hbWUpIHsKLSAgICAgICAgS2V5U3RhdHVzVmVjdG9yIGtleVN0YXR1
c2VzIHsgc3RkOjptYWtlX3BhaXIoV1RGTW92ZShrZXlJRHMuZmlyc3QoKSksIEtleVN0YXR1czo6
VXNhYmxlKSB9OworICAgICAgICBLZXlTdGF0dXNWZWN0b3Iga2V5U3RhdHVzZXMgeyBzdGQ6OnBh
aXIgeyBXVEZNb3ZlKGtleUlEcy5maXJzdCgpKSwgS2V5U3RhdHVzOjpVc2FibGUgfSB9OwogICAg
ICAgICBjYWxsYmFjayhmYWxzZSwgc3RkOjptYWtlX29wdGlvbmFsKFdURk1vdmUoa2V5U3RhdHVz
ZXMpKSwgc3RkOjpudWxsb3B0LCBzdGQ6Om51bGxvcHQsIFN1Y2NlZWRlZCk7CiAgICAgICAgIHJl
dHVybjsKICAgICB9CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS90ZXh0L0xv
Y2FsZUlDVS5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS90ZXh0L0xvY2FsZUlDVS5jcHAK
aW5kZXggNzU5Yjc4NThkY2UwZGJkYTM5ZGY0M2YyNDI2OTI4NjQxYzc2Njc3OS4uZjBkNDFkNTNl
YTQwY2RmNDcwZTUwZTRhZjUxZDU5M2U0MmQ2NmFiNSAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNv
cmUvcGxhdGZvcm0vdGV4dC9Mb2NhbGVJQ1UuY3BwCisrKyBiL1NvdXJjZS9XZWJDb3JlL3BsYXRm
b3JtL3RleHQvTG9jYWxlSUNVLmNwcApAQCAtMTg4LDkgKzE4OCw5IEBAIHN0ZDo6dW5pcXVlX3B0
cjxWZWN0b3I8U3RyaW5nPj4gTG9jYWxlSUNVOjpjcmVhdGVMYWJlbFZlY3Rvcihjb25zdCBVRGF0
ZUZvcm1hdCoKIHN0YXRpYyBzdGQ6OnVuaXF1ZV9wdHI8VmVjdG9yPFN0cmluZz4+IGNyZWF0ZUZh
bGxiYWNrTW9udGhMYWJlbHMoKQogewogICAgIGF1dG8gbGFiZWxzID0gbWFrZVVuaXF1ZTxWZWN0
b3I8U3RyaW5nPj4oKTsKLSAgICBsYWJlbHMtPnJlc2VydmVJbml0aWFsQ2FwYWNpdHkoV1RGX0FS
UkFZX0xFTkdUSChXVEY6Om1vbnRoRnVsbE5hbWUpKTsKLSAgICBmb3IgKHVuc2lnbmVkIGkgPSAw
OyBpIDwgV1RGX0FSUkFZX0xFTkdUSChXVEY6Om1vbnRoRnVsbE5hbWUpOyArK2kpCi0gICAgICAg
IGxhYmVscy0+dW5jaGVja2VkQXBwZW5kKFdURjo6bW9udGhGdWxsTmFtZVtpXSk7CisgICAgbGFi
ZWxzLT5yZXNlcnZlSW5pdGlhbENhcGFjaXR5KHN0ZDo6c2l6ZShXVEY6Om1vbnRoRnVsbE5hbWUp
KTsKKyAgICBmb3IgKGF1dG8qIG1vbnRoTmFtZSA6IFdURjo6bW9udGhGdWxsTmFtZSkKKyAgICAg
ICAgbGFiZWxzLT51bmNoZWNrZWRBcHBlbmQobW9udGhOYW1lKTsKICAgICByZXR1cm4gbGFiZWxz
OwogfQogCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS90ZXh0L0xvY2FsZU5v
bmUuY3BwIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vdGV4dC9Mb2NhbGVOb25lLmNwcAppbmRl
eCA0YjZkNzYwZTk1MjdhNDc3Y2M0OTkwNDgwZGM1MmY4NjU3ZjMzNDM1Li5hYzRkN2Y0NjIxMjNj
MDk1OTQxM2M2ZGU0ZWQ4M2VmM2JmZmRmMjBlIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9w
bGF0Zm9ybS90ZXh0L0xvY2FsZU5vbmUuY3BwCisrKyBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3Jt
L3RleHQvTG9jYWxlTm9uZS5jcHAKQEAgLTExNiw5ICsxMTYsOSBAQCBjb25zdCBWZWN0b3I8U3Ry
aW5nPiYgTG9jYWxlTm9uZTo6c2hvcnRNb250aExhYmVscygpCiB7CiAgICAgaWYgKCFtX3Nob3J0
TW9udGhMYWJlbHMuaXNFbXB0eSgpKQogICAgICAgICByZXR1cm4gbV9zaG9ydE1vbnRoTGFiZWxz
OwotICAgIG1fc2hvcnRNb250aExhYmVscy5yZXNlcnZlQ2FwYWNpdHkoV1RGX0FSUkFZX0xFTkdU
SChXVEY6Om1vbnRoTmFtZSkpOwotICAgIGZvciAodW5zaWduZWQgaSA9IDA7IGkgPCBXVEZfQVJS
QVlfTEVOR1RIKFdURjo6bW9udGhOYW1lKTsgKytpKQotICAgICAgICBtX3Nob3J0TW9udGhMYWJl
bHMudW5jaGVja2VkQXBwZW5kKFdURjo6bW9udGhOYW1lW2ldKTsKKyAgICBtX3Nob3J0TW9udGhM
YWJlbHMucmVzZXJ2ZUNhcGFjaXR5KHN0ZDo6c2l6ZShXVEY6Om1vbnRoTmFtZSkpOworICAgIGZv
ciAoYXV0byogbW9udGhOYW1lIDogV1RGOjptb250aE5hbWUpCisgICAgICAgIG1fc2hvcnRNb250
aExhYmVscy51bmNoZWNrZWRBcHBlbmQobW9udGhOYW1lKTsKICAgICByZXR1cm4gbV9zaG9ydE1v
bnRoTGFiZWxzOwogfQogCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS90ZXh0
L2NvY29hL0xvY2FsZUNvY29hLm1tIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vdGV4dC9jb2Nv
YS9Mb2NhbGVDb2NvYS5tbQppbmRleCBmMThkYjQ1NzA4MmY1ZDkyYjA2OTNiZDI0N2YzN2VkYTA3
Njg4YjZhLi43NGZkOThkNjgwOWU5OTRiY2NmNDg4NjFjZTM3MWU3NTI5MDMxOGYxIDEwMDY0NAot
LS0gYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS90ZXh0L2NvY29hL0xvY2FsZUNvY29hLm1tCisr
KyBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL3RleHQvY29jb2EvTG9jYWxlQ29jb2EubW0KQEAg
LTM5LDYgKzM5LDcgQEAKICNpbXBvcnQgPHd0Zi9IYXNoTWFwLmg+CiAjaW1wb3J0IDx3dGYvTGFu
Z3VhZ2UuaD4KICNpbXBvcnQgPHd0Zi9SZXRhaW5QdHIuaD4KKyNpbXBvcnQgPHd0Zi9jb2NvYS9W
ZWN0b3JDb2NvYS5oPgogI2ltcG9ydCA8d3RmL3RleHQvQXRvbVN0cmluZ0hhc2guaD4KICNpbXBv
cnQgIkxvY2FsaXplZERhdGVDYWNoZS5oIgogCkBAIC0xMDYsMTMgKzEwNywxMiBAQCBjb25zdCBW
ZWN0b3I8U3RyaW5nPiYgTG9jYWxlQ29jb2E6Om1vbnRoTGFiZWxzKCkKIHsKICAgICBpZiAoIW1f
bW9udGhMYWJlbHMuaXNFbXB0eSgpKQogICAgICAgICByZXR1cm4gbV9tb250aExhYmVsczsKLSAg
ICBtX21vbnRoTGFiZWxzLnJlc2VydmVDYXBhY2l0eSgxMik7CiAgICAgTlNBcnJheSAqYXJyYXkg
PSBbc2hvcnREYXRlRm9ybWF0dGVyKCkuZ2V0KCkgbW9udGhTeW1ib2xzXTsKICAgICBpZiAoW2Fy
cmF5IGNvdW50XSA9PSAxMikgewotICAgICAgICBmb3IgKHVuc2lnbmVkIGkgPSAwOyBpIDwgMTI7
ICsraSkKLSAgICAgICAgICAgIG1fbW9udGhMYWJlbHMudW5jaGVja2VkQXBwZW5kKFN0cmluZyhb
YXJyYXkgb2JqZWN0QXRJbmRleDppXSkpOworICAgICAgICBtX21vbnRoTGFiZWxzID0gbWFrZVZl
Y3RvcjxTdHJpbmc+KGFycmF5KTsKICAgICAgICAgcmV0dXJuIG1fbW9udGhMYWJlbHM7CiAgICAg
fQorICAgIG1fbW9udGhMYWJlbHMucmVzZXJ2ZUNhcGFjaXR5KDEyKTsKICAgICBmb3IgKGF1dG8m
IG5hbWUgOiBXVEY6Om1vbnRoRnVsbE5hbWUpCiAgICAgICAgIG1fbW9udGhMYWJlbHMudW5jaGVj
a2VkQXBwZW5kKG5hbWUpOwogICAgIHJldHVybiBtX21vbnRoTGFiZWxzOwpAQCAtMjAwLDEzICsy
MDAsMTIgQEAgY29uc3QgVmVjdG9yPFN0cmluZz4mIExvY2FsZUNvY29hOjpzaG9ydE1vbnRoTGFi
ZWxzKCkKIHsKICAgICBpZiAoIW1fc2hvcnRNb250aExhYmVscy5pc0VtcHR5KCkpCiAgICAgICAg
IHJldHVybiBtX3Nob3J0TW9udGhMYWJlbHM7Ci0gICAgbV9zaG9ydE1vbnRoTGFiZWxzLnJlc2Vy
dmVDYXBhY2l0eSgxMik7CiAgICAgTlNBcnJheSAqYXJyYXkgPSBbc2hvcnREYXRlRm9ybWF0dGVy
KCkuZ2V0KCkgc2hvcnRNb250aFN5bWJvbHNdOwogICAgIGlmIChbYXJyYXkgY291bnRdID09IDEy
KSB7Ci0gICAgICAgIGZvciAodW5zaWduZWQgaSA9IDA7IGkgPCAxMjsgKytpKQotICAgICAgICAg
ICAgbV9zaG9ydE1vbnRoTGFiZWxzLnVuY2hlY2tlZEFwcGVuZChbYXJyYXkgb2JqZWN0QXRJbmRl
eDppXSk7CisgICAgICAgIG1fc2hvcnRNb250aExhYmVscyA9IG1ha2VWZWN0b3I8U3RyaW5nPihh
cnJheSk7CiAgICAgICAgIHJldHVybiBtX3Nob3J0TW9udGhMYWJlbHM7CiAgICAgfQorICAgIG1f
c2hvcnRNb250aExhYmVscy5yZXNlcnZlQ2FwYWNpdHkoMTIpOwogICAgIGZvciAoYXV0byYgbmFt
ZSA6IFdURjo6bW9udGhOYW1lKQogICAgICAgICBtX3Nob3J0TW9udGhMYWJlbHMudW5jaGVja2Vk
QXBwZW5kKG5hbWUpOwogICAgIHJldHVybiBtX3Nob3J0TW9udGhMYWJlbHM7CkBAIC0yMTgsOSAr
MjE3LDcgQEAgY29uc3QgVmVjdG9yPFN0cmluZz4mIExvY2FsZUNvY29hOjpzdGFuZEFsb25lTW9u
dGhMYWJlbHMoKQogICAgICAgICByZXR1cm4gbV9zdGFuZEFsb25lTW9udGhMYWJlbHM7CiAgICAg
TlNBcnJheSAqYXJyYXkgPSBbc2hvcnREYXRlRm9ybWF0dGVyKCkuZ2V0KCkgc3RhbmRhbG9uZU1v
bnRoU3ltYm9sc107CiAgICAgaWYgKFthcnJheSBjb3VudF0gPT0gMTIpIHsKLSAgICAgICAgbV9z
dGFuZEFsb25lTW9udGhMYWJlbHMucmVzZXJ2ZUNhcGFjaXR5KDEyKTsKLSAgICAgICAgZm9yICh1
bnNpZ25lZCBpID0gMDsgaSA8IDEyOyArK2kpCi0gICAgICAgICAgICBtX3N0YW5kQWxvbmVNb250
aExhYmVscy51bmNoZWNrZWRBcHBlbmQoW2FycmF5IG9iamVjdEF0SW5kZXg6aV0pOworICAgICAg
ICBtX3N0YW5kQWxvbmVNb250aExhYmVscyA9IG1ha2VWZWN0b3I8U3RyaW5nPihhcnJheSk7CiAg
ICAgICAgIHJldHVybiBtX3N0YW5kQWxvbmVNb250aExhYmVsczsKICAgICB9CiAgICAgbV9zdGFu
ZEFsb25lTW9udGhMYWJlbHMgPSBzaG9ydE1vbnRoTGFiZWxzKCk7CkBAIC0yMzEsMTEgKzIyOCwx
MCBAQCBjb25zdCBWZWN0b3I8U3RyaW5nPiYgTG9jYWxlQ29jb2E6OnNob3J0U3RhbmRBbG9uZU1v
bnRoTGFiZWxzKCkKIHsKICAgICBpZiAoIW1fc2hvcnRTdGFuZEFsb25lTW9udGhMYWJlbHMuaXNF
bXB0eSgpKQogICAgICAgICByZXR1cm4gbV9zaG9ydFN0YW5kQWxvbmVNb250aExhYmVsczsKKwog
ICAgIE5TQXJyYXkgKmFycmF5ID0gW3Nob3J0RGF0ZUZvcm1hdHRlcigpLmdldCgpIHNob3J0U3Rh
bmRhbG9uZU1vbnRoU3ltYm9sc107CiAgICAgaWYgKFthcnJheSBjb3VudF0gPT0gMTIpIHsKLSAg
ICAgICAgbV9zaG9ydFN0YW5kQWxvbmVNb250aExhYmVscy5yZXNlcnZlQ2FwYWNpdHkoMTIpOwot
ICAgICAgICBmb3IgKHVuc2lnbmVkIGkgPSAwOyBpIDwgMTI7ICsraSkKLSAgICAgICAgICAgIG1f
c2hvcnRTdGFuZEFsb25lTW9udGhMYWJlbHMudW5jaGVja2VkQXBwZW5kKFthcnJheSBvYmplY3RB
dEluZGV4OmldKTsKKyAgICAgICAgbV9zaG9ydFN0YW5kQWxvbmVNb250aExhYmVscyA9IG1ha2VW
ZWN0b3I8U3RyaW5nPihhcnJheSk7CiAgICAgICAgIHJldHVybiBtX3Nob3J0U3RhbmRBbG9uZU1v
bnRoTGFiZWxzOwogICAgIH0KICAgICBtX3Nob3J0U3RhbmRBbG9uZU1vbnRoTGFiZWxzID0gc2hv
cnRNb250aExhYmVscygpOwpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvdGVzdGluZy9Nb2Nr
Q0RNRmFjdG9yeS5jcHAgYi9Tb3VyY2UvV2ViQ29yZS90ZXN0aW5nL01vY2tDRE1GYWN0b3J5LmNw
cAppbmRleCBiMjE1ZTBkMGE4MTRlNWRhODcyZWEwNDM3MzIzOTk2MTJiOGE2YTNiLi41NjA3ZDQ5
ZmNkZTlkNWI3NDE0ODcyYmRiOTFmYWY2OTY0ZjU2ODhlIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2Vi
Q29yZS90ZXN0aW5nL01vY2tDRE1GYWN0b3J5LmNwcAorKysgYi9Tb3VyY2UvV2ViQ29yZS90ZXN0
aW5nL01vY2tDRE1GYWN0b3J5LmNwcApAQCAtMzQ0LDcgKzM0NCw3IEBAIHZvaWQgTW9ja0NETUlu
c3RhbmNlU2Vzc2lvbjo6dXBkYXRlTGljZW5zZShjb25zdCBTdHJpbmcmIHNlc3Npb25JRCwgTGlj
ZW5zZVR5cGUsCiAgICAgICAgIGNvbnN0IGF1dG8qIGtleXMgPSBmYWN0b3J5LT5rZXlzRm9yU2Vz
c2lvbldpdGhJRChzZXNzaW9uSUQpOwogICAgICAgICBpZiAoa2V5cykgewogICAgICAgICAgICAg
Y2hhbmdlZEtleXMgPSBrZXlzLT5tYXAoW10oYXV0byYga2V5KSB7Ci0gICAgICAgICAgICAgICAg
cmV0dXJuIHN0ZDo6bWFrZV9wYWlyKGtleS5jb3B5UmVmKCksIEtleVN0YXR1czo6VXNhYmxlKTsK
KyAgICAgICAgICAgICAgICByZXR1cm4gc3RkOjpwYWlyIHsga2V5LmNvcHlSZWYoKSwgS2V5U3Rh
dHVzOjpVc2FibGUgfTsKICAgICAgICAgICAgIH0pOwogICAgICAgICB9CiAgICAgfQpAQCAtMzkz
LDcgKzM5Myw3IEBAIHZvaWQgTW9ja0NETUluc3RhbmNlU2Vzc2lvbjo6cmVtb3ZlU2Vzc2lvbkRh
dGEoY29uc3QgU3RyaW5nJiBpZCwgTGljZW5zZVR5cGUsIFJlCiAKICAgICBhdXRvIGtleXMgPSBm
YWN0b3J5LT5yZW1vdmVLZXlzRnJvbVNlc3Npb25XaXRoSUQoaWQpOwogICAgIGF1dG8ga2V5U3Rh
dHVzVmVjdG9yID0gV1RGOjptYXAoV1RGTW92ZShrZXlzKSwgW10oYXV0byYmIGtleSkgewotICAg
ICAgICByZXR1cm4gc3RkOjptYWtlX3BhaXIoV1RGTW92ZShrZXkpLCBLZXlTdGF0dXM6OlJlbGVh
c2VkKTsKKyAgICAgICAgcmV0dXJuIHN0ZDo6cGFpciB7IFdURk1vdmUoa2V5KSwgS2V5U3RhdHVz
OjpSZWxlYXNlZCB9OwogICAgIH0pOwogCiAgICAgQ1N0cmluZyBtZXNzYWdlIHsgInJlbW92ZS1t
ZXNzYWdlIiB9Owo=
</data>
<flag name="review"
          id="479458"
          type_id="1"
          status="+"
          setter="darin"
    />
          </attachment>
      

    </bug>

</bugzilla>