<?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>236832</bug_id>
          
          <creation_ts>2022-02-18 02:27:42 -0800</creation_ts>
          <short_desc>Thread safety analysis to assert &quot;code is run sequentially&quot; is not useful when code is mainly run with WorkQueues</short_desc>
          <delta_ts>2022-02-24 01:05:23 -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>Web Template Framework</component>
          <version>Other</version>
          <rep_platform>Unspecified</rep_platform>
          <op_sys>Unspecified</op_sys>
          <bug_status>RESOLVED</bug_status>
          <resolution>FIXED</resolution>
          
          
          <bug_file_loc></bug_file_loc>
          <status_whiteboard></status_whiteboard>
          <keywords>InRadar</keywords>
          <priority>P2</priority>
          <bug_severity>Normal</bug_severity>
          <target_milestone>---</target_milestone>
          <dependson>237022</dependson>
          <blocked>236767</blocked>
    
    <blocked>237026</blocked>
          <everconfirmed>1</everconfirmed>
          <reporter name="Kimmo Kinnunen">kkinnunen</reporter>
          <assigned_to name="Kimmo Kinnunen">kkinnunen</assigned_to>
          <cc>benjamin</cc>
    
    <cc>cdumez</cc>
    
    <cc>cmarcelo</cc>
    
    <cc>darin</cc>
    
    <cc>ddkilzer</cc>
    
    <cc>eric.carlson</cc>
    
    <cc>ews-watchlist</cc>
    
    <cc>ggaren</cc>
    
    <cc>glenn</cc>
    
    <cc>jean-yves.avenard</cc>
    
    <cc>jer.noble</cc>
    
    <cc>koivisto</cc>
    
    <cc>philipj</cc>
    
    <cc>rniwa</cc>
    
    <cc>sam</cc>
    
    <cc>sergio</cc>
    
    <cc>webkit-bug-importer</cc>
          

      

      

      

          <comment_sort_order>oldest_to_newest</comment_sort_order>  
          <long_desc isprivate="0" >
    <commentid>1843337</commentid>
    <comment_count>0</comment_count>
    <who name="Kimmo Kinnunen">kkinnunen</who>
    <bug_when>2022-02-18 02:27:42 -0800</bug_when>
    <thetext>Thread safety analysis is not useful when code is mainly run with WorkQueues

Currently we have assertion &quot;this code runs in a specific thread&quot;.

WorkQueue runnables might run in arbitrary thread, but still serially in a specific &quot;work queue&quot;.

On Cocoa, Dispatch will switch the threads.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1843343</commentid>
    <comment_count>1</comment_count>
      <attachid>452502</attachid>
    <who name="Kimmo Kinnunen">kkinnunen</who>
    <bug_when>2022-02-18 03:02:56 -0800</bug_when>
    <thetext>Created attachment 452502
Patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1843346</commentid>
    <comment_count>2</comment_count>
      <attachid>452503</attachid>
    <who name="Kimmo Kinnunen">kkinnunen</who>
    <bug_when>2022-02-18 03:28:28 -0800</bug_when>
    <thetext>Created attachment 452503
Patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1843360</commentid>
    <comment_count>3</comment_count>
      <attachid>452503</attachid>
    <who name="Jean-Yves Avenard [:jya]">jean-yves.avenard</who>
    <bug_when>2022-02-18 05:02:04 -0800</bug_when>
    <thetext>Comment on attachment 452503
Patch

this is great. The name Sequence however is a bit confusing.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1843424</commentid>
    <comment_count>4</comment_count>
      <attachid>452503</attachid>
    <who name="Chris Dumez">cdumez</who>
    <bug_when>2022-02-18 08:40:49 -0800</bug_when>
    <thetext>Comment on attachment 452503
Patch

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

I like the idea, this allows for a bit more fine grained threading checks (we usually just check main thread vs background thread only, because of work queues).

&gt; Source/WTF/wtf/ThreadAssertions.h:49
&gt; +class WTF_CAPABILITY_LOCK SequenceAssertion {

For what it&apos;s worth I&apos;m really not a fan of the SequenceAssertion naming. I have trouble making the connection between thread / work queue and the term &quot;sequence&quot;.
I understand why you chose this name of course but I still think it is not clear enough.

Sadly it is hard for me to come up with a better name here. Maybe &quot;ThreadingAssertion&quot;? &quot;ThreadOrWorkQueueAssertion&quot;?

I added a few people in cc who often have good naming proposals.

&gt; Source/WTF/wtf/ThreadAssertions.h:63
&gt; +    uint32_t m_uid { currentSequenceID() };

For example, I think currentThreadOrWorkQueueID() would read better than currentSequenceID() here, even if it is a bit of a mouthful.

&gt; Source/WTF/wtf/Threading.h:107
&gt; +class WTF_CAPABILITY_LOCK Thread : public ThreadSafeRefCounted&lt;Thread&gt; {

I admit I don&apos;t understand why we&apos;re claiming the Thread class is a lock.

&gt; Source/WTF/wtf/Threading.h:436
&gt; +inline void assertIsCurrent(const Thread&amp; thread) WTF_ASSERTS_ACQUIRED_LOCK(thread)

And why this &quot;acquires&quot; the lock.

&gt; Source/WTF/wtf/WorkQueue.h:92
&gt; +class WTF_CAPABILITY_LOCK WorkQueue : public WorkQueueBase {

Same comment about claiming this is a lock.

&gt; Source/WTF/wtf/WorkQueue.h:116
&gt; +    WTF_EXPORT_PRIVATE void assertIsCurrent() const;

I think ideally, these assertIsCurrent() function would not be behind a ASSERT_ENABLED flag because this will require every call site to check for the flag and it will look ugly.
I&apos;d rather we define the function unconditionally and only conditionalize its implementation (making sure that its implementation is both empty and inlined when !ASSERT_ENABLED.

&gt; Source/WTF/wtf/cocoa/WorkQueueCocoa.cpp:94
&gt; +    dispatch_queue_set_specific(m_dispatchQueue.get(), &amp;Thread::s_uid, reinterpret_cast&lt;void*&gt;(++Thread::s_uid), nullptr);

Nice trick :)</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1843439</commentid>
    <comment_count>5</comment_count>
    <who name="Chris Dumez">cdumez</who>
    <bug_when>2022-02-18 08:58:16 -0800</bug_when>
    <thetext>(In reply to Jean-Yves Avenard [:jya] from comment #3)
&gt; Comment on attachment 452503 [details]
&gt; Patch
&gt; 
&gt; this is great. The name Sequence however is a bit confusing.

ahah, I hadn&apos;t seen Jean-Yves&apos;s statement earlier but I am glad we&apos;re in agreement :)</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1843446</commentid>
    <comment_count>6</comment_count>
    <who name="Kimmo Kinnunen">kkinnunen</who>
    <bug_when>2022-02-18 09:18:47 -0800</bug_when>
    <thetext>(In reply to Chris Dumez from comment #4)
&gt; &gt; Source/WTF/wtf/Threading.h:107
&gt; &gt; +class WTF_CAPABILITY_LOCK Thread : public ThreadSafeRefCounted&lt;Thread&gt; {
&gt; 
&gt; I admit I don&apos;t understand why we&apos;re claiming the Thread class is a lock.

The Thread has the capability lock. Lock capability is something that has &quot;acquire&quot; and &quot;release&quot; operations of abstract something.

The lock capability of the thread means &quot;is it current or not&quot;.


&gt; &gt; Source/WTF/wtf/Threading.h:436
&gt; &gt; +inline void assertIsCurrent(const Thread&amp; thread) WTF_ASSERTS_ACQUIRED_LOCK(thread)
&gt; 
&gt; And why this &quot;acquires&quot; the lock.

Contrast the thing we already have:

Lock&amp; myLock = ...;
assertIsHeld(myLock);
// Compiler knows the myLock is held.

.. to the thing we should have (this patch implements this):

Thread&amp;  myThread = ...;
assertIsCurrent(myThread);
// The compiler knows the myThread is current.

We already can say:
This code compiles only if the compiler can prove that the variable being referenced is referenced with the expected mutex held.

With this patch, you can say:
this code compiles only if the compiler can prove that the variable being referenced is referenced in the expected thread.

The latter is useful in scenarios where the variables and functions are not protected by a lock, they&apos;re protected by the logical choice that they&apos;re only accessed sequentially, e.g. in one sequence, e.g. in one work queue or thread.


&gt; &gt; Source/WTF/wtf/WorkQueue.h:92
&gt; &gt; +class WTF_CAPABILITY_LOCK WorkQueue : public WorkQueueBase {
&gt; 
&gt; Same comment about claiming this is a lock.
&gt; 
&gt; &gt; Source/WTF/wtf/WorkQueue.h:116
&gt; &gt; +    WTF_EXPORT_PRIVATE void assertIsCurrent() const;
&gt; 
&gt; I think ideally, these assertIsCurrent() function would not be behind a
&gt; ASSERT_ENABLED flag because this will require every call site to check for
&gt; the flag and it will look ugly.

It is exactly like that. The use is:

assertIsCurrent(myThread);

assertIsCurrent(myQueue);

No ifdefs.


The function you quote is a private one. Nobody is calling that (except the implementation of assertIsCurrent();</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1843453</commentid>
    <comment_count>7</comment_count>
    <who name="Kimmo Kinnunen">kkinnunen</who>
    <bug_when>2022-02-18 09:27:03 -0800</bug_when>
    <thetext>For the name:
we want things to execute sequentially as opposed to parallelly.
E.g. in sequence, as opposed to in parallel.

https://www.dictionary.com/browse/sequence
&gt; the following of one thing after another; succession.

FWIW, while it is a bit of a stretch to claim we might have another abstraction for parallelism to support, I find ConcreteAOrConcreteB(OrConcreteC) a bit clumsy.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1843459</commentid>
    <comment_count>8</comment_count>
    <who name="Kimmo Kinnunen">kkinnunen</who>
    <bug_when>2022-02-18 09:32:20 -0800</bug_when>
    <thetext>(IIRC in chromium it&apos;s called a sequence.)</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1843487</commentid>
    <comment_count>9</comment_count>
    <who name="David Kilzer (:ddkilzer)">ddkilzer</who>
    <bug_when>2022-02-18 10:36:38 -0800</bug_when>
    <thetext>(In reply to Kimmo Kinnunen from comment #8)
&gt; (IIRC in chromium it&apos;s called a sequence.)

I haven&apos;t heard the term &quot;sequence&quot; used before for this, but I suppose that term is less overloaded than &quot;serial&quot; (which I generally think of as the opposite of &quot;parallel&quot;).

I suppose &quot;sequence&quot; here means a &quot;serial execution context&quot;--some mechanism that forces code to execute serially (e.g., not parallel, or &quot;in sequence&quot;), but I&apos;m not sure SerialAssertion or SerialExecutionAssertion (or SerialExecutionContextAssertion) is any better than SequenceAssertion.  Maybe SequentialExecutionAssertion?

Just writing this down in case it causes someone else to think of a better name.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1843596</commentid>
    <comment_count>10</comment_count>
      <attachid>452503</attachid>
    <who name="Ryosuke Niwa">rniwa</who>
    <bug_when>2022-02-18 13:10:38 -0800</bug_when>
    <thetext>Comment on attachment 452503
Patch

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

&gt;&gt; Source/WTF/wtf/ThreadAssertions.h:49
&gt;&gt; +class WTF_CAPABILITY_LOCK SequenceAssertion {
&gt; 
&gt; For what it&apos;s worth I&apos;m really not a fan of the SequenceAssertion naming. I have trouble making the connection between thread / work queue and the term &quot;sequence&quot;.
&gt; I understand why you chose this name of course but I still think it is not clear enough.
&gt; 
&gt; Sadly it is hard for me to come up with a better name here. Maybe &quot;ThreadingAssertion&quot;? &quot;ThreadOrWorkQueueAssertion&quot;?
&gt; 
&gt; I added a few people in cc who often have good naming proposals.

How about NoParallelismAssertion? or ParallelismDisallowedAssertion?
I like ThreadOrWorkQueueAssertion but it sort of lacks information about
what aspect of thread or work queue is being asserted.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1843597</commentid>
    <comment_count>11</comment_count>
    <who name="Chris Dumez">cdumez</who>
    <bug_when>2022-02-18 13:12:01 -0800</bug_when>
    <thetext>(In reply to Ryosuke Niwa from comment #10)
&gt; Comment on attachment 452503 [details]
&gt; Patch
&gt; 
&gt; View in context:
&gt; https://bugs.webkit.org/attachment.cgi?id=452503&amp;action=review
&gt; 
&gt; &gt;&gt; Source/WTF/wtf/ThreadAssertions.h:49
&gt; &gt;&gt; +class WTF_CAPABILITY_LOCK SequenceAssertion {
&gt; &gt; 
&gt; &gt; For what it&apos;s worth I&apos;m really not a fan of the SequenceAssertion naming. I have trouble making the connection between thread / work queue and the term &quot;sequence&quot;.
&gt; &gt; I understand why you chose this name of course but I still think it is not clear enough.
&gt; &gt; 
&gt; &gt; Sadly it is hard for me to come up with a better name here. Maybe &quot;ThreadingAssertion&quot;? &quot;ThreadOrWorkQueueAssertion&quot;?
&gt; &gt; 
&gt; &gt; I added a few people in cc who often have good naming proposals.
&gt; 
&gt; How about NoParallelismAssertion? or ParallelismDisallowedAssertion?
&gt; I like ThreadOrWorkQueueAssertion but it sort of lacks information about
&gt; what aspect of thread or work queue is being asserted.

I think it is made clear by how it is used:
`assertIsCurrent(m_threadOrWorkQueueAssertion);`</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1843633</commentid>
    <comment_count>12</comment_count>
    <who name="Jean-Yves Avenard [:jya]">jean-yves.avenard</who>
    <bug_when>2022-02-18 13:50:25 -0800</bug_when>
    <thetext>In https://bugs.webkit.org/show_bug.cgi?id=235353 where I wanted to assert that we were running on a particular WorkQueue I added the following

void WorkQueueBase::assertIsOnWorkQueue() const
{
#if ASSERT_ENABLED
    dispatch_assert_queue(m_dispatchQueue.get());
#endif
}

For naming,
in gecko&apos;s xpcom, they have EventQueue and SerialEventQueue that inherits from it.

A thread is a SerialEventQueue, a ConcurrentWorkQueue is an EventQueue</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1843790</commentid>
    <comment_count>13</comment_count>
    <who name="Ryosuke Niwa">rniwa</who>
    <bug_when>2022-02-18 21:55:47 -0800</bug_when>
    <thetext>(In reply to Chris Dumez from comment #11)
&gt; (In reply to Ryosuke Niwa from comment #10)
&gt; &gt; Comment on attachment 452503 [details]
&gt; &gt; Patch
&gt; &gt; 
&gt; &gt; View in context:
&gt; &gt; https://bugs.webkit.org/attachment.cgi?id=452503&amp;action=review
&gt; &gt; 
&gt; &gt; &gt;&gt; Source/WTF/wtf/ThreadAssertions.h:49
&gt; &gt; &gt;&gt; +class WTF_CAPABILITY_LOCK SequenceAssertion {
&gt; &gt; &gt; 
&gt; &gt; &gt; For what it&apos;s worth I&apos;m really not a fan of the SequenceAssertion naming. I have trouble making the connection between thread / work queue and the term &quot;sequence&quot;.
&gt; &gt; &gt; I understand why you chose this name of course but I still think it is not clear enough.
&gt; &gt; &gt; 
&gt; &gt; &gt; Sadly it is hard for me to come up with a better name here. Maybe &quot;ThreadingAssertion&quot;? &quot;ThreadOrWorkQueueAssertion&quot;?
&gt; &gt; &gt; 
&gt; &gt; &gt; I added a few people in cc who often have good naming proposals.
&gt; &gt; 
&gt; &gt; How about NoParallelismAssertion? or ParallelismDisallowedAssertion?
&gt; &gt; I like ThreadOrWorkQueueAssertion but it sort of lacks information about
&gt; &gt; what aspect of thread or work queue is being asserted.
&gt; 
&gt; I think it is made clear by how it is used:
&gt; `assertIsCurrent(m_threadOrWorkQueueAssertion);`

This reads weird. What we really want to say is something like:
ASSERT(thread or work queue is what we expect it to be)
right? In that case, &lt;whatever&gt; should be thread or a work queue, not an assertion.

So perhaps this should be called something like ThreadOrWorkQueue or even ThreadOrWorkQueueHandle so that we can say:
ASSERT(m_threadOrWorkQueue.isCurrent());
or
ASSERT(m_threadOrWorkQueueHandle.isCurrent());</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1843794</commentid>
    <comment_count>14</comment_count>
      <attachid>452503</attachid>
    <who name="Ryosuke Niwa">rniwa</who>
    <bug_when>2022-02-18 22:22:24 -0800</bug_when>
    <thetext>Comment on attachment 452503
Patch

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

&gt;&gt; Source/WTF/wtf/ThreadAssertions.h:63
&gt;&gt; +    uint32_t m_uid { currentSequenceID() };
&gt; 
&gt; For example, I think currentThreadOrWorkQueueID() would read better than currentSequenceID() here, even if it is a bit of a mouthful.

Yeah, that would read a lot better.

&gt; Source/WTF/wtf/Threading.h:441
&gt; +inline constexpr uint32_t invalidSequenceID { 0 };

Can we use enum class instead of uint32_t so that we don&apos;t accidentally implicitly coerce it to different integer types?
e.g. enum class ThreadOrWorkQueueIdentifier : uint32_t { Invalid };

&gt;&gt; Source/WTF/wtf/WorkQueue.h:116
&gt;&gt; +    WTF_EXPORT_PRIVATE void assertIsCurrent() const;
&gt; 
&gt; I think ideally, these assertIsCurrent() function would not be behind a ASSERT_ENABLED flag because this will require every call site to check for the flag and it will look ugly.
&gt; I&apos;d rather we define the function unconditionally and only conditionalize its implementation (making sure that its implementation is both empty and inlined when !ASSERT_ENABLED.

I&apos;d like to make this function available everywhere though.
I can definitely see cases where we want to release-assert it.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1843811</commentid>
    <comment_count>15</comment_count>
    <who name="Chris Dumez">cdumez</who>
    <bug_when>2022-02-19 00:04:17 -0800</bug_when>
    <thetext>(In reply to Ryosuke Niwa from comment #13)
&gt; (In reply to Chris Dumez from comment #11)
&gt; &gt; (In reply to Ryosuke Niwa from comment #10)
&gt; &gt; &gt; Comment on attachment 452503 [details]
&gt; &gt; &gt; Patch
&gt; &gt; &gt; 
&gt; &gt; &gt; View in context:
&gt; &gt; &gt; https://bugs.webkit.org/attachment.cgi?id=452503&amp;action=review
&gt; &gt; &gt; 
&gt; &gt; &gt; &gt;&gt; Source/WTF/wtf/ThreadAssertions.h:49
&gt; &gt; &gt; &gt;&gt; +class WTF_CAPABILITY_LOCK SequenceAssertion {
&gt; &gt; &gt; &gt; 
&gt; &gt; &gt; &gt; For what it&apos;s worth I&apos;m really not a fan of the SequenceAssertion naming. I have trouble making the connection between thread / work queue and the term &quot;sequence&quot;.
&gt; &gt; &gt; &gt; I understand why you chose this name of course but I still think it is not clear enough.
&gt; &gt; &gt; &gt; 
&gt; &gt; &gt; &gt; Sadly it is hard for me to come up with a better name here. Maybe &quot;ThreadingAssertion&quot;? &quot;ThreadOrWorkQueueAssertion&quot;?
&gt; &gt; &gt; &gt; 
&gt; &gt; &gt; &gt; I added a few people in cc who often have good naming proposals.
&gt; &gt; &gt; 
&gt; &gt; &gt; How about NoParallelismAssertion? or ParallelismDisallowedAssertion?
&gt; &gt; &gt; I like ThreadOrWorkQueueAssertion but it sort of lacks information about
&gt; &gt; &gt; what aspect of thread or work queue is being asserted.
&gt; &gt; 
&gt; &gt; I think it is made clear by how it is used:
&gt; &gt; `assertIsCurrent(m_threadOrWorkQueueAssertion);`
&gt; 
&gt; This reads weird. What we really want to say is something like:
&gt; ASSERT(thread or work queue is what we expect it to be)
&gt; right? In that case, &lt;whatever&gt; should be thread or a work queue, not an
&gt; assertion.
&gt; 
&gt; So perhaps this should be called something like ThreadOrWorkQueue or even
&gt; ThreadOrWorkQueueHandle so that we can say:
&gt; ASSERT(m_threadOrWorkQueue.isCurrent());
&gt; or
&gt; ASSERT(m_threadOrWorkQueueHandle.isCurrent());

I agree with Ryosuke that using an ASSERT() would be better than the assertIsCurrent() free function. It would be a lot more consistent with current WebKit practices.

The issue with the Handle naming is that the class is question actually does embed an assertion. There is an assertion in its destructor to make sure it gets called on the same work queue / thread as the constructor.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1843813</commentid>
    <comment_count>16</comment_count>
    <who name="Jean-Yves Avenard [:jya]">jean-yves.avenard</who>
    <bug_when>2022-02-19 00:11:16 -0800</bug_when>
    <thetext>(In reply to Ryosuke Niwa from comment #13)

&gt; This reads weird. What we really want to say is something like:
&gt; ASSERT(thread or work queue is what we expect it to be)
&gt; right? In that case, &lt;whatever&gt; should be thread or a work queue, not an
&gt; assertion.
&gt; 
&gt; So perhaps this should be called something like ThreadOrWorkQueue or even
&gt; ThreadOrWorkQueueHandle so that we can say:
&gt; ASSERT(m_threadOrWorkQueue.isCurrent());
&gt; or
&gt; ASSERT(m_threadOrWorkQueueHandle.isCurrent());

Unfortunately macOS&apos;s dispatch_queues don&apos;t make it easy to achieve such semantic.
You can&apos;t retrieve what the currently running dispatch_queue is, and the only method provided to check if you are currently running code in the dispatch_queue is `dispatch_assert_queue` 
(https://developer.apple.com/documentation/dispatch/1642201-dispatch_assert_queue)

So that makes implementing WorkQueue::isCurrent() overly complicated (it&apos;s doable though, but at a cost: you could store a value in a TLS variable before each run of a task and restore the previous value after the task is run)
(gecko&apos;s TaskQueue implementation: https://searchfox.org/mozilla-central/source/xpcom/threads/TaskQueue.cpp#199-215)</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1843880</commentid>
    <comment_count>17</comment_count>
    <who name="Chris Dumez">cdumez</who>
    <bug_when>2022-02-19 11:28:09 -0800</bug_when>
    <thetext>(In reply to Jean-Yves Avenard [:jya] from comment #16)
&gt; (In reply to Ryosuke Niwa from comment #13)
&gt; 
&gt; &gt; This reads weird. What we really want to say is something like:
&gt; &gt; ASSERT(thread or work queue is what we expect it to be)
&gt; &gt; right? In that case, &lt;whatever&gt; should be thread or a work queue, not an
&gt; &gt; assertion.
&gt; &gt; 
&gt; &gt; So perhaps this should be called something like ThreadOrWorkQueue or even
&gt; &gt; ThreadOrWorkQueueHandle so that we can say:
&gt; &gt; ASSERT(m_threadOrWorkQueue.isCurrent());
&gt; &gt; or
&gt; &gt; ASSERT(m_threadOrWorkQueueHandle.isCurrent());
&gt; 
&gt; Unfortunately macOS&apos;s dispatch_queues don&apos;t make it easy to achieve such
&gt; semantic.
&gt; You can&apos;t retrieve what the currently running dispatch_queue is, and the
&gt; only method provided to check if you are currently running code in the
&gt; dispatch_queue is `dispatch_assert_queue` 
&gt; (https://developer.apple.com/documentation/dispatch/1642201-
&gt; dispatch_assert_queue)
&gt; 
&gt; So that makes implementing WorkQueue::isCurrent() overly complicated (it&apos;s
&gt; doable though, but at a cost: you could store a value in a TLS variable
&gt; before each run of a task and restore the previous value after the task is
&gt; run)
&gt; (gecko&apos;s TaskQueue implementation:
&gt; https://searchfox.org/mozilla-central/source/xpcom/threads/TaskQueue.cpp#199-
&gt; 215)

What do you mean? This patch already stores an ID in dispatch queue specific storage, and we can access it via currentSequenceID() and we can check if it is the same ID as the « handle ».</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1843921</commentid>
    <comment_count>18</comment_count>
    <who name="Jean-Yves Avenard [:jya]">jean-yves.avenard</who>
    <bug_when>2022-02-19 15:36:33 -0800</bug_when>
    <thetext>(In reply to Chris Dumez from comment #17)
&gt; What do you mean? This patch already stores an ID in dispatch queue specific
&gt; storage, and we can access it via currentSequenceID() and we can check if it
&gt; is the same ID as the « handle ».

Missed that part completely :)

neat trick !</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1844191</commentid>
    <comment_count>19</comment_count>
      <attachid>452503</attachid>
    <who name="Antti Koivisto">koivisto</who>
    <bug_when>2022-02-21 06:40:51 -0800</bug_when>
    <thetext>Comment on attachment 452503
Patch

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

&gt;&gt; Source/WTF/wtf/Threading.h:107
&gt;&gt; +class WTF_CAPABILITY_LOCK Thread : public ThreadSafeRefCounted&lt;Thread&gt; {
&gt; 
&gt; I admit I don&apos;t understand why we&apos;re claiming the Thread class is a lock.

This patch might be easier to understand if it didn&apos;t use &quot;lock&quot; terminology for these capabilities. Maybe there could instead be a separate WTF_CAPABILITY_QUEUE/WTF_ASSERTS_ACQUIRED_QUEUE or similar (if I understand correctly the capability names are arbitrary strings that show up in error messages)? Clang seems to recommend against calling non-mutexy things locks too in https://clang.llvm.org/docs/ThreadSafetyAnalysis.html#reference-guide:

&quot;For historical reasons, prior versions of thread safety used macro names that were very lock-centric. These macros have since been renamed to fit a more general capability model.&quot;</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1844192</commentid>
    <comment_count>20</comment_count>
      <attachid>452503</attachid>
    <who name="Antti Koivisto">koivisto</who>
    <bug_when>2022-02-21 07:00:26 -0800</bug_when>
    <thetext>Comment on attachment 452503
Patch

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

&gt;&gt; Source/WTF/wtf/Threading.h:436
&gt;&gt; +inline void assertIsCurrent(const Thread&amp; thread) WTF_ASSERTS_ACQUIRED_LOCK(thread)
&gt; 
&gt; And why this &quot;acquires&quot; the lock.

Maybe these could be called acquireQueue() or similar since acquiring the capability for the subsequent code is really the core thing it does?

(&quot;Queue&quot; might be a decent name covering both Threads and WorkQueues. While generic the meaning should be clear from context.)</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1844570</commentid>
    <comment_count>21</comment_count>
    <who name="Antti Koivisto">koivisto</who>
    <bug_when>2022-02-21 23:50:50 -0800</bug_when>
    <thetext>&gt; (&quot;Queue&quot; might be a decent name covering both Threads and WorkQueues. While
&gt; generic the meaning should be clear from context.)

Actually I&apos;m not sure there is value in unifying these in the first place. Threads and WorkQueues are distinct concepts. Can they just have separate capabilities?</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1844598</commentid>
    <comment_count>22</comment_count>
      <attachid>452842</attachid>
    <who name="Kimmo Kinnunen">kkinnunen</who>
    <bug_when>2022-02-22 01:35:55 -0800</bug_when>
    <thetext>Created attachment 452842
Patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1844610</commentid>
    <comment_count>23</comment_count>
    <who name="Kimmo Kinnunen">kkinnunen</who>
    <bug_when>2022-02-22 02:08:52 -0800</bug_when>
    <thetext>Thank you for spending the time!

&gt;The name Sequence however is a bit confusing.

This discussion should be continued in bug 237026 and should not block this patch unless the small part left in this bug still bothers the reviewers.

&gt; I admit I don&apos;t understand why we&apos;re claiming the Thread class is a lock.

This confusion is addressed in bug 237022 that this bug now blocks on.

&gt; So perhaps this should be called something like ThreadOrWorkQueue or even  ThreadOrWorkQueueHandle so that we can say:
&gt; ASSERT(m_threadOrWorkQueue.isCurrent());
&gt; or
&gt; ASSERT(m_threadOrWorkQueueHandle.isCurrent());

These are invalid suggestions that go against the exact purpose of this patch.
Thread safety analysis can not prove anything based on this.

&gt; So that makes implementing WorkQueue::isCurrent() overly complicated 

Implementing WorkQueue::isCurrent() is possible. It is inferior to currently presented code because:
- it needs an extra instance variable that would be mostly useless
- it is the antithesis of the purpose of this work, e.g. to enable more use of the thread safety analysis. For the purposes of this work, I cannot see any correct use-case for isCurrent(). It is also addable later trivially. This work should not discuss this function unless it somehow blocks the needed functionality in this patch.

&gt; .. ASSERT_ENABLED ...

I&apos;d like to continue with this approach, e.g. enabling the real assertions ASSERT_ENABLED. This is to match the exact existing code we have. Should we want something different, I propose we address that in separate work.



I re-worked the patch to reduce the possible confusion.

I removed the changes that relate to the important naming discussion.

The payload of the patch is roughly 10 lines.

There&apos;s 2 tests explaining the intent should it be confusing. 

There&apos;s numerous lines of examples what are the implications.

Should you be too busy for a review of the *subject matter*, and should something slip in to trunk where you do not like some nomenclature or textual representation: we can have another bug, assigned to me, fixing that to your personal preference.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1845083</commentid>
    <comment_count>24</comment_count>
      <attachid>452963</attachid>
    <who name="Kimmo Kinnunen">kkinnunen</who>
    <bug_when>2022-02-23 04:12:22 -0800</bug_when>
    <thetext>Created attachment 452963
Patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1845114</commentid>
    <comment_count>25</comment_count>
      <attachid>452973</attachid>
    <who name="Kimmo Kinnunen">kkinnunen</who>
    <bug_when>2022-02-23 06:19:31 -0800</bug_when>
    <thetext>Created attachment 452973
Patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1845533</commentid>
    <comment_count>26</comment_count>
      <attachid>452973</attachid>
    <who name="Antti Koivisto">koivisto</who>
    <bug_when>2022-02-24 00:05:58 -0800</bug_when>
    <thetext>Comment on attachment 452973
Patch

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

r=me, cool patch

&gt; Source/WTF/wtf/Threading.h:106
&gt; +class WTF_CAPABILITY(&quot;is current&quot;) Thread : public ThreadSafeRefCounted&lt;Thread&gt; {

Space here looks od but I suppose it is ok.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1845534</commentid>
    <comment_count>27</comment_count>
      <attachid>452973</attachid>
    <who name="Antti Koivisto">koivisto</who>
    <bug_when>2022-02-24 00:06:36 -0800</bug_when>
    <thetext>Comment on attachment 452973
Patch

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

&gt; Source/WebKit/GPUProcess/graphics/RemoteGraphicsContextGL.h:-150
&gt; -    NO_UNIQUE_ADDRESS ThreadAssertion m_streamThread;

Can ThreadAssertion now be removed?</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1845537</commentid>
    <comment_count>28</comment_count>
      <attachid>452973</attachid>
    <who name="Kimmo Kinnunen">kkinnunen</who>
    <bug_when>2022-02-24 00:19:32 -0800</bug_when>
    <thetext>Comment on attachment 452973
Patch

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

&gt;&gt; Source/WebKit/GPUProcess/graphics/RemoteGraphicsContextGL.h:-150
&gt;&gt; -    NO_UNIQUE_ADDRESS ThreadAssertion m_streamThread;
&gt; 
&gt; Can ThreadAssertion now be removed?

No, it&apos;s still in use, although incorrectly. It&apos;s also usefulish but not really useful.
It&apos;s also reworked in the bug depending on this bug, e.g. the SequenceAssertion work.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1845538</commentid>
    <comment_count>29</comment_count>
    <who name="Kimmo Kinnunen">kkinnunen</who>
    <bug_when>2022-02-24 00:22:49 -0800</bug_when>
    <thetext>(In reply to Kimmo Kinnunen from comment #28)
&gt; Comment on attachment 452973 [details]
&gt; Patch
&gt; 
&gt; View in context:
&gt; https://bugs.webkit.org/attachment.cgi?id=452973&amp;action=review
&gt; 
&gt; &gt;&gt; Source/WebKit/GPUProcess/graphics/RemoteGraphicsContextGL.h:-150
&gt; &gt;&gt; -    NO_UNIQUE_ADDRESS ThreadAssertion m_streamThread;
&gt; &gt; 
&gt; &gt; Can ThreadAssertion now be removed?
&gt; 
&gt; No, it&apos;s still in use, although incorrectly. It&apos;s also usefulish but not
&gt; really useful.
&gt; It&apos;s also reworked in the bug depending on this bug, e.g. the
&gt; SequenceAssertion work.

SequenceAssertion is useful in fixing the problem that is WeakPtr `m_impl-&gt;wasConstructedOnMainThread() == isMainThread()`</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1845547</commentid>
    <comment_count>30</comment_count>
    <who name="EWS">ews-feeder</who>
    <bug_when>2022-02-24 01:04:45 -0800</bug_when>
    <thetext>Committed r290418 (247726@main): &lt;https://commits.webkit.org/247726@main&gt;

All reviewed patches have been landed. Closing bug and clearing flags on attachment 452973.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1845548</commentid>
    <comment_count>31</comment_count>
    <who name="Radar WebKit Bug Importer">webkit-bug-importer</who>
    <bug_when>2022-02-24 01:05:23 -0800</bug_when>
    <thetext>&lt;rdar://problem/89405701&gt;</thetext>
  </long_desc>
      
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>452502</attachid>
            <date>2022-02-18 03:02:56 -0800</date>
            <delta_ts>2022-02-18 04:01:06 -0800</delta_ts>
            <desc>Patch</desc>
            <filename>bug-236832-20220218130254.patch</filename>
            <type>text/plain</type>
            <size>23280</size>
            <attacher name="Kimmo Kinnunen">kkinnunen</attacher>
            
              <data encoding="base64">U3VidmVyc2lvbiBSZXZpc2lvbjogMjkwMDM0CmRpZmYgLS1naXQgYS9Tb3VyY2UvV1RGL0NoYW5n
ZUxvZyBiL1NvdXJjZS9XVEYvQ2hhbmdlTG9nCmluZGV4IGUxODZmYjA5NmMzYTZlOGZmM2VmN2U2
ZGVjZDE2ZDI1ODY5ZGNhMjguLmQ2YjFmMzE1YjBmOTU5NWVlYjBiNzhkOTdkZTYxZTM3YTIyMGEw
NzQgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XVEYvQ2hhbmdlTG9nCisrKyBiL1NvdXJjZS9XVEYvQ2hh
bmdlTG9nCkBAIC0xLDMgKzEsNDcgQEAKKzIwMjItMDItMTggIEtpbW1vIEtpbm51bmVuICA8a2tp
bm51bmVuQGFwcGxlLmNvbT4KKworICAgICAgICBUaHJlYWQgc2FmZXR5IGFuYWx5c2lzIHRvIGFz
c2VydCAiY29kZSBpcyBydW4gc2VxdWVudGlhbGx5IiBpcyBub3QgdXNlZnVsIHdoZW4gY29kZSBp
cyBtYWlubHkgcnVuIHdpdGggV29ya1F1ZXVlcworICAgICAgICBodHRwczovL2J1Z3Mud2Via2l0
Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9MjM2ODMyCisKKyAgICAgICAgUmV2aWV3ZWQgYnkgTk9CT0RZ
IChPT1BTISkuCisKKyAgICAgICAgVGhyZWFkIHNhZmV0eSBhbmFseXNpcyBpcyBub3QgdXNlZnVs
IHdoZW4gY29kZSBpcyBtYWlubHkgcnVuIHdpdGggV29ya1F1ZXVlcy4KKyAgICAgICAgV29ya1F1
ZXVlIHJ1bm5hYmxlcyBtaWdodCBydW4gaW4gYXJiaXRyYXJ5IHRocmVhZCwgYnV0IHN0aWxsIHNl
cmlhbGx5IGluIGEgc3BlY2lmaWMgIndvcmsgcXVldWUiLgorCisgICAgICAgIFJlbmFtZSBUaHJl
YWRBc3NlcnRpb24gdG8gU2VxdWVuY2VBc3NlcnRpb24sIGFuZCBhc3NlcnQgdGhhdCBpZiB0aGUg
YXNzZXJ0aW9uIGlzIGNyZWF0ZWQgaW4gYSBXb3JrUXVldWUsCisgICAgICAgIHRoZSBhc3NlcnRp
b24gY2hlY2tzIGZvciB0aGUgd29yayBxdWV1ZS4gSWYgaXQgaXMgY3JlYXRlZCBvbiBhIFRocmVh
ZCwgaXQgY2hlY2tzIGZvciB0aGF0LgorCisgICAgICAgIE1ha2UgVGhyZWFkIGFuZCBXb3JrUXVl
dWUgYmUgc2ltaWxhciB0byBTZXF1ZW5jZUFzc2VydGlvbiwgZS5nLiB0byBob2xkIHRoZSBsb2Nr
IGNhcGFiaWxpdHkuIFRoaXMgbWVhbnMKKyAgICAgICAgdGhlIGBhc3NlcnRJc0N1cnJlbnQodGhy
ZWFkL3dvcmtRdWV1ZSlgIGNhbiBlc3RhYmxpc2ggdGhhdCB0aGUgY2FsbGVyIGhvbGRzIHRoZSBj
YXBhYml0eSwgZS5nLiB0aGF0CisgICAgICAgIHRoZSBjYWxsZXIgaXMgcnVubmluZyBpbiB0aGUg
cGFydGljdWxhciBzZXF1ZW5jZS4KKworICAgICAgICBJbXBsZW1lbnQgYnkgZGVmaW5pbmcgdGVy
bSAic2VxdWVuY2UiLCBlLmcuIHNvbWV0aGluZyB3aGVyZSBjb2RlIGV4ZWN1dGVzIHNlcXVlbnRp
YWxseS4KKworICAgICAgICBJbXBsZW1lbnQgZm9yIG5vbi1Db2NvYSBieSBqdXN0IHVzaW5nIHRo
cmVhZCBpZCBmb3IgdGhlIHNlcXVlbmNlIGlkLiBBbGwgV29ya1F1ZXVlcyBoYXZlIHVuaXF1ZSB0
aHJlYWRzCisgICAgICAgIGFuZCBhbGwgVGhyZWFkcyBoYXZlIHVuaXF1ZSBpZHMuIFRoaXMgbWVh
bnMgV29ya1F1ZXVlcyBjYW4gYmUgZGlzdGlucXVpc2hlZCBmcm9tIFRocmVhZHMgd2l0aG91dCBX
b3JrUXVldWVzLgorCisgICAgICAgIEltcGxlbWVudCBmb3Igbm9uLUNvY29hIGJ5IHVzaW5nIHRo
ZSBzYW1lIHVpZCBpZCBuYW1lc3BhY2UgZm9yIFdvcmtRdWV1ZXMgYXMgVGhyZWFkcyBoYXZlLiBT
dG9yZSB0aGUgdWlkCisgICAgICAgIGluIERpc3BhdGNoIGRpc3BhdGNoIHF1ZXVlIHNwZWNpZmlj
IGZpZWxkLiBJZiB0aGUgY29kZSBpcyBub3QgcnVubmluZyBpbiBEaXNwYXRjaCwgcmV0dXJuIHRo
ZSBjdXJyZW50CisgICAgICAgIHRocmVhZCB1aWQuIFNpbmNlIHRoZSB1aWQgbmFtZXNwYWNlIGlz
IHRoZSBzYW1lLCBXb3JrUXVldWVzIGNhbiBiZSBkaXN0aW51aXNoZWQgZnJvbSBUaHJlYWRzIHdp
dGhvdXQgV29ya1F1ZXVlcy4KKworICAgICAgICBJbiBib3RoIGNhc2VzLCBub24tV2ViS2l0IHBs
YXRmb3JtIHRocmVhZHMgZ2V0IGFsc28gYSBUaHJlYWQsIHNvIHRoZXkncmUgZGlzdGlucXVpc2hl
ZCBmcm9tIFdvcmtRdWV1ZXMuCisKKyAgICAgICAgVGVzdGVkIGJ5IG5ldyBBUEkgdGVzdHMuCisK
KyAgICAgICAgKiB3dGYvVGhyZWFkQXNzZXJ0aW9ucy5oOgorICAgICAgICAoV1RGOjpXVEZfQVNT
RVJUU19BQ1FVSVJFRF9MT0NLKToKKyAgICAgICAgKiB3dGYvVGhyZWFkaW5nLmg6CisgICAgICAg
IChXVEY6OldURl9BU1NFUlRTX0FDUVVJUkVEX0xPQ0spOgorICAgICAgICAqIHd0Zi9Xb3JrUXVl
dWUuaDoKKyAgICAgICAgKFdURjo6V1RGX0FTU0VSVFNfQUNRVUlSRURfTE9DSyk6CisgICAgICAg
ICogd3RmL2NvY29hL1dvcmtRdWV1ZUNvY29hLmNwcDoKKyAgICAgICAgKFdURjo6V29ya1F1ZXVl
QmFzZTo6cGxhdGZvcm1Jbml0aWFsaXplKToKKyAgICAgICAgKFdURjo6V29ya1F1ZXVlOjphc3Nl
cnRJc0N1cnJlbnQgY29uc3QpOgorICAgICAgICAoV1RGOjpjdXJyZW50U2VxdWVuY2VJRCk6Cisg
ICAgICAgICogd3RmL2dlbmVyaWMvV29ya1F1ZXVlR2VuZXJpYy5jcHA6CisgICAgICAgIChXVEY6
OldvcmtRdWV1ZUJhc2U6OnBsYXRmb3JtSW5pdGlhbGl6ZSk6CisgICAgICAgIChXVEY6OmN1cnJl
bnRTZXF1ZW5jZUlEKToKKwogMjAyMi0wMi0xNyAgQ2hyaXMgRHVtZXogIDxjZHVtZXpAYXBwbGUu
Y29tPgogCiAgICAgICAgIENsZWFuIHVwIC8gb3B0aW1pemUgY2FsbCBzaXRlcyBjb25zdHJ1Y3Rp
bmcgdmVjdG9ycwpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYktpdC9DaGFuZ2VMb2cgYi9Tb3VyY2Uv
V2ViS2l0L0NoYW5nZUxvZwppbmRleCBhODE1MDRmNmFjMzgxNDExYmQxZjE4Nzg1ZDIwNmU2NmI1
N2QxYmJiLi5mMWU3MWJkZWZhOGFiZWVlNGQxZGVmYzQwOTE4MTc1OGFkYWEwNTc0IDEwMDY0NAot
LS0gYS9Tb3VyY2UvV2ViS2l0L0NoYW5nZUxvZworKysgYi9Tb3VyY2UvV2ViS2l0L0NoYW5nZUxv
ZwpAQCAtMSwzICsxLDE3IEBACisyMDIyLTAyLTE4ICBLaW1tbyBLaW5udW5lbiAgPGtraW5udW5l
bkBhcHBsZS5jb20+CisKKyAgICAgICAgVGhyZWFkIHNhZmV0eSBhbmFseXNpcyB0byBhc3NlcnQg
ImNvZGUgaXMgcnVuIHNlcXVlbnRpYWxseSIgaXMgbm90IHVzZWZ1bCB3aGVuIGNvZGUgaXMgbWFp
bmx5IHJ1biB3aXRoIFdvcmtRdWV1ZXMKKyAgICAgICAgaHR0cHM6Ly9idWdzLndlYmtpdC5vcmcv
c2hvd19idWcuY2dpP2lkPTIzNjgzMgorCisgICAgICAgIFJldmlld2VkIGJ5IE5PQk9EWSAoT09Q
UyEpLgorCisgICAgICAgIFJlbmFtZSBUaHJlYWRBc3NlcnRpb24gdG8gU2VxdWVuY2VBc3NlcnRp
b24uCisKKyAgICAgICAgKiBHUFVQcm9jZXNzL2dyYXBoaWNzL1JlbW90ZUdyYXBoaWNzQ29udGV4
dEdMLmg6CisgICAgICAgICogR1BVUHJvY2Vzcy9ncmFwaGljcy9XZWJHUFUvUmVtb3RlR1BVLmg6
CisgICAgICAgICogR1BVUHJvY2Vzcy9tZWRpYS9SZW1vdGVWaWRlb0ZyYW1lT2JqZWN0SGVhcC5o
OgorICAgICAgICAqIEdQVVByb2Nlc3Mvd2VicnRjL1JlbW90ZVNhbXBsZUJ1ZmZlckRpc3BsYXlM
YXllci5oOgorCiAyMDIyLTAyLTE3ICBLaW1tbyBLaW5udW5lbiAgPGtraW5udW5lbkBhcHBsZS5j
b20+CiAKICAgICAgICAgQVNTRVJUSU9OIEZBSUxFRDogVGhyZWFkOjpjdXJyZW50KCkudWlkKCkg
PT0gdGhyZWFkQXNzZXJ0aW9uLm1fdWlkIGZvciBSZW1vdGVWaWRlb0ZyYW1lT2JqZWN0SGVhcApk
aWZmIC0tZ2l0IGEvU291cmNlL1dURi93dGYvVGhyZWFkQXNzZXJ0aW9ucy5oIGIvU291cmNlL1dU
Ri93dGYvVGhyZWFkQXNzZXJ0aW9ucy5oCmluZGV4IDFjYTE2YjRkMDU4OWM5MDIxNmQwZWJlMDBh
OTcwODMyZDhlYTBlZDcuLjg4MTc5NmU1YTY1MzRkMTQ1ZDkxZjNmNjlkY2M2MDk0NTVhMDM5YzAg
MTAwNjQ0Ci0tLSBhL1NvdXJjZS9XVEYvd3RmL1RocmVhZEFzc2VydGlvbnMuaAorKysgYi9Tb3Vy
Y2UvV1RGL3d0Zi9UaHJlYWRBc3NlcnRpb25zLmgKQEAgLTMzLDQwICszMyw0MSBAQAogbmFtZXNw
YWNlIFdURiB7CiAKIC8vIEEgdHlwZSB0byB1c2UgZm9yIGFzc2VydGluZyB0aGF0IHByaXZhdGUg
bWVtYmVyIGZ1bmN0aW9ucyBvciBwcml2YXRlIG1lbWJlciB2YXJpYWJsZXMKLS8vIG9mIGEgY2xh
c3MgYXJlIGFjY2Vzc2VkIGZyb20gY29ycmVjdCB0aHJlYWRzLgorLy8gb2YgYSBjbGFzcyBhcmUg
YWNjZXNzZWQgZnJvbSBjb3JyZWN0IHRocmVhZHMgb3Igd29yayBxdWV1ZXMuCisvLwogLy8gU3Vw
cG9ydHMgcnVuLXRpbWUgY2hlY2tpbmcgd2l0aCBhc3NlcnRpb24gZW5hYmxlZCBidWlsZHMuCiAv
LyBTdXBwb3J0cyBjb21waWxlLXRpbWUgZGVjbGFyYXRpb24gYW5kIGNoZWNraW5nLgogLy8gRXhh
bXBsZToKIC8vIHN0cnVjdCBNeUNsYXNzIHsKLS8vICAgICB2b2lkIGRvVGFzaygpIHsgYXNzZXJ0
SXNDdXJyZW50KG1fb3duZXJUaHJlYWQpOyBkb1Rhc2tJbXBsKCk7IH0KKy8vICAgICB2b2lkIGRv
VGFzaygpIHsgYXNzZXJ0SXNDdXJyZW50KG1fb3duZXJTZXF1ZW5jZSk7IGRvVGFza0ltcGwoKTsg
fQogLy8gICAgIHRlbXBsYXRlPHR5cGVuYW1lPiB2b2lkIGRvVGFza0NvbXBpbGVGYWlsdXJlKCkg
eyBkb1Rhc2tJbXBsKCk7IH0KIC8vIHByaXZhdGU6Ci0vLyAgICAgdm9pZCBkb1Rhc2tJbXBsKCkg
V1RGX1JFUVVJUkVTX0xPQ0sobV9vd25lclRocmVhZCk7Ci0vLyAgICAgaW50IG1fdmFsdWUgV1RG
X0dVQVJERURfQllfTE9DSyhtX293bmVyVGhyZWFkKSB7IDAgfTsKLS8vICAgICBOT19VTklRVUVf
QUREUkVTUyBUaHJlYWRBc3NlcnRpb24gbV9vd25lclRocmVhZDsKKy8vICAgICB2b2lkIGRvVGFz
a0ltcGwoKSBXVEZfUkVRVUlSRVNfTE9DSyhtX293bmVyU2VxdWVuY2UpOworLy8gICAgIGludCBt
X3ZhbHVlIFdURl9HVUFSREVEX0JZX0xPQ0sobV9vd25lclNlcXVlbmNlKSB7IDAgfTsKKy8vICAg
ICBTZXF1ZW5jZUFzc2VydGlvbiBtX293bmVyU2VxdWVuY2UgTk9fVU5JUVVFX0FERFJFU1M7CiAv
LyB9OwotY2xhc3MgV1RGX0NBUEFCSUxJVFlfTE9DSyBUaHJlYWRBc3NlcnRpb24geworY2xhc3Mg
V1RGX0NBUEFCSUxJVFlfTE9DSyBTZXF1ZW5jZUFzc2VydGlvbiB7CiBwdWJsaWM6Ci0gICAgVGhy
ZWFkQXNzZXJ0aW9uKCkgPSBkZWZhdWx0OworICAgIFNlcXVlbmNlQXNzZXJ0aW9uKCkgPSBkZWZh
dWx0OwogICAgIGVudW0gVW5pbml0aWFsaXplZFRhZyB7IFVuaW5pdGlhbGl6ZWQgfTsKLSAgICBj
b25zdGV4cHIgVGhyZWFkQXNzZXJ0aW9uKFVuaW5pdGlhbGl6ZWRUYWcpCisgICAgY29uc3RleHBy
IFNlcXVlbmNlQXNzZXJ0aW9uKFVuaW5pdGlhbGl6ZWRUYWcpCiAjaWYgQVNTRVJUX0VOQUJMRUQK
LSAgICAgICAgOiBtX3VpZCgwKSAvLyBUaHJlYWQ6OnVpZCgpIGRvZXMgbm90IHJldHVybiB0aGlz
LgorICAgICAgICA6IG1fdWlkKGludmFsaWRTZXF1ZW5jZUlEKQogI2VuZGlmCiAgICAgewogICAg
IH0KLSAgICB+VGhyZWFkQXNzZXJ0aW9uKCkgeyBhc3NlcnRJc0N1cnJlbnQoKnRoaXMpOyB9Ci0g
ICAgdm9pZCByZXNldCgpIHsgKnRoaXMgPSBUaHJlYWRBc3NlcnRpb24geyB9OyB9CisgICAgflNl
cXVlbmNlQXNzZXJ0aW9uKCkgeyBhc3NlcnRJc0N1cnJlbnQoKnRoaXMpOyB9CisgICAgdm9pZCBy
ZXNldCgpIHsgKnRoaXMgPSBTZXF1ZW5jZUFzc2VydGlvbiB7IH07IH0KIHByaXZhdGU6CiAjaWYg
QVNTRVJUX0VOQUJMRUQKLSAgICB1aW50MzJfdCBtX3VpZCB7IFRocmVhZDo6Y3VycmVudCgpLnVp
ZCgpIH07CisgICAgdWludDMyX3QgbV91aWQgeyBjdXJyZW50U2VxdWVuY2VJRCgpIH07CiAjZW5k
aWYKLSAgICBmcmllbmQgdm9pZCBhc3NlcnRJc0N1cnJlbnQoY29uc3QgVGhyZWFkQXNzZXJ0aW9u
Jik7CisgICAgZnJpZW5kIHZvaWQgYXNzZXJ0SXNDdXJyZW50KGNvbnN0IFNlcXVlbmNlQXNzZXJ0
aW9uJik7CiB9OwogCi1pbmxpbmUgdm9pZCBhc3NlcnRJc0N1cnJlbnQoY29uc3QgVGhyZWFkQXNz
ZXJ0aW9uJiB0aHJlYWRBc3NlcnRpb24pIFdURl9BU1NFUlRTX0FDUVVJUkVEX0xPQ0sodGhyZWFk
QXNzZXJ0aW9uKQoraW5saW5lIHZvaWQgYXNzZXJ0SXNDdXJyZW50KGNvbnN0IFNlcXVlbmNlQXNz
ZXJ0aW9uJiBzZXF1ZW5jZUFzc2VydGlvbikgV1RGX0FTU0VSVFNfQUNRVUlSRURfTE9DSyhzZXF1
ZW5jZUFzc2VydGlvbikKIHsKLSAgICBBU1NFUlRfVU5VU0VEKHRocmVhZEFzc2VydGlvbiwgVGhy
ZWFkOjpjdXJyZW50KCkudWlkKCkgPT0gdGhyZWFkQXNzZXJ0aW9uLm1fdWlkKTsKKyAgICBBU1NF
UlRfVU5VU0VEKHNlcXVlbmNlQXNzZXJ0aW9uLCBXb3JrUXVldWU6OmN1cnJlbnRJRCgpID09IHNl
cXVlbmNlQXNzZXJ0aW9uLm1fdWlkKTsKIH0KIAogLy8gVHlwZSBmb3IgZ2xvYmFsbHkgbmFtZWQg
YXNzZXJ0aW9ucyBmb3IgZGVzY3JpYmluZyBhY2Nlc3MgcmVxdWlyZW1lbnRzLgpAQCAtOTUsNyAr
OTYsNyBAQCBpbmxpbmUgdm9pZCBhc3NlcnRJc01haW5SdW5Mb29wKCkgV1RGX0FTU0VSVFNfQUNR
VUlSRURfTE9DSyhtYWluUnVuTG9vcCkgeyBBU1NFUgogCiB9CiAKLXVzaW5nIFdURjo6VGhyZWFk
QXNzZXJ0aW9uOwordXNpbmcgV1RGOjpTZXF1ZW5jZUFzc2VydGlvbjsKIHVzaW5nIFdURjo6YXNz
ZXJ0SXNDdXJyZW50OwogdXNpbmcgV1RGOjpOYW1lZEFzc2VydGlvbjsKIHVzaW5nIFdURjo6YXNz
ZXJ0SXNNYWluVGhyZWFkOwpkaWZmIC0tZ2l0IGEvU291cmNlL1dURi93dGYvVGhyZWFkaW5nLmgg
Yi9Tb3VyY2UvV1RGL3d0Zi9UaHJlYWRpbmcuaAppbmRleCAyMzZlYzQzZjUzODFhZWI4YTRkZGNj
NTI4MGZiOTVjYTkwYzM4NDY5Li4yNmNjNDBhNDRiNDVlNzk5MjNjY2Y1ZDgyOTYxOTUyODk0MzRm
MjQzIDEwMDY0NAotLS0gYS9Tb3VyY2UvV1RGL3d0Zi9UaHJlYWRpbmcuaAorKysgYi9Tb3VyY2Uv
V1RGL3d0Zi9UaHJlYWRpbmcuaApAQCAtNDUsNiArNDUsNyBAQAogI2luY2x1ZGUgPHd0Zi9TdGFj
a0JvdW5kcy5oPgogI2luY2x1ZGUgPHd0Zi9TdGFja1N0YXRzLmg+CiAjaW5jbHVkZSA8d3RmL1Ro
cmVhZFNhZmVSZWZDb3VudGVkLmg+CisjaW5jbHVkZSA8d3RmL1RocmVhZFNhZmV0eUFuYWx5c2lz
Lmg+CiAjaW5jbHVkZSA8d3RmL1ZlY3Rvci5oPgogI2luY2x1ZGUgPHd0Zi9Xb3JkTG9jay5oPgog
I2luY2x1ZGUgPHd0Zi90ZXh0L0F0b21TdHJpbmdUYWJsZS5oPgpAQCAtNzYsNiArNzcsNyBAQCBl
bnVtIGNsYXNzIFRocmVhZEdyb3VwQWRkUmVzdWx0OwogCiBjbGFzcyBUaHJlYWRHcm91cDsKIGNs
YXNzIFByaW50U3RyZWFtOworY2xhc3MgV29ya1F1ZXVlOwogCiBXVEZfRVhQT1JUX1BSSVZBVEUg
dm9pZCBpbml0aWFsaXplKCk7CiAKQEAgLTEwMiwxMSArMTA0LDE1IEBAIHB1YmxpYzoKICAgICBX
VEZfRVhQT1JUX1BSSVZBVEUgflRocmVhZFN1c3BlbmRMb2NrZXIoKTsKIH07CiAKLWNsYXNzIFRo
cmVhZCA6IHB1YmxpYyBUaHJlYWRTYWZlUmVmQ291bnRlZDxUaHJlYWQ+IHsKK2NsYXNzIFdURl9D
QVBBQklMSVRZX0xPQ0sgVGhyZWFkIDogcHVibGljIFRocmVhZFNhZmVSZWZDb3VudGVkPFRocmVh
ZD4gewogICAgIHN0YXRpYyBzdGQ6OmF0b21pYzx1aW50MzJfdD4gc191aWQ7CiBwdWJsaWM6CiAg
ICAgZnJpZW5kIGNsYXNzIFRocmVhZEdyb3VwOwogICAgIGZyaWVuZCBXVEZfRVhQT1JUX1BSSVZB
VEUgdm9pZCBpbml0aWFsaXplKCk7CisjaWYgUExBVEZPUk0oQ09DT0EpCisgICAgZnJpZW5kIGNs
YXNzIFdvcmtRdWV1ZUJhc2U7IC8vIEZvciBhY2Nlc3MgdG8gc191aWQsIHNvIFRocmVhZHMgYW5k
IFdvcmtRdWV1ZSBpZHMgYXJlIGluIHRoZSBzYW1lIG5hbWVzcGFjZS4KKyAgICBmcmllbmQgdWlu
dDMyX3QgY3VycmVudFNlcXVlbmNlSUQoKTsKKyNlbmRpZgogCiAgICAgV1RGX0VYUE9SVF9QUklW
QVRFIH5UaHJlYWQoKTsKIApAQCAtNDI3LDkgKzQzMywyNCBAQCBpbmxpbmUgVGhyZWFkJiBUaHJl
YWQ6OmN1cnJlbnQoKQogICAgIHJldHVybiBpbml0aWFsaXplQ3VycmVudFRMUygpOwogfQogCitp
bmxpbmUgdm9pZCBhc3NlcnRJc0N1cnJlbnQoY29uc3QgVGhyZWFkJiB0aHJlYWQpIFdURl9BU1NF
UlRTX0FDUVVJUkVEX0xPQ0sodGhyZWFkKQoreworICAgIEFTU0VSVCgmdGhyZWFkID09ICZUaHJl
YWQ6OmN1cnJlbnQoKSk7Cit9CisKK2lubGluZSBjb25zdGV4cHIgdWludDMyX3QgaW52YWxpZFNl
cXVlbmNlSUQgeyAwIH07CisKKy8vIFJldHVybnMgdW5pcXVlIGlkIGZvciBjdXJyZW50IHdvcmsg
cXVldWUgb3IgdGhyZWFkLgorLy8gUmV0dXJuIHZhbHVlIGlzIG5vdCBgaW52YWxpZFNlcXVlbmNl
SURgLgorV1RGX0VYUE9SVF9QUklWQVRFIHVpbnQzMl90IGN1cnJlbnRTZXF1ZW5jZUlEKCk7CisK
KwogfSAvLyBuYW1lc3BhY2UgV1RGCiAKIHVzaW5nIFdURjo6VGhyZWFkU3VzcGVuZExvY2tlcjsK
IHVzaW5nIFdURjo6VGhyZWFkOwogdXNpbmcgV1RGOjpUaHJlYWRUeXBlOwogdXNpbmcgV1RGOjpH
Q1RocmVhZFR5cGU7Cit1c2luZyBXVEY6OmFzc2VydElzQ3VycmVudDsKK3VzaW5nIFdURjo6Y3Vy
cmVudFNlcXVlbmNlSUQ7Cit1c2luZyBXVEY6OmludmFsaWRTZXF1ZW5jZUlEOwpkaWZmIC0tZ2l0
IGEvU291cmNlL1dURi93dGYvV29ya1F1ZXVlLmggYi9Tb3VyY2UvV1RGL3d0Zi9Xb3JrUXVldWUu
aAppbmRleCAzNjhjMDY2ZDhmOTZiNGJjZTc0MzE4MjUyZTNjMDI2NjYxZDhmNjk3Li4xYmU2YzBk
ODdlZDBhNmVkOWM0MzVkMDY0MjE5YjhkNGE0YTMyMzJmIDEwMDY0NAotLS0gYS9Tb3VyY2UvV1RG
L3d0Zi9Xb3JrUXVldWUuaAorKysgYi9Tb3VyY2UvV1RGL3d0Zi9Xb3JrUXVldWUuaApAQCAtMzAs
NiArMzAsNyBAQAogI2luY2x1ZGUgPHd0Zi9Gb3J3YXJkLmg+CiAjaW5jbHVkZSA8d3RmL0Z1bmN0
aW9uRGlzcGF0Y2hlci5oPgogI2luY2x1ZGUgPHd0Zi9TZWNvbmRzLmg+CisjaW5jbHVkZSA8d3Rm
L1RocmVhZFNhZmV0eUFuYWx5c2lzLmg+CiAjaW5jbHVkZSA8d3RmL1RocmVhZGluZy5oPgogCiAj
aWYgVVNFKENPQ09BX0VWRU5UX0xPT1ApCkBAIC03NSw2ICs3Niw5IEBAIHByb3RlY3RlZDoKICAg
ICBPU09iamVjdFB0cjxkaXNwYXRjaF9xdWV1ZV90PiBtX2Rpc3BhdGNoUXVldWU7CiAjZWxzZQog
ICAgIFJ1bkxvb3AqIG1fcnVuTG9vcDsKKyNpZiBBU1NFUlRfRU5BQkxFRAorICAgIHVpbnQzMl90
IG1fdGhyZWFkSUQgeyAwIH07CisjZW5kaWYKICNlbmRpZgogfTsKIApAQCAtODMsOCArODcsOSBA
QCBwcm90ZWN0ZWQ6CiAgKiBSdW5uYWJsZXMgZGlzcGF0Y2hlZCB0byBhIFdvcmtRdWV1ZSBhcmUg
cmVxdWlyZWQgdG8gZXhlY3V0ZSBzZXJpYWxseS4KICAqIFRoYXQgaXMsIHR3byBkaWZmZXJlbnQg
cnVubmFibGVzIGRpc3BhdGNoZWQgdG8gdGhlIFdvcmtRdWV1ZSBzaG91bGQgbmV2ZXIgYmUgYWxs
b3dlZCB0byBleGVjdXRlIHNpbXVsdGFuZW91c2x5LgogICogVGhleSBtYXkgYmUgZXhlY3V0ZWQg
b24gZGlmZmVyZW50IHRocmVhZHMgYnV0IGNhbiBzYWZlbHkgYmUgdXNlZCBieSBvYmplY3RzIHRo
YXQgYXJlbid0IGFscmVhZHkgdGhyZWFkc2FmZS4KKyAqIFVzZSBgYXNzZXJ0SXNDdXJyZW50KG1f
bXlRdWV1ZSk7YCBpbiBhIHJ1bm5hYmxlIHRvIGFzc2VydCB0aGF0IHRoZSBydW5uYWJsZSBydW5z
IGluIGEgc3BlY2lmaWMgcXVldWUuCiAgKi8KLWNsYXNzIFdvcmtRdWV1ZSA6IHB1YmxpYyBXb3Jr
UXVldWVCYXNlIHsKK2NsYXNzIFdURl9DQVBBQklMSVRZX0xPQ0sgV29ya1F1ZXVlIDogcHVibGlj
IFdvcmtRdWV1ZUJhc2UgewogcHVibGljOgogICAgIFdURl9FWFBPUlRfUFJJVkFURSBzdGF0aWMg
V29ya1F1ZXVlJiBtYWluKCk7CiAKQEAgLTEwNiw4ICsxMTEsMjAgQEAgcHJpdmF0ZToKICAgICBl
eHBsaWNpdCBXb3JrUXVldWUoUnVuTG9vcCYpOwogI2VuZGlmCiAgICAgc3RhdGljIFJlZjxXb3Jr
UXVldWU+IGNvbnN0cnVjdE1haW5Xb3JrUXVldWUoKTsKKworI2lmIEFTU0VSVF9FTkFCTEVECisg
ICAgV1RGX0VYUE9SVF9QUklWQVRFIHZvaWQgYXNzZXJ0SXNDdXJyZW50KCkgY29uc3Q7CisgICAg
ZnJpZW5kIHZvaWQgYXNzZXJ0SXNDdXJyZW50KGNvbnN0IFdvcmtRdWV1ZSYpOworI2VuZGlmCiB9
OwogCitpbmxpbmUgdm9pZCBhc3NlcnRJc0N1cnJlbnQoY29uc3QgV29ya1F1ZXVlJiB3b3JrUXVl
dWUpIFdURl9BU1NFUlRTX0FDUVVJUkVEX0xPQ0sod29ya1F1ZXVlKQoreworI2lmIEFTU0VSVF9F
TkFCTEVECisgICAgd29ya1F1ZXVlLmFzc2VydElzQ3VycmVudCgpOworI2VuZGlmCit9CisKIC8q
KgogICogQSBDb25jdXJyZW50V29ya1F1ZXVlIHVubGlrZSBhIFdvcmtRdWV1ZSBkb2Vzbid0IGd1
YXJhbnRlZSB0aGUgb3JkZXIgaW4gd2hpY2ggdGhlIGRpc3BhdGNoZWQgcnVubmFibGUgd2lsbCBy
dW4KICAqIGFuZCBlYWNoIGNhbiBydW4gY29uY3VycmVudGx5IG9uIGRpZmZlcmVudCB0aHJlYWRz
LgpAQCAtMTI3LDMgKzE0NCw0IEBAIHByaXZhdGU6CiAKIHVzaW5nIFdURjo6V29ya1F1ZXVlOwog
dXNpbmcgV1RGOjpDb25jdXJyZW50V29ya1F1ZXVlOwordXNpbmcgV1RGOjphc3NlcnRJc0N1cnJl
bnQ7CmRpZmYgLS1naXQgYS9Tb3VyY2UvV1RGL3d0Zi9jb2NvYS9Xb3JrUXVldWVDb2NvYS5jcHAg
Yi9Tb3VyY2UvV1RGL3d0Zi9jb2NvYS9Xb3JrUXVldWVDb2NvYS5jcHAKaW5kZXggZjlmNDdmMTFj
Nzg0NWQyNzVlMTFjZjcyMGQwYTg1NjI1OWNiMjIxYy4uOTg0MDRhZDdhOTQ2NmM5ZGM3MmI3NjNh
YmRhZTYwMGIwMWY5OWZlNSAxMDA2NDQKLS0tIGEvU291cmNlL1dURi93dGYvY29jb2EvV29ya1F1
ZXVlQ29jb2EuY3BwCisrKyBiL1NvdXJjZS9XVEYvd3RmL2NvY29hL1dvcmtRdWV1ZUNvY29hLmNw
cApAQCAtMjQsNiArMjQsNyBAQAogICovCiAKICNpbmNsdWRlICJjb25maWcuaCIKKyNpbmNsdWRl
IDx3dGYvVGhyZWFkaW5nLmg+CiAjaW5jbHVkZSA8d3RmL1dvcmtRdWV1ZS5oPgogCiAjaW5jbHVk
ZSA8d3RmL0Jsb2NrUHRyLmg+CkBAIC04Niw2ICs4NywxMSBAQCB2b2lkIFdvcmtRdWV1ZUJhc2U6
OnBsYXRmb3JtSW5pdGlhbGl6ZShjb25zdCBjaGFyKiBuYW1lLCBUeXBlIHR5cGUsIFFPUyBxb3Mp
CiAgICAgYXR0ciA9IGRpc3BhdGNoX3F1ZXVlX2F0dHJfbWFrZV93aXRoX3Fvc19jbGFzcyhhdHRy
LCBUaHJlYWQ6OmRpc3BhdGNoUU9TQ2xhc3MocW9zKSwgMCk7CiAgICAgbV9kaXNwYXRjaFF1ZXVl
ID0gYWRvcHRPU09iamVjdChkaXNwYXRjaF9xdWV1ZV9jcmVhdGUobmFtZSwgYXR0cikpOwogICAg
IGRpc3BhdGNoX3NldF9jb250ZXh0KG1fZGlzcGF0Y2hRdWV1ZS5nZXQoKSwgdGhpcyk7CisgICAg
Ly8gV2UgdXNlICZUaHJlYWQ6OnNfdWlkIGZvciB0aGUga2V5LCBzaW5jZSBpdCdzIGNvbnZlbmll
bnQuIERpc3BhdGNoIGRvZXMgbm90IGRlcmVmZXJlbmNlIGl0LgorICAgIC8vIFdlIHVzZSBUaHJl
YWQ6OnNfdWlkIHRvIGdlbmVyYXRlIHRoZSBpZCBzbyB0aGF0IFdvcmtRdWV1ZXMgYW5kIFRocmVh
ZHMgc2hhcmUgdGhlIGlkIG5hbWVzcGFjZS4KKyAgICAvLyBUaGlzIG1ha2VzIGl0IHBvc3NpYmxl
IHRvIGFzc2VydCB0aGF0IGNvZGUgcnVucyBpbiB0aGUgZXhwZWN0ZWQgc2VxdWVuY2UsIHJlZ2Fy
ZGxlc3Mgb2YgaWYgaXQgaXMKKyAgICAvLyBpbiBhIHRocmVhZCBvciBhIHdvcmsgcXVldWUuCisg
ICAgZGlzcGF0Y2hfcXVldWVfc2V0X3NwZWNpZmljKG1fZGlzcGF0Y2hRdWV1ZS5nZXQoKSwgJlRo
cmVhZDo6c191aWQsIHJlaW50ZXJwcmV0X2Nhc3Q8dm9pZCo+KCsrVGhyZWFkOjpzX3VpZCksIG51
bGxwdHIpOwogfQogCiB2b2lkIFdvcmtRdWV1ZUJhc2U6OnBsYXRmb3JtSW52YWxpZGF0ZSgpCkBA
IC0xMDIsNiArMTA4LDIxIEBAIFJlZjxXb3JrUXVldWU+IFdvcmtRdWV1ZTo6Y29uc3RydWN0TWFp
bldvcmtRdWV1ZSgpCiAgICAgcmV0dXJuIGFkb3B0UmVmKCpuZXcgV29ya1F1ZXVlKGRpc3BhdGNo
X2dldF9tYWluX3F1ZXVlKCkpKTsKIH0KIAorI2lmIEFTU0VSVF9FTkFCTEVECit2b2lkIFdvcmtR
dWV1ZTo6YXNzZXJ0SXNDdXJyZW50KCkgY29uc3QKK3sKKyAgICBkaXNwYXRjaF9hc3NlcnRfcXVl
dWUobV9kaXNwYXRjaFF1ZXVlLmdldCgpKTsKK30KKyNlbmRpZgorCit1aW50MzJfdCBjdXJyZW50
U2VxdWVuY2VJRCgpCit7CisgICAgdWludDMyX3QgdWlkID0gc3RhdGljX2Nhc3Q8dWludDMyX3Q+
KHJlaW50ZXJwcmV0X2Nhc3Q8dWludHB0cl90PihkaXNwYXRjaF9nZXRfc3BlY2lmaWMoJlRocmVh
ZDo6c191aWQpKSk7CisgICAgaWYgKCF1aWQpCisgICAgICAgIHVpZCA9IFRocmVhZDo6Y3VycmVu
dCgpLnVpZCgpOworICAgIHJldHVybiB1aWQ7Cit9CisKIHZvaWQgQ29uY3VycmVudFdvcmtRdWV1
ZTo6YXBwbHkoc2l6ZV90IGl0ZXJhdGlvbnMsIFdURjo6RnVuY3Rpb248dm9pZChzaXplX3QgaW5k
ZXgpPiYmIGZ1bmN0aW9uKQogewogICAgIGRpc3BhdGNoX2FwcGx5KGl0ZXJhdGlvbnMsIGRpc3Bh
dGNoX2dldF9nbG9iYWxfcXVldWUoRElTUEFUQ0hfUVVFVUVfUFJJT1JJVFlfREVGQVVMVCwgMCks
IG1ha2VCbG9ja1B0cihbZnVuY3Rpb24gPSBXVEZNb3ZlKGZ1bmN0aW9uKV0oc2l6ZV90IGluZGV4
KSB7CmRpZmYgLS1naXQgYS9Tb3VyY2UvV1RGL3d0Zi9nZW5lcmljL1dvcmtRdWV1ZUdlbmVyaWMu
Y3BwIGIvU291cmNlL1dURi93dGYvZ2VuZXJpYy9Xb3JrUXVldWVHZW5lcmljLmNwcAppbmRleCBk
MjU3ZDNhNzIwNGVmYjFjYjNhNWQ4OTU0NjEwZjJiMDI3YThkZTUxLi5hNWNmMjNmMDcyNmNmZTRl
NTRhYjIyMmVjNTI0YTdkNGEwZmI3ZTdmIDEwMDY0NAotLS0gYS9Tb3VyY2UvV1RGL3d0Zi9nZW5l
cmljL1dvcmtRdWV1ZUdlbmVyaWMuY3BwCisrKyBiL1NvdXJjZS9XVEYvd3RmL2dlbmVyaWMvV29y
a1F1ZXVlR2VuZXJpYy5jcHAKQEAgLTQzLDYgKzQzLDkgQEAgdm9pZCBXb3JrUXVldWVCYXNlOjpw
bGF0Zm9ybUluaXRpYWxpemUoY29uc3QgY2hhciogbmFtZSwgVHlwZSwgUU9TIHFvcykKIHsKICAg
ICBCaW5hcnlTZW1hcGhvcmUgc2VtYXBob3JlOwogICAgIFRocmVhZDo6Y3JlYXRlKG5hbWUsIFsm
XSB7CisjaWYgQVNTRVJUX0VOQUJMRUQKKyAgICAgICAgbV90aHJlYWRJRCA9IFRocmVhZDo6Y3Vy
cmVudCgpLnVpZCgpOworI2VuZGlmCiAgICAgICAgIG1fcnVuTG9vcCA9ICZSdW5Mb29wOjpjdXJy
ZW50KCk7CiAgICAgICAgIHNlbWFwaG9yZS5zaWduYWwoKTsKICAgICAgICAgbV9ydW5Mb29wLT5y
dW4oKTsKQEAgLTg1LDQgKzg4LDE2IEBAIFJlZjxXb3JrUXVldWU+IFdvcmtRdWV1ZTo6Y29uc3Ry
dWN0TWFpbldvcmtRdWV1ZSgpCiAgICAgcmV0dXJuIGFkb3B0UmVmKCpuZXcgV29ya1F1ZXVlKFJ1
bkxvb3A6Om1haW4oKSkpOwogfQogCisjaWYgQVNTRVJUX0VOQUJMRUQKK3ZvaWQgV29ya1F1ZXVl
Ojphc3NlcnRJc0N1cnJlbnQoKQoreworICAgIEFTU0VSVChtX3RocmVhZElEID09IFRocmVhZDo6
Y3VycmVudCgpLnVpZCgpKTsKK30KKyNlbmRpZgorCit1aW50MzJfdCBjdXJyZW50U2VxdWVuY2VJ
RCgpCit7CisgICAgcmV0dXJuIFRocmVhZDo6Y3VycmVudCgpLnVpZCgpOworfQorCiB9CmRpZmYg
LS1naXQgYS9Tb3VyY2UvV2ViS2l0L0dQVVByb2Nlc3MvZ3JhcGhpY3MvUmVtb3RlR3JhcGhpY3ND
b250ZXh0R0wuaCBiL1NvdXJjZS9XZWJLaXQvR1BVUHJvY2Vzcy9ncmFwaGljcy9SZW1vdGVHcmFw
aGljc0NvbnRleHRHTC5oCmluZGV4IGZmMjg0NWVkNDJmMzQ3YTliOGFiODU3MjFlNjJlZWIxNGU1
MTdmMDguLjRhOGY0MjA0NGRmOTk2YzMwZjhhMjJkMzYxMGU3NmEzOWQ2MjEzNTQgMTAwNjQ0Ci0t
LSBhL1NvdXJjZS9XZWJLaXQvR1BVUHJvY2Vzcy9ncmFwaGljcy9SZW1vdGVHcmFwaGljc0NvbnRl
eHRHTC5oCisrKyBiL1NvdXJjZS9XZWJLaXQvR1BVUHJvY2Vzcy9ncmFwaGljcy9SZW1vdGVHcmFw
aGljc0NvbnRleHRHTC5oCkBAIC0xNDQsNyArMTQ0LDcgQEAgcHJvdGVjdGVkOgogICAgIFJlZjxS
ZW1vdGVWaWRlb0ZyYW1lT2JqZWN0SGVhcD4gbV92aWRlb0ZyYW1lT2JqZWN0SGVhcDsKICNlbmRp
ZgogICAgIFNjb3BlZFdlYkdMUmVuZGVyaW5nUmVzb3VyY2VzUmVxdWVzdCBtX3JlbmRlcmluZ1Jl
c291cmNlc1JlcXVlc3Q7Ci0gICAgTk9fVU5JUVVFX0FERFJFU1MgVGhyZWFkQXNzZXJ0aW9uIG1f
c3RyZWFtVGhyZWFkOworICAgIFNlcXVlbmNlQXNzZXJ0aW9uIG1fc3RyZWFtVGhyZWFkIE5PX1VO
SVFVRV9BRERSRVNTOwogICAgIFdlYkNvcmU6OlByb2Nlc3NJZGVudGlmaWVyIG1fd2ViUHJvY2Vz
c0lkZW50aWZpZXI7CiB9OwogCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViS2l0L0dQVVByb2Nlc3Mv
Z3JhcGhpY3MvV2ViR1BVL1JlbW90ZUdQVS5oIGIvU291cmNlL1dlYktpdC9HUFVQcm9jZXNzL2dy
YXBoaWNzL1dlYkdQVS9SZW1vdGVHUFUuaAppbmRleCA1M2E4Njc1Y2QxOWFlMzcwM2U5OGEyNWEz
YzM3MjFiNDdhMmQ1MjQ1Li5jYzk0NDRkNTJlYmMyN2M1YjY4NTc4MjVjNGE4NzUwMDhiZmUwZDlk
IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViS2l0L0dQVVByb2Nlc3MvZ3JhcGhpY3MvV2ViR1BVL1Jl
bW90ZUdQVS5oCisrKyBiL1NvdXJjZS9XZWJLaXQvR1BVUHJvY2Vzcy9ncmFwaGljcy9XZWJHUFUv
UmVtb3RlR1BVLmgKQEAgLTE0Miw3ICsxNDIsNyBAQCBwcml2YXRlOgogICAgIFJlZjxXZWJHUFU6
Ok9iamVjdEhlYXA+IG1fb2JqZWN0SGVhcCBXVEZfR1VBUkRFRF9CWV9MT0NLKG1fc3RyZWFtVGhy
ZWFkKTsKICAgICBjb25zdCBXZWJHUFVJZGVudGlmaWVyIG1faWRlbnRpZmllcjsKICAgICBSZWY8
UmVtb3RlUmVuZGVyaW5nQmFja2VuZD4gbV9yZW5kZXJpbmdCYWNrZW5kOwotICAgIE5PX1VOSVFV
RV9BRERSRVNTIFRocmVhZEFzc2VydGlvbiBtX3N0cmVhbVRocmVhZDsKKyAgICBTZXF1ZW5jZUFz
c2VydGlvbiBtX3N0cmVhbVRocmVhZCBOT19VTklRVUVfQUREUkVTUzsKICAgICBjb25zdCBXZWJD
b3JlOjpQcm9jZXNzSWRlbnRpZmllciBtX3dlYlByb2Nlc3NJZGVudGlmaWVyOwogfTsKIApkaWZm
IC0tZ2l0IGEvU291cmNlL1dlYktpdC9HUFVQcm9jZXNzL21lZGlhL1JlbW90ZVZpZGVvRnJhbWVP
YmplY3RIZWFwLmggYi9Tb3VyY2UvV2ViS2l0L0dQVVByb2Nlc3MvbWVkaWEvUmVtb3RlVmlkZW9G
cmFtZU9iamVjdEhlYXAuaAppbmRleCBhZDBjYjNiOTYxODQ2YzAxNDU3OWFiZmUzN2I3ZDE3Y2Vl
ZTQ0NmZiLi40M2E4MGM5ZDk4ZDIwMTI2Mjg0NjhkNWUyYWU2NjNkZDkzZTI2OTA1IDEwMDY0NAot
LS0gYS9Tb3VyY2UvV2ViS2l0L0dQVVByb2Nlc3MvbWVkaWEvUmVtb3RlVmlkZW9GcmFtZU9iamVj
dEhlYXAuaAorKysgYi9Tb3VyY2UvV2ViS2l0L0dQVVByb2Nlc3MvbWVkaWEvUmVtb3RlVmlkZW9G
cmFtZU9iamVjdEhlYXAuaApAQCAtNjEsNyArNjEsNyBAQCBwcml2YXRlOgogCiAgICAgR1BVQ29u
bmVjdGlvblRvV2ViUHJvY2VzcyogbV9ncHVDb25uZWN0aW9uVG9XZWJQcm9jZXNzIFdURl9HVUFS
REVEX0JZX0xPQ0sobV9jb25zdW1lVGhyZWFkKTsKICAgICBjb25zdCBSZWY8SVBDOjpDb25uZWN0
aW9uPiBtX2Nvbm5lY3Rpb247Ci0gICAgVGhyZWFkQXNzZXJ0aW9uIG1fY29uc3VtZVRocmVhZCBO
T19VTklRVUVfQUREUkVTUzsKKyAgICBTZXF1ZW5jZUFzc2VydGlvbiBtX2NvbnN1bWVUaHJlYWQg
Tk9fVU5JUVVFX0FERFJFU1M7CiAgICAgU2hhcmVkVmlkZW9GcmFtZVdyaXRlciBtX3NoYXJlZFZp
ZGVvRnJhbWVXcml0ZXI7CiB9OwogCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViS2l0L0dQVVByb2Nl
c3Mvd2VicnRjL1JlbW90ZVNhbXBsZUJ1ZmZlckRpc3BsYXlMYXllci5oIGIvU291cmNlL1dlYktp
dC9HUFVQcm9jZXNzL3dlYnJ0Yy9SZW1vdGVTYW1wbGVCdWZmZXJEaXNwbGF5TGF5ZXIuaAppbmRl
eCA4MDJjOTBmZTllYjY2NGJhOTMyMWQ3YThiZGU1ZDk4NGY0MDNmMWRiLi5iODdmYWE1ZWFjMmVk
MjFiODBjNDU1NTQwMDY3NmQ4ZjU4MGNiZTg5IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViS2l0L0dQ
VVByb2Nlc3Mvd2VicnRjL1JlbW90ZVNhbXBsZUJ1ZmZlckRpc3BsYXlMYXllci5oCisrKyBiL1Nv
dXJjZS9XZWJLaXQvR1BVUHJvY2Vzcy93ZWJydGMvUmVtb3RlU2FtcGxlQnVmZmVyRGlzcGxheUxh
eWVyLmgKQEAgLTk4LDcgKzk4LDcgQEAgcHJpdmF0ZToKICAgICBzdGQ6OnVuaXF1ZV9wdHI8TGF5
ZXJIb3N0aW5nQ29udGV4dD4gbV9sYXllckhvc3RpbmdDb250ZXh0OwogICAgIFNoYXJlZFZpZGVv
RnJhbWVSZWFkZXIgbV9zaGFyZWRWaWRlb0ZyYW1lUmVhZGVyOwogICAgIFJlZjxSZW1vdGVWaWRl
b0ZyYW1lT2JqZWN0SGVhcD4gbV92aWRlb0ZyYW1lT2JqZWN0SGVhcDsKLSAgICBUaHJlYWRBc3Nl
cnRpb24gbV9jb25zdW1lVGhyZWFkIE5PX1VOSVFVRV9BRERSRVNTOworICAgIFNlcXVlbmNlQXNz
ZXJ0aW9uIG1fY29uc3VtZVRocmVhZCBOT19VTklRVUVfQUREUkVTUzsKIAogfTsKIApkaWZmIC0t
Z2l0IGEvVG9vbHMvQ2hhbmdlTG9nIGIvVG9vbHMvQ2hhbmdlTG9nCmluZGV4IGM1MGQyMTIyOTAz
NDFjY2E3MThjNWI1YWM3YTIwMGRiNWQxZjhjNGYuLmJiYmNiYzhiNmYxZGYyMWVkYmQ0Yzk5OTZm
N2FlZWUyZWEzYzlmM2MgMTAwNjQ0Ci0tLSBhL1Rvb2xzL0NoYW5nZUxvZworKysgYi9Ub29scy9D
aGFuZ2VMb2cKQEAgLTEsMyArMSwyMiBAQAorMjAyMi0wMi0xOCAgS2ltbW8gS2lubnVuZW4gIDxr
a2lubnVuZW5AYXBwbGUuY29tPgorCisgICAgICAgIFRocmVhZCBzYWZldHkgYW5hbHlzaXMgdG8g
YXNzZXJ0ICJjb2RlIGlzIHJ1biBzZXF1ZW50aWFsbHkiIGlzIG5vdCB1c2VmdWwgd2hlbiBjb2Rl
IGlzIG1haW5seSBydW4gd2l0aCBXb3JrUXVldWVzCisgICAgICAgIGh0dHBzOi8vYnVncy53ZWJr
aXQub3JnL3Nob3dfYnVnLmNnaT9pZD0yMzY4MzIKKworICAgICAgICBSZXZpZXdlZCBieSBOT0JP
RFkgKE9PUFMhKS4KKworICAgICAgICBUZXN0IHRoZSBhZGRlZCBmdW5jdGlvbmFsaXR5IHRvIGJl
IGFibGUgdG8gdXNlIGFzc2VydElzQ3VycmVudCh0aHJlYWQvd29ya1F1ZXVlKS4KKworICAgICAg
ICBGaXggV1RGX1dvcmtRdWV1ZS5EZXN0cm95RGlzcGF0Y2hlZE9uRGlzcGF0Y2hRdWV1ZSB0ZXN0
LCBpdCBpcyBub3cgYWJsZSB0byBtYWtlIHRoZSBhc3NlcnRpb24gY29ycmVjdGx5LgorICAgICAg
ICAtIFRoZSBvYmplY3QgaXMgY3JlYXRlZCBzb21ld2hlcmUgdGhhdCBpcyBub3QgdGhlIHRlc3Rl
ZCBXb3JrUXVldWUKKyAgICAgICAgLSBUaGUgb2JqZWN0IGlzIGRlc3Ryb3llZCBpbiB0aGUgdGVz
dGVkIFdvcmtRdWV1ZQorCisgICAgICAgICogVGVzdFdlYktpdEFQSS9UZXN0cy9XVEYvVGhyZWFk
QXNzZXJ0aW9uc1Rlc3QuY3BwOgorICAgICAgICAqIFRlc3RXZWJLaXRBUEkvVGVzdHMvV1RGL1Ro
cmVhZGluZy5jcHA6CisgICAgICAgIChUZXN0V2ViS2l0QVBJOjpURVNUKToKKyAgICAgICAgKiBU
ZXN0V2ViS2l0QVBJL1Rlc3RzL1dURi9Xb3JrUXVldWUuY3BwOgorICAgICAgICAoVGVzdFdlYktp
dEFQSTo6VEVTVCk6CisKIDIwMjItMDItMTcgIFNpaHVpIExpdSAgPHNpaHVpX2xpdUBhcHBsZS5j
b20+CiAKICAgICAgICAgRW5zdXJlIE5ldHdvcmtTdG9yYWdlTWFuYWdlcjo6bW92ZURhdGEgcGVy
Zm9ybXMgbW92ZSBvcGVyYXRpb24gYmFzZWQgb24gZGF0YSB0eXBlcwpkaWZmIC0tZ2l0IGEvVG9v
bHMvVGVzdFdlYktpdEFQSS9UZXN0cy9XVEYvVGhyZWFkQXNzZXJ0aW9uc1Rlc3QuY3BwIGIvVG9v
bHMvVGVzdFdlYktpdEFQSS9UZXN0cy9XVEYvVGhyZWFkQXNzZXJ0aW9uc1Rlc3QuY3BwCmluZGV4
IDA3NDlkNmY2MmQ2NDk0YzZlMjgwNjU1Njg1OTA4MjgxN2I4YTdjMDAuLjhjNDEyMDRlNTFmNWJl
MjhlMDBmNjBmMTJhODdmNzU0OTIwNDk3YzQgMTAwNjQ0Ci0tLSBhL1Rvb2xzL1Rlc3RXZWJLaXRB
UEkvVGVzdHMvV1RGL1RocmVhZEFzc2VydGlvbnNUZXN0LmNwcAorKysgYi9Ub29scy9UZXN0V2Vi
S2l0QVBJL1Rlc3RzL1dURi9UaHJlYWRBc3NlcnRpb25zVGVzdC5jcHAKQEAgLTQ4LDcgKzQ4LDcg
QEAgcHVibGljOgogcHJpdmF0ZToKICAgICBpbnQgZG9UYXNrSW1wbChpbnQgbikgV1RGX1JFUVVJ
UkVTX0xPQ0sobV9vd25lclRocmVhZCkgeyByZXR1cm4gbiArIDE7IH0KICAgICBpbnQgbV92YWx1
ZSBXVEZfR1VBUkRFRF9CWV9MT0NLKG1fb3duZXJUaHJlYWQpIHsgMCB9OwotICAgIE5PX1VOSVFV
RV9BRERSRVNTIFRocmVhZEFzc2VydGlvbiBtX293bmVyVGhyZWFkOworICAgIFNlcXVlbmNlQXNz
ZXJ0aW9uIG1fb3duZXJUaHJlYWQgTk9fVU5JUVVFX0FERFJFU1M7CiB9OwogfQogCmRpZmYgLS1n
aXQgYS9Ub29scy9UZXN0V2ViS2l0QVBJL1Rlc3RzL1dURi9UaHJlYWRpbmcuY3BwIGIvVG9vbHMv
VGVzdFdlYktpdEFQSS9UZXN0cy9XVEYvVGhyZWFkaW5nLmNwcAppbmRleCAzNDY4ZDE1MDk2YzUy
OGIyOGY5NDdlNzNmODA5MTNmMDBhZGFkYjJmLi5jODcwMDk3MDRhYTkzNWYwMmRhMTM0NjdlNjZk
NzdjNjFmYWM3NjllIDEwMDY0NAotLS0gYS9Ub29scy9UZXN0V2ViS2l0QVBJL1Rlc3RzL1dURi9U
aHJlYWRpbmcuY3BwCisrKyBiL1Rvb2xzL1Rlc3RXZWJLaXRBUEkvVGVzdHMvV1RGL1RocmVhZGlu
Zy5jcHAKQEAgLTI3LDYgKzI3LDcgQEAKIAogI2luY2x1ZGUgPHd0Zi9UaHJlYWRpbmcuaD4KICNp
bmNsdWRlIDx3dGYvVmVjdG9yLmg+CisjaW5jbHVkZSA8d3RmL3RocmVhZHMvQmluYXJ5U2VtYXBo
b3JlLmg+CiAKIG5hbWVzcGFjZSBUZXN0V2ViS2l0QVBJIHsKIApAQCAtNjUsNCArNjYsNTkgQEAg
VEVTVChXVEYsIFRocmVhZGluZ1RocmVhZElkZW50aXR5KQogfQogI2VuZGlmIC8vIFVTRShQVEhS
RUFEUykKIAorbmFtZXNwYWNlIHsKK3N0cnVjdCBBc3NlcnRpb25UZXN0SG9sZGVyIHsKKyAgICBS
ZWZQdHI8VGhyZWFkPiB0aHJlYWQ7CisgICAgc2l6ZV90IGNvdW50ZXIgV1RGX0dVQVJERURfQllf
TE9DSygqdGhyZWFkKSB7IDAgfTsKKyAgICBzaXplX3QgcmVzdWx0IHsgMCB9OyAvLyBUaGlzIGlz
IGhlcmUgdG8gc3VwcG9ydCB0aGUgcmVzdWx0IGFzc2VydGlvbi4gVGhlIGNvbXBpbGVyIGRvZXNu
J3QgYWxsb3cgdXMgdG8gb2J0YWluIHRoZSBgY291bnRlcmAgb3RoZXJ3aXNlLgorCisgICAgQXNz
ZXJ0aW9uVGVzdEhvbGRlcigpCisgICAgeworICAgICAgICBCaW5hcnlTZW1hcGhvcmUgbWVtYmVy
SW5pdGlhbGl6ZWQ7CisgICAgICAgIEJpbmFyeVNlbWFwaG9yZSB0aHJlYWRJbml0aWFsaXplZDsK
KworICAgICAgICB0aHJlYWQgPSBUaHJlYWQ6OmNyZWF0ZSgiY29tLmFwcGxlLldlYktpdC5UZXN0
LlRocmVhZFRocmVhZFNhZmV0eUFuYWx5c2lzQXNzZXJ0SXNDdXJyZW50V29ya3MiLCBbJl0gewor
ICAgICAgICAgICAgbWVtYmVySW5pdGlhbGl6ZWQud2FpdCgpOyAvLyBXYWl0IGZvciBgQXNzZXJ0
aW9uVGVzdEhvbGRlcjo6dGhyZWFkYCBhc3NpZ25tZW50IHRvIGNvbXBsZXRlLgorICAgICAgICAg
ICAgdGhyZWFkSW5pdGlhbGl6ZWQuc2lnbmFsKCk7CisvLyBFbmFibGUgdG8gc2VlICJ3cml0aW5n
IHZhcmlhYmxlICdjb3VudGVyJyByZXF1aXJlcyBob2xkaW5nIG11dGV4ICd0aHJlYWQnIGV4Y2x1
c2l2ZWx5Ii4KKy8vICNkZWZpbmUgVEVTVF9DT01QSUxFX0ZBSUxVUkUKKyNpZmRlZiBURVNUX0NP
TVBJTEVfRkFJTFVSRQorICAgICAgICAgICAgdGVzdFRhc2tUaGF0RmFpbHNUb0NvbXBpbGU8aW50
PigpOworI2VuZGlmCisgICAgICAgICAgICB0ZXN0VGFzaygpOworICAgICAgICAgICAgYXNzZXJ0
SXNDdXJyZW50KCp0aHJlYWQpOworICAgICAgICAgICAgY29tcHV0ZVJlc3VsdCgpOworICAgICAg
ICB9KTsKKyAgICAgICAgbWVtYmVySW5pdGlhbGl6ZWQuc2lnbmFsKCk7CisgICAgICAgIHRocmVh
ZEluaXRpYWxpemVkLndhaXQoKTsgLy8gV2FpdCBmb3IgdGhlIHRocmVhZCB0byBzdG9wIHVzaW5n
IGBtZW1iZXJJbml0aWFsaXplZGAsIGFzIHdlIHdpbGwgZGVzdHJveSBpdC4KKyAgICB9CisgICAg
dm9pZCB0ZXN0VGFzaygpCisgICAgeworICAgICAgICBhc3NlcnRJc0N1cnJlbnQoKnRocmVhZCk7
IC8vIFRoaXMgaXMgYmVpbmcgdGVzdGVkLgorICAgICAgICArK2NvdW50ZXI7CisgICAgfQorICAg
IHZvaWQgY29tcHV0ZVJlc3VsdCgpIFdURl9SRVFVSVJFU19MT0NLKCp0aHJlYWQpIC8vIFRoaXMg
aXMgYmVpbmcgdGVzdGVkLgorICAgIHsKKyAgICAgICAgcmVzdWx0ID0gKytjb3VudGVyOworICAg
IH0KKyAgICB0ZW1wbGF0ZTx0eXBlbmFtZSBUPiB2b2lkIHRlc3RUYXNrVGhhdEZhaWxzVG9Db21w
aWxlKCkKKyAgICB7CisgICAgICAgICsrY291bnRlcjsKKyAgICB9Cit9OworfQorCisvLyBDb25z
aWRlciBkZWNsYXJhdGlvbiBgUmVmUHRyPFRocmVhZD4gbXlUaHJlYWRgLgorLy8gVGhpcyB0ZXN0
IHRlc3RzIHRoYXQgY2xpZW50cyBjYW4gdXNlIHRocmVhZCBzYWZldHkgYW5hbHlzaXMgdG8gY2hl
Y2sgdGhhdCB0aGUgdGhyZWFkIGlzIGN1cnJlbnQKKy8vIGJ5IHVzaW5nIGBhc3NlcnRJc0N1cnJl
bnQoKm15VGhyZWFkKTtgIHRvIGVzdGFibGlzaCB0aGUgYXNzZXJ0aW9uIGFuZCBXVEZfR1VBUkRF
RF9CWV9MT0NLLCBXVEZfUkVRVUlSRVNfQllfTE9DSworLy8gZGVjbGFyYXRpb25zIHRvIGxldCB0
aGUgY29tcGlsZXIgYW5hbHl6ZSB0aGUgdXNlcyBvZiB0aGUgdmFyaWFibGVzIGFuZCBmdW5jdGlv
bnMgd2l0aCB0aGUgZGVjbGFyYXRpb25zLgorVEVTVChXVEZfVGhyZWFkLCBUaHJlYWRTYWZldHlB
bmFseXNpc0Fzc2VydElzQ3VycmVudFdvcmtzKQoreworICAgIEFzc2VydGlvblRlc3RIb2xkZXIg
aG9sZGVyc1s1MF07CisgICAgZm9yIChhdXRvJiBob2xkZXIgOiBob2xkZXJzKQorICAgICAgICBo
b2xkZXIudGhyZWFkLT53YWl0Rm9yQ29tcGxldGlvbigpOworICAgIGZvciAoYXV0byYgaG9sZGVy
IDogaG9sZGVycykKKyAgICAgICAgRVhQRUNUX0VRKDJ1LCBob2xkZXIucmVzdWx0KTsKK30KKwog
fSAvLyBuYW1lc3BhY2UgVGVzdFdlYktpdEFQSQpkaWZmIC0tZ2l0IGEvVG9vbHMvVGVzdFdlYktp
dEFQSS9UZXN0cy9XVEYvV29ya1F1ZXVlLmNwcCBiL1Rvb2xzL1Rlc3RXZWJLaXRBUEkvVGVzdHMv
V1RGL1dvcmtRdWV1ZS5jcHAKaW5kZXggMmY0Y2Y2NGE4YWNmZWI2NDJlMDYyZDg4NmZkMmJlNDg4
ZjAzNTZlZi4uNWZiYmFhNzFjNjg4Yjk5YTAzMTljYzliNjBmMDhjMDNlMDgxYTI4MiAxMDA2NDQK
LS0tIGEvVG9vbHMvVGVzdFdlYktpdEFQSS9UZXN0cy9XVEYvV29ya1F1ZXVlLmNwcAorKysgYi9U
b29scy9UZXN0V2ViS2l0QVBJL1Rlc3RzL1dURi9Xb3JrUXVldWUuY3BwCkBAIC0yODksMTEgKzI4
OSwxMSBAQCBURVNUKFdURl9Xb3JrUXVldWUsIERlc3Ryb3lEaXNwYXRjaGVkT25EaXNwYXRjaFF1
ZXVlKQogICAgICAgICB9CiAgICAgICAgIH5EZXN0cnVjdGlvbldvcmtRdWV1ZVRlc3RlcigpCiAg
ICAgICAgIHsKLSAgICAgICAgICAgIEVYUEVDVF9ORShtX2NyZWF0ZWRJblRocmVhZCwgVGhyZWFk
OjpjdXJyZW50KCkudWlkKCkpOworICAgICAgICAgICAgRVhQRUNUX05FKG1fY3JlYXRlZEluU2Vx
dWVuY2UsIGN1cnJlbnRTZXF1ZW5jZUlEKCkpOwogICAgICAgICAgICAgbV9jb3VudGVyKys7CiAg
ICAgICAgIH0KICAgICBwcml2YXRlOgotICAgICAgICB1aW50MzJfdCBtX2NyZWF0ZWRJblRocmVh
ZCA9IFRocmVhZDo6Y3VycmVudCgpLnVpZCgpOworICAgICAgICB1aW50MzJfdCBtX2NyZWF0ZWRJ
blNlcXVlbmNlID0gY3VycmVudFNlcXVlbmNlSUQoKTsKICAgICAgICAgc3RkOjphdG9taWM8c2l6
ZV90PiYgbV9jb3VudGVyOwogICAgIH07CiAgICAgY29uc3RleHByIHNpemVfdCBxdWV1ZUNvdW50
ID0gNTA7CkBAIC0zMDksNiArMzA5LDQ5IEBAIFRFU1QoV1RGX1dvcmtRdWV1ZSwgRGVzdHJveURp
c3BhdGNoZWRPbkRpc3BhdGNoUXVldWUpCiAgICAgZm9yIChzaXplX3QgaiA9IDA7IGogPCBxdWV1
ZUNvdW50OyArK2opCiAgICAgICAgIHF1ZXVlW2pdLT5kaXNwYXRjaFN5bmMoW10geyB9KTsKICAg
ICBFWFBFQ1RfRVEocXVldWVDb3VudCAqIGl0ZXJhdGlvbkNvdW50LCBjb3VudGVyKTsKK30KKwor
bmFtZXNwYWNlIHsKK3N0cnVjdCBBc3NlcnRpb25UZXN0SG9sZGVyIHsKKyAgICBjb25zdCBSZWZQ
dHI8V29ya1F1ZXVlPiBxdWV1ZSB7IFdvcmtRdWV1ZTo6Y3JlYXRlKCJjb20uYXBwbGUuV2ViS2l0
LlRlc3QuVGhyZWFkU2FmZXR5QW5hbHlzaXNBc3NlcnRJc0N1cnJlbnRXb3JrcyIsIFdvcmtRdWV1
ZTo6UU9TOjpVc2VySW50ZXJhY3RpdmUpIH07CisgICAgc2l6ZV90IGNvdW50ZXIgV1RGX0dVQVJE
RURfQllfTE9DSygqcXVldWUpIHsgMCB9OworICAgIHNpemVfdCByZXN1bHQgeyAwIH07IC8vIFRo
aXMgaXMgaGVyZSB0byBzdXBwb3J0IHRoZSByZXN1bHQgYXNzZXJ0aW9uLiBUaGUgY29tcGlsZXIg
ZG9lc24ndCBhbGxvdyB1cyB0byBvYnRhaW4gdGhlIGBjb3VudGVyYCBvdGhlcndpc2UuCiAKKyAg
ICB2b2lkIHRlc3RUYXNrKCkKKyAgICB7CisgICAgICAgIGFzc2VydElzQ3VycmVudCgqcXVldWUp
OyAvLyBUaGlzIGlzIGJlaW5nIHRlc3RlZC4KKyAgICAgICAgKytjb3VudGVyOworICAgIH0KKyAg
ICB2b2lkIGNvbXB1dGVSZXN1bHQoKSBXVEZfUkVRVUlSRVNfTE9DSygqcXVldWUpIC8vIFRoaXMg
aXMgYmVpbmcgdGVzdGVkLgorICAgIHsKKyAgICAgICAgcmVzdWx0ID0gKytjb3VudGVyOworICAg
IH0KKyAgICB0ZW1wbGF0ZTx0eXBlbmFtZSBUPiB2b2lkIHRlc3RUYXNrVGhhdEZhaWxzVG9Db21w
aWxlKCkKKyAgICB7CisgICAgICAgICsrY291bnRlcjsKKyAgICB9Cit9OwogfQorCitURVNUKFdU
Rl9Xb3JrUXVldWUsIFRocmVhZFNhZmV0eUFuYWx5c2lzQXNzZXJ0SXNDdXJyZW50V29ya3MpCit7
CisgICAgY29uc3RleHByIHNpemVfdCBxdWV1ZUNvdW50ID0gNTA7CisgICAgY29uc3RleHByIHNp
emVfdCBpdGVyYXRpb25Db3VudCA9IDEwMDAwOworCisgICAgQXNzZXJ0aW9uVGVzdEhvbGRlciBo
b2xkZXJzW3F1ZXVlQ291bnRdOworICAgIGZvciAoc2l6ZV90IGkgPSAwOyBpIDwgaXRlcmF0aW9u
Q291bnQ7ICsraSkgeworICAgICAgICBmb3IgKGF1dG8mIGhvbGRlciA6IGhvbGRlcnMpCisgICAg
ICAgICAgICBob2xkZXIucXVldWUtPmRpc3BhdGNoKFsmaG9sZGVyXSB7IGhvbGRlci50ZXN0VGFz
aygpOyB9KTsKKyAgICB9CisvLyAjZGVmaW5lIFRFU1RfQ09NUElMRV9GQUlMVVJFCisjaWZkZWYg
VEVTVF9DT01QSUxFX0ZBSUxVUkUKKyAgICBmb3IgKGF1dG8mIGhvbGRlciA6IGhvbGRlcnMpCisg
ICAgICAgIGhvbGRlci5xdWV1ZS0+ZGlzcGF0Y2hTeW5jKFsmaG9sZGVyXSB7IGhvbGRlci50ZXN0
VGFza1RoYXRGYWlsc1RvQ29tcGlsZTxpbnQ+KCk7IH0pOworI2VuZGlmCisgICAgZm9yIChhdXRv
JiBob2xkZXIgOiBob2xkZXJzKQorICAgICAgICBob2xkZXIucXVldWUtPmRpc3BhdGNoU3luYyhb
JmhvbGRlcl0geyBhc3NlcnRJc0N1cnJlbnQoKmhvbGRlci5xdWV1ZSk7IGhvbGRlci5jb21wdXRl
UmVzdWx0KCk7IH0pOworICAgIGZvciAoYXV0byYgaG9sZGVyIDogaG9sZGVycykKKyAgICAgICAg
RVhQRUNUX0VRKGl0ZXJhdGlvbkNvdW50ICsgMSwgaG9sZGVyLnJlc3VsdCk7Cit9CisKIH0gLy8g
bmFtZXNwYWNlIFRlc3RXZWJLaXRBUEkK
</data>
<flag name="commit-queue"
          id="479559"
          type_id="3"
          status="-"
          setter="ews-feeder"
    />
          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>452503</attachid>
            <date>2022-02-18 03:28:28 -0800</date>
            <delta_ts>2022-02-22 01:35:47 -0800</delta_ts>
            <desc>Patch</desc>
            <filename>bug-236832-20220218132827.patch</filename>
            <type>text/plain</type>
            <size>23277</size>
            <attacher name="Kimmo Kinnunen">kkinnunen</attacher>
            
              <data encoding="base64">U3VidmVyc2lvbiBSZXZpc2lvbjogMjkwMDM0CmRpZmYgLS1naXQgYS9Tb3VyY2UvV1RGL0NoYW5n
ZUxvZyBiL1NvdXJjZS9XVEYvQ2hhbmdlTG9nCmluZGV4IGUxODZmYjA5NmMzYTZlOGZmM2VmN2U2
ZGVjZDE2ZDI1ODY5ZGNhMjguLmQ2YjFmMzE1YjBmOTU5NWVlYjBiNzhkOTdkZTYxZTM3YTIyMGEw
NzQgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XVEYvQ2hhbmdlTG9nCisrKyBiL1NvdXJjZS9XVEYvQ2hh
bmdlTG9nCkBAIC0xLDMgKzEsNDcgQEAKKzIwMjItMDItMTggIEtpbW1vIEtpbm51bmVuICA8a2tp
bm51bmVuQGFwcGxlLmNvbT4KKworICAgICAgICBUaHJlYWQgc2FmZXR5IGFuYWx5c2lzIHRvIGFz
c2VydCAiY29kZSBpcyBydW4gc2VxdWVudGlhbGx5IiBpcyBub3QgdXNlZnVsIHdoZW4gY29kZSBp
cyBtYWlubHkgcnVuIHdpdGggV29ya1F1ZXVlcworICAgICAgICBodHRwczovL2J1Z3Mud2Via2l0
Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9MjM2ODMyCisKKyAgICAgICAgUmV2aWV3ZWQgYnkgTk9CT0RZ
IChPT1BTISkuCisKKyAgICAgICAgVGhyZWFkIHNhZmV0eSBhbmFseXNpcyBpcyBub3QgdXNlZnVs
IHdoZW4gY29kZSBpcyBtYWlubHkgcnVuIHdpdGggV29ya1F1ZXVlcy4KKyAgICAgICAgV29ya1F1
ZXVlIHJ1bm5hYmxlcyBtaWdodCBydW4gaW4gYXJiaXRyYXJ5IHRocmVhZCwgYnV0IHN0aWxsIHNl
cmlhbGx5IGluIGEgc3BlY2lmaWMgIndvcmsgcXVldWUiLgorCisgICAgICAgIFJlbmFtZSBUaHJl
YWRBc3NlcnRpb24gdG8gU2VxdWVuY2VBc3NlcnRpb24sIGFuZCBhc3NlcnQgdGhhdCBpZiB0aGUg
YXNzZXJ0aW9uIGlzIGNyZWF0ZWQgaW4gYSBXb3JrUXVldWUsCisgICAgICAgIHRoZSBhc3NlcnRp
b24gY2hlY2tzIGZvciB0aGUgd29yayBxdWV1ZS4gSWYgaXQgaXMgY3JlYXRlZCBvbiBhIFRocmVh
ZCwgaXQgY2hlY2tzIGZvciB0aGF0LgorCisgICAgICAgIE1ha2UgVGhyZWFkIGFuZCBXb3JrUXVl
dWUgYmUgc2ltaWxhciB0byBTZXF1ZW5jZUFzc2VydGlvbiwgZS5nLiB0byBob2xkIHRoZSBsb2Nr
IGNhcGFiaWxpdHkuIFRoaXMgbWVhbnMKKyAgICAgICAgdGhlIGBhc3NlcnRJc0N1cnJlbnQodGhy
ZWFkL3dvcmtRdWV1ZSlgIGNhbiBlc3RhYmxpc2ggdGhhdCB0aGUgY2FsbGVyIGhvbGRzIHRoZSBj
YXBhYml0eSwgZS5nLiB0aGF0CisgICAgICAgIHRoZSBjYWxsZXIgaXMgcnVubmluZyBpbiB0aGUg
cGFydGljdWxhciBzZXF1ZW5jZS4KKworICAgICAgICBJbXBsZW1lbnQgYnkgZGVmaW5pbmcgdGVy
bSAic2VxdWVuY2UiLCBlLmcuIHNvbWV0aGluZyB3aGVyZSBjb2RlIGV4ZWN1dGVzIHNlcXVlbnRp
YWxseS4KKworICAgICAgICBJbXBsZW1lbnQgZm9yIG5vbi1Db2NvYSBieSBqdXN0IHVzaW5nIHRo
cmVhZCBpZCBmb3IgdGhlIHNlcXVlbmNlIGlkLiBBbGwgV29ya1F1ZXVlcyBoYXZlIHVuaXF1ZSB0
aHJlYWRzCisgICAgICAgIGFuZCBhbGwgVGhyZWFkcyBoYXZlIHVuaXF1ZSBpZHMuIFRoaXMgbWVh
bnMgV29ya1F1ZXVlcyBjYW4gYmUgZGlzdGlucXVpc2hlZCBmcm9tIFRocmVhZHMgd2l0aG91dCBX
b3JrUXVldWVzLgorCisgICAgICAgIEltcGxlbWVudCBmb3Igbm9uLUNvY29hIGJ5IHVzaW5nIHRo
ZSBzYW1lIHVpZCBpZCBuYW1lc3BhY2UgZm9yIFdvcmtRdWV1ZXMgYXMgVGhyZWFkcyBoYXZlLiBT
dG9yZSB0aGUgdWlkCisgICAgICAgIGluIERpc3BhdGNoIGRpc3BhdGNoIHF1ZXVlIHNwZWNpZmlj
IGZpZWxkLiBJZiB0aGUgY29kZSBpcyBub3QgcnVubmluZyBpbiBEaXNwYXRjaCwgcmV0dXJuIHRo
ZSBjdXJyZW50CisgICAgICAgIHRocmVhZCB1aWQuIFNpbmNlIHRoZSB1aWQgbmFtZXNwYWNlIGlz
IHRoZSBzYW1lLCBXb3JrUXVldWVzIGNhbiBiZSBkaXN0aW51aXNoZWQgZnJvbSBUaHJlYWRzIHdp
dGhvdXQgV29ya1F1ZXVlcy4KKworICAgICAgICBJbiBib3RoIGNhc2VzLCBub24tV2ViS2l0IHBs
YXRmb3JtIHRocmVhZHMgZ2V0IGFsc28gYSBUaHJlYWQsIHNvIHRoZXkncmUgZGlzdGlucXVpc2hl
ZCBmcm9tIFdvcmtRdWV1ZXMuCisKKyAgICAgICAgVGVzdGVkIGJ5IG5ldyBBUEkgdGVzdHMuCisK
KyAgICAgICAgKiB3dGYvVGhyZWFkQXNzZXJ0aW9ucy5oOgorICAgICAgICAoV1RGOjpXVEZfQVNT
RVJUU19BQ1FVSVJFRF9MT0NLKToKKyAgICAgICAgKiB3dGYvVGhyZWFkaW5nLmg6CisgICAgICAg
IChXVEY6OldURl9BU1NFUlRTX0FDUVVJUkVEX0xPQ0spOgorICAgICAgICAqIHd0Zi9Xb3JrUXVl
dWUuaDoKKyAgICAgICAgKFdURjo6V1RGX0FTU0VSVFNfQUNRVUlSRURfTE9DSyk6CisgICAgICAg
ICogd3RmL2NvY29hL1dvcmtRdWV1ZUNvY29hLmNwcDoKKyAgICAgICAgKFdURjo6V29ya1F1ZXVl
QmFzZTo6cGxhdGZvcm1Jbml0aWFsaXplKToKKyAgICAgICAgKFdURjo6V29ya1F1ZXVlOjphc3Nl
cnRJc0N1cnJlbnQgY29uc3QpOgorICAgICAgICAoV1RGOjpjdXJyZW50U2VxdWVuY2VJRCk6Cisg
ICAgICAgICogd3RmL2dlbmVyaWMvV29ya1F1ZXVlR2VuZXJpYy5jcHA6CisgICAgICAgIChXVEY6
OldvcmtRdWV1ZUJhc2U6OnBsYXRmb3JtSW5pdGlhbGl6ZSk6CisgICAgICAgIChXVEY6OmN1cnJl
bnRTZXF1ZW5jZUlEKToKKwogMjAyMi0wMi0xNyAgQ2hyaXMgRHVtZXogIDxjZHVtZXpAYXBwbGUu
Y29tPgogCiAgICAgICAgIENsZWFuIHVwIC8gb3B0aW1pemUgY2FsbCBzaXRlcyBjb25zdHJ1Y3Rp
bmcgdmVjdG9ycwpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYktpdC9DaGFuZ2VMb2cgYi9Tb3VyY2Uv
V2ViS2l0L0NoYW5nZUxvZwppbmRleCBhODE1MDRmNmFjMzgxNDExYmQxZjE4Nzg1ZDIwNmU2NmI1
N2QxYmJiLi5mMWU3MWJkZWZhOGFiZWVlNGQxZGVmYzQwOTE4MTc1OGFkYWEwNTc0IDEwMDY0NAot
LS0gYS9Tb3VyY2UvV2ViS2l0L0NoYW5nZUxvZworKysgYi9Tb3VyY2UvV2ViS2l0L0NoYW5nZUxv
ZwpAQCAtMSwzICsxLDE3IEBACisyMDIyLTAyLTE4ICBLaW1tbyBLaW5udW5lbiAgPGtraW5udW5l
bkBhcHBsZS5jb20+CisKKyAgICAgICAgVGhyZWFkIHNhZmV0eSBhbmFseXNpcyB0byBhc3NlcnQg
ImNvZGUgaXMgcnVuIHNlcXVlbnRpYWxseSIgaXMgbm90IHVzZWZ1bCB3aGVuIGNvZGUgaXMgbWFp
bmx5IHJ1biB3aXRoIFdvcmtRdWV1ZXMKKyAgICAgICAgaHR0cHM6Ly9idWdzLndlYmtpdC5vcmcv
c2hvd19idWcuY2dpP2lkPTIzNjgzMgorCisgICAgICAgIFJldmlld2VkIGJ5IE5PQk9EWSAoT09Q
UyEpLgorCisgICAgICAgIFJlbmFtZSBUaHJlYWRBc3NlcnRpb24gdG8gU2VxdWVuY2VBc3NlcnRp
b24uCisKKyAgICAgICAgKiBHUFVQcm9jZXNzL2dyYXBoaWNzL1JlbW90ZUdyYXBoaWNzQ29udGV4
dEdMLmg6CisgICAgICAgICogR1BVUHJvY2Vzcy9ncmFwaGljcy9XZWJHUFUvUmVtb3RlR1BVLmg6
CisgICAgICAgICogR1BVUHJvY2Vzcy9tZWRpYS9SZW1vdGVWaWRlb0ZyYW1lT2JqZWN0SGVhcC5o
OgorICAgICAgICAqIEdQVVByb2Nlc3Mvd2VicnRjL1JlbW90ZVNhbXBsZUJ1ZmZlckRpc3BsYXlM
YXllci5oOgorCiAyMDIyLTAyLTE3ICBLaW1tbyBLaW5udW5lbiAgPGtraW5udW5lbkBhcHBsZS5j
b20+CiAKICAgICAgICAgQVNTRVJUSU9OIEZBSUxFRDogVGhyZWFkOjpjdXJyZW50KCkudWlkKCkg
PT0gdGhyZWFkQXNzZXJ0aW9uLm1fdWlkIGZvciBSZW1vdGVWaWRlb0ZyYW1lT2JqZWN0SGVhcApk
aWZmIC0tZ2l0IGEvU291cmNlL1dURi93dGYvVGhyZWFkQXNzZXJ0aW9ucy5oIGIvU291cmNlL1dU
Ri93dGYvVGhyZWFkQXNzZXJ0aW9ucy5oCmluZGV4IDFjYTE2YjRkMDU4OWM5MDIxNmQwZWJlMDBh
OTcwODMyZDhlYTBlZDcuLjU1ZGU3MjkyN2MzODlmOGY2NThkNDRkMDNiZjUwNDIzZTVhYjkyMTUg
MTAwNjQ0Ci0tLSBhL1NvdXJjZS9XVEYvd3RmL1RocmVhZEFzc2VydGlvbnMuaAorKysgYi9Tb3Vy
Y2UvV1RGL3d0Zi9UaHJlYWRBc3NlcnRpb25zLmgKQEAgLTMzLDQwICszMyw0MSBAQAogbmFtZXNw
YWNlIFdURiB7CiAKIC8vIEEgdHlwZSB0byB1c2UgZm9yIGFzc2VydGluZyB0aGF0IHByaXZhdGUg
bWVtYmVyIGZ1bmN0aW9ucyBvciBwcml2YXRlIG1lbWJlciB2YXJpYWJsZXMKLS8vIG9mIGEgY2xh
c3MgYXJlIGFjY2Vzc2VkIGZyb20gY29ycmVjdCB0aHJlYWRzLgorLy8gb2YgYSBjbGFzcyBhcmUg
YWNjZXNzZWQgZnJvbSBjb3JyZWN0IHRocmVhZHMgb3Igd29yayBxdWV1ZXMuCisvLwogLy8gU3Vw
cG9ydHMgcnVuLXRpbWUgY2hlY2tpbmcgd2l0aCBhc3NlcnRpb24gZW5hYmxlZCBidWlsZHMuCiAv
LyBTdXBwb3J0cyBjb21waWxlLXRpbWUgZGVjbGFyYXRpb24gYW5kIGNoZWNraW5nLgogLy8gRXhh
bXBsZToKIC8vIHN0cnVjdCBNeUNsYXNzIHsKLS8vICAgICB2b2lkIGRvVGFzaygpIHsgYXNzZXJ0
SXNDdXJyZW50KG1fb3duZXJUaHJlYWQpOyBkb1Rhc2tJbXBsKCk7IH0KKy8vICAgICB2b2lkIGRv
VGFzaygpIHsgYXNzZXJ0SXNDdXJyZW50KG1fb3duZXJTZXF1ZW5jZSk7IGRvVGFza0ltcGwoKTsg
fQogLy8gICAgIHRlbXBsYXRlPHR5cGVuYW1lPiB2b2lkIGRvVGFza0NvbXBpbGVGYWlsdXJlKCkg
eyBkb1Rhc2tJbXBsKCk7IH0KIC8vIHByaXZhdGU6Ci0vLyAgICAgdm9pZCBkb1Rhc2tJbXBsKCkg
V1RGX1JFUVVJUkVTX0xPQ0sobV9vd25lclRocmVhZCk7Ci0vLyAgICAgaW50IG1fdmFsdWUgV1RG
X0dVQVJERURfQllfTE9DSyhtX293bmVyVGhyZWFkKSB7IDAgfTsKLS8vICAgICBOT19VTklRVUVf
QUREUkVTUyBUaHJlYWRBc3NlcnRpb24gbV9vd25lclRocmVhZDsKKy8vICAgICB2b2lkIGRvVGFz
a0ltcGwoKSBXVEZfUkVRVUlSRVNfTE9DSyhtX293bmVyU2VxdWVuY2UpOworLy8gICAgIGludCBt
X3ZhbHVlIFdURl9HVUFSREVEX0JZX0xPQ0sobV9vd25lclNlcXVlbmNlKSB7IDAgfTsKKy8vICAg
ICBTZXF1ZW5jZUFzc2VydGlvbiBtX293bmVyU2VxdWVuY2UgTk9fVU5JUVVFX0FERFJFU1M7CiAv
LyB9OwotY2xhc3MgV1RGX0NBUEFCSUxJVFlfTE9DSyBUaHJlYWRBc3NlcnRpb24geworY2xhc3Mg
V1RGX0NBUEFCSUxJVFlfTE9DSyBTZXF1ZW5jZUFzc2VydGlvbiB7CiBwdWJsaWM6Ci0gICAgVGhy
ZWFkQXNzZXJ0aW9uKCkgPSBkZWZhdWx0OworICAgIFNlcXVlbmNlQXNzZXJ0aW9uKCkgPSBkZWZh
dWx0OwogICAgIGVudW0gVW5pbml0aWFsaXplZFRhZyB7IFVuaW5pdGlhbGl6ZWQgfTsKLSAgICBj
b25zdGV4cHIgVGhyZWFkQXNzZXJ0aW9uKFVuaW5pdGlhbGl6ZWRUYWcpCisgICAgY29uc3RleHBy
IFNlcXVlbmNlQXNzZXJ0aW9uKFVuaW5pdGlhbGl6ZWRUYWcpCiAjaWYgQVNTRVJUX0VOQUJMRUQK
LSAgICAgICAgOiBtX3VpZCgwKSAvLyBUaHJlYWQ6OnVpZCgpIGRvZXMgbm90IHJldHVybiB0aGlz
LgorICAgICAgICA6IG1fdWlkKGludmFsaWRTZXF1ZW5jZUlEKQogI2VuZGlmCiAgICAgewogICAg
IH0KLSAgICB+VGhyZWFkQXNzZXJ0aW9uKCkgeyBhc3NlcnRJc0N1cnJlbnQoKnRoaXMpOyB9Ci0g
ICAgdm9pZCByZXNldCgpIHsgKnRoaXMgPSBUaHJlYWRBc3NlcnRpb24geyB9OyB9CisgICAgflNl
cXVlbmNlQXNzZXJ0aW9uKCkgeyBhc3NlcnRJc0N1cnJlbnQoKnRoaXMpOyB9CisgICAgdm9pZCBy
ZXNldCgpIHsgKnRoaXMgPSBTZXF1ZW5jZUFzc2VydGlvbiB7IH07IH0KIHByaXZhdGU6CiAjaWYg
QVNTRVJUX0VOQUJMRUQKLSAgICB1aW50MzJfdCBtX3VpZCB7IFRocmVhZDo6Y3VycmVudCgpLnVp
ZCgpIH07CisgICAgdWludDMyX3QgbV91aWQgeyBjdXJyZW50U2VxdWVuY2VJRCgpIH07CiAjZW5k
aWYKLSAgICBmcmllbmQgdm9pZCBhc3NlcnRJc0N1cnJlbnQoY29uc3QgVGhyZWFkQXNzZXJ0aW9u
Jik7CisgICAgZnJpZW5kIHZvaWQgYXNzZXJ0SXNDdXJyZW50KGNvbnN0IFNlcXVlbmNlQXNzZXJ0
aW9uJik7CiB9OwogCi1pbmxpbmUgdm9pZCBhc3NlcnRJc0N1cnJlbnQoY29uc3QgVGhyZWFkQXNz
ZXJ0aW9uJiB0aHJlYWRBc3NlcnRpb24pIFdURl9BU1NFUlRTX0FDUVVJUkVEX0xPQ0sodGhyZWFk
QXNzZXJ0aW9uKQoraW5saW5lIHZvaWQgYXNzZXJ0SXNDdXJyZW50KGNvbnN0IFNlcXVlbmNlQXNz
ZXJ0aW9uJiBzZXF1ZW5jZUFzc2VydGlvbikgV1RGX0FTU0VSVFNfQUNRVUlSRURfTE9DSyhzZXF1
ZW5jZUFzc2VydGlvbikKIHsKLSAgICBBU1NFUlRfVU5VU0VEKHRocmVhZEFzc2VydGlvbiwgVGhy
ZWFkOjpjdXJyZW50KCkudWlkKCkgPT0gdGhyZWFkQXNzZXJ0aW9uLm1fdWlkKTsKKyAgICBBU1NF
UlRfVU5VU0VEKHNlcXVlbmNlQXNzZXJ0aW9uLCBjdXJyZW50U2VxdWVuY2VJRCgpID09IHNlcXVl
bmNlQXNzZXJ0aW9uLm1fdWlkKTsKIH0KIAogLy8gVHlwZSBmb3IgZ2xvYmFsbHkgbmFtZWQgYXNz
ZXJ0aW9ucyBmb3IgZGVzY3JpYmluZyBhY2Nlc3MgcmVxdWlyZW1lbnRzLgpAQCAtOTUsNyArOTYs
NyBAQCBpbmxpbmUgdm9pZCBhc3NlcnRJc01haW5SdW5Mb29wKCkgV1RGX0FTU0VSVFNfQUNRVUlS
RURfTE9DSyhtYWluUnVuTG9vcCkgeyBBU1NFUgogCiB9CiAKLXVzaW5nIFdURjo6VGhyZWFkQXNz
ZXJ0aW9uOwordXNpbmcgV1RGOjpTZXF1ZW5jZUFzc2VydGlvbjsKIHVzaW5nIFdURjo6YXNzZXJ0
SXNDdXJyZW50OwogdXNpbmcgV1RGOjpOYW1lZEFzc2VydGlvbjsKIHVzaW5nIFdURjo6YXNzZXJ0
SXNNYWluVGhyZWFkOwpkaWZmIC0tZ2l0IGEvU291cmNlL1dURi93dGYvVGhyZWFkaW5nLmggYi9T
b3VyY2UvV1RGL3d0Zi9UaHJlYWRpbmcuaAppbmRleCAyMzZlYzQzZjUzODFhZWI4YTRkZGNjNTI4
MGZiOTVjYTkwYzM4NDY5Li4yNmNjNDBhNDRiNDVlNzk5MjNjY2Y1ZDgyOTYxOTUyODk0MzRmMjQz
IDEwMDY0NAotLS0gYS9Tb3VyY2UvV1RGL3d0Zi9UaHJlYWRpbmcuaAorKysgYi9Tb3VyY2UvV1RG
L3d0Zi9UaHJlYWRpbmcuaApAQCAtNDUsNiArNDUsNyBAQAogI2luY2x1ZGUgPHd0Zi9TdGFja0Jv
dW5kcy5oPgogI2luY2x1ZGUgPHd0Zi9TdGFja1N0YXRzLmg+CiAjaW5jbHVkZSA8d3RmL1RocmVh
ZFNhZmVSZWZDb3VudGVkLmg+CisjaW5jbHVkZSA8d3RmL1RocmVhZFNhZmV0eUFuYWx5c2lzLmg+
CiAjaW5jbHVkZSA8d3RmL1ZlY3Rvci5oPgogI2luY2x1ZGUgPHd0Zi9Xb3JkTG9jay5oPgogI2lu
Y2x1ZGUgPHd0Zi90ZXh0L0F0b21TdHJpbmdUYWJsZS5oPgpAQCAtNzYsNiArNzcsNyBAQCBlbnVt
IGNsYXNzIFRocmVhZEdyb3VwQWRkUmVzdWx0OwogCiBjbGFzcyBUaHJlYWRHcm91cDsKIGNsYXNz
IFByaW50U3RyZWFtOworY2xhc3MgV29ya1F1ZXVlOwogCiBXVEZfRVhQT1JUX1BSSVZBVEUgdm9p
ZCBpbml0aWFsaXplKCk7CiAKQEAgLTEwMiwxMSArMTA0LDE1IEBAIHB1YmxpYzoKICAgICBXVEZf
RVhQT1JUX1BSSVZBVEUgflRocmVhZFN1c3BlbmRMb2NrZXIoKTsKIH07CiAKLWNsYXNzIFRocmVh
ZCA6IHB1YmxpYyBUaHJlYWRTYWZlUmVmQ291bnRlZDxUaHJlYWQ+IHsKK2NsYXNzIFdURl9DQVBB
QklMSVRZX0xPQ0sgVGhyZWFkIDogcHVibGljIFRocmVhZFNhZmVSZWZDb3VudGVkPFRocmVhZD4g
ewogICAgIHN0YXRpYyBzdGQ6OmF0b21pYzx1aW50MzJfdD4gc191aWQ7CiBwdWJsaWM6CiAgICAg
ZnJpZW5kIGNsYXNzIFRocmVhZEdyb3VwOwogICAgIGZyaWVuZCBXVEZfRVhQT1JUX1BSSVZBVEUg
dm9pZCBpbml0aWFsaXplKCk7CisjaWYgUExBVEZPUk0oQ09DT0EpCisgICAgZnJpZW5kIGNsYXNz
IFdvcmtRdWV1ZUJhc2U7IC8vIEZvciBhY2Nlc3MgdG8gc191aWQsIHNvIFRocmVhZHMgYW5kIFdv
cmtRdWV1ZSBpZHMgYXJlIGluIHRoZSBzYW1lIG5hbWVzcGFjZS4KKyAgICBmcmllbmQgdWludDMy
X3QgY3VycmVudFNlcXVlbmNlSUQoKTsKKyNlbmRpZgogCiAgICAgV1RGX0VYUE9SVF9QUklWQVRF
IH5UaHJlYWQoKTsKIApAQCAtNDI3LDkgKzQzMywyNCBAQCBpbmxpbmUgVGhyZWFkJiBUaHJlYWQ6
OmN1cnJlbnQoKQogICAgIHJldHVybiBpbml0aWFsaXplQ3VycmVudFRMUygpOwogfQogCitpbmxp
bmUgdm9pZCBhc3NlcnRJc0N1cnJlbnQoY29uc3QgVGhyZWFkJiB0aHJlYWQpIFdURl9BU1NFUlRT
X0FDUVVJUkVEX0xPQ0sodGhyZWFkKQoreworICAgIEFTU0VSVCgmdGhyZWFkID09ICZUaHJlYWQ6
OmN1cnJlbnQoKSk7Cit9CisKK2lubGluZSBjb25zdGV4cHIgdWludDMyX3QgaW52YWxpZFNlcXVl
bmNlSUQgeyAwIH07CisKKy8vIFJldHVybnMgdW5pcXVlIGlkIGZvciBjdXJyZW50IHdvcmsgcXVl
dWUgb3IgdGhyZWFkLgorLy8gUmV0dXJuIHZhbHVlIGlzIG5vdCBgaW52YWxpZFNlcXVlbmNlSURg
LgorV1RGX0VYUE9SVF9QUklWQVRFIHVpbnQzMl90IGN1cnJlbnRTZXF1ZW5jZUlEKCk7CisKKwog
fSAvLyBuYW1lc3BhY2UgV1RGCiAKIHVzaW5nIFdURjo6VGhyZWFkU3VzcGVuZExvY2tlcjsKIHVz
aW5nIFdURjo6VGhyZWFkOwogdXNpbmcgV1RGOjpUaHJlYWRUeXBlOwogdXNpbmcgV1RGOjpHQ1Ro
cmVhZFR5cGU7Cit1c2luZyBXVEY6OmFzc2VydElzQ3VycmVudDsKK3VzaW5nIFdURjo6Y3VycmVu
dFNlcXVlbmNlSUQ7Cit1c2luZyBXVEY6OmludmFsaWRTZXF1ZW5jZUlEOwpkaWZmIC0tZ2l0IGEv
U291cmNlL1dURi93dGYvV29ya1F1ZXVlLmggYi9Tb3VyY2UvV1RGL3d0Zi9Xb3JrUXVldWUuaApp
bmRleCAzNjhjMDY2ZDhmOTZiNGJjZTc0MzE4MjUyZTNjMDI2NjYxZDhmNjk3Li4xYmU2YzBkODdl
ZDBhNmVkOWM0MzVkMDY0MjE5YjhkNGE0YTMyMzJmIDEwMDY0NAotLS0gYS9Tb3VyY2UvV1RGL3d0
Zi9Xb3JrUXVldWUuaAorKysgYi9Tb3VyY2UvV1RGL3d0Zi9Xb3JrUXVldWUuaApAQCAtMzAsNiAr
MzAsNyBAQAogI2luY2x1ZGUgPHd0Zi9Gb3J3YXJkLmg+CiAjaW5jbHVkZSA8d3RmL0Z1bmN0aW9u
RGlzcGF0Y2hlci5oPgogI2luY2x1ZGUgPHd0Zi9TZWNvbmRzLmg+CisjaW5jbHVkZSA8d3RmL1Ro
cmVhZFNhZmV0eUFuYWx5c2lzLmg+CiAjaW5jbHVkZSA8d3RmL1RocmVhZGluZy5oPgogCiAjaWYg
VVNFKENPQ09BX0VWRU5UX0xPT1ApCkBAIC03NSw2ICs3Niw5IEBAIHByb3RlY3RlZDoKICAgICBP
U09iamVjdFB0cjxkaXNwYXRjaF9xdWV1ZV90PiBtX2Rpc3BhdGNoUXVldWU7CiAjZWxzZQogICAg
IFJ1bkxvb3AqIG1fcnVuTG9vcDsKKyNpZiBBU1NFUlRfRU5BQkxFRAorICAgIHVpbnQzMl90IG1f
dGhyZWFkSUQgeyAwIH07CisjZW5kaWYKICNlbmRpZgogfTsKIApAQCAtODMsOCArODcsOSBAQCBw
cm90ZWN0ZWQ6CiAgKiBSdW5uYWJsZXMgZGlzcGF0Y2hlZCB0byBhIFdvcmtRdWV1ZSBhcmUgcmVx
dWlyZWQgdG8gZXhlY3V0ZSBzZXJpYWxseS4KICAqIFRoYXQgaXMsIHR3byBkaWZmZXJlbnQgcnVu
bmFibGVzIGRpc3BhdGNoZWQgdG8gdGhlIFdvcmtRdWV1ZSBzaG91bGQgbmV2ZXIgYmUgYWxsb3dl
ZCB0byBleGVjdXRlIHNpbXVsdGFuZW91c2x5LgogICogVGhleSBtYXkgYmUgZXhlY3V0ZWQgb24g
ZGlmZmVyZW50IHRocmVhZHMgYnV0IGNhbiBzYWZlbHkgYmUgdXNlZCBieSBvYmplY3RzIHRoYXQg
YXJlbid0IGFscmVhZHkgdGhyZWFkc2FmZS4KKyAqIFVzZSBgYXNzZXJ0SXNDdXJyZW50KG1fbXlR
dWV1ZSk7YCBpbiBhIHJ1bm5hYmxlIHRvIGFzc2VydCB0aGF0IHRoZSBydW5uYWJsZSBydW5zIGlu
IGEgc3BlY2lmaWMgcXVldWUuCiAgKi8KLWNsYXNzIFdvcmtRdWV1ZSA6IHB1YmxpYyBXb3JrUXVl
dWVCYXNlIHsKK2NsYXNzIFdURl9DQVBBQklMSVRZX0xPQ0sgV29ya1F1ZXVlIDogcHVibGljIFdv
cmtRdWV1ZUJhc2UgewogcHVibGljOgogICAgIFdURl9FWFBPUlRfUFJJVkFURSBzdGF0aWMgV29y
a1F1ZXVlJiBtYWluKCk7CiAKQEAgLTEwNiw4ICsxMTEsMjAgQEAgcHJpdmF0ZToKICAgICBleHBs
aWNpdCBXb3JrUXVldWUoUnVuTG9vcCYpOwogI2VuZGlmCiAgICAgc3RhdGljIFJlZjxXb3JrUXVl
dWU+IGNvbnN0cnVjdE1haW5Xb3JrUXVldWUoKTsKKworI2lmIEFTU0VSVF9FTkFCTEVECisgICAg
V1RGX0VYUE9SVF9QUklWQVRFIHZvaWQgYXNzZXJ0SXNDdXJyZW50KCkgY29uc3Q7CisgICAgZnJp
ZW5kIHZvaWQgYXNzZXJ0SXNDdXJyZW50KGNvbnN0IFdvcmtRdWV1ZSYpOworI2VuZGlmCiB9Owog
CitpbmxpbmUgdm9pZCBhc3NlcnRJc0N1cnJlbnQoY29uc3QgV29ya1F1ZXVlJiB3b3JrUXVldWUp
IFdURl9BU1NFUlRTX0FDUVVJUkVEX0xPQ0sod29ya1F1ZXVlKQoreworI2lmIEFTU0VSVF9FTkFC
TEVECisgICAgd29ya1F1ZXVlLmFzc2VydElzQ3VycmVudCgpOworI2VuZGlmCit9CisKIC8qKgog
ICogQSBDb25jdXJyZW50V29ya1F1ZXVlIHVubGlrZSBhIFdvcmtRdWV1ZSBkb2Vzbid0IGd1YXJh
bnRlZSB0aGUgb3JkZXIgaW4gd2hpY2ggdGhlIGRpc3BhdGNoZWQgcnVubmFibGUgd2lsbCBydW4K
ICAqIGFuZCBlYWNoIGNhbiBydW4gY29uY3VycmVudGx5IG9uIGRpZmZlcmVudCB0aHJlYWRzLgpA
QCAtMTI3LDMgKzE0NCw0IEBAIHByaXZhdGU6CiAKIHVzaW5nIFdURjo6V29ya1F1ZXVlOwogdXNp
bmcgV1RGOjpDb25jdXJyZW50V29ya1F1ZXVlOwordXNpbmcgV1RGOjphc3NlcnRJc0N1cnJlbnQ7
CmRpZmYgLS1naXQgYS9Tb3VyY2UvV1RGL3d0Zi9jb2NvYS9Xb3JrUXVldWVDb2NvYS5jcHAgYi9T
b3VyY2UvV1RGL3d0Zi9jb2NvYS9Xb3JrUXVldWVDb2NvYS5jcHAKaW5kZXggZjlmNDdmMTFjNzg0
NWQyNzVlMTFjZjcyMGQwYTg1NjI1OWNiMjIxYy4uOTg0MDRhZDdhOTQ2NmM5ZGM3MmI3NjNhYmRh
ZTYwMGIwMWY5OWZlNSAxMDA2NDQKLS0tIGEvU291cmNlL1dURi93dGYvY29jb2EvV29ya1F1ZXVl
Q29jb2EuY3BwCisrKyBiL1NvdXJjZS9XVEYvd3RmL2NvY29hL1dvcmtRdWV1ZUNvY29hLmNwcApA
QCAtMjQsNiArMjQsNyBAQAogICovCiAKICNpbmNsdWRlICJjb25maWcuaCIKKyNpbmNsdWRlIDx3
dGYvVGhyZWFkaW5nLmg+CiAjaW5jbHVkZSA8d3RmL1dvcmtRdWV1ZS5oPgogCiAjaW5jbHVkZSA8
d3RmL0Jsb2NrUHRyLmg+CkBAIC04Niw2ICs4NywxMSBAQCB2b2lkIFdvcmtRdWV1ZUJhc2U6OnBs
YXRmb3JtSW5pdGlhbGl6ZShjb25zdCBjaGFyKiBuYW1lLCBUeXBlIHR5cGUsIFFPUyBxb3MpCiAg
ICAgYXR0ciA9IGRpc3BhdGNoX3F1ZXVlX2F0dHJfbWFrZV93aXRoX3Fvc19jbGFzcyhhdHRyLCBU
aHJlYWQ6OmRpc3BhdGNoUU9TQ2xhc3MocW9zKSwgMCk7CiAgICAgbV9kaXNwYXRjaFF1ZXVlID0g
YWRvcHRPU09iamVjdChkaXNwYXRjaF9xdWV1ZV9jcmVhdGUobmFtZSwgYXR0cikpOwogICAgIGRp
c3BhdGNoX3NldF9jb250ZXh0KG1fZGlzcGF0Y2hRdWV1ZS5nZXQoKSwgdGhpcyk7CisgICAgLy8g
V2UgdXNlICZUaHJlYWQ6OnNfdWlkIGZvciB0aGUga2V5LCBzaW5jZSBpdCdzIGNvbnZlbmllbnQu
IERpc3BhdGNoIGRvZXMgbm90IGRlcmVmZXJlbmNlIGl0LgorICAgIC8vIFdlIHVzZSBUaHJlYWQ6
OnNfdWlkIHRvIGdlbmVyYXRlIHRoZSBpZCBzbyB0aGF0IFdvcmtRdWV1ZXMgYW5kIFRocmVhZHMg
c2hhcmUgdGhlIGlkIG5hbWVzcGFjZS4KKyAgICAvLyBUaGlzIG1ha2VzIGl0IHBvc3NpYmxlIHRv
IGFzc2VydCB0aGF0IGNvZGUgcnVucyBpbiB0aGUgZXhwZWN0ZWQgc2VxdWVuY2UsIHJlZ2FyZGxl
c3Mgb2YgaWYgaXQgaXMKKyAgICAvLyBpbiBhIHRocmVhZCBvciBhIHdvcmsgcXVldWUuCisgICAg
ZGlzcGF0Y2hfcXVldWVfc2V0X3NwZWNpZmljKG1fZGlzcGF0Y2hRdWV1ZS5nZXQoKSwgJlRocmVh
ZDo6c191aWQsIHJlaW50ZXJwcmV0X2Nhc3Q8dm9pZCo+KCsrVGhyZWFkOjpzX3VpZCksIG51bGxw
dHIpOwogfQogCiB2b2lkIFdvcmtRdWV1ZUJhc2U6OnBsYXRmb3JtSW52YWxpZGF0ZSgpCkBAIC0x
MDIsNiArMTA4LDIxIEBAIFJlZjxXb3JrUXVldWU+IFdvcmtRdWV1ZTo6Y29uc3RydWN0TWFpbldv
cmtRdWV1ZSgpCiAgICAgcmV0dXJuIGFkb3B0UmVmKCpuZXcgV29ya1F1ZXVlKGRpc3BhdGNoX2dl
dF9tYWluX3F1ZXVlKCkpKTsKIH0KIAorI2lmIEFTU0VSVF9FTkFCTEVECit2b2lkIFdvcmtRdWV1
ZTo6YXNzZXJ0SXNDdXJyZW50KCkgY29uc3QKK3sKKyAgICBkaXNwYXRjaF9hc3NlcnRfcXVldWUo
bV9kaXNwYXRjaFF1ZXVlLmdldCgpKTsKK30KKyNlbmRpZgorCit1aW50MzJfdCBjdXJyZW50U2Vx
dWVuY2VJRCgpCit7CisgICAgdWludDMyX3QgdWlkID0gc3RhdGljX2Nhc3Q8dWludDMyX3Q+KHJl
aW50ZXJwcmV0X2Nhc3Q8dWludHB0cl90PihkaXNwYXRjaF9nZXRfc3BlY2lmaWMoJlRocmVhZDo6
c191aWQpKSk7CisgICAgaWYgKCF1aWQpCisgICAgICAgIHVpZCA9IFRocmVhZDo6Y3VycmVudCgp
LnVpZCgpOworICAgIHJldHVybiB1aWQ7Cit9CisKIHZvaWQgQ29uY3VycmVudFdvcmtRdWV1ZTo6
YXBwbHkoc2l6ZV90IGl0ZXJhdGlvbnMsIFdURjo6RnVuY3Rpb248dm9pZChzaXplX3QgaW5kZXgp
PiYmIGZ1bmN0aW9uKQogewogICAgIGRpc3BhdGNoX2FwcGx5KGl0ZXJhdGlvbnMsIGRpc3BhdGNo
X2dldF9nbG9iYWxfcXVldWUoRElTUEFUQ0hfUVVFVUVfUFJJT1JJVFlfREVGQVVMVCwgMCksIG1h
a2VCbG9ja1B0cihbZnVuY3Rpb24gPSBXVEZNb3ZlKGZ1bmN0aW9uKV0oc2l6ZV90IGluZGV4KSB7
CmRpZmYgLS1naXQgYS9Tb3VyY2UvV1RGL3d0Zi9nZW5lcmljL1dvcmtRdWV1ZUdlbmVyaWMuY3Bw
IGIvU291cmNlL1dURi93dGYvZ2VuZXJpYy9Xb3JrUXVldWVHZW5lcmljLmNwcAppbmRleCBkMjU3
ZDNhNzIwNGVmYjFjYjNhNWQ4OTU0NjEwZjJiMDI3YThkZTUxLi5hNWNmMjNmMDcyNmNmZTRlNTRh
YjIyMmVjNTI0YTdkNGEwZmI3ZTdmIDEwMDY0NAotLS0gYS9Tb3VyY2UvV1RGL3d0Zi9nZW5lcmlj
L1dvcmtRdWV1ZUdlbmVyaWMuY3BwCisrKyBiL1NvdXJjZS9XVEYvd3RmL2dlbmVyaWMvV29ya1F1
ZXVlR2VuZXJpYy5jcHAKQEAgLTQzLDYgKzQzLDkgQEAgdm9pZCBXb3JrUXVldWVCYXNlOjpwbGF0
Zm9ybUluaXRpYWxpemUoY29uc3QgY2hhciogbmFtZSwgVHlwZSwgUU9TIHFvcykKIHsKICAgICBC
aW5hcnlTZW1hcGhvcmUgc2VtYXBob3JlOwogICAgIFRocmVhZDo6Y3JlYXRlKG5hbWUsIFsmXSB7
CisjaWYgQVNTRVJUX0VOQUJMRUQKKyAgICAgICAgbV90aHJlYWRJRCA9IFRocmVhZDo6Y3VycmVu
dCgpLnVpZCgpOworI2VuZGlmCiAgICAgICAgIG1fcnVuTG9vcCA9ICZSdW5Mb29wOjpjdXJyZW50
KCk7CiAgICAgICAgIHNlbWFwaG9yZS5zaWduYWwoKTsKICAgICAgICAgbV9ydW5Mb29wLT5ydW4o
KTsKQEAgLTg1LDQgKzg4LDE2IEBAIFJlZjxXb3JrUXVldWU+IFdvcmtRdWV1ZTo6Y29uc3RydWN0
TWFpbldvcmtRdWV1ZSgpCiAgICAgcmV0dXJuIGFkb3B0UmVmKCpuZXcgV29ya1F1ZXVlKFJ1bkxv
b3A6Om1haW4oKSkpOwogfQogCisjaWYgQVNTRVJUX0VOQUJMRUQKK3ZvaWQgV29ya1F1ZXVlOjph
c3NlcnRJc0N1cnJlbnQoKQoreworICAgIEFTU0VSVChtX3RocmVhZElEID09IFRocmVhZDo6Y3Vy
cmVudCgpLnVpZCgpKTsKK30KKyNlbmRpZgorCit1aW50MzJfdCBjdXJyZW50U2VxdWVuY2VJRCgp
Cit7CisgICAgcmV0dXJuIFRocmVhZDo6Y3VycmVudCgpLnVpZCgpOworfQorCiB9CmRpZmYgLS1n
aXQgYS9Tb3VyY2UvV2ViS2l0L0dQVVByb2Nlc3MvZ3JhcGhpY3MvUmVtb3RlR3JhcGhpY3NDb250
ZXh0R0wuaCBiL1NvdXJjZS9XZWJLaXQvR1BVUHJvY2Vzcy9ncmFwaGljcy9SZW1vdGVHcmFwaGlj
c0NvbnRleHRHTC5oCmluZGV4IGZmMjg0NWVkNDJmMzQ3YTliOGFiODU3MjFlNjJlZWIxNGU1MTdm
MDguLjRhOGY0MjA0NGRmOTk2YzMwZjhhMjJkMzYxMGU3NmEzOWQ2MjEzNTQgMTAwNjQ0Ci0tLSBh
L1NvdXJjZS9XZWJLaXQvR1BVUHJvY2Vzcy9ncmFwaGljcy9SZW1vdGVHcmFwaGljc0NvbnRleHRH
TC5oCisrKyBiL1NvdXJjZS9XZWJLaXQvR1BVUHJvY2Vzcy9ncmFwaGljcy9SZW1vdGVHcmFwaGlj
c0NvbnRleHRHTC5oCkBAIC0xNDQsNyArMTQ0LDcgQEAgcHJvdGVjdGVkOgogICAgIFJlZjxSZW1v
dGVWaWRlb0ZyYW1lT2JqZWN0SGVhcD4gbV92aWRlb0ZyYW1lT2JqZWN0SGVhcDsKICNlbmRpZgog
ICAgIFNjb3BlZFdlYkdMUmVuZGVyaW5nUmVzb3VyY2VzUmVxdWVzdCBtX3JlbmRlcmluZ1Jlc291
cmNlc1JlcXVlc3Q7Ci0gICAgTk9fVU5JUVVFX0FERFJFU1MgVGhyZWFkQXNzZXJ0aW9uIG1fc3Ry
ZWFtVGhyZWFkOworICAgIFNlcXVlbmNlQXNzZXJ0aW9uIG1fc3RyZWFtVGhyZWFkIE5PX1VOSVFV
RV9BRERSRVNTOwogICAgIFdlYkNvcmU6OlByb2Nlc3NJZGVudGlmaWVyIG1fd2ViUHJvY2Vzc0lk
ZW50aWZpZXI7CiB9OwogCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViS2l0L0dQVVByb2Nlc3MvZ3Jh
cGhpY3MvV2ViR1BVL1JlbW90ZUdQVS5oIGIvU291cmNlL1dlYktpdC9HUFVQcm9jZXNzL2dyYXBo
aWNzL1dlYkdQVS9SZW1vdGVHUFUuaAppbmRleCA1M2E4Njc1Y2QxOWFlMzcwM2U5OGEyNWEzYzM3
MjFiNDdhMmQ1MjQ1Li5jYzk0NDRkNTJlYmMyN2M1YjY4NTc4MjVjNGE4NzUwMDhiZmUwZDlkIDEw
MDY0NAotLS0gYS9Tb3VyY2UvV2ViS2l0L0dQVVByb2Nlc3MvZ3JhcGhpY3MvV2ViR1BVL1JlbW90
ZUdQVS5oCisrKyBiL1NvdXJjZS9XZWJLaXQvR1BVUHJvY2Vzcy9ncmFwaGljcy9XZWJHUFUvUmVt
b3RlR1BVLmgKQEAgLTE0Miw3ICsxNDIsNyBAQCBwcml2YXRlOgogICAgIFJlZjxXZWJHUFU6Ok9i
amVjdEhlYXA+IG1fb2JqZWN0SGVhcCBXVEZfR1VBUkRFRF9CWV9MT0NLKG1fc3RyZWFtVGhyZWFk
KTsKICAgICBjb25zdCBXZWJHUFVJZGVudGlmaWVyIG1faWRlbnRpZmllcjsKICAgICBSZWY8UmVt
b3RlUmVuZGVyaW5nQmFja2VuZD4gbV9yZW5kZXJpbmdCYWNrZW5kOwotICAgIE5PX1VOSVFVRV9B
RERSRVNTIFRocmVhZEFzc2VydGlvbiBtX3N0cmVhbVRocmVhZDsKKyAgICBTZXF1ZW5jZUFzc2Vy
dGlvbiBtX3N0cmVhbVRocmVhZCBOT19VTklRVUVfQUREUkVTUzsKICAgICBjb25zdCBXZWJDb3Jl
OjpQcm9jZXNzSWRlbnRpZmllciBtX3dlYlByb2Nlc3NJZGVudGlmaWVyOwogfTsKIApkaWZmIC0t
Z2l0IGEvU291cmNlL1dlYktpdC9HUFVQcm9jZXNzL21lZGlhL1JlbW90ZVZpZGVvRnJhbWVPYmpl
Y3RIZWFwLmggYi9Tb3VyY2UvV2ViS2l0L0dQVVByb2Nlc3MvbWVkaWEvUmVtb3RlVmlkZW9GcmFt
ZU9iamVjdEhlYXAuaAppbmRleCBhZDBjYjNiOTYxODQ2YzAxNDU3OWFiZmUzN2I3ZDE3Y2VlZTQ0
NmZiLi40M2E4MGM5ZDk4ZDIwMTI2Mjg0NjhkNWUyYWU2NjNkZDkzZTI2OTA1IDEwMDY0NAotLS0g
YS9Tb3VyY2UvV2ViS2l0L0dQVVByb2Nlc3MvbWVkaWEvUmVtb3RlVmlkZW9GcmFtZU9iamVjdEhl
YXAuaAorKysgYi9Tb3VyY2UvV2ViS2l0L0dQVVByb2Nlc3MvbWVkaWEvUmVtb3RlVmlkZW9GcmFt
ZU9iamVjdEhlYXAuaApAQCAtNjEsNyArNjEsNyBAQCBwcml2YXRlOgogCiAgICAgR1BVQ29ubmVj
dGlvblRvV2ViUHJvY2VzcyogbV9ncHVDb25uZWN0aW9uVG9XZWJQcm9jZXNzIFdURl9HVUFSREVE
X0JZX0xPQ0sobV9jb25zdW1lVGhyZWFkKTsKICAgICBjb25zdCBSZWY8SVBDOjpDb25uZWN0aW9u
PiBtX2Nvbm5lY3Rpb247Ci0gICAgVGhyZWFkQXNzZXJ0aW9uIG1fY29uc3VtZVRocmVhZCBOT19V
TklRVUVfQUREUkVTUzsKKyAgICBTZXF1ZW5jZUFzc2VydGlvbiBtX2NvbnN1bWVUaHJlYWQgTk9f
VU5JUVVFX0FERFJFU1M7CiAgICAgU2hhcmVkVmlkZW9GcmFtZVdyaXRlciBtX3NoYXJlZFZpZGVv
RnJhbWVXcml0ZXI7CiB9OwogCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViS2l0L0dQVVByb2Nlc3Mv
d2VicnRjL1JlbW90ZVNhbXBsZUJ1ZmZlckRpc3BsYXlMYXllci5oIGIvU291cmNlL1dlYktpdC9H
UFVQcm9jZXNzL3dlYnJ0Yy9SZW1vdGVTYW1wbGVCdWZmZXJEaXNwbGF5TGF5ZXIuaAppbmRleCA4
MDJjOTBmZTllYjY2NGJhOTMyMWQ3YThiZGU1ZDk4NGY0MDNmMWRiLi5iODdmYWE1ZWFjMmVkMjFi
ODBjNDU1NTQwMDY3NmQ4ZjU4MGNiZTg5IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViS2l0L0dQVVBy
b2Nlc3Mvd2VicnRjL1JlbW90ZVNhbXBsZUJ1ZmZlckRpc3BsYXlMYXllci5oCisrKyBiL1NvdXJj
ZS9XZWJLaXQvR1BVUHJvY2Vzcy93ZWJydGMvUmVtb3RlU2FtcGxlQnVmZmVyRGlzcGxheUxheWVy
LmgKQEAgLTk4LDcgKzk4LDcgQEAgcHJpdmF0ZToKICAgICBzdGQ6OnVuaXF1ZV9wdHI8TGF5ZXJI
b3N0aW5nQ29udGV4dD4gbV9sYXllckhvc3RpbmdDb250ZXh0OwogICAgIFNoYXJlZFZpZGVvRnJh
bWVSZWFkZXIgbV9zaGFyZWRWaWRlb0ZyYW1lUmVhZGVyOwogICAgIFJlZjxSZW1vdGVWaWRlb0Zy
YW1lT2JqZWN0SGVhcD4gbV92aWRlb0ZyYW1lT2JqZWN0SGVhcDsKLSAgICBUaHJlYWRBc3NlcnRp
b24gbV9jb25zdW1lVGhyZWFkIE5PX1VOSVFVRV9BRERSRVNTOworICAgIFNlcXVlbmNlQXNzZXJ0
aW9uIG1fY29uc3VtZVRocmVhZCBOT19VTklRVUVfQUREUkVTUzsKIAogfTsKIApkaWZmIC0tZ2l0
IGEvVG9vbHMvQ2hhbmdlTG9nIGIvVG9vbHMvQ2hhbmdlTG9nCmluZGV4IGM1MGQyMTIyOTAzNDFj
Y2E3MThjNWI1YWM3YTIwMGRiNWQxZjhjNGYuLmJiYmNiYzhiNmYxZGYyMWVkYmQ0Yzk5OTZmN2Fl
ZWUyZWEzYzlmM2MgMTAwNjQ0Ci0tLSBhL1Rvb2xzL0NoYW5nZUxvZworKysgYi9Ub29scy9DaGFu
Z2VMb2cKQEAgLTEsMyArMSwyMiBAQAorMjAyMi0wMi0xOCAgS2ltbW8gS2lubnVuZW4gIDxra2lu
bnVuZW5AYXBwbGUuY29tPgorCisgICAgICAgIFRocmVhZCBzYWZldHkgYW5hbHlzaXMgdG8gYXNz
ZXJ0ICJjb2RlIGlzIHJ1biBzZXF1ZW50aWFsbHkiIGlzIG5vdCB1c2VmdWwgd2hlbiBjb2RlIGlz
IG1haW5seSBydW4gd2l0aCBXb3JrUXVldWVzCisgICAgICAgIGh0dHBzOi8vYnVncy53ZWJraXQu
b3JnL3Nob3dfYnVnLmNnaT9pZD0yMzY4MzIKKworICAgICAgICBSZXZpZXdlZCBieSBOT0JPRFkg
KE9PUFMhKS4KKworICAgICAgICBUZXN0IHRoZSBhZGRlZCBmdW5jdGlvbmFsaXR5IHRvIGJlIGFi
bGUgdG8gdXNlIGFzc2VydElzQ3VycmVudCh0aHJlYWQvd29ya1F1ZXVlKS4KKworICAgICAgICBG
aXggV1RGX1dvcmtRdWV1ZS5EZXN0cm95RGlzcGF0Y2hlZE9uRGlzcGF0Y2hRdWV1ZSB0ZXN0LCBp
dCBpcyBub3cgYWJsZSB0byBtYWtlIHRoZSBhc3NlcnRpb24gY29ycmVjdGx5LgorICAgICAgICAt
IFRoZSBvYmplY3QgaXMgY3JlYXRlZCBzb21ld2hlcmUgdGhhdCBpcyBub3QgdGhlIHRlc3RlZCBX
b3JrUXVldWUKKyAgICAgICAgLSBUaGUgb2JqZWN0IGlzIGRlc3Ryb3llZCBpbiB0aGUgdGVzdGVk
IFdvcmtRdWV1ZQorCisgICAgICAgICogVGVzdFdlYktpdEFQSS9UZXN0cy9XVEYvVGhyZWFkQXNz
ZXJ0aW9uc1Rlc3QuY3BwOgorICAgICAgICAqIFRlc3RXZWJLaXRBUEkvVGVzdHMvV1RGL1RocmVh
ZGluZy5jcHA6CisgICAgICAgIChUZXN0V2ViS2l0QVBJOjpURVNUKToKKyAgICAgICAgKiBUZXN0
V2ViS2l0QVBJL1Rlc3RzL1dURi9Xb3JrUXVldWUuY3BwOgorICAgICAgICAoVGVzdFdlYktpdEFQ
STo6VEVTVCk6CisKIDIwMjItMDItMTcgIFNpaHVpIExpdSAgPHNpaHVpX2xpdUBhcHBsZS5jb20+
CiAKICAgICAgICAgRW5zdXJlIE5ldHdvcmtTdG9yYWdlTWFuYWdlcjo6bW92ZURhdGEgcGVyZm9y
bXMgbW92ZSBvcGVyYXRpb24gYmFzZWQgb24gZGF0YSB0eXBlcwpkaWZmIC0tZ2l0IGEvVG9vbHMv
VGVzdFdlYktpdEFQSS9UZXN0cy9XVEYvVGhyZWFkQXNzZXJ0aW9uc1Rlc3QuY3BwIGIvVG9vbHMv
VGVzdFdlYktpdEFQSS9UZXN0cy9XVEYvVGhyZWFkQXNzZXJ0aW9uc1Rlc3QuY3BwCmluZGV4IDA3
NDlkNmY2MmQ2NDk0YzZlMjgwNjU1Njg1OTA4MjgxN2I4YTdjMDAuLjhjNDEyMDRlNTFmNWJlMjhl
MDBmNjBmMTJhODdmNzU0OTIwNDk3YzQgMTAwNjQ0Ci0tLSBhL1Rvb2xzL1Rlc3RXZWJLaXRBUEkv
VGVzdHMvV1RGL1RocmVhZEFzc2VydGlvbnNUZXN0LmNwcAorKysgYi9Ub29scy9UZXN0V2ViS2l0
QVBJL1Rlc3RzL1dURi9UaHJlYWRBc3NlcnRpb25zVGVzdC5jcHAKQEAgLTQ4LDcgKzQ4LDcgQEAg
cHVibGljOgogcHJpdmF0ZToKICAgICBpbnQgZG9UYXNrSW1wbChpbnQgbikgV1RGX1JFUVVJUkVT
X0xPQ0sobV9vd25lclRocmVhZCkgeyByZXR1cm4gbiArIDE7IH0KICAgICBpbnQgbV92YWx1ZSBX
VEZfR1VBUkRFRF9CWV9MT0NLKG1fb3duZXJUaHJlYWQpIHsgMCB9OwotICAgIE5PX1VOSVFVRV9B
RERSRVNTIFRocmVhZEFzc2VydGlvbiBtX293bmVyVGhyZWFkOworICAgIFNlcXVlbmNlQXNzZXJ0
aW9uIG1fb3duZXJUaHJlYWQgTk9fVU5JUVVFX0FERFJFU1M7CiB9OwogfQogCmRpZmYgLS1naXQg
YS9Ub29scy9UZXN0V2ViS2l0QVBJL1Rlc3RzL1dURi9UaHJlYWRpbmcuY3BwIGIvVG9vbHMvVGVz
dFdlYktpdEFQSS9UZXN0cy9XVEYvVGhyZWFkaW5nLmNwcAppbmRleCAzNDY4ZDE1MDk2YzUyOGIy
OGY5NDdlNzNmODA5MTNmMDBhZGFkYjJmLi5jODcwMDk3MDRhYTkzNWYwMmRhMTM0NjdlNjZkNzdj
NjFmYWM3NjllIDEwMDY0NAotLS0gYS9Ub29scy9UZXN0V2ViS2l0QVBJL1Rlc3RzL1dURi9UaHJl
YWRpbmcuY3BwCisrKyBiL1Rvb2xzL1Rlc3RXZWJLaXRBUEkvVGVzdHMvV1RGL1RocmVhZGluZy5j
cHAKQEAgLTI3LDYgKzI3LDcgQEAKIAogI2luY2x1ZGUgPHd0Zi9UaHJlYWRpbmcuaD4KICNpbmNs
dWRlIDx3dGYvVmVjdG9yLmg+CisjaW5jbHVkZSA8d3RmL3RocmVhZHMvQmluYXJ5U2VtYXBob3Jl
Lmg+CiAKIG5hbWVzcGFjZSBUZXN0V2ViS2l0QVBJIHsKIApAQCAtNjUsNCArNjYsNTkgQEAgVEVT
VChXVEYsIFRocmVhZGluZ1RocmVhZElkZW50aXR5KQogfQogI2VuZGlmIC8vIFVTRShQVEhSRUFE
UykKIAorbmFtZXNwYWNlIHsKK3N0cnVjdCBBc3NlcnRpb25UZXN0SG9sZGVyIHsKKyAgICBSZWZQ
dHI8VGhyZWFkPiB0aHJlYWQ7CisgICAgc2l6ZV90IGNvdW50ZXIgV1RGX0dVQVJERURfQllfTE9D
SygqdGhyZWFkKSB7IDAgfTsKKyAgICBzaXplX3QgcmVzdWx0IHsgMCB9OyAvLyBUaGlzIGlzIGhl
cmUgdG8gc3VwcG9ydCB0aGUgcmVzdWx0IGFzc2VydGlvbi4gVGhlIGNvbXBpbGVyIGRvZXNuJ3Qg
YWxsb3cgdXMgdG8gb2J0YWluIHRoZSBgY291bnRlcmAgb3RoZXJ3aXNlLgorCisgICAgQXNzZXJ0
aW9uVGVzdEhvbGRlcigpCisgICAgeworICAgICAgICBCaW5hcnlTZW1hcGhvcmUgbWVtYmVySW5p
dGlhbGl6ZWQ7CisgICAgICAgIEJpbmFyeVNlbWFwaG9yZSB0aHJlYWRJbml0aWFsaXplZDsKKwor
ICAgICAgICB0aHJlYWQgPSBUaHJlYWQ6OmNyZWF0ZSgiY29tLmFwcGxlLldlYktpdC5UZXN0LlRo
cmVhZFRocmVhZFNhZmV0eUFuYWx5c2lzQXNzZXJ0SXNDdXJyZW50V29ya3MiLCBbJl0geworICAg
ICAgICAgICAgbWVtYmVySW5pdGlhbGl6ZWQud2FpdCgpOyAvLyBXYWl0IGZvciBgQXNzZXJ0aW9u
VGVzdEhvbGRlcjo6dGhyZWFkYCBhc3NpZ25tZW50IHRvIGNvbXBsZXRlLgorICAgICAgICAgICAg
dGhyZWFkSW5pdGlhbGl6ZWQuc2lnbmFsKCk7CisvLyBFbmFibGUgdG8gc2VlICJ3cml0aW5nIHZh
cmlhYmxlICdjb3VudGVyJyByZXF1aXJlcyBob2xkaW5nIG11dGV4ICd0aHJlYWQnIGV4Y2x1c2l2
ZWx5Ii4KKy8vICNkZWZpbmUgVEVTVF9DT01QSUxFX0ZBSUxVUkUKKyNpZmRlZiBURVNUX0NPTVBJ
TEVfRkFJTFVSRQorICAgICAgICAgICAgdGVzdFRhc2tUaGF0RmFpbHNUb0NvbXBpbGU8aW50Pigp
OworI2VuZGlmCisgICAgICAgICAgICB0ZXN0VGFzaygpOworICAgICAgICAgICAgYXNzZXJ0SXND
dXJyZW50KCp0aHJlYWQpOworICAgICAgICAgICAgY29tcHV0ZVJlc3VsdCgpOworICAgICAgICB9
KTsKKyAgICAgICAgbWVtYmVySW5pdGlhbGl6ZWQuc2lnbmFsKCk7CisgICAgICAgIHRocmVhZElu
aXRpYWxpemVkLndhaXQoKTsgLy8gV2FpdCBmb3IgdGhlIHRocmVhZCB0byBzdG9wIHVzaW5nIGBt
ZW1iZXJJbml0aWFsaXplZGAsIGFzIHdlIHdpbGwgZGVzdHJveSBpdC4KKyAgICB9CisgICAgdm9p
ZCB0ZXN0VGFzaygpCisgICAgeworICAgICAgICBhc3NlcnRJc0N1cnJlbnQoKnRocmVhZCk7IC8v
IFRoaXMgaXMgYmVpbmcgdGVzdGVkLgorICAgICAgICArK2NvdW50ZXI7CisgICAgfQorICAgIHZv
aWQgY29tcHV0ZVJlc3VsdCgpIFdURl9SRVFVSVJFU19MT0NLKCp0aHJlYWQpIC8vIFRoaXMgaXMg
YmVpbmcgdGVzdGVkLgorICAgIHsKKyAgICAgICAgcmVzdWx0ID0gKytjb3VudGVyOworICAgIH0K
KyAgICB0ZW1wbGF0ZTx0eXBlbmFtZSBUPiB2b2lkIHRlc3RUYXNrVGhhdEZhaWxzVG9Db21waWxl
KCkKKyAgICB7CisgICAgICAgICsrY291bnRlcjsKKyAgICB9Cit9OworfQorCisvLyBDb25zaWRl
ciBkZWNsYXJhdGlvbiBgUmVmUHRyPFRocmVhZD4gbXlUaHJlYWRgLgorLy8gVGhpcyB0ZXN0IHRl
c3RzIHRoYXQgY2xpZW50cyBjYW4gdXNlIHRocmVhZCBzYWZldHkgYW5hbHlzaXMgdG8gY2hlY2sg
dGhhdCB0aGUgdGhyZWFkIGlzIGN1cnJlbnQKKy8vIGJ5IHVzaW5nIGBhc3NlcnRJc0N1cnJlbnQo
Km15VGhyZWFkKTtgIHRvIGVzdGFibGlzaCB0aGUgYXNzZXJ0aW9uIGFuZCBXVEZfR1VBUkRFRF9C
WV9MT0NLLCBXVEZfUkVRVUlSRVNfQllfTE9DSworLy8gZGVjbGFyYXRpb25zIHRvIGxldCB0aGUg
Y29tcGlsZXIgYW5hbHl6ZSB0aGUgdXNlcyBvZiB0aGUgdmFyaWFibGVzIGFuZCBmdW5jdGlvbnMg
d2l0aCB0aGUgZGVjbGFyYXRpb25zLgorVEVTVChXVEZfVGhyZWFkLCBUaHJlYWRTYWZldHlBbmFs
eXNpc0Fzc2VydElzQ3VycmVudFdvcmtzKQoreworICAgIEFzc2VydGlvblRlc3RIb2xkZXIgaG9s
ZGVyc1s1MF07CisgICAgZm9yIChhdXRvJiBob2xkZXIgOiBob2xkZXJzKQorICAgICAgICBob2xk
ZXIudGhyZWFkLT53YWl0Rm9yQ29tcGxldGlvbigpOworICAgIGZvciAoYXV0byYgaG9sZGVyIDog
aG9sZGVycykKKyAgICAgICAgRVhQRUNUX0VRKDJ1LCBob2xkZXIucmVzdWx0KTsKK30KKwogfSAv
LyBuYW1lc3BhY2UgVGVzdFdlYktpdEFQSQpkaWZmIC0tZ2l0IGEvVG9vbHMvVGVzdFdlYktpdEFQ
SS9UZXN0cy9XVEYvV29ya1F1ZXVlLmNwcCBiL1Rvb2xzL1Rlc3RXZWJLaXRBUEkvVGVzdHMvV1RG
L1dvcmtRdWV1ZS5jcHAKaW5kZXggMmY0Y2Y2NGE4YWNmZWI2NDJlMDYyZDg4NmZkMmJlNDg4ZjAz
NTZlZi4uNWZiYmFhNzFjNjg4Yjk5YTAzMTljYzliNjBmMDhjMDNlMDgxYTI4MiAxMDA2NDQKLS0t
IGEvVG9vbHMvVGVzdFdlYktpdEFQSS9UZXN0cy9XVEYvV29ya1F1ZXVlLmNwcAorKysgYi9Ub29s
cy9UZXN0V2ViS2l0QVBJL1Rlc3RzL1dURi9Xb3JrUXVldWUuY3BwCkBAIC0yODksMTEgKzI4OSwx
MSBAQCBURVNUKFdURl9Xb3JrUXVldWUsIERlc3Ryb3lEaXNwYXRjaGVkT25EaXNwYXRjaFF1ZXVl
KQogICAgICAgICB9CiAgICAgICAgIH5EZXN0cnVjdGlvbldvcmtRdWV1ZVRlc3RlcigpCiAgICAg
ICAgIHsKLSAgICAgICAgICAgIEVYUEVDVF9ORShtX2NyZWF0ZWRJblRocmVhZCwgVGhyZWFkOjpj
dXJyZW50KCkudWlkKCkpOworICAgICAgICAgICAgRVhQRUNUX05FKG1fY3JlYXRlZEluU2VxdWVu
Y2UsIGN1cnJlbnRTZXF1ZW5jZUlEKCkpOwogICAgICAgICAgICAgbV9jb3VudGVyKys7CiAgICAg
ICAgIH0KICAgICBwcml2YXRlOgotICAgICAgICB1aW50MzJfdCBtX2NyZWF0ZWRJblRocmVhZCA9
IFRocmVhZDo6Y3VycmVudCgpLnVpZCgpOworICAgICAgICB1aW50MzJfdCBtX2NyZWF0ZWRJblNl
cXVlbmNlID0gY3VycmVudFNlcXVlbmNlSUQoKTsKICAgICAgICAgc3RkOjphdG9taWM8c2l6ZV90
PiYgbV9jb3VudGVyOwogICAgIH07CiAgICAgY29uc3RleHByIHNpemVfdCBxdWV1ZUNvdW50ID0g
NTA7CkBAIC0zMDksNiArMzA5LDQ5IEBAIFRFU1QoV1RGX1dvcmtRdWV1ZSwgRGVzdHJveURpc3Bh
dGNoZWRPbkRpc3BhdGNoUXVldWUpCiAgICAgZm9yIChzaXplX3QgaiA9IDA7IGogPCBxdWV1ZUNv
dW50OyArK2opCiAgICAgICAgIHF1ZXVlW2pdLT5kaXNwYXRjaFN5bmMoW10geyB9KTsKICAgICBF
WFBFQ1RfRVEocXVldWVDb3VudCAqIGl0ZXJhdGlvbkNvdW50LCBjb3VudGVyKTsKK30KKworbmFt
ZXNwYWNlIHsKK3N0cnVjdCBBc3NlcnRpb25UZXN0SG9sZGVyIHsKKyAgICBjb25zdCBSZWZQdHI8
V29ya1F1ZXVlPiBxdWV1ZSB7IFdvcmtRdWV1ZTo6Y3JlYXRlKCJjb20uYXBwbGUuV2ViS2l0LlRl
c3QuVGhyZWFkU2FmZXR5QW5hbHlzaXNBc3NlcnRJc0N1cnJlbnRXb3JrcyIsIFdvcmtRdWV1ZTo6
UU9TOjpVc2VySW50ZXJhY3RpdmUpIH07CisgICAgc2l6ZV90IGNvdW50ZXIgV1RGX0dVQVJERURf
QllfTE9DSygqcXVldWUpIHsgMCB9OworICAgIHNpemVfdCByZXN1bHQgeyAwIH07IC8vIFRoaXMg
aXMgaGVyZSB0byBzdXBwb3J0IHRoZSByZXN1bHQgYXNzZXJ0aW9uLiBUaGUgY29tcGlsZXIgZG9l
c24ndCBhbGxvdyB1cyB0byBvYnRhaW4gdGhlIGBjb3VudGVyYCBvdGhlcndpc2UuCiAKKyAgICB2
b2lkIHRlc3RUYXNrKCkKKyAgICB7CisgICAgICAgIGFzc2VydElzQ3VycmVudCgqcXVldWUpOyAv
LyBUaGlzIGlzIGJlaW5nIHRlc3RlZC4KKyAgICAgICAgKytjb3VudGVyOworICAgIH0KKyAgICB2
b2lkIGNvbXB1dGVSZXN1bHQoKSBXVEZfUkVRVUlSRVNfTE9DSygqcXVldWUpIC8vIFRoaXMgaXMg
YmVpbmcgdGVzdGVkLgorICAgIHsKKyAgICAgICAgcmVzdWx0ID0gKytjb3VudGVyOworICAgIH0K
KyAgICB0ZW1wbGF0ZTx0eXBlbmFtZSBUPiB2b2lkIHRlc3RUYXNrVGhhdEZhaWxzVG9Db21waWxl
KCkKKyAgICB7CisgICAgICAgICsrY291bnRlcjsKKyAgICB9Cit9OwogfQorCitURVNUKFdURl9X
b3JrUXVldWUsIFRocmVhZFNhZmV0eUFuYWx5c2lzQXNzZXJ0SXNDdXJyZW50V29ya3MpCit7Cisg
ICAgY29uc3RleHByIHNpemVfdCBxdWV1ZUNvdW50ID0gNTA7CisgICAgY29uc3RleHByIHNpemVf
dCBpdGVyYXRpb25Db3VudCA9IDEwMDAwOworCisgICAgQXNzZXJ0aW9uVGVzdEhvbGRlciBob2xk
ZXJzW3F1ZXVlQ291bnRdOworICAgIGZvciAoc2l6ZV90IGkgPSAwOyBpIDwgaXRlcmF0aW9uQ291
bnQ7ICsraSkgeworICAgICAgICBmb3IgKGF1dG8mIGhvbGRlciA6IGhvbGRlcnMpCisgICAgICAg
ICAgICBob2xkZXIucXVldWUtPmRpc3BhdGNoKFsmaG9sZGVyXSB7IGhvbGRlci50ZXN0VGFzaygp
OyB9KTsKKyAgICB9CisvLyAjZGVmaW5lIFRFU1RfQ09NUElMRV9GQUlMVVJFCisjaWZkZWYgVEVT
VF9DT01QSUxFX0ZBSUxVUkUKKyAgICBmb3IgKGF1dG8mIGhvbGRlciA6IGhvbGRlcnMpCisgICAg
ICAgIGhvbGRlci5xdWV1ZS0+ZGlzcGF0Y2hTeW5jKFsmaG9sZGVyXSB7IGhvbGRlci50ZXN0VGFz
a1RoYXRGYWlsc1RvQ29tcGlsZTxpbnQ+KCk7IH0pOworI2VuZGlmCisgICAgZm9yIChhdXRvJiBo
b2xkZXIgOiBob2xkZXJzKQorICAgICAgICBob2xkZXIucXVldWUtPmRpc3BhdGNoU3luYyhbJmhv
bGRlcl0geyBhc3NlcnRJc0N1cnJlbnQoKmhvbGRlci5xdWV1ZSk7IGhvbGRlci5jb21wdXRlUmVz
dWx0KCk7IH0pOworICAgIGZvciAoYXV0byYgaG9sZGVyIDogaG9sZGVycykKKyAgICAgICAgRVhQ
RUNUX0VRKGl0ZXJhdGlvbkNvdW50ICsgMSwgaG9sZGVyLnJlc3VsdCk7Cit9CisKIH0gLy8gbmFt
ZXNwYWNlIFRlc3RXZWJLaXRBUEkK
</data>

          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>452842</attachid>
            <date>2022-02-22 01:35:55 -0800</date>
            <delta_ts>2022-02-23 04:12:17 -0800</delta_ts>
            <desc>Patch</desc>
            <filename>bug-236832-20220222113553.patch</filename>
            <type>text/plain</type>
            <size>112641</size>
            <attacher name="Kimmo Kinnunen">kkinnunen</attacher>
            
              <data encoding="base64">U3VidmVyc2lvbiBSZXZpc2lvbjogMjkwMjkwCmRpZmYgLS1naXQgYS9Tb3VyY2UvV1RGL0NoYW5n
ZUxvZyBiL1NvdXJjZS9XVEYvQ2hhbmdlTG9nCmluZGV4IDNlMDc5YzkwNDFmMGU1NjE3MGNiMzJi
NDI4NWIxYWVjZTc4MjQwNGUuLjBhYmQxOTQwNDExMzg4MTg5MDBiMTMzYjIxZjRjOGUxYWMyODIx
NDggMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XVEYvQ2hhbmdlTG9nCisrKyBiL1NvdXJjZS9XVEYvQ2hh
bmdlTG9nCkBAIC0xLDMgKzEsNDYgQEAKKzIwMjItMDItMjEgIEtpbW1vIEtpbm51bmVuICA8a2tp
bm51bmVuQGFwcGxlLmNvbT4KKworICAgICAgICBUaHJlYWQgc2FmZXR5IGFuYWx5c2lzIHRvIGFz
c2VydCAiY29kZSBpcyBydW4gc2VxdWVudGlhbGx5IiBpcyBub3QgdXNlZnVsIHdoZW4gY29kZSBp
cyBtYWlubHkgcnVuIHdpdGggV29ya1F1ZXVlcworICAgICAgICBodHRwczovL2J1Z3Mud2Via2l0
Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9MjM2ODMyCisKKyAgICAgICAgUmV2aWV3ZWQgYnkgTk9CT0RZ
IChPT1BTISkuCisKKyAgICAgICAgVGhyZWFkIHNhZmV0eSBhbmFseXNpcyBpcyBub3QgdXNlZnVs
IHdoZW4gY29kZSBpcyBtYWlubHkgcnVuIHdpdGggV29ya1F1ZXVlcy4KKyAgICAgICAgV29ya1F1
ZXVlIHJ1bm5hYmxlcyBtaWdodCBydW4gaW4gYXJiaXRyYXJ5IHRocmVhZCwgYnV0IHN0aWxsIHNl
cmlhbGx5IGluIGEgc3BlY2lmaWMKKyAgICAgICAgIndvcmsgcXVldWUiLiBUaHVzIGN1cnJlbnQg
VGhyZWFkQXNzZXJ0aW9uIHByb2R1Y2VzIGZhbHNlIGFzc2VydGlvbnMuCisKKyAgICAgICAgTWFr
ZSBUaHJlYWQgYW5kIFdvcmtRdWV1ZSBob2xkICJpcyBjdXJyZW50IiBjYXBhYmlsaXR5LiBUaGlz
IG1lYW5zIHRoZQorICAgICAgICBgYXNzZXJ0SXNDdXJyZW50KHRocmVhZC93b3JrUXVldWUpYCBj
YW4gZXN0YWJsaXNoIHRoYXQgdGhlIGNhbGxlciBob2xkcyB0aGUgY2FwYWJpdHksCisgICAgICAg
IGUuZy4gdGhhdCB0aGUgY2FsbGVyIGlzIHJ1bm5pbmcgaW4gdGhlIHBhcnRpY3VsYXIgdGhyZWFk
IG9yIHdvcmsgcXVldWUuCisKKyAgICAgICAgSW1wbGVtZW50IGJ5IGRlZmluaW5nIGFuIGltcGxl
bWVudGF0aW9uIGRldGFpbCB0ZXJtICJzZXF1ZW5jZSIsIGUuZy4gc29tZXRoaW5nCisgICAgICAg
IHdoZXJlIGNvZGUgZXhlY3V0ZXMgc2VxdWVudGlhbGx5LiBUaGlzIGRldGFpbCBpcyBpbXBsZW1l
bnRlZCBpbiBgV1RGOjpjdXJyZW50U2VxdWVuY2VJRGAgZnVuY3Rpb24uCisKKyAgICAgICAgSW1w
bGVtZW50IGZvciBub24tQ29jb2EgYnkganVzdCB1c2luZyB0aHJlYWQgaWQgZm9yIHRoZSBzZXF1
ZW5jZSBpZC4gQWxsIFdvcmtRdWV1ZXMgaGF2ZSB1bmlxdWUgdGhyZWFkcworICAgICAgICBhbmQg
YWxsIFRocmVhZHMgaGF2ZSB1bmlxdWUgaWRzLiBUaGlzIG1lYW5zIFdvcmtRdWV1ZXMgY2FuIGJl
IGRpc3RpbnF1aXNoZWQgZnJvbSBUaHJlYWRzIHdpdGhvdXQgV29ya1F1ZXVlcy4KKworICAgICAg
ICBJbXBsZW1lbnQgZm9yIG5vbi1Db2NvYSBieSB1c2luZyB0aGUgc2FtZSB1aWQgaWQgbmFtZXNw
YWNlIGZvciBXb3JrUXVldWVzIGFzIFRocmVhZHMgaGF2ZS4gU3RvcmUgdGhlIHVpZAorICAgICAg
ICBpbiBEaXNwYXRjaCBkaXNwYXRjaCBxdWV1ZSBzcGVjaWZpYyBmaWVsZC4gSWYgdGhlIGNvZGUg
aXMgbm90IHJ1bm5pbmcgaW4gRGlzcGF0Y2gsIHJldHVybiB0aGUgY3VycmVudAorICAgICAgICB0
aHJlYWQgdWlkLiBTaW5jZSB0aGUgdWlkIG5hbWVzcGFjZSBpcyB0aGUgc2FtZSwgV29ya1F1ZXVl
cyBjYW4gYmUgZGlzdGludWlzaGVkIGZyb20gVGhyZWFkcyB3aXRob3V0IFdvcmtRdWV1ZXMuCisK
KyAgICAgICAgSW4gYm90aCBjYXNlcywgbm9uLVdlYktpdCBwbGF0Zm9ybSB0aHJlYWRzIGdldCBh
bHNvIGEgVGhyZWFkLCBzbyB0aGV5J3JlIGRpc3RpbnF1aXNoZWQgZnJvbSBXb3JrUXVldWVzLgor
CisgICAgICAgIFRlc3RlZCBieSBuZXcgQVBJIHRlc3RzLgorCisgICAgICAgICogd3RmL1RocmVh
ZEFzc2VydGlvbnMuaDoKKyAgICAgICAgKFdURjo6V1RGX0FTU0VSVFNfQUNRVUlSRURfTE9DSyk6
CisgICAgICAgICogd3RmL1RocmVhZGluZy5oOgorICAgICAgICAoV1RGOjpXVEZfQVNTRVJUU19B
Q1FVSVJFRF9MT0NLKToKKyAgICAgICAgKiB3dGYvV29ya1F1ZXVlLmg6CisgICAgICAgIChXVEY6
OldURl9BU1NFUlRTX0FDUVVJUkVEX0xPQ0spOgorICAgICAgICAqIHd0Zi9jb2NvYS9Xb3JrUXVl
dWVDb2NvYS5jcHA6CisgICAgICAgIChXVEY6OldvcmtRdWV1ZUJhc2U6OnBsYXRmb3JtSW5pdGlh
bGl6ZSk6CisgICAgICAgIChXVEY6OldvcmtRdWV1ZTo6YXNzZXJ0SXNDdXJyZW50IGNvbnN0KToK
KyAgICAgICAgKFdURjo6Y3VycmVudFNlcXVlbmNlSUQpOgorICAgICAgICAqIHd0Zi9nZW5lcmlj
L1dvcmtRdWV1ZUdlbmVyaWMuY3BwOgorICAgICAgICAoV1RGOjpXb3JrUXVldWVCYXNlOjpwbGF0
Zm9ybUluaXRpYWxpemUpOgorICAgICAgICAoV1RGOjpjdXJyZW50U2VxdWVuY2VJRCk6CisKIDIw
MjItMDItMjIgIEtpbW1vIEtpbm51bmVuICA8a2tpbm51bmVuQGFwcGxlLmNvbT4KIAogICAgICAg
ICBUaHJlYWQgc2FmZXR5IGFuYWx5c2lzIG1hY3JvcyBhcmUgY29uZnVzaW5nIGZvciBub24tTG9j
ayB1c2UtY2FzZXMKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJLaXQvQ2hhbmdlTG9nIGIvU291cmNl
L1dlYktpdC9DaGFuZ2VMb2cKaW5kZXggMmIwZDhkNjVkNTE3ZWM4YTU5YzhkNWY3ZmYwMDU4ZTRj
YjBhYjllYi4uNGU4NWU2ODM0MGM4ZmQ4NDAyOTI3Y2ZkNjcxZTFjN2I1MjE0MGFkMyAxMDA2NDQK
LS0tIGEvU291cmNlL1dlYktpdC9DaGFuZ2VMb2cKKysrIGIvU291cmNlL1dlYktpdC9DaGFuZ2VM
b2cKQEAgLTEsMyArMSwxNyBAQAorMjAyMi0wMi0yMSAgS2ltbW8gS2lubnVuZW4gIDxra2lubnVu
ZW5AYXBwbGUuY29tPgorCisgICAgICAgIFRocmVhZCBzYWZldHkgYW5hbHlzaXMgdG8gYXNzZXJ0
ICJjb2RlIGlzIHJ1biBzZXF1ZW50aWFsbHkiIGlzIG5vdCB1c2VmdWwgd2hlbiBjb2RlIGlzIG1h
aW5seSBydW4gd2l0aCBXb3JrUXVldWVzCisgICAgICAgIGh0dHBzOi8vYnVncy53ZWJraXQub3Jn
L3Nob3dfYnVnLmNnaT9pZD0yMzY4MzIKKworICAgICAgICBSZXZpZXdlZCBieSBOT0JPRFkgKE9P
UFMhKS4KKworICAgICAgICBSZW5hbWUgVGhyZWFkQXNzZXJ0aW9uIHRvIFNlcXVlbmNlQXNzZXJ0
aW9uLgorCisgICAgICAgICogR1BVUHJvY2Vzcy9ncmFwaGljcy9SZW1vdGVHcmFwaGljc0NvbnRl
eHRHTC5oOgorICAgICAgICAqIEdQVVByb2Nlc3MvZ3JhcGhpY3MvV2ViR1BVL1JlbW90ZUdQVS5o
OgorICAgICAgICAqIEdQVVByb2Nlc3MvbWVkaWEvUmVtb3RlVmlkZW9GcmFtZU9iamVjdEhlYXAu
aDoKKyAgICAgICAgKiBHUFVQcm9jZXNzL3dlYnJ0Yy9SZW1vdGVTYW1wbGVCdWZmZXJEaXNwbGF5
TGF5ZXIuaDoKKwogMjAyMi0wMi0yMiAgS2ltbW8gS2lubnVuZW4gIDxra2lubnVuZW5AYXBwbGUu
Y29tPgogCiAgICAgICAgIFRocmVhZCBzYWZldHkgYW5hbHlzaXMgbWFjcm9zIGFyZSBjb25mdXNp
bmcgZm9yIG5vbi1Mb2NrIHVzZS1jYXNlcwpkaWZmIC0tZ2l0IGEvU291cmNlL1dURi93dGYvVGhy
ZWFkaW5nLmggYi9Tb3VyY2UvV1RGL3d0Zi9UaHJlYWRpbmcuaAppbmRleCBlZGMxM2U0ZGZhZjNi
MWMyZGUwMmM5MTkxZjdjNWJkZTIwZWIwYTUzLi43YjMwZmVkZTMxMTE0ZmFhMjkyMjFhODUyNDA2
MjQ2Y2ExNmZlZmZjIDEwMDY0NAotLS0gYS9Tb3VyY2UvV1RGL3d0Zi9UaHJlYWRpbmcuaAorKysg
Yi9Tb3VyY2UvV1RGL3d0Zi9UaHJlYWRpbmcuaApAQCAtNDUsNiArNDUsNyBAQAogI2luY2x1ZGUg
PHd0Zi9TdGFja0JvdW5kcy5oPgogI2luY2x1ZGUgPHd0Zi9TdGFja1N0YXRzLmg+CiAjaW5jbHVk
ZSA8d3RmL1RocmVhZFNhZmVSZWZDb3VudGVkLmg+CisjaW5jbHVkZSA8d3RmL1RocmVhZFNhZmV0
eUFuYWx5c2lzLmg+CiAjaW5jbHVkZSA8d3RmL1ZlY3Rvci5oPgogI2luY2x1ZGUgPHd0Zi9Xb3Jk
TG9jay5oPgogI2luY2x1ZGUgPHd0Zi90ZXh0L0F0b21TdHJpbmdUYWJsZS5oPgpAQCAtNzYsNiAr
NzcsNyBAQCBlbnVtIGNsYXNzIFRocmVhZEdyb3VwQWRkUmVzdWx0OwogCiBjbGFzcyBUaHJlYWRH
cm91cDsKIGNsYXNzIFByaW50U3RyZWFtOworY2xhc3MgV29ya1F1ZXVlOwogCiBXVEZfRVhQT1JU
X1BSSVZBVEUgdm9pZCBpbml0aWFsaXplKCk7CiAKQEAgLTEwMiwxMSArMTA0LDE1IEBAIHB1Ymxp
YzoKICAgICBXVEZfRVhQT1JUX1BSSVZBVEUgflRocmVhZFN1c3BlbmRMb2NrZXIoKTsKIH07CiAK
LWNsYXNzIFRocmVhZCA6IHB1YmxpYyBUaHJlYWRTYWZlUmVmQ291bnRlZDxUaHJlYWQ+IHsKK2Ns
YXNzIFdURl9DQVBBQklMSVRZKCJpcyBjdXJyZW50IikgVGhyZWFkIDogcHVibGljIFRocmVhZFNh
ZmVSZWZDb3VudGVkPFRocmVhZD4gewogICAgIHN0YXRpYyBzdGQ6OmF0b21pYzx1aW50MzJfdD4g
c191aWQ7CiBwdWJsaWM6CiAgICAgZnJpZW5kIGNsYXNzIFRocmVhZEdyb3VwOwogICAgIGZyaWVu
ZCBXVEZfRVhQT1JUX1BSSVZBVEUgdm9pZCBpbml0aWFsaXplKCk7CisjaWYgUExBVEZPUk0oQ09D
T0EpCisgICAgZnJpZW5kIGNsYXNzIFdvcmtRdWV1ZUJhc2U7IC8vIEZvciBhY2Nlc3MgdG8gc191
aWQsIHNvIFRocmVhZHMgYW5kIFdvcmtRdWV1ZSBpZHMgYXJlIGluIHRoZSBzYW1lIG5hbWVzcGFj
ZS4KKyAgICBmcmllbmQgdWludDMyX3QgY3VycmVudFNlcXVlbmNlSUQoKTsKKyNlbmRpZgogCiAg
ICAgV1RGX0VYUE9SVF9QUklWQVRFIH5UaHJlYWQoKTsKIApAQCAtNDI3LDkgKzQzMywyNCBAQCBp
bmxpbmUgVGhyZWFkJiBUaHJlYWQ6OmN1cnJlbnQoKQogICAgIHJldHVybiBpbml0aWFsaXplQ3Vy
cmVudFRMUygpOwogfQogCitpbmxpbmUgdm9pZCBhc3NlcnRJc0N1cnJlbnQoY29uc3QgVGhyZWFk
JiB0aHJlYWQpIFdURl9BU1NFUlRTX0FDUVVJUkVEX0NBUEFCSUxJVFkodGhyZWFkKQoreworICAg
IEFTU0VSVCgmdGhyZWFkID09ICZUaHJlYWQ6OmN1cnJlbnQoKSk7Cit9CisKK2lubGluZSBjb25z
dGV4cHIgdWludDMyX3QgaW52YWxpZFNlcXVlbmNlSUQgeyAwIH07CisKKy8vIFJldHVybnMgdW5p
cXVlIGlkIGZvciBjdXJyZW50IHdvcmsgcXVldWUgb3IgdGhyZWFkLgorLy8gUmV0dXJuIHZhbHVl
IGlzIG5vdCBgaW52YWxpZFNlcXVlbmNlSURgLgorV1RGX0VYUE9SVF9QUklWQVRFIHVpbnQzMl90
IGN1cnJlbnRTZXF1ZW5jZUlEKCk7CisKKwogfSAvLyBuYW1lc3BhY2UgV1RGCiAKIHVzaW5nIFdU
Rjo6VGhyZWFkU3VzcGVuZExvY2tlcjsKIHVzaW5nIFdURjo6VGhyZWFkOwogdXNpbmcgV1RGOjpU
aHJlYWRUeXBlOwogdXNpbmcgV1RGOjpHQ1RocmVhZFR5cGU7Cit1c2luZyBXVEY6OmFzc2VydElz
Q3VycmVudDsKK3VzaW5nIFdURjo6Y3VycmVudFNlcXVlbmNlSUQ7Cit1c2luZyBXVEY6OmludmFs
aWRTZXF1ZW5jZUlEOwpkaWZmIC0tZ2l0IGEvU291cmNlL1dURi93dGYvV29ya1F1ZXVlLmggYi9T
b3VyY2UvV1RGL3d0Zi9Xb3JrUXVldWUuaAppbmRleCAzNjhjMDY2ZDhmOTZiNGJjZTc0MzE4MjUy
ZTNjMDI2NjYxZDhmNjk3Li4zZjY2NGZlYzU5MzU0YWZkY2ZlMDQ4ZjBmYmU3YWExNzFlYzI4MmU3
IDEwMDY0NAotLS0gYS9Tb3VyY2UvV1RGL3d0Zi9Xb3JrUXVldWUuaAorKysgYi9Tb3VyY2UvV1RG
L3d0Zi9Xb3JrUXVldWUuaApAQCAtMzAsNiArMzAsNyBAQAogI2luY2x1ZGUgPHd0Zi9Gb3J3YXJk
Lmg+CiAjaW5jbHVkZSA8d3RmL0Z1bmN0aW9uRGlzcGF0Y2hlci5oPgogI2luY2x1ZGUgPHd0Zi9T
ZWNvbmRzLmg+CisjaW5jbHVkZSA8d3RmL1RocmVhZFNhZmV0eUFuYWx5c2lzLmg+CiAjaW5jbHVk
ZSA8d3RmL1RocmVhZGluZy5oPgogCiAjaWYgVVNFKENPQ09BX0VWRU5UX0xPT1ApCkBAIC03NSw2
ICs3Niw5IEBAIHByb3RlY3RlZDoKICAgICBPU09iamVjdFB0cjxkaXNwYXRjaF9xdWV1ZV90PiBt
X2Rpc3BhdGNoUXVldWU7CiAjZWxzZQogICAgIFJ1bkxvb3AqIG1fcnVuTG9vcDsKKyNpZiBBU1NF
UlRfRU5BQkxFRAorICAgIHVpbnQzMl90IG1fdGhyZWFkSUQgeyAwIH07CisjZW5kaWYKICNlbmRp
ZgogfTsKIApAQCAtODMsOCArODcsOSBAQCBwcm90ZWN0ZWQ6CiAgKiBSdW5uYWJsZXMgZGlzcGF0
Y2hlZCB0byBhIFdvcmtRdWV1ZSBhcmUgcmVxdWlyZWQgdG8gZXhlY3V0ZSBzZXJpYWxseS4KICAq
IFRoYXQgaXMsIHR3byBkaWZmZXJlbnQgcnVubmFibGVzIGRpc3BhdGNoZWQgdG8gdGhlIFdvcmtR
dWV1ZSBzaG91bGQgbmV2ZXIgYmUgYWxsb3dlZCB0byBleGVjdXRlIHNpbXVsdGFuZW91c2x5Lgog
ICogVGhleSBtYXkgYmUgZXhlY3V0ZWQgb24gZGlmZmVyZW50IHRocmVhZHMgYnV0IGNhbiBzYWZl
bHkgYmUgdXNlZCBieSBvYmplY3RzIHRoYXQgYXJlbid0IGFscmVhZHkgdGhyZWFkc2FmZS4KKyAq
IFVzZSBgYXNzZXJ0SXNDdXJyZW50KG1fbXlRdWV1ZSk7YCBpbiBhIHJ1bm5hYmxlIHRvIGFzc2Vy
dCB0aGF0IHRoZSBydW5uYWJsZSBydW5zIGluIGEgc3BlY2lmaWMgcXVldWUuCiAgKi8KLWNsYXNz
IFdvcmtRdWV1ZSA6IHB1YmxpYyBXb3JrUXVldWVCYXNlIHsKK2NsYXNzIFdURl9DQVBBQklMSVRZ
KCJpcyBjdXJyZW50IikgV29ya1F1ZXVlIDogcHVibGljIFdvcmtRdWV1ZUJhc2UgewogcHVibGlj
OgogICAgIFdURl9FWFBPUlRfUFJJVkFURSBzdGF0aWMgV29ya1F1ZXVlJiBtYWluKCk7CiAKQEAg
LTEwNiw4ICsxMTEsMjAgQEAgcHJpdmF0ZToKICAgICBleHBsaWNpdCBXb3JrUXVldWUoUnVuTG9v
cCYpOwogI2VuZGlmCiAgICAgc3RhdGljIFJlZjxXb3JrUXVldWU+IGNvbnN0cnVjdE1haW5Xb3Jr
UXVldWUoKTsKKworI2lmIEFTU0VSVF9FTkFCTEVECisgICAgV1RGX0VYUE9SVF9QUklWQVRFIHZv
aWQgYXNzZXJ0SXNDdXJyZW50KCkgY29uc3Q7CisgICAgZnJpZW5kIHZvaWQgYXNzZXJ0SXNDdXJy
ZW50KGNvbnN0IFdvcmtRdWV1ZSYpOworI2VuZGlmCiB9OwogCitpbmxpbmUgdm9pZCBhc3NlcnRJ
c0N1cnJlbnQoY29uc3QgV29ya1F1ZXVlJiB3b3JrUXVldWUpIFdURl9BU1NFUlRTX0FDUVVJUkVE
X0NBUEFCSUxJVFkod29ya1F1ZXVlKQoreworI2lmIEFTU0VSVF9FTkFCTEVECisgICAgd29ya1F1
ZXVlLmFzc2VydElzQ3VycmVudCgpOworI2VuZGlmCit9CisKIC8qKgogICogQSBDb25jdXJyZW50
V29ya1F1ZXVlIHVubGlrZSBhIFdvcmtRdWV1ZSBkb2Vzbid0IGd1YXJhbnRlZSB0aGUgb3JkZXIg
aW4gd2hpY2ggdGhlIGRpc3BhdGNoZWQgcnVubmFibGUgd2lsbCBydW4KICAqIGFuZCBlYWNoIGNh
biBydW4gY29uY3VycmVudGx5IG9uIGRpZmZlcmVudCB0aHJlYWRzLgpAQCAtMTI3LDMgKzE0NCw0
IEBAIHByaXZhdGU6CiAKIHVzaW5nIFdURjo6V29ya1F1ZXVlOwogdXNpbmcgV1RGOjpDb25jdXJy
ZW50V29ya1F1ZXVlOwordXNpbmcgV1RGOjphc3NlcnRJc0N1cnJlbnQ7CmRpZmYgLS1naXQgYS9T
b3VyY2UvV1RGL3d0Zi9jb2NvYS9Xb3JrUXVldWVDb2NvYS5jcHAgYi9Tb3VyY2UvV1RGL3d0Zi9j
b2NvYS9Xb3JrUXVldWVDb2NvYS5jcHAKaW5kZXggZjlmNDdmMTFjNzg0NWQyNzVlMTFjZjcyMGQw
YTg1NjI1OWNiMjIxYy4uOTg0MDRhZDdhOTQ2NmM5ZGM3MmI3NjNhYmRhZTYwMGIwMWY5OWZlNSAx
MDA2NDQKLS0tIGEvU291cmNlL1dURi93dGYvY29jb2EvV29ya1F1ZXVlQ29jb2EuY3BwCisrKyBi
L1NvdXJjZS9XVEYvd3RmL2NvY29hL1dvcmtRdWV1ZUNvY29hLmNwcApAQCAtMjQsNiArMjQsNyBA
QAogICovCiAKICNpbmNsdWRlICJjb25maWcuaCIKKyNpbmNsdWRlIDx3dGYvVGhyZWFkaW5nLmg+
CiAjaW5jbHVkZSA8d3RmL1dvcmtRdWV1ZS5oPgogCiAjaW5jbHVkZSA8d3RmL0Jsb2NrUHRyLmg+
CkBAIC04Niw2ICs4NywxMSBAQCB2b2lkIFdvcmtRdWV1ZUJhc2U6OnBsYXRmb3JtSW5pdGlhbGl6
ZShjb25zdCBjaGFyKiBuYW1lLCBUeXBlIHR5cGUsIFFPUyBxb3MpCiAgICAgYXR0ciA9IGRpc3Bh
dGNoX3F1ZXVlX2F0dHJfbWFrZV93aXRoX3Fvc19jbGFzcyhhdHRyLCBUaHJlYWQ6OmRpc3BhdGNo
UU9TQ2xhc3MocW9zKSwgMCk7CiAgICAgbV9kaXNwYXRjaFF1ZXVlID0gYWRvcHRPU09iamVjdChk
aXNwYXRjaF9xdWV1ZV9jcmVhdGUobmFtZSwgYXR0cikpOwogICAgIGRpc3BhdGNoX3NldF9jb250
ZXh0KG1fZGlzcGF0Y2hRdWV1ZS5nZXQoKSwgdGhpcyk7CisgICAgLy8gV2UgdXNlICZUaHJlYWQ6
OnNfdWlkIGZvciB0aGUga2V5LCBzaW5jZSBpdCdzIGNvbnZlbmllbnQuIERpc3BhdGNoIGRvZXMg
bm90IGRlcmVmZXJlbmNlIGl0LgorICAgIC8vIFdlIHVzZSBUaHJlYWQ6OnNfdWlkIHRvIGdlbmVy
YXRlIHRoZSBpZCBzbyB0aGF0IFdvcmtRdWV1ZXMgYW5kIFRocmVhZHMgc2hhcmUgdGhlIGlkIG5h
bWVzcGFjZS4KKyAgICAvLyBUaGlzIG1ha2VzIGl0IHBvc3NpYmxlIHRvIGFzc2VydCB0aGF0IGNv
ZGUgcnVucyBpbiB0aGUgZXhwZWN0ZWQgc2VxdWVuY2UsIHJlZ2FyZGxlc3Mgb2YgaWYgaXQgaXMK
KyAgICAvLyBpbiBhIHRocmVhZCBvciBhIHdvcmsgcXVldWUuCisgICAgZGlzcGF0Y2hfcXVldWVf
c2V0X3NwZWNpZmljKG1fZGlzcGF0Y2hRdWV1ZS5nZXQoKSwgJlRocmVhZDo6c191aWQsIHJlaW50
ZXJwcmV0X2Nhc3Q8dm9pZCo+KCsrVGhyZWFkOjpzX3VpZCksIG51bGxwdHIpOwogfQogCiB2b2lk
IFdvcmtRdWV1ZUJhc2U6OnBsYXRmb3JtSW52YWxpZGF0ZSgpCkBAIC0xMDIsNiArMTA4LDIxIEBA
IFJlZjxXb3JrUXVldWU+IFdvcmtRdWV1ZTo6Y29uc3RydWN0TWFpbldvcmtRdWV1ZSgpCiAgICAg
cmV0dXJuIGFkb3B0UmVmKCpuZXcgV29ya1F1ZXVlKGRpc3BhdGNoX2dldF9tYWluX3F1ZXVlKCkp
KTsKIH0KIAorI2lmIEFTU0VSVF9FTkFCTEVECit2b2lkIFdvcmtRdWV1ZTo6YXNzZXJ0SXNDdXJy
ZW50KCkgY29uc3QKK3sKKyAgICBkaXNwYXRjaF9hc3NlcnRfcXVldWUobV9kaXNwYXRjaFF1ZXVl
LmdldCgpKTsKK30KKyNlbmRpZgorCit1aW50MzJfdCBjdXJyZW50U2VxdWVuY2VJRCgpCit7Cisg
ICAgdWludDMyX3QgdWlkID0gc3RhdGljX2Nhc3Q8dWludDMyX3Q+KHJlaW50ZXJwcmV0X2Nhc3Q8
dWludHB0cl90PihkaXNwYXRjaF9nZXRfc3BlY2lmaWMoJlRocmVhZDo6c191aWQpKSk7CisgICAg
aWYgKCF1aWQpCisgICAgICAgIHVpZCA9IFRocmVhZDo6Y3VycmVudCgpLnVpZCgpOworICAgIHJl
dHVybiB1aWQ7Cit9CisKIHZvaWQgQ29uY3VycmVudFdvcmtRdWV1ZTo6YXBwbHkoc2l6ZV90IGl0
ZXJhdGlvbnMsIFdURjo6RnVuY3Rpb248dm9pZChzaXplX3QgaW5kZXgpPiYmIGZ1bmN0aW9uKQog
ewogICAgIGRpc3BhdGNoX2FwcGx5KGl0ZXJhdGlvbnMsIGRpc3BhdGNoX2dldF9nbG9iYWxfcXVl
dWUoRElTUEFUQ0hfUVVFVUVfUFJJT1JJVFlfREVGQVVMVCwgMCksIG1ha2VCbG9ja1B0cihbZnVu
Y3Rpb24gPSBXVEZNb3ZlKGZ1bmN0aW9uKV0oc2l6ZV90IGluZGV4KSB7CmRpZmYgLS1naXQgYS9T
b3VyY2UvV1RGL3d0Zi9nZW5lcmljL1dvcmtRdWV1ZUdlbmVyaWMuY3BwIGIvU291cmNlL1dURi93
dGYvZ2VuZXJpYy9Xb3JrUXVldWVHZW5lcmljLmNwcAppbmRleCBkMjU3ZDNhNzIwNGVmYjFjYjNh
NWQ4OTU0NjEwZjJiMDI3YThkZTUxLi5hNWNmMjNmMDcyNmNmZTRlNTRhYjIyMmVjNTI0YTdkNGEw
ZmI3ZTdmIDEwMDY0NAotLS0gYS9Tb3VyY2UvV1RGL3d0Zi9nZW5lcmljL1dvcmtRdWV1ZUdlbmVy
aWMuY3BwCisrKyBiL1NvdXJjZS9XVEYvd3RmL2dlbmVyaWMvV29ya1F1ZXVlR2VuZXJpYy5jcHAK
QEAgLTQzLDYgKzQzLDkgQEAgdm9pZCBXb3JrUXVldWVCYXNlOjpwbGF0Zm9ybUluaXRpYWxpemUo
Y29uc3QgY2hhciogbmFtZSwgVHlwZSwgUU9TIHFvcykKIHsKICAgICBCaW5hcnlTZW1hcGhvcmUg
c2VtYXBob3JlOwogICAgIFRocmVhZDo6Y3JlYXRlKG5hbWUsIFsmXSB7CisjaWYgQVNTRVJUX0VO
QUJMRUQKKyAgICAgICAgbV90aHJlYWRJRCA9IFRocmVhZDo6Y3VycmVudCgpLnVpZCgpOworI2Vu
ZGlmCiAgICAgICAgIG1fcnVuTG9vcCA9ICZSdW5Mb29wOjpjdXJyZW50KCk7CiAgICAgICAgIHNl
bWFwaG9yZS5zaWduYWwoKTsKICAgICAgICAgbV9ydW5Mb29wLT5ydW4oKTsKQEAgLTg1LDQgKzg4
LDE2IEBAIFJlZjxXb3JrUXVldWU+IFdvcmtRdWV1ZTo6Y29uc3RydWN0TWFpbldvcmtRdWV1ZSgp
CiAgICAgcmV0dXJuIGFkb3B0UmVmKCpuZXcgV29ya1F1ZXVlKFJ1bkxvb3A6Om1haW4oKSkpOwog
fQogCisjaWYgQVNTRVJUX0VOQUJMRUQKK3ZvaWQgV29ya1F1ZXVlOjphc3NlcnRJc0N1cnJlbnQo
KQoreworICAgIEFTU0VSVChtX3RocmVhZElEID09IFRocmVhZDo6Y3VycmVudCgpLnVpZCgpKTsK
K30KKyNlbmRpZgorCit1aW50MzJfdCBjdXJyZW50U2VxdWVuY2VJRCgpCit7CisgICAgcmV0dXJu
IFRocmVhZDo6Y3VycmVudCgpLnVpZCgpOworfQorCiB9CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2Vi
S2l0L0dQVVByb2Nlc3MvZ3JhcGhpY3MvUmVtb3RlR3JhcGhpY3NDb250ZXh0R0wuY3BwIGIvU291
cmNlL1dlYktpdC9HUFVQcm9jZXNzL2dyYXBoaWNzL1JlbW90ZUdyYXBoaWNzQ29udGV4dEdMLmNw
cAppbmRleCBkM2NjMjlmYmNkY2FiNmI0MGI1MDhlNDFmNDU2YzQ2YWVjNzQyMTI5Li41YWRhNjE2
ODUwMzE0ZWIzNjYyMjllZTBhMzA3MTE0Yjg1YTE0YTRiIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2Vi
S2l0L0dQVVByb2Nlc3MvZ3JhcGhpY3MvUmVtb3RlR3JhcGhpY3NDb250ZXh0R0wuY3BwCisrKyBi
L1NvdXJjZS9XZWJLaXQvR1BVUHJvY2Vzcy9ncmFwaGljcy9SZW1vdGVHcmFwaGljc0NvbnRleHRH
TC5jcHAKQEAgLTgxLDggKzgxLDYgQEAgUmVtb3RlR3JhcGhpY3NDb250ZXh0R0w6On5SZW1vdGVH
cmFwaGljc0NvbnRleHRHTCgpCiB7CiAgICAgQVNTRVJUKCFtX3N0cmVhbUNvbm5lY3Rpb24pOwog
ICAgIEFTU0VSVCghbV9jb250ZXh0KTsKLSAgICAvLyBNaWdodCBiZSBkZXN0cm95ZWQgb24gbWFp
biB0aHJlYWQgb3Igc3RyZWFtIHByb2Nlc3NpbmcgdGhyZWFkLgotICAgIG1fc3RyZWFtVGhyZWFk
LnJlc2V0KCk7CiB9CiAKIHZvaWQgUmVtb3RlR3JhcGhpY3NDb250ZXh0R0w6OmluaXRpYWxpemUo
R3JhcGhpY3NDb250ZXh0R0xBdHRyaWJ1dGVzJiYgYXR0cmlidXRlcykKQEAgLTEwOSw3ICsxMDcs
NyBAQCB2b2lkIFJlbW90ZUdyYXBoaWNzQ29udGV4dEdMOjpkaXNwbGF5V2FzUmVjb25maWd1cmVk
KCkKIHsKICAgICBhc3NlcnRJc01haW5SdW5Mb29wKCk7CiAgICAgcmVtb3RlR3JhcGhpY3NDb250
ZXh0R0xTdHJlYW1Xb3JrUXVldWUoKS5kaXNwYXRjaChbcHJvdGVjdGVkVGhpcyA9IFJlZiB7ICp0
aGlzIH1dKCkgewotICAgICAgICBhc3NlcnRJc0N1cnJlbnQocHJvdGVjdGVkVGhpcy0+bV9zdHJl
YW1UaHJlYWQpOworICAgICAgICBhc3NlcnRJc0N1cnJlbnQocHJvdGVjdGVkVGhpcy0+d29ya1F1
ZXVlKCkpOwogICAgICAgICBwcm90ZWN0ZWRUaGlzLT5tX2NvbnRleHQtPnVwZGF0ZUNvbnRleHRP
bkRpc3BsYXlSZWNvbmZpZ3VyYXRpb24oKTsKICAgICB9KTsKIH0KQEAgLTExNyw4ICsxMTUsNyBA
QCB2b2lkIFJlbW90ZUdyYXBoaWNzQ29udGV4dEdMOjpkaXNwbGF5V2FzUmVjb25maWd1cmVkKCkK
IAogdm9pZCBSZW1vdGVHcmFwaGljc0NvbnRleHRHTDo6d29ya1F1ZXVlSW5pdGlhbGl6ZShXZWJD
b3JlOjpHcmFwaGljc0NvbnRleHRHTEF0dHJpYnV0ZXMmJiBhdHRyaWJ1dGVzKQogewotICAgIG1f
c3RyZWFtVGhyZWFkLnJlc2V0KCk7Ci0gICAgYXNzZXJ0SXNDdXJyZW50KG1fc3RyZWFtVGhyZWFk
KTsKKyAgICBhc3NlcnRJc0N1cnJlbnQod29ya1F1ZXVlKCkpOwogICAgIHBsYXRmb3JtV29ya1F1
ZXVlSW5pdGlhbGl6ZShXVEZNb3ZlKGF0dHJpYnV0ZXMpKTsKICAgICBpZiAobV9jb250ZXh0KSB7
CiAgICAgICAgIG1fY29udGV4dC0+YWRkQ2xpZW50KCp0aGlzKTsKQEAgLTEzMSwxOSArMTI4LDE5
IEBAIHZvaWQgUmVtb3RlR3JhcGhpY3NDb250ZXh0R0w6OndvcmtRdWV1ZUluaXRpYWxpemUoV2Vi
Q29yZTo6R3JhcGhpY3NDb250ZXh0R0xBdHRyCiAKIHZvaWQgUmVtb3RlR3JhcGhpY3NDb250ZXh0
R0w6OndvcmtRdWV1ZVVuaW5pdGlhbGl6ZSgpCiB7Ci0gICAgYXNzZXJ0SXNDdXJyZW50KG1fc3Ry
ZWFtVGhyZWFkKTsKKyAgICBhc3NlcnRJc0N1cnJlbnQod29ya1F1ZXVlKCkpOwogICAgIG1fY29u
dGV4dCA9IG51bGxwdHI7CiAgICAgbV9zdHJlYW1Db25uZWN0aW9uID0gbnVsbHB0cjsKIH0KIAog
dm9pZCBSZW1vdGVHcmFwaGljc0NvbnRleHRHTDo6ZGlkQ29tcG9zaXRlKCkKIHsKLSAgICBhc3Nl
cnRJc0N1cnJlbnQobV9zdHJlYW1UaHJlYWQpOworICAgIGFzc2VydElzQ3VycmVudCh3b3JrUXVl
dWUoKSk7CiB9CiAKIHZvaWQgUmVtb3RlR3JhcGhpY3NDb250ZXh0R0w6OmZvcmNlQ29udGV4dExv
c3QoKQogewotICAgIGFzc2VydElzQ3VycmVudChtX3N0cmVhbVRocmVhZCk7CisgICAgYXNzZXJ0
SXNDdXJyZW50KHdvcmtRdWV1ZSgpKTsKICAgICBzZW5kKE1lc3NhZ2VzOjpSZW1vdGVHcmFwaGlj
c0NvbnRleHRHTFByb3h5OjpXYXNMb3N0KCkpOwogfQogCkBAIC0xNTQsMTMgKzE1MSwxMyBAQCB2
b2lkIFJlbW90ZUdyYXBoaWNzQ29udGV4dEdMOjpyZWN5Y2xlQ29udGV4dCgpCiAKIHZvaWQgUmVt
b3RlR3JhcGhpY3NDb250ZXh0R0w6OmRpc3BhdGNoQ29udGV4dENoYW5nZWROb3RpZmljYXRpb24o
KQogewotICAgIGFzc2VydElzQ3VycmVudChtX3N0cmVhbVRocmVhZCk7CisgICAgYXNzZXJ0SXND
dXJyZW50KHdvcmtRdWV1ZSgpKTsKICAgICBzZW5kKE1lc3NhZ2VzOjpSZW1vdGVHcmFwaGljc0Nv
bnRleHRHTFByb3h5OjpXYXNDaGFuZ2VkKCkpOwogfQogCiB2b2lkIFJlbW90ZUdyYXBoaWNzQ29u
dGV4dEdMOjpyZXNoYXBlKGludDMyX3Qgd2lkdGgsIGludDMyX3QgaGVpZ2h0KQogewotICAgIGFz
c2VydElzQ3VycmVudChtX3N0cmVhbVRocmVhZCk7CisgICAgYXNzZXJ0SXNDdXJyZW50KHdvcmtR
dWV1ZSgpKTsKICAgICBpZiAod2lkdGggJiYgaGVpZ2h0KQogICAgICAgICBtX2NvbnRleHQtPnJl
c2hhcGUod2lkdGgsIGhlaWdodCk7CiAgICAgZWxzZQpAQCAtMTcwLDcgKzE2Nyw3IEBAIHZvaWQg
UmVtb3RlR3JhcGhpY3NDb250ZXh0R0w6OnJlc2hhcGUoaW50MzJfdCB3aWR0aCwgaW50MzJfdCBo
ZWlnaHQpCiAjaWYgIVBMQVRGT1JNKENPQ09BKSAmJiAhUExBVEZPUk0oV0lOKQogdm9pZCBSZW1v
dGVHcmFwaGljc0NvbnRleHRHTDo6cHJlcGFyZUZvckRpc3BsYXkoQ29tcGxldGlvbkhhbmRsZXI8
dm9pZCgpPiYmIGNvbXBsZXRpb25IYW5kbGVyKQogewotICAgIGFzc2VydElzQ3VycmVudChtX3N0
cmVhbVRocmVhZCk7CisgICAgYXNzZXJ0SXNDdXJyZW50KHdvcmtRdWV1ZSgpKTsKICAgICBub3RJ
bXBsZW1lbnRlZCgpOwogICAgIGNvbXBsZXRpb25IYW5kbGVyKCk7CiB9CkBAIC0xNzgsMjUgKzE3
NSwyNSBAQCB2b2lkIFJlbW90ZUdyYXBoaWNzQ29udGV4dEdMOjpwcmVwYXJlRm9yRGlzcGxheShD
b21wbGV0aW9uSGFuZGxlcjx2b2lkKCk+JiYgY29tcAogCiB2b2lkIFJlbW90ZUdyYXBoaWNzQ29u
dGV4dEdMOjpzeW50aGVzaXplR0xFcnJvcih1aW50MzJfdCBlcnJvcikKIHsKLSAgICBhc3NlcnRJ
c0N1cnJlbnQobV9zdHJlYW1UaHJlYWQpOworICAgIGFzc2VydElzQ3VycmVudCh3b3JrUXVldWUo
KSk7CiAgICAgbV9jb250ZXh0LT5zeW50aGVzaXplR0xFcnJvcihzdGF0aWNfY2FzdDxHQ0dMZW51
bT4oZXJyb3IpKTsKIH0KIAogdm9pZCBSZW1vdGVHcmFwaGljc0NvbnRleHRHTDo6Z2V0RXJyb3Io
Q29tcGxldGlvbkhhbmRsZXI8dm9pZCh1aW50MzJfdCk+JiYgY29tcGxldGlvbkhhbmRsZXIpCiB7
Ci0gICAgYXNzZXJ0SXNDdXJyZW50KG1fc3RyZWFtVGhyZWFkKTsKKyAgICBhc3NlcnRJc0N1cnJl
bnQod29ya1F1ZXVlKCkpOwogICAgIGNvbXBsZXRpb25IYW5kbGVyKHN0YXRpY19jYXN0PHVpbnQz
Ml90PihtX2NvbnRleHQtPmdldEVycm9yKCkpKTsKIH0KIAogdm9pZCBSZW1vdGVHcmFwaGljc0Nv
bnRleHRHTDo6ZW5zdXJlRXh0ZW5zaW9uRW5hYmxlZChTdHJpbmcmJiBleHRlbnNpb24pCiB7Ci0g
ICAgYXNzZXJ0SXNDdXJyZW50KG1fc3RyZWFtVGhyZWFkKTsKKyAgICBhc3NlcnRJc0N1cnJlbnQo
d29ya1F1ZXVlKCkpOwogICAgIG1fY29udGV4dC0+ZW5zdXJlRXh0ZW5zaW9uRW5hYmxlZChleHRl
bnNpb24pOwogfQogCiB2b2lkIFJlbW90ZUdyYXBoaWNzQ29udGV4dEdMOjptYXJrQ29udGV4dENo
YW5nZWQoKQogewotICAgIGFzc2VydElzQ3VycmVudChtX3N0cmVhbVRocmVhZCk7CisgICAgYXNz
ZXJ0SXNDdXJyZW50KHdvcmtRdWV1ZSgpKTsKICAgICBtX2NvbnRleHQtPm1hcmtDb250ZXh0Q2hh
bmdlZCgpOwogfQogCkBAIC0yMDksNyArMjA2LDcgQEAgdm9pZCBSZW1vdGVHcmFwaGljc0NvbnRl
eHRHTDo6cGFpbnRSZW5kZXJpbmdSZXN1bHRzVG9DYW52YXMoV2ViQ29yZTo6UmVuZGVyaW5nUmUK
IAogdm9pZCBSZW1vdGVHcmFwaGljc0NvbnRleHRHTDo6cGFpbnRSZW5kZXJpbmdSZXN1bHRzVG9D
YW52YXNXaXRoUXVhbGlmaWVkSWRlbnRpZmllcihRdWFsaWZpZWRSZW5kZXJpbmdSZXNvdXJjZUlk
ZW50aWZpZXIgaW1hZ2VCdWZmZXIsIENvbXBsZXRpb25IYW5kbGVyPHZvaWQoKT4mJiBjb21wbGV0
aW9uSGFuZGxlcikKIHsKLSAgICBhc3NlcnRJc0N1cnJlbnQobV9zdHJlYW1UaHJlYWQpOworICAg
IGFzc2VydElzQ3VycmVudCh3b3JrUXVldWUoKSk7CiAgICAgcGFpbnRQaXhlbEJ1ZmZlclRvSW1h
Z2VCdWZmZXIobV9jb250ZXh0LT5yZWFkUmVuZGVyaW5nUmVzdWx0c0ZvclBhaW50aW5nKCksIGlt
YWdlQnVmZmVyLCBXVEZNb3ZlKGNvbXBsZXRpb25IYW5kbGVyKSk7CiB9CiAKQEAgLTIyMiwxNCAr
MjE5LDE0IEBAIHZvaWQgUmVtb3RlR3JhcGhpY3NDb250ZXh0R0w6OnBhaW50Q29tcG9zaXRlZFJl
c3VsdHNUb0NhbnZhcyhXZWJDb3JlOjpSZW5kZXJpbmdSCiAKIHZvaWQgUmVtb3RlR3JhcGhpY3ND
b250ZXh0R0w6OnBhaW50Q29tcG9zaXRlZFJlc3VsdHNUb0NhbnZhc1dpdGhRdWFsaWZpZWRJZGVu
dGlmaWVyKFF1YWxpZmllZFJlbmRlcmluZ1Jlc291cmNlSWRlbnRpZmllciBpbWFnZUJ1ZmZlciwg
Q29tcGxldGlvbkhhbmRsZXI8dm9pZCgpPiYmIGNvbXBsZXRpb25IYW5kbGVyKQogewotICAgIGFz
c2VydElzQ3VycmVudChtX3N0cmVhbVRocmVhZCk7CisgICAgYXNzZXJ0SXNDdXJyZW50KHdvcmtR
dWV1ZSgpKTsKICAgICBwYWludFBpeGVsQnVmZmVyVG9JbWFnZUJ1ZmZlcihtX2NvbnRleHQtPnJl
YWRDb21wb3NpdGVkUmVzdWx0c0ZvclBhaW50aW5nKCksIGltYWdlQnVmZmVyLCBXVEZNb3ZlKGNv
bXBsZXRpb25IYW5kbGVyKSk7CiB9CiAKICNpZiBFTkFCTEUoTUVESUFfU1RSRUFNKQogdm9pZCBS
ZW1vdGVHcmFwaGljc0NvbnRleHRHTDo6cGFpbnRDb21wb3NpdGVkUmVzdWx0c1RvTWVkaWFTYW1w
bGUoQ29tcGxldGlvbkhhbmRsZXI8dm9pZChzdGQ6Om9wdGlvbmFsPFdlYktpdDo6UmVtb3RlVmlk
ZW9GcmFtZVByb3h5OjpQcm9wZXJ0aWVzPiYmKT4mJiBjb21wbGV0aW9uSGFuZGxlcikKIHsKLSAg
ICBhc3NlcnRJc0N1cnJlbnQobV9zdHJlYW1UaHJlYWQpOworICAgIGFzc2VydElzQ3VycmVudCh3
b3JrUXVldWUoKSk7CiAgICAgc3RkOjpvcHRpb25hbDxXZWJLaXQ6OlJlbW90ZVZpZGVvRnJhbWVQ
cm94eTo6UHJvcGVydGllcz4gcmVzdWx0OwogICAgIGlmIChhdXRvIHZpZGVvRnJhbWUgPSBtX2Nv
bnRleHQtPnBhaW50Q29tcG9zaXRlZFJlc3VsdHNUb01lZGlhU2FtcGxlKCkpIHsKICAgICAgICAg
YXV0byB3cml0ZSA9IFJlbW90ZVZpZGVvRnJhbWVXcml0ZVJlZmVyZW5jZTo6Z2VuZXJhdGVGb3JB
ZGQoKTsKQEAgLTI0Myw3ICsyNDAsNyBAQCB2b2lkIFJlbW90ZUdyYXBoaWNzQ29udGV4dEdMOjpw
YWludENvbXBvc2l0ZWRSZXN1bHRzVG9NZWRpYVNhbXBsZShDb21wbGV0aW9uSGFuZAogCiB2b2lk
IFJlbW90ZUdyYXBoaWNzQ29udGV4dEdMOjpwYWludFBpeGVsQnVmZmVyVG9JbWFnZUJ1ZmZlcihz
dGQ6Om9wdGlvbmFsPFdlYkNvcmU6OlBpeGVsQnVmZmVyPiYmIHBpeGVsQnVmZmVyLCBRdWFsaWZp
ZWRSZW5kZXJpbmdSZXNvdXJjZUlkZW50aWZpZXIgdGFyZ2V0LCBDb21wbGV0aW9uSGFuZGxlcjx2
b2lkKCk+JiYgY29tcGxldGlvbkhhbmRsZXIpCiB7Ci0gICAgYXNzZXJ0SXNDdXJyZW50KG1fc3Ry
ZWFtVGhyZWFkKTsKKyAgICBhc3NlcnRJc0N1cnJlbnQod29ya1F1ZXVlKCkpOwogICAgIC8vIEZJ
WE1FOiBXZSBkbyBub3QgaGF2ZSBmdW5jdGlvbmluZyByZWFkL3dyaXRlIGZlbmNlcyBpbiBSZW1v
dGVSZW5kZXJpbmdCYWNrZW5kLiBUaHVzIHRoaXMgaXMgc3luY2hyb25vdXMsCiAgICAgLy8gYXMg
YXJlIHRoZSBtZXNzYWdlcyB0aGF0IGNhbGwgdGhlc2UuCiAgICAgTG9jayBsb2NrOwpAQCAtMjg3
LDcgKzI4NCw3IEBAIHZvaWQgUmVtb3RlR3JhcGhpY3NDb250ZXh0R0w6OmNvcHlUZXh0dXJlRnJv
bVZpZGVvRnJhbWUoV2ViS2l0OjpSZW1vdGVWaWRlb0ZyYW1lCiAKIHZvaWQgUmVtb3RlR3JhcGhp
Y3NDb250ZXh0R0w6OnNpbXVsYXRlRXZlbnRGb3JUZXN0aW5nKFdlYkNvcmU6OkdyYXBoaWNzQ29u
dGV4dEdMOjpTaW11bGF0ZWRFdmVudEZvclRlc3RpbmcgZXZlbnQpCiB7Ci0gICAgYXNzZXJ0SXND
dXJyZW50KG1fc3RyZWFtVGhyZWFkKTsKKyAgICBhc3NlcnRJc0N1cnJlbnQod29ya1F1ZXVlKCkp
OwogICAgIC8vIEZJWE1FOiBvbmx5IHJ1biB0aGlzIGluIHRlc3RpbmcgbW9kZS4gaHR0cHM6Ly9i
dWdzLndlYmtpdC5vcmcvc2hvd19idWcuY2dpP2lkPTIyMjU0NAogICAgIGlmIChldmVudCA9PSBX
ZWJDb3JlOjpHcmFwaGljc0NvbnRleHRHTDo6U2ltdWxhdGVkRXZlbnRGb3JUZXN0aW5nOjpUaW1l
b3V0KSB7CiAgICAgICAgIC8vIFNpbXVsYXRlIHRoZSB0aW1lb3V0IGJ5IGp1c3QgZGlzY2FyZGlu
ZyB0aGUgY29udGV4dC4gVGhlIHN1YnNlcXVlbnQgbWVzc2FnZXMgYWN0IGxpa2UKZGlmZiAtLWdp
dCBhL1NvdXJjZS9XZWJLaXQvR1BVUHJvY2Vzcy9ncmFwaGljcy9SZW1vdGVHcmFwaGljc0NvbnRl
eHRHTC5oIGIvU291cmNlL1dlYktpdC9HUFVQcm9jZXNzL2dyYXBoaWNzL1JlbW90ZUdyYXBoaWNz
Q29udGV4dEdMLmgKaW5kZXggYTUwNTIyNWNjNTg5ZmQ5YTA2YTU2YzNkOWExZjFmNjQwZDkwNjMw
YS4uYTkxNGUzZGNmMDZiOThhNzY2ZGMzNGMyNDRjNWJjMjdmNTBhOTliZiAxMDA2NDQKLS0tIGEv
U291cmNlL1dlYktpdC9HUFVQcm9jZXNzL2dyYXBoaWNzL1JlbW90ZUdyYXBoaWNzQ29udGV4dEdM
LmgKKysrIGIvU291cmNlL1dlYktpdC9HUFVQcm9jZXNzL2dyYXBoaWNzL1JlbW90ZUdyYXBoaWNz
Q29udGV4dEdMLmgKQEAgLTY5LDYgKzY5LDkgQEAgbmFtZXNwYWNlIFdlYktpdCB7CiBjbGFzcyBS
ZW1vdGVWaWRlb0ZyYW1lT2JqZWN0SGVhcDsKICNlbmRpZgogCitJUEM6OlN0cmVhbUNvbm5lY3Rp
b25Xb3JrUXVldWUmIHJlbW90ZUdyYXBoaWNzQ29udGV4dEdMU3RyZWFtV29ya1F1ZXVlKCk7CisK
KwogLy8gR1BVIHByb2Nlc3Mgc2lkZSBpbXBsZW1lbnRhdGlvbiBvZiB0aGF0IHJlY2VpdmVzIG1l
c3NhZ2VzIGFib3V0IEdyYXBoaWNzQ29udGV4dEdMIGNhbGxzCiAvLyBhbmQgaXNzdWVzIHJlYWwg
R3JhcGhpY3NDb250ZXh0R0wgY2FsbHMgYmFzZWQgb24gdGhlIHJlY2VpdmVkIG1lc3NhZ2VzLgog
Ly8gVGhlIGltcGxlbWVudGF0aW9uIGlzIGxhcmdlbHkgZ2VuZXJhdGVkIGJ5IHJ1bm5pbmcgVG9v
bHMvU2NyaXB0cy9nZW5lcmF0ZS1ncHVwLXdlYmdsLgpAQCAtODcsNiArOTAsNyBAQCBwdWJsaWM6
CiBwcm90ZWN0ZWQ6CiAgICAgUmVtb3RlR3JhcGhpY3NDb250ZXh0R0woR1BVQ29ubmVjdGlvblRv
V2ViUHJvY2VzcyYsIEdyYXBoaWNzQ29udGV4dEdMSWRlbnRpZmllciwgUmVtb3RlUmVuZGVyaW5n
QmFja2VuZCYsIElQQzo6U3RyZWFtQ29ubmVjdGlvbkJ1ZmZlciYmKTsKICAgICB2b2lkIGluaXRp
YWxpemUoV2ViQ29yZTo6R3JhcGhpY3NDb250ZXh0R0xBdHRyaWJ1dGVzJiYpOworICAgIElQQzo6
U3RyZWFtQ29ubmVjdGlvbldvcmtRdWV1ZSYgd29ya1F1ZXVlKCkgY29uc3QgeyByZXR1cm4gcmVt
b3RlR3JhcGhpY3NDb250ZXh0R0xTdHJlYW1Xb3JrUXVldWUoKTsgfQogCiAgICAgdm9pZCB3b3Jr
UXVldWVJbml0aWFsaXplKFdlYkNvcmU6OkdyYXBoaWNzQ29udGV4dEdMQXR0cmlidXRlcyYmKTsK
ICAgICB2aXJ0dWFsIHZvaWQgcGxhdGZvcm1Xb3JrUXVldWVJbml0aWFsaXplKFdlYkNvcmU6Okdy
YXBoaWNzQ29udGV4dEdMQXR0cmlidXRlcyYmKSB7IH07CkBAIC0xMzksMTkgKzE0MywxNiBAQCBw
cm90ZWN0ZWQ6CiAjZWxzZQogICAgIHVzaW5nIEdDR0xDb250ZXh0ID0gV2ViQ29yZTo6R3JhcGhp
Y3NDb250ZXh0R0xUZXh0dXJlTWFwcGVyOwogI2VuZGlmCi0gICAgCi0gICAgUmVmUHRyPEdDR0xD
b250ZXh0PiBtX2NvbnRleHQgV1RGX0dVQVJERURfQllfQ0FQQUJJTElUWShtX3N0cmVhbVRocmVh
ZCk7CisgICAgUmVmUHRyPEdDR0xDb250ZXh0PiBtX2NvbnRleHQgV1RGX0dVQVJERURfQllfQ0FQ
QUJJTElUWSh3b3JrUXVldWUoKSk7CiAgICAgR3JhcGhpY3NDb250ZXh0R0xJZGVudGlmaWVyIG1f
Z3JhcGhpY3NDb250ZXh0R0xJZGVudGlmaWVyOwogICAgIFJlZjxSZW1vdGVSZW5kZXJpbmdCYWNr
ZW5kPiBtX3JlbmRlcmluZ0JhY2tlbmQ7CiAjaWYgRU5BQkxFKFZJREVPKQogICAgIFJlZjxSZW1v
dGVWaWRlb0ZyYW1lT2JqZWN0SGVhcD4gbV92aWRlb0ZyYW1lT2JqZWN0SGVhcDsKICNlbmRpZgog
ICAgIFNjb3BlZFdlYkdMUmVuZGVyaW5nUmVzb3VyY2VzUmVxdWVzdCBtX3JlbmRlcmluZ1Jlc291
cmNlc1JlcXVlc3Q7Ci0gICAgTk9fVU5JUVVFX0FERFJFU1MgVGhyZWFkQXNzZXJ0aW9uIG1fc3Ry
ZWFtVGhyZWFkOwogICAgIFdlYkNvcmU6OlByb2Nlc3NJZGVudGlmaWVyIG1fd2ViUHJvY2Vzc0lk
ZW50aWZpZXI7CiB9OwogCi1JUEM6OlN0cmVhbUNvbm5lY3Rpb25Xb3JrUXVldWUmIHJlbW90ZUdy
YXBoaWNzQ29udGV4dEdMU3RyZWFtV29ya1F1ZXVlKCk7CiAKIH0gLy8gbmFtZXNwYWNlIFdlYktp
dAogCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViS2l0L0dQVVByb2Nlc3MvZ3JhcGhpY3MvUmVtb3Rl
R3JhcGhpY3NDb250ZXh0R0wubWVzc2FnZXMuaW4gYi9Tb3VyY2UvV2ViS2l0L0dQVVByb2Nlc3Mv
Z3JhcGhpY3MvUmVtb3RlR3JhcGhpY3NDb250ZXh0R0wubWVzc2FnZXMuaW4KaW5kZXggZDI3NjU4
NWEyMmNkYmQzN2U1OTBkZjZkODMwMjNiN2EzNGQwYzQ3ZS4uNDRiOGQ2ZTc5ZTRlMTg1YjAzZDQ3
MmFhMTRkNjU3NWUyYjZhYzFkZiAxMDA2NDQKLS0tIGEvU291cmNlL1dlYktpdC9HUFVQcm9jZXNz
L2dyYXBoaWNzL1JlbW90ZUdyYXBoaWNzQ29udGV4dEdMLm1lc3NhZ2VzLmluCisrKyBiL1NvdXJj
ZS9XZWJLaXQvR1BVUHJvY2Vzcy9ncmFwaGljcy9SZW1vdGVHcmFwaGljc0NvbnRleHRHTC5tZXNz
YWdlcy5pbgpAQCAtNDEsOSArNDEsNyBAQCBtZXNzYWdlcyAtPiBSZW1vdGVHcmFwaGljc0NvbnRl
eHRHTCBOb3RSZWZDb3VudGVkIFN0cmVhbSB7CiAgICAgdm9pZCBHZXRFcnJvcigpIC0+ICh1aW50
MzJfdCByZXR1cm5WYWx1ZSkgU3luY2hyb25vdXMKICAgICB2b2lkIFBhaW50UmVuZGVyaW5nUmVz
dWx0c1RvQ2FudmFzKFdlYkNvcmU6OlJlbmRlcmluZ1Jlc291cmNlSWRlbnRpZmllciBpbWFnZUJ1
ZmZlcikgLT4gKCkgU3luY2hyb25vdXMKICAgICB2b2lkIFBhaW50Q29tcG9zaXRlZFJlc3VsdHNU
b0NhbnZhcyhXZWJDb3JlOjpSZW5kZXJpbmdSZXNvdXJjZUlkZW50aWZpZXIgaW1hZ2VCdWZmZXIp
IC0+ICgpIFN5bmNocm9ub3VzCi0jaWYgRU5BQkxFKFZJREVPKQotICAgIHZvaWQgQ29weVRleHR1
cmVGcm9tVmlkZW9GcmFtZShXZWJLaXQ6OlJlbW90ZVZpZGVvRnJhbWVSZWFkUmVmZXJlbmNlIHZp
ZGVvRnJhbWUsIHVpbnQzMl90IHRleHR1cmUsIHVpbnQzMl90IHRhcmdldCwgaW50MzJfdCBsZXZl
bCwgdWludDMyX3QgaW50ZXJuYWxGb3JtYXQsIHVpbnQzMl90IGZvcm1hdCwgdWludDMyX3QgdHlw
ZSwgYm9vbCBwcmVtdWx0aXBseUFscGhhLCBib29sIGZsaXBZKSAtPiAoYm9vbCBzdWNjZXNzKSBT
eW5jaHJvbm91cwotI2VuZGlmCisgICAgdm9pZCBDb3B5VGV4dHVyZUZyb21WaWRlb0ZyYW1lKFdl
YktpdDo6UmVtb3RlVmlkZW9GcmFtZVJlYWRSZWZlcmVuY2UgcmVhZCwgdWludDMyX3QgdGV4dHVy
ZSwgdWludDMyX3QgdGFyZ2V0LCBpbnQzMl90IGxldmVsLCB1aW50MzJfdCBpbnRlcm5hbEZvcm1h
dCwgdWludDMyX3QgZm9ybWF0LCB1aW50MzJfdCB0eXBlLCBib29sIHByZW11bHRpcGx5QWxwaGEs
IGJvb2wgZmxpcFkpIC0+IChib29sIHN1Y2Nlc3MpIFN5bmNocm9ub3VzCiAjaWYgRU5BQkxFKE1F
RElBX1NUUkVBTSkKICAgICB2b2lkIFBhaW50Q29tcG9zaXRlZFJlc3VsdHNUb01lZGlhU2FtcGxl
KCkgLT4gKHN0ZDo6b3B0aW9uYWw8V2ViS2l0OjpSZW1vdGVWaWRlb0ZyYW1lUHJveHk6OlByb3Bl
cnRpZXM+IHByb3BlcnRpZXMpIFN5bmNocm9ub3VzCiAjZW5kaWYKZGlmZiAtLWdpdCBhL1NvdXJj
ZS9XZWJLaXQvR1BVUHJvY2Vzcy9ncmFwaGljcy9SZW1vdGVHcmFwaGljc0NvbnRleHRHTENvY29h
LmNwcCBiL1NvdXJjZS9XZWJLaXQvR1BVUHJvY2Vzcy9ncmFwaGljcy9SZW1vdGVHcmFwaGljc0Nv
bnRleHRHTENvY29hLmNwcAppbmRleCA3OWRmOTljZTI5YzMzYTBiNGZhNDcwMDI1NDcwNGY4ZTAz
ZTFhYzcxLi5hNDk3MGMzNzI5NTVlMDA1MGFkYmRkMDFiOWVlNmIwMTk1MjU0NzM4IDEwMDY0NAot
LS0gYS9Tb3VyY2UvV2ViS2l0L0dQVVByb2Nlc3MvZ3JhcGhpY3MvUmVtb3RlR3JhcGhpY3NDb250
ZXh0R0xDb2NvYS5jcHAKKysrIGIvU291cmNlL1dlYktpdC9HUFVQcm9jZXNzL2dyYXBoaWNzL1Jl
bW90ZUdyYXBoaWNzQ29udGV4dEdMQ29jb2EuY3BwCkBAIC00Niw3ICs0Niw3IEBAIG5hbWVzcGFj
ZSBXZWJLaXQgewogI2lmIEVOQUJMRShWSURFTykKIHZvaWQgUmVtb3RlR3JhcGhpY3NDb250ZXh0
R0w6OmNvcHlUZXh0dXJlRnJvbVZpZGVvRnJhbWUoV2ViS2l0OjpSZW1vdGVWaWRlb0ZyYW1lUmVh
ZFJlZmVyZW5jZSByZWFkLCB1aW50MzJfdCB0ZXh0dXJlLCB1aW50MzJfdCB0YXJnZXQsIGludDMy
X3QgbGV2ZWwsIHVpbnQzMl90IGludGVybmFsRm9ybWF0LCB1aW50MzJfdCBmb3JtYXQsIHVpbnQz
Ml90IHR5cGUsIGJvb2wgcHJlbXVsdGlwbHlBbHBoYSwgYm9vbCBmbGlwWSwgQ29tcGxldGlvbkhh
bmRsZXI8dm9pZChib29sKT4mJiBjb21wbGV0aW9uSGFuZGxlcikKIHsKLSAgICBhc3NlcnRJc0N1
cnJlbnQobV9zdHJlYW1UaHJlYWQpOworICAgIGFzc2VydElzQ3VycmVudCh3b3JrUXVldWUoKSk7
CiAgICAgVU5VU0VEX1ZBUklBQkxFKHByZW11bHRpcGx5QWxwaGEpOwogICAgIEFTU0VSVF9VTlVT
RUQodGFyZ2V0LCB0YXJnZXQgPT0gV2ViQ29yZTo6R3JhcGhpY3NDb250ZXh0R0w6OlRFWFRVUkVf
MkQpOwogCkBAIC0xMTAsMTMgKzExMCwxMyBAQCBSZW1vdGVHcmFwaGljc0NvbnRleHRHTENvY29h
OjpSZW1vdGVHcmFwaGljc0NvbnRleHRHTENvY29hKEdQVUNvbm5lY3Rpb25Ub1dlYlBybwogCiB2
b2lkIFJlbW90ZUdyYXBoaWNzQ29udGV4dEdMQ29jb2E6OnBsYXRmb3JtV29ya1F1ZXVlSW5pdGlh
bGl6ZShXZWJDb3JlOjpHcmFwaGljc0NvbnRleHRHTEF0dHJpYnV0ZXMmJiBhdHRyaWJ1dGVzKQog
ewotICAgIGFzc2VydElzQ3VycmVudChtX3N0cmVhbVRocmVhZCk7CisgICAgYXNzZXJ0SXNDdXJy
ZW50KHdvcmtRdWV1ZSgpKTsKICAgICBtX2NvbnRleHQgPSBXZWJDb3JlOjpHcmFwaGljc0NvbnRl
eHRHTENvY29hOjpjcmVhdGUoV1RGTW92ZShhdHRyaWJ1dGVzKSwgV2ViQ29yZTo6UHJvY2Vzc0lk
ZW50aXR5IHsgbV9yZXNvdXJjZU93bmVyIH0pOwogfQogCiB2b2lkIFJlbW90ZUdyYXBoaWNzQ29u
dGV4dEdMQ29jb2E6OnByZXBhcmVGb3JEaXNwbGF5KENvbXBsZXRpb25IYW5kbGVyPHZvaWQoV1RG
OjpNYWNoU2VuZFJpZ2h0JiYpPiYmIGNvbXBsZXRpb25IYW5kbGVyKQogewotICAgIGFzc2VydElz
Q3VycmVudChtX3N0cmVhbVRocmVhZCk7CisgICAgYXNzZXJ0SXNDdXJyZW50KHdvcmtRdWV1ZSgp
KTsKICAgICBtX2NvbnRleHQtPnByZXBhcmVGb3JEaXNwbGF5KCk7CiAgICAgTWFjaFNlbmRSaWdo
dCBzZW5kUmlnaHQ7CiAgICAgV2ViQ29yZTo6SU9TdXJmYWNlKiBkaXNwbGF5QnVmZmVyID0gbV9j
b250ZXh0LT5kaXNwbGF5QnVmZmVyKCk7CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViS2l0L0dQVVBy
b2Nlc3MvZ3JhcGhpY3MvUmVtb3RlR3JhcGhpY3NDb250ZXh0R0xGdW5jdGlvbnNHZW5lcmF0ZWQu
aCBiL1NvdXJjZS9XZWJLaXQvR1BVUHJvY2Vzcy9ncmFwaGljcy9SZW1vdGVHcmFwaGljc0NvbnRl
eHRHTEZ1bmN0aW9uc0dlbmVyYXRlZC5oCmluZGV4IDkzYmQ2NzcxNjhiYjQ0Yzk4MTM0ZGM3ODk4
YzkwM2UwZmJkMDNlNTYuLmE1OWU4Y2EwOTg5OTg5MGEyNGFjN2JkODMyYzdjYzFjZmUwZDNjZjkg
MTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJLaXQvR1BVUHJvY2Vzcy9ncmFwaGljcy9SZW1vdGVHcmFw
aGljc0NvbnRleHRHTEZ1bmN0aW9uc0dlbmVyYXRlZC5oCisrKyBiL1NvdXJjZS9XZWJLaXQvR1BV
UHJvY2Vzcy9ncmFwaGljcy9SZW1vdGVHcmFwaGljc0NvbnRleHRHTEZ1bmN0aW9uc0dlbmVyYXRl
ZC5oCkBAIC0yOCwyNzkgKzI4LDI3OSBAQAogICAgIHZvaWQgbW92ZUVycm9yc1RvU3ludGhldGlj
RXJyb3JMaXN0KENvbXBsZXRpb25IYW5kbGVyPHZvaWQoYm9vbCk+JiYgY29tcGxldGlvbkhhbmRs
ZXIpCiAgICAgewogICAgICAgICBib29sIHJldHVyblZhbHVlID0geyB9OwotICAgICAgICBhc3Nl
cnRJc0N1cnJlbnQobV9zdHJlYW1UaHJlYWQpOworICAgICAgICBhc3NlcnRJc0N1cnJlbnQod29y
a1F1ZXVlKCkpOwogICAgICAgICByZXR1cm5WYWx1ZSA9IG1fY29udGV4dC0+bW92ZUVycm9yc1Rv
U3ludGhldGljRXJyb3JMaXN0KCk7CiAgICAgICAgIGNvbXBsZXRpb25IYW5kbGVyKHJldHVyblZh
bHVlKTsKICAgICB9CiAgICAgdm9pZCBhY3RpdmVUZXh0dXJlKHVpbnQzMl90IHRleHR1cmUpCiAg
ICAgewotICAgICAgICBhc3NlcnRJc0N1cnJlbnQobV9zdHJlYW1UaHJlYWQpOworICAgICAgICBh
c3NlcnRJc0N1cnJlbnQod29ya1F1ZXVlKCkpOwogICAgICAgICBtX2NvbnRleHQtPmFjdGl2ZVRl
eHR1cmUodGV4dHVyZSk7CiAgICAgfQogICAgIHZvaWQgYXR0YWNoU2hhZGVyKHVpbnQzMl90IHBy
b2dyYW0sIHVpbnQzMl90IHNoYWRlcikKICAgICB7Ci0gICAgICAgIGFzc2VydElzQ3VycmVudCht
X3N0cmVhbVRocmVhZCk7CisgICAgICAgIGFzc2VydElzQ3VycmVudCh3b3JrUXVldWUoKSk7CiAg
ICAgICAgIG1fY29udGV4dC0+YXR0YWNoU2hhZGVyKHByb2dyYW0sIHNoYWRlcik7CiAgICAgfQog
ICAgIHZvaWQgYmluZEF0dHJpYkxvY2F0aW9uKHVpbnQzMl90IGFyZzAsIHVpbnQzMl90IGluZGV4
LCBTdHJpbmcmJiBuYW1lKQogICAgIHsKLSAgICAgICAgYXNzZXJ0SXNDdXJyZW50KG1fc3RyZWFt
VGhyZWFkKTsKKyAgICAgICAgYXNzZXJ0SXNDdXJyZW50KHdvcmtRdWV1ZSgpKTsKICAgICAgICAg
bV9jb250ZXh0LT5iaW5kQXR0cmliTG9jYXRpb24oYXJnMCwgaW5kZXgsIG5hbWUpOwogICAgIH0K
ICAgICB2b2lkIGJpbmRCdWZmZXIodWludDMyX3QgdGFyZ2V0LCB1aW50MzJfdCBhcmcxKQogICAg
IHsKLSAgICAgICAgYXNzZXJ0SXNDdXJyZW50KG1fc3RyZWFtVGhyZWFkKTsKKyAgICAgICAgYXNz
ZXJ0SXNDdXJyZW50KHdvcmtRdWV1ZSgpKTsKICAgICAgICAgbV9jb250ZXh0LT5iaW5kQnVmZmVy
KHRhcmdldCwgYXJnMSk7CiAgICAgfQogICAgIHZvaWQgYmluZEZyYW1lYnVmZmVyKHVpbnQzMl90
IHRhcmdldCwgdWludDMyX3QgYXJnMSkKICAgICB7Ci0gICAgICAgIGFzc2VydElzQ3VycmVudCht
X3N0cmVhbVRocmVhZCk7CisgICAgICAgIGFzc2VydElzQ3VycmVudCh3b3JrUXVldWUoKSk7CiAg
ICAgICAgIG1fY29udGV4dC0+YmluZEZyYW1lYnVmZmVyKHRhcmdldCwgYXJnMSk7CiAgICAgfQog
ICAgIHZvaWQgYmluZFJlbmRlcmJ1ZmZlcih1aW50MzJfdCB0YXJnZXQsIHVpbnQzMl90IGFyZzEp
CiAgICAgewotICAgICAgICBhc3NlcnRJc0N1cnJlbnQobV9zdHJlYW1UaHJlYWQpOworICAgICAg
ICBhc3NlcnRJc0N1cnJlbnQod29ya1F1ZXVlKCkpOwogICAgICAgICBtX2NvbnRleHQtPmJpbmRS
ZW5kZXJidWZmZXIodGFyZ2V0LCBhcmcxKTsKICAgICB9CiAgICAgdm9pZCBiaW5kVGV4dHVyZSh1
aW50MzJfdCB0YXJnZXQsIHVpbnQzMl90IGFyZzEpCiAgICAgewotICAgICAgICBhc3NlcnRJc0N1
cnJlbnQobV9zdHJlYW1UaHJlYWQpOworICAgICAgICBhc3NlcnRJc0N1cnJlbnQod29ya1F1ZXVl
KCkpOwogICAgICAgICBtX2NvbnRleHQtPmJpbmRUZXh0dXJlKHRhcmdldCwgYXJnMSk7CiAgICAg
fQogICAgIHZvaWQgYmxlbmRDb2xvcihmbG9hdCByZWQsIGZsb2F0IGdyZWVuLCBmbG9hdCBibHVl
LCBmbG9hdCBhbHBoYSkKICAgICB7Ci0gICAgICAgIGFzc2VydElzQ3VycmVudChtX3N0cmVhbVRo
cmVhZCk7CisgICAgICAgIGFzc2VydElzQ3VycmVudCh3b3JrUXVldWUoKSk7CiAgICAgICAgIG1f
Y29udGV4dC0+YmxlbmRDb2xvcihyZWQsIGdyZWVuLCBibHVlLCBhbHBoYSk7CiAgICAgfQogICAg
IHZvaWQgYmxlbmRFcXVhdGlvbih1aW50MzJfdCBtb2RlKQogICAgIHsKLSAgICAgICAgYXNzZXJ0
SXNDdXJyZW50KG1fc3RyZWFtVGhyZWFkKTsKKyAgICAgICAgYXNzZXJ0SXNDdXJyZW50KHdvcmtR
dWV1ZSgpKTsKICAgICAgICAgbV9jb250ZXh0LT5ibGVuZEVxdWF0aW9uKG1vZGUpOwogICAgIH0K
ICAgICB2b2lkIGJsZW5kRXF1YXRpb25TZXBhcmF0ZSh1aW50MzJfdCBtb2RlUkdCLCB1aW50MzJf
dCBtb2RlQWxwaGEpCiAgICAgewotICAgICAgICBhc3NlcnRJc0N1cnJlbnQobV9zdHJlYW1UaHJl
YWQpOworICAgICAgICBhc3NlcnRJc0N1cnJlbnQod29ya1F1ZXVlKCkpOwogICAgICAgICBtX2Nv
bnRleHQtPmJsZW5kRXF1YXRpb25TZXBhcmF0ZShtb2RlUkdCLCBtb2RlQWxwaGEpOwogICAgIH0K
ICAgICB2b2lkIGJsZW5kRnVuYyh1aW50MzJfdCBzZmFjdG9yLCB1aW50MzJfdCBkZmFjdG9yKQog
ICAgIHsKLSAgICAgICAgYXNzZXJ0SXNDdXJyZW50KG1fc3RyZWFtVGhyZWFkKTsKKyAgICAgICAg
YXNzZXJ0SXNDdXJyZW50KHdvcmtRdWV1ZSgpKTsKICAgICAgICAgbV9jb250ZXh0LT5ibGVuZEZ1
bmMoc2ZhY3RvciwgZGZhY3Rvcik7CiAgICAgfQogICAgIHZvaWQgYmxlbmRGdW5jU2VwYXJhdGUo
dWludDMyX3Qgc3JjUkdCLCB1aW50MzJfdCBkc3RSR0IsIHVpbnQzMl90IHNyY0FscGhhLCB1aW50
MzJfdCBkc3RBbHBoYSkKICAgICB7Ci0gICAgICAgIGFzc2VydElzQ3VycmVudChtX3N0cmVhbVRo
cmVhZCk7CisgICAgICAgIGFzc2VydElzQ3VycmVudCh3b3JrUXVldWUoKSk7CiAgICAgICAgIG1f
Y29udGV4dC0+YmxlbmRGdW5jU2VwYXJhdGUoc3JjUkdCLCBkc3RSR0IsIHNyY0FscGhhLCBkc3RB
bHBoYSk7CiAgICAgfQogICAgIHZvaWQgY2hlY2tGcmFtZWJ1ZmZlclN0YXR1cyh1aW50MzJfdCB0
YXJnZXQsIENvbXBsZXRpb25IYW5kbGVyPHZvaWQodWludDMyX3QpPiYmIGNvbXBsZXRpb25IYW5k
bGVyKQogICAgIHsKICAgICAgICAgR0NHTGVudW0gcmV0dXJuVmFsdWUgPSB7IH07Ci0gICAgICAg
IGFzc2VydElzQ3VycmVudChtX3N0cmVhbVRocmVhZCk7CisgICAgICAgIGFzc2VydElzQ3VycmVu
dCh3b3JrUXVldWUoKSk7CiAgICAgICAgIHJldHVyblZhbHVlID0gbV9jb250ZXh0LT5jaGVja0Zy
YW1lYnVmZmVyU3RhdHVzKHRhcmdldCk7CiAgICAgICAgIGNvbXBsZXRpb25IYW5kbGVyKHJldHVy
blZhbHVlKTsKICAgICB9CiAgICAgdm9pZCBjbGVhcih1aW50MzJfdCBtYXNrKQogICAgIHsKLSAg
ICAgICAgYXNzZXJ0SXNDdXJyZW50KG1fc3RyZWFtVGhyZWFkKTsKKyAgICAgICAgYXNzZXJ0SXND
dXJyZW50KHdvcmtRdWV1ZSgpKTsKICAgICAgICAgbV9jb250ZXh0LT5jbGVhcihtYXNrKTsKICAg
ICB9CiAgICAgdm9pZCBjbGVhckNvbG9yKGZsb2F0IHJlZCwgZmxvYXQgZ3JlZW4sIGZsb2F0IGJs
dWUsIGZsb2F0IGFscGhhKQogICAgIHsKLSAgICAgICAgYXNzZXJ0SXNDdXJyZW50KG1fc3RyZWFt
VGhyZWFkKTsKKyAgICAgICAgYXNzZXJ0SXNDdXJyZW50KHdvcmtRdWV1ZSgpKTsKICAgICAgICAg
bV9jb250ZXh0LT5jbGVhckNvbG9yKHJlZCwgZ3JlZW4sIGJsdWUsIGFscGhhKTsKICAgICB9CiAg
ICAgdm9pZCBjbGVhckRlcHRoKGZsb2F0IGRlcHRoKQogICAgIHsKLSAgICAgICAgYXNzZXJ0SXND
dXJyZW50KG1fc3RyZWFtVGhyZWFkKTsKKyAgICAgICAgYXNzZXJ0SXNDdXJyZW50KHdvcmtRdWV1
ZSgpKTsKICAgICAgICAgbV9jb250ZXh0LT5jbGVhckRlcHRoKGRlcHRoKTsKICAgICB9CiAgICAg
dm9pZCBjbGVhclN0ZW5jaWwoaW50MzJfdCBzKQogICAgIHsKLSAgICAgICAgYXNzZXJ0SXNDdXJy
ZW50KG1fc3RyZWFtVGhyZWFkKTsKKyAgICAgICAgYXNzZXJ0SXNDdXJyZW50KHdvcmtRdWV1ZSgp
KTsKICAgICAgICAgbV9jb250ZXh0LT5jbGVhclN0ZW5jaWwocyk7CiAgICAgfQogICAgIHZvaWQg
Y29sb3JNYXNrKGJvb2wgcmVkLCBib29sIGdyZWVuLCBib29sIGJsdWUsIGJvb2wgYWxwaGEpCiAg
ICAgewotICAgICAgICBhc3NlcnRJc0N1cnJlbnQobV9zdHJlYW1UaHJlYWQpOworICAgICAgICBh
c3NlcnRJc0N1cnJlbnQod29ya1F1ZXVlKCkpOwogICAgICAgICBtX2NvbnRleHQtPmNvbG9yTWFz
ayhzdGF0aWNfY2FzdDxHQ0dMYm9vbGVhbj4ocmVkKSwgc3RhdGljX2Nhc3Q8R0NHTGJvb2xlYW4+
KGdyZWVuKSwgc3RhdGljX2Nhc3Q8R0NHTGJvb2xlYW4+KGJsdWUpLCBzdGF0aWNfY2FzdDxHQ0dM
Ym9vbGVhbj4oYWxwaGEpKTsKICAgICB9CiAgICAgdm9pZCBjb21waWxlU2hhZGVyKHVpbnQzMl90
IGFyZzApCiAgICAgewotICAgICAgICBhc3NlcnRJc0N1cnJlbnQobV9zdHJlYW1UaHJlYWQpOwor
ICAgICAgICBhc3NlcnRJc0N1cnJlbnQod29ya1F1ZXVlKCkpOwogICAgICAgICBtX2NvbnRleHQt
PmNvbXBpbGVTaGFkZXIoYXJnMCk7CiAgICAgfQogICAgIHZvaWQgY29weVRleEltYWdlMkQodWlu
dDMyX3QgdGFyZ2V0LCBpbnQzMl90IGxldmVsLCB1aW50MzJfdCBpbnRlcm5hbGZvcm1hdCwgaW50
MzJfdCB4LCBpbnQzMl90IHksIGludDMyX3Qgd2lkdGgsIGludDMyX3QgaGVpZ2h0LCBpbnQzMl90
IGJvcmRlcikKICAgICB7Ci0gICAgICAgIGFzc2VydElzQ3VycmVudChtX3N0cmVhbVRocmVhZCk7
CisgICAgICAgIGFzc2VydElzQ3VycmVudCh3b3JrUXVldWUoKSk7CiAgICAgICAgIG1fY29udGV4
dC0+Y29weVRleEltYWdlMkQodGFyZ2V0LCBsZXZlbCwgaW50ZXJuYWxmb3JtYXQsIHgsIHksIHdp
ZHRoLCBoZWlnaHQsIGJvcmRlcik7CiAgICAgfQogICAgIHZvaWQgY29weVRleFN1YkltYWdlMkQo
dWludDMyX3QgdGFyZ2V0LCBpbnQzMl90IGxldmVsLCBpbnQzMl90IHhvZmZzZXQsIGludDMyX3Qg
eW9mZnNldCwgaW50MzJfdCB4LCBpbnQzMl90IHksIGludDMyX3Qgd2lkdGgsIGludDMyX3QgaGVp
Z2h0KQogICAgIHsKLSAgICAgICAgYXNzZXJ0SXNDdXJyZW50KG1fc3RyZWFtVGhyZWFkKTsKKyAg
ICAgICAgYXNzZXJ0SXNDdXJyZW50KHdvcmtRdWV1ZSgpKTsKICAgICAgICAgbV9jb250ZXh0LT5j
b3B5VGV4U3ViSW1hZ2UyRCh0YXJnZXQsIGxldmVsLCB4b2Zmc2V0LCB5b2Zmc2V0LCB4LCB5LCB3
aWR0aCwgaGVpZ2h0KTsKICAgICB9CiAgICAgdm9pZCBjcmVhdGVCdWZmZXIoQ29tcGxldGlvbkhh
bmRsZXI8dm9pZCh1aW50MzJfdCk+JiYgY29tcGxldGlvbkhhbmRsZXIpCiAgICAgewogICAgICAg
ICBQbGF0Zm9ybUdMT2JqZWN0IHJldHVyblZhbHVlID0geyB9OwotICAgICAgICBhc3NlcnRJc0N1
cnJlbnQobV9zdHJlYW1UaHJlYWQpOworICAgICAgICBhc3NlcnRJc0N1cnJlbnQod29ya1F1ZXVl
KCkpOwogICAgICAgICByZXR1cm5WYWx1ZSA9IG1fY29udGV4dC0+Y3JlYXRlQnVmZmVyKCk7CiAg
ICAgICAgIGNvbXBsZXRpb25IYW5kbGVyKHJldHVyblZhbHVlKTsKICAgICB9CiAgICAgdm9pZCBj
cmVhdGVGcmFtZWJ1ZmZlcihDb21wbGV0aW9uSGFuZGxlcjx2b2lkKHVpbnQzMl90KT4mJiBjb21w
bGV0aW9uSGFuZGxlcikKICAgICB7CiAgICAgICAgIFBsYXRmb3JtR0xPYmplY3QgcmV0dXJuVmFs
dWUgPSB7IH07Ci0gICAgICAgIGFzc2VydElzQ3VycmVudChtX3N0cmVhbVRocmVhZCk7CisgICAg
ICAgIGFzc2VydElzQ3VycmVudCh3b3JrUXVldWUoKSk7CiAgICAgICAgIHJldHVyblZhbHVlID0g
bV9jb250ZXh0LT5jcmVhdGVGcmFtZWJ1ZmZlcigpOwogICAgICAgICBjb21wbGV0aW9uSGFuZGxl
cihyZXR1cm5WYWx1ZSk7CiAgICAgfQogICAgIHZvaWQgY3JlYXRlUHJvZ3JhbShDb21wbGV0aW9u
SGFuZGxlcjx2b2lkKHVpbnQzMl90KT4mJiBjb21wbGV0aW9uSGFuZGxlcikKICAgICB7CiAgICAg
ICAgIFBsYXRmb3JtR0xPYmplY3QgcmV0dXJuVmFsdWUgPSB7IH07Ci0gICAgICAgIGFzc2VydElz
Q3VycmVudChtX3N0cmVhbVRocmVhZCk7CisgICAgICAgIGFzc2VydElzQ3VycmVudCh3b3JrUXVl
dWUoKSk7CiAgICAgICAgIHJldHVyblZhbHVlID0gbV9jb250ZXh0LT5jcmVhdGVQcm9ncmFtKCk7
CiAgICAgICAgIGNvbXBsZXRpb25IYW5kbGVyKHJldHVyblZhbHVlKTsKICAgICB9CiAgICAgdm9p
ZCBjcmVhdGVSZW5kZXJidWZmZXIoQ29tcGxldGlvbkhhbmRsZXI8dm9pZCh1aW50MzJfdCk+JiYg
Y29tcGxldGlvbkhhbmRsZXIpCiAgICAgewogICAgICAgICBQbGF0Zm9ybUdMT2JqZWN0IHJldHVy
blZhbHVlID0geyB9OwotICAgICAgICBhc3NlcnRJc0N1cnJlbnQobV9zdHJlYW1UaHJlYWQpOwor
ICAgICAgICBhc3NlcnRJc0N1cnJlbnQod29ya1F1ZXVlKCkpOwogICAgICAgICByZXR1cm5WYWx1
ZSA9IG1fY29udGV4dC0+Y3JlYXRlUmVuZGVyYnVmZmVyKCk7CiAgICAgICAgIGNvbXBsZXRpb25I
YW5kbGVyKHJldHVyblZhbHVlKTsKICAgICB9CiAgICAgdm9pZCBjcmVhdGVTaGFkZXIodWludDMy
X3QgYXJnMCwgQ29tcGxldGlvbkhhbmRsZXI8dm9pZCh1aW50MzJfdCk+JiYgY29tcGxldGlvbkhh
bmRsZXIpCiAgICAgewogICAgICAgICBQbGF0Zm9ybUdMT2JqZWN0IHJldHVyblZhbHVlID0geyB9
OwotICAgICAgICBhc3NlcnRJc0N1cnJlbnQobV9zdHJlYW1UaHJlYWQpOworICAgICAgICBhc3Nl
cnRJc0N1cnJlbnQod29ya1F1ZXVlKCkpOwogICAgICAgICByZXR1cm5WYWx1ZSA9IG1fY29udGV4
dC0+Y3JlYXRlU2hhZGVyKGFyZzApOwogICAgICAgICBjb21wbGV0aW9uSGFuZGxlcihyZXR1cm5W
YWx1ZSk7CiAgICAgfQogICAgIHZvaWQgY3JlYXRlVGV4dHVyZShDb21wbGV0aW9uSGFuZGxlcjx2
b2lkKHVpbnQzMl90KT4mJiBjb21wbGV0aW9uSGFuZGxlcikKICAgICB7CiAgICAgICAgIFBsYXRm
b3JtR0xPYmplY3QgcmV0dXJuVmFsdWUgPSB7IH07Ci0gICAgICAgIGFzc2VydElzQ3VycmVudCht
X3N0cmVhbVRocmVhZCk7CisgICAgICAgIGFzc2VydElzQ3VycmVudCh3b3JrUXVldWUoKSk7CiAg
ICAgICAgIHJldHVyblZhbHVlID0gbV9jb250ZXh0LT5jcmVhdGVUZXh0dXJlKCk7CiAgICAgICAg
IGNvbXBsZXRpb25IYW5kbGVyKHJldHVyblZhbHVlKTsKICAgICB9CiAgICAgdm9pZCBjdWxsRmFj
ZSh1aW50MzJfdCBtb2RlKQogICAgIHsKLSAgICAgICAgYXNzZXJ0SXNDdXJyZW50KG1fc3RyZWFt
VGhyZWFkKTsKKyAgICAgICAgYXNzZXJ0SXNDdXJyZW50KHdvcmtRdWV1ZSgpKTsKICAgICAgICAg
bV9jb250ZXh0LT5jdWxsRmFjZShtb2RlKTsKICAgICB9CiAgICAgdm9pZCBkZWxldGVCdWZmZXIo
dWludDMyX3QgYXJnMCkKICAgICB7Ci0gICAgICAgIGFzc2VydElzQ3VycmVudChtX3N0cmVhbVRo
cmVhZCk7CisgICAgICAgIGFzc2VydElzQ3VycmVudCh3b3JrUXVldWUoKSk7CiAgICAgICAgIG1f
Y29udGV4dC0+ZGVsZXRlQnVmZmVyKGFyZzApOwogICAgIH0KICAgICB2b2lkIGRlbGV0ZUZyYW1l
YnVmZmVyKHVpbnQzMl90IGFyZzApCiAgICAgewotICAgICAgICBhc3NlcnRJc0N1cnJlbnQobV9z
dHJlYW1UaHJlYWQpOworICAgICAgICBhc3NlcnRJc0N1cnJlbnQod29ya1F1ZXVlKCkpOwogICAg
ICAgICBtX2NvbnRleHQtPmRlbGV0ZUZyYW1lYnVmZmVyKGFyZzApOwogICAgIH0KICAgICB2b2lk
IGRlbGV0ZVByb2dyYW0odWludDMyX3QgYXJnMCkKICAgICB7Ci0gICAgICAgIGFzc2VydElzQ3Vy
cmVudChtX3N0cmVhbVRocmVhZCk7CisgICAgICAgIGFzc2VydElzQ3VycmVudCh3b3JrUXVldWUo
KSk7CiAgICAgICAgIG1fY29udGV4dC0+ZGVsZXRlUHJvZ3JhbShhcmcwKTsKICAgICB9CiAgICAg
dm9pZCBkZWxldGVSZW5kZXJidWZmZXIodWludDMyX3QgYXJnMCkKICAgICB7Ci0gICAgICAgIGFz
c2VydElzQ3VycmVudChtX3N0cmVhbVRocmVhZCk7CisgICAgICAgIGFzc2VydElzQ3VycmVudCh3
b3JrUXVldWUoKSk7CiAgICAgICAgIG1fY29udGV4dC0+ZGVsZXRlUmVuZGVyYnVmZmVyKGFyZzAp
OwogICAgIH0KICAgICB2b2lkIGRlbGV0ZVNoYWRlcih1aW50MzJfdCBhcmcwKQogICAgIHsKLSAg
ICAgICAgYXNzZXJ0SXNDdXJyZW50KG1fc3RyZWFtVGhyZWFkKTsKKyAgICAgICAgYXNzZXJ0SXND
dXJyZW50KHdvcmtRdWV1ZSgpKTsKICAgICAgICAgbV9jb250ZXh0LT5kZWxldGVTaGFkZXIoYXJn
MCk7CiAgICAgfQogICAgIHZvaWQgZGVsZXRlVGV4dHVyZSh1aW50MzJfdCBhcmcwKQogICAgIHsK
LSAgICAgICAgYXNzZXJ0SXNDdXJyZW50KG1fc3RyZWFtVGhyZWFkKTsKKyAgICAgICAgYXNzZXJ0
SXNDdXJyZW50KHdvcmtRdWV1ZSgpKTsKICAgICAgICAgbV9jb250ZXh0LT5kZWxldGVUZXh0dXJl
KGFyZzApOwogICAgIH0KICAgICB2b2lkIGRlcHRoRnVuYyh1aW50MzJfdCBmdW5jKQogICAgIHsK
LSAgICAgICAgYXNzZXJ0SXNDdXJyZW50KG1fc3RyZWFtVGhyZWFkKTsKKyAgICAgICAgYXNzZXJ0
SXNDdXJyZW50KHdvcmtRdWV1ZSgpKTsKICAgICAgICAgbV9jb250ZXh0LT5kZXB0aEZ1bmMoZnVu
Yyk7CiAgICAgfQogICAgIHZvaWQgZGVwdGhNYXNrKGJvb2wgZmxhZykKICAgICB7Ci0gICAgICAg
IGFzc2VydElzQ3VycmVudChtX3N0cmVhbVRocmVhZCk7CisgICAgICAgIGFzc2VydElzQ3VycmVu
dCh3b3JrUXVldWUoKSk7CiAgICAgICAgIG1fY29udGV4dC0+ZGVwdGhNYXNrKHN0YXRpY19jYXN0
PEdDR0xib29sZWFuPihmbGFnKSk7CiAgICAgfQogICAgIHZvaWQgZGVwdGhSYW5nZShmbG9hdCB6
TmVhciwgZmxvYXQgekZhcikKICAgICB7Ci0gICAgICAgIGFzc2VydElzQ3VycmVudChtX3N0cmVh
bVRocmVhZCk7CisgICAgICAgIGFzc2VydElzQ3VycmVudCh3b3JrUXVldWUoKSk7CiAgICAgICAg
IG1fY29udGV4dC0+ZGVwdGhSYW5nZSh6TmVhciwgekZhcik7CiAgICAgfQogICAgIHZvaWQgZGV0
YWNoU2hhZGVyKHVpbnQzMl90IGFyZzAsIHVpbnQzMl90IGFyZzEpCiAgICAgewotICAgICAgICBh
c3NlcnRJc0N1cnJlbnQobV9zdHJlYW1UaHJlYWQpOworICAgICAgICBhc3NlcnRJc0N1cnJlbnQo
d29ya1F1ZXVlKCkpOwogICAgICAgICBtX2NvbnRleHQtPmRldGFjaFNoYWRlcihhcmcwLCBhcmcx
KTsKICAgICB9CiAgICAgdm9pZCBkaXNhYmxlKHVpbnQzMl90IGNhcCkKICAgICB7Ci0gICAgICAg
IGFzc2VydElzQ3VycmVudChtX3N0cmVhbVRocmVhZCk7CisgICAgICAgIGFzc2VydElzQ3VycmVu
dCh3b3JrUXVldWUoKSk7CiAgICAgICAgIG1fY29udGV4dC0+ZGlzYWJsZShjYXApOwogICAgIH0K
ICAgICB2b2lkIGRpc2FibGVWZXJ0ZXhBdHRyaWJBcnJheSh1aW50MzJfdCBpbmRleCkKICAgICB7
Ci0gICAgICAgIGFzc2VydElzQ3VycmVudChtX3N0cmVhbVRocmVhZCk7CisgICAgICAgIGFzc2Vy
dElzQ3VycmVudCh3b3JrUXVldWUoKSk7CiAgICAgICAgIG1fY29udGV4dC0+ZGlzYWJsZVZlcnRl
eEF0dHJpYkFycmF5KGluZGV4KTsKICAgICB9CiAgICAgdm9pZCBkcmF3QXJyYXlzKHVpbnQzMl90
IG1vZGUsIGludDMyX3QgZmlyc3QsIGludDMyX3QgY291bnQpCiAgICAgewotICAgICAgICBhc3Nl
cnRJc0N1cnJlbnQobV9zdHJlYW1UaHJlYWQpOworICAgICAgICBhc3NlcnRJc0N1cnJlbnQod29y
a1F1ZXVlKCkpOwogICAgICAgICBtX2NvbnRleHQtPmRyYXdBcnJheXMobW9kZSwgZmlyc3QsIGNv
dW50KTsKICAgICB9CiAgICAgdm9pZCBkcmF3RWxlbWVudHModWludDMyX3QgbW9kZSwgaW50MzJf
dCBjb3VudCwgdWludDMyX3QgdHlwZSwgdWludDY0X3Qgb2Zmc2V0KQogICAgIHsKLSAgICAgICAg
YXNzZXJ0SXNDdXJyZW50KG1fc3RyZWFtVGhyZWFkKTsKKyAgICAgICAgYXNzZXJ0SXNDdXJyZW50
KHdvcmtRdWV1ZSgpKTsKICAgICAgICAgbV9jb250ZXh0LT5kcmF3RWxlbWVudHMobW9kZSwgY291
bnQsIHR5cGUsIHN0YXRpY19jYXN0PEdDR0xpbnRwdHI+KG9mZnNldCkpOwogICAgIH0KICAgICB2
b2lkIGVuYWJsZSh1aW50MzJfdCBjYXApCiAgICAgewotICAgICAgICBhc3NlcnRJc0N1cnJlbnQo
bV9zdHJlYW1UaHJlYWQpOworICAgICAgICBhc3NlcnRJc0N1cnJlbnQod29ya1F1ZXVlKCkpOwog
ICAgICAgICBtX2NvbnRleHQtPmVuYWJsZShjYXApOwogICAgIH0KICAgICB2b2lkIGVuYWJsZVZl
cnRleEF0dHJpYkFycmF5KHVpbnQzMl90IGluZGV4KQogICAgIHsKLSAgICAgICAgYXNzZXJ0SXND
dXJyZW50KG1fc3RyZWFtVGhyZWFkKTsKKyAgICAgICAgYXNzZXJ0SXNDdXJyZW50KHdvcmtRdWV1
ZSgpKTsKICAgICAgICAgbV9jb250ZXh0LT5lbmFibGVWZXJ0ZXhBdHRyaWJBcnJheShpbmRleCk7
CiAgICAgfQogICAgIHZvaWQgZmluaXNoKCkKICAgICB7Ci0gICAgICAgIGFzc2VydElzQ3VycmVu
dChtX3N0cmVhbVRocmVhZCk7CisgICAgICAgIGFzc2VydElzQ3VycmVudCh3b3JrUXVldWUoKSk7
CiAgICAgICAgIG1fY29udGV4dC0+ZmluaXNoKCk7CiAgICAgfQogICAgIHZvaWQgZmx1c2goKQog
ICAgIHsKLSAgICAgICAgYXNzZXJ0SXNDdXJyZW50KG1fc3RyZWFtVGhyZWFkKTsKKyAgICAgICAg
YXNzZXJ0SXNDdXJyZW50KHdvcmtRdWV1ZSgpKTsKICAgICAgICAgbV9jb250ZXh0LT5mbHVzaCgp
OwogICAgIH0KICAgICB2b2lkIGZyYW1lYnVmZmVyUmVuZGVyYnVmZmVyKHVpbnQzMl90IHRhcmdl
dCwgdWludDMyX3QgYXR0YWNobWVudCwgdWludDMyX3QgcmVuZGVyYnVmZmVydGFyZ2V0LCB1aW50
MzJfdCBhcmczKQogICAgIHsKLSAgICAgICAgYXNzZXJ0SXNDdXJyZW50KG1fc3RyZWFtVGhyZWFk
KTsKKyAgICAgICAgYXNzZXJ0SXNDdXJyZW50KHdvcmtRdWV1ZSgpKTsKICAgICAgICAgbV9jb250
ZXh0LT5mcmFtZWJ1ZmZlclJlbmRlcmJ1ZmZlcih0YXJnZXQsIGF0dGFjaG1lbnQsIHJlbmRlcmJ1
ZmZlcnRhcmdldCwgYXJnMyk7CiAgICAgfQogICAgIHZvaWQgZnJhbWVidWZmZXJUZXh0dXJlMkQo
dWludDMyX3QgdGFyZ2V0LCB1aW50MzJfdCBhdHRhY2htZW50LCB1aW50MzJfdCB0ZXh0YXJnZXQs
IHVpbnQzMl90IGFyZzMsIGludDMyX3QgbGV2ZWwpCiAgICAgewotICAgICAgICBhc3NlcnRJc0N1
cnJlbnQobV9zdHJlYW1UaHJlYWQpOworICAgICAgICBhc3NlcnRJc0N1cnJlbnQod29ya1F1ZXVl
KCkpOwogICAgICAgICBtX2NvbnRleHQtPmZyYW1lYnVmZmVyVGV4dHVyZTJEKHRhcmdldCwgYXR0
YWNobWVudCwgdGV4dGFyZ2V0LCBhcmczLCBsZXZlbCk7CiAgICAgfQogICAgIHZvaWQgZnJvbnRG
YWNlKHVpbnQzMl90IG1vZGUpCiAgICAgewotICAgICAgICBhc3NlcnRJc0N1cnJlbnQobV9zdHJl
YW1UaHJlYWQpOworICAgICAgICBhc3NlcnRJc0N1cnJlbnQod29ya1F1ZXVlKCkpOwogICAgICAg
ICBtX2NvbnRleHQtPmZyb250RmFjZShtb2RlKTsKICAgICB9CiAgICAgdm9pZCBnZW5lcmF0ZU1p
cG1hcCh1aW50MzJfdCB0YXJnZXQpCiAgICAgewotICAgICAgICBhc3NlcnRJc0N1cnJlbnQobV9z
dHJlYW1UaHJlYWQpOworICAgICAgICBhc3NlcnRJc0N1cnJlbnQod29ya1F1ZXVlKCkpOwogICAg
ICAgICBtX2NvbnRleHQtPmdlbmVyYXRlTWlwbWFwKHRhcmdldCk7CiAgICAgfQogICAgIHZvaWQg
Z2V0QWN0aXZlQXR0cmliKHVpbnQzMl90IHByb2dyYW0sIHVpbnQzMl90IGluZGV4LCBDb21wbGV0
aW9uSGFuZGxlcjx2b2lkKGJvb2wsIFdlYkNvcmU6OkdyYXBoaWNzQ29udGV4dEdMOjpBY3RpdmVJ
bmZvJiYpPiYmIGNvbXBsZXRpb25IYW5kbGVyKQogICAgIHsKICAgICAgICAgYm9vbCByZXR1cm5W
YWx1ZSA9IHsgfTsKICAgICAgICAgV2ViQ29yZTo6R3JhcGhpY3NDb250ZXh0R0w6OkFjdGl2ZUlu
Zm8gYXJnMiB7IH07Ci0gICAgICAgIGFzc2VydElzQ3VycmVudChtX3N0cmVhbVRocmVhZCk7Cisg
ICAgICAgIGFzc2VydElzQ3VycmVudCh3b3JrUXVldWUoKSk7CiAgICAgICAgIHJldHVyblZhbHVl
ID0gbV9jb250ZXh0LT5nZXRBY3RpdmVBdHRyaWIocHJvZ3JhbSwgaW5kZXgsIGFyZzIpOwogICAg
ICAgICBjb21wbGV0aW9uSGFuZGxlcihyZXR1cm5WYWx1ZSwgV1RGTW92ZShhcmcyKSk7CiAgICAg
fQpAQCAtMzA4LDEwNSArMzA4LDEwNSBAQAogICAgIHsKICAgICAgICAgYm9vbCByZXR1cm5WYWx1
ZSA9IHsgfTsKICAgICAgICAgV2ViQ29yZTo6R3JhcGhpY3NDb250ZXh0R0w6OkFjdGl2ZUluZm8g
YXJnMiB7IH07Ci0gICAgICAgIGFzc2VydElzQ3VycmVudChtX3N0cmVhbVRocmVhZCk7CisgICAg
ICAgIGFzc2VydElzQ3VycmVudCh3b3JrUXVldWUoKSk7CiAgICAgICAgIHJldHVyblZhbHVlID0g
bV9jb250ZXh0LT5nZXRBY3RpdmVVbmlmb3JtKHByb2dyYW0sIGluZGV4LCBhcmcyKTsKICAgICAg
ICAgY29tcGxldGlvbkhhbmRsZXIocmV0dXJuVmFsdWUsIFdURk1vdmUoYXJnMikpOwogICAgIH0K
ICAgICB2b2lkIGdldEF0dHJpYkxvY2F0aW9uKHVpbnQzMl90IGFyZzAsIFN0cmluZyYmIG5hbWUs
IENvbXBsZXRpb25IYW5kbGVyPHZvaWQoaW50MzJfdCk+JiYgY29tcGxldGlvbkhhbmRsZXIpCiAg
ICAgewogICAgICAgICBHQ0dMaW50IHJldHVyblZhbHVlID0geyB9OwotICAgICAgICBhc3NlcnRJ
c0N1cnJlbnQobV9zdHJlYW1UaHJlYWQpOworICAgICAgICBhc3NlcnRJc0N1cnJlbnQod29ya1F1
ZXVlKCkpOwogICAgICAgICByZXR1cm5WYWx1ZSA9IG1fY29udGV4dC0+Z2V0QXR0cmliTG9jYXRp
b24oYXJnMCwgbmFtZSk7CiAgICAgICAgIGNvbXBsZXRpb25IYW5kbGVyKHJldHVyblZhbHVlKTsK
ICAgICB9CiAgICAgdm9pZCBnZXRCdWZmZXJQYXJhbWV0ZXJpKHVpbnQzMl90IHRhcmdldCwgdWlu
dDMyX3QgcG5hbWUsIENvbXBsZXRpb25IYW5kbGVyPHZvaWQoaW50MzJfdCk+JiYgY29tcGxldGlv
bkhhbmRsZXIpCiAgICAgewogICAgICAgICBHQ0dMaW50IHJldHVyblZhbHVlID0geyB9OwotICAg
ICAgICBhc3NlcnRJc0N1cnJlbnQobV9zdHJlYW1UaHJlYWQpOworICAgICAgICBhc3NlcnRJc0N1
cnJlbnQod29ya1F1ZXVlKCkpOwogICAgICAgICByZXR1cm5WYWx1ZSA9IG1fY29udGV4dC0+Z2V0
QnVmZmVyUGFyYW1ldGVyaSh0YXJnZXQsIHBuYW1lKTsKICAgICAgICAgY29tcGxldGlvbkhhbmRs
ZXIocmV0dXJuVmFsdWUpOwogICAgIH0KICAgICB2b2lkIGdldFN0cmluZyh1aW50MzJfdCBuYW1l
LCBDb21wbGV0aW9uSGFuZGxlcjx2b2lkKFN0cmluZyYmKT4mJiBjb21wbGV0aW9uSGFuZGxlcikK
ICAgICB7CiAgICAgICAgIFN0cmluZyByZXR1cm5WYWx1ZSA9IHsgfTsKLSAgICAgICAgYXNzZXJ0
SXNDdXJyZW50KG1fc3RyZWFtVGhyZWFkKTsKKyAgICAgICAgYXNzZXJ0SXNDdXJyZW50KHdvcmtR
dWV1ZSgpKTsKICAgICAgICAgcmV0dXJuVmFsdWUgPSBtX2NvbnRleHQtPmdldFN0cmluZyhuYW1l
KTsKICAgICAgICAgY29tcGxldGlvbkhhbmRsZXIoV1RGTW92ZShyZXR1cm5WYWx1ZSkpOwogICAg
IH0KICAgICB2b2lkIGdldEZsb2F0dih1aW50MzJfdCBwbmFtZSwgdWludDY0X3QgdmFsdWVTaXpl
LCBDb21wbGV0aW9uSGFuZGxlcjx2b2lkKElQQzo6QXJyYXlSZWZlcmVuY2U8ZmxvYXQ+KT4mJiBj
b21wbGV0aW9uSGFuZGxlcikKICAgICB7CiAgICAgICAgIFZlY3RvcjxHQ0dMZmxvYXQsIDE2PiB2
YWx1ZShzdGF0aWNfY2FzdDxzaXplX3Q+KHZhbHVlU2l6ZSksIDApOwotICAgICAgICBhc3NlcnRJ
c0N1cnJlbnQobV9zdHJlYW1UaHJlYWQpOworICAgICAgICBhc3NlcnRJc0N1cnJlbnQod29ya1F1
ZXVlKCkpOwogICAgICAgICBtX2NvbnRleHQtPmdldEZsb2F0dihwbmFtZSwgdmFsdWUpOwogICAg
ICAgICBjb21wbGV0aW9uSGFuZGxlcihJUEM6OkFycmF5UmVmZXJlbmNlPGZsb2F0PihyZWludGVy
cHJldF9jYXN0PGZsb2F0Kj4odmFsdWUuZGF0YSgpKSwgdmFsdWUuc2l6ZSgpKSk7CiAgICAgfQog
ICAgIHZvaWQgZ2V0SW50ZWdlcnYodWludDMyX3QgcG5hbWUsIHVpbnQ2NF90IHZhbHVlU2l6ZSwg
Q29tcGxldGlvbkhhbmRsZXI8dm9pZChJUEM6OkFycmF5UmVmZXJlbmNlPGludDMyX3Q+KT4mJiBj
b21wbGV0aW9uSGFuZGxlcikKICAgICB7CiAgICAgICAgIFZlY3RvcjxHQ0dMaW50LCA0PiB2YWx1
ZShzdGF0aWNfY2FzdDxzaXplX3Q+KHZhbHVlU2l6ZSksIDApOwotICAgICAgICBhc3NlcnRJc0N1
cnJlbnQobV9zdHJlYW1UaHJlYWQpOworICAgICAgICBhc3NlcnRJc0N1cnJlbnQod29ya1F1ZXVl
KCkpOwogICAgICAgICBtX2NvbnRleHQtPmdldEludGVnZXJ2KHBuYW1lLCB2YWx1ZSk7CiAgICAg
ICAgIGNvbXBsZXRpb25IYW5kbGVyKElQQzo6QXJyYXlSZWZlcmVuY2U8aW50MzJfdD4ocmVpbnRl
cnByZXRfY2FzdDxpbnQzMl90Kj4odmFsdWUuZGF0YSgpKSwgdmFsdWUuc2l6ZSgpKSk7CiAgICAg
fQogICAgIHZvaWQgZ2V0SW50ZWdlcjY0KHVpbnQzMl90IHBuYW1lLCBDb21wbGV0aW9uSGFuZGxl
cjx2b2lkKGludDY0X3QpPiYmIGNvbXBsZXRpb25IYW5kbGVyKQogICAgIHsKICAgICAgICAgR0NH
TGludDY0IHJldHVyblZhbHVlID0geyB9OwotICAgICAgICBhc3NlcnRJc0N1cnJlbnQobV9zdHJl
YW1UaHJlYWQpOworICAgICAgICBhc3NlcnRJc0N1cnJlbnQod29ya1F1ZXVlKCkpOwogICAgICAg
ICByZXR1cm5WYWx1ZSA9IG1fY29udGV4dC0+Z2V0SW50ZWdlcjY0KHBuYW1lKTsKICAgICAgICAg
Y29tcGxldGlvbkhhbmRsZXIoc3RhdGljX2Nhc3Q8aW50NjRfdD4ocmV0dXJuVmFsdWUpKTsKICAg
ICB9CiAgICAgdm9pZCBnZXRJbnRlZ2VyNjRpKHVpbnQzMl90IHBuYW1lLCB1aW50MzJfdCBpbmRl
eCwgQ29tcGxldGlvbkhhbmRsZXI8dm9pZChpbnQ2NF90KT4mJiBjb21wbGV0aW9uSGFuZGxlcikK
ICAgICB7CiAgICAgICAgIEdDR0xpbnQ2NCByZXR1cm5WYWx1ZSA9IHsgfTsKLSAgICAgICAgYXNz
ZXJ0SXNDdXJyZW50KG1fc3RyZWFtVGhyZWFkKTsKKyAgICAgICAgYXNzZXJ0SXNDdXJyZW50KHdv
cmtRdWV1ZSgpKTsKICAgICAgICAgcmV0dXJuVmFsdWUgPSBtX2NvbnRleHQtPmdldEludGVnZXI2
NGkocG5hbWUsIGluZGV4KTsKICAgICAgICAgY29tcGxldGlvbkhhbmRsZXIoc3RhdGljX2Nhc3Q8
aW50NjRfdD4ocmV0dXJuVmFsdWUpKTsKICAgICB9CiAgICAgdm9pZCBnZXRQcm9ncmFtaSh1aW50
MzJfdCBwcm9ncmFtLCB1aW50MzJfdCBwbmFtZSwgQ29tcGxldGlvbkhhbmRsZXI8dm9pZChpbnQz
Ml90KT4mJiBjb21wbGV0aW9uSGFuZGxlcikKICAgICB7CiAgICAgICAgIEdDR0xpbnQgcmV0dXJu
VmFsdWUgPSB7IH07Ci0gICAgICAgIGFzc2VydElzQ3VycmVudChtX3N0cmVhbVRocmVhZCk7Cisg
ICAgICAgIGFzc2VydElzQ3VycmVudCh3b3JrUXVldWUoKSk7CiAgICAgICAgIHJldHVyblZhbHVl
ID0gbV9jb250ZXh0LT5nZXRQcm9ncmFtaShwcm9ncmFtLCBwbmFtZSk7CiAgICAgICAgIGNvbXBs
ZXRpb25IYW5kbGVyKHJldHVyblZhbHVlKTsKICAgICB9CiAgICAgdm9pZCBnZXRCb29sZWFudih1
aW50MzJfdCBwbmFtZSwgdWludDY0X3QgdmFsdWVTaXplLCBDb21wbGV0aW9uSGFuZGxlcjx2b2lk
KElQQzo6QXJyYXlSZWZlcmVuY2U8Ym9vbD4pPiYmIGNvbXBsZXRpb25IYW5kbGVyKQogICAgIHsK
ICAgICAgICAgVmVjdG9yPEdDR0xib29sZWFuLCA0PiB2YWx1ZShzdGF0aWNfY2FzdDxzaXplX3Q+
KHZhbHVlU2l6ZSksIDApOwotICAgICAgICBhc3NlcnRJc0N1cnJlbnQobV9zdHJlYW1UaHJlYWQp
OworICAgICAgICBhc3NlcnRJc0N1cnJlbnQod29ya1F1ZXVlKCkpOwogICAgICAgICBtX2NvbnRl
eHQtPmdldEJvb2xlYW52KHBuYW1lLCB2YWx1ZSk7CiAgICAgICAgIGNvbXBsZXRpb25IYW5kbGVy
KElQQzo6QXJyYXlSZWZlcmVuY2U8Ym9vbD4ocmVpbnRlcnByZXRfY2FzdDxib29sKj4odmFsdWUu
ZGF0YSgpKSwgdmFsdWUuc2l6ZSgpKSk7CiAgICAgfQogICAgIHZvaWQgZ2V0RnJhbWVidWZmZXJB
dHRhY2htZW50UGFyYW1ldGVyaSh1aW50MzJfdCB0YXJnZXQsIHVpbnQzMl90IGF0dGFjaG1lbnQs
IHVpbnQzMl90IHBuYW1lLCBDb21wbGV0aW9uSGFuZGxlcjx2b2lkKGludDMyX3QpPiYmIGNvbXBs
ZXRpb25IYW5kbGVyKQogICAgIHsKICAgICAgICAgR0NHTGludCByZXR1cm5WYWx1ZSA9IHsgfTsK
LSAgICAgICAgYXNzZXJ0SXNDdXJyZW50KG1fc3RyZWFtVGhyZWFkKTsKKyAgICAgICAgYXNzZXJ0
SXNDdXJyZW50KHdvcmtRdWV1ZSgpKTsKICAgICAgICAgcmV0dXJuVmFsdWUgPSBtX2NvbnRleHQt
PmdldEZyYW1lYnVmZmVyQXR0YWNobWVudFBhcmFtZXRlcmkodGFyZ2V0LCBhdHRhY2htZW50LCBw
bmFtZSk7CiAgICAgICAgIGNvbXBsZXRpb25IYW5kbGVyKHJldHVyblZhbHVlKTsKICAgICB9CiAg
ICAgdm9pZCBnZXRQcm9ncmFtSW5mb0xvZyh1aW50MzJfdCBhcmcwLCBDb21wbGV0aW9uSGFuZGxl
cjx2b2lkKFN0cmluZyYmKT4mJiBjb21wbGV0aW9uSGFuZGxlcikKICAgICB7CiAgICAgICAgIFN0
cmluZyByZXR1cm5WYWx1ZSA9IHsgfTsKLSAgICAgICAgYXNzZXJ0SXNDdXJyZW50KG1fc3RyZWFt
VGhyZWFkKTsKKyAgICAgICAgYXNzZXJ0SXNDdXJyZW50KHdvcmtRdWV1ZSgpKTsKICAgICAgICAg
cmV0dXJuVmFsdWUgPSBtX2NvbnRleHQtPmdldFByb2dyYW1JbmZvTG9nKGFyZzApOwogICAgICAg
ICBjb21wbGV0aW9uSGFuZGxlcihXVEZNb3ZlKHJldHVyblZhbHVlKSk7CiAgICAgfQogICAgIHZv
aWQgZ2V0UmVuZGVyYnVmZmVyUGFyYW1ldGVyaSh1aW50MzJfdCB0YXJnZXQsIHVpbnQzMl90IHBu
YW1lLCBDb21wbGV0aW9uSGFuZGxlcjx2b2lkKGludDMyX3QpPiYmIGNvbXBsZXRpb25IYW5kbGVy
KQogICAgIHsKICAgICAgICAgR0NHTGludCByZXR1cm5WYWx1ZSA9IHsgfTsKLSAgICAgICAgYXNz
ZXJ0SXNDdXJyZW50KG1fc3RyZWFtVGhyZWFkKTsKKyAgICAgICAgYXNzZXJ0SXNDdXJyZW50KHdv
cmtRdWV1ZSgpKTsKICAgICAgICAgcmV0dXJuVmFsdWUgPSBtX2NvbnRleHQtPmdldFJlbmRlcmJ1
ZmZlclBhcmFtZXRlcmkodGFyZ2V0LCBwbmFtZSk7CiAgICAgICAgIGNvbXBsZXRpb25IYW5kbGVy
KHJldHVyblZhbHVlKTsKICAgICB9CiAgICAgdm9pZCBnZXRTaGFkZXJpKHVpbnQzMl90IGFyZzAs
IHVpbnQzMl90IHBuYW1lLCBDb21wbGV0aW9uSGFuZGxlcjx2b2lkKGludDMyX3QpPiYmIGNvbXBs
ZXRpb25IYW5kbGVyKQogICAgIHsKICAgICAgICAgR0NHTGludCByZXR1cm5WYWx1ZSA9IHsgfTsK
LSAgICAgICAgYXNzZXJ0SXNDdXJyZW50KG1fc3RyZWFtVGhyZWFkKTsKKyAgICAgICAgYXNzZXJ0
SXNDdXJyZW50KHdvcmtRdWV1ZSgpKTsKICAgICAgICAgcmV0dXJuVmFsdWUgPSBtX2NvbnRleHQt
PmdldFNoYWRlcmkoYXJnMCwgcG5hbWUpOwogICAgICAgICBjb21wbGV0aW9uSGFuZGxlcihyZXR1
cm5WYWx1ZSk7CiAgICAgfQogICAgIHZvaWQgZ2V0U2hhZGVySW5mb0xvZyh1aW50MzJfdCBhcmcw
LCBDb21wbGV0aW9uSGFuZGxlcjx2b2lkKFN0cmluZyYmKT4mJiBjb21wbGV0aW9uSGFuZGxlcikK
ICAgICB7CiAgICAgICAgIFN0cmluZyByZXR1cm5WYWx1ZSA9IHsgfTsKLSAgICAgICAgYXNzZXJ0
SXNDdXJyZW50KG1fc3RyZWFtVGhyZWFkKTsKKyAgICAgICAgYXNzZXJ0SXNDdXJyZW50KHdvcmtR
dWV1ZSgpKTsKICAgICAgICAgcmV0dXJuVmFsdWUgPSBtX2NvbnRleHQtPmdldFNoYWRlckluZm9M
b2coYXJnMCk7CiAgICAgICAgIGNvbXBsZXRpb25IYW5kbGVyKFdURk1vdmUocmV0dXJuVmFsdWUp
KTsKICAgICB9CkBAIC00MTQsOTc1ICs0MTQsOTc1IEBACiAgICAgewogICAgICAgICBzdGQ6OmFy
cmF5PEdDR0xpbnQsIDI+IHJhbmdlIHsgfTsKICAgICAgICAgR0NHTGludCBwcmVjaXNpb24gPSB7
IH07Ci0gICAgICAgIGFzc2VydElzQ3VycmVudChtX3N0cmVhbVRocmVhZCk7CisgICAgICAgIGFz
c2VydElzQ3VycmVudCh3b3JrUXVldWUoKSk7CiAgICAgICAgIG1fY29udGV4dC0+Z2V0U2hhZGVy
UHJlY2lzaW9uRm9ybWF0KHNoYWRlclR5cGUsIHByZWNpc2lvblR5cGUsIHJhbmdlLCAmcHJlY2lz
aW9uKTsKICAgICAgICAgY29tcGxldGlvbkhhbmRsZXIoSVBDOjpBcnJheVJlZmVyZW5jZTxpbnQz
Ml90LCAyPihyZWludGVycHJldF9jYXN0PGludDMyX3QqPihyYW5nZS5kYXRhKCkpLCByYW5nZS5z
aXplKCkpLCBwcmVjaXNpb24pOwogICAgIH0KICAgICB2b2lkIGdldFNoYWRlclNvdXJjZSh1aW50
MzJfdCBhcmcwLCBDb21wbGV0aW9uSGFuZGxlcjx2b2lkKFN0cmluZyYmKT4mJiBjb21wbGV0aW9u
SGFuZGxlcikKICAgICB7CiAgICAgICAgIFN0cmluZyByZXR1cm5WYWx1ZSA9IHsgfTsKLSAgICAg
ICAgYXNzZXJ0SXNDdXJyZW50KG1fc3RyZWFtVGhyZWFkKTsKKyAgICAgICAgYXNzZXJ0SXNDdXJy
ZW50KHdvcmtRdWV1ZSgpKTsKICAgICAgICAgcmV0dXJuVmFsdWUgPSBtX2NvbnRleHQtPmdldFNo
YWRlclNvdXJjZShhcmcwKTsKICAgICAgICAgY29tcGxldGlvbkhhbmRsZXIoV1RGTW92ZShyZXR1
cm5WYWx1ZSkpOwogICAgIH0KICAgICB2b2lkIGdldFRleFBhcmFtZXRlcmYodWludDMyX3QgdGFy
Z2V0LCB1aW50MzJfdCBwbmFtZSwgQ29tcGxldGlvbkhhbmRsZXI8dm9pZChmbG9hdCk+JiYgY29t
cGxldGlvbkhhbmRsZXIpCiAgICAgewogICAgICAgICBHQ0dMZmxvYXQgcmV0dXJuVmFsdWUgPSB7
IH07Ci0gICAgICAgIGFzc2VydElzQ3VycmVudChtX3N0cmVhbVRocmVhZCk7CisgICAgICAgIGFz
c2VydElzQ3VycmVudCh3b3JrUXVldWUoKSk7CiAgICAgICAgIHJldHVyblZhbHVlID0gbV9jb250
ZXh0LT5nZXRUZXhQYXJhbWV0ZXJmKHRhcmdldCwgcG5hbWUpOwogICAgICAgICBjb21wbGV0aW9u
SGFuZGxlcihyZXR1cm5WYWx1ZSk7CiAgICAgfQogICAgIHZvaWQgZ2V0VGV4UGFyYW1ldGVyaSh1
aW50MzJfdCB0YXJnZXQsIHVpbnQzMl90IHBuYW1lLCBDb21wbGV0aW9uSGFuZGxlcjx2b2lkKGlu
dDMyX3QpPiYmIGNvbXBsZXRpb25IYW5kbGVyKQogICAgIHsKICAgICAgICAgR0NHTGludCByZXR1
cm5WYWx1ZSA9IHsgfTsKLSAgICAgICAgYXNzZXJ0SXNDdXJyZW50KG1fc3RyZWFtVGhyZWFkKTsK
KyAgICAgICAgYXNzZXJ0SXNDdXJyZW50KHdvcmtRdWV1ZSgpKTsKICAgICAgICAgcmV0dXJuVmFs
dWUgPSBtX2NvbnRleHQtPmdldFRleFBhcmFtZXRlcmkodGFyZ2V0LCBwbmFtZSk7CiAgICAgICAg
IGNvbXBsZXRpb25IYW5kbGVyKHJldHVyblZhbHVlKTsKICAgICB9CiAgICAgdm9pZCBnZXRVbmlm
b3JtZnYodWludDMyX3QgcHJvZ3JhbSwgaW50MzJfdCBsb2NhdGlvbiwgdWludDY0X3QgdmFsdWVT
aXplLCBDb21wbGV0aW9uSGFuZGxlcjx2b2lkKElQQzo6QXJyYXlSZWZlcmVuY2U8ZmxvYXQ+KT4m
JiBjb21wbGV0aW9uSGFuZGxlcikKICAgICB7CiAgICAgICAgIFZlY3RvcjxHQ0dMZmxvYXQsIDE2
PiB2YWx1ZShzdGF0aWNfY2FzdDxzaXplX3Q+KHZhbHVlU2l6ZSksIDApOwotICAgICAgICBhc3Nl
cnRJc0N1cnJlbnQobV9zdHJlYW1UaHJlYWQpOworICAgICAgICBhc3NlcnRJc0N1cnJlbnQod29y
a1F1ZXVlKCkpOwogICAgICAgICBtX2NvbnRleHQtPmdldFVuaWZvcm1mdihwcm9ncmFtLCBsb2Nh
dGlvbiwgdmFsdWUpOwogICAgICAgICBjb21wbGV0aW9uSGFuZGxlcihJUEM6OkFycmF5UmVmZXJl
bmNlPGZsb2F0PihyZWludGVycHJldF9jYXN0PGZsb2F0Kj4odmFsdWUuZGF0YSgpKSwgdmFsdWUu
c2l6ZSgpKSk7CiAgICAgfQogICAgIHZvaWQgZ2V0VW5pZm9ybWl2KHVpbnQzMl90IHByb2dyYW0s
IGludDMyX3QgbG9jYXRpb24sIHVpbnQ2NF90IHZhbHVlU2l6ZSwgQ29tcGxldGlvbkhhbmRsZXI8
dm9pZChJUEM6OkFycmF5UmVmZXJlbmNlPGludDMyX3Q+KT4mJiBjb21wbGV0aW9uSGFuZGxlcikK
ICAgICB7CiAgICAgICAgIFZlY3RvcjxHQ0dMaW50LCA0PiB2YWx1ZShzdGF0aWNfY2FzdDxzaXpl
X3Q+KHZhbHVlU2l6ZSksIDApOwotICAgICAgICBhc3NlcnRJc0N1cnJlbnQobV9zdHJlYW1UaHJl
YWQpOworICAgICAgICBhc3NlcnRJc0N1cnJlbnQod29ya1F1ZXVlKCkpOwogICAgICAgICBtX2Nv
bnRleHQtPmdldFVuaWZvcm1pdihwcm9ncmFtLCBsb2NhdGlvbiwgdmFsdWUpOwogICAgICAgICBj
b21wbGV0aW9uSGFuZGxlcihJUEM6OkFycmF5UmVmZXJlbmNlPGludDMyX3Q+KHJlaW50ZXJwcmV0
X2Nhc3Q8aW50MzJfdCo+KHZhbHVlLmRhdGEoKSksIHZhbHVlLnNpemUoKSkpOwogICAgIH0KICAg
ICB2b2lkIGdldFVuaWZvcm11aXYodWludDMyX3QgcHJvZ3JhbSwgaW50MzJfdCBsb2NhdGlvbiwg
dWludDY0X3QgdmFsdWVTaXplLCBDb21wbGV0aW9uSGFuZGxlcjx2b2lkKElQQzo6QXJyYXlSZWZl
cmVuY2U8dWludDMyX3Q+KT4mJiBjb21wbGV0aW9uSGFuZGxlcikKICAgICB7CiAgICAgICAgIFZl
Y3RvcjxHQ0dMdWludCwgND4gdmFsdWUoc3RhdGljX2Nhc3Q8c2l6ZV90Pih2YWx1ZVNpemUpLCAw
KTsKLSAgICAgICAgYXNzZXJ0SXNDdXJyZW50KG1fc3RyZWFtVGhyZWFkKTsKKyAgICAgICAgYXNz
ZXJ0SXNDdXJyZW50KHdvcmtRdWV1ZSgpKTsKICAgICAgICAgbV9jb250ZXh0LT5nZXRVbmlmb3Jt
dWl2KHByb2dyYW0sIGxvY2F0aW9uLCB2YWx1ZSk7CiAgICAgICAgIGNvbXBsZXRpb25IYW5kbGVy
KElQQzo6QXJyYXlSZWZlcmVuY2U8dWludDMyX3Q+KHJlaW50ZXJwcmV0X2Nhc3Q8dWludDMyX3Qq
Pih2YWx1ZS5kYXRhKCkpLCB2YWx1ZS5zaXplKCkpKTsKICAgICB9CiAgICAgdm9pZCBnZXRVbmlm
b3JtTG9jYXRpb24odWludDMyX3QgYXJnMCwgU3RyaW5nJiYgbmFtZSwgQ29tcGxldGlvbkhhbmRs
ZXI8dm9pZChpbnQzMl90KT4mJiBjb21wbGV0aW9uSGFuZGxlcikKICAgICB7CiAgICAgICAgIEdD
R0xpbnQgcmV0dXJuVmFsdWUgPSB7IH07Ci0gICAgICAgIGFzc2VydElzQ3VycmVudChtX3N0cmVh
bVRocmVhZCk7CisgICAgICAgIGFzc2VydElzQ3VycmVudCh3b3JrUXVldWUoKSk7CiAgICAgICAg
IHJldHVyblZhbHVlID0gbV9jb250ZXh0LT5nZXRVbmlmb3JtTG9jYXRpb24oYXJnMCwgbmFtZSk7
CiAgICAgICAgIGNvbXBsZXRpb25IYW5kbGVyKHJldHVyblZhbHVlKTsKICAgICB9CiAgICAgdm9p
ZCBnZXRWZXJ0ZXhBdHRyaWJPZmZzZXQodWludDMyX3QgaW5kZXgsIHVpbnQzMl90IHBuYW1lLCBD
b21wbGV0aW9uSGFuZGxlcjx2b2lkKHVpbnQ2NF90KT4mJiBjb21wbGV0aW9uSGFuZGxlcikKICAg
ICB7CiAgICAgICAgIEdDR0xzaXplaXB0ciByZXR1cm5WYWx1ZSA9IHsgfTsKLSAgICAgICAgYXNz
ZXJ0SXNDdXJyZW50KG1fc3RyZWFtVGhyZWFkKTsKKyAgICAgICAgYXNzZXJ0SXNDdXJyZW50KHdv
cmtRdWV1ZSgpKTsKICAgICAgICAgcmV0dXJuVmFsdWUgPSBtX2NvbnRleHQtPmdldFZlcnRleEF0
dHJpYk9mZnNldChpbmRleCwgcG5hbWUpOwogICAgICAgICBjb21wbGV0aW9uSGFuZGxlcihzdGF0
aWNfY2FzdDx1aW50NjRfdD4ocmV0dXJuVmFsdWUpKTsKICAgICB9CiAgICAgdm9pZCBoaW50KHVp
bnQzMl90IHRhcmdldCwgdWludDMyX3QgbW9kZSkKICAgICB7Ci0gICAgICAgIGFzc2VydElzQ3Vy
cmVudChtX3N0cmVhbVRocmVhZCk7CisgICAgICAgIGFzc2VydElzQ3VycmVudCh3b3JrUXVldWUo
KSk7CiAgICAgICAgIG1fY29udGV4dC0+aGludCh0YXJnZXQsIG1vZGUpOwogICAgIH0KICAgICB2
b2lkIGlzQnVmZmVyKHVpbnQzMl90IGFyZzAsIENvbXBsZXRpb25IYW5kbGVyPHZvaWQoYm9vbCk+
JiYgY29tcGxldGlvbkhhbmRsZXIpCiAgICAgewogICAgICAgICBHQ0dMYm9vbGVhbiByZXR1cm5W
YWx1ZSA9IHsgfTsKLSAgICAgICAgYXNzZXJ0SXNDdXJyZW50KG1fc3RyZWFtVGhyZWFkKTsKKyAg
ICAgICAgYXNzZXJ0SXNDdXJyZW50KHdvcmtRdWV1ZSgpKTsKICAgICAgICAgcmV0dXJuVmFsdWUg
PSBtX2NvbnRleHQtPmlzQnVmZmVyKGFyZzApOwogICAgICAgICBjb21wbGV0aW9uSGFuZGxlcihz
dGF0aWNfY2FzdDxib29sPihyZXR1cm5WYWx1ZSkpOwogICAgIH0KICAgICB2b2lkIGlzRW5hYmxl
ZCh1aW50MzJfdCBjYXAsIENvbXBsZXRpb25IYW5kbGVyPHZvaWQoYm9vbCk+JiYgY29tcGxldGlv
bkhhbmRsZXIpCiAgICAgewogICAgICAgICBHQ0dMYm9vbGVhbiByZXR1cm5WYWx1ZSA9IHsgfTsK
LSAgICAgICAgYXNzZXJ0SXNDdXJyZW50KG1fc3RyZWFtVGhyZWFkKTsKKyAgICAgICAgYXNzZXJ0
SXNDdXJyZW50KHdvcmtRdWV1ZSgpKTsKICAgICAgICAgcmV0dXJuVmFsdWUgPSBtX2NvbnRleHQt
PmlzRW5hYmxlZChjYXApOwogICAgICAgICBjb21wbGV0aW9uSGFuZGxlcihzdGF0aWNfY2FzdDxi
b29sPihyZXR1cm5WYWx1ZSkpOwogICAgIH0KICAgICB2b2lkIGlzRnJhbWVidWZmZXIodWludDMy
X3QgYXJnMCwgQ29tcGxldGlvbkhhbmRsZXI8dm9pZChib29sKT4mJiBjb21wbGV0aW9uSGFuZGxl
cikKICAgICB7CiAgICAgICAgIEdDR0xib29sZWFuIHJldHVyblZhbHVlID0geyB9OwotICAgICAg
ICBhc3NlcnRJc0N1cnJlbnQobV9zdHJlYW1UaHJlYWQpOworICAgICAgICBhc3NlcnRJc0N1cnJl
bnQod29ya1F1ZXVlKCkpOwogICAgICAgICByZXR1cm5WYWx1ZSA9IG1fY29udGV4dC0+aXNGcmFt
ZWJ1ZmZlcihhcmcwKTsKICAgICAgICAgY29tcGxldGlvbkhhbmRsZXIoc3RhdGljX2Nhc3Q8Ym9v
bD4ocmV0dXJuVmFsdWUpKTsKICAgICB9CiAgICAgdm9pZCBpc1Byb2dyYW0odWludDMyX3QgYXJn
MCwgQ29tcGxldGlvbkhhbmRsZXI8dm9pZChib29sKT4mJiBjb21wbGV0aW9uSGFuZGxlcikKICAg
ICB7CiAgICAgICAgIEdDR0xib29sZWFuIHJldHVyblZhbHVlID0geyB9OwotICAgICAgICBhc3Nl
cnRJc0N1cnJlbnQobV9zdHJlYW1UaHJlYWQpOworICAgICAgICBhc3NlcnRJc0N1cnJlbnQod29y
a1F1ZXVlKCkpOwogICAgICAgICByZXR1cm5WYWx1ZSA9IG1fY29udGV4dC0+aXNQcm9ncmFtKGFy
ZzApOwogICAgICAgICBjb21wbGV0aW9uSGFuZGxlcihzdGF0aWNfY2FzdDxib29sPihyZXR1cm5W
YWx1ZSkpOwogICAgIH0KICAgICB2b2lkIGlzUmVuZGVyYnVmZmVyKHVpbnQzMl90IGFyZzAsIENv
bXBsZXRpb25IYW5kbGVyPHZvaWQoYm9vbCk+JiYgY29tcGxldGlvbkhhbmRsZXIpCiAgICAgewog
ICAgICAgICBHQ0dMYm9vbGVhbiByZXR1cm5WYWx1ZSA9IHsgfTsKLSAgICAgICAgYXNzZXJ0SXND
dXJyZW50KG1fc3RyZWFtVGhyZWFkKTsKKyAgICAgICAgYXNzZXJ0SXNDdXJyZW50KHdvcmtRdWV1
ZSgpKTsKICAgICAgICAgcmV0dXJuVmFsdWUgPSBtX2NvbnRleHQtPmlzUmVuZGVyYnVmZmVyKGFy
ZzApOwogICAgICAgICBjb21wbGV0aW9uSGFuZGxlcihzdGF0aWNfY2FzdDxib29sPihyZXR1cm5W
YWx1ZSkpOwogICAgIH0KICAgICB2b2lkIGlzU2hhZGVyKHVpbnQzMl90IGFyZzAsIENvbXBsZXRp
b25IYW5kbGVyPHZvaWQoYm9vbCk+JiYgY29tcGxldGlvbkhhbmRsZXIpCiAgICAgewogICAgICAg
ICBHQ0dMYm9vbGVhbiByZXR1cm5WYWx1ZSA9IHsgfTsKLSAgICAgICAgYXNzZXJ0SXNDdXJyZW50
KG1fc3RyZWFtVGhyZWFkKTsKKyAgICAgICAgYXNzZXJ0SXNDdXJyZW50KHdvcmtRdWV1ZSgpKTsK
ICAgICAgICAgcmV0dXJuVmFsdWUgPSBtX2NvbnRleHQtPmlzU2hhZGVyKGFyZzApOwogICAgICAg
ICBjb21wbGV0aW9uSGFuZGxlcihzdGF0aWNfY2FzdDxib29sPihyZXR1cm5WYWx1ZSkpOwogICAg
IH0KICAgICB2b2lkIGlzVGV4dHVyZSh1aW50MzJfdCBhcmcwLCBDb21wbGV0aW9uSGFuZGxlcjx2
b2lkKGJvb2wpPiYmIGNvbXBsZXRpb25IYW5kbGVyKQogICAgIHsKICAgICAgICAgR0NHTGJvb2xl
YW4gcmV0dXJuVmFsdWUgPSB7IH07Ci0gICAgICAgIGFzc2VydElzQ3VycmVudChtX3N0cmVhbVRo
cmVhZCk7CisgICAgICAgIGFzc2VydElzQ3VycmVudCh3b3JrUXVldWUoKSk7CiAgICAgICAgIHJl
dHVyblZhbHVlID0gbV9jb250ZXh0LT5pc1RleHR1cmUoYXJnMCk7CiAgICAgICAgIGNvbXBsZXRp
b25IYW5kbGVyKHN0YXRpY19jYXN0PGJvb2w+KHJldHVyblZhbHVlKSk7CiAgICAgfQogICAgIHZv
aWQgbGluZVdpZHRoKGZsb2F0IGFyZzApCiAgICAgewotICAgICAgICBhc3NlcnRJc0N1cnJlbnQo
bV9zdHJlYW1UaHJlYWQpOworICAgICAgICBhc3NlcnRJc0N1cnJlbnQod29ya1F1ZXVlKCkpOwog
ICAgICAgICBtX2NvbnRleHQtPmxpbmVXaWR0aChhcmcwKTsKICAgICB9CiAgICAgdm9pZCBsaW5r
UHJvZ3JhbSh1aW50MzJfdCBhcmcwKQogICAgIHsKLSAgICAgICAgYXNzZXJ0SXNDdXJyZW50KG1f
c3RyZWFtVGhyZWFkKTsKKyAgICAgICAgYXNzZXJ0SXNDdXJyZW50KHdvcmtRdWV1ZSgpKTsKICAg
ICAgICAgbV9jb250ZXh0LT5saW5rUHJvZ3JhbShhcmcwKTsKICAgICB9CiAgICAgdm9pZCBwaXhl
bFN0b3JlaSh1aW50MzJfdCBwbmFtZSwgaW50MzJfdCBwYXJhbSkKICAgICB7Ci0gICAgICAgIGFz
c2VydElzQ3VycmVudChtX3N0cmVhbVRocmVhZCk7CisgICAgICAgIGFzc2VydElzQ3VycmVudCh3
b3JrUXVldWUoKSk7CiAgICAgICAgIG1fY29udGV4dC0+cGl4ZWxTdG9yZWkocG5hbWUsIHBhcmFt
KTsKICAgICB9CiAgICAgdm9pZCBwb2x5Z29uT2Zmc2V0KGZsb2F0IGZhY3RvciwgZmxvYXQgdW5p
dHMpCiAgICAgewotICAgICAgICBhc3NlcnRJc0N1cnJlbnQobV9zdHJlYW1UaHJlYWQpOworICAg
ICAgICBhc3NlcnRJc0N1cnJlbnQod29ya1F1ZXVlKCkpOwogICAgICAgICBtX2NvbnRleHQtPnBv
bHlnb25PZmZzZXQoZmFjdG9yLCB1bml0cyk7CiAgICAgfQogICAgIHZvaWQgcmVuZGVyYnVmZmVy
U3RvcmFnZSh1aW50MzJfdCB0YXJnZXQsIHVpbnQzMl90IGludGVybmFsZm9ybWF0LCBpbnQzMl90
IHdpZHRoLCBpbnQzMl90IGhlaWdodCkKICAgICB7Ci0gICAgICAgIGFzc2VydElzQ3VycmVudCht
X3N0cmVhbVRocmVhZCk7CisgICAgICAgIGFzc2VydElzQ3VycmVudCh3b3JrUXVldWUoKSk7CiAg
ICAgICAgIG1fY29udGV4dC0+cmVuZGVyYnVmZmVyU3RvcmFnZSh0YXJnZXQsIGludGVybmFsZm9y
bWF0LCB3aWR0aCwgaGVpZ2h0KTsKICAgICB9CiAgICAgdm9pZCBzYW1wbGVDb3ZlcmFnZShmbG9h
dCB2YWx1ZSwgYm9vbCBpbnZlcnQpCiAgICAgewotICAgICAgICBhc3NlcnRJc0N1cnJlbnQobV9z
dHJlYW1UaHJlYWQpOworICAgICAgICBhc3NlcnRJc0N1cnJlbnQod29ya1F1ZXVlKCkpOwogICAg
ICAgICBtX2NvbnRleHQtPnNhbXBsZUNvdmVyYWdlKHZhbHVlLCBzdGF0aWNfY2FzdDxHQ0dMYm9v
bGVhbj4oaW52ZXJ0KSk7CiAgICAgfQogICAgIHZvaWQgc2Npc3NvcihpbnQzMl90IHgsIGludDMy
X3QgeSwgaW50MzJfdCB3aWR0aCwgaW50MzJfdCBoZWlnaHQpCiAgICAgewotICAgICAgICBhc3Nl
cnRJc0N1cnJlbnQobV9zdHJlYW1UaHJlYWQpOworICAgICAgICBhc3NlcnRJc0N1cnJlbnQod29y
a1F1ZXVlKCkpOwogICAgICAgICBtX2NvbnRleHQtPnNjaXNzb3IoeCwgeSwgd2lkdGgsIGhlaWdo
dCk7CiAgICAgfQogICAgIHZvaWQgc2hhZGVyU291cmNlKHVpbnQzMl90IGFyZzAsIFN0cmluZyYm
IGFyZzEpCiAgICAgewotICAgICAgICBhc3NlcnRJc0N1cnJlbnQobV9zdHJlYW1UaHJlYWQpOwor
ICAgICAgICBhc3NlcnRJc0N1cnJlbnQod29ya1F1ZXVlKCkpOwogICAgICAgICBtX2NvbnRleHQt
PnNoYWRlclNvdXJjZShhcmcwLCBhcmcxKTsKICAgICB9CiAgICAgdm9pZCBzdGVuY2lsRnVuYyh1
aW50MzJfdCBmdW5jLCBpbnQzMl90IHJlZiwgdWludDMyX3QgbWFzaykKICAgICB7Ci0gICAgICAg
IGFzc2VydElzQ3VycmVudChtX3N0cmVhbVRocmVhZCk7CisgICAgICAgIGFzc2VydElzQ3VycmVu
dCh3b3JrUXVldWUoKSk7CiAgICAgICAgIG1fY29udGV4dC0+c3RlbmNpbEZ1bmMoZnVuYywgcmVm
LCBtYXNrKTsKICAgICB9CiAgICAgdm9pZCBzdGVuY2lsRnVuY1NlcGFyYXRlKHVpbnQzMl90IGZh
Y2UsIHVpbnQzMl90IGZ1bmMsIGludDMyX3QgcmVmLCB1aW50MzJfdCBtYXNrKQogICAgIHsKLSAg
ICAgICAgYXNzZXJ0SXNDdXJyZW50KG1fc3RyZWFtVGhyZWFkKTsKKyAgICAgICAgYXNzZXJ0SXND
dXJyZW50KHdvcmtRdWV1ZSgpKTsKICAgICAgICAgbV9jb250ZXh0LT5zdGVuY2lsRnVuY1NlcGFy
YXRlKGZhY2UsIGZ1bmMsIHJlZiwgbWFzayk7CiAgICAgfQogICAgIHZvaWQgc3RlbmNpbE1hc2so
dWludDMyX3QgbWFzaykKICAgICB7Ci0gICAgICAgIGFzc2VydElzQ3VycmVudChtX3N0cmVhbVRo
cmVhZCk7CisgICAgICAgIGFzc2VydElzQ3VycmVudCh3b3JrUXVldWUoKSk7CiAgICAgICAgIG1f
Y29udGV4dC0+c3RlbmNpbE1hc2sobWFzayk7CiAgICAgfQogICAgIHZvaWQgc3RlbmNpbE1hc2tT
ZXBhcmF0ZSh1aW50MzJfdCBmYWNlLCB1aW50MzJfdCBtYXNrKQogICAgIHsKLSAgICAgICAgYXNz
ZXJ0SXNDdXJyZW50KG1fc3RyZWFtVGhyZWFkKTsKKyAgICAgICAgYXNzZXJ0SXNDdXJyZW50KHdv
cmtRdWV1ZSgpKTsKICAgICAgICAgbV9jb250ZXh0LT5zdGVuY2lsTWFza1NlcGFyYXRlKGZhY2Us
IG1hc2spOwogICAgIH0KICAgICB2b2lkIHN0ZW5jaWxPcCh1aW50MzJfdCBmYWlsLCB1aW50MzJf
dCB6ZmFpbCwgdWludDMyX3QgenBhc3MpCiAgICAgewotICAgICAgICBhc3NlcnRJc0N1cnJlbnQo
bV9zdHJlYW1UaHJlYWQpOworICAgICAgICBhc3NlcnRJc0N1cnJlbnQod29ya1F1ZXVlKCkpOwog
ICAgICAgICBtX2NvbnRleHQtPnN0ZW5jaWxPcChmYWlsLCB6ZmFpbCwgenBhc3MpOwogICAgIH0K
ICAgICB2b2lkIHN0ZW5jaWxPcFNlcGFyYXRlKHVpbnQzMl90IGZhY2UsIHVpbnQzMl90IGZhaWws
IHVpbnQzMl90IHpmYWlsLCB1aW50MzJfdCB6cGFzcykKICAgICB7Ci0gICAgICAgIGFzc2VydElz
Q3VycmVudChtX3N0cmVhbVRocmVhZCk7CisgICAgICAgIGFzc2VydElzQ3VycmVudCh3b3JrUXVl
dWUoKSk7CiAgICAgICAgIG1fY29udGV4dC0+c3RlbmNpbE9wU2VwYXJhdGUoZmFjZSwgZmFpbCwg
emZhaWwsIHpwYXNzKTsKICAgICB9CiAgICAgdm9pZCB0ZXhQYXJhbWV0ZXJmKHVpbnQzMl90IHRh
cmdldCwgdWludDMyX3QgcG5hbWUsIGZsb2F0IHBhcmFtKQogICAgIHsKLSAgICAgICAgYXNzZXJ0
SXNDdXJyZW50KG1fc3RyZWFtVGhyZWFkKTsKKyAgICAgICAgYXNzZXJ0SXNDdXJyZW50KHdvcmtR
dWV1ZSgpKTsKICAgICAgICAgbV9jb250ZXh0LT50ZXhQYXJhbWV0ZXJmKHRhcmdldCwgcG5hbWUs
IHBhcmFtKTsKICAgICB9CiAgICAgdm9pZCB0ZXhQYXJhbWV0ZXJpKHVpbnQzMl90IHRhcmdldCwg
dWludDMyX3QgcG5hbWUsIGludDMyX3QgcGFyYW0pCiAgICAgewotICAgICAgICBhc3NlcnRJc0N1
cnJlbnQobV9zdHJlYW1UaHJlYWQpOworICAgICAgICBhc3NlcnRJc0N1cnJlbnQod29ya1F1ZXVl
KCkpOwogICAgICAgICBtX2NvbnRleHQtPnRleFBhcmFtZXRlcmkodGFyZ2V0LCBwbmFtZSwgcGFy
YW0pOwogICAgIH0KICAgICB2b2lkIHVuaWZvcm0xZihpbnQzMl90IGxvY2F0aW9uLCBmbG9hdCB4
KQogICAgIHsKLSAgICAgICAgYXNzZXJ0SXNDdXJyZW50KG1fc3RyZWFtVGhyZWFkKTsKKyAgICAg
ICAgYXNzZXJ0SXNDdXJyZW50KHdvcmtRdWV1ZSgpKTsKICAgICAgICAgbV9jb250ZXh0LT51bmlm
b3JtMWYobG9jYXRpb24sIHgpOwogICAgIH0KICAgICB2b2lkIHVuaWZvcm0xZnYoaW50MzJfdCBs
b2NhdGlvbiwgSVBDOjpBcnJheVJlZmVyZW5jZTxmbG9hdD4mJiB2KQogICAgIHsKLSAgICAgICAg
YXNzZXJ0SXNDdXJyZW50KG1fc3RyZWFtVGhyZWFkKTsKKyAgICAgICAgYXNzZXJ0SXNDdXJyZW50
KHdvcmtRdWV1ZSgpKTsKICAgICAgICAgbV9jb250ZXh0LT51bmlmb3JtMWZ2KGxvY2F0aW9uLCBt
YWtlR0NHTFNwYW4ocmVpbnRlcnByZXRfY2FzdDxjb25zdCBHQ0dMZmxvYXQqPih2LmRhdGEoKSks
IHYuc2l6ZSgpKSk7CiAgICAgfQogICAgIHZvaWQgdW5pZm9ybTFpKGludDMyX3QgbG9jYXRpb24s
IGludDMyX3QgeCkKICAgICB7Ci0gICAgICAgIGFzc2VydElzQ3VycmVudChtX3N0cmVhbVRocmVh
ZCk7CisgICAgICAgIGFzc2VydElzQ3VycmVudCh3b3JrUXVldWUoKSk7CiAgICAgICAgIG1fY29u
dGV4dC0+dW5pZm9ybTFpKGxvY2F0aW9uLCB4KTsKICAgICB9CiAgICAgdm9pZCB1bmlmb3JtMWl2
KGludDMyX3QgbG9jYXRpb24sIElQQzo6QXJyYXlSZWZlcmVuY2U8aW50MzJfdD4mJiB2KQogICAg
IHsKLSAgICAgICAgYXNzZXJ0SXNDdXJyZW50KG1fc3RyZWFtVGhyZWFkKTsKKyAgICAgICAgYXNz
ZXJ0SXNDdXJyZW50KHdvcmtRdWV1ZSgpKTsKICAgICAgICAgbV9jb250ZXh0LT51bmlmb3JtMWl2
KGxvY2F0aW9uLCBtYWtlR0NHTFNwYW4ocmVpbnRlcnByZXRfY2FzdDxjb25zdCBHQ0dMaW50Kj4o
di5kYXRhKCkpLCB2LnNpemUoKSkpOwogICAgIH0KICAgICB2b2lkIHVuaWZvcm0yZihpbnQzMl90
IGxvY2F0aW9uLCBmbG9hdCB4LCBmbG9hdCB5KQogICAgIHsKLSAgICAgICAgYXNzZXJ0SXNDdXJy
ZW50KG1fc3RyZWFtVGhyZWFkKTsKKyAgICAgICAgYXNzZXJ0SXNDdXJyZW50KHdvcmtRdWV1ZSgp
KTsKICAgICAgICAgbV9jb250ZXh0LT51bmlmb3JtMmYobG9jYXRpb24sIHgsIHkpOwogICAgIH0K
ICAgICB2b2lkIHVuaWZvcm0yZnYoaW50MzJfdCBsb2NhdGlvbiwgSVBDOjpBcnJheVJlZmVyZW5j
ZTxmbG9hdD4mJiB2KQogICAgIHsKLSAgICAgICAgYXNzZXJ0SXNDdXJyZW50KG1fc3RyZWFtVGhy
ZWFkKTsKKyAgICAgICAgYXNzZXJ0SXNDdXJyZW50KHdvcmtRdWV1ZSgpKTsKICAgICAgICAgbV9j
b250ZXh0LT51bmlmb3JtMmZ2KGxvY2F0aW9uLCBtYWtlR0NHTFNwYW4ocmVpbnRlcnByZXRfY2Fz
dDxjb25zdCBHQ0dMZmxvYXQqPih2LmRhdGEoKSksIHYuc2l6ZSgpKSk7CiAgICAgfQogICAgIHZv
aWQgdW5pZm9ybTJpKGludDMyX3QgbG9jYXRpb24sIGludDMyX3QgeCwgaW50MzJfdCB5KQogICAg
IHsKLSAgICAgICAgYXNzZXJ0SXNDdXJyZW50KG1fc3RyZWFtVGhyZWFkKTsKKyAgICAgICAgYXNz
ZXJ0SXNDdXJyZW50KHdvcmtRdWV1ZSgpKTsKICAgICAgICAgbV9jb250ZXh0LT51bmlmb3JtMmko
bG9jYXRpb24sIHgsIHkpOwogICAgIH0KICAgICB2b2lkIHVuaWZvcm0yaXYoaW50MzJfdCBsb2Nh
dGlvbiwgSVBDOjpBcnJheVJlZmVyZW5jZTxpbnQzMl90PiYmIHYpCiAgICAgewotICAgICAgICBh
c3NlcnRJc0N1cnJlbnQobV9zdHJlYW1UaHJlYWQpOworICAgICAgICBhc3NlcnRJc0N1cnJlbnQo
d29ya1F1ZXVlKCkpOwogICAgICAgICBtX2NvbnRleHQtPnVuaWZvcm0yaXYobG9jYXRpb24sIG1h
a2VHQ0dMU3BhbihyZWludGVycHJldF9jYXN0PGNvbnN0IEdDR0xpbnQqPih2LmRhdGEoKSksIHYu
c2l6ZSgpKSk7CiAgICAgfQogICAgIHZvaWQgdW5pZm9ybTNmKGludDMyX3QgbG9jYXRpb24sIGZs
b2F0IHgsIGZsb2F0IHksIGZsb2F0IHopCiAgICAgewotICAgICAgICBhc3NlcnRJc0N1cnJlbnQo
bV9zdHJlYW1UaHJlYWQpOworICAgICAgICBhc3NlcnRJc0N1cnJlbnQod29ya1F1ZXVlKCkpOwog
ICAgICAgICBtX2NvbnRleHQtPnVuaWZvcm0zZihsb2NhdGlvbiwgeCwgeSwgeik7CiAgICAgfQog
ICAgIHZvaWQgdW5pZm9ybTNmdihpbnQzMl90IGxvY2F0aW9uLCBJUEM6OkFycmF5UmVmZXJlbmNl
PGZsb2F0PiYmIHYpCiAgICAgewotICAgICAgICBhc3NlcnRJc0N1cnJlbnQobV9zdHJlYW1UaHJl
YWQpOworICAgICAgICBhc3NlcnRJc0N1cnJlbnQod29ya1F1ZXVlKCkpOwogICAgICAgICBtX2Nv
bnRleHQtPnVuaWZvcm0zZnYobG9jYXRpb24sIG1ha2VHQ0dMU3BhbihyZWludGVycHJldF9jYXN0
PGNvbnN0IEdDR0xmbG9hdCo+KHYuZGF0YSgpKSwgdi5zaXplKCkpKTsKICAgICB9CiAgICAgdm9p
ZCB1bmlmb3JtM2koaW50MzJfdCBsb2NhdGlvbiwgaW50MzJfdCB4LCBpbnQzMl90IHksIGludDMy
X3QgeikKICAgICB7Ci0gICAgICAgIGFzc2VydElzQ3VycmVudChtX3N0cmVhbVRocmVhZCk7Cisg
ICAgICAgIGFzc2VydElzQ3VycmVudCh3b3JrUXVldWUoKSk7CiAgICAgICAgIG1fY29udGV4dC0+
dW5pZm9ybTNpKGxvY2F0aW9uLCB4LCB5LCB6KTsKICAgICB9CiAgICAgdm9pZCB1bmlmb3JtM2l2
KGludDMyX3QgbG9jYXRpb24sIElQQzo6QXJyYXlSZWZlcmVuY2U8aW50MzJfdD4mJiB2KQogICAg
IHsKLSAgICAgICAgYXNzZXJ0SXNDdXJyZW50KG1fc3RyZWFtVGhyZWFkKTsKKyAgICAgICAgYXNz
ZXJ0SXNDdXJyZW50KHdvcmtRdWV1ZSgpKTsKICAgICAgICAgbV9jb250ZXh0LT51bmlmb3JtM2l2
KGxvY2F0aW9uLCBtYWtlR0NHTFNwYW4ocmVpbnRlcnByZXRfY2FzdDxjb25zdCBHQ0dMaW50Kj4o
di5kYXRhKCkpLCB2LnNpemUoKSkpOwogICAgIH0KICAgICB2b2lkIHVuaWZvcm00ZihpbnQzMl90
IGxvY2F0aW9uLCBmbG9hdCB4LCBmbG9hdCB5LCBmbG9hdCB6LCBmbG9hdCB3KQogICAgIHsKLSAg
ICAgICAgYXNzZXJ0SXNDdXJyZW50KG1fc3RyZWFtVGhyZWFkKTsKKyAgICAgICAgYXNzZXJ0SXND
dXJyZW50KHdvcmtRdWV1ZSgpKTsKICAgICAgICAgbV9jb250ZXh0LT51bmlmb3JtNGYobG9jYXRp
b24sIHgsIHksIHosIHcpOwogICAgIH0KICAgICB2b2lkIHVuaWZvcm00ZnYoaW50MzJfdCBsb2Nh
dGlvbiwgSVBDOjpBcnJheVJlZmVyZW5jZTxmbG9hdD4mJiB2KQogICAgIHsKLSAgICAgICAgYXNz
ZXJ0SXNDdXJyZW50KG1fc3RyZWFtVGhyZWFkKTsKKyAgICAgICAgYXNzZXJ0SXNDdXJyZW50KHdv
cmtRdWV1ZSgpKTsKICAgICAgICAgbV9jb250ZXh0LT51bmlmb3JtNGZ2KGxvY2F0aW9uLCBtYWtl
R0NHTFNwYW4ocmVpbnRlcnByZXRfY2FzdDxjb25zdCBHQ0dMZmxvYXQqPih2LmRhdGEoKSksIHYu
c2l6ZSgpKSk7CiAgICAgfQogICAgIHZvaWQgdW5pZm9ybTRpKGludDMyX3QgbG9jYXRpb24sIGlu
dDMyX3QgeCwgaW50MzJfdCB5LCBpbnQzMl90IHosIGludDMyX3QgdykKICAgICB7Ci0gICAgICAg
IGFzc2VydElzQ3VycmVudChtX3N0cmVhbVRocmVhZCk7CisgICAgICAgIGFzc2VydElzQ3VycmVu
dCh3b3JrUXVldWUoKSk7CiAgICAgICAgIG1fY29udGV4dC0+dW5pZm9ybTRpKGxvY2F0aW9uLCB4
LCB5LCB6LCB3KTsKICAgICB9CiAgICAgdm9pZCB1bmlmb3JtNGl2KGludDMyX3QgbG9jYXRpb24s
IElQQzo6QXJyYXlSZWZlcmVuY2U8aW50MzJfdD4mJiB2KQogICAgIHsKLSAgICAgICAgYXNzZXJ0
SXNDdXJyZW50KG1fc3RyZWFtVGhyZWFkKTsKKyAgICAgICAgYXNzZXJ0SXNDdXJyZW50KHdvcmtR
dWV1ZSgpKTsKICAgICAgICAgbV9jb250ZXh0LT51bmlmb3JtNGl2KGxvY2F0aW9uLCBtYWtlR0NH
TFNwYW4ocmVpbnRlcnByZXRfY2FzdDxjb25zdCBHQ0dMaW50Kj4odi5kYXRhKCkpLCB2LnNpemUo
KSkpOwogICAgIH0KICAgICB2b2lkIHVuaWZvcm1NYXRyaXgyZnYoaW50MzJfdCBsb2NhdGlvbiwg
Ym9vbCB0cmFuc3Bvc2UsIElQQzo6QXJyYXlSZWZlcmVuY2U8ZmxvYXQ+JiYgdmFsdWUpCiAgICAg
ewotICAgICAgICBhc3NlcnRJc0N1cnJlbnQobV9zdHJlYW1UaHJlYWQpOworICAgICAgICBhc3Nl
cnRJc0N1cnJlbnQod29ya1F1ZXVlKCkpOwogICAgICAgICBtX2NvbnRleHQtPnVuaWZvcm1NYXRy
aXgyZnYobG9jYXRpb24sIHN0YXRpY19jYXN0PEdDR0xib29sZWFuPih0cmFuc3Bvc2UpLCBtYWtl
R0NHTFNwYW4ocmVpbnRlcnByZXRfY2FzdDxjb25zdCBHQ0dMZmxvYXQqPih2YWx1ZS5kYXRhKCkp
LCB2YWx1ZS5zaXplKCkpKTsKICAgICB9CiAgICAgdm9pZCB1bmlmb3JtTWF0cml4M2Z2KGludDMy
X3QgbG9jYXRpb24sIGJvb2wgdHJhbnNwb3NlLCBJUEM6OkFycmF5UmVmZXJlbmNlPGZsb2F0PiYm
IHZhbHVlKQogICAgIHsKLSAgICAgICAgYXNzZXJ0SXNDdXJyZW50KG1fc3RyZWFtVGhyZWFkKTsK
KyAgICAgICAgYXNzZXJ0SXNDdXJyZW50KHdvcmtRdWV1ZSgpKTsKICAgICAgICAgbV9jb250ZXh0
LT51bmlmb3JtTWF0cml4M2Z2KGxvY2F0aW9uLCBzdGF0aWNfY2FzdDxHQ0dMYm9vbGVhbj4odHJh
bnNwb3NlKSwgbWFrZUdDR0xTcGFuKHJlaW50ZXJwcmV0X2Nhc3Q8Y29uc3QgR0NHTGZsb2F0Kj4o
dmFsdWUuZGF0YSgpKSwgdmFsdWUuc2l6ZSgpKSk7CiAgICAgfQogICAgIHZvaWQgdW5pZm9ybU1h
dHJpeDRmdihpbnQzMl90IGxvY2F0aW9uLCBib29sIHRyYW5zcG9zZSwgSVBDOjpBcnJheVJlZmVy
ZW5jZTxmbG9hdD4mJiB2YWx1ZSkKICAgICB7Ci0gICAgICAgIGFzc2VydElzQ3VycmVudChtX3N0
cmVhbVRocmVhZCk7CisgICAgICAgIGFzc2VydElzQ3VycmVudCh3b3JrUXVldWUoKSk7CiAgICAg
ICAgIG1fY29udGV4dC0+dW5pZm9ybU1hdHJpeDRmdihsb2NhdGlvbiwgc3RhdGljX2Nhc3Q8R0NH
TGJvb2xlYW4+KHRyYW5zcG9zZSksIG1ha2VHQ0dMU3BhbihyZWludGVycHJldF9jYXN0PGNvbnN0
IEdDR0xmbG9hdCo+KHZhbHVlLmRhdGEoKSksIHZhbHVlLnNpemUoKSkpOwogICAgIH0KICAgICB2
b2lkIHVzZVByb2dyYW0odWludDMyX3QgYXJnMCkKICAgICB7Ci0gICAgICAgIGFzc2VydElzQ3Vy
cmVudChtX3N0cmVhbVRocmVhZCk7CisgICAgICAgIGFzc2VydElzQ3VycmVudCh3b3JrUXVldWUo
KSk7CiAgICAgICAgIG1fY29udGV4dC0+dXNlUHJvZ3JhbShhcmcwKTsKICAgICB9CiAgICAgdm9p
ZCB2YWxpZGF0ZVByb2dyYW0odWludDMyX3QgYXJnMCkKICAgICB7Ci0gICAgICAgIGFzc2VydElz
Q3VycmVudChtX3N0cmVhbVRocmVhZCk7CisgICAgICAgIGFzc2VydElzQ3VycmVudCh3b3JrUXVl
dWUoKSk7CiAgICAgICAgIG1fY29udGV4dC0+dmFsaWRhdGVQcm9ncmFtKGFyZzApOwogICAgIH0K
ICAgICB2b2lkIHZlcnRleEF0dHJpYjFmKHVpbnQzMl90IGluZGV4LCBmbG9hdCB4KQogICAgIHsK
LSAgICAgICAgYXNzZXJ0SXNDdXJyZW50KG1fc3RyZWFtVGhyZWFkKTsKKyAgICAgICAgYXNzZXJ0
SXNDdXJyZW50KHdvcmtRdWV1ZSgpKTsKICAgICAgICAgbV9jb250ZXh0LT52ZXJ0ZXhBdHRyaWIx
ZihpbmRleCwgeCk7CiAgICAgfQogICAgIHZvaWQgdmVydGV4QXR0cmliMWZ2KHVpbnQzMl90IGlu
ZGV4LCBJUEM6OkFycmF5UmVmZXJlbmNlPGZsb2F0LCAxPiYmIHZhbHVlcykKICAgICB7Ci0gICAg
ICAgIGFzc2VydElzQ3VycmVudChtX3N0cmVhbVRocmVhZCk7CisgICAgICAgIGFzc2VydElzQ3Vy
cmVudCh3b3JrUXVldWUoKSk7CiAgICAgICAgIG1fY29udGV4dC0+dmVydGV4QXR0cmliMWZ2KGlu
ZGV4LCBtYWtlR0NHTFNwYW48MT4ocmVpbnRlcnByZXRfY2FzdDxjb25zdCBHQ0dMZmxvYXQqPih2
YWx1ZXMuZGF0YSgpKSkpOwogICAgIH0KICAgICB2b2lkIHZlcnRleEF0dHJpYjJmKHVpbnQzMl90
IGluZGV4LCBmbG9hdCB4LCBmbG9hdCB5KQogICAgIHsKLSAgICAgICAgYXNzZXJ0SXNDdXJyZW50
KG1fc3RyZWFtVGhyZWFkKTsKKyAgICAgICAgYXNzZXJ0SXNDdXJyZW50KHdvcmtRdWV1ZSgpKTsK
ICAgICAgICAgbV9jb250ZXh0LT52ZXJ0ZXhBdHRyaWIyZihpbmRleCwgeCwgeSk7CiAgICAgfQog
ICAgIHZvaWQgdmVydGV4QXR0cmliMmZ2KHVpbnQzMl90IGluZGV4LCBJUEM6OkFycmF5UmVmZXJl
bmNlPGZsb2F0LCAyPiYmIHZhbHVlcykKICAgICB7Ci0gICAgICAgIGFzc2VydElzQ3VycmVudCht
X3N0cmVhbVRocmVhZCk7CisgICAgICAgIGFzc2VydElzQ3VycmVudCh3b3JrUXVldWUoKSk7CiAg
ICAgICAgIG1fY29udGV4dC0+dmVydGV4QXR0cmliMmZ2KGluZGV4LCBtYWtlR0NHTFNwYW48Mj4o
cmVpbnRlcnByZXRfY2FzdDxjb25zdCBHQ0dMZmxvYXQqPih2YWx1ZXMuZGF0YSgpKSkpOwogICAg
IH0KICAgICB2b2lkIHZlcnRleEF0dHJpYjNmKHVpbnQzMl90IGluZGV4LCBmbG9hdCB4LCBmbG9h
dCB5LCBmbG9hdCB6KQogICAgIHsKLSAgICAgICAgYXNzZXJ0SXNDdXJyZW50KG1fc3RyZWFtVGhy
ZWFkKTsKKyAgICAgICAgYXNzZXJ0SXNDdXJyZW50KHdvcmtRdWV1ZSgpKTsKICAgICAgICAgbV9j
b250ZXh0LT52ZXJ0ZXhBdHRyaWIzZihpbmRleCwgeCwgeSwgeik7CiAgICAgfQogICAgIHZvaWQg
dmVydGV4QXR0cmliM2Z2KHVpbnQzMl90IGluZGV4LCBJUEM6OkFycmF5UmVmZXJlbmNlPGZsb2F0
LCAzPiYmIHZhbHVlcykKICAgICB7Ci0gICAgICAgIGFzc2VydElzQ3VycmVudChtX3N0cmVhbVRo
cmVhZCk7CisgICAgICAgIGFzc2VydElzQ3VycmVudCh3b3JrUXVldWUoKSk7CiAgICAgICAgIG1f
Y29udGV4dC0+dmVydGV4QXR0cmliM2Z2KGluZGV4LCBtYWtlR0NHTFNwYW48Mz4ocmVpbnRlcnBy
ZXRfY2FzdDxjb25zdCBHQ0dMZmxvYXQqPih2YWx1ZXMuZGF0YSgpKSkpOwogICAgIH0KICAgICB2
b2lkIHZlcnRleEF0dHJpYjRmKHVpbnQzMl90IGluZGV4LCBmbG9hdCB4LCBmbG9hdCB5LCBmbG9h
dCB6LCBmbG9hdCB3KQogICAgIHsKLSAgICAgICAgYXNzZXJ0SXNDdXJyZW50KG1fc3RyZWFtVGhy
ZWFkKTsKKyAgICAgICAgYXNzZXJ0SXNDdXJyZW50KHdvcmtRdWV1ZSgpKTsKICAgICAgICAgbV9j
b250ZXh0LT52ZXJ0ZXhBdHRyaWI0ZihpbmRleCwgeCwgeSwgeiwgdyk7CiAgICAgfQogICAgIHZv
aWQgdmVydGV4QXR0cmliNGZ2KHVpbnQzMl90IGluZGV4LCBJUEM6OkFycmF5UmVmZXJlbmNlPGZs
b2F0LCA0PiYmIHZhbHVlcykKICAgICB7Ci0gICAgICAgIGFzc2VydElzQ3VycmVudChtX3N0cmVh
bVRocmVhZCk7CisgICAgICAgIGFzc2VydElzQ3VycmVudCh3b3JrUXVldWUoKSk7CiAgICAgICAg
IG1fY29udGV4dC0+dmVydGV4QXR0cmliNGZ2KGluZGV4LCBtYWtlR0NHTFNwYW48ND4ocmVpbnRl
cnByZXRfY2FzdDxjb25zdCBHQ0dMZmxvYXQqPih2YWx1ZXMuZGF0YSgpKSkpOwogICAgIH0KICAg
ICB2b2lkIHZlcnRleEF0dHJpYlBvaW50ZXIodWludDMyX3QgaW5kZXgsIGludDMyX3Qgc2l6ZSwg
dWludDMyX3QgdHlwZSwgYm9vbCBub3JtYWxpemVkLCBpbnQzMl90IHN0cmlkZSwgdWludDY0X3Qg
b2Zmc2V0KQogICAgIHsKLSAgICAgICAgYXNzZXJ0SXNDdXJyZW50KG1fc3RyZWFtVGhyZWFkKTsK
KyAgICAgICAgYXNzZXJ0SXNDdXJyZW50KHdvcmtRdWV1ZSgpKTsKICAgICAgICAgbV9jb250ZXh0
LT52ZXJ0ZXhBdHRyaWJQb2ludGVyKGluZGV4LCBzaXplLCB0eXBlLCBzdGF0aWNfY2FzdDxHQ0dM
Ym9vbGVhbj4obm9ybWFsaXplZCksIHN0cmlkZSwgc3RhdGljX2Nhc3Q8R0NHTGludHB0cj4ob2Zm
c2V0KSk7CiAgICAgfQogICAgIHZvaWQgdmlld3BvcnQoaW50MzJfdCB4LCBpbnQzMl90IHksIGlu
dDMyX3Qgd2lkdGgsIGludDMyX3QgaGVpZ2h0KQogICAgIHsKLSAgICAgICAgYXNzZXJ0SXNDdXJy
ZW50KG1fc3RyZWFtVGhyZWFkKTsKKyAgICAgICAgYXNzZXJ0SXNDdXJyZW50KHdvcmtRdWV1ZSgp
KTsKICAgICAgICAgbV9jb250ZXh0LT52aWV3cG9ydCh4LCB5LCB3aWR0aCwgaGVpZ2h0KTsKICAg
ICB9CiAgICAgdm9pZCBidWZmZXJEYXRhMCh1aW50MzJfdCB0YXJnZXQsIHVpbnQ2NF90IGFyZzEs
IHVpbnQzMl90IHVzYWdlKQogICAgIHsKLSAgICAgICAgYXNzZXJ0SXNDdXJyZW50KG1fc3RyZWFt
VGhyZWFkKTsKKyAgICAgICAgYXNzZXJ0SXNDdXJyZW50KHdvcmtRdWV1ZSgpKTsKICAgICAgICAg
bV9jb250ZXh0LT5idWZmZXJEYXRhKHRhcmdldCwgc3RhdGljX2Nhc3Q8R0NHTHNpemVpcHRyPihh
cmcxKSwgdXNhZ2UpOwogICAgIH0KICAgICB2b2lkIGJ1ZmZlckRhdGExKHVpbnQzMl90IHRhcmdl
dCwgSVBDOjpBcnJheVJlZmVyZW5jZTx1aW50OF90PiYmIGRhdGEsIHVpbnQzMl90IHVzYWdlKQog
ICAgIHsKLSAgICAgICAgYXNzZXJ0SXNDdXJyZW50KG1fc3RyZWFtVGhyZWFkKTsKKyAgICAgICAg
YXNzZXJ0SXNDdXJyZW50KHdvcmtRdWV1ZSgpKTsKICAgICAgICAgbV9jb250ZXh0LT5idWZmZXJE
YXRhKHRhcmdldCwgbWFrZUdDR0xTcGFuKHJlaW50ZXJwcmV0X2Nhc3Q8Y29uc3QgR0NHTHZvaWQq
PihkYXRhLmRhdGEoKSksIGRhdGEuc2l6ZSgpKSwgdXNhZ2UpOwogICAgIH0KICAgICB2b2lkIGJ1
ZmZlclN1YkRhdGEodWludDMyX3QgdGFyZ2V0LCB1aW50NjRfdCBvZmZzZXQsIElQQzo6QXJyYXlS
ZWZlcmVuY2U8dWludDhfdD4mJiBkYXRhKQogICAgIHsKLSAgICAgICAgYXNzZXJ0SXNDdXJyZW50
KG1fc3RyZWFtVGhyZWFkKTsKKyAgICAgICAgYXNzZXJ0SXNDdXJyZW50KHdvcmtRdWV1ZSgpKTsK
ICAgICAgICAgbV9jb250ZXh0LT5idWZmZXJTdWJEYXRhKHRhcmdldCwgc3RhdGljX2Nhc3Q8R0NH
TGludHB0cj4ob2Zmc2V0KSwgbWFrZUdDR0xTcGFuKHJlaW50ZXJwcmV0X2Nhc3Q8Y29uc3QgR0NH
THZvaWQqPihkYXRhLmRhdGEoKSksIGRhdGEuc2l6ZSgpKSk7CiAgICAgfQogICAgIHZvaWQgcmVh
ZG5QaXhlbHMwKGludDMyX3QgeCwgaW50MzJfdCB5LCBpbnQzMl90IHdpZHRoLCBpbnQzMl90IGhl
aWdodCwgdWludDMyX3QgZm9ybWF0LCB1aW50MzJfdCB0eXBlLCB1aW50NjRfdCBkYXRhU2l6ZSwg
Q29tcGxldGlvbkhhbmRsZXI8dm9pZChJUEM6OkFycmF5UmVmZXJlbmNlPHVpbnQ4X3Q+KT4mJiBj
b21wbGV0aW9uSGFuZGxlcikKICAgICB7CiAgICAgICAgIFZlY3RvcjxHQ0dMY2hhciwgND4gZGF0
YShzdGF0aWNfY2FzdDxzaXplX3Q+KGRhdGFTaXplKSwgMCk7Ci0gICAgICAgIGFzc2VydElzQ3Vy
cmVudChtX3N0cmVhbVRocmVhZCk7CisgICAgICAgIGFzc2VydElzQ3VycmVudCh3b3JrUXVldWUo
KSk7CiAgICAgICAgIG1fY29udGV4dC0+cmVhZG5QaXhlbHMoeCwgeSwgd2lkdGgsIGhlaWdodCwg
Zm9ybWF0LCB0eXBlLCBkYXRhKTsKICAgICAgICAgY29tcGxldGlvbkhhbmRsZXIoSVBDOjpBcnJh
eVJlZmVyZW5jZTx1aW50OF90PihyZWludGVycHJldF9jYXN0PHVpbnQ4X3QqPihkYXRhLmRhdGEo
KSksIGRhdGEuc2l6ZSgpKSk7CiAgICAgfQogICAgIHZvaWQgcmVhZG5QaXhlbHMxKGludDMyX3Qg
eCwgaW50MzJfdCB5LCBpbnQzMl90IHdpZHRoLCBpbnQzMl90IGhlaWdodCwgdWludDMyX3QgZm9y
bWF0LCB1aW50MzJfdCB0eXBlLCB1aW50NjRfdCBvZmZzZXQpCiAgICAgewotICAgICAgICBhc3Nl
cnRJc0N1cnJlbnQobV9zdHJlYW1UaHJlYWQpOworICAgICAgICBhc3NlcnRJc0N1cnJlbnQod29y
a1F1ZXVlKCkpOwogICAgICAgICBtX2NvbnRleHQtPnJlYWRuUGl4ZWxzKHgsIHksIHdpZHRoLCBo
ZWlnaHQsIGZvcm1hdCwgdHlwZSwgc3RhdGljX2Nhc3Q8R0NHTGludHB0cj4ob2Zmc2V0KSk7CiAg
ICAgfQogICAgIHZvaWQgdGV4SW1hZ2UyRDAodWludDMyX3QgdGFyZ2V0LCBpbnQzMl90IGxldmVs
LCB1aW50MzJfdCBpbnRlcm5hbGZvcm1hdCwgaW50MzJfdCB3aWR0aCwgaW50MzJfdCBoZWlnaHQs
IGludDMyX3QgYm9yZGVyLCB1aW50MzJfdCBmb3JtYXQsIHVpbnQzMl90IHR5cGUsIElQQzo6QXJy
YXlSZWZlcmVuY2U8dWludDhfdD4mJiBwaXhlbHMpCiAgICAgewotICAgICAgICBhc3NlcnRJc0N1
cnJlbnQobV9zdHJlYW1UaHJlYWQpOworICAgICAgICBhc3NlcnRJc0N1cnJlbnQod29ya1F1ZXVl
KCkpOwogICAgICAgICBtX2NvbnRleHQtPnRleEltYWdlMkQodGFyZ2V0LCBsZXZlbCwgaW50ZXJu
YWxmb3JtYXQsIHdpZHRoLCBoZWlnaHQsIGJvcmRlciwgZm9ybWF0LCB0eXBlLCBtYWtlR0NHTFNw
YW4ocmVpbnRlcnByZXRfY2FzdDxjb25zdCBHQ0dMdm9pZCo+KHBpeGVscy5kYXRhKCkpLCBwaXhl
bHMuc2l6ZSgpKSk7CiAgICAgfQogICAgIHZvaWQgdGV4SW1hZ2UyRDEodWludDMyX3QgdGFyZ2V0
LCBpbnQzMl90IGxldmVsLCB1aW50MzJfdCBpbnRlcm5hbGZvcm1hdCwgaW50MzJfdCB3aWR0aCwg
aW50MzJfdCBoZWlnaHQsIGludDMyX3QgYm9yZGVyLCB1aW50MzJfdCBmb3JtYXQsIHVpbnQzMl90
IHR5cGUsIHVpbnQ2NF90IG9mZnNldCkKICAgICB7Ci0gICAgICAgIGFzc2VydElzQ3VycmVudCht
X3N0cmVhbVRocmVhZCk7CisgICAgICAgIGFzc2VydElzQ3VycmVudCh3b3JrUXVldWUoKSk7CiAg
ICAgICAgIG1fY29udGV4dC0+dGV4SW1hZ2UyRCh0YXJnZXQsIGxldmVsLCBpbnRlcm5hbGZvcm1h
dCwgd2lkdGgsIGhlaWdodCwgYm9yZGVyLCBmb3JtYXQsIHR5cGUsIHN0YXRpY19jYXN0PEdDR0xp
bnRwdHI+KG9mZnNldCkpOwogICAgIH0KICAgICB2b2lkIHRleFN1YkltYWdlMkQwKHVpbnQzMl90
IHRhcmdldCwgaW50MzJfdCBsZXZlbCwgaW50MzJfdCB4b2Zmc2V0LCBpbnQzMl90IHlvZmZzZXQs
IGludDMyX3Qgd2lkdGgsIGludDMyX3QgaGVpZ2h0LCB1aW50MzJfdCBmb3JtYXQsIHVpbnQzMl90
IHR5cGUsIElQQzo6QXJyYXlSZWZlcmVuY2U8dWludDhfdD4mJiBwaXhlbHMpCiAgICAgewotICAg
ICAgICBhc3NlcnRJc0N1cnJlbnQobV9zdHJlYW1UaHJlYWQpOworICAgICAgICBhc3NlcnRJc0N1
cnJlbnQod29ya1F1ZXVlKCkpOwogICAgICAgICBtX2NvbnRleHQtPnRleFN1YkltYWdlMkQodGFy
Z2V0LCBsZXZlbCwgeG9mZnNldCwgeW9mZnNldCwgd2lkdGgsIGhlaWdodCwgZm9ybWF0LCB0eXBl
LCBtYWtlR0NHTFNwYW4ocmVpbnRlcnByZXRfY2FzdDxjb25zdCBHQ0dMdm9pZCo+KHBpeGVscy5k
YXRhKCkpLCBwaXhlbHMuc2l6ZSgpKSk7CiAgICAgfQogICAgIHZvaWQgdGV4U3ViSW1hZ2UyRDEo
dWludDMyX3QgdGFyZ2V0LCBpbnQzMl90IGxldmVsLCBpbnQzMl90IHhvZmZzZXQsIGludDMyX3Qg
eW9mZnNldCwgaW50MzJfdCB3aWR0aCwgaW50MzJfdCBoZWlnaHQsIHVpbnQzMl90IGZvcm1hdCwg
dWludDMyX3QgdHlwZSwgdWludDY0X3Qgb2Zmc2V0KQogICAgIHsKLSAgICAgICAgYXNzZXJ0SXND
dXJyZW50KG1fc3RyZWFtVGhyZWFkKTsKKyAgICAgICAgYXNzZXJ0SXNDdXJyZW50KHdvcmtRdWV1
ZSgpKTsKICAgICAgICAgbV9jb250ZXh0LT50ZXhTdWJJbWFnZTJEKHRhcmdldCwgbGV2ZWwsIHhv
ZmZzZXQsIHlvZmZzZXQsIHdpZHRoLCBoZWlnaHQsIGZvcm1hdCwgdHlwZSwgc3RhdGljX2Nhc3Q8
R0NHTGludHB0cj4ob2Zmc2V0KSk7CiAgICAgfQogICAgIHZvaWQgY29tcHJlc3NlZFRleEltYWdl
MkQwKHVpbnQzMl90IHRhcmdldCwgaW50MzJfdCBsZXZlbCwgdWludDMyX3QgaW50ZXJuYWxmb3Jt
YXQsIGludDMyX3Qgd2lkdGgsIGludDMyX3QgaGVpZ2h0LCBpbnQzMl90IGJvcmRlciwgaW50MzJf
dCBpbWFnZVNpemUsIElQQzo6QXJyYXlSZWZlcmVuY2U8dWludDhfdD4mJiBkYXRhKQogICAgIHsK
LSAgICAgICAgYXNzZXJ0SXNDdXJyZW50KG1fc3RyZWFtVGhyZWFkKTsKKyAgICAgICAgYXNzZXJ0
SXNDdXJyZW50KHdvcmtRdWV1ZSgpKTsKICAgICAgICAgbV9jb250ZXh0LT5jb21wcmVzc2VkVGV4
SW1hZ2UyRCh0YXJnZXQsIGxldmVsLCBpbnRlcm5hbGZvcm1hdCwgd2lkdGgsIGhlaWdodCwgYm9y
ZGVyLCBpbWFnZVNpemUsIG1ha2VHQ0dMU3BhbihyZWludGVycHJldF9jYXN0PGNvbnN0IEdDR0x2
b2lkKj4oZGF0YS5kYXRhKCkpLCBkYXRhLnNpemUoKSkpOwogICAgIH0KICAgICB2b2lkIGNvbXBy
ZXNzZWRUZXhJbWFnZTJEMSh1aW50MzJfdCB0YXJnZXQsIGludDMyX3QgbGV2ZWwsIHVpbnQzMl90
IGludGVybmFsZm9ybWF0LCBpbnQzMl90IHdpZHRoLCBpbnQzMl90IGhlaWdodCwgaW50MzJfdCBi
b3JkZXIsIGludDMyX3QgaW1hZ2VTaXplLCB1aW50NjRfdCBvZmZzZXQpCiAgICAgewotICAgICAg
ICBhc3NlcnRJc0N1cnJlbnQobV9zdHJlYW1UaHJlYWQpOworICAgICAgICBhc3NlcnRJc0N1cnJl
bnQod29ya1F1ZXVlKCkpOwogICAgICAgICBtX2NvbnRleHQtPmNvbXByZXNzZWRUZXhJbWFnZTJE
KHRhcmdldCwgbGV2ZWwsIGludGVybmFsZm9ybWF0LCB3aWR0aCwgaGVpZ2h0LCBib3JkZXIsIGlt
YWdlU2l6ZSwgc3RhdGljX2Nhc3Q8R0NHTGludHB0cj4ob2Zmc2V0KSk7CiAgICAgfQogICAgIHZv
aWQgY29tcHJlc3NlZFRleFN1YkltYWdlMkQwKHVpbnQzMl90IHRhcmdldCwgaW50MzJfdCBsZXZl
bCwgaW50MzJfdCB4b2Zmc2V0LCBpbnQzMl90IHlvZmZzZXQsIGludDMyX3Qgd2lkdGgsIGludDMy
X3QgaGVpZ2h0LCB1aW50MzJfdCBmb3JtYXQsIGludDMyX3QgaW1hZ2VTaXplLCBJUEM6OkFycmF5
UmVmZXJlbmNlPHVpbnQ4X3Q+JiYgZGF0YSkKICAgICB7Ci0gICAgICAgIGFzc2VydElzQ3VycmVu
dChtX3N0cmVhbVRocmVhZCk7CisgICAgICAgIGFzc2VydElzQ3VycmVudCh3b3JrUXVldWUoKSk7
CiAgICAgICAgIG1fY29udGV4dC0+Y29tcHJlc3NlZFRleFN1YkltYWdlMkQodGFyZ2V0LCBsZXZl
bCwgeG9mZnNldCwgeW9mZnNldCwgd2lkdGgsIGhlaWdodCwgZm9ybWF0LCBpbWFnZVNpemUsIG1h
a2VHQ0dMU3BhbihyZWludGVycHJldF9jYXN0PGNvbnN0IEdDR0x2b2lkKj4oZGF0YS5kYXRhKCkp
LCBkYXRhLnNpemUoKSkpOwogICAgIH0KICAgICB2b2lkIGNvbXByZXNzZWRUZXhTdWJJbWFnZTJE
MSh1aW50MzJfdCB0YXJnZXQsIGludDMyX3QgbGV2ZWwsIGludDMyX3QgeG9mZnNldCwgaW50MzJf
dCB5b2Zmc2V0LCBpbnQzMl90IHdpZHRoLCBpbnQzMl90IGhlaWdodCwgdWludDMyX3QgZm9ybWF0
LCBpbnQzMl90IGltYWdlU2l6ZSwgdWludDY0X3Qgb2Zmc2V0KQogICAgIHsKLSAgICAgICAgYXNz
ZXJ0SXNDdXJyZW50KG1fc3RyZWFtVGhyZWFkKTsKKyAgICAgICAgYXNzZXJ0SXNDdXJyZW50KHdv
cmtRdWV1ZSgpKTsKICAgICAgICAgbV9jb250ZXh0LT5jb21wcmVzc2VkVGV4U3ViSW1hZ2UyRCh0
YXJnZXQsIGxldmVsLCB4b2Zmc2V0LCB5b2Zmc2V0LCB3aWR0aCwgaGVpZ2h0LCBmb3JtYXQsIGlt
YWdlU2l6ZSwgc3RhdGljX2Nhc3Q8R0NHTGludHB0cj4ob2Zmc2V0KSk7CiAgICAgfQogICAgIHZv
aWQgZHJhd0FycmF5c0luc3RhbmNlZCh1aW50MzJfdCBtb2RlLCBpbnQzMl90IGZpcnN0LCBpbnQz
Ml90IGNvdW50LCBpbnQzMl90IHByaW1jb3VudCkKICAgICB7Ci0gICAgICAgIGFzc2VydElzQ3Vy
cmVudChtX3N0cmVhbVRocmVhZCk7CisgICAgICAgIGFzc2VydElzQ3VycmVudCh3b3JrUXVldWUo
KSk7CiAgICAgICAgIG1fY29udGV4dC0+ZHJhd0FycmF5c0luc3RhbmNlZChtb2RlLCBmaXJzdCwg
Y291bnQsIHByaW1jb3VudCk7CiAgICAgfQogICAgIHZvaWQgZHJhd0VsZW1lbnRzSW5zdGFuY2Vk
KHVpbnQzMl90IG1vZGUsIGludDMyX3QgY291bnQsIHVpbnQzMl90IHR5cGUsIHVpbnQ2NF90IG9m
ZnNldCwgaW50MzJfdCBwcmltY291bnQpCiAgICAgewotICAgICAgICBhc3NlcnRJc0N1cnJlbnQo
bV9zdHJlYW1UaHJlYWQpOworICAgICAgICBhc3NlcnRJc0N1cnJlbnQod29ya1F1ZXVlKCkpOwog
ICAgICAgICBtX2NvbnRleHQtPmRyYXdFbGVtZW50c0luc3RhbmNlZChtb2RlLCBjb3VudCwgdHlw
ZSwgc3RhdGljX2Nhc3Q8R0NHTGludHB0cj4ob2Zmc2V0KSwgcHJpbWNvdW50KTsKICAgICB9CiAg
ICAgdm9pZCB2ZXJ0ZXhBdHRyaWJEaXZpc29yKHVpbnQzMl90IGluZGV4LCB1aW50MzJfdCBkaXZp
c29yKQogICAgIHsKLSAgICAgICAgYXNzZXJ0SXNDdXJyZW50KG1fc3RyZWFtVGhyZWFkKTsKKyAg
ICAgICAgYXNzZXJ0SXNDdXJyZW50KHdvcmtRdWV1ZSgpKTsKICAgICAgICAgbV9jb250ZXh0LT52
ZXJ0ZXhBdHRyaWJEaXZpc29yKGluZGV4LCBkaXZpc29yKTsKICAgICB9CiAgICAgdm9pZCBjcmVh
dGVWZXJ0ZXhBcnJheShDb21wbGV0aW9uSGFuZGxlcjx2b2lkKHVpbnQzMl90KT4mJiBjb21wbGV0
aW9uSGFuZGxlcikKICAgICB7CiAgICAgICAgIFBsYXRmb3JtR0xPYmplY3QgcmV0dXJuVmFsdWUg
PSB7IH07Ci0gICAgICAgIGFzc2VydElzQ3VycmVudChtX3N0cmVhbVRocmVhZCk7CisgICAgICAg
IGFzc2VydElzQ3VycmVudCh3b3JrUXVldWUoKSk7CiAgICAgICAgIHJldHVyblZhbHVlID0gbV9j
b250ZXh0LT5jcmVhdGVWZXJ0ZXhBcnJheSgpOwogICAgICAgICBjb21wbGV0aW9uSGFuZGxlcihy
ZXR1cm5WYWx1ZSk7CiAgICAgfQogICAgIHZvaWQgZGVsZXRlVmVydGV4QXJyYXkodWludDMyX3Qg
YXJnMCkKICAgICB7Ci0gICAgICAgIGFzc2VydElzQ3VycmVudChtX3N0cmVhbVRocmVhZCk7Cisg
ICAgICAgIGFzc2VydElzQ3VycmVudCh3b3JrUXVldWUoKSk7CiAgICAgICAgIG1fY29udGV4dC0+
ZGVsZXRlVmVydGV4QXJyYXkoYXJnMCk7CiAgICAgfQogICAgIHZvaWQgaXNWZXJ0ZXhBcnJheSh1
aW50MzJfdCBhcmcwLCBDb21wbGV0aW9uSGFuZGxlcjx2b2lkKGJvb2wpPiYmIGNvbXBsZXRpb25I
YW5kbGVyKQogICAgIHsKICAgICAgICAgR0NHTGJvb2xlYW4gcmV0dXJuVmFsdWUgPSB7IH07Ci0g
ICAgICAgIGFzc2VydElzQ3VycmVudChtX3N0cmVhbVRocmVhZCk7CisgICAgICAgIGFzc2VydElz
Q3VycmVudCh3b3JrUXVldWUoKSk7CiAgICAgICAgIHJldHVyblZhbHVlID0gbV9jb250ZXh0LT5p
c1ZlcnRleEFycmF5KGFyZzApOwogICAgICAgICBjb21wbGV0aW9uSGFuZGxlcihzdGF0aWNfY2Fz
dDxib29sPihyZXR1cm5WYWx1ZSkpOwogICAgIH0KICAgICB2b2lkIGJpbmRWZXJ0ZXhBcnJheSh1
aW50MzJfdCBhcmcwKQogICAgIHsKLSAgICAgICAgYXNzZXJ0SXNDdXJyZW50KG1fc3RyZWFtVGhy
ZWFkKTsKKyAgICAgICAgYXNzZXJ0SXNDdXJyZW50KHdvcmtRdWV1ZSgpKTsKICAgICAgICAgbV9j
b250ZXh0LT5iaW5kVmVydGV4QXJyYXkoYXJnMCk7CiAgICAgfQogICAgIHZvaWQgY29weUJ1ZmZl
clN1YkRhdGEodWludDMyX3QgcmVhZFRhcmdldCwgdWludDMyX3Qgd3JpdGVUYXJnZXQsIHVpbnQ2
NF90IHJlYWRPZmZzZXQsIHVpbnQ2NF90IHdyaXRlT2Zmc2V0LCB1aW50NjRfdCBhcmc0KQogICAg
IHsKLSAgICAgICAgYXNzZXJ0SXNDdXJyZW50KG1fc3RyZWFtVGhyZWFkKTsKKyAgICAgICAgYXNz
ZXJ0SXNDdXJyZW50KHdvcmtRdWV1ZSgpKTsKICAgICAgICAgbV9jb250ZXh0LT5jb3B5QnVmZmVy
U3ViRGF0YShyZWFkVGFyZ2V0LCB3cml0ZVRhcmdldCwgc3RhdGljX2Nhc3Q8R0NHTGludHB0cj4o
cmVhZE9mZnNldCksIHN0YXRpY19jYXN0PEdDR0xpbnRwdHI+KHdyaXRlT2Zmc2V0KSwgc3RhdGlj
X2Nhc3Q8R0NHTHNpemVpcHRyPihhcmc0KSk7CiAgICAgfQogICAgIHZvaWQgZ2V0QnVmZmVyU3Vi
RGF0YSh1aW50MzJfdCB0YXJnZXQsIHVpbnQ2NF90IG9mZnNldCwgdWludDY0X3QgZGF0YVNpemUs
IENvbXBsZXRpb25IYW5kbGVyPHZvaWQoSVBDOjpBcnJheVJlZmVyZW5jZTx1aW50OF90Pik+JiYg
Y29tcGxldGlvbkhhbmRsZXIpCiAgICAgewogICAgICAgICBWZWN0b3I8R0NHTGNoYXIsIDQ+IGRh
dGEoc3RhdGljX2Nhc3Q8c2l6ZV90PihkYXRhU2l6ZSksIDApOwotICAgICAgICBhc3NlcnRJc0N1
cnJlbnQobV9zdHJlYW1UaHJlYWQpOworICAgICAgICBhc3NlcnRJc0N1cnJlbnQod29ya1F1ZXVl
KCkpOwogICAgICAgICBtX2NvbnRleHQtPmdldEJ1ZmZlclN1YkRhdGEodGFyZ2V0LCBzdGF0aWNf
Y2FzdDxHQ0dMaW50cHRyPihvZmZzZXQpLCBkYXRhKTsKICAgICAgICAgY29tcGxldGlvbkhhbmRs
ZXIoSVBDOjpBcnJheVJlZmVyZW5jZTx1aW50OF90PihyZWludGVycHJldF9jYXN0PHVpbnQ4X3Qq
PihkYXRhLmRhdGEoKSksIGRhdGEuc2l6ZSgpKSk7CiAgICAgfQogICAgIHZvaWQgYmxpdEZyYW1l
YnVmZmVyKGludDMyX3Qgc3JjWDAsIGludDMyX3Qgc3JjWTAsIGludDMyX3Qgc3JjWDEsIGludDMy
X3Qgc3JjWTEsIGludDMyX3QgZHN0WDAsIGludDMyX3QgZHN0WTAsIGludDMyX3QgZHN0WDEsIGlu
dDMyX3QgZHN0WTEsIHVpbnQzMl90IG1hc2ssIHVpbnQzMl90IGZpbHRlcikKICAgICB7Ci0gICAg
ICAgIGFzc2VydElzQ3VycmVudChtX3N0cmVhbVRocmVhZCk7CisgICAgICAgIGFzc2VydElzQ3Vy
cmVudCh3b3JrUXVldWUoKSk7CiAgICAgICAgIG1fY29udGV4dC0+YmxpdEZyYW1lYnVmZmVyKHNy
Y1gwLCBzcmNZMCwgc3JjWDEsIHNyY1kxLCBkc3RYMCwgZHN0WTAsIGRzdFgxLCBkc3RZMSwgbWFz
aywgZmlsdGVyKTsKICAgICB9CiAgICAgdm9pZCBmcmFtZWJ1ZmZlclRleHR1cmVMYXllcih1aW50
MzJfdCB0YXJnZXQsIHVpbnQzMl90IGF0dGFjaG1lbnQsIHVpbnQzMl90IHRleHR1cmUsIGludDMy
X3QgbGV2ZWwsIGludDMyX3QgbGF5ZXIpCiAgICAgewotICAgICAgICBhc3NlcnRJc0N1cnJlbnQo
bV9zdHJlYW1UaHJlYWQpOworICAgICAgICBhc3NlcnRJc0N1cnJlbnQod29ya1F1ZXVlKCkpOwog
ICAgICAgICBtX2NvbnRleHQtPmZyYW1lYnVmZmVyVGV4dHVyZUxheWVyKHRhcmdldCwgYXR0YWNo
bWVudCwgdGV4dHVyZSwgbGV2ZWwsIGxheWVyKTsKICAgICB9CiAgICAgdm9pZCBpbnZhbGlkYXRl
RnJhbWVidWZmZXIodWludDMyX3QgdGFyZ2V0LCBJUEM6OkFycmF5UmVmZXJlbmNlPHVpbnQzMl90
PiYmIGF0dGFjaG1lbnRzKQogICAgIHsKLSAgICAgICAgYXNzZXJ0SXNDdXJyZW50KG1fc3RyZWFt
VGhyZWFkKTsKKyAgICAgICAgYXNzZXJ0SXNDdXJyZW50KHdvcmtRdWV1ZSgpKTsKICAgICAgICAg
bV9jb250ZXh0LT5pbnZhbGlkYXRlRnJhbWVidWZmZXIodGFyZ2V0LCBtYWtlR0NHTFNwYW4ocmVp
bnRlcnByZXRfY2FzdDxjb25zdCBHQ0dMZW51bSo+KGF0dGFjaG1lbnRzLmRhdGEoKSksIGF0dGFj
aG1lbnRzLnNpemUoKSkpOwogICAgIH0KICAgICB2b2lkIGludmFsaWRhdGVTdWJGcmFtZWJ1ZmZl
cih1aW50MzJfdCB0YXJnZXQsIElQQzo6QXJyYXlSZWZlcmVuY2U8dWludDMyX3Q+JiYgYXR0YWNo
bWVudHMsIGludDMyX3QgeCwgaW50MzJfdCB5LCBpbnQzMl90IHdpZHRoLCBpbnQzMl90IGhlaWdo
dCkKICAgICB7Ci0gICAgICAgIGFzc2VydElzQ3VycmVudChtX3N0cmVhbVRocmVhZCk7CisgICAg
ICAgIGFzc2VydElzQ3VycmVudCh3b3JrUXVldWUoKSk7CiAgICAgICAgIG1fY29udGV4dC0+aW52
YWxpZGF0ZVN1YkZyYW1lYnVmZmVyKHRhcmdldCwgbWFrZUdDR0xTcGFuKHJlaW50ZXJwcmV0X2Nh
c3Q8Y29uc3QgR0NHTGVudW0qPihhdHRhY2htZW50cy5kYXRhKCkpLCBhdHRhY2htZW50cy5zaXpl
KCkpLCB4LCB5LCB3aWR0aCwgaGVpZ2h0KTsKICAgICB9CiAgICAgdm9pZCByZWFkQnVmZmVyKHVp
bnQzMl90IHNyYykKICAgICB7Ci0gICAgICAgIGFzc2VydElzQ3VycmVudChtX3N0cmVhbVRocmVh
ZCk7CisgICAgICAgIGFzc2VydElzQ3VycmVudCh3b3JrUXVldWUoKSk7CiAgICAgICAgIG1fY29u
dGV4dC0+cmVhZEJ1ZmZlcihzcmMpOwogICAgIH0KICAgICB2b2lkIHJlbmRlcmJ1ZmZlclN0b3Jh
Z2VNdWx0aXNhbXBsZSh1aW50MzJfdCB0YXJnZXQsIGludDMyX3Qgc2FtcGxlcywgdWludDMyX3Qg
aW50ZXJuYWxmb3JtYXQsIGludDMyX3Qgd2lkdGgsIGludDMyX3QgaGVpZ2h0KQogICAgIHsKLSAg
ICAgICAgYXNzZXJ0SXNDdXJyZW50KG1fc3RyZWFtVGhyZWFkKTsKKyAgICAgICAgYXNzZXJ0SXND
dXJyZW50KHdvcmtRdWV1ZSgpKTsKICAgICAgICAgbV9jb250ZXh0LT5yZW5kZXJidWZmZXJTdG9y
YWdlTXVsdGlzYW1wbGUodGFyZ2V0LCBzYW1wbGVzLCBpbnRlcm5hbGZvcm1hdCwgd2lkdGgsIGhl
aWdodCk7CiAgICAgfQogICAgIHZvaWQgdGV4U3RvcmFnZTJEKHVpbnQzMl90IHRhcmdldCwgaW50
MzJfdCBsZXZlbHMsIHVpbnQzMl90IGludGVybmFsZm9ybWF0LCBpbnQzMl90IHdpZHRoLCBpbnQz
Ml90IGhlaWdodCkKICAgICB7Ci0gICAgICAgIGFzc2VydElzQ3VycmVudChtX3N0cmVhbVRocmVh
ZCk7CisgICAgICAgIGFzc2VydElzQ3VycmVudCh3b3JrUXVldWUoKSk7CiAgICAgICAgIG1fY29u
dGV4dC0+dGV4U3RvcmFnZTJEKHRhcmdldCwgbGV2ZWxzLCBpbnRlcm5hbGZvcm1hdCwgd2lkdGgs
IGhlaWdodCk7CiAgICAgfQogICAgIHZvaWQgdGV4U3RvcmFnZTNEKHVpbnQzMl90IHRhcmdldCwg
aW50MzJfdCBsZXZlbHMsIHVpbnQzMl90IGludGVybmFsZm9ybWF0LCBpbnQzMl90IHdpZHRoLCBp
bnQzMl90IGhlaWdodCwgaW50MzJfdCBkZXB0aCkKICAgICB7Ci0gICAgICAgIGFzc2VydElzQ3Vy
cmVudChtX3N0cmVhbVRocmVhZCk7CisgICAgICAgIGFzc2VydElzQ3VycmVudCh3b3JrUXVldWUo
KSk7CiAgICAgICAgIG1fY29udGV4dC0+dGV4U3RvcmFnZTNEKHRhcmdldCwgbGV2ZWxzLCBpbnRl
cm5hbGZvcm1hdCwgd2lkdGgsIGhlaWdodCwgZGVwdGgpOwogICAgIH0KICAgICB2b2lkIHRleElt
YWdlM0QwKHVpbnQzMl90IHRhcmdldCwgaW50MzJfdCBsZXZlbCwgaW50MzJfdCBpbnRlcm5hbGZv
cm1hdCwgaW50MzJfdCB3aWR0aCwgaW50MzJfdCBoZWlnaHQsIGludDMyX3QgZGVwdGgsIGludDMy
X3QgYm9yZGVyLCB1aW50MzJfdCBmb3JtYXQsIHVpbnQzMl90IHR5cGUsIElQQzo6QXJyYXlSZWZl
cmVuY2U8dWludDhfdD4mJiBwaXhlbHMpCiAgICAgewotICAgICAgICBhc3NlcnRJc0N1cnJlbnQo
bV9zdHJlYW1UaHJlYWQpOworICAgICAgICBhc3NlcnRJc0N1cnJlbnQod29ya1F1ZXVlKCkpOwog
ICAgICAgICBtX2NvbnRleHQtPnRleEltYWdlM0QodGFyZ2V0LCBsZXZlbCwgaW50ZXJuYWxmb3Jt
YXQsIHdpZHRoLCBoZWlnaHQsIGRlcHRoLCBib3JkZXIsIGZvcm1hdCwgdHlwZSwgbWFrZUdDR0xT
cGFuKHJlaW50ZXJwcmV0X2Nhc3Q8Y29uc3QgR0NHTHZvaWQqPihwaXhlbHMuZGF0YSgpKSwgcGl4
ZWxzLnNpemUoKSkpOwogICAgIH0KICAgICB2b2lkIHRleEltYWdlM0QxKHVpbnQzMl90IHRhcmdl
dCwgaW50MzJfdCBsZXZlbCwgaW50MzJfdCBpbnRlcm5hbGZvcm1hdCwgaW50MzJfdCB3aWR0aCwg
aW50MzJfdCBoZWlnaHQsIGludDMyX3QgZGVwdGgsIGludDMyX3QgYm9yZGVyLCB1aW50MzJfdCBm
b3JtYXQsIHVpbnQzMl90IHR5cGUsIHVpbnQ2NF90IG9mZnNldCkKICAgICB7Ci0gICAgICAgIGFz
c2VydElzQ3VycmVudChtX3N0cmVhbVRocmVhZCk7CisgICAgICAgIGFzc2VydElzQ3VycmVudCh3
b3JrUXVldWUoKSk7CiAgICAgICAgIG1fY29udGV4dC0+dGV4SW1hZ2UzRCh0YXJnZXQsIGxldmVs
LCBpbnRlcm5hbGZvcm1hdCwgd2lkdGgsIGhlaWdodCwgZGVwdGgsIGJvcmRlciwgZm9ybWF0LCB0
eXBlLCBzdGF0aWNfY2FzdDxHQ0dMaW50cHRyPihvZmZzZXQpKTsKICAgICB9CiAgICAgdm9pZCB0
ZXhTdWJJbWFnZTNEMCh1aW50MzJfdCB0YXJnZXQsIGludDMyX3QgbGV2ZWwsIGludDMyX3QgeG9m
ZnNldCwgaW50MzJfdCB5b2Zmc2V0LCBpbnQzMl90IHpvZmZzZXQsIGludDMyX3Qgd2lkdGgsIGlu
dDMyX3QgaGVpZ2h0LCBpbnQzMl90IGRlcHRoLCB1aW50MzJfdCBmb3JtYXQsIHVpbnQzMl90IHR5
cGUsIElQQzo6QXJyYXlSZWZlcmVuY2U8dWludDhfdD4mJiBwaXhlbHMpCiAgICAgewotICAgICAg
ICBhc3NlcnRJc0N1cnJlbnQobV9zdHJlYW1UaHJlYWQpOworICAgICAgICBhc3NlcnRJc0N1cnJl
bnQod29ya1F1ZXVlKCkpOwogICAgICAgICBtX2NvbnRleHQtPnRleFN1YkltYWdlM0QodGFyZ2V0
LCBsZXZlbCwgeG9mZnNldCwgeW9mZnNldCwgem9mZnNldCwgd2lkdGgsIGhlaWdodCwgZGVwdGgs
IGZvcm1hdCwgdHlwZSwgbWFrZUdDR0xTcGFuKHJlaW50ZXJwcmV0X2Nhc3Q8Y29uc3QgR0NHTHZv
aWQqPihwaXhlbHMuZGF0YSgpKSwgcGl4ZWxzLnNpemUoKSkpOwogICAgIH0KICAgICB2b2lkIHRl
eFN1YkltYWdlM0QxKHVpbnQzMl90IHRhcmdldCwgaW50MzJfdCBsZXZlbCwgaW50MzJfdCB4b2Zm
c2V0LCBpbnQzMl90IHlvZmZzZXQsIGludDMyX3Qgem9mZnNldCwgaW50MzJfdCB3aWR0aCwgaW50
MzJfdCBoZWlnaHQsIGludDMyX3QgZGVwdGgsIHVpbnQzMl90IGZvcm1hdCwgdWludDMyX3QgdHlw
ZSwgdWludDY0X3Qgb2Zmc2V0KQogICAgIHsKLSAgICAgICAgYXNzZXJ0SXNDdXJyZW50KG1fc3Ry
ZWFtVGhyZWFkKTsKKyAgICAgICAgYXNzZXJ0SXNDdXJyZW50KHdvcmtRdWV1ZSgpKTsKICAgICAg
ICAgbV9jb250ZXh0LT50ZXhTdWJJbWFnZTNEKHRhcmdldCwgbGV2ZWwsIHhvZmZzZXQsIHlvZmZz
ZXQsIHpvZmZzZXQsIHdpZHRoLCBoZWlnaHQsIGRlcHRoLCBmb3JtYXQsIHR5cGUsIHN0YXRpY19j
YXN0PEdDR0xpbnRwdHI+KG9mZnNldCkpOwogICAgIH0KICAgICB2b2lkIGNvcHlUZXhTdWJJbWFn
ZTNEKHVpbnQzMl90IHRhcmdldCwgaW50MzJfdCBsZXZlbCwgaW50MzJfdCB4b2Zmc2V0LCBpbnQz
Ml90IHlvZmZzZXQsIGludDMyX3Qgem9mZnNldCwgaW50MzJfdCB4LCBpbnQzMl90IHksIGludDMy
X3Qgd2lkdGgsIGludDMyX3QgaGVpZ2h0KQogICAgIHsKLSAgICAgICAgYXNzZXJ0SXNDdXJyZW50
KG1fc3RyZWFtVGhyZWFkKTsKKyAgICAgICAgYXNzZXJ0SXNDdXJyZW50KHdvcmtRdWV1ZSgpKTsK
ICAgICAgICAgbV9jb250ZXh0LT5jb3B5VGV4U3ViSW1hZ2UzRCh0YXJnZXQsIGxldmVsLCB4b2Zm
c2V0LCB5b2Zmc2V0LCB6b2Zmc2V0LCB4LCB5LCB3aWR0aCwgaGVpZ2h0KTsKICAgICB9CiAgICAg
dm9pZCBjb21wcmVzc2VkVGV4SW1hZ2UzRDAodWludDMyX3QgdGFyZ2V0LCBpbnQzMl90IGxldmVs
LCB1aW50MzJfdCBpbnRlcm5hbGZvcm1hdCwgaW50MzJfdCB3aWR0aCwgaW50MzJfdCBoZWlnaHQs
IGludDMyX3QgZGVwdGgsIGludDMyX3QgYm9yZGVyLCBpbnQzMl90IGltYWdlU2l6ZSwgSVBDOjpB
cnJheVJlZmVyZW5jZTx1aW50OF90PiYmIGRhdGEpCiAgICAgewotICAgICAgICBhc3NlcnRJc0N1
cnJlbnQobV9zdHJlYW1UaHJlYWQpOworICAgICAgICBhc3NlcnRJc0N1cnJlbnQod29ya1F1ZXVl
KCkpOwogICAgICAgICBtX2NvbnRleHQtPmNvbXByZXNzZWRUZXhJbWFnZTNEKHRhcmdldCwgbGV2
ZWwsIGludGVybmFsZm9ybWF0LCB3aWR0aCwgaGVpZ2h0LCBkZXB0aCwgYm9yZGVyLCBpbWFnZVNp
emUsIG1ha2VHQ0dMU3BhbihyZWludGVycHJldF9jYXN0PGNvbnN0IEdDR0x2b2lkKj4oZGF0YS5k
YXRhKCkpLCBkYXRhLnNpemUoKSkpOwogICAgIH0KICAgICB2b2lkIGNvbXByZXNzZWRUZXhJbWFn
ZTNEMSh1aW50MzJfdCB0YXJnZXQsIGludDMyX3QgbGV2ZWwsIHVpbnQzMl90IGludGVybmFsZm9y
bWF0LCBpbnQzMl90IHdpZHRoLCBpbnQzMl90IGhlaWdodCwgaW50MzJfdCBkZXB0aCwgaW50MzJf
dCBib3JkZXIsIGludDMyX3QgaW1hZ2VTaXplLCB1aW50NjRfdCBvZmZzZXQpCiAgICAgewotICAg
ICAgICBhc3NlcnRJc0N1cnJlbnQobV9zdHJlYW1UaHJlYWQpOworICAgICAgICBhc3NlcnRJc0N1
cnJlbnQod29ya1F1ZXVlKCkpOwogICAgICAgICBtX2NvbnRleHQtPmNvbXByZXNzZWRUZXhJbWFn
ZTNEKHRhcmdldCwgbGV2ZWwsIGludGVybmFsZm9ybWF0LCB3aWR0aCwgaGVpZ2h0LCBkZXB0aCwg
Ym9yZGVyLCBpbWFnZVNpemUsIHN0YXRpY19jYXN0PEdDR0xpbnRwdHI+KG9mZnNldCkpOwogICAg
IH0KICAgICB2b2lkIGNvbXByZXNzZWRUZXhTdWJJbWFnZTNEMCh1aW50MzJfdCB0YXJnZXQsIGlu
dDMyX3QgbGV2ZWwsIGludDMyX3QgeG9mZnNldCwgaW50MzJfdCB5b2Zmc2V0LCBpbnQzMl90IHpv
ZmZzZXQsIGludDMyX3Qgd2lkdGgsIGludDMyX3QgaGVpZ2h0LCBpbnQzMl90IGRlcHRoLCB1aW50
MzJfdCBmb3JtYXQsIGludDMyX3QgaW1hZ2VTaXplLCBJUEM6OkFycmF5UmVmZXJlbmNlPHVpbnQ4
X3Q+JiYgZGF0YSkKICAgICB7Ci0gICAgICAgIGFzc2VydElzQ3VycmVudChtX3N0cmVhbVRocmVh
ZCk7CisgICAgICAgIGFzc2VydElzQ3VycmVudCh3b3JrUXVldWUoKSk7CiAgICAgICAgIG1fY29u
dGV4dC0+Y29tcHJlc3NlZFRleFN1YkltYWdlM0QodGFyZ2V0LCBsZXZlbCwgeG9mZnNldCwgeW9m
ZnNldCwgem9mZnNldCwgd2lkdGgsIGhlaWdodCwgZGVwdGgsIGZvcm1hdCwgaW1hZ2VTaXplLCBt
YWtlR0NHTFNwYW4ocmVpbnRlcnByZXRfY2FzdDxjb25zdCBHQ0dMdm9pZCo+KGRhdGEuZGF0YSgp
KSwgZGF0YS5zaXplKCkpKTsKICAgICB9CiAgICAgdm9pZCBjb21wcmVzc2VkVGV4U3ViSW1hZ2Uz
RDEodWludDMyX3QgdGFyZ2V0LCBpbnQzMl90IGxldmVsLCBpbnQzMl90IHhvZmZzZXQsIGludDMy
X3QgeW9mZnNldCwgaW50MzJfdCB6b2Zmc2V0LCBpbnQzMl90IHdpZHRoLCBpbnQzMl90IGhlaWdo
dCwgaW50MzJfdCBkZXB0aCwgdWludDMyX3QgZm9ybWF0LCBpbnQzMl90IGltYWdlU2l6ZSwgdWlu
dDY0X3Qgb2Zmc2V0KQogICAgIHsKLSAgICAgICAgYXNzZXJ0SXNDdXJyZW50KG1fc3RyZWFtVGhy
ZWFkKTsKKyAgICAgICAgYXNzZXJ0SXNDdXJyZW50KHdvcmtRdWV1ZSgpKTsKICAgICAgICAgbV9j
b250ZXh0LT5jb21wcmVzc2VkVGV4U3ViSW1hZ2UzRCh0YXJnZXQsIGxldmVsLCB4b2Zmc2V0LCB5
b2Zmc2V0LCB6b2Zmc2V0LCB3aWR0aCwgaGVpZ2h0LCBkZXB0aCwgZm9ybWF0LCBpbWFnZVNpemUs
IHN0YXRpY19jYXN0PEdDR0xpbnRwdHI+KG9mZnNldCkpOwogICAgIH0KICAgICB2b2lkIGdldEZy
YWdEYXRhTG9jYXRpb24odWludDMyX3QgcHJvZ3JhbSwgU3RyaW5nJiYgbmFtZSwgQ29tcGxldGlv
bkhhbmRsZXI8dm9pZChpbnQzMl90KT4mJiBjb21wbGV0aW9uSGFuZGxlcikKICAgICB7CiAgICAg
ICAgIEdDR0xpbnQgcmV0dXJuVmFsdWUgPSB7IH07Ci0gICAgICAgIGFzc2VydElzQ3VycmVudCht
X3N0cmVhbVRocmVhZCk7CisgICAgICAgIGFzc2VydElzQ3VycmVudCh3b3JrUXVldWUoKSk7CiAg
ICAgICAgIHJldHVyblZhbHVlID0gbV9jb250ZXh0LT5nZXRGcmFnRGF0YUxvY2F0aW9uKHByb2dy
YW0sIG5hbWUpOwogICAgICAgICBjb21wbGV0aW9uSGFuZGxlcihyZXR1cm5WYWx1ZSk7CiAgICAg
fQogICAgIHZvaWQgdW5pZm9ybTF1aShpbnQzMl90IGxvY2F0aW9uLCB1aW50MzJfdCB2MCkKICAg
ICB7Ci0gICAgICAgIGFzc2VydElzQ3VycmVudChtX3N0cmVhbVRocmVhZCk7CisgICAgICAgIGFz
c2VydElzQ3VycmVudCh3b3JrUXVldWUoKSk7CiAgICAgICAgIG1fY29udGV4dC0+dW5pZm9ybTF1
aShsb2NhdGlvbiwgdjApOwogICAgIH0KICAgICB2b2lkIHVuaWZvcm0ydWkoaW50MzJfdCBsb2Nh
dGlvbiwgdWludDMyX3QgdjAsIHVpbnQzMl90IHYxKQogICAgIHsKLSAgICAgICAgYXNzZXJ0SXND
dXJyZW50KG1fc3RyZWFtVGhyZWFkKTsKKyAgICAgICAgYXNzZXJ0SXNDdXJyZW50KHdvcmtRdWV1
ZSgpKTsKICAgICAgICAgbV9jb250ZXh0LT51bmlmb3JtMnVpKGxvY2F0aW9uLCB2MCwgdjEpOwog
ICAgIH0KICAgICB2b2lkIHVuaWZvcm0zdWkoaW50MzJfdCBsb2NhdGlvbiwgdWludDMyX3QgdjAs
IHVpbnQzMl90IHYxLCB1aW50MzJfdCB2MikKICAgICB7Ci0gICAgICAgIGFzc2VydElzQ3VycmVu
dChtX3N0cmVhbVRocmVhZCk7CisgICAgICAgIGFzc2VydElzQ3VycmVudCh3b3JrUXVldWUoKSk7
CiAgICAgICAgIG1fY29udGV4dC0+dW5pZm9ybTN1aShsb2NhdGlvbiwgdjAsIHYxLCB2Mik7CiAg
ICAgfQogICAgIHZvaWQgdW5pZm9ybTR1aShpbnQzMl90IGxvY2F0aW9uLCB1aW50MzJfdCB2MCwg
dWludDMyX3QgdjEsIHVpbnQzMl90IHYyLCB1aW50MzJfdCB2MykKICAgICB7Ci0gICAgICAgIGFz
c2VydElzQ3VycmVudChtX3N0cmVhbVRocmVhZCk7CisgICAgICAgIGFzc2VydElzQ3VycmVudCh3
b3JrUXVldWUoKSk7CiAgICAgICAgIG1fY29udGV4dC0+dW5pZm9ybTR1aShsb2NhdGlvbiwgdjAs
IHYxLCB2MiwgdjMpOwogICAgIH0KICAgICB2b2lkIHVuaWZvcm0xdWl2KGludDMyX3QgbG9jYXRp
b24sIElQQzo6QXJyYXlSZWZlcmVuY2U8dWludDMyX3Q+JiYgZGF0YSkKICAgICB7Ci0gICAgICAg
IGFzc2VydElzQ3VycmVudChtX3N0cmVhbVRocmVhZCk7CisgICAgICAgIGFzc2VydElzQ3VycmVu
dCh3b3JrUXVldWUoKSk7CiAgICAgICAgIG1fY29udGV4dC0+dW5pZm9ybTF1aXYobG9jYXRpb24s
IG1ha2VHQ0dMU3BhbihyZWludGVycHJldF9jYXN0PGNvbnN0IEdDR0x1aW50Kj4oZGF0YS5kYXRh
KCkpLCBkYXRhLnNpemUoKSkpOwogICAgIH0KICAgICB2b2lkIHVuaWZvcm0ydWl2KGludDMyX3Qg
bG9jYXRpb24sIElQQzo6QXJyYXlSZWZlcmVuY2U8dWludDMyX3Q+JiYgZGF0YSkKICAgICB7Ci0g
ICAgICAgIGFzc2VydElzQ3VycmVudChtX3N0cmVhbVRocmVhZCk7CisgICAgICAgIGFzc2VydElz
Q3VycmVudCh3b3JrUXVldWUoKSk7CiAgICAgICAgIG1fY29udGV4dC0+dW5pZm9ybTJ1aXYobG9j
YXRpb24sIG1ha2VHQ0dMU3BhbihyZWludGVycHJldF9jYXN0PGNvbnN0IEdDR0x1aW50Kj4oZGF0
YS5kYXRhKCkpLCBkYXRhLnNpemUoKSkpOwogICAgIH0KICAgICB2b2lkIHVuaWZvcm0zdWl2KGlu
dDMyX3QgbG9jYXRpb24sIElQQzo6QXJyYXlSZWZlcmVuY2U8dWludDMyX3Q+JiYgZGF0YSkKICAg
ICB7Ci0gICAgICAgIGFzc2VydElzQ3VycmVudChtX3N0cmVhbVRocmVhZCk7CisgICAgICAgIGFz
c2VydElzQ3VycmVudCh3b3JrUXVldWUoKSk7CiAgICAgICAgIG1fY29udGV4dC0+dW5pZm9ybTN1
aXYobG9jYXRpb24sIG1ha2VHQ0dMU3BhbihyZWludGVycHJldF9jYXN0PGNvbnN0IEdDR0x1aW50
Kj4oZGF0YS5kYXRhKCkpLCBkYXRhLnNpemUoKSkpOwogICAgIH0KICAgICB2b2lkIHVuaWZvcm00
dWl2KGludDMyX3QgbG9jYXRpb24sIElQQzo6QXJyYXlSZWZlcmVuY2U8dWludDMyX3Q+JiYgZGF0
YSkKICAgICB7Ci0gICAgICAgIGFzc2VydElzQ3VycmVudChtX3N0cmVhbVRocmVhZCk7CisgICAg
ICAgIGFzc2VydElzQ3VycmVudCh3b3JrUXVldWUoKSk7CiAgICAgICAgIG1fY29udGV4dC0+dW5p
Zm9ybTR1aXYobG9jYXRpb24sIG1ha2VHQ0dMU3BhbihyZWludGVycHJldF9jYXN0PGNvbnN0IEdD
R0x1aW50Kj4oZGF0YS5kYXRhKCkpLCBkYXRhLnNpemUoKSkpOwogICAgIH0KICAgICB2b2lkIHVu
aWZvcm1NYXRyaXgyeDNmdihpbnQzMl90IGxvY2F0aW9uLCBib29sIHRyYW5zcG9zZSwgSVBDOjpB
cnJheVJlZmVyZW5jZTxmbG9hdD4mJiBkYXRhKQogICAgIHsKLSAgICAgICAgYXNzZXJ0SXNDdXJy
ZW50KG1fc3RyZWFtVGhyZWFkKTsKKyAgICAgICAgYXNzZXJ0SXNDdXJyZW50KHdvcmtRdWV1ZSgp
KTsKICAgICAgICAgbV9jb250ZXh0LT51bmlmb3JtTWF0cml4MngzZnYobG9jYXRpb24sIHN0YXRp
Y19jYXN0PEdDR0xib29sZWFuPih0cmFuc3Bvc2UpLCBtYWtlR0NHTFNwYW4ocmVpbnRlcnByZXRf
Y2FzdDxjb25zdCBHQ0dMZmxvYXQqPihkYXRhLmRhdGEoKSksIGRhdGEuc2l6ZSgpKSk7CiAgICAg
fQogICAgIHZvaWQgdW5pZm9ybU1hdHJpeDN4MmZ2KGludDMyX3QgbG9jYXRpb24sIGJvb2wgdHJh
bnNwb3NlLCBJUEM6OkFycmF5UmVmZXJlbmNlPGZsb2F0PiYmIGRhdGEpCiAgICAgewotICAgICAg
ICBhc3NlcnRJc0N1cnJlbnQobV9zdHJlYW1UaHJlYWQpOworICAgICAgICBhc3NlcnRJc0N1cnJl
bnQod29ya1F1ZXVlKCkpOwogICAgICAgICBtX2NvbnRleHQtPnVuaWZvcm1NYXRyaXgzeDJmdihs
b2NhdGlvbiwgc3RhdGljX2Nhc3Q8R0NHTGJvb2xlYW4+KHRyYW5zcG9zZSksIG1ha2VHQ0dMU3Bh
bihyZWludGVycHJldF9jYXN0PGNvbnN0IEdDR0xmbG9hdCo+KGRhdGEuZGF0YSgpKSwgZGF0YS5z
aXplKCkpKTsKICAgICB9CiAgICAgdm9pZCB1bmlmb3JtTWF0cml4Mng0ZnYoaW50MzJfdCBsb2Nh
dGlvbiwgYm9vbCB0cmFuc3Bvc2UsIElQQzo6QXJyYXlSZWZlcmVuY2U8ZmxvYXQ+JiYgZGF0YSkK
ICAgICB7Ci0gICAgICAgIGFzc2VydElzQ3VycmVudChtX3N0cmVhbVRocmVhZCk7CisgICAgICAg
IGFzc2VydElzQ3VycmVudCh3b3JrUXVldWUoKSk7CiAgICAgICAgIG1fY29udGV4dC0+dW5pZm9y
bU1hdHJpeDJ4NGZ2KGxvY2F0aW9uLCBzdGF0aWNfY2FzdDxHQ0dMYm9vbGVhbj4odHJhbnNwb3Nl
KSwgbWFrZUdDR0xTcGFuKHJlaW50ZXJwcmV0X2Nhc3Q8Y29uc3QgR0NHTGZsb2F0Kj4oZGF0YS5k
YXRhKCkpLCBkYXRhLnNpemUoKSkpOwogICAgIH0KICAgICB2b2lkIHVuaWZvcm1NYXRyaXg0eDJm
dihpbnQzMl90IGxvY2F0aW9uLCBib29sIHRyYW5zcG9zZSwgSVBDOjpBcnJheVJlZmVyZW5jZTxm
bG9hdD4mJiBkYXRhKQogICAgIHsKLSAgICAgICAgYXNzZXJ0SXNDdXJyZW50KG1fc3RyZWFtVGhy
ZWFkKTsKKyAgICAgICAgYXNzZXJ0SXNDdXJyZW50KHdvcmtRdWV1ZSgpKTsKICAgICAgICAgbV9j
b250ZXh0LT51bmlmb3JtTWF0cml4NHgyZnYobG9jYXRpb24sIHN0YXRpY19jYXN0PEdDR0xib29s
ZWFuPih0cmFuc3Bvc2UpLCBtYWtlR0NHTFNwYW4ocmVpbnRlcnByZXRfY2FzdDxjb25zdCBHQ0dM
ZmxvYXQqPihkYXRhLmRhdGEoKSksIGRhdGEuc2l6ZSgpKSk7CiAgICAgfQogICAgIHZvaWQgdW5p
Zm9ybU1hdHJpeDN4NGZ2KGludDMyX3QgbG9jYXRpb24sIGJvb2wgdHJhbnNwb3NlLCBJUEM6OkFy
cmF5UmVmZXJlbmNlPGZsb2F0PiYmIGRhdGEpCiAgICAgewotICAgICAgICBhc3NlcnRJc0N1cnJl
bnQobV9zdHJlYW1UaHJlYWQpOworICAgICAgICBhc3NlcnRJc0N1cnJlbnQod29ya1F1ZXVlKCkp
OwogICAgICAgICBtX2NvbnRleHQtPnVuaWZvcm1NYXRyaXgzeDRmdihsb2NhdGlvbiwgc3RhdGlj
X2Nhc3Q8R0NHTGJvb2xlYW4+KHRyYW5zcG9zZSksIG1ha2VHQ0dMU3BhbihyZWludGVycHJldF9j
YXN0PGNvbnN0IEdDR0xmbG9hdCo+KGRhdGEuZGF0YSgpKSwgZGF0YS5zaXplKCkpKTsKICAgICB9
CiAgICAgdm9pZCB1bmlmb3JtTWF0cml4NHgzZnYoaW50MzJfdCBsb2NhdGlvbiwgYm9vbCB0cmFu
c3Bvc2UsIElQQzo6QXJyYXlSZWZlcmVuY2U8ZmxvYXQ+JiYgZGF0YSkKICAgICB7Ci0gICAgICAg
IGFzc2VydElzQ3VycmVudChtX3N0cmVhbVRocmVhZCk7CisgICAgICAgIGFzc2VydElzQ3VycmVu
dCh3b3JrUXVldWUoKSk7CiAgICAgICAgIG1fY29udGV4dC0+dW5pZm9ybU1hdHJpeDR4M2Z2KGxv
Y2F0aW9uLCBzdGF0aWNfY2FzdDxHQ0dMYm9vbGVhbj4odHJhbnNwb3NlKSwgbWFrZUdDR0xTcGFu
KHJlaW50ZXJwcmV0X2Nhc3Q8Y29uc3QgR0NHTGZsb2F0Kj4oZGF0YS5kYXRhKCkpLCBkYXRhLnNp
emUoKSkpOwogICAgIH0KICAgICB2b2lkIHZlcnRleEF0dHJpYkk0aSh1aW50MzJfdCBpbmRleCwg
aW50MzJfdCB4LCBpbnQzMl90IHksIGludDMyX3QgeiwgaW50MzJfdCB3KQogICAgIHsKLSAgICAg
ICAgYXNzZXJ0SXNDdXJyZW50KG1fc3RyZWFtVGhyZWFkKTsKKyAgICAgICAgYXNzZXJ0SXNDdXJy
ZW50KHdvcmtRdWV1ZSgpKTsKICAgICAgICAgbV9jb250ZXh0LT52ZXJ0ZXhBdHRyaWJJNGkoaW5k
ZXgsIHgsIHksIHosIHcpOwogICAgIH0KICAgICB2b2lkIHZlcnRleEF0dHJpYkk0aXYodWludDMy
X3QgaW5kZXgsIElQQzo6QXJyYXlSZWZlcmVuY2U8aW50MzJfdCwgND4mJiB2YWx1ZXMpCiAgICAg
ewotICAgICAgICBhc3NlcnRJc0N1cnJlbnQobV9zdHJlYW1UaHJlYWQpOworICAgICAgICBhc3Nl
cnRJc0N1cnJlbnQod29ya1F1ZXVlKCkpOwogICAgICAgICBtX2NvbnRleHQtPnZlcnRleEF0dHJp
Ykk0aXYoaW5kZXgsIG1ha2VHQ0dMU3Bhbjw0PihyZWludGVycHJldF9jYXN0PGNvbnN0IEdDR0xp
bnQqPih2YWx1ZXMuZGF0YSgpKSkpOwogICAgIH0KICAgICB2b2lkIHZlcnRleEF0dHJpYkk0dWko
dWludDMyX3QgaW5kZXgsIHVpbnQzMl90IHgsIHVpbnQzMl90IHksIHVpbnQzMl90IHosIHVpbnQz
Ml90IHcpCiAgICAgewotICAgICAgICBhc3NlcnRJc0N1cnJlbnQobV9zdHJlYW1UaHJlYWQpOwor
ICAgICAgICBhc3NlcnRJc0N1cnJlbnQod29ya1F1ZXVlKCkpOwogICAgICAgICBtX2NvbnRleHQt
PnZlcnRleEF0dHJpYkk0dWkoaW5kZXgsIHgsIHksIHosIHcpOwogICAgIH0KICAgICB2b2lkIHZl
cnRleEF0dHJpYkk0dWl2KHVpbnQzMl90IGluZGV4LCBJUEM6OkFycmF5UmVmZXJlbmNlPHVpbnQz
Ml90LCA0PiYmIHZhbHVlcykKICAgICB7Ci0gICAgICAgIGFzc2VydElzQ3VycmVudChtX3N0cmVh
bVRocmVhZCk7CisgICAgICAgIGFzc2VydElzQ3VycmVudCh3b3JrUXVldWUoKSk7CiAgICAgICAg
IG1fY29udGV4dC0+dmVydGV4QXR0cmliSTR1aXYoaW5kZXgsIG1ha2VHQ0dMU3Bhbjw0PihyZWlu
dGVycHJldF9jYXN0PGNvbnN0IEdDR0x1aW50Kj4odmFsdWVzLmRhdGEoKSkpKTsKICAgICB9CiAg
ICAgdm9pZCB2ZXJ0ZXhBdHRyaWJJUG9pbnRlcih1aW50MzJfdCBpbmRleCwgaW50MzJfdCBzaXpl
LCB1aW50MzJfdCB0eXBlLCBpbnQzMl90IHN0cmlkZSwgdWludDY0X3Qgb2Zmc2V0KQogICAgIHsK
LSAgICAgICAgYXNzZXJ0SXNDdXJyZW50KG1fc3RyZWFtVGhyZWFkKTsKKyAgICAgICAgYXNzZXJ0
SXNDdXJyZW50KHdvcmtRdWV1ZSgpKTsKICAgICAgICAgbV9jb250ZXh0LT52ZXJ0ZXhBdHRyaWJJ
UG9pbnRlcihpbmRleCwgc2l6ZSwgdHlwZSwgc3RyaWRlLCBzdGF0aWNfY2FzdDxHQ0dMaW50cHRy
PihvZmZzZXQpKTsKICAgICB9CiAgICAgdm9pZCBkcmF3UmFuZ2VFbGVtZW50cyh1aW50MzJfdCBt
b2RlLCB1aW50MzJfdCBzdGFydCwgdWludDMyX3QgZW5kLCBpbnQzMl90IGNvdW50LCB1aW50MzJf
dCB0eXBlLCB1aW50NjRfdCBvZmZzZXQpCiAgICAgewotICAgICAgICBhc3NlcnRJc0N1cnJlbnQo
bV9zdHJlYW1UaHJlYWQpOworICAgICAgICBhc3NlcnRJc0N1cnJlbnQod29ya1F1ZXVlKCkpOwog
ICAgICAgICBtX2NvbnRleHQtPmRyYXdSYW5nZUVsZW1lbnRzKG1vZGUsIHN0YXJ0LCBlbmQsIGNv
dW50LCB0eXBlLCBzdGF0aWNfY2FzdDxHQ0dMaW50cHRyPihvZmZzZXQpKTsKICAgICB9CiAgICAg
dm9pZCBkcmF3QnVmZmVycyhJUEM6OkFycmF5UmVmZXJlbmNlPHVpbnQzMl90PiYmIGJ1ZnMpCiAg
ICAgewotICAgICAgICBhc3NlcnRJc0N1cnJlbnQobV9zdHJlYW1UaHJlYWQpOworICAgICAgICBh
c3NlcnRJc0N1cnJlbnQod29ya1F1ZXVlKCkpOwogICAgICAgICBtX2NvbnRleHQtPmRyYXdCdWZm
ZXJzKG1ha2VHQ0dMU3BhbihyZWludGVycHJldF9jYXN0PGNvbnN0IEdDR0xlbnVtKj4oYnVmcy5k
YXRhKCkpLCBidWZzLnNpemUoKSkpOwogICAgIH0KICAgICB2b2lkIGNsZWFyQnVmZmVyaXYodWlu
dDMyX3QgYnVmZmVyLCBpbnQzMl90IGRyYXdidWZmZXIsIElQQzo6QXJyYXlSZWZlcmVuY2U8aW50
MzJfdD4mJiB2YWx1ZXMpCiAgICAgewotICAgICAgICBhc3NlcnRJc0N1cnJlbnQobV9zdHJlYW1U
aHJlYWQpOworICAgICAgICBhc3NlcnRJc0N1cnJlbnQod29ya1F1ZXVlKCkpOwogICAgICAgICBt
X2NvbnRleHQtPmNsZWFyQnVmZmVyaXYoYnVmZmVyLCBkcmF3YnVmZmVyLCBtYWtlR0NHTFNwYW4o
cmVpbnRlcnByZXRfY2FzdDxjb25zdCBHQ0dMaW50Kj4odmFsdWVzLmRhdGEoKSksIHZhbHVlcy5z
aXplKCkpKTsKICAgICB9CiAgICAgdm9pZCBjbGVhckJ1ZmZlcnVpdih1aW50MzJfdCBidWZmZXIs
IGludDMyX3QgZHJhd2J1ZmZlciwgSVBDOjpBcnJheVJlZmVyZW5jZTx1aW50MzJfdD4mJiB2YWx1
ZXMpCiAgICAgewotICAgICAgICBhc3NlcnRJc0N1cnJlbnQobV9zdHJlYW1UaHJlYWQpOworICAg
ICAgICBhc3NlcnRJc0N1cnJlbnQod29ya1F1ZXVlKCkpOwogICAgICAgICBtX2NvbnRleHQtPmNs
ZWFyQnVmZmVydWl2KGJ1ZmZlciwgZHJhd2J1ZmZlciwgbWFrZUdDR0xTcGFuKHJlaW50ZXJwcmV0
X2Nhc3Q8Y29uc3QgR0NHTHVpbnQqPih2YWx1ZXMuZGF0YSgpKSwgdmFsdWVzLnNpemUoKSkpOwog
ICAgIH0KICAgICB2b2lkIGNsZWFyQnVmZmVyZnYodWludDMyX3QgYnVmZmVyLCBpbnQzMl90IGRy
YXdidWZmZXIsIElQQzo6QXJyYXlSZWZlcmVuY2U8ZmxvYXQ+JiYgdmFsdWVzKQogICAgIHsKLSAg
ICAgICAgYXNzZXJ0SXNDdXJyZW50KG1fc3RyZWFtVGhyZWFkKTsKKyAgICAgICAgYXNzZXJ0SXND
dXJyZW50KHdvcmtRdWV1ZSgpKTsKICAgICAgICAgbV9jb250ZXh0LT5jbGVhckJ1ZmZlcmZ2KGJ1
ZmZlciwgZHJhd2J1ZmZlciwgbWFrZUdDR0xTcGFuKHJlaW50ZXJwcmV0X2Nhc3Q8Y29uc3QgR0NH
TGZsb2F0Kj4odmFsdWVzLmRhdGEoKSksIHZhbHVlcy5zaXplKCkpKTsKICAgICB9CiAgICAgdm9p
ZCBjbGVhckJ1ZmZlcmZpKHVpbnQzMl90IGJ1ZmZlciwgaW50MzJfdCBkcmF3YnVmZmVyLCBmbG9h
dCBkZXB0aCwgaW50MzJfdCBzdGVuY2lsKQogICAgIHsKLSAgICAgICAgYXNzZXJ0SXNDdXJyZW50
KG1fc3RyZWFtVGhyZWFkKTsKKyAgICAgICAgYXNzZXJ0SXNDdXJyZW50KHdvcmtRdWV1ZSgpKTsK
ICAgICAgICAgbV9jb250ZXh0LT5jbGVhckJ1ZmZlcmZpKGJ1ZmZlciwgZHJhd2J1ZmZlciwgZGVw
dGgsIHN0ZW5jaWwpOwogICAgIH0KICAgICB2b2lkIGNyZWF0ZVF1ZXJ5KENvbXBsZXRpb25IYW5k
bGVyPHZvaWQodWludDMyX3QpPiYmIGNvbXBsZXRpb25IYW5kbGVyKQogICAgIHsKICAgICAgICAg
UGxhdGZvcm1HTE9iamVjdCByZXR1cm5WYWx1ZSA9IHsgfTsKLSAgICAgICAgYXNzZXJ0SXNDdXJy
ZW50KG1fc3RyZWFtVGhyZWFkKTsKKyAgICAgICAgYXNzZXJ0SXNDdXJyZW50KHdvcmtRdWV1ZSgp
KTsKICAgICAgICAgcmV0dXJuVmFsdWUgPSBtX2NvbnRleHQtPmNyZWF0ZVF1ZXJ5KCk7CiAgICAg
ICAgIGNvbXBsZXRpb25IYW5kbGVyKHJldHVyblZhbHVlKTsKICAgICB9CiAgICAgdm9pZCBkZWxl
dGVRdWVyeSh1aW50MzJfdCBxdWVyeSkKICAgICB7Ci0gICAgICAgIGFzc2VydElzQ3VycmVudCht
X3N0cmVhbVRocmVhZCk7CisgICAgICAgIGFzc2VydElzQ3VycmVudCh3b3JrUXVldWUoKSk7CiAg
ICAgICAgIG1fY29udGV4dC0+ZGVsZXRlUXVlcnkocXVlcnkpOwogICAgIH0KICAgICB2b2lkIGlz
UXVlcnkodWludDMyX3QgcXVlcnksIENvbXBsZXRpb25IYW5kbGVyPHZvaWQoYm9vbCk+JiYgY29t
cGxldGlvbkhhbmRsZXIpCiAgICAgewogICAgICAgICBHQ0dMYm9vbGVhbiByZXR1cm5WYWx1ZSA9
IHsgfTsKLSAgICAgICAgYXNzZXJ0SXNDdXJyZW50KG1fc3RyZWFtVGhyZWFkKTsKKyAgICAgICAg
YXNzZXJ0SXNDdXJyZW50KHdvcmtRdWV1ZSgpKTsKICAgICAgICAgcmV0dXJuVmFsdWUgPSBtX2Nv
bnRleHQtPmlzUXVlcnkocXVlcnkpOwogICAgICAgICBjb21wbGV0aW9uSGFuZGxlcihzdGF0aWNf
Y2FzdDxib29sPihyZXR1cm5WYWx1ZSkpOwogICAgIH0KICAgICB2b2lkIGJlZ2luUXVlcnkodWlu
dDMyX3QgdGFyZ2V0LCB1aW50MzJfdCBxdWVyeSkKICAgICB7Ci0gICAgICAgIGFzc2VydElzQ3Vy
cmVudChtX3N0cmVhbVRocmVhZCk7CisgICAgICAgIGFzc2VydElzQ3VycmVudCh3b3JrUXVldWUo
KSk7CiAgICAgICAgIG1fY29udGV4dC0+YmVnaW5RdWVyeSh0YXJnZXQsIHF1ZXJ5KTsKICAgICB9
CiAgICAgdm9pZCBlbmRRdWVyeSh1aW50MzJfdCB0YXJnZXQpCiAgICAgewotICAgICAgICBhc3Nl
cnRJc0N1cnJlbnQobV9zdHJlYW1UaHJlYWQpOworICAgICAgICBhc3NlcnRJc0N1cnJlbnQod29y
a1F1ZXVlKCkpOwogICAgICAgICBtX2NvbnRleHQtPmVuZFF1ZXJ5KHRhcmdldCk7CiAgICAgfQog
ICAgIHZvaWQgZ2V0UXVlcnkodWludDMyX3QgdGFyZ2V0LCB1aW50MzJfdCBwbmFtZSwgQ29tcGxl
dGlvbkhhbmRsZXI8dm9pZCh1aW50MzJfdCk+JiYgY29tcGxldGlvbkhhbmRsZXIpCiAgICAgewog
ICAgICAgICBQbGF0Zm9ybUdMT2JqZWN0IHJldHVyblZhbHVlID0geyB9OwotICAgICAgICBhc3Nl
cnRJc0N1cnJlbnQobV9zdHJlYW1UaHJlYWQpOworICAgICAgICBhc3NlcnRJc0N1cnJlbnQod29y
a1F1ZXVlKCkpOwogICAgICAgICByZXR1cm5WYWx1ZSA9IG1fY29udGV4dC0+Z2V0UXVlcnkodGFy
Z2V0LCBwbmFtZSk7CiAgICAgICAgIGNvbXBsZXRpb25IYW5kbGVyKHJldHVyblZhbHVlKTsKICAg
ICB9CiAgICAgdm9pZCBnZXRRdWVyeU9iamVjdHVpKHVpbnQzMl90IHF1ZXJ5LCB1aW50MzJfdCBw
bmFtZSwgQ29tcGxldGlvbkhhbmRsZXI8dm9pZCh1aW50MzJfdCk+JiYgY29tcGxldGlvbkhhbmRs
ZXIpCiAgICAgewogICAgICAgICBHQ0dMdWludCByZXR1cm5WYWx1ZSA9IHsgfTsKLSAgICAgICAg
YXNzZXJ0SXNDdXJyZW50KG1fc3RyZWFtVGhyZWFkKTsKKyAgICAgICAgYXNzZXJ0SXNDdXJyZW50
KHdvcmtRdWV1ZSgpKTsKICAgICAgICAgcmV0dXJuVmFsdWUgPSBtX2NvbnRleHQtPmdldFF1ZXJ5
T2JqZWN0dWkocXVlcnksIHBuYW1lKTsKICAgICAgICAgY29tcGxldGlvbkhhbmRsZXIocmV0dXJu
VmFsdWUpOwogICAgIH0KICAgICB2b2lkIGNyZWF0ZVNhbXBsZXIoQ29tcGxldGlvbkhhbmRsZXI8
dm9pZCh1aW50MzJfdCk+JiYgY29tcGxldGlvbkhhbmRsZXIpCiAgICAgewogICAgICAgICBQbGF0
Zm9ybUdMT2JqZWN0IHJldHVyblZhbHVlID0geyB9OwotICAgICAgICBhc3NlcnRJc0N1cnJlbnQo
bV9zdHJlYW1UaHJlYWQpOworICAgICAgICBhc3NlcnRJc0N1cnJlbnQod29ya1F1ZXVlKCkpOwog
ICAgICAgICByZXR1cm5WYWx1ZSA9IG1fY29udGV4dC0+Y3JlYXRlU2FtcGxlcigpOwogICAgICAg
ICBjb21wbGV0aW9uSGFuZGxlcihyZXR1cm5WYWx1ZSk7CiAgICAgfQogICAgIHZvaWQgZGVsZXRl
U2FtcGxlcih1aW50MzJfdCBzYW1wbGVyKQogICAgIHsKLSAgICAgICAgYXNzZXJ0SXNDdXJyZW50
KG1fc3RyZWFtVGhyZWFkKTsKKyAgICAgICAgYXNzZXJ0SXNDdXJyZW50KHdvcmtRdWV1ZSgpKTsK
ICAgICAgICAgbV9jb250ZXh0LT5kZWxldGVTYW1wbGVyKHNhbXBsZXIpOwogICAgIH0KICAgICB2
b2lkIGlzU2FtcGxlcih1aW50MzJfdCBzYW1wbGVyLCBDb21wbGV0aW9uSGFuZGxlcjx2b2lkKGJv
b2wpPiYmIGNvbXBsZXRpb25IYW5kbGVyKQogICAgIHsKICAgICAgICAgR0NHTGJvb2xlYW4gcmV0
dXJuVmFsdWUgPSB7IH07Ci0gICAgICAgIGFzc2VydElzQ3VycmVudChtX3N0cmVhbVRocmVhZCk7
CisgICAgICAgIGFzc2VydElzQ3VycmVudCh3b3JrUXVldWUoKSk7CiAgICAgICAgIHJldHVyblZh
bHVlID0gbV9jb250ZXh0LT5pc1NhbXBsZXIoc2FtcGxlcik7CiAgICAgICAgIGNvbXBsZXRpb25I
YW5kbGVyKHN0YXRpY19jYXN0PGJvb2w+KHJldHVyblZhbHVlKSk7CiAgICAgfQogICAgIHZvaWQg
YmluZFNhbXBsZXIodWludDMyX3QgdW5pdCwgdWludDMyX3Qgc2FtcGxlcikKICAgICB7Ci0gICAg
ICAgIGFzc2VydElzQ3VycmVudChtX3N0cmVhbVRocmVhZCk7CisgICAgICAgIGFzc2VydElzQ3Vy
cmVudCh3b3JrUXVldWUoKSk7CiAgICAgICAgIG1fY29udGV4dC0+YmluZFNhbXBsZXIodW5pdCwg
c2FtcGxlcik7CiAgICAgfQogICAgIHZvaWQgc2FtcGxlclBhcmFtZXRlcmkodWludDMyX3Qgc2Ft
cGxlciwgdWludDMyX3QgcG5hbWUsIGludDMyX3QgcGFyYW0pCiAgICAgewotICAgICAgICBhc3Nl
cnRJc0N1cnJlbnQobV9zdHJlYW1UaHJlYWQpOworICAgICAgICBhc3NlcnRJc0N1cnJlbnQod29y
a1F1ZXVlKCkpOwogICAgICAgICBtX2NvbnRleHQtPnNhbXBsZXJQYXJhbWV0ZXJpKHNhbXBsZXIs
IHBuYW1lLCBwYXJhbSk7CiAgICAgfQogICAgIHZvaWQgc2FtcGxlclBhcmFtZXRlcmYodWludDMy
X3Qgc2FtcGxlciwgdWludDMyX3QgcG5hbWUsIGZsb2F0IHBhcmFtKQogICAgIHsKLSAgICAgICAg
YXNzZXJ0SXNDdXJyZW50KG1fc3RyZWFtVGhyZWFkKTsKKyAgICAgICAgYXNzZXJ0SXNDdXJyZW50
KHdvcmtRdWV1ZSgpKTsKICAgICAgICAgbV9jb250ZXh0LT5zYW1wbGVyUGFyYW1ldGVyZihzYW1w
bGVyLCBwbmFtZSwgcGFyYW0pOwogICAgIH0KICAgICB2b2lkIGdldFNhbXBsZXJQYXJhbWV0ZXJm
KHVpbnQzMl90IHNhbXBsZXIsIHVpbnQzMl90IHBuYW1lLCBDb21wbGV0aW9uSGFuZGxlcjx2b2lk
KGZsb2F0KT4mJiBjb21wbGV0aW9uSGFuZGxlcikKICAgICB7CiAgICAgICAgIEdDR0xmbG9hdCBy
ZXR1cm5WYWx1ZSA9IHsgfTsKLSAgICAgICAgYXNzZXJ0SXNDdXJyZW50KG1fc3RyZWFtVGhyZWFk
KTsKKyAgICAgICAgYXNzZXJ0SXNDdXJyZW50KHdvcmtRdWV1ZSgpKTsKICAgICAgICAgcmV0dXJu
VmFsdWUgPSBtX2NvbnRleHQtPmdldFNhbXBsZXJQYXJhbWV0ZXJmKHNhbXBsZXIsIHBuYW1lKTsK
ICAgICAgICAgY29tcGxldGlvbkhhbmRsZXIocmV0dXJuVmFsdWUpOwogICAgIH0KICAgICB2b2lk
IGdldFNhbXBsZXJQYXJhbWV0ZXJpKHVpbnQzMl90IHNhbXBsZXIsIHVpbnQzMl90IHBuYW1lLCBD
b21wbGV0aW9uSGFuZGxlcjx2b2lkKGludDMyX3QpPiYmIGNvbXBsZXRpb25IYW5kbGVyKQogICAg
IHsKICAgICAgICAgR0NHTGludCByZXR1cm5WYWx1ZSA9IHsgfTsKLSAgICAgICAgYXNzZXJ0SXND
dXJyZW50KG1fc3RyZWFtVGhyZWFkKTsKKyAgICAgICAgYXNzZXJ0SXNDdXJyZW50KHdvcmtRdWV1
ZSgpKTsKICAgICAgICAgcmV0dXJuVmFsdWUgPSBtX2NvbnRleHQtPmdldFNhbXBsZXJQYXJhbWV0
ZXJpKHNhbXBsZXIsIHBuYW1lKTsKICAgICAgICAgY29tcGxldGlvbkhhbmRsZXIocmV0dXJuVmFs
dWUpOwogICAgIH0KICAgICB2b2lkIGZlbmNlU3luYyh1aW50MzJfdCBjb25kaXRpb24sIHVpbnQz
Ml90IGZsYWdzLCBDb21wbGV0aW9uSGFuZGxlcjx2b2lkKHVpbnQ2NF90KT4mJiBjb21wbGV0aW9u
SGFuZGxlcikKICAgICB7CiAgICAgICAgIEdDR0xzeW5jIHJldHVyblZhbHVlID0geyB9OwotICAg
ICAgICBhc3NlcnRJc0N1cnJlbnQobV9zdHJlYW1UaHJlYWQpOworICAgICAgICBhc3NlcnRJc0N1
cnJlbnQod29ya1F1ZXVlKCkpOwogICAgICAgICByZXR1cm5WYWx1ZSA9IG1fY29udGV4dC0+ZmVu
Y2VTeW5jKGNvbmRpdGlvbiwgZmxhZ3MpOwogICAgICAgICBjb21wbGV0aW9uSGFuZGxlcihzdGF0
aWNfY2FzdDx1aW50NjRfdD4ocmVpbnRlcnByZXRfY2FzdDxpbnRwdHJfdD4ocmV0dXJuVmFsdWUp
KSk7CiAgICAgfQogICAgIHZvaWQgaXNTeW5jKHVpbnQ2NF90IGFyZzAsIENvbXBsZXRpb25IYW5k
bGVyPHZvaWQoYm9vbCk+JiYgY29tcGxldGlvbkhhbmRsZXIpCiAgICAgewogICAgICAgICBHQ0dM
Ym9vbGVhbiByZXR1cm5WYWx1ZSA9IHsgfTsKLSAgICAgICAgYXNzZXJ0SXNDdXJyZW50KG1fc3Ry
ZWFtVGhyZWFkKTsKKyAgICAgICAgYXNzZXJ0SXNDdXJyZW50KHdvcmtRdWV1ZSgpKTsKICAgICAg
ICAgcmV0dXJuVmFsdWUgPSBtX2NvbnRleHQtPmlzU3luYyhyZWludGVycHJldF9jYXN0PEdDR0xz
eW5jPihzdGF0aWNfY2FzdDxpbnRwdHJfdD4oYXJnMCkpKTsKICAgICAgICAgY29tcGxldGlvbkhh
bmRsZXIoc3RhdGljX2Nhc3Q8Ym9vbD4ocmV0dXJuVmFsdWUpKTsKICAgICB9CiAgICAgdm9pZCBk
ZWxldGVTeW5jKHVpbnQ2NF90IGFyZzApCiAgICAgewotICAgICAgICBhc3NlcnRJc0N1cnJlbnQo
bV9zdHJlYW1UaHJlYWQpOworICAgICAgICBhc3NlcnRJc0N1cnJlbnQod29ya1F1ZXVlKCkpOwog
ICAgICAgICBtX2NvbnRleHQtPmRlbGV0ZVN5bmMocmVpbnRlcnByZXRfY2FzdDxHQ0dMc3luYz4o
c3RhdGljX2Nhc3Q8aW50cHRyX3Q+KGFyZzApKSk7CiAgICAgfQogICAgIHZvaWQgY2xpZW50V2Fp
dFN5bmModWludDY0X3QgYXJnMCwgdWludDMyX3QgZmxhZ3MsIHVpbnQ2NF90IHRpbWVvdXQsIENv
bXBsZXRpb25IYW5kbGVyPHZvaWQodWludDMyX3QpPiYmIGNvbXBsZXRpb25IYW5kbGVyKQogICAg
IHsKICAgICAgICAgR0NHTGVudW0gcmV0dXJuVmFsdWUgPSB7IH07Ci0gICAgICAgIGFzc2VydElz
Q3VycmVudChtX3N0cmVhbVRocmVhZCk7CisgICAgICAgIGFzc2VydElzQ3VycmVudCh3b3JrUXVl
dWUoKSk7CiAgICAgICAgIHJldHVyblZhbHVlID0gbV9jb250ZXh0LT5jbGllbnRXYWl0U3luYyhy
ZWludGVycHJldF9jYXN0PEdDR0xzeW5jPihzdGF0aWNfY2FzdDxpbnRwdHJfdD4oYXJnMCkpLCBm
bGFncywgc3RhdGljX2Nhc3Q8R0NHTHVpbnQ2ND4odGltZW91dCkpOwogICAgICAgICBjb21wbGV0
aW9uSGFuZGxlcihyZXR1cm5WYWx1ZSk7CiAgICAgfQogICAgIHZvaWQgd2FpdFN5bmModWludDY0
X3QgYXJnMCwgdWludDMyX3QgZmxhZ3MsIGludDY0X3QgdGltZW91dCkKICAgICB7Ci0gICAgICAg
IGFzc2VydElzQ3VycmVudChtX3N0cmVhbVRocmVhZCk7CisgICAgICAgIGFzc2VydElzQ3VycmVu
dCh3b3JrUXVldWUoKSk7CiAgICAgICAgIG1fY29udGV4dC0+d2FpdFN5bmMocmVpbnRlcnByZXRf
Y2FzdDxHQ0dMc3luYz4oc3RhdGljX2Nhc3Q8aW50cHRyX3Q+KGFyZzApKSwgZmxhZ3MsIHN0YXRp
Y19jYXN0PEdDR0xpbnQ2ND4odGltZW91dCkpOwogICAgIH0KICAgICB2b2lkIGdldFN5bmNpKHVp
bnQ2NF90IGFyZzAsIHVpbnQzMl90IHBuYW1lLCBDb21wbGV0aW9uSGFuZGxlcjx2b2lkKGludDMy
X3QpPiYmIGNvbXBsZXRpb25IYW5kbGVyKQogICAgIHsKICAgICAgICAgR0NHTGludCByZXR1cm5W
YWx1ZSA9IHsgfTsKLSAgICAgICAgYXNzZXJ0SXNDdXJyZW50KG1fc3RyZWFtVGhyZWFkKTsKKyAg
ICAgICAgYXNzZXJ0SXNDdXJyZW50KHdvcmtRdWV1ZSgpKTsKICAgICAgICAgcmV0dXJuVmFsdWUg
PSBtX2NvbnRleHQtPmdldFN5bmNpKHJlaW50ZXJwcmV0X2Nhc3Q8R0NHTHN5bmM+KHN0YXRpY19j
YXN0PGludHB0cl90PihhcmcwKSksIHBuYW1lKTsKICAgICAgICAgY29tcGxldGlvbkhhbmRsZXIo
cmV0dXJuVmFsdWUpOwogICAgIH0KICAgICB2b2lkIGNyZWF0ZVRyYW5zZm9ybUZlZWRiYWNrKENv
bXBsZXRpb25IYW5kbGVyPHZvaWQodWludDMyX3QpPiYmIGNvbXBsZXRpb25IYW5kbGVyKQogICAg
IHsKICAgICAgICAgUGxhdGZvcm1HTE9iamVjdCByZXR1cm5WYWx1ZSA9IHsgfTsKLSAgICAgICAg
YXNzZXJ0SXNDdXJyZW50KG1fc3RyZWFtVGhyZWFkKTsKKyAgICAgICAgYXNzZXJ0SXNDdXJyZW50
KHdvcmtRdWV1ZSgpKTsKICAgICAgICAgcmV0dXJuVmFsdWUgPSBtX2NvbnRleHQtPmNyZWF0ZVRy
YW5zZm9ybUZlZWRiYWNrKCk7CiAgICAgICAgIGNvbXBsZXRpb25IYW5kbGVyKHJldHVyblZhbHVl
KTsKICAgICB9CiAgICAgdm9pZCBkZWxldGVUcmFuc2Zvcm1GZWVkYmFjayh1aW50MzJfdCBpZCkK
ICAgICB7Ci0gICAgICAgIGFzc2VydElzQ3VycmVudChtX3N0cmVhbVRocmVhZCk7CisgICAgICAg
IGFzc2VydElzQ3VycmVudCh3b3JrUXVldWUoKSk7CiAgICAgICAgIG1fY29udGV4dC0+ZGVsZXRl
VHJhbnNmb3JtRmVlZGJhY2soaWQpOwogICAgIH0KICAgICB2b2lkIGlzVHJhbnNmb3JtRmVlZGJh
Y2sodWludDMyX3QgaWQsIENvbXBsZXRpb25IYW5kbGVyPHZvaWQoYm9vbCk+JiYgY29tcGxldGlv
bkhhbmRsZXIpCiAgICAgewogICAgICAgICBHQ0dMYm9vbGVhbiByZXR1cm5WYWx1ZSA9IHsgfTsK
LSAgICAgICAgYXNzZXJ0SXNDdXJyZW50KG1fc3RyZWFtVGhyZWFkKTsKKyAgICAgICAgYXNzZXJ0
SXNDdXJyZW50KHdvcmtRdWV1ZSgpKTsKICAgICAgICAgcmV0dXJuVmFsdWUgPSBtX2NvbnRleHQt
PmlzVHJhbnNmb3JtRmVlZGJhY2soaWQpOwogICAgICAgICBjb21wbGV0aW9uSGFuZGxlcihzdGF0
aWNfY2FzdDxib29sPihyZXR1cm5WYWx1ZSkpOwogICAgIH0KICAgICB2b2lkIGJpbmRUcmFuc2Zv
cm1GZWVkYmFjayh1aW50MzJfdCB0YXJnZXQsIHVpbnQzMl90IGlkKQogICAgIHsKLSAgICAgICAg
YXNzZXJ0SXNDdXJyZW50KG1fc3RyZWFtVGhyZWFkKTsKKyAgICAgICAgYXNzZXJ0SXNDdXJyZW50
KHdvcmtRdWV1ZSgpKTsKICAgICAgICAgbV9jb250ZXh0LT5iaW5kVHJhbnNmb3JtRmVlZGJhY2so
dGFyZ2V0LCBpZCk7CiAgICAgfQogICAgIHZvaWQgYmVnaW5UcmFuc2Zvcm1GZWVkYmFjayh1aW50
MzJfdCBwcmltaXRpdmVNb2RlKQogICAgIHsKLSAgICAgICAgYXNzZXJ0SXNDdXJyZW50KG1fc3Ry
ZWFtVGhyZWFkKTsKKyAgICAgICAgYXNzZXJ0SXNDdXJyZW50KHdvcmtRdWV1ZSgpKTsKICAgICAg
ICAgbV9jb250ZXh0LT5iZWdpblRyYW5zZm9ybUZlZWRiYWNrKHByaW1pdGl2ZU1vZGUpOwogICAg
IH0KICAgICB2b2lkIGVuZFRyYW5zZm9ybUZlZWRiYWNrKCkKICAgICB7Ci0gICAgICAgIGFzc2Vy
dElzQ3VycmVudChtX3N0cmVhbVRocmVhZCk7CisgICAgICAgIGFzc2VydElzQ3VycmVudCh3b3Jr
UXVldWUoKSk7CiAgICAgICAgIG1fY29udGV4dC0+ZW5kVHJhbnNmb3JtRmVlZGJhY2soKTsKICAg
ICB9CiAgICAgdm9pZCB0cmFuc2Zvcm1GZWVkYmFja1ZhcnlpbmdzKHVpbnQzMl90IHByb2dyYW0s
IFZlY3RvcjxTdHJpbmc+JiYgdmFyeWluZ3MsIHVpbnQzMl90IGJ1ZmZlck1vZGUpCiAgICAgewot
ICAgICAgICBhc3NlcnRJc0N1cnJlbnQobV9zdHJlYW1UaHJlYWQpOworICAgICAgICBhc3NlcnRJ
c0N1cnJlbnQod29ya1F1ZXVlKCkpOwogICAgICAgICBtX2NvbnRleHQtPnRyYW5zZm9ybUZlZWRi
YWNrVmFyeWluZ3MocHJvZ3JhbSwgdmFyeWluZ3MsIGJ1ZmZlck1vZGUpOwogICAgIH0KICAgICB2
b2lkIGdldFRyYW5zZm9ybUZlZWRiYWNrVmFyeWluZyh1aW50MzJfdCBwcm9ncmFtLCB1aW50MzJf
dCBpbmRleCwgQ29tcGxldGlvbkhhbmRsZXI8dm9pZChXZWJDb3JlOjpHcmFwaGljc0NvbnRleHRH
TDo6QWN0aXZlSW5mbyYmKT4mJiBjb21wbGV0aW9uSGFuZGxlcikKICAgICB7CiAgICAgICAgIFdl
YkNvcmU6OkdyYXBoaWNzQ29udGV4dEdMOjpBY3RpdmVJbmZvIGFyZzIgeyB9OwotICAgICAgICBh
c3NlcnRJc0N1cnJlbnQobV9zdHJlYW1UaHJlYWQpOworICAgICAgICBhc3NlcnRJc0N1cnJlbnQo
d29ya1F1ZXVlKCkpOwogICAgICAgICBtX2NvbnRleHQtPmdldFRyYW5zZm9ybUZlZWRiYWNrVmFy
eWluZyhwcm9ncmFtLCBpbmRleCwgYXJnMik7CiAgICAgICAgIGNvbXBsZXRpb25IYW5kbGVyKFdU
Rk1vdmUoYXJnMikpOwogICAgIH0KICAgICB2b2lkIHBhdXNlVHJhbnNmb3JtRmVlZGJhY2soKQog
ICAgIHsKLSAgICAgICAgYXNzZXJ0SXNDdXJyZW50KG1fc3RyZWFtVGhyZWFkKTsKKyAgICAgICAg
YXNzZXJ0SXNDdXJyZW50KHdvcmtRdWV1ZSgpKTsKICAgICAgICAgbV9jb250ZXh0LT5wYXVzZVRy
YW5zZm9ybUZlZWRiYWNrKCk7CiAgICAgfQogICAgIHZvaWQgcmVzdW1lVHJhbnNmb3JtRmVlZGJh
Y2soKQogICAgIHsKLSAgICAgICAgYXNzZXJ0SXNDdXJyZW50KG1fc3RyZWFtVGhyZWFkKTsKKyAg
ICAgICAgYXNzZXJ0SXNDdXJyZW50KHdvcmtRdWV1ZSgpKTsKICAgICAgICAgbV9jb250ZXh0LT5y
ZXN1bWVUcmFuc2Zvcm1GZWVkYmFjaygpOwogICAgIH0KICAgICB2b2lkIGJpbmRCdWZmZXJCYXNl
KHVpbnQzMl90IHRhcmdldCwgdWludDMyX3QgaW5kZXgsIHVpbnQzMl90IGJ1ZmZlcikKICAgICB7
Ci0gICAgICAgIGFzc2VydElzQ3VycmVudChtX3N0cmVhbVRocmVhZCk7CisgICAgICAgIGFzc2Vy
dElzQ3VycmVudCh3b3JrUXVldWUoKSk7CiAgICAgICAgIG1fY29udGV4dC0+YmluZEJ1ZmZlckJh
c2UodGFyZ2V0LCBpbmRleCwgYnVmZmVyKTsKICAgICB9CiAgICAgdm9pZCBiaW5kQnVmZmVyUmFu
Z2UodWludDMyX3QgdGFyZ2V0LCB1aW50MzJfdCBpbmRleCwgdWludDMyX3QgYnVmZmVyLCB1aW50
NjRfdCBvZmZzZXQsIHVpbnQ2NF90IGFyZzQpCiAgICAgewotICAgICAgICBhc3NlcnRJc0N1cnJl
bnQobV9zdHJlYW1UaHJlYWQpOworICAgICAgICBhc3NlcnRJc0N1cnJlbnQod29ya1F1ZXVlKCkp
OwogICAgICAgICBtX2NvbnRleHQtPmJpbmRCdWZmZXJSYW5nZSh0YXJnZXQsIGluZGV4LCBidWZm
ZXIsIHN0YXRpY19jYXN0PEdDR0xpbnRwdHI+KG9mZnNldCksIHN0YXRpY19jYXN0PEdDR0xzaXpl
aXB0cj4oYXJnNCkpOwogICAgIH0KICAgICB2b2lkIGdldFVuaWZvcm1JbmRpY2VzKHVpbnQzMl90
IHByb2dyYW0sIFZlY3RvcjxTdHJpbmc+JiYgdW5pZm9ybU5hbWVzLCBDb21wbGV0aW9uSGFuZGxl
cjx2b2lkKFZlY3Rvcjx1aW50MzJfdD4mJik+JiYgY29tcGxldGlvbkhhbmRsZXIpCiAgICAgewog
ICAgICAgICBWZWN0b3I8R0NHTHVpbnQ+IHJldHVyblZhbHVlID0geyB9OwotICAgICAgICBhc3Nl
cnRJc0N1cnJlbnQobV9zdHJlYW1UaHJlYWQpOworICAgICAgICBhc3NlcnRJc0N1cnJlbnQod29y
a1F1ZXVlKCkpOwogICAgICAgICByZXR1cm5WYWx1ZSA9IG1fY29udGV4dC0+Z2V0VW5pZm9ybUlu
ZGljZXMocHJvZ3JhbSwgdW5pZm9ybU5hbWVzKTsKICAgICAgICAgY29tcGxldGlvbkhhbmRsZXIo
V1RGTW92ZShyZXR1cm5WYWx1ZSkpOwogICAgIH0KICAgICB2b2lkIGdldEFjdGl2ZVVuaWZvcm1z
KHVpbnQzMl90IHByb2dyYW0sIFZlY3Rvcjx1aW50MzJfdD4mJiB1bmlmb3JtSW5kaWNlcywgdWlu
dDMyX3QgcG5hbWUsIENvbXBsZXRpb25IYW5kbGVyPHZvaWQoVmVjdG9yPGludDMyX3Q+JiYpPiYm
IGNvbXBsZXRpb25IYW5kbGVyKQogICAgIHsKICAgICAgICAgVmVjdG9yPEdDR0xpbnQ+IHJldHVy
blZhbHVlID0geyB9OwotICAgICAgICBhc3NlcnRJc0N1cnJlbnQobV9zdHJlYW1UaHJlYWQpOwor
ICAgICAgICBhc3NlcnRJc0N1cnJlbnQod29ya1F1ZXVlKCkpOwogICAgICAgICByZXR1cm5WYWx1
ZSA9IG1fY29udGV4dC0+Z2V0QWN0aXZlVW5pZm9ybXMocHJvZ3JhbSwgdW5pZm9ybUluZGljZXMs
IHBuYW1lKTsKICAgICAgICAgY29tcGxldGlvbkhhbmRsZXIoV1RGTW92ZShyZXR1cm5WYWx1ZSkp
OwogICAgIH0KICAgICB2b2lkIGdldFVuaWZvcm1CbG9ja0luZGV4KHVpbnQzMl90IHByb2dyYW0s
IFN0cmluZyYmIHVuaWZvcm1CbG9ja05hbWUsIENvbXBsZXRpb25IYW5kbGVyPHZvaWQodWludDMy
X3QpPiYmIGNvbXBsZXRpb25IYW5kbGVyKQogICAgIHsKICAgICAgICAgR0NHTHVpbnQgcmV0dXJu
VmFsdWUgPSB7IH07Ci0gICAgICAgIGFzc2VydElzQ3VycmVudChtX3N0cmVhbVRocmVhZCk7Cisg
ICAgICAgIGFzc2VydElzQ3VycmVudCh3b3JrUXVldWUoKSk7CiAgICAgICAgIHJldHVyblZhbHVl
ID0gbV9jb250ZXh0LT5nZXRVbmlmb3JtQmxvY2tJbmRleChwcm9ncmFtLCB1bmlmb3JtQmxvY2tO
YW1lKTsKICAgICAgICAgY29tcGxldGlvbkhhbmRsZXIocmV0dXJuVmFsdWUpOwogICAgIH0KICAg
ICB2b2lkIGdldEFjdGl2ZVVuaWZvcm1CbG9ja05hbWUodWludDMyX3QgcHJvZ3JhbSwgdWludDMy
X3QgdW5pZm9ybUJsb2NrSW5kZXgsIENvbXBsZXRpb25IYW5kbGVyPHZvaWQoU3RyaW5nJiYpPiYm
IGNvbXBsZXRpb25IYW5kbGVyKQogICAgIHsKICAgICAgICAgU3RyaW5nIHJldHVyblZhbHVlID0g
eyB9OwotICAgICAgICBhc3NlcnRJc0N1cnJlbnQobV9zdHJlYW1UaHJlYWQpOworICAgICAgICBh
c3NlcnRJc0N1cnJlbnQod29ya1F1ZXVlKCkpOwogICAgICAgICByZXR1cm5WYWx1ZSA9IG1fY29u
dGV4dC0+Z2V0QWN0aXZlVW5pZm9ybUJsb2NrTmFtZShwcm9ncmFtLCB1bmlmb3JtQmxvY2tJbmRl
eCk7CiAgICAgICAgIGNvbXBsZXRpb25IYW5kbGVyKFdURk1vdmUocmV0dXJuVmFsdWUpKTsKICAg
ICB9CiAgICAgdm9pZCB1bmlmb3JtQmxvY2tCaW5kaW5nKHVpbnQzMl90IHByb2dyYW0sIHVpbnQz
Ml90IHVuaWZvcm1CbG9ja0luZGV4LCB1aW50MzJfdCB1bmlmb3JtQmxvY2tCaW5kaW5nKQogICAg
IHsKLSAgICAgICAgYXNzZXJ0SXNDdXJyZW50KG1fc3RyZWFtVGhyZWFkKTsKKyAgICAgICAgYXNz
ZXJ0SXNDdXJyZW50KHdvcmtRdWV1ZSgpKTsKICAgICAgICAgbV9jb250ZXh0LT51bmlmb3JtQmxv
Y2tCaW5kaW5nKHByb2dyYW0sIHVuaWZvcm1CbG9ja0luZGV4LCB1bmlmb3JtQmxvY2tCaW5kaW5n
KTsKICAgICB9CiAgICAgdm9pZCBnZXRBY3RpdmVVbmlmb3JtQmxvY2tpdih1aW50MzJfdCBwcm9n
cmFtLCB1aW50MzJfdCB1bmlmb3JtQmxvY2tJbmRleCwgdWludDMyX3QgcG5hbWUsIHVpbnQ2NF90
IHBhcmFtc1NpemUsIENvbXBsZXRpb25IYW5kbGVyPHZvaWQoSVBDOjpBcnJheVJlZmVyZW5jZTxp
bnQzMl90Pik+JiYgY29tcGxldGlvbkhhbmRsZXIpCiAgICAgewogICAgICAgICBWZWN0b3I8R0NH
TGludCwgND4gcGFyYW1zKHN0YXRpY19jYXN0PHNpemVfdD4ocGFyYW1zU2l6ZSksIDApOwotICAg
ICAgICBhc3NlcnRJc0N1cnJlbnQobV9zdHJlYW1UaHJlYWQpOworICAgICAgICBhc3NlcnRJc0N1
cnJlbnQod29ya1F1ZXVlKCkpOwogICAgICAgICBtX2NvbnRleHQtPmdldEFjdGl2ZVVuaWZvcm1C
bG9ja2l2KHByb2dyYW0sIHVuaWZvcm1CbG9ja0luZGV4LCBwbmFtZSwgcGFyYW1zKTsKICAgICAg
ICAgY29tcGxldGlvbkhhbmRsZXIoSVBDOjpBcnJheVJlZmVyZW5jZTxpbnQzMl90PihyZWludGVy
cHJldF9jYXN0PGludDMyX3QqPihwYXJhbXMuZGF0YSgpKSwgcGFyYW1zLnNpemUoKSkpOwogICAg
IH0KICAgICB2b2lkIGdldEdyYXBoaWNzUmVzZXRTdGF0dXNBUkIoQ29tcGxldGlvbkhhbmRsZXI8
dm9pZChpbnQzMl90KT4mJiBjb21wbGV0aW9uSGFuZGxlcikKICAgICB7CiAgICAgICAgIEdDR0xp
bnQgcmV0dXJuVmFsdWUgPSB7IH07Ci0gICAgICAgIGFzc2VydElzQ3VycmVudChtX3N0cmVhbVRo
cmVhZCk7CisgICAgICAgIGFzc2VydElzQ3VycmVudCh3b3JrUXVldWUoKSk7CiAgICAgICAgIHJl
dHVyblZhbHVlID0gbV9jb250ZXh0LT5nZXRHcmFwaGljc1Jlc2V0U3RhdHVzQVJCKCk7CiAgICAg
ICAgIGNvbXBsZXRpb25IYW5kbGVyKHJldHVyblZhbHVlKTsKICAgICB9CiAgICAgdm9pZCBnZXRU
cmFuc2xhdGVkU2hhZGVyU291cmNlQU5HTEUodWludDMyX3QgYXJnMCwgQ29tcGxldGlvbkhhbmRs
ZXI8dm9pZChTdHJpbmcmJik+JiYgY29tcGxldGlvbkhhbmRsZXIpCiAgICAgewogICAgICAgICBT
dHJpbmcgcmV0dXJuVmFsdWUgPSB7IH07Ci0gICAgICAgIGFzc2VydElzQ3VycmVudChtX3N0cmVh
bVRocmVhZCk7CisgICAgICAgIGFzc2VydElzQ3VycmVudCh3b3JrUXVldWUoKSk7CiAgICAgICAg
IHJldHVyblZhbHVlID0gbV9jb250ZXh0LT5nZXRUcmFuc2xhdGVkU2hhZGVyU291cmNlQU5HTEUo
YXJnMCk7CiAgICAgICAgIGNvbXBsZXRpb25IYW5kbGVyKFdURk1vdmUocmV0dXJuVmFsdWUpKTsK
ICAgICB9CiAgICAgdm9pZCBkcmF3QnVmZmVyc0VYVChJUEM6OkFycmF5UmVmZXJlbmNlPHVpbnQz
Ml90PiYmIGJ1ZnMpCiAgICAgewotICAgICAgICBhc3NlcnRJc0N1cnJlbnQobV9zdHJlYW1UaHJl
YWQpOworICAgICAgICBhc3NlcnRJc0N1cnJlbnQod29ya1F1ZXVlKCkpOwogICAgICAgICBtX2Nv
bnRleHQtPmRyYXdCdWZmZXJzRVhUKG1ha2VHQ0dMU3BhbihyZWludGVycHJldF9jYXN0PGNvbnN0
IEdDR0xlbnVtKj4oYnVmcy5kYXRhKCkpLCBidWZzLnNpemUoKSkpOwogICAgIH0KICAgICB2b2lk
IGdldEludGVybmFsZm9ybWF0aXYodWludDMyX3QgdGFyZ2V0LCB1aW50MzJfdCBpbnRlcm5hbGZv
cm1hdCwgdWludDMyX3QgcG5hbWUsIHVpbnQ2NF90IHBhcmFtc1NpemUsIENvbXBsZXRpb25IYW5k
bGVyPHZvaWQoSVBDOjpBcnJheVJlZmVyZW5jZTxpbnQzMl90Pik+JiYgY29tcGxldGlvbkhhbmRs
ZXIpCiAgICAgewogICAgICAgICBWZWN0b3I8R0NHTGludCwgND4gcGFyYW1zKHN0YXRpY19jYXN0
PHNpemVfdD4ocGFyYW1zU2l6ZSksIDApOwotICAgICAgICBhc3NlcnRJc0N1cnJlbnQobV9zdHJl
YW1UaHJlYWQpOworICAgICAgICBhc3NlcnRJc0N1cnJlbnQod29ya1F1ZXVlKCkpOwogICAgICAg
ICBtX2NvbnRleHQtPmdldEludGVybmFsZm9ybWF0aXYodGFyZ2V0LCBpbnRlcm5hbGZvcm1hdCwg
cG5hbWUsIHBhcmFtcyk7CiAgICAgICAgIGNvbXBsZXRpb25IYW5kbGVyKElQQzo6QXJyYXlSZWZl
cmVuY2U8aW50MzJfdD4ocmVpbnRlcnByZXRfY2FzdDxpbnQzMl90Kj4ocGFyYW1zLmRhdGEoKSks
IHBhcmFtcy5zaXplKCkpKTsKICAgICB9CiAgICAgdm9pZCBtdWx0aURyYXdBcnJheXNBTkdMRSh1
aW50MzJfdCBtb2RlLCBJUEM6OkFycmF5UmVmZXJlbmNlPGludDMyX3Q+JiYgZmlyc3RzLCBJUEM6
OkFycmF5UmVmZXJlbmNlPGludDMyX3Q+JiYgY291bnRzLCBpbnQzMl90IGRyYXdjb3VudCkKICAg
ICB7Ci0gICAgICAgIGFzc2VydElzQ3VycmVudChtX3N0cmVhbVRocmVhZCk7CisgICAgICAgIGFz
c2VydElzQ3VycmVudCh3b3JrUXVldWUoKSk7CiAgICAgICAgIG1fY29udGV4dC0+bXVsdGlEcmF3
QXJyYXlzQU5HTEUobW9kZSwgbWFrZUdDR0xTcGFuKHJlaW50ZXJwcmV0X2Nhc3Q8Y29uc3QgR0NH
TGludCo+KGZpcnN0cy5kYXRhKCkpLCBmaXJzdHMuc2l6ZSgpKSwgbWFrZUdDR0xTcGFuKHJlaW50
ZXJwcmV0X2Nhc3Q8Y29uc3QgR0NHTHNpemVpKj4oY291bnRzLmRhdGEoKSksIGNvdW50cy5zaXpl
KCkpLCBkcmF3Y291bnQpOwogICAgIH0KICAgICB2b2lkIG11bHRpRHJhd0FycmF5c0luc3RhbmNl
ZEFOR0xFKHVpbnQzMl90IG1vZGUsIElQQzo6QXJyYXlSZWZlcmVuY2U8aW50MzJfdD4mJiBmaXJz
dHMsIElQQzo6QXJyYXlSZWZlcmVuY2U8aW50MzJfdD4mJiBjb3VudHMsIElQQzo6QXJyYXlSZWZl
cmVuY2U8aW50MzJfdD4mJiBpbnN0YW5jZUNvdW50cywgaW50MzJfdCBkcmF3Y291bnQpCiAgICAg
ewotICAgICAgICBhc3NlcnRJc0N1cnJlbnQobV9zdHJlYW1UaHJlYWQpOworICAgICAgICBhc3Nl
cnRJc0N1cnJlbnQod29ya1F1ZXVlKCkpOwogICAgICAgICBtX2NvbnRleHQtPm11bHRpRHJhd0Fy
cmF5c0luc3RhbmNlZEFOR0xFKG1vZGUsIG1ha2VHQ0dMU3BhbihyZWludGVycHJldF9jYXN0PGNv
bnN0IEdDR0xpbnQqPihmaXJzdHMuZGF0YSgpKSwgZmlyc3RzLnNpemUoKSksIG1ha2VHQ0dMU3Bh
bihyZWludGVycHJldF9jYXN0PGNvbnN0IEdDR0xzaXplaSo+KGNvdW50cy5kYXRhKCkpLCBjb3Vu
dHMuc2l6ZSgpKSwgbWFrZUdDR0xTcGFuKHJlaW50ZXJwcmV0X2Nhc3Q8Y29uc3QgR0NHTHNpemVp
Kj4oaW5zdGFuY2VDb3VudHMuZGF0YSgpKSwgaW5zdGFuY2VDb3VudHMuc2l6ZSgpKSwgZHJhd2Nv
dW50KTsKICAgICB9CiAgICAgdm9pZCBtdWx0aURyYXdFbGVtZW50c0FOR0xFKHVpbnQzMl90IG1v
ZGUsIElQQzo6QXJyYXlSZWZlcmVuY2U8aW50MzJfdD4mJiBjb3VudHMsIHVpbnQzMl90IHR5cGUs
IElQQzo6QXJyYXlSZWZlcmVuY2U8aW50MzJfdD4mJiBvZmZzZXRzLCBpbnQzMl90IGRyYXdjb3Vu
dCkKICAgICB7Ci0gICAgICAgIGFzc2VydElzQ3VycmVudChtX3N0cmVhbVRocmVhZCk7CisgICAg
ICAgIGFzc2VydElzQ3VycmVudCh3b3JrUXVldWUoKSk7CiAgICAgICAgIG1fY29udGV4dC0+bXVs
dGlEcmF3RWxlbWVudHNBTkdMRShtb2RlLCBtYWtlR0NHTFNwYW4ocmVpbnRlcnByZXRfY2FzdDxj
b25zdCBHQ0dMc2l6ZWkqPihjb3VudHMuZGF0YSgpKSwgY291bnRzLnNpemUoKSksIHR5cGUsIG1h
a2VHQ0dMU3BhbihyZWludGVycHJldF9jYXN0PGNvbnN0IEdDR0xpbnQqPihvZmZzZXRzLmRhdGEo
KSksIG9mZnNldHMuc2l6ZSgpKSwgZHJhd2NvdW50KTsKICAgICB9CiAgICAgdm9pZCBtdWx0aURy
YXdFbGVtZW50c0luc3RhbmNlZEFOR0xFKHVpbnQzMl90IG1vZGUsIElQQzo6QXJyYXlSZWZlcmVu
Y2U8aW50MzJfdD4mJiBjb3VudHMsIHVpbnQzMl90IHR5cGUsIElQQzo6QXJyYXlSZWZlcmVuY2U8
aW50MzJfdD4mJiBvZmZzZXRzLCBJUEM6OkFycmF5UmVmZXJlbmNlPGludDMyX3Q+JiYgaW5zdGFu
Y2VDb3VudHMsIGludDMyX3QgZHJhd2NvdW50KQogICAgIHsKLSAgICAgICAgYXNzZXJ0SXNDdXJy
ZW50KG1fc3RyZWFtVGhyZWFkKTsKKyAgICAgICAgYXNzZXJ0SXNDdXJyZW50KHdvcmtRdWV1ZSgp
KTsKICAgICAgICAgbV9jb250ZXh0LT5tdWx0aURyYXdFbGVtZW50c0luc3RhbmNlZEFOR0xFKG1v
ZGUsIG1ha2VHQ0dMU3BhbihyZWludGVycHJldF9jYXN0PGNvbnN0IEdDR0xzaXplaSo+KGNvdW50
cy5kYXRhKCkpLCBjb3VudHMuc2l6ZSgpKSwgdHlwZSwgbWFrZUdDR0xTcGFuKHJlaW50ZXJwcmV0
X2Nhc3Q8Y29uc3QgR0NHTGludCo+KG9mZnNldHMuZGF0YSgpKSwgb2Zmc2V0cy5zaXplKCkpLCBt
YWtlR0NHTFNwYW4ocmVpbnRlcnByZXRfY2FzdDxjb25zdCBHQ0dMc2l6ZWkqPihpbnN0YW5jZUNv
dW50cy5kYXRhKCkpLCBpbnN0YW5jZUNvdW50cy5zaXplKCkpLCBkcmF3Y291bnQpOwogICAgIH0K
ICAgICB2b2lkIHBhaW50UmVuZGVyaW5nUmVzdWx0c1RvUGl4ZWxCdWZmZXIoQ29tcGxldGlvbkhh
bmRsZXI8dm9pZChzdGQ6Om9wdGlvbmFsPFdlYkNvcmU6OlBpeGVsQnVmZmVyPiYmKT4mJiBjb21w
bGV0aW9uSGFuZGxlcikKICAgICB7CiAgICAgICAgIHN0ZDo6b3B0aW9uYWw8V2ViQ29yZTo6UGl4
ZWxCdWZmZXI+IHJldHVyblZhbHVlID0geyB9OwotICAgICAgICBhc3NlcnRJc0N1cnJlbnQobV9z
dHJlYW1UaHJlYWQpOworICAgICAgICBhc3NlcnRJc0N1cnJlbnQod29ya1F1ZXVlKCkpOwogICAg
ICAgICByZXR1cm5WYWx1ZSA9IG1fY29udGV4dC0+cGFpbnRSZW5kZXJpbmdSZXN1bHRzVG9QaXhl
bEJ1ZmZlcigpOwogICAgICAgICBjb21wbGV0aW9uSGFuZGxlcihXVEZNb3ZlKHJldHVyblZhbHVl
KSk7CiAgICAgfQpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYktpdC9HUFVQcm9jZXNzL2dyYXBoaWNz
L1dlYkdQVS9SZW1vdGVHUFUuY3BwIGIvU291cmNlL1dlYktpdC9HUFVQcm9jZXNzL2dyYXBoaWNz
L1dlYkdQVS9SZW1vdGVHUFUuY3BwCmluZGV4IDRkY2FlOGQwOWU4YTg5ZTUzYzNjN2M2ZGI5NDI5
ODdkNjAwZGUzNzkuLjJjOWEwZjk1NWQ5ODA4OWE3NzVmZWQyOGEwZjNkYWFkZDgzZGI0YmYgMTAw
NjQ0Ci0tLSBhL1NvdXJjZS9XZWJLaXQvR1BVUHJvY2Vzcy9ncmFwaGljcy9XZWJHUFUvUmVtb3Rl
R1BVLmNwcAorKysgYi9Tb3VyY2UvV2ViS2l0L0dQVVByb2Nlc3MvZ3JhcGhpY3MvV2ViR1BVL1Jl
bW90ZUdQVS5jcHAKQEAgLTQ3LDcgKzQ3LDcgQEAgbmFtZXNwYWNlIFdlYktpdCB7CiBSZW1vdGVH
UFU6OlJlbW90ZUdQVShXZWJHUFVJZGVudGlmaWVyIGlkZW50aWZpZXIsIEdQVUNvbm5lY3Rpb25U
b1dlYlByb2Nlc3MmIGdwdUNvbm5lY3Rpb25Ub1dlYlByb2Nlc3MsIFJlbW90ZVJlbmRlcmluZ0Jh
Y2tlbmQmIHJlbmRlcmluZ0JhY2tlbmQsIElQQzo6U3RyZWFtQ29ubmVjdGlvbkJ1ZmZlciYmIHN0
cmVhbSkKICAgICA6IG1fZ3B1Q29ubmVjdGlvblRvV2ViUHJvY2VzcyhncHVDb25uZWN0aW9uVG9X
ZWJQcm9jZXNzKQogICAgICwgbV93b3JrUXVldWUoSVBDOjpTdHJlYW1Db25uZWN0aW9uV29ya1F1
ZXVlOjpjcmVhdGUoIldlYkdQVSB3b3JrIHF1ZXVlIikpCi0gICAgLCBtX3N0cmVhbUNvbm5lY3Rp
b24oSVBDOjpTdHJlYW1TZXJ2ZXJDb25uZWN0aW9uOjpjcmVhdGUoZ3B1Q29ubmVjdGlvblRvV2Vi
UHJvY2Vzcy5jb25uZWN0aW9uKCksIFdURk1vdmUoc3RyZWFtKSwgbV93b3JrUXVldWUpKQorICAg
ICwgbV9zdHJlYW1Db25uZWN0aW9uKElQQzo6U3RyZWFtU2VydmVyQ29ubmVjdGlvbjo6Y3JlYXRl
KGdwdUNvbm5lY3Rpb25Ub1dlYlByb2Nlc3MuY29ubmVjdGlvbigpLCBXVEZNb3ZlKHN0cmVhbSks
IHdvcmtRdWV1ZSgpKSkKICAgICAsIG1fb2JqZWN0SGVhcChXZWJHUFU6Ok9iamVjdEhlYXA6OmNy
ZWF0ZSgpKQogICAgICwgbV9pZGVudGlmaWVyKGlkZW50aWZpZXIpCiAgICAgLCBtX3JlbmRlcmlu
Z0JhY2tlbmQocmVuZGVyaW5nQmFja2VuZCkKQEAgLTYwLDcgKzYwLDcgQEAgUmVtb3RlR1BVOjp+
UmVtb3RlR1BVKCkgPSBkZWZhdWx0Owogdm9pZCBSZW1vdGVHUFU6OmluaXRpYWxpemUoKQogewog
ICAgIGFzc2VydElzTWFpblJ1bkxvb3AoKTsKLSAgICBtX3dvcmtRdWV1ZS0+ZGlzcGF0Y2goW3By
b3RlY3RlZFRoaXMgPSBSZWYgeyAqdGhpcyB9XSgpIG11dGFibGUgeworICAgIHdvcmtRdWV1ZSgp
LmRpc3BhdGNoKFtwcm90ZWN0ZWRUaGlzID0gUmVmIHsgKnRoaXMgfV0oKSBtdXRhYmxlIHsKICAg
ICAgICAgcHJvdGVjdGVkVGhpcy0+d29ya1F1ZXVlSW5pdGlhbGl6ZSgpOwogICAgIH0pOwogICAg
IG1fc3RyZWFtQ29ubmVjdGlvbi0+c3RhcnRSZWNlaXZpbmdNZXNzYWdlcygqdGhpcywgTWVzc2Fn
ZXM6OlJlbW90ZUdQVTo6bWVzc2FnZVJlY2VpdmVyTmFtZSgpLCBtX2lkZW50aWZpZXIudG9VSW50
NjQoKSk7CkBAIC03MCwxNSArNzAsMTQgQEAgdm9pZCBSZW1vdGVHUFU6OnN0b3BMaXN0ZW5pbmdG
b3JJUEMoUmVmPFJlbW90ZUdQVT4mJiByZWZGcm9tQ29ubmVjdGlvbikKIHsKICAgICBhc3NlcnRJ
c01haW5SdW5Mb29wKCk7CiAgICAgbV9zdHJlYW1Db25uZWN0aW9uLT5zdG9wUmVjZWl2aW5nTWVz
c2FnZXMoTWVzc2FnZXM6OlJlbW90ZUdQVTo6bWVzc2FnZVJlY2VpdmVyTmFtZSgpLCBtX2lkZW50
aWZpZXIudG9VSW50NjQoKSk7Ci0gICAgbV93b3JrUXVldWUtPmRpc3BhdGNoKFtwcm90ZWN0ZWRU
aGlzID0gV1RGTW92ZShyZWZGcm9tQ29ubmVjdGlvbildKCkgeworICAgIHdvcmtRdWV1ZSgpLmRp
c3BhdGNoKFtwcm90ZWN0ZWRUaGlzID0gV1RGTW92ZShyZWZGcm9tQ29ubmVjdGlvbildKCkgewog
ICAgICAgICBwcm90ZWN0ZWRUaGlzLT53b3JrUXVldWVVbmluaXRpYWxpemUoKTsKICAgICB9KTsK
IH0KIAogdm9pZCBSZW1vdGVHUFU6OndvcmtRdWV1ZUluaXRpYWxpemUoKQogewotICAgIG1fc3Ry
ZWFtVGhyZWFkLnJlc2V0KCk7Ci0gICAgYXNzZXJ0SXNDdXJyZW50KG1fc3RyZWFtVGhyZWFkKTsK
KyAgICBhc3NlcnRJc0N1cnJlbnQod29ya1F1ZXVlKCkpOwogI2lmIEhBVkUoV0VCR1BVX0lNUExF
TUVOVEFUSU9OKQogICAgIGF1dG8gYmFja2luZyA9IFBBTDo6V2ViR1BVOjpHUFVJbXBsOjpjcmVh
dGUoKTsKICNlbHNlCkBAIC04NiwyMSArODUsMjEgQEAgdm9pZCBSZW1vdGVHUFU6OndvcmtRdWV1
ZUluaXRpYWxpemUoKQogI2VuZGlmCiAgICAgaWYgKGJhY2tpbmcpIHsKICAgICAgICAgbV9iYWNr
aW5nID0gYmFja2luZy5yZWxlYXNlTm9uTnVsbCgpOwotICAgICAgICBzZW5kKE1lc3NhZ2VzOjpS
ZW1vdGVHUFVQcm94eTo6V2FzQ3JlYXRlZCh0cnVlLCBtX3dvcmtRdWV1ZS0+d2FrZVVwU2VtYXBo
b3JlKCkpKTsKKyAgICAgICAgc2VuZChNZXNzYWdlczo6UmVtb3RlR1BVUHJveHk6Oldhc0NyZWF0
ZWQodHJ1ZSwgd29ya1F1ZXVlKCkud2FrZVVwU2VtYXBob3JlKCkpKTsKICAgICB9IGVsc2UKLSAg
ICAgICAgc2VuZChNZXNzYWdlczo6UmVtb3RlR1BVUHJveHk6Oldhc0NyZWF0ZWQoZmFsc2UsIG1f
d29ya1F1ZXVlLT53YWtlVXBTZW1hcGhvcmUoKSkpOworICAgICAgICBzZW5kKE1lc3NhZ2VzOjpS
ZW1vdGVHUFVQcm94eTo6V2FzQ3JlYXRlZChmYWxzZSwgd29ya1F1ZXVlKCkud2FrZVVwU2VtYXBo
b3JlKCkpKTsKIH0KIAogdm9pZCBSZW1vdGVHUFU6OndvcmtRdWV1ZVVuaW5pdGlhbGl6ZSgpCiB7
Ci0gICAgYXNzZXJ0SXNDdXJyZW50KG1fc3RyZWFtVGhyZWFkKTsKKyAgICBhc3NlcnRJc0N1cnJl
bnQod29ya1F1ZXVlKCkpOwogICAgIG1fc3RyZWFtQ29ubmVjdGlvbiA9IG51bGxwdHI7CiAgICAg
bV9vYmplY3RIZWFwLT5jbGVhcigpOwogfQogCiB2b2lkIFJlbW90ZUdQVTo6cmVxdWVzdEFkYXB0
ZXIoY29uc3QgV2ViR1BVOjpSZXF1ZXN0QWRhcHRlck9wdGlvbnMmIG9wdGlvbnMsIFdlYkdQVUlk
ZW50aWZpZXIgaWRlbnRpZmllciwgV1RGOjpDb21wbGV0aW9uSGFuZGxlcjx2b2lkKHN0ZDo6b3B0
aW9uYWw8UmVxdWVzdEFkYXB0ZXJSZXNwb25zZT4mJik+JiYgY2FsbGJhY2spCiB7Ci0gICAgYXNz
ZXJ0SXNDdXJyZW50KG1fc3RyZWFtVGhyZWFkKTsKKyAgICBhc3NlcnRJc0N1cnJlbnQod29ya1F1
ZXVlKCkpOwogICAgIEFTU0VSVChtX2JhY2tpbmcpOwogCiAgICAgYXV0byBjb252ZXJ0ZWRPcHRp
b25zID0gbV9vYmplY3RIZWFwLT5jb252ZXJ0RnJvbUJhY2tpbmcob3B0aW9ucyk7CmRpZmYgLS1n
aXQgYS9Tb3VyY2UvV2ViS2l0L0dQVVByb2Nlc3MvZ3JhcGhpY3MvV2ViR1BVL1JlbW90ZUdQVS5o
IGIvU291cmNlL1dlYktpdC9HUFVQcm9jZXNzL2dyYXBoaWNzL1dlYkdQVS9SZW1vdGVHUFUuaApp
bmRleCBjMDIxMmYwMTUwYzQ0NTUyMzUyY2UwYTNjNGNmNmZiZGQwMmE0YmExLi5hMTUxNDgzNTI5
ZTJjNGNkM2U5OGJkMmZjMjZkNTZjOThhNGNkOTBkIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViS2l0
L0dQVVByb2Nlc3MvZ3JhcGhpY3MvV2ViR1BVL1JlbW90ZUdQVS5oCisrKyBiL1NvdXJjZS9XZWJL
aXQvR1BVUHJvY2Vzcy9ncmFwaGljcy9XZWJHUFUvUmVtb3RlR1BVLmgKQEAgLTEyMiw2ICsxMjIs
NyBAQCBwcml2YXRlOgogICAgIFJlbW90ZUdQVSYgb3BlcmF0b3I9KFJlbW90ZUdQVSYmKSA9IGRl
bGV0ZTsKIAogICAgIHZvaWQgaW5pdGlhbGl6ZSgpOworICAgIElQQzo6U3RyZWFtQ29ubmVjdGlv
bldvcmtRdWV1ZSYgd29ya1F1ZXVlKCkgY29uc3QgeyByZXR1cm4gbV93b3JrUXVldWU7IH0KICAg
ICB2b2lkIHdvcmtRdWV1ZUluaXRpYWxpemUoKTsKICAgICB2b2lkIHdvcmtRdWV1ZVVuaW5pdGlh
bGl6ZSgpOwogCkBAIC0xMzgsMTEgKzEzOSwxMCBAQCBwcml2YXRlOgogICAgIFdlYWtQdHI8R1BV
Q29ubmVjdGlvblRvV2ViUHJvY2Vzcz4gbV9ncHVDb25uZWN0aW9uVG9XZWJQcm9jZXNzOwogICAg
IFJlZjxJUEM6OlN0cmVhbUNvbm5lY3Rpb25Xb3JrUXVldWU+IG1fd29ya1F1ZXVlOwogICAgIFJl
ZlB0cjxJUEM6OlN0cmVhbVNlcnZlckNvbm5lY3Rpb24+IG1fc3RyZWFtQ29ubmVjdGlvbjsKLSAg
ICBSZWZQdHI8UEFMOjpXZWJHUFU6OkdQVT4gbV9iYWNraW5nIFdURl9HVUFSREVEX0JZX0NBUEFC
SUxJVFkobV9zdHJlYW1UaHJlYWQpOwotICAgIFJlZjxXZWJHUFU6Ok9iamVjdEhlYXA+IG1fb2Jq
ZWN0SGVhcCBXVEZfR1VBUkRFRF9CWV9DQVBBQklMSVRZKG1fc3RyZWFtVGhyZWFkKTsKKyAgICBS
ZWZQdHI8UEFMOjpXZWJHUFU6OkdQVT4gbV9iYWNraW5nIFdURl9HVUFSREVEX0JZX0NBUEFCSUxJ
VFkod29ya1F1ZXVlKCkpOworICAgIFJlZjxXZWJHUFU6Ok9iamVjdEhlYXA+IG1fb2JqZWN0SGVh
cCBXVEZfR1VBUkRFRF9CWV9DQVBBQklMSVRZKHdvcmtRdWV1ZSgpKTsKICAgICBjb25zdCBXZWJH
UFVJZGVudGlmaWVyIG1faWRlbnRpZmllcjsKICAgICBSZWY8UmVtb3RlUmVuZGVyaW5nQmFja2Vu
ZD4gbV9yZW5kZXJpbmdCYWNrZW5kOwotICAgIE5PX1VOSVFVRV9BRERSRVNTIFRocmVhZEFzc2Vy
dGlvbiBtX3N0cmVhbVRocmVhZDsKICAgICBjb25zdCBXZWJDb3JlOjpQcm9jZXNzSWRlbnRpZmll
ciBtX3dlYlByb2Nlc3NJZGVudGlmaWVyOwogfTsKIApkaWZmIC0tZ2l0IGEvU291cmNlL1dlYktp
dC9HUFVQcm9jZXNzL21lZGlhL1JlbW90ZVZpZGVvRnJhbWVPYmplY3RIZWFwLmNwcCBiL1NvdXJj
ZS9XZWJLaXQvR1BVUHJvY2Vzcy9tZWRpYS9SZW1vdGVWaWRlb0ZyYW1lT2JqZWN0SGVhcC5jcHAK
aW5kZXggNTI5YzI3MmVmNDcxNDQ5NDYzYzExOGYyZDU3MDcyNzcxYjM4ZTJhNS4uYWNhNTY1NTNk
YWE2NDgzY2NhMWFkMDEzZGQwZTJjMzE0YzI3ZDg5YSAxMDA2NDQKLS0tIGEvU291cmNlL1dlYktp
dC9HUFVQcm9jZXNzL21lZGlhL1JlbW90ZVZpZGVvRnJhbWVPYmplY3RIZWFwLmNwcAorKysgYi9T
b3VyY2UvV2ViS2l0L0dQVVByb2Nlc3MvbWVkaWEvUmVtb3RlVmlkZW9GcmFtZU9iamVjdEhlYXAu
Y3BwCkBAIC01NSwxMiArNTUsMTEgQEAgUmVtb3RlVmlkZW9GcmFtZU9iamVjdEhlYXA6OlJlbW90
ZVZpZGVvRnJhbWVPYmplY3RIZWFwKEdQVUNvbm5lY3Rpb25Ub1dlYlByb2Nlc3MKIFJlbW90ZVZp
ZGVvRnJhbWVPYmplY3RIZWFwOjp+UmVtb3RlVmlkZW9GcmFtZU9iamVjdEhlYXAoKQogewogICAg
IEFTU0VSVCghbV9ncHVDb25uZWN0aW9uVG9XZWJQcm9jZXNzKTsKLSAgICBtX2NvbnN1bWVUaHJl
YWQucmVzZXQoKTsKIH0KIAogdm9pZCBSZW1vdGVWaWRlb0ZyYW1lT2JqZWN0SGVhcDo6c3RvcExp
c3RlbmluZ0ZvcklQQyhSZWY8UmVtb3RlVmlkZW9GcmFtZU9iamVjdEhlYXA+JiYgcmVmRnJvbUNv
bm5lY3Rpb24pCiB7Ci0gICAgYXNzZXJ0SXNDdXJyZW50KG1fY29uc3VtZVRocmVhZCk7CisgICAg
YXNzZXJ0SXNNYWluVGhyZWFkKCk7CiAjaWYgUExBVEZPUk0oQ09DT0EpCiAgICAgbV9zaGFyZWRW
aWRlb0ZyYW1lV3JpdGVyLmRpc2FibGUoKTsKICNlbmRpZgpAQCAtODQsNyArODMsNyBAQCBSZW1v
dGVWaWRlb0ZyYW1lSWRlbnRpZmllciBSZW1vdGVWaWRlb0ZyYW1lT2JqZWN0SGVhcDo6Y3JlYXRl
UmVtb3RlVmlkZW9GcmFtZShSZQogCiB2b2lkIFJlbW90ZVZpZGVvRnJhbWVPYmplY3RIZWFwOjpy
ZWxlYXNlVmlkZW9GcmFtZShSZW1vdGVWaWRlb0ZyYW1lV3JpdGVSZWZlcmVuY2UmJiB3cml0ZSkK
IHsKLSAgICBhc3NlcnRJc0N1cnJlbnQobV9jb25zdW1lVGhyZWFkKTsKKyAgICBhc3NlcnRJc01h
aW5UaHJlYWQoKTsKICAgICByZXRpcmVSZW1vdmUoV1RGTW92ZSh3cml0ZSkpOwogfQogCmRpZmYg
LS1naXQgYS9Tb3VyY2UvV2ViS2l0L0dQVVByb2Nlc3MvbWVkaWEvUmVtb3RlVmlkZW9GcmFtZU9i
amVjdEhlYXAuaCBiL1NvdXJjZS9XZWJLaXQvR1BVUHJvY2Vzcy9tZWRpYS9SZW1vdGVWaWRlb0Zy
YW1lT2JqZWN0SGVhcC5oCmluZGV4IDE2MmE5NDI4MjlhNTlkZTRiYzI3MjgzMjIxMmQzNDY4ZGU1
NTRlNDguLjM1ZDBlNTI3OTM0MmQyZmZjNzFmYzExNjE2ZjAxODY5YTIyMTUxODggMTAwNjQ0Ci0t
LSBhL1NvdXJjZS9XZWJLaXQvR1BVUHJvY2Vzcy9tZWRpYS9SZW1vdGVWaWRlb0ZyYW1lT2JqZWN0
SGVhcC5oCisrKyBiL1NvdXJjZS9XZWJLaXQvR1BVUHJvY2Vzcy9tZWRpYS9SZW1vdGVWaWRlb0Zy
YW1lT2JqZWN0SGVhcC5oCkBAIC02NCw5ICs2NCw4IEBAIHByaXZhdGU6CiAgICAgdm9pZCBnZXRW
aWRlb0ZyYW1lQnVmZmVyKFJlbW90ZVZpZGVvRnJhbWVSZWFkUmVmZXJlbmNlJiYpOwogI2VuZGlm
CiAKLSAgICBHUFVDb25uZWN0aW9uVG9XZWJQcm9jZXNzKiBtX2dwdUNvbm5lY3Rpb25Ub1dlYlBy
b2Nlc3MgV1RGX0dVQVJERURfQllfQ0FQQUJJTElUWShtX2NvbnN1bWVUaHJlYWQpOworICAgIEdQ
VUNvbm5lY3Rpb25Ub1dlYlByb2Nlc3MqIG1fZ3B1Q29ubmVjdGlvblRvV2ViUHJvY2VzcyBXVEZf
R1VBUkRFRF9CWV9DQVBBQklMSVRZKG1haW5UaHJlYWQpOwogICAgIGNvbnN0IFJlZjxJUEM6OkNv
bm5lY3Rpb24+IG1fY29ubmVjdGlvbjsKLSAgICBUaHJlYWRBc3NlcnRpb24gbV9jb25zdW1lVGhy
ZWFkIE5PX1VOSVFVRV9BRERSRVNTOwogI2lmIFBMQVRGT1JNKENPQ09BKQogICAgIFNoYXJlZFZp
ZGVvRnJhbWVXcml0ZXIgbV9zaGFyZWRWaWRlb0ZyYW1lV3JpdGVyOwogI2VuZGlmCmRpZmYgLS1n
aXQgYS9Tb3VyY2UvV2ViS2l0L1BsYXRmb3JtL0lQQy9TdHJlYW1Db25uZWN0aW9uV29ya1F1ZXVl
LmNwcCBiL1NvdXJjZS9XZWJLaXQvUGxhdGZvcm0vSVBDL1N0cmVhbUNvbm5lY3Rpb25Xb3JrUXVl
dWUuY3BwCmluZGV4IGQ5YTIwZDE0OGE4YmEwNWIxNmQ2N2E1OTkyMTA0YTU5ZDk0NzdlZjUuLmJl
NGY1NGQwNzlmNTkzNzIwZGIzZmIwYWMwNzIwNTQ1N2MyN2FkYzEgMTAwNjQ0Ci0tLSBhL1NvdXJj
ZS9XZWJLaXQvUGxhdGZvcm0vSVBDL1N0cmVhbUNvbm5lY3Rpb25Xb3JrUXVldWUuY3BwCisrKyBi
L1NvdXJjZS9XZWJLaXQvUGxhdGZvcm0vSVBDL1N0cmVhbUNvbm5lY3Rpb25Xb3JrUXVldWUuY3Bw
CkBAIC0xMzYsNCArMTM2LDEyIEBAIHZvaWQgU3RyZWFtQ29ubmVjdGlvbldvcmtRdWV1ZTo6cHJv
Y2Vzc1N0cmVhbXMoKQogICAgIH0gd2hpbGUgKGhhc01vcmVUb1Byb2Nlc3MpOwogfQogCisjaWYg
QVNTRVJUX0VOQUJMRUQKK3ZvaWQgU3RyZWFtQ29ubmVjdGlvbldvcmtRdWV1ZTo6YXNzZXJ0SXND
dXJyZW50KCkgY29uc3QKK3sKKyAgICBMb2NrZXIgbG9ja2VyIHsgbV9sb2NrIH07CisgICAgQVNT
RVJUKG1fcHJvY2Vzc2luZ1RocmVhZCk7CisgICAgYXNzZXJ0SXNDdXJyZW50KCptX3Byb2Nlc3Np
bmdUaHJlYWQpOworfQorI2VuZGlmCiB9CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViS2l0L1BsYXRm
b3JtL0lQQy9TdHJlYW1Db25uZWN0aW9uV29ya1F1ZXVlLmggYi9Tb3VyY2UvV2ViS2l0L1BsYXRm
b3JtL0lQQy9TdHJlYW1Db25uZWN0aW9uV29ya1F1ZXVlLmgKaW5kZXggYmU0YmMyYzQwMGY2MmM4
ZDQ3YzZlNmYyMGU0ZWZhYjZlNmM3N2IxZS4uZjdhYTA2YzFkZGU4MmIyYzZiMGU5YWZjZDdmZjg3
ZWIzYjRiYzZmMyAxMDA2NDQKLS0tIGEvU291cmNlL1dlYktpdC9QbGF0Zm9ybS9JUEMvU3RyZWFt
Q29ubmVjdGlvbldvcmtRdWV1ZS5oCisrKyBiL1NvdXJjZS9XZWJLaXQvUGxhdGZvcm0vSVBDL1N0
cmVhbUNvbm5lY3Rpb25Xb3JrUXVldWUuaApAQCAtMzYsNyArMzYsNyBAQAogCiBuYW1lc3BhY2Ug
SVBDIHsKIAotY2xhc3MgU3RyZWFtQ29ubmVjdGlvbldvcmtRdWV1ZSBmaW5hbCA6IHB1YmxpYyBG
dW5jdGlvbkRpc3BhdGNoZXIgeworY2xhc3MgV1RGX0NBUEFCSUxJVFkoImlzIGN1cnJlbnQiKSBT
dHJlYW1Db25uZWN0aW9uV29ya1F1ZXVlIGZpbmFsIDogcHVibGljIEZ1bmN0aW9uRGlzcGF0Y2hl
ciB7CiBwdWJsaWM6CiAgICAgc3RhdGljIFJlZjxTdHJlYW1Db25uZWN0aW9uV29ya1F1ZXVlPiBj
cmVhdGUoY29uc3QgY2hhciogbmFtZSkKICAgICB7CkBAIC01NywxNiArNTcsMjcgQEAgcHVibGlj
OgogcHJpdmF0ZToKICAgICB2b2lkIHN0YXJ0UHJvY2Vzc2luZ1RocmVhZCgpIFdURl9SRVFVSVJF
U19DQVBBQklMSVRZKG1fbG9jayk7CiAgICAgdm9pZCBwcm9jZXNzU3RyZWFtcygpOworI2lmIEFT
U0VSVF9FTkFCTEVECisgICAgdm9pZCBhc3NlcnRJc0N1cnJlbnQoKSBjb25zdDsKKyNlbmRpZgog
CiAgICAgY29uc3QgY2hhciogY29uc3QgbV9uYW1lOwogCiAgICAgU2VtYXBob3JlIG1fd2FrZVVw
U2VtYXBob3JlOwogICAgIHN0ZDo6YXRvbWljPGJvb2w+IG1fc2hvdWxkUXVpdCB7IGZhbHNlIH07
CiAKLSAgICBMb2NrIG1fbG9jazsKKyAgICBtdXRhYmxlIExvY2sgbV9sb2NrOwogICAgIFJlZlB0
cjxUaHJlYWQ+IG1fcHJvY2Vzc2luZ1RocmVhZCBXVEZfR1VBUkRFRF9CWV9DQVBBQklMSVRZKG1f
bG9jayk7CiAgICAgRGVxdWU8RnVuY3Rpb248dm9pZCgpPj4gbV9mdW5jdGlvbnMgV1RGX0dVQVJE
RURfQllfQ0FQQUJJTElUWShtX2xvY2spOwogICAgIEhhc2hDb3VudGVkU2V0PFJlZjxTdHJlYW1T
ZXJ2ZXJDb25uZWN0aW9uQmFzZT4+IG1fY29ubmVjdGlvbnMgV1RGX0dVQVJERURfQllfQ0FQQUJJ
TElUWShtX2xvY2spOworICAgIGZyaWVuZCB2b2lkIGFzc2VydElzQ3VycmVudChjb25zdCBTdHJl
YW1Db25uZWN0aW9uV29ya1F1ZXVlJik7CiB9OwogCitpbmxpbmUgdm9pZCBhc3NlcnRJc0N1cnJl
bnQoY29uc3QgU3RyZWFtQ29ubmVjdGlvbldvcmtRdWV1ZSYgcXVldWUpIFdURl9BU1NFUlRTX0FD
UVVJUkVEX0NBUEFCSUxJVFkocXVldWUpCit7CisjaWYgQVNTRVJUX0VOQUJMRUQKKyAgICBxdWV1
ZS5hc3NlcnRJc0N1cnJlbnQoKTsKKyNlbmRpZgorfQorCiB9CmRpZmYgLS1naXQgYS9Ub29scy9D
aGFuZ2VMb2cgYi9Ub29scy9DaGFuZ2VMb2cKaW5kZXggZGRjMGJlZTRiNzBjOTAyYzM2YzQzMTNj
ZDU4NDQzY2Y2ZmRmMzM4Yy4uZWU1NDhjNGUyZWMxNTEyMzMyYWFmNWM1ZmNjNTExMDYyMWQ3ODZj
OSAxMDA2NDQKLS0tIGEvVG9vbHMvQ2hhbmdlTG9nCisrKyBiL1Rvb2xzL0NoYW5nZUxvZwpAQCAt
MSwzICsxLDIyIEBACisyMDIyLTAyLTIxICBLaW1tbyBLaW5udW5lbiAgPGtraW5udW5lbkBhcHBs
ZS5jb20+CisKKyAgICAgICAgVGhyZWFkIHNhZmV0eSBhbmFseXNpcyB0byBhc3NlcnQgImNvZGUg
aXMgcnVuIHNlcXVlbnRpYWxseSIgaXMgbm90IHVzZWZ1bCB3aGVuIGNvZGUgaXMgbWFpbmx5IHJ1
biB3aXRoIFdvcmtRdWV1ZXMKKyAgICAgICAgaHR0cHM6Ly9idWdzLndlYmtpdC5vcmcvc2hvd19i
dWcuY2dpP2lkPTIzNjgzMgorCisgICAgICAgIFJldmlld2VkIGJ5IE5PQk9EWSAoT09QUyEpLgor
CisgICAgICAgIFRlc3QgdGhlIGFkZGVkIGZ1bmN0aW9uYWxpdHkgdG8gYmUgYWJsZSB0byB1c2Ug
YXNzZXJ0SXNDdXJyZW50KHRocmVhZC93b3JrUXVldWUpLgorCisgICAgICAgIEZpeCBXVEZfV29y
a1F1ZXVlLkRlc3Ryb3lEaXNwYXRjaGVkT25EaXNwYXRjaFF1ZXVlIHRlc3QsIGl0IGlzIG5vdyBh
YmxlIHRvIG1ha2UgdGhlIGFzc2VydGlvbiBjb3JyZWN0bHkuCisgICAgICAgIC0gVGhlIG9iamVj
dCBpcyBjcmVhdGVkIHNvbWV3aGVyZSB0aGF0IGlzIG5vdCB0aGUgdGVzdGVkIFdvcmtRdWV1ZQor
ICAgICAgICAtIFRoZSBvYmplY3QgaXMgZGVzdHJveWVkIGluIHRoZSB0ZXN0ZWQgV29ya1F1ZXVl
CisKKyAgICAgICAgKiBUZXN0V2ViS2l0QVBJL1Rlc3RzL1dURi9UaHJlYWRBc3NlcnRpb25zVGVz
dC5jcHA6CisgICAgICAgICogVGVzdFdlYktpdEFQSS9UZXN0cy9XVEYvVGhyZWFkaW5nLmNwcDoK
KyAgICAgICAgKFRlc3RXZWJLaXRBUEk6OlRFU1QpOgorICAgICAgICAqIFRlc3RXZWJLaXRBUEkv
VGVzdHMvV1RGL1dvcmtRdWV1ZS5jcHA6CisgICAgICAgIChUZXN0V2ViS2l0QVBJOjpURVNUKToK
KwogMjAyMi0wMi0yMiAgS2ltbW8gS2lubnVuZW4gIDxra2lubnVuZW5AYXBwbGUuY29tPgogCiAg
ICAgICAgIFRocmVhZCBzYWZldHkgYW5hbHlzaXMgbWFjcm9zIGFyZSBjb25mdXNpbmcgZm9yIG5v
bi1Mb2NrIHVzZS1jYXNlcwpkaWZmIC0tZ2l0IGEvVG9vbHMvU2NyaXB0cy9nZW5lcmF0ZS1ncHVw
LXdlYmdsIGIvVG9vbHMvU2NyaXB0cy9nZW5lcmF0ZS1ncHVwLXdlYmdsCmluZGV4IDBiNTQ1Zjgx
ZTg2MGRmNDhkYWVhY2I1MjYxY2I5ZjgxYmRiMjc3NDcuLjA3MWI2OTczZTEyNDAyNDY3NGEyZTc2
MGE5M2EwNzgyMTkyZmUwYmEgMTAwNzU1Ci0tLSBhL1Rvb2xzL1NjcmlwdHMvZ2VuZXJhdGUtZ3B1
cC13ZWJnbAorKysgYi9Ub29scy9TY3JpcHRzL2dlbmVyYXRlLWdwdXAtd2ViZ2wKQEAgLTEwNSw3
ICsxMDUsNyBAQCBtZXNzYWdlcyAtPiBSZW1vdGVHcmFwaGljc0NvbnRleHRHTCBOb3RSZWZDb3Vu
dGVkIFN0cmVhbSB7ewogICAgIHZvaWQgR2V0RXJyb3IoKSAtPiAodWludDMyX3QgcmV0dXJuVmFs
dWUpIFN5bmNocm9ub3VzCiAgICAgdm9pZCBQYWludFJlbmRlcmluZ1Jlc3VsdHNUb0NhbnZhcyhX
ZWJDb3JlOjpSZW5kZXJpbmdSZXNvdXJjZUlkZW50aWZpZXIgaW1hZ2VCdWZmZXIpIC0+ICgpIFN5
bmNocm9ub3VzCiAgICAgdm9pZCBQYWludENvbXBvc2l0ZWRSZXN1bHRzVG9DYW52YXMoV2ViQ29y
ZTo6UmVuZGVyaW5nUmVzb3VyY2VJZGVudGlmaWVyIGltYWdlQnVmZmVyKSAtPiAoKSBTeW5jaHJv
bm91cwotICAgIHZvaWQgQ29weVRleHR1cmVGcm9tTWVkaWEoV2ViQ29yZTo6TWVkaWFQbGF5ZXJJ
ZGVudGlmaWVyIGlkZW50aWZpZXIsIHVpbnQzMl90IHRleHR1cmUsIHVpbnQzMl90IHRhcmdldCwg
aW50MzJfdCBsZXZlbCwgdWludDMyX3QgaW50ZXJuYWxGb3JtYXQsIHVpbnQzMl90IGZvcm1hdCwg
dWludDMyX3QgdHlwZSwgYm9vbCBwcmVtdWx0aXBseUFscGhhLCBib29sIGZsaXBZKSAtPiAoYm9v
bCBzdWNjZXNzKSBTeW5jaHJvbm91cworICAgIHZvaWQgQ29weVRleHR1cmVGcm9tVmlkZW9GcmFt
ZShXZWJLaXQ6OlJlbW90ZVZpZGVvRnJhbWVSZWFkUmVmZXJlbmNlIHJlYWQsIHVpbnQzMl90IHRl
eHR1cmUsIHVpbnQzMl90IHRhcmdldCwgaW50MzJfdCBsZXZlbCwgdWludDMyX3QgaW50ZXJuYWxG
b3JtYXQsIHVpbnQzMl90IGZvcm1hdCwgdWludDMyX3QgdHlwZSwgYm9vbCBwcmVtdWx0aXBseUFs
cGhhLCBib29sIGZsaXBZKSAtPiAoYm9vbCBzdWNjZXNzKSBTeW5jaHJvbm91cwogI2lmIEVOQUJM
RShNRURJQV9TVFJFQU0pCiAgICAgdm9pZCBQYWludENvbXBvc2l0ZWRSZXN1bHRzVG9NZWRpYVNh
bXBsZSgpIC0+IChzdGQ6Om9wdGlvbmFsPFdlYktpdDo6UmVtb3RlVmlkZW9GcmFtZVByb3h5OjpQ
cm9wZXJ0aWVzPiBwcm9wZXJ0aWVzKSBTeW5jaHJvbm91cwogI2VuZGlmCkBAIC03NDQsNyArNzQ0
LDcgQEAgY2xhc3Mgd2Via2l0X2lwY19jcHBfaW1wbChvYmplY3QpOgogICAgICAgICBzZWxmLnBy
b2Nlc3NfY2FsbCgpCiAKICAgICBkZWYgcHJvY2Vzc19jYWxsKHNlbGYpOgotICAgICAgICBzZWxm
LmNhbGxfc3RtdHMgKz0gWyAiYXNzZXJ0SXNDdXJyZW50KG1fc3RyZWFtVGhyZWFkKTsiIF0KKyAg
ICAgICAgc2VsZi5jYWxsX3N0bXRzICs9IFsgImFzc2VydElzQ3VycmVudCh3b3JrUXVldWUoKSk7
IiBdCiAKICAgICAgICAgaW5fZXhwcnMgPSAiLCAiLmpvaW4oc3RyKGUpIGZvciBlIGluIHNlbGYu
aW5fZXhwcnMpCiAgICAgICAgIGlzX2FzeW5jID0gbGVuKHNlbGYub3V0X2V4cHJzKSA9PSAwCmRp
ZmYgLS1naXQgYS9Ub29scy9UZXN0V2ViS2l0QVBJL1Rlc3RzL1dURi9UaHJlYWRpbmcuY3BwIGIv
VG9vbHMvVGVzdFdlYktpdEFQSS9UZXN0cy9XVEYvVGhyZWFkaW5nLmNwcAppbmRleCAzNDY4ZDE1
MDk2YzUyOGIyOGY5NDdlNzNmODA5MTNmMDBhZGFkYjJmLi4wNDMwMGU3Yzg0YmZjOWNhODk2NWFl
MmI4YWYwM2MzZTU4MmJkYTk3IDEwMDY0NAotLS0gYS9Ub29scy9UZXN0V2ViS2l0QVBJL1Rlc3Rz
L1dURi9UaHJlYWRpbmcuY3BwCisrKyBiL1Rvb2xzL1Rlc3RXZWJLaXRBUEkvVGVzdHMvV1RGL1Ro
cmVhZGluZy5jcHAKQEAgLTI3LDYgKzI3LDcgQEAKIAogI2luY2x1ZGUgPHd0Zi9UaHJlYWRpbmcu
aD4KICNpbmNsdWRlIDx3dGYvVmVjdG9yLmg+CisjaW5jbHVkZSA8d3RmL3RocmVhZHMvQmluYXJ5
U2VtYXBob3JlLmg+CiAKIG5hbWVzcGFjZSBUZXN0V2ViS2l0QVBJIHsKIApAQCAtNjUsNCArNjYs
NTkgQEAgVEVTVChXVEYsIFRocmVhZGluZ1RocmVhZElkZW50aXR5KQogfQogI2VuZGlmIC8vIFVT
RShQVEhSRUFEUykKIAorbmFtZXNwYWNlIHsKK3N0cnVjdCBBc3NlcnRpb25UZXN0SG9sZGVyIHsK
KyAgICBSZWZQdHI8VGhyZWFkPiB0aHJlYWQ7CisgICAgc2l6ZV90IGNvdW50ZXIgV1RGX0dVQVJE
RURfQllfQ0FQQUJJTElUWSgqdGhyZWFkKSB7IDAgfTsKKyAgICBzaXplX3QgcmVzdWx0IHsgMCB9
OyAvLyBUaGlzIGlzIGhlcmUgdG8gc3VwcG9ydCB0aGUgcmVzdWx0IGFzc2VydGlvbi4gVGhlIGNv
bXBpbGVyIGRvZXNuJ3QgYWxsb3cgdXMgdG8gb2J0YWluIHRoZSBgY291bnRlcmAgb3RoZXJ3aXNl
LgorCisgICAgQXNzZXJ0aW9uVGVzdEhvbGRlcigpCisgICAgeworICAgICAgICBCaW5hcnlTZW1h
cGhvcmUgbWVtYmVySW5pdGlhbGl6ZWQ7CisgICAgICAgIEJpbmFyeVNlbWFwaG9yZSB0aHJlYWRJ
bml0aWFsaXplZDsKKworICAgICAgICB0aHJlYWQgPSBUaHJlYWQ6OmNyZWF0ZSgiY29tLmFwcGxl
LldlYktpdC5UZXN0LlRocmVhZFRocmVhZFNhZmV0eUFuYWx5c2lzQXNzZXJ0SXNDdXJyZW50V29y
a3MiLCBbJl0geworICAgICAgICAgICAgbWVtYmVySW5pdGlhbGl6ZWQud2FpdCgpOyAvLyBXYWl0
IGZvciBgQXNzZXJ0aW9uVGVzdEhvbGRlcjo6dGhyZWFkYCBhc3NpZ25tZW50IHRvIGNvbXBsZXRl
LgorICAgICAgICAgICAgdGhyZWFkSW5pdGlhbGl6ZWQuc2lnbmFsKCk7CisvLyBFbmFibGUgdG8g
c2VlICJ3cml0aW5nIHZhcmlhYmxlICdjb3VudGVyJyByZXF1aXJlcyBob2xkaW5nIG11dGV4ICd0
aHJlYWQnIGV4Y2x1c2l2ZWx5Ii4KKy8vICNkZWZpbmUgVEVTVF9DT01QSUxFX0ZBSUxVUkUKKyNp
ZmRlZiBURVNUX0NPTVBJTEVfRkFJTFVSRQorICAgICAgICAgICAgdGVzdFRhc2tUaGF0RmFpbHNU
b0NvbXBpbGU8aW50PigpOworI2VuZGlmCisgICAgICAgICAgICB0ZXN0VGFzaygpOworICAgICAg
ICAgICAgYXNzZXJ0SXNDdXJyZW50KCp0aHJlYWQpOworICAgICAgICAgICAgY29tcHV0ZVJlc3Vs
dCgpOworICAgICAgICB9KTsKKyAgICAgICAgbWVtYmVySW5pdGlhbGl6ZWQuc2lnbmFsKCk7Cisg
ICAgICAgIHRocmVhZEluaXRpYWxpemVkLndhaXQoKTsgLy8gV2FpdCBmb3IgdGhlIHRocmVhZCB0
byBzdG9wIHVzaW5nIGBtZW1iZXJJbml0aWFsaXplZGAsIGFzIHdlIHdpbGwgZGVzdHJveSBpdC4K
KyAgICB9CisgICAgdm9pZCB0ZXN0VGFzaygpCisgICAgeworICAgICAgICBhc3NlcnRJc0N1cnJl
bnQoKnRocmVhZCk7IC8vIFRoaXMgaXMgYmVpbmcgdGVzdGVkLgorICAgICAgICArK2NvdW50ZXI7
CisgICAgfQorICAgIHZvaWQgY29tcHV0ZVJlc3VsdCgpIFdURl9SRVFVSVJFU19DQVBBQklMSVRZ
KCp0aHJlYWQpIC8vIFRoaXMgaXMgYmVpbmcgdGVzdGVkLgorICAgIHsKKyAgICAgICAgcmVzdWx0
ID0gKytjb3VudGVyOworICAgIH0KKyAgICB0ZW1wbGF0ZTx0eXBlbmFtZSBUPiB2b2lkIHRlc3RU
YXNrVGhhdEZhaWxzVG9Db21waWxlKCkKKyAgICB7CisgICAgICAgICsrY291bnRlcjsKKyAgICB9
Cit9OworfQorCisvLyBDb25zaWRlciBkZWNsYXJhdGlvbiBgUmVmUHRyPFRocmVhZD4gbXlUaHJl
YWRgLgorLy8gVGhpcyB0ZXN0IHRlc3RzIHRoYXQgY2xpZW50cyBjYW4gdXNlIHRocmVhZCBzYWZl
dHkgYW5hbHlzaXMgdG8gY2hlY2sgdGhhdCB0aGUgdGhyZWFkIGlzIGN1cnJlbnQKKy8vIGJ5IHVz
aW5nIGBhc3NlcnRJc0N1cnJlbnQoKm15VGhyZWFkKTtgIHRvIGVzdGFibGlzaCB0aGUgYXNzZXJ0
aW9uIGFuZCBXVEZfR1VBUkRFRF9CWV9DQVBBQklMSVRZLCBXVEZfUkVRVUlSRVNfQllfQ0FQQUJJ
TElUWQorLy8gZGVjbGFyYXRpb25zIHRvIGxldCB0aGUgY29tcGlsZXIgYW5hbHl6ZSB0aGUgdXNl
cyBvZiB0aGUgdmFyaWFibGVzIGFuZCBmdW5jdGlvbnMgd2l0aCB0aGUgZGVjbGFyYXRpb25zLgor
VEVTVChXVEZfVGhyZWFkLCBUaHJlYWRTYWZldHlBbmFseXNpc0Fzc2VydElzQ3VycmVudFdvcmtz
KQoreworICAgIEFzc2VydGlvblRlc3RIb2xkZXIgaG9sZGVyc1s1MF07CisgICAgZm9yIChhdXRv
JiBob2xkZXIgOiBob2xkZXJzKQorICAgICAgICBob2xkZXIudGhyZWFkLT53YWl0Rm9yQ29tcGxl
dGlvbigpOworICAgIGZvciAoYXV0byYgaG9sZGVyIDogaG9sZGVycykKKyAgICAgICAgRVhQRUNU
X0VRKDJ1LCBob2xkZXIucmVzdWx0KTsKK30KKwogfSAvLyBuYW1lc3BhY2UgVGVzdFdlYktpdEFQ
SQpkaWZmIC0tZ2l0IGEvVG9vbHMvVGVzdFdlYktpdEFQSS9UZXN0cy9XVEYvV29ya1F1ZXVlLmNw
cCBiL1Rvb2xzL1Rlc3RXZWJLaXRBUEkvVGVzdHMvV1RGL1dvcmtRdWV1ZS5jcHAKaW5kZXggMmY0
Y2Y2NGE4YWNmZWI2NDJlMDYyZDg4NmZkMmJlNDg4ZjAzNTZlZi4uMDg1ZDk4Y2FiZDY1NDQxYjQ0
OWQ4OGViNTM4YTJlYjBjYjdhMjQ3OSAxMDA2NDQKLS0tIGEvVG9vbHMvVGVzdFdlYktpdEFQSS9U
ZXN0cy9XVEYvV29ya1F1ZXVlLmNwcAorKysgYi9Ub29scy9UZXN0V2ViS2l0QVBJL1Rlc3RzL1dU
Ri9Xb3JrUXVldWUuY3BwCkBAIC0yODksMTEgKzI4OSwxMSBAQCBURVNUKFdURl9Xb3JrUXVldWUs
IERlc3Ryb3lEaXNwYXRjaGVkT25EaXNwYXRjaFF1ZXVlKQogICAgICAgICB9CiAgICAgICAgIH5E
ZXN0cnVjdGlvbldvcmtRdWV1ZVRlc3RlcigpCiAgICAgICAgIHsKLSAgICAgICAgICAgIEVYUEVD
VF9ORShtX2NyZWF0ZWRJblRocmVhZCwgVGhyZWFkOjpjdXJyZW50KCkudWlkKCkpOworICAgICAg
ICAgICAgRVhQRUNUX05FKG1fY3JlYXRlZEluU2VxdWVuY2UsIGN1cnJlbnRTZXF1ZW5jZUlEKCkp
OwogICAgICAgICAgICAgbV9jb3VudGVyKys7CiAgICAgICAgIH0KICAgICBwcml2YXRlOgotICAg
ICAgICB1aW50MzJfdCBtX2NyZWF0ZWRJblRocmVhZCA9IFRocmVhZDo6Y3VycmVudCgpLnVpZCgp
OworICAgICAgICB1aW50MzJfdCBtX2NyZWF0ZWRJblNlcXVlbmNlID0gY3VycmVudFNlcXVlbmNl
SUQoKTsKICAgICAgICAgc3RkOjphdG9taWM8c2l6ZV90PiYgbV9jb3VudGVyOwogICAgIH07CiAg
ICAgY29uc3RleHByIHNpemVfdCBxdWV1ZUNvdW50ID0gNTA7CkBAIC0zMDksNiArMzA5LDQ5IEBA
IFRFU1QoV1RGX1dvcmtRdWV1ZSwgRGVzdHJveURpc3BhdGNoZWRPbkRpc3BhdGNoUXVldWUpCiAg
ICAgZm9yIChzaXplX3QgaiA9IDA7IGogPCBxdWV1ZUNvdW50OyArK2opCiAgICAgICAgIHF1ZXVl
W2pdLT5kaXNwYXRjaFN5bmMoW10geyB9KTsKICAgICBFWFBFQ1RfRVEocXVldWVDb3VudCAqIGl0
ZXJhdGlvbkNvdW50LCBjb3VudGVyKTsKK30KKworbmFtZXNwYWNlIHsKK3N0cnVjdCBBc3NlcnRp
b25UZXN0SG9sZGVyIHsKKyAgICBjb25zdCBSZWZQdHI8V29ya1F1ZXVlPiBxdWV1ZSB7IFdvcmtR
dWV1ZTo6Y3JlYXRlKCJjb20uYXBwbGUuV2ViS2l0LlRlc3QuVGhyZWFkU2FmZXR5QW5hbHlzaXNB
c3NlcnRJc0N1cnJlbnRXb3JrcyIsIFdvcmtRdWV1ZTo6UU9TOjpVc2VySW50ZXJhY3RpdmUpIH07
CisgICAgc2l6ZV90IGNvdW50ZXIgV1RGX0dVQVJERURfQllfQ0FQQUJJTElUWSgqcXVldWUpIHsg
MCB9OworICAgIHNpemVfdCByZXN1bHQgeyAwIH07IC8vIFRoaXMgaXMgaGVyZSB0byBzdXBwb3J0
IHRoZSByZXN1bHQgYXNzZXJ0aW9uLiBUaGUgY29tcGlsZXIgZG9lc24ndCBhbGxvdyB1cyB0byBv
YnRhaW4gdGhlIGBjb3VudGVyYCBvdGhlcndpc2UuCiAKKyAgICB2b2lkIHRlc3RUYXNrKCkKKyAg
ICB7CisgICAgICAgIGFzc2VydElzQ3VycmVudCgqcXVldWUpOyAvLyBUaGlzIGlzIGJlaW5nIHRl
c3RlZC4KKyAgICAgICAgKytjb3VudGVyOworICAgIH0KKyAgICB2b2lkIGNvbXB1dGVSZXN1bHQo
KSBXVEZfUkVRVUlSRVNfQ0FQQUJJTElUWSgqcXVldWUpIC8vIFRoaXMgaXMgYmVpbmcgdGVzdGVk
LgorICAgIHsKKyAgICAgICAgcmVzdWx0ID0gKytjb3VudGVyOworICAgIH0KKyAgICB0ZW1wbGF0
ZTx0eXBlbmFtZSBUPiB2b2lkIHRlc3RUYXNrVGhhdEZhaWxzVG9Db21waWxlKCkKKyAgICB7Cisg
ICAgICAgICsrY291bnRlcjsKKyAgICB9Cit9OwogfQorCitURVNUKFdURl9Xb3JrUXVldWUsIFRo
cmVhZFNhZmV0eUFuYWx5c2lzQXNzZXJ0SXNDdXJyZW50V29ya3MpCit7CisgICAgY29uc3RleHBy
IHNpemVfdCBxdWV1ZUNvdW50ID0gNTA7CisgICAgY29uc3RleHByIHNpemVfdCBpdGVyYXRpb25D
b3VudCA9IDEwMDAwOworCisgICAgQXNzZXJ0aW9uVGVzdEhvbGRlciBob2xkZXJzW3F1ZXVlQ291
bnRdOworICAgIGZvciAoc2l6ZV90IGkgPSAwOyBpIDwgaXRlcmF0aW9uQ291bnQ7ICsraSkgewor
ICAgICAgICBmb3IgKGF1dG8mIGhvbGRlciA6IGhvbGRlcnMpCisgICAgICAgICAgICBob2xkZXIu
cXVldWUtPmRpc3BhdGNoKFsmaG9sZGVyXSB7IGhvbGRlci50ZXN0VGFzaygpOyB9KTsKKyAgICB9
CisvLyAjZGVmaW5lIFRFU1RfQ09NUElMRV9GQUlMVVJFCisjaWZkZWYgVEVTVF9DT01QSUxFX0ZB
SUxVUkUKKyAgICBmb3IgKGF1dG8mIGhvbGRlciA6IGhvbGRlcnMpCisgICAgICAgIGhvbGRlci5x
dWV1ZS0+ZGlzcGF0Y2hTeW5jKFsmaG9sZGVyXSB7IGhvbGRlci50ZXN0VGFza1RoYXRGYWlsc1Rv
Q29tcGlsZTxpbnQ+KCk7IH0pOworI2VuZGlmCisgICAgZm9yIChhdXRvJiBob2xkZXIgOiBob2xk
ZXJzKQorICAgICAgICBob2xkZXIucXVldWUtPmRpc3BhdGNoU3luYyhbJmhvbGRlcl0geyBhc3Nl
cnRJc0N1cnJlbnQoKmhvbGRlci5xdWV1ZSk7IGhvbGRlci5jb21wdXRlUmVzdWx0KCk7IH0pOwor
ICAgIGZvciAoYXV0byYgaG9sZGVyIDogaG9sZGVycykKKyAgICAgICAgRVhQRUNUX0VRKGl0ZXJh
dGlvbkNvdW50ICsgMSwgaG9sZGVyLnJlc3VsdCk7Cit9CisKIH0gLy8gbmFtZXNwYWNlIFRlc3RX
ZWJLaXRBUEkK
</data>

          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>452963</attachid>
            <date>2022-02-23 04:12:22 -0800</date>
            <delta_ts>2022-02-23 06:19:26 -0800</delta_ts>
            <desc>Patch</desc>
            <filename>bug-236832-20220223141221.patch</filename>
            <type>text/plain</type>
            <size>112617</size>
            <attacher name="Kimmo Kinnunen">kkinnunen</attacher>
            
              <data encoding="base64">U3VidmVyc2lvbiBSZXZpc2lvbjogMjkwMzYxCmRpZmYgLS1naXQgYS9Tb3VyY2UvV1RGL0NoYW5n
ZUxvZyBiL1NvdXJjZS9XVEYvQ2hhbmdlTG9nCmluZGV4IDljZTJkY2YwNDcwOTU2Y2Q1NDQ5YzY0
MTI4YTIyZDQ5ODUyNzY0OTEuLjI1MjY4YzAzZmQzMTZlNzkzNDEzZWZiMGVmM2IxODljZDQ0NGM3
YzMgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XVEYvQ2hhbmdlTG9nCisrKyBiL1NvdXJjZS9XVEYvQ2hh
bmdlTG9nCkBAIC0xLDMgKzEsNDYgQEAKKzIwMjItMDItMjMgIEtpbW1vIEtpbm51bmVuICA8a2tp
bm51bmVuQGFwcGxlLmNvbT4KKworICAgICAgICBUaHJlYWQgc2FmZXR5IGFuYWx5c2lzIHRvIGFz
c2VydCAiY29kZSBpcyBydW4gc2VxdWVudGlhbGx5IiBpcyBub3QgdXNlZnVsIHdoZW4gY29kZSBp
cyBtYWlubHkgcnVuIHdpdGggV29ya1F1ZXVlcworICAgICAgICBodHRwczovL2J1Z3Mud2Via2l0
Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9MjM2ODMyCisKKyAgICAgICAgUmV2aWV3ZWQgYnkgTk9CT0RZ
IChPT1BTISkuCisKKyAgICAgICAgVGhyZWFkIHNhZmV0eSBhbmFseXNpcyBpcyBub3QgdXNlZnVs
IHdoZW4gY29kZSBpcyBtYWlubHkgcnVuIHdpdGggV29ya1F1ZXVlcy4KKyAgICAgICAgV29ya1F1
ZXVlIHJ1bm5hYmxlcyBtaWdodCBydW4gaW4gYXJiaXRyYXJ5IHRocmVhZCwgYnV0IHN0aWxsIHNl
cmlhbGx5IGluIGEgc3BlY2lmaWMKKyAgICAgICAgIndvcmsgcXVldWUiLiBUaHVzIGN1cnJlbnQg
VGhyZWFkQXNzZXJ0aW9uIHByb2R1Y2VzIGZhbHNlIGFzc2VydGlvbnMuCisKKyAgICAgICAgTWFr
ZSBUaHJlYWQgYW5kIFdvcmtRdWV1ZSBob2xkICJpcyBjdXJyZW50IiBjYXBhYmlsaXR5LiBUaGlz
IG1lYW5zIHRoZQorICAgICAgICBgYXNzZXJ0SXNDdXJyZW50KHRocmVhZC93b3JrUXVldWUpYCBj
YW4gZXN0YWJsaXNoIHRoYXQgdGhlIGNhbGxlciBob2xkcyB0aGUgY2FwYWJpdHksCisgICAgICAg
IGUuZy4gdGhhdCB0aGUgY2FsbGVyIGlzIHJ1bm5pbmcgaW4gdGhlIHBhcnRpY3VsYXIgdGhyZWFk
IG9yIHdvcmsgcXVldWUuCisKKyAgICAgICAgSW1wbGVtZW50IGJ5IGRlZmluaW5nIGFuIGltcGxl
bWVudGF0aW9uIGRldGFpbCB0ZXJtICJzZXF1ZW5jZSIsIGUuZy4gc29tZXRoaW5nCisgICAgICAg
IHdoZXJlIGNvZGUgZXhlY3V0ZXMgc2VxdWVudGlhbGx5LiBUaGlzIGRldGFpbCBpcyBpbXBsZW1l
bnRlZCBpbiBgV1RGOjpjdXJyZW50U2VxdWVuY2VJRGAgZnVuY3Rpb24uCisKKyAgICAgICAgSW1w
bGVtZW50IGZvciBub24tQ29jb2EgYnkganVzdCB1c2luZyB0aHJlYWQgaWQgZm9yIHRoZSBzZXF1
ZW5jZSBpZC4gQWxsIFdvcmtRdWV1ZXMgaGF2ZSB1bmlxdWUgdGhyZWFkcworICAgICAgICBhbmQg
YWxsIFRocmVhZHMgaGF2ZSB1bmlxdWUgaWRzLiBUaGlzIG1lYW5zIFdvcmtRdWV1ZXMgY2FuIGJl
IGRpc3RpbnF1aXNoZWQgZnJvbSBUaHJlYWRzIHdpdGhvdXQgV29ya1F1ZXVlcy4KKworICAgICAg
ICBJbXBsZW1lbnQgZm9yIG5vbi1Db2NvYSBieSB1c2luZyB0aGUgc2FtZSB1aWQgaWQgbmFtZXNw
YWNlIGZvciBXb3JrUXVldWVzIGFzIFRocmVhZHMgaGF2ZS4gU3RvcmUgdGhlIHVpZAorICAgICAg
ICBpbiBEaXNwYXRjaCBkaXNwYXRjaCBxdWV1ZSBzcGVjaWZpYyBmaWVsZC4gSWYgdGhlIGNvZGUg
aXMgbm90IHJ1bm5pbmcgaW4gRGlzcGF0Y2gsIHJldHVybiB0aGUgY3VycmVudAorICAgICAgICB0
aHJlYWQgdWlkLiBTaW5jZSB0aGUgdWlkIG5hbWVzcGFjZSBpcyB0aGUgc2FtZSwgV29ya1F1ZXVl
cyBjYW4gYmUgZGlzdGludWlzaGVkIGZyb20gVGhyZWFkcyB3aXRob3V0IFdvcmtRdWV1ZXMuCisK
KyAgICAgICAgSW4gYm90aCBjYXNlcywgbm9uLVdlYktpdCBwbGF0Zm9ybSB0aHJlYWRzIGdldCBh
bHNvIGEgVGhyZWFkLCBzbyB0aGV5J3JlIGRpc3RpbnF1aXNoZWQgZnJvbSBXb3JrUXVldWVzLgor
CisgICAgICAgIFRlc3RlZCBieSBuZXcgQVBJIHRlc3RzLgorCisgICAgICAgICogd3RmL1RocmVh
ZEFzc2VydGlvbnMuaDoKKyAgICAgICAgKFdURjo6V1RGX0FTU0VSVFNfQUNRVUlSRURfTE9DSyk6
CisgICAgICAgICogd3RmL1RocmVhZGluZy5oOgorICAgICAgICAoV1RGOjpXVEZfQVNTRVJUU19B
Q1FVSVJFRF9MT0NLKToKKyAgICAgICAgKiB3dGYvV29ya1F1ZXVlLmg6CisgICAgICAgIChXVEY6
OldURl9BU1NFUlRTX0FDUVVJUkVEX0xPQ0spOgorICAgICAgICAqIHd0Zi9jb2NvYS9Xb3JrUXVl
dWVDb2NvYS5jcHA6CisgICAgICAgIChXVEY6OldvcmtRdWV1ZUJhc2U6OnBsYXRmb3JtSW5pdGlh
bGl6ZSk6CisgICAgICAgIChXVEY6OldvcmtRdWV1ZTo6YXNzZXJ0SXNDdXJyZW50IGNvbnN0KToK
KyAgICAgICAgKFdURjo6Y3VycmVudFNlcXVlbmNlSUQpOgorICAgICAgICAqIHd0Zi9nZW5lcmlj
L1dvcmtRdWV1ZUdlbmVyaWMuY3BwOgorICAgICAgICAoV1RGOjpXb3JrUXVldWVCYXNlOjpwbGF0
Zm9ybUluaXRpYWxpemUpOgorICAgICAgICAoV1RGOjpjdXJyZW50U2VxdWVuY2VJRCk6CisKIDIw
MjItMDItMjMgIEtpbW1vIEtpbm51bmVuICA8a2tpbm51bmVuQGFwcGxlLmNvbT4KIAogICAgICAg
ICBUaHJlYWQgc2FmZXR5IGFuYWx5c2lzIG1hY3JvcyBhcmUgY29uZnVzaW5nIGZvciBub24tTG9j
ayB1c2UtY2FzZXMKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJLaXQvQ2hhbmdlTG9nIGIvU291cmNl
L1dlYktpdC9DaGFuZ2VMb2cKaW5kZXggNGU4NGM4MjRhOTk3OTIzYTdmNzliMmVlMWQ3NzdmMzhm
ZDczMjZhMi4uNzAzN2RjYjVhMzg5NDMxZjAyNzhmZTI2Y2M2OGVhNzI1NGE1NzVlOSAxMDA2NDQK
LS0tIGEvU291cmNlL1dlYktpdC9DaGFuZ2VMb2cKKysrIGIvU291cmNlL1dlYktpdC9DaGFuZ2VM
b2cKQEAgLTEsMyArMSwxNyBAQAorMjAyMi0wMi0yMyAgS2ltbW8gS2lubnVuZW4gIDxra2lubnVu
ZW5AYXBwbGUuY29tPgorCisgICAgICAgIFRocmVhZCBzYWZldHkgYW5hbHlzaXMgdG8gYXNzZXJ0
ICJjb2RlIGlzIHJ1biBzZXF1ZW50aWFsbHkiIGlzIG5vdCB1c2VmdWwgd2hlbiBjb2RlIGlzIG1h
aW5seSBydW4gd2l0aCBXb3JrUXVldWVzCisgICAgICAgIGh0dHBzOi8vYnVncy53ZWJraXQub3Jn
L3Nob3dfYnVnLmNnaT9pZD0yMzY4MzIKKworICAgICAgICBSZXZpZXdlZCBieSBOT0JPRFkgKE9P
UFMhKS4KKworICAgICAgICBSZW5hbWUgVGhyZWFkQXNzZXJ0aW9uIHRvIFNlcXVlbmNlQXNzZXJ0
aW9uLgorCisgICAgICAgICogR1BVUHJvY2Vzcy9ncmFwaGljcy9SZW1vdGVHcmFwaGljc0NvbnRl
eHRHTC5oOgorICAgICAgICAqIEdQVVByb2Nlc3MvZ3JhcGhpY3MvV2ViR1BVL1JlbW90ZUdQVS5o
OgorICAgICAgICAqIEdQVVByb2Nlc3MvbWVkaWEvUmVtb3RlVmlkZW9GcmFtZU9iamVjdEhlYXAu
aDoKKyAgICAgICAgKiBHUFVQcm9jZXNzL3dlYnJ0Yy9SZW1vdGVTYW1wbGVCdWZmZXJEaXNwbGF5
TGF5ZXIuaDoKKwogMjAyMi0wMi0yMyAgS2ltbW8gS2lubnVuZW4gIDxra2lubnVuZW5AYXBwbGUu
Y29tPgogCiAgICAgICAgIFRocmVhZCBzYWZldHkgYW5hbHlzaXMgbWFjcm9zIGFyZSBjb25mdXNp
bmcgZm9yIG5vbi1Mb2NrIHVzZS1jYXNlcwpkaWZmIC0tZ2l0IGEvU291cmNlL1dURi93dGYvVGhy
ZWFkaW5nLmggYi9Tb3VyY2UvV1RGL3d0Zi9UaHJlYWRpbmcuaAppbmRleCAyMzZlYzQzZjUzODFh
ZWI4YTRkZGNjNTI4MGZiOTVjYTkwYzM4NDY5Li42ZTg4YjQwNDQzYTk3MGIxZjlkMzY4ZDEwYTg0
OThkNjVlNTVlNzMwIDEwMDY0NAotLS0gYS9Tb3VyY2UvV1RGL3d0Zi9UaHJlYWRpbmcuaAorKysg
Yi9Tb3VyY2UvV1RGL3d0Zi9UaHJlYWRpbmcuaApAQCAtNDUsNiArNDUsNyBAQAogI2luY2x1ZGUg
PHd0Zi9TdGFja0JvdW5kcy5oPgogI2luY2x1ZGUgPHd0Zi9TdGFja1N0YXRzLmg+CiAjaW5jbHVk
ZSA8d3RmL1RocmVhZFNhZmVSZWZDb3VudGVkLmg+CisjaW5jbHVkZSA8d3RmL1RocmVhZFNhZmV0
eUFuYWx5c2lzLmg+CiAjaW5jbHVkZSA8d3RmL1ZlY3Rvci5oPgogI2luY2x1ZGUgPHd0Zi9Xb3Jk
TG9jay5oPgogI2luY2x1ZGUgPHd0Zi90ZXh0L0F0b21TdHJpbmdUYWJsZS5oPgpAQCAtNzYsNiAr
NzcsNyBAQCBlbnVtIGNsYXNzIFRocmVhZEdyb3VwQWRkUmVzdWx0OwogCiBjbGFzcyBUaHJlYWRH
cm91cDsKIGNsYXNzIFByaW50U3RyZWFtOworY2xhc3MgV29ya1F1ZXVlOwogCiBXVEZfRVhQT1JU
X1BSSVZBVEUgdm9pZCBpbml0aWFsaXplKCk7CiAKQEAgLTEwMiwxMSArMTA0LDE1IEBAIHB1Ymxp
YzoKICAgICBXVEZfRVhQT1JUX1BSSVZBVEUgflRocmVhZFN1c3BlbmRMb2NrZXIoKTsKIH07CiAK
LWNsYXNzIFRocmVhZCA6IHB1YmxpYyBUaHJlYWRTYWZlUmVmQ291bnRlZDxUaHJlYWQ+IHsKK2Ns
YXNzIFdURl9DQVBBQklMSVRZKCJpcyBjdXJyZW50IikgVGhyZWFkIDogcHVibGljIFRocmVhZFNh
ZmVSZWZDb3VudGVkPFRocmVhZD4gewogICAgIHN0YXRpYyBzdGQ6OmF0b21pYzx1aW50MzJfdD4g
c191aWQ7CiBwdWJsaWM6CiAgICAgZnJpZW5kIGNsYXNzIFRocmVhZEdyb3VwOwogICAgIGZyaWVu
ZCBXVEZfRVhQT1JUX1BSSVZBVEUgdm9pZCBpbml0aWFsaXplKCk7CisjaWYgUExBVEZPUk0oQ09D
T0EpCisgICAgZnJpZW5kIGNsYXNzIFdvcmtRdWV1ZUJhc2U7IC8vIEZvciBhY2Nlc3MgdG8gc191
aWQsIHNvIFRocmVhZHMgYW5kIFdvcmtRdWV1ZSBpZHMgYXJlIGluIHRoZSBzYW1lIG5hbWVzcGFj
ZS4KKyAgICBmcmllbmQgdWludDMyX3QgY3VycmVudFNlcXVlbmNlSUQoKTsKKyNlbmRpZgogCiAg
ICAgV1RGX0VYUE9SVF9QUklWQVRFIH5UaHJlYWQoKTsKIApAQCAtNDI3LDkgKzQzMywyNCBAQCBp
bmxpbmUgVGhyZWFkJiBUaHJlYWQ6OmN1cnJlbnQoKQogICAgIHJldHVybiBpbml0aWFsaXplQ3Vy
cmVudFRMUygpOwogfQogCitpbmxpbmUgdm9pZCBhc3NlcnRJc0N1cnJlbnQoY29uc3QgVGhyZWFk
JiB0aHJlYWQpIFdURl9BU1NFUlRTX0FDUVVJUkVEX0NBUEFCSUxJVFkodGhyZWFkKQoreworICAg
IEFTU0VSVCgmdGhyZWFkID09ICZUaHJlYWQ6OmN1cnJlbnQoKSk7Cit9CisKK2lubGluZSBjb25z
dGV4cHIgdWludDMyX3QgaW52YWxpZFNlcXVlbmNlSUQgeyAwIH07CisKKy8vIFJldHVybnMgdW5p
cXVlIGlkIGZvciBjdXJyZW50IHdvcmsgcXVldWUgb3IgdGhyZWFkLgorLy8gUmV0dXJuIHZhbHVl
IGlzIG5vdCBgaW52YWxpZFNlcXVlbmNlSURgLgorV1RGX0VYUE9SVF9QUklWQVRFIHVpbnQzMl90
IGN1cnJlbnRTZXF1ZW5jZUlEKCk7CisKKwogfSAvLyBuYW1lc3BhY2UgV1RGCiAKIHVzaW5nIFdU
Rjo6VGhyZWFkU3VzcGVuZExvY2tlcjsKIHVzaW5nIFdURjo6VGhyZWFkOwogdXNpbmcgV1RGOjpU
aHJlYWRUeXBlOwogdXNpbmcgV1RGOjpHQ1RocmVhZFR5cGU7Cit1c2luZyBXVEY6OmFzc2VydElz
Q3VycmVudDsKK3VzaW5nIFdURjo6Y3VycmVudFNlcXVlbmNlSUQ7Cit1c2luZyBXVEY6OmludmFs
aWRTZXF1ZW5jZUlEOwpkaWZmIC0tZ2l0IGEvU291cmNlL1dURi93dGYvV29ya1F1ZXVlLmggYi9T
b3VyY2UvV1RGL3d0Zi9Xb3JrUXVldWUuaAppbmRleCAzNjhjMDY2ZDhmOTZiNGJjZTc0MzE4MjUy
ZTNjMDI2NjYxZDhmNjk3Li4zZjY2NGZlYzU5MzU0YWZkY2ZlMDQ4ZjBmYmU3YWExNzFlYzI4MmU3
IDEwMDY0NAotLS0gYS9Tb3VyY2UvV1RGL3d0Zi9Xb3JrUXVldWUuaAorKysgYi9Tb3VyY2UvV1RG
L3d0Zi9Xb3JrUXVldWUuaApAQCAtMzAsNiArMzAsNyBAQAogI2luY2x1ZGUgPHd0Zi9Gb3J3YXJk
Lmg+CiAjaW5jbHVkZSA8d3RmL0Z1bmN0aW9uRGlzcGF0Y2hlci5oPgogI2luY2x1ZGUgPHd0Zi9T
ZWNvbmRzLmg+CisjaW5jbHVkZSA8d3RmL1RocmVhZFNhZmV0eUFuYWx5c2lzLmg+CiAjaW5jbHVk
ZSA8d3RmL1RocmVhZGluZy5oPgogCiAjaWYgVVNFKENPQ09BX0VWRU5UX0xPT1ApCkBAIC03NSw2
ICs3Niw5IEBAIHByb3RlY3RlZDoKICAgICBPU09iamVjdFB0cjxkaXNwYXRjaF9xdWV1ZV90PiBt
X2Rpc3BhdGNoUXVldWU7CiAjZWxzZQogICAgIFJ1bkxvb3AqIG1fcnVuTG9vcDsKKyNpZiBBU1NF
UlRfRU5BQkxFRAorICAgIHVpbnQzMl90IG1fdGhyZWFkSUQgeyAwIH07CisjZW5kaWYKICNlbmRp
ZgogfTsKIApAQCAtODMsOCArODcsOSBAQCBwcm90ZWN0ZWQ6CiAgKiBSdW5uYWJsZXMgZGlzcGF0
Y2hlZCB0byBhIFdvcmtRdWV1ZSBhcmUgcmVxdWlyZWQgdG8gZXhlY3V0ZSBzZXJpYWxseS4KICAq
IFRoYXQgaXMsIHR3byBkaWZmZXJlbnQgcnVubmFibGVzIGRpc3BhdGNoZWQgdG8gdGhlIFdvcmtR
dWV1ZSBzaG91bGQgbmV2ZXIgYmUgYWxsb3dlZCB0byBleGVjdXRlIHNpbXVsdGFuZW91c2x5Lgog
ICogVGhleSBtYXkgYmUgZXhlY3V0ZWQgb24gZGlmZmVyZW50IHRocmVhZHMgYnV0IGNhbiBzYWZl
bHkgYmUgdXNlZCBieSBvYmplY3RzIHRoYXQgYXJlbid0IGFscmVhZHkgdGhyZWFkc2FmZS4KKyAq
IFVzZSBgYXNzZXJ0SXNDdXJyZW50KG1fbXlRdWV1ZSk7YCBpbiBhIHJ1bm5hYmxlIHRvIGFzc2Vy
dCB0aGF0IHRoZSBydW5uYWJsZSBydW5zIGluIGEgc3BlY2lmaWMgcXVldWUuCiAgKi8KLWNsYXNz
IFdvcmtRdWV1ZSA6IHB1YmxpYyBXb3JrUXVldWVCYXNlIHsKK2NsYXNzIFdURl9DQVBBQklMSVRZ
KCJpcyBjdXJyZW50IikgV29ya1F1ZXVlIDogcHVibGljIFdvcmtRdWV1ZUJhc2UgewogcHVibGlj
OgogICAgIFdURl9FWFBPUlRfUFJJVkFURSBzdGF0aWMgV29ya1F1ZXVlJiBtYWluKCk7CiAKQEAg
LTEwNiw4ICsxMTEsMjAgQEAgcHJpdmF0ZToKICAgICBleHBsaWNpdCBXb3JrUXVldWUoUnVuTG9v
cCYpOwogI2VuZGlmCiAgICAgc3RhdGljIFJlZjxXb3JrUXVldWU+IGNvbnN0cnVjdE1haW5Xb3Jr
UXVldWUoKTsKKworI2lmIEFTU0VSVF9FTkFCTEVECisgICAgV1RGX0VYUE9SVF9QUklWQVRFIHZv
aWQgYXNzZXJ0SXNDdXJyZW50KCkgY29uc3Q7CisgICAgZnJpZW5kIHZvaWQgYXNzZXJ0SXNDdXJy
ZW50KGNvbnN0IFdvcmtRdWV1ZSYpOworI2VuZGlmCiB9OwogCitpbmxpbmUgdm9pZCBhc3NlcnRJ
c0N1cnJlbnQoY29uc3QgV29ya1F1ZXVlJiB3b3JrUXVldWUpIFdURl9BU1NFUlRTX0FDUVVJUkVE
X0NBUEFCSUxJVFkod29ya1F1ZXVlKQoreworI2lmIEFTU0VSVF9FTkFCTEVECisgICAgd29ya1F1
ZXVlLmFzc2VydElzQ3VycmVudCgpOworI2VuZGlmCit9CisKIC8qKgogICogQSBDb25jdXJyZW50
V29ya1F1ZXVlIHVubGlrZSBhIFdvcmtRdWV1ZSBkb2Vzbid0IGd1YXJhbnRlZSB0aGUgb3JkZXIg
aW4gd2hpY2ggdGhlIGRpc3BhdGNoZWQgcnVubmFibGUgd2lsbCBydW4KICAqIGFuZCBlYWNoIGNh
biBydW4gY29uY3VycmVudGx5IG9uIGRpZmZlcmVudCB0aHJlYWRzLgpAQCAtMTI3LDMgKzE0NCw0
IEBAIHByaXZhdGU6CiAKIHVzaW5nIFdURjo6V29ya1F1ZXVlOwogdXNpbmcgV1RGOjpDb25jdXJy
ZW50V29ya1F1ZXVlOwordXNpbmcgV1RGOjphc3NlcnRJc0N1cnJlbnQ7CmRpZmYgLS1naXQgYS9T
b3VyY2UvV1RGL3d0Zi9jb2NvYS9Xb3JrUXVldWVDb2NvYS5jcHAgYi9Tb3VyY2UvV1RGL3d0Zi9j
b2NvYS9Xb3JrUXVldWVDb2NvYS5jcHAKaW5kZXggZjlmNDdmMTFjNzg0NWQyNzVlMTFjZjcyMGQw
YTg1NjI1OWNiMjIxYy4uOTg0MDRhZDdhOTQ2NmM5ZGM3MmI3NjNhYmRhZTYwMGIwMWY5OWZlNSAx
MDA2NDQKLS0tIGEvU291cmNlL1dURi93dGYvY29jb2EvV29ya1F1ZXVlQ29jb2EuY3BwCisrKyBi
L1NvdXJjZS9XVEYvd3RmL2NvY29hL1dvcmtRdWV1ZUNvY29hLmNwcApAQCAtMjQsNiArMjQsNyBA
QAogICovCiAKICNpbmNsdWRlICJjb25maWcuaCIKKyNpbmNsdWRlIDx3dGYvVGhyZWFkaW5nLmg+
CiAjaW5jbHVkZSA8d3RmL1dvcmtRdWV1ZS5oPgogCiAjaW5jbHVkZSA8d3RmL0Jsb2NrUHRyLmg+
CkBAIC04Niw2ICs4NywxMSBAQCB2b2lkIFdvcmtRdWV1ZUJhc2U6OnBsYXRmb3JtSW5pdGlhbGl6
ZShjb25zdCBjaGFyKiBuYW1lLCBUeXBlIHR5cGUsIFFPUyBxb3MpCiAgICAgYXR0ciA9IGRpc3Bh
dGNoX3F1ZXVlX2F0dHJfbWFrZV93aXRoX3Fvc19jbGFzcyhhdHRyLCBUaHJlYWQ6OmRpc3BhdGNo
UU9TQ2xhc3MocW9zKSwgMCk7CiAgICAgbV9kaXNwYXRjaFF1ZXVlID0gYWRvcHRPU09iamVjdChk
aXNwYXRjaF9xdWV1ZV9jcmVhdGUobmFtZSwgYXR0cikpOwogICAgIGRpc3BhdGNoX3NldF9jb250
ZXh0KG1fZGlzcGF0Y2hRdWV1ZS5nZXQoKSwgdGhpcyk7CisgICAgLy8gV2UgdXNlICZUaHJlYWQ6
OnNfdWlkIGZvciB0aGUga2V5LCBzaW5jZSBpdCdzIGNvbnZlbmllbnQuIERpc3BhdGNoIGRvZXMg
bm90IGRlcmVmZXJlbmNlIGl0LgorICAgIC8vIFdlIHVzZSBUaHJlYWQ6OnNfdWlkIHRvIGdlbmVy
YXRlIHRoZSBpZCBzbyB0aGF0IFdvcmtRdWV1ZXMgYW5kIFRocmVhZHMgc2hhcmUgdGhlIGlkIG5h
bWVzcGFjZS4KKyAgICAvLyBUaGlzIG1ha2VzIGl0IHBvc3NpYmxlIHRvIGFzc2VydCB0aGF0IGNv
ZGUgcnVucyBpbiB0aGUgZXhwZWN0ZWQgc2VxdWVuY2UsIHJlZ2FyZGxlc3Mgb2YgaWYgaXQgaXMK
KyAgICAvLyBpbiBhIHRocmVhZCBvciBhIHdvcmsgcXVldWUuCisgICAgZGlzcGF0Y2hfcXVldWVf
c2V0X3NwZWNpZmljKG1fZGlzcGF0Y2hRdWV1ZS5nZXQoKSwgJlRocmVhZDo6c191aWQsIHJlaW50
ZXJwcmV0X2Nhc3Q8dm9pZCo+KCsrVGhyZWFkOjpzX3VpZCksIG51bGxwdHIpOwogfQogCiB2b2lk
IFdvcmtRdWV1ZUJhc2U6OnBsYXRmb3JtSW52YWxpZGF0ZSgpCkBAIC0xMDIsNiArMTA4LDIxIEBA
IFJlZjxXb3JrUXVldWU+IFdvcmtRdWV1ZTo6Y29uc3RydWN0TWFpbldvcmtRdWV1ZSgpCiAgICAg
cmV0dXJuIGFkb3B0UmVmKCpuZXcgV29ya1F1ZXVlKGRpc3BhdGNoX2dldF9tYWluX3F1ZXVlKCkp
KTsKIH0KIAorI2lmIEFTU0VSVF9FTkFCTEVECit2b2lkIFdvcmtRdWV1ZTo6YXNzZXJ0SXNDdXJy
ZW50KCkgY29uc3QKK3sKKyAgICBkaXNwYXRjaF9hc3NlcnRfcXVldWUobV9kaXNwYXRjaFF1ZXVl
LmdldCgpKTsKK30KKyNlbmRpZgorCit1aW50MzJfdCBjdXJyZW50U2VxdWVuY2VJRCgpCit7Cisg
ICAgdWludDMyX3QgdWlkID0gc3RhdGljX2Nhc3Q8dWludDMyX3Q+KHJlaW50ZXJwcmV0X2Nhc3Q8
dWludHB0cl90PihkaXNwYXRjaF9nZXRfc3BlY2lmaWMoJlRocmVhZDo6c191aWQpKSk7CisgICAg
aWYgKCF1aWQpCisgICAgICAgIHVpZCA9IFRocmVhZDo6Y3VycmVudCgpLnVpZCgpOworICAgIHJl
dHVybiB1aWQ7Cit9CisKIHZvaWQgQ29uY3VycmVudFdvcmtRdWV1ZTo6YXBwbHkoc2l6ZV90IGl0
ZXJhdGlvbnMsIFdURjo6RnVuY3Rpb248dm9pZChzaXplX3QgaW5kZXgpPiYmIGZ1bmN0aW9uKQog
ewogICAgIGRpc3BhdGNoX2FwcGx5KGl0ZXJhdGlvbnMsIGRpc3BhdGNoX2dldF9nbG9iYWxfcXVl
dWUoRElTUEFUQ0hfUVVFVUVfUFJJT1JJVFlfREVGQVVMVCwgMCksIG1ha2VCbG9ja1B0cihbZnVu
Y3Rpb24gPSBXVEZNb3ZlKGZ1bmN0aW9uKV0oc2l6ZV90IGluZGV4KSB7CmRpZmYgLS1naXQgYS9T
b3VyY2UvV1RGL3d0Zi9nZW5lcmljL1dvcmtRdWV1ZUdlbmVyaWMuY3BwIGIvU291cmNlL1dURi93
dGYvZ2VuZXJpYy9Xb3JrUXVldWVHZW5lcmljLmNwcAppbmRleCBkMjU3ZDNhNzIwNGVmYjFjYjNh
NWQ4OTU0NjEwZjJiMDI3YThkZTUxLi5hNWNmMjNmMDcyNmNmZTRlNTRhYjIyMmVjNTI0YTdkNGEw
ZmI3ZTdmIDEwMDY0NAotLS0gYS9Tb3VyY2UvV1RGL3d0Zi9nZW5lcmljL1dvcmtRdWV1ZUdlbmVy
aWMuY3BwCisrKyBiL1NvdXJjZS9XVEYvd3RmL2dlbmVyaWMvV29ya1F1ZXVlR2VuZXJpYy5jcHAK
QEAgLTQzLDYgKzQzLDkgQEAgdm9pZCBXb3JrUXVldWVCYXNlOjpwbGF0Zm9ybUluaXRpYWxpemUo
Y29uc3QgY2hhciogbmFtZSwgVHlwZSwgUU9TIHFvcykKIHsKICAgICBCaW5hcnlTZW1hcGhvcmUg
c2VtYXBob3JlOwogICAgIFRocmVhZDo6Y3JlYXRlKG5hbWUsIFsmXSB7CisjaWYgQVNTRVJUX0VO
QUJMRUQKKyAgICAgICAgbV90aHJlYWRJRCA9IFRocmVhZDo6Y3VycmVudCgpLnVpZCgpOworI2Vu
ZGlmCiAgICAgICAgIG1fcnVuTG9vcCA9ICZSdW5Mb29wOjpjdXJyZW50KCk7CiAgICAgICAgIHNl
bWFwaG9yZS5zaWduYWwoKTsKICAgICAgICAgbV9ydW5Mb29wLT5ydW4oKTsKQEAgLTg1LDQgKzg4
LDE2IEBAIFJlZjxXb3JrUXVldWU+IFdvcmtRdWV1ZTo6Y29uc3RydWN0TWFpbldvcmtRdWV1ZSgp
CiAgICAgcmV0dXJuIGFkb3B0UmVmKCpuZXcgV29ya1F1ZXVlKFJ1bkxvb3A6Om1haW4oKSkpOwog
fQogCisjaWYgQVNTRVJUX0VOQUJMRUQKK3ZvaWQgV29ya1F1ZXVlOjphc3NlcnRJc0N1cnJlbnQo
KQoreworICAgIEFTU0VSVChtX3RocmVhZElEID09IFRocmVhZDo6Y3VycmVudCgpLnVpZCgpKTsK
K30KKyNlbmRpZgorCit1aW50MzJfdCBjdXJyZW50U2VxdWVuY2VJRCgpCit7CisgICAgcmV0dXJu
IFRocmVhZDo6Y3VycmVudCgpLnVpZCgpOworfQorCiB9CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2Vi
S2l0L0dQVVByb2Nlc3MvZ3JhcGhpY3MvUmVtb3RlR3JhcGhpY3NDb250ZXh0R0wuY3BwIGIvU291
cmNlL1dlYktpdC9HUFVQcm9jZXNzL2dyYXBoaWNzL1JlbW90ZUdyYXBoaWNzQ29udGV4dEdMLmNw
cAppbmRleCBkM2NjMjlmYmNkY2FiNmI0MGI1MDhlNDFmNDU2YzQ2YWVjNzQyMTI5Li41YWRhNjE2
ODUwMzE0ZWIzNjYyMjllZTBhMzA3MTE0Yjg1YTE0YTRiIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2Vi
S2l0L0dQVVByb2Nlc3MvZ3JhcGhpY3MvUmVtb3RlR3JhcGhpY3NDb250ZXh0R0wuY3BwCisrKyBi
L1NvdXJjZS9XZWJLaXQvR1BVUHJvY2Vzcy9ncmFwaGljcy9SZW1vdGVHcmFwaGljc0NvbnRleHRH
TC5jcHAKQEAgLTgxLDggKzgxLDYgQEAgUmVtb3RlR3JhcGhpY3NDb250ZXh0R0w6On5SZW1vdGVH
cmFwaGljc0NvbnRleHRHTCgpCiB7CiAgICAgQVNTRVJUKCFtX3N0cmVhbUNvbm5lY3Rpb24pOwog
ICAgIEFTU0VSVCghbV9jb250ZXh0KTsKLSAgICAvLyBNaWdodCBiZSBkZXN0cm95ZWQgb24gbWFp
biB0aHJlYWQgb3Igc3RyZWFtIHByb2Nlc3NpbmcgdGhyZWFkLgotICAgIG1fc3RyZWFtVGhyZWFk
LnJlc2V0KCk7CiB9CiAKIHZvaWQgUmVtb3RlR3JhcGhpY3NDb250ZXh0R0w6OmluaXRpYWxpemUo
R3JhcGhpY3NDb250ZXh0R0xBdHRyaWJ1dGVzJiYgYXR0cmlidXRlcykKQEAgLTEwOSw3ICsxMDcs
NyBAQCB2b2lkIFJlbW90ZUdyYXBoaWNzQ29udGV4dEdMOjpkaXNwbGF5V2FzUmVjb25maWd1cmVk
KCkKIHsKICAgICBhc3NlcnRJc01haW5SdW5Mb29wKCk7CiAgICAgcmVtb3RlR3JhcGhpY3NDb250
ZXh0R0xTdHJlYW1Xb3JrUXVldWUoKS5kaXNwYXRjaChbcHJvdGVjdGVkVGhpcyA9IFJlZiB7ICp0
aGlzIH1dKCkgewotICAgICAgICBhc3NlcnRJc0N1cnJlbnQocHJvdGVjdGVkVGhpcy0+bV9zdHJl
YW1UaHJlYWQpOworICAgICAgICBhc3NlcnRJc0N1cnJlbnQocHJvdGVjdGVkVGhpcy0+d29ya1F1
ZXVlKCkpOwogICAgICAgICBwcm90ZWN0ZWRUaGlzLT5tX2NvbnRleHQtPnVwZGF0ZUNvbnRleHRP
bkRpc3BsYXlSZWNvbmZpZ3VyYXRpb24oKTsKICAgICB9KTsKIH0KQEAgLTExNyw4ICsxMTUsNyBA
QCB2b2lkIFJlbW90ZUdyYXBoaWNzQ29udGV4dEdMOjpkaXNwbGF5V2FzUmVjb25maWd1cmVkKCkK
IAogdm9pZCBSZW1vdGVHcmFwaGljc0NvbnRleHRHTDo6d29ya1F1ZXVlSW5pdGlhbGl6ZShXZWJD
b3JlOjpHcmFwaGljc0NvbnRleHRHTEF0dHJpYnV0ZXMmJiBhdHRyaWJ1dGVzKQogewotICAgIG1f
c3RyZWFtVGhyZWFkLnJlc2V0KCk7Ci0gICAgYXNzZXJ0SXNDdXJyZW50KG1fc3RyZWFtVGhyZWFk
KTsKKyAgICBhc3NlcnRJc0N1cnJlbnQod29ya1F1ZXVlKCkpOwogICAgIHBsYXRmb3JtV29ya1F1
ZXVlSW5pdGlhbGl6ZShXVEZNb3ZlKGF0dHJpYnV0ZXMpKTsKICAgICBpZiAobV9jb250ZXh0KSB7
CiAgICAgICAgIG1fY29udGV4dC0+YWRkQ2xpZW50KCp0aGlzKTsKQEAgLTEzMSwxOSArMTI4LDE5
IEBAIHZvaWQgUmVtb3RlR3JhcGhpY3NDb250ZXh0R0w6OndvcmtRdWV1ZUluaXRpYWxpemUoV2Vi
Q29yZTo6R3JhcGhpY3NDb250ZXh0R0xBdHRyCiAKIHZvaWQgUmVtb3RlR3JhcGhpY3NDb250ZXh0
R0w6OndvcmtRdWV1ZVVuaW5pdGlhbGl6ZSgpCiB7Ci0gICAgYXNzZXJ0SXNDdXJyZW50KG1fc3Ry
ZWFtVGhyZWFkKTsKKyAgICBhc3NlcnRJc0N1cnJlbnQod29ya1F1ZXVlKCkpOwogICAgIG1fY29u
dGV4dCA9IG51bGxwdHI7CiAgICAgbV9zdHJlYW1Db25uZWN0aW9uID0gbnVsbHB0cjsKIH0KIAog
dm9pZCBSZW1vdGVHcmFwaGljc0NvbnRleHRHTDo6ZGlkQ29tcG9zaXRlKCkKIHsKLSAgICBhc3Nl
cnRJc0N1cnJlbnQobV9zdHJlYW1UaHJlYWQpOworICAgIGFzc2VydElzQ3VycmVudCh3b3JrUXVl
dWUoKSk7CiB9CiAKIHZvaWQgUmVtb3RlR3JhcGhpY3NDb250ZXh0R0w6OmZvcmNlQ29udGV4dExv
c3QoKQogewotICAgIGFzc2VydElzQ3VycmVudChtX3N0cmVhbVRocmVhZCk7CisgICAgYXNzZXJ0
SXNDdXJyZW50KHdvcmtRdWV1ZSgpKTsKICAgICBzZW5kKE1lc3NhZ2VzOjpSZW1vdGVHcmFwaGlj
c0NvbnRleHRHTFByb3h5OjpXYXNMb3N0KCkpOwogfQogCkBAIC0xNTQsMTMgKzE1MSwxMyBAQCB2
b2lkIFJlbW90ZUdyYXBoaWNzQ29udGV4dEdMOjpyZWN5Y2xlQ29udGV4dCgpCiAKIHZvaWQgUmVt
b3RlR3JhcGhpY3NDb250ZXh0R0w6OmRpc3BhdGNoQ29udGV4dENoYW5nZWROb3RpZmljYXRpb24o
KQogewotICAgIGFzc2VydElzQ3VycmVudChtX3N0cmVhbVRocmVhZCk7CisgICAgYXNzZXJ0SXND
dXJyZW50KHdvcmtRdWV1ZSgpKTsKICAgICBzZW5kKE1lc3NhZ2VzOjpSZW1vdGVHcmFwaGljc0Nv
bnRleHRHTFByb3h5OjpXYXNDaGFuZ2VkKCkpOwogfQogCiB2b2lkIFJlbW90ZUdyYXBoaWNzQ29u
dGV4dEdMOjpyZXNoYXBlKGludDMyX3Qgd2lkdGgsIGludDMyX3QgaGVpZ2h0KQogewotICAgIGFz
c2VydElzQ3VycmVudChtX3N0cmVhbVRocmVhZCk7CisgICAgYXNzZXJ0SXNDdXJyZW50KHdvcmtR
dWV1ZSgpKTsKICAgICBpZiAod2lkdGggJiYgaGVpZ2h0KQogICAgICAgICBtX2NvbnRleHQtPnJl
c2hhcGUod2lkdGgsIGhlaWdodCk7CiAgICAgZWxzZQpAQCAtMTcwLDcgKzE2Nyw3IEBAIHZvaWQg
UmVtb3RlR3JhcGhpY3NDb250ZXh0R0w6OnJlc2hhcGUoaW50MzJfdCB3aWR0aCwgaW50MzJfdCBo
ZWlnaHQpCiAjaWYgIVBMQVRGT1JNKENPQ09BKSAmJiAhUExBVEZPUk0oV0lOKQogdm9pZCBSZW1v
dGVHcmFwaGljc0NvbnRleHRHTDo6cHJlcGFyZUZvckRpc3BsYXkoQ29tcGxldGlvbkhhbmRsZXI8
dm9pZCgpPiYmIGNvbXBsZXRpb25IYW5kbGVyKQogewotICAgIGFzc2VydElzQ3VycmVudChtX3N0
cmVhbVRocmVhZCk7CisgICAgYXNzZXJ0SXNDdXJyZW50KHdvcmtRdWV1ZSgpKTsKICAgICBub3RJ
bXBsZW1lbnRlZCgpOwogICAgIGNvbXBsZXRpb25IYW5kbGVyKCk7CiB9CkBAIC0xNzgsMjUgKzE3
NSwyNSBAQCB2b2lkIFJlbW90ZUdyYXBoaWNzQ29udGV4dEdMOjpwcmVwYXJlRm9yRGlzcGxheShD
b21wbGV0aW9uSGFuZGxlcjx2b2lkKCk+JiYgY29tcAogCiB2b2lkIFJlbW90ZUdyYXBoaWNzQ29u
dGV4dEdMOjpzeW50aGVzaXplR0xFcnJvcih1aW50MzJfdCBlcnJvcikKIHsKLSAgICBhc3NlcnRJ
c0N1cnJlbnQobV9zdHJlYW1UaHJlYWQpOworICAgIGFzc2VydElzQ3VycmVudCh3b3JrUXVldWUo
KSk7CiAgICAgbV9jb250ZXh0LT5zeW50aGVzaXplR0xFcnJvcihzdGF0aWNfY2FzdDxHQ0dMZW51
bT4oZXJyb3IpKTsKIH0KIAogdm9pZCBSZW1vdGVHcmFwaGljc0NvbnRleHRHTDo6Z2V0RXJyb3Io
Q29tcGxldGlvbkhhbmRsZXI8dm9pZCh1aW50MzJfdCk+JiYgY29tcGxldGlvbkhhbmRsZXIpCiB7
Ci0gICAgYXNzZXJ0SXNDdXJyZW50KG1fc3RyZWFtVGhyZWFkKTsKKyAgICBhc3NlcnRJc0N1cnJl
bnQod29ya1F1ZXVlKCkpOwogICAgIGNvbXBsZXRpb25IYW5kbGVyKHN0YXRpY19jYXN0PHVpbnQz
Ml90PihtX2NvbnRleHQtPmdldEVycm9yKCkpKTsKIH0KIAogdm9pZCBSZW1vdGVHcmFwaGljc0Nv
bnRleHRHTDo6ZW5zdXJlRXh0ZW5zaW9uRW5hYmxlZChTdHJpbmcmJiBleHRlbnNpb24pCiB7Ci0g
ICAgYXNzZXJ0SXNDdXJyZW50KG1fc3RyZWFtVGhyZWFkKTsKKyAgICBhc3NlcnRJc0N1cnJlbnQo
d29ya1F1ZXVlKCkpOwogICAgIG1fY29udGV4dC0+ZW5zdXJlRXh0ZW5zaW9uRW5hYmxlZChleHRl
bnNpb24pOwogfQogCiB2b2lkIFJlbW90ZUdyYXBoaWNzQ29udGV4dEdMOjptYXJrQ29udGV4dENo
YW5nZWQoKQogewotICAgIGFzc2VydElzQ3VycmVudChtX3N0cmVhbVRocmVhZCk7CisgICAgYXNz
ZXJ0SXNDdXJyZW50KHdvcmtRdWV1ZSgpKTsKICAgICBtX2NvbnRleHQtPm1hcmtDb250ZXh0Q2hh
bmdlZCgpOwogfQogCkBAIC0yMDksNyArMjA2LDcgQEAgdm9pZCBSZW1vdGVHcmFwaGljc0NvbnRl
eHRHTDo6cGFpbnRSZW5kZXJpbmdSZXN1bHRzVG9DYW52YXMoV2ViQ29yZTo6UmVuZGVyaW5nUmUK
IAogdm9pZCBSZW1vdGVHcmFwaGljc0NvbnRleHRHTDo6cGFpbnRSZW5kZXJpbmdSZXN1bHRzVG9D
YW52YXNXaXRoUXVhbGlmaWVkSWRlbnRpZmllcihRdWFsaWZpZWRSZW5kZXJpbmdSZXNvdXJjZUlk
ZW50aWZpZXIgaW1hZ2VCdWZmZXIsIENvbXBsZXRpb25IYW5kbGVyPHZvaWQoKT4mJiBjb21wbGV0
aW9uSGFuZGxlcikKIHsKLSAgICBhc3NlcnRJc0N1cnJlbnQobV9zdHJlYW1UaHJlYWQpOworICAg
IGFzc2VydElzQ3VycmVudCh3b3JrUXVldWUoKSk7CiAgICAgcGFpbnRQaXhlbEJ1ZmZlclRvSW1h
Z2VCdWZmZXIobV9jb250ZXh0LT5yZWFkUmVuZGVyaW5nUmVzdWx0c0ZvclBhaW50aW5nKCksIGlt
YWdlQnVmZmVyLCBXVEZNb3ZlKGNvbXBsZXRpb25IYW5kbGVyKSk7CiB9CiAKQEAgLTIyMiwxNCAr
MjE5LDE0IEBAIHZvaWQgUmVtb3RlR3JhcGhpY3NDb250ZXh0R0w6OnBhaW50Q29tcG9zaXRlZFJl
c3VsdHNUb0NhbnZhcyhXZWJDb3JlOjpSZW5kZXJpbmdSCiAKIHZvaWQgUmVtb3RlR3JhcGhpY3ND
b250ZXh0R0w6OnBhaW50Q29tcG9zaXRlZFJlc3VsdHNUb0NhbnZhc1dpdGhRdWFsaWZpZWRJZGVu
dGlmaWVyKFF1YWxpZmllZFJlbmRlcmluZ1Jlc291cmNlSWRlbnRpZmllciBpbWFnZUJ1ZmZlciwg
Q29tcGxldGlvbkhhbmRsZXI8dm9pZCgpPiYmIGNvbXBsZXRpb25IYW5kbGVyKQogewotICAgIGFz
c2VydElzQ3VycmVudChtX3N0cmVhbVRocmVhZCk7CisgICAgYXNzZXJ0SXNDdXJyZW50KHdvcmtR
dWV1ZSgpKTsKICAgICBwYWludFBpeGVsQnVmZmVyVG9JbWFnZUJ1ZmZlcihtX2NvbnRleHQtPnJl
YWRDb21wb3NpdGVkUmVzdWx0c0ZvclBhaW50aW5nKCksIGltYWdlQnVmZmVyLCBXVEZNb3ZlKGNv
bXBsZXRpb25IYW5kbGVyKSk7CiB9CiAKICNpZiBFTkFCTEUoTUVESUFfU1RSRUFNKQogdm9pZCBS
ZW1vdGVHcmFwaGljc0NvbnRleHRHTDo6cGFpbnRDb21wb3NpdGVkUmVzdWx0c1RvTWVkaWFTYW1w
bGUoQ29tcGxldGlvbkhhbmRsZXI8dm9pZChzdGQ6Om9wdGlvbmFsPFdlYktpdDo6UmVtb3RlVmlk
ZW9GcmFtZVByb3h5OjpQcm9wZXJ0aWVzPiYmKT4mJiBjb21wbGV0aW9uSGFuZGxlcikKIHsKLSAg
ICBhc3NlcnRJc0N1cnJlbnQobV9zdHJlYW1UaHJlYWQpOworICAgIGFzc2VydElzQ3VycmVudCh3
b3JrUXVldWUoKSk7CiAgICAgc3RkOjpvcHRpb25hbDxXZWJLaXQ6OlJlbW90ZVZpZGVvRnJhbWVQ
cm94eTo6UHJvcGVydGllcz4gcmVzdWx0OwogICAgIGlmIChhdXRvIHZpZGVvRnJhbWUgPSBtX2Nv
bnRleHQtPnBhaW50Q29tcG9zaXRlZFJlc3VsdHNUb01lZGlhU2FtcGxlKCkpIHsKICAgICAgICAg
YXV0byB3cml0ZSA9IFJlbW90ZVZpZGVvRnJhbWVXcml0ZVJlZmVyZW5jZTo6Z2VuZXJhdGVGb3JB
ZGQoKTsKQEAgLTI0Myw3ICsyNDAsNyBAQCB2b2lkIFJlbW90ZUdyYXBoaWNzQ29udGV4dEdMOjpw
YWludENvbXBvc2l0ZWRSZXN1bHRzVG9NZWRpYVNhbXBsZShDb21wbGV0aW9uSGFuZAogCiB2b2lk
IFJlbW90ZUdyYXBoaWNzQ29udGV4dEdMOjpwYWludFBpeGVsQnVmZmVyVG9JbWFnZUJ1ZmZlcihz
dGQ6Om9wdGlvbmFsPFdlYkNvcmU6OlBpeGVsQnVmZmVyPiYmIHBpeGVsQnVmZmVyLCBRdWFsaWZp
ZWRSZW5kZXJpbmdSZXNvdXJjZUlkZW50aWZpZXIgdGFyZ2V0LCBDb21wbGV0aW9uSGFuZGxlcjx2
b2lkKCk+JiYgY29tcGxldGlvbkhhbmRsZXIpCiB7Ci0gICAgYXNzZXJ0SXNDdXJyZW50KG1fc3Ry
ZWFtVGhyZWFkKTsKKyAgICBhc3NlcnRJc0N1cnJlbnQod29ya1F1ZXVlKCkpOwogICAgIC8vIEZJ
WE1FOiBXZSBkbyBub3QgaGF2ZSBmdW5jdGlvbmluZyByZWFkL3dyaXRlIGZlbmNlcyBpbiBSZW1v
dGVSZW5kZXJpbmdCYWNrZW5kLiBUaHVzIHRoaXMgaXMgc3luY2hyb25vdXMsCiAgICAgLy8gYXMg
YXJlIHRoZSBtZXNzYWdlcyB0aGF0IGNhbGwgdGhlc2UuCiAgICAgTG9jayBsb2NrOwpAQCAtMjg3
LDcgKzI4NCw3IEBAIHZvaWQgUmVtb3RlR3JhcGhpY3NDb250ZXh0R0w6OmNvcHlUZXh0dXJlRnJv
bVZpZGVvRnJhbWUoV2ViS2l0OjpSZW1vdGVWaWRlb0ZyYW1lCiAKIHZvaWQgUmVtb3RlR3JhcGhp
Y3NDb250ZXh0R0w6OnNpbXVsYXRlRXZlbnRGb3JUZXN0aW5nKFdlYkNvcmU6OkdyYXBoaWNzQ29u
dGV4dEdMOjpTaW11bGF0ZWRFdmVudEZvclRlc3RpbmcgZXZlbnQpCiB7Ci0gICAgYXNzZXJ0SXND
dXJyZW50KG1fc3RyZWFtVGhyZWFkKTsKKyAgICBhc3NlcnRJc0N1cnJlbnQod29ya1F1ZXVlKCkp
OwogICAgIC8vIEZJWE1FOiBvbmx5IHJ1biB0aGlzIGluIHRlc3RpbmcgbW9kZS4gaHR0cHM6Ly9i
dWdzLndlYmtpdC5vcmcvc2hvd19idWcuY2dpP2lkPTIyMjU0NAogICAgIGlmIChldmVudCA9PSBX
ZWJDb3JlOjpHcmFwaGljc0NvbnRleHRHTDo6U2ltdWxhdGVkRXZlbnRGb3JUZXN0aW5nOjpUaW1l
b3V0KSB7CiAgICAgICAgIC8vIFNpbXVsYXRlIHRoZSB0aW1lb3V0IGJ5IGp1c3QgZGlzY2FyZGlu
ZyB0aGUgY29udGV4dC4gVGhlIHN1YnNlcXVlbnQgbWVzc2FnZXMgYWN0IGxpa2UKZGlmZiAtLWdp
dCBhL1NvdXJjZS9XZWJLaXQvR1BVUHJvY2Vzcy9ncmFwaGljcy9SZW1vdGVHcmFwaGljc0NvbnRl
eHRHTC5oIGIvU291cmNlL1dlYktpdC9HUFVQcm9jZXNzL2dyYXBoaWNzL1JlbW90ZUdyYXBoaWNz
Q29udGV4dEdMLmgKaW5kZXggYTUwNTIyNWNjNTg5ZmQ5YTA2YTU2YzNkOWExZjFmNjQwZDkwNjMw
YS4uYTkxNGUzZGNmMDZiOThhNzY2ZGMzNGMyNDRjNWJjMjdmNTBhOTliZiAxMDA2NDQKLS0tIGEv
U291cmNlL1dlYktpdC9HUFVQcm9jZXNzL2dyYXBoaWNzL1JlbW90ZUdyYXBoaWNzQ29udGV4dEdM
LmgKKysrIGIvU291cmNlL1dlYktpdC9HUFVQcm9jZXNzL2dyYXBoaWNzL1JlbW90ZUdyYXBoaWNz
Q29udGV4dEdMLmgKQEAgLTY5LDYgKzY5LDkgQEAgbmFtZXNwYWNlIFdlYktpdCB7CiBjbGFzcyBS
ZW1vdGVWaWRlb0ZyYW1lT2JqZWN0SGVhcDsKICNlbmRpZgogCitJUEM6OlN0cmVhbUNvbm5lY3Rp
b25Xb3JrUXVldWUmIHJlbW90ZUdyYXBoaWNzQ29udGV4dEdMU3RyZWFtV29ya1F1ZXVlKCk7CisK
KwogLy8gR1BVIHByb2Nlc3Mgc2lkZSBpbXBsZW1lbnRhdGlvbiBvZiB0aGF0IHJlY2VpdmVzIG1l
c3NhZ2VzIGFib3V0IEdyYXBoaWNzQ29udGV4dEdMIGNhbGxzCiAvLyBhbmQgaXNzdWVzIHJlYWwg
R3JhcGhpY3NDb250ZXh0R0wgY2FsbHMgYmFzZWQgb24gdGhlIHJlY2VpdmVkIG1lc3NhZ2VzLgog
Ly8gVGhlIGltcGxlbWVudGF0aW9uIGlzIGxhcmdlbHkgZ2VuZXJhdGVkIGJ5IHJ1bm5pbmcgVG9v
bHMvU2NyaXB0cy9nZW5lcmF0ZS1ncHVwLXdlYmdsLgpAQCAtODcsNiArOTAsNyBAQCBwdWJsaWM6
CiBwcm90ZWN0ZWQ6CiAgICAgUmVtb3RlR3JhcGhpY3NDb250ZXh0R0woR1BVQ29ubmVjdGlvblRv
V2ViUHJvY2VzcyYsIEdyYXBoaWNzQ29udGV4dEdMSWRlbnRpZmllciwgUmVtb3RlUmVuZGVyaW5n
QmFja2VuZCYsIElQQzo6U3RyZWFtQ29ubmVjdGlvbkJ1ZmZlciYmKTsKICAgICB2b2lkIGluaXRp
YWxpemUoV2ViQ29yZTo6R3JhcGhpY3NDb250ZXh0R0xBdHRyaWJ1dGVzJiYpOworICAgIElQQzo6
U3RyZWFtQ29ubmVjdGlvbldvcmtRdWV1ZSYgd29ya1F1ZXVlKCkgY29uc3QgeyByZXR1cm4gcmVt
b3RlR3JhcGhpY3NDb250ZXh0R0xTdHJlYW1Xb3JrUXVldWUoKTsgfQogCiAgICAgdm9pZCB3b3Jr
UXVldWVJbml0aWFsaXplKFdlYkNvcmU6OkdyYXBoaWNzQ29udGV4dEdMQXR0cmlidXRlcyYmKTsK
ICAgICB2aXJ0dWFsIHZvaWQgcGxhdGZvcm1Xb3JrUXVldWVJbml0aWFsaXplKFdlYkNvcmU6Okdy
YXBoaWNzQ29udGV4dEdMQXR0cmlidXRlcyYmKSB7IH07CkBAIC0xMzksMTkgKzE0MywxNiBAQCBw
cm90ZWN0ZWQ6CiAjZWxzZQogICAgIHVzaW5nIEdDR0xDb250ZXh0ID0gV2ViQ29yZTo6R3JhcGhp
Y3NDb250ZXh0R0xUZXh0dXJlTWFwcGVyOwogI2VuZGlmCi0gICAgCi0gICAgUmVmUHRyPEdDR0xD
b250ZXh0PiBtX2NvbnRleHQgV1RGX0dVQVJERURfQllfQ0FQQUJJTElUWShtX3N0cmVhbVRocmVh
ZCk7CisgICAgUmVmUHRyPEdDR0xDb250ZXh0PiBtX2NvbnRleHQgV1RGX0dVQVJERURfQllfQ0FQ
QUJJTElUWSh3b3JrUXVldWUoKSk7CiAgICAgR3JhcGhpY3NDb250ZXh0R0xJZGVudGlmaWVyIG1f
Z3JhcGhpY3NDb250ZXh0R0xJZGVudGlmaWVyOwogICAgIFJlZjxSZW1vdGVSZW5kZXJpbmdCYWNr
ZW5kPiBtX3JlbmRlcmluZ0JhY2tlbmQ7CiAjaWYgRU5BQkxFKFZJREVPKQogICAgIFJlZjxSZW1v
dGVWaWRlb0ZyYW1lT2JqZWN0SGVhcD4gbV92aWRlb0ZyYW1lT2JqZWN0SGVhcDsKICNlbmRpZgog
ICAgIFNjb3BlZFdlYkdMUmVuZGVyaW5nUmVzb3VyY2VzUmVxdWVzdCBtX3JlbmRlcmluZ1Jlc291
cmNlc1JlcXVlc3Q7Ci0gICAgTk9fVU5JUVVFX0FERFJFU1MgVGhyZWFkQXNzZXJ0aW9uIG1fc3Ry
ZWFtVGhyZWFkOwogICAgIFdlYkNvcmU6OlByb2Nlc3NJZGVudGlmaWVyIG1fd2ViUHJvY2Vzc0lk
ZW50aWZpZXI7CiB9OwogCi1JUEM6OlN0cmVhbUNvbm5lY3Rpb25Xb3JrUXVldWUmIHJlbW90ZUdy
YXBoaWNzQ29udGV4dEdMU3RyZWFtV29ya1F1ZXVlKCk7CiAKIH0gLy8gbmFtZXNwYWNlIFdlYktp
dAogCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViS2l0L0dQVVByb2Nlc3MvZ3JhcGhpY3MvUmVtb3Rl
R3JhcGhpY3NDb250ZXh0R0wubWVzc2FnZXMuaW4gYi9Tb3VyY2UvV2ViS2l0L0dQVVByb2Nlc3Mv
Z3JhcGhpY3MvUmVtb3RlR3JhcGhpY3NDb250ZXh0R0wubWVzc2FnZXMuaW4KaW5kZXggZDI3NjU4
NWEyMmNkYmQzN2U1OTBkZjZkODMwMjNiN2EzNGQwYzQ3ZS4uNDRiOGQ2ZTc5ZTRlMTg1YjAzZDQ3
MmFhMTRkNjU3NWUyYjZhYzFkZiAxMDA2NDQKLS0tIGEvU291cmNlL1dlYktpdC9HUFVQcm9jZXNz
L2dyYXBoaWNzL1JlbW90ZUdyYXBoaWNzQ29udGV4dEdMLm1lc3NhZ2VzLmluCisrKyBiL1NvdXJj
ZS9XZWJLaXQvR1BVUHJvY2Vzcy9ncmFwaGljcy9SZW1vdGVHcmFwaGljc0NvbnRleHRHTC5tZXNz
YWdlcy5pbgpAQCAtNDEsOSArNDEsNyBAQCBtZXNzYWdlcyAtPiBSZW1vdGVHcmFwaGljc0NvbnRl
eHRHTCBOb3RSZWZDb3VudGVkIFN0cmVhbSB7CiAgICAgdm9pZCBHZXRFcnJvcigpIC0+ICh1aW50
MzJfdCByZXR1cm5WYWx1ZSkgU3luY2hyb25vdXMKICAgICB2b2lkIFBhaW50UmVuZGVyaW5nUmVz
dWx0c1RvQ2FudmFzKFdlYkNvcmU6OlJlbmRlcmluZ1Jlc291cmNlSWRlbnRpZmllciBpbWFnZUJ1
ZmZlcikgLT4gKCkgU3luY2hyb25vdXMKICAgICB2b2lkIFBhaW50Q29tcG9zaXRlZFJlc3VsdHNU
b0NhbnZhcyhXZWJDb3JlOjpSZW5kZXJpbmdSZXNvdXJjZUlkZW50aWZpZXIgaW1hZ2VCdWZmZXIp
IC0+ICgpIFN5bmNocm9ub3VzCi0jaWYgRU5BQkxFKFZJREVPKQotICAgIHZvaWQgQ29weVRleHR1
cmVGcm9tVmlkZW9GcmFtZShXZWJLaXQ6OlJlbW90ZVZpZGVvRnJhbWVSZWFkUmVmZXJlbmNlIHZp
ZGVvRnJhbWUsIHVpbnQzMl90IHRleHR1cmUsIHVpbnQzMl90IHRhcmdldCwgaW50MzJfdCBsZXZl
bCwgdWludDMyX3QgaW50ZXJuYWxGb3JtYXQsIHVpbnQzMl90IGZvcm1hdCwgdWludDMyX3QgdHlw
ZSwgYm9vbCBwcmVtdWx0aXBseUFscGhhLCBib29sIGZsaXBZKSAtPiAoYm9vbCBzdWNjZXNzKSBT
eW5jaHJvbm91cwotI2VuZGlmCisgICAgdm9pZCBDb3B5VGV4dHVyZUZyb21WaWRlb0ZyYW1lKFdl
YktpdDo6UmVtb3RlVmlkZW9GcmFtZVJlYWRSZWZlcmVuY2UgcmVhZCwgdWludDMyX3QgdGV4dHVy
ZSwgdWludDMyX3QgdGFyZ2V0LCBpbnQzMl90IGxldmVsLCB1aW50MzJfdCBpbnRlcm5hbEZvcm1h
dCwgdWludDMyX3QgZm9ybWF0LCB1aW50MzJfdCB0eXBlLCBib29sIHByZW11bHRpcGx5QWxwaGEs
IGJvb2wgZmxpcFkpIC0+IChib29sIHN1Y2Nlc3MpIFN5bmNocm9ub3VzCiAjaWYgRU5BQkxFKE1F
RElBX1NUUkVBTSkKICAgICB2b2lkIFBhaW50Q29tcG9zaXRlZFJlc3VsdHNUb01lZGlhU2FtcGxl
KCkgLT4gKHN0ZDo6b3B0aW9uYWw8V2ViS2l0OjpSZW1vdGVWaWRlb0ZyYW1lUHJveHk6OlByb3Bl
cnRpZXM+IHByb3BlcnRpZXMpIFN5bmNocm9ub3VzCiAjZW5kaWYKZGlmZiAtLWdpdCBhL1NvdXJj
ZS9XZWJLaXQvR1BVUHJvY2Vzcy9ncmFwaGljcy9SZW1vdGVHcmFwaGljc0NvbnRleHRHTENvY29h
LmNwcCBiL1NvdXJjZS9XZWJLaXQvR1BVUHJvY2Vzcy9ncmFwaGljcy9SZW1vdGVHcmFwaGljc0Nv
bnRleHRHTENvY29hLmNwcAppbmRleCA3OWRmOTljZTI5YzMzYTBiNGZhNDcwMDI1NDcwNGY4ZTAz
ZTFhYzcxLi5hNDk3MGMzNzI5NTVlMDA1MGFkYmRkMDFiOWVlNmIwMTk1MjU0NzM4IDEwMDY0NAot
LS0gYS9Tb3VyY2UvV2ViS2l0L0dQVVByb2Nlc3MvZ3JhcGhpY3MvUmVtb3RlR3JhcGhpY3NDb250
ZXh0R0xDb2NvYS5jcHAKKysrIGIvU291cmNlL1dlYktpdC9HUFVQcm9jZXNzL2dyYXBoaWNzL1Jl
bW90ZUdyYXBoaWNzQ29udGV4dEdMQ29jb2EuY3BwCkBAIC00Niw3ICs0Niw3IEBAIG5hbWVzcGFj
ZSBXZWJLaXQgewogI2lmIEVOQUJMRShWSURFTykKIHZvaWQgUmVtb3RlR3JhcGhpY3NDb250ZXh0
R0w6OmNvcHlUZXh0dXJlRnJvbVZpZGVvRnJhbWUoV2ViS2l0OjpSZW1vdGVWaWRlb0ZyYW1lUmVh
ZFJlZmVyZW5jZSByZWFkLCB1aW50MzJfdCB0ZXh0dXJlLCB1aW50MzJfdCB0YXJnZXQsIGludDMy
X3QgbGV2ZWwsIHVpbnQzMl90IGludGVybmFsRm9ybWF0LCB1aW50MzJfdCBmb3JtYXQsIHVpbnQz
Ml90IHR5cGUsIGJvb2wgcHJlbXVsdGlwbHlBbHBoYSwgYm9vbCBmbGlwWSwgQ29tcGxldGlvbkhh
bmRsZXI8dm9pZChib29sKT4mJiBjb21wbGV0aW9uSGFuZGxlcikKIHsKLSAgICBhc3NlcnRJc0N1
cnJlbnQobV9zdHJlYW1UaHJlYWQpOworICAgIGFzc2VydElzQ3VycmVudCh3b3JrUXVldWUoKSk7
CiAgICAgVU5VU0VEX1ZBUklBQkxFKHByZW11bHRpcGx5QWxwaGEpOwogICAgIEFTU0VSVF9VTlVT
RUQodGFyZ2V0LCB0YXJnZXQgPT0gV2ViQ29yZTo6R3JhcGhpY3NDb250ZXh0R0w6OlRFWFRVUkVf
MkQpOwogCkBAIC0xMTAsMTMgKzExMCwxMyBAQCBSZW1vdGVHcmFwaGljc0NvbnRleHRHTENvY29h
OjpSZW1vdGVHcmFwaGljc0NvbnRleHRHTENvY29hKEdQVUNvbm5lY3Rpb25Ub1dlYlBybwogCiB2
b2lkIFJlbW90ZUdyYXBoaWNzQ29udGV4dEdMQ29jb2E6OnBsYXRmb3JtV29ya1F1ZXVlSW5pdGlh
bGl6ZShXZWJDb3JlOjpHcmFwaGljc0NvbnRleHRHTEF0dHJpYnV0ZXMmJiBhdHRyaWJ1dGVzKQog
ewotICAgIGFzc2VydElzQ3VycmVudChtX3N0cmVhbVRocmVhZCk7CisgICAgYXNzZXJ0SXNDdXJy
ZW50KHdvcmtRdWV1ZSgpKTsKICAgICBtX2NvbnRleHQgPSBXZWJDb3JlOjpHcmFwaGljc0NvbnRl
eHRHTENvY29hOjpjcmVhdGUoV1RGTW92ZShhdHRyaWJ1dGVzKSwgV2ViQ29yZTo6UHJvY2Vzc0lk
ZW50aXR5IHsgbV9yZXNvdXJjZU93bmVyIH0pOwogfQogCiB2b2lkIFJlbW90ZUdyYXBoaWNzQ29u
dGV4dEdMQ29jb2E6OnByZXBhcmVGb3JEaXNwbGF5KENvbXBsZXRpb25IYW5kbGVyPHZvaWQoV1RG
OjpNYWNoU2VuZFJpZ2h0JiYpPiYmIGNvbXBsZXRpb25IYW5kbGVyKQogewotICAgIGFzc2VydElz
Q3VycmVudChtX3N0cmVhbVRocmVhZCk7CisgICAgYXNzZXJ0SXNDdXJyZW50KHdvcmtRdWV1ZSgp
KTsKICAgICBtX2NvbnRleHQtPnByZXBhcmVGb3JEaXNwbGF5KCk7CiAgICAgTWFjaFNlbmRSaWdo
dCBzZW5kUmlnaHQ7CiAgICAgV2ViQ29yZTo6SU9TdXJmYWNlKiBkaXNwbGF5QnVmZmVyID0gbV9j
b250ZXh0LT5kaXNwbGF5QnVmZmVyKCk7CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViS2l0L0dQVVBy
b2Nlc3MvZ3JhcGhpY3MvUmVtb3RlR3JhcGhpY3NDb250ZXh0R0xGdW5jdGlvbnNHZW5lcmF0ZWQu
aCBiL1NvdXJjZS9XZWJLaXQvR1BVUHJvY2Vzcy9ncmFwaGljcy9SZW1vdGVHcmFwaGljc0NvbnRl
eHRHTEZ1bmN0aW9uc0dlbmVyYXRlZC5oCmluZGV4IDkzYmQ2NzcxNjhiYjQ0Yzk4MTM0ZGM3ODk4
YzkwM2UwZmJkMDNlNTYuLmE1OWU4Y2EwOTg5OTg5MGEyNGFjN2JkODMyYzdjYzFjZmUwZDNjZjkg
MTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJLaXQvR1BVUHJvY2Vzcy9ncmFwaGljcy9SZW1vdGVHcmFw
aGljc0NvbnRleHRHTEZ1bmN0aW9uc0dlbmVyYXRlZC5oCisrKyBiL1NvdXJjZS9XZWJLaXQvR1BV
UHJvY2Vzcy9ncmFwaGljcy9SZW1vdGVHcmFwaGljc0NvbnRleHRHTEZ1bmN0aW9uc0dlbmVyYXRl
ZC5oCkBAIC0yOCwyNzkgKzI4LDI3OSBAQAogICAgIHZvaWQgbW92ZUVycm9yc1RvU3ludGhldGlj
RXJyb3JMaXN0KENvbXBsZXRpb25IYW5kbGVyPHZvaWQoYm9vbCk+JiYgY29tcGxldGlvbkhhbmRs
ZXIpCiAgICAgewogICAgICAgICBib29sIHJldHVyblZhbHVlID0geyB9OwotICAgICAgICBhc3Nl
cnRJc0N1cnJlbnQobV9zdHJlYW1UaHJlYWQpOworICAgICAgICBhc3NlcnRJc0N1cnJlbnQod29y
a1F1ZXVlKCkpOwogICAgICAgICByZXR1cm5WYWx1ZSA9IG1fY29udGV4dC0+bW92ZUVycm9yc1Rv
U3ludGhldGljRXJyb3JMaXN0KCk7CiAgICAgICAgIGNvbXBsZXRpb25IYW5kbGVyKHJldHVyblZh
bHVlKTsKICAgICB9CiAgICAgdm9pZCBhY3RpdmVUZXh0dXJlKHVpbnQzMl90IHRleHR1cmUpCiAg
ICAgewotICAgICAgICBhc3NlcnRJc0N1cnJlbnQobV9zdHJlYW1UaHJlYWQpOworICAgICAgICBh
c3NlcnRJc0N1cnJlbnQod29ya1F1ZXVlKCkpOwogICAgICAgICBtX2NvbnRleHQtPmFjdGl2ZVRl
eHR1cmUodGV4dHVyZSk7CiAgICAgfQogICAgIHZvaWQgYXR0YWNoU2hhZGVyKHVpbnQzMl90IHBy
b2dyYW0sIHVpbnQzMl90IHNoYWRlcikKICAgICB7Ci0gICAgICAgIGFzc2VydElzQ3VycmVudCht
X3N0cmVhbVRocmVhZCk7CisgICAgICAgIGFzc2VydElzQ3VycmVudCh3b3JrUXVldWUoKSk7CiAg
ICAgICAgIG1fY29udGV4dC0+YXR0YWNoU2hhZGVyKHByb2dyYW0sIHNoYWRlcik7CiAgICAgfQog
ICAgIHZvaWQgYmluZEF0dHJpYkxvY2F0aW9uKHVpbnQzMl90IGFyZzAsIHVpbnQzMl90IGluZGV4
LCBTdHJpbmcmJiBuYW1lKQogICAgIHsKLSAgICAgICAgYXNzZXJ0SXNDdXJyZW50KG1fc3RyZWFt
VGhyZWFkKTsKKyAgICAgICAgYXNzZXJ0SXNDdXJyZW50KHdvcmtRdWV1ZSgpKTsKICAgICAgICAg
bV9jb250ZXh0LT5iaW5kQXR0cmliTG9jYXRpb24oYXJnMCwgaW5kZXgsIG5hbWUpOwogICAgIH0K
ICAgICB2b2lkIGJpbmRCdWZmZXIodWludDMyX3QgdGFyZ2V0LCB1aW50MzJfdCBhcmcxKQogICAg
IHsKLSAgICAgICAgYXNzZXJ0SXNDdXJyZW50KG1fc3RyZWFtVGhyZWFkKTsKKyAgICAgICAgYXNz
ZXJ0SXNDdXJyZW50KHdvcmtRdWV1ZSgpKTsKICAgICAgICAgbV9jb250ZXh0LT5iaW5kQnVmZmVy
KHRhcmdldCwgYXJnMSk7CiAgICAgfQogICAgIHZvaWQgYmluZEZyYW1lYnVmZmVyKHVpbnQzMl90
IHRhcmdldCwgdWludDMyX3QgYXJnMSkKICAgICB7Ci0gICAgICAgIGFzc2VydElzQ3VycmVudCht
X3N0cmVhbVRocmVhZCk7CisgICAgICAgIGFzc2VydElzQ3VycmVudCh3b3JrUXVldWUoKSk7CiAg
ICAgICAgIG1fY29udGV4dC0+YmluZEZyYW1lYnVmZmVyKHRhcmdldCwgYXJnMSk7CiAgICAgfQog
ICAgIHZvaWQgYmluZFJlbmRlcmJ1ZmZlcih1aW50MzJfdCB0YXJnZXQsIHVpbnQzMl90IGFyZzEp
CiAgICAgewotICAgICAgICBhc3NlcnRJc0N1cnJlbnQobV9zdHJlYW1UaHJlYWQpOworICAgICAg
ICBhc3NlcnRJc0N1cnJlbnQod29ya1F1ZXVlKCkpOwogICAgICAgICBtX2NvbnRleHQtPmJpbmRS
ZW5kZXJidWZmZXIodGFyZ2V0LCBhcmcxKTsKICAgICB9CiAgICAgdm9pZCBiaW5kVGV4dHVyZSh1
aW50MzJfdCB0YXJnZXQsIHVpbnQzMl90IGFyZzEpCiAgICAgewotICAgICAgICBhc3NlcnRJc0N1
cnJlbnQobV9zdHJlYW1UaHJlYWQpOworICAgICAgICBhc3NlcnRJc0N1cnJlbnQod29ya1F1ZXVl
KCkpOwogICAgICAgICBtX2NvbnRleHQtPmJpbmRUZXh0dXJlKHRhcmdldCwgYXJnMSk7CiAgICAg
fQogICAgIHZvaWQgYmxlbmRDb2xvcihmbG9hdCByZWQsIGZsb2F0IGdyZWVuLCBmbG9hdCBibHVl
LCBmbG9hdCBhbHBoYSkKICAgICB7Ci0gICAgICAgIGFzc2VydElzQ3VycmVudChtX3N0cmVhbVRo
cmVhZCk7CisgICAgICAgIGFzc2VydElzQ3VycmVudCh3b3JrUXVldWUoKSk7CiAgICAgICAgIG1f
Y29udGV4dC0+YmxlbmRDb2xvcihyZWQsIGdyZWVuLCBibHVlLCBhbHBoYSk7CiAgICAgfQogICAg
IHZvaWQgYmxlbmRFcXVhdGlvbih1aW50MzJfdCBtb2RlKQogICAgIHsKLSAgICAgICAgYXNzZXJ0
SXNDdXJyZW50KG1fc3RyZWFtVGhyZWFkKTsKKyAgICAgICAgYXNzZXJ0SXNDdXJyZW50KHdvcmtR
dWV1ZSgpKTsKICAgICAgICAgbV9jb250ZXh0LT5ibGVuZEVxdWF0aW9uKG1vZGUpOwogICAgIH0K
ICAgICB2b2lkIGJsZW5kRXF1YXRpb25TZXBhcmF0ZSh1aW50MzJfdCBtb2RlUkdCLCB1aW50MzJf
dCBtb2RlQWxwaGEpCiAgICAgewotICAgICAgICBhc3NlcnRJc0N1cnJlbnQobV9zdHJlYW1UaHJl
YWQpOworICAgICAgICBhc3NlcnRJc0N1cnJlbnQod29ya1F1ZXVlKCkpOwogICAgICAgICBtX2Nv
bnRleHQtPmJsZW5kRXF1YXRpb25TZXBhcmF0ZShtb2RlUkdCLCBtb2RlQWxwaGEpOwogICAgIH0K
ICAgICB2b2lkIGJsZW5kRnVuYyh1aW50MzJfdCBzZmFjdG9yLCB1aW50MzJfdCBkZmFjdG9yKQog
ICAgIHsKLSAgICAgICAgYXNzZXJ0SXNDdXJyZW50KG1fc3RyZWFtVGhyZWFkKTsKKyAgICAgICAg
YXNzZXJ0SXNDdXJyZW50KHdvcmtRdWV1ZSgpKTsKICAgICAgICAgbV9jb250ZXh0LT5ibGVuZEZ1
bmMoc2ZhY3RvciwgZGZhY3Rvcik7CiAgICAgfQogICAgIHZvaWQgYmxlbmRGdW5jU2VwYXJhdGUo
dWludDMyX3Qgc3JjUkdCLCB1aW50MzJfdCBkc3RSR0IsIHVpbnQzMl90IHNyY0FscGhhLCB1aW50
MzJfdCBkc3RBbHBoYSkKICAgICB7Ci0gICAgICAgIGFzc2VydElzQ3VycmVudChtX3N0cmVhbVRo
cmVhZCk7CisgICAgICAgIGFzc2VydElzQ3VycmVudCh3b3JrUXVldWUoKSk7CiAgICAgICAgIG1f
Y29udGV4dC0+YmxlbmRGdW5jU2VwYXJhdGUoc3JjUkdCLCBkc3RSR0IsIHNyY0FscGhhLCBkc3RB
bHBoYSk7CiAgICAgfQogICAgIHZvaWQgY2hlY2tGcmFtZWJ1ZmZlclN0YXR1cyh1aW50MzJfdCB0
YXJnZXQsIENvbXBsZXRpb25IYW5kbGVyPHZvaWQodWludDMyX3QpPiYmIGNvbXBsZXRpb25IYW5k
bGVyKQogICAgIHsKICAgICAgICAgR0NHTGVudW0gcmV0dXJuVmFsdWUgPSB7IH07Ci0gICAgICAg
IGFzc2VydElzQ3VycmVudChtX3N0cmVhbVRocmVhZCk7CisgICAgICAgIGFzc2VydElzQ3VycmVu
dCh3b3JrUXVldWUoKSk7CiAgICAgICAgIHJldHVyblZhbHVlID0gbV9jb250ZXh0LT5jaGVja0Zy
YW1lYnVmZmVyU3RhdHVzKHRhcmdldCk7CiAgICAgICAgIGNvbXBsZXRpb25IYW5kbGVyKHJldHVy
blZhbHVlKTsKICAgICB9CiAgICAgdm9pZCBjbGVhcih1aW50MzJfdCBtYXNrKQogICAgIHsKLSAg
ICAgICAgYXNzZXJ0SXNDdXJyZW50KG1fc3RyZWFtVGhyZWFkKTsKKyAgICAgICAgYXNzZXJ0SXND
dXJyZW50KHdvcmtRdWV1ZSgpKTsKICAgICAgICAgbV9jb250ZXh0LT5jbGVhcihtYXNrKTsKICAg
ICB9CiAgICAgdm9pZCBjbGVhckNvbG9yKGZsb2F0IHJlZCwgZmxvYXQgZ3JlZW4sIGZsb2F0IGJs
dWUsIGZsb2F0IGFscGhhKQogICAgIHsKLSAgICAgICAgYXNzZXJ0SXNDdXJyZW50KG1fc3RyZWFt
VGhyZWFkKTsKKyAgICAgICAgYXNzZXJ0SXNDdXJyZW50KHdvcmtRdWV1ZSgpKTsKICAgICAgICAg
bV9jb250ZXh0LT5jbGVhckNvbG9yKHJlZCwgZ3JlZW4sIGJsdWUsIGFscGhhKTsKICAgICB9CiAg
ICAgdm9pZCBjbGVhckRlcHRoKGZsb2F0IGRlcHRoKQogICAgIHsKLSAgICAgICAgYXNzZXJ0SXND
dXJyZW50KG1fc3RyZWFtVGhyZWFkKTsKKyAgICAgICAgYXNzZXJ0SXNDdXJyZW50KHdvcmtRdWV1
ZSgpKTsKICAgICAgICAgbV9jb250ZXh0LT5jbGVhckRlcHRoKGRlcHRoKTsKICAgICB9CiAgICAg
dm9pZCBjbGVhclN0ZW5jaWwoaW50MzJfdCBzKQogICAgIHsKLSAgICAgICAgYXNzZXJ0SXNDdXJy
ZW50KG1fc3RyZWFtVGhyZWFkKTsKKyAgICAgICAgYXNzZXJ0SXNDdXJyZW50KHdvcmtRdWV1ZSgp
KTsKICAgICAgICAgbV9jb250ZXh0LT5jbGVhclN0ZW5jaWwocyk7CiAgICAgfQogICAgIHZvaWQg
Y29sb3JNYXNrKGJvb2wgcmVkLCBib29sIGdyZWVuLCBib29sIGJsdWUsIGJvb2wgYWxwaGEpCiAg
ICAgewotICAgICAgICBhc3NlcnRJc0N1cnJlbnQobV9zdHJlYW1UaHJlYWQpOworICAgICAgICBh
c3NlcnRJc0N1cnJlbnQod29ya1F1ZXVlKCkpOwogICAgICAgICBtX2NvbnRleHQtPmNvbG9yTWFz
ayhzdGF0aWNfY2FzdDxHQ0dMYm9vbGVhbj4ocmVkKSwgc3RhdGljX2Nhc3Q8R0NHTGJvb2xlYW4+
KGdyZWVuKSwgc3RhdGljX2Nhc3Q8R0NHTGJvb2xlYW4+KGJsdWUpLCBzdGF0aWNfY2FzdDxHQ0dM
Ym9vbGVhbj4oYWxwaGEpKTsKICAgICB9CiAgICAgdm9pZCBjb21waWxlU2hhZGVyKHVpbnQzMl90
IGFyZzApCiAgICAgewotICAgICAgICBhc3NlcnRJc0N1cnJlbnQobV9zdHJlYW1UaHJlYWQpOwor
ICAgICAgICBhc3NlcnRJc0N1cnJlbnQod29ya1F1ZXVlKCkpOwogICAgICAgICBtX2NvbnRleHQt
PmNvbXBpbGVTaGFkZXIoYXJnMCk7CiAgICAgfQogICAgIHZvaWQgY29weVRleEltYWdlMkQodWlu
dDMyX3QgdGFyZ2V0LCBpbnQzMl90IGxldmVsLCB1aW50MzJfdCBpbnRlcm5hbGZvcm1hdCwgaW50
MzJfdCB4LCBpbnQzMl90IHksIGludDMyX3Qgd2lkdGgsIGludDMyX3QgaGVpZ2h0LCBpbnQzMl90
IGJvcmRlcikKICAgICB7Ci0gICAgICAgIGFzc2VydElzQ3VycmVudChtX3N0cmVhbVRocmVhZCk7
CisgICAgICAgIGFzc2VydElzQ3VycmVudCh3b3JrUXVldWUoKSk7CiAgICAgICAgIG1fY29udGV4
dC0+Y29weVRleEltYWdlMkQodGFyZ2V0LCBsZXZlbCwgaW50ZXJuYWxmb3JtYXQsIHgsIHksIHdp
ZHRoLCBoZWlnaHQsIGJvcmRlcik7CiAgICAgfQogICAgIHZvaWQgY29weVRleFN1YkltYWdlMkQo
dWludDMyX3QgdGFyZ2V0LCBpbnQzMl90IGxldmVsLCBpbnQzMl90IHhvZmZzZXQsIGludDMyX3Qg
eW9mZnNldCwgaW50MzJfdCB4LCBpbnQzMl90IHksIGludDMyX3Qgd2lkdGgsIGludDMyX3QgaGVp
Z2h0KQogICAgIHsKLSAgICAgICAgYXNzZXJ0SXNDdXJyZW50KG1fc3RyZWFtVGhyZWFkKTsKKyAg
ICAgICAgYXNzZXJ0SXNDdXJyZW50KHdvcmtRdWV1ZSgpKTsKICAgICAgICAgbV9jb250ZXh0LT5j
b3B5VGV4U3ViSW1hZ2UyRCh0YXJnZXQsIGxldmVsLCB4b2Zmc2V0LCB5b2Zmc2V0LCB4LCB5LCB3
aWR0aCwgaGVpZ2h0KTsKICAgICB9CiAgICAgdm9pZCBjcmVhdGVCdWZmZXIoQ29tcGxldGlvbkhh
bmRsZXI8dm9pZCh1aW50MzJfdCk+JiYgY29tcGxldGlvbkhhbmRsZXIpCiAgICAgewogICAgICAg
ICBQbGF0Zm9ybUdMT2JqZWN0IHJldHVyblZhbHVlID0geyB9OwotICAgICAgICBhc3NlcnRJc0N1
cnJlbnQobV9zdHJlYW1UaHJlYWQpOworICAgICAgICBhc3NlcnRJc0N1cnJlbnQod29ya1F1ZXVl
KCkpOwogICAgICAgICByZXR1cm5WYWx1ZSA9IG1fY29udGV4dC0+Y3JlYXRlQnVmZmVyKCk7CiAg
ICAgICAgIGNvbXBsZXRpb25IYW5kbGVyKHJldHVyblZhbHVlKTsKICAgICB9CiAgICAgdm9pZCBj
cmVhdGVGcmFtZWJ1ZmZlcihDb21wbGV0aW9uSGFuZGxlcjx2b2lkKHVpbnQzMl90KT4mJiBjb21w
bGV0aW9uSGFuZGxlcikKICAgICB7CiAgICAgICAgIFBsYXRmb3JtR0xPYmplY3QgcmV0dXJuVmFs
dWUgPSB7IH07Ci0gICAgICAgIGFzc2VydElzQ3VycmVudChtX3N0cmVhbVRocmVhZCk7CisgICAg
ICAgIGFzc2VydElzQ3VycmVudCh3b3JrUXVldWUoKSk7CiAgICAgICAgIHJldHVyblZhbHVlID0g
bV9jb250ZXh0LT5jcmVhdGVGcmFtZWJ1ZmZlcigpOwogICAgICAgICBjb21wbGV0aW9uSGFuZGxl
cihyZXR1cm5WYWx1ZSk7CiAgICAgfQogICAgIHZvaWQgY3JlYXRlUHJvZ3JhbShDb21wbGV0aW9u
SGFuZGxlcjx2b2lkKHVpbnQzMl90KT4mJiBjb21wbGV0aW9uSGFuZGxlcikKICAgICB7CiAgICAg
ICAgIFBsYXRmb3JtR0xPYmplY3QgcmV0dXJuVmFsdWUgPSB7IH07Ci0gICAgICAgIGFzc2VydElz
Q3VycmVudChtX3N0cmVhbVRocmVhZCk7CisgICAgICAgIGFzc2VydElzQ3VycmVudCh3b3JrUXVl
dWUoKSk7CiAgICAgICAgIHJldHVyblZhbHVlID0gbV9jb250ZXh0LT5jcmVhdGVQcm9ncmFtKCk7
CiAgICAgICAgIGNvbXBsZXRpb25IYW5kbGVyKHJldHVyblZhbHVlKTsKICAgICB9CiAgICAgdm9p
ZCBjcmVhdGVSZW5kZXJidWZmZXIoQ29tcGxldGlvbkhhbmRsZXI8dm9pZCh1aW50MzJfdCk+JiYg
Y29tcGxldGlvbkhhbmRsZXIpCiAgICAgewogICAgICAgICBQbGF0Zm9ybUdMT2JqZWN0IHJldHVy
blZhbHVlID0geyB9OwotICAgICAgICBhc3NlcnRJc0N1cnJlbnQobV9zdHJlYW1UaHJlYWQpOwor
ICAgICAgICBhc3NlcnRJc0N1cnJlbnQod29ya1F1ZXVlKCkpOwogICAgICAgICByZXR1cm5WYWx1
ZSA9IG1fY29udGV4dC0+Y3JlYXRlUmVuZGVyYnVmZmVyKCk7CiAgICAgICAgIGNvbXBsZXRpb25I
YW5kbGVyKHJldHVyblZhbHVlKTsKICAgICB9CiAgICAgdm9pZCBjcmVhdGVTaGFkZXIodWludDMy
X3QgYXJnMCwgQ29tcGxldGlvbkhhbmRsZXI8dm9pZCh1aW50MzJfdCk+JiYgY29tcGxldGlvbkhh
bmRsZXIpCiAgICAgewogICAgICAgICBQbGF0Zm9ybUdMT2JqZWN0IHJldHVyblZhbHVlID0geyB9
OwotICAgICAgICBhc3NlcnRJc0N1cnJlbnQobV9zdHJlYW1UaHJlYWQpOworICAgICAgICBhc3Nl
cnRJc0N1cnJlbnQod29ya1F1ZXVlKCkpOwogICAgICAgICByZXR1cm5WYWx1ZSA9IG1fY29udGV4
dC0+Y3JlYXRlU2hhZGVyKGFyZzApOwogICAgICAgICBjb21wbGV0aW9uSGFuZGxlcihyZXR1cm5W
YWx1ZSk7CiAgICAgfQogICAgIHZvaWQgY3JlYXRlVGV4dHVyZShDb21wbGV0aW9uSGFuZGxlcjx2
b2lkKHVpbnQzMl90KT4mJiBjb21wbGV0aW9uSGFuZGxlcikKICAgICB7CiAgICAgICAgIFBsYXRm
b3JtR0xPYmplY3QgcmV0dXJuVmFsdWUgPSB7IH07Ci0gICAgICAgIGFzc2VydElzQ3VycmVudCht
X3N0cmVhbVRocmVhZCk7CisgICAgICAgIGFzc2VydElzQ3VycmVudCh3b3JrUXVldWUoKSk7CiAg
ICAgICAgIHJldHVyblZhbHVlID0gbV9jb250ZXh0LT5jcmVhdGVUZXh0dXJlKCk7CiAgICAgICAg
IGNvbXBsZXRpb25IYW5kbGVyKHJldHVyblZhbHVlKTsKICAgICB9CiAgICAgdm9pZCBjdWxsRmFj
ZSh1aW50MzJfdCBtb2RlKQogICAgIHsKLSAgICAgICAgYXNzZXJ0SXNDdXJyZW50KG1fc3RyZWFt
VGhyZWFkKTsKKyAgICAgICAgYXNzZXJ0SXNDdXJyZW50KHdvcmtRdWV1ZSgpKTsKICAgICAgICAg
bV9jb250ZXh0LT5jdWxsRmFjZShtb2RlKTsKICAgICB9CiAgICAgdm9pZCBkZWxldGVCdWZmZXIo
dWludDMyX3QgYXJnMCkKICAgICB7Ci0gICAgICAgIGFzc2VydElzQ3VycmVudChtX3N0cmVhbVRo
cmVhZCk7CisgICAgICAgIGFzc2VydElzQ3VycmVudCh3b3JrUXVldWUoKSk7CiAgICAgICAgIG1f
Y29udGV4dC0+ZGVsZXRlQnVmZmVyKGFyZzApOwogICAgIH0KICAgICB2b2lkIGRlbGV0ZUZyYW1l
YnVmZmVyKHVpbnQzMl90IGFyZzApCiAgICAgewotICAgICAgICBhc3NlcnRJc0N1cnJlbnQobV9z
dHJlYW1UaHJlYWQpOworICAgICAgICBhc3NlcnRJc0N1cnJlbnQod29ya1F1ZXVlKCkpOwogICAg
ICAgICBtX2NvbnRleHQtPmRlbGV0ZUZyYW1lYnVmZmVyKGFyZzApOwogICAgIH0KICAgICB2b2lk
IGRlbGV0ZVByb2dyYW0odWludDMyX3QgYXJnMCkKICAgICB7Ci0gICAgICAgIGFzc2VydElzQ3Vy
cmVudChtX3N0cmVhbVRocmVhZCk7CisgICAgICAgIGFzc2VydElzQ3VycmVudCh3b3JrUXVldWUo
KSk7CiAgICAgICAgIG1fY29udGV4dC0+ZGVsZXRlUHJvZ3JhbShhcmcwKTsKICAgICB9CiAgICAg
dm9pZCBkZWxldGVSZW5kZXJidWZmZXIodWludDMyX3QgYXJnMCkKICAgICB7Ci0gICAgICAgIGFz
c2VydElzQ3VycmVudChtX3N0cmVhbVRocmVhZCk7CisgICAgICAgIGFzc2VydElzQ3VycmVudCh3
b3JrUXVldWUoKSk7CiAgICAgICAgIG1fY29udGV4dC0+ZGVsZXRlUmVuZGVyYnVmZmVyKGFyZzAp
OwogICAgIH0KICAgICB2b2lkIGRlbGV0ZVNoYWRlcih1aW50MzJfdCBhcmcwKQogICAgIHsKLSAg
ICAgICAgYXNzZXJ0SXNDdXJyZW50KG1fc3RyZWFtVGhyZWFkKTsKKyAgICAgICAgYXNzZXJ0SXND
dXJyZW50KHdvcmtRdWV1ZSgpKTsKICAgICAgICAgbV9jb250ZXh0LT5kZWxldGVTaGFkZXIoYXJn
MCk7CiAgICAgfQogICAgIHZvaWQgZGVsZXRlVGV4dHVyZSh1aW50MzJfdCBhcmcwKQogICAgIHsK
LSAgICAgICAgYXNzZXJ0SXNDdXJyZW50KG1fc3RyZWFtVGhyZWFkKTsKKyAgICAgICAgYXNzZXJ0
SXNDdXJyZW50KHdvcmtRdWV1ZSgpKTsKICAgICAgICAgbV9jb250ZXh0LT5kZWxldGVUZXh0dXJl
KGFyZzApOwogICAgIH0KICAgICB2b2lkIGRlcHRoRnVuYyh1aW50MzJfdCBmdW5jKQogICAgIHsK
LSAgICAgICAgYXNzZXJ0SXNDdXJyZW50KG1fc3RyZWFtVGhyZWFkKTsKKyAgICAgICAgYXNzZXJ0
SXNDdXJyZW50KHdvcmtRdWV1ZSgpKTsKICAgICAgICAgbV9jb250ZXh0LT5kZXB0aEZ1bmMoZnVu
Yyk7CiAgICAgfQogICAgIHZvaWQgZGVwdGhNYXNrKGJvb2wgZmxhZykKICAgICB7Ci0gICAgICAg
IGFzc2VydElzQ3VycmVudChtX3N0cmVhbVRocmVhZCk7CisgICAgICAgIGFzc2VydElzQ3VycmVu
dCh3b3JrUXVldWUoKSk7CiAgICAgICAgIG1fY29udGV4dC0+ZGVwdGhNYXNrKHN0YXRpY19jYXN0
PEdDR0xib29sZWFuPihmbGFnKSk7CiAgICAgfQogICAgIHZvaWQgZGVwdGhSYW5nZShmbG9hdCB6
TmVhciwgZmxvYXQgekZhcikKICAgICB7Ci0gICAgICAgIGFzc2VydElzQ3VycmVudChtX3N0cmVh
bVRocmVhZCk7CisgICAgICAgIGFzc2VydElzQ3VycmVudCh3b3JrUXVldWUoKSk7CiAgICAgICAg
IG1fY29udGV4dC0+ZGVwdGhSYW5nZSh6TmVhciwgekZhcik7CiAgICAgfQogICAgIHZvaWQgZGV0
YWNoU2hhZGVyKHVpbnQzMl90IGFyZzAsIHVpbnQzMl90IGFyZzEpCiAgICAgewotICAgICAgICBh
c3NlcnRJc0N1cnJlbnQobV9zdHJlYW1UaHJlYWQpOworICAgICAgICBhc3NlcnRJc0N1cnJlbnQo
d29ya1F1ZXVlKCkpOwogICAgICAgICBtX2NvbnRleHQtPmRldGFjaFNoYWRlcihhcmcwLCBhcmcx
KTsKICAgICB9CiAgICAgdm9pZCBkaXNhYmxlKHVpbnQzMl90IGNhcCkKICAgICB7Ci0gICAgICAg
IGFzc2VydElzQ3VycmVudChtX3N0cmVhbVRocmVhZCk7CisgICAgICAgIGFzc2VydElzQ3VycmVu
dCh3b3JrUXVldWUoKSk7CiAgICAgICAgIG1fY29udGV4dC0+ZGlzYWJsZShjYXApOwogICAgIH0K
ICAgICB2b2lkIGRpc2FibGVWZXJ0ZXhBdHRyaWJBcnJheSh1aW50MzJfdCBpbmRleCkKICAgICB7
Ci0gICAgICAgIGFzc2VydElzQ3VycmVudChtX3N0cmVhbVRocmVhZCk7CisgICAgICAgIGFzc2Vy
dElzQ3VycmVudCh3b3JrUXVldWUoKSk7CiAgICAgICAgIG1fY29udGV4dC0+ZGlzYWJsZVZlcnRl
eEF0dHJpYkFycmF5KGluZGV4KTsKICAgICB9CiAgICAgdm9pZCBkcmF3QXJyYXlzKHVpbnQzMl90
IG1vZGUsIGludDMyX3QgZmlyc3QsIGludDMyX3QgY291bnQpCiAgICAgewotICAgICAgICBhc3Nl
cnRJc0N1cnJlbnQobV9zdHJlYW1UaHJlYWQpOworICAgICAgICBhc3NlcnRJc0N1cnJlbnQod29y
a1F1ZXVlKCkpOwogICAgICAgICBtX2NvbnRleHQtPmRyYXdBcnJheXMobW9kZSwgZmlyc3QsIGNv
dW50KTsKICAgICB9CiAgICAgdm9pZCBkcmF3RWxlbWVudHModWludDMyX3QgbW9kZSwgaW50MzJf
dCBjb3VudCwgdWludDMyX3QgdHlwZSwgdWludDY0X3Qgb2Zmc2V0KQogICAgIHsKLSAgICAgICAg
YXNzZXJ0SXNDdXJyZW50KG1fc3RyZWFtVGhyZWFkKTsKKyAgICAgICAgYXNzZXJ0SXNDdXJyZW50
KHdvcmtRdWV1ZSgpKTsKICAgICAgICAgbV9jb250ZXh0LT5kcmF3RWxlbWVudHMobW9kZSwgY291
bnQsIHR5cGUsIHN0YXRpY19jYXN0PEdDR0xpbnRwdHI+KG9mZnNldCkpOwogICAgIH0KICAgICB2
b2lkIGVuYWJsZSh1aW50MzJfdCBjYXApCiAgICAgewotICAgICAgICBhc3NlcnRJc0N1cnJlbnQo
bV9zdHJlYW1UaHJlYWQpOworICAgICAgICBhc3NlcnRJc0N1cnJlbnQod29ya1F1ZXVlKCkpOwog
ICAgICAgICBtX2NvbnRleHQtPmVuYWJsZShjYXApOwogICAgIH0KICAgICB2b2lkIGVuYWJsZVZl
cnRleEF0dHJpYkFycmF5KHVpbnQzMl90IGluZGV4KQogICAgIHsKLSAgICAgICAgYXNzZXJ0SXND
dXJyZW50KG1fc3RyZWFtVGhyZWFkKTsKKyAgICAgICAgYXNzZXJ0SXNDdXJyZW50KHdvcmtRdWV1
ZSgpKTsKICAgICAgICAgbV9jb250ZXh0LT5lbmFibGVWZXJ0ZXhBdHRyaWJBcnJheShpbmRleCk7
CiAgICAgfQogICAgIHZvaWQgZmluaXNoKCkKICAgICB7Ci0gICAgICAgIGFzc2VydElzQ3VycmVu
dChtX3N0cmVhbVRocmVhZCk7CisgICAgICAgIGFzc2VydElzQ3VycmVudCh3b3JrUXVldWUoKSk7
CiAgICAgICAgIG1fY29udGV4dC0+ZmluaXNoKCk7CiAgICAgfQogICAgIHZvaWQgZmx1c2goKQog
ICAgIHsKLSAgICAgICAgYXNzZXJ0SXNDdXJyZW50KG1fc3RyZWFtVGhyZWFkKTsKKyAgICAgICAg
YXNzZXJ0SXNDdXJyZW50KHdvcmtRdWV1ZSgpKTsKICAgICAgICAgbV9jb250ZXh0LT5mbHVzaCgp
OwogICAgIH0KICAgICB2b2lkIGZyYW1lYnVmZmVyUmVuZGVyYnVmZmVyKHVpbnQzMl90IHRhcmdl
dCwgdWludDMyX3QgYXR0YWNobWVudCwgdWludDMyX3QgcmVuZGVyYnVmZmVydGFyZ2V0LCB1aW50
MzJfdCBhcmczKQogICAgIHsKLSAgICAgICAgYXNzZXJ0SXNDdXJyZW50KG1fc3RyZWFtVGhyZWFk
KTsKKyAgICAgICAgYXNzZXJ0SXNDdXJyZW50KHdvcmtRdWV1ZSgpKTsKICAgICAgICAgbV9jb250
ZXh0LT5mcmFtZWJ1ZmZlclJlbmRlcmJ1ZmZlcih0YXJnZXQsIGF0dGFjaG1lbnQsIHJlbmRlcmJ1
ZmZlcnRhcmdldCwgYXJnMyk7CiAgICAgfQogICAgIHZvaWQgZnJhbWVidWZmZXJUZXh0dXJlMkQo
dWludDMyX3QgdGFyZ2V0LCB1aW50MzJfdCBhdHRhY2htZW50LCB1aW50MzJfdCB0ZXh0YXJnZXQs
IHVpbnQzMl90IGFyZzMsIGludDMyX3QgbGV2ZWwpCiAgICAgewotICAgICAgICBhc3NlcnRJc0N1
cnJlbnQobV9zdHJlYW1UaHJlYWQpOworICAgICAgICBhc3NlcnRJc0N1cnJlbnQod29ya1F1ZXVl
KCkpOwogICAgICAgICBtX2NvbnRleHQtPmZyYW1lYnVmZmVyVGV4dHVyZTJEKHRhcmdldCwgYXR0
YWNobWVudCwgdGV4dGFyZ2V0LCBhcmczLCBsZXZlbCk7CiAgICAgfQogICAgIHZvaWQgZnJvbnRG
YWNlKHVpbnQzMl90IG1vZGUpCiAgICAgewotICAgICAgICBhc3NlcnRJc0N1cnJlbnQobV9zdHJl
YW1UaHJlYWQpOworICAgICAgICBhc3NlcnRJc0N1cnJlbnQod29ya1F1ZXVlKCkpOwogICAgICAg
ICBtX2NvbnRleHQtPmZyb250RmFjZShtb2RlKTsKICAgICB9CiAgICAgdm9pZCBnZW5lcmF0ZU1p
cG1hcCh1aW50MzJfdCB0YXJnZXQpCiAgICAgewotICAgICAgICBhc3NlcnRJc0N1cnJlbnQobV9z
dHJlYW1UaHJlYWQpOworICAgICAgICBhc3NlcnRJc0N1cnJlbnQod29ya1F1ZXVlKCkpOwogICAg
ICAgICBtX2NvbnRleHQtPmdlbmVyYXRlTWlwbWFwKHRhcmdldCk7CiAgICAgfQogICAgIHZvaWQg
Z2V0QWN0aXZlQXR0cmliKHVpbnQzMl90IHByb2dyYW0sIHVpbnQzMl90IGluZGV4LCBDb21wbGV0
aW9uSGFuZGxlcjx2b2lkKGJvb2wsIFdlYkNvcmU6OkdyYXBoaWNzQ29udGV4dEdMOjpBY3RpdmVJ
bmZvJiYpPiYmIGNvbXBsZXRpb25IYW5kbGVyKQogICAgIHsKICAgICAgICAgYm9vbCByZXR1cm5W
YWx1ZSA9IHsgfTsKICAgICAgICAgV2ViQ29yZTo6R3JhcGhpY3NDb250ZXh0R0w6OkFjdGl2ZUlu
Zm8gYXJnMiB7IH07Ci0gICAgICAgIGFzc2VydElzQ3VycmVudChtX3N0cmVhbVRocmVhZCk7Cisg
ICAgICAgIGFzc2VydElzQ3VycmVudCh3b3JrUXVldWUoKSk7CiAgICAgICAgIHJldHVyblZhbHVl
ID0gbV9jb250ZXh0LT5nZXRBY3RpdmVBdHRyaWIocHJvZ3JhbSwgaW5kZXgsIGFyZzIpOwogICAg
ICAgICBjb21wbGV0aW9uSGFuZGxlcihyZXR1cm5WYWx1ZSwgV1RGTW92ZShhcmcyKSk7CiAgICAg
fQpAQCAtMzA4LDEwNSArMzA4LDEwNSBAQAogICAgIHsKICAgICAgICAgYm9vbCByZXR1cm5WYWx1
ZSA9IHsgfTsKICAgICAgICAgV2ViQ29yZTo6R3JhcGhpY3NDb250ZXh0R0w6OkFjdGl2ZUluZm8g
YXJnMiB7IH07Ci0gICAgICAgIGFzc2VydElzQ3VycmVudChtX3N0cmVhbVRocmVhZCk7CisgICAg
ICAgIGFzc2VydElzQ3VycmVudCh3b3JrUXVldWUoKSk7CiAgICAgICAgIHJldHVyblZhbHVlID0g
bV9jb250ZXh0LT5nZXRBY3RpdmVVbmlmb3JtKHByb2dyYW0sIGluZGV4LCBhcmcyKTsKICAgICAg
ICAgY29tcGxldGlvbkhhbmRsZXIocmV0dXJuVmFsdWUsIFdURk1vdmUoYXJnMikpOwogICAgIH0K
ICAgICB2b2lkIGdldEF0dHJpYkxvY2F0aW9uKHVpbnQzMl90IGFyZzAsIFN0cmluZyYmIG5hbWUs
IENvbXBsZXRpb25IYW5kbGVyPHZvaWQoaW50MzJfdCk+JiYgY29tcGxldGlvbkhhbmRsZXIpCiAg
ICAgewogICAgICAgICBHQ0dMaW50IHJldHVyblZhbHVlID0geyB9OwotICAgICAgICBhc3NlcnRJ
c0N1cnJlbnQobV9zdHJlYW1UaHJlYWQpOworICAgICAgICBhc3NlcnRJc0N1cnJlbnQod29ya1F1
ZXVlKCkpOwogICAgICAgICByZXR1cm5WYWx1ZSA9IG1fY29udGV4dC0+Z2V0QXR0cmliTG9jYXRp
b24oYXJnMCwgbmFtZSk7CiAgICAgICAgIGNvbXBsZXRpb25IYW5kbGVyKHJldHVyblZhbHVlKTsK
ICAgICB9CiAgICAgdm9pZCBnZXRCdWZmZXJQYXJhbWV0ZXJpKHVpbnQzMl90IHRhcmdldCwgdWlu
dDMyX3QgcG5hbWUsIENvbXBsZXRpb25IYW5kbGVyPHZvaWQoaW50MzJfdCk+JiYgY29tcGxldGlv
bkhhbmRsZXIpCiAgICAgewogICAgICAgICBHQ0dMaW50IHJldHVyblZhbHVlID0geyB9OwotICAg
ICAgICBhc3NlcnRJc0N1cnJlbnQobV9zdHJlYW1UaHJlYWQpOworICAgICAgICBhc3NlcnRJc0N1
cnJlbnQod29ya1F1ZXVlKCkpOwogICAgICAgICByZXR1cm5WYWx1ZSA9IG1fY29udGV4dC0+Z2V0
QnVmZmVyUGFyYW1ldGVyaSh0YXJnZXQsIHBuYW1lKTsKICAgICAgICAgY29tcGxldGlvbkhhbmRs
ZXIocmV0dXJuVmFsdWUpOwogICAgIH0KICAgICB2b2lkIGdldFN0cmluZyh1aW50MzJfdCBuYW1l
LCBDb21wbGV0aW9uSGFuZGxlcjx2b2lkKFN0cmluZyYmKT4mJiBjb21wbGV0aW9uSGFuZGxlcikK
ICAgICB7CiAgICAgICAgIFN0cmluZyByZXR1cm5WYWx1ZSA9IHsgfTsKLSAgICAgICAgYXNzZXJ0
SXNDdXJyZW50KG1fc3RyZWFtVGhyZWFkKTsKKyAgICAgICAgYXNzZXJ0SXNDdXJyZW50KHdvcmtR
dWV1ZSgpKTsKICAgICAgICAgcmV0dXJuVmFsdWUgPSBtX2NvbnRleHQtPmdldFN0cmluZyhuYW1l
KTsKICAgICAgICAgY29tcGxldGlvbkhhbmRsZXIoV1RGTW92ZShyZXR1cm5WYWx1ZSkpOwogICAg
IH0KICAgICB2b2lkIGdldEZsb2F0dih1aW50MzJfdCBwbmFtZSwgdWludDY0X3QgdmFsdWVTaXpl
LCBDb21wbGV0aW9uSGFuZGxlcjx2b2lkKElQQzo6QXJyYXlSZWZlcmVuY2U8ZmxvYXQ+KT4mJiBj
b21wbGV0aW9uSGFuZGxlcikKICAgICB7CiAgICAgICAgIFZlY3RvcjxHQ0dMZmxvYXQsIDE2PiB2
YWx1ZShzdGF0aWNfY2FzdDxzaXplX3Q+KHZhbHVlU2l6ZSksIDApOwotICAgICAgICBhc3NlcnRJ
c0N1cnJlbnQobV9zdHJlYW1UaHJlYWQpOworICAgICAgICBhc3NlcnRJc0N1cnJlbnQod29ya1F1
ZXVlKCkpOwogICAgICAgICBtX2NvbnRleHQtPmdldEZsb2F0dihwbmFtZSwgdmFsdWUpOwogICAg
ICAgICBjb21wbGV0aW9uSGFuZGxlcihJUEM6OkFycmF5UmVmZXJlbmNlPGZsb2F0PihyZWludGVy
cHJldF9jYXN0PGZsb2F0Kj4odmFsdWUuZGF0YSgpKSwgdmFsdWUuc2l6ZSgpKSk7CiAgICAgfQog
ICAgIHZvaWQgZ2V0SW50ZWdlcnYodWludDMyX3QgcG5hbWUsIHVpbnQ2NF90IHZhbHVlU2l6ZSwg
Q29tcGxldGlvbkhhbmRsZXI8dm9pZChJUEM6OkFycmF5UmVmZXJlbmNlPGludDMyX3Q+KT4mJiBj
b21wbGV0aW9uSGFuZGxlcikKICAgICB7CiAgICAgICAgIFZlY3RvcjxHQ0dMaW50LCA0PiB2YWx1
ZShzdGF0aWNfY2FzdDxzaXplX3Q+KHZhbHVlU2l6ZSksIDApOwotICAgICAgICBhc3NlcnRJc0N1
cnJlbnQobV9zdHJlYW1UaHJlYWQpOworICAgICAgICBhc3NlcnRJc0N1cnJlbnQod29ya1F1ZXVl
KCkpOwogICAgICAgICBtX2NvbnRleHQtPmdldEludGVnZXJ2KHBuYW1lLCB2YWx1ZSk7CiAgICAg
ICAgIGNvbXBsZXRpb25IYW5kbGVyKElQQzo6QXJyYXlSZWZlcmVuY2U8aW50MzJfdD4ocmVpbnRl
cnByZXRfY2FzdDxpbnQzMl90Kj4odmFsdWUuZGF0YSgpKSwgdmFsdWUuc2l6ZSgpKSk7CiAgICAg
fQogICAgIHZvaWQgZ2V0SW50ZWdlcjY0KHVpbnQzMl90IHBuYW1lLCBDb21wbGV0aW9uSGFuZGxl
cjx2b2lkKGludDY0X3QpPiYmIGNvbXBsZXRpb25IYW5kbGVyKQogICAgIHsKICAgICAgICAgR0NH
TGludDY0IHJldHVyblZhbHVlID0geyB9OwotICAgICAgICBhc3NlcnRJc0N1cnJlbnQobV9zdHJl
YW1UaHJlYWQpOworICAgICAgICBhc3NlcnRJc0N1cnJlbnQod29ya1F1ZXVlKCkpOwogICAgICAg
ICByZXR1cm5WYWx1ZSA9IG1fY29udGV4dC0+Z2V0SW50ZWdlcjY0KHBuYW1lKTsKICAgICAgICAg
Y29tcGxldGlvbkhhbmRsZXIoc3RhdGljX2Nhc3Q8aW50NjRfdD4ocmV0dXJuVmFsdWUpKTsKICAg
ICB9CiAgICAgdm9pZCBnZXRJbnRlZ2VyNjRpKHVpbnQzMl90IHBuYW1lLCB1aW50MzJfdCBpbmRl
eCwgQ29tcGxldGlvbkhhbmRsZXI8dm9pZChpbnQ2NF90KT4mJiBjb21wbGV0aW9uSGFuZGxlcikK
ICAgICB7CiAgICAgICAgIEdDR0xpbnQ2NCByZXR1cm5WYWx1ZSA9IHsgfTsKLSAgICAgICAgYXNz
ZXJ0SXNDdXJyZW50KG1fc3RyZWFtVGhyZWFkKTsKKyAgICAgICAgYXNzZXJ0SXNDdXJyZW50KHdv
cmtRdWV1ZSgpKTsKICAgICAgICAgcmV0dXJuVmFsdWUgPSBtX2NvbnRleHQtPmdldEludGVnZXI2
NGkocG5hbWUsIGluZGV4KTsKICAgICAgICAgY29tcGxldGlvbkhhbmRsZXIoc3RhdGljX2Nhc3Q8
aW50NjRfdD4ocmV0dXJuVmFsdWUpKTsKICAgICB9CiAgICAgdm9pZCBnZXRQcm9ncmFtaSh1aW50
MzJfdCBwcm9ncmFtLCB1aW50MzJfdCBwbmFtZSwgQ29tcGxldGlvbkhhbmRsZXI8dm9pZChpbnQz
Ml90KT4mJiBjb21wbGV0aW9uSGFuZGxlcikKICAgICB7CiAgICAgICAgIEdDR0xpbnQgcmV0dXJu
VmFsdWUgPSB7IH07Ci0gICAgICAgIGFzc2VydElzQ3VycmVudChtX3N0cmVhbVRocmVhZCk7Cisg
ICAgICAgIGFzc2VydElzQ3VycmVudCh3b3JrUXVldWUoKSk7CiAgICAgICAgIHJldHVyblZhbHVl
ID0gbV9jb250ZXh0LT5nZXRQcm9ncmFtaShwcm9ncmFtLCBwbmFtZSk7CiAgICAgICAgIGNvbXBs
ZXRpb25IYW5kbGVyKHJldHVyblZhbHVlKTsKICAgICB9CiAgICAgdm9pZCBnZXRCb29sZWFudih1
aW50MzJfdCBwbmFtZSwgdWludDY0X3QgdmFsdWVTaXplLCBDb21wbGV0aW9uSGFuZGxlcjx2b2lk
KElQQzo6QXJyYXlSZWZlcmVuY2U8Ym9vbD4pPiYmIGNvbXBsZXRpb25IYW5kbGVyKQogICAgIHsK
ICAgICAgICAgVmVjdG9yPEdDR0xib29sZWFuLCA0PiB2YWx1ZShzdGF0aWNfY2FzdDxzaXplX3Q+
KHZhbHVlU2l6ZSksIDApOwotICAgICAgICBhc3NlcnRJc0N1cnJlbnQobV9zdHJlYW1UaHJlYWQp
OworICAgICAgICBhc3NlcnRJc0N1cnJlbnQod29ya1F1ZXVlKCkpOwogICAgICAgICBtX2NvbnRl
eHQtPmdldEJvb2xlYW52KHBuYW1lLCB2YWx1ZSk7CiAgICAgICAgIGNvbXBsZXRpb25IYW5kbGVy
KElQQzo6QXJyYXlSZWZlcmVuY2U8Ym9vbD4ocmVpbnRlcnByZXRfY2FzdDxib29sKj4odmFsdWUu
ZGF0YSgpKSwgdmFsdWUuc2l6ZSgpKSk7CiAgICAgfQogICAgIHZvaWQgZ2V0RnJhbWVidWZmZXJB
dHRhY2htZW50UGFyYW1ldGVyaSh1aW50MzJfdCB0YXJnZXQsIHVpbnQzMl90IGF0dGFjaG1lbnQs
IHVpbnQzMl90IHBuYW1lLCBDb21wbGV0aW9uSGFuZGxlcjx2b2lkKGludDMyX3QpPiYmIGNvbXBs
ZXRpb25IYW5kbGVyKQogICAgIHsKICAgICAgICAgR0NHTGludCByZXR1cm5WYWx1ZSA9IHsgfTsK
LSAgICAgICAgYXNzZXJ0SXNDdXJyZW50KG1fc3RyZWFtVGhyZWFkKTsKKyAgICAgICAgYXNzZXJ0
SXNDdXJyZW50KHdvcmtRdWV1ZSgpKTsKICAgICAgICAgcmV0dXJuVmFsdWUgPSBtX2NvbnRleHQt
PmdldEZyYW1lYnVmZmVyQXR0YWNobWVudFBhcmFtZXRlcmkodGFyZ2V0LCBhdHRhY2htZW50LCBw
bmFtZSk7CiAgICAgICAgIGNvbXBsZXRpb25IYW5kbGVyKHJldHVyblZhbHVlKTsKICAgICB9CiAg
ICAgdm9pZCBnZXRQcm9ncmFtSW5mb0xvZyh1aW50MzJfdCBhcmcwLCBDb21wbGV0aW9uSGFuZGxl
cjx2b2lkKFN0cmluZyYmKT4mJiBjb21wbGV0aW9uSGFuZGxlcikKICAgICB7CiAgICAgICAgIFN0
cmluZyByZXR1cm5WYWx1ZSA9IHsgfTsKLSAgICAgICAgYXNzZXJ0SXNDdXJyZW50KG1fc3RyZWFt
VGhyZWFkKTsKKyAgICAgICAgYXNzZXJ0SXNDdXJyZW50KHdvcmtRdWV1ZSgpKTsKICAgICAgICAg
cmV0dXJuVmFsdWUgPSBtX2NvbnRleHQtPmdldFByb2dyYW1JbmZvTG9nKGFyZzApOwogICAgICAg
ICBjb21wbGV0aW9uSGFuZGxlcihXVEZNb3ZlKHJldHVyblZhbHVlKSk7CiAgICAgfQogICAgIHZv
aWQgZ2V0UmVuZGVyYnVmZmVyUGFyYW1ldGVyaSh1aW50MzJfdCB0YXJnZXQsIHVpbnQzMl90IHBu
YW1lLCBDb21wbGV0aW9uSGFuZGxlcjx2b2lkKGludDMyX3QpPiYmIGNvbXBsZXRpb25IYW5kbGVy
KQogICAgIHsKICAgICAgICAgR0NHTGludCByZXR1cm5WYWx1ZSA9IHsgfTsKLSAgICAgICAgYXNz
ZXJ0SXNDdXJyZW50KG1fc3RyZWFtVGhyZWFkKTsKKyAgICAgICAgYXNzZXJ0SXNDdXJyZW50KHdv
cmtRdWV1ZSgpKTsKICAgICAgICAgcmV0dXJuVmFsdWUgPSBtX2NvbnRleHQtPmdldFJlbmRlcmJ1
ZmZlclBhcmFtZXRlcmkodGFyZ2V0LCBwbmFtZSk7CiAgICAgICAgIGNvbXBsZXRpb25IYW5kbGVy
KHJldHVyblZhbHVlKTsKICAgICB9CiAgICAgdm9pZCBnZXRTaGFkZXJpKHVpbnQzMl90IGFyZzAs
IHVpbnQzMl90IHBuYW1lLCBDb21wbGV0aW9uSGFuZGxlcjx2b2lkKGludDMyX3QpPiYmIGNvbXBs
ZXRpb25IYW5kbGVyKQogICAgIHsKICAgICAgICAgR0NHTGludCByZXR1cm5WYWx1ZSA9IHsgfTsK
LSAgICAgICAgYXNzZXJ0SXNDdXJyZW50KG1fc3RyZWFtVGhyZWFkKTsKKyAgICAgICAgYXNzZXJ0
SXNDdXJyZW50KHdvcmtRdWV1ZSgpKTsKICAgICAgICAgcmV0dXJuVmFsdWUgPSBtX2NvbnRleHQt
PmdldFNoYWRlcmkoYXJnMCwgcG5hbWUpOwogICAgICAgICBjb21wbGV0aW9uSGFuZGxlcihyZXR1
cm5WYWx1ZSk7CiAgICAgfQogICAgIHZvaWQgZ2V0U2hhZGVySW5mb0xvZyh1aW50MzJfdCBhcmcw
LCBDb21wbGV0aW9uSGFuZGxlcjx2b2lkKFN0cmluZyYmKT4mJiBjb21wbGV0aW9uSGFuZGxlcikK
ICAgICB7CiAgICAgICAgIFN0cmluZyByZXR1cm5WYWx1ZSA9IHsgfTsKLSAgICAgICAgYXNzZXJ0
SXNDdXJyZW50KG1fc3RyZWFtVGhyZWFkKTsKKyAgICAgICAgYXNzZXJ0SXNDdXJyZW50KHdvcmtR
dWV1ZSgpKTsKICAgICAgICAgcmV0dXJuVmFsdWUgPSBtX2NvbnRleHQtPmdldFNoYWRlckluZm9M
b2coYXJnMCk7CiAgICAgICAgIGNvbXBsZXRpb25IYW5kbGVyKFdURk1vdmUocmV0dXJuVmFsdWUp
KTsKICAgICB9CkBAIC00MTQsOTc1ICs0MTQsOTc1IEBACiAgICAgewogICAgICAgICBzdGQ6OmFy
cmF5PEdDR0xpbnQsIDI+IHJhbmdlIHsgfTsKICAgICAgICAgR0NHTGludCBwcmVjaXNpb24gPSB7
IH07Ci0gICAgICAgIGFzc2VydElzQ3VycmVudChtX3N0cmVhbVRocmVhZCk7CisgICAgICAgIGFz
c2VydElzQ3VycmVudCh3b3JrUXVldWUoKSk7CiAgICAgICAgIG1fY29udGV4dC0+Z2V0U2hhZGVy
UHJlY2lzaW9uRm9ybWF0KHNoYWRlclR5cGUsIHByZWNpc2lvblR5cGUsIHJhbmdlLCAmcHJlY2lz
aW9uKTsKICAgICAgICAgY29tcGxldGlvbkhhbmRsZXIoSVBDOjpBcnJheVJlZmVyZW5jZTxpbnQz
Ml90LCAyPihyZWludGVycHJldF9jYXN0PGludDMyX3QqPihyYW5nZS5kYXRhKCkpLCByYW5nZS5z
aXplKCkpLCBwcmVjaXNpb24pOwogICAgIH0KICAgICB2b2lkIGdldFNoYWRlclNvdXJjZSh1aW50
MzJfdCBhcmcwLCBDb21wbGV0aW9uSGFuZGxlcjx2b2lkKFN0cmluZyYmKT4mJiBjb21wbGV0aW9u
SGFuZGxlcikKICAgICB7CiAgICAgICAgIFN0cmluZyByZXR1cm5WYWx1ZSA9IHsgfTsKLSAgICAg
ICAgYXNzZXJ0SXNDdXJyZW50KG1fc3RyZWFtVGhyZWFkKTsKKyAgICAgICAgYXNzZXJ0SXNDdXJy
ZW50KHdvcmtRdWV1ZSgpKTsKICAgICAgICAgcmV0dXJuVmFsdWUgPSBtX2NvbnRleHQtPmdldFNo
YWRlclNvdXJjZShhcmcwKTsKICAgICAgICAgY29tcGxldGlvbkhhbmRsZXIoV1RGTW92ZShyZXR1
cm5WYWx1ZSkpOwogICAgIH0KICAgICB2b2lkIGdldFRleFBhcmFtZXRlcmYodWludDMyX3QgdGFy
Z2V0LCB1aW50MzJfdCBwbmFtZSwgQ29tcGxldGlvbkhhbmRsZXI8dm9pZChmbG9hdCk+JiYgY29t
cGxldGlvbkhhbmRsZXIpCiAgICAgewogICAgICAgICBHQ0dMZmxvYXQgcmV0dXJuVmFsdWUgPSB7
IH07Ci0gICAgICAgIGFzc2VydElzQ3VycmVudChtX3N0cmVhbVRocmVhZCk7CisgICAgICAgIGFz
c2VydElzQ3VycmVudCh3b3JrUXVldWUoKSk7CiAgICAgICAgIHJldHVyblZhbHVlID0gbV9jb250
ZXh0LT5nZXRUZXhQYXJhbWV0ZXJmKHRhcmdldCwgcG5hbWUpOwogICAgICAgICBjb21wbGV0aW9u
SGFuZGxlcihyZXR1cm5WYWx1ZSk7CiAgICAgfQogICAgIHZvaWQgZ2V0VGV4UGFyYW1ldGVyaSh1
aW50MzJfdCB0YXJnZXQsIHVpbnQzMl90IHBuYW1lLCBDb21wbGV0aW9uSGFuZGxlcjx2b2lkKGlu
dDMyX3QpPiYmIGNvbXBsZXRpb25IYW5kbGVyKQogICAgIHsKICAgICAgICAgR0NHTGludCByZXR1
cm5WYWx1ZSA9IHsgfTsKLSAgICAgICAgYXNzZXJ0SXNDdXJyZW50KG1fc3RyZWFtVGhyZWFkKTsK
KyAgICAgICAgYXNzZXJ0SXNDdXJyZW50KHdvcmtRdWV1ZSgpKTsKICAgICAgICAgcmV0dXJuVmFs
dWUgPSBtX2NvbnRleHQtPmdldFRleFBhcmFtZXRlcmkodGFyZ2V0LCBwbmFtZSk7CiAgICAgICAg
IGNvbXBsZXRpb25IYW5kbGVyKHJldHVyblZhbHVlKTsKICAgICB9CiAgICAgdm9pZCBnZXRVbmlm
b3JtZnYodWludDMyX3QgcHJvZ3JhbSwgaW50MzJfdCBsb2NhdGlvbiwgdWludDY0X3QgdmFsdWVT
aXplLCBDb21wbGV0aW9uSGFuZGxlcjx2b2lkKElQQzo6QXJyYXlSZWZlcmVuY2U8ZmxvYXQ+KT4m
JiBjb21wbGV0aW9uSGFuZGxlcikKICAgICB7CiAgICAgICAgIFZlY3RvcjxHQ0dMZmxvYXQsIDE2
PiB2YWx1ZShzdGF0aWNfY2FzdDxzaXplX3Q+KHZhbHVlU2l6ZSksIDApOwotICAgICAgICBhc3Nl
cnRJc0N1cnJlbnQobV9zdHJlYW1UaHJlYWQpOworICAgICAgICBhc3NlcnRJc0N1cnJlbnQod29y
a1F1ZXVlKCkpOwogICAgICAgICBtX2NvbnRleHQtPmdldFVuaWZvcm1mdihwcm9ncmFtLCBsb2Nh
dGlvbiwgdmFsdWUpOwogICAgICAgICBjb21wbGV0aW9uSGFuZGxlcihJUEM6OkFycmF5UmVmZXJl
bmNlPGZsb2F0PihyZWludGVycHJldF9jYXN0PGZsb2F0Kj4odmFsdWUuZGF0YSgpKSwgdmFsdWUu
c2l6ZSgpKSk7CiAgICAgfQogICAgIHZvaWQgZ2V0VW5pZm9ybWl2KHVpbnQzMl90IHByb2dyYW0s
IGludDMyX3QgbG9jYXRpb24sIHVpbnQ2NF90IHZhbHVlU2l6ZSwgQ29tcGxldGlvbkhhbmRsZXI8
dm9pZChJUEM6OkFycmF5UmVmZXJlbmNlPGludDMyX3Q+KT4mJiBjb21wbGV0aW9uSGFuZGxlcikK
ICAgICB7CiAgICAgICAgIFZlY3RvcjxHQ0dMaW50LCA0PiB2YWx1ZShzdGF0aWNfY2FzdDxzaXpl
X3Q+KHZhbHVlU2l6ZSksIDApOwotICAgICAgICBhc3NlcnRJc0N1cnJlbnQobV9zdHJlYW1UaHJl
YWQpOworICAgICAgICBhc3NlcnRJc0N1cnJlbnQod29ya1F1ZXVlKCkpOwogICAgICAgICBtX2Nv
bnRleHQtPmdldFVuaWZvcm1pdihwcm9ncmFtLCBsb2NhdGlvbiwgdmFsdWUpOwogICAgICAgICBj
b21wbGV0aW9uSGFuZGxlcihJUEM6OkFycmF5UmVmZXJlbmNlPGludDMyX3Q+KHJlaW50ZXJwcmV0
X2Nhc3Q8aW50MzJfdCo+KHZhbHVlLmRhdGEoKSksIHZhbHVlLnNpemUoKSkpOwogICAgIH0KICAg
ICB2b2lkIGdldFVuaWZvcm11aXYodWludDMyX3QgcHJvZ3JhbSwgaW50MzJfdCBsb2NhdGlvbiwg
dWludDY0X3QgdmFsdWVTaXplLCBDb21wbGV0aW9uSGFuZGxlcjx2b2lkKElQQzo6QXJyYXlSZWZl
cmVuY2U8dWludDMyX3Q+KT4mJiBjb21wbGV0aW9uSGFuZGxlcikKICAgICB7CiAgICAgICAgIFZl
Y3RvcjxHQ0dMdWludCwgND4gdmFsdWUoc3RhdGljX2Nhc3Q8c2l6ZV90Pih2YWx1ZVNpemUpLCAw
KTsKLSAgICAgICAgYXNzZXJ0SXNDdXJyZW50KG1fc3RyZWFtVGhyZWFkKTsKKyAgICAgICAgYXNz
ZXJ0SXNDdXJyZW50KHdvcmtRdWV1ZSgpKTsKICAgICAgICAgbV9jb250ZXh0LT5nZXRVbmlmb3Jt
dWl2KHByb2dyYW0sIGxvY2F0aW9uLCB2YWx1ZSk7CiAgICAgICAgIGNvbXBsZXRpb25IYW5kbGVy
KElQQzo6QXJyYXlSZWZlcmVuY2U8dWludDMyX3Q+KHJlaW50ZXJwcmV0X2Nhc3Q8dWludDMyX3Qq
Pih2YWx1ZS5kYXRhKCkpLCB2YWx1ZS5zaXplKCkpKTsKICAgICB9CiAgICAgdm9pZCBnZXRVbmlm
b3JtTG9jYXRpb24odWludDMyX3QgYXJnMCwgU3RyaW5nJiYgbmFtZSwgQ29tcGxldGlvbkhhbmRs
ZXI8dm9pZChpbnQzMl90KT4mJiBjb21wbGV0aW9uSGFuZGxlcikKICAgICB7CiAgICAgICAgIEdD
R0xpbnQgcmV0dXJuVmFsdWUgPSB7IH07Ci0gICAgICAgIGFzc2VydElzQ3VycmVudChtX3N0cmVh
bVRocmVhZCk7CisgICAgICAgIGFzc2VydElzQ3VycmVudCh3b3JrUXVldWUoKSk7CiAgICAgICAg
IHJldHVyblZhbHVlID0gbV9jb250ZXh0LT5nZXRVbmlmb3JtTG9jYXRpb24oYXJnMCwgbmFtZSk7
CiAgICAgICAgIGNvbXBsZXRpb25IYW5kbGVyKHJldHVyblZhbHVlKTsKICAgICB9CiAgICAgdm9p
ZCBnZXRWZXJ0ZXhBdHRyaWJPZmZzZXQodWludDMyX3QgaW5kZXgsIHVpbnQzMl90IHBuYW1lLCBD
b21wbGV0aW9uSGFuZGxlcjx2b2lkKHVpbnQ2NF90KT4mJiBjb21wbGV0aW9uSGFuZGxlcikKICAg
ICB7CiAgICAgICAgIEdDR0xzaXplaXB0ciByZXR1cm5WYWx1ZSA9IHsgfTsKLSAgICAgICAgYXNz
ZXJ0SXNDdXJyZW50KG1fc3RyZWFtVGhyZWFkKTsKKyAgICAgICAgYXNzZXJ0SXNDdXJyZW50KHdv
cmtRdWV1ZSgpKTsKICAgICAgICAgcmV0dXJuVmFsdWUgPSBtX2NvbnRleHQtPmdldFZlcnRleEF0
dHJpYk9mZnNldChpbmRleCwgcG5hbWUpOwogICAgICAgICBjb21wbGV0aW9uSGFuZGxlcihzdGF0
aWNfY2FzdDx1aW50NjRfdD4ocmV0dXJuVmFsdWUpKTsKICAgICB9CiAgICAgdm9pZCBoaW50KHVp
bnQzMl90IHRhcmdldCwgdWludDMyX3QgbW9kZSkKICAgICB7Ci0gICAgICAgIGFzc2VydElzQ3Vy
cmVudChtX3N0cmVhbVRocmVhZCk7CisgICAgICAgIGFzc2VydElzQ3VycmVudCh3b3JrUXVldWUo
KSk7CiAgICAgICAgIG1fY29udGV4dC0+aGludCh0YXJnZXQsIG1vZGUpOwogICAgIH0KICAgICB2
b2lkIGlzQnVmZmVyKHVpbnQzMl90IGFyZzAsIENvbXBsZXRpb25IYW5kbGVyPHZvaWQoYm9vbCk+
JiYgY29tcGxldGlvbkhhbmRsZXIpCiAgICAgewogICAgICAgICBHQ0dMYm9vbGVhbiByZXR1cm5W
YWx1ZSA9IHsgfTsKLSAgICAgICAgYXNzZXJ0SXNDdXJyZW50KG1fc3RyZWFtVGhyZWFkKTsKKyAg
ICAgICAgYXNzZXJ0SXNDdXJyZW50KHdvcmtRdWV1ZSgpKTsKICAgICAgICAgcmV0dXJuVmFsdWUg
PSBtX2NvbnRleHQtPmlzQnVmZmVyKGFyZzApOwogICAgICAgICBjb21wbGV0aW9uSGFuZGxlcihz
dGF0aWNfY2FzdDxib29sPihyZXR1cm5WYWx1ZSkpOwogICAgIH0KICAgICB2b2lkIGlzRW5hYmxl
ZCh1aW50MzJfdCBjYXAsIENvbXBsZXRpb25IYW5kbGVyPHZvaWQoYm9vbCk+JiYgY29tcGxldGlv
bkhhbmRsZXIpCiAgICAgewogICAgICAgICBHQ0dMYm9vbGVhbiByZXR1cm5WYWx1ZSA9IHsgfTsK
LSAgICAgICAgYXNzZXJ0SXNDdXJyZW50KG1fc3RyZWFtVGhyZWFkKTsKKyAgICAgICAgYXNzZXJ0
SXNDdXJyZW50KHdvcmtRdWV1ZSgpKTsKICAgICAgICAgcmV0dXJuVmFsdWUgPSBtX2NvbnRleHQt
PmlzRW5hYmxlZChjYXApOwogICAgICAgICBjb21wbGV0aW9uSGFuZGxlcihzdGF0aWNfY2FzdDxi
b29sPihyZXR1cm5WYWx1ZSkpOwogICAgIH0KICAgICB2b2lkIGlzRnJhbWVidWZmZXIodWludDMy
X3QgYXJnMCwgQ29tcGxldGlvbkhhbmRsZXI8dm9pZChib29sKT4mJiBjb21wbGV0aW9uSGFuZGxl
cikKICAgICB7CiAgICAgICAgIEdDR0xib29sZWFuIHJldHVyblZhbHVlID0geyB9OwotICAgICAg
ICBhc3NlcnRJc0N1cnJlbnQobV9zdHJlYW1UaHJlYWQpOworICAgICAgICBhc3NlcnRJc0N1cnJl
bnQod29ya1F1ZXVlKCkpOwogICAgICAgICByZXR1cm5WYWx1ZSA9IG1fY29udGV4dC0+aXNGcmFt
ZWJ1ZmZlcihhcmcwKTsKICAgICAgICAgY29tcGxldGlvbkhhbmRsZXIoc3RhdGljX2Nhc3Q8Ym9v
bD4ocmV0dXJuVmFsdWUpKTsKICAgICB9CiAgICAgdm9pZCBpc1Byb2dyYW0odWludDMyX3QgYXJn
MCwgQ29tcGxldGlvbkhhbmRsZXI8dm9pZChib29sKT4mJiBjb21wbGV0aW9uSGFuZGxlcikKICAg
ICB7CiAgICAgICAgIEdDR0xib29sZWFuIHJldHVyblZhbHVlID0geyB9OwotICAgICAgICBhc3Nl
cnRJc0N1cnJlbnQobV9zdHJlYW1UaHJlYWQpOworICAgICAgICBhc3NlcnRJc0N1cnJlbnQod29y
a1F1ZXVlKCkpOwogICAgICAgICByZXR1cm5WYWx1ZSA9IG1fY29udGV4dC0+aXNQcm9ncmFtKGFy
ZzApOwogICAgICAgICBjb21wbGV0aW9uSGFuZGxlcihzdGF0aWNfY2FzdDxib29sPihyZXR1cm5W
YWx1ZSkpOwogICAgIH0KICAgICB2b2lkIGlzUmVuZGVyYnVmZmVyKHVpbnQzMl90IGFyZzAsIENv
bXBsZXRpb25IYW5kbGVyPHZvaWQoYm9vbCk+JiYgY29tcGxldGlvbkhhbmRsZXIpCiAgICAgewog
ICAgICAgICBHQ0dMYm9vbGVhbiByZXR1cm5WYWx1ZSA9IHsgfTsKLSAgICAgICAgYXNzZXJ0SXND
dXJyZW50KG1fc3RyZWFtVGhyZWFkKTsKKyAgICAgICAgYXNzZXJ0SXNDdXJyZW50KHdvcmtRdWV1
ZSgpKTsKICAgICAgICAgcmV0dXJuVmFsdWUgPSBtX2NvbnRleHQtPmlzUmVuZGVyYnVmZmVyKGFy
ZzApOwogICAgICAgICBjb21wbGV0aW9uSGFuZGxlcihzdGF0aWNfY2FzdDxib29sPihyZXR1cm5W
YWx1ZSkpOwogICAgIH0KICAgICB2b2lkIGlzU2hhZGVyKHVpbnQzMl90IGFyZzAsIENvbXBsZXRp
b25IYW5kbGVyPHZvaWQoYm9vbCk+JiYgY29tcGxldGlvbkhhbmRsZXIpCiAgICAgewogICAgICAg
ICBHQ0dMYm9vbGVhbiByZXR1cm5WYWx1ZSA9IHsgfTsKLSAgICAgICAgYXNzZXJ0SXNDdXJyZW50
KG1fc3RyZWFtVGhyZWFkKTsKKyAgICAgICAgYXNzZXJ0SXNDdXJyZW50KHdvcmtRdWV1ZSgpKTsK
ICAgICAgICAgcmV0dXJuVmFsdWUgPSBtX2NvbnRleHQtPmlzU2hhZGVyKGFyZzApOwogICAgICAg
ICBjb21wbGV0aW9uSGFuZGxlcihzdGF0aWNfY2FzdDxib29sPihyZXR1cm5WYWx1ZSkpOwogICAg
IH0KICAgICB2b2lkIGlzVGV4dHVyZSh1aW50MzJfdCBhcmcwLCBDb21wbGV0aW9uSGFuZGxlcjx2
b2lkKGJvb2wpPiYmIGNvbXBsZXRpb25IYW5kbGVyKQogICAgIHsKICAgICAgICAgR0NHTGJvb2xl
YW4gcmV0dXJuVmFsdWUgPSB7IH07Ci0gICAgICAgIGFzc2VydElzQ3VycmVudChtX3N0cmVhbVRo
cmVhZCk7CisgICAgICAgIGFzc2VydElzQ3VycmVudCh3b3JrUXVldWUoKSk7CiAgICAgICAgIHJl
dHVyblZhbHVlID0gbV9jb250ZXh0LT5pc1RleHR1cmUoYXJnMCk7CiAgICAgICAgIGNvbXBsZXRp
b25IYW5kbGVyKHN0YXRpY19jYXN0PGJvb2w+KHJldHVyblZhbHVlKSk7CiAgICAgfQogICAgIHZv
aWQgbGluZVdpZHRoKGZsb2F0IGFyZzApCiAgICAgewotICAgICAgICBhc3NlcnRJc0N1cnJlbnQo
bV9zdHJlYW1UaHJlYWQpOworICAgICAgICBhc3NlcnRJc0N1cnJlbnQod29ya1F1ZXVlKCkpOwog
ICAgICAgICBtX2NvbnRleHQtPmxpbmVXaWR0aChhcmcwKTsKICAgICB9CiAgICAgdm9pZCBsaW5r
UHJvZ3JhbSh1aW50MzJfdCBhcmcwKQogICAgIHsKLSAgICAgICAgYXNzZXJ0SXNDdXJyZW50KG1f
c3RyZWFtVGhyZWFkKTsKKyAgICAgICAgYXNzZXJ0SXNDdXJyZW50KHdvcmtRdWV1ZSgpKTsKICAg
ICAgICAgbV9jb250ZXh0LT5saW5rUHJvZ3JhbShhcmcwKTsKICAgICB9CiAgICAgdm9pZCBwaXhl
bFN0b3JlaSh1aW50MzJfdCBwbmFtZSwgaW50MzJfdCBwYXJhbSkKICAgICB7Ci0gICAgICAgIGFz
c2VydElzQ3VycmVudChtX3N0cmVhbVRocmVhZCk7CisgICAgICAgIGFzc2VydElzQ3VycmVudCh3
b3JrUXVldWUoKSk7CiAgICAgICAgIG1fY29udGV4dC0+cGl4ZWxTdG9yZWkocG5hbWUsIHBhcmFt
KTsKICAgICB9CiAgICAgdm9pZCBwb2x5Z29uT2Zmc2V0KGZsb2F0IGZhY3RvciwgZmxvYXQgdW5p
dHMpCiAgICAgewotICAgICAgICBhc3NlcnRJc0N1cnJlbnQobV9zdHJlYW1UaHJlYWQpOworICAg
ICAgICBhc3NlcnRJc0N1cnJlbnQod29ya1F1ZXVlKCkpOwogICAgICAgICBtX2NvbnRleHQtPnBv
bHlnb25PZmZzZXQoZmFjdG9yLCB1bml0cyk7CiAgICAgfQogICAgIHZvaWQgcmVuZGVyYnVmZmVy
U3RvcmFnZSh1aW50MzJfdCB0YXJnZXQsIHVpbnQzMl90IGludGVybmFsZm9ybWF0LCBpbnQzMl90
IHdpZHRoLCBpbnQzMl90IGhlaWdodCkKICAgICB7Ci0gICAgICAgIGFzc2VydElzQ3VycmVudCht
X3N0cmVhbVRocmVhZCk7CisgICAgICAgIGFzc2VydElzQ3VycmVudCh3b3JrUXVldWUoKSk7CiAg
ICAgICAgIG1fY29udGV4dC0+cmVuZGVyYnVmZmVyU3RvcmFnZSh0YXJnZXQsIGludGVybmFsZm9y
bWF0LCB3aWR0aCwgaGVpZ2h0KTsKICAgICB9CiAgICAgdm9pZCBzYW1wbGVDb3ZlcmFnZShmbG9h
dCB2YWx1ZSwgYm9vbCBpbnZlcnQpCiAgICAgewotICAgICAgICBhc3NlcnRJc0N1cnJlbnQobV9z
dHJlYW1UaHJlYWQpOworICAgICAgICBhc3NlcnRJc0N1cnJlbnQod29ya1F1ZXVlKCkpOwogICAg
ICAgICBtX2NvbnRleHQtPnNhbXBsZUNvdmVyYWdlKHZhbHVlLCBzdGF0aWNfY2FzdDxHQ0dMYm9v
bGVhbj4oaW52ZXJ0KSk7CiAgICAgfQogICAgIHZvaWQgc2Npc3NvcihpbnQzMl90IHgsIGludDMy
X3QgeSwgaW50MzJfdCB3aWR0aCwgaW50MzJfdCBoZWlnaHQpCiAgICAgewotICAgICAgICBhc3Nl
cnRJc0N1cnJlbnQobV9zdHJlYW1UaHJlYWQpOworICAgICAgICBhc3NlcnRJc0N1cnJlbnQod29y
a1F1ZXVlKCkpOwogICAgICAgICBtX2NvbnRleHQtPnNjaXNzb3IoeCwgeSwgd2lkdGgsIGhlaWdo
dCk7CiAgICAgfQogICAgIHZvaWQgc2hhZGVyU291cmNlKHVpbnQzMl90IGFyZzAsIFN0cmluZyYm
IGFyZzEpCiAgICAgewotICAgICAgICBhc3NlcnRJc0N1cnJlbnQobV9zdHJlYW1UaHJlYWQpOwor
ICAgICAgICBhc3NlcnRJc0N1cnJlbnQod29ya1F1ZXVlKCkpOwogICAgICAgICBtX2NvbnRleHQt
PnNoYWRlclNvdXJjZShhcmcwLCBhcmcxKTsKICAgICB9CiAgICAgdm9pZCBzdGVuY2lsRnVuYyh1
aW50MzJfdCBmdW5jLCBpbnQzMl90IHJlZiwgdWludDMyX3QgbWFzaykKICAgICB7Ci0gICAgICAg
IGFzc2VydElzQ3VycmVudChtX3N0cmVhbVRocmVhZCk7CisgICAgICAgIGFzc2VydElzQ3VycmVu
dCh3b3JrUXVldWUoKSk7CiAgICAgICAgIG1fY29udGV4dC0+c3RlbmNpbEZ1bmMoZnVuYywgcmVm
LCBtYXNrKTsKICAgICB9CiAgICAgdm9pZCBzdGVuY2lsRnVuY1NlcGFyYXRlKHVpbnQzMl90IGZh
Y2UsIHVpbnQzMl90IGZ1bmMsIGludDMyX3QgcmVmLCB1aW50MzJfdCBtYXNrKQogICAgIHsKLSAg
ICAgICAgYXNzZXJ0SXNDdXJyZW50KG1fc3RyZWFtVGhyZWFkKTsKKyAgICAgICAgYXNzZXJ0SXND
dXJyZW50KHdvcmtRdWV1ZSgpKTsKICAgICAgICAgbV9jb250ZXh0LT5zdGVuY2lsRnVuY1NlcGFy
YXRlKGZhY2UsIGZ1bmMsIHJlZiwgbWFzayk7CiAgICAgfQogICAgIHZvaWQgc3RlbmNpbE1hc2so
dWludDMyX3QgbWFzaykKICAgICB7Ci0gICAgICAgIGFzc2VydElzQ3VycmVudChtX3N0cmVhbVRo
cmVhZCk7CisgICAgICAgIGFzc2VydElzQ3VycmVudCh3b3JrUXVldWUoKSk7CiAgICAgICAgIG1f
Y29udGV4dC0+c3RlbmNpbE1hc2sobWFzayk7CiAgICAgfQogICAgIHZvaWQgc3RlbmNpbE1hc2tT
ZXBhcmF0ZSh1aW50MzJfdCBmYWNlLCB1aW50MzJfdCBtYXNrKQogICAgIHsKLSAgICAgICAgYXNz
ZXJ0SXNDdXJyZW50KG1fc3RyZWFtVGhyZWFkKTsKKyAgICAgICAgYXNzZXJ0SXNDdXJyZW50KHdv
cmtRdWV1ZSgpKTsKICAgICAgICAgbV9jb250ZXh0LT5zdGVuY2lsTWFza1NlcGFyYXRlKGZhY2Us
IG1hc2spOwogICAgIH0KICAgICB2b2lkIHN0ZW5jaWxPcCh1aW50MzJfdCBmYWlsLCB1aW50MzJf
dCB6ZmFpbCwgdWludDMyX3QgenBhc3MpCiAgICAgewotICAgICAgICBhc3NlcnRJc0N1cnJlbnQo
bV9zdHJlYW1UaHJlYWQpOworICAgICAgICBhc3NlcnRJc0N1cnJlbnQod29ya1F1ZXVlKCkpOwog
ICAgICAgICBtX2NvbnRleHQtPnN0ZW5jaWxPcChmYWlsLCB6ZmFpbCwgenBhc3MpOwogICAgIH0K
ICAgICB2b2lkIHN0ZW5jaWxPcFNlcGFyYXRlKHVpbnQzMl90IGZhY2UsIHVpbnQzMl90IGZhaWws
IHVpbnQzMl90IHpmYWlsLCB1aW50MzJfdCB6cGFzcykKICAgICB7Ci0gICAgICAgIGFzc2VydElz
Q3VycmVudChtX3N0cmVhbVRocmVhZCk7CisgICAgICAgIGFzc2VydElzQ3VycmVudCh3b3JrUXVl
dWUoKSk7CiAgICAgICAgIG1fY29udGV4dC0+c3RlbmNpbE9wU2VwYXJhdGUoZmFjZSwgZmFpbCwg
emZhaWwsIHpwYXNzKTsKICAgICB9CiAgICAgdm9pZCB0ZXhQYXJhbWV0ZXJmKHVpbnQzMl90IHRh
cmdldCwgdWludDMyX3QgcG5hbWUsIGZsb2F0IHBhcmFtKQogICAgIHsKLSAgICAgICAgYXNzZXJ0
SXNDdXJyZW50KG1fc3RyZWFtVGhyZWFkKTsKKyAgICAgICAgYXNzZXJ0SXNDdXJyZW50KHdvcmtR
dWV1ZSgpKTsKICAgICAgICAgbV9jb250ZXh0LT50ZXhQYXJhbWV0ZXJmKHRhcmdldCwgcG5hbWUs
IHBhcmFtKTsKICAgICB9CiAgICAgdm9pZCB0ZXhQYXJhbWV0ZXJpKHVpbnQzMl90IHRhcmdldCwg
dWludDMyX3QgcG5hbWUsIGludDMyX3QgcGFyYW0pCiAgICAgewotICAgICAgICBhc3NlcnRJc0N1
cnJlbnQobV9zdHJlYW1UaHJlYWQpOworICAgICAgICBhc3NlcnRJc0N1cnJlbnQod29ya1F1ZXVl
KCkpOwogICAgICAgICBtX2NvbnRleHQtPnRleFBhcmFtZXRlcmkodGFyZ2V0LCBwbmFtZSwgcGFy
YW0pOwogICAgIH0KICAgICB2b2lkIHVuaWZvcm0xZihpbnQzMl90IGxvY2F0aW9uLCBmbG9hdCB4
KQogICAgIHsKLSAgICAgICAgYXNzZXJ0SXNDdXJyZW50KG1fc3RyZWFtVGhyZWFkKTsKKyAgICAg
ICAgYXNzZXJ0SXNDdXJyZW50KHdvcmtRdWV1ZSgpKTsKICAgICAgICAgbV9jb250ZXh0LT51bmlm
b3JtMWYobG9jYXRpb24sIHgpOwogICAgIH0KICAgICB2b2lkIHVuaWZvcm0xZnYoaW50MzJfdCBs
b2NhdGlvbiwgSVBDOjpBcnJheVJlZmVyZW5jZTxmbG9hdD4mJiB2KQogICAgIHsKLSAgICAgICAg
YXNzZXJ0SXNDdXJyZW50KG1fc3RyZWFtVGhyZWFkKTsKKyAgICAgICAgYXNzZXJ0SXNDdXJyZW50
KHdvcmtRdWV1ZSgpKTsKICAgICAgICAgbV9jb250ZXh0LT51bmlmb3JtMWZ2KGxvY2F0aW9uLCBt
YWtlR0NHTFNwYW4ocmVpbnRlcnByZXRfY2FzdDxjb25zdCBHQ0dMZmxvYXQqPih2LmRhdGEoKSks
IHYuc2l6ZSgpKSk7CiAgICAgfQogICAgIHZvaWQgdW5pZm9ybTFpKGludDMyX3QgbG9jYXRpb24s
IGludDMyX3QgeCkKICAgICB7Ci0gICAgICAgIGFzc2VydElzQ3VycmVudChtX3N0cmVhbVRocmVh
ZCk7CisgICAgICAgIGFzc2VydElzQ3VycmVudCh3b3JrUXVldWUoKSk7CiAgICAgICAgIG1fY29u
dGV4dC0+dW5pZm9ybTFpKGxvY2F0aW9uLCB4KTsKICAgICB9CiAgICAgdm9pZCB1bmlmb3JtMWl2
KGludDMyX3QgbG9jYXRpb24sIElQQzo6QXJyYXlSZWZlcmVuY2U8aW50MzJfdD4mJiB2KQogICAg
IHsKLSAgICAgICAgYXNzZXJ0SXNDdXJyZW50KG1fc3RyZWFtVGhyZWFkKTsKKyAgICAgICAgYXNz
ZXJ0SXNDdXJyZW50KHdvcmtRdWV1ZSgpKTsKICAgICAgICAgbV9jb250ZXh0LT51bmlmb3JtMWl2
KGxvY2F0aW9uLCBtYWtlR0NHTFNwYW4ocmVpbnRlcnByZXRfY2FzdDxjb25zdCBHQ0dMaW50Kj4o
di5kYXRhKCkpLCB2LnNpemUoKSkpOwogICAgIH0KICAgICB2b2lkIHVuaWZvcm0yZihpbnQzMl90
IGxvY2F0aW9uLCBmbG9hdCB4LCBmbG9hdCB5KQogICAgIHsKLSAgICAgICAgYXNzZXJ0SXNDdXJy
ZW50KG1fc3RyZWFtVGhyZWFkKTsKKyAgICAgICAgYXNzZXJ0SXNDdXJyZW50KHdvcmtRdWV1ZSgp
KTsKICAgICAgICAgbV9jb250ZXh0LT51bmlmb3JtMmYobG9jYXRpb24sIHgsIHkpOwogICAgIH0K
ICAgICB2b2lkIHVuaWZvcm0yZnYoaW50MzJfdCBsb2NhdGlvbiwgSVBDOjpBcnJheVJlZmVyZW5j
ZTxmbG9hdD4mJiB2KQogICAgIHsKLSAgICAgICAgYXNzZXJ0SXNDdXJyZW50KG1fc3RyZWFtVGhy
ZWFkKTsKKyAgICAgICAgYXNzZXJ0SXNDdXJyZW50KHdvcmtRdWV1ZSgpKTsKICAgICAgICAgbV9j
b250ZXh0LT51bmlmb3JtMmZ2KGxvY2F0aW9uLCBtYWtlR0NHTFNwYW4ocmVpbnRlcnByZXRfY2Fz
dDxjb25zdCBHQ0dMZmxvYXQqPih2LmRhdGEoKSksIHYuc2l6ZSgpKSk7CiAgICAgfQogICAgIHZv
aWQgdW5pZm9ybTJpKGludDMyX3QgbG9jYXRpb24sIGludDMyX3QgeCwgaW50MzJfdCB5KQogICAg
IHsKLSAgICAgICAgYXNzZXJ0SXNDdXJyZW50KG1fc3RyZWFtVGhyZWFkKTsKKyAgICAgICAgYXNz
ZXJ0SXNDdXJyZW50KHdvcmtRdWV1ZSgpKTsKICAgICAgICAgbV9jb250ZXh0LT51bmlmb3JtMmko
bG9jYXRpb24sIHgsIHkpOwogICAgIH0KICAgICB2b2lkIHVuaWZvcm0yaXYoaW50MzJfdCBsb2Nh
dGlvbiwgSVBDOjpBcnJheVJlZmVyZW5jZTxpbnQzMl90PiYmIHYpCiAgICAgewotICAgICAgICBh
c3NlcnRJc0N1cnJlbnQobV9zdHJlYW1UaHJlYWQpOworICAgICAgICBhc3NlcnRJc0N1cnJlbnQo
d29ya1F1ZXVlKCkpOwogICAgICAgICBtX2NvbnRleHQtPnVuaWZvcm0yaXYobG9jYXRpb24sIG1h
a2VHQ0dMU3BhbihyZWludGVycHJldF9jYXN0PGNvbnN0IEdDR0xpbnQqPih2LmRhdGEoKSksIHYu
c2l6ZSgpKSk7CiAgICAgfQogICAgIHZvaWQgdW5pZm9ybTNmKGludDMyX3QgbG9jYXRpb24sIGZs
b2F0IHgsIGZsb2F0IHksIGZsb2F0IHopCiAgICAgewotICAgICAgICBhc3NlcnRJc0N1cnJlbnQo
bV9zdHJlYW1UaHJlYWQpOworICAgICAgICBhc3NlcnRJc0N1cnJlbnQod29ya1F1ZXVlKCkpOwog
ICAgICAgICBtX2NvbnRleHQtPnVuaWZvcm0zZihsb2NhdGlvbiwgeCwgeSwgeik7CiAgICAgfQog
ICAgIHZvaWQgdW5pZm9ybTNmdihpbnQzMl90IGxvY2F0aW9uLCBJUEM6OkFycmF5UmVmZXJlbmNl
PGZsb2F0PiYmIHYpCiAgICAgewotICAgICAgICBhc3NlcnRJc0N1cnJlbnQobV9zdHJlYW1UaHJl
YWQpOworICAgICAgICBhc3NlcnRJc0N1cnJlbnQod29ya1F1ZXVlKCkpOwogICAgICAgICBtX2Nv
bnRleHQtPnVuaWZvcm0zZnYobG9jYXRpb24sIG1ha2VHQ0dMU3BhbihyZWludGVycHJldF9jYXN0
PGNvbnN0IEdDR0xmbG9hdCo+KHYuZGF0YSgpKSwgdi5zaXplKCkpKTsKICAgICB9CiAgICAgdm9p
ZCB1bmlmb3JtM2koaW50MzJfdCBsb2NhdGlvbiwgaW50MzJfdCB4LCBpbnQzMl90IHksIGludDMy
X3QgeikKICAgICB7Ci0gICAgICAgIGFzc2VydElzQ3VycmVudChtX3N0cmVhbVRocmVhZCk7Cisg
ICAgICAgIGFzc2VydElzQ3VycmVudCh3b3JrUXVldWUoKSk7CiAgICAgICAgIG1fY29udGV4dC0+
dW5pZm9ybTNpKGxvY2F0aW9uLCB4LCB5LCB6KTsKICAgICB9CiAgICAgdm9pZCB1bmlmb3JtM2l2
KGludDMyX3QgbG9jYXRpb24sIElQQzo6QXJyYXlSZWZlcmVuY2U8aW50MzJfdD4mJiB2KQogICAg
IHsKLSAgICAgICAgYXNzZXJ0SXNDdXJyZW50KG1fc3RyZWFtVGhyZWFkKTsKKyAgICAgICAgYXNz
ZXJ0SXNDdXJyZW50KHdvcmtRdWV1ZSgpKTsKICAgICAgICAgbV9jb250ZXh0LT51bmlmb3JtM2l2
KGxvY2F0aW9uLCBtYWtlR0NHTFNwYW4ocmVpbnRlcnByZXRfY2FzdDxjb25zdCBHQ0dMaW50Kj4o
di5kYXRhKCkpLCB2LnNpemUoKSkpOwogICAgIH0KICAgICB2b2lkIHVuaWZvcm00ZihpbnQzMl90
IGxvY2F0aW9uLCBmbG9hdCB4LCBmbG9hdCB5LCBmbG9hdCB6LCBmbG9hdCB3KQogICAgIHsKLSAg
ICAgICAgYXNzZXJ0SXNDdXJyZW50KG1fc3RyZWFtVGhyZWFkKTsKKyAgICAgICAgYXNzZXJ0SXND
dXJyZW50KHdvcmtRdWV1ZSgpKTsKICAgICAgICAgbV9jb250ZXh0LT51bmlmb3JtNGYobG9jYXRp
b24sIHgsIHksIHosIHcpOwogICAgIH0KICAgICB2b2lkIHVuaWZvcm00ZnYoaW50MzJfdCBsb2Nh
dGlvbiwgSVBDOjpBcnJheVJlZmVyZW5jZTxmbG9hdD4mJiB2KQogICAgIHsKLSAgICAgICAgYXNz
ZXJ0SXNDdXJyZW50KG1fc3RyZWFtVGhyZWFkKTsKKyAgICAgICAgYXNzZXJ0SXNDdXJyZW50KHdv
cmtRdWV1ZSgpKTsKICAgICAgICAgbV9jb250ZXh0LT51bmlmb3JtNGZ2KGxvY2F0aW9uLCBtYWtl
R0NHTFNwYW4ocmVpbnRlcnByZXRfY2FzdDxjb25zdCBHQ0dMZmxvYXQqPih2LmRhdGEoKSksIHYu
c2l6ZSgpKSk7CiAgICAgfQogICAgIHZvaWQgdW5pZm9ybTRpKGludDMyX3QgbG9jYXRpb24sIGlu
dDMyX3QgeCwgaW50MzJfdCB5LCBpbnQzMl90IHosIGludDMyX3QgdykKICAgICB7Ci0gICAgICAg
IGFzc2VydElzQ3VycmVudChtX3N0cmVhbVRocmVhZCk7CisgICAgICAgIGFzc2VydElzQ3VycmVu
dCh3b3JrUXVldWUoKSk7CiAgICAgICAgIG1fY29udGV4dC0+dW5pZm9ybTRpKGxvY2F0aW9uLCB4
LCB5LCB6LCB3KTsKICAgICB9CiAgICAgdm9pZCB1bmlmb3JtNGl2KGludDMyX3QgbG9jYXRpb24s
IElQQzo6QXJyYXlSZWZlcmVuY2U8aW50MzJfdD4mJiB2KQogICAgIHsKLSAgICAgICAgYXNzZXJ0
SXNDdXJyZW50KG1fc3RyZWFtVGhyZWFkKTsKKyAgICAgICAgYXNzZXJ0SXNDdXJyZW50KHdvcmtR
dWV1ZSgpKTsKICAgICAgICAgbV9jb250ZXh0LT51bmlmb3JtNGl2KGxvY2F0aW9uLCBtYWtlR0NH
TFNwYW4ocmVpbnRlcnByZXRfY2FzdDxjb25zdCBHQ0dMaW50Kj4odi5kYXRhKCkpLCB2LnNpemUo
KSkpOwogICAgIH0KICAgICB2b2lkIHVuaWZvcm1NYXRyaXgyZnYoaW50MzJfdCBsb2NhdGlvbiwg
Ym9vbCB0cmFuc3Bvc2UsIElQQzo6QXJyYXlSZWZlcmVuY2U8ZmxvYXQ+JiYgdmFsdWUpCiAgICAg
ewotICAgICAgICBhc3NlcnRJc0N1cnJlbnQobV9zdHJlYW1UaHJlYWQpOworICAgICAgICBhc3Nl
cnRJc0N1cnJlbnQod29ya1F1ZXVlKCkpOwogICAgICAgICBtX2NvbnRleHQtPnVuaWZvcm1NYXRy
aXgyZnYobG9jYXRpb24sIHN0YXRpY19jYXN0PEdDR0xib29sZWFuPih0cmFuc3Bvc2UpLCBtYWtl
R0NHTFNwYW4ocmVpbnRlcnByZXRfY2FzdDxjb25zdCBHQ0dMZmxvYXQqPih2YWx1ZS5kYXRhKCkp
LCB2YWx1ZS5zaXplKCkpKTsKICAgICB9CiAgICAgdm9pZCB1bmlmb3JtTWF0cml4M2Z2KGludDMy
X3QgbG9jYXRpb24sIGJvb2wgdHJhbnNwb3NlLCBJUEM6OkFycmF5UmVmZXJlbmNlPGZsb2F0PiYm
IHZhbHVlKQogICAgIHsKLSAgICAgICAgYXNzZXJ0SXNDdXJyZW50KG1fc3RyZWFtVGhyZWFkKTsK
KyAgICAgICAgYXNzZXJ0SXNDdXJyZW50KHdvcmtRdWV1ZSgpKTsKICAgICAgICAgbV9jb250ZXh0
LT51bmlmb3JtTWF0cml4M2Z2KGxvY2F0aW9uLCBzdGF0aWNfY2FzdDxHQ0dMYm9vbGVhbj4odHJh
bnNwb3NlKSwgbWFrZUdDR0xTcGFuKHJlaW50ZXJwcmV0X2Nhc3Q8Y29uc3QgR0NHTGZsb2F0Kj4o
dmFsdWUuZGF0YSgpKSwgdmFsdWUuc2l6ZSgpKSk7CiAgICAgfQogICAgIHZvaWQgdW5pZm9ybU1h
dHJpeDRmdihpbnQzMl90IGxvY2F0aW9uLCBib29sIHRyYW5zcG9zZSwgSVBDOjpBcnJheVJlZmVy
ZW5jZTxmbG9hdD4mJiB2YWx1ZSkKICAgICB7Ci0gICAgICAgIGFzc2VydElzQ3VycmVudChtX3N0
cmVhbVRocmVhZCk7CisgICAgICAgIGFzc2VydElzQ3VycmVudCh3b3JrUXVldWUoKSk7CiAgICAg
ICAgIG1fY29udGV4dC0+dW5pZm9ybU1hdHJpeDRmdihsb2NhdGlvbiwgc3RhdGljX2Nhc3Q8R0NH
TGJvb2xlYW4+KHRyYW5zcG9zZSksIG1ha2VHQ0dMU3BhbihyZWludGVycHJldF9jYXN0PGNvbnN0
IEdDR0xmbG9hdCo+KHZhbHVlLmRhdGEoKSksIHZhbHVlLnNpemUoKSkpOwogICAgIH0KICAgICB2
b2lkIHVzZVByb2dyYW0odWludDMyX3QgYXJnMCkKICAgICB7Ci0gICAgICAgIGFzc2VydElzQ3Vy
cmVudChtX3N0cmVhbVRocmVhZCk7CisgICAgICAgIGFzc2VydElzQ3VycmVudCh3b3JrUXVldWUo
KSk7CiAgICAgICAgIG1fY29udGV4dC0+dXNlUHJvZ3JhbShhcmcwKTsKICAgICB9CiAgICAgdm9p
ZCB2YWxpZGF0ZVByb2dyYW0odWludDMyX3QgYXJnMCkKICAgICB7Ci0gICAgICAgIGFzc2VydElz
Q3VycmVudChtX3N0cmVhbVRocmVhZCk7CisgICAgICAgIGFzc2VydElzQ3VycmVudCh3b3JrUXVl
dWUoKSk7CiAgICAgICAgIG1fY29udGV4dC0+dmFsaWRhdGVQcm9ncmFtKGFyZzApOwogICAgIH0K
ICAgICB2b2lkIHZlcnRleEF0dHJpYjFmKHVpbnQzMl90IGluZGV4LCBmbG9hdCB4KQogICAgIHsK
LSAgICAgICAgYXNzZXJ0SXNDdXJyZW50KG1fc3RyZWFtVGhyZWFkKTsKKyAgICAgICAgYXNzZXJ0
SXNDdXJyZW50KHdvcmtRdWV1ZSgpKTsKICAgICAgICAgbV9jb250ZXh0LT52ZXJ0ZXhBdHRyaWIx
ZihpbmRleCwgeCk7CiAgICAgfQogICAgIHZvaWQgdmVydGV4QXR0cmliMWZ2KHVpbnQzMl90IGlu
ZGV4LCBJUEM6OkFycmF5UmVmZXJlbmNlPGZsb2F0LCAxPiYmIHZhbHVlcykKICAgICB7Ci0gICAg
ICAgIGFzc2VydElzQ3VycmVudChtX3N0cmVhbVRocmVhZCk7CisgICAgICAgIGFzc2VydElzQ3Vy
cmVudCh3b3JrUXVldWUoKSk7CiAgICAgICAgIG1fY29udGV4dC0+dmVydGV4QXR0cmliMWZ2KGlu
ZGV4LCBtYWtlR0NHTFNwYW48MT4ocmVpbnRlcnByZXRfY2FzdDxjb25zdCBHQ0dMZmxvYXQqPih2
YWx1ZXMuZGF0YSgpKSkpOwogICAgIH0KICAgICB2b2lkIHZlcnRleEF0dHJpYjJmKHVpbnQzMl90
IGluZGV4LCBmbG9hdCB4LCBmbG9hdCB5KQogICAgIHsKLSAgICAgICAgYXNzZXJ0SXNDdXJyZW50
KG1fc3RyZWFtVGhyZWFkKTsKKyAgICAgICAgYXNzZXJ0SXNDdXJyZW50KHdvcmtRdWV1ZSgpKTsK
ICAgICAgICAgbV9jb250ZXh0LT52ZXJ0ZXhBdHRyaWIyZihpbmRleCwgeCwgeSk7CiAgICAgfQog
ICAgIHZvaWQgdmVydGV4QXR0cmliMmZ2KHVpbnQzMl90IGluZGV4LCBJUEM6OkFycmF5UmVmZXJl
bmNlPGZsb2F0LCAyPiYmIHZhbHVlcykKICAgICB7Ci0gICAgICAgIGFzc2VydElzQ3VycmVudCht
X3N0cmVhbVRocmVhZCk7CisgICAgICAgIGFzc2VydElzQ3VycmVudCh3b3JrUXVldWUoKSk7CiAg
ICAgICAgIG1fY29udGV4dC0+dmVydGV4QXR0cmliMmZ2KGluZGV4LCBtYWtlR0NHTFNwYW48Mj4o
cmVpbnRlcnByZXRfY2FzdDxjb25zdCBHQ0dMZmxvYXQqPih2YWx1ZXMuZGF0YSgpKSkpOwogICAg
IH0KICAgICB2b2lkIHZlcnRleEF0dHJpYjNmKHVpbnQzMl90IGluZGV4LCBmbG9hdCB4LCBmbG9h
dCB5LCBmbG9hdCB6KQogICAgIHsKLSAgICAgICAgYXNzZXJ0SXNDdXJyZW50KG1fc3RyZWFtVGhy
ZWFkKTsKKyAgICAgICAgYXNzZXJ0SXNDdXJyZW50KHdvcmtRdWV1ZSgpKTsKICAgICAgICAgbV9j
b250ZXh0LT52ZXJ0ZXhBdHRyaWIzZihpbmRleCwgeCwgeSwgeik7CiAgICAgfQogICAgIHZvaWQg
dmVydGV4QXR0cmliM2Z2KHVpbnQzMl90IGluZGV4LCBJUEM6OkFycmF5UmVmZXJlbmNlPGZsb2F0
LCAzPiYmIHZhbHVlcykKICAgICB7Ci0gICAgICAgIGFzc2VydElzQ3VycmVudChtX3N0cmVhbVRo
cmVhZCk7CisgICAgICAgIGFzc2VydElzQ3VycmVudCh3b3JrUXVldWUoKSk7CiAgICAgICAgIG1f
Y29udGV4dC0+dmVydGV4QXR0cmliM2Z2KGluZGV4LCBtYWtlR0NHTFNwYW48Mz4ocmVpbnRlcnBy
ZXRfY2FzdDxjb25zdCBHQ0dMZmxvYXQqPih2YWx1ZXMuZGF0YSgpKSkpOwogICAgIH0KICAgICB2
b2lkIHZlcnRleEF0dHJpYjRmKHVpbnQzMl90IGluZGV4LCBmbG9hdCB4LCBmbG9hdCB5LCBmbG9h
dCB6LCBmbG9hdCB3KQogICAgIHsKLSAgICAgICAgYXNzZXJ0SXNDdXJyZW50KG1fc3RyZWFtVGhy
ZWFkKTsKKyAgICAgICAgYXNzZXJ0SXNDdXJyZW50KHdvcmtRdWV1ZSgpKTsKICAgICAgICAgbV9j
b250ZXh0LT52ZXJ0ZXhBdHRyaWI0ZihpbmRleCwgeCwgeSwgeiwgdyk7CiAgICAgfQogICAgIHZv
aWQgdmVydGV4QXR0cmliNGZ2KHVpbnQzMl90IGluZGV4LCBJUEM6OkFycmF5UmVmZXJlbmNlPGZs
b2F0LCA0PiYmIHZhbHVlcykKICAgICB7Ci0gICAgICAgIGFzc2VydElzQ3VycmVudChtX3N0cmVh
bVRocmVhZCk7CisgICAgICAgIGFzc2VydElzQ3VycmVudCh3b3JrUXVldWUoKSk7CiAgICAgICAg
IG1fY29udGV4dC0+dmVydGV4QXR0cmliNGZ2KGluZGV4LCBtYWtlR0NHTFNwYW48ND4ocmVpbnRl
cnByZXRfY2FzdDxjb25zdCBHQ0dMZmxvYXQqPih2YWx1ZXMuZGF0YSgpKSkpOwogICAgIH0KICAg
ICB2b2lkIHZlcnRleEF0dHJpYlBvaW50ZXIodWludDMyX3QgaW5kZXgsIGludDMyX3Qgc2l6ZSwg
dWludDMyX3QgdHlwZSwgYm9vbCBub3JtYWxpemVkLCBpbnQzMl90IHN0cmlkZSwgdWludDY0X3Qg
b2Zmc2V0KQogICAgIHsKLSAgICAgICAgYXNzZXJ0SXNDdXJyZW50KG1fc3RyZWFtVGhyZWFkKTsK
KyAgICAgICAgYXNzZXJ0SXNDdXJyZW50KHdvcmtRdWV1ZSgpKTsKICAgICAgICAgbV9jb250ZXh0
LT52ZXJ0ZXhBdHRyaWJQb2ludGVyKGluZGV4LCBzaXplLCB0eXBlLCBzdGF0aWNfY2FzdDxHQ0dM
Ym9vbGVhbj4obm9ybWFsaXplZCksIHN0cmlkZSwgc3RhdGljX2Nhc3Q8R0NHTGludHB0cj4ob2Zm
c2V0KSk7CiAgICAgfQogICAgIHZvaWQgdmlld3BvcnQoaW50MzJfdCB4LCBpbnQzMl90IHksIGlu
dDMyX3Qgd2lkdGgsIGludDMyX3QgaGVpZ2h0KQogICAgIHsKLSAgICAgICAgYXNzZXJ0SXNDdXJy
ZW50KG1fc3RyZWFtVGhyZWFkKTsKKyAgICAgICAgYXNzZXJ0SXNDdXJyZW50KHdvcmtRdWV1ZSgp
KTsKICAgICAgICAgbV9jb250ZXh0LT52aWV3cG9ydCh4LCB5LCB3aWR0aCwgaGVpZ2h0KTsKICAg
ICB9CiAgICAgdm9pZCBidWZmZXJEYXRhMCh1aW50MzJfdCB0YXJnZXQsIHVpbnQ2NF90IGFyZzEs
IHVpbnQzMl90IHVzYWdlKQogICAgIHsKLSAgICAgICAgYXNzZXJ0SXNDdXJyZW50KG1fc3RyZWFt
VGhyZWFkKTsKKyAgICAgICAgYXNzZXJ0SXNDdXJyZW50KHdvcmtRdWV1ZSgpKTsKICAgICAgICAg
bV9jb250ZXh0LT5idWZmZXJEYXRhKHRhcmdldCwgc3RhdGljX2Nhc3Q8R0NHTHNpemVpcHRyPihh
cmcxKSwgdXNhZ2UpOwogICAgIH0KICAgICB2b2lkIGJ1ZmZlckRhdGExKHVpbnQzMl90IHRhcmdl
dCwgSVBDOjpBcnJheVJlZmVyZW5jZTx1aW50OF90PiYmIGRhdGEsIHVpbnQzMl90IHVzYWdlKQog
ICAgIHsKLSAgICAgICAgYXNzZXJ0SXNDdXJyZW50KG1fc3RyZWFtVGhyZWFkKTsKKyAgICAgICAg
YXNzZXJ0SXNDdXJyZW50KHdvcmtRdWV1ZSgpKTsKICAgICAgICAgbV9jb250ZXh0LT5idWZmZXJE
YXRhKHRhcmdldCwgbWFrZUdDR0xTcGFuKHJlaW50ZXJwcmV0X2Nhc3Q8Y29uc3QgR0NHTHZvaWQq
PihkYXRhLmRhdGEoKSksIGRhdGEuc2l6ZSgpKSwgdXNhZ2UpOwogICAgIH0KICAgICB2b2lkIGJ1
ZmZlclN1YkRhdGEodWludDMyX3QgdGFyZ2V0LCB1aW50NjRfdCBvZmZzZXQsIElQQzo6QXJyYXlS
ZWZlcmVuY2U8dWludDhfdD4mJiBkYXRhKQogICAgIHsKLSAgICAgICAgYXNzZXJ0SXNDdXJyZW50
KG1fc3RyZWFtVGhyZWFkKTsKKyAgICAgICAgYXNzZXJ0SXNDdXJyZW50KHdvcmtRdWV1ZSgpKTsK
ICAgICAgICAgbV9jb250ZXh0LT5idWZmZXJTdWJEYXRhKHRhcmdldCwgc3RhdGljX2Nhc3Q8R0NH
TGludHB0cj4ob2Zmc2V0KSwgbWFrZUdDR0xTcGFuKHJlaW50ZXJwcmV0X2Nhc3Q8Y29uc3QgR0NH
THZvaWQqPihkYXRhLmRhdGEoKSksIGRhdGEuc2l6ZSgpKSk7CiAgICAgfQogICAgIHZvaWQgcmVh
ZG5QaXhlbHMwKGludDMyX3QgeCwgaW50MzJfdCB5LCBpbnQzMl90IHdpZHRoLCBpbnQzMl90IGhl
aWdodCwgdWludDMyX3QgZm9ybWF0LCB1aW50MzJfdCB0eXBlLCB1aW50NjRfdCBkYXRhU2l6ZSwg
Q29tcGxldGlvbkhhbmRsZXI8dm9pZChJUEM6OkFycmF5UmVmZXJlbmNlPHVpbnQ4X3Q+KT4mJiBj
b21wbGV0aW9uSGFuZGxlcikKICAgICB7CiAgICAgICAgIFZlY3RvcjxHQ0dMY2hhciwgND4gZGF0
YShzdGF0aWNfY2FzdDxzaXplX3Q+KGRhdGFTaXplKSwgMCk7Ci0gICAgICAgIGFzc2VydElzQ3Vy
cmVudChtX3N0cmVhbVRocmVhZCk7CisgICAgICAgIGFzc2VydElzQ3VycmVudCh3b3JrUXVldWUo
KSk7CiAgICAgICAgIG1fY29udGV4dC0+cmVhZG5QaXhlbHMoeCwgeSwgd2lkdGgsIGhlaWdodCwg
Zm9ybWF0LCB0eXBlLCBkYXRhKTsKICAgICAgICAgY29tcGxldGlvbkhhbmRsZXIoSVBDOjpBcnJh
eVJlZmVyZW5jZTx1aW50OF90PihyZWludGVycHJldF9jYXN0PHVpbnQ4X3QqPihkYXRhLmRhdGEo
KSksIGRhdGEuc2l6ZSgpKSk7CiAgICAgfQogICAgIHZvaWQgcmVhZG5QaXhlbHMxKGludDMyX3Qg
eCwgaW50MzJfdCB5LCBpbnQzMl90IHdpZHRoLCBpbnQzMl90IGhlaWdodCwgdWludDMyX3QgZm9y
bWF0LCB1aW50MzJfdCB0eXBlLCB1aW50NjRfdCBvZmZzZXQpCiAgICAgewotICAgICAgICBhc3Nl
cnRJc0N1cnJlbnQobV9zdHJlYW1UaHJlYWQpOworICAgICAgICBhc3NlcnRJc0N1cnJlbnQod29y
a1F1ZXVlKCkpOwogICAgICAgICBtX2NvbnRleHQtPnJlYWRuUGl4ZWxzKHgsIHksIHdpZHRoLCBo
ZWlnaHQsIGZvcm1hdCwgdHlwZSwgc3RhdGljX2Nhc3Q8R0NHTGludHB0cj4ob2Zmc2V0KSk7CiAg
ICAgfQogICAgIHZvaWQgdGV4SW1hZ2UyRDAodWludDMyX3QgdGFyZ2V0LCBpbnQzMl90IGxldmVs
LCB1aW50MzJfdCBpbnRlcm5hbGZvcm1hdCwgaW50MzJfdCB3aWR0aCwgaW50MzJfdCBoZWlnaHQs
IGludDMyX3QgYm9yZGVyLCB1aW50MzJfdCBmb3JtYXQsIHVpbnQzMl90IHR5cGUsIElQQzo6QXJy
YXlSZWZlcmVuY2U8dWludDhfdD4mJiBwaXhlbHMpCiAgICAgewotICAgICAgICBhc3NlcnRJc0N1
cnJlbnQobV9zdHJlYW1UaHJlYWQpOworICAgICAgICBhc3NlcnRJc0N1cnJlbnQod29ya1F1ZXVl
KCkpOwogICAgICAgICBtX2NvbnRleHQtPnRleEltYWdlMkQodGFyZ2V0LCBsZXZlbCwgaW50ZXJu
YWxmb3JtYXQsIHdpZHRoLCBoZWlnaHQsIGJvcmRlciwgZm9ybWF0LCB0eXBlLCBtYWtlR0NHTFNw
YW4ocmVpbnRlcnByZXRfY2FzdDxjb25zdCBHQ0dMdm9pZCo+KHBpeGVscy5kYXRhKCkpLCBwaXhl
bHMuc2l6ZSgpKSk7CiAgICAgfQogICAgIHZvaWQgdGV4SW1hZ2UyRDEodWludDMyX3QgdGFyZ2V0
LCBpbnQzMl90IGxldmVsLCB1aW50MzJfdCBpbnRlcm5hbGZvcm1hdCwgaW50MzJfdCB3aWR0aCwg
aW50MzJfdCBoZWlnaHQsIGludDMyX3QgYm9yZGVyLCB1aW50MzJfdCBmb3JtYXQsIHVpbnQzMl90
IHR5cGUsIHVpbnQ2NF90IG9mZnNldCkKICAgICB7Ci0gICAgICAgIGFzc2VydElzQ3VycmVudCht
X3N0cmVhbVRocmVhZCk7CisgICAgICAgIGFzc2VydElzQ3VycmVudCh3b3JrUXVldWUoKSk7CiAg
ICAgICAgIG1fY29udGV4dC0+dGV4SW1hZ2UyRCh0YXJnZXQsIGxldmVsLCBpbnRlcm5hbGZvcm1h
dCwgd2lkdGgsIGhlaWdodCwgYm9yZGVyLCBmb3JtYXQsIHR5cGUsIHN0YXRpY19jYXN0PEdDR0xp
bnRwdHI+KG9mZnNldCkpOwogICAgIH0KICAgICB2b2lkIHRleFN1YkltYWdlMkQwKHVpbnQzMl90
IHRhcmdldCwgaW50MzJfdCBsZXZlbCwgaW50MzJfdCB4b2Zmc2V0LCBpbnQzMl90IHlvZmZzZXQs
IGludDMyX3Qgd2lkdGgsIGludDMyX3QgaGVpZ2h0LCB1aW50MzJfdCBmb3JtYXQsIHVpbnQzMl90
IHR5cGUsIElQQzo6QXJyYXlSZWZlcmVuY2U8dWludDhfdD4mJiBwaXhlbHMpCiAgICAgewotICAg
ICAgICBhc3NlcnRJc0N1cnJlbnQobV9zdHJlYW1UaHJlYWQpOworICAgICAgICBhc3NlcnRJc0N1
cnJlbnQod29ya1F1ZXVlKCkpOwogICAgICAgICBtX2NvbnRleHQtPnRleFN1YkltYWdlMkQodGFy
Z2V0LCBsZXZlbCwgeG9mZnNldCwgeW9mZnNldCwgd2lkdGgsIGhlaWdodCwgZm9ybWF0LCB0eXBl
LCBtYWtlR0NHTFNwYW4ocmVpbnRlcnByZXRfY2FzdDxjb25zdCBHQ0dMdm9pZCo+KHBpeGVscy5k
YXRhKCkpLCBwaXhlbHMuc2l6ZSgpKSk7CiAgICAgfQogICAgIHZvaWQgdGV4U3ViSW1hZ2UyRDEo
dWludDMyX3QgdGFyZ2V0LCBpbnQzMl90IGxldmVsLCBpbnQzMl90IHhvZmZzZXQsIGludDMyX3Qg
eW9mZnNldCwgaW50MzJfdCB3aWR0aCwgaW50MzJfdCBoZWlnaHQsIHVpbnQzMl90IGZvcm1hdCwg
dWludDMyX3QgdHlwZSwgdWludDY0X3Qgb2Zmc2V0KQogICAgIHsKLSAgICAgICAgYXNzZXJ0SXND
dXJyZW50KG1fc3RyZWFtVGhyZWFkKTsKKyAgICAgICAgYXNzZXJ0SXNDdXJyZW50KHdvcmtRdWV1
ZSgpKTsKICAgICAgICAgbV9jb250ZXh0LT50ZXhTdWJJbWFnZTJEKHRhcmdldCwgbGV2ZWwsIHhv
ZmZzZXQsIHlvZmZzZXQsIHdpZHRoLCBoZWlnaHQsIGZvcm1hdCwgdHlwZSwgc3RhdGljX2Nhc3Q8
R0NHTGludHB0cj4ob2Zmc2V0KSk7CiAgICAgfQogICAgIHZvaWQgY29tcHJlc3NlZFRleEltYWdl
MkQwKHVpbnQzMl90IHRhcmdldCwgaW50MzJfdCBsZXZlbCwgdWludDMyX3QgaW50ZXJuYWxmb3Jt
YXQsIGludDMyX3Qgd2lkdGgsIGludDMyX3QgaGVpZ2h0LCBpbnQzMl90IGJvcmRlciwgaW50MzJf
dCBpbWFnZVNpemUsIElQQzo6QXJyYXlSZWZlcmVuY2U8dWludDhfdD4mJiBkYXRhKQogICAgIHsK
LSAgICAgICAgYXNzZXJ0SXNDdXJyZW50KG1fc3RyZWFtVGhyZWFkKTsKKyAgICAgICAgYXNzZXJ0
SXNDdXJyZW50KHdvcmtRdWV1ZSgpKTsKICAgICAgICAgbV9jb250ZXh0LT5jb21wcmVzc2VkVGV4
SW1hZ2UyRCh0YXJnZXQsIGxldmVsLCBpbnRlcm5hbGZvcm1hdCwgd2lkdGgsIGhlaWdodCwgYm9y
ZGVyLCBpbWFnZVNpemUsIG1ha2VHQ0dMU3BhbihyZWludGVycHJldF9jYXN0PGNvbnN0IEdDR0x2
b2lkKj4oZGF0YS5kYXRhKCkpLCBkYXRhLnNpemUoKSkpOwogICAgIH0KICAgICB2b2lkIGNvbXBy
ZXNzZWRUZXhJbWFnZTJEMSh1aW50MzJfdCB0YXJnZXQsIGludDMyX3QgbGV2ZWwsIHVpbnQzMl90
IGludGVybmFsZm9ybWF0LCBpbnQzMl90IHdpZHRoLCBpbnQzMl90IGhlaWdodCwgaW50MzJfdCBi
b3JkZXIsIGludDMyX3QgaW1hZ2VTaXplLCB1aW50NjRfdCBvZmZzZXQpCiAgICAgewotICAgICAg
ICBhc3NlcnRJc0N1cnJlbnQobV9zdHJlYW1UaHJlYWQpOworICAgICAgICBhc3NlcnRJc0N1cnJl
bnQod29ya1F1ZXVlKCkpOwogICAgICAgICBtX2NvbnRleHQtPmNvbXByZXNzZWRUZXhJbWFnZTJE
KHRhcmdldCwgbGV2ZWwsIGludGVybmFsZm9ybWF0LCB3aWR0aCwgaGVpZ2h0LCBib3JkZXIsIGlt
YWdlU2l6ZSwgc3RhdGljX2Nhc3Q8R0NHTGludHB0cj4ob2Zmc2V0KSk7CiAgICAgfQogICAgIHZv
aWQgY29tcHJlc3NlZFRleFN1YkltYWdlMkQwKHVpbnQzMl90IHRhcmdldCwgaW50MzJfdCBsZXZl
bCwgaW50MzJfdCB4b2Zmc2V0LCBpbnQzMl90IHlvZmZzZXQsIGludDMyX3Qgd2lkdGgsIGludDMy
X3QgaGVpZ2h0LCB1aW50MzJfdCBmb3JtYXQsIGludDMyX3QgaW1hZ2VTaXplLCBJUEM6OkFycmF5
UmVmZXJlbmNlPHVpbnQ4X3Q+JiYgZGF0YSkKICAgICB7Ci0gICAgICAgIGFzc2VydElzQ3VycmVu
dChtX3N0cmVhbVRocmVhZCk7CisgICAgICAgIGFzc2VydElzQ3VycmVudCh3b3JrUXVldWUoKSk7
CiAgICAgICAgIG1fY29udGV4dC0+Y29tcHJlc3NlZFRleFN1YkltYWdlMkQodGFyZ2V0LCBsZXZl
bCwgeG9mZnNldCwgeW9mZnNldCwgd2lkdGgsIGhlaWdodCwgZm9ybWF0LCBpbWFnZVNpemUsIG1h
a2VHQ0dMU3BhbihyZWludGVycHJldF9jYXN0PGNvbnN0IEdDR0x2b2lkKj4oZGF0YS5kYXRhKCkp
LCBkYXRhLnNpemUoKSkpOwogICAgIH0KICAgICB2b2lkIGNvbXByZXNzZWRUZXhTdWJJbWFnZTJE
MSh1aW50MzJfdCB0YXJnZXQsIGludDMyX3QgbGV2ZWwsIGludDMyX3QgeG9mZnNldCwgaW50MzJf
dCB5b2Zmc2V0LCBpbnQzMl90IHdpZHRoLCBpbnQzMl90IGhlaWdodCwgdWludDMyX3QgZm9ybWF0
LCBpbnQzMl90IGltYWdlU2l6ZSwgdWludDY0X3Qgb2Zmc2V0KQogICAgIHsKLSAgICAgICAgYXNz
ZXJ0SXNDdXJyZW50KG1fc3RyZWFtVGhyZWFkKTsKKyAgICAgICAgYXNzZXJ0SXNDdXJyZW50KHdv
cmtRdWV1ZSgpKTsKICAgICAgICAgbV9jb250ZXh0LT5jb21wcmVzc2VkVGV4U3ViSW1hZ2UyRCh0
YXJnZXQsIGxldmVsLCB4b2Zmc2V0LCB5b2Zmc2V0LCB3aWR0aCwgaGVpZ2h0LCBmb3JtYXQsIGlt
YWdlU2l6ZSwgc3RhdGljX2Nhc3Q8R0NHTGludHB0cj4ob2Zmc2V0KSk7CiAgICAgfQogICAgIHZv
aWQgZHJhd0FycmF5c0luc3RhbmNlZCh1aW50MzJfdCBtb2RlLCBpbnQzMl90IGZpcnN0LCBpbnQz
Ml90IGNvdW50LCBpbnQzMl90IHByaW1jb3VudCkKICAgICB7Ci0gICAgICAgIGFzc2VydElzQ3Vy
cmVudChtX3N0cmVhbVRocmVhZCk7CisgICAgICAgIGFzc2VydElzQ3VycmVudCh3b3JrUXVldWUo
KSk7CiAgICAgICAgIG1fY29udGV4dC0+ZHJhd0FycmF5c0luc3RhbmNlZChtb2RlLCBmaXJzdCwg
Y291bnQsIHByaW1jb3VudCk7CiAgICAgfQogICAgIHZvaWQgZHJhd0VsZW1lbnRzSW5zdGFuY2Vk
KHVpbnQzMl90IG1vZGUsIGludDMyX3QgY291bnQsIHVpbnQzMl90IHR5cGUsIHVpbnQ2NF90IG9m
ZnNldCwgaW50MzJfdCBwcmltY291bnQpCiAgICAgewotICAgICAgICBhc3NlcnRJc0N1cnJlbnQo
bV9zdHJlYW1UaHJlYWQpOworICAgICAgICBhc3NlcnRJc0N1cnJlbnQod29ya1F1ZXVlKCkpOwog
ICAgICAgICBtX2NvbnRleHQtPmRyYXdFbGVtZW50c0luc3RhbmNlZChtb2RlLCBjb3VudCwgdHlw
ZSwgc3RhdGljX2Nhc3Q8R0NHTGludHB0cj4ob2Zmc2V0KSwgcHJpbWNvdW50KTsKICAgICB9CiAg
ICAgdm9pZCB2ZXJ0ZXhBdHRyaWJEaXZpc29yKHVpbnQzMl90IGluZGV4LCB1aW50MzJfdCBkaXZp
c29yKQogICAgIHsKLSAgICAgICAgYXNzZXJ0SXNDdXJyZW50KG1fc3RyZWFtVGhyZWFkKTsKKyAg
ICAgICAgYXNzZXJ0SXNDdXJyZW50KHdvcmtRdWV1ZSgpKTsKICAgICAgICAgbV9jb250ZXh0LT52
ZXJ0ZXhBdHRyaWJEaXZpc29yKGluZGV4LCBkaXZpc29yKTsKICAgICB9CiAgICAgdm9pZCBjcmVh
dGVWZXJ0ZXhBcnJheShDb21wbGV0aW9uSGFuZGxlcjx2b2lkKHVpbnQzMl90KT4mJiBjb21wbGV0
aW9uSGFuZGxlcikKICAgICB7CiAgICAgICAgIFBsYXRmb3JtR0xPYmplY3QgcmV0dXJuVmFsdWUg
PSB7IH07Ci0gICAgICAgIGFzc2VydElzQ3VycmVudChtX3N0cmVhbVRocmVhZCk7CisgICAgICAg
IGFzc2VydElzQ3VycmVudCh3b3JrUXVldWUoKSk7CiAgICAgICAgIHJldHVyblZhbHVlID0gbV9j
b250ZXh0LT5jcmVhdGVWZXJ0ZXhBcnJheSgpOwogICAgICAgICBjb21wbGV0aW9uSGFuZGxlcihy
ZXR1cm5WYWx1ZSk7CiAgICAgfQogICAgIHZvaWQgZGVsZXRlVmVydGV4QXJyYXkodWludDMyX3Qg
YXJnMCkKICAgICB7Ci0gICAgICAgIGFzc2VydElzQ3VycmVudChtX3N0cmVhbVRocmVhZCk7Cisg
ICAgICAgIGFzc2VydElzQ3VycmVudCh3b3JrUXVldWUoKSk7CiAgICAgICAgIG1fY29udGV4dC0+
ZGVsZXRlVmVydGV4QXJyYXkoYXJnMCk7CiAgICAgfQogICAgIHZvaWQgaXNWZXJ0ZXhBcnJheSh1
aW50MzJfdCBhcmcwLCBDb21wbGV0aW9uSGFuZGxlcjx2b2lkKGJvb2wpPiYmIGNvbXBsZXRpb25I
YW5kbGVyKQogICAgIHsKICAgICAgICAgR0NHTGJvb2xlYW4gcmV0dXJuVmFsdWUgPSB7IH07Ci0g
ICAgICAgIGFzc2VydElzQ3VycmVudChtX3N0cmVhbVRocmVhZCk7CisgICAgICAgIGFzc2VydElz
Q3VycmVudCh3b3JrUXVldWUoKSk7CiAgICAgICAgIHJldHVyblZhbHVlID0gbV9jb250ZXh0LT5p
c1ZlcnRleEFycmF5KGFyZzApOwogICAgICAgICBjb21wbGV0aW9uSGFuZGxlcihzdGF0aWNfY2Fz
dDxib29sPihyZXR1cm5WYWx1ZSkpOwogICAgIH0KICAgICB2b2lkIGJpbmRWZXJ0ZXhBcnJheSh1
aW50MzJfdCBhcmcwKQogICAgIHsKLSAgICAgICAgYXNzZXJ0SXNDdXJyZW50KG1fc3RyZWFtVGhy
ZWFkKTsKKyAgICAgICAgYXNzZXJ0SXNDdXJyZW50KHdvcmtRdWV1ZSgpKTsKICAgICAgICAgbV9j
b250ZXh0LT5iaW5kVmVydGV4QXJyYXkoYXJnMCk7CiAgICAgfQogICAgIHZvaWQgY29weUJ1ZmZl
clN1YkRhdGEodWludDMyX3QgcmVhZFRhcmdldCwgdWludDMyX3Qgd3JpdGVUYXJnZXQsIHVpbnQ2
NF90IHJlYWRPZmZzZXQsIHVpbnQ2NF90IHdyaXRlT2Zmc2V0LCB1aW50NjRfdCBhcmc0KQogICAg
IHsKLSAgICAgICAgYXNzZXJ0SXNDdXJyZW50KG1fc3RyZWFtVGhyZWFkKTsKKyAgICAgICAgYXNz
ZXJ0SXNDdXJyZW50KHdvcmtRdWV1ZSgpKTsKICAgICAgICAgbV9jb250ZXh0LT5jb3B5QnVmZmVy
U3ViRGF0YShyZWFkVGFyZ2V0LCB3cml0ZVRhcmdldCwgc3RhdGljX2Nhc3Q8R0NHTGludHB0cj4o
cmVhZE9mZnNldCksIHN0YXRpY19jYXN0PEdDR0xpbnRwdHI+KHdyaXRlT2Zmc2V0KSwgc3RhdGlj
X2Nhc3Q8R0NHTHNpemVpcHRyPihhcmc0KSk7CiAgICAgfQogICAgIHZvaWQgZ2V0QnVmZmVyU3Vi
RGF0YSh1aW50MzJfdCB0YXJnZXQsIHVpbnQ2NF90IG9mZnNldCwgdWludDY0X3QgZGF0YVNpemUs
IENvbXBsZXRpb25IYW5kbGVyPHZvaWQoSVBDOjpBcnJheVJlZmVyZW5jZTx1aW50OF90Pik+JiYg
Y29tcGxldGlvbkhhbmRsZXIpCiAgICAgewogICAgICAgICBWZWN0b3I8R0NHTGNoYXIsIDQ+IGRh
dGEoc3RhdGljX2Nhc3Q8c2l6ZV90PihkYXRhU2l6ZSksIDApOwotICAgICAgICBhc3NlcnRJc0N1
cnJlbnQobV9zdHJlYW1UaHJlYWQpOworICAgICAgICBhc3NlcnRJc0N1cnJlbnQod29ya1F1ZXVl
KCkpOwogICAgICAgICBtX2NvbnRleHQtPmdldEJ1ZmZlclN1YkRhdGEodGFyZ2V0LCBzdGF0aWNf
Y2FzdDxHQ0dMaW50cHRyPihvZmZzZXQpLCBkYXRhKTsKICAgICAgICAgY29tcGxldGlvbkhhbmRs
ZXIoSVBDOjpBcnJheVJlZmVyZW5jZTx1aW50OF90PihyZWludGVycHJldF9jYXN0PHVpbnQ4X3Qq
PihkYXRhLmRhdGEoKSksIGRhdGEuc2l6ZSgpKSk7CiAgICAgfQogICAgIHZvaWQgYmxpdEZyYW1l
YnVmZmVyKGludDMyX3Qgc3JjWDAsIGludDMyX3Qgc3JjWTAsIGludDMyX3Qgc3JjWDEsIGludDMy
X3Qgc3JjWTEsIGludDMyX3QgZHN0WDAsIGludDMyX3QgZHN0WTAsIGludDMyX3QgZHN0WDEsIGlu
dDMyX3QgZHN0WTEsIHVpbnQzMl90IG1hc2ssIHVpbnQzMl90IGZpbHRlcikKICAgICB7Ci0gICAg
ICAgIGFzc2VydElzQ3VycmVudChtX3N0cmVhbVRocmVhZCk7CisgICAgICAgIGFzc2VydElzQ3Vy
cmVudCh3b3JrUXVldWUoKSk7CiAgICAgICAgIG1fY29udGV4dC0+YmxpdEZyYW1lYnVmZmVyKHNy
Y1gwLCBzcmNZMCwgc3JjWDEsIHNyY1kxLCBkc3RYMCwgZHN0WTAsIGRzdFgxLCBkc3RZMSwgbWFz
aywgZmlsdGVyKTsKICAgICB9CiAgICAgdm9pZCBmcmFtZWJ1ZmZlclRleHR1cmVMYXllcih1aW50
MzJfdCB0YXJnZXQsIHVpbnQzMl90IGF0dGFjaG1lbnQsIHVpbnQzMl90IHRleHR1cmUsIGludDMy
X3QgbGV2ZWwsIGludDMyX3QgbGF5ZXIpCiAgICAgewotICAgICAgICBhc3NlcnRJc0N1cnJlbnQo
bV9zdHJlYW1UaHJlYWQpOworICAgICAgICBhc3NlcnRJc0N1cnJlbnQod29ya1F1ZXVlKCkpOwog
ICAgICAgICBtX2NvbnRleHQtPmZyYW1lYnVmZmVyVGV4dHVyZUxheWVyKHRhcmdldCwgYXR0YWNo
bWVudCwgdGV4dHVyZSwgbGV2ZWwsIGxheWVyKTsKICAgICB9CiAgICAgdm9pZCBpbnZhbGlkYXRl
RnJhbWVidWZmZXIodWludDMyX3QgdGFyZ2V0LCBJUEM6OkFycmF5UmVmZXJlbmNlPHVpbnQzMl90
PiYmIGF0dGFjaG1lbnRzKQogICAgIHsKLSAgICAgICAgYXNzZXJ0SXNDdXJyZW50KG1fc3RyZWFt
VGhyZWFkKTsKKyAgICAgICAgYXNzZXJ0SXNDdXJyZW50KHdvcmtRdWV1ZSgpKTsKICAgICAgICAg
bV9jb250ZXh0LT5pbnZhbGlkYXRlRnJhbWVidWZmZXIodGFyZ2V0LCBtYWtlR0NHTFNwYW4ocmVp
bnRlcnByZXRfY2FzdDxjb25zdCBHQ0dMZW51bSo+KGF0dGFjaG1lbnRzLmRhdGEoKSksIGF0dGFj
aG1lbnRzLnNpemUoKSkpOwogICAgIH0KICAgICB2b2lkIGludmFsaWRhdGVTdWJGcmFtZWJ1ZmZl
cih1aW50MzJfdCB0YXJnZXQsIElQQzo6QXJyYXlSZWZlcmVuY2U8dWludDMyX3Q+JiYgYXR0YWNo
bWVudHMsIGludDMyX3QgeCwgaW50MzJfdCB5LCBpbnQzMl90IHdpZHRoLCBpbnQzMl90IGhlaWdo
dCkKICAgICB7Ci0gICAgICAgIGFzc2VydElzQ3VycmVudChtX3N0cmVhbVRocmVhZCk7CisgICAg
ICAgIGFzc2VydElzQ3VycmVudCh3b3JrUXVldWUoKSk7CiAgICAgICAgIG1fY29udGV4dC0+aW52
YWxpZGF0ZVN1YkZyYW1lYnVmZmVyKHRhcmdldCwgbWFrZUdDR0xTcGFuKHJlaW50ZXJwcmV0X2Nh
c3Q8Y29uc3QgR0NHTGVudW0qPihhdHRhY2htZW50cy5kYXRhKCkpLCBhdHRhY2htZW50cy5zaXpl
KCkpLCB4LCB5LCB3aWR0aCwgaGVpZ2h0KTsKICAgICB9CiAgICAgdm9pZCByZWFkQnVmZmVyKHVp
bnQzMl90IHNyYykKICAgICB7Ci0gICAgICAgIGFzc2VydElzQ3VycmVudChtX3N0cmVhbVRocmVh
ZCk7CisgICAgICAgIGFzc2VydElzQ3VycmVudCh3b3JrUXVldWUoKSk7CiAgICAgICAgIG1fY29u
dGV4dC0+cmVhZEJ1ZmZlcihzcmMpOwogICAgIH0KICAgICB2b2lkIHJlbmRlcmJ1ZmZlclN0b3Jh
Z2VNdWx0aXNhbXBsZSh1aW50MzJfdCB0YXJnZXQsIGludDMyX3Qgc2FtcGxlcywgdWludDMyX3Qg
aW50ZXJuYWxmb3JtYXQsIGludDMyX3Qgd2lkdGgsIGludDMyX3QgaGVpZ2h0KQogICAgIHsKLSAg
ICAgICAgYXNzZXJ0SXNDdXJyZW50KG1fc3RyZWFtVGhyZWFkKTsKKyAgICAgICAgYXNzZXJ0SXND
dXJyZW50KHdvcmtRdWV1ZSgpKTsKICAgICAgICAgbV9jb250ZXh0LT5yZW5kZXJidWZmZXJTdG9y
YWdlTXVsdGlzYW1wbGUodGFyZ2V0LCBzYW1wbGVzLCBpbnRlcm5hbGZvcm1hdCwgd2lkdGgsIGhl
aWdodCk7CiAgICAgfQogICAgIHZvaWQgdGV4U3RvcmFnZTJEKHVpbnQzMl90IHRhcmdldCwgaW50
MzJfdCBsZXZlbHMsIHVpbnQzMl90IGludGVybmFsZm9ybWF0LCBpbnQzMl90IHdpZHRoLCBpbnQz
Ml90IGhlaWdodCkKICAgICB7Ci0gICAgICAgIGFzc2VydElzQ3VycmVudChtX3N0cmVhbVRocmVh
ZCk7CisgICAgICAgIGFzc2VydElzQ3VycmVudCh3b3JrUXVldWUoKSk7CiAgICAgICAgIG1fY29u
dGV4dC0+dGV4U3RvcmFnZTJEKHRhcmdldCwgbGV2ZWxzLCBpbnRlcm5hbGZvcm1hdCwgd2lkdGgs
IGhlaWdodCk7CiAgICAgfQogICAgIHZvaWQgdGV4U3RvcmFnZTNEKHVpbnQzMl90IHRhcmdldCwg
aW50MzJfdCBsZXZlbHMsIHVpbnQzMl90IGludGVybmFsZm9ybWF0LCBpbnQzMl90IHdpZHRoLCBp
bnQzMl90IGhlaWdodCwgaW50MzJfdCBkZXB0aCkKICAgICB7Ci0gICAgICAgIGFzc2VydElzQ3Vy
cmVudChtX3N0cmVhbVRocmVhZCk7CisgICAgICAgIGFzc2VydElzQ3VycmVudCh3b3JrUXVldWUo
KSk7CiAgICAgICAgIG1fY29udGV4dC0+dGV4U3RvcmFnZTNEKHRhcmdldCwgbGV2ZWxzLCBpbnRl
cm5hbGZvcm1hdCwgd2lkdGgsIGhlaWdodCwgZGVwdGgpOwogICAgIH0KICAgICB2b2lkIHRleElt
YWdlM0QwKHVpbnQzMl90IHRhcmdldCwgaW50MzJfdCBsZXZlbCwgaW50MzJfdCBpbnRlcm5hbGZv
cm1hdCwgaW50MzJfdCB3aWR0aCwgaW50MzJfdCBoZWlnaHQsIGludDMyX3QgZGVwdGgsIGludDMy
X3QgYm9yZGVyLCB1aW50MzJfdCBmb3JtYXQsIHVpbnQzMl90IHR5cGUsIElQQzo6QXJyYXlSZWZl
cmVuY2U8dWludDhfdD4mJiBwaXhlbHMpCiAgICAgewotICAgICAgICBhc3NlcnRJc0N1cnJlbnQo
bV9zdHJlYW1UaHJlYWQpOworICAgICAgICBhc3NlcnRJc0N1cnJlbnQod29ya1F1ZXVlKCkpOwog
ICAgICAgICBtX2NvbnRleHQtPnRleEltYWdlM0QodGFyZ2V0LCBsZXZlbCwgaW50ZXJuYWxmb3Jt
YXQsIHdpZHRoLCBoZWlnaHQsIGRlcHRoLCBib3JkZXIsIGZvcm1hdCwgdHlwZSwgbWFrZUdDR0xT
cGFuKHJlaW50ZXJwcmV0X2Nhc3Q8Y29uc3QgR0NHTHZvaWQqPihwaXhlbHMuZGF0YSgpKSwgcGl4
ZWxzLnNpemUoKSkpOwogICAgIH0KICAgICB2b2lkIHRleEltYWdlM0QxKHVpbnQzMl90IHRhcmdl
dCwgaW50MzJfdCBsZXZlbCwgaW50MzJfdCBpbnRlcm5hbGZvcm1hdCwgaW50MzJfdCB3aWR0aCwg
aW50MzJfdCBoZWlnaHQsIGludDMyX3QgZGVwdGgsIGludDMyX3QgYm9yZGVyLCB1aW50MzJfdCBm
b3JtYXQsIHVpbnQzMl90IHR5cGUsIHVpbnQ2NF90IG9mZnNldCkKICAgICB7Ci0gICAgICAgIGFz
c2VydElzQ3VycmVudChtX3N0cmVhbVRocmVhZCk7CisgICAgICAgIGFzc2VydElzQ3VycmVudCh3
b3JrUXVldWUoKSk7CiAgICAgICAgIG1fY29udGV4dC0+dGV4SW1hZ2UzRCh0YXJnZXQsIGxldmVs
LCBpbnRlcm5hbGZvcm1hdCwgd2lkdGgsIGhlaWdodCwgZGVwdGgsIGJvcmRlciwgZm9ybWF0LCB0
eXBlLCBzdGF0aWNfY2FzdDxHQ0dMaW50cHRyPihvZmZzZXQpKTsKICAgICB9CiAgICAgdm9pZCB0
ZXhTdWJJbWFnZTNEMCh1aW50MzJfdCB0YXJnZXQsIGludDMyX3QgbGV2ZWwsIGludDMyX3QgeG9m
ZnNldCwgaW50MzJfdCB5b2Zmc2V0LCBpbnQzMl90IHpvZmZzZXQsIGludDMyX3Qgd2lkdGgsIGlu
dDMyX3QgaGVpZ2h0LCBpbnQzMl90IGRlcHRoLCB1aW50MzJfdCBmb3JtYXQsIHVpbnQzMl90IHR5
cGUsIElQQzo6QXJyYXlSZWZlcmVuY2U8dWludDhfdD4mJiBwaXhlbHMpCiAgICAgewotICAgICAg
ICBhc3NlcnRJc0N1cnJlbnQobV9zdHJlYW1UaHJlYWQpOworICAgICAgICBhc3NlcnRJc0N1cnJl
bnQod29ya1F1ZXVlKCkpOwogICAgICAgICBtX2NvbnRleHQtPnRleFN1YkltYWdlM0QodGFyZ2V0
LCBsZXZlbCwgeG9mZnNldCwgeW9mZnNldCwgem9mZnNldCwgd2lkdGgsIGhlaWdodCwgZGVwdGgs
IGZvcm1hdCwgdHlwZSwgbWFrZUdDR0xTcGFuKHJlaW50ZXJwcmV0X2Nhc3Q8Y29uc3QgR0NHTHZv
aWQqPihwaXhlbHMuZGF0YSgpKSwgcGl4ZWxzLnNpemUoKSkpOwogICAgIH0KICAgICB2b2lkIHRl
eFN1YkltYWdlM0QxKHVpbnQzMl90IHRhcmdldCwgaW50MzJfdCBsZXZlbCwgaW50MzJfdCB4b2Zm
c2V0LCBpbnQzMl90IHlvZmZzZXQsIGludDMyX3Qgem9mZnNldCwgaW50MzJfdCB3aWR0aCwgaW50
MzJfdCBoZWlnaHQsIGludDMyX3QgZGVwdGgsIHVpbnQzMl90IGZvcm1hdCwgdWludDMyX3QgdHlw
ZSwgdWludDY0X3Qgb2Zmc2V0KQogICAgIHsKLSAgICAgICAgYXNzZXJ0SXNDdXJyZW50KG1fc3Ry
ZWFtVGhyZWFkKTsKKyAgICAgICAgYXNzZXJ0SXNDdXJyZW50KHdvcmtRdWV1ZSgpKTsKICAgICAg
ICAgbV9jb250ZXh0LT50ZXhTdWJJbWFnZTNEKHRhcmdldCwgbGV2ZWwsIHhvZmZzZXQsIHlvZmZz
ZXQsIHpvZmZzZXQsIHdpZHRoLCBoZWlnaHQsIGRlcHRoLCBmb3JtYXQsIHR5cGUsIHN0YXRpY19j
YXN0PEdDR0xpbnRwdHI+KG9mZnNldCkpOwogICAgIH0KICAgICB2b2lkIGNvcHlUZXhTdWJJbWFn
ZTNEKHVpbnQzMl90IHRhcmdldCwgaW50MzJfdCBsZXZlbCwgaW50MzJfdCB4b2Zmc2V0LCBpbnQz
Ml90IHlvZmZzZXQsIGludDMyX3Qgem9mZnNldCwgaW50MzJfdCB4LCBpbnQzMl90IHksIGludDMy
X3Qgd2lkdGgsIGludDMyX3QgaGVpZ2h0KQogICAgIHsKLSAgICAgICAgYXNzZXJ0SXNDdXJyZW50
KG1fc3RyZWFtVGhyZWFkKTsKKyAgICAgICAgYXNzZXJ0SXNDdXJyZW50KHdvcmtRdWV1ZSgpKTsK
ICAgICAgICAgbV9jb250ZXh0LT5jb3B5VGV4U3ViSW1hZ2UzRCh0YXJnZXQsIGxldmVsLCB4b2Zm
c2V0LCB5b2Zmc2V0LCB6b2Zmc2V0LCB4LCB5LCB3aWR0aCwgaGVpZ2h0KTsKICAgICB9CiAgICAg
dm9pZCBjb21wcmVzc2VkVGV4SW1hZ2UzRDAodWludDMyX3QgdGFyZ2V0LCBpbnQzMl90IGxldmVs
LCB1aW50MzJfdCBpbnRlcm5hbGZvcm1hdCwgaW50MzJfdCB3aWR0aCwgaW50MzJfdCBoZWlnaHQs
IGludDMyX3QgZGVwdGgsIGludDMyX3QgYm9yZGVyLCBpbnQzMl90IGltYWdlU2l6ZSwgSVBDOjpB
cnJheVJlZmVyZW5jZTx1aW50OF90PiYmIGRhdGEpCiAgICAgewotICAgICAgICBhc3NlcnRJc0N1
cnJlbnQobV9zdHJlYW1UaHJlYWQpOworICAgICAgICBhc3NlcnRJc0N1cnJlbnQod29ya1F1ZXVl
KCkpOwogICAgICAgICBtX2NvbnRleHQtPmNvbXByZXNzZWRUZXhJbWFnZTNEKHRhcmdldCwgbGV2
ZWwsIGludGVybmFsZm9ybWF0LCB3aWR0aCwgaGVpZ2h0LCBkZXB0aCwgYm9yZGVyLCBpbWFnZVNp
emUsIG1ha2VHQ0dMU3BhbihyZWludGVycHJldF9jYXN0PGNvbnN0IEdDR0x2b2lkKj4oZGF0YS5k
YXRhKCkpLCBkYXRhLnNpemUoKSkpOwogICAgIH0KICAgICB2b2lkIGNvbXByZXNzZWRUZXhJbWFn
ZTNEMSh1aW50MzJfdCB0YXJnZXQsIGludDMyX3QgbGV2ZWwsIHVpbnQzMl90IGludGVybmFsZm9y
bWF0LCBpbnQzMl90IHdpZHRoLCBpbnQzMl90IGhlaWdodCwgaW50MzJfdCBkZXB0aCwgaW50MzJf
dCBib3JkZXIsIGludDMyX3QgaW1hZ2VTaXplLCB1aW50NjRfdCBvZmZzZXQpCiAgICAgewotICAg
ICAgICBhc3NlcnRJc0N1cnJlbnQobV9zdHJlYW1UaHJlYWQpOworICAgICAgICBhc3NlcnRJc0N1
cnJlbnQod29ya1F1ZXVlKCkpOwogICAgICAgICBtX2NvbnRleHQtPmNvbXByZXNzZWRUZXhJbWFn
ZTNEKHRhcmdldCwgbGV2ZWwsIGludGVybmFsZm9ybWF0LCB3aWR0aCwgaGVpZ2h0LCBkZXB0aCwg
Ym9yZGVyLCBpbWFnZVNpemUsIHN0YXRpY19jYXN0PEdDR0xpbnRwdHI+KG9mZnNldCkpOwogICAg
IH0KICAgICB2b2lkIGNvbXByZXNzZWRUZXhTdWJJbWFnZTNEMCh1aW50MzJfdCB0YXJnZXQsIGlu
dDMyX3QgbGV2ZWwsIGludDMyX3QgeG9mZnNldCwgaW50MzJfdCB5b2Zmc2V0LCBpbnQzMl90IHpv
ZmZzZXQsIGludDMyX3Qgd2lkdGgsIGludDMyX3QgaGVpZ2h0LCBpbnQzMl90IGRlcHRoLCB1aW50
MzJfdCBmb3JtYXQsIGludDMyX3QgaW1hZ2VTaXplLCBJUEM6OkFycmF5UmVmZXJlbmNlPHVpbnQ4
X3Q+JiYgZGF0YSkKICAgICB7Ci0gICAgICAgIGFzc2VydElzQ3VycmVudChtX3N0cmVhbVRocmVh
ZCk7CisgICAgICAgIGFzc2VydElzQ3VycmVudCh3b3JrUXVldWUoKSk7CiAgICAgICAgIG1fY29u
dGV4dC0+Y29tcHJlc3NlZFRleFN1YkltYWdlM0QodGFyZ2V0LCBsZXZlbCwgeG9mZnNldCwgeW9m
ZnNldCwgem9mZnNldCwgd2lkdGgsIGhlaWdodCwgZGVwdGgsIGZvcm1hdCwgaW1hZ2VTaXplLCBt
YWtlR0NHTFNwYW4ocmVpbnRlcnByZXRfY2FzdDxjb25zdCBHQ0dMdm9pZCo+KGRhdGEuZGF0YSgp
KSwgZGF0YS5zaXplKCkpKTsKICAgICB9CiAgICAgdm9pZCBjb21wcmVzc2VkVGV4U3ViSW1hZ2Uz
RDEodWludDMyX3QgdGFyZ2V0LCBpbnQzMl90IGxldmVsLCBpbnQzMl90IHhvZmZzZXQsIGludDMy
X3QgeW9mZnNldCwgaW50MzJfdCB6b2Zmc2V0LCBpbnQzMl90IHdpZHRoLCBpbnQzMl90IGhlaWdo
dCwgaW50MzJfdCBkZXB0aCwgdWludDMyX3QgZm9ybWF0LCBpbnQzMl90IGltYWdlU2l6ZSwgdWlu
dDY0X3Qgb2Zmc2V0KQogICAgIHsKLSAgICAgICAgYXNzZXJ0SXNDdXJyZW50KG1fc3RyZWFtVGhy
ZWFkKTsKKyAgICAgICAgYXNzZXJ0SXNDdXJyZW50KHdvcmtRdWV1ZSgpKTsKICAgICAgICAgbV9j
b250ZXh0LT5jb21wcmVzc2VkVGV4U3ViSW1hZ2UzRCh0YXJnZXQsIGxldmVsLCB4b2Zmc2V0LCB5
b2Zmc2V0LCB6b2Zmc2V0LCB3aWR0aCwgaGVpZ2h0LCBkZXB0aCwgZm9ybWF0LCBpbWFnZVNpemUs
IHN0YXRpY19jYXN0PEdDR0xpbnRwdHI+KG9mZnNldCkpOwogICAgIH0KICAgICB2b2lkIGdldEZy
YWdEYXRhTG9jYXRpb24odWludDMyX3QgcHJvZ3JhbSwgU3RyaW5nJiYgbmFtZSwgQ29tcGxldGlv
bkhhbmRsZXI8dm9pZChpbnQzMl90KT4mJiBjb21wbGV0aW9uSGFuZGxlcikKICAgICB7CiAgICAg
ICAgIEdDR0xpbnQgcmV0dXJuVmFsdWUgPSB7IH07Ci0gICAgICAgIGFzc2VydElzQ3VycmVudCht
X3N0cmVhbVRocmVhZCk7CisgICAgICAgIGFzc2VydElzQ3VycmVudCh3b3JrUXVldWUoKSk7CiAg
ICAgICAgIHJldHVyblZhbHVlID0gbV9jb250ZXh0LT5nZXRGcmFnRGF0YUxvY2F0aW9uKHByb2dy
YW0sIG5hbWUpOwogICAgICAgICBjb21wbGV0aW9uSGFuZGxlcihyZXR1cm5WYWx1ZSk7CiAgICAg
fQogICAgIHZvaWQgdW5pZm9ybTF1aShpbnQzMl90IGxvY2F0aW9uLCB1aW50MzJfdCB2MCkKICAg
ICB7Ci0gICAgICAgIGFzc2VydElzQ3VycmVudChtX3N0cmVhbVRocmVhZCk7CisgICAgICAgIGFz
c2VydElzQ3VycmVudCh3b3JrUXVldWUoKSk7CiAgICAgICAgIG1fY29udGV4dC0+dW5pZm9ybTF1
aShsb2NhdGlvbiwgdjApOwogICAgIH0KICAgICB2b2lkIHVuaWZvcm0ydWkoaW50MzJfdCBsb2Nh
dGlvbiwgdWludDMyX3QgdjAsIHVpbnQzMl90IHYxKQogICAgIHsKLSAgICAgICAgYXNzZXJ0SXND
dXJyZW50KG1fc3RyZWFtVGhyZWFkKTsKKyAgICAgICAgYXNzZXJ0SXNDdXJyZW50KHdvcmtRdWV1
ZSgpKTsKICAgICAgICAgbV9jb250ZXh0LT51bmlmb3JtMnVpKGxvY2F0aW9uLCB2MCwgdjEpOwog
ICAgIH0KICAgICB2b2lkIHVuaWZvcm0zdWkoaW50MzJfdCBsb2NhdGlvbiwgdWludDMyX3QgdjAs
IHVpbnQzMl90IHYxLCB1aW50MzJfdCB2MikKICAgICB7Ci0gICAgICAgIGFzc2VydElzQ3VycmVu
dChtX3N0cmVhbVRocmVhZCk7CisgICAgICAgIGFzc2VydElzQ3VycmVudCh3b3JrUXVldWUoKSk7
CiAgICAgICAgIG1fY29udGV4dC0+dW5pZm9ybTN1aShsb2NhdGlvbiwgdjAsIHYxLCB2Mik7CiAg
ICAgfQogICAgIHZvaWQgdW5pZm9ybTR1aShpbnQzMl90IGxvY2F0aW9uLCB1aW50MzJfdCB2MCwg
dWludDMyX3QgdjEsIHVpbnQzMl90IHYyLCB1aW50MzJfdCB2MykKICAgICB7Ci0gICAgICAgIGFz
c2VydElzQ3VycmVudChtX3N0cmVhbVRocmVhZCk7CisgICAgICAgIGFzc2VydElzQ3VycmVudCh3
b3JrUXVldWUoKSk7CiAgICAgICAgIG1fY29udGV4dC0+dW5pZm9ybTR1aShsb2NhdGlvbiwgdjAs
IHYxLCB2MiwgdjMpOwogICAgIH0KICAgICB2b2lkIHVuaWZvcm0xdWl2KGludDMyX3QgbG9jYXRp
b24sIElQQzo6QXJyYXlSZWZlcmVuY2U8dWludDMyX3Q+JiYgZGF0YSkKICAgICB7Ci0gICAgICAg
IGFzc2VydElzQ3VycmVudChtX3N0cmVhbVRocmVhZCk7CisgICAgICAgIGFzc2VydElzQ3VycmVu
dCh3b3JrUXVldWUoKSk7CiAgICAgICAgIG1fY29udGV4dC0+dW5pZm9ybTF1aXYobG9jYXRpb24s
IG1ha2VHQ0dMU3BhbihyZWludGVycHJldF9jYXN0PGNvbnN0IEdDR0x1aW50Kj4oZGF0YS5kYXRh
KCkpLCBkYXRhLnNpemUoKSkpOwogICAgIH0KICAgICB2b2lkIHVuaWZvcm0ydWl2KGludDMyX3Qg
bG9jYXRpb24sIElQQzo6QXJyYXlSZWZlcmVuY2U8dWludDMyX3Q+JiYgZGF0YSkKICAgICB7Ci0g
ICAgICAgIGFzc2VydElzQ3VycmVudChtX3N0cmVhbVRocmVhZCk7CisgICAgICAgIGFzc2VydElz
Q3VycmVudCh3b3JrUXVldWUoKSk7CiAgICAgICAgIG1fY29udGV4dC0+dW5pZm9ybTJ1aXYobG9j
YXRpb24sIG1ha2VHQ0dMU3BhbihyZWludGVycHJldF9jYXN0PGNvbnN0IEdDR0x1aW50Kj4oZGF0
YS5kYXRhKCkpLCBkYXRhLnNpemUoKSkpOwogICAgIH0KICAgICB2b2lkIHVuaWZvcm0zdWl2KGlu
dDMyX3QgbG9jYXRpb24sIElQQzo6QXJyYXlSZWZlcmVuY2U8dWludDMyX3Q+JiYgZGF0YSkKICAg
ICB7Ci0gICAgICAgIGFzc2VydElzQ3VycmVudChtX3N0cmVhbVRocmVhZCk7CisgICAgICAgIGFz
c2VydElzQ3VycmVudCh3b3JrUXVldWUoKSk7CiAgICAgICAgIG1fY29udGV4dC0+dW5pZm9ybTN1
aXYobG9jYXRpb24sIG1ha2VHQ0dMU3BhbihyZWludGVycHJldF9jYXN0PGNvbnN0IEdDR0x1aW50
Kj4oZGF0YS5kYXRhKCkpLCBkYXRhLnNpemUoKSkpOwogICAgIH0KICAgICB2b2lkIHVuaWZvcm00
dWl2KGludDMyX3QgbG9jYXRpb24sIElQQzo6QXJyYXlSZWZlcmVuY2U8dWludDMyX3Q+JiYgZGF0
YSkKICAgICB7Ci0gICAgICAgIGFzc2VydElzQ3VycmVudChtX3N0cmVhbVRocmVhZCk7CisgICAg
ICAgIGFzc2VydElzQ3VycmVudCh3b3JrUXVldWUoKSk7CiAgICAgICAgIG1fY29udGV4dC0+dW5p
Zm9ybTR1aXYobG9jYXRpb24sIG1ha2VHQ0dMU3BhbihyZWludGVycHJldF9jYXN0PGNvbnN0IEdD
R0x1aW50Kj4oZGF0YS5kYXRhKCkpLCBkYXRhLnNpemUoKSkpOwogICAgIH0KICAgICB2b2lkIHVu
aWZvcm1NYXRyaXgyeDNmdihpbnQzMl90IGxvY2F0aW9uLCBib29sIHRyYW5zcG9zZSwgSVBDOjpB
cnJheVJlZmVyZW5jZTxmbG9hdD4mJiBkYXRhKQogICAgIHsKLSAgICAgICAgYXNzZXJ0SXNDdXJy
ZW50KG1fc3RyZWFtVGhyZWFkKTsKKyAgICAgICAgYXNzZXJ0SXNDdXJyZW50KHdvcmtRdWV1ZSgp
KTsKICAgICAgICAgbV9jb250ZXh0LT51bmlmb3JtTWF0cml4MngzZnYobG9jYXRpb24sIHN0YXRp
Y19jYXN0PEdDR0xib29sZWFuPih0cmFuc3Bvc2UpLCBtYWtlR0NHTFNwYW4ocmVpbnRlcnByZXRf
Y2FzdDxjb25zdCBHQ0dMZmxvYXQqPihkYXRhLmRhdGEoKSksIGRhdGEuc2l6ZSgpKSk7CiAgICAg
fQogICAgIHZvaWQgdW5pZm9ybU1hdHJpeDN4MmZ2KGludDMyX3QgbG9jYXRpb24sIGJvb2wgdHJh
bnNwb3NlLCBJUEM6OkFycmF5UmVmZXJlbmNlPGZsb2F0PiYmIGRhdGEpCiAgICAgewotICAgICAg
ICBhc3NlcnRJc0N1cnJlbnQobV9zdHJlYW1UaHJlYWQpOworICAgICAgICBhc3NlcnRJc0N1cnJl
bnQod29ya1F1ZXVlKCkpOwogICAgICAgICBtX2NvbnRleHQtPnVuaWZvcm1NYXRyaXgzeDJmdihs
b2NhdGlvbiwgc3RhdGljX2Nhc3Q8R0NHTGJvb2xlYW4+KHRyYW5zcG9zZSksIG1ha2VHQ0dMU3Bh
bihyZWludGVycHJldF9jYXN0PGNvbnN0IEdDR0xmbG9hdCo+KGRhdGEuZGF0YSgpKSwgZGF0YS5z
aXplKCkpKTsKICAgICB9CiAgICAgdm9pZCB1bmlmb3JtTWF0cml4Mng0ZnYoaW50MzJfdCBsb2Nh
dGlvbiwgYm9vbCB0cmFuc3Bvc2UsIElQQzo6QXJyYXlSZWZlcmVuY2U8ZmxvYXQ+JiYgZGF0YSkK
ICAgICB7Ci0gICAgICAgIGFzc2VydElzQ3VycmVudChtX3N0cmVhbVRocmVhZCk7CisgICAgICAg
IGFzc2VydElzQ3VycmVudCh3b3JrUXVldWUoKSk7CiAgICAgICAgIG1fY29udGV4dC0+dW5pZm9y
bU1hdHJpeDJ4NGZ2KGxvY2F0aW9uLCBzdGF0aWNfY2FzdDxHQ0dMYm9vbGVhbj4odHJhbnNwb3Nl
KSwgbWFrZUdDR0xTcGFuKHJlaW50ZXJwcmV0X2Nhc3Q8Y29uc3QgR0NHTGZsb2F0Kj4oZGF0YS5k
YXRhKCkpLCBkYXRhLnNpemUoKSkpOwogICAgIH0KICAgICB2b2lkIHVuaWZvcm1NYXRyaXg0eDJm
dihpbnQzMl90IGxvY2F0aW9uLCBib29sIHRyYW5zcG9zZSwgSVBDOjpBcnJheVJlZmVyZW5jZTxm
bG9hdD4mJiBkYXRhKQogICAgIHsKLSAgICAgICAgYXNzZXJ0SXNDdXJyZW50KG1fc3RyZWFtVGhy
ZWFkKTsKKyAgICAgICAgYXNzZXJ0SXNDdXJyZW50KHdvcmtRdWV1ZSgpKTsKICAgICAgICAgbV9j
b250ZXh0LT51bmlmb3JtTWF0cml4NHgyZnYobG9jYXRpb24sIHN0YXRpY19jYXN0PEdDR0xib29s
ZWFuPih0cmFuc3Bvc2UpLCBtYWtlR0NHTFNwYW4ocmVpbnRlcnByZXRfY2FzdDxjb25zdCBHQ0dM
ZmxvYXQqPihkYXRhLmRhdGEoKSksIGRhdGEuc2l6ZSgpKSk7CiAgICAgfQogICAgIHZvaWQgdW5p
Zm9ybU1hdHJpeDN4NGZ2KGludDMyX3QgbG9jYXRpb24sIGJvb2wgdHJhbnNwb3NlLCBJUEM6OkFy
cmF5UmVmZXJlbmNlPGZsb2F0PiYmIGRhdGEpCiAgICAgewotICAgICAgICBhc3NlcnRJc0N1cnJl
bnQobV9zdHJlYW1UaHJlYWQpOworICAgICAgICBhc3NlcnRJc0N1cnJlbnQod29ya1F1ZXVlKCkp
OwogICAgICAgICBtX2NvbnRleHQtPnVuaWZvcm1NYXRyaXgzeDRmdihsb2NhdGlvbiwgc3RhdGlj
X2Nhc3Q8R0NHTGJvb2xlYW4+KHRyYW5zcG9zZSksIG1ha2VHQ0dMU3BhbihyZWludGVycHJldF9j
YXN0PGNvbnN0IEdDR0xmbG9hdCo+KGRhdGEuZGF0YSgpKSwgZGF0YS5zaXplKCkpKTsKICAgICB9
CiAgICAgdm9pZCB1bmlmb3JtTWF0cml4NHgzZnYoaW50MzJfdCBsb2NhdGlvbiwgYm9vbCB0cmFu
c3Bvc2UsIElQQzo6QXJyYXlSZWZlcmVuY2U8ZmxvYXQ+JiYgZGF0YSkKICAgICB7Ci0gICAgICAg
IGFzc2VydElzQ3VycmVudChtX3N0cmVhbVRocmVhZCk7CisgICAgICAgIGFzc2VydElzQ3VycmVu
dCh3b3JrUXVldWUoKSk7CiAgICAgICAgIG1fY29udGV4dC0+dW5pZm9ybU1hdHJpeDR4M2Z2KGxv
Y2F0aW9uLCBzdGF0aWNfY2FzdDxHQ0dMYm9vbGVhbj4odHJhbnNwb3NlKSwgbWFrZUdDR0xTcGFu
KHJlaW50ZXJwcmV0X2Nhc3Q8Y29uc3QgR0NHTGZsb2F0Kj4oZGF0YS5kYXRhKCkpLCBkYXRhLnNp
emUoKSkpOwogICAgIH0KICAgICB2b2lkIHZlcnRleEF0dHJpYkk0aSh1aW50MzJfdCBpbmRleCwg
aW50MzJfdCB4LCBpbnQzMl90IHksIGludDMyX3QgeiwgaW50MzJfdCB3KQogICAgIHsKLSAgICAg
ICAgYXNzZXJ0SXNDdXJyZW50KG1fc3RyZWFtVGhyZWFkKTsKKyAgICAgICAgYXNzZXJ0SXNDdXJy
ZW50KHdvcmtRdWV1ZSgpKTsKICAgICAgICAgbV9jb250ZXh0LT52ZXJ0ZXhBdHRyaWJJNGkoaW5k
ZXgsIHgsIHksIHosIHcpOwogICAgIH0KICAgICB2b2lkIHZlcnRleEF0dHJpYkk0aXYodWludDMy
X3QgaW5kZXgsIElQQzo6QXJyYXlSZWZlcmVuY2U8aW50MzJfdCwgND4mJiB2YWx1ZXMpCiAgICAg
ewotICAgICAgICBhc3NlcnRJc0N1cnJlbnQobV9zdHJlYW1UaHJlYWQpOworICAgICAgICBhc3Nl
cnRJc0N1cnJlbnQod29ya1F1ZXVlKCkpOwogICAgICAgICBtX2NvbnRleHQtPnZlcnRleEF0dHJp
Ykk0aXYoaW5kZXgsIG1ha2VHQ0dMU3Bhbjw0PihyZWludGVycHJldF9jYXN0PGNvbnN0IEdDR0xp
bnQqPih2YWx1ZXMuZGF0YSgpKSkpOwogICAgIH0KICAgICB2b2lkIHZlcnRleEF0dHJpYkk0dWko
dWludDMyX3QgaW5kZXgsIHVpbnQzMl90IHgsIHVpbnQzMl90IHksIHVpbnQzMl90IHosIHVpbnQz
Ml90IHcpCiAgICAgewotICAgICAgICBhc3NlcnRJc0N1cnJlbnQobV9zdHJlYW1UaHJlYWQpOwor
ICAgICAgICBhc3NlcnRJc0N1cnJlbnQod29ya1F1ZXVlKCkpOwogICAgICAgICBtX2NvbnRleHQt
PnZlcnRleEF0dHJpYkk0dWkoaW5kZXgsIHgsIHksIHosIHcpOwogICAgIH0KICAgICB2b2lkIHZl
cnRleEF0dHJpYkk0dWl2KHVpbnQzMl90IGluZGV4LCBJUEM6OkFycmF5UmVmZXJlbmNlPHVpbnQz
Ml90LCA0PiYmIHZhbHVlcykKICAgICB7Ci0gICAgICAgIGFzc2VydElzQ3VycmVudChtX3N0cmVh
bVRocmVhZCk7CisgICAgICAgIGFzc2VydElzQ3VycmVudCh3b3JrUXVldWUoKSk7CiAgICAgICAg
IG1fY29udGV4dC0+dmVydGV4QXR0cmliSTR1aXYoaW5kZXgsIG1ha2VHQ0dMU3Bhbjw0PihyZWlu
dGVycHJldF9jYXN0PGNvbnN0IEdDR0x1aW50Kj4odmFsdWVzLmRhdGEoKSkpKTsKICAgICB9CiAg
ICAgdm9pZCB2ZXJ0ZXhBdHRyaWJJUG9pbnRlcih1aW50MzJfdCBpbmRleCwgaW50MzJfdCBzaXpl
LCB1aW50MzJfdCB0eXBlLCBpbnQzMl90IHN0cmlkZSwgdWludDY0X3Qgb2Zmc2V0KQogICAgIHsK
LSAgICAgICAgYXNzZXJ0SXNDdXJyZW50KG1fc3RyZWFtVGhyZWFkKTsKKyAgICAgICAgYXNzZXJ0
SXNDdXJyZW50KHdvcmtRdWV1ZSgpKTsKICAgICAgICAgbV9jb250ZXh0LT52ZXJ0ZXhBdHRyaWJJ
UG9pbnRlcihpbmRleCwgc2l6ZSwgdHlwZSwgc3RyaWRlLCBzdGF0aWNfY2FzdDxHQ0dMaW50cHRy
PihvZmZzZXQpKTsKICAgICB9CiAgICAgdm9pZCBkcmF3UmFuZ2VFbGVtZW50cyh1aW50MzJfdCBt
b2RlLCB1aW50MzJfdCBzdGFydCwgdWludDMyX3QgZW5kLCBpbnQzMl90IGNvdW50LCB1aW50MzJf
dCB0eXBlLCB1aW50NjRfdCBvZmZzZXQpCiAgICAgewotICAgICAgICBhc3NlcnRJc0N1cnJlbnQo
bV9zdHJlYW1UaHJlYWQpOworICAgICAgICBhc3NlcnRJc0N1cnJlbnQod29ya1F1ZXVlKCkpOwog
ICAgICAgICBtX2NvbnRleHQtPmRyYXdSYW5nZUVsZW1lbnRzKG1vZGUsIHN0YXJ0LCBlbmQsIGNv
dW50LCB0eXBlLCBzdGF0aWNfY2FzdDxHQ0dMaW50cHRyPihvZmZzZXQpKTsKICAgICB9CiAgICAg
dm9pZCBkcmF3QnVmZmVycyhJUEM6OkFycmF5UmVmZXJlbmNlPHVpbnQzMl90PiYmIGJ1ZnMpCiAg
ICAgewotICAgICAgICBhc3NlcnRJc0N1cnJlbnQobV9zdHJlYW1UaHJlYWQpOworICAgICAgICBh
c3NlcnRJc0N1cnJlbnQod29ya1F1ZXVlKCkpOwogICAgICAgICBtX2NvbnRleHQtPmRyYXdCdWZm
ZXJzKG1ha2VHQ0dMU3BhbihyZWludGVycHJldF9jYXN0PGNvbnN0IEdDR0xlbnVtKj4oYnVmcy5k
YXRhKCkpLCBidWZzLnNpemUoKSkpOwogICAgIH0KICAgICB2b2lkIGNsZWFyQnVmZmVyaXYodWlu
dDMyX3QgYnVmZmVyLCBpbnQzMl90IGRyYXdidWZmZXIsIElQQzo6QXJyYXlSZWZlcmVuY2U8aW50
MzJfdD4mJiB2YWx1ZXMpCiAgICAgewotICAgICAgICBhc3NlcnRJc0N1cnJlbnQobV9zdHJlYW1U
aHJlYWQpOworICAgICAgICBhc3NlcnRJc0N1cnJlbnQod29ya1F1ZXVlKCkpOwogICAgICAgICBt
X2NvbnRleHQtPmNsZWFyQnVmZmVyaXYoYnVmZmVyLCBkcmF3YnVmZmVyLCBtYWtlR0NHTFNwYW4o
cmVpbnRlcnByZXRfY2FzdDxjb25zdCBHQ0dMaW50Kj4odmFsdWVzLmRhdGEoKSksIHZhbHVlcy5z
aXplKCkpKTsKICAgICB9CiAgICAgdm9pZCBjbGVhckJ1ZmZlcnVpdih1aW50MzJfdCBidWZmZXIs
IGludDMyX3QgZHJhd2J1ZmZlciwgSVBDOjpBcnJheVJlZmVyZW5jZTx1aW50MzJfdD4mJiB2YWx1
ZXMpCiAgICAgewotICAgICAgICBhc3NlcnRJc0N1cnJlbnQobV9zdHJlYW1UaHJlYWQpOworICAg
ICAgICBhc3NlcnRJc0N1cnJlbnQod29ya1F1ZXVlKCkpOwogICAgICAgICBtX2NvbnRleHQtPmNs
ZWFyQnVmZmVydWl2KGJ1ZmZlciwgZHJhd2J1ZmZlciwgbWFrZUdDR0xTcGFuKHJlaW50ZXJwcmV0
X2Nhc3Q8Y29uc3QgR0NHTHVpbnQqPih2YWx1ZXMuZGF0YSgpKSwgdmFsdWVzLnNpemUoKSkpOwog
ICAgIH0KICAgICB2b2lkIGNsZWFyQnVmZmVyZnYodWludDMyX3QgYnVmZmVyLCBpbnQzMl90IGRy
YXdidWZmZXIsIElQQzo6QXJyYXlSZWZlcmVuY2U8ZmxvYXQ+JiYgdmFsdWVzKQogICAgIHsKLSAg
ICAgICAgYXNzZXJ0SXNDdXJyZW50KG1fc3RyZWFtVGhyZWFkKTsKKyAgICAgICAgYXNzZXJ0SXND
dXJyZW50KHdvcmtRdWV1ZSgpKTsKICAgICAgICAgbV9jb250ZXh0LT5jbGVhckJ1ZmZlcmZ2KGJ1
ZmZlciwgZHJhd2J1ZmZlciwgbWFrZUdDR0xTcGFuKHJlaW50ZXJwcmV0X2Nhc3Q8Y29uc3QgR0NH
TGZsb2F0Kj4odmFsdWVzLmRhdGEoKSksIHZhbHVlcy5zaXplKCkpKTsKICAgICB9CiAgICAgdm9p
ZCBjbGVhckJ1ZmZlcmZpKHVpbnQzMl90IGJ1ZmZlciwgaW50MzJfdCBkcmF3YnVmZmVyLCBmbG9h
dCBkZXB0aCwgaW50MzJfdCBzdGVuY2lsKQogICAgIHsKLSAgICAgICAgYXNzZXJ0SXNDdXJyZW50
KG1fc3RyZWFtVGhyZWFkKTsKKyAgICAgICAgYXNzZXJ0SXNDdXJyZW50KHdvcmtRdWV1ZSgpKTsK
ICAgICAgICAgbV9jb250ZXh0LT5jbGVhckJ1ZmZlcmZpKGJ1ZmZlciwgZHJhd2J1ZmZlciwgZGVw
dGgsIHN0ZW5jaWwpOwogICAgIH0KICAgICB2b2lkIGNyZWF0ZVF1ZXJ5KENvbXBsZXRpb25IYW5k
bGVyPHZvaWQodWludDMyX3QpPiYmIGNvbXBsZXRpb25IYW5kbGVyKQogICAgIHsKICAgICAgICAg
UGxhdGZvcm1HTE9iamVjdCByZXR1cm5WYWx1ZSA9IHsgfTsKLSAgICAgICAgYXNzZXJ0SXNDdXJy
ZW50KG1fc3RyZWFtVGhyZWFkKTsKKyAgICAgICAgYXNzZXJ0SXNDdXJyZW50KHdvcmtRdWV1ZSgp
KTsKICAgICAgICAgcmV0dXJuVmFsdWUgPSBtX2NvbnRleHQtPmNyZWF0ZVF1ZXJ5KCk7CiAgICAg
ICAgIGNvbXBsZXRpb25IYW5kbGVyKHJldHVyblZhbHVlKTsKICAgICB9CiAgICAgdm9pZCBkZWxl
dGVRdWVyeSh1aW50MzJfdCBxdWVyeSkKICAgICB7Ci0gICAgICAgIGFzc2VydElzQ3VycmVudCht
X3N0cmVhbVRocmVhZCk7CisgICAgICAgIGFzc2VydElzQ3VycmVudCh3b3JrUXVldWUoKSk7CiAg
ICAgICAgIG1fY29udGV4dC0+ZGVsZXRlUXVlcnkocXVlcnkpOwogICAgIH0KICAgICB2b2lkIGlz
UXVlcnkodWludDMyX3QgcXVlcnksIENvbXBsZXRpb25IYW5kbGVyPHZvaWQoYm9vbCk+JiYgY29t
cGxldGlvbkhhbmRsZXIpCiAgICAgewogICAgICAgICBHQ0dMYm9vbGVhbiByZXR1cm5WYWx1ZSA9
IHsgfTsKLSAgICAgICAgYXNzZXJ0SXNDdXJyZW50KG1fc3RyZWFtVGhyZWFkKTsKKyAgICAgICAg
YXNzZXJ0SXNDdXJyZW50KHdvcmtRdWV1ZSgpKTsKICAgICAgICAgcmV0dXJuVmFsdWUgPSBtX2Nv
bnRleHQtPmlzUXVlcnkocXVlcnkpOwogICAgICAgICBjb21wbGV0aW9uSGFuZGxlcihzdGF0aWNf
Y2FzdDxib29sPihyZXR1cm5WYWx1ZSkpOwogICAgIH0KICAgICB2b2lkIGJlZ2luUXVlcnkodWlu
dDMyX3QgdGFyZ2V0LCB1aW50MzJfdCBxdWVyeSkKICAgICB7Ci0gICAgICAgIGFzc2VydElzQ3Vy
cmVudChtX3N0cmVhbVRocmVhZCk7CisgICAgICAgIGFzc2VydElzQ3VycmVudCh3b3JrUXVldWUo
KSk7CiAgICAgICAgIG1fY29udGV4dC0+YmVnaW5RdWVyeSh0YXJnZXQsIHF1ZXJ5KTsKICAgICB9
CiAgICAgdm9pZCBlbmRRdWVyeSh1aW50MzJfdCB0YXJnZXQpCiAgICAgewotICAgICAgICBhc3Nl
cnRJc0N1cnJlbnQobV9zdHJlYW1UaHJlYWQpOworICAgICAgICBhc3NlcnRJc0N1cnJlbnQod29y
a1F1ZXVlKCkpOwogICAgICAgICBtX2NvbnRleHQtPmVuZFF1ZXJ5KHRhcmdldCk7CiAgICAgfQog
ICAgIHZvaWQgZ2V0UXVlcnkodWludDMyX3QgdGFyZ2V0LCB1aW50MzJfdCBwbmFtZSwgQ29tcGxl
dGlvbkhhbmRsZXI8dm9pZCh1aW50MzJfdCk+JiYgY29tcGxldGlvbkhhbmRsZXIpCiAgICAgewog
ICAgICAgICBQbGF0Zm9ybUdMT2JqZWN0IHJldHVyblZhbHVlID0geyB9OwotICAgICAgICBhc3Nl
cnRJc0N1cnJlbnQobV9zdHJlYW1UaHJlYWQpOworICAgICAgICBhc3NlcnRJc0N1cnJlbnQod29y
a1F1ZXVlKCkpOwogICAgICAgICByZXR1cm5WYWx1ZSA9IG1fY29udGV4dC0+Z2V0UXVlcnkodGFy
Z2V0LCBwbmFtZSk7CiAgICAgICAgIGNvbXBsZXRpb25IYW5kbGVyKHJldHVyblZhbHVlKTsKICAg
ICB9CiAgICAgdm9pZCBnZXRRdWVyeU9iamVjdHVpKHVpbnQzMl90IHF1ZXJ5LCB1aW50MzJfdCBw
bmFtZSwgQ29tcGxldGlvbkhhbmRsZXI8dm9pZCh1aW50MzJfdCk+JiYgY29tcGxldGlvbkhhbmRs
ZXIpCiAgICAgewogICAgICAgICBHQ0dMdWludCByZXR1cm5WYWx1ZSA9IHsgfTsKLSAgICAgICAg
YXNzZXJ0SXNDdXJyZW50KG1fc3RyZWFtVGhyZWFkKTsKKyAgICAgICAgYXNzZXJ0SXNDdXJyZW50
KHdvcmtRdWV1ZSgpKTsKICAgICAgICAgcmV0dXJuVmFsdWUgPSBtX2NvbnRleHQtPmdldFF1ZXJ5
T2JqZWN0dWkocXVlcnksIHBuYW1lKTsKICAgICAgICAgY29tcGxldGlvbkhhbmRsZXIocmV0dXJu
VmFsdWUpOwogICAgIH0KICAgICB2b2lkIGNyZWF0ZVNhbXBsZXIoQ29tcGxldGlvbkhhbmRsZXI8
dm9pZCh1aW50MzJfdCk+JiYgY29tcGxldGlvbkhhbmRsZXIpCiAgICAgewogICAgICAgICBQbGF0
Zm9ybUdMT2JqZWN0IHJldHVyblZhbHVlID0geyB9OwotICAgICAgICBhc3NlcnRJc0N1cnJlbnQo
bV9zdHJlYW1UaHJlYWQpOworICAgICAgICBhc3NlcnRJc0N1cnJlbnQod29ya1F1ZXVlKCkpOwog
ICAgICAgICByZXR1cm5WYWx1ZSA9IG1fY29udGV4dC0+Y3JlYXRlU2FtcGxlcigpOwogICAgICAg
ICBjb21wbGV0aW9uSGFuZGxlcihyZXR1cm5WYWx1ZSk7CiAgICAgfQogICAgIHZvaWQgZGVsZXRl
U2FtcGxlcih1aW50MzJfdCBzYW1wbGVyKQogICAgIHsKLSAgICAgICAgYXNzZXJ0SXNDdXJyZW50
KG1fc3RyZWFtVGhyZWFkKTsKKyAgICAgICAgYXNzZXJ0SXNDdXJyZW50KHdvcmtRdWV1ZSgpKTsK
ICAgICAgICAgbV9jb250ZXh0LT5kZWxldGVTYW1wbGVyKHNhbXBsZXIpOwogICAgIH0KICAgICB2
b2lkIGlzU2FtcGxlcih1aW50MzJfdCBzYW1wbGVyLCBDb21wbGV0aW9uSGFuZGxlcjx2b2lkKGJv
b2wpPiYmIGNvbXBsZXRpb25IYW5kbGVyKQogICAgIHsKICAgICAgICAgR0NHTGJvb2xlYW4gcmV0
dXJuVmFsdWUgPSB7IH07Ci0gICAgICAgIGFzc2VydElzQ3VycmVudChtX3N0cmVhbVRocmVhZCk7
CisgICAgICAgIGFzc2VydElzQ3VycmVudCh3b3JrUXVldWUoKSk7CiAgICAgICAgIHJldHVyblZh
bHVlID0gbV9jb250ZXh0LT5pc1NhbXBsZXIoc2FtcGxlcik7CiAgICAgICAgIGNvbXBsZXRpb25I
YW5kbGVyKHN0YXRpY19jYXN0PGJvb2w+KHJldHVyblZhbHVlKSk7CiAgICAgfQogICAgIHZvaWQg
YmluZFNhbXBsZXIodWludDMyX3QgdW5pdCwgdWludDMyX3Qgc2FtcGxlcikKICAgICB7Ci0gICAg
ICAgIGFzc2VydElzQ3VycmVudChtX3N0cmVhbVRocmVhZCk7CisgICAgICAgIGFzc2VydElzQ3Vy
cmVudCh3b3JrUXVldWUoKSk7CiAgICAgICAgIG1fY29udGV4dC0+YmluZFNhbXBsZXIodW5pdCwg
c2FtcGxlcik7CiAgICAgfQogICAgIHZvaWQgc2FtcGxlclBhcmFtZXRlcmkodWludDMyX3Qgc2Ft
cGxlciwgdWludDMyX3QgcG5hbWUsIGludDMyX3QgcGFyYW0pCiAgICAgewotICAgICAgICBhc3Nl
cnRJc0N1cnJlbnQobV9zdHJlYW1UaHJlYWQpOworICAgICAgICBhc3NlcnRJc0N1cnJlbnQod29y
a1F1ZXVlKCkpOwogICAgICAgICBtX2NvbnRleHQtPnNhbXBsZXJQYXJhbWV0ZXJpKHNhbXBsZXIs
IHBuYW1lLCBwYXJhbSk7CiAgICAgfQogICAgIHZvaWQgc2FtcGxlclBhcmFtZXRlcmYodWludDMy
X3Qgc2FtcGxlciwgdWludDMyX3QgcG5hbWUsIGZsb2F0IHBhcmFtKQogICAgIHsKLSAgICAgICAg
YXNzZXJ0SXNDdXJyZW50KG1fc3RyZWFtVGhyZWFkKTsKKyAgICAgICAgYXNzZXJ0SXNDdXJyZW50
KHdvcmtRdWV1ZSgpKTsKICAgICAgICAgbV9jb250ZXh0LT5zYW1wbGVyUGFyYW1ldGVyZihzYW1w
bGVyLCBwbmFtZSwgcGFyYW0pOwogICAgIH0KICAgICB2b2lkIGdldFNhbXBsZXJQYXJhbWV0ZXJm
KHVpbnQzMl90IHNhbXBsZXIsIHVpbnQzMl90IHBuYW1lLCBDb21wbGV0aW9uSGFuZGxlcjx2b2lk
KGZsb2F0KT4mJiBjb21wbGV0aW9uSGFuZGxlcikKICAgICB7CiAgICAgICAgIEdDR0xmbG9hdCBy
ZXR1cm5WYWx1ZSA9IHsgfTsKLSAgICAgICAgYXNzZXJ0SXNDdXJyZW50KG1fc3RyZWFtVGhyZWFk
KTsKKyAgICAgICAgYXNzZXJ0SXNDdXJyZW50KHdvcmtRdWV1ZSgpKTsKICAgICAgICAgcmV0dXJu
VmFsdWUgPSBtX2NvbnRleHQtPmdldFNhbXBsZXJQYXJhbWV0ZXJmKHNhbXBsZXIsIHBuYW1lKTsK
ICAgICAgICAgY29tcGxldGlvbkhhbmRsZXIocmV0dXJuVmFsdWUpOwogICAgIH0KICAgICB2b2lk
IGdldFNhbXBsZXJQYXJhbWV0ZXJpKHVpbnQzMl90IHNhbXBsZXIsIHVpbnQzMl90IHBuYW1lLCBD
b21wbGV0aW9uSGFuZGxlcjx2b2lkKGludDMyX3QpPiYmIGNvbXBsZXRpb25IYW5kbGVyKQogICAg
IHsKICAgICAgICAgR0NHTGludCByZXR1cm5WYWx1ZSA9IHsgfTsKLSAgICAgICAgYXNzZXJ0SXND
dXJyZW50KG1fc3RyZWFtVGhyZWFkKTsKKyAgICAgICAgYXNzZXJ0SXNDdXJyZW50KHdvcmtRdWV1
ZSgpKTsKICAgICAgICAgcmV0dXJuVmFsdWUgPSBtX2NvbnRleHQtPmdldFNhbXBsZXJQYXJhbWV0
ZXJpKHNhbXBsZXIsIHBuYW1lKTsKICAgICAgICAgY29tcGxldGlvbkhhbmRsZXIocmV0dXJuVmFs
dWUpOwogICAgIH0KICAgICB2b2lkIGZlbmNlU3luYyh1aW50MzJfdCBjb25kaXRpb24sIHVpbnQz
Ml90IGZsYWdzLCBDb21wbGV0aW9uSGFuZGxlcjx2b2lkKHVpbnQ2NF90KT4mJiBjb21wbGV0aW9u
SGFuZGxlcikKICAgICB7CiAgICAgICAgIEdDR0xzeW5jIHJldHVyblZhbHVlID0geyB9OwotICAg
ICAgICBhc3NlcnRJc0N1cnJlbnQobV9zdHJlYW1UaHJlYWQpOworICAgICAgICBhc3NlcnRJc0N1
cnJlbnQod29ya1F1ZXVlKCkpOwogICAgICAgICByZXR1cm5WYWx1ZSA9IG1fY29udGV4dC0+ZmVu
Y2VTeW5jKGNvbmRpdGlvbiwgZmxhZ3MpOwogICAgICAgICBjb21wbGV0aW9uSGFuZGxlcihzdGF0
aWNfY2FzdDx1aW50NjRfdD4ocmVpbnRlcnByZXRfY2FzdDxpbnRwdHJfdD4ocmV0dXJuVmFsdWUp
KSk7CiAgICAgfQogICAgIHZvaWQgaXNTeW5jKHVpbnQ2NF90IGFyZzAsIENvbXBsZXRpb25IYW5k
bGVyPHZvaWQoYm9vbCk+JiYgY29tcGxldGlvbkhhbmRsZXIpCiAgICAgewogICAgICAgICBHQ0dM
Ym9vbGVhbiByZXR1cm5WYWx1ZSA9IHsgfTsKLSAgICAgICAgYXNzZXJ0SXNDdXJyZW50KG1fc3Ry
ZWFtVGhyZWFkKTsKKyAgICAgICAgYXNzZXJ0SXNDdXJyZW50KHdvcmtRdWV1ZSgpKTsKICAgICAg
ICAgcmV0dXJuVmFsdWUgPSBtX2NvbnRleHQtPmlzU3luYyhyZWludGVycHJldF9jYXN0PEdDR0xz
eW5jPihzdGF0aWNfY2FzdDxpbnRwdHJfdD4oYXJnMCkpKTsKICAgICAgICAgY29tcGxldGlvbkhh
bmRsZXIoc3RhdGljX2Nhc3Q8Ym9vbD4ocmV0dXJuVmFsdWUpKTsKICAgICB9CiAgICAgdm9pZCBk
ZWxldGVTeW5jKHVpbnQ2NF90IGFyZzApCiAgICAgewotICAgICAgICBhc3NlcnRJc0N1cnJlbnQo
bV9zdHJlYW1UaHJlYWQpOworICAgICAgICBhc3NlcnRJc0N1cnJlbnQod29ya1F1ZXVlKCkpOwog
ICAgICAgICBtX2NvbnRleHQtPmRlbGV0ZVN5bmMocmVpbnRlcnByZXRfY2FzdDxHQ0dMc3luYz4o
c3RhdGljX2Nhc3Q8aW50cHRyX3Q+KGFyZzApKSk7CiAgICAgfQogICAgIHZvaWQgY2xpZW50V2Fp
dFN5bmModWludDY0X3QgYXJnMCwgdWludDMyX3QgZmxhZ3MsIHVpbnQ2NF90IHRpbWVvdXQsIENv
bXBsZXRpb25IYW5kbGVyPHZvaWQodWludDMyX3QpPiYmIGNvbXBsZXRpb25IYW5kbGVyKQogICAg
IHsKICAgICAgICAgR0NHTGVudW0gcmV0dXJuVmFsdWUgPSB7IH07Ci0gICAgICAgIGFzc2VydElz
Q3VycmVudChtX3N0cmVhbVRocmVhZCk7CisgICAgICAgIGFzc2VydElzQ3VycmVudCh3b3JrUXVl
dWUoKSk7CiAgICAgICAgIHJldHVyblZhbHVlID0gbV9jb250ZXh0LT5jbGllbnRXYWl0U3luYyhy
ZWludGVycHJldF9jYXN0PEdDR0xzeW5jPihzdGF0aWNfY2FzdDxpbnRwdHJfdD4oYXJnMCkpLCBm
bGFncywgc3RhdGljX2Nhc3Q8R0NHTHVpbnQ2ND4odGltZW91dCkpOwogICAgICAgICBjb21wbGV0
aW9uSGFuZGxlcihyZXR1cm5WYWx1ZSk7CiAgICAgfQogICAgIHZvaWQgd2FpdFN5bmModWludDY0
X3QgYXJnMCwgdWludDMyX3QgZmxhZ3MsIGludDY0X3QgdGltZW91dCkKICAgICB7Ci0gICAgICAg
IGFzc2VydElzQ3VycmVudChtX3N0cmVhbVRocmVhZCk7CisgICAgICAgIGFzc2VydElzQ3VycmVu
dCh3b3JrUXVldWUoKSk7CiAgICAgICAgIG1fY29udGV4dC0+d2FpdFN5bmMocmVpbnRlcnByZXRf
Y2FzdDxHQ0dMc3luYz4oc3RhdGljX2Nhc3Q8aW50cHRyX3Q+KGFyZzApKSwgZmxhZ3MsIHN0YXRp
Y19jYXN0PEdDR0xpbnQ2ND4odGltZW91dCkpOwogICAgIH0KICAgICB2b2lkIGdldFN5bmNpKHVp
bnQ2NF90IGFyZzAsIHVpbnQzMl90IHBuYW1lLCBDb21wbGV0aW9uSGFuZGxlcjx2b2lkKGludDMy
X3QpPiYmIGNvbXBsZXRpb25IYW5kbGVyKQogICAgIHsKICAgICAgICAgR0NHTGludCByZXR1cm5W
YWx1ZSA9IHsgfTsKLSAgICAgICAgYXNzZXJ0SXNDdXJyZW50KG1fc3RyZWFtVGhyZWFkKTsKKyAg
ICAgICAgYXNzZXJ0SXNDdXJyZW50KHdvcmtRdWV1ZSgpKTsKICAgICAgICAgcmV0dXJuVmFsdWUg
PSBtX2NvbnRleHQtPmdldFN5bmNpKHJlaW50ZXJwcmV0X2Nhc3Q8R0NHTHN5bmM+KHN0YXRpY19j
YXN0PGludHB0cl90PihhcmcwKSksIHBuYW1lKTsKICAgICAgICAgY29tcGxldGlvbkhhbmRsZXIo
cmV0dXJuVmFsdWUpOwogICAgIH0KICAgICB2b2lkIGNyZWF0ZVRyYW5zZm9ybUZlZWRiYWNrKENv
bXBsZXRpb25IYW5kbGVyPHZvaWQodWludDMyX3QpPiYmIGNvbXBsZXRpb25IYW5kbGVyKQogICAg
IHsKICAgICAgICAgUGxhdGZvcm1HTE9iamVjdCByZXR1cm5WYWx1ZSA9IHsgfTsKLSAgICAgICAg
YXNzZXJ0SXNDdXJyZW50KG1fc3RyZWFtVGhyZWFkKTsKKyAgICAgICAgYXNzZXJ0SXNDdXJyZW50
KHdvcmtRdWV1ZSgpKTsKICAgICAgICAgcmV0dXJuVmFsdWUgPSBtX2NvbnRleHQtPmNyZWF0ZVRy
YW5zZm9ybUZlZWRiYWNrKCk7CiAgICAgICAgIGNvbXBsZXRpb25IYW5kbGVyKHJldHVyblZhbHVl
KTsKICAgICB9CiAgICAgdm9pZCBkZWxldGVUcmFuc2Zvcm1GZWVkYmFjayh1aW50MzJfdCBpZCkK
ICAgICB7Ci0gICAgICAgIGFzc2VydElzQ3VycmVudChtX3N0cmVhbVRocmVhZCk7CisgICAgICAg
IGFzc2VydElzQ3VycmVudCh3b3JrUXVldWUoKSk7CiAgICAgICAgIG1fY29udGV4dC0+ZGVsZXRl
VHJhbnNmb3JtRmVlZGJhY2soaWQpOwogICAgIH0KICAgICB2b2lkIGlzVHJhbnNmb3JtRmVlZGJh
Y2sodWludDMyX3QgaWQsIENvbXBsZXRpb25IYW5kbGVyPHZvaWQoYm9vbCk+JiYgY29tcGxldGlv
bkhhbmRsZXIpCiAgICAgewogICAgICAgICBHQ0dMYm9vbGVhbiByZXR1cm5WYWx1ZSA9IHsgfTsK
LSAgICAgICAgYXNzZXJ0SXNDdXJyZW50KG1fc3RyZWFtVGhyZWFkKTsKKyAgICAgICAgYXNzZXJ0
SXNDdXJyZW50KHdvcmtRdWV1ZSgpKTsKICAgICAgICAgcmV0dXJuVmFsdWUgPSBtX2NvbnRleHQt
PmlzVHJhbnNmb3JtRmVlZGJhY2soaWQpOwogICAgICAgICBjb21wbGV0aW9uSGFuZGxlcihzdGF0
aWNfY2FzdDxib29sPihyZXR1cm5WYWx1ZSkpOwogICAgIH0KICAgICB2b2lkIGJpbmRUcmFuc2Zv
cm1GZWVkYmFjayh1aW50MzJfdCB0YXJnZXQsIHVpbnQzMl90IGlkKQogICAgIHsKLSAgICAgICAg
YXNzZXJ0SXNDdXJyZW50KG1fc3RyZWFtVGhyZWFkKTsKKyAgICAgICAgYXNzZXJ0SXNDdXJyZW50
KHdvcmtRdWV1ZSgpKTsKICAgICAgICAgbV9jb250ZXh0LT5iaW5kVHJhbnNmb3JtRmVlZGJhY2so
dGFyZ2V0LCBpZCk7CiAgICAgfQogICAgIHZvaWQgYmVnaW5UcmFuc2Zvcm1GZWVkYmFjayh1aW50
MzJfdCBwcmltaXRpdmVNb2RlKQogICAgIHsKLSAgICAgICAgYXNzZXJ0SXNDdXJyZW50KG1fc3Ry
ZWFtVGhyZWFkKTsKKyAgICAgICAgYXNzZXJ0SXNDdXJyZW50KHdvcmtRdWV1ZSgpKTsKICAgICAg
ICAgbV9jb250ZXh0LT5iZWdpblRyYW5zZm9ybUZlZWRiYWNrKHByaW1pdGl2ZU1vZGUpOwogICAg
IH0KICAgICB2b2lkIGVuZFRyYW5zZm9ybUZlZWRiYWNrKCkKICAgICB7Ci0gICAgICAgIGFzc2Vy
dElzQ3VycmVudChtX3N0cmVhbVRocmVhZCk7CisgICAgICAgIGFzc2VydElzQ3VycmVudCh3b3Jr
UXVldWUoKSk7CiAgICAgICAgIG1fY29udGV4dC0+ZW5kVHJhbnNmb3JtRmVlZGJhY2soKTsKICAg
ICB9CiAgICAgdm9pZCB0cmFuc2Zvcm1GZWVkYmFja1ZhcnlpbmdzKHVpbnQzMl90IHByb2dyYW0s
IFZlY3RvcjxTdHJpbmc+JiYgdmFyeWluZ3MsIHVpbnQzMl90IGJ1ZmZlck1vZGUpCiAgICAgewot
ICAgICAgICBhc3NlcnRJc0N1cnJlbnQobV9zdHJlYW1UaHJlYWQpOworICAgICAgICBhc3NlcnRJ
c0N1cnJlbnQod29ya1F1ZXVlKCkpOwogICAgICAgICBtX2NvbnRleHQtPnRyYW5zZm9ybUZlZWRi
YWNrVmFyeWluZ3MocHJvZ3JhbSwgdmFyeWluZ3MsIGJ1ZmZlck1vZGUpOwogICAgIH0KICAgICB2
b2lkIGdldFRyYW5zZm9ybUZlZWRiYWNrVmFyeWluZyh1aW50MzJfdCBwcm9ncmFtLCB1aW50MzJf
dCBpbmRleCwgQ29tcGxldGlvbkhhbmRsZXI8dm9pZChXZWJDb3JlOjpHcmFwaGljc0NvbnRleHRH
TDo6QWN0aXZlSW5mbyYmKT4mJiBjb21wbGV0aW9uSGFuZGxlcikKICAgICB7CiAgICAgICAgIFdl
YkNvcmU6OkdyYXBoaWNzQ29udGV4dEdMOjpBY3RpdmVJbmZvIGFyZzIgeyB9OwotICAgICAgICBh
c3NlcnRJc0N1cnJlbnQobV9zdHJlYW1UaHJlYWQpOworICAgICAgICBhc3NlcnRJc0N1cnJlbnQo
d29ya1F1ZXVlKCkpOwogICAgICAgICBtX2NvbnRleHQtPmdldFRyYW5zZm9ybUZlZWRiYWNrVmFy
eWluZyhwcm9ncmFtLCBpbmRleCwgYXJnMik7CiAgICAgICAgIGNvbXBsZXRpb25IYW5kbGVyKFdU
Rk1vdmUoYXJnMikpOwogICAgIH0KICAgICB2b2lkIHBhdXNlVHJhbnNmb3JtRmVlZGJhY2soKQog
ICAgIHsKLSAgICAgICAgYXNzZXJ0SXNDdXJyZW50KG1fc3RyZWFtVGhyZWFkKTsKKyAgICAgICAg
YXNzZXJ0SXNDdXJyZW50KHdvcmtRdWV1ZSgpKTsKICAgICAgICAgbV9jb250ZXh0LT5wYXVzZVRy
YW5zZm9ybUZlZWRiYWNrKCk7CiAgICAgfQogICAgIHZvaWQgcmVzdW1lVHJhbnNmb3JtRmVlZGJh
Y2soKQogICAgIHsKLSAgICAgICAgYXNzZXJ0SXNDdXJyZW50KG1fc3RyZWFtVGhyZWFkKTsKKyAg
ICAgICAgYXNzZXJ0SXNDdXJyZW50KHdvcmtRdWV1ZSgpKTsKICAgICAgICAgbV9jb250ZXh0LT5y
ZXN1bWVUcmFuc2Zvcm1GZWVkYmFjaygpOwogICAgIH0KICAgICB2b2lkIGJpbmRCdWZmZXJCYXNl
KHVpbnQzMl90IHRhcmdldCwgdWludDMyX3QgaW5kZXgsIHVpbnQzMl90IGJ1ZmZlcikKICAgICB7
Ci0gICAgICAgIGFzc2VydElzQ3VycmVudChtX3N0cmVhbVRocmVhZCk7CisgICAgICAgIGFzc2Vy
dElzQ3VycmVudCh3b3JrUXVldWUoKSk7CiAgICAgICAgIG1fY29udGV4dC0+YmluZEJ1ZmZlckJh
c2UodGFyZ2V0LCBpbmRleCwgYnVmZmVyKTsKICAgICB9CiAgICAgdm9pZCBiaW5kQnVmZmVyUmFu
Z2UodWludDMyX3QgdGFyZ2V0LCB1aW50MzJfdCBpbmRleCwgdWludDMyX3QgYnVmZmVyLCB1aW50
NjRfdCBvZmZzZXQsIHVpbnQ2NF90IGFyZzQpCiAgICAgewotICAgICAgICBhc3NlcnRJc0N1cnJl
bnQobV9zdHJlYW1UaHJlYWQpOworICAgICAgICBhc3NlcnRJc0N1cnJlbnQod29ya1F1ZXVlKCkp
OwogICAgICAgICBtX2NvbnRleHQtPmJpbmRCdWZmZXJSYW5nZSh0YXJnZXQsIGluZGV4LCBidWZm
ZXIsIHN0YXRpY19jYXN0PEdDR0xpbnRwdHI+KG9mZnNldCksIHN0YXRpY19jYXN0PEdDR0xzaXpl
aXB0cj4oYXJnNCkpOwogICAgIH0KICAgICB2b2lkIGdldFVuaWZvcm1JbmRpY2VzKHVpbnQzMl90
IHByb2dyYW0sIFZlY3RvcjxTdHJpbmc+JiYgdW5pZm9ybU5hbWVzLCBDb21wbGV0aW9uSGFuZGxl
cjx2b2lkKFZlY3Rvcjx1aW50MzJfdD4mJik+JiYgY29tcGxldGlvbkhhbmRsZXIpCiAgICAgewog
ICAgICAgICBWZWN0b3I8R0NHTHVpbnQ+IHJldHVyblZhbHVlID0geyB9OwotICAgICAgICBhc3Nl
cnRJc0N1cnJlbnQobV9zdHJlYW1UaHJlYWQpOworICAgICAgICBhc3NlcnRJc0N1cnJlbnQod29y
a1F1ZXVlKCkpOwogICAgICAgICByZXR1cm5WYWx1ZSA9IG1fY29udGV4dC0+Z2V0VW5pZm9ybUlu
ZGljZXMocHJvZ3JhbSwgdW5pZm9ybU5hbWVzKTsKICAgICAgICAgY29tcGxldGlvbkhhbmRsZXIo
V1RGTW92ZShyZXR1cm5WYWx1ZSkpOwogICAgIH0KICAgICB2b2lkIGdldEFjdGl2ZVVuaWZvcm1z
KHVpbnQzMl90IHByb2dyYW0sIFZlY3Rvcjx1aW50MzJfdD4mJiB1bmlmb3JtSW5kaWNlcywgdWlu
dDMyX3QgcG5hbWUsIENvbXBsZXRpb25IYW5kbGVyPHZvaWQoVmVjdG9yPGludDMyX3Q+JiYpPiYm
IGNvbXBsZXRpb25IYW5kbGVyKQogICAgIHsKICAgICAgICAgVmVjdG9yPEdDR0xpbnQ+IHJldHVy
blZhbHVlID0geyB9OwotICAgICAgICBhc3NlcnRJc0N1cnJlbnQobV9zdHJlYW1UaHJlYWQpOwor
ICAgICAgICBhc3NlcnRJc0N1cnJlbnQod29ya1F1ZXVlKCkpOwogICAgICAgICByZXR1cm5WYWx1
ZSA9IG1fY29udGV4dC0+Z2V0QWN0aXZlVW5pZm9ybXMocHJvZ3JhbSwgdW5pZm9ybUluZGljZXMs
IHBuYW1lKTsKICAgICAgICAgY29tcGxldGlvbkhhbmRsZXIoV1RGTW92ZShyZXR1cm5WYWx1ZSkp
OwogICAgIH0KICAgICB2b2lkIGdldFVuaWZvcm1CbG9ja0luZGV4KHVpbnQzMl90IHByb2dyYW0s
IFN0cmluZyYmIHVuaWZvcm1CbG9ja05hbWUsIENvbXBsZXRpb25IYW5kbGVyPHZvaWQodWludDMy
X3QpPiYmIGNvbXBsZXRpb25IYW5kbGVyKQogICAgIHsKICAgICAgICAgR0NHTHVpbnQgcmV0dXJu
VmFsdWUgPSB7IH07Ci0gICAgICAgIGFzc2VydElzQ3VycmVudChtX3N0cmVhbVRocmVhZCk7Cisg
ICAgICAgIGFzc2VydElzQ3VycmVudCh3b3JrUXVldWUoKSk7CiAgICAgICAgIHJldHVyblZhbHVl
ID0gbV9jb250ZXh0LT5nZXRVbmlmb3JtQmxvY2tJbmRleChwcm9ncmFtLCB1bmlmb3JtQmxvY2tO
YW1lKTsKICAgICAgICAgY29tcGxldGlvbkhhbmRsZXIocmV0dXJuVmFsdWUpOwogICAgIH0KICAg
ICB2b2lkIGdldEFjdGl2ZVVuaWZvcm1CbG9ja05hbWUodWludDMyX3QgcHJvZ3JhbSwgdWludDMy
X3QgdW5pZm9ybUJsb2NrSW5kZXgsIENvbXBsZXRpb25IYW5kbGVyPHZvaWQoU3RyaW5nJiYpPiYm
IGNvbXBsZXRpb25IYW5kbGVyKQogICAgIHsKICAgICAgICAgU3RyaW5nIHJldHVyblZhbHVlID0g
eyB9OwotICAgICAgICBhc3NlcnRJc0N1cnJlbnQobV9zdHJlYW1UaHJlYWQpOworICAgICAgICBh
c3NlcnRJc0N1cnJlbnQod29ya1F1ZXVlKCkpOwogICAgICAgICByZXR1cm5WYWx1ZSA9IG1fY29u
dGV4dC0+Z2V0QWN0aXZlVW5pZm9ybUJsb2NrTmFtZShwcm9ncmFtLCB1bmlmb3JtQmxvY2tJbmRl
eCk7CiAgICAgICAgIGNvbXBsZXRpb25IYW5kbGVyKFdURk1vdmUocmV0dXJuVmFsdWUpKTsKICAg
ICB9CiAgICAgdm9pZCB1bmlmb3JtQmxvY2tCaW5kaW5nKHVpbnQzMl90IHByb2dyYW0sIHVpbnQz
Ml90IHVuaWZvcm1CbG9ja0luZGV4LCB1aW50MzJfdCB1bmlmb3JtQmxvY2tCaW5kaW5nKQogICAg
IHsKLSAgICAgICAgYXNzZXJ0SXNDdXJyZW50KG1fc3RyZWFtVGhyZWFkKTsKKyAgICAgICAgYXNz
ZXJ0SXNDdXJyZW50KHdvcmtRdWV1ZSgpKTsKICAgICAgICAgbV9jb250ZXh0LT51bmlmb3JtQmxv
Y2tCaW5kaW5nKHByb2dyYW0sIHVuaWZvcm1CbG9ja0luZGV4LCB1bmlmb3JtQmxvY2tCaW5kaW5n
KTsKICAgICB9CiAgICAgdm9pZCBnZXRBY3RpdmVVbmlmb3JtQmxvY2tpdih1aW50MzJfdCBwcm9n
cmFtLCB1aW50MzJfdCB1bmlmb3JtQmxvY2tJbmRleCwgdWludDMyX3QgcG5hbWUsIHVpbnQ2NF90
IHBhcmFtc1NpemUsIENvbXBsZXRpb25IYW5kbGVyPHZvaWQoSVBDOjpBcnJheVJlZmVyZW5jZTxp
bnQzMl90Pik+JiYgY29tcGxldGlvbkhhbmRsZXIpCiAgICAgewogICAgICAgICBWZWN0b3I8R0NH
TGludCwgND4gcGFyYW1zKHN0YXRpY19jYXN0PHNpemVfdD4ocGFyYW1zU2l6ZSksIDApOwotICAg
ICAgICBhc3NlcnRJc0N1cnJlbnQobV9zdHJlYW1UaHJlYWQpOworICAgICAgICBhc3NlcnRJc0N1
cnJlbnQod29ya1F1ZXVlKCkpOwogICAgICAgICBtX2NvbnRleHQtPmdldEFjdGl2ZVVuaWZvcm1C
bG9ja2l2KHByb2dyYW0sIHVuaWZvcm1CbG9ja0luZGV4LCBwbmFtZSwgcGFyYW1zKTsKICAgICAg
ICAgY29tcGxldGlvbkhhbmRsZXIoSVBDOjpBcnJheVJlZmVyZW5jZTxpbnQzMl90PihyZWludGVy
cHJldF9jYXN0PGludDMyX3QqPihwYXJhbXMuZGF0YSgpKSwgcGFyYW1zLnNpemUoKSkpOwogICAg
IH0KICAgICB2b2lkIGdldEdyYXBoaWNzUmVzZXRTdGF0dXNBUkIoQ29tcGxldGlvbkhhbmRsZXI8
dm9pZChpbnQzMl90KT4mJiBjb21wbGV0aW9uSGFuZGxlcikKICAgICB7CiAgICAgICAgIEdDR0xp
bnQgcmV0dXJuVmFsdWUgPSB7IH07Ci0gICAgICAgIGFzc2VydElzQ3VycmVudChtX3N0cmVhbVRo
cmVhZCk7CisgICAgICAgIGFzc2VydElzQ3VycmVudCh3b3JrUXVldWUoKSk7CiAgICAgICAgIHJl
dHVyblZhbHVlID0gbV9jb250ZXh0LT5nZXRHcmFwaGljc1Jlc2V0U3RhdHVzQVJCKCk7CiAgICAg
ICAgIGNvbXBsZXRpb25IYW5kbGVyKHJldHVyblZhbHVlKTsKICAgICB9CiAgICAgdm9pZCBnZXRU
cmFuc2xhdGVkU2hhZGVyU291cmNlQU5HTEUodWludDMyX3QgYXJnMCwgQ29tcGxldGlvbkhhbmRs
ZXI8dm9pZChTdHJpbmcmJik+JiYgY29tcGxldGlvbkhhbmRsZXIpCiAgICAgewogICAgICAgICBT
dHJpbmcgcmV0dXJuVmFsdWUgPSB7IH07Ci0gICAgICAgIGFzc2VydElzQ3VycmVudChtX3N0cmVh
bVRocmVhZCk7CisgICAgICAgIGFzc2VydElzQ3VycmVudCh3b3JrUXVldWUoKSk7CiAgICAgICAg
IHJldHVyblZhbHVlID0gbV9jb250ZXh0LT5nZXRUcmFuc2xhdGVkU2hhZGVyU291cmNlQU5HTEUo
YXJnMCk7CiAgICAgICAgIGNvbXBsZXRpb25IYW5kbGVyKFdURk1vdmUocmV0dXJuVmFsdWUpKTsK
ICAgICB9CiAgICAgdm9pZCBkcmF3QnVmZmVyc0VYVChJUEM6OkFycmF5UmVmZXJlbmNlPHVpbnQz
Ml90PiYmIGJ1ZnMpCiAgICAgewotICAgICAgICBhc3NlcnRJc0N1cnJlbnQobV9zdHJlYW1UaHJl
YWQpOworICAgICAgICBhc3NlcnRJc0N1cnJlbnQod29ya1F1ZXVlKCkpOwogICAgICAgICBtX2Nv
bnRleHQtPmRyYXdCdWZmZXJzRVhUKG1ha2VHQ0dMU3BhbihyZWludGVycHJldF9jYXN0PGNvbnN0
IEdDR0xlbnVtKj4oYnVmcy5kYXRhKCkpLCBidWZzLnNpemUoKSkpOwogICAgIH0KICAgICB2b2lk
IGdldEludGVybmFsZm9ybWF0aXYodWludDMyX3QgdGFyZ2V0LCB1aW50MzJfdCBpbnRlcm5hbGZv
cm1hdCwgdWludDMyX3QgcG5hbWUsIHVpbnQ2NF90IHBhcmFtc1NpemUsIENvbXBsZXRpb25IYW5k
bGVyPHZvaWQoSVBDOjpBcnJheVJlZmVyZW5jZTxpbnQzMl90Pik+JiYgY29tcGxldGlvbkhhbmRs
ZXIpCiAgICAgewogICAgICAgICBWZWN0b3I8R0NHTGludCwgND4gcGFyYW1zKHN0YXRpY19jYXN0
PHNpemVfdD4ocGFyYW1zU2l6ZSksIDApOwotICAgICAgICBhc3NlcnRJc0N1cnJlbnQobV9zdHJl
YW1UaHJlYWQpOworICAgICAgICBhc3NlcnRJc0N1cnJlbnQod29ya1F1ZXVlKCkpOwogICAgICAg
ICBtX2NvbnRleHQtPmdldEludGVybmFsZm9ybWF0aXYodGFyZ2V0LCBpbnRlcm5hbGZvcm1hdCwg
cG5hbWUsIHBhcmFtcyk7CiAgICAgICAgIGNvbXBsZXRpb25IYW5kbGVyKElQQzo6QXJyYXlSZWZl
cmVuY2U8aW50MzJfdD4ocmVpbnRlcnByZXRfY2FzdDxpbnQzMl90Kj4ocGFyYW1zLmRhdGEoKSks
IHBhcmFtcy5zaXplKCkpKTsKICAgICB9CiAgICAgdm9pZCBtdWx0aURyYXdBcnJheXNBTkdMRSh1
aW50MzJfdCBtb2RlLCBJUEM6OkFycmF5UmVmZXJlbmNlPGludDMyX3Q+JiYgZmlyc3RzLCBJUEM6
OkFycmF5UmVmZXJlbmNlPGludDMyX3Q+JiYgY291bnRzLCBpbnQzMl90IGRyYXdjb3VudCkKICAg
ICB7Ci0gICAgICAgIGFzc2VydElzQ3VycmVudChtX3N0cmVhbVRocmVhZCk7CisgICAgICAgIGFz
c2VydElzQ3VycmVudCh3b3JrUXVldWUoKSk7CiAgICAgICAgIG1fY29udGV4dC0+bXVsdGlEcmF3
QXJyYXlzQU5HTEUobW9kZSwgbWFrZUdDR0xTcGFuKHJlaW50ZXJwcmV0X2Nhc3Q8Y29uc3QgR0NH
TGludCo+KGZpcnN0cy5kYXRhKCkpLCBmaXJzdHMuc2l6ZSgpKSwgbWFrZUdDR0xTcGFuKHJlaW50
ZXJwcmV0X2Nhc3Q8Y29uc3QgR0NHTHNpemVpKj4oY291bnRzLmRhdGEoKSksIGNvdW50cy5zaXpl
KCkpLCBkcmF3Y291bnQpOwogICAgIH0KICAgICB2b2lkIG11bHRpRHJhd0FycmF5c0luc3RhbmNl
ZEFOR0xFKHVpbnQzMl90IG1vZGUsIElQQzo6QXJyYXlSZWZlcmVuY2U8aW50MzJfdD4mJiBmaXJz
dHMsIElQQzo6QXJyYXlSZWZlcmVuY2U8aW50MzJfdD4mJiBjb3VudHMsIElQQzo6QXJyYXlSZWZl
cmVuY2U8aW50MzJfdD4mJiBpbnN0YW5jZUNvdW50cywgaW50MzJfdCBkcmF3Y291bnQpCiAgICAg
ewotICAgICAgICBhc3NlcnRJc0N1cnJlbnQobV9zdHJlYW1UaHJlYWQpOworICAgICAgICBhc3Nl
cnRJc0N1cnJlbnQod29ya1F1ZXVlKCkpOwogICAgICAgICBtX2NvbnRleHQtPm11bHRpRHJhd0Fy
cmF5c0luc3RhbmNlZEFOR0xFKG1vZGUsIG1ha2VHQ0dMU3BhbihyZWludGVycHJldF9jYXN0PGNv
bnN0IEdDR0xpbnQqPihmaXJzdHMuZGF0YSgpKSwgZmlyc3RzLnNpemUoKSksIG1ha2VHQ0dMU3Bh
bihyZWludGVycHJldF9jYXN0PGNvbnN0IEdDR0xzaXplaSo+KGNvdW50cy5kYXRhKCkpLCBjb3Vu
dHMuc2l6ZSgpKSwgbWFrZUdDR0xTcGFuKHJlaW50ZXJwcmV0X2Nhc3Q8Y29uc3QgR0NHTHNpemVp
Kj4oaW5zdGFuY2VDb3VudHMuZGF0YSgpKSwgaW5zdGFuY2VDb3VudHMuc2l6ZSgpKSwgZHJhd2Nv
dW50KTsKICAgICB9CiAgICAgdm9pZCBtdWx0aURyYXdFbGVtZW50c0FOR0xFKHVpbnQzMl90IG1v
ZGUsIElQQzo6QXJyYXlSZWZlcmVuY2U8aW50MzJfdD4mJiBjb3VudHMsIHVpbnQzMl90IHR5cGUs
IElQQzo6QXJyYXlSZWZlcmVuY2U8aW50MzJfdD4mJiBvZmZzZXRzLCBpbnQzMl90IGRyYXdjb3Vu
dCkKICAgICB7Ci0gICAgICAgIGFzc2VydElzQ3VycmVudChtX3N0cmVhbVRocmVhZCk7CisgICAg
ICAgIGFzc2VydElzQ3VycmVudCh3b3JrUXVldWUoKSk7CiAgICAgICAgIG1fY29udGV4dC0+bXVs
dGlEcmF3RWxlbWVudHNBTkdMRShtb2RlLCBtYWtlR0NHTFNwYW4ocmVpbnRlcnByZXRfY2FzdDxj
b25zdCBHQ0dMc2l6ZWkqPihjb3VudHMuZGF0YSgpKSwgY291bnRzLnNpemUoKSksIHR5cGUsIG1h
a2VHQ0dMU3BhbihyZWludGVycHJldF9jYXN0PGNvbnN0IEdDR0xpbnQqPihvZmZzZXRzLmRhdGEo
KSksIG9mZnNldHMuc2l6ZSgpKSwgZHJhd2NvdW50KTsKICAgICB9CiAgICAgdm9pZCBtdWx0aURy
YXdFbGVtZW50c0luc3RhbmNlZEFOR0xFKHVpbnQzMl90IG1vZGUsIElQQzo6QXJyYXlSZWZlcmVu
Y2U8aW50MzJfdD4mJiBjb3VudHMsIHVpbnQzMl90IHR5cGUsIElQQzo6QXJyYXlSZWZlcmVuY2U8
aW50MzJfdD4mJiBvZmZzZXRzLCBJUEM6OkFycmF5UmVmZXJlbmNlPGludDMyX3Q+JiYgaW5zdGFu
Y2VDb3VudHMsIGludDMyX3QgZHJhd2NvdW50KQogICAgIHsKLSAgICAgICAgYXNzZXJ0SXNDdXJy
ZW50KG1fc3RyZWFtVGhyZWFkKTsKKyAgICAgICAgYXNzZXJ0SXNDdXJyZW50KHdvcmtRdWV1ZSgp
KTsKICAgICAgICAgbV9jb250ZXh0LT5tdWx0aURyYXdFbGVtZW50c0luc3RhbmNlZEFOR0xFKG1v
ZGUsIG1ha2VHQ0dMU3BhbihyZWludGVycHJldF9jYXN0PGNvbnN0IEdDR0xzaXplaSo+KGNvdW50
cy5kYXRhKCkpLCBjb3VudHMuc2l6ZSgpKSwgdHlwZSwgbWFrZUdDR0xTcGFuKHJlaW50ZXJwcmV0
X2Nhc3Q8Y29uc3QgR0NHTGludCo+KG9mZnNldHMuZGF0YSgpKSwgb2Zmc2V0cy5zaXplKCkpLCBt
YWtlR0NHTFNwYW4ocmVpbnRlcnByZXRfY2FzdDxjb25zdCBHQ0dMc2l6ZWkqPihpbnN0YW5jZUNv
dW50cy5kYXRhKCkpLCBpbnN0YW5jZUNvdW50cy5zaXplKCkpLCBkcmF3Y291bnQpOwogICAgIH0K
ICAgICB2b2lkIHBhaW50UmVuZGVyaW5nUmVzdWx0c1RvUGl4ZWxCdWZmZXIoQ29tcGxldGlvbkhh
bmRsZXI8dm9pZChzdGQ6Om9wdGlvbmFsPFdlYkNvcmU6OlBpeGVsQnVmZmVyPiYmKT4mJiBjb21w
bGV0aW9uSGFuZGxlcikKICAgICB7CiAgICAgICAgIHN0ZDo6b3B0aW9uYWw8V2ViQ29yZTo6UGl4
ZWxCdWZmZXI+IHJldHVyblZhbHVlID0geyB9OwotICAgICAgICBhc3NlcnRJc0N1cnJlbnQobV9z
dHJlYW1UaHJlYWQpOworICAgICAgICBhc3NlcnRJc0N1cnJlbnQod29ya1F1ZXVlKCkpOwogICAg
ICAgICByZXR1cm5WYWx1ZSA9IG1fY29udGV4dC0+cGFpbnRSZW5kZXJpbmdSZXN1bHRzVG9QaXhl
bEJ1ZmZlcigpOwogICAgICAgICBjb21wbGV0aW9uSGFuZGxlcihXVEZNb3ZlKHJldHVyblZhbHVl
KSk7CiAgICAgfQpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYktpdC9HUFVQcm9jZXNzL2dyYXBoaWNz
L1dlYkdQVS9SZW1vdGVHUFUuY3BwIGIvU291cmNlL1dlYktpdC9HUFVQcm9jZXNzL2dyYXBoaWNz
L1dlYkdQVS9SZW1vdGVHUFUuY3BwCmluZGV4IDRkY2FlOGQwOWU4YTg5ZTUzYzNjN2M2ZGI5NDI5
ODdkNjAwZGUzNzkuLjJjOWEwZjk1NWQ5ODA4OWE3NzVmZWQyOGEwZjNkYWFkZDgzZGI0YmYgMTAw
NjQ0Ci0tLSBhL1NvdXJjZS9XZWJLaXQvR1BVUHJvY2Vzcy9ncmFwaGljcy9XZWJHUFUvUmVtb3Rl
R1BVLmNwcAorKysgYi9Tb3VyY2UvV2ViS2l0L0dQVVByb2Nlc3MvZ3JhcGhpY3MvV2ViR1BVL1Jl
bW90ZUdQVS5jcHAKQEAgLTQ3LDcgKzQ3LDcgQEAgbmFtZXNwYWNlIFdlYktpdCB7CiBSZW1vdGVH
UFU6OlJlbW90ZUdQVShXZWJHUFVJZGVudGlmaWVyIGlkZW50aWZpZXIsIEdQVUNvbm5lY3Rpb25U
b1dlYlByb2Nlc3MmIGdwdUNvbm5lY3Rpb25Ub1dlYlByb2Nlc3MsIFJlbW90ZVJlbmRlcmluZ0Jh
Y2tlbmQmIHJlbmRlcmluZ0JhY2tlbmQsIElQQzo6U3RyZWFtQ29ubmVjdGlvbkJ1ZmZlciYmIHN0
cmVhbSkKICAgICA6IG1fZ3B1Q29ubmVjdGlvblRvV2ViUHJvY2VzcyhncHVDb25uZWN0aW9uVG9X
ZWJQcm9jZXNzKQogICAgICwgbV93b3JrUXVldWUoSVBDOjpTdHJlYW1Db25uZWN0aW9uV29ya1F1
ZXVlOjpjcmVhdGUoIldlYkdQVSB3b3JrIHF1ZXVlIikpCi0gICAgLCBtX3N0cmVhbUNvbm5lY3Rp
b24oSVBDOjpTdHJlYW1TZXJ2ZXJDb25uZWN0aW9uOjpjcmVhdGUoZ3B1Q29ubmVjdGlvblRvV2Vi
UHJvY2Vzcy5jb25uZWN0aW9uKCksIFdURk1vdmUoc3RyZWFtKSwgbV93b3JrUXVldWUpKQorICAg
ICwgbV9zdHJlYW1Db25uZWN0aW9uKElQQzo6U3RyZWFtU2VydmVyQ29ubmVjdGlvbjo6Y3JlYXRl
KGdwdUNvbm5lY3Rpb25Ub1dlYlByb2Nlc3MuY29ubmVjdGlvbigpLCBXVEZNb3ZlKHN0cmVhbSks
IHdvcmtRdWV1ZSgpKSkKICAgICAsIG1fb2JqZWN0SGVhcChXZWJHUFU6Ok9iamVjdEhlYXA6OmNy
ZWF0ZSgpKQogICAgICwgbV9pZGVudGlmaWVyKGlkZW50aWZpZXIpCiAgICAgLCBtX3JlbmRlcmlu
Z0JhY2tlbmQocmVuZGVyaW5nQmFja2VuZCkKQEAgLTYwLDcgKzYwLDcgQEAgUmVtb3RlR1BVOjp+
UmVtb3RlR1BVKCkgPSBkZWZhdWx0Owogdm9pZCBSZW1vdGVHUFU6OmluaXRpYWxpemUoKQogewog
ICAgIGFzc2VydElzTWFpblJ1bkxvb3AoKTsKLSAgICBtX3dvcmtRdWV1ZS0+ZGlzcGF0Y2goW3By
b3RlY3RlZFRoaXMgPSBSZWYgeyAqdGhpcyB9XSgpIG11dGFibGUgeworICAgIHdvcmtRdWV1ZSgp
LmRpc3BhdGNoKFtwcm90ZWN0ZWRUaGlzID0gUmVmIHsgKnRoaXMgfV0oKSBtdXRhYmxlIHsKICAg
ICAgICAgcHJvdGVjdGVkVGhpcy0+d29ya1F1ZXVlSW5pdGlhbGl6ZSgpOwogICAgIH0pOwogICAg
IG1fc3RyZWFtQ29ubmVjdGlvbi0+c3RhcnRSZWNlaXZpbmdNZXNzYWdlcygqdGhpcywgTWVzc2Fn
ZXM6OlJlbW90ZUdQVTo6bWVzc2FnZVJlY2VpdmVyTmFtZSgpLCBtX2lkZW50aWZpZXIudG9VSW50
NjQoKSk7CkBAIC03MCwxNSArNzAsMTQgQEAgdm9pZCBSZW1vdGVHUFU6OnN0b3BMaXN0ZW5pbmdG
b3JJUEMoUmVmPFJlbW90ZUdQVT4mJiByZWZGcm9tQ29ubmVjdGlvbikKIHsKICAgICBhc3NlcnRJ
c01haW5SdW5Mb29wKCk7CiAgICAgbV9zdHJlYW1Db25uZWN0aW9uLT5zdG9wUmVjZWl2aW5nTWVz
c2FnZXMoTWVzc2FnZXM6OlJlbW90ZUdQVTo6bWVzc2FnZVJlY2VpdmVyTmFtZSgpLCBtX2lkZW50
aWZpZXIudG9VSW50NjQoKSk7Ci0gICAgbV93b3JrUXVldWUtPmRpc3BhdGNoKFtwcm90ZWN0ZWRU
aGlzID0gV1RGTW92ZShyZWZGcm9tQ29ubmVjdGlvbildKCkgeworICAgIHdvcmtRdWV1ZSgpLmRp
c3BhdGNoKFtwcm90ZWN0ZWRUaGlzID0gV1RGTW92ZShyZWZGcm9tQ29ubmVjdGlvbildKCkgewog
ICAgICAgICBwcm90ZWN0ZWRUaGlzLT53b3JrUXVldWVVbmluaXRpYWxpemUoKTsKICAgICB9KTsK
IH0KIAogdm9pZCBSZW1vdGVHUFU6OndvcmtRdWV1ZUluaXRpYWxpemUoKQogewotICAgIG1fc3Ry
ZWFtVGhyZWFkLnJlc2V0KCk7Ci0gICAgYXNzZXJ0SXNDdXJyZW50KG1fc3RyZWFtVGhyZWFkKTsK
KyAgICBhc3NlcnRJc0N1cnJlbnQod29ya1F1ZXVlKCkpOwogI2lmIEhBVkUoV0VCR1BVX0lNUExF
TUVOVEFUSU9OKQogICAgIGF1dG8gYmFja2luZyA9IFBBTDo6V2ViR1BVOjpHUFVJbXBsOjpjcmVh
dGUoKTsKICNlbHNlCkBAIC04NiwyMSArODUsMjEgQEAgdm9pZCBSZW1vdGVHUFU6OndvcmtRdWV1
ZUluaXRpYWxpemUoKQogI2VuZGlmCiAgICAgaWYgKGJhY2tpbmcpIHsKICAgICAgICAgbV9iYWNr
aW5nID0gYmFja2luZy5yZWxlYXNlTm9uTnVsbCgpOwotICAgICAgICBzZW5kKE1lc3NhZ2VzOjpS
ZW1vdGVHUFVQcm94eTo6V2FzQ3JlYXRlZCh0cnVlLCBtX3dvcmtRdWV1ZS0+d2FrZVVwU2VtYXBo
b3JlKCkpKTsKKyAgICAgICAgc2VuZChNZXNzYWdlczo6UmVtb3RlR1BVUHJveHk6Oldhc0NyZWF0
ZWQodHJ1ZSwgd29ya1F1ZXVlKCkud2FrZVVwU2VtYXBob3JlKCkpKTsKICAgICB9IGVsc2UKLSAg
ICAgICAgc2VuZChNZXNzYWdlczo6UmVtb3RlR1BVUHJveHk6Oldhc0NyZWF0ZWQoZmFsc2UsIG1f
d29ya1F1ZXVlLT53YWtlVXBTZW1hcGhvcmUoKSkpOworICAgICAgICBzZW5kKE1lc3NhZ2VzOjpS
ZW1vdGVHUFVQcm94eTo6V2FzQ3JlYXRlZChmYWxzZSwgd29ya1F1ZXVlKCkud2FrZVVwU2VtYXBo
b3JlKCkpKTsKIH0KIAogdm9pZCBSZW1vdGVHUFU6OndvcmtRdWV1ZVVuaW5pdGlhbGl6ZSgpCiB7
Ci0gICAgYXNzZXJ0SXNDdXJyZW50KG1fc3RyZWFtVGhyZWFkKTsKKyAgICBhc3NlcnRJc0N1cnJl
bnQod29ya1F1ZXVlKCkpOwogICAgIG1fc3RyZWFtQ29ubmVjdGlvbiA9IG51bGxwdHI7CiAgICAg
bV9vYmplY3RIZWFwLT5jbGVhcigpOwogfQogCiB2b2lkIFJlbW90ZUdQVTo6cmVxdWVzdEFkYXB0
ZXIoY29uc3QgV2ViR1BVOjpSZXF1ZXN0QWRhcHRlck9wdGlvbnMmIG9wdGlvbnMsIFdlYkdQVUlk
ZW50aWZpZXIgaWRlbnRpZmllciwgV1RGOjpDb21wbGV0aW9uSGFuZGxlcjx2b2lkKHN0ZDo6b3B0
aW9uYWw8UmVxdWVzdEFkYXB0ZXJSZXNwb25zZT4mJik+JiYgY2FsbGJhY2spCiB7Ci0gICAgYXNz
ZXJ0SXNDdXJyZW50KG1fc3RyZWFtVGhyZWFkKTsKKyAgICBhc3NlcnRJc0N1cnJlbnQod29ya1F1
ZXVlKCkpOwogICAgIEFTU0VSVChtX2JhY2tpbmcpOwogCiAgICAgYXV0byBjb252ZXJ0ZWRPcHRp
b25zID0gbV9vYmplY3RIZWFwLT5jb252ZXJ0RnJvbUJhY2tpbmcob3B0aW9ucyk7CmRpZmYgLS1n
aXQgYS9Tb3VyY2UvV2ViS2l0L0dQVVByb2Nlc3MvZ3JhcGhpY3MvV2ViR1BVL1JlbW90ZUdQVS5o
IGIvU291cmNlL1dlYktpdC9HUFVQcm9jZXNzL2dyYXBoaWNzL1dlYkdQVS9SZW1vdGVHUFUuaApp
bmRleCBjMDIxMmYwMTUwYzQ0NTUyMzUyY2UwYTNjNGNmNmZiZGQwMmE0YmExLi5hMTUxNDgzNTI5
ZTJjNGNkM2U5OGJkMmZjMjZkNTZjOThhNGNkOTBkIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViS2l0
L0dQVVByb2Nlc3MvZ3JhcGhpY3MvV2ViR1BVL1JlbW90ZUdQVS5oCisrKyBiL1NvdXJjZS9XZWJL
aXQvR1BVUHJvY2Vzcy9ncmFwaGljcy9XZWJHUFUvUmVtb3RlR1BVLmgKQEAgLTEyMiw2ICsxMjIs
NyBAQCBwcml2YXRlOgogICAgIFJlbW90ZUdQVSYgb3BlcmF0b3I9KFJlbW90ZUdQVSYmKSA9IGRl
bGV0ZTsKIAogICAgIHZvaWQgaW5pdGlhbGl6ZSgpOworICAgIElQQzo6U3RyZWFtQ29ubmVjdGlv
bldvcmtRdWV1ZSYgd29ya1F1ZXVlKCkgY29uc3QgeyByZXR1cm4gbV93b3JrUXVldWU7IH0KICAg
ICB2b2lkIHdvcmtRdWV1ZUluaXRpYWxpemUoKTsKICAgICB2b2lkIHdvcmtRdWV1ZVVuaW5pdGlh
bGl6ZSgpOwogCkBAIC0xMzgsMTEgKzEzOSwxMCBAQCBwcml2YXRlOgogICAgIFdlYWtQdHI8R1BV
Q29ubmVjdGlvblRvV2ViUHJvY2Vzcz4gbV9ncHVDb25uZWN0aW9uVG9XZWJQcm9jZXNzOwogICAg
IFJlZjxJUEM6OlN0cmVhbUNvbm5lY3Rpb25Xb3JrUXVldWU+IG1fd29ya1F1ZXVlOwogICAgIFJl
ZlB0cjxJUEM6OlN0cmVhbVNlcnZlckNvbm5lY3Rpb24+IG1fc3RyZWFtQ29ubmVjdGlvbjsKLSAg
ICBSZWZQdHI8UEFMOjpXZWJHUFU6OkdQVT4gbV9iYWNraW5nIFdURl9HVUFSREVEX0JZX0NBUEFC
SUxJVFkobV9zdHJlYW1UaHJlYWQpOwotICAgIFJlZjxXZWJHUFU6Ok9iamVjdEhlYXA+IG1fb2Jq
ZWN0SGVhcCBXVEZfR1VBUkRFRF9CWV9DQVBBQklMSVRZKG1fc3RyZWFtVGhyZWFkKTsKKyAgICBS
ZWZQdHI8UEFMOjpXZWJHUFU6OkdQVT4gbV9iYWNraW5nIFdURl9HVUFSREVEX0JZX0NBUEFCSUxJ
VFkod29ya1F1ZXVlKCkpOworICAgIFJlZjxXZWJHUFU6Ok9iamVjdEhlYXA+IG1fb2JqZWN0SGVh
cCBXVEZfR1VBUkRFRF9CWV9DQVBBQklMSVRZKHdvcmtRdWV1ZSgpKTsKICAgICBjb25zdCBXZWJH
UFVJZGVudGlmaWVyIG1faWRlbnRpZmllcjsKICAgICBSZWY8UmVtb3RlUmVuZGVyaW5nQmFja2Vu
ZD4gbV9yZW5kZXJpbmdCYWNrZW5kOwotICAgIE5PX1VOSVFVRV9BRERSRVNTIFRocmVhZEFzc2Vy
dGlvbiBtX3N0cmVhbVRocmVhZDsKICAgICBjb25zdCBXZWJDb3JlOjpQcm9jZXNzSWRlbnRpZmll
ciBtX3dlYlByb2Nlc3NJZGVudGlmaWVyOwogfTsKIApkaWZmIC0tZ2l0IGEvU291cmNlL1dlYktp
dC9HUFVQcm9jZXNzL21lZGlhL1JlbW90ZVZpZGVvRnJhbWVPYmplY3RIZWFwLmNwcCBiL1NvdXJj
ZS9XZWJLaXQvR1BVUHJvY2Vzcy9tZWRpYS9SZW1vdGVWaWRlb0ZyYW1lT2JqZWN0SGVhcC5jcHAK
aW5kZXggNTI5YzI3MmVmNDcxNDQ5NDYzYzExOGYyZDU3MDcyNzcxYjM4ZTJhNS4uYWNhNTY1NTNk
YWE2NDgzY2NhMWFkMDEzZGQwZTJjMzE0YzI3ZDg5YSAxMDA2NDQKLS0tIGEvU291cmNlL1dlYktp
dC9HUFVQcm9jZXNzL21lZGlhL1JlbW90ZVZpZGVvRnJhbWVPYmplY3RIZWFwLmNwcAorKysgYi9T
b3VyY2UvV2ViS2l0L0dQVVByb2Nlc3MvbWVkaWEvUmVtb3RlVmlkZW9GcmFtZU9iamVjdEhlYXAu
Y3BwCkBAIC01NSwxMiArNTUsMTEgQEAgUmVtb3RlVmlkZW9GcmFtZU9iamVjdEhlYXA6OlJlbW90
ZVZpZGVvRnJhbWVPYmplY3RIZWFwKEdQVUNvbm5lY3Rpb25Ub1dlYlByb2Nlc3MKIFJlbW90ZVZp
ZGVvRnJhbWVPYmplY3RIZWFwOjp+UmVtb3RlVmlkZW9GcmFtZU9iamVjdEhlYXAoKQogewogICAg
IEFTU0VSVCghbV9ncHVDb25uZWN0aW9uVG9XZWJQcm9jZXNzKTsKLSAgICBtX2NvbnN1bWVUaHJl
YWQucmVzZXQoKTsKIH0KIAogdm9pZCBSZW1vdGVWaWRlb0ZyYW1lT2JqZWN0SGVhcDo6c3RvcExp
c3RlbmluZ0ZvcklQQyhSZWY8UmVtb3RlVmlkZW9GcmFtZU9iamVjdEhlYXA+JiYgcmVmRnJvbUNv
bm5lY3Rpb24pCiB7Ci0gICAgYXNzZXJ0SXNDdXJyZW50KG1fY29uc3VtZVRocmVhZCk7CisgICAg
YXNzZXJ0SXNNYWluVGhyZWFkKCk7CiAjaWYgUExBVEZPUk0oQ09DT0EpCiAgICAgbV9zaGFyZWRW
aWRlb0ZyYW1lV3JpdGVyLmRpc2FibGUoKTsKICNlbmRpZgpAQCAtODQsNyArODMsNyBAQCBSZW1v
dGVWaWRlb0ZyYW1lSWRlbnRpZmllciBSZW1vdGVWaWRlb0ZyYW1lT2JqZWN0SGVhcDo6Y3JlYXRl
UmVtb3RlVmlkZW9GcmFtZShSZQogCiB2b2lkIFJlbW90ZVZpZGVvRnJhbWVPYmplY3RIZWFwOjpy
ZWxlYXNlVmlkZW9GcmFtZShSZW1vdGVWaWRlb0ZyYW1lV3JpdGVSZWZlcmVuY2UmJiB3cml0ZSkK
IHsKLSAgICBhc3NlcnRJc0N1cnJlbnQobV9jb25zdW1lVGhyZWFkKTsKKyAgICBhc3NlcnRJc01h
aW5UaHJlYWQoKTsKICAgICByZXRpcmVSZW1vdmUoV1RGTW92ZSh3cml0ZSkpOwogfQogCmRpZmYg
LS1naXQgYS9Tb3VyY2UvV2ViS2l0L0dQVVByb2Nlc3MvbWVkaWEvUmVtb3RlVmlkZW9GcmFtZU9i
amVjdEhlYXAuaCBiL1NvdXJjZS9XZWJLaXQvR1BVUHJvY2Vzcy9tZWRpYS9SZW1vdGVWaWRlb0Zy
YW1lT2JqZWN0SGVhcC5oCmluZGV4IDE2MmE5NDI4MjlhNTlkZTRiYzI3MjgzMjIxMmQzNDY4ZGU1
NTRlNDguLjM1ZDBlNTI3OTM0MmQyZmZjNzFmYzExNjE2ZjAxODY5YTIyMTUxODggMTAwNjQ0Ci0t
LSBhL1NvdXJjZS9XZWJLaXQvR1BVUHJvY2Vzcy9tZWRpYS9SZW1vdGVWaWRlb0ZyYW1lT2JqZWN0
SGVhcC5oCisrKyBiL1NvdXJjZS9XZWJLaXQvR1BVUHJvY2Vzcy9tZWRpYS9SZW1vdGVWaWRlb0Zy
YW1lT2JqZWN0SGVhcC5oCkBAIC02NCw5ICs2NCw4IEBAIHByaXZhdGU6CiAgICAgdm9pZCBnZXRW
aWRlb0ZyYW1lQnVmZmVyKFJlbW90ZVZpZGVvRnJhbWVSZWFkUmVmZXJlbmNlJiYpOwogI2VuZGlm
CiAKLSAgICBHUFVDb25uZWN0aW9uVG9XZWJQcm9jZXNzKiBtX2dwdUNvbm5lY3Rpb25Ub1dlYlBy
b2Nlc3MgV1RGX0dVQVJERURfQllfQ0FQQUJJTElUWShtX2NvbnN1bWVUaHJlYWQpOworICAgIEdQ
VUNvbm5lY3Rpb25Ub1dlYlByb2Nlc3MqIG1fZ3B1Q29ubmVjdGlvblRvV2ViUHJvY2VzcyBXVEZf
R1VBUkRFRF9CWV9DQVBBQklMSVRZKG1haW5UaHJlYWQpOwogICAgIGNvbnN0IFJlZjxJUEM6OkNv
bm5lY3Rpb24+IG1fY29ubmVjdGlvbjsKLSAgICBUaHJlYWRBc3NlcnRpb24gbV9jb25zdW1lVGhy
ZWFkIE5PX1VOSVFVRV9BRERSRVNTOwogI2lmIFBMQVRGT1JNKENPQ09BKQogICAgIFNoYXJlZFZp
ZGVvRnJhbWVXcml0ZXIgbV9zaGFyZWRWaWRlb0ZyYW1lV3JpdGVyOwogI2VuZGlmCmRpZmYgLS1n
aXQgYS9Tb3VyY2UvV2ViS2l0L1BsYXRmb3JtL0lQQy9TdHJlYW1Db25uZWN0aW9uV29ya1F1ZXVl
LmNwcCBiL1NvdXJjZS9XZWJLaXQvUGxhdGZvcm0vSVBDL1N0cmVhbUNvbm5lY3Rpb25Xb3JrUXVl
dWUuY3BwCmluZGV4IGQ5YTIwZDE0OGE4YmEwNWIxNmQ2N2E1OTkyMTA0YTU5ZDk0NzdlZjUuLmJl
NGY1NGQwNzlmNTkzNzIwZGIzZmIwYWMwNzIwNTQ1N2MyN2FkYzEgMTAwNjQ0Ci0tLSBhL1NvdXJj
ZS9XZWJLaXQvUGxhdGZvcm0vSVBDL1N0cmVhbUNvbm5lY3Rpb25Xb3JrUXVldWUuY3BwCisrKyBi
L1NvdXJjZS9XZWJLaXQvUGxhdGZvcm0vSVBDL1N0cmVhbUNvbm5lY3Rpb25Xb3JrUXVldWUuY3Bw
CkBAIC0xMzYsNCArMTM2LDEyIEBAIHZvaWQgU3RyZWFtQ29ubmVjdGlvbldvcmtRdWV1ZTo6cHJv
Y2Vzc1N0cmVhbXMoKQogICAgIH0gd2hpbGUgKGhhc01vcmVUb1Byb2Nlc3MpOwogfQogCisjaWYg
QVNTRVJUX0VOQUJMRUQKK3ZvaWQgU3RyZWFtQ29ubmVjdGlvbldvcmtRdWV1ZTo6YXNzZXJ0SXND
dXJyZW50KCkgY29uc3QKK3sKKyAgICBMb2NrZXIgbG9ja2VyIHsgbV9sb2NrIH07CisgICAgQVNT
RVJUKG1fcHJvY2Vzc2luZ1RocmVhZCk7CisgICAgYXNzZXJ0SXNDdXJyZW50KCptX3Byb2Nlc3Np
bmdUaHJlYWQpOworfQorI2VuZGlmCiB9CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViS2l0L1BsYXRm
b3JtL0lQQy9TdHJlYW1Db25uZWN0aW9uV29ya1F1ZXVlLmggYi9Tb3VyY2UvV2ViS2l0L1BsYXRm
b3JtL0lQQy9TdHJlYW1Db25uZWN0aW9uV29ya1F1ZXVlLmgKaW5kZXggZDg0NDZhNDEwOTY2NmQ5
NmNkMDc3NDVmNWJlMWQ5ODc1YjE1ZjFjOS4uMmViMjAxZWY4ZjNlMmE2MWQ2ZDE1Y2VjMmZiMDY5
MTFjYWVjY2NiZCAxMDA2NDQKLS0tIGEvU291cmNlL1dlYktpdC9QbGF0Zm9ybS9JUEMvU3RyZWFt
Q29ubmVjdGlvbldvcmtRdWV1ZS5oCisrKyBiL1NvdXJjZS9XZWJLaXQvUGxhdGZvcm0vSVBDL1N0
cmVhbUNvbm5lY3Rpb25Xb3JrUXVldWUuaApAQCAtMzYsNyArMzYsNyBAQAogCiBuYW1lc3BhY2Ug
SVBDIHsKIAotY2xhc3MgU3RyZWFtQ29ubmVjdGlvbldvcmtRdWV1ZSBmaW5hbCA6IHB1YmxpYyBG
dW5jdGlvbkRpc3BhdGNoZXIgeworY2xhc3MgV1RGX0NBUEFCSUxJVFkoImlzIGN1cnJlbnQiKSBT
dHJlYW1Db25uZWN0aW9uV29ya1F1ZXVlIGZpbmFsIDogcHVibGljIEZ1bmN0aW9uRGlzcGF0Y2hl
ciB7CiBwdWJsaWM6CiAgICAgc3RhdGljIFJlZjxTdHJlYW1Db25uZWN0aW9uV29ya1F1ZXVlPiBj
cmVhdGUoY29uc3QgY2hhciogbmFtZSkKICAgICB7CkBAIC01NywxNiArNTcsMjcgQEAgcHVibGlj
OgogcHJpdmF0ZToKICAgICB2b2lkIHN0YXJ0UHJvY2Vzc2luZ1RocmVhZCgpIFdURl9SRVFVSVJF
U19MT0NLKG1fbG9jayk7CiAgICAgdm9pZCBwcm9jZXNzU3RyZWFtcygpOworI2lmIEFTU0VSVF9F
TkFCTEVECisgICAgdm9pZCBhc3NlcnRJc0N1cnJlbnQoKSBjb25zdDsKKyNlbmRpZgogCiAgICAg
Y29uc3QgY2hhciogY29uc3QgbV9uYW1lOwogCiAgICAgU2VtYXBob3JlIG1fd2FrZVVwU2VtYXBo
b3JlOwogICAgIHN0ZDo6YXRvbWljPGJvb2w+IG1fc2hvdWxkUXVpdCB7IGZhbHNlIH07CiAKLSAg
ICBMb2NrIG1fbG9jazsKKyAgICBtdXRhYmxlIExvY2sgbV9sb2NrOwogICAgIFJlZlB0cjxUaHJl
YWQ+IG1fcHJvY2Vzc2luZ1RocmVhZCBXVEZfR1VBUkRFRF9CWV9MT0NLKG1fbG9jayk7CiAgICAg
RGVxdWU8RnVuY3Rpb248dm9pZCgpPj4gbV9mdW5jdGlvbnMgV1RGX0dVQVJERURfQllfTE9DSyht
X2xvY2spOwogICAgIEhhc2hDb3VudGVkU2V0PFJlZjxTdHJlYW1TZXJ2ZXJDb25uZWN0aW9uQmFz
ZT4+IG1fY29ubmVjdGlvbnMgV1RGX0dVQVJERURfQllfTE9DSyhtX2xvY2spOworICAgIGZyaWVu
ZCB2b2lkIGFzc2VydElzQ3VycmVudChjb25zdCBTdHJlYW1Db25uZWN0aW9uV29ya1F1ZXVlJik7
CiB9OwogCitpbmxpbmUgdm9pZCBhc3NlcnRJc0N1cnJlbnQoY29uc3QgU3RyZWFtQ29ubmVjdGlv
bldvcmtRdWV1ZSYgcXVldWUpIFdURl9BU1NFUlRTX0FDUVVJUkVEX0NBUEFCSUxJVFkocXVldWUp
Cit7CisjaWYgQVNTRVJUX0VOQUJMRUQKKyAgICBxdWV1ZS5hc3NlcnRJc0N1cnJlbnQoKTsKKyNl
bmRpZgorfQorCiB9CmRpZmYgLS1naXQgYS9Ub29scy9DaGFuZ2VMb2cgYi9Ub29scy9DaGFuZ2VM
b2cKaW5kZXggODZiYjhiNzIyYTFlYTAwMzBhZWQ5YjU3NzY1NWU0OWEzNzliNjFiZS4uZTVhY2Fm
OWMzMmQ0NTVjY2MxMjYxZjI5NWZiYTRkZGZjZjY5OThmMiAxMDA2NDQKLS0tIGEvVG9vbHMvQ2hh
bmdlTG9nCisrKyBiL1Rvb2xzL0NoYW5nZUxvZwpAQCAtMSwzICsxLDIyIEBACisyMDIyLTAyLTIz
ICBLaW1tbyBLaW5udW5lbiAgPGtraW5udW5lbkBhcHBsZS5jb20+CisKKyAgICAgICAgVGhyZWFk
IHNhZmV0eSBhbmFseXNpcyB0byBhc3NlcnQgImNvZGUgaXMgcnVuIHNlcXVlbnRpYWxseSIgaXMg
bm90IHVzZWZ1bCB3aGVuIGNvZGUgaXMgbWFpbmx5IHJ1biB3aXRoIFdvcmtRdWV1ZXMKKyAgICAg
ICAgaHR0cHM6Ly9idWdzLndlYmtpdC5vcmcvc2hvd19idWcuY2dpP2lkPTIzNjgzMgorCisgICAg
ICAgIFJldmlld2VkIGJ5IE5PQk9EWSAoT09QUyEpLgorCisgICAgICAgIFRlc3QgdGhlIGFkZGVk
IGZ1bmN0aW9uYWxpdHkgdG8gYmUgYWJsZSB0byB1c2UgYXNzZXJ0SXNDdXJyZW50KHRocmVhZC93
b3JrUXVldWUpLgorCisgICAgICAgIEZpeCBXVEZfV29ya1F1ZXVlLkRlc3Ryb3lEaXNwYXRjaGVk
T25EaXNwYXRjaFF1ZXVlIHRlc3QsIGl0IGlzIG5vdyBhYmxlIHRvIG1ha2UgdGhlIGFzc2VydGlv
biBjb3JyZWN0bHkuCisgICAgICAgIC0gVGhlIG9iamVjdCBpcyBjcmVhdGVkIHNvbWV3aGVyZSB0
aGF0IGlzIG5vdCB0aGUgdGVzdGVkIFdvcmtRdWV1ZQorICAgICAgICAtIFRoZSBvYmplY3QgaXMg
ZGVzdHJveWVkIGluIHRoZSB0ZXN0ZWQgV29ya1F1ZXVlCisKKyAgICAgICAgKiBUZXN0V2ViS2l0
QVBJL1Rlc3RzL1dURi9UaHJlYWRBc3NlcnRpb25zVGVzdC5jcHA6CisgICAgICAgICogVGVzdFdl
YktpdEFQSS9UZXN0cy9XVEYvVGhyZWFkaW5nLmNwcDoKKyAgICAgICAgKFRlc3RXZWJLaXRBUEk6
OlRFU1QpOgorICAgICAgICAqIFRlc3RXZWJLaXRBUEkvVGVzdHMvV1RGL1dvcmtRdWV1ZS5jcHA6
CisgICAgICAgIChUZXN0V2ViS2l0QVBJOjpURVNUKToKKwogMjAyMi0wMi0yMyAgS2ltbW8gS2lu
bnVuZW4gIDxra2lubnVuZW5AYXBwbGUuY29tPgogCiAgICAgICAgIFRocmVhZCBzYWZldHkgYW5h
bHlzaXMgbWFjcm9zIGFyZSBjb25mdXNpbmcgZm9yIG5vbi1Mb2NrIHVzZS1jYXNlcwpkaWZmIC0t
Z2l0IGEvVG9vbHMvU2NyaXB0cy9nZW5lcmF0ZS1ncHVwLXdlYmdsIGIvVG9vbHMvU2NyaXB0cy9n
ZW5lcmF0ZS1ncHVwLXdlYmdsCmluZGV4IDBiNTQ1ZjgxZTg2MGRmNDhkYWVhY2I1MjYxY2I5Zjgx
YmRiMjc3NDcuLjA3MWI2OTczZTEyNDAyNDY3NGEyZTc2MGE5M2EwNzgyMTkyZmUwYmEgMTAwNzU1
Ci0tLSBhL1Rvb2xzL1NjcmlwdHMvZ2VuZXJhdGUtZ3B1cC13ZWJnbAorKysgYi9Ub29scy9TY3Jp
cHRzL2dlbmVyYXRlLWdwdXAtd2ViZ2wKQEAgLTEwNSw3ICsxMDUsNyBAQCBtZXNzYWdlcyAtPiBS
ZW1vdGVHcmFwaGljc0NvbnRleHRHTCBOb3RSZWZDb3VudGVkIFN0cmVhbSB7ewogICAgIHZvaWQg
R2V0RXJyb3IoKSAtPiAodWludDMyX3QgcmV0dXJuVmFsdWUpIFN5bmNocm9ub3VzCiAgICAgdm9p
ZCBQYWludFJlbmRlcmluZ1Jlc3VsdHNUb0NhbnZhcyhXZWJDb3JlOjpSZW5kZXJpbmdSZXNvdXJj
ZUlkZW50aWZpZXIgaW1hZ2VCdWZmZXIpIC0+ICgpIFN5bmNocm9ub3VzCiAgICAgdm9pZCBQYWlu
dENvbXBvc2l0ZWRSZXN1bHRzVG9DYW52YXMoV2ViQ29yZTo6UmVuZGVyaW5nUmVzb3VyY2VJZGVu
dGlmaWVyIGltYWdlQnVmZmVyKSAtPiAoKSBTeW5jaHJvbm91cwotICAgIHZvaWQgQ29weVRleHR1
cmVGcm9tTWVkaWEoV2ViQ29yZTo6TWVkaWFQbGF5ZXJJZGVudGlmaWVyIGlkZW50aWZpZXIsIHVp
bnQzMl90IHRleHR1cmUsIHVpbnQzMl90IHRhcmdldCwgaW50MzJfdCBsZXZlbCwgdWludDMyX3Qg
aW50ZXJuYWxGb3JtYXQsIHVpbnQzMl90IGZvcm1hdCwgdWludDMyX3QgdHlwZSwgYm9vbCBwcmVt
dWx0aXBseUFscGhhLCBib29sIGZsaXBZKSAtPiAoYm9vbCBzdWNjZXNzKSBTeW5jaHJvbm91cwor
ICAgIHZvaWQgQ29weVRleHR1cmVGcm9tVmlkZW9GcmFtZShXZWJLaXQ6OlJlbW90ZVZpZGVvRnJh
bWVSZWFkUmVmZXJlbmNlIHJlYWQsIHVpbnQzMl90IHRleHR1cmUsIHVpbnQzMl90IHRhcmdldCwg
aW50MzJfdCBsZXZlbCwgdWludDMyX3QgaW50ZXJuYWxGb3JtYXQsIHVpbnQzMl90IGZvcm1hdCwg
dWludDMyX3QgdHlwZSwgYm9vbCBwcmVtdWx0aXBseUFscGhhLCBib29sIGZsaXBZKSAtPiAoYm9v
bCBzdWNjZXNzKSBTeW5jaHJvbm91cwogI2lmIEVOQUJMRShNRURJQV9TVFJFQU0pCiAgICAgdm9p
ZCBQYWludENvbXBvc2l0ZWRSZXN1bHRzVG9NZWRpYVNhbXBsZSgpIC0+IChzdGQ6Om9wdGlvbmFs
PFdlYktpdDo6UmVtb3RlVmlkZW9GcmFtZVByb3h5OjpQcm9wZXJ0aWVzPiBwcm9wZXJ0aWVzKSBT
eW5jaHJvbm91cwogI2VuZGlmCkBAIC03NDQsNyArNzQ0LDcgQEAgY2xhc3Mgd2Via2l0X2lwY19j
cHBfaW1wbChvYmplY3QpOgogICAgICAgICBzZWxmLnByb2Nlc3NfY2FsbCgpCiAKICAgICBkZWYg
cHJvY2Vzc19jYWxsKHNlbGYpOgotICAgICAgICBzZWxmLmNhbGxfc3RtdHMgKz0gWyAiYXNzZXJ0
SXNDdXJyZW50KG1fc3RyZWFtVGhyZWFkKTsiIF0KKyAgICAgICAgc2VsZi5jYWxsX3N0bXRzICs9
IFsgImFzc2VydElzQ3VycmVudCh3b3JrUXVldWUoKSk7IiBdCiAKICAgICAgICAgaW5fZXhwcnMg
PSAiLCAiLmpvaW4oc3RyKGUpIGZvciBlIGluIHNlbGYuaW5fZXhwcnMpCiAgICAgICAgIGlzX2Fz
eW5jID0gbGVuKHNlbGYub3V0X2V4cHJzKSA9PSAwCmRpZmYgLS1naXQgYS9Ub29scy9UZXN0V2Vi
S2l0QVBJL1Rlc3RzL1dURi9UaHJlYWRpbmcuY3BwIGIvVG9vbHMvVGVzdFdlYktpdEFQSS9UZXN0
cy9XVEYvVGhyZWFkaW5nLmNwcAppbmRleCAzNDY4ZDE1MDk2YzUyOGIyOGY5NDdlNzNmODA5MTNm
MDBhZGFkYjJmLi4wNDMwMGU3Yzg0YmZjOWNhODk2NWFlMmI4YWYwM2MzZTU4MmJkYTk3IDEwMDY0
NAotLS0gYS9Ub29scy9UZXN0V2ViS2l0QVBJL1Rlc3RzL1dURi9UaHJlYWRpbmcuY3BwCisrKyBi
L1Rvb2xzL1Rlc3RXZWJLaXRBUEkvVGVzdHMvV1RGL1RocmVhZGluZy5jcHAKQEAgLTI3LDYgKzI3
LDcgQEAKIAogI2luY2x1ZGUgPHd0Zi9UaHJlYWRpbmcuaD4KICNpbmNsdWRlIDx3dGYvVmVjdG9y
Lmg+CisjaW5jbHVkZSA8d3RmL3RocmVhZHMvQmluYXJ5U2VtYXBob3JlLmg+CiAKIG5hbWVzcGFj
ZSBUZXN0V2ViS2l0QVBJIHsKIApAQCAtNjUsNCArNjYsNTkgQEAgVEVTVChXVEYsIFRocmVhZGlu
Z1RocmVhZElkZW50aXR5KQogfQogI2VuZGlmIC8vIFVTRShQVEhSRUFEUykKIAorbmFtZXNwYWNl
IHsKK3N0cnVjdCBBc3NlcnRpb25UZXN0SG9sZGVyIHsKKyAgICBSZWZQdHI8VGhyZWFkPiB0aHJl
YWQ7CisgICAgc2l6ZV90IGNvdW50ZXIgV1RGX0dVQVJERURfQllfQ0FQQUJJTElUWSgqdGhyZWFk
KSB7IDAgfTsKKyAgICBzaXplX3QgcmVzdWx0IHsgMCB9OyAvLyBUaGlzIGlzIGhlcmUgdG8gc3Vw
cG9ydCB0aGUgcmVzdWx0IGFzc2VydGlvbi4gVGhlIGNvbXBpbGVyIGRvZXNuJ3QgYWxsb3cgdXMg
dG8gb2J0YWluIHRoZSBgY291bnRlcmAgb3RoZXJ3aXNlLgorCisgICAgQXNzZXJ0aW9uVGVzdEhv
bGRlcigpCisgICAgeworICAgICAgICBCaW5hcnlTZW1hcGhvcmUgbWVtYmVySW5pdGlhbGl6ZWQ7
CisgICAgICAgIEJpbmFyeVNlbWFwaG9yZSB0aHJlYWRJbml0aWFsaXplZDsKKworICAgICAgICB0
aHJlYWQgPSBUaHJlYWQ6OmNyZWF0ZSgiY29tLmFwcGxlLldlYktpdC5UZXN0LlRocmVhZFRocmVh
ZFNhZmV0eUFuYWx5c2lzQXNzZXJ0SXNDdXJyZW50V29ya3MiLCBbJl0geworICAgICAgICAgICAg
bWVtYmVySW5pdGlhbGl6ZWQud2FpdCgpOyAvLyBXYWl0IGZvciBgQXNzZXJ0aW9uVGVzdEhvbGRl
cjo6dGhyZWFkYCBhc3NpZ25tZW50IHRvIGNvbXBsZXRlLgorICAgICAgICAgICAgdGhyZWFkSW5p
dGlhbGl6ZWQuc2lnbmFsKCk7CisvLyBFbmFibGUgdG8gc2VlICJ3cml0aW5nIHZhcmlhYmxlICdj
b3VudGVyJyByZXF1aXJlcyBob2xkaW5nIG11dGV4ICd0aHJlYWQnIGV4Y2x1c2l2ZWx5Ii4KKy8v
ICNkZWZpbmUgVEVTVF9DT01QSUxFX0ZBSUxVUkUKKyNpZmRlZiBURVNUX0NPTVBJTEVfRkFJTFVS
RQorICAgICAgICAgICAgdGVzdFRhc2tUaGF0RmFpbHNUb0NvbXBpbGU8aW50PigpOworI2VuZGlm
CisgICAgICAgICAgICB0ZXN0VGFzaygpOworICAgICAgICAgICAgYXNzZXJ0SXNDdXJyZW50KCp0
aHJlYWQpOworICAgICAgICAgICAgY29tcHV0ZVJlc3VsdCgpOworICAgICAgICB9KTsKKyAgICAg
ICAgbWVtYmVySW5pdGlhbGl6ZWQuc2lnbmFsKCk7CisgICAgICAgIHRocmVhZEluaXRpYWxpemVk
LndhaXQoKTsgLy8gV2FpdCBmb3IgdGhlIHRocmVhZCB0byBzdG9wIHVzaW5nIGBtZW1iZXJJbml0
aWFsaXplZGAsIGFzIHdlIHdpbGwgZGVzdHJveSBpdC4KKyAgICB9CisgICAgdm9pZCB0ZXN0VGFz
aygpCisgICAgeworICAgICAgICBhc3NlcnRJc0N1cnJlbnQoKnRocmVhZCk7IC8vIFRoaXMgaXMg
YmVpbmcgdGVzdGVkLgorICAgICAgICArK2NvdW50ZXI7CisgICAgfQorICAgIHZvaWQgY29tcHV0
ZVJlc3VsdCgpIFdURl9SRVFVSVJFU19DQVBBQklMSVRZKCp0aHJlYWQpIC8vIFRoaXMgaXMgYmVp
bmcgdGVzdGVkLgorICAgIHsKKyAgICAgICAgcmVzdWx0ID0gKytjb3VudGVyOworICAgIH0KKyAg
ICB0ZW1wbGF0ZTx0eXBlbmFtZSBUPiB2b2lkIHRlc3RUYXNrVGhhdEZhaWxzVG9Db21waWxlKCkK
KyAgICB7CisgICAgICAgICsrY291bnRlcjsKKyAgICB9Cit9OworfQorCisvLyBDb25zaWRlciBk
ZWNsYXJhdGlvbiBgUmVmUHRyPFRocmVhZD4gbXlUaHJlYWRgLgorLy8gVGhpcyB0ZXN0IHRlc3Rz
IHRoYXQgY2xpZW50cyBjYW4gdXNlIHRocmVhZCBzYWZldHkgYW5hbHlzaXMgdG8gY2hlY2sgdGhh
dCB0aGUgdGhyZWFkIGlzIGN1cnJlbnQKKy8vIGJ5IHVzaW5nIGBhc3NlcnRJc0N1cnJlbnQoKm15
VGhyZWFkKTtgIHRvIGVzdGFibGlzaCB0aGUgYXNzZXJ0aW9uIGFuZCBXVEZfR1VBUkRFRF9CWV9D
QVBBQklMSVRZLCBXVEZfUkVRVUlSRVNfQllfQ0FQQUJJTElUWQorLy8gZGVjbGFyYXRpb25zIHRv
IGxldCB0aGUgY29tcGlsZXIgYW5hbHl6ZSB0aGUgdXNlcyBvZiB0aGUgdmFyaWFibGVzIGFuZCBm
dW5jdGlvbnMgd2l0aCB0aGUgZGVjbGFyYXRpb25zLgorVEVTVChXVEZfVGhyZWFkLCBUaHJlYWRT
YWZldHlBbmFseXNpc0Fzc2VydElzQ3VycmVudFdvcmtzKQoreworICAgIEFzc2VydGlvblRlc3RI
b2xkZXIgaG9sZGVyc1s1MF07CisgICAgZm9yIChhdXRvJiBob2xkZXIgOiBob2xkZXJzKQorICAg
ICAgICBob2xkZXIudGhyZWFkLT53YWl0Rm9yQ29tcGxldGlvbigpOworICAgIGZvciAoYXV0byYg
aG9sZGVyIDogaG9sZGVycykKKyAgICAgICAgRVhQRUNUX0VRKDJ1LCBob2xkZXIucmVzdWx0KTsK
K30KKwogfSAvLyBuYW1lc3BhY2UgVGVzdFdlYktpdEFQSQpkaWZmIC0tZ2l0IGEvVG9vbHMvVGVz
dFdlYktpdEFQSS9UZXN0cy9XVEYvV29ya1F1ZXVlLmNwcCBiL1Rvb2xzL1Rlc3RXZWJLaXRBUEkv
VGVzdHMvV1RGL1dvcmtRdWV1ZS5jcHAKaW5kZXggMmY0Y2Y2NGE4YWNmZWI2NDJlMDYyZDg4NmZk
MmJlNDg4ZjAzNTZlZi4uMDg1ZDk4Y2FiZDY1NDQxYjQ0OWQ4OGViNTM4YTJlYjBjYjdhMjQ3OSAx
MDA2NDQKLS0tIGEvVG9vbHMvVGVzdFdlYktpdEFQSS9UZXN0cy9XVEYvV29ya1F1ZXVlLmNwcAor
KysgYi9Ub29scy9UZXN0V2ViS2l0QVBJL1Rlc3RzL1dURi9Xb3JrUXVldWUuY3BwCkBAIC0yODks
MTEgKzI4OSwxMSBAQCBURVNUKFdURl9Xb3JrUXVldWUsIERlc3Ryb3lEaXNwYXRjaGVkT25EaXNw
YXRjaFF1ZXVlKQogICAgICAgICB9CiAgICAgICAgIH5EZXN0cnVjdGlvbldvcmtRdWV1ZVRlc3Rl
cigpCiAgICAgICAgIHsKLSAgICAgICAgICAgIEVYUEVDVF9ORShtX2NyZWF0ZWRJblRocmVhZCwg
VGhyZWFkOjpjdXJyZW50KCkudWlkKCkpOworICAgICAgICAgICAgRVhQRUNUX05FKG1fY3JlYXRl
ZEluU2VxdWVuY2UsIGN1cnJlbnRTZXF1ZW5jZUlEKCkpOwogICAgICAgICAgICAgbV9jb3VudGVy
Kys7CiAgICAgICAgIH0KICAgICBwcml2YXRlOgotICAgICAgICB1aW50MzJfdCBtX2NyZWF0ZWRJ
blRocmVhZCA9IFRocmVhZDo6Y3VycmVudCgpLnVpZCgpOworICAgICAgICB1aW50MzJfdCBtX2Ny
ZWF0ZWRJblNlcXVlbmNlID0gY3VycmVudFNlcXVlbmNlSUQoKTsKICAgICAgICAgc3RkOjphdG9t
aWM8c2l6ZV90PiYgbV9jb3VudGVyOwogICAgIH07CiAgICAgY29uc3RleHByIHNpemVfdCBxdWV1
ZUNvdW50ID0gNTA7CkBAIC0zMDksNiArMzA5LDQ5IEBAIFRFU1QoV1RGX1dvcmtRdWV1ZSwgRGVz
dHJveURpc3BhdGNoZWRPbkRpc3BhdGNoUXVldWUpCiAgICAgZm9yIChzaXplX3QgaiA9IDA7IGog
PCBxdWV1ZUNvdW50OyArK2opCiAgICAgICAgIHF1ZXVlW2pdLT5kaXNwYXRjaFN5bmMoW10geyB9
KTsKICAgICBFWFBFQ1RfRVEocXVldWVDb3VudCAqIGl0ZXJhdGlvbkNvdW50LCBjb3VudGVyKTsK
K30KKworbmFtZXNwYWNlIHsKK3N0cnVjdCBBc3NlcnRpb25UZXN0SG9sZGVyIHsKKyAgICBjb25z
dCBSZWZQdHI8V29ya1F1ZXVlPiBxdWV1ZSB7IFdvcmtRdWV1ZTo6Y3JlYXRlKCJjb20uYXBwbGUu
V2ViS2l0LlRlc3QuVGhyZWFkU2FmZXR5QW5hbHlzaXNBc3NlcnRJc0N1cnJlbnRXb3JrcyIsIFdv
cmtRdWV1ZTo6UU9TOjpVc2VySW50ZXJhY3RpdmUpIH07CisgICAgc2l6ZV90IGNvdW50ZXIgV1RG
X0dVQVJERURfQllfQ0FQQUJJTElUWSgqcXVldWUpIHsgMCB9OworICAgIHNpemVfdCByZXN1bHQg
eyAwIH07IC8vIFRoaXMgaXMgaGVyZSB0byBzdXBwb3J0IHRoZSByZXN1bHQgYXNzZXJ0aW9uLiBU
aGUgY29tcGlsZXIgZG9lc24ndCBhbGxvdyB1cyB0byBvYnRhaW4gdGhlIGBjb3VudGVyYCBvdGhl
cndpc2UuCiAKKyAgICB2b2lkIHRlc3RUYXNrKCkKKyAgICB7CisgICAgICAgIGFzc2VydElzQ3Vy
cmVudCgqcXVldWUpOyAvLyBUaGlzIGlzIGJlaW5nIHRlc3RlZC4KKyAgICAgICAgKytjb3VudGVy
OworICAgIH0KKyAgICB2b2lkIGNvbXB1dGVSZXN1bHQoKSBXVEZfUkVRVUlSRVNfQ0FQQUJJTElU
WSgqcXVldWUpIC8vIFRoaXMgaXMgYmVpbmcgdGVzdGVkLgorICAgIHsKKyAgICAgICAgcmVzdWx0
ID0gKytjb3VudGVyOworICAgIH0KKyAgICB0ZW1wbGF0ZTx0eXBlbmFtZSBUPiB2b2lkIHRlc3RU
YXNrVGhhdEZhaWxzVG9Db21waWxlKCkKKyAgICB7CisgICAgICAgICsrY291bnRlcjsKKyAgICB9
Cit9OwogfQorCitURVNUKFdURl9Xb3JrUXVldWUsIFRocmVhZFNhZmV0eUFuYWx5c2lzQXNzZXJ0
SXNDdXJyZW50V29ya3MpCit7CisgICAgY29uc3RleHByIHNpemVfdCBxdWV1ZUNvdW50ID0gNTA7
CisgICAgY29uc3RleHByIHNpemVfdCBpdGVyYXRpb25Db3VudCA9IDEwMDAwOworCisgICAgQXNz
ZXJ0aW9uVGVzdEhvbGRlciBob2xkZXJzW3F1ZXVlQ291bnRdOworICAgIGZvciAoc2l6ZV90IGkg
PSAwOyBpIDwgaXRlcmF0aW9uQ291bnQ7ICsraSkgeworICAgICAgICBmb3IgKGF1dG8mIGhvbGRl
ciA6IGhvbGRlcnMpCisgICAgICAgICAgICBob2xkZXIucXVldWUtPmRpc3BhdGNoKFsmaG9sZGVy
XSB7IGhvbGRlci50ZXN0VGFzaygpOyB9KTsKKyAgICB9CisvLyAjZGVmaW5lIFRFU1RfQ09NUElM
RV9GQUlMVVJFCisjaWZkZWYgVEVTVF9DT01QSUxFX0ZBSUxVUkUKKyAgICBmb3IgKGF1dG8mIGhv
bGRlciA6IGhvbGRlcnMpCisgICAgICAgIGhvbGRlci5xdWV1ZS0+ZGlzcGF0Y2hTeW5jKFsmaG9s
ZGVyXSB7IGhvbGRlci50ZXN0VGFza1RoYXRGYWlsc1RvQ29tcGlsZTxpbnQ+KCk7IH0pOworI2Vu
ZGlmCisgICAgZm9yIChhdXRvJiBob2xkZXIgOiBob2xkZXJzKQorICAgICAgICBob2xkZXIucXVl
dWUtPmRpc3BhdGNoU3luYyhbJmhvbGRlcl0geyBhc3NlcnRJc0N1cnJlbnQoKmhvbGRlci5xdWV1
ZSk7IGhvbGRlci5jb21wdXRlUmVzdWx0KCk7IH0pOworICAgIGZvciAoYXV0byYgaG9sZGVyIDog
aG9sZGVycykKKyAgICAgICAgRVhQRUNUX0VRKGl0ZXJhdGlvbkNvdW50ICsgMSwgaG9sZGVyLnJl
c3VsdCk7Cit9CisKIH0gLy8gbmFtZXNwYWNlIFRlc3RXZWJLaXRBUEkK
</data>

          </attachment>
          <attachment
              isobsolete="0"
              ispatch="1"
              isprivate="0"
          >
            <attachid>452973</attachid>
            <date>2022-02-23 06:19:31 -0800</date>
            <delta_ts>2022-02-24 01:04:48 -0800</delta_ts>
            <desc>Patch</desc>
            <filename>bug-236832-20220223161929.patch</filename>
            <type>text/plain</type>
            <size>116082</size>
            <attacher name="Kimmo Kinnunen">kkinnunen</attacher>
            
              <data encoding="base64">U3VidmVyc2lvbiBSZXZpc2lvbjogMjkwMzY3CmRpZmYgLS1naXQgYS9Tb3VyY2UvV1RGL0NoYW5n
ZUxvZyBiL1NvdXJjZS9XVEYvQ2hhbmdlTG9nCmluZGV4IDljZTJkY2YwNDcwOTU2Y2Q1NDQ5YzY0
MTI4YTIyZDQ5ODUyNzY0OTEuLjU4ZDdmMzhjNDI1N2I3YjRmNmZkYTA5NDZhZWVkYzY0NThhNzJl
YzMgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XVEYvQ2hhbmdlTG9nCisrKyBiL1NvdXJjZS9XVEYvQ2hh
bmdlTG9nCkBAIC0xLDMgKzEsMzMgQEAKKzIwMjItMDItMjMgIEtpbW1vIEtpbm51bmVuICA8a2tp
bm51bmVuQGFwcGxlLmNvbT4KKworICAgICAgICBUaHJlYWQgc2FmZXR5IGFuYWx5c2lzIHRvIGFz
c2VydCAiY29kZSBpcyBydW4gc2VxdWVudGlhbGx5IiBpcyBub3QgdXNlZnVsIHdoZW4gY29kZSBp
cyBtYWlubHkgcnVuIHdpdGggV29ya1F1ZXVlcworICAgICAgICBodHRwczovL2J1Z3Mud2Via2l0
Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9MjM2ODMyCisKKyAgICAgICAgUmV2aWV3ZWQgYnkgTk9CT0RZ
IChPT1BTISkuCisKKyAgICAgICAgVGhyZWFkIHNhZmV0eSBhbmFseXNpcyBpcyBub3QgdXNlZnVs
IHdoZW4gY29kZSBpcyBtYWlubHkgcnVuIHdpdGggV29ya1F1ZXVlcy4KKyAgICAgICAgV29ya1F1
ZXVlIHJ1bm5hYmxlcyBtaWdodCBydW4gaW4gYXJiaXRyYXJ5IHRocmVhZCwgYnV0IHN0aWxsIHNl
cmlhbGx5IGluIGEgc3BlY2lmaWMKKyAgICAgICAgIndvcmsgcXVldWUiLiBUaHVzIGN1cnJlbnQg
VGhyZWFkQXNzZXJ0aW9uIHByb2R1Y2VzIGZhbHNlIGFzc2VydGlvbnMuCisKKyAgICAgICAgTWFr
ZSBUaHJlYWQgYW5kIFdvcmtRdWV1ZSBob2xkICJpcyBjdXJyZW50IiBjYXBhYmlsaXR5LiBUaGlz
IG1lYW5zIHRoZQorICAgICAgICBgYXNzZXJ0SXNDdXJyZW50KHRocmVhZC93b3JrUXVldWUpYCBj
YW4gZXN0YWJsaXNoIHRoYXQgdGhlIGNhbGxlciBob2xkcyB0aGUgY2FwYWJpdHksCisgICAgICAg
IGUuZy4gdGhhdCB0aGUgY2FsbGVyIGlzIHJ1bm5pbmcgaW4gdGhlIHBhcnRpY3VsYXIgdGhyZWFk
IG9yIHdvcmsgcXVldWUuCisKKyAgICAgICAgVGVzdGVkIGJ5IG5ldyBBUEkgdGVzdHMuCisKKyAg
ICAgICAgKiB3dGYvVGhyZWFkaW5nLmg6CisgICAgICAgIChXVEY6OldURl9BU1NFUlRTX0FDUVVJ
UkVEX0NBUEFCSUxJVFkpOgorICAgICAgICAqIHd0Zi9Xb3JrUXVldWUuaDoKKyAgICAgICAgKFdU
Rjo6V1RGX0FTU0VSVFNfQUNRVUlSRURfQ0FQQUJJTElUWSk6CisgICAgICAgICogd3RmL2NvY29h
L1dvcmtRdWV1ZUNvY29hLmNwcDoKKyAgICAgICAgKFdURjo6V29ya1F1ZXVlQmFzZTo6cGxhdGZv
cm1Jbml0aWFsaXplKToKKyAgICAgICAgKFdURjo6V29ya1F1ZXVlOjphc3NlcnRJc0N1cnJlbnQg
Y29uc3QpOgorICAgICAgICAoV1RGOjpjdXJyZW50U2VxdWVuY2VJRCk6CisgICAgICAgICogd3Rm
L2dlbmVyaWMvV29ya1F1ZXVlR2VuZXJpYy5jcHA6CisgICAgICAgIChXVEY6OldvcmtRdWV1ZUJh
c2U6OnBsYXRmb3JtSW5pdGlhbGl6ZSk6CisgICAgICAgIChXVEY6OldvcmtRdWV1ZTo6YXNzZXJ0
SXNDdXJyZW50KToKKyAgICAgICAgKFdURjo6Y3VycmVudFNlcXVlbmNlSUQpOgorCiAyMDIyLTAy
LTIzICBLaW1tbyBLaW5udW5lbiAgPGtraW5udW5lbkBhcHBsZS5jb20+CiAKICAgICAgICAgVGhy
ZWFkIHNhZmV0eSBhbmFseXNpcyBtYWNyb3MgYXJlIGNvbmZ1c2luZyBmb3Igbm9uLUxvY2sgdXNl
LWNhc2VzCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViS2l0L0NoYW5nZUxvZyBiL1NvdXJjZS9XZWJL
aXQvQ2hhbmdlTG9nCmluZGV4IDU4ZWMxMWI0ZWY2ZmNmZjA4NGU0Y2Q0YzMxNGViOTUyNDM4ZGU0
YmYuLjc1ODAwMjA3MzliMzUyNDNiY2YyOWRkZjIzZjMzNjZmMzNjODlkNWIgMTAwNjQ0Ci0tLSBh
L1NvdXJjZS9XZWJLaXQvQ2hhbmdlTG9nCisrKyBiL1NvdXJjZS9XZWJLaXQvQ2hhbmdlTG9nCkBA
IC0xLDMgKzEsMzAxIEBACisyMDIyLTAyLTIzICBLaW1tbyBLaW5udW5lbiAgPGtraW5udW5lbkBh
cHBsZS5jb20+CisKKyAgICAgICAgVGhyZWFkIHNhZmV0eSBhbmFseXNpcyB0byBhc3NlcnQgImNv
ZGUgaXMgcnVuIHNlcXVlbnRpYWxseSIgaXMgbm90IHVzZWZ1bCB3aGVuIGNvZGUgaXMgbWFpbmx5
IHJ1biB3aXRoIFdvcmtRdWV1ZXMKKyAgICAgICAgaHR0cHM6Ly9idWdzLndlYmtpdC5vcmcvc2hv
d19idWcuY2dpP2lkPTIzNjgzMgorCisgICAgICAgIFJldmlld2VkIGJ5IE5PQk9EWSAoT09QUyEp
LgorCisgICAgICAgIEFzc2VydCBkaXJlY3RseSB0aGF0IHRoZSB3b3JrIHF1ZXVlcyBhcmUgY3Vy
cmVudCBpbnN0ZWFkIG9mIHVzaW5nIFRocmVhZEFzc2VydGlvbi4KKworICAgICAgICAqIEdQVVBy
b2Nlc3MvZ3JhcGhpY3MvUmVtb3RlR3JhcGhpY3NDb250ZXh0R0wuY3BwOgorICAgICAgICAoV2Vi
S2l0OjpSZW1vdGVHcmFwaGljc0NvbnRleHRHTDo6flJlbW90ZUdyYXBoaWNzQ29udGV4dEdMKToK
KyAgICAgICAgKFdlYktpdDo6UmVtb3RlR3JhcGhpY3NDb250ZXh0R0w6OmRpc3BsYXlXYXNSZWNv
bmZpZ3VyZWQpOgorICAgICAgICAoV2ViS2l0OjpSZW1vdGVHcmFwaGljc0NvbnRleHRHTDo6d29y
a1F1ZXVlSW5pdGlhbGl6ZSk6CisgICAgICAgIChXZWJLaXQ6OlJlbW90ZUdyYXBoaWNzQ29udGV4
dEdMOjp3b3JrUXVldWVVbmluaXRpYWxpemUpOgorICAgICAgICAoV2ViS2l0OjpSZW1vdGVHcmFw
aGljc0NvbnRleHRHTDo6ZGlkQ29tcG9zaXRlKToKKyAgICAgICAgKFdlYktpdDo6UmVtb3RlR3Jh
cGhpY3NDb250ZXh0R0w6OmZvcmNlQ29udGV4dExvc3QpOgorICAgICAgICAoV2ViS2l0OjpSZW1v
dGVHcmFwaGljc0NvbnRleHRHTDo6ZGlzcGF0Y2hDb250ZXh0Q2hhbmdlZE5vdGlmaWNhdGlvbik6
CisgICAgICAgIChXZWJLaXQ6OlJlbW90ZUdyYXBoaWNzQ29udGV4dEdMOjpyZXNoYXBlKToKKyAg
ICAgICAgKFdlYktpdDo6UmVtb3RlR3JhcGhpY3NDb250ZXh0R0w6OnByZXBhcmVGb3JEaXNwbGF5
KToKKyAgICAgICAgKFdlYktpdDo6UmVtb3RlR3JhcGhpY3NDb250ZXh0R0w6OnN5bnRoZXNpemVH
TEVycm9yKToKKyAgICAgICAgKFdlYktpdDo6UmVtb3RlR3JhcGhpY3NDb250ZXh0R0w6OmdldEVy
cm9yKToKKyAgICAgICAgKFdlYktpdDo6UmVtb3RlR3JhcGhpY3NDb250ZXh0R0w6OmVuc3VyZUV4
dGVuc2lvbkVuYWJsZWQpOgorICAgICAgICAoV2ViS2l0OjpSZW1vdGVHcmFwaGljc0NvbnRleHRH
TDo6bWFya0NvbnRleHRDaGFuZ2VkKToKKyAgICAgICAgKFdlYktpdDo6UmVtb3RlR3JhcGhpY3ND
b250ZXh0R0w6OnBhaW50UmVuZGVyaW5nUmVzdWx0c1RvQ2FudmFzV2l0aFF1YWxpZmllZElkZW50
aWZpZXIpOgorICAgICAgICAoV2ViS2l0OjpSZW1vdGVHcmFwaGljc0NvbnRleHRHTDo6cGFpbnRD
b21wb3NpdGVkUmVzdWx0c1RvQ2FudmFzV2l0aFF1YWxpZmllZElkZW50aWZpZXIpOgorICAgICAg
ICAoV2ViS2l0OjpSZW1vdGVHcmFwaGljc0NvbnRleHRHTDo6cGFpbnRDb21wb3NpdGVkUmVzdWx0
c1RvTWVkaWFTYW1wbGUpOgorICAgICAgICAoV2ViS2l0OjpSZW1vdGVHcmFwaGljc0NvbnRleHRH
TDo6cGFpbnRQaXhlbEJ1ZmZlclRvSW1hZ2VCdWZmZXIpOgorICAgICAgICAoV2ViS2l0OjpSZW1v
dGVHcmFwaGljc0NvbnRleHRHTDo6c2ltdWxhdGVFdmVudEZvclRlc3RpbmcpOgorICAgICAgICAq
IEdQVVByb2Nlc3MvZ3JhcGhpY3MvUmVtb3RlR3JhcGhpY3NDb250ZXh0R0wuaDoKKyAgICAgICAg
KFdlYktpdDo6UmVtb3RlR3JhcGhpY3NDb250ZXh0R0w6OndvcmtRdWV1ZSBjb25zdCk6CisgICAg
ICAgICogR1BVUHJvY2Vzcy9ncmFwaGljcy9SZW1vdGVHcmFwaGljc0NvbnRleHRHTC5tZXNzYWdl
cy5pbjoKKyAgICAgICAgKiBHUFVQcm9jZXNzL2dyYXBoaWNzL1JlbW90ZUdyYXBoaWNzQ29udGV4
dEdMQ29jb2EuY3BwOgorICAgICAgICAoV2ViS2l0OjpSZW1vdGVHcmFwaGljc0NvbnRleHRHTDo6
Y29weVRleHR1cmVGcm9tVmlkZW9GcmFtZSk6CisgICAgICAgIChXZWJLaXQ6OlJlbW90ZUdyYXBo
aWNzQ29udGV4dEdMQ29jb2E6OnBsYXRmb3JtV29ya1F1ZXVlSW5pdGlhbGl6ZSk6CisgICAgICAg
IChXZWJLaXQ6OlJlbW90ZUdyYXBoaWNzQ29udGV4dEdMQ29jb2E6OnByZXBhcmVGb3JEaXNwbGF5
KToKKyAgICAgICAgKiBHUFVQcm9jZXNzL2dyYXBoaWNzL1JlbW90ZUdyYXBoaWNzQ29udGV4dEdM
RnVuY3Rpb25zR2VuZXJhdGVkLmg6CisgICAgICAgIChtb3ZlRXJyb3JzVG9TeW50aGV0aWNFcnJv
ckxpc3QpOgorICAgICAgICAoYWN0aXZlVGV4dHVyZSk6CisgICAgICAgIChhdHRhY2hTaGFkZXIp
OgorICAgICAgICAoYmluZEF0dHJpYkxvY2F0aW9uKToKKyAgICAgICAgKGJpbmRCdWZmZXIpOgor
ICAgICAgICAoYmluZEZyYW1lYnVmZmVyKToKKyAgICAgICAgKGJpbmRSZW5kZXJidWZmZXIpOgor
ICAgICAgICAoYmluZFRleHR1cmUpOgorICAgICAgICAoYmxlbmRDb2xvcik6CisgICAgICAgIChi
bGVuZEVxdWF0aW9uKToKKyAgICAgICAgKGJsZW5kRXF1YXRpb25TZXBhcmF0ZSk6CisgICAgICAg
IChibGVuZEZ1bmMpOgorICAgICAgICAoYmxlbmRGdW5jU2VwYXJhdGUpOgorICAgICAgICAoY2hl
Y2tGcmFtZWJ1ZmZlclN0YXR1cyk6CisgICAgICAgIChjbGVhcik6CisgICAgICAgIChjbGVhckNv
bG9yKToKKyAgICAgICAgKGNsZWFyRGVwdGgpOgorICAgICAgICAoY2xlYXJTdGVuY2lsKToKKyAg
ICAgICAgKGNvbG9yTWFzayk6CisgICAgICAgIChjb21waWxlU2hhZGVyKToKKyAgICAgICAgKGNv
cHlUZXhJbWFnZTJEKToKKyAgICAgICAgKGNvcHlUZXhTdWJJbWFnZTJEKToKKyAgICAgICAgKGNy
ZWF0ZUJ1ZmZlcik6CisgICAgICAgIChjcmVhdGVGcmFtZWJ1ZmZlcik6CisgICAgICAgIChjcmVh
dGVQcm9ncmFtKToKKyAgICAgICAgKGNyZWF0ZVJlbmRlcmJ1ZmZlcik6CisgICAgICAgIChjcmVh
dGVTaGFkZXIpOgorICAgICAgICAoY3JlYXRlVGV4dHVyZSk6CisgICAgICAgIChjdWxsRmFjZSk6
CisgICAgICAgIChkZWxldGVCdWZmZXIpOgorICAgICAgICAoZGVsZXRlRnJhbWVidWZmZXIpOgor
ICAgICAgICAoZGVsZXRlUHJvZ3JhbSk6CisgICAgICAgIChkZWxldGVSZW5kZXJidWZmZXIpOgor
ICAgICAgICAoZGVsZXRlU2hhZGVyKToKKyAgICAgICAgKGRlbGV0ZVRleHR1cmUpOgorICAgICAg
ICAoZGVwdGhGdW5jKToKKyAgICAgICAgKGRlcHRoTWFzayk6CisgICAgICAgIChkZXB0aFJhbmdl
KToKKyAgICAgICAgKGRldGFjaFNoYWRlcik6CisgICAgICAgIChkaXNhYmxlKToKKyAgICAgICAg
KGRpc2FibGVWZXJ0ZXhBdHRyaWJBcnJheSk6CisgICAgICAgIChkcmF3QXJyYXlzKToKKyAgICAg
ICAgKGRyYXdFbGVtZW50cyk6CisgICAgICAgIChlbmFibGUpOgorICAgICAgICAoZW5hYmxlVmVy
dGV4QXR0cmliQXJyYXkpOgorICAgICAgICAoZmluaXNoKToKKyAgICAgICAgKGZsdXNoKToKKyAg
ICAgICAgKGZyYW1lYnVmZmVyUmVuZGVyYnVmZmVyKToKKyAgICAgICAgKGZyYW1lYnVmZmVyVGV4
dHVyZTJEKToKKyAgICAgICAgKGZyb250RmFjZSk6CisgICAgICAgIChnZW5lcmF0ZU1pcG1hcCk6
CisgICAgICAgIChnZXRBY3RpdmVBdHRyaWIpOgorICAgICAgICAoZ2V0QWN0aXZlVW5pZm9ybSk6
CisgICAgICAgIChnZXRBdHRyaWJMb2NhdGlvbik6CisgICAgICAgIChnZXRCdWZmZXJQYXJhbWV0
ZXJpKToKKyAgICAgICAgKGdldFN0cmluZyk6CisgICAgICAgIChnZXRGbG9hdHYpOgorICAgICAg
ICAoZ2V0SW50ZWdlcnYpOgorICAgICAgICAoZ2V0SW50ZWdlcjY0KToKKyAgICAgICAgKGdldElu
dGVnZXI2NGkpOgorICAgICAgICAoZ2V0UHJvZ3JhbWkpOgorICAgICAgICAoZ2V0Qm9vbGVhbnYp
OgorICAgICAgICAoZ2V0RnJhbWVidWZmZXJBdHRhY2htZW50UGFyYW1ldGVyaSk6CisgICAgICAg
IChnZXRQcm9ncmFtSW5mb0xvZyk6CisgICAgICAgIChnZXRSZW5kZXJidWZmZXJQYXJhbWV0ZXJp
KToKKyAgICAgICAgKGdldFNoYWRlcmkpOgorICAgICAgICAoZ2V0U2hhZGVySW5mb0xvZyk6Cisg
ICAgICAgIChnZXRTaGFkZXJQcmVjaXNpb25Gb3JtYXQpOgorICAgICAgICAoZ2V0U2hhZGVyU291
cmNlKToKKyAgICAgICAgKGdldFRleFBhcmFtZXRlcmYpOgorICAgICAgICAoZ2V0VGV4UGFyYW1l
dGVyaSk6CisgICAgICAgIChnZXRVbmlmb3JtZnYpOgorICAgICAgICAoZ2V0VW5pZm9ybWl2KToK
KyAgICAgICAgKGdldFVuaWZvcm11aXYpOgorICAgICAgICAoZ2V0VW5pZm9ybUxvY2F0aW9uKToK
KyAgICAgICAgKGdldFZlcnRleEF0dHJpYk9mZnNldCk6CisgICAgICAgIChoaW50KToKKyAgICAg
ICAgKGlzQnVmZmVyKToKKyAgICAgICAgKGlzRW5hYmxlZCk6CisgICAgICAgIChpc0ZyYW1lYnVm
ZmVyKToKKyAgICAgICAgKGlzUHJvZ3JhbSk6CisgICAgICAgIChpc1JlbmRlcmJ1ZmZlcik6Cisg
ICAgICAgIChpc1NoYWRlcik6CisgICAgICAgIChpc1RleHR1cmUpOgorICAgICAgICAobGluZVdp
ZHRoKToKKyAgICAgICAgKGxpbmtQcm9ncmFtKToKKyAgICAgICAgKHBpeGVsU3RvcmVpKToKKyAg
ICAgICAgKHBvbHlnb25PZmZzZXQpOgorICAgICAgICAocmVuZGVyYnVmZmVyU3RvcmFnZSk6Cisg
ICAgICAgIChzYW1wbGVDb3ZlcmFnZSk6CisgICAgICAgIChzY2lzc29yKToKKyAgICAgICAgKHNo
YWRlclNvdXJjZSk6CisgICAgICAgIChzdGVuY2lsRnVuYyk6CisgICAgICAgIChzdGVuY2lsRnVu
Y1NlcGFyYXRlKToKKyAgICAgICAgKHN0ZW5jaWxNYXNrKToKKyAgICAgICAgKHN0ZW5jaWxNYXNr
U2VwYXJhdGUpOgorICAgICAgICAoc3RlbmNpbE9wKToKKyAgICAgICAgKHN0ZW5jaWxPcFNlcGFy
YXRlKToKKyAgICAgICAgKHRleFBhcmFtZXRlcmYpOgorICAgICAgICAodGV4UGFyYW1ldGVyaSk6
CisgICAgICAgICh1bmlmb3JtMWYpOgorICAgICAgICAodW5pZm9ybTFmdik6CisgICAgICAgICh1
bmlmb3JtMWkpOgorICAgICAgICAodW5pZm9ybTFpdik6CisgICAgICAgICh1bmlmb3JtMmYpOgor
ICAgICAgICAodW5pZm9ybTJmdik6CisgICAgICAgICh1bmlmb3JtMmkpOgorICAgICAgICAodW5p
Zm9ybTJpdik6CisgICAgICAgICh1bmlmb3JtM2YpOgorICAgICAgICAodW5pZm9ybTNmdik6Cisg
ICAgICAgICh1bmlmb3JtM2kpOgorICAgICAgICAodW5pZm9ybTNpdik6CisgICAgICAgICh1bmlm
b3JtNGYpOgorICAgICAgICAodW5pZm9ybTRmdik6CisgICAgICAgICh1bmlmb3JtNGkpOgorICAg
ICAgICAodW5pZm9ybTRpdik6CisgICAgICAgICh1bmlmb3JtTWF0cml4MmZ2KToKKyAgICAgICAg
KHVuaWZvcm1NYXRyaXgzZnYpOgorICAgICAgICAodW5pZm9ybU1hdHJpeDRmdik6CisgICAgICAg
ICh1c2VQcm9ncmFtKToKKyAgICAgICAgKHZhbGlkYXRlUHJvZ3JhbSk6CisgICAgICAgICh2ZXJ0
ZXhBdHRyaWIxZik6CisgICAgICAgICh2ZXJ0ZXhBdHRyaWIxZnYpOgorICAgICAgICAodmVydGV4
QXR0cmliMmYpOgorICAgICAgICAodmVydGV4QXR0cmliMmZ2KToKKyAgICAgICAgKHZlcnRleEF0
dHJpYjNmKToKKyAgICAgICAgKHZlcnRleEF0dHJpYjNmdik6CisgICAgICAgICh2ZXJ0ZXhBdHRy
aWI0Zik6CisgICAgICAgICh2ZXJ0ZXhBdHRyaWI0ZnYpOgorICAgICAgICAodmVydGV4QXR0cmli
UG9pbnRlcik6CisgICAgICAgICh2aWV3cG9ydCk6CisgICAgICAgIChidWZmZXJEYXRhMCk6Cisg
ICAgICAgIChidWZmZXJEYXRhMSk6CisgICAgICAgIChidWZmZXJTdWJEYXRhKToKKyAgICAgICAg
KHJlYWRuUGl4ZWxzMCk6CisgICAgICAgIChyZWFkblBpeGVsczEpOgorICAgICAgICAodGV4SW1h
Z2UyRDApOgorICAgICAgICAodGV4SW1hZ2UyRDEpOgorICAgICAgICAodGV4U3ViSW1hZ2UyRDAp
OgorICAgICAgICAodGV4U3ViSW1hZ2UyRDEpOgorICAgICAgICAoY29tcHJlc3NlZFRleEltYWdl
MkQwKToKKyAgICAgICAgKGNvbXByZXNzZWRUZXhJbWFnZTJEMSk6CisgICAgICAgIChjb21wcmVz
c2VkVGV4U3ViSW1hZ2UyRDApOgorICAgICAgICAoY29tcHJlc3NlZFRleFN1YkltYWdlMkQxKToK
KyAgICAgICAgKGRyYXdBcnJheXNJbnN0YW5jZWQpOgorICAgICAgICAoZHJhd0VsZW1lbnRzSW5z
dGFuY2VkKToKKyAgICAgICAgKHZlcnRleEF0dHJpYkRpdmlzb3IpOgorICAgICAgICAoY3JlYXRl
VmVydGV4QXJyYXkpOgorICAgICAgICAoZGVsZXRlVmVydGV4QXJyYXkpOgorICAgICAgICAoaXNW
ZXJ0ZXhBcnJheSk6CisgICAgICAgIChiaW5kVmVydGV4QXJyYXkpOgorICAgICAgICAoY29weUJ1
ZmZlclN1YkRhdGEpOgorICAgICAgICAoZ2V0QnVmZmVyU3ViRGF0YSk6CisgICAgICAgIChibGl0
RnJhbWVidWZmZXIpOgorICAgICAgICAoZnJhbWVidWZmZXJUZXh0dXJlTGF5ZXIpOgorICAgICAg
ICAoaW52YWxpZGF0ZUZyYW1lYnVmZmVyKToKKyAgICAgICAgKGludmFsaWRhdGVTdWJGcmFtZWJ1
ZmZlcik6CisgICAgICAgIChyZWFkQnVmZmVyKToKKyAgICAgICAgKHJlbmRlcmJ1ZmZlclN0b3Jh
Z2VNdWx0aXNhbXBsZSk6CisgICAgICAgICh0ZXhTdG9yYWdlMkQpOgorICAgICAgICAodGV4U3Rv
cmFnZTNEKToKKyAgICAgICAgKHRleEltYWdlM0QwKToKKyAgICAgICAgKHRleEltYWdlM0QxKToK
KyAgICAgICAgKHRleFN1YkltYWdlM0QwKToKKyAgICAgICAgKHRleFN1YkltYWdlM0QxKToKKyAg
ICAgICAgKGNvcHlUZXhTdWJJbWFnZTNEKToKKyAgICAgICAgKGNvbXByZXNzZWRUZXhJbWFnZTNE
MCk6CisgICAgICAgIChjb21wcmVzc2VkVGV4SW1hZ2UzRDEpOgorICAgICAgICAoY29tcHJlc3Nl
ZFRleFN1YkltYWdlM0QwKToKKyAgICAgICAgKGNvbXByZXNzZWRUZXhTdWJJbWFnZTNEMSk6Cisg
ICAgICAgIChnZXRGcmFnRGF0YUxvY2F0aW9uKToKKyAgICAgICAgKHVuaWZvcm0xdWkpOgorICAg
ICAgICAodW5pZm9ybTJ1aSk6CisgICAgICAgICh1bmlmb3JtM3VpKToKKyAgICAgICAgKHVuaWZv
cm00dWkpOgorICAgICAgICAodW5pZm9ybTF1aXYpOgorICAgICAgICAodW5pZm9ybTJ1aXYpOgor
ICAgICAgICAodW5pZm9ybTN1aXYpOgorICAgICAgICAodW5pZm9ybTR1aXYpOgorICAgICAgICAo
dW5pZm9ybU1hdHJpeDJ4M2Z2KToKKyAgICAgICAgKHVuaWZvcm1NYXRyaXgzeDJmdik6CisgICAg
ICAgICh1bmlmb3JtTWF0cml4Mng0ZnYpOgorICAgICAgICAodW5pZm9ybU1hdHJpeDR4MmZ2KToK
KyAgICAgICAgKHVuaWZvcm1NYXRyaXgzeDRmdik6CisgICAgICAgICh1bmlmb3JtTWF0cml4NHgz
ZnYpOgorICAgICAgICAodmVydGV4QXR0cmliSTRpKToKKyAgICAgICAgKHZlcnRleEF0dHJpYkk0
aXYpOgorICAgICAgICAodmVydGV4QXR0cmliSTR1aSk6CisgICAgICAgICh2ZXJ0ZXhBdHRyaWJJ
NHVpdik6CisgICAgICAgICh2ZXJ0ZXhBdHRyaWJJUG9pbnRlcik6CisgICAgICAgIChkcmF3UmFu
Z2VFbGVtZW50cyk6CisgICAgICAgIChkcmF3QnVmZmVycyk6CisgICAgICAgIChjbGVhckJ1ZmZl
cml2KToKKyAgICAgICAgKGNsZWFyQnVmZmVydWl2KToKKyAgICAgICAgKGNsZWFyQnVmZmVyZnYp
OgorICAgICAgICAoY2xlYXJCdWZmZXJmaSk6CisgICAgICAgIChjcmVhdGVRdWVyeSk6CisgICAg
ICAgIChkZWxldGVRdWVyeSk6CisgICAgICAgIChpc1F1ZXJ5KToKKyAgICAgICAgKGJlZ2luUXVl
cnkpOgorICAgICAgICAoZW5kUXVlcnkpOgorICAgICAgICAoZ2V0UXVlcnkpOgorICAgICAgICAo
Z2V0UXVlcnlPYmplY3R1aSk6CisgICAgICAgIChjcmVhdGVTYW1wbGVyKToKKyAgICAgICAgKGRl
bGV0ZVNhbXBsZXIpOgorICAgICAgICAoaXNTYW1wbGVyKToKKyAgICAgICAgKGJpbmRTYW1wbGVy
KToKKyAgICAgICAgKHNhbXBsZXJQYXJhbWV0ZXJpKToKKyAgICAgICAgKHNhbXBsZXJQYXJhbWV0
ZXJmKToKKyAgICAgICAgKGdldFNhbXBsZXJQYXJhbWV0ZXJmKToKKyAgICAgICAgKGdldFNhbXBs
ZXJQYXJhbWV0ZXJpKToKKyAgICAgICAgKGZlbmNlU3luYyk6CisgICAgICAgIChpc1N5bmMpOgor
ICAgICAgICAoZGVsZXRlU3luYyk6CisgICAgICAgIChjbGllbnRXYWl0U3luYyk6CisgICAgICAg
ICh3YWl0U3luYyk6CisgICAgICAgIChnZXRTeW5jaSk6CisgICAgICAgIChjcmVhdGVUcmFuc2Zv
cm1GZWVkYmFjayk6CisgICAgICAgIChkZWxldGVUcmFuc2Zvcm1GZWVkYmFjayk6CisgICAgICAg
IChpc1RyYW5zZm9ybUZlZWRiYWNrKToKKyAgICAgICAgKGJpbmRUcmFuc2Zvcm1GZWVkYmFjayk6
CisgICAgICAgIChiZWdpblRyYW5zZm9ybUZlZWRiYWNrKToKKyAgICAgICAgKGVuZFRyYW5zZm9y
bUZlZWRiYWNrKToKKyAgICAgICAgKHRyYW5zZm9ybUZlZWRiYWNrVmFyeWluZ3MpOgorICAgICAg
ICAoZ2V0VHJhbnNmb3JtRmVlZGJhY2tWYXJ5aW5nKToKKyAgICAgICAgKHBhdXNlVHJhbnNmb3Jt
RmVlZGJhY2spOgorICAgICAgICAocmVzdW1lVHJhbnNmb3JtRmVlZGJhY2spOgorICAgICAgICAo
YmluZEJ1ZmZlckJhc2UpOgorICAgICAgICAoYmluZEJ1ZmZlclJhbmdlKToKKyAgICAgICAgKGdl
dFVuaWZvcm1JbmRpY2VzKToKKyAgICAgICAgKGdldEFjdGl2ZVVuaWZvcm1zKToKKyAgICAgICAg
KGdldFVuaWZvcm1CbG9ja0luZGV4KToKKyAgICAgICAgKGdldEFjdGl2ZVVuaWZvcm1CbG9ja05h
bWUpOgorICAgICAgICAodW5pZm9ybUJsb2NrQmluZGluZyk6CisgICAgICAgIChnZXRBY3RpdmVV
bmlmb3JtQmxvY2tpdik6CisgICAgICAgIChnZXRHcmFwaGljc1Jlc2V0U3RhdHVzQVJCKToKKyAg
ICAgICAgKGdldFRyYW5zbGF0ZWRTaGFkZXJTb3VyY2VBTkdMRSk6CisgICAgICAgIChkcmF3QnVm
ZmVyc0VYVCk6CisgICAgICAgIChnZXRJbnRlcm5hbGZvcm1hdGl2KToKKyAgICAgICAgKG11bHRp
RHJhd0FycmF5c0FOR0xFKToKKyAgICAgICAgKG11bHRpRHJhd0FycmF5c0luc3RhbmNlZEFOR0xF
KToKKyAgICAgICAgKG11bHRpRHJhd0VsZW1lbnRzQU5HTEUpOgorICAgICAgICAobXVsdGlEcmF3
RWxlbWVudHNJbnN0YW5jZWRBTkdMRSk6CisgICAgICAgIChwYWludFJlbmRlcmluZ1Jlc3VsdHNU
b1BpeGVsQnVmZmVyKToKKyAgICAgICAgKiBHUFVQcm9jZXNzL2dyYXBoaWNzL1dlYkdQVS9SZW1v
dGVHUFUuY3BwOgorICAgICAgICAoV2ViS2l0OjpSZW1vdGVHUFU6OlJlbW90ZUdQVSk6CisgICAg
ICAgIChXZWJLaXQ6OlJlbW90ZUdQVTo6aW5pdGlhbGl6ZSk6CisgICAgICAgIChXZWJLaXQ6OlJl
bW90ZUdQVTo6c3RvcExpc3RlbmluZ0ZvcklQQyk6CisgICAgICAgIChXZWJLaXQ6OlJlbW90ZUdQ
VTo6d29ya1F1ZXVlSW5pdGlhbGl6ZSk6CisgICAgICAgIChXZWJLaXQ6OlJlbW90ZUdQVTo6d29y
a1F1ZXVlVW5pbml0aWFsaXplKToKKyAgICAgICAgKFdlYktpdDo6UmVtb3RlR1BVOjpyZXF1ZXN0
QWRhcHRlcik6CisgICAgICAgICogR1BVUHJvY2Vzcy9ncmFwaGljcy9XZWJHUFUvUmVtb3RlR1BV
Lmg6CisgICAgICAgICogR1BVUHJvY2Vzcy9tZWRpYS9SZW1vdGVWaWRlb0ZyYW1lT2JqZWN0SGVh
cC5jcHA6CisgICAgICAgIChXZWJLaXQ6OlJlbW90ZVZpZGVvRnJhbWVPYmplY3RIZWFwOjp+UmVt
b3RlVmlkZW9GcmFtZU9iamVjdEhlYXApOgorICAgICAgICAoV2ViS2l0OjpSZW1vdGVWaWRlb0Zy
YW1lT2JqZWN0SGVhcDo6c3RvcExpc3RlbmluZ0ZvcklQQyk6CisgICAgICAgIChXZWJLaXQ6OlJl
bW90ZVZpZGVvRnJhbWVPYmplY3RIZWFwOjpyZWxlYXNlVmlkZW9GcmFtZSk6CisgICAgICAgICog
R1BVUHJvY2Vzcy9tZWRpYS9SZW1vdGVWaWRlb0ZyYW1lT2JqZWN0SGVhcC5oOgorICAgICAgICAq
IFBsYXRmb3JtL0lQQy9TdHJlYW1Db25uZWN0aW9uV29ya1F1ZXVlLmNwcDoKKyAgICAgICAgKElQ
Qzo6U3RyZWFtQ29ubmVjdGlvbldvcmtRdWV1ZTo6YXNzZXJ0SXNDdXJyZW50IGNvbnN0KToKKyAg
ICAgICAgKiBQbGF0Zm9ybS9JUEMvU3RyZWFtQ29ubmVjdGlvbldvcmtRdWV1ZS5oOgorICAgICAg
ICAoSVBDOjpXVEZfQVNTRVJUU19BQ1FVSVJFRF9DQVBBQklMSVRZKToKKwogMjAyMi0wMi0yMyAg
S2ltbW8gS2lubnVuZW4gIDxra2lubnVuZW5AYXBwbGUuY29tPgogCiAgICAgICAgIEZpeCBHUFVQ
IFdlYkdMIGdlbmVyYXRvciBzY3JpcHQgd3J0IHVuaW5pdGlhbGlzZWQgc2l6ZWQgc3BhbgpkaWZm
IC0tZ2l0IGEvU291cmNlL1dURi93dGYvVGhyZWFkaW5nLmggYi9Tb3VyY2UvV1RGL3d0Zi9UaHJl
YWRpbmcuaAppbmRleCAyMzZlYzQzZjUzODFhZWI4YTRkZGNjNTI4MGZiOTVjYTkwYzM4NDY5Li5m
Y2QzMGQ5NjU3MzQ3MmMyOTc2OTM3Y2EyZWFlNzdlMGZhN2IxYzE2IDEwMDY0NAotLS0gYS9Tb3Vy
Y2UvV1RGL3d0Zi9UaHJlYWRpbmcuaAorKysgYi9Tb3VyY2UvV1RGL3d0Zi9UaHJlYWRpbmcuaApA
QCAtNDUsNiArNDUsNyBAQAogI2luY2x1ZGUgPHd0Zi9TdGFja0JvdW5kcy5oPgogI2luY2x1ZGUg
PHd0Zi9TdGFja1N0YXRzLmg+CiAjaW5jbHVkZSA8d3RmL1RocmVhZFNhZmVSZWZDb3VudGVkLmg+
CisjaW5jbHVkZSA8d3RmL1RocmVhZFNhZmV0eUFuYWx5c2lzLmg+CiAjaW5jbHVkZSA8d3RmL1Zl
Y3Rvci5oPgogI2luY2x1ZGUgPHd0Zi9Xb3JkTG9jay5oPgogI2luY2x1ZGUgPHd0Zi90ZXh0L0F0
b21TdHJpbmdUYWJsZS5oPgpAQCAtMTAyLDcgKzEwMyw3IEBAIHB1YmxpYzoKICAgICBXVEZfRVhQ
T1JUX1BSSVZBVEUgflRocmVhZFN1c3BlbmRMb2NrZXIoKTsKIH07CiAKLWNsYXNzIFRocmVhZCA6
IHB1YmxpYyBUaHJlYWRTYWZlUmVmQ291bnRlZDxUaHJlYWQ+IHsKK2NsYXNzIFdURl9DQVBBQklM
SVRZKCJpcyBjdXJyZW50IikgVGhyZWFkIDogcHVibGljIFRocmVhZFNhZmVSZWZDb3VudGVkPFRo
cmVhZD4gewogICAgIHN0YXRpYyBzdGQ6OmF0b21pYzx1aW50MzJfdD4gc191aWQ7CiBwdWJsaWM6
CiAgICAgZnJpZW5kIGNsYXNzIFRocmVhZEdyb3VwOwpAQCAtNDI3LDkgKzQyOCwxNSBAQCBpbmxp
bmUgVGhyZWFkJiBUaHJlYWQ6OmN1cnJlbnQoKQogICAgIHJldHVybiBpbml0aWFsaXplQ3VycmVu
dFRMUygpOwogfQogCitpbmxpbmUgdm9pZCBhc3NlcnRJc0N1cnJlbnQoY29uc3QgVGhyZWFkJiB0
aHJlYWQpIFdURl9BU1NFUlRTX0FDUVVJUkVEX0NBUEFCSUxJVFkodGhyZWFkKQoreworICAgIEFT
U0VSVCgmdGhyZWFkID09ICZUaHJlYWQ6OmN1cnJlbnQoKSk7Cit9CisKIH0gLy8gbmFtZXNwYWNl
IFdURgogCiB1c2luZyBXVEY6OlRocmVhZFN1c3BlbmRMb2NrZXI7CiB1c2luZyBXVEY6OlRocmVh
ZDsKIHVzaW5nIFdURjo6VGhyZWFkVHlwZTsKIHVzaW5nIFdURjo6R0NUaHJlYWRUeXBlOwordXNp
bmcgV1RGOjphc3NlcnRJc0N1cnJlbnQ7CmRpZmYgLS1naXQgYS9Tb3VyY2UvV1RGL3d0Zi9Xb3Jr
UXVldWUuaCBiL1NvdXJjZS9XVEYvd3RmL1dvcmtRdWV1ZS5oCmluZGV4IDM2OGMwNjZkOGY5NmI0
YmNlNzQzMTgyNTJlM2MwMjY2NjFkOGY2OTcuLjNmNjY0ZmVjNTkzNTRhZmRjZmUwNDhmMGZiZTdh
YTE3MWVjMjgyZTcgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XVEYvd3RmL1dvcmtRdWV1ZS5oCisrKyBi
L1NvdXJjZS9XVEYvd3RmL1dvcmtRdWV1ZS5oCkBAIC0zMCw2ICszMCw3IEBACiAjaW5jbHVkZSA8
d3RmL0ZvcndhcmQuaD4KICNpbmNsdWRlIDx3dGYvRnVuY3Rpb25EaXNwYXRjaGVyLmg+CiAjaW5j
bHVkZSA8d3RmL1NlY29uZHMuaD4KKyNpbmNsdWRlIDx3dGYvVGhyZWFkU2FmZXR5QW5hbHlzaXMu
aD4KICNpbmNsdWRlIDx3dGYvVGhyZWFkaW5nLmg+CiAKICNpZiBVU0UoQ09DT0FfRVZFTlRfTE9P
UCkKQEAgLTc1LDYgKzc2LDkgQEAgcHJvdGVjdGVkOgogICAgIE9TT2JqZWN0UHRyPGRpc3BhdGNo
X3F1ZXVlX3Q+IG1fZGlzcGF0Y2hRdWV1ZTsKICNlbHNlCiAgICAgUnVuTG9vcCogbV9ydW5Mb29w
OworI2lmIEFTU0VSVF9FTkFCTEVECisgICAgdWludDMyX3QgbV90aHJlYWRJRCB7IDAgfTsKKyNl
bmRpZgogI2VuZGlmCiB9OwogCkBAIC04Myw4ICs4Nyw5IEBAIHByb3RlY3RlZDoKICAqIFJ1bm5h
YmxlcyBkaXNwYXRjaGVkIHRvIGEgV29ya1F1ZXVlIGFyZSByZXF1aXJlZCB0byBleGVjdXRlIHNl
cmlhbGx5LgogICogVGhhdCBpcywgdHdvIGRpZmZlcmVudCBydW5uYWJsZXMgZGlzcGF0Y2hlZCB0
byB0aGUgV29ya1F1ZXVlIHNob3VsZCBuZXZlciBiZSBhbGxvd2VkIHRvIGV4ZWN1dGUgc2ltdWx0
YW5lb3VzbHkuCiAgKiBUaGV5IG1heSBiZSBleGVjdXRlZCBvbiBkaWZmZXJlbnQgdGhyZWFkcyBi
dXQgY2FuIHNhZmVseSBiZSB1c2VkIGJ5IG9iamVjdHMgdGhhdCBhcmVuJ3QgYWxyZWFkeSB0aHJl
YWRzYWZlLgorICogVXNlIGBhc3NlcnRJc0N1cnJlbnQobV9teVF1ZXVlKTtgIGluIGEgcnVubmFi
bGUgdG8gYXNzZXJ0IHRoYXQgdGhlIHJ1bm5hYmxlIHJ1bnMgaW4gYSBzcGVjaWZpYyBxdWV1ZS4K
ICAqLwotY2xhc3MgV29ya1F1ZXVlIDogcHVibGljIFdvcmtRdWV1ZUJhc2UgeworY2xhc3MgV1RG
X0NBUEFCSUxJVFkoImlzIGN1cnJlbnQiKSBXb3JrUXVldWUgOiBwdWJsaWMgV29ya1F1ZXVlQmFz
ZSB7CiBwdWJsaWM6CiAgICAgV1RGX0VYUE9SVF9QUklWQVRFIHN0YXRpYyBXb3JrUXVldWUmIG1h
aW4oKTsKIApAQCAtMTA2LDggKzExMSwyMCBAQCBwcml2YXRlOgogICAgIGV4cGxpY2l0IFdvcmtR
dWV1ZShSdW5Mb29wJik7CiAjZW5kaWYKICAgICBzdGF0aWMgUmVmPFdvcmtRdWV1ZT4gY29uc3Ry
dWN0TWFpbldvcmtRdWV1ZSgpOworCisjaWYgQVNTRVJUX0VOQUJMRUQKKyAgICBXVEZfRVhQT1JU
X1BSSVZBVEUgdm9pZCBhc3NlcnRJc0N1cnJlbnQoKSBjb25zdDsKKyAgICBmcmllbmQgdm9pZCBh
c3NlcnRJc0N1cnJlbnQoY29uc3QgV29ya1F1ZXVlJik7CisjZW5kaWYKIH07CiAKK2lubGluZSB2
b2lkIGFzc2VydElzQ3VycmVudChjb25zdCBXb3JrUXVldWUmIHdvcmtRdWV1ZSkgV1RGX0FTU0VS
VFNfQUNRVUlSRURfQ0FQQUJJTElUWSh3b3JrUXVldWUpCit7CisjaWYgQVNTRVJUX0VOQUJMRUQK
KyAgICB3b3JrUXVldWUuYXNzZXJ0SXNDdXJyZW50KCk7CisjZW5kaWYKK30KKwogLyoqCiAgKiBB
IENvbmN1cnJlbnRXb3JrUXVldWUgdW5saWtlIGEgV29ya1F1ZXVlIGRvZXNuJ3QgZ3VhcmFudGVl
IHRoZSBvcmRlciBpbiB3aGljaCB0aGUgZGlzcGF0Y2hlZCBydW5uYWJsZSB3aWxsIHJ1bgogICog
YW5kIGVhY2ggY2FuIHJ1biBjb25jdXJyZW50bHkgb24gZGlmZmVyZW50IHRocmVhZHMuCkBAIC0x
MjcsMyArMTQ0LDQgQEAgcHJpdmF0ZToKIAogdXNpbmcgV1RGOjpXb3JrUXVldWU7CiB1c2luZyBX
VEY6OkNvbmN1cnJlbnRXb3JrUXVldWU7Cit1c2luZyBXVEY6OmFzc2VydElzQ3VycmVudDsKZGlm
ZiAtLWdpdCBhL1NvdXJjZS9XVEYvd3RmL2NvY29hL1dvcmtRdWV1ZUNvY29hLmNwcCBiL1NvdXJj
ZS9XVEYvd3RmL2NvY29hL1dvcmtRdWV1ZUNvY29hLmNwcAppbmRleCBmOWY0N2YxMWM3ODQ1ZDI3
NWUxMWNmNzIwZDBhODU2MjU5Y2IyMjFjLi5mOTg2YmI0ODNjMTE1NDkxZTZiOWQ1YjVlYjU3OTI4
N2U0NWMzNWNhIDEwMDY0NAotLS0gYS9Tb3VyY2UvV1RGL3d0Zi9jb2NvYS9Xb3JrUXVldWVDb2Nv
YS5jcHAKKysrIGIvU291cmNlL1dURi93dGYvY29jb2EvV29ya1F1ZXVlQ29jb2EuY3BwCkBAIC0x
MDIsNiArMTAyLDEzIEBAIFJlZjxXb3JrUXVldWU+IFdvcmtRdWV1ZTo6Y29uc3RydWN0TWFpbldv
cmtRdWV1ZSgpCiAgICAgcmV0dXJuIGFkb3B0UmVmKCpuZXcgV29ya1F1ZXVlKGRpc3BhdGNoX2dl
dF9tYWluX3F1ZXVlKCkpKTsKIH0KIAorI2lmIEFTU0VSVF9FTkFCTEVECit2b2lkIFdvcmtRdWV1
ZTo6YXNzZXJ0SXNDdXJyZW50KCkgY29uc3QKK3sKKyAgICBkaXNwYXRjaF9hc3NlcnRfcXVldWUo
bV9kaXNwYXRjaFF1ZXVlLmdldCgpKTsKK30KKyNlbmRpZgorCiB2b2lkIENvbmN1cnJlbnRXb3Jr
UXVldWU6OmFwcGx5KHNpemVfdCBpdGVyYXRpb25zLCBXVEY6OkZ1bmN0aW9uPHZvaWQoc2l6ZV90
IGluZGV4KT4mJiBmdW5jdGlvbikKIHsKICAgICBkaXNwYXRjaF9hcHBseShpdGVyYXRpb25zLCBk
aXNwYXRjaF9nZXRfZ2xvYmFsX3F1ZXVlKERJU1BBVENIX1FVRVVFX1BSSU9SSVRZX0RFRkFVTFQs
IDApLCBtYWtlQmxvY2tQdHIoW2Z1bmN0aW9uID0gV1RGTW92ZShmdW5jdGlvbildKHNpemVfdCBp
bmRleCkgewpkaWZmIC0tZ2l0IGEvU291cmNlL1dURi93dGYvZ2VuZXJpYy9Xb3JrUXVldWVHZW5l
cmljLmNwcCBiL1NvdXJjZS9XVEYvd3RmL2dlbmVyaWMvV29ya1F1ZXVlR2VuZXJpYy5jcHAKaW5k
ZXggZDI1N2QzYTcyMDRlZmIxY2IzYTVkODk1NDYxMGYyYjAyN2E4ZGU1MS4uYjU0MDAzZmFjOGE0
ZDk5Y2YxMWNmNDc2MDFmYmFiOTNlODVjMjI2NyAxMDA2NDQKLS0tIGEvU291cmNlL1dURi93dGYv
Z2VuZXJpYy9Xb3JrUXVldWVHZW5lcmljLmNwcAorKysgYi9Tb3VyY2UvV1RGL3d0Zi9nZW5lcmlj
L1dvcmtRdWV1ZUdlbmVyaWMuY3BwCkBAIC00Myw2ICs0Myw5IEBAIHZvaWQgV29ya1F1ZXVlQmFz
ZTo6cGxhdGZvcm1Jbml0aWFsaXplKGNvbnN0IGNoYXIqIG5hbWUsIFR5cGUsIFFPUyBxb3MpCiB7
CiAgICAgQmluYXJ5U2VtYXBob3JlIHNlbWFwaG9yZTsKICAgICBUaHJlYWQ6OmNyZWF0ZShuYW1l
LCBbJl0geworI2lmIEFTU0VSVF9FTkFCTEVECisgICAgICAgIG1fdGhyZWFkSUQgPSBUaHJlYWQ6
OmN1cnJlbnQoKS51aWQoKTsKKyNlbmRpZgogICAgICAgICBtX3J1bkxvb3AgPSAmUnVuTG9vcDo6
Y3VycmVudCgpOwogICAgICAgICBzZW1hcGhvcmUuc2lnbmFsKCk7CiAgICAgICAgIG1fcnVuTG9v
cC0+cnVuKCk7CkBAIC04NSw0ICs4OCwxMSBAQCBSZWY8V29ya1F1ZXVlPiBXb3JrUXVldWU6OmNv
bnN0cnVjdE1haW5Xb3JrUXVldWUoKQogICAgIHJldHVybiBhZG9wdFJlZigqbmV3IFdvcmtRdWV1
ZShSdW5Mb29wOjptYWluKCkpKTsKIH0KIAorI2lmIEFTU0VSVF9FTkFCTEVECit2b2lkIFdvcmtR
dWV1ZTo6YXNzZXJ0SXNDdXJyZW50KCkKK3sKKyAgICBBU1NFUlQobV90aHJlYWRJRCA9PSBUaHJl
YWQ6OmN1cnJlbnQoKS51aWQoKSk7Cit9CisjZW5kaWYKKwogfQpkaWZmIC0tZ2l0IGEvU291cmNl
L1dlYktpdC9HUFVQcm9jZXNzL2dyYXBoaWNzL1JlbW90ZUdyYXBoaWNzQ29udGV4dEdMLmNwcCBi
L1NvdXJjZS9XZWJLaXQvR1BVUHJvY2Vzcy9ncmFwaGljcy9SZW1vdGVHcmFwaGljc0NvbnRleHRH
TC5jcHAKaW5kZXggZDNjYzI5ZmJjZGNhYjZiNDBiNTA4ZTQxZjQ1NmM0NmFlYzc0MjEyOS4uNWFk
YTYxNjg1MDMxNGViMzY2MjI5ZWUwYTMwNzExNGI4NWExNGE0YiAxMDA2NDQKLS0tIGEvU291cmNl
L1dlYktpdC9HUFVQcm9jZXNzL2dyYXBoaWNzL1JlbW90ZUdyYXBoaWNzQ29udGV4dEdMLmNwcAor
KysgYi9Tb3VyY2UvV2ViS2l0L0dQVVByb2Nlc3MvZ3JhcGhpY3MvUmVtb3RlR3JhcGhpY3NDb250
ZXh0R0wuY3BwCkBAIC04MSw4ICs4MSw2IEBAIFJlbW90ZUdyYXBoaWNzQ29udGV4dEdMOjp+UmVt
b3RlR3JhcGhpY3NDb250ZXh0R0woKQogewogICAgIEFTU0VSVCghbV9zdHJlYW1Db25uZWN0aW9u
KTsKICAgICBBU1NFUlQoIW1fY29udGV4dCk7Ci0gICAgLy8gTWlnaHQgYmUgZGVzdHJveWVkIG9u
IG1haW4gdGhyZWFkIG9yIHN0cmVhbSBwcm9jZXNzaW5nIHRocmVhZC4KLSAgICBtX3N0cmVhbVRo
cmVhZC5yZXNldCgpOwogfQogCiB2b2lkIFJlbW90ZUdyYXBoaWNzQ29udGV4dEdMOjppbml0aWFs
aXplKEdyYXBoaWNzQ29udGV4dEdMQXR0cmlidXRlcyYmIGF0dHJpYnV0ZXMpCkBAIC0xMDksNyAr
MTA3LDcgQEAgdm9pZCBSZW1vdGVHcmFwaGljc0NvbnRleHRHTDo6ZGlzcGxheVdhc1JlY29uZmln
dXJlZCgpCiB7CiAgICAgYXNzZXJ0SXNNYWluUnVuTG9vcCgpOwogICAgIHJlbW90ZUdyYXBoaWNz
Q29udGV4dEdMU3RyZWFtV29ya1F1ZXVlKCkuZGlzcGF0Y2goW3Byb3RlY3RlZFRoaXMgPSBSZWYg
eyAqdGhpcyB9XSgpIHsKLSAgICAgICAgYXNzZXJ0SXNDdXJyZW50KHByb3RlY3RlZFRoaXMtPm1f
c3RyZWFtVGhyZWFkKTsKKyAgICAgICAgYXNzZXJ0SXNDdXJyZW50KHByb3RlY3RlZFRoaXMtPndv
cmtRdWV1ZSgpKTsKICAgICAgICAgcHJvdGVjdGVkVGhpcy0+bV9jb250ZXh0LT51cGRhdGVDb250
ZXh0T25EaXNwbGF5UmVjb25maWd1cmF0aW9uKCk7CiAgICAgfSk7CiB9CkBAIC0xMTcsOCArMTE1
LDcgQEAgdm9pZCBSZW1vdGVHcmFwaGljc0NvbnRleHRHTDo6ZGlzcGxheVdhc1JlY29uZmlndXJl
ZCgpCiAKIHZvaWQgUmVtb3RlR3JhcGhpY3NDb250ZXh0R0w6OndvcmtRdWV1ZUluaXRpYWxpemUo
V2ViQ29yZTo6R3JhcGhpY3NDb250ZXh0R0xBdHRyaWJ1dGVzJiYgYXR0cmlidXRlcykKIHsKLSAg
ICBtX3N0cmVhbVRocmVhZC5yZXNldCgpOwotICAgIGFzc2VydElzQ3VycmVudChtX3N0cmVhbVRo
cmVhZCk7CisgICAgYXNzZXJ0SXNDdXJyZW50KHdvcmtRdWV1ZSgpKTsKICAgICBwbGF0Zm9ybVdv
cmtRdWV1ZUluaXRpYWxpemUoV1RGTW92ZShhdHRyaWJ1dGVzKSk7CiAgICAgaWYgKG1fY29udGV4
dCkgewogICAgICAgICBtX2NvbnRleHQtPmFkZENsaWVudCgqdGhpcyk7CkBAIC0xMzEsMTkgKzEy
OCwxOSBAQCB2b2lkIFJlbW90ZUdyYXBoaWNzQ29udGV4dEdMOjp3b3JrUXVldWVJbml0aWFsaXpl
KFdlYkNvcmU6OkdyYXBoaWNzQ29udGV4dEdMQXR0cgogCiB2b2lkIFJlbW90ZUdyYXBoaWNzQ29u
dGV4dEdMOjp3b3JrUXVldWVVbmluaXRpYWxpemUoKQogewotICAgIGFzc2VydElzQ3VycmVudCht
X3N0cmVhbVRocmVhZCk7CisgICAgYXNzZXJ0SXNDdXJyZW50KHdvcmtRdWV1ZSgpKTsKICAgICBt
X2NvbnRleHQgPSBudWxscHRyOwogICAgIG1fc3RyZWFtQ29ubmVjdGlvbiA9IG51bGxwdHI7CiB9
CiAKIHZvaWQgUmVtb3RlR3JhcGhpY3NDb250ZXh0R0w6OmRpZENvbXBvc2l0ZSgpCiB7Ci0gICAg
YXNzZXJ0SXNDdXJyZW50KG1fc3RyZWFtVGhyZWFkKTsKKyAgICBhc3NlcnRJc0N1cnJlbnQod29y
a1F1ZXVlKCkpOwogfQogCiB2b2lkIFJlbW90ZUdyYXBoaWNzQ29udGV4dEdMOjpmb3JjZUNvbnRl
eHRMb3N0KCkKIHsKLSAgICBhc3NlcnRJc0N1cnJlbnQobV9zdHJlYW1UaHJlYWQpOworICAgIGFz
c2VydElzQ3VycmVudCh3b3JrUXVldWUoKSk7CiAgICAgc2VuZChNZXNzYWdlczo6UmVtb3RlR3Jh
cGhpY3NDb250ZXh0R0xQcm94eTo6V2FzTG9zdCgpKTsKIH0KIApAQCAtMTU0LDEzICsxNTEsMTMg
QEAgdm9pZCBSZW1vdGVHcmFwaGljc0NvbnRleHRHTDo6cmVjeWNsZUNvbnRleHQoKQogCiB2b2lk
IFJlbW90ZUdyYXBoaWNzQ29udGV4dEdMOjpkaXNwYXRjaENvbnRleHRDaGFuZ2VkTm90aWZpY2F0
aW9uKCkKIHsKLSAgICBhc3NlcnRJc0N1cnJlbnQobV9zdHJlYW1UaHJlYWQpOworICAgIGFzc2Vy
dElzQ3VycmVudCh3b3JrUXVldWUoKSk7CiAgICAgc2VuZChNZXNzYWdlczo6UmVtb3RlR3JhcGhp
Y3NDb250ZXh0R0xQcm94eTo6V2FzQ2hhbmdlZCgpKTsKIH0KIAogdm9pZCBSZW1vdGVHcmFwaGlj
c0NvbnRleHRHTDo6cmVzaGFwZShpbnQzMl90IHdpZHRoLCBpbnQzMl90IGhlaWdodCkKIHsKLSAg
ICBhc3NlcnRJc0N1cnJlbnQobV9zdHJlYW1UaHJlYWQpOworICAgIGFzc2VydElzQ3VycmVudCh3
b3JrUXVldWUoKSk7CiAgICAgaWYgKHdpZHRoICYmIGhlaWdodCkKICAgICAgICAgbV9jb250ZXh0
LT5yZXNoYXBlKHdpZHRoLCBoZWlnaHQpOwogICAgIGVsc2UKQEAgLTE3MCw3ICsxNjcsNyBAQCB2
b2lkIFJlbW90ZUdyYXBoaWNzQ29udGV4dEdMOjpyZXNoYXBlKGludDMyX3Qgd2lkdGgsIGludDMy
X3QgaGVpZ2h0KQogI2lmICFQTEFURk9STShDT0NPQSkgJiYgIVBMQVRGT1JNKFdJTikKIHZvaWQg
UmVtb3RlR3JhcGhpY3NDb250ZXh0R0w6OnByZXBhcmVGb3JEaXNwbGF5KENvbXBsZXRpb25IYW5k
bGVyPHZvaWQoKT4mJiBjb21wbGV0aW9uSGFuZGxlcikKIHsKLSAgICBhc3NlcnRJc0N1cnJlbnQo
bV9zdHJlYW1UaHJlYWQpOworICAgIGFzc2VydElzQ3VycmVudCh3b3JrUXVldWUoKSk7CiAgICAg
bm90SW1wbGVtZW50ZWQoKTsKICAgICBjb21wbGV0aW9uSGFuZGxlcigpOwogfQpAQCAtMTc4LDI1
ICsxNzUsMjUgQEAgdm9pZCBSZW1vdGVHcmFwaGljc0NvbnRleHRHTDo6cHJlcGFyZUZvckRpc3Bs
YXkoQ29tcGxldGlvbkhhbmRsZXI8dm9pZCgpPiYmIGNvbXAKIAogdm9pZCBSZW1vdGVHcmFwaGlj
c0NvbnRleHRHTDo6c3ludGhlc2l6ZUdMRXJyb3IodWludDMyX3QgZXJyb3IpCiB7Ci0gICAgYXNz
ZXJ0SXNDdXJyZW50KG1fc3RyZWFtVGhyZWFkKTsKKyAgICBhc3NlcnRJc0N1cnJlbnQod29ya1F1
ZXVlKCkpOwogICAgIG1fY29udGV4dC0+c3ludGhlc2l6ZUdMRXJyb3Ioc3RhdGljX2Nhc3Q8R0NH
TGVudW0+KGVycm9yKSk7CiB9CiAKIHZvaWQgUmVtb3RlR3JhcGhpY3NDb250ZXh0R0w6OmdldEVy
cm9yKENvbXBsZXRpb25IYW5kbGVyPHZvaWQodWludDMyX3QpPiYmIGNvbXBsZXRpb25IYW5kbGVy
KQogewotICAgIGFzc2VydElzQ3VycmVudChtX3N0cmVhbVRocmVhZCk7CisgICAgYXNzZXJ0SXND
dXJyZW50KHdvcmtRdWV1ZSgpKTsKICAgICBjb21wbGV0aW9uSGFuZGxlcihzdGF0aWNfY2FzdDx1
aW50MzJfdD4obV9jb250ZXh0LT5nZXRFcnJvcigpKSk7CiB9CiAKIHZvaWQgUmVtb3RlR3JhcGhp
Y3NDb250ZXh0R0w6OmVuc3VyZUV4dGVuc2lvbkVuYWJsZWQoU3RyaW5nJiYgZXh0ZW5zaW9uKQog
ewotICAgIGFzc2VydElzQ3VycmVudChtX3N0cmVhbVRocmVhZCk7CisgICAgYXNzZXJ0SXNDdXJy
ZW50KHdvcmtRdWV1ZSgpKTsKICAgICBtX2NvbnRleHQtPmVuc3VyZUV4dGVuc2lvbkVuYWJsZWQo
ZXh0ZW5zaW9uKTsKIH0KIAogdm9pZCBSZW1vdGVHcmFwaGljc0NvbnRleHRHTDo6bWFya0NvbnRl
eHRDaGFuZ2VkKCkKIHsKLSAgICBhc3NlcnRJc0N1cnJlbnQobV9zdHJlYW1UaHJlYWQpOworICAg
IGFzc2VydElzQ3VycmVudCh3b3JrUXVldWUoKSk7CiAgICAgbV9jb250ZXh0LT5tYXJrQ29udGV4
dENoYW5nZWQoKTsKIH0KIApAQCAtMjA5LDcgKzIwNiw3IEBAIHZvaWQgUmVtb3RlR3JhcGhpY3ND
b250ZXh0R0w6OnBhaW50UmVuZGVyaW5nUmVzdWx0c1RvQ2FudmFzKFdlYkNvcmU6OlJlbmRlcmlu
Z1JlCiAKIHZvaWQgUmVtb3RlR3JhcGhpY3NDb250ZXh0R0w6OnBhaW50UmVuZGVyaW5nUmVzdWx0
c1RvQ2FudmFzV2l0aFF1YWxpZmllZElkZW50aWZpZXIoUXVhbGlmaWVkUmVuZGVyaW5nUmVzb3Vy
Y2VJZGVudGlmaWVyIGltYWdlQnVmZmVyLCBDb21wbGV0aW9uSGFuZGxlcjx2b2lkKCk+JiYgY29t
cGxldGlvbkhhbmRsZXIpCiB7Ci0gICAgYXNzZXJ0SXNDdXJyZW50KG1fc3RyZWFtVGhyZWFkKTsK
KyAgICBhc3NlcnRJc0N1cnJlbnQod29ya1F1ZXVlKCkpOwogICAgIHBhaW50UGl4ZWxCdWZmZXJU
b0ltYWdlQnVmZmVyKG1fY29udGV4dC0+cmVhZFJlbmRlcmluZ1Jlc3VsdHNGb3JQYWludGluZygp
LCBpbWFnZUJ1ZmZlciwgV1RGTW92ZShjb21wbGV0aW9uSGFuZGxlcikpOwogfQogCkBAIC0yMjIs
MTQgKzIxOSwxNCBAQCB2b2lkIFJlbW90ZUdyYXBoaWNzQ29udGV4dEdMOjpwYWludENvbXBvc2l0
ZWRSZXN1bHRzVG9DYW52YXMoV2ViQ29yZTo6UmVuZGVyaW5nUgogCiB2b2lkIFJlbW90ZUdyYXBo
aWNzQ29udGV4dEdMOjpwYWludENvbXBvc2l0ZWRSZXN1bHRzVG9DYW52YXNXaXRoUXVhbGlmaWVk
SWRlbnRpZmllcihRdWFsaWZpZWRSZW5kZXJpbmdSZXNvdXJjZUlkZW50aWZpZXIgaW1hZ2VCdWZm
ZXIsIENvbXBsZXRpb25IYW5kbGVyPHZvaWQoKT4mJiBjb21wbGV0aW9uSGFuZGxlcikKIHsKLSAg
ICBhc3NlcnRJc0N1cnJlbnQobV9zdHJlYW1UaHJlYWQpOworICAgIGFzc2VydElzQ3VycmVudCh3
b3JrUXVldWUoKSk7CiAgICAgcGFpbnRQaXhlbEJ1ZmZlclRvSW1hZ2VCdWZmZXIobV9jb250ZXh0
LT5yZWFkQ29tcG9zaXRlZFJlc3VsdHNGb3JQYWludGluZygpLCBpbWFnZUJ1ZmZlciwgV1RGTW92
ZShjb21wbGV0aW9uSGFuZGxlcikpOwogfQogCiAjaWYgRU5BQkxFKE1FRElBX1NUUkVBTSkKIHZv
aWQgUmVtb3RlR3JhcGhpY3NDb250ZXh0R0w6OnBhaW50Q29tcG9zaXRlZFJlc3VsdHNUb01lZGlh
U2FtcGxlKENvbXBsZXRpb25IYW5kbGVyPHZvaWQoc3RkOjpvcHRpb25hbDxXZWJLaXQ6OlJlbW90
ZVZpZGVvRnJhbWVQcm94eTo6UHJvcGVydGllcz4mJik+JiYgY29tcGxldGlvbkhhbmRsZXIpCiB7
Ci0gICAgYXNzZXJ0SXNDdXJyZW50KG1fc3RyZWFtVGhyZWFkKTsKKyAgICBhc3NlcnRJc0N1cnJl
bnQod29ya1F1ZXVlKCkpOwogICAgIHN0ZDo6b3B0aW9uYWw8V2ViS2l0OjpSZW1vdGVWaWRlb0Zy
YW1lUHJveHk6OlByb3BlcnRpZXM+IHJlc3VsdDsKICAgICBpZiAoYXV0byB2aWRlb0ZyYW1lID0g
bV9jb250ZXh0LT5wYWludENvbXBvc2l0ZWRSZXN1bHRzVG9NZWRpYVNhbXBsZSgpKSB7CiAgICAg
ICAgIGF1dG8gd3JpdGUgPSBSZW1vdGVWaWRlb0ZyYW1lV3JpdGVSZWZlcmVuY2U6OmdlbmVyYXRl
Rm9yQWRkKCk7CkBAIC0yNDMsNyArMjQwLDcgQEAgdm9pZCBSZW1vdGVHcmFwaGljc0NvbnRleHRH
TDo6cGFpbnRDb21wb3NpdGVkUmVzdWx0c1RvTWVkaWFTYW1wbGUoQ29tcGxldGlvbkhhbmQKIAog
dm9pZCBSZW1vdGVHcmFwaGljc0NvbnRleHRHTDo6cGFpbnRQaXhlbEJ1ZmZlclRvSW1hZ2VCdWZm
ZXIoc3RkOjpvcHRpb25hbDxXZWJDb3JlOjpQaXhlbEJ1ZmZlcj4mJiBwaXhlbEJ1ZmZlciwgUXVh
bGlmaWVkUmVuZGVyaW5nUmVzb3VyY2VJZGVudGlmaWVyIHRhcmdldCwgQ29tcGxldGlvbkhhbmRs
ZXI8dm9pZCgpPiYmIGNvbXBsZXRpb25IYW5kbGVyKQogewotICAgIGFzc2VydElzQ3VycmVudCht
X3N0cmVhbVRocmVhZCk7CisgICAgYXNzZXJ0SXNDdXJyZW50KHdvcmtRdWV1ZSgpKTsKICAgICAv
LyBGSVhNRTogV2UgZG8gbm90IGhhdmUgZnVuY3Rpb25pbmcgcmVhZC93cml0ZSBmZW5jZXMgaW4g
UmVtb3RlUmVuZGVyaW5nQmFja2VuZC4gVGh1cyB0aGlzIGlzIHN5bmNocm9ub3VzLAogICAgIC8v
IGFzIGFyZSB0aGUgbWVzc2FnZXMgdGhhdCBjYWxsIHRoZXNlLgogICAgIExvY2sgbG9jazsKQEAg
LTI4Nyw3ICsyODQsNyBAQCB2b2lkIFJlbW90ZUdyYXBoaWNzQ29udGV4dEdMOjpjb3B5VGV4dHVy
ZUZyb21WaWRlb0ZyYW1lKFdlYktpdDo6UmVtb3RlVmlkZW9GcmFtZQogCiB2b2lkIFJlbW90ZUdy
YXBoaWNzQ29udGV4dEdMOjpzaW11bGF0ZUV2ZW50Rm9yVGVzdGluZyhXZWJDb3JlOjpHcmFwaGlj
c0NvbnRleHRHTDo6U2ltdWxhdGVkRXZlbnRGb3JUZXN0aW5nIGV2ZW50KQogewotICAgIGFzc2Vy
dElzQ3VycmVudChtX3N0cmVhbVRocmVhZCk7CisgICAgYXNzZXJ0SXNDdXJyZW50KHdvcmtRdWV1
ZSgpKTsKICAgICAvLyBGSVhNRTogb25seSBydW4gdGhpcyBpbiB0ZXN0aW5nIG1vZGUuIGh0dHBz
Oi8vYnVncy53ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9pZD0yMjI1NDQKICAgICBpZiAoZXZlbnQg
PT0gV2ViQ29yZTo6R3JhcGhpY3NDb250ZXh0R0w6OlNpbXVsYXRlZEV2ZW50Rm9yVGVzdGluZzo6
VGltZW91dCkgewogICAgICAgICAvLyBTaW11bGF0ZSB0aGUgdGltZW91dCBieSBqdXN0IGRpc2Nh
cmRpbmcgdGhlIGNvbnRleHQuIFRoZSBzdWJzZXF1ZW50IG1lc3NhZ2VzIGFjdCBsaWtlCmRpZmYg
LS1naXQgYS9Tb3VyY2UvV2ViS2l0L0dQVVByb2Nlc3MvZ3JhcGhpY3MvUmVtb3RlR3JhcGhpY3ND
b250ZXh0R0wuaCBiL1NvdXJjZS9XZWJLaXQvR1BVUHJvY2Vzcy9ncmFwaGljcy9SZW1vdGVHcmFw
aGljc0NvbnRleHRHTC5oCmluZGV4IGE1MDUyMjVjYzU4OWZkOWEwNmE1NmMzZDlhMWYxZjY0MGQ5
MDYzMGEuLmE5MTRlM2RjZjA2Yjk4YTc2NmRjMzRjMjQ0YzViYzI3ZjUwYTk5YmYgMTAwNjQ0Ci0t
LSBhL1NvdXJjZS9XZWJLaXQvR1BVUHJvY2Vzcy9ncmFwaGljcy9SZW1vdGVHcmFwaGljc0NvbnRl
eHRHTC5oCisrKyBiL1NvdXJjZS9XZWJLaXQvR1BVUHJvY2Vzcy9ncmFwaGljcy9SZW1vdGVHcmFw
aGljc0NvbnRleHRHTC5oCkBAIC02OSw2ICs2OSw5IEBAIG5hbWVzcGFjZSBXZWJLaXQgewogY2xh
c3MgUmVtb3RlVmlkZW9GcmFtZU9iamVjdEhlYXA7CiAjZW5kaWYKIAorSVBDOjpTdHJlYW1Db25u
ZWN0aW9uV29ya1F1ZXVlJiByZW1vdGVHcmFwaGljc0NvbnRleHRHTFN0cmVhbVdvcmtRdWV1ZSgp
OworCisKIC8vIEdQVSBwcm9jZXNzIHNpZGUgaW1wbGVtZW50YXRpb24gb2YgdGhhdCByZWNlaXZl
cyBtZXNzYWdlcyBhYm91dCBHcmFwaGljc0NvbnRleHRHTCBjYWxscwogLy8gYW5kIGlzc3VlcyBy
ZWFsIEdyYXBoaWNzQ29udGV4dEdMIGNhbGxzIGJhc2VkIG9uIHRoZSByZWNlaXZlZCBtZXNzYWdl
cy4KIC8vIFRoZSBpbXBsZW1lbnRhdGlvbiBpcyBsYXJnZWx5IGdlbmVyYXRlZCBieSBydW5uaW5n
IFRvb2xzL1NjcmlwdHMvZ2VuZXJhdGUtZ3B1cC13ZWJnbC4KQEAgLTg3LDYgKzkwLDcgQEAgcHVi
bGljOgogcHJvdGVjdGVkOgogICAgIFJlbW90ZUdyYXBoaWNzQ29udGV4dEdMKEdQVUNvbm5lY3Rp
b25Ub1dlYlByb2Nlc3MmLCBHcmFwaGljc0NvbnRleHRHTElkZW50aWZpZXIsIFJlbW90ZVJlbmRl
cmluZ0JhY2tlbmQmLCBJUEM6OlN0cmVhbUNvbm5lY3Rpb25CdWZmZXImJik7CiAgICAgdm9pZCBp
bml0aWFsaXplKFdlYkNvcmU6OkdyYXBoaWNzQ29udGV4dEdMQXR0cmlidXRlcyYmKTsKKyAgICBJ
UEM6OlN0cmVhbUNvbm5lY3Rpb25Xb3JrUXVldWUmIHdvcmtRdWV1ZSgpIGNvbnN0IHsgcmV0dXJu
IHJlbW90ZUdyYXBoaWNzQ29udGV4dEdMU3RyZWFtV29ya1F1ZXVlKCk7IH0KIAogICAgIHZvaWQg
d29ya1F1ZXVlSW5pdGlhbGl6ZShXZWJDb3JlOjpHcmFwaGljc0NvbnRleHRHTEF0dHJpYnV0ZXMm
Jik7CiAgICAgdmlydHVhbCB2b2lkIHBsYXRmb3JtV29ya1F1ZXVlSW5pdGlhbGl6ZShXZWJDb3Jl
OjpHcmFwaGljc0NvbnRleHRHTEF0dHJpYnV0ZXMmJikgeyB9OwpAQCAtMTM5LDE5ICsxNDMsMTYg
QEAgcHJvdGVjdGVkOgogI2Vsc2UKICAgICB1c2luZyBHQ0dMQ29udGV4dCA9IFdlYkNvcmU6Okdy
YXBoaWNzQ29udGV4dEdMVGV4dHVyZU1hcHBlcjsKICNlbmRpZgotICAgIAotICAgIFJlZlB0cjxH
Q0dMQ29udGV4dD4gbV9jb250ZXh0IFdURl9HVUFSREVEX0JZX0NBUEFCSUxJVFkobV9zdHJlYW1U
aHJlYWQpOworICAgIFJlZlB0cjxHQ0dMQ29udGV4dD4gbV9jb250ZXh0IFdURl9HVUFSREVEX0JZ
X0NBUEFCSUxJVFkod29ya1F1ZXVlKCkpOwogICAgIEdyYXBoaWNzQ29udGV4dEdMSWRlbnRpZmll
ciBtX2dyYXBoaWNzQ29udGV4dEdMSWRlbnRpZmllcjsKICAgICBSZWY8UmVtb3RlUmVuZGVyaW5n
QmFja2VuZD4gbV9yZW5kZXJpbmdCYWNrZW5kOwogI2lmIEVOQUJMRShWSURFTykKICAgICBSZWY8
UmVtb3RlVmlkZW9GcmFtZU9iamVjdEhlYXA+IG1fdmlkZW9GcmFtZU9iamVjdEhlYXA7CiAjZW5k
aWYKICAgICBTY29wZWRXZWJHTFJlbmRlcmluZ1Jlc291cmNlc1JlcXVlc3QgbV9yZW5kZXJpbmdS
ZXNvdXJjZXNSZXF1ZXN0OwotICAgIE5PX1VOSVFVRV9BRERSRVNTIFRocmVhZEFzc2VydGlvbiBt
X3N0cmVhbVRocmVhZDsKICAgICBXZWJDb3JlOjpQcm9jZXNzSWRlbnRpZmllciBtX3dlYlByb2Nl
c3NJZGVudGlmaWVyOwogfTsKIAotSVBDOjpTdHJlYW1Db25uZWN0aW9uV29ya1F1ZXVlJiByZW1v
dGVHcmFwaGljc0NvbnRleHRHTFN0cmVhbVdvcmtRdWV1ZSgpOwogCiB9IC8vIG5hbWVzcGFjZSBX
ZWJLaXQKIApkaWZmIC0tZ2l0IGEvU291cmNlL1dlYktpdC9HUFVQcm9jZXNzL2dyYXBoaWNzL1Jl
bW90ZUdyYXBoaWNzQ29udGV4dEdMQ29jb2EuY3BwIGIvU291cmNlL1dlYktpdC9HUFVQcm9jZXNz
L2dyYXBoaWNzL1JlbW90ZUdyYXBoaWNzQ29udGV4dEdMQ29jb2EuY3BwCmluZGV4IDc5ZGY5OWNl
MjljMzNhMGI0ZmE0NzAwMjU0NzA0ZjhlMDNlMWFjNzEuLmE0OTcwYzM3Mjk1NWUwMDUwYWRiZGQw
MWI5ZWU2YjAxOTUyNTQ3MzggMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJLaXQvR1BVUHJvY2Vzcy9n
cmFwaGljcy9SZW1vdGVHcmFwaGljc0NvbnRleHRHTENvY29hLmNwcAorKysgYi9Tb3VyY2UvV2Vi
S2l0L0dQVVByb2Nlc3MvZ3JhcGhpY3MvUmVtb3RlR3JhcGhpY3NDb250ZXh0R0xDb2NvYS5jcHAK
QEAgLTQ2LDcgKzQ2LDcgQEAgbmFtZXNwYWNlIFdlYktpdCB7CiAjaWYgRU5BQkxFKFZJREVPKQog
dm9pZCBSZW1vdGVHcmFwaGljc0NvbnRleHRHTDo6Y29weVRleHR1cmVGcm9tVmlkZW9GcmFtZShX
ZWJLaXQ6OlJlbW90ZVZpZGVvRnJhbWVSZWFkUmVmZXJlbmNlIHJlYWQsIHVpbnQzMl90IHRleHR1
cmUsIHVpbnQzMl90IHRhcmdldCwgaW50MzJfdCBsZXZlbCwgdWludDMyX3QgaW50ZXJuYWxGb3Jt
YXQsIHVpbnQzMl90IGZvcm1hdCwgdWludDMyX3QgdHlwZSwgYm9vbCBwcmVtdWx0aXBseUFscGhh
LCBib29sIGZsaXBZLCBDb21wbGV0aW9uSGFuZGxlcjx2b2lkKGJvb2wpPiYmIGNvbXBsZXRpb25I
YW5kbGVyKQogewotICAgIGFzc2VydElzQ3VycmVudChtX3N0cmVhbVRocmVhZCk7CisgICAgYXNz
ZXJ0SXNDdXJyZW50KHdvcmtRdWV1ZSgpKTsKICAgICBVTlVTRURfVkFSSUFCTEUocHJlbXVsdGlw
bHlBbHBoYSk7CiAgICAgQVNTRVJUX1VOVVNFRCh0YXJnZXQsIHRhcmdldCA9PSBXZWJDb3JlOjpH
cmFwaGljc0NvbnRleHRHTDo6VEVYVFVSRV8yRCk7CiAKQEAgLTExMCwxMyArMTEwLDEzIEBAIFJl
bW90ZUdyYXBoaWNzQ29udGV4dEdMQ29jb2E6OlJlbW90ZUdyYXBoaWNzQ29udGV4dEdMQ29jb2Eo
R1BVQ29ubmVjdGlvblRvV2ViUHJvCiAKIHZvaWQgUmVtb3RlR3JhcGhpY3NDb250ZXh0R0xDb2Nv
YTo6cGxhdGZvcm1Xb3JrUXVldWVJbml0aWFsaXplKFdlYkNvcmU6OkdyYXBoaWNzQ29udGV4dEdM
QXR0cmlidXRlcyYmIGF0dHJpYnV0ZXMpCiB7Ci0gICAgYXNzZXJ0SXNDdXJyZW50KG1fc3RyZWFt
VGhyZWFkKTsKKyAgICBhc3NlcnRJc0N1cnJlbnQod29ya1F1ZXVlKCkpOwogICAgIG1fY29udGV4
dCA9IFdlYkNvcmU6OkdyYXBoaWNzQ29udGV4dEdMQ29jb2E6OmNyZWF0ZShXVEZNb3ZlKGF0dHJp
YnV0ZXMpLCBXZWJDb3JlOjpQcm9jZXNzSWRlbnRpdHkgeyBtX3Jlc291cmNlT3duZXIgfSk7CiB9
CiAKIHZvaWQgUmVtb3RlR3JhcGhpY3NDb250ZXh0R0xDb2NvYTo6cHJlcGFyZUZvckRpc3BsYXko
Q29tcGxldGlvbkhhbmRsZXI8dm9pZChXVEY6Ok1hY2hTZW5kUmlnaHQmJik+JiYgY29tcGxldGlv
bkhhbmRsZXIpCiB7Ci0gICAgYXNzZXJ0SXNDdXJyZW50KG1fc3RyZWFtVGhyZWFkKTsKKyAgICBh
c3NlcnRJc0N1cnJlbnQod29ya1F1ZXVlKCkpOwogICAgIG1fY29udGV4dC0+cHJlcGFyZUZvckRp
c3BsYXkoKTsKICAgICBNYWNoU2VuZFJpZ2h0IHNlbmRSaWdodDsKICAgICBXZWJDb3JlOjpJT1N1
cmZhY2UqIGRpc3BsYXlCdWZmZXIgPSBtX2NvbnRleHQtPmRpc3BsYXlCdWZmZXIoKTsKZGlmZiAt
LWdpdCBhL1NvdXJjZS9XZWJLaXQvR1BVUHJvY2Vzcy9ncmFwaGljcy9SZW1vdGVHcmFwaGljc0Nv
bnRleHRHTEZ1bmN0aW9uc0dlbmVyYXRlZC5oIGIvU291cmNlL1dlYktpdC9HUFVQcm9jZXNzL2dy
YXBoaWNzL1JlbW90ZUdyYXBoaWNzQ29udGV4dEdMRnVuY3Rpb25zR2VuZXJhdGVkLmgKaW5kZXgg
OTNiZDY3NzE2OGJiNDRjOTgxMzRkYzc4OThjOTAzZTBmYmQwM2U1Ni4uYTU5ZThjYTA5ODk5ODkw
YTI0YWM3YmQ4MzJjN2NjMWNmZTBkM2NmOSAxMDA2NDQKLS0tIGEvU291cmNlL1dlYktpdC9HUFVQ
cm9jZXNzL2dyYXBoaWNzL1JlbW90ZUdyYXBoaWNzQ29udGV4dEdMRnVuY3Rpb25zR2VuZXJhdGVk
LmgKKysrIGIvU291cmNlL1dlYktpdC9HUFVQcm9jZXNzL2dyYXBoaWNzL1JlbW90ZUdyYXBoaWNz
Q29udGV4dEdMRnVuY3Rpb25zR2VuZXJhdGVkLmgKQEAgLTI4LDI3OSArMjgsMjc5IEBACiAgICAg
dm9pZCBtb3ZlRXJyb3JzVG9TeW50aGV0aWNFcnJvckxpc3QoQ29tcGxldGlvbkhhbmRsZXI8dm9p
ZChib29sKT4mJiBjb21wbGV0aW9uSGFuZGxlcikKICAgICB7CiAgICAgICAgIGJvb2wgcmV0dXJu
VmFsdWUgPSB7IH07Ci0gICAgICAgIGFzc2VydElzQ3VycmVudChtX3N0cmVhbVRocmVhZCk7Cisg
ICAgICAgIGFzc2VydElzQ3VycmVudCh3b3JrUXVldWUoKSk7CiAgICAgICAgIHJldHVyblZhbHVl
ID0gbV9jb250ZXh0LT5tb3ZlRXJyb3JzVG9TeW50aGV0aWNFcnJvckxpc3QoKTsKICAgICAgICAg
Y29tcGxldGlvbkhhbmRsZXIocmV0dXJuVmFsdWUpOwogICAgIH0KICAgICB2b2lkIGFjdGl2ZVRl
eHR1cmUodWludDMyX3QgdGV4dHVyZSkKICAgICB7Ci0gICAgICAgIGFzc2VydElzQ3VycmVudCht
X3N0cmVhbVRocmVhZCk7CisgICAgICAgIGFzc2VydElzQ3VycmVudCh3b3JrUXVldWUoKSk7CiAg
ICAgICAgIG1fY29udGV4dC0+YWN0aXZlVGV4dHVyZSh0ZXh0dXJlKTsKICAgICB9CiAgICAgdm9p
ZCBhdHRhY2hTaGFkZXIodWludDMyX3QgcHJvZ3JhbSwgdWludDMyX3Qgc2hhZGVyKQogICAgIHsK
LSAgICAgICAgYXNzZXJ0SXNDdXJyZW50KG1fc3RyZWFtVGhyZWFkKTsKKyAgICAgICAgYXNzZXJ0
SXNDdXJyZW50KHdvcmtRdWV1ZSgpKTsKICAgICAgICAgbV9jb250ZXh0LT5hdHRhY2hTaGFkZXIo
cHJvZ3JhbSwgc2hhZGVyKTsKICAgICB9CiAgICAgdm9pZCBiaW5kQXR0cmliTG9jYXRpb24odWlu
dDMyX3QgYXJnMCwgdWludDMyX3QgaW5kZXgsIFN0cmluZyYmIG5hbWUpCiAgICAgewotICAgICAg
ICBhc3NlcnRJc0N1cnJlbnQobV9zdHJlYW1UaHJlYWQpOworICAgICAgICBhc3NlcnRJc0N1cnJl
bnQod29ya1F1ZXVlKCkpOwogICAgICAgICBtX2NvbnRleHQtPmJpbmRBdHRyaWJMb2NhdGlvbihh
cmcwLCBpbmRleCwgbmFtZSk7CiAgICAgfQogICAgIHZvaWQgYmluZEJ1ZmZlcih1aW50MzJfdCB0
YXJnZXQsIHVpbnQzMl90IGFyZzEpCiAgICAgewotICAgICAgICBhc3NlcnRJc0N1cnJlbnQobV9z
dHJlYW1UaHJlYWQpOworICAgICAgICBhc3NlcnRJc0N1cnJlbnQod29ya1F1ZXVlKCkpOwogICAg
ICAgICBtX2NvbnRleHQtPmJpbmRCdWZmZXIodGFyZ2V0LCBhcmcxKTsKICAgICB9CiAgICAgdm9p
ZCBiaW5kRnJhbWVidWZmZXIodWludDMyX3QgdGFyZ2V0LCB1aW50MzJfdCBhcmcxKQogICAgIHsK
LSAgICAgICAgYXNzZXJ0SXNDdXJyZW50KG1fc3RyZWFtVGhyZWFkKTsKKyAgICAgICAgYXNzZXJ0
SXNDdXJyZW50KHdvcmtRdWV1ZSgpKTsKICAgICAgICAgbV9jb250ZXh0LT5iaW5kRnJhbWVidWZm
ZXIodGFyZ2V0LCBhcmcxKTsKICAgICB9CiAgICAgdm9pZCBiaW5kUmVuZGVyYnVmZmVyKHVpbnQz
Ml90IHRhcmdldCwgdWludDMyX3QgYXJnMSkKICAgICB7Ci0gICAgICAgIGFzc2VydElzQ3VycmVu
dChtX3N0cmVhbVRocmVhZCk7CisgICAgICAgIGFzc2VydElzQ3VycmVudCh3b3JrUXVldWUoKSk7
CiAgICAgICAgIG1fY29udGV4dC0+YmluZFJlbmRlcmJ1ZmZlcih0YXJnZXQsIGFyZzEpOwogICAg
IH0KICAgICB2b2lkIGJpbmRUZXh0dXJlKHVpbnQzMl90IHRhcmdldCwgdWludDMyX3QgYXJnMSkK
ICAgICB7Ci0gICAgICAgIGFzc2VydElzQ3VycmVudChtX3N0cmVhbVRocmVhZCk7CisgICAgICAg
IGFzc2VydElzQ3VycmVudCh3b3JrUXVldWUoKSk7CiAgICAgICAgIG1fY29udGV4dC0+YmluZFRl
eHR1cmUodGFyZ2V0LCBhcmcxKTsKICAgICB9CiAgICAgdm9pZCBibGVuZENvbG9yKGZsb2F0IHJl
ZCwgZmxvYXQgZ3JlZW4sIGZsb2F0IGJsdWUsIGZsb2F0IGFscGhhKQogICAgIHsKLSAgICAgICAg
YXNzZXJ0SXNDdXJyZW50KG1fc3RyZWFtVGhyZWFkKTsKKyAgICAgICAgYXNzZXJ0SXNDdXJyZW50
KHdvcmtRdWV1ZSgpKTsKICAgICAgICAgbV9jb250ZXh0LT5ibGVuZENvbG9yKHJlZCwgZ3JlZW4s
IGJsdWUsIGFscGhhKTsKICAgICB9CiAgICAgdm9pZCBibGVuZEVxdWF0aW9uKHVpbnQzMl90IG1v
ZGUpCiAgICAgewotICAgICAgICBhc3NlcnRJc0N1cnJlbnQobV9zdHJlYW1UaHJlYWQpOworICAg
ICAgICBhc3NlcnRJc0N1cnJlbnQod29ya1F1ZXVlKCkpOwogICAgICAgICBtX2NvbnRleHQtPmJs
ZW5kRXF1YXRpb24obW9kZSk7CiAgICAgfQogICAgIHZvaWQgYmxlbmRFcXVhdGlvblNlcGFyYXRl
KHVpbnQzMl90IG1vZGVSR0IsIHVpbnQzMl90IG1vZGVBbHBoYSkKICAgICB7Ci0gICAgICAgIGFz
c2VydElzQ3VycmVudChtX3N0cmVhbVRocmVhZCk7CisgICAgICAgIGFzc2VydElzQ3VycmVudCh3
b3JrUXVldWUoKSk7CiAgICAgICAgIG1fY29udGV4dC0+YmxlbmRFcXVhdGlvblNlcGFyYXRlKG1v
ZGVSR0IsIG1vZGVBbHBoYSk7CiAgICAgfQogICAgIHZvaWQgYmxlbmRGdW5jKHVpbnQzMl90IHNm
YWN0b3IsIHVpbnQzMl90IGRmYWN0b3IpCiAgICAgewotICAgICAgICBhc3NlcnRJc0N1cnJlbnQo
bV9zdHJlYW1UaHJlYWQpOworICAgICAgICBhc3NlcnRJc0N1cnJlbnQod29ya1F1ZXVlKCkpOwog
ICAgICAgICBtX2NvbnRleHQtPmJsZW5kRnVuYyhzZmFjdG9yLCBkZmFjdG9yKTsKICAgICB9CiAg
ICAgdm9pZCBibGVuZEZ1bmNTZXBhcmF0ZSh1aW50MzJfdCBzcmNSR0IsIHVpbnQzMl90IGRzdFJH
QiwgdWludDMyX3Qgc3JjQWxwaGEsIHVpbnQzMl90IGRzdEFscGhhKQogICAgIHsKLSAgICAgICAg
YXNzZXJ0SXNDdXJyZW50KG1fc3RyZWFtVGhyZWFkKTsKKyAgICAgICAgYXNzZXJ0SXNDdXJyZW50
KHdvcmtRdWV1ZSgpKTsKICAgICAgICAgbV9jb250ZXh0LT5ibGVuZEZ1bmNTZXBhcmF0ZShzcmNS
R0IsIGRzdFJHQiwgc3JjQWxwaGEsIGRzdEFscGhhKTsKICAgICB9CiAgICAgdm9pZCBjaGVja0Zy
YW1lYnVmZmVyU3RhdHVzKHVpbnQzMl90IHRhcmdldCwgQ29tcGxldGlvbkhhbmRsZXI8dm9pZCh1
aW50MzJfdCk+JiYgY29tcGxldGlvbkhhbmRsZXIpCiAgICAgewogICAgICAgICBHQ0dMZW51bSBy
ZXR1cm5WYWx1ZSA9IHsgfTsKLSAgICAgICAgYXNzZXJ0SXNDdXJyZW50KG1fc3RyZWFtVGhyZWFk
KTsKKyAgICAgICAgYXNzZXJ0SXNDdXJyZW50KHdvcmtRdWV1ZSgpKTsKICAgICAgICAgcmV0dXJu
VmFsdWUgPSBtX2NvbnRleHQtPmNoZWNrRnJhbWVidWZmZXJTdGF0dXModGFyZ2V0KTsKICAgICAg
ICAgY29tcGxldGlvbkhhbmRsZXIocmV0dXJuVmFsdWUpOwogICAgIH0KICAgICB2b2lkIGNsZWFy
KHVpbnQzMl90IG1hc2spCiAgICAgewotICAgICAgICBhc3NlcnRJc0N1cnJlbnQobV9zdHJlYW1U
aHJlYWQpOworICAgICAgICBhc3NlcnRJc0N1cnJlbnQod29ya1F1ZXVlKCkpOwogICAgICAgICBt
X2NvbnRleHQtPmNsZWFyKG1hc2spOwogICAgIH0KICAgICB2b2lkIGNsZWFyQ29sb3IoZmxvYXQg
cmVkLCBmbG9hdCBncmVlbiwgZmxvYXQgYmx1ZSwgZmxvYXQgYWxwaGEpCiAgICAgewotICAgICAg
ICBhc3NlcnRJc0N1cnJlbnQobV9zdHJlYW1UaHJlYWQpOworICAgICAgICBhc3NlcnRJc0N1cnJl
bnQod29ya1F1ZXVlKCkpOwogICAgICAgICBtX2NvbnRleHQtPmNsZWFyQ29sb3IocmVkLCBncmVl
biwgYmx1ZSwgYWxwaGEpOwogICAgIH0KICAgICB2b2lkIGNsZWFyRGVwdGgoZmxvYXQgZGVwdGgp
CiAgICAgewotICAgICAgICBhc3NlcnRJc0N1cnJlbnQobV9zdHJlYW1UaHJlYWQpOworICAgICAg
ICBhc3NlcnRJc0N1cnJlbnQod29ya1F1ZXVlKCkpOwogICAgICAgICBtX2NvbnRleHQtPmNsZWFy
RGVwdGgoZGVwdGgpOwogICAgIH0KICAgICB2b2lkIGNsZWFyU3RlbmNpbChpbnQzMl90IHMpCiAg
ICAgewotICAgICAgICBhc3NlcnRJc0N1cnJlbnQobV9zdHJlYW1UaHJlYWQpOworICAgICAgICBh
c3NlcnRJc0N1cnJlbnQod29ya1F1ZXVlKCkpOwogICAgICAgICBtX2NvbnRleHQtPmNsZWFyU3Rl
bmNpbChzKTsKICAgICB9CiAgICAgdm9pZCBjb2xvck1hc2soYm9vbCByZWQsIGJvb2wgZ3JlZW4s
IGJvb2wgYmx1ZSwgYm9vbCBhbHBoYSkKICAgICB7Ci0gICAgICAgIGFzc2VydElzQ3VycmVudCht
X3N0cmVhbVRocmVhZCk7CisgICAgICAgIGFzc2VydElzQ3VycmVudCh3b3JrUXVldWUoKSk7CiAg
ICAgICAgIG1fY29udGV4dC0+Y29sb3JNYXNrKHN0YXRpY19jYXN0PEdDR0xib29sZWFuPihyZWQp
LCBzdGF0aWNfY2FzdDxHQ0dMYm9vbGVhbj4oZ3JlZW4pLCBzdGF0aWNfY2FzdDxHQ0dMYm9vbGVh
bj4oYmx1ZSksIHN0YXRpY19jYXN0PEdDR0xib29sZWFuPihhbHBoYSkpOwogICAgIH0KICAgICB2
b2lkIGNvbXBpbGVTaGFkZXIodWludDMyX3QgYXJnMCkKICAgICB7Ci0gICAgICAgIGFzc2VydElz
Q3VycmVudChtX3N0cmVhbVRocmVhZCk7CisgICAgICAgIGFzc2VydElzQ3VycmVudCh3b3JrUXVl
dWUoKSk7CiAgICAgICAgIG1fY29udGV4dC0+Y29tcGlsZVNoYWRlcihhcmcwKTsKICAgICB9CiAg
ICAgdm9pZCBjb3B5VGV4SW1hZ2UyRCh1aW50MzJfdCB0YXJnZXQsIGludDMyX3QgbGV2ZWwsIHVp
bnQzMl90IGludGVybmFsZm9ybWF0LCBpbnQzMl90IHgsIGludDMyX3QgeSwgaW50MzJfdCB3aWR0
aCwgaW50MzJfdCBoZWlnaHQsIGludDMyX3QgYm9yZGVyKQogICAgIHsKLSAgICAgICAgYXNzZXJ0
SXNDdXJyZW50KG1fc3RyZWFtVGhyZWFkKTsKKyAgICAgICAgYXNzZXJ0SXNDdXJyZW50KHdvcmtR
dWV1ZSgpKTsKICAgICAgICAgbV9jb250ZXh0LT5jb3B5VGV4SW1hZ2UyRCh0YXJnZXQsIGxldmVs
LCBpbnRlcm5hbGZvcm1hdCwgeCwgeSwgd2lkdGgsIGhlaWdodCwgYm9yZGVyKTsKICAgICB9CiAg
ICAgdm9pZCBjb3B5VGV4U3ViSW1hZ2UyRCh1aW50MzJfdCB0YXJnZXQsIGludDMyX3QgbGV2ZWws
IGludDMyX3QgeG9mZnNldCwgaW50MzJfdCB5b2Zmc2V0LCBpbnQzMl90IHgsIGludDMyX3QgeSwg
aW50MzJfdCB3aWR0aCwgaW50MzJfdCBoZWlnaHQpCiAgICAgewotICAgICAgICBhc3NlcnRJc0N1
cnJlbnQobV9zdHJlYW1UaHJlYWQpOworICAgICAgICBhc3NlcnRJc0N1cnJlbnQod29ya1F1ZXVl
KCkpOwogICAgICAgICBtX2NvbnRleHQtPmNvcHlUZXhTdWJJbWFnZTJEKHRhcmdldCwgbGV2ZWws
IHhvZmZzZXQsIHlvZmZzZXQsIHgsIHksIHdpZHRoLCBoZWlnaHQpOwogICAgIH0KICAgICB2b2lk
IGNyZWF0ZUJ1ZmZlcihDb21wbGV0aW9uSGFuZGxlcjx2b2lkKHVpbnQzMl90KT4mJiBjb21wbGV0
aW9uSGFuZGxlcikKICAgICB7CiAgICAgICAgIFBsYXRmb3JtR0xPYmplY3QgcmV0dXJuVmFsdWUg
PSB7IH07Ci0gICAgICAgIGFzc2VydElzQ3VycmVudChtX3N0cmVhbVRocmVhZCk7CisgICAgICAg
IGFzc2VydElzQ3VycmVudCh3b3JrUXVldWUoKSk7CiAgICAgICAgIHJldHVyblZhbHVlID0gbV9j
b250ZXh0LT5jcmVhdGVCdWZmZXIoKTsKICAgICAgICAgY29tcGxldGlvbkhhbmRsZXIocmV0dXJu
VmFsdWUpOwogICAgIH0KICAgICB2b2lkIGNyZWF0ZUZyYW1lYnVmZmVyKENvbXBsZXRpb25IYW5k
bGVyPHZvaWQodWludDMyX3QpPiYmIGNvbXBsZXRpb25IYW5kbGVyKQogICAgIHsKICAgICAgICAg
UGxhdGZvcm1HTE9iamVjdCByZXR1cm5WYWx1ZSA9IHsgfTsKLSAgICAgICAgYXNzZXJ0SXNDdXJy
ZW50KG1fc3RyZWFtVGhyZWFkKTsKKyAgICAgICAgYXNzZXJ0SXNDdXJyZW50KHdvcmtRdWV1ZSgp
KTsKICAgICAgICAgcmV0dXJuVmFsdWUgPSBtX2NvbnRleHQtPmNyZWF0ZUZyYW1lYnVmZmVyKCk7
CiAgICAgICAgIGNvbXBsZXRpb25IYW5kbGVyKHJldHVyblZhbHVlKTsKICAgICB9CiAgICAgdm9p
ZCBjcmVhdGVQcm9ncmFtKENvbXBsZXRpb25IYW5kbGVyPHZvaWQodWludDMyX3QpPiYmIGNvbXBs
ZXRpb25IYW5kbGVyKQogICAgIHsKICAgICAgICAgUGxhdGZvcm1HTE9iamVjdCByZXR1cm5WYWx1
ZSA9IHsgfTsKLSAgICAgICAgYXNzZXJ0SXNDdXJyZW50KG1fc3RyZWFtVGhyZWFkKTsKKyAgICAg
ICAgYXNzZXJ0SXNDdXJyZW50KHdvcmtRdWV1ZSgpKTsKICAgICAgICAgcmV0dXJuVmFsdWUgPSBt
X2NvbnRleHQtPmNyZWF0ZVByb2dyYW0oKTsKICAgICAgICAgY29tcGxldGlvbkhhbmRsZXIocmV0
dXJuVmFsdWUpOwogICAgIH0KICAgICB2b2lkIGNyZWF0ZVJlbmRlcmJ1ZmZlcihDb21wbGV0aW9u
SGFuZGxlcjx2b2lkKHVpbnQzMl90KT4mJiBjb21wbGV0aW9uSGFuZGxlcikKICAgICB7CiAgICAg
ICAgIFBsYXRmb3JtR0xPYmplY3QgcmV0dXJuVmFsdWUgPSB7IH07Ci0gICAgICAgIGFzc2VydElz
Q3VycmVudChtX3N0cmVhbVRocmVhZCk7CisgICAgICAgIGFzc2VydElzQ3VycmVudCh3b3JrUXVl
dWUoKSk7CiAgICAgICAgIHJldHVyblZhbHVlID0gbV9jb250ZXh0LT5jcmVhdGVSZW5kZXJidWZm
ZXIoKTsKICAgICAgICAgY29tcGxldGlvbkhhbmRsZXIocmV0dXJuVmFsdWUpOwogICAgIH0KICAg
ICB2b2lkIGNyZWF0ZVNoYWRlcih1aW50MzJfdCBhcmcwLCBDb21wbGV0aW9uSGFuZGxlcjx2b2lk
KHVpbnQzMl90KT4mJiBjb21wbGV0aW9uSGFuZGxlcikKICAgICB7CiAgICAgICAgIFBsYXRmb3Jt
R0xPYmplY3QgcmV0dXJuVmFsdWUgPSB7IH07Ci0gICAgICAgIGFzc2VydElzQ3VycmVudChtX3N0
cmVhbVRocmVhZCk7CisgICAgICAgIGFzc2VydElzQ3VycmVudCh3b3JrUXVldWUoKSk7CiAgICAg
ICAgIHJldHVyblZhbHVlID0gbV9jb250ZXh0LT5jcmVhdGVTaGFkZXIoYXJnMCk7CiAgICAgICAg
IGNvbXBsZXRpb25IYW5kbGVyKHJldHVyblZhbHVlKTsKICAgICB9CiAgICAgdm9pZCBjcmVhdGVU
ZXh0dXJlKENvbXBsZXRpb25IYW5kbGVyPHZvaWQodWludDMyX3QpPiYmIGNvbXBsZXRpb25IYW5k
bGVyKQogICAgIHsKICAgICAgICAgUGxhdGZvcm1HTE9iamVjdCByZXR1cm5WYWx1ZSA9IHsgfTsK
LSAgICAgICAgYXNzZXJ0SXNDdXJyZW50KG1fc3RyZWFtVGhyZWFkKTsKKyAgICAgICAgYXNzZXJ0
SXNDdXJyZW50KHdvcmtRdWV1ZSgpKTsKICAgICAgICAgcmV0dXJuVmFsdWUgPSBtX2NvbnRleHQt
PmNyZWF0ZVRleHR1cmUoKTsKICAgICAgICAgY29tcGxldGlvbkhhbmRsZXIocmV0dXJuVmFsdWUp
OwogICAgIH0KICAgICB2b2lkIGN1bGxGYWNlKHVpbnQzMl90IG1vZGUpCiAgICAgewotICAgICAg
ICBhc3NlcnRJc0N1cnJlbnQobV9zdHJlYW1UaHJlYWQpOworICAgICAgICBhc3NlcnRJc0N1cnJl
bnQod29ya1F1ZXVlKCkpOwogICAgICAgICBtX2NvbnRleHQtPmN1bGxGYWNlKG1vZGUpOwogICAg
IH0KICAgICB2b2lkIGRlbGV0ZUJ1ZmZlcih1aW50MzJfdCBhcmcwKQogICAgIHsKLSAgICAgICAg
YXNzZXJ0SXNDdXJyZW50KG1fc3RyZWFtVGhyZWFkKTsKKyAgICAgICAgYXNzZXJ0SXNDdXJyZW50
KHdvcmtRdWV1ZSgpKTsKICAgICAgICAgbV9jb250ZXh0LT5kZWxldGVCdWZmZXIoYXJnMCk7CiAg
ICAgfQogICAgIHZvaWQgZGVsZXRlRnJhbWVidWZmZXIodWludDMyX3QgYXJnMCkKICAgICB7Ci0g
ICAgICAgIGFzc2VydElzQ3VycmVudChtX3N0cmVhbVRocmVhZCk7CisgICAgICAgIGFzc2VydElz
Q3VycmVudCh3b3JrUXVldWUoKSk7CiAgICAgICAgIG1fY29udGV4dC0+ZGVsZXRlRnJhbWVidWZm
ZXIoYXJnMCk7CiAgICAgfQogICAgIHZvaWQgZGVsZXRlUHJvZ3JhbSh1aW50MzJfdCBhcmcwKQog
ICAgIHsKLSAgICAgICAgYXNzZXJ0SXNDdXJyZW50KG1fc3RyZWFtVGhyZWFkKTsKKyAgICAgICAg
YXNzZXJ0SXNDdXJyZW50KHdvcmtRdWV1ZSgpKTsKICAgICAgICAgbV9jb250ZXh0LT5kZWxldGVQ
cm9ncmFtKGFyZzApOwogICAgIH0KICAgICB2b2lkIGRlbGV0ZVJlbmRlcmJ1ZmZlcih1aW50MzJf
dCBhcmcwKQogICAgIHsKLSAgICAgICAgYXNzZXJ0SXNDdXJyZW50KG1fc3RyZWFtVGhyZWFkKTsK
KyAgICAgICAgYXNzZXJ0SXNDdXJyZW50KHdvcmtRdWV1ZSgpKTsKICAgICAgICAgbV9jb250ZXh0
LT5kZWxldGVSZW5kZXJidWZmZXIoYXJnMCk7CiAgICAgfQogICAgIHZvaWQgZGVsZXRlU2hhZGVy
KHVpbnQzMl90IGFyZzApCiAgICAgewotICAgICAgICBhc3NlcnRJc0N1cnJlbnQobV9zdHJlYW1U
aHJlYWQpOworICAgICAgICBhc3NlcnRJc0N1cnJlbnQod29ya1F1ZXVlKCkpOwogICAgICAgICBt
X2NvbnRleHQtPmRlbGV0ZVNoYWRlcihhcmcwKTsKICAgICB9CiAgICAgdm9pZCBkZWxldGVUZXh0
dXJlKHVpbnQzMl90IGFyZzApCiAgICAgewotICAgICAgICBhc3NlcnRJc0N1cnJlbnQobV9zdHJl
YW1UaHJlYWQpOworICAgICAgICBhc3NlcnRJc0N1cnJlbnQod29ya1F1ZXVlKCkpOwogICAgICAg
ICBtX2NvbnRleHQtPmRlbGV0ZVRleHR1cmUoYXJnMCk7CiAgICAgfQogICAgIHZvaWQgZGVwdGhG
dW5jKHVpbnQzMl90IGZ1bmMpCiAgICAgewotICAgICAgICBhc3NlcnRJc0N1cnJlbnQobV9zdHJl
YW1UaHJlYWQpOworICAgICAgICBhc3NlcnRJc0N1cnJlbnQod29ya1F1ZXVlKCkpOwogICAgICAg
ICBtX2NvbnRleHQtPmRlcHRoRnVuYyhmdW5jKTsKICAgICB9CiAgICAgdm9pZCBkZXB0aE1hc2so
Ym9vbCBmbGFnKQogICAgIHsKLSAgICAgICAgYXNzZXJ0SXNDdXJyZW50KG1fc3RyZWFtVGhyZWFk
KTsKKyAgICAgICAgYXNzZXJ0SXNDdXJyZW50KHdvcmtRdWV1ZSgpKTsKICAgICAgICAgbV9jb250
ZXh0LT5kZXB0aE1hc2soc3RhdGljX2Nhc3Q8R0NHTGJvb2xlYW4+KGZsYWcpKTsKICAgICB9CiAg
ICAgdm9pZCBkZXB0aFJhbmdlKGZsb2F0IHpOZWFyLCBmbG9hdCB6RmFyKQogICAgIHsKLSAgICAg
ICAgYXNzZXJ0SXNDdXJyZW50KG1fc3RyZWFtVGhyZWFkKTsKKyAgICAgICAgYXNzZXJ0SXNDdXJy
ZW50KHdvcmtRdWV1ZSgpKTsKICAgICAgICAgbV9jb250ZXh0LT5kZXB0aFJhbmdlKHpOZWFyLCB6
RmFyKTsKICAgICB9CiAgICAgdm9pZCBkZXRhY2hTaGFkZXIodWludDMyX3QgYXJnMCwgdWludDMy
X3QgYXJnMSkKICAgICB7Ci0gICAgICAgIGFzc2VydElzQ3VycmVudChtX3N0cmVhbVRocmVhZCk7
CisgICAgICAgIGFzc2VydElzQ3VycmVudCh3b3JrUXVldWUoKSk7CiAgICAgICAgIG1fY29udGV4
dC0+ZGV0YWNoU2hhZGVyKGFyZzAsIGFyZzEpOwogICAgIH0KICAgICB2b2lkIGRpc2FibGUodWlu
dDMyX3QgY2FwKQogICAgIHsKLSAgICAgICAgYXNzZXJ0SXNDdXJyZW50KG1fc3RyZWFtVGhyZWFk
KTsKKyAgICAgICAgYXNzZXJ0SXNDdXJyZW50KHdvcmtRdWV1ZSgpKTsKICAgICAgICAgbV9jb250
ZXh0LT5kaXNhYmxlKGNhcCk7CiAgICAgfQogICAgIHZvaWQgZGlzYWJsZVZlcnRleEF0dHJpYkFy
cmF5KHVpbnQzMl90IGluZGV4KQogICAgIHsKLSAgICAgICAgYXNzZXJ0SXNDdXJyZW50KG1fc3Ry
ZWFtVGhyZWFkKTsKKyAgICAgICAgYXNzZXJ0SXNDdXJyZW50KHdvcmtRdWV1ZSgpKTsKICAgICAg
ICAgbV9jb250ZXh0LT5kaXNhYmxlVmVydGV4QXR0cmliQXJyYXkoaW5kZXgpOwogICAgIH0KICAg
ICB2b2lkIGRyYXdBcnJheXModWludDMyX3QgbW9kZSwgaW50MzJfdCBmaXJzdCwgaW50MzJfdCBj
b3VudCkKICAgICB7Ci0gICAgICAgIGFzc2VydElzQ3VycmVudChtX3N0cmVhbVRocmVhZCk7Cisg
ICAgICAgIGFzc2VydElzQ3VycmVudCh3b3JrUXVldWUoKSk7CiAgICAgICAgIG1fY29udGV4dC0+
ZHJhd0FycmF5cyhtb2RlLCBmaXJzdCwgY291bnQpOwogICAgIH0KICAgICB2b2lkIGRyYXdFbGVt
ZW50cyh1aW50MzJfdCBtb2RlLCBpbnQzMl90IGNvdW50LCB1aW50MzJfdCB0eXBlLCB1aW50NjRf
dCBvZmZzZXQpCiAgICAgewotICAgICAgICBhc3NlcnRJc0N1cnJlbnQobV9zdHJlYW1UaHJlYWQp
OworICAgICAgICBhc3NlcnRJc0N1cnJlbnQod29ya1F1ZXVlKCkpOwogICAgICAgICBtX2NvbnRl
eHQtPmRyYXdFbGVtZW50cyhtb2RlLCBjb3VudCwgdHlwZSwgc3RhdGljX2Nhc3Q8R0NHTGludHB0
cj4ob2Zmc2V0KSk7CiAgICAgfQogICAgIHZvaWQgZW5hYmxlKHVpbnQzMl90IGNhcCkKICAgICB7
Ci0gICAgICAgIGFzc2VydElzQ3VycmVudChtX3N0cmVhbVRocmVhZCk7CisgICAgICAgIGFzc2Vy
dElzQ3VycmVudCh3b3JrUXVldWUoKSk7CiAgICAgICAgIG1fY29udGV4dC0+ZW5hYmxlKGNhcCk7
CiAgICAgfQogICAgIHZvaWQgZW5hYmxlVmVydGV4QXR0cmliQXJyYXkodWludDMyX3QgaW5kZXgp
CiAgICAgewotICAgICAgICBhc3NlcnRJc0N1cnJlbnQobV9zdHJlYW1UaHJlYWQpOworICAgICAg
ICBhc3NlcnRJc0N1cnJlbnQod29ya1F1ZXVlKCkpOwogICAgICAgICBtX2NvbnRleHQtPmVuYWJs
ZVZlcnRleEF0dHJpYkFycmF5KGluZGV4KTsKICAgICB9CiAgICAgdm9pZCBmaW5pc2goKQogICAg
IHsKLSAgICAgICAgYXNzZXJ0SXNDdXJyZW50KG1fc3RyZWFtVGhyZWFkKTsKKyAgICAgICAgYXNz
ZXJ0SXNDdXJyZW50KHdvcmtRdWV1ZSgpKTsKICAgICAgICAgbV9jb250ZXh0LT5maW5pc2goKTsK
ICAgICB9CiAgICAgdm9pZCBmbHVzaCgpCiAgICAgewotICAgICAgICBhc3NlcnRJc0N1cnJlbnQo
bV9zdHJlYW1UaHJlYWQpOworICAgICAgICBhc3NlcnRJc0N1cnJlbnQod29ya1F1ZXVlKCkpOwog
ICAgICAgICBtX2NvbnRleHQtPmZsdXNoKCk7CiAgICAgfQogICAgIHZvaWQgZnJhbWVidWZmZXJS
ZW5kZXJidWZmZXIodWludDMyX3QgdGFyZ2V0LCB1aW50MzJfdCBhdHRhY2htZW50LCB1aW50MzJf
dCByZW5kZXJidWZmZXJ0YXJnZXQsIHVpbnQzMl90IGFyZzMpCiAgICAgewotICAgICAgICBhc3Nl
cnRJc0N1cnJlbnQobV9zdHJlYW1UaHJlYWQpOworICAgICAgICBhc3NlcnRJc0N1cnJlbnQod29y
a1F1ZXVlKCkpOwogICAgICAgICBtX2NvbnRleHQtPmZyYW1lYnVmZmVyUmVuZGVyYnVmZmVyKHRh
cmdldCwgYXR0YWNobWVudCwgcmVuZGVyYnVmZmVydGFyZ2V0LCBhcmczKTsKICAgICB9CiAgICAg
dm9pZCBmcmFtZWJ1ZmZlclRleHR1cmUyRCh1aW50MzJfdCB0YXJnZXQsIHVpbnQzMl90IGF0dGFj
aG1lbnQsIHVpbnQzMl90IHRleHRhcmdldCwgdWludDMyX3QgYXJnMywgaW50MzJfdCBsZXZlbCkK
ICAgICB7Ci0gICAgICAgIGFzc2VydElzQ3VycmVudChtX3N0cmVhbVRocmVhZCk7CisgICAgICAg
IGFzc2VydElzQ3VycmVudCh3b3JrUXVldWUoKSk7CiAgICAgICAgIG1fY29udGV4dC0+ZnJhbWVi
dWZmZXJUZXh0dXJlMkQodGFyZ2V0LCBhdHRhY2htZW50LCB0ZXh0YXJnZXQsIGFyZzMsIGxldmVs
KTsKICAgICB9CiAgICAgdm9pZCBmcm9udEZhY2UodWludDMyX3QgbW9kZSkKICAgICB7Ci0gICAg
ICAgIGFzc2VydElzQ3VycmVudChtX3N0cmVhbVRocmVhZCk7CisgICAgICAgIGFzc2VydElzQ3Vy
cmVudCh3b3JrUXVldWUoKSk7CiAgICAgICAgIG1fY29udGV4dC0+ZnJvbnRGYWNlKG1vZGUpOwog
ICAgIH0KICAgICB2b2lkIGdlbmVyYXRlTWlwbWFwKHVpbnQzMl90IHRhcmdldCkKICAgICB7Ci0g
ICAgICAgIGFzc2VydElzQ3VycmVudChtX3N0cmVhbVRocmVhZCk7CisgICAgICAgIGFzc2VydElz
Q3VycmVudCh3b3JrUXVldWUoKSk7CiAgICAgICAgIG1fY29udGV4dC0+Z2VuZXJhdGVNaXBtYXAo
dGFyZ2V0KTsKICAgICB9CiAgICAgdm9pZCBnZXRBY3RpdmVBdHRyaWIodWludDMyX3QgcHJvZ3Jh
bSwgdWludDMyX3QgaW5kZXgsIENvbXBsZXRpb25IYW5kbGVyPHZvaWQoYm9vbCwgV2ViQ29yZTo6
R3JhcGhpY3NDb250ZXh0R0w6OkFjdGl2ZUluZm8mJik+JiYgY29tcGxldGlvbkhhbmRsZXIpCiAg
ICAgewogICAgICAgICBib29sIHJldHVyblZhbHVlID0geyB9OwogICAgICAgICBXZWJDb3JlOjpH
cmFwaGljc0NvbnRleHRHTDo6QWN0aXZlSW5mbyBhcmcyIHsgfTsKLSAgICAgICAgYXNzZXJ0SXND
dXJyZW50KG1fc3RyZWFtVGhyZWFkKTsKKyAgICAgICAgYXNzZXJ0SXNDdXJyZW50KHdvcmtRdWV1
ZSgpKTsKICAgICAgICAgcmV0dXJuVmFsdWUgPSBtX2NvbnRleHQtPmdldEFjdGl2ZUF0dHJpYihw
cm9ncmFtLCBpbmRleCwgYXJnMik7CiAgICAgICAgIGNvbXBsZXRpb25IYW5kbGVyKHJldHVyblZh
bHVlLCBXVEZNb3ZlKGFyZzIpKTsKICAgICB9CkBAIC0zMDgsMTA1ICszMDgsMTA1IEBACiAgICAg
ewogICAgICAgICBib29sIHJldHVyblZhbHVlID0geyB9OwogICAgICAgICBXZWJDb3JlOjpHcmFw
aGljc0NvbnRleHRHTDo6QWN0aXZlSW5mbyBhcmcyIHsgfTsKLSAgICAgICAgYXNzZXJ0SXNDdXJy
ZW50KG1fc3RyZWFtVGhyZWFkKTsKKyAgICAgICAgYXNzZXJ0SXNDdXJyZW50KHdvcmtRdWV1ZSgp
KTsKICAgICAgICAgcmV0dXJuVmFsdWUgPSBtX2NvbnRleHQtPmdldEFjdGl2ZVVuaWZvcm0ocHJv
Z3JhbSwgaW5kZXgsIGFyZzIpOwogICAgICAgICBjb21wbGV0aW9uSGFuZGxlcihyZXR1cm5WYWx1
ZSwgV1RGTW92ZShhcmcyKSk7CiAgICAgfQogICAgIHZvaWQgZ2V0QXR0cmliTG9jYXRpb24odWlu
dDMyX3QgYXJnMCwgU3RyaW5nJiYgbmFtZSwgQ29tcGxldGlvbkhhbmRsZXI8dm9pZChpbnQzMl90
KT4mJiBjb21wbGV0aW9uSGFuZGxlcikKICAgICB7CiAgICAgICAgIEdDR0xpbnQgcmV0dXJuVmFs
dWUgPSB7IH07Ci0gICAgICAgIGFzc2VydElzQ3VycmVudChtX3N0cmVhbVRocmVhZCk7CisgICAg
ICAgIGFzc2VydElzQ3VycmVudCh3b3JrUXVldWUoKSk7CiAgICAgICAgIHJldHVyblZhbHVlID0g
bV9jb250ZXh0LT5nZXRBdHRyaWJMb2NhdGlvbihhcmcwLCBuYW1lKTsKICAgICAgICAgY29tcGxl
dGlvbkhhbmRsZXIocmV0dXJuVmFsdWUpOwogICAgIH0KICAgICB2b2lkIGdldEJ1ZmZlclBhcmFt
ZXRlcmkodWludDMyX3QgdGFyZ2V0LCB1aW50MzJfdCBwbmFtZSwgQ29tcGxldGlvbkhhbmRsZXI8
dm9pZChpbnQzMl90KT4mJiBjb21wbGV0aW9uSGFuZGxlcikKICAgICB7CiAgICAgICAgIEdDR0xp
bnQgcmV0dXJuVmFsdWUgPSB7IH07Ci0gICAgICAgIGFzc2VydElzQ3VycmVudChtX3N0cmVhbVRo
cmVhZCk7CisgICAgICAgIGFzc2VydElzQ3VycmVudCh3b3JrUXVldWUoKSk7CiAgICAgICAgIHJl
dHVyblZhbHVlID0gbV9jb250ZXh0LT5nZXRCdWZmZXJQYXJhbWV0ZXJpKHRhcmdldCwgcG5hbWUp
OwogICAgICAgICBjb21wbGV0aW9uSGFuZGxlcihyZXR1cm5WYWx1ZSk7CiAgICAgfQogICAgIHZv
aWQgZ2V0U3RyaW5nKHVpbnQzMl90IG5hbWUsIENvbXBsZXRpb25IYW5kbGVyPHZvaWQoU3RyaW5n
JiYpPiYmIGNvbXBsZXRpb25IYW5kbGVyKQogICAgIHsKICAgICAgICAgU3RyaW5nIHJldHVyblZh
bHVlID0geyB9OwotICAgICAgICBhc3NlcnRJc0N1cnJlbnQobV9zdHJlYW1UaHJlYWQpOworICAg
ICAgICBhc3NlcnRJc0N1cnJlbnQod29ya1F1ZXVlKCkpOwogICAgICAgICByZXR1cm5WYWx1ZSA9
IG1fY29udGV4dC0+Z2V0U3RyaW5nKG5hbWUpOwogICAgICAgICBjb21wbGV0aW9uSGFuZGxlcihX
VEZNb3ZlKHJldHVyblZhbHVlKSk7CiAgICAgfQogICAgIHZvaWQgZ2V0RmxvYXR2KHVpbnQzMl90
IHBuYW1lLCB1aW50NjRfdCB2YWx1ZVNpemUsIENvbXBsZXRpb25IYW5kbGVyPHZvaWQoSVBDOjpB
cnJheVJlZmVyZW5jZTxmbG9hdD4pPiYmIGNvbXBsZXRpb25IYW5kbGVyKQogICAgIHsKICAgICAg
ICAgVmVjdG9yPEdDR0xmbG9hdCwgMTY+IHZhbHVlKHN0YXRpY19jYXN0PHNpemVfdD4odmFsdWVT
aXplKSwgMCk7Ci0gICAgICAgIGFzc2VydElzQ3VycmVudChtX3N0cmVhbVRocmVhZCk7CisgICAg
ICAgIGFzc2VydElzQ3VycmVudCh3b3JrUXVldWUoKSk7CiAgICAgICAgIG1fY29udGV4dC0+Z2V0
RmxvYXR2KHBuYW1lLCB2YWx1ZSk7CiAgICAgICAgIGNvbXBsZXRpb25IYW5kbGVyKElQQzo6QXJy
YXlSZWZlcmVuY2U8ZmxvYXQ+KHJlaW50ZXJwcmV0X2Nhc3Q8ZmxvYXQqPih2YWx1ZS5kYXRhKCkp
LCB2YWx1ZS5zaXplKCkpKTsKICAgICB9CiAgICAgdm9pZCBnZXRJbnRlZ2Vydih1aW50MzJfdCBw
bmFtZSwgdWludDY0X3QgdmFsdWVTaXplLCBDb21wbGV0aW9uSGFuZGxlcjx2b2lkKElQQzo6QXJy
YXlSZWZlcmVuY2U8aW50MzJfdD4pPiYmIGNvbXBsZXRpb25IYW5kbGVyKQogICAgIHsKICAgICAg
ICAgVmVjdG9yPEdDR0xpbnQsIDQ+IHZhbHVlKHN0YXRpY19jYXN0PHNpemVfdD4odmFsdWVTaXpl
KSwgMCk7Ci0gICAgICAgIGFzc2VydElzQ3VycmVudChtX3N0cmVhbVRocmVhZCk7CisgICAgICAg
IGFzc2VydElzQ3VycmVudCh3b3JrUXVldWUoKSk7CiAgICAgICAgIG1fY29udGV4dC0+Z2V0SW50
ZWdlcnYocG5hbWUsIHZhbHVlKTsKICAgICAgICAgY29tcGxldGlvbkhhbmRsZXIoSVBDOjpBcnJh
eVJlZmVyZW5jZTxpbnQzMl90PihyZWludGVycHJldF9jYXN0PGludDMyX3QqPih2YWx1ZS5kYXRh
KCkpLCB2YWx1ZS5zaXplKCkpKTsKICAgICB9CiAgICAgdm9pZCBnZXRJbnRlZ2VyNjQodWludDMy
X3QgcG5hbWUsIENvbXBsZXRpb25IYW5kbGVyPHZvaWQoaW50NjRfdCk+JiYgY29tcGxldGlvbkhh
bmRsZXIpCiAgICAgewogICAgICAgICBHQ0dMaW50NjQgcmV0dXJuVmFsdWUgPSB7IH07Ci0gICAg
ICAgIGFzc2VydElzQ3VycmVudChtX3N0cmVhbVRocmVhZCk7CisgICAgICAgIGFzc2VydElzQ3Vy
cmVudCh3b3JrUXVldWUoKSk7CiAgICAgICAgIHJldHVyblZhbHVlID0gbV9jb250ZXh0LT5nZXRJ
bnRlZ2VyNjQocG5hbWUpOwogICAgICAgICBjb21wbGV0aW9uSGFuZGxlcihzdGF0aWNfY2FzdDxp
bnQ2NF90PihyZXR1cm5WYWx1ZSkpOwogICAgIH0KICAgICB2b2lkIGdldEludGVnZXI2NGkodWlu
dDMyX3QgcG5hbWUsIHVpbnQzMl90IGluZGV4LCBDb21wbGV0aW9uSGFuZGxlcjx2b2lkKGludDY0
X3QpPiYmIGNvbXBsZXRpb25IYW5kbGVyKQogICAgIHsKICAgICAgICAgR0NHTGludDY0IHJldHVy
blZhbHVlID0geyB9OwotICAgICAgICBhc3NlcnRJc0N1cnJlbnQobV9zdHJlYW1UaHJlYWQpOwor
ICAgICAgICBhc3NlcnRJc0N1cnJlbnQod29ya1F1ZXVlKCkpOwogICAgICAgICByZXR1cm5WYWx1
ZSA9IG1fY29udGV4dC0+Z2V0SW50ZWdlcjY0aShwbmFtZSwgaW5kZXgpOwogICAgICAgICBjb21w
bGV0aW9uSGFuZGxlcihzdGF0aWNfY2FzdDxpbnQ2NF90PihyZXR1cm5WYWx1ZSkpOwogICAgIH0K
ICAgICB2b2lkIGdldFByb2dyYW1pKHVpbnQzMl90IHByb2dyYW0sIHVpbnQzMl90IHBuYW1lLCBD
b21wbGV0aW9uSGFuZGxlcjx2b2lkKGludDMyX3QpPiYmIGNvbXBsZXRpb25IYW5kbGVyKQogICAg
IHsKICAgICAgICAgR0NHTGludCByZXR1cm5WYWx1ZSA9IHsgfTsKLSAgICAgICAgYXNzZXJ0SXND
dXJyZW50KG1fc3RyZWFtVGhyZWFkKTsKKyAgICAgICAgYXNzZXJ0SXNDdXJyZW50KHdvcmtRdWV1
ZSgpKTsKICAgICAgICAgcmV0dXJuVmFsdWUgPSBtX2NvbnRleHQtPmdldFByb2dyYW1pKHByb2dy
YW0sIHBuYW1lKTsKICAgICAgICAgY29tcGxldGlvbkhhbmRsZXIocmV0dXJuVmFsdWUpOwogICAg
IH0KICAgICB2b2lkIGdldEJvb2xlYW52KHVpbnQzMl90IHBuYW1lLCB1aW50NjRfdCB2YWx1ZVNp
emUsIENvbXBsZXRpb25IYW5kbGVyPHZvaWQoSVBDOjpBcnJheVJlZmVyZW5jZTxib29sPik+JiYg
Y29tcGxldGlvbkhhbmRsZXIpCiAgICAgewogICAgICAgICBWZWN0b3I8R0NHTGJvb2xlYW4sIDQ+
IHZhbHVlKHN0YXRpY19jYXN0PHNpemVfdD4odmFsdWVTaXplKSwgMCk7Ci0gICAgICAgIGFzc2Vy
dElzQ3VycmVudChtX3N0cmVhbVRocmVhZCk7CisgICAgICAgIGFzc2VydElzQ3VycmVudCh3b3Jr
UXVldWUoKSk7CiAgICAgICAgIG1fY29udGV4dC0+Z2V0Qm9vbGVhbnYocG5hbWUsIHZhbHVlKTsK
ICAgICAgICAgY29tcGxldGlvbkhhbmRsZXIoSVBDOjpBcnJheVJlZmVyZW5jZTxib29sPihyZWlu
dGVycHJldF9jYXN0PGJvb2wqPih2YWx1ZS5kYXRhKCkpLCB2YWx1ZS5zaXplKCkpKTsKICAgICB9
CiAgICAgdm9pZCBnZXRGcmFtZWJ1ZmZlckF0dGFjaG1lbnRQYXJhbWV0ZXJpKHVpbnQzMl90IHRh
cmdldCwgdWludDMyX3QgYXR0YWNobWVudCwgdWludDMyX3QgcG5hbWUsIENvbXBsZXRpb25IYW5k
bGVyPHZvaWQoaW50MzJfdCk+JiYgY29tcGxldGlvbkhhbmRsZXIpCiAgICAgewogICAgICAgICBH
Q0dMaW50IHJldHVyblZhbHVlID0geyB9OwotICAgICAgICBhc3NlcnRJc0N1cnJlbnQobV9zdHJl
YW1UaHJlYWQpOworICAgICAgICBhc3NlcnRJc0N1cnJlbnQod29ya1F1ZXVlKCkpOwogICAgICAg
ICByZXR1cm5WYWx1ZSA9IG1fY29udGV4dC0+Z2V0RnJhbWVidWZmZXJBdHRhY2htZW50UGFyYW1l
dGVyaSh0YXJnZXQsIGF0dGFjaG1lbnQsIHBuYW1lKTsKICAgICAgICAgY29tcGxldGlvbkhhbmRs
ZXIocmV0dXJuVmFsdWUpOwogICAgIH0KICAgICB2b2lkIGdldFByb2dyYW1JbmZvTG9nKHVpbnQz
Ml90IGFyZzAsIENvbXBsZXRpb25IYW5kbGVyPHZvaWQoU3RyaW5nJiYpPiYmIGNvbXBsZXRpb25I
YW5kbGVyKQogICAgIHsKICAgICAgICAgU3RyaW5nIHJldHVyblZhbHVlID0geyB9OwotICAgICAg
ICBhc3NlcnRJc0N1cnJlbnQobV9zdHJlYW1UaHJlYWQpOworICAgICAgICBhc3NlcnRJc0N1cnJl
bnQod29ya1F1ZXVlKCkpOwogICAgICAgICByZXR1cm5WYWx1ZSA9IG1fY29udGV4dC0+Z2V0UHJv
Z3JhbUluZm9Mb2coYXJnMCk7CiAgICAgICAgIGNvbXBsZXRpb25IYW5kbGVyKFdURk1vdmUocmV0
dXJuVmFsdWUpKTsKICAgICB9CiAgICAgdm9pZCBnZXRSZW5kZXJidWZmZXJQYXJhbWV0ZXJpKHVp
bnQzMl90IHRhcmdldCwgdWludDMyX3QgcG5hbWUsIENvbXBsZXRpb25IYW5kbGVyPHZvaWQoaW50
MzJfdCk+JiYgY29tcGxldGlvbkhhbmRsZXIpCiAgICAgewogICAgICAgICBHQ0dMaW50IHJldHVy
blZhbHVlID0geyB9OwotICAgICAgICBhc3NlcnRJc0N1cnJlbnQobV9zdHJlYW1UaHJlYWQpOwor
ICAgICAgICBhc3NlcnRJc0N1cnJlbnQod29ya1F1ZXVlKCkpOwogICAgICAgICByZXR1cm5WYWx1
ZSA9IG1fY29udGV4dC0+Z2V0UmVuZGVyYnVmZmVyUGFyYW1ldGVyaSh0YXJnZXQsIHBuYW1lKTsK
ICAgICAgICAgY29tcGxldGlvbkhhbmRsZXIocmV0dXJuVmFsdWUpOwogICAgIH0KICAgICB2b2lk
IGdldFNoYWRlcmkodWludDMyX3QgYXJnMCwgdWludDMyX3QgcG5hbWUsIENvbXBsZXRpb25IYW5k
bGVyPHZvaWQoaW50MzJfdCk+JiYgY29tcGxldGlvbkhhbmRsZXIpCiAgICAgewogICAgICAgICBH
Q0dMaW50IHJldHVyblZhbHVlID0geyB9OwotICAgICAgICBhc3NlcnRJc0N1cnJlbnQobV9zdHJl
YW1UaHJlYWQpOworICAgICAgICBhc3NlcnRJc0N1cnJlbnQod29ya1F1ZXVlKCkpOwogICAgICAg
ICByZXR1cm5WYWx1ZSA9IG1fY29udGV4dC0+Z2V0U2hhZGVyaShhcmcwLCBwbmFtZSk7CiAgICAg
ICAgIGNvbXBsZXRpb25IYW5kbGVyKHJldHVyblZhbHVlKTsKICAgICB9CiAgICAgdm9pZCBnZXRT
aGFkZXJJbmZvTG9nKHVpbnQzMl90IGFyZzAsIENvbXBsZXRpb25IYW5kbGVyPHZvaWQoU3RyaW5n
JiYpPiYmIGNvbXBsZXRpb25IYW5kbGVyKQogICAgIHsKICAgICAgICAgU3RyaW5nIHJldHVyblZh
bHVlID0geyB9OwotICAgICAgICBhc3NlcnRJc0N1cnJlbnQobV9zdHJlYW1UaHJlYWQpOworICAg
ICAgICBhc3NlcnRJc0N1cnJlbnQod29ya1F1ZXVlKCkpOwogICAgICAgICByZXR1cm5WYWx1ZSA9
IG1fY29udGV4dC0+Z2V0U2hhZGVySW5mb0xvZyhhcmcwKTsKICAgICAgICAgY29tcGxldGlvbkhh
bmRsZXIoV1RGTW92ZShyZXR1cm5WYWx1ZSkpOwogICAgIH0KQEAgLTQxNCw5NzUgKzQxNCw5NzUg
QEAKICAgICB7CiAgICAgICAgIHN0ZDo6YXJyYXk8R0NHTGludCwgMj4gcmFuZ2UgeyB9OwogICAg
ICAgICBHQ0dMaW50IHByZWNpc2lvbiA9IHsgfTsKLSAgICAgICAgYXNzZXJ0SXNDdXJyZW50KG1f
c3RyZWFtVGhyZWFkKTsKKyAgICAgICAgYXNzZXJ0SXNDdXJyZW50KHdvcmtRdWV1ZSgpKTsKICAg
ICAgICAgbV9jb250ZXh0LT5nZXRTaGFkZXJQcmVjaXNpb25Gb3JtYXQoc2hhZGVyVHlwZSwgcHJl
Y2lzaW9uVHlwZSwgcmFuZ2UsICZwcmVjaXNpb24pOwogICAgICAgICBjb21wbGV0aW9uSGFuZGxl
cihJUEM6OkFycmF5UmVmZXJlbmNlPGludDMyX3QsIDI+KHJlaW50ZXJwcmV0X2Nhc3Q8aW50MzJf
dCo+KHJhbmdlLmRhdGEoKSksIHJhbmdlLnNpemUoKSksIHByZWNpc2lvbik7CiAgICAgfQogICAg
IHZvaWQgZ2V0U2hhZGVyU291cmNlKHVpbnQzMl90IGFyZzAsIENvbXBsZXRpb25IYW5kbGVyPHZv
aWQoU3RyaW5nJiYpPiYmIGNvbXBsZXRpb25IYW5kbGVyKQogICAgIHsKICAgICAgICAgU3RyaW5n
IHJldHVyblZhbHVlID0geyB9OwotICAgICAgICBhc3NlcnRJc0N1cnJlbnQobV9zdHJlYW1UaHJl
YWQpOworICAgICAgICBhc3NlcnRJc0N1cnJlbnQod29ya1F1ZXVlKCkpOwogICAgICAgICByZXR1
cm5WYWx1ZSA9IG1fY29udGV4dC0+Z2V0U2hhZGVyU291cmNlKGFyZzApOwogICAgICAgICBjb21w
bGV0aW9uSGFuZGxlcihXVEZNb3ZlKHJldHVyblZhbHVlKSk7CiAgICAgfQogICAgIHZvaWQgZ2V0
VGV4UGFyYW1ldGVyZih1aW50MzJfdCB0YXJnZXQsIHVpbnQzMl90IHBuYW1lLCBDb21wbGV0aW9u
SGFuZGxlcjx2b2lkKGZsb2F0KT4mJiBjb21wbGV0aW9uSGFuZGxlcikKICAgICB7CiAgICAgICAg
IEdDR0xmbG9hdCByZXR1cm5WYWx1ZSA9IHsgfTsKLSAgICAgICAgYXNzZXJ0SXNDdXJyZW50KG1f
c3RyZWFtVGhyZWFkKTsKKyAgICAgICAgYXNzZXJ0SXNDdXJyZW50KHdvcmtRdWV1ZSgpKTsKICAg
ICAgICAgcmV0dXJuVmFsdWUgPSBtX2NvbnRleHQtPmdldFRleFBhcmFtZXRlcmYodGFyZ2V0LCBw
bmFtZSk7CiAgICAgICAgIGNvbXBsZXRpb25IYW5kbGVyKHJldHVyblZhbHVlKTsKICAgICB9CiAg
ICAgdm9pZCBnZXRUZXhQYXJhbWV0ZXJpKHVpbnQzMl90IHRhcmdldCwgdWludDMyX3QgcG5hbWUs
IENvbXBsZXRpb25IYW5kbGVyPHZvaWQoaW50MzJfdCk+JiYgY29tcGxldGlvbkhhbmRsZXIpCiAg
ICAgewogICAgICAgICBHQ0dMaW50IHJldHVyblZhbHVlID0geyB9OwotICAgICAgICBhc3NlcnRJ
c0N1cnJlbnQobV9zdHJlYW1UaHJlYWQpOworICAgICAgICBhc3NlcnRJc0N1cnJlbnQod29ya1F1
ZXVlKCkpOwogICAgICAgICByZXR1cm5WYWx1ZSA9IG1fY29udGV4dC0+Z2V0VGV4UGFyYW1ldGVy
aSh0YXJnZXQsIHBuYW1lKTsKICAgICAgICAgY29tcGxldGlvbkhhbmRsZXIocmV0dXJuVmFsdWUp
OwogICAgIH0KICAgICB2b2lkIGdldFVuaWZvcm1mdih1aW50MzJfdCBwcm9ncmFtLCBpbnQzMl90
IGxvY2F0aW9uLCB1aW50NjRfdCB2YWx1ZVNpemUsIENvbXBsZXRpb25IYW5kbGVyPHZvaWQoSVBD
OjpBcnJheVJlZmVyZW5jZTxmbG9hdD4pPiYmIGNvbXBsZXRpb25IYW5kbGVyKQogICAgIHsKICAg
ICAgICAgVmVjdG9yPEdDR0xmbG9hdCwgMTY+IHZhbHVlKHN0YXRpY19jYXN0PHNpemVfdD4odmFs
dWVTaXplKSwgMCk7Ci0gICAgICAgIGFzc2VydElzQ3VycmVudChtX3N0cmVhbVRocmVhZCk7Cisg
ICAgICAgIGFzc2VydElzQ3VycmVudCh3b3JrUXVldWUoKSk7CiAgICAgICAgIG1fY29udGV4dC0+
Z2V0VW5pZm9ybWZ2KHByb2dyYW0sIGxvY2F0aW9uLCB2YWx1ZSk7CiAgICAgICAgIGNvbXBsZXRp
b25IYW5kbGVyKElQQzo6QXJyYXlSZWZlcmVuY2U8ZmxvYXQ+KHJlaW50ZXJwcmV0X2Nhc3Q8Zmxv
YXQqPih2YWx1ZS5kYXRhKCkpLCB2YWx1ZS5zaXplKCkpKTsKICAgICB9CiAgICAgdm9pZCBnZXRV
bmlmb3JtaXYodWludDMyX3QgcHJvZ3JhbSwgaW50MzJfdCBsb2NhdGlvbiwgdWludDY0X3QgdmFs
dWVTaXplLCBDb21wbGV0aW9uSGFuZGxlcjx2b2lkKElQQzo6QXJyYXlSZWZlcmVuY2U8aW50MzJf
dD4pPiYmIGNvbXBsZXRpb25IYW5kbGVyKQogICAgIHsKICAgICAgICAgVmVjdG9yPEdDR0xpbnQs
IDQ+IHZhbHVlKHN0YXRpY19jYXN0PHNpemVfdD4odmFsdWVTaXplKSwgMCk7Ci0gICAgICAgIGFz
c2VydElzQ3VycmVudChtX3N0cmVhbVRocmVhZCk7CisgICAgICAgIGFzc2VydElzQ3VycmVudCh3
b3JrUXVldWUoKSk7CiAgICAgICAgIG1fY29udGV4dC0+Z2V0VW5pZm9ybWl2KHByb2dyYW0sIGxv
Y2F0aW9uLCB2YWx1ZSk7CiAgICAgICAgIGNvbXBsZXRpb25IYW5kbGVyKElQQzo6QXJyYXlSZWZl
cmVuY2U8aW50MzJfdD4ocmVpbnRlcnByZXRfY2FzdDxpbnQzMl90Kj4odmFsdWUuZGF0YSgpKSwg
dmFsdWUuc2l6ZSgpKSk7CiAgICAgfQogICAgIHZvaWQgZ2V0VW5pZm9ybXVpdih1aW50MzJfdCBw
cm9ncmFtLCBpbnQzMl90IGxvY2F0aW9uLCB1aW50NjRfdCB2YWx1ZVNpemUsIENvbXBsZXRpb25I
YW5kbGVyPHZvaWQoSVBDOjpBcnJheVJlZmVyZW5jZTx1aW50MzJfdD4pPiYmIGNvbXBsZXRpb25I
YW5kbGVyKQogICAgIHsKICAgICAgICAgVmVjdG9yPEdDR0x1aW50LCA0PiB2YWx1ZShzdGF0aWNf
Y2FzdDxzaXplX3Q+KHZhbHVlU2l6ZSksIDApOwotICAgICAgICBhc3NlcnRJc0N1cnJlbnQobV9z
dHJlYW1UaHJlYWQpOworICAgICAgICBhc3NlcnRJc0N1cnJlbnQod29ya1F1ZXVlKCkpOwogICAg
ICAgICBtX2NvbnRleHQtPmdldFVuaWZvcm11aXYocHJvZ3JhbSwgbG9jYXRpb24sIHZhbHVlKTsK
ICAgICAgICAgY29tcGxldGlvbkhhbmRsZXIoSVBDOjpBcnJheVJlZmVyZW5jZTx1aW50MzJfdD4o
cmVpbnRlcnByZXRfY2FzdDx1aW50MzJfdCo+KHZhbHVlLmRhdGEoKSksIHZhbHVlLnNpemUoKSkp
OwogICAgIH0KICAgICB2b2lkIGdldFVuaWZvcm1Mb2NhdGlvbih1aW50MzJfdCBhcmcwLCBTdHJp
bmcmJiBuYW1lLCBDb21wbGV0aW9uSGFuZGxlcjx2b2lkKGludDMyX3QpPiYmIGNvbXBsZXRpb25I
YW5kbGVyKQogICAgIHsKICAgICAgICAgR0NHTGludCByZXR1cm5WYWx1ZSA9IHsgfTsKLSAgICAg
ICAgYXNzZXJ0SXNDdXJyZW50KG1fc3RyZWFtVGhyZWFkKTsKKyAgICAgICAgYXNzZXJ0SXNDdXJy
ZW50KHdvcmtRdWV1ZSgpKTsKICAgICAgICAgcmV0dXJuVmFsdWUgPSBtX2NvbnRleHQtPmdldFVu
aWZvcm1Mb2NhdGlvbihhcmcwLCBuYW1lKTsKICAgICAgICAgY29tcGxldGlvbkhhbmRsZXIocmV0
dXJuVmFsdWUpOwogICAgIH0KICAgICB2b2lkIGdldFZlcnRleEF0dHJpYk9mZnNldCh1aW50MzJf
dCBpbmRleCwgdWludDMyX3QgcG5hbWUsIENvbXBsZXRpb25IYW5kbGVyPHZvaWQodWludDY0X3Qp
PiYmIGNvbXBsZXRpb25IYW5kbGVyKQogICAgIHsKICAgICAgICAgR0NHTHNpemVpcHRyIHJldHVy
blZhbHVlID0geyB9OwotICAgICAgICBhc3NlcnRJc0N1cnJlbnQobV9zdHJlYW1UaHJlYWQpOwor
ICAgICAgICBhc3NlcnRJc0N1cnJlbnQod29ya1F1ZXVlKCkpOwogICAgICAgICByZXR1cm5WYWx1
ZSA9IG1fY29udGV4dC0+Z2V0VmVydGV4QXR0cmliT2Zmc2V0KGluZGV4LCBwbmFtZSk7CiAgICAg
ICAgIGNvbXBsZXRpb25IYW5kbGVyKHN0YXRpY19jYXN0PHVpbnQ2NF90PihyZXR1cm5WYWx1ZSkp
OwogICAgIH0KICAgICB2b2lkIGhpbnQodWludDMyX3QgdGFyZ2V0LCB1aW50MzJfdCBtb2RlKQog
ICAgIHsKLSAgICAgICAgYXNzZXJ0SXNDdXJyZW50KG1fc3RyZWFtVGhyZWFkKTsKKyAgICAgICAg
YXNzZXJ0SXNDdXJyZW50KHdvcmtRdWV1ZSgpKTsKICAgICAgICAgbV9jb250ZXh0LT5oaW50KHRh
cmdldCwgbW9kZSk7CiAgICAgfQogICAgIHZvaWQgaXNCdWZmZXIodWludDMyX3QgYXJnMCwgQ29t
cGxldGlvbkhhbmRsZXI8dm9pZChib29sKT4mJiBjb21wbGV0aW9uSGFuZGxlcikKICAgICB7CiAg
ICAgICAgIEdDR0xib29sZWFuIHJldHVyblZhbHVlID0geyB9OwotICAgICAgICBhc3NlcnRJc0N1
cnJlbnQobV9zdHJlYW1UaHJlYWQpOworICAgICAgICBhc3NlcnRJc0N1cnJlbnQod29ya1F1ZXVl
KCkpOwogICAgICAgICByZXR1cm5WYWx1ZSA9IG1fY29udGV4dC0+aXNCdWZmZXIoYXJnMCk7CiAg
ICAgICAgIGNvbXBsZXRpb25IYW5kbGVyKHN0YXRpY19jYXN0PGJvb2w+KHJldHVyblZhbHVlKSk7
CiAgICAgfQogICAgIHZvaWQgaXNFbmFibGVkKHVpbnQzMl90IGNhcCwgQ29tcGxldGlvbkhhbmRs
ZXI8dm9pZChib29sKT4mJiBjb21wbGV0aW9uSGFuZGxlcikKICAgICB7CiAgICAgICAgIEdDR0xi
b29sZWFuIHJldHVyblZhbHVlID0geyB9OwotICAgICAgICBhc3NlcnRJc0N1cnJlbnQobV9zdHJl
YW1UaHJlYWQpOworICAgICAgICBhc3NlcnRJc0N1cnJlbnQod29ya1F1ZXVlKCkpOwogICAgICAg
ICByZXR1cm5WYWx1ZSA9IG1fY29udGV4dC0+aXNFbmFibGVkKGNhcCk7CiAgICAgICAgIGNvbXBs
ZXRpb25IYW5kbGVyKHN0YXRpY19jYXN0PGJvb2w+KHJldHVyblZhbHVlKSk7CiAgICAgfQogICAg
IHZvaWQgaXNGcmFtZWJ1ZmZlcih1aW50MzJfdCBhcmcwLCBDb21wbGV0aW9uSGFuZGxlcjx2b2lk
KGJvb2wpPiYmIGNvbXBsZXRpb25IYW5kbGVyKQogICAgIHsKICAgICAgICAgR0NHTGJvb2xlYW4g
cmV0dXJuVmFsdWUgPSB7IH07Ci0gICAgICAgIGFzc2VydElzQ3VycmVudChtX3N0cmVhbVRocmVh
ZCk7CisgICAgICAgIGFzc2VydElzQ3VycmVudCh3b3JrUXVldWUoKSk7CiAgICAgICAgIHJldHVy
blZhbHVlID0gbV9jb250ZXh0LT5pc0ZyYW1lYnVmZmVyKGFyZzApOwogICAgICAgICBjb21wbGV0
aW9uSGFuZGxlcihzdGF0aWNfY2FzdDxib29sPihyZXR1cm5WYWx1ZSkpOwogICAgIH0KICAgICB2
b2lkIGlzUHJvZ3JhbSh1aW50MzJfdCBhcmcwLCBDb21wbGV0aW9uSGFuZGxlcjx2b2lkKGJvb2wp
PiYmIGNvbXBsZXRpb25IYW5kbGVyKQogICAgIHsKICAgICAgICAgR0NHTGJvb2xlYW4gcmV0dXJu
VmFsdWUgPSB7IH07Ci0gICAgICAgIGFzc2VydElzQ3VycmVudChtX3N0cmVhbVRocmVhZCk7Cisg
ICAgICAgIGFzc2VydElzQ3VycmVudCh3b3JrUXVldWUoKSk7CiAgICAgICAgIHJldHVyblZhbHVl
ID0gbV9jb250ZXh0LT5pc1Byb2dyYW0oYXJnMCk7CiAgICAgICAgIGNvbXBsZXRpb25IYW5kbGVy
KHN0YXRpY19jYXN0PGJvb2w+KHJldHVyblZhbHVlKSk7CiAgICAgfQogICAgIHZvaWQgaXNSZW5k
ZXJidWZmZXIodWludDMyX3QgYXJnMCwgQ29tcGxldGlvbkhhbmRsZXI8dm9pZChib29sKT4mJiBj
b21wbGV0aW9uSGFuZGxlcikKICAgICB7CiAgICAgICAgIEdDR0xib29sZWFuIHJldHVyblZhbHVl
ID0geyB9OwotICAgICAgICBhc3NlcnRJc0N1cnJlbnQobV9zdHJlYW1UaHJlYWQpOworICAgICAg
ICBhc3NlcnRJc0N1cnJlbnQod29ya1F1ZXVlKCkpOwogICAgICAgICByZXR1cm5WYWx1ZSA9IG1f
Y29udGV4dC0+aXNSZW5kZXJidWZmZXIoYXJnMCk7CiAgICAgICAgIGNvbXBsZXRpb25IYW5kbGVy
KHN0YXRpY19jYXN0PGJvb2w+KHJldHVyblZhbHVlKSk7CiAgICAgfQogICAgIHZvaWQgaXNTaGFk
ZXIodWludDMyX3QgYXJnMCwgQ29tcGxldGlvbkhhbmRsZXI8dm9pZChib29sKT4mJiBjb21wbGV0
aW9uSGFuZGxlcikKICAgICB7CiAgICAgICAgIEdDR0xib29sZWFuIHJldHVyblZhbHVlID0geyB9
OwotICAgICAgICBhc3NlcnRJc0N1cnJlbnQobV9zdHJlYW1UaHJlYWQpOworICAgICAgICBhc3Nl
cnRJc0N1cnJlbnQod29ya1F1ZXVlKCkpOwogICAgICAgICByZXR1cm5WYWx1ZSA9IG1fY29udGV4
dC0+aXNTaGFkZXIoYXJnMCk7CiAgICAgICAgIGNvbXBsZXRpb25IYW5kbGVyKHN0YXRpY19jYXN0
PGJvb2w+KHJldHVyblZhbHVlKSk7CiAgICAgfQogICAgIHZvaWQgaXNUZXh0dXJlKHVpbnQzMl90
IGFyZzAsIENvbXBsZXRpb25IYW5kbGVyPHZvaWQoYm9vbCk+JiYgY29tcGxldGlvbkhhbmRsZXIp
CiAgICAgewogICAgICAgICBHQ0dMYm9vbGVhbiByZXR1cm5WYWx1ZSA9IHsgfTsKLSAgICAgICAg
YXNzZXJ0SXNDdXJyZW50KG1fc3RyZWFtVGhyZWFkKTsKKyAgICAgICAgYXNzZXJ0SXNDdXJyZW50
KHdvcmtRdWV1ZSgpKTsKICAgICAgICAgcmV0dXJuVmFsdWUgPSBtX2NvbnRleHQtPmlzVGV4dHVy
ZShhcmcwKTsKICAgICAgICAgY29tcGxldGlvbkhhbmRsZXIoc3RhdGljX2Nhc3Q8Ym9vbD4ocmV0
dXJuVmFsdWUpKTsKICAgICB9CiAgICAgdm9pZCBsaW5lV2lkdGgoZmxvYXQgYXJnMCkKICAgICB7
Ci0gICAgICAgIGFzc2VydElzQ3VycmVudChtX3N0cmVhbVRocmVhZCk7CisgICAgICAgIGFzc2Vy
dElzQ3VycmVudCh3b3JrUXVldWUoKSk7CiAgICAgICAgIG1fY29udGV4dC0+bGluZVdpZHRoKGFy
ZzApOwogICAgIH0KICAgICB2b2lkIGxpbmtQcm9ncmFtKHVpbnQzMl90IGFyZzApCiAgICAgewot
ICAgICAgICBhc3NlcnRJc0N1cnJlbnQobV9zdHJlYW1UaHJlYWQpOworICAgICAgICBhc3NlcnRJ
c0N1cnJlbnQod29ya1F1ZXVlKCkpOwogICAgICAgICBtX2NvbnRleHQtPmxpbmtQcm9ncmFtKGFy
ZzApOwogICAgIH0KICAgICB2b2lkIHBpeGVsU3RvcmVpKHVpbnQzMl90IHBuYW1lLCBpbnQzMl90
IHBhcmFtKQogICAgIHsKLSAgICAgICAgYXNzZXJ0SXNDdXJyZW50KG1fc3RyZWFtVGhyZWFkKTsK
KyAgICAgICAgYXNzZXJ0SXNDdXJyZW50KHdvcmtRdWV1ZSgpKTsKICAgICAgICAgbV9jb250ZXh0
LT5waXhlbFN0b3JlaShwbmFtZSwgcGFyYW0pOwogICAgIH0KICAgICB2b2lkIHBvbHlnb25PZmZz
ZXQoZmxvYXQgZmFjdG9yLCBmbG9hdCB1bml0cykKICAgICB7Ci0gICAgICAgIGFzc2VydElzQ3Vy
cmVudChtX3N0cmVhbVRocmVhZCk7CisgICAgICAgIGFzc2VydElzQ3VycmVudCh3b3JrUXVldWUo
KSk7CiAgICAgICAgIG1fY29udGV4dC0+cG9seWdvbk9mZnNldChmYWN0b3IsIHVuaXRzKTsKICAg
ICB9CiAgICAgdm9pZCByZW5kZXJidWZmZXJTdG9yYWdlKHVpbnQzMl90IHRhcmdldCwgdWludDMy
X3QgaW50ZXJuYWxmb3JtYXQsIGludDMyX3Qgd2lkdGgsIGludDMyX3QgaGVpZ2h0KQogICAgIHsK
LSAgICAgICAgYXNzZXJ0SXNDdXJyZW50KG1fc3RyZWFtVGhyZWFkKTsKKyAgICAgICAgYXNzZXJ0
SXNDdXJyZW50KHdvcmtRdWV1ZSgpKTsKICAgICAgICAgbV9jb250ZXh0LT5yZW5kZXJidWZmZXJT
dG9yYWdlKHRhcmdldCwgaW50ZXJuYWxmb3JtYXQsIHdpZHRoLCBoZWlnaHQpOwogICAgIH0KICAg
ICB2b2lkIHNhbXBsZUNvdmVyYWdlKGZsb2F0IHZhbHVlLCBib29sIGludmVydCkKICAgICB7Ci0g
ICAgICAgIGFzc2VydElzQ3VycmVudChtX3N0cmVhbVRocmVhZCk7CisgICAgICAgIGFzc2VydElz
Q3VycmVudCh3b3JrUXVldWUoKSk7CiAgICAgICAgIG1fY29udGV4dC0+c2FtcGxlQ292ZXJhZ2Uo
dmFsdWUsIHN0YXRpY19jYXN0PEdDR0xib29sZWFuPihpbnZlcnQpKTsKICAgICB9CiAgICAgdm9p
ZCBzY2lzc29yKGludDMyX3QgeCwgaW50MzJfdCB5LCBpbnQzMl90IHdpZHRoLCBpbnQzMl90IGhl
aWdodCkKICAgICB7Ci0gICAgICAgIGFzc2VydElzQ3VycmVudChtX3N0cmVhbVRocmVhZCk7Cisg
ICAgICAgIGFzc2VydElzQ3VycmVudCh3b3JrUXVldWUoKSk7CiAgICAgICAgIG1fY29udGV4dC0+
c2Npc3Nvcih4LCB5LCB3aWR0aCwgaGVpZ2h0KTsKICAgICB9CiAgICAgdm9pZCBzaGFkZXJTb3Vy
Y2UodWludDMyX3QgYXJnMCwgU3RyaW5nJiYgYXJnMSkKICAgICB7Ci0gICAgICAgIGFzc2VydElz
Q3VycmVudChtX3N0cmVhbVRocmVhZCk7CisgICAgICAgIGFzc2VydElzQ3VycmVudCh3b3JrUXVl
dWUoKSk7CiAgICAgICAgIG1fY29udGV4dC0+c2hhZGVyU291cmNlKGFyZzAsIGFyZzEpOwogICAg
IH0KICAgICB2b2lkIHN0ZW5jaWxGdW5jKHVpbnQzMl90IGZ1bmMsIGludDMyX3QgcmVmLCB1aW50
MzJfdCBtYXNrKQogICAgIHsKLSAgICAgICAgYXNzZXJ0SXNDdXJyZW50KG1fc3RyZWFtVGhyZWFk
KTsKKyAgICAgICAgYXNzZXJ0SXNDdXJyZW50KHdvcmtRdWV1ZSgpKTsKICAgICAgICAgbV9jb250
ZXh0LT5zdGVuY2lsRnVuYyhmdW5jLCByZWYsIG1hc2spOwogICAgIH0KICAgICB2b2lkIHN0ZW5j
aWxGdW5jU2VwYXJhdGUodWludDMyX3QgZmFjZSwgdWludDMyX3QgZnVuYywgaW50MzJfdCByZWYs
IHVpbnQzMl90IG1hc2spCiAgICAgewotICAgICAgICBhc3NlcnRJc0N1cnJlbnQobV9zdHJlYW1U
aHJlYWQpOworICAgICAgICBhc3NlcnRJc0N1cnJlbnQod29ya1F1ZXVlKCkpOwogICAgICAgICBt
X2NvbnRleHQtPnN0ZW5jaWxGdW5jU2VwYXJhdGUoZmFjZSwgZnVuYywgcmVmLCBtYXNrKTsKICAg
ICB9CiAgICAgdm9pZCBzdGVuY2lsTWFzayh1aW50MzJfdCBtYXNrKQogICAgIHsKLSAgICAgICAg
YXNzZXJ0SXNDdXJyZW50KG1fc3RyZWFtVGhyZWFkKTsKKyAgICAgICAgYXNzZXJ0SXNDdXJyZW50
KHdvcmtRdWV1ZSgpKTsKICAgICAgICAgbV9jb250ZXh0LT5zdGVuY2lsTWFzayhtYXNrKTsKICAg
ICB9CiAgICAgdm9pZCBzdGVuY2lsTWFza1NlcGFyYXRlKHVpbnQzMl90IGZhY2UsIHVpbnQzMl90
IG1hc2spCiAgICAgewotICAgICAgICBhc3NlcnRJc0N1cnJlbnQobV9zdHJlYW1UaHJlYWQpOwor
ICAgICAgICBhc3NlcnRJc0N1cnJlbnQod29ya1F1ZXVlKCkpOwogICAgICAgICBtX2NvbnRleHQt
PnN0ZW5jaWxNYXNrU2VwYXJhdGUoZmFjZSwgbWFzayk7CiAgICAgfQogICAgIHZvaWQgc3RlbmNp
bE9wKHVpbnQzMl90IGZhaWwsIHVpbnQzMl90IHpmYWlsLCB1aW50MzJfdCB6cGFzcykKICAgICB7
Ci0gICAgICAgIGFzc2VydElzQ3VycmVudChtX3N0cmVhbVRocmVhZCk7CisgICAgICAgIGFzc2Vy
dElzQ3VycmVudCh3b3JrUXVldWUoKSk7CiAgICAgICAgIG1fY29udGV4dC0+c3RlbmNpbE9wKGZh
aWwsIHpmYWlsLCB6cGFzcyk7CiAgICAgfQogICAgIHZvaWQgc3RlbmNpbE9wU2VwYXJhdGUodWlu
dDMyX3QgZmFjZSwgdWludDMyX3QgZmFpbCwgdWludDMyX3QgemZhaWwsIHVpbnQzMl90IHpwYXNz
KQogICAgIHsKLSAgICAgICAgYXNzZXJ0SXNDdXJyZW50KG1fc3RyZWFtVGhyZWFkKTsKKyAgICAg
ICAgYXNzZXJ0SXNDdXJyZW50KHdvcmtRdWV1ZSgpKTsKICAgICAgICAgbV9jb250ZXh0LT5zdGVu
Y2lsT3BTZXBhcmF0ZShmYWNlLCBmYWlsLCB6ZmFpbCwgenBhc3MpOwogICAgIH0KICAgICB2b2lk
IHRleFBhcmFtZXRlcmYodWludDMyX3QgdGFyZ2V0LCB1aW50MzJfdCBwbmFtZSwgZmxvYXQgcGFy
YW0pCiAgICAgewotICAgICAgICBhc3NlcnRJc0N1cnJlbnQobV9zdHJlYW1UaHJlYWQpOworICAg
ICAgICBhc3NlcnRJc0N1cnJlbnQod29ya1F1ZXVlKCkpOwogICAgICAgICBtX2NvbnRleHQtPnRl
eFBhcmFtZXRlcmYodGFyZ2V0LCBwbmFtZSwgcGFyYW0pOwogICAgIH0KICAgICB2b2lkIHRleFBh
cmFtZXRlcmkodWludDMyX3QgdGFyZ2V0LCB1aW50MzJfdCBwbmFtZSwgaW50MzJfdCBwYXJhbSkK
ICAgICB7Ci0gICAgICAgIGFzc2VydElzQ3VycmVudChtX3N0cmVhbVRocmVhZCk7CisgICAgICAg
IGFzc2VydElzQ3VycmVudCh3b3JrUXVldWUoKSk7CiAgICAgICAgIG1fY29udGV4dC0+dGV4UGFy
YW1ldGVyaSh0YXJnZXQsIHBuYW1lLCBwYXJhbSk7CiAgICAgfQogICAgIHZvaWQgdW5pZm9ybTFm
KGludDMyX3QgbG9jYXRpb24sIGZsb2F0IHgpCiAgICAgewotICAgICAgICBhc3NlcnRJc0N1cnJl
bnQobV9zdHJlYW1UaHJlYWQpOworICAgICAgICBhc3NlcnRJc0N1cnJlbnQod29ya1F1ZXVlKCkp
OwogICAgICAgICBtX2NvbnRleHQtPnVuaWZvcm0xZihsb2NhdGlvbiwgeCk7CiAgICAgfQogICAg
IHZvaWQgdW5pZm9ybTFmdihpbnQzMl90IGxvY2F0aW9uLCBJUEM6OkFycmF5UmVmZXJlbmNlPGZs
b2F0PiYmIHYpCiAgICAgewotICAgICAgICBhc3NlcnRJc0N1cnJlbnQobV9zdHJlYW1UaHJlYWQp
OworICAgICAgICBhc3NlcnRJc0N1cnJlbnQod29ya1F1ZXVlKCkpOwogICAgICAgICBtX2NvbnRl
eHQtPnVuaWZvcm0xZnYobG9jYXRpb24sIG1ha2VHQ0dMU3BhbihyZWludGVycHJldF9jYXN0PGNv
bnN0IEdDR0xmbG9hdCo+KHYuZGF0YSgpKSwgdi5zaXplKCkpKTsKICAgICB9CiAgICAgdm9pZCB1
bmlmb3JtMWkoaW50MzJfdCBsb2NhdGlvbiwgaW50MzJfdCB4KQogICAgIHsKLSAgICAgICAgYXNz
ZXJ0SXNDdXJyZW50KG1fc3RyZWFtVGhyZWFkKTsKKyAgICAgICAgYXNzZXJ0SXNDdXJyZW50KHdv
cmtRdWV1ZSgpKTsKICAgICAgICAgbV9jb250ZXh0LT51bmlmb3JtMWkobG9jYXRpb24sIHgpOwog
ICAgIH0KICAgICB2b2lkIHVuaWZvcm0xaXYoaW50MzJfdCBsb2NhdGlvbiwgSVBDOjpBcnJheVJl
ZmVyZW5jZTxpbnQzMl90PiYmIHYpCiAgICAgewotICAgICAgICBhc3NlcnRJc0N1cnJlbnQobV9z
dHJlYW1UaHJlYWQpOworICAgICAgICBhc3NlcnRJc0N1cnJlbnQod29ya1F1ZXVlKCkpOwogICAg
ICAgICBtX2NvbnRleHQtPnVuaWZvcm0xaXYobG9jYXRpb24sIG1ha2VHQ0dMU3BhbihyZWludGVy
cHJldF9jYXN0PGNvbnN0IEdDR0xpbnQqPih2LmRhdGEoKSksIHYuc2l6ZSgpKSk7CiAgICAgfQog
ICAgIHZvaWQgdW5pZm9ybTJmKGludDMyX3QgbG9jYXRpb24sIGZsb2F0IHgsIGZsb2F0IHkpCiAg
ICAgewotICAgICAgICBhc3NlcnRJc0N1cnJlbnQobV9zdHJlYW1UaHJlYWQpOworICAgICAgICBh
c3NlcnRJc0N1cnJlbnQod29ya1F1ZXVlKCkpOwogICAgICAgICBtX2NvbnRleHQtPnVuaWZvcm0y
Zihsb2NhdGlvbiwgeCwgeSk7CiAgICAgfQogICAgIHZvaWQgdW5pZm9ybTJmdihpbnQzMl90IGxv
Y2F0aW9uLCBJUEM6OkFycmF5UmVmZXJlbmNlPGZsb2F0PiYmIHYpCiAgICAgewotICAgICAgICBh
c3NlcnRJc0N1cnJlbnQobV9zdHJlYW1UaHJlYWQpOworICAgICAgICBhc3NlcnRJc0N1cnJlbnQo
d29ya1F1ZXVlKCkpOwogICAgICAgICBtX2NvbnRleHQtPnVuaWZvcm0yZnYobG9jYXRpb24sIG1h
a2VHQ0dMU3BhbihyZWludGVycHJldF9jYXN0PGNvbnN0IEdDR0xmbG9hdCo+KHYuZGF0YSgpKSwg
di5zaXplKCkpKTsKICAgICB9CiAgICAgdm9pZCB1bmlmb3JtMmkoaW50MzJfdCBsb2NhdGlvbiwg
aW50MzJfdCB4LCBpbnQzMl90IHkpCiAgICAgewotICAgICAgICBhc3NlcnRJc0N1cnJlbnQobV9z
dHJlYW1UaHJlYWQpOworICAgICAgICBhc3NlcnRJc0N1cnJlbnQod29ya1F1ZXVlKCkpOwogICAg
ICAgICBtX2NvbnRleHQtPnVuaWZvcm0yaShsb2NhdGlvbiwgeCwgeSk7CiAgICAgfQogICAgIHZv
aWQgdW5pZm9ybTJpdihpbnQzMl90IGxvY2F0aW9uLCBJUEM6OkFycmF5UmVmZXJlbmNlPGludDMy
X3Q+JiYgdikKICAgICB7Ci0gICAgICAgIGFzc2VydElzQ3VycmVudChtX3N0cmVhbVRocmVhZCk7
CisgICAgICAgIGFzc2VydElzQ3VycmVudCh3b3JrUXVldWUoKSk7CiAgICAgICAgIG1fY29udGV4
dC0+dW5pZm9ybTJpdihsb2NhdGlvbiwgbWFrZUdDR0xTcGFuKHJlaW50ZXJwcmV0X2Nhc3Q8Y29u
c3QgR0NHTGludCo+KHYuZGF0YSgpKSwgdi5zaXplKCkpKTsKICAgICB9CiAgICAgdm9pZCB1bmlm
b3JtM2YoaW50MzJfdCBsb2NhdGlvbiwgZmxvYXQgeCwgZmxvYXQgeSwgZmxvYXQgeikKICAgICB7
Ci0gICAgICAgIGFzc2VydElzQ3VycmVudChtX3N0cmVhbVRocmVhZCk7CisgICAgICAgIGFzc2Vy
dElzQ3VycmVudCh3b3JrUXVldWUoKSk7CiAgICAgICAgIG1fY29udGV4dC0+dW5pZm9ybTNmKGxv
Y2F0aW9uLCB4LCB5LCB6KTsKICAgICB9CiAgICAgdm9pZCB1bmlmb3JtM2Z2KGludDMyX3QgbG9j
YXRpb24sIElQQzo6QXJyYXlSZWZlcmVuY2U8ZmxvYXQ+JiYgdikKICAgICB7Ci0gICAgICAgIGFz
c2VydElzQ3VycmVudChtX3N0cmVhbVRocmVhZCk7CisgICAgICAgIGFzc2VydElzQ3VycmVudCh3
b3JrUXVldWUoKSk7CiAgICAgICAgIG1fY29udGV4dC0+dW5pZm9ybTNmdihsb2NhdGlvbiwgbWFr
ZUdDR0xTcGFuKHJlaW50ZXJwcmV0X2Nhc3Q8Y29uc3QgR0NHTGZsb2F0Kj4odi5kYXRhKCkpLCB2
LnNpemUoKSkpOwogICAgIH0KICAgICB2b2lkIHVuaWZvcm0zaShpbnQzMl90IGxvY2F0aW9uLCBp
bnQzMl90IHgsIGludDMyX3QgeSwgaW50MzJfdCB6KQogICAgIHsKLSAgICAgICAgYXNzZXJ0SXND
dXJyZW50KG1fc3RyZWFtVGhyZWFkKTsKKyAgICAgICAgYXNzZXJ0SXNDdXJyZW50KHdvcmtRdWV1
ZSgpKTsKICAgICAgICAgbV9jb250ZXh0LT51bmlmb3JtM2kobG9jYXRpb24sIHgsIHksIHopOwog
ICAgIH0KICAgICB2b2lkIHVuaWZvcm0zaXYoaW50MzJfdCBsb2NhdGlvbiwgSVBDOjpBcnJheVJl
ZmVyZW5jZTxpbnQzMl90PiYmIHYpCiAgICAgewotICAgICAgICBhc3NlcnRJc0N1cnJlbnQobV9z
dHJlYW1UaHJlYWQpOworICAgICAgICBhc3NlcnRJc0N1cnJlbnQod29ya1F1ZXVlKCkpOwogICAg
ICAgICBtX2NvbnRleHQtPnVuaWZvcm0zaXYobG9jYXRpb24sIG1ha2VHQ0dMU3BhbihyZWludGVy
cHJldF9jYXN0PGNvbnN0IEdDR0xpbnQqPih2LmRhdGEoKSksIHYuc2l6ZSgpKSk7CiAgICAgfQog
ICAgIHZvaWQgdW5pZm9ybTRmKGludDMyX3QgbG9jYXRpb24sIGZsb2F0IHgsIGZsb2F0IHksIGZs
b2F0IHosIGZsb2F0IHcpCiAgICAgewotICAgICAgICBhc3NlcnRJc0N1cnJlbnQobV9zdHJlYW1U
aHJlYWQpOworICAgICAgICBhc3NlcnRJc0N1cnJlbnQod29ya1F1ZXVlKCkpOwogICAgICAgICBt
X2NvbnRleHQtPnVuaWZvcm00Zihsb2NhdGlvbiwgeCwgeSwgeiwgdyk7CiAgICAgfQogICAgIHZv
aWQgdW5pZm9ybTRmdihpbnQzMl90IGxvY2F0aW9uLCBJUEM6OkFycmF5UmVmZXJlbmNlPGZsb2F0
PiYmIHYpCiAgICAgewotICAgICAgICBhc3NlcnRJc0N1cnJlbnQobV9zdHJlYW1UaHJlYWQpOwor
ICAgICAgICBhc3NlcnRJc0N1cnJlbnQod29ya1F1ZXVlKCkpOwogICAgICAgICBtX2NvbnRleHQt
PnVuaWZvcm00ZnYobG9jYXRpb24sIG1ha2VHQ0dMU3BhbihyZWludGVycHJldF9jYXN0PGNvbnN0
IEdDR0xmbG9hdCo+KHYuZGF0YSgpKSwgdi5zaXplKCkpKTsKICAgICB9CiAgICAgdm9pZCB1bmlm
b3JtNGkoaW50MzJfdCBsb2NhdGlvbiwgaW50MzJfdCB4LCBpbnQzMl90IHksIGludDMyX3Qgeiwg
aW50MzJfdCB3KQogICAgIHsKLSAgICAgICAgYXNzZXJ0SXNDdXJyZW50KG1fc3RyZWFtVGhyZWFk
KTsKKyAgICAgICAgYXNzZXJ0SXNDdXJyZW50KHdvcmtRdWV1ZSgpKTsKICAgICAgICAgbV9jb250
ZXh0LT51bmlmb3JtNGkobG9jYXRpb24sIHgsIHksIHosIHcpOwogICAgIH0KICAgICB2b2lkIHVu
aWZvcm00aXYoaW50MzJfdCBsb2NhdGlvbiwgSVBDOjpBcnJheVJlZmVyZW5jZTxpbnQzMl90PiYm
IHYpCiAgICAgewotICAgICAgICBhc3NlcnRJc0N1cnJlbnQobV9zdHJlYW1UaHJlYWQpOworICAg
ICAgICBhc3NlcnRJc0N1cnJlbnQod29ya1F1ZXVlKCkpOwogICAgICAgICBtX2NvbnRleHQtPnVu
aWZvcm00aXYobG9jYXRpb24sIG1ha2VHQ0dMU3BhbihyZWludGVycHJldF9jYXN0PGNvbnN0IEdD
R0xpbnQqPih2LmRhdGEoKSksIHYuc2l6ZSgpKSk7CiAgICAgfQogICAgIHZvaWQgdW5pZm9ybU1h
dHJpeDJmdihpbnQzMl90IGxvY2F0aW9uLCBib29sIHRyYW5zcG9zZSwgSVBDOjpBcnJheVJlZmVy
ZW5jZTxmbG9hdD4mJiB2YWx1ZSkKICAgICB7Ci0gICAgICAgIGFzc2VydElzQ3VycmVudChtX3N0
cmVhbVRocmVhZCk7CisgICAgICAgIGFzc2VydElzQ3VycmVudCh3b3JrUXVldWUoKSk7CiAgICAg
ICAgIG1fY29udGV4dC0+dW5pZm9ybU1hdHJpeDJmdihsb2NhdGlvbiwgc3RhdGljX2Nhc3Q8R0NH
TGJvb2xlYW4+KHRyYW5zcG9zZSksIG1ha2VHQ0dMU3BhbihyZWludGVycHJldF9jYXN0PGNvbnN0
IEdDR0xmbG9hdCo+KHZhbHVlLmRhdGEoKSksIHZhbHVlLnNpemUoKSkpOwogICAgIH0KICAgICB2
b2lkIHVuaWZvcm1NYXRyaXgzZnYoaW50MzJfdCBsb2NhdGlvbiwgYm9vbCB0cmFuc3Bvc2UsIElQ
Qzo6QXJyYXlSZWZlcmVuY2U8ZmxvYXQ+JiYgdmFsdWUpCiAgICAgewotICAgICAgICBhc3NlcnRJ
c0N1cnJlbnQobV9zdHJlYW1UaHJlYWQpOworICAgICAgICBhc3NlcnRJc0N1cnJlbnQod29ya1F1
ZXVlKCkpOwogICAgICAgICBtX2NvbnRleHQtPnVuaWZvcm1NYXRyaXgzZnYobG9jYXRpb24sIHN0
YXRpY19jYXN0PEdDR0xib29sZWFuPih0cmFuc3Bvc2UpLCBtYWtlR0NHTFNwYW4ocmVpbnRlcnBy
ZXRfY2FzdDxjb25zdCBHQ0dMZmxvYXQqPih2YWx1ZS5kYXRhKCkpLCB2YWx1ZS5zaXplKCkpKTsK
ICAgICB9CiAgICAgdm9pZCB1bmlmb3JtTWF0cml4NGZ2KGludDMyX3QgbG9jYXRpb24sIGJvb2wg
dHJhbnNwb3NlLCBJUEM6OkFycmF5UmVmZXJlbmNlPGZsb2F0PiYmIHZhbHVlKQogICAgIHsKLSAg
ICAgICAgYXNzZXJ0SXNDdXJyZW50KG1fc3RyZWFtVGhyZWFkKTsKKyAgICAgICAgYXNzZXJ0SXND
dXJyZW50KHdvcmtRdWV1ZSgpKTsKICAgICAgICAgbV9jb250ZXh0LT51bmlmb3JtTWF0cml4NGZ2
KGxvY2F0aW9uLCBzdGF0aWNfY2FzdDxHQ0dMYm9vbGVhbj4odHJhbnNwb3NlKSwgbWFrZUdDR0xT
cGFuKHJlaW50ZXJwcmV0X2Nhc3Q8Y29uc3QgR0NHTGZsb2F0Kj4odmFsdWUuZGF0YSgpKSwgdmFs
dWUuc2l6ZSgpKSk7CiAgICAgfQogICAgIHZvaWQgdXNlUHJvZ3JhbSh1aW50MzJfdCBhcmcwKQog
ICAgIHsKLSAgICAgICAgYXNzZXJ0SXNDdXJyZW50KG1fc3RyZWFtVGhyZWFkKTsKKyAgICAgICAg
YXNzZXJ0SXNDdXJyZW50KHdvcmtRdWV1ZSgpKTsKICAgICAgICAgbV9jb250ZXh0LT51c2VQcm9n
cmFtKGFyZzApOwogICAgIH0KICAgICB2b2lkIHZhbGlkYXRlUHJvZ3JhbSh1aW50MzJfdCBhcmcw
KQogICAgIHsKLSAgICAgICAgYXNzZXJ0SXNDdXJyZW50KG1fc3RyZWFtVGhyZWFkKTsKKyAgICAg
ICAgYXNzZXJ0SXNDdXJyZW50KHdvcmtRdWV1ZSgpKTsKICAgICAgICAgbV9jb250ZXh0LT52YWxp
ZGF0ZVByb2dyYW0oYXJnMCk7CiAgICAgfQogICAgIHZvaWQgdmVydGV4QXR0cmliMWYodWludDMy
X3QgaW5kZXgsIGZsb2F0IHgpCiAgICAgewotICAgICAgICBhc3NlcnRJc0N1cnJlbnQobV9zdHJl
YW1UaHJlYWQpOworICAgICAgICBhc3NlcnRJc0N1cnJlbnQod29ya1F1ZXVlKCkpOwogICAgICAg
ICBtX2NvbnRleHQtPnZlcnRleEF0dHJpYjFmKGluZGV4LCB4KTsKICAgICB9CiAgICAgdm9pZCB2
ZXJ0ZXhBdHRyaWIxZnYodWludDMyX3QgaW5kZXgsIElQQzo6QXJyYXlSZWZlcmVuY2U8ZmxvYXQs
IDE+JiYgdmFsdWVzKQogICAgIHsKLSAgICAgICAgYXNzZXJ0SXNDdXJyZW50KG1fc3RyZWFtVGhy
ZWFkKTsKKyAgICAgICAgYXNzZXJ0SXNDdXJyZW50KHdvcmtRdWV1ZSgpKTsKICAgICAgICAgbV9j
b250ZXh0LT52ZXJ0ZXhBdHRyaWIxZnYoaW5kZXgsIG1ha2VHQ0dMU3BhbjwxPihyZWludGVycHJl
dF9jYXN0PGNvbnN0IEdDR0xmbG9hdCo+KHZhbHVlcy5kYXRhKCkpKSk7CiAgICAgfQogICAgIHZv
aWQgdmVydGV4QXR0cmliMmYodWludDMyX3QgaW5kZXgsIGZsb2F0IHgsIGZsb2F0IHkpCiAgICAg
ewotICAgICAgICBhc3NlcnRJc0N1cnJlbnQobV9zdHJlYW1UaHJlYWQpOworICAgICAgICBhc3Nl
cnRJc0N1cnJlbnQod29ya1F1ZXVlKCkpOwogICAgICAgICBtX2NvbnRleHQtPnZlcnRleEF0dHJp
YjJmKGluZGV4LCB4LCB5KTsKICAgICB9CiAgICAgdm9pZCB2ZXJ0ZXhBdHRyaWIyZnYodWludDMy
X3QgaW5kZXgsIElQQzo6QXJyYXlSZWZlcmVuY2U8ZmxvYXQsIDI+JiYgdmFsdWVzKQogICAgIHsK
LSAgICAgICAgYXNzZXJ0SXNDdXJyZW50KG1fc3RyZWFtVGhyZWFkKTsKKyAgICAgICAgYXNzZXJ0
SXNDdXJyZW50KHdvcmtRdWV1ZSgpKTsKICAgICAgICAgbV9jb250ZXh0LT52ZXJ0ZXhBdHRyaWIy
ZnYoaW5kZXgsIG1ha2VHQ0dMU3BhbjwyPihyZWludGVycHJldF9jYXN0PGNvbnN0IEdDR0xmbG9h
dCo+KHZhbHVlcy5kYXRhKCkpKSk7CiAgICAgfQogICAgIHZvaWQgdmVydGV4QXR0cmliM2YodWlu
dDMyX3QgaW5kZXgsIGZsb2F0IHgsIGZsb2F0IHksIGZsb2F0IHopCiAgICAgewotICAgICAgICBh
c3NlcnRJc0N1cnJlbnQobV9zdHJlYW1UaHJlYWQpOworICAgICAgICBhc3NlcnRJc0N1cnJlbnQo
d29ya1F1ZXVlKCkpOwogICAgICAgICBtX2NvbnRleHQtPnZlcnRleEF0dHJpYjNmKGluZGV4LCB4
LCB5LCB6KTsKICAgICB9CiAgICAgdm9pZCB2ZXJ0ZXhBdHRyaWIzZnYodWludDMyX3QgaW5kZXgs
IElQQzo6QXJyYXlSZWZlcmVuY2U8ZmxvYXQsIDM+JiYgdmFsdWVzKQogICAgIHsKLSAgICAgICAg
YXNzZXJ0SXNDdXJyZW50KG1fc3RyZWFtVGhyZWFkKTsKKyAgICAgICAgYXNzZXJ0SXNDdXJyZW50
KHdvcmtRdWV1ZSgpKTsKICAgICAgICAgbV9jb250ZXh0LT52ZXJ0ZXhBdHRyaWIzZnYoaW5kZXgs
IG1ha2VHQ0dMU3BhbjwzPihyZWludGVycHJldF9jYXN0PGNvbnN0IEdDR0xmbG9hdCo+KHZhbHVl
cy5kYXRhKCkpKSk7CiAgICAgfQogICAgIHZvaWQgdmVydGV4QXR0cmliNGYodWludDMyX3QgaW5k
ZXgsIGZsb2F0IHgsIGZsb2F0IHksIGZsb2F0IHosIGZsb2F0IHcpCiAgICAgewotICAgICAgICBh
c3NlcnRJc0N1cnJlbnQobV9zdHJlYW1UaHJlYWQpOworICAgICAgICBhc3NlcnRJc0N1cnJlbnQo
d29ya1F1ZXVlKCkpOwogICAgICAgICBtX2NvbnRleHQtPnZlcnRleEF0dHJpYjRmKGluZGV4LCB4
LCB5LCB6LCB3KTsKICAgICB9CiAgICAgdm9pZCB2ZXJ0ZXhBdHRyaWI0ZnYodWludDMyX3QgaW5k
ZXgsIElQQzo6QXJyYXlSZWZlcmVuY2U8ZmxvYXQsIDQ+JiYgdmFsdWVzKQogICAgIHsKLSAgICAg
ICAgYXNzZXJ0SXNDdXJyZW50KG1fc3RyZWFtVGhyZWFkKTsKKyAgICAgICAgYXNzZXJ0SXNDdXJy
ZW50KHdvcmtRdWV1ZSgpKTsKICAgICAgICAgbV9jb250ZXh0LT52ZXJ0ZXhBdHRyaWI0ZnYoaW5k
ZXgsIG1ha2VHQ0dMU3Bhbjw0PihyZWludGVycHJldF9jYXN0PGNvbnN0IEdDR0xmbG9hdCo+KHZh
bHVlcy5kYXRhKCkpKSk7CiAgICAgfQogICAgIHZvaWQgdmVydGV4QXR0cmliUG9pbnRlcih1aW50
MzJfdCBpbmRleCwgaW50MzJfdCBzaXplLCB1aW50MzJfdCB0eXBlLCBib29sIG5vcm1hbGl6ZWQs
IGludDMyX3Qgc3RyaWRlLCB1aW50NjRfdCBvZmZzZXQpCiAgICAgewotICAgICAgICBhc3NlcnRJ
c0N1cnJlbnQobV9zdHJlYW1UaHJlYWQpOworICAgICAgICBhc3NlcnRJc0N1cnJlbnQod29ya1F1
ZXVlKCkpOwogICAgICAgICBtX2NvbnRleHQtPnZlcnRleEF0dHJpYlBvaW50ZXIoaW5kZXgsIHNp
emUsIHR5cGUsIHN0YXRpY19jYXN0PEdDR0xib29sZWFuPihub3JtYWxpemVkKSwgc3RyaWRlLCBz
dGF0aWNfY2FzdDxHQ0dMaW50cHRyPihvZmZzZXQpKTsKICAgICB9CiAgICAgdm9pZCB2aWV3cG9y
dChpbnQzMl90IHgsIGludDMyX3QgeSwgaW50MzJfdCB3aWR0aCwgaW50MzJfdCBoZWlnaHQpCiAg
ICAgewotICAgICAgICBhc3NlcnRJc0N1cnJlbnQobV9zdHJlYW1UaHJlYWQpOworICAgICAgICBh
c3NlcnRJc0N1cnJlbnQod29ya1F1ZXVlKCkpOwogICAgICAgICBtX2NvbnRleHQtPnZpZXdwb3J0
KHgsIHksIHdpZHRoLCBoZWlnaHQpOwogICAgIH0KICAgICB2b2lkIGJ1ZmZlckRhdGEwKHVpbnQz
Ml90IHRhcmdldCwgdWludDY0X3QgYXJnMSwgdWludDMyX3QgdXNhZ2UpCiAgICAgewotICAgICAg
ICBhc3NlcnRJc0N1cnJlbnQobV9zdHJlYW1UaHJlYWQpOworICAgICAgICBhc3NlcnRJc0N1cnJl
bnQod29ya1F1ZXVlKCkpOwogICAgICAgICBtX2NvbnRleHQtPmJ1ZmZlckRhdGEodGFyZ2V0LCBz
dGF0aWNfY2FzdDxHQ0dMc2l6ZWlwdHI+KGFyZzEpLCB1c2FnZSk7CiAgICAgfQogICAgIHZvaWQg
YnVmZmVyRGF0YTEodWludDMyX3QgdGFyZ2V0LCBJUEM6OkFycmF5UmVmZXJlbmNlPHVpbnQ4X3Q+
JiYgZGF0YSwgdWludDMyX3QgdXNhZ2UpCiAgICAgewotICAgICAgICBhc3NlcnRJc0N1cnJlbnQo
bV9zdHJlYW1UaHJlYWQpOworICAgICAgICBhc3NlcnRJc0N1cnJlbnQod29ya1F1ZXVlKCkpOwog
ICAgICAgICBtX2NvbnRleHQtPmJ1ZmZlckRhdGEodGFyZ2V0LCBtYWtlR0NHTFNwYW4ocmVpbnRl
cnByZXRfY2FzdDxjb25zdCBHQ0dMdm9pZCo+KGRhdGEuZGF0YSgpKSwgZGF0YS5zaXplKCkpLCB1
c2FnZSk7CiAgICAgfQogICAgIHZvaWQgYnVmZmVyU3ViRGF0YSh1aW50MzJfdCB0YXJnZXQsIHVp
bnQ2NF90IG9mZnNldCwgSVBDOjpBcnJheVJlZmVyZW5jZTx1aW50OF90PiYmIGRhdGEpCiAgICAg
ewotICAgICAgICBhc3NlcnRJc0N1cnJlbnQobV9zdHJlYW1UaHJlYWQpOworICAgICAgICBhc3Nl
cnRJc0N1cnJlbnQod29ya1F1ZXVlKCkpOwogICAgICAgICBtX2NvbnRleHQtPmJ1ZmZlclN1YkRh
dGEodGFyZ2V0LCBzdGF0aWNfY2FzdDxHQ0dMaW50cHRyPihvZmZzZXQpLCBtYWtlR0NHTFNwYW4o
cmVpbnRlcnByZXRfY2FzdDxjb25zdCBHQ0dMdm9pZCo+KGRhdGEuZGF0YSgpKSwgZGF0YS5zaXpl
KCkpKTsKICAgICB9CiAgICAgdm9pZCByZWFkblBpeGVsczAoaW50MzJfdCB4LCBpbnQzMl90IHks
IGludDMyX3Qgd2lkdGgsIGludDMyX3QgaGVpZ2h0LCB1aW50MzJfdCBmb3JtYXQsIHVpbnQzMl90
IHR5cGUsIHVpbnQ2NF90IGRhdGFTaXplLCBDb21wbGV0aW9uSGFuZGxlcjx2b2lkKElQQzo6QXJy
YXlSZWZlcmVuY2U8dWludDhfdD4pPiYmIGNvbXBsZXRpb25IYW5kbGVyKQogICAgIHsKICAgICAg
ICAgVmVjdG9yPEdDR0xjaGFyLCA0PiBkYXRhKHN0YXRpY19jYXN0PHNpemVfdD4oZGF0YVNpemUp
LCAwKTsKLSAgICAgICAgYXNzZXJ0SXNDdXJyZW50KG1fc3RyZWFtVGhyZWFkKTsKKyAgICAgICAg
YXNzZXJ0SXNDdXJyZW50KHdvcmtRdWV1ZSgpKTsKICAgICAgICAgbV9jb250ZXh0LT5yZWFkblBp
eGVscyh4LCB5LCB3aWR0aCwgaGVpZ2h0LCBmb3JtYXQsIHR5cGUsIGRhdGEpOwogICAgICAgICBj
b21wbGV0aW9uSGFuZGxlcihJUEM6OkFycmF5UmVmZXJlbmNlPHVpbnQ4X3Q+KHJlaW50ZXJwcmV0
X2Nhc3Q8dWludDhfdCo+KGRhdGEuZGF0YSgpKSwgZGF0YS5zaXplKCkpKTsKICAgICB9CiAgICAg
dm9pZCByZWFkblBpeGVsczEoaW50MzJfdCB4LCBpbnQzMl90IHksIGludDMyX3Qgd2lkdGgsIGlu
dDMyX3QgaGVpZ2h0LCB1aW50MzJfdCBmb3JtYXQsIHVpbnQzMl90IHR5cGUsIHVpbnQ2NF90IG9m
ZnNldCkKICAgICB7Ci0gICAgICAgIGFzc2VydElzQ3VycmVudChtX3N0cmVhbVRocmVhZCk7Cisg
ICAgICAgIGFzc2VydElzQ3VycmVudCh3b3JrUXVldWUoKSk7CiAgICAgICAgIG1fY29udGV4dC0+
cmVhZG5QaXhlbHMoeCwgeSwgd2lkdGgsIGhlaWdodCwgZm9ybWF0LCB0eXBlLCBzdGF0aWNfY2Fz
dDxHQ0dMaW50cHRyPihvZmZzZXQpKTsKICAgICB9CiAgICAgdm9pZCB0ZXhJbWFnZTJEMCh1aW50
MzJfdCB0YXJnZXQsIGludDMyX3QgbGV2ZWwsIHVpbnQzMl90IGludGVybmFsZm9ybWF0LCBpbnQz
Ml90IHdpZHRoLCBpbnQzMl90IGhlaWdodCwgaW50MzJfdCBib3JkZXIsIHVpbnQzMl90IGZvcm1h
dCwgdWludDMyX3QgdHlwZSwgSVBDOjpBcnJheVJlZmVyZW5jZTx1aW50OF90PiYmIHBpeGVscykK
ICAgICB7Ci0gICAgICAgIGFzc2VydElzQ3VycmVudChtX3N0cmVhbVRocmVhZCk7CisgICAgICAg
IGFzc2VydElzQ3VycmVudCh3b3JrUXVldWUoKSk7CiAgICAgICAgIG1fY29udGV4dC0+dGV4SW1h
Z2UyRCh0YXJnZXQsIGxldmVsLCBpbnRlcm5hbGZvcm1hdCwgd2lkdGgsIGhlaWdodCwgYm9yZGVy
LCBmb3JtYXQsIHR5cGUsIG1ha2VHQ0dMU3BhbihyZWludGVycHJldF9jYXN0PGNvbnN0IEdDR0x2
b2lkKj4ocGl4ZWxzLmRhdGEoKSksIHBpeGVscy5zaXplKCkpKTsKICAgICB9CiAgICAgdm9pZCB0
ZXhJbWFnZTJEMSh1aW50MzJfdCB0YXJnZXQsIGludDMyX3QgbGV2ZWwsIHVpbnQzMl90IGludGVy
bmFsZm9ybWF0LCBpbnQzMl90IHdpZHRoLCBpbnQzMl90IGhlaWdodCwgaW50MzJfdCBib3JkZXIs
IHVpbnQzMl90IGZvcm1hdCwgdWludDMyX3QgdHlwZSwgdWludDY0X3Qgb2Zmc2V0KQogICAgIHsK
LSAgICAgICAgYXNzZXJ0SXNDdXJyZW50KG1fc3RyZWFtVGhyZWFkKTsKKyAgICAgICAgYXNzZXJ0
SXNDdXJyZW50KHdvcmtRdWV1ZSgpKTsKICAgICAgICAgbV9jb250ZXh0LT50ZXhJbWFnZTJEKHRh
cmdldCwgbGV2ZWwsIGludGVybmFsZm9ybWF0LCB3aWR0aCwgaGVpZ2h0LCBib3JkZXIsIGZvcm1h
dCwgdHlwZSwgc3RhdGljX2Nhc3Q8R0NHTGludHB0cj4ob2Zmc2V0KSk7CiAgICAgfQogICAgIHZv
aWQgdGV4U3ViSW1hZ2UyRDAodWludDMyX3QgdGFyZ2V0LCBpbnQzMl90IGxldmVsLCBpbnQzMl90
IHhvZmZzZXQsIGludDMyX3QgeW9mZnNldCwgaW50MzJfdCB3aWR0aCwgaW50MzJfdCBoZWlnaHQs
IHVpbnQzMl90IGZvcm1hdCwgdWludDMyX3QgdHlwZSwgSVBDOjpBcnJheVJlZmVyZW5jZTx1aW50
OF90PiYmIHBpeGVscykKICAgICB7Ci0gICAgICAgIGFzc2VydElzQ3VycmVudChtX3N0cmVhbVRo
cmVhZCk7CisgICAgICAgIGFzc2VydElzQ3VycmVudCh3b3JrUXVldWUoKSk7CiAgICAgICAgIG1f
Y29udGV4dC0+dGV4U3ViSW1hZ2UyRCh0YXJnZXQsIGxldmVsLCB4b2Zmc2V0LCB5b2Zmc2V0LCB3
aWR0aCwgaGVpZ2h0LCBmb3JtYXQsIHR5cGUsIG1ha2VHQ0dMU3BhbihyZWludGVycHJldF9jYXN0
PGNvbnN0IEdDR0x2b2lkKj4ocGl4ZWxzLmRhdGEoKSksIHBpeGVscy5zaXplKCkpKTsKICAgICB9
CiAgICAgdm9pZCB0ZXhTdWJJbWFnZTJEMSh1aW50MzJfdCB0YXJnZXQsIGludDMyX3QgbGV2ZWws
IGludDMyX3QgeG9mZnNldCwgaW50MzJfdCB5b2Zmc2V0LCBpbnQzMl90IHdpZHRoLCBpbnQzMl90
IGhlaWdodCwgdWludDMyX3QgZm9ybWF0LCB1aW50MzJfdCB0eXBlLCB1aW50NjRfdCBvZmZzZXQp
CiAgICAgewotICAgICAgICBhc3NlcnRJc0N1cnJlbnQobV9zdHJlYW1UaHJlYWQpOworICAgICAg
ICBhc3NlcnRJc0N1cnJlbnQod29ya1F1ZXVlKCkpOwogICAgICAgICBtX2NvbnRleHQtPnRleFN1
YkltYWdlMkQodGFyZ2V0LCBsZXZlbCwgeG9mZnNldCwgeW9mZnNldCwgd2lkdGgsIGhlaWdodCwg
Zm9ybWF0LCB0eXBlLCBzdGF0aWNfY2FzdDxHQ0dMaW50cHRyPihvZmZzZXQpKTsKICAgICB9CiAg
ICAgdm9pZCBjb21wcmVzc2VkVGV4SW1hZ2UyRDAodWludDMyX3QgdGFyZ2V0LCBpbnQzMl90IGxl
dmVsLCB1aW50MzJfdCBpbnRlcm5hbGZvcm1hdCwgaW50MzJfdCB3aWR0aCwgaW50MzJfdCBoZWln
aHQsIGludDMyX3QgYm9yZGVyLCBpbnQzMl90IGltYWdlU2l6ZSwgSVBDOjpBcnJheVJlZmVyZW5j
ZTx1aW50OF90PiYmIGRhdGEpCiAgICAgewotICAgICAgICBhc3NlcnRJc0N1cnJlbnQobV9zdHJl
YW1UaHJlYWQpOworICAgICAgICBhc3NlcnRJc0N1cnJlbnQod29ya1F1ZXVlKCkpOwogICAgICAg
ICBtX2NvbnRleHQtPmNvbXByZXNzZWRUZXhJbWFnZTJEKHRhcmdldCwgbGV2ZWwsIGludGVybmFs
Zm9ybWF0LCB3aWR0aCwgaGVpZ2h0LCBib3JkZXIsIGltYWdlU2l6ZSwgbWFrZUdDR0xTcGFuKHJl
aW50ZXJwcmV0X2Nhc3Q8Y29uc3QgR0NHTHZvaWQqPihkYXRhLmRhdGEoKSksIGRhdGEuc2l6ZSgp
KSk7CiAgICAgfQogICAgIHZvaWQgY29tcHJlc3NlZFRleEltYWdlMkQxKHVpbnQzMl90IHRhcmdl
dCwgaW50MzJfdCBsZXZlbCwgdWludDMyX3QgaW50ZXJuYWxmb3JtYXQsIGludDMyX3Qgd2lkdGgs
IGludDMyX3QgaGVpZ2h0LCBpbnQzMl90IGJvcmRlciwgaW50MzJfdCBpbWFnZVNpemUsIHVpbnQ2
NF90IG9mZnNldCkKICAgICB7Ci0gICAgICAgIGFzc2VydElzQ3VycmVudChtX3N0cmVhbVRocmVh
ZCk7CisgICAgICAgIGFzc2VydElzQ3VycmVudCh3b3JrUXVldWUoKSk7CiAgICAgICAgIG1fY29u
dGV4dC0+Y29tcHJlc3NlZFRleEltYWdlMkQodGFyZ2V0LCBsZXZlbCwgaW50ZXJuYWxmb3JtYXQs
IHdpZHRoLCBoZWlnaHQsIGJvcmRlciwgaW1hZ2VTaXplLCBzdGF0aWNfY2FzdDxHQ0dMaW50cHRy
PihvZmZzZXQpKTsKICAgICB9CiAgICAgdm9pZCBjb21wcmVzc2VkVGV4U3ViSW1hZ2UyRDAodWlu
dDMyX3QgdGFyZ2V0LCBpbnQzMl90IGxldmVsLCBpbnQzMl90IHhvZmZzZXQsIGludDMyX3QgeW9m
ZnNldCwgaW50MzJfdCB3aWR0aCwgaW50MzJfdCBoZWlnaHQsIHVpbnQzMl90IGZvcm1hdCwgaW50
MzJfdCBpbWFnZVNpemUsIElQQzo6QXJyYXlSZWZlcmVuY2U8dWludDhfdD4mJiBkYXRhKQogICAg
IHsKLSAgICAgICAgYXNzZXJ0SXNDdXJyZW50KG1fc3RyZWFtVGhyZWFkKTsKKyAgICAgICAgYXNz
ZXJ0SXNDdXJyZW50KHdvcmtRdWV1ZSgpKTsKICAgICAgICAgbV9jb250ZXh0LT5jb21wcmVzc2Vk
VGV4U3ViSW1hZ2UyRCh0YXJnZXQsIGxldmVsLCB4b2Zmc2V0LCB5b2Zmc2V0LCB3aWR0aCwgaGVp
Z2h0LCBmb3JtYXQsIGltYWdlU2l6ZSwgbWFrZUdDR0xTcGFuKHJlaW50ZXJwcmV0X2Nhc3Q8Y29u
c3QgR0NHTHZvaWQqPihkYXRhLmRhdGEoKSksIGRhdGEuc2l6ZSgpKSk7CiAgICAgfQogICAgIHZv
aWQgY29tcHJlc3NlZFRleFN1YkltYWdlMkQxKHVpbnQzMl90IHRhcmdldCwgaW50MzJfdCBsZXZl
bCwgaW50MzJfdCB4b2Zmc2V0LCBpbnQzMl90IHlvZmZzZXQsIGludDMyX3Qgd2lkdGgsIGludDMy
X3QgaGVpZ2h0LCB1aW50MzJfdCBmb3JtYXQsIGludDMyX3QgaW1hZ2VTaXplLCB1aW50NjRfdCBv
ZmZzZXQpCiAgICAgewotICAgICAgICBhc3NlcnRJc0N1cnJlbnQobV9zdHJlYW1UaHJlYWQpOwor
ICAgICAgICBhc3NlcnRJc0N1cnJlbnQod29ya1F1ZXVlKCkpOwogICAgICAgICBtX2NvbnRleHQt
PmNvbXByZXNzZWRUZXhTdWJJbWFnZTJEKHRhcmdldCwgbGV2ZWwsIHhvZmZzZXQsIHlvZmZzZXQs
IHdpZHRoLCBoZWlnaHQsIGZvcm1hdCwgaW1hZ2VTaXplLCBzdGF0aWNfY2FzdDxHQ0dMaW50cHRy
PihvZmZzZXQpKTsKICAgICB9CiAgICAgdm9pZCBkcmF3QXJyYXlzSW5zdGFuY2VkKHVpbnQzMl90
IG1vZGUsIGludDMyX3QgZmlyc3QsIGludDMyX3QgY291bnQsIGludDMyX3QgcHJpbWNvdW50KQog
ICAgIHsKLSAgICAgICAgYXNzZXJ0SXNDdXJyZW50KG1fc3RyZWFtVGhyZWFkKTsKKyAgICAgICAg
YXNzZXJ0SXNDdXJyZW50KHdvcmtRdWV1ZSgpKTsKICAgICAgICAgbV9jb250ZXh0LT5kcmF3QXJy
YXlzSW5zdGFuY2VkKG1vZGUsIGZpcnN0LCBjb3VudCwgcHJpbWNvdW50KTsKICAgICB9CiAgICAg
dm9pZCBkcmF3RWxlbWVudHNJbnN0YW5jZWQodWludDMyX3QgbW9kZSwgaW50MzJfdCBjb3VudCwg
dWludDMyX3QgdHlwZSwgdWludDY0X3Qgb2Zmc2V0LCBpbnQzMl90IHByaW1jb3VudCkKICAgICB7
Ci0gICAgICAgIGFzc2VydElzQ3VycmVudChtX3N0cmVhbVRocmVhZCk7CisgICAgICAgIGFzc2Vy
dElzQ3VycmVudCh3b3JrUXVldWUoKSk7CiAgICAgICAgIG1fY29udGV4dC0+ZHJhd0VsZW1lbnRz
SW5zdGFuY2VkKG1vZGUsIGNvdW50LCB0eXBlLCBzdGF0aWNfY2FzdDxHQ0dMaW50cHRyPihvZmZz
ZXQpLCBwcmltY291bnQpOwogICAgIH0KICAgICB2b2lkIHZlcnRleEF0dHJpYkRpdmlzb3IodWlu
dDMyX3QgaW5kZXgsIHVpbnQzMl90IGRpdmlzb3IpCiAgICAgewotICAgICAgICBhc3NlcnRJc0N1
cnJlbnQobV9zdHJlYW1UaHJlYWQpOworICAgICAgICBhc3NlcnRJc0N1cnJlbnQod29ya1F1ZXVl
KCkpOwogICAgICAgICBtX2NvbnRleHQtPnZlcnRleEF0dHJpYkRpdmlzb3IoaW5kZXgsIGRpdmlz
b3IpOwogICAgIH0KICAgICB2b2lkIGNyZWF0ZVZlcnRleEFycmF5KENvbXBsZXRpb25IYW5kbGVy
PHZvaWQodWludDMyX3QpPiYmIGNvbXBsZXRpb25IYW5kbGVyKQogICAgIHsKICAgICAgICAgUGxh
dGZvcm1HTE9iamVjdCByZXR1cm5WYWx1ZSA9IHsgfTsKLSAgICAgICAgYXNzZXJ0SXNDdXJyZW50
KG1fc3RyZWFtVGhyZWFkKTsKKyAgICAgICAgYXNzZXJ0SXNDdXJyZW50KHdvcmtRdWV1ZSgpKTsK
ICAgICAgICAgcmV0dXJuVmFsdWUgPSBtX2NvbnRleHQtPmNyZWF0ZVZlcnRleEFycmF5KCk7CiAg
ICAgICAgIGNvbXBsZXRpb25IYW5kbGVyKHJldHVyblZhbHVlKTsKICAgICB9CiAgICAgdm9pZCBk
ZWxldGVWZXJ0ZXhBcnJheSh1aW50MzJfdCBhcmcwKQogICAgIHsKLSAgICAgICAgYXNzZXJ0SXND
dXJyZW50KG1fc3RyZWFtVGhyZWFkKTsKKyAgICAgICAgYXNzZXJ0SXNDdXJyZW50KHdvcmtRdWV1
ZSgpKTsKICAgICAgICAgbV9jb250ZXh0LT5kZWxldGVWZXJ0ZXhBcnJheShhcmcwKTsKICAgICB9
CiAgICAgdm9pZCBpc1ZlcnRleEFycmF5KHVpbnQzMl90IGFyZzAsIENvbXBsZXRpb25IYW5kbGVy
PHZvaWQoYm9vbCk+JiYgY29tcGxldGlvbkhhbmRsZXIpCiAgICAgewogICAgICAgICBHQ0dMYm9v
bGVhbiByZXR1cm5WYWx1ZSA9IHsgfTsKLSAgICAgICAgYXNzZXJ0SXNDdXJyZW50KG1fc3RyZWFt
VGhyZWFkKTsKKyAgICAgICAgYXNzZXJ0SXNDdXJyZW50KHdvcmtRdWV1ZSgpKTsKICAgICAgICAg
cmV0dXJuVmFsdWUgPSBtX2NvbnRleHQtPmlzVmVydGV4QXJyYXkoYXJnMCk7CiAgICAgICAgIGNv
bXBsZXRpb25IYW5kbGVyKHN0YXRpY19jYXN0PGJvb2w+KHJldHVyblZhbHVlKSk7CiAgICAgfQog
ICAgIHZvaWQgYmluZFZlcnRleEFycmF5KHVpbnQzMl90IGFyZzApCiAgICAgewotICAgICAgICBh
c3NlcnRJc0N1cnJlbnQobV9zdHJlYW1UaHJlYWQpOworICAgICAgICBhc3NlcnRJc0N1cnJlbnQo
d29ya1F1ZXVlKCkpOwogICAgICAgICBtX2NvbnRleHQtPmJpbmRWZXJ0ZXhBcnJheShhcmcwKTsK
ICAgICB9CiAgICAgdm9pZCBjb3B5QnVmZmVyU3ViRGF0YSh1aW50MzJfdCByZWFkVGFyZ2V0LCB1
aW50MzJfdCB3cml0ZVRhcmdldCwgdWludDY0X3QgcmVhZE9mZnNldCwgdWludDY0X3Qgd3JpdGVP
ZmZzZXQsIHVpbnQ2NF90IGFyZzQpCiAgICAgewotICAgICAgICBhc3NlcnRJc0N1cnJlbnQobV9z
dHJlYW1UaHJlYWQpOworICAgICAgICBhc3NlcnRJc0N1cnJlbnQod29ya1F1ZXVlKCkpOwogICAg
ICAgICBtX2NvbnRleHQtPmNvcHlCdWZmZXJTdWJEYXRhKHJlYWRUYXJnZXQsIHdyaXRlVGFyZ2V0
LCBzdGF0aWNfY2FzdDxHQ0dMaW50cHRyPihyZWFkT2Zmc2V0KSwgc3RhdGljX2Nhc3Q8R0NHTGlu
dHB0cj4od3JpdGVPZmZzZXQpLCBzdGF0aWNfY2FzdDxHQ0dMc2l6ZWlwdHI+KGFyZzQpKTsKICAg
ICB9CiAgICAgdm9pZCBnZXRCdWZmZXJTdWJEYXRhKHVpbnQzMl90IHRhcmdldCwgdWludDY0X3Qg
b2Zmc2V0LCB1aW50NjRfdCBkYXRhU2l6ZSwgQ29tcGxldGlvbkhhbmRsZXI8dm9pZChJUEM6OkFy
cmF5UmVmZXJlbmNlPHVpbnQ4X3Q+KT4mJiBjb21wbGV0aW9uSGFuZGxlcikKICAgICB7CiAgICAg
ICAgIFZlY3RvcjxHQ0dMY2hhciwgND4gZGF0YShzdGF0aWNfY2FzdDxzaXplX3Q+KGRhdGFTaXpl
KSwgMCk7Ci0gICAgICAgIGFzc2VydElzQ3VycmVudChtX3N0cmVhbVRocmVhZCk7CisgICAgICAg
IGFzc2VydElzQ3VycmVudCh3b3JrUXVldWUoKSk7CiAgICAgICAgIG1fY29udGV4dC0+Z2V0QnVm
ZmVyU3ViRGF0YSh0YXJnZXQsIHN0YXRpY19jYXN0PEdDR0xpbnRwdHI+KG9mZnNldCksIGRhdGEp
OwogICAgICAgICBjb21wbGV0aW9uSGFuZGxlcihJUEM6OkFycmF5UmVmZXJlbmNlPHVpbnQ4X3Q+
KHJlaW50ZXJwcmV0X2Nhc3Q8dWludDhfdCo+KGRhdGEuZGF0YSgpKSwgZGF0YS5zaXplKCkpKTsK
ICAgICB9CiAgICAgdm9pZCBibGl0RnJhbWVidWZmZXIoaW50MzJfdCBzcmNYMCwgaW50MzJfdCBz
cmNZMCwgaW50MzJfdCBzcmNYMSwgaW50MzJfdCBzcmNZMSwgaW50MzJfdCBkc3RYMCwgaW50MzJf
dCBkc3RZMCwgaW50MzJfdCBkc3RYMSwgaW50MzJfdCBkc3RZMSwgdWludDMyX3QgbWFzaywgdWlu
dDMyX3QgZmlsdGVyKQogICAgIHsKLSAgICAgICAgYXNzZXJ0SXNDdXJyZW50KG1fc3RyZWFtVGhy
ZWFkKTsKKyAgICAgICAgYXNzZXJ0SXNDdXJyZW50KHdvcmtRdWV1ZSgpKTsKICAgICAgICAgbV9j
b250ZXh0LT5ibGl0RnJhbWVidWZmZXIoc3JjWDAsIHNyY1kwLCBzcmNYMSwgc3JjWTEsIGRzdFgw
LCBkc3RZMCwgZHN0WDEsIGRzdFkxLCBtYXNrLCBmaWx0ZXIpOwogICAgIH0KICAgICB2b2lkIGZy
YW1lYnVmZmVyVGV4dHVyZUxheWVyKHVpbnQzMl90IHRhcmdldCwgdWludDMyX3QgYXR0YWNobWVu
dCwgdWludDMyX3QgdGV4dHVyZSwgaW50MzJfdCBsZXZlbCwgaW50MzJfdCBsYXllcikKICAgICB7
Ci0gICAgICAgIGFzc2VydElzQ3VycmVudChtX3N0cmVhbVRocmVhZCk7CisgICAgICAgIGFzc2Vy
dElzQ3VycmVudCh3b3JrUXVldWUoKSk7CiAgICAgICAgIG1fY29udGV4dC0+ZnJhbWVidWZmZXJU
ZXh0dXJlTGF5ZXIodGFyZ2V0LCBhdHRhY2htZW50LCB0ZXh0dXJlLCBsZXZlbCwgbGF5ZXIpOwog
ICAgIH0KICAgICB2b2lkIGludmFsaWRhdGVGcmFtZWJ1ZmZlcih1aW50MzJfdCB0YXJnZXQsIElQ
Qzo6QXJyYXlSZWZlcmVuY2U8dWludDMyX3Q+JiYgYXR0YWNobWVudHMpCiAgICAgewotICAgICAg
ICBhc3NlcnRJc0N1cnJlbnQobV9zdHJlYW1UaHJlYWQpOworICAgICAgICBhc3NlcnRJc0N1cnJl
bnQod29ya1F1ZXVlKCkpOwogICAgICAgICBtX2NvbnRleHQtPmludmFsaWRhdGVGcmFtZWJ1ZmZl
cih0YXJnZXQsIG1ha2VHQ0dMU3BhbihyZWludGVycHJldF9jYXN0PGNvbnN0IEdDR0xlbnVtKj4o
YXR0YWNobWVudHMuZGF0YSgpKSwgYXR0YWNobWVudHMuc2l6ZSgpKSk7CiAgICAgfQogICAgIHZv
aWQgaW52YWxpZGF0ZVN1YkZyYW1lYnVmZmVyKHVpbnQzMl90IHRhcmdldCwgSVBDOjpBcnJheVJl
ZmVyZW5jZTx1aW50MzJfdD4mJiBhdHRhY2htZW50cywgaW50MzJfdCB4LCBpbnQzMl90IHksIGlu
dDMyX3Qgd2lkdGgsIGludDMyX3QgaGVpZ2h0KQogICAgIHsKLSAgICAgICAgYXNzZXJ0SXNDdXJy
ZW50KG1fc3RyZWFtVGhyZWFkKTsKKyAgICAgICAgYXNzZXJ0SXNDdXJyZW50KHdvcmtRdWV1ZSgp
KTsKICAgICAgICAgbV9jb250ZXh0LT5pbnZhbGlkYXRlU3ViRnJhbWVidWZmZXIodGFyZ2V0LCBt
YWtlR0NHTFNwYW4ocmVpbnRlcnByZXRfY2FzdDxjb25zdCBHQ0dMZW51bSo+KGF0dGFjaG1lbnRz
LmRhdGEoKSksIGF0dGFjaG1lbnRzLnNpemUoKSksIHgsIHksIHdpZHRoLCBoZWlnaHQpOwogICAg
IH0KICAgICB2b2lkIHJlYWRCdWZmZXIodWludDMyX3Qgc3JjKQogICAgIHsKLSAgICAgICAgYXNz
ZXJ0SXNDdXJyZW50KG1fc3RyZWFtVGhyZWFkKTsKKyAgICAgICAgYXNzZXJ0SXNDdXJyZW50KHdv
cmtRdWV1ZSgpKTsKICAgICAgICAgbV9jb250ZXh0LT5yZWFkQnVmZmVyKHNyYyk7CiAgICAgfQog
ICAgIHZvaWQgcmVuZGVyYnVmZmVyU3RvcmFnZU11bHRpc2FtcGxlKHVpbnQzMl90IHRhcmdldCwg
aW50MzJfdCBzYW1wbGVzLCB1aW50MzJfdCBpbnRlcm5hbGZvcm1hdCwgaW50MzJfdCB3aWR0aCwg
aW50MzJfdCBoZWlnaHQpCiAgICAgewotICAgICAgICBhc3NlcnRJc0N1cnJlbnQobV9zdHJlYW1U
aHJlYWQpOworICAgICAgICBhc3NlcnRJc0N1cnJlbnQod29ya1F1ZXVlKCkpOwogICAgICAgICBt
X2NvbnRleHQtPnJlbmRlcmJ1ZmZlclN0b3JhZ2VNdWx0aXNhbXBsZSh0YXJnZXQsIHNhbXBsZXMs
IGludGVybmFsZm9ybWF0LCB3aWR0aCwgaGVpZ2h0KTsKICAgICB9CiAgICAgdm9pZCB0ZXhTdG9y
YWdlMkQodWludDMyX3QgdGFyZ2V0LCBpbnQzMl90IGxldmVscywgdWludDMyX3QgaW50ZXJuYWxm
b3JtYXQsIGludDMyX3Qgd2lkdGgsIGludDMyX3QgaGVpZ2h0KQogICAgIHsKLSAgICAgICAgYXNz
ZXJ0SXNDdXJyZW50KG1fc3RyZWFtVGhyZWFkKTsKKyAgICAgICAgYXNzZXJ0SXNDdXJyZW50KHdv
cmtRdWV1ZSgpKTsKICAgICAgICAgbV9jb250ZXh0LT50ZXhTdG9yYWdlMkQodGFyZ2V0LCBsZXZl
bHMsIGludGVybmFsZm9ybWF0LCB3aWR0aCwgaGVpZ2h0KTsKICAgICB9CiAgICAgdm9pZCB0ZXhT
dG9yYWdlM0QodWludDMyX3QgdGFyZ2V0LCBpbnQzMl90IGxldmVscywgdWludDMyX3QgaW50ZXJu
YWxmb3JtYXQsIGludDMyX3Qgd2lkdGgsIGludDMyX3QgaGVpZ2h0LCBpbnQzMl90IGRlcHRoKQog
ICAgIHsKLSAgICAgICAgYXNzZXJ0SXNDdXJyZW50KG1fc3RyZWFtVGhyZWFkKTsKKyAgICAgICAg
YXNzZXJ0SXNDdXJyZW50KHdvcmtRdWV1ZSgpKTsKICAgICAgICAgbV9jb250ZXh0LT50ZXhTdG9y
YWdlM0QodGFyZ2V0LCBsZXZlbHMsIGludGVybmFsZm9ybWF0LCB3aWR0aCwgaGVpZ2h0LCBkZXB0
aCk7CiAgICAgfQogICAgIHZvaWQgdGV4SW1hZ2UzRDAodWludDMyX3QgdGFyZ2V0LCBpbnQzMl90
IGxldmVsLCBpbnQzMl90IGludGVybmFsZm9ybWF0LCBpbnQzMl90IHdpZHRoLCBpbnQzMl90IGhl
aWdodCwgaW50MzJfdCBkZXB0aCwgaW50MzJfdCBib3JkZXIsIHVpbnQzMl90IGZvcm1hdCwgdWlu
dDMyX3QgdHlwZSwgSVBDOjpBcnJheVJlZmVyZW5jZTx1aW50OF90PiYmIHBpeGVscykKICAgICB7
Ci0gICAgICAgIGFzc2VydElzQ3VycmVudChtX3N0cmVhbVRocmVhZCk7CisgICAgICAgIGFzc2Vy
dElzQ3VycmVudCh3b3JrUXVldWUoKSk7CiAgICAgICAgIG1fY29udGV4dC0+dGV4SW1hZ2UzRCh0
YXJnZXQsIGxldmVsLCBpbnRlcm5hbGZvcm1hdCwgd2lkdGgsIGhlaWdodCwgZGVwdGgsIGJvcmRl
ciwgZm9ybWF0LCB0eXBlLCBtYWtlR0NHTFNwYW4ocmVpbnRlcnByZXRfY2FzdDxjb25zdCBHQ0dM
dm9pZCo+KHBpeGVscy5kYXRhKCkpLCBwaXhlbHMuc2l6ZSgpKSk7CiAgICAgfQogICAgIHZvaWQg
dGV4SW1hZ2UzRDEodWludDMyX3QgdGFyZ2V0LCBpbnQzMl90IGxldmVsLCBpbnQzMl90IGludGVy
bmFsZm9ybWF0LCBpbnQzMl90IHdpZHRoLCBpbnQzMl90IGhlaWdodCwgaW50MzJfdCBkZXB0aCwg
aW50MzJfdCBib3JkZXIsIHVpbnQzMl90IGZvcm1hdCwgdWludDMyX3QgdHlwZSwgdWludDY0X3Qg
b2Zmc2V0KQogICAgIHsKLSAgICAgICAgYXNzZXJ0SXNDdXJyZW50KG1fc3RyZWFtVGhyZWFkKTsK
KyAgICAgICAgYXNzZXJ0SXNDdXJyZW50KHdvcmtRdWV1ZSgpKTsKICAgICAgICAgbV9jb250ZXh0
LT50ZXhJbWFnZTNEKHRhcmdldCwgbGV2ZWwsIGludGVybmFsZm9ybWF0LCB3aWR0aCwgaGVpZ2h0
LCBkZXB0aCwgYm9yZGVyLCBmb3JtYXQsIHR5cGUsIHN0YXRpY19jYXN0PEdDR0xpbnRwdHI+KG9m
ZnNldCkpOwogICAgIH0KICAgICB2b2lkIHRleFN1YkltYWdlM0QwKHVpbnQzMl90IHRhcmdldCwg
aW50MzJfdCBsZXZlbCwgaW50MzJfdCB4b2Zmc2V0LCBpbnQzMl90IHlvZmZzZXQsIGludDMyX3Qg
em9mZnNldCwgaW50MzJfdCB3aWR0aCwgaW50MzJfdCBoZWlnaHQsIGludDMyX3QgZGVwdGgsIHVp
bnQzMl90IGZvcm1hdCwgdWludDMyX3QgdHlwZSwgSVBDOjpBcnJheVJlZmVyZW5jZTx1aW50OF90
PiYmIHBpeGVscykKICAgICB7Ci0gICAgICAgIGFzc2VydElzQ3VycmVudChtX3N0cmVhbVRocmVh
ZCk7CisgICAgICAgIGFzc2VydElzQ3VycmVudCh3b3JrUXVldWUoKSk7CiAgICAgICAgIG1fY29u
dGV4dC0+dGV4U3ViSW1hZ2UzRCh0YXJnZXQsIGxldmVsLCB4b2Zmc2V0LCB5b2Zmc2V0LCB6b2Zm
c2V0LCB3aWR0aCwgaGVpZ2h0LCBkZXB0aCwgZm9ybWF0LCB0eXBlLCBtYWtlR0NHTFNwYW4ocmVp
bnRlcnByZXRfY2FzdDxjb25zdCBHQ0dMdm9pZCo+KHBpeGVscy5kYXRhKCkpLCBwaXhlbHMuc2l6
ZSgpKSk7CiAgICAgfQogICAgIHZvaWQgdGV4U3ViSW1hZ2UzRDEodWludDMyX3QgdGFyZ2V0LCBp
bnQzMl90IGxldmVsLCBpbnQzMl90IHhvZmZzZXQsIGludDMyX3QgeW9mZnNldCwgaW50MzJfdCB6
b2Zmc2V0LCBpbnQzMl90IHdpZHRoLCBpbnQzMl90IGhlaWdodCwgaW50MzJfdCBkZXB0aCwgdWlu
dDMyX3QgZm9ybWF0LCB1aW50MzJfdCB0eXBlLCB1aW50NjRfdCBvZmZzZXQpCiAgICAgewotICAg
ICAgICBhc3NlcnRJc0N1cnJlbnQobV9zdHJlYW1UaHJlYWQpOworICAgICAgICBhc3NlcnRJc0N1
cnJlbnQod29ya1F1ZXVlKCkpOwogICAgICAgICBtX2NvbnRleHQtPnRleFN1YkltYWdlM0QodGFy
Z2V0LCBsZXZlbCwgeG9mZnNldCwgeW9mZnNldCwgem9mZnNldCwgd2lkdGgsIGhlaWdodCwgZGVw
dGgsIGZvcm1hdCwgdHlwZSwgc3RhdGljX2Nhc3Q8R0NHTGludHB0cj4ob2Zmc2V0KSk7CiAgICAg
fQogICAgIHZvaWQgY29weVRleFN1YkltYWdlM0QodWludDMyX3QgdGFyZ2V0LCBpbnQzMl90IGxl
dmVsLCBpbnQzMl90IHhvZmZzZXQsIGludDMyX3QgeW9mZnNldCwgaW50MzJfdCB6b2Zmc2V0LCBp
bnQzMl90IHgsIGludDMyX3QgeSwgaW50MzJfdCB3aWR0aCwgaW50MzJfdCBoZWlnaHQpCiAgICAg
ewotICAgICAgICBhc3NlcnRJc0N1cnJlbnQobV9zdHJlYW1UaHJlYWQpOworICAgICAgICBhc3Nl
cnRJc0N1cnJlbnQod29ya1F1ZXVlKCkpOwogICAgICAgICBtX2NvbnRleHQtPmNvcHlUZXhTdWJJ
bWFnZTNEKHRhcmdldCwgbGV2ZWwsIHhvZmZzZXQsIHlvZmZzZXQsIHpvZmZzZXQsIHgsIHksIHdp
ZHRoLCBoZWlnaHQpOwogICAgIH0KICAgICB2b2lkIGNvbXByZXNzZWRUZXhJbWFnZTNEMCh1aW50
MzJfdCB0YXJnZXQsIGludDMyX3QgbGV2ZWwsIHVpbnQzMl90IGludGVybmFsZm9ybWF0LCBpbnQz
Ml90IHdpZHRoLCBpbnQzMl90IGhlaWdodCwgaW50MzJfdCBkZXB0aCwgaW50MzJfdCBib3JkZXIs
IGludDMyX3QgaW1hZ2VTaXplLCBJUEM6OkFycmF5UmVmZXJlbmNlPHVpbnQ4X3Q+JiYgZGF0YSkK
ICAgICB7Ci0gICAgICAgIGFzc2VydElzQ3VycmVudChtX3N0cmVhbVRocmVhZCk7CisgICAgICAg
IGFzc2VydElzQ3VycmVudCh3b3JrUXVldWUoKSk7CiAgICAgICAgIG1fY29udGV4dC0+Y29tcHJl
c3NlZFRleEltYWdlM0QodGFyZ2V0LCBsZXZlbCwgaW50ZXJuYWxmb3JtYXQsIHdpZHRoLCBoZWln
aHQsIGRlcHRoLCBib3JkZXIsIGltYWdlU2l6ZSwgbWFrZUdDR0xTcGFuKHJlaW50ZXJwcmV0X2Nh
c3Q8Y29uc3QgR0NHTHZvaWQqPihkYXRhLmRhdGEoKSksIGRhdGEuc2l6ZSgpKSk7CiAgICAgfQog
ICAgIHZvaWQgY29tcHJlc3NlZFRleEltYWdlM0QxKHVpbnQzMl90IHRhcmdldCwgaW50MzJfdCBs
ZXZlbCwgdWludDMyX3QgaW50ZXJuYWxmb3JtYXQsIGludDMyX3Qgd2lkdGgsIGludDMyX3QgaGVp
Z2h0LCBpbnQzMl90IGRlcHRoLCBpbnQzMl90IGJvcmRlciwgaW50MzJfdCBpbWFnZVNpemUsIHVp
bnQ2NF90IG9mZnNldCkKICAgICB7Ci0gICAgICAgIGFzc2VydElzQ3VycmVudChtX3N0cmVhbVRo
cmVhZCk7CisgICAgICAgIGFzc2VydElzQ3VycmVudCh3b3JrUXVldWUoKSk7CiAgICAgICAgIG1f
Y29udGV4dC0+Y29tcHJlc3NlZFRleEltYWdlM0QodGFyZ2V0LCBsZXZlbCwgaW50ZXJuYWxmb3Jt
YXQsIHdpZHRoLCBoZWlnaHQsIGRlcHRoLCBib3JkZXIsIGltYWdlU2l6ZSwgc3RhdGljX2Nhc3Q8
R0NHTGludHB0cj4ob2Zmc2V0KSk7CiAgICAgfQogICAgIHZvaWQgY29tcHJlc3NlZFRleFN1Yklt
YWdlM0QwKHVpbnQzMl90IHRhcmdldCwgaW50MzJfdCBsZXZlbCwgaW50MzJfdCB4b2Zmc2V0LCBp
bnQzMl90IHlvZmZzZXQsIGludDMyX3Qgem9mZnNldCwgaW50MzJfdCB3aWR0aCwgaW50MzJfdCBo
ZWlnaHQsIGludDMyX3QgZGVwdGgsIHVpbnQzMl90IGZvcm1hdCwgaW50MzJfdCBpbWFnZVNpemUs
IElQQzo6QXJyYXlSZWZlcmVuY2U8dWludDhfdD4mJiBkYXRhKQogICAgIHsKLSAgICAgICAgYXNz
ZXJ0SXNDdXJyZW50KG1fc3RyZWFtVGhyZWFkKTsKKyAgICAgICAgYXNzZXJ0SXNDdXJyZW50KHdv
cmtRdWV1ZSgpKTsKICAgICAgICAgbV9jb250ZXh0LT5jb21wcmVzc2VkVGV4U3ViSW1hZ2UzRCh0
YXJnZXQsIGxldmVsLCB4b2Zmc2V0LCB5b2Zmc2V0LCB6b2Zmc2V0LCB3aWR0aCwgaGVpZ2h0LCBk
ZXB0aCwgZm9ybWF0LCBpbWFnZVNpemUsIG1ha2VHQ0dMU3BhbihyZWludGVycHJldF9jYXN0PGNv
bnN0IEdDR0x2b2lkKj4oZGF0YS5kYXRhKCkpLCBkYXRhLnNpemUoKSkpOwogICAgIH0KICAgICB2
b2lkIGNvbXByZXNzZWRUZXhTdWJJbWFnZTNEMSh1aW50MzJfdCB0YXJnZXQsIGludDMyX3QgbGV2
ZWwsIGludDMyX3QgeG9mZnNldCwgaW50MzJfdCB5b2Zmc2V0LCBpbnQzMl90IHpvZmZzZXQsIGlu
dDMyX3Qgd2lkdGgsIGludDMyX3QgaGVpZ2h0LCBpbnQzMl90IGRlcHRoLCB1aW50MzJfdCBmb3Jt
YXQsIGludDMyX3QgaW1hZ2VTaXplLCB1aW50NjRfdCBvZmZzZXQpCiAgICAgewotICAgICAgICBh
c3NlcnRJc0N1cnJlbnQobV9zdHJlYW1UaHJlYWQpOworICAgICAgICBhc3NlcnRJc0N1cnJlbnQo
d29ya1F1ZXVlKCkpOwogICAgICAgICBtX2NvbnRleHQtPmNvbXByZXNzZWRUZXhTdWJJbWFnZTNE
KHRhcmdldCwgbGV2ZWwsIHhvZmZzZXQsIHlvZmZzZXQsIHpvZmZzZXQsIHdpZHRoLCBoZWlnaHQs
IGRlcHRoLCBmb3JtYXQsIGltYWdlU2l6ZSwgc3RhdGljX2Nhc3Q8R0NHTGludHB0cj4ob2Zmc2V0
KSk7CiAgICAgfQogICAgIHZvaWQgZ2V0RnJhZ0RhdGFMb2NhdGlvbih1aW50MzJfdCBwcm9ncmFt
LCBTdHJpbmcmJiBuYW1lLCBDb21wbGV0aW9uSGFuZGxlcjx2b2lkKGludDMyX3QpPiYmIGNvbXBs
ZXRpb25IYW5kbGVyKQogICAgIHsKICAgICAgICAgR0NHTGludCByZXR1cm5WYWx1ZSA9IHsgfTsK
LSAgICAgICAgYXNzZXJ0SXNDdXJyZW50KG1fc3RyZWFtVGhyZWFkKTsKKyAgICAgICAgYXNzZXJ0
SXNDdXJyZW50KHdvcmtRdWV1ZSgpKTsKICAgICAgICAgcmV0dXJuVmFsdWUgPSBtX2NvbnRleHQt
PmdldEZyYWdEYXRhTG9jYXRpb24ocHJvZ3JhbSwgbmFtZSk7CiAgICAgICAgIGNvbXBsZXRpb25I
YW5kbGVyKHJldHVyblZhbHVlKTsKICAgICB9CiAgICAgdm9pZCB1bmlmb3JtMXVpKGludDMyX3Qg
bG9jYXRpb24sIHVpbnQzMl90IHYwKQogICAgIHsKLSAgICAgICAgYXNzZXJ0SXNDdXJyZW50KG1f
c3RyZWFtVGhyZWFkKTsKKyAgICAgICAgYXNzZXJ0SXNDdXJyZW50KHdvcmtRdWV1ZSgpKTsKICAg
ICAgICAgbV9jb250ZXh0LT51bmlmb3JtMXVpKGxvY2F0aW9uLCB2MCk7CiAgICAgfQogICAgIHZv
aWQgdW5pZm9ybTJ1aShpbnQzMl90IGxvY2F0aW9uLCB1aW50MzJfdCB2MCwgdWludDMyX3QgdjEp
CiAgICAgewotICAgICAgICBhc3NlcnRJc0N1cnJlbnQobV9zdHJlYW1UaHJlYWQpOworICAgICAg
ICBhc3NlcnRJc0N1cnJlbnQod29ya1F1ZXVlKCkpOwogICAgICAgICBtX2NvbnRleHQtPnVuaWZv
cm0ydWkobG9jYXRpb24sIHYwLCB2MSk7CiAgICAgfQogICAgIHZvaWQgdW5pZm9ybTN1aShpbnQz
Ml90IGxvY2F0aW9uLCB1aW50MzJfdCB2MCwgdWludDMyX3QgdjEsIHVpbnQzMl90IHYyKQogICAg
IHsKLSAgICAgICAgYXNzZXJ0SXNDdXJyZW50KG1fc3RyZWFtVGhyZWFkKTsKKyAgICAgICAgYXNz
ZXJ0SXNDdXJyZW50KHdvcmtRdWV1ZSgpKTsKICAgICAgICAgbV9jb250ZXh0LT51bmlmb3JtM3Vp
KGxvY2F0aW9uLCB2MCwgdjEsIHYyKTsKICAgICB9CiAgICAgdm9pZCB1bmlmb3JtNHVpKGludDMy
X3QgbG9jYXRpb24sIHVpbnQzMl90IHYwLCB1aW50MzJfdCB2MSwgdWludDMyX3QgdjIsIHVpbnQz
Ml90IHYzKQogICAgIHsKLSAgICAgICAgYXNzZXJ0SXNDdXJyZW50KG1fc3RyZWFtVGhyZWFkKTsK
KyAgICAgICAgYXNzZXJ0SXNDdXJyZW50KHdvcmtRdWV1ZSgpKTsKICAgICAgICAgbV9jb250ZXh0
LT51bmlmb3JtNHVpKGxvY2F0aW9uLCB2MCwgdjEsIHYyLCB2Myk7CiAgICAgfQogICAgIHZvaWQg
dW5pZm9ybTF1aXYoaW50MzJfdCBsb2NhdGlvbiwgSVBDOjpBcnJheVJlZmVyZW5jZTx1aW50MzJf
dD4mJiBkYXRhKQogICAgIHsKLSAgICAgICAgYXNzZXJ0SXNDdXJyZW50KG1fc3RyZWFtVGhyZWFk
KTsKKyAgICAgICAgYXNzZXJ0SXNDdXJyZW50KHdvcmtRdWV1ZSgpKTsKICAgICAgICAgbV9jb250
ZXh0LT51bmlmb3JtMXVpdihsb2NhdGlvbiwgbWFrZUdDR0xTcGFuKHJlaW50ZXJwcmV0X2Nhc3Q8
Y29uc3QgR0NHTHVpbnQqPihkYXRhLmRhdGEoKSksIGRhdGEuc2l6ZSgpKSk7CiAgICAgfQogICAg
IHZvaWQgdW5pZm9ybTJ1aXYoaW50MzJfdCBsb2NhdGlvbiwgSVBDOjpBcnJheVJlZmVyZW5jZTx1
aW50MzJfdD4mJiBkYXRhKQogICAgIHsKLSAgICAgICAgYXNzZXJ0SXNDdXJyZW50KG1fc3RyZWFt
VGhyZWFkKTsKKyAgICAgICAgYXNzZXJ0SXNDdXJyZW50KHdvcmtRdWV1ZSgpKTsKICAgICAgICAg
bV9jb250ZXh0LT51bmlmb3JtMnVpdihsb2NhdGlvbiwgbWFrZUdDR0xTcGFuKHJlaW50ZXJwcmV0
X2Nhc3Q8Y29uc3QgR0NHTHVpbnQqPihkYXRhLmRhdGEoKSksIGRhdGEuc2l6ZSgpKSk7CiAgICAg
fQogICAgIHZvaWQgdW5pZm9ybTN1aXYoaW50MzJfdCBsb2NhdGlvbiwgSVBDOjpBcnJheVJlZmVy
ZW5jZTx1aW50MzJfdD4mJiBkYXRhKQogICAgIHsKLSAgICAgICAgYXNzZXJ0SXNDdXJyZW50KG1f
c3RyZWFtVGhyZWFkKTsKKyAgICAgICAgYXNzZXJ0SXNDdXJyZW50KHdvcmtRdWV1ZSgpKTsKICAg
ICAgICAgbV9jb250ZXh0LT51bmlmb3JtM3Vpdihsb2NhdGlvbiwgbWFrZUdDR0xTcGFuKHJlaW50
ZXJwcmV0X2Nhc3Q8Y29uc3QgR0NHTHVpbnQqPihkYXRhLmRhdGEoKSksIGRhdGEuc2l6ZSgpKSk7
CiAgICAgfQogICAgIHZvaWQgdW5pZm9ybTR1aXYoaW50MzJfdCBsb2NhdGlvbiwgSVBDOjpBcnJh
eVJlZmVyZW5jZTx1aW50MzJfdD4mJiBkYXRhKQogICAgIHsKLSAgICAgICAgYXNzZXJ0SXNDdXJy
ZW50KG1fc3RyZWFtVGhyZWFkKTsKKyAgICAgICAgYXNzZXJ0SXNDdXJyZW50KHdvcmtRdWV1ZSgp
KTsKICAgICAgICAgbV9jb250ZXh0LT51bmlmb3JtNHVpdihsb2NhdGlvbiwgbWFrZUdDR0xTcGFu
KHJlaW50ZXJwcmV0X2Nhc3Q8Y29uc3QgR0NHTHVpbnQqPihkYXRhLmRhdGEoKSksIGRhdGEuc2l6
ZSgpKSk7CiAgICAgfQogICAgIHZvaWQgdW5pZm9ybU1hdHJpeDJ4M2Z2KGludDMyX3QgbG9jYXRp
b24sIGJvb2wgdHJhbnNwb3NlLCBJUEM6OkFycmF5UmVmZXJlbmNlPGZsb2F0PiYmIGRhdGEpCiAg
ICAgewotICAgICAgICBhc3NlcnRJc0N1cnJlbnQobV9zdHJlYW1UaHJlYWQpOworICAgICAgICBh
c3NlcnRJc0N1cnJlbnQod29ya1F1ZXVlKCkpOwogICAgICAgICBtX2NvbnRleHQtPnVuaWZvcm1N
YXRyaXgyeDNmdihsb2NhdGlvbiwgc3RhdGljX2Nhc3Q8R0NHTGJvb2xlYW4+KHRyYW5zcG9zZSks
IG1ha2VHQ0dMU3BhbihyZWludGVycHJldF9jYXN0PGNvbnN0IEdDR0xmbG9hdCo+KGRhdGEuZGF0
YSgpKSwgZGF0YS5zaXplKCkpKTsKICAgICB9CiAgICAgdm9pZCB1bmlmb3JtTWF0cml4M3gyZnYo
aW50MzJfdCBsb2NhdGlvbiwgYm9vbCB0cmFuc3Bvc2UsIElQQzo6QXJyYXlSZWZlcmVuY2U8Zmxv
YXQ+JiYgZGF0YSkKICAgICB7Ci0gICAgICAgIGFzc2VydElzQ3VycmVudChtX3N0cmVhbVRocmVh
ZCk7CisgICAgICAgIGFzc2VydElzQ3VycmVudCh3b3JrUXVldWUoKSk7CiAgICAgICAgIG1fY29u
dGV4dC0+dW5pZm9ybU1hdHJpeDN4MmZ2KGxvY2F0aW9uLCBzdGF0aWNfY2FzdDxHQ0dMYm9vbGVh
bj4odHJhbnNwb3NlKSwgbWFrZUdDR0xTcGFuKHJlaW50ZXJwcmV0X2Nhc3Q8Y29uc3QgR0NHTGZs
b2F0Kj4oZGF0YS5kYXRhKCkpLCBkYXRhLnNpemUoKSkpOwogICAgIH0KICAgICB2b2lkIHVuaWZv
cm1NYXRyaXgyeDRmdihpbnQzMl90IGxvY2F0aW9uLCBib29sIHRyYW5zcG9zZSwgSVBDOjpBcnJh
eVJlZmVyZW5jZTxmbG9hdD4mJiBkYXRhKQogICAgIHsKLSAgICAgICAgYXNzZXJ0SXNDdXJyZW50
KG1fc3RyZWFtVGhyZWFkKTsKKyAgICAgICAgYXNzZXJ0SXNDdXJyZW50KHdvcmtRdWV1ZSgpKTsK
ICAgICAgICAgbV9jb250ZXh0LT51bmlmb3JtTWF0cml4Mng0ZnYobG9jYXRpb24sIHN0YXRpY19j
YXN0PEdDR0xib29sZWFuPih0cmFuc3Bvc2UpLCBtYWtlR0NHTFNwYW4ocmVpbnRlcnByZXRfY2Fz
dDxjb25zdCBHQ0dMZmxvYXQqPihkYXRhLmRhdGEoKSksIGRhdGEuc2l6ZSgpKSk7CiAgICAgfQog
ICAgIHZvaWQgdW5pZm9ybU1hdHJpeDR4MmZ2KGludDMyX3QgbG9jYXRpb24sIGJvb2wgdHJhbnNw
b3NlLCBJUEM6OkFycmF5UmVmZXJlbmNlPGZsb2F0PiYmIGRhdGEpCiAgICAgewotICAgICAgICBh
c3NlcnRJc0N1cnJlbnQobV9zdHJlYW1UaHJlYWQpOworICAgICAgICBhc3NlcnRJc0N1cnJlbnQo
d29ya1F1ZXVlKCkpOwogICAgICAgICBtX2NvbnRleHQtPnVuaWZvcm1NYXRyaXg0eDJmdihsb2Nh
dGlvbiwgc3RhdGljX2Nhc3Q8R0NHTGJvb2xlYW4+KHRyYW5zcG9zZSksIG1ha2VHQ0dMU3Bhbihy
ZWludGVycHJldF9jYXN0PGNvbnN0IEdDR0xmbG9hdCo+KGRhdGEuZGF0YSgpKSwgZGF0YS5zaXpl
KCkpKTsKICAgICB9CiAgICAgdm9pZCB1bmlmb3JtTWF0cml4M3g0ZnYoaW50MzJfdCBsb2NhdGlv
biwgYm9vbCB0cmFuc3Bvc2UsIElQQzo6QXJyYXlSZWZlcmVuY2U8ZmxvYXQ+JiYgZGF0YSkKICAg
ICB7Ci0gICAgICAgIGFzc2VydElzQ3VycmVudChtX3N0cmVhbVRocmVhZCk7CisgICAgICAgIGFz
c2VydElzQ3VycmVudCh3b3JrUXVldWUoKSk7CiAgICAgICAgIG1fY29udGV4dC0+dW5pZm9ybU1h
dHJpeDN4NGZ2KGxvY2F0aW9uLCBzdGF0aWNfY2FzdDxHQ0dMYm9vbGVhbj4odHJhbnNwb3NlKSwg
bWFrZUdDR0xTcGFuKHJlaW50ZXJwcmV0X2Nhc3Q8Y29uc3QgR0NHTGZsb2F0Kj4oZGF0YS5kYXRh
KCkpLCBkYXRhLnNpemUoKSkpOwogICAgIH0KICAgICB2b2lkIHVuaWZvcm1NYXRyaXg0eDNmdihp
bnQzMl90IGxvY2F0aW9uLCBib29sIHRyYW5zcG9zZSwgSVBDOjpBcnJheVJlZmVyZW5jZTxmbG9h
dD4mJiBkYXRhKQogICAgIHsKLSAgICAgICAgYXNzZXJ0SXNDdXJyZW50KG1fc3RyZWFtVGhyZWFk
KTsKKyAgICAgICAgYXNzZXJ0SXNDdXJyZW50KHdvcmtRdWV1ZSgpKTsKICAgICAgICAgbV9jb250
ZXh0LT51bmlmb3JtTWF0cml4NHgzZnYobG9jYXRpb24sIHN0YXRpY19jYXN0PEdDR0xib29sZWFu
Pih0cmFuc3Bvc2UpLCBtYWtlR0NHTFNwYW4ocmVpbnRlcnByZXRfY2FzdDxjb25zdCBHQ0dMZmxv
YXQqPihkYXRhLmRhdGEoKSksIGRhdGEuc2l6ZSgpKSk7CiAgICAgfQogICAgIHZvaWQgdmVydGV4
QXR0cmliSTRpKHVpbnQzMl90IGluZGV4LCBpbnQzMl90IHgsIGludDMyX3QgeSwgaW50MzJfdCB6
LCBpbnQzMl90IHcpCiAgICAgewotICAgICAgICBhc3NlcnRJc0N1cnJlbnQobV9zdHJlYW1UaHJl
YWQpOworICAgICAgICBhc3NlcnRJc0N1cnJlbnQod29ya1F1ZXVlKCkpOwogICAgICAgICBtX2Nv
bnRleHQtPnZlcnRleEF0dHJpYkk0aShpbmRleCwgeCwgeSwgeiwgdyk7CiAgICAgfQogICAgIHZv
aWQgdmVydGV4QXR0cmliSTRpdih1aW50MzJfdCBpbmRleCwgSVBDOjpBcnJheVJlZmVyZW5jZTxp
bnQzMl90LCA0PiYmIHZhbHVlcykKICAgICB7Ci0gICAgICAgIGFzc2VydElzQ3VycmVudChtX3N0
cmVhbVRocmVhZCk7CisgICAgICAgIGFzc2VydElzQ3VycmVudCh3b3JrUXVldWUoKSk7CiAgICAg
ICAgIG1fY29udGV4dC0+dmVydGV4QXR0cmliSTRpdihpbmRleCwgbWFrZUdDR0xTcGFuPDQ+KHJl
aW50ZXJwcmV0X2Nhc3Q8Y29uc3QgR0NHTGludCo+KHZhbHVlcy5kYXRhKCkpKSk7CiAgICAgfQog
ICAgIHZvaWQgdmVydGV4QXR0cmliSTR1aSh1aW50MzJfdCBpbmRleCwgdWludDMyX3QgeCwgdWlu
dDMyX3QgeSwgdWludDMyX3QgeiwgdWludDMyX3QgdykKICAgICB7Ci0gICAgICAgIGFzc2VydElz
Q3VycmVudChtX3N0cmVhbVRocmVhZCk7CisgICAgICAgIGFzc2VydElzQ3VycmVudCh3b3JrUXVl
dWUoKSk7CiAgICAgICAgIG1fY29udGV4dC0+dmVydGV4QXR0cmliSTR1aShpbmRleCwgeCwgeSwg
eiwgdyk7CiAgICAgfQogICAgIHZvaWQgdmVydGV4QXR0cmliSTR1aXYodWludDMyX3QgaW5kZXgs
IElQQzo6QXJyYXlSZWZlcmVuY2U8dWludDMyX3QsIDQ+JiYgdmFsdWVzKQogICAgIHsKLSAgICAg
ICAgYXNzZXJ0SXNDdXJyZW50KG1fc3RyZWFtVGhyZWFkKTsKKyAgICAgICAgYXNzZXJ0SXNDdXJy
ZW50KHdvcmtRdWV1ZSgpKTsKICAgICAgICAgbV9jb250ZXh0LT52ZXJ0ZXhBdHRyaWJJNHVpdihp
bmRleCwgbWFrZUdDR0xTcGFuPDQ+KHJlaW50ZXJwcmV0X2Nhc3Q8Y29uc3QgR0NHTHVpbnQqPih2
YWx1ZXMuZGF0YSgpKSkpOwogICAgIH0KICAgICB2b2lkIHZlcnRleEF0dHJpYklQb2ludGVyKHVp
bnQzMl90IGluZGV4LCBpbnQzMl90IHNpemUsIHVpbnQzMl90IHR5cGUsIGludDMyX3Qgc3RyaWRl
LCB1aW50NjRfdCBvZmZzZXQpCiAgICAgewotICAgICAgICBhc3NlcnRJc0N1cnJlbnQobV9zdHJl
YW1UaHJlYWQpOworICAgICAgICBhc3NlcnRJc0N1cnJlbnQod29ya1F1ZXVlKCkpOwogICAgICAg
ICBtX2NvbnRleHQtPnZlcnRleEF0dHJpYklQb2ludGVyKGluZGV4LCBzaXplLCB0eXBlLCBzdHJp
ZGUsIHN0YXRpY19jYXN0PEdDR0xpbnRwdHI+KG9mZnNldCkpOwogICAgIH0KICAgICB2b2lkIGRy
YXdSYW5nZUVsZW1lbnRzKHVpbnQzMl90IG1vZGUsIHVpbnQzMl90IHN0YXJ0LCB1aW50MzJfdCBl
bmQsIGludDMyX3QgY291bnQsIHVpbnQzMl90IHR5cGUsIHVpbnQ2NF90IG9mZnNldCkKICAgICB7
Ci0gICAgICAgIGFzc2VydElzQ3VycmVudChtX3N0cmVhbVRocmVhZCk7CisgICAgICAgIGFzc2Vy
dElzQ3VycmVudCh3b3JrUXVldWUoKSk7CiAgICAgICAgIG1fY29udGV4dC0+ZHJhd1JhbmdlRWxl
bWVudHMobW9kZSwgc3RhcnQsIGVuZCwgY291bnQsIHR5cGUsIHN0YXRpY19jYXN0PEdDR0xpbnRw
dHI+KG9mZnNldCkpOwogICAgIH0KICAgICB2b2lkIGRyYXdCdWZmZXJzKElQQzo6QXJyYXlSZWZl
cmVuY2U8dWludDMyX3Q+JiYgYnVmcykKICAgICB7Ci0gICAgICAgIGFzc2VydElzQ3VycmVudCht
X3N0cmVhbVRocmVhZCk7CisgICAgICAgIGFzc2VydElzQ3VycmVudCh3b3JrUXVldWUoKSk7CiAg
ICAgICAgIG1fY29udGV4dC0+ZHJhd0J1ZmZlcnMobWFrZUdDR0xTcGFuKHJlaW50ZXJwcmV0X2Nh
c3Q8Y29uc3QgR0NHTGVudW0qPihidWZzLmRhdGEoKSksIGJ1ZnMuc2l6ZSgpKSk7CiAgICAgfQog
ICAgIHZvaWQgY2xlYXJCdWZmZXJpdih1aW50MzJfdCBidWZmZXIsIGludDMyX3QgZHJhd2J1ZmZl
ciwgSVBDOjpBcnJheVJlZmVyZW5jZTxpbnQzMl90PiYmIHZhbHVlcykKICAgICB7Ci0gICAgICAg
IGFzc2VydElzQ3VycmVudChtX3N0cmVhbVRocmVhZCk7CisgICAgICAgIGFzc2VydElzQ3VycmVu
dCh3b3JrUXVldWUoKSk7CiAgICAgICAgIG1fY29udGV4dC0+Y2xlYXJCdWZmZXJpdihidWZmZXIs
IGRyYXdidWZmZXIsIG1ha2VHQ0dMU3BhbihyZWludGVycHJldF9jYXN0PGNvbnN0IEdDR0xpbnQq
Pih2YWx1ZXMuZGF0YSgpKSwgdmFsdWVzLnNpemUoKSkpOwogICAgIH0KICAgICB2b2lkIGNsZWFy
QnVmZmVydWl2KHVpbnQzMl90IGJ1ZmZlciwgaW50MzJfdCBkcmF3YnVmZmVyLCBJUEM6OkFycmF5
UmVmZXJlbmNlPHVpbnQzMl90PiYmIHZhbHVlcykKICAgICB7Ci0gICAgICAgIGFzc2VydElzQ3Vy
cmVudChtX3N0cmVhbVRocmVhZCk7CisgICAgICAgIGFzc2VydElzQ3VycmVudCh3b3JrUXVldWUo
KSk7CiAgICAgICAgIG1fY29udGV4dC0+Y2xlYXJCdWZmZXJ1aXYoYnVmZmVyLCBkcmF3YnVmZmVy
LCBtYWtlR0NHTFNwYW4ocmVpbnRlcnByZXRfY2FzdDxjb25zdCBHQ0dMdWludCo+KHZhbHVlcy5k
YXRhKCkpLCB2YWx1ZXMuc2l6ZSgpKSk7CiAgICAgfQogICAgIHZvaWQgY2xlYXJCdWZmZXJmdih1
aW50MzJfdCBidWZmZXIsIGludDMyX3QgZHJhd2J1ZmZlciwgSVBDOjpBcnJheVJlZmVyZW5jZTxm
bG9hdD4mJiB2YWx1ZXMpCiAgICAgewotICAgICAgICBhc3NlcnRJc0N1cnJlbnQobV9zdHJlYW1U
aHJlYWQpOworICAgICAgICBhc3NlcnRJc0N1cnJlbnQod29ya1F1ZXVlKCkpOwogICAgICAgICBt
X2NvbnRleHQtPmNsZWFyQnVmZmVyZnYoYnVmZmVyLCBkcmF3YnVmZmVyLCBtYWtlR0NHTFNwYW4o
cmVpbnRlcnByZXRfY2FzdDxjb25zdCBHQ0dMZmxvYXQqPih2YWx1ZXMuZGF0YSgpKSwgdmFsdWVz
LnNpemUoKSkpOwogICAgIH0KICAgICB2b2lkIGNsZWFyQnVmZmVyZmkodWludDMyX3QgYnVmZmVy
LCBpbnQzMl90IGRyYXdidWZmZXIsIGZsb2F0IGRlcHRoLCBpbnQzMl90IHN0ZW5jaWwpCiAgICAg
ewotICAgICAgICBhc3NlcnRJc0N1cnJlbnQobV9zdHJlYW1UaHJlYWQpOworICAgICAgICBhc3Nl
cnRJc0N1cnJlbnQod29ya1F1ZXVlKCkpOwogICAgICAgICBtX2NvbnRleHQtPmNsZWFyQnVmZmVy
ZmkoYnVmZmVyLCBkcmF3YnVmZmVyLCBkZXB0aCwgc3RlbmNpbCk7CiAgICAgfQogICAgIHZvaWQg
Y3JlYXRlUXVlcnkoQ29tcGxldGlvbkhhbmRsZXI8dm9pZCh1aW50MzJfdCk+JiYgY29tcGxldGlv
bkhhbmRsZXIpCiAgICAgewogICAgICAgICBQbGF0Zm9ybUdMT2JqZWN0IHJldHVyblZhbHVlID0g
eyB9OwotICAgICAgICBhc3NlcnRJc0N1cnJlbnQobV9zdHJlYW1UaHJlYWQpOworICAgICAgICBh
c3NlcnRJc0N1cnJlbnQod29ya1F1ZXVlKCkpOwogICAgICAgICByZXR1cm5WYWx1ZSA9IG1fY29u
dGV4dC0+Y3JlYXRlUXVlcnkoKTsKICAgICAgICAgY29tcGxldGlvbkhhbmRsZXIocmV0dXJuVmFs
dWUpOwogICAgIH0KICAgICB2b2lkIGRlbGV0ZVF1ZXJ5KHVpbnQzMl90IHF1ZXJ5KQogICAgIHsK
LSAgICAgICAgYXNzZXJ0SXNDdXJyZW50KG1fc3RyZWFtVGhyZWFkKTsKKyAgICAgICAgYXNzZXJ0
SXNDdXJyZW50KHdvcmtRdWV1ZSgpKTsKICAgICAgICAgbV9jb250ZXh0LT5kZWxldGVRdWVyeShx
dWVyeSk7CiAgICAgfQogICAgIHZvaWQgaXNRdWVyeSh1aW50MzJfdCBxdWVyeSwgQ29tcGxldGlv
bkhhbmRsZXI8dm9pZChib29sKT4mJiBjb21wbGV0aW9uSGFuZGxlcikKICAgICB7CiAgICAgICAg
IEdDR0xib29sZWFuIHJldHVyblZhbHVlID0geyB9OwotICAgICAgICBhc3NlcnRJc0N1cnJlbnQo
bV9zdHJlYW1UaHJlYWQpOworICAgICAgICBhc3NlcnRJc0N1cnJlbnQod29ya1F1ZXVlKCkpOwog
ICAgICAgICByZXR1cm5WYWx1ZSA9IG1fY29udGV4dC0+aXNRdWVyeShxdWVyeSk7CiAgICAgICAg
IGNvbXBsZXRpb25IYW5kbGVyKHN0YXRpY19jYXN0PGJvb2w+KHJldHVyblZhbHVlKSk7CiAgICAg
fQogICAgIHZvaWQgYmVnaW5RdWVyeSh1aW50MzJfdCB0YXJnZXQsIHVpbnQzMl90IHF1ZXJ5KQog
ICAgIHsKLSAgICAgICAgYXNzZXJ0SXNDdXJyZW50KG1fc3RyZWFtVGhyZWFkKTsKKyAgICAgICAg
YXNzZXJ0SXNDdXJyZW50KHdvcmtRdWV1ZSgpKTsKICAgICAgICAgbV9jb250ZXh0LT5iZWdpblF1
ZXJ5KHRhcmdldCwgcXVlcnkpOwogICAgIH0KICAgICB2b2lkIGVuZFF1ZXJ5KHVpbnQzMl90IHRh
cmdldCkKICAgICB7Ci0gICAgICAgIGFzc2VydElzQ3VycmVudChtX3N0cmVhbVRocmVhZCk7Cisg
ICAgICAgIGFzc2VydElzQ3VycmVudCh3b3JrUXVldWUoKSk7CiAgICAgICAgIG1fY29udGV4dC0+
ZW5kUXVlcnkodGFyZ2V0KTsKICAgICB9CiAgICAgdm9pZCBnZXRRdWVyeSh1aW50MzJfdCB0YXJn
ZXQsIHVpbnQzMl90IHBuYW1lLCBDb21wbGV0aW9uSGFuZGxlcjx2b2lkKHVpbnQzMl90KT4mJiBj
b21wbGV0aW9uSGFuZGxlcikKICAgICB7CiAgICAgICAgIFBsYXRmb3JtR0xPYmplY3QgcmV0dXJu
VmFsdWUgPSB7IH07Ci0gICAgICAgIGFzc2VydElzQ3VycmVudChtX3N0cmVhbVRocmVhZCk7Cisg
ICAgICAgIGFzc2VydElzQ3VycmVudCh3b3JrUXVldWUoKSk7CiAgICAgICAgIHJldHVyblZhbHVl
ID0gbV9jb250ZXh0LT5nZXRRdWVyeSh0YXJnZXQsIHBuYW1lKTsKICAgICAgICAgY29tcGxldGlv
bkhhbmRsZXIocmV0dXJuVmFsdWUpOwogICAgIH0KICAgICB2b2lkIGdldFF1ZXJ5T2JqZWN0dWko
dWludDMyX3QgcXVlcnksIHVpbnQzMl90IHBuYW1lLCBDb21wbGV0aW9uSGFuZGxlcjx2b2lkKHVp
bnQzMl90KT4mJiBjb21wbGV0aW9uSGFuZGxlcikKICAgICB7CiAgICAgICAgIEdDR0x1aW50IHJl
dHVyblZhbHVlID0geyB9OwotICAgICAgICBhc3NlcnRJc0N1cnJlbnQobV9zdHJlYW1UaHJlYWQp
OworICAgICAgICBhc3NlcnRJc0N1cnJlbnQod29ya1F1ZXVlKCkpOwogICAgICAgICByZXR1cm5W
YWx1ZSA9IG1fY29udGV4dC0+Z2V0UXVlcnlPYmplY3R1aShxdWVyeSwgcG5hbWUpOwogICAgICAg
ICBjb21wbGV0aW9uSGFuZGxlcihyZXR1cm5WYWx1ZSk7CiAgICAgfQogICAgIHZvaWQgY3JlYXRl
U2FtcGxlcihDb21wbGV0aW9uSGFuZGxlcjx2b2lkKHVpbnQzMl90KT4mJiBjb21wbGV0aW9uSGFu
ZGxlcikKICAgICB7CiAgICAgICAgIFBsYXRmb3JtR0xPYmplY3QgcmV0dXJuVmFsdWUgPSB7IH07
Ci0gICAgICAgIGFzc2VydElzQ3VycmVudChtX3N0cmVhbVRocmVhZCk7CisgICAgICAgIGFzc2Vy
dElzQ3VycmVudCh3b3JrUXVldWUoKSk7CiAgICAgICAgIHJldHVyblZhbHVlID0gbV9jb250ZXh0
LT5jcmVhdGVTYW1wbGVyKCk7CiAgICAgICAgIGNvbXBsZXRpb25IYW5kbGVyKHJldHVyblZhbHVl
KTsKICAgICB9CiAgICAgdm9pZCBkZWxldGVTYW1wbGVyKHVpbnQzMl90IHNhbXBsZXIpCiAgICAg
ewotICAgICAgICBhc3NlcnRJc0N1cnJlbnQobV9zdHJlYW1UaHJlYWQpOworICAgICAgICBhc3Nl
cnRJc0N1cnJlbnQod29ya1F1ZXVlKCkpOwogICAgICAgICBtX2NvbnRleHQtPmRlbGV0ZVNhbXBs
ZXIoc2FtcGxlcik7CiAgICAgfQogICAgIHZvaWQgaXNTYW1wbGVyKHVpbnQzMl90IHNhbXBsZXIs
IENvbXBsZXRpb25IYW5kbGVyPHZvaWQoYm9vbCk+JiYgY29tcGxldGlvbkhhbmRsZXIpCiAgICAg
ewogICAgICAgICBHQ0dMYm9vbGVhbiByZXR1cm5WYWx1ZSA9IHsgfTsKLSAgICAgICAgYXNzZXJ0
SXNDdXJyZW50KG1fc3RyZWFtVGhyZWFkKTsKKyAgICAgICAgYXNzZXJ0SXNDdXJyZW50KHdvcmtR
dWV1ZSgpKTsKICAgICAgICAgcmV0dXJuVmFsdWUgPSBtX2NvbnRleHQtPmlzU2FtcGxlcihzYW1w
bGVyKTsKICAgICAgICAgY29tcGxldGlvbkhhbmRsZXIoc3RhdGljX2Nhc3Q8Ym9vbD4ocmV0dXJu
VmFsdWUpKTsKICAgICB9CiAgICAgdm9pZCBiaW5kU2FtcGxlcih1aW50MzJfdCB1bml0LCB1aW50
MzJfdCBzYW1wbGVyKQogICAgIHsKLSAgICAgICAgYXNzZXJ0SXNDdXJyZW50KG1fc3RyZWFtVGhy
ZWFkKTsKKyAgICAgICAgYXNzZXJ0SXNDdXJyZW50KHdvcmtRdWV1ZSgpKTsKICAgICAgICAgbV9j
b250ZXh0LT5iaW5kU2FtcGxlcih1bml0LCBzYW1wbGVyKTsKICAgICB9CiAgICAgdm9pZCBzYW1w
bGVyUGFyYW1ldGVyaSh1aW50MzJfdCBzYW1wbGVyLCB1aW50MzJfdCBwbmFtZSwgaW50MzJfdCBw
YXJhbSkKICAgICB7Ci0gICAgICAgIGFzc2VydElzQ3VycmVudChtX3N0cmVhbVRocmVhZCk7Cisg
ICAgICAgIGFzc2VydElzQ3VycmVudCh3b3JrUXVldWUoKSk7CiAgICAgICAgIG1fY29udGV4dC0+
c2FtcGxlclBhcmFtZXRlcmkoc2FtcGxlciwgcG5hbWUsIHBhcmFtKTsKICAgICB9CiAgICAgdm9p
ZCBzYW1wbGVyUGFyYW1ldGVyZih1aW50MzJfdCBzYW1wbGVyLCB1aW50MzJfdCBwbmFtZSwgZmxv
YXQgcGFyYW0pCiAgICAgewotICAgICAgICBhc3NlcnRJc0N1cnJlbnQobV9zdHJlYW1UaHJlYWQp
OworICAgICAgICBhc3NlcnRJc0N1cnJlbnQod29ya1F1ZXVlKCkpOwogICAgICAgICBtX2NvbnRl
eHQtPnNhbXBsZXJQYXJhbWV0ZXJmKHNhbXBsZXIsIHBuYW1lLCBwYXJhbSk7CiAgICAgfQogICAg
IHZvaWQgZ2V0U2FtcGxlclBhcmFtZXRlcmYodWludDMyX3Qgc2FtcGxlciwgdWludDMyX3QgcG5h
bWUsIENvbXBsZXRpb25IYW5kbGVyPHZvaWQoZmxvYXQpPiYmIGNvbXBsZXRpb25IYW5kbGVyKQog
ICAgIHsKICAgICAgICAgR0NHTGZsb2F0IHJldHVyblZhbHVlID0geyB9OwotICAgICAgICBhc3Nl
cnRJc0N1cnJlbnQobV9zdHJlYW1UaHJlYWQpOworICAgICAgICBhc3NlcnRJc0N1cnJlbnQod29y
a1F1ZXVlKCkpOwogICAgICAgICByZXR1cm5WYWx1ZSA9IG1fY29udGV4dC0+Z2V0U2FtcGxlclBh
cmFtZXRlcmYoc2FtcGxlciwgcG5hbWUpOwogICAgICAgICBjb21wbGV0aW9uSGFuZGxlcihyZXR1
cm5WYWx1ZSk7CiAgICAgfQogICAgIHZvaWQgZ2V0U2FtcGxlclBhcmFtZXRlcmkodWludDMyX3Qg
c2FtcGxlciwgdWludDMyX3QgcG5hbWUsIENvbXBsZXRpb25IYW5kbGVyPHZvaWQoaW50MzJfdCk+
JiYgY29tcGxldGlvbkhhbmRsZXIpCiAgICAgewogICAgICAgICBHQ0dMaW50IHJldHVyblZhbHVl
ID0geyB9OwotICAgICAgICBhc3NlcnRJc0N1cnJlbnQobV9zdHJlYW1UaHJlYWQpOworICAgICAg
ICBhc3NlcnRJc0N1cnJlbnQod29ya1F1ZXVlKCkpOwogICAgICAgICByZXR1cm5WYWx1ZSA9IG1f
Y29udGV4dC0+Z2V0U2FtcGxlclBhcmFtZXRlcmkoc2FtcGxlciwgcG5hbWUpOwogICAgICAgICBj
b21wbGV0aW9uSGFuZGxlcihyZXR1cm5WYWx1ZSk7CiAgICAgfQogICAgIHZvaWQgZmVuY2VTeW5j
KHVpbnQzMl90IGNvbmRpdGlvbiwgdWludDMyX3QgZmxhZ3MsIENvbXBsZXRpb25IYW5kbGVyPHZv
aWQodWludDY0X3QpPiYmIGNvbXBsZXRpb25IYW5kbGVyKQogICAgIHsKICAgICAgICAgR0NHTHN5
bmMgcmV0dXJuVmFsdWUgPSB7IH07Ci0gICAgICAgIGFzc2VydElzQ3VycmVudChtX3N0cmVhbVRo
cmVhZCk7CisgICAgICAgIGFzc2VydElzQ3VycmVudCh3b3JrUXVldWUoKSk7CiAgICAgICAgIHJl
dHVyblZhbHVlID0gbV9jb250ZXh0LT5mZW5jZVN5bmMoY29uZGl0aW9uLCBmbGFncyk7CiAgICAg
ICAgIGNvbXBsZXRpb25IYW5kbGVyKHN0YXRpY19jYXN0PHVpbnQ2NF90PihyZWludGVycHJldF9j
YXN0PGludHB0cl90PihyZXR1cm5WYWx1ZSkpKTsKICAgICB9CiAgICAgdm9pZCBpc1N5bmModWlu
dDY0X3QgYXJnMCwgQ29tcGxldGlvbkhhbmRsZXI8dm9pZChib29sKT4mJiBjb21wbGV0aW9uSGFu
ZGxlcikKICAgICB7CiAgICAgICAgIEdDR0xib29sZWFuIHJldHVyblZhbHVlID0geyB9OwotICAg
ICAgICBhc3NlcnRJc0N1cnJlbnQobV9zdHJlYW1UaHJlYWQpOworICAgICAgICBhc3NlcnRJc0N1
cnJlbnQod29ya1F1ZXVlKCkpOwogICAgICAgICByZXR1cm5WYWx1ZSA9IG1fY29udGV4dC0+aXNT
eW5jKHJlaW50ZXJwcmV0X2Nhc3Q8R0NHTHN5bmM+KHN0YXRpY19jYXN0PGludHB0cl90Pihhcmcw
KSkpOwogICAgICAgICBjb21wbGV0aW9uSGFuZGxlcihzdGF0aWNfY2FzdDxib29sPihyZXR1cm5W
YWx1ZSkpOwogICAgIH0KICAgICB2b2lkIGRlbGV0ZVN5bmModWludDY0X3QgYXJnMCkKICAgICB7
Ci0gICAgICAgIGFzc2VydElzQ3VycmVudChtX3N0cmVhbVRocmVhZCk7CisgICAgICAgIGFzc2Vy
dElzQ3VycmVudCh3b3JrUXVldWUoKSk7CiAgICAgICAgIG1fY29udGV4dC0+ZGVsZXRlU3luYyhy
ZWludGVycHJldF9jYXN0PEdDR0xzeW5jPihzdGF0aWNfY2FzdDxpbnRwdHJfdD4oYXJnMCkpKTsK
ICAgICB9CiAgICAgdm9pZCBjbGllbnRXYWl0U3luYyh1aW50NjRfdCBhcmcwLCB1aW50MzJfdCBm
bGFncywgdWludDY0X3QgdGltZW91dCwgQ29tcGxldGlvbkhhbmRsZXI8dm9pZCh1aW50MzJfdCk+
JiYgY29tcGxldGlvbkhhbmRsZXIpCiAgICAgewogICAgICAgICBHQ0dMZW51bSByZXR1cm5WYWx1
ZSA9IHsgfTsKLSAgICAgICAgYXNzZXJ0SXNDdXJyZW50KG1fc3RyZWFtVGhyZWFkKTsKKyAgICAg
ICAgYXNzZXJ0SXNDdXJyZW50KHdvcmtRdWV1ZSgpKTsKICAgICAgICAgcmV0dXJuVmFsdWUgPSBt
X2NvbnRleHQtPmNsaWVudFdhaXRTeW5jKHJlaW50ZXJwcmV0X2Nhc3Q8R0NHTHN5bmM+KHN0YXRp
Y19jYXN0PGludHB0cl90PihhcmcwKSksIGZsYWdzLCBzdGF0aWNfY2FzdDxHQ0dMdWludDY0Pih0
aW1lb3V0KSk7CiAgICAgICAgIGNvbXBsZXRpb25IYW5kbGVyKHJldHVyblZhbHVlKTsKICAgICB9
CiAgICAgdm9pZCB3YWl0U3luYyh1aW50NjRfdCBhcmcwLCB1aW50MzJfdCBmbGFncywgaW50NjRf
dCB0aW1lb3V0KQogICAgIHsKLSAgICAgICAgYXNzZXJ0SXNDdXJyZW50KG1fc3RyZWFtVGhyZWFk
KTsKKyAgICAgICAgYXNzZXJ0SXNDdXJyZW50KHdvcmtRdWV1ZSgpKTsKICAgICAgICAgbV9jb250
ZXh0LT53YWl0U3luYyhyZWludGVycHJldF9jYXN0PEdDR0xzeW5jPihzdGF0aWNfY2FzdDxpbnRw
dHJfdD4oYXJnMCkpLCBmbGFncywgc3RhdGljX2Nhc3Q8R0NHTGludDY0Pih0aW1lb3V0KSk7CiAg
ICAgfQogICAgIHZvaWQgZ2V0U3luY2kodWludDY0X3QgYXJnMCwgdWludDMyX3QgcG5hbWUsIENv
bXBsZXRpb25IYW5kbGVyPHZvaWQoaW50MzJfdCk+JiYgY29tcGxldGlvbkhhbmRsZXIpCiAgICAg
ewogICAgICAgICBHQ0dMaW50IHJldHVyblZhbHVlID0geyB9OwotICAgICAgICBhc3NlcnRJc0N1
cnJlbnQobV9zdHJlYW1UaHJlYWQpOworICAgICAgICBhc3NlcnRJc0N1cnJlbnQod29ya1F1ZXVl
KCkpOwogICAgICAgICByZXR1cm5WYWx1ZSA9IG1fY29udGV4dC0+Z2V0U3luY2kocmVpbnRlcnBy
ZXRfY2FzdDxHQ0dMc3luYz4oc3RhdGljX2Nhc3Q8aW50cHRyX3Q+KGFyZzApKSwgcG5hbWUpOwog
ICAgICAgICBjb21wbGV0aW9uSGFuZGxlcihyZXR1cm5WYWx1ZSk7CiAgICAgfQogICAgIHZvaWQg
Y3JlYXRlVHJhbnNmb3JtRmVlZGJhY2soQ29tcGxldGlvbkhhbmRsZXI8dm9pZCh1aW50MzJfdCk+
JiYgY29tcGxldGlvbkhhbmRsZXIpCiAgICAgewogICAgICAgICBQbGF0Zm9ybUdMT2JqZWN0IHJl
dHVyblZhbHVlID0geyB9OwotICAgICAgICBhc3NlcnRJc0N1cnJlbnQobV9zdHJlYW1UaHJlYWQp
OworICAgICAgICBhc3NlcnRJc0N1cnJlbnQod29ya1F1ZXVlKCkpOwogICAgICAgICByZXR1cm5W
YWx1ZSA9IG1fY29udGV4dC0+Y3JlYXRlVHJhbnNmb3JtRmVlZGJhY2soKTsKICAgICAgICAgY29t
cGxldGlvbkhhbmRsZXIocmV0dXJuVmFsdWUpOwogICAgIH0KICAgICB2b2lkIGRlbGV0ZVRyYW5z
Zm9ybUZlZWRiYWNrKHVpbnQzMl90IGlkKQogICAgIHsKLSAgICAgICAgYXNzZXJ0SXNDdXJyZW50
KG1fc3RyZWFtVGhyZWFkKTsKKyAgICAgICAgYXNzZXJ0SXNDdXJyZW50KHdvcmtRdWV1ZSgpKTsK
ICAgICAgICAgbV9jb250ZXh0LT5kZWxldGVUcmFuc2Zvcm1GZWVkYmFjayhpZCk7CiAgICAgfQog
ICAgIHZvaWQgaXNUcmFuc2Zvcm1GZWVkYmFjayh1aW50MzJfdCBpZCwgQ29tcGxldGlvbkhhbmRs
ZXI8dm9pZChib29sKT4mJiBjb21wbGV0aW9uSGFuZGxlcikKICAgICB7CiAgICAgICAgIEdDR0xi
b29sZWFuIHJldHVyblZhbHVlID0geyB9OwotICAgICAgICBhc3NlcnRJc0N1cnJlbnQobV9zdHJl
YW1UaHJlYWQpOworICAgICAgICBhc3NlcnRJc0N1cnJlbnQod29ya1F1ZXVlKCkpOwogICAgICAg
ICByZXR1cm5WYWx1ZSA9IG1fY29udGV4dC0+aXNUcmFuc2Zvcm1GZWVkYmFjayhpZCk7CiAgICAg
ICAgIGNvbXBsZXRpb25IYW5kbGVyKHN0YXRpY19jYXN0PGJvb2w+KHJldHVyblZhbHVlKSk7CiAg
ICAgfQogICAgIHZvaWQgYmluZFRyYW5zZm9ybUZlZWRiYWNrKHVpbnQzMl90IHRhcmdldCwgdWlu
dDMyX3QgaWQpCiAgICAgewotICAgICAgICBhc3NlcnRJc0N1cnJlbnQobV9zdHJlYW1UaHJlYWQp
OworICAgICAgICBhc3NlcnRJc0N1cnJlbnQod29ya1F1ZXVlKCkpOwogICAgICAgICBtX2NvbnRl
eHQtPmJpbmRUcmFuc2Zvcm1GZWVkYmFjayh0YXJnZXQsIGlkKTsKICAgICB9CiAgICAgdm9pZCBi
ZWdpblRyYW5zZm9ybUZlZWRiYWNrKHVpbnQzMl90IHByaW1pdGl2ZU1vZGUpCiAgICAgewotICAg
ICAgICBhc3NlcnRJc0N1cnJlbnQobV9zdHJlYW1UaHJlYWQpOworICAgICAgICBhc3NlcnRJc0N1
cnJlbnQod29ya1F1ZXVlKCkpOwogICAgICAgICBtX2NvbnRleHQtPmJlZ2luVHJhbnNmb3JtRmVl
ZGJhY2socHJpbWl0aXZlTW9kZSk7CiAgICAgfQogICAgIHZvaWQgZW5kVHJhbnNmb3JtRmVlZGJh
Y2soKQogICAgIHsKLSAgICAgICAgYXNzZXJ0SXNDdXJyZW50KG1fc3RyZWFtVGhyZWFkKTsKKyAg
ICAgICAgYXNzZXJ0SXNDdXJyZW50KHdvcmtRdWV1ZSgpKTsKICAgICAgICAgbV9jb250ZXh0LT5l
bmRUcmFuc2Zvcm1GZWVkYmFjaygpOwogICAgIH0KICAgICB2b2lkIHRyYW5zZm9ybUZlZWRiYWNr
VmFyeWluZ3ModWludDMyX3QgcHJvZ3JhbSwgVmVjdG9yPFN0cmluZz4mJiB2YXJ5aW5ncywgdWlu
dDMyX3QgYnVmZmVyTW9kZSkKICAgICB7Ci0gICAgICAgIGFzc2VydElzQ3VycmVudChtX3N0cmVh
bVRocmVhZCk7CisgICAgICAgIGFzc2VydElzQ3VycmVudCh3b3JrUXVldWUoKSk7CiAgICAgICAg
IG1fY29udGV4dC0+dHJhbnNmb3JtRmVlZGJhY2tWYXJ5aW5ncyhwcm9ncmFtLCB2YXJ5aW5ncywg
YnVmZmVyTW9kZSk7CiAgICAgfQogICAgIHZvaWQgZ2V0VHJhbnNmb3JtRmVlZGJhY2tWYXJ5aW5n
KHVpbnQzMl90IHByb2dyYW0sIHVpbnQzMl90IGluZGV4LCBDb21wbGV0aW9uSGFuZGxlcjx2b2lk
KFdlYkNvcmU6OkdyYXBoaWNzQ29udGV4dEdMOjpBY3RpdmVJbmZvJiYpPiYmIGNvbXBsZXRpb25I
YW5kbGVyKQogICAgIHsKICAgICAgICAgV2ViQ29yZTo6R3JhcGhpY3NDb250ZXh0R0w6OkFjdGl2
ZUluZm8gYXJnMiB7IH07Ci0gICAgICAgIGFzc2VydElzQ3VycmVudChtX3N0cmVhbVRocmVhZCk7
CisgICAgICAgIGFzc2VydElzQ3VycmVudCh3b3JrUXVldWUoKSk7CiAgICAgICAgIG1fY29udGV4
dC0+Z2V0VHJhbnNmb3JtRmVlZGJhY2tWYXJ5aW5nKHByb2dyYW0sIGluZGV4LCBhcmcyKTsKICAg
ICAgICAgY29tcGxldGlvbkhhbmRsZXIoV1RGTW92ZShhcmcyKSk7CiAgICAgfQogICAgIHZvaWQg
cGF1c2VUcmFuc2Zvcm1GZWVkYmFjaygpCiAgICAgewotICAgICAgICBhc3NlcnRJc0N1cnJlbnQo
bV9zdHJlYW1UaHJlYWQpOworICAgICAgICBhc3NlcnRJc0N1cnJlbnQod29ya1F1ZXVlKCkpOwog
ICAgICAgICBtX2NvbnRleHQtPnBhdXNlVHJhbnNmb3JtRmVlZGJhY2soKTsKICAgICB9CiAgICAg
dm9pZCByZXN1bWVUcmFuc2Zvcm1GZWVkYmFjaygpCiAgICAgewotICAgICAgICBhc3NlcnRJc0N1
cnJlbnQobV9zdHJlYW1UaHJlYWQpOworICAgICAgICBhc3NlcnRJc0N1cnJlbnQod29ya1F1ZXVl
KCkpOwogICAgICAgICBtX2NvbnRleHQtPnJlc3VtZVRyYW5zZm9ybUZlZWRiYWNrKCk7CiAgICAg
fQogICAgIHZvaWQgYmluZEJ1ZmZlckJhc2UodWludDMyX3QgdGFyZ2V0LCB1aW50MzJfdCBpbmRl
eCwgdWludDMyX3QgYnVmZmVyKQogICAgIHsKLSAgICAgICAgYXNzZXJ0SXNDdXJyZW50KG1fc3Ry
ZWFtVGhyZWFkKTsKKyAgICAgICAgYXNzZXJ0SXNDdXJyZW50KHdvcmtRdWV1ZSgpKTsKICAgICAg
ICAgbV9jb250ZXh0LT5iaW5kQnVmZmVyQmFzZSh0YXJnZXQsIGluZGV4LCBidWZmZXIpOwogICAg
IH0KICAgICB2b2lkIGJpbmRCdWZmZXJSYW5nZSh1aW50MzJfdCB0YXJnZXQsIHVpbnQzMl90IGlu
ZGV4LCB1aW50MzJfdCBidWZmZXIsIHVpbnQ2NF90IG9mZnNldCwgdWludDY0X3QgYXJnNCkKICAg
ICB7Ci0gICAgICAgIGFzc2VydElzQ3VycmVudChtX3N0cmVhbVRocmVhZCk7CisgICAgICAgIGFz
c2VydElzQ3VycmVudCh3b3JrUXVldWUoKSk7CiAgICAgICAgIG1fY29udGV4dC0+YmluZEJ1ZmZl
clJhbmdlKHRhcmdldCwgaW5kZXgsIGJ1ZmZlciwgc3RhdGljX2Nhc3Q8R0NHTGludHB0cj4ob2Zm
c2V0KSwgc3RhdGljX2Nhc3Q8R0NHTHNpemVpcHRyPihhcmc0KSk7CiAgICAgfQogICAgIHZvaWQg
Z2V0VW5pZm9ybUluZGljZXModWludDMyX3QgcHJvZ3JhbSwgVmVjdG9yPFN0cmluZz4mJiB1bmlm
b3JtTmFtZXMsIENvbXBsZXRpb25IYW5kbGVyPHZvaWQoVmVjdG9yPHVpbnQzMl90PiYmKT4mJiBj
b21wbGV0aW9uSGFuZGxlcikKICAgICB7CiAgICAgICAgIFZlY3RvcjxHQ0dMdWludD4gcmV0dXJu
VmFsdWUgPSB7IH07Ci0gICAgICAgIGFzc2VydElzQ3VycmVudChtX3N0cmVhbVRocmVhZCk7Cisg
ICAgICAgIGFzc2VydElzQ3VycmVudCh3b3JrUXVldWUoKSk7CiAgICAgICAgIHJldHVyblZhbHVl
ID0gbV9jb250ZXh0LT5nZXRVbmlmb3JtSW5kaWNlcyhwcm9ncmFtLCB1bmlmb3JtTmFtZXMpOwog
ICAgICAgICBjb21wbGV0aW9uSGFuZGxlcihXVEZNb3ZlKHJldHVyblZhbHVlKSk7CiAgICAgfQog
ICAgIHZvaWQgZ2V0QWN0aXZlVW5pZm9ybXModWludDMyX3QgcHJvZ3JhbSwgVmVjdG9yPHVpbnQz
Ml90PiYmIHVuaWZvcm1JbmRpY2VzLCB1aW50MzJfdCBwbmFtZSwgQ29tcGxldGlvbkhhbmRsZXI8
dm9pZChWZWN0b3I8aW50MzJfdD4mJik+JiYgY29tcGxldGlvbkhhbmRsZXIpCiAgICAgewogICAg
ICAgICBWZWN0b3I8R0NHTGludD4gcmV0dXJuVmFsdWUgPSB7IH07Ci0gICAgICAgIGFzc2VydElz
Q3VycmVudChtX3N0cmVhbVRocmVhZCk7CisgICAgICAgIGFzc2VydElzQ3VycmVudCh3b3JrUXVl
dWUoKSk7CiAgICAgICAgIHJldHVyblZhbHVlID0gbV9jb250ZXh0LT5nZXRBY3RpdmVVbmlmb3Jt
cyhwcm9ncmFtLCB1bmlmb3JtSW5kaWNlcywgcG5hbWUpOwogICAgICAgICBjb21wbGV0aW9uSGFu
ZGxlcihXVEZNb3ZlKHJldHVyblZhbHVlKSk7CiAgICAgfQogICAgIHZvaWQgZ2V0VW5pZm9ybUJs
b2NrSW5kZXgodWludDMyX3QgcHJvZ3JhbSwgU3RyaW5nJiYgdW5pZm9ybUJsb2NrTmFtZSwgQ29t
cGxldGlvbkhhbmRsZXI8dm9pZCh1aW50MzJfdCk+JiYgY29tcGxldGlvbkhhbmRsZXIpCiAgICAg
ewogICAgICAgICBHQ0dMdWludCByZXR1cm5WYWx1ZSA9IHsgfTsKLSAgICAgICAgYXNzZXJ0SXND
dXJyZW50KG1fc3RyZWFtVGhyZWFkKTsKKyAgICAgICAgYXNzZXJ0SXNDdXJyZW50KHdvcmtRdWV1
ZSgpKTsKICAgICAgICAgcmV0dXJuVmFsdWUgPSBtX2NvbnRleHQtPmdldFVuaWZvcm1CbG9ja0lu
ZGV4KHByb2dyYW0sIHVuaWZvcm1CbG9ja05hbWUpOwogICAgICAgICBjb21wbGV0aW9uSGFuZGxl
cihyZXR1cm5WYWx1ZSk7CiAgICAgfQogICAgIHZvaWQgZ2V0QWN0aXZlVW5pZm9ybUJsb2NrTmFt
ZSh1aW50MzJfdCBwcm9ncmFtLCB1aW50MzJfdCB1bmlmb3JtQmxvY2tJbmRleCwgQ29tcGxldGlv
bkhhbmRsZXI8dm9pZChTdHJpbmcmJik+JiYgY29tcGxldGlvbkhhbmRsZXIpCiAgICAgewogICAg
ICAgICBTdHJpbmcgcmV0dXJuVmFsdWUgPSB7IH07Ci0gICAgICAgIGFzc2VydElzQ3VycmVudCht
X3N0cmVhbVRocmVhZCk7CisgICAgICAgIGFzc2VydElzQ3VycmVudCh3b3JrUXVldWUoKSk7CiAg
ICAgICAgIHJldHVyblZhbHVlID0gbV9jb250ZXh0LT5nZXRBY3RpdmVVbmlmb3JtQmxvY2tOYW1l
KHByb2dyYW0sIHVuaWZvcm1CbG9ja0luZGV4KTsKICAgICAgICAgY29tcGxldGlvbkhhbmRsZXIo
V1RGTW92ZShyZXR1cm5WYWx1ZSkpOwogICAgIH0KICAgICB2b2lkIHVuaWZvcm1CbG9ja0JpbmRp
bmcodWludDMyX3QgcHJvZ3JhbSwgdWludDMyX3QgdW5pZm9ybUJsb2NrSW5kZXgsIHVpbnQzMl90
IHVuaWZvcm1CbG9ja0JpbmRpbmcpCiAgICAgewotICAgICAgICBhc3NlcnRJc0N1cnJlbnQobV9z
dHJlYW1UaHJlYWQpOworICAgICAgICBhc3NlcnRJc0N1cnJlbnQod29ya1F1ZXVlKCkpOwogICAg
ICAgICBtX2NvbnRleHQtPnVuaWZvcm1CbG9ja0JpbmRpbmcocHJvZ3JhbSwgdW5pZm9ybUJsb2Nr
SW5kZXgsIHVuaWZvcm1CbG9ja0JpbmRpbmcpOwogICAgIH0KICAgICB2b2lkIGdldEFjdGl2ZVVu
aWZvcm1CbG9ja2l2KHVpbnQzMl90IHByb2dyYW0sIHVpbnQzMl90IHVuaWZvcm1CbG9ja0luZGV4
LCB1aW50MzJfdCBwbmFtZSwgdWludDY0X3QgcGFyYW1zU2l6ZSwgQ29tcGxldGlvbkhhbmRsZXI8
dm9pZChJUEM6OkFycmF5UmVmZXJlbmNlPGludDMyX3Q+KT4mJiBjb21wbGV0aW9uSGFuZGxlcikK
ICAgICB7CiAgICAgICAgIFZlY3RvcjxHQ0dMaW50LCA0PiBwYXJhbXMoc3RhdGljX2Nhc3Q8c2l6
ZV90PihwYXJhbXNTaXplKSwgMCk7Ci0gICAgICAgIGFzc2VydElzQ3VycmVudChtX3N0cmVhbVRo
cmVhZCk7CisgICAgICAgIGFzc2VydElzQ3VycmVudCh3b3JrUXVldWUoKSk7CiAgICAgICAgIG1f
Y29udGV4dC0+Z2V0QWN0aXZlVW5pZm9ybUJsb2NraXYocHJvZ3JhbSwgdW5pZm9ybUJsb2NrSW5k
ZXgsIHBuYW1lLCBwYXJhbXMpOwogICAgICAgICBjb21wbGV0aW9uSGFuZGxlcihJUEM6OkFycmF5
UmVmZXJlbmNlPGludDMyX3Q+KHJlaW50ZXJwcmV0X2Nhc3Q8aW50MzJfdCo+KHBhcmFtcy5kYXRh
KCkpLCBwYXJhbXMuc2l6ZSgpKSk7CiAgICAgfQogICAgIHZvaWQgZ2V0R3JhcGhpY3NSZXNldFN0
YXR1c0FSQihDb21wbGV0aW9uSGFuZGxlcjx2b2lkKGludDMyX3QpPiYmIGNvbXBsZXRpb25IYW5k
bGVyKQogICAgIHsKICAgICAgICAgR0NHTGludCByZXR1cm5WYWx1ZSA9IHsgfTsKLSAgICAgICAg
YXNzZXJ0SXNDdXJyZW50KG1fc3RyZWFtVGhyZWFkKTsKKyAgICAgICAgYXNzZXJ0SXNDdXJyZW50
KHdvcmtRdWV1ZSgpKTsKICAgICAgICAgcmV0dXJuVmFsdWUgPSBtX2NvbnRleHQtPmdldEdyYXBo
aWNzUmVzZXRTdGF0dXNBUkIoKTsKICAgICAgICAgY29tcGxldGlvbkhhbmRsZXIocmV0dXJuVmFs
dWUpOwogICAgIH0KICAgICB2b2lkIGdldFRyYW5zbGF0ZWRTaGFkZXJTb3VyY2VBTkdMRSh1aW50
MzJfdCBhcmcwLCBDb21wbGV0aW9uSGFuZGxlcjx2b2lkKFN0cmluZyYmKT4mJiBjb21wbGV0aW9u
SGFuZGxlcikKICAgICB7CiAgICAgICAgIFN0cmluZyByZXR1cm5WYWx1ZSA9IHsgfTsKLSAgICAg
ICAgYXNzZXJ0SXNDdXJyZW50KG1fc3RyZWFtVGhyZWFkKTsKKyAgICAgICAgYXNzZXJ0SXNDdXJy
ZW50KHdvcmtRdWV1ZSgpKTsKICAgICAgICAgcmV0dXJuVmFsdWUgPSBtX2NvbnRleHQtPmdldFRy
YW5zbGF0ZWRTaGFkZXJTb3VyY2VBTkdMRShhcmcwKTsKICAgICAgICAgY29tcGxldGlvbkhhbmRs
ZXIoV1RGTW92ZShyZXR1cm5WYWx1ZSkpOwogICAgIH0KICAgICB2b2lkIGRyYXdCdWZmZXJzRVhU
KElQQzo6QXJyYXlSZWZlcmVuY2U8dWludDMyX3Q+JiYgYnVmcykKICAgICB7Ci0gICAgICAgIGFz
c2VydElzQ3VycmVudChtX3N0cmVhbVRocmVhZCk7CisgICAgICAgIGFzc2VydElzQ3VycmVudCh3
b3JrUXVldWUoKSk7CiAgICAgICAgIG1fY29udGV4dC0+ZHJhd0J1ZmZlcnNFWFQobWFrZUdDR0xT
cGFuKHJlaW50ZXJwcmV0X2Nhc3Q8Y29uc3QgR0NHTGVudW0qPihidWZzLmRhdGEoKSksIGJ1ZnMu
c2l6ZSgpKSk7CiAgICAgfQogICAgIHZvaWQgZ2V0SW50ZXJuYWxmb3JtYXRpdih1aW50MzJfdCB0
YXJnZXQsIHVpbnQzMl90IGludGVybmFsZm9ybWF0LCB1aW50MzJfdCBwbmFtZSwgdWludDY0X3Qg
cGFyYW1zU2l6ZSwgQ29tcGxldGlvbkhhbmRsZXI8dm9pZChJUEM6OkFycmF5UmVmZXJlbmNlPGlu
dDMyX3Q+KT4mJiBjb21wbGV0aW9uSGFuZGxlcikKICAgICB7CiAgICAgICAgIFZlY3RvcjxHQ0dM
aW50LCA0PiBwYXJhbXMoc3RhdGljX2Nhc3Q8c2l6ZV90PihwYXJhbXNTaXplKSwgMCk7Ci0gICAg
ICAgIGFzc2VydElzQ3VycmVudChtX3N0cmVhbVRocmVhZCk7CisgICAgICAgIGFzc2VydElzQ3Vy
cmVudCh3b3JrUXVldWUoKSk7CiAgICAgICAgIG1fY29udGV4dC0+Z2V0SW50ZXJuYWxmb3JtYXRp
dih0YXJnZXQsIGludGVybmFsZm9ybWF0LCBwbmFtZSwgcGFyYW1zKTsKICAgICAgICAgY29tcGxl
dGlvbkhhbmRsZXIoSVBDOjpBcnJheVJlZmVyZW5jZTxpbnQzMl90PihyZWludGVycHJldF9jYXN0
PGludDMyX3QqPihwYXJhbXMuZGF0YSgpKSwgcGFyYW1zLnNpemUoKSkpOwogICAgIH0KICAgICB2
b2lkIG11bHRpRHJhd0FycmF5c0FOR0xFKHVpbnQzMl90IG1vZGUsIElQQzo6QXJyYXlSZWZlcmVu
Y2U8aW50MzJfdD4mJiBmaXJzdHMsIElQQzo6QXJyYXlSZWZlcmVuY2U8aW50MzJfdD4mJiBjb3Vu
dHMsIGludDMyX3QgZHJhd2NvdW50KQogICAgIHsKLSAgICAgICAgYXNzZXJ0SXNDdXJyZW50KG1f
c3RyZWFtVGhyZWFkKTsKKyAgICAgICAgYXNzZXJ0SXNDdXJyZW50KHdvcmtRdWV1ZSgpKTsKICAg
ICAgICAgbV9jb250ZXh0LT5tdWx0aURyYXdBcnJheXNBTkdMRShtb2RlLCBtYWtlR0NHTFNwYW4o
cmVpbnRlcnByZXRfY2FzdDxjb25zdCBHQ0dMaW50Kj4oZmlyc3RzLmRhdGEoKSksIGZpcnN0cy5z
aXplKCkpLCBtYWtlR0NHTFNwYW4ocmVpbnRlcnByZXRfY2FzdDxjb25zdCBHQ0dMc2l6ZWkqPihj
b3VudHMuZGF0YSgpKSwgY291bnRzLnNpemUoKSksIGRyYXdjb3VudCk7CiAgICAgfQogICAgIHZv
aWQgbXVsdGlEcmF3QXJyYXlzSW5zdGFuY2VkQU5HTEUodWludDMyX3QgbW9kZSwgSVBDOjpBcnJh
eVJlZmVyZW5jZTxpbnQzMl90PiYmIGZpcnN0cywgSVBDOjpBcnJheVJlZmVyZW5jZTxpbnQzMl90
PiYmIGNvdW50cywgSVBDOjpBcnJheVJlZmVyZW5jZTxpbnQzMl90PiYmIGluc3RhbmNlQ291bnRz
LCBpbnQzMl90IGRyYXdjb3VudCkKICAgICB7Ci0gICAgICAgIGFzc2VydElzQ3VycmVudChtX3N0
cmVhbVRocmVhZCk7CisgICAgICAgIGFzc2VydElzQ3VycmVudCh3b3JrUXVldWUoKSk7CiAgICAg
ICAgIG1fY29udGV4dC0+bXVsdGlEcmF3QXJyYXlzSW5zdGFuY2VkQU5HTEUobW9kZSwgbWFrZUdD
R0xTcGFuKHJlaW50ZXJwcmV0X2Nhc3Q8Y29uc3QgR0NHTGludCo+KGZpcnN0cy5kYXRhKCkpLCBm
aXJzdHMuc2l6ZSgpKSwgbWFrZUdDR0xTcGFuKHJlaW50ZXJwcmV0X2Nhc3Q8Y29uc3QgR0NHTHNp
emVpKj4oY291bnRzLmRhdGEoKSksIGNvdW50cy5zaXplKCkpLCBtYWtlR0NHTFNwYW4ocmVpbnRl
cnByZXRfY2FzdDxjb25zdCBHQ0dMc2l6ZWkqPihpbnN0YW5jZUNvdW50cy5kYXRhKCkpLCBpbnN0
YW5jZUNvdW50cy5zaXplKCkpLCBkcmF3Y291bnQpOwogICAgIH0KICAgICB2b2lkIG11bHRpRHJh
d0VsZW1lbnRzQU5HTEUodWludDMyX3QgbW9kZSwgSVBDOjpBcnJheVJlZmVyZW5jZTxpbnQzMl90
PiYmIGNvdW50cywgdWludDMyX3QgdHlwZSwgSVBDOjpBcnJheVJlZmVyZW5jZTxpbnQzMl90PiYm
IG9mZnNldHMsIGludDMyX3QgZHJhd2NvdW50KQogICAgIHsKLSAgICAgICAgYXNzZXJ0SXNDdXJy
ZW50KG1fc3RyZWFtVGhyZWFkKTsKKyAgICAgICAgYXNzZXJ0SXNDdXJyZW50KHdvcmtRdWV1ZSgp
KTsKICAgICAgICAgbV9jb250ZXh0LT5tdWx0aURyYXdFbGVtZW50c0FOR0xFKG1vZGUsIG1ha2VH
Q0dMU3BhbihyZWludGVycHJldF9jYXN0PGNvbnN0IEdDR0xzaXplaSo+KGNvdW50cy5kYXRhKCkp
LCBjb3VudHMuc2l6ZSgpKSwgdHlwZSwgbWFrZUdDR0xTcGFuKHJlaW50ZXJwcmV0X2Nhc3Q8Y29u
c3QgR0NHTGludCo+KG9mZnNldHMuZGF0YSgpKSwgb2Zmc2V0cy5zaXplKCkpLCBkcmF3Y291bnQp
OwogICAgIH0KICAgICB2b2lkIG11bHRpRHJhd0VsZW1lbnRzSW5zdGFuY2VkQU5HTEUodWludDMy
X3QgbW9kZSwgSVBDOjpBcnJheVJlZmVyZW5jZTxpbnQzMl90PiYmIGNvdW50cywgdWludDMyX3Qg
dHlwZSwgSVBDOjpBcnJheVJlZmVyZW5jZTxpbnQzMl90PiYmIG9mZnNldHMsIElQQzo6QXJyYXlS
ZWZlcmVuY2U8aW50MzJfdD4mJiBpbnN0YW5jZUNvdW50cywgaW50MzJfdCBkcmF3Y291bnQpCiAg
ICAgewotICAgICAgICBhc3NlcnRJc0N1cnJlbnQobV9zdHJlYW1UaHJlYWQpOworICAgICAgICBh
c3NlcnRJc0N1cnJlbnQod29ya1F1ZXVlKCkpOwogICAgICAgICBtX2NvbnRleHQtPm11bHRpRHJh
d0VsZW1lbnRzSW5zdGFuY2VkQU5HTEUobW9kZSwgbWFrZUdDR0xTcGFuKHJlaW50ZXJwcmV0X2Nh
c3Q8Y29uc3QgR0NHTHNpemVpKj4oY291bnRzLmRhdGEoKSksIGNvdW50cy5zaXplKCkpLCB0eXBl
LCBtYWtlR0NHTFNwYW4ocmVpbnRlcnByZXRfY2FzdDxjb25zdCBHQ0dMaW50Kj4ob2Zmc2V0cy5k
YXRhKCkpLCBvZmZzZXRzLnNpemUoKSksIG1ha2VHQ0dMU3BhbihyZWludGVycHJldF9jYXN0PGNv
bnN0IEdDR0xzaXplaSo+KGluc3RhbmNlQ291bnRzLmRhdGEoKSksIGluc3RhbmNlQ291bnRzLnNp
emUoKSksIGRyYXdjb3VudCk7CiAgICAgfQogICAgIHZvaWQgcGFpbnRSZW5kZXJpbmdSZXN1bHRz
VG9QaXhlbEJ1ZmZlcihDb21wbGV0aW9uSGFuZGxlcjx2b2lkKHN0ZDo6b3B0aW9uYWw8V2ViQ29y
ZTo6UGl4ZWxCdWZmZXI+JiYpPiYmIGNvbXBsZXRpb25IYW5kbGVyKQogICAgIHsKICAgICAgICAg
c3RkOjpvcHRpb25hbDxXZWJDb3JlOjpQaXhlbEJ1ZmZlcj4gcmV0dXJuVmFsdWUgPSB7IH07Ci0g
ICAgICAgIGFzc2VydElzQ3VycmVudChtX3N0cmVhbVRocmVhZCk7CisgICAgICAgIGFzc2VydElz
Q3VycmVudCh3b3JrUXVldWUoKSk7CiAgICAgICAgIHJldHVyblZhbHVlID0gbV9jb250ZXh0LT5w
YWludFJlbmRlcmluZ1Jlc3VsdHNUb1BpeGVsQnVmZmVyKCk7CiAgICAgICAgIGNvbXBsZXRpb25I
YW5kbGVyKFdURk1vdmUocmV0dXJuVmFsdWUpKTsKICAgICB9CmRpZmYgLS1naXQgYS9Tb3VyY2Uv
V2ViS2l0L0dQVVByb2Nlc3MvZ3JhcGhpY3MvV2ViR1BVL1JlbW90ZUdQVS5jcHAgYi9Tb3VyY2Uv
V2ViS2l0L0dQVVByb2Nlc3MvZ3JhcGhpY3MvV2ViR1BVL1JlbW90ZUdQVS5jcHAKaW5kZXggNGRj
YWU4ZDA5ZThhODllNTNjM2M3YzZkYjk0Mjk4N2Q2MDBkZTM3OS4uMmM5YTBmOTU1ZDk4MDg5YTc3
NWZlZDI4YTBmM2RhYWRkODNkYjRiZiAxMDA2NDQKLS0tIGEvU291cmNlL1dlYktpdC9HUFVQcm9j
ZXNzL2dyYXBoaWNzL1dlYkdQVS9SZW1vdGVHUFUuY3BwCisrKyBiL1NvdXJjZS9XZWJLaXQvR1BV
UHJvY2Vzcy9ncmFwaGljcy9XZWJHUFUvUmVtb3RlR1BVLmNwcApAQCAtNDcsNyArNDcsNyBAQCBu
YW1lc3BhY2UgV2ViS2l0IHsKIFJlbW90ZUdQVTo6UmVtb3RlR1BVKFdlYkdQVUlkZW50aWZpZXIg
aWRlbnRpZmllciwgR1BVQ29ubmVjdGlvblRvV2ViUHJvY2VzcyYgZ3B1Q29ubmVjdGlvblRvV2Vi
UHJvY2VzcywgUmVtb3RlUmVuZGVyaW5nQmFja2VuZCYgcmVuZGVyaW5nQmFja2VuZCwgSVBDOjpT
dHJlYW1Db25uZWN0aW9uQnVmZmVyJiYgc3RyZWFtKQogICAgIDogbV9ncHVDb25uZWN0aW9uVG9X
ZWJQcm9jZXNzKGdwdUNvbm5lY3Rpb25Ub1dlYlByb2Nlc3MpCiAgICAgLCBtX3dvcmtRdWV1ZShJ
UEM6OlN0cmVhbUNvbm5lY3Rpb25Xb3JrUXVldWU6OmNyZWF0ZSgiV2ViR1BVIHdvcmsgcXVldWUi
KSkKLSAgICAsIG1fc3RyZWFtQ29ubmVjdGlvbihJUEM6OlN0cmVhbVNlcnZlckNvbm5lY3Rpb246
OmNyZWF0ZShncHVDb25uZWN0aW9uVG9XZWJQcm9jZXNzLmNvbm5lY3Rpb24oKSwgV1RGTW92ZShz
dHJlYW0pLCBtX3dvcmtRdWV1ZSkpCisgICAgLCBtX3N0cmVhbUNvbm5lY3Rpb24oSVBDOjpTdHJl
YW1TZXJ2ZXJDb25uZWN0aW9uOjpjcmVhdGUoZ3B1Q29ubmVjdGlvblRvV2ViUHJvY2Vzcy5jb25u
ZWN0aW9uKCksIFdURk1vdmUoc3RyZWFtKSwgd29ya1F1ZXVlKCkpKQogICAgICwgbV9vYmplY3RI
ZWFwKFdlYkdQVTo6T2JqZWN0SGVhcDo6Y3JlYXRlKCkpCiAgICAgLCBtX2lkZW50aWZpZXIoaWRl
bnRpZmllcikKICAgICAsIG1fcmVuZGVyaW5nQmFja2VuZChyZW5kZXJpbmdCYWNrZW5kKQpAQCAt
NjAsNyArNjAsNyBAQCBSZW1vdGVHUFU6On5SZW1vdGVHUFUoKSA9IGRlZmF1bHQ7CiB2b2lkIFJl
bW90ZUdQVTo6aW5pdGlhbGl6ZSgpCiB7CiAgICAgYXNzZXJ0SXNNYWluUnVuTG9vcCgpOwotICAg
IG1fd29ya1F1ZXVlLT5kaXNwYXRjaChbcHJvdGVjdGVkVGhpcyA9IFJlZiB7ICp0aGlzIH1dKCkg
bXV0YWJsZSB7CisgICAgd29ya1F1ZXVlKCkuZGlzcGF0Y2goW3Byb3RlY3RlZFRoaXMgPSBSZWYg
eyAqdGhpcyB9XSgpIG11dGFibGUgewogICAgICAgICBwcm90ZWN0ZWRUaGlzLT53b3JrUXVldWVJ
bml0aWFsaXplKCk7CiAgICAgfSk7CiAgICAgbV9zdHJlYW1Db25uZWN0aW9uLT5zdGFydFJlY2Vp
dmluZ01lc3NhZ2VzKCp0aGlzLCBNZXNzYWdlczo6UmVtb3RlR1BVOjptZXNzYWdlUmVjZWl2ZXJO
YW1lKCksIG1faWRlbnRpZmllci50b1VJbnQ2NCgpKTsKQEAgLTcwLDE1ICs3MCwxNCBAQCB2b2lk
IFJlbW90ZUdQVTo6c3RvcExpc3RlbmluZ0ZvcklQQyhSZWY8UmVtb3RlR1BVPiYmIHJlZkZyb21D
b25uZWN0aW9uKQogewogICAgIGFzc2VydElzTWFpblJ1bkxvb3AoKTsKICAgICBtX3N0cmVhbUNv
bm5lY3Rpb24tPnN0b3BSZWNlaXZpbmdNZXNzYWdlcyhNZXNzYWdlczo6UmVtb3RlR1BVOjptZXNz
YWdlUmVjZWl2ZXJOYW1lKCksIG1faWRlbnRpZmllci50b1VJbnQ2NCgpKTsKLSAgICBtX3dvcmtR
dWV1ZS0+ZGlzcGF0Y2goW3Byb3RlY3RlZFRoaXMgPSBXVEZNb3ZlKHJlZkZyb21Db25uZWN0aW9u
KV0oKSB7CisgICAgd29ya1F1ZXVlKCkuZGlzcGF0Y2goW3Byb3RlY3RlZFRoaXMgPSBXVEZNb3Zl
KHJlZkZyb21Db25uZWN0aW9uKV0oKSB7CiAgICAgICAgIHByb3RlY3RlZFRoaXMtPndvcmtRdWV1
ZVVuaW5pdGlhbGl6ZSgpOwogICAgIH0pOwogfQogCiB2b2lkIFJlbW90ZUdQVTo6d29ya1F1ZXVl
SW5pdGlhbGl6ZSgpCiB7Ci0gICAgbV9zdHJlYW1UaHJlYWQucmVzZXQoKTsKLSAgICBhc3NlcnRJ
c0N1cnJlbnQobV9zdHJlYW1UaHJlYWQpOworICAgIGFzc2VydElzQ3VycmVudCh3b3JrUXVldWUo
KSk7CiAjaWYgSEFWRShXRUJHUFVfSU1QTEVNRU5UQVRJT04pCiAgICAgYXV0byBiYWNraW5nID0g
UEFMOjpXZWJHUFU6OkdQVUltcGw6OmNyZWF0ZSgpOwogI2Vsc2UKQEAgLTg2LDIxICs4NSwyMSBA
QCB2b2lkIFJlbW90ZUdQVTo6d29ya1F1ZXVlSW5pdGlhbGl6ZSgpCiAjZW5kaWYKICAgICBpZiAo
YmFja2luZykgewogICAgICAgICBtX2JhY2tpbmcgPSBiYWNraW5nLnJlbGVhc2VOb25OdWxsKCk7
Ci0gICAgICAgIHNlbmQoTWVzc2FnZXM6OlJlbW90ZUdQVVByb3h5OjpXYXNDcmVhdGVkKHRydWUs
IG1fd29ya1F1ZXVlLT53YWtlVXBTZW1hcGhvcmUoKSkpOworICAgICAgICBzZW5kKE1lc3NhZ2Vz
OjpSZW1vdGVHUFVQcm94eTo6V2FzQ3JlYXRlZCh0cnVlLCB3b3JrUXVldWUoKS53YWtlVXBTZW1h
cGhvcmUoKSkpOwogICAgIH0gZWxzZQotICAgICAgICBzZW5kKE1lc3NhZ2VzOjpSZW1vdGVHUFVQ
cm94eTo6V2FzQ3JlYXRlZChmYWxzZSwgbV93b3JrUXVldWUtPndha2VVcFNlbWFwaG9yZSgpKSk7
CisgICAgICAgIHNlbmQoTWVzc2FnZXM6OlJlbW90ZUdQVVByb3h5OjpXYXNDcmVhdGVkKGZhbHNl
LCB3b3JrUXVldWUoKS53YWtlVXBTZW1hcGhvcmUoKSkpOwogfQogCiB2b2lkIFJlbW90ZUdQVTo6
d29ya1F1ZXVlVW5pbml0aWFsaXplKCkKIHsKLSAgICBhc3NlcnRJc0N1cnJlbnQobV9zdHJlYW1U
aHJlYWQpOworICAgIGFzc2VydElzQ3VycmVudCh3b3JrUXVldWUoKSk7CiAgICAgbV9zdHJlYW1D
b25uZWN0aW9uID0gbnVsbHB0cjsKICAgICBtX29iamVjdEhlYXAtPmNsZWFyKCk7CiB9CiAKIHZv
aWQgUmVtb3RlR1BVOjpyZXF1ZXN0QWRhcHRlcihjb25zdCBXZWJHUFU6OlJlcXVlc3RBZGFwdGVy
T3B0aW9ucyYgb3B0aW9ucywgV2ViR1BVSWRlbnRpZmllciBpZGVudGlmaWVyLCBXVEY6OkNvbXBs
ZXRpb25IYW5kbGVyPHZvaWQoc3RkOjpvcHRpb25hbDxSZXF1ZXN0QWRhcHRlclJlc3BvbnNlPiYm
KT4mJiBjYWxsYmFjaykKIHsKLSAgICBhc3NlcnRJc0N1cnJlbnQobV9zdHJlYW1UaHJlYWQpOwor
ICAgIGFzc2VydElzQ3VycmVudCh3b3JrUXVldWUoKSk7CiAgICAgQVNTRVJUKG1fYmFja2luZyk7
CiAKICAgICBhdXRvIGNvbnZlcnRlZE9wdGlvbnMgPSBtX29iamVjdEhlYXAtPmNvbnZlcnRGcm9t
QmFja2luZyhvcHRpb25zKTsKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJLaXQvR1BVUHJvY2Vzcy9n
cmFwaGljcy9XZWJHUFUvUmVtb3RlR1BVLmggYi9Tb3VyY2UvV2ViS2l0L0dQVVByb2Nlc3MvZ3Jh
cGhpY3MvV2ViR1BVL1JlbW90ZUdQVS5oCmluZGV4IGMwMjEyZjAxNTBjNDQ1NTIzNTJjZTBhM2M0
Y2Y2ZmJkZDAyYTRiYTEuLmExNTE0ODM1MjllMmM0Y2QzZTk4YmQyZmMyNmQ1NmM5OGE0Y2Q5MGQg
MTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJLaXQvR1BVUHJvY2Vzcy9ncmFwaGljcy9XZWJHUFUvUmVt
b3RlR1BVLmgKKysrIGIvU291cmNlL1dlYktpdC9HUFVQcm9jZXNzL2dyYXBoaWNzL1dlYkdQVS9S
ZW1vdGVHUFUuaApAQCAtMTIyLDYgKzEyMiw3IEBAIHByaXZhdGU6CiAgICAgUmVtb3RlR1BVJiBv
cGVyYXRvcj0oUmVtb3RlR1BVJiYpID0gZGVsZXRlOwogCiAgICAgdm9pZCBpbml0aWFsaXplKCk7
CisgICAgSVBDOjpTdHJlYW1Db25uZWN0aW9uV29ya1F1ZXVlJiB3b3JrUXVldWUoKSBjb25zdCB7
IHJldHVybiBtX3dvcmtRdWV1ZTsgfQogICAgIHZvaWQgd29ya1F1ZXVlSW5pdGlhbGl6ZSgpOwog
ICAgIHZvaWQgd29ya1F1ZXVlVW5pbml0aWFsaXplKCk7CiAKQEAgLTEzOCwxMSArMTM5LDEwIEBA
IHByaXZhdGU6CiAgICAgV2Vha1B0cjxHUFVDb25uZWN0aW9uVG9XZWJQcm9jZXNzPiBtX2dwdUNv
bm5lY3Rpb25Ub1dlYlByb2Nlc3M7CiAgICAgUmVmPElQQzo6U3RyZWFtQ29ubmVjdGlvbldvcmtR
dWV1ZT4gbV93b3JrUXVldWU7CiAgICAgUmVmUHRyPElQQzo6U3RyZWFtU2VydmVyQ29ubmVjdGlv
bj4gbV9zdHJlYW1Db25uZWN0aW9uOwotICAgIFJlZlB0cjxQQUw6OldlYkdQVTo6R1BVPiBtX2Jh
Y2tpbmcgV1RGX0dVQVJERURfQllfQ0FQQUJJTElUWShtX3N0cmVhbVRocmVhZCk7Ci0gICAgUmVm
PFdlYkdQVTo6T2JqZWN0SGVhcD4gbV9vYmplY3RIZWFwIFdURl9HVUFSREVEX0JZX0NBUEFCSUxJ
VFkobV9zdHJlYW1UaHJlYWQpOworICAgIFJlZlB0cjxQQUw6OldlYkdQVTo6R1BVPiBtX2JhY2tp
bmcgV1RGX0dVQVJERURfQllfQ0FQQUJJTElUWSh3b3JrUXVldWUoKSk7CisgICAgUmVmPFdlYkdQ
VTo6T2JqZWN0SGVhcD4gbV9vYmplY3RIZWFwIFdURl9HVUFSREVEX0JZX0NBUEFCSUxJVFkod29y
a1F1ZXVlKCkpOwogICAgIGNvbnN0IFdlYkdQVUlkZW50aWZpZXIgbV9pZGVudGlmaWVyOwogICAg
IFJlZjxSZW1vdGVSZW5kZXJpbmdCYWNrZW5kPiBtX3JlbmRlcmluZ0JhY2tlbmQ7Ci0gICAgTk9f
VU5JUVVFX0FERFJFU1MgVGhyZWFkQXNzZXJ0aW9uIG1fc3RyZWFtVGhyZWFkOwogICAgIGNvbnN0
IFdlYkNvcmU6OlByb2Nlc3NJZGVudGlmaWVyIG1fd2ViUHJvY2Vzc0lkZW50aWZpZXI7CiB9Owog
CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViS2l0L0dQVVByb2Nlc3MvbWVkaWEvUmVtb3RlVmlkZW9G
cmFtZU9iamVjdEhlYXAuY3BwIGIvU291cmNlL1dlYktpdC9HUFVQcm9jZXNzL21lZGlhL1JlbW90
ZVZpZGVvRnJhbWVPYmplY3RIZWFwLmNwcAppbmRleCA1MjljMjcyZWY0NzE0NDk0NjNjMTE4ZjJk
NTcwNzI3NzFiMzhlMmE1Li5hY2E1NjU1M2RhYTY0ODNjY2ExYWQwMTNkZDBlMmMzMTRjMjdkODlh
IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViS2l0L0dQVVByb2Nlc3MvbWVkaWEvUmVtb3RlVmlkZW9G
cmFtZU9iamVjdEhlYXAuY3BwCisrKyBiL1NvdXJjZS9XZWJLaXQvR1BVUHJvY2Vzcy9tZWRpYS9S
ZW1vdGVWaWRlb0ZyYW1lT2JqZWN0SGVhcC5jcHAKQEAgLTU1LDEyICs1NSwxMSBAQCBSZW1vdGVW
aWRlb0ZyYW1lT2JqZWN0SGVhcDo6UmVtb3RlVmlkZW9GcmFtZU9iamVjdEhlYXAoR1BVQ29ubmVj
dGlvblRvV2ViUHJvY2VzcwogUmVtb3RlVmlkZW9GcmFtZU9iamVjdEhlYXA6On5SZW1vdGVWaWRl
b0ZyYW1lT2JqZWN0SGVhcCgpCiB7CiAgICAgQVNTRVJUKCFtX2dwdUNvbm5lY3Rpb25Ub1dlYlBy
b2Nlc3MpOwotICAgIG1fY29uc3VtZVRocmVhZC5yZXNldCgpOwogfQogCiB2b2lkIFJlbW90ZVZp
ZGVvRnJhbWVPYmplY3RIZWFwOjpzdG9wTGlzdGVuaW5nRm9ySVBDKFJlZjxSZW1vdGVWaWRlb0Zy
YW1lT2JqZWN0SGVhcD4mJiByZWZGcm9tQ29ubmVjdGlvbikKIHsKLSAgICBhc3NlcnRJc0N1cnJl
bnQobV9jb25zdW1lVGhyZWFkKTsKKyAgICBhc3NlcnRJc01haW5UaHJlYWQoKTsKICNpZiBQTEFU
Rk9STShDT0NPQSkKICAgICBtX3NoYXJlZFZpZGVvRnJhbWVXcml0ZXIuZGlzYWJsZSgpOwogI2Vu
ZGlmCkBAIC04NCw3ICs4Myw3IEBAIFJlbW90ZVZpZGVvRnJhbWVJZGVudGlmaWVyIFJlbW90ZVZp
ZGVvRnJhbWVPYmplY3RIZWFwOjpjcmVhdGVSZW1vdGVWaWRlb0ZyYW1lKFJlCiAKIHZvaWQgUmVt
b3RlVmlkZW9GcmFtZU9iamVjdEhlYXA6OnJlbGVhc2VWaWRlb0ZyYW1lKFJlbW90ZVZpZGVvRnJh
bWVXcml0ZVJlZmVyZW5jZSYmIHdyaXRlKQogewotICAgIGFzc2VydElzQ3VycmVudChtX2NvbnN1
bWVUaHJlYWQpOworICAgIGFzc2VydElzTWFpblRocmVhZCgpOwogICAgIHJldGlyZVJlbW92ZShX
VEZNb3ZlKHdyaXRlKSk7CiB9CiAKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJLaXQvR1BVUHJvY2Vz
cy9tZWRpYS9SZW1vdGVWaWRlb0ZyYW1lT2JqZWN0SGVhcC5oIGIvU291cmNlL1dlYktpdC9HUFVQ
cm9jZXNzL21lZGlhL1JlbW90ZVZpZGVvRnJhbWVPYmplY3RIZWFwLmgKaW5kZXggMTYyYTk0Mjgy
OWE1OWRlNGJjMjcyODMyMjEyZDM0NjhkZTU1NGU0OC4uMzVkMGU1Mjc5MzQyZDJmZmM3MWZjMTE2
MTZmMDE4NjlhMjIxNTE4OCAxMDA2NDQKLS0tIGEvU291cmNlL1dlYktpdC9HUFVQcm9jZXNzL21l
ZGlhL1JlbW90ZVZpZGVvRnJhbWVPYmplY3RIZWFwLmgKKysrIGIvU291cmNlL1dlYktpdC9HUFVQ
cm9jZXNzL21lZGlhL1JlbW90ZVZpZGVvRnJhbWVPYmplY3RIZWFwLmgKQEAgLTY0LDkgKzY0LDgg
QEAgcHJpdmF0ZToKICAgICB2b2lkIGdldFZpZGVvRnJhbWVCdWZmZXIoUmVtb3RlVmlkZW9GcmFt
ZVJlYWRSZWZlcmVuY2UmJik7CiAjZW5kaWYKIAotICAgIEdQVUNvbm5lY3Rpb25Ub1dlYlByb2Nl
c3MqIG1fZ3B1Q29ubmVjdGlvblRvV2ViUHJvY2VzcyBXVEZfR1VBUkRFRF9CWV9DQVBBQklMSVRZ
KG1fY29uc3VtZVRocmVhZCk7CisgICAgR1BVQ29ubmVjdGlvblRvV2ViUHJvY2VzcyogbV9ncHVD
b25uZWN0aW9uVG9XZWJQcm9jZXNzIFdURl9HVUFSREVEX0JZX0NBUEFCSUxJVFkobWFpblRocmVh
ZCk7CiAgICAgY29uc3QgUmVmPElQQzo6Q29ubmVjdGlvbj4gbV9jb25uZWN0aW9uOwotICAgIFRo
cmVhZEFzc2VydGlvbiBtX2NvbnN1bWVUaHJlYWQgTk9fVU5JUVVFX0FERFJFU1M7CiAjaWYgUExB
VEZPUk0oQ09DT0EpCiAgICAgU2hhcmVkVmlkZW9GcmFtZVdyaXRlciBtX3NoYXJlZFZpZGVvRnJh
bWVXcml0ZXI7CiAjZW5kaWYKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJLaXQvUGxhdGZvcm0vSVBD
L1N0cmVhbUNvbm5lY3Rpb25Xb3JrUXVldWUuY3BwIGIvU291cmNlL1dlYktpdC9QbGF0Zm9ybS9J
UEMvU3RyZWFtQ29ubmVjdGlvbldvcmtRdWV1ZS5jcHAKaW5kZXggZDlhMjBkMTQ4YThiYTA1YjE2
ZDY3YTU5OTIxMDRhNTlkOTQ3N2VmNS4uNjNlNTVlMTNlOWU0NzJiOWNkMjMwYjcxODAzMTNhY2Yy
ZjE3Y2YxNyAxMDA2NDQKLS0tIGEvU291cmNlL1dlYktpdC9QbGF0Zm9ybS9JUEMvU3RyZWFtQ29u
bmVjdGlvbldvcmtRdWV1ZS5jcHAKKysrIGIvU291cmNlL1dlYktpdC9QbGF0Zm9ybS9JUEMvU3Ry
ZWFtQ29ubmVjdGlvbldvcmtRdWV1ZS5jcHAKQEAgLTEzNiw0ICsxMzYsMTIgQEAgdm9pZCBTdHJl
YW1Db25uZWN0aW9uV29ya1F1ZXVlOjpwcm9jZXNzU3RyZWFtcygpCiAgICAgfSB3aGlsZSAoaGFz
TW9yZVRvUHJvY2Vzcyk7CiB9CiAKKyNpZiBBU1NFUlRfRU5BQkxFRAordm9pZCBTdHJlYW1Db25u
ZWN0aW9uV29ya1F1ZXVlOjphc3NlcnRJc0N1cnJlbnQoKSBjb25zdAoreworICAgIExvY2tlciBs
b2NrZXIgeyBtX2xvY2sgfTsKKyAgICBBU1NFUlQobV9wcm9jZXNzaW5nVGhyZWFkKTsKKyAgICBX
VEY6OmFzc2VydElzQ3VycmVudCgqbV9wcm9jZXNzaW5nVGhyZWFkKTsKK30KKyNlbmRpZgogfQpk
aWZmIC0tZ2l0IGEvU291cmNlL1dlYktpdC9QbGF0Zm9ybS9JUEMvU3RyZWFtQ29ubmVjdGlvbldv
cmtRdWV1ZS5oIGIvU291cmNlL1dlYktpdC9QbGF0Zm9ybS9JUEMvU3RyZWFtQ29ubmVjdGlvbldv
cmtRdWV1ZS5oCmluZGV4IGQ4NDQ2YTQxMDk2NjZkOTZjZDA3NzQ1ZjViZTFkOTg3NWIxNWYxYzku
LjJlYjIwMWVmOGYzZTJhNjFkNmQxNWNlYzJmYjA2OTExY2FlY2NjYmQgMTAwNjQ0Ci0tLSBhL1Nv
dXJjZS9XZWJLaXQvUGxhdGZvcm0vSVBDL1N0cmVhbUNvbm5lY3Rpb25Xb3JrUXVldWUuaAorKysg
Yi9Tb3VyY2UvV2ViS2l0L1BsYXRmb3JtL0lQQy9TdHJlYW1Db25uZWN0aW9uV29ya1F1ZXVlLmgK
QEAgLTM2LDcgKzM2LDcgQEAKIAogbmFtZXNwYWNlIElQQyB7CiAKLWNsYXNzIFN0cmVhbUNvbm5l
Y3Rpb25Xb3JrUXVldWUgZmluYWwgOiBwdWJsaWMgRnVuY3Rpb25EaXNwYXRjaGVyIHsKK2NsYXNz
IFdURl9DQVBBQklMSVRZKCJpcyBjdXJyZW50IikgU3RyZWFtQ29ubmVjdGlvbldvcmtRdWV1ZSBm
aW5hbCA6IHB1YmxpYyBGdW5jdGlvbkRpc3BhdGNoZXIgewogcHVibGljOgogICAgIHN0YXRpYyBS
ZWY8U3RyZWFtQ29ubmVjdGlvbldvcmtRdWV1ZT4gY3JlYXRlKGNvbnN0IGNoYXIqIG5hbWUpCiAg
ICAgewpAQCAtNTcsMTYgKzU3LDI3IEBAIHB1YmxpYzoKIHByaXZhdGU6CiAgICAgdm9pZCBzdGFy
dFByb2Nlc3NpbmdUaHJlYWQoKSBXVEZfUkVRVUlSRVNfTE9DSyhtX2xvY2spOwogICAgIHZvaWQg
cHJvY2Vzc1N0cmVhbXMoKTsKKyNpZiBBU1NFUlRfRU5BQkxFRAorICAgIHZvaWQgYXNzZXJ0SXND
dXJyZW50KCkgY29uc3Q7CisjZW5kaWYKIAogICAgIGNvbnN0IGNoYXIqIGNvbnN0IG1fbmFtZTsK
IAogICAgIFNlbWFwaG9yZSBtX3dha2VVcFNlbWFwaG9yZTsKICAgICBzdGQ6OmF0b21pYzxib29s
PiBtX3Nob3VsZFF1aXQgeyBmYWxzZSB9OwogCi0gICAgTG9jayBtX2xvY2s7CisgICAgbXV0YWJs
ZSBMb2NrIG1fbG9jazsKICAgICBSZWZQdHI8VGhyZWFkPiBtX3Byb2Nlc3NpbmdUaHJlYWQgV1RG
X0dVQVJERURfQllfTE9DSyhtX2xvY2spOwogICAgIERlcXVlPEZ1bmN0aW9uPHZvaWQoKT4+IG1f
ZnVuY3Rpb25zIFdURl9HVUFSREVEX0JZX0xPQ0sobV9sb2NrKTsKICAgICBIYXNoQ291bnRlZFNl
dDxSZWY8U3RyZWFtU2VydmVyQ29ubmVjdGlvbkJhc2U+PiBtX2Nvbm5lY3Rpb25zIFdURl9HVUFS
REVEX0JZX0xPQ0sobV9sb2NrKTsKKyAgICBmcmllbmQgdm9pZCBhc3NlcnRJc0N1cnJlbnQoY29u
c3QgU3RyZWFtQ29ubmVjdGlvbldvcmtRdWV1ZSYpOwogfTsKIAoraW5saW5lIHZvaWQgYXNzZXJ0
SXNDdXJyZW50KGNvbnN0IFN0cmVhbUNvbm5lY3Rpb25Xb3JrUXVldWUmIHF1ZXVlKSBXVEZfQVNT
RVJUU19BQ1FVSVJFRF9DQVBBQklMSVRZKHF1ZXVlKQoreworI2lmIEFTU0VSVF9FTkFCTEVECisg
ICAgcXVldWUuYXNzZXJ0SXNDdXJyZW50KCk7CisjZW5kaWYKK30KKwogfQpkaWZmIC0tZ2l0IGEv
VG9vbHMvQ2hhbmdlTG9nIGIvVG9vbHMvQ2hhbmdlTG9nCmluZGV4IDM4M2ZhNDEyYmMyMzJmNmQ3
YWQzNGFiYTYwYTY2NWY4NGNlYTBiMmQuLjVlODU1ZmU5MjdkMzlhOTk2ZjUyYTVmNzZjOWE1MzAw
YTk4N2Y3Y2UgMTAwNjQ0Ci0tLSBhL1Rvb2xzL0NoYW5nZUxvZworKysgYi9Ub29scy9DaGFuZ2VM
b2cKQEAgLTEsMyArMSwyMiBAQAorMjAyMi0wMi0yMyAgS2ltbW8gS2lubnVuZW4gIDxra2lubnVu
ZW5AYXBwbGUuY29tPgorCisgICAgICAgIFRocmVhZCBzYWZldHkgYW5hbHlzaXMgdG8gYXNzZXJ0
ICJjb2RlIGlzIHJ1biBzZXF1ZW50aWFsbHkiIGlzIG5vdCB1c2VmdWwgd2hlbiBjb2RlIGlzIG1h
aW5seSBydW4gd2l0aCBXb3JrUXVldWVzCisgICAgICAgIGh0dHBzOi8vYnVncy53ZWJraXQub3Jn
L3Nob3dfYnVnLmNnaT9pZD0yMzY4MzIKKworICAgICAgICBSZXZpZXdlZCBieSBOT0JPRFkgKE9P
UFMhKS4KKworICAgICAgICBUZXN0IHRoZSBhZGRlZCBmdW5jdGlvbmFsaXR5IHRvIGJlIGFibGUg
dG8gdXNlIGFzc2VydElzQ3VycmVudCh0aHJlYWQvd29ya1F1ZXVlKS4KKworICAgICAgICBGaXgg
V1RGX1dvcmtRdWV1ZS5EZXN0cm95RGlzcGF0Y2hlZE9uRGlzcGF0Y2hRdWV1ZSB0ZXN0LCBpdCBp
cyBub3cgYWJsZSB0byBtYWtlIHRoZSBhc3NlcnRpb24gY29ycmVjdGx5LgorICAgICAgICAtIFRo
ZSBvYmplY3QgaXMgY3JlYXRlZCBzb21ld2hlcmUgdGhhdCBpcyBub3QgdGhlIHRlc3RlZCBXb3Jr
UXVldWUKKyAgICAgICAgLSBUaGUgb2JqZWN0IGlzIGRlc3Ryb3llZCBpbiB0aGUgdGVzdGVkIFdv
cmtRdWV1ZQorCisgICAgICAgICogU2NyaXB0cy9nZW5lcmF0ZS1ncHVwLXdlYmdsOgorICAgICAg
ICAqIFRlc3RXZWJLaXRBUEkvVGVzdHMvV1RGL1RocmVhZGluZy5jcHA6CisgICAgICAgIChUZXN0
V2ViS2l0QVBJOjpURVNUKToKKyAgICAgICAgKiBUZXN0V2ViS2l0QVBJL1Rlc3RzL1dURi9Xb3Jr
UXVldWUuY3BwOgorICAgICAgICAoVGVzdFdlYktpdEFQSTo6VEVTVCk6CisKIDIwMjItMDItMjMg
IEtpbW1vIEtpbm51bmVuICA8a2tpbm51bmVuQGFwcGxlLmNvbT4KIAogICAgICAgICBGaXggR1BV
UCBXZWJHTCBnZW5lcmF0b3Igc2NyaXB0IHdydCB1bmluaXRpYWxpc2VkIHNpemVkIHNwYW4KZGlm
ZiAtLWdpdCBhL1Rvb2xzL1NjcmlwdHMvZ2VuZXJhdGUtZ3B1cC13ZWJnbCBiL1Rvb2xzL1Njcmlw
dHMvZ2VuZXJhdGUtZ3B1cC13ZWJnbAppbmRleCA2NzJkMTM4NjFhMzBlZDg3YWI0YTliOGRmMWI4
YzMxNDRiZDBiZWExLi5lYzVjZDE4NjQxOWM5MjcxOGE0OTk5MGQ4MDg3OGFiNzEzZmQ2M2FkIDEw
MDc1NQotLS0gYS9Ub29scy9TY3JpcHRzL2dlbmVyYXRlLWdwdXAtd2ViZ2wKKysrIGIvVG9vbHMv
U2NyaXB0cy9nZW5lcmF0ZS1ncHVwLXdlYmdsCkBAIC03NDYsNyArNzQ2LDcgQEAgY2xhc3Mgd2Vi
a2l0X2lwY19jcHBfaW1wbChvYmplY3QpOgogICAgICAgICBzZWxmLnByb2Nlc3NfY2FsbCgpCiAK
ICAgICBkZWYgcHJvY2Vzc19jYWxsKHNlbGYpOgotICAgICAgICBzZWxmLmNhbGxfc3RtdHMgKz0g
WyAiYXNzZXJ0SXNDdXJyZW50KG1fc3RyZWFtVGhyZWFkKTsiIF0KKyAgICAgICAgc2VsZi5jYWxs
X3N0bXRzICs9IFsgImFzc2VydElzQ3VycmVudCh3b3JrUXVldWUoKSk7IiBdCiAKICAgICAgICAg
aW5fZXhwcnMgPSAiLCAiLmpvaW4oc3RyKGUpIGZvciBlIGluIHNlbGYuaW5fZXhwcnMpCiAgICAg
ICAgIGlzX2FzeW5jID0gbGVuKHNlbGYub3V0X2V4cHJzKSA9PSAwCmRpZmYgLS1naXQgYS9Ub29s
cy9UZXN0V2ViS2l0QVBJL1Rlc3RzL1dURi9UaHJlYWRpbmcuY3BwIGIvVG9vbHMvVGVzdFdlYktp
dEFQSS9UZXN0cy9XVEYvVGhyZWFkaW5nLmNwcAppbmRleCAzNDY4ZDE1MDk2YzUyOGIyOGY5NDdl
NzNmODA5MTNmMDBhZGFkYjJmLi4wNDMwMGU3Yzg0YmZjOWNhODk2NWFlMmI4YWYwM2MzZTU4MmJk
YTk3IDEwMDY0NAotLS0gYS9Ub29scy9UZXN0V2ViS2l0QVBJL1Rlc3RzL1dURi9UaHJlYWRpbmcu
Y3BwCisrKyBiL1Rvb2xzL1Rlc3RXZWJLaXRBUEkvVGVzdHMvV1RGL1RocmVhZGluZy5jcHAKQEAg
LTI3LDYgKzI3LDcgQEAKIAogI2luY2x1ZGUgPHd0Zi9UaHJlYWRpbmcuaD4KICNpbmNsdWRlIDx3
dGYvVmVjdG9yLmg+CisjaW5jbHVkZSA8d3RmL3RocmVhZHMvQmluYXJ5U2VtYXBob3JlLmg+CiAK
IG5hbWVzcGFjZSBUZXN0V2ViS2l0QVBJIHsKIApAQCAtNjUsNCArNjYsNTkgQEAgVEVTVChXVEYs
IFRocmVhZGluZ1RocmVhZElkZW50aXR5KQogfQogI2VuZGlmIC8vIFVTRShQVEhSRUFEUykKIAor
bmFtZXNwYWNlIHsKK3N0cnVjdCBBc3NlcnRpb25UZXN0SG9sZGVyIHsKKyAgICBSZWZQdHI8VGhy
ZWFkPiB0aHJlYWQ7CisgICAgc2l6ZV90IGNvdW50ZXIgV1RGX0dVQVJERURfQllfQ0FQQUJJTElU
WSgqdGhyZWFkKSB7IDAgfTsKKyAgICBzaXplX3QgcmVzdWx0IHsgMCB9OyAvLyBUaGlzIGlzIGhl
cmUgdG8gc3VwcG9ydCB0aGUgcmVzdWx0IGFzc2VydGlvbi4gVGhlIGNvbXBpbGVyIGRvZXNuJ3Qg
YWxsb3cgdXMgdG8gb2J0YWluIHRoZSBgY291bnRlcmAgb3RoZXJ3aXNlLgorCisgICAgQXNzZXJ0
aW9uVGVzdEhvbGRlcigpCisgICAgeworICAgICAgICBCaW5hcnlTZW1hcGhvcmUgbWVtYmVySW5p
dGlhbGl6ZWQ7CisgICAgICAgIEJpbmFyeVNlbWFwaG9yZSB0aHJlYWRJbml0aWFsaXplZDsKKwor
ICAgICAgICB0aHJlYWQgPSBUaHJlYWQ6OmNyZWF0ZSgiY29tLmFwcGxlLldlYktpdC5UZXN0LlRo
cmVhZFRocmVhZFNhZmV0eUFuYWx5c2lzQXNzZXJ0SXNDdXJyZW50V29ya3MiLCBbJl0geworICAg
ICAgICAgICAgbWVtYmVySW5pdGlhbGl6ZWQud2FpdCgpOyAvLyBXYWl0IGZvciBgQXNzZXJ0aW9u
VGVzdEhvbGRlcjo6dGhyZWFkYCBhc3NpZ25tZW50IHRvIGNvbXBsZXRlLgorICAgICAgICAgICAg
dGhyZWFkSW5pdGlhbGl6ZWQuc2lnbmFsKCk7CisvLyBFbmFibGUgdG8gc2VlICJ3cml0aW5nIHZh
cmlhYmxlICdjb3VudGVyJyByZXF1aXJlcyBob2xkaW5nIG11dGV4ICd0aHJlYWQnIGV4Y2x1c2l2
ZWx5Ii4KKy8vICNkZWZpbmUgVEVTVF9DT01QSUxFX0ZBSUxVUkUKKyNpZmRlZiBURVNUX0NPTVBJ
TEVfRkFJTFVSRQorICAgICAgICAgICAgdGVzdFRhc2tUaGF0RmFpbHNUb0NvbXBpbGU8aW50Pigp
OworI2VuZGlmCisgICAgICAgICAgICB0ZXN0VGFzaygpOworICAgICAgICAgICAgYXNzZXJ0SXND
dXJyZW50KCp0aHJlYWQpOworICAgICAgICAgICAgY29tcHV0ZVJlc3VsdCgpOworICAgICAgICB9
KTsKKyAgICAgICAgbWVtYmVySW5pdGlhbGl6ZWQuc2lnbmFsKCk7CisgICAgICAgIHRocmVhZElu
aXRpYWxpemVkLndhaXQoKTsgLy8gV2FpdCBmb3IgdGhlIHRocmVhZCB0byBzdG9wIHVzaW5nIGBt
ZW1iZXJJbml0aWFsaXplZGAsIGFzIHdlIHdpbGwgZGVzdHJveSBpdC4KKyAgICB9CisgICAgdm9p
ZCB0ZXN0VGFzaygpCisgICAgeworICAgICAgICBhc3NlcnRJc0N1cnJlbnQoKnRocmVhZCk7IC8v
IFRoaXMgaXMgYmVpbmcgdGVzdGVkLgorICAgICAgICArK2NvdW50ZXI7CisgICAgfQorICAgIHZv
aWQgY29tcHV0ZVJlc3VsdCgpIFdURl9SRVFVSVJFU19DQVBBQklMSVRZKCp0aHJlYWQpIC8vIFRo
aXMgaXMgYmVpbmcgdGVzdGVkLgorICAgIHsKKyAgICAgICAgcmVzdWx0ID0gKytjb3VudGVyOwor
ICAgIH0KKyAgICB0ZW1wbGF0ZTx0eXBlbmFtZSBUPiB2b2lkIHRlc3RUYXNrVGhhdEZhaWxzVG9D
b21waWxlKCkKKyAgICB7CisgICAgICAgICsrY291bnRlcjsKKyAgICB9Cit9OworfQorCisvLyBD
b25zaWRlciBkZWNsYXJhdGlvbiBgUmVmUHRyPFRocmVhZD4gbXlUaHJlYWRgLgorLy8gVGhpcyB0
ZXN0IHRlc3RzIHRoYXQgY2xpZW50cyBjYW4gdXNlIHRocmVhZCBzYWZldHkgYW5hbHlzaXMgdG8g
Y2hlY2sgdGhhdCB0aGUgdGhyZWFkIGlzIGN1cnJlbnQKKy8vIGJ5IHVzaW5nIGBhc3NlcnRJc0N1
cnJlbnQoKm15VGhyZWFkKTtgIHRvIGVzdGFibGlzaCB0aGUgYXNzZXJ0aW9uIGFuZCBXVEZfR1VB
UkRFRF9CWV9DQVBBQklMSVRZLCBXVEZfUkVRVUlSRVNfQllfQ0FQQUJJTElUWQorLy8gZGVjbGFy
YXRpb25zIHRvIGxldCB0aGUgY29tcGlsZXIgYW5hbHl6ZSB0aGUgdXNlcyBvZiB0aGUgdmFyaWFi
bGVzIGFuZCBmdW5jdGlvbnMgd2l0aCB0aGUgZGVjbGFyYXRpb25zLgorVEVTVChXVEZfVGhyZWFk
LCBUaHJlYWRTYWZldHlBbmFseXNpc0Fzc2VydElzQ3VycmVudFdvcmtzKQoreworICAgIEFzc2Vy
dGlvblRlc3RIb2xkZXIgaG9sZGVyc1s1MF07CisgICAgZm9yIChhdXRvJiBob2xkZXIgOiBob2xk
ZXJzKQorICAgICAgICBob2xkZXIudGhyZWFkLT53YWl0Rm9yQ29tcGxldGlvbigpOworICAgIGZv
ciAoYXV0byYgaG9sZGVyIDogaG9sZGVycykKKyAgICAgICAgRVhQRUNUX0VRKDJ1LCBob2xkZXIu
cmVzdWx0KTsKK30KKwogfSAvLyBuYW1lc3BhY2UgVGVzdFdlYktpdEFQSQpkaWZmIC0tZ2l0IGEv
VG9vbHMvVGVzdFdlYktpdEFQSS9UZXN0cy9XVEYvV29ya1F1ZXVlLmNwcCBiL1Rvb2xzL1Rlc3RX
ZWJLaXRBUEkvVGVzdHMvV1RGL1dvcmtRdWV1ZS5jcHAKaW5kZXggMmY0Y2Y2NGE4YWNmZWI2NDJl
MDYyZDg4NmZkMmJlNDg4ZjAzNTZlZi4uMzNkOTVkODY0MjIxODE5YzdlNmU2MThiN2M4MWNkODcy
MDQxM2Q5MSAxMDA2NDQKLS0tIGEvVG9vbHMvVGVzdFdlYktpdEFQSS9UZXN0cy9XVEYvV29ya1F1
ZXVlLmNwcAorKysgYi9Ub29scy9UZXN0V2ViS2l0QVBJL1Rlc3RzL1dURi9Xb3JrUXVldWUuY3Bw
CkBAIC0zMDksNiArMzA5LDQ5IEBAIFRFU1QoV1RGX1dvcmtRdWV1ZSwgRGVzdHJveURpc3BhdGNo
ZWRPbkRpc3BhdGNoUXVldWUpCiAgICAgZm9yIChzaXplX3QgaiA9IDA7IGogPCBxdWV1ZUNvdW50
OyArK2opCiAgICAgICAgIHF1ZXVlW2pdLT5kaXNwYXRjaFN5bmMoW10geyB9KTsKICAgICBFWFBF
Q1RfRVEocXVldWVDb3VudCAqIGl0ZXJhdGlvbkNvdW50LCBjb3VudGVyKTsKK30KKworbmFtZXNw
YWNlIHsKK3N0cnVjdCBBc3NlcnRpb25UZXN0SG9sZGVyIHsKKyAgICBjb25zdCBSZWZQdHI8V29y
a1F1ZXVlPiBxdWV1ZSB7IFdvcmtRdWV1ZTo6Y3JlYXRlKCJjb20uYXBwbGUuV2ViS2l0LlRlc3Qu
VGhyZWFkU2FmZXR5QW5hbHlzaXNBc3NlcnRJc0N1cnJlbnRXb3JrcyIsIFdvcmtRdWV1ZTo6UU9T
OjpVc2VySW50ZXJhY3RpdmUpIH07CisgICAgc2l6ZV90IGNvdW50ZXIgV1RGX0dVQVJERURfQllf
Q0FQQUJJTElUWSgqcXVldWUpIHsgMCB9OworICAgIHNpemVfdCByZXN1bHQgeyAwIH07IC8vIFRo
aXMgaXMgaGVyZSB0byBzdXBwb3J0IHRoZSByZXN1bHQgYXNzZXJ0aW9uLiBUaGUgY29tcGlsZXIg
ZG9lc24ndCBhbGxvdyB1cyB0byBvYnRhaW4gdGhlIGBjb3VudGVyYCBvdGhlcndpc2UuCiAKKyAg
ICB2b2lkIHRlc3RUYXNrKCkKKyAgICB7CisgICAgICAgIGFzc2VydElzQ3VycmVudCgqcXVldWUp
OyAvLyBUaGlzIGlzIGJlaW5nIHRlc3RlZC4KKyAgICAgICAgKytjb3VudGVyOworICAgIH0KKyAg
ICB2b2lkIGNvbXB1dGVSZXN1bHQoKSBXVEZfUkVRVUlSRVNfQ0FQQUJJTElUWSgqcXVldWUpIC8v
IFRoaXMgaXMgYmVpbmcgdGVzdGVkLgorICAgIHsKKyAgICAgICAgcmVzdWx0ID0gKytjb3VudGVy
OworICAgIH0KKyAgICB0ZW1wbGF0ZTx0eXBlbmFtZSBUPiB2b2lkIHRlc3RUYXNrVGhhdEZhaWxz
VG9Db21waWxlKCkKKyAgICB7CisgICAgICAgICsrY291bnRlcjsKKyAgICB9Cit9OwogfQorCitU
RVNUKFdURl9Xb3JrUXVldWUsIFRocmVhZFNhZmV0eUFuYWx5c2lzQXNzZXJ0SXNDdXJyZW50V29y
a3MpCit7CisgICAgY29uc3RleHByIHNpemVfdCBxdWV1ZUNvdW50ID0gNTA7CisgICAgY29uc3Rl
eHByIHNpemVfdCBpdGVyYXRpb25Db3VudCA9IDEwMDAwOworCisgICAgQXNzZXJ0aW9uVGVzdEhv
bGRlciBob2xkZXJzW3F1ZXVlQ291bnRdOworICAgIGZvciAoc2l6ZV90IGkgPSAwOyBpIDwgaXRl
cmF0aW9uQ291bnQ7ICsraSkgeworICAgICAgICBmb3IgKGF1dG8mIGhvbGRlciA6IGhvbGRlcnMp
CisgICAgICAgICAgICBob2xkZXIucXVldWUtPmRpc3BhdGNoKFsmaG9sZGVyXSB7IGhvbGRlci50
ZXN0VGFzaygpOyB9KTsKKyAgICB9CisvLyAjZGVmaW5lIFRFU1RfQ09NUElMRV9GQUlMVVJFCisj
aWZkZWYgVEVTVF9DT01QSUxFX0ZBSUxVUkUKKyAgICBmb3IgKGF1dG8mIGhvbGRlciA6IGhvbGRl
cnMpCisgICAgICAgIGhvbGRlci5xdWV1ZS0+ZGlzcGF0Y2hTeW5jKFsmaG9sZGVyXSB7IGhvbGRl
ci50ZXN0VGFza1RoYXRGYWlsc1RvQ29tcGlsZTxpbnQ+KCk7IH0pOworI2VuZGlmCisgICAgZm9y
IChhdXRvJiBob2xkZXIgOiBob2xkZXJzKQorICAgICAgICBob2xkZXIucXVldWUtPmRpc3BhdGNo
U3luYyhbJmhvbGRlcl0geyBhc3NlcnRJc0N1cnJlbnQoKmhvbGRlci5xdWV1ZSk7IGhvbGRlci5j
b21wdXRlUmVzdWx0KCk7IH0pOworICAgIGZvciAoYXV0byYgaG9sZGVyIDogaG9sZGVycykKKyAg
ICAgICAgRVhQRUNUX0VRKGl0ZXJhdGlvbkNvdW50ICsgMSwgaG9sZGVyLnJlc3VsdCk7Cit9CisK
IH0gLy8gbmFtZXNwYWNlIFRlc3RXZWJLaXRBUEkK
</data>

          </attachment>
      

    </bug>

</bugzilla>