<?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>138282</bug_id>
          
          <creation_ts>2014-11-01 13:49:13 -0700</creation_ts>
          <short_desc>Replace FileThread class with a single function</short_desc>
          <delta_ts>2014-11-08 21:41:36 -0800</delta_ts>
          <reporter_accessible>1</reporter_accessible>
          <cclist_accessible>1</cclist_accessible>
          <classification_id>1</classification_id>
          <classification>Unclassified</classification>
          <product>WebKit</product>
          <component>WebCore Misc.</component>
          <version>528+ (Nightly build)</version>
          <rep_platform>Unspecified</rep_platform>
          <op_sys>Unspecified</op_sys>
          <bug_status>RESOLVED</bug_status>
          <resolution>FIXED</resolution>
          
          
          <bug_file_loc></bug_file_loc>
          <status_whiteboard></status_whiteboard>
          <keywords></keywords>
          <priority>P2</priority>
          <bug_severity>Normal</bug_severity>
          <target_milestone>---</target_milestone>
          
          
          <everconfirmed>1</everconfirmed>
          <reporter name="Darin Adler">darin</reporter>
          <assigned_to name="Darin Adler">darin</assigned_to>
          <cc>andersca</cc>
    
    <cc>ap</cc>
    
    <cc>benjamin</cc>
    
    <cc>buildbot</cc>
    
    <cc>cmarcelo</cc>
    
    <cc>commit-queue</cc>
    
    <cc>eric.carlson</cc>
    
    <cc>esprehn+autocc</cc>
    
    <cc>glenn</cc>
    
    <cc>gyuyoung.kim</cc>
    
    <cc>japhet</cc>
    
    <cc>jer.noble</cc>
    
    <cc>kangil.han</cc>
    
    <cc>kling</cc>
    
    <cc>koivisto</cc>
    
    <cc>philipj</cc>
    
    <cc>rakuco</cc>
    
    <cc>rniwa</cc>
    
    <cc>ryuan.choi</cc>
    
    <cc>sergio</cc>
    
    <cc>zan</cc>
          

      

      

      

          <comment_sort_order>oldest_to_newest</comment_sort_order>  
          <long_desc isprivate="0" >
    <commentid>1045531</commentid>
    <comment_count>0</comment_count>
    <who name="Darin Adler">darin</who>
    <bug_when>2014-11-01 13:49:13 -0700</bug_when>
    <thetext>Replace FileStream class with a single function</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1045535</commentid>
    <comment_count>1</comment_count>
      <attachid>240796</attachid>
    <who name="Darin Adler">darin</who>
    <bug_when>2014-11-01 14:44:15 -0700</bug_when>
    <thetext>Created attachment 240796
Patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1045537</commentid>
    <comment_count>2</comment_count>
    <who name="WebKit Commit Bot">commit-queue</who>
    <bug_when>2014-11-01 14:46:25 -0700</bug_when>
    <thetext>Attachment 240796 did not pass style-queue:


ERROR: Source/WebCore/fileapi/AsyncFileStream.cpp:143:  Place brace on its own line for function definitions.  [whitespace/braces] [4]
ERROR: Source/WebCore/fileapi/AsyncFileStream.cpp:143:  Extra space before [  [whitespace/braces] [5]
ERROR: Source/WebCore/fileapi/AsyncFileStream.cpp:154:  Place brace on its own line for function definitions.  [whitespace/braces] [4]
ERROR: Source/WebCore/fileapi/AsyncFileStream.cpp:154:  Extra space before [  [whitespace/braces] [5]
ERROR: Source/WebCore/fileapi/AsyncFileStream.cpp:165:  Place brace on its own line for function definitions.  [whitespace/braces] [4]
ERROR: Source/WebCore/fileapi/AsyncFileStream.cpp:165:  Extra space before [  [whitespace/braces] [5]
ERROR: Source/WebCore/fileapi/AsyncFileStream.cpp:185:  Place brace on its own line for function definitions.  [whitespace/braces] [4]
ERROR: Source/WebCore/fileapi/AsyncFileStream.cpp:185:  Extra space before [  [whitespace/braces] [5]
ERROR: Source/WebCore/fileapi/AsyncFileStream.cpp:196:  Place brace on its own line for function definitions.  [whitespace/braces] [4]
ERROR: Source/WebCore/fileapi/AsyncFileStream.cpp:196:  Extra space before [  [whitespace/braces] [5]
ERROR: Source/WebCore/fileapi/AsyncFileStream.cpp:206:  Place brace on its own line for function definitions.  [whitespace/braces] [4]
ERROR: Source/WebCore/fileapi/AsyncFileStream.cpp:206:  Extra space before [  [whitespace/braces] [5]
Total errors found: 12 in 14 files


If any of these errors are false positives, please file a bug against check-webkit-style.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1045540</commentid>
    <comment_count>3</comment_count>
      <attachid>240796</attachid>
    <who name="Antti Koivisto">koivisto</who>
    <bug_when>2014-11-01 15:22:22 -0700</bug_when>
    <thetext>Comment on attachment 240796
Patch

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

&gt; Source/WebCore/fileapi/AsyncFileStream.cpp:141
&gt; +    perform([pathCopy, expectedModificationTime] (FileStream&amp; stream) {

Anders told me that the coding style for lambdas is to not  have space between ](.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1045588</commentid>
    <comment_count>4</comment_count>
      <attachid>240796</attachid>
    <who name="Alexey Proskuryakov">ap</who>
    <bug_when>2014-11-02 00:55:33 -0700</bug_when>
    <thetext>Comment on attachment 240796
Patch

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

Very nice! I have a lot of comments, but I think that all of them can be addressed without another review round.

This patch breaks Windows build, EWS is red for a reason this time.

&gt; Source/WTF/ChangeLog:9
&gt; +        * wtf/MessageQueue.h: Made queue work on any type and not require wrapping
&gt; +        everything in a unique_ptr.

I&apos;m not sure if I fully understand the consequences of this change, but it seems like it makes the class easier to misuse. E.g.

messageQueue.append(myString.isolatedCopy());

Doesn&apos;t this result in a race when a stack instance of the isolated copy is destroyed on sender thread? Unless I&apos;m missing something, this is an undesirable change.

&gt; Source/WTF/wtf/MessageQueue.h:136
&gt; +    inline auto MessageQueue&lt;DataType&gt;::waitForMessageFilteredWithTimeout(MessageQueueWaitResult&amp; result, Predicate&amp;&amp; predicate, double absoluteTime) -&gt; DataType

There is a &quot;return nullptr&quot; below in this function, so it will fail to compile with any random DataType.

&gt; Source/WTF/wtf/Threading.cpp:105
&gt; +// Safari uses these old versions of createThread() and waitForThreadCompletion() functions
&gt; +// directly and we need to keep the old ABI compatibility until everyone has a newer version
&gt; +// of Safari to work with.

Is there a Radar that tracks getting Safari off these functions? It&apos;s unclear why we expect a newer Safari version to not need them, or why these old functions are bad.

&gt; Source/WebCore/fileapi/AsyncFileStream.cpp:52
&gt; +    static ThreadIdentifier fileThread = createThread(&quot;WebCore: File&quot;, [] {

It&apos;s strange to have an unused static variable. Can we use std::call_once instead?

&gt; Source/WebCore/fileapi/AsyncFileStream.cpp:55
&gt; +            queue.get().waitForMessage()();

waitForMessage() can return nullptr. We should probably check for that, if only for static analyzer happiness. I&apos;m not sure what happens when a nullptr converted to a std::function&lt;void()&gt; gets called, but I assume that it&apos;s nothing good.

&gt; Source/WebCore/fileapi/AsyncFileStream.cpp:91
&gt; +    PassRef&lt;AsyncFileStream&gt; result = adoptRef(*new AsyncFileStream(client));

It&apos;s strange to see a &quot;Pass&quot; class when not passing an argument. In the world of C++11, what is the purpose of PassRef, can we just return a Ref&lt;AsyncFileStream&gt;?

&gt; Source/WebCore/fileapi/AsyncFileStream.cpp:98
&gt; +    ASSERT(isMainThread());

Thank you for adding these asserts!

&gt; Source/WebCore/fileapi/AsyncFileStream.cpp:127
&gt; +        if (m_stopped)

This check is racy, are we OK with that? Seems like it is just an optimization.

&gt; Source/WebCore/fileapi/AsyncFileStream.cpp:140
&gt;      String pathCopy = path.isolatedCopy();

It is a pre-existing issue, but this code is racy. It&apos;s not possible to use a String like this, we have to use StringImpl* and manual memory management.

&gt; Source/WebCore/fileapi/AsyncFileStream.cpp:151
&gt;      String pathCopy = path.isolatedCopy();

Ditto.

&gt; Source/WebCore/fileapi/AsyncFileStream.cpp:162
&gt;      String pathCopy = path.isolatedCopy();

Ditto.

&gt; Source/WebCore/fileapi/AsyncFileStream.cpp:178
&gt; +    if (m_stopped)
&gt; +        return;
&gt; +
&gt; +    callOnFileThread([this] {
&gt;          m_stream-&gt;close();
&gt; -    } });
&gt; +    });

This looks somewhat confusing. This function checks m_stopped, but it is not the function that is responsible for setting it. What guarantees that m_stopped doesn&apos;t become true before the file thread executes close()? And if nothing guarantees that, what does the check on main thread achieve, is it also a racy performance optimization?

&gt; Source/WebCore/fileapi/AsyncFileStream.cpp:193
&gt;      URL blobURLCopy = blobURL.copy();

Same concern about racing blobURLCopy destructors on main and file threads.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1046832</commentid>
    <comment_count>5</comment_count>
      <attachid>240796</attachid>
    <who name="Darin Adler">darin</who>
    <bug_when>2014-11-06 09:26:44 -0800</bug_when>
    <thetext>Comment on attachment 240796
Patch

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

&gt;&gt; Source/WTF/ChangeLog:9
&gt;&gt; +        everything in a unique_ptr.
&gt; 
&gt; I&apos;m not sure if I fully understand the consequences of this change, but it seems like it makes the class easier to misuse. E.g.
&gt; 
&gt; messageQueue.append(myString.isolatedCopy());
&gt; 
&gt; Doesn&apos;t this result in a race when a stack instance of the isolated copy is destroyed on sender thread? Unless I&apos;m missing something, this is an undesirable change.

I think the right thing to do is to change the class template to use r-value references and always move rather than copy. You make an excellent point that we don’t want this to be easy to misuse. But I also don’t want it to always require a std::unique_ptr, since there are other classes that can be moved, such as std::function. Does that sound practical to you. Alexey?

&gt;&gt; Source/WTF/wtf/MessageQueue.h:136
&gt;&gt; +    inline auto MessageQueue&lt;DataType&gt;::waitForMessageFilteredWithTimeout(MessageQueueWaitResult&amp; result, Predicate&amp;&amp; predicate, double absoluteTime) -&gt; DataType
&gt; 
&gt; There is a &quot;return nullptr&quot; below in this function, so it will fail to compile with any random DataType.

This function is only used in one place, and I think it’s critical to have it work with non-pointer types.

I could also change those to &quot;return DataType()&quot;, which will work with more types, but still isn’t universal.

&gt;&gt; Source/WTF/wtf/Threading.cpp:105
&gt;&gt; +// of Safari to work with.
&gt; 
&gt; Is there a Radar that tracks getting Safari off these functions? It&apos;s unclear why we expect a newer Safari version to not need them, or why these old functions are bad.

I have no idea if there is a Radar. I could research the old check-in that made this change. I suspect that this requirement is already gone from any version of Safari people are currently actively using with WebKit.

To me it’s entirely clear why we expect a newer Safari version to not need these. Any version of Safari compiled against the current Threading.h header would not use any of these! It’s just for binary compatibility with older versions compiled against an older version of the header.

And these old functions are not “bad”, they are simply obsolete. We should remove them because the newer functions suffice.

&gt;&gt; Source/WebCore/fileapi/AsyncFileStream.cpp:52
&gt;&gt; +    static ThreadIdentifier fileThread = createThread(&quot;WebCore: File&quot;, [] {
&gt; 
&gt; It&apos;s strange to have an unused static variable. Can we use std::call_once instead?

Sounds fine.

&gt;&gt; Source/WebCore/fileapi/AsyncFileStream.cpp:55
&gt;&gt; +            queue.get().waitForMessage()();
&gt; 
&gt; waitForMessage() can return nullptr. We should probably check for that, if only for static analyzer happiness. I&apos;m not sure what happens when a nullptr converted to a std::function&lt;void()&gt; gets called, but I assume that it&apos;s nothing good.

I’m not sure what this really means in practice. Since there is no such thing as a null std::function, I wonder if there is any way to change the underlying class to avoid adding a check for something that can never happen? I don’t see how it could return nullptr, given that nullptr can’t be converted to std::function&lt;void()&gt;.

Maybe you can help me figure this out.

&gt;&gt; Source/WebCore/fileapi/AsyncFileStream.cpp:91
&gt;&gt; +    PassRef&lt;AsyncFileStream&gt; result = adoptRef(*new AsyncFileStream(client));
&gt; 
&gt; It&apos;s strange to see a &quot;Pass&quot; class when not passing an argument. In the world of C++11, what is the purpose of PassRef, can we just return a Ref&lt;AsyncFileStream&gt;?

Good question. I don’t know the answer. I could just have this return a PassRefPtr in the mean time, but I hate to imply that there could be a null value here. Maybe someone can help me figure this out.

&gt;&gt; Source/WebCore/fileapi/AsyncFileStream.cpp:127
&gt;&gt; +        if (m_stopped)
&gt; 
&gt; This check is racy, are we OK with that? Seems like it is just an optimization.

That’s right. It’s racy, but it’s an optimization to do fewer file system operations if we can. My initial code omitted this but it seemed unnecessary to run all the queued operations once we know the queue is stopped.

&gt;&gt; Source/WebCore/fileapi/AsyncFileStream.cpp:140
&gt;&gt;      String pathCopy = path.isolatedCopy();
&gt; 
&gt; It is a pre-existing issue, but this code is racy. It&apos;s not possible to use a String like this, we have to use StringImpl* and manual memory management.

That seems critical to fix. I (or someone else) should deal with that in a separate patch before making this change.

I’m worried that the patches I have encouraged Zan to write using lambdas are introducing many cases of this race. We need to come up with an idiom that works, and fix this immediately. Maybe we should change the return type of String::isolatedCopy and we should also write/rename URL::isolatedCopy with a similar goal in mind.

&gt;&gt; Source/WebCore/fileapi/AsyncFileStream.cpp:141
&gt;&gt; +    perform([pathCopy, expectedModificationTime] (FileStream&amp; stream) {
&gt; 
&gt; Anders told me that the coding style for lambdas is to not  have space between ](.

It’s the damn style checker that convinced me to change this. Maybe someone can fix that style checker script so I can change this back without having a complaint on every line of code that does this.

&gt;&gt; Source/WebCore/fileapi/AsyncFileStream.cpp:178
&gt;&gt; +    });
&gt; 
&gt; This looks somewhat confusing. This function checks m_stopped, but it is not the function that is responsible for setting it. What guarantees that m_stopped doesn&apos;t become true before the file thread executes close()? And if nothing guarantees that, what does the check on main thread achieve, is it also a racy performance optimization?

It’s safe to make any number of additional close calls on an already closed FileStream.

And yes, the check on the main thread is a performance optimization that could be omitted.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1046844</commentid>
    <comment_count>6</comment_count>
    <who name="Alexey Proskuryakov">ap</who>
    <bug_when>2014-11-06 10:37:01 -0800</bug_when>
    <thetext>&gt; Does that sound practical to you. Alexey?

Yes, I think so.

I later started to wonder if passing std::functions across threads was safe enough. We don&apos;t know what variables they capture - capture any WTF::String, and it seems nearly impossible to catch the mistake. But this patch makes the code so much cleaner in other ways. I&apos;m torn about this.

&gt; Any version of Safari compiled against the current Threading.h header would not use any of these!

There are two sets of deprecated functionality here. One is the old two-argument variant that only exists in .cpp file, createThread(ThreadFunctionWithReturnValue entryPoint, void* data). I&apos;m also pretty sure that it can be simply removed now, no need to keep it.

But your patch also marks createThread(ThreadFunction, void*, const char* threadName) as deprecated, and that function is still used by Safari. What I question is that while we have a comment saying &quot;until everyone has a newer version of Safari to work with&quot;, there is no recorded plan to create such a version. As this one is newly deprecated, a Radar for Safari needs to be filed.

&gt; given that nullptr can’t be converted to std::function&lt;void()&gt;

Turns out that &quot;std::function&lt;void()&gt; f = nullptr&quot; compiles perfectly fine. Trying to call this function results in a C++ exception being raised.

I believe that all the usual ways of checking a pointer for being null work with std::function too.

&gt; I’m worried that the patches I have encouraged Zan to write using lambdas are introducing many cases of this race. We need to come up with an idiom that works, and fix this immediately. Maybe we should change the return type of String::isolatedCopy and we should also write/rename URL::isolatedCopy with a similar goal in mind.

Sounds like a good idea to me! We used to have such things automatic in CrossThreadCopier, but that wasn&apos;t useful with modern C++, and got deleted. Making isolatedCopy() functions hard to misuse is definitely worth trying.

&gt; And yes, the check on the main thread is a performance optimization that could be omitted.

It seems worth having a comment about, so that the racy nature of these checks doesn&apos;t confuse anyone in the future.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1047085</commentid>
    <comment_count>7</comment_count>
    <who name="Zan Dobersek">zan</who>
    <bug_when>2014-11-07 08:47:08 -0800</bug_when>
    <thetext>(In reply to comment #6)
&gt; I believe that all the usual ways of checking a pointer for being null work
&gt; with std::function too.
&gt; 
&gt; &gt; I’m worried that the patches I have encouraged Zan to write using lambdas are introducing many cases of this race. We need to come up with an idiom that works, and fix this immediately. Maybe we should change the return type of String::isolatedCopy and we should also write/rename URL::isolatedCopy with a similar goal in mind.
&gt; 

There&apos;s already the StringCapture class that is meant to be used for thread-safe lambda capturing. It&apos;s not yet adopted everywhere it should be, obviously.
https://trac.webkit.org/browser/trunk/Source/WTF/wtf/text/WTFString.h#L637

It should be possible to build on that and create something more generic, like a class template that only works for classes that support isolated copying.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1047088</commentid>
    <comment_count>8</comment_count>
    <who name="Darin Adler">darin</who>
    <bug_when>2014-11-07 08:52:54 -0800</bug_when>
    <thetext>(In reply to comment #6)
&gt; &gt; Any version of Safari compiled against the current Threading.h header would not use any of these!
&gt; 
&gt; There are two sets of deprecated functionality here. One is the old
&gt; two-argument variant that only exists in .cpp file,
&gt; createThread(ThreadFunctionWithReturnValue entryPoint, void* data). I&apos;m also
&gt; pretty sure that it can be simply removed now, no need to keep it.

Yes, the comment is only about this function and the two others that are declared only in the .cpp file and not mentioned at all in the header, and also only compiled on PLATFORM(MAC) and only kept around for the benefit of old versions of Mac Safari. It’s not intended to comment on any of the functions mentioned in the header.

&gt; But your patch also marks createThread(ThreadFunction, void*, const char*
&gt; threadName) as deprecated, and that function is still used by Safari. What I
&gt; question is that while we have a comment saying &quot;until everyone has a newer
&gt; version of Safari to work with&quot;, there is no recorded plan to create such a
&gt; version. As this one is newly deprecated, a Radar for Safari needs to be
&gt; filed.

The comment is inside the #if. The other deprecated function does not have a comment like this, is declared in the header files, and is still used in WebKit source code. Is there some way I can make it clearer that this comment has nothing to do with the that other deprecated function? Or we could deleted this PLATFORM(MAC) code and the comment along with it. Or we could just remove the term &quot;deprecated&quot; from the header and come back to deprecating it later.

&gt; Turns out that &quot;std::function&lt;void()&gt; f = nullptr&quot; compiles perfectly fine.

I didn’t know a std::function could be null.

&gt; Sounds like a good idea to me! We used to have such things automatic in
&gt; CrossThreadCopier, but that wasn&apos;t useful with modern C++, and got deleted.

CrossThreadCopier was deleted because I didn’t think it did anything helpful. But you are making a case now that it was doing something helpful. I’m sorry we didn’t notice that before phasing it out.

The real fix here is probably to finish Anders’ experiment to make the String reference count thread-safe.

&gt; &gt; And yes, the check on the main thread is a performance optimization that could be omitted.
&gt; 
&gt; It seems worth having a comment about, so that the racy nature of these
&gt; checks doesn&apos;t confuse anyone in the future.

I’d rather take it out than add a comment about it.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1047089</commentid>
    <comment_count>9</comment_count>
    <who name="Darin Adler">darin</who>
    <bug_when>2014-11-07 08:55:15 -0800</bug_when>
    <thetext>(In reply to comment #7)
&gt; (In reply to comment #6)
&gt; &gt; I believe that all the usual ways of checking a pointer for being null work
&gt; &gt; with std::function too.
&gt; &gt; 
&gt; &gt; &gt; I’m worried that the patches I have encouraged Zan to write using lambdas are introducing many cases of this race. We need to come up with an idiom that works, and fix this immediately. Maybe we should change the return type of String::isolatedCopy and we should also write/rename URL::isolatedCopy with a similar goal in mind.
&gt; 
&gt; There&apos;s already the StringCapture class that is meant to be used for
&gt; thread-safe lambda capturing. It&apos;s not yet adopted everywhere it should be,
&gt; obviously.
&gt; https://trac.webkit.org/browser/trunk/Source/WTF/wtf/text/WTFString.h#L637
&gt; 
&gt; It should be possible to build on that and create something more generic,
&gt; like a class template that only works for classes that support isolated
&gt; copying.

Lets find a good idiom for this ASAP! We want to make it easy to make the isolated copy and capture it for a function to be used on another thread, without a chance of leaving a RefPtr temporary or anything else that will call deref() later on the main thread.

I’d love this to be the *only* way to use isolatedCopy and replace both copy and isolatedCopy for both classes; I think it&apos;s the only reason we ever want to copy a String or URL since they are immutable.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1047301</commentid>
    <comment_count>10</comment_count>
      <attachid>240796</attachid>
    <who name="Darin Adler">darin</who>
    <bug_when>2014-11-08 11:32:01 -0800</bug_when>
    <thetext>Comment on attachment 240796
Patch

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

&gt;&gt;&gt; Source/WebCore/fileapi/AsyncFileStream.cpp:91
&gt;&gt;&gt; +    PassRef&lt;AsyncFileStream&gt; result = adoptRef(*new AsyncFileStream(client));
&gt;&gt; 
&gt;&gt; It&apos;s strange to see a &quot;Pass&quot; class when not passing an argument. In the world of C++11, what is the purpose of PassRef, can we just return a Ref&lt;AsyncFileStream&gt;?
&gt; 
&gt; Good question. I don’t know the answer. I could just have this return a PassRefPtr in the mean time, but I hate to imply that there could be a null value here. Maybe someone can help me figure this out.

I don’t think we can return Ref&lt;&gt; since Ref is neither copyable nor movable.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1047302</commentid>
    <comment_count>11</comment_count>
    <who name="Darin Adler">darin</who>
    <bug_when>2014-11-08 11:58:10 -0800</bug_when>
    <thetext>(In reply to comment #6)
&gt; I later started to wonder if passing std::functions across threads was safe
&gt; enough. We don&apos;t know what variables they capture - capture any WTF::String,
&gt; and it seems nearly impossible to catch the mistake. But this patch makes
&gt; the code so much cleaner in other ways. I&apos;m torn about this.

It’s true, we need to be careful not to capture RefCounted objects such as WTF::String and WebCore::URL. Instead we should capture WTF::StringCapture. For the moment, it’s not too hard to do that. It would be good to find even more ways to prevent misuse.

However, it’s no better to move a std::unique_ptr&lt;std::function&gt; into and out of the MessageQueue than it would be to move the std::function itself, so I still think it would be worth changing the MessageQueue class long term.

However, I rolled that out of the patch.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1047304</commentid>
    <comment_count>12</comment_count>
      <attachid>241233</attachid>
    <who name="Darin Adler">darin</who>
    <bug_when>2014-11-08 12:52:12 -0800</bug_when>
    <thetext>Created attachment 241233
Patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1047305</commentid>
    <comment_count>13</comment_count>
      <attachid>241234</attachid>
    <who name="Darin Adler">darin</who>
    <bug_when>2014-11-08 12:54:19 -0800</bug_when>
    <thetext>Created attachment 241234
Patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1047306</commentid>
    <comment_count>14</comment_count>
    <who name="Darin Adler">darin</who>
    <bug_when>2014-11-08 12:54:58 -0800</bug_when>
    <thetext>OK, now I have uploaded a new patch that should address everything that was raised during the review, except perhaps whatever was preventing this from compiling on Windows.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1047307</commentid>
    <comment_count>15</comment_count>
    <who name="WebKit Commit Bot">commit-queue</who>
    <bug_when>2014-11-08 12:55:38 -0800</bug_when>
    <thetext>Attachment 241234 did not pass style-queue:


ERROR: Source/WebCore/fileapi/AsyncFileStream.cpp:136:  Place brace on its own line for function definitions.  [whitespace/braces] [4]
ERROR: Source/WebCore/fileapi/AsyncFileStream.cpp:136:  Extra space before [  [whitespace/braces] [5]
ERROR: Source/WebCore/fileapi/AsyncFileStream.cpp:147:  Place brace on its own line for function definitions.  [whitespace/braces] [4]
ERROR: Source/WebCore/fileapi/AsyncFileStream.cpp:147:  Extra space before [  [whitespace/braces] [5]
ERROR: Source/WebCore/fileapi/AsyncFileStream.cpp:158:  Place brace on its own line for function definitions.  [whitespace/braces] [4]
ERROR: Source/WebCore/fileapi/AsyncFileStream.cpp:158:  Extra space before [  [whitespace/braces] [5]
ERROR: Source/WebCore/fileapi/AsyncFileStream.cpp:176:  Place brace on its own line for function definitions.  [whitespace/braces] [4]
ERROR: Source/WebCore/fileapi/AsyncFileStream.cpp:176:  Extra space before [  [whitespace/braces] [5]
ERROR: Source/WebCore/fileapi/AsyncFileStream.cpp:188:  Place brace on its own line for function definitions.  [whitespace/braces] [4]
ERROR: Source/WebCore/fileapi/AsyncFileStream.cpp:188:  Extra space before [  [whitespace/braces] [5]
ERROR: Source/WebCore/fileapi/AsyncFileStream.cpp:198:  Place brace on its own line for function definitions.  [whitespace/braces] [4]
ERROR: Source/WebCore/fileapi/AsyncFileStream.cpp:198:  Extra space before [  [whitespace/braces] [5]
Total errors found: 12 in 11 files


If any of these errors are false positives, please file a bug against check-webkit-style.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1047312</commentid>
    <comment_count>16</comment_count>
      <attachid>241235</attachid>
    <who name="Darin Adler">darin</who>
    <bug_when>2014-11-08 13:55:24 -0800</bug_when>
    <thetext>Created attachment 241235
Patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1047313</commentid>
    <comment_count>17</comment_count>
    <who name="Darin Adler">darin</who>
    <bug_when>2014-11-08 13:55:59 -0800</bug_when>
    <thetext>New version of the patch tries to fix compilation on Windows, too. Working around bugs in the Windows compiler, I think.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1047314</commentid>
    <comment_count>18</comment_count>
    <who name="WebKit Commit Bot">commit-queue</who>
    <bug_when>2014-11-08 13:57:37 -0800</bug_when>
    <thetext>Attachment 241235 did not pass style-queue:


ERROR: Source/WebCore/fileapi/AsyncFileStream.cpp:139:  Place brace on its own line for function definitions.  [whitespace/braces] [4]
ERROR: Source/WebCore/fileapi/AsyncFileStream.cpp:139:  Extra space before [  [whitespace/braces] [5]
ERROR: Source/WebCore/fileapi/AsyncFileStream.cpp:151:  Place brace on its own line for function definitions.  [whitespace/braces] [4]
ERROR: Source/WebCore/fileapi/AsyncFileStream.cpp:151:  Extra space before [  [whitespace/braces] [5]
ERROR: Source/WebCore/fileapi/AsyncFileStream.cpp:162:  Place brace on its own line for function definitions.  [whitespace/braces] [4]
ERROR: Source/WebCore/fileapi/AsyncFileStream.cpp:162:  Extra space before [  [whitespace/braces] [5]
ERROR: Source/WebCore/fileapi/AsyncFileStream.cpp:180:  Place brace on its own line for function definitions.  [whitespace/braces] [4]
ERROR: Source/WebCore/fileapi/AsyncFileStream.cpp:180:  Extra space before [  [whitespace/braces] [5]
ERROR: Source/WebCore/fileapi/AsyncFileStream.cpp:192:  Place brace on its own line for function definitions.  [whitespace/braces] [4]
ERROR: Source/WebCore/fileapi/AsyncFileStream.cpp:192:  Extra space before [  [whitespace/braces] [5]
ERROR: Source/WebCore/fileapi/AsyncFileStream.cpp:202:  Place brace on its own line for function definitions.  [whitespace/braces] [4]
ERROR: Source/WebCore/fileapi/AsyncFileStream.cpp:202:  Extra space before [  [whitespace/braces] [5]
Total errors found: 12 in 11 files


If any of these errors are false positives, please file a bug against check-webkit-style.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1047315</commentid>
    <comment_count>19</comment_count>
      <attachid>241236</attachid>
    <who name="Darin Adler">darin</who>
    <bug_when>2014-11-08 14:29:07 -0800</bug_when>
    <thetext>Created attachment 241236
Patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1047316</commentid>
    <comment_count>20</comment_count>
    <who name="Darin Adler">darin</who>
    <bug_when>2014-11-08 14:29:46 -0800</bug_when>
    <thetext>One more try at fixing the Windows build.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1047317</commentid>
    <comment_count>21</comment_count>
    <who name="WebKit Commit Bot">commit-queue</who>
    <bug_when>2014-11-08 14:31:19 -0800</bug_when>
    <thetext>Attachment 241236 did not pass style-queue:


ERROR: Source/WebCore/fileapi/AsyncFileStream.cpp:139:  Place brace on its own line for function definitions.  [whitespace/braces] [4]
ERROR: Source/WebCore/fileapi/AsyncFileStream.cpp:139:  Extra space before [  [whitespace/braces] [5]
ERROR: Source/WebCore/fileapi/AsyncFileStream.cpp:151:  Place brace on its own line for function definitions.  [whitespace/braces] [4]
ERROR: Source/WebCore/fileapi/AsyncFileStream.cpp:151:  Extra space before [  [whitespace/braces] [5]
ERROR: Source/WebCore/fileapi/AsyncFileStream.cpp:162:  Place brace on its own line for function definitions.  [whitespace/braces] [4]
ERROR: Source/WebCore/fileapi/AsyncFileStream.cpp:162:  Extra space before [  [whitespace/braces] [5]
ERROR: Source/WebCore/fileapi/AsyncFileStream.cpp:180:  Place brace on its own line for function definitions.  [whitespace/braces] [4]
ERROR: Source/WebCore/fileapi/AsyncFileStream.cpp:180:  Extra space before [  [whitespace/braces] [5]
ERROR: Source/WebCore/fileapi/AsyncFileStream.cpp:192:  Place brace on its own line for function definitions.  [whitespace/braces] [4]
ERROR: Source/WebCore/fileapi/AsyncFileStream.cpp:192:  Extra space before [  [whitespace/braces] [5]
ERROR: Source/WebCore/fileapi/AsyncFileStream.cpp:202:  Place brace on its own line for function definitions.  [whitespace/braces] [4]
ERROR: Source/WebCore/fileapi/AsyncFileStream.cpp:202:  Extra space before [  [whitespace/braces] [5]
Total errors found: 12 in 11 files


If any of these errors are false positives, please file a bug against check-webkit-style.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1047327</commentid>
    <comment_count>22</comment_count>
      <attachid>241240</attachid>
    <who name="Darin Adler">darin</who>
    <bug_when>2014-11-08 16:08:34 -0800</bug_when>
    <thetext>Created attachment 241240
Patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1047328</commentid>
    <comment_count>23</comment_count>
    <who name="WebKit Commit Bot">commit-queue</who>
    <bug_when>2014-11-08 16:10:31 -0800</bug_when>
    <thetext>Attachment 241240 did not pass style-queue:


ERROR: Source/WebCore/fileapi/AsyncFileStream.cpp:146:  Place brace on its own line for function definitions.  [whitespace/braces] [4]
ERROR: Source/WebCore/fileapi/AsyncFileStream.cpp:146:  Extra space before [  [whitespace/braces] [5]
ERROR: Source/WebCore/fileapi/AsyncFileStream.cpp:158:  Place brace on its own line for function definitions.  [whitespace/braces] [4]
ERROR: Source/WebCore/fileapi/AsyncFileStream.cpp:158:  Extra space before [  [whitespace/braces] [5]
ERROR: Source/WebCore/fileapi/AsyncFileStream.cpp:169:  Place brace on its own line for function definitions.  [whitespace/braces] [4]
ERROR: Source/WebCore/fileapi/AsyncFileStream.cpp:169:  Extra space before [  [whitespace/braces] [5]
ERROR: Source/WebCore/fileapi/AsyncFileStream.cpp:187:  Place brace on its own line for function definitions.  [whitespace/braces] [4]
ERROR: Source/WebCore/fileapi/AsyncFileStream.cpp:187:  Extra space before [  [whitespace/braces] [5]
ERROR: Source/WebCore/fileapi/AsyncFileStream.cpp:199:  Place brace on its own line for function definitions.  [whitespace/braces] [4]
ERROR: Source/WebCore/fileapi/AsyncFileStream.cpp:199:  Extra space before [  [whitespace/braces] [5]
ERROR: Source/WebCore/fileapi/AsyncFileStream.cpp:209:  Place brace on its own line for function definitions.  [whitespace/braces] [4]
ERROR: Source/WebCore/fileapi/AsyncFileStream.cpp:209:  Extra space before [  [whitespace/braces] [5]
Total errors found: 12 in 12 files


If any of these errors are false positives, please file a bug against check-webkit-style.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1047329</commentid>
    <comment_count>24</comment_count>
      <attachid>241240</attachid>
    <who name="Darin Adler">darin</who>
    <bug_when>2014-11-08 16:13:32 -0800</bug_when>
    <thetext>Comment on attachment 241240
Patch

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

&gt; Source/WebCore/fileapi/AsyncFileStream.cpp:61
&gt; +    // Work around a that prevents the default value above from compiling.

Locally fixed this comment to say &quot;a bug that&quot; instead of &quot;a that&quot;.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1047335</commentid>
    <comment_count>25</comment_count>
    <who name="Darin Adler">darin</who>
    <bug_when>2014-11-08 17:01:27 -0800</bug_when>
    <thetext>Committed r175782: &lt;http://trac.webkit.org/changeset/175782&gt;</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1047343</commentid>
    <comment_count>26</comment_count>
      <attachid>241240</attachid>
    <who name="Alexey Proskuryakov">ap</who>
    <bug_when>2014-11-08 18:32:20 -0800</bug_when>
    <thetext>Comment on attachment 241240
Patch

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

&gt; Source/WebCore/fileapi/AsyncFileStream.cpp:106
&gt; +    // Release so that we can control the timing of deletion below.
&gt; +    auto&amp; internals = *m_internals.release();

I spent a while looking at this, and couldn&apos;t tell for sure if this is correct or not. It seems incorrect to me.

For this code to work at all, the reference has to extend the lifetime of the object it references. The destructor will be called when the reference goes out of scope. And it will also be called manually on another thread, so I expect this to always cause double deletion. What am I missing?</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1047363</commentid>
    <comment_count>27</comment_count>
      <attachid>241240</attachid>
    <who name="Darin Adler">darin</who>
    <bug_when>2014-11-08 21:06:49 -0800</bug_when>
    <thetext>Comment on attachment 241240
Patch

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

&gt;&gt; Source/WebCore/fileapi/AsyncFileStream.cpp:61
&gt;&gt; +    // Work around a that prevents the default value above from compiling.
&gt; 
&gt; Locally fixed this comment to say &quot;a bug that&quot; instead of &quot;a that&quot;.

Locally fixed this comment to say &quot;a bug that&quot; instead of &quot;a that&quot;.

&gt;&gt; Source/WebCore/fileapi/AsyncFileStream.cpp:106
&gt;&gt; +    auto&amp; internals = *m_internals.release();
&gt; 
&gt; I spent a while looking at this, and couldn&apos;t tell for sure if this is correct or not. It seems incorrect to me.
&gt; 
&gt; For this code to work at all, the reference has to extend the lifetime of the object it references. The destructor will be called when the reference goes out of scope. And it will also be called manually on another thread, so I expect this to always cause double deletion. What am I missing?

You are missing the fact that unique_ptr.release() relinquishes ownership of the object pointed to and returns a raw pointer to that object. Maybe you would find it more readable if I wrote:

    Internals&amp; internals = *m_internals.release();

Or if I wrote:

    Internals* internals = m_internals.release();

And then rewrote the code below to use a raw pointer.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1047367</commentid>
    <comment_count>28</comment_count>
    <who name="Alexey Proskuryakov">ap</who>
    <bug_when>2014-11-08 21:41:36 -0800</bug_when>
    <thetext>I see, indeed. It&apos;s not a temporary, so there is nothing to extend the lifetime of.

To me, it looks most obvious with pointers.</thetext>
  </long_desc>
      
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>240796</attachid>
            <date>2014-11-01 14:44:15 -0700</date>
            <delta_ts>2014-11-08 12:52:05 -0800</delta_ts>
            <desc>Patch</desc>
            <filename>bug-138282-20141101144424.patch</filename>
            <type>text/plain</type>
            <size>56042</size>
            <attacher name="Darin Adler">darin</attacher>
            
              <data encoding="base64">U3VidmVyc2lvbiBSZXZpc2lvbjogMTc1NDA2CmRpZmYgLS1naXQgYS9Tb3VyY2UvV1RGL0NoYW5n
ZUxvZyBiL1NvdXJjZS9XVEYvQ2hhbmdlTG9nCmluZGV4IDhmYWU5OGJmYTlmMjhkM2ZkMTFlMDk2
MTE5MmM0ZjY2YzU0ZmJkMTkuLjM3ZTc4MzM3Mzc3MzEzZGI1YzVlODk4NDdjYjkxOTNjMzNlZmVl
YWMgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XVEYvQ2hhbmdlTG9nCisrKyBiL1NvdXJjZS9XVEYvQ2hh
bmdlTG9nCkBAIC0xLDMgKzEsMjIgQEAKKzIwMTQtMTEtMDEgIERhcmluIEFkbGVyICA8ZGFyaW5A
YXBwbGUuY29tPgorCisgICAgICAgIFJlcGxhY2UgRmlsZVRocmVhZCBjbGFzcyB3aXRoIGEgc2lu
Z2xlIGZ1bmN0aW9uCisgICAgICAgIGh0dHBzOi8vYnVncy53ZWJraXQub3JnL3Nob3dfYnVnLmNn
aT9pZD0xMzgyODIKKworICAgICAgICBSZXZpZXdlZCBieSBOT0JPRFkgKE9PUFMhKS4KKworICAg
ICAgICAqIHd0Zi9NZXNzYWdlUXVldWUuaDogTWFkZSBxdWV1ZSB3b3JrIG9uIGFueSB0eXBlIGFu
ZCBub3QgcmVxdWlyZSB3cmFwcGluZworICAgICAgICBldmVyeXRoaW5nIGluIGEgdW5pcXVlX3B0
ci4KKworICAgICAgICAqIHd0Zi9UaHJlYWRpbmcuY3BwOgorICAgICAgICAoV1RGOjp0aHJlYWRF
bnRyeVBvaW50KTogQ2hhbmdlZCB0byB1c2UgYSBzdGQ6OmZ1bmN0aW9uIGluc3RlYWQgb2YgYSBm
dW5jdGlvbiBwb2ludGVyLgorICAgICAgICAoV1RGOjpjcmVhdGVUaHJlYWQpOiBBZGQgYSB2ZXJz
aW9uIHRoYXQgdGFrZXMgYSBzdGQ6OmZ1bmN0aW9uOyByZWltcGxlbWVudGVkIHRoZQorICAgICAg
ICBvbGQgdmVyc2lvbnMgdXNpbmcgbGFtYmRhcy4KKworICAgICAgICAqIHd0Zi9UaHJlYWRpbmcu
aDogUmVtb3ZlZCBhbiBpbmNvcnJlY3QgbGljZW5zZSBoZWFkZXIgdGhhdCBjb3ZlcnMgY29kZSBp
biBhCisgICAgICAgIGRpZmZlcmVudCBmaWxlLiBDaGFuZ2VkIGNyZWF0ZVRocmVhZCB0byB0YWtl
IGEgc3RkOjpmdW5jdGlvbiBpbnN0ZWFkIG9mIGEgZnVuY3Rpb24KKyAgICAgICAgcG9pbnRlciBh
bmQgZGF0YSBwb2ludGVyLiBNb3ZlZCBpbnRlcm5hbCBmdW5jdGlvbnMgYWZ0ZXIgcHVibGljIGZ1
bmN0aW9ucy4KKwogMjAxNC0xMC0zMCAgRGFuYSBCdXJrYXJ0ICA8ZGJ1cmthcnRAYXBwbGUuY29t
PgogCiAgICAgICAgIDxyZGFyOi8vcHJvYmxlbS8xODgyMTI2MD4gUHJlcGFyZSBmb3IgdGhlIG15
c3RlcmlvdXMgZnV0dXJlCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9DaGFuZ2VMb2cgYi9T
b3VyY2UvV2ViQ29yZS9DaGFuZ2VMb2cKaW5kZXggNzBkODY4ZmMzYmQ1OTYzODZhMGI2MTEwMTc2
MzBhOTU3MThmZThhYi4uYzkwYzRjZjM3MjQxODJjY2E4MWQ0ZWM1ZDRjNzEwNTJlYmIxYTgzNCAx
MDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvQ2hhbmdlTG9nCisrKyBiL1NvdXJjZS9XZWJDb3Jl
L0NoYW5nZUxvZwpAQCAtMSwzICsxLDc1IEBACisyMDE0LTExLTAxICBEYXJpbiBBZGxlciAgPGRh
cmluQGFwcGxlLmNvbT4KKworICAgICAgICBSZXBsYWNlIEZpbGVUaHJlYWQgY2xhc3Mgd2l0aCBh
IHNpbmdsZSBmdW5jdGlvbgorICAgICAgICBodHRwczovL2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1
Zy5jZ2k/aWQ9MTM4MjgyCisKKyAgICAgICAgUmV2aWV3ZWQgYnkgTk9CT0RZIChPT1BTISkuCisK
KyAgICAgICAgKiBDTWFrZUxpc3RzLnR4dDogUmVtb3ZlZCBGaWxlVGhyZWFkLmNwcC4KKworICAg
ICAgICAqIE1vZHVsZXMvd2ViYXVkaW8vQXN5bmNBdWRpb0RlY29kZXIuaDogVXNlIGEgc3RkOjp1
bmlxdWVfcHRyIGV4cGxpY2l0bHkKKyAgICAgICAgZm9yIHRoZSBNZXNzYWdlUXVldWUsIHNpbmNl
IHRoYXQgY2xhc3MgdGVtcGxhdGUgbm8gbG9uZ2VyIGFkZHMgaXQgaW1wbGljaXRseS4KKyAgICAg
ICAgKiBNb2R1bGVzL3dlYmRhdGFiYXNlL0RhdGFiYXNlVGhyZWFkLmg6IERpdHRvLgorCisgICAg
ICAgICogV2ViQ29yZS52Y3hwcm9qL1dlYkNvcmUudmN4cHJvajogUmVtb3ZlZCBGaWxlVGhyZWFk
LmNwcC8uaC4KKyAgICAgICAgKiBXZWJDb3JlLnZjeHByb2ovV2ViQ29yZS52Y3hwcm9qLmZpbHRl
cnM6IERpdHRvLgorICAgICAgICAqIFdlYkNvcmUueGNvZGVwcm9qL3Byb2plY3QucGJ4cHJvajog
RGl0dG8uCisKKyAgICAgICAgKiBiaW5kaW5ncy9nZW5lcmljL0FjdGl2ZURPTUNhbGxiYWNrLmNw
cDogUmVtb3ZlZCB1bm5lZWRlZCBpbmNsdWRlcy4KKyAgICAgICAgKiBkb20vQWN0aXZlRE9NT2Jq
ZWN0LmNwcDogRGl0dG8uCisKKyAgICAgICAgKiBkb20vZGVmYXVsdC9QbGF0Zm9ybU1lc3NhZ2VQ
b3J0Q2hhbm5lbC5oOiBVc2UgYSBzdGQ6OnVuaXF1ZV9wdHIgZXhwbGljaXRseQorICAgICAgICBm
b3IgdGhlIE1lc3NhZ2VRdWV1ZSwgc2luY2UgdGhhdCBjbGFzcyB0ZW1wbGF0ZSBubyBsb25nZXIg
YWRkcyBpdCBpbXBsaWNpdGx5LgorCisgICAgICAgICogZmlsZWFwaS9Bc3luY0ZpbGVTdHJlYW0u
Y3BwOgorICAgICAgICAoV2ViQ29yZTo6Y2FsbE9uRmlsZVRocmVhZCk6IEFkZGVkLiBJbXBsZW1l
bnRzIHRoZSBmaWxlIHRocmVhZC4KKyAgICAgICAgKFdlYkNvcmU6OkFzeW5jRmlsZVN0cmVhbTo6
QXN5bmNGaWxlU3RyZWFtKTogVGFrZSBhIHJlZmVyZW5jZSB0byB0aGUgY2xpZW50LgorICAgICAg
ICAoV2ViQ29yZTo6QXN5bmNGaWxlU3RyZWFtOjpzdGFydCk6IEFkZGVkLiBDb250YWlucyB0aGUg
Y29kZSB0aGF0IG5lZWRzIHRvIHJ1bgorICAgICAgICBhZnRlciB0aGUgY29zbnRydWN0b3Igd2hl
biBjcmVhdGluZyB0aGlzIG9iamVjdDsgbmljZXIgdG8gaGF2ZSB0aGlzIGJlIGEgbWVtYmVyCisg
ICAgICAgIHJhdGhlciB0aGFuIGhhdmluZyB0byB3cml0ZSBpdCBhbGwgaW5zaWRlIGNyZWF0ZSB3
aXRoIGV4cGxpY2l0IHBvaW50ZXJzLiBBbHNvCisgICAgICAgIGNoYW5nZWQgdGhlIGNvZGUgdG8g
dXNlIHRoZSBtX3N0b3BwZWQgZGF0YSBtZW1iZXIgaW5zdGVhZCBvZiB0cmlja2llciB0ZWNobmlx
dWVzCisgICAgICAgIHRvIGhhbmRsZSBzdG9wcGluZy4gT25jZSB0aGUgc3RyZWFtIGlzIHN0b3Bw
ZWQsIHRoZXJlIHdpbGwgYmUgbm8gZnVydGhlciBjYWxsYmFja3MuCisgICAgICAgIChXZWJDb3Jl
OjpBc3luY0ZpbGVTdHJlYW06OmNyZWF0ZSk6IENoYW5nZWQgdG8gdGFrZSBhIHJlZmVyZW5jZSB0
byB0aGUgY2xpZW50LAorICAgICAgICBhbmQgdG8gdXNlIHN0YXJ0LgorICAgICAgICAoV2ViQ29y
ZTo6QXN5bmNGaWxlU3RyZWFtOjp+QXN5bmNGaWxlU3RyZWFtKTogQWRkZWQgc29tZSBhc3NlcnRp
b25zLgorICAgICAgICAoV2ViQ29yZTo6QXN5bmNGaWxlU3RyZWFtOjpzdG9wKTogQ2hhbmdlZCB0
byB1c2UgdGhlIG5ldyBtX3N0b3BwZWQgYW5kIHRoZQorICAgICAgICBjYWxsT25GaWxlVGhyZWFk
IGZ1bmN0aW9uLgorICAgICAgICAoV2ViQ29yZTo6QXN5bmNGaWxlU3RyZWFtOjpwZXJmb3JtKTog
QWRkZWQuIEhlbHBlciB1c2VkIGZvciBhbGwgdGhlIG9wZXJhdGlvbnMKKyAgICAgICAgYmVsb3cu
IFRha2VzIGEgZnVuY3Rpb24gdGhhdCBwZXJmb3JtcyBhbiBvcGVyYXRpb24gYW5kIHRoZW4gcmV0
dXJucyBhIGNsaWVudAorICAgICAgICBjYWxsYmFjayBmdW5jdGlvbi4gUmVzcGVjdHMgdGhlIG1f
c3RvcHBlZCBib29sZWFuIG9uIHRoZSBmaWxlIHRocmVhZCAoc28gd2UKKyAgICAgICAgZG9uJ3Qg
ZG8gZXh0cmEgb3BlcmF0aW9ucykgYW5kIG9uIHRoZSBjbGllbnQgdGhyZWFkIChzbyB3ZSBhcmUg
Z3VhcmFudGVlZCBub3QKKyAgICAgICAgdG8gZ2V0IGFueSBjbGllbnQgY2FsbGJhY2tzIGV2ZW4g
aWYgdGhlIGZpbGUgdGhyZWFkIHdhcyBwYXJ0d2F5IHRocm91Z2ggYW4KKyAgICAgICAgb3BlcmF0
aW9uKS4KKyAgICAgICAgKFdlYkNvcmU6OkFzeW5jRmlsZVN0cmVhbTo6Z2V0U2l6ZSk6IENoYW5n
ZWQgdG8gdXNlIHRoZSBwZXJmb3JtIGZ1bmN0aW9uLgorICAgICAgICAoV2ViQ29yZTo6QXN5bmNG
aWxlU3RyZWFtOjpvcGVuRm9yUmVhZCk6IERpdHRvLgorICAgICAgICAoV2ViQ29yZTo6QXN5bmNG
aWxlU3RyZWFtOjpvcGVuRm9yV3JpdGUpOiBEaXR0by4KKyAgICAgICAgKFdlYkNvcmU6OkFzeW5j
RmlsZVN0cmVhbTo6Y2xvc2UpOiBBZGRlZCBhIGNoZWNrIG9mIG1fc3RvcHBlZCBhbmQgY2hhbmdl
ZCB0bworICAgICAgICB1c2UgY2FsbE9uRmlsZVRocmVhZC4KKyAgICAgICAgKFdlYkNvcmU6OkFz
eW5jRmlsZVN0cmVhbTo6cmVhZCk6IENoYW5nZWQgdG8gdXNlIHRoZSBwZXJmb3JtIGZ1bmN0aW9u
LgorICAgICAgICAoV2ViQ29yZTo6QXN5bmNGaWxlU3RyZWFtOjp3cml0ZSk6IERpdHRvLgorICAg
ICAgICAoV2ViQ29yZTo6QXN5bmNGaWxlU3RyZWFtOjp0cnVuY2F0ZSk6IERpdHRvLgorCisgICAg
ICAgICogZmlsZWFwaS9Bc3luY0ZpbGVTdHJlYW0uaDogQ2hhbmdlZCB0byB1c2UgUGFzc1JlZiBh
bmQgUmVmLiBHb3QgcmlkIG9mIHRoZQorICAgICAgICB1bnVzZWQgY2xpZW50IGFuZCBzZXRDbGll
bnQgZnVuY3Rpb25zLiBBZGRlZCBtX3N0b3BwZWQsIHVzZWQgdG8gc3RvcCB0aGUKKyAgICAgICAg
b3BlcmF0aW9ucyBhbHJlYWR5IHBlbmRpbmcgb24gdGhlIGZpbGUgdGhyZWFkLgorCisgICAgICAg
ICogZmlsZWFwaS9GaWxlVGhyZWFkLmNwcDogUmVtb3ZlZC4KKyAgICAgICAgKiBmaWxlYXBpL0Zp
bGVUaHJlYWQuaDogUmVtb3ZlZC4KKworICAgICAgICAqIGxvYWRlci9SZXNvdXJjZUxvYWRlci5j
cHA6IFJlbW92ZWQgdW5uZWVkZWQgaW5jbHVkZS4KKworICAgICAgICAqIHBsYXRmb3JtL25ldHdv
cmsvQmxvYlJlc291cmNlSGFuZGxlLmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OkJsb2JSZXNvdXJj
ZUhhbmRsZTo6QmxvYlJlc291cmNlSGFuZGxlKTogUGFzcyBhIHJlZmVyZW5jZSBpbnN0ZWFkCisg
ICAgICAgIG9mIGEgcG9pbnRlci4KKworICAgICAgICAqIHN0b3JhZ2UvU3RvcmFnZVRocmVhZC5o
OiBVc2UgYSBzdGQ6OnVuaXF1ZV9wdHIgZXhwbGljaXRseQorICAgICAgICBmb3IgdGhlIE1lc3Nh
Z2VRdWV1ZSwgc2luY2UgdGhhdCBjbGFzcyB0ZW1wbGF0ZSBubyBsb25nZXIgYWRkcyBpdCBpbXBs
aWNpdGx5LgorCisgICAgICAgICogd29ya2Vycy9Xb3JrZXJSdW5Mb29wLmNwcDoKKyAgICAgICAg
KFdlYkNvcmU6Ok1vZGVQcmVkaWNhdGU6Om9wZXJhdG9yKCkpOiBVcGRhdGVkIGZvciBNZXNzYWdl
UVVldWUgY2hhbmdlLgorICAgICAgICAoV2ViQ29yZTo6V29ya2VyUnVuTG9vcDo6cnVuSW5Nb2Rl
KTogRGl0dG8uCisgICAgICAgICogd29ya2Vycy9Xb3JrZXJSdW5Mb29wLmg6IERpdHRvLgorCiAy
MDE0LTEwLTMwICBEYXJpbiBBZGxlciAgPGRhcmluQGFwcGxlLmNvbT4KIAogICAgICAgICBFbGlt
aW5hdGUgUmVzb3VyY2VCdWZmZXIgYW5kIHVzZSBTaGFyZWRCdWZmZXIgZGlyZWN0bHkgaW5zdGVh
ZApkaWZmIC0tZ2l0IGEvU291cmNlL1dURi93dGYvTWVzc2FnZVF1ZXVlLmggYi9Tb3VyY2UvV1RG
L3d0Zi9NZXNzYWdlUXVldWUuaAppbmRleCAxYTMzZDRjNWU4ZTM1MDczZjczMjdiYTdkN2ExZThk
YmI4NWU5YTUxLi5mNjJkYzY3OGU3NTM2NGY1Zjc2MjRhNmM0OTViNzY4ZDlmMDgyZDcxIDEwMDY0
NAotLS0gYS9Tb3VyY2UvV1RGL3d0Zi9NZXNzYWdlUXVldWUuaAorKysgYi9Tb3VyY2UvV1RGL3d0
Zi9NZXNzYWdlUXVldWUuaApAQCAtMSw1ICsxLDUgQEAKIC8qCi0gKiBDb3B5cmlnaHQgKEMpIDIw
MDggQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICogQ29weXJpZ2h0IChDKSAyMDA4
LCAyMDE0IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KICAqIENvcHlyaWdodCAoQykg
MjAwOSBHb29nbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgogICoKICAqIFJlZGlzdHJpYnV0
aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dApA
QCAtNDQsMjkgKzQ0LDI1IEBAIG5hbWVzcGFjZSBXVEYgewogICAgICAgICBNZXNzYWdlUXVldWVN
ZXNzYWdlUmVjZWl2ZWQgICAvLyBBIG1lc3NhZ2Ugd2FzIHN1Y2Nlc3NmdWxseSByZWNlaXZlZCBh
bmQgcmV0dXJuZWQuCiAgICAgfTsKIAotICAgIC8vIFRoZSBxdWV1ZSB0YWtlcyBvd25lcnNoaXAg
b2YgbWVzc2FnZXMgYW5kIHRyYW5zZmVyIGl0IHRvIHRoZSBuZXcgb3duZXIKLSAgICAvLyB3aGVu
IG1lc3NhZ2VzIGFyZSBmZXRjaGVkIGZyb20gdGhlIHF1ZXVlLgotICAgIC8vIEVzc2VudGlhbGx5
LCBNZXNzYWdlUXVldWUgYWN0cyBhcyBhIHF1ZXVlIG9mIHN0ZDo6dW5pcXVlX3B0cjxEYXRhVHlw
ZT4uCisgICAgLy8gVGhlIHF1ZXVlIHRha2VzIG93bmVyc2hpcCBvZiBtZXNzYWdlcyBhbmQgdHJh
bnNmZXJzIGVhY2ggdG8gdGhlIG5ldyBvd25lciB3aGVuIGl0IGlzIGZldGNoZWQuCiAgICAgdGVt
cGxhdGU8dHlwZW5hbWUgRGF0YVR5cGU+CiAgICAgY2xhc3MgTWVzc2FnZVF1ZXVlIHsKICAgICAg
ICAgV1RGX01BS0VfTk9OQ09QWUFCTEUoTWVzc2FnZVF1ZXVlKTsKICAgICBwdWJsaWM6Ci0gICAg
ICAgIE1lc3NhZ2VRdWV1ZSgpIDogbV9raWxsZWQoZmFsc2UpIHsgfQorICAgICAgICBNZXNzYWdl
UXVldWUoKSB7IH0KICAgICAgICAgfk1lc3NhZ2VRdWV1ZSgpOwogCi0gICAgICAgIHZvaWQgYXBw
ZW5kKHN0ZDo6dW5pcXVlX3B0cjxEYXRhVHlwZT4pOwotICAgICAgICB2b2lkIGFwcGVuZEFuZEtp
bGwoc3RkOjp1bmlxdWVfcHRyPERhdGFUeXBlPik7Ci0gICAgICAgIGJvb2wgYXBwZW5kQW5kQ2hl
Y2tFbXB0eShzdGQ6OnVuaXF1ZV9wdHI8RGF0YVR5cGU+KTsKLSAgICAgICAgdm9pZCBwcmVwZW5k
KHN0ZDo6dW5pcXVlX3B0cjxEYXRhVHlwZT4pOworICAgICAgICB2b2lkIGFwcGVuZChEYXRhVHlw
ZSk7CisgICAgICAgIHZvaWQgYXBwZW5kQW5kS2lsbChEYXRhVHlwZSk7CisgICAgICAgIGJvb2wg
YXBwZW5kQW5kQ2hlY2tFbXB0eShEYXRhVHlwZSk7CisgICAgICAgIHZvaWQgcHJlcGVuZChEYXRh
VHlwZSk7CiAKLSAgICAgICAgc3RkOjp1bmlxdWVfcHRyPERhdGFUeXBlPiB3YWl0Rm9yTWVzc2Fn
ZSgpOwotICAgICAgICBzdGQ6OnVuaXF1ZV9wdHI8RGF0YVR5cGU+IHRyeUdldE1lc3NhZ2UoKTsK
LSAgICAgICAgc3RkOjp1bmlxdWVfcHRyPERhdGFUeXBlPiB0cnlHZXRNZXNzYWdlSWdub3JpbmdL
aWxsZWQoKTsKLSAgICAgICAgdGVtcGxhdGU8dHlwZW5hbWUgUHJlZGljYXRlPgotICAgICAgICBz
dGQ6OnVuaXF1ZV9wdHI8RGF0YVR5cGU+IHdhaXRGb3JNZXNzYWdlRmlsdGVyZWRXaXRoVGltZW91
dChNZXNzYWdlUXVldWVXYWl0UmVzdWx0JiwgUHJlZGljYXRlJiYsIGRvdWJsZSBhYnNvbHV0ZVRp
bWUpOworICAgICAgICBEYXRhVHlwZSB3YWl0Rm9yTWVzc2FnZSgpOworICAgICAgICBEYXRhVHlw
ZSB0cnlHZXRNZXNzYWdlKCk7CisgICAgICAgIERhdGFUeXBlIHRyeUdldE1lc3NhZ2VJZ25vcmlu
Z0tpbGxlZCgpOworICAgICAgICB0ZW1wbGF0ZTx0eXBlbmFtZSBQcmVkaWNhdGU+IERhdGFUeXBl
IHdhaXRGb3JNZXNzYWdlRmlsdGVyZWRXaXRoVGltZW91dChNZXNzYWdlUXVldWVXYWl0UmVzdWx0
JiwgUHJlZGljYXRlJiYsIGRvdWJsZSBhYnNvbHV0ZVRpbWUpOwogCi0gICAgICAgIHRlbXBsYXRl
PHR5cGVuYW1lIFByZWRpY2F0ZT4KLSAgICAgICAgdm9pZCByZW1vdmVJZihQcmVkaWNhdGUmJik7
CisgICAgICAgIHRlbXBsYXRlPHR5cGVuYW1lIFByZWRpY2F0ZT4gdm9pZCByZW1vdmVJZihQcmVk
aWNhdGUmJik7CiAKICAgICAgICAgdm9pZCBraWxsKCk7CiAgICAgICAgIGJvb2wga2lsbGVkKCkg
Y29uc3Q7CkBAIC03OSw4ICs3NSw4IEBAIG5hbWVzcGFjZSBXVEYgewogICAgIHByaXZhdGU6CiAg
ICAgICAgIG11dGFibGUgTXV0ZXggbV9tdXRleDsKICAgICAgICAgVGhyZWFkQ29uZGl0aW9uIG1f
Y29uZGl0aW9uOwotICAgICAgICBEZXF1ZTxzdGQ6OnVuaXF1ZV9wdHI8RGF0YVR5cGU+PiBtX3F1
ZXVlOwotICAgICAgICBib29sIG1fa2lsbGVkOworICAgICAgICBEZXF1ZTxEYXRhVHlwZT4gbV9x
dWV1ZTsKKyAgICAgICAgYm9vbCBtX2tpbGxlZCB7IGZhbHNlIH07CiAgICAgfTsKIAogICAgIHRl
bXBsYXRlPHR5cGVuYW1lIERhdGFUeXBlPgpAQCAtODksNyArODUsNyBAQCBuYW1lc3BhY2UgV1RG
IHsKICAgICB9CiAKICAgICB0ZW1wbGF0ZTx0eXBlbmFtZSBEYXRhVHlwZT4KLSAgICBpbmxpbmUg
dm9pZCBNZXNzYWdlUXVldWU8RGF0YVR5cGU+OjphcHBlbmQoc3RkOjp1bmlxdWVfcHRyPERhdGFU
eXBlPiBtZXNzYWdlKQorICAgIGlubGluZSB2b2lkIE1lc3NhZ2VRdWV1ZTxEYXRhVHlwZT46OmFw
cGVuZChEYXRhVHlwZSBtZXNzYWdlKQogICAgIHsKICAgICAgICAgTXV0ZXhMb2NrZXIgbG9jayht
X211dGV4KTsKICAgICAgICAgbV9xdWV1ZS5hcHBlbmQoV1RGOjptb3ZlKG1lc3NhZ2UpKTsKQEAg
LTk3LDcgKzkzLDcgQEAgbmFtZXNwYWNlIFdURiB7CiAgICAgfQogCiAgICAgdGVtcGxhdGU8dHlw
ZW5hbWUgRGF0YVR5cGU+Ci0gICAgaW5saW5lIHZvaWQgTWVzc2FnZVF1ZXVlPERhdGFUeXBlPjo6
YXBwZW5kQW5kS2lsbChzdGQ6OnVuaXF1ZV9wdHI8RGF0YVR5cGU+IG1lc3NhZ2UpCisgICAgaW5s
aW5lIHZvaWQgTWVzc2FnZVF1ZXVlPERhdGFUeXBlPjo6YXBwZW5kQW5kS2lsbChEYXRhVHlwZSBt
ZXNzYWdlKQogICAgIHsKICAgICAgICAgTXV0ZXhMb2NrZXIgbG9jayhtX211dGV4KTsKICAgICAg
ICAgbV9xdWV1ZS5hcHBlbmQoV1RGOjptb3ZlKG1lc3NhZ2UpKTsKQEAgLTEwNyw3ICsxMDMsNyBA
QCBuYW1lc3BhY2UgV1RGIHsKIAogICAgIC8vIFJldHVybnMgdHJ1ZSBpZiB0aGUgcXVldWUgd2Fz
IGVtcHR5IGJlZm9yZSB0aGUgaXRlbSB3YXMgYWRkZWQuCiAgICAgdGVtcGxhdGU8dHlwZW5hbWUg
RGF0YVR5cGU+Ci0gICAgaW5saW5lIGJvb2wgTWVzc2FnZVF1ZXVlPERhdGFUeXBlPjo6YXBwZW5k
QW5kQ2hlY2tFbXB0eShzdGQ6OnVuaXF1ZV9wdHI8RGF0YVR5cGU+IG1lc3NhZ2UpCisgICAgaW5s
aW5lIGJvb2wgTWVzc2FnZVF1ZXVlPERhdGFUeXBlPjo6YXBwZW5kQW5kQ2hlY2tFbXB0eShEYXRh
VHlwZSBtZXNzYWdlKQogICAgIHsKICAgICAgICAgTXV0ZXhMb2NrZXIgbG9jayhtX211dGV4KTsK
ICAgICAgICAgYm9vbCB3YXNFbXB0eSA9IG1fcXVldWUuaXNFbXB0eSgpOwpAQCAtMTE3LDcgKzEx
Myw3IEBAIG5hbWVzcGFjZSBXVEYgewogICAgIH0KIAogICAgIHRlbXBsYXRlPHR5cGVuYW1lIERh
dGFUeXBlPgotICAgIGlubGluZSB2b2lkIE1lc3NhZ2VRdWV1ZTxEYXRhVHlwZT46OnByZXBlbmQo
c3RkOjp1bmlxdWVfcHRyPERhdGFUeXBlPiBtZXNzYWdlKQorICAgIGlubGluZSB2b2lkIE1lc3Nh
Z2VRdWV1ZTxEYXRhVHlwZT46OnByZXBlbmQoRGF0YVR5cGUgbWVzc2FnZSkKICAgICB7CiAgICAg
ICAgIE11dGV4TG9ja2VyIGxvY2sobV9tdXRleCk7CiAgICAgICAgIG1fcXVldWUucHJlcGVuZChX
VEY6Om1vdmUobWVzc2FnZSkpOwpAQCAtMTI1LDI2ICsxMjEsMjcgQEAgbmFtZXNwYWNlIFdURiB7
CiAgICAgfQogCiAgICAgdGVtcGxhdGU8dHlwZW5hbWUgRGF0YVR5cGU+Ci0gICAgaW5saW5lIGF1
dG8gTWVzc2FnZVF1ZXVlPERhdGFUeXBlPjo6d2FpdEZvck1lc3NhZ2UoKSAtPiBzdGQ6OnVuaXF1
ZV9wdHI8RGF0YVR5cGU+CisgICAgaW5saW5lIGF1dG8gTWVzc2FnZVF1ZXVlPERhdGFUeXBlPjo6
d2FpdEZvck1lc3NhZ2UoKSAtPiBEYXRhVHlwZQogICAgIHsKICAgICAgICAgTWVzc2FnZVF1ZXVl
V2FpdFJlc3VsdCBleGl0UmVhc29uOyAKLSAgICAgICAgc3RkOjp1bmlxdWVfcHRyPERhdGFUeXBl
PiByZXN1bHQgPSB3YWl0Rm9yTWVzc2FnZUZpbHRlcmVkV2l0aFRpbWVvdXQoZXhpdFJlYXNvbiwg
W10oY29uc3QgRGF0YVR5cGUmKSB7IHJldHVybiB0cnVlOyB9LCBpbmZpbml0ZVRpbWUoKSk7Cisg
ICAgICAgIERhdGFUeXBlIHJlc3VsdCA9IHdhaXRGb3JNZXNzYWdlRmlsdGVyZWRXaXRoVGltZW91
dChleGl0UmVhc29uLCBbXShjb25zdCBEYXRhVHlwZSYpIHsKKyAgICAgICAgICAgIHJldHVybiB0
cnVlOworICAgICAgICB9LCBpbmZpbml0ZVRpbWUoKSk7CiAgICAgICAgIEFTU0VSVChleGl0UmVh
c29uID09IE1lc3NhZ2VRdWV1ZVRlcm1pbmF0ZWQgfHwgZXhpdFJlYXNvbiA9PSBNZXNzYWdlUXVl
dWVNZXNzYWdlUmVjZWl2ZWQpOwogICAgICAgICByZXR1cm4gcmVzdWx0OwogICAgIH0KIAogICAg
IHRlbXBsYXRlPHR5cGVuYW1lIERhdGFUeXBlPgogICAgIHRlbXBsYXRlPHR5cGVuYW1lIFByZWRp
Y2F0ZT4KLSAgICBpbmxpbmUgYXV0byBNZXNzYWdlUXVldWU8RGF0YVR5cGU+Ojp3YWl0Rm9yTWVz
c2FnZUZpbHRlcmVkV2l0aFRpbWVvdXQoTWVzc2FnZVF1ZXVlV2FpdFJlc3VsdCYgcmVzdWx0LCBQ
cmVkaWNhdGUmJiBwcmVkaWNhdGUsIGRvdWJsZSBhYnNvbHV0ZVRpbWUpIC0+IHN0ZDo6dW5pcXVl
X3B0cjxEYXRhVHlwZT4KKyAgICBpbmxpbmUgYXV0byBNZXNzYWdlUXVldWU8RGF0YVR5cGU+Ojp3
YWl0Rm9yTWVzc2FnZUZpbHRlcmVkV2l0aFRpbWVvdXQoTWVzc2FnZVF1ZXVlV2FpdFJlc3VsdCYg
cmVzdWx0LCBQcmVkaWNhdGUmJiBwcmVkaWNhdGUsIGRvdWJsZSBhYnNvbHV0ZVRpbWUpIC0+IERh
dGFUeXBlCiAgICAgewogICAgICAgICBNdXRleExvY2tlciBsb2NrKG1fbXV0ZXgpOwogICAgICAg
ICBib29sIHRpbWVkT3V0ID0gZmFsc2U7CiAKICAgICAgICAgYXV0byBmb3VuZCA9IG1fcXVldWUu
ZW5kKCk7CiAgICAgICAgIHdoaWxlICghbV9raWxsZWQgJiYgIXRpbWVkT3V0KSB7Ci0gICAgICAg
ICAgICBmb3VuZCA9IG1fcXVldWUuZmluZElmKFsmcHJlZGljYXRlXShjb25zdCBzdGQ6OnVuaXF1
ZV9wdHI8RGF0YVR5cGU+JiBwdHIpIC0+IGJvb2wgewotICAgICAgICAgICAgICAgIEFTU0VSVChw
dHIpOwotICAgICAgICAgICAgICAgIHJldHVybiBwcmVkaWNhdGUoKnB0cik7CisgICAgICAgICAg
ICBmb3VuZCA9IG1fcXVldWUuZmluZElmKFsmcHJlZGljYXRlXShjb25zdCBEYXRhVHlwZSYgcHRy
KSAtPiBib29sIHsKKyAgICAgICAgICAgICAgICByZXR1cm4gcHJlZGljYXRlKHB0cik7CiAgICAg
ICAgICAgICB9KTsKICAgICAgICAgICAgIGlmIChmb3VuZCAhPSBtX3F1ZXVlLmVuZCgpKQogICAg
ICAgICAgICAgICAgIGJyZWFrOwpAQCAtMTY1LDE0ICsxNjIsMTQgQEAgbmFtZXNwYWNlIFdURiB7
CiAgICAgICAgIH0KIAogICAgICAgICBBU1NFUlQoZm91bmQgIT0gbV9xdWV1ZS5lbmQoKSk7Ci0g
ICAgICAgIHN0ZDo6dW5pcXVlX3B0cjxEYXRhVHlwZT4gbWVzc2FnZSA9IFdURjo6bW92ZSgqZm91
bmQpOworICAgICAgICBEYXRhVHlwZSBtZXNzYWdlID0gV1RGOjptb3ZlKCpmb3VuZCk7CiAgICAg
ICAgIG1fcXVldWUucmVtb3ZlKGZvdW5kKTsKICAgICAgICAgcmVzdWx0ID0gTWVzc2FnZVF1ZXVl
TWVzc2FnZVJlY2VpdmVkOwogICAgICAgICByZXR1cm4gbWVzc2FnZTsKICAgICB9CiAKICAgICB0
ZW1wbGF0ZTx0eXBlbmFtZSBEYXRhVHlwZT4KLSAgICBpbmxpbmUgYXV0byBNZXNzYWdlUXVldWU8
RGF0YVR5cGU+Ojp0cnlHZXRNZXNzYWdlKCkgLT4gc3RkOjp1bmlxdWVfcHRyPERhdGFUeXBlPgor
ICAgIGlubGluZSBhdXRvIE1lc3NhZ2VRdWV1ZTxEYXRhVHlwZT46OnRyeUdldE1lc3NhZ2UoKSAt
PiBEYXRhVHlwZQogICAgIHsKICAgICAgICAgTXV0ZXhMb2NrZXIgbG9jayhtX211dGV4KTsKICAg
ICAgICAgaWYgKG1fa2lsbGVkKQpAQCAtMTg0LDcgKzE4MSw3IEBAIG5hbWVzcGFjZSBXVEYgewog
ICAgIH0KIAogICAgIHRlbXBsYXRlPHR5cGVuYW1lIERhdGFUeXBlPgotICAgIGlubGluZSBhdXRv
IE1lc3NhZ2VRdWV1ZTxEYXRhVHlwZT46OnRyeUdldE1lc3NhZ2VJZ25vcmluZ0tpbGxlZCgpIC0+
IHN0ZDo6dW5pcXVlX3B0cjxEYXRhVHlwZT4KKyAgICBpbmxpbmUgYXV0byBNZXNzYWdlUXVldWU8
RGF0YVR5cGU+Ojp0cnlHZXRNZXNzYWdlSWdub3JpbmdLaWxsZWQoKSAtPiBEYXRhVHlwZQogICAg
IHsKICAgICAgICAgTXV0ZXhMb2NrZXIgbG9jayhtX211dGV4KTsKICAgICAgICAgaWYgKG1fcXVl
dWUuaXNFbXB0eSgpKQpAQCAtMTk5LDcgKzE5Niw3IEBAIG5hbWVzcGFjZSBXVEYgewogICAgIHsK
ICAgICAgICAgTXV0ZXhMb2NrZXIgbG9jayhtX211dGV4KTsKICAgICAgICAgd2hpbGUgKHRydWUp
IHsKLSAgICAgICAgICAgIGF1dG8gZm91bmQgPSBtX3F1ZXVlLmZpbmRJZihbJnByZWRpY2F0ZV0o
Y29uc3Qgc3RkOjp1bmlxdWVfcHRyPERhdGFUeXBlPiYgcHRyKSAtPiBib29sIHsKKyAgICAgICAg
ICAgIGF1dG8gZm91bmQgPSBtX3F1ZXVlLmZpbmRJZihbJnByZWRpY2F0ZV0oY29uc3QgRGF0YVR5
cGUmIHB0cikgLT4gYm9vbCB7CiAgICAgICAgICAgICAgICAgQVNTRVJUKHB0cik7CiAgICAgICAg
ICAgICAgICAgcmV0dXJuIHByZWRpY2F0ZSgqcHRyKTsKICAgICAgICAgICAgIH0pOwpAQCAtMjM0
LDEzICsyMzEsMTMgQEAgbmFtZXNwYWNlIFdURiB7CiAgICAgICAgIE11dGV4TG9ja2VyIGxvY2so
bV9tdXRleCk7CiAgICAgICAgIHJldHVybiBtX2tpbGxlZDsKICAgICB9CisKIH0gLy8gbmFtZXNw
YWNlIFdURgogCiB1c2luZyBXVEY6Ok1lc3NhZ2VRdWV1ZTsKLS8vIE1lc3NhZ2VRdWV1ZVdhaXRS
ZXN1bHQgZW51bSBhbmQgYWxsIGl0cyB2YWx1ZXMuCi11c2luZyBXVEY6Ok1lc3NhZ2VRdWV1ZVdh
aXRSZXN1bHQ7Cit1c2luZyBXVEY6Ok1lc3NhZ2VRdWV1ZU1lc3NhZ2VSZWNlaXZlZDsKIHVzaW5n
IFdURjo6TWVzc2FnZVF1ZXVlVGVybWluYXRlZDsKIHVzaW5nIFdURjo6TWVzc2FnZVF1ZXVlVGlt
ZW91dDsKLXVzaW5nIFdURjo6TWVzc2FnZVF1ZXVlTWVzc2FnZVJlY2VpdmVkOwordXNpbmcgV1RG
OjpNZXNzYWdlUXVldWVXYWl0UmVzdWx0OwogCiAjZW5kaWYgLy8gTWVzc2FnZVF1ZXVlX2gKZGlm
ZiAtLWdpdCBhL1NvdXJjZS9XVEYvd3RmL1RocmVhZGluZy5jcHAgYi9Tb3VyY2UvV1RGL3d0Zi9U
aHJlYWRpbmcuY3BwCmluZGV4IGM4ZDk5NmI1YTg1ZWQwNGVkNWEzOTlhZWVhZDE0NTk2NTQzOGU5
MGQuLmEwMmZlYjY5ODA5NWQ1YmFlZGQ4NWNmOWRlZTg1YWY0Njg1NDY5OTAgMTAwNjQ0Ci0tLSBh
L1NvdXJjZS9XVEYvd3RmL1RocmVhZGluZy5jcHAKKysrIGIvU291cmNlL1dURi93dGYvVGhyZWFk
aW5nLmNwcApAQCAtMSw1ICsxLDUgQEAKIC8qCi0gKiBDb3B5cmlnaHQgKEMpIDIwMDgsIDIwMDkg
QXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICogQ29weXJpZ2h0IChDKSAyMDA4LCAy
MDA5LCAyMDE0IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KICAqCiAgKiBSZWRpc3Ry
aWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhv
dXQKICAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xs
b3dpbmcgY29uZGl0aW9ucwpAQCAtMzMsMjMgKzMzLDE0IEBAIG5hbWVzcGFjZSBXVEYgewogc3Ry
dWN0IE5ld1RocmVhZENvbnRleHQgewogICAgIFdURl9NQUtFX0ZBU1RfQUxMT0NBVEVEOwogcHVi
bGljOgotICAgIE5ld1RocmVhZENvbnRleHQoVGhyZWFkRnVuY3Rpb24gZW50cnlQb2ludCwgdm9p
ZCogZGF0YSwgY29uc3QgY2hhciogbmFtZSkKLSAgICAgICAgOiBlbnRyeVBvaW50KGVudHJ5UG9p
bnQpCi0gICAgICAgICwgZGF0YShkYXRhKQotICAgICAgICAsIG5hbWUobmFtZSkKLSAgICB7Ci0g
ICAgfQotCi0gICAgVGhyZWFkRnVuY3Rpb24gZW50cnlQb2ludDsKLSAgICB2b2lkKiBkYXRhOwog
ICAgIGNvbnN0IGNoYXIqIG5hbWU7Ci0KKyAgICBzdGQ6OmZ1bmN0aW9uPHZvaWQoKT4gZW50cnlQ
b2ludDsKICAgICBNdXRleCBjcmVhdGlvbk11dGV4OwogfTsKIAogc3RhdGljIHZvaWQgdGhyZWFk
RW50cnlQb2ludCh2b2lkKiBjb250ZXh0RGF0YSkKIHsKLSAgICBOZXdUaHJlYWRDb250ZXh0KiBj
b250ZXh0ID0gcmVpbnRlcnByZXRfY2FzdDxOZXdUaHJlYWRDb250ZXh0Kj4oY29udGV4dERhdGEp
OworICAgIE5ld1RocmVhZENvbnRleHQqIGNvbnRleHQgPSBzdGF0aWNfY2FzdDxOZXdUaHJlYWRD
b250ZXh0Kj4oY29udGV4dERhdGEpOwogCiAgICAgLy8gQmxvY2sgdW50aWwgb3VyIGNyZWF0aW5n
IHRocmVhZCBoYXMgY29tcGxldGVkIGFueSBleHRyYSBzZXR1cCB3b3JrLCBpbmNsdWRpbmcKICAg
ICAvLyBlc3RhYmxpc2hpbmcgVGhyZWFkSWRlbnRpZmllci4KQEAgLTU5LDE1ICs1MCwxNSBAQCBz
dGF0aWMgdm9pZCB0aHJlYWRFbnRyeVBvaW50KHZvaWQqIGNvbnRleHREYXRhKQogCiAgICAgaW5p
dGlhbGl6ZUN1cnJlbnRUaHJlYWRJbnRlcm5hbChjb250ZXh0LT5uYW1lKTsKIAotICAgIC8vIEdy
YWIgdGhlIGluZm8gdGhhdCB3ZSBuZWVkIG91dCBvZiB0aGUgY29udGV4dCwgdGhlbiBkZWFsbG9j
YXRlIGl0LgotICAgIFRocmVhZEZ1bmN0aW9uIGVudHJ5UG9pbnQgPSBjb250ZXh0LT5lbnRyeVBv
aW50OwotICAgIHZvaWQqIGRhdGEgPSBjb250ZXh0LT5kYXRhOworICAgIGF1dG8gZW50cnlQb2lu
dCA9IFdURjo6bW92ZShjb250ZXh0LT5lbnRyeVBvaW50KTsKKworICAgIC8vIERlbGV0ZSB0aGUg
Y29udGV4dCBiZWZvcmUgc3RhcnRpbmcgdGhlIHRocmVhZC4KICAgICBkZWxldGUgY29udGV4dDsK
IAotICAgIGVudHJ5UG9pbnQoZGF0YSk7CisgICAgZW50cnlQb2ludCgpOwogfQogCi1UaHJlYWRJ
ZGVudGlmaWVyIGNyZWF0ZVRocmVhZChUaHJlYWRGdW5jdGlvbiBlbnRyeVBvaW50LCB2b2lkKiBk
YXRhLCBjb25zdCBjaGFyKiBuYW1lKQorVGhyZWFkSWRlbnRpZmllciBjcmVhdGVUaHJlYWQoY29u
c3QgY2hhciogbmFtZSwgc3RkOjpmdW5jdGlvbjx2b2lkKCk+IGVudHJ5UG9pbnQpCiB7CiAgICAg
Ly8gVmlzdWFsIFN0dWRpbyBoYXMgYSAzMS1jaGFyYWN0ZXIgbGltaXQgb24gdGhyZWFkIG5hbWVz
LiBMb25nZXIgbmFtZXMgd2lsbAogICAgIC8vIGJlIHRydW5jYXRlZCBzaWxlbnRseSwgYnV0IHdl
J2QgbGlrZSBjYWxsZXJzIHRvIGtub3cgYWJvdXQgdGhlIGxpbWl0LgpAQCAtNzYsNyArNjcsNyBA
QCBUaHJlYWRJZGVudGlmaWVyIGNyZWF0ZVRocmVhZChUaHJlYWRGdW5jdGlvbiBlbnRyeVBvaW50
LCB2b2lkKiBkYXRhLCBjb25zdCBjaGFyKgogICAgICAgICBMT0dfRVJST1IoIlRocmVhZCBuYW1l
IFwiJXNcIiBpcyBsb25nZXIgdGhhbiAzMSBjaGFyYWN0ZXJzIGFuZCB3aWxsIGJlIHRydW5jYXRl
ZCBieSBWaXN1YWwgU3R1ZGlvIiwgbmFtZSk7CiAjZW5kaWYKIAotICAgIE5ld1RocmVhZENvbnRl
eHQqIGNvbnRleHQgPSBuZXcgTmV3VGhyZWFkQ29udGV4dChlbnRyeVBvaW50LCBkYXRhLCBuYW1l
KTsKKyAgICBOZXdUaHJlYWRDb250ZXh0KiBjb250ZXh0ID0gbmV3IE5ld1RocmVhZENvbnRleHQg
eyBuYW1lLCBXVEY6Om1vdmUoZW50cnlQb2ludCksIHsgfSB9OwogCiAgICAgLy8gUHJldmVudCB0
aGUgdGhyZWFkIGJvZHkgZnJvbSBleGVjdXRpbmcgdW50aWwgd2UndmUgZXN0YWJsaXNoZWQgdGhl
IHRocmVhZCBpZGVudGlmaWVyLgogICAgIE11dGV4TG9ja2VyIGxvY2tlcihjb250ZXh0LT5jcmVh
dGlvbk11dGV4KTsKQEAgLTg0LDYgKzc1LDEzIEBAIFRocmVhZElkZW50aWZpZXIgY3JlYXRlVGhy
ZWFkKFRocmVhZEZ1bmN0aW9uIGVudHJ5UG9pbnQsIHZvaWQqIGRhdGEsIGNvbnN0IGNoYXIqCiAg
ICAgcmV0dXJuIGNyZWF0ZVRocmVhZEludGVybmFsKHRocmVhZEVudHJ5UG9pbnQsIGNvbnRleHQs
IG5hbWUpOwogfQogCitUaHJlYWRJZGVudGlmaWVyIGNyZWF0ZVRocmVhZChUaHJlYWRGdW5jdGlv
biBlbnRyeVBvaW50LCB2b2lkKiBkYXRhLCBjb25zdCBjaGFyKiBuYW1lKQoreworICAgIHJldHVy
biBjcmVhdGVUaHJlYWQobmFtZSwgW2VudHJ5UG9pbnQsIGRhdGFdIHsKKyAgICAgICAgZW50cnlQ
b2ludChkYXRhKTsKKyAgICB9KTsKK30KKwogdm9pZCBzZXRDdXJyZW50VGhyZWFkSXNVc2VySW50
ZXJhY3RpdmUoKQogewogI2lmIEhBVkUoUU9TX0NMQVNTRVMpCkBAIC05OCw2MSArOTYsMzcgQEAg
dm9pZCBzZXRDdXJyZW50VGhyZWFkSXNVc2VySW5pdGlhdGVkKCkKICNlbmRpZgogfQogCi0jaWYg
UExBVEZPUk0oTUFDKSB8fCBQTEFURk9STShXSU4pCisjaWYgUExBVEZPUk0oTUFDKQogCi0vLyBG
b3IgQUJJIGNvbXBhdGliaWxpdHkgd2l0aCBTYWZhcmkgb24gTWFjIC8gV2luZG93czogU2FmYXJp
IHVzZXMgdGhlIHByaXZhdGUKLS8vIGNyZWF0ZVRocmVhZCgpIGFuZCB3YWl0Rm9yVGhyZWFkQ29t
cGxldGlvbigpIGZ1bmN0aW9ucyBkaXJlY3RseSBhbmQgd2UgbmVlZAotLy8gdG8ga2VlcCB0aGUg
b2xkIEFCSSBjb21wYXRpYmlsaXR5IHVudGlsIGl0J3MgYmVlbiByZWJ1aWx0LgorLy8gRm9yIEFC
SSBjb21wYXRpYmlsaXR5IHdpdGggb2xkZXIgdmVyc2lvbnMgb2YgU2FmYXJpLgorCisvLyBTYWZh
cmkgdXNlcyB0aGVzZSBvbGQgdmVyc2lvbnMgb2YgY3JlYXRlVGhyZWFkKCkgYW5kIHdhaXRGb3JU
aHJlYWRDb21wbGV0aW9uKCkgZnVuY3Rpb25zCisvLyBkaXJlY3RseSBhbmQgd2UgbmVlZCB0byBr
ZWVwIHRoZSBvbGQgQUJJIGNvbXBhdGliaWxpdHkgdW50aWwgZXZlcnlvbmUgaGFzIGEgbmV3ZXIg
dmVyc2lvbgorLy8gb2YgU2FmYXJpIHRvIHdvcmsgd2l0aC4KIAogdHlwZWRlZiB2b2lkKiAoKlRo
cmVhZEZ1bmN0aW9uV2l0aFJldHVyblZhbHVlKSh2b2lkKiBhcmd1bWVudCk7CiAKIFdURl9FWFBP
UlRfUFJJVkFURSBUaHJlYWRJZGVudGlmaWVyIGNyZWF0ZVRocmVhZChUaHJlYWRGdW5jdGlvbldp
dGhSZXR1cm5WYWx1ZSBlbnRyeVBvaW50LCB2b2lkKiBkYXRhLCBjb25zdCBjaGFyKiBuYW1lKTsK
K1dURl9FWFBPUlRfUFJJVkFURSBUaHJlYWRJZGVudGlmaWVyIGNyZWF0ZVRocmVhZChUaHJlYWRG
dW5jdGlvbldpdGhSZXR1cm5WYWx1ZSBlbnRyeVBvaW50LCB2b2lkKiBkYXRhKTsKK1dURl9FWFBP
UlRfUFJJVkFURSBpbnQgd2FpdEZvclRocmVhZENvbXBsZXRpb24oVGhyZWFkSWRlbnRpZmllciwg
dm9pZCoqKTsKIAotc3RydWN0IFRocmVhZEZ1bmN0aW9uV2l0aFJldHVyblZhbHVlSW52b2NhdGlv
biB7Ci0gICAgVGhyZWFkRnVuY3Rpb25XaXRoUmV0dXJuVmFsdWVJbnZvY2F0aW9uKFRocmVhZEZ1
bmN0aW9uV2l0aFJldHVyblZhbHVlIGZ1bmN0aW9uLCB2b2lkKiBkYXRhKQotICAgICAgICA6IGZ1
bmN0aW9uKGZ1bmN0aW9uKQotICAgICAgICAsIGRhdGEoZGF0YSkKLSAgICB7Ci0gICAgfQotCi0g
ICAgVGhyZWFkRnVuY3Rpb25XaXRoUmV0dXJuVmFsdWUgZnVuY3Rpb247Ci0gICAgdm9pZCogZGF0
YTsKLX07Ci0KLXN0YXRpYyB2b2lkIGNvbXBhdEVudHJ5UG9pbnQodm9pZCogcGFyYW0pCitUaHJl
YWRJZGVudGlmaWVyIGNyZWF0ZVRocmVhZChUaHJlYWRGdW5jdGlvbldpdGhSZXR1cm5WYWx1ZSBl
bnRyeVBvaW50LCB2b2lkKiBkYXRhLCBjb25zdCBjaGFyKiBuYW1lKQogewotICAgIC8vIEJhbGFu
Y2VkIGJ5IC5yZWxlYXNlKCkgaW4gY3JlYXRlVGhyZWFkLgotICAgIGF1dG8gaW52b2NhdGlvbiA9
IHN0ZDo6dW5pcXVlX3B0cjxUaHJlYWRGdW5jdGlvbldpdGhSZXR1cm5WYWx1ZUludm9jYXRpb24+
KHN0YXRpY19jYXN0PFRocmVhZEZ1bmN0aW9uV2l0aFJldHVyblZhbHVlSW52b2NhdGlvbio+KHBh
cmFtKSk7Ci0gICAgaW52b2NhdGlvbi0+ZnVuY3Rpb24oaW52b2NhdGlvbi0+ZGF0YSk7CisgICAg
cmV0dXJuIGNyZWF0ZVRocmVhZChuYW1lLCBbZW50cnlQb2ludCwgZGF0YV0geworICAgICAgICBl
bnRyeVBvaW50KGRhdGEpOworICAgIH0pOwogfQogCi1UaHJlYWRJZGVudGlmaWVyIGNyZWF0ZVRo
cmVhZChUaHJlYWRGdW5jdGlvbldpdGhSZXR1cm5WYWx1ZSBlbnRyeVBvaW50LCB2b2lkKiBkYXRh
LCBjb25zdCBjaGFyKiBuYW1lKQorVGhyZWFkSWRlbnRpZmllciBjcmVhdGVUaHJlYWQoVGhyZWFk
RnVuY3Rpb25XaXRoUmV0dXJuVmFsdWUgZW50cnlQb2ludCwgdm9pZCogZGF0YSkKIHsKLSAgICBh
dXRvIGludm9jYXRpb24gPSBzdGQ6Om1ha2VfdW5pcXVlPFRocmVhZEZ1bmN0aW9uV2l0aFJldHVy
blZhbHVlSW52b2NhdGlvbj4oZW50cnlQb2ludCwgZGF0YSk7Ci0KLSAgICAvLyBCYWxhbmNlZCBi
eSBzdGQ6OnVuaXF1ZV9wdHIgY29uc3RydWN0b3IgaW4gY29tcGF0RW50cnlQb2ludC4KLSAgICBy
ZXR1cm4gY3JlYXRlVGhyZWFkKGNvbXBhdEVudHJ5UG9pbnQsIGludm9jYXRpb24ucmVsZWFzZSgp
LCBuYW1lKTsKKyAgICByZXR1cm4gY3JlYXRlVGhyZWFkKGVudHJ5UG9pbnQsIGRhdGEsIG51bGxw
dHIpOwogfQogCi1XVEZfRVhQT1JUX1BSSVZBVEUgaW50IHdhaXRGb3JUaHJlYWRDb21wbGV0aW9u
KFRocmVhZElkZW50aWZpZXIsIHZvaWQqKik7Ci0KIGludCB3YWl0Rm9yVGhyZWFkQ29tcGxldGlv
bihUaHJlYWRJZGVudGlmaWVyIHRocmVhZElELCB2b2lkKiopCiB7CiAgICAgcmV0dXJuIHdhaXRG
b3JUaHJlYWRDb21wbGV0aW9uKHRocmVhZElEKTsKIH0KIAotLy8gVGhpcyBmdW5jdGlvbiBpcyBk
ZXByZWNhdGVkIGJ1dCBuZWVkcyB0byBiZSBrZXB0IGFyb3VuZCBmb3IgYmFja3dhcmQKLS8vIGNv
bXBhdGliaWxpdHkuIFVzZSB0aGUgMy1hcmd1bWVudCB2ZXJzaW9uIG9mIGNyZWF0ZVRocmVhZCBh
Ym92ZS4KLQotV1RGX0VYUE9SVF9QUklWQVRFIFRocmVhZElkZW50aWZpZXIgY3JlYXRlVGhyZWFk
KFRocmVhZEZ1bmN0aW9uV2l0aFJldHVyblZhbHVlIGVudHJ5UG9pbnQsIHZvaWQqIGRhdGEpOwot
Ci1UaHJlYWRJZGVudGlmaWVyIGNyZWF0ZVRocmVhZChUaHJlYWRGdW5jdGlvbldpdGhSZXR1cm5W
YWx1ZSBlbnRyeVBvaW50LCB2b2lkKiBkYXRhKQotewotICAgIGF1dG8gaW52b2NhdGlvbiA9IHN0
ZDo6bWFrZV91bmlxdWU8VGhyZWFkRnVuY3Rpb25XaXRoUmV0dXJuVmFsdWVJbnZvY2F0aW9uPihl
bnRyeVBvaW50LCBkYXRhKTsKLQotICAgIC8vIEJhbGFuY2VkIGJ5IGFkb3B0UHRyKCkgaW4gY29t
cGF0RW50cnlQb2ludC4KLSAgICByZXR1cm4gY3JlYXRlVGhyZWFkKGNvbXBhdEVudHJ5UG9pbnQs
IGludm9jYXRpb24ucmVsZWFzZSgpLCAwKTsKLX0KICNlbmRpZgogCiB9IC8vIG5hbWVzcGFjZSBX
VEYKZGlmZiAtLWdpdCBhL1NvdXJjZS9XVEYvd3RmL1RocmVhZGluZy5oIGIvU291cmNlL1dURi93
dGYvVGhyZWFkaW5nLmgKaW5kZXggMzY2ZGZiYjk4Y2QwY2ZmNmRiYjQ0NmEyZTI4YTNkYmI2ODYz
ZWMzMS4uNTkwNmZmNzRhMWU2MWZmM2ZhOGNkN2EyOTJlZWU3NTE2Mzc0NmUwNSAxMDA2NDQKLS0t
IGEvU291cmNlL1dURi93dGYvVGhyZWFkaW5nLmgKKysrIGIvU291cmNlL1dURi93dGYvVGhyZWFk
aW5nLmgKQEAgLTEsNSArMSw1IEBACiAvKgotICogQ29weXJpZ2h0IChDKSAyMDA3LCAyMDA4LCAy
MDEwIEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqIENvcHlyaWdodCAoQykgMjAw
NywgMjAwOCwgMjAxMCwgMjAxNCBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCiAgKiBD
b3B5cmlnaHQgKEMpIDIwMDcgSnVzdGluIEhheWdvb2QgKGpoYXlnb29kQHJlYWt0aXguY29tKQog
ICoKICAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMs
IHdpdGggb3Igd2l0aG91dApAQCAtMjUsNDAgKzI1LDE2IEBACiAgKiBPTiBBTlkgVEhFT1JZIE9G
IExJQUJJTElUWSwgV0hFVEhFUiBJTiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9S
VAogICogKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJU0lORyBJTiBBTlkg
V0FZIE9VVCBPRiBUSEUgVVNFIE9GCiAgKiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQg
T0YgVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgotICoKLSAqCi0gKiBOb3RlOiBUaGUg
aW1wbGVtZW50YXRpb25zIG9mIEludGVybG9ja2VkSW5jcmVtZW50IGFuZCBJbnRlcmxvY2tlZERl
Y3JlbWVudCBhcmUgYmFzZWQKLSAqIG9uIGF0b21pY19pbmNyZW1lbnQgYW5kIGF0b21pY19leGNo
YW5nZV9hbmRfYWRkIGZyb20gdGhlIEJvb3N0IEMrKyBMaWJyYXJ5LiBUaGUgbGljZW5zZQotICog
aXMgdmlydHVhbGx5IGlkZW50aWNhbCB0byB0aGUgQXBwbGUgbGljZW5zZSBhYm92ZSBidXQgaXMg
aW5jbHVkZWQgaGVyZSBmb3IgY29tcGxldGVuZXNzLgotICoKLSAqIEJvb3N0IFNvZnR3YXJlIExp
Y2Vuc2UgLSBWZXJzaW9uIDEuMCAtIEF1Z3VzdCAxN3RoLCAyMDAzCi0gKiAKLSAqIFBlcm1pc3Np
b24gaXMgaGVyZWJ5IGdyYW50ZWQsIGZyZWUgb2YgY2hhcmdlLCB0byBhbnkgcGVyc29uIG9yIG9y
Z2FuaXphdGlvbgotICogb2J0YWluaW5nIGEgY29weSBvZiB0aGUgc29mdHdhcmUgYW5kIGFjY29t
cGFueWluZyBkb2N1bWVudGF0aW9uIGNvdmVyZWQgYnkKLSAqIHRoaXMgbGljZW5zZSAodGhlICJT
b2Z0d2FyZSIpIHRvIHVzZSwgcmVwcm9kdWNlLCBkaXNwbGF5LCBkaXN0cmlidXRlLAotICogZXhl
Y3V0ZSwgYW5kIHRyYW5zbWl0IHRoZSBTb2Z0d2FyZSwgYW5kIHRvIHByZXBhcmUgZGVyaXZhdGl2
ZSB3b3JrcyBvZiB0aGUKLSAqIFNvZnR3YXJlLCBhbmQgdG8gcGVybWl0IHRoaXJkLXBhcnRpZXMg
dG8gd2hvbSB0aGUgU29mdHdhcmUgaXMgZnVybmlzaGVkIHRvCi0gKiBkbyBzbywgYWxsIHN1Ympl
Y3QgdG8gdGhlIGZvbGxvd2luZzoKLSAqIAotICogVGhlIGNvcHlyaWdodCBub3RpY2VzIGluIHRo
ZSBTb2Z0d2FyZSBhbmQgdGhpcyBlbnRpcmUgc3RhdGVtZW50LCBpbmNsdWRpbmcKLSAqIHRoZSBh
Ym92ZSBsaWNlbnNlIGdyYW50LCB0aGlzIHJlc3RyaWN0aW9uIGFuZCB0aGUgZm9sbG93aW5nIGRp
c2NsYWltZXIsCi0gKiBtdXN0IGJlIGluY2x1ZGVkIGluIGFsbCBjb3BpZXMgb2YgdGhlIFNvZnR3
YXJlLCBpbiB3aG9sZSBvciBpbiBwYXJ0LCBhbmQKLSAqIGFsbCBkZXJpdmF0aXZlIHdvcmtzIG9m
IHRoZSBTb2Z0d2FyZSwgdW5sZXNzIHN1Y2ggY29waWVzIG9yIGRlcml2YXRpdmUKLSAqIHdvcmtz
IGFyZSBzb2xlbHkgaW4gdGhlIGZvcm0gb2YgbWFjaGluZS1leGVjdXRhYmxlIG9iamVjdCBjb2Rl
IGdlbmVyYXRlZCBieQotICogYSBzb3VyY2UgbGFuZ3VhZ2UgcHJvY2Vzc29yLgotICogCi0gKiBU
SEUgU09GVFdBUkUgSVMgUFJPVklERUQgIkFTIElTIiwgV0lUSE9VVCBXQVJSQU5UWSBPRiBBTlkg
S0lORCwgRVhQUkVTUyBPUgotICogSU1QTElFRCwgSU5DTFVESU5HIEJVVCBOT1QgTElNSVRFRCBU
TyBUSEUgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFksCi0gKiBGSVRORVNTIEZPUiBBIFBB
UlRJQ1VMQVIgUFVSUE9TRSwgVElUTEUgQU5EIE5PTi1JTkZSSU5HRU1FTlQuIElOIE5PIEVWRU5U
Ci0gKiBTSEFMTCBUSEUgQ09QWVJJR0hUIEhPTERFUlMgT1IgQU5ZT05FIERJU1RSSUJVVElORyBU
SEUgU09GVFdBUkUgQkUgTElBQkxFCi0gKiBGT1IgQU5ZIERBTUFHRVMgT1IgT1RIRVIgTElBQklM
SVRZLCBXSEVUSEVSIElOIENPTlRSQUNULCBUT1JUIE9SIE9USEVSV0lTRSwKLSAqIEFSSVNJTkcg
RlJPTSwgT1VUIE9GIE9SIElOIENPTk5FQ1RJT04gV0lUSCBUSEUgU09GVFdBUkUgT1IgVEhFIFVT
RSBPUiBPVEhFUgotICogREVBTElOR1MgSU4gVEhFIFNPRlRXQVJFLgogICovCiAKICNpZm5kZWYg
VGhyZWFkaW5nX2gKICNkZWZpbmUgVGhyZWFkaW5nX2gKIAorLy8gRklYTUU6IE5vdCBzdXJlIHdo
eSB0aGVyZSBhcmUgc28gbWFueSBpbmNsdWRlcyBoZXJlLgorLy8gSXMgdGhpcyBpbnRlbmRlZCB0
byBiZSBjb252ZW5pZW5jZSBzbyB0aGF0IG90aGVycyBkb24ndCBoYXZlIHRvIGluY2x1ZGUgdGhl
IGluZGl2aWR1YWwgZmlsZXM/CisvLyBOb3RoaW5nIGluIHRoaXMgaGVhZGVyIGRlcGVuZHMgb24g
QXNzZXJ0aW9ucywgQXRvbWljcywgTG9ja2VyLCBOb25jb3B5YWJsZSwgVGhyZWFkU2FmZVJlZkNv
dW50ZWQsIG9yIFRocmVhZGluZ1ByaW1pdGl2ZXMuCisKKyNpbmNsdWRlIDxmdW5jdGlvbmFsPgog
I2luY2x1ZGUgPHN0ZGludC5oPgogI2luY2x1ZGUgPHd0Zi9Bc3NlcnRpb25zLmg+CiAjaW5jbHVk
ZSA8d3RmL0F0b21pY3MuaD4KQEAgLTc5LDEzICs1NSwyMCBAQCBXVEZfRVhQT1JUX1BSSVZBVEUg
dm9pZCBpbml0aWFsaXplVGhyZWFkaW5nKCk7CiAKIC8vIFJldHVybnMgMCBpZiB0aHJlYWQgY3Jl
YXRpb24gZmFpbGVkLgogLy8gVGhlIHRocmVhZCBuYW1lIG11c3QgYmUgYSBsaXRlcmFsIHNpbmNl
IG9uIHNvbWUgcGxhdGZvcm1zIGl0J3MgcGFzc2VkIGluIHRvIHRoZSB0aHJlYWQuCi1XVEZfRVhQ
T1JUX1BSSVZBVEUgVGhyZWFkSWRlbnRpZmllciBjcmVhdGVUaHJlYWQoVGhyZWFkRnVuY3Rpb24s
IHZvaWQqLCBjb25zdCBjaGFyKiB0aHJlYWROYW1lKTsKK1dURl9FWFBPUlRfUFJJVkFURSBUaHJl
YWRJZGVudGlmaWVyIGNyZWF0ZVRocmVhZChjb25zdCBjaGFyKiB0aHJlYWROYW1lLCBzdGQ6OmZ1
bmN0aW9uPHZvaWQoKT4pOwogCiAvLyBNYXJrIHRoZSBjdXJyZW50IHRocmVhZCBhcyByZXF1aXJp
bmcgVUkgcmVzcG9uc2l2ZW5lc3MuCiBXVEZfRVhQT1JUX1BSSVZBVEUgdm9pZCBzZXRDdXJyZW50
VGhyZWFkSXNVc2VySW50ZXJhY3RpdmUoKTsKLQogV1RGX0VYUE9SVF9QUklWQVRFIHZvaWQgc2V0
Q3VycmVudFRocmVhZElzVXNlckluaXRpYXRlZCgpOwogCitXVEZfRVhQT1JUX1BSSVZBVEUgVGhy
ZWFkSWRlbnRpZmllciBjdXJyZW50VGhyZWFkKCk7CitXVEZfRVhQT1JUX1BSSVZBVEUgdm9pZCBj
aGFuZ2VUaHJlYWRQcmlvcml0eShUaHJlYWRJZGVudGlmaWVyLCBpbnQpOworV1RGX0VYUE9SVF9Q
UklWQVRFIGludCB3YWl0Rm9yVGhyZWFkQ29tcGxldGlvbihUaHJlYWRJZGVudGlmaWVyKTsKK1dU
Rl9FWFBPUlRfUFJJVkFURSB2b2lkIGRldGFjaFRocmVhZChUaHJlYWRJZGVudGlmaWVyKTsKKwor
Ly8gRGVwcmVjYXRlZCBmdW5jdGlvbi1wb2ludGVyLWJhc2VkIHRocmVhZCBjcmVhdGlvbi4KK1dU
Rl9FWFBPUlRfUFJJVkFURSBUaHJlYWRJZGVudGlmaWVyIGNyZWF0ZVRocmVhZChUaHJlYWRGdW5j
dGlvbiwgdm9pZCosIGNvbnN0IGNoYXIqIHRocmVhZE5hbWUpOworCiAvLyBJbnRlcm5hbCBwbGF0
Zm9ybS1zcGVjaWZpYyBjcmVhdGVUaHJlYWQgaW1wbGVtZW50YXRpb24uCiBUaHJlYWRJZGVudGlm
aWVyIGNyZWF0ZVRocmVhZEludGVybmFsKFRocmVhZEZ1bmN0aW9uLCB2b2lkKiwgY29uc3QgY2hh
ciogdGhyZWFkTmFtZSk7CiAKQEAgLTkzLDExICs3Niw2IEBAIFRocmVhZElkZW50aWZpZXIgY3Jl
YXRlVGhyZWFkSW50ZXJuYWwoVGhyZWFkRnVuY3Rpb24sIHZvaWQqLCBjb25zdCBjaGFyKiB0aHJl
YWROCiAvLyBIZWxwZnVsIGZvciBwbGF0Zm9ybXMgd2hlcmUgdGhlIHRocmVhZCBuYW1lIG11c3Qg
YmUgc2V0IGZyb20gd2l0aGluIHRoZSB0aHJlYWQuCiB2b2lkIGluaXRpYWxpemVDdXJyZW50VGhy
ZWFkSW50ZXJuYWwoY29uc3QgY2hhciogdGhyZWFkTmFtZSk7CiAKLVdURl9FWFBPUlRfUFJJVkFU
RSBUaHJlYWRJZGVudGlmaWVyIGN1cnJlbnRUaHJlYWQoKTsKLVdURl9FWFBPUlRfUFJJVkFURSB2
b2lkIGNoYW5nZVRocmVhZFByaW9yaXR5KFRocmVhZElkZW50aWZpZXIsIGludCk7Ci1XVEZfRVhQ
T1JUX1BSSVZBVEUgaW50IHdhaXRGb3JUaHJlYWRDb21wbGV0aW9uKFRocmVhZElkZW50aWZpZXIp
OwotV1RGX0VYUE9SVF9QUklWQVRFIHZvaWQgZGV0YWNoVGhyZWFkKFRocmVhZElkZW50aWZpZXIp
OwotCiB9IC8vIG5hbWVzcGFjZSBXVEYKIAogdXNpbmcgV1RGOjpUaHJlYWRJZGVudGlmaWVyOwpk
aWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvQ01ha2VMaXN0cy50eHQgYi9Tb3VyY2UvV2ViQ29y
ZS9DTWFrZUxpc3RzLnR4dAppbmRleCAxYjEyODc4YWU5NmI3NGMwNDFjYThmZjYwNDVjOTA3Mzcy
OGQxN2MyLi4yNDEzZmY5M2Y2NDg3Yjg5Yjk0NGYxZGNkOWFmYjE1NGI0YzUyODFiIDEwMDY0NAot
LS0gYS9Tb3VyY2UvV2ViQ29yZS9DTWFrZUxpc3RzLnR4dAorKysgYi9Tb3VyY2UvV2ViQ29yZS9D
TWFrZUxpc3RzLnR4dApAQCAtMTUwNyw3ICsxNTA3LDYgQEAgc2V0KFdlYkNvcmVfU09VUkNFUwog
ICAgIGZpbGVhcGkvRmlsZVJlYWRlci5jcHAKICAgICBmaWxlYXBpL0ZpbGVSZWFkZXJMb2FkZXIu
Y3BwCiAgICAgZmlsZWFwaS9GaWxlUmVhZGVyU3luYy5jcHAKLSAgICBmaWxlYXBpL0ZpbGVUaHJl
YWQuY3BwCiAgICAgZmlsZWFwaS9UaHJlYWRhYmxlQmxvYlJlZ2lzdHJ5LmNwcAogICAgIGZpbGVh
cGkvV2ViS2l0QmxvYkJ1aWxkZXIuY3BwCiAKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL01v
ZHVsZXMvd2ViYXVkaW8vQXN5bmNBdWRpb0RlY29kZXIuaCBiL1NvdXJjZS9XZWJDb3JlL01vZHVs
ZXMvd2ViYXVkaW8vQXN5bmNBdWRpb0RlY29kZXIuaAppbmRleCBmZjA5NmVjYWY5YzQ4OGI2ZjBh
NmU2N2I0NmIzNDRkMGQ2NmE4ZGY1Li5lYmVkNTliNTA2Yzk5YzM1YmMxMGU3ODg1MWU1MjEzNGJl
NjA0YTdjIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9Nb2R1bGVzL3dlYmF1ZGlvL0FzeW5j
QXVkaW9EZWNvZGVyLmgKKysrIGIvU291cmNlL1dlYkNvcmUvTW9kdWxlcy93ZWJhdWRpby9Bc3lu
Y0F1ZGlvRGVjb2Rlci5oCkBAIC04NSw3ICs4NSw3IEBAIHByaXZhdGU6CiAKICAgICBXVEY6OlRo
cmVhZElkZW50aWZpZXIgbV90aHJlYWRJRDsKICAgICBNdXRleCBtX3RocmVhZENyZWF0aW9uTXV0
ZXg7Ci0gICAgTWVzc2FnZVF1ZXVlPERlY29kaW5nVGFzaz4gbV9xdWV1ZTsKKyAgICBNZXNzYWdl
UXVldWU8c3RkOjp1bmlxdWVfcHRyPERlY29kaW5nVGFzaz4+IG1fcXVldWU7CiB9OwogCiB9IC8v
IG5hbWVzcGFjZSBXZWJDb3JlCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9Nb2R1bGVzL3dl
YmRhdGFiYXNlL0RhdGFiYXNlVGhyZWFkLmggYi9Tb3VyY2UvV2ViQ29yZS9Nb2R1bGVzL3dlYmRh
dGFiYXNlL0RhdGFiYXNlVGhyZWFkLmgKaW5kZXggN2E4YTZlYjA4ZTA1YzlhNmNmOGZmYzNhNWYw
MGNjZjE1MTQ5NzVlZS4uZDYzZTZkM2Q1NzYyYzBkNTE5YmM4NjkyZDM0NzE2ODg0ZWQxMGQ0NyAx
MDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvTW9kdWxlcy93ZWJkYXRhYmFzZS9EYXRhYmFzZVRo
cmVhZC5oCisrKyBiL1NvdXJjZS9XZWJDb3JlL01vZHVsZXMvd2ViZGF0YWJhc2UvRGF0YWJhc2VU
aHJlYWQuaApAQCAtODMsOSArODMsOSBAQCBwcml2YXRlOgogICAgIFRocmVhZElkZW50aWZpZXIg
bV90aHJlYWRJRDsKICAgICBSZWZQdHI8RGF0YWJhc2VUaHJlYWQ+IG1fc2VsZlJlZjsKIAotICAg
IE1lc3NhZ2VRdWV1ZTxEYXRhYmFzZVRhc2s+IG1fcXVldWU7CisgICAgTWVzc2FnZVF1ZXVlPHN0
ZDo6dW5pcXVlX3B0cjxEYXRhYmFzZVRhc2s+PiBtX3F1ZXVlOwogI2lmIFBMQVRGT1JNKElPUykK
LSAgICBNZXNzYWdlUXVldWU8RGF0YWJhc2VUYXNrPiBtX3BhdXNlZFF1ZXVlOworICAgIE1lc3Nh
Z2VRdWV1ZTxzdGQ6OnVuaXF1ZV9wdHI8RGF0YWJhc2VUYXNrPj4gbV9wYXVzZWRRdWV1ZTsKICAg
ICBNdXRleCBtX3BhdXNlZE11dGV4OwogICAgIHZvbGF0aWxlIGJvb2wgbV9wYXVzZWQ7CiAjZW5k
aWYKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL1dlYkNvcmUudmN4cHJvai9XZWJDb3JlLnZj
eHByb2ogYi9Tb3VyY2UvV2ViQ29yZS9XZWJDb3JlLnZjeHByb2ovV2ViQ29yZS52Y3hwcm9qCmlu
ZGV4IGRiYzE2ZGQwNDM0YjMyMzIyMDE4ZTc1MzFhZmQwN2Q5YzQyNGI2ZWYuLjFjYzM2YmI4NGY2
ZTk3NDFiYjAyOTJjNDFlMDc0ODA0ZGI5NGU2ZWEgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3Jl
L1dlYkNvcmUudmN4cHJvai9XZWJDb3JlLnZjeHByb2oKKysrIGIvU291cmNlL1dlYkNvcmUvV2Vi
Q29yZS52Y3hwcm9qL1dlYkNvcmUudmN4cHJvagpAQCAtMTQ5NjIsNyArMTQ5NjIsNiBAQAogICAg
IDxDbENvbXBpbGUgSW5jbHVkZT0iLi5cZmlsZWFwaVxGaWxlUmVhZGVyLmNwcCIgLz4KICAgICA8
Q2xDb21waWxlIEluY2x1ZGU9Ii4uXGZpbGVhcGlcRmlsZVJlYWRlckxvYWRlci5jcHAiIC8+CiAg
ICAgPENsQ29tcGlsZSBJbmNsdWRlPSIuLlxmaWxlYXBpXEZpbGVSZWFkZXJTeW5jLmNwcCIgLz4K
LSAgICA8Q2xDb21waWxlIEluY2x1ZGU9Ii4uXGZpbGVhcGlcRmlsZVRocmVhZC5jcHAiIC8+CiAg
ICAgPENsQ29tcGlsZSBJbmNsdWRlPSIuLlxodG1sXEZvcm1Bc3NvY2lhdGVkRWxlbWVudC5jcHAi
IC8+CiAgICAgPENsQ29tcGlsZSBJbmNsdWRlPSIuLlxodG1sXEZvcm1Db250cm9sbGVyLmNwcCIg
Lz4KICAgICA8Q2xDb21waWxlIEluY2x1ZGU9Ii4uXGh0bWxcRm9ybURhdGFMaXN0LmNwcCIgLz4K
QEAgLTIwNzI4LDcgKzIwNzI3LDYgQEAKICAgICA8Q2xJbmNsdWRlIEluY2x1ZGU9Ii4uXGZpbGVh
cGlcRmlsZVJlYWRlckxvYWRlci5oIiAvPgogICAgIDxDbEluY2x1ZGUgSW5jbHVkZT0iLi5cZmls
ZWFwaVxGaWxlUmVhZGVyTG9hZGVyQ2xpZW50LmgiIC8+CiAgICAgPENsSW5jbHVkZSBJbmNsdWRl
PSIuLlxmaWxlYXBpXEZpbGVSZWFkZXJTeW5jLmgiIC8+Ci0gICAgPENsSW5jbHVkZSBJbmNsdWRl
PSIuLlxmaWxlYXBpXEZpbGVUaHJlYWQuaCIgLz4KICAgICA8Q2xJbmNsdWRlIEluY2x1ZGU9Ii4u
XGh0bWxcRm9ybUFzc29jaWF0ZWRFbGVtZW50LmgiIC8+CiAgICAgPENsSW5jbHVkZSBJbmNsdWRl
PSIuLlxodG1sXEZvcm1Db250cm9sbGVyLmgiIC8+CiAgICAgPENsSW5jbHVkZSBJbmNsdWRlPSIu
LlxodG1sXEZvcm1EYXRhTGlzdC5oIiAvPgpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvV2Vi
Q29yZS52Y3hwcm9qL1dlYkNvcmUudmN4cHJvai5maWx0ZXJzIGIvU291cmNlL1dlYkNvcmUvV2Vi
Q29yZS52Y3hwcm9qL1dlYkNvcmUudmN4cHJvai5maWx0ZXJzCmluZGV4IGM1ZjY5YmU2ZTAyOGE0
NGMwM2M5MTA5ZDk4YTA0MzA2ZjQ2NjA1M2YuLjA2MDYwN2M1MGE1ZDczOTQzZjc0MDM1OWEzZmJk
MGE4N2ZjNWY5N2UgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL1dlYkNvcmUudmN4cHJvai9X
ZWJDb3JlLnZjeHByb2ouZmlsdGVycworKysgYi9Tb3VyY2UvV2ViQ29yZS9XZWJDb3JlLnZjeHBy
b2ovV2ViQ29yZS52Y3hwcm9qLmZpbHRlcnMKQEAgLTM3MjAsOSArMzcyMCw2IEBACiAgICAgPENs
Q29tcGlsZSBJbmNsdWRlPSIuLlxmaWxlYXBpXEZpbGVSZWFkZXJTeW5jLmNwcCI+CiAgICAgICA8
RmlsdGVyPmh0bWw8L0ZpbHRlcj4KICAgICA8L0NsQ29tcGlsZT4KLSAgICA8Q2xDb21waWxlIElu
Y2x1ZGU9Ii4uXGZpbGVhcGlcRmlsZVRocmVhZC5jcHAiPgotICAgICAgPEZpbHRlcj5odG1sPC9G
aWx0ZXI+Ci0gICAgPC9DbENvbXBpbGU+CiAgICAgPENsQ29tcGlsZSBJbmNsdWRlPSIuLlxodG1s
XEZvcm1Bc3NvY2lhdGVkRWxlbWVudC5jcHAiPgogICAgICAgPEZpbHRlcj5odG1sPC9GaWx0ZXI+
CiAgICAgPC9DbENvbXBpbGU+CkBAIC0xMDg3OCw5ICsxMDg3NSw2IEBACiAgICAgPENsSW5jbHVk
ZSBJbmNsdWRlPSIuLlxmaWxlYXBpXEZpbGVSZWFkZXJTeW5jLmgiPgogICAgICAgPEZpbHRlcj5o
dG1sPC9GaWx0ZXI+CiAgICAgPC9DbEluY2x1ZGU+Ci0gICAgPENsSW5jbHVkZSBJbmNsdWRlPSIu
LlxmaWxlYXBpXEZpbGVUaHJlYWQuaCI+Ci0gICAgICA8RmlsdGVyPmh0bWw8L0ZpbHRlcj4KLSAg
ICA8L0NsSW5jbHVkZT4KICAgICA8Q2xJbmNsdWRlIEluY2x1ZGU9Ii4uXGh0bWxcRm9ybUFzc29j
aWF0ZWRFbGVtZW50LmgiPgogICAgICAgPEZpbHRlcj5odG1sPC9GaWx0ZXI+CiAgICAgPC9DbElu
Y2x1ZGU+CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9XZWJDb3JlLnhjb2RlcHJvai9wcm9q
ZWN0LnBieHByb2ogYi9Tb3VyY2UvV2ViQ29yZS9XZWJDb3JlLnhjb2RlcHJvai9wcm9qZWN0LnBi
eHByb2oKaW5kZXggNjIzMTc4OGYwYzU3NzVjODU4ODllZDhkZWEyYjAyY2FjMjdlMmIzNy4uMTFi
YTY1ZTllZDFkMGRmYjI1MjcyMzMxODYxMTdlNmM1ZjdjNTA4NyAxMDA2NDQKLS0tIGEvU291cmNl
L1dlYkNvcmUvV2ViQ29yZS54Y29kZXByb2ovcHJvamVjdC5wYnhwcm9qCisrKyBiL1NvdXJjZS9X
ZWJDb3JlL1dlYkNvcmUueGNvZGVwcm9qL3Byb2plY3QucGJ4cHJvagpAQCAtMzQ3OSw4ICszNDc5
LDYgQEAKIAkJOTc2RDZDODYxMjJCOEEzRDAwMUZEMUY3IC8qIEZpbGVMaXN0LmggaW4gSGVhZGVy
cyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSA5NzZENkM2NzEyMkI4QTNEMDAx
RkQxRjcgLyogRmlsZUxpc3QuaCAqLzsgfTsKIAkJOTc2RDZDODgxMjJCOEEzRDAwMUZEMUY3IC8q
IEZpbGVSZWFkZXIuY3BwIGluIFNvdXJjZXMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxl
UmVmID0gOTc2RDZDNjkxMjJCOEEzRDAwMUZEMUY3IC8qIEZpbGVSZWFkZXIuY3BwICovOyB9Owog
CQk5NzZENkM4OTEyMkI4QTNEMDAxRkQxRjcgLyogRmlsZVJlYWRlci5oIGluIEhlYWRlcnMgKi8g
PSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gOTc2RDZDNkExMjJCOEEzRDAwMUZEMUY3
IC8qIEZpbGVSZWFkZXIuaCAqLzsgfTsKLQkJOTc2RDZDOEQxMjJCOEEzRDAwMUZEMUY3IC8qIEZp
bGVUaHJlYWQuY3BwIGluIFNvdXJjZXMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVm
ID0gOTc2RDZDNkUxMjJCOEEzRDAwMUZEMUY3IC8qIEZpbGVUaHJlYWQuY3BwICovOyB9OwotCQk5
NzZENkM4RTEyMkI4QTNEMDAxRkQxRjcgLyogRmlsZVRocmVhZC5oIGluIEhlYWRlcnMgKi8gPSB7
aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gOTc2RDZDNkYxMjJCOEEzRDAwMUZEMUY3IC8q
IEZpbGVUaHJlYWQuaCAqLzsgfTsKIAkJOTc2RDZDOTQxMjJCOEEzRDAwMUZEMUY3IC8qIFRocmVh
ZGFibGVCbG9iUmVnaXN0cnkuY3BwIGluIFNvdXJjZXMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxl
OyBmaWxlUmVmID0gOTc2RDZDNzUxMjJCOEEzRDAwMUZEMUY3IC8qIFRocmVhZGFibGVCbG9iUmVn
aXN0cnkuY3BwICovOyB9OwogCQk5NzZENkM5NTEyMkI4QTNEMDAxRkQxRjcgLyogVGhyZWFkYWJs
ZUJsb2JSZWdpc3RyeS5oIGluIEhlYWRlcnMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxl
UmVmID0gOTc2RDZDNzYxMjJCOEEzRDAwMUZEMUY3IC8qIFRocmVhZGFibGVCbG9iUmVnaXN0cnku
aCAqLzsgfTsKIAkJOTc2RjM2RUExNDY4NjIyNTAwNUU5M0I0IC8qIFNlY3VyaXR5Q29udGV4dC5j
cHAgaW4gU291cmNlcyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSA5NzZGMzZF
ODE0Njg2MjI1MDA1RTkzQjQgLyogU2VjdXJpdHlDb250ZXh0LmNwcCAqLzsgfTsKQEAgLTEwNjQ5
LDggKzEwNjQ3LDYgQEAKIAkJOTc2RDZDNjcxMjJCOEEzRDAwMUZEMUY3IC8qIEZpbGVMaXN0Lmgg
Ki8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3du
RmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsgbmFtZSA9IEZpbGVMaXN0Lmg7IHBhdGggPSBmaWxl
YXBpL0ZpbGVMaXN0Lmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CiAJCTk3NkQ2QzY5MTIy
QjhBM0QwMDFGRDFGNyAvKiBGaWxlUmVhZGVyLmNwcCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJl
bmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuY3Bw
LmNwcDsgbmFtZSA9IEZpbGVSZWFkZXIuY3BwOyBwYXRoID0gZmlsZWFwaS9GaWxlUmVhZGVyLmNw
cDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKIAkJOTc2RDZDNkExMjJCOEEzRDAwMUZEMUY3
IC8qIEZpbGVSZWFkZXIuaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2Rp
bmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBuYW1lID0gRmlsZVJl
YWRlci5oOyBwYXRoID0gZmlsZWFwaS9GaWxlUmVhZGVyLmg7IHNvdXJjZVRyZWUgPSAiPGdyb3Vw
PiI7IH07Ci0JCTk3NkQ2QzZFMTIyQjhBM0QwMDFGRDFGNyAvKiBGaWxlVGhyZWFkLmNwcCAqLyA9
IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxl
VHlwZSA9IHNvdXJjZWNvZGUuY3BwLmNwcDsgbmFtZSA9IEZpbGVUaHJlYWQuY3BwOyBwYXRoID0g
ZmlsZWFwaS9GaWxlVGhyZWFkLmNwcDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKLQkJOTc2
RDZDNkYxMjJCOEEzRDAwMUZEMUY3IC8qIEZpbGVUaHJlYWQuaCAqLyA9IHtpc2EgPSBQQlhGaWxl
UmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNv
ZGUuYy5oOyBuYW1lID0gRmlsZVRocmVhZC5oOyBwYXRoID0gZmlsZWFwaS9GaWxlVGhyZWFkLmg7
IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CiAJCTk3NkQ2Qzc1MTIyQjhBM0QwMDFGRDFGNyAv
KiBUaHJlYWRhYmxlQmxvYlJlZ2lzdHJ5LmNwcCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNl
OyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuY3BwLmNw
cDsgbmFtZSA9IFRocmVhZGFibGVCbG9iUmVnaXN0cnkuY3BwOyBwYXRoID0gZmlsZWFwaS9UaHJl
YWRhYmxlQmxvYlJlZ2lzdHJ5LmNwcDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKIAkJOTc2
RDZDNzYxMjJCOEEzRDAwMUZEMUY3IC8qIFRocmVhZGFibGVCbG9iUmVnaXN0cnkuaCAqLyA9IHtp
c2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlw
ZSA9IHNvdXJjZWNvZGUuYy5oOyBuYW1lID0gVGhyZWFkYWJsZUJsb2JSZWdpc3RyeS5oOyBwYXRo
ID0gZmlsZWFwaS9UaHJlYWRhYmxlQmxvYlJlZ2lzdHJ5Lmg7IHNvdXJjZVRyZWUgPSAiPGdyb3Vw
PiI7IH07CiAJCTk3NkYzNkU4MTQ2ODYyMjUwMDVFOTNCNCAvKiBTZWN1cml0eUNvbnRleHQuY3Bw
ICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93
bkZpbGVUeXBlID0gc291cmNlY29kZS5jcHAuY3BwOyBwYXRoID0gU2VjdXJpdHlDb250ZXh0LmNw
cDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKQEAgLTE4MjQxLDggKzE4MjM3LDYgQEAKIAkJ
CQkyRURGMzY5QTEyMkM5NEI0MDAyRjdENEUgLyogRmlsZVJlYWRlclN5bmMuY3BwICovLAogCQkJ
CTJFREYzNjlCMTIyQzk0QjQwMDJGN0Q0RSAvKiBGaWxlUmVhZGVyU3luYy5oICovLAogCQkJCUUx
QUIxRUJEMTRFOUUzQTgwMDQ0OUUxMyAvKiBGaWxlUmVhZGVyU3luYy5pZGwgKi8sCi0JCQkJOTc2
RDZDNkUxMjJCOEEzRDAwMUZEMUY3IC8qIEZpbGVUaHJlYWQuY3BwICovLAotCQkJCTk3NkQ2QzZG
MTIyQjhBM0QwMDFGRDFGNyAvKiBGaWxlVGhyZWFkLmggKi8sCiAJCQkJOTc2RDZDNzUxMjJCOEEz
RDAwMUZEMUY3IC8qIFRocmVhZGFibGVCbG9iUmVnaXN0cnkuY3BwICovLAogCQkJCTk3NkQ2Qzc2
MTIyQjhBM0QwMDFGRDFGNyAvKiBUaHJlYWRhYmxlQmxvYlJlZ2lzdHJ5LmggKi8sCiAJCQkJOTc2
RDZDNUMxMjJCOEEzRDAwMUZEMUY3IC8qIFdlYktpdEJsb2JCdWlsZGVyLmNwcCAqLywKQEAgLTI0
MzM4LDcgKzI0MzMyLDYgQEAKIAkJCQkyRUYxQkZGOTEyMUNCMENFMDBDMjc2MjcgLyogRmlsZVN0
cmVhbUNsaWVudC5oIGluIEhlYWRlcnMgKi8sCiAJCQkJNTE0QjNGNzMwQzcyMjA0NzAwMDUzMERG
IC8qIEZpbGVTeXN0ZW0uaCBpbiBIZWFkZXJzICovLAogCQkJCTI2QzE3QTNFMTQ5MUQyRDQwMEQx
MkJBMiAvKiBGaWxlU3lzdGVtSU9TLmggaW4gSGVhZGVycyAqLywKLQkJCQk5NzZENkM4RTEyMkI4
QTNEMDAxRkQxRjcgLyogRmlsZVRocmVhZC5oIGluIEhlYWRlcnMgKi8sCiAJCQkJQkM1RUI2OUYw
RTgxREFFQjAwQjI1OTY1IC8qIEZpbGxMYXllci5oIGluIEhlYWRlcnMgKi8sCiAJCQkJODQ1RTcy
RjgwRkQyNjFFRTAwQTg3RDc5IC8qIEZpbHRlci5oIGluIEhlYWRlcnMgKi8sCiAJCQkJMDhDOTI1
MUEwRkNDN0M0QTAwNDgwREVDIC8qIEZpbHRlckVmZmVjdC5oIGluIEhlYWRlcnMgKi8sCkBAIC0y
NzgzNyw3ICsyNzgzMCw2IEBACiAJCQkJMjZDMTdBM0YxNDkxRDJENDAwRDEyQkEyIC8qIEZpbGVT
eXN0ZW1JT1MubW0gaW4gU291cmNlcyAqLywKIAkJCQk1MTRCM0Y3NjBDNzIyMDU1MDAwNTMwREYg
LyogRmlsZVN5c3RlbU1hYy5tbSBpbiBTb3VyY2VzICovLAogCQkJCTUxNjAzMDBCMENDNDI1MTIw
MEM4QUMyNSAvKiBGaWxlU3lzdGVtUE9TSVguY3BwIGluIFNvdXJjZXMgKi8sCi0JCQkJOTc2RDZD
OEQxMjJCOEEzRDAwMUZEMUY3IC8qIEZpbGVUaHJlYWQuY3BwIGluIFNvdXJjZXMgKi8sCiAJCQkJ
QkM1RUI2OUUwRTgxREFFQjAwQjI1OTY1IC8qIEZpbGxMYXllci5jcHAgaW4gU291cmNlcyAqLywK
IAkJCQkwOEM5MjUxOTBGQ0M3QzRBMDA0ODBERUMgLyogRmlsdGVyRWZmZWN0LmNwcCBpbiBTb3Vy
Y2VzICovLAogCQkJCTMxMzEzRjY1MTQ0M0IzNUYwMDZFMkE5MCAvKiBGaWx0ZXJFZmZlY3RSZW5k
ZXJlci5jcHAgaW4gU291cmNlcyAqLywKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL2JpbmRp
bmdzL2dlbmVyaWMvQWN0aXZlRE9NQ2FsbGJhY2suY3BwIGIvU291cmNlL1dlYkNvcmUvYmluZGlu
Z3MvZ2VuZXJpYy9BY3RpdmVET01DYWxsYmFjay5jcHAKaW5kZXggODFhMTBjMTRiMmRiNWYxNzFk
YzA2ODhjODA2MWU3M2QwMWZhNjljZi4uNWIxNzQxZTEzMTgzYjBmNmZlYTgxMjZjYzI5MWNkZmY0
OTIwOWYyNyAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvYmluZGluZ3MvZ2VuZXJpYy9BY3Rp
dmVET01DYWxsYmFjay5jcHAKKysrIGIvU291cmNlL1dlYkNvcmUvYmluZGluZ3MvZ2VuZXJpYy9B
Y3RpdmVET01DYWxsYmFjay5jcHAKQEAgLTMxLDkgKzMxLDcgQEAKICNpbmNsdWRlICJjb25maWcu
aCIKICNpbmNsdWRlICJBY3RpdmVET01DYWxsYmFjay5oIgogCi0jaW5jbHVkZSAiQWN0aXZlRE9N
T2JqZWN0LmgiCiAjaW5jbHVkZSAiU2NyaXB0RXhlY3V0aW9uQ29udGV4dC5oIgotI2luY2x1ZGUg
Ildvcmtlckdsb2JhbFNjb3BlLmgiCiAKIG5hbWVzcGFjZSBXZWJDb3JlIHsKIApkaWZmIC0tZ2l0
IGEvU291cmNlL1dlYkNvcmUvZG9tL0FjdGl2ZURPTU9iamVjdC5jcHAgYi9Tb3VyY2UvV2ViQ29y
ZS9kb20vQWN0aXZlRE9NT2JqZWN0LmNwcAppbmRleCAyOTlhMWEzMDBlNDY0YTNhNmI1OWVmNjE4
MTQwNGI2YWE4YjFlZWRiLi5jMzI2NzFiMTAxODBmODQwZmUxMmEzYWYwNzVjMTFmOTI5ZTgxMmQ1
IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9kb20vQWN0aXZlRE9NT2JqZWN0LmNwcAorKysg
Yi9Tb3VyY2UvV2ViQ29yZS9kb20vQWN0aXZlRE9NT2JqZWN0LmNwcApAQCAtMjgsOCArMjgsNiBA
QAogI2luY2x1ZGUgIkFjdGl2ZURPTU9iamVjdC5oIgogCiAjaW5jbHVkZSAiU2NyaXB0RXhlY3V0
aW9uQ29udGV4dC5oIgotI2luY2x1ZGUgIldvcmtlckdsb2JhbFNjb3BlLmgiCi0jaW5jbHVkZSAi
V29ya2VyVGhyZWFkLmgiCiAKIG5hbWVzcGFjZSBXZWJDb3JlIHsKIApkaWZmIC0tZ2l0IGEvU291
cmNlL1dlYkNvcmUvZG9tL2RlZmF1bHQvUGxhdGZvcm1NZXNzYWdlUG9ydENoYW5uZWwuaCBiL1Nv
dXJjZS9XZWJDb3JlL2RvbS9kZWZhdWx0L1BsYXRmb3JtTWVzc2FnZVBvcnRDaGFubmVsLmgKaW5k
ZXggOTU0ZWI4OGQ1MDVhM2M4ZmVjZDBiYjNlM2EwMTk1NjlhNjFkOThiMS4uODQ3YWU3YzIyMGI0
NjNiNjcwMmRhMGI0Njc5YTViOTIyMTk0OWQ2MCAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUv
ZG9tL2RlZmF1bHQvUGxhdGZvcm1NZXNzYWdlUG9ydENoYW5uZWwuaAorKysgYi9Tb3VyY2UvV2Vi
Q29yZS9kb20vZGVmYXVsdC9QbGF0Zm9ybU1lc3NhZ2VQb3J0Q2hhbm5lbC5oCkBAIC04Miw3ICs4
Miw3IEBAIG5hbWVzcGFjZSBXZWJDb3JlIHsKICAgICAgICAgcHJpdmF0ZToKICAgICAgICAgICAg
IE1lc3NhZ2VQb3J0UXVldWUoKSB7IH0KIAotICAgICAgICAgICAgTWVzc2FnZVF1ZXVlPFBsYXRm
b3JtTWVzc2FnZVBvcnRDaGFubmVsOjpFdmVudERhdGE+IG1fcXVldWU7CisgICAgICAgICAgICBN
ZXNzYWdlUXVldWU8c3RkOjp1bmlxdWVfcHRyPFBsYXRmb3JtTWVzc2FnZVBvcnRDaGFubmVsOjpF
dmVudERhdGE+PiBtX3F1ZXVlOwogICAgICAgICB9OwogCiAgICAgICAgIH5QbGF0Zm9ybU1lc3Nh
Z2VQb3J0Q2hhbm5lbCgpOwpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvZmlsZWFwaS9Bc3lu
Y0ZpbGVTdHJlYW0uY3BwIGIvU291cmNlL1dlYkNvcmUvZmlsZWFwaS9Bc3luY0ZpbGVTdHJlYW0u
Y3BwCmluZGV4IDVhMzkxZjg3Y2VlMTRjZTY3MTg4M2I0MDMxMDcyMjIwYTI0OTYxN2EuLmVhNzM2
OTliOWYwZjczMGZlODBmYmNlNTQxMzIyYzkzMWJlMDRlZGMgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9X
ZWJDb3JlL2ZpbGVhcGkvQXN5bmNGaWxlU3RyZWFtLmNwcAorKysgYi9Tb3VyY2UvV2ViQ29yZS9m
aWxlYXBpL0FzeW5jRmlsZVN0cmVhbS5jcHAKQEAgLTEsNiArMSw2IEBACiAvKgogICogQ29weXJp
Z2h0IChDKSAyMDEwIEdvb2dsZSBJbmMuICBBbGwgcmlnaHRzIHJlc2VydmVkLgotICogQ29weXJp
Z2h0IChDKSAyMDEyIEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqIENvcHlyaWdo
dCAoQykgMjAxMiwgMjAxNCBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCiAgKgogICog
UmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBv
ciB3aXRob3V0CiAgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0
aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMgYXJlCkBAIC0zMCwxNjIgKzMwLDE4MyBAQAogICovCiAK
ICNpbmNsdWRlICJjb25maWcuaCIKLQogI2luY2x1ZGUgIkFzeW5jRmlsZVN0cmVhbS5oIgogCi0j
aW5jbHVkZSAiQmxvYi5oIgogI2luY2x1ZGUgIkZpbGVTdHJlYW0uaCIKICNpbmNsdWRlICJGaWxl
U3RyZWFtQ2xpZW50LmgiCi0jaW5jbHVkZSAiRmlsZVRocmVhZC5oIgorI2luY2x1ZGUgIlVSTC5o
IgorI2luY2x1ZGUgPHd0Zi9BdXRvZHJhaW5lZFBvb2wuaD4KICNpbmNsdWRlIDx3dGYvTWFpblRo
cmVhZC5oPgotI2luY2x1ZGUgPHd0Zi90ZXh0L1dURlN0cmluZy5oPgotCi0jaWYgUExBVEZPUk0o
SU9TKQotI2luY2x1ZGUgIldlYkNvcmVUaHJlYWQuaCIKLSNlbmRpZgorI2luY2x1ZGUgPHd0Zi9N
ZXNzYWdlUXVldWUuaD4KKyNpbmNsdWRlIDx3dGYvTmV2ZXJEZXN0cm95ZWQuaD4KIAogbmFtZXNw
YWNlIFdlYkNvcmUgewogCi1zdGF0aWMgUGFzc1JlZlB0cjxGaWxlVGhyZWFkPiBjcmVhdGVGaWxl
VGhyZWFkKCkKLXsKLSAgICBSZWZQdHI8RmlsZVRocmVhZD4gdGhyZWFkID0gRmlsZVRocmVhZDo6
Y3JlYXRlKCk7Ci0gICAgaWYgKCF0aHJlYWQtPnN0YXJ0KCkpCi0gICAgICAgIHJldHVybiAwOwot
ICAgIHJldHVybiB0aHJlYWQucmVsZWFzZSgpOwotfQotCi1zdGF0aWMgRmlsZVRocmVhZCogZmls
ZVRocmVhZCgpCitzdGF0aWMgdm9pZCBjYWxsT25GaWxlVGhyZWFkKHN0ZDo6ZnVuY3Rpb248dm9p
ZCgpPiYmIGZ1bmN0aW9uKQogewogICAgIEFTU0VSVChpc01haW5UaHJlYWQoKSk7Ci0gICAgc3Rh
dGljIEZpbGVUaHJlYWQqIHRocmVhZCA9IGNyZWF0ZUZpbGVUaHJlYWQoKS5sZWFrUmVmKCk7Ci0g
ICAgcmV0dXJuIHRocmVhZDsKKworICAgIHR5cGVkZWYgTWVzc2FnZVF1ZXVlPHN0ZDo6ZnVuY3Rp
b248dm9pZCgpPj4gRnVuY3Rpb25RdWV1ZTsKKyAgICBzdGF0aWMgTmV2ZXJEZXN0cm95ZWQ8RnVu
Y3Rpb25RdWV1ZT4gcXVldWU7CisKKyAgICBzdGF0aWMgVGhyZWFkSWRlbnRpZmllciBmaWxlVGhy
ZWFkID0gY3JlYXRlVGhyZWFkKCJXZWJDb3JlOiBGaWxlIiwgW10geworICAgICAgICBmb3IgKDs7
KSB7CisgICAgICAgICAgICBBdXRvZHJhaW5lZFBvb2wgcG9vbDsKKyAgICAgICAgICAgIHF1ZXVl
LmdldCgpLndhaXRGb3JNZXNzYWdlKCkoKTsKKyAgICAgICAgfQorICAgIH0pOworICAgIEFTU0VS
VF9VTlVTRUQoZmlsZVRocmVhZCwgZmlsZVRocmVhZCk7CisKKyAgICBxdWV1ZS5nZXQoKS5hcHBl
bmQoV1RGOjptb3ZlKGZ1bmN0aW9uKSk7CiB9CiAKLWlubGluZSBBc3luY0ZpbGVTdHJlYW06OkFz
eW5jRmlsZVN0cmVhbShGaWxlU3RyZWFtQ2xpZW50KiBjbGllbnQpCi0gICAgOiBtX3N0cmVhbShG
aWxlU3RyZWFtOjpjcmVhdGUoKSkKK2lubGluZSBBc3luY0ZpbGVTdHJlYW06OkFzeW5jRmlsZVN0
cmVhbShGaWxlU3RyZWFtQ2xpZW50JiBjbGllbnQpCisgICAgOiBtX3N0cmVhbShSZWZQdHI8Rmls
ZVN0cmVhbT4oRmlsZVN0cmVhbTo6Y3JlYXRlKCkpLnJlbGVhc2VOb25OdWxsKCkpCiAgICAgLCBt
X2NsaWVudChjbGllbnQpCiB7CiAgICAgQVNTRVJUKGlzTWFpblRocmVhZCgpKTsKIH0KIAotUGFz
c1JlZlB0cjxBc3luY0ZpbGVTdHJlYW0+IEFzeW5jRmlsZVN0cmVhbTo6Y3JlYXRlKEZpbGVTdHJl
YW1DbGllbnQqIGNsaWVudCkKK2lubGluZSB2b2lkIEFzeW5jRmlsZVN0cmVhbTo6c3RhcnQoKQog
ewotICAgIFJlZlB0cjxBc3luY0ZpbGVTdHJlYW0+IHByb3h5ID0gYWRvcHRSZWYobmV3IEFzeW5j
RmlsZVN0cmVhbShjbGllbnQpKTsKKyAgICBBU1NFUlQoaXNNYWluVGhyZWFkKCkpOwogCiAgICAg
Ly8gSG9sZCBhIHJlZmVyZW5jZSBzbyB0aGF0IHRoZSBpbnN0YW5jZSB3aWxsIG5vdCBnZXQgZGVs
ZXRlZCB3aGlsZSB0aGVyZSBhcmUgdGFza3Mgb24gdGhlIGZpbGUgdGhyZWFkLgotICAgIC8vIFRo
aXMgaXMgYmFsYW5jZWQgYnkgdGhlIGRlcmVmIGluIGRlcmVmUHJveHlPbkNvbnRleHQgYmVsb3cu
Ci0gICAgcHJveHktPnJlZigpOwotCi0gICAgQXN5bmNGaWxlU3RyZWFtKiBwcm94eVB0ciA9IHBy
b3h5LmdldCgpOwotICAgIGZpbGVUaHJlYWQoKS0+cG9zdFRhc2soeyBwcm94eVB0ciwgWz1dIHsK
LSAgICAgICAgLy8gRklYTUU6IEl0IGlzIG5vdCBjb3JyZWN0IHRvIGNoZWNrIG1fY2xpZW50IGZy
b20gYSBzZWNvbmRhcnkgdGhyZWFkIC0gc3RvcCgpIGNvdWxkIGJlIHJhY2luZyB3aXRoIHRoaXMg
Y2hlY2suCi0gICAgICAgIGlmICghcHJveHlQdHItPmNsaWVudCgpKQotICAgICAgICAgICAgcmV0
dXJuOworICAgIC8vIFRoaXMgaXMgYmFsYW5jZWQgYnkgdGhlIGRlcmVmIGluIEFzeW5jRmlsZVN0
cmVhbTo6c3RvcCBiZWxvdywgYW5kIHRoYXQgZGVyZWYgaXMgZ3VhcmFudGVlZCB0byBydW4gYWZ0
ZXIKKyAgICAvLyB0aGUgcmVzdCBvZiB0aGUgY29kZSBmcm9tIHRoaXMgZnVuY3Rpb24uCisgICAg
cmVmKCk7CiAKLSAgICAgICAgcHJveHlQdHItPm1fc3RyZWFtLT5zdGFydCgpOwotICAgICAgICBj
YWxsT25NYWluVGhyZWFkKFtwcm94eVB0cl0gewotICAgICAgICAgICAgaWYgKHByb3h5UHRyLT5j
bGllbnQoKSkKLSAgICAgICAgICAgICAgICBwcm94eVB0ci0+Y2xpZW50KCktPmRpZFN0YXJ0KCk7
CisgICAgY2FsbE9uRmlsZVRocmVhZChbdGhpc10geworICAgICAgICBtX3N0cmVhbS0+c3RhcnQo
KTsKKyAgICAgICAgY2FsbE9uTWFpblRocmVhZChbdGhpc10geworICAgICAgICAgICAgaWYgKG1f
c3RvcHBlZCkKKyAgICAgICAgICAgICAgICByZXR1cm47CisgICAgICAgICAgICBtX2NsaWVudC5k
aWRTdGFydCgpOwogICAgICAgICB9KTsKLSAgICB9IH0pOworICAgIH0pOworfQogCi0gICAgcmV0
dXJuIHByb3h5LnJlbGVhc2UoKTsKK1Bhc3NSZWY8QXN5bmNGaWxlU3RyZWFtPiBBc3luY0ZpbGVT
dHJlYW06OmNyZWF0ZShGaWxlU3RyZWFtQ2xpZW50JiBjbGllbnQpCit7CisgICAgUGFzc1JlZjxB
c3luY0ZpbGVTdHJlYW0+IHJlc3VsdCA9IGFkb3B0UmVmKCpuZXcgQXN5bmNGaWxlU3RyZWFtKGNs
aWVudCkpOworICAgIHJlc3VsdC5nZXQoKS5zdGFydCgpOworICAgIHJldHVybiByZXN1bHQ7CiB9
CiAKIEFzeW5jRmlsZVN0cmVhbTo6fkFzeW5jRmlsZVN0cmVhbSgpCiB7CisgICAgQVNTRVJUKGlz
TWFpblRocmVhZCgpKTsKKyAgICBBU1NFUlQobV9zdG9wcGVkKTsKIH0KIAogdm9pZCBBc3luY0Zp
bGVTdHJlYW06OnN0b3AoKQogewotICAgIC8vIENsZWFyIHRoZSBjbGllbnQgc28gdGhhdCB3ZSB3
b24ndCBiZSBpbnZva2luZyBjYWxsYmFja3Mgb24gdGhlIGNsaWVudC4KLSAgICBzZXRDbGllbnQo
MCk7CisgICAgQVNTRVJUKGlzTWFpblRocmVhZCgpKTsKIAotICAgIGZpbGVUaHJlYWQoKS0+dW5z
Y2hlZHVsZVRhc2tzKG1fc3RyZWFtLmdldCgpKTsKLSAgICBmaWxlVGhyZWFkKCktPnBvc3RUYXNr
KHsgdGhpcywgW3RoaXNdIHsKKyAgICBpZiAobV9zdG9wcGVkKQorICAgICAgICByZXR1cm47CisK
KyAgICAvLyBQcmV2ZW50IGFueSBmdXJ0aGVyIGNsaWVudCBjYWxsYmFja3MgYW5kIGFsc28gcHJl
dmVudCBhbnkgbmV3CisgICAgLy8gb3BlcmF0aW9ucyBmcm9tIHN0YXJ0aW5nIHRoYXQgaGF2ZSBu
b3Qgc3RhcnRlZCB5ZXQgb24gdGhlIGZpbGUgdGhyZWFkLgorICAgIG1fc3RvcHBlZCA9IHRydWU7
CisKKyAgICBjYWxsT25GaWxlVGhyZWFkKFt0aGlzXSB7CiAgICAgICAgIG1fc3RyZWFtLT5zdG9w
KCk7CiAgICAgICAgIGNhbGxPbk1haW5UaHJlYWQoW3RoaXNdIHsKLSAgICAgICAgICAgIEFTU0VS
VChoYXNPbmVSZWYoKSk7CisgICAgICAgICAgICAvLyBCYWxhbmNlcyB0aGUgcmVmIGluIEFzeW5j
RmlsZVN0cmVhbTo6c3RhcnQgYWJvdmUuCiAgICAgICAgICAgICBkZXJlZigpOwogICAgICAgICB9
KTsKLSAgICB9IH0pOworICAgIH0pOworfQorCit2b2lkIEFzeW5jRmlsZVN0cmVhbTo6cGVyZm9y
bShzdGQ6OmZ1bmN0aW9uPHN0ZDo6ZnVuY3Rpb248dm9pZChGaWxlU3RyZWFtQ2xpZW50Jik+KEZp
bGVTdHJlYW0mKT4gb3BlcmF0aW9uKQoreworICAgIEFTU0VSVCghbV9zdG9wcGVkKTsKKworICAg
IGNhbGxPbkZpbGVUaHJlYWQoW3RoaXMsIG9wZXJhdGlvbl0geworICAgICAgICBpZiAobV9zdG9w
cGVkKQorICAgICAgICAgICAgcmV0dXJuOworICAgICAgICBhdXRvIG1haW5UaHJlYWRXb3JrID0g
b3BlcmF0aW9uKG1fc3RyZWFtLmdldCgpKTsKKyAgICAgICAgY2FsbE9uTWFpblRocmVhZChbdGhp
cywgbWFpblRocmVhZFdvcmtdIHsKKyAgICAgICAgICAgIGlmIChtX3N0b3BwZWQpCisgICAgICAg
ICAgICAgICAgcmV0dXJuOworICAgICAgICAgICAgbWFpblRocmVhZFdvcmsobV9jbGllbnQpOwor
ICAgICAgICB9KTsKKyAgICB9KTsKIH0KIAogdm9pZCBBc3luY0ZpbGVTdHJlYW06OmdldFNpemUo
Y29uc3QgU3RyaW5nJiBwYXRoLCBkb3VibGUgZXhwZWN0ZWRNb2RpZmljYXRpb25UaW1lKQogewog
ICAgIFN0cmluZyBwYXRoQ29weSA9IHBhdGguaXNvbGF0ZWRDb3B5KCk7Ci0gICAgZmlsZVRocmVh
ZCgpLT5wb3N0VGFzayh7IHRoaXMsIFt0aGlzLCBwYXRoQ29weSwgZXhwZWN0ZWRNb2RpZmljYXRp
b25UaW1lXSB7Ci0gICAgICAgIGxvbmcgbG9uZyBzaXplID0gbV9zdHJlYW0tPmdldFNpemUocGF0
aENvcHksIGV4cGVjdGVkTW9kaWZpY2F0aW9uVGltZSk7Ci0gICAgICAgIGNhbGxPbk1haW5UaHJl
YWQoW3RoaXMsIHNpemVdIHsKLSAgICAgICAgICAgIGlmIChjbGllbnQoKSkKLSAgICAgICAgICAg
ICAgICBjbGllbnQoKS0+ZGlkR2V0U2l6ZShzaXplKTsKLSAgICAgICAgfSk7Ci0gICAgfSB9KTsK
KyAgICBwZXJmb3JtKFtwYXRoQ29weSwgZXhwZWN0ZWRNb2RpZmljYXRpb25UaW1lXSAoRmlsZVN0
cmVhbSYgc3RyZWFtKSB7CisgICAgICAgIGxvbmcgbG9uZyBzaXplID0gc3RyZWFtLmdldFNpemUo
cGF0aENvcHksIGV4cGVjdGVkTW9kaWZpY2F0aW9uVGltZSk7CisgICAgICAgIHJldHVybiBbc2l6
ZV0gKEZpbGVTdHJlYW1DbGllbnQmIGNsaWVudCkgeworICAgICAgICAgICAgY2xpZW50LmRpZEdl
dFNpemUoc2l6ZSk7CisgICAgICAgIH07CisgICAgfSk7CiB9CiAKIHZvaWQgQXN5bmNGaWxlU3Ry
ZWFtOjpvcGVuRm9yUmVhZChjb25zdCBTdHJpbmcmIHBhdGgsIGxvbmcgbG9uZyBvZmZzZXQsIGxv
bmcgbG9uZyBsZW5ndGgpCiB7CiAgICAgU3RyaW5nIHBhdGhDb3B5ID0gcGF0aC5pc29sYXRlZENv
cHkoKTsKLSAgICBmaWxlVGhyZWFkKCktPnBvc3RUYXNrKHsgdGhpcywgW3RoaXMsIHBhdGhDb3B5
LCBvZmZzZXQsIGxlbmd0aF0gewotICAgICAgICBib29sIHN1Y2Nlc3MgPSBtX3N0cmVhbS0+b3Bl
bkZvclJlYWQocGF0aENvcHksIG9mZnNldCwgbGVuZ3RoKTsKLSAgICAgICAgY2FsbE9uTWFpblRo
cmVhZChbdGhpcywgc3VjY2Vzc10gewotICAgICAgICAgICAgaWYgKGNsaWVudCgpKQotICAgICAg
ICAgICAgICAgIGNsaWVudCgpLT5kaWRPcGVuKHN1Y2Nlc3MpOwotICAgICAgICB9KTsKLSAgICB9
IH0pOworICAgIHBlcmZvcm0oW3BhdGhDb3B5LCBvZmZzZXQsIGxlbmd0aF0gKEZpbGVTdHJlYW0m
IHN0cmVhbSkgeworICAgICAgICBib29sIHN1Y2Nlc3MgPSBzdHJlYW0ub3BlbkZvclJlYWQocGF0
aENvcHksIG9mZnNldCwgbGVuZ3RoKTsKKyAgICAgICAgcmV0dXJuIFtzdWNjZXNzXSAoRmlsZVN0
cmVhbUNsaWVudCYgY2xpZW50KSB7CisgICAgICAgICAgICBjbGllbnQuZGlkT3BlbihzdWNjZXNz
KTsKKyAgICAgICAgfTsKKyAgICB9KTsKIH0KIAogdm9pZCBBc3luY0ZpbGVTdHJlYW06Om9wZW5G
b3JXcml0ZShjb25zdCBTdHJpbmcmIHBhdGgpCiB7CiAgICAgU3RyaW5nIHBhdGhDb3B5ID0gcGF0
aC5pc29sYXRlZENvcHkoKTsKLSAgICBmaWxlVGhyZWFkKCktPnBvc3RUYXNrKHsgdGhpcywgW3Ro
aXMsIHBhdGhDb3B5XSB7Ci0gICAgICAgIGJvb2wgc3VjY2VzcyA9IG1fc3RyZWFtLT5vcGVuRm9y
V3JpdGUocGF0aENvcHkpOwotICAgICAgICBjYWxsT25NYWluVGhyZWFkKFt0aGlzLCBzdWNjZXNz
XSB7Ci0gICAgICAgICAgICBpZiAoY2xpZW50KCkpCi0gICAgICAgICAgICAgICAgY2xpZW50KCkt
PmRpZE9wZW4oc3VjY2Vzcyk7Ci0gICAgICAgIH0pOwotICAgIH0gfSk7CisgICAgcGVyZm9ybShb
cGF0aENvcHldIChGaWxlU3RyZWFtJiBzdHJlYW0pIHsKKyAgICAgICAgYm9vbCBzdWNjZXNzID0g
c3RyZWFtLm9wZW5Gb3JXcml0ZShwYXRoQ29weSk7CisgICAgICAgIHJldHVybiBbc3VjY2Vzc10g
KEZpbGVTdHJlYW1DbGllbnQmIGNsaWVudCkgeworICAgICAgICAgICAgY2xpZW50LmRpZE9wZW4o
c3VjY2Vzcyk7CisgICAgICAgIH07CisgICAgfSk7CiB9CiAKIHZvaWQgQXN5bmNGaWxlU3RyZWFt
OjpjbG9zZSgpCiB7Ci0gICAgZmlsZVRocmVhZCgpLT5wb3N0VGFzayh7dGhpcywgW3RoaXNdIHsK
KyAgICBpZiAobV9zdG9wcGVkKQorICAgICAgICByZXR1cm47CisKKyAgICBjYWxsT25GaWxlVGhy
ZWFkKFt0aGlzXSB7CiAgICAgICAgIG1fc3RyZWFtLT5jbG9zZSgpOwotICAgIH0gfSk7CisgICAg
fSk7CiB9CiAKIHZvaWQgQXN5bmNGaWxlU3RyZWFtOjpyZWFkKGNoYXIqIGJ1ZmZlciwgaW50IGxl
bmd0aCkKIHsKLSAgICBmaWxlVGhyZWFkKCktPnBvc3RUYXNrKHsgdGhpcywgW3RoaXMsIGJ1ZmZl
ciwgbGVuZ3RoXSB7Ci0gICAgICAgIGludCBieXRlc1JlYWQgPSBtX3N0cmVhbS0+cmVhZChidWZm
ZXIsIGxlbmd0aCk7Ci0gICAgICAgIGNhbGxPbk1haW5UaHJlYWQoW3RoaXMsIGJ5dGVzUmVhZF0g
ewotICAgICAgICAgICAgaWYgKGNsaWVudCgpKQotICAgICAgICAgICAgICAgIGNsaWVudCgpLT5k
aWRSZWFkKGJ5dGVzUmVhZCk7Ci0gICAgICAgIH0pOwotICAgIH0gfSk7CisgICAgcGVyZm9ybShb
YnVmZmVyLCBsZW5ndGhdIChGaWxlU3RyZWFtJiBzdHJlYW0pIHsKKyAgICAgICAgaW50IGJ5dGVz
UmVhZCA9IHN0cmVhbS5yZWFkKGJ1ZmZlciwgbGVuZ3RoKTsKKyAgICAgICAgcmV0dXJuIFtieXRl
c1JlYWRdIChGaWxlU3RyZWFtQ2xpZW50JiBjbGllbnQpIHsKKyAgICAgICAgICAgIGNsaWVudC5k
aWRSZWFkKGJ5dGVzUmVhZCk7CisgICAgICAgIH07CisgICAgfSk7CiB9CiAKIHZvaWQgQXN5bmNG
aWxlU3RyZWFtOjp3cml0ZShjb25zdCBVUkwmIGJsb2JVUkwsIGxvbmcgbG9uZyBwb3NpdGlvbiwg
aW50IGxlbmd0aCkKIHsKICAgICBVUkwgYmxvYlVSTENvcHkgPSBibG9iVVJMLmNvcHkoKTsKLSAg
ICBmaWxlVGhyZWFkKCktPnBvc3RUYXNrKHsgdGhpcywgW3RoaXMsIGJsb2JVUkxDb3B5LCBwb3Np
dGlvbiwgbGVuZ3RoXSB7Ci0gICAgICAgIGludCBieXRlc1dyaXR0ZW4gPSBtX3N0cmVhbS0+d3Jp
dGUoYmxvYlVSTENvcHksIHBvc2l0aW9uLCBsZW5ndGgpOwotICAgICAgICBjYWxsT25NYWluVGhy
ZWFkKFt0aGlzLCBieXRlc1dyaXR0ZW5dIHsKLSAgICAgICAgICAgIGlmIChjbGllbnQoKSkKLSAg
ICAgICAgICAgICAgICBjbGllbnQoKS0+ZGlkV3JpdGUoYnl0ZXNXcml0dGVuKTsKLSAgICAgICAg
fSk7Ci0gICAgfSB9KTsKKyAgICBwZXJmb3JtKFtibG9iVVJMQ29weSwgcG9zaXRpb24sIGxlbmd0
aF0gKEZpbGVTdHJlYW0mIHN0cmVhbSkgeworICAgICAgICBpbnQgYnl0ZXNXcml0dGVuID0gc3Ry
ZWFtLndyaXRlKGJsb2JVUkxDb3B5LCBwb3NpdGlvbiwgbGVuZ3RoKTsKKyAgICAgICAgcmV0dXJu
IFtieXRlc1dyaXR0ZW5dIChGaWxlU3RyZWFtQ2xpZW50JiBjbGllbnQpIHsKKyAgICAgICAgICAg
IGNsaWVudC5kaWRXcml0ZShieXRlc1dyaXR0ZW4pOworICAgICAgICB9OworICAgIH0pOwogfQog
CiB2b2lkIEFzeW5jRmlsZVN0cmVhbTo6dHJ1bmNhdGUobG9uZyBsb25nIHBvc2l0aW9uKQogewot
ICAgIGZpbGVUaHJlYWQoKS0+cG9zdFRhc2soeyB0aGlzLCBbdGhpcywgcG9zaXRpb25dIHsKLSAg
ICAgICAgYm9vbCBzdWNjZXNzID0gbV9zdHJlYW0tPnRydW5jYXRlKHBvc2l0aW9uKTsKLSAgICAg
ICAgY2FsbE9uTWFpblRocmVhZChbdGhpcywgc3VjY2Vzc10gewotICAgICAgICAgICAgaWYgKGNs
aWVudCgpKQotICAgICAgICAgICAgICAgIGNsaWVudCgpLT5kaWRUcnVuY2F0ZShzdWNjZXNzKTsK
LSAgICAgICAgfSk7Ci0gICAgfSB9KTsKKyAgICBwZXJmb3JtKFtwb3NpdGlvbl0gKEZpbGVTdHJl
YW0mIHN0cmVhbSkgeworICAgICAgICBib29sIHN1Y2Nlc3MgPSBzdHJlYW0udHJ1bmNhdGUocG9z
aXRpb24pOworICAgICAgICByZXR1cm4gW3N1Y2Nlc3NdIChGaWxlU3RyZWFtQ2xpZW50JiBjbGll
bnQpIHsKKyAgICAgICAgICAgIGNsaWVudC5kaWRUcnVuY2F0ZShzdWNjZXNzKTsKKyAgICAgICAg
fTsKKyAgICB9KTsKIH0KIAogfSAvLyBuYW1lc3BhY2UgV2ViQ29yZQpkaWZmIC0tZ2l0IGEvU291
cmNlL1dlYkNvcmUvZmlsZWFwaS9Bc3luY0ZpbGVTdHJlYW0uaCBiL1NvdXJjZS9XZWJDb3JlL2Zp
bGVhcGkvQXN5bmNGaWxlU3RyZWFtLmgKaW5kZXggYjYwYmM2MDcxNTU1MjZmODM2YTgwMjAwYTk4
ZTAwNzBjZWNjZWUyMy4uY2YxODBmZWM0M2NmZjRhZWE0OGI0MWQ1NWMzODVkNDE0NDlhMTc2OSAx
MDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvZmlsZWFwaS9Bc3luY0ZpbGVTdHJlYW0uaAorKysg
Yi9Tb3VyY2UvV2ViQ29yZS9maWxlYXBpL0FzeW5jRmlsZVN0cmVhbS5oCkBAIC0xLDYgKzEsNiBA
QAogLyoKLSAqIENvcHlyaWdodCAoQykgMjAxMCBHb29nbGUgSW5jLiAgQWxsIHJpZ2h0cyByZXNl
cnZlZC4KLSAqIENvcHlyaWdodCAoQykgMjAxMCwgMjAxMiBBcHBsZSBJbmMuIEFsbCByaWdodHMg
cmVzZXJ2ZWQuCisgKiBDb3B5cmlnaHQgKEMpIDIwMTAgR29vZ2xlIEluYy4gQWxsIHJpZ2h0cyBy
ZXNlcnZlZC4KKyAqIENvcHlyaWdodCAoQykgMjAxMCwgMjAxMiwgMjAxNCBBcHBsZSBJbmMuIEFs
bCByaWdodHMgcmVzZXJ2ZWQuCiAgKgogICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3Vy
Y2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CiAgKiBtb2RpZmljYXRpb24sIGFy
ZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMgYXJlCkBA
IC0zMiw5ICszMiwxMSBAQAogI2lmbmRlZiBBc3luY0ZpbGVTdHJlYW1faAogI2RlZmluZSBBc3lu
Y0ZpbGVTdHJlYW1faAogCisjaW5jbHVkZSA8YXRvbWljPgorI2luY2x1ZGUgPGZ1bmN0aW9uYWw+
CiAjaW5jbHVkZSA8d3RmL0ZvcndhcmQuaD4KKyNpbmNsdWRlIDx3dGYvUmVmLmg+CiAjaW5jbHVk
ZSA8d3RmL1JlZkNvdW50ZWQuaD4KLSNpbmNsdWRlIDx3dGYvUmVmUHRyLmg+CiAKIG5hbWVzcGFj
ZSBXZWJDb3JlIHsKIApAQCAtNDIsOSArNDQsOSBAQCBjbGFzcyBGaWxlU3RyZWFtQ2xpZW50Owog
Y2xhc3MgRmlsZVN0cmVhbTsKIGNsYXNzIFVSTDsKIAotY2xhc3MgQXN5bmNGaWxlU3RyZWFtIDog
cHVibGljIFJlZkNvdW50ZWQ8QXN5bmNGaWxlU3RyZWFtPiB7CitjbGFzcyBBc3luY0ZpbGVTdHJl
YW0gZmluYWwgOiBwdWJsaWMgUmVmQ291bnRlZDxBc3luY0ZpbGVTdHJlYW0+IHsKIHB1YmxpYzoK
LSAgICBzdGF0aWMgUGFzc1JlZlB0cjxBc3luY0ZpbGVTdHJlYW0+IGNyZWF0ZShGaWxlU3RyZWFt
Q2xpZW50Kik7CisgICAgc3RhdGljIFBhc3NSZWY8QXN5bmNGaWxlU3RyZWFtPiBjcmVhdGUoRmls
ZVN0cmVhbUNsaWVudCYpOwogICAgIH5Bc3luY0ZpbGVTdHJlYW0oKTsKIAogICAgIHZvaWQgZ2V0
U2l6ZShjb25zdCBTdHJpbmcmIHBhdGgsIGRvdWJsZSBleHBlY3RlZE1vZGlmaWNhdGlvblRpbWUp
OwpAQCAtNTUsMTggKzU3LDE3IEBAIHB1YmxpYzoKICAgICB2b2lkIHdyaXRlKGNvbnN0IFVSTCYg
YmxvYlVSTCwgbG9uZyBsb25nIHBvc2l0aW9uLCBpbnQgbGVuZ3RoKTsKICAgICB2b2lkIHRydW5j
YXRlKGxvbmcgbG9uZyBwb3NpdGlvbik7CiAKLSAgICAvLyBTdG9wcyB0aGUgcHJveHkgYW5kIHNj
aGVkdWxlcyBpdCB0byBiZSBkZXN0cnVjdGVkLiBBbGwgdGhlIHBlbmRpbmcgdGFza3Mgd2lsbCBi
ZSBhYm9ydGVkIGFuZCB0aGUgZmlsZSBzdHJlYW0gd2lsbCBiZSBjbG9zZWQuCi0gICAgLy8gTm90
ZTogdGhlIGNhbGxlciBzaG91bGQgZGVyZWYgdGhlIGluc3RhbmNlIGltbWVkaWF0ZWx5IGFmdGVy
IGNhbGxpbmcgc3RvcCgpLgogICAgIHZvaWQgc3RvcCgpOwogCi0gICAgRmlsZVN0cmVhbUNsaWVu
dCogY2xpZW50KCkgY29uc3QgeyByZXR1cm4gbV9jbGllbnQ7IH0KLSAgICB2b2lkIHNldENsaWVu
dChGaWxlU3RyZWFtQ2xpZW50KiBjbGllbnQpIHsgbV9jbGllbnQgPSBjbGllbnQ7IH0KLQogcHJp
dmF0ZToKLSAgICBBc3luY0ZpbGVTdHJlYW0oRmlsZVN0cmVhbUNsaWVudCopOworICAgIGV4cGxp
Y2l0IEFzeW5jRmlsZVN0cmVhbShGaWxlU3RyZWFtQ2xpZW50Jik7CisgICAgdm9pZCBzdGFydCgp
OworCisgICAgdm9pZCBwZXJmb3JtKHN0ZDo6ZnVuY3Rpb248c3RkOjpmdW5jdGlvbjx2b2lkKEZp
bGVTdHJlYW1DbGllbnQmKT4oRmlsZVN0cmVhbSYpPik7CiAKLSAgICBSZWZQdHI8RmlsZVN0cmVh
bT4gbV9zdHJlYW07Ci0gICAgRmlsZVN0cmVhbUNsaWVudCogbV9jbGllbnQ7CisgICAgUmVmPEZp
bGVTdHJlYW0+IG1fc3RyZWFtOworICAgIEZpbGVTdHJlYW1DbGllbnQmIG1fY2xpZW50OworICAg
IHN0ZDo6YXRvbWljX2Jvb2wgbV9zdG9wcGVkIHsgZmFsc2UgfTsKIH07CiAKIH0gLy8gbmFtZXNw
YWNlIFdlYkNvcmUKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL2ZpbGVhcGkvRmlsZVRocmVh
ZC5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9maWxlYXBpL0ZpbGVUaHJlYWQuY3BwCmRlbGV0ZWQgZmls
ZSBtb2RlIDEwMDY0NAppbmRleCAzNGVhNWQ3ZTExNDBmZDRlNDVjYjcwMmVmZmY0NjYzNDQ5ODU5
YjdhLi4wMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwCi0tLSBhL1NvdXJj
ZS9XZWJDb3JlL2ZpbGVhcGkvRmlsZVRocmVhZC5jcHAKKysrIC9kZXYvbnVsbApAQCAtMSwxMTMg
KzAsMCBAQAotLyoKLSAqIENvcHlyaWdodCAoQykgMjAxMCBHb29nbGUgSW5jLiAgQWxsIHJpZ2h0
cyByZXNlcnZlZC4KLSAqCi0gKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQg
YmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKLSAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1p
dHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucyBhcmUKLSAqIG1ldDoK
LSAqCi0gKiAgICAgKiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4g
dGhlIGFib3ZlIGNvcHlyaWdodAotICogbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBh
bmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgotICogICAgICogUmVkaXN0cmlidXRpb25zIGlu
IGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZQotICogY29weXJpZ2h0IG5vdGlj
ZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lcgot
ICogaW4gdGhlIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3
aXRoIHRoZQotICogZGlzdHJpYnV0aW9uLgotICogICAgICogTmVpdGhlciB0aGUgbmFtZSBvZiBH
b29nbGUgSW5jLiBub3IgdGhlIG5hbWVzIG9mIGl0cwotICogY29udHJpYnV0b3JzIG1heSBiZSB1
c2VkIHRvIGVuZG9yc2Ugb3IgcHJvbW90ZSBwcm9kdWN0cyBkZXJpdmVkIGZyb20KLSAqIHRoaXMg
c29mdHdhcmUgd2l0aG91dCBzcGVjaWZpYyBwcmlvciB3cml0dGVuIHBlcm1pc3Npb24uCi0gKgot
ICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBUSEUgQ09QWVJJR0hUIEhPTERFUlMgQU5E
IENPTlRSSUJVVE9SUwotICogIkFTIElTIiBBTkQgQU5ZIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJS
QU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QKLSAqIExJTUlURUQgVE8sIFRIRSBJTVBMSUVEIFdB
UlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUgotICogQSBQQVJUSUNV
TEFSIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuIElOIE5PIEVWRU5UIFNIQUxMIFRIRSBDT1BZUklH
SFQKLSAqIE9XTkVSIE9SIENPTlRSSUJVVE9SUyBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElO
RElSRUNULCBJTkNJREVOVEFMLAotICogU1BFQ0lBTCwgRVhFTVBMQVJZLCBPUiBDT05TRVFVRU5U
SUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVAotICogTElNSVRFRCBUTywgUFJPQ1VSRU1F
TlQgT0YgU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsCi0gKiBEQVRB
LCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFO
RCBPTiBBTlkKLSAqIFRIRU9SWSBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNU
UklDVCBMSUFCSUxJVFksIE9SIFRPUlQKLSAqIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhF
UldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRQotICogT0YgVEhJUyBTT0ZU
V0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4K
LSAqLwotCi0jaW5jbHVkZSAiY29uZmlnLmgiCi0KLSNpbmNsdWRlICJGaWxlVGhyZWFkLmgiCi0K
LSNpbmNsdWRlICJMb2dnaW5nLmgiCi0jaW5jbHVkZSA8d3RmL0F1dG9kcmFpbmVkUG9vbC5oPgot
Ci1uYW1lc3BhY2UgV2ViQ29yZSB7Ci0KLUZpbGVUaHJlYWQ6OkZpbGVUaHJlYWQoKQotICAgIDog
bV90aHJlYWRJRCgwKQotewotICAgIG1fc2VsZlJlZiA9IHRoaXM7Ci19Ci0KLUZpbGVUaHJlYWQ6
On5GaWxlVGhyZWFkKCkKLXsKLSAgICBBU1NFUlQobV9xdWV1ZS5raWxsZWQoKSk7Ci19Ci0KLWJv
b2wgRmlsZVRocmVhZDo6c3RhcnQoKQotewotICAgIE11dGV4TG9ja2VyIGxvY2sobV90aHJlYWRD
cmVhdGlvbk11dGV4KTsKLSAgICBpZiAobV90aHJlYWRJRCkKLSAgICAgICAgcmV0dXJuIHRydWU7
Ci0gICAgbV90aHJlYWRJRCA9IGNyZWF0ZVRocmVhZChGaWxlVGhyZWFkOjpmaWxlVGhyZWFkU3Rh
cnQsIHRoaXMsICJXZWJDb3JlOiBGaWxlIik7Ci0gICAgcmV0dXJuIG1fdGhyZWFkSUQ7Ci19Ci0K
LXZvaWQgRmlsZVRocmVhZDo6c3RvcCgpCi17Ci0gICAgbV9xdWV1ZS5raWxsKCk7Ci19Ci0KLXZv
aWQgRmlsZVRocmVhZDo6cG9zdFRhc2soVGFzayB0YXNrKQotewotICAgIG1fcXVldWUuYXBwZW5k
KHN0ZDo6bWFrZV91bmlxdWU8RmlsZVRocmVhZDo6VGFzaz4oV1RGOjptb3ZlKHRhc2spKSk7Ci19
Ci0KLWNsYXNzIFNhbWVJbnN0YW5jZVByZWRpY2F0ZSB7Ci1wdWJsaWM6Ci0gICAgU2FtZUluc3Rh
bmNlUHJlZGljYXRlKGNvbnN0IHZvaWQqIGluc3RhbmNlKSA6IG1faW5zdGFuY2UoaW5zdGFuY2Up
IHsgfQotICAgIGJvb2wgb3BlcmF0b3IoKShGaWxlVGhyZWFkOjpUYXNrJiB0YXNrKSBjb25zdCB7
IHJldHVybiB0YXNrLmluc3RhbmNlKCkgPT0gbV9pbnN0YW5jZTsgfQotcHJpdmF0ZToKLSAgICBj
b25zdCB2b2lkKiBtX2luc3RhbmNlOwotfTsKLQotdm9pZCBGaWxlVGhyZWFkOjp1bnNjaGVkdWxl
VGFza3MoY29uc3Qgdm9pZCogaW5zdGFuY2UpCi17Ci0gICAgU2FtZUluc3RhbmNlUHJlZGljYXRl
IHByZWRpY2F0ZShpbnN0YW5jZSk7Ci0gICAgbV9xdWV1ZS5yZW1vdmVJZihwcmVkaWNhdGUpOwot
fQotCi12b2lkIEZpbGVUaHJlYWQ6OmZpbGVUaHJlYWRTdGFydCh2b2lkKiBhcmcpCi17Ci0gICAg
RmlsZVRocmVhZCogZmlsZVRocmVhZCA9IHN0YXRpY19jYXN0PEZpbGVUaHJlYWQqPihhcmcpOwot
ICAgIGZpbGVUaHJlYWQtPnJ1bkxvb3AoKTsKLX0KLQotdm9pZCBGaWxlVGhyZWFkOjpydW5Mb29w
KCkKLXsKLSAgICB7Ci0gICAgICAgIC8vIFdhaXQgZm9yIEZpbGVUaHJlYWQ6OnN0YXJ0KCkgdG8g
Y29tcGxldGUgdG8gaGF2ZSBtX3RocmVhZElECi0gICAgICAgIC8vIGVzdGFibGlzaGVkIGJlZm9y
ZSBzdGFydGluZyB0aGUgbWFpbiBsb29wLgotICAgICAgICBNdXRleExvY2tlciBsb2NrKG1fdGhy
ZWFkQ3JlYXRpb25NdXRleCk7Ci0gICAgICAgIExPRyhGaWxlQVBJLCAiU3RhcnRlZCBGaWxlVGhy
ZWFkICVwIiwgdGhpcyk7Ci0gICAgfQotCi0gICAgd2hpbGUgKGF1dG8gdGFzayA9IG1fcXVldWUu
d2FpdEZvck1lc3NhZ2UoKSkgewotICAgICAgICBBdXRvZHJhaW5lZFBvb2wgcG9vbDsKLQotICAg
ICAgICB0YXNrLT5wZXJmb3JtVGFzaygpOwotICAgIH0KLQotICAgIExPRyhGaWxlQVBJLCAiQWJv
dXQgdG8gZGV0YWNoIHRocmVhZCAlaSBhbmQgY2xlYXIgdGhlIHJlZiB0byBGaWxlVGhyZWFkICVw
LCB3aGljaCBjdXJyZW50bHkgaGFzICVpIHJlZihzKSIsIG1fdGhyZWFkSUQsIHRoaXMsIHJlZkNv
dW50KCkpOwotCi0gICAgZGV0YWNoVGhyZWFkKG1fdGhyZWFkSUQpOwotCi0gICAgLy8gQ2xlYXIg
dGhlIHNlbGYgcmVmcHRyLCBwb3NzaWJseSByZXN1bHRpbmcgaW4gZGVsZXRpb24KLSAgICBtX3Nl
bGZSZWYgPSAwOwotfQotCi19IC8vIG5hbWVzcGFjZSBXZWJDb3JlCmRpZmYgLS1naXQgYS9Tb3Vy
Y2UvV2ViQ29yZS9maWxlYXBpL0ZpbGVUaHJlYWQuaCBiL1NvdXJjZS9XZWJDb3JlL2ZpbGVhcGkv
RmlsZVRocmVhZC5oCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCA5ZGUyZmVkYmYxODM4
MjEyMzQ3ZGZhYTkyMGQ1YTFlNzVhYmU3NTg0Li4wMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwCi0tLSBhL1NvdXJjZS9XZWJDb3JlL2ZpbGVhcGkvRmlsZVRocmVhZC5oCisr
KyAvZGV2L251bGwKQEAgLTEsMTAxICswLDAgQEAKLS8qCi0gKiBDb3B5cmlnaHQgKEMpIDIwMTAg
R29vZ2xlIEluYy4gIEFsbCByaWdodHMgcmVzZXJ2ZWQuCi0gKgotICogUmVkaXN0cmlidXRpb24g
YW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0Ci0gKiBt
b2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNv
bmRpdGlvbnMgYXJlCi0gKiBtZXQ6Ci0gKgotICogICAgICogUmVkaXN0cmlidXRpb25zIG9mIHNv
dXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKLSAqIG5vdGljZSwgdGhp
cyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KLSAqICAg
ICAqIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJv
dmUKLSAqIGNvcHlyaWdodCBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUg
Zm9sbG93aW5nIGRpc2NsYWltZXIKLSAqIGluIHRoZSBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhl
ciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUKLSAqIGRpc3RyaWJ1dGlvbi4KLSAqICAgICAq
IE5laXRoZXIgdGhlIG5hbWUgb2YgR29vZ2xlIEluYy4gbm9yIHRoZSBuYW1lcyBvZiBpdHMKLSAq
IGNvbnRyaWJ1dG9ycyBtYXkgYmUgdXNlZCB0byBlbmRvcnNlIG9yIHByb21vdGUgcHJvZHVjdHMg
ZGVyaXZlZCBmcm9tCi0gKiB0aGlzIHNvZnR3YXJlIHdpdGhvdXQgc3BlY2lmaWMgcHJpb3Igd3Jp
dHRlbiBwZXJtaXNzaW9uLgotICoKLSAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgVEhF
IENPUFlSSUdIVCBIT0xERVJTIEFORCBDT05UUklCVVRPUlMKLSAqICJBUyBJUyIgQU5EIEFOWSBF
WFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UCi0gKiBMSU1J
VEVEIFRPLCBUSEUgSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklU
TkVTUyBGT1IKLSAqIEEgUEFSVElDVUxBUiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiBJTiBOTyBF
VkVOVCBTSEFMTCBUSEUgQ09QWVJJR0hUCi0gKiBPV05FUiBPUiBDT05UUklCVVRPUlMgQkUgTElB
QkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwKLSAqIFNQRUNJQUwsIEVY
RU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QKLSAq
IExJTUlURUQgVE8sIFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7
IExPU1MgT0YgVVNFLAotICogREFUQSwgT1IgUFJPRklUUzsgT1IgQlVTSU5FU1MgSU5URVJSVVBU
SU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZCi0gKiBUSEVPUlkgT0YgTElBQklMSVRZLCBX
SEVUSEVSIElOIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUCi0gKiAoSU5DTFVE
SU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRI
RSBVU0UKLSAqIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUgUE9TU0lC
SUxJVFkgT0YgU1VDSCBEQU1BR0UuCi0gKi8KLQotI2lmbmRlZiBGaWxlVGhyZWFkX2gKLSNkZWZp
bmUgRmlsZVRocmVhZF9oCi0KLSNpbmNsdWRlIDxmdW5jdGlvbmFsPgotI2luY2x1ZGUgPHd0Zi9N
ZXNzYWdlUXVldWUuaD4KLSNpbmNsdWRlIDx3dGYvUGFzc1JlZlB0ci5oPgotI2luY2x1ZGUgPHd0
Zi9UaHJlYWRpbmcuaD4KLQotbmFtZXNwYWNlIFdlYkNvcmUgewotCi1jbGFzcyBGaWxlU3RyZWFt
OwotCi1jbGFzcyBGaWxlVGhyZWFkIDogcHVibGljIFRocmVhZFNhZmVSZWZDb3VudGVkPEZpbGVU
aHJlYWQ+IHsKLXB1YmxpYzoKLSAgICBzdGF0aWMgUGFzc1JlZlB0cjxGaWxlVGhyZWFkPiBjcmVh
dGUoKQotICAgIHsKLSAgICAgICAgcmV0dXJuIGFkb3B0UmVmKG5ldyBGaWxlVGhyZWFkKCkpOwot
ICAgIH0KLQotICAgIH5GaWxlVGhyZWFkKCk7Ci0KLSAgICBib29sIHN0YXJ0KCk7Ci0gICAgdm9p
ZCBzdG9wKCk7Ci0KLSAgICBjbGFzcyBUYXNrIHsKLSAgICAgICAgV1RGX01BS0VfTk9OQ09QWUFC
TEUoVGFzayk7Ci0gICAgcHVibGljOgotICAgICAgICB0ZW1wbGF0ZTx0eXBlbmFtZSBULCB0eXBl
bmFtZSBVLCB0eXBlbmFtZSA9IHR5cGVuYW1lIHN0ZDo6ZW5hYmxlX2lmPCFzdGQ6OmlzX2Jhc2Vf
b2Y8VGFzaywgVT46OnZhbHVlICYmIHN0ZDo6aXNfY29udmVydGlibGU8VSwgc3RkOjpmdW5jdGlv
bjx2b2lkICgpPj46OnZhbHVlPjo6dHlwZT4KLSAgICAgICAgVGFzayhUKiBpbnN0YW5jZSwgVSBt
ZXRob2QpCi0gICAgICAgICAgICA6IG1fdGFzayhXVEY6Om1vdmUobWV0aG9kKSkKLSAgICAgICAg
ICAgICwgbV9pbnN0YW5jZShpbnN0YW5jZSkKLSAgICAgICAgewotICAgICAgICB9Ci0KLSAgICAg
ICAgVGFzayhUYXNrJiYgb3RoZXIpCi0gICAgICAgICAgICA6IG1fdGFzayhXVEY6Om1vdmUob3Ro
ZXIubV90YXNrKSkKLSAgICAgICAgICAgICwgbV9pbnN0YW5jZShvdGhlci5tX2luc3RhbmNlKQot
ICAgICAgICB7Ci0gICAgICAgIH0KLQotICAgICAgICB2b2lkIHBlcmZvcm1UYXNrKCkKLSAgICAg
ICAgewotICAgICAgICAgICAgbV90YXNrKCk7Ci0gICAgICAgIH0KLSAgICAgICAgdm9pZCogaW5z
dGFuY2UoKSBjb25zdCB7IHJldHVybiBtX2luc3RhbmNlOyB9Ci0KLSAgICBwcml2YXRlOgotICAg
ICAgICBzdGQ6OmZ1bmN0aW9uPHZvaWQgKCk+IG1fdGFzazsKLSAgICAgICAgdm9pZCogbV9pbnN0
YW5jZTsKLSAgICB9OwotCi0gICAgdm9pZCBwb3N0VGFzayhUYXNrKTsKLQotICAgIHZvaWQgdW5z
Y2hlZHVsZVRhc2tzKGNvbnN0IHZvaWQqIGluc3RhbmNlKTsKLQotcHJpdmF0ZToKLSAgICBGaWxl
VGhyZWFkKCk7Ci0KLSAgICBzdGF0aWMgdm9pZCBmaWxlVGhyZWFkU3RhcnQodm9pZCopOwotICAg
IHZvaWQgcnVuTG9vcCgpOwotCi0gICAgVGhyZWFkSWRlbnRpZmllciBtX3RocmVhZElEOwotICAg
IFJlZlB0cjxGaWxlVGhyZWFkPiBtX3NlbGZSZWY7Ci0gICAgTWVzc2FnZVF1ZXVlPFRhc2s+IG1f
cXVldWU7Ci0KLSAgICBNdXRleCBtX3RocmVhZENyZWF0aW9uTXV0ZXg7Ci19OwotCi19IC8vIG5h
bWVzcGFjZSBXZWJDb3JlCi0KLSNlbmRpZiAvLyBGaWxlVGhyZWFkX2gKZGlmZiAtLWdpdCBhL1Nv
dXJjZS9XZWJDb3JlL2xvYWRlci9SZXNvdXJjZUxvYWRlci5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9s
b2FkZXIvUmVzb3VyY2VMb2FkZXIuY3BwCmluZGV4IDQzYjljM2YwODhiYWYzNGY4MTk4MGFkMzgz
OTExOWU4MjU2ODk1MDguLjAzNGU4YzdkZDcyYWNjMmI0MWVmYjhjYmRhMDk5YTg2MmQ3N2FmMTQg
MTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL2xvYWRlci9SZXNvdXJjZUxvYWRlci5jcHAKKysr
IGIvU291cmNlL1dlYkNvcmUvbG9hZGVyL1Jlc291cmNlTG9hZGVyLmNwcApAQCAtMzEsNyArMzEs
NiBAQAogI2luY2x1ZGUgIlJlc291cmNlTG9hZGVyLmgiCiAKICNpbmNsdWRlICJBcHBsaWNhdGlv
bkNhY2hlSG9zdC5oIgotI2luY2x1ZGUgIkFzeW5jRmlsZVN0cmVhbS5oIgogI2luY2x1ZGUgIkF1
dGhlbnRpY2F0aW9uQ2hhbGxlbmdlLmgiCiAjaW5jbHVkZSAiRG9jdW1lbnRMb2FkZXIuaCIKICNp
bmNsdWRlICJGcmFtZS5oIgpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vbmV0
d29yay9CbG9iUmVzb3VyY2VIYW5kbGUuY3BwIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vbmV0
d29yay9CbG9iUmVzb3VyY2VIYW5kbGUuY3BwCmluZGV4IGM0OTRlNTJjZGE4YjI3MDAzZGNhNTNm
NTU1OTI5ZmJjNGMyZGZmYjkuLjNlNWU2ZTNmMTY2ODA2OTUwMTkwMDk2MDYyZmUxNzFlZGI3Yjg2
YWEgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL25ldHdvcmsvQmxvYlJlc291
cmNlSGFuZGxlLmNwcAorKysgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9uZXR3b3JrL0Jsb2JS
ZXNvdXJjZUhhbmRsZS5jcHAKQEAgLTE3MSw3ICsxNzEsNyBAQCBCbG9iUmVzb3VyY2VIYW5kbGU6
OkJsb2JSZXNvdXJjZUhhbmRsZShCbG9iRGF0YSogYmxvYkRhdGEsIGNvbnN0IFJlc291cmNlUmVx
dWVzdAogICAgICwgbV9maWxlT3BlbmVkKGZhbHNlKQogewogICAgIGlmIChtX2FzeW5jKQotICAg
ICAgICBtX2FzeW5jU3RyZWFtID0gQXN5bmNGaWxlU3RyZWFtOjpjcmVhdGUodGhpcyk7CisgICAg
ICAgIG1fYXN5bmNTdHJlYW0gPSBBc3luY0ZpbGVTdHJlYW06OmNyZWF0ZSgqdGhpcyk7CiAgICAg
ZWxzZQogICAgICAgICBtX3N0cmVhbSA9IEZpbGVTdHJlYW06OmNyZWF0ZSgpOwogfQpkaWZmIC0t
Z2l0IGEvU291cmNlL1dlYkNvcmUvc3RvcmFnZS9TdG9yYWdlVGhyZWFkLmggYi9Tb3VyY2UvV2Vi
Q29yZS9zdG9yYWdlL1N0b3JhZ2VUaHJlYWQuaAppbmRleCAyNjNjNzhlODI2MmU5Y2ZkODY1ZGRk
NTkwMTk1NDkyZjVlNzg1MzlmLi5mNDUwZmI2MjNlMjg0ZGU2MjBjODE4ZTAzZjYxN2JkZmE4MTVh
MzViIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9zdG9yYWdlL1N0b3JhZ2VUaHJlYWQuaAor
KysgYi9Tb3VyY2UvV2ViQ29yZS9zdG9yYWdlL1N0b3JhZ2VUaHJlYWQuaApAQCAtNDYsNyArNDYs
NyBAQCBwdWJsaWM6CiAgICAgYm9vbCBzdGFydCgpOwogICAgIHZvaWQgdGVybWluYXRlKCk7CiAK
LSAgICB2b2lkIGRpc3BhdGNoKGNvbnN0IHN0ZDo6ZnVuY3Rpb248dm9pZCAoKT4mKTsKKyAgICB2
b2lkIGRpc3BhdGNoKGNvbnN0IHN0ZDo6ZnVuY3Rpb248dm9pZCgpPiYpOwogCiAgICAgc3RhdGlj
IHZvaWQgcmVsZWFzZUZhc3RNYWxsb2NGcmVlTWVtb3J5SW5BbGxUaHJlYWRzKCk7CiAKQEAgLTU5
LDcgKzU5LDcgQEAgcHJpdmF0ZToKICAgICB2b2lkIHBlcmZvcm1UZXJtaW5hdGUoKTsKIAogICAg
IFRocmVhZElkZW50aWZpZXIgbV90aHJlYWRJRDsKLSAgICBNZXNzYWdlUXVldWU8c3RkOjpmdW5j
dGlvbjx2b2lkICgpPj4gbV9xdWV1ZTsKKyAgICBNZXNzYWdlUXVldWU8c3RkOjp1bmlxdWVfcHRy
PHN0ZDo6ZnVuY3Rpb248dm9pZCgpPj4+IG1fcXVldWU7CiB9OwogCiB9IC8vIG5hbWVzcGFjZSBX
ZWJDb3JlCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS93b3JrZXJzL1dvcmtlclJ1bkxvb3Au
Y3BwIGIvU291cmNlL1dlYkNvcmUvd29ya2Vycy9Xb3JrZXJSdW5Mb29wLmNwcAppbmRleCBlNzk1
NjllYWIzOTVjNWY1MzU3MWM5YjQ2MWYwMmRjZmExYzRmNWJkLi5iODYyYWU5NGU0NzViZTI4ZDg2
YTU1ZjQxNDRkODlmNWI1Y2Y2ZDZiIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS93b3JrZXJz
L1dvcmtlclJ1bkxvb3AuY3BwCisrKyBiL1NvdXJjZS9XZWJDb3JlL3dvcmtlcnMvV29ya2VyUnVu
TG9vcC5jcHAKQEAgLTc2LDkgKzc2LDkgQEAgcHVibGljOgogICAgICAgICByZXR1cm4gbV9kZWZh
dWx0TW9kZTsKICAgICB9CiAKLSAgICBib29sIG9wZXJhdG9yKCkoY29uc3QgV29ya2VyUnVuTG9v
cDo6VGFzayYgdGFzaykgY29uc3QKKyAgICBib29sIG9wZXJhdG9yKCkoY29uc3Qgc3RkOjp1bmlx
dWVfcHRyPFdvcmtlclJ1bkxvb3A6OlRhc2s+JiB0YXNrKSBjb25zdAogICAgIHsKLSAgICAgICAg
cmV0dXJuIG1fZGVmYXVsdE1vZGUgfHwgbV9tb2RlID09IHRhc2subW9kZSgpOworICAgICAgICBy
ZXR1cm4gbV9kZWZhdWx0TW9kZSB8fCBtX21vZGUgPT0gdGFzay0+bW9kZSgpOwogICAgIH0KIAog
cHJpdmF0ZToKQEAgLTE1MCw3ICsxNTAsNyBAQCBNZXNzYWdlUXVldWVXYWl0UmVzdWx0IFdvcmtl
clJ1bkxvb3A6OnJ1bkluTW9kZShXb3JrZXJHbG9iYWxTY29wZSogY29udGV4dCwgY29ucwogCiAg
ICAgZG91YmxlIGFic29sdXRlVGltZSA9IDAuMDsKICAgICBpZiAod2FpdE1vZGUgPT0gV2FpdEZv
ck1lc3NhZ2UpCi0gICAgICAgIGFic29sdXRlVGltZSA9IChwcmVkaWNhdGUuaXNEZWZhdWx0TW9k
ZSgpICYmIG1fc2hhcmVkVGltZXItPmlzQWN0aXZlKCkpID8gbV9zaGFyZWRUaW1lci0+ZmlyZVRp
bWUoKSA6IE1lc3NhZ2VRdWV1ZTxUYXNrPjo6aW5maW5pdGVUaW1lKCk7CisgICAgICAgIGFic29s
dXRlVGltZSA9IChwcmVkaWNhdGUuaXNEZWZhdWx0TW9kZSgpICYmIG1fc2hhcmVkVGltZXItPmlz
QWN0aXZlKCkpID8gbV9zaGFyZWRUaW1lci0+ZmlyZVRpbWUoKSA6IE1lc3NhZ2VRdWV1ZTxzdGQ6
OnVuaXF1ZV9wdHI8VGFzaz4+OjppbmZpbml0ZVRpbWUoKTsKICAgICBNZXNzYWdlUXVldWVXYWl0
UmVzdWx0IHJlc3VsdDsKICAgICBhdXRvIHRhc2sgPSBtX21lc3NhZ2VRdWV1ZS53YWl0Rm9yTWVz
c2FnZUZpbHRlcmVkV2l0aFRpbWVvdXQocmVzdWx0LCBwcmVkaWNhdGUsIGFic29sdXRlVGltZSk7
CiAKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3dvcmtlcnMvV29ya2VyUnVuTG9vcC5oIGIv
U291cmNlL1dlYkNvcmUvd29ya2Vycy9Xb3JrZXJSdW5Mb29wLmgKaW5kZXggYTc2NzkxNzczNGU4
N2Y3YzlkYWNjNDI4ZWM1ZmQ5MmFlODM4YjE0ZC4uYmIxODllYTJhYzIxZTg4YTRhZDhkM2FmYTQ0
NDkwOTYxYjU2YWNlYiAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvd29ya2Vycy9Xb3JrZXJS
dW5Mb29wLmgKKysrIGIvU291cmNlL1dlYkNvcmUvd29ya2Vycy9Xb3JrZXJSdW5Mb29wLmgKQEAg
LTg4LDcgKzg4LDcgQEAgbmFtZXNwYWNlIFdlYkNvcmUgewogICAgICAgICAvLyBUaGlzIHNob3Vs
ZCBvbmx5IGJlIGNhbGxlZCB3aGVuIHRoZSBjb250ZXh0IGlzIGNsb3NlZCBvciBsb29wIGhhcyBi
ZWVuIHRlcm1pbmF0ZWQuCiAgICAgICAgIHZvaWQgcnVuQ2xlYW51cFRhc2tzKFdvcmtlckdsb2Jh
bFNjb3BlKik7CiAKLSAgICAgICAgTWVzc2FnZVF1ZXVlPFRhc2s+IG1fbWVzc2FnZVF1ZXVlOwor
ICAgICAgICBNZXNzYWdlUXVldWU8c3RkOjp1bmlxdWVfcHRyPFRhc2s+PiBtX21lc3NhZ2VRdWV1
ZTsKICAgICAgICAgc3RkOjp1bmlxdWVfcHRyPFdvcmtlclNoYXJlZFRpbWVyPiBtX3NoYXJlZFRp
bWVyOwogICAgICAgICBpbnQgbV9uZXN0ZWRDb3VudDsKICAgICAgICAgdW5zaWduZWQgbG9uZyBt
X3VuaXF1ZUlkOwo=
</data>

          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>241233</attachid>
            <date>2014-11-08 12:52:12 -0800</date>
            <delta_ts>2014-11-08 12:54:09 -0800</delta_ts>
            <desc>Patch</desc>
            <filename>bug-138282-20141108125212.patch</filename>
            <type>text/plain</type>
            <size>49558</size>
            <attacher name="Darin Adler">darin</attacher>
            
              <data encoding="base64">U3VidmVyc2lvbiBSZXZpc2lvbjogMTc1NzQwCmRpZmYgLS1naXQgYS9Tb3VyY2UvV1RGL0NoYW5n
ZUxvZyBiL1NvdXJjZS9XVEYvQ2hhbmdlTG9nCmluZGV4IDVlNDVkMzc5ZDgxOWExNjRhYTUyZGZj
MGJjZWQ1ZWYwYWI1MWZjOTcuLmM4ZGJkODU2OTc1YzI3ZTU4YzQ5YmVhNjdlN2RlZTdiYzY4ODBm
MGYgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XVEYvQ2hhbmdlTG9nCisrKyBiL1NvdXJjZS9XVEYvQ2hh
bmdlTG9nCkBAIC0xLDMgKzEsMjMgQEAKKzIwMTQtMTEtMDggIERhcmluIEFkbGVyICA8ZGFyaW5A
YXBwbGUuY29tPgorCisgICAgICAgIFJlcGxhY2UgRmlsZVRocmVhZCBjbGFzcyB3aXRoIGEgc2lu
Z2xlIGZ1bmN0aW9uCisgICAgICAgIGh0dHBzOi8vYnVncy53ZWJraXQub3JnL3Nob3dfYnVnLmNn
aT9pZD0xMzgyODIKKworICAgICAgICBSZXZpZXdlZCBieSBBbGV4ZXkgUHJvc2t1cnlha292Lgor
CisgICAgICAgICogd3RmL01lc3NhZ2VRdWV1ZS5oOiBNYWRlIHF1ZXVlIHdvcmsgb24gYW55IHR5
cGUgYW5kIG5vdCByZXF1aXJlIHdyYXBwaW5nCisgICAgICAgIGV2ZXJ5dGhpbmcgaW4gYSB1bmlx
dWVfcHRyLgorCisgICAgICAgICogd3RmL1RocmVhZGluZy5jcHA6CisgICAgICAgIChXVEY6OnRo
cmVhZEVudHJ5UG9pbnQpOiBDaGFuZ2VkIHRvIHVzZSBhIHN0ZDo6ZnVuY3Rpb24gaW5zdGVhZCBv
ZiBhIGZ1bmN0aW9uIHBvaW50ZXIuCisgICAgICAgIChXVEY6OmNyZWF0ZVRocmVhZCk6IEFkZCBh
IHZlcnNpb24gdGhhdCB0YWtlcyBhIHN0ZDo6ZnVuY3Rpb24uIFJlaW1wbGVtZW50ZWQgdGhlCisg
ICAgICAgIG9sZCB2ZXJzaW9uIHVzaW5nIGxhbWJkYXMuIFJlbW92ZWQgdGhlIG9ic29sZXRlIHZl
cnNpb25zIHRoYXQgd2VyZSB0aGVyZSBqdXN0IHRvIHN1cHBvcnQKKyAgICAgICAgYmluYXJ5IGNv
bXBhdGliaWxpdHkgd2l0aCB2ZXJ5IG9sZCB2ZXJzaW9ucyBvZiBTYWZhcmkuCisKKyAgICAgICAg
KiB3dGYvVGhyZWFkaW5nLmg6IFJlbW92ZWQgYW4gaW5jb3JyZWN0IGxpY2Vuc2UgaGVhZGVyIHRo
YXQgY292ZXJzIGNvZGUgdGhhdCB3YXMgbG9uZyBhZ28KKyAgICAgICAgbW92ZWQgdG8gYSBkaWZm
ZXJlbnQgZmlsZS4gQ2hhbmdlZCBjcmVhdGVUaHJlYWQgdG8gdGFrZSBhIHN0ZDo6ZnVuY3Rpb24g
aW5zdGVhZCBvZiBhIGZ1bmN0aW9uCisgICAgICAgIHBvaW50ZXIgYW5kIGRhdGEgcG9pbnRlci4g
TW92ZWQgaW50ZXJuYWwgZnVuY3Rpb25zIGFmdGVyIHB1YmxpYyBmdW5jdGlvbnMuCisKIDIwMTQt
MTEtMDUgIENocmlzIER1bWV6ICA8Y2R1bWV6QGFwcGxlLmNvbT4KIAogICAgICAgICBBc3NlcnRp
b24gaGl0IERPTVRpbWVyOjp1cGRhdGVUaW1lckludGVydmFsSWZOZWNlc3NhcnkoKQpkaWZmIC0t
Z2l0IGEvU291cmNlL1dlYkNvcmUvQ2hhbmdlTG9nIGIvU291cmNlL1dlYkNvcmUvQ2hhbmdlTG9n
CmluZGV4IGUxYWZiODAyNDJhMmU3OGIxZjRkMTc1Yjk3Yzc4MTM5MTRlMTU5YzQuLjk1ODNiNGRl
YTVhZjRlYjAzYjZlMDU5NjljOTBiYWE1NGMyNGM1NTAgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJD
b3JlL0NoYW5nZUxvZworKysgYi9Tb3VyY2UvV2ViQ29yZS9DaGFuZ2VMb2cKQEAgLTEsMyArMSw3
NyBAQAorMjAxNC0xMS0wOCAgRGFyaW4gQWRsZXIgIDxkYXJpbkBhcHBsZS5jb20+CisKKyAgICAg
ICAgUmVwbGFjZSBGaWxlVGhyZWFkIGNsYXNzIHdpdGggYSBzaW5nbGUgZnVuY3Rpb24KKyAgICAg
ICAgaHR0cHM6Ly9idWdzLndlYmtpdC5vcmcvc2hvd19idWcuY2dpP2lkPTEzODI4MgorCisgICAg
ICAgIFJldmlld2VkIGJ5IE5PQk9EWSAoT09QUyEpLgorCisgICAgICAgICogQ01ha2VMaXN0cy50
eHQ6IFJlbW92ZWQgRmlsZVRocmVhZC5jcHAuCisKKyAgICAgICAgKiBXZWJDb3JlLnZjeHByb2ov
V2ViQ29yZS52Y3hwcm9qOiBSZW1vdmVkIEZpbGVUaHJlYWQuY3BwLy5oLgorICAgICAgICAqIFdl
YkNvcmUudmN4cHJvai9XZWJDb3JlLnZjeHByb2ouZmlsdGVyczogRGl0dG8uCisgICAgICAgICog
V2ViQ29yZS54Y29kZXByb2ovcHJvamVjdC5wYnhwcm9qOiBEaXR0by4KKworICAgICAgICAqIGJp
bmRpbmdzL2dlbmVyaWMvQWN0aXZlRE9NQ2FsbGJhY2suY3BwOiBSZW1vdmVkIHVubmVlZGVkIGlu
Y2x1ZGVzLgorICAgICAgICAqIGRvbS9BY3RpdmVET01PYmplY3QuY3BwOiBEaXR0by4KKworICAg
ICAgICAqIGZpbGVhcGkvQXN5bmNGaWxlU3RyZWFtLmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OmNh
bGxPbkZpbGVUaHJlYWQpOiBBZGRlZC4gSW1wbGVtZW50cyB0aGUgZmlsZSB0aHJlYWQuCisgICAg
ICAgIChXZWJDb3JlOjpBc3luY0ZpbGVTdHJlYW06OkFzeW5jRmlsZVN0cmVhbSk6IFRha2UgYSBy
ZWZlcmVuY2UgdG8gdGhlIGNsaWVudC4KKyAgICAgICAgTWFrZSBtX2ludGVybmFscy4gVXNlIHRo
ZSBkZXN0cm95ZWQgZmxhZyBpbnN0ZWFkIG9mIHRyaWNraWVyIHRlY2huaXF1ZXMgdG8KKyAgICAg
ICAgaGFuZGxlIHN0b3BwaW5nLiBPbmNlIHRoZSBzdHJlYW0gaXMgZGVzdHJveWVkLCB0aGVyZSB3
aWxsIGJlIG5vIGZ1cnRoZXIgY2FsbGJhY2tzLgorICAgICAgICAoV2ViQ29yZTo6QXN5bmNGaWxl
U3RyZWFtOjp+QXN5bmNGaWxlU3RyZWFtKTogQWRkZWQgYXNzZXJ0aW9ucyBhbmQgbWVyZ2VkIGlu
IHRoZQorICAgICAgICBzdG9wIGJlaGF2aW9yIGhlcmUuIFRoaXMgY2xhc3Mgbm8gbG9uZ2VyIHJl
cXVpcmVzIGFuIGV4cGxpY2l0IHN0b3AgZnVuY3Rpb24uCisgICAgICAgIChXZWJDb3JlOjpBc3lu
Y0ZpbGVTdHJlYW06OnBlcmZvcm0pOiBBZGRlZC4gSGVscGVyIHVzZWQgZm9yIGFsbCB0aGUgb3Bl
cmF0aW9ucworICAgICAgICBiZWxvdy4gVGFrZXMgYSBmdW5jdGlvbiB0aGF0IHBlcmZvcm1zIGFu
IG9wZXJhdGlvbiBhbmQgdGhlbiByZXR1cm5zIGEgY2xpZW50CisgICAgICAgIGNhbGxiYWNrIGZ1
bmN0aW9uLiBSZXNwZWN0cyB0aGUgbV9zdG9wcGVkIGJvb2xlYW4gb24gdGhlIGZpbGUgdGhyZWFk
IChzbyB3ZQorICAgICAgICBkb24ndCBkbyBleHRyYSBvcGVyYXRpb25zKSBhbmQgb24gdGhlIGNs
aWVudCB0aHJlYWQgKHNvIHdlIGFyZSBndWFyYW50ZWVkIG5vdAorICAgICAgICB0byBnZXQgYW55
IGNsaWVudCBjYWxsYmFja3MgZXZlbiBpZiB0aGUgZmlsZSB0aHJlYWQgd2FzIHBhcnR3YXkgdGhy
b3VnaCBhbgorICAgICAgICBvcGVyYXRpb24pLgorICAgICAgICAoV2ViQ29yZTo6QXN5bmNGaWxl
U3RyZWFtOjpnZXRTaXplKTogQ2hhbmdlZCB0byB1c2UgdGhlIHBlcmZvcm0gZnVuY3Rpb24uCisg
ICAgICAgIChXZWJDb3JlOjpBc3luY0ZpbGVTdHJlYW06Om9wZW5Gb3JSZWFkKTogRGl0dG8uIEFs
c28gZml4ZWQgcmVmZXJlbmNlIGNvdW50CisgICAgICAgIHRocmVhZCBzYWZldHkgaXNzdWUgYnkg
Y2FwdHVyaW5nIGEgU3RyaW5nQ2FwdHVyZSByYXRoZXIgdGhhbiBhIFN0cmluZy4KKyAgICAgICAg
KFdlYkNvcmU6OkFzeW5jRmlsZVN0cmVhbTo6b3BlbkZvcldyaXRlKTogRGl0dG8uCisgICAgICAg
IChXZWJDb3JlOjpBc3luY0ZpbGVTdHJlYW06OmNsb3NlKTogQ2hhbmdlZCB0byB1c2UgY2FsbE9u
RmlsZVRocmVhZC4KKyAgICAgICAgKFdlYkNvcmU6OkFzeW5jRmlsZVN0cmVhbTo6cmVhZCk6IENo
YW5nZWQgdG8gdXNlIHRoZSBwZXJmb3JtIGZ1bmN0aW9uLgorICAgICAgICAoV2ViQ29yZTo6QXN5
bmNGaWxlU3RyZWFtOjp3cml0ZSk6IERpdHRvLiBBbHNvIGZpeGVkIHJlZmVyZW5jZSBjb3VudAor
ICAgICAgICB0aHJlYWQgc2FmZXR5IGlzc3VlIGJ5IGNhcHR1cmluZyBhIFN0cmluZ0NhcHR1cmUg
cmF0aGVyIHRoYW4gYSBVUkwuCisgICAgICAgIChXZWJDb3JlOjpBc3luY0ZpbGVTdHJlYW06OnRy
dW5jYXRlKTogRGl0dG8uCisKKyAgICAgICAgKiBmaWxlYXBpL0FzeW5jRmlsZVN0cmVhbS5oOiBS
ZW1vdmVkIHVzZSBvZiBSZWZDb3VudGVkIHNpbmNlIHdlIG9ubHkgbmVlZAorICAgICAgICBzaW5n
bGUgb3duZXJzaGlwLiBSZW1vdmVkIHRoZSBzdG9wIGZ1bmN0aW9uLCBzaW5jZSB3ZSBjYW4gbm93
IHN0b3Agd2hlbgorICAgICAgICB0aGUgc3RyZWFtIGlzIGRlc3Ryb3llZCBzaW5jZSB3ZSBoYXZl
IHNpbmdsZSBvd25lcnNoaXAuIE1hZGUgYSBuZXcgSW50ZXJuYWxzCisgICAgICAgIG9iamVjdCB0
byBoYW5kbGUgZGVzdHJ1Y3Rpb24gd2hpbGUgb3BlcmF0aW9ucyBhcmUgc3RpbGwgZ29pbmcgb24g
dGhlIGZpbGUgdGhyZWFkLgorCisgICAgICAgICogZmlsZWFwaS9GaWxlVGhyZWFkLmNwcDogUmVt
b3ZlZC4KKyAgICAgICAgKiBmaWxlYXBpL0ZpbGVUaHJlYWQuaDogUmVtb3ZlZC4KKworICAgICAg
ICAqIGxvYWRlci9SZXNvdXJjZUxvYWRlci5jcHA6IFJlbW92ZWQgdW5uZWVkZWQgaW5jbHVkZS4K
KworICAgICAgICAqIHBsYXRmb3JtL0ZpbGVTdHJlYW0uY3BwOgorICAgICAgICAoV2ViQ29yZTo6
RmlsZVN0cmVhbTo6fkZpbGVTdHJlYW0pOiBNZXJnZWQgdGhlIHN0b3AgZnVuY3Rpb24gaW4gaGVy
ZS4KKworICAgICAgICAqIHBsYXRmb3JtL0ZpbGVTdHJlYW0uaDogUmVtb3ZlZCB1c2Ugb2YgUmVm
Q291bnRlZCBzaW5jZSB3ZSBvbmx5IG5lZWQKKyAgICAgICAgc2luZ2xlIG93bmVyc2hpcC4gUmVt
b3ZlZCB0aGUgZW1wdHkgc3RhcnQgZnVuY3Rpb24uIFJlbW92ZWQgdGhlIHN0b3AgZnVuY3Rpb24s
CisgICAgICAgIHNpbmNlIHdlIGNhbiBub3cgc3RvcCB3aGVuIHRoZSBzdHJlYW0gaXMgZGVzdHJv
eWVkIHNpbmNlIHdlIGhhdmUgc2luZ2xlIG93bmVyc2hpcC4KKworICAgICAgICAqIHBsYXRmb3Jt
L0ZpbGVTdHJlYW1DbGllbnQuaDogUmVtb3ZlZCB1bm5lZWRlZCBkaWRTdGFydCBhbmQgZGlkU3Rv
cC4KKworICAgICAgICAqIHBsYXRmb3JtL25ldHdvcmsvQmxvYlJlc291cmNlSGFuZGxlLmNwcDoK
KyAgICAgICAgKFdlYkNvcmU6OkJsb2JSZXNvdXJjZUhhbmRsZTo6QmxvYlJlc291cmNlSGFuZGxl
KTogVXNlIG1ha2VfdW5pcXVlIHRvIG1ha2UgdGhlCisgICAgICAgIHN0cmVhbSBvYmplY3RzIGlu
c3RlYWQgb2YgY3VzdG9tIGNyZWF0ZSBmdW5jdGlvbnMuCisgICAgICAgIChXZWJDb3JlOjpCbG9i
UmVzb3VyY2VIYW5kbGU6On5CbG9iUmVzb3VyY2VIYW5kbGUpOiBSZW1vdmVkIG5vdy11bm5lZWRl
ZCBjb2RlCisgICAgICAgIHRvIGNhbGwgc3RvcCBmdW5jdGlvbnMuIERlc3Ryb3lpbmcgdGhlIG9i
amVjdHMgbm93IHRha2VzIGNhcmUgb2YgdGhlIHRoaXMsIGFuZAorICAgICAgICB0aGF0J3MgZG9u
ZSBieSB0aGUgdW5pcXVlX3B0cnMuCisgICAgICAgIChXZWJDb3JlOjpCbG9iUmVzb3VyY2VIYW5k
bGU6OmNhbmNlbCk6IFJlbW92ZWQgdGhlIHJlc3Qgb2YgdGhlIGNvZGUgdG8gc3RvcCB0aGUKKyAg
ICAgICAgbV9hc3luY1N0cmVhbSwga2VlcGluZyBvbmx5IHRoZSBjb2RlIHRoYXQgc2V0cyBpdCB0
byBudWxsLiBUaGF0IG5vdyBzdG9wcyB0aGUKKyAgICAgICAgc3RyZWFtIGJ5IGRlc3Ryb3lpbmcg
aXQuCisKKyAgICAgICAgKiBwbGF0Zm9ybS9uZXR3b3JrL0Jsb2JSZXNvdXJjZUhhbmRsZS5oOiBV
c2Ugc3RkOjp1bmlxdWVfcHRyIHJhdGhlciB0aGFuCisgICAgICAgIFJlZlB0ciBmb3IgdGhlIGZp
bGUgc3RyZWFtIG9iamVjdHMuCisKKyAgICAgICAgKiBzdG9yYWdlL1N0b3JhZ2VUaHJlYWQuaDog
VHdlYWtlZCBmb3JtYXR0aW5nIG9mIHN0ZDo6ZnVuY3Rpb248dm9pZCgpPiB0bworICAgICAgICBt
YXRjaCB0aGUgZm9ybWF0IHVzZWQgZWxzZXdoZXJlIGluIFdlYktpdC4KKwogMjAxNC0xMS0wNiAg
RGFyaW4gQWRsZXIgIDxkYXJpbkBhcHBsZS5jb20+CiAKICAgICAgICAgUkVHUkVTU0lPTiAocjE3
NTU0OSk6IGh0dHAvdGVzdHMvbXVsdGlwYXJ0L3N0b3AtY3Jhc2guaHRtbCBmYWlsaW5nIChhc3Nl
cnRpb24gZmFpbHVyZSBpbiBDYWNoZWRSZXNvdXJjZTo6c2V0RW5jb2RlZFNpemUpCmRpZmYgLS1n
aXQgYS9Tb3VyY2UvV1RGL3d0Zi9UaHJlYWRpbmcuY3BwIGIvU291cmNlL1dURi93dGYvVGhyZWFk
aW5nLmNwcAppbmRleCBjOGQ5OTZiNWE4NWVkMDRlZDVhMzk5YWVlYWQxNDU5NjU0MzhlOTBkLi4x
Nzc2NTk4NzM3ZDhjYjFkNzNjNTFmNTMzMzc1ODIwNjQ4ZTllZDFlIDEwMDY0NAotLS0gYS9Tb3Vy
Y2UvV1RGL3d0Zi9UaHJlYWRpbmcuY3BwCisrKyBiL1NvdXJjZS9XVEYvd3RmL1RocmVhZGluZy5j
cHAKQEAgLTEsNSArMSw1IEBACiAvKgotICogQ29weXJpZ2h0IChDKSAyMDA4LCAyMDA5IEFwcGxl
IEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqIENvcHlyaWdodCAoQykgMjAwOCwgMjAwOSwg
MjAxNCBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCiAgKgogICogUmVkaXN0cmlidXRp
b24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CiAg
KiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5n
IGNvbmRpdGlvbnMKQEAgLTMzLDIzICszMywxNCBAQCBuYW1lc3BhY2UgV1RGIHsKIHN0cnVjdCBO
ZXdUaHJlYWRDb250ZXh0IHsKICAgICBXVEZfTUFLRV9GQVNUX0FMTE9DQVRFRDsKIHB1YmxpYzoK
LSAgICBOZXdUaHJlYWRDb250ZXh0KFRocmVhZEZ1bmN0aW9uIGVudHJ5UG9pbnQsIHZvaWQqIGRh
dGEsIGNvbnN0IGNoYXIqIG5hbWUpCi0gICAgICAgIDogZW50cnlQb2ludChlbnRyeVBvaW50KQot
ICAgICAgICAsIGRhdGEoZGF0YSkKLSAgICAgICAgLCBuYW1lKG5hbWUpCi0gICAgewotICAgIH0K
LQotICAgIFRocmVhZEZ1bmN0aW9uIGVudHJ5UG9pbnQ7Ci0gICAgdm9pZCogZGF0YTsKICAgICBj
b25zdCBjaGFyKiBuYW1lOwotCisgICAgc3RkOjpmdW5jdGlvbjx2b2lkKCk+IGVudHJ5UG9pbnQ7
CiAgICAgTXV0ZXggY3JlYXRpb25NdXRleDsKIH07CiAKIHN0YXRpYyB2b2lkIHRocmVhZEVudHJ5
UG9pbnQodm9pZCogY29udGV4dERhdGEpCiB7Ci0gICAgTmV3VGhyZWFkQ29udGV4dCogY29udGV4
dCA9IHJlaW50ZXJwcmV0X2Nhc3Q8TmV3VGhyZWFkQ29udGV4dCo+KGNvbnRleHREYXRhKTsKKyAg
ICBOZXdUaHJlYWRDb250ZXh0KiBjb250ZXh0ID0gc3RhdGljX2Nhc3Q8TmV3VGhyZWFkQ29udGV4
dCo+KGNvbnRleHREYXRhKTsKIAogICAgIC8vIEJsb2NrIHVudGlsIG91ciBjcmVhdGluZyB0aHJl
YWQgaGFzIGNvbXBsZXRlZCBhbnkgZXh0cmEgc2V0dXAgd29yaywgaW5jbHVkaW5nCiAgICAgLy8g
ZXN0YWJsaXNoaW5nIFRocmVhZElkZW50aWZpZXIuCkBAIC01OSwxNSArNTAsMTUgQEAgc3RhdGlj
IHZvaWQgdGhyZWFkRW50cnlQb2ludCh2b2lkKiBjb250ZXh0RGF0YSkKIAogICAgIGluaXRpYWxp
emVDdXJyZW50VGhyZWFkSW50ZXJuYWwoY29udGV4dC0+bmFtZSk7CiAKLSAgICAvLyBHcmFiIHRo
ZSBpbmZvIHRoYXQgd2UgbmVlZCBvdXQgb2YgdGhlIGNvbnRleHQsIHRoZW4gZGVhbGxvY2F0ZSBp
dC4KLSAgICBUaHJlYWRGdW5jdGlvbiBlbnRyeVBvaW50ID0gY29udGV4dC0+ZW50cnlQb2ludDsK
LSAgICB2b2lkKiBkYXRhID0gY29udGV4dC0+ZGF0YTsKKyAgICBhdXRvIGVudHJ5UG9pbnQgPSBX
VEY6Om1vdmUoY29udGV4dC0+ZW50cnlQb2ludCk7CisKKyAgICAvLyBEZWxldGUgdGhlIGNvbnRl
eHQgYmVmb3JlIHN0YXJ0aW5nIHRoZSB0aHJlYWQuCiAgICAgZGVsZXRlIGNvbnRleHQ7CiAKLSAg
ICBlbnRyeVBvaW50KGRhdGEpOworICAgIGVudHJ5UG9pbnQoKTsKIH0KIAotVGhyZWFkSWRlbnRp
ZmllciBjcmVhdGVUaHJlYWQoVGhyZWFkRnVuY3Rpb24gZW50cnlQb2ludCwgdm9pZCogZGF0YSwg
Y29uc3QgY2hhciogbmFtZSkKK1RocmVhZElkZW50aWZpZXIgY3JlYXRlVGhyZWFkKGNvbnN0IGNo
YXIqIG5hbWUsIHN0ZDo6ZnVuY3Rpb248dm9pZCgpPiBlbnRyeVBvaW50KQogewogICAgIC8vIFZp
c3VhbCBTdHVkaW8gaGFzIGEgMzEtY2hhcmFjdGVyIGxpbWl0IG9uIHRocmVhZCBuYW1lcy4gTG9u
Z2VyIG5hbWVzIHdpbGwKICAgICAvLyBiZSB0cnVuY2F0ZWQgc2lsZW50bHksIGJ1dCB3ZSdkIGxp
a2UgY2FsbGVycyB0byBrbm93IGFib3V0IHRoZSBsaW1pdC4KQEAgLTc2LDcgKzY3LDcgQEAgVGhy
ZWFkSWRlbnRpZmllciBjcmVhdGVUaHJlYWQoVGhyZWFkRnVuY3Rpb24gZW50cnlQb2ludCwgdm9p
ZCogZGF0YSwgY29uc3QgY2hhcioKICAgICAgICAgTE9HX0VSUk9SKCJUaHJlYWQgbmFtZSBcIiVz
XCIgaXMgbG9uZ2VyIHRoYW4gMzEgY2hhcmFjdGVycyBhbmQgd2lsbCBiZSB0cnVuY2F0ZWQgYnkg
VmlzdWFsIFN0dWRpbyIsIG5hbWUpOwogI2VuZGlmCiAKLSAgICBOZXdUaHJlYWRDb250ZXh0KiBj
b250ZXh0ID0gbmV3IE5ld1RocmVhZENvbnRleHQoZW50cnlQb2ludCwgZGF0YSwgbmFtZSk7Cisg
ICAgTmV3VGhyZWFkQ29udGV4dCogY29udGV4dCA9IG5ldyBOZXdUaHJlYWRDb250ZXh0IHsgbmFt
ZSwgV1RGOjptb3ZlKGVudHJ5UG9pbnQpLCB7IH0gfTsKIAogICAgIC8vIFByZXZlbnQgdGhlIHRo
cmVhZCBib2R5IGZyb20gZXhlY3V0aW5nIHVudGlsIHdlJ3ZlIGVzdGFibGlzaGVkIHRoZSB0aHJl
YWQgaWRlbnRpZmllci4KICAgICBNdXRleExvY2tlciBsb2NrZXIoY29udGV4dC0+Y3JlYXRpb25N
dXRleCk7CkBAIC04NCw2ICs3NSwxMyBAQCBUaHJlYWRJZGVudGlmaWVyIGNyZWF0ZVRocmVhZChU
aHJlYWRGdW5jdGlvbiBlbnRyeVBvaW50LCB2b2lkKiBkYXRhLCBjb25zdCBjaGFyKgogICAgIHJl
dHVybiBjcmVhdGVUaHJlYWRJbnRlcm5hbCh0aHJlYWRFbnRyeVBvaW50LCBjb250ZXh0LCBuYW1l
KTsKIH0KIAorVGhyZWFkSWRlbnRpZmllciBjcmVhdGVUaHJlYWQoVGhyZWFkRnVuY3Rpb24gZW50
cnlQb2ludCwgdm9pZCogZGF0YSwgY29uc3QgY2hhciogbmFtZSkKK3sKKyAgICByZXR1cm4gY3Jl
YXRlVGhyZWFkKG5hbWUsIFtlbnRyeVBvaW50LCBkYXRhXSB7CisgICAgICAgIGVudHJ5UG9pbnQo
ZGF0YSk7CisgICAgfSk7Cit9CisKIHZvaWQgc2V0Q3VycmVudFRocmVhZElzVXNlckludGVyYWN0
aXZlKCkKIHsKICNpZiBIQVZFKFFPU19DTEFTU0VTKQpAQCAtOTgsNjEgKzk2LDQgQEAgdm9pZCBz
ZXRDdXJyZW50VGhyZWFkSXNVc2VySW5pdGlhdGVkKCkKICNlbmRpZgogfQogCi0jaWYgUExBVEZP
Uk0oTUFDKSB8fCBQTEFURk9STShXSU4pCi0KLS8vIEZvciBBQkkgY29tcGF0aWJpbGl0eSB3aXRo
IFNhZmFyaSBvbiBNYWMgLyBXaW5kb3dzOiBTYWZhcmkgdXNlcyB0aGUgcHJpdmF0ZQotLy8gY3Jl
YXRlVGhyZWFkKCkgYW5kIHdhaXRGb3JUaHJlYWRDb21wbGV0aW9uKCkgZnVuY3Rpb25zIGRpcmVj
dGx5IGFuZCB3ZSBuZWVkCi0vLyB0byBrZWVwIHRoZSBvbGQgQUJJIGNvbXBhdGliaWxpdHkgdW50
aWwgaXQncyBiZWVuIHJlYnVpbHQuCi0KLXR5cGVkZWYgdm9pZCogKCpUaHJlYWRGdW5jdGlvbldp
dGhSZXR1cm5WYWx1ZSkodm9pZCogYXJndW1lbnQpOwotCi1XVEZfRVhQT1JUX1BSSVZBVEUgVGhy
ZWFkSWRlbnRpZmllciBjcmVhdGVUaHJlYWQoVGhyZWFkRnVuY3Rpb25XaXRoUmV0dXJuVmFsdWUg
ZW50cnlQb2ludCwgdm9pZCogZGF0YSwgY29uc3QgY2hhciogbmFtZSk7Ci0KLXN0cnVjdCBUaHJl
YWRGdW5jdGlvbldpdGhSZXR1cm5WYWx1ZUludm9jYXRpb24gewotICAgIFRocmVhZEZ1bmN0aW9u
V2l0aFJldHVyblZhbHVlSW52b2NhdGlvbihUaHJlYWRGdW5jdGlvbldpdGhSZXR1cm5WYWx1ZSBm
dW5jdGlvbiwgdm9pZCogZGF0YSkKLSAgICAgICAgOiBmdW5jdGlvbihmdW5jdGlvbikKLSAgICAg
ICAgLCBkYXRhKGRhdGEpCi0gICAgewotICAgIH0KLQotICAgIFRocmVhZEZ1bmN0aW9uV2l0aFJl
dHVyblZhbHVlIGZ1bmN0aW9uOwotICAgIHZvaWQqIGRhdGE7Ci19OwotCi1zdGF0aWMgdm9pZCBj
b21wYXRFbnRyeVBvaW50KHZvaWQqIHBhcmFtKQotewotICAgIC8vIEJhbGFuY2VkIGJ5IC5yZWxl
YXNlKCkgaW4gY3JlYXRlVGhyZWFkLgotICAgIGF1dG8gaW52b2NhdGlvbiA9IHN0ZDo6dW5pcXVl
X3B0cjxUaHJlYWRGdW5jdGlvbldpdGhSZXR1cm5WYWx1ZUludm9jYXRpb24+KHN0YXRpY19jYXN0
PFRocmVhZEZ1bmN0aW9uV2l0aFJldHVyblZhbHVlSW52b2NhdGlvbio+KHBhcmFtKSk7Ci0gICAg
aW52b2NhdGlvbi0+ZnVuY3Rpb24oaW52b2NhdGlvbi0+ZGF0YSk7Ci19Ci0KLVRocmVhZElkZW50
aWZpZXIgY3JlYXRlVGhyZWFkKFRocmVhZEZ1bmN0aW9uV2l0aFJldHVyblZhbHVlIGVudHJ5UG9p
bnQsIHZvaWQqIGRhdGEsIGNvbnN0IGNoYXIqIG5hbWUpCi17Ci0gICAgYXV0byBpbnZvY2F0aW9u
ID0gc3RkOjptYWtlX3VuaXF1ZTxUaHJlYWRGdW5jdGlvbldpdGhSZXR1cm5WYWx1ZUludm9jYXRp
b24+KGVudHJ5UG9pbnQsIGRhdGEpOwotCi0gICAgLy8gQmFsYW5jZWQgYnkgc3RkOjp1bmlxdWVf
cHRyIGNvbnN0cnVjdG9yIGluIGNvbXBhdEVudHJ5UG9pbnQuCi0gICAgcmV0dXJuIGNyZWF0ZVRo
cmVhZChjb21wYXRFbnRyeVBvaW50LCBpbnZvY2F0aW9uLnJlbGVhc2UoKSwgbmFtZSk7Ci19Ci0K
LVdURl9FWFBPUlRfUFJJVkFURSBpbnQgd2FpdEZvclRocmVhZENvbXBsZXRpb24oVGhyZWFkSWRl
bnRpZmllciwgdm9pZCoqKTsKLQotaW50IHdhaXRGb3JUaHJlYWRDb21wbGV0aW9uKFRocmVhZElk
ZW50aWZpZXIgdGhyZWFkSUQsIHZvaWQqKikKLXsKLSAgICByZXR1cm4gd2FpdEZvclRocmVhZENv
bXBsZXRpb24odGhyZWFkSUQpOwotfQotCi0vLyBUaGlzIGZ1bmN0aW9uIGlzIGRlcHJlY2F0ZWQg
YnV0IG5lZWRzIHRvIGJlIGtlcHQgYXJvdW5kIGZvciBiYWNrd2FyZAotLy8gY29tcGF0aWJpbGl0
eS4gVXNlIHRoZSAzLWFyZ3VtZW50IHZlcnNpb24gb2YgY3JlYXRlVGhyZWFkIGFib3ZlLgotCi1X
VEZfRVhQT1JUX1BSSVZBVEUgVGhyZWFkSWRlbnRpZmllciBjcmVhdGVUaHJlYWQoVGhyZWFkRnVu
Y3Rpb25XaXRoUmV0dXJuVmFsdWUgZW50cnlQb2ludCwgdm9pZCogZGF0YSk7Ci0KLVRocmVhZElk
ZW50aWZpZXIgY3JlYXRlVGhyZWFkKFRocmVhZEZ1bmN0aW9uV2l0aFJldHVyblZhbHVlIGVudHJ5
UG9pbnQsIHZvaWQqIGRhdGEpCi17Ci0gICAgYXV0byBpbnZvY2F0aW9uID0gc3RkOjptYWtlX3Vu
aXF1ZTxUaHJlYWRGdW5jdGlvbldpdGhSZXR1cm5WYWx1ZUludm9jYXRpb24+KGVudHJ5UG9pbnQs
IGRhdGEpOwotCi0gICAgLy8gQmFsYW5jZWQgYnkgYWRvcHRQdHIoKSBpbiBjb21wYXRFbnRyeVBv
aW50LgotICAgIHJldHVybiBjcmVhdGVUaHJlYWQoY29tcGF0RW50cnlQb2ludCwgaW52b2NhdGlv
bi5yZWxlYXNlKCksIDApOwotfQotI2VuZGlmCi0KIH0gLy8gbmFtZXNwYWNlIFdURgpkaWZmIC0t
Z2l0IGEvU291cmNlL1dURi93dGYvVGhyZWFkaW5nLmggYi9Tb3VyY2UvV1RGL3d0Zi9UaHJlYWRp
bmcuaAppbmRleCAzNjZkZmJiOThjZDBjZmY2ZGJiNDQ2YTJlMjhhM2RiYjY4NjNlYzMxLi41OTA2
ZmY3NGExZTYxZmYzZmE4Y2Q3YTI5MmVlZTc1MTYzNzQ2ZTA1IDEwMDY0NAotLS0gYS9Tb3VyY2Uv
V1RGL3d0Zi9UaHJlYWRpbmcuaAorKysgYi9Tb3VyY2UvV1RGL3d0Zi9UaHJlYWRpbmcuaApAQCAt
MSw1ICsxLDUgQEAKIC8qCi0gKiBDb3B5cmlnaHQgKEMpIDIwMDcsIDIwMDgsIDIwMTAgQXBwbGUg
SW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICogQ29weXJpZ2h0IChDKSAyMDA3LCAyMDA4LCAy
MDEwLCAyMDE0IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KICAqIENvcHlyaWdodCAo
QykgMjAwNyBKdXN0aW4gSGF5Z29vZCAoamhheWdvb2RAcmVha3RpeC5jb20pCiAgKgogICogUmVk
aXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3
aXRob3V0CkBAIC0yNSw0MCArMjUsMTYgQEAKICAqIE9OIEFOWSBUSEVPUlkgT0YgTElBQklMSVRZ
LCBXSEVUSEVSIElOIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUCiAgKiAoSU5D
TFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9G
IFRIRSBVU0UgT0YKICAqIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUgUE9T
U0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCi0gKgotICoKLSAqIE5vdGU6IFRoZSBpbXBsZW1lbnRh
dGlvbnMgb2YgSW50ZXJsb2NrZWRJbmNyZW1lbnQgYW5kIEludGVybG9ja2VkRGVjcmVtZW50IGFy
ZSBiYXNlZAotICogb24gYXRvbWljX2luY3JlbWVudCBhbmQgYXRvbWljX2V4Y2hhbmdlX2FuZF9h
ZGQgZnJvbSB0aGUgQm9vc3QgQysrIExpYnJhcnkuIFRoZSBsaWNlbnNlCi0gKiBpcyB2aXJ0dWFs
bHkgaWRlbnRpY2FsIHRvIHRoZSBBcHBsZSBsaWNlbnNlIGFib3ZlIGJ1dCBpcyBpbmNsdWRlZCBo
ZXJlIGZvciBjb21wbGV0ZW5lc3MuCi0gKgotICogQm9vc3QgU29mdHdhcmUgTGljZW5zZSAtIFZl
cnNpb24gMS4wIC0gQXVndXN0IDE3dGgsIDIwMDMKLSAqIAotICogUGVybWlzc2lvbiBpcyBoZXJl
YnkgZ3JhbnRlZCwgZnJlZSBvZiBjaGFyZ2UsIHRvIGFueSBwZXJzb24gb3Igb3JnYW5pemF0aW9u
Ci0gKiBvYnRhaW5pbmcgYSBjb3B5IG9mIHRoZSBzb2Z0d2FyZSBhbmQgYWNjb21wYW55aW5nIGRv
Y3VtZW50YXRpb24gY292ZXJlZCBieQotICogdGhpcyBsaWNlbnNlICh0aGUgIlNvZnR3YXJlIikg
dG8gdXNlLCByZXByb2R1Y2UsIGRpc3BsYXksIGRpc3RyaWJ1dGUsCi0gKiBleGVjdXRlLCBhbmQg
dHJhbnNtaXQgdGhlIFNvZnR3YXJlLCBhbmQgdG8gcHJlcGFyZSBkZXJpdmF0aXZlIHdvcmtzIG9m
IHRoZQotICogU29mdHdhcmUsIGFuZCB0byBwZXJtaXQgdGhpcmQtcGFydGllcyB0byB3aG9tIHRo
ZSBTb2Z0d2FyZSBpcyBmdXJuaXNoZWQgdG8KLSAqIGRvIHNvLCBhbGwgc3ViamVjdCB0byB0aGUg
Zm9sbG93aW5nOgotICogCi0gKiBUaGUgY29weXJpZ2h0IG5vdGljZXMgaW4gdGhlIFNvZnR3YXJl
IGFuZCB0aGlzIGVudGlyZSBzdGF0ZW1lbnQsIGluY2x1ZGluZwotICogdGhlIGFib3ZlIGxpY2Vu
c2UgZ3JhbnQsIHRoaXMgcmVzdHJpY3Rpb24gYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciwK
LSAqIG11c3QgYmUgaW5jbHVkZWQgaW4gYWxsIGNvcGllcyBvZiB0aGUgU29mdHdhcmUsIGluIHdo
b2xlIG9yIGluIHBhcnQsIGFuZAotICogYWxsIGRlcml2YXRpdmUgd29ya3Mgb2YgdGhlIFNvZnR3
YXJlLCB1bmxlc3Mgc3VjaCBjb3BpZXMgb3IgZGVyaXZhdGl2ZQotICogd29ya3MgYXJlIHNvbGVs
eSBpbiB0aGUgZm9ybSBvZiBtYWNoaW5lLWV4ZWN1dGFibGUgb2JqZWN0IGNvZGUgZ2VuZXJhdGVk
IGJ5Ci0gKiBhIHNvdXJjZSBsYW5ndWFnZSBwcm9jZXNzb3IuCi0gKiAKLSAqIFRIRSBTT0ZUV0FS
RSBJUyBQUk9WSURFRCAiQVMgSVMiLCBXSVRIT1VUIFdBUlJBTlRZIE9GIEFOWSBLSU5ELCBFWFBS
RVNTIE9SCi0gKiBJTVBMSUVELCBJTkNMVURJTkcgQlVUIE5PVCBMSU1JVEVEIFRPIFRIRSBXQVJS
QU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSwKLSAqIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQ
VVJQT1NFLCBUSVRMRSBBTkQgTk9OLUlORlJJTkdFTUVOVC4gSU4gTk8gRVZFTlQKLSAqIFNIQUxM
IFRIRSBDT1BZUklHSFQgSE9MREVSUyBPUiBBTllPTkUgRElTVFJJQlVUSU5HIFRIRSBTT0ZUV0FS
RSBCRSBMSUFCTEUKLSAqIEZPUiBBTlkgREFNQUdFUyBPUiBPVEhFUiBMSUFCSUxJVFksIFdIRVRI
RVIgSU4gQ09OVFJBQ1QsIFRPUlQgT1IgT1RIRVJXSVNFLAotICogQVJJU0lORyBGUk9NLCBPVVQg
T0YgT1IgSU4gQ09OTkVDVElPTiBXSVRIIFRIRSBTT0ZUV0FSRSBPUiBUSEUgVVNFIE9SIE9USEVS
Ci0gKiBERUFMSU5HUyBJTiBUSEUgU09GVFdBUkUuCiAgKi8KIAogI2lmbmRlZiBUaHJlYWRpbmdf
aAogI2RlZmluZSBUaHJlYWRpbmdfaAogCisvLyBGSVhNRTogTm90IHN1cmUgd2h5IHRoZXJlIGFy
ZSBzbyBtYW55IGluY2x1ZGVzIGhlcmUuCisvLyBJcyB0aGlzIGludGVuZGVkIHRvIGJlIGNvbnZl
bmllbmNlIHNvIHRoYXQgb3RoZXJzIGRvbid0IGhhdmUgdG8gaW5jbHVkZSB0aGUgaW5kaXZpZHVh
bCBmaWxlcz8KKy8vIE5vdGhpbmcgaW4gdGhpcyBoZWFkZXIgZGVwZW5kcyBvbiBBc3NlcnRpb25z
LCBBdG9taWNzLCBMb2NrZXIsIE5vbmNvcHlhYmxlLCBUaHJlYWRTYWZlUmVmQ291bnRlZCwgb3Ig
VGhyZWFkaW5nUHJpbWl0aXZlcy4KKworI2luY2x1ZGUgPGZ1bmN0aW9uYWw+CiAjaW5jbHVkZSA8
c3RkaW50Lmg+CiAjaW5jbHVkZSA8d3RmL0Fzc2VydGlvbnMuaD4KICNpbmNsdWRlIDx3dGYvQXRv
bWljcy5oPgpAQCAtNzksMTMgKzU1LDIwIEBAIFdURl9FWFBPUlRfUFJJVkFURSB2b2lkIGluaXRp
YWxpemVUaHJlYWRpbmcoKTsKIAogLy8gUmV0dXJucyAwIGlmIHRocmVhZCBjcmVhdGlvbiBmYWls
ZWQuCiAvLyBUaGUgdGhyZWFkIG5hbWUgbXVzdCBiZSBhIGxpdGVyYWwgc2luY2Ugb24gc29tZSBw
bGF0Zm9ybXMgaXQncyBwYXNzZWQgaW4gdG8gdGhlIHRocmVhZC4KLVdURl9FWFBPUlRfUFJJVkFU
RSBUaHJlYWRJZGVudGlmaWVyIGNyZWF0ZVRocmVhZChUaHJlYWRGdW5jdGlvbiwgdm9pZCosIGNv
bnN0IGNoYXIqIHRocmVhZE5hbWUpOworV1RGX0VYUE9SVF9QUklWQVRFIFRocmVhZElkZW50aWZp
ZXIgY3JlYXRlVGhyZWFkKGNvbnN0IGNoYXIqIHRocmVhZE5hbWUsIHN0ZDo6ZnVuY3Rpb248dm9p
ZCgpPik7CiAKIC8vIE1hcmsgdGhlIGN1cnJlbnQgdGhyZWFkIGFzIHJlcXVpcmluZyBVSSByZXNw
b25zaXZlbmVzcy4KIFdURl9FWFBPUlRfUFJJVkFURSB2b2lkIHNldEN1cnJlbnRUaHJlYWRJc1Vz
ZXJJbnRlcmFjdGl2ZSgpOwotCiBXVEZfRVhQT1JUX1BSSVZBVEUgdm9pZCBzZXRDdXJyZW50VGhy
ZWFkSXNVc2VySW5pdGlhdGVkKCk7CiAKK1dURl9FWFBPUlRfUFJJVkFURSBUaHJlYWRJZGVudGlm
aWVyIGN1cnJlbnRUaHJlYWQoKTsKK1dURl9FWFBPUlRfUFJJVkFURSB2b2lkIGNoYW5nZVRocmVh
ZFByaW9yaXR5KFRocmVhZElkZW50aWZpZXIsIGludCk7CitXVEZfRVhQT1JUX1BSSVZBVEUgaW50
IHdhaXRGb3JUaHJlYWRDb21wbGV0aW9uKFRocmVhZElkZW50aWZpZXIpOworV1RGX0VYUE9SVF9Q
UklWQVRFIHZvaWQgZGV0YWNoVGhyZWFkKFRocmVhZElkZW50aWZpZXIpOworCisvLyBEZXByZWNh
dGVkIGZ1bmN0aW9uLXBvaW50ZXItYmFzZWQgdGhyZWFkIGNyZWF0aW9uLgorV1RGX0VYUE9SVF9Q
UklWQVRFIFRocmVhZElkZW50aWZpZXIgY3JlYXRlVGhyZWFkKFRocmVhZEZ1bmN0aW9uLCB2b2lk
KiwgY29uc3QgY2hhciogdGhyZWFkTmFtZSk7CisKIC8vIEludGVybmFsIHBsYXRmb3JtLXNwZWNp
ZmljIGNyZWF0ZVRocmVhZCBpbXBsZW1lbnRhdGlvbi4KIFRocmVhZElkZW50aWZpZXIgY3JlYXRl
VGhyZWFkSW50ZXJuYWwoVGhyZWFkRnVuY3Rpb24sIHZvaWQqLCBjb25zdCBjaGFyKiB0aHJlYWRO
YW1lKTsKIApAQCAtOTMsMTEgKzc2LDYgQEAgVGhyZWFkSWRlbnRpZmllciBjcmVhdGVUaHJlYWRJ
bnRlcm5hbChUaHJlYWRGdW5jdGlvbiwgdm9pZCosIGNvbnN0IGNoYXIqIHRocmVhZE4KIC8vIEhl
bHBmdWwgZm9yIHBsYXRmb3JtcyB3aGVyZSB0aGUgdGhyZWFkIG5hbWUgbXVzdCBiZSBzZXQgZnJv
bSB3aXRoaW4gdGhlIHRocmVhZC4KIHZvaWQgaW5pdGlhbGl6ZUN1cnJlbnRUaHJlYWRJbnRlcm5h
bChjb25zdCBjaGFyKiB0aHJlYWROYW1lKTsKIAotV1RGX0VYUE9SVF9QUklWQVRFIFRocmVhZElk
ZW50aWZpZXIgY3VycmVudFRocmVhZCgpOwotV1RGX0VYUE9SVF9QUklWQVRFIHZvaWQgY2hhbmdl
VGhyZWFkUHJpb3JpdHkoVGhyZWFkSWRlbnRpZmllciwgaW50KTsKLVdURl9FWFBPUlRfUFJJVkFU
RSBpbnQgd2FpdEZvclRocmVhZENvbXBsZXRpb24oVGhyZWFkSWRlbnRpZmllcik7Ci1XVEZfRVhQ
T1JUX1BSSVZBVEUgdm9pZCBkZXRhY2hUaHJlYWQoVGhyZWFkSWRlbnRpZmllcik7Ci0KIH0gLy8g
bmFtZXNwYWNlIFdURgogCiB1c2luZyBXVEY6OlRocmVhZElkZW50aWZpZXI7CmRpZmYgLS1naXQg
YS9Tb3VyY2UvV2ViQ29yZS9DTWFrZUxpc3RzLnR4dCBiL1NvdXJjZS9XZWJDb3JlL0NNYWtlTGlz
dHMudHh0CmluZGV4IGQ4ZTZhYWE0OWUxNzU3NDEzMjhhNDQ2MmQyNzkxYzI3NDNiZWFhNTkuLjE3
NmEwZDgyNmZmYTM0ODA1MmNmMWVkODU0ZjIxNjEzYzA1NmRmZjIgMTAwNjQ0Ci0tLSBhL1NvdXJj
ZS9XZWJDb3JlL0NNYWtlTGlzdHMudHh0CisrKyBiL1NvdXJjZS9XZWJDb3JlL0NNYWtlTGlzdHMu
dHh0CkBAIC0xNTA1LDcgKzE1MDUsNiBAQCBzZXQoV2ViQ29yZV9TT1VSQ0VTCiAgICAgZmlsZWFw
aS9GaWxlUmVhZGVyLmNwcAogICAgIGZpbGVhcGkvRmlsZVJlYWRlckxvYWRlci5jcHAKICAgICBm
aWxlYXBpL0ZpbGVSZWFkZXJTeW5jLmNwcAotICAgIGZpbGVhcGkvRmlsZVRocmVhZC5jcHAKICAg
ICBmaWxlYXBpL1RocmVhZGFibGVCbG9iUmVnaXN0cnkuY3BwCiAgICAgZmlsZWFwaS9XZWJLaXRC
bG9iQnVpbGRlci5jcHAKIApkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvV2ViQ29yZS52Y3hw
cm9qL1dlYkNvcmUudmN4cHJvaiBiL1NvdXJjZS9XZWJDb3JlL1dlYkNvcmUudmN4cHJvai9XZWJD
b3JlLnZjeHByb2oKaW5kZXggNTFhNGVkN2YwMWQ4MDAwODlmNTJlYjFmN2Q5MTgyMjk4Njc3YWQw
Yi4uYzU5NTg0YzNmYjRlZWZkZmMwNmVmMWZjZjI0NTdhNjVkZjY2NjNjNCAxMDA2NDQKLS0tIGEv
U291cmNlL1dlYkNvcmUvV2ViQ29yZS52Y3hwcm9qL1dlYkNvcmUudmN4cHJvagorKysgYi9Tb3Vy
Y2UvV2ViQ29yZS9XZWJDb3JlLnZjeHByb2ovV2ViQ29yZS52Y3hwcm9qCkBAIC0xNDkzNSw3ICsx
NDkzNSw2IEBACiAgICAgPENsQ29tcGlsZSBJbmNsdWRlPSIuLlxmaWxlYXBpXEZpbGVSZWFkZXIu
Y3BwIiAvPgogICAgIDxDbENvbXBpbGUgSW5jbHVkZT0iLi5cZmlsZWFwaVxGaWxlUmVhZGVyTG9h
ZGVyLmNwcCIgLz4KICAgICA8Q2xDb21waWxlIEluY2x1ZGU9Ii4uXGZpbGVhcGlcRmlsZVJlYWRl
clN5bmMuY3BwIiAvPgotICAgIDxDbENvbXBpbGUgSW5jbHVkZT0iLi5cZmlsZWFwaVxGaWxlVGhy
ZWFkLmNwcCIgLz4KICAgICA8Q2xDb21waWxlIEluY2x1ZGU9Ii4uXGh0bWxcRm9ybUFzc29jaWF0
ZWRFbGVtZW50LmNwcCIgLz4KICAgICA8Q2xDb21waWxlIEluY2x1ZGU9Ii4uXGh0bWxcRm9ybUNv
bnRyb2xsZXIuY3BwIiAvPgogICAgIDxDbENvbXBpbGUgSW5jbHVkZT0iLi5caHRtbFxGb3JtRGF0
YUxpc3QuY3BwIiAvPgpAQCAtMjA3MTQsNyArMjA3MTMsNiBAQAogICAgIDxDbEluY2x1ZGUgSW5j
bHVkZT0iLi5cZmlsZWFwaVxGaWxlUmVhZGVyTG9hZGVyLmgiIC8+CiAgICAgPENsSW5jbHVkZSBJ
bmNsdWRlPSIuLlxmaWxlYXBpXEZpbGVSZWFkZXJMb2FkZXJDbGllbnQuaCIgLz4KICAgICA8Q2xJ
bmNsdWRlIEluY2x1ZGU9Ii4uXGZpbGVhcGlcRmlsZVJlYWRlclN5bmMuaCIgLz4KLSAgICA8Q2xJ
bmNsdWRlIEluY2x1ZGU9Ii4uXGZpbGVhcGlcRmlsZVRocmVhZC5oIiAvPgogICAgIDxDbEluY2x1
ZGUgSW5jbHVkZT0iLi5caHRtbFxGb3JtQXNzb2NpYXRlZEVsZW1lbnQuaCIgLz4KICAgICA8Q2xJ
bmNsdWRlIEluY2x1ZGU9Ii4uXGh0bWxcRm9ybUNvbnRyb2xsZXIuaCIgLz4KICAgICA8Q2xJbmNs
dWRlIEluY2x1ZGU9Ii4uXGh0bWxcRm9ybURhdGFMaXN0LmgiIC8+CmRpZmYgLS1naXQgYS9Tb3Vy
Y2UvV2ViQ29yZS9XZWJDb3JlLnZjeHByb2ovV2ViQ29yZS52Y3hwcm9qLmZpbHRlcnMgYi9Tb3Vy
Y2UvV2ViQ29yZS9XZWJDb3JlLnZjeHByb2ovV2ViQ29yZS52Y3hwcm9qLmZpbHRlcnMKaW5kZXgg
NDY4ZmE1ZTUyZjc3NTdiMmZiMzgyYjcwM2NiMWQ4MGZmY2M0MWJiOC4uOWIwNmExNWYxNzczYWFj
OGM5ZWQ1Y2E5NDJkMGM5MzUyZGMzOWQzZCAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvV2Vi
Q29yZS52Y3hwcm9qL1dlYkNvcmUudmN4cHJvai5maWx0ZXJzCisrKyBiL1NvdXJjZS9XZWJDb3Jl
L1dlYkNvcmUudmN4cHJvai9XZWJDb3JlLnZjeHByb2ouZmlsdGVycwpAQCAtMzcxNyw5ICszNzE3
LDYgQEAKICAgICA8Q2xDb21waWxlIEluY2x1ZGU9Ii4uXGZpbGVhcGlcRmlsZVJlYWRlclN5bmMu
Y3BwIj4KICAgICAgIDxGaWx0ZXI+aHRtbDwvRmlsdGVyPgogICAgIDwvQ2xDb21waWxlPgotICAg
IDxDbENvbXBpbGUgSW5jbHVkZT0iLi5cZmlsZWFwaVxGaWxlVGhyZWFkLmNwcCI+Ci0gICAgICA8
RmlsdGVyPmh0bWw8L0ZpbHRlcj4KLSAgICA8L0NsQ29tcGlsZT4KICAgICA8Q2xDb21waWxlIElu
Y2x1ZGU9Ii4uXGh0bWxcRm9ybUFzc29jaWF0ZWRFbGVtZW50LmNwcCI+CiAgICAgICA8RmlsdGVy
Pmh0bWw8L0ZpbHRlcj4KICAgICA8L0NsQ29tcGlsZT4KQEAgLTEwODY5LDkgKzEwODY2LDYgQEAK
ICAgICA8Q2xJbmNsdWRlIEluY2x1ZGU9Ii4uXGZpbGVhcGlcRmlsZVJlYWRlclN5bmMuaCI+CiAg
ICAgICA8RmlsdGVyPmh0bWw8L0ZpbHRlcj4KICAgICA8L0NsSW5jbHVkZT4KLSAgICA8Q2xJbmNs
dWRlIEluY2x1ZGU9Ii4uXGZpbGVhcGlcRmlsZVRocmVhZC5oIj4KLSAgICAgIDxGaWx0ZXI+aHRt
bDwvRmlsdGVyPgotICAgIDwvQ2xJbmNsdWRlPgogICAgIDxDbEluY2x1ZGUgSW5jbHVkZT0iLi5c
aHRtbFxGb3JtQXNzb2NpYXRlZEVsZW1lbnQuaCI+CiAgICAgICA8RmlsdGVyPmh0bWw8L0ZpbHRl
cj4KICAgICA8L0NsSW5jbHVkZT4KZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL1dlYkNvcmUu
eGNvZGVwcm9qL3Byb2plY3QucGJ4cHJvaiBiL1NvdXJjZS9XZWJDb3JlL1dlYkNvcmUueGNvZGVw
cm9qL3Byb2plY3QucGJ4cHJvagppbmRleCA0NDA1ZGJlNWYyOWMxYTE5ZWRjYmM5YzcyZTM4ZDUy
MTQ2ZGZjM2UxLi5mM2VkNDI3YjBlYjQxMDM5ODFkMTZiNGVlZTY1M2NjNmM0MTNhYjlkIDEwMDY0
NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9XZWJDb3JlLnhjb2RlcHJvai9wcm9qZWN0LnBieHByb2oK
KysrIGIvU291cmNlL1dlYkNvcmUvV2ViQ29yZS54Y29kZXByb2ovcHJvamVjdC5wYnhwcm9qCkBA
IC0zNDc1LDggKzM0NzUsNiBAQAogCQk5NzZENkM4NjEyMkI4QTNEMDAxRkQxRjcgLyogRmlsZUxp
c3QuaCBpbiBIZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDk3NkQ2
QzY3MTIyQjhBM0QwMDFGRDFGNyAvKiBGaWxlTGlzdC5oICovOyB9OwogCQk5NzZENkM4ODEyMkI4
QTNEMDAxRkQxRjcgLyogRmlsZVJlYWRlci5jcHAgaW4gU291cmNlcyAqLyA9IHtpc2EgPSBQQlhC
dWlsZEZpbGU7IGZpbGVSZWYgPSA5NzZENkM2OTEyMkI4QTNEMDAxRkQxRjcgLyogRmlsZVJlYWRl
ci5jcHAgKi87IH07CiAJCTk3NkQ2Qzg5MTIyQjhBM0QwMDFGRDFGNyAvKiBGaWxlUmVhZGVyLmgg
aW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSA5NzZENkM2QTEy
MkI4QTNEMDAxRkQxRjcgLyogRmlsZVJlYWRlci5oICovOyB9OwotCQk5NzZENkM4RDEyMkI4QTNE
MDAxRkQxRjcgLyogRmlsZVRocmVhZC5jcHAgaW4gU291cmNlcyAqLyA9IHtpc2EgPSBQQlhCdWls
ZEZpbGU7IGZpbGVSZWYgPSA5NzZENkM2RTEyMkI4QTNEMDAxRkQxRjcgLyogRmlsZVRocmVhZC5j
cHAgKi87IH07Ci0JCTk3NkQ2QzhFMTIyQjhBM0QwMDFGRDFGNyAvKiBGaWxlVGhyZWFkLmggaW4g
SGVhZGVycyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSA5NzZENkM2RjEyMkI4
QTNEMDAxRkQxRjcgLyogRmlsZVRocmVhZC5oICovOyB9OwogCQk5NzZENkM5NDEyMkI4QTNEMDAx
RkQxRjcgLyogVGhyZWFkYWJsZUJsb2JSZWdpc3RyeS5jcHAgaW4gU291cmNlcyAqLyA9IHtpc2Eg
PSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSA5NzZENkM3NTEyMkI4QTNEMDAxRkQxRjcgLyogVGhy
ZWFkYWJsZUJsb2JSZWdpc3RyeS5jcHAgKi87IH07CiAJCTk3NkQ2Qzk1MTIyQjhBM0QwMDFGRDFG
NyAvKiBUaHJlYWRhYmxlQmxvYlJlZ2lzdHJ5LmggaW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQQlhC
dWlsZEZpbGU7IGZpbGVSZWYgPSA5NzZENkM3NjEyMkI4QTNEMDAxRkQxRjcgLyogVGhyZWFkYWJs
ZUJsb2JSZWdpc3RyeS5oICovOyB9OwogCQk5NzZGMzZFQTE0Njg2MjI1MDA1RTkzQjQgLyogU2Vj
dXJpdHlDb250ZXh0LmNwcCBpbiBTb3VyY2VzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmls
ZVJlZiA9IDk3NkYzNkU4MTQ2ODYyMjUwMDVFOTNCNCAvKiBTZWN1cml0eUNvbnRleHQuY3BwICov
OyB9OwpAQCAtMTA2NDEsOCArMTA2MzksNiBAQAogCQk5NzZENkM2NzEyMkI4QTNEMDAxRkQxRjcg
LyogRmlsZUxpc3QuaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2Rpbmcg
PSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBuYW1lID0gRmlsZUxpc3Qu
aDsgcGF0aCA9IGZpbGVhcGkvRmlsZUxpc3QuaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsK
IAkJOTc2RDZDNjkxMjJCOEEzRDAwMUZEMUY3IC8qIEZpbGVSZWFkZXIuY3BwICovID0ge2lzYSA9
IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0g
c291cmNlY29kZS5jcHAuY3BwOyBuYW1lID0gRmlsZVJlYWRlci5jcHA7IHBhdGggPSBmaWxlYXBp
L0ZpbGVSZWFkZXIuY3BwOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwogCQk5NzZENkM2QTEy
MkI4QTNEMDAxRkQxRjcgLyogRmlsZVJlYWRlci5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVu
Y2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7
IG5hbWUgPSBGaWxlUmVhZGVyLmg7IHBhdGggPSBmaWxlYXBpL0ZpbGVSZWFkZXIuaDsgc291cmNl
VHJlZSA9ICI8Z3JvdXA+IjsgfTsKLQkJOTc2RDZDNkUxMjJCOEEzRDAwMUZEMUY3IC8qIEZpbGVU
aHJlYWQuY3BwICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7
IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jcHAuY3BwOyBuYW1lID0gRmlsZVRocmVh
ZC5jcHA7IHBhdGggPSBmaWxlYXBpL0ZpbGVUaHJlYWQuY3BwOyBzb3VyY2VUcmVlID0gIjxncm91
cD4iOyB9OwotCQk5NzZENkM2RjEyMkI4QTNEMDAxRkQxRjcgLyogRmlsZVRocmVhZC5oICovID0g
e2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVU
eXBlID0gc291cmNlY29kZS5jLmg7IG5hbWUgPSBGaWxlVGhyZWFkLmg7IHBhdGggPSBmaWxlYXBp
L0ZpbGVUaHJlYWQuaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKIAkJOTc2RDZDNzUxMjJC
OEEzRDAwMUZEMUY3IC8qIFRocmVhZGFibGVCbG9iUmVnaXN0cnkuY3BwICovID0ge2lzYSA9IFBC
WEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291
cmNlY29kZS5jcHAuY3BwOyBuYW1lID0gVGhyZWFkYWJsZUJsb2JSZWdpc3RyeS5jcHA7IHBhdGgg
PSBmaWxlYXBpL1RocmVhZGFibGVCbG9iUmVnaXN0cnkuY3BwOyBzb3VyY2VUcmVlID0gIjxncm91
cD4iOyB9OwogCQk5NzZENkM3NjEyMkI4QTNEMDAxRkQxRjcgLyogVGhyZWFkYWJsZUJsb2JSZWdp
c3RyeS5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxh
c3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7IG5hbWUgPSBUaHJlYWRhYmxlQmxvYlJl
Z2lzdHJ5Lmg7IHBhdGggPSBmaWxlYXBpL1RocmVhZGFibGVCbG9iUmVnaXN0cnkuaDsgc291cmNl
VHJlZSA9ICI8Z3JvdXA+IjsgfTsKIAkJOTc2RjM2RTgxNDY4NjIyNTAwNUU5M0I0IC8qIFNlY3Vy
aXR5Q29udGV4dC5jcHAgKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5n
ID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmNwcC5jcHA7IHBhdGggPSBTZWN1
cml0eUNvbnRleHQuY3BwOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwpAQCAtMTgyMjksOCAr
MTgyMjUsNiBAQAogCQkJCTJFREYzNjlBMTIyQzk0QjQwMDJGN0Q0RSAvKiBGaWxlUmVhZGVyU3lu
Yy5jcHAgKi8sCiAJCQkJMkVERjM2OUIxMjJDOTRCNDAwMkY3RDRFIC8qIEZpbGVSZWFkZXJTeW5j
LmggKi8sCiAJCQkJRTFBQjFFQkQxNEU5RTNBODAwNDQ5RTEzIC8qIEZpbGVSZWFkZXJTeW5jLmlk
bCAqLywKLQkJCQk5NzZENkM2RTEyMkI4QTNEMDAxRkQxRjcgLyogRmlsZVRocmVhZC5jcHAgKi8s
Ci0JCQkJOTc2RDZDNkYxMjJCOEEzRDAwMUZEMUY3IC8qIEZpbGVUaHJlYWQuaCAqLywKIAkJCQk5
NzZENkM3NTEyMkI4QTNEMDAxRkQxRjcgLyogVGhyZWFkYWJsZUJsb2JSZWdpc3RyeS5jcHAgKi8s
CiAJCQkJOTc2RDZDNzYxMjJCOEEzRDAwMUZEMUY3IC8qIFRocmVhZGFibGVCbG9iUmVnaXN0cnku
aCAqLywKIAkJCQk5NzZENkM1QzEyMkI4QTNEMDAxRkQxRjcgLyogV2ViS2l0QmxvYkJ1aWxkZXIu
Y3BwICovLApAQCAtMjQzMjQsNyArMjQzMTgsNiBAQAogCQkJCTJFRjFCRkY5MTIxQ0IwQ0UwMEMy
NzYyNyAvKiBGaWxlU3RyZWFtQ2xpZW50LmggaW4gSGVhZGVycyAqLywKIAkJCQk1MTRCM0Y3MzBD
NzIyMDQ3MDAwNTMwREYgLyogRmlsZVN5c3RlbS5oIGluIEhlYWRlcnMgKi8sCiAJCQkJMjZDMTdB
M0UxNDkxRDJENDAwRDEyQkEyIC8qIEZpbGVTeXN0ZW1JT1MuaCBpbiBIZWFkZXJzICovLAotCQkJ
CTk3NkQ2QzhFMTIyQjhBM0QwMDFGRDFGNyAvKiBGaWxlVGhyZWFkLmggaW4gSGVhZGVycyAqLywK
IAkJCQlCQzVFQjY5RjBFODFEQUVCMDBCMjU5NjUgLyogRmlsbExheWVyLmggaW4gSGVhZGVycyAq
LywKIAkJCQk4NDVFNzJGODBGRDI2MUVFMDBBODdENzkgLyogRmlsdGVyLmggaW4gSGVhZGVycyAq
LywKIAkJCQkwOEM5MjUxQTBGQ0M3QzRBMDA0ODBERUMgLyogRmlsdGVyRWZmZWN0LmggaW4gSGVh
ZGVycyAqLywKQEAgLTI3ODIwLDcgKzI3ODEzLDYgQEAKIAkJCQkyNkMxN0EzRjE0OTFEMkQ0MDBE
MTJCQTIgLyogRmlsZVN5c3RlbUlPUy5tbSBpbiBTb3VyY2VzICovLAogCQkJCTUxNEIzRjc2MEM3
MjIwNTUwMDA1MzBERiAvKiBGaWxlU3lzdGVtTWFjLm1tIGluIFNvdXJjZXMgKi8sCiAJCQkJNTE2
MDMwMEIwQ0M0MjUxMjAwQzhBQzI1IC8qIEZpbGVTeXN0ZW1QT1NJWC5jcHAgaW4gU291cmNlcyAq
LywKLQkJCQk5NzZENkM4RDEyMkI4QTNEMDAxRkQxRjcgLyogRmlsZVRocmVhZC5jcHAgaW4gU291
cmNlcyAqLywKIAkJCQlCQzVFQjY5RTBFODFEQUVCMDBCMjU5NjUgLyogRmlsbExheWVyLmNwcCBp
biBTb3VyY2VzICovLAogCQkJCTA4QzkyNTE5MEZDQzdDNEEwMDQ4MERFQyAvKiBGaWx0ZXJFZmZl
Y3QuY3BwIGluIFNvdXJjZXMgKi8sCiAJCQkJMzEzMTNGNjUxNDQzQjM1RjAwNkUyQTkwIC8qIEZp
bHRlckVmZmVjdFJlbmRlcmVyLmNwcCBpbiBTb3VyY2VzICovLApkaWZmIC0tZ2l0IGEvU291cmNl
L1dlYkNvcmUvYmluZGluZ3MvZ2VuZXJpYy9BY3RpdmVET01DYWxsYmFjay5jcHAgYi9Tb3VyY2Uv
V2ViQ29yZS9iaW5kaW5ncy9nZW5lcmljL0FjdGl2ZURPTUNhbGxiYWNrLmNwcAppbmRleCA4MWEx
MGMxNGIyZGI1ZjE3MWRjMDY4OGM4MDYxZTczZDAxZmE2OWNmLi41YjE3NDFlMTMxODNiMGY2ZmVh
ODEyNmNjMjkxY2RmZjQ5MjA5ZjI3IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9iaW5kaW5n
cy9nZW5lcmljL0FjdGl2ZURPTUNhbGxiYWNrLmNwcAorKysgYi9Tb3VyY2UvV2ViQ29yZS9iaW5k
aW5ncy9nZW5lcmljL0FjdGl2ZURPTUNhbGxiYWNrLmNwcApAQCAtMzEsOSArMzEsNyBAQAogI2lu
Y2x1ZGUgImNvbmZpZy5oIgogI2luY2x1ZGUgIkFjdGl2ZURPTUNhbGxiYWNrLmgiCiAKLSNpbmNs
dWRlICJBY3RpdmVET01PYmplY3QuaCIKICNpbmNsdWRlICJTY3JpcHRFeGVjdXRpb25Db250ZXh0
LmgiCi0jaW5jbHVkZSAiV29ya2VyR2xvYmFsU2NvcGUuaCIKIAogbmFtZXNwYWNlIFdlYkNvcmUg
ewogCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9kb20vQWN0aXZlRE9NT2JqZWN0LmNwcCBi
L1NvdXJjZS9XZWJDb3JlL2RvbS9BY3RpdmVET01PYmplY3QuY3BwCmluZGV4IDI5OWExYTMwMGU0
NjRhM2E2YjU5ZWY2MTgxNDA0YjZhYThiMWVlZGIuLmMzMjY3MWIxMDE4MGY4NDBmZTEyYTNhZjA3
NWMxMWY5MjllODEyZDUgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL2RvbS9BY3RpdmVET01P
YmplY3QuY3BwCisrKyBiL1NvdXJjZS9XZWJDb3JlL2RvbS9BY3RpdmVET01PYmplY3QuY3BwCkBA
IC0yOCw4ICsyOCw2IEBACiAjaW5jbHVkZSAiQWN0aXZlRE9NT2JqZWN0LmgiCiAKICNpbmNsdWRl
ICJTY3JpcHRFeGVjdXRpb25Db250ZXh0LmgiCi0jaW5jbHVkZSAiV29ya2VyR2xvYmFsU2NvcGUu
aCIKLSNpbmNsdWRlICJXb3JrZXJUaHJlYWQuaCIKIAogbmFtZXNwYWNlIFdlYkNvcmUgewogCmRp
ZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9maWxlYXBpL0FzeW5jRmlsZVN0cmVhbS5jcHAgYi9T
b3VyY2UvV2ViQ29yZS9maWxlYXBpL0FzeW5jRmlsZVN0cmVhbS5jcHAKaW5kZXggNWEzOTFmODdj
ZWUxNGNlNjcxODgzYjQwMzEwNzIyMjBhMjQ5NjE3YS4uZDJiYjBjNWNjODZhMTI0YmEyMDAxMzFk
ZTRjZmRhYTEzNjUxMDVjNiAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvZmlsZWFwaS9Bc3lu
Y0ZpbGVTdHJlYW0uY3BwCisrKyBiL1NvdXJjZS9XZWJDb3JlL2ZpbGVhcGkvQXN5bmNGaWxlU3Ry
ZWFtLmNwcApAQCAtMSw2ICsxLDYgQEAKIC8qCiAgKiBDb3B5cmlnaHQgKEMpIDIwMTAgR29vZ2xl
IEluYy4gIEFsbCByaWdodHMgcmVzZXJ2ZWQuCi0gKiBDb3B5cmlnaHQgKEMpIDIwMTIgQXBwbGUg
SW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICogQ29weXJpZ2h0IChDKSAyMDEyLCAyMDE0IEFw
cGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KICAqCiAgKiBSZWRpc3RyaWJ1dGlvbiBhbmQg
dXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKICAqIG1vZGlm
aWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0
aW9ucyBhcmUKQEAgLTMwLDE2MiArMzAsMTc1IEBACiAgKi8KIAogI2luY2x1ZGUgImNvbmZpZy5o
IgotCiAjaW5jbHVkZSAiQXN5bmNGaWxlU3RyZWFtLmgiCiAKLSNpbmNsdWRlICJCbG9iLmgiCiAj
aW5jbHVkZSAiRmlsZVN0cmVhbS5oIgogI2luY2x1ZGUgIkZpbGVTdHJlYW1DbGllbnQuaCIKLSNp
bmNsdWRlICJGaWxlVGhyZWFkLmgiCisjaW5jbHVkZSAiVVJMLmgiCisjaW5jbHVkZSA8d3RmL0F1
dG9kcmFpbmVkUG9vbC5oPgogI2luY2x1ZGUgPHd0Zi9NYWluVGhyZWFkLmg+Ci0jaW5jbHVkZSA8
d3RmL3RleHQvV1RGU3RyaW5nLmg+Ci0KLSNpZiBQTEFURk9STShJT1MpCi0jaW5jbHVkZSAiV2Vi
Q29yZVRocmVhZC5oIgotI2VuZGlmCisjaW5jbHVkZSA8d3RmL01lc3NhZ2VRdWV1ZS5oPgorI2lu
Y2x1ZGUgPHd0Zi9OZXZlckRlc3Ryb3llZC5oPgogCiBuYW1lc3BhY2UgV2ViQ29yZSB7CiAKLXN0
YXRpYyBQYXNzUmVmUHRyPEZpbGVUaHJlYWQ+IGNyZWF0ZUZpbGVUaHJlYWQoKQotewotICAgIFJl
ZlB0cjxGaWxlVGhyZWFkPiB0aHJlYWQgPSBGaWxlVGhyZWFkOjpjcmVhdGUoKTsKLSAgICBpZiAo
IXRocmVhZC0+c3RhcnQoKSkKLSAgICAgICAgcmV0dXJuIDA7Ci0gICAgcmV0dXJuIHRocmVhZC5y
ZWxlYXNlKCk7Ci19CitzdHJ1Y3QgQXN5bmNGaWxlU3RyZWFtOjpJbnRlcm5hbHMgeworICAgIGV4
cGxpY2l0IEludGVybmFscyhGaWxlU3RyZWFtQ2xpZW50Jik7CiAKLXN0YXRpYyBGaWxlVGhyZWFk
KiBmaWxlVGhyZWFkKCkKKyAgICBGaWxlU3RyZWFtIHN0cmVhbTsKKyAgICBGaWxlU3RyZWFtQ2xp
ZW50JiBjbGllbnQ7CisgICAgc3RkOjphdG9taWNfYm9vbCBkZXN0cm95ZWQgeyBmYWxzZSB9Owor
fTsKKworaW5saW5lIEFzeW5jRmlsZVN0cmVhbTo6SW50ZXJuYWxzOjpJbnRlcm5hbHMoRmlsZVN0
cmVhbUNsaWVudCYgY2xpZW50KQorICAgIDogY2xpZW50KGNsaWVudCkKIHsKLSAgICBBU1NFUlQo
aXNNYWluVGhyZWFkKCkpOwotICAgIHN0YXRpYyBGaWxlVGhyZWFkKiB0aHJlYWQgPSBjcmVhdGVG
aWxlVGhyZWFkKCkubGVha1JlZigpOwotICAgIHJldHVybiB0aHJlYWQ7CiB9CiAKLWlubGluZSBB
c3luY0ZpbGVTdHJlYW06OkFzeW5jRmlsZVN0cmVhbShGaWxlU3RyZWFtQ2xpZW50KiBjbGllbnQp
Ci0gICAgOiBtX3N0cmVhbShGaWxlU3RyZWFtOjpjcmVhdGUoKSkKLSAgICAsIG1fY2xpZW50KGNs
aWVudCkKK3N0YXRpYyB2b2lkIGNhbGxPbkZpbGVUaHJlYWQoc3RkOjpmdW5jdGlvbjx2b2lkKCk+
JiYgZnVuY3Rpb24pCiB7CiAgICAgQVNTRVJUKGlzTWFpblRocmVhZCgpKTsKLX0KKyAgICBBU1NF
UlQoZnVuY3Rpb24pOwogCi1QYXNzUmVmUHRyPEFzeW5jRmlsZVN0cmVhbT4gQXN5bmNGaWxlU3Ry
ZWFtOjpjcmVhdGUoRmlsZVN0cmVhbUNsaWVudCogY2xpZW50KQotewotICAgIFJlZlB0cjxBc3lu
Y0ZpbGVTdHJlYW0+IHByb3h5ID0gYWRvcHRSZWYobmV3IEFzeW5jRmlsZVN0cmVhbShjbGllbnQp
KTsKKyAgICBzdGF0aWMgTmV2ZXJEZXN0cm95ZWQ8TWVzc2FnZVF1ZXVlPHN0ZDo6ZnVuY3Rpb248
dm9pZCgpPj4+IHF1ZXVlOwogCi0gICAgLy8gSG9sZCBhIHJlZmVyZW5jZSBzbyB0aGF0IHRoZSBp
bnN0YW5jZSB3aWxsIG5vdCBnZXQgZGVsZXRlZCB3aGlsZSB0aGVyZSBhcmUgdGFza3Mgb24gdGhl
IGZpbGUgdGhyZWFkLgotICAgIC8vIFRoaXMgaXMgYmFsYW5jZWQgYnkgdGhlIGRlcmVmIGluIGRl
cmVmUHJveHlPbkNvbnRleHQgYmVsb3cuCi0gICAgcHJveHktPnJlZigpOworICAgIHN0YXRpYyBz
dGQ6Om9uY2VfZmxhZyBjcmVhdGVGaWxlVGhyZWFkT25jZTsKKyAgICBzdGQ6OmNhbGxfb25jZShj
cmVhdGVGaWxlVGhyZWFkT25jZSwgW10geworICAgICAgICBjcmVhdGVUaHJlYWQoIldlYkNvcmU6
IEFzeW5jRmlsZVN0cmVhbSIsIFtdIHsKKyAgICAgICAgICAgIGZvciAoOzspIHsKKyAgICAgICAg
ICAgICAgICBBdXRvZHJhaW5lZFBvb2wgcG9vbDsKIAotICAgIEFzeW5jRmlsZVN0cmVhbSogcHJv
eHlQdHIgPSBwcm94eS5nZXQoKTsKLSAgICBmaWxlVGhyZWFkKCktPnBvc3RUYXNrKHsgcHJveHlQ
dHIsIFs9XSB7Ci0gICAgICAgIC8vIEZJWE1FOiBJdCBpcyBub3QgY29ycmVjdCB0byBjaGVjayBt
X2NsaWVudCBmcm9tIGEgc2Vjb25kYXJ5IHRocmVhZCAtIHN0b3AoKSBjb3VsZCBiZSByYWNpbmcg
d2l0aCB0aGlzIGNoZWNrLgotICAgICAgICBpZiAoIXByb3h5UHRyLT5jbGllbnQoKSkKLSAgICAg
ICAgICAgIHJldHVybjsKKyAgICAgICAgICAgICAgICBhdXRvIGZ1bmN0aW9uID0gcXVldWUuZ2V0
KCkud2FpdEZvck1lc3NhZ2UoKTsKKworICAgICAgICAgICAgICAgIC8vIFRoaXMgY2FuIG5ldmVy
IGJlIG51bGwgYmVjYXVzZSB3ZSBuZXZlciBraWxsIHRoZSBNZXNzYWdlUXVldWUuCisgICAgICAg
ICAgICAgICAgQVNTRVJUKGZ1bmN0aW9uKTsKKworICAgICAgICAgICAgICAgIC8vIFRoaXMgY2Fu
IGJldmVyIGJlIG51bGwgYmVjYXVzZSB3ZSBuZXZlciBxdWV1ZSBhIGZ1bmN0aW9uIHRoYXQgaXMg
bnVsbC4KKyAgICAgICAgICAgICAgICBBU1NFUlQoKmZ1bmN0aW9uKTsKIAotICAgICAgICBwcm94
eVB0ci0+bV9zdHJlYW0tPnN0YXJ0KCk7Ci0gICAgICAgIGNhbGxPbk1haW5UaHJlYWQoW3Byb3h5
UHRyXSB7Ci0gICAgICAgICAgICBpZiAocHJveHlQdHItPmNsaWVudCgpKQotICAgICAgICAgICAg
ICAgIHByb3h5UHRyLT5jbGllbnQoKS0+ZGlkU3RhcnQoKTsKKyAgICAgICAgICAgICAgICAoKmZ1
bmN0aW9uKSgpOworICAgICAgICAgICAgfQogICAgICAgICB9KTsKLSAgICB9IH0pOworICAgIH0p
OwogCi0gICAgcmV0dXJuIHByb3h5LnJlbGVhc2UoKTsKKyAgICBxdWV1ZS5nZXQoKS5hcHBlbmQo
c3RkOjptYWtlX3VuaXF1ZTxzdGQ6OmZ1bmN0aW9uPHZvaWQoKT4+KFdURjo6bW92ZShmdW5jdGlv
bikpKTsKK30KKworQXN5bmNGaWxlU3RyZWFtOjpBc3luY0ZpbGVTdHJlYW0oRmlsZVN0cmVhbUNs
aWVudCYgY2xpZW50KQorICAgIDogbV9pbnRlcm5hbHMoc3RkOjptYWtlX3VuaXF1ZTxJbnRlcm5h
bHM+KGNsaWVudCkpCit7CisgICAgQVNTRVJUKGlzTWFpblRocmVhZCgpKTsKIH0KIAogQXN5bmNG
aWxlU3RyZWFtOjp+QXN5bmNGaWxlU3RyZWFtKCkKIHsKKyAgICBBU1NFUlQoaXNNYWluVGhyZWFk
KCkpOworCisgICAgLy8gUmVsZWFzZSBzbyB0aGF0IHdlIGNhbiBjb250cm9sIHRoZSB0aW1pbmcg
b2YgZGVsZXRpb24gYmVsb3cuCisgICAgYXV0byYgaW50ZXJuYWxzID0gKm1faW50ZXJuYWxzLnJl
bGVhc2UoKTsKKworICAgIC8vIFNldCBmbGFnIHRvIHByZXZlbnQgY2xpZW50IGNhbGxiYWNrcyBh
bmQgYWxzbyBwcmV2ZW50IHF1ZXVlZCBvcGVyYXRpb25zIGZyb20gc3RhcnRpbmcuCisgICAgaW50
ZXJuYWxzLmRlc3Ryb3llZCA9IHRydWU7CisKKyAgICAvLyBDYWxsIHRocm91Z2ggZmlsZSB0aHJl
YWQgYW5kIGJhY2sgdG8gbWFpbiB0aHJlYWQgdG8gbWFrZSBzdXJlIGRlbGV0aW9uIGhhcHBlbnMK
KyAgICAvLyBhZnRlciBhbGwgZmlsZSB0aHJlYWQgZnVuY3Rpb25zIGFuZCBhbGwgbWFpbiB0aHJl
YWQgZnVuY3Rpb25zIGNhbGxlZCBmcm9tIHRoZW0uCisgICAgY2FsbE9uRmlsZVRocmVhZChbJmlu
dGVybmFsc10geworICAgICAgICBjYWxsT25NYWluVGhyZWFkKFsmaW50ZXJuYWxzXSB7CisgICAg
ICAgICAgICBkZWxldGUgJmludGVybmFsczsKKyAgICAgICAgfSk7CisgICAgfSk7CiB9CiAKLXZv
aWQgQXN5bmNGaWxlU3RyZWFtOjpzdG9wKCkKK3ZvaWQgQXN5bmNGaWxlU3RyZWFtOjpwZXJmb3Jt
KHN0ZDo6ZnVuY3Rpb248c3RkOjpmdW5jdGlvbjx2b2lkKEZpbGVTdHJlYW1DbGllbnQmKT4oRmls
ZVN0cmVhbSYpPiBvcGVyYXRpb24pCiB7Ci0gICAgLy8gQ2xlYXIgdGhlIGNsaWVudCBzbyB0aGF0
IHdlIHdvbid0IGJlIGludm9raW5nIGNhbGxiYWNrcyBvbiB0aGUgY2xpZW50LgotICAgIHNldENs
aWVudCgwKTsKLQotICAgIGZpbGVUaHJlYWQoKS0+dW5zY2hlZHVsZVRhc2tzKG1fc3RyZWFtLmdl
dCgpKTsKLSAgICBmaWxlVGhyZWFkKCktPnBvc3RUYXNrKHsgdGhpcywgW3RoaXNdIHsKLSAgICAg
ICAgbV9zdHJlYW0tPnN0b3AoKTsKLSAgICAgICAgY2FsbE9uTWFpblRocmVhZChbdGhpc10gewot
ICAgICAgICAgICAgQVNTRVJUKGhhc09uZVJlZigpKTsKLSAgICAgICAgICAgIGRlcmVmKCk7Cisg
ICAgYXV0byYgaW50ZXJuYWxzID0gKm1faW50ZXJuYWxzOworICAgIGNhbGxPbkZpbGVUaHJlYWQo
WyZpbnRlcm5hbHMsIG9wZXJhdGlvbl0geworICAgICAgICAvLyBEb24ndCBkbyB0aGUgb3BlcmF0
aW9uIGlmIHN0b3Agd2FzIGFscmVhZHkgY2FsbGVkIG9uIHRoZSBtYWluIHRocmVhZC4gTm90ZSB0
aGF0IHRoZXJlIGlzCisgICAgICAgIC8vIGEgcmFjZSBoZXJlLCBidXQgc2luY2Ugc2tpcHBpbmcg
dGhlIG9wZXJhdGlvbiBpcyBhbiBvcHRpbWl6YXRpb24gaXQncyBPSyB0aGF0IHdlIGNhbid0Cisg
ICAgICAgIC8vIGd1YXJhbnRlZSBleGFjdGx5IHdoaWNoIG9wZXJhdGlvbnMgYXJlIHNraXBwZWQu
IE5vdGUgdGhhdCB0aGlzIGlzIGFsc28gdGhlIG9ubHkgcmVhc29uCisgICAgICAgIC8vIHdlIHVz
ZSBhbiBhdG9taWNfYm9vbCByYXRoZXIgdGhhbiBqdXN0IGEgYm9vbCBmb3IgZGVzdHJveWVkLgor
ICAgICAgICBpZiAoaW50ZXJuYWxzLmRlc3Ryb3llZCkKKyAgICAgICAgICAgIHJldHVybjsKKyAg
ICAgICAgYXV0byBtYWluVGhyZWFkV29yayA9IG9wZXJhdGlvbihpbnRlcm5hbHMuc3RyZWFtKTsK
KyAgICAgICAgY2FsbE9uTWFpblRocmVhZChbJmludGVybmFscywgbWFpblRocmVhZFdvcmtdIHsK
KyAgICAgICAgICAgIGlmIChpbnRlcm5hbHMuZGVzdHJveWVkKQorICAgICAgICAgICAgICAgIHJl
dHVybjsKKyAgICAgICAgICAgIG1haW5UaHJlYWRXb3JrKGludGVybmFscy5jbGllbnQpOwogICAg
ICAgICB9KTsKLSAgICB9IH0pOworICAgIH0pOwogfQogCiB2b2lkIEFzeW5jRmlsZVN0cmVhbTo6
Z2V0U2l6ZShjb25zdCBTdHJpbmcmIHBhdGgsIGRvdWJsZSBleHBlY3RlZE1vZGlmaWNhdGlvblRp
bWUpCiB7Ci0gICAgU3RyaW5nIHBhdGhDb3B5ID0gcGF0aC5pc29sYXRlZENvcHkoKTsKLSAgICBm
aWxlVGhyZWFkKCktPnBvc3RUYXNrKHsgdGhpcywgW3RoaXMsIHBhdGhDb3B5LCBleHBlY3RlZE1v
ZGlmaWNhdGlvblRpbWVdIHsKLSAgICAgICAgbG9uZyBsb25nIHNpemUgPSBtX3N0cmVhbS0+Z2V0
U2l6ZShwYXRoQ29weSwgZXhwZWN0ZWRNb2RpZmljYXRpb25UaW1lKTsKLSAgICAgICAgY2FsbE9u
TWFpblRocmVhZChbdGhpcywgc2l6ZV0gewotICAgICAgICAgICAgaWYgKGNsaWVudCgpKQotICAg
ICAgICAgICAgICAgIGNsaWVudCgpLT5kaWRHZXRTaXplKHNpemUpOwotICAgICAgICB9KTsKLSAg
ICB9IH0pOworICAgIFN0cmluZ0NhcHR1cmUgY2FwdHVyZWRQYXRoKHBhdGgpOworICAgIHBlcmZv
cm0oW2NhcHR1cmVkUGF0aCwgZXhwZWN0ZWRNb2RpZmljYXRpb25UaW1lXShGaWxlU3RyZWFtJiBz
dHJlYW0pIHsKKyAgICAgICAgbG9uZyBsb25nIHNpemUgPSBzdHJlYW0uZ2V0U2l6ZShjYXB0dXJl
ZFBhdGguc3RyaW5nKCksIGV4cGVjdGVkTW9kaWZpY2F0aW9uVGltZSk7CisgICAgICAgIHJldHVy
biBbc2l6ZV0oRmlsZVN0cmVhbUNsaWVudCYgY2xpZW50KSB7CisgICAgICAgICAgICBjbGllbnQu
ZGlkR2V0U2l6ZShzaXplKTsKKyAgICAgICAgfTsKKyAgICB9KTsKIH0KIAogdm9pZCBBc3luY0Zp
bGVTdHJlYW06Om9wZW5Gb3JSZWFkKGNvbnN0IFN0cmluZyYgcGF0aCwgbG9uZyBsb25nIG9mZnNl
dCwgbG9uZyBsb25nIGxlbmd0aCkKIHsKLSAgICBTdHJpbmcgcGF0aENvcHkgPSBwYXRoLmlzb2xh
dGVkQ29weSgpOwotICAgIGZpbGVUaHJlYWQoKS0+cG9zdFRhc2soeyB0aGlzLCBbdGhpcywgcGF0
aENvcHksIG9mZnNldCwgbGVuZ3RoXSB7Ci0gICAgICAgIGJvb2wgc3VjY2VzcyA9IG1fc3RyZWFt
LT5vcGVuRm9yUmVhZChwYXRoQ29weSwgb2Zmc2V0LCBsZW5ndGgpOwotICAgICAgICBjYWxsT25N
YWluVGhyZWFkKFt0aGlzLCBzdWNjZXNzXSB7Ci0gICAgICAgICAgICBpZiAoY2xpZW50KCkpCi0g
ICAgICAgICAgICAgICAgY2xpZW50KCktPmRpZE9wZW4oc3VjY2Vzcyk7Ci0gICAgICAgIH0pOwot
ICAgIH0gfSk7CisgICAgU3RyaW5nQ2FwdHVyZSBjYXB0dXJlZFBhdGgocGF0aCk7CisgICAgcGVy
Zm9ybShbY2FwdHVyZWRQYXRoLCBvZmZzZXQsIGxlbmd0aF0oRmlsZVN0cmVhbSYgc3RyZWFtKSB7
CisgICAgICAgIGJvb2wgc3VjY2VzcyA9IHN0cmVhbS5vcGVuRm9yUmVhZChjYXB0dXJlZFBhdGgu
c3RyaW5nKCksIG9mZnNldCwgbGVuZ3RoKTsKKyAgICAgICAgcmV0dXJuIFtzdWNjZXNzXShGaWxl
U3RyZWFtQ2xpZW50JiBjbGllbnQpIHsKKyAgICAgICAgICAgIGNsaWVudC5kaWRPcGVuKHN1Y2Nl
c3MpOworICAgICAgICB9OworICAgIH0pOwogfQogCiB2b2lkIEFzeW5jRmlsZVN0cmVhbTo6b3Bl
bkZvcldyaXRlKGNvbnN0IFN0cmluZyYgcGF0aCkKIHsKLSAgICBTdHJpbmcgcGF0aENvcHkgPSBw
YXRoLmlzb2xhdGVkQ29weSgpOwotICAgIGZpbGVUaHJlYWQoKS0+cG9zdFRhc2soeyB0aGlzLCBb
dGhpcywgcGF0aENvcHldIHsKLSAgICAgICAgYm9vbCBzdWNjZXNzID0gbV9zdHJlYW0tPm9wZW5G
b3JXcml0ZShwYXRoQ29weSk7Ci0gICAgICAgIGNhbGxPbk1haW5UaHJlYWQoW3RoaXMsIHN1Y2Nl
c3NdIHsKLSAgICAgICAgICAgIGlmIChjbGllbnQoKSkKLSAgICAgICAgICAgICAgICBjbGllbnQo
KS0+ZGlkT3BlbihzdWNjZXNzKTsKLSAgICAgICAgfSk7Ci0gICAgfSB9KTsKKyAgICBTdHJpbmdD
YXB0dXJlIGNhcHR1cmVkUGF0aChwYXRoKTsKKyAgICBwZXJmb3JtKFtjYXB0dXJlZFBhdGhdKEZp
bGVTdHJlYW0mIHN0cmVhbSkgeworICAgICAgICBib29sIHN1Y2Nlc3MgPSBzdHJlYW0ub3BlbkZv
cldyaXRlKGNhcHR1cmVkUGF0aC5zdHJpbmcoKSk7CisgICAgICAgIHJldHVybiBbc3VjY2Vzc10o
RmlsZVN0cmVhbUNsaWVudCYgY2xpZW50KSB7CisgICAgICAgICAgICBjbGllbnQuZGlkT3Blbihz
dWNjZXNzKTsKKyAgICAgICAgfTsKKyAgICB9KTsKIH0KIAogdm9pZCBBc3luY0ZpbGVTdHJlYW06
OmNsb3NlKCkKIHsKLSAgICBmaWxlVGhyZWFkKCktPnBvc3RUYXNrKHt0aGlzLCBbdGhpc10gewot
ICAgICAgICBtX3N0cmVhbS0+Y2xvc2UoKTsKLSAgICB9IH0pOworICAgIGF1dG8mIGludGVybmFs
cyA9ICptX2ludGVybmFsczsKKyAgICBjYWxsT25GaWxlVGhyZWFkKFsmaW50ZXJuYWxzXSB7Cisg
ICAgICAgIGludGVybmFscy5zdHJlYW0uY2xvc2UoKTsKKyAgICB9KTsKIH0KIAogdm9pZCBBc3lu
Y0ZpbGVTdHJlYW06OnJlYWQoY2hhciogYnVmZmVyLCBpbnQgbGVuZ3RoKQogewotICAgIGZpbGVU
aHJlYWQoKS0+cG9zdFRhc2soeyB0aGlzLCBbdGhpcywgYnVmZmVyLCBsZW5ndGhdIHsKLSAgICAg
ICAgaW50IGJ5dGVzUmVhZCA9IG1fc3RyZWFtLT5yZWFkKGJ1ZmZlciwgbGVuZ3RoKTsKLSAgICAg
ICAgY2FsbE9uTWFpblRocmVhZChbdGhpcywgYnl0ZXNSZWFkXSB7Ci0gICAgICAgICAgICBpZiAo
Y2xpZW50KCkpCi0gICAgICAgICAgICAgICAgY2xpZW50KCktPmRpZFJlYWQoYnl0ZXNSZWFkKTsK
LSAgICAgICAgfSk7Ci0gICAgfSB9KTsKKyAgICBwZXJmb3JtKFtidWZmZXIsIGxlbmd0aF0oRmls
ZVN0cmVhbSYgc3RyZWFtKSB7CisgICAgICAgIGludCBieXRlc1JlYWQgPSBzdHJlYW0ucmVhZChi
dWZmZXIsIGxlbmd0aCk7CisgICAgICAgIHJldHVybiBbYnl0ZXNSZWFkXShGaWxlU3RyZWFtQ2xp
ZW50JiBjbGllbnQpIHsKKyAgICAgICAgICAgIGNsaWVudC5kaWRSZWFkKGJ5dGVzUmVhZCk7Cisg
ICAgICAgIH07CisgICAgfSk7CiB9CiAKIHZvaWQgQXN5bmNGaWxlU3RyZWFtOjp3cml0ZShjb25z
dCBVUkwmIGJsb2JVUkwsIGxvbmcgbG9uZyBwb3NpdGlvbiwgaW50IGxlbmd0aCkKIHsKLSAgICBV
UkwgYmxvYlVSTENvcHkgPSBibG9iVVJMLmNvcHkoKTsKLSAgICBmaWxlVGhyZWFkKCktPnBvc3RU
YXNrKHsgdGhpcywgW3RoaXMsIGJsb2JVUkxDb3B5LCBwb3NpdGlvbiwgbGVuZ3RoXSB7Ci0gICAg
ICAgIGludCBieXRlc1dyaXR0ZW4gPSBtX3N0cmVhbS0+d3JpdGUoYmxvYlVSTENvcHksIHBvc2l0
aW9uLCBsZW5ndGgpOwotICAgICAgICBjYWxsT25NYWluVGhyZWFkKFt0aGlzLCBieXRlc1dyaXR0
ZW5dIHsKLSAgICAgICAgICAgIGlmIChjbGllbnQoKSkKLSAgICAgICAgICAgICAgICBjbGllbnQo
KS0+ZGlkV3JpdGUoYnl0ZXNXcml0dGVuKTsKLSAgICAgICAgfSk7Ci0gICAgfSB9KTsKKyAgICAv
LyBGSVhNRTogV291bGQgYmUgbW9yZSBlbGVnYW50IHRvIGhhdmUgYSBVUkxDYXB0dXJlIGZvciBj
YXNlcyBsaWtlIHRoaXMgdG8gYXZvaWQgcmUtcGFyc2luZyB0aGUgVVJMLgorICAgIFN0cmluZ0Nh
cHR1cmUgY2FwdHVyZWRVUkwoYmxvYlVSTC5zdHJpbmcoKSk7CisgICAgcGVyZm9ybShbY2FwdHVy
ZWRVUkwsIHBvc2l0aW9uLCBsZW5ndGhdKEZpbGVTdHJlYW0mIHN0cmVhbSkgeworICAgICAgICBp
bnQgYnl0ZXNXcml0dGVuID0gc3RyZWFtLndyaXRlKFVSTChQYXJzZWRVUkxTdHJpbmcsIGNhcHR1
cmVkVVJMLnN0cmluZygpKSwgcG9zaXRpb24sIGxlbmd0aCk7CisgICAgICAgIHJldHVybiBbYnl0
ZXNXcml0dGVuXShGaWxlU3RyZWFtQ2xpZW50JiBjbGllbnQpIHsKKyAgICAgICAgICAgIGNsaWVu
dC5kaWRXcml0ZShieXRlc1dyaXR0ZW4pOworICAgICAgICB9OworICAgIH0pOwogfQogCiB2b2lk
IEFzeW5jRmlsZVN0cmVhbTo6dHJ1bmNhdGUobG9uZyBsb25nIHBvc2l0aW9uKQogewotICAgIGZp
bGVUaHJlYWQoKS0+cG9zdFRhc2soeyB0aGlzLCBbdGhpcywgcG9zaXRpb25dIHsKLSAgICAgICAg
Ym9vbCBzdWNjZXNzID0gbV9zdHJlYW0tPnRydW5jYXRlKHBvc2l0aW9uKTsKLSAgICAgICAgY2Fs
bE9uTWFpblRocmVhZChbdGhpcywgc3VjY2Vzc10gewotICAgICAgICAgICAgaWYgKGNsaWVudCgp
KQotICAgICAgICAgICAgICAgIGNsaWVudCgpLT5kaWRUcnVuY2F0ZShzdWNjZXNzKTsKLSAgICAg
ICAgfSk7Ci0gICAgfSB9KTsKKyAgICBwZXJmb3JtKFtwb3NpdGlvbl0oRmlsZVN0cmVhbSYgc3Ry
ZWFtKSB7CisgICAgICAgIGJvb2wgc3VjY2VzcyA9IHN0cmVhbS50cnVuY2F0ZShwb3NpdGlvbik7
CisgICAgICAgIHJldHVybiBbc3VjY2Vzc10oRmlsZVN0cmVhbUNsaWVudCYgY2xpZW50KSB7Cisg
ICAgICAgICAgICBjbGllbnQuZGlkVHJ1bmNhdGUoc3VjY2Vzcyk7CisgICAgICAgIH07CisgICAg
fSk7CiB9CiAKIH0gLy8gbmFtZXNwYWNlIFdlYkNvcmUKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJD
b3JlL2ZpbGVhcGkvQXN5bmNGaWxlU3RyZWFtLmggYi9Tb3VyY2UvV2ViQ29yZS9maWxlYXBpL0Fz
eW5jRmlsZVN0cmVhbS5oCmluZGV4IGI2MGJjNjA3MTU1NTI2ZjgzNmE4MDIwMGE5OGUwMDcwY2Vj
Y2VlMjMuLjQyOGY3MzBlZTQ3NmNlYmJiNDc5MWRiN2Y5ZTU5NWVlMjk3MGJlYzcgMTAwNjQ0Ci0t
LSBhL1NvdXJjZS9XZWJDb3JlL2ZpbGVhcGkvQXN5bmNGaWxlU3RyZWFtLmgKKysrIGIvU291cmNl
L1dlYkNvcmUvZmlsZWFwaS9Bc3luY0ZpbGVTdHJlYW0uaApAQCAtMSw2ICsxLDYgQEAKIC8qCi0g
KiBDb3B5cmlnaHQgKEMpIDIwMTAgR29vZ2xlIEluYy4gIEFsbCByaWdodHMgcmVzZXJ2ZWQuCi0g
KiBDb3B5cmlnaHQgKEMpIDIwMTAsIDIwMTIgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVk
LgorICogQ29weXJpZ2h0IChDKSAyMDEwIEdvb2dsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQu
CisgKiBDb3B5cmlnaHQgKEMpIDIwMTAsIDIwMTIsIDIwMTQgQXBwbGUgSW5jLiBBbGwgcmlnaHRz
IHJlc2VydmVkLgogICoKICAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBi
aW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAogICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0
dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zIGFyZQpAQCAtMzIsOSAr
MzIsOCBAQAogI2lmbmRlZiBBc3luY0ZpbGVTdHJlYW1faAogI2RlZmluZSBBc3luY0ZpbGVTdHJl
YW1faAogCisjaW5jbHVkZSA8ZnVuY3Rpb25hbD4KICNpbmNsdWRlIDx3dGYvRm9yd2FyZC5oPgot
I2luY2x1ZGUgPHd0Zi9SZWZDb3VudGVkLmg+Ci0jaW5jbHVkZSA8d3RmL1JlZlB0ci5oPgogCiBu
YW1lc3BhY2UgV2ViQ29yZSB7CiAKQEAgLTQyLDkgKzQxLDkgQEAgY2xhc3MgRmlsZVN0cmVhbUNs
aWVudDsKIGNsYXNzIEZpbGVTdHJlYW07CiBjbGFzcyBVUkw7CiAKLWNsYXNzIEFzeW5jRmlsZVN0
cmVhbSA6IHB1YmxpYyBSZWZDb3VudGVkPEFzeW5jRmlsZVN0cmVhbT4geworY2xhc3MgQXN5bmNG
aWxlU3RyZWFtIHsKIHB1YmxpYzoKLSAgICBzdGF0aWMgUGFzc1JlZlB0cjxBc3luY0ZpbGVTdHJl
YW0+IGNyZWF0ZShGaWxlU3RyZWFtQ2xpZW50Kik7CisgICAgZXhwbGljaXQgQXN5bmNGaWxlU3Ry
ZWFtKEZpbGVTdHJlYW1DbGllbnQmKTsKICAgICB+QXN5bmNGaWxlU3RyZWFtKCk7CiAKICAgICB2
b2lkIGdldFNpemUoY29uc3QgU3RyaW5nJiBwYXRoLCBkb3VibGUgZXhwZWN0ZWRNb2RpZmljYXRp
b25UaW1lKTsKQEAgLTU1LDE4ICs1NCwxMiBAQCBwdWJsaWM6CiAgICAgdm9pZCB3cml0ZShjb25z
dCBVUkwmIGJsb2JVUkwsIGxvbmcgbG9uZyBwb3NpdGlvbiwgaW50IGxlbmd0aCk7CiAgICAgdm9p
ZCB0cnVuY2F0ZShsb25nIGxvbmcgcG9zaXRpb24pOwogCi0gICAgLy8gU3RvcHMgdGhlIHByb3h5
IGFuZCBzY2hlZHVsZXMgaXQgdG8gYmUgZGVzdHJ1Y3RlZC4gQWxsIHRoZSBwZW5kaW5nIHRhc2tz
IHdpbGwgYmUgYWJvcnRlZCBhbmQgdGhlIGZpbGUgc3RyZWFtIHdpbGwgYmUgY2xvc2VkLgotICAg
IC8vIE5vdGU6IHRoZSBjYWxsZXIgc2hvdWxkIGRlcmVmIHRoZSBpbnN0YW5jZSBpbW1lZGlhdGVs
eSBhZnRlciBjYWxsaW5nIHN0b3AoKS4KLSAgICB2b2lkIHN0b3AoKTsKLQotICAgIEZpbGVTdHJl
YW1DbGllbnQqIGNsaWVudCgpIGNvbnN0IHsgcmV0dXJuIG1fY2xpZW50OyB9Ci0gICAgdm9pZCBz
ZXRDbGllbnQoRmlsZVN0cmVhbUNsaWVudCogY2xpZW50KSB7IG1fY2xpZW50ID0gY2xpZW50OyB9
Ci0KIHByaXZhdGU6Ci0gICAgQXN5bmNGaWxlU3RyZWFtKEZpbGVTdHJlYW1DbGllbnQqKTsKKyAg
ICB2b2lkIHN0YXJ0KCk7CisgICAgdm9pZCBwZXJmb3JtKHN0ZDo6ZnVuY3Rpb248c3RkOjpmdW5j
dGlvbjx2b2lkKEZpbGVTdHJlYW1DbGllbnQmKT4oRmlsZVN0cmVhbSYpPik7CiAKLSAgICBSZWZQ
dHI8RmlsZVN0cmVhbT4gbV9zdHJlYW07Ci0gICAgRmlsZVN0cmVhbUNsaWVudCogbV9jbGllbnQ7
CisgICAgc3RydWN0IEludGVybmFsczsKKyAgICBzdGQ6OnVuaXF1ZV9wdHI8SW50ZXJuYWxzPiBt
X2ludGVybmFsczsKIH07CiAKIH0gLy8gbmFtZXNwYWNlIFdlYkNvcmUKZGlmZiAtLWdpdCBhL1Nv
dXJjZS9XZWJDb3JlL2ZpbGVhcGkvRmlsZVRocmVhZC5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9maWxl
YXBpL0ZpbGVUaHJlYWQuY3BwCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAzNGVhNWQ3
ZTExNDBmZDRlNDVjYjcwMmVmZmY0NjYzNDQ5ODU5YjdhLi4wMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwCi0tLSBhL1NvdXJjZS9XZWJDb3JlL2ZpbGVhcGkvRmlsZVRocmVh
ZC5jcHAKKysrIC9kZXYvbnVsbApAQCAtMSwxMTMgKzAsMCBAQAotLyoKLSAqIENvcHlyaWdodCAo
QykgMjAxMCBHb29nbGUgSW5jLiAgQWxsIHJpZ2h0cyByZXNlcnZlZC4KLSAqCi0gKiBSZWRpc3Ry
aWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhv
dXQKLSAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xs
b3dpbmcgY29uZGl0aW9ucyBhcmUKLSAqIG1ldDoKLSAqCi0gKiAgICAgKiBSZWRpc3RyaWJ1dGlv
bnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAotICogbm90
aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVy
LgotICogICAgICogUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNl
IHRoZSBhYm92ZQotICogY29weXJpZ2h0IG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMg
YW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lcgotICogaW4gdGhlIGRvY3VtZW50YXRpb24gYW5k
L29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZQotICogZGlzdHJpYnV0aW9uLgot
ICogICAgICogTmVpdGhlciB0aGUgbmFtZSBvZiBHb29nbGUgSW5jLiBub3IgdGhlIG5hbWVzIG9m
IGl0cwotICogY29udHJpYnV0b3JzIG1heSBiZSB1c2VkIHRvIGVuZG9yc2Ugb3IgcHJvbW90ZSBw
cm9kdWN0cyBkZXJpdmVkIGZyb20KLSAqIHRoaXMgc29mdHdhcmUgd2l0aG91dCBzcGVjaWZpYyBw
cmlvciB3cml0dGVuIHBlcm1pc3Npb24uCi0gKgotICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURF
RCBCWSBUSEUgQ09QWVJJR0hUIEhPTERFUlMgQU5EIENPTlRSSUJVVE9SUwotICogIkFTIElTIiBB
TkQgQU5ZIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QK
LSAqIExJTUlURUQgVE8sIFRIRSBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZ
IEFORCBGSVRORVNTIEZPUgotICogQSBQQVJUSUNVTEFSIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQu
IElOIE5PIEVWRU5UIFNIQUxMIFRIRSBDT1BZUklHSFQKLSAqIE9XTkVSIE9SIENPTlRSSUJVVE9S
UyBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLAotICogU1BF
Q0lBTCwgRVhFTVBMQVJZLCBPUiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVU
IE5PVAotICogTElNSVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBHT09EUyBPUiBT
RVJWSUNFUzsgTE9TUyBPRiBVU0UsCi0gKiBEQVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJ
TlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkKLSAqIFRIRU9SWSBPRiBMSUFC
SUxJVFksIFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQKLSAq
IChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdBWSBP
VVQgT0YgVEhFIFVTRQotICogT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRI
RSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4KLSAqLwotCi0jaW5jbHVkZSAiY29uZmlnLmgi
Ci0KLSNpbmNsdWRlICJGaWxlVGhyZWFkLmgiCi0KLSNpbmNsdWRlICJMb2dnaW5nLmgiCi0jaW5j
bHVkZSA8d3RmL0F1dG9kcmFpbmVkUG9vbC5oPgotCi1uYW1lc3BhY2UgV2ViQ29yZSB7Ci0KLUZp
bGVUaHJlYWQ6OkZpbGVUaHJlYWQoKQotICAgIDogbV90aHJlYWRJRCgwKQotewotICAgIG1fc2Vs
ZlJlZiA9IHRoaXM7Ci19Ci0KLUZpbGVUaHJlYWQ6On5GaWxlVGhyZWFkKCkKLXsKLSAgICBBU1NF
UlQobV9xdWV1ZS5raWxsZWQoKSk7Ci19Ci0KLWJvb2wgRmlsZVRocmVhZDo6c3RhcnQoKQotewot
ICAgIE11dGV4TG9ja2VyIGxvY2sobV90aHJlYWRDcmVhdGlvbk11dGV4KTsKLSAgICBpZiAobV90
aHJlYWRJRCkKLSAgICAgICAgcmV0dXJuIHRydWU7Ci0gICAgbV90aHJlYWRJRCA9IGNyZWF0ZVRo
cmVhZChGaWxlVGhyZWFkOjpmaWxlVGhyZWFkU3RhcnQsIHRoaXMsICJXZWJDb3JlOiBGaWxlIik7
Ci0gICAgcmV0dXJuIG1fdGhyZWFkSUQ7Ci19Ci0KLXZvaWQgRmlsZVRocmVhZDo6c3RvcCgpCi17
Ci0gICAgbV9xdWV1ZS5raWxsKCk7Ci19Ci0KLXZvaWQgRmlsZVRocmVhZDo6cG9zdFRhc2soVGFz
ayB0YXNrKQotewotICAgIG1fcXVldWUuYXBwZW5kKHN0ZDo6bWFrZV91bmlxdWU8RmlsZVRocmVh
ZDo6VGFzaz4oV1RGOjptb3ZlKHRhc2spKSk7Ci19Ci0KLWNsYXNzIFNhbWVJbnN0YW5jZVByZWRp
Y2F0ZSB7Ci1wdWJsaWM6Ci0gICAgU2FtZUluc3RhbmNlUHJlZGljYXRlKGNvbnN0IHZvaWQqIGlu
c3RhbmNlKSA6IG1faW5zdGFuY2UoaW5zdGFuY2UpIHsgfQotICAgIGJvb2wgb3BlcmF0b3IoKShG
aWxlVGhyZWFkOjpUYXNrJiB0YXNrKSBjb25zdCB7IHJldHVybiB0YXNrLmluc3RhbmNlKCkgPT0g
bV9pbnN0YW5jZTsgfQotcHJpdmF0ZToKLSAgICBjb25zdCB2b2lkKiBtX2luc3RhbmNlOwotfTsK
LQotdm9pZCBGaWxlVGhyZWFkOjp1bnNjaGVkdWxlVGFza3MoY29uc3Qgdm9pZCogaW5zdGFuY2Up
Ci17Ci0gICAgU2FtZUluc3RhbmNlUHJlZGljYXRlIHByZWRpY2F0ZShpbnN0YW5jZSk7Ci0gICAg
bV9xdWV1ZS5yZW1vdmVJZihwcmVkaWNhdGUpOwotfQotCi12b2lkIEZpbGVUaHJlYWQ6OmZpbGVU
aHJlYWRTdGFydCh2b2lkKiBhcmcpCi17Ci0gICAgRmlsZVRocmVhZCogZmlsZVRocmVhZCA9IHN0
YXRpY19jYXN0PEZpbGVUaHJlYWQqPihhcmcpOwotICAgIGZpbGVUaHJlYWQtPnJ1bkxvb3AoKTsK
LX0KLQotdm9pZCBGaWxlVGhyZWFkOjpydW5Mb29wKCkKLXsKLSAgICB7Ci0gICAgICAgIC8vIFdh
aXQgZm9yIEZpbGVUaHJlYWQ6OnN0YXJ0KCkgdG8gY29tcGxldGUgdG8gaGF2ZSBtX3RocmVhZElE
Ci0gICAgICAgIC8vIGVzdGFibGlzaGVkIGJlZm9yZSBzdGFydGluZyB0aGUgbWFpbiBsb29wLgot
ICAgICAgICBNdXRleExvY2tlciBsb2NrKG1fdGhyZWFkQ3JlYXRpb25NdXRleCk7Ci0gICAgICAg
IExPRyhGaWxlQVBJLCAiU3RhcnRlZCBGaWxlVGhyZWFkICVwIiwgdGhpcyk7Ci0gICAgfQotCi0g
ICAgd2hpbGUgKGF1dG8gdGFzayA9IG1fcXVldWUud2FpdEZvck1lc3NhZ2UoKSkgewotICAgICAg
ICBBdXRvZHJhaW5lZFBvb2wgcG9vbDsKLQotICAgICAgICB0YXNrLT5wZXJmb3JtVGFzaygpOwot
ICAgIH0KLQotICAgIExPRyhGaWxlQVBJLCAiQWJvdXQgdG8gZGV0YWNoIHRocmVhZCAlaSBhbmQg
Y2xlYXIgdGhlIHJlZiB0byBGaWxlVGhyZWFkICVwLCB3aGljaCBjdXJyZW50bHkgaGFzICVpIHJl
ZihzKSIsIG1fdGhyZWFkSUQsIHRoaXMsIHJlZkNvdW50KCkpOwotCi0gICAgZGV0YWNoVGhyZWFk
KG1fdGhyZWFkSUQpOwotCi0gICAgLy8gQ2xlYXIgdGhlIHNlbGYgcmVmcHRyLCBwb3NzaWJseSBy
ZXN1bHRpbmcgaW4gZGVsZXRpb24KLSAgICBtX3NlbGZSZWYgPSAwOwotfQotCi19IC8vIG5hbWVz
cGFjZSBXZWJDb3JlCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9maWxlYXBpL0ZpbGVUaHJl
YWQuaCBiL1NvdXJjZS9XZWJDb3JlL2ZpbGVhcGkvRmlsZVRocmVhZC5oCmRlbGV0ZWQgZmlsZSBt
b2RlIDEwMDY0NAppbmRleCA5ZGUyZmVkYmYxODM4MjEyMzQ3ZGZhYTkyMGQ1YTFlNzVhYmU3NTg0
Li4wMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwCi0tLSBhL1NvdXJjZS9X
ZWJDb3JlL2ZpbGVhcGkvRmlsZVRocmVhZC5oCisrKyAvZGV2L251bGwKQEAgLTEsMTAxICswLDAg
QEAKLS8qCi0gKiBDb3B5cmlnaHQgKEMpIDIwMTAgR29vZ2xlIEluYy4gIEFsbCByaWdodHMgcmVz
ZXJ2ZWQuCi0gKgotICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFy
eSBmb3Jtcywgd2l0aCBvciB3aXRob3V0Ci0gKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQg
cHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMgYXJlCi0gKiBtZXQ6Ci0gKgot
ICogICAgICogUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBh
Ym92ZSBjb3B5cmlnaHQKLSAqIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRo
ZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KLSAqICAgICAqIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5h
cnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUKLSAqIGNvcHlyaWdodCBub3RpY2UsIHRo
aXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIKLSAqIGlu
IHRoZSBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0
aGUKLSAqIGRpc3RyaWJ1dGlvbi4KLSAqICAgICAqIE5laXRoZXIgdGhlIG5hbWUgb2YgR29vZ2xl
IEluYy4gbm9yIHRoZSBuYW1lcyBvZiBpdHMKLSAqIGNvbnRyaWJ1dG9ycyBtYXkgYmUgdXNlZCB0
byBlbmRvcnNlIG9yIHByb21vdGUgcHJvZHVjdHMgZGVyaXZlZCBmcm9tCi0gKiB0aGlzIHNvZnR3
YXJlIHdpdGhvdXQgc3BlY2lmaWMgcHJpb3Igd3JpdHRlbiBwZXJtaXNzaW9uLgotICoKLSAqIFRI
SVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgVEhFIENPUFlSSUdIVCBIT0xERVJTIEFORCBDT05U
UklCVVRPUlMKLSAqICJBUyBJUyIgQU5EIEFOWSBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElF
UywgSU5DTFVESU5HLCBCVVQgTk9UCi0gKiBMSU1JVEVEIFRPLCBUSEUgSU1QTElFRCBXQVJSQU5U
SUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IKLSAqIEEgUEFSVElDVUxBUiBQ
VVJQT1NFIEFSRSBESVNDTEFJTUVELiBJTiBOTyBFVkVOVCBTSEFMTCBUSEUgQ09QWVJJR0hUCi0g
KiBPV05FUiBPUiBDT05UUklCVVRPUlMgQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVD
VCwgSU5DSURFTlRBTCwKLSAqIFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTCBE
QU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QKLSAqIExJTUlURUQgVE8sIFBST0NVUkVNRU5UIE9G
IFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLAotICogREFUQSwgT1Ig
UFJPRklUUzsgT1IgQlVTSU5FU1MgSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04g
QU5ZCi0gKiBUSEVPUlkgT0YgTElBQklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNULCBTVFJJQ1Qg
TElBQklMSVRZLCBPUiBUT1JUCi0gKiAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNF
KSBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UKLSAqIE9GIFRISVMgU09GVFdBUkUs
IEVWRU4gSUYgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCi0gKi8K
LQotI2lmbmRlZiBGaWxlVGhyZWFkX2gKLSNkZWZpbmUgRmlsZVRocmVhZF9oCi0KLSNpbmNsdWRl
IDxmdW5jdGlvbmFsPgotI2luY2x1ZGUgPHd0Zi9NZXNzYWdlUXVldWUuaD4KLSNpbmNsdWRlIDx3
dGYvUGFzc1JlZlB0ci5oPgotI2luY2x1ZGUgPHd0Zi9UaHJlYWRpbmcuaD4KLQotbmFtZXNwYWNl
IFdlYkNvcmUgewotCi1jbGFzcyBGaWxlU3RyZWFtOwotCi1jbGFzcyBGaWxlVGhyZWFkIDogcHVi
bGljIFRocmVhZFNhZmVSZWZDb3VudGVkPEZpbGVUaHJlYWQ+IHsKLXB1YmxpYzoKLSAgICBzdGF0
aWMgUGFzc1JlZlB0cjxGaWxlVGhyZWFkPiBjcmVhdGUoKQotICAgIHsKLSAgICAgICAgcmV0dXJu
IGFkb3B0UmVmKG5ldyBGaWxlVGhyZWFkKCkpOwotICAgIH0KLQotICAgIH5GaWxlVGhyZWFkKCk7
Ci0KLSAgICBib29sIHN0YXJ0KCk7Ci0gICAgdm9pZCBzdG9wKCk7Ci0KLSAgICBjbGFzcyBUYXNr
IHsKLSAgICAgICAgV1RGX01BS0VfTk9OQ09QWUFCTEUoVGFzayk7Ci0gICAgcHVibGljOgotICAg
ICAgICB0ZW1wbGF0ZTx0eXBlbmFtZSBULCB0eXBlbmFtZSBVLCB0eXBlbmFtZSA9IHR5cGVuYW1l
IHN0ZDo6ZW5hYmxlX2lmPCFzdGQ6OmlzX2Jhc2Vfb2Y8VGFzaywgVT46OnZhbHVlICYmIHN0ZDo6
aXNfY29udmVydGlibGU8VSwgc3RkOjpmdW5jdGlvbjx2b2lkICgpPj46OnZhbHVlPjo6dHlwZT4K
LSAgICAgICAgVGFzayhUKiBpbnN0YW5jZSwgVSBtZXRob2QpCi0gICAgICAgICAgICA6IG1fdGFz
ayhXVEY6Om1vdmUobWV0aG9kKSkKLSAgICAgICAgICAgICwgbV9pbnN0YW5jZShpbnN0YW5jZSkK
LSAgICAgICAgewotICAgICAgICB9Ci0KLSAgICAgICAgVGFzayhUYXNrJiYgb3RoZXIpCi0gICAg
ICAgICAgICA6IG1fdGFzayhXVEY6Om1vdmUob3RoZXIubV90YXNrKSkKLSAgICAgICAgICAgICwg
bV9pbnN0YW5jZShvdGhlci5tX2luc3RhbmNlKQotICAgICAgICB7Ci0gICAgICAgIH0KLQotICAg
ICAgICB2b2lkIHBlcmZvcm1UYXNrKCkKLSAgICAgICAgewotICAgICAgICAgICAgbV90YXNrKCk7
Ci0gICAgICAgIH0KLSAgICAgICAgdm9pZCogaW5zdGFuY2UoKSBjb25zdCB7IHJldHVybiBtX2lu
c3RhbmNlOyB9Ci0KLSAgICBwcml2YXRlOgotICAgICAgICBzdGQ6OmZ1bmN0aW9uPHZvaWQgKCk+
IG1fdGFzazsKLSAgICAgICAgdm9pZCogbV9pbnN0YW5jZTsKLSAgICB9OwotCi0gICAgdm9pZCBw
b3N0VGFzayhUYXNrKTsKLQotICAgIHZvaWQgdW5zY2hlZHVsZVRhc2tzKGNvbnN0IHZvaWQqIGlu
c3RhbmNlKTsKLQotcHJpdmF0ZToKLSAgICBGaWxlVGhyZWFkKCk7Ci0KLSAgICBzdGF0aWMgdm9p
ZCBmaWxlVGhyZWFkU3RhcnQodm9pZCopOwotICAgIHZvaWQgcnVuTG9vcCgpOwotCi0gICAgVGhy
ZWFkSWRlbnRpZmllciBtX3RocmVhZElEOwotICAgIFJlZlB0cjxGaWxlVGhyZWFkPiBtX3NlbGZS
ZWY7Ci0gICAgTWVzc2FnZVF1ZXVlPFRhc2s+IG1fcXVldWU7Ci0KLSAgICBNdXRleCBtX3RocmVh
ZENyZWF0aW9uTXV0ZXg7Ci19OwotCi19IC8vIG5hbWVzcGFjZSBXZWJDb3JlCi0KLSNlbmRpZiAv
LyBGaWxlVGhyZWFkX2gKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL2xvYWRlci9SZXNvdXJj
ZUxvYWRlci5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9sb2FkZXIvUmVzb3VyY2VMb2FkZXIuY3BwCmlu
ZGV4IDI1NzhlOTJjN2JjNWIxNjVlNWVlNWYyMGMzMTk0OGNmZmQ0OWJjODguLmU1MjJkM2NhZmQ4
NzA4NWNmOWE3N2I3MzExNmY3MjI4ZTZjOWQ2ZTcgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3Jl
L2xvYWRlci9SZXNvdXJjZUxvYWRlci5jcHAKKysrIGIvU291cmNlL1dlYkNvcmUvbG9hZGVyL1Jl
c291cmNlTG9hZGVyLmNwcApAQCAtMzEsNyArMzEsNiBAQAogI2luY2x1ZGUgIlJlc291cmNlTG9h
ZGVyLmgiCiAKICNpbmNsdWRlICJBcHBsaWNhdGlvbkNhY2hlSG9zdC5oIgotI2luY2x1ZGUgIkFz
eW5jRmlsZVN0cmVhbS5oIgogI2luY2x1ZGUgIkF1dGhlbnRpY2F0aW9uQ2hhbGxlbmdlLmgiCiAj
aW5jbHVkZSAiRG9jdW1lbnRMb2FkZXIuaCIKICNpbmNsdWRlICJGcmFtZS5oIgpkaWZmIC0tZ2l0
IGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vRmlsZVN0cmVhbS5jcHAgYi9Tb3VyY2UvV2ViQ29y
ZS9wbGF0Zm9ybS9GaWxlU3RyZWFtLmNwcAppbmRleCBmZjVhZWUxYWZmNTY5NGE2YjhhZWM1MGM2
MmYxZTNjYzBhNjUyZDc5Li4zYWU0NTk4ZGZhYmRkZjQxNWJjMDdiNjk2ZGE4YzdjMGQ0ZWY5ODE5
IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9GaWxlU3RyZWFtLmNwcAorKysg
Yi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9GaWxlU3RyZWFtLmNwcApAQCAtNDYsMTYgKzQ2LDYg
QEAgRmlsZVN0cmVhbTo6RmlsZVN0cmVhbSgpCiAKIEZpbGVTdHJlYW06On5GaWxlU3RyZWFtKCkK
IHsKLSAgICBBU1NFUlQoIWlzSGFuZGxlVmFsaWQobV9oYW5kbGUpKTsKLX0KLQotLy8gRklYTUU6
IFRvIGJlIHJlbW92ZWQgd2hlbiB3ZSBzd2l0Y2ggdG8gdXNpbmcgQmxvYkRhdGEuCi12b2lkIEZp
bGVTdHJlYW06OnN0YXJ0KCkKLXsKLX0KLQotdm9pZCBGaWxlU3RyZWFtOjpzdG9wKCkKLXsKICAg
ICBjbG9zZSgpOwogfQogCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9GaWxl
U3RyZWFtLmggYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9GaWxlU3RyZWFtLmgKaW5kZXggYWU4
YTg0ZTQxNjRhYzQ0NmI4OTg1N2VhNTNlOGY4YzY4NTA1YjA2Ni4uM2NlOWU1NzY1OThiM2FlNTcw
ZmUwOGMzOGQwNDg4NzA1ZDU4MWE4MCAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvcGxhdGZv
cm0vRmlsZVN0cmVhbS5oCisrKyBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL0ZpbGVTdHJlYW0u
aApAQCAtMzIsMjkgKzMyLDE3IEBACiAjZGVmaW5lIEZpbGVTdHJlYW1faAogCiAjaW5jbHVkZSAi
RmlsZVN5c3RlbS5oIgotI2luY2x1ZGUgPHd0Zi9Gb3J3YXJkLmg+Ci0jaW5jbHVkZSA8d3RmL1Bh
c3NSZWZQdHIuaD4KLSNpbmNsdWRlIDx3dGYvUmVmQ291bnRlZC5oPgogCiBuYW1lc3BhY2UgV2Vi
Q29yZSB7CiAKIGNsYXNzIFVSTDsKIAogLy8gQWxsIG1ldGhvZHMgYXJlIHN5bmNocm9ub3VzLgot
Y2xhc3MgRmlsZVN0cmVhbSA6IHB1YmxpYyBSZWZDb3VudGVkPEZpbGVTdHJlYW0+IHsKK2NsYXNz
IEZpbGVTdHJlYW0gewogcHVibGljOgotICAgIHN0YXRpYyBQYXNzUmVmUHRyPEZpbGVTdHJlYW0+
IGNyZWF0ZSgpCi0gICAgewotICAgICAgICByZXR1cm4gYWRvcHRSZWYobmV3IEZpbGVTdHJlYW0o
KSk7Ci0gICAgfQorICAgIEZpbGVTdHJlYW0oKTsKICAgICB+RmlsZVN0cmVhbSgpOwogCi0gICAg
Ly8gRklYTUU6IFRvIGJlIHJlbW92ZWQgd2hlbiB3ZSBzd2l0Y2ggdG8gdXNpbmcgQmxvYkRhdGEu
Ci0gICAgdm9pZCBzdGFydCgpOwotCi0gICAgLy8gQWJvcnRzIHRoZSBvcGVyYXRpb24uCi0gICAg
dm9pZCBzdG9wKCk7Ci0KICAgICAvLyBHZXRzIHRoZSBzaXplIG9mIGEgZmlsZS4gQWxzbyB2YWxp
ZGF0ZXMgaWYgdGhlIGZpbGUgaGFzIGJlZW4gY2hhbmdlZCBvciBub3QgaWYgdGhlIGV4cGVjdGVk
IG1vZGlmaWNhdGlvbiB0aW1lIGlzIHByb3ZpZGVkLCBpLmUuIG5vbi16ZXJvLgogICAgIC8vIFJl
dHVybnMgdG90YWwgbnVtYmVyIG9mIGJ5dGVzIGlmIHN1Y2Nlc3NmdWwuIC0xIG90aGVyd2lzZS4K
ICAgICBsb25nIGxvbmcgZ2V0U2l6ZShjb25zdCBTdHJpbmcmIHBhdGgsIGRvdWJsZSBleHBlY3Rl
ZE1vZGlmaWNhdGlvblRpbWUpOwpAQCAtODQsOCArNzIsNiBAQCBwdWJsaWM6CiAgICAgYm9vbCB0
cnVuY2F0ZShsb25nIGxvbmcgcG9zaXRpb24pOwogCiBwcml2YXRlOgotICAgIEZpbGVTdHJlYW0o
KTsKLQogICAgIFBsYXRmb3JtRmlsZUhhbmRsZSBtX2hhbmRsZTsKICAgICBsb25nIGxvbmcgbV9i
eXRlc1Byb2Nlc3NlZDsKICAgICBsb25nIGxvbmcgbV90b3RhbEJ5dGVzVG9SZWFkOwpkaWZmIC0t
Z2l0IGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vRmlsZVN0cmVhbUNsaWVudC5oIGIvU291cmNl
L1dlYkNvcmUvcGxhdGZvcm0vRmlsZVN0cmVhbUNsaWVudC5oCmluZGV4IDE0ZmE1MDEzNTc1NmJl
ZGNkYmVkNjkyNGYxMWMyYTM0MGNkODk1ZDEuLmNiNjNhNzI4MmU3NDAwOWRhY2UwN2VmYjBkODQ2
YjdhZDViY2RiNDggMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL0ZpbGVTdHJl
YW1DbGllbnQuaAorKysgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9GaWxlU3RyZWFtQ2xpZW50
LmgKQEAgLTEsNSArMSw1IEBACiAvKgotICogQ29weXJpZ2h0IChDKSAyMDEwIEdvb2dsZSBJbmMu
ICBBbGwgcmlnaHRzIHJlc2VydmVkLgorICogQ29weXJpZ2h0IChDKSAyMDEwIEdvb2dsZSBJbmMu
IEFsbCByaWdodHMgcmVzZXJ2ZWQuCiAgKgogICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBz
b3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CiAgKiBtb2RpZmljYXRpb24s
IGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMgYXJl
CkBAIC0zNiwxNSArMzYsMTEgQEAgbmFtZXNwYWNlIFdlYkNvcmUgewogY2xhc3MgRmlsZVN0cmVh
bUNsaWVudCB7CiBwdWJsaWM6CiAgICAgdmlydHVhbCB2b2lkIGRpZE9wZW4oYm9vbCkgeyB9IC8v
IGZhbHNlIHNpZ25hbHMgZmFpbHVyZS4KLSAgICB2aXJ0dWFsIHZvaWQgZGlkU3RvcCgpIHsgfQog
ICAgIHZpcnR1YWwgdm9pZCBkaWRHZXRTaXplKGxvbmcgbG9uZykgeyB9IC8vIC0xIHNpZ25hbHMg
ZmFpbHVyZS4KICAgICB2aXJ0dWFsIHZvaWQgZGlkUmVhZChpbnQpIHsgfSAvLyAtMSBzaWduYWxz
IGZhaWx1cmUuCiAgICAgdmlydHVhbCB2b2lkIGRpZFdyaXRlKGludCkgeyB9IC8vIC0xIHNpZ25h
bHMgZmFpbHVyZS4KICAgICB2aXJ0dWFsIHZvaWQgZGlkVHJ1bmNhdGUoYm9vbCkgeyB9IC8vIGZh
bHNlIHNpZ25hbHMgZmFpbHVyZS4KIAotICAgIC8vIEZJWE1FOiBUbyBiZSByZW1vdmVkIHdoZW4g
d2Ugc3dpdGNoIHRvIHVzaW5nIEJsb2JEYXRhLgotICAgIHZpcnR1YWwgdm9pZCBkaWRTdGFydCgp
IHsgfQotCiBwcm90ZWN0ZWQ6CiAgICAgdmlydHVhbCB+RmlsZVN0cmVhbUNsaWVudCgpIHsgfQog
fTsKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL25ldHdvcmsvQmxvYlJlc291
cmNlSGFuZGxlLmNwcCBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL25ldHdvcmsvQmxvYlJlc291
cmNlSGFuZGxlLmNwcAppbmRleCBjNDk0ZTUyY2RhOGIyNzAwM2RjYTUzZjU1NTkyOWZiYzRjMmRm
ZmI5Li4wOGQ1ZjUxYTg4NTJlMzFmMDdkMWRhYWY4OTI3NmIwNGYwYjA3MGQ1IDEwMDY0NAotLS0g
YS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9uZXR3b3JrL0Jsb2JSZXNvdXJjZUhhbmRsZS5jcHAK
KysrIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vbmV0d29yay9CbG9iUmVzb3VyY2VIYW5kbGUu
Y3BwCkBAIC0xNzEsMzAgKzE3MSwxOCBAQCBCbG9iUmVzb3VyY2VIYW5kbGU6OkJsb2JSZXNvdXJj
ZUhhbmRsZShCbG9iRGF0YSogYmxvYkRhdGEsIGNvbnN0IFJlc291cmNlUmVxdWVzdAogICAgICwg
bV9maWxlT3BlbmVkKGZhbHNlKQogewogICAgIGlmIChtX2FzeW5jKQotICAgICAgICBtX2FzeW5j
U3RyZWFtID0gQXN5bmNGaWxlU3RyZWFtOjpjcmVhdGUodGhpcyk7CisgICAgICAgIG1fYXN5bmNT
dHJlYW0gPSBzdGQ6Om1ha2VfdW5pcXVlPEFzeW5jRmlsZVN0cmVhbT4oKnRoaXMpOwogICAgIGVs
c2UKLSAgICAgICAgbV9zdHJlYW0gPSBGaWxlU3RyZWFtOjpjcmVhdGUoKTsKKyAgICAgICAgbV9z
dHJlYW0gPSBzdGQ6Om1ha2VfdW5pcXVlPEZpbGVTdHJlYW0+KCk7CiB9CiAKIEJsb2JSZXNvdXJj
ZUhhbmRsZTo6fkJsb2JSZXNvdXJjZUhhbmRsZSgpCiB7Ci0gICAgaWYgKG1fYXN5bmMpIHsKLSAg
ICAgICAgaWYgKG1fYXN5bmNTdHJlYW0pCi0gICAgICAgICAgICBtX2FzeW5jU3RyZWFtLT5zdG9w
KCk7Ci0gICAgfSBlbHNlIHsKLSAgICAgICAgaWYgKG1fc3RyZWFtKQotICAgICAgICAgICAgbV9z
dHJlYW0tPnN0b3AoKTsKLSAgICB9CiB9CiAKIHZvaWQgQmxvYlJlc291cmNlSGFuZGxlOjpjYW5j
ZWwoKQogewotICAgIGlmIChtX2FzeW5jKSB7Ci0gICAgICAgIGlmIChtX2FzeW5jU3RyZWFtKSB7
Ci0gICAgICAgICAgICBtX2FzeW5jU3RyZWFtLT5zdG9wKCk7Ci0gICAgICAgICAgICBtX2FzeW5j
U3RyZWFtID0gMDsKLSAgICAgICAgfQotICAgIH0KKyAgICBtX2FzeW5jU3RyZWFtID0gbnVsbHB0
cjsKIAogICAgIG1fYWJvcnRlZCA9IHRydWU7CiAKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3Jl
L3BsYXRmb3JtL25ldHdvcmsvQmxvYlJlc291cmNlSGFuZGxlLmggYi9Tb3VyY2UvV2ViQ29yZS9w
bGF0Zm9ybS9uZXR3b3JrL0Jsb2JSZXNvdXJjZUhhbmRsZS5oCmluZGV4IDczMmZmNzkwNDUzOWQ0
ZDhmODA0YzI3ZWEwNDY2ODM2ZjBhNDliMWQuLjY3NmRiZmY5ODk3NmJiMDg3ZDViYmM1ZDBjY2Fi
N2Y0MTNiNDQxZmQgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL25ldHdvcmsv
QmxvYlJlc291cmNlSGFuZGxlLmgKKysrIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vbmV0d29y
ay9CbG9iUmVzb3VyY2VIYW5kbGUuaApAQCAtOTIsOCArOTIsOCBAQCBwcml2YXRlOgogCiAgICAg
UmVmUHRyPEJsb2JEYXRhPiBtX2Jsb2JEYXRhOwogICAgIGJvb2wgbV9hc3luYzsKLSAgICBSZWZQ
dHI8QXN5bmNGaWxlU3RyZWFtPiBtX2FzeW5jU3RyZWFtOyAvLyBGb3IgYXN5bmNocm9ub3VzIGxv
YWRpbmcuCi0gICAgUmVmUHRyPEZpbGVTdHJlYW0+IG1fc3RyZWFtOyAvLyBGb3Igc3luY2hyb25v
dXMgbG9hZGluZy4KKyAgICBzdGQ6OnVuaXF1ZV9wdHI8QXN5bmNGaWxlU3RyZWFtPiBtX2FzeW5j
U3RyZWFtOyAvLyBGb3IgYXN5bmNocm9ub3VzIGxvYWRpbmcuCisgICAgc3RkOjp1bmlxdWVfcHRy
PEZpbGVTdHJlYW0+IG1fc3RyZWFtOyAvLyBGb3Igc3luY2hyb25vdXMgbG9hZGluZy4KICAgICBW
ZWN0b3I8Y2hhcj4gbV9idWZmZXI7CiAgICAgVmVjdG9yPGxvbmcgbG9uZz4gbV9pdGVtTGVuZ3Ro
TGlzdDsKICAgICBpbnQgbV9lcnJvckNvZGU7CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9z
dG9yYWdlL1N0b3JhZ2VUaHJlYWQuaCBiL1NvdXJjZS9XZWJDb3JlL3N0b3JhZ2UvU3RvcmFnZVRo
cmVhZC5oCmluZGV4IDI2M2M3OGU4MjYyZTljZmQ4NjVkZGQ1OTAxOTU0OTJmNWU3ODUzOWYuLmRm
NTJhYzYxMjFjODQ2NmQ0ODZlNGE0ZGM5ZWYzYTRlMjg4NzNmZTUgMTAwNjQ0Ci0tLSBhL1NvdXJj
ZS9XZWJDb3JlL3N0b3JhZ2UvU3RvcmFnZVRocmVhZC5oCisrKyBiL1NvdXJjZS9XZWJDb3JlL3N0
b3JhZ2UvU3RvcmFnZVRocmVhZC5oCkBAIC00Niw3ICs0Niw3IEBAIHB1YmxpYzoKICAgICBib29s
IHN0YXJ0KCk7CiAgICAgdm9pZCB0ZXJtaW5hdGUoKTsKIAotICAgIHZvaWQgZGlzcGF0Y2goY29u
c3Qgc3RkOjpmdW5jdGlvbjx2b2lkICgpPiYpOworICAgIHZvaWQgZGlzcGF0Y2goY29uc3Qgc3Rk
OjpmdW5jdGlvbjx2b2lkKCk+Jik7CiAKICAgICBzdGF0aWMgdm9pZCByZWxlYXNlRmFzdE1hbGxv
Y0ZyZWVNZW1vcnlJbkFsbFRocmVhZHMoKTsKIApAQCAtNTksNyArNTksNyBAQCBwcml2YXRlOgog
ICAgIHZvaWQgcGVyZm9ybVRlcm1pbmF0ZSgpOwogCiAgICAgVGhyZWFkSWRlbnRpZmllciBtX3Ro
cmVhZElEOwotICAgIE1lc3NhZ2VRdWV1ZTxzdGQ6OmZ1bmN0aW9uPHZvaWQgKCk+PiBtX3F1ZXVl
OworICAgIE1lc3NhZ2VRdWV1ZTxzdGQ6OmZ1bmN0aW9uPHZvaWQoKT4+IG1fcXVldWU7CiB9Owog
CiB9IC8vIG5hbWVzcGFjZSBXZWJDb3JlCg==
</data>

          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>241234</attachid>
            <date>2014-11-08 12:54:19 -0800</date>
            <delta_ts>2014-11-08 13:55:12 -0800</delta_ts>
            <desc>Patch</desc>
            <filename>bug-138282-20141108125418.patch</filename>
            <type>text/plain</type>
            <size>49483</size>
            <attacher name="Darin Adler">darin</attacher>
            
              <data encoding="base64">U3VidmVyc2lvbiBSZXZpc2lvbjogMTc1NzgwCmRpZmYgLS1naXQgYS9Tb3VyY2UvV1RGL0NoYW5n
ZUxvZyBiL1NvdXJjZS9XVEYvQ2hhbmdlTG9nCmluZGV4IDVlNDVkMzc5ZDgxOWExNjRhYTUyZGZj
MGJjZWQ1ZWYwYWI1MWZjOTcuLmM4ZGJkODU2OTc1YzI3ZTU4YzQ5YmVhNjdlN2RlZTdiYzY4ODBm
MGYgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XVEYvQ2hhbmdlTG9nCisrKyBiL1NvdXJjZS9XVEYvQ2hh
bmdlTG9nCkBAIC0xLDMgKzEsMjMgQEAKKzIwMTQtMTEtMDggIERhcmluIEFkbGVyICA8ZGFyaW5A
YXBwbGUuY29tPgorCisgICAgICAgIFJlcGxhY2UgRmlsZVRocmVhZCBjbGFzcyB3aXRoIGEgc2lu
Z2xlIGZ1bmN0aW9uCisgICAgICAgIGh0dHBzOi8vYnVncy53ZWJraXQub3JnL3Nob3dfYnVnLmNn
aT9pZD0xMzgyODIKKworICAgICAgICBSZXZpZXdlZCBieSBBbGV4ZXkgUHJvc2t1cnlha292Lgor
CisgICAgICAgICogd3RmL01lc3NhZ2VRdWV1ZS5oOiBNYWRlIHF1ZXVlIHdvcmsgb24gYW55IHR5
cGUgYW5kIG5vdCByZXF1aXJlIHdyYXBwaW5nCisgICAgICAgIGV2ZXJ5dGhpbmcgaW4gYSB1bmlx
dWVfcHRyLgorCisgICAgICAgICogd3RmL1RocmVhZGluZy5jcHA6CisgICAgICAgIChXVEY6OnRo
cmVhZEVudHJ5UG9pbnQpOiBDaGFuZ2VkIHRvIHVzZSBhIHN0ZDo6ZnVuY3Rpb24gaW5zdGVhZCBv
ZiBhIGZ1bmN0aW9uIHBvaW50ZXIuCisgICAgICAgIChXVEY6OmNyZWF0ZVRocmVhZCk6IEFkZCBh
IHZlcnNpb24gdGhhdCB0YWtlcyBhIHN0ZDo6ZnVuY3Rpb24uIFJlaW1wbGVtZW50ZWQgdGhlCisg
ICAgICAgIG9sZCB2ZXJzaW9uIHVzaW5nIGxhbWJkYXMuIFJlbW92ZWQgdGhlIG9ic29sZXRlIHZl
cnNpb25zIHRoYXQgd2VyZSB0aGVyZSBqdXN0IHRvIHN1cHBvcnQKKyAgICAgICAgYmluYXJ5IGNv
bXBhdGliaWxpdHkgd2l0aCB2ZXJ5IG9sZCB2ZXJzaW9ucyBvZiBTYWZhcmkuCisKKyAgICAgICAg
KiB3dGYvVGhyZWFkaW5nLmg6IFJlbW92ZWQgYW4gaW5jb3JyZWN0IGxpY2Vuc2UgaGVhZGVyIHRo
YXQgY292ZXJzIGNvZGUgdGhhdCB3YXMgbG9uZyBhZ28KKyAgICAgICAgbW92ZWQgdG8gYSBkaWZm
ZXJlbnQgZmlsZS4gQ2hhbmdlZCBjcmVhdGVUaHJlYWQgdG8gdGFrZSBhIHN0ZDo6ZnVuY3Rpb24g
aW5zdGVhZCBvZiBhIGZ1bmN0aW9uCisgICAgICAgIHBvaW50ZXIgYW5kIGRhdGEgcG9pbnRlci4g
TW92ZWQgaW50ZXJuYWwgZnVuY3Rpb25zIGFmdGVyIHB1YmxpYyBmdW5jdGlvbnMuCisKIDIwMTQt
MTEtMDUgIENocmlzIER1bWV6ICA8Y2R1bWV6QGFwcGxlLmNvbT4KIAogICAgICAgICBBc3NlcnRp
b24gaGl0IERPTVRpbWVyOjp1cGRhdGVUaW1lckludGVydmFsSWZOZWNlc3NhcnkoKQpkaWZmIC0t
Z2l0IGEvU291cmNlL1dlYkNvcmUvQ2hhbmdlTG9nIGIvU291cmNlL1dlYkNvcmUvQ2hhbmdlTG9n
CmluZGV4IGE3N2M4NWNkOTdkZjQ1ZTBmZDA3OTM5MmQ5ZWIwZDgyNmJhZGI4M2UuLjIwZTBmODdl
M2Q0MjBmZmZiNjA2YzczMjdhMzAxNTM3NDRmZjFkODEgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJD
b3JlL0NoYW5nZUxvZworKysgYi9Tb3VyY2UvV2ViQ29yZS9DaGFuZ2VMb2cKQEAgLTEsMyArMSw3
NyBAQAorMjAxNC0xMS0wOCAgRGFyaW4gQWRsZXIgIDxkYXJpbkBhcHBsZS5jb20+CisKKyAgICAg
ICAgUmVwbGFjZSBGaWxlVGhyZWFkIGNsYXNzIHdpdGggYSBzaW5nbGUgZnVuY3Rpb24KKyAgICAg
ICAgaHR0cHM6Ly9idWdzLndlYmtpdC5vcmcvc2hvd19idWcuY2dpP2lkPTEzODI4MgorCisgICAg
ICAgIFJldmlld2VkIGJ5IEFsZXhleSBQcm9za3VyeWFrb3YuCisKKyAgICAgICAgKiBDTWFrZUxp
c3RzLnR4dDogUmVtb3ZlZCBGaWxlVGhyZWFkLmNwcC4KKworICAgICAgICAqIFdlYkNvcmUudmN4
cHJvai9XZWJDb3JlLnZjeHByb2o6IFJlbW92ZWQgRmlsZVRocmVhZC5jcHAvLmguCisgICAgICAg
ICogV2ViQ29yZS52Y3hwcm9qL1dlYkNvcmUudmN4cHJvai5maWx0ZXJzOiBEaXR0by4KKyAgICAg
ICAgKiBXZWJDb3JlLnhjb2RlcHJvai9wcm9qZWN0LnBieHByb2o6IERpdHRvLgorCisgICAgICAg
ICogYmluZGluZ3MvZ2VuZXJpYy9BY3RpdmVET01DYWxsYmFjay5jcHA6IFJlbW92ZWQgdW5uZWVk
ZWQgaW5jbHVkZXMuCisgICAgICAgICogZG9tL0FjdGl2ZURPTU9iamVjdC5jcHA6IERpdHRvLgor
CisgICAgICAgICogZmlsZWFwaS9Bc3luY0ZpbGVTdHJlYW0uY3BwOgorICAgICAgICAoV2ViQ29y
ZTo6Y2FsbE9uRmlsZVRocmVhZCk6IEFkZGVkLiBJbXBsZW1lbnRzIHRoZSBmaWxlIHRocmVhZC4K
KyAgICAgICAgKFdlYkNvcmU6OkFzeW5jRmlsZVN0cmVhbTo6QXN5bmNGaWxlU3RyZWFtKTogVGFr
ZSBhIHJlZmVyZW5jZSB0byB0aGUgY2xpZW50LgorICAgICAgICBNYWtlIG1faW50ZXJuYWxzLiBV
c2UgdGhlIGRlc3Ryb3llZCBmbGFnIGluc3RlYWQgb2YgdHJpY2tpZXIgdGVjaG5pcXVlcyB0bwor
ICAgICAgICBoYW5kbGUgc3RvcHBpbmcuIE9uY2UgdGhlIHN0cmVhbSBpcyBkZXN0cm95ZWQsIHRo
ZXJlIHdpbGwgYmUgbm8gZnVydGhlciBjYWxsYmFja3MuCisgICAgICAgIChXZWJDb3JlOjpBc3lu
Y0ZpbGVTdHJlYW06On5Bc3luY0ZpbGVTdHJlYW0pOiBBZGRlZCBhc3NlcnRpb25zIGFuZCBtZXJn
ZWQgaW4gdGhlCisgICAgICAgIHN0b3AgYmVoYXZpb3IgaGVyZS4gVGhpcyBjbGFzcyBubyBsb25n
ZXIgcmVxdWlyZXMgYW4gZXhwbGljaXQgc3RvcCBmdW5jdGlvbi4KKyAgICAgICAgKFdlYkNvcmU6
OkFzeW5jRmlsZVN0cmVhbTo6cGVyZm9ybSk6IEFkZGVkLiBIZWxwZXIgdXNlZCBmb3IgYWxsIHRo
ZSBvcGVyYXRpb25zCisgICAgICAgIGJlbG93LiBUYWtlcyBhIGZ1bmN0aW9uIHRoYXQgcGVyZm9y
bXMgYW4gb3BlcmF0aW9uIGFuZCB0aGVuIHJldHVybnMgYSBjbGllbnQKKyAgICAgICAgY2FsbGJh
Y2sgZnVuY3Rpb24uIFJlc3BlY3RzIHRoZSBtX3N0b3BwZWQgYm9vbGVhbiBvbiB0aGUgZmlsZSB0
aHJlYWQgKHNvIHdlCisgICAgICAgIGRvbid0IGRvIGV4dHJhIG9wZXJhdGlvbnMpIGFuZCBvbiB0
aGUgY2xpZW50IHRocmVhZCAoc28gd2UgYXJlIGd1YXJhbnRlZWQgbm90CisgICAgICAgIHRvIGdl
dCBhbnkgY2xpZW50IGNhbGxiYWNrcyBldmVuIGlmIHRoZSBmaWxlIHRocmVhZCB3YXMgcGFydHdh
eSB0aHJvdWdoIGFuCisgICAgICAgIG9wZXJhdGlvbikuCisgICAgICAgIChXZWJDb3JlOjpBc3lu
Y0ZpbGVTdHJlYW06OmdldFNpemUpOiBDaGFuZ2VkIHRvIHVzZSB0aGUgcGVyZm9ybSBmdW5jdGlv
bi4KKyAgICAgICAgKFdlYkNvcmU6OkFzeW5jRmlsZVN0cmVhbTo6b3BlbkZvclJlYWQpOiBEaXR0
by4gQWxzbyBmaXhlZCByZWZlcmVuY2UgY291bnQKKyAgICAgICAgdGhyZWFkIHNhZmV0eSBpc3N1
ZSBieSBjYXB0dXJpbmcgYSBTdHJpbmdDYXB0dXJlIHJhdGhlciB0aGFuIGEgU3RyaW5nLgorICAg
ICAgICAoV2ViQ29yZTo6QXN5bmNGaWxlU3RyZWFtOjpvcGVuRm9yV3JpdGUpOiBEaXR0by4KKyAg
ICAgICAgKFdlYkNvcmU6OkFzeW5jRmlsZVN0cmVhbTo6Y2xvc2UpOiBDaGFuZ2VkIHRvIHVzZSBj
YWxsT25GaWxlVGhyZWFkLgorICAgICAgICAoV2ViQ29yZTo6QXN5bmNGaWxlU3RyZWFtOjpyZWFk
KTogQ2hhbmdlZCB0byB1c2UgdGhlIHBlcmZvcm0gZnVuY3Rpb24uCisgICAgICAgIChXZWJDb3Jl
OjpBc3luY0ZpbGVTdHJlYW06OndyaXRlKTogRGl0dG8uIEFsc28gZml4ZWQgcmVmZXJlbmNlIGNv
dW50CisgICAgICAgIHRocmVhZCBzYWZldHkgaXNzdWUgYnkgY2FwdHVyaW5nIGEgU3RyaW5nQ2Fw
dHVyZSByYXRoZXIgdGhhbiBhIFVSTC4KKyAgICAgICAgKFdlYkNvcmU6OkFzeW5jRmlsZVN0cmVh
bTo6dHJ1bmNhdGUpOiBEaXR0by4KKworICAgICAgICAqIGZpbGVhcGkvQXN5bmNGaWxlU3RyZWFt
Lmg6IFJlbW92ZWQgdXNlIG9mIFJlZkNvdW50ZWQgc2luY2Ugd2Ugb25seSBuZWVkCisgICAgICAg
IHNpbmdsZSBvd25lcnNoaXAuIFJlbW92ZWQgdGhlIHN0b3AgZnVuY3Rpb24sIHNpbmNlIHdlIGNh
biBub3cgc3RvcCB3aGVuCisgICAgICAgIHRoZSBzdHJlYW0gaXMgZGVzdHJveWVkIHNpbmNlIHdl
IGhhdmUgc2luZ2xlIG93bmVyc2hpcC4gTWFkZSBhIG5ldyBJbnRlcm5hbHMKKyAgICAgICAgb2Jq
ZWN0IHRvIGhhbmRsZSBkZXN0cnVjdGlvbiB3aGlsZSBvcGVyYXRpb25zIGFyZSBzdGlsbCBnb2lu
ZyBvbiB0aGUgZmlsZSB0aHJlYWQuCisKKyAgICAgICAgKiBmaWxlYXBpL0ZpbGVUaHJlYWQuY3Bw
OiBSZW1vdmVkLgorICAgICAgICAqIGZpbGVhcGkvRmlsZVRocmVhZC5oOiBSZW1vdmVkLgorCisg
ICAgICAgICogbG9hZGVyL1Jlc291cmNlTG9hZGVyLmNwcDogUmVtb3ZlZCB1bm5lZWRlZCBpbmNs
dWRlLgorCisgICAgICAgICogcGxhdGZvcm0vRmlsZVN0cmVhbS5jcHA6CisgICAgICAgIChXZWJD
b3JlOjpGaWxlU3RyZWFtOjp+RmlsZVN0cmVhbSk6IE1lcmdlZCB0aGUgc3RvcCBmdW5jdGlvbiBp
biBoZXJlLgorCisgICAgICAgICogcGxhdGZvcm0vRmlsZVN0cmVhbS5oOiBSZW1vdmVkIHVzZSBv
ZiBSZWZDb3VudGVkIHNpbmNlIHdlIG9ubHkgbmVlZAorICAgICAgICBzaW5nbGUgb3duZXJzaGlw
LiBSZW1vdmVkIHRoZSBlbXB0eSBzdGFydCBmdW5jdGlvbi4gUmVtb3ZlZCB0aGUgc3RvcCBmdW5j
dGlvbiwKKyAgICAgICAgc2luY2Ugd2UgY2FuIG5vdyBzdG9wIHdoZW4gdGhlIHN0cmVhbSBpcyBk
ZXN0cm95ZWQgc2luY2Ugd2UgaGF2ZSBzaW5nbGUgb3duZXJzaGlwLgorCisgICAgICAgICogcGxh
dGZvcm0vRmlsZVN0cmVhbUNsaWVudC5oOiBSZW1vdmVkIHVubmVlZGVkIGRpZFN0YXJ0IGFuZCBk
aWRTdG9wLgorCisgICAgICAgICogcGxhdGZvcm0vbmV0d29yay9CbG9iUmVzb3VyY2VIYW5kbGUu
Y3BwOgorICAgICAgICAoV2ViQ29yZTo6QmxvYlJlc291cmNlSGFuZGxlOjpCbG9iUmVzb3VyY2VI
YW5kbGUpOiBVc2UgbWFrZV91bmlxdWUgdG8gbWFrZSB0aGUKKyAgICAgICAgc3RyZWFtIG9iamVj
dHMgaW5zdGVhZCBvZiBjdXN0b20gY3JlYXRlIGZ1bmN0aW9ucy4KKyAgICAgICAgKFdlYkNvcmU6
OkJsb2JSZXNvdXJjZUhhbmRsZTo6fkJsb2JSZXNvdXJjZUhhbmRsZSk6IFJlbW92ZWQgbm93LXVu
bmVlZGVkIGNvZGUKKyAgICAgICAgdG8gY2FsbCBzdG9wIGZ1bmN0aW9ucy4gRGVzdHJveWluZyB0
aGUgb2JqZWN0cyBub3cgdGFrZXMgY2FyZSBvZiB0aGUgdGhpcywgYW5kCisgICAgICAgIHRoYXQn
cyBkb25lIGJ5IHRoZSB1bmlxdWVfcHRycy4KKyAgICAgICAgKFdlYkNvcmU6OkJsb2JSZXNvdXJj
ZUhhbmRsZTo6Y2FuY2VsKTogUmVtb3ZlZCB0aGUgcmVzdCBvZiB0aGUgY29kZSB0byBzdG9wIHRo
ZQorICAgICAgICBtX2FzeW5jU3RyZWFtLCBrZWVwaW5nIG9ubHkgdGhlIGNvZGUgdGhhdCBzZXRz
IGl0IHRvIG51bGwuIFRoYXQgbm93IHN0b3BzIHRoZQorICAgICAgICBzdHJlYW0gYnkgZGVzdHJv
eWluZyBpdC4KKworICAgICAgICAqIHBsYXRmb3JtL25ldHdvcmsvQmxvYlJlc291cmNlSGFuZGxl
Lmg6IFVzZSBzdGQ6OnVuaXF1ZV9wdHIgcmF0aGVyIHRoYW4KKyAgICAgICAgUmVmUHRyIGZvciB0
aGUgZmlsZSBzdHJlYW0gb2JqZWN0cy4KKworICAgICAgICAqIHN0b3JhZ2UvU3RvcmFnZVRocmVh
ZC5oOiBUd2Vha2VkIGZvcm1hdHRpbmcgb2Ygc3RkOjpmdW5jdGlvbjx2b2lkKCk+IHRvCisgICAg
ICAgIG1hdGNoIHRoZSBmb3JtYXQgdXNlZCBlbHNld2hlcmUgaW4gV2ViS2l0LgorCiAyMDE0LTEx
LTA4ICBCZXRoIERha2luICA8YmRha2luQGFwcGxlLmNvbT4KIAogICAgICAgICBJbXBsZW1lbnQg
YWN0aW9uIG1lbnUgc3VwcG9ydCBmb3IgdmlkZW9zCmRpZmYgLS1naXQgYS9Tb3VyY2UvV1RGL3d0
Zi9UaHJlYWRpbmcuY3BwIGIvU291cmNlL1dURi93dGYvVGhyZWFkaW5nLmNwcAppbmRleCBjOGQ5
OTZiNWE4NWVkMDRlZDVhMzk5YWVlYWQxNDU5NjU0MzhlOTBkLi4xNzc2NTk4NzM3ZDhjYjFkNzNj
NTFmNTMzMzc1ODIwNjQ4ZTllZDFlIDEwMDY0NAotLS0gYS9Tb3VyY2UvV1RGL3d0Zi9UaHJlYWRp
bmcuY3BwCisrKyBiL1NvdXJjZS9XVEYvd3RmL1RocmVhZGluZy5jcHAKQEAgLTEsNSArMSw1IEBA
CiAvKgotICogQ29weXJpZ2h0IChDKSAyMDA4LCAyMDA5IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyBy
ZXNlcnZlZC4KKyAqIENvcHlyaWdodCAoQykgMjAwOCwgMjAwOSwgMjAxNCBBcHBsZSBJbmMuIEFs
bCByaWdodHMgcmVzZXJ2ZWQuCiAgKgogICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3Vy
Y2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CiAgKiBtb2RpZmljYXRpb24sIGFy
ZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKQEAgLTMz
LDIzICszMywxNCBAQCBuYW1lc3BhY2UgV1RGIHsKIHN0cnVjdCBOZXdUaHJlYWRDb250ZXh0IHsK
ICAgICBXVEZfTUFLRV9GQVNUX0FMTE9DQVRFRDsKIHB1YmxpYzoKLSAgICBOZXdUaHJlYWRDb250
ZXh0KFRocmVhZEZ1bmN0aW9uIGVudHJ5UG9pbnQsIHZvaWQqIGRhdGEsIGNvbnN0IGNoYXIqIG5h
bWUpCi0gICAgICAgIDogZW50cnlQb2ludChlbnRyeVBvaW50KQotICAgICAgICAsIGRhdGEoZGF0
YSkKLSAgICAgICAgLCBuYW1lKG5hbWUpCi0gICAgewotICAgIH0KLQotICAgIFRocmVhZEZ1bmN0
aW9uIGVudHJ5UG9pbnQ7Ci0gICAgdm9pZCogZGF0YTsKICAgICBjb25zdCBjaGFyKiBuYW1lOwot
CisgICAgc3RkOjpmdW5jdGlvbjx2b2lkKCk+IGVudHJ5UG9pbnQ7CiAgICAgTXV0ZXggY3JlYXRp
b25NdXRleDsKIH07CiAKIHN0YXRpYyB2b2lkIHRocmVhZEVudHJ5UG9pbnQodm9pZCogY29udGV4
dERhdGEpCiB7Ci0gICAgTmV3VGhyZWFkQ29udGV4dCogY29udGV4dCA9IHJlaW50ZXJwcmV0X2Nh
c3Q8TmV3VGhyZWFkQ29udGV4dCo+KGNvbnRleHREYXRhKTsKKyAgICBOZXdUaHJlYWRDb250ZXh0
KiBjb250ZXh0ID0gc3RhdGljX2Nhc3Q8TmV3VGhyZWFkQ29udGV4dCo+KGNvbnRleHREYXRhKTsK
IAogICAgIC8vIEJsb2NrIHVudGlsIG91ciBjcmVhdGluZyB0aHJlYWQgaGFzIGNvbXBsZXRlZCBh
bnkgZXh0cmEgc2V0dXAgd29yaywgaW5jbHVkaW5nCiAgICAgLy8gZXN0YWJsaXNoaW5nIFRocmVh
ZElkZW50aWZpZXIuCkBAIC01OSwxNSArNTAsMTUgQEAgc3RhdGljIHZvaWQgdGhyZWFkRW50cnlQ
b2ludCh2b2lkKiBjb250ZXh0RGF0YSkKIAogICAgIGluaXRpYWxpemVDdXJyZW50VGhyZWFkSW50
ZXJuYWwoY29udGV4dC0+bmFtZSk7CiAKLSAgICAvLyBHcmFiIHRoZSBpbmZvIHRoYXQgd2UgbmVl
ZCBvdXQgb2YgdGhlIGNvbnRleHQsIHRoZW4gZGVhbGxvY2F0ZSBpdC4KLSAgICBUaHJlYWRGdW5j
dGlvbiBlbnRyeVBvaW50ID0gY29udGV4dC0+ZW50cnlQb2ludDsKLSAgICB2b2lkKiBkYXRhID0g
Y29udGV4dC0+ZGF0YTsKKyAgICBhdXRvIGVudHJ5UG9pbnQgPSBXVEY6Om1vdmUoY29udGV4dC0+
ZW50cnlQb2ludCk7CisKKyAgICAvLyBEZWxldGUgdGhlIGNvbnRleHQgYmVmb3JlIHN0YXJ0aW5n
IHRoZSB0aHJlYWQuCiAgICAgZGVsZXRlIGNvbnRleHQ7CiAKLSAgICBlbnRyeVBvaW50KGRhdGEp
OworICAgIGVudHJ5UG9pbnQoKTsKIH0KIAotVGhyZWFkSWRlbnRpZmllciBjcmVhdGVUaHJlYWQo
VGhyZWFkRnVuY3Rpb24gZW50cnlQb2ludCwgdm9pZCogZGF0YSwgY29uc3QgY2hhciogbmFtZSkK
K1RocmVhZElkZW50aWZpZXIgY3JlYXRlVGhyZWFkKGNvbnN0IGNoYXIqIG5hbWUsIHN0ZDo6ZnVu
Y3Rpb248dm9pZCgpPiBlbnRyeVBvaW50KQogewogICAgIC8vIFZpc3VhbCBTdHVkaW8gaGFzIGEg
MzEtY2hhcmFjdGVyIGxpbWl0IG9uIHRocmVhZCBuYW1lcy4gTG9uZ2VyIG5hbWVzIHdpbGwKICAg
ICAvLyBiZSB0cnVuY2F0ZWQgc2lsZW50bHksIGJ1dCB3ZSdkIGxpa2UgY2FsbGVycyB0byBrbm93
IGFib3V0IHRoZSBsaW1pdC4KQEAgLTc2LDcgKzY3LDcgQEAgVGhyZWFkSWRlbnRpZmllciBjcmVh
dGVUaHJlYWQoVGhyZWFkRnVuY3Rpb24gZW50cnlQb2ludCwgdm9pZCogZGF0YSwgY29uc3QgY2hh
cioKICAgICAgICAgTE9HX0VSUk9SKCJUaHJlYWQgbmFtZSBcIiVzXCIgaXMgbG9uZ2VyIHRoYW4g
MzEgY2hhcmFjdGVycyBhbmQgd2lsbCBiZSB0cnVuY2F0ZWQgYnkgVmlzdWFsIFN0dWRpbyIsIG5h
bWUpOwogI2VuZGlmCiAKLSAgICBOZXdUaHJlYWRDb250ZXh0KiBjb250ZXh0ID0gbmV3IE5ld1Ro
cmVhZENvbnRleHQoZW50cnlQb2ludCwgZGF0YSwgbmFtZSk7CisgICAgTmV3VGhyZWFkQ29udGV4
dCogY29udGV4dCA9IG5ldyBOZXdUaHJlYWRDb250ZXh0IHsgbmFtZSwgV1RGOjptb3ZlKGVudHJ5
UG9pbnQpLCB7IH0gfTsKIAogICAgIC8vIFByZXZlbnQgdGhlIHRocmVhZCBib2R5IGZyb20gZXhl
Y3V0aW5nIHVudGlsIHdlJ3ZlIGVzdGFibGlzaGVkIHRoZSB0aHJlYWQgaWRlbnRpZmllci4KICAg
ICBNdXRleExvY2tlciBsb2NrZXIoY29udGV4dC0+Y3JlYXRpb25NdXRleCk7CkBAIC04NCw2ICs3
NSwxMyBAQCBUaHJlYWRJZGVudGlmaWVyIGNyZWF0ZVRocmVhZChUaHJlYWRGdW5jdGlvbiBlbnRy
eVBvaW50LCB2b2lkKiBkYXRhLCBjb25zdCBjaGFyKgogICAgIHJldHVybiBjcmVhdGVUaHJlYWRJ
bnRlcm5hbCh0aHJlYWRFbnRyeVBvaW50LCBjb250ZXh0LCBuYW1lKTsKIH0KIAorVGhyZWFkSWRl
bnRpZmllciBjcmVhdGVUaHJlYWQoVGhyZWFkRnVuY3Rpb24gZW50cnlQb2ludCwgdm9pZCogZGF0
YSwgY29uc3QgY2hhciogbmFtZSkKK3sKKyAgICByZXR1cm4gY3JlYXRlVGhyZWFkKG5hbWUsIFtl
bnRyeVBvaW50LCBkYXRhXSB7CisgICAgICAgIGVudHJ5UG9pbnQoZGF0YSk7CisgICAgfSk7Cit9
CisKIHZvaWQgc2V0Q3VycmVudFRocmVhZElzVXNlckludGVyYWN0aXZlKCkKIHsKICNpZiBIQVZF
KFFPU19DTEFTU0VTKQpAQCAtOTgsNjEgKzk2LDQgQEAgdm9pZCBzZXRDdXJyZW50VGhyZWFkSXNV
c2VySW5pdGlhdGVkKCkKICNlbmRpZgogfQogCi0jaWYgUExBVEZPUk0oTUFDKSB8fCBQTEFURk9S
TShXSU4pCi0KLS8vIEZvciBBQkkgY29tcGF0aWJpbGl0eSB3aXRoIFNhZmFyaSBvbiBNYWMgLyBX
aW5kb3dzOiBTYWZhcmkgdXNlcyB0aGUgcHJpdmF0ZQotLy8gY3JlYXRlVGhyZWFkKCkgYW5kIHdh
aXRGb3JUaHJlYWRDb21wbGV0aW9uKCkgZnVuY3Rpb25zIGRpcmVjdGx5IGFuZCB3ZSBuZWVkCi0v
LyB0byBrZWVwIHRoZSBvbGQgQUJJIGNvbXBhdGliaWxpdHkgdW50aWwgaXQncyBiZWVuIHJlYnVp
bHQuCi0KLXR5cGVkZWYgdm9pZCogKCpUaHJlYWRGdW5jdGlvbldpdGhSZXR1cm5WYWx1ZSkodm9p
ZCogYXJndW1lbnQpOwotCi1XVEZfRVhQT1JUX1BSSVZBVEUgVGhyZWFkSWRlbnRpZmllciBjcmVh
dGVUaHJlYWQoVGhyZWFkRnVuY3Rpb25XaXRoUmV0dXJuVmFsdWUgZW50cnlQb2ludCwgdm9pZCog
ZGF0YSwgY29uc3QgY2hhciogbmFtZSk7Ci0KLXN0cnVjdCBUaHJlYWRGdW5jdGlvbldpdGhSZXR1
cm5WYWx1ZUludm9jYXRpb24gewotICAgIFRocmVhZEZ1bmN0aW9uV2l0aFJldHVyblZhbHVlSW52
b2NhdGlvbihUaHJlYWRGdW5jdGlvbldpdGhSZXR1cm5WYWx1ZSBmdW5jdGlvbiwgdm9pZCogZGF0
YSkKLSAgICAgICAgOiBmdW5jdGlvbihmdW5jdGlvbikKLSAgICAgICAgLCBkYXRhKGRhdGEpCi0g
ICAgewotICAgIH0KLQotICAgIFRocmVhZEZ1bmN0aW9uV2l0aFJldHVyblZhbHVlIGZ1bmN0aW9u
OwotICAgIHZvaWQqIGRhdGE7Ci19OwotCi1zdGF0aWMgdm9pZCBjb21wYXRFbnRyeVBvaW50KHZv
aWQqIHBhcmFtKQotewotICAgIC8vIEJhbGFuY2VkIGJ5IC5yZWxlYXNlKCkgaW4gY3JlYXRlVGhy
ZWFkLgotICAgIGF1dG8gaW52b2NhdGlvbiA9IHN0ZDo6dW5pcXVlX3B0cjxUaHJlYWRGdW5jdGlv
bldpdGhSZXR1cm5WYWx1ZUludm9jYXRpb24+KHN0YXRpY19jYXN0PFRocmVhZEZ1bmN0aW9uV2l0
aFJldHVyblZhbHVlSW52b2NhdGlvbio+KHBhcmFtKSk7Ci0gICAgaW52b2NhdGlvbi0+ZnVuY3Rp
b24oaW52b2NhdGlvbi0+ZGF0YSk7Ci19Ci0KLVRocmVhZElkZW50aWZpZXIgY3JlYXRlVGhyZWFk
KFRocmVhZEZ1bmN0aW9uV2l0aFJldHVyblZhbHVlIGVudHJ5UG9pbnQsIHZvaWQqIGRhdGEsIGNv
bnN0IGNoYXIqIG5hbWUpCi17Ci0gICAgYXV0byBpbnZvY2F0aW9uID0gc3RkOjptYWtlX3VuaXF1
ZTxUaHJlYWRGdW5jdGlvbldpdGhSZXR1cm5WYWx1ZUludm9jYXRpb24+KGVudHJ5UG9pbnQsIGRh
dGEpOwotCi0gICAgLy8gQmFsYW5jZWQgYnkgc3RkOjp1bmlxdWVfcHRyIGNvbnN0cnVjdG9yIGlu
IGNvbXBhdEVudHJ5UG9pbnQuCi0gICAgcmV0dXJuIGNyZWF0ZVRocmVhZChjb21wYXRFbnRyeVBv
aW50LCBpbnZvY2F0aW9uLnJlbGVhc2UoKSwgbmFtZSk7Ci19Ci0KLVdURl9FWFBPUlRfUFJJVkFU
RSBpbnQgd2FpdEZvclRocmVhZENvbXBsZXRpb24oVGhyZWFkSWRlbnRpZmllciwgdm9pZCoqKTsK
LQotaW50IHdhaXRGb3JUaHJlYWRDb21wbGV0aW9uKFRocmVhZElkZW50aWZpZXIgdGhyZWFkSUQs
IHZvaWQqKikKLXsKLSAgICByZXR1cm4gd2FpdEZvclRocmVhZENvbXBsZXRpb24odGhyZWFkSUQp
OwotfQotCi0vLyBUaGlzIGZ1bmN0aW9uIGlzIGRlcHJlY2F0ZWQgYnV0IG5lZWRzIHRvIGJlIGtl
cHQgYXJvdW5kIGZvciBiYWNrd2FyZAotLy8gY29tcGF0aWJpbGl0eS4gVXNlIHRoZSAzLWFyZ3Vt
ZW50IHZlcnNpb24gb2YgY3JlYXRlVGhyZWFkIGFib3ZlLgotCi1XVEZfRVhQT1JUX1BSSVZBVEUg
VGhyZWFkSWRlbnRpZmllciBjcmVhdGVUaHJlYWQoVGhyZWFkRnVuY3Rpb25XaXRoUmV0dXJuVmFs
dWUgZW50cnlQb2ludCwgdm9pZCogZGF0YSk7Ci0KLVRocmVhZElkZW50aWZpZXIgY3JlYXRlVGhy
ZWFkKFRocmVhZEZ1bmN0aW9uV2l0aFJldHVyblZhbHVlIGVudHJ5UG9pbnQsIHZvaWQqIGRhdGEp
Ci17Ci0gICAgYXV0byBpbnZvY2F0aW9uID0gc3RkOjptYWtlX3VuaXF1ZTxUaHJlYWRGdW5jdGlv
bldpdGhSZXR1cm5WYWx1ZUludm9jYXRpb24+KGVudHJ5UG9pbnQsIGRhdGEpOwotCi0gICAgLy8g
QmFsYW5jZWQgYnkgYWRvcHRQdHIoKSBpbiBjb21wYXRFbnRyeVBvaW50LgotICAgIHJldHVybiBj
cmVhdGVUaHJlYWQoY29tcGF0RW50cnlQb2ludCwgaW52b2NhdGlvbi5yZWxlYXNlKCksIDApOwot
fQotI2VuZGlmCi0KIH0gLy8gbmFtZXNwYWNlIFdURgpkaWZmIC0tZ2l0IGEvU291cmNlL1dURi93
dGYvVGhyZWFkaW5nLmggYi9Tb3VyY2UvV1RGL3d0Zi9UaHJlYWRpbmcuaAppbmRleCAzNjZkZmJi
OThjZDBjZmY2ZGJiNDQ2YTJlMjhhM2RiYjY4NjNlYzMxLi41OTA2ZmY3NGExZTYxZmYzZmE4Y2Q3
YTI5MmVlZTc1MTYzNzQ2ZTA1IDEwMDY0NAotLS0gYS9Tb3VyY2UvV1RGL3d0Zi9UaHJlYWRpbmcu
aAorKysgYi9Tb3VyY2UvV1RGL3d0Zi9UaHJlYWRpbmcuaApAQCAtMSw1ICsxLDUgQEAKIC8qCi0g
KiBDb3B5cmlnaHQgKEMpIDIwMDcsIDIwMDgsIDIwMTAgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJl
c2VydmVkLgorICogQ29weXJpZ2h0IChDKSAyMDA3LCAyMDA4LCAyMDEwLCAyMDE0IEFwcGxlIElu
Yy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KICAqIENvcHlyaWdodCAoQykgMjAwNyBKdXN0aW4gSGF5
Z29vZCAoamhheWdvb2RAcmVha3RpeC5jb20pCiAgKgogICogUmVkaXN0cmlidXRpb24gYW5kIHVz
ZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CkBAIC0yNSw0MCAr
MjUsMTYgQEAKICAqIE9OIEFOWSBUSEVPUlkgT0YgTElBQklMSVRZLCBXSEVUSEVSIElOIENPTlRS
QUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUCiAgKiAoSU5DTFVESU5HIE5FR0xJR0VOQ0Ug
T1IgT1RIRVJXSVNFKSBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UgT0YKICAqIFRI
SVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBE
QU1BR0UuCi0gKgotICoKLSAqIE5vdGU6IFRoZSBpbXBsZW1lbnRhdGlvbnMgb2YgSW50ZXJsb2Nr
ZWRJbmNyZW1lbnQgYW5kIEludGVybG9ja2VkRGVjcmVtZW50IGFyZSBiYXNlZAotICogb24gYXRv
bWljX2luY3JlbWVudCBhbmQgYXRvbWljX2V4Y2hhbmdlX2FuZF9hZGQgZnJvbSB0aGUgQm9vc3Qg
QysrIExpYnJhcnkuIFRoZSBsaWNlbnNlCi0gKiBpcyB2aXJ0dWFsbHkgaWRlbnRpY2FsIHRvIHRo
ZSBBcHBsZSBsaWNlbnNlIGFib3ZlIGJ1dCBpcyBpbmNsdWRlZCBoZXJlIGZvciBjb21wbGV0ZW5l
c3MuCi0gKgotICogQm9vc3QgU29mdHdhcmUgTGljZW5zZSAtIFZlcnNpb24gMS4wIC0gQXVndXN0
IDE3dGgsIDIwMDMKLSAqIAotICogUGVybWlzc2lvbiBpcyBoZXJlYnkgZ3JhbnRlZCwgZnJlZSBv
ZiBjaGFyZ2UsIHRvIGFueSBwZXJzb24gb3Igb3JnYW5pemF0aW9uCi0gKiBvYnRhaW5pbmcgYSBj
b3B5IG9mIHRoZSBzb2Z0d2FyZSBhbmQgYWNjb21wYW55aW5nIGRvY3VtZW50YXRpb24gY292ZXJl
ZCBieQotICogdGhpcyBsaWNlbnNlICh0aGUgIlNvZnR3YXJlIikgdG8gdXNlLCByZXByb2R1Y2Us
IGRpc3BsYXksIGRpc3RyaWJ1dGUsCi0gKiBleGVjdXRlLCBhbmQgdHJhbnNtaXQgdGhlIFNvZnR3
YXJlLCBhbmQgdG8gcHJlcGFyZSBkZXJpdmF0aXZlIHdvcmtzIG9mIHRoZQotICogU29mdHdhcmUs
IGFuZCB0byBwZXJtaXQgdGhpcmQtcGFydGllcyB0byB3aG9tIHRoZSBTb2Z0d2FyZSBpcyBmdXJu
aXNoZWQgdG8KLSAqIGRvIHNvLCBhbGwgc3ViamVjdCB0byB0aGUgZm9sbG93aW5nOgotICogCi0g
KiBUaGUgY29weXJpZ2h0IG5vdGljZXMgaW4gdGhlIFNvZnR3YXJlIGFuZCB0aGlzIGVudGlyZSBz
dGF0ZW1lbnQsIGluY2x1ZGluZwotICogdGhlIGFib3ZlIGxpY2Vuc2UgZ3JhbnQsIHRoaXMgcmVz
dHJpY3Rpb24gYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciwKLSAqIG11c3QgYmUgaW5jbHVk
ZWQgaW4gYWxsIGNvcGllcyBvZiB0aGUgU29mdHdhcmUsIGluIHdob2xlIG9yIGluIHBhcnQsIGFu
ZAotICogYWxsIGRlcml2YXRpdmUgd29ya3Mgb2YgdGhlIFNvZnR3YXJlLCB1bmxlc3Mgc3VjaCBj
b3BpZXMgb3IgZGVyaXZhdGl2ZQotICogd29ya3MgYXJlIHNvbGVseSBpbiB0aGUgZm9ybSBvZiBt
YWNoaW5lLWV4ZWN1dGFibGUgb2JqZWN0IGNvZGUgZ2VuZXJhdGVkIGJ5Ci0gKiBhIHNvdXJjZSBs
YW5ndWFnZSBwcm9jZXNzb3IuCi0gKiAKLSAqIFRIRSBTT0ZUV0FSRSBJUyBQUk9WSURFRCAiQVMg
SVMiLCBXSVRIT1VUIFdBUlJBTlRZIE9GIEFOWSBLSU5ELCBFWFBSRVNTIE9SCi0gKiBJTVBMSUVE
LCBJTkNMVURJTkcgQlVUIE5PVCBMSU1JVEVEIFRPIFRIRSBXQVJSQU5USUVTIE9GIE1FUkNIQU5U
QUJJTElUWSwKLSAqIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLCBUSVRMRSBBTkQg
Tk9OLUlORlJJTkdFTUVOVC4gSU4gTk8gRVZFTlQKLSAqIFNIQUxMIFRIRSBDT1BZUklHSFQgSE9M
REVSUyBPUiBBTllPTkUgRElTVFJJQlVUSU5HIFRIRSBTT0ZUV0FSRSBCRSBMSUFCTEUKLSAqIEZP
UiBBTlkgREFNQUdFUyBPUiBPVEhFUiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFRP
UlQgT1IgT1RIRVJXSVNFLAotICogQVJJU0lORyBGUk9NLCBPVVQgT0YgT1IgSU4gQ09OTkVDVElP
TiBXSVRIIFRIRSBTT0ZUV0FSRSBPUiBUSEUgVVNFIE9SIE9USEVSCi0gKiBERUFMSU5HUyBJTiBU
SEUgU09GVFdBUkUuCiAgKi8KIAogI2lmbmRlZiBUaHJlYWRpbmdfaAogI2RlZmluZSBUaHJlYWRp
bmdfaAogCisvLyBGSVhNRTogTm90IHN1cmUgd2h5IHRoZXJlIGFyZSBzbyBtYW55IGluY2x1ZGVz
IGhlcmUuCisvLyBJcyB0aGlzIGludGVuZGVkIHRvIGJlIGNvbnZlbmllbmNlIHNvIHRoYXQgb3Ro
ZXJzIGRvbid0IGhhdmUgdG8gaW5jbHVkZSB0aGUgaW5kaXZpZHVhbCBmaWxlcz8KKy8vIE5vdGhp
bmcgaW4gdGhpcyBoZWFkZXIgZGVwZW5kcyBvbiBBc3NlcnRpb25zLCBBdG9taWNzLCBMb2NrZXIs
IE5vbmNvcHlhYmxlLCBUaHJlYWRTYWZlUmVmQ291bnRlZCwgb3IgVGhyZWFkaW5nUHJpbWl0aXZl
cy4KKworI2luY2x1ZGUgPGZ1bmN0aW9uYWw+CiAjaW5jbHVkZSA8c3RkaW50Lmg+CiAjaW5jbHVk
ZSA8d3RmL0Fzc2VydGlvbnMuaD4KICNpbmNsdWRlIDx3dGYvQXRvbWljcy5oPgpAQCAtNzksMTMg
KzU1LDIwIEBAIFdURl9FWFBPUlRfUFJJVkFURSB2b2lkIGluaXRpYWxpemVUaHJlYWRpbmcoKTsK
IAogLy8gUmV0dXJucyAwIGlmIHRocmVhZCBjcmVhdGlvbiBmYWlsZWQuCiAvLyBUaGUgdGhyZWFk
IG5hbWUgbXVzdCBiZSBhIGxpdGVyYWwgc2luY2Ugb24gc29tZSBwbGF0Zm9ybXMgaXQncyBwYXNz
ZWQgaW4gdG8gdGhlIHRocmVhZC4KLVdURl9FWFBPUlRfUFJJVkFURSBUaHJlYWRJZGVudGlmaWVy
IGNyZWF0ZVRocmVhZChUaHJlYWRGdW5jdGlvbiwgdm9pZCosIGNvbnN0IGNoYXIqIHRocmVhZE5h
bWUpOworV1RGX0VYUE9SVF9QUklWQVRFIFRocmVhZElkZW50aWZpZXIgY3JlYXRlVGhyZWFkKGNv
bnN0IGNoYXIqIHRocmVhZE5hbWUsIHN0ZDo6ZnVuY3Rpb248dm9pZCgpPik7CiAKIC8vIE1hcmsg
dGhlIGN1cnJlbnQgdGhyZWFkIGFzIHJlcXVpcmluZyBVSSByZXNwb25zaXZlbmVzcy4KIFdURl9F
WFBPUlRfUFJJVkFURSB2b2lkIHNldEN1cnJlbnRUaHJlYWRJc1VzZXJJbnRlcmFjdGl2ZSgpOwot
CiBXVEZfRVhQT1JUX1BSSVZBVEUgdm9pZCBzZXRDdXJyZW50VGhyZWFkSXNVc2VySW5pdGlhdGVk
KCk7CiAKK1dURl9FWFBPUlRfUFJJVkFURSBUaHJlYWRJZGVudGlmaWVyIGN1cnJlbnRUaHJlYWQo
KTsKK1dURl9FWFBPUlRfUFJJVkFURSB2b2lkIGNoYW5nZVRocmVhZFByaW9yaXR5KFRocmVhZElk
ZW50aWZpZXIsIGludCk7CitXVEZfRVhQT1JUX1BSSVZBVEUgaW50IHdhaXRGb3JUaHJlYWRDb21w
bGV0aW9uKFRocmVhZElkZW50aWZpZXIpOworV1RGX0VYUE9SVF9QUklWQVRFIHZvaWQgZGV0YWNo
VGhyZWFkKFRocmVhZElkZW50aWZpZXIpOworCisvLyBEZXByZWNhdGVkIGZ1bmN0aW9uLXBvaW50
ZXItYmFzZWQgdGhyZWFkIGNyZWF0aW9uLgorV1RGX0VYUE9SVF9QUklWQVRFIFRocmVhZElkZW50
aWZpZXIgY3JlYXRlVGhyZWFkKFRocmVhZEZ1bmN0aW9uLCB2b2lkKiwgY29uc3QgY2hhciogdGhy
ZWFkTmFtZSk7CisKIC8vIEludGVybmFsIHBsYXRmb3JtLXNwZWNpZmljIGNyZWF0ZVRocmVhZCBp
bXBsZW1lbnRhdGlvbi4KIFRocmVhZElkZW50aWZpZXIgY3JlYXRlVGhyZWFkSW50ZXJuYWwoVGhy
ZWFkRnVuY3Rpb24sIHZvaWQqLCBjb25zdCBjaGFyKiB0aHJlYWROYW1lKTsKIApAQCAtOTMsMTEg
Kzc2LDYgQEAgVGhyZWFkSWRlbnRpZmllciBjcmVhdGVUaHJlYWRJbnRlcm5hbChUaHJlYWRGdW5j
dGlvbiwgdm9pZCosIGNvbnN0IGNoYXIqIHRocmVhZE4KIC8vIEhlbHBmdWwgZm9yIHBsYXRmb3Jt
cyB3aGVyZSB0aGUgdGhyZWFkIG5hbWUgbXVzdCBiZSBzZXQgZnJvbSB3aXRoaW4gdGhlIHRocmVh
ZC4KIHZvaWQgaW5pdGlhbGl6ZUN1cnJlbnRUaHJlYWRJbnRlcm5hbChjb25zdCBjaGFyKiB0aHJl
YWROYW1lKTsKIAotV1RGX0VYUE9SVF9QUklWQVRFIFRocmVhZElkZW50aWZpZXIgY3VycmVudFRo
cmVhZCgpOwotV1RGX0VYUE9SVF9QUklWQVRFIHZvaWQgY2hhbmdlVGhyZWFkUHJpb3JpdHkoVGhy
ZWFkSWRlbnRpZmllciwgaW50KTsKLVdURl9FWFBPUlRfUFJJVkFURSBpbnQgd2FpdEZvclRocmVh
ZENvbXBsZXRpb24oVGhyZWFkSWRlbnRpZmllcik7Ci1XVEZfRVhQT1JUX1BSSVZBVEUgdm9pZCBk
ZXRhY2hUaHJlYWQoVGhyZWFkSWRlbnRpZmllcik7Ci0KIH0gLy8gbmFtZXNwYWNlIFdURgogCiB1
c2luZyBXVEY6OlRocmVhZElkZW50aWZpZXI7CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9D
TWFrZUxpc3RzLnR4dCBiL1NvdXJjZS9XZWJDb3JlL0NNYWtlTGlzdHMudHh0CmluZGV4IGQ4ZTZh
YWE0OWUxNzU3NDEzMjhhNDQ2MmQyNzkxYzI3NDNiZWFhNTkuLjE3NmEwZDgyNmZmYTM0ODA1MmNm
MWVkODU0ZjIxNjEzYzA1NmRmZjIgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL0NNYWtlTGlz
dHMudHh0CisrKyBiL1NvdXJjZS9XZWJDb3JlL0NNYWtlTGlzdHMudHh0CkBAIC0xNTA1LDcgKzE1
MDUsNiBAQCBzZXQoV2ViQ29yZV9TT1VSQ0VTCiAgICAgZmlsZWFwaS9GaWxlUmVhZGVyLmNwcAog
ICAgIGZpbGVhcGkvRmlsZVJlYWRlckxvYWRlci5jcHAKICAgICBmaWxlYXBpL0ZpbGVSZWFkZXJT
eW5jLmNwcAotICAgIGZpbGVhcGkvRmlsZVRocmVhZC5jcHAKICAgICBmaWxlYXBpL1RocmVhZGFi
bGVCbG9iUmVnaXN0cnkuY3BwCiAgICAgZmlsZWFwaS9XZWJLaXRCbG9iQnVpbGRlci5jcHAKIApk
aWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvV2ViQ29yZS52Y3hwcm9qL1dlYkNvcmUudmN4cHJv
aiBiL1NvdXJjZS9XZWJDb3JlL1dlYkNvcmUudmN4cHJvai9XZWJDb3JlLnZjeHByb2oKaW5kZXgg
NTFhNGVkN2YwMWQ4MDAwODlmNTJlYjFmN2Q5MTgyMjk4Njc3YWQwYi4uYzU5NTg0YzNmYjRlZWZk
ZmMwNmVmMWZjZjI0NTdhNjVkZjY2NjNjNCAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvV2Vi
Q29yZS52Y3hwcm9qL1dlYkNvcmUudmN4cHJvagorKysgYi9Tb3VyY2UvV2ViQ29yZS9XZWJDb3Jl
LnZjeHByb2ovV2ViQ29yZS52Y3hwcm9qCkBAIC0xNDkzNSw3ICsxNDkzNSw2IEBACiAgICAgPENs
Q29tcGlsZSBJbmNsdWRlPSIuLlxmaWxlYXBpXEZpbGVSZWFkZXIuY3BwIiAvPgogICAgIDxDbENv
bXBpbGUgSW5jbHVkZT0iLi5cZmlsZWFwaVxGaWxlUmVhZGVyTG9hZGVyLmNwcCIgLz4KICAgICA8
Q2xDb21waWxlIEluY2x1ZGU9Ii4uXGZpbGVhcGlcRmlsZVJlYWRlclN5bmMuY3BwIiAvPgotICAg
IDxDbENvbXBpbGUgSW5jbHVkZT0iLi5cZmlsZWFwaVxGaWxlVGhyZWFkLmNwcCIgLz4KICAgICA8
Q2xDb21waWxlIEluY2x1ZGU9Ii4uXGh0bWxcRm9ybUFzc29jaWF0ZWRFbGVtZW50LmNwcCIgLz4K
ICAgICA8Q2xDb21waWxlIEluY2x1ZGU9Ii4uXGh0bWxcRm9ybUNvbnRyb2xsZXIuY3BwIiAvPgog
ICAgIDxDbENvbXBpbGUgSW5jbHVkZT0iLi5caHRtbFxGb3JtRGF0YUxpc3QuY3BwIiAvPgpAQCAt
MjA3MTQsNyArMjA3MTMsNiBAQAogICAgIDxDbEluY2x1ZGUgSW5jbHVkZT0iLi5cZmlsZWFwaVxG
aWxlUmVhZGVyTG9hZGVyLmgiIC8+CiAgICAgPENsSW5jbHVkZSBJbmNsdWRlPSIuLlxmaWxlYXBp
XEZpbGVSZWFkZXJMb2FkZXJDbGllbnQuaCIgLz4KICAgICA8Q2xJbmNsdWRlIEluY2x1ZGU9Ii4u
XGZpbGVhcGlcRmlsZVJlYWRlclN5bmMuaCIgLz4KLSAgICA8Q2xJbmNsdWRlIEluY2x1ZGU9Ii4u
XGZpbGVhcGlcRmlsZVRocmVhZC5oIiAvPgogICAgIDxDbEluY2x1ZGUgSW5jbHVkZT0iLi5caHRt
bFxGb3JtQXNzb2NpYXRlZEVsZW1lbnQuaCIgLz4KICAgICA8Q2xJbmNsdWRlIEluY2x1ZGU9Ii4u
XGh0bWxcRm9ybUNvbnRyb2xsZXIuaCIgLz4KICAgICA8Q2xJbmNsdWRlIEluY2x1ZGU9Ii4uXGh0
bWxcRm9ybURhdGFMaXN0LmgiIC8+CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9XZWJDb3Jl
LnZjeHByb2ovV2ViQ29yZS52Y3hwcm9qLmZpbHRlcnMgYi9Tb3VyY2UvV2ViQ29yZS9XZWJDb3Jl
LnZjeHByb2ovV2ViQ29yZS52Y3hwcm9qLmZpbHRlcnMKaW5kZXggNDY4ZmE1ZTUyZjc3NTdiMmZi
MzgyYjcwM2NiMWQ4MGZmY2M0MWJiOC4uOWIwNmExNWYxNzczYWFjOGM5ZWQ1Y2E5NDJkMGM5MzUy
ZGMzOWQzZCAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvV2ViQ29yZS52Y3hwcm9qL1dlYkNv
cmUudmN4cHJvai5maWx0ZXJzCisrKyBiL1NvdXJjZS9XZWJDb3JlL1dlYkNvcmUudmN4cHJvai9X
ZWJDb3JlLnZjeHByb2ouZmlsdGVycwpAQCAtMzcxNyw5ICszNzE3LDYgQEAKICAgICA8Q2xDb21w
aWxlIEluY2x1ZGU9Ii4uXGZpbGVhcGlcRmlsZVJlYWRlclN5bmMuY3BwIj4KICAgICAgIDxGaWx0
ZXI+aHRtbDwvRmlsdGVyPgogICAgIDwvQ2xDb21waWxlPgotICAgIDxDbENvbXBpbGUgSW5jbHVk
ZT0iLi5cZmlsZWFwaVxGaWxlVGhyZWFkLmNwcCI+Ci0gICAgICA8RmlsdGVyPmh0bWw8L0ZpbHRl
cj4KLSAgICA8L0NsQ29tcGlsZT4KICAgICA8Q2xDb21waWxlIEluY2x1ZGU9Ii4uXGh0bWxcRm9y
bUFzc29jaWF0ZWRFbGVtZW50LmNwcCI+CiAgICAgICA8RmlsdGVyPmh0bWw8L0ZpbHRlcj4KICAg
ICA8L0NsQ29tcGlsZT4KQEAgLTEwODY5LDkgKzEwODY2LDYgQEAKICAgICA8Q2xJbmNsdWRlIElu
Y2x1ZGU9Ii4uXGZpbGVhcGlcRmlsZVJlYWRlclN5bmMuaCI+CiAgICAgICA8RmlsdGVyPmh0bWw8
L0ZpbHRlcj4KICAgICA8L0NsSW5jbHVkZT4KLSAgICA8Q2xJbmNsdWRlIEluY2x1ZGU9Ii4uXGZp
bGVhcGlcRmlsZVRocmVhZC5oIj4KLSAgICAgIDxGaWx0ZXI+aHRtbDwvRmlsdGVyPgotICAgIDwv
Q2xJbmNsdWRlPgogICAgIDxDbEluY2x1ZGUgSW5jbHVkZT0iLi5caHRtbFxGb3JtQXNzb2NpYXRl
ZEVsZW1lbnQuaCI+CiAgICAgICA8RmlsdGVyPmh0bWw8L0ZpbHRlcj4KICAgICA8L0NsSW5jbHVk
ZT4KZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL1dlYkNvcmUueGNvZGVwcm9qL3Byb2plY3Qu
cGJ4cHJvaiBiL1NvdXJjZS9XZWJDb3JlL1dlYkNvcmUueGNvZGVwcm9qL3Byb2plY3QucGJ4cHJv
agppbmRleCA0NDA1ZGJlNWYyOWMxYTE5ZWRjYmM5YzcyZTM4ZDUyMTQ2ZGZjM2UxLi5mM2VkNDI3
YjBlYjQxMDM5ODFkMTZiNGVlZTY1M2NjNmM0MTNhYjlkIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2Vi
Q29yZS9XZWJDb3JlLnhjb2RlcHJvai9wcm9qZWN0LnBieHByb2oKKysrIGIvU291cmNlL1dlYkNv
cmUvV2ViQ29yZS54Y29kZXByb2ovcHJvamVjdC5wYnhwcm9qCkBAIC0zNDc1LDggKzM0NzUsNiBA
QAogCQk5NzZENkM4NjEyMkI4QTNEMDAxRkQxRjcgLyogRmlsZUxpc3QuaCBpbiBIZWFkZXJzICov
ID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDk3NkQ2QzY3MTIyQjhBM0QwMDFGRDFG
NyAvKiBGaWxlTGlzdC5oICovOyB9OwogCQk5NzZENkM4ODEyMkI4QTNEMDAxRkQxRjcgLyogRmls
ZVJlYWRlci5jcHAgaW4gU291cmNlcyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYg
PSA5NzZENkM2OTEyMkI4QTNEMDAxRkQxRjcgLyogRmlsZVJlYWRlci5jcHAgKi87IH07CiAJCTk3
NkQ2Qzg5MTIyQjhBM0QwMDFGRDFGNyAvKiBGaWxlUmVhZGVyLmggaW4gSGVhZGVycyAqLyA9IHtp
c2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSA5NzZENkM2QTEyMkI4QTNEMDAxRkQxRjcgLyog
RmlsZVJlYWRlci5oICovOyB9OwotCQk5NzZENkM4RDEyMkI4QTNEMDAxRkQxRjcgLyogRmlsZVRo
cmVhZC5jcHAgaW4gU291cmNlcyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSA5
NzZENkM2RTEyMkI4QTNEMDAxRkQxRjcgLyogRmlsZVRocmVhZC5jcHAgKi87IH07Ci0JCTk3NkQ2
QzhFMTIyQjhBM0QwMDFGRDFGNyAvKiBGaWxlVGhyZWFkLmggaW4gSGVhZGVycyAqLyA9IHtpc2Eg
PSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSA5NzZENkM2RjEyMkI4QTNEMDAxRkQxRjcgLyogRmls
ZVRocmVhZC5oICovOyB9OwogCQk5NzZENkM5NDEyMkI4QTNEMDAxRkQxRjcgLyogVGhyZWFkYWJs
ZUJsb2JSZWdpc3RyeS5jcHAgaW4gU291cmNlcyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZp
bGVSZWYgPSA5NzZENkM3NTEyMkI4QTNEMDAxRkQxRjcgLyogVGhyZWFkYWJsZUJsb2JSZWdpc3Ry
eS5jcHAgKi87IH07CiAJCTk3NkQ2Qzk1MTIyQjhBM0QwMDFGRDFGNyAvKiBUaHJlYWRhYmxlQmxv
YlJlZ2lzdHJ5LmggaW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYg
PSA5NzZENkM3NjEyMkI4QTNEMDAxRkQxRjcgLyogVGhyZWFkYWJsZUJsb2JSZWdpc3RyeS5oICov
OyB9OwogCQk5NzZGMzZFQTE0Njg2MjI1MDA1RTkzQjQgLyogU2VjdXJpdHlDb250ZXh0LmNwcCBp
biBTb3VyY2VzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDk3NkYzNkU4MTQ2
ODYyMjUwMDVFOTNCNCAvKiBTZWN1cml0eUNvbnRleHQuY3BwICovOyB9OwpAQCAtMTA2NDEsOCAr
MTA2MzksNiBAQAogCQk5NzZENkM2NzEyMkI4QTNEMDAxRkQxRjcgLyogRmlsZUxpc3QuaCAqLyA9
IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxl
VHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBuYW1lID0gRmlsZUxpc3QuaDsgcGF0aCA9IGZpbGVhcGkv
RmlsZUxpc3QuaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKIAkJOTc2RDZDNjkxMjJCOEEz
RDAwMUZEMUY3IC8qIEZpbGVSZWFkZXIuY3BwICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7
IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jcHAuY3Bw
OyBuYW1lID0gRmlsZVJlYWRlci5jcHA7IHBhdGggPSBmaWxlYXBpL0ZpbGVSZWFkZXIuY3BwOyBz
b3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwogCQk5NzZENkM2QTEyMkI4QTNEMDAxRkQxRjcgLyog
RmlsZVJlYWRlci5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9
IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7IG5hbWUgPSBGaWxlUmVhZGVy
Lmg7IHBhdGggPSBmaWxlYXBpL0ZpbGVSZWFkZXIuaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+Ijsg
fTsKLQkJOTc2RDZDNkUxMjJCOEEzRDAwMUZEMUY3IC8qIEZpbGVUaHJlYWQuY3BwICovID0ge2lz
YSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBl
ID0gc291cmNlY29kZS5jcHAuY3BwOyBuYW1lID0gRmlsZVRocmVhZC5jcHA7IHBhdGggPSBmaWxl
YXBpL0ZpbGVUaHJlYWQuY3BwOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwotCQk5NzZENkM2
RjEyMkI4QTNEMDAxRkQxRjcgLyogRmlsZVRocmVhZC5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZl
cmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5j
Lmg7IG5hbWUgPSBGaWxlVGhyZWFkLmg7IHBhdGggPSBmaWxlYXBpL0ZpbGVUaHJlYWQuaDsgc291
cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKIAkJOTc2RDZDNzUxMjJCOEEzRDAwMUZEMUY3IC8qIFRo
cmVhZGFibGVCbG9iUmVnaXN0cnkuY3BwICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZp
bGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jcHAuY3BwOyBu
YW1lID0gVGhyZWFkYWJsZUJsb2JSZWdpc3RyeS5jcHA7IHBhdGggPSBmaWxlYXBpL1RocmVhZGFi
bGVCbG9iUmVnaXN0cnkuY3BwOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwogCQk5NzZENkM3
NjEyMkI4QTNEMDAxRkQxRjcgLyogVGhyZWFkYWJsZUJsb2JSZWdpc3RyeS5oICovID0ge2lzYSA9
IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0g
c291cmNlY29kZS5jLmg7IG5hbWUgPSBUaHJlYWRhYmxlQmxvYlJlZ2lzdHJ5Lmg7IHBhdGggPSBm
aWxlYXBpL1RocmVhZGFibGVCbG9iUmVnaXN0cnkuaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+Ijsg
fTsKIAkJOTc2RjM2RTgxNDY4NjIyNTAwNUU5M0I0IC8qIFNlY3VyaXR5Q29udGV4dC5jcHAgKi8g
PSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmls
ZVR5cGUgPSBzb3VyY2Vjb2RlLmNwcC5jcHA7IHBhdGggPSBTZWN1cml0eUNvbnRleHQuY3BwOyBz
b3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwpAQCAtMTgyMjksOCArMTgyMjUsNiBAQAogCQkJCTJF
REYzNjlBMTIyQzk0QjQwMDJGN0Q0RSAvKiBGaWxlUmVhZGVyU3luYy5jcHAgKi8sCiAJCQkJMkVE
RjM2OUIxMjJDOTRCNDAwMkY3RDRFIC8qIEZpbGVSZWFkZXJTeW5jLmggKi8sCiAJCQkJRTFBQjFF
QkQxNEU5RTNBODAwNDQ5RTEzIC8qIEZpbGVSZWFkZXJTeW5jLmlkbCAqLywKLQkJCQk5NzZENkM2
RTEyMkI4QTNEMDAxRkQxRjcgLyogRmlsZVRocmVhZC5jcHAgKi8sCi0JCQkJOTc2RDZDNkYxMjJC
OEEzRDAwMUZEMUY3IC8qIEZpbGVUaHJlYWQuaCAqLywKIAkJCQk5NzZENkM3NTEyMkI4QTNEMDAx
RkQxRjcgLyogVGhyZWFkYWJsZUJsb2JSZWdpc3RyeS5jcHAgKi8sCiAJCQkJOTc2RDZDNzYxMjJC
OEEzRDAwMUZEMUY3IC8qIFRocmVhZGFibGVCbG9iUmVnaXN0cnkuaCAqLywKIAkJCQk5NzZENkM1
QzEyMkI4QTNEMDAxRkQxRjcgLyogV2ViS2l0QmxvYkJ1aWxkZXIuY3BwICovLApAQCAtMjQzMjQs
NyArMjQzMTgsNiBAQAogCQkJCTJFRjFCRkY5MTIxQ0IwQ0UwMEMyNzYyNyAvKiBGaWxlU3RyZWFt
Q2xpZW50LmggaW4gSGVhZGVycyAqLywKIAkJCQk1MTRCM0Y3MzBDNzIyMDQ3MDAwNTMwREYgLyog
RmlsZVN5c3RlbS5oIGluIEhlYWRlcnMgKi8sCiAJCQkJMjZDMTdBM0UxNDkxRDJENDAwRDEyQkEy
IC8qIEZpbGVTeXN0ZW1JT1MuaCBpbiBIZWFkZXJzICovLAotCQkJCTk3NkQ2QzhFMTIyQjhBM0Qw
MDFGRDFGNyAvKiBGaWxlVGhyZWFkLmggaW4gSGVhZGVycyAqLywKIAkJCQlCQzVFQjY5RjBFODFE
QUVCMDBCMjU5NjUgLyogRmlsbExheWVyLmggaW4gSGVhZGVycyAqLywKIAkJCQk4NDVFNzJGODBG
RDI2MUVFMDBBODdENzkgLyogRmlsdGVyLmggaW4gSGVhZGVycyAqLywKIAkJCQkwOEM5MjUxQTBG
Q0M3QzRBMDA0ODBERUMgLyogRmlsdGVyRWZmZWN0LmggaW4gSGVhZGVycyAqLywKQEAgLTI3ODIw
LDcgKzI3ODEzLDYgQEAKIAkJCQkyNkMxN0EzRjE0OTFEMkQ0MDBEMTJCQTIgLyogRmlsZVN5c3Rl
bUlPUy5tbSBpbiBTb3VyY2VzICovLAogCQkJCTUxNEIzRjc2MEM3MjIwNTUwMDA1MzBERiAvKiBG
aWxlU3lzdGVtTWFjLm1tIGluIFNvdXJjZXMgKi8sCiAJCQkJNTE2MDMwMEIwQ0M0MjUxMjAwQzhB
QzI1IC8qIEZpbGVTeXN0ZW1QT1NJWC5jcHAgaW4gU291cmNlcyAqLywKLQkJCQk5NzZENkM4RDEy
MkI4QTNEMDAxRkQxRjcgLyogRmlsZVRocmVhZC5jcHAgaW4gU291cmNlcyAqLywKIAkJCQlCQzVF
QjY5RTBFODFEQUVCMDBCMjU5NjUgLyogRmlsbExheWVyLmNwcCBpbiBTb3VyY2VzICovLAogCQkJ
CTA4QzkyNTE5MEZDQzdDNEEwMDQ4MERFQyAvKiBGaWx0ZXJFZmZlY3QuY3BwIGluIFNvdXJjZXMg
Ki8sCiAJCQkJMzEzMTNGNjUxNDQzQjM1RjAwNkUyQTkwIC8qIEZpbHRlckVmZmVjdFJlbmRlcmVy
LmNwcCBpbiBTb3VyY2VzICovLApkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvYmluZGluZ3Mv
Z2VuZXJpYy9BY3RpdmVET01DYWxsYmFjay5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9iaW5kaW5ncy9n
ZW5lcmljL0FjdGl2ZURPTUNhbGxiYWNrLmNwcAppbmRleCA4MWExMGMxNGIyZGI1ZjE3MWRjMDY4
OGM4MDYxZTczZDAxZmE2OWNmLi41YjE3NDFlMTMxODNiMGY2ZmVhODEyNmNjMjkxY2RmZjQ5MjA5
ZjI3IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9iaW5kaW5ncy9nZW5lcmljL0FjdGl2ZURP
TUNhbGxiYWNrLmNwcAorKysgYi9Tb3VyY2UvV2ViQ29yZS9iaW5kaW5ncy9nZW5lcmljL0FjdGl2
ZURPTUNhbGxiYWNrLmNwcApAQCAtMzEsOSArMzEsNyBAQAogI2luY2x1ZGUgImNvbmZpZy5oIgog
I2luY2x1ZGUgIkFjdGl2ZURPTUNhbGxiYWNrLmgiCiAKLSNpbmNsdWRlICJBY3RpdmVET01PYmpl
Y3QuaCIKICNpbmNsdWRlICJTY3JpcHRFeGVjdXRpb25Db250ZXh0LmgiCi0jaW5jbHVkZSAiV29y
a2VyR2xvYmFsU2NvcGUuaCIKIAogbmFtZXNwYWNlIFdlYkNvcmUgewogCmRpZmYgLS1naXQgYS9T
b3VyY2UvV2ViQ29yZS9kb20vQWN0aXZlRE9NT2JqZWN0LmNwcCBiL1NvdXJjZS9XZWJDb3JlL2Rv
bS9BY3RpdmVET01PYmplY3QuY3BwCmluZGV4IDI5OWExYTMwMGU0NjRhM2E2YjU5ZWY2MTgxNDA0
YjZhYThiMWVlZGIuLmMzMjY3MWIxMDE4MGY4NDBmZTEyYTNhZjA3NWMxMWY5MjllODEyZDUgMTAw
NjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL2RvbS9BY3RpdmVET01PYmplY3QuY3BwCisrKyBiL1Nv
dXJjZS9XZWJDb3JlL2RvbS9BY3RpdmVET01PYmplY3QuY3BwCkBAIC0yOCw4ICsyOCw2IEBACiAj
aW5jbHVkZSAiQWN0aXZlRE9NT2JqZWN0LmgiCiAKICNpbmNsdWRlICJTY3JpcHRFeGVjdXRpb25D
b250ZXh0LmgiCi0jaW5jbHVkZSAiV29ya2VyR2xvYmFsU2NvcGUuaCIKLSNpbmNsdWRlICJXb3Jr
ZXJUaHJlYWQuaCIKIAogbmFtZXNwYWNlIFdlYkNvcmUgewogCmRpZmYgLS1naXQgYS9Tb3VyY2Uv
V2ViQ29yZS9maWxlYXBpL0FzeW5jRmlsZVN0cmVhbS5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9maWxl
YXBpL0FzeW5jRmlsZVN0cmVhbS5jcHAKaW5kZXggNWEzOTFmODdjZWUxNGNlNjcxODgzYjQwMzEw
NzIyMjBhMjQ5NjE3YS4uZDJiYjBjNWNjODZhMTI0YmEyMDAxMzFkZTRjZmRhYTEzNjUxMDVjNiAx
MDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvZmlsZWFwaS9Bc3luY0ZpbGVTdHJlYW0uY3BwCisr
KyBiL1NvdXJjZS9XZWJDb3JlL2ZpbGVhcGkvQXN5bmNGaWxlU3RyZWFtLmNwcApAQCAtMSw2ICsx
LDYgQEAKIC8qCiAgKiBDb3B5cmlnaHQgKEMpIDIwMTAgR29vZ2xlIEluYy4gIEFsbCByaWdodHMg
cmVzZXJ2ZWQuCi0gKiBDb3B5cmlnaHQgKEMpIDIwMTIgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJl
c2VydmVkLgorICogQ29weXJpZ2h0IChDKSAyMDEyLCAyMDE0IEFwcGxlIEluYy4gQWxsIHJpZ2h0
cyByZXNlcnZlZC4KICAqCiAgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQg
YmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKICAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1p
dHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucyBhcmUKQEAgLTMwLDE2
MiArMzAsMTc1IEBACiAgKi8KIAogI2luY2x1ZGUgImNvbmZpZy5oIgotCiAjaW5jbHVkZSAiQXN5
bmNGaWxlU3RyZWFtLmgiCiAKLSNpbmNsdWRlICJCbG9iLmgiCiAjaW5jbHVkZSAiRmlsZVN0cmVh
bS5oIgogI2luY2x1ZGUgIkZpbGVTdHJlYW1DbGllbnQuaCIKLSNpbmNsdWRlICJGaWxlVGhyZWFk
LmgiCisjaW5jbHVkZSAiVVJMLmgiCisjaW5jbHVkZSA8d3RmL0F1dG9kcmFpbmVkUG9vbC5oPgog
I2luY2x1ZGUgPHd0Zi9NYWluVGhyZWFkLmg+Ci0jaW5jbHVkZSA8d3RmL3RleHQvV1RGU3RyaW5n
Lmg+Ci0KLSNpZiBQTEFURk9STShJT1MpCi0jaW5jbHVkZSAiV2ViQ29yZVRocmVhZC5oIgotI2Vu
ZGlmCisjaW5jbHVkZSA8d3RmL01lc3NhZ2VRdWV1ZS5oPgorI2luY2x1ZGUgPHd0Zi9OZXZlckRl
c3Ryb3llZC5oPgogCiBuYW1lc3BhY2UgV2ViQ29yZSB7CiAKLXN0YXRpYyBQYXNzUmVmUHRyPEZp
bGVUaHJlYWQ+IGNyZWF0ZUZpbGVUaHJlYWQoKQotewotICAgIFJlZlB0cjxGaWxlVGhyZWFkPiB0
aHJlYWQgPSBGaWxlVGhyZWFkOjpjcmVhdGUoKTsKLSAgICBpZiAoIXRocmVhZC0+c3RhcnQoKSkK
LSAgICAgICAgcmV0dXJuIDA7Ci0gICAgcmV0dXJuIHRocmVhZC5yZWxlYXNlKCk7Ci19CitzdHJ1
Y3QgQXN5bmNGaWxlU3RyZWFtOjpJbnRlcm5hbHMgeworICAgIGV4cGxpY2l0IEludGVybmFscyhG
aWxlU3RyZWFtQ2xpZW50Jik7CiAKLXN0YXRpYyBGaWxlVGhyZWFkKiBmaWxlVGhyZWFkKCkKKyAg
ICBGaWxlU3RyZWFtIHN0cmVhbTsKKyAgICBGaWxlU3RyZWFtQ2xpZW50JiBjbGllbnQ7CisgICAg
c3RkOjphdG9taWNfYm9vbCBkZXN0cm95ZWQgeyBmYWxzZSB9OworfTsKKworaW5saW5lIEFzeW5j
RmlsZVN0cmVhbTo6SW50ZXJuYWxzOjpJbnRlcm5hbHMoRmlsZVN0cmVhbUNsaWVudCYgY2xpZW50
KQorICAgIDogY2xpZW50KGNsaWVudCkKIHsKLSAgICBBU1NFUlQoaXNNYWluVGhyZWFkKCkpOwot
ICAgIHN0YXRpYyBGaWxlVGhyZWFkKiB0aHJlYWQgPSBjcmVhdGVGaWxlVGhyZWFkKCkubGVha1Jl
ZigpOwotICAgIHJldHVybiB0aHJlYWQ7CiB9CiAKLWlubGluZSBBc3luY0ZpbGVTdHJlYW06OkFz
eW5jRmlsZVN0cmVhbShGaWxlU3RyZWFtQ2xpZW50KiBjbGllbnQpCi0gICAgOiBtX3N0cmVhbShG
aWxlU3RyZWFtOjpjcmVhdGUoKSkKLSAgICAsIG1fY2xpZW50KGNsaWVudCkKK3N0YXRpYyB2b2lk
IGNhbGxPbkZpbGVUaHJlYWQoc3RkOjpmdW5jdGlvbjx2b2lkKCk+JiYgZnVuY3Rpb24pCiB7CiAg
ICAgQVNTRVJUKGlzTWFpblRocmVhZCgpKTsKLX0KKyAgICBBU1NFUlQoZnVuY3Rpb24pOwogCi1Q
YXNzUmVmUHRyPEFzeW5jRmlsZVN0cmVhbT4gQXN5bmNGaWxlU3RyZWFtOjpjcmVhdGUoRmlsZVN0
cmVhbUNsaWVudCogY2xpZW50KQotewotICAgIFJlZlB0cjxBc3luY0ZpbGVTdHJlYW0+IHByb3h5
ID0gYWRvcHRSZWYobmV3IEFzeW5jRmlsZVN0cmVhbShjbGllbnQpKTsKKyAgICBzdGF0aWMgTmV2
ZXJEZXN0cm95ZWQ8TWVzc2FnZVF1ZXVlPHN0ZDo6ZnVuY3Rpb248dm9pZCgpPj4+IHF1ZXVlOwog
Ci0gICAgLy8gSG9sZCBhIHJlZmVyZW5jZSBzbyB0aGF0IHRoZSBpbnN0YW5jZSB3aWxsIG5vdCBn
ZXQgZGVsZXRlZCB3aGlsZSB0aGVyZSBhcmUgdGFza3Mgb24gdGhlIGZpbGUgdGhyZWFkLgotICAg
IC8vIFRoaXMgaXMgYmFsYW5jZWQgYnkgdGhlIGRlcmVmIGluIGRlcmVmUHJveHlPbkNvbnRleHQg
YmVsb3cuCi0gICAgcHJveHktPnJlZigpOworICAgIHN0YXRpYyBzdGQ6Om9uY2VfZmxhZyBjcmVh
dGVGaWxlVGhyZWFkT25jZTsKKyAgICBzdGQ6OmNhbGxfb25jZShjcmVhdGVGaWxlVGhyZWFkT25j
ZSwgW10geworICAgICAgICBjcmVhdGVUaHJlYWQoIldlYkNvcmU6IEFzeW5jRmlsZVN0cmVhbSIs
IFtdIHsKKyAgICAgICAgICAgIGZvciAoOzspIHsKKyAgICAgICAgICAgICAgICBBdXRvZHJhaW5l
ZFBvb2wgcG9vbDsKIAotICAgIEFzeW5jRmlsZVN0cmVhbSogcHJveHlQdHIgPSBwcm94eS5nZXQo
KTsKLSAgICBmaWxlVGhyZWFkKCktPnBvc3RUYXNrKHsgcHJveHlQdHIsIFs9XSB7Ci0gICAgICAg
IC8vIEZJWE1FOiBJdCBpcyBub3QgY29ycmVjdCB0byBjaGVjayBtX2NsaWVudCBmcm9tIGEgc2Vj
b25kYXJ5IHRocmVhZCAtIHN0b3AoKSBjb3VsZCBiZSByYWNpbmcgd2l0aCB0aGlzIGNoZWNrLgot
ICAgICAgICBpZiAoIXByb3h5UHRyLT5jbGllbnQoKSkKLSAgICAgICAgICAgIHJldHVybjsKKyAg
ICAgICAgICAgICAgICBhdXRvIGZ1bmN0aW9uID0gcXVldWUuZ2V0KCkud2FpdEZvck1lc3NhZ2Uo
KTsKKworICAgICAgICAgICAgICAgIC8vIFRoaXMgY2FuIG5ldmVyIGJlIG51bGwgYmVjYXVzZSB3
ZSBuZXZlciBraWxsIHRoZSBNZXNzYWdlUXVldWUuCisgICAgICAgICAgICAgICAgQVNTRVJUKGZ1
bmN0aW9uKTsKKworICAgICAgICAgICAgICAgIC8vIFRoaXMgY2FuIGJldmVyIGJlIG51bGwgYmVj
YXVzZSB3ZSBuZXZlciBxdWV1ZSBhIGZ1bmN0aW9uIHRoYXQgaXMgbnVsbC4KKyAgICAgICAgICAg
ICAgICBBU1NFUlQoKmZ1bmN0aW9uKTsKIAotICAgICAgICBwcm94eVB0ci0+bV9zdHJlYW0tPnN0
YXJ0KCk7Ci0gICAgICAgIGNhbGxPbk1haW5UaHJlYWQoW3Byb3h5UHRyXSB7Ci0gICAgICAgICAg
ICBpZiAocHJveHlQdHItPmNsaWVudCgpKQotICAgICAgICAgICAgICAgIHByb3h5UHRyLT5jbGll
bnQoKS0+ZGlkU3RhcnQoKTsKKyAgICAgICAgICAgICAgICAoKmZ1bmN0aW9uKSgpOworICAgICAg
ICAgICAgfQogICAgICAgICB9KTsKLSAgICB9IH0pOworICAgIH0pOwogCi0gICAgcmV0dXJuIHBy
b3h5LnJlbGVhc2UoKTsKKyAgICBxdWV1ZS5nZXQoKS5hcHBlbmQoc3RkOjptYWtlX3VuaXF1ZTxz
dGQ6OmZ1bmN0aW9uPHZvaWQoKT4+KFdURjo6bW92ZShmdW5jdGlvbikpKTsKK30KKworQXN5bmNG
aWxlU3RyZWFtOjpBc3luY0ZpbGVTdHJlYW0oRmlsZVN0cmVhbUNsaWVudCYgY2xpZW50KQorICAg
IDogbV9pbnRlcm5hbHMoc3RkOjptYWtlX3VuaXF1ZTxJbnRlcm5hbHM+KGNsaWVudCkpCit7Cisg
ICAgQVNTRVJUKGlzTWFpblRocmVhZCgpKTsKIH0KIAogQXN5bmNGaWxlU3RyZWFtOjp+QXN5bmNG
aWxlU3RyZWFtKCkKIHsKKyAgICBBU1NFUlQoaXNNYWluVGhyZWFkKCkpOworCisgICAgLy8gUmVs
ZWFzZSBzbyB0aGF0IHdlIGNhbiBjb250cm9sIHRoZSB0aW1pbmcgb2YgZGVsZXRpb24gYmVsb3cu
CisgICAgYXV0byYgaW50ZXJuYWxzID0gKm1faW50ZXJuYWxzLnJlbGVhc2UoKTsKKworICAgIC8v
IFNldCBmbGFnIHRvIHByZXZlbnQgY2xpZW50IGNhbGxiYWNrcyBhbmQgYWxzbyBwcmV2ZW50IHF1
ZXVlZCBvcGVyYXRpb25zIGZyb20gc3RhcnRpbmcuCisgICAgaW50ZXJuYWxzLmRlc3Ryb3llZCA9
IHRydWU7CisKKyAgICAvLyBDYWxsIHRocm91Z2ggZmlsZSB0aHJlYWQgYW5kIGJhY2sgdG8gbWFp
biB0aHJlYWQgdG8gbWFrZSBzdXJlIGRlbGV0aW9uIGhhcHBlbnMKKyAgICAvLyBhZnRlciBhbGwg
ZmlsZSB0aHJlYWQgZnVuY3Rpb25zIGFuZCBhbGwgbWFpbiB0aHJlYWQgZnVuY3Rpb25zIGNhbGxl
ZCBmcm9tIHRoZW0uCisgICAgY2FsbE9uRmlsZVRocmVhZChbJmludGVybmFsc10geworICAgICAg
ICBjYWxsT25NYWluVGhyZWFkKFsmaW50ZXJuYWxzXSB7CisgICAgICAgICAgICBkZWxldGUgJmlu
dGVybmFsczsKKyAgICAgICAgfSk7CisgICAgfSk7CiB9CiAKLXZvaWQgQXN5bmNGaWxlU3RyZWFt
OjpzdG9wKCkKK3ZvaWQgQXN5bmNGaWxlU3RyZWFtOjpwZXJmb3JtKHN0ZDo6ZnVuY3Rpb248c3Rk
OjpmdW5jdGlvbjx2b2lkKEZpbGVTdHJlYW1DbGllbnQmKT4oRmlsZVN0cmVhbSYpPiBvcGVyYXRp
b24pCiB7Ci0gICAgLy8gQ2xlYXIgdGhlIGNsaWVudCBzbyB0aGF0IHdlIHdvbid0IGJlIGludm9r
aW5nIGNhbGxiYWNrcyBvbiB0aGUgY2xpZW50LgotICAgIHNldENsaWVudCgwKTsKLQotICAgIGZp
bGVUaHJlYWQoKS0+dW5zY2hlZHVsZVRhc2tzKG1fc3RyZWFtLmdldCgpKTsKLSAgICBmaWxlVGhy
ZWFkKCktPnBvc3RUYXNrKHsgdGhpcywgW3RoaXNdIHsKLSAgICAgICAgbV9zdHJlYW0tPnN0b3Ao
KTsKLSAgICAgICAgY2FsbE9uTWFpblRocmVhZChbdGhpc10gewotICAgICAgICAgICAgQVNTRVJU
KGhhc09uZVJlZigpKTsKLSAgICAgICAgICAgIGRlcmVmKCk7CisgICAgYXV0byYgaW50ZXJuYWxz
ID0gKm1faW50ZXJuYWxzOworICAgIGNhbGxPbkZpbGVUaHJlYWQoWyZpbnRlcm5hbHMsIG9wZXJh
dGlvbl0geworICAgICAgICAvLyBEb24ndCBkbyB0aGUgb3BlcmF0aW9uIGlmIHN0b3Agd2FzIGFs
cmVhZHkgY2FsbGVkIG9uIHRoZSBtYWluIHRocmVhZC4gTm90ZSB0aGF0IHRoZXJlIGlzCisgICAg
ICAgIC8vIGEgcmFjZSBoZXJlLCBidXQgc2luY2Ugc2tpcHBpbmcgdGhlIG9wZXJhdGlvbiBpcyBh
biBvcHRpbWl6YXRpb24gaXQncyBPSyB0aGF0IHdlIGNhbid0CisgICAgICAgIC8vIGd1YXJhbnRl
ZSBleGFjdGx5IHdoaWNoIG9wZXJhdGlvbnMgYXJlIHNraXBwZWQuIE5vdGUgdGhhdCB0aGlzIGlz
IGFsc28gdGhlIG9ubHkgcmVhc29uCisgICAgICAgIC8vIHdlIHVzZSBhbiBhdG9taWNfYm9vbCBy
YXRoZXIgdGhhbiBqdXN0IGEgYm9vbCBmb3IgZGVzdHJveWVkLgorICAgICAgICBpZiAoaW50ZXJu
YWxzLmRlc3Ryb3llZCkKKyAgICAgICAgICAgIHJldHVybjsKKyAgICAgICAgYXV0byBtYWluVGhy
ZWFkV29yayA9IG9wZXJhdGlvbihpbnRlcm5hbHMuc3RyZWFtKTsKKyAgICAgICAgY2FsbE9uTWFp
blRocmVhZChbJmludGVybmFscywgbWFpblRocmVhZFdvcmtdIHsKKyAgICAgICAgICAgIGlmIChp
bnRlcm5hbHMuZGVzdHJveWVkKQorICAgICAgICAgICAgICAgIHJldHVybjsKKyAgICAgICAgICAg
IG1haW5UaHJlYWRXb3JrKGludGVybmFscy5jbGllbnQpOwogICAgICAgICB9KTsKLSAgICB9IH0p
OworICAgIH0pOwogfQogCiB2b2lkIEFzeW5jRmlsZVN0cmVhbTo6Z2V0U2l6ZShjb25zdCBTdHJp
bmcmIHBhdGgsIGRvdWJsZSBleHBlY3RlZE1vZGlmaWNhdGlvblRpbWUpCiB7Ci0gICAgU3RyaW5n
IHBhdGhDb3B5ID0gcGF0aC5pc29sYXRlZENvcHkoKTsKLSAgICBmaWxlVGhyZWFkKCktPnBvc3RU
YXNrKHsgdGhpcywgW3RoaXMsIHBhdGhDb3B5LCBleHBlY3RlZE1vZGlmaWNhdGlvblRpbWVdIHsK
LSAgICAgICAgbG9uZyBsb25nIHNpemUgPSBtX3N0cmVhbS0+Z2V0U2l6ZShwYXRoQ29weSwgZXhw
ZWN0ZWRNb2RpZmljYXRpb25UaW1lKTsKLSAgICAgICAgY2FsbE9uTWFpblRocmVhZChbdGhpcywg
c2l6ZV0gewotICAgICAgICAgICAgaWYgKGNsaWVudCgpKQotICAgICAgICAgICAgICAgIGNsaWVu
dCgpLT5kaWRHZXRTaXplKHNpemUpOwotICAgICAgICB9KTsKLSAgICB9IH0pOworICAgIFN0cmlu
Z0NhcHR1cmUgY2FwdHVyZWRQYXRoKHBhdGgpOworICAgIHBlcmZvcm0oW2NhcHR1cmVkUGF0aCwg
ZXhwZWN0ZWRNb2RpZmljYXRpb25UaW1lXShGaWxlU3RyZWFtJiBzdHJlYW0pIHsKKyAgICAgICAg
bG9uZyBsb25nIHNpemUgPSBzdHJlYW0uZ2V0U2l6ZShjYXB0dXJlZFBhdGguc3RyaW5nKCksIGV4
cGVjdGVkTW9kaWZpY2F0aW9uVGltZSk7CisgICAgICAgIHJldHVybiBbc2l6ZV0oRmlsZVN0cmVh
bUNsaWVudCYgY2xpZW50KSB7CisgICAgICAgICAgICBjbGllbnQuZGlkR2V0U2l6ZShzaXplKTsK
KyAgICAgICAgfTsKKyAgICB9KTsKIH0KIAogdm9pZCBBc3luY0ZpbGVTdHJlYW06Om9wZW5Gb3JS
ZWFkKGNvbnN0IFN0cmluZyYgcGF0aCwgbG9uZyBsb25nIG9mZnNldCwgbG9uZyBsb25nIGxlbmd0
aCkKIHsKLSAgICBTdHJpbmcgcGF0aENvcHkgPSBwYXRoLmlzb2xhdGVkQ29weSgpOwotICAgIGZp
bGVUaHJlYWQoKS0+cG9zdFRhc2soeyB0aGlzLCBbdGhpcywgcGF0aENvcHksIG9mZnNldCwgbGVu
Z3RoXSB7Ci0gICAgICAgIGJvb2wgc3VjY2VzcyA9IG1fc3RyZWFtLT5vcGVuRm9yUmVhZChwYXRo
Q29weSwgb2Zmc2V0LCBsZW5ndGgpOwotICAgICAgICBjYWxsT25NYWluVGhyZWFkKFt0aGlzLCBz
dWNjZXNzXSB7Ci0gICAgICAgICAgICBpZiAoY2xpZW50KCkpCi0gICAgICAgICAgICAgICAgY2xp
ZW50KCktPmRpZE9wZW4oc3VjY2Vzcyk7Ci0gICAgICAgIH0pOwotICAgIH0gfSk7CisgICAgU3Ry
aW5nQ2FwdHVyZSBjYXB0dXJlZFBhdGgocGF0aCk7CisgICAgcGVyZm9ybShbY2FwdHVyZWRQYXRo
LCBvZmZzZXQsIGxlbmd0aF0oRmlsZVN0cmVhbSYgc3RyZWFtKSB7CisgICAgICAgIGJvb2wgc3Vj
Y2VzcyA9IHN0cmVhbS5vcGVuRm9yUmVhZChjYXB0dXJlZFBhdGguc3RyaW5nKCksIG9mZnNldCwg
bGVuZ3RoKTsKKyAgICAgICAgcmV0dXJuIFtzdWNjZXNzXShGaWxlU3RyZWFtQ2xpZW50JiBjbGll
bnQpIHsKKyAgICAgICAgICAgIGNsaWVudC5kaWRPcGVuKHN1Y2Nlc3MpOworICAgICAgICB9Owor
ICAgIH0pOwogfQogCiB2b2lkIEFzeW5jRmlsZVN0cmVhbTo6b3BlbkZvcldyaXRlKGNvbnN0IFN0
cmluZyYgcGF0aCkKIHsKLSAgICBTdHJpbmcgcGF0aENvcHkgPSBwYXRoLmlzb2xhdGVkQ29weSgp
OwotICAgIGZpbGVUaHJlYWQoKS0+cG9zdFRhc2soeyB0aGlzLCBbdGhpcywgcGF0aENvcHldIHsK
LSAgICAgICAgYm9vbCBzdWNjZXNzID0gbV9zdHJlYW0tPm9wZW5Gb3JXcml0ZShwYXRoQ29weSk7
Ci0gICAgICAgIGNhbGxPbk1haW5UaHJlYWQoW3RoaXMsIHN1Y2Nlc3NdIHsKLSAgICAgICAgICAg
IGlmIChjbGllbnQoKSkKLSAgICAgICAgICAgICAgICBjbGllbnQoKS0+ZGlkT3BlbihzdWNjZXNz
KTsKLSAgICAgICAgfSk7Ci0gICAgfSB9KTsKKyAgICBTdHJpbmdDYXB0dXJlIGNhcHR1cmVkUGF0
aChwYXRoKTsKKyAgICBwZXJmb3JtKFtjYXB0dXJlZFBhdGhdKEZpbGVTdHJlYW0mIHN0cmVhbSkg
eworICAgICAgICBib29sIHN1Y2Nlc3MgPSBzdHJlYW0ub3BlbkZvcldyaXRlKGNhcHR1cmVkUGF0
aC5zdHJpbmcoKSk7CisgICAgICAgIHJldHVybiBbc3VjY2Vzc10oRmlsZVN0cmVhbUNsaWVudCYg
Y2xpZW50KSB7CisgICAgICAgICAgICBjbGllbnQuZGlkT3BlbihzdWNjZXNzKTsKKyAgICAgICAg
fTsKKyAgICB9KTsKIH0KIAogdm9pZCBBc3luY0ZpbGVTdHJlYW06OmNsb3NlKCkKIHsKLSAgICBm
aWxlVGhyZWFkKCktPnBvc3RUYXNrKHt0aGlzLCBbdGhpc10gewotICAgICAgICBtX3N0cmVhbS0+
Y2xvc2UoKTsKLSAgICB9IH0pOworICAgIGF1dG8mIGludGVybmFscyA9ICptX2ludGVybmFsczsK
KyAgICBjYWxsT25GaWxlVGhyZWFkKFsmaW50ZXJuYWxzXSB7CisgICAgICAgIGludGVybmFscy5z
dHJlYW0uY2xvc2UoKTsKKyAgICB9KTsKIH0KIAogdm9pZCBBc3luY0ZpbGVTdHJlYW06OnJlYWQo
Y2hhciogYnVmZmVyLCBpbnQgbGVuZ3RoKQogewotICAgIGZpbGVUaHJlYWQoKS0+cG9zdFRhc2so
eyB0aGlzLCBbdGhpcywgYnVmZmVyLCBsZW5ndGhdIHsKLSAgICAgICAgaW50IGJ5dGVzUmVhZCA9
IG1fc3RyZWFtLT5yZWFkKGJ1ZmZlciwgbGVuZ3RoKTsKLSAgICAgICAgY2FsbE9uTWFpblRocmVh
ZChbdGhpcywgYnl0ZXNSZWFkXSB7Ci0gICAgICAgICAgICBpZiAoY2xpZW50KCkpCi0gICAgICAg
ICAgICAgICAgY2xpZW50KCktPmRpZFJlYWQoYnl0ZXNSZWFkKTsKLSAgICAgICAgfSk7Ci0gICAg
fSB9KTsKKyAgICBwZXJmb3JtKFtidWZmZXIsIGxlbmd0aF0oRmlsZVN0cmVhbSYgc3RyZWFtKSB7
CisgICAgICAgIGludCBieXRlc1JlYWQgPSBzdHJlYW0ucmVhZChidWZmZXIsIGxlbmd0aCk7Cisg
ICAgICAgIHJldHVybiBbYnl0ZXNSZWFkXShGaWxlU3RyZWFtQ2xpZW50JiBjbGllbnQpIHsKKyAg
ICAgICAgICAgIGNsaWVudC5kaWRSZWFkKGJ5dGVzUmVhZCk7CisgICAgICAgIH07CisgICAgfSk7
CiB9CiAKIHZvaWQgQXN5bmNGaWxlU3RyZWFtOjp3cml0ZShjb25zdCBVUkwmIGJsb2JVUkwsIGxv
bmcgbG9uZyBwb3NpdGlvbiwgaW50IGxlbmd0aCkKIHsKLSAgICBVUkwgYmxvYlVSTENvcHkgPSBi
bG9iVVJMLmNvcHkoKTsKLSAgICBmaWxlVGhyZWFkKCktPnBvc3RUYXNrKHsgdGhpcywgW3RoaXMs
IGJsb2JVUkxDb3B5LCBwb3NpdGlvbiwgbGVuZ3RoXSB7Ci0gICAgICAgIGludCBieXRlc1dyaXR0
ZW4gPSBtX3N0cmVhbS0+d3JpdGUoYmxvYlVSTENvcHksIHBvc2l0aW9uLCBsZW5ndGgpOwotICAg
ICAgICBjYWxsT25NYWluVGhyZWFkKFt0aGlzLCBieXRlc1dyaXR0ZW5dIHsKLSAgICAgICAgICAg
IGlmIChjbGllbnQoKSkKLSAgICAgICAgICAgICAgICBjbGllbnQoKS0+ZGlkV3JpdGUoYnl0ZXNX
cml0dGVuKTsKLSAgICAgICAgfSk7Ci0gICAgfSB9KTsKKyAgICAvLyBGSVhNRTogV291bGQgYmUg
bW9yZSBlbGVnYW50IHRvIGhhdmUgYSBVUkxDYXB0dXJlIGZvciBjYXNlcyBsaWtlIHRoaXMgdG8g
YXZvaWQgcmUtcGFyc2luZyB0aGUgVVJMLgorICAgIFN0cmluZ0NhcHR1cmUgY2FwdHVyZWRVUkwo
YmxvYlVSTC5zdHJpbmcoKSk7CisgICAgcGVyZm9ybShbY2FwdHVyZWRVUkwsIHBvc2l0aW9uLCBs
ZW5ndGhdKEZpbGVTdHJlYW0mIHN0cmVhbSkgeworICAgICAgICBpbnQgYnl0ZXNXcml0dGVuID0g
c3RyZWFtLndyaXRlKFVSTChQYXJzZWRVUkxTdHJpbmcsIGNhcHR1cmVkVVJMLnN0cmluZygpKSwg
cG9zaXRpb24sIGxlbmd0aCk7CisgICAgICAgIHJldHVybiBbYnl0ZXNXcml0dGVuXShGaWxlU3Ry
ZWFtQ2xpZW50JiBjbGllbnQpIHsKKyAgICAgICAgICAgIGNsaWVudC5kaWRXcml0ZShieXRlc1dy
aXR0ZW4pOworICAgICAgICB9OworICAgIH0pOwogfQogCiB2b2lkIEFzeW5jRmlsZVN0cmVhbTo6
dHJ1bmNhdGUobG9uZyBsb25nIHBvc2l0aW9uKQogewotICAgIGZpbGVUaHJlYWQoKS0+cG9zdFRh
c2soeyB0aGlzLCBbdGhpcywgcG9zaXRpb25dIHsKLSAgICAgICAgYm9vbCBzdWNjZXNzID0gbV9z
dHJlYW0tPnRydW5jYXRlKHBvc2l0aW9uKTsKLSAgICAgICAgY2FsbE9uTWFpblRocmVhZChbdGhp
cywgc3VjY2Vzc10gewotICAgICAgICAgICAgaWYgKGNsaWVudCgpKQotICAgICAgICAgICAgICAg
IGNsaWVudCgpLT5kaWRUcnVuY2F0ZShzdWNjZXNzKTsKLSAgICAgICAgfSk7Ci0gICAgfSB9KTsK
KyAgICBwZXJmb3JtKFtwb3NpdGlvbl0oRmlsZVN0cmVhbSYgc3RyZWFtKSB7CisgICAgICAgIGJv
b2wgc3VjY2VzcyA9IHN0cmVhbS50cnVuY2F0ZShwb3NpdGlvbik7CisgICAgICAgIHJldHVybiBb
c3VjY2Vzc10oRmlsZVN0cmVhbUNsaWVudCYgY2xpZW50KSB7CisgICAgICAgICAgICBjbGllbnQu
ZGlkVHJ1bmNhdGUoc3VjY2Vzcyk7CisgICAgICAgIH07CisgICAgfSk7CiB9CiAKIH0gLy8gbmFt
ZXNwYWNlIFdlYkNvcmUKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL2ZpbGVhcGkvQXN5bmNG
aWxlU3RyZWFtLmggYi9Tb3VyY2UvV2ViQ29yZS9maWxlYXBpL0FzeW5jRmlsZVN0cmVhbS5oCmlu
ZGV4IGI2MGJjNjA3MTU1NTI2ZjgzNmE4MDIwMGE5OGUwMDcwY2VjY2VlMjMuLjQyOGY3MzBlZTQ3
NmNlYmJiNDc5MWRiN2Y5ZTU5NWVlMjk3MGJlYzcgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3Jl
L2ZpbGVhcGkvQXN5bmNGaWxlU3RyZWFtLmgKKysrIGIvU291cmNlL1dlYkNvcmUvZmlsZWFwaS9B
c3luY0ZpbGVTdHJlYW0uaApAQCAtMSw2ICsxLDYgQEAKIC8qCi0gKiBDb3B5cmlnaHQgKEMpIDIw
MTAgR29vZ2xlIEluYy4gIEFsbCByaWdodHMgcmVzZXJ2ZWQuCi0gKiBDb3B5cmlnaHQgKEMpIDIw
MTAsIDIwMTIgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICogQ29weXJpZ2h0IChD
KSAyMDEwIEdvb2dsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKiBDb3B5cmlnaHQgKEMp
IDIwMTAsIDIwMTIsIDIwMTQgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgogICoKICAq
IFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGgg
b3Igd2l0aG91dAogICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQg
dGhlIGZvbGxvd2luZyBjb25kaXRpb25zIGFyZQpAQCAtMzIsOSArMzIsOCBAQAogI2lmbmRlZiBB
c3luY0ZpbGVTdHJlYW1faAogI2RlZmluZSBBc3luY0ZpbGVTdHJlYW1faAogCisjaW5jbHVkZSA8
ZnVuY3Rpb25hbD4KICNpbmNsdWRlIDx3dGYvRm9yd2FyZC5oPgotI2luY2x1ZGUgPHd0Zi9SZWZD
b3VudGVkLmg+Ci0jaW5jbHVkZSA8d3RmL1JlZlB0ci5oPgogCiBuYW1lc3BhY2UgV2ViQ29yZSB7
CiAKQEAgLTQyLDkgKzQxLDkgQEAgY2xhc3MgRmlsZVN0cmVhbUNsaWVudDsKIGNsYXNzIEZpbGVT
dHJlYW07CiBjbGFzcyBVUkw7CiAKLWNsYXNzIEFzeW5jRmlsZVN0cmVhbSA6IHB1YmxpYyBSZWZD
b3VudGVkPEFzeW5jRmlsZVN0cmVhbT4geworY2xhc3MgQXN5bmNGaWxlU3RyZWFtIHsKIHB1Ymxp
YzoKLSAgICBzdGF0aWMgUGFzc1JlZlB0cjxBc3luY0ZpbGVTdHJlYW0+IGNyZWF0ZShGaWxlU3Ry
ZWFtQ2xpZW50Kik7CisgICAgZXhwbGljaXQgQXN5bmNGaWxlU3RyZWFtKEZpbGVTdHJlYW1DbGll
bnQmKTsKICAgICB+QXN5bmNGaWxlU3RyZWFtKCk7CiAKICAgICB2b2lkIGdldFNpemUoY29uc3Qg
U3RyaW5nJiBwYXRoLCBkb3VibGUgZXhwZWN0ZWRNb2RpZmljYXRpb25UaW1lKTsKQEAgLTU1LDE4
ICs1NCwxMiBAQCBwdWJsaWM6CiAgICAgdm9pZCB3cml0ZShjb25zdCBVUkwmIGJsb2JVUkwsIGxv
bmcgbG9uZyBwb3NpdGlvbiwgaW50IGxlbmd0aCk7CiAgICAgdm9pZCB0cnVuY2F0ZShsb25nIGxv
bmcgcG9zaXRpb24pOwogCi0gICAgLy8gU3RvcHMgdGhlIHByb3h5IGFuZCBzY2hlZHVsZXMgaXQg
dG8gYmUgZGVzdHJ1Y3RlZC4gQWxsIHRoZSBwZW5kaW5nIHRhc2tzIHdpbGwgYmUgYWJvcnRlZCBh
bmQgdGhlIGZpbGUgc3RyZWFtIHdpbGwgYmUgY2xvc2VkLgotICAgIC8vIE5vdGU6IHRoZSBjYWxs
ZXIgc2hvdWxkIGRlcmVmIHRoZSBpbnN0YW5jZSBpbW1lZGlhdGVseSBhZnRlciBjYWxsaW5nIHN0
b3AoKS4KLSAgICB2b2lkIHN0b3AoKTsKLQotICAgIEZpbGVTdHJlYW1DbGllbnQqIGNsaWVudCgp
IGNvbnN0IHsgcmV0dXJuIG1fY2xpZW50OyB9Ci0gICAgdm9pZCBzZXRDbGllbnQoRmlsZVN0cmVh
bUNsaWVudCogY2xpZW50KSB7IG1fY2xpZW50ID0gY2xpZW50OyB9Ci0KIHByaXZhdGU6Ci0gICAg
QXN5bmNGaWxlU3RyZWFtKEZpbGVTdHJlYW1DbGllbnQqKTsKKyAgICB2b2lkIHN0YXJ0KCk7Cisg
ICAgdm9pZCBwZXJmb3JtKHN0ZDo6ZnVuY3Rpb248c3RkOjpmdW5jdGlvbjx2b2lkKEZpbGVTdHJl
YW1DbGllbnQmKT4oRmlsZVN0cmVhbSYpPik7CiAKLSAgICBSZWZQdHI8RmlsZVN0cmVhbT4gbV9z
dHJlYW07Ci0gICAgRmlsZVN0cmVhbUNsaWVudCogbV9jbGllbnQ7CisgICAgc3RydWN0IEludGVy
bmFsczsKKyAgICBzdGQ6OnVuaXF1ZV9wdHI8SW50ZXJuYWxzPiBtX2ludGVybmFsczsKIH07CiAK
IH0gLy8gbmFtZXNwYWNlIFdlYkNvcmUKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL2ZpbGVh
cGkvRmlsZVRocmVhZC5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9maWxlYXBpL0ZpbGVUaHJlYWQuY3Bw
CmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAzNGVhNWQ3ZTExNDBmZDRlNDVjYjcwMmVm
ZmY0NjYzNDQ5ODU5YjdhLi4wMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL2ZpbGVhcGkvRmlsZVRocmVhZC5jcHAKKysrIC9kZXYvbnVs
bApAQCAtMSwxMTMgKzAsMCBAQAotLyoKLSAqIENvcHlyaWdodCAoQykgMjAxMCBHb29nbGUgSW5j
LiAgQWxsIHJpZ2h0cyByZXNlcnZlZC4KLSAqCi0gKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGlu
IHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKLSAqIG1vZGlmaWNhdGlv
biwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucyBh
cmUKLSAqIG1ldDoKLSAqCi0gKiAgICAgKiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUg
bXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAotICogbm90aWNlLCB0aGlzIGxpc3Qgb2Yg
Y29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgotICogICAgICogUmVkaXN0
cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZQotICogY29w
eXJpZ2h0IG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcg
ZGlzY2xhaW1lcgotICogaW4gdGhlIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFs
cyBwcm92aWRlZCB3aXRoIHRoZQotICogZGlzdHJpYnV0aW9uLgotICogICAgICogTmVpdGhlciB0
aGUgbmFtZSBvZiBHb29nbGUgSW5jLiBub3IgdGhlIG5hbWVzIG9mIGl0cwotICogY29udHJpYnV0
b3JzIG1heSBiZSB1c2VkIHRvIGVuZG9yc2Ugb3IgcHJvbW90ZSBwcm9kdWN0cyBkZXJpdmVkIGZy
b20KLSAqIHRoaXMgc29mdHdhcmUgd2l0aG91dCBzcGVjaWZpYyBwcmlvciB3cml0dGVuIHBlcm1p
c3Npb24uCi0gKgotICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBUSEUgQ09QWVJJR0hU
IEhPTERFUlMgQU5EIENPTlRSSUJVVE9SUwotICogIkFTIElTIiBBTkQgQU5ZIEVYUFJFU1MgT1Ig
SU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QKLSAqIExJTUlURUQgVE8sIFRI
RSBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUgot
ICogQSBQQVJUSUNVTEFSIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuIElOIE5PIEVWRU5UIFNIQUxM
IFRIRSBDT1BZUklHSFQKLSAqIE9XTkVSIE9SIENPTlRSSUJVVE9SUyBCRSBMSUFCTEUgRk9SIEFO
WSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLAotICogU1BFQ0lBTCwgRVhFTVBMQVJZLCBP
UiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVAotICogTElNSVRFRCBU
TywgUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBV
U0UsCi0gKiBEQVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJT04pIEhPV0VW
RVIgQ0FVU0VEIEFORCBPTiBBTlkKLSAqIFRIRU9SWSBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4g
Q09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQKLSAqIChJTkNMVURJTkcgTkVHTElH
RU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRQotICog
T0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRiBT
VUNIIERBTUFHRS4KLSAqLwotCi0jaW5jbHVkZSAiY29uZmlnLmgiCi0KLSNpbmNsdWRlICJGaWxl
VGhyZWFkLmgiCi0KLSNpbmNsdWRlICJMb2dnaW5nLmgiCi0jaW5jbHVkZSA8d3RmL0F1dG9kcmFp
bmVkUG9vbC5oPgotCi1uYW1lc3BhY2UgV2ViQ29yZSB7Ci0KLUZpbGVUaHJlYWQ6OkZpbGVUaHJl
YWQoKQotICAgIDogbV90aHJlYWRJRCgwKQotewotICAgIG1fc2VsZlJlZiA9IHRoaXM7Ci19Ci0K
LUZpbGVUaHJlYWQ6On5GaWxlVGhyZWFkKCkKLXsKLSAgICBBU1NFUlQobV9xdWV1ZS5raWxsZWQo
KSk7Ci19Ci0KLWJvb2wgRmlsZVRocmVhZDo6c3RhcnQoKQotewotICAgIE11dGV4TG9ja2VyIGxv
Y2sobV90aHJlYWRDcmVhdGlvbk11dGV4KTsKLSAgICBpZiAobV90aHJlYWRJRCkKLSAgICAgICAg
cmV0dXJuIHRydWU7Ci0gICAgbV90aHJlYWRJRCA9IGNyZWF0ZVRocmVhZChGaWxlVGhyZWFkOjpm
aWxlVGhyZWFkU3RhcnQsIHRoaXMsICJXZWJDb3JlOiBGaWxlIik7Ci0gICAgcmV0dXJuIG1fdGhy
ZWFkSUQ7Ci19Ci0KLXZvaWQgRmlsZVRocmVhZDo6c3RvcCgpCi17Ci0gICAgbV9xdWV1ZS5raWxs
KCk7Ci19Ci0KLXZvaWQgRmlsZVRocmVhZDo6cG9zdFRhc2soVGFzayB0YXNrKQotewotICAgIG1f
cXVldWUuYXBwZW5kKHN0ZDo6bWFrZV91bmlxdWU8RmlsZVRocmVhZDo6VGFzaz4oV1RGOjptb3Zl
KHRhc2spKSk7Ci19Ci0KLWNsYXNzIFNhbWVJbnN0YW5jZVByZWRpY2F0ZSB7Ci1wdWJsaWM6Ci0g
ICAgU2FtZUluc3RhbmNlUHJlZGljYXRlKGNvbnN0IHZvaWQqIGluc3RhbmNlKSA6IG1faW5zdGFu
Y2UoaW5zdGFuY2UpIHsgfQotICAgIGJvb2wgb3BlcmF0b3IoKShGaWxlVGhyZWFkOjpUYXNrJiB0
YXNrKSBjb25zdCB7IHJldHVybiB0YXNrLmluc3RhbmNlKCkgPT0gbV9pbnN0YW5jZTsgfQotcHJp
dmF0ZToKLSAgICBjb25zdCB2b2lkKiBtX2luc3RhbmNlOwotfTsKLQotdm9pZCBGaWxlVGhyZWFk
Ojp1bnNjaGVkdWxlVGFza3MoY29uc3Qgdm9pZCogaW5zdGFuY2UpCi17Ci0gICAgU2FtZUluc3Rh
bmNlUHJlZGljYXRlIHByZWRpY2F0ZShpbnN0YW5jZSk7Ci0gICAgbV9xdWV1ZS5yZW1vdmVJZihw
cmVkaWNhdGUpOwotfQotCi12b2lkIEZpbGVUaHJlYWQ6OmZpbGVUaHJlYWRTdGFydCh2b2lkKiBh
cmcpCi17Ci0gICAgRmlsZVRocmVhZCogZmlsZVRocmVhZCA9IHN0YXRpY19jYXN0PEZpbGVUaHJl
YWQqPihhcmcpOwotICAgIGZpbGVUaHJlYWQtPnJ1bkxvb3AoKTsKLX0KLQotdm9pZCBGaWxlVGhy
ZWFkOjpydW5Mb29wKCkKLXsKLSAgICB7Ci0gICAgICAgIC8vIFdhaXQgZm9yIEZpbGVUaHJlYWQ6
OnN0YXJ0KCkgdG8gY29tcGxldGUgdG8gaGF2ZSBtX3RocmVhZElECi0gICAgICAgIC8vIGVzdGFi
bGlzaGVkIGJlZm9yZSBzdGFydGluZyB0aGUgbWFpbiBsb29wLgotICAgICAgICBNdXRleExvY2tl
ciBsb2NrKG1fdGhyZWFkQ3JlYXRpb25NdXRleCk7Ci0gICAgICAgIExPRyhGaWxlQVBJLCAiU3Rh
cnRlZCBGaWxlVGhyZWFkICVwIiwgdGhpcyk7Ci0gICAgfQotCi0gICAgd2hpbGUgKGF1dG8gdGFz
ayA9IG1fcXVldWUud2FpdEZvck1lc3NhZ2UoKSkgewotICAgICAgICBBdXRvZHJhaW5lZFBvb2wg
cG9vbDsKLQotICAgICAgICB0YXNrLT5wZXJmb3JtVGFzaygpOwotICAgIH0KLQotICAgIExPRyhG
aWxlQVBJLCAiQWJvdXQgdG8gZGV0YWNoIHRocmVhZCAlaSBhbmQgY2xlYXIgdGhlIHJlZiB0byBG
aWxlVGhyZWFkICVwLCB3aGljaCBjdXJyZW50bHkgaGFzICVpIHJlZihzKSIsIG1fdGhyZWFkSUQs
IHRoaXMsIHJlZkNvdW50KCkpOwotCi0gICAgZGV0YWNoVGhyZWFkKG1fdGhyZWFkSUQpOwotCi0g
ICAgLy8gQ2xlYXIgdGhlIHNlbGYgcmVmcHRyLCBwb3NzaWJseSByZXN1bHRpbmcgaW4gZGVsZXRp
b24KLSAgICBtX3NlbGZSZWYgPSAwOwotfQotCi19IC8vIG5hbWVzcGFjZSBXZWJDb3JlCmRpZmYg
LS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9maWxlYXBpL0ZpbGVUaHJlYWQuaCBiL1NvdXJjZS9XZWJD
b3JlL2ZpbGVhcGkvRmlsZVRocmVhZC5oCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCA5
ZGUyZmVkYmYxODM4MjEyMzQ3ZGZhYTkyMGQ1YTFlNzVhYmU3NTg0Li4wMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwCi0tLSBhL1NvdXJjZS9XZWJDb3JlL2ZpbGVhcGkvRmls
ZVRocmVhZC5oCisrKyAvZGV2L251bGwKQEAgLTEsMTAxICswLDAgQEAKLS8qCi0gKiBDb3B5cmln
aHQgKEMpIDIwMTAgR29vZ2xlIEluYy4gIEFsbCByaWdodHMgcmVzZXJ2ZWQuCi0gKgotICogUmVk
aXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3
aXRob3V0Ci0gKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUg
Zm9sbG93aW5nIGNvbmRpdGlvbnMgYXJlCi0gKiBtZXQ6Ci0gKgotICogICAgICogUmVkaXN0cmli
dXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKLSAq
IG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xh
aW1lci4KLSAqICAgICAqIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJv
ZHVjZSB0aGUgYWJvdmUKLSAqIGNvcHlyaWdodCBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRp
b25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIKLSAqIGluIHRoZSBkb2N1bWVudGF0aW9u
IGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUKLSAqIGRpc3RyaWJ1dGlv
bi4KLSAqICAgICAqIE5laXRoZXIgdGhlIG5hbWUgb2YgR29vZ2xlIEluYy4gbm9yIHRoZSBuYW1l
cyBvZiBpdHMKLSAqIGNvbnRyaWJ1dG9ycyBtYXkgYmUgdXNlZCB0byBlbmRvcnNlIG9yIHByb21v
dGUgcHJvZHVjdHMgZGVyaXZlZCBmcm9tCi0gKiB0aGlzIHNvZnR3YXJlIHdpdGhvdXQgc3BlY2lm
aWMgcHJpb3Igd3JpdHRlbiBwZXJtaXNzaW9uLgotICoKLSAqIFRISVMgU09GVFdBUkUgSVMgUFJP
VklERUQgQlkgVEhFIENPUFlSSUdIVCBIT0xERVJTIEFORCBDT05UUklCVVRPUlMKLSAqICJBUyBJ
UyIgQU5EIEFOWSBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQg
Tk9UCi0gKiBMSU1JVEVEIFRPLCBUSEUgSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJ
TElUWSBBTkQgRklUTkVTUyBGT1IKLSAqIEEgUEFSVElDVUxBUiBQVVJQT1NFIEFSRSBESVNDTEFJ
TUVELiBJTiBOTyBFVkVOVCBTSEFMTCBUSEUgQ09QWVJJR0hUCi0gKiBPV05FUiBPUiBDT05UUklC
VVRPUlMgQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwKLSAq
IFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcs
IEJVVCBOT1QKLSAqIExJTUlURUQgVE8sIFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMg
T1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLAotICogREFUQSwgT1IgUFJPRklUUzsgT1IgQlVTSU5F
U1MgSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZCi0gKiBUSEVPUlkgT0Yg
TElBQklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JU
Ci0gKiAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklTSU5HIElOIEFOWSBX
QVkgT1VUIE9GIFRIRSBVU0UKLSAqIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBP
RiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCi0gKi8KLQotI2lmbmRlZiBGaWxlVGhy
ZWFkX2gKLSNkZWZpbmUgRmlsZVRocmVhZF9oCi0KLSNpbmNsdWRlIDxmdW5jdGlvbmFsPgotI2lu
Y2x1ZGUgPHd0Zi9NZXNzYWdlUXVldWUuaD4KLSNpbmNsdWRlIDx3dGYvUGFzc1JlZlB0ci5oPgot
I2luY2x1ZGUgPHd0Zi9UaHJlYWRpbmcuaD4KLQotbmFtZXNwYWNlIFdlYkNvcmUgewotCi1jbGFz
cyBGaWxlU3RyZWFtOwotCi1jbGFzcyBGaWxlVGhyZWFkIDogcHVibGljIFRocmVhZFNhZmVSZWZD
b3VudGVkPEZpbGVUaHJlYWQ+IHsKLXB1YmxpYzoKLSAgICBzdGF0aWMgUGFzc1JlZlB0cjxGaWxl
VGhyZWFkPiBjcmVhdGUoKQotICAgIHsKLSAgICAgICAgcmV0dXJuIGFkb3B0UmVmKG5ldyBGaWxl
VGhyZWFkKCkpOwotICAgIH0KLQotICAgIH5GaWxlVGhyZWFkKCk7Ci0KLSAgICBib29sIHN0YXJ0
KCk7Ci0gICAgdm9pZCBzdG9wKCk7Ci0KLSAgICBjbGFzcyBUYXNrIHsKLSAgICAgICAgV1RGX01B
S0VfTk9OQ09QWUFCTEUoVGFzayk7Ci0gICAgcHVibGljOgotICAgICAgICB0ZW1wbGF0ZTx0eXBl
bmFtZSBULCB0eXBlbmFtZSBVLCB0eXBlbmFtZSA9IHR5cGVuYW1lIHN0ZDo6ZW5hYmxlX2lmPCFz
dGQ6OmlzX2Jhc2Vfb2Y8VGFzaywgVT46OnZhbHVlICYmIHN0ZDo6aXNfY29udmVydGlibGU8VSwg
c3RkOjpmdW5jdGlvbjx2b2lkICgpPj46OnZhbHVlPjo6dHlwZT4KLSAgICAgICAgVGFzayhUKiBp
bnN0YW5jZSwgVSBtZXRob2QpCi0gICAgICAgICAgICA6IG1fdGFzayhXVEY6Om1vdmUobWV0aG9k
KSkKLSAgICAgICAgICAgICwgbV9pbnN0YW5jZShpbnN0YW5jZSkKLSAgICAgICAgewotICAgICAg
ICB9Ci0KLSAgICAgICAgVGFzayhUYXNrJiYgb3RoZXIpCi0gICAgICAgICAgICA6IG1fdGFzayhX
VEY6Om1vdmUob3RoZXIubV90YXNrKSkKLSAgICAgICAgICAgICwgbV9pbnN0YW5jZShvdGhlci5t
X2luc3RhbmNlKQotICAgICAgICB7Ci0gICAgICAgIH0KLQotICAgICAgICB2b2lkIHBlcmZvcm1U
YXNrKCkKLSAgICAgICAgewotICAgICAgICAgICAgbV90YXNrKCk7Ci0gICAgICAgIH0KLSAgICAg
ICAgdm9pZCogaW5zdGFuY2UoKSBjb25zdCB7IHJldHVybiBtX2luc3RhbmNlOyB9Ci0KLSAgICBw
cml2YXRlOgotICAgICAgICBzdGQ6OmZ1bmN0aW9uPHZvaWQgKCk+IG1fdGFzazsKLSAgICAgICAg
dm9pZCogbV9pbnN0YW5jZTsKLSAgICB9OwotCi0gICAgdm9pZCBwb3N0VGFzayhUYXNrKTsKLQot
ICAgIHZvaWQgdW5zY2hlZHVsZVRhc2tzKGNvbnN0IHZvaWQqIGluc3RhbmNlKTsKLQotcHJpdmF0
ZToKLSAgICBGaWxlVGhyZWFkKCk7Ci0KLSAgICBzdGF0aWMgdm9pZCBmaWxlVGhyZWFkU3RhcnQo
dm9pZCopOwotICAgIHZvaWQgcnVuTG9vcCgpOwotCi0gICAgVGhyZWFkSWRlbnRpZmllciBtX3Ro
cmVhZElEOwotICAgIFJlZlB0cjxGaWxlVGhyZWFkPiBtX3NlbGZSZWY7Ci0gICAgTWVzc2FnZVF1
ZXVlPFRhc2s+IG1fcXVldWU7Ci0KLSAgICBNdXRleCBtX3RocmVhZENyZWF0aW9uTXV0ZXg7Ci19
OwotCi19IC8vIG5hbWVzcGFjZSBXZWJDb3JlCi0KLSNlbmRpZiAvLyBGaWxlVGhyZWFkX2gKZGlm
ZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL2xvYWRlci9SZXNvdXJjZUxvYWRlci5jcHAgYi9Tb3Vy
Y2UvV2ViQ29yZS9sb2FkZXIvUmVzb3VyY2VMb2FkZXIuY3BwCmluZGV4IDI1NzhlOTJjN2JjNWIx
NjVlNWVlNWYyMGMzMTk0OGNmZmQ0OWJjODguLmU1MjJkM2NhZmQ4NzA4NWNmOWE3N2I3MzExNmY3
MjI4ZTZjOWQ2ZTcgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL2xvYWRlci9SZXNvdXJjZUxv
YWRlci5jcHAKKysrIGIvU291cmNlL1dlYkNvcmUvbG9hZGVyL1Jlc291cmNlTG9hZGVyLmNwcApA
QCAtMzEsNyArMzEsNiBAQAogI2luY2x1ZGUgIlJlc291cmNlTG9hZGVyLmgiCiAKICNpbmNsdWRl
ICJBcHBsaWNhdGlvbkNhY2hlSG9zdC5oIgotI2luY2x1ZGUgIkFzeW5jRmlsZVN0cmVhbS5oIgog
I2luY2x1ZGUgIkF1dGhlbnRpY2F0aW9uQ2hhbGxlbmdlLmgiCiAjaW5jbHVkZSAiRG9jdW1lbnRM
b2FkZXIuaCIKICNpbmNsdWRlICJGcmFtZS5oIgpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUv
cGxhdGZvcm0vRmlsZVN0cmVhbS5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9GaWxlU3Ry
ZWFtLmNwcAppbmRleCBmZjVhZWUxYWZmNTY5NGE2YjhhZWM1MGM2MmYxZTNjYzBhNjUyZDc5Li4z
YWU0NTk4ZGZhYmRkZjQxNWJjMDdiNjk2ZGE4YzdjMGQ0ZWY5ODE5IDEwMDY0NAotLS0gYS9Tb3Vy
Y2UvV2ViQ29yZS9wbGF0Zm9ybS9GaWxlU3RyZWFtLmNwcAorKysgYi9Tb3VyY2UvV2ViQ29yZS9w
bGF0Zm9ybS9GaWxlU3RyZWFtLmNwcApAQCAtNDYsMTYgKzQ2LDYgQEAgRmlsZVN0cmVhbTo6Rmls
ZVN0cmVhbSgpCiAKIEZpbGVTdHJlYW06On5GaWxlU3RyZWFtKCkKIHsKLSAgICBBU1NFUlQoIWlz
SGFuZGxlVmFsaWQobV9oYW5kbGUpKTsKLX0KLQotLy8gRklYTUU6IFRvIGJlIHJlbW92ZWQgd2hl
biB3ZSBzd2l0Y2ggdG8gdXNpbmcgQmxvYkRhdGEuCi12b2lkIEZpbGVTdHJlYW06OnN0YXJ0KCkK
LXsKLX0KLQotdm9pZCBGaWxlU3RyZWFtOjpzdG9wKCkKLXsKICAgICBjbG9zZSgpOwogfQogCmRp
ZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9GaWxlU3RyZWFtLmggYi9Tb3VyY2Uv
V2ViQ29yZS9wbGF0Zm9ybS9GaWxlU3RyZWFtLmgKaW5kZXggYWU4YTg0ZTQxNjRhYzQ0NmI4OTg1
N2VhNTNlOGY4YzY4NTA1YjA2Ni4uM2NlOWU1NzY1OThiM2FlNTcwZmUwOGMzOGQwNDg4NzA1ZDU4
MWE4MCAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vRmlsZVN0cmVhbS5oCisr
KyBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL0ZpbGVTdHJlYW0uaApAQCAtMzIsMjkgKzMyLDE3
IEBACiAjZGVmaW5lIEZpbGVTdHJlYW1faAogCiAjaW5jbHVkZSAiRmlsZVN5c3RlbS5oIgotI2lu
Y2x1ZGUgPHd0Zi9Gb3J3YXJkLmg+Ci0jaW5jbHVkZSA8d3RmL1Bhc3NSZWZQdHIuaD4KLSNpbmNs
dWRlIDx3dGYvUmVmQ291bnRlZC5oPgogCiBuYW1lc3BhY2UgV2ViQ29yZSB7CiAKIGNsYXNzIFVS
TDsKIAogLy8gQWxsIG1ldGhvZHMgYXJlIHN5bmNocm9ub3VzLgotY2xhc3MgRmlsZVN0cmVhbSA6
IHB1YmxpYyBSZWZDb3VudGVkPEZpbGVTdHJlYW0+IHsKK2NsYXNzIEZpbGVTdHJlYW0gewogcHVi
bGljOgotICAgIHN0YXRpYyBQYXNzUmVmUHRyPEZpbGVTdHJlYW0+IGNyZWF0ZSgpCi0gICAgewot
ICAgICAgICByZXR1cm4gYWRvcHRSZWYobmV3IEZpbGVTdHJlYW0oKSk7Ci0gICAgfQorICAgIEZp
bGVTdHJlYW0oKTsKICAgICB+RmlsZVN0cmVhbSgpOwogCi0gICAgLy8gRklYTUU6IFRvIGJlIHJl
bW92ZWQgd2hlbiB3ZSBzd2l0Y2ggdG8gdXNpbmcgQmxvYkRhdGEuCi0gICAgdm9pZCBzdGFydCgp
OwotCi0gICAgLy8gQWJvcnRzIHRoZSBvcGVyYXRpb24uCi0gICAgdm9pZCBzdG9wKCk7Ci0KICAg
ICAvLyBHZXRzIHRoZSBzaXplIG9mIGEgZmlsZS4gQWxzbyB2YWxpZGF0ZXMgaWYgdGhlIGZpbGUg
aGFzIGJlZW4gY2hhbmdlZCBvciBub3QgaWYgdGhlIGV4cGVjdGVkIG1vZGlmaWNhdGlvbiB0aW1l
IGlzIHByb3ZpZGVkLCBpLmUuIG5vbi16ZXJvLgogICAgIC8vIFJldHVybnMgdG90YWwgbnVtYmVy
IG9mIGJ5dGVzIGlmIHN1Y2Nlc3NmdWwuIC0xIG90aGVyd2lzZS4KICAgICBsb25nIGxvbmcgZ2V0
U2l6ZShjb25zdCBTdHJpbmcmIHBhdGgsIGRvdWJsZSBleHBlY3RlZE1vZGlmaWNhdGlvblRpbWUp
OwpAQCAtODQsOCArNzIsNiBAQCBwdWJsaWM6CiAgICAgYm9vbCB0cnVuY2F0ZShsb25nIGxvbmcg
cG9zaXRpb24pOwogCiBwcml2YXRlOgotICAgIEZpbGVTdHJlYW0oKTsKLQogICAgIFBsYXRmb3Jt
RmlsZUhhbmRsZSBtX2hhbmRsZTsKICAgICBsb25nIGxvbmcgbV9ieXRlc1Byb2Nlc3NlZDsKICAg
ICBsb25nIGxvbmcgbV90b3RhbEJ5dGVzVG9SZWFkOwpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNv
cmUvcGxhdGZvcm0vRmlsZVN0cmVhbUNsaWVudC5oIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0v
RmlsZVN0cmVhbUNsaWVudC5oCmluZGV4IDE0ZmE1MDEzNTc1NmJlZGNkYmVkNjkyNGYxMWMyYTM0
MGNkODk1ZDEuLmNiNjNhNzI4MmU3NDAwOWRhY2UwN2VmYjBkODQ2YjdhZDViY2RiNDggMTAwNjQ0
Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL0ZpbGVTdHJlYW1DbGllbnQuaAorKysgYi9T
b3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9GaWxlU3RyZWFtQ2xpZW50LmgKQEAgLTEsNSArMSw1IEBA
CiAvKgotICogQ29weXJpZ2h0IChDKSAyMDEwIEdvb2dsZSBJbmMuICBBbGwgcmlnaHRzIHJlc2Vy
dmVkLgorICogQ29weXJpZ2h0IChDKSAyMDEwIEdvb2dsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2
ZWQuCiAgKgogICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBm
b3Jtcywgd2l0aCBvciB3aXRob3V0CiAgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJv
dmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMgYXJlCkBAIC0zNiwxNSArMzYsMTEg
QEAgbmFtZXNwYWNlIFdlYkNvcmUgewogY2xhc3MgRmlsZVN0cmVhbUNsaWVudCB7CiBwdWJsaWM6
CiAgICAgdmlydHVhbCB2b2lkIGRpZE9wZW4oYm9vbCkgeyB9IC8vIGZhbHNlIHNpZ25hbHMgZmFp
bHVyZS4KLSAgICB2aXJ0dWFsIHZvaWQgZGlkU3RvcCgpIHsgfQogICAgIHZpcnR1YWwgdm9pZCBk
aWRHZXRTaXplKGxvbmcgbG9uZykgeyB9IC8vIC0xIHNpZ25hbHMgZmFpbHVyZS4KICAgICB2aXJ0
dWFsIHZvaWQgZGlkUmVhZChpbnQpIHsgfSAvLyAtMSBzaWduYWxzIGZhaWx1cmUuCiAgICAgdmly
dHVhbCB2b2lkIGRpZFdyaXRlKGludCkgeyB9IC8vIC0xIHNpZ25hbHMgZmFpbHVyZS4KICAgICB2
aXJ0dWFsIHZvaWQgZGlkVHJ1bmNhdGUoYm9vbCkgeyB9IC8vIGZhbHNlIHNpZ25hbHMgZmFpbHVy
ZS4KIAotICAgIC8vIEZJWE1FOiBUbyBiZSByZW1vdmVkIHdoZW4gd2Ugc3dpdGNoIHRvIHVzaW5n
IEJsb2JEYXRhLgotICAgIHZpcnR1YWwgdm9pZCBkaWRTdGFydCgpIHsgfQotCiBwcm90ZWN0ZWQ6
CiAgICAgdmlydHVhbCB+RmlsZVN0cmVhbUNsaWVudCgpIHsgfQogfTsKZGlmZiAtLWdpdCBhL1Nv
dXJjZS9XZWJDb3JlL3BsYXRmb3JtL25ldHdvcmsvQmxvYlJlc291cmNlSGFuZGxlLmNwcCBiL1Nv
dXJjZS9XZWJDb3JlL3BsYXRmb3JtL25ldHdvcmsvQmxvYlJlc291cmNlSGFuZGxlLmNwcAppbmRl
eCBjNDk0ZTUyY2RhOGIyNzAwM2RjYTUzZjU1NTkyOWZiYzRjMmRmZmI5Li4wOGQ1ZjUxYTg4NTJl
MzFmMDdkMWRhYWY4OTI3NmIwNGYwYjA3MGQ1IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9w
bGF0Zm9ybS9uZXR3b3JrL0Jsb2JSZXNvdXJjZUhhbmRsZS5jcHAKKysrIGIvU291cmNlL1dlYkNv
cmUvcGxhdGZvcm0vbmV0d29yay9CbG9iUmVzb3VyY2VIYW5kbGUuY3BwCkBAIC0xNzEsMzAgKzE3
MSwxOCBAQCBCbG9iUmVzb3VyY2VIYW5kbGU6OkJsb2JSZXNvdXJjZUhhbmRsZShCbG9iRGF0YSog
YmxvYkRhdGEsIGNvbnN0IFJlc291cmNlUmVxdWVzdAogICAgICwgbV9maWxlT3BlbmVkKGZhbHNl
KQogewogICAgIGlmIChtX2FzeW5jKQotICAgICAgICBtX2FzeW5jU3RyZWFtID0gQXN5bmNGaWxl
U3RyZWFtOjpjcmVhdGUodGhpcyk7CisgICAgICAgIG1fYXN5bmNTdHJlYW0gPSBzdGQ6Om1ha2Vf
dW5pcXVlPEFzeW5jRmlsZVN0cmVhbT4oKnRoaXMpOwogICAgIGVsc2UKLSAgICAgICAgbV9zdHJl
YW0gPSBGaWxlU3RyZWFtOjpjcmVhdGUoKTsKKyAgICAgICAgbV9zdHJlYW0gPSBzdGQ6Om1ha2Vf
dW5pcXVlPEZpbGVTdHJlYW0+KCk7CiB9CiAKIEJsb2JSZXNvdXJjZUhhbmRsZTo6fkJsb2JSZXNv
dXJjZUhhbmRsZSgpCiB7Ci0gICAgaWYgKG1fYXN5bmMpIHsKLSAgICAgICAgaWYgKG1fYXN5bmNT
dHJlYW0pCi0gICAgICAgICAgICBtX2FzeW5jU3RyZWFtLT5zdG9wKCk7Ci0gICAgfSBlbHNlIHsK
LSAgICAgICAgaWYgKG1fc3RyZWFtKQotICAgICAgICAgICAgbV9zdHJlYW0tPnN0b3AoKTsKLSAg
ICB9CiB9CiAKIHZvaWQgQmxvYlJlc291cmNlSGFuZGxlOjpjYW5jZWwoKQogewotICAgIGlmICht
X2FzeW5jKSB7Ci0gICAgICAgIGlmIChtX2FzeW5jU3RyZWFtKSB7Ci0gICAgICAgICAgICBtX2Fz
eW5jU3RyZWFtLT5zdG9wKCk7Ci0gICAgICAgICAgICBtX2FzeW5jU3RyZWFtID0gMDsKLSAgICAg
ICAgfQotICAgIH0KKyAgICBtX2FzeW5jU3RyZWFtID0gbnVsbHB0cjsKIAogICAgIG1fYWJvcnRl
ZCA9IHRydWU7CiAKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL25ldHdvcmsv
QmxvYlJlc291cmNlSGFuZGxlLmggYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9uZXR3b3JrL0Js
b2JSZXNvdXJjZUhhbmRsZS5oCmluZGV4IDczMmZmNzkwNDUzOWQ0ZDhmODA0YzI3ZWEwNDY2ODM2
ZjBhNDliMWQuLjY3NmRiZmY5ODk3NmJiMDg3ZDViYmM1ZDBjY2FiN2Y0MTNiNDQxZmQgMTAwNjQ0
Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL25ldHdvcmsvQmxvYlJlc291cmNlSGFuZGxl
LmgKKysrIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vbmV0d29yay9CbG9iUmVzb3VyY2VIYW5k
bGUuaApAQCAtOTIsOCArOTIsOCBAQCBwcml2YXRlOgogCiAgICAgUmVmUHRyPEJsb2JEYXRhPiBt
X2Jsb2JEYXRhOwogICAgIGJvb2wgbV9hc3luYzsKLSAgICBSZWZQdHI8QXN5bmNGaWxlU3RyZWFt
PiBtX2FzeW5jU3RyZWFtOyAvLyBGb3IgYXN5bmNocm9ub3VzIGxvYWRpbmcuCi0gICAgUmVmUHRy
PEZpbGVTdHJlYW0+IG1fc3RyZWFtOyAvLyBGb3Igc3luY2hyb25vdXMgbG9hZGluZy4KKyAgICBz
dGQ6OnVuaXF1ZV9wdHI8QXN5bmNGaWxlU3RyZWFtPiBtX2FzeW5jU3RyZWFtOyAvLyBGb3IgYXN5
bmNocm9ub3VzIGxvYWRpbmcuCisgICAgc3RkOjp1bmlxdWVfcHRyPEZpbGVTdHJlYW0+IG1fc3Ry
ZWFtOyAvLyBGb3Igc3luY2hyb25vdXMgbG9hZGluZy4KICAgICBWZWN0b3I8Y2hhcj4gbV9idWZm
ZXI7CiAgICAgVmVjdG9yPGxvbmcgbG9uZz4gbV9pdGVtTGVuZ3RoTGlzdDsKICAgICBpbnQgbV9l
cnJvckNvZGU7CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9zdG9yYWdlL1N0b3JhZ2VUaHJl
YWQuaCBiL1NvdXJjZS9XZWJDb3JlL3N0b3JhZ2UvU3RvcmFnZVRocmVhZC5oCmluZGV4IDI2M2M3
OGU4MjYyZTljZmQ4NjVkZGQ1OTAxOTU0OTJmNWU3ODUzOWYuLmRmNTJhYzYxMjFjODQ2NmQ0ODZl
NGE0ZGM5ZWYzYTRlMjg4NzNmZTUgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL3N0b3JhZ2Uv
U3RvcmFnZVRocmVhZC5oCisrKyBiL1NvdXJjZS9XZWJDb3JlL3N0b3JhZ2UvU3RvcmFnZVRocmVh
ZC5oCkBAIC00Niw3ICs0Niw3IEBAIHB1YmxpYzoKICAgICBib29sIHN0YXJ0KCk7CiAgICAgdm9p
ZCB0ZXJtaW5hdGUoKTsKIAotICAgIHZvaWQgZGlzcGF0Y2goY29uc3Qgc3RkOjpmdW5jdGlvbjx2
b2lkICgpPiYpOworICAgIHZvaWQgZGlzcGF0Y2goY29uc3Qgc3RkOjpmdW5jdGlvbjx2b2lkKCk+
Jik7CiAKICAgICBzdGF0aWMgdm9pZCByZWxlYXNlRmFzdE1hbGxvY0ZyZWVNZW1vcnlJbkFsbFRo
cmVhZHMoKTsKIApAQCAtNTksNyArNTksNyBAQCBwcml2YXRlOgogICAgIHZvaWQgcGVyZm9ybVRl
cm1pbmF0ZSgpOwogCiAgICAgVGhyZWFkSWRlbnRpZmllciBtX3RocmVhZElEOwotICAgIE1lc3Nh
Z2VRdWV1ZTxzdGQ6OmZ1bmN0aW9uPHZvaWQgKCk+PiBtX3F1ZXVlOworICAgIE1lc3NhZ2VRdWV1
ZTxzdGQ6OmZ1bmN0aW9uPHZvaWQoKT4+IG1fcXVldWU7CiB9OwogCiB9IC8vIG5hbWVzcGFjZSBX
ZWJDb3JlCg==
</data>

          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>241235</attachid>
            <date>2014-11-08 13:55:24 -0800</date>
            <delta_ts>2014-11-08 14:28:55 -0800</delta_ts>
            <desc>Patch</desc>
            <filename>bug-138282-20141108135523.patch</filename>
            <type>text/plain</type>
            <size>50091</size>
            <attacher name="Darin Adler">darin</attacher>
            
              <data encoding="base64">U3VidmVyc2lvbiBSZXZpc2lvbjogMTc1NzgwCmRpZmYgLS1naXQgYS9Tb3VyY2UvV1RGL0NoYW5n
ZUxvZyBiL1NvdXJjZS9XVEYvQ2hhbmdlTG9nCmluZGV4IDVlNDVkMzc5ZDgxOWExNjRhYTUyZGZj
MGJjZWQ1ZWYwYWI1MWZjOTcuLmM4ZGJkODU2OTc1YzI3ZTU4YzQ5YmVhNjdlN2RlZTdiYzY4ODBm
MGYgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XVEYvQ2hhbmdlTG9nCisrKyBiL1NvdXJjZS9XVEYvQ2hh
bmdlTG9nCkBAIC0xLDMgKzEsMjMgQEAKKzIwMTQtMTEtMDggIERhcmluIEFkbGVyICA8ZGFyaW5A
YXBwbGUuY29tPgorCisgICAgICAgIFJlcGxhY2UgRmlsZVRocmVhZCBjbGFzcyB3aXRoIGEgc2lu
Z2xlIGZ1bmN0aW9uCisgICAgICAgIGh0dHBzOi8vYnVncy53ZWJraXQub3JnL3Nob3dfYnVnLmNn
aT9pZD0xMzgyODIKKworICAgICAgICBSZXZpZXdlZCBieSBBbGV4ZXkgUHJvc2t1cnlha292Lgor
CisgICAgICAgICogd3RmL01lc3NhZ2VRdWV1ZS5oOiBNYWRlIHF1ZXVlIHdvcmsgb24gYW55IHR5
cGUgYW5kIG5vdCByZXF1aXJlIHdyYXBwaW5nCisgICAgICAgIGV2ZXJ5dGhpbmcgaW4gYSB1bmlx
dWVfcHRyLgorCisgICAgICAgICogd3RmL1RocmVhZGluZy5jcHA6CisgICAgICAgIChXVEY6OnRo
cmVhZEVudHJ5UG9pbnQpOiBDaGFuZ2VkIHRvIHVzZSBhIHN0ZDo6ZnVuY3Rpb24gaW5zdGVhZCBv
ZiBhIGZ1bmN0aW9uIHBvaW50ZXIuCisgICAgICAgIChXVEY6OmNyZWF0ZVRocmVhZCk6IEFkZCBh
IHZlcnNpb24gdGhhdCB0YWtlcyBhIHN0ZDo6ZnVuY3Rpb24uIFJlaW1wbGVtZW50ZWQgdGhlCisg
ICAgICAgIG9sZCB2ZXJzaW9uIHVzaW5nIGxhbWJkYXMuIFJlbW92ZWQgdGhlIG9ic29sZXRlIHZl
cnNpb25zIHRoYXQgd2VyZSB0aGVyZSBqdXN0IHRvIHN1cHBvcnQKKyAgICAgICAgYmluYXJ5IGNv
bXBhdGliaWxpdHkgd2l0aCB2ZXJ5IG9sZCB2ZXJzaW9ucyBvZiBTYWZhcmkuCisKKyAgICAgICAg
KiB3dGYvVGhyZWFkaW5nLmg6IFJlbW92ZWQgYW4gaW5jb3JyZWN0IGxpY2Vuc2UgaGVhZGVyIHRo
YXQgY292ZXJzIGNvZGUgdGhhdCB3YXMgbG9uZyBhZ28KKyAgICAgICAgbW92ZWQgdG8gYSBkaWZm
ZXJlbnQgZmlsZS4gQ2hhbmdlZCBjcmVhdGVUaHJlYWQgdG8gdGFrZSBhIHN0ZDo6ZnVuY3Rpb24g
aW5zdGVhZCBvZiBhIGZ1bmN0aW9uCisgICAgICAgIHBvaW50ZXIgYW5kIGRhdGEgcG9pbnRlci4g
TW92ZWQgaW50ZXJuYWwgZnVuY3Rpb25zIGFmdGVyIHB1YmxpYyBmdW5jdGlvbnMuCisKIDIwMTQt
MTEtMDUgIENocmlzIER1bWV6ICA8Y2R1bWV6QGFwcGxlLmNvbT4KIAogICAgICAgICBBc3NlcnRp
b24gaGl0IERPTVRpbWVyOjp1cGRhdGVUaW1lckludGVydmFsSWZOZWNlc3NhcnkoKQpkaWZmIC0t
Z2l0IGEvU291cmNlL1dlYkNvcmUvQ2hhbmdlTG9nIGIvU291cmNlL1dlYkNvcmUvQ2hhbmdlTG9n
CmluZGV4IGE3N2M4NWNkOTdkZjQ1ZTBmZDA3OTM5MmQ5ZWIwZDgyNmJhZGI4M2UuLjIwZTBmODdl
M2Q0MjBmZmZiNjA2YzczMjdhMzAxNTM3NDRmZjFkODEgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJD
b3JlL0NoYW5nZUxvZworKysgYi9Tb3VyY2UvV2ViQ29yZS9DaGFuZ2VMb2cKQEAgLTEsMyArMSw3
NyBAQAorMjAxNC0xMS0wOCAgRGFyaW4gQWRsZXIgIDxkYXJpbkBhcHBsZS5jb20+CisKKyAgICAg
ICAgUmVwbGFjZSBGaWxlVGhyZWFkIGNsYXNzIHdpdGggYSBzaW5nbGUgZnVuY3Rpb24KKyAgICAg
ICAgaHR0cHM6Ly9idWdzLndlYmtpdC5vcmcvc2hvd19idWcuY2dpP2lkPTEzODI4MgorCisgICAg
ICAgIFJldmlld2VkIGJ5IEFsZXhleSBQcm9za3VyeWFrb3YuCisKKyAgICAgICAgKiBDTWFrZUxp
c3RzLnR4dDogUmVtb3ZlZCBGaWxlVGhyZWFkLmNwcC4KKworICAgICAgICAqIFdlYkNvcmUudmN4
cHJvai9XZWJDb3JlLnZjeHByb2o6IFJlbW92ZWQgRmlsZVRocmVhZC5jcHAvLmguCisgICAgICAg
ICogV2ViQ29yZS52Y3hwcm9qL1dlYkNvcmUudmN4cHJvai5maWx0ZXJzOiBEaXR0by4KKyAgICAg
ICAgKiBXZWJDb3JlLnhjb2RlcHJvai9wcm9qZWN0LnBieHByb2o6IERpdHRvLgorCisgICAgICAg
ICogYmluZGluZ3MvZ2VuZXJpYy9BY3RpdmVET01DYWxsYmFjay5jcHA6IFJlbW92ZWQgdW5uZWVk
ZWQgaW5jbHVkZXMuCisgICAgICAgICogZG9tL0FjdGl2ZURPTU9iamVjdC5jcHA6IERpdHRvLgor
CisgICAgICAgICogZmlsZWFwaS9Bc3luY0ZpbGVTdHJlYW0uY3BwOgorICAgICAgICAoV2ViQ29y
ZTo6Y2FsbE9uRmlsZVRocmVhZCk6IEFkZGVkLiBJbXBsZW1lbnRzIHRoZSBmaWxlIHRocmVhZC4K
KyAgICAgICAgKFdlYkNvcmU6OkFzeW5jRmlsZVN0cmVhbTo6QXN5bmNGaWxlU3RyZWFtKTogVGFr
ZSBhIHJlZmVyZW5jZSB0byB0aGUgY2xpZW50LgorICAgICAgICBNYWtlIG1faW50ZXJuYWxzLiBV
c2UgdGhlIGRlc3Ryb3llZCBmbGFnIGluc3RlYWQgb2YgdHJpY2tpZXIgdGVjaG5pcXVlcyB0bwor
ICAgICAgICBoYW5kbGUgc3RvcHBpbmcuIE9uY2UgdGhlIHN0cmVhbSBpcyBkZXN0cm95ZWQsIHRo
ZXJlIHdpbGwgYmUgbm8gZnVydGhlciBjYWxsYmFja3MuCisgICAgICAgIChXZWJDb3JlOjpBc3lu
Y0ZpbGVTdHJlYW06On5Bc3luY0ZpbGVTdHJlYW0pOiBBZGRlZCBhc3NlcnRpb25zIGFuZCBtZXJn
ZWQgaW4gdGhlCisgICAgICAgIHN0b3AgYmVoYXZpb3IgaGVyZS4gVGhpcyBjbGFzcyBubyBsb25n
ZXIgcmVxdWlyZXMgYW4gZXhwbGljaXQgc3RvcCBmdW5jdGlvbi4KKyAgICAgICAgKFdlYkNvcmU6
OkFzeW5jRmlsZVN0cmVhbTo6cGVyZm9ybSk6IEFkZGVkLiBIZWxwZXIgdXNlZCBmb3IgYWxsIHRo
ZSBvcGVyYXRpb25zCisgICAgICAgIGJlbG93LiBUYWtlcyBhIGZ1bmN0aW9uIHRoYXQgcGVyZm9y
bXMgYW4gb3BlcmF0aW9uIGFuZCB0aGVuIHJldHVybnMgYSBjbGllbnQKKyAgICAgICAgY2FsbGJh
Y2sgZnVuY3Rpb24uIFJlc3BlY3RzIHRoZSBtX3N0b3BwZWQgYm9vbGVhbiBvbiB0aGUgZmlsZSB0
aHJlYWQgKHNvIHdlCisgICAgICAgIGRvbid0IGRvIGV4dHJhIG9wZXJhdGlvbnMpIGFuZCBvbiB0
aGUgY2xpZW50IHRocmVhZCAoc28gd2UgYXJlIGd1YXJhbnRlZWQgbm90CisgICAgICAgIHRvIGdl
dCBhbnkgY2xpZW50IGNhbGxiYWNrcyBldmVuIGlmIHRoZSBmaWxlIHRocmVhZCB3YXMgcGFydHdh
eSB0aHJvdWdoIGFuCisgICAgICAgIG9wZXJhdGlvbikuCisgICAgICAgIChXZWJDb3JlOjpBc3lu
Y0ZpbGVTdHJlYW06OmdldFNpemUpOiBDaGFuZ2VkIHRvIHVzZSB0aGUgcGVyZm9ybSBmdW5jdGlv
bi4KKyAgICAgICAgKFdlYkNvcmU6OkFzeW5jRmlsZVN0cmVhbTo6b3BlbkZvclJlYWQpOiBEaXR0
by4gQWxzbyBmaXhlZCByZWZlcmVuY2UgY291bnQKKyAgICAgICAgdGhyZWFkIHNhZmV0eSBpc3N1
ZSBieSBjYXB0dXJpbmcgYSBTdHJpbmdDYXB0dXJlIHJhdGhlciB0aGFuIGEgU3RyaW5nLgorICAg
ICAgICAoV2ViQ29yZTo6QXN5bmNGaWxlU3RyZWFtOjpvcGVuRm9yV3JpdGUpOiBEaXR0by4KKyAg
ICAgICAgKFdlYkNvcmU6OkFzeW5jRmlsZVN0cmVhbTo6Y2xvc2UpOiBDaGFuZ2VkIHRvIHVzZSBj
YWxsT25GaWxlVGhyZWFkLgorICAgICAgICAoV2ViQ29yZTo6QXN5bmNGaWxlU3RyZWFtOjpyZWFk
KTogQ2hhbmdlZCB0byB1c2UgdGhlIHBlcmZvcm0gZnVuY3Rpb24uCisgICAgICAgIChXZWJDb3Jl
OjpBc3luY0ZpbGVTdHJlYW06OndyaXRlKTogRGl0dG8uIEFsc28gZml4ZWQgcmVmZXJlbmNlIGNv
dW50CisgICAgICAgIHRocmVhZCBzYWZldHkgaXNzdWUgYnkgY2FwdHVyaW5nIGEgU3RyaW5nQ2Fw
dHVyZSByYXRoZXIgdGhhbiBhIFVSTC4KKyAgICAgICAgKFdlYkNvcmU6OkFzeW5jRmlsZVN0cmVh
bTo6dHJ1bmNhdGUpOiBEaXR0by4KKworICAgICAgICAqIGZpbGVhcGkvQXN5bmNGaWxlU3RyZWFt
Lmg6IFJlbW92ZWQgdXNlIG9mIFJlZkNvdW50ZWQgc2luY2Ugd2Ugb25seSBuZWVkCisgICAgICAg
IHNpbmdsZSBvd25lcnNoaXAuIFJlbW92ZWQgdGhlIHN0b3AgZnVuY3Rpb24sIHNpbmNlIHdlIGNh
biBub3cgc3RvcCB3aGVuCisgICAgICAgIHRoZSBzdHJlYW0gaXMgZGVzdHJveWVkIHNpbmNlIHdl
IGhhdmUgc2luZ2xlIG93bmVyc2hpcC4gTWFkZSBhIG5ldyBJbnRlcm5hbHMKKyAgICAgICAgb2Jq
ZWN0IHRvIGhhbmRsZSBkZXN0cnVjdGlvbiB3aGlsZSBvcGVyYXRpb25zIGFyZSBzdGlsbCBnb2lu
ZyBvbiB0aGUgZmlsZSB0aHJlYWQuCisKKyAgICAgICAgKiBmaWxlYXBpL0ZpbGVUaHJlYWQuY3Bw
OiBSZW1vdmVkLgorICAgICAgICAqIGZpbGVhcGkvRmlsZVRocmVhZC5oOiBSZW1vdmVkLgorCisg
ICAgICAgICogbG9hZGVyL1Jlc291cmNlTG9hZGVyLmNwcDogUmVtb3ZlZCB1bm5lZWRlZCBpbmNs
dWRlLgorCisgICAgICAgICogcGxhdGZvcm0vRmlsZVN0cmVhbS5jcHA6CisgICAgICAgIChXZWJD
b3JlOjpGaWxlU3RyZWFtOjp+RmlsZVN0cmVhbSk6IE1lcmdlZCB0aGUgc3RvcCBmdW5jdGlvbiBp
biBoZXJlLgorCisgICAgICAgICogcGxhdGZvcm0vRmlsZVN0cmVhbS5oOiBSZW1vdmVkIHVzZSBv
ZiBSZWZDb3VudGVkIHNpbmNlIHdlIG9ubHkgbmVlZAorICAgICAgICBzaW5nbGUgb3duZXJzaGlw
LiBSZW1vdmVkIHRoZSBlbXB0eSBzdGFydCBmdW5jdGlvbi4gUmVtb3ZlZCB0aGUgc3RvcCBmdW5j
dGlvbiwKKyAgICAgICAgc2luY2Ugd2UgY2FuIG5vdyBzdG9wIHdoZW4gdGhlIHN0cmVhbSBpcyBk
ZXN0cm95ZWQgc2luY2Ugd2UgaGF2ZSBzaW5nbGUgb3duZXJzaGlwLgorCisgICAgICAgICogcGxh
dGZvcm0vRmlsZVN0cmVhbUNsaWVudC5oOiBSZW1vdmVkIHVubmVlZGVkIGRpZFN0YXJ0IGFuZCBk
aWRTdG9wLgorCisgICAgICAgICogcGxhdGZvcm0vbmV0d29yay9CbG9iUmVzb3VyY2VIYW5kbGUu
Y3BwOgorICAgICAgICAoV2ViQ29yZTo6QmxvYlJlc291cmNlSGFuZGxlOjpCbG9iUmVzb3VyY2VI
YW5kbGUpOiBVc2UgbWFrZV91bmlxdWUgdG8gbWFrZSB0aGUKKyAgICAgICAgc3RyZWFtIG9iamVj
dHMgaW5zdGVhZCBvZiBjdXN0b20gY3JlYXRlIGZ1bmN0aW9ucy4KKyAgICAgICAgKFdlYkNvcmU6
OkJsb2JSZXNvdXJjZUhhbmRsZTo6fkJsb2JSZXNvdXJjZUhhbmRsZSk6IFJlbW92ZWQgbm93LXVu
bmVlZGVkIGNvZGUKKyAgICAgICAgdG8gY2FsbCBzdG9wIGZ1bmN0aW9ucy4gRGVzdHJveWluZyB0
aGUgb2JqZWN0cyBub3cgdGFrZXMgY2FyZSBvZiB0aGUgdGhpcywgYW5kCisgICAgICAgIHRoYXQn
cyBkb25lIGJ5IHRoZSB1bmlxdWVfcHRycy4KKyAgICAgICAgKFdlYkNvcmU6OkJsb2JSZXNvdXJj
ZUhhbmRsZTo6Y2FuY2VsKTogUmVtb3ZlZCB0aGUgcmVzdCBvZiB0aGUgY29kZSB0byBzdG9wIHRo
ZQorICAgICAgICBtX2FzeW5jU3RyZWFtLCBrZWVwaW5nIG9ubHkgdGhlIGNvZGUgdGhhdCBzZXRz
IGl0IHRvIG51bGwuIFRoYXQgbm93IHN0b3BzIHRoZQorICAgICAgICBzdHJlYW0gYnkgZGVzdHJv
eWluZyBpdC4KKworICAgICAgICAqIHBsYXRmb3JtL25ldHdvcmsvQmxvYlJlc291cmNlSGFuZGxl
Lmg6IFVzZSBzdGQ6OnVuaXF1ZV9wdHIgcmF0aGVyIHRoYW4KKyAgICAgICAgUmVmUHRyIGZvciB0
aGUgZmlsZSBzdHJlYW0gb2JqZWN0cy4KKworICAgICAgICAqIHN0b3JhZ2UvU3RvcmFnZVRocmVh
ZC5oOiBUd2Vha2VkIGZvcm1hdHRpbmcgb2Ygc3RkOjpmdW5jdGlvbjx2b2lkKCk+IHRvCisgICAg
ICAgIG1hdGNoIHRoZSBmb3JtYXQgdXNlZCBlbHNld2hlcmUgaW4gV2ViS2l0LgorCiAyMDE0LTEx
LTA4ICBCZXRoIERha2luICA8YmRha2luQGFwcGxlLmNvbT4KIAogICAgICAgICBJbXBsZW1lbnQg
YWN0aW9uIG1lbnUgc3VwcG9ydCBmb3IgdmlkZW9zCmRpZmYgLS1naXQgYS9Tb3VyY2UvV1RGL3d0
Zi9UaHJlYWRpbmcuY3BwIGIvU291cmNlL1dURi93dGYvVGhyZWFkaW5nLmNwcAppbmRleCBjOGQ5
OTZiNWE4NWVkMDRlZDVhMzk5YWVlYWQxNDU5NjU0MzhlOTBkLi4xNzc2NTk4NzM3ZDhjYjFkNzNj
NTFmNTMzMzc1ODIwNjQ4ZTllZDFlIDEwMDY0NAotLS0gYS9Tb3VyY2UvV1RGL3d0Zi9UaHJlYWRp
bmcuY3BwCisrKyBiL1NvdXJjZS9XVEYvd3RmL1RocmVhZGluZy5jcHAKQEAgLTEsNSArMSw1IEBA
CiAvKgotICogQ29weXJpZ2h0IChDKSAyMDA4LCAyMDA5IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyBy
ZXNlcnZlZC4KKyAqIENvcHlyaWdodCAoQykgMjAwOCwgMjAwOSwgMjAxNCBBcHBsZSBJbmMuIEFs
bCByaWdodHMgcmVzZXJ2ZWQuCiAgKgogICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3Vy
Y2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CiAgKiBtb2RpZmljYXRpb24sIGFy
ZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKQEAgLTMz
LDIzICszMywxNCBAQCBuYW1lc3BhY2UgV1RGIHsKIHN0cnVjdCBOZXdUaHJlYWRDb250ZXh0IHsK
ICAgICBXVEZfTUFLRV9GQVNUX0FMTE9DQVRFRDsKIHB1YmxpYzoKLSAgICBOZXdUaHJlYWRDb250
ZXh0KFRocmVhZEZ1bmN0aW9uIGVudHJ5UG9pbnQsIHZvaWQqIGRhdGEsIGNvbnN0IGNoYXIqIG5h
bWUpCi0gICAgICAgIDogZW50cnlQb2ludChlbnRyeVBvaW50KQotICAgICAgICAsIGRhdGEoZGF0
YSkKLSAgICAgICAgLCBuYW1lKG5hbWUpCi0gICAgewotICAgIH0KLQotICAgIFRocmVhZEZ1bmN0
aW9uIGVudHJ5UG9pbnQ7Ci0gICAgdm9pZCogZGF0YTsKICAgICBjb25zdCBjaGFyKiBuYW1lOwot
CisgICAgc3RkOjpmdW5jdGlvbjx2b2lkKCk+IGVudHJ5UG9pbnQ7CiAgICAgTXV0ZXggY3JlYXRp
b25NdXRleDsKIH07CiAKIHN0YXRpYyB2b2lkIHRocmVhZEVudHJ5UG9pbnQodm9pZCogY29udGV4
dERhdGEpCiB7Ci0gICAgTmV3VGhyZWFkQ29udGV4dCogY29udGV4dCA9IHJlaW50ZXJwcmV0X2Nh
c3Q8TmV3VGhyZWFkQ29udGV4dCo+KGNvbnRleHREYXRhKTsKKyAgICBOZXdUaHJlYWRDb250ZXh0
KiBjb250ZXh0ID0gc3RhdGljX2Nhc3Q8TmV3VGhyZWFkQ29udGV4dCo+KGNvbnRleHREYXRhKTsK
IAogICAgIC8vIEJsb2NrIHVudGlsIG91ciBjcmVhdGluZyB0aHJlYWQgaGFzIGNvbXBsZXRlZCBh
bnkgZXh0cmEgc2V0dXAgd29yaywgaW5jbHVkaW5nCiAgICAgLy8gZXN0YWJsaXNoaW5nIFRocmVh
ZElkZW50aWZpZXIuCkBAIC01OSwxNSArNTAsMTUgQEAgc3RhdGljIHZvaWQgdGhyZWFkRW50cnlQ
b2ludCh2b2lkKiBjb250ZXh0RGF0YSkKIAogICAgIGluaXRpYWxpemVDdXJyZW50VGhyZWFkSW50
ZXJuYWwoY29udGV4dC0+bmFtZSk7CiAKLSAgICAvLyBHcmFiIHRoZSBpbmZvIHRoYXQgd2UgbmVl
ZCBvdXQgb2YgdGhlIGNvbnRleHQsIHRoZW4gZGVhbGxvY2F0ZSBpdC4KLSAgICBUaHJlYWRGdW5j
dGlvbiBlbnRyeVBvaW50ID0gY29udGV4dC0+ZW50cnlQb2ludDsKLSAgICB2b2lkKiBkYXRhID0g
Y29udGV4dC0+ZGF0YTsKKyAgICBhdXRvIGVudHJ5UG9pbnQgPSBXVEY6Om1vdmUoY29udGV4dC0+
ZW50cnlQb2ludCk7CisKKyAgICAvLyBEZWxldGUgdGhlIGNvbnRleHQgYmVmb3JlIHN0YXJ0aW5n
IHRoZSB0aHJlYWQuCiAgICAgZGVsZXRlIGNvbnRleHQ7CiAKLSAgICBlbnRyeVBvaW50KGRhdGEp
OworICAgIGVudHJ5UG9pbnQoKTsKIH0KIAotVGhyZWFkSWRlbnRpZmllciBjcmVhdGVUaHJlYWQo
VGhyZWFkRnVuY3Rpb24gZW50cnlQb2ludCwgdm9pZCogZGF0YSwgY29uc3QgY2hhciogbmFtZSkK
K1RocmVhZElkZW50aWZpZXIgY3JlYXRlVGhyZWFkKGNvbnN0IGNoYXIqIG5hbWUsIHN0ZDo6ZnVu
Y3Rpb248dm9pZCgpPiBlbnRyeVBvaW50KQogewogICAgIC8vIFZpc3VhbCBTdHVkaW8gaGFzIGEg
MzEtY2hhcmFjdGVyIGxpbWl0IG9uIHRocmVhZCBuYW1lcy4gTG9uZ2VyIG5hbWVzIHdpbGwKICAg
ICAvLyBiZSB0cnVuY2F0ZWQgc2lsZW50bHksIGJ1dCB3ZSdkIGxpa2UgY2FsbGVycyB0byBrbm93
IGFib3V0IHRoZSBsaW1pdC4KQEAgLTc2LDcgKzY3LDcgQEAgVGhyZWFkSWRlbnRpZmllciBjcmVh
dGVUaHJlYWQoVGhyZWFkRnVuY3Rpb24gZW50cnlQb2ludCwgdm9pZCogZGF0YSwgY29uc3QgY2hh
cioKICAgICAgICAgTE9HX0VSUk9SKCJUaHJlYWQgbmFtZSBcIiVzXCIgaXMgbG9uZ2VyIHRoYW4g
MzEgY2hhcmFjdGVycyBhbmQgd2lsbCBiZSB0cnVuY2F0ZWQgYnkgVmlzdWFsIFN0dWRpbyIsIG5h
bWUpOwogI2VuZGlmCiAKLSAgICBOZXdUaHJlYWRDb250ZXh0KiBjb250ZXh0ID0gbmV3IE5ld1Ro
cmVhZENvbnRleHQoZW50cnlQb2ludCwgZGF0YSwgbmFtZSk7CisgICAgTmV3VGhyZWFkQ29udGV4
dCogY29udGV4dCA9IG5ldyBOZXdUaHJlYWRDb250ZXh0IHsgbmFtZSwgV1RGOjptb3ZlKGVudHJ5
UG9pbnQpLCB7IH0gfTsKIAogICAgIC8vIFByZXZlbnQgdGhlIHRocmVhZCBib2R5IGZyb20gZXhl
Y3V0aW5nIHVudGlsIHdlJ3ZlIGVzdGFibGlzaGVkIHRoZSB0aHJlYWQgaWRlbnRpZmllci4KICAg
ICBNdXRleExvY2tlciBsb2NrZXIoY29udGV4dC0+Y3JlYXRpb25NdXRleCk7CkBAIC04NCw2ICs3
NSwxMyBAQCBUaHJlYWRJZGVudGlmaWVyIGNyZWF0ZVRocmVhZChUaHJlYWRGdW5jdGlvbiBlbnRy
eVBvaW50LCB2b2lkKiBkYXRhLCBjb25zdCBjaGFyKgogICAgIHJldHVybiBjcmVhdGVUaHJlYWRJ
bnRlcm5hbCh0aHJlYWRFbnRyeVBvaW50LCBjb250ZXh0LCBuYW1lKTsKIH0KIAorVGhyZWFkSWRl
bnRpZmllciBjcmVhdGVUaHJlYWQoVGhyZWFkRnVuY3Rpb24gZW50cnlQb2ludCwgdm9pZCogZGF0
YSwgY29uc3QgY2hhciogbmFtZSkKK3sKKyAgICByZXR1cm4gY3JlYXRlVGhyZWFkKG5hbWUsIFtl
bnRyeVBvaW50LCBkYXRhXSB7CisgICAgICAgIGVudHJ5UG9pbnQoZGF0YSk7CisgICAgfSk7Cit9
CisKIHZvaWQgc2V0Q3VycmVudFRocmVhZElzVXNlckludGVyYWN0aXZlKCkKIHsKICNpZiBIQVZF
KFFPU19DTEFTU0VTKQpAQCAtOTgsNjEgKzk2LDQgQEAgdm9pZCBzZXRDdXJyZW50VGhyZWFkSXNV
c2VySW5pdGlhdGVkKCkKICNlbmRpZgogfQogCi0jaWYgUExBVEZPUk0oTUFDKSB8fCBQTEFURk9S
TShXSU4pCi0KLS8vIEZvciBBQkkgY29tcGF0aWJpbGl0eSB3aXRoIFNhZmFyaSBvbiBNYWMgLyBX
aW5kb3dzOiBTYWZhcmkgdXNlcyB0aGUgcHJpdmF0ZQotLy8gY3JlYXRlVGhyZWFkKCkgYW5kIHdh
aXRGb3JUaHJlYWRDb21wbGV0aW9uKCkgZnVuY3Rpb25zIGRpcmVjdGx5IGFuZCB3ZSBuZWVkCi0v
LyB0byBrZWVwIHRoZSBvbGQgQUJJIGNvbXBhdGliaWxpdHkgdW50aWwgaXQncyBiZWVuIHJlYnVp
bHQuCi0KLXR5cGVkZWYgdm9pZCogKCpUaHJlYWRGdW5jdGlvbldpdGhSZXR1cm5WYWx1ZSkodm9p
ZCogYXJndW1lbnQpOwotCi1XVEZfRVhQT1JUX1BSSVZBVEUgVGhyZWFkSWRlbnRpZmllciBjcmVh
dGVUaHJlYWQoVGhyZWFkRnVuY3Rpb25XaXRoUmV0dXJuVmFsdWUgZW50cnlQb2ludCwgdm9pZCog
ZGF0YSwgY29uc3QgY2hhciogbmFtZSk7Ci0KLXN0cnVjdCBUaHJlYWRGdW5jdGlvbldpdGhSZXR1
cm5WYWx1ZUludm9jYXRpb24gewotICAgIFRocmVhZEZ1bmN0aW9uV2l0aFJldHVyblZhbHVlSW52
b2NhdGlvbihUaHJlYWRGdW5jdGlvbldpdGhSZXR1cm5WYWx1ZSBmdW5jdGlvbiwgdm9pZCogZGF0
YSkKLSAgICAgICAgOiBmdW5jdGlvbihmdW5jdGlvbikKLSAgICAgICAgLCBkYXRhKGRhdGEpCi0g
ICAgewotICAgIH0KLQotICAgIFRocmVhZEZ1bmN0aW9uV2l0aFJldHVyblZhbHVlIGZ1bmN0aW9u
OwotICAgIHZvaWQqIGRhdGE7Ci19OwotCi1zdGF0aWMgdm9pZCBjb21wYXRFbnRyeVBvaW50KHZv
aWQqIHBhcmFtKQotewotICAgIC8vIEJhbGFuY2VkIGJ5IC5yZWxlYXNlKCkgaW4gY3JlYXRlVGhy
ZWFkLgotICAgIGF1dG8gaW52b2NhdGlvbiA9IHN0ZDo6dW5pcXVlX3B0cjxUaHJlYWRGdW5jdGlv
bldpdGhSZXR1cm5WYWx1ZUludm9jYXRpb24+KHN0YXRpY19jYXN0PFRocmVhZEZ1bmN0aW9uV2l0
aFJldHVyblZhbHVlSW52b2NhdGlvbio+KHBhcmFtKSk7Ci0gICAgaW52b2NhdGlvbi0+ZnVuY3Rp
b24oaW52b2NhdGlvbi0+ZGF0YSk7Ci19Ci0KLVRocmVhZElkZW50aWZpZXIgY3JlYXRlVGhyZWFk
KFRocmVhZEZ1bmN0aW9uV2l0aFJldHVyblZhbHVlIGVudHJ5UG9pbnQsIHZvaWQqIGRhdGEsIGNv
bnN0IGNoYXIqIG5hbWUpCi17Ci0gICAgYXV0byBpbnZvY2F0aW9uID0gc3RkOjptYWtlX3VuaXF1
ZTxUaHJlYWRGdW5jdGlvbldpdGhSZXR1cm5WYWx1ZUludm9jYXRpb24+KGVudHJ5UG9pbnQsIGRh
dGEpOwotCi0gICAgLy8gQmFsYW5jZWQgYnkgc3RkOjp1bmlxdWVfcHRyIGNvbnN0cnVjdG9yIGlu
IGNvbXBhdEVudHJ5UG9pbnQuCi0gICAgcmV0dXJuIGNyZWF0ZVRocmVhZChjb21wYXRFbnRyeVBv
aW50LCBpbnZvY2F0aW9uLnJlbGVhc2UoKSwgbmFtZSk7Ci19Ci0KLVdURl9FWFBPUlRfUFJJVkFU
RSBpbnQgd2FpdEZvclRocmVhZENvbXBsZXRpb24oVGhyZWFkSWRlbnRpZmllciwgdm9pZCoqKTsK
LQotaW50IHdhaXRGb3JUaHJlYWRDb21wbGV0aW9uKFRocmVhZElkZW50aWZpZXIgdGhyZWFkSUQs
IHZvaWQqKikKLXsKLSAgICByZXR1cm4gd2FpdEZvclRocmVhZENvbXBsZXRpb24odGhyZWFkSUQp
OwotfQotCi0vLyBUaGlzIGZ1bmN0aW9uIGlzIGRlcHJlY2F0ZWQgYnV0IG5lZWRzIHRvIGJlIGtl
cHQgYXJvdW5kIGZvciBiYWNrd2FyZAotLy8gY29tcGF0aWJpbGl0eS4gVXNlIHRoZSAzLWFyZ3Vt
ZW50IHZlcnNpb24gb2YgY3JlYXRlVGhyZWFkIGFib3ZlLgotCi1XVEZfRVhQT1JUX1BSSVZBVEUg
VGhyZWFkSWRlbnRpZmllciBjcmVhdGVUaHJlYWQoVGhyZWFkRnVuY3Rpb25XaXRoUmV0dXJuVmFs
dWUgZW50cnlQb2ludCwgdm9pZCogZGF0YSk7Ci0KLVRocmVhZElkZW50aWZpZXIgY3JlYXRlVGhy
ZWFkKFRocmVhZEZ1bmN0aW9uV2l0aFJldHVyblZhbHVlIGVudHJ5UG9pbnQsIHZvaWQqIGRhdGEp
Ci17Ci0gICAgYXV0byBpbnZvY2F0aW9uID0gc3RkOjptYWtlX3VuaXF1ZTxUaHJlYWRGdW5jdGlv
bldpdGhSZXR1cm5WYWx1ZUludm9jYXRpb24+KGVudHJ5UG9pbnQsIGRhdGEpOwotCi0gICAgLy8g
QmFsYW5jZWQgYnkgYWRvcHRQdHIoKSBpbiBjb21wYXRFbnRyeVBvaW50LgotICAgIHJldHVybiBj
cmVhdGVUaHJlYWQoY29tcGF0RW50cnlQb2ludCwgaW52b2NhdGlvbi5yZWxlYXNlKCksIDApOwot
fQotI2VuZGlmCi0KIH0gLy8gbmFtZXNwYWNlIFdURgpkaWZmIC0tZ2l0IGEvU291cmNlL1dURi93
dGYvVGhyZWFkaW5nLmggYi9Tb3VyY2UvV1RGL3d0Zi9UaHJlYWRpbmcuaAppbmRleCAzNjZkZmJi
OThjZDBjZmY2ZGJiNDQ2YTJlMjhhM2RiYjY4NjNlYzMxLi41OTA2ZmY3NGExZTYxZmYzZmE4Y2Q3
YTI5MmVlZTc1MTYzNzQ2ZTA1IDEwMDY0NAotLS0gYS9Tb3VyY2UvV1RGL3d0Zi9UaHJlYWRpbmcu
aAorKysgYi9Tb3VyY2UvV1RGL3d0Zi9UaHJlYWRpbmcuaApAQCAtMSw1ICsxLDUgQEAKIC8qCi0g
KiBDb3B5cmlnaHQgKEMpIDIwMDcsIDIwMDgsIDIwMTAgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJl
c2VydmVkLgorICogQ29weXJpZ2h0IChDKSAyMDA3LCAyMDA4LCAyMDEwLCAyMDE0IEFwcGxlIElu
Yy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KICAqIENvcHlyaWdodCAoQykgMjAwNyBKdXN0aW4gSGF5
Z29vZCAoamhheWdvb2RAcmVha3RpeC5jb20pCiAgKgogICogUmVkaXN0cmlidXRpb24gYW5kIHVz
ZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CkBAIC0yNSw0MCAr
MjUsMTYgQEAKICAqIE9OIEFOWSBUSEVPUlkgT0YgTElBQklMSVRZLCBXSEVUSEVSIElOIENPTlRS
QUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUCiAgKiAoSU5DTFVESU5HIE5FR0xJR0VOQ0Ug
T1IgT1RIRVJXSVNFKSBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UgT0YKICAqIFRI
SVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBE
QU1BR0UuCi0gKgotICoKLSAqIE5vdGU6IFRoZSBpbXBsZW1lbnRhdGlvbnMgb2YgSW50ZXJsb2Nr
ZWRJbmNyZW1lbnQgYW5kIEludGVybG9ja2VkRGVjcmVtZW50IGFyZSBiYXNlZAotICogb24gYXRv
bWljX2luY3JlbWVudCBhbmQgYXRvbWljX2V4Y2hhbmdlX2FuZF9hZGQgZnJvbSB0aGUgQm9vc3Qg
QysrIExpYnJhcnkuIFRoZSBsaWNlbnNlCi0gKiBpcyB2aXJ0dWFsbHkgaWRlbnRpY2FsIHRvIHRo
ZSBBcHBsZSBsaWNlbnNlIGFib3ZlIGJ1dCBpcyBpbmNsdWRlZCBoZXJlIGZvciBjb21wbGV0ZW5l
c3MuCi0gKgotICogQm9vc3QgU29mdHdhcmUgTGljZW5zZSAtIFZlcnNpb24gMS4wIC0gQXVndXN0
IDE3dGgsIDIwMDMKLSAqIAotICogUGVybWlzc2lvbiBpcyBoZXJlYnkgZ3JhbnRlZCwgZnJlZSBv
ZiBjaGFyZ2UsIHRvIGFueSBwZXJzb24gb3Igb3JnYW5pemF0aW9uCi0gKiBvYnRhaW5pbmcgYSBj
b3B5IG9mIHRoZSBzb2Z0d2FyZSBhbmQgYWNjb21wYW55aW5nIGRvY3VtZW50YXRpb24gY292ZXJl
ZCBieQotICogdGhpcyBsaWNlbnNlICh0aGUgIlNvZnR3YXJlIikgdG8gdXNlLCByZXByb2R1Y2Us
IGRpc3BsYXksIGRpc3RyaWJ1dGUsCi0gKiBleGVjdXRlLCBhbmQgdHJhbnNtaXQgdGhlIFNvZnR3
YXJlLCBhbmQgdG8gcHJlcGFyZSBkZXJpdmF0aXZlIHdvcmtzIG9mIHRoZQotICogU29mdHdhcmUs
IGFuZCB0byBwZXJtaXQgdGhpcmQtcGFydGllcyB0byB3aG9tIHRoZSBTb2Z0d2FyZSBpcyBmdXJu
aXNoZWQgdG8KLSAqIGRvIHNvLCBhbGwgc3ViamVjdCB0byB0aGUgZm9sbG93aW5nOgotICogCi0g
KiBUaGUgY29weXJpZ2h0IG5vdGljZXMgaW4gdGhlIFNvZnR3YXJlIGFuZCB0aGlzIGVudGlyZSBz
dGF0ZW1lbnQsIGluY2x1ZGluZwotICogdGhlIGFib3ZlIGxpY2Vuc2UgZ3JhbnQsIHRoaXMgcmVz
dHJpY3Rpb24gYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciwKLSAqIG11c3QgYmUgaW5jbHVk
ZWQgaW4gYWxsIGNvcGllcyBvZiB0aGUgU29mdHdhcmUsIGluIHdob2xlIG9yIGluIHBhcnQsIGFu
ZAotICogYWxsIGRlcml2YXRpdmUgd29ya3Mgb2YgdGhlIFNvZnR3YXJlLCB1bmxlc3Mgc3VjaCBj
b3BpZXMgb3IgZGVyaXZhdGl2ZQotICogd29ya3MgYXJlIHNvbGVseSBpbiB0aGUgZm9ybSBvZiBt
YWNoaW5lLWV4ZWN1dGFibGUgb2JqZWN0IGNvZGUgZ2VuZXJhdGVkIGJ5Ci0gKiBhIHNvdXJjZSBs
YW5ndWFnZSBwcm9jZXNzb3IuCi0gKiAKLSAqIFRIRSBTT0ZUV0FSRSBJUyBQUk9WSURFRCAiQVMg
SVMiLCBXSVRIT1VUIFdBUlJBTlRZIE9GIEFOWSBLSU5ELCBFWFBSRVNTIE9SCi0gKiBJTVBMSUVE
LCBJTkNMVURJTkcgQlVUIE5PVCBMSU1JVEVEIFRPIFRIRSBXQVJSQU5USUVTIE9GIE1FUkNIQU5U
QUJJTElUWSwKLSAqIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLCBUSVRMRSBBTkQg
Tk9OLUlORlJJTkdFTUVOVC4gSU4gTk8gRVZFTlQKLSAqIFNIQUxMIFRIRSBDT1BZUklHSFQgSE9M
REVSUyBPUiBBTllPTkUgRElTVFJJQlVUSU5HIFRIRSBTT0ZUV0FSRSBCRSBMSUFCTEUKLSAqIEZP
UiBBTlkgREFNQUdFUyBPUiBPVEhFUiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFRP
UlQgT1IgT1RIRVJXSVNFLAotICogQVJJU0lORyBGUk9NLCBPVVQgT0YgT1IgSU4gQ09OTkVDVElP
TiBXSVRIIFRIRSBTT0ZUV0FSRSBPUiBUSEUgVVNFIE9SIE9USEVSCi0gKiBERUFMSU5HUyBJTiBU
SEUgU09GVFdBUkUuCiAgKi8KIAogI2lmbmRlZiBUaHJlYWRpbmdfaAogI2RlZmluZSBUaHJlYWRp
bmdfaAogCisvLyBGSVhNRTogTm90IHN1cmUgd2h5IHRoZXJlIGFyZSBzbyBtYW55IGluY2x1ZGVz
IGhlcmUuCisvLyBJcyB0aGlzIGludGVuZGVkIHRvIGJlIGNvbnZlbmllbmNlIHNvIHRoYXQgb3Ro
ZXJzIGRvbid0IGhhdmUgdG8gaW5jbHVkZSB0aGUgaW5kaXZpZHVhbCBmaWxlcz8KKy8vIE5vdGhp
bmcgaW4gdGhpcyBoZWFkZXIgZGVwZW5kcyBvbiBBc3NlcnRpb25zLCBBdG9taWNzLCBMb2NrZXIs
IE5vbmNvcHlhYmxlLCBUaHJlYWRTYWZlUmVmQ291bnRlZCwgb3IgVGhyZWFkaW5nUHJpbWl0aXZl
cy4KKworI2luY2x1ZGUgPGZ1bmN0aW9uYWw+CiAjaW5jbHVkZSA8c3RkaW50Lmg+CiAjaW5jbHVk
ZSA8d3RmL0Fzc2VydGlvbnMuaD4KICNpbmNsdWRlIDx3dGYvQXRvbWljcy5oPgpAQCAtNzksMTMg
KzU1LDIwIEBAIFdURl9FWFBPUlRfUFJJVkFURSB2b2lkIGluaXRpYWxpemVUaHJlYWRpbmcoKTsK
IAogLy8gUmV0dXJucyAwIGlmIHRocmVhZCBjcmVhdGlvbiBmYWlsZWQuCiAvLyBUaGUgdGhyZWFk
IG5hbWUgbXVzdCBiZSBhIGxpdGVyYWwgc2luY2Ugb24gc29tZSBwbGF0Zm9ybXMgaXQncyBwYXNz
ZWQgaW4gdG8gdGhlIHRocmVhZC4KLVdURl9FWFBPUlRfUFJJVkFURSBUaHJlYWRJZGVudGlmaWVy
IGNyZWF0ZVRocmVhZChUaHJlYWRGdW5jdGlvbiwgdm9pZCosIGNvbnN0IGNoYXIqIHRocmVhZE5h
bWUpOworV1RGX0VYUE9SVF9QUklWQVRFIFRocmVhZElkZW50aWZpZXIgY3JlYXRlVGhyZWFkKGNv
bnN0IGNoYXIqIHRocmVhZE5hbWUsIHN0ZDo6ZnVuY3Rpb248dm9pZCgpPik7CiAKIC8vIE1hcmsg
dGhlIGN1cnJlbnQgdGhyZWFkIGFzIHJlcXVpcmluZyBVSSByZXNwb25zaXZlbmVzcy4KIFdURl9F
WFBPUlRfUFJJVkFURSB2b2lkIHNldEN1cnJlbnRUaHJlYWRJc1VzZXJJbnRlcmFjdGl2ZSgpOwot
CiBXVEZfRVhQT1JUX1BSSVZBVEUgdm9pZCBzZXRDdXJyZW50VGhyZWFkSXNVc2VySW5pdGlhdGVk
KCk7CiAKK1dURl9FWFBPUlRfUFJJVkFURSBUaHJlYWRJZGVudGlmaWVyIGN1cnJlbnRUaHJlYWQo
KTsKK1dURl9FWFBPUlRfUFJJVkFURSB2b2lkIGNoYW5nZVRocmVhZFByaW9yaXR5KFRocmVhZElk
ZW50aWZpZXIsIGludCk7CitXVEZfRVhQT1JUX1BSSVZBVEUgaW50IHdhaXRGb3JUaHJlYWRDb21w
bGV0aW9uKFRocmVhZElkZW50aWZpZXIpOworV1RGX0VYUE9SVF9QUklWQVRFIHZvaWQgZGV0YWNo
VGhyZWFkKFRocmVhZElkZW50aWZpZXIpOworCisvLyBEZXByZWNhdGVkIGZ1bmN0aW9uLXBvaW50
ZXItYmFzZWQgdGhyZWFkIGNyZWF0aW9uLgorV1RGX0VYUE9SVF9QUklWQVRFIFRocmVhZElkZW50
aWZpZXIgY3JlYXRlVGhyZWFkKFRocmVhZEZ1bmN0aW9uLCB2b2lkKiwgY29uc3QgY2hhciogdGhy
ZWFkTmFtZSk7CisKIC8vIEludGVybmFsIHBsYXRmb3JtLXNwZWNpZmljIGNyZWF0ZVRocmVhZCBp
bXBsZW1lbnRhdGlvbi4KIFRocmVhZElkZW50aWZpZXIgY3JlYXRlVGhyZWFkSW50ZXJuYWwoVGhy
ZWFkRnVuY3Rpb24sIHZvaWQqLCBjb25zdCBjaGFyKiB0aHJlYWROYW1lKTsKIApAQCAtOTMsMTEg
Kzc2LDYgQEAgVGhyZWFkSWRlbnRpZmllciBjcmVhdGVUaHJlYWRJbnRlcm5hbChUaHJlYWRGdW5j
dGlvbiwgdm9pZCosIGNvbnN0IGNoYXIqIHRocmVhZE4KIC8vIEhlbHBmdWwgZm9yIHBsYXRmb3Jt
cyB3aGVyZSB0aGUgdGhyZWFkIG5hbWUgbXVzdCBiZSBzZXQgZnJvbSB3aXRoaW4gdGhlIHRocmVh
ZC4KIHZvaWQgaW5pdGlhbGl6ZUN1cnJlbnRUaHJlYWRJbnRlcm5hbChjb25zdCBjaGFyKiB0aHJl
YWROYW1lKTsKIAotV1RGX0VYUE9SVF9QUklWQVRFIFRocmVhZElkZW50aWZpZXIgY3VycmVudFRo
cmVhZCgpOwotV1RGX0VYUE9SVF9QUklWQVRFIHZvaWQgY2hhbmdlVGhyZWFkUHJpb3JpdHkoVGhy
ZWFkSWRlbnRpZmllciwgaW50KTsKLVdURl9FWFBPUlRfUFJJVkFURSBpbnQgd2FpdEZvclRocmVh
ZENvbXBsZXRpb24oVGhyZWFkSWRlbnRpZmllcik7Ci1XVEZfRVhQT1JUX1BSSVZBVEUgdm9pZCBk
ZXRhY2hUaHJlYWQoVGhyZWFkSWRlbnRpZmllcik7Ci0KIH0gLy8gbmFtZXNwYWNlIFdURgogCiB1
c2luZyBXVEY6OlRocmVhZElkZW50aWZpZXI7CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9D
TWFrZUxpc3RzLnR4dCBiL1NvdXJjZS9XZWJDb3JlL0NNYWtlTGlzdHMudHh0CmluZGV4IGQ4ZTZh
YWE0OWUxNzU3NDEzMjhhNDQ2MmQyNzkxYzI3NDNiZWFhNTkuLjE3NmEwZDgyNmZmYTM0ODA1MmNm
MWVkODU0ZjIxNjEzYzA1NmRmZjIgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL0NNYWtlTGlz
dHMudHh0CisrKyBiL1NvdXJjZS9XZWJDb3JlL0NNYWtlTGlzdHMudHh0CkBAIC0xNTA1LDcgKzE1
MDUsNiBAQCBzZXQoV2ViQ29yZV9TT1VSQ0VTCiAgICAgZmlsZWFwaS9GaWxlUmVhZGVyLmNwcAog
ICAgIGZpbGVhcGkvRmlsZVJlYWRlckxvYWRlci5jcHAKICAgICBmaWxlYXBpL0ZpbGVSZWFkZXJT
eW5jLmNwcAotICAgIGZpbGVhcGkvRmlsZVRocmVhZC5jcHAKICAgICBmaWxlYXBpL1RocmVhZGFi
bGVCbG9iUmVnaXN0cnkuY3BwCiAgICAgZmlsZWFwaS9XZWJLaXRCbG9iQnVpbGRlci5jcHAKIApk
aWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvV2ViQ29yZS52Y3hwcm9qL1dlYkNvcmUudmN4cHJv
aiBiL1NvdXJjZS9XZWJDb3JlL1dlYkNvcmUudmN4cHJvai9XZWJDb3JlLnZjeHByb2oKaW5kZXgg
NTFhNGVkN2YwMWQ4MDAwODlmNTJlYjFmN2Q5MTgyMjk4Njc3YWQwYi4uYzU5NTg0YzNmYjRlZWZk
ZmMwNmVmMWZjZjI0NTdhNjVkZjY2NjNjNCAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvV2Vi
Q29yZS52Y3hwcm9qL1dlYkNvcmUudmN4cHJvagorKysgYi9Tb3VyY2UvV2ViQ29yZS9XZWJDb3Jl
LnZjeHByb2ovV2ViQ29yZS52Y3hwcm9qCkBAIC0xNDkzNSw3ICsxNDkzNSw2IEBACiAgICAgPENs
Q29tcGlsZSBJbmNsdWRlPSIuLlxmaWxlYXBpXEZpbGVSZWFkZXIuY3BwIiAvPgogICAgIDxDbENv
bXBpbGUgSW5jbHVkZT0iLi5cZmlsZWFwaVxGaWxlUmVhZGVyTG9hZGVyLmNwcCIgLz4KICAgICA8
Q2xDb21waWxlIEluY2x1ZGU9Ii4uXGZpbGVhcGlcRmlsZVJlYWRlclN5bmMuY3BwIiAvPgotICAg
IDxDbENvbXBpbGUgSW5jbHVkZT0iLi5cZmlsZWFwaVxGaWxlVGhyZWFkLmNwcCIgLz4KICAgICA8
Q2xDb21waWxlIEluY2x1ZGU9Ii4uXGh0bWxcRm9ybUFzc29jaWF0ZWRFbGVtZW50LmNwcCIgLz4K
ICAgICA8Q2xDb21waWxlIEluY2x1ZGU9Ii4uXGh0bWxcRm9ybUNvbnRyb2xsZXIuY3BwIiAvPgog
ICAgIDxDbENvbXBpbGUgSW5jbHVkZT0iLi5caHRtbFxGb3JtRGF0YUxpc3QuY3BwIiAvPgpAQCAt
MjA3MTQsNyArMjA3MTMsNiBAQAogICAgIDxDbEluY2x1ZGUgSW5jbHVkZT0iLi5cZmlsZWFwaVxG
aWxlUmVhZGVyTG9hZGVyLmgiIC8+CiAgICAgPENsSW5jbHVkZSBJbmNsdWRlPSIuLlxmaWxlYXBp
XEZpbGVSZWFkZXJMb2FkZXJDbGllbnQuaCIgLz4KICAgICA8Q2xJbmNsdWRlIEluY2x1ZGU9Ii4u
XGZpbGVhcGlcRmlsZVJlYWRlclN5bmMuaCIgLz4KLSAgICA8Q2xJbmNsdWRlIEluY2x1ZGU9Ii4u
XGZpbGVhcGlcRmlsZVRocmVhZC5oIiAvPgogICAgIDxDbEluY2x1ZGUgSW5jbHVkZT0iLi5caHRt
bFxGb3JtQXNzb2NpYXRlZEVsZW1lbnQuaCIgLz4KICAgICA8Q2xJbmNsdWRlIEluY2x1ZGU9Ii4u
XGh0bWxcRm9ybUNvbnRyb2xsZXIuaCIgLz4KICAgICA8Q2xJbmNsdWRlIEluY2x1ZGU9Ii4uXGh0
bWxcRm9ybURhdGFMaXN0LmgiIC8+CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9XZWJDb3Jl
LnZjeHByb2ovV2ViQ29yZS52Y3hwcm9qLmZpbHRlcnMgYi9Tb3VyY2UvV2ViQ29yZS9XZWJDb3Jl
LnZjeHByb2ovV2ViQ29yZS52Y3hwcm9qLmZpbHRlcnMKaW5kZXggNDY4ZmE1ZTUyZjc3NTdiMmZi
MzgyYjcwM2NiMWQ4MGZmY2M0MWJiOC4uOWIwNmExNWYxNzczYWFjOGM5ZWQ1Y2E5NDJkMGM5MzUy
ZGMzOWQzZCAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvV2ViQ29yZS52Y3hwcm9qL1dlYkNv
cmUudmN4cHJvai5maWx0ZXJzCisrKyBiL1NvdXJjZS9XZWJDb3JlL1dlYkNvcmUudmN4cHJvai9X
ZWJDb3JlLnZjeHByb2ouZmlsdGVycwpAQCAtMzcxNyw5ICszNzE3LDYgQEAKICAgICA8Q2xDb21w
aWxlIEluY2x1ZGU9Ii4uXGZpbGVhcGlcRmlsZVJlYWRlclN5bmMuY3BwIj4KICAgICAgIDxGaWx0
ZXI+aHRtbDwvRmlsdGVyPgogICAgIDwvQ2xDb21waWxlPgotICAgIDxDbENvbXBpbGUgSW5jbHVk
ZT0iLi5cZmlsZWFwaVxGaWxlVGhyZWFkLmNwcCI+Ci0gICAgICA8RmlsdGVyPmh0bWw8L0ZpbHRl
cj4KLSAgICA8L0NsQ29tcGlsZT4KICAgICA8Q2xDb21waWxlIEluY2x1ZGU9Ii4uXGh0bWxcRm9y
bUFzc29jaWF0ZWRFbGVtZW50LmNwcCI+CiAgICAgICA8RmlsdGVyPmh0bWw8L0ZpbHRlcj4KICAg
ICA8L0NsQ29tcGlsZT4KQEAgLTEwODY5LDkgKzEwODY2LDYgQEAKICAgICA8Q2xJbmNsdWRlIElu
Y2x1ZGU9Ii4uXGZpbGVhcGlcRmlsZVJlYWRlclN5bmMuaCI+CiAgICAgICA8RmlsdGVyPmh0bWw8
L0ZpbHRlcj4KICAgICA8L0NsSW5jbHVkZT4KLSAgICA8Q2xJbmNsdWRlIEluY2x1ZGU9Ii4uXGZp
bGVhcGlcRmlsZVRocmVhZC5oIj4KLSAgICAgIDxGaWx0ZXI+aHRtbDwvRmlsdGVyPgotICAgIDwv
Q2xJbmNsdWRlPgogICAgIDxDbEluY2x1ZGUgSW5jbHVkZT0iLi5caHRtbFxGb3JtQXNzb2NpYXRl
ZEVsZW1lbnQuaCI+CiAgICAgICA8RmlsdGVyPmh0bWw8L0ZpbHRlcj4KICAgICA8L0NsSW5jbHVk
ZT4KZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL1dlYkNvcmUueGNvZGVwcm9qL3Byb2plY3Qu
cGJ4cHJvaiBiL1NvdXJjZS9XZWJDb3JlL1dlYkNvcmUueGNvZGVwcm9qL3Byb2plY3QucGJ4cHJv
agppbmRleCA0NDA1ZGJlNWYyOWMxYTE5ZWRjYmM5YzcyZTM4ZDUyMTQ2ZGZjM2UxLi5mM2VkNDI3
YjBlYjQxMDM5ODFkMTZiNGVlZTY1M2NjNmM0MTNhYjlkIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2Vi
Q29yZS9XZWJDb3JlLnhjb2RlcHJvai9wcm9qZWN0LnBieHByb2oKKysrIGIvU291cmNlL1dlYkNv
cmUvV2ViQ29yZS54Y29kZXByb2ovcHJvamVjdC5wYnhwcm9qCkBAIC0zNDc1LDggKzM0NzUsNiBA
QAogCQk5NzZENkM4NjEyMkI4QTNEMDAxRkQxRjcgLyogRmlsZUxpc3QuaCBpbiBIZWFkZXJzICov
ID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDk3NkQ2QzY3MTIyQjhBM0QwMDFGRDFG
NyAvKiBGaWxlTGlzdC5oICovOyB9OwogCQk5NzZENkM4ODEyMkI4QTNEMDAxRkQxRjcgLyogRmls
ZVJlYWRlci5jcHAgaW4gU291cmNlcyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYg
PSA5NzZENkM2OTEyMkI4QTNEMDAxRkQxRjcgLyogRmlsZVJlYWRlci5jcHAgKi87IH07CiAJCTk3
NkQ2Qzg5MTIyQjhBM0QwMDFGRDFGNyAvKiBGaWxlUmVhZGVyLmggaW4gSGVhZGVycyAqLyA9IHtp
c2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSA5NzZENkM2QTEyMkI4QTNEMDAxRkQxRjcgLyog
RmlsZVJlYWRlci5oICovOyB9OwotCQk5NzZENkM4RDEyMkI4QTNEMDAxRkQxRjcgLyogRmlsZVRo
cmVhZC5jcHAgaW4gU291cmNlcyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSA5
NzZENkM2RTEyMkI4QTNEMDAxRkQxRjcgLyogRmlsZVRocmVhZC5jcHAgKi87IH07Ci0JCTk3NkQ2
QzhFMTIyQjhBM0QwMDFGRDFGNyAvKiBGaWxlVGhyZWFkLmggaW4gSGVhZGVycyAqLyA9IHtpc2Eg
PSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSA5NzZENkM2RjEyMkI4QTNEMDAxRkQxRjcgLyogRmls
ZVRocmVhZC5oICovOyB9OwogCQk5NzZENkM5NDEyMkI4QTNEMDAxRkQxRjcgLyogVGhyZWFkYWJs
ZUJsb2JSZWdpc3RyeS5jcHAgaW4gU291cmNlcyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZp
bGVSZWYgPSA5NzZENkM3NTEyMkI4QTNEMDAxRkQxRjcgLyogVGhyZWFkYWJsZUJsb2JSZWdpc3Ry
eS5jcHAgKi87IH07CiAJCTk3NkQ2Qzk1MTIyQjhBM0QwMDFGRDFGNyAvKiBUaHJlYWRhYmxlQmxv
YlJlZ2lzdHJ5LmggaW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYg
PSA5NzZENkM3NjEyMkI4QTNEMDAxRkQxRjcgLyogVGhyZWFkYWJsZUJsb2JSZWdpc3RyeS5oICov
OyB9OwogCQk5NzZGMzZFQTE0Njg2MjI1MDA1RTkzQjQgLyogU2VjdXJpdHlDb250ZXh0LmNwcCBp
biBTb3VyY2VzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDk3NkYzNkU4MTQ2
ODYyMjUwMDVFOTNCNCAvKiBTZWN1cml0eUNvbnRleHQuY3BwICovOyB9OwpAQCAtMTA2NDEsOCAr
MTA2MzksNiBAQAogCQk5NzZENkM2NzEyMkI4QTNEMDAxRkQxRjcgLyogRmlsZUxpc3QuaCAqLyA9
IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxl
VHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBuYW1lID0gRmlsZUxpc3QuaDsgcGF0aCA9IGZpbGVhcGkv
RmlsZUxpc3QuaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKIAkJOTc2RDZDNjkxMjJCOEEz
RDAwMUZEMUY3IC8qIEZpbGVSZWFkZXIuY3BwICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7
IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jcHAuY3Bw
OyBuYW1lID0gRmlsZVJlYWRlci5jcHA7IHBhdGggPSBmaWxlYXBpL0ZpbGVSZWFkZXIuY3BwOyBz
b3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwogCQk5NzZENkM2QTEyMkI4QTNEMDAxRkQxRjcgLyog
RmlsZVJlYWRlci5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9
IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7IG5hbWUgPSBGaWxlUmVhZGVy
Lmg7IHBhdGggPSBmaWxlYXBpL0ZpbGVSZWFkZXIuaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+Ijsg
fTsKLQkJOTc2RDZDNkUxMjJCOEEzRDAwMUZEMUY3IC8qIEZpbGVUaHJlYWQuY3BwICovID0ge2lz
YSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBl
ID0gc291cmNlY29kZS5jcHAuY3BwOyBuYW1lID0gRmlsZVRocmVhZC5jcHA7IHBhdGggPSBmaWxl
YXBpL0ZpbGVUaHJlYWQuY3BwOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwotCQk5NzZENkM2
RjEyMkI4QTNEMDAxRkQxRjcgLyogRmlsZVRocmVhZC5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZl
cmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5j
Lmg7IG5hbWUgPSBGaWxlVGhyZWFkLmg7IHBhdGggPSBmaWxlYXBpL0ZpbGVUaHJlYWQuaDsgc291
cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKIAkJOTc2RDZDNzUxMjJCOEEzRDAwMUZEMUY3IC8qIFRo
cmVhZGFibGVCbG9iUmVnaXN0cnkuY3BwICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZp
bGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jcHAuY3BwOyBu
YW1lID0gVGhyZWFkYWJsZUJsb2JSZWdpc3RyeS5jcHA7IHBhdGggPSBmaWxlYXBpL1RocmVhZGFi
bGVCbG9iUmVnaXN0cnkuY3BwOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwogCQk5NzZENkM3
NjEyMkI4QTNEMDAxRkQxRjcgLyogVGhyZWFkYWJsZUJsb2JSZWdpc3RyeS5oICovID0ge2lzYSA9
IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0g
c291cmNlY29kZS5jLmg7IG5hbWUgPSBUaHJlYWRhYmxlQmxvYlJlZ2lzdHJ5Lmg7IHBhdGggPSBm
aWxlYXBpL1RocmVhZGFibGVCbG9iUmVnaXN0cnkuaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+Ijsg
fTsKIAkJOTc2RjM2RTgxNDY4NjIyNTAwNUU5M0I0IC8qIFNlY3VyaXR5Q29udGV4dC5jcHAgKi8g
PSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmls
ZVR5cGUgPSBzb3VyY2Vjb2RlLmNwcC5jcHA7IHBhdGggPSBTZWN1cml0eUNvbnRleHQuY3BwOyBz
b3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwpAQCAtMTgyMjksOCArMTgyMjUsNiBAQAogCQkJCTJF
REYzNjlBMTIyQzk0QjQwMDJGN0Q0RSAvKiBGaWxlUmVhZGVyU3luYy5jcHAgKi8sCiAJCQkJMkVE
RjM2OUIxMjJDOTRCNDAwMkY3RDRFIC8qIEZpbGVSZWFkZXJTeW5jLmggKi8sCiAJCQkJRTFBQjFF
QkQxNEU5RTNBODAwNDQ5RTEzIC8qIEZpbGVSZWFkZXJTeW5jLmlkbCAqLywKLQkJCQk5NzZENkM2
RTEyMkI4QTNEMDAxRkQxRjcgLyogRmlsZVRocmVhZC5jcHAgKi8sCi0JCQkJOTc2RDZDNkYxMjJC
OEEzRDAwMUZEMUY3IC8qIEZpbGVUaHJlYWQuaCAqLywKIAkJCQk5NzZENkM3NTEyMkI4QTNEMDAx
RkQxRjcgLyogVGhyZWFkYWJsZUJsb2JSZWdpc3RyeS5jcHAgKi8sCiAJCQkJOTc2RDZDNzYxMjJC
OEEzRDAwMUZEMUY3IC8qIFRocmVhZGFibGVCbG9iUmVnaXN0cnkuaCAqLywKIAkJCQk5NzZENkM1
QzEyMkI4QTNEMDAxRkQxRjcgLyogV2ViS2l0QmxvYkJ1aWxkZXIuY3BwICovLApAQCAtMjQzMjQs
NyArMjQzMTgsNiBAQAogCQkJCTJFRjFCRkY5MTIxQ0IwQ0UwMEMyNzYyNyAvKiBGaWxlU3RyZWFt
Q2xpZW50LmggaW4gSGVhZGVycyAqLywKIAkJCQk1MTRCM0Y3MzBDNzIyMDQ3MDAwNTMwREYgLyog
RmlsZVN5c3RlbS5oIGluIEhlYWRlcnMgKi8sCiAJCQkJMjZDMTdBM0UxNDkxRDJENDAwRDEyQkEy
IC8qIEZpbGVTeXN0ZW1JT1MuaCBpbiBIZWFkZXJzICovLAotCQkJCTk3NkQ2QzhFMTIyQjhBM0Qw
MDFGRDFGNyAvKiBGaWxlVGhyZWFkLmggaW4gSGVhZGVycyAqLywKIAkJCQlCQzVFQjY5RjBFODFE
QUVCMDBCMjU5NjUgLyogRmlsbExheWVyLmggaW4gSGVhZGVycyAqLywKIAkJCQk4NDVFNzJGODBG
RDI2MUVFMDBBODdENzkgLyogRmlsdGVyLmggaW4gSGVhZGVycyAqLywKIAkJCQkwOEM5MjUxQTBG
Q0M3QzRBMDA0ODBERUMgLyogRmlsdGVyRWZmZWN0LmggaW4gSGVhZGVycyAqLywKQEAgLTI3ODIw
LDcgKzI3ODEzLDYgQEAKIAkJCQkyNkMxN0EzRjE0OTFEMkQ0MDBEMTJCQTIgLyogRmlsZVN5c3Rl
bUlPUy5tbSBpbiBTb3VyY2VzICovLAogCQkJCTUxNEIzRjc2MEM3MjIwNTUwMDA1MzBERiAvKiBG
aWxlU3lzdGVtTWFjLm1tIGluIFNvdXJjZXMgKi8sCiAJCQkJNTE2MDMwMEIwQ0M0MjUxMjAwQzhB
QzI1IC8qIEZpbGVTeXN0ZW1QT1NJWC5jcHAgaW4gU291cmNlcyAqLywKLQkJCQk5NzZENkM4RDEy
MkI4QTNEMDAxRkQxRjcgLyogRmlsZVRocmVhZC5jcHAgaW4gU291cmNlcyAqLywKIAkJCQlCQzVF
QjY5RTBFODFEQUVCMDBCMjU5NjUgLyogRmlsbExheWVyLmNwcCBpbiBTb3VyY2VzICovLAogCQkJ
CTA4QzkyNTE5MEZDQzdDNEEwMDQ4MERFQyAvKiBGaWx0ZXJFZmZlY3QuY3BwIGluIFNvdXJjZXMg
Ki8sCiAJCQkJMzEzMTNGNjUxNDQzQjM1RjAwNkUyQTkwIC8qIEZpbHRlckVmZmVjdFJlbmRlcmVy
LmNwcCBpbiBTb3VyY2VzICovLApkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvYmluZGluZ3Mv
Z2VuZXJpYy9BY3RpdmVET01DYWxsYmFjay5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9iaW5kaW5ncy9n
ZW5lcmljL0FjdGl2ZURPTUNhbGxiYWNrLmNwcAppbmRleCA4MWExMGMxNGIyZGI1ZjE3MWRjMDY4
OGM4MDYxZTczZDAxZmE2OWNmLi41YjE3NDFlMTMxODNiMGY2ZmVhODEyNmNjMjkxY2RmZjQ5MjA5
ZjI3IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9iaW5kaW5ncy9nZW5lcmljL0FjdGl2ZURP
TUNhbGxiYWNrLmNwcAorKysgYi9Tb3VyY2UvV2ViQ29yZS9iaW5kaW5ncy9nZW5lcmljL0FjdGl2
ZURPTUNhbGxiYWNrLmNwcApAQCAtMzEsOSArMzEsNyBAQAogI2luY2x1ZGUgImNvbmZpZy5oIgog
I2luY2x1ZGUgIkFjdGl2ZURPTUNhbGxiYWNrLmgiCiAKLSNpbmNsdWRlICJBY3RpdmVET01PYmpl
Y3QuaCIKICNpbmNsdWRlICJTY3JpcHRFeGVjdXRpb25Db250ZXh0LmgiCi0jaW5jbHVkZSAiV29y
a2VyR2xvYmFsU2NvcGUuaCIKIAogbmFtZXNwYWNlIFdlYkNvcmUgewogCmRpZmYgLS1naXQgYS9T
b3VyY2UvV2ViQ29yZS9kb20vQWN0aXZlRE9NT2JqZWN0LmNwcCBiL1NvdXJjZS9XZWJDb3JlL2Rv
bS9BY3RpdmVET01PYmplY3QuY3BwCmluZGV4IDI5OWExYTMwMGU0NjRhM2E2YjU5ZWY2MTgxNDA0
YjZhYThiMWVlZGIuLmMzMjY3MWIxMDE4MGY4NDBmZTEyYTNhZjA3NWMxMWY5MjllODEyZDUgMTAw
NjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL2RvbS9BY3RpdmVET01PYmplY3QuY3BwCisrKyBiL1Nv
dXJjZS9XZWJDb3JlL2RvbS9BY3RpdmVET01PYmplY3QuY3BwCkBAIC0yOCw4ICsyOCw2IEBACiAj
aW5jbHVkZSAiQWN0aXZlRE9NT2JqZWN0LmgiCiAKICNpbmNsdWRlICJTY3JpcHRFeGVjdXRpb25D
b250ZXh0LmgiCi0jaW5jbHVkZSAiV29ya2VyR2xvYmFsU2NvcGUuaCIKLSNpbmNsdWRlICJXb3Jr
ZXJUaHJlYWQuaCIKIAogbmFtZXNwYWNlIFdlYkNvcmUgewogCmRpZmYgLS1naXQgYS9Tb3VyY2Uv
V2ViQ29yZS9maWxlYXBpL0FzeW5jRmlsZVN0cmVhbS5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9maWxl
YXBpL0FzeW5jRmlsZVN0cmVhbS5jcHAKaW5kZXggNWEzOTFmODdjZWUxNGNlNjcxODgzYjQwMzEw
NzIyMjBhMjQ5NjE3YS4uOTc5YTMwZmM2Yjc4YjMyZDM2MTZmZDQ0ODNhMTg5YmRlYTFiNDA0MCAx
MDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvZmlsZWFwaS9Bc3luY0ZpbGVTdHJlYW0uY3BwCisr
KyBiL1NvdXJjZS9XZWJDb3JlL2ZpbGVhcGkvQXN5bmNGaWxlU3RyZWFtLmNwcApAQCAtMSw2ICsx
LDYgQEAKIC8qCiAgKiBDb3B5cmlnaHQgKEMpIDIwMTAgR29vZ2xlIEluYy4gIEFsbCByaWdodHMg
cmVzZXJ2ZWQuCi0gKiBDb3B5cmlnaHQgKEMpIDIwMTIgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJl
c2VydmVkLgorICogQ29weXJpZ2h0IChDKSAyMDEyLCAyMDE0IEFwcGxlIEluYy4gQWxsIHJpZ2h0
cyByZXNlcnZlZC4KICAqCiAgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQg
YmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKICAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1p
dHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucyBhcmUKQEAgLTMwLDE2
MiArMzAsMTc5IEBACiAgKi8KIAogI2luY2x1ZGUgImNvbmZpZy5oIgotCiAjaW5jbHVkZSAiQXN5
bmNGaWxlU3RyZWFtLmgiCiAKLSNpbmNsdWRlICJCbG9iLmgiCiAjaW5jbHVkZSAiRmlsZVN0cmVh
bS5oIgogI2luY2x1ZGUgIkZpbGVTdHJlYW1DbGllbnQuaCIKLSNpbmNsdWRlICJGaWxlVGhyZWFk
LmgiCisjaW5jbHVkZSAiVVJMLmgiCisjaW5jbHVkZSA8d3RmL0F1dG9kcmFpbmVkUG9vbC5oPgog
I2luY2x1ZGUgPHd0Zi9NYWluVGhyZWFkLmg+Ci0jaW5jbHVkZSA8d3RmL3RleHQvV1RGU3RyaW5n
Lmg+Ci0KLSNpZiBQTEFURk9STShJT1MpCi0jaW5jbHVkZSAiV2ViQ29yZVRocmVhZC5oIgotI2Vu
ZGlmCisjaW5jbHVkZSA8d3RmL01lc3NhZ2VRdWV1ZS5oPgorI2luY2x1ZGUgPHd0Zi9OZXZlckRl
c3Ryb3llZC5oPgogCiBuYW1lc3BhY2UgV2ViQ29yZSB7CiAKLXN0YXRpYyBQYXNzUmVmUHRyPEZp
bGVUaHJlYWQ+IGNyZWF0ZUZpbGVUaHJlYWQoKQotewotICAgIFJlZlB0cjxGaWxlVGhyZWFkPiB0
aHJlYWQgPSBGaWxlVGhyZWFkOjpjcmVhdGUoKTsKLSAgICBpZiAoIXRocmVhZC0+c3RhcnQoKSkK
LSAgICAgICAgcmV0dXJuIDA7Ci0gICAgcmV0dXJuIHRocmVhZC5yZWxlYXNlKCk7Ci19CitzdHJ1
Y3QgQXN5bmNGaWxlU3RyZWFtOjpJbnRlcm5hbHMgeworICAgIGV4cGxpY2l0IEludGVybmFscyhG
aWxlU3RyZWFtQ2xpZW50Jik7CiAKLXN0YXRpYyBGaWxlVGhyZWFkKiBmaWxlVGhyZWFkKCkKKyAg
ICBGaWxlU3RyZWFtIHN0cmVhbTsKKyAgICBGaWxlU3RyZWFtQ2xpZW50JiBjbGllbnQ7CisgICAg
c3RkOjphdG9taWNfYm9vbCBkZXN0cm95ZWQ7Cit9OworCitpbmxpbmUgQXN5bmNGaWxlU3RyZWFt
OjpJbnRlcm5hbHM6OkludGVybmFscyhGaWxlU3RyZWFtQ2xpZW50JiBjbGllbnQpCisgICAgOiBj
bGllbnQoY2xpZW50KQorICAgICwgZGVzdHJveWVkKGZhbHNlKQogewotICAgIEFTU0VSVChpc01h
aW5UaHJlYWQoKSk7Ci0gICAgc3RhdGljIEZpbGVUaHJlYWQqIHRocmVhZCA9IGNyZWF0ZUZpbGVU
aHJlYWQoKS5sZWFrUmVmKCk7Ci0gICAgcmV0dXJuIHRocmVhZDsKIH0KIAotaW5saW5lIEFzeW5j
RmlsZVN0cmVhbTo6QXN5bmNGaWxlU3RyZWFtKEZpbGVTdHJlYW1DbGllbnQqIGNsaWVudCkKLSAg
ICA6IG1fc3RyZWFtKEZpbGVTdHJlYW06OmNyZWF0ZSgpKQotICAgICwgbV9jbGllbnQoY2xpZW50
KQorc3RhdGljIHZvaWQgY2FsbE9uRmlsZVRocmVhZChzdGQ6OmZ1bmN0aW9uPHZvaWQoKT4mJiBm
dW5jdGlvbikKIHsKICAgICBBU1NFUlQoaXNNYWluVGhyZWFkKCkpOwotfQorICAgIEFTU0VSVChm
dW5jdGlvbik7CiAKLVBhc3NSZWZQdHI8QXN5bmNGaWxlU3RyZWFtPiBBc3luY0ZpbGVTdHJlYW06
OmNyZWF0ZShGaWxlU3RyZWFtQ2xpZW50KiBjbGllbnQpCi17Ci0gICAgUmVmUHRyPEFzeW5jRmls
ZVN0cmVhbT4gcHJveHkgPSBhZG9wdFJlZihuZXcgQXN5bmNGaWxlU3RyZWFtKGNsaWVudCkpOwor
ICAgIHN0YXRpYyBOZXZlckRlc3Ryb3llZDxNZXNzYWdlUXVldWU8c3RkOjpmdW5jdGlvbjx2b2lk
KCk+Pj4gcXVldWU7CiAKLSAgICAvLyBIb2xkIGEgcmVmZXJlbmNlIHNvIHRoYXQgdGhlIGluc3Rh
bmNlIHdpbGwgbm90IGdldCBkZWxldGVkIHdoaWxlIHRoZXJlIGFyZSB0YXNrcyBvbiB0aGUgZmls
ZSB0aHJlYWQuCi0gICAgLy8gVGhpcyBpcyBiYWxhbmNlZCBieSB0aGUgZGVyZWYgaW4gZGVyZWZQ
cm94eU9uQ29udGV4dCBiZWxvdy4KLSAgICBwcm94eS0+cmVmKCk7CisgICAgc3RhdGljIHN0ZDo6
b25jZV9mbGFnIGNyZWF0ZUZpbGVUaHJlYWRPbmNlOworICAgIHN0ZDo6Y2FsbF9vbmNlKGNyZWF0
ZUZpbGVUaHJlYWRPbmNlLCBbXSB7CisgICAgICAgIGNyZWF0ZVRocmVhZCgiV2ViQ29yZTogQXN5
bmNGaWxlU3RyZWFtIiwgW10geworICAgICAgICAgICAgZm9yICg7OykgeworICAgICAgICAgICAg
ICAgIEF1dG9kcmFpbmVkUG9vbCBwb29sOwogCi0gICAgQXN5bmNGaWxlU3RyZWFtKiBwcm94eVB0
ciA9IHByb3h5LmdldCgpOwotICAgIGZpbGVUaHJlYWQoKS0+cG9zdFRhc2soeyBwcm94eVB0ciwg
Wz1dIHsKLSAgICAgICAgLy8gRklYTUU6IEl0IGlzIG5vdCBjb3JyZWN0IHRvIGNoZWNrIG1fY2xp
ZW50IGZyb20gYSBzZWNvbmRhcnkgdGhyZWFkIC0gc3RvcCgpIGNvdWxkIGJlIHJhY2luZyB3aXRo
IHRoaXMgY2hlY2suCi0gICAgICAgIGlmICghcHJveHlQdHItPmNsaWVudCgpKQotICAgICAgICAg
ICAgcmV0dXJuOworICAgICAgICAgICAgICAgIGF1dG8gZnVuY3Rpb24gPSBxdWV1ZS5nZXQoKS53
YWl0Rm9yTWVzc2FnZSgpOworCisgICAgICAgICAgICAgICAgLy8gVGhpcyBjYW4gbmV2ZXIgYmUg
bnVsbCBiZWNhdXNlIHdlIG5ldmVyIGtpbGwgdGhlIE1lc3NhZ2VRdWV1ZS4KKyAgICAgICAgICAg
ICAgICBBU1NFUlQoZnVuY3Rpb24pOworCisgICAgICAgICAgICAgICAgLy8gVGhpcyBjYW4gYmV2
ZXIgYmUgbnVsbCBiZWNhdXNlIHdlIG5ldmVyIHF1ZXVlIGEgZnVuY3Rpb24gdGhhdCBpcyBudWxs
LgorICAgICAgICAgICAgICAgIEFTU0VSVCgqZnVuY3Rpb24pOwogCi0gICAgICAgIHByb3h5UHRy
LT5tX3N0cmVhbS0+c3RhcnQoKTsKLSAgICAgICAgY2FsbE9uTWFpblRocmVhZChbcHJveHlQdHJd
IHsKLSAgICAgICAgICAgIGlmIChwcm94eVB0ci0+Y2xpZW50KCkpCi0gICAgICAgICAgICAgICAg
cHJveHlQdHItPmNsaWVudCgpLT5kaWRTdGFydCgpOworICAgICAgICAgICAgICAgICgqZnVuY3Rp
b24pKCk7CisgICAgICAgICAgICB9CiAgICAgICAgIH0pOwotICAgIH0gfSk7CisgICAgfSk7CiAK
LSAgICByZXR1cm4gcHJveHkucmVsZWFzZSgpOworICAgIHF1ZXVlLmdldCgpLmFwcGVuZChzdGQ6
Om1ha2VfdW5pcXVlPHN0ZDo6ZnVuY3Rpb248dm9pZCgpPj4oV1RGOjptb3ZlKGZ1bmN0aW9uKSkp
OworfQorCitBc3luY0ZpbGVTdHJlYW06OkFzeW5jRmlsZVN0cmVhbShGaWxlU3RyZWFtQ2xpZW50
JiBjbGllbnQpCisgICAgOiBtX2ludGVybmFscyhzdGQ6Om1ha2VfdW5pcXVlPEludGVybmFscz4o
Y2xpZW50KSkKK3sKKyAgICBBU1NFUlQoaXNNYWluVGhyZWFkKCkpOwogfQogCiBBc3luY0ZpbGVT
dHJlYW06On5Bc3luY0ZpbGVTdHJlYW0oKQogeworICAgIEFTU0VSVChpc01haW5UaHJlYWQoKSk7
CisKKyAgICAvLyBSZWxlYXNlIHNvIHRoYXQgd2UgY2FuIGNvbnRyb2wgdGhlIHRpbWluZyBvZiBk
ZWxldGlvbiBiZWxvdy4KKyAgICBhdXRvJiBpbnRlcm5hbHMgPSAqbV9pbnRlcm5hbHMucmVsZWFz
ZSgpOworCisgICAgLy8gU2V0IGZsYWcgdG8gcHJldmVudCBjbGllbnQgY2FsbGJhY2tzIGFuZCBh
bHNvIHByZXZlbnQgcXVldWVkIG9wZXJhdGlvbnMgZnJvbSBzdGFydGluZy4KKyAgICBpbnRlcm5h
bHMuZGVzdHJveWVkID0gdHJ1ZTsKKworICAgIC8vIENhbGwgdGhyb3VnaCBmaWxlIHRocmVhZCBh
bmQgYmFjayB0byBtYWluIHRocmVhZCB0byBtYWtlIHN1cmUgZGVsZXRpb24gaGFwcGVucworICAg
IC8vIGFmdGVyIGFsbCBmaWxlIHRocmVhZCBmdW5jdGlvbnMgYW5kIGFsbCBtYWluIHRocmVhZCBm
dW5jdGlvbnMgY2FsbGVkIGZyb20gdGhlbS4KKyAgICBjYWxsT25GaWxlVGhyZWFkKFsmaW50ZXJu
YWxzXSB7CisgICAgICAgIGNhbGxPbk1haW5UaHJlYWQoWyZpbnRlcm5hbHNdIHsKKyAgICAgICAg
ICAgIGRlbGV0ZSAmaW50ZXJuYWxzOworICAgICAgICB9KTsKKyAgICB9KTsKIH0KIAotdm9pZCBB
c3luY0ZpbGVTdHJlYW06OnN0b3AoKQordm9pZCBBc3luY0ZpbGVTdHJlYW06OnBlcmZvcm0oc3Rk
OjpmdW5jdGlvbjxzdGQ6OmZ1bmN0aW9uPHZvaWQoRmlsZVN0cmVhbUNsaWVudCYpPihGaWxlU3Ry
ZWFtJik+IG9wZXJhdGlvbikKIHsKLSAgICAvLyBDbGVhciB0aGUgY2xpZW50IHNvIHRoYXQgd2Ug
d29uJ3QgYmUgaW52b2tpbmcgY2FsbGJhY2tzIG9uIHRoZSBjbGllbnQuCi0gICAgc2V0Q2xpZW50
KDApOwotCi0gICAgZmlsZVRocmVhZCgpLT51bnNjaGVkdWxlVGFza3MobV9zdHJlYW0uZ2V0KCkp
OwotICAgIGZpbGVUaHJlYWQoKS0+cG9zdFRhc2soeyB0aGlzLCBbdGhpc10gewotICAgICAgICBt
X3N0cmVhbS0+c3RvcCgpOwotICAgICAgICBjYWxsT25NYWluVGhyZWFkKFt0aGlzXSB7Ci0gICAg
ICAgICAgICBBU1NFUlQoaGFzT25lUmVmKCkpOwotICAgICAgICAgICAgZGVyZWYoKTsKKyAgICBh
dXRvJiBpbnRlcm5hbHMgPSAqbV9pbnRlcm5hbHM7CisgICAgY2FsbE9uRmlsZVRocmVhZChbJmlu
dGVybmFscywgb3BlcmF0aW9uXSB7CisgICAgICAgIC8vIERvbid0IGRvIHRoZSBvcGVyYXRpb24g
aWYgc3RvcCB3YXMgYWxyZWFkeSBjYWxsZWQgb24gdGhlIG1haW4gdGhyZWFkLiBOb3RlIHRoYXQg
dGhlcmUgaXMKKyAgICAgICAgLy8gYSByYWNlIGhlcmUsIGJ1dCBzaW5jZSBza2lwcGluZyB0aGUg
b3BlcmF0aW9uIGlzIGFuIG9wdGltaXphdGlvbiBpdCdzIE9LIHRoYXQgd2UgY2FuJ3QKKyAgICAg
ICAgLy8gZ3VhcmFudGVlIGV4YWN0bHkgd2hpY2ggb3BlcmF0aW9ucyBhcmUgc2tpcHBlZC4gTm90
ZSB0aGF0IHRoaXMgaXMgYWxzbyB0aGUgb25seSByZWFzb24KKyAgICAgICAgLy8gd2UgdXNlIGFu
IGF0b21pY19ib29sIHJhdGhlciB0aGFuIGp1c3QgYSBib29sIGZvciBkZXN0cm95ZWQuCisgICAg
ICAgIGlmIChpbnRlcm5hbHMuZGVzdHJveWVkKQorICAgICAgICAgICAgcmV0dXJuOworICAgICAg
ICBhdXRvIG1haW5UaHJlYWRXb3JrID0gb3BlcmF0aW9uKGludGVybmFscy5zdHJlYW0pOworICAg
ICAgICBjYWxsT25NYWluVGhyZWFkKFsmaW50ZXJuYWxzLCBtYWluVGhyZWFkV29ya10geworICAg
ICAgICAgICAgaWYgKGludGVybmFscy5kZXN0cm95ZWQpCisgICAgICAgICAgICAgICAgcmV0dXJu
OworICAgICAgICAgICAgbWFpblRocmVhZFdvcmsoaW50ZXJuYWxzLmNsaWVudCk7CiAgICAgICAg
IH0pOwotICAgIH0gfSk7CisgICAgfSk7CiB9CiAKIHZvaWQgQXN5bmNGaWxlU3RyZWFtOjpnZXRT
aXplKGNvbnN0IFN0cmluZyYgcGF0aCwgZG91YmxlIGV4cGVjdGVkTW9kaWZpY2F0aW9uVGltZSkK
IHsKLSAgICBTdHJpbmcgcGF0aENvcHkgPSBwYXRoLmlzb2xhdGVkQ29weSgpOwotICAgIGZpbGVU
aHJlYWQoKS0+cG9zdFRhc2soeyB0aGlzLCBbdGhpcywgcGF0aENvcHksIGV4cGVjdGVkTW9kaWZp
Y2F0aW9uVGltZV0gewotICAgICAgICBsb25nIGxvbmcgc2l6ZSA9IG1fc3RyZWFtLT5nZXRTaXpl
KHBhdGhDb3B5LCBleHBlY3RlZE1vZGlmaWNhdGlvblRpbWUpOwotICAgICAgICBjYWxsT25NYWlu
VGhyZWFkKFt0aGlzLCBzaXplXSB7Ci0gICAgICAgICAgICBpZiAoY2xpZW50KCkpCi0gICAgICAg
ICAgICAgICAgY2xpZW50KCktPmRpZEdldFNpemUoc2l6ZSk7Ci0gICAgICAgIH0pOwotICAgIH0g
fSk7CisgICAgU3RyaW5nQ2FwdHVyZSBjYXB0dXJlZFBhdGgocGF0aCk7CisgICAgLy8gRklYTUU6
IEV4cGxpY2l0IHJldHVybiB0eXBlIGhlcmUgYW5kIGluIGFsbCB0aGUgb3RoZXIgY2FzZXMgbGlr
ZSB0aGlzIGJlbG93IGlzIGEgd29ya2Fyb3VuZCBmb3IgYSBkZWZpY2llbmN5CisgICAgLy8gaW4g
dGhlIFdpbmRvd3MgY29tcGlsZXIgYXQgdGhlIHRpbWUgb2YgdGhpcyB3cml0aW5nLiBDb3VsZCBy
ZW1vdmUgaXQgaWYgdGhhdCBpcyByZXNvbHZlZC4KKyAgICBwZXJmb3JtKFtjYXB0dXJlZFBhdGgs
IGV4cGVjdGVkTW9kaWZpY2F0aW9uVGltZV0oRmlsZVN0cmVhbSYgc3RyZWFtKSAtPiBzdGQ6OmZ1
bmN0aW9uPHZvaWQoRmlsZVN0cmVhbUNsaWVudCYpPiB7CisgICAgICAgIGxvbmcgbG9uZyBzaXpl
ID0gc3RyZWFtLmdldFNpemUoY2FwdHVyZWRQYXRoLnN0cmluZygpLCBleHBlY3RlZE1vZGlmaWNh
dGlvblRpbWUpOworICAgICAgICByZXR1cm4gW3NpemVdKEZpbGVTdHJlYW1DbGllbnQmIGNsaWVu
dCkgeworICAgICAgICAgICAgY2xpZW50LmRpZEdldFNpemUoc2l6ZSk7CisgICAgICAgIH07Cisg
ICAgfSk7CiB9CiAKIHZvaWQgQXN5bmNGaWxlU3RyZWFtOjpvcGVuRm9yUmVhZChjb25zdCBTdHJp
bmcmIHBhdGgsIGxvbmcgbG9uZyBvZmZzZXQsIGxvbmcgbG9uZyBsZW5ndGgpCiB7Ci0gICAgU3Ry
aW5nIHBhdGhDb3B5ID0gcGF0aC5pc29sYXRlZENvcHkoKTsKLSAgICBmaWxlVGhyZWFkKCktPnBv
c3RUYXNrKHsgdGhpcywgW3RoaXMsIHBhdGhDb3B5LCBvZmZzZXQsIGxlbmd0aF0gewotICAgICAg
ICBib29sIHN1Y2Nlc3MgPSBtX3N0cmVhbS0+b3BlbkZvclJlYWQocGF0aENvcHksIG9mZnNldCwg
bGVuZ3RoKTsKLSAgICAgICAgY2FsbE9uTWFpblRocmVhZChbdGhpcywgc3VjY2Vzc10gewotICAg
ICAgICAgICAgaWYgKGNsaWVudCgpKQotICAgICAgICAgICAgICAgIGNsaWVudCgpLT5kaWRPcGVu
KHN1Y2Nlc3MpOwotICAgICAgICB9KTsKLSAgICB9IH0pOworICAgIFN0cmluZ0NhcHR1cmUgY2Fw
dHVyZWRQYXRoKHBhdGgpOworICAgIC8vIEZJWE1FOiBFeHBsaWNpdCByZXR1cm4gdHlwZSBoZXJl
IGlzIGEgd29ya2Fyb3VuZCBmb3IgYSBkZWZpY2llbmN5IGluIHRoZSBXaW5kb3dzIGNvbXBpbGVy
IGF0IHRoZSB0aW1lIG9mIHRoaXMgd3JpdGluZy4KKyAgICBwZXJmb3JtKFtjYXB0dXJlZFBhdGgs
IG9mZnNldCwgbGVuZ3RoXShGaWxlU3RyZWFtJiBzdHJlYW0pIC0+IHN0ZDo6ZnVuY3Rpb248dm9p
ZChGaWxlU3RyZWFtQ2xpZW50Jik+IHsKKyAgICAgICAgYm9vbCBzdWNjZXNzID0gc3RyZWFtLm9w
ZW5Gb3JSZWFkKGNhcHR1cmVkUGF0aC5zdHJpbmcoKSwgb2Zmc2V0LCBsZW5ndGgpOworICAgICAg
ICByZXR1cm4gW3N1Y2Nlc3NdKEZpbGVTdHJlYW1DbGllbnQmIGNsaWVudCkgeworICAgICAgICAg
ICAgY2xpZW50LmRpZE9wZW4oc3VjY2Vzcyk7CisgICAgICAgIH07CisgICAgfSk7CiB9CiAKIHZv
aWQgQXN5bmNGaWxlU3RyZWFtOjpvcGVuRm9yV3JpdGUoY29uc3QgU3RyaW5nJiBwYXRoKQogewot
ICAgIFN0cmluZyBwYXRoQ29weSA9IHBhdGguaXNvbGF0ZWRDb3B5KCk7Ci0gICAgZmlsZVRocmVh
ZCgpLT5wb3N0VGFzayh7IHRoaXMsIFt0aGlzLCBwYXRoQ29weV0gewotICAgICAgICBib29sIHN1
Y2Nlc3MgPSBtX3N0cmVhbS0+b3BlbkZvcldyaXRlKHBhdGhDb3B5KTsKLSAgICAgICAgY2FsbE9u
TWFpblRocmVhZChbdGhpcywgc3VjY2Vzc10gewotICAgICAgICAgICAgaWYgKGNsaWVudCgpKQot
ICAgICAgICAgICAgICAgIGNsaWVudCgpLT5kaWRPcGVuKHN1Y2Nlc3MpOwotICAgICAgICB9KTsK
LSAgICB9IH0pOworICAgIFN0cmluZ0NhcHR1cmUgY2FwdHVyZWRQYXRoKHBhdGgpOworICAgIHBl
cmZvcm0oW2NhcHR1cmVkUGF0aF0oRmlsZVN0cmVhbSYgc3RyZWFtKSAtPiBzdGQ6OmZ1bmN0aW9u
PHZvaWQoRmlsZVN0cmVhbUNsaWVudCYpPiB7CisgICAgICAgIGJvb2wgc3VjY2VzcyA9IHN0cmVh
bS5vcGVuRm9yV3JpdGUoY2FwdHVyZWRQYXRoLnN0cmluZygpKTsKKyAgICAgICAgcmV0dXJuIFtz
dWNjZXNzXShGaWxlU3RyZWFtQ2xpZW50JiBjbGllbnQpIHsKKyAgICAgICAgICAgIGNsaWVudC5k
aWRPcGVuKHN1Y2Nlc3MpOworICAgICAgICB9OworICAgIH0pOwogfQogCiB2b2lkIEFzeW5jRmls
ZVN0cmVhbTo6Y2xvc2UoKQogewotICAgIGZpbGVUaHJlYWQoKS0+cG9zdFRhc2soe3RoaXMsIFt0
aGlzXSB7Ci0gICAgICAgIG1fc3RyZWFtLT5jbG9zZSgpOwotICAgIH0gfSk7CisgICAgYXV0byYg
aW50ZXJuYWxzID0gKm1faW50ZXJuYWxzOworICAgIGNhbGxPbkZpbGVUaHJlYWQoWyZpbnRlcm5h
bHNdIHsKKyAgICAgICAgaW50ZXJuYWxzLnN0cmVhbS5jbG9zZSgpOworICAgIH0pOwogfQogCiB2
b2lkIEFzeW5jRmlsZVN0cmVhbTo6cmVhZChjaGFyKiBidWZmZXIsIGludCBsZW5ndGgpCiB7Ci0g
ICAgZmlsZVRocmVhZCgpLT5wb3N0VGFzayh7IHRoaXMsIFt0aGlzLCBidWZmZXIsIGxlbmd0aF0g
ewotICAgICAgICBpbnQgYnl0ZXNSZWFkID0gbV9zdHJlYW0tPnJlYWQoYnVmZmVyLCBsZW5ndGgp
OwotICAgICAgICBjYWxsT25NYWluVGhyZWFkKFt0aGlzLCBieXRlc1JlYWRdIHsKLSAgICAgICAg
ICAgIGlmIChjbGllbnQoKSkKLSAgICAgICAgICAgICAgICBjbGllbnQoKS0+ZGlkUmVhZChieXRl
c1JlYWQpOwotICAgICAgICB9KTsKLSAgICB9IH0pOworICAgIHBlcmZvcm0oW2J1ZmZlciwgbGVu
Z3RoXShGaWxlU3RyZWFtJiBzdHJlYW0pIC0+IHN0ZDo6ZnVuY3Rpb248dm9pZChGaWxlU3RyZWFt
Q2xpZW50Jik+IHsKKyAgICAgICAgaW50IGJ5dGVzUmVhZCA9IHN0cmVhbS5yZWFkKGJ1ZmZlciwg
bGVuZ3RoKTsKKyAgICAgICAgcmV0dXJuIFtieXRlc1JlYWRdKEZpbGVTdHJlYW1DbGllbnQmIGNs
aWVudCkgeworICAgICAgICAgICAgY2xpZW50LmRpZFJlYWQoYnl0ZXNSZWFkKTsKKyAgICAgICAg
fTsKKyAgICB9KTsKIH0KIAogdm9pZCBBc3luY0ZpbGVTdHJlYW06OndyaXRlKGNvbnN0IFVSTCYg
YmxvYlVSTCwgbG9uZyBsb25nIHBvc2l0aW9uLCBpbnQgbGVuZ3RoKQogewotICAgIFVSTCBibG9i
VVJMQ29weSA9IGJsb2JVUkwuY29weSgpOwotICAgIGZpbGVUaHJlYWQoKS0+cG9zdFRhc2soeyB0
aGlzLCBbdGhpcywgYmxvYlVSTENvcHksIHBvc2l0aW9uLCBsZW5ndGhdIHsKLSAgICAgICAgaW50
IGJ5dGVzV3JpdHRlbiA9IG1fc3RyZWFtLT53cml0ZShibG9iVVJMQ29weSwgcG9zaXRpb24sIGxl
bmd0aCk7Ci0gICAgICAgIGNhbGxPbk1haW5UaHJlYWQoW3RoaXMsIGJ5dGVzV3JpdHRlbl0gewot
ICAgICAgICAgICAgaWYgKGNsaWVudCgpKQotICAgICAgICAgICAgICAgIGNsaWVudCgpLT5kaWRX
cml0ZShieXRlc1dyaXR0ZW4pOwotICAgICAgICB9KTsKLSAgICB9IH0pOworICAgIC8vIEZJWE1F
OiBXb3VsZCBiZSBtb3JlIGVsZWdhbnQgdG8gaGF2ZSBhIFVSTENhcHR1cmUgZm9yIGNhc2VzIGxp
a2UgdGhpcyB0byBhdm9pZCByZS1wYXJzaW5nIHRoZSBVUkwuCisgICAgU3RyaW5nQ2FwdHVyZSBj
YXB0dXJlZFVSTChibG9iVVJMLnN0cmluZygpKTsKKyAgICBwZXJmb3JtKFtjYXB0dXJlZFVSTCwg
cG9zaXRpb24sIGxlbmd0aF0oRmlsZVN0cmVhbSYgc3RyZWFtKSAtPiBzdGQ6OmZ1bmN0aW9uPHZv
aWQoRmlsZVN0cmVhbUNsaWVudCYpPiB7CisgICAgICAgIGludCBieXRlc1dyaXR0ZW4gPSBzdHJl
YW0ud3JpdGUoVVJMKFBhcnNlZFVSTFN0cmluZywgY2FwdHVyZWRVUkwuc3RyaW5nKCkpLCBwb3Np
dGlvbiwgbGVuZ3RoKTsKKyAgICAgICAgcmV0dXJuIFtieXRlc1dyaXR0ZW5dKEZpbGVTdHJlYW1D
bGllbnQmIGNsaWVudCkgeworICAgICAgICAgICAgY2xpZW50LmRpZFdyaXRlKGJ5dGVzV3JpdHRl
bik7CisgICAgICAgIH07CisgICAgfSk7CiB9CiAKIHZvaWQgQXN5bmNGaWxlU3RyZWFtOjp0cnVu
Y2F0ZShsb25nIGxvbmcgcG9zaXRpb24pCiB7Ci0gICAgZmlsZVRocmVhZCgpLT5wb3N0VGFzayh7
IHRoaXMsIFt0aGlzLCBwb3NpdGlvbl0gewotICAgICAgICBib29sIHN1Y2Nlc3MgPSBtX3N0cmVh
bS0+dHJ1bmNhdGUocG9zaXRpb24pOwotICAgICAgICBjYWxsT25NYWluVGhyZWFkKFt0aGlzLCBz
dWNjZXNzXSB7Ci0gICAgICAgICAgICBpZiAoY2xpZW50KCkpCi0gICAgICAgICAgICAgICAgY2xp
ZW50KCktPmRpZFRydW5jYXRlKHN1Y2Nlc3MpOwotICAgICAgICB9KTsKLSAgICB9IH0pOworICAg
IHBlcmZvcm0oW3Bvc2l0aW9uXShGaWxlU3RyZWFtJiBzdHJlYW0pIC0+IHN0ZDo6ZnVuY3Rpb248
dm9pZChGaWxlU3RyZWFtQ2xpZW50Jik+IHsKKyAgICAgICAgYm9vbCBzdWNjZXNzID0gc3RyZWFt
LnRydW5jYXRlKHBvc2l0aW9uKTsKKyAgICAgICAgcmV0dXJuIFtzdWNjZXNzXShGaWxlU3RyZWFt
Q2xpZW50JiBjbGllbnQpIHsKKyAgICAgICAgICAgIGNsaWVudC5kaWRUcnVuY2F0ZShzdWNjZXNz
KTsKKyAgICAgICAgfTsKKyAgICB9KTsKIH0KIAogfSAvLyBuYW1lc3BhY2UgV2ViQ29yZQpkaWZm
IC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvZmlsZWFwaS9Bc3luY0ZpbGVTdHJlYW0uaCBiL1NvdXJj
ZS9XZWJDb3JlL2ZpbGVhcGkvQXN5bmNGaWxlU3RyZWFtLmgKaW5kZXggYjYwYmM2MDcxNTU1MjZm
ODM2YTgwMjAwYTk4ZTAwNzBjZWNjZWUyMy4uNDI4ZjczMGVlNDc2Y2ViYmI0NzkxZGI3ZjllNTk1
ZWUyOTcwYmVjNyAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvZmlsZWFwaS9Bc3luY0ZpbGVT
dHJlYW0uaAorKysgYi9Tb3VyY2UvV2ViQ29yZS9maWxlYXBpL0FzeW5jRmlsZVN0cmVhbS5oCkBA
IC0xLDYgKzEsNiBAQAogLyoKLSAqIENvcHlyaWdodCAoQykgMjAxMCBHb29nbGUgSW5jLiAgQWxs
IHJpZ2h0cyByZXNlcnZlZC4KLSAqIENvcHlyaWdodCAoQykgMjAxMCwgMjAxMiBBcHBsZSBJbmMu
IEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKiBDb3B5cmlnaHQgKEMpIDIwMTAgR29vZ2xlIEluYy4g
QWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqIENvcHlyaWdodCAoQykgMjAxMCwgMjAxMiwgMjAxNCBB
cHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCiAgKgogICogUmVkaXN0cmlidXRpb24gYW5k
IHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CiAgKiBtb2Rp
ZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRp
dGlvbnMgYXJlCkBAIC0zMiw5ICszMiw4IEBACiAjaWZuZGVmIEFzeW5jRmlsZVN0cmVhbV9oCiAj
ZGVmaW5lIEFzeW5jRmlsZVN0cmVhbV9oCiAKKyNpbmNsdWRlIDxmdW5jdGlvbmFsPgogI2luY2x1
ZGUgPHd0Zi9Gb3J3YXJkLmg+Ci0jaW5jbHVkZSA8d3RmL1JlZkNvdW50ZWQuaD4KLSNpbmNsdWRl
IDx3dGYvUmVmUHRyLmg+CiAKIG5hbWVzcGFjZSBXZWJDb3JlIHsKIApAQCAtNDIsOSArNDEsOSBA
QCBjbGFzcyBGaWxlU3RyZWFtQ2xpZW50OwogY2xhc3MgRmlsZVN0cmVhbTsKIGNsYXNzIFVSTDsK
IAotY2xhc3MgQXN5bmNGaWxlU3RyZWFtIDogcHVibGljIFJlZkNvdW50ZWQ8QXN5bmNGaWxlU3Ry
ZWFtPiB7CitjbGFzcyBBc3luY0ZpbGVTdHJlYW0gewogcHVibGljOgotICAgIHN0YXRpYyBQYXNz
UmVmUHRyPEFzeW5jRmlsZVN0cmVhbT4gY3JlYXRlKEZpbGVTdHJlYW1DbGllbnQqKTsKKyAgICBl
eHBsaWNpdCBBc3luY0ZpbGVTdHJlYW0oRmlsZVN0cmVhbUNsaWVudCYpOwogICAgIH5Bc3luY0Zp
bGVTdHJlYW0oKTsKIAogICAgIHZvaWQgZ2V0U2l6ZShjb25zdCBTdHJpbmcmIHBhdGgsIGRvdWJs
ZSBleHBlY3RlZE1vZGlmaWNhdGlvblRpbWUpOwpAQCAtNTUsMTggKzU0LDEyIEBAIHB1YmxpYzoK
ICAgICB2b2lkIHdyaXRlKGNvbnN0IFVSTCYgYmxvYlVSTCwgbG9uZyBsb25nIHBvc2l0aW9uLCBp
bnQgbGVuZ3RoKTsKICAgICB2b2lkIHRydW5jYXRlKGxvbmcgbG9uZyBwb3NpdGlvbik7CiAKLSAg
ICAvLyBTdG9wcyB0aGUgcHJveHkgYW5kIHNjaGVkdWxlcyBpdCB0byBiZSBkZXN0cnVjdGVkLiBB
bGwgdGhlIHBlbmRpbmcgdGFza3Mgd2lsbCBiZSBhYm9ydGVkIGFuZCB0aGUgZmlsZSBzdHJlYW0g
d2lsbCBiZSBjbG9zZWQuCi0gICAgLy8gTm90ZTogdGhlIGNhbGxlciBzaG91bGQgZGVyZWYgdGhl
IGluc3RhbmNlIGltbWVkaWF0ZWx5IGFmdGVyIGNhbGxpbmcgc3RvcCgpLgotICAgIHZvaWQgc3Rv
cCgpOwotCi0gICAgRmlsZVN0cmVhbUNsaWVudCogY2xpZW50KCkgY29uc3QgeyByZXR1cm4gbV9j
bGllbnQ7IH0KLSAgICB2b2lkIHNldENsaWVudChGaWxlU3RyZWFtQ2xpZW50KiBjbGllbnQpIHsg
bV9jbGllbnQgPSBjbGllbnQ7IH0KLQogcHJpdmF0ZToKLSAgICBBc3luY0ZpbGVTdHJlYW0oRmls
ZVN0cmVhbUNsaWVudCopOworICAgIHZvaWQgc3RhcnQoKTsKKyAgICB2b2lkIHBlcmZvcm0oc3Rk
OjpmdW5jdGlvbjxzdGQ6OmZ1bmN0aW9uPHZvaWQoRmlsZVN0cmVhbUNsaWVudCYpPihGaWxlU3Ry
ZWFtJik+KTsKIAotICAgIFJlZlB0cjxGaWxlU3RyZWFtPiBtX3N0cmVhbTsKLSAgICBGaWxlU3Ry
ZWFtQ2xpZW50KiBtX2NsaWVudDsKKyAgICBzdHJ1Y3QgSW50ZXJuYWxzOworICAgIHN0ZDo6dW5p
cXVlX3B0cjxJbnRlcm5hbHM+IG1faW50ZXJuYWxzOwogfTsKIAogfSAvLyBuYW1lc3BhY2UgV2Vi
Q29yZQpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvZmlsZWFwaS9GaWxlVGhyZWFkLmNwcCBi
L1NvdXJjZS9XZWJDb3JlL2ZpbGVhcGkvRmlsZVRocmVhZC5jcHAKZGVsZXRlZCBmaWxlIG1vZGUg
MTAwNjQ0CmluZGV4IDM0ZWE1ZDdlMTE0MGZkNGU0NWNiNzAyZWZmZjQ2NjM0NDk4NTliN2EuLjAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAKLS0tIGEvU291cmNlL1dlYkNv
cmUvZmlsZWFwaS9GaWxlVGhyZWFkLmNwcAorKysgL2Rldi9udWxsCkBAIC0xLDExMyArMCwwIEBA
Ci0vKgotICogQ29weXJpZ2h0IChDKSAyMDEwIEdvb2dsZSBJbmMuICBBbGwgcmlnaHRzIHJlc2Vy
dmVkLgotICoKLSAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkg
Zm9ybXMsIHdpdGggb3Igd2l0aG91dAotICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHBy
b3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zIGFyZQotICogbWV0OgotICoKLSAq
ICAgICAqIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJv
dmUgY29weXJpZ2h0Ci0gKiBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUg
Zm9sbG93aW5nIGRpc2NsYWltZXIuCi0gKiAgICAgKiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5
IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlCi0gKiBjb3B5cmlnaHQgbm90aWNlLCB0aGlz
IGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyCi0gKiBpbiB0
aGUgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhl
Ci0gKiBkaXN0cmlidXRpb24uCi0gKiAgICAgKiBOZWl0aGVyIHRoZSBuYW1lIG9mIEdvb2dsZSBJ
bmMuIG5vciB0aGUgbmFtZXMgb2YgaXRzCi0gKiBjb250cmlidXRvcnMgbWF5IGJlIHVzZWQgdG8g
ZW5kb3JzZSBvciBwcm9tb3RlIHByb2R1Y3RzIGRlcml2ZWQgZnJvbQotICogdGhpcyBzb2Z0d2Fy
ZSB3aXRob3V0IHNwZWNpZmljIHByaW9yIHdyaXR0ZW4gcGVybWlzc2lvbi4KLSAqCi0gKiBUSElT
IFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIFRIRSBDT1BZUklHSFQgSE9MREVSUyBBTkQgQ09OVFJJ
QlVUT1JTCi0gKiAiQVMgSVMiIEFORCBBTlkgRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMs
IElOQ0xVRElORywgQlVUIE5PVAotICogTElNSVRFRCBUTywgVEhFIElNUExJRUQgV0FSUkFOVElF
UyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SCi0gKiBBIFBBUlRJQ1VMQVIgUFVS
UE9TRSBBUkUgRElTQ0xBSU1FRC4gSU4gTk8gRVZFTlQgU0hBTEwgVEhFIENPUFlSSUdIVAotICog
T1dORVIgT1IgQ09OVFJJQlVUT1JTIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1Qs
IElOQ0lERU5UQUwsCi0gKiBTUEVDSUFMLCBFWEVNUExBUlksIE9SIENPTlNFUVVFTlRJQUwgREFN
QUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UCi0gKiBMSU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBPRiBT
VUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwKLSAqIERBVEEsIE9SIFBS
T0ZJVFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFO
WQotICogVEhFT1JZIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTiBDT05UUkFDVCwgU1RSSUNUIExJ
QUJJTElUWSwgT1IgVE9SVAotICogKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkg
QVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFCi0gKiBPRiBUSElTIFNPRlRXQVJFLCBF
VkVOIElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgotICovCi0K
LSNpbmNsdWRlICJjb25maWcuaCIKLQotI2luY2x1ZGUgIkZpbGVUaHJlYWQuaCIKLQotI2luY2x1
ZGUgIkxvZ2dpbmcuaCIKLSNpbmNsdWRlIDx3dGYvQXV0b2RyYWluZWRQb29sLmg+Ci0KLW5hbWVz
cGFjZSBXZWJDb3JlIHsKLQotRmlsZVRocmVhZDo6RmlsZVRocmVhZCgpCi0gICAgOiBtX3RocmVh
ZElEKDApCi17Ci0gICAgbV9zZWxmUmVmID0gdGhpczsKLX0KLQotRmlsZVRocmVhZDo6fkZpbGVU
aHJlYWQoKQotewotICAgIEFTU0VSVChtX3F1ZXVlLmtpbGxlZCgpKTsKLX0KLQotYm9vbCBGaWxl
VGhyZWFkOjpzdGFydCgpCi17Ci0gICAgTXV0ZXhMb2NrZXIgbG9jayhtX3RocmVhZENyZWF0aW9u
TXV0ZXgpOwotICAgIGlmIChtX3RocmVhZElEKQotICAgICAgICByZXR1cm4gdHJ1ZTsKLSAgICBt
X3RocmVhZElEID0gY3JlYXRlVGhyZWFkKEZpbGVUaHJlYWQ6OmZpbGVUaHJlYWRTdGFydCwgdGhp
cywgIldlYkNvcmU6IEZpbGUiKTsKLSAgICByZXR1cm4gbV90aHJlYWRJRDsKLX0KLQotdm9pZCBG
aWxlVGhyZWFkOjpzdG9wKCkKLXsKLSAgICBtX3F1ZXVlLmtpbGwoKTsKLX0KLQotdm9pZCBGaWxl
VGhyZWFkOjpwb3N0VGFzayhUYXNrIHRhc2spCi17Ci0gICAgbV9xdWV1ZS5hcHBlbmQoc3RkOjpt
YWtlX3VuaXF1ZTxGaWxlVGhyZWFkOjpUYXNrPihXVEY6Om1vdmUodGFzaykpKTsKLX0KLQotY2xh
c3MgU2FtZUluc3RhbmNlUHJlZGljYXRlIHsKLXB1YmxpYzoKLSAgICBTYW1lSW5zdGFuY2VQcmVk
aWNhdGUoY29uc3Qgdm9pZCogaW5zdGFuY2UpIDogbV9pbnN0YW5jZShpbnN0YW5jZSkgeyB9Ci0g
ICAgYm9vbCBvcGVyYXRvcigpKEZpbGVUaHJlYWQ6OlRhc2smIHRhc2spIGNvbnN0IHsgcmV0dXJu
IHRhc2suaW5zdGFuY2UoKSA9PSBtX2luc3RhbmNlOyB9Ci1wcml2YXRlOgotICAgIGNvbnN0IHZv
aWQqIG1faW5zdGFuY2U7Ci19OwotCi12b2lkIEZpbGVUaHJlYWQ6OnVuc2NoZWR1bGVUYXNrcyhj
b25zdCB2b2lkKiBpbnN0YW5jZSkKLXsKLSAgICBTYW1lSW5zdGFuY2VQcmVkaWNhdGUgcHJlZGlj
YXRlKGluc3RhbmNlKTsKLSAgICBtX3F1ZXVlLnJlbW92ZUlmKHByZWRpY2F0ZSk7Ci19Ci0KLXZv
aWQgRmlsZVRocmVhZDo6ZmlsZVRocmVhZFN0YXJ0KHZvaWQqIGFyZykKLXsKLSAgICBGaWxlVGhy
ZWFkKiBmaWxlVGhyZWFkID0gc3RhdGljX2Nhc3Q8RmlsZVRocmVhZCo+KGFyZyk7Ci0gICAgZmls
ZVRocmVhZC0+cnVuTG9vcCgpOwotfQotCi12b2lkIEZpbGVUaHJlYWQ6OnJ1bkxvb3AoKQotewot
ICAgIHsKLSAgICAgICAgLy8gV2FpdCBmb3IgRmlsZVRocmVhZDo6c3RhcnQoKSB0byBjb21wbGV0
ZSB0byBoYXZlIG1fdGhyZWFkSUQKLSAgICAgICAgLy8gZXN0YWJsaXNoZWQgYmVmb3JlIHN0YXJ0
aW5nIHRoZSBtYWluIGxvb3AuCi0gICAgICAgIE11dGV4TG9ja2VyIGxvY2sobV90aHJlYWRDcmVh
dGlvbk11dGV4KTsKLSAgICAgICAgTE9HKEZpbGVBUEksICJTdGFydGVkIEZpbGVUaHJlYWQgJXAi
LCB0aGlzKTsKLSAgICB9Ci0KLSAgICB3aGlsZSAoYXV0byB0YXNrID0gbV9xdWV1ZS53YWl0Rm9y
TWVzc2FnZSgpKSB7Ci0gICAgICAgIEF1dG9kcmFpbmVkUG9vbCBwb29sOwotCi0gICAgICAgIHRh
c2stPnBlcmZvcm1UYXNrKCk7Ci0gICAgfQotCi0gICAgTE9HKEZpbGVBUEksICJBYm91dCB0byBk
ZXRhY2ggdGhyZWFkICVpIGFuZCBjbGVhciB0aGUgcmVmIHRvIEZpbGVUaHJlYWQgJXAsIHdoaWNo
IGN1cnJlbnRseSBoYXMgJWkgcmVmKHMpIiwgbV90aHJlYWRJRCwgdGhpcywgcmVmQ291bnQoKSk7
Ci0KLSAgICBkZXRhY2hUaHJlYWQobV90aHJlYWRJRCk7Ci0KLSAgICAvLyBDbGVhciB0aGUgc2Vs
ZiByZWZwdHIsIHBvc3NpYmx5IHJlc3VsdGluZyBpbiBkZWxldGlvbgotICAgIG1fc2VsZlJlZiA9
IDA7Ci19Ci0KLX0gLy8gbmFtZXNwYWNlIFdlYkNvcmUKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJD
b3JlL2ZpbGVhcGkvRmlsZVRocmVhZC5oIGIvU291cmNlL1dlYkNvcmUvZmlsZWFwaS9GaWxlVGhy
ZWFkLmgKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDlkZTJmZWRiZjE4MzgyMTIzNDdk
ZmFhOTIwZDVhMWU3NWFiZTc1ODQuLjAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAKLS0tIGEvU291cmNlL1dlYkNvcmUvZmlsZWFwaS9GaWxlVGhyZWFkLmgKKysrIC9kZXYv
bnVsbApAQCAtMSwxMDEgKzAsMCBAQAotLyoKLSAqIENvcHlyaWdodCAoQykgMjAxMCBHb29nbGUg
SW5jLiAgQWxsIHJpZ2h0cyByZXNlcnZlZC4KLSAqCi0gKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNl
IGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKLSAqIG1vZGlmaWNh
dGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9u
cyBhcmUKLSAqIG1ldDoKLSAqCi0gKiAgICAgKiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNv
ZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAotICogbm90aWNlLCB0aGlzIGxpc3Qg
b2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgotICogICAgICogUmVk
aXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZQotICog
Y29weXJpZ2h0IG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dp
bmcgZGlzY2xhaW1lcgotICogaW4gdGhlIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVy
aWFscyBwcm92aWRlZCB3aXRoIHRoZQotICogZGlzdHJpYnV0aW9uLgotICogICAgICogTmVpdGhl
ciB0aGUgbmFtZSBvZiBHb29nbGUgSW5jLiBub3IgdGhlIG5hbWVzIG9mIGl0cwotICogY29udHJp
YnV0b3JzIG1heSBiZSB1c2VkIHRvIGVuZG9yc2Ugb3IgcHJvbW90ZSBwcm9kdWN0cyBkZXJpdmVk
IGZyb20KLSAqIHRoaXMgc29mdHdhcmUgd2l0aG91dCBzcGVjaWZpYyBwcmlvciB3cml0dGVuIHBl
cm1pc3Npb24uCi0gKgotICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBUSEUgQ09QWVJJ
R0hUIEhPTERFUlMgQU5EIENPTlRSSUJVVE9SUwotICogIkFTIElTIiBBTkQgQU5ZIEVYUFJFU1Mg
T1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QKLSAqIExJTUlURUQgVE8s
IFRIRSBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZP
UgotICogQSBQQVJUSUNVTEFSIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuIElOIE5PIEVWRU5UIFNI
QUxMIFRIRSBDT1BZUklHSFQKLSAqIE9XTkVSIE9SIENPTlRSSUJVVE9SUyBCRSBMSUFCTEUgRk9S
IEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLAotICogU1BFQ0lBTCwgRVhFTVBMQVJZ
LCBPUiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVAotICogTElNSVRF
RCBUTywgUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBP
RiBVU0UsCi0gKiBEQVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJT04pIEhP
V0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkKLSAqIFRIRU9SWSBPRiBMSUFCSUxJVFksIFdIRVRIRVIg
SU4gQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQKLSAqIChJTkNMVURJTkcgTkVH
TElHRU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRQot
ICogT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBP
RiBTVUNIIERBTUFHRS4KLSAqLwotCi0jaWZuZGVmIEZpbGVUaHJlYWRfaAotI2RlZmluZSBGaWxl
VGhyZWFkX2gKLQotI2luY2x1ZGUgPGZ1bmN0aW9uYWw+Ci0jaW5jbHVkZSA8d3RmL01lc3NhZ2VR
dWV1ZS5oPgotI2luY2x1ZGUgPHd0Zi9QYXNzUmVmUHRyLmg+Ci0jaW5jbHVkZSA8d3RmL1RocmVh
ZGluZy5oPgotCi1uYW1lc3BhY2UgV2ViQ29yZSB7Ci0KLWNsYXNzIEZpbGVTdHJlYW07Ci0KLWNs
YXNzIEZpbGVUaHJlYWQgOiBwdWJsaWMgVGhyZWFkU2FmZVJlZkNvdW50ZWQ8RmlsZVRocmVhZD4g
ewotcHVibGljOgotICAgIHN0YXRpYyBQYXNzUmVmUHRyPEZpbGVUaHJlYWQ+IGNyZWF0ZSgpCi0g
ICAgewotICAgICAgICByZXR1cm4gYWRvcHRSZWYobmV3IEZpbGVUaHJlYWQoKSk7Ci0gICAgfQot
Ci0gICAgfkZpbGVUaHJlYWQoKTsKLQotICAgIGJvb2wgc3RhcnQoKTsKLSAgICB2b2lkIHN0b3Ao
KTsKLQotICAgIGNsYXNzIFRhc2sgewotICAgICAgICBXVEZfTUFLRV9OT05DT1BZQUJMRShUYXNr
KTsKLSAgICBwdWJsaWM6Ci0gICAgICAgIHRlbXBsYXRlPHR5cGVuYW1lIFQsIHR5cGVuYW1lIFUs
IHR5cGVuYW1lID0gdHlwZW5hbWUgc3RkOjplbmFibGVfaWY8IXN0ZDo6aXNfYmFzZV9vZjxUYXNr
LCBVPjo6dmFsdWUgJiYgc3RkOjppc19jb252ZXJ0aWJsZTxVLCBzdGQ6OmZ1bmN0aW9uPHZvaWQg
KCk+Pjo6dmFsdWU+Ojp0eXBlPgotICAgICAgICBUYXNrKFQqIGluc3RhbmNlLCBVIG1ldGhvZCkK
LSAgICAgICAgICAgIDogbV90YXNrKFdURjo6bW92ZShtZXRob2QpKQotICAgICAgICAgICAgLCBt
X2luc3RhbmNlKGluc3RhbmNlKQotICAgICAgICB7Ci0gICAgICAgIH0KLQotICAgICAgICBUYXNr
KFRhc2smJiBvdGhlcikKLSAgICAgICAgICAgIDogbV90YXNrKFdURjo6bW92ZShvdGhlci5tX3Rh
c2spKQotICAgICAgICAgICAgLCBtX2luc3RhbmNlKG90aGVyLm1faW5zdGFuY2UpCi0gICAgICAg
IHsKLSAgICAgICAgfQotCi0gICAgICAgIHZvaWQgcGVyZm9ybVRhc2soKQotICAgICAgICB7Ci0g
ICAgICAgICAgICBtX3Rhc2soKTsKLSAgICAgICAgfQotICAgICAgICB2b2lkKiBpbnN0YW5jZSgp
IGNvbnN0IHsgcmV0dXJuIG1faW5zdGFuY2U7IH0KLQotICAgIHByaXZhdGU6Ci0gICAgICAgIHN0
ZDo6ZnVuY3Rpb248dm9pZCAoKT4gbV90YXNrOwotICAgICAgICB2b2lkKiBtX2luc3RhbmNlOwot
ICAgIH07Ci0KLSAgICB2b2lkIHBvc3RUYXNrKFRhc2spOwotCi0gICAgdm9pZCB1bnNjaGVkdWxl
VGFza3MoY29uc3Qgdm9pZCogaW5zdGFuY2UpOwotCi1wcml2YXRlOgotICAgIEZpbGVUaHJlYWQo
KTsKLQotICAgIHN0YXRpYyB2b2lkIGZpbGVUaHJlYWRTdGFydCh2b2lkKik7Ci0gICAgdm9pZCBy
dW5Mb29wKCk7Ci0KLSAgICBUaHJlYWRJZGVudGlmaWVyIG1fdGhyZWFkSUQ7Ci0gICAgUmVmUHRy
PEZpbGVUaHJlYWQ+IG1fc2VsZlJlZjsKLSAgICBNZXNzYWdlUXVldWU8VGFzaz4gbV9xdWV1ZTsK
LQotICAgIE11dGV4IG1fdGhyZWFkQ3JlYXRpb25NdXRleDsKLX07Ci0KLX0gLy8gbmFtZXNwYWNl
IFdlYkNvcmUKLQotI2VuZGlmIC8vIEZpbGVUaHJlYWRfaApkaWZmIC0tZ2l0IGEvU291cmNlL1dl
YkNvcmUvbG9hZGVyL1Jlc291cmNlTG9hZGVyLmNwcCBiL1NvdXJjZS9XZWJDb3JlL2xvYWRlci9S
ZXNvdXJjZUxvYWRlci5jcHAKaW5kZXggMjU3OGU5MmM3YmM1YjE2NWU1ZWU1ZjIwYzMxOTQ4Y2Zm
ZDQ5YmM4OC4uZTUyMmQzY2FmZDg3MDg1Y2Y5YTc3YjczMTE2ZjcyMjhlNmM5ZDZlNyAxMDA2NDQK
LS0tIGEvU291cmNlL1dlYkNvcmUvbG9hZGVyL1Jlc291cmNlTG9hZGVyLmNwcAorKysgYi9Tb3Vy
Y2UvV2ViQ29yZS9sb2FkZXIvUmVzb3VyY2VMb2FkZXIuY3BwCkBAIC0zMSw3ICszMSw2IEBACiAj
aW5jbHVkZSAiUmVzb3VyY2VMb2FkZXIuaCIKIAogI2luY2x1ZGUgIkFwcGxpY2F0aW9uQ2FjaGVI
b3N0LmgiCi0jaW5jbHVkZSAiQXN5bmNGaWxlU3RyZWFtLmgiCiAjaW5jbHVkZSAiQXV0aGVudGlj
YXRpb25DaGFsbGVuZ2UuaCIKICNpbmNsdWRlICJEb2N1bWVudExvYWRlci5oIgogI2luY2x1ZGUg
IkZyYW1lLmgiCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9GaWxlU3RyZWFt
LmNwcCBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL0ZpbGVTdHJlYW0uY3BwCmluZGV4IGZmNWFl
ZTFhZmY1Njk0YTZiOGFlYzUwYzYyZjFlM2NjMGE2NTJkNzkuLjNhZTQ1OThkZmFiZGRmNDE1YmMw
N2I2OTZkYThjN2MwZDRlZjk4MTkgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3Jt
L0ZpbGVTdHJlYW0uY3BwCisrKyBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL0ZpbGVTdHJlYW0u
Y3BwCkBAIC00NiwxNiArNDYsNiBAQCBGaWxlU3RyZWFtOjpGaWxlU3RyZWFtKCkKIAogRmlsZVN0
cmVhbTo6fkZpbGVTdHJlYW0oKQogewotICAgIEFTU0VSVCghaXNIYW5kbGVWYWxpZChtX2hhbmRs
ZSkpOwotfQotCi0vLyBGSVhNRTogVG8gYmUgcmVtb3ZlZCB3aGVuIHdlIHN3aXRjaCB0byB1c2lu
ZyBCbG9iRGF0YS4KLXZvaWQgRmlsZVN0cmVhbTo6c3RhcnQoKQotewotfQotCi12b2lkIEZpbGVT
dHJlYW06OnN0b3AoKQotewogICAgIGNsb3NlKCk7CiB9CiAKZGlmZiAtLWdpdCBhL1NvdXJjZS9X
ZWJDb3JlL3BsYXRmb3JtL0ZpbGVTdHJlYW0uaCBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL0Zp
bGVTdHJlYW0uaAppbmRleCBhZThhODRlNDE2NGFjNDQ2Yjg5ODU3ZWE1M2U4ZjhjNjg1MDViMDY2
Li4zY2U5ZTU3NjU5OGIzYWU1NzBmZTA4YzM4ZDA0ODg3MDVkNTgxYTgwIDEwMDY0NAotLS0gYS9T
b3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9GaWxlU3RyZWFtLmgKKysrIGIvU291cmNlL1dlYkNvcmUv
cGxhdGZvcm0vRmlsZVN0cmVhbS5oCkBAIC0zMiwyOSArMzIsMTcgQEAKICNkZWZpbmUgRmlsZVN0
cmVhbV9oCiAKICNpbmNsdWRlICJGaWxlU3lzdGVtLmgiCi0jaW5jbHVkZSA8d3RmL0ZvcndhcmQu
aD4KLSNpbmNsdWRlIDx3dGYvUGFzc1JlZlB0ci5oPgotI2luY2x1ZGUgPHd0Zi9SZWZDb3VudGVk
Lmg+CiAKIG5hbWVzcGFjZSBXZWJDb3JlIHsKIAogY2xhc3MgVVJMOwogCiAvLyBBbGwgbWV0aG9k
cyBhcmUgc3luY2hyb25vdXMuCi1jbGFzcyBGaWxlU3RyZWFtIDogcHVibGljIFJlZkNvdW50ZWQ8
RmlsZVN0cmVhbT4geworY2xhc3MgRmlsZVN0cmVhbSB7CiBwdWJsaWM6Ci0gICAgc3RhdGljIFBh
c3NSZWZQdHI8RmlsZVN0cmVhbT4gY3JlYXRlKCkKLSAgICB7Ci0gICAgICAgIHJldHVybiBhZG9w
dFJlZihuZXcgRmlsZVN0cmVhbSgpKTsKLSAgICB9CisgICAgRmlsZVN0cmVhbSgpOwogICAgIH5G
aWxlU3RyZWFtKCk7CiAKLSAgICAvLyBGSVhNRTogVG8gYmUgcmVtb3ZlZCB3aGVuIHdlIHN3aXRj
aCB0byB1c2luZyBCbG9iRGF0YS4KLSAgICB2b2lkIHN0YXJ0KCk7Ci0KLSAgICAvLyBBYm9ydHMg
dGhlIG9wZXJhdGlvbi4KLSAgICB2b2lkIHN0b3AoKTsKLQogICAgIC8vIEdldHMgdGhlIHNpemUg
b2YgYSBmaWxlLiBBbHNvIHZhbGlkYXRlcyBpZiB0aGUgZmlsZSBoYXMgYmVlbiBjaGFuZ2VkIG9y
IG5vdCBpZiB0aGUgZXhwZWN0ZWQgbW9kaWZpY2F0aW9uIHRpbWUgaXMgcHJvdmlkZWQsIGkuZS4g
bm9uLXplcm8uCiAgICAgLy8gUmV0dXJucyB0b3RhbCBudW1iZXIgb2YgYnl0ZXMgaWYgc3VjY2Vz
c2Z1bC4gLTEgb3RoZXJ3aXNlLgogICAgIGxvbmcgbG9uZyBnZXRTaXplKGNvbnN0IFN0cmluZyYg
cGF0aCwgZG91YmxlIGV4cGVjdGVkTW9kaWZpY2F0aW9uVGltZSk7CkBAIC04NCw4ICs3Miw2IEBA
IHB1YmxpYzoKICAgICBib29sIHRydW5jYXRlKGxvbmcgbG9uZyBwb3NpdGlvbik7CiAKIHByaXZh
dGU6Ci0gICAgRmlsZVN0cmVhbSgpOwotCiAgICAgUGxhdGZvcm1GaWxlSGFuZGxlIG1faGFuZGxl
OwogICAgIGxvbmcgbG9uZyBtX2J5dGVzUHJvY2Vzc2VkOwogICAgIGxvbmcgbG9uZyBtX3RvdGFs
Qnl0ZXNUb1JlYWQ7CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9GaWxlU3Ry
ZWFtQ2xpZW50LmggYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9GaWxlU3RyZWFtQ2xpZW50LmgK
aW5kZXggMTRmYTUwMTM1NzU2YmVkY2RiZWQ2OTI0ZjExYzJhMzQwY2Q4OTVkMS4uY2I2M2E3Mjgy
ZTc0MDA5ZGFjZTA3ZWZiMGQ4NDZiN2FkNWJjZGI0OCAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNv
cmUvcGxhdGZvcm0vRmlsZVN0cmVhbUNsaWVudC5oCisrKyBiL1NvdXJjZS9XZWJDb3JlL3BsYXRm
b3JtL0ZpbGVTdHJlYW1DbGllbnQuaApAQCAtMSw1ICsxLDUgQEAKIC8qCi0gKiBDb3B5cmlnaHQg
KEMpIDIwMTAgR29vZ2xlIEluYy4gIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKiBDb3B5cmlnaHQg
KEMpIDIwMTAgR29vZ2xlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KICAqCiAgKiBSZWRpc3Ry
aWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhv
dXQKICAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xs
b3dpbmcgY29uZGl0aW9ucyBhcmUKQEAgLTM2LDE1ICszNiwxMSBAQCBuYW1lc3BhY2UgV2ViQ29y
ZSB7CiBjbGFzcyBGaWxlU3RyZWFtQ2xpZW50IHsKIHB1YmxpYzoKICAgICB2aXJ0dWFsIHZvaWQg
ZGlkT3Blbihib29sKSB7IH0gLy8gZmFsc2Ugc2lnbmFscyBmYWlsdXJlLgotICAgIHZpcnR1YWwg
dm9pZCBkaWRTdG9wKCkgeyB9CiAgICAgdmlydHVhbCB2b2lkIGRpZEdldFNpemUobG9uZyBsb25n
KSB7IH0gLy8gLTEgc2lnbmFscyBmYWlsdXJlLgogICAgIHZpcnR1YWwgdm9pZCBkaWRSZWFkKGlu
dCkgeyB9IC8vIC0xIHNpZ25hbHMgZmFpbHVyZS4KICAgICB2aXJ0dWFsIHZvaWQgZGlkV3JpdGUo
aW50KSB7IH0gLy8gLTEgc2lnbmFscyBmYWlsdXJlLgogICAgIHZpcnR1YWwgdm9pZCBkaWRUcnVu
Y2F0ZShib29sKSB7IH0gLy8gZmFsc2Ugc2lnbmFscyBmYWlsdXJlLgogCi0gICAgLy8gRklYTUU6
IFRvIGJlIHJlbW92ZWQgd2hlbiB3ZSBzd2l0Y2ggdG8gdXNpbmcgQmxvYkRhdGEuCi0gICAgdmly
dHVhbCB2b2lkIGRpZFN0YXJ0KCkgeyB9Ci0KIHByb3RlY3RlZDoKICAgICB2aXJ0dWFsIH5GaWxl
U3RyZWFtQ2xpZW50KCkgeyB9CiB9OwpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvcGxhdGZv
cm0vbmV0d29yay9CbG9iUmVzb3VyY2VIYW5kbGUuY3BwIGIvU291cmNlL1dlYkNvcmUvcGxhdGZv
cm0vbmV0d29yay9CbG9iUmVzb3VyY2VIYW5kbGUuY3BwCmluZGV4IGM0OTRlNTJjZGE4YjI3MDAz
ZGNhNTNmNTU1OTI5ZmJjNGMyZGZmYjkuLjA4ZDVmNTFhODg1MmUzMWYwN2QxZGFhZjg5Mjc2YjA0
ZjBiMDcwZDUgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL25ldHdvcmsvQmxv
YlJlc291cmNlSGFuZGxlLmNwcAorKysgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9uZXR3b3Jr
L0Jsb2JSZXNvdXJjZUhhbmRsZS5jcHAKQEAgLTE3MSwzMCArMTcxLDE4IEBAIEJsb2JSZXNvdXJj
ZUhhbmRsZTo6QmxvYlJlc291cmNlSGFuZGxlKEJsb2JEYXRhKiBibG9iRGF0YSwgY29uc3QgUmVz
b3VyY2VSZXF1ZXN0CiAgICAgLCBtX2ZpbGVPcGVuZWQoZmFsc2UpCiB7CiAgICAgaWYgKG1fYXN5
bmMpCi0gICAgICAgIG1fYXN5bmNTdHJlYW0gPSBBc3luY0ZpbGVTdHJlYW06OmNyZWF0ZSh0aGlz
KTsKKyAgICAgICAgbV9hc3luY1N0cmVhbSA9IHN0ZDo6bWFrZV91bmlxdWU8QXN5bmNGaWxlU3Ry
ZWFtPigqdGhpcyk7CiAgICAgZWxzZQotICAgICAgICBtX3N0cmVhbSA9IEZpbGVTdHJlYW06OmNy
ZWF0ZSgpOworICAgICAgICBtX3N0cmVhbSA9IHN0ZDo6bWFrZV91bmlxdWU8RmlsZVN0cmVhbT4o
KTsKIH0KIAogQmxvYlJlc291cmNlSGFuZGxlOjp+QmxvYlJlc291cmNlSGFuZGxlKCkKIHsKLSAg
ICBpZiAobV9hc3luYykgewotICAgICAgICBpZiAobV9hc3luY1N0cmVhbSkKLSAgICAgICAgICAg
IG1fYXN5bmNTdHJlYW0tPnN0b3AoKTsKLSAgICB9IGVsc2UgewotICAgICAgICBpZiAobV9zdHJl
YW0pCi0gICAgICAgICAgICBtX3N0cmVhbS0+c3RvcCgpOwotICAgIH0KIH0KIAogdm9pZCBCbG9i
UmVzb3VyY2VIYW5kbGU6OmNhbmNlbCgpCiB7Ci0gICAgaWYgKG1fYXN5bmMpIHsKLSAgICAgICAg
aWYgKG1fYXN5bmNTdHJlYW0pIHsKLSAgICAgICAgICAgIG1fYXN5bmNTdHJlYW0tPnN0b3AoKTsK
LSAgICAgICAgICAgIG1fYXN5bmNTdHJlYW0gPSAwOwotICAgICAgICB9Ci0gICAgfQorICAgIG1f
YXN5bmNTdHJlYW0gPSBudWxscHRyOwogCiAgICAgbV9hYm9ydGVkID0gdHJ1ZTsKIApkaWZmIC0t
Z2l0IGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vbmV0d29yay9CbG9iUmVzb3VyY2VIYW5kbGUu
aCBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL25ldHdvcmsvQmxvYlJlc291cmNlSGFuZGxlLmgK
aW5kZXggNzMyZmY3OTA0NTM5ZDRkOGY4MDRjMjdlYTA0NjY4MzZmMGE0OWIxZC4uNjc2ZGJmZjk4
OTc2YmIwODdkNWJiYzVkMGNjYWI3ZjQxM2I0NDFmZCAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNv
cmUvcGxhdGZvcm0vbmV0d29yay9CbG9iUmVzb3VyY2VIYW5kbGUuaAorKysgYi9Tb3VyY2UvV2Vi
Q29yZS9wbGF0Zm9ybS9uZXR3b3JrL0Jsb2JSZXNvdXJjZUhhbmRsZS5oCkBAIC05Miw4ICs5Miw4
IEBAIHByaXZhdGU6CiAKICAgICBSZWZQdHI8QmxvYkRhdGE+IG1fYmxvYkRhdGE7CiAgICAgYm9v
bCBtX2FzeW5jOwotICAgIFJlZlB0cjxBc3luY0ZpbGVTdHJlYW0+IG1fYXN5bmNTdHJlYW07IC8v
IEZvciBhc3luY2hyb25vdXMgbG9hZGluZy4KLSAgICBSZWZQdHI8RmlsZVN0cmVhbT4gbV9zdHJl
YW07IC8vIEZvciBzeW5jaHJvbm91cyBsb2FkaW5nLgorICAgIHN0ZDo6dW5pcXVlX3B0cjxBc3lu
Y0ZpbGVTdHJlYW0+IG1fYXN5bmNTdHJlYW07IC8vIEZvciBhc3luY2hyb25vdXMgbG9hZGluZy4K
KyAgICBzdGQ6OnVuaXF1ZV9wdHI8RmlsZVN0cmVhbT4gbV9zdHJlYW07IC8vIEZvciBzeW5jaHJv
bm91cyBsb2FkaW5nLgogICAgIFZlY3RvcjxjaGFyPiBtX2J1ZmZlcjsKICAgICBWZWN0b3I8bG9u
ZyBsb25nPiBtX2l0ZW1MZW5ndGhMaXN0OwogICAgIGludCBtX2Vycm9yQ29kZTsKZGlmZiAtLWdp
dCBhL1NvdXJjZS9XZWJDb3JlL3N0b3JhZ2UvU3RvcmFnZVRocmVhZC5oIGIvU291cmNlL1dlYkNv
cmUvc3RvcmFnZS9TdG9yYWdlVGhyZWFkLmgKaW5kZXggMjYzYzc4ZTgyNjJlOWNmZDg2NWRkZDU5
MDE5NTQ5MmY1ZTc4NTM5Zi4uZGY1MmFjNjEyMWM4NDY2ZDQ4NmU0YTRkYzllZjNhNGUyODg3M2Zl
NSAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvc3RvcmFnZS9TdG9yYWdlVGhyZWFkLmgKKysr
IGIvU291cmNlL1dlYkNvcmUvc3RvcmFnZS9TdG9yYWdlVGhyZWFkLmgKQEAgLTQ2LDcgKzQ2LDcg
QEAgcHVibGljOgogICAgIGJvb2wgc3RhcnQoKTsKICAgICB2b2lkIHRlcm1pbmF0ZSgpOwogCi0g
ICAgdm9pZCBkaXNwYXRjaChjb25zdCBzdGQ6OmZ1bmN0aW9uPHZvaWQgKCk+Jik7CisgICAgdm9p
ZCBkaXNwYXRjaChjb25zdCBzdGQ6OmZ1bmN0aW9uPHZvaWQoKT4mKTsKIAogICAgIHN0YXRpYyB2
b2lkIHJlbGVhc2VGYXN0TWFsbG9jRnJlZU1lbW9yeUluQWxsVGhyZWFkcygpOwogCkBAIC01OSw3
ICs1OSw3IEBAIHByaXZhdGU6CiAgICAgdm9pZCBwZXJmb3JtVGVybWluYXRlKCk7CiAKICAgICBU
aHJlYWRJZGVudGlmaWVyIG1fdGhyZWFkSUQ7Ci0gICAgTWVzc2FnZVF1ZXVlPHN0ZDo6ZnVuY3Rp
b248dm9pZCAoKT4+IG1fcXVldWU7CisgICAgTWVzc2FnZVF1ZXVlPHN0ZDo6ZnVuY3Rpb248dm9p
ZCgpPj4gbV9xdWV1ZTsKIH07CiAKIH0gLy8gbmFtZXNwYWNlIFdlYkNvcmUK
</data>

          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>241236</attachid>
            <date>2014-11-08 14:29:07 -0800</date>
            <delta_ts>2014-11-08 16:08:25 -0800</delta_ts>
            <desc>Patch</desc>
            <filename>bug-138282-20141108142906.patch</filename>
            <type>text/plain</type>
            <size>50123</size>
            <attacher name="Darin Adler">darin</attacher>
            
              <data encoding="base64">U3VidmVyc2lvbiBSZXZpc2lvbjogMTc1NzgwCmRpZmYgLS1naXQgYS9Tb3VyY2UvV1RGL0NoYW5n
ZUxvZyBiL1NvdXJjZS9XVEYvQ2hhbmdlTG9nCmluZGV4IDVlNDVkMzc5ZDgxOWExNjRhYTUyZGZj
MGJjZWQ1ZWYwYWI1MWZjOTcuLmM4ZGJkODU2OTc1YzI3ZTU4YzQ5YmVhNjdlN2RlZTdiYzY4ODBm
MGYgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XVEYvQ2hhbmdlTG9nCisrKyBiL1NvdXJjZS9XVEYvQ2hh
bmdlTG9nCkBAIC0xLDMgKzEsMjMgQEAKKzIwMTQtMTEtMDggIERhcmluIEFkbGVyICA8ZGFyaW5A
YXBwbGUuY29tPgorCisgICAgICAgIFJlcGxhY2UgRmlsZVRocmVhZCBjbGFzcyB3aXRoIGEgc2lu
Z2xlIGZ1bmN0aW9uCisgICAgICAgIGh0dHBzOi8vYnVncy53ZWJraXQub3JnL3Nob3dfYnVnLmNn
aT9pZD0xMzgyODIKKworICAgICAgICBSZXZpZXdlZCBieSBBbGV4ZXkgUHJvc2t1cnlha292Lgor
CisgICAgICAgICogd3RmL01lc3NhZ2VRdWV1ZS5oOiBNYWRlIHF1ZXVlIHdvcmsgb24gYW55IHR5
cGUgYW5kIG5vdCByZXF1aXJlIHdyYXBwaW5nCisgICAgICAgIGV2ZXJ5dGhpbmcgaW4gYSB1bmlx
dWVfcHRyLgorCisgICAgICAgICogd3RmL1RocmVhZGluZy5jcHA6CisgICAgICAgIChXVEY6OnRo
cmVhZEVudHJ5UG9pbnQpOiBDaGFuZ2VkIHRvIHVzZSBhIHN0ZDo6ZnVuY3Rpb24gaW5zdGVhZCBv
ZiBhIGZ1bmN0aW9uIHBvaW50ZXIuCisgICAgICAgIChXVEY6OmNyZWF0ZVRocmVhZCk6IEFkZCBh
IHZlcnNpb24gdGhhdCB0YWtlcyBhIHN0ZDo6ZnVuY3Rpb24uIFJlaW1wbGVtZW50ZWQgdGhlCisg
ICAgICAgIG9sZCB2ZXJzaW9uIHVzaW5nIGxhbWJkYXMuIFJlbW92ZWQgdGhlIG9ic29sZXRlIHZl
cnNpb25zIHRoYXQgd2VyZSB0aGVyZSBqdXN0IHRvIHN1cHBvcnQKKyAgICAgICAgYmluYXJ5IGNv
bXBhdGliaWxpdHkgd2l0aCB2ZXJ5IG9sZCB2ZXJzaW9ucyBvZiBTYWZhcmkuCisKKyAgICAgICAg
KiB3dGYvVGhyZWFkaW5nLmg6IFJlbW92ZWQgYW4gaW5jb3JyZWN0IGxpY2Vuc2UgaGVhZGVyIHRo
YXQgY292ZXJzIGNvZGUgdGhhdCB3YXMgbG9uZyBhZ28KKyAgICAgICAgbW92ZWQgdG8gYSBkaWZm
ZXJlbnQgZmlsZS4gQ2hhbmdlZCBjcmVhdGVUaHJlYWQgdG8gdGFrZSBhIHN0ZDo6ZnVuY3Rpb24g
aW5zdGVhZCBvZiBhIGZ1bmN0aW9uCisgICAgICAgIHBvaW50ZXIgYW5kIGRhdGEgcG9pbnRlci4g
TW92ZWQgaW50ZXJuYWwgZnVuY3Rpb25zIGFmdGVyIHB1YmxpYyBmdW5jdGlvbnMuCisKIDIwMTQt
MTEtMDUgIENocmlzIER1bWV6ICA8Y2R1bWV6QGFwcGxlLmNvbT4KIAogICAgICAgICBBc3NlcnRp
b24gaGl0IERPTVRpbWVyOjp1cGRhdGVUaW1lckludGVydmFsSWZOZWNlc3NhcnkoKQpkaWZmIC0t
Z2l0IGEvU291cmNlL1dlYkNvcmUvQ2hhbmdlTG9nIGIvU291cmNlL1dlYkNvcmUvQ2hhbmdlTG9n
CmluZGV4IGE3N2M4NWNkOTdkZjQ1ZTBmZDA3OTM5MmQ5ZWIwZDgyNmJhZGI4M2UuLjIwZTBmODdl
M2Q0MjBmZmZiNjA2YzczMjdhMzAxNTM3NDRmZjFkODEgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJD
b3JlL0NoYW5nZUxvZworKysgYi9Tb3VyY2UvV2ViQ29yZS9DaGFuZ2VMb2cKQEAgLTEsMyArMSw3
NyBAQAorMjAxNC0xMS0wOCAgRGFyaW4gQWRsZXIgIDxkYXJpbkBhcHBsZS5jb20+CisKKyAgICAg
ICAgUmVwbGFjZSBGaWxlVGhyZWFkIGNsYXNzIHdpdGggYSBzaW5nbGUgZnVuY3Rpb24KKyAgICAg
ICAgaHR0cHM6Ly9idWdzLndlYmtpdC5vcmcvc2hvd19idWcuY2dpP2lkPTEzODI4MgorCisgICAg
ICAgIFJldmlld2VkIGJ5IEFsZXhleSBQcm9za3VyeWFrb3YuCisKKyAgICAgICAgKiBDTWFrZUxp
c3RzLnR4dDogUmVtb3ZlZCBGaWxlVGhyZWFkLmNwcC4KKworICAgICAgICAqIFdlYkNvcmUudmN4
cHJvai9XZWJDb3JlLnZjeHByb2o6IFJlbW92ZWQgRmlsZVRocmVhZC5jcHAvLmguCisgICAgICAg
ICogV2ViQ29yZS52Y3hwcm9qL1dlYkNvcmUudmN4cHJvai5maWx0ZXJzOiBEaXR0by4KKyAgICAg
ICAgKiBXZWJDb3JlLnhjb2RlcHJvai9wcm9qZWN0LnBieHByb2o6IERpdHRvLgorCisgICAgICAg
ICogYmluZGluZ3MvZ2VuZXJpYy9BY3RpdmVET01DYWxsYmFjay5jcHA6IFJlbW92ZWQgdW5uZWVk
ZWQgaW5jbHVkZXMuCisgICAgICAgICogZG9tL0FjdGl2ZURPTU9iamVjdC5jcHA6IERpdHRvLgor
CisgICAgICAgICogZmlsZWFwaS9Bc3luY0ZpbGVTdHJlYW0uY3BwOgorICAgICAgICAoV2ViQ29y
ZTo6Y2FsbE9uRmlsZVRocmVhZCk6IEFkZGVkLiBJbXBsZW1lbnRzIHRoZSBmaWxlIHRocmVhZC4K
KyAgICAgICAgKFdlYkNvcmU6OkFzeW5jRmlsZVN0cmVhbTo6QXN5bmNGaWxlU3RyZWFtKTogVGFr
ZSBhIHJlZmVyZW5jZSB0byB0aGUgY2xpZW50LgorICAgICAgICBNYWtlIG1faW50ZXJuYWxzLiBV
c2UgdGhlIGRlc3Ryb3llZCBmbGFnIGluc3RlYWQgb2YgdHJpY2tpZXIgdGVjaG5pcXVlcyB0bwor
ICAgICAgICBoYW5kbGUgc3RvcHBpbmcuIE9uY2UgdGhlIHN0cmVhbSBpcyBkZXN0cm95ZWQsIHRo
ZXJlIHdpbGwgYmUgbm8gZnVydGhlciBjYWxsYmFja3MuCisgICAgICAgIChXZWJDb3JlOjpBc3lu
Y0ZpbGVTdHJlYW06On5Bc3luY0ZpbGVTdHJlYW0pOiBBZGRlZCBhc3NlcnRpb25zIGFuZCBtZXJn
ZWQgaW4gdGhlCisgICAgICAgIHN0b3AgYmVoYXZpb3IgaGVyZS4gVGhpcyBjbGFzcyBubyBsb25n
ZXIgcmVxdWlyZXMgYW4gZXhwbGljaXQgc3RvcCBmdW5jdGlvbi4KKyAgICAgICAgKFdlYkNvcmU6
OkFzeW5jRmlsZVN0cmVhbTo6cGVyZm9ybSk6IEFkZGVkLiBIZWxwZXIgdXNlZCBmb3IgYWxsIHRo
ZSBvcGVyYXRpb25zCisgICAgICAgIGJlbG93LiBUYWtlcyBhIGZ1bmN0aW9uIHRoYXQgcGVyZm9y
bXMgYW4gb3BlcmF0aW9uIGFuZCB0aGVuIHJldHVybnMgYSBjbGllbnQKKyAgICAgICAgY2FsbGJh
Y2sgZnVuY3Rpb24uIFJlc3BlY3RzIHRoZSBtX3N0b3BwZWQgYm9vbGVhbiBvbiB0aGUgZmlsZSB0
aHJlYWQgKHNvIHdlCisgICAgICAgIGRvbid0IGRvIGV4dHJhIG9wZXJhdGlvbnMpIGFuZCBvbiB0
aGUgY2xpZW50IHRocmVhZCAoc28gd2UgYXJlIGd1YXJhbnRlZWQgbm90CisgICAgICAgIHRvIGdl
dCBhbnkgY2xpZW50IGNhbGxiYWNrcyBldmVuIGlmIHRoZSBmaWxlIHRocmVhZCB3YXMgcGFydHdh
eSB0aHJvdWdoIGFuCisgICAgICAgIG9wZXJhdGlvbikuCisgICAgICAgIChXZWJDb3JlOjpBc3lu
Y0ZpbGVTdHJlYW06OmdldFNpemUpOiBDaGFuZ2VkIHRvIHVzZSB0aGUgcGVyZm9ybSBmdW5jdGlv
bi4KKyAgICAgICAgKFdlYkNvcmU6OkFzeW5jRmlsZVN0cmVhbTo6b3BlbkZvclJlYWQpOiBEaXR0
by4gQWxzbyBmaXhlZCByZWZlcmVuY2UgY291bnQKKyAgICAgICAgdGhyZWFkIHNhZmV0eSBpc3N1
ZSBieSBjYXB0dXJpbmcgYSBTdHJpbmdDYXB0dXJlIHJhdGhlciB0aGFuIGEgU3RyaW5nLgorICAg
ICAgICAoV2ViQ29yZTo6QXN5bmNGaWxlU3RyZWFtOjpvcGVuRm9yV3JpdGUpOiBEaXR0by4KKyAg
ICAgICAgKFdlYkNvcmU6OkFzeW5jRmlsZVN0cmVhbTo6Y2xvc2UpOiBDaGFuZ2VkIHRvIHVzZSBj
YWxsT25GaWxlVGhyZWFkLgorICAgICAgICAoV2ViQ29yZTo6QXN5bmNGaWxlU3RyZWFtOjpyZWFk
KTogQ2hhbmdlZCB0byB1c2UgdGhlIHBlcmZvcm0gZnVuY3Rpb24uCisgICAgICAgIChXZWJDb3Jl
OjpBc3luY0ZpbGVTdHJlYW06OndyaXRlKTogRGl0dG8uIEFsc28gZml4ZWQgcmVmZXJlbmNlIGNv
dW50CisgICAgICAgIHRocmVhZCBzYWZldHkgaXNzdWUgYnkgY2FwdHVyaW5nIGEgU3RyaW5nQ2Fw
dHVyZSByYXRoZXIgdGhhbiBhIFVSTC4KKyAgICAgICAgKFdlYkNvcmU6OkFzeW5jRmlsZVN0cmVh
bTo6dHJ1bmNhdGUpOiBEaXR0by4KKworICAgICAgICAqIGZpbGVhcGkvQXN5bmNGaWxlU3RyZWFt
Lmg6IFJlbW92ZWQgdXNlIG9mIFJlZkNvdW50ZWQgc2luY2Ugd2Ugb25seSBuZWVkCisgICAgICAg
IHNpbmdsZSBvd25lcnNoaXAuIFJlbW92ZWQgdGhlIHN0b3AgZnVuY3Rpb24sIHNpbmNlIHdlIGNh
biBub3cgc3RvcCB3aGVuCisgICAgICAgIHRoZSBzdHJlYW0gaXMgZGVzdHJveWVkIHNpbmNlIHdl
IGhhdmUgc2luZ2xlIG93bmVyc2hpcC4gTWFkZSBhIG5ldyBJbnRlcm5hbHMKKyAgICAgICAgb2Jq
ZWN0IHRvIGhhbmRsZSBkZXN0cnVjdGlvbiB3aGlsZSBvcGVyYXRpb25zIGFyZSBzdGlsbCBnb2lu
ZyBvbiB0aGUgZmlsZSB0aHJlYWQuCisKKyAgICAgICAgKiBmaWxlYXBpL0ZpbGVUaHJlYWQuY3Bw
OiBSZW1vdmVkLgorICAgICAgICAqIGZpbGVhcGkvRmlsZVRocmVhZC5oOiBSZW1vdmVkLgorCisg
ICAgICAgICogbG9hZGVyL1Jlc291cmNlTG9hZGVyLmNwcDogUmVtb3ZlZCB1bm5lZWRlZCBpbmNs
dWRlLgorCisgICAgICAgICogcGxhdGZvcm0vRmlsZVN0cmVhbS5jcHA6CisgICAgICAgIChXZWJD
b3JlOjpGaWxlU3RyZWFtOjp+RmlsZVN0cmVhbSk6IE1lcmdlZCB0aGUgc3RvcCBmdW5jdGlvbiBp
biBoZXJlLgorCisgICAgICAgICogcGxhdGZvcm0vRmlsZVN0cmVhbS5oOiBSZW1vdmVkIHVzZSBv
ZiBSZWZDb3VudGVkIHNpbmNlIHdlIG9ubHkgbmVlZAorICAgICAgICBzaW5nbGUgb3duZXJzaGlw
LiBSZW1vdmVkIHRoZSBlbXB0eSBzdGFydCBmdW5jdGlvbi4gUmVtb3ZlZCB0aGUgc3RvcCBmdW5j
dGlvbiwKKyAgICAgICAgc2luY2Ugd2UgY2FuIG5vdyBzdG9wIHdoZW4gdGhlIHN0cmVhbSBpcyBk
ZXN0cm95ZWQgc2luY2Ugd2UgaGF2ZSBzaW5nbGUgb3duZXJzaGlwLgorCisgICAgICAgICogcGxh
dGZvcm0vRmlsZVN0cmVhbUNsaWVudC5oOiBSZW1vdmVkIHVubmVlZGVkIGRpZFN0YXJ0IGFuZCBk
aWRTdG9wLgorCisgICAgICAgICogcGxhdGZvcm0vbmV0d29yay9CbG9iUmVzb3VyY2VIYW5kbGUu
Y3BwOgorICAgICAgICAoV2ViQ29yZTo6QmxvYlJlc291cmNlSGFuZGxlOjpCbG9iUmVzb3VyY2VI
YW5kbGUpOiBVc2UgbWFrZV91bmlxdWUgdG8gbWFrZSB0aGUKKyAgICAgICAgc3RyZWFtIG9iamVj
dHMgaW5zdGVhZCBvZiBjdXN0b20gY3JlYXRlIGZ1bmN0aW9ucy4KKyAgICAgICAgKFdlYkNvcmU6
OkJsb2JSZXNvdXJjZUhhbmRsZTo6fkJsb2JSZXNvdXJjZUhhbmRsZSk6IFJlbW92ZWQgbm93LXVu
bmVlZGVkIGNvZGUKKyAgICAgICAgdG8gY2FsbCBzdG9wIGZ1bmN0aW9ucy4gRGVzdHJveWluZyB0
aGUgb2JqZWN0cyBub3cgdGFrZXMgY2FyZSBvZiB0aGUgdGhpcywgYW5kCisgICAgICAgIHRoYXQn
cyBkb25lIGJ5IHRoZSB1bmlxdWVfcHRycy4KKyAgICAgICAgKFdlYkNvcmU6OkJsb2JSZXNvdXJj
ZUhhbmRsZTo6Y2FuY2VsKTogUmVtb3ZlZCB0aGUgcmVzdCBvZiB0aGUgY29kZSB0byBzdG9wIHRo
ZQorICAgICAgICBtX2FzeW5jU3RyZWFtLCBrZWVwaW5nIG9ubHkgdGhlIGNvZGUgdGhhdCBzZXRz
IGl0IHRvIG51bGwuIFRoYXQgbm93IHN0b3BzIHRoZQorICAgICAgICBzdHJlYW0gYnkgZGVzdHJv
eWluZyBpdC4KKworICAgICAgICAqIHBsYXRmb3JtL25ldHdvcmsvQmxvYlJlc291cmNlSGFuZGxl
Lmg6IFVzZSBzdGQ6OnVuaXF1ZV9wdHIgcmF0aGVyIHRoYW4KKyAgICAgICAgUmVmUHRyIGZvciB0
aGUgZmlsZSBzdHJlYW0gb2JqZWN0cy4KKworICAgICAgICAqIHN0b3JhZ2UvU3RvcmFnZVRocmVh
ZC5oOiBUd2Vha2VkIGZvcm1hdHRpbmcgb2Ygc3RkOjpmdW5jdGlvbjx2b2lkKCk+IHRvCisgICAg
ICAgIG1hdGNoIHRoZSBmb3JtYXQgdXNlZCBlbHNld2hlcmUgaW4gV2ViS2l0LgorCiAyMDE0LTEx
LTA4ICBCZXRoIERha2luICA8YmRha2luQGFwcGxlLmNvbT4KIAogICAgICAgICBJbXBsZW1lbnQg
YWN0aW9uIG1lbnUgc3VwcG9ydCBmb3IgdmlkZW9zCmRpZmYgLS1naXQgYS9Tb3VyY2UvV1RGL3d0
Zi9UaHJlYWRpbmcuY3BwIGIvU291cmNlL1dURi93dGYvVGhyZWFkaW5nLmNwcAppbmRleCBjOGQ5
OTZiNWE4NWVkMDRlZDVhMzk5YWVlYWQxNDU5NjU0MzhlOTBkLi4xNzc2NTk4NzM3ZDhjYjFkNzNj
NTFmNTMzMzc1ODIwNjQ4ZTllZDFlIDEwMDY0NAotLS0gYS9Tb3VyY2UvV1RGL3d0Zi9UaHJlYWRp
bmcuY3BwCisrKyBiL1NvdXJjZS9XVEYvd3RmL1RocmVhZGluZy5jcHAKQEAgLTEsNSArMSw1IEBA
CiAvKgotICogQ29weXJpZ2h0IChDKSAyMDA4LCAyMDA5IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyBy
ZXNlcnZlZC4KKyAqIENvcHlyaWdodCAoQykgMjAwOCwgMjAwOSwgMjAxNCBBcHBsZSBJbmMuIEFs
bCByaWdodHMgcmVzZXJ2ZWQuCiAgKgogICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3Vy
Y2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CiAgKiBtb2RpZmljYXRpb24sIGFy
ZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKQEAgLTMz
LDIzICszMywxNCBAQCBuYW1lc3BhY2UgV1RGIHsKIHN0cnVjdCBOZXdUaHJlYWRDb250ZXh0IHsK
ICAgICBXVEZfTUFLRV9GQVNUX0FMTE9DQVRFRDsKIHB1YmxpYzoKLSAgICBOZXdUaHJlYWRDb250
ZXh0KFRocmVhZEZ1bmN0aW9uIGVudHJ5UG9pbnQsIHZvaWQqIGRhdGEsIGNvbnN0IGNoYXIqIG5h
bWUpCi0gICAgICAgIDogZW50cnlQb2ludChlbnRyeVBvaW50KQotICAgICAgICAsIGRhdGEoZGF0
YSkKLSAgICAgICAgLCBuYW1lKG5hbWUpCi0gICAgewotICAgIH0KLQotICAgIFRocmVhZEZ1bmN0
aW9uIGVudHJ5UG9pbnQ7Ci0gICAgdm9pZCogZGF0YTsKICAgICBjb25zdCBjaGFyKiBuYW1lOwot
CisgICAgc3RkOjpmdW5jdGlvbjx2b2lkKCk+IGVudHJ5UG9pbnQ7CiAgICAgTXV0ZXggY3JlYXRp
b25NdXRleDsKIH07CiAKIHN0YXRpYyB2b2lkIHRocmVhZEVudHJ5UG9pbnQodm9pZCogY29udGV4
dERhdGEpCiB7Ci0gICAgTmV3VGhyZWFkQ29udGV4dCogY29udGV4dCA9IHJlaW50ZXJwcmV0X2Nh
c3Q8TmV3VGhyZWFkQ29udGV4dCo+KGNvbnRleHREYXRhKTsKKyAgICBOZXdUaHJlYWRDb250ZXh0
KiBjb250ZXh0ID0gc3RhdGljX2Nhc3Q8TmV3VGhyZWFkQ29udGV4dCo+KGNvbnRleHREYXRhKTsK
IAogICAgIC8vIEJsb2NrIHVudGlsIG91ciBjcmVhdGluZyB0aHJlYWQgaGFzIGNvbXBsZXRlZCBh
bnkgZXh0cmEgc2V0dXAgd29yaywgaW5jbHVkaW5nCiAgICAgLy8gZXN0YWJsaXNoaW5nIFRocmVh
ZElkZW50aWZpZXIuCkBAIC01OSwxNSArNTAsMTUgQEAgc3RhdGljIHZvaWQgdGhyZWFkRW50cnlQ
b2ludCh2b2lkKiBjb250ZXh0RGF0YSkKIAogICAgIGluaXRpYWxpemVDdXJyZW50VGhyZWFkSW50
ZXJuYWwoY29udGV4dC0+bmFtZSk7CiAKLSAgICAvLyBHcmFiIHRoZSBpbmZvIHRoYXQgd2UgbmVl
ZCBvdXQgb2YgdGhlIGNvbnRleHQsIHRoZW4gZGVhbGxvY2F0ZSBpdC4KLSAgICBUaHJlYWRGdW5j
dGlvbiBlbnRyeVBvaW50ID0gY29udGV4dC0+ZW50cnlQb2ludDsKLSAgICB2b2lkKiBkYXRhID0g
Y29udGV4dC0+ZGF0YTsKKyAgICBhdXRvIGVudHJ5UG9pbnQgPSBXVEY6Om1vdmUoY29udGV4dC0+
ZW50cnlQb2ludCk7CisKKyAgICAvLyBEZWxldGUgdGhlIGNvbnRleHQgYmVmb3JlIHN0YXJ0aW5n
IHRoZSB0aHJlYWQuCiAgICAgZGVsZXRlIGNvbnRleHQ7CiAKLSAgICBlbnRyeVBvaW50KGRhdGEp
OworICAgIGVudHJ5UG9pbnQoKTsKIH0KIAotVGhyZWFkSWRlbnRpZmllciBjcmVhdGVUaHJlYWQo
VGhyZWFkRnVuY3Rpb24gZW50cnlQb2ludCwgdm9pZCogZGF0YSwgY29uc3QgY2hhciogbmFtZSkK
K1RocmVhZElkZW50aWZpZXIgY3JlYXRlVGhyZWFkKGNvbnN0IGNoYXIqIG5hbWUsIHN0ZDo6ZnVu
Y3Rpb248dm9pZCgpPiBlbnRyeVBvaW50KQogewogICAgIC8vIFZpc3VhbCBTdHVkaW8gaGFzIGEg
MzEtY2hhcmFjdGVyIGxpbWl0IG9uIHRocmVhZCBuYW1lcy4gTG9uZ2VyIG5hbWVzIHdpbGwKICAg
ICAvLyBiZSB0cnVuY2F0ZWQgc2lsZW50bHksIGJ1dCB3ZSdkIGxpa2UgY2FsbGVycyB0byBrbm93
IGFib3V0IHRoZSBsaW1pdC4KQEAgLTc2LDcgKzY3LDcgQEAgVGhyZWFkSWRlbnRpZmllciBjcmVh
dGVUaHJlYWQoVGhyZWFkRnVuY3Rpb24gZW50cnlQb2ludCwgdm9pZCogZGF0YSwgY29uc3QgY2hh
cioKICAgICAgICAgTE9HX0VSUk9SKCJUaHJlYWQgbmFtZSBcIiVzXCIgaXMgbG9uZ2VyIHRoYW4g
MzEgY2hhcmFjdGVycyBhbmQgd2lsbCBiZSB0cnVuY2F0ZWQgYnkgVmlzdWFsIFN0dWRpbyIsIG5h
bWUpOwogI2VuZGlmCiAKLSAgICBOZXdUaHJlYWRDb250ZXh0KiBjb250ZXh0ID0gbmV3IE5ld1Ro
cmVhZENvbnRleHQoZW50cnlQb2ludCwgZGF0YSwgbmFtZSk7CisgICAgTmV3VGhyZWFkQ29udGV4
dCogY29udGV4dCA9IG5ldyBOZXdUaHJlYWRDb250ZXh0IHsgbmFtZSwgV1RGOjptb3ZlKGVudHJ5
UG9pbnQpLCB7IH0gfTsKIAogICAgIC8vIFByZXZlbnQgdGhlIHRocmVhZCBib2R5IGZyb20gZXhl
Y3V0aW5nIHVudGlsIHdlJ3ZlIGVzdGFibGlzaGVkIHRoZSB0aHJlYWQgaWRlbnRpZmllci4KICAg
ICBNdXRleExvY2tlciBsb2NrZXIoY29udGV4dC0+Y3JlYXRpb25NdXRleCk7CkBAIC04NCw2ICs3
NSwxMyBAQCBUaHJlYWRJZGVudGlmaWVyIGNyZWF0ZVRocmVhZChUaHJlYWRGdW5jdGlvbiBlbnRy
eVBvaW50LCB2b2lkKiBkYXRhLCBjb25zdCBjaGFyKgogICAgIHJldHVybiBjcmVhdGVUaHJlYWRJ
bnRlcm5hbCh0aHJlYWRFbnRyeVBvaW50LCBjb250ZXh0LCBuYW1lKTsKIH0KIAorVGhyZWFkSWRl
bnRpZmllciBjcmVhdGVUaHJlYWQoVGhyZWFkRnVuY3Rpb24gZW50cnlQb2ludCwgdm9pZCogZGF0
YSwgY29uc3QgY2hhciogbmFtZSkKK3sKKyAgICByZXR1cm4gY3JlYXRlVGhyZWFkKG5hbWUsIFtl
bnRyeVBvaW50LCBkYXRhXSB7CisgICAgICAgIGVudHJ5UG9pbnQoZGF0YSk7CisgICAgfSk7Cit9
CisKIHZvaWQgc2V0Q3VycmVudFRocmVhZElzVXNlckludGVyYWN0aXZlKCkKIHsKICNpZiBIQVZF
KFFPU19DTEFTU0VTKQpAQCAtOTgsNjEgKzk2LDQgQEAgdm9pZCBzZXRDdXJyZW50VGhyZWFkSXNV
c2VySW5pdGlhdGVkKCkKICNlbmRpZgogfQogCi0jaWYgUExBVEZPUk0oTUFDKSB8fCBQTEFURk9S
TShXSU4pCi0KLS8vIEZvciBBQkkgY29tcGF0aWJpbGl0eSB3aXRoIFNhZmFyaSBvbiBNYWMgLyBX
aW5kb3dzOiBTYWZhcmkgdXNlcyB0aGUgcHJpdmF0ZQotLy8gY3JlYXRlVGhyZWFkKCkgYW5kIHdh
aXRGb3JUaHJlYWRDb21wbGV0aW9uKCkgZnVuY3Rpb25zIGRpcmVjdGx5IGFuZCB3ZSBuZWVkCi0v
LyB0byBrZWVwIHRoZSBvbGQgQUJJIGNvbXBhdGliaWxpdHkgdW50aWwgaXQncyBiZWVuIHJlYnVp
bHQuCi0KLXR5cGVkZWYgdm9pZCogKCpUaHJlYWRGdW5jdGlvbldpdGhSZXR1cm5WYWx1ZSkodm9p
ZCogYXJndW1lbnQpOwotCi1XVEZfRVhQT1JUX1BSSVZBVEUgVGhyZWFkSWRlbnRpZmllciBjcmVh
dGVUaHJlYWQoVGhyZWFkRnVuY3Rpb25XaXRoUmV0dXJuVmFsdWUgZW50cnlQb2ludCwgdm9pZCog
ZGF0YSwgY29uc3QgY2hhciogbmFtZSk7Ci0KLXN0cnVjdCBUaHJlYWRGdW5jdGlvbldpdGhSZXR1
cm5WYWx1ZUludm9jYXRpb24gewotICAgIFRocmVhZEZ1bmN0aW9uV2l0aFJldHVyblZhbHVlSW52
b2NhdGlvbihUaHJlYWRGdW5jdGlvbldpdGhSZXR1cm5WYWx1ZSBmdW5jdGlvbiwgdm9pZCogZGF0
YSkKLSAgICAgICAgOiBmdW5jdGlvbihmdW5jdGlvbikKLSAgICAgICAgLCBkYXRhKGRhdGEpCi0g
ICAgewotICAgIH0KLQotICAgIFRocmVhZEZ1bmN0aW9uV2l0aFJldHVyblZhbHVlIGZ1bmN0aW9u
OwotICAgIHZvaWQqIGRhdGE7Ci19OwotCi1zdGF0aWMgdm9pZCBjb21wYXRFbnRyeVBvaW50KHZv
aWQqIHBhcmFtKQotewotICAgIC8vIEJhbGFuY2VkIGJ5IC5yZWxlYXNlKCkgaW4gY3JlYXRlVGhy
ZWFkLgotICAgIGF1dG8gaW52b2NhdGlvbiA9IHN0ZDo6dW5pcXVlX3B0cjxUaHJlYWRGdW5jdGlv
bldpdGhSZXR1cm5WYWx1ZUludm9jYXRpb24+KHN0YXRpY19jYXN0PFRocmVhZEZ1bmN0aW9uV2l0
aFJldHVyblZhbHVlSW52b2NhdGlvbio+KHBhcmFtKSk7Ci0gICAgaW52b2NhdGlvbi0+ZnVuY3Rp
b24oaW52b2NhdGlvbi0+ZGF0YSk7Ci19Ci0KLVRocmVhZElkZW50aWZpZXIgY3JlYXRlVGhyZWFk
KFRocmVhZEZ1bmN0aW9uV2l0aFJldHVyblZhbHVlIGVudHJ5UG9pbnQsIHZvaWQqIGRhdGEsIGNv
bnN0IGNoYXIqIG5hbWUpCi17Ci0gICAgYXV0byBpbnZvY2F0aW9uID0gc3RkOjptYWtlX3VuaXF1
ZTxUaHJlYWRGdW5jdGlvbldpdGhSZXR1cm5WYWx1ZUludm9jYXRpb24+KGVudHJ5UG9pbnQsIGRh
dGEpOwotCi0gICAgLy8gQmFsYW5jZWQgYnkgc3RkOjp1bmlxdWVfcHRyIGNvbnN0cnVjdG9yIGlu
IGNvbXBhdEVudHJ5UG9pbnQuCi0gICAgcmV0dXJuIGNyZWF0ZVRocmVhZChjb21wYXRFbnRyeVBv
aW50LCBpbnZvY2F0aW9uLnJlbGVhc2UoKSwgbmFtZSk7Ci19Ci0KLVdURl9FWFBPUlRfUFJJVkFU
RSBpbnQgd2FpdEZvclRocmVhZENvbXBsZXRpb24oVGhyZWFkSWRlbnRpZmllciwgdm9pZCoqKTsK
LQotaW50IHdhaXRGb3JUaHJlYWRDb21wbGV0aW9uKFRocmVhZElkZW50aWZpZXIgdGhyZWFkSUQs
IHZvaWQqKikKLXsKLSAgICByZXR1cm4gd2FpdEZvclRocmVhZENvbXBsZXRpb24odGhyZWFkSUQp
OwotfQotCi0vLyBUaGlzIGZ1bmN0aW9uIGlzIGRlcHJlY2F0ZWQgYnV0IG5lZWRzIHRvIGJlIGtl
cHQgYXJvdW5kIGZvciBiYWNrd2FyZAotLy8gY29tcGF0aWJpbGl0eS4gVXNlIHRoZSAzLWFyZ3Vt
ZW50IHZlcnNpb24gb2YgY3JlYXRlVGhyZWFkIGFib3ZlLgotCi1XVEZfRVhQT1JUX1BSSVZBVEUg
VGhyZWFkSWRlbnRpZmllciBjcmVhdGVUaHJlYWQoVGhyZWFkRnVuY3Rpb25XaXRoUmV0dXJuVmFs
dWUgZW50cnlQb2ludCwgdm9pZCogZGF0YSk7Ci0KLVRocmVhZElkZW50aWZpZXIgY3JlYXRlVGhy
ZWFkKFRocmVhZEZ1bmN0aW9uV2l0aFJldHVyblZhbHVlIGVudHJ5UG9pbnQsIHZvaWQqIGRhdGEp
Ci17Ci0gICAgYXV0byBpbnZvY2F0aW9uID0gc3RkOjptYWtlX3VuaXF1ZTxUaHJlYWRGdW5jdGlv
bldpdGhSZXR1cm5WYWx1ZUludm9jYXRpb24+KGVudHJ5UG9pbnQsIGRhdGEpOwotCi0gICAgLy8g
QmFsYW5jZWQgYnkgYWRvcHRQdHIoKSBpbiBjb21wYXRFbnRyeVBvaW50LgotICAgIHJldHVybiBj
cmVhdGVUaHJlYWQoY29tcGF0RW50cnlQb2ludCwgaW52b2NhdGlvbi5yZWxlYXNlKCksIDApOwot
fQotI2VuZGlmCi0KIH0gLy8gbmFtZXNwYWNlIFdURgpkaWZmIC0tZ2l0IGEvU291cmNlL1dURi93
dGYvVGhyZWFkaW5nLmggYi9Tb3VyY2UvV1RGL3d0Zi9UaHJlYWRpbmcuaAppbmRleCAzNjZkZmJi
OThjZDBjZmY2ZGJiNDQ2YTJlMjhhM2RiYjY4NjNlYzMxLi41OTA2ZmY3NGExZTYxZmYzZmE4Y2Q3
YTI5MmVlZTc1MTYzNzQ2ZTA1IDEwMDY0NAotLS0gYS9Tb3VyY2UvV1RGL3d0Zi9UaHJlYWRpbmcu
aAorKysgYi9Tb3VyY2UvV1RGL3d0Zi9UaHJlYWRpbmcuaApAQCAtMSw1ICsxLDUgQEAKIC8qCi0g
KiBDb3B5cmlnaHQgKEMpIDIwMDcsIDIwMDgsIDIwMTAgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJl
c2VydmVkLgorICogQ29weXJpZ2h0IChDKSAyMDA3LCAyMDA4LCAyMDEwLCAyMDE0IEFwcGxlIElu
Yy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KICAqIENvcHlyaWdodCAoQykgMjAwNyBKdXN0aW4gSGF5
Z29vZCAoamhheWdvb2RAcmVha3RpeC5jb20pCiAgKgogICogUmVkaXN0cmlidXRpb24gYW5kIHVz
ZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CkBAIC0yNSw0MCAr
MjUsMTYgQEAKICAqIE9OIEFOWSBUSEVPUlkgT0YgTElBQklMSVRZLCBXSEVUSEVSIElOIENPTlRS
QUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUCiAgKiAoSU5DTFVESU5HIE5FR0xJR0VOQ0Ug
T1IgT1RIRVJXSVNFKSBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UgT0YKICAqIFRI
SVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBE
QU1BR0UuCi0gKgotICoKLSAqIE5vdGU6IFRoZSBpbXBsZW1lbnRhdGlvbnMgb2YgSW50ZXJsb2Nr
ZWRJbmNyZW1lbnQgYW5kIEludGVybG9ja2VkRGVjcmVtZW50IGFyZSBiYXNlZAotICogb24gYXRv
bWljX2luY3JlbWVudCBhbmQgYXRvbWljX2V4Y2hhbmdlX2FuZF9hZGQgZnJvbSB0aGUgQm9vc3Qg
QysrIExpYnJhcnkuIFRoZSBsaWNlbnNlCi0gKiBpcyB2aXJ0dWFsbHkgaWRlbnRpY2FsIHRvIHRo
ZSBBcHBsZSBsaWNlbnNlIGFib3ZlIGJ1dCBpcyBpbmNsdWRlZCBoZXJlIGZvciBjb21wbGV0ZW5l
c3MuCi0gKgotICogQm9vc3QgU29mdHdhcmUgTGljZW5zZSAtIFZlcnNpb24gMS4wIC0gQXVndXN0
IDE3dGgsIDIwMDMKLSAqIAotICogUGVybWlzc2lvbiBpcyBoZXJlYnkgZ3JhbnRlZCwgZnJlZSBv
ZiBjaGFyZ2UsIHRvIGFueSBwZXJzb24gb3Igb3JnYW5pemF0aW9uCi0gKiBvYnRhaW5pbmcgYSBj
b3B5IG9mIHRoZSBzb2Z0d2FyZSBhbmQgYWNjb21wYW55aW5nIGRvY3VtZW50YXRpb24gY292ZXJl
ZCBieQotICogdGhpcyBsaWNlbnNlICh0aGUgIlNvZnR3YXJlIikgdG8gdXNlLCByZXByb2R1Y2Us
IGRpc3BsYXksIGRpc3RyaWJ1dGUsCi0gKiBleGVjdXRlLCBhbmQgdHJhbnNtaXQgdGhlIFNvZnR3
YXJlLCBhbmQgdG8gcHJlcGFyZSBkZXJpdmF0aXZlIHdvcmtzIG9mIHRoZQotICogU29mdHdhcmUs
IGFuZCB0byBwZXJtaXQgdGhpcmQtcGFydGllcyB0byB3aG9tIHRoZSBTb2Z0d2FyZSBpcyBmdXJu
aXNoZWQgdG8KLSAqIGRvIHNvLCBhbGwgc3ViamVjdCB0byB0aGUgZm9sbG93aW5nOgotICogCi0g
KiBUaGUgY29weXJpZ2h0IG5vdGljZXMgaW4gdGhlIFNvZnR3YXJlIGFuZCB0aGlzIGVudGlyZSBz
dGF0ZW1lbnQsIGluY2x1ZGluZwotICogdGhlIGFib3ZlIGxpY2Vuc2UgZ3JhbnQsIHRoaXMgcmVz
dHJpY3Rpb24gYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciwKLSAqIG11c3QgYmUgaW5jbHVk
ZWQgaW4gYWxsIGNvcGllcyBvZiB0aGUgU29mdHdhcmUsIGluIHdob2xlIG9yIGluIHBhcnQsIGFu
ZAotICogYWxsIGRlcml2YXRpdmUgd29ya3Mgb2YgdGhlIFNvZnR3YXJlLCB1bmxlc3Mgc3VjaCBj
b3BpZXMgb3IgZGVyaXZhdGl2ZQotICogd29ya3MgYXJlIHNvbGVseSBpbiB0aGUgZm9ybSBvZiBt
YWNoaW5lLWV4ZWN1dGFibGUgb2JqZWN0IGNvZGUgZ2VuZXJhdGVkIGJ5Ci0gKiBhIHNvdXJjZSBs
YW5ndWFnZSBwcm9jZXNzb3IuCi0gKiAKLSAqIFRIRSBTT0ZUV0FSRSBJUyBQUk9WSURFRCAiQVMg
SVMiLCBXSVRIT1VUIFdBUlJBTlRZIE9GIEFOWSBLSU5ELCBFWFBSRVNTIE9SCi0gKiBJTVBMSUVE
LCBJTkNMVURJTkcgQlVUIE5PVCBMSU1JVEVEIFRPIFRIRSBXQVJSQU5USUVTIE9GIE1FUkNIQU5U
QUJJTElUWSwKLSAqIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLCBUSVRMRSBBTkQg
Tk9OLUlORlJJTkdFTUVOVC4gSU4gTk8gRVZFTlQKLSAqIFNIQUxMIFRIRSBDT1BZUklHSFQgSE9M
REVSUyBPUiBBTllPTkUgRElTVFJJQlVUSU5HIFRIRSBTT0ZUV0FSRSBCRSBMSUFCTEUKLSAqIEZP
UiBBTlkgREFNQUdFUyBPUiBPVEhFUiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFRP
UlQgT1IgT1RIRVJXSVNFLAotICogQVJJU0lORyBGUk9NLCBPVVQgT0YgT1IgSU4gQ09OTkVDVElP
TiBXSVRIIFRIRSBTT0ZUV0FSRSBPUiBUSEUgVVNFIE9SIE9USEVSCi0gKiBERUFMSU5HUyBJTiBU
SEUgU09GVFdBUkUuCiAgKi8KIAogI2lmbmRlZiBUaHJlYWRpbmdfaAogI2RlZmluZSBUaHJlYWRp
bmdfaAogCisvLyBGSVhNRTogTm90IHN1cmUgd2h5IHRoZXJlIGFyZSBzbyBtYW55IGluY2x1ZGVz
IGhlcmUuCisvLyBJcyB0aGlzIGludGVuZGVkIHRvIGJlIGNvbnZlbmllbmNlIHNvIHRoYXQgb3Ro
ZXJzIGRvbid0IGhhdmUgdG8gaW5jbHVkZSB0aGUgaW5kaXZpZHVhbCBmaWxlcz8KKy8vIE5vdGhp
bmcgaW4gdGhpcyBoZWFkZXIgZGVwZW5kcyBvbiBBc3NlcnRpb25zLCBBdG9taWNzLCBMb2NrZXIs
IE5vbmNvcHlhYmxlLCBUaHJlYWRTYWZlUmVmQ291bnRlZCwgb3IgVGhyZWFkaW5nUHJpbWl0aXZl
cy4KKworI2luY2x1ZGUgPGZ1bmN0aW9uYWw+CiAjaW5jbHVkZSA8c3RkaW50Lmg+CiAjaW5jbHVk
ZSA8d3RmL0Fzc2VydGlvbnMuaD4KICNpbmNsdWRlIDx3dGYvQXRvbWljcy5oPgpAQCAtNzksMTMg
KzU1LDIwIEBAIFdURl9FWFBPUlRfUFJJVkFURSB2b2lkIGluaXRpYWxpemVUaHJlYWRpbmcoKTsK
IAogLy8gUmV0dXJucyAwIGlmIHRocmVhZCBjcmVhdGlvbiBmYWlsZWQuCiAvLyBUaGUgdGhyZWFk
IG5hbWUgbXVzdCBiZSBhIGxpdGVyYWwgc2luY2Ugb24gc29tZSBwbGF0Zm9ybXMgaXQncyBwYXNz
ZWQgaW4gdG8gdGhlIHRocmVhZC4KLVdURl9FWFBPUlRfUFJJVkFURSBUaHJlYWRJZGVudGlmaWVy
IGNyZWF0ZVRocmVhZChUaHJlYWRGdW5jdGlvbiwgdm9pZCosIGNvbnN0IGNoYXIqIHRocmVhZE5h
bWUpOworV1RGX0VYUE9SVF9QUklWQVRFIFRocmVhZElkZW50aWZpZXIgY3JlYXRlVGhyZWFkKGNv
bnN0IGNoYXIqIHRocmVhZE5hbWUsIHN0ZDo6ZnVuY3Rpb248dm9pZCgpPik7CiAKIC8vIE1hcmsg
dGhlIGN1cnJlbnQgdGhyZWFkIGFzIHJlcXVpcmluZyBVSSByZXNwb25zaXZlbmVzcy4KIFdURl9F
WFBPUlRfUFJJVkFURSB2b2lkIHNldEN1cnJlbnRUaHJlYWRJc1VzZXJJbnRlcmFjdGl2ZSgpOwot
CiBXVEZfRVhQT1JUX1BSSVZBVEUgdm9pZCBzZXRDdXJyZW50VGhyZWFkSXNVc2VySW5pdGlhdGVk
KCk7CiAKK1dURl9FWFBPUlRfUFJJVkFURSBUaHJlYWRJZGVudGlmaWVyIGN1cnJlbnRUaHJlYWQo
KTsKK1dURl9FWFBPUlRfUFJJVkFURSB2b2lkIGNoYW5nZVRocmVhZFByaW9yaXR5KFRocmVhZElk
ZW50aWZpZXIsIGludCk7CitXVEZfRVhQT1JUX1BSSVZBVEUgaW50IHdhaXRGb3JUaHJlYWRDb21w
bGV0aW9uKFRocmVhZElkZW50aWZpZXIpOworV1RGX0VYUE9SVF9QUklWQVRFIHZvaWQgZGV0YWNo
VGhyZWFkKFRocmVhZElkZW50aWZpZXIpOworCisvLyBEZXByZWNhdGVkIGZ1bmN0aW9uLXBvaW50
ZXItYmFzZWQgdGhyZWFkIGNyZWF0aW9uLgorV1RGX0VYUE9SVF9QUklWQVRFIFRocmVhZElkZW50
aWZpZXIgY3JlYXRlVGhyZWFkKFRocmVhZEZ1bmN0aW9uLCB2b2lkKiwgY29uc3QgY2hhciogdGhy
ZWFkTmFtZSk7CisKIC8vIEludGVybmFsIHBsYXRmb3JtLXNwZWNpZmljIGNyZWF0ZVRocmVhZCBp
bXBsZW1lbnRhdGlvbi4KIFRocmVhZElkZW50aWZpZXIgY3JlYXRlVGhyZWFkSW50ZXJuYWwoVGhy
ZWFkRnVuY3Rpb24sIHZvaWQqLCBjb25zdCBjaGFyKiB0aHJlYWROYW1lKTsKIApAQCAtOTMsMTEg
Kzc2LDYgQEAgVGhyZWFkSWRlbnRpZmllciBjcmVhdGVUaHJlYWRJbnRlcm5hbChUaHJlYWRGdW5j
dGlvbiwgdm9pZCosIGNvbnN0IGNoYXIqIHRocmVhZE4KIC8vIEhlbHBmdWwgZm9yIHBsYXRmb3Jt
cyB3aGVyZSB0aGUgdGhyZWFkIG5hbWUgbXVzdCBiZSBzZXQgZnJvbSB3aXRoaW4gdGhlIHRocmVh
ZC4KIHZvaWQgaW5pdGlhbGl6ZUN1cnJlbnRUaHJlYWRJbnRlcm5hbChjb25zdCBjaGFyKiB0aHJl
YWROYW1lKTsKIAotV1RGX0VYUE9SVF9QUklWQVRFIFRocmVhZElkZW50aWZpZXIgY3VycmVudFRo
cmVhZCgpOwotV1RGX0VYUE9SVF9QUklWQVRFIHZvaWQgY2hhbmdlVGhyZWFkUHJpb3JpdHkoVGhy
ZWFkSWRlbnRpZmllciwgaW50KTsKLVdURl9FWFBPUlRfUFJJVkFURSBpbnQgd2FpdEZvclRocmVh
ZENvbXBsZXRpb24oVGhyZWFkSWRlbnRpZmllcik7Ci1XVEZfRVhQT1JUX1BSSVZBVEUgdm9pZCBk
ZXRhY2hUaHJlYWQoVGhyZWFkSWRlbnRpZmllcik7Ci0KIH0gLy8gbmFtZXNwYWNlIFdURgogCiB1
c2luZyBXVEY6OlRocmVhZElkZW50aWZpZXI7CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9D
TWFrZUxpc3RzLnR4dCBiL1NvdXJjZS9XZWJDb3JlL0NNYWtlTGlzdHMudHh0CmluZGV4IGQ4ZTZh
YWE0OWUxNzU3NDEzMjhhNDQ2MmQyNzkxYzI3NDNiZWFhNTkuLjE3NmEwZDgyNmZmYTM0ODA1MmNm
MWVkODU0ZjIxNjEzYzA1NmRmZjIgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL0NNYWtlTGlz
dHMudHh0CisrKyBiL1NvdXJjZS9XZWJDb3JlL0NNYWtlTGlzdHMudHh0CkBAIC0xNTA1LDcgKzE1
MDUsNiBAQCBzZXQoV2ViQ29yZV9TT1VSQ0VTCiAgICAgZmlsZWFwaS9GaWxlUmVhZGVyLmNwcAog
ICAgIGZpbGVhcGkvRmlsZVJlYWRlckxvYWRlci5jcHAKICAgICBmaWxlYXBpL0ZpbGVSZWFkZXJT
eW5jLmNwcAotICAgIGZpbGVhcGkvRmlsZVRocmVhZC5jcHAKICAgICBmaWxlYXBpL1RocmVhZGFi
bGVCbG9iUmVnaXN0cnkuY3BwCiAgICAgZmlsZWFwaS9XZWJLaXRCbG9iQnVpbGRlci5jcHAKIApk
aWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvV2ViQ29yZS52Y3hwcm9qL1dlYkNvcmUudmN4cHJv
aiBiL1NvdXJjZS9XZWJDb3JlL1dlYkNvcmUudmN4cHJvai9XZWJDb3JlLnZjeHByb2oKaW5kZXgg
NTFhNGVkN2YwMWQ4MDAwODlmNTJlYjFmN2Q5MTgyMjk4Njc3YWQwYi4uYzU5NTg0YzNmYjRlZWZk
ZmMwNmVmMWZjZjI0NTdhNjVkZjY2NjNjNCAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvV2Vi
Q29yZS52Y3hwcm9qL1dlYkNvcmUudmN4cHJvagorKysgYi9Tb3VyY2UvV2ViQ29yZS9XZWJDb3Jl
LnZjeHByb2ovV2ViQ29yZS52Y3hwcm9qCkBAIC0xNDkzNSw3ICsxNDkzNSw2IEBACiAgICAgPENs
Q29tcGlsZSBJbmNsdWRlPSIuLlxmaWxlYXBpXEZpbGVSZWFkZXIuY3BwIiAvPgogICAgIDxDbENv
bXBpbGUgSW5jbHVkZT0iLi5cZmlsZWFwaVxGaWxlUmVhZGVyTG9hZGVyLmNwcCIgLz4KICAgICA8
Q2xDb21waWxlIEluY2x1ZGU9Ii4uXGZpbGVhcGlcRmlsZVJlYWRlclN5bmMuY3BwIiAvPgotICAg
IDxDbENvbXBpbGUgSW5jbHVkZT0iLi5cZmlsZWFwaVxGaWxlVGhyZWFkLmNwcCIgLz4KICAgICA8
Q2xDb21waWxlIEluY2x1ZGU9Ii4uXGh0bWxcRm9ybUFzc29jaWF0ZWRFbGVtZW50LmNwcCIgLz4K
ICAgICA8Q2xDb21waWxlIEluY2x1ZGU9Ii4uXGh0bWxcRm9ybUNvbnRyb2xsZXIuY3BwIiAvPgog
ICAgIDxDbENvbXBpbGUgSW5jbHVkZT0iLi5caHRtbFxGb3JtRGF0YUxpc3QuY3BwIiAvPgpAQCAt
MjA3MTQsNyArMjA3MTMsNiBAQAogICAgIDxDbEluY2x1ZGUgSW5jbHVkZT0iLi5cZmlsZWFwaVxG
aWxlUmVhZGVyTG9hZGVyLmgiIC8+CiAgICAgPENsSW5jbHVkZSBJbmNsdWRlPSIuLlxmaWxlYXBp
XEZpbGVSZWFkZXJMb2FkZXJDbGllbnQuaCIgLz4KICAgICA8Q2xJbmNsdWRlIEluY2x1ZGU9Ii4u
XGZpbGVhcGlcRmlsZVJlYWRlclN5bmMuaCIgLz4KLSAgICA8Q2xJbmNsdWRlIEluY2x1ZGU9Ii4u
XGZpbGVhcGlcRmlsZVRocmVhZC5oIiAvPgogICAgIDxDbEluY2x1ZGUgSW5jbHVkZT0iLi5caHRt
bFxGb3JtQXNzb2NpYXRlZEVsZW1lbnQuaCIgLz4KICAgICA8Q2xJbmNsdWRlIEluY2x1ZGU9Ii4u
XGh0bWxcRm9ybUNvbnRyb2xsZXIuaCIgLz4KICAgICA8Q2xJbmNsdWRlIEluY2x1ZGU9Ii4uXGh0
bWxcRm9ybURhdGFMaXN0LmgiIC8+CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9XZWJDb3Jl
LnZjeHByb2ovV2ViQ29yZS52Y3hwcm9qLmZpbHRlcnMgYi9Tb3VyY2UvV2ViQ29yZS9XZWJDb3Jl
LnZjeHByb2ovV2ViQ29yZS52Y3hwcm9qLmZpbHRlcnMKaW5kZXggNDY4ZmE1ZTUyZjc3NTdiMmZi
MzgyYjcwM2NiMWQ4MGZmY2M0MWJiOC4uOWIwNmExNWYxNzczYWFjOGM5ZWQ1Y2E5NDJkMGM5MzUy
ZGMzOWQzZCAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvV2ViQ29yZS52Y3hwcm9qL1dlYkNv
cmUudmN4cHJvai5maWx0ZXJzCisrKyBiL1NvdXJjZS9XZWJDb3JlL1dlYkNvcmUudmN4cHJvai9X
ZWJDb3JlLnZjeHByb2ouZmlsdGVycwpAQCAtMzcxNyw5ICszNzE3LDYgQEAKICAgICA8Q2xDb21w
aWxlIEluY2x1ZGU9Ii4uXGZpbGVhcGlcRmlsZVJlYWRlclN5bmMuY3BwIj4KICAgICAgIDxGaWx0
ZXI+aHRtbDwvRmlsdGVyPgogICAgIDwvQ2xDb21waWxlPgotICAgIDxDbENvbXBpbGUgSW5jbHVk
ZT0iLi5cZmlsZWFwaVxGaWxlVGhyZWFkLmNwcCI+Ci0gICAgICA8RmlsdGVyPmh0bWw8L0ZpbHRl
cj4KLSAgICA8L0NsQ29tcGlsZT4KICAgICA8Q2xDb21waWxlIEluY2x1ZGU9Ii4uXGh0bWxcRm9y
bUFzc29jaWF0ZWRFbGVtZW50LmNwcCI+CiAgICAgICA8RmlsdGVyPmh0bWw8L0ZpbHRlcj4KICAg
ICA8L0NsQ29tcGlsZT4KQEAgLTEwODY5LDkgKzEwODY2LDYgQEAKICAgICA8Q2xJbmNsdWRlIElu
Y2x1ZGU9Ii4uXGZpbGVhcGlcRmlsZVJlYWRlclN5bmMuaCI+CiAgICAgICA8RmlsdGVyPmh0bWw8
L0ZpbHRlcj4KICAgICA8L0NsSW5jbHVkZT4KLSAgICA8Q2xJbmNsdWRlIEluY2x1ZGU9Ii4uXGZp
bGVhcGlcRmlsZVRocmVhZC5oIj4KLSAgICAgIDxGaWx0ZXI+aHRtbDwvRmlsdGVyPgotICAgIDwv
Q2xJbmNsdWRlPgogICAgIDxDbEluY2x1ZGUgSW5jbHVkZT0iLi5caHRtbFxGb3JtQXNzb2NpYXRl
ZEVsZW1lbnQuaCI+CiAgICAgICA8RmlsdGVyPmh0bWw8L0ZpbHRlcj4KICAgICA8L0NsSW5jbHVk
ZT4KZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL1dlYkNvcmUueGNvZGVwcm9qL3Byb2plY3Qu
cGJ4cHJvaiBiL1NvdXJjZS9XZWJDb3JlL1dlYkNvcmUueGNvZGVwcm9qL3Byb2plY3QucGJ4cHJv
agppbmRleCA0NDA1ZGJlNWYyOWMxYTE5ZWRjYmM5YzcyZTM4ZDUyMTQ2ZGZjM2UxLi5mM2VkNDI3
YjBlYjQxMDM5ODFkMTZiNGVlZTY1M2NjNmM0MTNhYjlkIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2Vi
Q29yZS9XZWJDb3JlLnhjb2RlcHJvai9wcm9qZWN0LnBieHByb2oKKysrIGIvU291cmNlL1dlYkNv
cmUvV2ViQ29yZS54Y29kZXByb2ovcHJvamVjdC5wYnhwcm9qCkBAIC0zNDc1LDggKzM0NzUsNiBA
QAogCQk5NzZENkM4NjEyMkI4QTNEMDAxRkQxRjcgLyogRmlsZUxpc3QuaCBpbiBIZWFkZXJzICov
ID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDk3NkQ2QzY3MTIyQjhBM0QwMDFGRDFG
NyAvKiBGaWxlTGlzdC5oICovOyB9OwogCQk5NzZENkM4ODEyMkI4QTNEMDAxRkQxRjcgLyogRmls
ZVJlYWRlci5jcHAgaW4gU291cmNlcyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYg
PSA5NzZENkM2OTEyMkI4QTNEMDAxRkQxRjcgLyogRmlsZVJlYWRlci5jcHAgKi87IH07CiAJCTk3
NkQ2Qzg5MTIyQjhBM0QwMDFGRDFGNyAvKiBGaWxlUmVhZGVyLmggaW4gSGVhZGVycyAqLyA9IHtp
c2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSA5NzZENkM2QTEyMkI4QTNEMDAxRkQxRjcgLyog
RmlsZVJlYWRlci5oICovOyB9OwotCQk5NzZENkM4RDEyMkI4QTNEMDAxRkQxRjcgLyogRmlsZVRo
cmVhZC5jcHAgaW4gU291cmNlcyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSA5
NzZENkM2RTEyMkI4QTNEMDAxRkQxRjcgLyogRmlsZVRocmVhZC5jcHAgKi87IH07Ci0JCTk3NkQ2
QzhFMTIyQjhBM0QwMDFGRDFGNyAvKiBGaWxlVGhyZWFkLmggaW4gSGVhZGVycyAqLyA9IHtpc2Eg
PSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSA5NzZENkM2RjEyMkI4QTNEMDAxRkQxRjcgLyogRmls
ZVRocmVhZC5oICovOyB9OwogCQk5NzZENkM5NDEyMkI4QTNEMDAxRkQxRjcgLyogVGhyZWFkYWJs
ZUJsb2JSZWdpc3RyeS5jcHAgaW4gU291cmNlcyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZp
bGVSZWYgPSA5NzZENkM3NTEyMkI4QTNEMDAxRkQxRjcgLyogVGhyZWFkYWJsZUJsb2JSZWdpc3Ry
eS5jcHAgKi87IH07CiAJCTk3NkQ2Qzk1MTIyQjhBM0QwMDFGRDFGNyAvKiBUaHJlYWRhYmxlQmxv
YlJlZ2lzdHJ5LmggaW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYg
PSA5NzZENkM3NjEyMkI4QTNEMDAxRkQxRjcgLyogVGhyZWFkYWJsZUJsb2JSZWdpc3RyeS5oICov
OyB9OwogCQk5NzZGMzZFQTE0Njg2MjI1MDA1RTkzQjQgLyogU2VjdXJpdHlDb250ZXh0LmNwcCBp
biBTb3VyY2VzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDk3NkYzNkU4MTQ2
ODYyMjUwMDVFOTNCNCAvKiBTZWN1cml0eUNvbnRleHQuY3BwICovOyB9OwpAQCAtMTA2NDEsOCAr
MTA2MzksNiBAQAogCQk5NzZENkM2NzEyMkI4QTNEMDAxRkQxRjcgLyogRmlsZUxpc3QuaCAqLyA9
IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxl
VHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBuYW1lID0gRmlsZUxpc3QuaDsgcGF0aCA9IGZpbGVhcGkv
RmlsZUxpc3QuaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKIAkJOTc2RDZDNjkxMjJCOEEz
RDAwMUZEMUY3IC8qIEZpbGVSZWFkZXIuY3BwICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7
IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jcHAuY3Bw
OyBuYW1lID0gRmlsZVJlYWRlci5jcHA7IHBhdGggPSBmaWxlYXBpL0ZpbGVSZWFkZXIuY3BwOyBz
b3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwogCQk5NzZENkM2QTEyMkI4QTNEMDAxRkQxRjcgLyog
RmlsZVJlYWRlci5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9
IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7IG5hbWUgPSBGaWxlUmVhZGVy
Lmg7IHBhdGggPSBmaWxlYXBpL0ZpbGVSZWFkZXIuaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+Ijsg
fTsKLQkJOTc2RDZDNkUxMjJCOEEzRDAwMUZEMUY3IC8qIEZpbGVUaHJlYWQuY3BwICovID0ge2lz
YSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBl
ID0gc291cmNlY29kZS5jcHAuY3BwOyBuYW1lID0gRmlsZVRocmVhZC5jcHA7IHBhdGggPSBmaWxl
YXBpL0ZpbGVUaHJlYWQuY3BwOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwotCQk5NzZENkM2
RjEyMkI4QTNEMDAxRkQxRjcgLyogRmlsZVRocmVhZC5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZl
cmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5j
Lmg7IG5hbWUgPSBGaWxlVGhyZWFkLmg7IHBhdGggPSBmaWxlYXBpL0ZpbGVUaHJlYWQuaDsgc291
cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKIAkJOTc2RDZDNzUxMjJCOEEzRDAwMUZEMUY3IC8qIFRo
cmVhZGFibGVCbG9iUmVnaXN0cnkuY3BwICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZp
bGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jcHAuY3BwOyBu
YW1lID0gVGhyZWFkYWJsZUJsb2JSZWdpc3RyeS5jcHA7IHBhdGggPSBmaWxlYXBpL1RocmVhZGFi
bGVCbG9iUmVnaXN0cnkuY3BwOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwogCQk5NzZENkM3
NjEyMkI4QTNEMDAxRkQxRjcgLyogVGhyZWFkYWJsZUJsb2JSZWdpc3RyeS5oICovID0ge2lzYSA9
IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0g
c291cmNlY29kZS5jLmg7IG5hbWUgPSBUaHJlYWRhYmxlQmxvYlJlZ2lzdHJ5Lmg7IHBhdGggPSBm
aWxlYXBpL1RocmVhZGFibGVCbG9iUmVnaXN0cnkuaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+Ijsg
fTsKIAkJOTc2RjM2RTgxNDY4NjIyNTAwNUU5M0I0IC8qIFNlY3VyaXR5Q29udGV4dC5jcHAgKi8g
PSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmls
ZVR5cGUgPSBzb3VyY2Vjb2RlLmNwcC5jcHA7IHBhdGggPSBTZWN1cml0eUNvbnRleHQuY3BwOyBz
b3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwpAQCAtMTgyMjksOCArMTgyMjUsNiBAQAogCQkJCTJF
REYzNjlBMTIyQzk0QjQwMDJGN0Q0RSAvKiBGaWxlUmVhZGVyU3luYy5jcHAgKi8sCiAJCQkJMkVE
RjM2OUIxMjJDOTRCNDAwMkY3RDRFIC8qIEZpbGVSZWFkZXJTeW5jLmggKi8sCiAJCQkJRTFBQjFF
QkQxNEU5RTNBODAwNDQ5RTEzIC8qIEZpbGVSZWFkZXJTeW5jLmlkbCAqLywKLQkJCQk5NzZENkM2
RTEyMkI4QTNEMDAxRkQxRjcgLyogRmlsZVRocmVhZC5jcHAgKi8sCi0JCQkJOTc2RDZDNkYxMjJC
OEEzRDAwMUZEMUY3IC8qIEZpbGVUaHJlYWQuaCAqLywKIAkJCQk5NzZENkM3NTEyMkI4QTNEMDAx
RkQxRjcgLyogVGhyZWFkYWJsZUJsb2JSZWdpc3RyeS5jcHAgKi8sCiAJCQkJOTc2RDZDNzYxMjJC
OEEzRDAwMUZEMUY3IC8qIFRocmVhZGFibGVCbG9iUmVnaXN0cnkuaCAqLywKIAkJCQk5NzZENkM1
QzEyMkI4QTNEMDAxRkQxRjcgLyogV2ViS2l0QmxvYkJ1aWxkZXIuY3BwICovLApAQCAtMjQzMjQs
NyArMjQzMTgsNiBAQAogCQkJCTJFRjFCRkY5MTIxQ0IwQ0UwMEMyNzYyNyAvKiBGaWxlU3RyZWFt
Q2xpZW50LmggaW4gSGVhZGVycyAqLywKIAkJCQk1MTRCM0Y3MzBDNzIyMDQ3MDAwNTMwREYgLyog
RmlsZVN5c3RlbS5oIGluIEhlYWRlcnMgKi8sCiAJCQkJMjZDMTdBM0UxNDkxRDJENDAwRDEyQkEy
IC8qIEZpbGVTeXN0ZW1JT1MuaCBpbiBIZWFkZXJzICovLAotCQkJCTk3NkQ2QzhFMTIyQjhBM0Qw
MDFGRDFGNyAvKiBGaWxlVGhyZWFkLmggaW4gSGVhZGVycyAqLywKIAkJCQlCQzVFQjY5RjBFODFE
QUVCMDBCMjU5NjUgLyogRmlsbExheWVyLmggaW4gSGVhZGVycyAqLywKIAkJCQk4NDVFNzJGODBG
RDI2MUVFMDBBODdENzkgLyogRmlsdGVyLmggaW4gSGVhZGVycyAqLywKIAkJCQkwOEM5MjUxQTBG
Q0M3QzRBMDA0ODBERUMgLyogRmlsdGVyRWZmZWN0LmggaW4gSGVhZGVycyAqLywKQEAgLTI3ODIw
LDcgKzI3ODEzLDYgQEAKIAkJCQkyNkMxN0EzRjE0OTFEMkQ0MDBEMTJCQTIgLyogRmlsZVN5c3Rl
bUlPUy5tbSBpbiBTb3VyY2VzICovLAogCQkJCTUxNEIzRjc2MEM3MjIwNTUwMDA1MzBERiAvKiBG
aWxlU3lzdGVtTWFjLm1tIGluIFNvdXJjZXMgKi8sCiAJCQkJNTE2MDMwMEIwQ0M0MjUxMjAwQzhB
QzI1IC8qIEZpbGVTeXN0ZW1QT1NJWC5jcHAgaW4gU291cmNlcyAqLywKLQkJCQk5NzZENkM4RDEy
MkI4QTNEMDAxRkQxRjcgLyogRmlsZVRocmVhZC5jcHAgaW4gU291cmNlcyAqLywKIAkJCQlCQzVF
QjY5RTBFODFEQUVCMDBCMjU5NjUgLyogRmlsbExheWVyLmNwcCBpbiBTb3VyY2VzICovLAogCQkJ
CTA4QzkyNTE5MEZDQzdDNEEwMDQ4MERFQyAvKiBGaWx0ZXJFZmZlY3QuY3BwIGluIFNvdXJjZXMg
Ki8sCiAJCQkJMzEzMTNGNjUxNDQzQjM1RjAwNkUyQTkwIC8qIEZpbHRlckVmZmVjdFJlbmRlcmVy
LmNwcCBpbiBTb3VyY2VzICovLApkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvYmluZGluZ3Mv
Z2VuZXJpYy9BY3RpdmVET01DYWxsYmFjay5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9iaW5kaW5ncy9n
ZW5lcmljL0FjdGl2ZURPTUNhbGxiYWNrLmNwcAppbmRleCA4MWExMGMxNGIyZGI1ZjE3MWRjMDY4
OGM4MDYxZTczZDAxZmE2OWNmLi41YjE3NDFlMTMxODNiMGY2ZmVhODEyNmNjMjkxY2RmZjQ5MjA5
ZjI3IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9iaW5kaW5ncy9nZW5lcmljL0FjdGl2ZURP
TUNhbGxiYWNrLmNwcAorKysgYi9Tb3VyY2UvV2ViQ29yZS9iaW5kaW5ncy9nZW5lcmljL0FjdGl2
ZURPTUNhbGxiYWNrLmNwcApAQCAtMzEsOSArMzEsNyBAQAogI2luY2x1ZGUgImNvbmZpZy5oIgog
I2luY2x1ZGUgIkFjdGl2ZURPTUNhbGxiYWNrLmgiCiAKLSNpbmNsdWRlICJBY3RpdmVET01PYmpl
Y3QuaCIKICNpbmNsdWRlICJTY3JpcHRFeGVjdXRpb25Db250ZXh0LmgiCi0jaW5jbHVkZSAiV29y
a2VyR2xvYmFsU2NvcGUuaCIKIAogbmFtZXNwYWNlIFdlYkNvcmUgewogCmRpZmYgLS1naXQgYS9T
b3VyY2UvV2ViQ29yZS9kb20vQWN0aXZlRE9NT2JqZWN0LmNwcCBiL1NvdXJjZS9XZWJDb3JlL2Rv
bS9BY3RpdmVET01PYmplY3QuY3BwCmluZGV4IDI5OWExYTMwMGU0NjRhM2E2YjU5ZWY2MTgxNDA0
YjZhYThiMWVlZGIuLmMzMjY3MWIxMDE4MGY4NDBmZTEyYTNhZjA3NWMxMWY5MjllODEyZDUgMTAw
NjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL2RvbS9BY3RpdmVET01PYmplY3QuY3BwCisrKyBiL1Nv
dXJjZS9XZWJDb3JlL2RvbS9BY3RpdmVET01PYmplY3QuY3BwCkBAIC0yOCw4ICsyOCw2IEBACiAj
aW5jbHVkZSAiQWN0aXZlRE9NT2JqZWN0LmgiCiAKICNpbmNsdWRlICJTY3JpcHRFeGVjdXRpb25D
b250ZXh0LmgiCi0jaW5jbHVkZSAiV29ya2VyR2xvYmFsU2NvcGUuaCIKLSNpbmNsdWRlICJXb3Jr
ZXJUaHJlYWQuaCIKIAogbmFtZXNwYWNlIFdlYkNvcmUgewogCmRpZmYgLS1naXQgYS9Tb3VyY2Uv
V2ViQ29yZS9maWxlYXBpL0FzeW5jRmlsZVN0cmVhbS5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9maWxl
YXBpL0FzeW5jRmlsZVN0cmVhbS5jcHAKaW5kZXggNWEzOTFmODdjZWUxNGNlNjcxODgzYjQwMzEw
NzIyMjBhMjQ5NjE3YS4uYjk4ZWVjZDA2NzI4NjRmM2FlMzdkOWIyM2FmYjczYWUwYjZlMWMzYyAx
MDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvZmlsZWFwaS9Bc3luY0ZpbGVTdHJlYW0uY3BwCisr
KyBiL1NvdXJjZS9XZWJDb3JlL2ZpbGVhcGkvQXN5bmNGaWxlU3RyZWFtLmNwcApAQCAtMSw2ICsx
LDYgQEAKIC8qCiAgKiBDb3B5cmlnaHQgKEMpIDIwMTAgR29vZ2xlIEluYy4gIEFsbCByaWdodHMg
cmVzZXJ2ZWQuCi0gKiBDb3B5cmlnaHQgKEMpIDIwMTIgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJl
c2VydmVkLgorICogQ29weXJpZ2h0IChDKSAyMDEyLCAyMDE0IEFwcGxlIEluYy4gQWxsIHJpZ2h0
cyByZXNlcnZlZC4KICAqCiAgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQg
YmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKICAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1p
dHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucyBhcmUKQEAgLTMwLDE2
MiArMzAsMTc5IEBACiAgKi8KIAogI2luY2x1ZGUgImNvbmZpZy5oIgotCiAjaW5jbHVkZSAiQXN5
bmNGaWxlU3RyZWFtLmgiCiAKLSNpbmNsdWRlICJCbG9iLmgiCiAjaW5jbHVkZSAiRmlsZVN0cmVh
bS5oIgogI2luY2x1ZGUgIkZpbGVTdHJlYW1DbGllbnQuaCIKLSNpbmNsdWRlICJGaWxlVGhyZWFk
LmgiCisjaW5jbHVkZSAiVVJMLmgiCisjaW5jbHVkZSA8d3RmL0F1dG9kcmFpbmVkUG9vbC5oPgog
I2luY2x1ZGUgPHd0Zi9NYWluVGhyZWFkLmg+Ci0jaW5jbHVkZSA8d3RmL3RleHQvV1RGU3RyaW5n
Lmg+Ci0KLSNpZiBQTEFURk9STShJT1MpCi0jaW5jbHVkZSAiV2ViQ29yZVRocmVhZC5oIgotI2Vu
ZGlmCisjaW5jbHVkZSA8d3RmL01lc3NhZ2VRdWV1ZS5oPgorI2luY2x1ZGUgPHd0Zi9OZXZlckRl
c3Ryb3llZC5oPgogCiBuYW1lc3BhY2UgV2ViQ29yZSB7CiAKLXN0YXRpYyBQYXNzUmVmUHRyPEZp
bGVUaHJlYWQ+IGNyZWF0ZUZpbGVUaHJlYWQoKQotewotICAgIFJlZlB0cjxGaWxlVGhyZWFkPiB0
aHJlYWQgPSBGaWxlVGhyZWFkOjpjcmVhdGUoKTsKLSAgICBpZiAoIXRocmVhZC0+c3RhcnQoKSkK
LSAgICAgICAgcmV0dXJuIDA7Ci0gICAgcmV0dXJuIHRocmVhZC5yZWxlYXNlKCk7Ci19CitzdHJ1
Y3QgQXN5bmNGaWxlU3RyZWFtOjpJbnRlcm5hbHMgeworICAgIGV4cGxpY2l0IEludGVybmFscyhG
aWxlU3RyZWFtQ2xpZW50Jik7CiAKLXN0YXRpYyBGaWxlVGhyZWFkKiBmaWxlVGhyZWFkKCkKKyAg
ICBGaWxlU3RyZWFtIHN0cmVhbTsKKyAgICBGaWxlU3RyZWFtQ2xpZW50JiBjbGllbnQ7CisgICAg
c3RkOjphdG9taWNfYm9vbCBkZXN0cm95ZWQ7Cit9OworCitpbmxpbmUgQXN5bmNGaWxlU3RyZWFt
OjpJbnRlcm5hbHM6OkludGVybmFscyhGaWxlU3RyZWFtQ2xpZW50JiBjbGllbnQpCisgICAgOiBj
bGllbnQoY2xpZW50KQogewotICAgIEFTU0VSVChpc01haW5UaHJlYWQoKSk7Ci0gICAgc3RhdGlj
IEZpbGVUaHJlYWQqIHRocmVhZCA9IGNyZWF0ZUZpbGVUaHJlYWQoKS5sZWFrUmVmKCk7Ci0gICAg
cmV0dXJuIHRocmVhZDsKKyAgICBhdG9taWNfaW5pdCgmZGVzdHJveWVkLCBmYWxzZSk7CiB9CiAK
LWlubGluZSBBc3luY0ZpbGVTdHJlYW06OkFzeW5jRmlsZVN0cmVhbShGaWxlU3RyZWFtQ2xpZW50
KiBjbGllbnQpCi0gICAgOiBtX3N0cmVhbShGaWxlU3RyZWFtOjpjcmVhdGUoKSkKLSAgICAsIG1f
Y2xpZW50KGNsaWVudCkKK3N0YXRpYyB2b2lkIGNhbGxPbkZpbGVUaHJlYWQoc3RkOjpmdW5jdGlv
bjx2b2lkKCk+JiYgZnVuY3Rpb24pCiB7CiAgICAgQVNTRVJUKGlzTWFpblRocmVhZCgpKTsKLX0K
KyAgICBBU1NFUlQoZnVuY3Rpb24pOwogCi1QYXNzUmVmUHRyPEFzeW5jRmlsZVN0cmVhbT4gQXN5
bmNGaWxlU3RyZWFtOjpjcmVhdGUoRmlsZVN0cmVhbUNsaWVudCogY2xpZW50KQotewotICAgIFJl
ZlB0cjxBc3luY0ZpbGVTdHJlYW0+IHByb3h5ID0gYWRvcHRSZWYobmV3IEFzeW5jRmlsZVN0cmVh
bShjbGllbnQpKTsKKyAgICBzdGF0aWMgTmV2ZXJEZXN0cm95ZWQ8TWVzc2FnZVF1ZXVlPHN0ZDo6
ZnVuY3Rpb248dm9pZCgpPj4+IHF1ZXVlOwogCi0gICAgLy8gSG9sZCBhIHJlZmVyZW5jZSBzbyB0
aGF0IHRoZSBpbnN0YW5jZSB3aWxsIG5vdCBnZXQgZGVsZXRlZCB3aGlsZSB0aGVyZSBhcmUgdGFz
a3Mgb24gdGhlIGZpbGUgdGhyZWFkLgotICAgIC8vIFRoaXMgaXMgYmFsYW5jZWQgYnkgdGhlIGRl
cmVmIGluIGRlcmVmUHJveHlPbkNvbnRleHQgYmVsb3cuCi0gICAgcHJveHktPnJlZigpOworICAg
IHN0YXRpYyBzdGQ6Om9uY2VfZmxhZyBjcmVhdGVGaWxlVGhyZWFkT25jZTsKKyAgICBzdGQ6OmNh
bGxfb25jZShjcmVhdGVGaWxlVGhyZWFkT25jZSwgW10geworICAgICAgICBjcmVhdGVUaHJlYWQo
IldlYkNvcmU6IEFzeW5jRmlsZVN0cmVhbSIsIFtdIHsKKyAgICAgICAgICAgIGZvciAoOzspIHsK
KyAgICAgICAgICAgICAgICBBdXRvZHJhaW5lZFBvb2wgcG9vbDsKIAotICAgIEFzeW5jRmlsZVN0
cmVhbSogcHJveHlQdHIgPSBwcm94eS5nZXQoKTsKLSAgICBmaWxlVGhyZWFkKCktPnBvc3RUYXNr
KHsgcHJveHlQdHIsIFs9XSB7Ci0gICAgICAgIC8vIEZJWE1FOiBJdCBpcyBub3QgY29ycmVjdCB0
byBjaGVjayBtX2NsaWVudCBmcm9tIGEgc2Vjb25kYXJ5IHRocmVhZCAtIHN0b3AoKSBjb3VsZCBi
ZSByYWNpbmcgd2l0aCB0aGlzIGNoZWNrLgotICAgICAgICBpZiAoIXByb3h5UHRyLT5jbGllbnQo
KSkKLSAgICAgICAgICAgIHJldHVybjsKKyAgICAgICAgICAgICAgICBhdXRvIGZ1bmN0aW9uID0g
cXVldWUuZ2V0KCkud2FpdEZvck1lc3NhZ2UoKTsKKworICAgICAgICAgICAgICAgIC8vIFRoaXMg
Y2FuIG5ldmVyIGJlIG51bGwgYmVjYXVzZSB3ZSBuZXZlciBraWxsIHRoZSBNZXNzYWdlUXVldWUu
CisgICAgICAgICAgICAgICAgQVNTRVJUKGZ1bmN0aW9uKTsKKworICAgICAgICAgICAgICAgIC8v
IFRoaXMgY2FuIGJldmVyIGJlIG51bGwgYmVjYXVzZSB3ZSBuZXZlciBxdWV1ZSBhIGZ1bmN0aW9u
IHRoYXQgaXMgbnVsbC4KKyAgICAgICAgICAgICAgICBBU1NFUlQoKmZ1bmN0aW9uKTsKIAotICAg
ICAgICBwcm94eVB0ci0+bV9zdHJlYW0tPnN0YXJ0KCk7Ci0gICAgICAgIGNhbGxPbk1haW5UaHJl
YWQoW3Byb3h5UHRyXSB7Ci0gICAgICAgICAgICBpZiAocHJveHlQdHItPmNsaWVudCgpKQotICAg
ICAgICAgICAgICAgIHByb3h5UHRyLT5jbGllbnQoKS0+ZGlkU3RhcnQoKTsKKyAgICAgICAgICAg
ICAgICAoKmZ1bmN0aW9uKSgpOworICAgICAgICAgICAgfQogICAgICAgICB9KTsKLSAgICB9IH0p
OworICAgIH0pOwogCi0gICAgcmV0dXJuIHByb3h5LnJlbGVhc2UoKTsKKyAgICBxdWV1ZS5nZXQo
KS5hcHBlbmQoc3RkOjptYWtlX3VuaXF1ZTxzdGQ6OmZ1bmN0aW9uPHZvaWQoKT4+KFdURjo6bW92
ZShmdW5jdGlvbikpKTsKK30KKworQXN5bmNGaWxlU3RyZWFtOjpBc3luY0ZpbGVTdHJlYW0oRmls
ZVN0cmVhbUNsaWVudCYgY2xpZW50KQorICAgIDogbV9pbnRlcm5hbHMoc3RkOjptYWtlX3VuaXF1
ZTxJbnRlcm5hbHM+KGNsaWVudCkpCit7CisgICAgQVNTRVJUKGlzTWFpblRocmVhZCgpKTsKIH0K
IAogQXN5bmNGaWxlU3RyZWFtOjp+QXN5bmNGaWxlU3RyZWFtKCkKIHsKKyAgICBBU1NFUlQoaXNN
YWluVGhyZWFkKCkpOworCisgICAgLy8gUmVsZWFzZSBzbyB0aGF0IHdlIGNhbiBjb250cm9sIHRo
ZSB0aW1pbmcgb2YgZGVsZXRpb24gYmVsb3cuCisgICAgYXV0byYgaW50ZXJuYWxzID0gKm1faW50
ZXJuYWxzLnJlbGVhc2UoKTsKKworICAgIC8vIFNldCBmbGFnIHRvIHByZXZlbnQgY2xpZW50IGNh
bGxiYWNrcyBhbmQgYWxzbyBwcmV2ZW50IHF1ZXVlZCBvcGVyYXRpb25zIGZyb20gc3RhcnRpbmcu
CisgICAgaW50ZXJuYWxzLmRlc3Ryb3llZC5zdG9yZSh0cnVlKTsKKworICAgIC8vIENhbGwgdGhy
b3VnaCBmaWxlIHRocmVhZCBhbmQgYmFjayB0byBtYWluIHRocmVhZCB0byBtYWtlIHN1cmUgZGVs
ZXRpb24gaGFwcGVucworICAgIC8vIGFmdGVyIGFsbCBmaWxlIHRocmVhZCBmdW5jdGlvbnMgYW5k
IGFsbCBtYWluIHRocmVhZCBmdW5jdGlvbnMgY2FsbGVkIGZyb20gdGhlbS4KKyAgICBjYWxsT25G
aWxlVGhyZWFkKFsmaW50ZXJuYWxzXSB7CisgICAgICAgIGNhbGxPbk1haW5UaHJlYWQoWyZpbnRl
cm5hbHNdIHsKKyAgICAgICAgICAgIGRlbGV0ZSAmaW50ZXJuYWxzOworICAgICAgICB9KTsKKyAg
ICB9KTsKIH0KIAotdm9pZCBBc3luY0ZpbGVTdHJlYW06OnN0b3AoKQordm9pZCBBc3luY0ZpbGVT
dHJlYW06OnBlcmZvcm0oc3RkOjpmdW5jdGlvbjxzdGQ6OmZ1bmN0aW9uPHZvaWQoRmlsZVN0cmVh
bUNsaWVudCYpPihGaWxlU3RyZWFtJik+IG9wZXJhdGlvbikKIHsKLSAgICAvLyBDbGVhciB0aGUg
Y2xpZW50IHNvIHRoYXQgd2Ugd29uJ3QgYmUgaW52b2tpbmcgY2FsbGJhY2tzIG9uIHRoZSBjbGll
bnQuCi0gICAgc2V0Q2xpZW50KDApOwotCi0gICAgZmlsZVRocmVhZCgpLT51bnNjaGVkdWxlVGFz
a3MobV9zdHJlYW0uZ2V0KCkpOwotICAgIGZpbGVUaHJlYWQoKS0+cG9zdFRhc2soeyB0aGlzLCBb
dGhpc10gewotICAgICAgICBtX3N0cmVhbS0+c3RvcCgpOwotICAgICAgICBjYWxsT25NYWluVGhy
ZWFkKFt0aGlzXSB7Ci0gICAgICAgICAgICBBU1NFUlQoaGFzT25lUmVmKCkpOwotICAgICAgICAg
ICAgZGVyZWYoKTsKKyAgICBhdXRvJiBpbnRlcm5hbHMgPSAqbV9pbnRlcm5hbHM7CisgICAgY2Fs
bE9uRmlsZVRocmVhZChbJmludGVybmFscywgb3BlcmF0aW9uXSB7CisgICAgICAgIC8vIERvbid0
IGRvIHRoZSBvcGVyYXRpb24gaWYgc3RvcCB3YXMgYWxyZWFkeSBjYWxsZWQgb24gdGhlIG1haW4g
dGhyZWFkLiBOb3RlIHRoYXQgdGhlcmUgaXMKKyAgICAgICAgLy8gYSByYWNlIGhlcmUsIGJ1dCBz
aW5jZSBza2lwcGluZyB0aGUgb3BlcmF0aW9uIGlzIGFuIG9wdGltaXphdGlvbiBpdCdzIE9LIHRo
YXQgd2UgY2FuJ3QKKyAgICAgICAgLy8gZ3VhcmFudGVlIGV4YWN0bHkgd2hpY2ggb3BlcmF0aW9u
cyBhcmUgc2tpcHBlZC4gTm90ZSB0aGF0IHRoaXMgaXMgYWxzbyB0aGUgb25seSByZWFzb24KKyAg
ICAgICAgLy8gd2UgdXNlIGFuIGF0b21pY19ib29sIHJhdGhlciB0aGFuIGp1c3QgYSBib29sIGZv
ciBkZXN0cm95ZWQuCisgICAgICAgIGlmIChpbnRlcm5hbHMuZGVzdHJveWVkLmxvYWQoKSkKKyAg
ICAgICAgICAgIHJldHVybjsKKyAgICAgICAgYXV0byBtYWluVGhyZWFkV29yayA9IG9wZXJhdGlv
bihpbnRlcm5hbHMuc3RyZWFtKTsKKyAgICAgICAgY2FsbE9uTWFpblRocmVhZChbJmludGVybmFs
cywgbWFpblRocmVhZFdvcmtdIHsKKyAgICAgICAgICAgIGlmIChpbnRlcm5hbHMuZGVzdHJveWVk
LmxvYWQoKSkKKyAgICAgICAgICAgICAgICByZXR1cm47CisgICAgICAgICAgICBtYWluVGhyZWFk
V29yayhpbnRlcm5hbHMuY2xpZW50KTsKICAgICAgICAgfSk7Ci0gICAgfSB9KTsKKyAgICB9KTsK
IH0KIAogdm9pZCBBc3luY0ZpbGVTdHJlYW06OmdldFNpemUoY29uc3QgU3RyaW5nJiBwYXRoLCBk
b3VibGUgZXhwZWN0ZWRNb2RpZmljYXRpb25UaW1lKQogewotICAgIFN0cmluZyBwYXRoQ29weSA9
IHBhdGguaXNvbGF0ZWRDb3B5KCk7Ci0gICAgZmlsZVRocmVhZCgpLT5wb3N0VGFzayh7IHRoaXMs
IFt0aGlzLCBwYXRoQ29weSwgZXhwZWN0ZWRNb2RpZmljYXRpb25UaW1lXSB7Ci0gICAgICAgIGxv
bmcgbG9uZyBzaXplID0gbV9zdHJlYW0tPmdldFNpemUocGF0aENvcHksIGV4cGVjdGVkTW9kaWZp
Y2F0aW9uVGltZSk7Ci0gICAgICAgIGNhbGxPbk1haW5UaHJlYWQoW3RoaXMsIHNpemVdIHsKLSAg
ICAgICAgICAgIGlmIChjbGllbnQoKSkKLSAgICAgICAgICAgICAgICBjbGllbnQoKS0+ZGlkR2V0
U2l6ZShzaXplKTsKLSAgICAgICAgfSk7Ci0gICAgfSB9KTsKKyAgICBTdHJpbmdDYXB0dXJlIGNh
cHR1cmVkUGF0aChwYXRoKTsKKyAgICAvLyBGSVhNRTogRXhwbGljaXQgcmV0dXJuIHR5cGUgaGVy
ZSBhbmQgaW4gYWxsIHRoZSBvdGhlciBjYXNlcyBsaWtlIHRoaXMgYmVsb3cgaXMgYSB3b3JrYXJv
dW5kIGZvciBhIGRlZmljaWVuY3kKKyAgICAvLyBpbiB0aGUgV2luZG93cyBjb21waWxlciBhdCB0
aGUgdGltZSBvZiB0aGlzIHdyaXRpbmcuIENvdWxkIHJlbW92ZSBpdCBpZiB0aGF0IGlzIHJlc29s
dmVkLgorICAgIHBlcmZvcm0oW2NhcHR1cmVkUGF0aCwgZXhwZWN0ZWRNb2RpZmljYXRpb25UaW1l
XShGaWxlU3RyZWFtJiBzdHJlYW0pIC0+IHN0ZDo6ZnVuY3Rpb248dm9pZChGaWxlU3RyZWFtQ2xp
ZW50Jik+IHsKKyAgICAgICAgbG9uZyBsb25nIHNpemUgPSBzdHJlYW0uZ2V0U2l6ZShjYXB0dXJl
ZFBhdGguc3RyaW5nKCksIGV4cGVjdGVkTW9kaWZpY2F0aW9uVGltZSk7CisgICAgICAgIHJldHVy
biBbc2l6ZV0oRmlsZVN0cmVhbUNsaWVudCYgY2xpZW50KSB7CisgICAgICAgICAgICBjbGllbnQu
ZGlkR2V0U2l6ZShzaXplKTsKKyAgICAgICAgfTsKKyAgICB9KTsKIH0KIAogdm9pZCBBc3luY0Zp
bGVTdHJlYW06Om9wZW5Gb3JSZWFkKGNvbnN0IFN0cmluZyYgcGF0aCwgbG9uZyBsb25nIG9mZnNl
dCwgbG9uZyBsb25nIGxlbmd0aCkKIHsKLSAgICBTdHJpbmcgcGF0aENvcHkgPSBwYXRoLmlzb2xh
dGVkQ29weSgpOwotICAgIGZpbGVUaHJlYWQoKS0+cG9zdFRhc2soeyB0aGlzLCBbdGhpcywgcGF0
aENvcHksIG9mZnNldCwgbGVuZ3RoXSB7Ci0gICAgICAgIGJvb2wgc3VjY2VzcyA9IG1fc3RyZWFt
LT5vcGVuRm9yUmVhZChwYXRoQ29weSwgb2Zmc2V0LCBsZW5ndGgpOwotICAgICAgICBjYWxsT25N
YWluVGhyZWFkKFt0aGlzLCBzdWNjZXNzXSB7Ci0gICAgICAgICAgICBpZiAoY2xpZW50KCkpCi0g
ICAgICAgICAgICAgICAgY2xpZW50KCktPmRpZE9wZW4oc3VjY2Vzcyk7Ci0gICAgICAgIH0pOwot
ICAgIH0gfSk7CisgICAgU3RyaW5nQ2FwdHVyZSBjYXB0dXJlZFBhdGgocGF0aCk7CisgICAgLy8g
RklYTUU6IEV4cGxpY2l0IHJldHVybiB0eXBlIGhlcmUgaXMgYSB3b3JrYXJvdW5kIGZvciBhIGRl
ZmljaWVuY3kgaW4gdGhlIFdpbmRvd3MgY29tcGlsZXIgYXQgdGhlIHRpbWUgb2YgdGhpcyB3cml0
aW5nLgorICAgIHBlcmZvcm0oW2NhcHR1cmVkUGF0aCwgb2Zmc2V0LCBsZW5ndGhdKEZpbGVTdHJl
YW0mIHN0cmVhbSkgLT4gc3RkOjpmdW5jdGlvbjx2b2lkKEZpbGVTdHJlYW1DbGllbnQmKT4gewor
ICAgICAgICBib29sIHN1Y2Nlc3MgPSBzdHJlYW0ub3BlbkZvclJlYWQoY2FwdHVyZWRQYXRoLnN0
cmluZygpLCBvZmZzZXQsIGxlbmd0aCk7CisgICAgICAgIHJldHVybiBbc3VjY2Vzc10oRmlsZVN0
cmVhbUNsaWVudCYgY2xpZW50KSB7CisgICAgICAgICAgICBjbGllbnQuZGlkT3BlbihzdWNjZXNz
KTsKKyAgICAgICAgfTsKKyAgICB9KTsKIH0KIAogdm9pZCBBc3luY0ZpbGVTdHJlYW06Om9wZW5G
b3JXcml0ZShjb25zdCBTdHJpbmcmIHBhdGgpCiB7Ci0gICAgU3RyaW5nIHBhdGhDb3B5ID0gcGF0
aC5pc29sYXRlZENvcHkoKTsKLSAgICBmaWxlVGhyZWFkKCktPnBvc3RUYXNrKHsgdGhpcywgW3Ro
aXMsIHBhdGhDb3B5XSB7Ci0gICAgICAgIGJvb2wgc3VjY2VzcyA9IG1fc3RyZWFtLT5vcGVuRm9y
V3JpdGUocGF0aENvcHkpOwotICAgICAgICBjYWxsT25NYWluVGhyZWFkKFt0aGlzLCBzdWNjZXNz
XSB7Ci0gICAgICAgICAgICBpZiAoY2xpZW50KCkpCi0gICAgICAgICAgICAgICAgY2xpZW50KCkt
PmRpZE9wZW4oc3VjY2Vzcyk7Ci0gICAgICAgIH0pOwotICAgIH0gfSk7CisgICAgU3RyaW5nQ2Fw
dHVyZSBjYXB0dXJlZFBhdGgocGF0aCk7CisgICAgcGVyZm9ybShbY2FwdHVyZWRQYXRoXShGaWxl
U3RyZWFtJiBzdHJlYW0pIC0+IHN0ZDo6ZnVuY3Rpb248dm9pZChGaWxlU3RyZWFtQ2xpZW50Jik+
IHsKKyAgICAgICAgYm9vbCBzdWNjZXNzID0gc3RyZWFtLm9wZW5Gb3JXcml0ZShjYXB0dXJlZFBh
dGguc3RyaW5nKCkpOworICAgICAgICByZXR1cm4gW3N1Y2Nlc3NdKEZpbGVTdHJlYW1DbGllbnQm
IGNsaWVudCkgeworICAgICAgICAgICAgY2xpZW50LmRpZE9wZW4oc3VjY2Vzcyk7CisgICAgICAg
IH07CisgICAgfSk7CiB9CiAKIHZvaWQgQXN5bmNGaWxlU3RyZWFtOjpjbG9zZSgpCiB7Ci0gICAg
ZmlsZVRocmVhZCgpLT5wb3N0VGFzayh7dGhpcywgW3RoaXNdIHsKLSAgICAgICAgbV9zdHJlYW0t
PmNsb3NlKCk7Ci0gICAgfSB9KTsKKyAgICBhdXRvJiBpbnRlcm5hbHMgPSAqbV9pbnRlcm5hbHM7
CisgICAgY2FsbE9uRmlsZVRocmVhZChbJmludGVybmFsc10geworICAgICAgICBpbnRlcm5hbHMu
c3RyZWFtLmNsb3NlKCk7CisgICAgfSk7CiB9CiAKIHZvaWQgQXN5bmNGaWxlU3RyZWFtOjpyZWFk
KGNoYXIqIGJ1ZmZlciwgaW50IGxlbmd0aCkKIHsKLSAgICBmaWxlVGhyZWFkKCktPnBvc3RUYXNr
KHsgdGhpcywgW3RoaXMsIGJ1ZmZlciwgbGVuZ3RoXSB7Ci0gICAgICAgIGludCBieXRlc1JlYWQg
PSBtX3N0cmVhbS0+cmVhZChidWZmZXIsIGxlbmd0aCk7Ci0gICAgICAgIGNhbGxPbk1haW5UaHJl
YWQoW3RoaXMsIGJ5dGVzUmVhZF0gewotICAgICAgICAgICAgaWYgKGNsaWVudCgpKQotICAgICAg
ICAgICAgICAgIGNsaWVudCgpLT5kaWRSZWFkKGJ5dGVzUmVhZCk7Ci0gICAgICAgIH0pOwotICAg
IH0gfSk7CisgICAgcGVyZm9ybShbYnVmZmVyLCBsZW5ndGhdKEZpbGVTdHJlYW0mIHN0cmVhbSkg
LT4gc3RkOjpmdW5jdGlvbjx2b2lkKEZpbGVTdHJlYW1DbGllbnQmKT4geworICAgICAgICBpbnQg
Ynl0ZXNSZWFkID0gc3RyZWFtLnJlYWQoYnVmZmVyLCBsZW5ndGgpOworICAgICAgICByZXR1cm4g
W2J5dGVzUmVhZF0oRmlsZVN0cmVhbUNsaWVudCYgY2xpZW50KSB7CisgICAgICAgICAgICBjbGll
bnQuZGlkUmVhZChieXRlc1JlYWQpOworICAgICAgICB9OworICAgIH0pOwogfQogCiB2b2lkIEFz
eW5jRmlsZVN0cmVhbTo6d3JpdGUoY29uc3QgVVJMJiBibG9iVVJMLCBsb25nIGxvbmcgcG9zaXRp
b24sIGludCBsZW5ndGgpCiB7Ci0gICAgVVJMIGJsb2JVUkxDb3B5ID0gYmxvYlVSTC5jb3B5KCk7
Ci0gICAgZmlsZVRocmVhZCgpLT5wb3N0VGFzayh7IHRoaXMsIFt0aGlzLCBibG9iVVJMQ29weSwg
cG9zaXRpb24sIGxlbmd0aF0gewotICAgICAgICBpbnQgYnl0ZXNXcml0dGVuID0gbV9zdHJlYW0t
PndyaXRlKGJsb2JVUkxDb3B5LCBwb3NpdGlvbiwgbGVuZ3RoKTsKLSAgICAgICAgY2FsbE9uTWFp
blRocmVhZChbdGhpcywgYnl0ZXNXcml0dGVuXSB7Ci0gICAgICAgICAgICBpZiAoY2xpZW50KCkp
Ci0gICAgICAgICAgICAgICAgY2xpZW50KCktPmRpZFdyaXRlKGJ5dGVzV3JpdHRlbik7Ci0gICAg
ICAgIH0pOwotICAgIH0gfSk7CisgICAgLy8gRklYTUU6IFdvdWxkIGJlIG1vcmUgZWxlZ2FudCB0
byBoYXZlIGEgVVJMQ2FwdHVyZSBmb3IgY2FzZXMgbGlrZSB0aGlzIHRvIGF2b2lkIHJlLXBhcnNp
bmcgdGhlIFVSTC4KKyAgICBTdHJpbmdDYXB0dXJlIGNhcHR1cmVkVVJMKGJsb2JVUkwuc3RyaW5n
KCkpOworICAgIHBlcmZvcm0oW2NhcHR1cmVkVVJMLCBwb3NpdGlvbiwgbGVuZ3RoXShGaWxlU3Ry
ZWFtJiBzdHJlYW0pIC0+IHN0ZDo6ZnVuY3Rpb248dm9pZChGaWxlU3RyZWFtQ2xpZW50Jik+IHsK
KyAgICAgICAgaW50IGJ5dGVzV3JpdHRlbiA9IHN0cmVhbS53cml0ZShVUkwoUGFyc2VkVVJMU3Ry
aW5nLCBjYXB0dXJlZFVSTC5zdHJpbmcoKSksIHBvc2l0aW9uLCBsZW5ndGgpOworICAgICAgICBy
ZXR1cm4gW2J5dGVzV3JpdHRlbl0oRmlsZVN0cmVhbUNsaWVudCYgY2xpZW50KSB7CisgICAgICAg
ICAgICBjbGllbnQuZGlkV3JpdGUoYnl0ZXNXcml0dGVuKTsKKyAgICAgICAgfTsKKyAgICB9KTsK
IH0KIAogdm9pZCBBc3luY0ZpbGVTdHJlYW06OnRydW5jYXRlKGxvbmcgbG9uZyBwb3NpdGlvbikK
IHsKLSAgICBmaWxlVGhyZWFkKCktPnBvc3RUYXNrKHsgdGhpcywgW3RoaXMsIHBvc2l0aW9uXSB7
Ci0gICAgICAgIGJvb2wgc3VjY2VzcyA9IG1fc3RyZWFtLT50cnVuY2F0ZShwb3NpdGlvbik7Ci0g
ICAgICAgIGNhbGxPbk1haW5UaHJlYWQoW3RoaXMsIHN1Y2Nlc3NdIHsKLSAgICAgICAgICAgIGlm
IChjbGllbnQoKSkKLSAgICAgICAgICAgICAgICBjbGllbnQoKS0+ZGlkVHJ1bmNhdGUoc3VjY2Vz
cyk7Ci0gICAgICAgIH0pOwotICAgIH0gfSk7CisgICAgcGVyZm9ybShbcG9zaXRpb25dKEZpbGVT
dHJlYW0mIHN0cmVhbSkgLT4gc3RkOjpmdW5jdGlvbjx2b2lkKEZpbGVTdHJlYW1DbGllbnQmKT4g
eworICAgICAgICBib29sIHN1Y2Nlc3MgPSBzdHJlYW0udHJ1bmNhdGUocG9zaXRpb24pOworICAg
ICAgICByZXR1cm4gW3N1Y2Nlc3NdKEZpbGVTdHJlYW1DbGllbnQmIGNsaWVudCkgeworICAgICAg
ICAgICAgY2xpZW50LmRpZFRydW5jYXRlKHN1Y2Nlc3MpOworICAgICAgICB9OworICAgIH0pOwog
fQogCiB9IC8vIG5hbWVzcGFjZSBXZWJDb3JlCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9m
aWxlYXBpL0FzeW5jRmlsZVN0cmVhbS5oIGIvU291cmNlL1dlYkNvcmUvZmlsZWFwaS9Bc3luY0Zp
bGVTdHJlYW0uaAppbmRleCBiNjBiYzYwNzE1NTUyNmY4MzZhODAyMDBhOThlMDA3MGNlY2NlZTIz
Li40MjhmNzMwZWU0NzZjZWJiYjQ3OTFkYjdmOWU1OTVlZTI5NzBiZWM3IDEwMDY0NAotLS0gYS9T
b3VyY2UvV2ViQ29yZS9maWxlYXBpL0FzeW5jRmlsZVN0cmVhbS5oCisrKyBiL1NvdXJjZS9XZWJD
b3JlL2ZpbGVhcGkvQXN5bmNGaWxlU3RyZWFtLmgKQEAgLTEsNiArMSw2IEBACiAvKgotICogQ29w
eXJpZ2h0IChDKSAyMDEwIEdvb2dsZSBJbmMuICBBbGwgcmlnaHRzIHJlc2VydmVkLgotICogQ29w
eXJpZ2h0IChDKSAyMDEwLCAyMDEyIEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAq
IENvcHlyaWdodCAoQykgMjAxMCBHb29nbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICog
Q29weXJpZ2h0IChDKSAyMDEwLCAyMDEyLCAyMDE0IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNl
cnZlZC4KICAqCiAgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5
IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKICAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBw
cm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucyBhcmUKQEAgLTMyLDkgKzMyLDgg
QEAKICNpZm5kZWYgQXN5bmNGaWxlU3RyZWFtX2gKICNkZWZpbmUgQXN5bmNGaWxlU3RyZWFtX2gK
IAorI2luY2x1ZGUgPGZ1bmN0aW9uYWw+CiAjaW5jbHVkZSA8d3RmL0ZvcndhcmQuaD4KLSNpbmNs
dWRlIDx3dGYvUmVmQ291bnRlZC5oPgotI2luY2x1ZGUgPHd0Zi9SZWZQdHIuaD4KIAogbmFtZXNw
YWNlIFdlYkNvcmUgewogCkBAIC00Miw5ICs0MSw5IEBAIGNsYXNzIEZpbGVTdHJlYW1DbGllbnQ7
CiBjbGFzcyBGaWxlU3RyZWFtOwogY2xhc3MgVVJMOwogCi1jbGFzcyBBc3luY0ZpbGVTdHJlYW0g
OiBwdWJsaWMgUmVmQ291bnRlZDxBc3luY0ZpbGVTdHJlYW0+IHsKK2NsYXNzIEFzeW5jRmlsZVN0
cmVhbSB7CiBwdWJsaWM6Ci0gICAgc3RhdGljIFBhc3NSZWZQdHI8QXN5bmNGaWxlU3RyZWFtPiBj
cmVhdGUoRmlsZVN0cmVhbUNsaWVudCopOworICAgIGV4cGxpY2l0IEFzeW5jRmlsZVN0cmVhbShG
aWxlU3RyZWFtQ2xpZW50Jik7CiAgICAgfkFzeW5jRmlsZVN0cmVhbSgpOwogCiAgICAgdm9pZCBn
ZXRTaXplKGNvbnN0IFN0cmluZyYgcGF0aCwgZG91YmxlIGV4cGVjdGVkTW9kaWZpY2F0aW9uVGlt
ZSk7CkBAIC01NSwxOCArNTQsMTIgQEAgcHVibGljOgogICAgIHZvaWQgd3JpdGUoY29uc3QgVVJM
JiBibG9iVVJMLCBsb25nIGxvbmcgcG9zaXRpb24sIGludCBsZW5ndGgpOwogICAgIHZvaWQgdHJ1
bmNhdGUobG9uZyBsb25nIHBvc2l0aW9uKTsKIAotICAgIC8vIFN0b3BzIHRoZSBwcm94eSBhbmQg
c2NoZWR1bGVzIGl0IHRvIGJlIGRlc3RydWN0ZWQuIEFsbCB0aGUgcGVuZGluZyB0YXNrcyB3aWxs
IGJlIGFib3J0ZWQgYW5kIHRoZSBmaWxlIHN0cmVhbSB3aWxsIGJlIGNsb3NlZC4KLSAgICAvLyBO
b3RlOiB0aGUgY2FsbGVyIHNob3VsZCBkZXJlZiB0aGUgaW5zdGFuY2UgaW1tZWRpYXRlbHkgYWZ0
ZXIgY2FsbGluZyBzdG9wKCkuCi0gICAgdm9pZCBzdG9wKCk7Ci0KLSAgICBGaWxlU3RyZWFtQ2xp
ZW50KiBjbGllbnQoKSBjb25zdCB7IHJldHVybiBtX2NsaWVudDsgfQotICAgIHZvaWQgc2V0Q2xp
ZW50KEZpbGVTdHJlYW1DbGllbnQqIGNsaWVudCkgeyBtX2NsaWVudCA9IGNsaWVudDsgfQotCiBw
cml2YXRlOgotICAgIEFzeW5jRmlsZVN0cmVhbShGaWxlU3RyZWFtQ2xpZW50Kik7CisgICAgdm9p
ZCBzdGFydCgpOworICAgIHZvaWQgcGVyZm9ybShzdGQ6OmZ1bmN0aW9uPHN0ZDo6ZnVuY3Rpb248
dm9pZChGaWxlU3RyZWFtQ2xpZW50Jik+KEZpbGVTdHJlYW0mKT4pOwogCi0gICAgUmVmUHRyPEZp
bGVTdHJlYW0+IG1fc3RyZWFtOwotICAgIEZpbGVTdHJlYW1DbGllbnQqIG1fY2xpZW50OworICAg
IHN0cnVjdCBJbnRlcm5hbHM7CisgICAgc3RkOjp1bmlxdWVfcHRyPEludGVybmFscz4gbV9pbnRl
cm5hbHM7CiB9OwogCiB9IC8vIG5hbWVzcGFjZSBXZWJDb3JlCmRpZmYgLS1naXQgYS9Tb3VyY2Uv
V2ViQ29yZS9maWxlYXBpL0ZpbGVUaHJlYWQuY3BwIGIvU291cmNlL1dlYkNvcmUvZmlsZWFwaS9G
aWxlVGhyZWFkLmNwcApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMzRlYTVkN2UxMTQw
ZmQ0ZTQ1Y2I3MDJlZmZmNDY2MzQ0OTg1OWI3YS4uMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9maWxlYXBpL0ZpbGVUaHJlYWQuY3Bw
CisrKyAvZGV2L251bGwKQEAgLTEsMTEzICswLDAgQEAKLS8qCi0gKiBDb3B5cmlnaHQgKEMpIDIw
MTAgR29vZ2xlIEluYy4gIEFsbCByaWdodHMgcmVzZXJ2ZWQuCi0gKgotICogUmVkaXN0cmlidXRp
b24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0Ci0g
KiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5n
IGNvbmRpdGlvbnMgYXJlCi0gKiBtZXQ6Ci0gKgotICogICAgICogUmVkaXN0cmlidXRpb25zIG9m
IHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKLSAqIG5vdGljZSwg
dGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KLSAq
ICAgICAqIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUg
YWJvdmUKLSAqIGNvcHlyaWdodCBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0
aGUgZm9sbG93aW5nIGRpc2NsYWltZXIKLSAqIGluIHRoZSBkb2N1bWVudGF0aW9uIGFuZC9vciBv
dGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUKLSAqIGRpc3RyaWJ1dGlvbi4KLSAqICAg
ICAqIE5laXRoZXIgdGhlIG5hbWUgb2YgR29vZ2xlIEluYy4gbm9yIHRoZSBuYW1lcyBvZiBpdHMK
LSAqIGNvbnRyaWJ1dG9ycyBtYXkgYmUgdXNlZCB0byBlbmRvcnNlIG9yIHByb21vdGUgcHJvZHVj
dHMgZGVyaXZlZCBmcm9tCi0gKiB0aGlzIHNvZnR3YXJlIHdpdGhvdXQgc3BlY2lmaWMgcHJpb3Ig
d3JpdHRlbiBwZXJtaXNzaW9uLgotICoKLSAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkg
VEhFIENPUFlSSUdIVCBIT0xERVJTIEFORCBDT05UUklCVVRPUlMKLSAqICJBUyBJUyIgQU5EIEFO
WSBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UCi0gKiBM
SU1JVEVEIFRPLCBUSEUgSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQg
RklUTkVTUyBGT1IKLSAqIEEgUEFSVElDVUxBUiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiBJTiBO
TyBFVkVOVCBTSEFMTCBUSEUgQ09QWVJJR0hUCi0gKiBPV05FUiBPUiBDT05UUklCVVRPUlMgQkUg
TElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwKLSAqIFNQRUNJQUws
IEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QK
LSAqIExJTUlURUQgVE8sIFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklD
RVM7IExPU1MgT0YgVVNFLAotICogREFUQSwgT1IgUFJPRklUUzsgT1IgQlVTSU5FU1MgSU5URVJS
VVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZCi0gKiBUSEVPUlkgT0YgTElBQklMSVRZ
LCBXSEVUSEVSIElOIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUCi0gKiAoSU5D
TFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9G
IFRIRSBVU0UKLSAqIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUgUE9T
U0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCi0gKi8KLQotI2luY2x1ZGUgImNvbmZpZy5oIgotCi0j
aW5jbHVkZSAiRmlsZVRocmVhZC5oIgotCi0jaW5jbHVkZSAiTG9nZ2luZy5oIgotI2luY2x1ZGUg
PHd0Zi9BdXRvZHJhaW5lZFBvb2wuaD4KLQotbmFtZXNwYWNlIFdlYkNvcmUgewotCi1GaWxlVGhy
ZWFkOjpGaWxlVGhyZWFkKCkKLSAgICA6IG1fdGhyZWFkSUQoMCkKLXsKLSAgICBtX3NlbGZSZWYg
PSB0aGlzOwotfQotCi1GaWxlVGhyZWFkOjp+RmlsZVRocmVhZCgpCi17Ci0gICAgQVNTRVJUKG1f
cXVldWUua2lsbGVkKCkpOwotfQotCi1ib29sIEZpbGVUaHJlYWQ6OnN0YXJ0KCkKLXsKLSAgICBN
dXRleExvY2tlciBsb2NrKG1fdGhyZWFkQ3JlYXRpb25NdXRleCk7Ci0gICAgaWYgKG1fdGhyZWFk
SUQpCi0gICAgICAgIHJldHVybiB0cnVlOwotICAgIG1fdGhyZWFkSUQgPSBjcmVhdGVUaHJlYWQo
RmlsZVRocmVhZDo6ZmlsZVRocmVhZFN0YXJ0LCB0aGlzLCAiV2ViQ29yZTogRmlsZSIpOwotICAg
IHJldHVybiBtX3RocmVhZElEOwotfQotCi12b2lkIEZpbGVUaHJlYWQ6OnN0b3AoKQotewotICAg
IG1fcXVldWUua2lsbCgpOwotfQotCi12b2lkIEZpbGVUaHJlYWQ6OnBvc3RUYXNrKFRhc2sgdGFz
aykKLXsKLSAgICBtX3F1ZXVlLmFwcGVuZChzdGQ6Om1ha2VfdW5pcXVlPEZpbGVUaHJlYWQ6OlRh
c2s+KFdURjo6bW92ZSh0YXNrKSkpOwotfQotCi1jbGFzcyBTYW1lSW5zdGFuY2VQcmVkaWNhdGUg
ewotcHVibGljOgotICAgIFNhbWVJbnN0YW5jZVByZWRpY2F0ZShjb25zdCB2b2lkKiBpbnN0YW5j
ZSkgOiBtX2luc3RhbmNlKGluc3RhbmNlKSB7IH0KLSAgICBib29sIG9wZXJhdG9yKCkoRmlsZVRo
cmVhZDo6VGFzayYgdGFzaykgY29uc3QgeyByZXR1cm4gdGFzay5pbnN0YW5jZSgpID09IG1faW5z
dGFuY2U7IH0KLXByaXZhdGU6Ci0gICAgY29uc3Qgdm9pZCogbV9pbnN0YW5jZTsKLX07Ci0KLXZv
aWQgRmlsZVRocmVhZDo6dW5zY2hlZHVsZVRhc2tzKGNvbnN0IHZvaWQqIGluc3RhbmNlKQotewot
ICAgIFNhbWVJbnN0YW5jZVByZWRpY2F0ZSBwcmVkaWNhdGUoaW5zdGFuY2UpOwotICAgIG1fcXVl
dWUucmVtb3ZlSWYocHJlZGljYXRlKTsKLX0KLQotdm9pZCBGaWxlVGhyZWFkOjpmaWxlVGhyZWFk
U3RhcnQodm9pZCogYXJnKQotewotICAgIEZpbGVUaHJlYWQqIGZpbGVUaHJlYWQgPSBzdGF0aWNf
Y2FzdDxGaWxlVGhyZWFkKj4oYXJnKTsKLSAgICBmaWxlVGhyZWFkLT5ydW5Mb29wKCk7Ci19Ci0K
LXZvaWQgRmlsZVRocmVhZDo6cnVuTG9vcCgpCi17Ci0gICAgewotICAgICAgICAvLyBXYWl0IGZv
ciBGaWxlVGhyZWFkOjpzdGFydCgpIHRvIGNvbXBsZXRlIHRvIGhhdmUgbV90aHJlYWRJRAotICAg
ICAgICAvLyBlc3RhYmxpc2hlZCBiZWZvcmUgc3RhcnRpbmcgdGhlIG1haW4gbG9vcC4KLSAgICAg
ICAgTXV0ZXhMb2NrZXIgbG9jayhtX3RocmVhZENyZWF0aW9uTXV0ZXgpOwotICAgICAgICBMT0co
RmlsZUFQSSwgIlN0YXJ0ZWQgRmlsZVRocmVhZCAlcCIsIHRoaXMpOwotICAgIH0KLQotICAgIHdo
aWxlIChhdXRvIHRhc2sgPSBtX3F1ZXVlLndhaXRGb3JNZXNzYWdlKCkpIHsKLSAgICAgICAgQXV0
b2RyYWluZWRQb29sIHBvb2w7Ci0KLSAgICAgICAgdGFzay0+cGVyZm9ybVRhc2soKTsKLSAgICB9
Ci0KLSAgICBMT0coRmlsZUFQSSwgIkFib3V0IHRvIGRldGFjaCB0aHJlYWQgJWkgYW5kIGNsZWFy
IHRoZSByZWYgdG8gRmlsZVRocmVhZCAlcCwgd2hpY2ggY3VycmVudGx5IGhhcyAlaSByZWYocyki
LCBtX3RocmVhZElELCB0aGlzLCByZWZDb3VudCgpKTsKLQotICAgIGRldGFjaFRocmVhZChtX3Ro
cmVhZElEKTsKLQotICAgIC8vIENsZWFyIHRoZSBzZWxmIHJlZnB0ciwgcG9zc2libHkgcmVzdWx0
aW5nIGluIGRlbGV0aW9uCi0gICAgbV9zZWxmUmVmID0gMDsKLX0KLQotfSAvLyBuYW1lc3BhY2Ug
V2ViQ29yZQpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvZmlsZWFwaS9GaWxlVGhyZWFkLmgg
Yi9Tb3VyY2UvV2ViQ29yZS9maWxlYXBpL0ZpbGVUaHJlYWQuaApkZWxldGVkIGZpbGUgbW9kZSAx
MDA2NDQKaW5kZXggOWRlMmZlZGJmMTgzODIxMjM0N2RmYWE5MjBkNWExZTc1YWJlNzU4NC4uMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMAotLS0gYS9Tb3VyY2UvV2ViQ29y
ZS9maWxlYXBpL0ZpbGVUaHJlYWQuaAorKysgL2Rldi9udWxsCkBAIC0xLDEwMSArMCwwIEBACi0v
KgotICogQ29weXJpZ2h0IChDKSAyMDEwIEdvb2dsZSBJbmMuICBBbGwgcmlnaHRzIHJlc2VydmVk
LgotICoKLSAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9y
bXMsIHdpdGggb3Igd2l0aG91dAotICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3Zp
ZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zIGFyZQotICogbWV0OgotICoKLSAqICAg
ICAqIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUg
Y29weXJpZ2h0Ci0gKiBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9s
bG93aW5nIGRpc2NsYWltZXIuCi0gKiAgICAgKiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZv
cm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlCi0gKiBjb3B5cmlnaHQgbm90aWNlLCB0aGlzIGxp
c3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyCi0gKiBpbiB0aGUg
ZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlCi0g
KiBkaXN0cmlidXRpb24uCi0gKiAgICAgKiBOZWl0aGVyIHRoZSBuYW1lIG9mIEdvb2dsZSBJbmMu
IG5vciB0aGUgbmFtZXMgb2YgaXRzCi0gKiBjb250cmlidXRvcnMgbWF5IGJlIHVzZWQgdG8gZW5k
b3JzZSBvciBwcm9tb3RlIHByb2R1Y3RzIGRlcml2ZWQgZnJvbQotICogdGhpcyBzb2Z0d2FyZSB3
aXRob3V0IHNwZWNpZmljIHByaW9yIHdyaXR0ZW4gcGVybWlzc2lvbi4KLSAqCi0gKiBUSElTIFNP
RlRXQVJFIElTIFBST1ZJREVEIEJZIFRIRSBDT1BZUklHSFQgSE9MREVSUyBBTkQgQ09OVFJJQlVU
T1JTCi0gKiAiQVMgSVMiIEFORCBBTlkgRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElO
Q0xVRElORywgQlVUIE5PVAotICogTElNSVRFRCBUTywgVEhFIElNUExJRUQgV0FSUkFOVElFUyBP
RiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SCi0gKiBBIFBBUlRJQ1VMQVIgUFVSUE9T
RSBBUkUgRElTQ0xBSU1FRC4gSU4gTk8gRVZFTlQgU0hBTEwgVEhFIENPUFlSSUdIVAotICogT1dO
RVIgT1IgQ09OVFJJQlVUT1JTIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElO
Q0lERU5UQUwsCi0gKiBTUEVDSUFMLCBFWEVNUExBUlksIE9SIENPTlNFUVVFTlRJQUwgREFNQUdF
UyAoSU5DTFVESU5HLCBCVVQgTk9UCi0gKiBMSU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBPRiBTVUJT
VElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwKLSAqIERBVEEsIE9SIFBST0ZJ
VFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWQot
ICogVEhFT1JZIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTiBDT05UUkFDVCwgU1RSSUNUIExJQUJJ
TElUWSwgT1IgVE9SVAotICogKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJ
U0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFCi0gKiBPRiBUSElTIFNPRlRXQVJFLCBFVkVO
IElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgotICovCi0KLSNp
Zm5kZWYgRmlsZVRocmVhZF9oCi0jZGVmaW5lIEZpbGVUaHJlYWRfaAotCi0jaW5jbHVkZSA8ZnVu
Y3Rpb25hbD4KLSNpbmNsdWRlIDx3dGYvTWVzc2FnZVF1ZXVlLmg+Ci0jaW5jbHVkZSA8d3RmL1Bh
c3NSZWZQdHIuaD4KLSNpbmNsdWRlIDx3dGYvVGhyZWFkaW5nLmg+Ci0KLW5hbWVzcGFjZSBXZWJD
b3JlIHsKLQotY2xhc3MgRmlsZVN0cmVhbTsKLQotY2xhc3MgRmlsZVRocmVhZCA6IHB1YmxpYyBU
aHJlYWRTYWZlUmVmQ291bnRlZDxGaWxlVGhyZWFkPiB7Ci1wdWJsaWM6Ci0gICAgc3RhdGljIFBh
c3NSZWZQdHI8RmlsZVRocmVhZD4gY3JlYXRlKCkKLSAgICB7Ci0gICAgICAgIHJldHVybiBhZG9w
dFJlZihuZXcgRmlsZVRocmVhZCgpKTsKLSAgICB9Ci0KLSAgICB+RmlsZVRocmVhZCgpOwotCi0g
ICAgYm9vbCBzdGFydCgpOwotICAgIHZvaWQgc3RvcCgpOwotCi0gICAgY2xhc3MgVGFzayB7Ci0g
ICAgICAgIFdURl9NQUtFX05PTkNPUFlBQkxFKFRhc2spOwotICAgIHB1YmxpYzoKLSAgICAgICAg
dGVtcGxhdGU8dHlwZW5hbWUgVCwgdHlwZW5hbWUgVSwgdHlwZW5hbWUgPSB0eXBlbmFtZSBzdGQ6
OmVuYWJsZV9pZjwhc3RkOjppc19iYXNlX29mPFRhc2ssIFU+Ojp2YWx1ZSAmJiBzdGQ6OmlzX2Nv
bnZlcnRpYmxlPFUsIHN0ZDo6ZnVuY3Rpb248dm9pZCAoKT4+Ojp2YWx1ZT46OnR5cGU+Ci0gICAg
ICAgIFRhc2soVCogaW5zdGFuY2UsIFUgbWV0aG9kKQotICAgICAgICAgICAgOiBtX3Rhc2soV1RG
Ojptb3ZlKG1ldGhvZCkpCi0gICAgICAgICAgICAsIG1faW5zdGFuY2UoaW5zdGFuY2UpCi0gICAg
ICAgIHsKLSAgICAgICAgfQotCi0gICAgICAgIFRhc2soVGFzayYmIG90aGVyKQotICAgICAgICAg
ICAgOiBtX3Rhc2soV1RGOjptb3ZlKG90aGVyLm1fdGFzaykpCi0gICAgICAgICAgICAsIG1faW5z
dGFuY2Uob3RoZXIubV9pbnN0YW5jZSkKLSAgICAgICAgewotICAgICAgICB9Ci0KLSAgICAgICAg
dm9pZCBwZXJmb3JtVGFzaygpCi0gICAgICAgIHsKLSAgICAgICAgICAgIG1fdGFzaygpOwotICAg
ICAgICB9Ci0gICAgICAgIHZvaWQqIGluc3RhbmNlKCkgY29uc3QgeyByZXR1cm4gbV9pbnN0YW5j
ZTsgfQotCi0gICAgcHJpdmF0ZToKLSAgICAgICAgc3RkOjpmdW5jdGlvbjx2b2lkICgpPiBtX3Rh
c2s7Ci0gICAgICAgIHZvaWQqIG1faW5zdGFuY2U7Ci0gICAgfTsKLQotICAgIHZvaWQgcG9zdFRh
c2soVGFzayk7Ci0KLSAgICB2b2lkIHVuc2NoZWR1bGVUYXNrcyhjb25zdCB2b2lkKiBpbnN0YW5j
ZSk7Ci0KLXByaXZhdGU6Ci0gICAgRmlsZVRocmVhZCgpOwotCi0gICAgc3RhdGljIHZvaWQgZmls
ZVRocmVhZFN0YXJ0KHZvaWQqKTsKLSAgICB2b2lkIHJ1bkxvb3AoKTsKLQotICAgIFRocmVhZElk
ZW50aWZpZXIgbV90aHJlYWRJRDsKLSAgICBSZWZQdHI8RmlsZVRocmVhZD4gbV9zZWxmUmVmOwot
ICAgIE1lc3NhZ2VRdWV1ZTxUYXNrPiBtX3F1ZXVlOwotCi0gICAgTXV0ZXggbV90aHJlYWRDcmVh
dGlvbk11dGV4OwotfTsKLQotfSAvLyBuYW1lc3BhY2UgV2ViQ29yZQotCi0jZW5kaWYgLy8gRmls
ZVRocmVhZF9oCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9sb2FkZXIvUmVzb3VyY2VMb2Fk
ZXIuY3BwIGIvU291cmNlL1dlYkNvcmUvbG9hZGVyL1Jlc291cmNlTG9hZGVyLmNwcAppbmRleCAy
NTc4ZTkyYzdiYzViMTY1ZTVlZTVmMjBjMzE5NDhjZmZkNDliYzg4Li5lNTIyZDNjYWZkODcwODVj
ZjlhNzdiNzMxMTZmNzIyOGU2YzlkNmU3IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9sb2Fk
ZXIvUmVzb3VyY2VMb2FkZXIuY3BwCisrKyBiL1NvdXJjZS9XZWJDb3JlL2xvYWRlci9SZXNvdXJj
ZUxvYWRlci5jcHAKQEAgLTMxLDcgKzMxLDYgQEAKICNpbmNsdWRlICJSZXNvdXJjZUxvYWRlci5o
IgogCiAjaW5jbHVkZSAiQXBwbGljYXRpb25DYWNoZUhvc3QuaCIKLSNpbmNsdWRlICJBc3luY0Zp
bGVTdHJlYW0uaCIKICNpbmNsdWRlICJBdXRoZW50aWNhdGlvbkNoYWxsZW5nZS5oIgogI2luY2x1
ZGUgIkRvY3VtZW50TG9hZGVyLmgiCiAjaW5jbHVkZSAiRnJhbWUuaCIKZGlmZiAtLWdpdCBhL1Nv
dXJjZS9XZWJDb3JlL3BsYXRmb3JtL0ZpbGVTdHJlYW0uY3BwIGIvU291cmNlL1dlYkNvcmUvcGxh
dGZvcm0vRmlsZVN0cmVhbS5jcHAKaW5kZXggZmY1YWVlMWFmZjU2OTRhNmI4YWVjNTBjNjJmMWUz
Y2MwYTY1MmQ3OS4uM2FlNDU5OGRmYWJkZGY0MTViYzA3YjY5NmRhOGM3YzBkNGVmOTgxOSAxMDA2
NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vRmlsZVN0cmVhbS5jcHAKKysrIGIvU291
cmNlL1dlYkNvcmUvcGxhdGZvcm0vRmlsZVN0cmVhbS5jcHAKQEAgLTQ2LDE2ICs0Niw2IEBAIEZp
bGVTdHJlYW06OkZpbGVTdHJlYW0oKQogCiBGaWxlU3RyZWFtOjp+RmlsZVN0cmVhbSgpCiB7Ci0g
ICAgQVNTRVJUKCFpc0hhbmRsZVZhbGlkKG1faGFuZGxlKSk7Ci19Ci0KLS8vIEZJWE1FOiBUbyBi
ZSByZW1vdmVkIHdoZW4gd2Ugc3dpdGNoIHRvIHVzaW5nIEJsb2JEYXRhLgotdm9pZCBGaWxlU3Ry
ZWFtOjpzdGFydCgpCi17Ci19Ci0KLXZvaWQgRmlsZVN0cmVhbTo6c3RvcCgpCi17CiAgICAgY2xv
c2UoKTsKIH0KIApkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vRmlsZVN0cmVh
bS5oIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vRmlsZVN0cmVhbS5oCmluZGV4IGFlOGE4NGU0
MTY0YWM0NDZiODk4NTdlYTUzZThmOGM2ODUwNWIwNjYuLjNjZTllNTc2NTk4YjNhZTU3MGZlMDhj
MzhkMDQ4ODcwNWQ1ODFhODAgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL0Zp
bGVTdHJlYW0uaAorKysgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9GaWxlU3RyZWFtLmgKQEAg
LTMyLDI5ICszMiwxNyBAQAogI2RlZmluZSBGaWxlU3RyZWFtX2gKIAogI2luY2x1ZGUgIkZpbGVT
eXN0ZW0uaCIKLSNpbmNsdWRlIDx3dGYvRm9yd2FyZC5oPgotI2luY2x1ZGUgPHd0Zi9QYXNzUmVm
UHRyLmg+Ci0jaW5jbHVkZSA8d3RmL1JlZkNvdW50ZWQuaD4KIAogbmFtZXNwYWNlIFdlYkNvcmUg
ewogCiBjbGFzcyBVUkw7CiAKIC8vIEFsbCBtZXRob2RzIGFyZSBzeW5jaHJvbm91cy4KLWNsYXNz
IEZpbGVTdHJlYW0gOiBwdWJsaWMgUmVmQ291bnRlZDxGaWxlU3RyZWFtPiB7CitjbGFzcyBGaWxl
U3RyZWFtIHsKIHB1YmxpYzoKLSAgICBzdGF0aWMgUGFzc1JlZlB0cjxGaWxlU3RyZWFtPiBjcmVh
dGUoKQotICAgIHsKLSAgICAgICAgcmV0dXJuIGFkb3B0UmVmKG5ldyBGaWxlU3RyZWFtKCkpOwot
ICAgIH0KKyAgICBGaWxlU3RyZWFtKCk7CiAgICAgfkZpbGVTdHJlYW0oKTsKIAotICAgIC8vIEZJ
WE1FOiBUbyBiZSByZW1vdmVkIHdoZW4gd2Ugc3dpdGNoIHRvIHVzaW5nIEJsb2JEYXRhLgotICAg
IHZvaWQgc3RhcnQoKTsKLQotICAgIC8vIEFib3J0cyB0aGUgb3BlcmF0aW9uLgotICAgIHZvaWQg
c3RvcCgpOwotCiAgICAgLy8gR2V0cyB0aGUgc2l6ZSBvZiBhIGZpbGUuIEFsc28gdmFsaWRhdGVz
IGlmIHRoZSBmaWxlIGhhcyBiZWVuIGNoYW5nZWQgb3Igbm90IGlmIHRoZSBleHBlY3RlZCBtb2Rp
ZmljYXRpb24gdGltZSBpcyBwcm92aWRlZCwgaS5lLiBub24temVyby4KICAgICAvLyBSZXR1cm5z
IHRvdGFsIG51bWJlciBvZiBieXRlcyBpZiBzdWNjZXNzZnVsLiAtMSBvdGhlcndpc2UuCiAgICAg
bG9uZyBsb25nIGdldFNpemUoY29uc3QgU3RyaW5nJiBwYXRoLCBkb3VibGUgZXhwZWN0ZWRNb2Rp
ZmljYXRpb25UaW1lKTsKQEAgLTg0LDggKzcyLDYgQEAgcHVibGljOgogICAgIGJvb2wgdHJ1bmNh
dGUobG9uZyBsb25nIHBvc2l0aW9uKTsKIAogcHJpdmF0ZToKLSAgICBGaWxlU3RyZWFtKCk7Ci0K
ICAgICBQbGF0Zm9ybUZpbGVIYW5kbGUgbV9oYW5kbGU7CiAgICAgbG9uZyBsb25nIG1fYnl0ZXNQ
cm9jZXNzZWQ7CiAgICAgbG9uZyBsb25nIG1fdG90YWxCeXRlc1RvUmVhZDsKZGlmZiAtLWdpdCBh
L1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL0ZpbGVTdHJlYW1DbGllbnQuaCBiL1NvdXJjZS9XZWJD
b3JlL3BsYXRmb3JtL0ZpbGVTdHJlYW1DbGllbnQuaAppbmRleCAxNGZhNTAxMzU3NTZiZWRjZGJl
ZDY5MjRmMTFjMmEzNDBjZDg5NWQxLi5jYjYzYTcyODJlNzQwMDlkYWNlMDdlZmIwZDg0NmI3YWQ1
YmNkYjQ4IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9GaWxlU3RyZWFtQ2xp
ZW50LmgKKysrIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vRmlsZVN0cmVhbUNsaWVudC5oCkBA
IC0xLDUgKzEsNSBAQAogLyoKLSAqIENvcHlyaWdodCAoQykgMjAxMCBHb29nbGUgSW5jLiAgQWxs
IHJpZ2h0cyByZXNlcnZlZC4KKyAqIENvcHlyaWdodCAoQykgMjAxMCBHb29nbGUgSW5jLiBBbGwg
cmlnaHRzIHJlc2VydmVkLgogICoKICAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNl
IGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAogICogbW9kaWZpY2F0aW9uLCBhcmUg
cGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zIGFyZQpAQCAt
MzYsMTUgKzM2LDExIEBAIG5hbWVzcGFjZSBXZWJDb3JlIHsKIGNsYXNzIEZpbGVTdHJlYW1DbGll
bnQgewogcHVibGljOgogICAgIHZpcnR1YWwgdm9pZCBkaWRPcGVuKGJvb2wpIHsgfSAvLyBmYWxz
ZSBzaWduYWxzIGZhaWx1cmUuCi0gICAgdmlydHVhbCB2b2lkIGRpZFN0b3AoKSB7IH0KICAgICB2
aXJ0dWFsIHZvaWQgZGlkR2V0U2l6ZShsb25nIGxvbmcpIHsgfSAvLyAtMSBzaWduYWxzIGZhaWx1
cmUuCiAgICAgdmlydHVhbCB2b2lkIGRpZFJlYWQoaW50KSB7IH0gLy8gLTEgc2lnbmFscyBmYWls
dXJlLgogICAgIHZpcnR1YWwgdm9pZCBkaWRXcml0ZShpbnQpIHsgfSAvLyAtMSBzaWduYWxzIGZh
aWx1cmUuCiAgICAgdmlydHVhbCB2b2lkIGRpZFRydW5jYXRlKGJvb2wpIHsgfSAvLyBmYWxzZSBz
aWduYWxzIGZhaWx1cmUuCiAKLSAgICAvLyBGSVhNRTogVG8gYmUgcmVtb3ZlZCB3aGVuIHdlIHN3
aXRjaCB0byB1c2luZyBCbG9iRGF0YS4KLSAgICB2aXJ0dWFsIHZvaWQgZGlkU3RhcnQoKSB7IH0K
LQogcHJvdGVjdGVkOgogICAgIHZpcnR1YWwgfkZpbGVTdHJlYW1DbGllbnQoKSB7IH0KIH07CmRp
ZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9uZXR3b3JrL0Jsb2JSZXNvdXJjZUhh
bmRsZS5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9uZXR3b3JrL0Jsb2JSZXNvdXJjZUhh
bmRsZS5jcHAKaW5kZXggYzQ5NGU1MmNkYThiMjcwMDNkY2E1M2Y1NTU5MjlmYmM0YzJkZmZiOS4u
MDhkNWY1MWE4ODUyZTMxZjA3ZDFkYWFmODkyNzZiMDRmMGIwNzBkNSAxMDA2NDQKLS0tIGEvU291
cmNlL1dlYkNvcmUvcGxhdGZvcm0vbmV0d29yay9CbG9iUmVzb3VyY2VIYW5kbGUuY3BwCisrKyBi
L1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL25ldHdvcmsvQmxvYlJlc291cmNlSGFuZGxlLmNwcApA
QCAtMTcxLDMwICsxNzEsMTggQEAgQmxvYlJlc291cmNlSGFuZGxlOjpCbG9iUmVzb3VyY2VIYW5k
bGUoQmxvYkRhdGEqIGJsb2JEYXRhLCBjb25zdCBSZXNvdXJjZVJlcXVlc3QKICAgICAsIG1fZmls
ZU9wZW5lZChmYWxzZSkKIHsKICAgICBpZiAobV9hc3luYykKLSAgICAgICAgbV9hc3luY1N0cmVh
bSA9IEFzeW5jRmlsZVN0cmVhbTo6Y3JlYXRlKHRoaXMpOworICAgICAgICBtX2FzeW5jU3RyZWFt
ID0gc3RkOjptYWtlX3VuaXF1ZTxBc3luY0ZpbGVTdHJlYW0+KCp0aGlzKTsKICAgICBlbHNlCi0g
ICAgICAgIG1fc3RyZWFtID0gRmlsZVN0cmVhbTo6Y3JlYXRlKCk7CisgICAgICAgIG1fc3RyZWFt
ID0gc3RkOjptYWtlX3VuaXF1ZTxGaWxlU3RyZWFtPigpOwogfQogCiBCbG9iUmVzb3VyY2VIYW5k
bGU6On5CbG9iUmVzb3VyY2VIYW5kbGUoKQogewotICAgIGlmIChtX2FzeW5jKSB7Ci0gICAgICAg
IGlmIChtX2FzeW5jU3RyZWFtKQotICAgICAgICAgICAgbV9hc3luY1N0cmVhbS0+c3RvcCgpOwot
ICAgIH0gZWxzZSB7Ci0gICAgICAgIGlmIChtX3N0cmVhbSkKLSAgICAgICAgICAgIG1fc3RyZWFt
LT5zdG9wKCk7Ci0gICAgfQogfQogCiB2b2lkIEJsb2JSZXNvdXJjZUhhbmRsZTo6Y2FuY2VsKCkK
IHsKLSAgICBpZiAobV9hc3luYykgewotICAgICAgICBpZiAobV9hc3luY1N0cmVhbSkgewotICAg
ICAgICAgICAgbV9hc3luY1N0cmVhbS0+c3RvcCgpOwotICAgICAgICAgICAgbV9hc3luY1N0cmVh
bSA9IDA7Ci0gICAgICAgIH0KLSAgICB9CisgICAgbV9hc3luY1N0cmVhbSA9IG51bGxwdHI7CiAK
ICAgICBtX2Fib3J0ZWQgPSB0cnVlOwogCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9wbGF0
Zm9ybS9uZXR3b3JrL0Jsb2JSZXNvdXJjZUhhbmRsZS5oIGIvU291cmNlL1dlYkNvcmUvcGxhdGZv
cm0vbmV0d29yay9CbG9iUmVzb3VyY2VIYW5kbGUuaAppbmRleCA3MzJmZjc5MDQ1MzlkNGQ4Zjgw
NGMyN2VhMDQ2NjgzNmYwYTQ5YjFkLi42NzZkYmZmOTg5NzZiYjA4N2Q1YmJjNWQwY2NhYjdmNDEz
YjQ0MWZkIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9uZXR3b3JrL0Jsb2JS
ZXNvdXJjZUhhbmRsZS5oCisrKyBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL25ldHdvcmsvQmxv
YlJlc291cmNlSGFuZGxlLmgKQEAgLTkyLDggKzkyLDggQEAgcHJpdmF0ZToKIAogICAgIFJlZlB0
cjxCbG9iRGF0YT4gbV9ibG9iRGF0YTsKICAgICBib29sIG1fYXN5bmM7Ci0gICAgUmVmUHRyPEFz
eW5jRmlsZVN0cmVhbT4gbV9hc3luY1N0cmVhbTsgLy8gRm9yIGFzeW5jaHJvbm91cyBsb2FkaW5n
LgotICAgIFJlZlB0cjxGaWxlU3RyZWFtPiBtX3N0cmVhbTsgLy8gRm9yIHN5bmNocm9ub3VzIGxv
YWRpbmcuCisgICAgc3RkOjp1bmlxdWVfcHRyPEFzeW5jRmlsZVN0cmVhbT4gbV9hc3luY1N0cmVh
bTsgLy8gRm9yIGFzeW5jaHJvbm91cyBsb2FkaW5nLgorICAgIHN0ZDo6dW5pcXVlX3B0cjxGaWxl
U3RyZWFtPiBtX3N0cmVhbTsgLy8gRm9yIHN5bmNocm9ub3VzIGxvYWRpbmcuCiAgICAgVmVjdG9y
PGNoYXI+IG1fYnVmZmVyOwogICAgIFZlY3Rvcjxsb25nIGxvbmc+IG1faXRlbUxlbmd0aExpc3Q7
CiAgICAgaW50IG1fZXJyb3JDb2RlOwpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvc3RvcmFn
ZS9TdG9yYWdlVGhyZWFkLmggYi9Tb3VyY2UvV2ViQ29yZS9zdG9yYWdlL1N0b3JhZ2VUaHJlYWQu
aAppbmRleCAyNjNjNzhlODI2MmU5Y2ZkODY1ZGRkNTkwMTk1NDkyZjVlNzg1MzlmLi5kZjUyYWM2
MTIxYzg0NjZkNDg2ZTRhNGRjOWVmM2E0ZTI4ODczZmU1IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2Vi
Q29yZS9zdG9yYWdlL1N0b3JhZ2VUaHJlYWQuaAorKysgYi9Tb3VyY2UvV2ViQ29yZS9zdG9yYWdl
L1N0b3JhZ2VUaHJlYWQuaApAQCAtNDYsNyArNDYsNyBAQCBwdWJsaWM6CiAgICAgYm9vbCBzdGFy
dCgpOwogICAgIHZvaWQgdGVybWluYXRlKCk7CiAKLSAgICB2b2lkIGRpc3BhdGNoKGNvbnN0IHN0
ZDo6ZnVuY3Rpb248dm9pZCAoKT4mKTsKKyAgICB2b2lkIGRpc3BhdGNoKGNvbnN0IHN0ZDo6ZnVu
Y3Rpb248dm9pZCgpPiYpOwogCiAgICAgc3RhdGljIHZvaWQgcmVsZWFzZUZhc3RNYWxsb2NGcmVl
TWVtb3J5SW5BbGxUaHJlYWRzKCk7CiAKQEAgLTU5LDcgKzU5LDcgQEAgcHJpdmF0ZToKICAgICB2
b2lkIHBlcmZvcm1UZXJtaW5hdGUoKTsKIAogICAgIFRocmVhZElkZW50aWZpZXIgbV90aHJlYWRJ
RDsKLSAgICBNZXNzYWdlUXVldWU8c3RkOjpmdW5jdGlvbjx2b2lkICgpPj4gbV9xdWV1ZTsKKyAg
ICBNZXNzYWdlUXVldWU8c3RkOjpmdW5jdGlvbjx2b2lkKCk+PiBtX3F1ZXVlOwogfTsKIAogfSAv
LyBuYW1lc3BhY2UgV2ViQ29yZQo=
</data>

          </attachment>
          <attachment
              isobsolete="0"
              ispatch="1"
              isprivate="0"
          >
            <attachid>241240</attachid>
            <date>2014-11-08 16:08:34 -0800</date>
            <delta_ts>2014-11-08 16:08:34 -0800</delta_ts>
            <desc>Patch</desc>
            <filename>bug-138282-20141108160834.patch</filename>
            <type>text/plain</type>
            <size>52835</size>
            <attacher name="Darin Adler">darin</attacher>
            
              <data encoding="base64">U3VidmVyc2lvbiBSZXZpc2lvbjogMTc1NzgxCmRpZmYgLS1naXQgYS9Tb3VyY2UvV1RGL0NoYW5n
ZUxvZyBiL1NvdXJjZS9XVEYvQ2hhbmdlTG9nCmluZGV4IDVlNDVkMzc5ZDgxOWExNjRhYTUyZGZj
MGJjZWQ1ZWYwYWI1MWZjOTcuLmM4ZGJkODU2OTc1YzI3ZTU4YzQ5YmVhNjdlN2RlZTdiYzY4ODBm
MGYgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XVEYvQ2hhbmdlTG9nCisrKyBiL1NvdXJjZS9XVEYvQ2hh
bmdlTG9nCkBAIC0xLDMgKzEsMjMgQEAKKzIwMTQtMTEtMDggIERhcmluIEFkbGVyICA8ZGFyaW5A
YXBwbGUuY29tPgorCisgICAgICAgIFJlcGxhY2UgRmlsZVRocmVhZCBjbGFzcyB3aXRoIGEgc2lu
Z2xlIGZ1bmN0aW9uCisgICAgICAgIGh0dHBzOi8vYnVncy53ZWJraXQub3JnL3Nob3dfYnVnLmNn
aT9pZD0xMzgyODIKKworICAgICAgICBSZXZpZXdlZCBieSBBbGV4ZXkgUHJvc2t1cnlha292Lgor
CisgICAgICAgICogd3RmL01lc3NhZ2VRdWV1ZS5oOiBNYWRlIHF1ZXVlIHdvcmsgb24gYW55IHR5
cGUgYW5kIG5vdCByZXF1aXJlIHdyYXBwaW5nCisgICAgICAgIGV2ZXJ5dGhpbmcgaW4gYSB1bmlx
dWVfcHRyLgorCisgICAgICAgICogd3RmL1RocmVhZGluZy5jcHA6CisgICAgICAgIChXVEY6OnRo
cmVhZEVudHJ5UG9pbnQpOiBDaGFuZ2VkIHRvIHVzZSBhIHN0ZDo6ZnVuY3Rpb24gaW5zdGVhZCBv
ZiBhIGZ1bmN0aW9uIHBvaW50ZXIuCisgICAgICAgIChXVEY6OmNyZWF0ZVRocmVhZCk6IEFkZCBh
IHZlcnNpb24gdGhhdCB0YWtlcyBhIHN0ZDo6ZnVuY3Rpb24uIFJlaW1wbGVtZW50ZWQgdGhlCisg
ICAgICAgIG9sZCB2ZXJzaW9uIHVzaW5nIGxhbWJkYXMuIFJlbW92ZWQgdGhlIG9ic29sZXRlIHZl
cnNpb25zIHRoYXQgd2VyZSB0aGVyZSBqdXN0IHRvIHN1cHBvcnQKKyAgICAgICAgYmluYXJ5IGNv
bXBhdGliaWxpdHkgd2l0aCB2ZXJ5IG9sZCB2ZXJzaW9ucyBvZiBTYWZhcmkuCisKKyAgICAgICAg
KiB3dGYvVGhyZWFkaW5nLmg6IFJlbW92ZWQgYW4gaW5jb3JyZWN0IGxpY2Vuc2UgaGVhZGVyIHRo
YXQgY292ZXJzIGNvZGUgdGhhdCB3YXMgbG9uZyBhZ28KKyAgICAgICAgbW92ZWQgdG8gYSBkaWZm
ZXJlbnQgZmlsZS4gQ2hhbmdlZCBjcmVhdGVUaHJlYWQgdG8gdGFrZSBhIHN0ZDo6ZnVuY3Rpb24g
aW5zdGVhZCBvZiBhIGZ1bmN0aW9uCisgICAgICAgIHBvaW50ZXIgYW5kIGRhdGEgcG9pbnRlci4g
TW92ZWQgaW50ZXJuYWwgZnVuY3Rpb25zIGFmdGVyIHB1YmxpYyBmdW5jdGlvbnMuCisKIDIwMTQt
MTEtMDUgIENocmlzIER1bWV6ICA8Y2R1bWV6QGFwcGxlLmNvbT4KIAogICAgICAgICBBc3NlcnRp
b24gaGl0IERPTVRpbWVyOjp1cGRhdGVUaW1lckludGVydmFsSWZOZWNlc3NhcnkoKQpkaWZmIC0t
Z2l0IGEvU291cmNlL1dlYkNvcmUvQ2hhbmdlTG9nIGIvU291cmNlL1dlYkNvcmUvQ2hhbmdlTG9n
CmluZGV4IDM5ZDcwMDU2ZTFkYzBlNTIzOGMxYTc0ZDhlZWI4ZTU2NmEzZWMyZGIuLjYwYTU5MTJm
MWVhZDViODM3ODA2NjIxZWZhMjk0ZDA3NWI2MGYyZTAgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJD
b3JlL0NoYW5nZUxvZworKysgYi9Tb3VyY2UvV2ViQ29yZS9DaGFuZ2VMb2cKQEAgLTEsMyArMSw3
NyBAQAorMjAxNC0xMS0wOCAgRGFyaW4gQWRsZXIgIDxkYXJpbkBhcHBsZS5jb20+CisKKyAgICAg
ICAgUmVwbGFjZSBGaWxlVGhyZWFkIGNsYXNzIHdpdGggYSBzaW5nbGUgZnVuY3Rpb24KKyAgICAg
ICAgaHR0cHM6Ly9idWdzLndlYmtpdC5vcmcvc2hvd19idWcuY2dpP2lkPTEzODI4MgorCisgICAg
ICAgIFJldmlld2VkIGJ5IEFsZXhleSBQcm9za3VyeWFrb3YuCisKKyAgICAgICAgKiBDTWFrZUxp
c3RzLnR4dDogUmVtb3ZlZCBGaWxlVGhyZWFkLmNwcC4KKworICAgICAgICAqIFdlYkNvcmUudmN4
cHJvai9XZWJDb3JlLnZjeHByb2o6IFJlbW92ZWQgRmlsZVRocmVhZC5jcHAvLmguCisgICAgICAg
ICogV2ViQ29yZS52Y3hwcm9qL1dlYkNvcmUudmN4cHJvai5maWx0ZXJzOiBEaXR0by4KKyAgICAg
ICAgKiBXZWJDb3JlLnhjb2RlcHJvai9wcm9qZWN0LnBieHByb2o6IERpdHRvLgorCisgICAgICAg
ICogYmluZGluZ3MvZ2VuZXJpYy9BY3RpdmVET01DYWxsYmFjay5jcHA6IFJlbW92ZWQgdW5uZWVk
ZWQgaW5jbHVkZXMuCisgICAgICAgICogZG9tL0FjdGl2ZURPTU9iamVjdC5jcHA6IERpdHRvLgor
CisgICAgICAgICogZmlsZWFwaS9Bc3luY0ZpbGVTdHJlYW0uY3BwOgorICAgICAgICAoV2ViQ29y
ZTo6Y2FsbE9uRmlsZVRocmVhZCk6IEFkZGVkLiBJbXBsZW1lbnRzIHRoZSBmaWxlIHRocmVhZC4K
KyAgICAgICAgKFdlYkNvcmU6OkFzeW5jRmlsZVN0cmVhbTo6QXN5bmNGaWxlU3RyZWFtKTogVGFr
ZSBhIHJlZmVyZW5jZSB0byB0aGUgY2xpZW50LgorICAgICAgICBNYWtlIG1faW50ZXJuYWxzLiBV
c2UgdGhlIGRlc3Ryb3llZCBmbGFnIGluc3RlYWQgb2YgdHJpY2tpZXIgdGVjaG5pcXVlcyB0bwor
ICAgICAgICBoYW5kbGUgc3RvcHBpbmcuIE9uY2UgdGhlIHN0cmVhbSBpcyBkZXN0cm95ZWQsIHRo
ZXJlIHdpbGwgYmUgbm8gZnVydGhlciBjYWxsYmFja3MuCisgICAgICAgIChXZWJDb3JlOjpBc3lu
Y0ZpbGVTdHJlYW06On5Bc3luY0ZpbGVTdHJlYW0pOiBBZGRlZCBhc3NlcnRpb25zIGFuZCBtZXJn
ZWQgaW4gdGhlCisgICAgICAgIHN0b3AgYmVoYXZpb3IgaGVyZS4gVGhpcyBjbGFzcyBubyBsb25n
ZXIgcmVxdWlyZXMgYW4gZXhwbGljaXQgc3RvcCBmdW5jdGlvbi4KKyAgICAgICAgKFdlYkNvcmU6
OkFzeW5jRmlsZVN0cmVhbTo6cGVyZm9ybSk6IEFkZGVkLiBIZWxwZXIgdXNlZCBmb3IgYWxsIHRo
ZSBvcGVyYXRpb25zCisgICAgICAgIGJlbG93LiBUYWtlcyBhIGZ1bmN0aW9uIHRoYXQgcGVyZm9y
bXMgYW4gb3BlcmF0aW9uIGFuZCB0aGVuIHJldHVybnMgYSBjbGllbnQKKyAgICAgICAgY2FsbGJh
Y2sgZnVuY3Rpb24uIFJlc3BlY3RzIHRoZSBtX3N0b3BwZWQgYm9vbGVhbiBvbiB0aGUgZmlsZSB0
aHJlYWQgKHNvIHdlCisgICAgICAgIGRvbid0IGRvIGV4dHJhIG9wZXJhdGlvbnMpIGFuZCBvbiB0
aGUgY2xpZW50IHRocmVhZCAoc28gd2UgYXJlIGd1YXJhbnRlZWQgbm90CisgICAgICAgIHRvIGdl
dCBhbnkgY2xpZW50IGNhbGxiYWNrcyBldmVuIGlmIHRoZSBmaWxlIHRocmVhZCB3YXMgcGFydHdh
eSB0aHJvdWdoIGFuCisgICAgICAgIG9wZXJhdGlvbikuCisgICAgICAgIChXZWJDb3JlOjpBc3lu
Y0ZpbGVTdHJlYW06OmdldFNpemUpOiBDaGFuZ2VkIHRvIHVzZSB0aGUgcGVyZm9ybSBmdW5jdGlv
bi4KKyAgICAgICAgKFdlYkNvcmU6OkFzeW5jRmlsZVN0cmVhbTo6b3BlbkZvclJlYWQpOiBEaXR0
by4gQWxzbyBmaXhlZCByZWZlcmVuY2UgY291bnQKKyAgICAgICAgdGhyZWFkIHNhZmV0eSBpc3N1
ZSBieSBjYXB0dXJpbmcgYSBTdHJpbmdDYXB0dXJlIHJhdGhlciB0aGFuIGEgU3RyaW5nLgorICAg
ICAgICAoV2ViQ29yZTo6QXN5bmNGaWxlU3RyZWFtOjpvcGVuRm9yV3JpdGUpOiBEaXR0by4KKyAg
ICAgICAgKFdlYkNvcmU6OkFzeW5jRmlsZVN0cmVhbTo6Y2xvc2UpOiBDaGFuZ2VkIHRvIHVzZSBj
YWxsT25GaWxlVGhyZWFkLgorICAgICAgICAoV2ViQ29yZTo6QXN5bmNGaWxlU3RyZWFtOjpyZWFk
KTogQ2hhbmdlZCB0byB1c2UgdGhlIHBlcmZvcm0gZnVuY3Rpb24uCisgICAgICAgIChXZWJDb3Jl
OjpBc3luY0ZpbGVTdHJlYW06OndyaXRlKTogRGl0dG8uIEFsc28gZml4ZWQgcmVmZXJlbmNlIGNv
dW50CisgICAgICAgIHRocmVhZCBzYWZldHkgaXNzdWUgYnkgY2FwdHVyaW5nIGEgU3RyaW5nQ2Fw
dHVyZSByYXRoZXIgdGhhbiBhIFVSTC4KKyAgICAgICAgKFdlYkNvcmU6OkFzeW5jRmlsZVN0cmVh
bTo6dHJ1bmNhdGUpOiBEaXR0by4KKworICAgICAgICAqIGZpbGVhcGkvQXN5bmNGaWxlU3RyZWFt
Lmg6IFJlbW92ZWQgdXNlIG9mIFJlZkNvdW50ZWQgc2luY2Ugd2Ugb25seSBuZWVkCisgICAgICAg
IHNpbmdsZSBvd25lcnNoaXAuIFJlbW92ZWQgdGhlIHN0b3AgZnVuY3Rpb24sIHNpbmNlIHdlIGNh
biBub3cgc3RvcCB3aGVuCisgICAgICAgIHRoZSBzdHJlYW0gaXMgZGVzdHJveWVkIHNpbmNlIHdl
IGhhdmUgc2luZ2xlIG93bmVyc2hpcC4gTWFkZSBhIG5ldyBJbnRlcm5hbHMKKyAgICAgICAgb2Jq
ZWN0IHRvIGhhbmRsZSBkZXN0cnVjdGlvbiB3aGlsZSBvcGVyYXRpb25zIGFyZSBzdGlsbCBnb2lu
ZyBvbiB0aGUgZmlsZSB0aHJlYWQuCisKKyAgICAgICAgKiBmaWxlYXBpL0ZpbGVUaHJlYWQuY3Bw
OiBSZW1vdmVkLgorICAgICAgICAqIGZpbGVhcGkvRmlsZVRocmVhZC5oOiBSZW1vdmVkLgorCisg
ICAgICAgICogbG9hZGVyL1Jlc291cmNlTG9hZGVyLmNwcDogUmVtb3ZlZCB1bm5lZWRlZCBpbmNs
dWRlLgorCisgICAgICAgICogcGxhdGZvcm0vRmlsZVN0cmVhbS5jcHA6CisgICAgICAgIChXZWJD
b3JlOjpGaWxlU3RyZWFtOjp+RmlsZVN0cmVhbSk6IE1lcmdlZCB0aGUgc3RvcCBmdW5jdGlvbiBp
biBoZXJlLgorCisgICAgICAgICogcGxhdGZvcm0vRmlsZVN0cmVhbS5oOiBSZW1vdmVkIHVzZSBv
ZiBSZWZDb3VudGVkIHNpbmNlIHdlIG9ubHkgbmVlZAorICAgICAgICBzaW5nbGUgb3duZXJzaGlw
LiBSZW1vdmVkIHRoZSBlbXB0eSBzdGFydCBmdW5jdGlvbi4gUmVtb3ZlZCB0aGUgc3RvcCBmdW5j
dGlvbiwKKyAgICAgICAgc2luY2Ugd2UgY2FuIG5vdyBzdG9wIHdoZW4gdGhlIHN0cmVhbSBpcyBk
ZXN0cm95ZWQgc2luY2Ugd2UgaGF2ZSBzaW5nbGUgb3duZXJzaGlwLgorCisgICAgICAgICogcGxh
dGZvcm0vRmlsZVN0cmVhbUNsaWVudC5oOiBSZW1vdmVkIHVubmVlZGVkIGRpZFN0YXJ0IGFuZCBk
aWRTdG9wLgorCisgICAgICAgICogcGxhdGZvcm0vbmV0d29yay9CbG9iUmVzb3VyY2VIYW5kbGUu
Y3BwOgorICAgICAgICAoV2ViQ29yZTo6QmxvYlJlc291cmNlSGFuZGxlOjpCbG9iUmVzb3VyY2VI
YW5kbGUpOiBVc2UgbWFrZV91bmlxdWUgdG8gbWFrZSB0aGUKKyAgICAgICAgc3RyZWFtIG9iamVj
dHMgaW5zdGVhZCBvZiBjdXN0b20gY3JlYXRlIGZ1bmN0aW9ucy4KKyAgICAgICAgKFdlYkNvcmU6
OkJsb2JSZXNvdXJjZUhhbmRsZTo6fkJsb2JSZXNvdXJjZUhhbmRsZSk6IFJlbW92ZWQgbm93LXVu
bmVlZGVkIGNvZGUKKyAgICAgICAgdG8gY2FsbCBzdG9wIGZ1bmN0aW9ucy4gRGVzdHJveWluZyB0
aGUgb2JqZWN0cyBub3cgdGFrZXMgY2FyZSBvZiB0aGUgdGhpcywgYW5kCisgICAgICAgIHRoYXQn
cyBkb25lIGJ5IHRoZSB1bmlxdWVfcHRycy4KKyAgICAgICAgKFdlYkNvcmU6OkJsb2JSZXNvdXJj
ZUhhbmRsZTo6Y2FuY2VsKTogUmVtb3ZlZCB0aGUgcmVzdCBvZiB0aGUgY29kZSB0byBzdG9wIHRo
ZQorICAgICAgICBtX2FzeW5jU3RyZWFtLCBrZWVwaW5nIG9ubHkgdGhlIGNvZGUgdGhhdCBzZXRz
IGl0IHRvIG51bGwuIFRoYXQgbm93IHN0b3BzIHRoZQorICAgICAgICBzdHJlYW0gYnkgZGVzdHJv
eWluZyBpdC4KKworICAgICAgICAqIHBsYXRmb3JtL25ldHdvcmsvQmxvYlJlc291cmNlSGFuZGxl
Lmg6IFVzZSBzdGQ6OnVuaXF1ZV9wdHIgcmF0aGVyIHRoYW4KKyAgICAgICAgUmVmUHRyIGZvciB0
aGUgZmlsZSBzdHJlYW0gb2JqZWN0cy4KKworICAgICAgICAqIHN0b3JhZ2UvU3RvcmFnZVRocmVh
ZC5oOiBUd2Vha2VkIGZvcm1hdHRpbmcgb2Ygc3RkOjpmdW5jdGlvbjx2b2lkKCk+IHRvCisgICAg
ICAgIG1hdGNoIHRoZSBmb3JtYXQgdXNlZCBlbHNld2hlcmUgaW4gV2ViS2l0LgorCiAyMDE0LTEx
LTA4ICBTaW1vbiBGcmFzZXIgIDxzaW1vbi5mcmFzZXJAYXBwbGUuY29tPgogCiAgICAgICAgIERv
bid0IHRyeSB0byBzY2hlZHVsZSBhIEdyYXBoaWNzTGF5ZXIgZmx1c2ggd2hlbiBwcm9wYWdhdGlu
ZyBjaGFuZ2VzIHRvIHJlcGxpY2FzIGluc2lkZSBhIGZsdXNoCmRpZmYgLS1naXQgYS9Tb3VyY2Uv
V2ViS2l0L0NoYW5nZUxvZyBiL1NvdXJjZS9XZWJLaXQvQ2hhbmdlTG9nCmluZGV4IDhkYWM5ZTM1
MGY3Y2RkMTNmZjQwOGMwZGUxYTQyYjc2M2VjNGMyNmEuLmExZWQ2YzBhNGE0MWJhYzEyODEwN2Qw
YTAzZDViNTcwNDQ1NDVjN2EgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJLaXQvQ2hhbmdlTG9nCisr
KyBiL1NvdXJjZS9XZWJLaXQvQ2hhbmdlTG9nCkBAIC0xLDMgKzEsMTMgQEAKKzIwMTQtMTEtMDgg
IERhcmluIEFkbGVyICA8ZGFyaW5AYXBwbGUuY29tPgorCisgICAgICAgIFJlcGxhY2UgRmlsZVRo
cmVhZCBjbGFzcyB3aXRoIGEgc2luZ2xlIGZ1bmN0aW9uCisgICAgICAgIGh0dHBzOi8vYnVncy53
ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9pZD0xMzgyODIKKworICAgICAgICBSZXZpZXdlZCBieSBB
bGV4ZXkgUHJvc2t1cnlha292LgorCisgICAgICAgICogV2ViS2l0LnZjeHByb2ovV2ViS2l0RXhw
b3J0R2VuZXJhdG9yL1dlYktpdEV4cG9ydHMuZGVmLmluOgorICAgICAgICBSZW1vdmVkIGV4cG9y
dHMgb2Ygb2Jzb2xldGUgdGhyZWFkaW5nIGZ1bmN0aW9ucy4KKwogMjAxNC0xMS0wNSAgRGFuIEJl
cm5zdGVpbiAgPG1pdHpAYXBwbGUuY29tPgogCiAgICAgICAgIFJlbW92ZWQgcmVmZXJlbmNlcyB0
byBkZWxldGlvbiBVSSByZXNvdXJjZXMgdGhhdCBoYXZlIGJlZW4gcmVtb3ZlZC4KZGlmZiAtLWdp
dCBhL1NvdXJjZS9XVEYvd3RmL1RocmVhZGluZy5jcHAgYi9Tb3VyY2UvV1RGL3d0Zi9UaHJlYWRp
bmcuY3BwCmluZGV4IGM4ZDk5NmI1YTg1ZWQwNGVkNWEzOTlhZWVhZDE0NTk2NTQzOGU5MGQuLjE3
NzY1OTg3MzdkOGNiMWQ3M2M1MWY1MzMzNzU4MjA2NDhlOWVkMWUgMTAwNjQ0Ci0tLSBhL1NvdXJj
ZS9XVEYvd3RmL1RocmVhZGluZy5jcHAKKysrIGIvU291cmNlL1dURi93dGYvVGhyZWFkaW5nLmNw
cApAQCAtMSw1ICsxLDUgQEAKIC8qCi0gKiBDb3B5cmlnaHQgKEMpIDIwMDgsIDIwMDkgQXBwbGUg
SW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICogQ29weXJpZ2h0IChDKSAyMDA4LCAyMDA5LCAy
MDE0IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KICAqCiAgKiBSZWRpc3RyaWJ1dGlv
biBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKICAq
IG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcg
Y29uZGl0aW9ucwpAQCAtMzMsMjMgKzMzLDE0IEBAIG5hbWVzcGFjZSBXVEYgewogc3RydWN0IE5l
d1RocmVhZENvbnRleHQgewogICAgIFdURl9NQUtFX0ZBU1RfQUxMT0NBVEVEOwogcHVibGljOgot
ICAgIE5ld1RocmVhZENvbnRleHQoVGhyZWFkRnVuY3Rpb24gZW50cnlQb2ludCwgdm9pZCogZGF0
YSwgY29uc3QgY2hhciogbmFtZSkKLSAgICAgICAgOiBlbnRyeVBvaW50KGVudHJ5UG9pbnQpCi0g
ICAgICAgICwgZGF0YShkYXRhKQotICAgICAgICAsIG5hbWUobmFtZSkKLSAgICB7Ci0gICAgfQot
Ci0gICAgVGhyZWFkRnVuY3Rpb24gZW50cnlQb2ludDsKLSAgICB2b2lkKiBkYXRhOwogICAgIGNv
bnN0IGNoYXIqIG5hbWU7Ci0KKyAgICBzdGQ6OmZ1bmN0aW9uPHZvaWQoKT4gZW50cnlQb2ludDsK
ICAgICBNdXRleCBjcmVhdGlvbk11dGV4OwogfTsKIAogc3RhdGljIHZvaWQgdGhyZWFkRW50cnlQ
b2ludCh2b2lkKiBjb250ZXh0RGF0YSkKIHsKLSAgICBOZXdUaHJlYWRDb250ZXh0KiBjb250ZXh0
ID0gcmVpbnRlcnByZXRfY2FzdDxOZXdUaHJlYWRDb250ZXh0Kj4oY29udGV4dERhdGEpOworICAg
IE5ld1RocmVhZENvbnRleHQqIGNvbnRleHQgPSBzdGF0aWNfY2FzdDxOZXdUaHJlYWRDb250ZXh0
Kj4oY29udGV4dERhdGEpOwogCiAgICAgLy8gQmxvY2sgdW50aWwgb3VyIGNyZWF0aW5nIHRocmVh
ZCBoYXMgY29tcGxldGVkIGFueSBleHRyYSBzZXR1cCB3b3JrLCBpbmNsdWRpbmcKICAgICAvLyBl
c3RhYmxpc2hpbmcgVGhyZWFkSWRlbnRpZmllci4KQEAgLTU5LDE1ICs1MCwxNSBAQCBzdGF0aWMg
dm9pZCB0aHJlYWRFbnRyeVBvaW50KHZvaWQqIGNvbnRleHREYXRhKQogCiAgICAgaW5pdGlhbGl6
ZUN1cnJlbnRUaHJlYWRJbnRlcm5hbChjb250ZXh0LT5uYW1lKTsKIAotICAgIC8vIEdyYWIgdGhl
IGluZm8gdGhhdCB3ZSBuZWVkIG91dCBvZiB0aGUgY29udGV4dCwgdGhlbiBkZWFsbG9jYXRlIGl0
LgotICAgIFRocmVhZEZ1bmN0aW9uIGVudHJ5UG9pbnQgPSBjb250ZXh0LT5lbnRyeVBvaW50Owot
ICAgIHZvaWQqIGRhdGEgPSBjb250ZXh0LT5kYXRhOworICAgIGF1dG8gZW50cnlQb2ludCA9IFdU
Rjo6bW92ZShjb250ZXh0LT5lbnRyeVBvaW50KTsKKworICAgIC8vIERlbGV0ZSB0aGUgY29udGV4
dCBiZWZvcmUgc3RhcnRpbmcgdGhlIHRocmVhZC4KICAgICBkZWxldGUgY29udGV4dDsKIAotICAg
IGVudHJ5UG9pbnQoZGF0YSk7CisgICAgZW50cnlQb2ludCgpOwogfQogCi1UaHJlYWRJZGVudGlm
aWVyIGNyZWF0ZVRocmVhZChUaHJlYWRGdW5jdGlvbiBlbnRyeVBvaW50LCB2b2lkKiBkYXRhLCBj
b25zdCBjaGFyKiBuYW1lKQorVGhyZWFkSWRlbnRpZmllciBjcmVhdGVUaHJlYWQoY29uc3QgY2hh
ciogbmFtZSwgc3RkOjpmdW5jdGlvbjx2b2lkKCk+IGVudHJ5UG9pbnQpCiB7CiAgICAgLy8gVmlz
dWFsIFN0dWRpbyBoYXMgYSAzMS1jaGFyYWN0ZXIgbGltaXQgb24gdGhyZWFkIG5hbWVzLiBMb25n
ZXIgbmFtZXMgd2lsbAogICAgIC8vIGJlIHRydW5jYXRlZCBzaWxlbnRseSwgYnV0IHdlJ2QgbGlr
ZSBjYWxsZXJzIHRvIGtub3cgYWJvdXQgdGhlIGxpbWl0LgpAQCAtNzYsNyArNjcsNyBAQCBUaHJl
YWRJZGVudGlmaWVyIGNyZWF0ZVRocmVhZChUaHJlYWRGdW5jdGlvbiBlbnRyeVBvaW50LCB2b2lk
KiBkYXRhLCBjb25zdCBjaGFyKgogICAgICAgICBMT0dfRVJST1IoIlRocmVhZCBuYW1lIFwiJXNc
IiBpcyBsb25nZXIgdGhhbiAzMSBjaGFyYWN0ZXJzIGFuZCB3aWxsIGJlIHRydW5jYXRlZCBieSBW
aXN1YWwgU3R1ZGlvIiwgbmFtZSk7CiAjZW5kaWYKIAotICAgIE5ld1RocmVhZENvbnRleHQqIGNv
bnRleHQgPSBuZXcgTmV3VGhyZWFkQ29udGV4dChlbnRyeVBvaW50LCBkYXRhLCBuYW1lKTsKKyAg
ICBOZXdUaHJlYWRDb250ZXh0KiBjb250ZXh0ID0gbmV3IE5ld1RocmVhZENvbnRleHQgeyBuYW1l
LCBXVEY6Om1vdmUoZW50cnlQb2ludCksIHsgfSB9OwogCiAgICAgLy8gUHJldmVudCB0aGUgdGhy
ZWFkIGJvZHkgZnJvbSBleGVjdXRpbmcgdW50aWwgd2UndmUgZXN0YWJsaXNoZWQgdGhlIHRocmVh
ZCBpZGVudGlmaWVyLgogICAgIE11dGV4TG9ja2VyIGxvY2tlcihjb250ZXh0LT5jcmVhdGlvbk11
dGV4KTsKQEAgLTg0LDYgKzc1LDEzIEBAIFRocmVhZElkZW50aWZpZXIgY3JlYXRlVGhyZWFkKFRo
cmVhZEZ1bmN0aW9uIGVudHJ5UG9pbnQsIHZvaWQqIGRhdGEsIGNvbnN0IGNoYXIqCiAgICAgcmV0
dXJuIGNyZWF0ZVRocmVhZEludGVybmFsKHRocmVhZEVudHJ5UG9pbnQsIGNvbnRleHQsIG5hbWUp
OwogfQogCitUaHJlYWRJZGVudGlmaWVyIGNyZWF0ZVRocmVhZChUaHJlYWRGdW5jdGlvbiBlbnRy
eVBvaW50LCB2b2lkKiBkYXRhLCBjb25zdCBjaGFyKiBuYW1lKQoreworICAgIHJldHVybiBjcmVh
dGVUaHJlYWQobmFtZSwgW2VudHJ5UG9pbnQsIGRhdGFdIHsKKyAgICAgICAgZW50cnlQb2ludChk
YXRhKTsKKyAgICB9KTsKK30KKwogdm9pZCBzZXRDdXJyZW50VGhyZWFkSXNVc2VySW50ZXJhY3Rp
dmUoKQogewogI2lmIEhBVkUoUU9TX0NMQVNTRVMpCkBAIC05OCw2MSArOTYsNCBAQCB2b2lkIHNl
dEN1cnJlbnRUaHJlYWRJc1VzZXJJbml0aWF0ZWQoKQogI2VuZGlmCiB9CiAKLSNpZiBQTEFURk9S
TShNQUMpIHx8IFBMQVRGT1JNKFdJTikKLQotLy8gRm9yIEFCSSBjb21wYXRpYmlsaXR5IHdpdGgg
U2FmYXJpIG9uIE1hYyAvIFdpbmRvd3M6IFNhZmFyaSB1c2VzIHRoZSBwcml2YXRlCi0vLyBjcmVh
dGVUaHJlYWQoKSBhbmQgd2FpdEZvclRocmVhZENvbXBsZXRpb24oKSBmdW5jdGlvbnMgZGlyZWN0
bHkgYW5kIHdlIG5lZWQKLS8vIHRvIGtlZXAgdGhlIG9sZCBBQkkgY29tcGF0aWJpbGl0eSB1bnRp
bCBpdCdzIGJlZW4gcmVidWlsdC4KLQotdHlwZWRlZiB2b2lkKiAoKlRocmVhZEZ1bmN0aW9uV2l0
aFJldHVyblZhbHVlKSh2b2lkKiBhcmd1bWVudCk7Ci0KLVdURl9FWFBPUlRfUFJJVkFURSBUaHJl
YWRJZGVudGlmaWVyIGNyZWF0ZVRocmVhZChUaHJlYWRGdW5jdGlvbldpdGhSZXR1cm5WYWx1ZSBl
bnRyeVBvaW50LCB2b2lkKiBkYXRhLCBjb25zdCBjaGFyKiBuYW1lKTsKLQotc3RydWN0IFRocmVh
ZEZ1bmN0aW9uV2l0aFJldHVyblZhbHVlSW52b2NhdGlvbiB7Ci0gICAgVGhyZWFkRnVuY3Rpb25X
aXRoUmV0dXJuVmFsdWVJbnZvY2F0aW9uKFRocmVhZEZ1bmN0aW9uV2l0aFJldHVyblZhbHVlIGZ1
bmN0aW9uLCB2b2lkKiBkYXRhKQotICAgICAgICA6IGZ1bmN0aW9uKGZ1bmN0aW9uKQotICAgICAg
ICAsIGRhdGEoZGF0YSkKLSAgICB7Ci0gICAgfQotCi0gICAgVGhyZWFkRnVuY3Rpb25XaXRoUmV0
dXJuVmFsdWUgZnVuY3Rpb247Ci0gICAgdm9pZCogZGF0YTsKLX07Ci0KLXN0YXRpYyB2b2lkIGNv
bXBhdEVudHJ5UG9pbnQodm9pZCogcGFyYW0pCi17Ci0gICAgLy8gQmFsYW5jZWQgYnkgLnJlbGVh
c2UoKSBpbiBjcmVhdGVUaHJlYWQuCi0gICAgYXV0byBpbnZvY2F0aW9uID0gc3RkOjp1bmlxdWVf
cHRyPFRocmVhZEZ1bmN0aW9uV2l0aFJldHVyblZhbHVlSW52b2NhdGlvbj4oc3RhdGljX2Nhc3Q8
VGhyZWFkRnVuY3Rpb25XaXRoUmV0dXJuVmFsdWVJbnZvY2F0aW9uKj4ocGFyYW0pKTsKLSAgICBp
bnZvY2F0aW9uLT5mdW5jdGlvbihpbnZvY2F0aW9uLT5kYXRhKTsKLX0KLQotVGhyZWFkSWRlbnRp
ZmllciBjcmVhdGVUaHJlYWQoVGhyZWFkRnVuY3Rpb25XaXRoUmV0dXJuVmFsdWUgZW50cnlQb2lu
dCwgdm9pZCogZGF0YSwgY29uc3QgY2hhciogbmFtZSkKLXsKLSAgICBhdXRvIGludm9jYXRpb24g
PSBzdGQ6Om1ha2VfdW5pcXVlPFRocmVhZEZ1bmN0aW9uV2l0aFJldHVyblZhbHVlSW52b2NhdGlv
bj4oZW50cnlQb2ludCwgZGF0YSk7Ci0KLSAgICAvLyBCYWxhbmNlZCBieSBzdGQ6OnVuaXF1ZV9w
dHIgY29uc3RydWN0b3IgaW4gY29tcGF0RW50cnlQb2ludC4KLSAgICByZXR1cm4gY3JlYXRlVGhy
ZWFkKGNvbXBhdEVudHJ5UG9pbnQsIGludm9jYXRpb24ucmVsZWFzZSgpLCBuYW1lKTsKLX0KLQot
V1RGX0VYUE9SVF9QUklWQVRFIGludCB3YWl0Rm9yVGhyZWFkQ29tcGxldGlvbihUaHJlYWRJZGVu
dGlmaWVyLCB2b2lkKiopOwotCi1pbnQgd2FpdEZvclRocmVhZENvbXBsZXRpb24oVGhyZWFkSWRl
bnRpZmllciB0aHJlYWRJRCwgdm9pZCoqKQotewotICAgIHJldHVybiB3YWl0Rm9yVGhyZWFkQ29t
cGxldGlvbih0aHJlYWRJRCk7Ci19Ci0KLS8vIFRoaXMgZnVuY3Rpb24gaXMgZGVwcmVjYXRlZCBi
dXQgbmVlZHMgdG8gYmUga2VwdCBhcm91bmQgZm9yIGJhY2t3YXJkCi0vLyBjb21wYXRpYmlsaXR5
LiBVc2UgdGhlIDMtYXJndW1lbnQgdmVyc2lvbiBvZiBjcmVhdGVUaHJlYWQgYWJvdmUuCi0KLVdU
Rl9FWFBPUlRfUFJJVkFURSBUaHJlYWRJZGVudGlmaWVyIGNyZWF0ZVRocmVhZChUaHJlYWRGdW5j
dGlvbldpdGhSZXR1cm5WYWx1ZSBlbnRyeVBvaW50LCB2b2lkKiBkYXRhKTsKLQotVGhyZWFkSWRl
bnRpZmllciBjcmVhdGVUaHJlYWQoVGhyZWFkRnVuY3Rpb25XaXRoUmV0dXJuVmFsdWUgZW50cnlQ
b2ludCwgdm9pZCogZGF0YSkKLXsKLSAgICBhdXRvIGludm9jYXRpb24gPSBzdGQ6Om1ha2VfdW5p
cXVlPFRocmVhZEZ1bmN0aW9uV2l0aFJldHVyblZhbHVlSW52b2NhdGlvbj4oZW50cnlQb2ludCwg
ZGF0YSk7Ci0KLSAgICAvLyBCYWxhbmNlZCBieSBhZG9wdFB0cigpIGluIGNvbXBhdEVudHJ5UG9p
bnQuCi0gICAgcmV0dXJuIGNyZWF0ZVRocmVhZChjb21wYXRFbnRyeVBvaW50LCBpbnZvY2F0aW9u
LnJlbGVhc2UoKSwgMCk7Ci19Ci0jZW5kaWYKLQogfSAvLyBuYW1lc3BhY2UgV1RGCmRpZmYgLS1n
aXQgYS9Tb3VyY2UvV1RGL3d0Zi9UaHJlYWRpbmcuaCBiL1NvdXJjZS9XVEYvd3RmL1RocmVhZGlu
Zy5oCmluZGV4IDM2NmRmYmI5OGNkMGNmZjZkYmI0NDZhMmUyOGEzZGJiNjg2M2VjMzEuLjU5MDZm
Zjc0YTFlNjFmZjNmYThjZDdhMjkyZWVlNzUxNjM3NDZlMDUgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9X
VEYvd3RmL1RocmVhZGluZy5oCisrKyBiL1NvdXJjZS9XVEYvd3RmL1RocmVhZGluZy5oCkBAIC0x
LDUgKzEsNSBAQAogLyoKLSAqIENvcHlyaWdodCAoQykgMjAwNywgMjAwOCwgMjAxMCBBcHBsZSBJ
bmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKiBDb3B5cmlnaHQgKEMpIDIwMDcsIDIwMDgsIDIw
MTAsIDIwMTQgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgogICogQ29weXJpZ2h0IChD
KSAyMDA3IEp1c3RpbiBIYXlnb29kIChqaGF5Z29vZEByZWFrdGl4LmNvbSkKICAqCiAgKiBSZWRp
c3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdp
dGhvdXQKQEAgLTI1LDQwICsyNSwxNiBAQAogICogT04gQU5ZIFRIRU9SWSBPRiBMSUFCSUxJVFks
IFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQKICAqIChJTkNM
VURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0Yg
VEhFIFVTRSBPRgogICogVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NT
SUJJTElUWSBPRiBTVUNIIERBTUFHRS4KLSAqCi0gKgotICogTm90ZTogVGhlIGltcGxlbWVudGF0
aW9ucyBvZiBJbnRlcmxvY2tlZEluY3JlbWVudCBhbmQgSW50ZXJsb2NrZWREZWNyZW1lbnQgYXJl
IGJhc2VkCi0gKiBvbiBhdG9taWNfaW5jcmVtZW50IGFuZCBhdG9taWNfZXhjaGFuZ2VfYW5kX2Fk
ZCBmcm9tIHRoZSBCb29zdCBDKysgTGlicmFyeS4gVGhlIGxpY2Vuc2UKLSAqIGlzIHZpcnR1YWxs
eSBpZGVudGljYWwgdG8gdGhlIEFwcGxlIGxpY2Vuc2UgYWJvdmUgYnV0IGlzIGluY2x1ZGVkIGhl
cmUgZm9yIGNvbXBsZXRlbmVzcy4KLSAqCi0gKiBCb29zdCBTb2Z0d2FyZSBMaWNlbnNlIC0gVmVy
c2lvbiAxLjAgLSBBdWd1c3QgMTd0aCwgMjAwMwotICogCi0gKiBQZXJtaXNzaW9uIGlzIGhlcmVi
eSBncmFudGVkLCBmcmVlIG9mIGNoYXJnZSwgdG8gYW55IHBlcnNvbiBvciBvcmdhbml6YXRpb24K
LSAqIG9idGFpbmluZyBhIGNvcHkgb2YgdGhlIHNvZnR3YXJlIGFuZCBhY2NvbXBhbnlpbmcgZG9j
dW1lbnRhdGlvbiBjb3ZlcmVkIGJ5Ci0gKiB0aGlzIGxpY2Vuc2UgKHRoZSAiU29mdHdhcmUiKSB0
byB1c2UsIHJlcHJvZHVjZSwgZGlzcGxheSwgZGlzdHJpYnV0ZSwKLSAqIGV4ZWN1dGUsIGFuZCB0
cmFuc21pdCB0aGUgU29mdHdhcmUsIGFuZCB0byBwcmVwYXJlIGRlcml2YXRpdmUgd29ya3Mgb2Yg
dGhlCi0gKiBTb2Z0d2FyZSwgYW5kIHRvIHBlcm1pdCB0aGlyZC1wYXJ0aWVzIHRvIHdob20gdGhl
IFNvZnR3YXJlIGlzIGZ1cm5pc2hlZCB0bwotICogZG8gc28sIGFsbCBzdWJqZWN0IHRvIHRoZSBm
b2xsb3dpbmc6Ci0gKiAKLSAqIFRoZSBjb3B5cmlnaHQgbm90aWNlcyBpbiB0aGUgU29mdHdhcmUg
YW5kIHRoaXMgZW50aXJlIHN0YXRlbWVudCwgaW5jbHVkaW5nCi0gKiB0aGUgYWJvdmUgbGljZW5z
ZSBncmFudCwgdGhpcyByZXN0cmljdGlvbiBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLAot
ICogbXVzdCBiZSBpbmNsdWRlZCBpbiBhbGwgY29waWVzIG9mIHRoZSBTb2Z0d2FyZSwgaW4gd2hv
bGUgb3IgaW4gcGFydCwgYW5kCi0gKiBhbGwgZGVyaXZhdGl2ZSB3b3JrcyBvZiB0aGUgU29mdHdh
cmUsIHVubGVzcyBzdWNoIGNvcGllcyBvciBkZXJpdmF0aXZlCi0gKiB3b3JrcyBhcmUgc29sZWx5
IGluIHRoZSBmb3JtIG9mIG1hY2hpbmUtZXhlY3V0YWJsZSBvYmplY3QgY29kZSBnZW5lcmF0ZWQg
YnkKLSAqIGEgc291cmNlIGxhbmd1YWdlIHByb2Nlc3Nvci4KLSAqIAotICogVEhFIFNPRlRXQVJF
IElTIFBST1ZJREVEICJBUyBJUyIsIFdJVEhPVVQgV0FSUkFOVFkgT0YgQU5ZIEtJTkQsIEVYUFJF
U1MgT1IKLSAqIElNUExJRUQsIElOQ0xVRElORyBCVVQgTk9UIExJTUlURUQgVE8gVEhFIFdBUlJB
TlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZLAotICogRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBV
UlBPU0UsIFRJVExFIEFORCBOT04tSU5GUklOR0VNRU5ULiBJTiBOTyBFVkVOVAotICogU0hBTEwg
VEhFIENPUFlSSUdIVCBIT0xERVJTIE9SIEFOWU9ORSBESVNUUklCVVRJTkcgVEhFIFNPRlRXQVJF
IEJFIExJQUJMRQotICogRk9SIEFOWSBEQU1BR0VTIE9SIE9USEVSIExJQUJJTElUWSwgV0hFVEhF
UiBJTiBDT05UUkFDVCwgVE9SVCBPUiBPVEhFUldJU0UsCi0gKiBBUklTSU5HIEZST00sIE9VVCBP
RiBPUiBJTiBDT05ORUNUSU9OIFdJVEggVEhFIFNPRlRXQVJFIE9SIFRIRSBVU0UgT1IgT1RIRVIK
LSAqIERFQUxJTkdTIElOIFRIRSBTT0ZUV0FSRS4KICAqLwogCiAjaWZuZGVmIFRocmVhZGluZ19o
CiAjZGVmaW5lIFRocmVhZGluZ19oCiAKKy8vIEZJWE1FOiBOb3Qgc3VyZSB3aHkgdGhlcmUgYXJl
IHNvIG1hbnkgaW5jbHVkZXMgaGVyZS4KKy8vIElzIHRoaXMgaW50ZW5kZWQgdG8gYmUgY29udmVu
aWVuY2Ugc28gdGhhdCBvdGhlcnMgZG9uJ3QgaGF2ZSB0byBpbmNsdWRlIHRoZSBpbmRpdmlkdWFs
IGZpbGVzPworLy8gTm90aGluZyBpbiB0aGlzIGhlYWRlciBkZXBlbmRzIG9uIEFzc2VydGlvbnMs
IEF0b21pY3MsIExvY2tlciwgTm9uY29weWFibGUsIFRocmVhZFNhZmVSZWZDb3VudGVkLCBvciBU
aHJlYWRpbmdQcmltaXRpdmVzLgorCisjaW5jbHVkZSA8ZnVuY3Rpb25hbD4KICNpbmNsdWRlIDxz
dGRpbnQuaD4KICNpbmNsdWRlIDx3dGYvQXNzZXJ0aW9ucy5oPgogI2luY2x1ZGUgPHd0Zi9BdG9t
aWNzLmg+CkBAIC03OSwxMyArNTUsMjAgQEAgV1RGX0VYUE9SVF9QUklWQVRFIHZvaWQgaW5pdGlh
bGl6ZVRocmVhZGluZygpOwogCiAvLyBSZXR1cm5zIDAgaWYgdGhyZWFkIGNyZWF0aW9uIGZhaWxl
ZC4KIC8vIFRoZSB0aHJlYWQgbmFtZSBtdXN0IGJlIGEgbGl0ZXJhbCBzaW5jZSBvbiBzb21lIHBs
YXRmb3JtcyBpdCdzIHBhc3NlZCBpbiB0byB0aGUgdGhyZWFkLgotV1RGX0VYUE9SVF9QUklWQVRF
IFRocmVhZElkZW50aWZpZXIgY3JlYXRlVGhyZWFkKFRocmVhZEZ1bmN0aW9uLCB2b2lkKiwgY29u
c3QgY2hhciogdGhyZWFkTmFtZSk7CitXVEZfRVhQT1JUX1BSSVZBVEUgVGhyZWFkSWRlbnRpZmll
ciBjcmVhdGVUaHJlYWQoY29uc3QgY2hhciogdGhyZWFkTmFtZSwgc3RkOjpmdW5jdGlvbjx2b2lk
KCk+KTsKIAogLy8gTWFyayB0aGUgY3VycmVudCB0aHJlYWQgYXMgcmVxdWlyaW5nIFVJIHJlc3Bv
bnNpdmVuZXNzLgogV1RGX0VYUE9SVF9QUklWQVRFIHZvaWQgc2V0Q3VycmVudFRocmVhZElzVXNl
ckludGVyYWN0aXZlKCk7Ci0KIFdURl9FWFBPUlRfUFJJVkFURSB2b2lkIHNldEN1cnJlbnRUaHJl
YWRJc1VzZXJJbml0aWF0ZWQoKTsKIAorV1RGX0VYUE9SVF9QUklWQVRFIFRocmVhZElkZW50aWZp
ZXIgY3VycmVudFRocmVhZCgpOworV1RGX0VYUE9SVF9QUklWQVRFIHZvaWQgY2hhbmdlVGhyZWFk
UHJpb3JpdHkoVGhyZWFkSWRlbnRpZmllciwgaW50KTsKK1dURl9FWFBPUlRfUFJJVkFURSBpbnQg
d2FpdEZvclRocmVhZENvbXBsZXRpb24oVGhyZWFkSWRlbnRpZmllcik7CitXVEZfRVhQT1JUX1BS
SVZBVEUgdm9pZCBkZXRhY2hUaHJlYWQoVGhyZWFkSWRlbnRpZmllcik7CisKKy8vIERlcHJlY2F0
ZWQgZnVuY3Rpb24tcG9pbnRlci1iYXNlZCB0aHJlYWQgY3JlYXRpb24uCitXVEZfRVhQT1JUX1BS
SVZBVEUgVGhyZWFkSWRlbnRpZmllciBjcmVhdGVUaHJlYWQoVGhyZWFkRnVuY3Rpb24sIHZvaWQq
LCBjb25zdCBjaGFyKiB0aHJlYWROYW1lKTsKKwogLy8gSW50ZXJuYWwgcGxhdGZvcm0tc3BlY2lm
aWMgY3JlYXRlVGhyZWFkIGltcGxlbWVudGF0aW9uLgogVGhyZWFkSWRlbnRpZmllciBjcmVhdGVU
aHJlYWRJbnRlcm5hbChUaHJlYWRGdW5jdGlvbiwgdm9pZCosIGNvbnN0IGNoYXIqIHRocmVhZE5h
bWUpOwogCkBAIC05MywxMSArNzYsNiBAQCBUaHJlYWRJZGVudGlmaWVyIGNyZWF0ZVRocmVhZElu
dGVybmFsKFRocmVhZEZ1bmN0aW9uLCB2b2lkKiwgY29uc3QgY2hhciogdGhyZWFkTgogLy8gSGVs
cGZ1bCBmb3IgcGxhdGZvcm1zIHdoZXJlIHRoZSB0aHJlYWQgbmFtZSBtdXN0IGJlIHNldCBmcm9t
IHdpdGhpbiB0aGUgdGhyZWFkLgogdm9pZCBpbml0aWFsaXplQ3VycmVudFRocmVhZEludGVybmFs
KGNvbnN0IGNoYXIqIHRocmVhZE5hbWUpOwogCi1XVEZfRVhQT1JUX1BSSVZBVEUgVGhyZWFkSWRl
bnRpZmllciBjdXJyZW50VGhyZWFkKCk7Ci1XVEZfRVhQT1JUX1BSSVZBVEUgdm9pZCBjaGFuZ2VU
aHJlYWRQcmlvcml0eShUaHJlYWRJZGVudGlmaWVyLCBpbnQpOwotV1RGX0VYUE9SVF9QUklWQVRF
IGludCB3YWl0Rm9yVGhyZWFkQ29tcGxldGlvbihUaHJlYWRJZGVudGlmaWVyKTsKLVdURl9FWFBP
UlRfUFJJVkFURSB2b2lkIGRldGFjaFRocmVhZChUaHJlYWRJZGVudGlmaWVyKTsKLQogfSAvLyBu
YW1lc3BhY2UgV1RGCiAKIHVzaW5nIFdURjo6VGhyZWFkSWRlbnRpZmllcjsKZGlmZiAtLWdpdCBh
L1NvdXJjZS9XZWJDb3JlL0NNYWtlTGlzdHMudHh0IGIvU291cmNlL1dlYkNvcmUvQ01ha2VMaXN0
cy50eHQKaW5kZXggZDhlNmFhYTQ5ZTE3NTc0MTMyOGE0NDYyZDI3OTFjMjc0M2JlYWE1OS4uMTc2
YTBkODI2ZmZhMzQ4MDUyY2YxZWQ4NTRmMjE2MTNjMDU2ZGZmMiAxMDA2NDQKLS0tIGEvU291cmNl
L1dlYkNvcmUvQ01ha2VMaXN0cy50eHQKKysrIGIvU291cmNlL1dlYkNvcmUvQ01ha2VMaXN0cy50
eHQKQEAgLTE1MDUsNyArMTUwNSw2IEBAIHNldChXZWJDb3JlX1NPVVJDRVMKICAgICBmaWxlYXBp
L0ZpbGVSZWFkZXIuY3BwCiAgICAgZmlsZWFwaS9GaWxlUmVhZGVyTG9hZGVyLmNwcAogICAgIGZp
bGVhcGkvRmlsZVJlYWRlclN5bmMuY3BwCi0gICAgZmlsZWFwaS9GaWxlVGhyZWFkLmNwcAogICAg
IGZpbGVhcGkvVGhyZWFkYWJsZUJsb2JSZWdpc3RyeS5jcHAKICAgICBmaWxlYXBpL1dlYktpdEJs
b2JCdWlsZGVyLmNwcAogCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9XZWJDb3JlLnZjeHBy
b2ovV2ViQ29yZS52Y3hwcm9qIGIvU291cmNlL1dlYkNvcmUvV2ViQ29yZS52Y3hwcm9qL1dlYkNv
cmUudmN4cHJvagppbmRleCA1MWE0ZWQ3ZjAxZDgwMDA4OWY1MmViMWY3ZDkxODIyOTg2NzdhZDBi
Li5jNTk1ODRjM2ZiNGVlZmRmYzA2ZWYxZmNmMjQ1N2E2NWRmNjY2M2M0IDEwMDY0NAotLS0gYS9T
b3VyY2UvV2ViQ29yZS9XZWJDb3JlLnZjeHByb2ovV2ViQ29yZS52Y3hwcm9qCisrKyBiL1NvdXJj
ZS9XZWJDb3JlL1dlYkNvcmUudmN4cHJvai9XZWJDb3JlLnZjeHByb2oKQEAgLTE0OTM1LDcgKzE0
OTM1LDYgQEAKICAgICA8Q2xDb21waWxlIEluY2x1ZGU9Ii4uXGZpbGVhcGlcRmlsZVJlYWRlci5j
cHAiIC8+CiAgICAgPENsQ29tcGlsZSBJbmNsdWRlPSIuLlxmaWxlYXBpXEZpbGVSZWFkZXJMb2Fk
ZXIuY3BwIiAvPgogICAgIDxDbENvbXBpbGUgSW5jbHVkZT0iLi5cZmlsZWFwaVxGaWxlUmVhZGVy
U3luYy5jcHAiIC8+Ci0gICAgPENsQ29tcGlsZSBJbmNsdWRlPSIuLlxmaWxlYXBpXEZpbGVUaHJl
YWQuY3BwIiAvPgogICAgIDxDbENvbXBpbGUgSW5jbHVkZT0iLi5caHRtbFxGb3JtQXNzb2NpYXRl
ZEVsZW1lbnQuY3BwIiAvPgogICAgIDxDbENvbXBpbGUgSW5jbHVkZT0iLi5caHRtbFxGb3JtQ29u
dHJvbGxlci5jcHAiIC8+CiAgICAgPENsQ29tcGlsZSBJbmNsdWRlPSIuLlxodG1sXEZvcm1EYXRh
TGlzdC5jcHAiIC8+CkBAIC0yMDcxNCw3ICsyMDcxMyw2IEBACiAgICAgPENsSW5jbHVkZSBJbmNs
dWRlPSIuLlxmaWxlYXBpXEZpbGVSZWFkZXJMb2FkZXIuaCIgLz4KICAgICA8Q2xJbmNsdWRlIElu
Y2x1ZGU9Ii4uXGZpbGVhcGlcRmlsZVJlYWRlckxvYWRlckNsaWVudC5oIiAvPgogICAgIDxDbElu
Y2x1ZGUgSW5jbHVkZT0iLi5cZmlsZWFwaVxGaWxlUmVhZGVyU3luYy5oIiAvPgotICAgIDxDbElu
Y2x1ZGUgSW5jbHVkZT0iLi5cZmlsZWFwaVxGaWxlVGhyZWFkLmgiIC8+CiAgICAgPENsSW5jbHVk
ZSBJbmNsdWRlPSIuLlxodG1sXEZvcm1Bc3NvY2lhdGVkRWxlbWVudC5oIiAvPgogICAgIDxDbElu
Y2x1ZGUgSW5jbHVkZT0iLi5caHRtbFxGb3JtQ29udHJvbGxlci5oIiAvPgogICAgIDxDbEluY2x1
ZGUgSW5jbHVkZT0iLi5caHRtbFxGb3JtRGF0YUxpc3QuaCIgLz4KZGlmZiAtLWdpdCBhL1NvdXJj
ZS9XZWJDb3JlL1dlYkNvcmUudmN4cHJvai9XZWJDb3JlLnZjeHByb2ouZmlsdGVycyBiL1NvdXJj
ZS9XZWJDb3JlL1dlYkNvcmUudmN4cHJvai9XZWJDb3JlLnZjeHByb2ouZmlsdGVycwppbmRleCA0
NjhmYTVlNTJmNzc1N2IyZmIzODJiNzAzY2IxZDgwZmZjYzQxYmI4Li45YjA2YTE1ZjE3NzNhYWM4
YzllZDVjYTk0MmQwYzkzNTJkYzM5ZDNkIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9XZWJD
b3JlLnZjeHByb2ovV2ViQ29yZS52Y3hwcm9qLmZpbHRlcnMKKysrIGIvU291cmNlL1dlYkNvcmUv
V2ViQ29yZS52Y3hwcm9qL1dlYkNvcmUudmN4cHJvai5maWx0ZXJzCkBAIC0zNzE3LDkgKzM3MTcs
NiBAQAogICAgIDxDbENvbXBpbGUgSW5jbHVkZT0iLi5cZmlsZWFwaVxGaWxlUmVhZGVyU3luYy5j
cHAiPgogICAgICAgPEZpbHRlcj5odG1sPC9GaWx0ZXI+CiAgICAgPC9DbENvbXBpbGU+Ci0gICAg
PENsQ29tcGlsZSBJbmNsdWRlPSIuLlxmaWxlYXBpXEZpbGVUaHJlYWQuY3BwIj4KLSAgICAgIDxG
aWx0ZXI+aHRtbDwvRmlsdGVyPgotICAgIDwvQ2xDb21waWxlPgogICAgIDxDbENvbXBpbGUgSW5j
bHVkZT0iLi5caHRtbFxGb3JtQXNzb2NpYXRlZEVsZW1lbnQuY3BwIj4KICAgICAgIDxGaWx0ZXI+
aHRtbDwvRmlsdGVyPgogICAgIDwvQ2xDb21waWxlPgpAQCAtMTA4NjksOSArMTA4NjYsNiBAQAog
ICAgIDxDbEluY2x1ZGUgSW5jbHVkZT0iLi5cZmlsZWFwaVxGaWxlUmVhZGVyU3luYy5oIj4KICAg
ICAgIDxGaWx0ZXI+aHRtbDwvRmlsdGVyPgogICAgIDwvQ2xJbmNsdWRlPgotICAgIDxDbEluY2x1
ZGUgSW5jbHVkZT0iLi5cZmlsZWFwaVxGaWxlVGhyZWFkLmgiPgotICAgICAgPEZpbHRlcj5odG1s
PC9GaWx0ZXI+Ci0gICAgPC9DbEluY2x1ZGU+CiAgICAgPENsSW5jbHVkZSBJbmNsdWRlPSIuLlxo
dG1sXEZvcm1Bc3NvY2lhdGVkRWxlbWVudC5oIj4KICAgICAgIDxGaWx0ZXI+aHRtbDwvRmlsdGVy
PgogICAgIDwvQ2xJbmNsdWRlPgpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvV2ViQ29yZS54
Y29kZXByb2ovcHJvamVjdC5wYnhwcm9qIGIvU291cmNlL1dlYkNvcmUvV2ViQ29yZS54Y29kZXBy
b2ovcHJvamVjdC5wYnhwcm9qCmluZGV4IDQ0MDVkYmU1ZjI5YzFhMTllZGNiYzljNzJlMzhkNTIx
NDZkZmMzZTEuLmYzZWQ0MjdiMGViNDEwMzk4MWQxNmI0ZWVlNjUzY2M2YzQxM2FiOWQgMTAwNjQ0
Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL1dlYkNvcmUueGNvZGVwcm9qL3Byb2plY3QucGJ4cHJvagor
KysgYi9Tb3VyY2UvV2ViQ29yZS9XZWJDb3JlLnhjb2RlcHJvai9wcm9qZWN0LnBieHByb2oKQEAg
LTM0NzUsOCArMzQ3NSw2IEBACiAJCTk3NkQ2Qzg2MTIyQjhBM0QwMDFGRDFGNyAvKiBGaWxlTGlz
dC5oIGluIEhlYWRlcnMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gOTc2RDZD
NjcxMjJCOEEzRDAwMUZEMUY3IC8qIEZpbGVMaXN0LmggKi87IH07CiAJCTk3NkQ2Qzg4MTIyQjhB
M0QwMDFGRDFGNyAvKiBGaWxlUmVhZGVyLmNwcCBpbiBTb3VyY2VzICovID0ge2lzYSA9IFBCWEJ1
aWxkRmlsZTsgZmlsZVJlZiA9IDk3NkQ2QzY5MTIyQjhBM0QwMDFGRDFGNyAvKiBGaWxlUmVhZGVy
LmNwcCAqLzsgfTsKIAkJOTc2RDZDODkxMjJCOEEzRDAwMUZEMUY3IC8qIEZpbGVSZWFkZXIuaCBp
biBIZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDk3NkQ2QzZBMTIy
QjhBM0QwMDFGRDFGNyAvKiBGaWxlUmVhZGVyLmggKi87IH07Ci0JCTk3NkQ2QzhEMTIyQjhBM0Qw
MDFGRDFGNyAvKiBGaWxlVGhyZWFkLmNwcCBpbiBTb3VyY2VzICovID0ge2lzYSA9IFBCWEJ1aWxk
RmlsZTsgZmlsZVJlZiA9IDk3NkQ2QzZFMTIyQjhBM0QwMDFGRDFGNyAvKiBGaWxlVGhyZWFkLmNw
cCAqLzsgfTsKLQkJOTc2RDZDOEUxMjJCOEEzRDAwMUZEMUY3IC8qIEZpbGVUaHJlYWQuaCBpbiBI
ZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDk3NkQ2QzZGMTIyQjhB
M0QwMDFGRDFGNyAvKiBGaWxlVGhyZWFkLmggKi87IH07CiAJCTk3NkQ2Qzk0MTIyQjhBM0QwMDFG
RDFGNyAvKiBUaHJlYWRhYmxlQmxvYlJlZ2lzdHJ5LmNwcCBpbiBTb3VyY2VzICovID0ge2lzYSA9
IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDk3NkQ2Qzc1MTIyQjhBM0QwMDFGRDFGNyAvKiBUaHJl
YWRhYmxlQmxvYlJlZ2lzdHJ5LmNwcCAqLzsgfTsKIAkJOTc2RDZDOTUxMjJCOEEzRDAwMUZEMUY3
IC8qIFRocmVhZGFibGVCbG9iUmVnaXN0cnkuaCBpbiBIZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1
aWxkRmlsZTsgZmlsZVJlZiA9IDk3NkQ2Qzc2MTIyQjhBM0QwMDFGRDFGNyAvKiBUaHJlYWRhYmxl
QmxvYlJlZ2lzdHJ5LmggKi87IH07CiAJCTk3NkYzNkVBMTQ2ODYyMjUwMDVFOTNCNCAvKiBTZWN1
cml0eUNvbnRleHQuY3BwIGluIFNvdXJjZXMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxl
UmVmID0gOTc2RjM2RTgxNDY4NjIyNTAwNUU5M0I0IC8qIFNlY3VyaXR5Q29udGV4dC5jcHAgKi87
IH07CkBAIC0xMDY0MSw4ICsxMDYzOSw2IEBACiAJCTk3NkQ2QzY3MTIyQjhBM0QwMDFGRDFGNyAv
KiBGaWxlTGlzdC5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9
IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7IG5hbWUgPSBGaWxlTGlzdC5o
OyBwYXRoID0gZmlsZWFwaS9GaWxlTGlzdC5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9Owog
CQk5NzZENkM2OTEyMkI4QTNEMDAxRkQxRjcgLyogRmlsZVJlYWRlci5jcHAgKi8gPSB7aXNhID0g
UEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBz
b3VyY2Vjb2RlLmNwcC5jcHA7IG5hbWUgPSBGaWxlUmVhZGVyLmNwcDsgcGF0aCA9IGZpbGVhcGkv
RmlsZVJlYWRlci5jcHA7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CiAJCTk3NkQ2QzZBMTIy
QjhBM0QwMDFGRDFGNyAvKiBGaWxlUmVhZGVyLmggKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5j
ZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsg
bmFtZSA9IEZpbGVSZWFkZXIuaDsgcGF0aCA9IGZpbGVhcGkvRmlsZVJlYWRlci5oOyBzb3VyY2VU
cmVlID0gIjxncm91cD4iOyB9OwotCQk5NzZENkM2RTEyMkI4QTNEMDAxRkQxRjcgLyogRmlsZVRo
cmVhZC5jcHAgKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsg
bGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmNwcC5jcHA7IG5hbWUgPSBGaWxlVGhyZWFk
LmNwcDsgcGF0aCA9IGZpbGVhcGkvRmlsZVRocmVhZC5jcHA7IHNvdXJjZVRyZWUgPSAiPGdyb3Vw
PiI7IH07Ci0JCTk3NkQ2QzZGMTIyQjhBM0QwMDFGRDFGNyAvKiBGaWxlVGhyZWFkLmggKi8gPSB7
aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5
cGUgPSBzb3VyY2Vjb2RlLmMuaDsgbmFtZSA9IEZpbGVUaHJlYWQuaDsgcGF0aCA9IGZpbGVhcGkv
RmlsZVRocmVhZC5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwogCQk5NzZENkM3NTEyMkI4
QTNEMDAxRkQxRjcgLyogVGhyZWFkYWJsZUJsb2JSZWdpc3RyeS5jcHAgKi8gPSB7aXNhID0gUEJY
RmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3Vy
Y2Vjb2RlLmNwcC5jcHA7IG5hbWUgPSBUaHJlYWRhYmxlQmxvYlJlZ2lzdHJ5LmNwcDsgcGF0aCA9
IGZpbGVhcGkvVGhyZWFkYWJsZUJsb2JSZWdpc3RyeS5jcHA7IHNvdXJjZVRyZWUgPSAiPGdyb3Vw
PiI7IH07CiAJCTk3NkQ2Qzc2MTIyQjhBM0QwMDFGRDFGNyAvKiBUaHJlYWRhYmxlQmxvYlJlZ2lz
dHJ5LmggKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFz
dEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsgbmFtZSA9IFRocmVhZGFibGVCbG9iUmVn
aXN0cnkuaDsgcGF0aCA9IGZpbGVhcGkvVGhyZWFkYWJsZUJsb2JSZWdpc3RyeS5oOyBzb3VyY2VU
cmVlID0gIjxncm91cD4iOyB9OwogCQk5NzZGMzZFODE0Njg2MjI1MDA1RTkzQjQgLyogU2VjdXJp
dHlDb250ZXh0LmNwcCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2Rpbmcg
PSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuY3BwLmNwcDsgcGF0aCA9IFNlY3Vy
aXR5Q29udGV4dC5jcHA7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CkBAIC0xODIyOSw4ICsx
ODIyNSw2IEBACiAJCQkJMkVERjM2OUExMjJDOTRCNDAwMkY3RDRFIC8qIEZpbGVSZWFkZXJTeW5j
LmNwcCAqLywKIAkJCQkyRURGMzY5QjEyMkM5NEI0MDAyRjdENEUgLyogRmlsZVJlYWRlclN5bmMu
aCAqLywKIAkJCQlFMUFCMUVCRDE0RTlFM0E4MDA0NDlFMTMgLyogRmlsZVJlYWRlclN5bmMuaWRs
ICovLAotCQkJCTk3NkQ2QzZFMTIyQjhBM0QwMDFGRDFGNyAvKiBGaWxlVGhyZWFkLmNwcCAqLywK
LQkJCQk5NzZENkM2RjEyMkI4QTNEMDAxRkQxRjcgLyogRmlsZVRocmVhZC5oICovLAogCQkJCTk3
NkQ2Qzc1MTIyQjhBM0QwMDFGRDFGNyAvKiBUaHJlYWRhYmxlQmxvYlJlZ2lzdHJ5LmNwcCAqLywK
IAkJCQk5NzZENkM3NjEyMkI4QTNEMDAxRkQxRjcgLyogVGhyZWFkYWJsZUJsb2JSZWdpc3RyeS5o
ICovLAogCQkJCTk3NkQ2QzVDMTIyQjhBM0QwMDFGRDFGNyAvKiBXZWJLaXRCbG9iQnVpbGRlci5j
cHAgKi8sCkBAIC0yNDMyNCw3ICsyNDMxOCw2IEBACiAJCQkJMkVGMUJGRjkxMjFDQjBDRTAwQzI3
NjI3IC8qIEZpbGVTdHJlYW1DbGllbnQuaCBpbiBIZWFkZXJzICovLAogCQkJCTUxNEIzRjczMEM3
MjIwNDcwMDA1MzBERiAvKiBGaWxlU3lzdGVtLmggaW4gSGVhZGVycyAqLywKIAkJCQkyNkMxN0Ez
RTE0OTFEMkQ0MDBEMTJCQTIgLyogRmlsZVN5c3RlbUlPUy5oIGluIEhlYWRlcnMgKi8sCi0JCQkJ
OTc2RDZDOEUxMjJCOEEzRDAwMUZEMUY3IC8qIEZpbGVUaHJlYWQuaCBpbiBIZWFkZXJzICovLAog
CQkJCUJDNUVCNjlGMEU4MURBRUIwMEIyNTk2NSAvKiBGaWxsTGF5ZXIuaCBpbiBIZWFkZXJzICov
LAogCQkJCTg0NUU3MkY4MEZEMjYxRUUwMEE4N0Q3OSAvKiBGaWx0ZXIuaCBpbiBIZWFkZXJzICov
LAogCQkJCTA4QzkyNTFBMEZDQzdDNEEwMDQ4MERFQyAvKiBGaWx0ZXJFZmZlY3QuaCBpbiBIZWFk
ZXJzICovLApAQCAtMjc4MjAsNyArMjc4MTMsNiBAQAogCQkJCTI2QzE3QTNGMTQ5MUQyRDQwMEQx
MkJBMiAvKiBGaWxlU3lzdGVtSU9TLm1tIGluIFNvdXJjZXMgKi8sCiAJCQkJNTE0QjNGNzYwQzcy
MjA1NTAwMDUzMERGIC8qIEZpbGVTeXN0ZW1NYWMubW0gaW4gU291cmNlcyAqLywKIAkJCQk1MTYw
MzAwQjBDQzQyNTEyMDBDOEFDMjUgLyogRmlsZVN5c3RlbVBPU0lYLmNwcCBpbiBTb3VyY2VzICov
LAotCQkJCTk3NkQ2QzhEMTIyQjhBM0QwMDFGRDFGNyAvKiBGaWxlVGhyZWFkLmNwcCBpbiBTb3Vy
Y2VzICovLAogCQkJCUJDNUVCNjlFMEU4MURBRUIwMEIyNTk2NSAvKiBGaWxsTGF5ZXIuY3BwIGlu
IFNvdXJjZXMgKi8sCiAJCQkJMDhDOTI1MTkwRkNDN0M0QTAwNDgwREVDIC8qIEZpbHRlckVmZmVj
dC5jcHAgaW4gU291cmNlcyAqLywKIAkJCQkzMTMxM0Y2NTE0NDNCMzVGMDA2RTJBOTAgLyogRmls
dGVyRWZmZWN0UmVuZGVyZXIuY3BwIGluIFNvdXJjZXMgKi8sCmRpZmYgLS1naXQgYS9Tb3VyY2Uv
V2ViQ29yZS9iaW5kaW5ncy9nZW5lcmljL0FjdGl2ZURPTUNhbGxiYWNrLmNwcCBiL1NvdXJjZS9X
ZWJDb3JlL2JpbmRpbmdzL2dlbmVyaWMvQWN0aXZlRE9NQ2FsbGJhY2suY3BwCmluZGV4IDgxYTEw
YzE0YjJkYjVmMTcxZGMwNjg4YzgwNjFlNzNkMDFmYTY5Y2YuLjViMTc0MWUxMzE4M2IwZjZmZWE4
MTI2Y2MyOTFjZGZmNDkyMDlmMjcgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL2JpbmRpbmdz
L2dlbmVyaWMvQWN0aXZlRE9NQ2FsbGJhY2suY3BwCisrKyBiL1NvdXJjZS9XZWJDb3JlL2JpbmRp
bmdzL2dlbmVyaWMvQWN0aXZlRE9NQ2FsbGJhY2suY3BwCkBAIC0zMSw5ICszMSw3IEBACiAjaW5j
bHVkZSAiY29uZmlnLmgiCiAjaW5jbHVkZSAiQWN0aXZlRE9NQ2FsbGJhY2suaCIKIAotI2luY2x1
ZGUgIkFjdGl2ZURPTU9iamVjdC5oIgogI2luY2x1ZGUgIlNjcmlwdEV4ZWN1dGlvbkNvbnRleHQu
aCIKLSNpbmNsdWRlICJXb3JrZXJHbG9iYWxTY29wZS5oIgogCiBuYW1lc3BhY2UgV2ViQ29yZSB7
CiAKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL2RvbS9BY3RpdmVET01PYmplY3QuY3BwIGIv
U291cmNlL1dlYkNvcmUvZG9tL0FjdGl2ZURPTU9iamVjdC5jcHAKaW5kZXggMjk5YTFhMzAwZTQ2
NGEzYTZiNTllZjYxODE0MDRiNmFhOGIxZWVkYi4uYzMyNjcxYjEwMTgwZjg0MGZlMTJhM2FmMDc1
YzExZjkyOWU4MTJkNSAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvZG9tL0FjdGl2ZURPTU9i
amVjdC5jcHAKKysrIGIvU291cmNlL1dlYkNvcmUvZG9tL0FjdGl2ZURPTU9iamVjdC5jcHAKQEAg
LTI4LDggKzI4LDYgQEAKICNpbmNsdWRlICJBY3RpdmVET01PYmplY3QuaCIKIAogI2luY2x1ZGUg
IlNjcmlwdEV4ZWN1dGlvbkNvbnRleHQuaCIKLSNpbmNsdWRlICJXb3JrZXJHbG9iYWxTY29wZS5o
IgotI2luY2x1ZGUgIldvcmtlclRocmVhZC5oIgogCiBuYW1lc3BhY2UgV2ViQ29yZSB7CiAKZGlm
ZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL2ZpbGVhcGkvQXN5bmNGaWxlU3RyZWFtLmNwcCBiL1Nv
dXJjZS9XZWJDb3JlL2ZpbGVhcGkvQXN5bmNGaWxlU3RyZWFtLmNwcAppbmRleCA1YTM5MWY4N2Nl
ZTE0Y2U2NzE4ODNiNDAzMTA3MjIyMGEyNDk2MTdhLi44NzBjNDA5NGQ0ZmVkYzQ0MmU1NDNiMTc5
YTIzMTU2NDAxYTNlNWNkIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9maWxlYXBpL0FzeW5j
RmlsZVN0cmVhbS5jcHAKKysrIGIvU291cmNlL1dlYkNvcmUvZmlsZWFwaS9Bc3luY0ZpbGVTdHJl
YW0uY3BwCkBAIC0xLDYgKzEsNiBAQAogLyoKICAqIENvcHlyaWdodCAoQykgMjAxMCBHb29nbGUg
SW5jLiAgQWxsIHJpZ2h0cyByZXNlcnZlZC4KLSAqIENvcHlyaWdodCAoQykgMjAxMiBBcHBsZSBJ
bmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKiBDb3B5cmlnaHQgKEMpIDIwMTIsIDIwMTQgQXBw
bGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgogICoKICAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1
c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAogICogbW9kaWZp
Y2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRp
b25zIGFyZQpAQCAtMzAsMTYyICszMCwxODYgQEAKICAqLwogCiAjaW5jbHVkZSAiY29uZmlnLmgi
Ci0KICNpbmNsdWRlICJBc3luY0ZpbGVTdHJlYW0uaCIKIAotI2luY2x1ZGUgIkJsb2IuaCIKICNp
bmNsdWRlICJGaWxlU3RyZWFtLmgiCiAjaW5jbHVkZSAiRmlsZVN0cmVhbUNsaWVudC5oIgotI2lu
Y2x1ZGUgIkZpbGVUaHJlYWQuaCIKKyNpbmNsdWRlICJVUkwuaCIKKyNpbmNsdWRlIDx3dGYvQXV0
b2RyYWluZWRQb29sLmg+CiAjaW5jbHVkZSA8d3RmL01haW5UaHJlYWQuaD4KLSNpbmNsdWRlIDx3
dGYvdGV4dC9XVEZTdHJpbmcuaD4KLQotI2lmIFBMQVRGT1JNKElPUykKLSNpbmNsdWRlICJXZWJD
b3JlVGhyZWFkLmgiCi0jZW5kaWYKKyNpbmNsdWRlIDx3dGYvTWVzc2FnZVF1ZXVlLmg+CisjaW5j
bHVkZSA8d3RmL05ldmVyRGVzdHJveWVkLmg+CiAKIG5hbWVzcGFjZSBXZWJDb3JlIHsKIAotc3Rh
dGljIFBhc3NSZWZQdHI8RmlsZVRocmVhZD4gY3JlYXRlRmlsZVRocmVhZCgpCi17Ci0gICAgUmVm
UHRyPEZpbGVUaHJlYWQ+IHRocmVhZCA9IEZpbGVUaHJlYWQ6OmNyZWF0ZSgpOwotICAgIGlmICgh
dGhyZWFkLT5zdGFydCgpKQotICAgICAgICByZXR1cm4gMDsKLSAgICByZXR1cm4gdGhyZWFkLnJl
bGVhc2UoKTsKLX0KK3N0cnVjdCBBc3luY0ZpbGVTdHJlYW06OkludGVybmFscyB7CisgICAgZXhw
bGljaXQgSW50ZXJuYWxzKEZpbGVTdHJlYW1DbGllbnQmKTsKKworICAgIEZpbGVTdHJlYW0gc3Ry
ZWFtOworICAgIEZpbGVTdHJlYW1DbGllbnQmIGNsaWVudDsKKyNpZiAhQ09NUElMRVIoTVNWQykK
KyAgICBzdGQ6OmF0b21pY19ib29sIGRlc3Ryb3llZCB7IGZhbHNlIH07CisjZWxzZQorICAgIHN0
ZDo6YXRvbWljX2Jvb2wgZGVzdHJveWVkOworI2VuZGlmCit9OwogCi1zdGF0aWMgRmlsZVRocmVh
ZCogZmlsZVRocmVhZCgpCitpbmxpbmUgQXN5bmNGaWxlU3RyZWFtOjpJbnRlcm5hbHM6OkludGVy
bmFscyhGaWxlU3RyZWFtQ2xpZW50JiBjbGllbnQpCisgICAgOiBjbGllbnQoY2xpZW50KQogewot
ICAgIEFTU0VSVChpc01haW5UaHJlYWQoKSk7Ci0gICAgc3RhdGljIEZpbGVUaHJlYWQqIHRocmVh
ZCA9IGNyZWF0ZUZpbGVUaHJlYWQoKS5sZWFrUmVmKCk7Ci0gICAgcmV0dXJuIHRocmVhZDsKKyNp
ZiBDT01QSUxFUihNU1ZDKQorICAgIC8vIFdvcmsgYXJvdW5kIGEgdGhhdCBwcmV2ZW50cyB0aGUg
ZGVmYXVsdCB2YWx1ZSBhYm92ZSBmcm9tIGNvbXBpbGluZy4KKyAgICBhdG9taWNfaW5pdCgmZGVz
dHJveWVkLCBmYWxzZSk7CisjZW5kaWYKIH0KIAotaW5saW5lIEFzeW5jRmlsZVN0cmVhbTo6QXN5
bmNGaWxlU3RyZWFtKEZpbGVTdHJlYW1DbGllbnQqIGNsaWVudCkKLSAgICA6IG1fc3RyZWFtKEZp
bGVTdHJlYW06OmNyZWF0ZSgpKQotICAgICwgbV9jbGllbnQoY2xpZW50KQorc3RhdGljIHZvaWQg
Y2FsbE9uRmlsZVRocmVhZChzdGQ6OmZ1bmN0aW9uPHZvaWQoKT4mJiBmdW5jdGlvbikKIHsKICAg
ICBBU1NFUlQoaXNNYWluVGhyZWFkKCkpOwotfQorICAgIEFTU0VSVChmdW5jdGlvbik7CiAKLVBh
c3NSZWZQdHI8QXN5bmNGaWxlU3RyZWFtPiBBc3luY0ZpbGVTdHJlYW06OmNyZWF0ZShGaWxlU3Ry
ZWFtQ2xpZW50KiBjbGllbnQpCi17Ci0gICAgUmVmUHRyPEFzeW5jRmlsZVN0cmVhbT4gcHJveHkg
PSBhZG9wdFJlZihuZXcgQXN5bmNGaWxlU3RyZWFtKGNsaWVudCkpOworICAgIHN0YXRpYyBOZXZl
ckRlc3Ryb3llZDxNZXNzYWdlUXVldWU8c3RkOjpmdW5jdGlvbjx2b2lkKCk+Pj4gcXVldWU7CiAK
LSAgICAvLyBIb2xkIGEgcmVmZXJlbmNlIHNvIHRoYXQgdGhlIGluc3RhbmNlIHdpbGwgbm90IGdl
dCBkZWxldGVkIHdoaWxlIHRoZXJlIGFyZSB0YXNrcyBvbiB0aGUgZmlsZSB0aHJlYWQuCi0gICAg
Ly8gVGhpcyBpcyBiYWxhbmNlZCBieSB0aGUgZGVyZWYgaW4gZGVyZWZQcm94eU9uQ29udGV4dCBi
ZWxvdy4KLSAgICBwcm94eS0+cmVmKCk7CisgICAgc3RhdGljIHN0ZDo6b25jZV9mbGFnIGNyZWF0
ZUZpbGVUaHJlYWRPbmNlOworICAgIHN0ZDo6Y2FsbF9vbmNlKGNyZWF0ZUZpbGVUaHJlYWRPbmNl
LCBbXSB7CisgICAgICAgIGNyZWF0ZVRocmVhZCgiV2ViQ29yZTogQXN5bmNGaWxlU3RyZWFtIiwg
W10geworICAgICAgICAgICAgZm9yICg7OykgeworICAgICAgICAgICAgICAgIEF1dG9kcmFpbmVk
UG9vbCBwb29sOwogCi0gICAgQXN5bmNGaWxlU3RyZWFtKiBwcm94eVB0ciA9IHByb3h5LmdldCgp
OwotICAgIGZpbGVUaHJlYWQoKS0+cG9zdFRhc2soeyBwcm94eVB0ciwgWz1dIHsKLSAgICAgICAg
Ly8gRklYTUU6IEl0IGlzIG5vdCBjb3JyZWN0IHRvIGNoZWNrIG1fY2xpZW50IGZyb20gYSBzZWNv
bmRhcnkgdGhyZWFkIC0gc3RvcCgpIGNvdWxkIGJlIHJhY2luZyB3aXRoIHRoaXMgY2hlY2suCi0g
ICAgICAgIGlmICghcHJveHlQdHItPmNsaWVudCgpKQotICAgICAgICAgICAgcmV0dXJuOworICAg
ICAgICAgICAgICAgIGF1dG8gZnVuY3Rpb24gPSBxdWV1ZS5nZXQoKS53YWl0Rm9yTWVzc2FnZSgp
OwogCi0gICAgICAgIHByb3h5UHRyLT5tX3N0cmVhbS0+c3RhcnQoKTsKLSAgICAgICAgY2FsbE9u
TWFpblRocmVhZChbcHJveHlQdHJdIHsKLSAgICAgICAgICAgIGlmIChwcm94eVB0ci0+Y2xpZW50
KCkpCi0gICAgICAgICAgICAgICAgcHJveHlQdHItPmNsaWVudCgpLT5kaWRTdGFydCgpOworICAg
ICAgICAgICAgICAgIC8vIFRoaXMgY2FuIG5ldmVyIGJlIG51bGwgYmVjYXVzZSB3ZSBuZXZlciBr
aWxsIHRoZSBNZXNzYWdlUXVldWUuCisgICAgICAgICAgICAgICAgQVNTRVJUKGZ1bmN0aW9uKTsK
KworICAgICAgICAgICAgICAgIC8vIFRoaXMgY2FuIGJldmVyIGJlIG51bGwgYmVjYXVzZSB3ZSBu
ZXZlciBxdWV1ZSBhIGZ1bmN0aW9uIHRoYXQgaXMgbnVsbC4KKyAgICAgICAgICAgICAgICBBU1NF
UlQoKmZ1bmN0aW9uKTsKKworICAgICAgICAgICAgICAgICgqZnVuY3Rpb24pKCk7CisgICAgICAg
ICAgICB9CiAgICAgICAgIH0pOwotICAgIH0gfSk7CisgICAgfSk7CisKKyAgICBxdWV1ZS5nZXQo
KS5hcHBlbmQoc3RkOjptYWtlX3VuaXF1ZTxzdGQ6OmZ1bmN0aW9uPHZvaWQoKT4+KFdURjo6bW92
ZShmdW5jdGlvbikpKTsKK30KIAotICAgIHJldHVybiBwcm94eS5yZWxlYXNlKCk7CitBc3luY0Zp
bGVTdHJlYW06OkFzeW5jRmlsZVN0cmVhbShGaWxlU3RyZWFtQ2xpZW50JiBjbGllbnQpCisgICAg
OiBtX2ludGVybmFscyhzdGQ6Om1ha2VfdW5pcXVlPEludGVybmFscz4oY2xpZW50KSkKK3sKKyAg
ICBBU1NFUlQoaXNNYWluVGhyZWFkKCkpOwogfQogCiBBc3luY0ZpbGVTdHJlYW06On5Bc3luY0Zp
bGVTdHJlYW0oKQogeworICAgIEFTU0VSVChpc01haW5UaHJlYWQoKSk7CisKKyAgICAvLyBSZWxl
YXNlIHNvIHRoYXQgd2UgY2FuIGNvbnRyb2wgdGhlIHRpbWluZyBvZiBkZWxldGlvbiBiZWxvdy4K
KyAgICBhdXRvJiBpbnRlcm5hbHMgPSAqbV9pbnRlcm5hbHMucmVsZWFzZSgpOworCisgICAgLy8g
U2V0IGZsYWcgdG8gcHJldmVudCBjbGllbnQgY2FsbGJhY2tzIGFuZCBhbHNvIHByZXZlbnQgcXVl
dWVkIG9wZXJhdGlvbnMgZnJvbSBzdGFydGluZy4KKyAgICBpbnRlcm5hbHMuZGVzdHJveWVkID0g
dHJ1ZTsKKworICAgIC8vIENhbGwgdGhyb3VnaCBmaWxlIHRocmVhZCBhbmQgYmFjayB0byBtYWlu
IHRocmVhZCB0byBtYWtlIHN1cmUgZGVsZXRpb24gaGFwcGVucworICAgIC8vIGFmdGVyIGFsbCBm
aWxlIHRocmVhZCBmdW5jdGlvbnMgYW5kIGFsbCBtYWluIHRocmVhZCBmdW5jdGlvbnMgY2FsbGVk
IGZyb20gdGhlbS4KKyAgICBjYWxsT25GaWxlVGhyZWFkKFsmaW50ZXJuYWxzXSB7CisgICAgICAg
IGNhbGxPbk1haW5UaHJlYWQoWyZpbnRlcm5hbHNdIHsKKyAgICAgICAgICAgIGRlbGV0ZSAmaW50
ZXJuYWxzOworICAgICAgICB9KTsKKyAgICB9KTsKIH0KIAotdm9pZCBBc3luY0ZpbGVTdHJlYW06
OnN0b3AoKQordm9pZCBBc3luY0ZpbGVTdHJlYW06OnBlcmZvcm0oc3RkOjpmdW5jdGlvbjxzdGQ6
OmZ1bmN0aW9uPHZvaWQoRmlsZVN0cmVhbUNsaWVudCYpPihGaWxlU3RyZWFtJik+IG9wZXJhdGlv
bikKIHsKLSAgICAvLyBDbGVhciB0aGUgY2xpZW50IHNvIHRoYXQgd2Ugd29uJ3QgYmUgaW52b2tp
bmcgY2FsbGJhY2tzIG9uIHRoZSBjbGllbnQuCi0gICAgc2V0Q2xpZW50KDApOwotCi0gICAgZmls
ZVRocmVhZCgpLT51bnNjaGVkdWxlVGFza3MobV9zdHJlYW0uZ2V0KCkpOwotICAgIGZpbGVUaHJl
YWQoKS0+cG9zdFRhc2soeyB0aGlzLCBbdGhpc10gewotICAgICAgICBtX3N0cmVhbS0+c3RvcCgp
OwotICAgICAgICBjYWxsT25NYWluVGhyZWFkKFt0aGlzXSB7Ci0gICAgICAgICAgICBBU1NFUlQo
aGFzT25lUmVmKCkpOwotICAgICAgICAgICAgZGVyZWYoKTsKKyAgICBhdXRvJiBpbnRlcm5hbHMg
PSAqbV9pbnRlcm5hbHM7CisgICAgY2FsbE9uRmlsZVRocmVhZChbJmludGVybmFscywgb3BlcmF0
aW9uXSB7CisgICAgICAgIC8vIERvbid0IGRvIHRoZSBvcGVyYXRpb24gaWYgc3RvcCB3YXMgYWxy
ZWFkeSBjYWxsZWQgb24gdGhlIG1haW4gdGhyZWFkLiBOb3RlIHRoYXQgdGhlcmUgaXMKKyAgICAg
ICAgLy8gYSByYWNlIGhlcmUsIGJ1dCBzaW5jZSBza2lwcGluZyB0aGUgb3BlcmF0aW9uIGlzIGFu
IG9wdGltaXphdGlvbiBpdCdzIE9LIHRoYXQgd2UgY2FuJ3QKKyAgICAgICAgLy8gZ3VhcmFudGVl
IGV4YWN0bHkgd2hpY2ggb3BlcmF0aW9ucyBhcmUgc2tpcHBlZC4gTm90ZSB0aGF0IHRoaXMgaXMg
YWxzbyB0aGUgb25seSByZWFzb24KKyAgICAgICAgLy8gd2UgdXNlIGFuIGF0b21pY19ib29sIHJh
dGhlciB0aGFuIGp1c3QgYSBib29sIGZvciBkZXN0cm95ZWQuCisgICAgICAgIGlmIChpbnRlcm5h
bHMuZGVzdHJveWVkKQorICAgICAgICAgICAgcmV0dXJuOworICAgICAgICBhdXRvIG1haW5UaHJl
YWRXb3JrID0gb3BlcmF0aW9uKGludGVybmFscy5zdHJlYW0pOworICAgICAgICBjYWxsT25NYWlu
VGhyZWFkKFsmaW50ZXJuYWxzLCBtYWluVGhyZWFkV29ya10geworICAgICAgICAgICAgaWYgKGlu
dGVybmFscy5kZXN0cm95ZWQpCisgICAgICAgICAgICAgICAgcmV0dXJuOworICAgICAgICAgICAg
bWFpblRocmVhZFdvcmsoaW50ZXJuYWxzLmNsaWVudCk7CiAgICAgICAgIH0pOwotICAgIH0gfSk7
CisgICAgfSk7CiB9CiAKIHZvaWQgQXN5bmNGaWxlU3RyZWFtOjpnZXRTaXplKGNvbnN0IFN0cmlu
ZyYgcGF0aCwgZG91YmxlIGV4cGVjdGVkTW9kaWZpY2F0aW9uVGltZSkKIHsKLSAgICBTdHJpbmcg
cGF0aENvcHkgPSBwYXRoLmlzb2xhdGVkQ29weSgpOwotICAgIGZpbGVUaHJlYWQoKS0+cG9zdFRh
c2soeyB0aGlzLCBbdGhpcywgcGF0aENvcHksIGV4cGVjdGVkTW9kaWZpY2F0aW9uVGltZV0gewot
ICAgICAgICBsb25nIGxvbmcgc2l6ZSA9IG1fc3RyZWFtLT5nZXRTaXplKHBhdGhDb3B5LCBleHBl
Y3RlZE1vZGlmaWNhdGlvblRpbWUpOwotICAgICAgICBjYWxsT25NYWluVGhyZWFkKFt0aGlzLCBz
aXplXSB7Ci0gICAgICAgICAgICBpZiAoY2xpZW50KCkpCi0gICAgICAgICAgICAgICAgY2xpZW50
KCktPmRpZEdldFNpemUoc2l6ZSk7Ci0gICAgICAgIH0pOwotICAgIH0gfSk7CisgICAgU3RyaW5n
Q2FwdHVyZSBjYXB0dXJlZFBhdGgocGF0aCk7CisgICAgLy8gRklYTUU6IEV4cGxpY2l0IHJldHVy
biB0eXBlIGhlcmUgYW5kIGluIGFsbCB0aGUgb3RoZXIgY2FzZXMgbGlrZSB0aGlzIGJlbG93IGlz
IGEgd29ya2Fyb3VuZCBmb3IgYSBkZWZpY2llbmN5CisgICAgLy8gaW4gdGhlIFdpbmRvd3MgY29t
cGlsZXIgYXQgdGhlIHRpbWUgb2YgdGhpcyB3cml0aW5nLiBDb3VsZCByZW1vdmUgaXQgaWYgdGhh
dCBpcyByZXNvbHZlZC4KKyAgICBwZXJmb3JtKFtjYXB0dXJlZFBhdGgsIGV4cGVjdGVkTW9kaWZp
Y2F0aW9uVGltZV0oRmlsZVN0cmVhbSYgc3RyZWFtKSAtPiBzdGQ6OmZ1bmN0aW9uPHZvaWQoRmls
ZVN0cmVhbUNsaWVudCYpPiB7CisgICAgICAgIGxvbmcgbG9uZyBzaXplID0gc3RyZWFtLmdldFNp
emUoY2FwdHVyZWRQYXRoLnN0cmluZygpLCBleHBlY3RlZE1vZGlmaWNhdGlvblRpbWUpOworICAg
ICAgICByZXR1cm4gW3NpemVdKEZpbGVTdHJlYW1DbGllbnQmIGNsaWVudCkgeworICAgICAgICAg
ICAgY2xpZW50LmRpZEdldFNpemUoc2l6ZSk7CisgICAgICAgIH07CisgICAgfSk7CiB9CiAKIHZv
aWQgQXN5bmNGaWxlU3RyZWFtOjpvcGVuRm9yUmVhZChjb25zdCBTdHJpbmcmIHBhdGgsIGxvbmcg
bG9uZyBvZmZzZXQsIGxvbmcgbG9uZyBsZW5ndGgpCiB7Ci0gICAgU3RyaW5nIHBhdGhDb3B5ID0g
cGF0aC5pc29sYXRlZENvcHkoKTsKLSAgICBmaWxlVGhyZWFkKCktPnBvc3RUYXNrKHsgdGhpcywg
W3RoaXMsIHBhdGhDb3B5LCBvZmZzZXQsIGxlbmd0aF0gewotICAgICAgICBib29sIHN1Y2Nlc3Mg
PSBtX3N0cmVhbS0+b3BlbkZvclJlYWQocGF0aENvcHksIG9mZnNldCwgbGVuZ3RoKTsKLSAgICAg
ICAgY2FsbE9uTWFpblRocmVhZChbdGhpcywgc3VjY2Vzc10gewotICAgICAgICAgICAgaWYgKGNs
aWVudCgpKQotICAgICAgICAgICAgICAgIGNsaWVudCgpLT5kaWRPcGVuKHN1Y2Nlc3MpOwotICAg
ICAgICB9KTsKLSAgICB9IH0pOworICAgIFN0cmluZ0NhcHR1cmUgY2FwdHVyZWRQYXRoKHBhdGgp
OworICAgIC8vIEZJWE1FOiBFeHBsaWNpdCByZXR1cm4gdHlwZSBoZXJlIGlzIGEgd29ya2Fyb3Vu
ZCBmb3IgYSBkZWZpY2llbmN5IGluIHRoZSBXaW5kb3dzIGNvbXBpbGVyIGF0IHRoZSB0aW1lIG9m
IHRoaXMgd3JpdGluZy4KKyAgICBwZXJmb3JtKFtjYXB0dXJlZFBhdGgsIG9mZnNldCwgbGVuZ3Ro
XShGaWxlU3RyZWFtJiBzdHJlYW0pIC0+IHN0ZDo6ZnVuY3Rpb248dm9pZChGaWxlU3RyZWFtQ2xp
ZW50Jik+IHsKKyAgICAgICAgYm9vbCBzdWNjZXNzID0gc3RyZWFtLm9wZW5Gb3JSZWFkKGNhcHR1
cmVkUGF0aC5zdHJpbmcoKSwgb2Zmc2V0LCBsZW5ndGgpOworICAgICAgICByZXR1cm4gW3N1Y2Nl
c3NdKEZpbGVTdHJlYW1DbGllbnQmIGNsaWVudCkgeworICAgICAgICAgICAgY2xpZW50LmRpZE9w
ZW4oc3VjY2Vzcyk7CisgICAgICAgIH07CisgICAgfSk7CiB9CiAKIHZvaWQgQXN5bmNGaWxlU3Ry
ZWFtOjpvcGVuRm9yV3JpdGUoY29uc3QgU3RyaW5nJiBwYXRoKQogewotICAgIFN0cmluZyBwYXRo
Q29weSA9IHBhdGguaXNvbGF0ZWRDb3B5KCk7Ci0gICAgZmlsZVRocmVhZCgpLT5wb3N0VGFzayh7
IHRoaXMsIFt0aGlzLCBwYXRoQ29weV0gewotICAgICAgICBib29sIHN1Y2Nlc3MgPSBtX3N0cmVh
bS0+b3BlbkZvcldyaXRlKHBhdGhDb3B5KTsKLSAgICAgICAgY2FsbE9uTWFpblRocmVhZChbdGhp
cywgc3VjY2Vzc10gewotICAgICAgICAgICAgaWYgKGNsaWVudCgpKQotICAgICAgICAgICAgICAg
IGNsaWVudCgpLT5kaWRPcGVuKHN1Y2Nlc3MpOwotICAgICAgICB9KTsKLSAgICB9IH0pOworICAg
IFN0cmluZ0NhcHR1cmUgY2FwdHVyZWRQYXRoKHBhdGgpOworICAgIHBlcmZvcm0oW2NhcHR1cmVk
UGF0aF0oRmlsZVN0cmVhbSYgc3RyZWFtKSAtPiBzdGQ6OmZ1bmN0aW9uPHZvaWQoRmlsZVN0cmVh
bUNsaWVudCYpPiB7CisgICAgICAgIGJvb2wgc3VjY2VzcyA9IHN0cmVhbS5vcGVuRm9yV3JpdGUo
Y2FwdHVyZWRQYXRoLnN0cmluZygpKTsKKyAgICAgICAgcmV0dXJuIFtzdWNjZXNzXShGaWxlU3Ry
ZWFtQ2xpZW50JiBjbGllbnQpIHsKKyAgICAgICAgICAgIGNsaWVudC5kaWRPcGVuKHN1Y2Nlc3Mp
OworICAgICAgICB9OworICAgIH0pOwogfQogCiB2b2lkIEFzeW5jRmlsZVN0cmVhbTo6Y2xvc2Uo
KQogewotICAgIGZpbGVUaHJlYWQoKS0+cG9zdFRhc2soe3RoaXMsIFt0aGlzXSB7Ci0gICAgICAg
IG1fc3RyZWFtLT5jbG9zZSgpOwotICAgIH0gfSk7CisgICAgYXV0byYgaW50ZXJuYWxzID0gKm1f
aW50ZXJuYWxzOworICAgIGNhbGxPbkZpbGVUaHJlYWQoWyZpbnRlcm5hbHNdIHsKKyAgICAgICAg
aW50ZXJuYWxzLnN0cmVhbS5jbG9zZSgpOworICAgIH0pOwogfQogCiB2b2lkIEFzeW5jRmlsZVN0
cmVhbTo6cmVhZChjaGFyKiBidWZmZXIsIGludCBsZW5ndGgpCiB7Ci0gICAgZmlsZVRocmVhZCgp
LT5wb3N0VGFzayh7IHRoaXMsIFt0aGlzLCBidWZmZXIsIGxlbmd0aF0gewotICAgICAgICBpbnQg
Ynl0ZXNSZWFkID0gbV9zdHJlYW0tPnJlYWQoYnVmZmVyLCBsZW5ndGgpOwotICAgICAgICBjYWxs
T25NYWluVGhyZWFkKFt0aGlzLCBieXRlc1JlYWRdIHsKLSAgICAgICAgICAgIGlmIChjbGllbnQo
KSkKLSAgICAgICAgICAgICAgICBjbGllbnQoKS0+ZGlkUmVhZChieXRlc1JlYWQpOwotICAgICAg
ICB9KTsKLSAgICB9IH0pOworICAgIHBlcmZvcm0oW2J1ZmZlciwgbGVuZ3RoXShGaWxlU3RyZWFt
JiBzdHJlYW0pIC0+IHN0ZDo6ZnVuY3Rpb248dm9pZChGaWxlU3RyZWFtQ2xpZW50Jik+IHsKKyAg
ICAgICAgaW50IGJ5dGVzUmVhZCA9IHN0cmVhbS5yZWFkKGJ1ZmZlciwgbGVuZ3RoKTsKKyAgICAg
ICAgcmV0dXJuIFtieXRlc1JlYWRdKEZpbGVTdHJlYW1DbGllbnQmIGNsaWVudCkgeworICAgICAg
ICAgICAgY2xpZW50LmRpZFJlYWQoYnl0ZXNSZWFkKTsKKyAgICAgICAgfTsKKyAgICB9KTsKIH0K
IAogdm9pZCBBc3luY0ZpbGVTdHJlYW06OndyaXRlKGNvbnN0IFVSTCYgYmxvYlVSTCwgbG9uZyBs
b25nIHBvc2l0aW9uLCBpbnQgbGVuZ3RoKQogewotICAgIFVSTCBibG9iVVJMQ29weSA9IGJsb2JV
UkwuY29weSgpOwotICAgIGZpbGVUaHJlYWQoKS0+cG9zdFRhc2soeyB0aGlzLCBbdGhpcywgYmxv
YlVSTENvcHksIHBvc2l0aW9uLCBsZW5ndGhdIHsKLSAgICAgICAgaW50IGJ5dGVzV3JpdHRlbiA9
IG1fc3RyZWFtLT53cml0ZShibG9iVVJMQ29weSwgcG9zaXRpb24sIGxlbmd0aCk7Ci0gICAgICAg
IGNhbGxPbk1haW5UaHJlYWQoW3RoaXMsIGJ5dGVzV3JpdHRlbl0gewotICAgICAgICAgICAgaWYg
KGNsaWVudCgpKQotICAgICAgICAgICAgICAgIGNsaWVudCgpLT5kaWRXcml0ZShieXRlc1dyaXR0
ZW4pOwotICAgICAgICB9KTsKLSAgICB9IH0pOworICAgIC8vIEZJWE1FOiBXb3VsZCBiZSBtb3Jl
IGVsZWdhbnQgdG8gaGF2ZSBhIFVSTENhcHR1cmUgZm9yIGNhc2VzIGxpa2UgdGhpcyB0byBhdm9p
ZCByZS1wYXJzaW5nIHRoZSBVUkwuCisgICAgU3RyaW5nQ2FwdHVyZSBjYXB0dXJlZFVSTChibG9i
VVJMLnN0cmluZygpKTsKKyAgICBwZXJmb3JtKFtjYXB0dXJlZFVSTCwgcG9zaXRpb24sIGxlbmd0
aF0oRmlsZVN0cmVhbSYgc3RyZWFtKSAtPiBzdGQ6OmZ1bmN0aW9uPHZvaWQoRmlsZVN0cmVhbUNs
aWVudCYpPiB7CisgICAgICAgIGludCBieXRlc1dyaXR0ZW4gPSBzdHJlYW0ud3JpdGUoVVJMKFBh
cnNlZFVSTFN0cmluZywgY2FwdHVyZWRVUkwuc3RyaW5nKCkpLCBwb3NpdGlvbiwgbGVuZ3RoKTsK
KyAgICAgICAgcmV0dXJuIFtieXRlc1dyaXR0ZW5dKEZpbGVTdHJlYW1DbGllbnQmIGNsaWVudCkg
eworICAgICAgICAgICAgY2xpZW50LmRpZFdyaXRlKGJ5dGVzV3JpdHRlbik7CisgICAgICAgIH07
CisgICAgfSk7CiB9CiAKIHZvaWQgQXN5bmNGaWxlU3RyZWFtOjp0cnVuY2F0ZShsb25nIGxvbmcg
cG9zaXRpb24pCiB7Ci0gICAgZmlsZVRocmVhZCgpLT5wb3N0VGFzayh7IHRoaXMsIFt0aGlzLCBw
b3NpdGlvbl0gewotICAgICAgICBib29sIHN1Y2Nlc3MgPSBtX3N0cmVhbS0+dHJ1bmNhdGUocG9z
aXRpb24pOwotICAgICAgICBjYWxsT25NYWluVGhyZWFkKFt0aGlzLCBzdWNjZXNzXSB7Ci0gICAg
ICAgICAgICBpZiAoY2xpZW50KCkpCi0gICAgICAgICAgICAgICAgY2xpZW50KCktPmRpZFRydW5j
YXRlKHN1Y2Nlc3MpOwotICAgICAgICB9KTsKLSAgICB9IH0pOworICAgIHBlcmZvcm0oW3Bvc2l0
aW9uXShGaWxlU3RyZWFtJiBzdHJlYW0pIC0+IHN0ZDo6ZnVuY3Rpb248dm9pZChGaWxlU3RyZWFt
Q2xpZW50Jik+IHsKKyAgICAgICAgYm9vbCBzdWNjZXNzID0gc3RyZWFtLnRydW5jYXRlKHBvc2l0
aW9uKTsKKyAgICAgICAgcmV0dXJuIFtzdWNjZXNzXShGaWxlU3RyZWFtQ2xpZW50JiBjbGllbnQp
IHsKKyAgICAgICAgICAgIGNsaWVudC5kaWRUcnVuY2F0ZShzdWNjZXNzKTsKKyAgICAgICAgfTsK
KyAgICB9KTsKIH0KIAogfSAvLyBuYW1lc3BhY2UgV2ViQ29yZQpkaWZmIC0tZ2l0IGEvU291cmNl
L1dlYkNvcmUvZmlsZWFwaS9Bc3luY0ZpbGVTdHJlYW0uaCBiL1NvdXJjZS9XZWJDb3JlL2ZpbGVh
cGkvQXN5bmNGaWxlU3RyZWFtLmgKaW5kZXggYjYwYmM2MDcxNTU1MjZmODM2YTgwMjAwYTk4ZTAw
NzBjZWNjZWUyMy4uNDI4ZjczMGVlNDc2Y2ViYmI0NzkxZGI3ZjllNTk1ZWUyOTcwYmVjNyAxMDA2
NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvZmlsZWFwaS9Bc3luY0ZpbGVTdHJlYW0uaAorKysgYi9T
b3VyY2UvV2ViQ29yZS9maWxlYXBpL0FzeW5jRmlsZVN0cmVhbS5oCkBAIC0xLDYgKzEsNiBAQAog
LyoKLSAqIENvcHlyaWdodCAoQykgMjAxMCBHb29nbGUgSW5jLiAgQWxsIHJpZ2h0cyByZXNlcnZl
ZC4KLSAqIENvcHlyaWdodCAoQykgMjAxMCwgMjAxMiBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVz
ZXJ2ZWQuCisgKiBDb3B5cmlnaHQgKEMpIDIwMTAgR29vZ2xlIEluYy4gQWxsIHJpZ2h0cyByZXNl
cnZlZC4KKyAqIENvcHlyaWdodCAoQykgMjAxMCwgMjAxMiwgMjAxNCBBcHBsZSBJbmMuIEFsbCBy
aWdodHMgcmVzZXJ2ZWQuCiAgKgogICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2Ug
YW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CiAgKiBtb2RpZmljYXRpb24sIGFyZSBw
ZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMgYXJlCkBAIC0z
Miw5ICszMiw4IEBACiAjaWZuZGVmIEFzeW5jRmlsZVN0cmVhbV9oCiAjZGVmaW5lIEFzeW5jRmls
ZVN0cmVhbV9oCiAKKyNpbmNsdWRlIDxmdW5jdGlvbmFsPgogI2luY2x1ZGUgPHd0Zi9Gb3J3YXJk
Lmg+Ci0jaW5jbHVkZSA8d3RmL1JlZkNvdW50ZWQuaD4KLSNpbmNsdWRlIDx3dGYvUmVmUHRyLmg+
CiAKIG5hbWVzcGFjZSBXZWJDb3JlIHsKIApAQCAtNDIsOSArNDEsOSBAQCBjbGFzcyBGaWxlU3Ry
ZWFtQ2xpZW50OwogY2xhc3MgRmlsZVN0cmVhbTsKIGNsYXNzIFVSTDsKIAotY2xhc3MgQXN5bmNG
aWxlU3RyZWFtIDogcHVibGljIFJlZkNvdW50ZWQ8QXN5bmNGaWxlU3RyZWFtPiB7CitjbGFzcyBB
c3luY0ZpbGVTdHJlYW0gewogcHVibGljOgotICAgIHN0YXRpYyBQYXNzUmVmUHRyPEFzeW5jRmls
ZVN0cmVhbT4gY3JlYXRlKEZpbGVTdHJlYW1DbGllbnQqKTsKKyAgICBleHBsaWNpdCBBc3luY0Zp
bGVTdHJlYW0oRmlsZVN0cmVhbUNsaWVudCYpOwogICAgIH5Bc3luY0ZpbGVTdHJlYW0oKTsKIAog
ICAgIHZvaWQgZ2V0U2l6ZShjb25zdCBTdHJpbmcmIHBhdGgsIGRvdWJsZSBleHBlY3RlZE1vZGlm
aWNhdGlvblRpbWUpOwpAQCAtNTUsMTggKzU0LDEyIEBAIHB1YmxpYzoKICAgICB2b2lkIHdyaXRl
KGNvbnN0IFVSTCYgYmxvYlVSTCwgbG9uZyBsb25nIHBvc2l0aW9uLCBpbnQgbGVuZ3RoKTsKICAg
ICB2b2lkIHRydW5jYXRlKGxvbmcgbG9uZyBwb3NpdGlvbik7CiAKLSAgICAvLyBTdG9wcyB0aGUg
cHJveHkgYW5kIHNjaGVkdWxlcyBpdCB0byBiZSBkZXN0cnVjdGVkLiBBbGwgdGhlIHBlbmRpbmcg
dGFza3Mgd2lsbCBiZSBhYm9ydGVkIGFuZCB0aGUgZmlsZSBzdHJlYW0gd2lsbCBiZSBjbG9zZWQu
Ci0gICAgLy8gTm90ZTogdGhlIGNhbGxlciBzaG91bGQgZGVyZWYgdGhlIGluc3RhbmNlIGltbWVk
aWF0ZWx5IGFmdGVyIGNhbGxpbmcgc3RvcCgpLgotICAgIHZvaWQgc3RvcCgpOwotCi0gICAgRmls
ZVN0cmVhbUNsaWVudCogY2xpZW50KCkgY29uc3QgeyByZXR1cm4gbV9jbGllbnQ7IH0KLSAgICB2
b2lkIHNldENsaWVudChGaWxlU3RyZWFtQ2xpZW50KiBjbGllbnQpIHsgbV9jbGllbnQgPSBjbGll
bnQ7IH0KLQogcHJpdmF0ZToKLSAgICBBc3luY0ZpbGVTdHJlYW0oRmlsZVN0cmVhbUNsaWVudCop
OworICAgIHZvaWQgc3RhcnQoKTsKKyAgICB2b2lkIHBlcmZvcm0oc3RkOjpmdW5jdGlvbjxzdGQ6
OmZ1bmN0aW9uPHZvaWQoRmlsZVN0cmVhbUNsaWVudCYpPihGaWxlU3RyZWFtJik+KTsKIAotICAg
IFJlZlB0cjxGaWxlU3RyZWFtPiBtX3N0cmVhbTsKLSAgICBGaWxlU3RyZWFtQ2xpZW50KiBtX2Ns
aWVudDsKKyAgICBzdHJ1Y3QgSW50ZXJuYWxzOworICAgIHN0ZDo6dW5pcXVlX3B0cjxJbnRlcm5h
bHM+IG1faW50ZXJuYWxzOwogfTsKIAogfSAvLyBuYW1lc3BhY2UgV2ViQ29yZQpkaWZmIC0tZ2l0
IGEvU291cmNlL1dlYkNvcmUvZmlsZWFwaS9GaWxlVGhyZWFkLmNwcCBiL1NvdXJjZS9XZWJDb3Jl
L2ZpbGVhcGkvRmlsZVRocmVhZC5jcHAKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDM0
ZWE1ZDdlMTE0MGZkNGU0NWNiNzAyZWZmZjQ2NjM0NDk4NTliN2EuLjAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAKLS0tIGEvU291cmNlL1dlYkNvcmUvZmlsZWFwaS9GaWxl
VGhyZWFkLmNwcAorKysgL2Rldi9udWxsCkBAIC0xLDExMyArMCwwIEBACi0vKgotICogQ29weXJp
Z2h0IChDKSAyMDEwIEdvb2dsZSBJbmMuICBBbGwgcmlnaHRzIHJlc2VydmVkLgotICoKLSAqIFJl
ZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Ig
d2l0aG91dAotICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhl
IGZvbGxvd2luZyBjb25kaXRpb25zIGFyZQotICogbWV0OgotICoKLSAqICAgICAqIFJlZGlzdHJp
YnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0Ci0g
KiBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2Ns
YWltZXIuCi0gKiAgICAgKiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXBy
b2R1Y2UgdGhlIGFib3ZlCi0gKiBjb3B5cmlnaHQgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0
aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyCi0gKiBpbiB0aGUgZG9jdW1lbnRhdGlv
biBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlCi0gKiBkaXN0cmlidXRp
b24uCi0gKiAgICAgKiBOZWl0aGVyIHRoZSBuYW1lIG9mIEdvb2dsZSBJbmMuIG5vciB0aGUgbmFt
ZXMgb2YgaXRzCi0gKiBjb250cmlidXRvcnMgbWF5IGJlIHVzZWQgdG8gZW5kb3JzZSBvciBwcm9t
b3RlIHByb2R1Y3RzIGRlcml2ZWQgZnJvbQotICogdGhpcyBzb2Z0d2FyZSB3aXRob3V0IHNwZWNp
ZmljIHByaW9yIHdyaXR0ZW4gcGVybWlzc2lvbi4KLSAqCi0gKiBUSElTIFNPRlRXQVJFIElTIFBS
T1ZJREVEIEJZIFRIRSBDT1BZUklHSFQgSE9MREVSUyBBTkQgQ09OVFJJQlVUT1JTCi0gKiAiQVMg
SVMiIEFORCBBTlkgRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVU
IE5PVAotICogTElNSVRFRCBUTywgVEhFIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFC
SUxJVFkgQU5EIEZJVE5FU1MgRk9SCi0gKiBBIFBBUlRJQ1VMQVIgUFVSUE9TRSBBUkUgRElTQ0xB
SU1FRC4gSU4gTk8gRVZFTlQgU0hBTEwgVEhFIENPUFlSSUdIVAotICogT1dORVIgT1IgQ09OVFJJ
QlVUT1JTIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsCi0g
KiBTUEVDSUFMLCBFWEVNUExBUlksIE9SIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5H
LCBCVVQgTk9UCi0gKiBMSU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBPRiBTVUJTVElUVVRFIEdPT0RT
IE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwKLSAqIERBVEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lO
RVNTIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWQotICogVEhFT1JZIE9G
IExJQUJJTElUWSwgV0hFVEhFUiBJTiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9S
VAotICogKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJU0lORyBJTiBBTlkg
V0FZIE9VVCBPRiBUSEUgVVNFCi0gKiBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQg
T0YgVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgotICovCi0KLSNpbmNsdWRlICJjb25m
aWcuaCIKLQotI2luY2x1ZGUgIkZpbGVUaHJlYWQuaCIKLQotI2luY2x1ZGUgIkxvZ2dpbmcuaCIK
LSNpbmNsdWRlIDx3dGYvQXV0b2RyYWluZWRQb29sLmg+Ci0KLW5hbWVzcGFjZSBXZWJDb3JlIHsK
LQotRmlsZVRocmVhZDo6RmlsZVRocmVhZCgpCi0gICAgOiBtX3RocmVhZElEKDApCi17Ci0gICAg
bV9zZWxmUmVmID0gdGhpczsKLX0KLQotRmlsZVRocmVhZDo6fkZpbGVUaHJlYWQoKQotewotICAg
IEFTU0VSVChtX3F1ZXVlLmtpbGxlZCgpKTsKLX0KLQotYm9vbCBGaWxlVGhyZWFkOjpzdGFydCgp
Ci17Ci0gICAgTXV0ZXhMb2NrZXIgbG9jayhtX3RocmVhZENyZWF0aW9uTXV0ZXgpOwotICAgIGlm
IChtX3RocmVhZElEKQotICAgICAgICByZXR1cm4gdHJ1ZTsKLSAgICBtX3RocmVhZElEID0gY3Jl
YXRlVGhyZWFkKEZpbGVUaHJlYWQ6OmZpbGVUaHJlYWRTdGFydCwgdGhpcywgIldlYkNvcmU6IEZp
bGUiKTsKLSAgICByZXR1cm4gbV90aHJlYWRJRDsKLX0KLQotdm9pZCBGaWxlVGhyZWFkOjpzdG9w
KCkKLXsKLSAgICBtX3F1ZXVlLmtpbGwoKTsKLX0KLQotdm9pZCBGaWxlVGhyZWFkOjpwb3N0VGFz
ayhUYXNrIHRhc2spCi17Ci0gICAgbV9xdWV1ZS5hcHBlbmQoc3RkOjptYWtlX3VuaXF1ZTxGaWxl
VGhyZWFkOjpUYXNrPihXVEY6Om1vdmUodGFzaykpKTsKLX0KLQotY2xhc3MgU2FtZUluc3RhbmNl
UHJlZGljYXRlIHsKLXB1YmxpYzoKLSAgICBTYW1lSW5zdGFuY2VQcmVkaWNhdGUoY29uc3Qgdm9p
ZCogaW5zdGFuY2UpIDogbV9pbnN0YW5jZShpbnN0YW5jZSkgeyB9Ci0gICAgYm9vbCBvcGVyYXRv
cigpKEZpbGVUaHJlYWQ6OlRhc2smIHRhc2spIGNvbnN0IHsgcmV0dXJuIHRhc2suaW5zdGFuY2Uo
KSA9PSBtX2luc3RhbmNlOyB9Ci1wcml2YXRlOgotICAgIGNvbnN0IHZvaWQqIG1faW5zdGFuY2U7
Ci19OwotCi12b2lkIEZpbGVUaHJlYWQ6OnVuc2NoZWR1bGVUYXNrcyhjb25zdCB2b2lkKiBpbnN0
YW5jZSkKLXsKLSAgICBTYW1lSW5zdGFuY2VQcmVkaWNhdGUgcHJlZGljYXRlKGluc3RhbmNlKTsK
LSAgICBtX3F1ZXVlLnJlbW92ZUlmKHByZWRpY2F0ZSk7Ci19Ci0KLXZvaWQgRmlsZVRocmVhZDo6
ZmlsZVRocmVhZFN0YXJ0KHZvaWQqIGFyZykKLXsKLSAgICBGaWxlVGhyZWFkKiBmaWxlVGhyZWFk
ID0gc3RhdGljX2Nhc3Q8RmlsZVRocmVhZCo+KGFyZyk7Ci0gICAgZmlsZVRocmVhZC0+cnVuTG9v
cCgpOwotfQotCi12b2lkIEZpbGVUaHJlYWQ6OnJ1bkxvb3AoKQotewotICAgIHsKLSAgICAgICAg
Ly8gV2FpdCBmb3IgRmlsZVRocmVhZDo6c3RhcnQoKSB0byBjb21wbGV0ZSB0byBoYXZlIG1fdGhy
ZWFkSUQKLSAgICAgICAgLy8gZXN0YWJsaXNoZWQgYmVmb3JlIHN0YXJ0aW5nIHRoZSBtYWluIGxv
b3AuCi0gICAgICAgIE11dGV4TG9ja2VyIGxvY2sobV90aHJlYWRDcmVhdGlvbk11dGV4KTsKLSAg
ICAgICAgTE9HKEZpbGVBUEksICJTdGFydGVkIEZpbGVUaHJlYWQgJXAiLCB0aGlzKTsKLSAgICB9
Ci0KLSAgICB3aGlsZSAoYXV0byB0YXNrID0gbV9xdWV1ZS53YWl0Rm9yTWVzc2FnZSgpKSB7Ci0g
ICAgICAgIEF1dG9kcmFpbmVkUG9vbCBwb29sOwotCi0gICAgICAgIHRhc2stPnBlcmZvcm1UYXNr
KCk7Ci0gICAgfQotCi0gICAgTE9HKEZpbGVBUEksICJBYm91dCB0byBkZXRhY2ggdGhyZWFkICVp
IGFuZCBjbGVhciB0aGUgcmVmIHRvIEZpbGVUaHJlYWQgJXAsIHdoaWNoIGN1cnJlbnRseSBoYXMg
JWkgcmVmKHMpIiwgbV90aHJlYWRJRCwgdGhpcywgcmVmQ291bnQoKSk7Ci0KLSAgICBkZXRhY2hU
aHJlYWQobV90aHJlYWRJRCk7Ci0KLSAgICAvLyBDbGVhciB0aGUgc2VsZiByZWZwdHIsIHBvc3Np
Ymx5IHJlc3VsdGluZyBpbiBkZWxldGlvbgotICAgIG1fc2VsZlJlZiA9IDA7Ci19Ci0KLX0gLy8g
bmFtZXNwYWNlIFdlYkNvcmUKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL2ZpbGVhcGkvRmls
ZVRocmVhZC5oIGIvU291cmNlL1dlYkNvcmUvZmlsZWFwaS9GaWxlVGhyZWFkLmgKZGVsZXRlZCBm
aWxlIG1vZGUgMTAwNjQ0CmluZGV4IDlkZTJmZWRiZjE4MzgyMTIzNDdkZmFhOTIwZDVhMWU3NWFi
ZTc1ODQuLjAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAKLS0tIGEvU291
cmNlL1dlYkNvcmUvZmlsZWFwaS9GaWxlVGhyZWFkLmgKKysrIC9kZXYvbnVsbApAQCAtMSwxMDEg
KzAsMCBAQAotLyoKLSAqIENvcHlyaWdodCAoQykgMjAxMCBHb29nbGUgSW5jLiAgQWxsIHJpZ2h0
cyByZXNlcnZlZC4KLSAqCi0gKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQg
YmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKLSAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1p
dHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucyBhcmUKLSAqIG1ldDoK
LSAqCi0gKiAgICAgKiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4g
dGhlIGFib3ZlIGNvcHlyaWdodAotICogbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBh
bmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgotICogICAgICogUmVkaXN0cmlidXRpb25zIGlu
IGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZQotICogY29weXJpZ2h0IG5vdGlj
ZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lcgot
ICogaW4gdGhlIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3
aXRoIHRoZQotICogZGlzdHJpYnV0aW9uLgotICogICAgICogTmVpdGhlciB0aGUgbmFtZSBvZiBH
b29nbGUgSW5jLiBub3IgdGhlIG5hbWVzIG9mIGl0cwotICogY29udHJpYnV0b3JzIG1heSBiZSB1
c2VkIHRvIGVuZG9yc2Ugb3IgcHJvbW90ZSBwcm9kdWN0cyBkZXJpdmVkIGZyb20KLSAqIHRoaXMg
c29mdHdhcmUgd2l0aG91dCBzcGVjaWZpYyBwcmlvciB3cml0dGVuIHBlcm1pc3Npb24uCi0gKgot
ICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBUSEUgQ09QWVJJR0hUIEhPTERFUlMgQU5E
IENPTlRSSUJVVE9SUwotICogIkFTIElTIiBBTkQgQU5ZIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJS
QU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QKLSAqIExJTUlURUQgVE8sIFRIRSBJTVBMSUVEIFdB
UlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUgotICogQSBQQVJUSUNV
TEFSIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuIElOIE5PIEVWRU5UIFNIQUxMIFRIRSBDT1BZUklH
SFQKLSAqIE9XTkVSIE9SIENPTlRSSUJVVE9SUyBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElO
RElSRUNULCBJTkNJREVOVEFMLAotICogU1BFQ0lBTCwgRVhFTVBMQVJZLCBPUiBDT05TRVFVRU5U
SUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVAotICogTElNSVRFRCBUTywgUFJPQ1VSRU1F
TlQgT0YgU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsCi0gKiBEQVRB
LCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFO
RCBPTiBBTlkKLSAqIFRIRU9SWSBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNU
UklDVCBMSUFCSUxJVFksIE9SIFRPUlQKLSAqIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhF
UldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRQotICogT0YgVEhJUyBTT0ZU
V0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4K
LSAqLwotCi0jaWZuZGVmIEZpbGVUaHJlYWRfaAotI2RlZmluZSBGaWxlVGhyZWFkX2gKLQotI2lu
Y2x1ZGUgPGZ1bmN0aW9uYWw+Ci0jaW5jbHVkZSA8d3RmL01lc3NhZ2VRdWV1ZS5oPgotI2luY2x1
ZGUgPHd0Zi9QYXNzUmVmUHRyLmg+Ci0jaW5jbHVkZSA8d3RmL1RocmVhZGluZy5oPgotCi1uYW1l
c3BhY2UgV2ViQ29yZSB7Ci0KLWNsYXNzIEZpbGVTdHJlYW07Ci0KLWNsYXNzIEZpbGVUaHJlYWQg
OiBwdWJsaWMgVGhyZWFkU2FmZVJlZkNvdW50ZWQ8RmlsZVRocmVhZD4gewotcHVibGljOgotICAg
IHN0YXRpYyBQYXNzUmVmUHRyPEZpbGVUaHJlYWQ+IGNyZWF0ZSgpCi0gICAgewotICAgICAgICBy
ZXR1cm4gYWRvcHRSZWYobmV3IEZpbGVUaHJlYWQoKSk7Ci0gICAgfQotCi0gICAgfkZpbGVUaHJl
YWQoKTsKLQotICAgIGJvb2wgc3RhcnQoKTsKLSAgICB2b2lkIHN0b3AoKTsKLQotICAgIGNsYXNz
IFRhc2sgewotICAgICAgICBXVEZfTUFLRV9OT05DT1BZQUJMRShUYXNrKTsKLSAgICBwdWJsaWM6
Ci0gICAgICAgIHRlbXBsYXRlPHR5cGVuYW1lIFQsIHR5cGVuYW1lIFUsIHR5cGVuYW1lID0gdHlw
ZW5hbWUgc3RkOjplbmFibGVfaWY8IXN0ZDo6aXNfYmFzZV9vZjxUYXNrLCBVPjo6dmFsdWUgJiYg
c3RkOjppc19jb252ZXJ0aWJsZTxVLCBzdGQ6OmZ1bmN0aW9uPHZvaWQgKCk+Pjo6dmFsdWU+Ojp0
eXBlPgotICAgICAgICBUYXNrKFQqIGluc3RhbmNlLCBVIG1ldGhvZCkKLSAgICAgICAgICAgIDog
bV90YXNrKFdURjo6bW92ZShtZXRob2QpKQotICAgICAgICAgICAgLCBtX2luc3RhbmNlKGluc3Rh
bmNlKQotICAgICAgICB7Ci0gICAgICAgIH0KLQotICAgICAgICBUYXNrKFRhc2smJiBvdGhlcikK
LSAgICAgICAgICAgIDogbV90YXNrKFdURjo6bW92ZShvdGhlci5tX3Rhc2spKQotICAgICAgICAg
ICAgLCBtX2luc3RhbmNlKG90aGVyLm1faW5zdGFuY2UpCi0gICAgICAgIHsKLSAgICAgICAgfQot
Ci0gICAgICAgIHZvaWQgcGVyZm9ybVRhc2soKQotICAgICAgICB7Ci0gICAgICAgICAgICBtX3Rh
c2soKTsKLSAgICAgICAgfQotICAgICAgICB2b2lkKiBpbnN0YW5jZSgpIGNvbnN0IHsgcmV0dXJu
IG1faW5zdGFuY2U7IH0KLQotICAgIHByaXZhdGU6Ci0gICAgICAgIHN0ZDo6ZnVuY3Rpb248dm9p
ZCAoKT4gbV90YXNrOwotICAgICAgICB2b2lkKiBtX2luc3RhbmNlOwotICAgIH07Ci0KLSAgICB2
b2lkIHBvc3RUYXNrKFRhc2spOwotCi0gICAgdm9pZCB1bnNjaGVkdWxlVGFza3MoY29uc3Qgdm9p
ZCogaW5zdGFuY2UpOwotCi1wcml2YXRlOgotICAgIEZpbGVUaHJlYWQoKTsKLQotICAgIHN0YXRp
YyB2b2lkIGZpbGVUaHJlYWRTdGFydCh2b2lkKik7Ci0gICAgdm9pZCBydW5Mb29wKCk7Ci0KLSAg
ICBUaHJlYWRJZGVudGlmaWVyIG1fdGhyZWFkSUQ7Ci0gICAgUmVmUHRyPEZpbGVUaHJlYWQ+IG1f
c2VsZlJlZjsKLSAgICBNZXNzYWdlUXVldWU8VGFzaz4gbV9xdWV1ZTsKLQotICAgIE11dGV4IG1f
dGhyZWFkQ3JlYXRpb25NdXRleDsKLX07Ci0KLX0gLy8gbmFtZXNwYWNlIFdlYkNvcmUKLQotI2Vu
ZGlmIC8vIEZpbGVUaHJlYWRfaApkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvbG9hZGVyL1Jl
c291cmNlTG9hZGVyLmNwcCBiL1NvdXJjZS9XZWJDb3JlL2xvYWRlci9SZXNvdXJjZUxvYWRlci5j
cHAKaW5kZXggMjU3OGU5MmM3YmM1YjE2NWU1ZWU1ZjIwYzMxOTQ4Y2ZmZDQ5YmM4OC4uZTUyMmQz
Y2FmZDg3MDg1Y2Y5YTc3YjczMTE2ZjcyMjhlNmM5ZDZlNyAxMDA2NDQKLS0tIGEvU291cmNlL1dl
YkNvcmUvbG9hZGVyL1Jlc291cmNlTG9hZGVyLmNwcAorKysgYi9Tb3VyY2UvV2ViQ29yZS9sb2Fk
ZXIvUmVzb3VyY2VMb2FkZXIuY3BwCkBAIC0zMSw3ICszMSw2IEBACiAjaW5jbHVkZSAiUmVzb3Vy
Y2VMb2FkZXIuaCIKIAogI2luY2x1ZGUgIkFwcGxpY2F0aW9uQ2FjaGVIb3N0LmgiCi0jaW5jbHVk
ZSAiQXN5bmNGaWxlU3RyZWFtLmgiCiAjaW5jbHVkZSAiQXV0aGVudGljYXRpb25DaGFsbGVuZ2Uu
aCIKICNpbmNsdWRlICJEb2N1bWVudExvYWRlci5oIgogI2luY2x1ZGUgIkZyYW1lLmgiCmRpZmYg
LS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9GaWxlU3RyZWFtLmNwcCBiL1NvdXJjZS9X
ZWJDb3JlL3BsYXRmb3JtL0ZpbGVTdHJlYW0uY3BwCmluZGV4IGZmNWFlZTFhZmY1Njk0YTZiOGFl
YzUwYzYyZjFlM2NjMGE2NTJkNzkuLjNhZTQ1OThkZmFiZGRmNDE1YmMwN2I2OTZkYThjN2MwZDRl
Zjk4MTkgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL0ZpbGVTdHJlYW0uY3Bw
CisrKyBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL0ZpbGVTdHJlYW0uY3BwCkBAIC00NiwxNiAr
NDYsNiBAQCBGaWxlU3RyZWFtOjpGaWxlU3RyZWFtKCkKIAogRmlsZVN0cmVhbTo6fkZpbGVTdHJl
YW0oKQogewotICAgIEFTU0VSVCghaXNIYW5kbGVWYWxpZChtX2hhbmRsZSkpOwotfQotCi0vLyBG
SVhNRTogVG8gYmUgcmVtb3ZlZCB3aGVuIHdlIHN3aXRjaCB0byB1c2luZyBCbG9iRGF0YS4KLXZv
aWQgRmlsZVN0cmVhbTo6c3RhcnQoKQotewotfQotCi12b2lkIEZpbGVTdHJlYW06OnN0b3AoKQot
ewogICAgIGNsb3NlKCk7CiB9CiAKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3Jt
L0ZpbGVTdHJlYW0uaCBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL0ZpbGVTdHJlYW0uaAppbmRl
eCBhZThhODRlNDE2NGFjNDQ2Yjg5ODU3ZWE1M2U4ZjhjNjg1MDViMDY2Li4zY2U5ZTU3NjU5OGIz
YWU1NzBmZTA4YzM4ZDA0ODg3MDVkNTgxYTgwIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9w
bGF0Zm9ybS9GaWxlU3RyZWFtLmgKKysrIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vRmlsZVN0
cmVhbS5oCkBAIC0zMiwyOSArMzIsMTcgQEAKICNkZWZpbmUgRmlsZVN0cmVhbV9oCiAKICNpbmNs
dWRlICJGaWxlU3lzdGVtLmgiCi0jaW5jbHVkZSA8d3RmL0ZvcndhcmQuaD4KLSNpbmNsdWRlIDx3
dGYvUGFzc1JlZlB0ci5oPgotI2luY2x1ZGUgPHd0Zi9SZWZDb3VudGVkLmg+CiAKIG5hbWVzcGFj
ZSBXZWJDb3JlIHsKIAogY2xhc3MgVVJMOwogCiAvLyBBbGwgbWV0aG9kcyBhcmUgc3luY2hyb25v
dXMuCi1jbGFzcyBGaWxlU3RyZWFtIDogcHVibGljIFJlZkNvdW50ZWQ8RmlsZVN0cmVhbT4gewor
Y2xhc3MgRmlsZVN0cmVhbSB7CiBwdWJsaWM6Ci0gICAgc3RhdGljIFBhc3NSZWZQdHI8RmlsZVN0
cmVhbT4gY3JlYXRlKCkKLSAgICB7Ci0gICAgICAgIHJldHVybiBhZG9wdFJlZihuZXcgRmlsZVN0
cmVhbSgpKTsKLSAgICB9CisgICAgRmlsZVN0cmVhbSgpOwogICAgIH5GaWxlU3RyZWFtKCk7CiAK
LSAgICAvLyBGSVhNRTogVG8gYmUgcmVtb3ZlZCB3aGVuIHdlIHN3aXRjaCB0byB1c2luZyBCbG9i
RGF0YS4KLSAgICB2b2lkIHN0YXJ0KCk7Ci0KLSAgICAvLyBBYm9ydHMgdGhlIG9wZXJhdGlvbi4K
LSAgICB2b2lkIHN0b3AoKTsKLQogICAgIC8vIEdldHMgdGhlIHNpemUgb2YgYSBmaWxlLiBBbHNv
IHZhbGlkYXRlcyBpZiB0aGUgZmlsZSBoYXMgYmVlbiBjaGFuZ2VkIG9yIG5vdCBpZiB0aGUgZXhw
ZWN0ZWQgbW9kaWZpY2F0aW9uIHRpbWUgaXMgcHJvdmlkZWQsIGkuZS4gbm9uLXplcm8uCiAgICAg
Ly8gUmV0dXJucyB0b3RhbCBudW1iZXIgb2YgYnl0ZXMgaWYgc3VjY2Vzc2Z1bC4gLTEgb3RoZXJ3
aXNlLgogICAgIGxvbmcgbG9uZyBnZXRTaXplKGNvbnN0IFN0cmluZyYgcGF0aCwgZG91YmxlIGV4
cGVjdGVkTW9kaWZpY2F0aW9uVGltZSk7CkBAIC04NCw4ICs3Miw2IEBAIHB1YmxpYzoKICAgICBi
b29sIHRydW5jYXRlKGxvbmcgbG9uZyBwb3NpdGlvbik7CiAKIHByaXZhdGU6Ci0gICAgRmlsZVN0
cmVhbSgpOwotCiAgICAgUGxhdGZvcm1GaWxlSGFuZGxlIG1faGFuZGxlOwogICAgIGxvbmcgbG9u
ZyBtX2J5dGVzUHJvY2Vzc2VkOwogICAgIGxvbmcgbG9uZyBtX3RvdGFsQnl0ZXNUb1JlYWQ7CmRp
ZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9GaWxlU3RyZWFtQ2xpZW50LmggYi9T
b3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9GaWxlU3RyZWFtQ2xpZW50LmgKaW5kZXggMTRmYTUwMTM1
NzU2YmVkY2RiZWQ2OTI0ZjExYzJhMzQwY2Q4OTVkMS4uY2I2M2E3MjgyZTc0MDA5ZGFjZTA3ZWZi
MGQ4NDZiN2FkNWJjZGI0OCAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vRmls
ZVN0cmVhbUNsaWVudC5oCisrKyBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL0ZpbGVTdHJlYW1D
bGllbnQuaApAQCAtMSw1ICsxLDUgQEAKIC8qCi0gKiBDb3B5cmlnaHQgKEMpIDIwMTAgR29vZ2xl
IEluYy4gIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKiBDb3B5cmlnaHQgKEMpIDIwMTAgR29vZ2xl
IEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KICAqCiAgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNl
IGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKICAqIG1vZGlmaWNh
dGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9u
cyBhcmUKQEAgLTM2LDE1ICszNiwxMSBAQCBuYW1lc3BhY2UgV2ViQ29yZSB7CiBjbGFzcyBGaWxl
U3RyZWFtQ2xpZW50IHsKIHB1YmxpYzoKICAgICB2aXJ0dWFsIHZvaWQgZGlkT3Blbihib29sKSB7
IH0gLy8gZmFsc2Ugc2lnbmFscyBmYWlsdXJlLgotICAgIHZpcnR1YWwgdm9pZCBkaWRTdG9wKCkg
eyB9CiAgICAgdmlydHVhbCB2b2lkIGRpZEdldFNpemUobG9uZyBsb25nKSB7IH0gLy8gLTEgc2ln
bmFscyBmYWlsdXJlLgogICAgIHZpcnR1YWwgdm9pZCBkaWRSZWFkKGludCkgeyB9IC8vIC0xIHNp
Z25hbHMgZmFpbHVyZS4KICAgICB2aXJ0dWFsIHZvaWQgZGlkV3JpdGUoaW50KSB7IH0gLy8gLTEg
c2lnbmFscyBmYWlsdXJlLgogICAgIHZpcnR1YWwgdm9pZCBkaWRUcnVuY2F0ZShib29sKSB7IH0g
Ly8gZmFsc2Ugc2lnbmFscyBmYWlsdXJlLgogCi0gICAgLy8gRklYTUU6IFRvIGJlIHJlbW92ZWQg
d2hlbiB3ZSBzd2l0Y2ggdG8gdXNpbmcgQmxvYkRhdGEuCi0gICAgdmlydHVhbCB2b2lkIGRpZFN0
YXJ0KCkgeyB9Ci0KIHByb3RlY3RlZDoKICAgICB2aXJ0dWFsIH5GaWxlU3RyZWFtQ2xpZW50KCkg
eyB9CiB9OwpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vbmV0d29yay9CbG9i
UmVzb3VyY2VIYW5kbGUuY3BwIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vbmV0d29yay9CbG9i
UmVzb3VyY2VIYW5kbGUuY3BwCmluZGV4IGM0OTRlNTJjZGE4YjI3MDAzZGNhNTNmNTU1OTI5ZmJj
NGMyZGZmYjkuLjA4ZDVmNTFhODg1MmUzMWYwN2QxZGFhZjg5Mjc2YjA0ZjBiMDcwZDUgMTAwNjQ0
Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL25ldHdvcmsvQmxvYlJlc291cmNlSGFuZGxl
LmNwcAorKysgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9uZXR3b3JrL0Jsb2JSZXNvdXJjZUhh
bmRsZS5jcHAKQEAgLTE3MSwzMCArMTcxLDE4IEBAIEJsb2JSZXNvdXJjZUhhbmRsZTo6QmxvYlJl
c291cmNlSGFuZGxlKEJsb2JEYXRhKiBibG9iRGF0YSwgY29uc3QgUmVzb3VyY2VSZXF1ZXN0CiAg
ICAgLCBtX2ZpbGVPcGVuZWQoZmFsc2UpCiB7CiAgICAgaWYgKG1fYXN5bmMpCi0gICAgICAgIG1f
YXN5bmNTdHJlYW0gPSBBc3luY0ZpbGVTdHJlYW06OmNyZWF0ZSh0aGlzKTsKKyAgICAgICAgbV9h
c3luY1N0cmVhbSA9IHN0ZDo6bWFrZV91bmlxdWU8QXN5bmNGaWxlU3RyZWFtPigqdGhpcyk7CiAg
ICAgZWxzZQotICAgICAgICBtX3N0cmVhbSA9IEZpbGVTdHJlYW06OmNyZWF0ZSgpOworICAgICAg
ICBtX3N0cmVhbSA9IHN0ZDo6bWFrZV91bmlxdWU8RmlsZVN0cmVhbT4oKTsKIH0KIAogQmxvYlJl
c291cmNlSGFuZGxlOjp+QmxvYlJlc291cmNlSGFuZGxlKCkKIHsKLSAgICBpZiAobV9hc3luYykg
ewotICAgICAgICBpZiAobV9hc3luY1N0cmVhbSkKLSAgICAgICAgICAgIG1fYXN5bmNTdHJlYW0t
PnN0b3AoKTsKLSAgICB9IGVsc2UgewotICAgICAgICBpZiAobV9zdHJlYW0pCi0gICAgICAgICAg
ICBtX3N0cmVhbS0+c3RvcCgpOwotICAgIH0KIH0KIAogdm9pZCBCbG9iUmVzb3VyY2VIYW5kbGU6
OmNhbmNlbCgpCiB7Ci0gICAgaWYgKG1fYXN5bmMpIHsKLSAgICAgICAgaWYgKG1fYXN5bmNTdHJl
YW0pIHsKLSAgICAgICAgICAgIG1fYXN5bmNTdHJlYW0tPnN0b3AoKTsKLSAgICAgICAgICAgIG1f
YXN5bmNTdHJlYW0gPSAwOwotICAgICAgICB9Ci0gICAgfQorICAgIG1fYXN5bmNTdHJlYW0gPSBu
dWxscHRyOwogCiAgICAgbV9hYm9ydGVkID0gdHJ1ZTsKIApkaWZmIC0tZ2l0IGEvU291cmNlL1dl
YkNvcmUvcGxhdGZvcm0vbmV0d29yay9CbG9iUmVzb3VyY2VIYW5kbGUuaCBiL1NvdXJjZS9XZWJD
b3JlL3BsYXRmb3JtL25ldHdvcmsvQmxvYlJlc291cmNlSGFuZGxlLmgKaW5kZXggNzMyZmY3OTA0
NTM5ZDRkOGY4MDRjMjdlYTA0NjY4MzZmMGE0OWIxZC4uNjc2ZGJmZjk4OTc2YmIwODdkNWJiYzVk
MGNjYWI3ZjQxM2I0NDFmZCAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vbmV0
d29yay9CbG9iUmVzb3VyY2VIYW5kbGUuaAorKysgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9u
ZXR3b3JrL0Jsb2JSZXNvdXJjZUhhbmRsZS5oCkBAIC05Miw4ICs5Miw4IEBAIHByaXZhdGU6CiAK
ICAgICBSZWZQdHI8QmxvYkRhdGE+IG1fYmxvYkRhdGE7CiAgICAgYm9vbCBtX2FzeW5jOwotICAg
IFJlZlB0cjxBc3luY0ZpbGVTdHJlYW0+IG1fYXN5bmNTdHJlYW07IC8vIEZvciBhc3luY2hyb25v
dXMgbG9hZGluZy4KLSAgICBSZWZQdHI8RmlsZVN0cmVhbT4gbV9zdHJlYW07IC8vIEZvciBzeW5j
aHJvbm91cyBsb2FkaW5nLgorICAgIHN0ZDo6dW5pcXVlX3B0cjxBc3luY0ZpbGVTdHJlYW0+IG1f
YXN5bmNTdHJlYW07IC8vIEZvciBhc3luY2hyb25vdXMgbG9hZGluZy4KKyAgICBzdGQ6OnVuaXF1
ZV9wdHI8RmlsZVN0cmVhbT4gbV9zdHJlYW07IC8vIEZvciBzeW5jaHJvbm91cyBsb2FkaW5nLgog
ICAgIFZlY3RvcjxjaGFyPiBtX2J1ZmZlcjsKICAgICBWZWN0b3I8bG9uZyBsb25nPiBtX2l0ZW1M
ZW5ndGhMaXN0OwogICAgIGludCBtX2Vycm9yQ29kZTsKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJD
b3JlL3N0b3JhZ2UvU3RvcmFnZVRocmVhZC5oIGIvU291cmNlL1dlYkNvcmUvc3RvcmFnZS9TdG9y
YWdlVGhyZWFkLmgKaW5kZXggMjYzYzc4ZTgyNjJlOWNmZDg2NWRkZDU5MDE5NTQ5MmY1ZTc4NTM5
Zi4uZGY1MmFjNjEyMWM4NDY2ZDQ4NmU0YTRkYzllZjNhNGUyODg3M2ZlNSAxMDA2NDQKLS0tIGEv
U291cmNlL1dlYkNvcmUvc3RvcmFnZS9TdG9yYWdlVGhyZWFkLmgKKysrIGIvU291cmNlL1dlYkNv
cmUvc3RvcmFnZS9TdG9yYWdlVGhyZWFkLmgKQEAgLTQ2LDcgKzQ2LDcgQEAgcHVibGljOgogICAg
IGJvb2wgc3RhcnQoKTsKICAgICB2b2lkIHRlcm1pbmF0ZSgpOwogCi0gICAgdm9pZCBkaXNwYXRj
aChjb25zdCBzdGQ6OmZ1bmN0aW9uPHZvaWQgKCk+Jik7CisgICAgdm9pZCBkaXNwYXRjaChjb25z
dCBzdGQ6OmZ1bmN0aW9uPHZvaWQoKT4mKTsKIAogICAgIHN0YXRpYyB2b2lkIHJlbGVhc2VGYXN0
TWFsbG9jRnJlZU1lbW9yeUluQWxsVGhyZWFkcygpOwogCkBAIC01OSw3ICs1OSw3IEBAIHByaXZh
dGU6CiAgICAgdm9pZCBwZXJmb3JtVGVybWluYXRlKCk7CiAKICAgICBUaHJlYWRJZGVudGlmaWVy
IG1fdGhyZWFkSUQ7Ci0gICAgTWVzc2FnZVF1ZXVlPHN0ZDo6ZnVuY3Rpb248dm9pZCAoKT4+IG1f
cXVldWU7CisgICAgTWVzc2FnZVF1ZXVlPHN0ZDo6ZnVuY3Rpb248dm9pZCgpPj4gbV9xdWV1ZTsK
IH07CiAKIH0gLy8gbmFtZXNwYWNlIFdlYkNvcmUKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJLaXQv
V2ViS2l0LnZjeHByb2ovV2ViS2l0RXhwb3J0R2VuZXJhdG9yL1dlYktpdEV4cG9ydHMuZGVmLmlu
IGIvU291cmNlL1dlYktpdC9XZWJLaXQudmN4cHJvai9XZWJLaXRFeHBvcnRHZW5lcmF0b3IvV2Vi
S2l0RXhwb3J0cy5kZWYuaW4KaW5kZXggMzEzOTU4N2ZiODFhNGU2ZTcxYWQ2Y2FhMmZmMzY4Zjlj
MWE5ZDZmYy4uOGQxMzc3NWQxODM4Njc1NDFhNTU2M2Q5NTk5MjdjZmQ1NjM5ZGUyNCAxMDA2NDQK
LS0tIGEvU291cmNlL1dlYktpdC9XZWJLaXQudmN4cHJvai9XZWJLaXRFeHBvcnRHZW5lcmF0b3Iv
V2ViS2l0RXhwb3J0cy5kZWYuaW4KKysrIGIvU291cmNlL1dlYktpdC9XZWJLaXQudmN4cHJvai9X
ZWJLaXRFeHBvcnRHZW5lcmF0b3IvV2ViS2l0RXhwb3J0cy5kZWYuaW4KQEAgLTEyNSw3ICsxMjUs
NiBAQCBFWFBPUlRTCiAgICAgICAgIHN5bWJvbFdpdGhQb2ludGVyKD9icm9hZGNhc3RAVGhyZWFk
Q29uZGl0aW9uQFdURkBAUUFFWFhaLCA/YnJvYWRjYXN0QFRocmVhZENvbmRpdGlvbkBXVEZAQFFF
QUFYWFopCiAgICAgICAgIHN5bWJvbFdpdGhQb2ludGVyKD9jYWxsT25NYWluVGhyZWFkQFdURkBA
WUFYUDZBWFBBWEBaMEBaLCA/Y2FsbE9uTWFpblRocmVhZEBXVEZAQFlBWFA2QVhQRUFYQFowQFop
CiAgICAgICAgIHN5bWJvbFdpdGhQb2ludGVyKD9jb3VudGVyVmFsdWVGb3JFbGVtZW50QFdlYkNv
cmVAQFlBP0FWU3RyaW5nQFdURkBAUEFWRWxlbWVudEAxQEBaLCA/Y291bnRlclZhbHVlRm9yRWxl
bWVudEBXZWJDb3JlQEBZQT9BVlN0cmluZ0BXVEZAQFBFQVZFbGVtZW50QDFAQFopCi0gICAgICAg
IHN5bWJvbFdpdGhQb2ludGVyKD9jcmVhdGVUaHJlYWRAV1RGQEBZQUlQNkFQQVhQQVhAWjBQQkRA
WiwgP2NyZWF0ZVRocmVhZEBXVEZAQFlBSVA2QVBFQVhQRUFYQFowUEVCREBaKQogICAgICAgICBz
eW1ib2xXaXRoUG9pbnRlcig/Y3JlYXRlVGhyZWFkQFdURkBAWUFJUDZBWFBBWEBaMFBCREBaLCA/
Y3JlYXRlVGhyZWFkQFdURkBAWUFJUDZBWFBFQVhAWjBQRUJEQFopCiAgICAgICAgID9jdXJyZW50
VGhyZWFkQFdURkBAWUFJWFoKICAgICAgICAgP2RldGFjaFRocmVhZEBXVEZAQFlBWElAWgpAQCAt
MTQ0LDggKzE0Myw2IEBAIEVYUE9SVFMKICAgICAgICAgc3ltYm9sV2l0aFBvaW50ZXIoP3VubG9j
a0BNdXRleEBXVEZAQFFBRVhYWiwgP3VubG9ja0BNdXRleEBXVEZAQFFFQUFYWFopCiAgICAgICAg
IHN5bWJvbFdpdGhQb2ludGVyKD93YWl0QFRocmVhZENvbmRpdGlvbkBXVEZAQFFBRVhBQVZNdXRl
eEAyQEBaLCA/d2FpdEBUaHJlYWRDb25kaXRpb25AV1RGQEBRRUFBWEFFQVZNdXRleEAyQEBaKQog
ICAgICAgICA/d2FpdEZvclRocmVhZENvbXBsZXRpb25AV1RGQEBZQUhJQFoKLSAgICAgICAgc3lt
Ym9sV2l0aFBvaW50ZXIoP3dhaXRGb3JUaHJlYWRDb21wbGV0aW9uQFdURkBAWUFISVBBUEFYQFos
ID93YWl0Rm9yVGhyZWFkQ29tcGxldGlvbkBXVEZAQFlBSElQRUFQRUFYQFopCi0gICAgICAgIHN5
bWJvbFdpdGhQb2ludGVyKD9jcmVhdGVUaHJlYWRAV1RGQEBZQUlQNkFQQVhQQVhAWjBAWiwgP2Ny
ZWF0ZVRocmVhZEBXVEZAQFlBSVA2QVBFQVhQRUFYQFowQFopCiAKICAgICAgICAgOyBSZS1leHBv
cnRzIGZyb20gV2ViQ29yZSBmb3IgdGVzdCBoYXJuZXNzZXMKICAgICAgICAgc3ltYm9sV2l0aFBv
aW50ZXIoPz8wSGl0VGVzdFJlc3VsdEBXZWJDb3JlQEBRQUVAQUJWTGF5b3V0UG9pbnRAMUBAWiwg
Pz8wSGl0VGVzdFJlc3VsdEBXZWJDb3JlQEBRRUFBQEFFQlZMYXlvdXRQb2ludEAxQEBaKQo=
</data>

          </attachment>
      

    </bug>

</bugzilla>