<?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>171586</bug_id>
          
          <creation_ts>2017-05-02 18:01:39 -0700</creation_ts>
          <short_desc>NeverDestroyed&lt;String&gt;(ASCIILiteral(...)) is not thread safe.</short_desc>
          <delta_ts>2017-05-08 03:28:48 -0700</delta_ts>
          <reporter_accessible>1</reporter_accessible>
          <cclist_accessible>1</cclist_accessible>
          <classification_id>1</classification_id>
          <classification>Unclassified</classification>
          <product>WebKit</product>
          <component>JavaScriptCore</component>
          <version>WebKit Nightly Build</version>
          <rep_platform>Unspecified</rep_platform>
          <op_sys>Unspecified</op_sys>
          <bug_status>RESOLVED</bug_status>
          <resolution>FIXED</resolution>
          
          
          <bug_file_loc></bug_file_loc>
          <status_whiteboard></status_whiteboard>
          <keywords>InRadar</keywords>
          <priority>P2</priority>
          <bug_severity>Normal</bug_severity>
          <target_milestone>---</target_milestone>
          
          <blocked>171702</blocked>
    
    <blocked>171800</blocked>
          <everconfirmed>1</everconfirmed>
          <reporter name="Mark Lam">mark.lam</reporter>
          <assigned_to name="Mark Lam">mark.lam</assigned_to>
          <cc>bburg</cc>
    
    <cc>benjamin</cc>
    
    <cc>buildbot</cc>
    
    <cc>cdumez</cc>
    
    <cc>cmarcelo</cc>
    
    <cc>dbates</cc>
    
    <cc>fpizlo</cc>
    
    <cc>ggaren</cc>
    
    <cc>jfbastien</cc>
    
    <cc>keith_miller</cc>
    
    <cc>msaboff</cc>
    
    <cc>oliver</cc>
    
    <cc>ryanhaddad</cc>
    
    <cc>saam</cc>
    
    <cc>webkit-bug-importer</cc>
    
    <cc>ysuzuki</cc>
          

      

      

      

          <comment_sort_order>oldest_to_newest</comment_sort_order>  
          <long_desc isprivate="0" >
    <commentid>1303902</commentid>
    <comment_count>0</comment_count>
    <who name="Mark Lam">mark.lam</who>
    <bug_when>2017-05-02 18:01:39 -0700</bug_when>
    <thetext>JavaScriptCore allows multiple VMs to be instantiated, and each of these should be able to run concurrently on different threads.  However, NeverDestroyed&lt;String&gt;(ASCIILiteral(...)) is not thread-safe because each thread will ref and deref the underlying StringImpl.  Since this ref and deref is down in a thread-safe way, the NeverDestroyed&lt;String&gt; may get destroyed due to the ref/deref races.

The fix is to use the StaticStringImpl class which is safe for ref/derefing concurrently from different threads.

An alternative solution would be to change all the uses of NeverDestroyed&lt;String&gt; to use per-VM strings.  However, this solution is cumbersome, and makes it harder to allocate the intended shared string.  It also uses more memory and takes more CPU time because it requires allocating the same string for each VM instance.  The StaticStringImpl solution wins out because it is more efficient and is easier to use.

&lt;rdar://problem/31873190&gt;</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1303914</commentid>
    <comment_count>1</comment_count>
      <attachid>308877</attachid>
    <who name="Mark Lam">mark.lam</who>
    <bug_when>2017-05-02 18:30:40 -0700</bug_when>
    <thetext>Created attachment 308877
proposed patch.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1303916</commentid>
    <comment_count>2</comment_count>
      <attachid>308879</attachid>
    <who name="Mark Lam">mark.lam</who>
    <bug_when>2017-05-02 18:37:17 -0700</bug_when>
    <thetext>Created attachment 308879
rebased to ToT</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1303918</commentid>
    <comment_count>3</comment_count>
    <who name="Build Bot">buildbot</who>
    <bug_when>2017-05-02 18:39:32 -0700</bug_when>
    <thetext>This patch modifies the WEB_REPLAY inputs generator. Please ensure that you have rebaselined any generator test results (i.e., by running `Tools/Scripts/run-input-generator-tests --reset-results`)</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1303941</commentid>
    <comment_count>4</comment_count>
      <attachid>308879</attachid>
    <who name="Oliver Hunt">oliver</who>
    <bug_when>2017-05-02 20:06:12 -0700</bug_when>
    <thetext>Comment on attachment 308879
rebased to ToT

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

&gt; Source/WTF/ChangeLog:13
&gt; +

I would rather just have didReportCost check if it&apos;s a static string and simply not update (and return true) - that seems more sensible to me as it is (functionally) a static part of the binary

&gt; Source/WTF/ChangeLog:23
&gt; +            NeverDestroyed&lt;String&gt; myString(ASCIILiteral(&quot;myString&quot;));

Why are there different ascii literal strings? Is this to allow non-atomic increment of literal strings in the dom?

&gt; Source/WTF/ChangeLog:24
&gt; +

I ask because the bulk of this patch is changing asciiliteral to staticasciiliteral, but the whole point of asciiliteral /is/ that it is a literal, so to me this is at best poorly named

&gt; Source/WTF/wtf/text/StringImpl.h:573
&gt; +        //    is no way to set/clear the s_hashFlag8BitBuffer flag other than at construction.

Wait, isn&apos;t m_data16 created lazily if it is ever needed?

&gt; Source/WTF/wtf/text/StringImpl.h:887
&gt; +static_assert(sizeof(StringImpl) == sizeof(StaticStringImpl), &quot;&quot;);

I feel that it would be better to just wrap the sttingimpl members in a struct and embed that struct - why did you choose not to?</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1303983</commentid>
    <comment_count>5</comment_count>
      <attachid>308879</attachid>
    <who name="Yusuke Suzuki">ysuzuki</who>
    <bug_when>2017-05-03 03:58:00 -0700</bug_when>
    <thetext>Comment on attachment 308879
rebased to ToT

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

&gt; Source/JavaScriptCore/ChangeLog:12
&gt; +        meant to be shared by all VMs.

Right.

&gt; Source/JavaScriptCore/ChangeLog:24
&gt; +        However, NeverDestroyed&lt;String&gt;(ASCIILiteral(...)) is not thread-safe because
&gt; +        each thread will ref and deref the underlying StringImpl.  Since this ref and
&gt; +        deref is down in a thread-safe way, the NeverDestroyed&lt;String&gt; may get destroyed
&gt; +        due to the ref/deref races.  Additionally, each thread may modify the StringImpl
&gt; +        by setting its hash and also twiddling its flags.
&gt; +
&gt; +        The fix is to use the StaticStringImpl class which is safe for ref/derefing
&gt; +        concurrently from different threads.  StaticStringImpl is also pre-set with a
&gt; +        hash on construction, and its flags are set in such a way as to prevent twiddling
&gt; +        at runtime.  Hence, we will be able to share a NeverDestroyed&lt;String&gt; between
&gt; +        VMs, as long as it is backed by a StaticStringImpl.

How about just using `static StringImpl::StaticStringImpl StringValue(&quot;String&quot;);`, casting it to StringImpl* and returning it?

&gt; Source/JavaScriptCore/ChangeLog:31
&gt; +        to use.

Yeah, it is unacceptable.

&gt;&gt; Source/WTF/ChangeLog:23
&gt;&gt; +            NeverDestroyed&lt;String&gt; myString(ASCIILiteral(&quot;myString&quot;));
&gt; 
&gt; Why are there different ascii literal strings? Is this to allow non-atomic increment of literal strings in the dom?

ASCIILiteral() is introduced to distinguish `const char*` from literal, it can represent some good features of literals.
For example, while `const char*` may be non-null-terminated, we can say that ASCIILiteral() is always null-terminated.

I think the current StaticASCIILiteral has a bug since makeStaticStringImpl does not work well. I suggest using StaticStringImpl directly in NeverDestroyed&lt;String&gt; places.
Like, `static StringImpl::StaticStringImpl myString(&quot;myString&quot;)`.

&gt;&gt; Source/WTF/wtf/text/StringImpl.h:573
&gt;&gt; +        //    is no way to set/clear the s_hashFlag8BitBuffer flag other than at construction.
&gt; 
&gt; Wait, isn&apos;t m_data16 created lazily if it is ever needed?

No, we do not create it lazily. StringImpl is basically immutable except for ref count and atomicity flag.

&gt; Source/WTF/wtf/text/StringImpl.h:581
&gt; +        //    a. StaticStringImpl&apos;s constructor sets the s_hashFlagDidReportCost flag to ensure
&gt; +        //       that StringImpl::cost() returns early.
&gt; +        //       This means StaticStringImpl costs are not counted. But since there should only
&gt; +        //       be a finite set of StaticStringImpls, their cost can be aggregated into a single
&gt; +        //       system cost if needed.

I think setting s_hashFlagDidReportCost is OK. Adding some document about static strings in ::cost() would be helpful.

&gt; Source/WTF/wtf/text/StringImpl.h:583
&gt; +        //       setIsAtomic() asserts !isStatic().

Right.

&gt; Source/WTF/wtf/text/StringImpl.h:587
&gt; +        //       Additionally, StringImpl::setHash() asserts hasHash() and !isStatic().

Right.

&gt; Source/WTF/wtf/text/StringImpl.h:1164
&gt; +template&lt;unsigned charactersCount&gt;
&gt; +StaticStringImpl&amp; makeStaticStringImpl(const char (&amp;characters)[charactersCount])
&gt; +{
&gt; +    static StaticStringImpl impl(characters);
&gt; +    return impl;
&gt; +}
&gt; +
&gt; +template&lt;unsigned charactersCount&gt;
&gt; +StaticStringImpl&amp; makeStaticStringImpl(const char16_t (&amp;characters)[charactersCount])
&gt; +{
&gt; +    static StaticStringImpl impl(characters);
&gt; +    return impl;
&gt; +}

I think it&apos;s not correct. It returns the same StaticStringImpl&amp; for `makeStaticStringImpl(&quot;Hello&quot;)` and `makeStaticStringImpl(&quot;World&quot;)` (strlen(&quot;Hello&quot;) == strlen(&quot;World&quot;)), right?</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1304027</commentid>
    <comment_count>6</comment_count>
      <attachid>308879</attachid>
    <who name="Filip Pizlo">fpizlo</who>
    <bug_when>2017-05-03 08:36:39 -0700</bug_when>
    <thetext>Comment on attachment 308879
rebased to ToT

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

r- because bug

&gt; Source/JavaScriptCore/ChangeLog:16
&gt; +        deref is down in a thread-safe way, the NeverDestroyed&lt;String&gt; may get destroyed

*done

&gt;&gt;&gt; Source/WTF/ChangeLog:23
&gt;&gt;&gt; +            NeverDestroyed&lt;String&gt; myString(ASCIILiteral(&quot;myString&quot;));
&gt;&gt; 
&gt;&gt; Why are there different ascii literal strings? Is this to allow non-atomic increment of literal strings in the dom?
&gt; 
&gt; ASCIILiteral() is introduced to distinguish `const char*` from literal, it can represent some good features of literals.
&gt; For example, while `const char*` may be non-null-terminated, we can say that ASCIILiteral() is always null-terminated.
&gt; 
&gt; I think the current StaticASCIILiteral has a bug since makeStaticStringImpl does not work well. I suggest using StaticStringImpl directly in NeverDestroyed&lt;String&gt; places.
&gt; Like, `static StringImpl::StaticStringImpl myString(&quot;myString&quot;)`.

I agree.

&gt;&gt; Source/WTF/wtf/text/StringImpl.h:1164
&gt;&gt; +}
&gt; 
&gt; I think it&apos;s not correct. It returns the same StaticStringImpl&amp; for `makeStaticStringImpl(&quot;Hello&quot;)` and `makeStaticStringImpl(&quot;World&quot;)` (strlen(&quot;Hello&quot;) == strlen(&quot;World&quot;)), right?

Agreed.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1304104</commentid>
    <comment_count>7</comment_count>
      <attachid>308879</attachid>
    <who name="Mark Lam">mark.lam</who>
    <bug_when>2017-05-03 10:36:43 -0700</bug_when>
    <thetext>Comment on attachment 308879
rebased to ToT

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

&gt;&gt; Source/WTF/ChangeLog:13
&gt;&gt; +
&gt; 
&gt; I would rather just have didReportCost check if it&apos;s a static string and simply not update (and return true) - that seems more sensible to me as it is (functionally) a static part of the binary

The s_hashFlagDidReportCost flag is used to avoid reporting the cost of the same StringImpl multiple times.  Option 1: Reporting 0 means under-counting the cost by a constant C.  Option 2: Computing the cost every time and without updating the flag means potentially over-counting the cost by an unknown multiple of C, and also using more (though probably negligible) CPU time both for calculating the cost as well as the check to determine whether to update the flag or not.  I think option 1 is the superior option both for a more accurate estimate of cost as well as minimizing CPU time.

&gt;&gt;&gt;&gt; Source/WTF/ChangeLog:23
&gt;&gt;&gt;&gt; +            NeverDestroyed&lt;String&gt; myString(ASCIILiteral(&quot;myString&quot;));
&gt;&gt;&gt; 
&gt;&gt;&gt; Why are there different ascii literal strings? Is this to allow non-atomic increment of literal strings in the dom?
&gt;&gt; 
&gt;&gt; ASCIILiteral() is introduced to distinguish `const char*` from literal, it can represent some good features of literals.
&gt;&gt; For example, while `const char*` may be non-null-terminated, we can say that ASCIILiteral() is always null-terminated.
&gt;&gt; 
&gt;&gt; I think the current StaticASCIILiteral has a bug since makeStaticStringImpl does not work well. I suggest using StaticStringImpl directly in NeverDestroyed&lt;String&gt; places.
&gt;&gt; Like, `static StringImpl::StaticStringImpl myString(&quot;myString&quot;)`.
&gt; 
&gt; I agree.

@Yusuke, great catch.  I tried replacing with static StaticStringImpl before settling on the makeStaticStringImpl() idiom, but ran into some issues that made it not ideal ... though I&apos;ve forgotten the reason now.  Maybe I was not doing it right.  I&apos;ll try again.  If not able to do so, I can fix the bug in makeStaticStringImpl().

&gt;&gt; Source/WTF/ChangeLog:24
&gt;&gt; +
&gt; 
&gt; I ask because the bulk of this patch is changing asciiliteral to staticasciiliteral, but the whole point of asciiliteral /is/ that it is a literal, so to me this is at best poorly named

Yes, the name is not one that I&apos;m proud of, but it&apos;s the best one I can think of at the time.  Might be moot now if we can do without it.

&gt;&gt;&gt; Source/WTF/wtf/text/StringImpl.h:573
&gt;&gt;&gt; +        //    is no way to set/clear the s_hashFlag8BitBuffer flag other than at construction.
&gt;&gt; 
&gt;&gt; Wait, isn&apos;t m_data16 created lazily if it is ever needed?
&gt; 
&gt; No, we do not create it lazily. StringImpl is basically immutable except for ref count and atomicity flag.

... and the s_hashFlagDidReportCost flag.

&gt;&gt; Source/WTF/wtf/text/StringImpl.h:581
&gt;&gt; +        //       system cost if needed.
&gt; 
&gt; I think setting s_hashFlagDidReportCost is OK. Adding some document about static strings in ::cost() would be helpful.

OK.

&gt;&gt; Source/WTF/wtf/text/StringImpl.h:887
&gt;&gt; +static_assert(sizeof(StringImpl) == sizeof(StaticStringImpl), &quot;&quot;);
&gt; 
&gt; I feel that it would be better to just wrap the sttingimpl members in a struct and embed that struct - why did you choose not to?

Because there is already a lot of StringImpl code that accesses the fields directly.  I didn&apos;t want to touch all that code just to make them reference thru an embedded named struct.  I don&apos;t see a way to use an anonymous struct.  What&apos;s wrong with private inheritance of the Shape class?

&gt;&gt;&gt; Source/WTF/wtf/text/StringImpl.h:1164
&gt;&gt;&gt; +}
&gt;&gt; 
&gt;&gt; I think it&apos;s not correct. It returns the same StaticStringImpl&amp; for `makeStaticStringImpl(&quot;Hello&quot;)` and `makeStaticStringImpl(&quot;World&quot;)` (strlen(&quot;Hello&quot;) == strlen(&quot;World&quot;)), right?
&gt; 
&gt; Agreed.

Will fix (one way or another).</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1304110</commentid>
    <comment_count>8</comment_count>
    <who name="Geoffrey Garen">ggaren</who>
    <bug_when>2017-05-03 10:48:03 -0700</bug_when>
    <thetext>&gt; The fix is to use the StaticStringImpl class which is safe for ref/derefing
&gt; concurrently from different threads.

StaticStringImpl is still not thread-safe in its initialization, since multiple threads can race to initialize.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1304111</commentid>
    <comment_count>9</comment_count>
      <attachid>308879</attachid>
    <who name="Oliver Hunt">oliver</who>
    <bug_when>2017-05-03 10:49:09 -0700</bug_when>
    <thetext>Comment on attachment 308879
rebased to ToT

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

&gt;&gt;&gt; Source/WTF/ChangeLog:13
&gt;&gt;&gt; +
&gt;&gt; 
&gt;&gt; I would rather just have didReportCost check if it&apos;s a static string and simply not update (and return true) - that seems more sensible to me as it is (functionally) a static part of the binary
&gt; 
&gt; The s_hashFlagDidReportCost flag is used to avoid reporting the cost of the same StringImpl multiple times.  Option 1: Reporting 0 means under-counting the cost by a constant C.  Option 2: Computing the cost every time and without updating the flag means potentially over-counting the cost by an unknown multiple of C, and also using more (though probably negligible) CPU time both for calculating the cost as well as the check to determine whether to update the flag or not.  I think option 1 is the superior option both for a more accurate estimate of cost as well as minimizing CPU time.

Ah, i thought that there was a simple way to identify persistent/permanent strings. So yeah this makes sense to me now.

&gt;&gt;&gt;&gt;&gt; Source/WTF/ChangeLog:23
&gt;&gt;&gt;&gt;&gt; +            NeverDestroyed&lt;String&gt; myString(ASCIILiteral(&quot;myString&quot;));
&gt;&gt;&gt;&gt; 
&gt;&gt;&gt;&gt; Why are there different ascii literal strings? Is this to allow non-atomic increment of literal strings in the dom?
&gt;&gt;&gt; 
&gt;&gt;&gt; ASCIILiteral() is introduced to distinguish `const char*` from literal, it can represent some good features of literals.
&gt;&gt;&gt; For example, while `const char*` may be non-null-terminated, we can say that ASCIILiteral() is always null-terminated.
&gt;&gt;&gt; 
&gt;&gt;&gt; I think the current StaticASCIILiteral has a bug since makeStaticStringImpl does not work well. I suggest using StaticStringImpl directly in NeverDestroyed&lt;String&gt; places.
&gt;&gt;&gt; Like, `static StringImpl::StaticStringImpl myString(&quot;myString&quot;)`.
&gt;&gt; 
&gt;&gt; I agree.
&gt; 
&gt; @Yusuke, great catch.  I tried replacing with static StaticStringImpl before settling on the makeStaticStringImpl() idiom, but ran into some issues that made it not ideal ... though I&apos;ve forgotten the reason now.  Maybe I was not doing it right.  I&apos;ll try again.  If not able to do so, I can fix the bug in makeStaticStringImpl().

My concern is that i don&apos;t fully understand why we would not consider /all/ ascii literals to be static -- i&apos;m willing to accept that there could be performance concerns, but i&apos;d like to know if it&apos;s deliberate.

Specifically why should these differ in semantics:

String(ASCIILiteral(&quot;foo&quot;))
vs.
String(StaticASCIILiteral(&quot;foo&quot;))

?</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1304115</commentid>
    <comment_count>10</comment_count>
      <attachid>308879</attachid>
    <who name="Mark Lam">mark.lam</who>
    <bug_when>2017-05-03 10:55:01 -0700</bug_when>
    <thetext>Comment on attachment 308879
rebased to ToT

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

&gt;&gt;&gt;&gt;&gt;&gt; Source/WTF/ChangeLog:23
&gt;&gt;&gt;&gt;&gt;&gt; +            NeverDestroyed&lt;String&gt; myString(ASCIILiteral(&quot;myString&quot;));
&gt;&gt;&gt;&gt;&gt; 
&gt;&gt;&gt;&gt;&gt; Why are there different ascii literal strings? Is this to allow non-atomic increment of literal strings in the dom?
&gt;&gt;&gt;&gt; 
&gt;&gt;&gt;&gt; ASCIILiteral() is introduced to distinguish `const char*` from literal, it can represent some good features of literals.
&gt;&gt;&gt;&gt; For example, while `const char*` may be non-null-terminated, we can say that ASCIILiteral() is always null-terminated.
&gt;&gt;&gt;&gt; 
&gt;&gt;&gt;&gt; I think the current StaticASCIILiteral has a bug since makeStaticStringImpl does not work well. I suggest using StaticStringImpl directly in NeverDestroyed&lt;String&gt; places.
&gt;&gt;&gt;&gt; Like, `static StringImpl::StaticStringImpl myString(&quot;myString&quot;)`.
&gt;&gt;&gt; 
&gt;&gt;&gt; I agree.
&gt;&gt; 
&gt;&gt; @Yusuke, great catch.  I tried replacing with static StaticStringImpl before settling on the makeStaticStringImpl() idiom, but ran into some issues that made it not ideal ... though I&apos;ve forgotten the reason now.  Maybe I was not doing it right.  I&apos;ll try again.  If not able to do so, I can fix the bug in makeStaticStringImpl().
&gt; 
&gt; My concern is that i don&apos;t fully understand why we would not consider /all/ ascii literals to be static -- i&apos;m willing to accept that there could be performance concerns, but i&apos;d like to know if it&apos;s deliberate.
&gt; 
&gt; Specifically why should these differ in semantics:
&gt; 
&gt; String(ASCIILiteral(&quot;foo&quot;))
&gt; vs.
&gt; String(StaticASCIILiteral(&quot;foo&quot;))
&gt; 
&gt; ?

Consider this scenario:
String getString() {
    const char* str1 = &quot;hello&quot;;
    const char* str2 = &quot;world&quot;;
    const char* chosenString = reasons ? str1 : str2;
    return String(ASCIILiteral(chosenString));
}

This is legal with ASCIILiteral but not legal with StaticASCIILiteral.  And yes, we do have code that uses ASCIILiteral in that way.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1304118</commentid>
    <comment_count>11</comment_count>
    <who name="Mark Lam">mark.lam</who>
    <bug_when>2017-05-03 10:57:56 -0700</bug_when>
    <thetext>(In reply to Geoffrey Garen from comment #8)
&gt; &gt; The fix is to use the StaticStringImpl class which is safe for ref/derefing
&gt; &gt; concurrently from different threads.
&gt; 
&gt; StaticStringImpl is still not thread-safe in its initialization, since
&gt; multiple threads can race to initialize.

StaticStringImpl&apos;s initialization is a constexpr.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1304834</commentid>
    <comment_count>12</comment_count>
      <attachid>309103</attachid>
    <who name="Mark Lam">mark.lam</who>
    <bug_when>2017-05-04 14:20:20 -0700</bug_when>
    <thetext>Created attachment 309103
proposed patch.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1304843</commentid>
    <comment_count>13</comment_count>
      <attachid>309103</attachid>
    <who name="Yusuke Suzuki">ysuzuki</who>
    <bug_when>2017-05-04 14:41:28 -0700</bug_when>
    <thetext>Comment on attachment 309103
proposed patch.

r=me</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1304891</commentid>
    <comment_count>14</comment_count>
    <who name="Mark Lam">mark.lam</who>
    <bug_when>2017-05-04 16:25:05 -0700</bug_when>
    <thetext>Thanks for the review.  Landed in r216217: &lt;http://trac.webkit.org/r216217&gt;.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1304913</commentid>
    <comment_count>15</comment_count>
    <who name="Ryan Haddad">ryanhaddad</who>
    <bug_when>2017-05-04 17:39:47 -0700</bug_when>
    <thetext>(In reply to Mark Lam from comment #14)
&gt; Thanks for the review.  Landed in r216217: &lt;http://trac.webkit.org/r216217&gt;.

This change broke the Windows build:

https://build.webkit.org/builders/Apple%20Win%20Release%20%28Build%29/builds/1222</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1304914</commentid>
    <comment_count>16</comment_count>
    <who name="Mark Lam">mark.lam</who>
    <bug_when>2017-05-04 17:47:18 -0700</bug_when>
    <thetext>(In reply to Ryan Haddad from comment #15)
&gt; (In reply to Mark Lam from comment #14)
&gt; &gt; Thanks for the review.  Landed in r216217: &lt;http://trac.webkit.org/r216217&gt;.
&gt; 
&gt; This change broke the Windows build:
&gt; 
&gt; https://build.webkit.org/builders/Apple%20Win%20Release%20%28Build%29/builds/
&gt; 1222

Build fix for Windows landed in r216220: &lt;http://trac.webkit.org/r216220&gt;.</thetext>
  </long_desc>
      
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>308877</attachid>
            <date>2017-05-02 18:30:40 -0700</date>
            <delta_ts>2017-05-02 18:37:17 -0700</delta_ts>
            <desc>proposed patch.</desc>
            <filename>bug-171586.patch</filename>
            <type>text/plain</type>
            <size>49229</size>
            <attacher name="Mark Lam">mark.lam</attacher>
            
              <data encoding="base64">SW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9DaGFuZ2VMb2cKPT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291
cmNlL0phdmFTY3JpcHRDb3JlL0NoYW5nZUxvZwkocmV2aXNpb24gMjE2MTA3KQorKysgU291cmNl
L0phdmFTY3JpcHRDb3JlL0NoYW5nZUxvZwkod29ya2luZyBjb3B5KQpAQCAtMSwzICsxLDc5IEBA
CisyMDE3LTA1LTAyICBNYXJrIExhbSAgPG1hcmsubGFtQGFwcGxlLmNvbT4KKworICAgICAgICBO
ZXZlckRlc3Ryb3llZDxTdHJpbmc+KEFTQ0lJTGl0ZXJhbCguLi4pKSBpcyBub3QgdGhyZWFkIHNh
ZmUuCisgICAgICAgIGh0dHBzOi8vYnVncy53ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9pZD0xNzE1
ODYKKyAgICAgICAgPHJkYXI6Ly9wcm9ibGVtLzMxODczMTkwPgorCisgICAgICAgIFJldmlld2Vk
IGJ5IE5PQk9EWSAoT09QUyEpLgorICAgICAgICAKKyAgICAgICAgSmF2YVNjcmlwdENvcmUgYWxs
b3dzIG11bHRpcGxlIFZNcyB0byBiZSBpbnN0YW50aWF0ZWQsIGFuZCBlYWNoIG9mIHRoZXNlIHNo
b3VsZAorICAgICAgICBiZSBhYmxlIHRvIHJ1biBjb25jdXJyZW50bHkgb24gZGlmZmVyZW50IHRo
cmVhZHMuICBUaGVyZSBpcyBjb2RlIGluIHRoZSBWTSB0aGF0CisgICAgICAgIGFsbG9jYXRlcyBO
ZXZlckRlc3Ryb3llZDxTdHJpbmc+KEFTQ0lJTGl0ZXJhbCguLi4pKSB0byBkZWZpbmVkIGltbW9y
dGFsIHN0cmluZ3MKKyAgICAgICAgbWVhbnQgdG8gYmUgc2hhcmVkIGJ5IGFsbCBWTXMuCisgICAg
ICAgIAorICAgICAgICBIb3dldmVyLCBOZXZlckRlc3Ryb3llZDxTdHJpbmc+KEFTQ0lJTGl0ZXJh
bCguLi4pKSBpcyBub3QgdGhyZWFkLXNhZmUgYmVjYXVzZQorICAgICAgICBlYWNoIHRocmVhZCB3
aWxsIHJlZiBhbmQgZGVyZWYgdGhlIHVuZGVybHlpbmcgU3RyaW5nSW1wbC4gIFNpbmNlIHRoaXMg
cmVmIGFuZAorICAgICAgICBkZXJlZiBpcyBkb3duIGluIGEgdGhyZWFkLXNhZmUgd2F5LCB0aGUg
TmV2ZXJEZXN0cm95ZWQ8U3RyaW5nPiBtYXkgZ2V0IGRlc3Ryb3llZAorICAgICAgICBkdWUgdG8g
dGhlIHJlZi9kZXJlZiByYWNlcy4gIEFkZGl0aW9uYWxseSwgZWFjaCB0aHJlYWQgbWF5IG1vZGlm
eSB0aGUgU3RyaW5nSW1wbAorICAgICAgICBieSBzZXR0aW5nIGl0cyBoYXNoIGFuZCBhbHNvIHR3
aWRkbGluZyBpdHMgZmxhZ3MuCisKKyAgICAgICAgVGhlIGZpeCBpcyB0byB1c2UgdGhlIFN0YXRp
Y1N0cmluZ0ltcGwgY2xhc3Mgd2hpY2ggaXMgc2FmZSBmb3IgcmVmL2RlcmVmaW5nCisgICAgICAg
IGNvbmN1cnJlbnRseSBmcm9tIGRpZmZlcmVudCB0aHJlYWRzLiAgU3RhdGljU3RyaW5nSW1wbCBp
cyBhbHNvIHByZS1zZXQgd2l0aCBhCisgICAgICAgIGhhc2ggb24gY29uc3RydWN0aW9uLCBhbmQg
aXRzIGZsYWdzIGFyZSBzZXQgaW4gc3VjaCBhIHdheSBhcyB0byBwcmV2ZW50IHR3aWRkbGluZwor
ICAgICAgICBhdCBydW50aW1lLiAgSGVuY2UsIHdlIHdpbGwgYmUgYWJsZSB0byBzaGFyZSBhIE5l
dmVyRGVzdHJveWVkPFN0cmluZz4gYmV0d2VlbgorICAgICAgICBWTXMsIGFzIGxvbmcgYXMgaXQg
aXMgYmFja2VkIGJ5IGEgU3RhdGljU3RyaW5nSW1wbC4KKworICAgICAgICBBbiBhbHRlcm5hdGl2
ZSBzb2x1dGlvbiB3b3VsZCBiZSB0byBjaGFuZ2UgYWxsIHRoZSB1c2VzIG9mIE5ldmVyRGVzdHJv
eWVkPFN0cmluZz4KKyAgICAgICAgdG8gdXNlIHBlci1WTSBzdHJpbmdzLiAgSG93ZXZlciwgdGhp
cyBzb2x1dGlvbiBpcyBjdW1iZXJzb21lLCBhbmQgbWFrZXMgaXQgaGFyZGVyCisgICAgICAgIHRv
IGFsbG9jYXRlIHRoZSBpbnRlbmRlZCBzaGFyZWQgc3RyaW5nLiAgSXQgYWxzbyB1c2VzIG1vcmUg
bWVtb3J5IGFuZCB0YWtlcyBtb3JlCisgICAgICAgIENQVSB0aW1lIGJlY2F1c2UgaXQgcmVxdWly
ZXMgYWxsb2NhdGluZyB0aGUgc2FtZSBzdHJpbmcgZm9yIGVhY2ggVk0gaW5zdGFuY2UuCisgICAg
ICAgIFRoZSBTdGF0aWNTdHJpbmdJbXBsIHNvbHV0aW9uIHdpbnMgb3V0IGJlY2F1c2UgaXQgaXMg
bW9yZSBlZmZpY2llbnQgYW5kIGlzIGVhc2llcgorICAgICAgICB0byB1c2UuCisKKyAgICAgICAg
VGhlIFN0YXRpY1N0cmluZ0ltcGwgc29sdXRpb24gYWxzbyBjYW4gYmUgdXNlZCBpbiBXVEYgd2l0
aG91dCBhIGxheWVyIHZpb2xhdGlvbi4KKyAgICAgICAgU2VlIFNvdXJjZS9XVEYvd3RmL3RleHQv
aWN1L1RleHRCcmVha0l0ZXJhdG9ySUNVLmggZm9yIGFuIGV4YW1wbGUuCisKKyAgICAgICAgQWxz
byBhZGRlZCB0aGUgTXVsdGl0aHJlYWRlZE11bHRpVk1FeGVjdXRpb25UZXN0IHdoaWNoIHJ1bnMg
bXVsdGlwbGUgVk1zIGluCisgICAgICAgIG11bHRpcGxlIHRocmVhZHMsIGFsbCBiYW5naW5nIG9u
IHRoZSBCdWlsdGluRXhlY3V0YWJsZSdzIGJhc2VDb25zdHJ1Y3RvckNvZGUKKyAgICAgICAgTmV2
ZXJEZXN0cm95ZWQ8U3RyaW5nPi4gIFRoZSB0ZXN0IHdpbGwgbWFuaWZlc3QgdGhlIGlzc3VlIHJl
bGlhYmx5IChiZWZvcmUgdGhpcworICAgICAgICBmaXgpIGlmIHJ1biBvbiBhbiBBU0FOIGJ1aWxk
LgorCisgICAgICAgICogQVBJL3Rlc3RzL011bHRpdGhyZWFkZWRNdWx0aVZNRXhlY3V0aW9uVGVz
dC5jcHA6IEFkZGVkLgorICAgICAgICAodGhyZWFkc0xpc3QpOgorICAgICAgICAoc3RhcnRNdWx0
aXRocmVhZGVkTXVsdGlWTUV4ZWN1dGlvblRlc3QpOgorICAgICAgICAoZmluYWxpemVNdWx0aXRo
cmVhZGVkTXVsdGlWTUV4ZWN1dGlvblRlc3QpOgorICAgICAgICAqIEFQSS90ZXN0cy9NdWx0aXRo
cmVhZGVkTXVsdGlWTUV4ZWN1dGlvblRlc3QuaDogQWRkZWQuCisgICAgICAgICogQVBJL3Rlc3Rz
L3Rlc3RhcGkuYzoKKyAgICAgICAgKG1haW4pOgorICAgICAgICAqIEphdmFTY3JpcHRDb3JlLnhj
b2RlcHJvai9wcm9qZWN0LnBieHByb2o6CisgICAgICAgICogYnVpbHRpbnMvQnVpbHRpbkV4ZWN1
dGFibGVzLmNwcDoKKyAgICAgICAgKEpTQzo6QnVpbHRpbkV4ZWN1dGFibGVzOjpjcmVhdGVEZWZh
dWx0Q29uc3RydWN0b3IpOgorICAgICAgICAqIGluc3BlY3Rvci9hZ2VudHMvSW5zcGVjdG9yRGVi
dWdnZXJBZ2VudC5jcHA6CisgICAgICAgIChJbnNwZWN0b3I6Om9iamVjdEdyb3VwRm9yQnJlYWtw
b2ludEFjdGlvbik6CisgICAgICAgICogcmVwbGF5L3NjcmlwdHMvQ29kZUdlbmVyYXRvclJlcGxh
eUlucHV0c1RlbXBsYXRlcy5weToKKyAgICAgICAgKiByZXBsYXkvc2NyaXB0cy90ZXN0cy9leHBl
Y3RlZC9nZW5lcmF0ZS1lbnVtLWVuY29kaW5nLWhlbHBlcnMtd2l0aC1ndWFyZGVkLXZhbHVlcy5q
c29uLVRlc3RSZXBsYXlJbnB1dHMuY3BwOgorICAgICAgICAoSlNDOjpJbnB1dFRyYWl0czxUZXN0
OjpTYXZlZE1vdXNlQnV0dG9uPjo6dHlwZSk6CisgICAgICAgICogcmVwbGF5L3NjcmlwdHMvdGVz
dHMvZXhwZWN0ZWQvZ2VuZXJhdGUtZW51bS1lbmNvZGluZy1oZWxwZXJzLmpzb24tVGVzdFJlcGxh
eUlucHV0cy5jcHA6CisgICAgICAgIChKU0M6OklucHV0VHJhaXRzPFRlc3Q6OlNhdmVkTW91c2VC
dXR0b24+Ojp0eXBlKToKKyAgICAgICAgKiByZXBsYXkvc2NyaXB0cy90ZXN0cy9leHBlY3RlZC9n
ZW5lcmF0ZS1lbnVtLXdpdGgtZ3VhcmQuanNvbi1UZXN0UmVwbGF5SW5wdXRzLmNwcDoKKyAgICAg
ICAgKEpTQzo6SW5wdXRUcmFpdHM8VGVzdDo6SGFuZGxlV2hlZWxFdmVudD46OnR5cGUpOgorICAg
ICAgICAqIHJlcGxheS9zY3JpcHRzL3Rlc3RzL2V4cGVjdGVkL2dlbmVyYXRlLWVudW1zLXdpdGgt
c2FtZS1iYXNlLW5hbWUuanNvbi1UZXN0UmVwbGF5SW5wdXRzLmNwcDoKKyAgICAgICAgKEpTQzo6
SW5wdXRUcmFpdHM8VGVzdDo6Rm9ybUNvbWJvPjo6dHlwZSk6CisgICAgICAgICogcmVwbGF5L3Nj
cmlwdHMvdGVzdHMvZXhwZWN0ZWQvZ2VuZXJhdGUtaW5wdXQtd2l0aC1ndWFyZC5qc29uLVRlc3RS
ZXBsYXlJbnB1dHMuY3BwOgorICAgICAgICAoSlNDOjpJbnB1dFRyYWl0czxUZXN0OjpHZXRDdXJy
ZW50VGltZT46OnR5cGUpOgorICAgICAgICAoSlNDOjpJbnB1dFRyYWl0czxUZXN0OjpTZXRSYW5k
b21TZWVkPjo6dHlwZSk6CisgICAgICAgICogcmVwbGF5L3NjcmlwdHMvdGVzdHMvZXhwZWN0ZWQv
Z2VuZXJhdGUtaW5wdXQtd2l0aC12ZWN0b3ItbWVtYmVycy5qc29uLVRlc3RSZXBsYXlJbnB1dHMu
Y3BwOgorICAgICAgICAoSlNDOjpJbnB1dFRyYWl0czxUZXN0OjpBcnJheU9mVGhpbmdzPjo6dHlw
ZSk6CisgICAgICAgIChKU0M6OklucHV0VHJhaXRzPFRlc3Q6OlNhdmVkSGlzdG9yeT46OnR5cGUp
OgorICAgICAgICAqIHJlcGxheS9zY3JpcHRzL3Rlc3RzL2V4cGVjdGVkL2dlbmVyYXRlLWlucHV0
cy13aXRoLWZsYWdzLmpzb24tVGVzdFJlcGxheUlucHV0cy5jcHA6CisgICAgICAgIChKU0M6Oklu
cHV0VHJhaXRzPFRlc3Q6OlNjYWxhcklucHV0MT46OnR5cGUpOgorICAgICAgICAoSlNDOjpJbnB1
dFRyYWl0czxUZXN0OjpTY2FsYXJJbnB1dDI+Ojp0eXBlKToKKyAgICAgICAgKiByZXBsYXkvc2Ny
aXB0cy90ZXN0cy9leHBlY3RlZC9nZW5lcmF0ZS1tZW1vaXplZC10eXBlLW1vZGVzLmpzb24tVGVz
dFJlcGxheUlucHV0cy5jcHA6CisgICAgICAgIChKU0M6OklucHV0VHJhaXRzPFRlc3Q6OlNjYWxh
cklucHV0Pjo6dHlwZSk6CisgICAgICAgIChKU0M6OklucHV0VHJhaXRzPFRlc3Q6Ok1hcElucHV0
Pjo6dHlwZSk6CisgICAgICAgICogcnVudGltZS9JbnRsT2JqZWN0LmNwcDoKKyAgICAgICAgKEpT
Qzo6bnVtYmVyaW5nU3lzdGVtc0ZvckxvY2FsZSk6CisKIDIwMTctMDUtMDIgIEZpbGlwIFBpemxv
ICA8ZnBpemxvQGFwcGxlLmNvbT4KIAogICAgICAgICBVbnJldmlld2VkLCBmaXggcGVkYW50aWMg
QyBjb21waWxlcnMuCkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvQVBJL3Rlc3RzL011bHRp
dGhyZWFkZWRNdWx0aVZNRXhlY3V0aW9uVGVzdC5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0ph
dmFTY3JpcHRDb3JlL0FQSS90ZXN0cy9NdWx0aXRocmVhZGVkTXVsdGlWTUV4ZWN1dGlvblRlc3Qu
Y3BwCShub25leGlzdGVudCkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9BUEkvdGVzdHMvTXVs
dGl0aHJlYWRlZE11bHRpVk1FeGVjdXRpb25UZXN0LmNwcAkod29ya2luZyBjb3B5KQpAQCAtMCww
ICsxLDEwMyBAQAorLyoKKyAqIENvcHlyaWdodCAoQykgMjAxNyBBcHBsZSBJbmMuIEFsbCByaWdo
dHMgcmVzZXJ2ZWQuCisgKgorICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5k
IGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CisgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJt
aXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKKyAqIGFyZSBtZXQ6
CisgKiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFi
b3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQg
dGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgorICogMi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFy
eSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwg
dGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0
aGUKKyAqICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3
aXRoIHRoZSBkaXN0cmlidXRpb24uCisgKgorICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBC
WSBBUFBMRSBJTkMuIEFORCBJVFMgQ09OVFJJQlVUT1JTIGBgQVMgSVMnJworICogQU5EIEFOWSBF
WFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQg
VE8sCisgKiBUSEUgSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklU
TkVTUyBGT1IgQSBQQVJUSUNVTEFSCisgKiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiBJTiBOTyBF
VkVOVCBTSEFMTCBBUFBMRSBJTkMuIE9SIElUUyBDT05UUklCVVRPUlMKKyAqIEJFIExJQUJMRSBG
T1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsIEVYRU1QTEFSWSwg
T1IKKyAqIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQg
VE8sIFBST0NVUkVNRU5UIE9GCisgKiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NT
IE9GIFVTRSwgREFUQSwgT1IgUFJPRklUUzsgT1IgQlVTSU5FU1MKKyAqIElOVEVSUlVQVElPTikg
SE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkgT0YgTElBQklMSVRZLCBXSEVUSEVSIElO
CisgKiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVCAoSU5DTFVESU5HIE5FR0xJ
R0VOQ0UgT1IgT1RIRVJXSVNFKQorICogQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNF
IE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRgorICogVEhFIFBPU1NJQklMSVRZ
IE9GIFNVQ0ggREFNQUdFLgorICovCisKKyNpbmNsdWRlICJjb25maWcuaCIKKyNpbmNsdWRlICJN
dWx0aXRocmVhZGVkTXVsdGlWTUV4ZWN1dGlvblRlc3QuaCIKKworI2luY2x1ZGUgIkluaXRpYWxp
emVUaHJlYWRpbmcuaCIKKyNpbmNsdWRlICJKU0NvbnRleHRSZWZQcml2YXRlLmgiCisjaW5jbHVk
ZSAiSmF2YVNjcmlwdENvcmUuaCIKKyNpbmNsdWRlICJPcHRpb25zLmgiCisjaW5jbHVkZSA8bXV0
ZXg+CisjaW5jbHVkZSA8c3RyaW5nPgorI2luY2x1ZGUgPHRocmVhZD4KKyNpbmNsdWRlIDx2ZWN0
b3I+CisKK3N0YXRpYyBpbnQgZmFpbHVyZXNGb3VuZCA9IDA7CisKK3N0YXRpYyBzdGQ6OnZlY3Rv
cjxzdGQ6OnRocmVhZD4mIHRocmVhZHNMaXN0KCkKK3sKKyAgICBzdGF0aWMgc3RkOjp2ZWN0b3I8
c3RkOjp0aHJlYWQ+KiBsaXN0OworICAgIHN0YXRpYyBzdGQ6Om9uY2VfZmxhZyBmbGFnOworICAg
IHN0ZDo6Y2FsbF9vbmNlKGZsYWcsIFtdICgpIHsKKyAgICAgICAgbGlzdCA9IG5ldyBzdGQ6OnZl
Y3RvcjxzdGQ6OnRocmVhZD4oKTsKKyAgICB9KTsKKyAgICByZXR1cm4gKmxpc3Q7Cit9CisKK3Zv
aWQgc3RhcnRNdWx0aXRocmVhZGVkTXVsdGlWTUV4ZWN1dGlvblRlc3QoKQoreworICAgIEpTQzo6
aW5pdGlhbGl6ZVRocmVhZGluZygpOworCisjZGVmaW5lIENIRUNLKGNvbmRpdGlvbiwgbWVzc2Fn
ZSkgZG8geyBcCisgICAgICAgIGlmICghY29uZGl0aW9uKSB7IFwKKyAgICAgICAgICAgIHByaW50
ZigiRkFJTEVEIE11bHRpdGhyZWFkZWRNdWx0aVZNRXhlY3V0aW9uVGVzdDogJXNcbiIsIG1lc3Nh
Z2UpOyBcCisgICAgICAgICAgICBmYWlsdXJlc0ZvdW5kKys7IFwKKyAgICAgICAgfSBcCisgICAg
fSB3aGlsZSAoZmFsc2UpCisKKyAgICBhdXRvIHRhc2sgPSBbJl0oKSB7CisgICAgICAgIGludCBy
ZXQgPSAwOworICAgICAgICBzdGQ6OnN0cmluZyBzY3JpcHRTdHJpbmcgPQorICAgICAgICAgICAg
ImNvbnN0IEFBQSA9IHtBOjAsIEI6MSwgQzoyLCBEOjN9OyIKKyAgICAgICAgICAgICJjbGFzcyBQ
cmVjb25kaXRpb25zIHsgc3RhdGljIGNoZWNrQXJndW1lbnQoZSx0KSB7IGlmICghZSkgdGhyb3cg
dCB9fTsiCisgICAgICAgICAgICAiMSArIDIiOworCisgICAgICAgIGZvciAoaW50IGkgPSAwOyBp
IDwgMTAwMDsgKytpKSB7CisgICAgICAgICAgICBKU0NsYXNzUmVmIGpzQ2xhc3MgPSBKU0NsYXNz
Q3JlYXRlKCZrSlNDbGFzc0RlZmluaXRpb25FbXB0eSk7CisgICAgICAgICAgICBDSEVDSyhqc0Ns
YXNzLCAiZ2xvYmFsIG9iamVjdCBjbGFzcyBjcmVhdGlvbiIpOworICAgICAgICAgICAgSlNDb250
ZXh0R3JvdXBSZWYgY29udGV4dEdyb3VwID0gSlNDb250ZXh0R3JvdXBDcmVhdGUoKTsKKyAgICAg
ICAgICAgIENIRUNLKGNvbnRleHRHcm91cCwgImdyb3VwIGNyZWF0aW9uIik7CisgICAgICAgICAg
ICBKU0dsb2JhbENvbnRleHRSZWYgY29udGV4dCA9IEpTR2xvYmFsQ29udGV4dENyZWF0ZUluR3Jv
dXAoY29udGV4dEdyb3VwLCBqc0NsYXNzKTsKKyAgICAgICAgICAgIENIRUNLKGNvbnRleHQsICJj
dHggY3JlYXRpb24iKTsKKworICAgICAgICAgICAgSlNTdHJpbmdSZWYganNTY3JpcHRTdHJpbmcg
PSBKU1N0cmluZ0NyZWF0ZVdpdGhVVEY4Q1N0cmluZyhzY3JpcHRTdHJpbmcuY19zdHIoKSk7Cisg
ICAgICAgICAgICBDSEVDSyhqc1NjcmlwdFN0cmluZywgInNjcmlwdCB0byBqc1N0cmluZyIpOwor
CisgICAgICAgICAgICBKU1ZhbHVlUmVmIGpzU2NyaXB0ID0gSlNFdmFsdWF0ZVNjcmlwdChjb250
ZXh0LCBqc1NjcmlwdFN0cmluZywgbnVsbHB0ciwgbnVsbHB0ciwgMCwgbnVsbHB0cik7CisgICAg
ICAgICAgICBDSEVDSyhqc1NjcmlwdCwgInNjcmlwdCBldmFsIik7CisgICAgICAgICAgICBKU1N0
cmluZ1JlbGVhc2UoanNTY3JpcHRTdHJpbmcpOworCisgICAgICAgICAgICBKU0dsb2JhbENvbnRl
eHRSZWxlYXNlKGNvbnRleHQpOworICAgICAgICAgICAgSlNDb250ZXh0R3JvdXBSZWxlYXNlKGNv
bnRleHRHcm91cCk7CisgICAgICAgICAgICBKU0NsYXNzUmVsZWFzZShqc0NsYXNzKTsKKyAgICAg
ICAgfQorCisgICAgICAgIHJldHVybiByZXQ7CisgICAgfTsKKyAgICBmb3IgKGludCB0ID0gMDsg
dCA8IDg7ICsrdCkKKyAgICAgICAgdGhyZWFkc0xpc3QoKS5wdXNoX2JhY2soc3RkOjp0aHJlYWQo
dGFzaykpOworfQorCitpbnQgZmluYWxpemVNdWx0aXRocmVhZGVkTXVsdGlWTUV4ZWN1dGlvblRl
c3QoKQoreworICAgIGF1dG8mIHRocmVhZHMgPSB0aHJlYWRzTGlzdCgpOworICAgIGZvciAoYXV0
byYgdGhyZWFkIDogdGhyZWFkcykKKyAgICAgICAgdGhyZWFkLmpvaW4oKTsKKworICAgIGlmIChm
YWlsdXJlc0ZvdW5kKQorICAgICAgICBwcmludGYoIkZBSUxFRCBNdWx0aXRocmVhZGVkTXVsdGlW
TUV4ZWN1dGlvblRlc3RcbiIpOworICAgIHJldHVybiAoZmFpbHVyZXNGb3VuZCA+IDApOworfQpJ
bmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL0FQSS90ZXN0cy9NdWx0aXRocmVhZGVkTXVsdGlW
TUV4ZWN1dGlvblRlc3QuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvQVBJ
L3Rlc3RzL011bHRpdGhyZWFkZWRNdWx0aVZNRXhlY3V0aW9uVGVzdC5oCShub25leGlzdGVudCkK
KysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9BUEkvdGVzdHMvTXVsdGl0aHJlYWRlZE11bHRpVk1F
eGVjdXRpb25UZXN0LmgJKHdvcmtpbmcgY29weSkKQEAgLTAsMCArMSwzOSBAQAorLyoKKyAqIENv
cHlyaWdodCAoQykgMjAxNyBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKgorICog
UmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBv
ciB3aXRob3V0CisgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0
aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKKyAqIGFyZSBtZXQ6CisgKiAxLiBSZWRpc3RyaWJ1dGlv
bnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAg
bm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFp
bWVyLgorICogMi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNl
IHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlv
bnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKKyAqICAgIGRvY3VtZW50YXRp
b24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24u
CisgKgorICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBBUFBMRSBJTkMuIEFORCBJVFMg
Q09OVFJJQlVUT1JTIGBgQVMgSVMnJworICogQU5EIEFOWSBFWFBSRVNTIE9SIElNUExJRUQgV0FS
UkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sCisgKiBUSEUgSU1QTElFRCBX
QVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFS
CisgKiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBJTkMu
IE9SIElUUyBDT05UUklCVVRPUlMKKyAqIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJF
Q1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IKKyAqIENPTlNFUVVFTlRJQUwg
REFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFBST0NVUkVNRU5UIE9GCisg
KiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IgUFJP
RklUUzsgT1IgQlVTSU5FU1MKKyAqIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9O
IEFOWSBUSEVPUlkgT0YgTElBQklMSVRZLCBXSEVUSEVSIElOCisgKiBDT05UUkFDVCwgU1RSSUNU
IExJQUJJTElUWSwgT1IgVE9SVCAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKQor
ICogQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFIE9GIFRISVMgU09GVFdBUkUsIEVW
RU4gSUYgQURWSVNFRCBPRgorICogVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgorICov
CisKKyNwcmFnbWEgb25jZQorCisjaWZkZWYgX19jcGx1c3BsdXMKK2V4dGVybiAiQyIgeworI2Vu
ZGlmCisKK2V4dGVybiB2b2lkIHN0YXJ0TXVsdGl0aHJlYWRlZE11bHRpVk1FeGVjdXRpb25UZXN0
KCk7CisKKy8qIFJldHVybnMgMSBpZiBmYWlsdXJlcyB3ZXJlIGVuY291bnRlcmVkLiAgRWxzZSwg
cmV0dXJucyAwLiAqLworZXh0ZXJuIGludCBmaW5hbGl6ZU11bHRpdGhyZWFkZWRNdWx0aVZNRXhl
Y3V0aW9uVGVzdCgpOworCisjaWZkZWYgX19jcGx1c3BsdXMKK30gLyogZXh0ZXJuICJDIiAqLwor
I2VuZGlmCkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvQVBJL3Rlc3RzL3Rlc3RhcGkuYwo9
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvQVBJL3Rlc3RzL3Rlc3RhcGkuYwko
cmV2aXNpb24gMjE1OTE5KQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL0FQSS90ZXN0cy90ZXN0
YXBpLmMJKHdvcmtpbmcgY29weSkKQEAgLTEsNSArMSw1IEBACiAvKgotICogQ29weXJpZ2h0IChD
KSAyMDA2LCAyMDE1LTIwMTYgQXBwbGUgSW5jLiAgQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqIENv
cHlyaWdodCAoQykgMjAwNi0yMDE3IEFwcGxlIEluYy4gIEFsbCByaWdodHMgcmVzZXJ2ZWQuCiAg
KgogICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywg
d2l0aCBvciB3aXRob3V0CiAgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQg
dGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKQEAgLTQ1LDYgKzQ1LDcgQEAKICNpbmNsdWRl
ICJGdW5jdGlvbk92ZXJyaWRlc1Rlc3QuaCIKICNpbmNsdWRlICJHbG9iYWxDb250ZXh0V2l0aEZp
bmFsaXplclRlc3QuaCIKICNpbmNsdWRlICJKU09OUGFyc2VUZXN0LmgiCisjaW5jbHVkZSAiTXVs
dGl0aHJlYWRlZE11bHRpVk1FeGVjdXRpb25UZXN0LmgiCiAjaW5jbHVkZSAiUGluZ1BvbmdTdGFj
a092ZXJmbG93VGVzdC5oIgogI2luY2x1ZGUgIlR5cGVkQXJyYXlDVGVzdC5oIgogCkBAIC0xMTI1
LDYgKzExMjYsNyBAQCBpbnQgbWFpbihpbnQgYXJnYywgY2hhciogYXJndltdKQogI2VuZGlmCiAK
ICAgICB0ZXN0Q29tcGFyZUFuZFN3YXAoKTsKKyAgICBzdGFydE11bHRpdGhyZWFkZWRNdWx0aVZN
RXhlY3V0aW9uVGVzdCgpOwogCiAjaWYgSlNDX09CSkNfQVBJX0VOQUJMRUQKICAgICB0ZXN0T2Jq
ZWN0aXZlQ0FQSSgpOwpAQCAtMTk0MSw2ICsxOTQzLDggQEAgaW50IG1haW4oaW50IGFyZ2MsIGNo
YXIqIGFyZ3ZbXSkKICAgICBnbG9iYWxPYmplY3RTZXRQcm90b3R5cGVUZXN0KCk7CiAgICAgZ2xv
YmFsT2JqZWN0UHJpdmF0ZVByb3BlcnR5VGVzdCgpOwogCisgICAgZmFpbGVkID0gZmluYWxpemVN
dWx0aXRocmVhZGVkTXVsdGlWTUV4ZWN1dGlvblRlc3QoKSB8fCBmYWlsZWQ7CisKICAgICBpZiAo
ZmFpbGVkKSB7CiAgICAgICAgIHByaW50ZigiRkFJTDogU29tZSB0ZXN0cyBmYWlsZWQuXG4iKTsK
ICAgICAgICAgcmV0dXJuIDE7CkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvSmF2YVNjcmlw
dENvcmUueGNvZGVwcm9qL3Byb2plY3QucGJ4cHJvago9PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2
YVNjcmlwdENvcmUvSmF2YVNjcmlwdENvcmUueGNvZGVwcm9qL3Byb2plY3QucGJ4cHJvagkocmV2
aXNpb24gMjE1OTE5KQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL0phdmFTY3JpcHRDb3JlLnhj
b2RlcHJvai9wcm9qZWN0LnBieHByb2oJKHdvcmtpbmcgY29weSkKQEAgLTI0ODgsNiArMjQ4OCw3
IEBACiAJCUZFRDk0RjJFMTcxRTNFMjMwMEJFNzdBNCAvKiBXYXRjaGRvZy5jcHAgaW4gU291cmNl
cyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSBGRUQ5NEYyQjE3MUUzRTIzMDBC
RTc3QTQgLyogV2F0Y2hkb2cuY3BwICovOyB9OwogCQlGRUQ5NEYyRjE3MUUzRTIzMDBCRTc3QTQg
LyogV2F0Y2hkb2cuaCBpbiBIZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJl
ZiA9IEZFRDk0RjJDMTcxRTNFMjMwMEJFNzdBNCAvKiBXYXRjaGRvZy5oICovOyBzZXR0aW5ncyA9
IHtBVFRSSUJVVEVTID0gKFByaXZhdGUsICk7IH07IH07CiAJCUZFRjA0MDUxMUFBRTY2MkQwMEJE
MjhCMCAvKiBDb21wYXJlQW5kU3dhcFRlc3QuY3BwIGluIFNvdXJjZXMgKi8gPSB7aXNhID0gUEJY
QnVpbGRGaWxlOyBmaWxlUmVmID0gRkVGMDQwNTAxQUFFNjYyRDAwQkQyOEIwIC8qIENvbXBhcmVB
bmRTd2FwVGVzdC5jcHAgKi87IH07CisJCUZFRjQ5QUFCMUVCOTQ4NEIwMDY1M0JEQiAvKiBNdWx0
aXRocmVhZGVkTXVsdGlWTUV4ZWN1dGlvblRlc3QuY3BwIGluIFNvdXJjZXMgKi8gPSB7aXNhID0g
UEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gRkVGNDlBQTkxRUI5NDdGRTAwNjUzQkRCIC8qIE11bHRp
dGhyZWFkZWRNdWx0aVZNRXhlY3V0aW9uVGVzdC5jcHAgKi87IH07CiAJCUZFRkQ2RkM2MUQ1RTc5
OTIwMDhGMkYwQiAvKiBKU1N0cmluZ0lubGluZXMuaCBpbiBIZWFkZXJzICovID0ge2lzYSA9IFBC
WEJ1aWxkRmlsZTsgZmlsZVJlZiA9IEZFRkQ2RkM1MUQ1RTc5NzAwMDhGMkYwQiAvKiBKU1N0cmlu
Z0lubGluZXMuaCAqLzsgc2V0dGluZ3MgPSB7QVRUUklCVVRFUyA9IChQcml2YXRlLCApOyB9OyB9
OwogLyogRW5kIFBCWEJ1aWxkRmlsZSBzZWN0aW9uICovCiAKQEAgLTUxMzQsNiArNTEzNSw4IEBA
CiAJCUZFREE1MEQ1MUI5N0Y0RDkwMDlBM0I0RiAvKiBQaW5nUG9uZ1N0YWNrT3ZlcmZsb3dUZXN0
LmggKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtu
b3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsgbmFtZSA9IFBpbmdQb25nU3RhY2tPdmVyZmxv
d1Rlc3QuaDsgcGF0aCA9IEFQSS90ZXN0cy9QaW5nUG9uZ1N0YWNrT3ZlcmZsb3dUZXN0Lmg7IHNv
dXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CiAJCUZFRjA0MDUwMUFBRTY2MkQwMEJEMjhCMCAvKiBD
b21wYXJlQW5kU3dhcFRlc3QuY3BwICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVF
bmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jcHAuY3BwOyBuYW1l
ID0gQ29tcGFyZUFuZFN3YXBUZXN0LmNwcDsgcGF0aCA9IEFQSS90ZXN0cy9Db21wYXJlQW5kU3dh
cFRlc3QuY3BwOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwogCQlGRUYwNDA1MjFBQUVDNEVE
MDBCRDI4QjAgLyogQ29tcGFyZUFuZFN3YXBUZXN0LmggKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVy
ZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMu
aDsgbmFtZSA9IENvbXBhcmVBbmRTd2FwVGVzdC5oOyBwYXRoID0gQVBJL3Rlc3RzL0NvbXBhcmVB
bmRTd2FwVGVzdC5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OworCQlGRUY0OUFBOTFFQjk0
N0ZFMDA2NTNCREIgLyogTXVsdGl0aHJlYWRlZE11bHRpVk1FeGVjdXRpb25UZXN0LmNwcCAqLyA9
IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxl
VHlwZSA9IHNvdXJjZWNvZGUuY3BwLmNwcDsgbmFtZSA9IE11bHRpdGhyZWFkZWRNdWx0aVZNRXhl
Y3V0aW9uVGVzdC5jcHA7IHBhdGggPSBBUEkvdGVzdHMvTXVsdGl0aHJlYWRlZE11bHRpVk1FeGVj
dXRpb25UZXN0LmNwcDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKKwkJRkVGNDlBQUExRUI5
NDdGRTAwNjUzQkRCIC8qIE11bHRpdGhyZWFkZWRNdWx0aVZNRXhlY3V0aW9uVGVzdC5oICovID0g
e2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVU
eXBlID0gc291cmNlY29kZS5jLmg7IG5hbWUgPSBNdWx0aXRocmVhZGVkTXVsdGlWTUV4ZWN1dGlv
blRlc3QuaDsgcGF0aCA9IEFQSS90ZXN0cy9NdWx0aXRocmVhZGVkTXVsdGlWTUV4ZWN1dGlvblRl
c3QuaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKIAkJRkVGRDZGQzUxRDVFNzk3MDAwOEYy
RjBCIC8qIEpTU3RyaW5nSW5saW5lcy5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZp
bGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7IHBhdGgg
PSBKU1N0cmluZ0lubGluZXMuaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKIC8qIEVuZCBQ
QlhGaWxlUmVmZXJlbmNlIHNlY3Rpb24gKi8KIApAQCAtNTc2OCw2ICs1NzcxLDggQEAKIAkJCQlD
MjE4MUZDMTE4QTk0OEZCMDAyNUEyMzUgLyogSlNFeHBvcnRUZXN0cy5tbSAqLywKIAkJCQk1QzRF
OEU5NDFEQkVCREEyMDAzNkYxRkMgLyogSlNPTlBhcnNlVGVzdC5jcHAgKi8sCiAJCQkJNUM0RThF
OTUxREJFQkRBMjAwMzZGMUZDIC8qIEpTT05QYXJzZVRlc3QuaCAqLywKKwkJCQlGRUY0OUFBOTFF
Qjk0N0ZFMDA2NTNCREIgLyogTXVsdGl0aHJlYWRlZE11bHRpVk1FeGVjdXRpb25UZXN0LmNwcCAq
LywKKwkJCQlGRUY0OUFBQTFFQjk0N0ZFMDA2NTNCREIgLyogTXVsdGl0aHJlYWRlZE11bHRpVk1F
eGVjdXRpb25UZXN0LmggKi8sCiAJCQkJMTQ0MDA1MTcwQTUzMUNCNTAwMDVGMDYxIC8qIG1pbmlk
b20gKi8sCiAJCQkJRkVEQTUwRDQxQjk3RjQ0MjAwOUEzQjRGIC8qIFBpbmdQb25nU3RhY2tPdmVy
Zmxvd1Rlc3QuY3BwICovLAogCQkJCUZFREE1MEQ1MUI5N0Y0RDkwMDlBM0I0RiAvKiBQaW5nUG9u
Z1N0YWNrT3ZlcmZsb3dUZXN0LmggKi8sCkBAIC0xMDAyMSw2ICsxMDAyNiw3IEBACiAJCQkJRkUw
RDRBMDYxQUI4REQwQTAwMkY1NEJGIC8qIEV4ZWN1dGlvblRpbWVMaW1pdFRlc3QuY3BwIGluIFNv
dXJjZXMgKi8sCiAJCQkJRkVDQjhCMjcxRDI1QkI4NTAwNkYyNDYzIC8qIEZ1bmN0aW9uT3ZlcnJp
ZGVzVGVzdC5jcHAgaW4gU291cmNlcyAqLywKIAkJCQlGRTBENEEwOTFBQkEyNDM3MDAyRjU0QkYg
LyogR2xvYmFsQ29udGV4dFdpdGhGaW5hbGl6ZXJUZXN0LmNwcCBpbiBTb3VyY2VzICovLAorCQkJ
CUZFRjQ5QUFCMUVCOTQ4NEIwMDY1M0JEQiAvKiBNdWx0aXRocmVhZGVkTXVsdGlWTUV4ZWN1dGlv
blRlc3QuY3BwIGluIFNvdXJjZXMgKi8sCiAJCQkJQzIxODFGQzIxOEE5NDhGQjAwMjVBMjM1IC8q
IEpTRXhwb3J0VGVzdHMubW0gaW4gU291cmNlcyAqLywKIAkJCQk1QzRFOEU5NjFEQkVCRTYyMDAz
NkYxRkMgLyogSlNPTlBhcnNlVGVzdC5jcHAgaW4gU291cmNlcyAqLywKIAkJCQlGRTdDNDE5NjFC
OTdGQzRCMDBGNEQ1OTggLyogUGluZ1BvbmdTdGFja092ZXJmbG93VGVzdC5jcHAgaW4gU291cmNl
cyAqLywKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9idWlsdGlucy9CdWlsdGluRXhlY3V0
YWJsZXMuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9idWlsdGlucy9C
dWlsdGluRXhlY3V0YWJsZXMuY3BwCShyZXZpc2lvbiAyMTU5MTkpCisrKyBTb3VyY2UvSmF2YVNj
cmlwdENvcmUvYnVpbHRpbnMvQnVpbHRpbkV4ZWN1dGFibGVzLmNwcAkod29ya2luZyBjb3B5KQpA
QCAtMSw1ICsxLDUgQEAKIC8qCi0gKiBDb3B5cmlnaHQgKEMpIDIwMTQgQXBwbGUgSW5jLiBBbGwg
cmlnaHRzIHJlc2VydmVkLgorICogQ29weXJpZ2h0IChDKSAyMDE0LTIwMTcgQXBwbGUgSW5jLiBB
bGwgcmlnaHRzIHJlc2VydmVkLgogICoKICAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291
cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAogICogbW9kaWZpY2F0aW9uLCBh
cmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCkBAIC00
NCw4ICs0NCw4IEBAIEJ1aWx0aW5FeGVjdXRhYmxlczo6QnVpbHRpbkV4ZWN1dGFibGVzKFYKIAog
VW5saW5rZWRGdW5jdGlvbkV4ZWN1dGFibGUqIEJ1aWx0aW5FeGVjdXRhYmxlczo6Y3JlYXRlRGVm
YXVsdENvbnN0cnVjdG9yKENvbnN0cnVjdG9yS2luZCBjb25zdHJ1Y3RvcktpbmQsIGNvbnN0IElk
ZW50aWZpZXImIG5hbWUpCiB7Ci0gICAgc3RhdGljIE5ldmVyRGVzdHJveWVkPGNvbnN0IFN0cmlu
Zz4gYmFzZUNvbnN0cnVjdG9yQ29kZShBU0NJSUxpdGVyYWwoIihmdW5jdGlvbiAoKSB7IH0pIikp
OwotICAgIHN0YXRpYyBOZXZlckRlc3Ryb3llZDxjb25zdCBTdHJpbmc+IGRlcml2ZWRDb25zdHJ1
Y3RvckNvZGUoQVNDSUlMaXRlcmFsKCIoZnVuY3Rpb24gKC4uLmFyZ3MpIHsgc3VwZXIoLi4uYXJn
cyk7IH0pIikpOworICAgIHN0YXRpYyBOZXZlckRlc3Ryb3llZDxjb25zdCBTdHJpbmc+IGJhc2VD
b25zdHJ1Y3RvckNvZGUoU3RhdGljQVNDSUlMaXRlcmFsKCIoZnVuY3Rpb24gKCkgeyB9KSIpKTsK
KyAgICBzdGF0aWMgTmV2ZXJEZXN0cm95ZWQ8Y29uc3QgU3RyaW5nPiBkZXJpdmVkQ29uc3RydWN0
b3JDb2RlKFN0YXRpY0FTQ0lJTGl0ZXJhbCgiKGZ1bmN0aW9uICguLi5hcmdzKSB7IHN1cGVyKC4u
LmFyZ3MpOyB9KSIpKTsKIAogICAgIHN3aXRjaCAoY29uc3RydWN0b3JLaW5kKSB7CiAgICAgY2Fz
ZSBDb25zdHJ1Y3RvcktpbmQ6Ok5vbmU6CkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaW5z
cGVjdG9yL2FnZW50cy9JbnNwZWN0b3JEZWJ1Z2dlckFnZW50LmNwcAo9PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBT
b3VyY2UvSmF2YVNjcmlwdENvcmUvaW5zcGVjdG9yL2FnZW50cy9JbnNwZWN0b3JEZWJ1Z2dlckFn
ZW50LmNwcAkocmV2aXNpb24gMjE1OTE5KQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL2luc3Bl
Y3Rvci9hZ2VudHMvSW5zcGVjdG9yRGVidWdnZXJBZ2VudC5jcHAJKHdvcmtpbmcgY29weSkKQEAg
LTEsNSArMSw1IEBACiAvKgotICogQ29weXJpZ2h0IChDKSAyMDEwLCAyMDEzLCAyMDE1IEFwcGxl
IEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqIENvcHlyaWdodCAoQykgMjAxMC0yMDE3IEFw
cGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KICAqIENvcHlyaWdodCAoQykgMjAxMCwgMjAx
MSBHb29nbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgogICoKICAqIFJlZGlzdHJpYnV0aW9u
IGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dApAQCAt
NTYsNyArNTYsNyBAQCBjb25zdCBjaGFyKiBJbnNwZWN0b3JEZWJ1Z2dlckFnZW50OjpiYWNrCiAv
LyBjcmVhdGUgb2JqZWN0cyBpbiB0aGUgc2FtZSBncm91cC4KIHN0YXRpYyBTdHJpbmcgb2JqZWN0
R3JvdXBGb3JCcmVha3BvaW50QWN0aW9uKGNvbnN0IFNjcmlwdEJyZWFrcG9pbnRBY3Rpb24mIGFj
dGlvbikKIHsKLSAgICBzdGF0aWMgTmV2ZXJEZXN0cm95ZWQ8U3RyaW5nPiBvYmplY3RHcm91cChB
U0NJSUxpdGVyYWwoImJyZWFrcG9pbnQtYWN0aW9uLSIpKTsKKyAgICBzdGF0aWMgTmV2ZXJEZXN0
cm95ZWQ8U3RyaW5nPiBvYmplY3RHcm91cChTdGF0aWNBU0NJSUxpdGVyYWwoImJyZWFrcG9pbnQt
YWN0aW9uLSIpKTsKICAgICByZXR1cm4gbWFrZVN0cmluZyhvYmplY3RHcm91cC5nZXQoKSwgU3Ry
aW5nOjpudW1iZXIoYWN0aW9uLmlkZW50aWZpZXIpKTsKIH0KIApJbmRleDogU291cmNlL0phdmFT
Y3JpcHRDb3JlL3JlcGxheS9zY3JpcHRzL0NvZGVHZW5lcmF0b3JSZXBsYXlJbnB1dHNUZW1wbGF0
ZXMucHkKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL3JlcGxheS9zY3JpcHRz
L0NvZGVHZW5lcmF0b3JSZXBsYXlJbnB1dHNUZW1wbGF0ZXMucHkJKHJldmlzaW9uIDIxNTkxOSkK
KysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9yZXBsYXkvc2NyaXB0cy9Db2RlR2VuZXJhdG9yUmVw
bGF5SW5wdXRzVGVtcGxhdGVzLnB5CSh3b3JraW5nIGNvcHkpCkBAIC0xLDcgKzEsNyBAQAogIyEv
dXNyL2Jpbi9lbnYgcHl0aG9uCiAjIENvcHlyaWdodCAoYykgMjAxMSBHb29nbGUgSW5jLiBBbGwg
cmlnaHRzIHJlc2VydmVkLgogIyBDb3B5cmlnaHQgKGMpIDIwMTIgSW50ZWwgQ29ycG9yYXRpb24u
IEFsbCByaWdodHMgcmVzZXJ2ZWQuCi0jIENvcHlyaWdodCAoYykgMjAxMywgMjAxNCwgMjAxNiBB
cHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisjIENvcHlyaWdodCAoYykgMjAxMy0yMDE3
IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KICMKICMgUmVkaXN0cmlidXRpb24gYW5k
IHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CiAjIG1vZGlm
aWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0
aW9ucyBhcmUKQEAgLTE1MCw3ICsxNTAsNyBAQCAke2VudW1lcmFibGVUeXBlVHJhaXRJbXBsZW1l
bnRhdGlvbnN9CiAgICAgSW5wdXRUcmFpdHNJbXBsZW1lbnRhdGlvbiA9ICgKICAgICAiIiJjb25z
dCBTdHJpbmcmIElucHV0VHJhaXRzPCR7cXVhbGlmaWVkSW5wdXROYW1lfT46OnR5cGUoKQogewot
ICAgIHN0YXRpYyBOZXZlckRlc3Ryb3llZDxjb25zdCBTdHJpbmc+IHR5cGUoQVNDSUlMaXRlcmFs
KCR7aW5wdXROYW1lU3RyaW5nTGl0ZXJhbH0pKTsKKyAgICBzdGF0aWMgTmV2ZXJEZXN0cm95ZWQ8
Y29uc3QgU3RyaW5nPiB0eXBlKFN0YXRpY0FTQ0lJTGl0ZXJhbCgke2lucHV0TmFtZVN0cmluZ0xp
dGVyYWx9KSk7CiAgICAgcmV0dXJuIHR5cGU7CiB9CiAKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0
Q29yZS9yZXBsYXkvc2NyaXB0cy90ZXN0cy9leHBlY3RlZC9nZW5lcmF0ZS1lbnVtLWVuY29kaW5n
LWhlbHBlcnMtd2l0aC1ndWFyZGVkLXZhbHVlcy5qc29uLVRlc3RSZXBsYXlJbnB1dHMuY3BwCj09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9yZXBsYXkvc2NyaXB0cy90ZXN0cy9l
eHBlY3RlZC9nZW5lcmF0ZS1lbnVtLWVuY29kaW5nLWhlbHBlcnMtd2l0aC1ndWFyZGVkLXZhbHVl
cy5qc29uLVRlc3RSZXBsYXlJbnB1dHMuY3BwCShyZXZpc2lvbiAyMTU5MTkpCisrKyBTb3VyY2Uv
SmF2YVNjcmlwdENvcmUvcmVwbGF5L3NjcmlwdHMvdGVzdHMvZXhwZWN0ZWQvZ2VuZXJhdGUtZW51
bS1lbmNvZGluZy1oZWxwZXJzLXdpdGgtZ3VhcmRlZC12YWx1ZXMuanNvbi1UZXN0UmVwbGF5SW5w
dXRzLmNwcAkod29ya2luZyBjb3B5KQpAQCAtNTAsNyArNTAsNyBAQCBTYXZlZE1vdXNlQnV0dG9u
Ojp+U2F2ZWRNb3VzZUJ1dHRvbigpCiBuYW1lc3BhY2UgSlNDIHsKIGNvbnN0IFN0cmluZyYgSW5w
dXRUcmFpdHM8VGVzdDo6U2F2ZWRNb3VzZUJ1dHRvbj46OnR5cGUoKQogewotICAgIHN0YXRpYyBO
ZXZlckRlc3Ryb3llZDxjb25zdCBTdHJpbmc+IHR5cGUoQVNDSUlMaXRlcmFsKCJTYXZlZE1vdXNl
QnV0dG9uIikpOworICAgIHN0YXRpYyBOZXZlckRlc3Ryb3llZDxjb25zdCBTdHJpbmc+IHR5cGUo
U3RhdGljQVNDSUlMaXRlcmFsKCJTYXZlZE1vdXNlQnV0dG9uIikpOwogICAgIHJldHVybiB0eXBl
OwogfQogCkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcmVwbGF5L3NjcmlwdHMvdGVzdHMv
ZXhwZWN0ZWQvZ2VuZXJhdGUtZW51bS1lbmNvZGluZy1oZWxwZXJzLmpzb24tVGVzdFJlcGxheUlu
cHV0cy5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL3JlcGxheS9zY3Jp
cHRzL3Rlc3RzL2V4cGVjdGVkL2dlbmVyYXRlLWVudW0tZW5jb2RpbmctaGVscGVycy5qc29uLVRl
c3RSZXBsYXlJbnB1dHMuY3BwCShyZXZpc2lvbiAyMTU5MTkpCisrKyBTb3VyY2UvSmF2YVNjcmlw
dENvcmUvcmVwbGF5L3NjcmlwdHMvdGVzdHMvZXhwZWN0ZWQvZ2VuZXJhdGUtZW51bS1lbmNvZGlu
Zy1oZWxwZXJzLmpzb24tVGVzdFJlcGxheUlucHV0cy5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTUx
LDcgKzUxLDcgQEAgU2F2ZWRNb3VzZUJ1dHRvbjo6flNhdmVkTW91c2VCdXR0b24oKQogbmFtZXNw
YWNlIEpTQyB7CiBjb25zdCBTdHJpbmcmIElucHV0VHJhaXRzPFRlc3Q6OlNhdmVkTW91c2VCdXR0
b24+Ojp0eXBlKCkKIHsKLSAgICBzdGF0aWMgTmV2ZXJEZXN0cm95ZWQ8Y29uc3QgU3RyaW5nPiB0
eXBlKEFTQ0lJTGl0ZXJhbCgiU2F2ZWRNb3VzZUJ1dHRvbiIpKTsKKyAgICBzdGF0aWMgTmV2ZXJE
ZXN0cm95ZWQ8Y29uc3QgU3RyaW5nPiB0eXBlKFN0YXRpY0FTQ0lJTGl0ZXJhbCgiU2F2ZWRNb3Vz
ZUJ1dHRvbiIpKTsKICAgICByZXR1cm4gdHlwZTsKIH0KIApJbmRleDogU291cmNlL0phdmFTY3Jp
cHRDb3JlL3JlcGxheS9zY3JpcHRzL3Rlc3RzL2V4cGVjdGVkL2dlbmVyYXRlLWVudW0td2l0aC1n
dWFyZC5qc29uLVRlc3RSZXBsYXlJbnB1dHMuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZh
U2NyaXB0Q29yZS9yZXBsYXkvc2NyaXB0cy90ZXN0cy9leHBlY3RlZC9nZW5lcmF0ZS1lbnVtLXdp
dGgtZ3VhcmQuanNvbi1UZXN0UmVwbGF5SW5wdXRzLmNwcAkocmV2aXNpb24gMjE1OTE5KQorKysg
U291cmNlL0phdmFTY3JpcHRDb3JlL3JlcGxheS9zY3JpcHRzL3Rlc3RzL2V4cGVjdGVkL2dlbmVy
YXRlLWVudW0td2l0aC1ndWFyZC5qc29uLVRlc3RSZXBsYXlJbnB1dHMuY3BwCSh3b3JraW5nIGNv
cHkpCkBAIC01Miw3ICs1Miw3IEBAIEhhbmRsZVdoZWVsRXZlbnQ6On5IYW5kbGVXaGVlbEV2ZW50
KCkKIG5hbWVzcGFjZSBKU0MgewogY29uc3QgU3RyaW5nJiBJbnB1dFRyYWl0czxUZXN0OjpIYW5k
bGVXaGVlbEV2ZW50Pjo6dHlwZSgpCiB7Ci0gICAgc3RhdGljIE5ldmVyRGVzdHJveWVkPGNvbnN0
IFN0cmluZz4gdHlwZShBU0NJSUxpdGVyYWwoIkhhbmRsZVdoZWVsRXZlbnQiKSk7CisgICAgc3Rh
dGljIE5ldmVyRGVzdHJveWVkPGNvbnN0IFN0cmluZz4gdHlwZShTdGF0aWNBU0NJSUxpdGVyYWwo
IkhhbmRsZVdoZWVsRXZlbnQiKSk7CiAgICAgcmV0dXJuIHR5cGU7CiB9CiAKSW5kZXg6IFNvdXJj
ZS9KYXZhU2NyaXB0Q29yZS9yZXBsYXkvc2NyaXB0cy90ZXN0cy9leHBlY3RlZC9nZW5lcmF0ZS1l
bnVtcy13aXRoLXNhbWUtYmFzZS1uYW1lLmpzb24tVGVzdFJlcGxheUlucHV0cy5jcHAKPT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL3JlcGxheS9zY3JpcHRzL3Rlc3RzL2V4cGVj
dGVkL2dlbmVyYXRlLWVudW1zLXdpdGgtc2FtZS1iYXNlLW5hbWUuanNvbi1UZXN0UmVwbGF5SW5w
dXRzLmNwcAkocmV2aXNpb24gMjE1OTE5KQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL3JlcGxh
eS9zY3JpcHRzL3Rlc3RzL2V4cGVjdGVkL2dlbmVyYXRlLWVudW1zLXdpdGgtc2FtZS1iYXNlLW5h
bWUuanNvbi1UZXN0UmVwbGF5SW5wdXRzLmNwcAkod29ya2luZyBjb3B5KQpAQCAtNTIsNyArNTIs
NyBAQCBGb3JtQ29tYm86On5Gb3JtQ29tYm8oKQogbmFtZXNwYWNlIEpTQyB7CiBjb25zdCBTdHJp
bmcmIElucHV0VHJhaXRzPFRlc3Q6OkZvcm1Db21ibz46OnR5cGUoKQogewotICAgIHN0YXRpYyBO
ZXZlckRlc3Ryb3llZDxjb25zdCBTdHJpbmc+IHR5cGUoQVNDSUlMaXRlcmFsKCJGb3JtQ29tYm8i
KSk7CisgICAgc3RhdGljIE5ldmVyRGVzdHJveWVkPGNvbnN0IFN0cmluZz4gdHlwZShTdGF0aWNB
U0NJSUxpdGVyYWwoIkZvcm1Db21ibyIpKTsKICAgICByZXR1cm4gdHlwZTsKIH0KIApJbmRleDog
U291cmNlL0phdmFTY3JpcHRDb3JlL3JlcGxheS9zY3JpcHRzL3Rlc3RzL2V4cGVjdGVkL2dlbmVy
YXRlLWlucHV0LXdpdGgtZ3VhcmQuanNvbi1UZXN0UmVwbGF5SW5wdXRzLmNwcAo9PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcmVwbGF5L3NjcmlwdHMvdGVzdHMvZXhwZWN0ZWQv
Z2VuZXJhdGUtaW5wdXQtd2l0aC1ndWFyZC5qc29uLVRlc3RSZXBsYXlJbnB1dHMuY3BwCShyZXZp
c2lvbiAyMTU5MTkpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcmVwbGF5L3NjcmlwdHMvdGVz
dHMvZXhwZWN0ZWQvZ2VuZXJhdGUtaW5wdXQtd2l0aC1ndWFyZC5qc29uLVRlc3RSZXBsYXlJbnB1
dHMuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC02Miw3ICs2Miw3IEBAIG5hbWVzcGFjZSBKU0Mgewog
I2lmIEVOQUJMRShEVU1NWV9GRUFUVVJFKQogY29uc3QgU3RyaW5nJiBJbnB1dFRyYWl0czxUZXN0
OjpHZXRDdXJyZW50VGltZT46OnR5cGUoKQogewotICAgIHN0YXRpYyBOZXZlckRlc3Ryb3llZDxj
b25zdCBTdHJpbmc+IHR5cGUoQVNDSUlMaXRlcmFsKCJHZXRDdXJyZW50VGltZSIpKTsKKyAgICBz
dGF0aWMgTmV2ZXJEZXN0cm95ZWQ8Y29uc3QgU3RyaW5nPiB0eXBlKFN0YXRpY0FTQ0lJTGl0ZXJh
bCgiR2V0Q3VycmVudFRpbWUiKSk7CiAgICAgcmV0dXJuIHR5cGU7CiB9CiAKQEAgLTg0LDcgKzg0
LDcgQEAgYm9vbCBJbnB1dFRyYWl0czxUZXN0OjpHZXRDdXJyZW50VGltZT46OgogCiBjb25zdCBT
dHJpbmcmIElucHV0VHJhaXRzPFRlc3Q6OlNldFJhbmRvbVNlZWQ+Ojp0eXBlKCkKIHsKLSAgICBz
dGF0aWMgTmV2ZXJEZXN0cm95ZWQ8Y29uc3QgU3RyaW5nPiB0eXBlKEFTQ0lJTGl0ZXJhbCgiU2V0
UmFuZG9tU2VlZCIpKTsKKyAgICBzdGF0aWMgTmV2ZXJEZXN0cm95ZWQ8Y29uc3QgU3RyaW5nPiB0
eXBlKFN0YXRpY0FTQ0lJTGl0ZXJhbCgiU2V0UmFuZG9tU2VlZCIpKTsKICAgICByZXR1cm4gdHlw
ZTsKIH0KIApJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL3JlcGxheS9zY3JpcHRzL3Rlc3Rz
L2V4cGVjdGVkL2dlbmVyYXRlLWlucHV0LXdpdGgtdmVjdG9yLW1lbWJlcnMuanNvbi1UZXN0UmVw
bGF5SW5wdXRzLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcmVwbGF5
L3NjcmlwdHMvdGVzdHMvZXhwZWN0ZWQvZ2VuZXJhdGUtaW5wdXQtd2l0aC12ZWN0b3ItbWVtYmVy
cy5qc29uLVRlc3RSZXBsYXlJbnB1dHMuY3BwCShyZXZpc2lvbiAyMTU5MTkpCisrKyBTb3VyY2Uv
SmF2YVNjcmlwdENvcmUvcmVwbGF5L3NjcmlwdHMvdGVzdHMvZXhwZWN0ZWQvZ2VuZXJhdGUtaW5w
dXQtd2l0aC12ZWN0b3ItbWVtYmVycy5qc29uLVRlc3RSZXBsYXlJbnB1dHMuY3BwCSh3b3JraW5n
IGNvcHkpCkBAIC02Myw3ICs2Myw3IEBAIFNhdmVkSGlzdG9yeTo6flNhdmVkSGlzdG9yeSgpCiBu
YW1lc3BhY2UgSlNDIHsKIGNvbnN0IFN0cmluZyYgSW5wdXRUcmFpdHM8VGVzdDo6QXJyYXlPZlRo
aW5ncz46OnR5cGUoKQogewotICAgIHN0YXRpYyBOZXZlckRlc3Ryb3llZDxjb25zdCBTdHJpbmc+
IHR5cGUoQVNDSUlMaXRlcmFsKCJBcnJheU9mVGhpbmdzIikpOworICAgIHN0YXRpYyBOZXZlckRl
c3Ryb3llZDxjb25zdCBTdHJpbmc+IHR5cGUoU3RhdGljQVNDSUlMaXRlcmFsKCJBcnJheU9mVGhp
bmdzIikpOwogICAgIHJldHVybiB0eXBlOwogfQogCkBAIC05NCw3ICs5NCw3IEBAIGJvb2wgSW5w
dXRUcmFpdHM8VGVzdDo6QXJyYXlPZlRoaW5ncz46OmQKIAogY29uc3QgU3RyaW5nJiBJbnB1dFRy
YWl0czxUZXN0OjpTYXZlZEhpc3Rvcnk+Ojp0eXBlKCkKIHsKLSAgICBzdGF0aWMgTmV2ZXJEZXN0
cm95ZWQ8Y29uc3QgU3RyaW5nPiB0eXBlKEFTQ0lJTGl0ZXJhbCgiU2F2ZWRIaXN0b3J5IikpOwor
ICAgIHN0YXRpYyBOZXZlckRlc3Ryb3llZDxjb25zdCBTdHJpbmc+IHR5cGUoU3RhdGljQVNDSUlM
aXRlcmFsKCJTYXZlZEhpc3RvcnkiKSk7CiAgICAgcmV0dXJuIHR5cGU7CiB9CiAKSW5kZXg6IFNv
dXJjZS9KYXZhU2NyaXB0Q29yZS9yZXBsYXkvc2NyaXB0cy90ZXN0cy9leHBlY3RlZC9nZW5lcmF0
ZS1pbnB1dHMtd2l0aC1mbGFncy5qc29uLVRlc3RSZXBsYXlJbnB1dHMuY3BwCj09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0K
LS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9yZXBsYXkvc2NyaXB0cy90ZXN0cy9leHBlY3RlZC9n
ZW5lcmF0ZS1pbnB1dHMtd2l0aC1mbGFncy5qc29uLVRlc3RSZXBsYXlJbnB1dHMuY3BwCShyZXZp
c2lvbiAyMTU5MTkpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcmVwbGF5L3NjcmlwdHMvdGVz
dHMvZXhwZWN0ZWQvZ2VuZXJhdGUtaW5wdXRzLXdpdGgtZmxhZ3MuanNvbi1UZXN0UmVwbGF5SW5w
dXRzLmNwcAkod29ya2luZyBjb3B5KQpAQCAtNTksNyArNTksNyBAQCBTY2FsYXJJbnB1dDI6On5T
Y2FsYXJJbnB1dDIoKQogbmFtZXNwYWNlIEpTQyB7CiBjb25zdCBTdHJpbmcmIElucHV0VHJhaXRz
PFRlc3Q6OlNjYWxhcklucHV0MT46OnR5cGUoKQogewotICAgIHN0YXRpYyBOZXZlckRlc3Ryb3ll
ZDxjb25zdCBTdHJpbmc+IHR5cGUoQVNDSUlMaXRlcmFsKCJTY2FsYXJJbnB1dDEiKSk7CisgICAg
c3RhdGljIE5ldmVyRGVzdHJveWVkPGNvbnN0IFN0cmluZz4gdHlwZShTdGF0aWNBU0NJSUxpdGVy
YWwoIlNjYWxhcklucHV0MSIpKTsKICAgICByZXR1cm4gdHlwZTsKIH0KIApAQCAtODAsNyArODAs
NyBAQCBib29sIElucHV0VHJhaXRzPFRlc3Q6OlNjYWxhcklucHV0MT46OmRlCiAKIGNvbnN0IFN0
cmluZyYgSW5wdXRUcmFpdHM8VGVzdDo6U2NhbGFySW5wdXQyPjo6dHlwZSgpCiB7Ci0gICAgc3Rh
dGljIE5ldmVyRGVzdHJveWVkPGNvbnN0IFN0cmluZz4gdHlwZShBU0NJSUxpdGVyYWwoIlNjYWxh
cklucHV0MiIpKTsKKyAgICBzdGF0aWMgTmV2ZXJEZXN0cm95ZWQ8Y29uc3QgU3RyaW5nPiB0eXBl
KFN0YXRpY0FTQ0lJTGl0ZXJhbCgiU2NhbGFySW5wdXQyIikpOwogICAgIHJldHVybiB0eXBlOwog
fQogCkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcmVwbGF5L3NjcmlwdHMvdGVzdHMvZXhw
ZWN0ZWQvZ2VuZXJhdGUtbWVtb2l6ZWQtdHlwZS1tb2Rlcy5qc29uLVRlc3RSZXBsYXlJbnB1dHMu
Y3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9yZXBsYXkvc2NyaXB0cy90
ZXN0cy9leHBlY3RlZC9nZW5lcmF0ZS1tZW1vaXplZC10eXBlLW1vZGVzLmpzb24tVGVzdFJlcGxh
eUlucHV0cy5jcHAJKHJldmlzaW9uIDIxNTkxOSkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9y
ZXBsYXkvc2NyaXB0cy90ZXN0cy9leHBlY3RlZC9nZW5lcmF0ZS1tZW1vaXplZC10eXBlLW1vZGVz
Lmpzb24tVGVzdFJlcGxheUlucHV0cy5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTU5LDcgKzU5LDcg
QEAgTWFwSW5wdXQ6On5NYXBJbnB1dCgpCiBuYW1lc3BhY2UgSlNDIHsKIGNvbnN0IFN0cmluZyYg
SW5wdXRUcmFpdHM8VGVzdDo6U2NhbGFySW5wdXQ+Ojp0eXBlKCkKIHsKLSAgICBzdGF0aWMgTmV2
ZXJEZXN0cm95ZWQ8Y29uc3QgU3RyaW5nPiB0eXBlKEFTQ0lJTGl0ZXJhbCgiU2NhbGFySW5wdXQi
KSk7CisgICAgc3RhdGljIE5ldmVyRGVzdHJveWVkPGNvbnN0IFN0cmluZz4gdHlwZShTdGF0aWNB
U0NJSUxpdGVyYWwoIlNjYWxhcklucHV0IikpOwogICAgIHJldHVybiB0eXBlOwogfQogCkBAIC04
MCw3ICs4MCw3IEBAIGJvb2wgSW5wdXRUcmFpdHM8VGVzdDo6U2NhbGFySW5wdXQ+OjpkZWMKIAog
Y29uc3QgU3RyaW5nJiBJbnB1dFRyYWl0czxUZXN0OjpNYXBJbnB1dD46OnR5cGUoKQogewotICAg
IHN0YXRpYyBOZXZlckRlc3Ryb3llZDxjb25zdCBTdHJpbmc+IHR5cGUoQVNDSUlMaXRlcmFsKCJN
YXBJbnB1dCIpKTsKKyAgICBzdGF0aWMgTmV2ZXJEZXN0cm95ZWQ8Y29uc3QgU3RyaW5nPiB0eXBl
KFN0YXRpY0FTQ0lJTGl0ZXJhbCgiTWFwSW5wdXQiKSk7CiAgICAgcmV0dXJuIHR5cGU7CiB9CiAK
SW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0ludGxPYmplY3QuY3BwCj09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0ludGxPYmplY3QuY3BwCShy
ZXZpc2lvbiAyMTU5MTkpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9JbnRsT2Jq
ZWN0LmNwcAkod29ya2luZyBjb3B5KQpAQCAtOTk0LDE4ICs5OTQsMjMgQEAgVmVjdG9yPFN0cmlu
Zz4gbnVtYmVyaW5nU3lzdGVtc0ZvckxvY2FsZQogewogICAgIHN0YXRpYyBOZXZlckRlc3Ryb3ll
ZDxWZWN0b3I8U3RyaW5nPj4gY2FjaGVkTnVtYmVyaW5nU3lzdGVtczsKICAgICBWZWN0b3I8U3Ry
aW5nPiYgYXZhaWxhYmxlTnVtYmVyaW5nU3lzdGVtcyA9IGNhY2hlZE51bWJlcmluZ1N5c3RlbXMu
Z2V0KCk7Ci0gICAgaWYgKGF2YWlsYWJsZU51bWJlcmluZ1N5c3RlbXMuaXNFbXB0eSgpKSB7Ci0g
ICAgICAgIFVFcnJvckNvZGUgc3RhdHVzID0gVV9aRVJPX0VSUk9SOwotICAgICAgICBVRW51bWVy
YXRpb24qIG51bWJlcmluZ1N5c3RlbU5hbWVzID0gdW51bXN5c19vcGVuQXZhaWxhYmxlTmFtZXMo
JnN0YXR1cyk7Ci0gICAgICAgIEFTU0VSVChVX1NVQ0NFU1Moc3RhdHVzKSk7Ci0KLSAgICAgICAg
aW50MzJfdCByZXN1bHRMZW5ndGg7Ci0gICAgICAgIC8vIE51bWJlcmluZyBzeXN0ZW0gbmFtZXMg
YXJlIGFsd2F5cyBBU0NJSSwgc28gdXNlIGNoYXJbXS4KLSAgICAgICAgd2hpbGUgKGNvbnN0IGNo
YXIqIHJlc3VsdCA9IHVlbnVtX25leHQobnVtYmVyaW5nU3lzdGVtTmFtZXMsICZyZXN1bHRMZW5n
dGgsICZzdGF0dXMpKSB7CisKKyAgICBpZiAoVU5MSUtFTFkoYXZhaWxhYmxlTnVtYmVyaW5nU3lz
dGVtcy5pc0VtcHR5KCkpKSB7CisgICAgICAgIHN0YXRpYyBTdGF0aWNMb2NrIGNhY2hlZE51bWJl
cmluZ1N5c3RlbXNNdXRleDsKKyAgICAgICAgc3RkOjpsb2NrX2d1YXJkPFN0YXRpY0xvY2s+IGxv
Y2soY2FjaGVkTnVtYmVyaW5nU3lzdGVtc011dGV4KTsKKyAgICAgICAgaWYgKGF2YWlsYWJsZU51
bWJlcmluZ1N5c3RlbXMuaXNFbXB0eSgpKSB7CisgICAgICAgICAgICBVRXJyb3JDb2RlIHN0YXR1
cyA9IFVfWkVST19FUlJPUjsKKyAgICAgICAgICAgIFVFbnVtZXJhdGlvbiogbnVtYmVyaW5nU3lz
dGVtTmFtZXMgPSB1bnVtc3lzX29wZW5BdmFpbGFibGVOYW1lcygmc3RhdHVzKTsKICAgICAgICAg
ICAgIEFTU0VSVChVX1NVQ0NFU1Moc3RhdHVzKSk7Ci0gICAgICAgICAgICBhdmFpbGFibGVOdW1i
ZXJpbmdTeXN0ZW1zLmFwcGVuZChTdHJpbmcocmVzdWx0LCByZXN1bHRMZW5ndGgpKTsKKworICAg
ICAgICAgICAgaW50MzJfdCByZXN1bHRMZW5ndGg7CisgICAgICAgICAgICAvLyBOdW1iZXJpbmcg
c3lzdGVtIG5hbWVzIGFyZSBhbHdheXMgQVNDSUksIHNvIHVzZSBjaGFyW10uCisgICAgICAgICAg
ICB3aGlsZSAoY29uc3QgY2hhciogcmVzdWx0ID0gdWVudW1fbmV4dChudW1iZXJpbmdTeXN0ZW1O
YW1lcywgJnJlc3VsdExlbmd0aCwgJnN0YXR1cykpIHsKKyAgICAgICAgICAgICAgICBBU1NFUlQo
VV9TVUNDRVNTKHN0YXR1cykpOworICAgICAgICAgICAgICAgIGF2YWlsYWJsZU51bWJlcmluZ1N5
c3RlbXMuYXBwZW5kKFN0cmluZyhyZXN1bHQsIHJlc3VsdExlbmd0aCkpOworICAgICAgICAgICAg
fQorICAgICAgICAgICAgdWVudW1fY2xvc2UobnVtYmVyaW5nU3lzdGVtTmFtZXMpOwogICAgICAg
ICB9Ci0gICAgICAgIHVlbnVtX2Nsb3NlKG51bWJlcmluZ1N5c3RlbU5hbWVzKTsKICAgICB9CiAK
ICAgICBVRXJyb3JDb2RlIHN0YXR1cyA9IFVfWkVST19FUlJPUjsKSW5kZXg6IFNvdXJjZS9XVEYv
Q2hhbmdlTG9nCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XVEYvQ2hhbmdlTG9nCShyZXZpc2lvbiAy
MTU5MTkpCisrKyBTb3VyY2UvV1RGL0NoYW5nZUxvZwkod29ya2luZyBjb3B5KQpAQCAtMSwzICsx
LDQ5IEBACisyMDE3LTA1LTAyICBNYXJrIExhbSAgPG1hcmsubGFtQGFwcGxlLmNvbT4KKworICAg
ICAgICBOZXZlckRlc3Ryb3llZDxTdHJpbmc+KEFTQ0lJTGl0ZXJhbCguLi4pKSBpcyBub3QgdGhy
ZWFkIHNhZmUuCisgICAgICAgIGh0dHBzOi8vYnVncy53ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9p
ZD0xNzE1ODYKKyAgICAgICAgPHJkYXI6Ly9wcm9ibGVtLzMxODczMTkwPgorCisgICAgICAgIFJl
dmlld2VkIGJ5IE5PQk9EWSAoT09QUyEpLgorCisgICAgICAgIFN0YXRpY1N0cmluZ0ltcGwgaXMg
bWVhbnQgdG8gYmUgdGhyZWFkLXNhZmUuICBIb3dldmVyLCBpdCBoYXMgYSBidWc6IGl0IGRpZCBu
b3QKKyAgICAgICAgc2V0IHRoZSBzX2hhc2hGbGFnRGlkUmVwb3J0Q29zdCBmbGFnLiAgQXMgYSBy
ZXN1bHQsIGlmIGNvc3QoKSBpcyBjYWxsZWQgb24gaXQsCisgICAgICAgIGRpZmZlcmVudCB0aHJl
YWRzIG1heSB0cnkgdG8gY2hhbmdlIGl0cyBmbGFncyBiaXRzIGF0IHRoZSBzYW1lIHRpbWUuICBU
aGlzIHBhdGNoCisgICAgICAgIGNoYW5nZXMgU3RhdGljU3RyaW5nSW1wbCB0byBhbHdheXMgc2V0
IHRoZSBzX2hhc2hGbGFnRGlkUmVwb3J0Q29zdCBmbGFnLgorCisgICAgICAgIEFsc28gZmFjdG9y
ZWQgb3V0IFN0cmluZ0ltcGxTaGFwZSBhbmQgbWFrZSBTdHJpbmdJbXBsIGFuZCBTdGF0aWNTdHJp
bmdJbXBsIGV4dGVuZAorICAgICAgICBpdC4gIFRoaXMgbWFrZXMgaXQgbW9yZSBjbGVhciB0aGF0
IHRoZSAyIGFyZSBpbnRlbmRlZCB0byBoYXZlIHRoZSBzYW1lIHNoYXBlLgorICAgICAgICBOb3Rl
OiB0aGVyZSBpcyBhbHJlYWR5IGEgc3RhdGljX2Fzc2VydCB0aGF0IHRoZSAyIGhhdmUgdGhlIHNh
bWUgc2l6ZS4gIFRoaXMKKyAgICAgICAgY2hhbmdlIGFsc28gZW5zdXJlcyB0aGF0IHRoZXkgaGF2
ZSB0aGUgc2FtZSBzaGFwZSwgd2hpY2ggaXMgYSByZXF1aXJlbWVudCBpbgorICAgICAgICBvcmRl
ciBmb3IgU3RhdGljU3RyaW5nSW1wbCB0byB3b3JrLgorCisgICAgICAgIFJlLWludHJvZHVjZWQg
U3RhdGljQVNDSUlMaXRlcmFsIGFzIGEgY29udmVuaWVudCB3YXkgdG8gaW5zdGFudGlhdGUKKyAg
ICAgICAgU3RhdGljU3RyaW5nSW1wbHMgZnJvbSBBU0NJSUxpdGVyYWxzLiAgVGhpcyBhbGxvd3Mg
dXMgdG8gdHJpdmlhbGx5IGNoYW5nZQorCisgICAgICAgICAgICBOZXZlckRlc3Ryb3llZDxTdHJp
bmc+IG15U3RyaW5nKEFTQ0lJTGl0ZXJhbCgibXlTdHJpbmciKSk7CisKKyAgICAgICAgdG8gLi4u
CisKKyAgICAgICAgICAgIE5ldmVyRGVzdHJveWVkPFN0cmluZz4gbXlTdHJpbmcoU3RhdGljQVND
SUlMaXRlcmFsKCJteVN0cmluZyIpKTsKKworICAgICAgICBhbmQgYnkgc28gZG9pbmcsIG1ha2Ug
aXQgdGhyZWFkLXNhZmUuCisKKyAgICAgICAgKiB3dGYvbWFjL01haW5UaHJlYWRNYWMubW06Cisg
ICAgICAgIChXVEY6OmlzTWFpblRocmVhZCk6CisgICAgICAgICogd3RmL3RleHQvU3RyaW5nSW1w
bC5oOgorICAgICAgICAoV1RGOjpTdHJpbmdJbXBsU2hhcGU6OlN0cmluZ0ltcGxTaGFwZSk6Cisg
ICAgICAgIChXVEY6OlN0cmluZ0ltcGw6OlN0cmluZ0ltcGwpOgorICAgICAgICAoV1RGOjpTdHJp
bmdJbXBsOjpzZXRIYXNoKToKKyAgICAgICAgKFdURjo6U3RyaW5nSW1wbDo6U3RhdGljU3RyaW5n
SW1wbDo6U3RhdGljU3RyaW5nSW1wbCk6CisgICAgICAgIChXVEY6OlN0cmluZ0ltcGw6OlN0YXRp
Y1N0cmluZ0ltcGw6Om9wZXJhdG9yIFN0cmluZ0ltcGwmKToKKyAgICAgICAgKFdURjo6bWFrZVN0
YXRpY1N0cmluZ0ltcGwpOgorICAgICAgICAqIHd0Zi90ZXh0L1dURlN0cmluZy5jcHA6CisgICAg
ICAgIChXVEY6OlN0cmluZzo6U3RyaW5nKToKKyAgICAgICAgKiB3dGYvdGV4dC9XVEZTdHJpbmcu
aDoKKyAgICAgICAgKFdURjo6U3RhdGljQVNDSUlMaXRlcmFsOjpTdGF0aWNBU0NJSUxpdGVyYWwp
OgorICAgICAgICAqIHd0Zi90ZXh0L2ljdS9UZXh0QnJlYWtJdGVyYXRvcklDVS5oOgorICAgICAg
ICAoV1RGOjpjYXJldFJ1bGVzKToKKwogMjAxNy0wNC0yNiAgS2VpdGggTWlsbGVyICA8a2VpdGhf
bWlsbGVyQGFwcGxlLmNvbT4KIAogICAgICAgICBMb2NrbGVzc0JhZyBuZWVkcyBhIGRlc3RydWN0
b3IKSW5kZXg6IFNvdXJjZS9XVEYvd3RmL21hYy9NYWluVGhyZWFkTWFjLm1tCj09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0K
LS0tIFNvdXJjZS9XVEYvd3RmL21hYy9NYWluVGhyZWFkTWFjLm1tCShyZXZpc2lvbiAyMTU5MTkp
CisrKyBTb3VyY2UvV1RGL3d0Zi9tYWMvTWFpblRocmVhZE1hYy5tbQkod29ya2luZyBjb3B5KQpA
QCAtMjExLDcgKzIxMSw4IEBAIGJvb2wgaXNNYWluVGhyZWFkKCkKICAgICAgICAgcmV0dXJuIHB0
aHJlYWRfbWFpbl9ucCgpOwogICAgIH0KIAotICAgIEFTU0VSVChtYWluVGhyZWFkUHRocmVhZCk7
CisgICAgLy8gRklYTUU6IGh0dHBzOi8vYnVncy53ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9pZD0x
NzE1ODIKKyAgICAvLyBBU1NFUlQobWFpblRocmVhZFB0aHJlYWQpOwogICAgIHJldHVybiBwdGhy
ZWFkX2VxdWFsKHB0aHJlYWRfc2VsZigpLCBtYWluVGhyZWFkUHRocmVhZCk7CiB9CiAjZW5kaWYg
Ly8gVVNFKFdFQl9USFJFQUQpCkluZGV4OiBTb3VyY2UvV1RGL3d0Zi90ZXh0L1N0cmluZ0ltcGwu
aAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV1RGL3d0Zi90ZXh0L1N0cmluZ0ltcGwuaAkocmV2aXNp
b24gMjE1OTE5KQorKysgU291cmNlL1dURi93dGYvdGV4dC9TdHJpbmdJbXBsLmgJKHdvcmtpbmcg
Y29weSkKQEAgLTEsNiArMSw2IEBACiAvKgogICogQ29weXJpZ2h0IChDKSAxOTk5IExhcnMgS25v
bGwgKGtub2xsQGtkZS5vcmcpCi0gKiBDb3B5cmlnaHQgKEMpIDIwMDUtMjAxMCwgMjAxMy0yMDE2
IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqIENvcHlyaWdodCAoQykgMjAwNS0y
MDE3IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KICAqIENvcHlyaWdodCAoQykgMjAw
OSBHb29nbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgogICoKICAqIFRoaXMgbGlicmFyeSBp
cyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IKQEAgLTEyOSw3
ICsxMjksNDkgQEAgc3RydWN0IFN0cmluZ1N0YXRzIHsKICNkZWZpbmUgU1RSSU5HX1NUQVRTX0RF
UkVGX1NUUklORyhzdHJpbmcpICgodm9pZCkwKQogI2VuZGlmCiAKLWNsYXNzIFN0cmluZ0ltcGwg
eworY2xhc3MgU3RyaW5nSW1wbFNoYXBlIHsKKyAgICBXVEZfTUFLRV9OT05DT1BZQUJMRShTdHJp
bmdJbXBsU2hhcGUpOworcHJvdGVjdGVkOgorICAgIFN0cmluZ0ltcGxTaGFwZSh1bnNpZ25lZCBy
ZWZDb3VudCwgdW5zaWduZWQgbGVuZ3RoLCBjb25zdCBMQ2hhciogZGF0YTgsIHVuc2lnbmVkIGhh
c2hBbmRGbGFncykKKyAgICAgICAgOiBtX3JlZkNvdW50KHJlZkNvdW50KQorICAgICAgICAsIG1f
bGVuZ3RoKGxlbmd0aCkKKyAgICAgICAgLCBtX2RhdGE4KGRhdGE4KQorICAgICAgICAsIG1faGFz
aEFuZEZsYWdzKGhhc2hBbmRGbGFncykKKyAgICB7IH0KKworICAgIFN0cmluZ0ltcGxTaGFwZSh1
bnNpZ25lZCByZWZDb3VudCwgdW5zaWduZWQgbGVuZ3RoLCBjb25zdCBVQ2hhciogZGF0YTE2LCB1
bnNpZ25lZCBoYXNoQW5kRmxhZ3MpCisgICAgICAgIDogbV9yZWZDb3VudChyZWZDb3VudCkKKyAg
ICAgICAgLCBtX2xlbmd0aChsZW5ndGgpCisgICAgICAgICwgbV9kYXRhMTYoZGF0YTE2KQorICAg
ICAgICAsIG1faGFzaEFuZEZsYWdzKGhhc2hBbmRGbGFncykKKyAgICB7IH0KKworICAgIHRlbXBs
YXRlPHVuc2lnbmVkIGNoYXJhY3RlcnNDb3VudD4KKyAgICBjb25zdGV4cHIgU3RyaW5nSW1wbFNo
YXBlKHVuc2lnbmVkIHJlZkNvdW50LCB1bnNpZ25lZCBsZW5ndGgsIGNvbnN0IGNoYXIgKCZjaGFy
YWN0ZXJzKVtjaGFyYWN0ZXJzQ291bnRdLCB1bnNpZ25lZCBoYXNoQW5kRmxhZ3MpCisgICAgICAg
IDogbV9yZWZDb3VudChyZWZDb3VudCkKKyAgICAgICAgLCBtX2xlbmd0aChsZW5ndGgpCisgICAg
ICAgICwgbV9kYXRhOChyZWludGVycHJldF9jYXN0PGNvbnN0IExDaGFyKj4oY2hhcmFjdGVycykp
CisgICAgICAgICwgbV9oYXNoQW5kRmxhZ3MoaGFzaEFuZEZsYWdzKQorICAgIHsgfQorICAgIAor
ICAgIHRlbXBsYXRlPHVuc2lnbmVkIGNoYXJhY3RlcnNDb3VudD4KKyAgICBjb25zdGV4cHIgU3Ry
aW5nSW1wbFNoYXBlKHVuc2lnbmVkIHJlZkNvdW50LCB1bnNpZ25lZCBsZW5ndGgsIGNvbnN0IGNo
YXIxNl90ICgmY2hhcmFjdGVycylbY2hhcmFjdGVyc0NvdW50XSwgdW5zaWduZWQgaGFzaEFuZEZs
YWdzKQorICAgICAgICA6IG1fcmVmQ291bnQocmVmQ291bnQpCisgICAgICAgICwgbV9sZW5ndGgo
bGVuZ3RoKQorICAgICAgICAsIG1fZGF0YTE2KHJlaW50ZXJwcmV0X2Nhc3Q8Y29uc3QgVUNoYXIq
PihjaGFyYWN0ZXJzKSkKKyAgICAgICAgLCBtX2hhc2hBbmRGbGFncyhoYXNoQW5kRmxhZ3MpCisg
ICAgeyB9CisKKyAgICB1bnNpZ25lZCBtX3JlZkNvdW50OworICAgIHVuc2lnbmVkIG1fbGVuZ3Ro
OworICAgIHVuaW9uIHsKKyAgICAgICAgY29uc3QgTENoYXIqIG1fZGF0YTg7CisgICAgICAgIGNv
bnN0IFVDaGFyKiBtX2RhdGExNjsKKyAgICB9OworICAgIG11dGFibGUgdW5zaWduZWQgbV9oYXNo
QW5kRmxhZ3M7Cit9OworCitjbGFzcyBTdHJpbmdJbXBsIDogcHJpdmF0ZSBTdHJpbmdJbXBsU2hh
cGUgewogICAgIFdURl9NQUtFX05PTkNPUFlBQkxFKFN0cmluZ0ltcGwpOyBXVEZfTUFLRV9GQVNU
X0FMTE9DQVRFRDsKICAgICBmcmllbmQgc3RydWN0IFdURjo6Q1N0cmluZ1RyYW5zbGF0b3I7CiAg
ICAgdGVtcGxhdGU8dHlwZW5hbWUgQ2hhcmFjdGVyVHlwZT4gZnJpZW5kIHN0cnVjdCBXVEY6Okhh
c2hBbmRDaGFyYWN0ZXJzVHJhbnNsYXRvcjsKQEAgLTE3NCwxMCArMjE2LDcgQEAgcHJpdmF0ZToK
ICAgICBlbnVtIEZvcmNlOEJpdCB7IEZvcmNlOEJpdENvbnN0cnVjdG9yIH07CiAgICAgLy8gQ3Jl
YXRlIGEgbm9ybWFsIDgtYml0IHN0cmluZyB3aXRoIGludGVybmFsIHN0b3JhZ2UgKEJ1ZmZlcklu
dGVybmFsKQogICAgIFN0cmluZ0ltcGwodW5zaWduZWQgbGVuZ3RoLCBGb3JjZThCaXQpCi0gICAg
ICAgIDogbV9yZWZDb3VudChzX3JlZkNvdW50SW5jcmVtZW50KQotICAgICAgICAsIG1fbGVuZ3Ro
KGxlbmd0aCkKLSAgICAgICAgLCBtX2RhdGE4KHRhaWxQb2ludGVyPExDaGFyPigpKQotICAgICAg
ICAsIG1faGFzaEFuZEZsYWdzKHNfaGFzaEZsYWc4Qml0QnVmZmVyIHwgU3RyaW5nTm9ybWFsIHwg
QnVmZmVySW50ZXJuYWwpCisgICAgICAgIDogU3RyaW5nSW1wbFNoYXBlKHNfcmVmQ291bnRJbmNy
ZW1lbnQsIGxlbmd0aCwgdGFpbFBvaW50ZXI8TENoYXI+KCksIHNfaGFzaEZsYWc4Qml0QnVmZmVy
IHwgU3RyaW5nTm9ybWFsIHwgQnVmZmVySW50ZXJuYWwpCiAgICAgewogICAgICAgICBBU1NFUlQo
bV9kYXRhOCk7CiAgICAgICAgIEFTU0VSVChtX2xlbmd0aCk7CkBAIC0xODcsMTAgKzIyNiw3IEBA
IHByaXZhdGU6CiAKICAgICAvLyBDcmVhdGUgYSBub3JtYWwgMTYtYml0IHN0cmluZyB3aXRoIGlu
dGVybmFsIHN0b3JhZ2UgKEJ1ZmZlckludGVybmFsKQogICAgIFN0cmluZ0ltcGwodW5zaWduZWQg
bGVuZ3RoKQotICAgICAgICA6IG1fcmVmQ291bnQoc19yZWZDb3VudEluY3JlbWVudCkKLSAgICAg
ICAgLCBtX2xlbmd0aChsZW5ndGgpCi0gICAgICAgICwgbV9kYXRhMTYodGFpbFBvaW50ZXI8VUNo
YXI+KCkpCi0gICAgICAgICwgbV9oYXNoQW5kRmxhZ3MoU3RyaW5nTm9ybWFsIHwgQnVmZmVySW50
ZXJuYWwpCisgICAgICAgIDogU3RyaW5nSW1wbFNoYXBlKHNfcmVmQ291bnRJbmNyZW1lbnQsIGxl
bmd0aCwgdGFpbFBvaW50ZXI8VUNoYXI+KCksIFN0cmluZ05vcm1hbCB8IEJ1ZmZlckludGVybmFs
KQogICAgIHsKICAgICAgICAgQVNTRVJUKG1fZGF0YTE2KTsKICAgICAgICAgQVNTRVJUKG1fbGVu
Z3RoKTsKQEAgLTIwMCwxMCArMjM2LDcgQEAgcHJpdmF0ZToKIAogICAgIC8vIENyZWF0ZSBhIFN0
cmluZ0ltcGwgYWRvcHRpbmcgb3duZXJzaGlwIG9mIHRoZSBwcm92aWRlZCBidWZmZXIgKEJ1ZmZl
ck93bmVkKQogICAgIFN0cmluZ0ltcGwoTWFsbG9jUHRyPExDaGFyPiBjaGFyYWN0ZXJzLCB1bnNp
Z25lZCBsZW5ndGgpCi0gICAgICAgIDogbV9yZWZDb3VudChzX3JlZkNvdW50SW5jcmVtZW50KQot
ICAgICAgICAsIG1fbGVuZ3RoKGxlbmd0aCkKLSAgICAgICAgLCBtX2RhdGE4KGNoYXJhY3RlcnMu
bGVha1B0cigpKQotICAgICAgICAsIG1faGFzaEFuZEZsYWdzKHNfaGFzaEZsYWc4Qml0QnVmZmVy
IHwgU3RyaW5nTm9ybWFsIHwgQnVmZmVyT3duZWQpCisgICAgICAgIDogU3RyaW5nSW1wbFNoYXBl
KHNfcmVmQ291bnRJbmNyZW1lbnQsIGxlbmd0aCwgY2hhcmFjdGVycy5sZWFrUHRyKCksIHNfaGFz
aEZsYWc4Qml0QnVmZmVyIHwgU3RyaW5nTm9ybWFsIHwgQnVmZmVyT3duZWQpCiAgICAgewogICAg
ICAgICBBU1NFUlQobV9kYXRhOCk7CiAgICAgICAgIEFTU0VSVChtX2xlbmd0aCk7CkBAIC0yMTMs
MTAgKzI0Niw3IEBAIHByaXZhdGU6CiAKICAgICBlbnVtIENvbnN0cnVjdFdpdGhvdXRDb3B5aW5n
VGFnIHsgQ29uc3RydWN0V2l0aG91dENvcHlpbmcgfTsKICAgICBTdHJpbmdJbXBsKGNvbnN0IFVD
aGFyKiBjaGFyYWN0ZXJzLCB1bnNpZ25lZCBsZW5ndGgsIENvbnN0cnVjdFdpdGhvdXRDb3B5aW5n
VGFnKQotICAgICAgICA6IG1fcmVmQ291bnQoc19yZWZDb3VudEluY3JlbWVudCkKLSAgICAgICAg
LCBtX2xlbmd0aChsZW5ndGgpCi0gICAgICAgICwgbV9kYXRhMTYoY2hhcmFjdGVycykKLSAgICAg
ICAgLCBtX2hhc2hBbmRGbGFncyhTdHJpbmdOb3JtYWwgfCBCdWZmZXJJbnRlcm5hbCkKKyAgICAg
ICAgOiBTdHJpbmdJbXBsU2hhcGUoc19yZWZDb3VudEluY3JlbWVudCwgbGVuZ3RoLCBjaGFyYWN0
ZXJzLCBTdHJpbmdOb3JtYWwgfCBCdWZmZXJJbnRlcm5hbCkKICAgICB7CiAgICAgICAgIEFTU0VS
VChtX2RhdGExNik7CiAgICAgICAgIEFTU0VSVChtX2xlbmd0aCk7CkBAIC0yMjUsMTAgKzI1NSw3
IEBAIHByaXZhdGU6CiAgICAgfQogCiAgICAgU3RyaW5nSW1wbChjb25zdCBMQ2hhciogY2hhcmFj
dGVycywgdW5zaWduZWQgbGVuZ3RoLCBDb25zdHJ1Y3RXaXRob3V0Q29weWluZ1RhZykKLSAgICAg
ICAgOiBtX3JlZkNvdW50KHNfcmVmQ291bnRJbmNyZW1lbnQpCi0gICAgICAgICwgbV9sZW5ndGgo
bGVuZ3RoKQotICAgICAgICAsIG1fZGF0YTgoY2hhcmFjdGVycykKLSAgICAgICAgLCBtX2hhc2hB
bmRGbGFncyhzX2hhc2hGbGFnOEJpdEJ1ZmZlciB8IFN0cmluZ05vcm1hbCB8IEJ1ZmZlckludGVy
bmFsKQorICAgICAgICA6IFN0cmluZ0ltcGxTaGFwZShzX3JlZkNvdW50SW5jcmVtZW50LCBsZW5n
dGgsIGNoYXJhY3RlcnMsIHNfaGFzaEZsYWc4Qml0QnVmZmVyIHwgU3RyaW5nTm9ybWFsIHwgQnVm
ZmVySW50ZXJuYWwpCiAgICAgewogICAgICAgICBBU1NFUlQobV9kYXRhOCk7CiAgICAgICAgIEFT
U0VSVChtX2xlbmd0aCk7CkBAIC0yMzgsMTAgKzI2NSw3IEBAIHByaXZhdGU6CiAKICAgICAvLyBD
cmVhdGUgYSBTdHJpbmdJbXBsIGFkb3B0aW5nIG93bmVyc2hpcCBvZiB0aGUgcHJvdmlkZWQgYnVm
ZmVyIChCdWZmZXJPd25lZCkKICAgICBTdHJpbmdJbXBsKE1hbGxvY1B0cjxVQ2hhcj4gY2hhcmFj
dGVycywgdW5zaWduZWQgbGVuZ3RoKQotICAgICAgICA6IG1fcmVmQ291bnQoc19yZWZDb3VudElu
Y3JlbWVudCkKLSAgICAgICAgLCBtX2xlbmd0aChsZW5ndGgpCi0gICAgICAgICwgbV9kYXRhMTYo
Y2hhcmFjdGVycy5sZWFrUHRyKCkpCi0gICAgICAgICwgbV9oYXNoQW5kRmxhZ3MoU3RyaW5nTm9y
bWFsIHwgQnVmZmVyT3duZWQpCisgICAgICAgIDogU3RyaW5nSW1wbFNoYXBlKHNfcmVmQ291bnRJ
bmNyZW1lbnQsIGxlbmd0aCwgY2hhcmFjdGVycy5sZWFrUHRyKCksIFN0cmluZ05vcm1hbCB8IEJ1
ZmZlck93bmVkKQogICAgIHsKICAgICAgICAgQVNTRVJUKG1fZGF0YTE2KTsKICAgICAgICAgQVNT
RVJUKG1fbGVuZ3RoKTsKQEAgLTI1MSwxMCArMjc1LDcgQEAgcHJpdmF0ZToKIAogICAgIC8vIFVz
ZWQgdG8gY3JlYXRlIG5ldyBzdHJpbmdzIHRoYXQgYXJlIGEgc3Vic3RyaW5nIG9mIGFuIGV4aXN0
aW5nIDgtYml0IFN0cmluZ0ltcGwgKEJ1ZmZlclN1YnN0cmluZykKICAgICBTdHJpbmdJbXBsKGNv
bnN0IExDaGFyKiBjaGFyYWN0ZXJzLCB1bnNpZ25lZCBsZW5ndGgsIFJlZjxTdHJpbmdJbXBsPiYm
IGJhc2UpCi0gICAgICAgIDogbV9yZWZDb3VudChzX3JlZkNvdW50SW5jcmVtZW50KQotICAgICAg
ICAsIG1fbGVuZ3RoKGxlbmd0aCkKLSAgICAgICAgLCBtX2RhdGE4KGNoYXJhY3RlcnMpCi0gICAg
ICAgICwgbV9oYXNoQW5kRmxhZ3Moc19oYXNoRmxhZzhCaXRCdWZmZXIgfCBTdHJpbmdOb3JtYWwg
fCBCdWZmZXJTdWJzdHJpbmcpCisgICAgICAgIDogU3RyaW5nSW1wbFNoYXBlKHNfcmVmQ291bnRJ
bmNyZW1lbnQsIGxlbmd0aCwgY2hhcmFjdGVycywgc19oYXNoRmxhZzhCaXRCdWZmZXIgfCBTdHJp
bmdOb3JtYWwgfCBCdWZmZXJTdWJzdHJpbmcpCiAgICAgewogICAgICAgICBBU1NFUlQoaXM4Qml0
KCkpOwogICAgICAgICBBU1NFUlQobV9kYXRhOCk7CkBAIC0yNjgsMTAgKzI4OSw3IEBAIHByaXZh
dGU6CiAKICAgICAvLyBVc2VkIHRvIGNyZWF0ZSBuZXcgc3RyaW5ncyB0aGF0IGFyZSBhIHN1YnN0
cmluZyBvZiBhbiBleGlzdGluZyAxNi1iaXQgU3RyaW5nSW1wbCAoQnVmZmVyU3Vic3RyaW5nKQog
ICAgIFN0cmluZ0ltcGwoY29uc3QgVUNoYXIqIGNoYXJhY3RlcnMsIHVuc2lnbmVkIGxlbmd0aCwg
UmVmPFN0cmluZ0ltcGw+JiYgYmFzZSkKLSAgICAgICAgOiBtX3JlZkNvdW50KHNfcmVmQ291bnRJ
bmNyZW1lbnQpCi0gICAgICAgICwgbV9sZW5ndGgobGVuZ3RoKQotICAgICAgICAsIG1fZGF0YTE2
KGNoYXJhY3RlcnMpCi0gICAgICAgICwgbV9oYXNoQW5kRmxhZ3MoU3RyaW5nTm9ybWFsIHwgQnVm
ZmVyU3Vic3RyaW5nKQorICAgICAgICA6IFN0cmluZ0ltcGxTaGFwZShzX3JlZkNvdW50SW5jcmVt
ZW50LCBsZW5ndGgsIGNoYXJhY3RlcnMsIFN0cmluZ05vcm1hbCB8IEJ1ZmZlclN1YnN0cmluZykK
ICAgICB7CiAgICAgICAgIEFTU0VSVCghaXM4Qml0KCkpOwogICAgICAgICBBU1NFUlQobV9kYXRh
MTYpOwpAQCAtNDYwLDYgKzQ3OCw3IEBAIHByaXZhdGU6CiAgICAgdm9pZCBzZXRIYXNoKHVuc2ln
bmVkIGhhc2gpIGNvbnN0CiAgICAgewogICAgICAgICBBU1NFUlQoIWhhc0hhc2goKSk7CisgICAg
ICAgIEFTU0VSVCghaXNTdGF0aWMoKSk7CiAgICAgICAgIC8vIE11bHRpcGxlIGNsaWVudHMgYXNz
dW1lIHRoYXQgU3RyaW5nSGFzaGVyIGlzIHRoZSBjYW5vbmljYWwgc3RyaW5nIGhhc2ggZnVuY3Rp
b24uCiAgICAgICAgIEFTU0VSVChoYXNoID09IChpczhCaXQoKSA/IFN0cmluZ0hhc2hlcjo6Y29t
cHV0ZUhhc2hBbmRNYXNrVG9wOEJpdHMobV9kYXRhOCwgbV9sZW5ndGgpIDogU3RyaW5nSGFzaGVy
Ojpjb21wdXRlSGFzaEFuZE1hc2tUb3A4Qml0cyhtX2RhdGExNiwgbV9sZW5ndGgpKSk7CiAgICAg
ICAgIEFTU0VSVCghKGhhc2ggJiAoc19mbGFnTWFzayA8PCAoOCAqIHNpemVvZihoYXNoKSAtIHNf
ZmxhZ0NvdW50KSkpKTsgLy8gVmVyaWZ5IHRoYXQgZW5vdWdoIGhpZ2ggYml0cyBhcmUgZW1wdHku
CkBAIC01MzcsMjcgKzU1Niw0NyBAQCBwdWJsaWM6CiAgICAgICAgIG1fcmVmQ291bnQgPSB0ZW1w
UmVmQ291bnQ7CiAgICAgfQogCi0gICAgY2xhc3MgU3RhdGljU3RyaW5nSW1wbCB7CisgICAgY2xh
c3MgU3RhdGljU3RyaW5nSW1wbCA6IHByaXZhdGUgU3RyaW5nSW1wbFNoYXBlIHsKICAgICAgICAg
V1RGX01BS0VfTk9OQ09QWUFCTEUoU3RhdGljU3RyaW5nSW1wbCk7CiAgICAgcHVibGljOgogICAg
ICAgICAvLyBVc2VkIHRvIGNvbnN0cnVjdCBzdGF0aWMgc3RyaW5ncywgd2hpY2ggaGF2ZSBhbiBz
cGVjaWFsIHJlZkNvdW50IHRoYXQgY2FuIG5ldmVyIGhpdCB6ZXJvLgogICAgICAgICAvLyBUaGlz
IG1lYW5zIHRoYXQgdGhlIHN0YXRpYyBzdHJpbmcgd2lsbCBuZXZlciBiZSBkZXN0cm95ZWQsIHdo
aWNoIGlzIGltcG9ydGFudCBiZWNhdXNlCiAgICAgICAgIC8vIHN0YXRpYyBzdHJpbmdzIHdpbGwg
YmUgc2hhcmVkIGFjcm9zcyB0aHJlYWRzICYgcmVmLWNvdW50ZWQgaW4gYSBub24tdGhyZWFkc2Fm
ZSBtYW5uZXIuCisgICAgICAgIC8vCisgICAgICAgIC8vIEluIG9yZGVyIHRvIG1ha2UgU3RhdGlj
U3RyaW5nSW1wbCB0aHJlYWQgc2FmZSwgd2UgYWxzbyBuZWVkIHRvIGVuc3VyZSB0aGF0IHRoZSBy
ZXN0IG9mCisgICAgICAgIC8vIHRoZSBmaWVsZHMgYXJlIG5ldmVyIG11dGF0ZWQgYnkgdGhyZWFk
cy4gV2UgaGF2ZSB0aGlzIGd1YXJhbnRlZSBiZWNhdXNlOgorICAgICAgICAvLworICAgICAgICAv
LyAxLiBtX2xlbmd0aCBpcyBvbmx5IHNldCBvbiBjb25zdHJ1Y3Rpb24gYW5kIG5ldmVyIG11dGF0
ZWQgdGhlcmVhZnRlci4KKyAgICAgICAgLy8KKyAgICAgICAgLy8gMi4gbV9kYXRhOCBhbmQgbV9k
YXRhMTYgYXJlIG9ubHkgc2V0IG9uIGNvbnN0cnVjdGlvbiBhbmQgbmV2ZXIgbXV0YXRlZCB0aGVy
ZWFmdGVyLgorICAgICAgICAvLyAgICBXZSBhbHNvIGtub3cgdGhhdCBhIFN0cmluZ0ltcGwgbmV2
ZXIgY2hhbmdlcyBmcm9tIDggYml0IHRvIDE2IGJpdCBiZWNhdXNlIHRoZXJlCisgICAgICAgIC8v
ICAgIGlzIG5vIHdheSB0byBzZXQvY2xlYXIgdGhlIHNfaGFzaEZsYWc4Qml0QnVmZmVyIGZsYWcg
b3RoZXIgdGhhbiBhdCBjb25zdHJ1Y3Rpb24uCisgICAgICAgIC8vCisgICAgICAgIC8vIDMuIG1f
aGFzaEFuZEZsYWdzIHdpbGwgbm90IGJlIG11dGF0ZWQgYnkgZGlmZmVyZW50IHRocmVhZHMgYmVj
YXVzZToKKyAgICAgICAgLy8KKyAgICAgICAgLy8gICAgYS4gU3RhdGljU3RyaW5nSW1wbCdzIGNv
bnN0cnVjdG9yIHNldHMgdGhlIHNfaGFzaEZsYWdEaWRSZXBvcnRDb3N0IGZsYWcgdG8gZW5zdXJl
CisgICAgICAgIC8vICAgICAgIHRoYXQgU3RyaW5nSW1wbDo6Y29zdCgpIHJldHVybnMgZWFybHku
CisgICAgICAgIC8vICAgICAgIFRoaXMgbWVhbnMgU3RhdGljU3RyaW5nSW1wbCBjb3N0cyBhcmUg
bm90IGNvdW50ZWQuIEJ1dCBzaW5jZSB0aGVyZSBzaG91bGQgb25seQorICAgICAgICAvLyAgICAg
ICBiZSBhIGZpbml0ZSBzZXQgb2YgU3RhdGljU3RyaW5nSW1wbHMsIHRoZWlyIGNvc3QgY2FuIGJl
IGFnZ3JlZ2F0ZWQgaW50byBhIHNpbmdsZQorICAgICAgICAvLyAgICAgICBzeXN0ZW0gY29zdCBp
ZiBuZWVkZWQuCisgICAgICAgIC8vICAgIGIuIHNldElzQXRvbWljKCkgaXMgbmV2ZXIgY2FsbGVk
IG9uIGEgU3RhdGljU3RyaW5nSW1wbC4KKyAgICAgICAgLy8gICAgICAgc2V0SXNBdG9taWMoKSBh
c3NlcnRzICFpc1N0YXRpYygpLgorICAgICAgICAvLyAgICBjLiBzZXRIYXNoKCkgaXMgbmV2ZXIg
Y2FsbGVkIG9uIGEgU3RhdGljU3RyaW5nSW1wbC4KKyAgICAgICAgLy8gICAgICAgU3RhdGljU3Ry
aW5nSW1wbCdzIGNvbnN0cnVjdG9yIHNldHMgdGhlIGhhc2ggb24gY29uc3RydWN0aW9uLgorICAg
ICAgICAvLyAgICAgICBTdHJpbmdJbXBsOjpoYXNoKCkgb25seSBzZXRzIGEgbmV3IGhhc2ggaWZm
ICFoYXNIYXNoKCkuCisgICAgICAgIC8vICAgICAgIEFkZGl0aW9uYWxseSwgU3RyaW5nSW1wbDo6
c2V0SGFzaCgpIGFzc2VydHMgaGFzSGFzaCgpIGFuZCAhaXNTdGF0aWMoKS4KKwogICAgICAgICB0
ZW1wbGF0ZTx1bnNpZ25lZCBjaGFyYWN0ZXJzQ291bnQ+CiAgICAgICAgIGNvbnN0ZXhwciBTdGF0
aWNTdHJpbmdJbXBsKGNvbnN0IGNoYXIgKCZjaGFyYWN0ZXJzKVtjaGFyYWN0ZXJzQ291bnRdLCBT
dHJpbmdLaW5kIHN0cmluZ0tpbmQgPSBTdHJpbmdOb3JtYWwpCi0gICAgICAgICAgICA6IG1fcmVm
Q291bnQoc19yZWZDb3VudEZsYWdJc1N0YXRpY1N0cmluZykKLSAgICAgICAgICAgICwgbV9sZW5n
dGgoY2hhcmFjdGVyc0NvdW50IC0gMSkKLSAgICAgICAgICAgICwgbV9kYXRhOChjaGFyYWN0ZXJz
KQotICAgICAgICAgICAgLCBtX2hhc2hBbmRGbGFncyhzX2hhc2hGbGFnOEJpdEJ1ZmZlciB8IHN0
cmluZ0tpbmQgfCBCdWZmZXJJbnRlcm5hbCB8IChTdHJpbmdIYXNoZXI6OmNvbXB1dGVMaXRlcmFs
SGFzaEFuZE1hc2tUb3A4Qml0cyhjaGFyYWN0ZXJzKSA8PCBzX2ZsYWdDb3VudCkpCisgICAgICAg
ICAgICA6IFN0cmluZ0ltcGxTaGFwZShzX3JlZkNvdW50RmxhZ0lzU3RhdGljU3RyaW5nLCBjaGFy
YWN0ZXJzQ291bnQgLSAxLCBjaGFyYWN0ZXJzLAorICAgICAgICAgICAgICAgIHNfaGFzaEZsYWc4
Qml0QnVmZmVyIHwgc19oYXNoRmxhZ0RpZFJlcG9ydENvc3QgfCBzdHJpbmdLaW5kIHwgQnVmZmVy
SW50ZXJuYWwgfCAoU3RyaW5nSGFzaGVyOjpjb21wdXRlTGl0ZXJhbEhhc2hBbmRNYXNrVG9wOEJp
dHMoY2hhcmFjdGVycykgPDwgc19mbGFnQ291bnQpKQogICAgICAgICB7CiAgICAgICAgIH0KIAog
ICAgICAgICB0ZW1wbGF0ZTx1bnNpZ25lZCBjaGFyYWN0ZXJzQ291bnQ+CiAgICAgICAgIGNvbnN0
ZXhwciBTdGF0aWNTdHJpbmdJbXBsKGNvbnN0IGNoYXIxNl90ICgmY2hhcmFjdGVycylbY2hhcmFj
dGVyc0NvdW50XSwgU3RyaW5nS2luZCBzdHJpbmdLaW5kID0gU3RyaW5nTm9ybWFsKQotICAgICAg
ICAgICAgOiBtX3JlZkNvdW50KHNfcmVmQ291bnRGbGFnSXNTdGF0aWNTdHJpbmcpCi0gICAgICAg
ICAgICAsIG1fbGVuZ3RoKGNoYXJhY3RlcnNDb3VudCAtIDEpCi0gICAgICAgICAgICAsIG1fZGF0
YTE2KGNoYXJhY3RlcnMpCi0gICAgICAgICAgICAsIG1faGFzaEFuZEZsYWdzKHN0cmluZ0tpbmQg
fCBCdWZmZXJJbnRlcm5hbCB8IChTdHJpbmdIYXNoZXI6OmNvbXB1dGVMaXRlcmFsSGFzaEFuZE1h
c2tUb3A4Qml0cyhjaGFyYWN0ZXJzKSA8PCBzX2ZsYWdDb3VudCkpCisgICAgICAgICAgICA6IFN0
cmluZ0ltcGxTaGFwZShzX3JlZkNvdW50RmxhZ0lzU3RhdGljU3RyaW5nLCBjaGFyYWN0ZXJzQ291
bnQgLSAxLCBjaGFyYWN0ZXJzLAorICAgICAgICAgICAgICAgIHNfaGFzaEZsYWdEaWRSZXBvcnRD
b3N0IHwgc3RyaW5nS2luZCB8IEJ1ZmZlckludGVybmFsIHwgKFN0cmluZ0hhc2hlcjo6Y29tcHV0
ZUxpdGVyYWxIYXNoQW5kTWFza1RvcDhCaXRzKGNoYXJhY3RlcnMpIDw8IHNfZmxhZ0NvdW50KSkK
ICAgICAgICAgewogICAgICAgICB9CiAKQEAgLTU2NSwxNSArNjA0LDYgQEAgcHVibGljOgogICAg
ICAgICB7CiAgICAgICAgICAgICByZXR1cm4gKnJlaW50ZXJwcmV0X2Nhc3Q8U3RyaW5nSW1wbCo+
KHRoaXMpOwogICAgICAgICB9Ci0KLSAgICAgICAgLy8gVGhlc2UgbWVtYmVyIHZhcmlhYmxlcyBt
dXN0IG1hdGNoIHRoZSBsYXlvdXQgb2YgU3RyaW5nSW1wbC4KLSAgICAgICAgdW5zaWduZWQgbV9y
ZWZDb3VudDsKLSAgICAgICAgdW5zaWduZWQgbV9sZW5ndGg7Ci0gICAgICAgIHVuaW9uIHsKLSAg
ICAgICAgICAgIGNvbnN0IGNoYXIqIG1fZGF0YTg7Ci0gICAgICAgICAgICBjb25zdCBjaGFyMTZf
dCogbV9kYXRhMTY7Ci0gICAgICAgIH07Ci0gICAgICAgIHVuc2lnbmVkIG1faGFzaEFuZEZsYWdz
OwogICAgIH07CiAKICAgICBXVEZfRVhQT1JUREFUQSBzdGF0aWMgU3RhdGljU3RyaW5nSW1wbCBz
X2F0b21pY0VtcHR5U3RyaW5nOwpAQCAtNzM5LDEwICs3NjksNyBAQCBwcm90ZWN0ZWQ6CiAKICAg
ICAvLyBVc2VkIHRvIGNyZWF0ZSBuZXcgc3ltYm9sIHN0cmluZ3MgdGhhdCBob2xkcyBleGlzdGlu
ZyA4LWJpdCBbW0Rlc2NyaXB0aW9uXV0gc3RyaW5nIGFzIGEgc3Vic3RyaW5nIGJ1ZmZlciAoQnVm
ZmVyU3Vic3RyaW5nKS4KICAgICBTdHJpbmdJbXBsKENyZWF0ZVN5bWJvbFRhZywgY29uc3QgTENo
YXIqIGNoYXJhY3RlcnMsIHVuc2lnbmVkIGxlbmd0aCkKLSAgICAgICAgOiBtX3JlZkNvdW50KHNf
cmVmQ291bnRJbmNyZW1lbnQpCi0gICAgICAgICwgbV9sZW5ndGgobGVuZ3RoKQotICAgICAgICAs
IG1fZGF0YTgoY2hhcmFjdGVycykKLSAgICAgICAgLCBtX2hhc2hBbmRGbGFncyhzX2hhc2hGbGFn
OEJpdEJ1ZmZlciB8IFN0cmluZ1N5bWJvbCB8IEJ1ZmZlclN1YnN0cmluZykKKyAgICAgICAgOiBT
dHJpbmdJbXBsU2hhcGUoc19yZWZDb3VudEluY3JlbWVudCwgbGVuZ3RoLCBjaGFyYWN0ZXJzLCBz
X2hhc2hGbGFnOEJpdEJ1ZmZlciB8IFN0cmluZ1N5bWJvbCB8IEJ1ZmZlclN1YnN0cmluZykKICAg
ICB7CiAgICAgICAgIEFTU0VSVChpczhCaXQoKSk7CiAgICAgICAgIEFTU0VSVChtX2RhdGE4KTsK
QEAgLTc1MSwxMCArNzc4LDcgQEAgcHJvdGVjdGVkOgogCiAgICAgLy8gVXNlZCB0byBjcmVhdGUg
bmV3IHN5bWJvbCBzdHJpbmdzIHRoYXQgaG9sZHMgZXhpc3RpbmcgMTYtYml0IFtbRGVzY3JpcHRp
b25dXSBzdHJpbmcgYXMgYSBzdWJzdHJpbmcgYnVmZmVyIChCdWZmZXJTdWJzdHJpbmcpLgogICAg
IFN0cmluZ0ltcGwoQ3JlYXRlU3ltYm9sVGFnLCBjb25zdCBVQ2hhciogY2hhcmFjdGVycywgdW5z
aWduZWQgbGVuZ3RoKQotICAgICAgICA6IG1fcmVmQ291bnQoc19yZWZDb3VudEluY3JlbWVudCkK
LSAgICAgICAgLCBtX2xlbmd0aChsZW5ndGgpCi0gICAgICAgICwgbV9kYXRhMTYoY2hhcmFjdGVy
cykKLSAgICAgICAgLCBtX2hhc2hBbmRGbGFncyhTdHJpbmdTeW1ib2wgfCBCdWZmZXJTdWJzdHJp
bmcpCisgICAgICAgIDogU3RyaW5nSW1wbFNoYXBlKHNfcmVmQ291bnRJbmNyZW1lbnQsIGxlbmd0
aCwgY2hhcmFjdGVycywgU3RyaW5nU3ltYm9sIHwgQnVmZmVyU3Vic3RyaW5nKQogICAgIHsKICAg
ICAgICAgQVNTRVJUKCFpczhCaXQoKSk7CiAgICAgICAgIEFTU0VSVChtX2RhdGExNik7CkBAIC03
NjMsMTAgKzc4Nyw3IEBAIHByb3RlY3RlZDoKIAogICAgIC8vIE51bGwgc3ltYm9sLgogICAgIFN0
cmluZ0ltcGwoQ3JlYXRlU3ltYm9sVGFnKQotICAgICAgICA6IG1fcmVmQ291bnQoc19yZWZDb3Vu
dEluY3JlbWVudCkKLSAgICAgICAgLCBtX2xlbmd0aCgwKQotICAgICAgICAsIG1fZGF0YTgoZW1w
dHkoKS0+Y2hhcmFjdGVyczgoKSkKLSAgICAgICAgLCBtX2hhc2hBbmRGbGFncyhzX2hhc2hGbGFn
OEJpdEJ1ZmZlciB8IFN0cmluZ1N5bWJvbCB8IEJ1ZmZlclN1YnN0cmluZykKKyAgICAgICAgOiBT
dHJpbmdJbXBsU2hhcGUoc19yZWZDb3VudEluY3JlbWVudCwgMCwgZW1wdHkoKS0+Y2hhcmFjdGVy
czgoKSwgc19oYXNoRmxhZzhCaXRCdWZmZXIgfCBTdHJpbmdTeW1ib2wgfCBCdWZmZXJTdWJzdHJp
bmcpCiAgICAgewogICAgICAgICBBU1NFUlQoaXM4Qml0KCkpOwogICAgICAgICBBU1NFUlQobV9k
YXRhOCk7CkBAIC04NTksMTkgKzg4MCwxMSBAQCBwdWJsaWM6CiAgICAgICAgIEFTU0VSVChleGlz
dGluZ0hhc2goKSA9PSBTdHJpbmdIYXNoZXI6OmNvbXB1dGVIYXNoQW5kTWFza1RvcDhCaXRzKGNo
YXJhY3RlcnM4KCksIGxlbmd0aCgpKSk7CiAgICAgfQogI2VuZGlmCi0KLXByaXZhdGU6Ci0gICAg
Ly8gVGhlc2UgbWVtYmVyIHZhcmlhYmxlcyBtdXN0IG1hdGNoIHRoZSBsYXlvdXQgb2YgU3RhdGlj
U3RyaW5nSW1wbC4KLSAgICB1bnNpZ25lZCBtX3JlZkNvdW50OwotICAgIHVuc2lnbmVkIG1fbGVu
Z3RoOwotICAgIHVuaW9uIHsKLSAgICAgICAgY29uc3QgTENoYXIqIG1fZGF0YTg7Ci0gICAgICAg
IGNvbnN0IFVDaGFyKiBtX2RhdGExNjsKLSAgICB9OwotICAgIG11dGFibGUgdW5zaWduZWQgbV9o
YXNoQW5kRmxhZ3M7CiB9OwogCi1zdGF0aWNfYXNzZXJ0KHNpemVvZihTdHJpbmdJbXBsKSA9PSBz
aXplb2YoU3RyaW5nSW1wbDo6U3RhdGljU3RyaW5nSW1wbCksICIiKTsKK3VzaW5nIFN0YXRpY1N0
cmluZ0ltcGwgPSBTdHJpbmdJbXBsOjpTdGF0aWNTdHJpbmdJbXBsOworCitzdGF0aWNfYXNzZXJ0
KHNpemVvZihTdHJpbmdJbXBsKSA9PSBzaXplb2YoU3RhdGljU3RyaW5nSW1wbCksICIiKTsKIAog
I2lmICFBU1NFUlRfRElTQUJMRUQKIC8vIFN0cmluZ0ltcGxzIGNyZWF0ZWQgZnJvbSBTdGF0aWNT
dHJpbmdJbXBsIHdpbGwgQVNTRVJUCkBAIC0xMTM2LDEwICsxMTQ5LDI2IEBAIHRlbXBsYXRlPHVu
c2lnbmVkIGxlbmd0aD4gaW5saW5lIGJvb2wgZXEKICAgICByZXR1cm4gc3RyaW5nICYmIGVxdWFs
TGV0dGVyc0lnbm9yaW5nQVNDSUlDYXNlKCpzdHJpbmcsIGxvd2VyY2FzZUxldHRlcnMpOwogfQog
Cit0ZW1wbGF0ZTx1bnNpZ25lZCBjaGFyYWN0ZXJzQ291bnQ+CitTdGF0aWNTdHJpbmdJbXBsJiBt
YWtlU3RhdGljU3RyaW5nSW1wbChjb25zdCBjaGFyICgmY2hhcmFjdGVycylbY2hhcmFjdGVyc0Nv
dW50XSkKK3sKKyAgICBzdGF0aWMgU3RhdGljU3RyaW5nSW1wbCBpbXBsKGNoYXJhY3RlcnMpOwor
ICAgIHJldHVybiBpbXBsOworfQorCit0ZW1wbGF0ZTx1bnNpZ25lZCBjaGFyYWN0ZXJzQ291bnQ+
CitTdGF0aWNTdHJpbmdJbXBsJiBtYWtlU3RhdGljU3RyaW5nSW1wbChjb25zdCBjaGFyMTZfdCAo
JmNoYXJhY3RlcnMpW2NoYXJhY3RlcnNDb3VudF0pCit7CisgICAgc3RhdGljIFN0YXRpY1N0cmlu
Z0ltcGwgaW1wbChjaGFyYWN0ZXJzKTsKKyAgICByZXR1cm4gaW1wbDsKK30KKwogfSAvLyBuYW1l
c3BhY2UgV1RGCiAKIHVzaW5nIFdURjo6U3RyaW5nSW1wbDsKK3VzaW5nIFdURjo6U3RhdGljU3Ry
aW5nSW1wbDsKIHVzaW5nIFdURjo6ZXF1YWw7Cit1c2luZyBXVEY6Om1ha2VTdGF0aWNTdHJpbmdJ
bXBsOwogdXNpbmcgV1RGOjpUZXh0Q2FzZVNlbnNpdGl2aXR5OwogdXNpbmcgV1RGOjpUZXh0Q2Fz
ZVNlbnNpdGl2ZTsKIHVzaW5nIFdURjo6VGV4dENhc2VJbnNlbnNpdGl2ZTsKSW5kZXg6IFNvdXJj
ZS9XVEYvd3RmL3RleHQvV1RGU3RyaW5nLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV1RGL3d0
Zi90ZXh0L1dURlN0cmluZy5jcHAJKHJldmlzaW9uIDIxNTkxOSkKKysrIFNvdXJjZS9XVEYvd3Rm
L3RleHQvV1RGU3RyaW5nLmNwcAkod29ya2luZyBjb3B5KQpAQCAtMSw2ICsxLDYgQEAKIC8qCiAg
KiAoQykgMTk5OSBMYXJzIEtub2xsIChrbm9sbEBrZGUub3JnKQotICogQ29weXJpZ2h0IChDKSAy
MDA0LCAyMDA1LCAyMDA2LCAyMDA3LCAyMDA4LCAyMDEwLCAyMDEyIEFwcGxlIEluYy4gQWxsIHJp
Z2h0cyByZXNlcnZlZC4KKyAqIENvcHlyaWdodCAoQykgMjAwNC0yMDE3IEFwcGxlIEluYy4gQWxs
IHJpZ2h0cyByZXNlcnZlZC4KICAqIENvcHlyaWdodCAoQykgMjAwNy0yMDA5IFRvcmNoIE1vYmls
ZSwgSW5jLgogICoKICAqIFRoaXMgbGlicmFyeSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJl
ZGlzdHJpYnV0ZSBpdCBhbmQvb3IKQEAgLTg3LDYgKzg3LDExIEBAIFN0cmluZzo6U3RyaW5nKEFT
Q0lJTGl0ZXJhbCBjaGFyYWN0ZXJzKQogewogfQogCitTdHJpbmc6OlN0cmluZyhTdGF0aWNBU0NJ
SUxpdGVyYWwgbGl0ZXJhbCkKKyAgICA6IG1faW1wbCgmbGl0ZXJhbC5zdHJpbmdJbXBsKQorewor
fQorCiB2b2lkIFN0cmluZzo6YXBwZW5kKGNvbnN0IFN0cmluZyYgc3RyKQogewogICAgIC8vIEZJ
WE1FOiBUaGlzIGlzIGV4dHJlbWVseSBpbmVmZmljaWVudC4gU28gbXVjaCBzbyB0aGF0IHdlIG1p
Z2h0IHdhbnQgdG8gdGFrZSB0aGlzIG91dCBvZiBTdHJpbmcncyBBUEkuCkluZGV4OiBTb3VyY2Uv
V1RGL3d0Zi90ZXh0L1dURlN0cmluZy5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XVEYvd3RmL3Rl
eHQvV1RGU3RyaW5nLmgJKHJldmlzaW9uIDIxNTkxOSkKKysrIFNvdXJjZS9XVEYvd3RmL3RleHQv
V1RGU3RyaW5nLmgJKHdvcmtpbmcgY29weSkKQEAgLTEsNiArMSw2IEBACiAvKgogICogKEMpIDE5
OTkgTGFycyBLbm9sbCAoa25vbGxAa2RlLm9yZykKLSAqIENvcHlyaWdodCAoQykgMjAwNC0yMDE2
IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqIENvcHlyaWdodCAoQykgMjAwNC0y
MDE3IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KICAqCiAgKiBUaGlzIGxpYnJhcnkg
aXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yCiAgKiBtb2Rp
ZnkgaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgTGlicmFyeSBHZW5lcmFsIFB1YmxpYwpA
QCAtMzYsNiArMzYsNyBAQAogbmFtZXNwYWNlIFdURiB7CiAKIGNsYXNzIEFTQ0lJTGl0ZXJhbDsK
K2NsYXNzIFN0YXRpY0FTQ0lJTGl0ZXJhbDsKIAogLy8gRGVjbGFyYXRpb25zIG9mIHN0cmluZyBv
cGVyYXRpb25zCiAKQEAgLTExNSw3ICsxMTYsMTAgQEAgcHVibGljOgogICAgIFN0cmluZyhSZWZQ
dHI8QXRvbWljU3RyaW5nSW1wbD4mJik7CiAKICAgICAvLyBDb25zdHJ1Y3QgYSBzdHJpbmcgZnJv
bSBhIGNvbnN0YW50IHN0cmluZyBsaXRlcmFsLgotICAgIFdURl9FWFBPUlRfU1RSSU5HX0FQSSBT
dHJpbmcoQVNDSUlMaXRlcmFsIGNoYXJhY3RlcnMpOworICAgIFdURl9FWFBPUlRfU1RSSU5HX0FQ
SSBTdHJpbmcoQVNDSUlMaXRlcmFsKTsKKworICAgIC8vIENvbnN0cnVjdCBhIHN0cmluZyB3aXRo
IGEgU3RhdGljU3RyaW5nSW1wbCBmcm9tIGEgY29uc3RhbnQgc3RyaW5nIGxpdGVyYWwuCisgICAg
V1RGX0VYUE9SVF9TVFJJTkdfQVBJIFN0cmluZyhTdGF0aWNBU0NJSUxpdGVyYWwpOwogCiAgICAg
Ly8gQ29uc3RydWN0IGEgc3RyaW5nIGZyb20gYSBjb25zdGFudCBzdHJpbmcgbGl0ZXJhbC4KICAg
ICAvLyBUaGlzIGNvbnN0cnVjdG9yIGlzIHRoZSAiYmlnIiB2ZXJzaW9uLCBhcyBpdCBwdXQgdGhl
IGxlbmd0aCBpbiB0aGUgZnVuY3Rpb24gY2FsbCBhbmQgZ2VuZXJhdGUgYmlnZ2VyIGNvZGUuCkBA
IC02OTIsNiArNjk2LDE2IEBAIHByaXZhdGU6CiAgICAgY29uc3QgY2hhciogbV9jaGFyYWN0ZXJz
OwogfTsKIAorY2xhc3MgU3RhdGljQVNDSUlMaXRlcmFsIHsKK3B1YmxpYzoKKyAgICB0ZW1wbGF0
ZTx1bnNpZ25lZCBjaGFyYWN0ZXJzQ291bnQ+CisgICAgZXhwbGljaXQgU3RhdGljQVNDSUlMaXRl
cmFsKGNvbnN0IGNoYXIgKCZjaGFyYWN0ZXJzKVtjaGFyYWN0ZXJzQ291bnRdKQorICAgICAgICA6
IHN0cmluZ0ltcGwobWFrZVN0YXRpY1N0cmluZ0ltcGwoY2hhcmFjdGVycykpCisgICAgeyB9CisK
KyAgICBTdHJpbmdJbXBsJiBzdHJpbmdJbXBsOworfTsKKwogLy8gU2hhcmVkIGdsb2JhbCBlbXB0
eSBzdHJpbmcuCiBXVEZfRVhQT1JUX1NUUklOR19BUEkgY29uc3QgU3RyaW5nJiBlbXB0eVN0cmlu
ZygpOwogCkBAIC03MjgsNyArNzQyLDcgQEAgdGVtcGxhdGU8PiBzdHJ1Y3QgSW50ZWdlclRvU3Ry
aW5nQ29udmVycwogICAgIHN0YXRpYyBTdHJpbmcgZmx1c2goTENoYXIqIGNoYXJhY3RlcnMsIHVu
c2lnbmVkIGxlbmd0aCwgdm9pZCopIHsgcmV0dXJuIHsgY2hhcmFjdGVycywgbGVuZ3RoIH07IH0K
IH07CiAKLX0KK30gLy8gbmFtZXNwYWNlIFdURgogCiB1c2luZyBXVEY6OkNTdHJpbmc7CiB1c2lu
ZyBXVEY6OktlZXBUcmFpbGluZ1plcm9zOwpAQCAtNzU0LDYgKzc2OCw3IEBAIHVzaW5nIFdURjo6
aXNBbGxTcGVjaWFsQ2hhcmFjdGVyczsKIHVzaW5nIFdURjo6aXNTcGFjZU9yTmV3bGluZTsKIHVz
aW5nIFdURjo6cmV2ZXJzZUZpbmQ7CiB1c2luZyBXVEY6OkFTQ0lJTGl0ZXJhbDsKK3VzaW5nIFdU
Rjo6U3RhdGljQVNDSUlMaXRlcmFsOwogCiAjaW5jbHVkZSA8d3RmL3RleHQvQXRvbWljU3RyaW5n
Lmg+CiAKSW5kZXg6IFNvdXJjZS9XVEYvd3RmL3RleHQvaWN1L1RleHRCcmVha0l0ZXJhdG9ySUNV
LmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PQotLS0gU291cmNlL1dURi93dGYvdGV4dC9pY3UvVGV4dEJyZWFrSXRlcmF0
b3JJQ1UuaAkocmV2aXNpb24gMjE1OTE5KQorKysgU291cmNlL1dURi93dGYvdGV4dC9pY3UvVGV4
dEJyZWFrSXRlcmF0b3JJQ1UuaAkod29ya2luZyBjb3B5KQpAQCAtMzEsNyArMzEsNyBAQCBuYW1l
c3BhY2UgV1RGIHsKICNpZiBVU0VfSUNVX0NBUkVUX0lURVJBVE9SCiBzdGF0aWMgU3RyaW5nIGNh
cmV0UnVsZXMoKQogewotICAgIHJldHVybiBBU0NJSUxpdGVyYWwoCisgICAgcmV0dXJuIFN0YXRp
Y0FTQ0lJTGl0ZXJhbCgKICAgICAgICAgLy8gVGhpcyBydWxlIHNldCBpcyBiYXNlZCBvbiBjaGFy
YWN0ZXItYnJlYWsgaXRlcmF0b3IgcnVsZXMgb2YgSUNVIDU3CiAgICAgICAgIC8vIDxodHRwOi8v
c291cmNlLmljdS1wcm9qZWN0Lm9yZy9yZXBvcy9pY3UvaWN1L3RhZ3MvcmVsZWFzZS01Ny0xL3Nv
dXJjZS9kYXRhL2Jya2l0ci8+LgogICAgICAgICAvLyBUaGUgbWFqb3IgZGlmZmVyZW5jZXMgZnJv
bSB0aGUgb3JpZ2luYWwgb25lcyBhcmUgbGlzdGVkIGJlbG93Ogo=
</data>

          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>308879</attachid>
            <date>2017-05-02 18:37:17 -0700</date>
            <delta_ts>2017-05-04 14:20:20 -0700</delta_ts>
            <desc>rebased to ToT</desc>
            <filename>bug-171586.patch</filename>
            <type>text/plain</type>
            <size>48962</size>
            <attacher name="Mark Lam">mark.lam</attacher>
            
              <data encoding="base64">SW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9DaGFuZ2VMb2cKPT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291
cmNlL0phdmFTY3JpcHRDb3JlL0NoYW5nZUxvZwkocmV2aXNpb24gMjE2MTA3KQorKysgU291cmNl
L0phdmFTY3JpcHRDb3JlL0NoYW5nZUxvZwkod29ya2luZyBjb3B5KQpAQCAtMSwzICsxLDc5IEBA
CisyMDE3LTA1LTAyICBNYXJrIExhbSAgPG1hcmsubGFtQGFwcGxlLmNvbT4KKworICAgICAgICBO
ZXZlckRlc3Ryb3llZDxTdHJpbmc+KEFTQ0lJTGl0ZXJhbCguLi4pKSBpcyBub3QgdGhyZWFkIHNh
ZmUuCisgICAgICAgIGh0dHBzOi8vYnVncy53ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9pZD0xNzE1
ODYKKyAgICAgICAgPHJkYXI6Ly9wcm9ibGVtLzMxODczMTkwPgorCisgICAgICAgIFJldmlld2Vk
IGJ5IE5PQk9EWSAoT09QUyEpLgorICAgICAgICAKKyAgICAgICAgSmF2YVNjcmlwdENvcmUgYWxs
b3dzIG11bHRpcGxlIFZNcyB0byBiZSBpbnN0YW50aWF0ZWQsIGFuZCBlYWNoIG9mIHRoZXNlIHNo
b3VsZAorICAgICAgICBiZSBhYmxlIHRvIHJ1biBjb25jdXJyZW50bHkgb24gZGlmZmVyZW50IHRo
cmVhZHMuICBUaGVyZSBpcyBjb2RlIGluIHRoZSBWTSB0aGF0CisgICAgICAgIGFsbG9jYXRlcyBO
ZXZlckRlc3Ryb3llZDxTdHJpbmc+KEFTQ0lJTGl0ZXJhbCguLi4pKSB0byBkZWZpbmVkIGltbW9y
dGFsIHN0cmluZ3MKKyAgICAgICAgbWVhbnQgdG8gYmUgc2hhcmVkIGJ5IGFsbCBWTXMuCisgICAg
ICAgIAorICAgICAgICBIb3dldmVyLCBOZXZlckRlc3Ryb3llZDxTdHJpbmc+KEFTQ0lJTGl0ZXJh
bCguLi4pKSBpcyBub3QgdGhyZWFkLXNhZmUgYmVjYXVzZQorICAgICAgICBlYWNoIHRocmVhZCB3
aWxsIHJlZiBhbmQgZGVyZWYgdGhlIHVuZGVybHlpbmcgU3RyaW5nSW1wbC4gIFNpbmNlIHRoaXMg
cmVmIGFuZAorICAgICAgICBkZXJlZiBpcyBkb3duIGluIGEgdGhyZWFkLXNhZmUgd2F5LCB0aGUg
TmV2ZXJEZXN0cm95ZWQ8U3RyaW5nPiBtYXkgZ2V0IGRlc3Ryb3llZAorICAgICAgICBkdWUgdG8g
dGhlIHJlZi9kZXJlZiByYWNlcy4gIEFkZGl0aW9uYWxseSwgZWFjaCB0aHJlYWQgbWF5IG1vZGlm
eSB0aGUgU3RyaW5nSW1wbAorICAgICAgICBieSBzZXR0aW5nIGl0cyBoYXNoIGFuZCBhbHNvIHR3
aWRkbGluZyBpdHMgZmxhZ3MuCisKKyAgICAgICAgVGhlIGZpeCBpcyB0byB1c2UgdGhlIFN0YXRp
Y1N0cmluZ0ltcGwgY2xhc3Mgd2hpY2ggaXMgc2FmZSBmb3IgcmVmL2RlcmVmaW5nCisgICAgICAg
IGNvbmN1cnJlbnRseSBmcm9tIGRpZmZlcmVudCB0aHJlYWRzLiAgU3RhdGljU3RyaW5nSW1wbCBp
cyBhbHNvIHByZS1zZXQgd2l0aCBhCisgICAgICAgIGhhc2ggb24gY29uc3RydWN0aW9uLCBhbmQg
aXRzIGZsYWdzIGFyZSBzZXQgaW4gc3VjaCBhIHdheSBhcyB0byBwcmV2ZW50IHR3aWRkbGluZwor
ICAgICAgICBhdCBydW50aW1lLiAgSGVuY2UsIHdlIHdpbGwgYmUgYWJsZSB0byBzaGFyZSBhIE5l
dmVyRGVzdHJveWVkPFN0cmluZz4gYmV0d2VlbgorICAgICAgICBWTXMsIGFzIGxvbmcgYXMgaXQg
aXMgYmFja2VkIGJ5IGEgU3RhdGljU3RyaW5nSW1wbC4KKworICAgICAgICBBbiBhbHRlcm5hdGl2
ZSBzb2x1dGlvbiB3b3VsZCBiZSB0byBjaGFuZ2UgYWxsIHRoZSB1c2VzIG9mIE5ldmVyRGVzdHJv
eWVkPFN0cmluZz4KKyAgICAgICAgdG8gdXNlIHBlci1WTSBzdHJpbmdzLiAgSG93ZXZlciwgdGhp
cyBzb2x1dGlvbiBpcyBjdW1iZXJzb21lLCBhbmQgbWFrZXMgaXQgaGFyZGVyCisgICAgICAgIHRv
IGFsbG9jYXRlIHRoZSBpbnRlbmRlZCBzaGFyZWQgc3RyaW5nLiAgSXQgYWxzbyB1c2VzIG1vcmUg
bWVtb3J5IGFuZCB0YWtlcyBtb3JlCisgICAgICAgIENQVSB0aW1lIGJlY2F1c2UgaXQgcmVxdWly
ZXMgYWxsb2NhdGluZyB0aGUgc2FtZSBzdHJpbmcgZm9yIGVhY2ggVk0gaW5zdGFuY2UuCisgICAg
ICAgIFRoZSBTdGF0aWNTdHJpbmdJbXBsIHNvbHV0aW9uIHdpbnMgb3V0IGJlY2F1c2UgaXQgaXMg
bW9yZSBlZmZpY2llbnQgYW5kIGlzIGVhc2llcgorICAgICAgICB0byB1c2UuCisKKyAgICAgICAg
VGhlIFN0YXRpY1N0cmluZ0ltcGwgc29sdXRpb24gYWxzbyBjYW4gYmUgdXNlZCBpbiBXVEYgd2l0
aG91dCBhIGxheWVyIHZpb2xhdGlvbi4KKyAgICAgICAgU2VlIFNvdXJjZS9XVEYvd3RmL3RleHQv
aWN1L1RleHRCcmVha0l0ZXJhdG9ySUNVLmggZm9yIGFuIGV4YW1wbGUuCisKKyAgICAgICAgQWxz
byBhZGRlZCB0aGUgTXVsdGl0aHJlYWRlZE11bHRpVk1FeGVjdXRpb25UZXN0IHdoaWNoIHJ1bnMg
bXVsdGlwbGUgVk1zIGluCisgICAgICAgIG11bHRpcGxlIHRocmVhZHMsIGFsbCBiYW5naW5nIG9u
IHRoZSBCdWlsdGluRXhlY3V0YWJsZSdzIGJhc2VDb25zdHJ1Y3RvckNvZGUKKyAgICAgICAgTmV2
ZXJEZXN0cm95ZWQ8U3RyaW5nPi4gIFRoZSB0ZXN0IHdpbGwgbWFuaWZlc3QgdGhlIGlzc3VlIHJl
bGlhYmx5IChiZWZvcmUgdGhpcworICAgICAgICBmaXgpIGlmIHJ1biBvbiBhbiBBU0FOIGJ1aWxk
LgorCisgICAgICAgICogQVBJL3Rlc3RzL011bHRpdGhyZWFkZWRNdWx0aVZNRXhlY3V0aW9uVGVz
dC5jcHA6IEFkZGVkLgorICAgICAgICAodGhyZWFkc0xpc3QpOgorICAgICAgICAoc3RhcnRNdWx0
aXRocmVhZGVkTXVsdGlWTUV4ZWN1dGlvblRlc3QpOgorICAgICAgICAoZmluYWxpemVNdWx0aXRo
cmVhZGVkTXVsdGlWTUV4ZWN1dGlvblRlc3QpOgorICAgICAgICAqIEFQSS90ZXN0cy9NdWx0aXRo
cmVhZGVkTXVsdGlWTUV4ZWN1dGlvblRlc3QuaDogQWRkZWQuCisgICAgICAgICogQVBJL3Rlc3Rz
L3Rlc3RhcGkuYzoKKyAgICAgICAgKG1haW4pOgorICAgICAgICAqIEphdmFTY3JpcHRDb3JlLnhj
b2RlcHJvai9wcm9qZWN0LnBieHByb2o6CisgICAgICAgICogYnVpbHRpbnMvQnVpbHRpbkV4ZWN1
dGFibGVzLmNwcDoKKyAgICAgICAgKEpTQzo6QnVpbHRpbkV4ZWN1dGFibGVzOjpjcmVhdGVEZWZh
dWx0Q29uc3RydWN0b3IpOgorICAgICAgICAqIGluc3BlY3Rvci9hZ2VudHMvSW5zcGVjdG9yRGVi
dWdnZXJBZ2VudC5jcHA6CisgICAgICAgIChJbnNwZWN0b3I6Om9iamVjdEdyb3VwRm9yQnJlYWtw
b2ludEFjdGlvbik6CisgICAgICAgICogcmVwbGF5L3NjcmlwdHMvQ29kZUdlbmVyYXRvclJlcGxh
eUlucHV0c1RlbXBsYXRlcy5weToKKyAgICAgICAgKiByZXBsYXkvc2NyaXB0cy90ZXN0cy9leHBl
Y3RlZC9nZW5lcmF0ZS1lbnVtLWVuY29kaW5nLWhlbHBlcnMtd2l0aC1ndWFyZGVkLXZhbHVlcy5q
c29uLVRlc3RSZXBsYXlJbnB1dHMuY3BwOgorICAgICAgICAoSlNDOjpJbnB1dFRyYWl0czxUZXN0
OjpTYXZlZE1vdXNlQnV0dG9uPjo6dHlwZSk6CisgICAgICAgICogcmVwbGF5L3NjcmlwdHMvdGVz
dHMvZXhwZWN0ZWQvZ2VuZXJhdGUtZW51bS1lbmNvZGluZy1oZWxwZXJzLmpzb24tVGVzdFJlcGxh
eUlucHV0cy5jcHA6CisgICAgICAgIChKU0M6OklucHV0VHJhaXRzPFRlc3Q6OlNhdmVkTW91c2VC
dXR0b24+Ojp0eXBlKToKKyAgICAgICAgKiByZXBsYXkvc2NyaXB0cy90ZXN0cy9leHBlY3RlZC9n
ZW5lcmF0ZS1lbnVtLXdpdGgtZ3VhcmQuanNvbi1UZXN0UmVwbGF5SW5wdXRzLmNwcDoKKyAgICAg
ICAgKEpTQzo6SW5wdXRUcmFpdHM8VGVzdDo6SGFuZGxlV2hlZWxFdmVudD46OnR5cGUpOgorICAg
ICAgICAqIHJlcGxheS9zY3JpcHRzL3Rlc3RzL2V4cGVjdGVkL2dlbmVyYXRlLWVudW1zLXdpdGgt
c2FtZS1iYXNlLW5hbWUuanNvbi1UZXN0UmVwbGF5SW5wdXRzLmNwcDoKKyAgICAgICAgKEpTQzo6
SW5wdXRUcmFpdHM8VGVzdDo6Rm9ybUNvbWJvPjo6dHlwZSk6CisgICAgICAgICogcmVwbGF5L3Nj
cmlwdHMvdGVzdHMvZXhwZWN0ZWQvZ2VuZXJhdGUtaW5wdXQtd2l0aC1ndWFyZC5qc29uLVRlc3RS
ZXBsYXlJbnB1dHMuY3BwOgorICAgICAgICAoSlNDOjpJbnB1dFRyYWl0czxUZXN0OjpHZXRDdXJy
ZW50VGltZT46OnR5cGUpOgorICAgICAgICAoSlNDOjpJbnB1dFRyYWl0czxUZXN0OjpTZXRSYW5k
b21TZWVkPjo6dHlwZSk6CisgICAgICAgICogcmVwbGF5L3NjcmlwdHMvdGVzdHMvZXhwZWN0ZWQv
Z2VuZXJhdGUtaW5wdXQtd2l0aC12ZWN0b3ItbWVtYmVycy5qc29uLVRlc3RSZXBsYXlJbnB1dHMu
Y3BwOgorICAgICAgICAoSlNDOjpJbnB1dFRyYWl0czxUZXN0OjpBcnJheU9mVGhpbmdzPjo6dHlw
ZSk6CisgICAgICAgIChKU0M6OklucHV0VHJhaXRzPFRlc3Q6OlNhdmVkSGlzdG9yeT46OnR5cGUp
OgorICAgICAgICAqIHJlcGxheS9zY3JpcHRzL3Rlc3RzL2V4cGVjdGVkL2dlbmVyYXRlLWlucHV0
cy13aXRoLWZsYWdzLmpzb24tVGVzdFJlcGxheUlucHV0cy5jcHA6CisgICAgICAgIChKU0M6Oklu
cHV0VHJhaXRzPFRlc3Q6OlNjYWxhcklucHV0MT46OnR5cGUpOgorICAgICAgICAoSlNDOjpJbnB1
dFRyYWl0czxUZXN0OjpTY2FsYXJJbnB1dDI+Ojp0eXBlKToKKyAgICAgICAgKiByZXBsYXkvc2Ny
aXB0cy90ZXN0cy9leHBlY3RlZC9nZW5lcmF0ZS1tZW1vaXplZC10eXBlLW1vZGVzLmpzb24tVGVz
dFJlcGxheUlucHV0cy5jcHA6CisgICAgICAgIChKU0M6OklucHV0VHJhaXRzPFRlc3Q6OlNjYWxh
cklucHV0Pjo6dHlwZSk6CisgICAgICAgIChKU0M6OklucHV0VHJhaXRzPFRlc3Q6Ok1hcElucHV0
Pjo6dHlwZSk6CisgICAgICAgICogcnVudGltZS9JbnRsT2JqZWN0LmNwcDoKKyAgICAgICAgKEpT
Qzo6bnVtYmVyaW5nU3lzdGVtc0ZvckxvY2FsZSk6CisKIDIwMTctMDUtMDIgIEZpbGlwIFBpemxv
ICA8ZnBpemxvQGFwcGxlLmNvbT4KIAogICAgICAgICBVbnJldmlld2VkLCBmaXggcGVkYW50aWMg
QyBjb21waWxlcnMuCkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvQVBJL3Rlc3RzL011bHRp
dGhyZWFkZWRNdWx0aVZNRXhlY3V0aW9uVGVzdC5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0ph
dmFTY3JpcHRDb3JlL0FQSS90ZXN0cy9NdWx0aXRocmVhZGVkTXVsdGlWTUV4ZWN1dGlvblRlc3Qu
Y3BwCShub25leGlzdGVudCkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9BUEkvdGVzdHMvTXVs
dGl0aHJlYWRlZE11bHRpVk1FeGVjdXRpb25UZXN0LmNwcAkod29ya2luZyBjb3B5KQpAQCAtMCww
ICsxLDEwMyBAQAorLyoKKyAqIENvcHlyaWdodCAoQykgMjAxNyBBcHBsZSBJbmMuIEFsbCByaWdo
dHMgcmVzZXJ2ZWQuCisgKgorICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5k
IGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CisgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJt
aXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKKyAqIGFyZSBtZXQ6
CisgKiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFi
b3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQg
dGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgorICogMi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFy
eSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwg
dGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0
aGUKKyAqICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3
aXRoIHRoZSBkaXN0cmlidXRpb24uCisgKgorICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBC
WSBBUFBMRSBJTkMuIEFORCBJVFMgQ09OVFJJQlVUT1JTIGBgQVMgSVMnJworICogQU5EIEFOWSBF
WFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQg
VE8sCisgKiBUSEUgSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklU
TkVTUyBGT1IgQSBQQVJUSUNVTEFSCisgKiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiBJTiBOTyBF
VkVOVCBTSEFMTCBBUFBMRSBJTkMuIE9SIElUUyBDT05UUklCVVRPUlMKKyAqIEJFIExJQUJMRSBG
T1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsIEVYRU1QTEFSWSwg
T1IKKyAqIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQg
VE8sIFBST0NVUkVNRU5UIE9GCisgKiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NT
IE9GIFVTRSwgREFUQSwgT1IgUFJPRklUUzsgT1IgQlVTSU5FU1MKKyAqIElOVEVSUlVQVElPTikg
SE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkgT0YgTElBQklMSVRZLCBXSEVUSEVSIElO
CisgKiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVCAoSU5DTFVESU5HIE5FR0xJ
R0VOQ0UgT1IgT1RIRVJXSVNFKQorICogQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNF
IE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRgorICogVEhFIFBPU1NJQklMSVRZ
IE9GIFNVQ0ggREFNQUdFLgorICovCisKKyNpbmNsdWRlICJjb25maWcuaCIKKyNpbmNsdWRlICJN
dWx0aXRocmVhZGVkTXVsdGlWTUV4ZWN1dGlvblRlc3QuaCIKKworI2luY2x1ZGUgIkluaXRpYWxp
emVUaHJlYWRpbmcuaCIKKyNpbmNsdWRlICJKU0NvbnRleHRSZWZQcml2YXRlLmgiCisjaW5jbHVk
ZSAiSmF2YVNjcmlwdENvcmUuaCIKKyNpbmNsdWRlICJPcHRpb25zLmgiCisjaW5jbHVkZSA8bXV0
ZXg+CisjaW5jbHVkZSA8c3RyaW5nPgorI2luY2x1ZGUgPHRocmVhZD4KKyNpbmNsdWRlIDx2ZWN0
b3I+CisKK3N0YXRpYyBpbnQgZmFpbHVyZXNGb3VuZCA9IDA7CisKK3N0YXRpYyBzdGQ6OnZlY3Rv
cjxzdGQ6OnRocmVhZD4mIHRocmVhZHNMaXN0KCkKK3sKKyAgICBzdGF0aWMgc3RkOjp2ZWN0b3I8
c3RkOjp0aHJlYWQ+KiBsaXN0OworICAgIHN0YXRpYyBzdGQ6Om9uY2VfZmxhZyBmbGFnOworICAg
IHN0ZDo6Y2FsbF9vbmNlKGZsYWcsIFtdICgpIHsKKyAgICAgICAgbGlzdCA9IG5ldyBzdGQ6OnZl
Y3RvcjxzdGQ6OnRocmVhZD4oKTsKKyAgICB9KTsKKyAgICByZXR1cm4gKmxpc3Q7Cit9CisKK3Zv
aWQgc3RhcnRNdWx0aXRocmVhZGVkTXVsdGlWTUV4ZWN1dGlvblRlc3QoKQoreworICAgIEpTQzo6
aW5pdGlhbGl6ZVRocmVhZGluZygpOworCisjZGVmaW5lIENIRUNLKGNvbmRpdGlvbiwgbWVzc2Fn
ZSkgZG8geyBcCisgICAgICAgIGlmICghY29uZGl0aW9uKSB7IFwKKyAgICAgICAgICAgIHByaW50
ZigiRkFJTEVEIE11bHRpdGhyZWFkZWRNdWx0aVZNRXhlY3V0aW9uVGVzdDogJXNcbiIsIG1lc3Nh
Z2UpOyBcCisgICAgICAgICAgICBmYWlsdXJlc0ZvdW5kKys7IFwKKyAgICAgICAgfSBcCisgICAg
fSB3aGlsZSAoZmFsc2UpCisKKyAgICBhdXRvIHRhc2sgPSBbJl0oKSB7CisgICAgICAgIGludCBy
ZXQgPSAwOworICAgICAgICBzdGQ6OnN0cmluZyBzY3JpcHRTdHJpbmcgPQorICAgICAgICAgICAg
ImNvbnN0IEFBQSA9IHtBOjAsIEI6MSwgQzoyLCBEOjN9OyIKKyAgICAgICAgICAgICJjbGFzcyBQ
cmVjb25kaXRpb25zIHsgc3RhdGljIGNoZWNrQXJndW1lbnQoZSx0KSB7IGlmICghZSkgdGhyb3cg
dCB9fTsiCisgICAgICAgICAgICAiMSArIDIiOworCisgICAgICAgIGZvciAoaW50IGkgPSAwOyBp
IDwgMTAwMDsgKytpKSB7CisgICAgICAgICAgICBKU0NsYXNzUmVmIGpzQ2xhc3MgPSBKU0NsYXNz
Q3JlYXRlKCZrSlNDbGFzc0RlZmluaXRpb25FbXB0eSk7CisgICAgICAgICAgICBDSEVDSyhqc0Ns
YXNzLCAiZ2xvYmFsIG9iamVjdCBjbGFzcyBjcmVhdGlvbiIpOworICAgICAgICAgICAgSlNDb250
ZXh0R3JvdXBSZWYgY29udGV4dEdyb3VwID0gSlNDb250ZXh0R3JvdXBDcmVhdGUoKTsKKyAgICAg
ICAgICAgIENIRUNLKGNvbnRleHRHcm91cCwgImdyb3VwIGNyZWF0aW9uIik7CisgICAgICAgICAg
ICBKU0dsb2JhbENvbnRleHRSZWYgY29udGV4dCA9IEpTR2xvYmFsQ29udGV4dENyZWF0ZUluR3Jv
dXAoY29udGV4dEdyb3VwLCBqc0NsYXNzKTsKKyAgICAgICAgICAgIENIRUNLKGNvbnRleHQsICJj
dHggY3JlYXRpb24iKTsKKworICAgICAgICAgICAgSlNTdHJpbmdSZWYganNTY3JpcHRTdHJpbmcg
PSBKU1N0cmluZ0NyZWF0ZVdpdGhVVEY4Q1N0cmluZyhzY3JpcHRTdHJpbmcuY19zdHIoKSk7Cisg
ICAgICAgICAgICBDSEVDSyhqc1NjcmlwdFN0cmluZywgInNjcmlwdCB0byBqc1N0cmluZyIpOwor
CisgICAgICAgICAgICBKU1ZhbHVlUmVmIGpzU2NyaXB0ID0gSlNFdmFsdWF0ZVNjcmlwdChjb250
ZXh0LCBqc1NjcmlwdFN0cmluZywgbnVsbHB0ciwgbnVsbHB0ciwgMCwgbnVsbHB0cik7CisgICAg
ICAgICAgICBDSEVDSyhqc1NjcmlwdCwgInNjcmlwdCBldmFsIik7CisgICAgICAgICAgICBKU1N0
cmluZ1JlbGVhc2UoanNTY3JpcHRTdHJpbmcpOworCisgICAgICAgICAgICBKU0dsb2JhbENvbnRl
eHRSZWxlYXNlKGNvbnRleHQpOworICAgICAgICAgICAgSlNDb250ZXh0R3JvdXBSZWxlYXNlKGNv
bnRleHRHcm91cCk7CisgICAgICAgICAgICBKU0NsYXNzUmVsZWFzZShqc0NsYXNzKTsKKyAgICAg
ICAgfQorCisgICAgICAgIHJldHVybiByZXQ7CisgICAgfTsKKyAgICBmb3IgKGludCB0ID0gMDsg
dCA8IDg7ICsrdCkKKyAgICAgICAgdGhyZWFkc0xpc3QoKS5wdXNoX2JhY2soc3RkOjp0aHJlYWQo
dGFzaykpOworfQorCitpbnQgZmluYWxpemVNdWx0aXRocmVhZGVkTXVsdGlWTUV4ZWN1dGlvblRl
c3QoKQoreworICAgIGF1dG8mIHRocmVhZHMgPSB0aHJlYWRzTGlzdCgpOworICAgIGZvciAoYXV0
byYgdGhyZWFkIDogdGhyZWFkcykKKyAgICAgICAgdGhyZWFkLmpvaW4oKTsKKworICAgIGlmIChm
YWlsdXJlc0ZvdW5kKQorICAgICAgICBwcmludGYoIkZBSUxFRCBNdWx0aXRocmVhZGVkTXVsdGlW
TUV4ZWN1dGlvblRlc3RcbiIpOworICAgIHJldHVybiAoZmFpbHVyZXNGb3VuZCA+IDApOworfQpJ
bmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL0FQSS90ZXN0cy9NdWx0aXRocmVhZGVkTXVsdGlW
TUV4ZWN1dGlvblRlc3QuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvQVBJ
L3Rlc3RzL011bHRpdGhyZWFkZWRNdWx0aVZNRXhlY3V0aW9uVGVzdC5oCShub25leGlzdGVudCkK
KysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9BUEkvdGVzdHMvTXVsdGl0aHJlYWRlZE11bHRpVk1F
eGVjdXRpb25UZXN0LmgJKHdvcmtpbmcgY29weSkKQEAgLTAsMCArMSwzOSBAQAorLyoKKyAqIENv
cHlyaWdodCAoQykgMjAxNyBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKgorICog
UmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBv
ciB3aXRob3V0CisgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0
aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKKyAqIGFyZSBtZXQ6CisgKiAxLiBSZWRpc3RyaWJ1dGlv
bnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAg
bm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFp
bWVyLgorICogMi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNl
IHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlv
bnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKKyAqICAgIGRvY3VtZW50YXRp
b24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24u
CisgKgorICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBBUFBMRSBJTkMuIEFORCBJVFMg
Q09OVFJJQlVUT1JTIGBgQVMgSVMnJworICogQU5EIEFOWSBFWFBSRVNTIE9SIElNUExJRUQgV0FS
UkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sCisgKiBUSEUgSU1QTElFRCBX
QVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFS
CisgKiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBJTkMu
IE9SIElUUyBDT05UUklCVVRPUlMKKyAqIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJF
Q1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IKKyAqIENPTlNFUVVFTlRJQUwg
REFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFBST0NVUkVNRU5UIE9GCisg
KiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IgUFJP
RklUUzsgT1IgQlVTSU5FU1MKKyAqIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9O
IEFOWSBUSEVPUlkgT0YgTElBQklMSVRZLCBXSEVUSEVSIElOCisgKiBDT05UUkFDVCwgU1RSSUNU
IExJQUJJTElUWSwgT1IgVE9SVCAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKQor
ICogQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFIE9GIFRISVMgU09GVFdBUkUsIEVW
RU4gSUYgQURWSVNFRCBPRgorICogVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgorICov
CisKKyNwcmFnbWEgb25jZQorCisjaWZkZWYgX19jcGx1c3BsdXMKK2V4dGVybiAiQyIgeworI2Vu
ZGlmCisKK2V4dGVybiB2b2lkIHN0YXJ0TXVsdGl0aHJlYWRlZE11bHRpVk1FeGVjdXRpb25UZXN0
KCk7CisKKy8qIFJldHVybnMgMSBpZiBmYWlsdXJlcyB3ZXJlIGVuY291bnRlcmVkLiAgRWxzZSwg
cmV0dXJucyAwLiAqLworZXh0ZXJuIGludCBmaW5hbGl6ZU11bHRpdGhyZWFkZWRNdWx0aVZNRXhl
Y3V0aW9uVGVzdCgpOworCisjaWZkZWYgX19jcGx1c3BsdXMKK30gLyogZXh0ZXJuICJDIiAqLwor
I2VuZGlmCkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvQVBJL3Rlc3RzL3Rlc3RhcGkuYwo9
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvQVBJL3Rlc3RzL3Rlc3RhcGkuYwko
cmV2aXNpb24gMjE2MTA3KQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL0FQSS90ZXN0cy90ZXN0
YXBpLmMJKHdvcmtpbmcgY29weSkKQEAgLTQ3LDYgKzQ3LDcgQEAKICNpbmNsdWRlICJGdW5jdGlv
bk92ZXJyaWRlc1Rlc3QuaCIKICNpbmNsdWRlICJHbG9iYWxDb250ZXh0V2l0aEZpbmFsaXplclRl
c3QuaCIKICNpbmNsdWRlICJKU09OUGFyc2VUZXN0LmgiCisjaW5jbHVkZSAiTXVsdGl0aHJlYWRl
ZE11bHRpVk1FeGVjdXRpb25UZXN0LmgiCiAjaW5jbHVkZSAiUGluZ1BvbmdTdGFja092ZXJmbG93
VGVzdC5oIgogI2luY2x1ZGUgIlR5cGVkQXJyYXlDVGVzdC5oIgogCkBAIC0xMTg0LDYgKzExODUs
NyBAQCBpbnQgbWFpbihpbnQgYXJnYywgY2hhciogYXJndltdKQogI2VuZGlmCiAKICAgICB0ZXN0
Q29tcGFyZUFuZFN3YXAoKTsKKyAgICBzdGFydE11bHRpdGhyZWFkZWRNdWx0aVZNRXhlY3V0aW9u
VGVzdCgpOwogCiAjaWYgSlNDX09CSkNfQVBJX0VOQUJMRUQKICAgICB0ZXN0T2JqZWN0aXZlQ0FQ
SSgpOwpAQCAtMjAwMiw2ICsyMDA0LDggQEAgaW50IG1haW4oaW50IGFyZ2MsIGNoYXIqIGFyZ3Zb
XSkKICAgICBnbG9iYWxPYmplY3RTZXRQcm90b3R5cGVUZXN0KCk7CiAgICAgZ2xvYmFsT2JqZWN0
UHJpdmF0ZVByb3BlcnR5VGVzdCgpOwogCisgICAgZmFpbGVkID0gZmluYWxpemVNdWx0aXRocmVh
ZGVkTXVsdGlWTUV4ZWN1dGlvblRlc3QoKSB8fCBmYWlsZWQ7CisKICAgICBpZiAoZmFpbGVkKSB7
CiAgICAgICAgIHByaW50ZigiRkFJTDogU29tZSB0ZXN0cyBmYWlsZWQuXG4iKTsKICAgICAgICAg
cmV0dXJuIDE7CkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvSmF2YVNjcmlwdENvcmUueGNv
ZGVwcm9qL3Byb2plY3QucGJ4cHJvago9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENv
cmUvSmF2YVNjcmlwdENvcmUueGNvZGVwcm9qL3Byb2plY3QucGJ4cHJvagkocmV2aXNpb24gMjE2
MTA3KQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL0phdmFTY3JpcHRDb3JlLnhjb2RlcHJvai9w
cm9qZWN0LnBieHByb2oJKHdvcmtpbmcgY29weSkKQEAgLTI0OTIsNiArMjQ5Miw3IEBACiAJCUZF
RDk0RjJFMTcxRTNFMjMwMEJFNzdBNCAvKiBXYXRjaGRvZy5jcHAgaW4gU291cmNlcyAqLyA9IHtp
c2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSBGRUQ5NEYyQjE3MUUzRTIzMDBCRTc3QTQgLyog
V2F0Y2hkb2cuY3BwICovOyB9OwogCQlGRUQ5NEYyRjE3MUUzRTIzMDBCRTc3QTQgLyogV2F0Y2hk
b2cuaCBpbiBIZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IEZFRDk0
RjJDMTcxRTNFMjMwMEJFNzdBNCAvKiBXYXRjaGRvZy5oICovOyBzZXR0aW5ncyA9IHtBVFRSSUJV
VEVTID0gKFByaXZhdGUsICk7IH07IH07CiAJCUZFRjA0MDUxMUFBRTY2MkQwMEJEMjhCMCAvKiBD
b21wYXJlQW5kU3dhcFRlc3QuY3BwIGluIFNvdXJjZXMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxl
OyBmaWxlUmVmID0gRkVGMDQwNTAxQUFFNjYyRDAwQkQyOEIwIC8qIENvbXBhcmVBbmRTd2FwVGVz
dC5jcHAgKi87IH07CisJCUZFRjQ5QUFCMUVCOTQ4NEIwMDY1M0JEQiAvKiBNdWx0aXRocmVhZGVk
TXVsdGlWTUV4ZWN1dGlvblRlc3QuY3BwIGluIFNvdXJjZXMgKi8gPSB7aXNhID0gUEJYQnVpbGRG
aWxlOyBmaWxlUmVmID0gRkVGNDlBQTkxRUI5NDdGRTAwNjUzQkRCIC8qIE11bHRpdGhyZWFkZWRN
dWx0aVZNRXhlY3V0aW9uVGVzdC5jcHAgKi87IH07CiAJCUZFRkQ2RkM2MUQ1RTc5OTIwMDhGMkYw
QiAvKiBKU1N0cmluZ0lubGluZXMuaCBpbiBIZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1aWxkRmls
ZTsgZmlsZVJlZiA9IEZFRkQ2RkM1MUQ1RTc5NzAwMDhGMkYwQiAvKiBKU1N0cmluZ0lubGluZXMu
aCAqLzsgc2V0dGluZ3MgPSB7QVRUUklCVVRFUyA9IChQcml2YXRlLCApOyB9OyB9OwogLyogRW5k
IFBCWEJ1aWxkRmlsZSBzZWN0aW9uICovCiAKQEAgLTUxNDIsNiArNTE0Myw4IEBACiAJCUZFREE1
MEQ1MUI5N0Y0RDkwMDlBM0I0RiAvKiBQaW5nUG9uZ1N0YWNrT3ZlcmZsb3dUZXN0LmggKi8gPSB7
aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5
cGUgPSBzb3VyY2Vjb2RlLmMuaDsgbmFtZSA9IFBpbmdQb25nU3RhY2tPdmVyZmxvd1Rlc3QuaDsg
cGF0aCA9IEFQSS90ZXN0cy9QaW5nUG9uZ1N0YWNrT3ZlcmZsb3dUZXN0Lmg7IHNvdXJjZVRyZWUg
PSAiPGdyb3VwPiI7IH07CiAJCUZFRjA0MDUwMUFBRTY2MkQwMEJEMjhCMCAvKiBDb21wYXJlQW5k
U3dhcFRlc3QuY3BwICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9
IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jcHAuY3BwOyBuYW1lID0gQ29tcGFy
ZUFuZFN3YXBUZXN0LmNwcDsgcGF0aCA9IEFQSS90ZXN0cy9Db21wYXJlQW5kU3dhcFRlc3QuY3Bw
OyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwogCQlGRUYwNDA1MjFBQUVDNEVEMDBCRDI4QjAg
LyogQ29tcGFyZUFuZFN3YXBUZXN0LmggKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmls
ZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsgbmFtZSA9
IENvbXBhcmVBbmRTd2FwVGVzdC5oOyBwYXRoID0gQVBJL3Rlc3RzL0NvbXBhcmVBbmRTd2FwVGVz
dC5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OworCQlGRUY0OUFBOTFFQjk0N0ZFMDA2NTNC
REIgLyogTXVsdGl0aHJlYWRlZE11bHRpVk1FeGVjdXRpb25UZXN0LmNwcCAqLyA9IHtpc2EgPSBQ
QlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNv
dXJjZWNvZGUuY3BwLmNwcDsgbmFtZSA9IE11bHRpdGhyZWFkZWRNdWx0aVZNRXhlY3V0aW9uVGVz
dC5jcHA7IHBhdGggPSBBUEkvdGVzdHMvTXVsdGl0aHJlYWRlZE11bHRpVk1FeGVjdXRpb25UZXN0
LmNwcDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKKwkJRkVGNDlBQUExRUI5NDdGRTAwNjUz
QkRCIC8qIE11bHRpdGhyZWFkZWRNdWx0aVZNRXhlY3V0aW9uVGVzdC5oICovID0ge2lzYSA9IFBC
WEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291
cmNlY29kZS5jLmg7IG5hbWUgPSBNdWx0aXRocmVhZGVkTXVsdGlWTUV4ZWN1dGlvblRlc3QuaDsg
cGF0aCA9IEFQSS90ZXN0cy9NdWx0aXRocmVhZGVkTXVsdGlWTUV4ZWN1dGlvblRlc3QuaDsgc291
cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKIAkJRkVGRDZGQzUxRDVFNzk3MDAwOEYyRjBCIC8qIEpT
U3RyaW5nSW5saW5lcy5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGlu
ZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7IHBhdGggPSBKU1N0cmlu
Z0lubGluZXMuaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKIC8qIEVuZCBQQlhGaWxlUmVm
ZXJlbmNlIHNlY3Rpb24gKi8KIApAQCAtNTc3Niw2ICs1Nzc5LDggQEAKIAkJCQlDMjE4MUZDMTE4
QTk0OEZCMDAyNUEyMzUgLyogSlNFeHBvcnRUZXN0cy5tbSAqLywKIAkJCQk1QzRFOEU5NDFEQkVC
REEyMDAzNkYxRkMgLyogSlNPTlBhcnNlVGVzdC5jcHAgKi8sCiAJCQkJNUM0RThFOTUxREJFQkRB
MjAwMzZGMUZDIC8qIEpTT05QYXJzZVRlc3QuaCAqLywKKwkJCQlGRUY0OUFBOTFFQjk0N0ZFMDA2
NTNCREIgLyogTXVsdGl0aHJlYWRlZE11bHRpVk1FeGVjdXRpb25UZXN0LmNwcCAqLywKKwkJCQlG
RUY0OUFBQTFFQjk0N0ZFMDA2NTNCREIgLyogTXVsdGl0aHJlYWRlZE11bHRpVk1FeGVjdXRpb25U
ZXN0LmggKi8sCiAJCQkJMTQ0MDA1MTcwQTUzMUNCNTAwMDVGMDYxIC8qIG1pbmlkb20gKi8sCiAJ
CQkJRkVEQTUwRDQxQjk3RjQ0MjAwOUEzQjRGIC8qIFBpbmdQb25nU3RhY2tPdmVyZmxvd1Rlc3Qu
Y3BwICovLAogCQkJCUZFREE1MEQ1MUI5N0Y0RDkwMDlBM0I0RiAvKiBQaW5nUG9uZ1N0YWNrT3Zl
cmZsb3dUZXN0LmggKi8sCkBAIC0xMDAzNSw2ICsxMDA0MCw3IEBACiAJCQkJRkUwRDRBMDYxQUI4
REQwQTAwMkY1NEJGIC8qIEV4ZWN1dGlvblRpbWVMaW1pdFRlc3QuY3BwIGluIFNvdXJjZXMgKi8s
CiAJCQkJRkVDQjhCMjcxRDI1QkI4NTAwNkYyNDYzIC8qIEZ1bmN0aW9uT3ZlcnJpZGVzVGVzdC5j
cHAgaW4gU291cmNlcyAqLywKIAkJCQlGRTBENEEwOTFBQkEyNDM3MDAyRjU0QkYgLyogR2xvYmFs
Q29udGV4dFdpdGhGaW5hbGl6ZXJUZXN0LmNwcCBpbiBTb3VyY2VzICovLAorCQkJCUZFRjQ5QUFC
MUVCOTQ4NEIwMDY1M0JEQiAvKiBNdWx0aXRocmVhZGVkTXVsdGlWTUV4ZWN1dGlvblRlc3QuY3Bw
IGluIFNvdXJjZXMgKi8sCiAJCQkJQzIxODFGQzIxOEE5NDhGQjAwMjVBMjM1IC8qIEpTRXhwb3J0
VGVzdHMubW0gaW4gU291cmNlcyAqLywKIAkJCQk1QzRFOEU5NjFEQkVCRTYyMDAzNkYxRkMgLyog
SlNPTlBhcnNlVGVzdC5jcHAgaW4gU291cmNlcyAqLywKIAkJCQlGRTdDNDE5NjFCOTdGQzRCMDBG
NEQ1OTggLyogUGluZ1BvbmdTdGFja092ZXJmbG93VGVzdC5jcHAgaW4gU291cmNlcyAqLywKSW5k
ZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9idWlsdGlucy9CdWlsdGluRXhlY3V0YWJsZXMuY3Bw
Cj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9idWlsdGlucy9CdWlsdGluRXhl
Y3V0YWJsZXMuY3BwCShyZXZpc2lvbiAyMTYxMDcpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUv
YnVpbHRpbnMvQnVpbHRpbkV4ZWN1dGFibGVzLmNwcAkod29ya2luZyBjb3B5KQpAQCAtMSw1ICsx
LDUgQEAKIC8qCi0gKiBDb3B5cmlnaHQgKEMpIDIwMTQgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJl
c2VydmVkLgorICogQ29weXJpZ2h0IChDKSAyMDE0LTIwMTcgQXBwbGUgSW5jLiBBbGwgcmlnaHRz
IHJlc2VydmVkLgogICoKICAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBi
aW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAogICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0
dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCkBAIC00NCw4ICs0NCw4
IEBAIEJ1aWx0aW5FeGVjdXRhYmxlczo6QnVpbHRpbkV4ZWN1dGFibGVzKFYKIAogVW5saW5rZWRG
dW5jdGlvbkV4ZWN1dGFibGUqIEJ1aWx0aW5FeGVjdXRhYmxlczo6Y3JlYXRlRGVmYXVsdENvbnN0
cnVjdG9yKENvbnN0cnVjdG9yS2luZCBjb25zdHJ1Y3RvcktpbmQsIGNvbnN0IElkZW50aWZpZXIm
IG5hbWUpCiB7Ci0gICAgc3RhdGljIE5ldmVyRGVzdHJveWVkPGNvbnN0IFN0cmluZz4gYmFzZUNv
bnN0cnVjdG9yQ29kZShBU0NJSUxpdGVyYWwoIihmdW5jdGlvbiAoKSB7IH0pIikpOwotICAgIHN0
YXRpYyBOZXZlckRlc3Ryb3llZDxjb25zdCBTdHJpbmc+IGRlcml2ZWRDb25zdHJ1Y3RvckNvZGUo
QVNDSUlMaXRlcmFsKCIoZnVuY3Rpb24gKC4uLmFyZ3MpIHsgc3VwZXIoLi4uYXJncyk7IH0pIikp
OworICAgIHN0YXRpYyBOZXZlckRlc3Ryb3llZDxjb25zdCBTdHJpbmc+IGJhc2VDb25zdHJ1Y3Rv
ckNvZGUoU3RhdGljQVNDSUlMaXRlcmFsKCIoZnVuY3Rpb24gKCkgeyB9KSIpKTsKKyAgICBzdGF0
aWMgTmV2ZXJEZXN0cm95ZWQ8Y29uc3QgU3RyaW5nPiBkZXJpdmVkQ29uc3RydWN0b3JDb2RlKFN0
YXRpY0FTQ0lJTGl0ZXJhbCgiKGZ1bmN0aW9uICguLi5hcmdzKSB7IHN1cGVyKC4uLmFyZ3MpOyB9
KSIpKTsKIAogICAgIHN3aXRjaCAoY29uc3RydWN0b3JLaW5kKSB7CiAgICAgY2FzZSBDb25zdHJ1
Y3RvcktpbmQ6Ok5vbmU6CkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaW5zcGVjdG9yL2Fn
ZW50cy9JbnNwZWN0b3JEZWJ1Z2dlckFnZW50LmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2
YVNjcmlwdENvcmUvaW5zcGVjdG9yL2FnZW50cy9JbnNwZWN0b3JEZWJ1Z2dlckFnZW50LmNwcAko
cmV2aXNpb24gMjE2MTA3KQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL2luc3BlY3Rvci9hZ2Vu
dHMvSW5zcGVjdG9yRGVidWdnZXJBZ2VudC5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTEsNSArMSw1
IEBACiAvKgotICogQ29weXJpZ2h0IChDKSAyMDEwLCAyMDEzLCAyMDE1IEFwcGxlIEluYy4gQWxs
IHJpZ2h0cyByZXNlcnZlZC4KKyAqIENvcHlyaWdodCAoQykgMjAxMC0yMDE3IEFwcGxlIEluYy4g
QWxsIHJpZ2h0cyByZXNlcnZlZC4KICAqIENvcHlyaWdodCAoQykgMjAxMCwgMjAxMSBHb29nbGUg
SW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgogICoKICAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2Ug
aW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dApAQCAtNTYsNyArNTYs
NyBAQCBjb25zdCBjaGFyKiBJbnNwZWN0b3JEZWJ1Z2dlckFnZW50OjpiYWNrCiAvLyBjcmVhdGUg
b2JqZWN0cyBpbiB0aGUgc2FtZSBncm91cC4KIHN0YXRpYyBTdHJpbmcgb2JqZWN0R3JvdXBGb3JC
cmVha3BvaW50QWN0aW9uKGNvbnN0IFNjcmlwdEJyZWFrcG9pbnRBY3Rpb24mIGFjdGlvbikKIHsK
LSAgICBzdGF0aWMgTmV2ZXJEZXN0cm95ZWQ8U3RyaW5nPiBvYmplY3RHcm91cChBU0NJSUxpdGVy
YWwoImJyZWFrcG9pbnQtYWN0aW9uLSIpKTsKKyAgICBzdGF0aWMgTmV2ZXJEZXN0cm95ZWQ8U3Ry
aW5nPiBvYmplY3RHcm91cChTdGF0aWNBU0NJSUxpdGVyYWwoImJyZWFrcG9pbnQtYWN0aW9uLSIp
KTsKICAgICByZXR1cm4gbWFrZVN0cmluZyhvYmplY3RHcm91cC5nZXQoKSwgU3RyaW5nOjpudW1i
ZXIoYWN0aW9uLmlkZW50aWZpZXIpKTsKIH0KIApJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3Jl
L3JlcGxheS9zY3JpcHRzL0NvZGVHZW5lcmF0b3JSZXBsYXlJbnB1dHNUZW1wbGF0ZXMucHkKPT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL3JlcGxheS9zY3JpcHRzL0NvZGVHZW5l
cmF0b3JSZXBsYXlJbnB1dHNUZW1wbGF0ZXMucHkJKHJldmlzaW9uIDIxNjEwNykKKysrIFNvdXJj
ZS9KYXZhU2NyaXB0Q29yZS9yZXBsYXkvc2NyaXB0cy9Db2RlR2VuZXJhdG9yUmVwbGF5SW5wdXRz
VGVtcGxhdGVzLnB5CSh3b3JraW5nIGNvcHkpCkBAIC0xLDcgKzEsNyBAQAogIyEvdXNyL2Jpbi9l
bnYgcHl0aG9uCiAjIENvcHlyaWdodCAoYykgMjAxMSBHb29nbGUgSW5jLiBBbGwgcmlnaHRzIHJl
c2VydmVkLgogIyBDb3B5cmlnaHQgKGMpIDIwMTIgSW50ZWwgQ29ycG9yYXRpb24uIEFsbCByaWdo
dHMgcmVzZXJ2ZWQuCi0jIENvcHlyaWdodCAoYykgMjAxMywgMjAxNCwgMjAxNiBBcHBsZSBJbmMu
IEFsbCByaWdodHMgcmVzZXJ2ZWQuCisjIENvcHlyaWdodCAoYykgMjAxMy0yMDE3IEFwcGxlIElu
Yy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KICMKICMgUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBz
b3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CiAjIG1vZGlmaWNhdGlvbiwg
YXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucyBhcmUK
QEAgLTE1MCw3ICsxNTAsNyBAQCAke2VudW1lcmFibGVUeXBlVHJhaXRJbXBsZW1lbnRhdGlvbnN9
CiAgICAgSW5wdXRUcmFpdHNJbXBsZW1lbnRhdGlvbiA9ICgKICAgICAiIiJjb25zdCBTdHJpbmcm
IElucHV0VHJhaXRzPCR7cXVhbGlmaWVkSW5wdXROYW1lfT46OnR5cGUoKQogewotICAgIHN0YXRp
YyBOZXZlckRlc3Ryb3llZDxjb25zdCBTdHJpbmc+IHR5cGUoQVNDSUlMaXRlcmFsKCR7aW5wdXRO
YW1lU3RyaW5nTGl0ZXJhbH0pKTsKKyAgICBzdGF0aWMgTmV2ZXJEZXN0cm95ZWQ8Y29uc3QgU3Ry
aW5nPiB0eXBlKFN0YXRpY0FTQ0lJTGl0ZXJhbCgke2lucHV0TmFtZVN0cmluZ0xpdGVyYWx9KSk7
CiAgICAgcmV0dXJuIHR5cGU7CiB9CiAKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9yZXBs
YXkvc2NyaXB0cy90ZXN0cy9leHBlY3RlZC9nZW5lcmF0ZS1lbnVtLWVuY29kaW5nLWhlbHBlcnMt
d2l0aC1ndWFyZGVkLXZhbHVlcy5qc29uLVRlc3RSZXBsYXlJbnB1dHMuY3BwCj09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0K
LS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9yZXBsYXkvc2NyaXB0cy90ZXN0cy9leHBlY3RlZC9n
ZW5lcmF0ZS1lbnVtLWVuY29kaW5nLWhlbHBlcnMtd2l0aC1ndWFyZGVkLXZhbHVlcy5qc29uLVRl
c3RSZXBsYXlJbnB1dHMuY3BwCShyZXZpc2lvbiAyMTYxMDcpCisrKyBTb3VyY2UvSmF2YVNjcmlw
dENvcmUvcmVwbGF5L3NjcmlwdHMvdGVzdHMvZXhwZWN0ZWQvZ2VuZXJhdGUtZW51bS1lbmNvZGlu
Zy1oZWxwZXJzLXdpdGgtZ3VhcmRlZC12YWx1ZXMuanNvbi1UZXN0UmVwbGF5SW5wdXRzLmNwcAko
d29ya2luZyBjb3B5KQpAQCAtNTAsNyArNTAsNyBAQCBTYXZlZE1vdXNlQnV0dG9uOjp+U2F2ZWRN
b3VzZUJ1dHRvbigpCiBuYW1lc3BhY2UgSlNDIHsKIGNvbnN0IFN0cmluZyYgSW5wdXRUcmFpdHM8
VGVzdDo6U2F2ZWRNb3VzZUJ1dHRvbj46OnR5cGUoKQogewotICAgIHN0YXRpYyBOZXZlckRlc3Ry
b3llZDxjb25zdCBTdHJpbmc+IHR5cGUoQVNDSUlMaXRlcmFsKCJTYXZlZE1vdXNlQnV0dG9uIikp
OworICAgIHN0YXRpYyBOZXZlckRlc3Ryb3llZDxjb25zdCBTdHJpbmc+IHR5cGUoU3RhdGljQVND
SUlMaXRlcmFsKCJTYXZlZE1vdXNlQnV0dG9uIikpOwogICAgIHJldHVybiB0eXBlOwogfQogCklu
ZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcmVwbGF5L3NjcmlwdHMvdGVzdHMvZXhwZWN0ZWQv
Z2VuZXJhdGUtZW51bS1lbmNvZGluZy1oZWxwZXJzLmpzb24tVGVzdFJlcGxheUlucHV0cy5jcHAK
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL3JlcGxheS9zY3JpcHRzL3Rlc3Rz
L2V4cGVjdGVkL2dlbmVyYXRlLWVudW0tZW5jb2RpbmctaGVscGVycy5qc29uLVRlc3RSZXBsYXlJ
bnB1dHMuY3BwCShyZXZpc2lvbiAyMTYxMDcpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcmVw
bGF5L3NjcmlwdHMvdGVzdHMvZXhwZWN0ZWQvZ2VuZXJhdGUtZW51bS1lbmNvZGluZy1oZWxwZXJz
Lmpzb24tVGVzdFJlcGxheUlucHV0cy5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTUxLDcgKzUxLDcg
QEAgU2F2ZWRNb3VzZUJ1dHRvbjo6flNhdmVkTW91c2VCdXR0b24oKQogbmFtZXNwYWNlIEpTQyB7
CiBjb25zdCBTdHJpbmcmIElucHV0VHJhaXRzPFRlc3Q6OlNhdmVkTW91c2VCdXR0b24+Ojp0eXBl
KCkKIHsKLSAgICBzdGF0aWMgTmV2ZXJEZXN0cm95ZWQ8Y29uc3QgU3RyaW5nPiB0eXBlKEFTQ0lJ
TGl0ZXJhbCgiU2F2ZWRNb3VzZUJ1dHRvbiIpKTsKKyAgICBzdGF0aWMgTmV2ZXJEZXN0cm95ZWQ8
Y29uc3QgU3RyaW5nPiB0eXBlKFN0YXRpY0FTQ0lJTGl0ZXJhbCgiU2F2ZWRNb3VzZUJ1dHRvbiIp
KTsKICAgICByZXR1cm4gdHlwZTsKIH0KIApJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL3Jl
cGxheS9zY3JpcHRzL3Rlc3RzL2V4cGVjdGVkL2dlbmVyYXRlLWVudW0td2l0aC1ndWFyZC5qc29u
LVRlc3RSZXBsYXlJbnB1dHMuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29y
ZS9yZXBsYXkvc2NyaXB0cy90ZXN0cy9leHBlY3RlZC9nZW5lcmF0ZS1lbnVtLXdpdGgtZ3VhcmQu
anNvbi1UZXN0UmVwbGF5SW5wdXRzLmNwcAkocmV2aXNpb24gMjE2MTA3KQorKysgU291cmNlL0ph
dmFTY3JpcHRDb3JlL3JlcGxheS9zY3JpcHRzL3Rlc3RzL2V4cGVjdGVkL2dlbmVyYXRlLWVudW0t
d2l0aC1ndWFyZC5qc29uLVRlc3RSZXBsYXlJbnB1dHMuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC01
Miw3ICs1Miw3IEBAIEhhbmRsZVdoZWVsRXZlbnQ6On5IYW5kbGVXaGVlbEV2ZW50KCkKIG5hbWVz
cGFjZSBKU0MgewogY29uc3QgU3RyaW5nJiBJbnB1dFRyYWl0czxUZXN0OjpIYW5kbGVXaGVlbEV2
ZW50Pjo6dHlwZSgpCiB7Ci0gICAgc3RhdGljIE5ldmVyRGVzdHJveWVkPGNvbnN0IFN0cmluZz4g
dHlwZShBU0NJSUxpdGVyYWwoIkhhbmRsZVdoZWVsRXZlbnQiKSk7CisgICAgc3RhdGljIE5ldmVy
RGVzdHJveWVkPGNvbnN0IFN0cmluZz4gdHlwZShTdGF0aWNBU0NJSUxpdGVyYWwoIkhhbmRsZVdo
ZWVsRXZlbnQiKSk7CiAgICAgcmV0dXJuIHR5cGU7CiB9CiAKSW5kZXg6IFNvdXJjZS9KYXZhU2Ny
aXB0Q29yZS9yZXBsYXkvc2NyaXB0cy90ZXN0cy9leHBlY3RlZC9nZW5lcmF0ZS1lbnVtcy13aXRo
LXNhbWUtYmFzZS1uYW1lLmpzb24tVGVzdFJlcGxheUlucHV0cy5jcHAKPT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0g
U291cmNlL0phdmFTY3JpcHRDb3JlL3JlcGxheS9zY3JpcHRzL3Rlc3RzL2V4cGVjdGVkL2dlbmVy
YXRlLWVudW1zLXdpdGgtc2FtZS1iYXNlLW5hbWUuanNvbi1UZXN0UmVwbGF5SW5wdXRzLmNwcAko
cmV2aXNpb24gMjE2MTA3KQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL3JlcGxheS9zY3JpcHRz
L3Rlc3RzL2V4cGVjdGVkL2dlbmVyYXRlLWVudW1zLXdpdGgtc2FtZS1iYXNlLW5hbWUuanNvbi1U
ZXN0UmVwbGF5SW5wdXRzLmNwcAkod29ya2luZyBjb3B5KQpAQCAtNTIsNyArNTIsNyBAQCBGb3Jt
Q29tYm86On5Gb3JtQ29tYm8oKQogbmFtZXNwYWNlIEpTQyB7CiBjb25zdCBTdHJpbmcmIElucHV0
VHJhaXRzPFRlc3Q6OkZvcm1Db21ibz46OnR5cGUoKQogewotICAgIHN0YXRpYyBOZXZlckRlc3Ry
b3llZDxjb25zdCBTdHJpbmc+IHR5cGUoQVNDSUlMaXRlcmFsKCJGb3JtQ29tYm8iKSk7CisgICAg
c3RhdGljIE5ldmVyRGVzdHJveWVkPGNvbnN0IFN0cmluZz4gdHlwZShTdGF0aWNBU0NJSUxpdGVy
YWwoIkZvcm1Db21ibyIpKTsKICAgICByZXR1cm4gdHlwZTsKIH0KIApJbmRleDogU291cmNlL0ph
dmFTY3JpcHRDb3JlL3JlcGxheS9zY3JpcHRzL3Rlc3RzL2V4cGVjdGVkL2dlbmVyYXRlLWlucHV0
LXdpdGgtZ3VhcmQuanNvbi1UZXN0UmVwbGF5SW5wdXRzLmNwcAo9PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3Vy
Y2UvSmF2YVNjcmlwdENvcmUvcmVwbGF5L3NjcmlwdHMvdGVzdHMvZXhwZWN0ZWQvZ2VuZXJhdGUt
aW5wdXQtd2l0aC1ndWFyZC5qc29uLVRlc3RSZXBsYXlJbnB1dHMuY3BwCShyZXZpc2lvbiAyMTYx
MDcpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcmVwbGF5L3NjcmlwdHMvdGVzdHMvZXhwZWN0
ZWQvZ2VuZXJhdGUtaW5wdXQtd2l0aC1ndWFyZC5qc29uLVRlc3RSZXBsYXlJbnB1dHMuY3BwCSh3
b3JraW5nIGNvcHkpCkBAIC02Miw3ICs2Miw3IEBAIG5hbWVzcGFjZSBKU0MgewogI2lmIEVOQUJM
RShEVU1NWV9GRUFUVVJFKQogY29uc3QgU3RyaW5nJiBJbnB1dFRyYWl0czxUZXN0OjpHZXRDdXJy
ZW50VGltZT46OnR5cGUoKQogewotICAgIHN0YXRpYyBOZXZlckRlc3Ryb3llZDxjb25zdCBTdHJp
bmc+IHR5cGUoQVNDSUlMaXRlcmFsKCJHZXRDdXJyZW50VGltZSIpKTsKKyAgICBzdGF0aWMgTmV2
ZXJEZXN0cm95ZWQ8Y29uc3QgU3RyaW5nPiB0eXBlKFN0YXRpY0FTQ0lJTGl0ZXJhbCgiR2V0Q3Vy
cmVudFRpbWUiKSk7CiAgICAgcmV0dXJuIHR5cGU7CiB9CiAKQEAgLTg0LDcgKzg0LDcgQEAgYm9v
bCBJbnB1dFRyYWl0czxUZXN0OjpHZXRDdXJyZW50VGltZT46OgogCiBjb25zdCBTdHJpbmcmIElu
cHV0VHJhaXRzPFRlc3Q6OlNldFJhbmRvbVNlZWQ+Ojp0eXBlKCkKIHsKLSAgICBzdGF0aWMgTmV2
ZXJEZXN0cm95ZWQ8Y29uc3QgU3RyaW5nPiB0eXBlKEFTQ0lJTGl0ZXJhbCgiU2V0UmFuZG9tU2Vl
ZCIpKTsKKyAgICBzdGF0aWMgTmV2ZXJEZXN0cm95ZWQ8Y29uc3QgU3RyaW5nPiB0eXBlKFN0YXRp
Y0FTQ0lJTGl0ZXJhbCgiU2V0UmFuZG9tU2VlZCIpKTsKICAgICByZXR1cm4gdHlwZTsKIH0KIApJ
bmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL3JlcGxheS9zY3JpcHRzL3Rlc3RzL2V4cGVjdGVk
L2dlbmVyYXRlLWlucHV0LXdpdGgtdmVjdG9yLW1lbWJlcnMuanNvbi1UZXN0UmVwbGF5SW5wdXRz
LmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcmVwbGF5L3NjcmlwdHMv
dGVzdHMvZXhwZWN0ZWQvZ2VuZXJhdGUtaW5wdXQtd2l0aC12ZWN0b3ItbWVtYmVycy5qc29uLVRl
c3RSZXBsYXlJbnB1dHMuY3BwCShyZXZpc2lvbiAyMTYxMDcpCisrKyBTb3VyY2UvSmF2YVNjcmlw
dENvcmUvcmVwbGF5L3NjcmlwdHMvdGVzdHMvZXhwZWN0ZWQvZ2VuZXJhdGUtaW5wdXQtd2l0aC12
ZWN0b3ItbWVtYmVycy5qc29uLVRlc3RSZXBsYXlJbnB1dHMuY3BwCSh3b3JraW5nIGNvcHkpCkBA
IC02Myw3ICs2Myw3IEBAIFNhdmVkSGlzdG9yeTo6flNhdmVkSGlzdG9yeSgpCiBuYW1lc3BhY2Ug
SlNDIHsKIGNvbnN0IFN0cmluZyYgSW5wdXRUcmFpdHM8VGVzdDo6QXJyYXlPZlRoaW5ncz46OnR5
cGUoKQogewotICAgIHN0YXRpYyBOZXZlckRlc3Ryb3llZDxjb25zdCBTdHJpbmc+IHR5cGUoQVND
SUlMaXRlcmFsKCJBcnJheU9mVGhpbmdzIikpOworICAgIHN0YXRpYyBOZXZlckRlc3Ryb3llZDxj
b25zdCBTdHJpbmc+IHR5cGUoU3RhdGljQVNDSUlMaXRlcmFsKCJBcnJheU9mVGhpbmdzIikpOwog
ICAgIHJldHVybiB0eXBlOwogfQogCkBAIC05NCw3ICs5NCw3IEBAIGJvb2wgSW5wdXRUcmFpdHM8
VGVzdDo6QXJyYXlPZlRoaW5ncz46OmQKIAogY29uc3QgU3RyaW5nJiBJbnB1dFRyYWl0czxUZXN0
OjpTYXZlZEhpc3Rvcnk+Ojp0eXBlKCkKIHsKLSAgICBzdGF0aWMgTmV2ZXJEZXN0cm95ZWQ8Y29u
c3QgU3RyaW5nPiB0eXBlKEFTQ0lJTGl0ZXJhbCgiU2F2ZWRIaXN0b3J5IikpOworICAgIHN0YXRp
YyBOZXZlckRlc3Ryb3llZDxjb25zdCBTdHJpbmc+IHR5cGUoU3RhdGljQVNDSUlMaXRlcmFsKCJT
YXZlZEhpc3RvcnkiKSk7CiAgICAgcmV0dXJuIHR5cGU7CiB9CiAKSW5kZXg6IFNvdXJjZS9KYXZh
U2NyaXB0Q29yZS9yZXBsYXkvc2NyaXB0cy90ZXN0cy9leHBlY3RlZC9nZW5lcmF0ZS1pbnB1dHMt
d2l0aC1mbGFncy5qc29uLVRlc3RSZXBsYXlJbnB1dHMuY3BwCj09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJj
ZS9KYXZhU2NyaXB0Q29yZS9yZXBsYXkvc2NyaXB0cy90ZXN0cy9leHBlY3RlZC9nZW5lcmF0ZS1p
bnB1dHMtd2l0aC1mbGFncy5qc29uLVRlc3RSZXBsYXlJbnB1dHMuY3BwCShyZXZpc2lvbiAyMTYx
MDcpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcmVwbGF5L3NjcmlwdHMvdGVzdHMvZXhwZWN0
ZWQvZ2VuZXJhdGUtaW5wdXRzLXdpdGgtZmxhZ3MuanNvbi1UZXN0UmVwbGF5SW5wdXRzLmNwcAko
d29ya2luZyBjb3B5KQpAQCAtNTksNyArNTksNyBAQCBTY2FsYXJJbnB1dDI6On5TY2FsYXJJbnB1
dDIoKQogbmFtZXNwYWNlIEpTQyB7CiBjb25zdCBTdHJpbmcmIElucHV0VHJhaXRzPFRlc3Q6OlNj
YWxhcklucHV0MT46OnR5cGUoKQogewotICAgIHN0YXRpYyBOZXZlckRlc3Ryb3llZDxjb25zdCBT
dHJpbmc+IHR5cGUoQVNDSUlMaXRlcmFsKCJTY2FsYXJJbnB1dDEiKSk7CisgICAgc3RhdGljIE5l
dmVyRGVzdHJveWVkPGNvbnN0IFN0cmluZz4gdHlwZShTdGF0aWNBU0NJSUxpdGVyYWwoIlNjYWxh
cklucHV0MSIpKTsKICAgICByZXR1cm4gdHlwZTsKIH0KIApAQCAtODAsNyArODAsNyBAQCBib29s
IElucHV0VHJhaXRzPFRlc3Q6OlNjYWxhcklucHV0MT46OmRlCiAKIGNvbnN0IFN0cmluZyYgSW5w
dXRUcmFpdHM8VGVzdDo6U2NhbGFySW5wdXQyPjo6dHlwZSgpCiB7Ci0gICAgc3RhdGljIE5ldmVy
RGVzdHJveWVkPGNvbnN0IFN0cmluZz4gdHlwZShBU0NJSUxpdGVyYWwoIlNjYWxhcklucHV0MiIp
KTsKKyAgICBzdGF0aWMgTmV2ZXJEZXN0cm95ZWQ8Y29uc3QgU3RyaW5nPiB0eXBlKFN0YXRpY0FT
Q0lJTGl0ZXJhbCgiU2NhbGFySW5wdXQyIikpOwogICAgIHJldHVybiB0eXBlOwogfQogCkluZGV4
OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcmVwbGF5L3NjcmlwdHMvdGVzdHMvZXhwZWN0ZWQvZ2Vu
ZXJhdGUtbWVtb2l6ZWQtdHlwZS1tb2Rlcy5qc29uLVRlc3RSZXBsYXlJbnB1dHMuY3BwCj09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9yZXBsYXkvc2NyaXB0cy90ZXN0cy9leHBl
Y3RlZC9nZW5lcmF0ZS1tZW1vaXplZC10eXBlLW1vZGVzLmpzb24tVGVzdFJlcGxheUlucHV0cy5j
cHAJKHJldmlzaW9uIDIxNjEwNykKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9yZXBsYXkvc2Ny
aXB0cy90ZXN0cy9leHBlY3RlZC9nZW5lcmF0ZS1tZW1vaXplZC10eXBlLW1vZGVzLmpzb24tVGVz
dFJlcGxheUlucHV0cy5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTU5LDcgKzU5LDcgQEAgTWFwSW5w
dXQ6On5NYXBJbnB1dCgpCiBuYW1lc3BhY2UgSlNDIHsKIGNvbnN0IFN0cmluZyYgSW5wdXRUcmFp
dHM8VGVzdDo6U2NhbGFySW5wdXQ+Ojp0eXBlKCkKIHsKLSAgICBzdGF0aWMgTmV2ZXJEZXN0cm95
ZWQ8Y29uc3QgU3RyaW5nPiB0eXBlKEFTQ0lJTGl0ZXJhbCgiU2NhbGFySW5wdXQiKSk7CisgICAg
c3RhdGljIE5ldmVyRGVzdHJveWVkPGNvbnN0IFN0cmluZz4gdHlwZShTdGF0aWNBU0NJSUxpdGVy
YWwoIlNjYWxhcklucHV0IikpOwogICAgIHJldHVybiB0eXBlOwogfQogCkBAIC04MCw3ICs4MCw3
IEBAIGJvb2wgSW5wdXRUcmFpdHM8VGVzdDo6U2NhbGFySW5wdXQ+OjpkZWMKIAogY29uc3QgU3Ry
aW5nJiBJbnB1dFRyYWl0czxUZXN0OjpNYXBJbnB1dD46OnR5cGUoKQogewotICAgIHN0YXRpYyBO
ZXZlckRlc3Ryb3llZDxjb25zdCBTdHJpbmc+IHR5cGUoQVNDSUlMaXRlcmFsKCJNYXBJbnB1dCIp
KTsKKyAgICBzdGF0aWMgTmV2ZXJEZXN0cm95ZWQ8Y29uc3QgU3RyaW5nPiB0eXBlKFN0YXRpY0FT
Q0lJTGl0ZXJhbCgiTWFwSW5wdXQiKSk7CiAgICAgcmV0dXJuIHR5cGU7CiB9CiAKSW5kZXg6IFNv
dXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0ludGxPYmplY3QuY3BwCj09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0t
IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0ludGxPYmplY3QuY3BwCShyZXZpc2lvbiAy
MTYxMDcpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9JbnRsT2JqZWN0LmNwcAko
d29ya2luZyBjb3B5KQpAQCAtOTk0LDE4ICs5OTQsMjMgQEAgVmVjdG9yPFN0cmluZz4gbnVtYmVy
aW5nU3lzdGVtc0ZvckxvY2FsZQogewogICAgIHN0YXRpYyBOZXZlckRlc3Ryb3llZDxWZWN0b3I8
U3RyaW5nPj4gY2FjaGVkTnVtYmVyaW5nU3lzdGVtczsKICAgICBWZWN0b3I8U3RyaW5nPiYgYXZh
aWxhYmxlTnVtYmVyaW5nU3lzdGVtcyA9IGNhY2hlZE51bWJlcmluZ1N5c3RlbXMuZ2V0KCk7Ci0g
ICAgaWYgKGF2YWlsYWJsZU51bWJlcmluZ1N5c3RlbXMuaXNFbXB0eSgpKSB7Ci0gICAgICAgIFVF
cnJvckNvZGUgc3RhdHVzID0gVV9aRVJPX0VSUk9SOwotICAgICAgICBVRW51bWVyYXRpb24qIG51
bWJlcmluZ1N5c3RlbU5hbWVzID0gdW51bXN5c19vcGVuQXZhaWxhYmxlTmFtZXMoJnN0YXR1cyk7
Ci0gICAgICAgIEFTU0VSVChVX1NVQ0NFU1Moc3RhdHVzKSk7Ci0KLSAgICAgICAgaW50MzJfdCBy
ZXN1bHRMZW5ndGg7Ci0gICAgICAgIC8vIE51bWJlcmluZyBzeXN0ZW0gbmFtZXMgYXJlIGFsd2F5
cyBBU0NJSSwgc28gdXNlIGNoYXJbXS4KLSAgICAgICAgd2hpbGUgKGNvbnN0IGNoYXIqIHJlc3Vs
dCA9IHVlbnVtX25leHQobnVtYmVyaW5nU3lzdGVtTmFtZXMsICZyZXN1bHRMZW5ndGgsICZzdGF0
dXMpKSB7CisKKyAgICBpZiAoVU5MSUtFTFkoYXZhaWxhYmxlTnVtYmVyaW5nU3lzdGVtcy5pc0Vt
cHR5KCkpKSB7CisgICAgICAgIHN0YXRpYyBTdGF0aWNMb2NrIGNhY2hlZE51bWJlcmluZ1N5c3Rl
bXNNdXRleDsKKyAgICAgICAgc3RkOjpsb2NrX2d1YXJkPFN0YXRpY0xvY2s+IGxvY2soY2FjaGVk
TnVtYmVyaW5nU3lzdGVtc011dGV4KTsKKyAgICAgICAgaWYgKGF2YWlsYWJsZU51bWJlcmluZ1N5
c3RlbXMuaXNFbXB0eSgpKSB7CisgICAgICAgICAgICBVRXJyb3JDb2RlIHN0YXR1cyA9IFVfWkVS
T19FUlJPUjsKKyAgICAgICAgICAgIFVFbnVtZXJhdGlvbiogbnVtYmVyaW5nU3lzdGVtTmFtZXMg
PSB1bnVtc3lzX29wZW5BdmFpbGFibGVOYW1lcygmc3RhdHVzKTsKICAgICAgICAgICAgIEFTU0VS
VChVX1NVQ0NFU1Moc3RhdHVzKSk7Ci0gICAgICAgICAgICBhdmFpbGFibGVOdW1iZXJpbmdTeXN0
ZW1zLmFwcGVuZChTdHJpbmcocmVzdWx0LCByZXN1bHRMZW5ndGgpKTsKKworICAgICAgICAgICAg
aW50MzJfdCByZXN1bHRMZW5ndGg7CisgICAgICAgICAgICAvLyBOdW1iZXJpbmcgc3lzdGVtIG5h
bWVzIGFyZSBhbHdheXMgQVNDSUksIHNvIHVzZSBjaGFyW10uCisgICAgICAgICAgICB3aGlsZSAo
Y29uc3QgY2hhciogcmVzdWx0ID0gdWVudW1fbmV4dChudW1iZXJpbmdTeXN0ZW1OYW1lcywgJnJl
c3VsdExlbmd0aCwgJnN0YXR1cykpIHsKKyAgICAgICAgICAgICAgICBBU1NFUlQoVV9TVUNDRVNT
KHN0YXR1cykpOworICAgICAgICAgICAgICAgIGF2YWlsYWJsZU51bWJlcmluZ1N5c3RlbXMuYXBw
ZW5kKFN0cmluZyhyZXN1bHQsIHJlc3VsdExlbmd0aCkpOworICAgICAgICAgICAgfQorICAgICAg
ICAgICAgdWVudW1fY2xvc2UobnVtYmVyaW5nU3lzdGVtTmFtZXMpOwogICAgICAgICB9Ci0gICAg
ICAgIHVlbnVtX2Nsb3NlKG51bWJlcmluZ1N5c3RlbU5hbWVzKTsKICAgICB9CiAKICAgICBVRXJy
b3JDb2RlIHN0YXR1cyA9IFVfWkVST19FUlJPUjsKSW5kZXg6IFNvdXJjZS9XVEYvQ2hhbmdlTG9n
Cj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT0KLS0tIFNvdXJjZS9XVEYvQ2hhbmdlTG9nCShyZXZpc2lvbiAyMTYxMDcpCisr
KyBTb3VyY2UvV1RGL0NoYW5nZUxvZwkod29ya2luZyBjb3B5KQpAQCAtMSwzICsxLDQ5IEBACisy
MDE3LTA1LTAyICBNYXJrIExhbSAgPG1hcmsubGFtQGFwcGxlLmNvbT4KKworICAgICAgICBOZXZl
ckRlc3Ryb3llZDxTdHJpbmc+KEFTQ0lJTGl0ZXJhbCguLi4pKSBpcyBub3QgdGhyZWFkIHNhZmUu
CisgICAgICAgIGh0dHBzOi8vYnVncy53ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9pZD0xNzE1ODYK
KyAgICAgICAgPHJkYXI6Ly9wcm9ibGVtLzMxODczMTkwPgorCisgICAgICAgIFJldmlld2VkIGJ5
IE5PQk9EWSAoT09QUyEpLgorCisgICAgICAgIFN0YXRpY1N0cmluZ0ltcGwgaXMgbWVhbnQgdG8g
YmUgdGhyZWFkLXNhZmUuICBIb3dldmVyLCBpdCBoYXMgYSBidWc6IGl0IGRpZCBub3QKKyAgICAg
ICAgc2V0IHRoZSBzX2hhc2hGbGFnRGlkUmVwb3J0Q29zdCBmbGFnLiAgQXMgYSByZXN1bHQsIGlm
IGNvc3QoKSBpcyBjYWxsZWQgb24gaXQsCisgICAgICAgIGRpZmZlcmVudCB0aHJlYWRzIG1heSB0
cnkgdG8gY2hhbmdlIGl0cyBmbGFncyBiaXRzIGF0IHRoZSBzYW1lIHRpbWUuICBUaGlzIHBhdGNo
CisgICAgICAgIGNoYW5nZXMgU3RhdGljU3RyaW5nSW1wbCB0byBhbHdheXMgc2V0IHRoZSBzX2hh
c2hGbGFnRGlkUmVwb3J0Q29zdCBmbGFnLgorCisgICAgICAgIEFsc28gZmFjdG9yZWQgb3V0IFN0
cmluZ0ltcGxTaGFwZSBhbmQgbWFrZSBTdHJpbmdJbXBsIGFuZCBTdGF0aWNTdHJpbmdJbXBsIGV4
dGVuZAorICAgICAgICBpdC4gIFRoaXMgbWFrZXMgaXQgbW9yZSBjbGVhciB0aGF0IHRoZSAyIGFy
ZSBpbnRlbmRlZCB0byBoYXZlIHRoZSBzYW1lIHNoYXBlLgorICAgICAgICBOb3RlOiB0aGVyZSBp
cyBhbHJlYWR5IGEgc3RhdGljX2Fzc2VydCB0aGF0IHRoZSAyIGhhdmUgdGhlIHNhbWUgc2l6ZS4g
IFRoaXMKKyAgICAgICAgY2hhbmdlIGFsc28gZW5zdXJlcyB0aGF0IHRoZXkgaGF2ZSB0aGUgc2Ft
ZSBzaGFwZSwgd2hpY2ggaXMgYSByZXF1aXJlbWVudCBpbgorICAgICAgICBvcmRlciBmb3IgU3Rh
dGljU3RyaW5nSW1wbCB0byB3b3JrLgorCisgICAgICAgIFJlLWludHJvZHVjZWQgU3RhdGljQVND
SUlMaXRlcmFsIGFzIGEgY29udmVuaWVudCB3YXkgdG8gaW5zdGFudGlhdGUKKyAgICAgICAgU3Rh
dGljU3RyaW5nSW1wbHMgZnJvbSBBU0NJSUxpdGVyYWxzLiAgVGhpcyBhbGxvd3MgdXMgdG8gdHJp
dmlhbGx5IGNoYW5nZQorCisgICAgICAgICAgICBOZXZlckRlc3Ryb3llZDxTdHJpbmc+IG15U3Ry
aW5nKEFTQ0lJTGl0ZXJhbCgibXlTdHJpbmciKSk7CisKKyAgICAgICAgdG8gLi4uCisKKyAgICAg
ICAgICAgIE5ldmVyRGVzdHJveWVkPFN0cmluZz4gbXlTdHJpbmcoU3RhdGljQVNDSUlMaXRlcmFs
KCJteVN0cmluZyIpKTsKKworICAgICAgICBhbmQgYnkgc28gZG9pbmcsIG1ha2UgaXQgdGhyZWFk
LXNhZmUuCisKKyAgICAgICAgKiB3dGYvbWFjL01haW5UaHJlYWRNYWMubW06CisgICAgICAgIChX
VEY6OmlzTWFpblRocmVhZCk6CisgICAgICAgICogd3RmL3RleHQvU3RyaW5nSW1wbC5oOgorICAg
ICAgICAoV1RGOjpTdHJpbmdJbXBsU2hhcGU6OlN0cmluZ0ltcGxTaGFwZSk6CisgICAgICAgIChX
VEY6OlN0cmluZ0ltcGw6OlN0cmluZ0ltcGwpOgorICAgICAgICAoV1RGOjpTdHJpbmdJbXBsOjpz
ZXRIYXNoKToKKyAgICAgICAgKFdURjo6U3RyaW5nSW1wbDo6U3RhdGljU3RyaW5nSW1wbDo6U3Rh
dGljU3RyaW5nSW1wbCk6CisgICAgICAgIChXVEY6OlN0cmluZ0ltcGw6OlN0YXRpY1N0cmluZ0lt
cGw6Om9wZXJhdG9yIFN0cmluZ0ltcGwmKToKKyAgICAgICAgKFdURjo6bWFrZVN0YXRpY1N0cmlu
Z0ltcGwpOgorICAgICAgICAqIHd0Zi90ZXh0L1dURlN0cmluZy5jcHA6CisgICAgICAgIChXVEY6
OlN0cmluZzo6U3RyaW5nKToKKyAgICAgICAgKiB3dGYvdGV4dC9XVEZTdHJpbmcuaDoKKyAgICAg
ICAgKFdURjo6U3RhdGljQVNDSUlMaXRlcmFsOjpTdGF0aWNBU0NJSUxpdGVyYWwpOgorICAgICAg
ICAqIHd0Zi90ZXh0L2ljdS9UZXh0QnJlYWtJdGVyYXRvcklDVS5oOgorICAgICAgICAoV1RGOjpj
YXJldFJ1bGVzKToKKwogMjAxNy0wNS0wMiAgRGFuaWVsIEJhdGVzICA8ZGFiYXRlc0BhcHBsZS5j
b20+CiAKICAgICAgICAgRml4IHRoZSBidWlsZCBhZnRlciA8aHR0cHM6Ly90cmFjLndlYmtpdC5v
cmcvY2hhbmdlc2V0LzIxNjEwMj4KSW5kZXg6IFNvdXJjZS9XVEYvd3RmL21hYy9NYWluVGhyZWFk
TWFjLm1tCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XVEYvd3RmL21hYy9NYWluVGhyZWFkTWFjLm1t
CShyZXZpc2lvbiAyMTYxMDcpCisrKyBTb3VyY2UvV1RGL3d0Zi9tYWMvTWFpblRocmVhZE1hYy5t
bQkod29ya2luZyBjb3B5KQpAQCAtMjExLDcgKzIxMSw4IEBAIGJvb2wgaXNNYWluVGhyZWFkKCkK
ICAgICAgICAgcmV0dXJuIHB0aHJlYWRfbWFpbl9ucCgpOwogICAgIH0KIAotICAgIEFTU0VSVCht
YWluVGhyZWFkUHRocmVhZCk7CisgICAgLy8gRklYTUU6IGh0dHBzOi8vYnVncy53ZWJraXQub3Jn
L3Nob3dfYnVnLmNnaT9pZD0xNzE1ODIKKyAgICAvLyBBU1NFUlQobWFpblRocmVhZFB0aHJlYWQp
OwogICAgIHJldHVybiBwdGhyZWFkX2VxdWFsKHB0aHJlYWRfc2VsZigpLCBtYWluVGhyZWFkUHRo
cmVhZCk7CiB9CiAjZW5kaWYgLy8gVVNFKFdFQl9USFJFQUQpCkluZGV4OiBTb3VyY2UvV1RGL3d0
Zi90ZXh0L1N0cmluZ0ltcGwuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV1RGL3d0Zi90ZXh0L1N0
cmluZ0ltcGwuaAkocmV2aXNpb24gMjE2MTA3KQorKysgU291cmNlL1dURi93dGYvdGV4dC9TdHJp
bmdJbXBsLmgJKHdvcmtpbmcgY29weSkKQEAgLTEsNiArMSw2IEBACiAvKgogICogQ29weXJpZ2h0
IChDKSAxOTk5IExhcnMgS25vbGwgKGtub2xsQGtkZS5vcmcpCi0gKiBDb3B5cmlnaHQgKEMpIDIw
MDUtMjAxMCwgMjAxMy0yMDE2IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqIENv
cHlyaWdodCAoQykgMjAwNS0yMDE3IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KICAq
IENvcHlyaWdodCAoQykgMjAwOSBHb29nbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgogICoK
ICAqIFRoaXMgbGlicmFyeSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBp
dCBhbmQvb3IKQEAgLTEyOSw3ICsxMjksNDkgQEAgc3RydWN0IFN0cmluZ1N0YXRzIHsKICNkZWZp
bmUgU1RSSU5HX1NUQVRTX0RFUkVGX1NUUklORyhzdHJpbmcpICgodm9pZCkwKQogI2VuZGlmCiAK
LWNsYXNzIFN0cmluZ0ltcGwgeworY2xhc3MgU3RyaW5nSW1wbFNoYXBlIHsKKyAgICBXVEZfTUFL
RV9OT05DT1BZQUJMRShTdHJpbmdJbXBsU2hhcGUpOworcHJvdGVjdGVkOgorICAgIFN0cmluZ0lt
cGxTaGFwZSh1bnNpZ25lZCByZWZDb3VudCwgdW5zaWduZWQgbGVuZ3RoLCBjb25zdCBMQ2hhciog
ZGF0YTgsIHVuc2lnbmVkIGhhc2hBbmRGbGFncykKKyAgICAgICAgOiBtX3JlZkNvdW50KHJlZkNv
dW50KQorICAgICAgICAsIG1fbGVuZ3RoKGxlbmd0aCkKKyAgICAgICAgLCBtX2RhdGE4KGRhdGE4
KQorICAgICAgICAsIG1faGFzaEFuZEZsYWdzKGhhc2hBbmRGbGFncykKKyAgICB7IH0KKworICAg
IFN0cmluZ0ltcGxTaGFwZSh1bnNpZ25lZCByZWZDb3VudCwgdW5zaWduZWQgbGVuZ3RoLCBjb25z
dCBVQ2hhciogZGF0YTE2LCB1bnNpZ25lZCBoYXNoQW5kRmxhZ3MpCisgICAgICAgIDogbV9yZWZD
b3VudChyZWZDb3VudCkKKyAgICAgICAgLCBtX2xlbmd0aChsZW5ndGgpCisgICAgICAgICwgbV9k
YXRhMTYoZGF0YTE2KQorICAgICAgICAsIG1faGFzaEFuZEZsYWdzKGhhc2hBbmRGbGFncykKKyAg
ICB7IH0KKworICAgIHRlbXBsYXRlPHVuc2lnbmVkIGNoYXJhY3RlcnNDb3VudD4KKyAgICBjb25z
dGV4cHIgU3RyaW5nSW1wbFNoYXBlKHVuc2lnbmVkIHJlZkNvdW50LCB1bnNpZ25lZCBsZW5ndGgs
IGNvbnN0IGNoYXIgKCZjaGFyYWN0ZXJzKVtjaGFyYWN0ZXJzQ291bnRdLCB1bnNpZ25lZCBoYXNo
QW5kRmxhZ3MpCisgICAgICAgIDogbV9yZWZDb3VudChyZWZDb3VudCkKKyAgICAgICAgLCBtX2xl
bmd0aChsZW5ndGgpCisgICAgICAgICwgbV9kYXRhOChyZWludGVycHJldF9jYXN0PGNvbnN0IExD
aGFyKj4oY2hhcmFjdGVycykpCisgICAgICAgICwgbV9oYXNoQW5kRmxhZ3MoaGFzaEFuZEZsYWdz
KQorICAgIHsgfQorICAgIAorICAgIHRlbXBsYXRlPHVuc2lnbmVkIGNoYXJhY3RlcnNDb3VudD4K
KyAgICBjb25zdGV4cHIgU3RyaW5nSW1wbFNoYXBlKHVuc2lnbmVkIHJlZkNvdW50LCB1bnNpZ25l
ZCBsZW5ndGgsIGNvbnN0IGNoYXIxNl90ICgmY2hhcmFjdGVycylbY2hhcmFjdGVyc0NvdW50XSwg
dW5zaWduZWQgaGFzaEFuZEZsYWdzKQorICAgICAgICA6IG1fcmVmQ291bnQocmVmQ291bnQpCisg
ICAgICAgICwgbV9sZW5ndGgobGVuZ3RoKQorICAgICAgICAsIG1fZGF0YTE2KHJlaW50ZXJwcmV0
X2Nhc3Q8Y29uc3QgVUNoYXIqPihjaGFyYWN0ZXJzKSkKKyAgICAgICAgLCBtX2hhc2hBbmRGbGFn
cyhoYXNoQW5kRmxhZ3MpCisgICAgeyB9CisKKyAgICB1bnNpZ25lZCBtX3JlZkNvdW50OworICAg
IHVuc2lnbmVkIG1fbGVuZ3RoOworICAgIHVuaW9uIHsKKyAgICAgICAgY29uc3QgTENoYXIqIG1f
ZGF0YTg7CisgICAgICAgIGNvbnN0IFVDaGFyKiBtX2RhdGExNjsKKyAgICB9OworICAgIG11dGFi
bGUgdW5zaWduZWQgbV9oYXNoQW5kRmxhZ3M7Cit9OworCitjbGFzcyBTdHJpbmdJbXBsIDogcHJp
dmF0ZSBTdHJpbmdJbXBsU2hhcGUgewogICAgIFdURl9NQUtFX05PTkNPUFlBQkxFKFN0cmluZ0lt
cGwpOyBXVEZfTUFLRV9GQVNUX0FMTE9DQVRFRDsKICAgICBmcmllbmQgc3RydWN0IFdURjo6Q1N0
cmluZ1RyYW5zbGF0b3I7CiAgICAgdGVtcGxhdGU8dHlwZW5hbWUgQ2hhcmFjdGVyVHlwZT4gZnJp
ZW5kIHN0cnVjdCBXVEY6Okhhc2hBbmRDaGFyYWN0ZXJzVHJhbnNsYXRvcjsKQEAgLTE3NCwxMCAr
MjE2LDcgQEAgcHJpdmF0ZToKICAgICBlbnVtIEZvcmNlOEJpdCB7IEZvcmNlOEJpdENvbnN0cnVj
dG9yIH07CiAgICAgLy8gQ3JlYXRlIGEgbm9ybWFsIDgtYml0IHN0cmluZyB3aXRoIGludGVybmFs
IHN0b3JhZ2UgKEJ1ZmZlckludGVybmFsKQogICAgIFN0cmluZ0ltcGwodW5zaWduZWQgbGVuZ3Ro
LCBGb3JjZThCaXQpCi0gICAgICAgIDogbV9yZWZDb3VudChzX3JlZkNvdW50SW5jcmVtZW50KQot
ICAgICAgICAsIG1fbGVuZ3RoKGxlbmd0aCkKLSAgICAgICAgLCBtX2RhdGE4KHRhaWxQb2ludGVy
PExDaGFyPigpKQotICAgICAgICAsIG1faGFzaEFuZEZsYWdzKHNfaGFzaEZsYWc4Qml0QnVmZmVy
IHwgU3RyaW5nTm9ybWFsIHwgQnVmZmVySW50ZXJuYWwpCisgICAgICAgIDogU3RyaW5nSW1wbFNo
YXBlKHNfcmVmQ291bnRJbmNyZW1lbnQsIGxlbmd0aCwgdGFpbFBvaW50ZXI8TENoYXI+KCksIHNf
aGFzaEZsYWc4Qml0QnVmZmVyIHwgU3RyaW5nTm9ybWFsIHwgQnVmZmVySW50ZXJuYWwpCiAgICAg
ewogICAgICAgICBBU1NFUlQobV9kYXRhOCk7CiAgICAgICAgIEFTU0VSVChtX2xlbmd0aCk7CkBA
IC0xODcsMTAgKzIyNiw3IEBAIHByaXZhdGU6CiAKICAgICAvLyBDcmVhdGUgYSBub3JtYWwgMTYt
Yml0IHN0cmluZyB3aXRoIGludGVybmFsIHN0b3JhZ2UgKEJ1ZmZlckludGVybmFsKQogICAgIFN0
cmluZ0ltcGwodW5zaWduZWQgbGVuZ3RoKQotICAgICAgICA6IG1fcmVmQ291bnQoc19yZWZDb3Vu
dEluY3JlbWVudCkKLSAgICAgICAgLCBtX2xlbmd0aChsZW5ndGgpCi0gICAgICAgICwgbV9kYXRh
MTYodGFpbFBvaW50ZXI8VUNoYXI+KCkpCi0gICAgICAgICwgbV9oYXNoQW5kRmxhZ3MoU3RyaW5n
Tm9ybWFsIHwgQnVmZmVySW50ZXJuYWwpCisgICAgICAgIDogU3RyaW5nSW1wbFNoYXBlKHNfcmVm
Q291bnRJbmNyZW1lbnQsIGxlbmd0aCwgdGFpbFBvaW50ZXI8VUNoYXI+KCksIFN0cmluZ05vcm1h
bCB8IEJ1ZmZlckludGVybmFsKQogICAgIHsKICAgICAgICAgQVNTRVJUKG1fZGF0YTE2KTsKICAg
ICAgICAgQVNTRVJUKG1fbGVuZ3RoKTsKQEAgLTIwMCwxMCArMjM2LDcgQEAgcHJpdmF0ZToKIAog
ICAgIC8vIENyZWF0ZSBhIFN0cmluZ0ltcGwgYWRvcHRpbmcgb3duZXJzaGlwIG9mIHRoZSBwcm92
aWRlZCBidWZmZXIgKEJ1ZmZlck93bmVkKQogICAgIFN0cmluZ0ltcGwoTWFsbG9jUHRyPExDaGFy
PiBjaGFyYWN0ZXJzLCB1bnNpZ25lZCBsZW5ndGgpCi0gICAgICAgIDogbV9yZWZDb3VudChzX3Jl
ZkNvdW50SW5jcmVtZW50KQotICAgICAgICAsIG1fbGVuZ3RoKGxlbmd0aCkKLSAgICAgICAgLCBt
X2RhdGE4KGNoYXJhY3RlcnMubGVha1B0cigpKQotICAgICAgICAsIG1faGFzaEFuZEZsYWdzKHNf
aGFzaEZsYWc4Qml0QnVmZmVyIHwgU3RyaW5nTm9ybWFsIHwgQnVmZmVyT3duZWQpCisgICAgICAg
IDogU3RyaW5nSW1wbFNoYXBlKHNfcmVmQ291bnRJbmNyZW1lbnQsIGxlbmd0aCwgY2hhcmFjdGVy
cy5sZWFrUHRyKCksIHNfaGFzaEZsYWc4Qml0QnVmZmVyIHwgU3RyaW5nTm9ybWFsIHwgQnVmZmVy
T3duZWQpCiAgICAgewogICAgICAgICBBU1NFUlQobV9kYXRhOCk7CiAgICAgICAgIEFTU0VSVCht
X2xlbmd0aCk7CkBAIC0yMTMsMTAgKzI0Niw3IEBAIHByaXZhdGU6CiAKICAgICBlbnVtIENvbnN0
cnVjdFdpdGhvdXRDb3B5aW5nVGFnIHsgQ29uc3RydWN0V2l0aG91dENvcHlpbmcgfTsKICAgICBT
dHJpbmdJbXBsKGNvbnN0IFVDaGFyKiBjaGFyYWN0ZXJzLCB1bnNpZ25lZCBsZW5ndGgsIENvbnN0
cnVjdFdpdGhvdXRDb3B5aW5nVGFnKQotICAgICAgICA6IG1fcmVmQ291bnQoc19yZWZDb3VudElu
Y3JlbWVudCkKLSAgICAgICAgLCBtX2xlbmd0aChsZW5ndGgpCi0gICAgICAgICwgbV9kYXRhMTYo
Y2hhcmFjdGVycykKLSAgICAgICAgLCBtX2hhc2hBbmRGbGFncyhTdHJpbmdOb3JtYWwgfCBCdWZm
ZXJJbnRlcm5hbCkKKyAgICAgICAgOiBTdHJpbmdJbXBsU2hhcGUoc19yZWZDb3VudEluY3JlbWVu
dCwgbGVuZ3RoLCBjaGFyYWN0ZXJzLCBTdHJpbmdOb3JtYWwgfCBCdWZmZXJJbnRlcm5hbCkKICAg
ICB7CiAgICAgICAgIEFTU0VSVChtX2RhdGExNik7CiAgICAgICAgIEFTU0VSVChtX2xlbmd0aCk7
CkBAIC0yMjUsMTAgKzI1NSw3IEBAIHByaXZhdGU6CiAgICAgfQogCiAgICAgU3RyaW5nSW1wbChj
b25zdCBMQ2hhciogY2hhcmFjdGVycywgdW5zaWduZWQgbGVuZ3RoLCBDb25zdHJ1Y3RXaXRob3V0
Q29weWluZ1RhZykKLSAgICAgICAgOiBtX3JlZkNvdW50KHNfcmVmQ291bnRJbmNyZW1lbnQpCi0g
ICAgICAgICwgbV9sZW5ndGgobGVuZ3RoKQotICAgICAgICAsIG1fZGF0YTgoY2hhcmFjdGVycykK
LSAgICAgICAgLCBtX2hhc2hBbmRGbGFncyhzX2hhc2hGbGFnOEJpdEJ1ZmZlciB8IFN0cmluZ05v
cm1hbCB8IEJ1ZmZlckludGVybmFsKQorICAgICAgICA6IFN0cmluZ0ltcGxTaGFwZShzX3JlZkNv
dW50SW5jcmVtZW50LCBsZW5ndGgsIGNoYXJhY3RlcnMsIHNfaGFzaEZsYWc4Qml0QnVmZmVyIHwg
U3RyaW5nTm9ybWFsIHwgQnVmZmVySW50ZXJuYWwpCiAgICAgewogICAgICAgICBBU1NFUlQobV9k
YXRhOCk7CiAgICAgICAgIEFTU0VSVChtX2xlbmd0aCk7CkBAIC0yMzgsMTAgKzI2NSw3IEBAIHBy
aXZhdGU6CiAKICAgICAvLyBDcmVhdGUgYSBTdHJpbmdJbXBsIGFkb3B0aW5nIG93bmVyc2hpcCBv
ZiB0aGUgcHJvdmlkZWQgYnVmZmVyIChCdWZmZXJPd25lZCkKICAgICBTdHJpbmdJbXBsKE1hbGxv
Y1B0cjxVQ2hhcj4gY2hhcmFjdGVycywgdW5zaWduZWQgbGVuZ3RoKQotICAgICAgICA6IG1fcmVm
Q291bnQoc19yZWZDb3VudEluY3JlbWVudCkKLSAgICAgICAgLCBtX2xlbmd0aChsZW5ndGgpCi0g
ICAgICAgICwgbV9kYXRhMTYoY2hhcmFjdGVycy5sZWFrUHRyKCkpCi0gICAgICAgICwgbV9oYXNo
QW5kRmxhZ3MoU3RyaW5nTm9ybWFsIHwgQnVmZmVyT3duZWQpCisgICAgICAgIDogU3RyaW5nSW1w
bFNoYXBlKHNfcmVmQ291bnRJbmNyZW1lbnQsIGxlbmd0aCwgY2hhcmFjdGVycy5sZWFrUHRyKCks
IFN0cmluZ05vcm1hbCB8IEJ1ZmZlck93bmVkKQogICAgIHsKICAgICAgICAgQVNTRVJUKG1fZGF0
YTE2KTsKICAgICAgICAgQVNTRVJUKG1fbGVuZ3RoKTsKQEAgLTI1MSwxMCArMjc1LDcgQEAgcHJp
dmF0ZToKIAogICAgIC8vIFVzZWQgdG8gY3JlYXRlIG5ldyBzdHJpbmdzIHRoYXQgYXJlIGEgc3Vi
c3RyaW5nIG9mIGFuIGV4aXN0aW5nIDgtYml0IFN0cmluZ0ltcGwgKEJ1ZmZlclN1YnN0cmluZykK
ICAgICBTdHJpbmdJbXBsKGNvbnN0IExDaGFyKiBjaGFyYWN0ZXJzLCB1bnNpZ25lZCBsZW5ndGgs
IFJlZjxTdHJpbmdJbXBsPiYmIGJhc2UpCi0gICAgICAgIDogbV9yZWZDb3VudChzX3JlZkNvdW50
SW5jcmVtZW50KQotICAgICAgICAsIG1fbGVuZ3RoKGxlbmd0aCkKLSAgICAgICAgLCBtX2RhdGE4
KGNoYXJhY3RlcnMpCi0gICAgICAgICwgbV9oYXNoQW5kRmxhZ3Moc19oYXNoRmxhZzhCaXRCdWZm
ZXIgfCBTdHJpbmdOb3JtYWwgfCBCdWZmZXJTdWJzdHJpbmcpCisgICAgICAgIDogU3RyaW5nSW1w
bFNoYXBlKHNfcmVmQ291bnRJbmNyZW1lbnQsIGxlbmd0aCwgY2hhcmFjdGVycywgc19oYXNoRmxh
ZzhCaXRCdWZmZXIgfCBTdHJpbmdOb3JtYWwgfCBCdWZmZXJTdWJzdHJpbmcpCiAgICAgewogICAg
ICAgICBBU1NFUlQoaXM4Qml0KCkpOwogICAgICAgICBBU1NFUlQobV9kYXRhOCk7CkBAIC0yNjgs
MTAgKzI4OSw3IEBAIHByaXZhdGU6CiAKICAgICAvLyBVc2VkIHRvIGNyZWF0ZSBuZXcgc3RyaW5n
cyB0aGF0IGFyZSBhIHN1YnN0cmluZyBvZiBhbiBleGlzdGluZyAxNi1iaXQgU3RyaW5nSW1wbCAo
QnVmZmVyU3Vic3RyaW5nKQogICAgIFN0cmluZ0ltcGwoY29uc3QgVUNoYXIqIGNoYXJhY3RlcnMs
IHVuc2lnbmVkIGxlbmd0aCwgUmVmPFN0cmluZ0ltcGw+JiYgYmFzZSkKLSAgICAgICAgOiBtX3Jl
ZkNvdW50KHNfcmVmQ291bnRJbmNyZW1lbnQpCi0gICAgICAgICwgbV9sZW5ndGgobGVuZ3RoKQot
ICAgICAgICAsIG1fZGF0YTE2KGNoYXJhY3RlcnMpCi0gICAgICAgICwgbV9oYXNoQW5kRmxhZ3Mo
U3RyaW5nTm9ybWFsIHwgQnVmZmVyU3Vic3RyaW5nKQorICAgICAgICA6IFN0cmluZ0ltcGxTaGFw
ZShzX3JlZkNvdW50SW5jcmVtZW50LCBsZW5ndGgsIGNoYXJhY3RlcnMsIFN0cmluZ05vcm1hbCB8
IEJ1ZmZlclN1YnN0cmluZykKICAgICB7CiAgICAgICAgIEFTU0VSVCghaXM4Qml0KCkpOwogICAg
ICAgICBBU1NFUlQobV9kYXRhMTYpOwpAQCAtNDYwLDYgKzQ3OCw3IEBAIHByaXZhdGU6CiAgICAg
dm9pZCBzZXRIYXNoKHVuc2lnbmVkIGhhc2gpIGNvbnN0CiAgICAgewogICAgICAgICBBU1NFUlQo
IWhhc0hhc2goKSk7CisgICAgICAgIEFTU0VSVCghaXNTdGF0aWMoKSk7CiAgICAgICAgIC8vIE11
bHRpcGxlIGNsaWVudHMgYXNzdW1lIHRoYXQgU3RyaW5nSGFzaGVyIGlzIHRoZSBjYW5vbmljYWwg
c3RyaW5nIGhhc2ggZnVuY3Rpb24uCiAgICAgICAgIEFTU0VSVChoYXNoID09IChpczhCaXQoKSA/
IFN0cmluZ0hhc2hlcjo6Y29tcHV0ZUhhc2hBbmRNYXNrVG9wOEJpdHMobV9kYXRhOCwgbV9sZW5n
dGgpIDogU3RyaW5nSGFzaGVyOjpjb21wdXRlSGFzaEFuZE1hc2tUb3A4Qml0cyhtX2RhdGExNiwg
bV9sZW5ndGgpKSk7CiAgICAgICAgIEFTU0VSVCghKGhhc2ggJiAoc19mbGFnTWFzayA8PCAoOCAq
IHNpemVvZihoYXNoKSAtIHNfZmxhZ0NvdW50KSkpKTsgLy8gVmVyaWZ5IHRoYXQgZW5vdWdoIGhp
Z2ggYml0cyBhcmUgZW1wdHkuCkBAIC01MzcsMjcgKzU1Niw0NyBAQCBwdWJsaWM6CiAgICAgICAg
IG1fcmVmQ291bnQgPSB0ZW1wUmVmQ291bnQ7CiAgICAgfQogCi0gICAgY2xhc3MgU3RhdGljU3Ry
aW5nSW1wbCB7CisgICAgY2xhc3MgU3RhdGljU3RyaW5nSW1wbCA6IHByaXZhdGUgU3RyaW5nSW1w
bFNoYXBlIHsKICAgICAgICAgV1RGX01BS0VfTk9OQ09QWUFCTEUoU3RhdGljU3RyaW5nSW1wbCk7
CiAgICAgcHVibGljOgogICAgICAgICAvLyBVc2VkIHRvIGNvbnN0cnVjdCBzdGF0aWMgc3RyaW5n
cywgd2hpY2ggaGF2ZSBhbiBzcGVjaWFsIHJlZkNvdW50IHRoYXQgY2FuIG5ldmVyIGhpdCB6ZXJv
LgogICAgICAgICAvLyBUaGlzIG1lYW5zIHRoYXQgdGhlIHN0YXRpYyBzdHJpbmcgd2lsbCBuZXZl
ciBiZSBkZXN0cm95ZWQsIHdoaWNoIGlzIGltcG9ydGFudCBiZWNhdXNlCiAgICAgICAgIC8vIHN0
YXRpYyBzdHJpbmdzIHdpbGwgYmUgc2hhcmVkIGFjcm9zcyB0aHJlYWRzICYgcmVmLWNvdW50ZWQg
aW4gYSBub24tdGhyZWFkc2FmZSBtYW5uZXIuCisgICAgICAgIC8vCisgICAgICAgIC8vIEluIG9y
ZGVyIHRvIG1ha2UgU3RhdGljU3RyaW5nSW1wbCB0aHJlYWQgc2FmZSwgd2UgYWxzbyBuZWVkIHRv
IGVuc3VyZSB0aGF0IHRoZSByZXN0IG9mCisgICAgICAgIC8vIHRoZSBmaWVsZHMgYXJlIG5ldmVy
IG11dGF0ZWQgYnkgdGhyZWFkcy4gV2UgaGF2ZSB0aGlzIGd1YXJhbnRlZSBiZWNhdXNlOgorICAg
ICAgICAvLworICAgICAgICAvLyAxLiBtX2xlbmd0aCBpcyBvbmx5IHNldCBvbiBjb25zdHJ1Y3Rp
b24gYW5kIG5ldmVyIG11dGF0ZWQgdGhlcmVhZnRlci4KKyAgICAgICAgLy8KKyAgICAgICAgLy8g
Mi4gbV9kYXRhOCBhbmQgbV9kYXRhMTYgYXJlIG9ubHkgc2V0IG9uIGNvbnN0cnVjdGlvbiBhbmQg
bmV2ZXIgbXV0YXRlZCB0aGVyZWFmdGVyLgorICAgICAgICAvLyAgICBXZSBhbHNvIGtub3cgdGhh
dCBhIFN0cmluZ0ltcGwgbmV2ZXIgY2hhbmdlcyBmcm9tIDggYml0IHRvIDE2IGJpdCBiZWNhdXNl
IHRoZXJlCisgICAgICAgIC8vICAgIGlzIG5vIHdheSB0byBzZXQvY2xlYXIgdGhlIHNfaGFzaEZs
YWc4Qml0QnVmZmVyIGZsYWcgb3RoZXIgdGhhbiBhdCBjb25zdHJ1Y3Rpb24uCisgICAgICAgIC8v
CisgICAgICAgIC8vIDMuIG1faGFzaEFuZEZsYWdzIHdpbGwgbm90IGJlIG11dGF0ZWQgYnkgZGlm
ZmVyZW50IHRocmVhZHMgYmVjYXVzZToKKyAgICAgICAgLy8KKyAgICAgICAgLy8gICAgYS4gU3Rh
dGljU3RyaW5nSW1wbCdzIGNvbnN0cnVjdG9yIHNldHMgdGhlIHNfaGFzaEZsYWdEaWRSZXBvcnRD
b3N0IGZsYWcgdG8gZW5zdXJlCisgICAgICAgIC8vICAgICAgIHRoYXQgU3RyaW5nSW1wbDo6Y29z
dCgpIHJldHVybnMgZWFybHkuCisgICAgICAgIC8vICAgICAgIFRoaXMgbWVhbnMgU3RhdGljU3Ry
aW5nSW1wbCBjb3N0cyBhcmUgbm90IGNvdW50ZWQuIEJ1dCBzaW5jZSB0aGVyZSBzaG91bGQgb25s
eQorICAgICAgICAvLyAgICAgICBiZSBhIGZpbml0ZSBzZXQgb2YgU3RhdGljU3RyaW5nSW1wbHMs
IHRoZWlyIGNvc3QgY2FuIGJlIGFnZ3JlZ2F0ZWQgaW50byBhIHNpbmdsZQorICAgICAgICAvLyAg
ICAgICBzeXN0ZW0gY29zdCBpZiBuZWVkZWQuCisgICAgICAgIC8vICAgIGIuIHNldElzQXRvbWlj
KCkgaXMgbmV2ZXIgY2FsbGVkIG9uIGEgU3RhdGljU3RyaW5nSW1wbC4KKyAgICAgICAgLy8gICAg
ICAgc2V0SXNBdG9taWMoKSBhc3NlcnRzICFpc1N0YXRpYygpLgorICAgICAgICAvLyAgICBjLiBz
ZXRIYXNoKCkgaXMgbmV2ZXIgY2FsbGVkIG9uIGEgU3RhdGljU3RyaW5nSW1wbC4KKyAgICAgICAg
Ly8gICAgICAgU3RhdGljU3RyaW5nSW1wbCdzIGNvbnN0cnVjdG9yIHNldHMgdGhlIGhhc2ggb24g
Y29uc3RydWN0aW9uLgorICAgICAgICAvLyAgICAgICBTdHJpbmdJbXBsOjpoYXNoKCkgb25seSBz
ZXRzIGEgbmV3IGhhc2ggaWZmICFoYXNIYXNoKCkuCisgICAgICAgIC8vICAgICAgIEFkZGl0aW9u
YWxseSwgU3RyaW5nSW1wbDo6c2V0SGFzaCgpIGFzc2VydHMgaGFzSGFzaCgpIGFuZCAhaXNTdGF0
aWMoKS4KKwogICAgICAgICB0ZW1wbGF0ZTx1bnNpZ25lZCBjaGFyYWN0ZXJzQ291bnQ+CiAgICAg
ICAgIGNvbnN0ZXhwciBTdGF0aWNTdHJpbmdJbXBsKGNvbnN0IGNoYXIgKCZjaGFyYWN0ZXJzKVtj
aGFyYWN0ZXJzQ291bnRdLCBTdHJpbmdLaW5kIHN0cmluZ0tpbmQgPSBTdHJpbmdOb3JtYWwpCi0g
ICAgICAgICAgICA6IG1fcmVmQ291bnQoc19yZWZDb3VudEZsYWdJc1N0YXRpY1N0cmluZykKLSAg
ICAgICAgICAgICwgbV9sZW5ndGgoY2hhcmFjdGVyc0NvdW50IC0gMSkKLSAgICAgICAgICAgICwg
bV9kYXRhOChjaGFyYWN0ZXJzKQotICAgICAgICAgICAgLCBtX2hhc2hBbmRGbGFncyhzX2hhc2hG
bGFnOEJpdEJ1ZmZlciB8IHN0cmluZ0tpbmQgfCBCdWZmZXJJbnRlcm5hbCB8IChTdHJpbmdIYXNo
ZXI6OmNvbXB1dGVMaXRlcmFsSGFzaEFuZE1hc2tUb3A4Qml0cyhjaGFyYWN0ZXJzKSA8PCBzX2Zs
YWdDb3VudCkpCisgICAgICAgICAgICA6IFN0cmluZ0ltcGxTaGFwZShzX3JlZkNvdW50RmxhZ0lz
U3RhdGljU3RyaW5nLCBjaGFyYWN0ZXJzQ291bnQgLSAxLCBjaGFyYWN0ZXJzLAorICAgICAgICAg
ICAgICAgIHNfaGFzaEZsYWc4Qml0QnVmZmVyIHwgc19oYXNoRmxhZ0RpZFJlcG9ydENvc3QgfCBz
dHJpbmdLaW5kIHwgQnVmZmVySW50ZXJuYWwgfCAoU3RyaW5nSGFzaGVyOjpjb21wdXRlTGl0ZXJh
bEhhc2hBbmRNYXNrVG9wOEJpdHMoY2hhcmFjdGVycykgPDwgc19mbGFnQ291bnQpKQogICAgICAg
ICB7CiAgICAgICAgIH0KIAogICAgICAgICB0ZW1wbGF0ZTx1bnNpZ25lZCBjaGFyYWN0ZXJzQ291
bnQ+CiAgICAgICAgIGNvbnN0ZXhwciBTdGF0aWNTdHJpbmdJbXBsKGNvbnN0IGNoYXIxNl90ICgm
Y2hhcmFjdGVycylbY2hhcmFjdGVyc0NvdW50XSwgU3RyaW5nS2luZCBzdHJpbmdLaW5kID0gU3Ry
aW5nTm9ybWFsKQotICAgICAgICAgICAgOiBtX3JlZkNvdW50KHNfcmVmQ291bnRGbGFnSXNTdGF0
aWNTdHJpbmcpCi0gICAgICAgICAgICAsIG1fbGVuZ3RoKGNoYXJhY3RlcnNDb3VudCAtIDEpCi0g
ICAgICAgICAgICAsIG1fZGF0YTE2KGNoYXJhY3RlcnMpCi0gICAgICAgICAgICAsIG1faGFzaEFu
ZEZsYWdzKHN0cmluZ0tpbmQgfCBCdWZmZXJJbnRlcm5hbCB8IChTdHJpbmdIYXNoZXI6OmNvbXB1
dGVMaXRlcmFsSGFzaEFuZE1hc2tUb3A4Qml0cyhjaGFyYWN0ZXJzKSA8PCBzX2ZsYWdDb3VudCkp
CisgICAgICAgICAgICA6IFN0cmluZ0ltcGxTaGFwZShzX3JlZkNvdW50RmxhZ0lzU3RhdGljU3Ry
aW5nLCBjaGFyYWN0ZXJzQ291bnQgLSAxLCBjaGFyYWN0ZXJzLAorICAgICAgICAgICAgICAgIHNf
aGFzaEZsYWdEaWRSZXBvcnRDb3N0IHwgc3RyaW5nS2luZCB8IEJ1ZmZlckludGVybmFsIHwgKFN0
cmluZ0hhc2hlcjo6Y29tcHV0ZUxpdGVyYWxIYXNoQW5kTWFza1RvcDhCaXRzKGNoYXJhY3RlcnMp
IDw8IHNfZmxhZ0NvdW50KSkKICAgICAgICAgewogICAgICAgICB9CiAKQEAgLTU2NSwxNSArNjA0
LDYgQEAgcHVibGljOgogICAgICAgICB7CiAgICAgICAgICAgICByZXR1cm4gKnJlaW50ZXJwcmV0
X2Nhc3Q8U3RyaW5nSW1wbCo+KHRoaXMpOwogICAgICAgICB9Ci0KLSAgICAgICAgLy8gVGhlc2Ug
bWVtYmVyIHZhcmlhYmxlcyBtdXN0IG1hdGNoIHRoZSBsYXlvdXQgb2YgU3RyaW5nSW1wbC4KLSAg
ICAgICAgdW5zaWduZWQgbV9yZWZDb3VudDsKLSAgICAgICAgdW5zaWduZWQgbV9sZW5ndGg7Ci0g
ICAgICAgIHVuaW9uIHsKLSAgICAgICAgICAgIGNvbnN0IGNoYXIqIG1fZGF0YTg7Ci0gICAgICAg
ICAgICBjb25zdCBjaGFyMTZfdCogbV9kYXRhMTY7Ci0gICAgICAgIH07Ci0gICAgICAgIHVuc2ln
bmVkIG1faGFzaEFuZEZsYWdzOwogICAgIH07CiAKICAgICBXVEZfRVhQT1JUREFUQSBzdGF0aWMg
U3RhdGljU3RyaW5nSW1wbCBzX2F0b21pY0VtcHR5U3RyaW5nOwpAQCAtNzM5LDEwICs3NjksNyBA
QCBwcm90ZWN0ZWQ6CiAKICAgICAvLyBVc2VkIHRvIGNyZWF0ZSBuZXcgc3ltYm9sIHN0cmluZ3Mg
dGhhdCBob2xkcyBleGlzdGluZyA4LWJpdCBbW0Rlc2NyaXB0aW9uXV0gc3RyaW5nIGFzIGEgc3Vi
c3RyaW5nIGJ1ZmZlciAoQnVmZmVyU3Vic3RyaW5nKS4KICAgICBTdHJpbmdJbXBsKENyZWF0ZVN5
bWJvbFRhZywgY29uc3QgTENoYXIqIGNoYXJhY3RlcnMsIHVuc2lnbmVkIGxlbmd0aCkKLSAgICAg
ICAgOiBtX3JlZkNvdW50KHNfcmVmQ291bnRJbmNyZW1lbnQpCi0gICAgICAgICwgbV9sZW5ndGgo
bGVuZ3RoKQotICAgICAgICAsIG1fZGF0YTgoY2hhcmFjdGVycykKLSAgICAgICAgLCBtX2hhc2hB
bmRGbGFncyhzX2hhc2hGbGFnOEJpdEJ1ZmZlciB8IFN0cmluZ1N5bWJvbCB8IEJ1ZmZlclN1YnN0
cmluZykKKyAgICAgICAgOiBTdHJpbmdJbXBsU2hhcGUoc19yZWZDb3VudEluY3JlbWVudCwgbGVu
Z3RoLCBjaGFyYWN0ZXJzLCBzX2hhc2hGbGFnOEJpdEJ1ZmZlciB8IFN0cmluZ1N5bWJvbCB8IEJ1
ZmZlclN1YnN0cmluZykKICAgICB7CiAgICAgICAgIEFTU0VSVChpczhCaXQoKSk7CiAgICAgICAg
IEFTU0VSVChtX2RhdGE4KTsKQEAgLTc1MSwxMCArNzc4LDcgQEAgcHJvdGVjdGVkOgogCiAgICAg
Ly8gVXNlZCB0byBjcmVhdGUgbmV3IHN5bWJvbCBzdHJpbmdzIHRoYXQgaG9sZHMgZXhpc3Rpbmcg
MTYtYml0IFtbRGVzY3JpcHRpb25dXSBzdHJpbmcgYXMgYSBzdWJzdHJpbmcgYnVmZmVyIChCdWZm
ZXJTdWJzdHJpbmcpLgogICAgIFN0cmluZ0ltcGwoQ3JlYXRlU3ltYm9sVGFnLCBjb25zdCBVQ2hh
ciogY2hhcmFjdGVycywgdW5zaWduZWQgbGVuZ3RoKQotICAgICAgICA6IG1fcmVmQ291bnQoc19y
ZWZDb3VudEluY3JlbWVudCkKLSAgICAgICAgLCBtX2xlbmd0aChsZW5ndGgpCi0gICAgICAgICwg
bV9kYXRhMTYoY2hhcmFjdGVycykKLSAgICAgICAgLCBtX2hhc2hBbmRGbGFncyhTdHJpbmdTeW1i
b2wgfCBCdWZmZXJTdWJzdHJpbmcpCisgICAgICAgIDogU3RyaW5nSW1wbFNoYXBlKHNfcmVmQ291
bnRJbmNyZW1lbnQsIGxlbmd0aCwgY2hhcmFjdGVycywgU3RyaW5nU3ltYm9sIHwgQnVmZmVyU3Vi
c3RyaW5nKQogICAgIHsKICAgICAgICAgQVNTRVJUKCFpczhCaXQoKSk7CiAgICAgICAgIEFTU0VS
VChtX2RhdGExNik7CkBAIC03NjMsMTAgKzc4Nyw3IEBAIHByb3RlY3RlZDoKIAogICAgIC8vIE51
bGwgc3ltYm9sLgogICAgIFN0cmluZ0ltcGwoQ3JlYXRlU3ltYm9sVGFnKQotICAgICAgICA6IG1f
cmVmQ291bnQoc19yZWZDb3VudEluY3JlbWVudCkKLSAgICAgICAgLCBtX2xlbmd0aCgwKQotICAg
ICAgICAsIG1fZGF0YTgoZW1wdHkoKS0+Y2hhcmFjdGVyczgoKSkKLSAgICAgICAgLCBtX2hhc2hB
bmRGbGFncyhzX2hhc2hGbGFnOEJpdEJ1ZmZlciB8IFN0cmluZ1N5bWJvbCB8IEJ1ZmZlclN1YnN0
cmluZykKKyAgICAgICAgOiBTdHJpbmdJbXBsU2hhcGUoc19yZWZDb3VudEluY3JlbWVudCwgMCwg
ZW1wdHkoKS0+Y2hhcmFjdGVyczgoKSwgc19oYXNoRmxhZzhCaXRCdWZmZXIgfCBTdHJpbmdTeW1i
b2wgfCBCdWZmZXJTdWJzdHJpbmcpCiAgICAgewogICAgICAgICBBU1NFUlQoaXM4Qml0KCkpOwog
ICAgICAgICBBU1NFUlQobV9kYXRhOCk7CkBAIC04NTksMTkgKzg4MCwxMSBAQCBwdWJsaWM6CiAg
ICAgICAgIEFTU0VSVChleGlzdGluZ0hhc2goKSA9PSBTdHJpbmdIYXNoZXI6OmNvbXB1dGVIYXNo
QW5kTWFza1RvcDhCaXRzKGNoYXJhY3RlcnM4KCksIGxlbmd0aCgpKSk7CiAgICAgfQogI2VuZGlm
Ci0KLXByaXZhdGU6Ci0gICAgLy8gVGhlc2UgbWVtYmVyIHZhcmlhYmxlcyBtdXN0IG1hdGNoIHRo
ZSBsYXlvdXQgb2YgU3RhdGljU3RyaW5nSW1wbC4KLSAgICB1bnNpZ25lZCBtX3JlZkNvdW50Owot
ICAgIHVuc2lnbmVkIG1fbGVuZ3RoOwotICAgIHVuaW9uIHsKLSAgICAgICAgY29uc3QgTENoYXIq
IG1fZGF0YTg7Ci0gICAgICAgIGNvbnN0IFVDaGFyKiBtX2RhdGExNjsKLSAgICB9OwotICAgIG11
dGFibGUgdW5zaWduZWQgbV9oYXNoQW5kRmxhZ3M7CiB9OwogCi1zdGF0aWNfYXNzZXJ0KHNpemVv
ZihTdHJpbmdJbXBsKSA9PSBzaXplb2YoU3RyaW5nSW1wbDo6U3RhdGljU3RyaW5nSW1wbCksICIi
KTsKK3VzaW5nIFN0YXRpY1N0cmluZ0ltcGwgPSBTdHJpbmdJbXBsOjpTdGF0aWNTdHJpbmdJbXBs
OworCitzdGF0aWNfYXNzZXJ0KHNpemVvZihTdHJpbmdJbXBsKSA9PSBzaXplb2YoU3RhdGljU3Ry
aW5nSW1wbCksICIiKTsKIAogI2lmICFBU1NFUlRfRElTQUJMRUQKIC8vIFN0cmluZ0ltcGxzIGNy
ZWF0ZWQgZnJvbSBTdGF0aWNTdHJpbmdJbXBsIHdpbGwgQVNTRVJUCkBAIC0xMTM2LDEwICsxMTQ5
LDI2IEBAIHRlbXBsYXRlPHVuc2lnbmVkIGxlbmd0aD4gaW5saW5lIGJvb2wgZXEKICAgICByZXR1
cm4gc3RyaW5nICYmIGVxdWFsTGV0dGVyc0lnbm9yaW5nQVNDSUlDYXNlKCpzdHJpbmcsIGxvd2Vy
Y2FzZUxldHRlcnMpOwogfQogCit0ZW1wbGF0ZTx1bnNpZ25lZCBjaGFyYWN0ZXJzQ291bnQ+CitT
dGF0aWNTdHJpbmdJbXBsJiBtYWtlU3RhdGljU3RyaW5nSW1wbChjb25zdCBjaGFyICgmY2hhcmFj
dGVycylbY2hhcmFjdGVyc0NvdW50XSkKK3sKKyAgICBzdGF0aWMgU3RhdGljU3RyaW5nSW1wbCBp
bXBsKGNoYXJhY3RlcnMpOworICAgIHJldHVybiBpbXBsOworfQorCit0ZW1wbGF0ZTx1bnNpZ25l
ZCBjaGFyYWN0ZXJzQ291bnQ+CitTdGF0aWNTdHJpbmdJbXBsJiBtYWtlU3RhdGljU3RyaW5nSW1w
bChjb25zdCBjaGFyMTZfdCAoJmNoYXJhY3RlcnMpW2NoYXJhY3RlcnNDb3VudF0pCit7CisgICAg
c3RhdGljIFN0YXRpY1N0cmluZ0ltcGwgaW1wbChjaGFyYWN0ZXJzKTsKKyAgICByZXR1cm4gaW1w
bDsKK30KKwogfSAvLyBuYW1lc3BhY2UgV1RGCiAKIHVzaW5nIFdURjo6U3RyaW5nSW1wbDsKK3Vz
aW5nIFdURjo6U3RhdGljU3RyaW5nSW1wbDsKIHVzaW5nIFdURjo6ZXF1YWw7Cit1c2luZyBXVEY6
Om1ha2VTdGF0aWNTdHJpbmdJbXBsOwogdXNpbmcgV1RGOjpUZXh0Q2FzZVNlbnNpdGl2aXR5Owog
dXNpbmcgV1RGOjpUZXh0Q2FzZVNlbnNpdGl2ZTsKIHVzaW5nIFdURjo6VGV4dENhc2VJbnNlbnNp
dGl2ZTsKSW5kZXg6IFNvdXJjZS9XVEYvd3RmL3RleHQvV1RGU3RyaW5nLmNwcAo9PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
Ci0tLSBTb3VyY2UvV1RGL3d0Zi90ZXh0L1dURlN0cmluZy5jcHAJKHJldmlzaW9uIDIxNjEwNykK
KysrIFNvdXJjZS9XVEYvd3RmL3RleHQvV1RGU3RyaW5nLmNwcAkod29ya2luZyBjb3B5KQpAQCAt
MSw2ICsxLDYgQEAKIC8qCiAgKiAoQykgMTk5OSBMYXJzIEtub2xsIChrbm9sbEBrZGUub3JnKQot
ICogQ29weXJpZ2h0IChDKSAyMDA0LCAyMDA1LCAyMDA2LCAyMDA3LCAyMDA4LCAyMDEwLCAyMDEy
IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqIENvcHlyaWdodCAoQykgMjAwNC0y
MDE3IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KICAqIENvcHlyaWdodCAoQykgMjAw
Ny0yMDA5IFRvcmNoIE1vYmlsZSwgSW5jLgogICoKICAqIFRoaXMgbGlicmFyeSBpcyBmcmVlIHNv
ZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IKQEAgLTg3LDYgKzg3LDExIEBA
IFN0cmluZzo6U3RyaW5nKEFTQ0lJTGl0ZXJhbCBjaGFyYWN0ZXJzKQogewogfQogCitTdHJpbmc6
OlN0cmluZyhTdGF0aWNBU0NJSUxpdGVyYWwgbGl0ZXJhbCkKKyAgICA6IG1faW1wbCgmbGl0ZXJh
bC5zdHJpbmdJbXBsKQoreworfQorCiB2b2lkIFN0cmluZzo6YXBwZW5kKGNvbnN0IFN0cmluZyYg
c3RyKQogewogICAgIC8vIEZJWE1FOiBUaGlzIGlzIGV4dHJlbWVseSBpbmVmZmljaWVudC4gU28g
bXVjaCBzbyB0aGF0IHdlIG1pZ2h0IHdhbnQgdG8gdGFrZSB0aGlzIG91dCBvZiBTdHJpbmcncyBB
UEkuCkluZGV4OiBTb3VyY2UvV1RGL3d0Zi90ZXh0L1dURlN0cmluZy5oCj09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0t
IFNvdXJjZS9XVEYvd3RmL3RleHQvV1RGU3RyaW5nLmgJKHJldmlzaW9uIDIxNjEwNykKKysrIFNv
dXJjZS9XVEYvd3RmL3RleHQvV1RGU3RyaW5nLmgJKHdvcmtpbmcgY29weSkKQEAgLTEsNiArMSw2
IEBACiAvKgogICogKEMpIDE5OTkgTGFycyBLbm9sbCAoa25vbGxAa2RlLm9yZykKLSAqIENvcHly
aWdodCAoQykgMjAwNC0yMDE2IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqIENv
cHlyaWdodCAoQykgMjAwNC0yMDE3IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KICAq
CiAgKiBUaGlzIGxpYnJhcnkgaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUg
aXQgYW5kL29yCiAgKiBtb2RpZnkgaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgTGlicmFy
eSBHZW5lcmFsIFB1YmxpYwpAQCAtMzYsNiArMzYsNyBAQAogbmFtZXNwYWNlIFdURiB7CiAKIGNs
YXNzIEFTQ0lJTGl0ZXJhbDsKK2NsYXNzIFN0YXRpY0FTQ0lJTGl0ZXJhbDsKIAogLy8gRGVjbGFy
YXRpb25zIG9mIHN0cmluZyBvcGVyYXRpb25zCiAKQEAgLTExNSw3ICsxMTYsMTAgQEAgcHVibGlj
OgogICAgIFN0cmluZyhSZWZQdHI8QXRvbWljU3RyaW5nSW1wbD4mJik7CiAKICAgICAvLyBDb25z
dHJ1Y3QgYSBzdHJpbmcgZnJvbSBhIGNvbnN0YW50IHN0cmluZyBsaXRlcmFsLgotICAgIFdURl9F
WFBPUlRfU1RSSU5HX0FQSSBTdHJpbmcoQVNDSUlMaXRlcmFsIGNoYXJhY3RlcnMpOworICAgIFdU
Rl9FWFBPUlRfU1RSSU5HX0FQSSBTdHJpbmcoQVNDSUlMaXRlcmFsKTsKKworICAgIC8vIENvbnN0
cnVjdCBhIHN0cmluZyB3aXRoIGEgU3RhdGljU3RyaW5nSW1wbCBmcm9tIGEgY29uc3RhbnQgc3Ry
aW5nIGxpdGVyYWwuCisgICAgV1RGX0VYUE9SVF9TVFJJTkdfQVBJIFN0cmluZyhTdGF0aWNBU0NJ
SUxpdGVyYWwpOwogCiAgICAgLy8gQ29uc3RydWN0IGEgc3RyaW5nIGZyb20gYSBjb25zdGFudCBz
dHJpbmcgbGl0ZXJhbC4KICAgICAvLyBUaGlzIGNvbnN0cnVjdG9yIGlzIHRoZSAiYmlnIiB2ZXJz
aW9uLCBhcyBpdCBwdXQgdGhlIGxlbmd0aCBpbiB0aGUgZnVuY3Rpb24gY2FsbCBhbmQgZ2VuZXJh
dGUgYmlnZ2VyIGNvZGUuCkBAIC02OTIsNiArNjk2LDE2IEBAIHByaXZhdGU6CiAgICAgY29uc3Qg
Y2hhciogbV9jaGFyYWN0ZXJzOwogfTsKIAorY2xhc3MgU3RhdGljQVNDSUlMaXRlcmFsIHsKK3B1
YmxpYzoKKyAgICB0ZW1wbGF0ZTx1bnNpZ25lZCBjaGFyYWN0ZXJzQ291bnQ+CisgICAgZXhwbGlj
aXQgU3RhdGljQVNDSUlMaXRlcmFsKGNvbnN0IGNoYXIgKCZjaGFyYWN0ZXJzKVtjaGFyYWN0ZXJz
Q291bnRdKQorICAgICAgICA6IHN0cmluZ0ltcGwobWFrZVN0YXRpY1N0cmluZ0ltcGwoY2hhcmFj
dGVycykpCisgICAgeyB9CisKKyAgICBTdHJpbmdJbXBsJiBzdHJpbmdJbXBsOworfTsKKwogLy8g
U2hhcmVkIGdsb2JhbCBlbXB0eSBzdHJpbmcuCiBXVEZfRVhQT1JUX1NUUklOR19BUEkgY29uc3Qg
U3RyaW5nJiBlbXB0eVN0cmluZygpOwogCkBAIC03MjgsNyArNzQyLDcgQEAgdGVtcGxhdGU8PiBz
dHJ1Y3QgSW50ZWdlclRvU3RyaW5nQ29udmVycwogICAgIHN0YXRpYyBTdHJpbmcgZmx1c2goTENo
YXIqIGNoYXJhY3RlcnMsIHVuc2lnbmVkIGxlbmd0aCwgdm9pZCopIHsgcmV0dXJuIHsgY2hhcmFj
dGVycywgbGVuZ3RoIH07IH0KIH07CiAKLX0KK30gLy8gbmFtZXNwYWNlIFdURgogCiB1c2luZyBX
VEY6OkNTdHJpbmc7CiB1c2luZyBXVEY6OktlZXBUcmFpbGluZ1plcm9zOwpAQCAtNzU0LDYgKzc2
OCw3IEBAIHVzaW5nIFdURjo6aXNBbGxTcGVjaWFsQ2hhcmFjdGVyczsKIHVzaW5nIFdURjo6aXNT
cGFjZU9yTmV3bGluZTsKIHVzaW5nIFdURjo6cmV2ZXJzZUZpbmQ7CiB1c2luZyBXVEY6OkFTQ0lJ
TGl0ZXJhbDsKK3VzaW5nIFdURjo6U3RhdGljQVNDSUlMaXRlcmFsOwogCiAjaW5jbHVkZSA8d3Rm
L3RleHQvQXRvbWljU3RyaW5nLmg+CiAKSW5kZXg6IFNvdXJjZS9XVEYvd3RmL3RleHQvaWN1L1Rl
eHRCcmVha0l0ZXJhdG9ySUNVLmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dURi93dGYvdGV4dC9p
Y3UvVGV4dEJyZWFrSXRlcmF0b3JJQ1UuaAkocmV2aXNpb24gMjE2MTA3KQorKysgU291cmNlL1dU
Ri93dGYvdGV4dC9pY3UvVGV4dEJyZWFrSXRlcmF0b3JJQ1UuaAkod29ya2luZyBjb3B5KQpAQCAt
MzEsNyArMzEsNyBAQCBuYW1lc3BhY2UgV1RGIHsKICNpZiBVU0VfSUNVX0NBUkVUX0lURVJBVE9S
CiBzdGF0aWMgU3RyaW5nIGNhcmV0UnVsZXMoKQogewotICAgIHJldHVybiBBU0NJSUxpdGVyYWwo
CisgICAgcmV0dXJuIFN0YXRpY0FTQ0lJTGl0ZXJhbCgKICAgICAgICAgLy8gVGhpcyBydWxlIHNl
dCBpcyBiYXNlZCBvbiBjaGFyYWN0ZXItYnJlYWsgaXRlcmF0b3IgcnVsZXMgb2YgSUNVIDU3CiAg
ICAgICAgIC8vIDxodHRwOi8vc291cmNlLmljdS1wcm9qZWN0Lm9yZy9yZXBvcy9pY3UvaWN1L3Rh
Z3MvcmVsZWFzZS01Ny0xL3NvdXJjZS9kYXRhL2Jya2l0ci8+LgogICAgICAgICAvLyBUaGUgbWFq
b3IgZGlmZmVyZW5jZXMgZnJvbSB0aGUgb3JpZ2luYWwgb25lcyBhcmUgbGlzdGVkIGJlbG93Ogo=
</data>
<flag name="review"
          id="330049"
          type_id="1"
          status="-"
          setter="fpizlo"
    />
          </attachment>
          <attachment
              isobsolete="0"
              ispatch="1"
              isprivate="0"
          >
            <attachid>309103</attachid>
            <date>2017-05-04 14:20:20 -0700</date>
            <delta_ts>2017-05-04 14:41:28 -0700</delta_ts>
            <desc>proposed patch.</desc>
            <filename>bug-171586.patch</filename>
            <type>text/plain</type>
            <size>137925</size>
            <attacher name="Mark Lam">mark.lam</attacher>
            
              <data encoding="base64">SW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9DaGFuZ2VMb2cKPT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291
cmNlL0phdmFTY3JpcHRDb3JlL0NoYW5nZUxvZwkocmV2aXNpb24gMjE2MjA1KQorKysgU291cmNl
L0phdmFTY3JpcHRDb3JlL0NoYW5nZUxvZwkod29ya2luZyBjb3B5KQpAQCAtMSwzICsxLDc5IEBA
CisyMDE3LTA1LTA0ICBNYXJrIExhbSAgPG1hcmsubGFtQGFwcGxlLmNvbT4KKworICAgICAgICBO
ZXZlckRlc3Ryb3llZDxTdHJpbmc+KEFTQ0lJTGl0ZXJhbCguLi4pKSBpcyBub3QgdGhyZWFkIHNh
ZmUuCisgICAgICAgIGh0dHBzOi8vYnVncy53ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9pZD0xNzE1
ODYKKyAgICAgICAgPHJkYXI6Ly9wcm9ibGVtLzMxODczMTkwPgorCisgICAgICAgIFJldmlld2Vk
IGJ5IE5PQk9EWSAoT09QUyEpLgorCisgICAgICAgIEphdmFTY3JpcHRDb3JlIGFsbG93cyBtdWx0
aXBsZSBWTXMgdG8gYmUgaW5zdGFudGlhdGVkLCBhbmQgZWFjaCBvZiB0aGVzZSBzaG91bGQKKyAg
ICAgICAgYmUgYWJsZSB0byBydW4gY29uY3VycmVudGx5IG9uIGRpZmZlcmVudCB0aHJlYWRzLiAg
VGhlcmUgaXMgY29kZSBpbiB0aGUgVk0gdGhhdAorICAgICAgICBhbGxvY2F0ZXMgTmV2ZXJEZXN0
cm95ZWQ8U3RyaW5nPihBU0NJSUxpdGVyYWwoLi4uKSkgdG8gZGVmaW5lZCBpbW1vcnRhbCBzdHJp
bmdzCisgICAgICAgIG1lYW50IHRvIGJlIHNoYXJlZCBieSBhbGwgVk1zLgorCisgICAgICAgIEhv
d2V2ZXIsIE5ldmVyRGVzdHJveWVkPFN0cmluZz4oQVNDSUlMaXRlcmFsKC4uLikpIGlzIG5vdCB0
aHJlYWQtc2FmZSBiZWNhdXNlCisgICAgICAgIGVhY2ggdGhyZWFkIHdpbGwgcmVmIGFuZCBkZXJl
ZiB0aGUgdW5kZXJseWluZyBTdHJpbmdJbXBsLiAgU2luY2UgdGhpcyByZWYgYW5kCisgICAgICAg
IGRlcmVmIGlzIG5vdCBkb25lIGluIGEgdGhyZWFkLXNhZmUgd2F5LCB0aGUgTmV2ZXJEZXN0cm95
ZWQ8U3RyaW5nPiBtYXkgZ2V0CisgICAgICAgIGRlc3Ryb3llZCBkdWUgdG8gdGhlIHJlZi9kZXJl
ZiByYWNlcy4gIEFkZGl0aW9uYWxseSwgZWFjaCB0aHJlYWQgbWF5IG1vZGlmeSB0aGUKKyAgICAg
ICAgU3RyaW5nSW1wbCBieSBzZXR0aW5nIGl0cyBoYXNoIGFuZCBhbHNvIHR3aWRkbGluZyBpdHMg
ZmxhZ3MuCisKKyAgICAgICAgVGhlIGZpeCBpcyB0byB1c2UgdGhlIFN0YXRpY1N0cmluZ0ltcGwg
Y2xhc3Mgd2hpY2ggaXMgc2FmZSBmb3IgcmVmL2RlcmVmaW5nCisgICAgICAgIGNvbmN1cnJlbnRs
eSBmcm9tIGRpZmZlcmVudCB0aHJlYWRzLiAgU3RhdGljU3RyaW5nSW1wbCBpcyBhbHNvIHByZS1z
ZXQgd2l0aCBhCisgICAgICAgIGhhc2ggb24gY29uc3RydWN0aW9uLCBhbmQgaXRzIGZsYWdzIGFy
ZSBzZXQgaW4gc3VjaCBhIHdheSBhcyB0byBwcmV2ZW50IHR3aWRkbGluZworICAgICAgICBhdCBy
dW50aW1lLiAgSGVuY2UsIHdlIHdpbGwgYmUgYWJsZSB0byBzaGFyZSBhIE5ldmVyRGVzdHJveWVk
PFN0cmluZz4gYmV0d2VlbgorICAgICAgICBWTXMsIGFzIGxvbmcgYXMgaXQgaXMgYmFja2VkIGJ5
IGEgU3RhdGljU3RyaW5nSW1wbC4KKworICAgICAgICBBbiBhbHRlcm5hdGl2ZSBzb2x1dGlvbiB3
b3VsZCBiZSB0byBjaGFuZ2UgYWxsIHRoZSB1c2VzIG9mIE5ldmVyRGVzdHJveWVkPFN0cmluZz4K
KyAgICAgICAgdG8gdXNlIHBlci1WTSBzdHJpbmdzLiAgSG93ZXZlciwgdGhpcyBzb2x1dGlvbiBp
cyBjdW1iZXJzb21lLCBhbmQgbWFrZXMgaXQgaGFyZGVyCisgICAgICAgIHRvIGFsbG9jYXRlIHRo
ZSBpbnRlbmRlZCBzaGFyZWQgc3RyaW5nLiAgSXQgYWxzbyB1c2VzIG1vcmUgbWVtb3J5IGFuZCB0
YWtlcyBtb3JlCisgICAgICAgIENQVSB0aW1lIGJlY2F1c2UgaXQgcmVxdWlyZXMgYWxsb2NhdGlu
ZyB0aGUgc2FtZSBzdHJpbmcgZm9yIGVhY2ggVk0gaW5zdGFuY2UuCisgICAgICAgIFRoZSBTdGF0
aWNTdHJpbmdJbXBsIHNvbHV0aW9uIHdpbnMgb3V0IGJlY2F1c2UgaXQgaXMgbW9yZSBlZmZpY2ll
bnQgYW5kIGlzIGVhc2llcgorICAgICAgICB0byB1c2UuCisKKyAgICAgICAgVGhlIFN0YXRpY1N0
cmluZ0ltcGwgc29sdXRpb24gYWxzbyBjYW4gYmUgdXNlZCBpbiBXVEYgd2l0aG91dCBhIGxheWVy
IHZpb2xhdGlvbi4KKyAgICAgICAgU2VlIFNvdXJjZS9XVEYvd3RmL3RleHQvaWN1L1RleHRCcmVh
a0l0ZXJhdG9ySUNVLmggZm9yIGFuIGV4YW1wbGUuCisKKyAgICAgICAgQWxzbyBhZGRlZCB0aGUg
TXVsdGl0aHJlYWRlZE11bHRpVk1FeGVjdXRpb25UZXN0IHdoaWNoIHJ1bnMgbXVsdGlwbGUgVk1z
IGluCisgICAgICAgIG11bHRpcGxlIHRocmVhZHMsIGFsbCBiYW5naW5nIG9uIHRoZSBCdWlsdGlu
RXhlY3V0YWJsZSdzIGJhc2VDb25zdHJ1Y3RvckNvZGUKKyAgICAgICAgTmV2ZXJEZXN0cm95ZWQ8
U3RyaW5nPi4gIFRoZSB0ZXN0IHdpbGwgbWFuaWZlc3QgdGhlIGlzc3VlIHJlbGlhYmx5IChiZWZv
cmUgdGhpcworICAgICAgICBmaXgpIGlmIHJ1biBvbiBhbiBBU0FOIGJ1aWxkLgorCisgICAgICAg
ICogQVBJL3Rlc3RzL011bHRpdGhyZWFkZWRNdWx0aVZNRXhlY3V0aW9uVGVzdC5jcHA6IEFkZGVk
LgorICAgICAgICAodGhyZWFkc0xpc3QpOgorICAgICAgICAoc3RhcnRNdWx0aXRocmVhZGVkTXVs
dGlWTUV4ZWN1dGlvblRlc3QpOgorICAgICAgICAoZmluYWxpemVNdWx0aXRocmVhZGVkTXVsdGlW
TUV4ZWN1dGlvblRlc3QpOgorICAgICAgICAqIEFQSS90ZXN0cy9NdWx0aXRocmVhZGVkTXVsdGlW
TUV4ZWN1dGlvblRlc3QuaDogQWRkZWQuCisgICAgICAgICogQVBJL3Rlc3RzL3Rlc3RhcGkuYzoK
KyAgICAgICAgKG1haW4pOgorICAgICAgICAqIEphdmFTY3JpcHRDb3JlLnhjb2RlcHJvai9wcm9q
ZWN0LnBieHByb2o6CisgICAgICAgICogYnVpbHRpbnMvQnVpbHRpbkV4ZWN1dGFibGVzLmNwcDoK
KyAgICAgICAgKEpTQzo6QnVpbHRpbkV4ZWN1dGFibGVzOjpjcmVhdGVEZWZhdWx0Q29uc3RydWN0
b3IpOgorICAgICAgICAqIGluc3BlY3Rvci9hZ2VudHMvSW5zcGVjdG9yRGVidWdnZXJBZ2VudC5j
cHA6CisgICAgICAgIChJbnNwZWN0b3I6Om9iamVjdEdyb3VwRm9yQnJlYWtwb2ludEFjdGlvbik6
CisgICAgICAgICogcmVwbGF5L3NjcmlwdHMvQ29kZUdlbmVyYXRvclJlcGxheUlucHV0c1RlbXBs
YXRlcy5weToKKyAgICAgICAgKiByZXBsYXkvc2NyaXB0cy90ZXN0cy9leHBlY3RlZC9nZW5lcmF0
ZS1lbnVtLWVuY29kaW5nLWhlbHBlcnMtd2l0aC1ndWFyZGVkLXZhbHVlcy5qc29uLVRlc3RSZXBs
YXlJbnB1dHMuY3BwOgorICAgICAgICAoSlNDOjpJbnB1dFRyYWl0czxUZXN0OjpTYXZlZE1vdXNl
QnV0dG9uPjo6dHlwZSk6CisgICAgICAgICogcmVwbGF5L3NjcmlwdHMvdGVzdHMvZXhwZWN0ZWQv
Z2VuZXJhdGUtZW51bS1lbmNvZGluZy1oZWxwZXJzLmpzb24tVGVzdFJlcGxheUlucHV0cy5jcHA6
CisgICAgICAgIChKU0M6OklucHV0VHJhaXRzPFRlc3Q6OlNhdmVkTW91c2VCdXR0b24+Ojp0eXBl
KToKKyAgICAgICAgKiByZXBsYXkvc2NyaXB0cy90ZXN0cy9leHBlY3RlZC9nZW5lcmF0ZS1lbnVt
LXdpdGgtZ3VhcmQuanNvbi1UZXN0UmVwbGF5SW5wdXRzLmNwcDoKKyAgICAgICAgKEpTQzo6SW5w
dXRUcmFpdHM8VGVzdDo6SGFuZGxlV2hlZWxFdmVudD46OnR5cGUpOgorICAgICAgICAqIHJlcGxh
eS9zY3JpcHRzL3Rlc3RzL2V4cGVjdGVkL2dlbmVyYXRlLWVudW1zLXdpdGgtc2FtZS1iYXNlLW5h
bWUuanNvbi1UZXN0UmVwbGF5SW5wdXRzLmNwcDoKKyAgICAgICAgKEpTQzo6SW5wdXRUcmFpdHM8
VGVzdDo6Rm9ybUNvbWJvPjo6dHlwZSk6CisgICAgICAgICogcmVwbGF5L3NjcmlwdHMvdGVzdHMv
ZXhwZWN0ZWQvZ2VuZXJhdGUtaW5wdXQtd2l0aC1ndWFyZC5qc29uLVRlc3RSZXBsYXlJbnB1dHMu
Y3BwOgorICAgICAgICAoSlNDOjpJbnB1dFRyYWl0czxUZXN0OjpHZXRDdXJyZW50VGltZT46OnR5
cGUpOgorICAgICAgICAoSlNDOjpJbnB1dFRyYWl0czxUZXN0OjpTZXRSYW5kb21TZWVkPjo6dHlw
ZSk6CisgICAgICAgICogcmVwbGF5L3NjcmlwdHMvdGVzdHMvZXhwZWN0ZWQvZ2VuZXJhdGUtaW5w
dXQtd2l0aC12ZWN0b3ItbWVtYmVycy5qc29uLVRlc3RSZXBsYXlJbnB1dHMuY3BwOgorICAgICAg
ICAoSlNDOjpJbnB1dFRyYWl0czxUZXN0OjpBcnJheU9mVGhpbmdzPjo6dHlwZSk6CisgICAgICAg
IChKU0M6OklucHV0VHJhaXRzPFRlc3Q6OlNhdmVkSGlzdG9yeT46OnR5cGUpOgorICAgICAgICAq
IHJlcGxheS9zY3JpcHRzL3Rlc3RzL2V4cGVjdGVkL2dlbmVyYXRlLWlucHV0cy13aXRoLWZsYWdz
Lmpzb24tVGVzdFJlcGxheUlucHV0cy5jcHA6CisgICAgICAgIChKU0M6OklucHV0VHJhaXRzPFRl
c3Q6OlNjYWxhcklucHV0MT46OnR5cGUpOgorICAgICAgICAoSlNDOjpJbnB1dFRyYWl0czxUZXN0
OjpTY2FsYXJJbnB1dDI+Ojp0eXBlKToKKyAgICAgICAgKiByZXBsYXkvc2NyaXB0cy90ZXN0cy9l
eHBlY3RlZC9nZW5lcmF0ZS1tZW1vaXplZC10eXBlLW1vZGVzLmpzb24tVGVzdFJlcGxheUlucHV0
cy5jcHA6CisgICAgICAgIChKU0M6OklucHV0VHJhaXRzPFRlc3Q6OlNjYWxhcklucHV0Pjo6dHlw
ZSk6CisgICAgICAgIChKU0M6OklucHV0VHJhaXRzPFRlc3Q6Ok1hcElucHV0Pjo6dHlwZSk6Cisg
ICAgICAgICogcnVudGltZS9JbnRsT2JqZWN0LmNwcDoKKyAgICAgICAgKEpTQzo6bnVtYmVyaW5n
U3lzdGVtc0ZvckxvY2FsZSk6CisKIDIwMTctMDUtMDQgIEtvbnN0YW50aW4gVG9rYXJldiAgPGFu
bnVsZW5AeWFuZGV4LnJ1PgogCiAgICAgICAgIEZpeCBjb21waWxhdGlvbiB3aXRoIElDVSA1OS4x
CkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvQVBJL3Rlc3RzL011bHRpdGhyZWFkZWRNdWx0
aVZNRXhlY3V0aW9uVGVzdC5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3Jl
L0FQSS90ZXN0cy9NdWx0aXRocmVhZGVkTXVsdGlWTUV4ZWN1dGlvblRlc3QuY3BwCShub25leGlz
dGVudCkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9BUEkvdGVzdHMvTXVsdGl0aHJlYWRlZE11
bHRpVk1FeGVjdXRpb25UZXN0LmNwcAkod29ya2luZyBjb3B5KQpAQCAtMCwwICsxLDEwNSBAQAor
LyoKKyAqIENvcHlyaWdodCAoQykgMjAxNyBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQu
CisgKgorICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jt
cywgd2l0aCBvciB3aXRob3V0CisgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlk
ZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKKyAqIGFyZSBtZXQ6CisgKiAxLiBSZWRp
c3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdo
dAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2lu
ZyBkaXNjbGFpbWVyLgorICogMi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3Qg
cmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9m
IGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKKyAqICAgIGRv
Y3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0
cmlidXRpb24uCisgKgorICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBBUFBMRSBJTkMu
IEFORCBJVFMgQ09OVFJJQlVUT1JTIGBgQVMgSVMnJworICogQU5EIEFOWSBFWFBSRVNTIE9SIElN
UExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sCisgKiBUSEUg
SU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQ
QVJUSUNVTEFSCisgKiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiBJTiBOTyBFVkVOVCBTSEFMTCBB
UFBMRSBJTkMuIE9SIElUUyBDT05UUklCVVRPUlMKKyAqIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVD
VCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IKKyAqIENPTlNF
UVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFBST0NVUkVN
RU5UIE9GCisgKiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFU
QSwgT1IgUFJPRklUUzsgT1IgQlVTSU5FU1MKKyAqIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVT
RUQgQU5EIE9OIEFOWSBUSEVPUlkgT0YgTElBQklMSVRZLCBXSEVUSEVSIElOCisgKiBDT05UUkFD
VCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVCAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RI
RVJXSVNFKQorICogQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFIE9GIFRISVMgU09G
VFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRgorICogVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFN
QUdFLgorICovCisKKyNpbmNsdWRlICJjb25maWcuaCIKKyNpbmNsdWRlICJNdWx0aXRocmVhZGVk
TXVsdGlWTUV4ZWN1dGlvblRlc3QuaCIKKworI2luY2x1ZGUgIkluaXRpYWxpemVUaHJlYWRpbmcu
aCIKKyNpbmNsdWRlICJKU0NvbnRleHRSZWZQcml2YXRlLmgiCisjaW5jbHVkZSAiSmF2YVNjcmlw
dENvcmUuaCIKKyNpbmNsdWRlICJPcHRpb25zLmgiCisjaW5jbHVkZSA8bXV0ZXg+CisjaW5jbHVk
ZSA8c3RyaW5nPgorI2luY2x1ZGUgPHRocmVhZD4KKyNpbmNsdWRlIDx2ZWN0b3I+CisjaW5jbHVk
ZSA8d3RmL01haW5UaHJlYWQuaD4KKworc3RhdGljIGludCBmYWlsdXJlc0ZvdW5kID0gMDsKKwor
c3RhdGljIHN0ZDo6dmVjdG9yPHN0ZDo6dGhyZWFkPiYgdGhyZWFkc0xpc3QoKQoreworICAgIHN0
YXRpYyBzdGQ6OnZlY3RvcjxzdGQ6OnRocmVhZD4qIGxpc3Q7CisgICAgc3RhdGljIHN0ZDo6b25j
ZV9mbGFnIGZsYWc7CisgICAgc3RkOjpjYWxsX29uY2UoZmxhZywgW10gKCkgeworICAgICAgICBs
aXN0ID0gbmV3IHN0ZDo6dmVjdG9yPHN0ZDo6dGhyZWFkPigpOworICAgIH0pOworICAgIHJldHVy
biAqbGlzdDsKK30KKwordm9pZCBzdGFydE11bHRpdGhyZWFkZWRNdWx0aVZNRXhlY3V0aW9uVGVz
dCgpCit7CisgICAgV1RGOjppbml0aWFsaXplTWFpblRocmVhZCgpOworICAgIEpTQzo6aW5pdGlh
bGl6ZVRocmVhZGluZygpOworCisjZGVmaW5lIENIRUNLKGNvbmRpdGlvbiwgbWVzc2FnZSkgZG8g
eyBcCisgICAgICAgIGlmICghY29uZGl0aW9uKSB7IFwKKyAgICAgICAgICAgIHByaW50ZigiRkFJ
TEVEIE11bHRpdGhyZWFkZWRNdWx0aVZNRXhlY3V0aW9uVGVzdDogJXNcbiIsIG1lc3NhZ2UpOyBc
CisgICAgICAgICAgICBmYWlsdXJlc0ZvdW5kKys7IFwKKyAgICAgICAgfSBcCisgICAgfSB3aGls
ZSAoZmFsc2UpCisKKyAgICBhdXRvIHRhc2sgPSBbJl0oKSB7CisgICAgICAgIGludCByZXQgPSAw
OworICAgICAgICBzdGQ6OnN0cmluZyBzY3JpcHRTdHJpbmcgPQorICAgICAgICAgICAgImNvbnN0
IEFBQSA9IHtBOjAsIEI6MSwgQzoyLCBEOjN9OyIKKyAgICAgICAgICAgICJjbGFzcyBQcmVjb25k
aXRpb25zIHsgc3RhdGljIGNoZWNrQXJndW1lbnQoZSx0KSB7IGlmICghZSkgdGhyb3cgdCB9fTsi
CisgICAgICAgICAgICAiMSArIDIiOworCisgICAgICAgIGZvciAoaW50IGkgPSAwOyBpIDwgMTAw
MDsgKytpKSB7CisgICAgICAgICAgICBKU0NsYXNzUmVmIGpzQ2xhc3MgPSBKU0NsYXNzQ3JlYXRl
KCZrSlNDbGFzc0RlZmluaXRpb25FbXB0eSk7CisgICAgICAgICAgICBDSEVDSyhqc0NsYXNzLCAi
Z2xvYmFsIG9iamVjdCBjbGFzcyBjcmVhdGlvbiIpOworICAgICAgICAgICAgSlNDb250ZXh0R3Jv
dXBSZWYgY29udGV4dEdyb3VwID0gSlNDb250ZXh0R3JvdXBDcmVhdGUoKTsKKyAgICAgICAgICAg
IENIRUNLKGNvbnRleHRHcm91cCwgImdyb3VwIGNyZWF0aW9uIik7CisgICAgICAgICAgICBKU0ds
b2JhbENvbnRleHRSZWYgY29udGV4dCA9IEpTR2xvYmFsQ29udGV4dENyZWF0ZUluR3JvdXAoY29u
dGV4dEdyb3VwLCBqc0NsYXNzKTsKKyAgICAgICAgICAgIENIRUNLKGNvbnRleHQsICJjdHggY3Jl
YXRpb24iKTsKKworICAgICAgICAgICAgSlNTdHJpbmdSZWYganNTY3JpcHRTdHJpbmcgPSBKU1N0
cmluZ0NyZWF0ZVdpdGhVVEY4Q1N0cmluZyhzY3JpcHRTdHJpbmcuY19zdHIoKSk7CisgICAgICAg
ICAgICBDSEVDSyhqc1NjcmlwdFN0cmluZywgInNjcmlwdCB0byBqc1N0cmluZyIpOworCisgICAg
ICAgICAgICBKU1ZhbHVlUmVmIGpzU2NyaXB0ID0gSlNFdmFsdWF0ZVNjcmlwdChjb250ZXh0LCBq
c1NjcmlwdFN0cmluZywgbnVsbHB0ciwgbnVsbHB0ciwgMCwgbnVsbHB0cik7CisgICAgICAgICAg
ICBDSEVDSyhqc1NjcmlwdCwgInNjcmlwdCBldmFsIik7CisgICAgICAgICAgICBKU1N0cmluZ1Jl
bGVhc2UoanNTY3JpcHRTdHJpbmcpOworCisgICAgICAgICAgICBKU0dsb2JhbENvbnRleHRSZWxl
YXNlKGNvbnRleHQpOworICAgICAgICAgICAgSlNDb250ZXh0R3JvdXBSZWxlYXNlKGNvbnRleHRH
cm91cCk7CisgICAgICAgICAgICBKU0NsYXNzUmVsZWFzZShqc0NsYXNzKTsKKyAgICAgICAgfQor
CisgICAgICAgIHJldHVybiByZXQ7CisgICAgfTsKKyAgICBmb3IgKGludCB0ID0gMDsgdCA8IDg7
ICsrdCkKKyAgICAgICAgdGhyZWFkc0xpc3QoKS5wdXNoX2JhY2soc3RkOjp0aHJlYWQodGFzaykp
OworfQorCitpbnQgZmluYWxpemVNdWx0aXRocmVhZGVkTXVsdGlWTUV4ZWN1dGlvblRlc3QoKQor
eworICAgIGF1dG8mIHRocmVhZHMgPSB0aHJlYWRzTGlzdCgpOworICAgIGZvciAoYXV0byYgdGhy
ZWFkIDogdGhyZWFkcykKKyAgICAgICAgdGhyZWFkLmpvaW4oKTsKKworICAgIGlmIChmYWlsdXJl
c0ZvdW5kKQorICAgICAgICBwcmludGYoIkZBSUxFRCBNdWx0aXRocmVhZGVkTXVsdGlWTUV4ZWN1
dGlvblRlc3RcbiIpOworICAgIHJldHVybiAoZmFpbHVyZXNGb3VuZCA+IDApOworfQpJbmRleDog
U291cmNlL0phdmFTY3JpcHRDb3JlL0FQSS90ZXN0cy9NdWx0aXRocmVhZGVkTXVsdGlWTUV4ZWN1
dGlvblRlc3QuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvQVBJL3Rlc3Rz
L011bHRpdGhyZWFkZWRNdWx0aVZNRXhlY3V0aW9uVGVzdC5oCShub25leGlzdGVudCkKKysrIFNv
dXJjZS9KYXZhU2NyaXB0Q29yZS9BUEkvdGVzdHMvTXVsdGl0aHJlYWRlZE11bHRpVk1FeGVjdXRp
b25UZXN0LmgJKHdvcmtpbmcgY29weSkKQEAgLTAsMCArMSwzOSBAQAorLyoKKyAqIENvcHlyaWdo
dCAoQykgMjAxNyBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKgorICogUmVkaXN0
cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRo
b3V0CisgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9s
bG93aW5nIGNvbmRpdGlvbnMKKyAqIGFyZSBtZXQ6CisgKiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Yg
c291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNl
LCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgor
ICogMi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBh
Ym92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5k
IHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKKyAqICAgIGRvY3VtZW50YXRpb24gYW5k
L29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCisgKgor
ICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBBUFBMRSBJTkMuIEFORCBJVFMgQ09OVFJJ
QlVUT1JTIGBgQVMgSVMnJworICogQU5EIEFOWSBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElF
UywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sCisgKiBUSEUgSU1QTElFRCBXQVJSQU5U
SUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSCisgKiBQ
VVJQT1NFIEFSRSBESVNDTEFJTUVELiBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBJTkMuIE9SIElU
UyBDT05UUklCVVRPUlMKKyAqIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElO
Q0lERU5UQUwsIFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IKKyAqIENPTlNFUVVFTlRJQUwgREFNQUdF
UyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFBST0NVUkVNRU5UIE9GCisgKiBTVUJT
VElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IgUFJPRklUUzsg
T1IgQlVTSU5FU1MKKyAqIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBU
SEVPUlkgT0YgTElBQklMSVRZLCBXSEVUSEVSIElOCisgKiBDT05UUkFDVCwgU1RSSUNUIExJQUJJ
TElUWSwgT1IgVE9SVCAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKQorICogQVJJ
U0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYg
QURWSVNFRCBPRgorICogVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgorICovCisKKyNw
cmFnbWEgb25jZQorCisjaWZkZWYgX19jcGx1c3BsdXMKK2V4dGVybiAiQyIgeworI2VuZGlmCisK
K2V4dGVybiB2b2lkIHN0YXJ0TXVsdGl0aHJlYWRlZE11bHRpVk1FeGVjdXRpb25UZXN0KCk7CisK
Ky8qIFJldHVybnMgMSBpZiBmYWlsdXJlcyB3ZXJlIGVuY291bnRlcmVkLiAgRWxzZSwgcmV0dXJu
cyAwLiAqLworZXh0ZXJuIGludCBmaW5hbGl6ZU11bHRpdGhyZWFkZWRNdWx0aVZNRXhlY3V0aW9u
VGVzdCgpOworCisjaWZkZWYgX19jcGx1c3BsdXMKK30gLyogZXh0ZXJuICJDIiAqLworI2VuZGlm
CkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvQVBJL3Rlc3RzL3Rlc3RhcGkuYwo9PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvQVBJL3Rlc3RzL3Rlc3RhcGkuYwkocmV2aXNp
b24gMjE2MjA1KQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL0FQSS90ZXN0cy90ZXN0YXBpLmMJ
KHdvcmtpbmcgY29weSkKQEAgLTQ3LDYgKzQ3LDcgQEAKICNpbmNsdWRlICJGdW5jdGlvbk92ZXJy
aWRlc1Rlc3QuaCIKICNpbmNsdWRlICJHbG9iYWxDb250ZXh0V2l0aEZpbmFsaXplclRlc3QuaCIK
ICNpbmNsdWRlICJKU09OUGFyc2VUZXN0LmgiCisjaW5jbHVkZSAiTXVsdGl0aHJlYWRlZE11bHRp
Vk1FeGVjdXRpb25UZXN0LmgiCiAjaW5jbHVkZSAiUGluZ1BvbmdTdGFja092ZXJmbG93VGVzdC5o
IgogI2luY2x1ZGUgIlR5cGVkQXJyYXlDVGVzdC5oIgogCkBAIC0xMTkwLDYgKzExOTEsNyBAQCBp
bnQgbWFpbihpbnQgYXJnYywgY2hhciogYXJndltdKQogI2VuZGlmCiAKICAgICB0ZXN0Q29tcGFy
ZUFuZFN3YXAoKTsKKyAgICBzdGFydE11bHRpdGhyZWFkZWRNdWx0aVZNRXhlY3V0aW9uVGVzdCgp
OwogCiAjaWYgSlNDX09CSkNfQVBJX0VOQUJMRUQKICAgICB0ZXN0T2JqZWN0aXZlQ0FQSSgpOwpA
QCAtMjAwOCw2ICsyMDEwLDggQEAgaW50IG1haW4oaW50IGFyZ2MsIGNoYXIqIGFyZ3ZbXSkKICAg
ICBnbG9iYWxPYmplY3RTZXRQcm90b3R5cGVUZXN0KCk7CiAgICAgZ2xvYmFsT2JqZWN0UHJpdmF0
ZVByb3BlcnR5VGVzdCgpOwogCisgICAgZmFpbGVkID0gZmluYWxpemVNdWx0aXRocmVhZGVkTXVs
dGlWTUV4ZWN1dGlvblRlc3QoKSB8fCBmYWlsZWQ7CisKICAgICBpZiAoZmFpbGVkKSB7CiAgICAg
ICAgIHByaW50ZigiRkFJTDogU29tZSB0ZXN0cyBmYWlsZWQuXG4iKTsKICAgICAgICAgcmV0dXJu
IDE7CkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvSmF2YVNjcmlwdENvcmUueGNvZGVwcm9q
L3Byb2plY3QucGJ4cHJvago9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvSmF2
YVNjcmlwdENvcmUueGNvZGVwcm9qL3Byb2plY3QucGJ4cHJvagkocmV2aXNpb24gMjE2MjA1KQor
KysgU291cmNlL0phdmFTY3JpcHRDb3JlL0phdmFTY3JpcHRDb3JlLnhjb2RlcHJvai9wcm9qZWN0
LnBieHByb2oJKHdvcmtpbmcgY29weSkKQEAgLTI0OTIsNiArMjQ5Miw3IEBACiAJCUZFRDk0RjJF
MTcxRTNFMjMwMEJFNzdBNCAvKiBXYXRjaGRvZy5jcHAgaW4gU291cmNlcyAqLyA9IHtpc2EgPSBQ
QlhCdWlsZEZpbGU7IGZpbGVSZWYgPSBGRUQ5NEYyQjE3MUUzRTIzMDBCRTc3QTQgLyogV2F0Y2hk
b2cuY3BwICovOyB9OwogCQlGRUQ5NEYyRjE3MUUzRTIzMDBCRTc3QTQgLyogV2F0Y2hkb2cuaCBp
biBIZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IEZFRDk0RjJDMTcx
RTNFMjMwMEJFNzdBNCAvKiBXYXRjaGRvZy5oICovOyBzZXR0aW5ncyA9IHtBVFRSSUJVVEVTID0g
KFByaXZhdGUsICk7IH07IH07CiAJCUZFRjA0MDUxMUFBRTY2MkQwMEJEMjhCMCAvKiBDb21wYXJl
QW5kU3dhcFRlc3QuY3BwIGluIFNvdXJjZXMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxl
UmVmID0gRkVGMDQwNTAxQUFFNjYyRDAwQkQyOEIwIC8qIENvbXBhcmVBbmRTd2FwVGVzdC5jcHAg
Ki87IH07CisJCUZFRjQ5QUFCMUVCOTQ4NEIwMDY1M0JEQiAvKiBNdWx0aXRocmVhZGVkTXVsdGlW
TUV4ZWN1dGlvblRlc3QuY3BwIGluIFNvdXJjZXMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBm
aWxlUmVmID0gRkVGNDlBQTkxRUI5NDdGRTAwNjUzQkRCIC8qIE11bHRpdGhyZWFkZWRNdWx0aVZN
RXhlY3V0aW9uVGVzdC5jcHAgKi87IH07CiAJCUZFRkQ2RkM2MUQ1RTc5OTIwMDhGMkYwQiAvKiBK
U1N0cmluZ0lubGluZXMuaCBpbiBIZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmls
ZVJlZiA9IEZFRkQ2RkM1MUQ1RTc5NzAwMDhGMkYwQiAvKiBKU1N0cmluZ0lubGluZXMuaCAqLzsg
c2V0dGluZ3MgPSB7QVRUUklCVVRFUyA9IChQcml2YXRlLCApOyB9OyB9OwogLyogRW5kIFBCWEJ1
aWxkRmlsZSBzZWN0aW9uICovCiAKQEAgLTUxNDIsNiArNTE0Myw4IEBACiAJCUZFREE1MEQ1MUI5
N0Y0RDkwMDlBM0I0RiAvKiBQaW5nUG9uZ1N0YWNrT3ZlcmZsb3dUZXN0LmggKi8gPSB7aXNhID0g
UEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBz
b3VyY2Vjb2RlLmMuaDsgbmFtZSA9IFBpbmdQb25nU3RhY2tPdmVyZmxvd1Rlc3QuaDsgcGF0aCA9
IEFQSS90ZXN0cy9QaW5nUG9uZ1N0YWNrT3ZlcmZsb3dUZXN0Lmg7IHNvdXJjZVRyZWUgPSAiPGdy
b3VwPiI7IH07CiAJCUZFRjA0MDUwMUFBRTY2MkQwMEJEMjhCMCAvKiBDb21wYXJlQW5kU3dhcFRl
c3QuY3BwICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxh
c3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jcHAuY3BwOyBuYW1lID0gQ29tcGFyZUFuZFN3
YXBUZXN0LmNwcDsgcGF0aCA9IEFQSS90ZXN0cy9Db21wYXJlQW5kU3dhcFRlc3QuY3BwOyBzb3Vy
Y2VUcmVlID0gIjxncm91cD4iOyB9OwogCQlGRUYwNDA1MjFBQUVDNEVEMDBCRDI4QjAgLyogQ29t
cGFyZUFuZFN3YXBUZXN0LmggKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29k
aW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsgbmFtZSA9IENvbXBh
cmVBbmRTd2FwVGVzdC5oOyBwYXRoID0gQVBJL3Rlc3RzL0NvbXBhcmVBbmRTd2FwVGVzdC5oOyBz
b3VyY2VUcmVlID0gIjxncm91cD4iOyB9OworCQlGRUY0OUFBOTFFQjk0N0ZFMDA2NTNCREIgLyog
TXVsdGl0aHJlYWRlZE11bHRpVk1FeGVjdXRpb25UZXN0LmNwcCAqLyA9IHtpc2EgPSBQQlhGaWxl
UmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNv
ZGUuY3BwLmNwcDsgbmFtZSA9IE11bHRpdGhyZWFkZWRNdWx0aVZNRXhlY3V0aW9uVGVzdC5jcHA7
IHBhdGggPSBBUEkvdGVzdHMvTXVsdGl0aHJlYWRlZE11bHRpVk1FeGVjdXRpb25UZXN0LmNwcDsg
c291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKKwkJRkVGNDlBQUExRUI5NDdGRTAwNjUzQkRCIC8q
IE11bHRpdGhyZWFkZWRNdWx0aVZNRXhlY3V0aW9uVGVzdC5oICovID0ge2lzYSA9IFBCWEZpbGVS
ZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29k
ZS5jLmg7IG5hbWUgPSBNdWx0aXRocmVhZGVkTXVsdGlWTUV4ZWN1dGlvblRlc3QuaDsgcGF0aCA9
IEFQSS90ZXN0cy9NdWx0aXRocmVhZGVkTXVsdGlWTUV4ZWN1dGlvblRlc3QuaDsgc291cmNlVHJl
ZSA9ICI8Z3JvdXA+IjsgfTsKIAkJRkVGRDZGQzUxRDVFNzk3MDAwOEYyRjBCIC8qIEpTU3RyaW5n
SW5saW5lcy5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7
IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7IHBhdGggPSBKU1N0cmluZ0lubGlu
ZXMuaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKIC8qIEVuZCBQQlhGaWxlUmVmZXJlbmNl
IHNlY3Rpb24gKi8KIApAQCAtNTc3Niw2ICs1Nzc5LDggQEAKIAkJCQlDMjE4MUZDMTE4QTk0OEZC
MDAyNUEyMzUgLyogSlNFeHBvcnRUZXN0cy5tbSAqLywKIAkJCQk1QzRFOEU5NDFEQkVCREEyMDAz
NkYxRkMgLyogSlNPTlBhcnNlVGVzdC5jcHAgKi8sCiAJCQkJNUM0RThFOTUxREJFQkRBMjAwMzZG
MUZDIC8qIEpTT05QYXJzZVRlc3QuaCAqLywKKwkJCQlGRUY0OUFBOTFFQjk0N0ZFMDA2NTNCREIg
LyogTXVsdGl0aHJlYWRlZE11bHRpVk1FeGVjdXRpb25UZXN0LmNwcCAqLywKKwkJCQlGRUY0OUFB
QTFFQjk0N0ZFMDA2NTNCREIgLyogTXVsdGl0aHJlYWRlZE11bHRpVk1FeGVjdXRpb25UZXN0Lmgg
Ki8sCiAJCQkJMTQ0MDA1MTcwQTUzMUNCNTAwMDVGMDYxIC8qIG1pbmlkb20gKi8sCiAJCQkJRkVE
QTUwRDQxQjk3RjQ0MjAwOUEzQjRGIC8qIFBpbmdQb25nU3RhY2tPdmVyZmxvd1Rlc3QuY3BwICov
LAogCQkJCUZFREE1MEQ1MUI5N0Y0RDkwMDlBM0I0RiAvKiBQaW5nUG9uZ1N0YWNrT3ZlcmZsb3dU
ZXN0LmggKi8sCkBAIC0xMDAzNSw2ICsxMDA0MCw3IEBACiAJCQkJRkUwRDRBMDYxQUI4REQwQTAw
MkY1NEJGIC8qIEV4ZWN1dGlvblRpbWVMaW1pdFRlc3QuY3BwIGluIFNvdXJjZXMgKi8sCiAJCQkJ
RkVDQjhCMjcxRDI1QkI4NTAwNkYyNDYzIC8qIEZ1bmN0aW9uT3ZlcnJpZGVzVGVzdC5jcHAgaW4g
U291cmNlcyAqLywKIAkJCQlGRTBENEEwOTFBQkEyNDM3MDAyRjU0QkYgLyogR2xvYmFsQ29udGV4
dFdpdGhGaW5hbGl6ZXJUZXN0LmNwcCBpbiBTb3VyY2VzICovLAorCQkJCUZFRjQ5QUFCMUVCOTQ4
NEIwMDY1M0JEQiAvKiBNdWx0aXRocmVhZGVkTXVsdGlWTUV4ZWN1dGlvblRlc3QuY3BwIGluIFNv
dXJjZXMgKi8sCiAJCQkJQzIxODFGQzIxOEE5NDhGQjAwMjVBMjM1IC8qIEpTRXhwb3J0VGVzdHMu
bW0gaW4gU291cmNlcyAqLywKIAkJCQk1QzRFOEU5NjFEQkVCRTYyMDAzNkYxRkMgLyogSlNPTlBh
cnNlVGVzdC5jcHAgaW4gU291cmNlcyAqLywKIAkJCQlGRTdDNDE5NjFCOTdGQzRCMDBGNEQ1OTgg
LyogUGluZ1BvbmdTdGFja092ZXJmbG93VGVzdC5jcHAgaW4gU291cmNlcyAqLywKSW5kZXg6IFNv
dXJjZS9KYXZhU2NyaXB0Q29yZS9idWlsdGlucy9CdWlsdGluRXhlY3V0YWJsZXMuY3BwCj09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9idWlsdGlucy9CdWlsdGluRXhlY3V0YWJs
ZXMuY3BwCShyZXZpc2lvbiAyMTYyMDUpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYnVpbHRp
bnMvQnVpbHRpbkV4ZWN1dGFibGVzLmNwcAkod29ya2luZyBjb3B5KQpAQCAtMSw1ICsxLDUgQEAK
IC8qCi0gKiBDb3B5cmlnaHQgKEMpIDIwMTQgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVk
LgorICogQ29weXJpZ2h0IChDKSAyMDE0LTIwMTcgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2Vy
dmVkLgogICoKICAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkg
Zm9ybXMsIHdpdGggb3Igd2l0aG91dAogICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHBy
b3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCkBAIC00NCw4ICs0NCw4IEBAIEJ1
aWx0aW5FeGVjdXRhYmxlczo6QnVpbHRpbkV4ZWN1dGFibGVzKFYKIAogVW5saW5rZWRGdW5jdGlv
bkV4ZWN1dGFibGUqIEJ1aWx0aW5FeGVjdXRhYmxlczo6Y3JlYXRlRGVmYXVsdENvbnN0cnVjdG9y
KENvbnN0cnVjdG9yS2luZCBjb25zdHJ1Y3RvcktpbmQsIGNvbnN0IElkZW50aWZpZXImIG5hbWUp
CiB7Ci0gICAgc3RhdGljIE5ldmVyRGVzdHJveWVkPGNvbnN0IFN0cmluZz4gYmFzZUNvbnN0cnVj
dG9yQ29kZShBU0NJSUxpdGVyYWwoIihmdW5jdGlvbiAoKSB7IH0pIikpOwotICAgIHN0YXRpYyBO
ZXZlckRlc3Ryb3llZDxjb25zdCBTdHJpbmc+IGRlcml2ZWRDb25zdHJ1Y3RvckNvZGUoQVNDSUlM
aXRlcmFsKCIoZnVuY3Rpb24gKC4uLmFyZ3MpIHsgc3VwZXIoLi4uYXJncyk7IH0pIikpOworICAg
IHN0YXRpYyBOZXZlckRlc3Ryb3llZDxjb25zdCBTdHJpbmc+IGJhc2VDb25zdHJ1Y3RvckNvZGUo
TUFLRV9TVEFUSUNfU1RSSU5HX0lNUEwoIihmdW5jdGlvbiAoKSB7IH0pIikpOworICAgIHN0YXRp
YyBOZXZlckRlc3Ryb3llZDxjb25zdCBTdHJpbmc+IGRlcml2ZWRDb25zdHJ1Y3RvckNvZGUoTUFL
RV9TVEFUSUNfU1RSSU5HX0lNUEwoIihmdW5jdGlvbiAoLi4uYXJncykgeyBzdXBlciguLi5hcmdz
KTsgfSkiKSk7CiAKICAgICBzd2l0Y2ggKGNvbnN0cnVjdG9yS2luZCkgewogICAgIGNhc2UgQ29u
c3RydWN0b3JLaW5kOjpOb25lOgpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL2luc3BlY3Rv
ci9hZ2VudHMvSW5zcGVjdG9yRGVidWdnZXJBZ2VudC5jcHAKPT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNl
L0phdmFTY3JpcHRDb3JlL2luc3BlY3Rvci9hZ2VudHMvSW5zcGVjdG9yRGVidWdnZXJBZ2VudC5j
cHAJKHJldmlzaW9uIDIxNjIwNSkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9pbnNwZWN0b3Iv
YWdlbnRzL0luc3BlY3RvckRlYnVnZ2VyQWdlbnQuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0xLDUg
KzEsNSBAQAogLyoKLSAqIENvcHlyaWdodCAoQykgMjAxMCwgMjAxMywgMjAxNSBBcHBsZSBJbmMu
IEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKiBDb3B5cmlnaHQgKEMpIDIwMTAtMjAxNyBBcHBsZSBJ
bmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCiAgKiBDb3B5cmlnaHQgKEMpIDIwMTAsIDIwMTEgR29v
Z2xlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KICAqCiAgKiBSZWRpc3RyaWJ1dGlvbiBhbmQg
dXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKQEAgLTU2LDcg
KzU2LDcgQEAgY29uc3QgY2hhciogSW5zcGVjdG9yRGVidWdnZXJBZ2VudDo6YmFjawogLy8gY3Jl
YXRlIG9iamVjdHMgaW4gdGhlIHNhbWUgZ3JvdXAuCiBzdGF0aWMgU3RyaW5nIG9iamVjdEdyb3Vw
Rm9yQnJlYWtwb2ludEFjdGlvbihjb25zdCBTY3JpcHRCcmVha3BvaW50QWN0aW9uJiBhY3Rpb24p
CiB7Ci0gICAgc3RhdGljIE5ldmVyRGVzdHJveWVkPFN0cmluZz4gb2JqZWN0R3JvdXAoQVNDSUlM
aXRlcmFsKCJicmVha3BvaW50LWFjdGlvbi0iKSk7CisgICAgc3RhdGljIE5ldmVyRGVzdHJveWVk
PFN0cmluZz4gb2JqZWN0R3JvdXAoTUFLRV9TVEFUSUNfU1RSSU5HX0lNUEwoImJyZWFrcG9pbnQt
YWN0aW9uLSIpKTsKICAgICByZXR1cm4gbWFrZVN0cmluZyhvYmplY3RHcm91cC5nZXQoKSwgU3Ry
aW5nOjpudW1iZXIoYWN0aW9uLmlkZW50aWZpZXIpKTsKIH0KIApJbmRleDogU291cmNlL0phdmFT
Y3JpcHRDb3JlL3JlcGxheS9zY3JpcHRzL0NvZGVHZW5lcmF0b3JSZXBsYXlJbnB1dHNUZW1wbGF0
ZXMucHkKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL3JlcGxheS9zY3JpcHRz
L0NvZGVHZW5lcmF0b3JSZXBsYXlJbnB1dHNUZW1wbGF0ZXMucHkJKHJldmlzaW9uIDIxNjIwNSkK
KysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9yZXBsYXkvc2NyaXB0cy9Db2RlR2VuZXJhdG9yUmVw
bGF5SW5wdXRzVGVtcGxhdGVzLnB5CSh3b3JraW5nIGNvcHkpCkBAIC0xLDcgKzEsNyBAQAogIyEv
dXNyL2Jpbi9lbnYgcHl0aG9uCiAjIENvcHlyaWdodCAoYykgMjAxMSBHb29nbGUgSW5jLiBBbGwg
cmlnaHRzIHJlc2VydmVkLgogIyBDb3B5cmlnaHQgKGMpIDIwMTIgSW50ZWwgQ29ycG9yYXRpb24u
IEFsbCByaWdodHMgcmVzZXJ2ZWQuCi0jIENvcHlyaWdodCAoYykgMjAxMywgMjAxNCwgMjAxNiBB
cHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisjIENvcHlyaWdodCAoYykgMjAxMy0yMDE3
IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KICMKICMgUmVkaXN0cmlidXRpb24gYW5k
IHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CiAjIG1vZGlm
aWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0
aW9ucyBhcmUKQEAgLTE1MCw3ICsxNTAsNyBAQCAke2VudW1lcmFibGVUeXBlVHJhaXRJbXBsZW1l
bnRhdGlvbnN9CiAgICAgSW5wdXRUcmFpdHNJbXBsZW1lbnRhdGlvbiA9ICgKICAgICAiIiJjb25z
dCBTdHJpbmcmIElucHV0VHJhaXRzPCR7cXVhbGlmaWVkSW5wdXROYW1lfT46OnR5cGUoKQogewot
ICAgIHN0YXRpYyBOZXZlckRlc3Ryb3llZDxjb25zdCBTdHJpbmc+IHR5cGUoQVNDSUlMaXRlcmFs
KCR7aW5wdXROYW1lU3RyaW5nTGl0ZXJhbH0pKTsKKyAgICBzdGF0aWMgTmV2ZXJEZXN0cm95ZWQ8
Y29uc3QgU3RyaW5nPiB0eXBlKE1BS0VfU1RBVElDX1NUUklOR19JTVBMKCR7aW5wdXROYW1lU3Ry
aW5nTGl0ZXJhbH0pKTsKICAgICByZXR1cm4gdHlwZTsKIH0KIApJbmRleDogU291cmNlL0phdmFT
Y3JpcHRDb3JlL3JlcGxheS9zY3JpcHRzL3Rlc3RzL2V4cGVjdGVkL2dlbmVyYXRlLWVudW0tZW5j
b2RpbmctaGVscGVycy13aXRoLWd1YXJkZWQtdmFsdWVzLmpzb24tVGVzdFJlcGxheUlucHV0cy5j
cHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL3JlcGxheS9zY3JpcHRzL3Rl
c3RzL2V4cGVjdGVkL2dlbmVyYXRlLWVudW0tZW5jb2RpbmctaGVscGVycy13aXRoLWd1YXJkZWQt
dmFsdWVzLmpzb24tVGVzdFJlcGxheUlucHV0cy5jcHAJKHJldmlzaW9uIDIxNjIwNSkKKysrIFNv
dXJjZS9KYXZhU2NyaXB0Q29yZS9yZXBsYXkvc2NyaXB0cy90ZXN0cy9leHBlY3RlZC9nZW5lcmF0
ZS1lbnVtLWVuY29kaW5nLWhlbHBlcnMtd2l0aC1ndWFyZGVkLXZhbHVlcy5qc29uLVRlc3RSZXBs
YXlJbnB1dHMuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC01MCw3ICs1MCw3IEBAIFNhdmVkTW91c2VC
dXR0b246On5TYXZlZE1vdXNlQnV0dG9uKCkKIG5hbWVzcGFjZSBKU0MgewogY29uc3QgU3RyaW5n
JiBJbnB1dFRyYWl0czxUZXN0OjpTYXZlZE1vdXNlQnV0dG9uPjo6dHlwZSgpCiB7Ci0gICAgc3Rh
dGljIE5ldmVyRGVzdHJveWVkPGNvbnN0IFN0cmluZz4gdHlwZShBU0NJSUxpdGVyYWwoIlNhdmVk
TW91c2VCdXR0b24iKSk7CisgICAgc3RhdGljIE5ldmVyRGVzdHJveWVkPGNvbnN0IFN0cmluZz4g
dHlwZShNQUtFX1NUQVRJQ19TVFJJTkdfSU1QTCgiU2F2ZWRNb3VzZUJ1dHRvbiIpKTsKICAgICBy
ZXR1cm4gdHlwZTsKIH0KIApJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL3JlcGxheS9zY3Jp
cHRzL3Rlc3RzL2V4cGVjdGVkL2dlbmVyYXRlLWVudW0tZW5jb2RpbmctaGVscGVycy5qc29uLVRl
c3RSZXBsYXlJbnB1dHMuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9y
ZXBsYXkvc2NyaXB0cy90ZXN0cy9leHBlY3RlZC9nZW5lcmF0ZS1lbnVtLWVuY29kaW5nLWhlbHBl
cnMuanNvbi1UZXN0UmVwbGF5SW5wdXRzLmNwcAkocmV2aXNpb24gMjE2MjA1KQorKysgU291cmNl
L0phdmFTY3JpcHRDb3JlL3JlcGxheS9zY3JpcHRzL3Rlc3RzL2V4cGVjdGVkL2dlbmVyYXRlLWVu
dW0tZW5jb2RpbmctaGVscGVycy5qc29uLVRlc3RSZXBsYXlJbnB1dHMuY3BwCSh3b3JraW5nIGNv
cHkpCkBAIC01MSw3ICs1MSw3IEBAIFNhdmVkTW91c2VCdXR0b246On5TYXZlZE1vdXNlQnV0dG9u
KCkKIG5hbWVzcGFjZSBKU0MgewogY29uc3QgU3RyaW5nJiBJbnB1dFRyYWl0czxUZXN0OjpTYXZl
ZE1vdXNlQnV0dG9uPjo6dHlwZSgpCiB7Ci0gICAgc3RhdGljIE5ldmVyRGVzdHJveWVkPGNvbnN0
IFN0cmluZz4gdHlwZShBU0NJSUxpdGVyYWwoIlNhdmVkTW91c2VCdXR0b24iKSk7CisgICAgc3Rh
dGljIE5ldmVyRGVzdHJveWVkPGNvbnN0IFN0cmluZz4gdHlwZShNQUtFX1NUQVRJQ19TVFJJTkdf
SU1QTCgiU2F2ZWRNb3VzZUJ1dHRvbiIpKTsKICAgICByZXR1cm4gdHlwZTsKIH0KIApJbmRleDog
U291cmNlL0phdmFTY3JpcHRDb3JlL3JlcGxheS9zY3JpcHRzL3Rlc3RzL2V4cGVjdGVkL2dlbmVy
YXRlLWVudW0td2l0aC1ndWFyZC5qc29uLVRlc3RSZXBsYXlJbnB1dHMuY3BwCj09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0K
LS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9yZXBsYXkvc2NyaXB0cy90ZXN0cy9leHBlY3RlZC9n
ZW5lcmF0ZS1lbnVtLXdpdGgtZ3VhcmQuanNvbi1UZXN0UmVwbGF5SW5wdXRzLmNwcAkocmV2aXNp
b24gMjE2MjA1KQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL3JlcGxheS9zY3JpcHRzL3Rlc3Rz
L2V4cGVjdGVkL2dlbmVyYXRlLWVudW0td2l0aC1ndWFyZC5qc29uLVRlc3RSZXBsYXlJbnB1dHMu
Y3BwCSh3b3JraW5nIGNvcHkpCkBAIC01Miw3ICs1Miw3IEBAIEhhbmRsZVdoZWVsRXZlbnQ6On5I
YW5kbGVXaGVlbEV2ZW50KCkKIG5hbWVzcGFjZSBKU0MgewogY29uc3QgU3RyaW5nJiBJbnB1dFRy
YWl0czxUZXN0OjpIYW5kbGVXaGVlbEV2ZW50Pjo6dHlwZSgpCiB7Ci0gICAgc3RhdGljIE5ldmVy
RGVzdHJveWVkPGNvbnN0IFN0cmluZz4gdHlwZShBU0NJSUxpdGVyYWwoIkhhbmRsZVdoZWVsRXZl
bnQiKSk7CisgICAgc3RhdGljIE5ldmVyRGVzdHJveWVkPGNvbnN0IFN0cmluZz4gdHlwZShNQUtF
X1NUQVRJQ19TVFJJTkdfSU1QTCgiSGFuZGxlV2hlZWxFdmVudCIpKTsKICAgICByZXR1cm4gdHlw
ZTsKIH0KIApJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL3JlcGxheS9zY3JpcHRzL3Rlc3Rz
L2V4cGVjdGVkL2dlbmVyYXRlLWVudW1zLXdpdGgtc2FtZS1iYXNlLW5hbWUuanNvbi1UZXN0UmVw
bGF5SW5wdXRzLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcmVwbGF5
L3NjcmlwdHMvdGVzdHMvZXhwZWN0ZWQvZ2VuZXJhdGUtZW51bXMtd2l0aC1zYW1lLWJhc2UtbmFt
ZS5qc29uLVRlc3RSZXBsYXlJbnB1dHMuY3BwCShyZXZpc2lvbiAyMTYyMDUpCisrKyBTb3VyY2Uv
SmF2YVNjcmlwdENvcmUvcmVwbGF5L3NjcmlwdHMvdGVzdHMvZXhwZWN0ZWQvZ2VuZXJhdGUtZW51
bXMtd2l0aC1zYW1lLWJhc2UtbmFtZS5qc29uLVRlc3RSZXBsYXlJbnB1dHMuY3BwCSh3b3JraW5n
IGNvcHkpCkBAIC01Miw3ICs1Miw3IEBAIEZvcm1Db21ibzo6fkZvcm1Db21ibygpCiBuYW1lc3Bh
Y2UgSlNDIHsKIGNvbnN0IFN0cmluZyYgSW5wdXRUcmFpdHM8VGVzdDo6Rm9ybUNvbWJvPjo6dHlw
ZSgpCiB7Ci0gICAgc3RhdGljIE5ldmVyRGVzdHJveWVkPGNvbnN0IFN0cmluZz4gdHlwZShBU0NJ
SUxpdGVyYWwoIkZvcm1Db21ibyIpKTsKKyAgICBzdGF0aWMgTmV2ZXJEZXN0cm95ZWQ8Y29uc3Qg
U3RyaW5nPiB0eXBlKE1BS0VfU1RBVElDX1NUUklOR19JTVBMKCJGb3JtQ29tYm8iKSk7CiAgICAg
cmV0dXJuIHR5cGU7CiB9CiAKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9yZXBsYXkvc2Ny
aXB0cy90ZXN0cy9leHBlY3RlZC9nZW5lcmF0ZS1pbnB1dC13aXRoLWd1YXJkLmpzb24tVGVzdFJl
cGxheUlucHV0cy5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL3JlcGxh
eS9zY3JpcHRzL3Rlc3RzL2V4cGVjdGVkL2dlbmVyYXRlLWlucHV0LXdpdGgtZ3VhcmQuanNvbi1U
ZXN0UmVwbGF5SW5wdXRzLmNwcAkocmV2aXNpb24gMjE2MjA1KQorKysgU291cmNlL0phdmFTY3Jp
cHRDb3JlL3JlcGxheS9zY3JpcHRzL3Rlc3RzL2V4cGVjdGVkL2dlbmVyYXRlLWlucHV0LXdpdGgt
Z3VhcmQuanNvbi1UZXN0UmVwbGF5SW5wdXRzLmNwcAkod29ya2luZyBjb3B5KQpAQCAtNjIsNyAr
NjIsNyBAQCBuYW1lc3BhY2UgSlNDIHsKICNpZiBFTkFCTEUoRFVNTVlfRkVBVFVSRSkKIGNvbnN0
IFN0cmluZyYgSW5wdXRUcmFpdHM8VGVzdDo6R2V0Q3VycmVudFRpbWU+Ojp0eXBlKCkKIHsKLSAg
ICBzdGF0aWMgTmV2ZXJEZXN0cm95ZWQ8Y29uc3QgU3RyaW5nPiB0eXBlKEFTQ0lJTGl0ZXJhbCgi
R2V0Q3VycmVudFRpbWUiKSk7CisgICAgc3RhdGljIE5ldmVyRGVzdHJveWVkPGNvbnN0IFN0cmlu
Zz4gdHlwZShNQUtFX1NUQVRJQ19TVFJJTkdfSU1QTCgiR2V0Q3VycmVudFRpbWUiKSk7CiAgICAg
cmV0dXJuIHR5cGU7CiB9CiAKQEAgLTg0LDcgKzg0LDcgQEAgYm9vbCBJbnB1dFRyYWl0czxUZXN0
OjpHZXRDdXJyZW50VGltZT46OgogCiBjb25zdCBTdHJpbmcmIElucHV0VHJhaXRzPFRlc3Q6OlNl
dFJhbmRvbVNlZWQ+Ojp0eXBlKCkKIHsKLSAgICBzdGF0aWMgTmV2ZXJEZXN0cm95ZWQ8Y29uc3Qg
U3RyaW5nPiB0eXBlKEFTQ0lJTGl0ZXJhbCgiU2V0UmFuZG9tU2VlZCIpKTsKKyAgICBzdGF0aWMg
TmV2ZXJEZXN0cm95ZWQ8Y29uc3QgU3RyaW5nPiB0eXBlKE1BS0VfU1RBVElDX1NUUklOR19JTVBM
KCJTZXRSYW5kb21TZWVkIikpOwogICAgIHJldHVybiB0eXBlOwogfQogCkluZGV4OiBTb3VyY2Uv
SmF2YVNjcmlwdENvcmUvcmVwbGF5L3NjcmlwdHMvdGVzdHMvZXhwZWN0ZWQvZ2VuZXJhdGUtaW5w
dXQtd2l0aC12ZWN0b3ItbWVtYmVycy5qc29uLVRlc3RSZXBsYXlJbnB1dHMuY3BwCj09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9yZXBsYXkvc2NyaXB0cy90ZXN0cy9leHBlY3Rl
ZC9nZW5lcmF0ZS1pbnB1dC13aXRoLXZlY3Rvci1tZW1iZXJzLmpzb24tVGVzdFJlcGxheUlucHV0
cy5jcHAJKHJldmlzaW9uIDIxNjIwNSkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9yZXBsYXkv
c2NyaXB0cy90ZXN0cy9leHBlY3RlZC9nZW5lcmF0ZS1pbnB1dC13aXRoLXZlY3Rvci1tZW1iZXJz
Lmpzb24tVGVzdFJlcGxheUlucHV0cy5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTYzLDcgKzYzLDcg
QEAgU2F2ZWRIaXN0b3J5Ojp+U2F2ZWRIaXN0b3J5KCkKIG5hbWVzcGFjZSBKU0MgewogY29uc3Qg
U3RyaW5nJiBJbnB1dFRyYWl0czxUZXN0OjpBcnJheU9mVGhpbmdzPjo6dHlwZSgpCiB7Ci0gICAg
c3RhdGljIE5ldmVyRGVzdHJveWVkPGNvbnN0IFN0cmluZz4gdHlwZShBU0NJSUxpdGVyYWwoIkFy
cmF5T2ZUaGluZ3MiKSk7CisgICAgc3RhdGljIE5ldmVyRGVzdHJveWVkPGNvbnN0IFN0cmluZz4g
dHlwZShNQUtFX1NUQVRJQ19TVFJJTkdfSU1QTCgiQXJyYXlPZlRoaW5ncyIpKTsKICAgICByZXR1
cm4gdHlwZTsKIH0KIApAQCAtOTQsNyArOTQsNyBAQCBib29sIElucHV0VHJhaXRzPFRlc3Q6OkFy
cmF5T2ZUaGluZ3M+OjpkCiAKIGNvbnN0IFN0cmluZyYgSW5wdXRUcmFpdHM8VGVzdDo6U2F2ZWRI
aXN0b3J5Pjo6dHlwZSgpCiB7Ci0gICAgc3RhdGljIE5ldmVyRGVzdHJveWVkPGNvbnN0IFN0cmlu
Zz4gdHlwZShBU0NJSUxpdGVyYWwoIlNhdmVkSGlzdG9yeSIpKTsKKyAgICBzdGF0aWMgTmV2ZXJE
ZXN0cm95ZWQ8Y29uc3QgU3RyaW5nPiB0eXBlKE1BS0VfU1RBVElDX1NUUklOR19JTVBMKCJTYXZl
ZEhpc3RvcnkiKSk7CiAgICAgcmV0dXJuIHR5cGU7CiB9CiAKSW5kZXg6IFNvdXJjZS9KYXZhU2Ny
aXB0Q29yZS9yZXBsYXkvc2NyaXB0cy90ZXN0cy9leHBlY3RlZC9nZW5lcmF0ZS1pbnB1dHMtd2l0
aC1mbGFncy5qc29uLVRlc3RSZXBsYXlJbnB1dHMuY3BwCj09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9K
YXZhU2NyaXB0Q29yZS9yZXBsYXkvc2NyaXB0cy90ZXN0cy9leHBlY3RlZC9nZW5lcmF0ZS1pbnB1
dHMtd2l0aC1mbGFncy5qc29uLVRlc3RSZXBsYXlJbnB1dHMuY3BwCShyZXZpc2lvbiAyMTYyMDUp
CisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcmVwbGF5L3NjcmlwdHMvdGVzdHMvZXhwZWN0ZWQv
Z2VuZXJhdGUtaW5wdXRzLXdpdGgtZmxhZ3MuanNvbi1UZXN0UmVwbGF5SW5wdXRzLmNwcAkod29y
a2luZyBjb3B5KQpAQCAtNTksNyArNTksNyBAQCBTY2FsYXJJbnB1dDI6On5TY2FsYXJJbnB1dDIo
KQogbmFtZXNwYWNlIEpTQyB7CiBjb25zdCBTdHJpbmcmIElucHV0VHJhaXRzPFRlc3Q6OlNjYWxh
cklucHV0MT46OnR5cGUoKQogewotICAgIHN0YXRpYyBOZXZlckRlc3Ryb3llZDxjb25zdCBTdHJp
bmc+IHR5cGUoQVNDSUlMaXRlcmFsKCJTY2FsYXJJbnB1dDEiKSk7CisgICAgc3RhdGljIE5ldmVy
RGVzdHJveWVkPGNvbnN0IFN0cmluZz4gdHlwZShNQUtFX1NUQVRJQ19TVFJJTkdfSU1QTCgiU2Nh
bGFySW5wdXQxIikpOwogICAgIHJldHVybiB0eXBlOwogfQogCkBAIC04MCw3ICs4MCw3IEBAIGJv
b2wgSW5wdXRUcmFpdHM8VGVzdDo6U2NhbGFySW5wdXQxPjo6ZGUKIAogY29uc3QgU3RyaW5nJiBJ
bnB1dFRyYWl0czxUZXN0OjpTY2FsYXJJbnB1dDI+Ojp0eXBlKCkKIHsKLSAgICBzdGF0aWMgTmV2
ZXJEZXN0cm95ZWQ8Y29uc3QgU3RyaW5nPiB0eXBlKEFTQ0lJTGl0ZXJhbCgiU2NhbGFySW5wdXQy
IikpOworICAgIHN0YXRpYyBOZXZlckRlc3Ryb3llZDxjb25zdCBTdHJpbmc+IHR5cGUoTUFLRV9T
VEFUSUNfU1RSSU5HX0lNUEwoIlNjYWxhcklucHV0MiIpKTsKICAgICByZXR1cm4gdHlwZTsKIH0K
IApJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL3JlcGxheS9zY3JpcHRzL3Rlc3RzL2V4cGVj
dGVkL2dlbmVyYXRlLW1lbW9pemVkLXR5cGUtbW9kZXMuanNvbi1UZXN0UmVwbGF5SW5wdXRzLmNw
cAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcmVwbGF5L3NjcmlwdHMvdGVz
dHMvZXhwZWN0ZWQvZ2VuZXJhdGUtbWVtb2l6ZWQtdHlwZS1tb2Rlcy5qc29uLVRlc3RSZXBsYXlJ
bnB1dHMuY3BwCShyZXZpc2lvbiAyMTYyMDUpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcmVw
bGF5L3NjcmlwdHMvdGVzdHMvZXhwZWN0ZWQvZ2VuZXJhdGUtbWVtb2l6ZWQtdHlwZS1tb2Rlcy5q
c29uLVRlc3RSZXBsYXlJbnB1dHMuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC01OSw3ICs1OSw3IEBA
IE1hcElucHV0Ojp+TWFwSW5wdXQoKQogbmFtZXNwYWNlIEpTQyB7CiBjb25zdCBTdHJpbmcmIElu
cHV0VHJhaXRzPFRlc3Q6OlNjYWxhcklucHV0Pjo6dHlwZSgpCiB7Ci0gICAgc3RhdGljIE5ldmVy
RGVzdHJveWVkPGNvbnN0IFN0cmluZz4gdHlwZShBU0NJSUxpdGVyYWwoIlNjYWxhcklucHV0Iikp
OworICAgIHN0YXRpYyBOZXZlckRlc3Ryb3llZDxjb25zdCBTdHJpbmc+IHR5cGUoTUFLRV9TVEFU
SUNfU1RSSU5HX0lNUEwoIlNjYWxhcklucHV0IikpOwogICAgIHJldHVybiB0eXBlOwogfQogCkBA
IC04MCw3ICs4MCw3IEBAIGJvb2wgSW5wdXRUcmFpdHM8VGVzdDo6U2NhbGFySW5wdXQ+OjpkZWMK
IAogY29uc3QgU3RyaW5nJiBJbnB1dFRyYWl0czxUZXN0OjpNYXBJbnB1dD46OnR5cGUoKQogewot
ICAgIHN0YXRpYyBOZXZlckRlc3Ryb3llZDxjb25zdCBTdHJpbmc+IHR5cGUoQVNDSUlMaXRlcmFs
KCJNYXBJbnB1dCIpKTsKKyAgICBzdGF0aWMgTmV2ZXJEZXN0cm95ZWQ8Y29uc3QgU3RyaW5nPiB0
eXBlKE1BS0VfU1RBVElDX1NUUklOR19JTVBMKCJNYXBJbnB1dCIpKTsKICAgICByZXR1cm4gdHlw
ZTsKIH0KIApJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvSW50bE9iamVjdC5j
cHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvSW50bE9iamVj
dC5jcHAJKHJldmlzaW9uIDIxNjIwNSkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1l
L0ludGxPYmplY3QuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC04NTMsMTggKzg1MywyMyBAQCBWZWN0
b3I8U3RyaW5nPiBudW1iZXJpbmdTeXN0ZW1zRm9yTG9jYWxlCiB7CiAgICAgc3RhdGljIE5ldmVy
RGVzdHJveWVkPFZlY3RvcjxTdHJpbmc+PiBjYWNoZWROdW1iZXJpbmdTeXN0ZW1zOwogICAgIFZl
Y3RvcjxTdHJpbmc+JiBhdmFpbGFibGVOdW1iZXJpbmdTeXN0ZW1zID0gY2FjaGVkTnVtYmVyaW5n
U3lzdGVtcy5nZXQoKTsKLSAgICBpZiAoYXZhaWxhYmxlTnVtYmVyaW5nU3lzdGVtcy5pc0VtcHR5
KCkpIHsKLSAgICAgICAgVUVycm9yQ29kZSBzdGF0dXMgPSBVX1pFUk9fRVJST1I7Ci0gICAgICAg
IFVFbnVtZXJhdGlvbiogbnVtYmVyaW5nU3lzdGVtTmFtZXMgPSB1bnVtc3lzX29wZW5BdmFpbGFi
bGVOYW1lcygmc3RhdHVzKTsKLSAgICAgICAgQVNTRVJUKFVfU1VDQ0VTUyhzdGF0dXMpKTsKLQot
ICAgICAgICBpbnQzMl90IHJlc3VsdExlbmd0aDsKLSAgICAgICAgLy8gTnVtYmVyaW5nIHN5c3Rl
bSBuYW1lcyBhcmUgYWx3YXlzIEFTQ0lJLCBzbyB1c2UgY2hhcltdLgotICAgICAgICB3aGlsZSAo
Y29uc3QgY2hhciogcmVzdWx0ID0gdWVudW1fbmV4dChudW1iZXJpbmdTeXN0ZW1OYW1lcywgJnJl
c3VsdExlbmd0aCwgJnN0YXR1cykpIHsKKworICAgIGlmIChVTkxJS0VMWShhdmFpbGFibGVOdW1i
ZXJpbmdTeXN0ZW1zLmlzRW1wdHkoKSkpIHsKKyAgICAgICAgc3RhdGljIFN0YXRpY0xvY2sgY2Fj
aGVkTnVtYmVyaW5nU3lzdGVtc011dGV4OworICAgICAgICBzdGQ6OmxvY2tfZ3VhcmQ8U3RhdGlj
TG9jaz4gbG9jayhjYWNoZWROdW1iZXJpbmdTeXN0ZW1zTXV0ZXgpOworICAgICAgICBpZiAoYXZh
aWxhYmxlTnVtYmVyaW5nU3lzdGVtcy5pc0VtcHR5KCkpIHsKKyAgICAgICAgICAgIFVFcnJvckNv
ZGUgc3RhdHVzID0gVV9aRVJPX0VSUk9SOworICAgICAgICAgICAgVUVudW1lcmF0aW9uKiBudW1i
ZXJpbmdTeXN0ZW1OYW1lcyA9IHVudW1zeXNfb3BlbkF2YWlsYWJsZU5hbWVzKCZzdGF0dXMpOwog
ICAgICAgICAgICAgQVNTRVJUKFVfU1VDQ0VTUyhzdGF0dXMpKTsKLSAgICAgICAgICAgIGF2YWls
YWJsZU51bWJlcmluZ1N5c3RlbXMuYXBwZW5kKFN0cmluZyhyZXN1bHQsIHJlc3VsdExlbmd0aCkp
OworCisgICAgICAgICAgICBpbnQzMl90IHJlc3VsdExlbmd0aDsKKyAgICAgICAgICAgIC8vIE51
bWJlcmluZyBzeXN0ZW0gbmFtZXMgYXJlIGFsd2F5cyBBU0NJSSwgc28gdXNlIGNoYXJbXS4KKyAg
ICAgICAgICAgIHdoaWxlIChjb25zdCBjaGFyKiByZXN1bHQgPSB1ZW51bV9uZXh0KG51bWJlcmlu
Z1N5c3RlbU5hbWVzLCAmcmVzdWx0TGVuZ3RoLCAmc3RhdHVzKSkgeworICAgICAgICAgICAgICAg
IEFTU0VSVChVX1NVQ0NFU1Moc3RhdHVzKSk7CisgICAgICAgICAgICAgICAgYXZhaWxhYmxlTnVt
YmVyaW5nU3lzdGVtcy5hcHBlbmQoU3RyaW5nKHJlc3VsdCwgcmVzdWx0TGVuZ3RoKSk7CisgICAg
ICAgICAgICB9CisgICAgICAgICAgICB1ZW51bV9jbG9zZShudW1iZXJpbmdTeXN0ZW1OYW1lcyk7
CiAgICAgICAgIH0KLSAgICAgICAgdWVudW1fY2xvc2UobnVtYmVyaW5nU3lzdGVtTmFtZXMpOwog
ICAgIH0KIAogICAgIFVFcnJvckNvZGUgc3RhdHVzID0gVV9aRVJPX0VSUk9SOwpJbmRleDogU291
cmNlL1dURi9DaGFuZ2VMb2cKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dURi9DaGFuZ2VMb2cJKHJl
dmlzaW9uIDIxNjIwNSkKKysrIFNvdXJjZS9XVEYvQ2hhbmdlTG9nCSh3b3JraW5nIGNvcHkpCkBA
IC0xLDMgKzEsNDggQEAKKzIwMTctMDUtMDQgIE1hcmsgTGFtICA8bWFyay5sYW1AYXBwbGUuY29t
PgorCisgICAgICAgIE5ldmVyRGVzdHJveWVkPFN0cmluZz4oQVNDSUlMaXRlcmFsKC4uLikpIGlz
IG5vdCB0aHJlYWQgc2FmZS4KKyAgICAgICAgaHR0cHM6Ly9idWdzLndlYmtpdC5vcmcvc2hvd19i
dWcuY2dpP2lkPTE3MTU4NgorICAgICAgICA8cmRhcjovL3Byb2JsZW0vMzE4NzMxOTA+CisKKyAg
ICAgICAgUmV2aWV3ZWQgYnkgTk9CT0RZIChPT1BTISkuCisKKyAgICAgICAgU3RhdGljU3RyaW5n
SW1wbCBpcyBtZWFudCB0byBiZSB0aHJlYWQtc2FmZS4gIEhvd2V2ZXIsIGl0IGhhcyBhIGJ1Zzog
aXQgZGlkIG5vdAorICAgICAgICBzZXQgdGhlIHNfaGFzaEZsYWdEaWRSZXBvcnRDb3N0IGZsYWcu
ICBBcyBhIHJlc3VsdCwgaWYgY29zdCgpIGlzIGNhbGxlZCBvbiBpdCwKKyAgICAgICAgZGlmZmVy
ZW50IHRocmVhZHMgbWF5IHRyeSB0byBjaGFuZ2UgaXRzIGZsYWdzIGJpdHMgYXQgdGhlIHNhbWUg
dGltZS4gIFRoaXMgcGF0Y2gKKyAgICAgICAgY2hhbmdlcyBTdGF0aWNTdHJpbmdJbXBsIHRvIGFs
d2F5cyBzZXQgdGhlIHNfaGFzaEZsYWdEaWRSZXBvcnRDb3N0IGZsYWcuCisKKyAgICAgICAgQWxz
byBmYWN0b3JlZCBvdXQgU3RyaW5nSW1wbFNoYXBlIGFuZCBtYWRlIFN0cmluZ0ltcGwgYW5kIFN0
YXRpY1N0cmluZ0ltcGwgZXh0ZW5kCisgICAgICAgIGl0LiAgVGhpcyBtYWtlcyBpdCBtb3JlIGNs
ZWFyIHRoYXQgdGhlIDIgYXJlIGludGVuZGVkIHRvIGhhdmUgdGhlIHNhbWUgc2hhcGUuCisgICAg
ICAgIE5vdGU6IHRoZXJlIGlzIGFscmVhZHkgYSBzdGF0aWNfYXNzZXJ0IHRoYXQgdGhlIDIgaGF2
ZSB0aGUgc2FtZSBzaXplLiAgVGhpcworICAgICAgICBjaGFuZ2UgYWxzbyBlbnN1cmVzIHRoYXQg
dGhleSBib3RoIGhhdmUgdGhlIHNhbWUgc2hhcGUsIHdoaWNoIGlzIGEgcmVxdWlyZW1lbnQgaW4K
KyAgICAgICAgb3JkZXIgZm9yIFN0YXRpY1N0cmluZ0ltcGwgdG8gd29yay4KKworICAgICAgICBJ
bnRyb2R1Y2VkIHRoZSBNQUtFX1NUQVRJQ19TVFJJTkdfSU1QTCBtYWNybyBhcyBhIGNvbnZlbmll
bnQgd2F5IHRvIGluc3RhbnRpYXRlCisgICAgICAgIFN0YXRpY1N0cmluZ0ltcGxzIGZyb20gbGl0
ZXJhbCBzdHJpbmdzLiAgVGhpcyBhbGxvd3MgdXMgdG8gdHJpdmlhbGx5IGNoYW5nZQorCisgICAg
ICAgICAgICBOZXZlckRlc3Ryb3llZDxTdHJpbmc+IG15U3RyaW5nKEFTQ0lJTGl0ZXJhbCgibXlT
dHJpbmciKSk7CisKKyAgICAgICAgdG8gLi4uCisKKyAgICAgICAgICAgIE5ldmVyRGVzdHJveWVk
PFN0cmluZz4gbXlTdHJpbmcoTUFLRV9TVEFUSUNfU1RSSU5HX0lNUEwoIm15U3RyaW5nIikpOwor
CisgICAgICAgIGFuZCBieSBzbyBkb2luZywgbWFrZSBpdCB0aHJlYWQtc2FmZS4KKworICAgICAg
ICBNQUtFX1NUQVRJQ19TVFJJTkdfSU1QTCBpbnN0YW50aWF0ZXMgYSBsYW1iZGEgZnVuY3Rpb24g
dG8gY3JlYXRlIHRoZSBzdGF0aWMKKyAgICAgICAgU3RhdGljU3RyaW5nSW1wbHMuCisKKyAgICAg
ICAgKiB3dGYvdGV4dC9TdHJpbmdJbXBsLmg6CisgICAgICAgIChXVEY6OlN0cmluZ0ltcGxTaGFw
ZTo6U3RyaW5nSW1wbFNoYXBlKToKKyAgICAgICAgKFdURjo6U3RyaW5nSW1wbDo6U3RyaW5nSW1w
bCk6CisgICAgICAgIChXVEY6OlN0cmluZ0ltcGw6OmNvc3QpOgorICAgICAgICAoV1RGOjpTdHJp
bmdJbXBsOjpzZXRIYXNoKToKKyAgICAgICAgKFdURjo6U3RyaW5nSW1wbDo6U3RhdGljU3RyaW5n
SW1wbDo6U3RhdGljU3RyaW5nSW1wbCk6CisgICAgICAgIChXVEY6OlN0cmluZ0ltcGw6OlN0YXRp
Y1N0cmluZ0ltcGw6Om9wZXJhdG9yIFN0cmluZ0ltcGwmKToKKyAgICAgICAgKiB3dGYvdGV4dC9X
VEZTdHJpbmcuaDoKKyAgICAgICAgKFdURjo6U3RyaW5nOjpTdHJpbmcpOgorICAgICAgICAqIHd0
Zi90ZXh0L2ljdS9UZXh0QnJlYWtJdGVyYXRvcklDVS5oOgorICAgICAgICAoV1RGOjpjYXJldFJ1
bGVzKToKKwogMjAxNy0wNS0wNCAgWXVzdWtlIFN1enVraSAgPHV0YXRhbmUudGVhQGdtYWlsLmNv
bT4KIAogICAgICAgICBbR1RLXVtKU0NPbmx5XSBJbXBsZW1lbnQgbWVtb3J5Rm9vdHByaW50IGZv
ciBMaW51eApJbmRleDogU291cmNlL1dURi93dGYvdGV4dC9TdHJpbmdJbXBsLmgKPT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PQotLS0gU291cmNlL1dURi93dGYvdGV4dC9TdHJpbmdJbXBsLmgJKHJldmlzaW9uIDIxNjIwNSkK
KysrIFNvdXJjZS9XVEYvd3RmL3RleHQvU3RyaW5nSW1wbC5oCSh3b3JraW5nIGNvcHkpCkBAIC0x
LDYgKzEsNiBAQAogLyoKICAqIENvcHlyaWdodCAoQykgMTk5OSBMYXJzIEtub2xsIChrbm9sbEBr
ZGUub3JnKQotICogQ29weXJpZ2h0IChDKSAyMDA1LTIwMTAsIDIwMTMtMjAxNiBBcHBsZSBJbmMu
IEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKiBDb3B5cmlnaHQgKEMpIDIwMDUtMjAxNyBBcHBsZSBJ
bmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCiAgKiBDb3B5cmlnaHQgKEMpIDIwMDkgR29vZ2xlIElu
Yy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KICAqCiAgKiBUaGlzIGxpYnJhcnkgaXMgZnJlZSBzb2Z0
d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yCkBAIC0xMjksNyArMTI5LDQ5IEBA
IHN0cnVjdCBTdHJpbmdTdGF0cyB7CiAjZGVmaW5lIFNUUklOR19TVEFUU19ERVJFRl9TVFJJTkco
c3RyaW5nKSAoKHZvaWQpMCkKICNlbmRpZgogCi1jbGFzcyBTdHJpbmdJbXBsIHsKK2NsYXNzIFN0
cmluZ0ltcGxTaGFwZSB7CisgICAgV1RGX01BS0VfTk9OQ09QWUFCTEUoU3RyaW5nSW1wbFNoYXBl
KTsKK3Byb3RlY3RlZDoKKyAgICBTdHJpbmdJbXBsU2hhcGUodW5zaWduZWQgcmVmQ291bnQsIHVu
c2lnbmVkIGxlbmd0aCwgY29uc3QgTENoYXIqIGRhdGE4LCB1bnNpZ25lZCBoYXNoQW5kRmxhZ3Mp
CisgICAgICAgIDogbV9yZWZDb3VudChyZWZDb3VudCkKKyAgICAgICAgLCBtX2xlbmd0aChsZW5n
dGgpCisgICAgICAgICwgbV9kYXRhOChkYXRhOCkKKyAgICAgICAgLCBtX2hhc2hBbmRGbGFncyho
YXNoQW5kRmxhZ3MpCisgICAgeyB9CisKKyAgICBTdHJpbmdJbXBsU2hhcGUodW5zaWduZWQgcmVm
Q291bnQsIHVuc2lnbmVkIGxlbmd0aCwgY29uc3QgVUNoYXIqIGRhdGExNiwgdW5zaWduZWQgaGFz
aEFuZEZsYWdzKQorICAgICAgICA6IG1fcmVmQ291bnQocmVmQ291bnQpCisgICAgICAgICwgbV9s
ZW5ndGgobGVuZ3RoKQorICAgICAgICAsIG1fZGF0YTE2KGRhdGExNikKKyAgICAgICAgLCBtX2hh
c2hBbmRGbGFncyhoYXNoQW5kRmxhZ3MpCisgICAgeyB9CisKKyAgICB0ZW1wbGF0ZTx1bnNpZ25l
ZCBjaGFyYWN0ZXJzQ291bnQ+CisgICAgY29uc3RleHByIFN0cmluZ0ltcGxTaGFwZSh1bnNpZ25l
ZCByZWZDb3VudCwgdW5zaWduZWQgbGVuZ3RoLCBjb25zdCBjaGFyICgmY2hhcmFjdGVycylbY2hh
cmFjdGVyc0NvdW50XSwgdW5zaWduZWQgaGFzaEFuZEZsYWdzKQorICAgICAgICA6IG1fcmVmQ291
bnQocmVmQ291bnQpCisgICAgICAgICwgbV9sZW5ndGgobGVuZ3RoKQorICAgICAgICAsIG1fZGF0
YTgocmVpbnRlcnByZXRfY2FzdDxjb25zdCBMQ2hhcio+KGNoYXJhY3RlcnMpKQorICAgICAgICAs
IG1faGFzaEFuZEZsYWdzKGhhc2hBbmRGbGFncykKKyAgICB7IH0KKyAgICAKKyAgICB0ZW1wbGF0
ZTx1bnNpZ25lZCBjaGFyYWN0ZXJzQ291bnQ+CisgICAgY29uc3RleHByIFN0cmluZ0ltcGxTaGFw
ZSh1bnNpZ25lZCByZWZDb3VudCwgdW5zaWduZWQgbGVuZ3RoLCBjb25zdCBjaGFyMTZfdCAoJmNo
YXJhY3RlcnMpW2NoYXJhY3RlcnNDb3VudF0sIHVuc2lnbmVkIGhhc2hBbmRGbGFncykKKyAgICAg
ICAgOiBtX3JlZkNvdW50KHJlZkNvdW50KQorICAgICAgICAsIG1fbGVuZ3RoKGxlbmd0aCkKKyAg
ICAgICAgLCBtX2RhdGExNihyZWludGVycHJldF9jYXN0PGNvbnN0IFVDaGFyKj4oY2hhcmFjdGVy
cykpCisgICAgICAgICwgbV9oYXNoQW5kRmxhZ3MoaGFzaEFuZEZsYWdzKQorICAgIHsgfQorCisg
ICAgdW5zaWduZWQgbV9yZWZDb3VudDsKKyAgICB1bnNpZ25lZCBtX2xlbmd0aDsKKyAgICB1bmlv
biB7CisgICAgICAgIGNvbnN0IExDaGFyKiBtX2RhdGE4OworICAgICAgICBjb25zdCBVQ2hhciog
bV9kYXRhMTY7CisgICAgfTsKKyAgICBtdXRhYmxlIHVuc2lnbmVkIG1faGFzaEFuZEZsYWdzOwor
fTsKKworY2xhc3MgU3RyaW5nSW1wbCA6IHByaXZhdGUgU3RyaW5nSW1wbFNoYXBlIHsKICAgICBX
VEZfTUFLRV9OT05DT1BZQUJMRShTdHJpbmdJbXBsKTsgV1RGX01BS0VfRkFTVF9BTExPQ0FURUQ7
CiAgICAgZnJpZW5kIHN0cnVjdCBXVEY6OkNTdHJpbmdUcmFuc2xhdG9yOwogICAgIHRlbXBsYXRl
PHR5cGVuYW1lIENoYXJhY3RlclR5cGU+IGZyaWVuZCBzdHJ1Y3QgV1RGOjpIYXNoQW5kQ2hhcmFj
dGVyc1RyYW5zbGF0b3I7CkBAIC0xNzQsMTAgKzIxNiw3IEBAIHByaXZhdGU6CiAgICAgZW51bSBG
b3JjZThCaXQgeyBGb3JjZThCaXRDb25zdHJ1Y3RvciB9OwogICAgIC8vIENyZWF0ZSBhIG5vcm1h
bCA4LWJpdCBzdHJpbmcgd2l0aCBpbnRlcm5hbCBzdG9yYWdlIChCdWZmZXJJbnRlcm5hbCkKICAg
ICBTdHJpbmdJbXBsKHVuc2lnbmVkIGxlbmd0aCwgRm9yY2U4Qml0KQotICAgICAgICA6IG1fcmVm
Q291bnQoc19yZWZDb3VudEluY3JlbWVudCkKLSAgICAgICAgLCBtX2xlbmd0aChsZW5ndGgpCi0g
ICAgICAgICwgbV9kYXRhOCh0YWlsUG9pbnRlcjxMQ2hhcj4oKSkKLSAgICAgICAgLCBtX2hhc2hB
bmRGbGFncyhzX2hhc2hGbGFnOEJpdEJ1ZmZlciB8IFN0cmluZ05vcm1hbCB8IEJ1ZmZlckludGVy
bmFsKQorICAgICAgICA6IFN0cmluZ0ltcGxTaGFwZShzX3JlZkNvdW50SW5jcmVtZW50LCBsZW5n
dGgsIHRhaWxQb2ludGVyPExDaGFyPigpLCBzX2hhc2hGbGFnOEJpdEJ1ZmZlciB8IFN0cmluZ05v
cm1hbCB8IEJ1ZmZlckludGVybmFsKQogICAgIHsKICAgICAgICAgQVNTRVJUKG1fZGF0YTgpOwog
ICAgICAgICBBU1NFUlQobV9sZW5ndGgpOwpAQCAtMTg3LDEwICsyMjYsNyBAQCBwcml2YXRlOgog
CiAgICAgLy8gQ3JlYXRlIGEgbm9ybWFsIDE2LWJpdCBzdHJpbmcgd2l0aCBpbnRlcm5hbCBzdG9y
YWdlIChCdWZmZXJJbnRlcm5hbCkKICAgICBTdHJpbmdJbXBsKHVuc2lnbmVkIGxlbmd0aCkKLSAg
ICAgICAgOiBtX3JlZkNvdW50KHNfcmVmQ291bnRJbmNyZW1lbnQpCi0gICAgICAgICwgbV9sZW5n
dGgobGVuZ3RoKQotICAgICAgICAsIG1fZGF0YTE2KHRhaWxQb2ludGVyPFVDaGFyPigpKQotICAg
ICAgICAsIG1faGFzaEFuZEZsYWdzKFN0cmluZ05vcm1hbCB8IEJ1ZmZlckludGVybmFsKQorICAg
ICAgICA6IFN0cmluZ0ltcGxTaGFwZShzX3JlZkNvdW50SW5jcmVtZW50LCBsZW5ndGgsIHRhaWxQ
b2ludGVyPFVDaGFyPigpLCBTdHJpbmdOb3JtYWwgfCBCdWZmZXJJbnRlcm5hbCkKICAgICB7CiAg
ICAgICAgIEFTU0VSVChtX2RhdGExNik7CiAgICAgICAgIEFTU0VSVChtX2xlbmd0aCk7CkBAIC0y
MDAsMTAgKzIzNiw3IEBAIHByaXZhdGU6CiAKICAgICAvLyBDcmVhdGUgYSBTdHJpbmdJbXBsIGFk
b3B0aW5nIG93bmVyc2hpcCBvZiB0aGUgcHJvdmlkZWQgYnVmZmVyIChCdWZmZXJPd25lZCkKICAg
ICBTdHJpbmdJbXBsKE1hbGxvY1B0cjxMQ2hhcj4gY2hhcmFjdGVycywgdW5zaWduZWQgbGVuZ3Ro
KQotICAgICAgICA6IG1fcmVmQ291bnQoc19yZWZDb3VudEluY3JlbWVudCkKLSAgICAgICAgLCBt
X2xlbmd0aChsZW5ndGgpCi0gICAgICAgICwgbV9kYXRhOChjaGFyYWN0ZXJzLmxlYWtQdHIoKSkK
LSAgICAgICAgLCBtX2hhc2hBbmRGbGFncyhzX2hhc2hGbGFnOEJpdEJ1ZmZlciB8IFN0cmluZ05v
cm1hbCB8IEJ1ZmZlck93bmVkKQorICAgICAgICA6IFN0cmluZ0ltcGxTaGFwZShzX3JlZkNvdW50
SW5jcmVtZW50LCBsZW5ndGgsIGNoYXJhY3RlcnMubGVha1B0cigpLCBzX2hhc2hGbGFnOEJpdEJ1
ZmZlciB8IFN0cmluZ05vcm1hbCB8IEJ1ZmZlck93bmVkKQogICAgIHsKICAgICAgICAgQVNTRVJU
KG1fZGF0YTgpOwogICAgICAgICBBU1NFUlQobV9sZW5ndGgpOwpAQCAtMjEzLDEwICsyNDYsNyBA
QCBwcml2YXRlOgogCiAgICAgZW51bSBDb25zdHJ1Y3RXaXRob3V0Q29weWluZ1RhZyB7IENvbnN0
cnVjdFdpdGhvdXRDb3B5aW5nIH07CiAgICAgU3RyaW5nSW1wbChjb25zdCBVQ2hhciogY2hhcmFj
dGVycywgdW5zaWduZWQgbGVuZ3RoLCBDb25zdHJ1Y3RXaXRob3V0Q29weWluZ1RhZykKLSAgICAg
ICAgOiBtX3JlZkNvdW50KHNfcmVmQ291bnRJbmNyZW1lbnQpCi0gICAgICAgICwgbV9sZW5ndGgo
bGVuZ3RoKQotICAgICAgICAsIG1fZGF0YTE2KGNoYXJhY3RlcnMpCi0gICAgICAgICwgbV9oYXNo
QW5kRmxhZ3MoU3RyaW5nTm9ybWFsIHwgQnVmZmVySW50ZXJuYWwpCisgICAgICAgIDogU3RyaW5n
SW1wbFNoYXBlKHNfcmVmQ291bnRJbmNyZW1lbnQsIGxlbmd0aCwgY2hhcmFjdGVycywgU3RyaW5n
Tm9ybWFsIHwgQnVmZmVySW50ZXJuYWwpCiAgICAgewogICAgICAgICBBU1NFUlQobV9kYXRhMTYp
OwogICAgICAgICBBU1NFUlQobV9sZW5ndGgpOwpAQCAtMjI1LDEwICsyNTUsNyBAQCBwcml2YXRl
OgogICAgIH0KIAogICAgIFN0cmluZ0ltcGwoY29uc3QgTENoYXIqIGNoYXJhY3RlcnMsIHVuc2ln
bmVkIGxlbmd0aCwgQ29uc3RydWN0V2l0aG91dENvcHlpbmdUYWcpCi0gICAgICAgIDogbV9yZWZD
b3VudChzX3JlZkNvdW50SW5jcmVtZW50KQotICAgICAgICAsIG1fbGVuZ3RoKGxlbmd0aCkKLSAg
ICAgICAgLCBtX2RhdGE4KGNoYXJhY3RlcnMpCi0gICAgICAgICwgbV9oYXNoQW5kRmxhZ3Moc19o
YXNoRmxhZzhCaXRCdWZmZXIgfCBTdHJpbmdOb3JtYWwgfCBCdWZmZXJJbnRlcm5hbCkKKyAgICAg
ICAgOiBTdHJpbmdJbXBsU2hhcGUoc19yZWZDb3VudEluY3JlbWVudCwgbGVuZ3RoLCBjaGFyYWN0
ZXJzLCBzX2hhc2hGbGFnOEJpdEJ1ZmZlciB8IFN0cmluZ05vcm1hbCB8IEJ1ZmZlckludGVybmFs
KQogICAgIHsKICAgICAgICAgQVNTRVJUKG1fZGF0YTgpOwogICAgICAgICBBU1NFUlQobV9sZW5n
dGgpOwpAQCAtMjM4LDEwICsyNjUsNyBAQCBwcml2YXRlOgogCiAgICAgLy8gQ3JlYXRlIGEgU3Ry
aW5nSW1wbCBhZG9wdGluZyBvd25lcnNoaXAgb2YgdGhlIHByb3ZpZGVkIGJ1ZmZlciAoQnVmZmVy
T3duZWQpCiAgICAgU3RyaW5nSW1wbChNYWxsb2NQdHI8VUNoYXI+IGNoYXJhY3RlcnMsIHVuc2ln
bmVkIGxlbmd0aCkKLSAgICAgICAgOiBtX3JlZkNvdW50KHNfcmVmQ291bnRJbmNyZW1lbnQpCi0g
ICAgICAgICwgbV9sZW5ndGgobGVuZ3RoKQotICAgICAgICAsIG1fZGF0YTE2KGNoYXJhY3RlcnMu
bGVha1B0cigpKQotICAgICAgICAsIG1faGFzaEFuZEZsYWdzKFN0cmluZ05vcm1hbCB8IEJ1ZmZl
ck93bmVkKQorICAgICAgICA6IFN0cmluZ0ltcGxTaGFwZShzX3JlZkNvdW50SW5jcmVtZW50LCBs
ZW5ndGgsIGNoYXJhY3RlcnMubGVha1B0cigpLCBTdHJpbmdOb3JtYWwgfCBCdWZmZXJPd25lZCkK
ICAgICB7CiAgICAgICAgIEFTU0VSVChtX2RhdGExNik7CiAgICAgICAgIEFTU0VSVChtX2xlbmd0
aCk7CkBAIC0yNTEsMTAgKzI3NSw3IEBAIHByaXZhdGU6CiAKICAgICAvLyBVc2VkIHRvIGNyZWF0
ZSBuZXcgc3RyaW5ncyB0aGF0IGFyZSBhIHN1YnN0cmluZyBvZiBhbiBleGlzdGluZyA4LWJpdCBT
dHJpbmdJbXBsIChCdWZmZXJTdWJzdHJpbmcpCiAgICAgU3RyaW5nSW1wbChjb25zdCBMQ2hhciog
Y2hhcmFjdGVycywgdW5zaWduZWQgbGVuZ3RoLCBSZWY8U3RyaW5nSW1wbD4mJiBiYXNlKQotICAg
ICAgICA6IG1fcmVmQ291bnQoc19yZWZDb3VudEluY3JlbWVudCkKLSAgICAgICAgLCBtX2xlbmd0
aChsZW5ndGgpCi0gICAgICAgICwgbV9kYXRhOChjaGFyYWN0ZXJzKQotICAgICAgICAsIG1faGFz
aEFuZEZsYWdzKHNfaGFzaEZsYWc4Qml0QnVmZmVyIHwgU3RyaW5nTm9ybWFsIHwgQnVmZmVyU3Vi
c3RyaW5nKQorICAgICAgICA6IFN0cmluZ0ltcGxTaGFwZShzX3JlZkNvdW50SW5jcmVtZW50LCBs
ZW5ndGgsIGNoYXJhY3RlcnMsIHNfaGFzaEZsYWc4Qml0QnVmZmVyIHwgU3RyaW5nTm9ybWFsIHwg
QnVmZmVyU3Vic3RyaW5nKQogICAgIHsKICAgICAgICAgQVNTRVJUKGlzOEJpdCgpKTsKICAgICAg
ICAgQVNTRVJUKG1fZGF0YTgpOwpAQCAtMjY4LDEwICsyODksNyBAQCBwcml2YXRlOgogCiAgICAg
Ly8gVXNlZCB0byBjcmVhdGUgbmV3IHN0cmluZ3MgdGhhdCBhcmUgYSBzdWJzdHJpbmcgb2YgYW4g
ZXhpc3RpbmcgMTYtYml0IFN0cmluZ0ltcGwgKEJ1ZmZlclN1YnN0cmluZykKICAgICBTdHJpbmdJ
bXBsKGNvbnN0IFVDaGFyKiBjaGFyYWN0ZXJzLCB1bnNpZ25lZCBsZW5ndGgsIFJlZjxTdHJpbmdJ
bXBsPiYmIGJhc2UpCi0gICAgICAgIDogbV9yZWZDb3VudChzX3JlZkNvdW50SW5jcmVtZW50KQot
ICAgICAgICAsIG1fbGVuZ3RoKGxlbmd0aCkKLSAgICAgICAgLCBtX2RhdGExNihjaGFyYWN0ZXJz
KQotICAgICAgICAsIG1faGFzaEFuZEZsYWdzKFN0cmluZ05vcm1hbCB8IEJ1ZmZlclN1YnN0cmlu
ZykKKyAgICAgICAgOiBTdHJpbmdJbXBsU2hhcGUoc19yZWZDb3VudEluY3JlbWVudCwgbGVuZ3Ro
LCBjaGFyYWN0ZXJzLCBTdHJpbmdOb3JtYWwgfCBCdWZmZXJTdWJzdHJpbmcpCiAgICAgewogICAg
ICAgICBBU1NFUlQoIWlzOEJpdCgpKTsKICAgICAgICAgQVNTRVJUKG1fZGF0YTE2KTsKQEAgLTM5
OSw2ICs0MTcsMTAgQEAgcHVibGljOgogICAgICAgICBpZiAoYnVmZmVyT3duZXJzaGlwKCkgPT0g
QnVmZmVyU3Vic3RyaW5nKQogICAgICAgICAgICAgcmV0dXJuIHN1YnN0cmluZ0J1ZmZlcigpLT5j
b3N0KCk7CiAKKyAgICAgICAgLy8gTm90ZTogd2UgbXVzdCBub3QgYWx0ZXIgdGhlIG1faGFzaEFu
ZEZsYWdzIGZpZWxkIGluIGluc3RhbmNlcyBvZiBTdGF0aWNTdHJpbmdJbXBsLgorICAgICAgICAv
LyBXZSBlbnN1cmUgdGhpcyBieSBwcmUtc2V0dGluZyB0aGUgc19oYXNoRmxhZ0RpZFJlcG9ydENv
c3QgYml0IGluIGFsbCBpbnN0YW5jZXMgb2YKKyAgICAgICAgLy8gU3RhdGljU3RyaW5nSW1wbC4g
QXMgYSByZXN1bHQsIFN0YXRpY1N0cmluZ0ltcGwgaW5zdGFuY2VzIHdpbGwgYWx3YXlzIHJldHVy
biBhIGNvc3Qgb2YKKyAgICAgICAgLy8gMCBoZXJlIGFuZCBhdm9pZCBtb2RpZnlpbmcgbV9oYXNo
QW5kRmxhZ3MuCiAgICAgICAgIGlmIChtX2hhc2hBbmRGbGFncyAmIHNfaGFzaEZsYWdEaWRSZXBv
cnRDb3N0KQogICAgICAgICAgICAgcmV0dXJuIDA7CiAKQEAgLTQ2MCw2ICs0ODIsNyBAQCBwcml2
YXRlOgogICAgIHZvaWQgc2V0SGFzaCh1bnNpZ25lZCBoYXNoKSBjb25zdAogICAgIHsKICAgICAg
ICAgQVNTRVJUKCFoYXNIYXNoKCkpOworICAgICAgICBBU1NFUlQoIWlzU3RhdGljKCkpOwogICAg
ICAgICAvLyBNdWx0aXBsZSBjbGllbnRzIGFzc3VtZSB0aGF0IFN0cmluZ0hhc2hlciBpcyB0aGUg
Y2Fub25pY2FsIHN0cmluZyBoYXNoIGZ1bmN0aW9uLgogICAgICAgICBBU1NFUlQoaGFzaCA9PSAo
aXM4Qml0KCkgPyBTdHJpbmdIYXNoZXI6OmNvbXB1dGVIYXNoQW5kTWFza1RvcDhCaXRzKG1fZGF0
YTgsIG1fbGVuZ3RoKSA6IFN0cmluZ0hhc2hlcjo6Y29tcHV0ZUhhc2hBbmRNYXNrVG9wOEJpdHMo
bV9kYXRhMTYsIG1fbGVuZ3RoKSkpOwogICAgICAgICBBU1NFUlQoIShoYXNoICYgKHNfZmxhZ01h
c2sgPDwgKDggKiBzaXplb2YoaGFzaCkgLSBzX2ZsYWdDb3VudCkpKSk7IC8vIFZlcmlmeSB0aGF0
IGVub3VnaCBoaWdoIGJpdHMgYXJlIGVtcHR5LgpAQCAtNTM3LDI3ICs1NjAsNDcgQEAgcHVibGlj
OgogICAgICAgICBtX3JlZkNvdW50ID0gdGVtcFJlZkNvdW50OwogICAgIH0KIAotICAgIGNsYXNz
IFN0YXRpY1N0cmluZ0ltcGwgeworICAgIGNsYXNzIFN0YXRpY1N0cmluZ0ltcGwgOiBwcml2YXRl
IFN0cmluZ0ltcGxTaGFwZSB7CiAgICAgICAgIFdURl9NQUtFX05PTkNPUFlBQkxFKFN0YXRpY1N0
cmluZ0ltcGwpOwogICAgIHB1YmxpYzoKICAgICAgICAgLy8gVXNlZCB0byBjb25zdHJ1Y3Qgc3Rh
dGljIHN0cmluZ3MsIHdoaWNoIGhhdmUgYW4gc3BlY2lhbCByZWZDb3VudCB0aGF0IGNhbiBuZXZl
ciBoaXQgemVyby4KICAgICAgICAgLy8gVGhpcyBtZWFucyB0aGF0IHRoZSBzdGF0aWMgc3RyaW5n
IHdpbGwgbmV2ZXIgYmUgZGVzdHJveWVkLCB3aGljaCBpcyBpbXBvcnRhbnQgYmVjYXVzZQogICAg
ICAgICAvLyBzdGF0aWMgc3RyaW5ncyB3aWxsIGJlIHNoYXJlZCBhY3Jvc3MgdGhyZWFkcyAmIHJl
Zi1jb3VudGVkIGluIGEgbm9uLXRocmVhZHNhZmUgbWFubmVyLgorICAgICAgICAvLworICAgICAg
ICAvLyBJbiBvcmRlciB0byBtYWtlIFN0YXRpY1N0cmluZ0ltcGwgdGhyZWFkIHNhZmUsIHdlIGFs
c28gbmVlZCB0byBlbnN1cmUgdGhhdCB0aGUgcmVzdCBvZgorICAgICAgICAvLyB0aGUgZmllbGRz
IGFyZSBuZXZlciBtdXRhdGVkIGJ5IHRocmVhZHMuIFdlIGhhdmUgdGhpcyBndWFyYW50ZWUgYmVj
YXVzZToKKyAgICAgICAgLy8KKyAgICAgICAgLy8gMS4gbV9sZW5ndGggaXMgb25seSBzZXQgb24g
Y29uc3RydWN0aW9uIGFuZCBuZXZlciBtdXRhdGVkIHRoZXJlYWZ0ZXIuCisgICAgICAgIC8vCisg
ICAgICAgIC8vIDIuIG1fZGF0YTggYW5kIG1fZGF0YTE2IGFyZSBvbmx5IHNldCBvbiBjb25zdHJ1
Y3Rpb24gYW5kIG5ldmVyIG11dGF0ZWQgdGhlcmVhZnRlci4KKyAgICAgICAgLy8gICAgV2UgYWxz
byBrbm93IHRoYXQgYSBTdHJpbmdJbXBsIG5ldmVyIGNoYW5nZXMgZnJvbSA4IGJpdCB0byAxNiBi
aXQgYmVjYXVzZSB0aGVyZQorICAgICAgICAvLyAgICBpcyBubyB3YXkgdG8gc2V0L2NsZWFyIHRo
ZSBzX2hhc2hGbGFnOEJpdEJ1ZmZlciBmbGFnIG90aGVyIHRoYW4gYXQgY29uc3RydWN0aW9uLgor
ICAgICAgICAvLworICAgICAgICAvLyAzLiBtX2hhc2hBbmRGbGFncyB3aWxsIG5vdCBiZSBtdXRh
dGVkIGJ5IGRpZmZlcmVudCB0aHJlYWRzIGJlY2F1c2U6CisgICAgICAgIC8vCisgICAgICAgIC8v
ICAgIGEuIFN0YXRpY1N0cmluZ0ltcGwncyBjb25zdHJ1Y3RvciBzZXRzIHRoZSBzX2hhc2hGbGFn
RGlkUmVwb3J0Q29zdCBmbGFnIHRvIGVuc3VyZQorICAgICAgICAvLyAgICAgICB0aGF0IFN0cmlu
Z0ltcGw6OmNvc3QoKSByZXR1cm5zIGVhcmx5LgorICAgICAgICAvLyAgICAgICBUaGlzIG1lYW5z
IFN0YXRpY1N0cmluZ0ltcGwgY29zdHMgYXJlIG5vdCBjb3VudGVkLiBCdXQgc2luY2UgdGhlcmUg
c2hvdWxkIG9ubHkKKyAgICAgICAgLy8gICAgICAgYmUgYSBmaW5pdGUgc2V0IG9mIFN0YXRpY1N0
cmluZ0ltcGxzLCB0aGVpciBjb3N0IGNhbiBiZSBhZ2dyZWdhdGVkIGludG8gYSBzaW5nbGUKKyAg
ICAgICAgLy8gICAgICAgc3lzdGVtIGNvc3QgaWYgbmVlZGVkLgorICAgICAgICAvLyAgICBiLiBz
ZXRJc0F0b21pYygpIGlzIG5ldmVyIGNhbGxlZCBvbiBhIFN0YXRpY1N0cmluZ0ltcGwuCisgICAg
ICAgIC8vICAgICAgIHNldElzQXRvbWljKCkgYXNzZXJ0cyAhaXNTdGF0aWMoKS4KKyAgICAgICAg
Ly8gICAgYy4gc2V0SGFzaCgpIGlzIG5ldmVyIGNhbGxlZCBvbiBhIFN0YXRpY1N0cmluZ0ltcGwu
CisgICAgICAgIC8vICAgICAgIFN0YXRpY1N0cmluZ0ltcGwncyBjb25zdHJ1Y3RvciBzZXRzIHRo
ZSBoYXNoIG9uIGNvbnN0cnVjdGlvbi4KKyAgICAgICAgLy8gICAgICAgU3RyaW5nSW1wbDo6aGFz
aCgpIG9ubHkgc2V0cyBhIG5ldyBoYXNoIGlmZiAhaGFzSGFzaCgpLgorICAgICAgICAvLyAgICAg
ICBBZGRpdGlvbmFsbHksIFN0cmluZ0ltcGw6OnNldEhhc2goKSBhc3NlcnRzIGhhc0hhc2goKSBh
bmQgIWlzU3RhdGljKCkuCisKICAgICAgICAgdGVtcGxhdGU8dW5zaWduZWQgY2hhcmFjdGVyc0Nv
dW50PgogICAgICAgICBjb25zdGV4cHIgU3RhdGljU3RyaW5nSW1wbChjb25zdCBjaGFyICgmY2hh
cmFjdGVycylbY2hhcmFjdGVyc0NvdW50XSwgU3RyaW5nS2luZCBzdHJpbmdLaW5kID0gU3RyaW5n
Tm9ybWFsKQotICAgICAgICAgICAgOiBtX3JlZkNvdW50KHNfcmVmQ291bnRGbGFnSXNTdGF0aWNT
dHJpbmcpCi0gICAgICAgICAgICAsIG1fbGVuZ3RoKGNoYXJhY3RlcnNDb3VudCAtIDEpCi0gICAg
ICAgICAgICAsIG1fZGF0YTgoY2hhcmFjdGVycykKLSAgICAgICAgICAgICwgbV9oYXNoQW5kRmxh
Z3Moc19oYXNoRmxhZzhCaXRCdWZmZXIgfCBzdHJpbmdLaW5kIHwgQnVmZmVySW50ZXJuYWwgfCAo
U3RyaW5nSGFzaGVyOjpjb21wdXRlTGl0ZXJhbEhhc2hBbmRNYXNrVG9wOEJpdHMoY2hhcmFjdGVy
cykgPDwgc19mbGFnQ291bnQpKQorICAgICAgICAgICAgOiBTdHJpbmdJbXBsU2hhcGUoc19yZWZD
b3VudEZsYWdJc1N0YXRpY1N0cmluZywgY2hhcmFjdGVyc0NvdW50IC0gMSwgY2hhcmFjdGVycywK
KyAgICAgICAgICAgICAgICBzX2hhc2hGbGFnOEJpdEJ1ZmZlciB8IHNfaGFzaEZsYWdEaWRSZXBv
cnRDb3N0IHwgc3RyaW5nS2luZCB8IEJ1ZmZlckludGVybmFsIHwgKFN0cmluZ0hhc2hlcjo6Y29t
cHV0ZUxpdGVyYWxIYXNoQW5kTWFza1RvcDhCaXRzKGNoYXJhY3RlcnMpIDw8IHNfZmxhZ0NvdW50
KSkKICAgICAgICAgewogICAgICAgICB9CiAKICAgICAgICAgdGVtcGxhdGU8dW5zaWduZWQgY2hh
cmFjdGVyc0NvdW50PgogICAgICAgICBjb25zdGV4cHIgU3RhdGljU3RyaW5nSW1wbChjb25zdCBj
aGFyMTZfdCAoJmNoYXJhY3RlcnMpW2NoYXJhY3RlcnNDb3VudF0sIFN0cmluZ0tpbmQgc3RyaW5n
S2luZCA9IFN0cmluZ05vcm1hbCkKLSAgICAgICAgICAgIDogbV9yZWZDb3VudChzX3JlZkNvdW50
RmxhZ0lzU3RhdGljU3RyaW5nKQotICAgICAgICAgICAgLCBtX2xlbmd0aChjaGFyYWN0ZXJzQ291
bnQgLSAxKQotICAgICAgICAgICAgLCBtX2RhdGExNihjaGFyYWN0ZXJzKQotICAgICAgICAgICAg
LCBtX2hhc2hBbmRGbGFncyhzdHJpbmdLaW5kIHwgQnVmZmVySW50ZXJuYWwgfCAoU3RyaW5nSGFz
aGVyOjpjb21wdXRlTGl0ZXJhbEhhc2hBbmRNYXNrVG9wOEJpdHMoY2hhcmFjdGVycykgPDwgc19m
bGFnQ291bnQpKQorICAgICAgICAgICAgOiBTdHJpbmdJbXBsU2hhcGUoc19yZWZDb3VudEZsYWdJ
c1N0YXRpY1N0cmluZywgY2hhcmFjdGVyc0NvdW50IC0gMSwgY2hhcmFjdGVycywKKyAgICAgICAg
ICAgICAgICBzX2hhc2hGbGFnRGlkUmVwb3J0Q29zdCB8IHN0cmluZ0tpbmQgfCBCdWZmZXJJbnRl
cm5hbCB8IChTdHJpbmdIYXNoZXI6OmNvbXB1dGVMaXRlcmFsSGFzaEFuZE1hc2tUb3A4Qml0cyhj
aGFyYWN0ZXJzKSA8PCBzX2ZsYWdDb3VudCkpCiAgICAgICAgIHsKICAgICAgICAgfQogCkBAIC01
NjUsMTUgKzYwOCw2IEBAIHB1YmxpYzoKICAgICAgICAgewogICAgICAgICAgICAgcmV0dXJuICpy
ZWludGVycHJldF9jYXN0PFN0cmluZ0ltcGwqPih0aGlzKTsKICAgICAgICAgfQotCi0gICAgICAg
IC8vIFRoZXNlIG1lbWJlciB2YXJpYWJsZXMgbXVzdCBtYXRjaCB0aGUgbGF5b3V0IG9mIFN0cmlu
Z0ltcGwuCi0gICAgICAgIHVuc2lnbmVkIG1fcmVmQ291bnQ7Ci0gICAgICAgIHVuc2lnbmVkIG1f
bGVuZ3RoOwotICAgICAgICB1bmlvbiB7Ci0gICAgICAgICAgICBjb25zdCBjaGFyKiBtX2RhdGE4
OwotICAgICAgICAgICAgY29uc3QgY2hhcjE2X3QqIG1fZGF0YTE2OwotICAgICAgICB9OwotICAg
ICAgICB1bnNpZ25lZCBtX2hhc2hBbmRGbGFnczsKICAgICB9OwogCiAgICAgV1RGX0VYUE9SVERB
VEEgc3RhdGljIFN0YXRpY1N0cmluZ0ltcGwgc19hdG9taWNFbXB0eVN0cmluZzsKQEAgLTczOSwx
MCArNzczLDcgQEAgcHJvdGVjdGVkOgogCiAgICAgLy8gVXNlZCB0byBjcmVhdGUgbmV3IHN5bWJv
bCBzdHJpbmdzIHRoYXQgaG9sZHMgZXhpc3RpbmcgOC1iaXQgW1tEZXNjcmlwdGlvbl1dIHN0cmlu
ZyBhcyBhIHN1YnN0cmluZyBidWZmZXIgKEJ1ZmZlclN1YnN0cmluZykuCiAgICAgU3RyaW5nSW1w
bChDcmVhdGVTeW1ib2xUYWcsIGNvbnN0IExDaGFyKiBjaGFyYWN0ZXJzLCB1bnNpZ25lZCBsZW5n
dGgpCi0gICAgICAgIDogbV9yZWZDb3VudChzX3JlZkNvdW50SW5jcmVtZW50KQotICAgICAgICAs
IG1fbGVuZ3RoKGxlbmd0aCkKLSAgICAgICAgLCBtX2RhdGE4KGNoYXJhY3RlcnMpCi0gICAgICAg
ICwgbV9oYXNoQW5kRmxhZ3Moc19oYXNoRmxhZzhCaXRCdWZmZXIgfCBTdHJpbmdTeW1ib2wgfCBC
dWZmZXJTdWJzdHJpbmcpCisgICAgICAgIDogU3RyaW5nSW1wbFNoYXBlKHNfcmVmQ291bnRJbmNy
ZW1lbnQsIGxlbmd0aCwgY2hhcmFjdGVycywgc19oYXNoRmxhZzhCaXRCdWZmZXIgfCBTdHJpbmdT
eW1ib2wgfCBCdWZmZXJTdWJzdHJpbmcpCiAgICAgewogICAgICAgICBBU1NFUlQoaXM4Qml0KCkp
OwogICAgICAgICBBU1NFUlQobV9kYXRhOCk7CkBAIC03NTEsMTAgKzc4Miw3IEBAIHByb3RlY3Rl
ZDoKIAogICAgIC8vIFVzZWQgdG8gY3JlYXRlIG5ldyBzeW1ib2wgc3RyaW5ncyB0aGF0IGhvbGRz
IGV4aXN0aW5nIDE2LWJpdCBbW0Rlc2NyaXB0aW9uXV0gc3RyaW5nIGFzIGEgc3Vic3RyaW5nIGJ1
ZmZlciAoQnVmZmVyU3Vic3RyaW5nKS4KICAgICBTdHJpbmdJbXBsKENyZWF0ZVN5bWJvbFRhZywg
Y29uc3QgVUNoYXIqIGNoYXJhY3RlcnMsIHVuc2lnbmVkIGxlbmd0aCkKLSAgICAgICAgOiBtX3Jl
ZkNvdW50KHNfcmVmQ291bnRJbmNyZW1lbnQpCi0gICAgICAgICwgbV9sZW5ndGgobGVuZ3RoKQot
ICAgICAgICAsIG1fZGF0YTE2KGNoYXJhY3RlcnMpCi0gICAgICAgICwgbV9oYXNoQW5kRmxhZ3Mo
U3RyaW5nU3ltYm9sIHwgQnVmZmVyU3Vic3RyaW5nKQorICAgICAgICA6IFN0cmluZ0ltcGxTaGFw
ZShzX3JlZkNvdW50SW5jcmVtZW50LCBsZW5ndGgsIGNoYXJhY3RlcnMsIFN0cmluZ1N5bWJvbCB8
IEJ1ZmZlclN1YnN0cmluZykKICAgICB7CiAgICAgICAgIEFTU0VSVCghaXM4Qml0KCkpOwogICAg
ICAgICBBU1NFUlQobV9kYXRhMTYpOwpAQCAtNzYzLDEwICs3OTEsNyBAQCBwcm90ZWN0ZWQ6CiAK
ICAgICAvLyBOdWxsIHN5bWJvbC4KICAgICBTdHJpbmdJbXBsKENyZWF0ZVN5bWJvbFRhZykKLSAg
ICAgICAgOiBtX3JlZkNvdW50KHNfcmVmQ291bnRJbmNyZW1lbnQpCi0gICAgICAgICwgbV9sZW5n
dGgoMCkKLSAgICAgICAgLCBtX2RhdGE4KGVtcHR5KCktPmNoYXJhY3RlcnM4KCkpCi0gICAgICAg
ICwgbV9oYXNoQW5kRmxhZ3Moc19oYXNoRmxhZzhCaXRCdWZmZXIgfCBTdHJpbmdTeW1ib2wgfCBC
dWZmZXJTdWJzdHJpbmcpCisgICAgICAgIDogU3RyaW5nSW1wbFNoYXBlKHNfcmVmQ291bnRJbmNy
ZW1lbnQsIDAsIGVtcHR5KCktPmNoYXJhY3RlcnM4KCksIHNfaGFzaEZsYWc4Qml0QnVmZmVyIHwg
U3RyaW5nU3ltYm9sIHwgQnVmZmVyU3Vic3RyaW5nKQogICAgIHsKICAgICAgICAgQVNTRVJUKGlz
OEJpdCgpKTsKICAgICAgICAgQVNTRVJUKG1fZGF0YTgpOwpAQCAtODU5LDE5ICs4ODQsMTEgQEAg
cHVibGljOgogICAgICAgICBBU1NFUlQoZXhpc3RpbmdIYXNoKCkgPT0gU3RyaW5nSGFzaGVyOjpj
b21wdXRlSGFzaEFuZE1hc2tUb3A4Qml0cyhjaGFyYWN0ZXJzOCgpLCBsZW5ndGgoKSkpOwogICAg
IH0KICNlbmRpZgotCi1wcml2YXRlOgotICAgIC8vIFRoZXNlIG1lbWJlciB2YXJpYWJsZXMgbXVz
dCBtYXRjaCB0aGUgbGF5b3V0IG9mIFN0YXRpY1N0cmluZ0ltcGwuCi0gICAgdW5zaWduZWQgbV9y
ZWZDb3VudDsKLSAgICB1bnNpZ25lZCBtX2xlbmd0aDsKLSAgICB1bmlvbiB7Ci0gICAgICAgIGNv
bnN0IExDaGFyKiBtX2RhdGE4OwotICAgICAgICBjb25zdCBVQ2hhciogbV9kYXRhMTY7Ci0gICAg
fTsKLSAgICBtdXRhYmxlIHVuc2lnbmVkIG1faGFzaEFuZEZsYWdzOwogfTsKIAotc3RhdGljX2Fz
c2VydChzaXplb2YoU3RyaW5nSW1wbCkgPT0gc2l6ZW9mKFN0cmluZ0ltcGw6OlN0YXRpY1N0cmlu
Z0ltcGwpLCAiIik7Cit1c2luZyBTdGF0aWNTdHJpbmdJbXBsID0gU3RyaW5nSW1wbDo6U3RhdGlj
U3RyaW5nSW1wbDsKKworc3RhdGljX2Fzc2VydChzaXplb2YoU3RyaW5nSW1wbCkgPT0gc2l6ZW9m
KFN0YXRpY1N0cmluZ0ltcGwpLCAiIik7CiAKICNpZiAhQVNTRVJUX0RJU0FCTEVECiAvLyBTdHJp
bmdJbXBscyBjcmVhdGVkIGZyb20gU3RhdGljU3RyaW5nSW1wbCB3aWxsIEFTU0VSVApAQCAtMTEz
Niw5ICsxMTUzLDE2IEBAIHRlbXBsYXRlPHVuc2lnbmVkIGxlbmd0aD4gaW5saW5lIGJvb2wgZXEK
ICAgICByZXR1cm4gc3RyaW5nICYmIGVxdWFsTGV0dGVyc0lnbm9yaW5nQVNDSUlDYXNlKCpzdHJp
bmcsIGxvd2VyY2FzZUxldHRlcnMpOwogfQogCisjZGVmaW5lIE1BS0VfU1RBVElDX1NUUklOR19J
TVBMKGNoYXJhY3RlcnMpIChbXSB7IFwKKyAgICAgICAgc3RhdGljIFN0YXRpY1N0cmluZ0ltcGwg
aW1wbChjaGFyYWN0ZXJzKTsgXAorICAgICAgICByZXR1cm4gJmltcGw7IFwKKyAgICB9KCkpCisK
KwogfSAvLyBuYW1lc3BhY2UgV1RGCiAKIHVzaW5nIFdURjo6U3RyaW5nSW1wbDsKK3VzaW5nIFdU
Rjo6U3RhdGljU3RyaW5nSW1wbDsKIHVzaW5nIFdURjo6ZXF1YWw7CiB1c2luZyBXVEY6OlRleHRD
YXNlU2Vuc2l0aXZpdHk7CiB1c2luZyBXVEY6OlRleHRDYXNlU2Vuc2l0aXZlOwpJbmRleDogU291
cmNlL1dURi93dGYvdGV4dC9XVEZTdHJpbmcuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV1RGL3d0
Zi90ZXh0L1dURlN0cmluZy5oCShyZXZpc2lvbiAyMTYyMDUpCisrKyBTb3VyY2UvV1RGL3d0Zi90
ZXh0L1dURlN0cmluZy5oCSh3b3JraW5nIGNvcHkpCkBAIC0xLDYgKzEsNiBAQAogLyoKICAqIChD
KSAxOTk5IExhcnMgS25vbGwgKGtub2xsQGtkZS5vcmcpCi0gKiBDb3B5cmlnaHQgKEMpIDIwMDQt
MjAxNiBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKiBDb3B5cmlnaHQgKEMpIDIw
MDQtMjAxNyBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCiAgKgogICogVGhpcyBsaWJy
YXJ5IGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vcgogICog
bW9kaWZ5IGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIExpYnJhcnkgR2VuZXJhbCBQdWJs
aWMKQEAgLTExNCw4ICsxMTQsMTEgQEAgcHVibGljOgogICAgIFN0cmluZyhSZWY8QXRvbWljU3Ry
aW5nSW1wbD4mJik7CiAgICAgU3RyaW5nKFJlZlB0cjxBdG9taWNTdHJpbmdJbXBsPiYmKTsKIAor
ICAgIFN0cmluZyhTdGF0aWNTdHJpbmdJbXBsJik7CisgICAgU3RyaW5nKFN0YXRpY1N0cmluZ0lt
cGwqKTsKKwogICAgIC8vIENvbnN0cnVjdCBhIHN0cmluZyBmcm9tIGEgY29uc3RhbnQgc3RyaW5n
IGxpdGVyYWwuCi0gICAgV1RGX0VYUE9SVF9TVFJJTkdfQVBJIFN0cmluZyhBU0NJSUxpdGVyYWwg
Y2hhcmFjdGVycyk7CisgICAgV1RGX0VYUE9SVF9TVFJJTkdfQVBJIFN0cmluZyhBU0NJSUxpdGVy
YWwpOwogCiAgICAgLy8gQ29uc3RydWN0IGEgc3RyaW5nIGZyb20gYSBjb25zdGFudCBzdHJpbmcg
bGl0ZXJhbC4KICAgICAvLyBUaGlzIGNvbnN0cnVjdG9yIGlzIHRoZSAiYmlnIiB2ZXJzaW9uLCBh
cyBpdCBwdXQgdGhlIGxlbmd0aCBpbiB0aGUgZnVuY3Rpb24gY2FsbCBhbmQgZ2VuZXJhdGUgYmln
Z2VyIGNvZGUuCkBAIC00ODksNiArNDkyLDggQEAgcHJpdmF0ZToKICAgICBSZWZQdHI8U3RyaW5n
SW1wbD4gbV9pbXBsOwogfTsKIAorc3RhdGljX2Fzc2VydChzaXplb2YoU3RyaW5nKSA9PSBzaXpl
b2Yodm9pZCopLCAiU3RyaW5nIHNob3VsZCBlZmZlY3RpdmVseSBiZSBhIHBvaW50ZXIgdG8gYSBT
dHJpbmdJbXBsLCBhbmQgZWZmaWNpZW50IHRvIHBhc3MgYnkgdmFsdWUiKTsKKwogaW5saW5lIGJv
b2wgb3BlcmF0b3I9PShjb25zdCBTdHJpbmcmIGEsIGNvbnN0IFN0cmluZyYgYikgeyByZXR1cm4g
ZXF1YWwoYS5pbXBsKCksIGIuaW1wbCgpKTsgfQogaW5saW5lIGJvb2wgb3BlcmF0b3I9PShjb25z
dCBTdHJpbmcmIGEsIGNvbnN0IExDaGFyKiBiKSB7IHJldHVybiBlcXVhbChhLmltcGwoKSwgYik7
IH0KIGlubGluZSBib29sIG9wZXJhdG9yPT0oY29uc3QgU3RyaW5nJiBhLCBjb25zdCBjaGFyKiBi
KSB7IHJldHVybiBlcXVhbChhLmltcGwoKSwgcmVpbnRlcnByZXRfY2FzdDxjb25zdCBMQ2hhcio+
KGIpKTsgfQpAQCAtNTU4LDYgKzU2MywxNiBAQCBpbmxpbmUgU3RyaW5nOjpTdHJpbmcoUmVmUHRy
PEF0b21pY1N0cmluCiB7CiB9CiAKK2lubGluZSBTdHJpbmc6OlN0cmluZyhTdGF0aWNTdHJpbmdJ
bXBsJiBpbXBsKQorICAgIDogbV9pbXBsKHJlaW50ZXJwcmV0X2Nhc3Q8U3RyaW5nSW1wbCo+KCZp
bXBsKSkKK3sKK30KKworaW5saW5lIFN0cmluZzo6U3RyaW5nKFN0YXRpY1N0cmluZ0ltcGwqIGlt
cGwpCisgICAgOiBtX2ltcGwocmVpbnRlcnByZXRfY2FzdDxTdHJpbmdJbXBsKj4oaW1wbCkpCit7
Cit9CisKIHRlbXBsYXRlPHNpemVfdCBpbmxpbmVDYXBhY2l0eSwgdHlwZW5hbWUgT3ZlcmZsb3dI
YW5kbGVyPgogU3RyaW5nOjpTdHJpbmcoY29uc3QgVmVjdG9yPFVDaGFyLCBpbmxpbmVDYXBhY2l0
eSwgT3ZlcmZsb3dIYW5kbGVyPiYgdmVjdG9yKQogICAgIDogbV9pbXBsKHZlY3Rvci5zaXplKCkg
PyBTdHJpbmdJbXBsOjpjcmVhdGUodmVjdG9yLmRhdGEoKSwgdmVjdG9yLnNpemUoKSkgOiBSZWY8
U3RyaW5nSW1wbD4oKlN0cmluZ0ltcGw6OmVtcHR5KCkpKQpAQCAtNzI4LDcgKzc0Myw3IEBAIHRl
bXBsYXRlPD4gc3RydWN0IEludGVnZXJUb1N0cmluZ0NvbnZlcnMKICAgICBzdGF0aWMgU3RyaW5n
IGZsdXNoKExDaGFyKiBjaGFyYWN0ZXJzLCB1bnNpZ25lZCBsZW5ndGgsIHZvaWQqKSB7IHJldHVy
biB7IGNoYXJhY3RlcnMsIGxlbmd0aCB9OyB9CiB9OwogCi19Cit9IC8vIG5hbWVzcGFjZSBXVEYK
IAogdXNpbmcgV1RGOjpDU3RyaW5nOwogdXNpbmcgV1RGOjpLZWVwVHJhaWxpbmdaZXJvczsKSW5k
ZXg6IFNvdXJjZS9XVEYvd3RmL3RleHQvaWN1L1RleHRCcmVha0l0ZXJhdG9ySUNVLmgKPT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PQotLS0gU291cmNlL1dURi93dGYvdGV4dC9pY3UvVGV4dEJyZWFrSXRlcmF0b3JJQ1UuaAko
cmV2aXNpb24gMjE2MjA1KQorKysgU291cmNlL1dURi93dGYvdGV4dC9pY3UvVGV4dEJyZWFrSXRl
cmF0b3JJQ1UuaAkod29ya2luZyBjb3B5KQpAQCAtMzEsNyArMzEsNyBAQCBuYW1lc3BhY2UgV1RG
IHsKICNpZiBVU0VfSUNVX0NBUkVUX0lURVJBVE9SCiBzdGF0aWMgU3RyaW5nIGNhcmV0UnVsZXMo
KQogewotICAgIHJldHVybiBBU0NJSUxpdGVyYWwoCisgICAgc3RhdGljIFN0YXRpY1N0cmluZ0lt
cGwgY2FyZXRSdWxlU3RyaW5nKAogICAgICAgICAvLyBUaGlzIHJ1bGUgc2V0IGlzIGJhc2VkIG9u
IGNoYXJhY3Rlci1icmVhayBpdGVyYXRvciBydWxlcyBvZiBJQ1UgNTcKICAgICAgICAgLy8gPGh0
dHA6Ly9zb3VyY2UuaWN1LXByb2plY3Qub3JnL3JlcG9zL2ljdS9pY3UvdGFncy9yZWxlYXNlLTU3
LTEvc291cmNlL2RhdGEvYnJraXRyLz4uCiAgICAgICAgIC8vIFRoZSBtYWpvciBkaWZmZXJlbmNl
cyBmcm9tIHRoZSBvcmlnaW5hbCBvbmVzIGFyZSBsaXN0ZWQgYmVsb3c6CkBAIC0xMjgsNiArMTI4
LDcgQEAgc3RhdGljIFN0cmluZyBjYXJldFJ1bGVzKCkKICAgICAgICAgIiRSSSAkUkkrOyIKICAg
ICAgICAgIiRFbW9qaUZvck1vZHMgWyRFbW9qaVZhciAkRW1vamlNb2RzXSs7IgogICAgICk7Cisg
ICAgcmV0dXJuIGNhcmV0UnVsZVN0cmluZzsKIH0KICNlbmRpZgogCkluZGV4OiBTb3VyY2UvV2Vi
Q29yZS9DaGFuZ2VMb2cKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvQ2hhbmdlTG9nCShy
ZXZpc2lvbiAyMTYyMDUpCisrKyBTb3VyY2UvV2ViQ29yZS9DaGFuZ2VMb2cJKHdvcmtpbmcgY29w
eSkKQEAgLTEsMyArMSwxMzAgQEAKKzIwMTctMDUtMDQgIE1hcmsgTGFtICA8bWFyay5sYW1AYXBw
bGUuY29tPgorCisgICAgICAgIE5ldmVyRGVzdHJveWVkPFN0cmluZz4oQVNDSUlMaXRlcmFsKC4u
LikpIGlzIG5vdCB0aHJlYWQgc2FmZS4KKyAgICAgICAgaHR0cHM6Ly9idWdzLndlYmtpdC5vcmcv
c2hvd19idWcuY2dpP2lkPTE3MTU4NgorICAgICAgICA8cmRhcjovL3Byb2JsZW0vMzE4NzMxOTA+
CisKKyAgICAgICAgUmV2aWV3ZWQgYnkgTk9CT0RZIChPT1BTISkuCisKKyAgICAgICAgTm8gbmV3
IHRlc3RzIGJlY2F1c2Ugd2UncmUganVzdCBjb252ZXJ0aW5nIHVzZXMgb2YgQVNDSUlMaXRlcmFs
IChpbiB0aGUKKyAgICAgICAgaW5zdGFudGlhdGlvbiBvZiBOZXZlckRlc3Ryb3llZDxTdHJpbmc+
IGFuZCBOZXZlckRlc3Ryb3llZDxjb25zdCBTdHJpbmc+KSB0bworICAgICAgICBNQUtFX1NUQVRJ
Q19TVFJJTkdfSU1QTC4KKworICAgICAgICBUaGUgY29ycmVjdG5lc3Mgb2YgdXNpbmcgTUFLRV9T
VEFUSUNfU1RSSU5HX0lNUEwgaXMgdGVzdGVkIGluIHRoZSBuZXdseSBhZGRlZAorICAgICAgICBB
UEkgdGVzdCBpbiB0aGlzIHBhdGNoLgorCisgICAgICAgIEFsc28gY2hhbmdlZCAic3RhdGljIE5l
dmVyRGVzdHJveWVkPEFTQ0lJTGl0ZXJhbD4iIGluc3RhbmNlcyBpbgorICAgICAgICBTUUxpdGVJ
REJCYWNraW5nU3RvcmUuY3BwIHRvICJzdGF0aWMgY29uc3QgY2hhciogY29uc3QiIGJlY2F1c2Ug
dGhleSBhcmUgb25seQorICAgICAgICBldmVyIHVzZWQgdG8gZ2V0IHRoZSB1bmRlcmx5aW5nIGNv
bnN0IGNoYXIqLgorCisgICAgICAgICogTW9kdWxlcy9pbmRleGVkZGIvc2VydmVyL1NRTGl0ZUlE
QkJhY2tpbmdTdG9yZS5jcHA6CisgICAgICAgIChXZWJDb3JlOjpJREJTZXJ2ZXI6OlNRTGl0ZUlE
QkJhY2tpbmdTdG9yZTo6Z2V0UmVjb3JkKToKKyAgICAgICAgKFdlYkNvcmU6OklEQlNlcnZlcjo6
U1FMaXRlSURCQmFja2luZ1N0b3JlOjpjYWNoZWRTdGF0ZW1lbnRGb3JHZXRBbGxPYmplY3RTdG9y
ZVJlY29yZHMpOgorICAgICAgICAqIE1vZHVsZXMvbWVkaWFzdHJlYW0vTWVkaWFFbmRwb2ludFNl
c3Npb25EZXNjcmlwdGlvbi5jcHA6CisgICAgICAgICogTW9kdWxlcy9tZWRpYXN0cmVhbS9SVENS
dHBUcmFuc2NlaXZlci5jcHA6CisgICAgICAgICogTW9kdWxlcy9tZWRpYXN0cmVhbS9TRFBQcm9j
ZXNzb3IuY3BwOgorICAgICAgICAqIE1vZHVsZXMvbmF2aWdhdG9yY29udGVudHV0aWxzL05hdmln
YXRvckNvbnRlbnRVdGlscy5jcHA6CisgICAgICAgIChXZWJDb3JlOjpjdXN0b21IYW5kbGVyc1N0
YXRlU3RyaW5nKToKKyAgICAgICAgKFdlYkNvcmU6Ok5hdmlnYXRvckNvbnRlbnRVdGlsczo6aXNQ
cm90b2NvbEhhbmRsZXJSZWdpc3RlcmVkKToKKyAgICAgICAgKiBNb2R1bGVzL3NwZWVjaC9TcGVl
Y2hTeW50aGVzaXMuY3BwOgorICAgICAgICAoV2ViQ29yZTo6U3BlZWNoU3ludGhlc2lzOjpib3Vu
ZGFyeUV2ZW50T2NjdXJyZWQpOgorICAgICAgICAqIGFjY2Vzc2liaWxpdHkvQWNjZXNzaWJpbGl0
eU1lZGlhQ29udHJvbHMuY3BwOgorICAgICAgICAoV2ViQ29yZTo6QWNjZXNzaWJpbGl0eU1lZGlh
Q29udHJvbDo6Y29udHJvbFR5cGVOYW1lKToKKyAgICAgICAgKFdlYkNvcmU6OkFjY2Vzc2liaWxp
dHlNZWRpYUNvbnRyb2w6OnRpdGxlKToKKyAgICAgICAgKFdlYkNvcmU6OkFjY2Vzc2liaWxpdHlN
ZWRpYUNvbnRyb2xzQ29udGFpbmVyOjplbGVtZW50VHlwZU5hbWUpOgorICAgICAgICAoV2ViQ29y
ZTo6QWNjZXNzaWJpbGl0eU1lZGlhVGltZWxpbmU6OmhlbHBUZXh0KToKKyAgICAgICAgKFdlYkNv
cmU6OkFjY2Vzc2liaWxpdHlNZWRpYVRpbWVEaXNwbGF5OjphY2Nlc3NpYmlsaXR5RGVzY3JpcHRp
b24pOgorICAgICAgICAqIGJpbmRpbmdzL2pzL0pTTGF6eUV2ZW50TGlzdGVuZXIuY3BwOgorICAg
ICAgICAoV2ViQ29yZTo6ZXZlbnRQYXJhbWV0ZXJOYW1lKToKKyAgICAgICAgKiBjb250ZW50ZXh0
ZW5zaW9ucy9Db250ZW50RXh0ZW5zaW9uc0JhY2tlbmQuY3BwOgorICAgICAgICAoV2ViQ29yZTo6
Q29udGVudEV4dGVuc2lvbnM6OkNvbnRlbnRFeHRlbnNpb25zQmFja2VuZDo6ZGlzcGxheU5vbmVD
U1NSdWxlKToKKyAgICAgICAgKiBjc3MvQ1NTRGVmYXVsdFN0eWxlU2hlZXRzLmNwcDoKKyAgICAg
ICAgKFdlYkNvcmU6OnNjcmVlbkV2YWwpOgorICAgICAgICAoV2ViQ29yZTo6cHJpbnRFdmFsKToK
KyAgICAgICAgKiBjc3MvTWVkaWFMaXN0LmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OmFkZFJlc29s
dXRpb25XYXJuaW5nTWVzc2FnZVRvQ29uc29sZSk6CisgICAgICAgICogY3NzL1N0eWxlU2hlZXRD
b250ZW50cy5jcHA6CisgICAgICAgIChXZWJDb3JlOjpTdHlsZVNoZWV0Q29udGVudHM6OnBhcnNl
QXV0aG9yU3R5bGVTaGVldCk6CisgICAgICAgICogZG9tL0RvY3VtZW50LmNwcDoKKyAgICAgICAg
KFdlYkNvcmU6OkRvY3VtZW50OjpyZWFkeVN0YXRlKToKKyAgICAgICAgKiBkb20vTG9hZGFibGVD
bGFzc2ljU2NyaXB0LmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OkxvYWRhYmxlQ2xhc3NpY1Njcmlw
dDo6bm90aWZ5RmluaXNoZWQpOgorICAgICAgICAqIGRvbS9Qc2V1ZG9FbGVtZW50LmNwcDoKKyAg
ICAgICAgKFdlYkNvcmU6OlBzZXVkb0VsZW1lbnQ6OnBzZXVkb0VsZW1lbnROYW1lRm9yRXZlbnRz
KToKKyAgICAgICAgKiBlZGl0aW5nL01hcmt1cEFjY3VtdWxhdG9yLmNwcDoKKyAgICAgICAgKFdl
YkNvcmU6Ok1hcmt1cEFjY3VtdWxhdG9yOjpzaG91bGRBZGROYW1lc3BhY2VFbGVtZW50KToKKyAg
ICAgICAgKiBlZGl0aW5nL2NvY29hL0RhdGFEZXRlY3Rpb24ubW06CisgICAgICAgIChXZWJDb3Jl
OjpEYXRhRGV0ZWN0aW9uOjpkYXRhRGV0ZWN0b3JVUkxQcm90b2NvbCk6CisgICAgICAgICogZWRp
dGluZy9tYXJrdXAuY3BwOgorICAgICAgICAoV2ViQ29yZTo6U3R5bGVkTWFya3VwQWNjdW11bGF0
b3I6OnN0eWxlTm9kZUNsb3NlVGFnKToKKyAgICAgICAgKFdlYkNvcmU6OmNyZWF0ZU1hcmt1cElu
dGVybmFsKToKKyAgICAgICAgKiBodG1sL0Zvcm1Db250cm9sbGVyLmNwcDoKKyAgICAgICAgKFdl
YkNvcmU6OmZvcm1TdGF0ZVNpZ25hdHVyZSk6CisgICAgICAgICogaHRtbC9JbWFnZUlucHV0VHlw
ZS5jcHA6CisgICAgICAgIChXZWJDb3JlOjpJbWFnZUlucHV0VHlwZTo6YXBwZW5kRm9ybURhdGEp
OgorICAgICAgICAqIGh0bWwvY2FudmFzL0NhbnZhc1JlbmRlcmluZ0NvbnRleHQyRC5jcHA6Cisg
ICAgICAgIChXZWJDb3JlOjpDYW52YXNSZW5kZXJpbmdDb250ZXh0MkQ6OnJlYWxpemVTYXZlcyk6
CisgICAgICAgIChXZWJDb3JlOjpDYW52YXNSZW5kZXJpbmdDb250ZXh0MkQ6OmdldEltYWdlRGF0
YSk6CisgICAgICAgICogaHRtbC9wYXJzZXIvWFNTQXVkaXRvci5jcHA6CisgICAgICAgIChXZWJD
b3JlOjpYU1NBdWRpdG9yOjppbml0KToKKyAgICAgICAgKFdlYkNvcmU6OlhTU0F1ZGl0b3I6OmVy
YXNlRGFuZ2Vyb3VzQXR0cmlidXRlc0lmSW5qZWN0ZWQpOgorICAgICAgICAqIGh0bWwvdHJhY2sv
VlRUQ3VlLmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OnN0YXJ0S2V5d29yZCk6CisgICAgICAgIChX
ZWJDb3JlOjptaWRkbGVLZXl3b3JkKToKKyAgICAgICAgKFdlYkNvcmU6OmVuZEtleXdvcmQpOgor
ICAgICAgICAoV2ViQ29yZTo6bGVmdEtleXdvcmQpOgorICAgICAgICAoV2ViQ29yZTo6cmlnaHRL
ZXl3b3JkKToKKyAgICAgICAgKFdlYkNvcmU6OnZlcnRpY2FsR3Jvd2luZ0xlZnRLZXl3b3JkKToK
KyAgICAgICAgKFdlYkNvcmU6OnZlcnRpY2FsR3Jvd2luZ1JpZ2h0S2V5d29yZCk6CisgICAgICAg
IChXZWJDb3JlOjpWVFRDdWU6OmRldGVybWluZVRleHREaXJlY3Rpb24pOgorICAgICAgICAoV2Vi
Q29yZTo6VlRUQ3VlOjptYXJrRnV0dXJlQW5kUGFzdE5vZGVzKToKKyAgICAgICAgKiBpbnNwZWN0
b3IvSW5zcGVjdG9yQ1NTQWdlbnQuY3BwOgorICAgICAgICAoV2ViQ29yZTo6Y29tcHV0ZVBzZXVk
b0NsYXNzTWFzayk6CisgICAgICAgICogaW5zcGVjdG9yL0luc3BlY3RvckluZGV4ZWREQkFnZW50
LmNwcDoKKyAgICAgICAgKiBpbnNwZWN0b3IvSW5zcGVjdG9yUGFnZUFnZW50LmNwcDoKKyAgICAg
ICAgKFdlYkNvcmU6Okluc3BlY3RvclBhZ2VBZ2VudDo6c291cmNlTWFwVVJMRm9yUmVzb3VyY2Up
OgorICAgICAgICAqIGluc3BlY3Rvci9QYWdlRGVidWdnZXJBZ2VudC5jcHA6CisgICAgICAgIChX
ZWJDb3JlOjpQYWdlRGVidWdnZXJBZ2VudDo6c291cmNlTWFwVVJMRm9yU2NyaXB0KToKKyAgICAg
ICAgKiBsb2FkZXIvSW1hZ2VMb2FkZXIuY3BwOgorICAgICAgICAoV2ViQ29yZTo6SW1hZ2VMb2Fk
ZXI6Om5vdGlmeUZpbmlzaGVkKToKKyAgICAgICAgKiBsb2FkZXIvVGV4dFRyYWNrTG9hZGVyLmNw
cDoKKyAgICAgICAgKFdlYkNvcmU6OlRleHRUcmFja0xvYWRlcjo6Y29yc1BvbGljeVByZXZlbnRl
ZExvYWQpOgorICAgICAgICAqIGxvYWRlci9pY29uL0ljb25EYXRhYmFzZS5jcHA6CisgICAgICAg
IChXZWJDb3JlOjpJY29uRGF0YWJhc2U6OmRlZmF1bHREYXRhYmFzZUZpbGVuYW1lKToKKyAgICAg
ICAgKiBwYWdlL0NhcHRpb25Vc2VyUHJlZmVyZW5jZXNNZWRpYUFGLmNwcDoKKyAgICAgICAgKFdl
YkNvcmU6OkNhcHRpb25Vc2VyUHJlZmVyZW5jZXNNZWRpYUFGOjpjYXB0aW9uc1RleHRFZGdlQ1NT
KToKKyAgICAgICAgKiBwYWdlL1NlY3VyaXR5T3JpZ2luLmNwcDoKKyAgICAgICAgKFdlYkNvcmU6
OlNlY3VyaXR5T3JpZ2luOjp1cmxXaXRoVW5pcXVlU2VjdXJpdHlPcmlnaW4pOgorICAgICAgICAq
IHBhZ2UvVXNlckNvbnRlbnRVUkxQYXR0ZXJuLmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OlVzZXJD
b250ZW50VVJMUGF0dGVybjo6cGFyc2UpOgorICAgICAgICAqIHBsYXRmb3JtL01JTUVUeXBlUmVn
aXN0cnkuY3BwOgorICAgICAgICAoV2ViQ29yZTo6ZGVmYXVsdE1JTUVUeXBlKToKKyAgICAgICAg
KiBwbGF0Zm9ybS9hbmltYXRpb24vQW5pbWF0aW9uLmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OkFu
aW1hdGlvbjo6aW5pdGlhbE5hbWUpOgorICAgICAgICAqIHBsYXRmb3JtL2dyYXBoaWNzL2F2Zm91
bmRhdGlvbi9vYmpjL01lZGlhUGxheWVyUHJpdmF0ZU1lZGlhU291cmNlQVZGT2JqQy5tbToKKyAg
ICAgICAgKFdlYkNvcmU6Ok1lZGlhUGxheWVyUHJpdmF0ZU1lZGlhU291cmNlQVZGT2JqQzo6ZW5n
aW5lRGVzY3JpcHRpb24pOgorICAgICAgICAqIHBsYXRmb3JtL2dyYXBoaWNzL2F2Zm91bmRhdGlv
bi9vYmpjL01lZGlhUGxheWVyUHJpdmF0ZU1lZGlhU3RyZWFtQVZGT2JqQy5tbToKKyAgICAgICAg
KFdlYkNvcmU6Ok1lZGlhUGxheWVyUHJpdmF0ZU1lZGlhU3RyZWFtQVZGT2JqQzo6ZW5naW5lRGVz
Y3JpcHRpb24pOgorICAgICAgICAqIHBsYXRmb3JtL2dyYXBoaWNzL2NvY29hL0ZvbnRDYWNoZUNv
cmVUZXh0LmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OkZvbnRDYWNoZTo6c2ltaWxhckZvbnQpOgor
ICAgICAgICAqIHBsYXRmb3JtL2d0ay9Vc2VyQWdlbnRHdGsuY3BwOgorICAgICAgICAoV2ViQ29y
ZTo6cGxhdGZvcm1WZXJzaW9uRm9yVUFTdHJpbmcpOgorICAgICAgICAqIHBsYXRmb3JtL21vY2sv
bWVkaWFzb3VyY2UvTW9ja0JveC5jcHA6CisgICAgICAgIChXZWJDb3JlOjpNb2NrVHJhY2tCb3g6
OnR5cGUpOgorICAgICAgICAoV2ViQ29yZTo6TW9ja0luaXRpYWxpemF0aW9uQm94Ojp0eXBlKToK
KyAgICAgICAgKFdlYkNvcmU6Ok1vY2tTYW1wbGVCb3g6OnR5cGUpOgorICAgICAgICAqIHBsYXRm
b3JtL25ldHdvcmsvSFRUUEhlYWRlclZhbHVlcy5jcHA6CisgICAgICAgIChXZWJDb3JlOjpIVFRQ
SGVhZGVyVmFsdWVzOjp0ZXh0UGxhaW5Db250ZW50VHlwZSk6CisgICAgICAgIChXZWJDb3JlOjpI
VFRQSGVhZGVyVmFsdWVzOjpmb3JtVVJMRW5jb2RlZENvbnRlbnRUeXBlKToKKyAgICAgICAgKFdl
YkNvcmU6OkhUVFBIZWFkZXJWYWx1ZXM6Om5vQ2FjaGUpOgorICAgICAgICAoV2ViQ29yZTo6SFRU
UEhlYWRlclZhbHVlczo6bWF4QWdlMCk6CisgICAgICAgICogcGxhdGZvcm0vbmV0d29yay9IVFRQ
UGFyc2Vycy5jcHA6CisgICAgICAgIChXZWJDb3JlOjpwYXJzZVhTU1Byb3RlY3Rpb25IZWFkZXIp
OgorICAgICAgICAqIHJlcGxheS9NZW1vaXplZERPTVJlc3VsdC5jcHA6CisgICAgICAgIChKU0M6
OklucHV0VHJhaXRzPE1lbW9pemVkRE9NUmVzdWx0QmFzZT46OnR5cGUpOgorICAgICAgICAqIHN2
Zy9TVkdUcmFuc2Zvcm1WYWx1ZS5jcHA6CisgICAgICAgIChXZWJDb3JlOjpTVkdUcmFuc2Zvcm1W
YWx1ZTo6dHJhbnNmb3JtVHlwZVByZWZpeEZvclBhcnNpbmcpOgorCiAyMDE3LTA1LTA0ICBBbnR0
aSBLb2l2aXN0byAgPGFudHRpQGFwcGxlLmNvbT4KIAogICAgICAgICBSRUdSRVNTSU9OIChTYWZh
cmkgMTAuMSk6IFdoZW4gJ3RyYW5zaXRpb24nIGNvbnRhaW5zIC1tcy10cmFuc2Zvcm0sIHRyYW5z
Zm9ybS1vcmlnaW4gaXMgYWxzbyB0cmFuc2l0aW9uZWQKSW5kZXg6IFNvdXJjZS9XZWJDb3JlL01v
ZHVsZXMvaW5kZXhlZGRiL3NlcnZlci9TUUxpdGVJREJCYWNraW5nU3RvcmUuY3BwCj09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT0KLS0tIFNvdXJjZS9XZWJDb3JlL01vZHVsZXMvaW5kZXhlZGRiL3NlcnZlci9TUUxpdGVJREJC
YWNraW5nU3RvcmUuY3BwCShyZXZpc2lvbiAyMTYyMDUpCisrKyBTb3VyY2UvV2ViQ29yZS9Nb2R1
bGVzL2luZGV4ZWRkYi9zZXJ2ZXIvU1FMaXRlSURCQmFja2luZ1N0b3JlLmNwcAkod29ya2luZyBj
b3B5KQpAQCAtMSw1ICsxLDUgQEAKIC8qCi0gKiBDb3B5cmlnaHQgKEMpIDIwMTYgQXBwbGUgSW5j
LiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICogQ29weXJpZ2h0IChDKSAyMDE2LTIwMTcgQXBwbGUg
SW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgogICoKICAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2Ug
aW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAogICogbW9kaWZpY2F0
aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25z
CkBAIC0xODk5LDE1ICsxODk5LDE1IEBAIElEQkVycm9yIFNRTGl0ZUlEQkJhY2tpbmdTdG9yZTo6
Z2V0UmVjb3IKICAgICBpbnQ2NF90IHJlY29yZElEID0gMDsKICAgICBUaHJlYWRTYWZlRGF0YUJ1
ZmZlciByZXN1bHRCdWZmZXI7CiAgICAgewotICAgICAgICBzdGF0aWMgTmV2ZXJEZXN0cm95ZWQ8
QVNDSUlMaXRlcmFsPiBsb3dlck9wZW5VcHBlck9wZW4oIlNFTEVDVCB2YWx1ZSwgUk9XSUQgRlJP
TSBSZWNvcmRzIFdIRVJFIG9iamVjdFN0b3JlSUQgPSA/IEFORCBrZXkgPiBDQVNUKD8gQVMgVEVY
VCkgQU5EIGtleSA8IENBU1QoPyBBUyBURVhUKSBPUkRFUiBCWSBrZXk7Iik7Ci0gICAgICAgIHN0
YXRpYyBOZXZlckRlc3Ryb3llZDxBU0NJSUxpdGVyYWw+IGxvd2VyT3BlblVwcGVyQ2xvc2VkKCJT
RUxFQ1QgdmFsdWUsIFJPV0lEIEZST00gUmVjb3JkcyBXSEVSRSBvYmplY3RTdG9yZUlEID0gPyBB
TkQga2V5ID4gQ0FTVCg/IEFTIFRFWFQpIEFORCBrZXkgPD0gQ0FTVCg/IEFTIFRFWFQpIE9SREVS
IEJZIGtleTsiKTsKLSAgICAgICAgc3RhdGljIE5ldmVyRGVzdHJveWVkPEFTQ0lJTGl0ZXJhbD4g
bG93ZXJDbG9zZWRVcHBlck9wZW4oIlNFTEVDVCB2YWx1ZSwgUk9XSUQgRlJPTSBSZWNvcmRzIFdI
RVJFIG9iamVjdFN0b3JlSUQgPSA/IEFORCBrZXkgPj0gQ0FTVCg/IEFTIFRFWFQpIEFORCBrZXkg
PCBDQVNUKD8gQVMgVEVYVCkgT1JERVIgQlkga2V5OyIpOwotICAgICAgICBzdGF0aWMgTmV2ZXJE
ZXN0cm95ZWQ8QVNDSUlMaXRlcmFsPiBsb3dlckNsb3NlZFVwcGVyQ2xvc2VkKCJTRUxFQ1QgdmFs
dWUsIFJPV0lEIEZST00gUmVjb3JkcyBXSEVSRSBvYmplY3RTdG9yZUlEID0gPyBBTkQga2V5ID49
IENBU1QoPyBBUyBURVhUKSBBTkQga2V5IDw9IENBU1QoPyBBUyBURVhUKSBPUkRFUiBCWSBrZXk7
Iik7Ci0KLSAgICAgICAgc3RhdGljIE5ldmVyRGVzdHJveWVkPEFTQ0lJTGl0ZXJhbD4gbG93ZXJP
cGVuVXBwZXJPcGVuS2V5T25seSgiU0VMRUNUIGtleSBGUk9NIFJlY29yZHMgV0hFUkUgb2JqZWN0
U3RvcmVJRCA9ID8gQU5EIGtleSA+IENBU1QoPyBBUyBURVhUKSBBTkQga2V5IDwgQ0FTVCg/IEFT
IFRFWFQpIE9SREVSIEJZIGtleTsiKTsKLSAgICAgICAgc3RhdGljIE5ldmVyRGVzdHJveWVkPEFT
Q0lJTGl0ZXJhbD4gbG93ZXJPcGVuVXBwZXJDbG9zZWRLZXlPbmx5KCJTRUxFQ1Qga2V5IEZST00g
UmVjb3JkcyBXSEVSRSBvYmplY3RTdG9yZUlEID0gPyBBTkQga2V5ID4gQ0FTVCg/IEFTIFRFWFQp
IEFORCBrZXkgPD0gQ0FTVCg/IEFTIFRFWFQpIE9SREVSIEJZIGtleTsiKTsKLSAgICAgICAgc3Rh
dGljIE5ldmVyRGVzdHJveWVkPEFTQ0lJTGl0ZXJhbD4gbG93ZXJDbG9zZWRVcHBlck9wZW5LZXlP
bmx5KCJTRUxFQ1Qga2V5IEZST00gUmVjb3JkcyBXSEVSRSBvYmplY3RTdG9yZUlEID0gPyBBTkQg
a2V5ID49IENBU1QoPyBBUyBURVhUKSBBTkQga2V5IDwgQ0FTVCg/IEFTIFRFWFQpIE9SREVSIEJZ
IGtleTsiKTsKLSAgICAgICAgc3RhdGljIE5ldmVyRGVzdHJveWVkPEFTQ0lJTGl0ZXJhbD4gbG93
ZXJDbG9zZWRVcHBlckNsb3NlZEtleU9ubHkoIlNFTEVDVCBrZXkgRlJPTSBSZWNvcmRzIFdIRVJF
IG9iamVjdFN0b3JlSUQgPSA/IEFORCBrZXkgPj0gQ0FTVCg/IEFTIFRFWFQpIEFORCBrZXkgPD0g
Q0FTVCg/IEFTIFRFWFQpIE9SREVSIEJZIGtleTsiKTsKKyAgICAgICAgc3RhdGljIGNvbnN0IGNo
YXIqIGNvbnN0IGxvd2VyT3BlblVwcGVyT3BlbiA9ICJTRUxFQ1QgdmFsdWUsIFJPV0lEIEZST00g
UmVjb3JkcyBXSEVSRSBvYmplY3RTdG9yZUlEID0gPyBBTkQga2V5ID4gQ0FTVCg/IEFTIFRFWFQp
IEFORCBrZXkgPCBDQVNUKD8gQVMgVEVYVCkgT1JERVIgQlkga2V5OyI7CisgICAgICAgIHN0YXRp
YyBjb25zdCBjaGFyKiBjb25zdCBsb3dlck9wZW5VcHBlckNsb3NlZCA9ICJTRUxFQ1QgdmFsdWUs
IFJPV0lEIEZST00gUmVjb3JkcyBXSEVSRSBvYmplY3RTdG9yZUlEID0gPyBBTkQga2V5ID4gQ0FT
VCg/IEFTIFRFWFQpIEFORCBrZXkgPD0gQ0FTVCg/IEFTIFRFWFQpIE9SREVSIEJZIGtleTsiOwor
ICAgICAgICBzdGF0aWMgY29uc3QgY2hhciogY29uc3QgbG93ZXJDbG9zZWRVcHBlck9wZW4gPSAi
U0VMRUNUIHZhbHVlLCBST1dJRCBGUk9NIFJlY29yZHMgV0hFUkUgb2JqZWN0U3RvcmVJRCA9ID8g
QU5EIGtleSA+PSBDQVNUKD8gQVMgVEVYVCkgQU5EIGtleSA8IENBU1QoPyBBUyBURVhUKSBPUkRF
UiBCWSBrZXk7IjsKKyAgICAgICAgc3RhdGljIGNvbnN0IGNoYXIqIGNvbnN0IGxvd2VyQ2xvc2Vk
VXBwZXJDbG9zZWQgPSAiU0VMRUNUIHZhbHVlLCBST1dJRCBGUk9NIFJlY29yZHMgV0hFUkUgb2Jq
ZWN0U3RvcmVJRCA9ID8gQU5EIGtleSA+PSBDQVNUKD8gQVMgVEVYVCkgQU5EIGtleSA8PSBDQVNU
KD8gQVMgVEVYVCkgT1JERVIgQlkga2V5OyI7CisKKyAgICAgICAgc3RhdGljIGNvbnN0IGNoYXIq
IGNvbnN0IGxvd2VyT3BlblVwcGVyT3BlbktleU9ubHkgPSAiU0VMRUNUIGtleSBGUk9NIFJlY29y
ZHMgV0hFUkUgb2JqZWN0U3RvcmVJRCA9ID8gQU5EIGtleSA+IENBU1QoPyBBUyBURVhUKSBBTkQg
a2V5IDwgQ0FTVCg/IEFTIFRFWFQpIE9SREVSIEJZIGtleTsiOworICAgICAgICBzdGF0aWMgY29u
c3QgY2hhciogY29uc3QgbG93ZXJPcGVuVXBwZXJDbG9zZWRLZXlPbmx5ID0gIlNFTEVDVCBrZXkg
RlJPTSBSZWNvcmRzIFdIRVJFIG9iamVjdFN0b3JlSUQgPSA/IEFORCBrZXkgPiBDQVNUKD8gQVMg
VEVYVCkgQU5EIGtleSA8PSBDQVNUKD8gQVMgVEVYVCkgT1JERVIgQlkga2V5OyI7CisgICAgICAg
IHN0YXRpYyBjb25zdCBjaGFyKiBjb25zdCBsb3dlckNsb3NlZFVwcGVyT3BlbktleU9ubHkgPSAi
U0VMRUNUIGtleSBGUk9NIFJlY29yZHMgV0hFUkUgb2JqZWN0U3RvcmVJRCA9ID8gQU5EIGtleSA+
PSBDQVNUKD8gQVMgVEVYVCkgQU5EIGtleSA8IENBU1QoPyBBUyBURVhUKSBPUkRFUiBCWSBrZXk7
IjsKKyAgICAgICAgc3RhdGljIGNvbnN0IGNoYXIqIGNvbnN0IGxvd2VyQ2xvc2VkVXBwZXJDbG9z
ZWRLZXlPbmx5ID0gIlNFTEVDVCBrZXkgRlJPTSBSZWNvcmRzIFdIRVJFIG9iamVjdFN0b3JlSUQg
PSA/IEFORCBrZXkgPj0gQ0FTVCg/IEFTIFRFWFQpIEFORCBrZXkgPD0gQ0FTVCg/IEFTIFRFWFQp
IE9SREVSIEJZIGtleTsiOwogCiAgICAgICAgIFNRTGl0ZVN0YXRlbWVudCogc3FsID0gbnVsbHB0
cjsKIApAQCAtMTkxNSwyNyArMTkxNSwyNyBAQCBJREJFcnJvciBTUUxpdGVJREJCYWNraW5nU3Rv
cmU6OmdldFJlY29yCiAgICAgICAgIGNhc2UgSURCR2V0UmVjb3JkRGF0YVR5cGU6OktleUFuZFZh
bHVlOgogICAgICAgICAgICAgaWYgKGtleVJhbmdlLmxvd2VyT3BlbikgewogICAgICAgICAgICAg
ICAgIGlmIChrZXlSYW5nZS51cHBlck9wZW4pCi0gICAgICAgICAgICAgICAgICAgIHNxbCA9IGNh
Y2hlZFN0YXRlbWVudChTUUw6OkdldFZhbHVlUmVjb3Jkc0xvd2VyT3BlblVwcGVyT3BlbiwgbG93
ZXJPcGVuVXBwZXJPcGVuLmdldCgpKTsKKyAgICAgICAgICAgICAgICAgICAgc3FsID0gY2FjaGVk
U3RhdGVtZW50KFNRTDo6R2V0VmFsdWVSZWNvcmRzTG93ZXJPcGVuVXBwZXJPcGVuLCBsb3dlck9w
ZW5VcHBlck9wZW4pOwogICAgICAgICAgICAgICAgIGVsc2UKLSAgICAgICAgICAgICAgICAgICAg
c3FsID0gY2FjaGVkU3RhdGVtZW50KFNRTDo6R2V0VmFsdWVSZWNvcmRzTG93ZXJPcGVuVXBwZXJD
bG9zZWQsIGxvd2VyT3BlblVwcGVyQ2xvc2VkLmdldCgpKTsKKyAgICAgICAgICAgICAgICAgICAg
c3FsID0gY2FjaGVkU3RhdGVtZW50KFNRTDo6R2V0VmFsdWVSZWNvcmRzTG93ZXJPcGVuVXBwZXJD
bG9zZWQsIGxvd2VyT3BlblVwcGVyQ2xvc2VkKTsKICAgICAgICAgICAgIH0gZWxzZSB7CiAgICAg
ICAgICAgICAgICAgaWYgKGtleVJhbmdlLnVwcGVyT3BlbikKLSAgICAgICAgICAgICAgICAgICAg
c3FsID0gY2FjaGVkU3RhdGVtZW50KFNRTDo6R2V0VmFsdWVSZWNvcmRzTG93ZXJDbG9zZWRVcHBl
ck9wZW4sIGxvd2VyQ2xvc2VkVXBwZXJPcGVuLmdldCgpKTsKKyAgICAgICAgICAgICAgICAgICAg
c3FsID0gY2FjaGVkU3RhdGVtZW50KFNRTDo6R2V0VmFsdWVSZWNvcmRzTG93ZXJDbG9zZWRVcHBl
ck9wZW4sIGxvd2VyQ2xvc2VkVXBwZXJPcGVuKTsKICAgICAgICAgICAgICAgICBlbHNlCi0gICAg
ICAgICAgICAgICAgICAgIHNxbCA9IGNhY2hlZFN0YXRlbWVudChTUUw6OkdldFZhbHVlUmVjb3Jk
c0xvd2VyQ2xvc2VkVXBwZXJDbG9zZWQsIGxvd2VyQ2xvc2VkVXBwZXJDbG9zZWQuZ2V0KCkpOwor
ICAgICAgICAgICAgICAgICAgICBzcWwgPSBjYWNoZWRTdGF0ZW1lbnQoU1FMOjpHZXRWYWx1ZVJl
Y29yZHNMb3dlckNsb3NlZFVwcGVyQ2xvc2VkLCBsb3dlckNsb3NlZFVwcGVyQ2xvc2VkKTsKICAg
ICAgICAgICAgIH0KICAgICAgICAgICAgIGJyZWFrOwogICAgICAgICBjYXNlIElEQkdldFJlY29y
ZERhdGFUeXBlOjpLZXlPbmx5OgogICAgICAgICAgICAgaWYgKGtleVJhbmdlLmxvd2VyT3Blbikg
ewogICAgICAgICAgICAgICAgIGlmIChrZXlSYW5nZS51cHBlck9wZW4pCi0gICAgICAgICAgICAg
ICAgICAgIHNxbCA9IGNhY2hlZFN0YXRlbWVudChTUUw6OkdldEtleVJlY29yZHNMb3dlck9wZW5V
cHBlck9wZW4sIGxvd2VyT3BlblVwcGVyT3BlbktleU9ubHkuZ2V0KCkpOworICAgICAgICAgICAg
ICAgICAgICBzcWwgPSBjYWNoZWRTdGF0ZW1lbnQoU1FMOjpHZXRLZXlSZWNvcmRzTG93ZXJPcGVu
VXBwZXJPcGVuLCBsb3dlck9wZW5VcHBlck9wZW5LZXlPbmx5KTsKICAgICAgICAgICAgICAgICBl
bHNlCi0gICAgICAgICAgICAgICAgICAgIHNxbCA9IGNhY2hlZFN0YXRlbWVudChTUUw6OkdldEtl
eVJlY29yZHNMb3dlck9wZW5VcHBlckNsb3NlZCwgbG93ZXJPcGVuVXBwZXJDbG9zZWRLZXlPbmx5
LmdldCgpKTsKKyAgICAgICAgICAgICAgICAgICAgc3FsID0gY2FjaGVkU3RhdGVtZW50KFNRTDo6
R2V0S2V5UmVjb3Jkc0xvd2VyT3BlblVwcGVyQ2xvc2VkLCBsb3dlck9wZW5VcHBlckNsb3NlZEtl
eU9ubHkpOwogICAgICAgICAgICAgfSBlbHNlIHsKICAgICAgICAgICAgICAgICBpZiAoa2V5UmFu
Z2UudXBwZXJPcGVuKQotICAgICAgICAgICAgICAgICAgICBzcWwgPSBjYWNoZWRTdGF0ZW1lbnQo
U1FMOjpHZXRLZXlSZWNvcmRzTG93ZXJDbG9zZWRVcHBlck9wZW4sIGxvd2VyQ2xvc2VkVXBwZXJP
cGVuS2V5T25seS5nZXQoKSk7CisgICAgICAgICAgICAgICAgICAgIHNxbCA9IGNhY2hlZFN0YXRl
bWVudChTUUw6OkdldEtleVJlY29yZHNMb3dlckNsb3NlZFVwcGVyT3BlbiwgbG93ZXJDbG9zZWRV
cHBlck9wZW5LZXlPbmx5KTsKICAgICAgICAgICAgICAgICBlbHNlCi0gICAgICAgICAgICAgICAg
ICAgIHNxbCA9IGNhY2hlZFN0YXRlbWVudChTUUw6OkdldEtleVJlY29yZHNMb3dlckNsb3NlZFVw
cGVyQ2xvc2VkLCBsb3dlckNsb3NlZFVwcGVyQ2xvc2VkS2V5T25seS5nZXQoKSk7CisgICAgICAg
ICAgICAgICAgICAgIHNxbCA9IGNhY2hlZFN0YXRlbWVudChTUUw6OkdldEtleVJlY29yZHNMb3dl
ckNsb3NlZFVwcGVyQ2xvc2VkLCBsb3dlckNsb3NlZFVwcGVyQ2xvc2VkS2V5T25seSk7CiAgICAg
ICAgICAgICB9CiAgICAgICAgIH0KIApAQCAtMjAwMywzNiArMjAwMywzNiBAQCBJREJFcnJvciBT
UUxpdGVJREJCYWNraW5nU3RvcmU6OmdldEFsbFJlCiAKIFNRTGl0ZVN0YXRlbWVudCogU1FMaXRl
SURCQmFja2luZ1N0b3JlOjpjYWNoZWRTdGF0ZW1lbnRGb3JHZXRBbGxPYmplY3RTdG9yZVJlY29y
ZHMoY29uc3QgSURCR2V0QWxsUmVjb3Jkc0RhdGEmIGdldEFsbFJlY29yZHNEYXRhKQogewotICAg
IHN0YXRpYyBOZXZlckRlc3Ryb3llZDxBU0NJSUxpdGVyYWw+IGxvd2VyT3BlblVwcGVyT3Blbktl
eSgiU0VMRUNUIGtleSBGUk9NIFJlY29yZHMgV0hFUkUgb2JqZWN0U3RvcmVJRCA9ID8gQU5EIGtl
eSA+IENBU1QoPyBBUyBURVhUKSBBTkQga2V5IDwgQ0FTVCg/IEFTIFRFWFQpIE9SREVSIEJZIGtl
eTsiKTsKLSAgICBzdGF0aWMgTmV2ZXJEZXN0cm95ZWQ8QVNDSUlMaXRlcmFsPiBsb3dlck9wZW5V
cHBlckNsb3NlZEtleSgiU0VMRUNUIGtleSBGUk9NIFJlY29yZHMgV0hFUkUgb2JqZWN0U3RvcmVJ
RCA9ID8gQU5EIGtleSA+IENBU1QoPyBBUyBURVhUKSBBTkQga2V5IDw9IENBU1QoPyBBUyBURVhU
KSBPUkRFUiBCWSBrZXk7Iik7Ci0gICAgc3RhdGljIE5ldmVyRGVzdHJveWVkPEFTQ0lJTGl0ZXJh
bD4gbG93ZXJDbG9zZWRVcHBlck9wZW5LZXkoIlNFTEVDVCBrZXkgRlJPTSBSZWNvcmRzIFdIRVJF
IG9iamVjdFN0b3JlSUQgPSA/IEFORCBrZXkgPj0gQ0FTVCg/IEFTIFRFWFQpIEFORCBrZXkgPCBD
QVNUKD8gQVMgVEVYVCkgT1JERVIgQlkga2V5OyIpOwotICAgIHN0YXRpYyBOZXZlckRlc3Ryb3ll
ZDxBU0NJSUxpdGVyYWw+IGxvd2VyQ2xvc2VkVXBwZXJDbG9zZWRLZXkoIlNFTEVDVCBrZXkgRlJP
TSBSZWNvcmRzIFdIRVJFIG9iamVjdFN0b3JlSUQgPSA/IEFORCBrZXkgPj0gQ0FTVCg/IEFTIFRF
WFQpIEFORCBrZXkgPD0gQ0FTVCg/IEFTIFRFWFQpIE9SREVSIEJZIGtleTsiKTsKLSAgICBzdGF0
aWMgTmV2ZXJEZXN0cm95ZWQ8QVNDSUlMaXRlcmFsPiBsb3dlck9wZW5VcHBlck9wZW5WYWx1ZSgi
U0VMRUNUIHZhbHVlLCBST1dJRCBGUk9NIFJlY29yZHMgV0hFUkUgb2JqZWN0U3RvcmVJRCA9ID8g
QU5EIGtleSA+IENBU1QoPyBBUyBURVhUKSBBTkQga2V5IDwgQ0FTVCg/IEFTIFRFWFQpIE9SREVS
IEJZIGtleTsiKTsKLSAgICBzdGF0aWMgTmV2ZXJEZXN0cm95ZWQ8QVNDSUlMaXRlcmFsPiBsb3dl
ck9wZW5VcHBlckNsb3NlZFZhbHVlKCJTRUxFQ1QgdmFsdWUsIFJPV0lEIEZST00gUmVjb3JkcyBX
SEVSRSBvYmplY3RTdG9yZUlEID0gPyBBTkQga2V5ID4gQ0FTVCg/IEFTIFRFWFQpIEFORCBrZXkg
PD0gQ0FTVCg/IEFTIFRFWFQpIE9SREVSIEJZIGtleTsiKTsKLSAgICBzdGF0aWMgTmV2ZXJEZXN0
cm95ZWQ8QVNDSUlMaXRlcmFsPiBsb3dlckNsb3NlZFVwcGVyT3BlblZhbHVlKCJTRUxFQ1QgdmFs
dWUsIFJPV0lEIEZST00gUmVjb3JkcyBXSEVSRSBvYmplY3RTdG9yZUlEID0gPyBBTkQga2V5ID49
IENBU1QoPyBBUyBURVhUKSBBTkQga2V5IDwgQ0FTVCg/IEFTIFRFWFQpIE9SREVSIEJZIGtleTsi
KTsKLSAgICBzdGF0aWMgTmV2ZXJEZXN0cm95ZWQ8QVNDSUlMaXRlcmFsPiBsb3dlckNsb3NlZFVw
cGVyQ2xvc2VkVmFsdWUoIlNFTEVDVCB2YWx1ZSwgUk9XSUQgRlJPTSBSZWNvcmRzIFdIRVJFIG9i
amVjdFN0b3JlSUQgPSA/IEFORCBrZXkgPj0gQ0FTVCg/IEFTIFRFWFQpIEFORCBrZXkgPD0gQ0FT
VCg/IEFTIFRFWFQpIE9SREVSIEJZIGtleTsiKTsKKyAgICBzdGF0aWMgY29uc3QgY2hhciogY29u
c3QgbG93ZXJPcGVuVXBwZXJPcGVuS2V5ID0iU0VMRUNUIGtleSBGUk9NIFJlY29yZHMgV0hFUkUg
b2JqZWN0U3RvcmVJRCA9ID8gQU5EIGtleSA+IENBU1QoPyBBUyBURVhUKSBBTkQga2V5IDwgQ0FT
VCg/IEFTIFRFWFQpIE9SREVSIEJZIGtleTsiOworICAgIHN0YXRpYyBjb25zdCBjaGFyKiBjb25z
dCBsb3dlck9wZW5VcHBlckNsb3NlZEtleSA9ICJTRUxFQ1Qga2V5IEZST00gUmVjb3JkcyBXSEVS
RSBvYmplY3RTdG9yZUlEID0gPyBBTkQga2V5ID4gQ0FTVCg/IEFTIFRFWFQpIEFORCBrZXkgPD0g
Q0FTVCg/IEFTIFRFWFQpIE9SREVSIEJZIGtleTsiOworICAgIHN0YXRpYyBjb25zdCBjaGFyKiBj
b25zdCBsb3dlckNsb3NlZFVwcGVyT3BlbktleSA9ICJTRUxFQ1Qga2V5IEZST00gUmVjb3JkcyBX
SEVSRSBvYmplY3RTdG9yZUlEID0gPyBBTkQga2V5ID49IENBU1QoPyBBUyBURVhUKSBBTkQga2V5
IDwgQ0FTVCg/IEFTIFRFWFQpIE9SREVSIEJZIGtleTsiOworICAgIHN0YXRpYyBjb25zdCBjaGFy
KiBjb25zdCBsb3dlckNsb3NlZFVwcGVyQ2xvc2VkS2V5ID0gIlNFTEVDVCBrZXkgRlJPTSBSZWNv
cmRzIFdIRVJFIG9iamVjdFN0b3JlSUQgPSA/IEFORCBrZXkgPj0gQ0FTVCg/IEFTIFRFWFQpIEFO
RCBrZXkgPD0gQ0FTVCg/IEFTIFRFWFQpIE9SREVSIEJZIGtleTsiOworICAgIHN0YXRpYyBjb25z
dCBjaGFyKiBjb25zdCBsb3dlck9wZW5VcHBlck9wZW5WYWx1ZSA9ICJTRUxFQ1QgdmFsdWUsIFJP
V0lEIEZST00gUmVjb3JkcyBXSEVSRSBvYmplY3RTdG9yZUlEID0gPyBBTkQga2V5ID4gQ0FTVCg/
IEFTIFRFWFQpIEFORCBrZXkgPCBDQVNUKD8gQVMgVEVYVCkgT1JERVIgQlkga2V5OyI7CisgICAg
c3RhdGljIGNvbnN0IGNoYXIqIGNvbnN0IGxvd2VyT3BlblVwcGVyQ2xvc2VkVmFsdWUgPSAiU0VM
RUNUIHZhbHVlLCBST1dJRCBGUk9NIFJlY29yZHMgV0hFUkUgb2JqZWN0U3RvcmVJRCA9ID8gQU5E
IGtleSA+IENBU1QoPyBBUyBURVhUKSBBTkQga2V5IDw9IENBU1QoPyBBUyBURVhUKSBPUkRFUiBC
WSBrZXk7IjsKKyAgICBzdGF0aWMgY29uc3QgY2hhciogY29uc3QgbG93ZXJDbG9zZWRVcHBlck9w
ZW5WYWx1ZSA9ICJTRUxFQ1QgdmFsdWUsIFJPV0lEIEZST00gUmVjb3JkcyBXSEVSRSBvYmplY3RT
dG9yZUlEID0gPyBBTkQga2V5ID49IENBU1QoPyBBUyBURVhUKSBBTkQga2V5IDwgQ0FTVCg/IEFT
IFRFWFQpIE9SREVSIEJZIGtleTsiOworICAgIHN0YXRpYyBjb25zdCBjaGFyKiBjb25zdCBsb3dl
ckNsb3NlZFVwcGVyQ2xvc2VkVmFsdWUgPSAiU0VMRUNUIHZhbHVlLCBST1dJRCBGUk9NIFJlY29y
ZHMgV0hFUkUgb2JqZWN0U3RvcmVJRCA9ID8gQU5EIGtleSA+PSBDQVNUKD8gQVMgVEVYVCkgQU5E
IGtleSA8PSBDQVNUKD8gQVMgVEVYVCkgT1JERVIgQlkga2V5OyI7CiAKICAgICBpZiAoZ2V0QWxs
UmVjb3Jkc0RhdGEuZ2V0QWxsVHlwZSA9PSBJbmRleGVkREI6OkdldEFsbFR5cGU6OktleXMpIHsK
ICAgICAgICAgaWYgKGdldEFsbFJlY29yZHNEYXRhLmtleVJhbmdlRGF0YS5sb3dlck9wZW4pIHsK
ICAgICAgICAgICAgIGlmIChnZXRBbGxSZWNvcmRzRGF0YS5rZXlSYW5nZURhdGEudXBwZXJPcGVu
KQotICAgICAgICAgICAgICAgIHJldHVybiBjYWNoZWRTdGF0ZW1lbnQoU1FMOjpHZXRBbGxLZXlS
ZWNvcmRzTG93ZXJPcGVuVXBwZXJPcGVuLCBsb3dlck9wZW5VcHBlck9wZW5LZXkuZ2V0KCkpOwot
ICAgICAgICAgICAgcmV0dXJuIGNhY2hlZFN0YXRlbWVudChTUUw6OkdldEFsbEtleVJlY29yZHNM
b3dlck9wZW5VcHBlckNsb3NlZCwgbG93ZXJPcGVuVXBwZXJDbG9zZWRLZXkuZ2V0KCkpOworICAg
ICAgICAgICAgICAgIHJldHVybiBjYWNoZWRTdGF0ZW1lbnQoU1FMOjpHZXRBbGxLZXlSZWNvcmRz
TG93ZXJPcGVuVXBwZXJPcGVuLCBsb3dlck9wZW5VcHBlck9wZW5LZXkpOworICAgICAgICAgICAg
cmV0dXJuIGNhY2hlZFN0YXRlbWVudChTUUw6OkdldEFsbEtleVJlY29yZHNMb3dlck9wZW5VcHBl
ckNsb3NlZCwgbG93ZXJPcGVuVXBwZXJDbG9zZWRLZXkpOwogICAgICAgICB9CiAKICAgICAgICAg
aWYgKGdldEFsbFJlY29yZHNEYXRhLmtleVJhbmdlRGF0YS51cHBlck9wZW4pCi0gICAgICAgICAg
ICByZXR1cm4gY2FjaGVkU3RhdGVtZW50KFNRTDo6R2V0QWxsS2V5UmVjb3Jkc0xvd2VyQ2xvc2Vk
VXBwZXJPcGVuLCBsb3dlckNsb3NlZFVwcGVyT3BlbktleS5nZXQoKSk7Ci0gICAgICAgIHJldHVy
biBjYWNoZWRTdGF0ZW1lbnQoU1FMOjpHZXRBbGxLZXlSZWNvcmRzTG93ZXJDbG9zZWRVcHBlckNs
b3NlZCwgbG93ZXJDbG9zZWRVcHBlckNsb3NlZEtleS5nZXQoKSk7CisgICAgICAgICAgICByZXR1
cm4gY2FjaGVkU3RhdGVtZW50KFNRTDo6R2V0QWxsS2V5UmVjb3Jkc0xvd2VyQ2xvc2VkVXBwZXJP
cGVuLCBsb3dlckNsb3NlZFVwcGVyT3BlbktleSk7CisgICAgICAgIHJldHVybiBjYWNoZWRTdGF0
ZW1lbnQoU1FMOjpHZXRBbGxLZXlSZWNvcmRzTG93ZXJDbG9zZWRVcHBlckNsb3NlZCwgbG93ZXJD
bG9zZWRVcHBlckNsb3NlZEtleSk7CiAgICAgfQogCiAgICAgaWYgKGdldEFsbFJlY29yZHNEYXRh
LmtleVJhbmdlRGF0YS5sb3dlck9wZW4pIHsKICAgICAgICAgaWYgKGdldEFsbFJlY29yZHNEYXRh
LmtleVJhbmdlRGF0YS51cHBlck9wZW4pCi0gICAgICAgICAgICByZXR1cm4gY2FjaGVkU3RhdGVt
ZW50KFNRTDo6R2V0VmFsdWVSZWNvcmRzTG93ZXJPcGVuVXBwZXJPcGVuLCBsb3dlck9wZW5VcHBl
ck9wZW5WYWx1ZS5nZXQoKSk7Ci0gICAgICAgIHJldHVybiBjYWNoZWRTdGF0ZW1lbnQoU1FMOjpH
ZXRWYWx1ZVJlY29yZHNMb3dlck9wZW5VcHBlckNsb3NlZCwgbG93ZXJPcGVuVXBwZXJDbG9zZWRW
YWx1ZS5nZXQoKSk7CisgICAgICAgICAgICByZXR1cm4gY2FjaGVkU3RhdGVtZW50KFNRTDo6R2V0
VmFsdWVSZWNvcmRzTG93ZXJPcGVuVXBwZXJPcGVuLCBsb3dlck9wZW5VcHBlck9wZW5WYWx1ZSk7
CisgICAgICAgIHJldHVybiBjYWNoZWRTdGF0ZW1lbnQoU1FMOjpHZXRWYWx1ZVJlY29yZHNMb3dl
ck9wZW5VcHBlckNsb3NlZCwgbG93ZXJPcGVuVXBwZXJDbG9zZWRWYWx1ZSk7CiAgICAgfQogCiAg
ICAgaWYgKGdldEFsbFJlY29yZHNEYXRhLmtleVJhbmdlRGF0YS51cHBlck9wZW4pCi0gICAgICAg
IHJldHVybiBjYWNoZWRTdGF0ZW1lbnQoU1FMOjpHZXRWYWx1ZVJlY29yZHNMb3dlckNsb3NlZFVw
cGVyT3BlbiwgbG93ZXJDbG9zZWRVcHBlck9wZW5WYWx1ZS5nZXQoKSk7Ci0gICAgcmV0dXJuIGNh
Y2hlZFN0YXRlbWVudChTUUw6OkdldFZhbHVlUmVjb3Jkc0xvd2VyQ2xvc2VkVXBwZXJDbG9zZWQs
IGxvd2VyQ2xvc2VkVXBwZXJDbG9zZWRWYWx1ZS5nZXQoKSk7CisgICAgICAgIHJldHVybiBjYWNo
ZWRTdGF0ZW1lbnQoU1FMOjpHZXRWYWx1ZVJlY29yZHNMb3dlckNsb3NlZFVwcGVyT3BlbiwgbG93
ZXJDbG9zZWRVcHBlck9wZW5WYWx1ZSk7CisgICAgcmV0dXJuIGNhY2hlZFN0YXRlbWVudChTUUw6
OkdldFZhbHVlUmVjb3Jkc0xvd2VyQ2xvc2VkVXBwZXJDbG9zZWQsIGxvd2VyQ2xvc2VkVXBwZXJD
bG9zZWRWYWx1ZSk7CiB9CiAKIElEQkVycm9yIFNRTGl0ZUlEQkJhY2tpbmdTdG9yZTo6Z2V0QWxs
T2JqZWN0U3RvcmVSZWNvcmRzKGNvbnN0IElEQlJlc291cmNlSWRlbnRpZmllciYgdHJhbnNhY3Rp
b25JZGVudGlmaWVyLCBjb25zdCBJREJHZXRBbGxSZWNvcmRzRGF0YSYgZ2V0QWxsUmVjb3Jkc0Rh
dGEsIElEQkdldEFsbFJlc3VsdCYgcmVzdWx0KQpJbmRleDogU291cmNlL1dlYkNvcmUvTW9kdWxl
cy9tZWRpYXN0cmVhbS9NZWRpYUVuZHBvaW50U2Vzc2lvbkRlc2NyaXB0aW9uLmNwcAo9PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9Nb2R1bGVzL21lZGlhc3RyZWFtL01lZGlhRW5kcG9pbnRT
ZXNzaW9uRGVzY3JpcHRpb24uY3BwCShyZXZpc2lvbiAyMTYyMDUpCisrKyBTb3VyY2UvV2ViQ29y
ZS9Nb2R1bGVzL21lZGlhc3RyZWFtL01lZGlhRW5kcG9pbnRTZXNzaW9uRGVzY3JpcHRpb24uY3Bw
CSh3b3JraW5nIGNvcHkpCkBAIC00Myw3ICs0Myw3IEBAIG5hbWVzcGFjZSBXZWJDb3JlIHsKICNk
ZWZpbmUgU1RSSU5HX0ZVTkNUSU9OKG5hbWUpIFwKICAgICBzdGF0aWMgY29uc3QgU3RyaW5nJiBu
YW1lIyNTdHJpbmcoKSBcCiAgICAgeyBcCi0gICAgICAgIHN0YXRpYyBOZXZlckRlc3Ryb3llZDxj
b25zdCBTdHJpbmc+IG5hbWUgeyBBU0NJSUxpdGVyYWwoI25hbWUpIH07IFwKKyAgICAgICAgc3Rh
dGljIE5ldmVyRGVzdHJveWVkPGNvbnN0IFN0cmluZz4gbmFtZShNQUtFX1NUQVRJQ19TVFJJTkdf
SU1QTCgjbmFtZSkpOyBcCiAgICAgICAgIHJldHVybiBuYW1lOyBcCiAgICAgfQogCkluZGV4OiBT
b3VyY2UvV2ViQ29yZS9Nb2R1bGVzL21lZGlhc3RyZWFtL1JUQ1J0cFRyYW5zY2VpdmVyLmNwcAo9
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9Nb2R1bGVzL21lZGlhc3RyZWFtL1JUQ1J0cFRy
YW5zY2VpdmVyLmNwcAkocmV2aXNpb24gMjE2MjA1KQorKysgU291cmNlL1dlYkNvcmUvTW9kdWxl
cy9tZWRpYXN0cmVhbS9SVENSdHBUcmFuc2NlaXZlci5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTQx
LDcgKzQxLDcgQEAgbmFtZXNwYWNlIFdlYkNvcmUgewogI2RlZmluZSBTVFJJTkdfRlVOQ1RJT04o
bmFtZSkgXAogICAgIHN0YXRpYyBjb25zdCBTdHJpbmcmIG5hbWUjI1N0cmluZygpIFwKICAgICB7
IFwKLSAgICAgICAgc3RhdGljIE5ldmVyRGVzdHJveWVkPGNvbnN0IFN0cmluZz4gbmFtZSB7IEFT
Q0lJTGl0ZXJhbCgjbmFtZSkgfTsgXAorICAgICAgICBzdGF0aWMgTmV2ZXJEZXN0cm95ZWQ8Y29u
c3QgU3RyaW5nPiBuYW1lKE1BS0VfU1RBVElDX1NUUklOR19JTVBMKCNuYW1lKSk7IFwKICAgICAg
ICAgcmV0dXJuIG5hbWU7IFwKICAgICB9CiAKSW5kZXg6IFNvdXJjZS9XZWJDb3JlL01vZHVsZXMv
bWVkaWFzdHJlYW0vU0RQUHJvY2Vzc29yLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29y
ZS9Nb2R1bGVzL21lZGlhc3RyZWFtL1NEUFByb2Nlc3Nvci5jcHAJKHJldmlzaW9uIDIxNjIwNSkK
KysrIFNvdXJjZS9XZWJDb3JlL01vZHVsZXMvbWVkaWFzdHJlYW0vU0RQUHJvY2Vzc29yLmNwcAko
d29ya2luZyBjb3B5KQpAQCAtMSw2ICsxLDYgQEAKIC8qCiAgKiBDb3B5cmlnaHQgKEMpIDIwMTUs
IDIwMTYgRXJpY3Nzb24gQUIuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCi0gKiBDb3B5cmlnaHQgKEMp
IDIwMTYgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICogQ29weXJpZ2h0IChDKSAy
MDE2LTIwMTcgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgogICoKICAqIFJlZGlzdHJp
YnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91
dAogICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxv
d2luZyBjb25kaXRpb25zCkBAIC01MSw3ICs1MSw3IEBAIG5hbWVzcGFjZSBXZWJDb3JlIHsKICNk
ZWZpbmUgU1RSSU5HX0ZVTkNUSU9OKG5hbWUpIFwKICAgICBzdGF0aWMgY29uc3QgU3RyaW5nJiBu
YW1lIyNTdHJpbmcoKSBcCiAgICAgeyBcCi0gICAgICAgIHN0YXRpYyBOZXZlckRlc3Ryb3llZDxj
b25zdCBTdHJpbmc+IG5hbWUgeyBBU0NJSUxpdGVyYWwoI25hbWUpIH07IFwKKyAgICAgICAgc3Rh
dGljIE5ldmVyRGVzdHJveWVkPGNvbnN0IFN0cmluZz4gbmFtZShNQUtFX1NUQVRJQ19TVFJJTkdf
SU1QTCgjbmFtZSkpOyBcCiAgICAgICAgIHJldHVybiBuYW1lOyBcCiAgICAgfQogCkluZGV4OiBT
b3VyY2UvV2ViQ29yZS9Nb2R1bGVzL25hdmlnYXRvcmNvbnRlbnR1dGlscy9OYXZpZ2F0b3JDb250
ZW50VXRpbHMuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL01vZHVsZXMvbmF2aWdh
dG9yY29udGVudHV0aWxzL05hdmlnYXRvckNvbnRlbnRVdGlscy5jcHAJKHJldmlzaW9uIDIxNjIw
NSkKKysrIFNvdXJjZS9XZWJDb3JlL01vZHVsZXMvbmF2aWdhdG9yY29udGVudHV0aWxzL05hdmln
YXRvckNvbnRlbnRVdGlscy5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTEsNiArMSw3IEBACiAvKgog
ICogQ29weXJpZ2h0IChDKSAyMDExLCBHb29nbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgog
ICogQ29weXJpZ2h0IChDKSAyMDEyLCBTYW1zdW5nIEVsZWN0cm9uaWNzLiBBbGwgcmlnaHRzIHJl
c2VydmVkLgorICogQ29weXJpZ2h0IChDKSAyMDE3IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNl
cnZlZC4KICAqCiAgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5
IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKICAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBw
cm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucyBhcmUgbWV0OgpAQCAtMTE3LDkg
KzExOCw5IEBAIEV4Y2VwdGlvbk9yPHZvaWQ+IE5hdmlnYXRvckNvbnRlbnRVdGlsczoKIAogc3Rh
dGljIFN0cmluZyBjdXN0b21IYW5kbGVyc1N0YXRlU3RyaW5nKGNvbnN0IE5hdmlnYXRvckNvbnRl
bnRVdGlsc0NsaWVudDo6Q3VzdG9tSGFuZGxlcnNTdGF0ZSBzdGF0ZSkKIHsKLSAgICBzdGF0aWMg
TmV2ZXJEZXN0cm95ZWQ8U3RyaW5nPiBuZXdIYW5kbGVyKEFTQ0lJTGl0ZXJhbCgibmV3IikpOwot
ICAgIHN0YXRpYyBOZXZlckRlc3Ryb3llZDxTdHJpbmc+IHJlZ2lzdGVyZWRIYW5kbGVyKEFTQ0lJ
TGl0ZXJhbCgicmVnaXN0ZXJlZCIpKTsKLSAgICBzdGF0aWMgTmV2ZXJEZXN0cm95ZWQ8U3RyaW5n
PiBkZWNsaW5lZEhhbmRsZXIoQVNDSUlMaXRlcmFsKCJkZWNsaW5lZCIpKTsKKyAgICBzdGF0aWMg
TmV2ZXJEZXN0cm95ZWQ8U3RyaW5nPiBuZXdIYW5kbGVyKE1BS0VfU1RBVElDX1NUUklOR19JTVBM
KCJuZXciKSk7CisgICAgc3RhdGljIE5ldmVyRGVzdHJveWVkPFN0cmluZz4gcmVnaXN0ZXJlZEhh
bmRsZXIoTUFLRV9TVEFUSUNfU1RSSU5HX0lNUEwoInJlZ2lzdGVyZWQiKSk7CisgICAgc3RhdGlj
IE5ldmVyRGVzdHJveWVkPFN0cmluZz4gZGVjbGluZWRIYW5kbGVyKE1BS0VfU1RBVElDX1NUUklO
R19JTVBMKCJkZWNsaW5lZCIpKTsKIAogICAgIHN3aXRjaCAoc3RhdGUpIHsKICAgICBjYXNlIE5h
dmlnYXRvckNvbnRlbnRVdGlsc0NsaWVudDo6Q3VzdG9tSGFuZGxlcnNOZXc6CkBAIC0xMzYsNyAr
MTM3LDcgQEAgc3RhdGljIFN0cmluZyBjdXN0b21IYW5kbGVyc1N0YXRlU3RyaW5nKAogCiBFeGNl
cHRpb25PcjxTdHJpbmc+IE5hdmlnYXRvckNvbnRlbnRVdGlsczo6aXNQcm90b2NvbEhhbmRsZXJS
ZWdpc3RlcmVkKE5hdmlnYXRvciYgbmF2aWdhdG9yLCBjb25zdCBTdHJpbmcmIHNjaGVtZSwgY29u
c3QgU3RyaW5nJiB1cmwpCiB7Ci0gICAgc3RhdGljIE5ldmVyRGVzdHJveWVkPFN0cmluZz4gZGVj
bGluZWQoQVNDSUlMaXRlcmFsKCJkZWNsaW5lZCIpKTsKKyAgICBzdGF0aWMgTmV2ZXJEZXN0cm95
ZWQ8U3RyaW5nPiBkZWNsaW5lZChNQUtFX1NUQVRJQ19TVFJJTkdfSU1QTCgiZGVjbGluZWQiKSk7
CiAKICAgICBpZiAoIW5hdmlnYXRvci5mcmFtZSgpKQogICAgICAgICByZXR1cm4gU3RyaW5nIHsg
ZGVjbGluZWQgfTsKSW5kZXg6IFNvdXJjZS9XZWJDb3JlL01vZHVsZXMvc3BlZWNoL1NwZWVjaFN5
bnRoZXNpcy5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvTW9kdWxlcy9zcGVlY2gv
U3BlZWNoU3ludGhlc2lzLmNwcAkocmV2aXNpb24gMjE2MjA1KQorKysgU291cmNlL1dlYkNvcmUv
TW9kdWxlcy9zcGVlY2gvU3BlZWNoU3ludGhlc2lzLmNwcAkod29ya2luZyBjb3B5KQpAQCAtMSw1
ICsxLDUgQEAKIC8qCi0gKiBDb3B5cmlnaHQgKEMpIDIwMTMgQXBwbGUgSW5jLiBBbGwgcmlnaHRz
IHJlc2VydmVkLgorICogQ29weXJpZ2h0IChDKSAyMDEzLTIwMTcgQXBwbGUgSW5jLiBBbGwgcmln
aHRzIHJlc2VydmVkLgogICoKICAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFu
ZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAogICogbW9kaWZpY2F0aW9uLCBhcmUgcGVy
bWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCkBAIC0xODgsOCAr
MTg4LDggQEAgdm9pZCBTcGVlY2hTeW50aGVzaXM6OmhhbmRsZVNwZWFraW5nQ29tcAogCiB2b2lk
IFNwZWVjaFN5bnRoZXNpczo6Ym91bmRhcnlFdmVudE9jY3VycmVkKFBsYXRmb3JtU3BlZWNoU3lu
dGhlc2lzVXR0ZXJhbmNlJiB1dHRlcmFuY2UsIFNwZWVjaEJvdW5kYXJ5IGJvdW5kYXJ5LCB1bnNp
Z25lZCBjaGFySW5kZXgpCiB7Ci0gICAgc3RhdGljIE5ldmVyRGVzdHJveWVkPGNvbnN0IFN0cmlu
Zz4gd29yZEJvdW5kYXJ5U3RyaW5nKEFTQ0lJTGl0ZXJhbCgid29yZCIpKTsKLSAgICBzdGF0aWMg
TmV2ZXJEZXN0cm95ZWQ8Y29uc3QgU3RyaW5nPiBzZW50ZW5jZUJvdW5kYXJ5U3RyaW5nKEFTQ0lJ
TGl0ZXJhbCgic2VudGVuY2UiKSk7CisgICAgc3RhdGljIE5ldmVyRGVzdHJveWVkPGNvbnN0IFN0
cmluZz4gd29yZEJvdW5kYXJ5U3RyaW5nKE1BS0VfU1RBVElDX1NUUklOR19JTVBMKCJ3b3JkIikp
OworICAgIHN0YXRpYyBOZXZlckRlc3Ryb3llZDxjb25zdCBTdHJpbmc+IHNlbnRlbmNlQm91bmRh
cnlTdHJpbmcoTUFLRV9TVEFUSUNfU1RSSU5HX0lNUEwoInNlbnRlbmNlIikpOwogCiAgICAgQVNT
RVJUKHV0dGVyYW5jZS5jbGllbnQoKSk7CiAKSW5kZXg6IFNvdXJjZS9XZWJDb3JlL2FjY2Vzc2li
aWxpdHkvQWNjZXNzaWJpbGl0eU1lZGlhQ29udHJvbHMuY3BwCj09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJj
ZS9XZWJDb3JlL2FjY2Vzc2liaWxpdHkvQWNjZXNzaWJpbGl0eU1lZGlhQ29udHJvbHMuY3BwCShy
ZXZpc2lvbiAyMTYyMDUpCisrKyBTb3VyY2UvV2ViQ29yZS9hY2Nlc3NpYmlsaXR5L0FjY2Vzc2li
aWxpdHlNZWRpYUNvbnRyb2xzLmNwcAkod29ya2luZyBjb3B5KQpAQCAtMSw1ICsxLDUgQEAKIC8q
Ci0gKiBDb3B5cmlnaHQgKEMpIDIwMDkgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgor
ICogQ29weXJpZ2h0IChDKSAyMDA5LTIwMTEgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVk
LgogICoKICAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9y
bXMsIHdpdGggb3Igd2l0aG91dAogICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3Zp
ZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCkBAIC04MywyMSArODMsMjEgQEAgTWVk
aWFDb250cm9sRWxlbWVudFR5cGUgQWNjZXNzaWJpbGl0eU1lZAogCiBjb25zdCBTdHJpbmcmIEFj
Y2Vzc2liaWxpdHlNZWRpYUNvbnRyb2w6OmNvbnRyb2xUeXBlTmFtZSgpIGNvbnN0CiB7Ci0gICAg
c3RhdGljIE5ldmVyRGVzdHJveWVkPGNvbnN0IFN0cmluZz4gbWVkaWFFbnRlckZ1bGxzY3JlZW5C
dXR0b25OYW1lKEFTQ0lJTGl0ZXJhbCgiRW50ZXJGdWxsc2NyZWVuQnV0dG9uIikpOwotICAgIHN0
YXRpYyBOZXZlckRlc3Ryb3llZDxjb25zdCBTdHJpbmc+IG1lZGlhRXhpdEZ1bGxzY3JlZW5CdXR0
b25OYW1lKEFTQ0lJTGl0ZXJhbCgiRXhpdEZ1bGxzY3JlZW5CdXR0b24iKSk7Ci0gICAgc3RhdGlj
IE5ldmVyRGVzdHJveWVkPGNvbnN0IFN0cmluZz4gbWVkaWFNdXRlQnV0dG9uTmFtZShBU0NJSUxp
dGVyYWwoIk11dGVCdXR0b24iKSk7Ci0gICAgc3RhdGljIE5ldmVyRGVzdHJveWVkPGNvbnN0IFN0
cmluZz4gbWVkaWFQbGF5QnV0dG9uTmFtZShBU0NJSUxpdGVyYWwoIlBsYXlCdXR0b24iKSk7Ci0g
ICAgc3RhdGljIE5ldmVyRGVzdHJveWVkPGNvbnN0IFN0cmluZz4gbWVkaWFTZWVrQmFja0J1dHRv
bk5hbWUoQVNDSUlMaXRlcmFsKCJTZWVrQmFja0J1dHRvbiIpKTsKLSAgICBzdGF0aWMgTmV2ZXJE
ZXN0cm95ZWQ8Y29uc3QgU3RyaW5nPiBtZWRpYVNlZWtGb3J3YXJkQnV0dG9uTmFtZShBU0NJSUxp
dGVyYWwoIlNlZWtGb3J3YXJkQnV0dG9uIikpOwotICAgIHN0YXRpYyBOZXZlckRlc3Ryb3llZDxj
b25zdCBTdHJpbmc+IG1lZGlhUmV3aW5kQnV0dG9uTmFtZShBU0NJSUxpdGVyYWwoIlJld2luZEJ1
dHRvbiIpKTsKLSAgICBzdGF0aWMgTmV2ZXJEZXN0cm95ZWQ8Y29uc3QgU3RyaW5nPiBtZWRpYVJl
dHVyblRvUmVhbHRpbWVCdXR0b25OYW1lKEFTQ0lJTGl0ZXJhbCgiUmV0dXJuVG9SZWFsdGltZUJ1
dHRvbiIpKTsKLSAgICBzdGF0aWMgTmV2ZXJEZXN0cm95ZWQ8Y29uc3QgU3RyaW5nPiBtZWRpYVVu
TXV0ZUJ1dHRvbk5hbWUoQVNDSUlMaXRlcmFsKCJVbk11dGVCdXR0b24iKSk7Ci0gICAgc3RhdGlj
IE5ldmVyRGVzdHJveWVkPGNvbnN0IFN0cmluZz4gbWVkaWFQYXVzZUJ1dHRvbk5hbWUoQVNDSUlM
aXRlcmFsKCJQYXVzZUJ1dHRvbiIpKTsKLSAgICBzdGF0aWMgTmV2ZXJEZXN0cm95ZWQ8Y29uc3Qg
U3RyaW5nPiBtZWRpYVN0YXR1c0Rpc3BsYXlOYW1lKEFTQ0lJTGl0ZXJhbCgiU3RhdHVzRGlzcGxh
eSIpKTsKLSAgICBzdGF0aWMgTmV2ZXJEZXN0cm95ZWQ8Y29uc3QgU3RyaW5nPiBtZWRpYUN1cnJl
bnRUaW1lRGlzcGxheShBU0NJSUxpdGVyYWwoIkN1cnJlbnRUaW1lRGlzcGxheSIpKTsKLSAgICBz
dGF0aWMgTmV2ZXJEZXN0cm95ZWQ8Y29uc3QgU3RyaW5nPiBtZWRpYVRpbWVSZW1haW5pbmdEaXNw
bGF5KEFTQ0lJTGl0ZXJhbCgiVGltZVJlbWFpbmluZ0Rpc3BsYXkiKSk7Ci0gICAgc3RhdGljIE5l
dmVyRGVzdHJveWVkPGNvbnN0IFN0cmluZz4gbWVkaWFTaG93Q2xvc2VkQ2FwdGlvbnNCdXR0b25O
YW1lKEFTQ0lJTGl0ZXJhbCgiU2hvd0Nsb3NlZENhcHRpb25zQnV0dG9uIikpOwotICAgIHN0YXRp
YyBOZXZlckRlc3Ryb3llZDxjb25zdCBTdHJpbmc+IG1lZGlhSGlkZUNsb3NlZENhcHRpb25zQnV0
dG9uTmFtZShBU0NJSUxpdGVyYWwoIkhpZGVDbG9zZWRDYXB0aW9uc0J1dHRvbiIpKTsKKyAgICBz
dGF0aWMgTmV2ZXJEZXN0cm95ZWQ8Y29uc3QgU3RyaW5nPiBtZWRpYUVudGVyRnVsbHNjcmVlbkJ1
dHRvbk5hbWUoTUFLRV9TVEFUSUNfU1RSSU5HX0lNUEwoIkVudGVyRnVsbHNjcmVlbkJ1dHRvbiIp
KTsKKyAgICBzdGF0aWMgTmV2ZXJEZXN0cm95ZWQ8Y29uc3QgU3RyaW5nPiBtZWRpYUV4aXRGdWxs
c2NyZWVuQnV0dG9uTmFtZShNQUtFX1NUQVRJQ19TVFJJTkdfSU1QTCgiRXhpdEZ1bGxzY3JlZW5C
dXR0b24iKSk7CisgICAgc3RhdGljIE5ldmVyRGVzdHJveWVkPGNvbnN0IFN0cmluZz4gbWVkaWFN
dXRlQnV0dG9uTmFtZShNQUtFX1NUQVRJQ19TVFJJTkdfSU1QTCgiTXV0ZUJ1dHRvbiIpKTsKKyAg
ICBzdGF0aWMgTmV2ZXJEZXN0cm95ZWQ8Y29uc3QgU3RyaW5nPiBtZWRpYVBsYXlCdXR0b25OYW1l
KE1BS0VfU1RBVElDX1NUUklOR19JTVBMKCJQbGF5QnV0dG9uIikpOworICAgIHN0YXRpYyBOZXZl
ckRlc3Ryb3llZDxjb25zdCBTdHJpbmc+IG1lZGlhU2Vla0JhY2tCdXR0b25OYW1lKE1BS0VfU1RB
VElDX1NUUklOR19JTVBMKCJTZWVrQmFja0J1dHRvbiIpKTsKKyAgICBzdGF0aWMgTmV2ZXJEZXN0
cm95ZWQ8Y29uc3QgU3RyaW5nPiBtZWRpYVNlZWtGb3J3YXJkQnV0dG9uTmFtZShNQUtFX1NUQVRJ
Q19TVFJJTkdfSU1QTCgiU2Vla0ZvcndhcmRCdXR0b24iKSk7CisgICAgc3RhdGljIE5ldmVyRGVz
dHJveWVkPGNvbnN0IFN0cmluZz4gbWVkaWFSZXdpbmRCdXR0b25OYW1lKE1BS0VfU1RBVElDX1NU
UklOR19JTVBMKCJSZXdpbmRCdXR0b24iKSk7CisgICAgc3RhdGljIE5ldmVyRGVzdHJveWVkPGNv
bnN0IFN0cmluZz4gbWVkaWFSZXR1cm5Ub1JlYWx0aW1lQnV0dG9uTmFtZShNQUtFX1NUQVRJQ19T
VFJJTkdfSU1QTCgiUmV0dXJuVG9SZWFsdGltZUJ1dHRvbiIpKTsKKyAgICBzdGF0aWMgTmV2ZXJE
ZXN0cm95ZWQ8Y29uc3QgU3RyaW5nPiBtZWRpYVVuTXV0ZUJ1dHRvbk5hbWUoTUFLRV9TVEFUSUNf
U1RSSU5HX0lNUEwoIlVuTXV0ZUJ1dHRvbiIpKTsKKyAgICBzdGF0aWMgTmV2ZXJEZXN0cm95ZWQ8
Y29uc3QgU3RyaW5nPiBtZWRpYVBhdXNlQnV0dG9uTmFtZShNQUtFX1NUQVRJQ19TVFJJTkdfSU1Q
TCgiUGF1c2VCdXR0b24iKSk7CisgICAgc3RhdGljIE5ldmVyRGVzdHJveWVkPGNvbnN0IFN0cmlu
Zz4gbWVkaWFTdGF0dXNEaXNwbGF5TmFtZShNQUtFX1NUQVRJQ19TVFJJTkdfSU1QTCgiU3RhdHVz
RGlzcGxheSIpKTsKKyAgICBzdGF0aWMgTmV2ZXJEZXN0cm95ZWQ8Y29uc3QgU3RyaW5nPiBtZWRp
YUN1cnJlbnRUaW1lRGlzcGxheShNQUtFX1NUQVRJQ19TVFJJTkdfSU1QTCgiQ3VycmVudFRpbWVE
aXNwbGF5IikpOworICAgIHN0YXRpYyBOZXZlckRlc3Ryb3llZDxjb25zdCBTdHJpbmc+IG1lZGlh
VGltZVJlbWFpbmluZ0Rpc3BsYXkoTUFLRV9TVEFUSUNfU1RSSU5HX0lNUEwoIlRpbWVSZW1haW5p
bmdEaXNwbGF5IikpOworICAgIHN0YXRpYyBOZXZlckRlc3Ryb3llZDxjb25zdCBTdHJpbmc+IG1l
ZGlhU2hvd0Nsb3NlZENhcHRpb25zQnV0dG9uTmFtZShNQUtFX1NUQVRJQ19TVFJJTkdfSU1QTCgi
U2hvd0Nsb3NlZENhcHRpb25zQnV0dG9uIikpOworICAgIHN0YXRpYyBOZXZlckRlc3Ryb3llZDxj
b25zdCBTdHJpbmc+IG1lZGlhSGlkZUNsb3NlZENhcHRpb25zQnV0dG9uTmFtZShNQUtFX1NUQVRJ
Q19TVFJJTkdfSU1QTCgiSGlkZUNsb3NlZENhcHRpb25zQnV0dG9uIikpOwogCiAgICAgc3dpdGNo
IChjb250cm9sVHlwZSgpKSB7CiAgICAgY2FzZSBNZWRpYUVudGVyRnVsbHNjcmVlbkJ1dHRvbjoK
QEAgLTE1Niw3ICsxNTYsNyBAQCB2b2lkIEFjY2Vzc2liaWxpdHlNZWRpYUNvbnRyb2w6OmFjY2Vz
c2liCiAKIFN0cmluZyBBY2Nlc3NpYmlsaXR5TWVkaWFDb250cm9sOjp0aXRsZSgpIGNvbnN0CiB7
Ci0gICAgc3RhdGljIE5ldmVyRGVzdHJveWVkPGNvbnN0IFN0cmluZz4gY29udHJvbHNQYW5lbChB
U0NJSUxpdGVyYWwoIkNvbnRyb2xzUGFuZWwiKSk7CisgICAgc3RhdGljIE5ldmVyRGVzdHJveWVk
PGNvbnN0IFN0cmluZz4gY29udHJvbHNQYW5lbChNQUtFX1NUQVRJQ19TVFJJTkdfSU1QTCgiQ29u
dHJvbHNQYW5lbCIpKTsKIAogICAgIGlmIChjb250cm9sVHlwZSgpID09IE1lZGlhQ29udHJvbHNQ
YW5lbCkKICAgICAgICAgcmV0dXJuIGxvY2FsaXplZE1lZGlhQ29udHJvbEVsZW1lbnRTdHJpbmco
Y29udHJvbHNQYW5lbCk7CkBAIC0yNDUsOCArMjQ1LDggQEAgYm9vbCBBY2Nlc3NpYmlsaXR5TWVk
aWFDb250cm9sc0NvbnRhaW5lcgogCiBjb25zdCBTdHJpbmcmIEFjY2Vzc2liaWxpdHlNZWRpYUNv
bnRyb2xzQ29udGFpbmVyOjplbGVtZW50VHlwZU5hbWUoKSBjb25zdAogewotICAgIHN0YXRpYyBO
ZXZlckRlc3Ryb3llZDxjb25zdCBTdHJpbmc+IHZpZGVvRWxlbWVudChBU0NJSUxpdGVyYWwoIlZp
ZGVvRWxlbWVudCIpKTsKLSAgICBzdGF0aWMgTmV2ZXJEZXN0cm95ZWQ8Y29uc3QgU3RyaW5nPiBh
dWRpb0VsZW1lbnQoQVNDSUlMaXRlcmFsKCJBdWRpb0VsZW1lbnQiKSk7CisgICAgc3RhdGljIE5l
dmVyRGVzdHJveWVkPGNvbnN0IFN0cmluZz4gdmlkZW9FbGVtZW50KE1BS0VfU1RBVElDX1NUUklO
R19JTVBMKCJWaWRlb0VsZW1lbnQiKSk7CisgICAgc3RhdGljIE5ldmVyRGVzdHJveWVkPGNvbnN0
IFN0cmluZz4gYXVkaW9FbGVtZW50KE1BS0VfU1RBVElDX1NUUklOR19JTVBMKCJBdWRpb0VsZW1l
bnQiKSk7CiAKICAgICBpZiAoY29udHJvbGxpbmdWaWRlb0VsZW1lbnQoKSkKICAgICAgICAgcmV0
dXJuIHZpZGVvRWxlbWVudDsKQEAgLTI4Myw3ICsyODMsNyBAQCBTdHJpbmcgQWNjZXNzaWJpbGl0
eU1lZGlhVGltZWxpbmU6OnZhbHVlCiAKIFN0cmluZyBBY2Nlc3NpYmlsaXR5TWVkaWFUaW1lbGlu
ZTo6aGVscFRleHQoKSBjb25zdAogewotICAgIHN0YXRpYyBOZXZlckRlc3Ryb3llZDxjb25zdCBT
dHJpbmc+IHNsaWRlcihBU0NJSUxpdGVyYWwoIlNsaWRlciIpKTsKKyAgICBzdGF0aWMgTmV2ZXJE
ZXN0cm95ZWQ8Y29uc3QgU3RyaW5nPiBzbGlkZXIoTUFLRV9TVEFUSUNfU1RSSU5HX0lNUEwoIlNs
aWRlciIpKTsKICAgICByZXR1cm4gbG9jYWxpemVkTWVkaWFDb250cm9sRWxlbWVudEhlbHBUZXh0
KHNsaWRlcik7CiB9CiAKQEAgLTMxNCw4ICszMTQsOCBAQCBib29sIEFjY2Vzc2liaWxpdHlNZWRp
YVRpbWVEaXNwbGF5Ojpjb21wCiAKIFN0cmluZyBBY2Nlc3NpYmlsaXR5TWVkaWFUaW1lRGlzcGxh
eTo6YWNjZXNzaWJpbGl0eURlc2NyaXB0aW9uKCkgY29uc3QKIHsKLSAgICBzdGF0aWMgTmV2ZXJE
ZXN0cm95ZWQ8Y29uc3QgU3RyaW5nPiBjdXJyZW50VGltZURpc3BsYXkoQVNDSUlMaXRlcmFsKCJD
dXJyZW50VGltZURpc3BsYXkiKSk7Ci0gICAgc3RhdGljIE5ldmVyRGVzdHJveWVkPGNvbnN0IFN0
cmluZz4gdGltZVJlbWFpbmluZ0Rpc3BsYXkoQVNDSUlMaXRlcmFsKCJUaW1lUmVtYWluaW5nRGlz
cGxheSIpKTsKKyAgICBzdGF0aWMgTmV2ZXJEZXN0cm95ZWQ8Y29uc3QgU3RyaW5nPiBjdXJyZW50
VGltZURpc3BsYXkoTUFLRV9TVEFUSUNfU1RSSU5HX0lNUEwoIkN1cnJlbnRUaW1lRGlzcGxheSIp
KTsKKyAgICBzdGF0aWMgTmV2ZXJEZXN0cm95ZWQ8Y29uc3QgU3RyaW5nPiB0aW1lUmVtYWluaW5n
RGlzcGxheShNQUtFX1NUQVRJQ19TVFJJTkdfSU1QTCgiVGltZVJlbWFpbmluZ0Rpc3BsYXkiKSk7
CiAKICAgICBpZiAoY29udHJvbFR5cGUoKSA9PSBNZWRpYUN1cnJlbnRUaW1lRGlzcGxheSkKICAg
ICAgICAgcmV0dXJuIGxvY2FsaXplZE1lZGlhQ29udHJvbEVsZW1lbnRTdHJpbmcoY3VycmVudFRp
bWVEaXNwbGF5KTsKSW5kZXg6IFNvdXJjZS9XZWJDb3JlL2JpbmRpbmdzL2pzL0pTTGF6eUV2ZW50
TGlzdGVuZXIuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL2JpbmRpbmdzL2pzL0pT
TGF6eUV2ZW50TGlzdGVuZXIuY3BwCShyZXZpc2lvbiAyMTYyMDUpCisrKyBTb3VyY2UvV2ViQ29y
ZS9iaW5kaW5ncy9qcy9KU0xhenlFdmVudExpc3RlbmVyLmNwcAkod29ya2luZyBjb3B5KQpAQCAt
MSw2ICsxLDYgQEAKIC8qCiAgKiAgQ29weXJpZ2h0IChDKSAyMDAxIFBldGVyIEtlbGx5IChwbWtA
cG9zdC5jb20pCi0gKiAgQ29weXJpZ2h0IChDKSAyMDAzLTIwMTYgQXBwbGUgSW5jLiBBbGwgUmln
aHRzIFJlc2VydmVkLgorICogIENvcHlyaWdodCAoQykgMjAwMy0yMDE3IEFwcGxlIEluYy4gQWxs
IFJpZ2h0cyBSZXNlcnZlZC4KICAqCiAgKiAgVGhpcyBsaWJyYXJ5IGlzIGZyZWUgc29mdHdhcmU7
IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vcgogICogIG1vZGlmeSBpdCB1bmRlciB0aGUg
dGVybXMgb2YgdGhlIEdOVSBMZXNzZXIgR2VuZXJhbCBQdWJsaWMKQEAgLTEzOSw4ICsxMzksOCBA
QCBKU09iamVjdCogSlNMYXp5RXZlbnRMaXN0ZW5lcjo6aW5pdGlhbGl6CiAKIHN0YXRpYyBjb25z
dCBTdHJpbmcmIGV2ZW50UGFyYW1ldGVyTmFtZShib29sIGlzU1ZHRXZlbnQpCiB7Ci0gICAgc3Rh
dGljIE5ldmVyRGVzdHJveWVkPGNvbnN0IFN0cmluZz4gZXZlbnRTdHJpbmcoQVNDSUlMaXRlcmFs
KCJldmVudCIpKTsKLSAgICBzdGF0aWMgTmV2ZXJEZXN0cm95ZWQ8Y29uc3QgU3RyaW5nPiBldnRT
dHJpbmcoQVNDSUlMaXRlcmFsKCJldnQiKSk7CisgICAgc3RhdGljIE5ldmVyRGVzdHJveWVkPGNv
bnN0IFN0cmluZz4gZXZlbnRTdHJpbmcoTUFLRV9TVEFUSUNfU1RSSU5HX0lNUEwoImV2ZW50Iikp
OworICAgIHN0YXRpYyBOZXZlckRlc3Ryb3llZDxjb25zdCBTdHJpbmc+IGV2dFN0cmluZyhNQUtF
X1NUQVRJQ19TVFJJTkdfSU1QTCgiZXZ0IikpOwogICAgIHJldHVybiBpc1NWR0V2ZW50ID8gZXZ0
U3RyaW5nIDogZXZlbnRTdHJpbmc7CiB9CiAKSW5kZXg6IFNvdXJjZS9XZWJDb3JlL2NvbnRlbnRl
eHRlbnNpb25zL0NvbnRlbnRFeHRlbnNpb25zQmFja2VuZC5jcHAKPT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291
cmNlL1dlYkNvcmUvY29udGVudGV4dGVuc2lvbnMvQ29udGVudEV4dGVuc2lvbnNCYWNrZW5kLmNw
cAkocmV2aXNpb24gMjE2MjA1KQorKysgU291cmNlL1dlYkNvcmUvY29udGVudGV4dGVuc2lvbnMv
Q29udGVudEV4dGVuc2lvbnNCYWNrZW5kLmNwcAkod29ya2luZyBjb3B5KQpAQCAtMSw1ICsxLDUg
QEAKIC8qCi0gKiBDb3B5cmlnaHQgKEMpIDIwMTQgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2Vy
dmVkLgorICogQ29weXJpZ2h0IChDKSAyMDE0LTIwMTcgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJl
c2VydmVkLgogICoKICAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5h
cnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAogICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVk
IHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCkBAIC0yMjEsNyArMjIxLDcg
QEAgQmxvY2tlZFN0YXR1cyBDb250ZW50RXh0ZW5zaW9uc0JhY2tlbmQ6OgogCiBjb25zdCBTdHJp
bmcmIENvbnRlbnRFeHRlbnNpb25zQmFja2VuZDo6ZGlzcGxheU5vbmVDU1NSdWxlKCkKIHsKLSAg
ICBzdGF0aWMgTmV2ZXJEZXN0cm95ZWQ8Y29uc3QgU3RyaW5nPiBydWxlKEFTQ0lJTGl0ZXJhbCgi
ZGlzcGxheTpub25lICFpbXBvcnRhbnQ7IikpOworICAgIHN0YXRpYyBOZXZlckRlc3Ryb3llZDxj
b25zdCBTdHJpbmc+IHJ1bGUoTUFLRV9TVEFUSUNfU1RSSU5HX0lNUEwoImRpc3BsYXk6bm9uZSAh
aW1wb3J0YW50OyIpKTsKICAgICByZXR1cm4gcnVsZTsKIH0KIApJbmRleDogU291cmNlL1dlYkNv
cmUvY3NzL0NTU0RlZmF1bHRTdHlsZVNoZWV0cy5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dl
YkNvcmUvY3NzL0NTU0RlZmF1bHRTdHlsZVNoZWV0cy5jcHAJKHJldmlzaW9uIDIxNjIwNSkKKysr
IFNvdXJjZS9XZWJDb3JlL2Nzcy9DU1NEZWZhdWx0U3R5bGVTaGVldHMuY3BwCSh3b3JraW5nIGNv
cHkpCkBAIC0yLDcgKzIsNyBAQAogICogQ29weXJpZ2h0IChDKSAxOTk5IExhcnMgS25vbGwgKGtu
b2xsQGtkZS5vcmcpCiAgKiAgICAgICAgICAgKEMpIDIwMDQtMjAwNSBBbGxhbiBTYW5kZmVsZCBK
ZW5zZW4gKGtkZUBjYXJld29sZi5jb20pCiAgKiBDb3B5cmlnaHQgKEMpIDIwMDYsIDIwMDcgTmlj
aG9sYXMgU2hhbmtzICh3ZWJraXRAbmlja3NoYW5rcy5jb20pCi0gKiBDb3B5cmlnaHQgKEMpIDIw
MDUsIDIwMDYsIDIwMDcsIDIwMDgsIDIwMDksIDIwMTAsIDIwMTEsIDIwMTIgQXBwbGUgSW5jLiBB
bGwgcmlnaHRzIHJlc2VydmVkLgorICogQ29weXJpZ2h0IChDKSAyMDA1LTIwMTcgQXBwbGUgSW5j
LiBBbGwgcmlnaHRzIHJlc2VydmVkLgogICogQ29weXJpZ2h0IChDKSAyMDA3IEFsZXhleSBQcm9z
a3VyeWFrb3YgPGFwQHdlYmtpdC5vcmc+CiAgKiBDb3B5cmlnaHQgKEMpIDIwMDcsIDIwMDggRXJp
YyBTZWlkZWwgPGVyaWNAd2Via2l0Lm9yZz4KICAqIENvcHlyaWdodCAoQykgMjAwOCwgMjAwOSBU
b3JjaCBNb2JpbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLiAoaHR0cDovL3d3dy50b3JjaG1v
YmlsZS5jb20vKQpAQCAtODQsMTMgKzg0LDEzIEBAIHN0YXRpYyBpbmxpbmUgYm9vbCBlbGVtZW50
Q2FuVXNlU2ltcGxlRGUKIAogc3RhdGljIGNvbnN0IE1lZGlhUXVlcnlFdmFsdWF0b3ImIHNjcmVl
bkV2YWwoKQogewotICAgIHN0YXRpYyBOZXZlckRlc3Ryb3llZDxjb25zdCBNZWRpYVF1ZXJ5RXZh
bHVhdG9yPiBzdGF0aWNTY3JlZW5FdmFsKFN0cmluZyhBU0NJSUxpdGVyYWwoInNjcmVlbiIpKSk7
CisgICAgc3RhdGljIE5ldmVyRGVzdHJveWVkPGNvbnN0IE1lZGlhUXVlcnlFdmFsdWF0b3I+IHN0
YXRpY1NjcmVlbkV2YWwoU3RyaW5nKE1BS0VfU1RBVElDX1NUUklOR19JTVBMKCJzY3JlZW4iKSkp
OwogICAgIHJldHVybiBzdGF0aWNTY3JlZW5FdmFsOwogfQogCiBzdGF0aWMgY29uc3QgTWVkaWFR
dWVyeUV2YWx1YXRvciYgcHJpbnRFdmFsKCkKIHsKLSAgICBzdGF0aWMgTmV2ZXJEZXN0cm95ZWQ8
Y29uc3QgTWVkaWFRdWVyeUV2YWx1YXRvcj4gc3RhdGljUHJpbnRFdmFsKFN0cmluZyhBU0NJSUxp
dGVyYWwoInByaW50IikpKTsKKyAgICBzdGF0aWMgTmV2ZXJEZXN0cm95ZWQ8Y29uc3QgTWVkaWFR
dWVyeUV2YWx1YXRvcj4gc3RhdGljUHJpbnRFdmFsKFN0cmluZyhNQUtFX1NUQVRJQ19TVFJJTkdf
SU1QTCgicHJpbnQiKSkpOwogICAgIHJldHVybiBzdGF0aWNQcmludEV2YWw7CiB9CiAKSW5kZXg6
IFNvdXJjZS9XZWJDb3JlL2Nzcy9NZWRpYUxpc3QuY3BwCj09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9X
ZWJDb3JlL2Nzcy9NZWRpYUxpc3QuY3BwCShyZXZpc2lvbiAyMTYyMDUpCisrKyBTb3VyY2UvV2Vi
Q29yZS9jc3MvTWVkaWFMaXN0LmNwcAkod29ya2luZyBjb3B5KQpAQCAtMSw2ICsxLDYgQEAKIC8q
CiAgKiAoQykgMTk5OS0yMDAzIExhcnMgS25vbGwgKGtub2xsQGtkZS5vcmcpCi0gKiBDb3B5cmln
aHQgKEMpIDIwMDQsIDIwMDYsIDIwMTAsIDIwMTIgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2Vy
dmVkLgorICogQ29weXJpZ2h0IChDKSAyMDA0LTIwMTcgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJl
c2VydmVkLgogICoKICAqIFRoaXMgbGlicmFyeSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJl
ZGlzdHJpYnV0ZSBpdCBhbmQvb3IKICAqIG1vZGlmeSBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhl
IEdOVSBMaWJyYXJ5IEdlbmVyYWwgUHVibGljCkBAIC0yMzksMTEgKzIzOSwxMSBAQCB2b2lkIE1l
ZGlhTGlzdDo6cmVhdHRhY2goTWVkaWFRdWVyeVNldCogCiAKIHN0YXRpYyB2b2lkIGFkZFJlc29s
dXRpb25XYXJuaW5nTWVzc2FnZVRvQ29uc29sZShEb2N1bWVudCYgZG9jdW1lbnQsIGNvbnN0IFN0
cmluZyYgc2VyaWFsaXplZEV4cHJlc3Npb24sIGNvbnN0IENTU1ByaW1pdGl2ZVZhbHVlJiB2YWx1
ZSkKIHsKLSAgICBzdGF0aWMgTmV2ZXJEZXN0cm95ZWQ8U3RyaW5nPiBtZWRpYVF1ZXJ5TWVzc2Fn
ZShBU0NJSUxpdGVyYWwoIkNvbnNpZGVyIHVzaW5nICdkcHB4JyB1bml0cyBpbnN0ZWFkIG9mICcl
cmVwbGFjZW1lbnRVbml0cyUnLCBhcyBpbiBDU1MgJyVyZXBsYWNlbWVudFVuaXRzJScgbWVhbnMg
ZG90cy1wZXItQ1NTLSVsZW5ndGhVbml0JSwgbm90IGRvdHMtcGVyLXBoeXNpY2FsLSVsZW5ndGhV
bml0JSwgc28gZG9lcyBub3QgY29ycmVzcG9uZCB0byB0aGUgYWN0dWFsICclcmVwbGFjZW1lbnRV
bml0cyUnIG9mIGEgc2NyZWVuLiBJbiBtZWRpYSBxdWVyeSBleHByZXNzaW9uOiAiKSk7Ci0gICAg
c3RhdGljIE5ldmVyRGVzdHJveWVkPFN0cmluZz4gbWVkaWFWYWx1ZURQSShBU0NJSUxpdGVyYWwo
ImRwaSIpKTsKLSAgICBzdGF0aWMgTmV2ZXJEZXN0cm95ZWQ8U3RyaW5nPiBtZWRpYVZhbHVlRFBD
TShBU0NJSUxpdGVyYWwoImRwY20iKSk7Ci0gICAgc3RhdGljIE5ldmVyRGVzdHJveWVkPFN0cmlu
Zz4gbGVuZ3RoVW5pdEluY2goQVNDSUlMaXRlcmFsKCJpbmNoIikpOwotICAgIHN0YXRpYyBOZXZl
ckRlc3Ryb3llZDxTdHJpbmc+IGxlbmd0aFVuaXRDZW50aW1ldGVyKEFTQ0lJTGl0ZXJhbCgiY2Vu
dGltZXRlciIpKTsKKyAgICBzdGF0aWMgTmV2ZXJEZXN0cm95ZWQ8U3RyaW5nPiBtZWRpYVF1ZXJ5
TWVzc2FnZShNQUtFX1NUQVRJQ19TVFJJTkdfSU1QTCgiQ29uc2lkZXIgdXNpbmcgJ2RwcHgnIHVu
aXRzIGluc3RlYWQgb2YgJyVyZXBsYWNlbWVudFVuaXRzJScsIGFzIGluIENTUyAnJXJlcGxhY2Vt
ZW50VW5pdHMlJyBtZWFucyBkb3RzLXBlci1DU1MtJWxlbmd0aFVuaXQlLCBub3QgZG90cy1wZXIt
cGh5c2ljYWwtJWxlbmd0aFVuaXQlLCBzbyBkb2VzIG5vdCBjb3JyZXNwb25kIHRvIHRoZSBhY3R1
YWwgJyVyZXBsYWNlbWVudFVuaXRzJScgb2YgYSBzY3JlZW4uIEluIG1lZGlhIHF1ZXJ5IGV4cHJl
c3Npb246ICIpKTsKKyAgICBzdGF0aWMgTmV2ZXJEZXN0cm95ZWQ8U3RyaW5nPiBtZWRpYVZhbHVl
RFBJKE1BS0VfU1RBVElDX1NUUklOR19JTVBMKCJkcGkiKSk7CisgICAgc3RhdGljIE5ldmVyRGVz
dHJveWVkPFN0cmluZz4gbWVkaWFWYWx1ZURQQ00oTUFLRV9TVEFUSUNfU1RSSU5HX0lNUEwoImRw
Y20iKSk7CisgICAgc3RhdGljIE5ldmVyRGVzdHJveWVkPFN0cmluZz4gbGVuZ3RoVW5pdEluY2go
TUFLRV9TVEFUSUNfU1RSSU5HX0lNUEwoImluY2giKSk7CisgICAgc3RhdGljIE5ldmVyRGVzdHJv
eWVkPFN0cmluZz4gbGVuZ3RoVW5pdENlbnRpbWV0ZXIoTUFLRV9TVEFUSUNfU1RSSU5HX0lNUEwo
ImNlbnRpbWV0ZXIiKSk7CiAKICAgICBTdHJpbmcgbWVzc2FnZTsKICAgICBpZiAodmFsdWUuaXNE
b3RzUGVySW5jaCgpKQpJbmRleDogU291cmNlL1dlYkNvcmUvY3NzL1N0eWxlU2hlZXRDb250ZW50
cy5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvY3NzL1N0eWxlU2hlZXRDb250ZW50
cy5jcHAJKHJldmlzaW9uIDIxNjIwNSkKKysrIFNvdXJjZS9XZWJDb3JlL2Nzcy9TdHlsZVNoZWV0
Q29udGVudHMuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0xLDYgKzEsNiBAQAogLyoKICAqIChDKSAx
OTk5LTIwMDMgTGFycyBLbm9sbCAoa25vbGxAa2RlLm9yZykKLSAqIENvcHlyaWdodCAoQykgMjAw
NCwgMjAwNiwgMjAwNywgMjAxMiwgMjAxMyBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQu
CisgKiBDb3B5cmlnaHQgKEMpIDIwMDQtMjAxNyBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2
ZWQuCiAgKgogICogVGhpcyBsaWJyYXJ5IGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0
cmlidXRlIGl0IGFuZC9vcgogICogbW9kaWZ5IGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05V
IExpYnJhcnkgR2VuZXJhbCBQdWJsaWMKQEAgLTMzOCw3ICszMzgsNyBAQCB2b2lkIFN0eWxlU2hl
ZXRDb250ZW50czo6cGFyc2VBdXRob3JTdHlsCiAKICAgICBpZiAobV9wYXJzZXJDb250ZXh0Lm5l
ZWRzU2l0ZVNwZWNpZmljUXVpcmtzICYmIGlzU3RyaWN0UGFyc2VyTW9kZShtX3BhcnNlckNvbnRl
eHQubW9kZSkpIHsKICAgICAgICAgLy8gV29yayBhcm91bmQgPGh0dHBzOi8vYnVncy53ZWJraXQu
b3JnL3Nob3dfYnVnLmNnaT9pZD0yODM1MD4uCi0gICAgICAgIHN0YXRpYyBOZXZlckRlc3Ryb3ll
ZDxjb25zdCBTdHJpbmc+IG1lZGlhV2lraUtIVE1MRml4ZXNTdHlsZVNoZWV0KEFTQ0lJTGl0ZXJh
bCgiLyogS0hUTUwgZml4IHN0eWxlc2hlZXQgKi9cbi8qIHdvcmsgYXJvdW5kIHRoZSBob3Jpem9u
dGFsIHNjcm9sbGJhcnMgKi9cbiNjb2x1bW4tY29udGVudCB7IG1hcmdpbi1sZWZ0OiAwOyB9XG5c
biIpKTsKKyAgICAgICAgc3RhdGljIE5ldmVyRGVzdHJveWVkPGNvbnN0IFN0cmluZz4gbWVkaWFX
aWtpS0hUTUxGaXhlc1N0eWxlU2hlZXQoTUFLRV9TVEFUSUNfU1RSSU5HX0lNUEwoIi8qIEtIVE1M
IGZpeCBzdHlsZXNoZWV0ICovXG4vKiB3b3JrIGFyb3VuZCB0aGUgaG9yaXpvbnRhbCBzY3JvbGxi
YXJzICovXG4jY29sdW1uLWNvbnRlbnQgeyBtYXJnaW4tbGVmdDogMDsgfVxuXG4iKSk7CiAgICAg
ICAgIC8vIFRoZXJlIGFyZSB0d28gdmFyaWFudHMgb2YgS0hUTUxGaXhlcy5jc3MuIE9uZSBpcyBl
cXVhbCB0byBtZWRpYVdpa2lLSFRNTEZpeGVzU3R5bGVTaGVldCwKICAgICAgICAgLy8gd2hpbGUg
dGhlIG90aGVyIGxhY2tzIHRoZSBzZWNvbmQgdHJhaWxpbmcgbmV3bGluZS4KICAgICAgICAgaWYg
KGJhc2VVUkwoKS5zdHJpbmcoKS5lbmRzV2l0aCgiL0tIVE1MRml4ZXMuY3NzIikgJiYgIXNoZWV0
VGV4dC5pc051bGwoKSAmJiBtZWRpYVdpa2lLSFRNTEZpeGVzU3R5bGVTaGVldC5nZXQoKS5zdGFy
dHNXaXRoKHNoZWV0VGV4dCkKSW5kZXg6IFNvdXJjZS9XZWJDb3JlL2RvbS9Eb2N1bWVudC5jcHAK
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvZG9tL0RvY3VtZW50LmNwcAkocmV2aXNpb24g
MjE2MjA1KQorKysgU291cmNlL1dlYkNvcmUvZG9tL0RvY3VtZW50LmNwcAkod29ya2luZyBjb3B5
KQpAQCAtMTEzNyw5ICsxMTM3LDkgQEAgRXhjZXB0aW9uT3I8UmVmPEVsZW1lbnQ+PiBEb2N1bWVu
dDo6Y3JlYQogCiBTdHJpbmcgRG9jdW1lbnQ6OnJlYWR5U3RhdGUoKSBjb25zdAogewotICAgIHN0
YXRpYyBOZXZlckRlc3Ryb3llZDxjb25zdCBTdHJpbmc+IGxvYWRpbmcoQVNDSUlMaXRlcmFsKCJs
b2FkaW5nIikpOwotICAgIHN0YXRpYyBOZXZlckRlc3Ryb3llZDxjb25zdCBTdHJpbmc+IGludGVy
YWN0aXZlKEFTQ0lJTGl0ZXJhbCgiaW50ZXJhY3RpdmUiKSk7Ci0gICAgc3RhdGljIE5ldmVyRGVz
dHJveWVkPGNvbnN0IFN0cmluZz4gY29tcGxldGUoQVNDSUlMaXRlcmFsKCJjb21wbGV0ZSIpKTsK
KyAgICBzdGF0aWMgTmV2ZXJEZXN0cm95ZWQ8Y29uc3QgU3RyaW5nPiBsb2FkaW5nKE1BS0VfU1RB
VElDX1NUUklOR19JTVBMKCJsb2FkaW5nIikpOworICAgIHN0YXRpYyBOZXZlckRlc3Ryb3llZDxj
b25zdCBTdHJpbmc+IGludGVyYWN0aXZlKE1BS0VfU1RBVElDX1NUUklOR19JTVBMKCJpbnRlcmFj
dGl2ZSIpKTsKKyAgICBzdGF0aWMgTmV2ZXJEZXN0cm95ZWQ8Y29uc3QgU3RyaW5nPiBjb21wbGV0
ZShNQUtFX1NUQVRJQ19TVFJJTkdfSU1QTCgiY29tcGxldGUiKSk7CiAKICAgICBzd2l0Y2ggKG1f
cmVhZHlTdGF0ZSkgewogICAgIGNhc2UgTG9hZGluZzoKSW5kZXg6IFNvdXJjZS9XZWJDb3JlL2Rv
bS9Mb2FkYWJsZUNsYXNzaWNTY3JpcHQuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3Jl
L2RvbS9Mb2FkYWJsZUNsYXNzaWNTY3JpcHQuY3BwCShyZXZpc2lvbiAyMTYyMDUpCisrKyBTb3Vy
Y2UvV2ViQ29yZS9kb20vTG9hZGFibGVDbGFzc2ljU2NyaXB0LmNwcAkod29ya2luZyBjb3B5KQpA
QCAtMSw1ICsxLDUgQEAKIC8qCi0gKiBDb3B5cmlnaHQgKEMpIDIwMTYgQXBwbGUsIEluYy4gQWxs
IFJpZ2h0cyBSZXNlcnZlZC4KKyAqIENvcHlyaWdodCAoQykgMjAxNi0yMDE3IEFwcGxlLCBJbmMu
IEFsbCBSaWdodHMgUmVzZXJ2ZWQuCiAgKgogICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBz
b3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CiAgKiBtb2RpZmljYXRpb24s
IGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKQEAg
LTcyLDcgKzcyLDcgQEAgdm9pZCBMb2FkYWJsZUNsYXNzaWNTY3JpcHQ6Om5vdGlmeUZpbmlzaAog
ewogICAgIEFTU0VSVChtX2NhY2hlZFNjcmlwdCk7CiAgICAgaWYgKHJlc291cmNlLnJlc291cmNl
RXJyb3IoKS5pc0FjY2Vzc0NvbnRyb2woKSkgewotICAgICAgICBzdGF0aWMgTmV2ZXJEZXN0cm95
ZWQ8U3RyaW5nPiBjb25zb2xlTWVzc2FnZShBU0NJSUxpdGVyYWwoIkNyb3NzLW9yaWdpbiBzY3Jp
cHQgbG9hZCBkZW5pZWQgYnkgQ3Jvc3MtT3JpZ2luIFJlc291cmNlIFNoYXJpbmcgcG9saWN5LiIp
KTsKKyAgICAgICAgc3RhdGljIE5ldmVyRGVzdHJveWVkPFN0cmluZz4gY29uc29sZU1lc3NhZ2Uo
TUFLRV9TVEFUSUNfU1RSSU5HX0lNUEwoIkNyb3NzLW9yaWdpbiBzY3JpcHQgbG9hZCBkZW5pZWQg
YnkgQ3Jvc3MtT3JpZ2luIFJlc291cmNlIFNoYXJpbmcgcG9saWN5LiIpKTsKICAgICAgICAgbV9l
cnJvciA9IEVycm9yIHsKICAgICAgICAgICAgIEVycm9yVHlwZTo6Q3Jvc3NPcmlnaW5Mb2FkLAog
ICAgICAgICAgICAgQ29uc29sZU1lc3NhZ2UgewpJbmRleDogU291cmNlL1dlYkNvcmUvZG9tL1Bz
ZXVkb0VsZW1lbnQuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL2RvbS9Qc2V1ZG9F
bGVtZW50LmNwcAkocmV2aXNpb24gMjE2MjA1KQorKysgU291cmNlL1dlYkNvcmUvZG9tL1BzZXVk
b0VsZW1lbnQuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0xLDUgKzEsNiBAQAogLyoKICAqIENvcHly
aWdodCAoQykgMjAxMiBHb29nbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICogQ29weXJp
Z2h0IChDKSAyMDE3IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KICAqCiAgKiBSZWRp
c3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdp
dGhvdXQKICAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBm
b2xsb3dpbmcgY29uZGl0aW9ucyBhcmUKQEAgLTQ0LDggKzQ1LDggQEAgY29uc3QgUXVhbGlmaWVk
TmFtZSYgcHNldWRvRWxlbWVudFRhZ05hbQogCiBTdHJpbmcgUHNldWRvRWxlbWVudDo6cHNldWRv
RWxlbWVudE5hbWVGb3JFdmVudHMoUHNldWRvSWQgcHNldWRvSWQpCiB7Ci0gICAgc3RhdGljIE5l
dmVyRGVzdHJveWVkPGNvbnN0IFN0cmluZz4gYWZ0ZXIoQVNDSUlMaXRlcmFsKCI6OmFmdGVyIikp
OwotICAgIHN0YXRpYyBOZXZlckRlc3Ryb3llZDxjb25zdCBTdHJpbmc+IGJlZm9yZShBU0NJSUxp
dGVyYWwoIjo6YmVmb3JlIikpOworICAgIHN0YXRpYyBOZXZlckRlc3Ryb3llZDxjb25zdCBTdHJp
bmc+IGFmdGVyKE1BS0VfU1RBVElDX1NUUklOR19JTVBMKCI6OmFmdGVyIikpOworICAgIHN0YXRp
YyBOZXZlckRlc3Ryb3llZDxjb25zdCBTdHJpbmc+IGJlZm9yZShNQUtFX1NUQVRJQ19TVFJJTkdf
SU1QTCgiOjpiZWZvcmUiKSk7CiAgICAgc3dpdGNoIChwc2V1ZG9JZCkgewogICAgIGNhc2UgQUZU
RVI6CiAgICAgICAgIHJldHVybiBhZnRlcjsKSW5kZXg6IFNvdXJjZS9XZWJDb3JlL2VkaXRpbmcv
TWFya3VwQWNjdW11bGF0b3IuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL2VkaXRp
bmcvTWFya3VwQWNjdW11bGF0b3IuY3BwCShyZXZpc2lvbiAyMTYyMDUpCisrKyBTb3VyY2UvV2Vi
Q29yZS9lZGl0aW5nL01hcmt1cEFjY3VtdWxhdG9yLmNwcAkod29ya2luZyBjb3B5KQpAQCAtMSw1
ICsxLDUgQEAKIC8qCi0gKiBDb3B5cmlnaHQgKEMpIDIwMDQsIDIwMDUsIDIwMDYsIDIwMDcsIDIw
MDgsIDIwMDksIDIwMTIgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICogQ29weXJp
Z2h0IChDKSAyMDA0LTIwMTcgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgogICogQ29w
eXJpZ2h0IChDKSAyMDA5LCAyMDEwIEdvb2dsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCiAg
KgogICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywg
d2l0aCBvciB3aXRob3V0CkBAIC0yNTcsNyArMjU3LDcgQEAgYm9vbCBNYXJrdXBBY2N1bXVsYXRv
cjo6c2hvdWxkQWRkTmFtZXNwYQogICAgIGlmIChwcmVmaXguaXNFbXB0eSgpKQogICAgICAgICBy
ZXR1cm4gIWVsZW1lbnQuaGFzQXR0cmlidXRlKHhtbG5zQXRvbSk7CiAKLSAgICBzdGF0aWMgTmV2
ZXJEZXN0cm95ZWQ8U3RyaW5nPiB4bWxuc1dpdGhDb2xvbihBU0NJSUxpdGVyYWwoInhtbG5zOiIp
KTsKKyAgICBzdGF0aWMgTmV2ZXJEZXN0cm95ZWQ8U3RyaW5nPiB4bWxuc1dpdGhDb2xvbihNQUtF
X1NUQVRJQ19TVFJJTkdfSU1QTCgieG1sbnM6IikpOwogICAgIHJldHVybiAhZWxlbWVudC5oYXNB
dHRyaWJ1dGUoeG1sbnNXaXRoQ29sb24uZ2V0KCkgKyBwcmVmaXgpOwogfQogCkluZGV4OiBTb3Vy
Y2UvV2ViQ29yZS9lZGl0aW5nL21hcmt1cC5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNv
cmUvZWRpdGluZy9tYXJrdXAuY3BwCShyZXZpc2lvbiAyMTYyMDUpCisrKyBTb3VyY2UvV2ViQ29y
ZS9lZGl0aW5nL21hcmt1cC5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTEsNSArMSw1IEBACiAvKgot
ICogQ29weXJpZ2h0IChDKSAyMDA0LCAyMDA1LCAyMDA2LCAyMDA3LCAyMDA4LCAyMDA5LCAyMDEz
IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqIENvcHlyaWdodCAoQykgMjAwNC0y
MDE3IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KICAqIENvcHlyaWdodCAoQykgMjAw
OCwgMjAwOSwgMjAxMCwgMjAxMSBHb29nbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgogICog
Q29weXJpZ2h0IChDKSAyMDExIElnYWxpYSBTLkwuCiAgKiBDb3B5cmlnaHQgKEMpIDIwMTEgTW90
b3JvbGEgTW9iaWxpdHkuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCkBAIC0yMTMsOCArMjEzLDggQEAg
dm9pZCBTdHlsZWRNYXJrdXBBY2N1bXVsYXRvcjo6YXBwZW5kU3R5bAogCiBjb25zdCBTdHJpbmcm
IFN0eWxlZE1hcmt1cEFjY3VtdWxhdG9yOjpzdHlsZU5vZGVDbG9zZVRhZyhib29sIGlzQmxvY2sp
CiB7Ci0gICAgc3RhdGljIE5ldmVyRGVzdHJveWVkPGNvbnN0IFN0cmluZz4gZGl2Q2xvc2UoQVND
SUlMaXRlcmFsKCI8L2Rpdj4iKSk7Ci0gICAgc3RhdGljIE5ldmVyRGVzdHJveWVkPGNvbnN0IFN0
cmluZz4gc3R5bGVTcGFuQ2xvc2UoQVNDSUlMaXRlcmFsKCI8L3NwYW4+IikpOworICAgIHN0YXRp
YyBOZXZlckRlc3Ryb3llZDxjb25zdCBTdHJpbmc+IGRpdkNsb3NlKE1BS0VfU1RBVElDX1NUUklO
R19JTVBMKCI8L2Rpdj4iKSk7CisgICAgc3RhdGljIE5ldmVyRGVzdHJveWVkPGNvbnN0IFN0cmlu
Zz4gc3R5bGVTcGFuQ2xvc2UoTUFLRV9TVEFUSUNfU1RSSU5HX0lNUEwoIjwvc3Bhbj4iKSk7CiAg
ICAgcmV0dXJuIGlzQmxvY2sgPyBkaXZDbG9zZSA6IHN0eWxlU3BhbkNsb3NlOwogfQogCkBAIC01
NzYsNyArNTc2LDcgQEAgc3RhdGljIE5vZGUqIGhpZ2hlc3RBbmNlc3RvclRvV3JhcE1hcmt1cAog
c3RhdGljIFN0cmluZyBjcmVhdGVNYXJrdXBJbnRlcm5hbChEb2N1bWVudCYgZG9jdW1lbnQsIGNv
bnN0IFJhbmdlJiByYW5nZSwgVmVjdG9yPE5vZGUqPiogbm9kZXMsCiAgICAgRUFubm90YXRlRm9y
SW50ZXJjaGFuZ2Ugc2hvdWxkQW5ub3RhdGUsIGJvb2wgY29udmVydEJsb2Nrc1RvSW5saW5lcywg
RUFic29sdXRlVVJMcyBzaG91bGRSZXNvbHZlVVJMcykKIHsKLSAgICBzdGF0aWMgTmV2ZXJEZXN0
cm95ZWQ8Y29uc3QgU3RyaW5nPiBpbnRlcmNoYW5nZU5ld2xpbmVTdHJpbmcoQVNDSUlMaXRlcmFs
KCI8YnIgY2xhc3M9XCIiIEFwcGxlSW50ZXJjaGFuZ2VOZXdsaW5lICJcIj4iKSk7CisgICAgc3Rh
dGljIE5ldmVyRGVzdHJveWVkPGNvbnN0IFN0cmluZz4gaW50ZXJjaGFuZ2VOZXdsaW5lU3RyaW5n
KE1BS0VfU1RBVElDX1NUUklOR19JTVBMKCI8YnIgY2xhc3M9XCIiIEFwcGxlSW50ZXJjaGFuZ2VO
ZXdsaW5lICJcIj4iKSk7CiAKICAgICBib29sIGNvbGxhcHNlZCA9IHJhbmdlLmNvbGxhcHNlZCgp
OwogICAgIGlmIChjb2xsYXBzZWQpCkluZGV4OiBTb3VyY2UvV2ViQ29yZS9lZGl0aW5nL2NvY29h
L0RhdGFEZXRlY3Rpb24ubW0KPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvZWRpdGluZy9j
b2NvYS9EYXRhRGV0ZWN0aW9uLm1tCShyZXZpc2lvbiAyMTYyMDUpCisrKyBTb3VyY2UvV2ViQ29y
ZS9lZGl0aW5nL2NvY29hL0RhdGFEZXRlY3Rpb24ubW0JKHdvcmtpbmcgY29weSkKQEAgLTEsNSAr
MSw1IEBACiAvKgotICogQ29weXJpZ2h0IChDKSAyMDE0IEFwcGxlLCBJbmMuICBBbGwgcmlnaHRz
IHJlc2VydmVkLgorICogQ29weXJpZ2h0IChDKSAyMDE0LTIwMTcgQXBwbGUsIEluYy4gIEFsbCBy
aWdodHMgcmVzZXJ2ZWQuCiAgKgogICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2Ug
YW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CiAgKiBtb2RpZmljYXRpb24sIGFyZSBw
ZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKQEAgLTY2Miw3
ICs2NjIsNyBAQCBOU0FycmF5ICpEYXRhRGV0ZWN0aW9uOjpkZXRlY3RDb250ZW50SW5SCiAKIGNv
bnN0IFN0cmluZyYgRGF0YURldGVjdGlvbjo6ZGF0YURldGVjdG9yVVJMUHJvdG9jb2woKQogewot
ICAgIHN0YXRpYyBOZXZlckRlc3Ryb3llZDxTdHJpbmc+IHByb3RvY29sKEFTQ0lJTGl0ZXJhbCgi
eC1hcHBsZS1kYXRhLWRldGVjdG9ycyIpKTsKKyAgICBzdGF0aWMgTmV2ZXJEZXN0cm95ZWQ8U3Ry
aW5nPiBwcm90b2NvbChNQUtFX1NUQVRJQ19TVFJJTkdfSU1QTCgieC1hcHBsZS1kYXRhLWRldGVj
dG9ycyIpKTsKICAgICByZXR1cm4gcHJvdG9jb2w7CiB9CiAKSW5kZXg6IFNvdXJjZS9XZWJDb3Jl
L2h0bWwvRm9ybUNvbnRyb2xsZXIuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL2h0
bWwvRm9ybUNvbnRyb2xsZXIuY3BwCShyZXZpc2lvbiAyMTYyMDUpCisrKyBTb3VyY2UvV2ViQ29y
ZS9odG1sL0Zvcm1Db250cm9sbGVyLmNwcAkod29ya2luZyBjb3B5KQpAQCAtMSw1ICsxLDUgQEAK
IC8qCi0gKiBDb3B5cmlnaHQgKEMpIDIwMDYsIDIwMDgsIDIwMDksIDIwMTAgQXBwbGUgSW5jLiBB
bGwgcmlnaHRzIHJlc2VydmVkLgorICogQ29weXJpZ2h0IChDKSAyMDA2LTIwMTcgQXBwbGUgSW5j
LiBBbGwgcmlnaHRzIHJlc2VydmVkLgogICogQ29weXJpZ2h0IChDKSAyMDEwLCAyMDExLCAyMDEy
IEdvb2dsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCiAgKgogICogVGhpcyBsaWJyYXJ5IGlz
IGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vcgpAQCAtMzg3LDcg
KzM4Nyw3IEBAIHN0YXRpYyBTdHJpbmcgZm9ybVN0YXRlU2lnbmF0dXJlKCkKICAgICAvLyBJbiB0
aGUgbGVnYWN5IHZlcnNpb24gb2Ygc2VyaWFsaXplZCBzdGF0ZSwgdGhlIGZpcnN0IGl0ZW0gd2Fz
IGEgbmFtZQogICAgIC8vIGF0dHJpYnV0ZSB2YWx1ZSBvZiBhIGZvcm0gY29udHJvbC4gVGhlIGZv
bGxvd2luZyBzdHJpbmcgbGl0ZXJhbCBzaG91bGQKICAgICAvLyBjb250YWluIHNvbWUgY2hhcmFj
dGVycyB3aGljaCBhcmUgcmFyZWx5IHVzZWQgZm9yIG5hbWUgYXR0cmlidXRlIHZhbHVlcy4KLSAg
ICBzdGF0aWMgTmV2ZXJEZXN0cm95ZWQ8U3RyaW5nPiBzaWduYXR1cmUoQVNDSUlMaXRlcmFsKCJc
blxyPyUgV2ViS2l0IHNlcmlhbGl6ZWQgZm9ybSBzdGF0ZSB2ZXJzaW9uIDggXG5ccj0mIikpOwor
ICAgIHN0YXRpYyBOZXZlckRlc3Ryb3llZDxTdHJpbmc+IHNpZ25hdHVyZShNQUtFX1NUQVRJQ19T
VFJJTkdfSU1QTCgiXG5ccj8lIFdlYktpdCBzZXJpYWxpemVkIGZvcm0gc3RhdGUgdmVyc2lvbiA4
IFxuXHI9JiIpKTsKICAgICByZXR1cm4gc2lnbmF0dXJlOwogfQogCkluZGV4OiBTb3VyY2UvV2Vi
Q29yZS9odG1sL0ltYWdlSW5wdXRUeXBlLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29y
ZS9odG1sL0ltYWdlSW5wdXRUeXBlLmNwcAkocmV2aXNpb24gMjE2MjA1KQorKysgU291cmNlL1dl
YkNvcmUvaHRtbC9JbWFnZUlucHV0VHlwZS5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTEsNSArMSw1
IEBACiAvKgotICogQ29weXJpZ2h0IChDKSAyMDA0LCAyMDA1LCAyMDA2LCAyMDA3LCAyMDA4LCAy
MDA5LCAyMDEwLCAyMDExIEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqIENvcHly
aWdodCAoQykgMjAwNC0yMDE3IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KICAqIENv
cHlyaWdodCAoQykgMjAxMCBHb29nbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgogICogQ29w
eXJpZ2h0IChDKSAyMDEyIFNhbXN1bmcgRWxlY3Ryb25pY3MuIEFsbCByaWdodHMgcmVzZXJ2ZWQu
CiAgKgpAQCAtNjUsOCArNjUsOCBAQCBib29sIEltYWdlSW5wdXRUeXBlOjphcHBlbmRGb3JtRGF0
YShGb3JtCiAgICAgICAgIHJldHVybiB0cnVlOwogICAgIH0KIAotICAgIHN0YXRpYyBOZXZlckRl
c3Ryb3llZDxTdHJpbmc+IGRvdFhTdHJpbmcoQVNDSUlMaXRlcmFsKCIueCIpKTsKLSAgICBzdGF0
aWMgTmV2ZXJEZXN0cm95ZWQ8U3RyaW5nPiBkb3RZU3RyaW5nKEFTQ0lJTGl0ZXJhbCgiLnkiKSk7
CisgICAgc3RhdGljIE5ldmVyRGVzdHJveWVkPFN0cmluZz4gZG90WFN0cmluZyhNQUtFX1NUQVRJ
Q19TVFJJTkdfSU1QTCgiLngiKSk7CisgICAgc3RhdGljIE5ldmVyRGVzdHJveWVkPFN0cmluZz4g
ZG90WVN0cmluZyhNQUtFX1NUQVRJQ19TVFJJTkdfSU1QTCgiLnkiKSk7CiAgICAgZW5jb2Rpbmcu
YXBwZW5kRGF0YShuYW1lICsgZG90WFN0cmluZy5nZXQoKSwgbV9jbGlja0xvY2F0aW9uLngoKSk7
CiAgICAgZW5jb2RpbmcuYXBwZW5kRGF0YShuYW1lICsgZG90WVN0cmluZy5nZXQoKSwgbV9jbGlj
a0xvY2F0aW9uLnkoKSk7CiAKSW5kZXg6IFNvdXJjZS9XZWJDb3JlL2h0bWwvY2FudmFzL0NhbnZh
c1JlbmRlcmluZ0NvbnRleHQyRC5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvaHRt
bC9jYW52YXMvQ2FudmFzUmVuZGVyaW5nQ29udGV4dDJELmNwcAkocmV2aXNpb24gMjE2MjA1KQor
KysgU291cmNlL1dlYkNvcmUvaHRtbC9jYW52YXMvQ2FudmFzUmVuZGVyaW5nQ29udGV4dDJELmNw
cAkod29ya2luZyBjb3B5KQpAQCAtMzUyLDcgKzM1Miw3IEBAIHZvaWQgQ2FudmFzUmVuZGVyaW5n
Q29udGV4dDJEOjpyZWFsaXplU2EKICAgICAgICAgcmVhbGl6ZVNhdmVzTG9vcCgpOwogCiAgICAg
aWYgKG1fdW5yZWFsaXplZFNhdmVDb3VudCkgewotICAgICAgICBzdGF0aWMgTmV2ZXJEZXN0cm95
ZWQ8U3RyaW5nPiBjb25zb2xlTWVzc2FnZShBU0NJSUxpdGVyYWwoIkNhbnZhc1JlbmRlcmluZ0Nv
bnRleHQyRC5zYXZlKCkgaGFzIGJlZW4gY2FsbGVkIHdpdGhvdXQgYSBtYXRjaGluZyByZXN0b3Jl
KCkgdG9vIG1hbnkgdGltZXMuIElnbm9yaW5nIHNhdmUoKS4iKSk7CisgICAgICAgIHN0YXRpYyBO
ZXZlckRlc3Ryb3llZDxTdHJpbmc+IGNvbnNvbGVNZXNzYWdlKE1BS0VfU1RBVElDX1NUUklOR19J
TVBMKCJDYW52YXNSZW5kZXJpbmdDb250ZXh0MkQuc2F2ZSgpIGhhcyBiZWVuIGNhbGxlZCB3aXRo
b3V0IGEgbWF0Y2hpbmcgcmVzdG9yZSgpIHRvbyBtYW55IHRpbWVzLiBJZ25vcmluZyBzYXZlKCku
IikpOwogICAgICAgICBjYW52YXMoKS5kb2N1bWVudCgpLmFkZENvbnNvbGVNZXNzYWdlKE1lc3Nh
Z2VTb3VyY2U6OlJlbmRlcmluZywgTWVzc2FnZUxldmVsOjpFcnJvciwgY29uc29sZU1lc3NhZ2Up
OwogICAgIH0KIH0KQEAgLTE5ODEsNyArMTk4MSw3IEBAIEV4Y2VwdGlvbk9yPFJlZlB0cjxJbWFn
ZURhdGE+PiBDYW52YXNSZW4KIEV4Y2VwdGlvbk9yPFJlZlB0cjxJbWFnZURhdGE+PiBDYW52YXNS
ZW5kZXJpbmdDb250ZXh0MkQ6OmdldEltYWdlRGF0YShJbWFnZUJ1ZmZlcjo6Q29vcmRpbmF0ZVN5
c3RlbSBjb29yZGluYXRlU3lzdGVtLCBmbG9hdCBzeCwgZmxvYXQgc3ksIGZsb2F0IHN3LCBmbG9h
dCBzaCkgY29uc3QKIHsKICAgICBpZiAoIWNhbnZhcygpLm9yaWdpbkNsZWFuKCkpIHsKLSAgICAg
ICAgc3RhdGljIE5ldmVyRGVzdHJveWVkPFN0cmluZz4gY29uc29sZU1lc3NhZ2UoQVNDSUlMaXRl
cmFsKCJVbmFibGUgdG8gZ2V0IGltYWdlIGRhdGEgZnJvbSBjYW52YXMgYmVjYXVzZSB0aGUgY2Fu
dmFzIGhhcyBiZWVuIHRhaW50ZWQgYnkgY3Jvc3Mtb3JpZ2luIGRhdGEuIikpOworICAgICAgICBz
dGF0aWMgTmV2ZXJEZXN0cm95ZWQ8U3RyaW5nPiBjb25zb2xlTWVzc2FnZShNQUtFX1NUQVRJQ19T
VFJJTkdfSU1QTCgiVW5hYmxlIHRvIGdldCBpbWFnZSBkYXRhIGZyb20gY2FudmFzIGJlY2F1c2Ug
dGhlIGNhbnZhcyBoYXMgYmVlbiB0YWludGVkIGJ5IGNyb3NzLW9yaWdpbiBkYXRhLiIpKTsKICAg
ICAgICAgY2FudmFzKCkuZG9jdW1lbnQoKS5hZGRDb25zb2xlTWVzc2FnZShNZXNzYWdlU291cmNl
OjpTZWN1cml0eSwgTWVzc2FnZUxldmVsOjpFcnJvciwgY29uc29sZU1lc3NhZ2UpOwogICAgICAg
ICByZXR1cm4gRXhjZXB0aW9uIHsgU0VDVVJJVFlfRVJSIH07CiAgICAgfQpJbmRleDogU291cmNl
L1dlYkNvcmUvaHRtbC9wYXJzZXIvWFNTQXVkaXRvci5jcHAKPT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNl
L1dlYkNvcmUvaHRtbC9wYXJzZXIvWFNTQXVkaXRvci5jcHAJKHJldmlzaW9uIDIxNjIwNSkKKysr
IFNvdXJjZS9XZWJDb3JlL2h0bWwvcGFyc2VyL1hTU0F1ZGl0b3IuY3BwCSh3b3JraW5nIGNvcHkp
CkBAIC0xLDYgKzEsNyBAQAogLyoKICAqIENvcHlyaWdodCAoQykgMjAxMSBBZGFtIEJhcnRoLiBB
bGwgUmlnaHRzIFJlc2VydmVkLgogICogQ29weXJpZ2h0IChDKSAyMDExIERhbmllbCBCYXRlcyAo
ZGJhdGVzQGludHVkYXRhLmNvbSkuCisgKiBDb3B5cmlnaHQgKEMpIDIwMTcgQXBwbGUgSW5jLiBB
bGwgcmlnaHRzIHJlc2VydmVkLgogICoKICAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291
cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAogICogbW9kaWZpY2F0aW9uLCBh
cmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCkBAIC0z
MTYsNyArMzE3LDcgQEAgdm9pZCBYU1NBdWRpdG9yOjppbml0KERvY3VtZW50KiBkb2N1bWVudAog
CiAgICAgU3RyaW5nIGh0dHBCb2R5QXNTdHJpbmc7CiAgICAgaWYgKERvY3VtZW50TG9hZGVyKiBk
b2N1bWVudExvYWRlciA9IGRvY3VtZW50LT5mcmFtZSgpLT5sb2FkZXIoKS5kb2N1bWVudExvYWRl
cigpKSB7Ci0gICAgICAgIHN0YXRpYyBOZXZlckRlc3Ryb3llZDxTdHJpbmc+IFhTU1Byb3RlY3Rp
b25IZWFkZXIoQVNDSUlMaXRlcmFsKCJYLVhTUy1Qcm90ZWN0aW9uIikpOworICAgICAgICBzdGF0
aWMgTmV2ZXJEZXN0cm95ZWQ8U3RyaW5nPiBYU1NQcm90ZWN0aW9uSGVhZGVyKE1BS0VfU1RBVElD
X1NUUklOR19JTVBMKCJYLVhTUy1Qcm90ZWN0aW9uIikpOwogICAgICAgICBTdHJpbmcgaGVhZGVy
VmFsdWUgPSBkb2N1bWVudExvYWRlci0+cmVzcG9uc2UoKS5odHRwSGVhZGVyRmllbGQoWFNTUHJv
dGVjdGlvbkhlYWRlcik7CiAgICAgICAgIFN0cmluZyBlcnJvckRldGFpbHM7CiAgICAgICAgIHVu
c2lnbmVkIGVycm9yUG9zaXRpb24gPSAwOwpAQCAtNTYzLDcgKzU2NCw3IEBAIGJvb2wgWFNTQXVk
aXRvcjo6ZmlsdGVyQnV0dG9uVG9rZW4oY29uc3QKIAogYm9vbCBYU1NBdWRpdG9yOjplcmFzZURh
bmdlcm91c0F0dHJpYnV0ZXNJZkluamVjdGVkKGNvbnN0IEZpbHRlclRva2VuUmVxdWVzdCYgcmVx
dWVzdCkKIHsKLSAgICBzdGF0aWMgTmV2ZXJEZXN0cm95ZWQ8U3RyaW5nPiBzYWZlSmF2YVNjcmlw
dFVSTChBU0NJSUxpdGVyYWwoImphdmFzY3JpcHQ6dm9pZCgwKSIpKTsKKyAgICBzdGF0aWMgTmV2
ZXJEZXN0cm95ZWQ8U3RyaW5nPiBzYWZlSmF2YVNjcmlwdFVSTChNQUtFX1NUQVRJQ19TVFJJTkdf
SU1QTCgiamF2YXNjcmlwdDp2b2lkKDApIikpOwogCiAgICAgYm9vbCBkaWRCbG9ja1NjcmlwdCA9
IGZhbHNlOwogICAgIGZvciAoc2l6ZV90IGkgPSAwOyBpIDwgcmVxdWVzdC50b2tlbi5hdHRyaWJ1
dGVzKCkuc2l6ZSgpOyArK2kpIHsKSW5kZXg6IFNvdXJjZS9XZWJDb3JlL2h0bWwvdHJhY2svVlRU
Q3VlLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9odG1sL3RyYWNrL1ZUVEN1ZS5j
cHAJKHJldmlzaW9uIDIxNjIwNSkKKysrIFNvdXJjZS9XZWJDb3JlL2h0bWwvdHJhY2svVlRUQ3Vl
LmNwcAkod29ya2luZyBjb3B5KQpAQCAtMSw2ICsxLDYgQEAKIC8qCiAgKiBDb3B5cmlnaHQgKEMp
IDIwMTEsIDIwMTMgR29vZ2xlIEluYy4gIEFsbCByaWdodHMgcmVzZXJ2ZWQuCi0gKiBDb3B5cmln
aHQgKEMpIDIwMTEtMjAxNCBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKiBDb3B5
cmlnaHQgKEMpIDIwMTEtMjAxNyBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCiAgKgog
ICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0
aCBvciB3aXRob3V0CiAgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhh
dCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMgYXJlCkBAIC03NCwzMSArNzQsMzEgQEAgQ09NUElM
RV9BU1NFUlQoV1RGX0FSUkFZX0xFTkdUSChkaXNwbGF5QQogCiBzdGF0aWMgY29uc3QgU3RyaW5n
JiBzdGFydEtleXdvcmQoKQogewotICAgIHN0YXRpYyBOZXZlckRlc3Ryb3llZDxjb25zdCBTdHJp
bmc+IHN0YXJ0KEFTQ0lJTGl0ZXJhbCgic3RhcnQiKSk7CisgICAgc3RhdGljIE5ldmVyRGVzdHJv
eWVkPGNvbnN0IFN0cmluZz4gc3RhcnQoTUFLRV9TVEFUSUNfU1RSSU5HX0lNUEwoInN0YXJ0Iikp
OwogICAgIHJldHVybiBzdGFydDsKIH0KIAogc3RhdGljIGNvbnN0IFN0cmluZyYgbWlkZGxlS2V5
d29yZCgpCiB7Ci0gICAgc3RhdGljIE5ldmVyRGVzdHJveWVkPGNvbnN0IFN0cmluZz4gbWlkZGxl
KEFTQ0lJTGl0ZXJhbCgibWlkZGxlIikpOworICAgIHN0YXRpYyBOZXZlckRlc3Ryb3llZDxjb25z
dCBTdHJpbmc+IG1pZGRsZShNQUtFX1NUQVRJQ19TVFJJTkdfSU1QTCgibWlkZGxlIikpOwogICAg
IHJldHVybiBtaWRkbGU7CiB9CiAKIHN0YXRpYyBjb25zdCBTdHJpbmcmIGVuZEtleXdvcmQoKQog
ewotICAgIHN0YXRpYyBOZXZlckRlc3Ryb3llZDxjb25zdCBTdHJpbmc+IGVuZChBU0NJSUxpdGVy
YWwoImVuZCIpKTsKKyAgICBzdGF0aWMgTmV2ZXJEZXN0cm95ZWQ8Y29uc3QgU3RyaW5nPiBlbmQo
TUFLRV9TVEFUSUNfU1RSSU5HX0lNUEwoImVuZCIpKTsKICAgICByZXR1cm4gZW5kOwogfQogCiBz
dGF0aWMgY29uc3QgU3RyaW5nJiBsZWZ0S2V5d29yZCgpCiB7Ci0gICAgc3RhdGljIE5ldmVyRGVz
dHJveWVkPGNvbnN0IFN0cmluZz4gbGVmdCgibGVmdCIpOworICAgIHN0YXRpYyBOZXZlckRlc3Ry
b3llZDxjb25zdCBTdHJpbmc+IGxlZnQoTUFLRV9TVEFUSUNfU1RSSU5HX0lNUEwoImxlZnQiKSk7
CiAgICAgcmV0dXJuIGxlZnQ7CiB9CiAKIHN0YXRpYyBjb25zdCBTdHJpbmcmIHJpZ2h0S2V5d29y
ZCgpCiB7Ci0gICAgc3RhdGljIE5ldmVyRGVzdHJveWVkPGNvbnN0IFN0cmluZz4gcmlnaHQoInJp
Z2h0Iik7CisgICAgc3RhdGljIE5ldmVyRGVzdHJveWVkPGNvbnN0IFN0cmluZz4gcmlnaHQoTUFL
RV9TVEFUSUNfU1RSSU5HX0lNUEwoInJpZ2h0IikpOwogICAgIHJldHVybiByaWdodDsKIH0KIApA
QCAtMTA5LDEzICsxMDksMTMgQEAgc3RhdGljIGNvbnN0IFN0cmluZyYgaG9yaXpvbnRhbEtleXdv
cmQoKQogCiBzdGF0aWMgY29uc3QgU3RyaW5nJiB2ZXJ0aWNhbEdyb3dpbmdMZWZ0S2V5d29yZCgp
CiB7Ci0gICAgc3RhdGljIE5ldmVyRGVzdHJveWVkPGNvbnN0IFN0cmluZz4gdmVydGljYWxybChB
U0NJSUxpdGVyYWwoInJsIikpOworICAgIHN0YXRpYyBOZXZlckRlc3Ryb3llZDxjb25zdCBTdHJp
bmc+IHZlcnRpY2FscmwoTUFLRV9TVEFUSUNfU1RSSU5HX0lNUEwoInJsIikpOwogICAgIHJldHVy
biB2ZXJ0aWNhbHJsOwogfQogCiBzdGF0aWMgY29uc3QgU3RyaW5nJiB2ZXJ0aWNhbEdyb3dpbmdS
aWdodEtleXdvcmQoKQogewotICAgIHN0YXRpYyBOZXZlckRlc3Ryb3llZDxjb25zdCBTdHJpbmc+
IHZlcnRpY2FsbHIoQVNDSUlMaXRlcmFsKCJsciIpKTsKKyAgICBzdGF0aWMgTmV2ZXJEZXN0cm95
ZWQ8Y29uc3QgU3RyaW5nPiB2ZXJ0aWNhbGxyKE1BS0VfU1RBVElDX1NUUklOR19JTVBMKCJsciIp
KTsKICAgICByZXR1cm4gdmVydGljYWxscjsKIH0KIApAQCAtNjA5LDcgKzYwOSw3IEBAIHN0YXRp
YyBib29sIGlzQ3VlUGFyYWdyYXBoU2VwYXJhdG9yKFVDaGEKIAogdm9pZCBWVFRDdWU6OmRldGVy
bWluZVRleHREaXJlY3Rpb24oKQogewotICAgIHN0YXRpYyBOZXZlckRlc3Ryb3llZDxjb25zdCBT
dHJpbmc+IHJ0VGFnKEFTQ0lJTGl0ZXJhbCgicnQiKSk7CisgICAgc3RhdGljIE5ldmVyRGVzdHJv
eWVkPGNvbnN0IFN0cmluZz4gcnRUYWcoTUFLRV9TVEFUSUNfU1RSSU5HX0lNUEwoInJ0IikpOwog
ICAgIGNyZWF0ZVdlYlZUVE5vZGVUcmVlKCk7CiAgICAgaWYgKCFtX3dlYlZUVE5vZGVUcmVlKQog
ICAgICAgICByZXR1cm47CkBAIC03NTMsNyArNzUzLDcgQEAgdm9pZCBWVFRDdWU6OmNhbGN1bGF0
ZURpc3BsYXlQYXJhbWV0ZXJzKAogICAgIAogdm9pZCBWVFRDdWU6Om1hcmtGdXR1cmVBbmRQYXN0
Tm9kZXMoQ29udGFpbmVyTm9kZSogcm9vdCwgY29uc3QgTWVkaWFUaW1lJiBwcmV2aW91c1RpbWVz
dGFtcCwgY29uc3QgTWVkaWFUaW1lJiBtb3ZpZVRpbWUpCiB7Ci0gICAgc3RhdGljIE5ldmVyRGVz
dHJveWVkPGNvbnN0IFN0cmluZz4gdGltZXN0YW1wVGFnKEFTQ0lJTGl0ZXJhbCgidGltZXN0YW1w
IikpOworICAgIHN0YXRpYyBOZXZlckRlc3Ryb3llZDxjb25zdCBTdHJpbmc+IHRpbWVzdGFtcFRh
ZyhNQUtFX1NUQVRJQ19TVFJJTkdfSU1QTCgidGltZXN0YW1wIikpOwogICAgIAogICAgIGJvb2wg
aXNQYXN0Tm9kZSA9IHRydWU7CiAgICAgTWVkaWFUaW1lIGN1cnJlbnRUaW1lc3RhbXAgPSBwcmV2
aW91c1RpbWVzdGFtcDsKSW5kZXg6IFNvdXJjZS9XZWJDb3JlL2luc3BlY3Rvci9JbnNwZWN0b3JD
U1NBZ2VudC5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvaW5zcGVjdG9yL0luc3Bl
Y3RvckNTU0FnZW50LmNwcAkocmV2aXNpb24gMjE2MjA1KQorKysgU291cmNlL1dlYkNvcmUvaW5z
cGVjdG9yL0luc3BlY3RvckNTU0FnZW50LmNwcAkod29ya2luZyBjb3B5KQpAQCAtMSw2ICsxLDYg
QEAKIC8qCiAgKiBDb3B5cmlnaHQgKEMpIDIwMTAgR29vZ2xlIEluYy4gQWxsIHJpZ2h0cyByZXNl
cnZlZC4KLSAqIENvcHlyaWdodCAoQykgMjAxNSBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2
ZWQuCisgKiBDb3B5cmlnaHQgKEMpIDIwMTUtMjAxNyBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVz
ZXJ2ZWQuCiAgKgogICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFy
eSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CiAgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQg
cHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKQEAgLTc3LDEwICs3NywxMCBA
QCBlbnVtIEZvcmNlUHNldWRvQ2xhc3NGbGFncyB7CiAKIHN0YXRpYyB1bnNpZ25lZCBjb21wdXRl
UHNldWRvQ2xhc3NNYXNrKGNvbnN0IEluc3BlY3RvckFycmF5JiBwc2V1ZG9DbGFzc0FycmF5KQog
ewotICAgIHN0YXRpYyBOZXZlckRlc3Ryb3llZDxTdHJpbmc+IGFjdGl2ZShBU0NJSUxpdGVyYWwo
ImFjdGl2ZSIpKTsKLSAgICBzdGF0aWMgTmV2ZXJEZXN0cm95ZWQ8U3RyaW5nPiBob3ZlcihBU0NJ
SUxpdGVyYWwoImhvdmVyIikpOwotICAgIHN0YXRpYyBOZXZlckRlc3Ryb3llZDxTdHJpbmc+IGZv
Y3VzKEFTQ0lJTGl0ZXJhbCgiZm9jdXMiKSk7Ci0gICAgc3RhdGljIE5ldmVyRGVzdHJveWVkPFN0
cmluZz4gdmlzaXRlZChBU0NJSUxpdGVyYWwoInZpc2l0ZWQiKSk7CisgICAgc3RhdGljIE5ldmVy
RGVzdHJveWVkPFN0cmluZz4gYWN0aXZlKE1BS0VfU1RBVElDX1NUUklOR19JTVBMKCJhY3RpdmUi
KSk7CisgICAgc3RhdGljIE5ldmVyRGVzdHJveWVkPFN0cmluZz4gaG92ZXIoTUFLRV9TVEFUSUNf
U1RSSU5HX0lNUEwoImhvdmVyIikpOworICAgIHN0YXRpYyBOZXZlckRlc3Ryb3llZDxTdHJpbmc+
IGZvY3VzKE1BS0VfU1RBVElDX1NUUklOR19JTVBMKCJmb2N1cyIpKTsKKyAgICBzdGF0aWMgTmV2
ZXJEZXN0cm95ZWQ8U3RyaW5nPiB2aXNpdGVkKE1BS0VfU1RBVElDX1NUUklOR19JTVBMKCJ2aXNp
dGVkIikpOwogICAgIGlmICghcHNldWRvQ2xhc3NBcnJheS5sZW5ndGgoKSkKICAgICAgICAgcmV0
dXJuIFBzZXVkb0NsYXNzTm9uZTsKIApJbmRleDogU291cmNlL1dlYkNvcmUvaW5zcGVjdG9yL0lu
c3BlY3RvckluZGV4ZWREQkFnZW50LmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9p
bnNwZWN0b3IvSW5zcGVjdG9ySW5kZXhlZERCQWdlbnQuY3BwCShyZXZpc2lvbiAyMTYyMDUpCisr
KyBTb3VyY2UvV2ViQ29yZS9pbnNwZWN0b3IvSW5zcGVjdG9ySW5kZXhlZERCQWdlbnQuY3BwCSh3
b3JraW5nIGNvcHkpCkBAIC0xLDYgKzEsNiBAQAogLyoKICAqIENvcHlyaWdodCAoQykgMjAxMiBH
b29nbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgotICogQ29weXJpZ2h0IChDKSAyMDE1IEFw
cGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqIENvcHlyaWdodCAoQykgMjAxNS0yMDE3
IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KICAqCiAgKiBSZWRpc3RyaWJ1dGlvbiBh
bmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKICAqIG1v
ZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29u
ZGl0aW9ucyBhcmUKQEAgLTI3NCwxMCArMjc0LDEwIEBAIHN0YXRpYyBSZWZQdHI8SURCS2V5PiBp
ZGJLZXlGcm9tSW5zcGVjdG8KICAgICBpZiAoIWtleS0+Z2V0U3RyaW5nKCJ0eXBlIiwgdHlwZSkp
CiAgICAgICAgIHJldHVybiBudWxscHRyOwogCi0gICAgc3RhdGljIE5ldmVyRGVzdHJveWVkPGNv
bnN0IFN0cmluZz4gbnVtYmVyVHlwZShBU0NJSUxpdGVyYWwoIm51bWJlciIpKTsKLSAgICBzdGF0
aWMgTmV2ZXJEZXN0cm95ZWQ8Y29uc3QgU3RyaW5nPiBzdHJpbmdUeXBlKEFTQ0lJTGl0ZXJhbCgi
c3RyaW5nIikpOwotICAgIHN0YXRpYyBOZXZlckRlc3Ryb3llZDxjb25zdCBTdHJpbmc+IGRhdGVU
eXBlKEFTQ0lJTGl0ZXJhbCgiZGF0ZSIpKTsKLSAgICBzdGF0aWMgTmV2ZXJEZXN0cm95ZWQ8Y29u
c3QgU3RyaW5nPiBhcnJheVR5cGUoQVNDSUlMaXRlcmFsKCJhcnJheSIpKTsKKyAgICBzdGF0aWMg
TmV2ZXJEZXN0cm95ZWQ8Y29uc3QgU3RyaW5nPiBudW1iZXJUeXBlKE1BS0VfU1RBVElDX1NUUklO
R19JTVBMKCJudW1iZXIiKSk7CisgICAgc3RhdGljIE5ldmVyRGVzdHJveWVkPGNvbnN0IFN0cmlu
Zz4gc3RyaW5nVHlwZShNQUtFX1NUQVRJQ19TVFJJTkdfSU1QTCgic3RyaW5nIikpOworICAgIHN0
YXRpYyBOZXZlckRlc3Ryb3llZDxjb25zdCBTdHJpbmc+IGRhdGVUeXBlKE1BS0VfU1RBVElDX1NU
UklOR19JTVBMKCJkYXRlIikpOworICAgIHN0YXRpYyBOZXZlckRlc3Ryb3llZDxjb25zdCBTdHJp
bmc+IGFycmF5VHlwZShNQUtFX1NUQVRJQ19TVFJJTkdfSU1QTCgiYXJyYXkiKSk7CiAKICAgICBS
ZWZQdHI8SURCS2V5PiBpZGJLZXk7CiAgICAgaWYgKHR5cGUgPT0gbnVtYmVyVHlwZSkgewpJbmRl
eDogU291cmNlL1dlYkNvcmUvaW5zcGVjdG9yL0luc3BlY3RvclBhZ2VBZ2VudC5jcHAKPT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PQotLS0gU291cmNlL1dlYkNvcmUvaW5zcGVjdG9yL0luc3BlY3RvclBhZ2VBZ2VudC5jcHAJ
KHJldmlzaW9uIDIxNjIwNSkKKysrIFNvdXJjZS9XZWJDb3JlL2luc3BlY3Rvci9JbnNwZWN0b3JQ
YWdlQWdlbnQuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0xLDYgKzEsNiBAQAogLyoKICAqIENvcHly
aWdodCAoQykgMjAxMSBHb29nbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgotICogQ29weXJp
Z2h0IChDKSAyMDE1IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqIENvcHlyaWdo
dCAoQykgMjAxNS0yMDE3IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KICAqCiAgKiBS
ZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9y
IHdpdGhvdXQKICAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRo
ZSBmb2xsb3dpbmcgY29uZGl0aW9ucyBhcmUKQEAgLTIwNCw4ICsyMDQsOCBAQCB2b2lkIEluc3Bl
Y3RvclBhZ2VBZ2VudDo6cmVzb3VyY2VDb250ZW50CiAvL3N0YXRpYwogU3RyaW5nIEluc3BlY3Rv
clBhZ2VBZ2VudDo6c291cmNlTWFwVVJMRm9yUmVzb3VyY2UoQ2FjaGVkUmVzb3VyY2UqIGNhY2hl
ZFJlc291cmNlKQogewotICAgIHN0YXRpYyBOZXZlckRlc3Ryb3llZDxTdHJpbmc+IHNvdXJjZU1h
cEhUVFBIZWFkZXIoQVNDSUlMaXRlcmFsKCJTb3VyY2VNYXAiKSk7Ci0gICAgc3RhdGljIE5ldmVy
RGVzdHJveWVkPFN0cmluZz4gc291cmNlTWFwSFRUUEhlYWRlckRlcHJlY2F0ZWQoQVNDSUlMaXRl
cmFsKCJYLVNvdXJjZU1hcCIpKTsKKyAgICBzdGF0aWMgTmV2ZXJEZXN0cm95ZWQ8U3RyaW5nPiBz
b3VyY2VNYXBIVFRQSGVhZGVyKE1BS0VfU1RBVElDX1NUUklOR19JTVBMKCJTb3VyY2VNYXAiKSk7
CisgICAgc3RhdGljIE5ldmVyRGVzdHJveWVkPFN0cmluZz4gc291cmNlTWFwSFRUUEhlYWRlckRl
cHJlY2F0ZWQoTUFLRV9TVEFUSUNfU1RSSU5HX0lNUEwoIlgtU291cmNlTWFwIikpOwogCiAgICAg
aWYgKCFjYWNoZWRSZXNvdXJjZSkKICAgICAgICAgcmV0dXJuIFN0cmluZygpOwpJbmRleDogU291
cmNlL1dlYkNvcmUvaW5zcGVjdG9yL1BhZ2VEZWJ1Z2dlckFnZW50LmNwcAo9PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0t
LSBTb3VyY2UvV2ViQ29yZS9pbnNwZWN0b3IvUGFnZURlYnVnZ2VyQWdlbnQuY3BwCShyZXZpc2lv
biAyMTYyMDUpCisrKyBTb3VyY2UvV2ViQ29yZS9pbnNwZWN0b3IvUGFnZURlYnVnZ2VyQWdlbnQu
Y3BwCSh3b3JraW5nIGNvcHkpCkBAIC0xLDYgKzEsNiBAQAogLyoKICAqIENvcHlyaWdodCAoQykg
MjAxMSBHb29nbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgotICogQ29weXJpZ2h0IChDKSAy
MDE1IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqIENvcHlyaWdodCAoQykgMjAx
NS0yMDE3IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KICAqCiAgKiBSZWRpc3RyaWJ1
dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQK
ICAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dp
bmcgY29uZGl0aW9ucyBhcmUKQEAgLTczLDggKzczLDggQEAgdm9pZCBQYWdlRGVidWdnZXJBZ2Vu
dDo6ZGlzYWJsZShib29sIGlzQgogCiBTdHJpbmcgUGFnZURlYnVnZ2VyQWdlbnQ6OnNvdXJjZU1h
cFVSTEZvclNjcmlwdChjb25zdCBTY3JpcHQmIHNjcmlwdCkKIHsKLSAgICBzdGF0aWMgTmV2ZXJE
ZXN0cm95ZWQ8U3RyaW5nPiBzb3VyY2VNYXBIVFRQSGVhZGVyKEFTQ0lJTGl0ZXJhbCgiU291cmNl
TWFwIikpOwotICAgIHN0YXRpYyBOZXZlckRlc3Ryb3llZDxTdHJpbmc+IHNvdXJjZU1hcEhUVFBI
ZWFkZXJEZXByZWNhdGVkKEFTQ0lJTGl0ZXJhbCgiWC1Tb3VyY2VNYXAiKSk7CisgICAgc3RhdGlj
IE5ldmVyRGVzdHJveWVkPFN0cmluZz4gc291cmNlTWFwSFRUUEhlYWRlcihNQUtFX1NUQVRJQ19T
VFJJTkdfSU1QTCgiU291cmNlTWFwIikpOworICAgIHN0YXRpYyBOZXZlckRlc3Ryb3llZDxTdHJp
bmc+IHNvdXJjZU1hcEhUVFBIZWFkZXJEZXByZWNhdGVkKE1BS0VfU1RBVElDX1NUUklOR19JTVBM
KCJYLVNvdXJjZU1hcCIpKTsKIAogICAgIGlmICghc2NyaXB0LnVybC5pc0VtcHR5KCkpIHsKICAg
ICAgICAgQ2FjaGVkUmVzb3VyY2UqIHJlc291cmNlID0gbV9wYWdlQWdlbnQtPmNhY2hlZFJlc291
cmNlKCZtX3BhZ2UubWFpbkZyYW1lKCksIFVSTChQYXJzZWRVUkxTdHJpbmcsIHNjcmlwdC51cmwp
KTsKSW5kZXg6IFNvdXJjZS9XZWJDb3JlL2xvYWRlci9JbWFnZUxvYWRlci5jcHAKPT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PQotLS0gU291cmNlL1dlYkNvcmUvbG9hZGVyL0ltYWdlTG9hZGVyLmNwcAkocmV2aXNpb24gMjE2
MjA1KQorKysgU291cmNlL1dlYkNvcmUvbG9hZGVyL0ltYWdlTG9hZGVyLmNwcAkod29ya2luZyBj
b3B5KQpAQCAtMSw3ICsxLDcgQEAKIC8qCiAgKiBDb3B5cmlnaHQgKEMpIDE5OTkgTGFycyBLbm9s
bCAoa25vbGxAa2RlLm9yZykKICAqICAgICAgICAgICAoQykgMTk5OSBBbnR0aSBLb2l2aXN0byAo
a29pdmlzdG9Aa2RlLm9yZykKLSAqIENvcHlyaWdodCAoQykgMjAwNCwgMjAwNSwgMjAwNiwgMjAw
NywgMjAwOSwgMjAxMCBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKiBDb3B5cmln
aHQgKEMpIDIwMDQtMjAxNyBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCiAgKgogICog
VGhpcyBsaWJyYXJ5IGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFu
ZC9vcgogICogbW9kaWZ5IGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIExpYnJhcnkgR2Vu
ZXJhbCBQdWJsaWMKQEAgLTI4Nyw3ICsyODcsNyBAQCB2b2lkIEltYWdlTG9hZGVyOjpub3RpZnlG
aW5pc2hlZChDYWNoZWRSCiAgICAgICAgIG1faGFzUGVuZGluZ0Vycm9yRXZlbnQgPSB0cnVlOwog
ICAgICAgICBlcnJvckV2ZW50U2VuZGVyKCkuZGlzcGF0Y2hFdmVudFNvb24oKnRoaXMpOwogCi0g
ICAgICAgIHN0YXRpYyBOZXZlckRlc3Ryb3llZDxTdHJpbmc+IGNvbnNvbGVNZXNzYWdlKEFTQ0lJ
TGl0ZXJhbCgiQ3Jvc3Mtb3JpZ2luIGltYWdlIGxvYWQgZGVuaWVkIGJ5IENyb3NzLU9yaWdpbiBS
ZXNvdXJjZSBTaGFyaW5nIHBvbGljeS4iKSk7CisgICAgICAgIHN0YXRpYyBOZXZlckRlc3Ryb3ll
ZDxTdHJpbmc+IGNvbnNvbGVNZXNzYWdlKE1BS0VfU1RBVElDX1NUUklOR19JTVBMKCJDcm9zcy1v
cmlnaW4gaW1hZ2UgbG9hZCBkZW5pZWQgYnkgQ3Jvc3MtT3JpZ2luIFJlc291cmNlIFNoYXJpbmcg
cG9saWN5LiIpKTsKICAgICAgICAgZWxlbWVudCgpLmRvY3VtZW50KCkuYWRkQ29uc29sZU1lc3Nh
Z2UoTWVzc2FnZVNvdXJjZTo6U2VjdXJpdHksIE1lc3NhZ2VMZXZlbDo6RXJyb3IsIGNvbnNvbGVN
ZXNzYWdlKTsKIAogICAgICAgICBBU1NFUlQoIW1faGFzUGVuZGluZ0xvYWRFdmVudCk7CkluZGV4
OiBTb3VyY2UvV2ViQ29yZS9sb2FkZXIvVGV4dFRyYWNrTG9hZGVyLmNwcAo9PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0t
LSBTb3VyY2UvV2ViQ29yZS9sb2FkZXIvVGV4dFRyYWNrTG9hZGVyLmNwcAkocmV2aXNpb24gMjE2
MjA1KQorKysgU291cmNlL1dlYkNvcmUvbG9hZGVyL1RleHRUcmFja0xvYWRlci5jcHAJKHdvcmtp
bmcgY29weSkKQEAgLTEsNiArMSw2IEBACiAvKgogICogQ29weXJpZ2h0IChDKSAyMDExIEdvb2ds
ZSBJbmMuICBBbGwgcmlnaHRzIHJlc2VydmVkLgotICogQ29weXJpZ2h0IChDKSAyMDE0IEFwcGxl
IEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqIENvcHlyaWdodCAoQykgMjAxNC0yMDE3IEFw
cGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KICAqCiAgKiBSZWRpc3RyaWJ1dGlvbiBhbmQg
dXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKICAqIG1vZGlm
aWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0
aW9ucwpAQCAtMTE3LDcgKzExNyw3IEBAIHZvaWQgVGV4dFRyYWNrTG9hZGVyOjpkZXByZWNhdGVk
RGlkUmVjZWkKIAogdm9pZCBUZXh0VHJhY2tMb2FkZXI6OmNvcnNQb2xpY3lQcmV2ZW50ZWRMb2Fk
KCkKIHsKLSAgICBzdGF0aWMgTmV2ZXJEZXN0cm95ZWQ8U3RyaW5nPiBjb25zb2xlTWVzc2FnZShB
U0NJSUxpdGVyYWwoIkNyb3NzLW9yaWdpbiB0ZXh0IHRyYWNrIGxvYWQgZGVuaWVkIGJ5IENyb3Nz
LU9yaWdpbiBSZXNvdXJjZSBTaGFyaW5nIHBvbGljeS4iKSk7CisgICAgc3RhdGljIE5ldmVyRGVz
dHJveWVkPFN0cmluZz4gY29uc29sZU1lc3NhZ2UoTUFLRV9TVEFUSUNfU1RSSU5HX0lNUEwoIkNy
b3NzLW9yaWdpbiB0ZXh0IHRyYWNrIGxvYWQgZGVuaWVkIGJ5IENyb3NzLU9yaWdpbiBSZXNvdXJj
ZSBTaGFyaW5nIHBvbGljeS4iKSk7CiAgICAgRG9jdW1lbnQqIGRvY3VtZW50ID0gZG93bmNhc3Q8
RG9jdW1lbnQ+KG1fc2NyaXB0RXhlY3V0aW9uQ29udGV4dCk7CiAgICAgZG9jdW1lbnQtPmFkZENv
bnNvbGVNZXNzYWdlKE1lc3NhZ2VTb3VyY2U6OlNlY3VyaXR5LCBNZXNzYWdlTGV2ZWw6OkVycm9y
LCBjb25zb2xlTWVzc2FnZSk7CiAgICAgbV9zdGF0ZSA9IEZhaWxlZDsKSW5kZXg6IFNvdXJjZS9X
ZWJDb3JlL2xvYWRlci9pY29uL0ljb25EYXRhYmFzZS5jcHAKPT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNl
L1dlYkNvcmUvbG9hZGVyL2ljb24vSWNvbkRhdGFiYXNlLmNwcAkocmV2aXNpb24gMjE2MjA1KQor
KysgU291cmNlL1dlYkNvcmUvbG9hZGVyL2ljb24vSWNvbkRhdGFiYXNlLmNwcAkod29ya2luZyBj
b3B5KQpAQCAtMSw1ICsxLDUgQEAKIC8qCi0gKiBDb3B5cmlnaHQgKEMpIDIwMDYsIDIwMDcsIDIw
MDgsIDIwMDksIDIwMTEgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICogQ29weXJp
Z2h0IChDKSAyMDA2LTIwMTcgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgogICogQ29w
eXJpZ2h0IChDKSAyMDA3IEp1c3RpbiBIYXlnb29kIChqaGF5Z29vZEByZWFrdGl4LmNvbSkKICAq
CiAgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3
aXRoIG9yIHdpdGhvdXQKQEAgLTg4MCw3ICs4ODAsNyBAQCBTdHJpbmcgSWNvbkRhdGFiYXNlOjpk
YXRhYmFzZVBhdGgoKSBjb25zCiAKIFN0cmluZyBJY29uRGF0YWJhc2U6OmRlZmF1bHREYXRhYmFz
ZUZpbGVuYW1lKCkKIHsKLSAgICBzdGF0aWMgTmV2ZXJEZXN0cm95ZWQ8U3RyaW5nPiBkZWZhdWx0
RGF0YWJhc2VGaWxlbmFtZShBU0NJSUxpdGVyYWwoIldlYnBhZ2VJY29ucy5kYiIpKTsKKyAgICBz
dGF0aWMgTmV2ZXJEZXN0cm95ZWQ8U3RyaW5nPiBkZWZhdWx0RGF0YWJhc2VGaWxlbmFtZShNQUtF
X1NUQVRJQ19TVFJJTkdfSU1QTCgiV2VicGFnZUljb25zLmRiIikpOwogICAgIHJldHVybiBkZWZh
dWx0RGF0YWJhc2VGaWxlbmFtZS5nZXQoKS5pc29sYXRlZENvcHkoKTsKIH0KIApJbmRleDogU291
cmNlL1dlYkNvcmUvcGFnZS9DYXB0aW9uVXNlclByZWZlcmVuY2VzTWVkaWFBRi5jcHAKPT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PQotLS0gU291cmNlL1dlYkNvcmUvcGFnZS9DYXB0aW9uVXNlclByZWZlcmVuY2VzTWVkaWFB
Ri5jcHAJKHJldmlzaW9uIDIxNjIwNSkKKysrIFNvdXJjZS9XZWJDb3JlL3BhZ2UvQ2FwdGlvblVz
ZXJQcmVmZXJlbmNlc01lZGlhQUYuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0xLDUgKzEsNSBAQAog
LyoKLSAqIENvcHlyaWdodCAoQykgMjAxMi0yMDE1IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNl
cnZlZC4KKyAqIENvcHlyaWdodCAoQykgMjAxMi0yMDE3IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyBy
ZXNlcnZlZC4KICAqCiAgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmlu
YXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKICAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRl
ZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucwpAQCAtMzc5LDkgKzM3OSw5
IEBAIGJvb2wgQ2FwdGlvblVzZXJQcmVmZXJlbmNlc01lZGlhQUY6OmNhcHQKIAogU3RyaW5nIENh
cHRpb25Vc2VyUHJlZmVyZW5jZXNNZWRpYUFGOjpjYXB0aW9uc1RleHRFZGdlQ1NTKCkgY29uc3QK
IHsKLSAgICBzdGF0aWMgTmV2ZXJEZXN0cm95ZWQ8Y29uc3QgU3RyaW5nPiBlZGdlU3R5bGVSYWlz
ZWQoQVNDSUlMaXRlcmFsKCIgLS4xZW0gLS4xZW0gLjE2ZW0gIikpOwotICAgIHN0YXRpYyBOZXZl
ckRlc3Ryb3llZDxjb25zdCBTdHJpbmc+IGVkZ2VTdHlsZURlcHJlc3NlZChBU0NJSUxpdGVyYWwo
IiAuMWVtIC4xZW0gLjE2ZW0gIikpOwotICAgIHN0YXRpYyBOZXZlckRlc3Ryb3llZDxjb25zdCBT
dHJpbmc+IGVkZ2VTdHlsZURyb3BTaGFkb3coQVNDSUlMaXRlcmFsKCIgMCAuMWVtIC4xNmVtICIp
KTsKKyAgICBzdGF0aWMgTmV2ZXJEZXN0cm95ZWQ8Y29uc3QgU3RyaW5nPiBlZGdlU3R5bGVSYWlz
ZWQoTUFLRV9TVEFUSUNfU1RSSU5HX0lNUEwoIiAtLjFlbSAtLjFlbSAuMTZlbSAiKSk7CisgICAg
c3RhdGljIE5ldmVyRGVzdHJveWVkPGNvbnN0IFN0cmluZz4gZWRnZVN0eWxlRGVwcmVzc2VkKE1B
S0VfU1RBVElDX1NUUklOR19JTVBMKCIgLjFlbSAuMWVtIC4xNmVtICIpKTsKKyAgICBzdGF0aWMg
TmV2ZXJEZXN0cm95ZWQ8Y29uc3QgU3RyaW5nPiBlZGdlU3R5bGVEcm9wU2hhZG93KE1BS0VfU1RB
VElDX1NUUklOR19JTVBMKCIgMCAuMWVtIC4xNmVtICIpKTsKIAogICAgIE1BQ2FwdGlvbkFwcGVh
cmFuY2VCZWhhdmlvciBiZWhhdmlvcjsKICAgICBNQUNhcHRpb25BcHBlYXJhbmNlVGV4dEVkZ2VT
dHlsZSB0ZXh0RWRnZVN0eWxlID0gTUFDYXB0aW9uQXBwZWFyYW5jZUdldFRleHRFZGdlU3R5bGUo
a01BQ2FwdGlvbkFwcGVhcmFuY2VEb21haW5Vc2VyLCAmYmVoYXZpb3IpOwpJbmRleDogU291cmNl
L1dlYkNvcmUvcGFnZS9TZWN1cml0eU9yaWdpbi5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dl
YkNvcmUvcGFnZS9TZWN1cml0eU9yaWdpbi5jcHAJKHJldmlzaW9uIDIxNjIwNSkKKysrIFNvdXJj
ZS9XZWJDb3JlL3BhZ2UvU2VjdXJpdHlPcmlnaW4uY3BwCSh3b3JraW5nIGNvcHkpCkBAIC01MzUs
NyArNTM1LDcgQEAgYm9vbCBTZWN1cml0eU9yaWdpbjo6aXNTYW1lU2NoZW1lSG9zdFBvcgogVVJM
IFNlY3VyaXR5T3JpZ2luOjp1cmxXaXRoVW5pcXVlU2VjdXJpdHlPcmlnaW4oKQogewogICAgIEFT
U0VSVChpc01haW5UaHJlYWQoKSk7Ci0gICAgc3RhdGljIE5ldmVyRGVzdHJveWVkPFVSTD4gdW5p
cXVlU2VjdXJpdHlPcmlnaW5VUkwoUGFyc2VkVVJMU3RyaW5nLCBBU0NJSUxpdGVyYWwoImRhdGE6
LCIpKTsKKyAgICBzdGF0aWMgTmV2ZXJEZXN0cm95ZWQ8VVJMPiB1bmlxdWVTZWN1cml0eU9yaWdp
blVSTChQYXJzZWRVUkxTdHJpbmcsIE1BS0VfU1RBVElDX1NUUklOR19JTVBMKCJkYXRhOiwiKSk7
CiAgICAgcmV0dXJuIHVuaXF1ZVNlY3VyaXR5T3JpZ2luVVJMOwogfQogCkluZGV4OiBTb3VyY2Uv
V2ViQ29yZS9wYWdlL1VzZXJDb250ZW50VVJMUGF0dGVybi5jcHAKPT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291
cmNlL1dlYkNvcmUvcGFnZS9Vc2VyQ29udGVudFVSTFBhdHRlcm4uY3BwCShyZXZpc2lvbiAyMTYy
MDUpCisrKyBTb3VyY2UvV2ViQ29yZS9wYWdlL1VzZXJDb250ZW50VVJMUGF0dGVybi5jcHAJKHdv
cmtpbmcgY29weSkKQEAgLTEsNSArMSw1IEBACiAvKgotICogQ29weXJpZ2h0IChDKSAyMDA5LCAy
MDEwIEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqIENvcHlyaWdodCAoQykgMjAw
OS0yMDE3IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KICAqCiAgKiBSZWRpc3RyaWJ1
dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQK
ICAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dp
bmcgY29uZGl0aW9ucwpAQCAtNjMsNyArNjMsNyBAQCBib29sIFVzZXJDb250ZW50VVJMUGF0dGVy
bjo6bWF0Y2hlc1BhdHRlCiAKIGJvb2wgVXNlckNvbnRlbnRVUkxQYXR0ZXJuOjpwYXJzZShjb25z
dCBTdHJpbmcmIHBhdHRlcm4pCiB7Ci0gICAgc3RhdGljIE5ldmVyRGVzdHJveWVkPGNvbnN0IFN0
cmluZz4gc2NoZW1lU2VwYXJhdG9yKEFTQ0lJTGl0ZXJhbCgiOi8vIikpOworICAgIHN0YXRpYyBO
ZXZlckRlc3Ryb3llZDxjb25zdCBTdHJpbmc+IHNjaGVtZVNlcGFyYXRvcihNQUtFX1NUQVRJQ19T
VFJJTkdfSU1QTCgiOi8vIikpOwogCiAgICAgc2l6ZV90IHNjaGVtZUVuZFBvcyA9IHBhdHRlcm4u
ZmluZChzY2hlbWVTZXBhcmF0b3IpOwogICAgIGlmIChzY2hlbWVFbmRQb3MgPT0gbm90Rm91bmQp
CkluZGV4OiBTb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9NSU1FVHlwZVJlZ2lzdHJ5LmNwcAo9PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9NSU1FVHlwZVJlZ2lzdHJ5LmNwcAko
cmV2aXNpb24gMjE2MjA1KQorKysgU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vTUlNRVR5cGVSZWdp
c3RyeS5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTEsNSArMSw1IEBACiAvKgotICogQ29weXJpZ2h0
IChDKSAyMDA2LTIwMTYgQXBwbGUgSW5jLiAgQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqIENvcHly
aWdodCAoQykgMjAwNi0yMDE3IEFwcGxlIEluYy4gIEFsbCByaWdodHMgcmVzZXJ2ZWQuCiAgKiBD
b3B5cmlnaHQgKEMpIDIwMDgsIDIwMDkgVG9yY2ggTW9iaWxlIEluYy4gQWxsIHJpZ2h0cyByZXNl
cnZlZC4gKGh0dHA6Ly93d3cudG9yY2htb2JpbGUuY29tLykKICAqCiAgKiBSZWRpc3RyaWJ1dGlv
biBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKQEAg
LTY5Nyw3ICs2OTcsNyBAQCBIYXNoU2V0PFN0cmluZywgQVNDSUlDYXNlSW5zZW5zaXRpdmVIYXNo
CiAKIGNvbnN0IFN0cmluZyYgZGVmYXVsdE1JTUVUeXBlKCkKIHsKLSAgICBzdGF0aWMgTmV2ZXJE
ZXN0cm95ZWQ8Y29uc3QgU3RyaW5nPiBkZWZhdWx0TUlNRVR5cGUoQVNDSUlMaXRlcmFsKCJhcHBs
aWNhdGlvbi9vY3RldC1zdHJlYW0iKSk7CisgICAgc3RhdGljIE5ldmVyRGVzdHJveWVkPGNvbnN0
IFN0cmluZz4gZGVmYXVsdE1JTUVUeXBlKE1BS0VfU1RBVElDX1NUUklOR19JTVBMKCJhcHBsaWNh
dGlvbi9vY3RldC1zdHJlYW0iKSk7CiAgICAgcmV0dXJuIGRlZmF1bHRNSU1FVHlwZTsKIH0KIApJ
bmRleDogU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vYW5pbWF0aW9uL0FuaW1hdGlvbi5jcHAKPT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vYW5pbWF0aW9uL0FuaW1hdGlvbi5j
cHAJKHJldmlzaW9uIDIxNjIwNSkKKysrIFNvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2FuaW1hdGlv
bi9BbmltYXRpb24uY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0xLDYgKzEsNiBAQAogLyoKICAqIENv
cHlyaWdodCAoQykgMTk5OSBBbnR0aSBLb2l2aXN0byAoa29pdmlzdG9Aa2RlLm9yZykKLSAqIENv
cHlyaWdodCAoQykgMjAwNCwgMjAwNSwgMjAwNiwgMjAwNywgMjAwOCBBcHBsZSBJbmMuIEFsbCBy
aWdodHMgcmVzZXJ2ZWQuCisgKiBDb3B5cmlnaHQgKEMpIDIwMDQtMjAxNyBBcHBsZSBJbmMuIEFs
bCByaWdodHMgcmVzZXJ2ZWQuCiAgKgogICogVGhpcyBsaWJyYXJ5IGlzIGZyZWUgc29mdHdhcmU7
IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vcgogICogbW9kaWZ5IGl0IHVuZGVyIHRoZSB0
ZXJtcyBvZiB0aGUgR05VIExpYnJhcnkgR2VuZXJhbCBQdWJsaWMKQEAgLTE2NSw3ICsxNjUsNyBA
QCBib29sIEFuaW1hdGlvbjo6YW5pbWF0aW9uc01hdGNoKGNvbnN0IEFuCiAKIGNvbnN0IFN0cmlu
ZyYgQW5pbWF0aW9uOjppbml0aWFsTmFtZSgpCiB7Ci0gICAgc3RhdGljIE5ldmVyRGVzdHJveWVk
PFN0cmluZz4gaW5pdGlhbFZhbHVlKEFTQ0lJTGl0ZXJhbCgibm9uZSIpKTsKKyAgICBzdGF0aWMg
TmV2ZXJEZXN0cm95ZWQ8U3RyaW5nPiBpbml0aWFsVmFsdWUoTUFLRV9TVEFUSUNfU1RSSU5HX0lN
UEwoIm5vbmUiKSk7CiAgICAgcmV0dXJuIGluaXRpYWxWYWx1ZTsKIH0KIApJbmRleDogU291cmNl
L1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvYXZmb3VuZGF0aW9uL29iamMvTWVkaWFQbGF5ZXJQ
cml2YXRlTWVkaWFTb3VyY2VBVkZPYmpDLm1tCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3Jl
L3BsYXRmb3JtL2dyYXBoaWNzL2F2Zm91bmRhdGlvbi9vYmpjL01lZGlhUGxheWVyUHJpdmF0ZU1l
ZGlhU291cmNlQVZGT2JqQy5tbQkocmV2aXNpb24gMjE2MjA1KQorKysgU291cmNlL1dlYkNvcmUv
cGxhdGZvcm0vZ3JhcGhpY3MvYXZmb3VuZGF0aW9uL29iamMvTWVkaWFQbGF5ZXJQcml2YXRlTWVk
aWFTb3VyY2VBVkZPYmpDLm1tCSh3b3JraW5nIGNvcHkpCkBAIC0xLDUgKzEsNSBAQAogLyoKLSAq
IENvcHlyaWdodCAoQykgMjAxMywgMjAxNSBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQu
CisgKiBDb3B5cmlnaHQgKEMpIDIwMTMtMjAxNyBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2
ZWQuCiAgKgogICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBm
b3Jtcywgd2l0aCBvciB3aXRob3V0CiAgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJv
dmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKQEAgLTU1OCw3ICs1NTgsNyBAQCB2
b2lkIE1lZGlhUGxheWVyUHJpdmF0ZU1lZGlhU291cmNlQVZGT2JqCiAKIFN0cmluZyBNZWRpYVBs
YXllclByaXZhdGVNZWRpYVNvdXJjZUFWRk9iakM6OmVuZ2luZURlc2NyaXB0aW9uKCkgY29uc3QK
IHsKLSAgICBzdGF0aWMgTmV2ZXJEZXN0cm95ZWQ8U3RyaW5nPiBkZXNjcmlwdGlvbihBU0NJSUxp
dGVyYWwoIkFWRm91bmRhdGlvbiBNZWRpYVNvdXJjZSBFbmdpbmUiKSk7CisgICAgc3RhdGljIE5l
dmVyRGVzdHJveWVkPFN0cmluZz4gZGVzY3JpcHRpb24oTUFLRV9TVEFUSUNfU1RSSU5HX0lNUEwo
IkFWRm91bmRhdGlvbiBNZWRpYVNvdXJjZSBFbmdpbmUiKSk7CiAgICAgcmV0dXJuIGRlc2NyaXB0
aW9uOwogfQogCkluZGV4OiBTb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9hdmZvdW5k
YXRpb24vb2JqYy9NZWRpYVBsYXllclByaXZhdGVNZWRpYVN0cmVhbUFWRk9iakMubW0KPT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PQotLS0gU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvYXZmb3VuZGF0aW9uL29i
amMvTWVkaWFQbGF5ZXJQcml2YXRlTWVkaWFTdHJlYW1BVkZPYmpDLm1tCShyZXZpc2lvbiAyMTYy
MDUpCisrKyBTb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9hdmZvdW5kYXRpb24vb2Jq
Yy9NZWRpYVBsYXllclByaXZhdGVNZWRpYVN0cmVhbUFWRk9iakMubW0JKHdvcmtpbmcgY29weSkK
QEAgLTEwNTksNyArMTA1OSw3IEBAIHZvaWQgTWVkaWFQbGF5ZXJQcml2YXRlTWVkaWFTdHJlYW1B
VkZPYmoKIAogU3RyaW5nIE1lZGlhUGxheWVyUHJpdmF0ZU1lZGlhU3RyZWFtQVZGT2JqQzo6ZW5n
aW5lRGVzY3JpcHRpb24oKSBjb25zdAogewotICAgIHN0YXRpYyBOZXZlckRlc3Ryb3llZDxTdHJp
bmc+IGRlc2NyaXB0aW9uKEFTQ0lJTGl0ZXJhbCgiQVZGb3VuZGF0aW9uIE1lZGlhU3RyZWFtIEVu
Z2luZSIpKTsKKyAgICBzdGF0aWMgTmV2ZXJEZXN0cm95ZWQ8U3RyaW5nPiBkZXNjcmlwdGlvbihN
QUtFX1NUQVRJQ19TVFJJTkdfSU1QTCgiQVZGb3VuZGF0aW9uIE1lZGlhU3RyZWFtIEVuZ2luZSIp
KTsKICAgICByZXR1cm4gZGVzY3JpcHRpb247CiB9CiAKSW5kZXg6IFNvdXJjZS9XZWJDb3JlL3Bs
YXRmb3JtL2dyYXBoaWNzL2NvY29hL0ZvbnRDYWNoZUNvcmVUZXh0LmNwcAo9PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0t
LSBTb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9jb2NvYS9Gb250Q2FjaGVDb3JlVGV4
dC5jcHAJKHJldmlzaW9uIDIxNjIwNSkKKysrIFNvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBo
aWNzL2NvY29hL0ZvbnRDYWNoZUNvcmVUZXh0LmNwcAkod29ya2luZyBjb3B5KQpAQCAtMSw1ICsx
LDUgQEAKIC8qCi0gKiBDb3B5cmlnaHQgKEMpIDIwMTUgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJl
c2VydmVkLgorICogQ29weXJpZ2h0IChDKSAyMDE1LTIwMTcgQXBwbGUgSW5jLiBBbGwgcmlnaHRz
IHJlc2VydmVkLgogICoKICAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBi
aW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAogICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0
dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCkBAIC02NzEsOSArNjcx
LDkgQEAgUmVmUHRyPEZvbnQ+IEZvbnRDYWNoZTo6c2ltaWxhckZvbnQoY29ucwogICAgIH0KICNl
bmRpZgogCi0gICAgc3RhdGljIE5ldmVyRGVzdHJveWVkPFN0cmluZz4gYXJhYmljKEFTQ0lJTGl0
ZXJhbCgiQXJhYmljIikpOwotICAgIHN0YXRpYyBOZXZlckRlc3Ryb3llZDxTdHJpbmc+IHBhc2h0
byhBU0NJSUxpdGVyYWwoIlBhc2h0byIpKTsKLSAgICBzdGF0aWMgTmV2ZXJEZXN0cm95ZWQ8U3Ry
aW5nPiB1cmR1KEFTQ0lJTGl0ZXJhbCgiVXJkdSIpKTsKKyAgICBzdGF0aWMgTmV2ZXJEZXN0cm95
ZWQ8U3RyaW5nPiBhcmFiaWMoTUFLRV9TVEFUSUNfU1RSSU5HX0lNUEwoIkFyYWJpYyIpKTsKKyAg
ICBzdGF0aWMgTmV2ZXJEZXN0cm95ZWQ8U3RyaW5nPiBwYXNodG8oTUFLRV9TVEFUSUNfU1RSSU5H
X0lNUEwoIlBhc2h0byIpKTsKKyAgICBzdGF0aWMgTmV2ZXJEZXN0cm95ZWQ8U3RyaW5nPiB1cmR1
KE1BS0VfU1RBVElDX1NUUklOR19JTVBMKCJVcmR1IikpOwogICAgIHN0YXRpYyBTdHJpbmcqIG1h
dGNoV29yZHNbM10gPSB7ICZhcmFiaWMuZ2V0KCksICZwYXNodG8uZ2V0KCksICZ1cmR1LmdldCgp
IH07CiAgICAgc3RhdGljIE5ldmVyRGVzdHJveWVkPEF0b21pY1N0cmluZz4gZ2VlemFQbGFpbigi
R2VlemFQcm8iLCBBdG9taWNTdHJpbmc6OkNvbnN0cnVjdEZyb21MaXRlcmFsKTsKICAgICBzdGF0
aWMgTmV2ZXJEZXN0cm95ZWQ8QXRvbWljU3RyaW5nPiBnZWV6YUJvbGQoIkdlZXphUHJvLUJvbGQi
LCBBdG9taWNTdHJpbmc6OkNvbnN0cnVjdEZyb21MaXRlcmFsKTsKSW5kZXg6IFNvdXJjZS9XZWJD
b3JlL3BsYXRmb3JtL2d0ay9Vc2VyQWdlbnRHdGsuY3BwCj09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9X
ZWJDb3JlL3BsYXRmb3JtL2d0ay9Vc2VyQWdlbnRHdGsuY3BwCShyZXZpc2lvbiAyMTYyMDUpCisr
KyBTb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ndGsvVXNlckFnZW50R3RrLmNwcAkod29ya2luZyBj
b3B5KQpAQCAtMSw1ICsxLDYgQEAKIC8qCiAgKiBDb3B5cmlnaHQgKEMpIDIwMTIsIDIwMTQsIDIw
MTYgSWdhbGlhIFMuTC4KKyAqIENvcHlyaWdodCAoQykgMjAxNyBBcHBsZSBJbmMuIEFsbCByaWdo
dHMgcmVzZXJ2ZWQuCiAgKgogICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5k
IGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CiAgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJt
aXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKQEAgLTY0LDcgKzY1
LDcgQEAgc3RhdGljIGNvbnN0IFN0cmluZyBwbGF0Zm9ybVZlcnNpb25Gb3JVQQogICAgIC8vIE9T
IFggb3IgYW55dGhpbmcgb24gQVJNIHRyaWdnZXJzIG1vYmlsZSB2ZXJzaW9ucyBvZiBzb21lIHdl
YnNpdGVzLgogICAgIC8vCiAgICAgLy8gRklYTUU6IFRoZSBmaW5hbCByZXN1bHQgc2hvdWxkIGlu
Y2x1ZGUgT1MgdmVyc2lvbiwgZS5nLiAiSW50ZWwgTWFjIE9TIFggMTBfOF80Ii4KLSAgICBzdGF0
aWMgTmV2ZXJEZXN0cm95ZWQ8Y29uc3QgU3RyaW5nPiB1YU9TVmVyc2lvbihBU0NJSUxpdGVyYWwo
IkludGVsIE1hYyBPUyBYIikpOworICAgIHN0YXRpYyBOZXZlckRlc3Ryb3llZDxjb25zdCBTdHJp
bmc+IHVhT1NWZXJzaW9uKE1BS0VfU1RBVElDX1NUUklOR19JTVBMKCJJbnRlbCBNYWMgT1MgWCIp
KTsKICAgICByZXR1cm4gdWFPU1ZlcnNpb247CiAjZW5kaWYKIH0KSW5kZXg6IFNvdXJjZS9XZWJD
b3JlL3BsYXRmb3JtL21vY2svbWVkaWFzb3VyY2UvTW9ja0JveC5jcHAKPT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0g
U291cmNlL1dlYkNvcmUvcGxhdGZvcm0vbW9jay9tZWRpYXNvdXJjZS9Nb2NrQm94LmNwcAkocmV2
aXNpb24gMjE2MjA1KQorKysgU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vbW9jay9tZWRpYXNvdXJj
ZS9Nb2NrQm94LmNwcAkod29ya2luZyBjb3B5KQpAQCAtMSw1ICsxLDUgQEAKIC8qCi0gKiBDb3B5
cmlnaHQgKEMpIDIwMTMgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICogQ29weXJp
Z2h0IChDKSAyMDEzLTIwMTcgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgogICoKICAq
IFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGgg
b3Igd2l0aG91dAogICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQg
dGhlIGZvbGxvd2luZyBjb25kaXRpb25zCkBAIC04MCw3ICs4MCw3IEBAIE1vY2tUcmFja0JveDo6
TW9ja1RyYWNrQm94KEFycmF5QnVmZmVyKiAKIAogY29uc3QgU3RyaW5nJiBNb2NrVHJhY2tCb3g6
OnR5cGUoKQogewotICAgIHN0YXRpYyBOZXZlckRlc3Ryb3llZDxTdHJpbmc+IHRyYWsoQVNDSUlM
aXRlcmFsKCJ0cmFrIikpOworICAgIHN0YXRpYyBOZXZlckRlc3Ryb3llZDxTdHJpbmc+IHRyYWso
TUFLRV9TVEFUSUNfU1RSSU5HX0lNUEwoInRyYWsiKSk7CiAgICAgcmV0dXJuIHRyYWs7CiB9CiAK
QEAgLTEwOSw3ICsxMDksNyBAQCBNb2NrSW5pdGlhbGl6YXRpb25Cb3g6Ok1vY2tJbml0aWFsaXph
dGlvCiAKIGNvbnN0IFN0cmluZyYgTW9ja0luaXRpYWxpemF0aW9uQm94Ojp0eXBlKCkKIHsKLSAg
ICBzdGF0aWMgTmV2ZXJEZXN0cm95ZWQ8U3RyaW5nPiBpbml0KEFTQ0lJTGl0ZXJhbCgiaW5pdCIp
KTsKKyAgICBzdGF0aWMgTmV2ZXJEZXN0cm95ZWQ8U3RyaW5nPiBpbml0KE1BS0VfU1RBVElDX1NU
UklOR19JTVBMKCJpbml0IikpOwogICAgIHJldHVybiBpbml0OwogfQogCkBAIC0xMzcsNyArMTM3
LDcgQEAgTW9ja1NhbXBsZUJveDo6TW9ja1NhbXBsZUJveChBcnJheUJ1ZmZlcgogCiBjb25zdCBT
dHJpbmcmIE1vY2tTYW1wbGVCb3g6OnR5cGUoKQogewotICAgIHN0YXRpYyBOZXZlckRlc3Ryb3ll
ZDxTdHJpbmc+IHNtcGwoQVNDSUlMaXRlcmFsKCJzbXBsIikpOworICAgIHN0YXRpYyBOZXZlckRl
c3Ryb3llZDxTdHJpbmc+IHNtcGwoTUFLRV9TVEFUSUNfU1RSSU5HX0lNUEwoInNtcGwiKSk7CiAg
ICAgcmV0dXJuIHNtcGw7CiB9CiAKSW5kZXg6IFNvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL25ldHdv
cmsvSFRUUEhlYWRlclZhbHVlcy5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvcGxh
dGZvcm0vbmV0d29yay9IVFRQSGVhZGVyVmFsdWVzLmNwcAkocmV2aXNpb24gMjE2MjA1KQorKysg
U291cmNlL1dlYkNvcmUvcGxhdGZvcm0vbmV0d29yay9IVFRQSGVhZGVyVmFsdWVzLmNwcAkod29y
a2luZyBjb3B5KQpAQCAtMSw1ICsxLDUgQEAKIC8qCi0gKiBDb3B5cmlnaHQgKEMpIDIwMTYgQXBw
bGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICogQ29weXJpZ2h0IChDKSAyMDE2LTIwMTcg
QXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgogICoKICAqIFJlZGlzdHJpYnV0aW9uIGFu
ZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAogICogbW9k
aWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25k
aXRpb25zCkBAIC0zNCwyNSArMzQsMjUgQEAgbmFtZXNwYWNlIEhUVFBIZWFkZXJWYWx1ZXMgewog
CiBjb25zdCBTdHJpbmcmIHRleHRQbGFpbkNvbnRlbnRUeXBlKCkKIHsKLSAgICBzdGF0aWMgTmV2
ZXJEZXN0cm95ZWQ8Y29uc3QgU3RyaW5nPiBjb250ZW50VHlwZShBU0NJSUxpdGVyYWwoInRleHQv
cGxhaW47Y2hhcnNldD1VVEYtOCIpKTsKKyAgICBzdGF0aWMgTmV2ZXJEZXN0cm95ZWQ8Y29uc3Qg
U3RyaW5nPiBjb250ZW50VHlwZShNQUtFX1NUQVRJQ19TVFJJTkdfSU1QTCgidGV4dC9wbGFpbjtj
aGFyc2V0PVVURi04IikpOwogICAgIHJldHVybiBjb250ZW50VHlwZTsKIH0KIAogY29uc3QgU3Ry
aW5nJiBmb3JtVVJMRW5jb2RlZENvbnRlbnRUeXBlKCkKIHsKLSAgICBzdGF0aWMgTmV2ZXJEZXN0
cm95ZWQ8Y29uc3QgU3RyaW5nPiBjb250ZW50VHlwZShBU0NJSUxpdGVyYWwoImFwcGxpY2F0aW9u
L3gtd3d3LWZvcm0tdXJsZW5jb2RlZDtjaGFyc2V0PVVURi04IikpOworICAgIHN0YXRpYyBOZXZl
ckRlc3Ryb3llZDxjb25zdCBTdHJpbmc+IGNvbnRlbnRUeXBlKE1BS0VfU1RBVElDX1NUUklOR19J
TVBMKCJhcHBsaWNhdGlvbi94LXd3dy1mb3JtLXVybGVuY29kZWQ7Y2hhcnNldD1VVEYtOCIpKTsK
ICAgICByZXR1cm4gY29udGVudFR5cGU7CiB9CiAKIGNvbnN0IFN0cmluZyYgbm9DYWNoZSgpCiB7
Ci0gICAgc3RhdGljIE5ldmVyRGVzdHJveWVkPGNvbnN0IFN0cmluZz4gdmFsdWUoQVNDSUlMaXRl
cmFsKCJuby1jYWNoZSIpKTsKKyAgICBzdGF0aWMgTmV2ZXJEZXN0cm95ZWQ8Y29uc3QgU3RyaW5n
PiB2YWx1ZShNQUtFX1NUQVRJQ19TVFJJTkdfSU1QTCgibm8tY2FjaGUiKSk7CiAgICAgcmV0dXJu
IHZhbHVlOwogfQogCiBjb25zdCBTdHJpbmcmIG1heEFnZTAoKQogewotICAgIHN0YXRpYyBOZXZl
ckRlc3Ryb3llZDxjb25zdCBTdHJpbmc+IHZhbHVlKEFTQ0lJTGl0ZXJhbCgibWF4LWFnZT0wIikp
OworICAgIHN0YXRpYyBOZXZlckRlc3Ryb3llZDxjb25zdCBTdHJpbmc+IHZhbHVlKE1BS0VfU1RB
VElDX1NUUklOR19JTVBMKCJtYXgtYWdlPTAiKSk7CiAgICAgcmV0dXJuIHZhbHVlOwogfQogCklu
ZGV4OiBTb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9uZXR3b3JrL0hUVFBQYXJzZXJzLmNwcAo9PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9uZXR3b3JrL0hUVFBQYXJzZXJzLmNw
cAkocmV2aXNpb24gMjE2MjA1KQorKysgU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vbmV0d29yay9I
VFRQUGFyc2Vycy5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTEsNiArMSw2IEBACiAvKgogICogQ29w
eXJpZ2h0IChDKSAyMDA2IEFsZXhleSBQcm9za3VyeWFrb3YgKGFwQHdlYmtpdC5vcmcpCi0gKiBD
b3B5cmlnaHQgKEMpIDIwMDYsIDIwMDcsIDIwMDgsIDIwMDkgQXBwbGUgSW5jLiBBbGwgcmlnaHRz
IHJlc2VydmVkLgorICogQ29weXJpZ2h0IChDKSAyMDA2LTIwMTcgQXBwbGUgSW5jLiBBbGwgcmln
aHRzIHJlc2VydmVkLgogICogQ29weXJpZ2h0IChDKSAyMDA5IFRvcmNoIE1vYmlsZSBJbmMuIGh0
dHA6Ly93d3cudG9yY2htb2JpbGUuY29tLwogICogQ29weXJpZ2h0IChDKSAyMDA5IEdvb2dsZSBJ
bmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCiAgKiBDb3B5cmlnaHQgKEMpIDIwMTEgQXBwbGUgSW5j
LiBBbGwgUmlnaHRzIFJlc2VydmVkLgpAQCAtMzg0LDE0ICszODQsMTQgQEAgdm9pZCBmaW5kQ2hh
cnNldEluTWVkaWFUeXBlKGNvbnN0IFN0cmluZwogCiBYU1NQcm90ZWN0aW9uRGlzcG9zaXRpb24g
cGFyc2VYU1NQcm90ZWN0aW9uSGVhZGVyKGNvbnN0IFN0cmluZyYgaGVhZGVyLCBTdHJpbmcmIGZh
aWx1cmVSZWFzb24sIHVuc2lnbmVkJiBmYWlsdXJlUG9zaXRpb24sIFN0cmluZyYgcmVwb3J0VVJM
KQogewotICAgIHN0YXRpYyBOZXZlckRlc3Ryb3llZDxTdHJpbmc+IGZhaWx1cmVSZWFzb25JbnZh
bGlkVG9nZ2xlKEFTQ0lJTGl0ZXJhbCgiZXhwZWN0ZWQgMCBvciAxIikpOwotICAgIHN0YXRpYyBO
ZXZlckRlc3Ryb3llZDxTdHJpbmc+IGZhaWx1cmVSZWFzb25JbnZhbGlkU2VwYXJhdG9yKEFTQ0lJ
TGl0ZXJhbCgiZXhwZWN0ZWQgc2VtaWNvbG9uIikpOwotICAgIHN0YXRpYyBOZXZlckRlc3Ryb3ll
ZDxTdHJpbmc+IGZhaWx1cmVSZWFzb25JbnZhbGlkRXF1YWxzKEFTQ0lJTGl0ZXJhbCgiZXhwZWN0
ZWQgZXF1YWxzIHNpZ24iKSk7Ci0gICAgc3RhdGljIE5ldmVyRGVzdHJveWVkPFN0cmluZz4gZmFp
bHVyZVJlYXNvbkludmFsaWRNb2RlKEFTQ0lJTGl0ZXJhbCgiaW52YWxpZCBtb2RlIGRpcmVjdGl2
ZSIpKTsKLSAgICBzdGF0aWMgTmV2ZXJEZXN0cm95ZWQ8U3RyaW5nPiBmYWlsdXJlUmVhc29uSW52
YWxpZFJlcG9ydChBU0NJSUxpdGVyYWwoImludmFsaWQgcmVwb3J0IGRpcmVjdGl2ZSIpKTsKLSAg
ICBzdGF0aWMgTmV2ZXJEZXN0cm95ZWQ8U3RyaW5nPiBmYWlsdXJlUmVhc29uRHVwbGljYXRlTW9k
ZShBU0NJSUxpdGVyYWwoImR1cGxpY2F0ZSBtb2RlIGRpcmVjdGl2ZSIpKTsKLSAgICBzdGF0aWMg
TmV2ZXJEZXN0cm95ZWQ8U3RyaW5nPiBmYWlsdXJlUmVhc29uRHVwbGljYXRlUmVwb3J0KEFTQ0lJ
TGl0ZXJhbCgiZHVwbGljYXRlIHJlcG9ydCBkaXJlY3RpdmUiKSk7Ci0gICAgc3RhdGljIE5ldmVy
RGVzdHJveWVkPFN0cmluZz4gZmFpbHVyZVJlYXNvbkludmFsaWREaXJlY3RpdmUoQVNDSUlMaXRl
cmFsKCJ1bnJlY29nbml6ZWQgZGlyZWN0aXZlIikpOworICAgIHN0YXRpYyBOZXZlckRlc3Ryb3ll
ZDxTdHJpbmc+IGZhaWx1cmVSZWFzb25JbnZhbGlkVG9nZ2xlKE1BS0VfU1RBVElDX1NUUklOR19J
TVBMKCJleHBlY3RlZCAwIG9yIDEiKSk7CisgICAgc3RhdGljIE5ldmVyRGVzdHJveWVkPFN0cmlu
Zz4gZmFpbHVyZVJlYXNvbkludmFsaWRTZXBhcmF0b3IoTUFLRV9TVEFUSUNfU1RSSU5HX0lNUEwo
ImV4cGVjdGVkIHNlbWljb2xvbiIpKTsKKyAgICBzdGF0aWMgTmV2ZXJEZXN0cm95ZWQ8U3RyaW5n
PiBmYWlsdXJlUmVhc29uSW52YWxpZEVxdWFscyhNQUtFX1NUQVRJQ19TVFJJTkdfSU1QTCgiZXhw
ZWN0ZWQgZXF1YWxzIHNpZ24iKSk7CisgICAgc3RhdGljIE5ldmVyRGVzdHJveWVkPFN0cmluZz4g
ZmFpbHVyZVJlYXNvbkludmFsaWRNb2RlKE1BS0VfU1RBVElDX1NUUklOR19JTVBMKCJpbnZhbGlk
IG1vZGUgZGlyZWN0aXZlIikpOworICAgIHN0YXRpYyBOZXZlckRlc3Ryb3llZDxTdHJpbmc+IGZh
aWx1cmVSZWFzb25JbnZhbGlkUmVwb3J0KE1BS0VfU1RBVElDX1NUUklOR19JTVBMKCJpbnZhbGlk
IHJlcG9ydCBkaXJlY3RpdmUiKSk7CisgICAgc3RhdGljIE5ldmVyRGVzdHJveWVkPFN0cmluZz4g
ZmFpbHVyZVJlYXNvbkR1cGxpY2F0ZU1vZGUoTUFLRV9TVEFUSUNfU1RSSU5HX0lNUEwoImR1cGxp
Y2F0ZSBtb2RlIGRpcmVjdGl2ZSIpKTsKKyAgICBzdGF0aWMgTmV2ZXJEZXN0cm95ZWQ8U3RyaW5n
PiBmYWlsdXJlUmVhc29uRHVwbGljYXRlUmVwb3J0KE1BS0VfU1RBVElDX1NUUklOR19JTVBMKCJk
dXBsaWNhdGUgcmVwb3J0IGRpcmVjdGl2ZSIpKTsKKyAgICBzdGF0aWMgTmV2ZXJEZXN0cm95ZWQ8
U3RyaW5nPiBmYWlsdXJlUmVhc29uSW52YWxpZERpcmVjdGl2ZShNQUtFX1NUQVRJQ19TVFJJTkdf
SU1QTCgidW5yZWNvZ25pemVkIGRpcmVjdGl2ZSIpKTsKIAogICAgIHVuc2lnbmVkIHBvcyA9IDA7
CiAKSW5kZXg6IFNvdXJjZS9XZWJDb3JlL3JlcGxheS9NZW1vaXplZERPTVJlc3VsdC5jcHAKPT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvcmVwbGF5L01lbW9pemVkRE9NUmVzdWx0LmNwcAko
cmV2aXNpb24gMjE2MjA1KQorKysgU291cmNlL1dlYkNvcmUvcmVwbGF5L01lbW9pemVkRE9NUmVz
dWx0LmNwcAkod29ya2luZyBjb3B5KQpAQCAtMSw1ICsxLDUgQEAKIC8qCi0gKiBDb3B5cmlnaHQg
KEMpIDIwMTQgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICogQ29weXJpZ2h0IChD
KSAyMDE0LTIwMTcgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgogICoKICAqIFJlZGlz
dHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0
aG91dAogICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZv
bGxvd2luZyBjb25kaXRpb25zCkBAIC03MSw3ICs3MSw3IEBAIHVzaW5nIFdlYkNvcmU6OlNlcmlh
bGl6ZWRTY3JpcHRWYWx1ZTsKIAogY29uc3QgU3RyaW5nJiBJbnB1dFRyYWl0czxNZW1vaXplZERP
TVJlc3VsdEJhc2U+Ojp0eXBlKCkKIHsKLSAgICBzdGF0aWMgTmV2ZXJEZXN0cm95ZWQ8Y29uc3Qg
U3RyaW5nPiB0eXBlKEFTQ0lJTGl0ZXJhbCgiTWVtb2l6ZWRET01SZXN1bHQiKSk7CisgICAgc3Rh
dGljIE5ldmVyRGVzdHJveWVkPGNvbnN0IFN0cmluZz4gdHlwZShNQUtFX1NUQVRJQ19TVFJJTkdf
SU1QTCgiTWVtb2l6ZWRET01SZXN1bHQiKSk7CiAgICAgcmV0dXJuIHR5cGU7CiB9CiAKSW5kZXg6
IFNvdXJjZS9XZWJDb3JlL3N2Zy9TVkdUcmFuc2Zvcm1WYWx1ZS5jcHAKPT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0g
U291cmNlL1dlYkNvcmUvc3ZnL1NWR1RyYW5zZm9ybVZhbHVlLmNwcAkocmV2aXNpb24gMjE2MjA1
KQorKysgU291cmNlL1dlYkNvcmUvc3ZnL1NWR1RyYW5zZm9ybVZhbHVlLmNwcAkod29ya2luZyBj
b3B5KQpAQCAtMSw2ICsxLDcgQEAKIC8qCiAgKiBDb3B5cmlnaHQgKEMpIDIwMDQsIDIwMDUgTmlr
b2xhcyBaaW1tZXJtYW5uIDx6aW1tZXJtYW5uQGtkZS5vcmc+CiAgKiBDb3B5cmlnaHQgKEMpIDIw
MDQsIDIwMDUgUm9iIEJ1aXMgPGJ1aXNAa2RlLm9yZz4KKyAqIENvcHlyaWdodCAoQykgMjAxNyBB
cHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCiAgKgogICogVGhpcyBsaWJyYXJ5IGlzIGZy
ZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vcgogICogbW9kaWZ5IGl0
IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIExpYnJhcnkgR2VuZXJhbCBQdWJsaWMKQEAgLTEz
MCwyNyArMTMxLDI3IEBAIGNvbnN0IFN0cmluZyYgU1ZHVHJhbnNmb3JtVmFsdWU6OnRyYW5zZm8K
ICAgICBjYXNlIFNWR19UUkFOU0ZPUk1fVU5LTk9XTjoKICAgICAgICAgcmV0dXJuIGVtcHR5U3Ry
aW5nKCk7CiAgICAgY2FzZSBTVkdfVFJBTlNGT1JNX01BVFJJWDogewotICAgICAgICBzdGF0aWMg
TmV2ZXJEZXN0cm95ZWQ8U3RyaW5nPiBtYXRyaXhTdHJpbmcoQVNDSUlMaXRlcmFsKCJtYXRyaXgo
IikpOworICAgICAgICBzdGF0aWMgTmV2ZXJEZXN0cm95ZWQ8U3RyaW5nPiBtYXRyaXhTdHJpbmco
TUFLRV9TVEFUSUNfU1RSSU5HX0lNUEwoIm1hdHJpeCgiKSk7CiAgICAgICAgIHJldHVybiBtYXRy
aXhTdHJpbmc7CiAgICAgfQogICAgIGNhc2UgU1ZHX1RSQU5TRk9STV9UUkFOU0xBVEU6IHsKLSAg
ICAgICAgc3RhdGljIE5ldmVyRGVzdHJveWVkPFN0cmluZz4gdHJhbnNsYXRlU3RyaW5nKEFTQ0lJ
TGl0ZXJhbCgidHJhbnNsYXRlKCIpKTsKKyAgICAgICAgc3RhdGljIE5ldmVyRGVzdHJveWVkPFN0
cmluZz4gdHJhbnNsYXRlU3RyaW5nKE1BS0VfU1RBVElDX1NUUklOR19JTVBMKCJ0cmFuc2xhdGUo
IikpOwogICAgICAgICByZXR1cm4gdHJhbnNsYXRlU3RyaW5nOwogICAgIH0KICAgICBjYXNlIFNW
R19UUkFOU0ZPUk1fU0NBTEU6IHsKLSAgICAgICAgc3RhdGljIE5ldmVyRGVzdHJveWVkPFN0cmlu
Zz4gc2NhbGVTdHJpbmcoQVNDSUlMaXRlcmFsKCJzY2FsZSgiKSk7CisgICAgICAgIHN0YXRpYyBO
ZXZlckRlc3Ryb3llZDxTdHJpbmc+IHNjYWxlU3RyaW5nKE1BS0VfU1RBVElDX1NUUklOR19JTVBM
KCJzY2FsZSgiKSk7CiAgICAgICAgIHJldHVybiBzY2FsZVN0cmluZzsKICAgICB9CiAgICAgY2Fz
ZSBTVkdfVFJBTlNGT1JNX1JPVEFURTogewotICAgICAgICBzdGF0aWMgTmV2ZXJEZXN0cm95ZWQ8
U3RyaW5nPiByb3RhdGVTdHJpbmcoQVNDSUlMaXRlcmFsKCJyb3RhdGUoIikpOworICAgICAgICBz
dGF0aWMgTmV2ZXJEZXN0cm95ZWQ8U3RyaW5nPiByb3RhdGVTdHJpbmcoTUFLRV9TVEFUSUNfU1RS
SU5HX0lNUEwoInJvdGF0ZSgiKSk7CiAgICAgICAgIHJldHVybiByb3RhdGVTdHJpbmc7CiAgICAg
fSAgICAKICAgICBjYXNlIFNWR19UUkFOU0ZPUk1fU0tFV1g6IHsKLSAgICAgICAgc3RhdGljIE5l
dmVyRGVzdHJveWVkPFN0cmluZz4gc2tld1hTdHJpbmcoQVNDSUlMaXRlcmFsKCJza2V3WCgiKSk7
CisgICAgICAgIHN0YXRpYyBOZXZlckRlc3Ryb3llZDxTdHJpbmc+IHNrZXdYU3RyaW5nKE1BS0Vf
U1RBVElDX1NUUklOR19JTVBMKCJza2V3WCgiKSk7CiAgICAgICAgIHJldHVybiBza2V3WFN0cmlu
ZzsKICAgICB9CiAgICAgY2FzZSBTVkdfVFJBTlNGT1JNX1NLRVdZOiB7Ci0gICAgICAgIHN0YXRp
YyBOZXZlckRlc3Ryb3llZDxTdHJpbmc+IHNrZXdZU3RyaW5nKEFTQ0lJTGl0ZXJhbCgic2tld1ko
IikpOworICAgICAgICBzdGF0aWMgTmV2ZXJEZXN0cm95ZWQ8U3RyaW5nPiBza2V3WVN0cmluZyhN
QUtFX1NUQVRJQ19TVFJJTkdfSU1QTCgic2tld1koIikpOwogICAgICAgICByZXR1cm4gc2tld1lT
dHJpbmc7CiAgICAgfQogICAgIH0KSW5kZXg6IFNvdXJjZS9XZWJLaXQyL0NoYW5nZUxvZwo9PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09Ci0tLSBTb3VyY2UvV2ViS2l0Mi9DaGFuZ2VMb2cJKHJldmlzaW9uIDIxNjIwNSkKKysr
IFNvdXJjZS9XZWJLaXQyL0NoYW5nZUxvZwkod29ya2luZyBjb3B5KQpAQCAtMSwzICsxLDI3IEBA
CisyMDE3LTA1LTA0ICBNYXJrIExhbSAgPG1hcmsubGFtQGFwcGxlLmNvbT4KKworICAgICAgICBO
ZXZlckRlc3Ryb3llZDxTdHJpbmc+KEFTQ0lJTGl0ZXJhbCguLi4pKSBpcyBub3QgdGhyZWFkIHNh
ZmUuCisgICAgICAgIGh0dHBzOi8vYnVncy53ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9pZD0xNzE1
ODYKKyAgICAgICAgPHJkYXI6Ly9wcm9ibGVtLzMxODczMTkwPgorCisgICAgICAgIFJldmlld2Vk
IGJ5IE5PQk9EWSAoT09QUyEpLgorCisgICAgICAgICogU2hhcmVkL0FQSS9BUElFcnJvci5jcHA6
CisgICAgICAgIChBUEk6OkVycm9yOjp3ZWJLaXRFcnJvckRvbWFpbik6CisgICAgICAgIChBUEk6
OkVycm9yOjp3ZWJLaXROZXR3b3JrRXJyb3JEb21haW4pOgorICAgICAgICAoQVBJOjpFcnJvcjo6
d2ViS2l0UG9saWN5RXJyb3JEb21haW4pOgorICAgICAgICAoQVBJOjpFcnJvcjo6d2ViS2l0UGx1
Z2luRXJyb3JEb21haW4pOgorICAgICAgICAoQVBJOjpFcnJvcjo6d2ViS2l0RG93bmxvYWRFcnJv
ckRvbWFpbik6CisgICAgICAgIChBUEk6OkVycm9yOjp3ZWJLaXRQcmludEVycm9yRG9tYWluKToK
KyAgICAgICAgKiBTaGFyZWQvV2ViUHJlZmVyZW5jZXNLZXlzLmNwcDoKKyAgICAgICAgKiBVSVBy
b2Nlc3MvV2ViUGFnZVByb3h5LmNwcDoKKyAgICAgICAgKFdlYktpdDo6V2ViUGFnZVByb3h5Ojpl
eGVjdXRlRWRpdENvbW1hbmQpOgorICAgICAgICAqIFdlYlByb2Nlc3MvV2ViQ29yZVN1cHBvcnQv
V2ViRWRpdG9yQ2xpZW50LmNwcDoKKyAgICAgICAgKFdlYktpdDo6V2ViRWRpdG9yQ2xpZW50Ojpk
aWRCZWdpbkVkaXRpbmcpOgorICAgICAgICAoV2ViS2l0OjpXZWJFZGl0b3JDbGllbnQ6OnJlc3Bv
bmRUb0NoYW5nZWRDb250ZW50cyk6CisgICAgICAgIChXZWJLaXQ6OldlYkVkaXRvckNsaWVudDo6
cmVzcG9uZFRvQ2hhbmdlZFNlbGVjdGlvbik6CisgICAgICAgIChXZWJLaXQ6OldlYkVkaXRvckNs
aWVudDo6ZGlkRW5kRWRpdGluZyk6CisKIDIwMTctMDUtMDQgIEVyaWMgQ2FybHNvbiAgPGVyaWMu
Y2FybHNvbkBhcHBsZS5jb20+CiAKICAgICAgICAgW01lZGlhU3RyZWFtXSBBbGxvdyBob3N0IGFw
cGxpY2F0aW9uIHRvIGVuYWJsZS9kaXNhYmxlIG1lZGlhIGNhcHR1cmUKSW5kZXg6IFNvdXJjZS9X
ZWJLaXQyL1NoYXJlZC9XZWJQcmVmZXJlbmNlc0tleXMuY3BwCj09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJj
ZS9XZWJLaXQyL1NoYXJlZC9XZWJQcmVmZXJlbmNlc0tleXMuY3BwCShyZXZpc2lvbiAyMTYyMDUp
CisrKyBTb3VyY2UvV2ViS2l0Mi9TaGFyZWQvV2ViUHJlZmVyZW5jZXNLZXlzLmNwcAkod29ya2lu
ZyBjb3B5KQpAQCAtMSw1ICsxLDUgQEAKIC8qCi0gKiBDb3B5cmlnaHQgKEMpIDIwMTAsIDIwMTEg
QXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICogQ29weXJpZ2h0IChDKSAyMDEwLTIw
MTcgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgogICoKICAqIFJlZGlzdHJpYnV0aW9u
IGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAogICog
bW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBj
b25kaXRpb25zCkBAIC0zNCw3ICszNCw3IEBAIG5hbWVzcGFjZSBXZWJQcmVmZXJlbmNlc0tleSB7
CiAjZGVmaW5lIERFRklORV9LRVlfR0VUVEVSUyhLZXlVcHBlciwgS2V5TG93ZXIsIFR5cGVOYW1l
LCBUeXBlLCBEZWZhdWx0VmFsdWUsIEh1bWFuUmVhZGFibGVOYW1lLCBIdW1hblJlYWRhYmxlRGVz
Y3JpcHRpb24pIFwKICAgICAgICAgY29uc3QgU3RyaW5nJiBLZXlMb3dlciMjS2V5KCkgXAogICAg
ICAgICB7IFwKLSAgICAgICAgICAgIHN0YXRpYyBOZXZlckRlc3Ryb3llZDxTdHJpbmc+IGtleShB
U0NJSUxpdGVyYWwoI0tleVVwcGVyKSk7IFwKKyAgICAgICAgICAgIHN0YXRpYyBOZXZlckRlc3Ry
b3llZDxTdHJpbmc+IGtleShNQUtFX1NUQVRJQ19TVFJJTkdfSU1QTCgjS2V5VXBwZXIpKTsgXAog
ICAgICAgICAgICAgcmV0dXJuIGtleTsgXAogICAgICAgICB9CiAKSW5kZXg6IFNvdXJjZS9XZWJL
aXQyL1NoYXJlZC9BUEkvQVBJRXJyb3IuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJLaXQy
L1NoYXJlZC9BUEkvQVBJRXJyb3IuY3BwCShyZXZpc2lvbiAyMTYyMDUpCisrKyBTb3VyY2UvV2Vi
S2l0Mi9TaGFyZWQvQVBJL0FQSUVycm9yLmNwcAkod29ya2luZyBjb3B5KQpAQCAtMSw1ICsxLDUg
QEAKIC8qCi0gKiBDb3B5cmlnaHQgKEMpIDIwMTAgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2Vy
dmVkLgorICogQ29weXJpZ2h0IChDKSAyMDEwLTIwMTcgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJl
c2VydmVkLgogICoKICAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5h
cnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAogICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVk
IHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCkBAIC0zNCwxNCArMzQsMTQg
QEAgbmFtZXNwYWNlIEFQSSB7CiAKIGNvbnN0IFdURjo6U3RyaW5nJiBFcnJvcjo6d2ViS2l0RXJy
b3JEb21haW4oKQogewotICAgIHN0YXRpYyBOZXZlckRlc3Ryb3llZDxXVEY6OlN0cmluZz4gd2Vi
S2l0RXJyb3JEb21haW5TdHJpbmcoQVNDSUlMaXRlcmFsKCJXZWJLaXRFcnJvckRvbWFpbiIpKTsK
KyAgICBzdGF0aWMgTmV2ZXJEZXN0cm95ZWQ8V1RGOjpTdHJpbmc+IHdlYktpdEVycm9yRG9tYWlu
U3RyaW5nKE1BS0VfU1RBVElDX1NUUklOR19JTVBMKCJXZWJLaXRFcnJvckRvbWFpbiIpKTsKICAg
ICByZXR1cm4gd2ViS2l0RXJyb3JEb21haW5TdHJpbmc7CiB9CiAKIGNvbnN0IFdURjo6U3RyaW5n
JiBFcnJvcjo6d2ViS2l0TmV0d29ya0Vycm9yRG9tYWluKCkKIHsKICNpZiBVU0UoR0xJQikKLSAg
ICBzdGF0aWMgTmV2ZXJEZXN0cm95ZWQ8V1RGOjpTdHJpbmc+IHdlYktpdEVycm9yRG9tYWluU3Ry
aW5nKEFTQ0lJTGl0ZXJhbCgiV2ViS2l0TmV0d29ya0Vycm9yIikpOworICAgIHN0YXRpYyBOZXZl
ckRlc3Ryb3llZDxXVEY6OlN0cmluZz4gd2ViS2l0RXJyb3JEb21haW5TdHJpbmcoTUFLRV9TVEFU
SUNfU1RSSU5HX0lNUEwoIldlYktpdE5ldHdvcmtFcnJvciIpKTsKICAgICByZXR1cm4gd2ViS2l0
RXJyb3JEb21haW5TdHJpbmc7CiAjZWxzZQogICAgIHJldHVybiB3ZWJLaXRFcnJvckRvbWFpbigp
OwpAQCAtNTEsNyArNTEsNyBAQCBjb25zdCBXVEY6OlN0cmluZyYgRXJyb3I6OndlYktpdE5ldHdv
cmtFCiBjb25zdCBXVEY6OlN0cmluZyYgRXJyb3I6OndlYktpdFBvbGljeUVycm9yRG9tYWluKCkK
IHsKICNpZiBVU0UoR0xJQikKLSAgICBzdGF0aWMgTmV2ZXJEZXN0cm95ZWQ8V1RGOjpTdHJpbmc+
IHdlYktpdEVycm9yRG9tYWluU3RyaW5nKEFTQ0lJTGl0ZXJhbCgiV2ViS2l0UG9saWN5RXJyb3Ii
KSk7CisgICAgc3RhdGljIE5ldmVyRGVzdHJveWVkPFdURjo6U3RyaW5nPiB3ZWJLaXRFcnJvckRv
bWFpblN0cmluZyhNQUtFX1NUQVRJQ19TVFJJTkdfSU1QTCgiV2ViS2l0UG9saWN5RXJyb3IiKSk7
CiAgICAgcmV0dXJuIHdlYktpdEVycm9yRG9tYWluU3RyaW5nOwogI2Vsc2UKICAgICByZXR1cm4g
d2ViS2l0RXJyb3JEb21haW4oKTsKQEAgLTYxLDcgKzYxLDcgQEAgY29uc3QgV1RGOjpTdHJpbmcm
IEVycm9yOjp3ZWJLaXRQb2xpY3lFcgogY29uc3QgV1RGOjpTdHJpbmcmIEVycm9yOjp3ZWJLaXRQ
bHVnaW5FcnJvckRvbWFpbigpCiB7CiAjaWYgVVNFKEdMSUIpCi0gICAgc3RhdGljIE5ldmVyRGVz
dHJveWVkPFdURjo6U3RyaW5nPiB3ZWJLaXRFcnJvckRvbWFpblN0cmluZyhBU0NJSUxpdGVyYWwo
IldlYktpdFBsdWdpbkVycm9yIikpOworICAgIHN0YXRpYyBOZXZlckRlc3Ryb3llZDxXVEY6OlN0
cmluZz4gd2ViS2l0RXJyb3JEb21haW5TdHJpbmcoTUFLRV9TVEFUSUNfU1RSSU5HX0lNUEwoIldl
YktpdFBsdWdpbkVycm9yIikpOwogICAgIHJldHVybiB3ZWJLaXRFcnJvckRvbWFpblN0cmluZzsK
ICNlbHNlCiAgICAgcmV0dXJuIHdlYktpdEVycm9yRG9tYWluKCk7CkBAIC03MSw3ICs3MSw3IEBA
IGNvbnN0IFdURjo6U3RyaW5nJiBFcnJvcjo6d2ViS2l0UGx1Z2luRXIKICNpZiBVU0UoU09VUCkK
IGNvbnN0IFdURjo6U3RyaW5nJiBFcnJvcjo6d2ViS2l0RG93bmxvYWRFcnJvckRvbWFpbigpCiB7
Ci0gICAgc3RhdGljIE5ldmVyRGVzdHJveWVkPFdURjo6U3RyaW5nPiB3ZWJLaXRFcnJvckRvbWFp
blN0cmluZyhBU0NJSUxpdGVyYWwoIldlYktpdERvd25sb2FkRXJyb3IiKSk7CisgICAgc3RhdGlj
IE5ldmVyRGVzdHJveWVkPFdURjo6U3RyaW5nPiB3ZWJLaXRFcnJvckRvbWFpblN0cmluZyhNQUtF
X1NUQVRJQ19TVFJJTkdfSU1QTCgiV2ViS2l0RG93bmxvYWRFcnJvciIpKTsKICAgICByZXR1cm4g
d2ViS2l0RXJyb3JEb21haW5TdHJpbmc7CiB9CiAjZW5kaWYKQEAgLTc5LDcgKzc5LDcgQEAgY29u
c3QgV1RGOjpTdHJpbmcmIEVycm9yOjp3ZWJLaXREb3dubG9hZAogI2lmIFBMQVRGT1JNKEdUSykK
IGNvbnN0IFdURjo6U3RyaW5nJiBFcnJvcjo6d2ViS2l0UHJpbnRFcnJvckRvbWFpbigpCiB7Ci0g
ICAgc3RhdGljIE5ldmVyRGVzdHJveWVkPFdURjo6U3RyaW5nPiB3ZWJLaXRFcnJvckRvbWFpblN0
cmluZyhBU0NJSUxpdGVyYWwoIldlYktpdFByaW50RXJyb3IiKSk7CisgICAgc3RhdGljIE5ldmVy
RGVzdHJveWVkPFdURjo6U3RyaW5nPiB3ZWJLaXRFcnJvckRvbWFpblN0cmluZyhNQUtFX1NUQVRJ
Q19TVFJJTkdfSU1QTCgiV2ViS2l0UHJpbnRFcnJvciIpKTsKICAgICByZXR1cm4gd2ViS2l0RXJy
b3JEb21haW5TdHJpbmc7CiB9CiAjZW5kaWYKSW5kZXg6IFNvdXJjZS9XZWJLaXQyL1VJUHJvY2Vz
cy9XZWJQYWdlUHJveHkuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJLaXQyL1VJUHJvY2Vz
cy9XZWJQYWdlUHJveHkuY3BwCShyZXZpc2lvbiAyMTYyMDUpCisrKyBTb3VyY2UvV2ViS2l0Mi9V
SVByb2Nlc3MvV2ViUGFnZVByb3h5LmNwcAkod29ya2luZyBjb3B5KQpAQCAtMSw1ICsxLDUgQEAK
IC8qCi0gKiBDb3B5cmlnaHQgKEMpIDIwMTAsIDIwMTEsIDIwMTUtMjAxNiBBcHBsZSBJbmMuIEFs
bCByaWdodHMgcmVzZXJ2ZWQuCisgKiBDb3B5cmlnaHQgKEMpIDIwMTAtMjAxNyBBcHBsZSBJbmMu
IEFsbCByaWdodHMgcmVzZXJ2ZWQuCiAgKiBDb3B5cmlnaHQgKEMpIDIwMTIgSW50ZWwgQ29ycG9y
YXRpb24uIEFsbCByaWdodHMgcmVzZXJ2ZWQuCiAgKgogICogUmVkaXN0cmlidXRpb24gYW5kIHVz
ZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CkBAIC0xNzIyLDcg
KzE3MjIsNyBAQCB2b2lkIFdlYlBhZ2VQcm94eTo6c2V0TWFpbnRhaW5zSW5hY3RpdmVTCiAgICAg
CiB2b2lkIFdlYlBhZ2VQcm94eTo6ZXhlY3V0ZUVkaXRDb21tYW5kKGNvbnN0IFN0cmluZyYgY29t
bWFuZE5hbWUsIGNvbnN0IFN0cmluZyYgYXJndW1lbnQpCiB7Ci0gICAgc3RhdGljIE5ldmVyRGVz
dHJveWVkPFN0cmluZz4gaWdub3JlU3BlbGxpbmdDb21tYW5kTmFtZShBU0NJSUxpdGVyYWwoImln
bm9yZVNwZWxsaW5nIikpOworICAgIHN0YXRpYyBOZXZlckRlc3Ryb3llZDxTdHJpbmc+IGlnbm9y
ZVNwZWxsaW5nQ29tbWFuZE5hbWUoTUFLRV9TVEFUSUNfU1RSSU5HX0lNUEwoImlnbm9yZVNwZWxs
aW5nIikpOwogCiAgICAgaWYgKCFpc1ZhbGlkKCkpCiAgICAgICAgIHJldHVybjsKSW5kZXg6IFNv
dXJjZS9XZWJLaXQyL1dlYlByb2Nlc3MvV2ViQ29yZVN1cHBvcnQvV2ViRWRpdG9yQ2xpZW50LmNw
cAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViS2l0Mi9XZWJQcm9jZXNzL1dlYkNvcmVTdXBwb3J0
L1dlYkVkaXRvckNsaWVudC5jcHAJKHJldmlzaW9uIDIxNjIwNSkKKysrIFNvdXJjZS9XZWJLaXQy
L1dlYlByb2Nlc3MvV2ViQ29yZVN1cHBvcnQvV2ViRWRpdG9yQ2xpZW50LmNwcAkod29ya2luZyBj
b3B5KQpAQCAtMSw1ICsxLDUgQEAKIC8qCi0gKiBDb3B5cmlnaHQgKEMpIDIwMTAgQXBwbGUgSW5j
LiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICogQ29weXJpZ2h0IChDKSAyMDEwLTIwMTcgQXBwbGUg
SW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgogICoKICAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2Ug
aW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAogICogbW9kaWZpY2F0
aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25z
CkBAIC0xNzAsMjEgKzE3MCwyMSBAQCBib29sIFdlYkVkaXRvckNsaWVudDo6c2hvdWxkTW92ZVJh
bmdlQWZ0CiB2b2lkIFdlYkVkaXRvckNsaWVudDo6ZGlkQmVnaW5FZGl0aW5nKCkKIHsKICAgICAv
LyBGSVhNRTogV2hhdCBnb29kIGlzIGEgbm90aWZpY2F0aW9uIG5hbWUsIGlmIGl0J3MgYWx3YXlz
IHRoZSBzYW1lPwotICAgIHN0YXRpYyBOZXZlckRlc3Ryb3llZDxTdHJpbmc+IFdlYlZpZXdEaWRC
ZWdpbkVkaXRpbmdOb3RpZmljYXRpb24oQVNDSUlMaXRlcmFsKCJXZWJWaWV3RGlkQmVnaW5FZGl0
aW5nTm90aWZpY2F0aW9uIikpOworICAgIHN0YXRpYyBOZXZlckRlc3Ryb3llZDxTdHJpbmc+IFdl
YlZpZXdEaWRCZWdpbkVkaXRpbmdOb3RpZmljYXRpb24oTUFLRV9TVEFUSUNfU1RSSU5HX0lNUEwo
IldlYlZpZXdEaWRCZWdpbkVkaXRpbmdOb3RpZmljYXRpb24iKSk7CiAgICAgbV9wYWdlLT5pbmpl
Y3RlZEJ1bmRsZUVkaXRvckNsaWVudCgpLmRpZEJlZ2luRWRpdGluZygqbV9wYWdlLCBXZWJWaWV3
RGlkQmVnaW5FZGl0aW5nTm90aWZpY2F0aW9uLmdldCgpLmltcGwoKSk7CiAgICAgbm90SW1wbGVt
ZW50ZWQoKTsKIH0KIAogdm9pZCBXZWJFZGl0b3JDbGllbnQ6OnJlc3BvbmRUb0NoYW5nZWRDb250
ZW50cygpCiB7Ci0gICAgc3RhdGljIE5ldmVyRGVzdHJveWVkPFN0cmluZz4gV2ViVmlld0RpZENo
YW5nZU5vdGlmaWNhdGlvbihBU0NJSUxpdGVyYWwoIldlYlZpZXdEaWRDaGFuZ2VOb3RpZmljYXRp
b24iKSk7CisgICAgc3RhdGljIE5ldmVyRGVzdHJveWVkPFN0cmluZz4gV2ViVmlld0RpZENoYW5n
ZU5vdGlmaWNhdGlvbihNQUtFX1NUQVRJQ19TVFJJTkdfSU1QTCgiV2ViVmlld0RpZENoYW5nZU5v
dGlmaWNhdGlvbiIpKTsKICAgICBtX3BhZ2UtPmluamVjdGVkQnVuZGxlRWRpdG9yQ2xpZW50KCku
ZGlkQ2hhbmdlKCptX3BhZ2UsIFdlYlZpZXdEaWRDaGFuZ2VOb3RpZmljYXRpb24uZ2V0KCkuaW1w
bCgpKTsKICAgICBub3RJbXBsZW1lbnRlZCgpOwogfQogCiB2b2lkIFdlYkVkaXRvckNsaWVudDo6
cmVzcG9uZFRvQ2hhbmdlZFNlbGVjdGlvbihGcmFtZSogZnJhbWUpCiB7Ci0gICAgc3RhdGljIE5l
dmVyRGVzdHJveWVkPFN0cmluZz4gV2ViVmlld0RpZENoYW5nZVNlbGVjdGlvbk5vdGlmaWNhdGlv
bihBU0NJSUxpdGVyYWwoIldlYlZpZXdEaWRDaGFuZ2VTZWxlY3Rpb25Ob3RpZmljYXRpb24iKSk7
CisgICAgc3RhdGljIE5ldmVyRGVzdHJveWVkPFN0cmluZz4gV2ViVmlld0RpZENoYW5nZVNlbGVj
dGlvbk5vdGlmaWNhdGlvbihNQUtFX1NUQVRJQ19TVFJJTkdfSU1QTCgiV2ViVmlld0RpZENoYW5n
ZVNlbGVjdGlvbk5vdGlmaWNhdGlvbiIpKTsKICAgICBtX3BhZ2UtPmluamVjdGVkQnVuZGxlRWRp
dG9yQ2xpZW50KCkuZGlkQ2hhbmdlU2VsZWN0aW9uKCptX3BhZ2UsIFdlYlZpZXdEaWRDaGFuZ2VT
ZWxlY3Rpb25Ob3RpZmljYXRpb24uZ2V0KCkuaW1wbCgpKTsKICAgICBpZiAoIWZyYW1lKQogICAg
ICAgICByZXR1cm47CkBAIC0yMTgsNyArMjE4LDcgQEAgdm9pZCBXZWJFZGl0b3JDbGllbnQ6OmNh
bmNlbGVkQ29tcG9zaXRpbwogCiB2b2lkIFdlYkVkaXRvckNsaWVudDo6ZGlkRW5kRWRpdGluZygp
CiB7Ci0gICAgc3RhdGljIE5ldmVyRGVzdHJveWVkPFN0cmluZz4gV2ViVmlld0RpZEVuZEVkaXRp
bmdOb3RpZmljYXRpb24oQVNDSUlMaXRlcmFsKCJXZWJWaWV3RGlkRW5kRWRpdGluZ05vdGlmaWNh
dGlvbiIpKTsKKyAgICBzdGF0aWMgTmV2ZXJEZXN0cm95ZWQ8U3RyaW5nPiBXZWJWaWV3RGlkRW5k
RWRpdGluZ05vdGlmaWNhdGlvbihNQUtFX1NUQVRJQ19TVFJJTkdfSU1QTCgiV2ViVmlld0RpZEVu
ZEVkaXRpbmdOb3RpZmljYXRpb24iKSk7CiAgICAgbV9wYWdlLT5pbmplY3RlZEJ1bmRsZUVkaXRv
ckNsaWVudCgpLmRpZEVuZEVkaXRpbmcoKm1fcGFnZSwgV2ViVmlld0RpZEVuZEVkaXRpbmdOb3Rp
ZmljYXRpb24uZ2V0KCkuaW1wbCgpKTsKICAgICBub3RJbXBsZW1lbnRlZCgpOwogfQpJbmRleDog
VG9vbHMvQ2hhbmdlTG9nCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFRvb2xzL0NoYW5nZUxvZwkocmV2aXNpb24g
MjE2MjA3KQorKysgVG9vbHMvQ2hhbmdlTG9nCSh3b3JraW5nIGNvcHkpCkBAIC0xLDMgKzEsMTgg
QEAKKzIwMTctMDUtMDQgIE1hcmsgTGFtICA8bWFyay5sYW1AYXBwbGUuY29tPgorCisgICAgICAg
IE5ldmVyRGVzdHJveWVkPFN0cmluZz4oQVNDSUlMaXRlcmFsKC4uLikpIGlzIG5vdCB0aHJlYWQg
c2FmZS4KKyAgICAgICAgaHR0cHM6Ly9idWdzLndlYmtpdC5vcmcvc2hvd19idWcuY2dpP2lkPTE3
MTU4NgorICAgICAgICA8cmRhcjovL3Byb2JsZW0vMzE4NzMxOTA+CisKKyAgICAgICAgUmV2aWV3
ZWQgYnkgTk9CT0RZIChPT1BTISkuCisKKyAgICAgICAgQVBJIHRlc3QgZm9yIGV4ZXJjaXNpbmcg
U3RhdGljU3RyaW5nSW1wbCBhbmQgdGhlIE1BS0VfU1RBVElDX1NUUklOR19JTVBMIG1hY3JvLgor
CisgICAgICAgICogVGVzdFdlYktpdEFQSS9UZXN0cy9XVEYvU3RyaW5nSW1wbC5jcHA6CisgICAg
ICAgIChUZXN0V2ViS2l0QVBJOjpuZXZlckRlc3Ryb3llZFN0cmluZyk6CisgICAgICAgIChUZXN0
V2ViS2l0QVBJOjpnZXROZXZlckRlc3Ryb3llZFN0cmluZ0F0U3RhY2tEZXB0aCk6CisgICAgICAg
IChUZXN0V2ViS2l0QVBJOjpURVNUKToKKwogMjAxNy0wNS0wMyAgSm9uYXRoYW4gQmVkYXJkICA8
amJlZGFyZEBhcHBsZS5jb20+CiAKICAgICAgICAgTWFrZSBJbWFnZURpZmYgc3RhbmQtYWxvbmUK
SW5kZXg6IFRvb2xzL1Rlc3RXZWJLaXRBUEkvVGVzdHMvV1RGL1N0cmluZ0ltcGwuY3BwCj09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT0KLS0tIFRvb2xzL1Rlc3RXZWJLaXRBUEkvVGVzdHMvV1RGL1N0cmluZ0ltcGwuY3BwCShy
ZXZpc2lvbiAyMTYyMDUpCisrKyBUb29scy9UZXN0V2ViS2l0QVBJL1Rlc3RzL1dURi9TdHJpbmdJ
bXBsLmNwcAkod29ya2luZyBjb3B5KQpAQCAtMjYsNiArMjYsNyBAQAogI2luY2x1ZGUgImNvbmZp
Zy5oIgogCiAjaW5jbHVkZSA8d3RmL0hhc2hlci5oPgorI2luY2x1ZGUgPHd0Zi9OZXZlckRlc3Ry
b3llZC5oPgogI2luY2x1ZGUgPHd0Zi90ZXh0L1N5bWJvbEltcGwuaD4KICNpbmNsdWRlIDx3dGYv
dGV4dC9XVEZTdHJpbmcuaD4KIApAQCAtNjI2LDQgKzYyNyw1MiBAQCBURVNUKFdURiwgU3RyaW5n
SW1wbEVtcHR5KQogICAgIEFTU0VSVF9GQUxTRShTdHJpbmdJbXBsOjplbXB0eSgpLT5sZW5ndGgo
KSk7CiB9CiAKK3N0YXRpYyBjb25zdCBTdHJpbmcmIG5ldmVyRGVzdHJveWVkU3RyaW5nKCkKK3sK
KyAgICBzdGF0aWMgTmV2ZXJEZXN0cm95ZWQ8U3RyaW5nPiBzdHIoU3RhdGljU3RyaW5nSW1wbCgi
TmV2ZXJEZXN0cm95ZWRTdHJpbmciKSk7CisgICAgcmV0dXJuIHN0cjsKK307CisKK3N0YXRpYyBj
b25zdCBTdHJpbmcmIGdldE5ldmVyRGVzdHJveWVkU3RyaW5nQXRTdGFja0RlcHRoKGludCBpKQor
eworICAgIGlmICgtLWkpCisgICAgICAgIHJldHVybiBnZXROZXZlckRlc3Ryb3llZFN0cmluZ0F0
U3RhY2tEZXB0aChpKTsKKyAgICByZXR1cm4gbmV2ZXJEZXN0cm95ZWRTdHJpbmcoKTsKK307CisK
K1RFU1QoV1RGLCBTdGF0aWNTdHJpbmdJbXBsKQoreworICAgIC8vIENvbnN0cnVjdCB1c2luZyBN
QUtFX1NUQVRJQ19TVFJJTkdfSU1QTC4KKyAgICBTdHJpbmcgaGVsbG8oTUFLRV9TVEFUSUNfU1RS
SU5HX0lNUEwoImhlbGxvIikpOworICAgIFN0cmluZyB3b3JsZChNQUtFX1NUQVRJQ19TVFJJTkdf
SU1QTCgid29ybGQiKSk7CisgICAgU3RyaW5nIGxvbmdlcihNQUtFX1NUQVRJQ19TVFJJTkdfSU1Q
TCgibG9uZ2VyIikpOworICAgIFN0cmluZyBoZWxsbzIoTUFLRV9TVEFUSUNfU1RSSU5HX0lNUEwo
ImhlbGxvIikpOworCisgICAgQVNTRVJUX0VRKHN0cmxlbigiaGVsbG8iKSwgaGVsbG8ubGVuZ3Ro
KCkpOworICAgIEFTU0VSVF9FUShzdHJsZW4oIndvcmxkIiksIHdvcmxkLmxlbmd0aCgpKTsKKyAg
ICBBU1NFUlRfRVEoc3RybGVuKCJsb25nZXIiKSwgbG9uZ2VyLmxlbmd0aCgpKTsKKyAgICBBU1NF
UlRfRVEoc3RybGVuKCJoZWxsbyIpLCBoZWxsbzIubGVuZ3RoKCkpOworCisgICAgQVNTRVJUX1RS
VUUoZXF1YWwoaGVsbG8sICJoZWxsbyIpKTsKKyAgICBBU1NFUlRfVFJVRShlcXVhbCh3b3JsZCwg
IndvcmxkIikpOworICAgIEFTU0VSVF9UUlVFKGVxdWFsKGxvbmdlciwgImxvbmdlciIpKTsKKyAg
ICBBU1NFUlRfVFJVRShlcXVhbChoZWxsbzIsICJoZWxsbyIpKTsKKworICAgIC8vIEVhY2ggU3Rh
dGljU3RyaW5nSW1wbCogcmV0dXJuZWQgYnkgTUFLRV9TVEFUSUNfU1RSSU5HX0lNUEwgc2hvdWxk
IGJlIHVuaXF1ZS4KKyAgICBBU1NFUlRfTkUoaGVsbG8uaW1wbCgpLCBoZWxsbzIuaW1wbCgpKTsK
KworICAgIC8vIFRlc3QgdGhhdCBNQUtFX1NUQVRJQ19TVFJJTkdfSU1QTCBpc24ndCBhbGxvY2F0
aW5nIGEgU3RhdGljU3RyaW5nSW1wbCBvbiB0aGUgc3RhY2suCisgICAgY29uc3QgU3RyaW5nJiBz
dHIxID0gZ2V0TmV2ZXJEZXN0cm95ZWRTdHJpbmdBdFN0YWNrRGVwdGgoMTApOworICAgIEFTU0VS
VF9FUShzdHJsZW4oIk5ldmVyRGVzdHJveWVkU3RyaW5nIiksIHN0cjEubGVuZ3RoKCkpOworICAg
IEFTU0VSVF9UUlVFKGVxdWFsKHN0cjEsICJOZXZlckRlc3Ryb3llZFN0cmluZyIpKTsKKworICAg
IGNvbnN0IFN0cmluZyYgc3RyMiA9IGdldE5ldmVyRGVzdHJveWVkU3RyaW5nQXRTdGFja0RlcHRo
KDIwKTsKKyAgICBBU1NFUlRfRVEoc3RybGVuKCJOZXZlckRlc3Ryb3llZFN0cmluZyIpLCBzdHIy
Lmxlbmd0aCgpKTsKKyAgICBBU1NFUlRfVFJVRShlcXVhbChzdHIyLCAiTmV2ZXJEZXN0cm95ZWRT
dHJpbmciKSk7CisKKyAgICBBU1NFUlRfVFJVRShlcXVhbChzdHIxLCBzdHIyKSk7CisgICAgQVNT
RVJUX0VRKCZzdHIxLCAmc3RyMik7CisgICAgQVNTRVJUX0VRKHN0cjEuaW1wbCgpLCBzdHIyLmlt
cGwoKSk7Cit9CisKIH0gLy8gbmFtZXNwYWNlIFRlc3RXZWJLaXRBUEkK
</data>
<flag name="review"
          id="330265"
          type_id="1"
          status="+"
          setter="ysuzuki"
    />
          </attachment>
      

    </bug>

</bugzilla>