<?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>87686</bug_id>
          
          <creation_ts>2012-05-28 18:39:07 -0700</creation_ts>
          <short_desc>[chromium] Accelerated animations should use WebTransformOperations</short_desc>
          <delta_ts>2012-06-08 11:42:08 -0700</delta_ts>
          <reporter_accessible>1</reporter_accessible>
          <cclist_accessible>1</cclist_accessible>
          <classification_id>1</classification_id>
          <classification>Unclassified</classification>
          <product>WebKit</product>
          <component>WebKit Misc.</component>
          <version>528+ (Nightly build)</version>
          <rep_platform>Unspecified</rep_platform>
          <op_sys>Unspecified</op_sys>
          <bug_status>RESOLVED</bug_status>
          <resolution>FIXED</resolution>
          
          
          <bug_file_loc></bug_file_loc>
          <status_whiteboard></status_whiteboard>
          <keywords></keywords>
          <priority>P2</priority>
          <bug_severity>Normal</bug_severity>
          <target_milestone>---</target_milestone>
          <dependson>87510</dependson>
    
    <dependson>88159</dependson>
          
          <everconfirmed>1</everconfirmed>
          <reporter>vollick</reporter>
          <assigned_to>vollick</assigned_to>
          <cc>cc-bugs</cc>
    
    <cc>jamesr</cc>
    
    <cc>rniwa</cc>
    
    <cc>shawnsingh</cc>
    
    <cc>webkit.review.bot</cc>
          

      

      

      

          <comment_sort_order>oldest_to_newest</comment_sort_order>  
          <long_desc isprivate="0" >
    <commentid>635495</commentid>
    <comment_count>0</comment_count>
    <who name="">vollick</who>
    <bug_when>2012-05-28 18:39:07 -0700</bug_when>
    <thetext>This will require the following
 - Change CCTransformKeyframe to own a WebTransformOperations rather than a TransformOperations.
 - Change LayerChromium&apos;s API. LayerChromium::addAnimation should take only a CCActiveAnimation.
 - GraphicsLayerChromium is responsible for translating to WebTransformOperations and creating CCActiveAnimations.
 - Tests that use the public API (that is, they call addAnimation with KeyframeValueList and Animation arguments) must be moved to GraphicsLayerChromiumTest.cpp.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>635502</commentid>
    <comment_count>1</comment_count>
      <attachid>144422</attachid>
    <who name="">vollick</who>
    <bug_when>2012-05-28 18:45:58 -0700</bug_when>
    <thetext>Created attachment 144422
Patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>638732</commentid>
    <comment_count>2</comment_count>
      <attachid>145160</attachid>
    <who name="">vollick</who>
    <bug_when>2012-05-31 14:47:28 -0700</bug_when>
    <thetext>Created attachment 145160
Patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>638908</commentid>
    <comment_count>3</comment_count>
      <attachid>145194</attachid>
    <who name="">vollick</who>
    <bug_when>2012-05-31 19:17:41 -0700</bug_when>
    <thetext>Created attachment 145194
Patch

Moved the animation translation code into AnimationTranslationUtil.

Also added logic to bail on accelerated anim when there are rotations of &gt;= 180
degrees and when we have singular matrices (as well as some unit tests).</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>638930</commentid>
    <comment_count>4</comment_count>
      <attachid>145194</attachid>
    <who name="James Robinson">jamesr</who>
    <bug_when>2012-05-31 19:59:09 -0700</bug_when>
    <thetext>Comment on attachment 145194
Patch

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

Nice! R=me, but I&apos;m pretty sure that http://trac.webkit.org/changeset/119178 has given you the gift of many merge conflicts.

&gt; Source/WebCore/platform/graphics/chromium/AnimationTranslationUtil.cpp:75
&gt; +            ScaleTransformOperation* transform = static_cast&lt;ScaleTransformOperation*&gt;(transformOperations.operations()[j].get());

I think using temporaries like this is fine, but can we const it up a bit?</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>639346</commentid>
    <comment_count>5</comment_count>
      <attachid>145309</attachid>
    <who name="">vollick</who>
    <bug_when>2012-06-01 08:04:10 -0700</bug_when>
    <thetext>Created attachment 145309
Patch

Patch for landing.

(In reply to comment #4)
&gt; (From update of attachment 145194 [details])
&gt; View in context: https://bugs.webkit.org/attachment.cgi?id=145194&amp;action=review
&gt;
&gt; Nice! R=me, but I&apos;m pretty sure that http://trac.webkit.org/changeset/119178 has given you the gift of many merge conflicts.
&gt;
&gt; &gt; Source/WebCore/platform/graphics/chromium/AnimationTranslationUtil.cpp:75
&gt; &gt; +            ScaleTransformOperation* transform = static_cast&lt;ScaleTransformOperation*&gt;(transformOperations.operations()[j].get());
&gt;
&gt; I think using temporaries like this is fine, but can we const it up a bit?

Done.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>639423</commentid>
    <comment_count>6</comment_count>
      <attachid>145309</attachid>
    <who name="WebKit Review Bot">webkit.review.bot</who>
    <bug_when>2012-06-01 09:13:42 -0700</bug_when>
    <thetext>Comment on attachment 145309
Patch

Rejecting attachment 145309 from commit-queue.

Failed to run &quot;[&apos;/mnt/git/webkit-commit-queue/Tools/Scripts/webkit-patch&apos;, &apos;--status-host=queues.webkit.org&apos;, &apos;-...&quot; exit_code: 2

Last 500 characters of output:
cs/chromium/cc/CCKeyframedAnimationCurve.h:103: error: expected &apos;;&apos; before &apos;&lt;&apos; token
Source/WebCore/platform/graphics/chromium/cc/CCKeyframedAnimationCurve.h:127: error: ISO C++ forbids declaration of &apos;Vector&apos; with no type
Source/WebCore/platform/graphics/chromium/cc/CCKeyframedAnimationCurve.h:127: error: expected &apos;;&apos; before &apos;&lt;&apos; token
make: *** [out/Debug/obj.target/webkit_unit_tests/Source/WebKit/chromium/tests/CCKeyframedAnimationCurveTest.o] Error 1
make: *** Waiting for unfinished jobs....

Full output: http://queues.webkit.org/results/12866565</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>639469</commentid>
    <comment_count>7</comment_count>
      <attachid>145330</attachid>
    <who name="">vollick</who>
    <bug_when>2012-06-01 09:53:21 -0700</bug_when>
    <thetext>Created attachment 145330
Patch

Including Vector to make the build happy.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>639740</commentid>
    <comment_count>8</comment_count>
      <attachid>145330</attachid>
    <who name="WebKit Review Bot">webkit.review.bot</who>
    <bug_when>2012-06-01 14:46:58 -0700</bug_when>
    <thetext>Comment on attachment 145330
Patch

Clearing flags on attachment: 145330

Committed r119283: &lt;http://trac.webkit.org/changeset/119283&gt;</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>639741</commentid>
    <comment_count>9</comment_count>
    <who name="WebKit Review Bot">webkit.review.bot</who>
    <bug_when>2012-06-01 14:47:02 -0700</bug_when>
    <thetext>All reviewed patches have been landed.  Closing bug.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>639753</commentid>
    <comment_count>10</comment_count>
    <who name="Ryosuke Niwa">rniwa</who>
    <bug_when>2012-06-01 14:59:53 -0700</bug_when>
    <thetext>This patch broke Chromium Mac:
../../third_party/WebKit/Source/WebCore/platform/graphics/chromium/LayerChromium.h:83:28: error: &apos;bounds&apos; marked &apos;override&apos; but does not override any member functions
    virtual const IntSize&amp; bounds() const OVERRIDE { return m_bounds; }
                           ^
In file included from ../../third_party/WebKit/Source/WebCore/platform/graphics/chromium/Canvas2DLayerChromium.cpp:42:
In file included from ../../third_party/WebKit/Source/WebCore/platform/graphics/chromium/cc/CCTextureLayerImpl.h:29:
../../third_party/WebKit/Source/WebCore/platform/graphics/chromium/cc/CCLayerImpl.h:66:28: error: &apos;bounds&apos; marked &apos;override&apos; but does not override any member functions
    virtual const IntSize&amp; bounds() const OVERRIDE { return m_bounds; }
                           ^
2 errors generated.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>639755</commentid>
    <comment_count>11</comment_count>
    <who name="Ryosuke Niwa">rniwa</who>
    <bug_when>2012-06-01 15:00:16 -0700</bug_when>
    <thetext>http://build.chromium.org/p/chromium.webkit/builders/Webkit%20Mac%20Builder/builds/25304/steps/compile/logs/stdio</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>639906</commentid>
    <comment_count>12</comment_count>
    <who name="Ryosuke Niwa">rniwa</who>
    <bug_when>2012-06-01 18:26:18 -0700</bug_when>
    <thetext>It appears that this caused basicCreateAndDestroy not to complete:
http://build.chromium.org/p/chromium.webkit/builders/Webkit%20Mac10.5%20%28dbg%29%281%29/builds/7810

Blame list: http://trac.webkit.org/log/?verbose=on&amp;rev=119292&amp;stop_rev=119282</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>639908</commentid>
    <comment_count>13</comment_count>
    <who name="Ryosuke Niwa">rniwa</who>
    <bug_when>2012-06-01 18:29:19 -0700</bug_when>
    <thetext>Same issue on 10.6:
http://build.chromium.org/p/chromium.webkit/builders/Webkit%20Mac10.6%20%28dbg%29/builds/10733

LayerChromiumTest.basicCreateAndDestroy: 
Did not complete.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>639909</commentid>
    <comment_count>14</comment_count>
    <who name="Ryosuke Niwa">rniwa</who>
    <bug_when>2012-06-01 18:30:15 -0700</bug_when>
    <thetext>Also note that this patch had already required http://trac.webkit.org/changeset/119287/ and http://trac.webkit.org/changeset/119291/ to even compile.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>639910</commentid>
    <comment_count>15</comment_count>
    <who name="Ryosuke Niwa">rniwa</who>
    <bug_when>2012-06-01 18:32:02 -0700</bug_when>
    <thetext>I&apos;m sorry but I&apos;m going to roll out this patch since nobody is responding to me on IRC or on Bugzilla.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>639912</commentid>
    <comment_count>16</comment_count>
    <who name="WebKit Review Bot">webkit.review.bot</who>
    <bug_when>2012-06-01 18:33:01 -0700</bug_when>
    <thetext>Re-opened since this is blocked by 88159</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>639915</commentid>
    <comment_count>17</comment_count>
    <who name="Ryosuke Niwa">rniwa</who>
    <bug_when>2012-06-01 18:35:21 -0700</bug_when>
    <thetext>The patch author says he&apos;s going to investigate the issue, so I&apos;ll hold off on the roll out.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>639927</commentid>
    <comment_count>18</comment_count>
    <who name="Ryosuke Niwa">rniwa</who>
    <bug_when>2012-06-01 19:39:49 -0700</bug_when>
    <thetext>Ian and I both investigated this problem (I used the exact revision for both WebKit and Chromium) but neither of us could reproduce the failure locally. It&apos;s not clear why this assertion failure occurs:

http://build.chromium.org/p/chromium.webkit/builders/Webkit%20Mac10.6%20%28dbg%29/builds/10734/steps/webkit_unit_tests/logs/stdio

[----------] 15 tests from LayerChromiumTest
[ RUN      ] LayerChromiumTest.basicCreateAndDestroy
ASSERTION FAILED: CCProxy::isMainThread()
/Volumes/data/b/build/slave/webkit-mac-latest-dbg/build/src/third_party/WebKit/Source/WebCore/WebCore.gyp/../platform/graphics/chromium/cc/CCLayerTreeHost.cpp(91) : WebCore::CCLayerTreeHost::CCLayerTreeHost(WebCore::CCLayerTreeHostClient *, const WebCore::CCSettings &amp;)
1   0x49a2af92 WebCore::CCLayerTreeHost::CCLayerTreeHost(WebCore::CCLayerTreeHostClient*, WebCore::CCSettings const&amp;)
2   0x4751151a (anonymous namespace)::MockCCLayerTreeHost::MockCCLayerTreeHost()
3   0x475113eb (anonymous namespace)::MockCCLayerTreeHost::MockCCLayerTreeHost()
4   0x4750f8b5 (anonymous namespace)::LayerChromiumTest::SetUp()
5   0x4797a3a1 void testing::internal::HandleSehExceptionsInMethodIfSupported&lt;testing::Test, void&gt;(testing::Test*, void (testing::Test::*)(), char const*)
6   0x4796f9de void testing::internal::HandleExceptionsInMethodIfSupported&lt;testing::Test, void&gt;(testing::Test*, void (testing::Test::*)(), char const*)
7   0x479649b8 testing::Test::Run()
8   0x47965077 testing::TestInfo::Run()
9   0x479655f9 testing::TestCase::Run()
10  0x4796a925 testing::internal::UnitTestImpl::RunAllTests()
11  0x47978041 bool testing::internal::HandleSehExceptionsInMethodIfSupported&lt;testing::internal::UnitTestImpl, bool&gt;(testing::internal::UnitTestImpl*, bool (testing::internal::UnitTestImpl::*)(), char const*)
12  0x47971b8e bool testing::internal::HandleExceptionsInMethodIfSupported&lt;testing::internal::UnitTestImpl, bool&gt;(testing::internal::UnitTestImpl*, bool (testing::internal::UnitTestImpl::*)(), char const*)
13  0x4796a5b4 testing::UnitTest::Run()
14  0x47b22df0 base::TestSuite::Run()
15  0x46f13349 main
16  0x46f132a6 start
17  0x2
[1040:-1602484928:0601/171831:203491476840:ERROR:process_util_posix.cc(143)] Received signal 11
	0   webkit_unit_tests                   0x479d1fff base::debug::StackTrace::StackTrace() + 63
	1   webkit_unit_tests                   0x479d1f9b base::debug::StackTrace::StackTrace() + 43
	2   webkit_unit_tests                   0x47a8b667 base::(anonymous namespace)::StackDumpSignalHandler(int, __siginfo*, __darwin_ucontext*) + 295
	3   libSystem.B.dylib                   0x9539405b _sigtramp + 43
	4   ???                                 0xffffffff 0x0 + 4294967295
	5   webkit_unit_tests                   0x4751151a (anonymous namespace)::MockCCLayerTreeHost::MockCCLayerTreeHost() + 106
	6   webkit_unit_tests                   0x475113eb (anonymous namespace)::MockCCLayerTreeHost::MockCCLayerTreeHost() + 43
	7   webkit_unit_tests                   0x4750f8b5 (anonymous namespace)::LayerChromiumTest::SetUp() + 101
	8   webkit_unit_tests                   0x4797a3a1 void testing::internal::HandleSehExceptionsInMethodIfSupported&lt;testing::Test, void&gt;(testing::Test*, void (testing::Test::*)(), char const*) + 145
	9   webkit_unit_tests                   0x4796f9de void testing::internal::HandleExceptionsInMethodIfSupported&lt;testing::Test, void&gt;(testing::Test*, void (testing::Test::*)(), char const*) + 126
	10  webkit_unit_tests                   0x479649b8 testing::Test::Run() + 152
	11  webkit_unit_tests                   0x47965077 testing::TestInfo::Run() + 263
	12  webkit_unit_tests                   0x479655f9 testing::TestCase::Run() + 265
	13  webkit_unit_tests                   0x4796a925 testing::internal::UnitTestImpl::RunAllTests() + 821
	14  webkit_unit_tests                   0x47978041 bool testing::internal::HandleSehExceptionsInMethodIfSupported&lt;testing::internal::UnitTestImpl, bool&gt;(testing::internal::UnitTestImpl*, bool (testing::internal::UnitTestImpl::*)(), char const*) + 145
	15  webkit_unit_tests                   0x47971b8e bool testing::internal::HandleExceptionsInMethodIfSupported&lt;testing::internal::UnitTestImpl, bool&gt;(testing::internal::UnitTestImpl*, bool (testing::internal::UnitTestImpl::*)(), char const*) + 126
	16  webkit_unit_tests                   0x4796a5b4 testing::UnitTest::Run() + 148
	17  webkit_unit_tests                   0x47b22df0 base::TestSuite::Run() + 256
	18  webkit_unit_tests                   0x46f13349 main + 105
	19  webkit_unit_tests                   0x46f132a6 start + 54
	20  ???                                 0x00000002 0x0 + 2
ax: bbadbeef, bx: 4ccd2868, cx: 9f542ff7, dx: 9f542ff7
di: 4b873216, si: 4bad9f4e, bp: bffff178, sp: bffff130, ss: 23, flags: 10286
ip: 49a2af9c, cs: 1b, ds: 23, es: 23, fs: 0, gs: f</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>639930</commentid>
    <comment_count>19</comment_count>
    <who name="Ryosuke Niwa">rniwa</who>
    <bug_when>2012-06-01 19:47:50 -0700</bug_when>
    <thetext>At this point, I&apos;m going to roll out his change per Ian&apos;s request. If that doesn&apos;t fix the problem, I&apos;ll roll it back in.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>639934</commentid>
    <comment_count>20</comment_count>
    <who name="Ryosuke Niwa">rniwa</who>
    <bug_when>2012-06-01 19:51:23 -0700</bug_when>
    <thetext>Here&apos;s chromium changeset for FYI: http://build.chromium.org/f/chromium/perf/dashboard/ui/changelog.html?url=%2Ftrunk%2Fsrc&amp;range=140118%3A140103&amp;mode=html</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>642037</commentid>
    <comment_count>21</comment_count>
      <attachid>145901</attachid>
    <who name="">vollick</who>
    <bug_when>2012-06-05 17:22:32 -0700</bug_when>
    <thetext>Created attachment 145901
Patch

Fixes clang compilation issues and unit test failures on Mac.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>642042</commentid>
    <comment_count>22</comment_count>
      <attachid>145901</attachid>
    <who name="James Robinson">jamesr</who>
    <bug_when>2012-06-05 17:31:30 -0700</bug_when>
    <thetext>Comment on attachment 145901
Patch

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

&gt; Source/WebCore/platform/graphics/chromium/AnimationTranslationUtil.h:2
&gt; + * Copyright (C) 2010 Google Inc. All rights reserved.

for this and other new files - it&apos;s 2012 now, and we prefer 2-clause for new files (although that&apos;s not a big deal)

&gt; Source/WebCore/platform/graphics/chromium/AnimationTranslationUtil.h:43
&gt; +PassOwnPtr&lt;CCActiveAnimation&gt; createActiveAnimation(const KeyframeValueList&amp;, const Animation*, size_t animationId, size_t groupId, double timeOffset, const FloatSize&amp; boxSize);

Would you mind documenting the behavior of this function with non-supported input (like non-invertable transforms or whatnot?)  Looks like it just returns nullptr, but it&apos;d be good to know that without having to read through the impl

&gt; Source/WebCore/platform/graphics/chromium/GraphicsLayerChromium.cpp:506
&gt; +    // Bail early if we have a large rotation.

Hm - we bail here for some things, but it looks like createActiveAnimation() returns nullptr for other &quot;bad&quot; values.  What&apos;s the rationale for the split?</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>642098</commentid>
    <comment_count>23</comment_count>
      <attachid>145914</attachid>
    <who name="">vollick</who>
    <bug_when>2012-06-05 19:04:02 -0700</bug_when>
    <thetext>Created attachment 145914
Patch

(In reply to comment #22)
&gt; (From update of attachment 145901 [details])
&gt; View in context: https://bugs.webkit.org/attachment.cgi?id=145901&amp;action=review
&gt;
&gt; &gt; Source/WebCore/platform/graphics/chromium/AnimationTranslationUtil.h:2
&gt; &gt; + * Copyright (C) 2010 Google Inc. All rights reserved.
&gt;
&gt; for this and other new files - it&apos;s 2012 now, and we prefer 2-clause for new files (although that&apos;s not a big deal)
Fixed.
&gt;
&gt; &gt; Source/WebCore/platform/graphics/chromium/AnimationTranslationUtil.h:43
&gt; &gt; +PassOwnPtr&lt;CCActiveAnimation&gt; createActiveAnimation(const KeyframeValueList&amp;, const Animation*, size_t animationId, size_t groupId, double timeOffset, const FloatSize&amp; boxSize);
&gt;
&gt; Would you mind documenting the behavior of this function with non-supported input (like non-invertable transforms or whatnot?)  Looks like it just returns nullptr, but it&apos;d be good to know that without having to read through the impl
Done.
&gt;
&gt; &gt; Source/WebCore/platform/graphics/chromium/GraphicsLayerChromium.cpp:506
&gt; &gt; +    // Bail early if we have a large rotation.
&gt;
&gt; Hm - we bail here for some things, but it looks like createActiveAnimation() returns nullptr for other &quot;bad&quot; values.  What&apos;s the rationale for the split?
I do the big angle check in GraphicsLayerChromium, because I use the protected GraphicsLayer::validateTransformOperations. I can do everything else in the AnimationTranslationUtil.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>643945</commentid>
    <comment_count>24</comment_count>
      <attachid>145914</attachid>
    <who name="James Robinson">jamesr</who>
    <bug_when>2012-06-07 14:59:14 -0700</bug_when>
    <thetext>Comment on attachment 145914
Patch

R=me</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>644181</commentid>
    <comment_count>25</comment_count>
      <attachid>145914</attachid>
    <who name="WebKit Review Bot">webkit.review.bot</who>
    <bug_when>2012-06-07 18:35:33 -0700</bug_when>
    <thetext>Comment on attachment 145914
Patch

Rejecting attachment 145914 from commit-queue.

Failed to run &quot;[&apos;/mnt/git/webkit-commit-queue/Tools/Scripts/webkit-patch&apos;, &apos;--status-host=queues.webkit.org&apos;, &apos;-...&quot; exit_code: 2

Last 500 characters of output:
t/chromium/tests/CCKeyframedAnimationCurveTest.cpp
patching file Source/WebKit/chromium/tests/CCLayerAnimationControllerTest.cpp
patching file Source/WebKit/chromium/tests/CCLayerTreeHostTest.cpp
patching file Source/WebKit/chromium/tests/GraphicsLayerChromiumTest.cpp
patching file Source/WebKit/chromium/tests/LayerChromiumTest.cpp

Failed to run &quot;[u&apos;/mnt/git/webkit-commit-queue/Tools/Scripts/svn-apply&apos;, u&apos;--force&apos;, u&apos;--reviewer&apos;, u&apos;James Robi...&quot; exit_code: 1 cwd: /mnt/git/webkit-commit-queue/

Full output: http://queues.webkit.org/results/12923212</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>644834</commentid>
    <comment_count>26</comment_count>
      <attachid>146609</attachid>
    <who name="">vollick</who>
    <bug_when>2012-06-08 11:03:45 -0700</bug_when>
    <thetext>Created attachment 146609
patch for landing

patch for landing</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>644896</commentid>
    <comment_count>27</comment_count>
      <attachid>146609</attachid>
    <who name="WebKit Review Bot">webkit.review.bot</who>
    <bug_when>2012-06-08 11:42:02 -0700</bug_when>
    <thetext>Comment on attachment 146609
patch for landing

Clearing flags on attachment: 146609

Committed r119850: &lt;http://trac.webkit.org/changeset/119850&gt;</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>644897</commentid>
    <comment_count>28</comment_count>
    <who name="WebKit Review Bot">webkit.review.bot</who>
    <bug_when>2012-06-08 11:42:08 -0700</bug_when>
    <thetext>All reviewed patches have been landed.  Closing bug.</thetext>
  </long_desc>
      
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>144422</attachid>
            <date>2012-05-28 18:45:58 -0700</date>
            <delta_ts>2012-05-31 14:47:25 -0700</delta_ts>
            <desc>Patch</desc>
            <filename>bug-87686-20120528214556.patch</filename>
            <type>text/plain</type>
            <size>88851</size>
            <attacher>vollick</attacher>
            
              <data encoding="base64">U3VidmVyc2lvbiBSZXZpc2lvbjogMTE4NjgwCmRpZmYgLS1naXQgYS9Tb3VyY2UvUGxhdGZvcm0v
Q2hhbmdlTG9nIGIvU291cmNlL1BsYXRmb3JtL0NoYW5nZUxvZwppbmRleCAyYzM4NmJmMjFjNTdk
YjJmNTAwZGJiYWJhYTU0MTFkMzhhMDViMzJhLi43YWE0M2MzMzI5ZWVmMmZiZmMxYWZmNmU3YjY4
YWMwYjMzNzczYjM5IDEwMDY0NAotLS0gYS9Tb3VyY2UvUGxhdGZvcm0vQ2hhbmdlTG9nCisrKyBi
L1NvdXJjZS9QbGF0Zm9ybS9DaGFuZ2VMb2cKQEAgLTEsMzEgKzEsMyBAQAotMjAxMi0wNS0yOCAg
SWFuIFZvbGxpY2sgIDx2b2xsaWNrQGNocm9taXVtLm9yZz4KLQotICAgICAgICBbY2hyb21pdW1d
IGNyZWF0ZSBXZWJUcmFuc2Zvcm1PcGVyYXRpb24gaW50ZXJmYWNlIGZvciBjaHJvbWl1bSBwbGF0
Zm9ybQotICAgICAgICBodHRwczovL2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9ODc1
MTAKLQotICAgICAgICBSZXZpZXdlZCBieSBOT0JPRFkgKE9PUFMhKS4KLQotICAgICAgICAqIFBs
YXRmb3JtLmd5cGk6Ci0gICAgICAgICogY2hyb21pdW0vcHVibGljL1dlYlRyYW5zZm9ybU9wZXJh
dGlvbnMuaDogQWRkZWQuCi0gICAgICAgIChXZWJLaXQpOgotICAgICAgICAoV2ViVHJhbnNmb3Jt
T3BlcmF0aW9ucyk6Ci0gICAgICAgIChXZWJUcmFuc2Zvcm1PcGVyYXRpb24pOgotICAgICAgICAq
IGNocm9taXVtL3NyYy9XZWJUcmFuc2Zvcm1PcGVyYXRpb25zLmNwcDogQWRkZWQuCi0gICAgICAg
IChXZWJLaXQpOgotICAgICAgICAoV2ViVHJhbnNmb3JtT3BlcmF0aW9uczo6V2ViVHJhbnNmb3Jt
T3BlcmF0aW9uc1ByaXZhdGUpOgotICAgICAgICAoV2ViS2l0OjpXZWJUcmFuc2Zvcm1PcGVyYXRp
b25zOjpXZWJUcmFuc2Zvcm1PcGVyYXRpb25zKToKLSAgICAgICAgKFdlYktpdDo6V2ViVHJhbnNm
b3JtT3BlcmF0aW9uczo6fldlYlRyYW5zZm9ybU9wZXJhdGlvbnMpOgotICAgICAgICAoV2ViS2l0
OjpXZWJUcmFuc2Zvcm1PcGVyYXRpb25zOjpvcGVyYXRvcj0pOgotICAgICAgICAoV2ViS2l0OjpX
ZWJUcmFuc2Zvcm1PcGVyYXRpb25zOjphcHBseSk6Ci0gICAgICAgIChXZWJLaXQ6OldlYlRyYW5z
Zm9ybU9wZXJhdGlvbnM6OmJsZW5kKToKLSAgICAgICAgKFdlYktpdDo6V2ViVHJhbnNmb3JtT3Bl
cmF0aW9uczo6bWF0Y2hlc1R5cGVzKToKLSAgICAgICAgKFdlYktpdDo6V2ViVHJhbnNmb3JtT3Bl
cmF0aW9uczo6YXBwZW5kVHJhbnNsYXRlKToKLSAgICAgICAgKFdlYktpdDo6V2ViVHJhbnNmb3Jt
T3BlcmF0aW9uczo6YXBwZW5kUm90YXRlKToKLSAgICAgICAgKFdlYktpdDo6V2ViVHJhbnNmb3Jt
T3BlcmF0aW9uczo6YXBwZW5kU2NhbGUpOgotICAgICAgICAoV2ViS2l0OjpXZWJUcmFuc2Zvcm1P
cGVyYXRpb25zOjphcHBlbmRTa2V3KToKLSAgICAgICAgKFdlYktpdDo6V2ViVHJhbnNmb3JtT3Bl
cmF0aW9uczo6YXBwZW5kUGVyc3BlY3RpdmUpOgotICAgICAgICAoV2ViS2l0OjpXZWJUcmFuc2Zv
cm1PcGVyYXRpb25zOjphcHBlbmRNYXRyaXgpOgotCiAyMDEyLTA1LTI1ICBLaW51a28gWWFzdWRh
ICA8a2ludWtvQGNocm9taXVtLm9yZz4KIAogICAgICAgICBbY2hyb21pdW1dIERlcHJlY2F0ZSBG
aWxlVXRpbGl0aWVzOjpnZXRGaWxlU2l6ZSBhbmQgZ2V0RmlsZU1vZGlmaWVkVGltZSBpbiBmYXZv
ciBvZiBnZXRGaWxlTWV0YWRhdGEKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJLaXQvY2hyb21pdW0v
Q2hhbmdlTG9nIGIvU291cmNlL1dlYktpdC9jaHJvbWl1bS9DaGFuZ2VMb2cKaW5kZXggNDI5MjU4
YjdlNDQ2MDgwMmRhMWY0YWU1ODZmMzM2NTRjODZhYjE0OS4uZjRhMzgzMDRkYzRlZGRjMDgxZTc1
MTU3YjBkMDkzZTc5OTM4YTllNiAxMDA2NDQKLS0tIGEvU291cmNlL1dlYktpdC9jaHJvbWl1bS9D
aGFuZ2VMb2cKKysrIGIvU291cmNlL1dlYktpdC9jaHJvbWl1bS9DaGFuZ2VMb2cKQEAgLTEsMTUg
KzEsMyBAQAotMjAxMi0wNS0yOCAgSWFuIFZvbGxpY2sgIDx2b2xsaWNrQGNocm9taXVtLm9yZz4K
LQotICAgICAgICBbY2hyb21pdW1dIGNyZWF0ZSBXZWJUcmFuc2Zvcm1PcGVyYXRpb24gaW50ZXJm
YWNlIGZvciBjaHJvbWl1bSBwbGF0Zm9ybQotICAgICAgICBodHRwczovL2J1Z3Mud2Via2l0Lm9y
Zy9zaG93X2J1Zy5jZ2k/aWQ9ODc1MTAKLQotICAgICAgICBSZXZpZXdlZCBieSBOT0JPRFkgKE9P
UFMhKS4KLQotICAgICAgICAqIFdlYktpdC5neXBpOgotICAgICAgICAqIHRlc3RzL1dlYlRyYW5z
Zm9ybU9wZXJhdGlvbnNUZXN0LmNwcDogQWRkZWQuCi0gICAgICAgIChURVNUKToKLSAgICAgICAg
KGNoZWNrUHJvZ3Jlc3MpOgotCiAyMDEyLTA1LTI4ICBQZXRlciBCZXZlcmxvbyAgPHBldGVyQGNo
cm9taXVtLm9yZz4KIAogICAgICAgICBbQ2hyb21pdW1dIEJ1aWxkIGZpeCBmb3IgdGhlIEFuZHJv
aWQgYm90LCBzZXQgQ1hYX3RhcmdldCBhdCBneXAgZ2VuZXJhdGlvbi10aW1lCmRpZmYgLS1naXQg
YS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9jaHJvbWl1bS9HcmFwaGljc0xheWVy
Q2hyb21pdW0uY3BwIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvY2hyb21pdW0v
R3JhcGhpY3NMYXllckNocm9taXVtLmNwcAppbmRleCAxODQzMzM2MDk1MWIyYmZjZWE3Y2IxMWJi
ZTkwMDFlYTk4NWY0ZTAxLi40YjA1YjJmNTEwYWNmNjYyYWEwMGFlMzcxZWFlYWFkYTRhMWU1Yjhh
IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9jaHJvbWl1bS9H
cmFwaGljc0xheWVyQ2hyb21pdW0uY3BwCisrKyBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dy
YXBoaWNzL2Nocm9taXVtL0dyYXBoaWNzTGF5ZXJDaHJvbWl1bS5jcHAKQEAgLTQ1LDE4ICs0NSwz
MiBAQAogCiAjaW5jbHVkZSAiR3JhcGhpY3NMYXllckNocm9taXVtLmgiCiAKKyNpbmNsdWRlICJj
Yy9DQ0FjdGl2ZUFuaW1hdGlvbi5oIgorI2luY2x1ZGUgImNjL0NDS2V5ZnJhbWVkQW5pbWF0aW9u
Q3VydmUuaCIKKwogI2luY2x1ZGUgIkFuaW1hdGlvbklkVmVuZG9yLmgiCiAjaW5jbHVkZSAiQ2Fu
dmFzMkRMYXllckNocm9taXVtLmgiCiAjaW5jbHVkZSAiQ29udGVudExheWVyQ2hyb21pdW0uaCIK
ICNpbmNsdWRlICJGbG9hdENvbnZlcnNpb24uaCIKICNpbmNsdWRlICJGbG9hdFJlY3QuaCIKKyNp
bmNsdWRlICJJZGVudGl0eVRyYW5zZm9ybU9wZXJhdGlvbi5oIgogI2luY2x1ZGUgIkltYWdlLmgi
CiAjaW5jbHVkZSAiSW1hZ2VMYXllckNocm9taXVtLmgiCiAjaW5jbHVkZSAiTGF5ZXJDaHJvbWl1
bS5oIgorI2luY2x1ZGUgIkxlbmd0aC5oIgorI2luY2x1ZGUgIkxlbmd0aEZ1bmN0aW9ucy5oIgog
I2luY2x1ZGUgIkxpbmtIaWdobGlnaHQuaCIKKyNpbmNsdWRlICJNYXRyaXgzRFRyYW5zZm9ybU9w
ZXJhdGlvbi5oIgorI2luY2x1ZGUgIk1hdHJpeFRyYW5zZm9ybU9wZXJhdGlvbi5oIgorI2luY2x1
ZGUgIlBlcnNwZWN0aXZlVHJhbnNmb3JtT3BlcmF0aW9uLmgiCiAjaW5jbHVkZSAiUGxhdGZvcm1T
dHJpbmcuaCIKKyNpbmNsdWRlICJSb3RhdGVUcmFuc2Zvcm1PcGVyYXRpb24uaCIKKyNpbmNsdWRl
ICJTY2FsZVRyYW5zZm9ybU9wZXJhdGlvbi5oIgorI2luY2x1ZGUgIlNrZXdUcmFuc2Zvcm1PcGVy
YXRpb24uaCIKICNpbmNsdWRlICJTa01hdHJpeDQ0LmgiCiAjaW5jbHVkZSAiU3lzdGVtVGltZS5o
IgorI2luY2x1ZGUgIlRyYW5zZm9ybU9wZXJhdGlvbnMuaCIKKyNpbmNsdWRlICJUcmFuc2xhdGVU
cmFuc2Zvcm1PcGVyYXRpb24uaCIKIAogI2luY2x1ZGUgPHB1YmxpYy9XZWJGaWx0ZXJPcGVyYXRp
b24uaD4KICNpbmNsdWRlIDxwdWJsaWMvV2ViRmlsdGVyT3BlcmF0aW9ucy5oPgpAQCAtNjQsNiAr
NzgsNyBAQAogI2luY2x1ZGUgPHB1YmxpYy9XZWJGbG9hdFJlY3QuaD4KICNpbmNsdWRlIDxwdWJs
aWMvV2ViU2l6ZS5oPgogI2luY2x1ZGUgPHB1YmxpYy9XZWJUcmFuc2Zvcm1hdGlvbk1hdHJpeC5o
PgorI2luY2x1ZGUgPHB1YmxpYy9XZWJUcmFuc2Zvcm1PcGVyYXRpb25zLmg+CiAjaW5jbHVkZSA8
d3RmL0N1cnJlbnRUaW1lLmg+CiAjaW5jbHVkZSA8d3RmL1N0cmluZ0V4dHJhcy5oPgogI2luY2x1
ZGUgPHd0Zi90ZXh0L0NTdHJpbmcuaD4KQEAgLTQ5OCwxMCArNTEzLDE4MSBAQCB2b2lkIEdyYXBo
aWNzTGF5ZXJDaHJvbWl1bTo6c2V0Q29udGVudHNUb0NhbnZhcyhQbGF0Zm9ybUxheWVyKiBwbGF0
Zm9ybUxheWVyKQogICAgICAgICB1cGRhdGVDaGlsZExpc3QoKTsKIH0KIAorV2ViVHJhbnNmb3Jt
T3BlcmF0aW9ucyB0b1dlYlRyYW5zZm9ybU9wZXJhdGlvbnMoY29uc3QgVHJhbnNmb3JtT3BlcmF0
aW9ucyYgdHJhbnNmb3JtT3BlcmF0aW9ucywgY29uc3QgRmxvYXRTaXplJiBib3hTaXplKQorewor
ICAgIC8vIFdlIG5lZWQgdG8gZG8gYSBkZWVwIGNvcHkgdGhlIHRyYW5zZm9ybU9wZXJhdGlvbnMg
bWF5IGNvbnRhaW4gcmVmIHBvaW50ZXJzIHRvIFRyYW5zZm9ybU9wZXJhdGlvbiBvYmplY3RzLgor
ICAgIFdlYlRyYW5zZm9ybU9wZXJhdGlvbnMgd2ViVHJhbnNmb3JtT3BlcmF0aW9uczsKKyAgICBm
b3IgKHNpemVfdCBqID0gMDsgaiA8IHRyYW5zZm9ybU9wZXJhdGlvbnMuc2l6ZSgpOyArK2opIHsK
KyAgICAgICAgVHJhbnNmb3JtT3BlcmF0aW9uOjpPcGVyYXRpb25UeXBlIG9wZXJhdGlvblR5cGUg
PSB0cmFuc2Zvcm1PcGVyYXRpb25zLm9wZXJhdGlvbnMoKVtqXS0+Z2V0T3BlcmF0aW9uVHlwZSgp
OworICAgICAgICBzd2l0Y2ggKG9wZXJhdGlvblR5cGUpIHsKKyAgICAgICAgY2FzZSBUcmFuc2Zv
cm1PcGVyYXRpb246OlNDQUxFX1g6CisgICAgICAgIGNhc2UgVHJhbnNmb3JtT3BlcmF0aW9uOjpT
Q0FMRV9ZOgorICAgICAgICBjYXNlIFRyYW5zZm9ybU9wZXJhdGlvbjo6U0NBTEVfWjoKKyAgICAg
ICAgY2FzZSBUcmFuc2Zvcm1PcGVyYXRpb246OlNDQUxFXzNEOgorICAgICAgICBjYXNlIFRyYW5z
Zm9ybU9wZXJhdGlvbjo6U0NBTEU6IHsKKyAgICAgICAgICAgIFNjYWxlVHJhbnNmb3JtT3BlcmF0
aW9uKiB0cmFuc2Zvcm0gPSBzdGF0aWNfY2FzdDxTY2FsZVRyYW5zZm9ybU9wZXJhdGlvbio+KHRy
YW5zZm9ybU9wZXJhdGlvbnMub3BlcmF0aW9ucygpW2pdLmdldCgpKTsKKyAgICAgICAgICAgIHdl
YlRyYW5zZm9ybU9wZXJhdGlvbnMuYXBwZW5kU2NhbGUodHJhbnNmb3JtLT54KCksIHRyYW5zZm9y
bS0+eSgpLCB0cmFuc2Zvcm0tPnooKSk7CisgICAgICAgICAgICBicmVhazsKKyAgICAgICAgfQor
ICAgICAgICBjYXNlIFRyYW5zZm9ybU9wZXJhdGlvbjo6VFJBTlNMQVRFX1g6CisgICAgICAgIGNh
c2UgVHJhbnNmb3JtT3BlcmF0aW9uOjpUUkFOU0xBVEVfWToKKyAgICAgICAgY2FzZSBUcmFuc2Zv
cm1PcGVyYXRpb246OlRSQU5TTEFURV9aOgorICAgICAgICBjYXNlIFRyYW5zZm9ybU9wZXJhdGlv
bjo6VFJBTlNMQVRFXzNEOgorICAgICAgICBjYXNlIFRyYW5zZm9ybU9wZXJhdGlvbjo6VFJBTlNM
QVRFOiB7CisgICAgICAgICAgICBUcmFuc2xhdGVUcmFuc2Zvcm1PcGVyYXRpb24qIHRyYW5zZm9y
bSA9IHN0YXRpY19jYXN0PFRyYW5zbGF0ZVRyYW5zZm9ybU9wZXJhdGlvbio+KHRyYW5zZm9ybU9w
ZXJhdGlvbnMub3BlcmF0aW9ucygpW2pdLmdldCgpKTsKKyAgICAgICAgICAgIHdlYlRyYW5zZm9y
bU9wZXJhdGlvbnMuYXBwZW5kVHJhbnNsYXRlKGZsb2F0VmFsdWVGb3JMZW5ndGgodHJhbnNmb3Jt
LT54KCksIGJveFNpemUud2lkdGgoKSksIGZsb2F0VmFsdWVGb3JMZW5ndGgodHJhbnNmb3JtLT55
KCksIGJveFNpemUuaGVpZ2h0KCkpLCBmbG9hdFZhbHVlRm9yTGVuZ3RoKHRyYW5zZm9ybS0+eigp
LCAxKSk7CisgICAgICAgICAgICBicmVhazsKKyAgICAgICAgfQorICAgICAgICBjYXNlIFRyYW5z
Zm9ybU9wZXJhdGlvbjo6Uk9UQVRFX1g6CisgICAgICAgIGNhc2UgVHJhbnNmb3JtT3BlcmF0aW9u
OjpST1RBVEVfWToKKyAgICAgICAgY2FzZSBUcmFuc2Zvcm1PcGVyYXRpb246OlJPVEFURV8zRDoK
KyAgICAgICAgY2FzZSBUcmFuc2Zvcm1PcGVyYXRpb246OlJPVEFURTogeworICAgICAgICAgICAg
Um90YXRlVHJhbnNmb3JtT3BlcmF0aW9uKiB0cmFuc2Zvcm0gPSBzdGF0aWNfY2FzdDxSb3RhdGVU
cmFuc2Zvcm1PcGVyYXRpb24qPih0cmFuc2Zvcm1PcGVyYXRpb25zLm9wZXJhdGlvbnMoKVtqXS5n
ZXQoKSk7CisgICAgICAgICAgICB3ZWJUcmFuc2Zvcm1PcGVyYXRpb25zLmFwcGVuZFJvdGF0ZSh0
cmFuc2Zvcm0tPngoKSwgdHJhbnNmb3JtLT55KCksIHRyYW5zZm9ybS0+eigpLCB0cmFuc2Zvcm0t
PmFuZ2xlKCkpOworICAgICAgICAgICAgYnJlYWs7CisgICAgICAgIH0KKyAgICAgICAgY2FzZSBU
cmFuc2Zvcm1PcGVyYXRpb246OlNLRVdfWDoKKyAgICAgICAgY2FzZSBUcmFuc2Zvcm1PcGVyYXRp
b246OlNLRVdfWToKKyAgICAgICAgY2FzZSBUcmFuc2Zvcm1PcGVyYXRpb246OlNLRVc6IHsKKyAg
ICAgICAgICAgIFNrZXdUcmFuc2Zvcm1PcGVyYXRpb24qIHRyYW5zZm9ybSA9IHN0YXRpY19jYXN0
PFNrZXdUcmFuc2Zvcm1PcGVyYXRpb24qPih0cmFuc2Zvcm1PcGVyYXRpb25zLm9wZXJhdGlvbnMo
KVtqXS5nZXQoKSk7CisgICAgICAgICAgICB3ZWJUcmFuc2Zvcm1PcGVyYXRpb25zLmFwcGVuZFNr
ZXcodHJhbnNmb3JtLT5hbmdsZVgoKSwgdHJhbnNmb3JtLT5hbmdsZVkoKSk7CisgICAgICAgICAg
ICBicmVhazsKKyAgICAgICAgfQorICAgICAgICBjYXNlIFRyYW5zZm9ybU9wZXJhdGlvbjo6TUFU
UklYOiB7CisgICAgICAgICAgICBNYXRyaXhUcmFuc2Zvcm1PcGVyYXRpb24qIHRyYW5zZm9ybSA9
IHN0YXRpY19jYXN0PE1hdHJpeFRyYW5zZm9ybU9wZXJhdGlvbio+KHRyYW5zZm9ybU9wZXJhdGlv
bnMub3BlcmF0aW9ucygpW2pdLmdldCgpKTsKKyAgICAgICAgICAgIFRyYW5zZm9ybWF0aW9uTWF0
cml4IG0gPSB0cmFuc2Zvcm0tPm1hdHJpeCgpOworICAgICAgICAgICAgd2ViVHJhbnNmb3JtT3Bl
cmF0aW9ucy5hcHBlbmRNYXRyaXgoV2ViVHJhbnNmb3JtYXRpb25NYXRyaXgobSkpOworICAgICAg
ICAgICAgYnJlYWs7CisgICAgICAgIH0KKyAgICAgICAgY2FzZSBUcmFuc2Zvcm1PcGVyYXRpb246
Ok1BVFJJWF8zRDogeworICAgICAgICAgICAgTWF0cml4M0RUcmFuc2Zvcm1PcGVyYXRpb24qIHRy
YW5zZm9ybSA9IHN0YXRpY19jYXN0PE1hdHJpeDNEVHJhbnNmb3JtT3BlcmF0aW9uKj4odHJhbnNm
b3JtT3BlcmF0aW9ucy5vcGVyYXRpb25zKClbal0uZ2V0KCkpOworICAgICAgICAgICAgVHJhbnNm
b3JtYXRpb25NYXRyaXggbSA9IHRyYW5zZm9ybS0+bWF0cml4KCk7CisgICAgICAgICAgICB3ZWJU
cmFuc2Zvcm1PcGVyYXRpb25zLmFwcGVuZE1hdHJpeChXZWJUcmFuc2Zvcm1hdGlvbk1hdHJpeCht
KSk7CisgICAgICAgICAgICBicmVhazsKKyAgICAgICAgfQorICAgICAgICBjYXNlIFRyYW5zZm9y
bU9wZXJhdGlvbjo6UEVSU1BFQ1RJVkU6IHsKKyAgICAgICAgICAgIFBlcnNwZWN0aXZlVHJhbnNm
b3JtT3BlcmF0aW9uKiB0cmFuc2Zvcm0gPSBzdGF0aWNfY2FzdDxQZXJzcGVjdGl2ZVRyYW5zZm9y
bU9wZXJhdGlvbio+KHRyYW5zZm9ybU9wZXJhdGlvbnMub3BlcmF0aW9ucygpW2pdLmdldCgpKTsK
KyAgICAgICAgICAgIHdlYlRyYW5zZm9ybU9wZXJhdGlvbnMuYXBwZW5kUGVyc3BlY3RpdmUoZmxv
YXRWYWx1ZUZvckxlbmd0aCh0cmFuc2Zvcm0tPnBlcnNwZWN0aXZlKCksIDApKTsKKyAgICAgICAg
ICAgIGJyZWFrOworICAgICAgICB9CisgICAgICAgIGNhc2UgVHJhbnNmb3JtT3BlcmF0aW9uOjpJ
REVOVElUWToKKyAgICAgICAgY2FzZSBUcmFuc2Zvcm1PcGVyYXRpb246Ok5PTkU6CisgICAgICAg
ICAgICAvLyBEbyBub3RoaW5nLgorICAgICAgICAgICAgYnJlYWs7CisgICAgICAgIH0gLy8gc3dp
dGNoCisgICAgfSAvLyBmb3IgZWFjaCBvcGVyYXRpb24KKworICAgIHJldHVybiB3ZWJUcmFuc2Zv
cm1PcGVyYXRpb25zOworfQorCit0ZW1wbGF0ZSA8Y2xhc3MgVmFsdWUsIGNsYXNzIEtleWZyYW1l
LCBjbGFzcyBDdXJ2ZT4KK3ZvaWQgYXBwZW5kS2V5ZnJhbWUoQ3VydmUmIGN1cnZlLCBkb3VibGUg
a2V5VGltZSwgY29uc3QgVmFsdWUqIHZhbHVlLCBQYXNzT3duUHRyPENDVGltaW5nRnVuY3Rpb24+
IHRpbWluZ0Z1bmN0aW9uLCBjb25zdCBGbG9hdFNpemUmKQoreworICAgIGN1cnZlLmFkZEtleWZy
YW1lKEtleWZyYW1lOjpjcmVhdGUoa2V5VGltZSwgdmFsdWUtPnZhbHVlKCksIHRpbWluZ0Z1bmN0
aW9uKSk7Cit9CisKK3RlbXBsYXRlIDw+Cit2b2lkIGFwcGVuZEtleWZyYW1lPFRyYW5zZm9ybUFu
aW1hdGlvblZhbHVlLCBDQ1RyYW5zZm9ybUtleWZyYW1lLCBDQ0tleWZyYW1lZFRyYW5zZm9ybUFu
aW1hdGlvbkN1cnZlPihDQ0tleWZyYW1lZFRyYW5zZm9ybUFuaW1hdGlvbkN1cnZlJiBjdXJ2ZSwg
ZG91YmxlIGtleVRpbWUsIGNvbnN0IFRyYW5zZm9ybUFuaW1hdGlvblZhbHVlKiB2YWx1ZSwgUGFz
c093blB0cjxDQ1RpbWluZ0Z1bmN0aW9uPiB0aW1pbmdGdW5jdGlvbiwgY29uc3QgRmxvYXRTaXpl
JiBib3hTaXplKQoreworICAgIGN1cnZlLmFkZEtleWZyYW1lKENDVHJhbnNmb3JtS2V5ZnJhbWU6
OmNyZWF0ZShrZXlUaW1lLCB0b1dlYlRyYW5zZm9ybU9wZXJhdGlvbnMoKnZhbHVlLT52YWx1ZSgp
LCBib3hTaXplKSwgdGltaW5nRnVuY3Rpb24pKTsKK30KKwordGVtcGxhdGUgPGNsYXNzIFZhbHVl
LCBjbGFzcyBLZXlmcmFtZSwgY2xhc3MgQ3VydmU+CitQYXNzT3duUHRyPENDQWN0aXZlQW5pbWF0
aW9uPiBjcmVhdGVBY3RpdmVBbmltYXRpb24oY29uc3QgS2V5ZnJhbWVWYWx1ZUxpc3QmIHZhbHVl
TGlzdCwgY29uc3QgQW5pbWF0aW9uKiBhbmltYXRpb24sIHNpemVfdCBhbmltYXRpb25JZCwgc2l6
ZV90IGdyb3VwSWQsIGRvdWJsZSB0aW1lT2Zmc2V0LCBDQ0FjdGl2ZUFuaW1hdGlvbjo6VGFyZ2V0
UHJvcGVydHkgdGFyZ2V0UHJvcGVydHksIGNvbnN0IEZsb2F0U2l6ZSYgYm94U2l6ZSkKK3sKKyAg
ICBib29sIGFsdGVybmF0ZSA9IGZhbHNlOworICAgIGJvb2wgcmV2ZXJzZSA9IGZhbHNlOworICAg
IGlmIChhbmltYXRpb24gJiYgYW5pbWF0aW9uLT5pc0RpcmVjdGlvblNldCgpKSB7CisgICAgICAg
IEFuaW1hdGlvbjo6QW5pbWF0aW9uRGlyZWN0aW9uIGRpcmVjdGlvbiA9IGFuaW1hdGlvbi0+ZGly
ZWN0aW9uKCk7CisgICAgICAgIGlmIChkaXJlY3Rpb24gPT0gQW5pbWF0aW9uOjpBbmltYXRpb25E
aXJlY3Rpb25BbHRlcm5hdGUgfHwgZGlyZWN0aW9uID09IEFuaW1hdGlvbjo6QW5pbWF0aW9uRGly
ZWN0aW9uQWx0ZXJuYXRlUmV2ZXJzZSkKKyAgICAgICAgICAgIGFsdGVybmF0ZSA9IHRydWU7Cisg
ICAgICAgIGlmIChkaXJlY3Rpb24gPT0gQW5pbWF0aW9uOjpBbmltYXRpb25EaXJlY3Rpb25SZXZl
cnNlIHx8IGRpcmVjdGlvbiA9PSBBbmltYXRpb246OkFuaW1hdGlvbkRpcmVjdGlvbkFsdGVybmF0
ZVJldmVyc2UpCisgICAgICAgICAgICByZXZlcnNlID0gdHJ1ZTsKKyAgICB9CisKKyAgICBPd25Q
dHI8Q3VydmU+IGN1cnZlID0gQ3VydmU6OmNyZWF0ZSgpOworICAgIFZlY3RvcjxLZXlmcmFtZT4g
a2V5ZnJhbWVzOworCisgICAgZm9yIChzaXplX3QgaSA9IDA7IGkgPCB2YWx1ZUxpc3Quc2l6ZSgp
OyBpKyspIHsKKyAgICAgICAgc2l6ZV90IGluZGV4ID0gcmV2ZXJzZSA/IHZhbHVlTGlzdC5zaXpl
KCkgLSBpIC0gMSA6IGk7CisKKyAgICAgICAgY29uc3QgVmFsdWUqIG9yaWdpbmFsVmFsdWUgPSBz
dGF0aWNfY2FzdDxjb25zdCBWYWx1ZSo+KHZhbHVlTGlzdC5hdChpbmRleCkpOworCisgICAgICAg
IE93blB0cjxDQ1RpbWluZ0Z1bmN0aW9uPiB0aW1pbmdGdW5jdGlvbjsKKyAgICAgICAgY29uc3Qg
VGltaW5nRnVuY3Rpb24qIG9yaWdpbmFsVGltaW5nRnVuY3Rpb24gPSBvcmlnaW5hbFZhbHVlLT50
aW1pbmdGdW5jdGlvbigpOworCisgICAgICAgIC8vIElmIHRoZXJlIGhhc24ndCBiZWVuIGEgdGlt
aW5nIGZ1bmN0aW9uIGFzc29jaWF0ZWQgd2l0aCB0aGlzIGtleWZyYW1lLCB1c2UgdGhlCisgICAg
ICAgIC8vIGFuaW1hdGlvbidzIHRpbWluZyBmdW5jdGlvbiwgaWYgd2UgaGF2ZSBvbmUuCisgICAg
ICAgIGlmICghb3JpZ2luYWxUaW1pbmdGdW5jdGlvbiAmJiBhbmltYXRpb24tPmlzVGltaW5nRnVu
Y3Rpb25TZXQoKSkKKyAgICAgICAgICAgIG9yaWdpbmFsVGltaW5nRnVuY3Rpb24gPSBhbmltYXRp
b24tPnRpbWluZ0Z1bmN0aW9uKCkuZ2V0KCk7CisKKyAgICAgICAgaWYgKG9yaWdpbmFsVGltaW5n
RnVuY3Rpb24pIHsKKyAgICAgICAgICAgIHN3aXRjaCAob3JpZ2luYWxUaW1pbmdGdW5jdGlvbi0+
dHlwZSgpKSB7CisgICAgICAgICAgICBjYXNlIFRpbWluZ0Z1bmN0aW9uOjpTdGVwc0Z1bmN0aW9u
OgorICAgICAgICAgICAgICAgIC8vIEZJWE1FOiBhZGQgc3VwcG9ydCBmb3Igc3RlcHMgdGltaW5n
IGZ1bmN0aW9uLgorICAgICAgICAgICAgICAgIHJldHVybiBudWxscHRyOworICAgICAgICAgICAg
Y2FzZSBUaW1pbmdGdW5jdGlvbjo6TGluZWFyRnVuY3Rpb246CisgICAgICAgICAgICAgICAgLy8g
RG9uJ3Qgc2V0IHRoZSB0aW1pbmcgZnVuY3Rpb24uIEtleWZyYW1lcyBhcmUgaW50ZXJwb2xhdGVk
IGxpbmVhcmx5IGlmIHRoZXJlIGlzIG5vIHRpbWluZyBmdW5jdGlvbi4KKyAgICAgICAgICAgICAg
ICBicmVhazsKKyAgICAgICAgICAgIGNhc2UgVGltaW5nRnVuY3Rpb246OkN1YmljQmV6aWVyRnVu
Y3Rpb246CisgICAgICAgICAgICAgICAgY29uc3QgQ3ViaWNCZXppZXJUaW1pbmdGdW5jdGlvbiog
b3JpZ2luYWxCZXppZXJUaW1pbmdGdW5jdGlvbiA9IHN0YXRpY19jYXN0PGNvbnN0IEN1YmljQmV6
aWVyVGltaW5nRnVuY3Rpb24qPihvcmlnaW5hbFRpbWluZ0Z1bmN0aW9uKTsKKyAgICAgICAgICAg
ICAgICB0aW1pbmdGdW5jdGlvbiA9IENDQ3ViaWNCZXppZXJUaW1pbmdGdW5jdGlvbjo6Y3JlYXRl
KG9yaWdpbmFsQmV6aWVyVGltaW5nRnVuY3Rpb24tPngxKCksIG9yaWdpbmFsQmV6aWVyVGltaW5n
RnVuY3Rpb24tPnkxKCksIG9yaWdpbmFsQmV6aWVyVGltaW5nRnVuY3Rpb24tPngyKCksIG9yaWdp
bmFsQmV6aWVyVGltaW5nRnVuY3Rpb24tPnkyKCkpOworICAgICAgICAgICAgICAgIGJyZWFrOwor
ICAgICAgICAgICAgfSAvLyBzd2l0Y2gKKyAgICAgICAgfSBlbHNlCisgICAgICAgICAgICB0aW1p
bmdGdW5jdGlvbiA9IENDRWFzZVRpbWluZ0Z1bmN0aW9uOjpjcmVhdGUoKTsKKworICAgICAgICBk
b3VibGUgZHVyYXRpb24gPSAoYW5pbWF0aW9uICYmIGFuaW1hdGlvbi0+aXNEdXJhdGlvblNldCgp
KSA/IGFuaW1hdGlvbi0+ZHVyYXRpb24oKSA6IDE7CisgICAgICAgIGRvdWJsZSBrZXlUaW1lID0g
b3JpZ2luYWxWYWx1ZS0+a2V5VGltZSgpICogZHVyYXRpb247CisgICAgICAgIGlmIChyZXZlcnNl
KQorICAgICAgICAgICAga2V5VGltZSA9IGR1cmF0aW9uIC0ga2V5VGltZTsKKyAgICAgICAgYXBw
ZW5kS2V5ZnJhbWU8VmFsdWUsIEtleWZyYW1lLCBDdXJ2ZT4oKmN1cnZlLCBrZXlUaW1lLCBvcmln
aW5hbFZhbHVlLCB0aW1pbmdGdW5jdGlvbi5yZWxlYXNlKCksIGJveFNpemUpOworICAgIH0KKwor
ICAgIE93blB0cjxDQ0FjdGl2ZUFuaW1hdGlvbj4gYW5pbSA9IENDQWN0aXZlQW5pbWF0aW9uOjpj
cmVhdGUoY3VydmUucmVsZWFzZSgpLCBhbmltYXRpb25JZCwgZ3JvdXBJZCwgdGFyZ2V0UHJvcGVy
dHkpOworCisgICAgQVNTRVJUKGFuaW0uZ2V0KCkpOworCisgICAgaWYgKGFuaW0uZ2V0KCkpIHsK
KyAgICAgICAgaW50IGl0ZXJhdGlvbnMgPSAoYW5pbWF0aW9uICYmIGFuaW1hdGlvbi0+aXNJdGVy
YXRpb25Db3VudFNldCgpKSA/IGFuaW1hdGlvbi0+aXRlcmF0aW9uQ291bnQoKSA6IDE7CisgICAg
ICAgIGFuaW0tPnNldEl0ZXJhdGlvbnMoaXRlcmF0aW9ucyk7CisgICAgICAgIGFuaW0tPnNldEFs
dGVybmF0ZXNEaXJlY3Rpb24oYWx0ZXJuYXRlKTsKKyAgICB9CisKKyAgICAvLyBJbiBvcmRlciB0
byBhdm9pZCBza2V3LCB0aGUgbWFpbiB0aHJlYWQgYW5pbWF0aW9uIGNhbm5vdCB0aWNrIHVudGls
IGl0IGhhcyByZWNlaXZlZCB0aGUgc3RhcnQgdGltZSBvZgorICAgIC8vIHRoZSBjb3JyZXNwb25k
aW5nIGltcGwgdGhyZWFkIGFuaW1hdGlvbi4KKyAgICBhbmltLT5zZXROZWVkc1N5bmNocm9uaXpl
ZFN0YXJ0VGltZSh0cnVlKTsKKworICAgIC8vIElmIHRpbWVPZmZzZXQgPiAwLCB0aGVuIHRoZSBh
bmltYXRpb24gaGFzIHN0YXJ0ZWQgaW4gdGhlIHBhc3QuCisgICAgYW5pbS0+c2V0VGltZU9mZnNl
dCh0aW1lT2Zmc2V0KTsKKworICAgIHJldHVybiBhbmltLnJlbGVhc2UoKTsKK30KKwogYm9vbCBH
cmFwaGljc0xheWVyQ2hyb21pdW06OmFkZEFuaW1hdGlvbihjb25zdCBLZXlmcmFtZVZhbHVlTGlz
dCYgdmFsdWVzLCBjb25zdCBJbnRTaXplJiBib3hTaXplLCBjb25zdCBBbmltYXRpb24qIGFuaW1h
dGlvbiwgY29uc3QgU3RyaW5nJiBhbmltYXRpb25OYW1lLCBkb3VibGUgdGltZU9mZnNldCkKIHsK
ICAgICBwcmltYXJ5TGF5ZXIoKS51bndyYXA8TGF5ZXJDaHJvbWl1bT4oKS0+c2V0TGF5ZXJBbmlt
YXRpb25EZWxlZ2F0ZSh0aGlzKTsKLSAgICByZXR1cm4gcHJpbWFyeUxheWVyKCkudW53cmFwPExh
eWVyQ2hyb21pdW0+KCktPmFkZEFuaW1hdGlvbih2YWx1ZXMsIGJveFNpemUsIGFuaW1hdGlvbiwg
bWFwQW5pbWF0aW9uTmFtZVRvSWQoYW5pbWF0aW9uTmFtZSksIEFuaW1hdGlvbklkVmVuZG9yOjpn
ZXROZXh0R3JvdXBJZCgpLCB0aW1lT2Zmc2V0KTsKKworICAgIGludCBhbmltYXRpb25JZCA9IG1h
cEFuaW1hdGlvbk5hbWVUb0lkKGFuaW1hdGlvbk5hbWUpOworICAgIGludCBncm91cElkID0gQW5p
bWF0aW9uSWRWZW5kb3I6OmdldE5leHRHcm91cElkKCk7CisKKyAgICBPd25QdHI8Q0NBY3RpdmVB
bmltYXRpb24+IHRvQWRkOworICAgIGlmICh2YWx1ZXMucHJvcGVydHkoKSA9PSBBbmltYXRlZFBy
b3BlcnR5V2Via2l0VHJhbnNmb3JtKSB7CisgICAgICAgIGJvb2wgaGFzUm90YXRpb25PZk1vcmVU
aGFuMTgwRGVncmVlcyA9IGZhbHNlOworICAgICAgICB2YWxpZGF0ZVRyYW5zZm9ybU9wZXJhdGlv
bnModmFsdWVzLCBoYXNSb3RhdGlvbk9mTW9yZVRoYW4xODBEZWdyZWVzKTsKKyAgICAgICAgaWYg
KGhhc1JvdGF0aW9uT2ZNb3JlVGhhbjE4MERlZ3JlZXMpCisgICAgICAgICAgICByZXR1cm4gZmFs
c2U7CisgICAgICAgIHRvQWRkID0gY3JlYXRlQWN0aXZlQW5pbWF0aW9uPFRyYW5zZm9ybUFuaW1h
dGlvblZhbHVlLCBDQ1RyYW5zZm9ybUtleWZyYW1lLCBDQ0tleWZyYW1lZFRyYW5zZm9ybUFuaW1h
dGlvbkN1cnZlPih2YWx1ZXMsIGFuaW1hdGlvbiwgYW5pbWF0aW9uSWQsIGdyb3VwSWQsIHRpbWVP
ZmZzZXQsIENDQWN0aXZlQW5pbWF0aW9uOjpUcmFuc2Zvcm0sIEZsb2F0U2l6ZShib3hTaXplKSk7
CisgICAgfSBlbHNlIGlmICh2YWx1ZXMucHJvcGVydHkoKSA9PSBBbmltYXRlZFByb3BlcnR5T3Bh
Y2l0eSkKKyAgICAgICAgdG9BZGQgPSBjcmVhdGVBY3RpdmVBbmltYXRpb248RmxvYXRBbmltYXRp
b25WYWx1ZSwgQ0NGbG9hdEtleWZyYW1lLCBDQ0tleWZyYW1lZEZsb2F0QW5pbWF0aW9uQ3VydmU+
KHZhbHVlcywgYW5pbWF0aW9uLCBhbmltYXRpb25JZCwgZ3JvdXBJZCwgdGltZU9mZnNldCwgQ0NB
Y3RpdmVBbmltYXRpb246Ok9wYWNpdHksIEZsb2F0U2l6ZSgpKTsKKworICAgIGlmICh0b0FkZC5n
ZXQoKSkgeworICAgICAgICAvLyBSZW1vdmUgYW55IGV4aXN0aW5nIGFuaW1hdGlvbnMgd2l0aCB0
aGUgc2FtZSBhbmltYXRpb24gaWQgYW5kIHRhcmdldCBwcm9wZXJ0eS4KKyAgICAgICAgcHJpbWFy
eUxheWVyKCkudW53cmFwPExheWVyQ2hyb21pdW0+KCktPmxheWVyQW5pbWF0aW9uQ29udHJvbGxl
cigpLT5yZW1vdmVBbmltYXRpb24odG9BZGQtPmlkKCksIHRvQWRkLT50YXJnZXRQcm9wZXJ0eSgp
KTsKKyAgICAgICAgcmV0dXJuIHByaW1hcnlMYXllcigpLnVud3JhcDxMYXllckNocm9taXVtPigp
LT5hZGRBbmltYXRpb24odG9BZGQucmVsZWFzZSgpKTsKKyAgICB9CisKKyAgICByZXR1cm4gZmFs
c2U7CiB9CiAKIHZvaWQgR3JhcGhpY3NMYXllckNocm9taXVtOjpwYXVzZUFuaW1hdGlvbihjb25z
dCBTdHJpbmcmIGFuaW1hdGlvbk5hbWUsIGRvdWJsZSB0aW1lT2Zmc2V0KQpkaWZmIC0tZ2l0IGEv
U291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvY2hyb21pdW0vTGF5ZXJDaHJvbWl1bS5j
cHAgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9jaHJvbWl1bS9MYXllckNocm9t
aXVtLmNwcAppbmRleCA3NDQ1OWE4NTFkMWFjMjZhZWVhODQyMWE0M2UxNWY4M2NmNDFkMDMwLi40
NDM2YWQ2MmRmNWQ2YmVhOTk2NzYxZDExNzgyZDg4NmQzYjRjYWQ1IDEwMDY0NAotLS0gYS9Tb3Vy
Y2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9jaHJvbWl1bS9MYXllckNocm9taXVtLmNwcAor
KysgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9jaHJvbWl1bS9MYXllckNocm9t
aXVtLmNwcApAQCAtMzcsNiArMzcsNyBAQAogI2luY2x1ZGUgIlBsYXRmb3JtQ29udGV4dFNraWEu
aCIKICNpbmNsdWRlICJSZW5kZXJMYXllckJhY2tpbmcuaCIKICNpbmNsdWRlICJUZXh0U3RyZWFt
LmgiCisjaW5jbHVkZSAiY2MvQ0NBY3RpdmVBbmltYXRpb24uaCIKICNpbmNsdWRlICJjYy9DQ0Fu
aW1hdGlvbkV2ZW50cy5oIgogI2luY2x1ZGUgImNjL0NDTGF5ZXJBbmltYXRpb25Db250cm9sbGVy
LmgiCiAjaW5jbHVkZSAiY2MvQ0NMYXllckFuaW1hdGlvbkRlbGVnYXRlLmgiCkBAIC01OTgsMTcg
KzU5OSwxNSBAQCB2b2lkIExheWVyQ2hyb21pdW06OnNldFRyYW5zZm9ybUZyb21BbmltYXRpb24o
Y29uc3QgVHJhbnNmb3JtYXRpb25NYXRyaXgmIHRyYW5zZgogICAgIG1fdHJhbnNmb3JtID0gdHJh
bnNmb3JtOwogfQogCi1ib29sIExheWVyQ2hyb21pdW06OmFkZEFuaW1hdGlvbihjb25zdCBLZXlm
cmFtZVZhbHVlTGlzdCYgdmFsdWVzLCBjb25zdCBJbnRTaXplJiBib3hTaXplLCBjb25zdCBBbmlt
YXRpb24qIGFuaW1hdGlvbiwgaW50IGFuaW1hdGlvbklkLCBpbnQgZ3JvdXBJZCwgZG91YmxlIHRp
bWVPZmZzZXQpCitib29sIExheWVyQ2hyb21pdW06OmFkZEFuaW1hdGlvbihQYXNzT3duUHRyPEND
QWN0aXZlQW5pbWF0aW9uPiBhbmltYXRpb24pCiB7CiAgICAgaWYgKCFtX2xheWVyVHJlZUhvc3Qg
fHwgIW1fbGF5ZXJUcmVlSG9zdC0+c2V0dGluZ3MoKS50aHJlYWRlZEFuaW1hdGlvbkVuYWJsZWQp
CiAgICAgICAgIHJldHVybiBmYWxzZTsKIAotICAgIGJvb2wgYWRkZWRBbmltYXRpb24gPSBtX2xh
eWVyQW5pbWF0aW9uQ29udHJvbGxlci0+YWRkQW5pbWF0aW9uKHZhbHVlcywgYm94U2l6ZSwgYW5p
bWF0aW9uLCBhbmltYXRpb25JZCwgZ3JvdXBJZCwgdGltZU9mZnNldCk7Ci0gICAgaWYgKGFkZGVk
QW5pbWF0aW9uKSB7Ci0gICAgICAgIG1fbGF5ZXJUcmVlSG9zdC0+ZGlkQWRkQW5pbWF0aW9uKCk7
Ci0gICAgICAgIHNldE5lZWRzQ29tbWl0KCk7Ci0gICAgfQotICAgIHJldHVybiBhZGRlZEFuaW1h
dGlvbjsKKyAgICBtX2xheWVyQW5pbWF0aW9uQ29udHJvbGxlci0+YWRkQW5pbWF0aW9uKGFuaW1h
dGlvbik7CisgICAgbV9sYXllclRyZWVIb3N0LT5kaWRBZGRBbmltYXRpb24oKTsKKyAgICBzZXRO
ZWVkc0NvbW1pdCgpOworICAgIHJldHVybiB0cnVlOwogfQogCiB2b2lkIExheWVyQ2hyb21pdW06
OnBhdXNlQW5pbWF0aW9uKGludCBhbmltYXRpb25JZCwgZG91YmxlIHRpbWVPZmZzZXQpCmRpZmYg
LS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9jaHJvbWl1bS9MYXllckNo
cm9taXVtLmggYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9jaHJvbWl1bS9MYXll
ckNocm9taXVtLmgKaW5kZXggOWJlMDI3OWUyYWViY2Q3Y2RjN2M2OGJkMDI1ZWJlMDg0MWMxNzVk
My4uOTdhMjM4NGFlMzkwMTAzNDE2ZWZkMjM2OGJmN2QyOGE5ZDYyYTM2YSAxMDA2NDQKLS0tIGEv
U291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvY2hyb21pdW0vTGF5ZXJDaHJvbWl1bS5o
CisrKyBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2Nocm9taXVtL0xheWVyQ2hy
b21pdW0uaApAQCAtNTcsNiArNTcsNyBAQAogCiBuYW1lc3BhY2UgV2ViQ29yZSB7CiAKK2NsYXNz
IENDQWN0aXZlQW5pbWF0aW9uOwogc3RydWN0IENDQW5pbWF0aW9uRXZlbnQ7CiBjbGFzcyBDQ0xh
eWVyQW5pbWF0aW9uRGVsZWdhdGU7CiBjbGFzcyBDQ0xheWVySW1wbDsKQEAgLTIzNCw3ICsyMzUs
NyBAQCBwdWJsaWM6CiAgICAgdm9pZCBzZXRBbHdheXNSZXNlcnZlVGV4dHVyZXMoYm9vbCBhbHdh
eXNSZXNlcnZlVGV4dHVyZXMpIHsgbV9hbHdheXNSZXNlcnZlVGV4dHVyZXMgPSBhbHdheXNSZXNl
cnZlVGV4dHVyZXM7IH0KICAgICBib29sIGFsd2F5c1Jlc2VydmVUZXh0dXJlcygpIGNvbnN0IHsg
cmV0dXJuIG1fYWx3YXlzUmVzZXJ2ZVRleHR1cmVzOyB9CiAKLSAgICBib29sIGFkZEFuaW1hdGlv
bihjb25zdCBLZXlmcmFtZVZhbHVlTGlzdCYsIGNvbnN0IEludFNpemUmIGJveFNpemUsIGNvbnN0
IEFuaW1hdGlvbiosIGludCBhbmltYXRpb25JZCwgaW50IGdyb3VwSWQsIGRvdWJsZSB0aW1lT2Zm
c2V0KTsKKyAgICBib29sIGFkZEFuaW1hdGlvbihQYXNzT3duUHRyPENDQWN0aXZlQW5pbWF0aW9u
Pik7CiAgICAgdm9pZCBwYXVzZUFuaW1hdGlvbihpbnQgYW5pbWF0aW9uSWQsIGRvdWJsZSB0aW1l
T2Zmc2V0KTsKICAgICB2b2lkIHJlbW92ZUFuaW1hdGlvbihpbnQgYW5pbWF0aW9uSWQpOwogCmRp
ZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9jaHJvbWl1bS9MaW5r
SGlnaGxpZ2h0LmNwcCBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2Nocm9taXVt
L0xpbmtIaWdobGlnaHQuY3BwCmluZGV4IDUzNTM2YjMyY2UwYWQ3MDcyNjEzMjU0MzJhMGExNTE1
YTE2ZTA0ODcuLjhlZDE3OWRkODExZWU3NjBkZWZkZDE5ZTVmOTEwMmQ1MzI3NmUyYTYgMTAwNjQ0
Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2Nocm9taXVtL0xpbmtIaWdo
bGlnaHQuY3BwCisrKyBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2Nocm9taXVt
L0xpbmtIaWdobGlnaHQuY3BwCkBAIC03NCw3ICs3NCw3IEBAIExpbmtIaWdobGlnaHQ6OkxpbmtI
aWdobGlnaHQoR3JhcGhpY3NMYXllckNocm9taXVtKiBwYXJlbnQsIGNvbnN0IFBhdGgmIHBhdGgs
IGluCiAgICAgLy8gYW5pbWF0aW9uSWQgPSAxIGlzIHJlc2VydmVkIGZvciB1cy4KICAgICBPd25Q
dHI8Q0NBY3RpdmVBbmltYXRpb24+IGFuaW1hdGlvbihDQ0FjdGl2ZUFuaW1hdGlvbjo6Y3JlYXRl
KGN1cnZlLnJlbGVhc2UoKSwgYW5pbWF0aW9uSWQsIGdyb3VwSWQsIENDQWN0aXZlQW5pbWF0aW9u
OjpPcGFjaXR5KSk7CiAgICAgYW5pbWF0aW9uLT5zZXROZWVkc1N5bmNocm9uaXplZFN0YXJ0VGlt
ZSh0cnVlKTsKLSAgICBtX2NvbnRlbnRMYXllci0+bGF5ZXJBbmltYXRpb25Db250cm9sbGVyKCkt
PmFkZChhbmltYXRpb24ucmVsZWFzZSgpKTsKKyAgICBtX2NvbnRlbnRMYXllci0+bGF5ZXJBbmlt
YXRpb25Db250cm9sbGVyKCktPmFkZEFuaW1hdGlvbihhbmltYXRpb24ucmVsZWFzZSgpKTsKIH0K
IAogTGlua0hpZ2hsaWdodDo6fkxpbmtIaWdobGlnaHQoKQpkaWZmIC0tZ2l0IGEvU291cmNlL1dl
YkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvY2hyb21pdW0vY2MvQ0NBbmltYXRpb25DdXJ2ZS5oIGIv
U291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvY2hyb21pdW0vY2MvQ0NBbmltYXRpb25D
dXJ2ZS5oCmluZGV4IDdmNTA2YTcwNmYyYTQzYWU2ZDM4YTVhZjYzYmQ3NWNmOGNiM2U3ZDUuLjM5
OWUwNjZiZDIwNjJiN2ExYWYyMWQ2NmU2M2U4NGZjMWZhNmM5YjkgMTAwNjQ0Ci0tLSBhL1NvdXJj
ZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2Nocm9taXVtL2NjL0NDQW5pbWF0aW9uQ3VydmUu
aAorKysgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9jaHJvbWl1bS9jYy9DQ0Fu
aW1hdGlvbkN1cnZlLmgKQEAgLTY1LDcgKzY1LDcgQEAgY2xhc3MgQ0NUcmFuc2Zvcm1BbmltYXRp
b25DdXJ2ZSA6IHB1YmxpYyBDQ0FuaW1hdGlvbkN1cnZlIHsKIHB1YmxpYzoKICAgICB2aXJ0dWFs
IH5DQ1RyYW5zZm9ybUFuaW1hdGlvbkN1cnZlKCkgeyB9CiAKLSAgICB2aXJ0dWFsIFRyYW5zZm9y
bWF0aW9uTWF0cml4IGdldFZhbHVlKGRvdWJsZSB0LCBjb25zdCBJbnRTaXplJiBsYXllclNpemUp
IGNvbnN0ID0gMDsKKyAgICB2aXJ0dWFsIFRyYW5zZm9ybWF0aW9uTWF0cml4IGdldFZhbHVlKGRv
dWJsZSB0KSBjb25zdCA9IDA7CiAKICAgICAvLyBQYXJ0aWFsIENDQW5pbWF0aW9uIGltcGxlbWVu
dGF0aW9uLgogICAgIHZpcnR1YWwgVHlwZSB0eXBlKCkgY29uc3QgT1ZFUlJJREUgeyByZXR1cm4g
VHJhbnNmb3JtOyB9CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGlj
cy9jaHJvbWl1bS9jYy9DQ0tleWZyYW1lZEFuaW1hdGlvbkN1cnZlLmNwcCBiL1NvdXJjZS9XZWJD
b3JlL3BsYXRmb3JtL2dyYXBoaWNzL2Nocm9taXVtL2NjL0NDS2V5ZnJhbWVkQW5pbWF0aW9uQ3Vy
dmUuY3BwCmluZGV4IGFlNDFmZTA2OTViMzBkNmEyOTQ3NzU1MGVmNmYxOTliMTMxNGNmZDkuLmVm
NDdhOTVkMjNjN2Q4NGI2ZjhiMmIyODAxOGU5ZDkyOWE5YWY3NDcgMTAwNjQ0Ci0tLSBhL1NvdXJj
ZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2Nocm9taXVtL2NjL0NDS2V5ZnJhbWVkQW5pbWF0
aW9uQ3VydmUuY3BwCisrKyBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2Nocm9t
aXVtL2NjL0NDS2V5ZnJhbWVkQW5pbWF0aW9uQ3VydmUuY3BwCkBAIC0yNiwxNSArMjYsNiBAQAog
CiAjaW5jbHVkZSAiY2MvQ0NLZXlmcmFtZWRBbmltYXRpb25DdXJ2ZS5oIgogCi0jaW5jbHVkZSAi
SWRlbnRpdHlUcmFuc2Zvcm1PcGVyYXRpb24uaCIKLSNpbmNsdWRlICJNYXRyaXgzRFRyYW5zZm9y
bU9wZXJhdGlvbi5oIgotI2luY2x1ZGUgIk1hdHJpeFRyYW5zZm9ybU9wZXJhdGlvbi5oIgotI2lu
Y2x1ZGUgIlBlcnNwZWN0aXZlVHJhbnNmb3JtT3BlcmF0aW9uLmgiCi0jaW5jbHVkZSAiUm90YXRl
VHJhbnNmb3JtT3BlcmF0aW9uLmgiCi0jaW5jbHVkZSAiU2NhbGVUcmFuc2Zvcm1PcGVyYXRpb24u
aCIKLSNpbmNsdWRlICJTa2V3VHJhbnNmb3JtT3BlcmF0aW9uLmgiCi0jaW5jbHVkZSAiVHJhbnNs
YXRlVHJhbnNmb3JtT3BlcmF0aW9uLmgiCi0KICNpbmNsdWRlIDx3dGYvT3duUHRyLmg+CiAKIG5h
bWVzcGFjZSBXZWJDb3JlIHsKQEAgLTExNCwxMiArMTA1LDEyIEBAIFBhc3NPd25QdHI8Q0NGbG9h
dEtleWZyYW1lPiBDQ0Zsb2F0S2V5ZnJhbWU6OmNsb25lKCkgY29uc3QKICAgICByZXR1cm4gQ0NG
bG9hdEtleWZyYW1lOjpjcmVhdGUodGltZSgpLCB2YWx1ZSgpLCB0aW1pbmdGdW5jdGlvbigpID8g
Y2xvbmVUaW1pbmdGdW5jdGlvbih0aW1pbmdGdW5jdGlvbigpKSA6IG51bGxwdHIpOwogfQogCi1Q
YXNzT3duUHRyPENDVHJhbnNmb3JtS2V5ZnJhbWU+IENDVHJhbnNmb3JtS2V5ZnJhbWU6OmNyZWF0
ZShkb3VibGUgdGltZSwgY29uc3QgVHJhbnNmb3JtT3BlcmF0aW9ucyYgdmFsdWUsIFBhc3NPd25Q
dHI8Q0NUaW1pbmdGdW5jdGlvbj4gdGltaW5nRnVuY3Rpb24pCitQYXNzT3duUHRyPENDVHJhbnNm
b3JtS2V5ZnJhbWU+IENDVHJhbnNmb3JtS2V5ZnJhbWU6OmNyZWF0ZShkb3VibGUgdGltZSwgY29u
c3QgV2ViS2l0OjpXZWJUcmFuc2Zvcm1PcGVyYXRpb25zJiB2YWx1ZSwgUGFzc093blB0cjxDQ1Rp
bWluZ0Z1bmN0aW9uPiB0aW1pbmdGdW5jdGlvbikKIHsKICAgICByZXR1cm4gYWRvcHRQdHIobmV3
IENDVHJhbnNmb3JtS2V5ZnJhbWUodGltZSwgdmFsdWUsIHRpbWluZ0Z1bmN0aW9uKSk7CiB9CiAK
LUNDVHJhbnNmb3JtS2V5ZnJhbWU6OkNDVHJhbnNmb3JtS2V5ZnJhbWUoZG91YmxlIHRpbWUsIGNv
bnN0IFRyYW5zZm9ybU9wZXJhdGlvbnMmIHZhbHVlLCBQYXNzT3duUHRyPENDVGltaW5nRnVuY3Rp
b24+IHRpbWluZ0Z1bmN0aW9uKQorQ0NUcmFuc2Zvcm1LZXlmcmFtZTo6Q0NUcmFuc2Zvcm1LZXlm
cmFtZShkb3VibGUgdGltZSwgY29uc3QgV2ViS2l0OjpXZWJUcmFuc2Zvcm1PcGVyYXRpb25zJiB2
YWx1ZSwgUGFzc093blB0cjxDQ1RpbWluZ0Z1bmN0aW9uPiB0aW1pbmdGdW5jdGlvbikKICAgICA6
IENDS2V5ZnJhbWUodGltZSwgdGltaW5nRnVuY3Rpb24pCiAgICAgLCBtX3ZhbHVlKHZhbHVlKQog
ewpAQCAtMTI5LDc4ICsxMjAsMTQgQEAgQ0NUcmFuc2Zvcm1LZXlmcmFtZTo6fkNDVHJhbnNmb3Jt
S2V5ZnJhbWUoKQogewogfQogCi1jb25zdCBUcmFuc2Zvcm1PcGVyYXRpb25zJiBDQ1RyYW5zZm9y
bUtleWZyYW1lOjp2YWx1ZSgpIGNvbnN0Citjb25zdCBXZWJLaXQ6OldlYlRyYW5zZm9ybU9wZXJh
dGlvbnMmIENDVHJhbnNmb3JtS2V5ZnJhbWU6OnZhbHVlKCkgY29uc3QKIHsKICAgICByZXR1cm4g
bV92YWx1ZTsKIH0KIAogUGFzc093blB0cjxDQ1RyYW5zZm9ybUtleWZyYW1lPiBDQ1RyYW5zZm9y
bUtleWZyYW1lOjpjbG9uZSgpIGNvbnN0CiB7Ci0gICAgLy8gV2UgbmVlZCB0byBkbyBhIGRlZXAg
Y29weSB0aGUgbV92YWx1ZSBtYXkgY29udGFpbiByZWYgcG9pbnRlcnMgdG8gVHJhbnNmb3JtT3Bl
cmF0aW9uIG9iamVjdHMuCi0gICAgVHJhbnNmb3JtT3BlcmF0aW9ucyBvcGVyYXRpb25zOwotICAg
IGZvciAoc2l6ZV90IGogPSAwOyBqIDwgbV92YWx1ZS5zaXplKCk7ICsraikgewotICAgICAgICBU
cmFuc2Zvcm1PcGVyYXRpb246Ok9wZXJhdGlvblR5cGUgb3BlcmF0aW9uVHlwZSA9IG1fdmFsdWUu
b3BlcmF0aW9ucygpW2pdLT5nZXRPcGVyYXRpb25UeXBlKCk7Ci0gICAgICAgIHN3aXRjaCAob3Bl
cmF0aW9uVHlwZSkgewotICAgICAgICBjYXNlIFRyYW5zZm9ybU9wZXJhdGlvbjo6U0NBTEVfWDoK
LSAgICAgICAgY2FzZSBUcmFuc2Zvcm1PcGVyYXRpb246OlNDQUxFX1k6Ci0gICAgICAgIGNhc2Ug
VHJhbnNmb3JtT3BlcmF0aW9uOjpTQ0FMRV9aOgotICAgICAgICBjYXNlIFRyYW5zZm9ybU9wZXJh
dGlvbjo6U0NBTEVfM0Q6Ci0gICAgICAgIGNhc2UgVHJhbnNmb3JtT3BlcmF0aW9uOjpTQ0FMRTog
ewotICAgICAgICAgICAgU2NhbGVUcmFuc2Zvcm1PcGVyYXRpb24qIHRyYW5zZm9ybSA9IHN0YXRp
Y19jYXN0PFNjYWxlVHJhbnNmb3JtT3BlcmF0aW9uKj4obV92YWx1ZS5vcGVyYXRpb25zKClbal0u
Z2V0KCkpOwotICAgICAgICAgICAgb3BlcmF0aW9ucy5vcGVyYXRpb25zKCkuYXBwZW5kKFNjYWxl
VHJhbnNmb3JtT3BlcmF0aW9uOjpjcmVhdGUodHJhbnNmb3JtLT54KCksIHRyYW5zZm9ybS0+eSgp
LCB0cmFuc2Zvcm0tPnooKSwgb3BlcmF0aW9uVHlwZSkpOwotICAgICAgICAgICAgYnJlYWs7Ci0g
ICAgICAgIH0KLSAgICAgICAgY2FzZSBUcmFuc2Zvcm1PcGVyYXRpb246OlRSQU5TTEFURV9YOgot
ICAgICAgICBjYXNlIFRyYW5zZm9ybU9wZXJhdGlvbjo6VFJBTlNMQVRFX1k6Ci0gICAgICAgIGNh
c2UgVHJhbnNmb3JtT3BlcmF0aW9uOjpUUkFOU0xBVEVfWjoKLSAgICAgICAgY2FzZSBUcmFuc2Zv
cm1PcGVyYXRpb246OlRSQU5TTEFURV8zRDoKLSAgICAgICAgY2FzZSBUcmFuc2Zvcm1PcGVyYXRp
b246OlRSQU5TTEFURTogewotICAgICAgICAgICAgVHJhbnNsYXRlVHJhbnNmb3JtT3BlcmF0aW9u
KiB0cmFuc2Zvcm0gPSBzdGF0aWNfY2FzdDxUcmFuc2xhdGVUcmFuc2Zvcm1PcGVyYXRpb24qPiht
X3ZhbHVlLm9wZXJhdGlvbnMoKVtqXS5nZXQoKSk7Ci0gICAgICAgICAgICBvcGVyYXRpb25zLm9w
ZXJhdGlvbnMoKS5hcHBlbmQoVHJhbnNsYXRlVHJhbnNmb3JtT3BlcmF0aW9uOjpjcmVhdGUodHJh
bnNmb3JtLT54KCksIHRyYW5zZm9ybS0+eSgpLCB0cmFuc2Zvcm0tPnooKSwgb3BlcmF0aW9uVHlw
ZSkpOwotICAgICAgICAgICAgYnJlYWs7Ci0gICAgICAgIH0KLSAgICAgICAgY2FzZSBUcmFuc2Zv
cm1PcGVyYXRpb246OlJPVEFURV9YOgotICAgICAgICBjYXNlIFRyYW5zZm9ybU9wZXJhdGlvbjo6
Uk9UQVRFX1k6Ci0gICAgICAgIGNhc2UgVHJhbnNmb3JtT3BlcmF0aW9uOjpST1RBVEVfM0Q6Ci0g
ICAgICAgIGNhc2UgVHJhbnNmb3JtT3BlcmF0aW9uOjpST1RBVEU6IHsKLSAgICAgICAgICAgIFJv
dGF0ZVRyYW5zZm9ybU9wZXJhdGlvbiogdHJhbnNmb3JtID0gc3RhdGljX2Nhc3Q8Um90YXRlVHJh
bnNmb3JtT3BlcmF0aW9uKj4obV92YWx1ZS5vcGVyYXRpb25zKClbal0uZ2V0KCkpOwotICAgICAg
ICAgICAgb3BlcmF0aW9ucy5vcGVyYXRpb25zKCkuYXBwZW5kKFJvdGF0ZVRyYW5zZm9ybU9wZXJh
dGlvbjo6Y3JlYXRlKHRyYW5zZm9ybS0+eCgpLCB0cmFuc2Zvcm0tPnkoKSwgdHJhbnNmb3JtLT56
KCksIHRyYW5zZm9ybS0+YW5nbGUoKSwgb3BlcmF0aW9uVHlwZSkpOwotICAgICAgICAgICAgYnJl
YWs7Ci0gICAgICAgIH0KLSAgICAgICAgY2FzZSBUcmFuc2Zvcm1PcGVyYXRpb246OlNLRVdfWDoK
LSAgICAgICAgY2FzZSBUcmFuc2Zvcm1PcGVyYXRpb246OlNLRVdfWToKLSAgICAgICAgY2FzZSBU
cmFuc2Zvcm1PcGVyYXRpb246OlNLRVc6IHsKLSAgICAgICAgICAgIFNrZXdUcmFuc2Zvcm1PcGVy
YXRpb24qIHRyYW5zZm9ybSA9IHN0YXRpY19jYXN0PFNrZXdUcmFuc2Zvcm1PcGVyYXRpb24qPiht
X3ZhbHVlLm9wZXJhdGlvbnMoKVtqXS5nZXQoKSk7Ci0gICAgICAgICAgICBvcGVyYXRpb25zLm9w
ZXJhdGlvbnMoKS5hcHBlbmQoU2tld1RyYW5zZm9ybU9wZXJhdGlvbjo6Y3JlYXRlKHRyYW5zZm9y
bS0+YW5nbGVYKCksIHRyYW5zZm9ybS0+YW5nbGVZKCksIG9wZXJhdGlvblR5cGUpKTsKLSAgICAg
ICAgICAgIGJyZWFrOwotICAgICAgICB9Ci0gICAgICAgIGNhc2UgVHJhbnNmb3JtT3BlcmF0aW9u
OjpNQVRSSVg6IHsKLSAgICAgICAgICAgIE1hdHJpeFRyYW5zZm9ybU9wZXJhdGlvbiogdHJhbnNm
b3JtID0gc3RhdGljX2Nhc3Q8TWF0cml4VHJhbnNmb3JtT3BlcmF0aW9uKj4obV92YWx1ZS5vcGVy
YXRpb25zKClbal0uZ2V0KCkpOwotICAgICAgICAgICAgVHJhbnNmb3JtYXRpb25NYXRyaXggbSA9
IHRyYW5zZm9ybS0+bWF0cml4KCk7Ci0gICAgICAgICAgICBvcGVyYXRpb25zLm9wZXJhdGlvbnMo
KS5hcHBlbmQoTWF0cml4VHJhbnNmb3JtT3BlcmF0aW9uOjpjcmVhdGUobS5hKCksIG0uYigpLCBt
LmMoKSwgbS5kKCksIG0uZSgpLCBtLmYoKSkpOwotICAgICAgICAgICAgYnJlYWs7Ci0gICAgICAg
IH0KLSAgICAgICAgY2FzZSBUcmFuc2Zvcm1PcGVyYXRpb246Ok1BVFJJWF8zRDogewotICAgICAg
ICAgICAgTWF0cml4M0RUcmFuc2Zvcm1PcGVyYXRpb24qIHRyYW5zZm9ybSA9IHN0YXRpY19jYXN0
PE1hdHJpeDNEVHJhbnNmb3JtT3BlcmF0aW9uKj4obV92YWx1ZS5vcGVyYXRpb25zKClbal0uZ2V0
KCkpOwotICAgICAgICAgICAgb3BlcmF0aW9ucy5vcGVyYXRpb25zKCkuYXBwZW5kKE1hdHJpeDNE
VHJhbnNmb3JtT3BlcmF0aW9uOjpjcmVhdGUodHJhbnNmb3JtLT5tYXRyaXgoKSkpOwotICAgICAg
ICAgICAgYnJlYWs7Ci0gICAgICAgIH0KLSAgICAgICAgY2FzZSBUcmFuc2Zvcm1PcGVyYXRpb246
OlBFUlNQRUNUSVZFOiB7Ci0gICAgICAgICAgICBQZXJzcGVjdGl2ZVRyYW5zZm9ybU9wZXJhdGlv
biogdHJhbnNmb3JtID0gc3RhdGljX2Nhc3Q8UGVyc3BlY3RpdmVUcmFuc2Zvcm1PcGVyYXRpb24q
PihtX3ZhbHVlLm9wZXJhdGlvbnMoKVtqXS5nZXQoKSk7Ci0gICAgICAgICAgICBvcGVyYXRpb25z
Lm9wZXJhdGlvbnMoKS5hcHBlbmQoUGVyc3BlY3RpdmVUcmFuc2Zvcm1PcGVyYXRpb246OmNyZWF0
ZSh0cmFuc2Zvcm0tPnBlcnNwZWN0aXZlKCkpKTsKLSAgICAgICAgICAgIGJyZWFrOwotICAgICAg
ICB9Ci0gICAgICAgIGNhc2UgVHJhbnNmb3JtT3BlcmF0aW9uOjpJREVOVElUWTogewotICAgICAg
ICAgICAgb3BlcmF0aW9ucy5vcGVyYXRpb25zKCkuYXBwZW5kKElkZW50aXR5VHJhbnNmb3JtT3Bl
cmF0aW9uOjpjcmVhdGUoKSk7Ci0gICAgICAgICAgICBicmVhazsKLSAgICAgICAgfQotICAgICAg
ICBjYXNlIFRyYW5zZm9ybU9wZXJhdGlvbjo6Tk9ORToKLSAgICAgICAgICAgIC8vIERvIG5vdGhp
bmcuCi0gICAgICAgICAgICBicmVhazsKLSAgICAgICAgfSAvLyBzd2l0Y2gKLSAgICB9IC8vIGZv
ciBlYWNoIG9wZXJhdGlvbgotCi0gICAgcmV0dXJuIENDVHJhbnNmb3JtS2V5ZnJhbWU6OmNyZWF0
ZSh0aW1lKCksIG9wZXJhdGlvbnMsIHRpbWluZ0Z1bmN0aW9uKCkgPyBjbG9uZVRpbWluZ0Z1bmN0
aW9uKHRpbWluZ0Z1bmN0aW9uKCkpIDogbnVsbHB0cik7CisgICAgcmV0dXJuIENDVHJhbnNmb3Jt
S2V5ZnJhbWU6OmNyZWF0ZSh0aW1lKCksIHZhbHVlKCksIHRpbWluZ0Z1bmN0aW9uKCkgPyBjbG9u
ZVRpbWluZ0Z1bmN0aW9uKHRpbWluZ0Z1bmN0aW9uKCkpIDogbnVsbHB0cik7CiB9CiAKIFBhc3NP
d25QdHI8Q0NLZXlmcmFtZWRGbG9hdEFuaW1hdGlvbkN1cnZlPiBDQ0tleWZyYW1lZEZsb2F0QW5p
bWF0aW9uQ3VydmU6OmNyZWF0ZSgpCkBAIC0yODcsMTkgKzIxNCwxMyBAQCBQYXNzT3duUHRyPEND
QW5pbWF0aW9uQ3VydmU+IENDS2V5ZnJhbWVkVHJhbnNmb3JtQW5pbWF0aW9uQ3VydmU6OmNsb25l
KCkgY29uc3QKICAgICByZXR1cm4gdG9SZXR1cm4ucmVsZWFzZSgpOwogfQogCi1UcmFuc2Zvcm1h
dGlvbk1hdHJpeCBDQ0tleWZyYW1lZFRyYW5zZm9ybUFuaW1hdGlvbkN1cnZlOjpnZXRWYWx1ZShk
b3VibGUgdCwgY29uc3QgSW50U2l6ZSYgbGF5ZXJTaXplKSBjb25zdAorVHJhbnNmb3JtYXRpb25N
YXRyaXggQ0NLZXlmcmFtZWRUcmFuc2Zvcm1BbmltYXRpb25DdXJ2ZTo6Z2V0VmFsdWUoZG91Ymxl
IHQpIGNvbnN0CiB7Ci0gICAgVHJhbnNmb3JtYXRpb25NYXRyaXggdHJhbnNmb3JtTWF0cml4Owot
Ci0gICAgaWYgKHQgPD0gbV9rZXlmcmFtZXMuZmlyc3QoKS0+dGltZSgpKSB7Ci0gICAgICAgIG1f
a2V5ZnJhbWVzLmZpcnN0KCktPnZhbHVlKCkuYXBwbHkobGF5ZXJTaXplLCB0cmFuc2Zvcm1NYXRy
aXgpOwotICAgICAgICByZXR1cm4gdHJhbnNmb3JtTWF0cml4OwotICAgIH0KKyAgICBpZiAodCA8
PSBtX2tleWZyYW1lcy5maXJzdCgpLT50aW1lKCkpCisgICAgICAgIHJldHVybiBtX2tleWZyYW1l
cy5maXJzdCgpLT52YWx1ZSgpLmFwcGx5KCkudG9XZWJDb3JlVHJhbnNmb3JtKCk7CiAKLSAgICBp
ZiAodCA+PSBtX2tleWZyYW1lcy5sYXN0KCktPnRpbWUoKSkgewotICAgICAgICBtX2tleWZyYW1l
cy5sYXN0KCktPnZhbHVlKCkuYXBwbHkobGF5ZXJTaXplLCB0cmFuc2Zvcm1NYXRyaXgpOwotICAg
ICAgICByZXR1cm4gdHJhbnNmb3JtTWF0cml4OwotICAgIH0KKyAgICBpZiAodCA+PSBtX2tleWZy
YW1lcy5sYXN0KCktPnRpbWUoKSkKKyAgICAgICAgcmV0dXJuIG1fa2V5ZnJhbWVzLmxhc3QoKS0+
dmFsdWUoKS5hcHBseSgpLnRvV2ViQ29yZVRyYW5zZm9ybSgpOwogCiAgICAgc2l6ZV90IGkgPSAw
OwogICAgIGZvciAoOyBpIDwgbV9rZXlmcmFtZXMuc2l6ZSgpIC0gMTsgKytpKSB7CkBAIC0zMTIs
MTkgKzIzMyw3IEBAIFRyYW5zZm9ybWF0aW9uTWF0cml4IENDS2V5ZnJhbWVkVHJhbnNmb3JtQW5p
bWF0aW9uQ3VydmU6OmdldFZhbHVlKGRvdWJsZSB0LCBjb25zCiAgICAgaWYgKG1fa2V5ZnJhbWVz
W2ldLT50aW1pbmdGdW5jdGlvbigpKQogICAgICAgICBwcm9ncmVzcyA9IG1fa2V5ZnJhbWVzW2ld
LT50aW1pbmdGdW5jdGlvbigpLT5nZXRWYWx1ZShwcm9ncmVzcyk7CiAKLSAgICBpZiAobV9rZXlm
cmFtZXNbaV0tPnZhbHVlKCkub3BlcmF0aW9uc01hdGNoKG1fa2V5ZnJhbWVzW2krMV0tPnZhbHVl
KCkpKSB7Ci0gICAgICAgIGZvciAoc2l6ZV90IGogPSAwOyBqIDwgbV9rZXlmcmFtZXNbaSsxXS0+
dmFsdWUoKS5zaXplKCk7ICsraikKLSAgICAgICAgICAgIG1fa2V5ZnJhbWVzW2krMV0tPnZhbHVl
KCkub3BlcmF0aW9ucygpW2pdLT5ibGVuZChtX2tleWZyYW1lc1tpXS0+dmFsdWUoKS5hdChqKSwg
cHJvZ3Jlc3MpLT5hcHBseSh0cmFuc2Zvcm1NYXRyaXgsIGxheWVyU2l6ZSk7Ci0gICAgfSBlbHNl
IHsKLSAgICAgICAgVHJhbnNmb3JtYXRpb25NYXRyaXggc291cmNlOwotCi0gICAgICAgIG1fa2V5
ZnJhbWVzW2ldLT52YWx1ZSgpLmFwcGx5KGxheWVyU2l6ZSwgc291cmNlKTsKLSAgICAgICAgbV9r
ZXlmcmFtZXNbaSsxXS0+dmFsdWUoKS5hcHBseShsYXllclNpemUsIHRyYW5zZm9ybU1hdHJpeCk7
Ci0KLSAgICAgICAgdHJhbnNmb3JtTWF0cml4LmJsZW5kKHNvdXJjZSwgcHJvZ3Jlc3MpOwotICAg
IH0KLQotICAgIHJldHVybiB0cmFuc2Zvcm1NYXRyaXg7CisgICAgcmV0dXJuIG1fa2V5ZnJhbWVz
W2krMV0tPnZhbHVlKCkuYmxlbmQobV9rZXlmcmFtZXNbaV0tPnZhbHVlKCksIHByb2dyZXNzKS50
b1dlYkNvcmVUcmFuc2Zvcm0oKTsKIH0KIAogfSAvLyBuYW1lc3BhY2UgV2ViQ29yZQpkaWZmIC0t
Z2l0IGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvY2hyb21pdW0vY2MvQ0NLZXlm
cmFtZWRBbmltYXRpb25DdXJ2ZS5oIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3Mv
Y2hyb21pdW0vY2MvQ0NLZXlmcmFtZWRBbmltYXRpb25DdXJ2ZS5oCmluZGV4IDhkMWYwZTA1NWY0
Mjk3ZDQzNjM3Nzc5OGRjNDI1ZGE4ZDk0ZjUwMWYuLjE1ZjEzOWZhMGIxYTExMjZjNGRkMjJiMTMw
NTZiNDI1NDkwM2U5MTQgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBo
aWNzL2Nocm9taXVtL2NjL0NDS2V5ZnJhbWVkQW5pbWF0aW9uQ3VydmUuaAorKysgYi9Tb3VyY2Uv
V2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9jaHJvbWl1bS9jYy9DQ0tleWZyYW1lZEFuaW1hdGlv
bkN1cnZlLmgKQEAgLTI1LDEwICsyNSwxMSBAQAogI2lmbmRlZiBDQ0tleWZyYW1lZEFuaW1hdGlv
bkN1cnZlX2gKICNkZWZpbmUgQ0NLZXlmcmFtZWRBbmltYXRpb25DdXJ2ZV9oCiAKLSNpbmNsdWRl
ICJUcmFuc2Zvcm1PcGVyYXRpb25zLmgiCiAjaW5jbHVkZSAiY2MvQ0NBbmltYXRpb25DdXJ2ZS5o
IgogI2luY2x1ZGUgImNjL0NDVGltaW5nRnVuY3Rpb24uaCIKIAorI2luY2x1ZGUgPHB1YmxpYy9X
ZWJUcmFuc2Zvcm1PcGVyYXRpb25zLmg+CisKICNpbmNsdWRlIDx3dGYvT3duUHRyLmg+CiAjaW5j
bHVkZSA8d3RmL1Bhc3NPd25QdHIuaD4KIApAQCAtNjUsMTcgKzY2LDE3IEBAIHByaXZhdGU6CiAK
IGNsYXNzIENDVHJhbnNmb3JtS2V5ZnJhbWUgOiBwdWJsaWMgQ0NLZXlmcmFtZSB7CiBwdWJsaWM6
Ci0gICAgc3RhdGljIFBhc3NPd25QdHI8Q0NUcmFuc2Zvcm1LZXlmcmFtZT4gY3JlYXRlKGRvdWJs
ZSB0aW1lLCBjb25zdCBUcmFuc2Zvcm1PcGVyYXRpb25zJiB2YWx1ZSwgUGFzc093blB0cjxDQ1Rp
bWluZ0Z1bmN0aW9uPik7CisgICAgc3RhdGljIFBhc3NPd25QdHI8Q0NUcmFuc2Zvcm1LZXlmcmFt
ZT4gY3JlYXRlKGRvdWJsZSB0aW1lLCBjb25zdCBXZWJLaXQ6OldlYlRyYW5zZm9ybU9wZXJhdGlv
bnMmIHZhbHVlLCBQYXNzT3duUHRyPENDVGltaW5nRnVuY3Rpb24+KTsKICAgICB2aXJ0dWFsIH5D
Q1RyYW5zZm9ybUtleWZyYW1lKCk7CiAKLSAgICBjb25zdCBUcmFuc2Zvcm1PcGVyYXRpb25zJiB2
YWx1ZSgpIGNvbnN0OworICAgIGNvbnN0IFdlYktpdDo6V2ViVHJhbnNmb3JtT3BlcmF0aW9ucyYg
dmFsdWUoKSBjb25zdDsKIAogICAgIFBhc3NPd25QdHI8Q0NUcmFuc2Zvcm1LZXlmcmFtZT4gY2xv
bmUoKSBjb25zdDsKIAogcHJpdmF0ZToKLSAgICBDQ1RyYW5zZm9ybUtleWZyYW1lKGRvdWJsZSB0
aW1lLCBjb25zdCBUcmFuc2Zvcm1PcGVyYXRpb25zJiB2YWx1ZSwgUGFzc093blB0cjxDQ1RpbWlu
Z0Z1bmN0aW9uPik7CisgICAgQ0NUcmFuc2Zvcm1LZXlmcmFtZShkb3VibGUgdGltZSwgY29uc3Qg
V2ViS2l0OjpXZWJUcmFuc2Zvcm1PcGVyYXRpb25zJiB2YWx1ZSwgUGFzc093blB0cjxDQ1RpbWlu
Z0Z1bmN0aW9uPik7CiAKLSAgICBUcmFuc2Zvcm1PcGVyYXRpb25zIG1fdmFsdWU7CisgICAgV2Vi
S2l0OjpXZWJUcmFuc2Zvcm1PcGVyYXRpb25zIG1fdmFsdWU7CiB9OwogCiBjbGFzcyBDQ0tleWZy
YW1lZEZsb2F0QW5pbWF0aW9uQ3VydmUgOiBwdWJsaWMgQ0NGbG9hdEFuaW1hdGlvbkN1cnZlIHsK
QEAgLTExNiw3ICsxMTcsNyBAQCBwdWJsaWM6CiAgICAgdmlydHVhbCBQYXNzT3duUHRyPENDQW5p
bWF0aW9uQ3VydmU+IGNsb25lKCkgY29uc3QgT1ZFUlJJREU7CiAKICAgICAvLyBDQ1RyYW5zZm9y
bUFuaW1hdGlvbkN1cnZlIGltcGxlbWVudGF0aW9uCi0gICAgdmlydHVhbCBUcmFuc2Zvcm1hdGlv
bk1hdHJpeCBnZXRWYWx1ZShkb3VibGUgdCwgY29uc3QgSW50U2l6ZSYpIGNvbnN0IE9WRVJSSURF
OworICAgIHZpcnR1YWwgVHJhbnNmb3JtYXRpb25NYXRyaXggZ2V0VmFsdWUoZG91YmxlIHQpIGNv
bnN0IE9WRVJSSURFOwogCiBwcml2YXRlOgogICAgIENDS2V5ZnJhbWVkVHJhbnNmb3JtQW5pbWF0
aW9uQ3VydmUoKTsKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNz
L2Nocm9taXVtL2NjL0NDTGF5ZXJBbmltYXRpb25Db250cm9sbGVyLmNwcCBiL1NvdXJjZS9XZWJD
b3JlL3BsYXRmb3JtL2dyYXBoaWNzL2Nocm9taXVtL2NjL0NDTGF5ZXJBbmltYXRpb25Db250cm9s
bGVyLmNwcAppbmRleCAxNGZiNzhhNjVjMjU4MDI3NGVhZjY4OTAxZjUyZTRiZjc3YzU4YmJjLi4x
NWI2MTA2YzVlOTk2ZTgyNGJjYzRhZDIxY2ZkZDkxZWZlNDQ0YjU4IDEwMDY0NAotLS0gYS9Tb3Vy
Y2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9jaHJvbWl1bS9jYy9DQ0xheWVyQW5pbWF0aW9u
Q29udHJvbGxlci5jcHAKKysrIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvY2hy
b21pdW0vY2MvQ0NMYXllckFuaW1hdGlvbkNvbnRyb2xsZXIuY3BwCkBAIC0zNSw5NCArMzUsNiBA
QAogCiBuYW1lc3BhY2UgV2ViQ29yZSB7CiAKLW5hbWVzcGFjZSB7Ci0KLXRlbXBsYXRlIDxjbGFz
cyBWYWx1ZSwgY2xhc3MgS2V5ZnJhbWUsIGNsYXNzIEN1cnZlPgotdm9pZCBhcHBlbmRLZXlmcmFt
ZShDdXJ2ZSYgY3VydmUsIGRvdWJsZSBrZXlUaW1lLCBjb25zdCBWYWx1ZSogdmFsdWUsIFBhc3NP
d25QdHI8Q0NUaW1pbmdGdW5jdGlvbj4gdGltaW5nRnVuY3Rpb24pCi17Ci0gICAgY3VydmUuYWRk
S2V5ZnJhbWUoS2V5ZnJhbWU6OmNyZWF0ZShrZXlUaW1lLCB2YWx1ZS0+dmFsdWUoKSwgdGltaW5n
RnVuY3Rpb24pKTsKLX0KLQotdGVtcGxhdGUgPD4KLXZvaWQgYXBwZW5kS2V5ZnJhbWU8VHJhbnNm
b3JtQW5pbWF0aW9uVmFsdWUsIENDVHJhbnNmb3JtS2V5ZnJhbWUsIENDS2V5ZnJhbWVkVHJhbnNm
b3JtQW5pbWF0aW9uQ3VydmU+KENDS2V5ZnJhbWVkVHJhbnNmb3JtQW5pbWF0aW9uQ3VydmUmIGN1
cnZlLCBkb3VibGUga2V5VGltZSwgY29uc3QgVHJhbnNmb3JtQW5pbWF0aW9uVmFsdWUqIHZhbHVl
LCBQYXNzT3duUHRyPENDVGltaW5nRnVuY3Rpb24+IHRpbWluZ0Z1bmN0aW9uKQotewotICAgIGN1
cnZlLmFkZEtleWZyYW1lKENDVHJhbnNmb3JtS2V5ZnJhbWU6OmNyZWF0ZShrZXlUaW1lLCAqdmFs
dWUtPnZhbHVlKCksIHRpbWluZ0Z1bmN0aW9uKSk7Ci19Ci0KLXRlbXBsYXRlIDxjbGFzcyBWYWx1
ZSwgY2xhc3MgS2V5ZnJhbWUsIGNsYXNzIEN1cnZlPgotUGFzc093blB0cjxDQ0FjdGl2ZUFuaW1h
dGlvbj4gY3JlYXRlQWN0aXZlQW5pbWF0aW9uKGNvbnN0IEtleWZyYW1lVmFsdWVMaXN0JiB2YWx1
ZUxpc3QsIGNvbnN0IEFuaW1hdGlvbiogYW5pbWF0aW9uLCBzaXplX3QgYW5pbWF0aW9uSWQsIHNp
emVfdCBncm91cElkLCBkb3VibGUgdGltZU9mZnNldCwgQ0NBY3RpdmVBbmltYXRpb246OlRhcmdl
dFByb3BlcnR5IHRhcmdldFByb3BlcnR5KQotewotICAgIGJvb2wgYWx0ZXJuYXRlID0gZmFsc2U7
Ci0gICAgYm9vbCByZXZlcnNlID0gZmFsc2U7Ci0gICAgaWYgKGFuaW1hdGlvbiAmJiBhbmltYXRp
b24tPmlzRGlyZWN0aW9uU2V0KCkpIHsKLSAgICAgICAgQW5pbWF0aW9uOjpBbmltYXRpb25EaXJl
Y3Rpb24gZGlyZWN0aW9uID0gYW5pbWF0aW9uLT5kaXJlY3Rpb24oKTsKLSAgICAgICAgaWYgKGRp
cmVjdGlvbiA9PSBBbmltYXRpb246OkFuaW1hdGlvbkRpcmVjdGlvbkFsdGVybmF0ZSB8fCBkaXJl
Y3Rpb24gPT0gQW5pbWF0aW9uOjpBbmltYXRpb25EaXJlY3Rpb25BbHRlcm5hdGVSZXZlcnNlKQot
ICAgICAgICAgICAgYWx0ZXJuYXRlID0gdHJ1ZTsKLSAgICAgICAgaWYgKGRpcmVjdGlvbiA9PSBB
bmltYXRpb246OkFuaW1hdGlvbkRpcmVjdGlvblJldmVyc2UgfHwgZGlyZWN0aW9uID09IEFuaW1h
dGlvbjo6QW5pbWF0aW9uRGlyZWN0aW9uQWx0ZXJuYXRlUmV2ZXJzZSkKLSAgICAgICAgICAgIHJl
dmVyc2UgPSB0cnVlOwotICAgIH0KLQotICAgIE93blB0cjxDdXJ2ZT4gY3VydmUgPSBDdXJ2ZTo6
Y3JlYXRlKCk7Ci0gICAgVmVjdG9yPEtleWZyYW1lPiBrZXlmcmFtZXM7Ci0KLSAgICBmb3IgKHNp
emVfdCBpID0gMDsgaSA8IHZhbHVlTGlzdC5zaXplKCk7IGkrKykgewotICAgICAgICBzaXplX3Qg
aW5kZXggPSByZXZlcnNlID8gdmFsdWVMaXN0LnNpemUoKSAtIGkgLSAxIDogaTsKLQotICAgICAg
ICBjb25zdCBWYWx1ZSogb3JpZ2luYWxWYWx1ZSA9IHN0YXRpY19jYXN0PGNvbnN0IFZhbHVlKj4o
dmFsdWVMaXN0LmF0KGluZGV4KSk7Ci0KLSAgICAgICAgT3duUHRyPENDVGltaW5nRnVuY3Rpb24+
IHRpbWluZ0Z1bmN0aW9uOwotICAgICAgICBjb25zdCBUaW1pbmdGdW5jdGlvbiogb3JpZ2luYWxU
aW1pbmdGdW5jdGlvbiA9IG9yaWdpbmFsVmFsdWUtPnRpbWluZ0Z1bmN0aW9uKCk7Ci0KLSAgICAg
ICAgLy8gSWYgdGhlcmUgaGFzbid0IGJlZW4gYSB0aW1pbmcgZnVuY3Rpb24gYXNzb2NpYXRlZCB3
aXRoIHRoaXMga2V5ZnJhbWUsIHVzZSB0aGUKLSAgICAgICAgLy8gYW5pbWF0aW9uJ3MgdGltaW5n
IGZ1bmN0aW9uLCBpZiB3ZSBoYXZlIG9uZS4KLSAgICAgICAgaWYgKCFvcmlnaW5hbFRpbWluZ0Z1
bmN0aW9uICYmIGFuaW1hdGlvbi0+aXNUaW1pbmdGdW5jdGlvblNldCgpKQotICAgICAgICAgICAg
b3JpZ2luYWxUaW1pbmdGdW5jdGlvbiA9IGFuaW1hdGlvbi0+dGltaW5nRnVuY3Rpb24oKS5nZXQo
KTsKLQotICAgICAgICBpZiAob3JpZ2luYWxUaW1pbmdGdW5jdGlvbikgewotICAgICAgICAgICAg
c3dpdGNoIChvcmlnaW5hbFRpbWluZ0Z1bmN0aW9uLT50eXBlKCkpIHsKLSAgICAgICAgICAgIGNh
c2UgVGltaW5nRnVuY3Rpb246OlN0ZXBzRnVuY3Rpb246Ci0gICAgICAgICAgICAgICAgLy8gRklY
TUU6IGFkZCBzdXBwb3J0IGZvciBzdGVwcyB0aW1pbmcgZnVuY3Rpb24uCi0gICAgICAgICAgICAg
ICAgcmV0dXJuIG51bGxwdHI7Ci0gICAgICAgICAgICBjYXNlIFRpbWluZ0Z1bmN0aW9uOjpMaW5l
YXJGdW5jdGlvbjoKLSAgICAgICAgICAgICAgICAvLyBEb24ndCBzZXQgdGhlIHRpbWluZyBmdW5j
dGlvbi4gS2V5ZnJhbWVzIGFyZSBpbnRlcnBvbGF0ZWQgbGluZWFybHkgaWYgdGhlcmUgaXMgbm8g
dGltaW5nIGZ1bmN0aW9uLgotICAgICAgICAgICAgICAgIGJyZWFrOwotICAgICAgICAgICAgY2Fz
ZSBUaW1pbmdGdW5jdGlvbjo6Q3ViaWNCZXppZXJGdW5jdGlvbjoKLSAgICAgICAgICAgICAgICBj
b25zdCBDdWJpY0JlemllclRpbWluZ0Z1bmN0aW9uKiBvcmlnaW5hbEJlemllclRpbWluZ0Z1bmN0
aW9uID0gc3RhdGljX2Nhc3Q8Y29uc3QgQ3ViaWNCZXppZXJUaW1pbmdGdW5jdGlvbio+KG9yaWdp
bmFsVGltaW5nRnVuY3Rpb24pOwotICAgICAgICAgICAgICAgIHRpbWluZ0Z1bmN0aW9uID0gQ0ND
dWJpY0JlemllclRpbWluZ0Z1bmN0aW9uOjpjcmVhdGUob3JpZ2luYWxCZXppZXJUaW1pbmdGdW5j
dGlvbi0+eDEoKSwgb3JpZ2luYWxCZXppZXJUaW1pbmdGdW5jdGlvbi0+eTEoKSwgb3JpZ2luYWxC
ZXppZXJUaW1pbmdGdW5jdGlvbi0+eDIoKSwgb3JpZ2luYWxCZXppZXJUaW1pbmdGdW5jdGlvbi0+
eTIoKSk7Ci0gICAgICAgICAgICAgICAgYnJlYWs7Ci0gICAgICAgICAgICB9IC8vIHN3aXRjaAot
ICAgICAgICB9IGVsc2UKLSAgICAgICAgICAgIHRpbWluZ0Z1bmN0aW9uID0gQ0NFYXNlVGltaW5n
RnVuY3Rpb246OmNyZWF0ZSgpOwotCi0gICAgICAgIGRvdWJsZSBkdXJhdGlvbiA9IChhbmltYXRp
b24gJiYgYW5pbWF0aW9uLT5pc0R1cmF0aW9uU2V0KCkpID8gYW5pbWF0aW9uLT5kdXJhdGlvbigp
IDogMTsKLSAgICAgICAgZG91YmxlIGtleVRpbWUgPSBvcmlnaW5hbFZhbHVlLT5rZXlUaW1lKCkg
KiBkdXJhdGlvbjsKLSAgICAgICAgaWYgKHJldmVyc2UpCi0gICAgICAgICAgICBrZXlUaW1lID0g
ZHVyYXRpb24gLSBrZXlUaW1lOwotICAgICAgICBhcHBlbmRLZXlmcmFtZTxWYWx1ZSwgS2V5ZnJh
bWUsIEN1cnZlPigqY3VydmUsIGtleVRpbWUsIG9yaWdpbmFsVmFsdWUsIHRpbWluZ0Z1bmN0aW9u
LnJlbGVhc2UoKSk7Ci0gICAgfQotCi0gICAgT3duUHRyPENDQWN0aXZlQW5pbWF0aW9uPiBhbmlt
ID0gQ0NBY3RpdmVBbmltYXRpb246OmNyZWF0ZShjdXJ2ZS5yZWxlYXNlKCksIGFuaW1hdGlvbklk
LCBncm91cElkLCB0YXJnZXRQcm9wZXJ0eSk7Ci0KLSAgICBBU1NFUlQoYW5pbS5nZXQoKSk7Ci0K
LSAgICBpZiAoYW5pbS5nZXQoKSkgewotICAgICAgICBpbnQgaXRlcmF0aW9ucyA9IChhbmltYXRp
b24gJiYgYW5pbWF0aW9uLT5pc0l0ZXJhdGlvbkNvdW50U2V0KCkpID8gYW5pbWF0aW9uLT5pdGVy
YXRpb25Db3VudCgpIDogMTsKLSAgICAgICAgYW5pbS0+c2V0SXRlcmF0aW9ucyhpdGVyYXRpb25z
KTsKLSAgICAgICAgYW5pbS0+c2V0QWx0ZXJuYXRlc0RpcmVjdGlvbihhbHRlcm5hdGUpOwotICAg
IH0KLQotICAgIC8vIEluIG9yZGVyIHRvIGF2b2lkIHNrZXcsIHRoZSBtYWluIHRocmVhZCBhbmlt
YXRpb24gY2Fubm90IHRpY2sgdW50aWwgaXQgaGFzIHJlY2VpdmVkIHRoZSBzdGFydCB0aW1lIG9m
Ci0gICAgLy8gdGhlIGNvcnJlc3BvbmRpbmcgaW1wbCB0aHJlYWQgYW5pbWF0aW9uLgotICAgIGFu
aW0tPnNldE5lZWRzU3luY2hyb25pemVkU3RhcnRUaW1lKHRydWUpOwotCi0gICAgLy8gSWYgdGlt
ZU9mZnNldCA+IDAsIHRoZW4gdGhlIGFuaW1hdGlvbiBoYXMgc3RhcnRlZCBpbiB0aGUgcGFzdC4K
LSAgICBhbmltLT5zZXRUaW1lT2Zmc2V0KHRpbWVPZmZzZXQpOwotCi0gICAgcmV0dXJuIGFuaW0u
cmVsZWFzZSgpOwotfQotCi19IC8vIG5hbWVwYWNlCi0KIENDTGF5ZXJBbmltYXRpb25Db250cm9s
bGVyOjpDQ0xheWVyQW5pbWF0aW9uQ29udHJvbGxlcihDQ0xheWVyQW5pbWF0aW9uQ29udHJvbGxl
ckNsaWVudCogY2xpZW50KQogICAgIDogbV9mb3JjZVN5bmMoZmFsc2UpCiAgICAgLCBtX2NsaWVu
dChjbGllbnQpCkBAIC0xMzgsMzIgKzUwLDYgQEAgUGFzc093blB0cjxDQ0xheWVyQW5pbWF0aW9u
Q29udHJvbGxlcj4gQ0NMYXllckFuaW1hdGlvbkNvbnRyb2xsZXI6OmNyZWF0ZShDQ0xheWUKICAg
ICByZXR1cm4gYWRvcHRQdHIobmV3IENDTGF5ZXJBbmltYXRpb25Db250cm9sbGVyKGNsaWVudCkp
OwogfQogCi1ib29sIENDTGF5ZXJBbmltYXRpb25Db250cm9sbGVyOjphZGRBbmltYXRpb24oY29u
c3QgS2V5ZnJhbWVWYWx1ZUxpc3QmIHZhbHVlTGlzdCwgY29uc3QgSW50U2l6ZSYsIGNvbnN0IEFu
aW1hdGlvbiogYW5pbWF0aW9uLCBpbnQgYW5pbWF0aW9uSWQsIGludCBncm91cElkLCBkb3VibGUg
dGltZU9mZnNldCkKLXsKLSAgICBpZiAoIWFuaW1hdGlvbikKLSAgICAgICAgcmV0dXJuIGZhbHNl
OwotCi0gICAgT3duUHRyPENDQWN0aXZlQW5pbWF0aW9uPiB0b0FkZDsKLSAgICBpZiAodmFsdWVM
aXN0LnByb3BlcnR5KCkgPT0gQW5pbWF0ZWRQcm9wZXJ0eVdlYmtpdFRyYW5zZm9ybSkKLSAgICAg
ICAgdG9BZGQgPSBjcmVhdGVBY3RpdmVBbmltYXRpb248VHJhbnNmb3JtQW5pbWF0aW9uVmFsdWUs
IENDVHJhbnNmb3JtS2V5ZnJhbWUsIENDS2V5ZnJhbWVkVHJhbnNmb3JtQW5pbWF0aW9uQ3VydmU+
KHZhbHVlTGlzdCwgYW5pbWF0aW9uLCBhbmltYXRpb25JZCwgZ3JvdXBJZCwgdGltZU9mZnNldCwg
Q0NBY3RpdmVBbmltYXRpb246OlRyYW5zZm9ybSk7Ci0gICAgZWxzZSBpZiAodmFsdWVMaXN0LnBy
b3BlcnR5KCkgPT0gQW5pbWF0ZWRQcm9wZXJ0eU9wYWNpdHkpCi0gICAgICAgIHRvQWRkID0gY3Jl
YXRlQWN0aXZlQW5pbWF0aW9uPEZsb2F0QW5pbWF0aW9uVmFsdWUsIENDRmxvYXRLZXlmcmFtZSwg
Q0NLZXlmcmFtZWRGbG9hdEFuaW1hdGlvbkN1cnZlPih2YWx1ZUxpc3QsIGFuaW1hdGlvbiwgYW5p
bWF0aW9uSWQsIGdyb3VwSWQsIHRpbWVPZmZzZXQsIENDQWN0aXZlQW5pbWF0aW9uOjpPcGFjaXR5
KTsKLQotICAgIGlmICh0b0FkZC5nZXQoKSkgewotICAgICAgICAvLyBSZW1vdmUgYW55IGV4aXN0
aW5nIGFuaW1hdGlvbnMgd2l0aCB0aGUgc2FtZSBhbmltYXRpb24gaWQgYW5kIHRhcmdldCBwcm9w
ZXJ0eS4KLSAgICAgICAgZm9yIChzaXplX3QgaSA9IDA7IGkgPCBtX2FjdGl2ZUFuaW1hdGlvbnMu
c2l6ZSgpOykgewotICAgICAgICAgICAgaWYgKG1fYWN0aXZlQW5pbWF0aW9uc1tpXS0+aWQoKSA9
PSBhbmltYXRpb25JZCAmJiBtX2FjdGl2ZUFuaW1hdGlvbnNbaV0tPnRhcmdldFByb3BlcnR5KCkg
PT0gdG9BZGQtPnRhcmdldFByb3BlcnR5KCkpCi0gICAgICAgICAgICAgICAgbV9hY3RpdmVBbmlt
YXRpb25zLnJlbW92ZShpKTsKLSAgICAgICAgICAgIGVsc2UKLSAgICAgICAgICAgICAgICBpKys7
Ci0gICAgICAgIH0KLSAgICAgICAgbV9hY3RpdmVBbmltYXRpb25zLmFwcGVuZCh0b0FkZC5yZWxl
YXNlKCkpOwotICAgICAgICByZXR1cm4gdHJ1ZTsKLSAgICB9Ci0KLSAgICByZXR1cm4gZmFsc2U7
Ci19Ci0KIHZvaWQgQ0NMYXllckFuaW1hdGlvbkNvbnRyb2xsZXI6OnBhdXNlQW5pbWF0aW9uKGlu
dCBhbmltYXRpb25JZCwgZG91YmxlIHRpbWVPZmZzZXQpCiB7CiAgICAgZm9yIChzaXplX3QgaSA9
IDA7IGkgPCBtX2FjdGl2ZUFuaW1hdGlvbnMuc2l6ZSgpOyArK2kpIHsKQEAgLTE4Miw2ICs2OCwx
NiBAQCB2b2lkIENDTGF5ZXJBbmltYXRpb25Db250cm9sbGVyOjpyZW1vdmVBbmltYXRpb24oaW50
IGFuaW1hdGlvbklkKQogICAgIH0KIH0KIAordm9pZCBDQ0xheWVyQW5pbWF0aW9uQ29udHJvbGxl
cjo6cmVtb3ZlQW5pbWF0aW9uKGludCBhbmltYXRpb25JZCwgQ0NBY3RpdmVBbmltYXRpb246OlRh
cmdldFByb3BlcnR5IHRhcmdldFByb3BlcnR5KQoreworICAgIGZvciAoc2l6ZV90IGkgPSAwOyBp
IDwgbV9hY3RpdmVBbmltYXRpb25zLnNpemUoKTspIHsKKyAgICAgICAgaWYgKG1fYWN0aXZlQW5p
bWF0aW9uc1tpXS0+aWQoKSA9PSBhbmltYXRpb25JZCAmJiBtX2FjdGl2ZUFuaW1hdGlvbnNbaV0t
PnRhcmdldFByb3BlcnR5KCkgPT0gdGFyZ2V0UHJvcGVydHkpCisgICAgICAgICAgICBtX2FjdGl2
ZUFuaW1hdGlvbnMucmVtb3ZlKGkpOworICAgICAgICBlbHNlCisgICAgICAgICAgICBpKys7Cisg
ICAgfQorfQorCiAvLyBBY2NvcmRpbmcgdG8gcmVuZGVyIGxheWVyIGJhY2tpbmcsIHRoZXNlIGFy
ZSBmb3IgdGVzdGluZyBvbmx5Lgogdm9pZCBDQ0xheWVyQW5pbWF0aW9uQ29udHJvbGxlcjo6c3Vz
cGVuZEFuaW1hdGlvbnMoZG91YmxlIG1vbm90b25pY1RpbWUpCiB7CkBAIC0yMjUsNyArMTIxLDcg
QEAgdm9pZCBDQ0xheWVyQW5pbWF0aW9uQ29udHJvbGxlcjo6YW5pbWF0ZShkb3VibGUgbW9ub3Rv
bmljVGltZSwgQ0NBbmltYXRpb25FdmVudHMKICAgICBzdGFydEFuaW1hdGlvbnNXYWl0aW5nRm9y
VGFyZ2V0QXZhaWxhYmlsaXR5KG1vbm90b25pY1RpbWUsIGV2ZW50cyk7CiB9CiAKLXZvaWQgQ0NM
YXllckFuaW1hdGlvbkNvbnRyb2xsZXI6OmFkZChQYXNzT3duUHRyPENDQWN0aXZlQW5pbWF0aW9u
PiBhbmltYXRpb24pCit2b2lkIENDTGF5ZXJBbmltYXRpb25Db250cm9sbGVyOjphZGRBbmltYXRp
b24oUGFzc093blB0cjxDQ0FjdGl2ZUFuaW1hdGlvbj4gYW5pbWF0aW9uKQogewogICAgIG1fYWN0
aXZlQW5pbWF0aW9ucy5hcHBlbmQoYW5pbWF0aW9uKTsKIH0KQEAgLTIzOCw2ICsxMzQsMTYgQEAg
Q0NBY3RpdmVBbmltYXRpb24qIENDTGF5ZXJBbmltYXRpb25Db250cm9sbGVyOjpnZXRBY3RpdmVB
bmltYXRpb24oaW50IGdyb3VwSWQsIEMKICAgICByZXR1cm4gMDsKIH0KIAorQ0NBY3RpdmVBbmlt
YXRpb24qIENDTGF5ZXJBbmltYXRpb25Db250cm9sbGVyOjpnZXRBY3RpdmVBbmltYXRpb24oQ0NB
Y3RpdmVBbmltYXRpb246OlRhcmdldFByb3BlcnR5IHRhcmdldFByb3BlcnR5KSBjb25zdAorewor
ICAgIGZvciAoc2l6ZV90IGkgPSAwOyBpIDwgbV9hY3RpdmVBbmltYXRpb25zLnNpemUoKTsgKytp
KSB7CisgICAgICAgIHNpemVfdCBpbmRleCA9IG1fYWN0aXZlQW5pbWF0aW9ucy5zaXplKCkgLSBp
IC0gMTsKKyAgICAgICAgaWYgKG1fYWN0aXZlQW5pbWF0aW9uc1tpbmRleF0tPnRhcmdldFByb3Bl
cnR5KCkgPT0gdGFyZ2V0UHJvcGVydHkpCisgICAgICAgICAgICByZXR1cm4gbV9hY3RpdmVBbmlt
YXRpb25zW2luZGV4XS5nZXQoKTsKKyAgICB9CisgICAgcmV0dXJuIDA7Cit9CisKIGJvb2wgQ0NM
YXllckFuaW1hdGlvbkNvbnRyb2xsZXI6Omhhc0FjdGl2ZUFuaW1hdGlvbigpIGNvbnN0CiB7CiAg
ICAgZm9yIChzaXplX3QgaSA9IDA7IGkgPCBtX2FjdGl2ZUFuaW1hdGlvbnMuc2l6ZSgpOyArK2kp
IHsKQEAgLTI5Miw3ICsxOTgsNyBAQCB2b2lkIENDTGF5ZXJBbmltYXRpb25Db250cm9sbGVyOjpw
dXNoTmV3QW5pbWF0aW9uc1RvSW1wbFRocmVhZChDQ0xheWVyQW5pbWF0aW9uQwogICAgICAgICAv
LyBUaGUgbmV3IGFuaW1hdGlvbiBzaG91bGQgYmUgc2V0IHRvIHJ1biBhcyBzb29uIGFzIHBvc3Np
YmxlLgogICAgICAgICB0b0FkZC0+c2V0UnVuU3RhdGUoQ0NBY3RpdmVBbmltYXRpb246OldhaXRp
bmdGb3JUYXJnZXRBdmFpbGFiaWxpdHksIDApOwogICAgICAgICB0b0FkZC0+c2V0U3RhcnRUaW1l
KDApOwotICAgICAgICBjb250cm9sbGVySW1wbC0+YWRkKHRvQWRkLnJlbGVhc2UoKSk7CisgICAg
ICAgIGNvbnRyb2xsZXJJbXBsLT5hZGRBbmltYXRpb24odG9BZGQucmVsZWFzZSgpKTsKICAgICB9
CiB9CiAKQEAgLTQ1OSw3ICszNjUsNyBAQCB2b2lkIENDTGF5ZXJBbmltYXRpb25Db250cm9sbGVy
OjpyZXBsYWNlSW1wbFRocmVhZEFuaW1hdGlvbnMoQ0NMYXllckFuaW1hdGlvbkNvbgogICAgICAg
ICAgICAgdG9BZGQtPnNldFJ1blN0YXRlKENDQWN0aXZlQW5pbWF0aW9uOjpXYWl0aW5nRm9yVGFy
Z2V0QXZhaWxhYmlsaXR5LCAwKTsKICAgICAgICAgICAgIHRvQWRkLT5zZXRTdGFydFRpbWUoMCk7
CiAgICAgICAgIH0KLSAgICAgICAgY29udHJvbGxlckltcGwtPmFkZCh0b0FkZC5yZWxlYXNlKCkp
OworICAgICAgICBjb250cm9sbGVySW1wbC0+YWRkQW5pbWF0aW9uKHRvQWRkLnJlbGVhc2UoKSk7
CiAgICAgfQogfQogCkBAIC00NzgsNyArMzg0LDcgQEAgdm9pZCBDQ0xheWVyQW5pbWF0aW9uQ29u
dHJvbGxlcjo6dGlja0FuaW1hdGlvbnMoZG91YmxlIG1vbm90b25pY1RpbWUpCiAKICAgICAgICAg
ICAgIGNhc2UgQ0NBY3RpdmVBbmltYXRpb246OlRyYW5zZm9ybTogewogICAgICAgICAgICAgICAg
IGNvbnN0IENDVHJhbnNmb3JtQW5pbWF0aW9uQ3VydmUqIHRyYW5zZm9ybUFuaW1hdGlvbkN1cnZl
ID0gbV9hY3RpdmVBbmltYXRpb25zW2ldLT5jdXJ2ZSgpLT50b1RyYW5zZm9ybUFuaW1hdGlvbkN1
cnZlKCk7Ci0gICAgICAgICAgICAgICAgY29uc3QgVHJhbnNmb3JtYXRpb25NYXRyaXggbWF0cml4
ID0gdHJhbnNmb3JtQW5pbWF0aW9uQ3VydmUtPmdldFZhbHVlKHRyaW1tZWQsIG1fY2xpZW50LT5i
b3VuZHMoKSk7CisgICAgICAgICAgICAgICAgY29uc3QgVHJhbnNmb3JtYXRpb25NYXRyaXggbWF0
cml4ID0gdHJhbnNmb3JtQW5pbWF0aW9uQ3VydmUtPmdldFZhbHVlKHRyaW1tZWQpOwogICAgICAg
ICAgICAgICAgIGlmIChtX2FjdGl2ZUFuaW1hdGlvbnNbaV0tPmlzRmluaXNoZWRBdChtb25vdG9u
aWNUaW1lKSkKICAgICAgICAgICAgICAgICAgICAgbV9hY3RpdmVBbmltYXRpb25zW2ldLT5zZXRS
dW5TdGF0ZShDQ0FjdGl2ZUFuaW1hdGlvbjo6RmluaXNoZWQsIG1vbm90b25pY1RpbWUpOwogCmRp
ZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9jaHJvbWl1bS9jYy9D
Q0xheWVyQW5pbWF0aW9uQ29udHJvbGxlci5oIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3Jh
cGhpY3MvY2hyb21pdW0vY2MvQ0NMYXllckFuaW1hdGlvbkNvbnRyb2xsZXIuaAppbmRleCBhYzcy
ODdmNzExZTIzMDNhYTA5M2E3MTJjNWM1OTFhMTBlMzFjM2U0Li5iYWE0YWMzZGRhYTAzOGJlMWUx
MTJhMzE0MjUyN2E5YjIyYzRiNzAxIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9y
bS9ncmFwaGljcy9jaHJvbWl1bS9jYy9DQ0xheWVyQW5pbWF0aW9uQ29udHJvbGxlci5oCisrKyBi
L1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2Nocm9taXVtL2NjL0NDTGF5ZXJBbmlt
YXRpb25Db250cm9sbGVyLmgKQEAgLTUwLDcgKzUwLDYgQEAgcHVibGljOgogICAgIHZpcnR1YWwg
ZmxvYXQgb3BhY2l0eSgpIGNvbnN0ID0gMDsKICAgICB2aXJ0dWFsIHZvaWQgc2V0VHJhbnNmb3Jt
RnJvbUFuaW1hdGlvbihjb25zdCBUcmFuc2Zvcm1hdGlvbk1hdHJpeCYpID0gMDsKICAgICB2aXJ0
dWFsIGNvbnN0IFRyYW5zZm9ybWF0aW9uTWF0cml4JiB0cmFuc2Zvcm0oKSBjb25zdCA9IDA7Ci0g
ICAgdmlydHVhbCBjb25zdCBJbnRTaXplJiBib3VuZHMoKSBjb25zdCA9IDA7CiB9OwogCiBjbGFz
cyBDQ0xheWVyQW5pbWF0aW9uQ29udHJvbGxlciB7CkBAIC02MSw5ICs2MCwxMCBAQCBwdWJsaWM6
CiAgICAgdmlydHVhbCB+Q0NMYXllckFuaW1hdGlvbkNvbnRyb2xsZXIoKTsKIAogICAgIC8vIFRo
ZXNlIG1ldGhvZHMgYXJlIHZpcnR1YWwgZm9yIHRlc3RpbmcuCi0gICAgdmlydHVhbCBib29sIGFk
ZEFuaW1hdGlvbihjb25zdCBLZXlmcmFtZVZhbHVlTGlzdCYsIGNvbnN0IEludFNpemUmIGJveFNp
emUsIGNvbnN0IEFuaW1hdGlvbiosIGludCBhbmltYXRpb25JZCwgaW50IGdyb3VwSWQsIGRvdWJs
ZSB0aW1lT2Zmc2V0KTsKKyAgICB2aXJ0dWFsIHZvaWQgYWRkQW5pbWF0aW9uKFBhc3NPd25QdHI8
Q0NBY3RpdmVBbmltYXRpb24+KTsKICAgICB2aXJ0dWFsIHZvaWQgcGF1c2VBbmltYXRpb24oaW50
IGFuaW1hdGlvbklkLCBkb3VibGUgdGltZU9mZnNldCk7CiAgICAgdmlydHVhbCB2b2lkIHJlbW92
ZUFuaW1hdGlvbihpbnQgYW5pbWF0aW9uSWQpOworICAgIHZpcnR1YWwgdm9pZCByZW1vdmVBbmlt
YXRpb24oaW50IGFuaW1hdGlvbklkLCBDQ0FjdGl2ZUFuaW1hdGlvbjo6VGFyZ2V0UHJvcGVydHkp
OwogICAgIHZpcnR1YWwgdm9pZCBzdXNwZW5kQW5pbWF0aW9ucyhkb3VibGUgbW9ub3RvbmljVGlt
ZSk7CiAgICAgdmlydHVhbCB2b2lkIHJlc3VtZUFuaW1hdGlvbnMoZG91YmxlIG1vbm90b25pY1Rp
bWUpOwogCkBAIC03MywxMiArNzMsMTQgQEAgcHVibGljOgogCiAgICAgdm9pZCBhbmltYXRlKGRv
dWJsZSBtb25vdG9uaWNUaW1lLCBDQ0FuaW1hdGlvbkV2ZW50c1ZlY3RvciopOwogCi0gICAgdm9p
ZCBhZGQoUGFzc093blB0cjxDQ0FjdGl2ZUFuaW1hdGlvbj4pOwotCi0gICAgLy8gUmV0dXJucyB0
aGUgYWN0aXZlIGFuaW1hdGlvbiBpbiB0aGUgZ2l2ZW4gZ3JvdXAsIGFuaW1hdGluZyB0aGUgZ2l2
ZW4gcHJvcGVydHkgaWYgc3VjaCBhbgorICAgIC8vIFJldHVybnMgdGhlIGFjdGl2ZSBhbmltYXRp
b24gaW4gdGhlIGdpdmVuIGdyb3VwLCBhbmltYXRpbmcgdGhlIGdpdmVuIHByb3BlcnR5LCBpZiBz
dWNoIGFuCiAgICAgLy8gYW5pbWF0aW9uIGV4aXN0cy4KICAgICBDQ0FjdGl2ZUFuaW1hdGlvbiog
Z2V0QWN0aXZlQW5pbWF0aW9uKGludCBncm91cElkLCBDQ0FjdGl2ZUFuaW1hdGlvbjo6VGFyZ2V0
UHJvcGVydHkpIGNvbnN0OwogCisgICAgLy8gUmV0dXJucyB0aGUgYWN0aXZlIGFuaW1hdGlvbiBh
bmltYXRpbmcgdGhlIGdpdmVuIHByb3BlcnR5IHRoYXQgaXMgZWl0aGVyIHJ1bm5pbmcsIG9yIGlz
CisgICAgLy8gbmV4dCB0byBydW4sIGlmIHN1Y2ggYW4gYW5pbWF0aW9uIGV4aXN0cy4KKyAgICBD
Q0FjdGl2ZUFuaW1hdGlvbiogZ2V0QWN0aXZlQW5pbWF0aW9uKENDQWN0aXZlQW5pbWF0aW9uOjpU
YXJnZXRQcm9wZXJ0eSkgY29uc3Q7CisKICAgICAvLyBSZXR1cm5zIHRydWUgaWYgdGhlcmUgYXJl
IGFueSBhbmltYXRpb25zIHRoYXQgaGF2ZSBuZWl0aGVyIGZpbmlzaGVkIG5vciBhYm9ydGVkLgog
ICAgIGJvb2wgaGFzQWN0aXZlQW5pbWF0aW9uKCkgY29uc3Q7CiAKZGlmZiAtLWdpdCBhL1NvdXJj
ZS9XZWJLaXQvY2hyb21pdW0vdGVzdHMvQ0NBbmltYXRpb25UZXN0Q29tbW9uLmNwcCBiL1NvdXJj
ZS9XZWJLaXQvY2hyb21pdW0vdGVzdHMvQ0NBbmltYXRpb25UZXN0Q29tbW9uLmNwcAppbmRleCAz
NmY3OTgxOGVmMDllODM4Y2M5ODI3YjhmYTE2MjU4ODE5NTBkYTQyLi4xNDE0YjhjYTVjNDAzMzI3
OTk2ZDdiZmU5NDRjNDM4MDVjYTc3ZWNhIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViS2l0L2Nocm9t
aXVtL3Rlc3RzL0NDQW5pbWF0aW9uVGVzdENvbW1vbi5jcHAKKysrIGIvU291cmNlL1dlYktpdC9j
aHJvbWl1bS90ZXN0cy9DQ0FuaW1hdGlvblRlc3RDb21tb24uY3BwCkBAIC0yOSw5ICsyOSwxMiBA
QAogI2luY2x1ZGUgIkdyYXBoaWNzTGF5ZXIuaCIKICNpbmNsdWRlICJMYXllckNocm9taXVtLmgi
CiAjaW5jbHVkZSAiVHJhbnNsYXRlVHJhbnNmb3JtT3BlcmF0aW9uLmgiCisjaW5jbHVkZSAiY2Mv
Q0NLZXlmcmFtZWRBbmltYXRpb25DdXJ2ZS5oIgogI2luY2x1ZGUgImNjL0NDTGF5ZXJBbmltYXRp
b25Db250cm9sbGVyLmgiCiAjaW5jbHVkZSAiY2MvQ0NMYXllckltcGwuaCIKIAorI2luY2x1ZGUg
PHB1YmxpYy9XZWJUcmFuc2Zvcm1PcGVyYXRpb25zLmg+CisKIHVzaW5nIG5hbWVzcGFjZSBXZWJD
b3JlOwogCiBuYW1lc3BhY2UgewpAQCAtMzksMzggKzQyLDM4IEBAIG5hbWVzcGFjZSB7CiB0ZW1w
bGF0ZSA8Y2xhc3MgVGFyZ2V0Pgogdm9pZCBhZGRPcGFjaXR5VHJhbnNpdGlvbihUYXJnZXQmIHRh
cmdldCwgZG91YmxlIGR1cmF0aW9uLCBmbG9hdCBzdGFydE9wYWNpdHksIGZsb2F0IGVuZE9wYWNp
dHksIGJvb2wgdXNlVGltaW5nRnVuY3Rpb24pCiB7Ci0gICAgV2ViQ29yZTo6S2V5ZnJhbWVWYWx1
ZUxpc3QgdmFsdWVzKEFuaW1hdGVkUHJvcGVydHlPcGFjaXR5KTsKLSAgICBpZiAoZHVyYXRpb24g
PiAwKQotICAgICAgICB2YWx1ZXMuaW5zZXJ0KG5ldyBGbG9hdEFuaW1hdGlvblZhbHVlKDAsIHN0
YXJ0T3BhY2l0eSkpOwotICAgIHZhbHVlcy5pbnNlcnQobmV3IEZsb2F0QW5pbWF0aW9uVmFsdWUo
ZHVyYXRpb24sIGVuZE9wYWNpdHkpKTsKKyAgICBPd25QdHI8Q0NLZXlmcmFtZWRGbG9hdEFuaW1h
dGlvbkN1cnZlPiBjdXJ2ZShDQ0tleWZyYW1lZEZsb2F0QW5pbWF0aW9uQ3VydmU6OmNyZWF0ZSgp
KTsKIAotICAgIFJlZlB0cjxBbmltYXRpb24+IGFuaW1hdGlvbiA9IEFuaW1hdGlvbjo6Y3JlYXRl
KCk7Ci0gICAgYW5pbWF0aW9uLT5zZXREdXJhdGlvbihkdXJhdGlvbik7Ci0KLSAgICBpZiAodXNl
VGltaW5nRnVuY3Rpb24pCi0gICAgICAgIGFuaW1hdGlvbi0+c2V0VGltaW5nRnVuY3Rpb24oTGlu
ZWFyVGltaW5nRnVuY3Rpb246OmNyZWF0ZSgpKTsKKyAgICBpZiAoZHVyYXRpb24gPiAwKQorICAg
ICAgICBjdXJ2ZS0+YWRkS2V5ZnJhbWUoQ0NGbG9hdEtleWZyYW1lOjpjcmVhdGUoMCwgc3RhcnRP
cGFjaXR5LCB1c2VUaW1pbmdGdW5jdGlvbiA/IG51bGxwdHIgOiBDQ0Vhc2VUaW1pbmdGdW5jdGlv
bjo6Y3JlYXRlKCkpKTsKKyAgICBjdXJ2ZS0+YWRkS2V5ZnJhbWUoQ0NGbG9hdEtleWZyYW1lOjpj
cmVhdGUoZHVyYXRpb24sIGVuZE9wYWNpdHksIG51bGxwdHIpKTsKIAotICAgIEludFNpemUgYm94
U2l6ZTsKKyAgICBPd25QdHI8Q0NBY3RpdmVBbmltYXRpb24+IGFuaW1hdGlvbihDQ0FjdGl2ZUFu
aW1hdGlvbjo6Y3JlYXRlKGN1cnZlLnJlbGVhc2UoKSwgMCwgMCwgQ0NBY3RpdmVBbmltYXRpb246
Ok9wYWNpdHkpKTsKKyAgICBhbmltYXRpb24tPnNldE5lZWRzU3luY2hyb25pemVkU3RhcnRUaW1l
KHRydWUpOwogCi0gICAgdGFyZ2V0LmFkZEFuaW1hdGlvbih2YWx1ZXMsIGJveFNpemUsIGFuaW1h
dGlvbi5nZXQoKSwgMCwgMCwgMCk7CisgICAgdGFyZ2V0LmFkZEFuaW1hdGlvbihhbmltYXRpb24u
cmVsZWFzZSgpKTsKIH0KIAogdGVtcGxhdGUgPGNsYXNzIFRhcmdldD4KIHZvaWQgYWRkQW5pbWF0
ZWRUcmFuc2Zvcm0oVGFyZ2V0JiB0YXJnZXQsIGRvdWJsZSBkdXJhdGlvbiwgaW50IGRlbHRhWCwg
aW50IGRlbHRhWSkKIHsKICAgICBzdGF0aWMgaW50IGlkID0gMDsKLSAgICBXZWJDb3JlOjpLZXlm
cmFtZVZhbHVlTGlzdCB2YWx1ZXMoQW5pbWF0ZWRQcm9wZXJ0eVdlYmtpdFRyYW5zZm9ybSk7Cisg
ICAgT3duUHRyPENDS2V5ZnJhbWVkVHJhbnNmb3JtQW5pbWF0aW9uQ3VydmU+IGN1cnZlKENDS2V5
ZnJhbWVkVHJhbnNmb3JtQW5pbWF0aW9uQ3VydmU6OmNyZWF0ZSgpKTsKIAotICAgIFRyYW5zZm9y
bU9wZXJhdGlvbnMgb3BlcmF0aW9uczsKLSAgICBvcGVyYXRpb25zLm9wZXJhdGlvbnMoKS5hcHBl
bmQoVHJhbnNsYXRlVHJhbnNmb3JtT3BlcmF0aW9uOjpjcmVhdGUoTGVuZ3RoKGRlbHRhWCwgV2Vi
Q29yZTo6Rml4ZWQpLCBMZW5ndGgoZGVsdGFZLCBXZWJDb3JlOjpGaXhlZCksIFRyYW5zZm9ybU9w
ZXJhdGlvbjo6VFJBTlNMQVRFX1gpKTsKLSAgICB2YWx1ZXMuaW5zZXJ0KG5ldyBUcmFuc2Zvcm1B
bmltYXRpb25WYWx1ZSgwLCAmb3BlcmF0aW9ucykpOworICAgIGlmIChkdXJhdGlvbiA+IDApIHsK
KyAgICAgICAgV2ViS2l0OjpXZWJUcmFuc2Zvcm1PcGVyYXRpb25zIHN0YXJ0T3BlcmF0aW9uczsK
KyAgICAgICAgc3RhcnRPcGVyYXRpb25zLmFwcGVuZFRyYW5zbGF0ZShkZWx0YVgsIGRlbHRhWSwg
MCk7CisgICAgICAgIGN1cnZlLT5hZGRLZXlmcmFtZShDQ1RyYW5zZm9ybUtleWZyYW1lOjpjcmVh
dGUoMCwgc3RhcnRPcGVyYXRpb25zLCBudWxscHRyKSk7CisgICAgfQogCi0gICAgUmVmUHRyPEFu
aW1hdGlvbj4gYW5pbWF0aW9uID0gQW5pbWF0aW9uOjpjcmVhdGUoKTsKLSAgICBhbmltYXRpb24t
PnNldER1cmF0aW9uKGR1cmF0aW9uKTsKKyAgICBXZWJLaXQ6OldlYlRyYW5zZm9ybU9wZXJhdGlv
bnMgb3BlcmF0aW9uczsKKyAgICBvcGVyYXRpb25zLmFwcGVuZFRyYW5zbGF0ZShkZWx0YVgsIGRl
bHRhWSwgMCk7CisgICAgY3VydmUtPmFkZEtleWZyYW1lKENDVHJhbnNmb3JtS2V5ZnJhbWU6OmNy
ZWF0ZShkdXJhdGlvbiwgb3BlcmF0aW9ucywgbnVsbHB0cikpOwogCi0gICAgSW50U2l6ZSBib3hT
aXplOworICAgIE93blB0cjxDQ0FjdGl2ZUFuaW1hdGlvbj4gYW5pbWF0aW9uKENDQWN0aXZlQW5p
bWF0aW9uOjpjcmVhdGUoY3VydmUucmVsZWFzZSgpLCBpZCsrLCAwLCBDQ0FjdGl2ZUFuaW1hdGlv
bjo6VHJhbnNmb3JtKSk7CisgICAgYW5pbWF0aW9uLT5zZXROZWVkc1N5bmNocm9uaXplZFN0YXJ0
VGltZSh0cnVlKTsKIAotICAgIHRhcmdldC5hZGRBbmltYXRpb24odmFsdWVzLCBib3hTaXplLCBh
bmltYXRpb24uZ2V0KCksICsraWQsIDAsIDApOworICAgIHRhcmdldC5hZGRBbmltYXRpb24oYW5p
bWF0aW9uLnJlbGVhc2UoKSk7CiB9CiAKIH0gLy8gbmFtZXNwYWNlCkBAIC05OSw3ICsxMDIsNyBA
QCBGYWtlVHJhbnNmb3JtVHJhbnNpdGlvbjo6fkZha2VUcmFuc2Zvcm1UcmFuc2l0aW9uKCkKIHsK
IH0KIAotV2ViQ29yZTo6VHJhbnNmb3JtYXRpb25NYXRyaXggRmFrZVRyYW5zZm9ybVRyYW5zaXRp
b246OmdldFZhbHVlKGRvdWJsZSB0aW1lLCBjb25zdCBXZWJDb3JlOjpJbnRTaXplJiBzaXplKSBj
b25zdAorV2ViQ29yZTo6VHJhbnNmb3JtYXRpb25NYXRyaXggRmFrZVRyYW5zZm9ybVRyYW5zaXRp
b246OmdldFZhbHVlKGRvdWJsZSB0aW1lKSBjb25zdAogewogICAgIHJldHVybiBXZWJDb3JlOjpU
cmFuc2Zvcm1hdGlvbk1hdHJpeCgpOwogfQpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYktpdC9jaHJv
bWl1bS90ZXN0cy9DQ0FuaW1hdGlvblRlc3RDb21tb24uaCBiL1NvdXJjZS9XZWJLaXQvY2hyb21p
dW0vdGVzdHMvQ0NBbmltYXRpb25UZXN0Q29tbW9uLmgKaW5kZXggNzc2Yjc1YzhkNmY2ZWFlNDlj
YjJjMjhlZThkNjNjMjFiZTEyMzgzNC4uOTY3ZGQ4MThkZDU2YjhiY2JjZjdhYmM4Y2E0NmY4OTNi
NzBhM2RjNCAxMDA2NDQKLS0tIGEvU291cmNlL1dlYktpdC9jaHJvbWl1bS90ZXN0cy9DQ0FuaW1h
dGlvblRlc3RDb21tb24uaAorKysgYi9Tb3VyY2UvV2ViS2l0L2Nocm9taXVtL3Rlc3RzL0NDQW5p
bWF0aW9uVGVzdENvbW1vbi5oCkBAIC01Myw3ICs1Myw3IEBAIHB1YmxpYzoKICAgICB2aXJ0dWFs
IH5GYWtlVHJhbnNmb3JtVHJhbnNpdGlvbigpOwogCiAgICAgdmlydHVhbCBkb3VibGUgZHVyYXRp
b24oKSBjb25zdCBPVkVSUklERSB7IHJldHVybiBtX2R1cmF0aW9uOyB9Ci0gICAgdmlydHVhbCBX
ZWJDb3JlOjpUcmFuc2Zvcm1hdGlvbk1hdHJpeCBnZXRWYWx1ZShkb3VibGUgdGltZSwgY29uc3Qg
V2ViQ29yZTo6SW50U2l6ZSYpIGNvbnN0IE9WRVJSSURFOworICAgIHZpcnR1YWwgV2ViQ29yZTo6
VHJhbnNmb3JtYXRpb25NYXRyaXggZ2V0VmFsdWUoZG91YmxlIHRpbWUpIGNvbnN0IE9WRVJSSURF
OwogCiAgICAgdmlydHVhbCBQYXNzT3duUHRyPFdlYkNvcmU6OkNDQW5pbWF0aW9uQ3VydmU+IGNs
b25lKCkgY29uc3QgT1ZFUlJJREU7CiAKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJLaXQvY2hyb21p
dW0vdGVzdHMvQ0NLZXlmcmFtZWRBbmltYXRpb25DdXJ2ZVRlc3QuY3BwIGIvU291cmNlL1dlYktp
dC9jaHJvbWl1bS90ZXN0cy9DQ0tleWZyYW1lZEFuaW1hdGlvbkN1cnZlVGVzdC5jcHAKaW5kZXgg
MTViNTU0YTA2OTA1NzUyZjFiZGVmY2I4YWViYjg3MjhmZWVmYTU1YS4uNWFjNzI3Y2I1NzM5ZDQ1
N2NkMjk5ZGNhN2ExMDNlM2I5ZDkwZjI2ZiAxMDA2NDQKLS0tIGEvU291cmNlL1dlYktpdC9jaHJv
bWl1bS90ZXN0cy9DQ0tleWZyYW1lZEFuaW1hdGlvbkN1cnZlVGVzdC5jcHAKKysrIGIvU291cmNl
L1dlYktpdC9jaHJvbWl1bS90ZXN0cy9DQ0tleWZyYW1lZEFuaW1hdGlvbkN1cnZlVGVzdC5jcHAK
QEAgLTMxLDYgKzMxLDcgQEAKIAogI2luY2x1ZGUgPGdtb2NrL2dtb2NrLmg+CiAjaW5jbHVkZSA8
Z3Rlc3QvZ3Rlc3QuaD4KKyNpbmNsdWRlIDxwdWJsaWMvV2ViVHJhbnNmb3JtT3BlcmF0aW9ucy5o
PgogI2luY2x1ZGUgPHd0Zi9Pd25QdHIuaD4KICNpbmNsdWRlIDx3dGYvVmVjdG9yLmg+CiAKQEAg
LTExMyw1NyArMTE0LDU1IEBAIFRFU1QoQ0NLZXlmcmFtZWRBbmltYXRpb25DdXJ2ZVRlc3QsIFJl
cGVhdGVkRmxvYXRLZXlUaW1lcykKIFRFU1QoQ0NLZXlmcmFtZWRBbmltYXRpb25DdXJ2ZVRlc3Qs
IE9uZVRyYW5zZm9ybUtleWZyYW1lKQogewogICAgIE93blB0cjxDQ0tleWZyYW1lZFRyYW5zZm9y
bUFuaW1hdGlvbkN1cnZlPiBjdXJ2ZShDQ0tleWZyYW1lZFRyYW5zZm9ybUFuaW1hdGlvbkN1cnZl
OjpjcmVhdGUoKSk7Ci0gICAgVHJhbnNmb3JtT3BlcmF0aW9ucyBvcGVyYXRpb25zOwotICAgIG9w
ZXJhdGlvbnMub3BlcmF0aW9ucygpLmFwcGVuZChUcmFuc2xhdGVUcmFuc2Zvcm1PcGVyYXRpb246
OmNyZWF0ZShMZW5ndGgoMiwgRml4ZWQpLCBMZW5ndGgoMCwgRml4ZWQpLCBUcmFuc2Zvcm1PcGVy
YXRpb246OlRSQU5TTEFURV9YKSk7CisgICAgV2ViS2l0OjpXZWJUcmFuc2Zvcm1PcGVyYXRpb25z
IG9wZXJhdGlvbnM7CisgICAgb3BlcmF0aW9ucy5hcHBlbmRUcmFuc2xhdGUoMiwgMCwgMCk7CiAg
ICAgY3VydmUtPmFkZEtleWZyYW1lKENDVHJhbnNmb3JtS2V5ZnJhbWU6OmNyZWF0ZSgwLCBvcGVy
YXRpb25zLCBudWxscHRyKSk7CiAKLSAgICBJbnRTaXplIGxheWVyU2l6ZTsgLy8gaWdub3JlZAot
ICAgIGV4cGVjdFRyYW5zbGF0ZVgoMiwgY3VydmUtPmdldFZhbHVlKC0xLCBsYXllclNpemUpKTsK
LSAgICBleHBlY3RUcmFuc2xhdGVYKDIsIGN1cnZlLT5nZXRWYWx1ZSgwLCBsYXllclNpemUpKTsK
LSAgICBleHBlY3RUcmFuc2xhdGVYKDIsIGN1cnZlLT5nZXRWYWx1ZSgwLjUsIGxheWVyU2l6ZSkp
OwotICAgIGV4cGVjdFRyYW5zbGF0ZVgoMiwgY3VydmUtPmdldFZhbHVlKDEsIGxheWVyU2l6ZSkp
OwotICAgIGV4cGVjdFRyYW5zbGF0ZVgoMiwgY3VydmUtPmdldFZhbHVlKDIsIGxheWVyU2l6ZSkp
OworICAgIGV4cGVjdFRyYW5zbGF0ZVgoMiwgY3VydmUtPmdldFZhbHVlKC0xKSk7CisgICAgZXhw
ZWN0VHJhbnNsYXRlWCgyLCBjdXJ2ZS0+Z2V0VmFsdWUoMCkpOworICAgIGV4cGVjdFRyYW5zbGF0
ZVgoMiwgY3VydmUtPmdldFZhbHVlKDAuNSkpOworICAgIGV4cGVjdFRyYW5zbGF0ZVgoMiwgY3Vy
dmUtPmdldFZhbHVlKDEpKTsKKyAgICBleHBlY3RUcmFuc2xhdGVYKDIsIGN1cnZlLT5nZXRWYWx1
ZSgyKSk7CiB9CiAKIC8vIFRlc3RzIHRoYXQgYSB0cmFuc2Zvcm0gYW5pbWF0aW9uIHdpdGggdHdv
IGtleWZyYW1lcyB3b3JrcyBhcyBleHBlY3RlZC4KIFRFU1QoQ0NLZXlmcmFtZWRBbmltYXRpb25D
dXJ2ZVRlc3QsIFR3b1RyYW5zZm9ybUtleWZyYW1lKQogewogICAgIE93blB0cjxDQ0tleWZyYW1l
ZFRyYW5zZm9ybUFuaW1hdGlvbkN1cnZlPiBjdXJ2ZShDQ0tleWZyYW1lZFRyYW5zZm9ybUFuaW1h
dGlvbkN1cnZlOjpjcmVhdGUoKSk7Ci0gICAgVHJhbnNmb3JtT3BlcmF0aW9ucyBvcGVyYXRpb25z
MTsKLSAgICBvcGVyYXRpb25zMS5vcGVyYXRpb25zKCkuYXBwZW5kKFRyYW5zbGF0ZVRyYW5zZm9y
bU9wZXJhdGlvbjo6Y3JlYXRlKExlbmd0aCgyLCBGaXhlZCksIExlbmd0aCgwLCBGaXhlZCksIFRy
YW5zZm9ybU9wZXJhdGlvbjo6VFJBTlNMQVRFX1gpKTsKLSAgICBUcmFuc2Zvcm1PcGVyYXRpb25z
IG9wZXJhdGlvbnMyOwotICAgIG9wZXJhdGlvbnMyLm9wZXJhdGlvbnMoKS5hcHBlbmQoVHJhbnNs
YXRlVHJhbnNmb3JtT3BlcmF0aW9uOjpjcmVhdGUoTGVuZ3RoKDQsIEZpeGVkKSwgTGVuZ3RoKDAs
IEZpeGVkKSwgVHJhbnNmb3JtT3BlcmF0aW9uOjpUUkFOU0xBVEVfWCkpOworICAgIFdlYktpdDo6
V2ViVHJhbnNmb3JtT3BlcmF0aW9ucyBvcGVyYXRpb25zMTsKKyAgICBvcGVyYXRpb25zMS5hcHBl
bmRUcmFuc2xhdGUoMiwgMCwgMCk7CisgICAgV2ViS2l0OjpXZWJUcmFuc2Zvcm1PcGVyYXRpb25z
IG9wZXJhdGlvbnMyOworICAgIG9wZXJhdGlvbnMyLmFwcGVuZFRyYW5zbGF0ZSg0LCAwLCAwKTsK
KwogICAgIGN1cnZlLT5hZGRLZXlmcmFtZShDQ1RyYW5zZm9ybUtleWZyYW1lOjpjcmVhdGUoMCwg
b3BlcmF0aW9uczEsIG51bGxwdHIpKTsKICAgICBjdXJ2ZS0+YWRkS2V5ZnJhbWUoQ0NUcmFuc2Zv
cm1LZXlmcmFtZTo6Y3JlYXRlKDEsIG9wZXJhdGlvbnMyLCBudWxscHRyKSk7Ci0gICAgSW50U2l6
ZSBsYXllclNpemU7IC8vIGlnbm9yZWQKLSAgICBleHBlY3RUcmFuc2xhdGVYKDIsIGN1cnZlLT5n
ZXRWYWx1ZSgtMSwgbGF5ZXJTaXplKSk7Ci0gICAgZXhwZWN0VHJhbnNsYXRlWCgyLCBjdXJ2ZS0+
Z2V0VmFsdWUoMCwgbGF5ZXJTaXplKSk7Ci0gICAgZXhwZWN0VHJhbnNsYXRlWCgzLCBjdXJ2ZS0+
Z2V0VmFsdWUoMC41LCBsYXllclNpemUpKTsKLSAgICBleHBlY3RUcmFuc2xhdGVYKDQsIGN1cnZl
LT5nZXRWYWx1ZSgxLCBsYXllclNpemUpKTsKLSAgICBleHBlY3RUcmFuc2xhdGVYKDQsIGN1cnZl
LT5nZXRWYWx1ZSgyLCBsYXllclNpemUpKTsKKyAgICBleHBlY3RUcmFuc2xhdGVYKDIsIGN1cnZl
LT5nZXRWYWx1ZSgtMSkpOworICAgIGV4cGVjdFRyYW5zbGF0ZVgoMiwgY3VydmUtPmdldFZhbHVl
KDApKTsKKyAgICBleHBlY3RUcmFuc2xhdGVYKDMsIGN1cnZlLT5nZXRWYWx1ZSgwLjUpKTsKKyAg
ICBleHBlY3RUcmFuc2xhdGVYKDQsIGN1cnZlLT5nZXRWYWx1ZSgxKSk7CisgICAgZXhwZWN0VHJh
bnNsYXRlWCg0LCBjdXJ2ZS0+Z2V0VmFsdWUoMikpOwogfQogCiAvLyBUZXN0cyB0aGF0IGEgdHJh
bnNmb3JtIGFuaW1hdGlvbiB3aXRoIHRocmVlIGtleWZyYW1lcyB3b3JrcyBhcyBleHBlY3RlZC4K
IFRFU1QoQ0NLZXlmcmFtZWRBbmltYXRpb25DdXJ2ZVRlc3QsIFRocmVlVHJhbnNmb3JtS2V5ZnJh
bWUpCiB7CiAgICAgT3duUHRyPENDS2V5ZnJhbWVkVHJhbnNmb3JtQW5pbWF0aW9uQ3VydmU+IGN1
cnZlKENDS2V5ZnJhbWVkVHJhbnNmb3JtQW5pbWF0aW9uQ3VydmU6OmNyZWF0ZSgpKTsKLSAgICBU
cmFuc2Zvcm1PcGVyYXRpb25zIG9wZXJhdGlvbnMxOwotICAgIG9wZXJhdGlvbnMxLm9wZXJhdGlv
bnMoKS5hcHBlbmQoVHJhbnNsYXRlVHJhbnNmb3JtT3BlcmF0aW9uOjpjcmVhdGUoTGVuZ3RoKDIs
IEZpeGVkKSwgTGVuZ3RoKDAsIEZpeGVkKSwgVHJhbnNmb3JtT3BlcmF0aW9uOjpUUkFOU0xBVEVf
WCkpOwotICAgIFRyYW5zZm9ybU9wZXJhdGlvbnMgb3BlcmF0aW9uczI7Ci0gICAgb3BlcmF0aW9u
czIub3BlcmF0aW9ucygpLmFwcGVuZChUcmFuc2xhdGVUcmFuc2Zvcm1PcGVyYXRpb246OmNyZWF0
ZShMZW5ndGgoNCwgRml4ZWQpLCBMZW5ndGgoMCwgRml4ZWQpLCBUcmFuc2Zvcm1PcGVyYXRpb246
OlRSQU5TTEFURV9YKSk7Ci0gICAgVHJhbnNmb3JtT3BlcmF0aW9ucyBvcGVyYXRpb25zMzsKLSAg
ICBvcGVyYXRpb25zMy5vcGVyYXRpb25zKCkuYXBwZW5kKFRyYW5zbGF0ZVRyYW5zZm9ybU9wZXJh
dGlvbjo6Y3JlYXRlKExlbmd0aCg4LCBGaXhlZCksIExlbmd0aCgwLCBGaXhlZCksIFRyYW5zZm9y
bU9wZXJhdGlvbjo6VFJBTlNMQVRFX1gpKTsKKyAgICBXZWJLaXQ6OldlYlRyYW5zZm9ybU9wZXJh
dGlvbnMgb3BlcmF0aW9uczE7CisgICAgb3BlcmF0aW9uczEuYXBwZW5kVHJhbnNsYXRlKDIsIDAs
IDApOworICAgIFdlYktpdDo6V2ViVHJhbnNmb3JtT3BlcmF0aW9ucyBvcGVyYXRpb25zMjsKKyAg
ICBvcGVyYXRpb25zMi5hcHBlbmRUcmFuc2xhdGUoNCwgMCwgMCk7CisgICAgV2ViS2l0OjpXZWJU
cmFuc2Zvcm1PcGVyYXRpb25zIG9wZXJhdGlvbnMzOworICAgIG9wZXJhdGlvbnMzLmFwcGVuZFRy
YW5zbGF0ZSg4LCAwLCAwKTsKICAgICBjdXJ2ZS0+YWRkS2V5ZnJhbWUoQ0NUcmFuc2Zvcm1LZXlm
cmFtZTo6Y3JlYXRlKDAsIG9wZXJhdGlvbnMxLCBudWxscHRyKSk7CiAgICAgY3VydmUtPmFkZEtl
eWZyYW1lKENDVHJhbnNmb3JtS2V5ZnJhbWU6OmNyZWF0ZSgxLCBvcGVyYXRpb25zMiwgbnVsbHB0
cikpOwogICAgIGN1cnZlLT5hZGRLZXlmcmFtZShDQ1RyYW5zZm9ybUtleWZyYW1lOjpjcmVhdGUo
Miwgb3BlcmF0aW9uczMsIG51bGxwdHIpKTsKLSAgICBJbnRTaXplIGxheWVyU2l6ZTsgLy8gaWdu
b3JlZAotICAgIGV4cGVjdFRyYW5zbGF0ZVgoMiwgY3VydmUtPmdldFZhbHVlKC0xLCBsYXllclNp
emUpKTsKLSAgICBleHBlY3RUcmFuc2xhdGVYKDIsIGN1cnZlLT5nZXRWYWx1ZSgwLCBsYXllclNp
emUpKTsKLSAgICBleHBlY3RUcmFuc2xhdGVYKDMsIGN1cnZlLT5nZXRWYWx1ZSgwLjUsIGxheWVy
U2l6ZSkpOwotICAgIGV4cGVjdFRyYW5zbGF0ZVgoNCwgY3VydmUtPmdldFZhbHVlKDEsIGxheWVy
U2l6ZSkpOwotICAgIGV4cGVjdFRyYW5zbGF0ZVgoNiwgY3VydmUtPmdldFZhbHVlKDEuNSwgbGF5
ZXJTaXplKSk7Ci0gICAgZXhwZWN0VHJhbnNsYXRlWCg4LCBjdXJ2ZS0+Z2V0VmFsdWUoMiwgbGF5
ZXJTaXplKSk7Ci0gICAgZXhwZWN0VHJhbnNsYXRlWCg4LCBjdXJ2ZS0+Z2V0VmFsdWUoMywgbGF5
ZXJTaXplKSk7CisgICAgZXhwZWN0VHJhbnNsYXRlWCgyLCBjdXJ2ZS0+Z2V0VmFsdWUoLTEpKTsK
KyAgICBleHBlY3RUcmFuc2xhdGVYKDIsIGN1cnZlLT5nZXRWYWx1ZSgwKSk7CisgICAgZXhwZWN0
VHJhbnNsYXRlWCgzLCBjdXJ2ZS0+Z2V0VmFsdWUoMC41KSk7CisgICAgZXhwZWN0VHJhbnNsYXRl
WCg0LCBjdXJ2ZS0+Z2V0VmFsdWUoMSkpOworICAgIGV4cGVjdFRyYW5zbGF0ZVgoNiwgY3VydmUt
PmdldFZhbHVlKDEuNSkpOworICAgIGV4cGVjdFRyYW5zbGF0ZVgoOCwgY3VydmUtPmdldFZhbHVl
KDIpKTsKKyAgICBleHBlY3RUcmFuc2xhdGVYKDgsIGN1cnZlLT5nZXRWYWx1ZSgzKSk7CiB9CiAK
IC8vIFRlc3RzIHRoYXQgYSB0cmFuc2Zvcm0gYW5pbWF0aW9uIHdpdGggbXVsdGlwbGUga2V5cyBh
dCBhIGdpdmVuIHRpbWUgd29ya3Mgc2FuZWx5LgpAQCAtMTcxLDM0ICsxNzAsMzIgQEAgVEVTVChD
Q0tleWZyYW1lZEFuaW1hdGlvbkN1cnZlVGVzdCwgUmVwZWF0ZWRUcmFuc2Zvcm1LZXlUaW1lcykK
IHsKICAgICBPd25QdHI8Q0NLZXlmcmFtZWRUcmFuc2Zvcm1BbmltYXRpb25DdXJ2ZT4gY3VydmUo
Q0NLZXlmcmFtZWRUcmFuc2Zvcm1BbmltYXRpb25DdXJ2ZTo6Y3JlYXRlKCkpOwogICAgIC8vIEEg
c3RlcCBmdW5jdGlvbi4KLSAgICBUcmFuc2Zvcm1PcGVyYXRpb25zIG9wZXJhdGlvbnMxOwotICAg
IG9wZXJhdGlvbnMxLm9wZXJhdGlvbnMoKS5hcHBlbmQoVHJhbnNsYXRlVHJhbnNmb3JtT3BlcmF0
aW9uOjpjcmVhdGUoTGVuZ3RoKDQsIEZpeGVkKSwgTGVuZ3RoKDAsIEZpeGVkKSwgVHJhbnNmb3Jt
T3BlcmF0aW9uOjpUUkFOU0xBVEVfWCkpOwotICAgIFRyYW5zZm9ybU9wZXJhdGlvbnMgb3BlcmF0
aW9uczI7Ci0gICAgb3BlcmF0aW9uczIub3BlcmF0aW9ucygpLmFwcGVuZChUcmFuc2xhdGVUcmFu
c2Zvcm1PcGVyYXRpb246OmNyZWF0ZShMZW5ndGgoNCwgRml4ZWQpLCBMZW5ndGgoMCwgRml4ZWQp
LCBUcmFuc2Zvcm1PcGVyYXRpb246OlRSQU5TTEFURV9YKSk7Ci0gICAgVHJhbnNmb3JtT3BlcmF0
aW9ucyBvcGVyYXRpb25zMzsKLSAgICBvcGVyYXRpb25zMy5vcGVyYXRpb25zKCkuYXBwZW5kKFRy
YW5zbGF0ZVRyYW5zZm9ybU9wZXJhdGlvbjo6Y3JlYXRlKExlbmd0aCg2LCBGaXhlZCksIExlbmd0
aCgwLCBGaXhlZCksIFRyYW5zZm9ybU9wZXJhdGlvbjo6VFJBTlNMQVRFX1gpKTsKLSAgICBUcmFu
c2Zvcm1PcGVyYXRpb25zIG9wZXJhdGlvbnM0OwotICAgIG9wZXJhdGlvbnM0Lm9wZXJhdGlvbnMo
KS5hcHBlbmQoVHJhbnNsYXRlVHJhbnNmb3JtT3BlcmF0aW9uOjpjcmVhdGUoTGVuZ3RoKDYsIEZp
eGVkKSwgTGVuZ3RoKDAsIEZpeGVkKSwgVHJhbnNmb3JtT3BlcmF0aW9uOjpUUkFOU0xBVEVfWCkp
OworICAgIFdlYktpdDo6V2ViVHJhbnNmb3JtT3BlcmF0aW9ucyBvcGVyYXRpb25zMTsKKyAgICBv
cGVyYXRpb25zMS5hcHBlbmRUcmFuc2xhdGUoNCwgMCwgMCk7CisgICAgV2ViS2l0OjpXZWJUcmFu
c2Zvcm1PcGVyYXRpb25zIG9wZXJhdGlvbnMyOworICAgIG9wZXJhdGlvbnMyLmFwcGVuZFRyYW5z
bGF0ZSg0LCAwLCAwKTsKKyAgICBXZWJLaXQ6OldlYlRyYW5zZm9ybU9wZXJhdGlvbnMgb3BlcmF0
aW9uczM7CisgICAgb3BlcmF0aW9uczMuYXBwZW5kVHJhbnNsYXRlKDYsIDAsIDApOworICAgIFdl
YktpdDo6V2ViVHJhbnNmb3JtT3BlcmF0aW9ucyBvcGVyYXRpb25zNDsKKyAgICBvcGVyYXRpb25z
NC5hcHBlbmRUcmFuc2xhdGUoNiwgMCwgMCk7CiAgICAgY3VydmUtPmFkZEtleWZyYW1lKENDVHJh
bnNmb3JtS2V5ZnJhbWU6OmNyZWF0ZSgwLCBvcGVyYXRpb25zMSwgbnVsbHB0cikpOwogICAgIGN1
cnZlLT5hZGRLZXlmcmFtZShDQ1RyYW5zZm9ybUtleWZyYW1lOjpjcmVhdGUoMSwgb3BlcmF0aW9u
czIsIG51bGxwdHIpKTsKICAgICBjdXJ2ZS0+YWRkS2V5ZnJhbWUoQ0NUcmFuc2Zvcm1LZXlmcmFt
ZTo6Y3JlYXRlKDEsIG9wZXJhdGlvbnMzLCBudWxscHRyKSk7CiAgICAgY3VydmUtPmFkZEtleWZy
YW1lKENDVHJhbnNmb3JtS2V5ZnJhbWU6OmNyZWF0ZSgyLCBvcGVyYXRpb25zNCwgbnVsbHB0cikp
OwogCi0gICAgSW50U2l6ZSBsYXllclNpemU7IC8vIGlnbm9yZWQKLQotICAgIGV4cGVjdFRyYW5z
bGF0ZVgoNCwgY3VydmUtPmdldFZhbHVlKC0xLCBsYXllclNpemUpKTsKLSAgICBleHBlY3RUcmFu
c2xhdGVYKDQsIGN1cnZlLT5nZXRWYWx1ZSgwLCBsYXllclNpemUpKTsKLSAgICBleHBlY3RUcmFu
c2xhdGVYKDQsIGN1cnZlLT5nZXRWYWx1ZSgwLjUsIGxheWVyU2l6ZSkpOworICAgIGV4cGVjdFRy
YW5zbGF0ZVgoNCwgY3VydmUtPmdldFZhbHVlKC0xKSk7CisgICAgZXhwZWN0VHJhbnNsYXRlWCg0
LCBjdXJ2ZS0+Z2V0VmFsdWUoMCkpOworICAgIGV4cGVjdFRyYW5zbGF0ZVgoNCwgY3VydmUtPmdl
dFZhbHVlKDAuNSkpOwogCiAgICAgLy8gVGhlcmUgaXMgYSBkaXNjb250aW51aXR5IGF0IDEuIEFu
eSB2YWx1ZSBiZXR3ZWVuIDQgYW5kIDYgaXMgdmFsaWQuCi0gICAgVHJhbnNmb3JtYXRpb25NYXRy
aXggdmFsdWUgPSBjdXJ2ZS0+Z2V0VmFsdWUoMSwgbGF5ZXJTaXplKTsKKyAgICBUcmFuc2Zvcm1h
dGlvbk1hdHJpeCB2YWx1ZSA9IGN1cnZlLT5nZXRWYWx1ZSgxKTsKICAgICBUcmFuc2Zvcm1hdGlv
bk1hdHJpeDo6RGVjb21wb3NlZFR5cGUgZGVjb21wb3NlZFR5cGU7CiAgICAgdmFsdWUuZGVjb21w
b3NlKGRlY29tcG9zZWRUeXBlKTsKICAgICBFWFBFQ1RfVFJVRShkZWNvbXBvc2VkVHlwZS50cmFu
c2xhdGVYID49IDQgJiYgZGVjb21wb3NlZFR5cGUudHJhbnNsYXRlWCA8PSA2KTsKIAotICAgIGV4
cGVjdFRyYW5zbGF0ZVgoNiwgY3VydmUtPmdldFZhbHVlKDEuNSwgbGF5ZXJTaXplKSk7Ci0gICAg
ZXhwZWN0VHJhbnNsYXRlWCg2LCBjdXJ2ZS0+Z2V0VmFsdWUoMiwgbGF5ZXJTaXplKSk7Ci0gICAg
ZXhwZWN0VHJhbnNsYXRlWCg2LCBjdXJ2ZS0+Z2V0VmFsdWUoMywgbGF5ZXJTaXplKSk7CisgICAg
ZXhwZWN0VHJhbnNsYXRlWCg2LCBjdXJ2ZS0+Z2V0VmFsdWUoMS41KSk7CisgICAgZXhwZWN0VHJh
bnNsYXRlWCg2LCBjdXJ2ZS0+Z2V0VmFsdWUoMikpOworICAgIGV4cGVjdFRyYW5zbGF0ZVgoNiwg
Y3VydmUtPmdldFZhbHVlKDMpKTsKIH0KIAogLy8gVGVzdHMgdGhhdCB0aGUga2V5ZnJhbWVzIG1h
eSBiZSBhZGRlZCBvdXQgb2Ygb3JkZXIuCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViS2l0L2Nocm9t
aXVtL3Rlc3RzL0NDTGF5ZXJBbmltYXRpb25Db250cm9sbGVyVGVzdC5jcHAgYi9Tb3VyY2UvV2Vi
S2l0L2Nocm9taXVtL3Rlc3RzL0NDTGF5ZXJBbmltYXRpb25Db250cm9sbGVyVGVzdC5jcHAKaW5k
ZXggODI3MTk0YmJjNDE1MzZmMmZhYzM0OTFkM2Q1MWU0NDg4YTExNDJmNi4uMDJhZTUwNDQ5YTU3
MDM3NDc1OWI1Yjk4YzA1ZWUwZjQzODM0Y2Q1MSAxMDA2NDQKLS0tIGEvU291cmNlL1dlYktpdC9j
aHJvbWl1bS90ZXN0cy9DQ0xheWVyQW5pbWF0aW9uQ29udHJvbGxlclRlc3QuY3BwCisrKyBiL1Nv
dXJjZS9XZWJLaXQvY2hyb21pdW0vdGVzdHMvQ0NMYXllckFuaW1hdGlvbkNvbnRyb2xsZXJUZXN0
LmNwcApAQCAtMjksNyArMjksNiBAQAogI2luY2x1ZGUgIkNDQW5pbWF0aW9uVGVzdENvbW1vbi5o
IgogI2luY2x1ZGUgIkdyYXBoaWNzTGF5ZXIuaCIKICNpbmNsdWRlICJMZW5ndGguaCIKLSNpbmNs
dWRlICJUcmFuc2xhdGVUcmFuc2Zvcm1PcGVyYXRpb24uaCIKICNpbmNsdWRlICJjYy9DQ0FjdGl2
ZUFuaW1hdGlvbi5oIgogI2luY2x1ZGUgImNjL0NDQW5pbWF0aW9uQ3VydmUuaCIKIApAQCAtNDIs
MjA5ICs0MSwxMSBAQCB1c2luZyBuYW1lc3BhY2UgV2ViS2l0VGVzdHM7CiAKIG5hbWVzcGFjZSB7
CiAKLXZvaWQgZXhwZWN0VHJhbnNsYXRlWChkb3VibGUgdHJhbnNsYXRlWCwgY29uc3QgVHJhbnNm
b3JtYXRpb25NYXRyaXgmIG1hdHJpeCkKLXsKLSAgICBUcmFuc2Zvcm1hdGlvbk1hdHJpeDo6RGVj
b21wb3NlZFR5cGUgZGVjb21wb3NlZFR5cGU7Ci0gICAgbWF0cml4LmRlY29tcG9zZShkZWNvbXBv
c2VkVHlwZSk7Ci0gICAgRVhQRUNUX0ZMT0FUX0VRKHRyYW5zbGF0ZVgsIGRlY29tcG9zZWRUeXBl
LnRyYW5zbGF0ZVgpOwotfQotCiBQYXNzT3duUHRyPENDQWN0aXZlQW5pbWF0aW9uPiBjcmVhdGVB
Y3RpdmVBbmltYXRpb24oUGFzc093blB0cjxDQ0FuaW1hdGlvbkN1cnZlPiBjdXJ2ZSwgaW50IGlk
LCBDQ0FjdGl2ZUFuaW1hdGlvbjo6VGFyZ2V0UHJvcGVydHkgcHJvcGVydHkpCiB7CiAgICAgcmV0
dXJuIENDQWN0aXZlQW5pbWF0aW9uOjpjcmVhdGUoY3VydmUsIDAsIGlkLCBwcm9wZXJ0eSk7CiB9
CiAKLVRFU1QoQ0NMYXllckFuaW1hdGlvbkNvbnRyb2xsZXJUZXN0LCBjcmVhdGVPcGFjaXR5QW5p
bWF0aW9uKQotewotICAgIEZha2VMYXllckFuaW1hdGlvbkNvbnRyb2xsZXJDbGllbnQgZHVtbXk7
Ci0gICAgT3duUHRyPENDTGF5ZXJBbmltYXRpb25Db250cm9sbGVyPiBjb250cm9sbGVyKENDTGF5
ZXJBbmltYXRpb25Db250cm9sbGVyOjpjcmVhdGUoJmR1bW15KSk7Ci0gICAgY29uc3QgZG91Ymxl
IGR1cmF0aW9uID0gMTsKLSAgICBXZWJDb3JlOjpLZXlmcmFtZVZhbHVlTGlzdCB2YWx1ZXMoQW5p
bWF0ZWRQcm9wZXJ0eU9wYWNpdHkpOwotICAgIHZhbHVlcy5pbnNlcnQobmV3IEZsb2F0QW5pbWF0
aW9uVmFsdWUoMCwgMCkpOwotICAgIHZhbHVlcy5pbnNlcnQobmV3IEZsb2F0QW5pbWF0aW9uVmFs
dWUoZHVyYXRpb24sIDEpKTsKLQotICAgIFJlZlB0cjxBbmltYXRpb24+IGFuaW1hdGlvbiA9IEFu
aW1hdGlvbjo6Y3JlYXRlKCk7Ci0gICAgYW5pbWF0aW9uLT5zZXREdXJhdGlvbihkdXJhdGlvbik7
Ci0KLSAgICBJbnRTaXplIGJveFNpemU7Ci0gICAgY29udHJvbGxlci0+YWRkQW5pbWF0aW9uKHZh
bHVlcywgYm94U2l6ZSwgYW5pbWF0aW9uLmdldCgpLCAwLCAwLCAwKTsKLQotICAgIEVYUEVDVF9U
UlVFKGNvbnRyb2xsZXItPmhhc0FjdGl2ZUFuaW1hdGlvbigpKTsKLQotICAgIENDQWN0aXZlQW5p
bWF0aW9uKiBhY3RpdmVBbmltYXRpb24gPSBjb250cm9sbGVyLT5nZXRBY3RpdmVBbmltYXRpb24o
MCwgQ0NBY3RpdmVBbmltYXRpb246Ok9wYWNpdHkpOwotICAgIEVYUEVDVF9UUlVFKGFjdGl2ZUFu
aW1hdGlvbik7Ci0KLSAgICBFWFBFQ1RfRVEoMSwgYWN0aXZlQW5pbWF0aW9uLT5pdGVyYXRpb25z
KCkpOwotICAgIEVYUEVDVF9FUShDQ0FjdGl2ZUFuaW1hdGlvbjo6T3BhY2l0eSwgYWN0aXZlQW5p
bWF0aW9uLT50YXJnZXRQcm9wZXJ0eSgpKTsKLQotICAgIEVYUEVDVF9FUShDQ0FuaW1hdGlvbkN1
cnZlOjpGbG9hdCwgYWN0aXZlQW5pbWF0aW9uLT5jdXJ2ZSgpLT50eXBlKCkpOwotCi0gICAgY29u
c3QgQ0NGbG9hdEFuaW1hdGlvbkN1cnZlKiBjdXJ2ZSA9IGFjdGl2ZUFuaW1hdGlvbi0+Y3VydmUo
KS0+dG9GbG9hdEFuaW1hdGlvbkN1cnZlKCk7Ci0gICAgRVhQRUNUX1RSVUUoY3VydmUpOwotCi0g
ICAgRVhQRUNUX0VRKDAsIGN1cnZlLT5nZXRWYWx1ZSgwKSk7Ci0gICAgRVhQRUNUX0VRKDEsIGN1
cnZlLT5nZXRWYWx1ZShkdXJhdGlvbikpOwotfQotCi1URVNUKENDTGF5ZXJBbmltYXRpb25Db250
cm9sbGVyVGVzdCwgY3JlYXRlVHJhbnNmb3JtQW5pbWF0aW9uKQotewotICAgIEZha2VMYXllckFu
aW1hdGlvbkNvbnRyb2xsZXJDbGllbnQgZHVtbXk7Ci0gICAgT3duUHRyPENDTGF5ZXJBbmltYXRp
b25Db250cm9sbGVyPiBjb250cm9sbGVyKENDTGF5ZXJBbmltYXRpb25Db250cm9sbGVyOjpjcmVh
dGUoJmR1bW15KSk7Ci0gICAgY29uc3QgZG91YmxlIGR1cmF0aW9uID0gMTsKLSAgICBXZWJDb3Jl
OjpLZXlmcmFtZVZhbHVlTGlzdCB2YWx1ZXMoQW5pbWF0ZWRQcm9wZXJ0eVdlYmtpdFRyYW5zZm9y
bSk7Ci0KLSAgICBUcmFuc2Zvcm1PcGVyYXRpb25zIG9wZXJhdGlvbnMxOwotICAgIG9wZXJhdGlv
bnMxLm9wZXJhdGlvbnMoKS5hcHBlbmQoVHJhbnNsYXRlVHJhbnNmb3JtT3BlcmF0aW9uOjpjcmVh
dGUoTGVuZ3RoKDIsIEZpeGVkKSwgTGVuZ3RoKDAsIEZpeGVkKSwgVHJhbnNmb3JtT3BlcmF0aW9u
OjpUUkFOU0xBVEVfWCkpOwotICAgIHZhbHVlcy5pbnNlcnQobmV3IFRyYW5zZm9ybUFuaW1hdGlv
blZhbHVlKDAsICZvcGVyYXRpb25zMSkpOwotCi0gICAgVHJhbnNmb3JtT3BlcmF0aW9ucyBvcGVy
YXRpb25zMjsKLSAgICBvcGVyYXRpb25zMi5vcGVyYXRpb25zKCkuYXBwZW5kKFRyYW5zbGF0ZVRy
YW5zZm9ybU9wZXJhdGlvbjo6Y3JlYXRlKExlbmd0aCg0LCBGaXhlZCksIExlbmd0aCgwLCBGaXhl
ZCksIFRyYW5zZm9ybU9wZXJhdGlvbjo6VFJBTlNMQVRFX1gpKTsKLSAgICB2YWx1ZXMuaW5zZXJ0
KG5ldyBUcmFuc2Zvcm1BbmltYXRpb25WYWx1ZShkdXJhdGlvbiwgJm9wZXJhdGlvbnMyKSk7Ci0K
LSAgICBSZWZQdHI8QW5pbWF0aW9uPiBhbmltYXRpb24gPSBBbmltYXRpb246OmNyZWF0ZSgpOwot
ICAgIGFuaW1hdGlvbi0+c2V0RHVyYXRpb24oZHVyYXRpb24pOwotCi0gICAgSW50U2l6ZSBib3hT
aXplOwotICAgIGNvbnRyb2xsZXItPmFkZEFuaW1hdGlvbih2YWx1ZXMsIGJveFNpemUsIGFuaW1h
dGlvbi5nZXQoKSwgMCwgMCwgMCk7Ci0KLSAgICBFWFBFQ1RfVFJVRShjb250cm9sbGVyLT5oYXNB
Y3RpdmVBbmltYXRpb24oKSk7Ci0KLSAgICBDQ0FjdGl2ZUFuaW1hdGlvbiogYWN0aXZlQW5pbWF0
aW9uID0gY29udHJvbGxlci0+Z2V0QWN0aXZlQW5pbWF0aW9uKDAsIENDQWN0aXZlQW5pbWF0aW9u
OjpUcmFuc2Zvcm0pOwotICAgIEVYUEVDVF9UUlVFKGFjdGl2ZUFuaW1hdGlvbik7Ci0KLSAgICBF
WFBFQ1RfRVEoMSwgYWN0aXZlQW5pbWF0aW9uLT5pdGVyYXRpb25zKCkpOwotICAgIEVYUEVDVF9F
UShDQ0FjdGl2ZUFuaW1hdGlvbjo6VHJhbnNmb3JtLCBhY3RpdmVBbmltYXRpb24tPnRhcmdldFBy
b3BlcnR5KCkpOwotCi0gICAgRVhQRUNUX0VRKENDQW5pbWF0aW9uQ3VydmU6OlRyYW5zZm9ybSwg
YWN0aXZlQW5pbWF0aW9uLT5jdXJ2ZSgpLT50eXBlKCkpOwotCi0gICAgY29uc3QgQ0NUcmFuc2Zv
cm1BbmltYXRpb25DdXJ2ZSogY3VydmUgPSBhY3RpdmVBbmltYXRpb24tPmN1cnZlKCktPnRvVHJh
bnNmb3JtQW5pbWF0aW9uQ3VydmUoKTsKLSAgICBFWFBFQ1RfVFJVRShjdXJ2ZSk7Ci0KLSAgICBl
eHBlY3RUcmFuc2xhdGVYKDIsIGN1cnZlLT5nZXRWYWx1ZSgwLCBib3hTaXplKSk7Ci0gICAgZXhw
ZWN0VHJhbnNsYXRlWCg0LCBjdXJ2ZS0+Z2V0VmFsdWUoZHVyYXRpb24sIGJveFNpemUpKTsKLX0K
LQotVEVTVChDQ0xheWVyQW5pbWF0aW9uQ29udHJvbGxlclRlc3QsIGNyZWF0ZVJldmVyc2VkQW5p
bWF0aW9uKQotewotICAgIEZha2VMYXllckFuaW1hdGlvbkNvbnRyb2xsZXJDbGllbnQgZHVtbXk7
Ci0gICAgT3duUHRyPENDTGF5ZXJBbmltYXRpb25Db250cm9sbGVyPiBjb250cm9sbGVyKENDTGF5
ZXJBbmltYXRpb25Db250cm9sbGVyOjpjcmVhdGUoJmR1bW15KSk7Ci0gICAgY29uc3QgZG91Ymxl
IGR1cmF0aW9uID0gMTsKLSAgICBXZWJDb3JlOjpLZXlmcmFtZVZhbHVlTGlzdCB2YWx1ZXMoQW5p
bWF0ZWRQcm9wZXJ0eVdlYmtpdFRyYW5zZm9ybSk7Ci0KLSAgICBUcmFuc2Zvcm1PcGVyYXRpb25z
IG9wZXJhdGlvbnMxOwotICAgIG9wZXJhdGlvbnMxLm9wZXJhdGlvbnMoKS5hcHBlbmQoVHJhbnNs
YXRlVHJhbnNmb3JtT3BlcmF0aW9uOjpjcmVhdGUoTGVuZ3RoKDIsIEZpeGVkKSwgTGVuZ3RoKDAs
IEZpeGVkKSwgVHJhbnNmb3JtT3BlcmF0aW9uOjpUUkFOU0xBVEVfWCkpOwotICAgIHZhbHVlcy5p
bnNlcnQobmV3IFRyYW5zZm9ybUFuaW1hdGlvblZhbHVlKDAsICZvcGVyYXRpb25zMSkpOwotCi0g
ICAgVHJhbnNmb3JtT3BlcmF0aW9ucyBvcGVyYXRpb25zMjsKLSAgICBvcGVyYXRpb25zMi5vcGVy
YXRpb25zKCkuYXBwZW5kKFRyYW5zbGF0ZVRyYW5zZm9ybU9wZXJhdGlvbjo6Y3JlYXRlKExlbmd0
aCg0LCBGaXhlZCksIExlbmd0aCgwLCBGaXhlZCksIFRyYW5zZm9ybU9wZXJhdGlvbjo6VFJBTlNM
QVRFX1gpKTsKLSAgICB2YWx1ZXMuaW5zZXJ0KG5ldyBUcmFuc2Zvcm1BbmltYXRpb25WYWx1ZShk
dXJhdGlvbiwgJm9wZXJhdGlvbnMyKSk7Ci0KLSAgICBSZWZQdHI8QW5pbWF0aW9uPiBhbmltYXRp
b24gPSBBbmltYXRpb246OmNyZWF0ZSgpOwotICAgIGFuaW1hdGlvbi0+c2V0RHVyYXRpb24oZHVy
YXRpb24pOwotICAgIGFuaW1hdGlvbi0+c2V0RGlyZWN0aW9uKEFuaW1hdGlvbjo6QW5pbWF0aW9u
RGlyZWN0aW9uUmV2ZXJzZSk7Ci0KLSAgICBJbnRTaXplIGJveFNpemU7Ci0gICAgY29udHJvbGxl
ci0+YWRkQW5pbWF0aW9uKHZhbHVlcywgYm94U2l6ZSwgYW5pbWF0aW9uLmdldCgpLCAwLCAwLCAw
KTsKLQotICAgIEVYUEVDVF9UUlVFKGNvbnRyb2xsZXItPmhhc0FjdGl2ZUFuaW1hdGlvbigpKTsK
LQotICAgIENDQWN0aXZlQW5pbWF0aW9uKiBhY3RpdmVBbmltYXRpb24gPSBjb250cm9sbGVyLT5n
ZXRBY3RpdmVBbmltYXRpb24oMCwgQ0NBY3RpdmVBbmltYXRpb246OlRyYW5zZm9ybSk7Ci0gICAg
RVhQRUNUX1RSVUUoYWN0aXZlQW5pbWF0aW9uKTsKLQotICAgIEVYUEVDVF9FUSgxLCBhY3RpdmVB
bmltYXRpb24tPml0ZXJhdGlvbnMoKSk7Ci0gICAgRVhQRUNUX0VRKENDQWN0aXZlQW5pbWF0aW9u
OjpUcmFuc2Zvcm0sIGFjdGl2ZUFuaW1hdGlvbi0+dGFyZ2V0UHJvcGVydHkoKSk7Ci0KLSAgICBF
WFBFQ1RfRVEoQ0NBbmltYXRpb25DdXJ2ZTo6VHJhbnNmb3JtLCBhY3RpdmVBbmltYXRpb24tPmN1
cnZlKCktPnR5cGUoKSk7Ci0KLSAgICBjb25zdCBDQ1RyYW5zZm9ybUFuaW1hdGlvbkN1cnZlKiBj
dXJ2ZSA9IGFjdGl2ZUFuaW1hdGlvbi0+Y3VydmUoKS0+dG9UcmFuc2Zvcm1BbmltYXRpb25DdXJ2
ZSgpOwotICAgIEVYUEVDVF9UUlVFKGN1cnZlKTsKLQotICAgIGV4cGVjdFRyYW5zbGF0ZVgoNCwg
Y3VydmUtPmdldFZhbHVlKDAsIGJveFNpemUpKTsKLSAgICBleHBlY3RUcmFuc2xhdGVYKDIsIGN1
cnZlLT5nZXRWYWx1ZShkdXJhdGlvbiwgYm94U2l6ZSkpOwotfQotCi1URVNUKENDTGF5ZXJBbmlt
YXRpb25Db250cm9sbGVyVGVzdCwgY3JlYXRlQWx0ZXJuYXRpbmdBbmltYXRpb24pCi17Ci0gICAg
RmFrZUxheWVyQW5pbWF0aW9uQ29udHJvbGxlckNsaWVudCBkdW1teTsKLSAgICBPd25QdHI8Q0NM
YXllckFuaW1hdGlvbkNvbnRyb2xsZXI+IGNvbnRyb2xsZXIoQ0NMYXllckFuaW1hdGlvbkNvbnRy
b2xsZXI6OmNyZWF0ZSgmZHVtbXkpKTsKLSAgICBjb25zdCBkb3VibGUgZHVyYXRpb24gPSAxOwot
ICAgIFdlYkNvcmU6OktleWZyYW1lVmFsdWVMaXN0IHZhbHVlcyhBbmltYXRlZFByb3BlcnR5V2Vi
a2l0VHJhbnNmb3JtKTsKLQotICAgIFRyYW5zZm9ybU9wZXJhdGlvbnMgb3BlcmF0aW9uczE7Ci0g
ICAgb3BlcmF0aW9uczEub3BlcmF0aW9ucygpLmFwcGVuZChUcmFuc2xhdGVUcmFuc2Zvcm1PcGVy
YXRpb246OmNyZWF0ZShMZW5ndGgoMiwgRml4ZWQpLCBMZW5ndGgoMCwgRml4ZWQpLCBUcmFuc2Zv
cm1PcGVyYXRpb246OlRSQU5TTEFURV9YKSk7Ci0gICAgdmFsdWVzLmluc2VydChuZXcgVHJhbnNm
b3JtQW5pbWF0aW9uVmFsdWUoMCwgJm9wZXJhdGlvbnMxKSk7Ci0KLSAgICBUcmFuc2Zvcm1PcGVy
YXRpb25zIG9wZXJhdGlvbnMyOwotICAgIG9wZXJhdGlvbnMyLm9wZXJhdGlvbnMoKS5hcHBlbmQo
VHJhbnNsYXRlVHJhbnNmb3JtT3BlcmF0aW9uOjpjcmVhdGUoTGVuZ3RoKDQsIEZpeGVkKSwgTGVu
Z3RoKDAsIEZpeGVkKSwgVHJhbnNmb3JtT3BlcmF0aW9uOjpUUkFOU0xBVEVfWCkpOwotICAgIHZh
bHVlcy5pbnNlcnQobmV3IFRyYW5zZm9ybUFuaW1hdGlvblZhbHVlKGR1cmF0aW9uLCAmb3BlcmF0
aW9uczIpKTsKLQotICAgIFJlZlB0cjxBbmltYXRpb24+IGFuaW1hdGlvbiA9IEFuaW1hdGlvbjo6
Y3JlYXRlKCk7Ci0gICAgYW5pbWF0aW9uLT5zZXREdXJhdGlvbihkdXJhdGlvbik7Ci0gICAgYW5p
bWF0aW9uLT5zZXREaXJlY3Rpb24oQW5pbWF0aW9uOjpBbmltYXRpb25EaXJlY3Rpb25BbHRlcm5h
dGUpOwotICAgIGFuaW1hdGlvbi0+c2V0SXRlcmF0aW9uQ291bnQoMik7Ci0KLSAgICBJbnRTaXpl
IGJveFNpemU7Ci0gICAgY29udHJvbGxlci0+YWRkQW5pbWF0aW9uKHZhbHVlcywgYm94U2l6ZSwg
YW5pbWF0aW9uLmdldCgpLCAwLCAwLCAwKTsKLQotICAgIEVYUEVDVF9UUlVFKGNvbnRyb2xsZXIt
Pmhhc0FjdGl2ZUFuaW1hdGlvbigpKTsKLQotICAgIENDQWN0aXZlQW5pbWF0aW9uKiBhY3RpdmVB
bmltYXRpb24gPSBjb250cm9sbGVyLT5nZXRBY3RpdmVBbmltYXRpb24oMCwgQ0NBY3RpdmVBbmlt
YXRpb246OlRyYW5zZm9ybSk7Ci0gICAgRVhQRUNUX1RSVUUoYWN0aXZlQW5pbWF0aW9uKTsKLSAg
ICBFWFBFQ1RfVFJVRShhY3RpdmVBbmltYXRpb24tPmFsdGVybmF0ZXNEaXJlY3Rpb24oKSk7Ci0K
LSAgICBFWFBFQ1RfRVEoMiwgYWN0aXZlQW5pbWF0aW9uLT5pdGVyYXRpb25zKCkpOwotICAgIEVY
UEVDVF9FUShDQ0FjdGl2ZUFuaW1hdGlvbjo6VHJhbnNmb3JtLCBhY3RpdmVBbmltYXRpb24tPnRh
cmdldFByb3BlcnR5KCkpOwotCi0gICAgRVhQRUNUX0VRKENDQW5pbWF0aW9uQ3VydmU6OlRyYW5z
Zm9ybSwgYWN0aXZlQW5pbWF0aW9uLT5jdXJ2ZSgpLT50eXBlKCkpOwotCi0gICAgY29uc3QgQ0NU
cmFuc2Zvcm1BbmltYXRpb25DdXJ2ZSogY3VydmUgPSBhY3RpdmVBbmltYXRpb24tPmN1cnZlKCkt
PnRvVHJhbnNmb3JtQW5pbWF0aW9uQ3VydmUoKTsKLSAgICBFWFBFQ1RfVFJVRShjdXJ2ZSk7Ci0K
LSAgICBleHBlY3RUcmFuc2xhdGVYKDIsIGN1cnZlLT5nZXRWYWx1ZSgwLCBib3hTaXplKSk7Ci0g
ICAgZXhwZWN0VHJhbnNsYXRlWCg0LCBjdXJ2ZS0+Z2V0VmFsdWUoZHVyYXRpb24sIGJveFNpemUp
KTsKLX0KLQotVEVTVChDQ0xheWVyQW5pbWF0aW9uQ29udHJvbGxlclRlc3QsIGNyZWF0ZVJldmVy
c2VkQWx0ZXJuYXRpbmdBbmltYXRpb24pCi17Ci0gICAgRmFrZUxheWVyQW5pbWF0aW9uQ29udHJv
bGxlckNsaWVudCBkdW1teTsKLSAgICBPd25QdHI8Q0NMYXllckFuaW1hdGlvbkNvbnRyb2xsZXI+
IGNvbnRyb2xsZXIoQ0NMYXllckFuaW1hdGlvbkNvbnRyb2xsZXI6OmNyZWF0ZSgmZHVtbXkpKTsK
LSAgICBjb25zdCBkb3VibGUgZHVyYXRpb24gPSAxOwotICAgIFdlYkNvcmU6OktleWZyYW1lVmFs
dWVMaXN0IHZhbHVlcyhBbmltYXRlZFByb3BlcnR5V2Via2l0VHJhbnNmb3JtKTsKLQotICAgIFRy
YW5zZm9ybU9wZXJhdGlvbnMgb3BlcmF0aW9uczE7Ci0gICAgb3BlcmF0aW9uczEub3BlcmF0aW9u
cygpLmFwcGVuZChUcmFuc2xhdGVUcmFuc2Zvcm1PcGVyYXRpb246OmNyZWF0ZShMZW5ndGgoMiwg
Rml4ZWQpLCBMZW5ndGgoMCwgRml4ZWQpLCBUcmFuc2Zvcm1PcGVyYXRpb246OlRSQU5TTEFURV9Y
KSk7Ci0gICAgdmFsdWVzLmluc2VydChuZXcgVHJhbnNmb3JtQW5pbWF0aW9uVmFsdWUoMCwgJm9w
ZXJhdGlvbnMxKSk7Ci0KLSAgICBUcmFuc2Zvcm1PcGVyYXRpb25zIG9wZXJhdGlvbnMyOwotICAg
IG9wZXJhdGlvbnMyLm9wZXJhdGlvbnMoKS5hcHBlbmQoVHJhbnNsYXRlVHJhbnNmb3JtT3BlcmF0
aW9uOjpjcmVhdGUoTGVuZ3RoKDQsIEZpeGVkKSwgTGVuZ3RoKDAsIEZpeGVkKSwgVHJhbnNmb3Jt
T3BlcmF0aW9uOjpUUkFOU0xBVEVfWCkpOwotICAgIHZhbHVlcy5pbnNlcnQobmV3IFRyYW5zZm9y
bUFuaW1hdGlvblZhbHVlKGR1cmF0aW9uLCAmb3BlcmF0aW9uczIpKTsKLQotICAgIFJlZlB0cjxB
bmltYXRpb24+IGFuaW1hdGlvbiA9IEFuaW1hdGlvbjo6Y3JlYXRlKCk7Ci0gICAgYW5pbWF0aW9u
LT5zZXREdXJhdGlvbihkdXJhdGlvbik7Ci0gICAgYW5pbWF0aW9uLT5zZXREaXJlY3Rpb24oQW5p
bWF0aW9uOjpBbmltYXRpb25EaXJlY3Rpb25BbHRlcm5hdGVSZXZlcnNlKTsKLSAgICBhbmltYXRp
b24tPnNldEl0ZXJhdGlvbkNvdW50KDIpOwotCi0gICAgSW50U2l6ZSBib3hTaXplOwotICAgIGNv
bnRyb2xsZXItPmFkZEFuaW1hdGlvbih2YWx1ZXMsIGJveFNpemUsIGFuaW1hdGlvbi5nZXQoKSwg
MCwgMCwgMCk7Ci0KLSAgICBFWFBFQ1RfVFJVRShjb250cm9sbGVyLT5oYXNBY3RpdmVBbmltYXRp
b24oKSk7Ci0KLSAgICBDQ0FjdGl2ZUFuaW1hdGlvbiogYWN0aXZlQW5pbWF0aW9uID0gY29udHJv
bGxlci0+Z2V0QWN0aXZlQW5pbWF0aW9uKDAsIENDQWN0aXZlQW5pbWF0aW9uOjpUcmFuc2Zvcm0p
OwotICAgIEVYUEVDVF9UUlVFKGFjdGl2ZUFuaW1hdGlvbik7Ci0gICAgRVhQRUNUX1RSVUUoYWN0
aXZlQW5pbWF0aW9uLT5hbHRlcm5hdGVzRGlyZWN0aW9uKCkpOwotCi0gICAgRVhQRUNUX0VRKDIs
IGFjdGl2ZUFuaW1hdGlvbi0+aXRlcmF0aW9ucygpKTsKLSAgICBFWFBFQ1RfRVEoQ0NBY3RpdmVB
bmltYXRpb246OlRyYW5zZm9ybSwgYWN0aXZlQW5pbWF0aW9uLT50YXJnZXRQcm9wZXJ0eSgpKTsK
LQotICAgIEVYUEVDVF9FUShDQ0FuaW1hdGlvbkN1cnZlOjpUcmFuc2Zvcm0sIGFjdGl2ZUFuaW1h
dGlvbi0+Y3VydmUoKS0+dHlwZSgpKTsKLQotICAgIGNvbnN0IENDVHJhbnNmb3JtQW5pbWF0aW9u
Q3VydmUqIGN1cnZlID0gYWN0aXZlQW5pbWF0aW9uLT5jdXJ2ZSgpLT50b1RyYW5zZm9ybUFuaW1h
dGlvbkN1cnZlKCk7Ci0gICAgRVhQRUNUX1RSVUUoY3VydmUpOwotCi0gICAgZXhwZWN0VHJhbnNs
YXRlWCg0LCBjdXJ2ZS0+Z2V0VmFsdWUoMCwgYm94U2l6ZSkpOwotICAgIGV4cGVjdFRyYW5zbGF0
ZVgoMiwgY3VydmUtPmdldFZhbHVlKGR1cmF0aW9uLCBib3hTaXplKSk7Ci19Ci0KIFRFU1QoQ0NM
YXllckFuaW1hdGlvbkNvbnRyb2xsZXJUZXN0LCBzeW5jTmV3QW5pbWF0aW9uKQogewogICAgIEZh
a2VMYXllckFuaW1hdGlvbkNvbnRyb2xsZXJDbGllbnQgZHVtbXlJbXBsOwpAQCAtMzMzLDcgKzEz
NCw2IEBAIFRFU1QoQ0NMYXllckFuaW1hdGlvbkNvbnRyb2xsZXJUZXN0LCBzeW5jUGF1c2VBbmRS
ZXN1bWUpCiAgICAgRVhQRUNUX0VRKENDQWN0aXZlQW5pbWF0aW9uOjpSdW5uaW5nLCBjb250cm9s
bGVySW1wbC0+Z2V0QWN0aXZlQW5pbWF0aW9uKDAsIENDQWN0aXZlQW5pbWF0aW9uOjpPcGFjaXR5
KS0+cnVuU3RhdGUoKSk7CiB9CiAKLQogVEVTVChDQ0xheWVyQW5pbWF0aW9uQ29udHJvbGxlclRl
c3QsIGRvTm90U3luY0ZpbmlzaGVkQW5pbWF0aW9uKQogewogICAgIEZha2VMYXllckFuaW1hdGlv
bkNvbnRyb2xsZXJDbGllbnQgZHVtbXlJbXBsOwpAQCAtMzc1LDcgKzE3NSw3IEBAIFRFU1QoQ0NM
YXllckFuaW1hdGlvbkNvbnRyb2xsZXJUZXN0LCBUcml2aWFsVHJhbnNpdGlvbikKIAogICAgIE93
blB0cjxDQ0FjdGl2ZUFuaW1hdGlvbj4gdG9BZGQoY3JlYXRlQWN0aXZlQW5pbWF0aW9uKGFkb3B0
UHRyKG5ldyBGYWtlRmxvYXRUcmFuc2l0aW9uKDEsIDAsIDEpKSwgMSwgQ0NBY3RpdmVBbmltYXRp
b246Ok9wYWNpdHkpKTsKIAotICAgIGNvbnRyb2xsZXItPmFkZCh0b0FkZC5yZWxlYXNlKCkpOwor
ICAgIGNvbnRyb2xsZXItPmFkZEFuaW1hdGlvbih0b0FkZC5yZWxlYXNlKCkpOwogICAgIGNvbnRy
b2xsZXItPmFuaW1hdGUoMCwgZXZlbnRzLmdldCgpKTsKICAgICBFWFBFQ1RfVFJVRShjb250cm9s
bGVyLT5oYXNBY3RpdmVBbmltYXRpb24oKSk7CiAgICAgRVhQRUNUX0VRKDAsIGR1bW15Lm9wYWNp
dHkoKSk7CkBAIC0zOTYsNyArMTk2LDcgQEAgVEVTVChDQ0xheWVyQW5pbWF0aW9uQ29udHJvbGxl
clRlc3QsIEFuaW1hdGlvbnNXYWl0aW5nRm9yU3RhcnRUaW1lRG9Ob3RGaW5pc2hJZlQKICAgICB0
b0FkZC0+c2V0TmVlZHNTeW5jaHJvbml6ZWRTdGFydFRpbWUodHJ1ZSk7CiAKICAgICAvLyBXZSBz
aG91bGQgcGF1c2UgYXQgdGhlIGZpcnN0IGtleWZyYW1lIGluZGVmaW5pdGVseSB3YWl0aW5nIGZv
ciB0aGF0IGFuaW1hdGlvbiB0byBzdGFydC4KLSAgICBjb250cm9sbGVyLT5hZGQodG9BZGQucmVs
ZWFzZSgpKTsKKyAgICBjb250cm9sbGVyLT5hZGRBbmltYXRpb24odG9BZGQucmVsZWFzZSgpKTsK
ICAgICBjb250cm9sbGVyLT5hbmltYXRlKDAsIGV2ZW50cy5nZXQoKSk7CiAgICAgRVhQRUNUX1RS
VUUoY29udHJvbGxlci0+aGFzQWN0aXZlQW5pbWF0aW9uKCkpOwogICAgIEVYUEVDVF9FUSgwLCBk
dW1teS5vcGFjaXR5KCkpOwpAQCAtNDIyLDggKzIyMiw4IEBAIFRFU1QoQ0NMYXllckFuaW1hdGlv
bkNvbnRyb2xsZXJUZXN0LCBUcml2aWFsUXVldWluZykKICAgICBPd25QdHI8Q0NMYXllckFuaW1h
dGlvbkNvbnRyb2xsZXI+IGNvbnRyb2xsZXIoCiAgICAgICAgIENDTGF5ZXJBbmltYXRpb25Db250
cm9sbGVyOjpjcmVhdGUoJmR1bW15KSk7CiAKLSAgICBjb250cm9sbGVyLT5hZGQoY3JlYXRlQWN0
aXZlQW5pbWF0aW9uKGFkb3B0UHRyKG5ldyBGYWtlRmxvYXRUcmFuc2l0aW9uKDEsIDAsIDEpKSwg
MSwgQ0NBY3RpdmVBbmltYXRpb246Ok9wYWNpdHkpKTsKLSAgICBjb250cm9sbGVyLT5hZGQoY3Jl
YXRlQWN0aXZlQW5pbWF0aW9uKGFkb3B0UHRyKG5ldyBGYWtlRmxvYXRUcmFuc2l0aW9uKDEsIDEs
IDAuNSkpLCAyLCBDQ0FjdGl2ZUFuaW1hdGlvbjo6T3BhY2l0eSkpOworICAgIGNvbnRyb2xsZXIt
PmFkZEFuaW1hdGlvbihjcmVhdGVBY3RpdmVBbmltYXRpb24oYWRvcHRQdHIobmV3IEZha2VGbG9h
dFRyYW5zaXRpb24oMSwgMCwgMSkpLCAxLCBDQ0FjdGl2ZUFuaW1hdGlvbjo6T3BhY2l0eSkpOwor
ICAgIGNvbnRyb2xsZXItPmFkZEFuaW1hdGlvbihjcmVhdGVBY3RpdmVBbmltYXRpb24oYWRvcHRQ
dHIobmV3IEZha2VGbG9hdFRyYW5zaXRpb24oMSwgMSwgMC41KSksIDIsIENDQWN0aXZlQW5pbWF0
aW9uOjpPcGFjaXR5KSk7CiAKICAgICBjb250cm9sbGVyLT5hbmltYXRlKDAsIGV2ZW50cy5nZXQo
KSk7CiAgICAgRVhQRUNUX1RSVUUoY29udHJvbGxlci0+aGFzQWN0aXZlQW5pbWF0aW9uKCkpOwpA
QCAtNDQzLDE0ICsyNDMsMTQgQEAgVEVTVChDQ0xheWVyQW5pbWF0aW9uQ29udHJvbGxlclRlc3Qs
IEludGVycnVwdCkKICAgICBGYWtlTGF5ZXJBbmltYXRpb25Db250cm9sbGVyQ2xpZW50IGR1bW15
OwogICAgIE93blB0cjxDQ0xheWVyQW5pbWF0aW9uQ29udHJvbGxlcj4gY29udHJvbGxlcigKICAg
ICAgICAgQ0NMYXllckFuaW1hdGlvbkNvbnRyb2xsZXI6OmNyZWF0ZSgmZHVtbXkpKTsKLSAgICBj
b250cm9sbGVyLT5hZGQoY3JlYXRlQWN0aXZlQW5pbWF0aW9uKGFkb3B0UHRyKG5ldyBGYWtlRmxv
YXRUcmFuc2l0aW9uKDEsIDAsIDEpKSwgMSwgQ0NBY3RpdmVBbmltYXRpb246Ok9wYWNpdHkpKTsK
KyAgICBjb250cm9sbGVyLT5hZGRBbmltYXRpb24oY3JlYXRlQWN0aXZlQW5pbWF0aW9uKGFkb3B0
UHRyKG5ldyBGYWtlRmxvYXRUcmFuc2l0aW9uKDEsIDAsIDEpKSwgMSwgQ0NBY3RpdmVBbmltYXRp
b246Ok9wYWNpdHkpKTsKICAgICBjb250cm9sbGVyLT5hbmltYXRlKDAsIGV2ZW50cy5nZXQoKSk7
CiAgICAgRVhQRUNUX1RSVUUoY29udHJvbGxlci0+aGFzQWN0aXZlQW5pbWF0aW9uKCkpOwogICAg
IEVYUEVDVF9FUSgwLCBkdW1teS5vcGFjaXR5KCkpOwogCiAgICAgT3duUHRyPENDQWN0aXZlQW5p
bWF0aW9uPiB0b0FkZChjcmVhdGVBY3RpdmVBbmltYXRpb24oYWRvcHRQdHIobmV3IEZha2VGbG9h
dFRyYW5zaXRpb24oMSwgMSwgMC41KSksIDIsIENDQWN0aXZlQW5pbWF0aW9uOjpPcGFjaXR5KSk7
CiAgICAgdG9BZGQtPnNldFJ1blN0YXRlKENDQWN0aXZlQW5pbWF0aW9uOjpXYWl0aW5nRm9yTmV4
dFRpY2ssIDApOwotICAgIGNvbnRyb2xsZXItPmFkZCh0b0FkZC5yZWxlYXNlKCkpOworICAgIGNv
bnRyb2xsZXItPmFkZEFuaW1hdGlvbih0b0FkZC5yZWxlYXNlKCkpOwogCiAgICAgLy8gU2luY2Ug
dGhlIGFuaW1hdGlvbiB3YXMgaW4gdGhlIFdhaXRpbmdGb3JOZXh0VGljayBzdGF0ZSwgaXQgc2hv
dWxkIHN0YXJ0IHJpZ2h0IGluCiAgICAgLy8gdGhpcyBjYWxsIHRvIGFuaW1hdGUuCkBAIC00NzAs
OSArMjcwLDkgQEAgVEVTVChDQ0xheWVyQW5pbWF0aW9uQ29udHJvbGxlclRlc3QsIFNjaGVkdWxl
VG9nZXRoZXJXaGVuQVByb3BlcnR5SXNCbG9ja2VkKQogICAgIE93blB0cjxDQ0xheWVyQW5pbWF0
aW9uQ29udHJvbGxlcj4gY29udHJvbGxlcigKICAgICAgICAgQ0NMYXllckFuaW1hdGlvbkNvbnRy
b2xsZXI6OmNyZWF0ZSgmZHVtbXkpKTsKIAotICAgIGNvbnRyb2xsZXItPmFkZChjcmVhdGVBY3Rp
dmVBbmltYXRpb24oYWRvcHRQdHIobmV3IEZha2VUcmFuc2Zvcm1UcmFuc2l0aW9uKDEpKSwgMSwg
Q0NBY3RpdmVBbmltYXRpb246OlRyYW5zZm9ybSkpOwotICAgIGNvbnRyb2xsZXItPmFkZChjcmVh
dGVBY3RpdmVBbmltYXRpb24oYWRvcHRQdHIobmV3IEZha2VUcmFuc2Zvcm1UcmFuc2l0aW9uKDEp
KSwgMiwgQ0NBY3RpdmVBbmltYXRpb246OlRyYW5zZm9ybSkpOwotICAgIGNvbnRyb2xsZXItPmFk
ZChjcmVhdGVBY3RpdmVBbmltYXRpb24oYWRvcHRQdHIobmV3IEZha2VGbG9hdFRyYW5zaXRpb24o
MSwgMCwgMSkpLCAyLCBDQ0FjdGl2ZUFuaW1hdGlvbjo6T3BhY2l0eSkpOworICAgIGNvbnRyb2xs
ZXItPmFkZEFuaW1hdGlvbihjcmVhdGVBY3RpdmVBbmltYXRpb24oYWRvcHRQdHIobmV3IEZha2VU
cmFuc2Zvcm1UcmFuc2l0aW9uKDEpKSwgMSwgQ0NBY3RpdmVBbmltYXRpb246OlRyYW5zZm9ybSkp
OworICAgIGNvbnRyb2xsZXItPmFkZEFuaW1hdGlvbihjcmVhdGVBY3RpdmVBbmltYXRpb24oYWRv
cHRQdHIobmV3IEZha2VUcmFuc2Zvcm1UcmFuc2l0aW9uKDEpKSwgMiwgQ0NBY3RpdmVBbmltYXRp
b246OlRyYW5zZm9ybSkpOworICAgIGNvbnRyb2xsZXItPmFkZEFuaW1hdGlvbihjcmVhdGVBY3Rp
dmVBbmltYXRpb24oYWRvcHRQdHIobmV3IEZha2VGbG9hdFRyYW5zaXRpb24oMSwgMCwgMSkpLCAy
LCBDQ0FjdGl2ZUFuaW1hdGlvbjo6T3BhY2l0eSkpOwogCiAgICAgY29udHJvbGxlci0+YW5pbWF0
ZSgwLCBldmVudHMuZ2V0KCkpOwogICAgIEVYUEVDVF9FUSgwLCBkdW1teS5vcGFjaXR5KCkpOwpA
QCAtNDk3LDkgKzI5Nyw5IEBAIFRFU1QoQ0NMYXllckFuaW1hdGlvbkNvbnRyb2xsZXJUZXN0LCBT
Y2hlZHVsZVRvZ2V0aGVyV2l0aEFuQW5pbVdhaXRpbmcpCiAgICAgT3duUHRyPENDTGF5ZXJBbmlt
YXRpb25Db250cm9sbGVyPiBjb250cm9sbGVyKAogICAgICAgICBDQ0xheWVyQW5pbWF0aW9uQ29u
dHJvbGxlcjo6Y3JlYXRlKCZkdW1teSkpOwogCi0gICAgY29udHJvbGxlci0+YWRkKGNyZWF0ZUFj
dGl2ZUFuaW1hdGlvbihhZG9wdFB0cihuZXcgRmFrZVRyYW5zZm9ybVRyYW5zaXRpb24oMikpLCAx
LCBDQ0FjdGl2ZUFuaW1hdGlvbjo6VHJhbnNmb3JtKSk7Ci0gICAgY29udHJvbGxlci0+YWRkKGNy
ZWF0ZUFjdGl2ZUFuaW1hdGlvbihhZG9wdFB0cihuZXcgRmFrZUZsb2F0VHJhbnNpdGlvbigxLCAw
LCAxKSksIDEsIENDQWN0aXZlQW5pbWF0aW9uOjpPcGFjaXR5KSk7Ci0gICAgY29udHJvbGxlci0+
YWRkKGNyZWF0ZUFjdGl2ZUFuaW1hdGlvbihhZG9wdFB0cihuZXcgRmFrZUZsb2F0VHJhbnNpdGlv
bigxLCAxLCAwLjUpKSwgMiwgQ0NBY3RpdmVBbmltYXRpb246Ok9wYWNpdHkpKTsKKyAgICBjb250
cm9sbGVyLT5hZGRBbmltYXRpb24oY3JlYXRlQWN0aXZlQW5pbWF0aW9uKGFkb3B0UHRyKG5ldyBG
YWtlVHJhbnNmb3JtVHJhbnNpdGlvbigyKSksIDEsIENDQWN0aXZlQW5pbWF0aW9uOjpUcmFuc2Zv
cm0pKTsKKyAgICBjb250cm9sbGVyLT5hZGRBbmltYXRpb24oY3JlYXRlQWN0aXZlQW5pbWF0aW9u
KGFkb3B0UHRyKG5ldyBGYWtlRmxvYXRUcmFuc2l0aW9uKDEsIDAsIDEpKSwgMSwgQ0NBY3RpdmVB
bmltYXRpb246Ok9wYWNpdHkpKTsKKyAgICBjb250cm9sbGVyLT5hZGRBbmltYXRpb24oY3JlYXRl
QWN0aXZlQW5pbWF0aW9uKGFkb3B0UHRyKG5ldyBGYWtlRmxvYXRUcmFuc2l0aW9uKDEsIDEsIDAu
NSkpLCAyLCBDQ0FjdGl2ZUFuaW1hdGlvbjo6T3BhY2l0eSkpOwogCiAgICAgLy8gQW5pbWF0aW9u
cyB3aXRoIGlkIDEgc2hvdWxkIGJvdGggc3RhcnQgbm93LgogICAgIGNvbnRyb2xsZXItPmFuaW1h
dGUoMCwgZXZlbnRzLmdldCgpKTsKQEAgLTUzMCw3ICszMzAsNyBAQCBURVNUKENDTGF5ZXJBbmlt
YXRpb25Db250cm9sbGVyVGVzdCwgU2NoZWR1bGVBbmltYXRpb24pCiAgICAgT3duUHRyPENDQWN0
aXZlQW5pbWF0aW9uPiB0b0FkZChjcmVhdGVBY3RpdmVBbmltYXRpb24oYWRvcHRQdHIobmV3IEZh
a2VGbG9hdFRyYW5zaXRpb24oMSwgMCwgMSkpLCAxLCBDQ0FjdGl2ZUFuaW1hdGlvbjo6T3BhY2l0
eSkpOwogICAgIHRvQWRkLT5zZXRSdW5TdGF0ZShDQ0FjdGl2ZUFuaW1hdGlvbjo6V2FpdGluZ0Zv
clN0YXJ0VGltZSwgMCk7CiAgICAgdG9BZGQtPnNldFN0YXJ0VGltZSgxKTsKLSAgICBjb250cm9s
bGVyLT5hZGQodG9BZGQucmVsZWFzZSgpKTsKKyAgICBjb250cm9sbGVyLT5hZGRBbmltYXRpb24o
dG9BZGQucmVsZWFzZSgpKTsKIAogICAgIGNvbnRyb2xsZXItPmFuaW1hdGUoMCwgZXZlbnRzLmdl
dCgpKTsKICAgICBFWFBFQ1RfVFJVRShjb250cm9sbGVyLT5oYXNBY3RpdmVBbmltYXRpb24oKSk7
CkBAIC01NTEsMTIgKzM1MSwxMiBAQCBURVNUKENDTGF5ZXJBbmltYXRpb25Db250cm9sbGVyVGVz
dCwgU2NoZWR1bGVkQW5pbWF0aW9uSW50ZXJydXB0c1J1bm5pbmdBbmltYXRpbwogICAgIE93blB0
cjxDQ0xheWVyQW5pbWF0aW9uQ29udHJvbGxlcj4gY29udHJvbGxlcigKICAgICAgICAgQ0NMYXll
ckFuaW1hdGlvbkNvbnRyb2xsZXI6OmNyZWF0ZSgmZHVtbXkpKTsKIAotICAgIGNvbnRyb2xsZXIt
PmFkZChjcmVhdGVBY3RpdmVBbmltYXRpb24oYWRvcHRQdHIobmV3IEZha2VGbG9hdFRyYW5zaXRp
b24oMiwgMCwgMSkpLCAxLCBDQ0FjdGl2ZUFuaW1hdGlvbjo6T3BhY2l0eSkpOworICAgIGNvbnRy
b2xsZXItPmFkZEFuaW1hdGlvbihjcmVhdGVBY3RpdmVBbmltYXRpb24oYWRvcHRQdHIobmV3IEZh
a2VGbG9hdFRyYW5zaXRpb24oMiwgMCwgMSkpLCAxLCBDQ0FjdGl2ZUFuaW1hdGlvbjo6T3BhY2l0
eSkpOwogCiAgICAgT3duUHRyPENDQWN0aXZlQW5pbWF0aW9uPiB0b0FkZChjcmVhdGVBY3RpdmVB
bmltYXRpb24oYWRvcHRQdHIobmV3IEZha2VGbG9hdFRyYW5zaXRpb24oMSwgMC41LCAwKSksIDIs
IENDQWN0aXZlQW5pbWF0aW9uOjpPcGFjaXR5KSk7CiAgICAgdG9BZGQtPnNldFJ1blN0YXRlKEND
QWN0aXZlQW5pbWF0aW9uOjpXYWl0aW5nRm9yU3RhcnRUaW1lLCAwKTsKICAgICB0b0FkZC0+c2V0
U3RhcnRUaW1lKDEpOwotICAgIGNvbnRyb2xsZXItPmFkZCh0b0FkZC5yZWxlYXNlKCkpOworICAg
IGNvbnRyb2xsZXItPmFkZEFuaW1hdGlvbih0b0FkZC5yZWxlYXNlKCkpOwogCiAgICAgLy8gRmly
c3QgMnMgb3BhY2l0eSB0cmFuc2l0aW9uIHNob3VsZCBzdGFydCBpbW1lZGlhdGVseS4KICAgICBj
b250cm9sbGVyLT5hbmltYXRlKDAsIGV2ZW50cy5nZXQoKSk7CkBAIC01ODIsMTQgKzM4MiwxNCBA
QCBURVNUKENDTGF5ZXJBbmltYXRpb25Db250cm9sbGVyVGVzdCwgU2NoZWR1bGVkQW5pbWF0aW9u
SW50ZXJydXB0c1J1bm5pbmdBbmltYXRpbwogICAgIE93blB0cjxDQ0xheWVyQW5pbWF0aW9uQ29u
dHJvbGxlcj4gY29udHJvbGxlcigKICAgICAgICAgQ0NMYXllckFuaW1hdGlvbkNvbnRyb2xsZXI6
OmNyZWF0ZSgmZHVtbXkpKTsKIAotICAgIGNvbnRyb2xsZXItPmFkZChjcmVhdGVBY3RpdmVBbmlt
YXRpb24oYWRvcHRQdHIobmV3IEZha2VGbG9hdFRyYW5zaXRpb24oMiwgMCwgMSkpLCAxLCBDQ0Fj
dGl2ZUFuaW1hdGlvbjo6T3BhY2l0eSkpOworICAgIGNvbnRyb2xsZXItPmFkZEFuaW1hdGlvbihj
cmVhdGVBY3RpdmVBbmltYXRpb24oYWRvcHRQdHIobmV3IEZha2VGbG9hdFRyYW5zaXRpb24oMiwg
MCwgMSkpLCAxLCBDQ0FjdGl2ZUFuaW1hdGlvbjo6T3BhY2l0eSkpOwogCiAgICAgT3duUHRyPEND
QWN0aXZlQW5pbWF0aW9uPiB0b0FkZChjcmVhdGVBY3RpdmVBbmltYXRpb24oYWRvcHRQdHIobmV3
IEZha2VGbG9hdFRyYW5zaXRpb24oMiwgMC41LCAwKSksIDIsIENDQWN0aXZlQW5pbWF0aW9uOjpP
cGFjaXR5KSk7CiAgICAgdG9BZGQtPnNldFJ1blN0YXRlKENDQWN0aXZlQW5pbWF0aW9uOjpXYWl0
aW5nRm9yU3RhcnRUaW1lLCAwKTsKICAgICB0b0FkZC0+c2V0U3RhcnRUaW1lKDEpOwotICAgIGNv
bnRyb2xsZXItPmFkZCh0b0FkZC5yZWxlYXNlKCkpOworICAgIGNvbnRyb2xsZXItPmFkZEFuaW1h
dGlvbih0b0FkZC5yZWxlYXNlKCkpOwogCi0gICAgY29udHJvbGxlci0+YWRkKGNyZWF0ZUFjdGl2
ZUFuaW1hdGlvbihhZG9wdFB0cihuZXcgRmFrZUZsb2F0VHJhbnNpdGlvbigxLCAwLCAwLjc1KSks
IDMsIENDQWN0aXZlQW5pbWF0aW9uOjpPcGFjaXR5KSk7CisgICAgY29udHJvbGxlci0+YWRkQW5p
bWF0aW9uKGNyZWF0ZUFjdGl2ZUFuaW1hdGlvbihhZG9wdFB0cihuZXcgRmFrZUZsb2F0VHJhbnNp
dGlvbigxLCAwLCAwLjc1KSksIDMsIENDQWN0aXZlQW5pbWF0aW9uOjpPcGFjaXR5KSk7CiAKICAg
ICAvLyBGaXJzdCAycyBvcGFjaXR5IHRyYW5zaXRpb24gc2hvdWxkIHN0YXJ0IGltbWVkaWF0ZWx5
LgogICAgIGNvbnRyb2xsZXItPmFuaW1hdGUoMCwgZXZlbnRzLmdldCgpKTsKQEAgLTYyMCw3ICs0
MjAsNyBAQCBURVNUKENDTGF5ZXJBbmltYXRpb25Db250cm9sbGVyVGVzdCwgVHJpdmlhbExvb3Bp
bmcpCiAKICAgICBPd25QdHI8Q0NBY3RpdmVBbmltYXRpb24+IHRvQWRkKGNyZWF0ZUFjdGl2ZUFu
aW1hdGlvbihhZG9wdFB0cihuZXcgRmFrZUZsb2F0VHJhbnNpdGlvbigxLCAwLCAxKSksIDEsIEND
QWN0aXZlQW5pbWF0aW9uOjpPcGFjaXR5KSk7CiAgICAgdG9BZGQtPnNldEl0ZXJhdGlvbnMoMyk7
Ci0gICAgY29udHJvbGxlci0+YWRkKHRvQWRkLnJlbGVhc2UoKSk7CisgICAgY29udHJvbGxlci0+
YWRkQW5pbWF0aW9uKHRvQWRkLnJlbGVhc2UoKSk7CiAKICAgICBjb250cm9sbGVyLT5hbmltYXRl
KDAsIGV2ZW50cy5nZXQoKSk7CiAgICAgRVhQRUNUX1RSVUUoY29udHJvbGxlci0+aGFzQWN0aXZl
QW5pbWF0aW9uKCkpOwpAQCAtNjU3LDcgKzQ1Nyw3IEBAIFRFU1QoQ0NMYXllckFuaW1hdGlvbkNv
bnRyb2xsZXJUZXN0LCBJbmZpbml0ZUxvb3BpbmcpCiAgICAgY29uc3QgaW50IGlkID0gMTsKICAg
ICBPd25QdHI8Q0NBY3RpdmVBbmltYXRpb24+IHRvQWRkKGNyZWF0ZUFjdGl2ZUFuaW1hdGlvbihh
ZG9wdFB0cihuZXcgRmFrZUZsb2F0VHJhbnNpdGlvbigxLCAwLCAxKSksIGlkLCBDQ0FjdGl2ZUFu
aW1hdGlvbjo6T3BhY2l0eSkpOwogICAgIHRvQWRkLT5zZXRJdGVyYXRpb25zKC0xKTsKLSAgICBj
b250cm9sbGVyLT5hZGQodG9BZGQucmVsZWFzZSgpKTsKKyAgICBjb250cm9sbGVyLT5hZGRBbmlt
YXRpb24odG9BZGQucmVsZWFzZSgpKTsKIAogICAgIGNvbnRyb2xsZXItPmFuaW1hdGUoMCwgZXZl
bnRzLmdldCgpKTsKICAgICBFWFBFQ1RfVFJVRShjb250cm9sbGVyLT5oYXNBY3RpdmVBbmltYXRp
b24oKSk7CkBAIC02OTEsNyArNDkxLDcgQEAgVEVTVChDQ0xheWVyQW5pbWF0aW9uQ29udHJvbGxl
clRlc3QsIFBhdXNlUmVzdW1lKQogICAgICAgICBDQ0xheWVyQW5pbWF0aW9uQ29udHJvbGxlcjo6
Y3JlYXRlKCZkdW1teSkpOwogCiAgICAgY29uc3QgaW50IGlkID0gMTsKLSAgICBjb250cm9sbGVy
LT5hZGQoY3JlYXRlQWN0aXZlQW5pbWF0aW9uKGFkb3B0UHRyKG5ldyBGYWtlRmxvYXRUcmFuc2l0
aW9uKDEsIDAsIDEpKSwgaWQsIENDQWN0aXZlQW5pbWF0aW9uOjpPcGFjaXR5KSk7CisgICAgY29u
dHJvbGxlci0+YWRkQW5pbWF0aW9uKGNyZWF0ZUFjdGl2ZUFuaW1hdGlvbihhZG9wdFB0cihuZXcg
RmFrZUZsb2F0VHJhbnNpdGlvbigxLCAwLCAxKSksIGlkLCBDQ0FjdGl2ZUFuaW1hdGlvbjo6T3Bh
Y2l0eSkpOwogCiAgICAgY29udHJvbGxlci0+YW5pbWF0ZSgwLCBldmVudHMuZ2V0KCkpOwogICAg
IEVYUEVDVF9UUlVFKGNvbnRyb2xsZXItPmhhc0FjdGl2ZUFuaW1hdGlvbigpKTsKQEAgLTcyNiw5
ICs1MjYsOSBAQCBURVNUKENDTGF5ZXJBbmltYXRpb25Db250cm9sbGVyVGVzdCwgQWJvcnRBR3Jv
dXBlZEFuaW1hdGlvbikKICAgICAgICAgQ0NMYXllckFuaW1hdGlvbkNvbnRyb2xsZXI6OmNyZWF0
ZSgmZHVtbXkpKTsKIAogICAgIGNvbnN0IGludCBpZCA9IDE7Ci0gICAgY29udHJvbGxlci0+YWRk
KGNyZWF0ZUFjdGl2ZUFuaW1hdGlvbihhZG9wdFB0cihuZXcgRmFrZVRyYW5zZm9ybVRyYW5zaXRp
b24oMSkpLCBpZCwgQ0NBY3RpdmVBbmltYXRpb246OlRyYW5zZm9ybSkpOwotICAgIGNvbnRyb2xs
ZXItPmFkZChjcmVhdGVBY3RpdmVBbmltYXRpb24oYWRvcHRQdHIobmV3IEZha2VGbG9hdFRyYW5z
aXRpb24oMiwgMCwgMSkpLCBpZCwgQ0NBY3RpdmVBbmltYXRpb246Ok9wYWNpdHkpKTsKLSAgICBj
b250cm9sbGVyLT5hZGQoY3JlYXRlQWN0aXZlQW5pbWF0aW9uKGFkb3B0UHRyKG5ldyBGYWtlRmxv
YXRUcmFuc2l0aW9uKDEsIDEsIDAuNzUpKSwgMiwgQ0NBY3RpdmVBbmltYXRpb246Ok9wYWNpdHkp
KTsKKyAgICBjb250cm9sbGVyLT5hZGRBbmltYXRpb24oY3JlYXRlQWN0aXZlQW5pbWF0aW9uKGFk
b3B0UHRyKG5ldyBGYWtlVHJhbnNmb3JtVHJhbnNpdGlvbigxKSksIGlkLCBDQ0FjdGl2ZUFuaW1h
dGlvbjo6VHJhbnNmb3JtKSk7CisgICAgY29udHJvbGxlci0+YWRkQW5pbWF0aW9uKGNyZWF0ZUFj
dGl2ZUFuaW1hdGlvbihhZG9wdFB0cihuZXcgRmFrZUZsb2F0VHJhbnNpdGlvbigyLCAwLCAxKSks
IGlkLCBDQ0FjdGl2ZUFuaW1hdGlvbjo6T3BhY2l0eSkpOworICAgIGNvbnRyb2xsZXItPmFkZEFu
aW1hdGlvbihjcmVhdGVBY3RpdmVBbmltYXRpb24oYWRvcHRQdHIobmV3IEZha2VGbG9hdFRyYW5z
aXRpb24oMSwgMSwgMC43NSkpLCAyLCBDQ0FjdGl2ZUFuaW1hdGlvbjo6T3BhY2l0eSkpOwogCiAg
ICAgY29udHJvbGxlci0+YW5pbWF0ZSgwLCBldmVudHMuZ2V0KCkpOwogICAgIEVYUEVDVF9UUlVF
KGNvbnRyb2xsZXItPmhhc0FjdGl2ZUFuaW1hdGlvbigpKTsKQEAgLTc1OCw3ICs1NTgsNyBAQCBU
RVNUKENDTGF5ZXJBbmltYXRpb25Db250cm9sbGVyVGVzdCwgRm9yY2VTeW5jV2hlblN5bmNocm9u
aXplZFN0YXJ0VGltZU5lZWRlZCkKIAogICAgIE93blB0cjxDQ0FjdGl2ZUFuaW1hdGlvbj4gdG9B
ZGQoY3JlYXRlQWN0aXZlQW5pbWF0aW9uKGFkb3B0UHRyKG5ldyBGYWtlRmxvYXRUcmFuc2l0aW9u
KDIsIDAsIDEpKSwgMCwgQ0NBY3RpdmVBbmltYXRpb246Ok9wYWNpdHkpKTsKICAgICB0b0FkZC0+
c2V0TmVlZHNTeW5jaHJvbml6ZWRTdGFydFRpbWUodHJ1ZSk7Ci0gICAgY29udHJvbGxlci0+YWRk
KHRvQWRkLnJlbGVhc2UoKSk7CisgICAgY29udHJvbGxlci0+YWRkQW5pbWF0aW9uKHRvQWRkLnJl
bGVhc2UoKSk7CiAKICAgICBjb250cm9sbGVyLT5hbmltYXRlKDAsIDApOwogICAgIEVYUEVDVF9U
UlVFKGNvbnRyb2xsZXItPmhhc0FjdGl2ZUFuaW1hdGlvbigpKTsKZGlmZiAtLWdpdCBhL1NvdXJj
ZS9XZWJLaXQvY2hyb21pdW0vdGVzdHMvQ0NMYXllclRyZWVIb3N0VGVzdC5jcHAgYi9Tb3VyY2Uv
V2ViS2l0L2Nocm9taXVtL3Rlc3RzL0NDTGF5ZXJUcmVlSG9zdFRlc3QuY3BwCmluZGV4IDEyNzVl
Yzg1NDI4MTA5OGMzMWUxYjgwMzA2MWM5Y2NhNGRiZjVkOGMuLmQ3MTM0MTM3ZDA1OGEzNjFjMGUz
N2ZkZTM0YjkzODMzZDRkZmM3ZDggMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJLaXQvY2hyb21pdW0v
dGVzdHMvQ0NMYXllclRyZWVIb3N0VGVzdC5jcHAKKysrIGIvU291cmNlL1dlYktpdC9jaHJvbWl1
bS90ZXN0cy9DQ0xheWVyVHJlZUhvc3RUZXN0LmNwcApAQCAtMjg0NSw3ICsyODQ1LDcgQEAgcHVi
bGljOgogICAgICAgICAvLyBBbnkgdmFsaWQgQ0NBbmltYXRpb25DdXJ2ZSB3aWxsIGRvIGhlcmUu
CiAgICAgICAgIE93blB0cjxDQ0FuaW1hdGlvbkN1cnZlPiBjdXJ2ZShDQ0Vhc2VUaW1pbmdGdW5j
dGlvbjo6Y3JlYXRlKCkpOwogICAgICAgICBPd25QdHI8Q0NBY3RpdmVBbmltYXRpb24+IGFuaW1h
dGlvbihDQ0FjdGl2ZUFuaW1hdGlvbjo6Y3JlYXRlKGN1cnZlLnJlbGVhc2UoKSwgQW5pbWF0aW9u
SWRWZW5kb3I6OmdldE5leHRBbmltYXRpb25JZCgpLCBBbmltYXRpb25JZFZlbmRvcjo6Z2V0TmV4
dEdyb3VwSWQoKSwgQ0NBY3RpdmVBbmltYXRpb246Ok9wYWNpdHkpKTsKLSAgICAgICAgbGF5ZXIt
PmxheWVyQW5pbWF0aW9uQ29udHJvbGxlcigpLT5hZGQoYW5pbWF0aW9uLnJlbGVhc2UoKSk7Cisg
ICAgICAgIGxheWVyLT5sYXllckFuaW1hdGlvbkNvbnRyb2xsZXIoKS0+YWRkQW5pbWF0aW9uKGFu
aW1hdGlvbi5yZWxlYXNlKCkpOwogCiAgICAgICAgIC8vIFdlIGFkZCB0aGUgYW5pbWF0aW9uICpi
ZWZvcmUqIGF0dGFjaGluZyB0aGUgbGF5ZXIgdG8gdGhlIHRyZWUuCiAgICAgICAgIG1fbGF5ZXJU
cmVlSG9zdC0+cm9vdExheWVyKCktPmFkZENoaWxkKGxheWVyKTsKZGlmZiAtLWdpdCBhL1NvdXJj
ZS9XZWJLaXQvY2hyb21pdW0vdGVzdHMvR3JhcGhpY3NMYXllckNocm9taXVtVGVzdC5jcHAgYi9T
b3VyY2UvV2ViS2l0L2Nocm9taXVtL3Rlc3RzL0dyYXBoaWNzTGF5ZXJDaHJvbWl1bVRlc3QuY3Bw
CmluZGV4IGI3YWE4NTc0NjVjYmFjMThjNDgyYWVkNWQ5NzMyMzI2NTE0ZGE2YTQuLjhmMzFiMjQz
ZmE0MGQxNjIzMjY5ZDA5YjIzMjZmMGIwMGZhZDI0NTUgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJL
aXQvY2hyb21pdW0vdGVzdHMvR3JhcGhpY3NMYXllckNocm9taXVtVGVzdC5jcHAKKysrIGIvU291
cmNlL1dlYktpdC9jaHJvbWl1bS90ZXN0cy9HcmFwaGljc0xheWVyQ2hyb21pdW1UZXN0LmNwcApA
QCAtMjYsNTcgKzI2LDMyNyBAQAogCiAjaW5jbHVkZSAiR3JhcGhpY3NMYXllckNocm9taXVtLmgi
CiAKKyNpbmNsdWRlICJjYy9DQ0xheWVyVHJlZUhvc3QuaCIKKyNpbmNsdWRlICJjYy9DQ0xheWVy
VHJlZUhvc3RJbXBsLmgiCisjaW5jbHVkZSAiY2MvQ0NTaW5nbGVUaHJlYWRQcm94eS5oIgogI2lu
Y2x1ZGUgIkNDQW5pbWF0aW9uVGVzdENvbW1vbi5oIgorI2luY2x1ZGUgIkNvbXBvc2l0b3JGYWtl
R3JhcGhpY3NDb250ZXh0M0QuaCIKKyNpbmNsdWRlICJHcmFwaGljc0NvbnRleHQzRC5oIgorI2lu
Y2x1ZGUgIkdyYXBoaWNzQ29udGV4dDNEUHJpdmF0ZS5oIgogI2luY2x1ZGUgIkdyYXBoaWNzTGF5
ZXIuaCIKICNpbmNsdWRlICJMYXllckNocm9taXVtLmgiCisjaW5jbHVkZSAiVHJhbnNsYXRlVHJh
bnNmb3JtT3BlcmF0aW9uLmgiCisjaW5jbHVkZSAiV2ViQ29tcG9zaXRvci5oIgogI2luY2x1ZGUg
PGd0ZXN0L2d0ZXN0Lmg+CiAjaW5jbHVkZSA8d3RmL1Bhc3NPd25QdHIuaD4KIAogdXNpbmcgbmFt
ZXNwYWNlIFdlYkNvcmU7Cit1c2luZyBuYW1lc3BhY2UgV2ViS2l0OwogdXNpbmcgbmFtZXNwYWNl
IFdlYktpdFRlc3RzOwogCiBuYW1lc3BhY2UgewogCiBjbGFzcyBNb2NrR3JhcGhpY3NMYXllckNs
aWVudCA6IHB1YmxpYyBHcmFwaGljc0xheWVyQ2xpZW50IHsKICAgcHVibGljOgotICAgIHZpcnR1
YWwgdm9pZCBub3RpZnlBbmltYXRpb25TdGFydGVkKGNvbnN0IEdyYXBoaWNzTGF5ZXIqLCBkb3Vi
bGUgdGltZSkgeyB9Ci0gICAgdmlydHVhbCB2b2lkIG5vdGlmeVN5bmNSZXF1aXJlZChjb25zdCBH
cmFwaGljc0xheWVyKikgeyB9Ci0gICAgdmlydHVhbCB2b2lkIHBhaW50Q29udGVudHMoY29uc3Qg
R3JhcGhpY3NMYXllciosIEdyYXBoaWNzQ29udGV4dCYsIEdyYXBoaWNzTGF5ZXJQYWludGluZ1Bo
YXNlLCBjb25zdCBJbnRSZWN0JiBpbkNsaXApIHsgfQotICAgIHZpcnR1YWwgYm9vbCBzaG93RGVi
dWdCb3JkZXJzKGNvbnN0IEdyYXBoaWNzTGF5ZXIqKSBjb25zdCB7IHJldHVybiBmYWxzZTsgfQot
ICAgIHZpcnR1YWwgYm9vbCBzaG93UmVwYWludENvdW50ZXIoY29uc3QgR3JhcGhpY3NMYXllciop
IGNvbnN0IHsgcmV0dXJuIGZhbHNlOyB9CisgICAgdmlydHVhbCB2b2lkIG5vdGlmeUFuaW1hdGlv
blN0YXJ0ZWQoY29uc3QgR3JhcGhpY3NMYXllciosIGRvdWJsZSB0aW1lKSBPVkVSUklERSB7IH0K
KyAgICB2aXJ0dWFsIHZvaWQgbm90aWZ5U3luY1JlcXVpcmVkKGNvbnN0IEdyYXBoaWNzTGF5ZXIq
KSBPVkVSUklERSB7IH0KKyAgICB2aXJ0dWFsIHZvaWQgcGFpbnRDb250ZW50cyhjb25zdCBHcmFw
aGljc0xheWVyKiwgR3JhcGhpY3NDb250ZXh0JiwgR3JhcGhpY3NMYXllclBhaW50aW5nUGhhc2Us
IGNvbnN0IEludFJlY3QmIGluQ2xpcCkgT1ZFUlJJREUgeyB9CisgICAgdmlydHVhbCBib29sIHNo
b3dEZWJ1Z0JvcmRlcnMoY29uc3QgR3JhcGhpY3NMYXllciopIGNvbnN0IE9WRVJSSURFIHsgcmV0
dXJuIGZhbHNlOyB9CisgICAgdmlydHVhbCBib29sIHNob3dSZXBhaW50Q291bnRlcihjb25zdCBH
cmFwaGljc0xheWVyKikgY29uc3QgT1ZFUlJJREUgeyByZXR1cm4gZmFsc2U7IH0KIH07CiAKLVRF
U1QoR3JhcGhpY3NMYXllckNocm9taXVtVGVzdCwgdXBkYXRlTGF5ZXJQcmVzZXJ2ZXMzRFdpdGhB
bmltYXRpb25zKQotewotICAgIE1vY2tHcmFwaGljc0xheWVyQ2xpZW50IGNsaWVudDsKLSAgICBP
d25QdHI8R3JhcGhpY3NMYXllckNocm9taXVtPiBncmFwaGljc0xheWVyID0gc3RhdGljX3BvaW50
ZXJfY2FzdDxHcmFwaGljc0xheWVyQ2hyb21pdW0+KEdyYXBoaWNzTGF5ZXI6OmNyZWF0ZSgmY2xp
ZW50KSk7Ci0gICAgQVNTRVJUX1RSVUUoZ3JhcGhpY3NMYXllci5nZXQoKSk7CitjbGFzcyBNb2Nr
TGF5ZXJUcmVlSG9zdENsaWVudCA6IHB1YmxpYyBDQ0xheWVyVHJlZUhvc3RDbGllbnQgeworcHVi
bGljOgorICAgIHZpcnR1YWwgdm9pZCB3aWxsQmVnaW5GcmFtZSgpIE9WRVJSSURFIHsgfQorICAg
IHZpcnR1YWwgdm9pZCBkaWRCZWdpbkZyYW1lKCkgT1ZFUlJJREUgeyB9CisgICAgdmlydHVhbCB2
b2lkIHVwZGF0ZUFuaW1hdGlvbnMoZG91YmxlIGZyYW1lQmVnaW5UaW1lKSBPVkVSUklERSB7IH0K
KyAgICB2aXJ0dWFsIHZvaWQgbGF5b3V0KCkgT1ZFUlJJREUgeyB9CisgICAgdmlydHVhbCB2b2lk
IGFwcGx5U2Nyb2xsQW5kU2NhbGUoY29uc3QgSW50U2l6ZSYgc2Nyb2xsRGVsdGEsIGZsb2F0IHBh
Z2VTY2FsZSkgT1ZFUlJJREUgeyB9CisgICAgdmlydHVhbCBQYXNzUmVmUHRyPEdyYXBoaWNzQ29u
dGV4dDNEPiBjcmVhdGVDb250ZXh0KCkgT1ZFUlJJREUKKyAgICB7CisgICAgICAgIEdyYXBoaWNz
Q29udGV4dDNEOjpBdHRyaWJ1dGVzIGF0dHJzOworICAgICAgICByZXR1cm4gY3JlYXRlQ29tcG9z
aXRvck1vY2tHcmFwaGljc0NvbnRleHQzRChhdHRycyk7CisgICAgfQorICAgIHZpcnR1YWwgdm9p
ZCBkaWRSZWNyZWF0ZUNvbnRleHQoYm9vbCBzdWNjZXNzKSBPVkVSUklERSB7IH0KKyAgICB2aXJ0
dWFsIHZvaWQgd2lsbENvbW1pdCgpIE9WRVJSSURFIHsgfQorICAgIHZpcnR1YWwgdm9pZCBkaWRD
b21taXQoKSBPVkVSUklERSB7IH0KKyAgICB2aXJ0dWFsIHZvaWQgZGlkQ29tbWl0QW5kRHJhd0Zy
YW1lKCkgT1ZFUlJJREUgeyB9CisgICAgdmlydHVhbCB2b2lkIGRpZENvbXBsZXRlU3dhcEJ1ZmZl
cnMoKSBPVkVSUklERSB7IH0KKyAgICB2aXJ0dWFsIHZvaWQgc2NoZWR1bGVDb21wb3NpdGUoKSBP
VkVSUklERSB7IH0KK307CisKK2NsYXNzIE1vY2tMYXllclRyZWVIb3N0IDogcHVibGljIENDTGF5
ZXJUcmVlSG9zdCB7CitwdWJsaWM6CisgICAgc3RhdGljIFBhc3NPd25QdHI8TW9ja0xheWVyVHJl
ZUhvc3Q+IGNyZWF0ZSgpCisgICAgeworICAgICAgICAvLyBGb3IgdGhlc2UgdGVzdHMsIHdlIHdp
bGwgZW5hYmxlIHRocmVhZGVkIGFuaW1hdGlvbnMuCisgICAgICAgIENDU2V0dGluZ3Mgc2V0dGlu
Z3M7CisgICAgICAgIHNldHRpbmdzLnRocmVhZGVkQW5pbWF0aW9uRW5hYmxlZCA9IHRydWU7Cisg
ICAgICAgIE93blB0cjxNb2NrTGF5ZXJUcmVlSG9zdD4gbGF5ZXJUcmVlSG9zdChhZG9wdFB0cihu
ZXcgTW9ja0xheWVyVHJlZUhvc3QobmV3IE1vY2tMYXllclRyZWVIb3N0Q2xpZW50KCksIHNldHRp
bmdzKSkpOworICAgICAgICBib29sIHN1Y2Nlc3MgPSBsYXllclRyZWVIb3N0LT5pbml0aWFsaXpl
KCk7CisgICAgICAgIEVYUEVDVF9UUlVFKHN1Y2Nlc3MpOworICAgICAgICBsYXllclRyZWVIb3N0
LT5zZXRSb290TGF5ZXIoTGF5ZXJDaHJvbWl1bTo6Y3JlYXRlKCkpOworICAgICAgICBsYXllclRy
ZWVIb3N0LT5zZXRWaWV3cG9ydFNpemUoSW50U2l6ZSgxLCAxKSk7CisgICAgICAgIHJldHVybiBs
YXllclRyZWVIb3N0LnJlbGVhc2UoKTsKKyAgICB9CisKKyAgICB2aXJ0dWFsIFBhc3NPd25QdHI8
Q0NMYXllclRyZWVIb3N0SW1wbD4gY3JlYXRlTGF5ZXJUcmVlSG9zdEltcGwoQ0NMYXllclRyZWVI
b3N0SW1wbENsaWVudCogY2xpZW50KQorICAgIHsKKyAgICAgICAgLy8gRm9yIHRoZXNlIHRlc3Rz
LCB3ZSB3aWxsIGVuYWJsZSB0aHJlYWRlZCBhbmltYXRpb25zLgorICAgICAgICBDQ1NldHRpbmdz
IGNvcHlTZXR0aW5ncyA9IHNldHRpbmdzKCk7CisgICAgICAgIGNvcHlTZXR0aW5ncy50aHJlYWRl
ZEFuaW1hdGlvbkVuYWJsZWQgPSB0cnVlOworICAgICAgICByZXR1cm4gQ0NMYXllclRyZWVIb3N0
SW1wbDo6Y3JlYXRlKGNvcHlTZXR0aW5ncywgY2xpZW50KTsKKyAgICB9CisKK3ByaXZhdGU6Cisg
ICAgTW9ja0xheWVyVHJlZUhvc3QoQ0NMYXllclRyZWVIb3N0Q2xpZW50KiBjbGllbnQsIGNvbnN0
IENDU2V0dGluZ3MmIHNldHRpbmdzKQorICAgICAgICA6IENDTGF5ZXJUcmVlSG9zdChjbGllbnQs
IHNldHRpbmdzKQorICAgIHsKKyAgICB9Cit9OworCitjbGFzcyBHcmFwaGljc0xheWVyQ2hyb21p
dW1UZXN0IDogcHVibGljIHRlc3Rpbmc6OlRlc3QgeworcHVibGljOgorICAgIEdyYXBoaWNzTGF5
ZXJDaHJvbWl1bVRlc3QoKQorICAgIHsKKyAgICAgICAgV2ViQ29tcG9zaXRvcjo6aW5pdGlhbGl6
ZSgwKTsKKyAgICAgICAgbV9ncmFwaGljc0xheWVyID0gc3RhdGljX3BvaW50ZXJfY2FzdDxHcmFw
aGljc0xheWVyQ2hyb21pdW0+KEdyYXBoaWNzTGF5ZXI6OmNyZWF0ZSgmbV9jbGllbnQpKTsKKyAg
ICAgICAgbV9wbGF0Zm9ybUxheWVyID0gc3RhdGljX2Nhc3Q8TGF5ZXJDaHJvbWl1bSo+KG1fZ3Jh
cGhpY3NMYXllci0+cGxhdGZvcm1MYXllcigpKTsKKyAgICAgICAgbV9sYXllclRyZWVIb3N0ID0g
TW9ja0xheWVyVHJlZUhvc3Q6OmNyZWF0ZSgpOworICAgICAgICBtX3BsYXRmb3JtTGF5ZXItPnNl
dExheWVyVHJlZUhvc3QobV9sYXllclRyZWVIb3N0LmdldCgpKTsKKyAgICB9CisKKyAgICB2aXJ0
dWFsIH5HcmFwaGljc0xheWVyQ2hyb21pdW1UZXN0KCkKKyAgICB7CisgICAgICAgIG1fZ3JhcGhp
Y3NMYXllci5jbGVhcigpOworICAgICAgICBtX2xheWVyVHJlZUhvc3QuY2xlYXIoKTsKKyAgICAg
ICAgV2ViQ29tcG9zaXRvcjo6c2h1dGRvd24oKTsKKyAgICB9CiAKLSAgICBMYXllckNocm9taXVt
KiBwbGF0Zm9ybUxheWVyID0gc3RhdGljX2Nhc3Q8TGF5ZXJDaHJvbWl1bSo+KGdyYXBoaWNzTGF5
ZXItPnBsYXRmb3JtTGF5ZXIoKSk7Ci0gICAgQVNTRVJUX1RSVUUocGxhdGZvcm1MYXllcik7Citw
cm90ZWN0ZWQ6CisgICAgc3RhdGljIHZvaWQgZXhwZWN0VHJhbnNsYXRlWChkb3VibGUgdHJhbnNs
YXRlWCwgY29uc3QgVHJhbnNmb3JtYXRpb25NYXRyaXgmIG1hdHJpeCkKKyAgICB7CisgICAgICAg
IFRyYW5zZm9ybWF0aW9uTWF0cml4OjpEZWNvbXBvc2VkVHlwZSBkZWNvbXBvc2VkVHlwZTsKKyAg
ICAgICAgbWF0cml4LmRlY29tcG9zZShkZWNvbXBvc2VkVHlwZSk7CisgICAgICAgIEVYUEVDVF9G
TE9BVF9FUSh0cmFuc2xhdGVYLCBkZWNvbXBvc2VkVHlwZS50cmFuc2xhdGVYKTsKKyAgICB9CiAK
LSAgICBBU1NFUlRfRkFMU0UocGxhdGZvcm1MYXllci0+aGFzQWN0aXZlQW5pbWF0aW9uKCkpOwor
ICAgIExheWVyQ2hyb21pdW0qIG1fcGxhdGZvcm1MYXllcjsKKyAgICBPd25QdHI8R3JhcGhpY3NM
YXllckNocm9taXVtPiBtX2dyYXBoaWNzTGF5ZXI7CisgICAgT3duUHRyPENDTGF5ZXJUcmVlSG9z
dD4gbV9sYXllclRyZWVIb3N0OworCitwcml2YXRlOgorICAgIE1vY2tHcmFwaGljc0xheWVyQ2xp
ZW50IG1fY2xpZW50OworICAgIERlYnVnU2NvcGVkU2V0TWFpblRocmVhZCBtX21haW47Cit9Owor
CitURVNUX0YoR3JhcGhpY3NMYXllckNocm9taXVtVGVzdCwgdXBkYXRlTGF5ZXJQcmVzZXJ2ZXMz
RFdpdGhBbmltYXRpb25zKQoreworICAgIEFTU0VSVF9GQUxTRShtX3BsYXRmb3JtTGF5ZXItPmhh
c0FjdGl2ZUFuaW1hdGlvbigpKTsKIAogICAgIE93blB0cjxDQ0FjdGl2ZUFuaW1hdGlvbj4gZmxv
YXRBbmltYXRpb24oQ0NBY3RpdmVBbmltYXRpb246OmNyZWF0ZShhZG9wdFB0cihuZXcgRmFrZUZs
b2F0QW5pbWF0aW9uQ3VydmUpLCAwLCAxLCBDQ0FjdGl2ZUFuaW1hdGlvbjo6T3BhY2l0eSkpOwot
ICAgIHBsYXRmb3JtTGF5ZXItPmxheWVyQW5pbWF0aW9uQ29udHJvbGxlcigpLT5hZGQoZmxvYXRB
bmltYXRpb24ucmVsZWFzZSgpKTsKKyAgICBtX3BsYXRmb3JtTGF5ZXItPmxheWVyQW5pbWF0aW9u
Q29udHJvbGxlcigpLT5hZGRBbmltYXRpb24oZmxvYXRBbmltYXRpb24ucmVsZWFzZSgpKTsKKwor
ICAgIEFTU0VSVF9UUlVFKG1fcGxhdGZvcm1MYXllci0+aGFzQWN0aXZlQW5pbWF0aW9uKCkpOwor
CisgICAgbV9ncmFwaGljc0xheWVyLT5zZXRQcmVzZXJ2ZXMzRCh0cnVlKTsKKworICAgIG1fcGxh
dGZvcm1MYXllciA9IHN0YXRpY19jYXN0PExheWVyQ2hyb21pdW0qPihtX2dyYXBoaWNzTGF5ZXIt
PnBsYXRmb3JtTGF5ZXIoKSk7CisgICAgQVNTRVJUX1RSVUUobV9wbGF0Zm9ybUxheWVyKTsKKwor
ICAgIEFTU0VSVF9UUlVFKG1fcGxhdGZvcm1MYXllci0+aGFzQWN0aXZlQW5pbWF0aW9uKCkpOwor
ICAgIG1fcGxhdGZvcm1MYXllci0+cmVtb3ZlQW5pbWF0aW9uKDApOworICAgIEFTU0VSVF9GQUxT
RShtX3BsYXRmb3JtTGF5ZXItPmhhc0FjdGl2ZUFuaW1hdGlvbigpKTsKKworICAgIG1fZ3JhcGhp
Y3NMYXllci0+c2V0UHJlc2VydmVzM0QoZmFsc2UpOworCisgICAgbV9wbGF0Zm9ybUxheWVyID0g
c3RhdGljX2Nhc3Q8TGF5ZXJDaHJvbWl1bSo+KG1fZ3JhcGhpY3NMYXllci0+cGxhdGZvcm1MYXll
cigpKTsKKyAgICBBU1NFUlRfVFJVRShtX3BsYXRmb3JtTGF5ZXIpOworCisgICAgQVNTRVJUX0ZB
TFNFKG1fcGxhdGZvcm1MYXllci0+aGFzQWN0aXZlQW5pbWF0aW9uKCkpOworfQorCitURVNUX0Yo
R3JhcGhpY3NMYXllckNocm9taXVtVGVzdCwgY3JlYXRlT3BhY2l0eUFuaW1hdGlvbikKK3sKKyAg
ICBjb25zdCBkb3VibGUgZHVyYXRpb24gPSAxOworICAgIFdlYkNvcmU6OktleWZyYW1lVmFsdWVM
aXN0IHZhbHVlcyhBbmltYXRlZFByb3BlcnR5T3BhY2l0eSk7CisgICAgdmFsdWVzLmluc2VydChu
ZXcgRmxvYXRBbmltYXRpb25WYWx1ZSgwLCAwKSk7CisgICAgdmFsdWVzLmluc2VydChuZXcgRmxv
YXRBbmltYXRpb25WYWx1ZShkdXJhdGlvbiwgMSkpOworCisgICAgUmVmUHRyPEFuaW1hdGlvbj4g
YW5pbWF0aW9uID0gQW5pbWF0aW9uOjpjcmVhdGUoKTsKKyAgICBhbmltYXRpb24tPnNldER1cmF0
aW9uKGR1cmF0aW9uKTsKKworICAgIEludFNpemUgYm94U2l6ZTsKKyAgICBib29sIGFkZGVkQW5p
bWF0aW9uID0gbV9ncmFwaGljc0xheWVyLT5hZGRBbmltYXRpb24odmFsdWVzLCBib3hTaXplLCBh
bmltYXRpb24uZ2V0KCksICIiLCAwKTsKKworICAgIEVYUEVDVF9UUlVFKGFkZGVkQW5pbWF0aW9u
KTsKKworICAgIEVYUEVDVF9UUlVFKG1fcGxhdGZvcm1MYXllci0+bGF5ZXJBbmltYXRpb25Db250
cm9sbGVyKCktPmhhc0FjdGl2ZUFuaW1hdGlvbigpKTsKKworICAgIENDQWN0aXZlQW5pbWF0aW9u
KiBhY3RpdmVBbmltYXRpb24gPSBtX3BsYXRmb3JtTGF5ZXItPmxheWVyQW5pbWF0aW9uQ29udHJv
bGxlcigpLT5nZXRBY3RpdmVBbmltYXRpb24oQ0NBY3RpdmVBbmltYXRpb246Ok9wYWNpdHkpOwor
ICAgIEVYUEVDVF9UUlVFKGFjdGl2ZUFuaW1hdGlvbik7CisKKyAgICBFWFBFQ1RfRVEoMSwgYWN0
aXZlQW5pbWF0aW9uLT5pdGVyYXRpb25zKCkpOworICAgIEVYUEVDVF9FUShDQ0FjdGl2ZUFuaW1h
dGlvbjo6T3BhY2l0eSwgYWN0aXZlQW5pbWF0aW9uLT50YXJnZXRQcm9wZXJ0eSgpKTsKKworICAg
IEVYUEVDVF9FUShDQ0FuaW1hdGlvbkN1cnZlOjpGbG9hdCwgYWN0aXZlQW5pbWF0aW9uLT5jdXJ2
ZSgpLT50eXBlKCkpOworCisgICAgY29uc3QgQ0NGbG9hdEFuaW1hdGlvbkN1cnZlKiBjdXJ2ZSA9
IGFjdGl2ZUFuaW1hdGlvbi0+Y3VydmUoKS0+dG9GbG9hdEFuaW1hdGlvbkN1cnZlKCk7CisgICAg
RVhQRUNUX1RSVUUoY3VydmUpOworCisgICAgRVhQRUNUX0VRKDAsIGN1cnZlLT5nZXRWYWx1ZSgw
KSk7CisgICAgRVhQRUNUX0VRKDEsIGN1cnZlLT5nZXRWYWx1ZShkdXJhdGlvbikpOworfQorCitU
RVNUX0YoR3JhcGhpY3NMYXllckNocm9taXVtVGVzdCwgY3JlYXRlVHJhbnNmb3JtQW5pbWF0aW9u
KQoreworICAgIGNvbnN0IGRvdWJsZSBkdXJhdGlvbiA9IDE7CisgICAgV2ViQ29yZTo6S2V5ZnJh
bWVWYWx1ZUxpc3QgdmFsdWVzKEFuaW1hdGVkUHJvcGVydHlXZWJraXRUcmFuc2Zvcm0pOworCisg
ICAgVHJhbnNmb3JtT3BlcmF0aW9ucyBvcGVyYXRpb25zMTsKKyAgICBvcGVyYXRpb25zMS5vcGVy
YXRpb25zKCkuYXBwZW5kKFRyYW5zbGF0ZVRyYW5zZm9ybU9wZXJhdGlvbjo6Y3JlYXRlKExlbmd0
aCgyLCBGaXhlZCksIExlbmd0aCgwLCBGaXhlZCksIFRyYW5zZm9ybU9wZXJhdGlvbjo6VFJBTlNM
QVRFX1gpKTsKKyAgICB2YWx1ZXMuaW5zZXJ0KG5ldyBUcmFuc2Zvcm1BbmltYXRpb25WYWx1ZSgw
LCAmb3BlcmF0aW9uczEpKTsKKworICAgIFRyYW5zZm9ybU9wZXJhdGlvbnMgb3BlcmF0aW9uczI7
CisgICAgb3BlcmF0aW9uczIub3BlcmF0aW9ucygpLmFwcGVuZChUcmFuc2xhdGVUcmFuc2Zvcm1P
cGVyYXRpb246OmNyZWF0ZShMZW5ndGgoNCwgRml4ZWQpLCBMZW5ndGgoMCwgRml4ZWQpLCBUcmFu
c2Zvcm1PcGVyYXRpb246OlRSQU5TTEFURV9YKSk7CisgICAgdmFsdWVzLmluc2VydChuZXcgVHJh
bnNmb3JtQW5pbWF0aW9uVmFsdWUoZHVyYXRpb24sICZvcGVyYXRpb25zMikpOworCisgICAgUmVm
UHRyPEFuaW1hdGlvbj4gYW5pbWF0aW9uID0gQW5pbWF0aW9uOjpjcmVhdGUoKTsKKyAgICBhbmlt
YXRpb24tPnNldER1cmF0aW9uKGR1cmF0aW9uKTsKKworICAgIEludFNpemUgYm94U2l6ZTsKKyAg
ICBtX2dyYXBoaWNzTGF5ZXItPmFkZEFuaW1hdGlvbih2YWx1ZXMsIGJveFNpemUsIGFuaW1hdGlv
bi5nZXQoKSwgIiIsIDApOworCisgICAgRVhQRUNUX1RSVUUobV9wbGF0Zm9ybUxheWVyLT5sYXll
ckFuaW1hdGlvbkNvbnRyb2xsZXIoKS0+aGFzQWN0aXZlQW5pbWF0aW9uKCkpOworCisgICAgQ0NB
Y3RpdmVBbmltYXRpb24qIGFjdGl2ZUFuaW1hdGlvbiA9IG1fcGxhdGZvcm1MYXllci0+bGF5ZXJB
bmltYXRpb25Db250cm9sbGVyKCktPmdldEFjdGl2ZUFuaW1hdGlvbihDQ0FjdGl2ZUFuaW1hdGlv
bjo6VHJhbnNmb3JtKTsKKyAgICBFWFBFQ1RfVFJVRShhY3RpdmVBbmltYXRpb24pOworCisgICAg
RVhQRUNUX0VRKDEsIGFjdGl2ZUFuaW1hdGlvbi0+aXRlcmF0aW9ucygpKTsKKyAgICBFWFBFQ1Rf
RVEoQ0NBY3RpdmVBbmltYXRpb246OlRyYW5zZm9ybSwgYWN0aXZlQW5pbWF0aW9uLT50YXJnZXRQ
cm9wZXJ0eSgpKTsKKworICAgIEVYUEVDVF9FUShDQ0FuaW1hdGlvbkN1cnZlOjpUcmFuc2Zvcm0s
IGFjdGl2ZUFuaW1hdGlvbi0+Y3VydmUoKS0+dHlwZSgpKTsKKworICAgIGNvbnN0IENDVHJhbnNm
b3JtQW5pbWF0aW9uQ3VydmUqIGN1cnZlID0gYWN0aXZlQW5pbWF0aW9uLT5jdXJ2ZSgpLT50b1Ry
YW5zZm9ybUFuaW1hdGlvbkN1cnZlKCk7CisgICAgRVhQRUNUX1RSVUUoY3VydmUpOworCisgICAg
ZXhwZWN0VHJhbnNsYXRlWCgyLCBjdXJ2ZS0+Z2V0VmFsdWUoMCkpOworICAgIGV4cGVjdFRyYW5z
bGF0ZVgoNCwgY3VydmUtPmdldFZhbHVlKGR1cmF0aW9uKSk7Cit9CisKK1RFU1RfRihHcmFwaGlj
c0xheWVyQ2hyb21pdW1UZXN0LCBjcmVhdGVSZXZlcnNlZEFuaW1hdGlvbikKK3sKKyAgICBjb25z
dCBkb3VibGUgZHVyYXRpb24gPSAxOworICAgIFdlYkNvcmU6OktleWZyYW1lVmFsdWVMaXN0IHZh
bHVlcyhBbmltYXRlZFByb3BlcnR5V2Via2l0VHJhbnNmb3JtKTsKKworICAgIFRyYW5zZm9ybU9w
ZXJhdGlvbnMgb3BlcmF0aW9uczE7CisgICAgb3BlcmF0aW9uczEub3BlcmF0aW9ucygpLmFwcGVu
ZChUcmFuc2xhdGVUcmFuc2Zvcm1PcGVyYXRpb246OmNyZWF0ZShMZW5ndGgoMiwgRml4ZWQpLCBM
ZW5ndGgoMCwgRml4ZWQpLCBUcmFuc2Zvcm1PcGVyYXRpb246OlRSQU5TTEFURV9YKSk7CisgICAg
dmFsdWVzLmluc2VydChuZXcgVHJhbnNmb3JtQW5pbWF0aW9uVmFsdWUoMCwgJm9wZXJhdGlvbnMx
KSk7CisKKyAgICBUcmFuc2Zvcm1PcGVyYXRpb25zIG9wZXJhdGlvbnMyOworICAgIG9wZXJhdGlv
bnMyLm9wZXJhdGlvbnMoKS5hcHBlbmQoVHJhbnNsYXRlVHJhbnNmb3JtT3BlcmF0aW9uOjpjcmVh
dGUoTGVuZ3RoKDQsIEZpeGVkKSwgTGVuZ3RoKDAsIEZpeGVkKSwgVHJhbnNmb3JtT3BlcmF0aW9u
OjpUUkFOU0xBVEVfWCkpOworICAgIHZhbHVlcy5pbnNlcnQobmV3IFRyYW5zZm9ybUFuaW1hdGlv
blZhbHVlKGR1cmF0aW9uLCAmb3BlcmF0aW9uczIpKTsKKworICAgIFJlZlB0cjxBbmltYXRpb24+
IGFuaW1hdGlvbiA9IEFuaW1hdGlvbjo6Y3JlYXRlKCk7CisgICAgYW5pbWF0aW9uLT5zZXREdXJh
dGlvbihkdXJhdGlvbik7CisgICAgYW5pbWF0aW9uLT5zZXREaXJlY3Rpb24oQW5pbWF0aW9uOjpB
bmltYXRpb25EaXJlY3Rpb25SZXZlcnNlKTsKKworICAgIEludFNpemUgYm94U2l6ZTsKKyAgICBt
X2dyYXBoaWNzTGF5ZXItPmFkZEFuaW1hdGlvbih2YWx1ZXMsIGJveFNpemUsIGFuaW1hdGlvbi5n
ZXQoKSwgIiIsIDApOworCisgICAgRVhQRUNUX1RSVUUobV9wbGF0Zm9ybUxheWVyLT5sYXllckFu
aW1hdGlvbkNvbnRyb2xsZXIoKS0+aGFzQWN0aXZlQW5pbWF0aW9uKCkpOworCisgICAgQ0NBY3Rp
dmVBbmltYXRpb24qIGFjdGl2ZUFuaW1hdGlvbiA9IG1fcGxhdGZvcm1MYXllci0+bGF5ZXJBbmlt
YXRpb25Db250cm9sbGVyKCktPmdldEFjdGl2ZUFuaW1hdGlvbihDQ0FjdGl2ZUFuaW1hdGlvbjo6
VHJhbnNmb3JtKTsKKyAgICBFWFBFQ1RfVFJVRShhY3RpdmVBbmltYXRpb24pOworCisgICAgRVhQ
RUNUX0VRKDEsIGFjdGl2ZUFuaW1hdGlvbi0+aXRlcmF0aW9ucygpKTsKKyAgICBFWFBFQ1RfRVEo
Q0NBY3RpdmVBbmltYXRpb246OlRyYW5zZm9ybSwgYWN0aXZlQW5pbWF0aW9uLT50YXJnZXRQcm9w
ZXJ0eSgpKTsKKworICAgIEVYUEVDVF9FUShDQ0FuaW1hdGlvbkN1cnZlOjpUcmFuc2Zvcm0sIGFj
dGl2ZUFuaW1hdGlvbi0+Y3VydmUoKS0+dHlwZSgpKTsKKworICAgIGNvbnN0IENDVHJhbnNmb3Jt
QW5pbWF0aW9uQ3VydmUqIGN1cnZlID0gYWN0aXZlQW5pbWF0aW9uLT5jdXJ2ZSgpLT50b1RyYW5z
Zm9ybUFuaW1hdGlvbkN1cnZlKCk7CisgICAgRVhQRUNUX1RSVUUoY3VydmUpOworCisgICAgZXhw
ZWN0VHJhbnNsYXRlWCg0LCBjdXJ2ZS0+Z2V0VmFsdWUoMCkpOworICAgIGV4cGVjdFRyYW5zbGF0
ZVgoMiwgY3VydmUtPmdldFZhbHVlKGR1cmF0aW9uKSk7Cit9CisKK1RFU1RfRihHcmFwaGljc0xh
eWVyQ2hyb21pdW1UZXN0LCBjcmVhdGVBbHRlcm5hdGluZ0FuaW1hdGlvbikKK3sKKyAgICBjb25z
dCBkb3VibGUgZHVyYXRpb24gPSAxOworICAgIFdlYkNvcmU6OktleWZyYW1lVmFsdWVMaXN0IHZh
bHVlcyhBbmltYXRlZFByb3BlcnR5V2Via2l0VHJhbnNmb3JtKTsKKworICAgIFRyYW5zZm9ybU9w
ZXJhdGlvbnMgb3BlcmF0aW9uczE7CisgICAgb3BlcmF0aW9uczEub3BlcmF0aW9ucygpLmFwcGVu
ZChUcmFuc2xhdGVUcmFuc2Zvcm1PcGVyYXRpb246OmNyZWF0ZShMZW5ndGgoMiwgRml4ZWQpLCBM
ZW5ndGgoMCwgRml4ZWQpLCBUcmFuc2Zvcm1PcGVyYXRpb246OlRSQU5TTEFURV9YKSk7CisgICAg
dmFsdWVzLmluc2VydChuZXcgVHJhbnNmb3JtQW5pbWF0aW9uVmFsdWUoMCwgJm9wZXJhdGlvbnMx
KSk7CisKKyAgICBUcmFuc2Zvcm1PcGVyYXRpb25zIG9wZXJhdGlvbnMyOworICAgIG9wZXJhdGlv
bnMyLm9wZXJhdGlvbnMoKS5hcHBlbmQoVHJhbnNsYXRlVHJhbnNmb3JtT3BlcmF0aW9uOjpjcmVh
dGUoTGVuZ3RoKDQsIEZpeGVkKSwgTGVuZ3RoKDAsIEZpeGVkKSwgVHJhbnNmb3JtT3BlcmF0aW9u
OjpUUkFOU0xBVEVfWCkpOworICAgIHZhbHVlcy5pbnNlcnQobmV3IFRyYW5zZm9ybUFuaW1hdGlv
blZhbHVlKGR1cmF0aW9uLCAmb3BlcmF0aW9uczIpKTsKKworICAgIFJlZlB0cjxBbmltYXRpb24+
IGFuaW1hdGlvbiA9IEFuaW1hdGlvbjo6Y3JlYXRlKCk7CisgICAgYW5pbWF0aW9uLT5zZXREdXJh
dGlvbihkdXJhdGlvbik7CisgICAgYW5pbWF0aW9uLT5zZXREaXJlY3Rpb24oQW5pbWF0aW9uOjpB
bmltYXRpb25EaXJlY3Rpb25BbHRlcm5hdGUpOworICAgIGFuaW1hdGlvbi0+c2V0SXRlcmF0aW9u
Q291bnQoMik7CisKKyAgICBJbnRTaXplIGJveFNpemU7CisgICAgbV9ncmFwaGljc0xheWVyLT5h
ZGRBbmltYXRpb24odmFsdWVzLCBib3hTaXplLCBhbmltYXRpb24uZ2V0KCksICIiLCAwKTsKKwor
ICAgIEVYUEVDVF9UUlVFKG1fcGxhdGZvcm1MYXllci0+bGF5ZXJBbmltYXRpb25Db250cm9sbGVy
KCktPmhhc0FjdGl2ZUFuaW1hdGlvbigpKTsKKworICAgIENDQWN0aXZlQW5pbWF0aW9uKiBhY3Rp
dmVBbmltYXRpb24gPSBtX3BsYXRmb3JtTGF5ZXItPmxheWVyQW5pbWF0aW9uQ29udHJvbGxlcigp
LT5nZXRBY3RpdmVBbmltYXRpb24oQ0NBY3RpdmVBbmltYXRpb246OlRyYW5zZm9ybSk7CisgICAg
RVhQRUNUX1RSVUUoYWN0aXZlQW5pbWF0aW9uKTsKKyAgICBFWFBFQ1RfVFJVRShhY3RpdmVBbmlt
YXRpb24tPmFsdGVybmF0ZXNEaXJlY3Rpb24oKSk7CisKKyAgICBFWFBFQ1RfRVEoMiwgYWN0aXZl
QW5pbWF0aW9uLT5pdGVyYXRpb25zKCkpOworICAgIEVYUEVDVF9FUShDQ0FjdGl2ZUFuaW1hdGlv
bjo6VHJhbnNmb3JtLCBhY3RpdmVBbmltYXRpb24tPnRhcmdldFByb3BlcnR5KCkpOworCisgICAg
RVhQRUNUX0VRKENDQW5pbWF0aW9uQ3VydmU6OlRyYW5zZm9ybSwgYWN0aXZlQW5pbWF0aW9uLT5j
dXJ2ZSgpLT50eXBlKCkpOworCisgICAgY29uc3QgQ0NUcmFuc2Zvcm1BbmltYXRpb25DdXJ2ZSog
Y3VydmUgPSBhY3RpdmVBbmltYXRpb24tPmN1cnZlKCktPnRvVHJhbnNmb3JtQW5pbWF0aW9uQ3Vy
dmUoKTsKKyAgICBFWFBFQ1RfVFJVRShjdXJ2ZSk7CisKKyAgICBleHBlY3RUcmFuc2xhdGVYKDIs
IGN1cnZlLT5nZXRWYWx1ZSgwKSk7CisgICAgZXhwZWN0VHJhbnNsYXRlWCg0LCBjdXJ2ZS0+Z2V0
VmFsdWUoZHVyYXRpb24pKTsKK30KKworVEVTVF9GKEdyYXBoaWNzTGF5ZXJDaHJvbWl1bVRlc3Qs
IGNyZWF0ZVJldmVyc2VkQWx0ZXJuYXRpbmdBbmltYXRpb24pCit7CisgICAgY29uc3QgZG91Ymxl
IGR1cmF0aW9uID0gMTsKKyAgICBXZWJDb3JlOjpLZXlmcmFtZVZhbHVlTGlzdCB2YWx1ZXMoQW5p
bWF0ZWRQcm9wZXJ0eVdlYmtpdFRyYW5zZm9ybSk7CisKKyAgICBUcmFuc2Zvcm1PcGVyYXRpb25z
IG9wZXJhdGlvbnMxOworICAgIG9wZXJhdGlvbnMxLm9wZXJhdGlvbnMoKS5hcHBlbmQoVHJhbnNs
YXRlVHJhbnNmb3JtT3BlcmF0aW9uOjpjcmVhdGUoTGVuZ3RoKDIsIEZpeGVkKSwgTGVuZ3RoKDAs
IEZpeGVkKSwgVHJhbnNmb3JtT3BlcmF0aW9uOjpUUkFOU0xBVEVfWCkpOworICAgIHZhbHVlcy5p
bnNlcnQobmV3IFRyYW5zZm9ybUFuaW1hdGlvblZhbHVlKDAsICZvcGVyYXRpb25zMSkpOworCisg
ICAgVHJhbnNmb3JtT3BlcmF0aW9ucyBvcGVyYXRpb25zMjsKKyAgICBvcGVyYXRpb25zMi5vcGVy
YXRpb25zKCkuYXBwZW5kKFRyYW5zbGF0ZVRyYW5zZm9ybU9wZXJhdGlvbjo6Y3JlYXRlKExlbmd0
aCg0LCBGaXhlZCksIExlbmd0aCgwLCBGaXhlZCksIFRyYW5zZm9ybU9wZXJhdGlvbjo6VFJBTlNM
QVRFX1gpKTsKKyAgICB2YWx1ZXMuaW5zZXJ0KG5ldyBUcmFuc2Zvcm1BbmltYXRpb25WYWx1ZShk
dXJhdGlvbiwgJm9wZXJhdGlvbnMyKSk7CisKKyAgICBSZWZQdHI8QW5pbWF0aW9uPiBhbmltYXRp
b24gPSBBbmltYXRpb246OmNyZWF0ZSgpOworICAgIGFuaW1hdGlvbi0+c2V0RHVyYXRpb24oZHVy
YXRpb24pOworICAgIGFuaW1hdGlvbi0+c2V0RGlyZWN0aW9uKEFuaW1hdGlvbjo6QW5pbWF0aW9u
RGlyZWN0aW9uQWx0ZXJuYXRlUmV2ZXJzZSk7CisgICAgYW5pbWF0aW9uLT5zZXRJdGVyYXRpb25D
b3VudCgyKTsKIAotICAgIEFTU0VSVF9UUlVFKHBsYXRmb3JtTGF5ZXItPmhhc0FjdGl2ZUFuaW1h
dGlvbigpKTsKKyAgICBJbnRTaXplIGJveFNpemU7CisgICAgbV9ncmFwaGljc0xheWVyLT5hZGRB
bmltYXRpb24odmFsdWVzLCBib3hTaXplLCBhbmltYXRpb24uZ2V0KCksICIiLCAwKTsKIAotICAg
IGdyYXBoaWNzTGF5ZXItPnNldFByZXNlcnZlczNEKHRydWUpOworICAgIEVYUEVDVF9UUlVFKG1f
cGxhdGZvcm1MYXllci0+bGF5ZXJBbmltYXRpb25Db250cm9sbGVyKCktPmhhc0FjdGl2ZUFuaW1h
dGlvbigpKTsKIAotICAgIHBsYXRmb3JtTGF5ZXIgPSBzdGF0aWNfY2FzdDxMYXllckNocm9taXVt
Kj4oZ3JhcGhpY3NMYXllci0+cGxhdGZvcm1MYXllcigpKTsKLSAgICBBU1NFUlRfVFJVRShwbGF0
Zm9ybUxheWVyKTsKKyAgICBDQ0FjdGl2ZUFuaW1hdGlvbiogYWN0aXZlQW5pbWF0aW9uID0gbV9w
bGF0Zm9ybUxheWVyLT5sYXllckFuaW1hdGlvbkNvbnRyb2xsZXIoKS0+Z2V0QWN0aXZlQW5pbWF0
aW9uKENDQWN0aXZlQW5pbWF0aW9uOjpUcmFuc2Zvcm0pOworICAgIEVYUEVDVF9UUlVFKGFjdGl2
ZUFuaW1hdGlvbik7CisgICAgRVhQRUNUX1RSVUUoYWN0aXZlQW5pbWF0aW9uLT5hbHRlcm5hdGVz
RGlyZWN0aW9uKCkpOwogCi0gICAgQVNTRVJUX1RSVUUocGxhdGZvcm1MYXllci0+aGFzQWN0aXZl
QW5pbWF0aW9uKCkpOwotICAgIHBsYXRmb3JtTGF5ZXItPnJlbW92ZUFuaW1hdGlvbigwKTsKLSAg
ICBBU1NFUlRfRkFMU0UocGxhdGZvcm1MYXllci0+aGFzQWN0aXZlQW5pbWF0aW9uKCkpOworICAg
IEVYUEVDVF9FUSgyLCBhY3RpdmVBbmltYXRpb24tPml0ZXJhdGlvbnMoKSk7CisgICAgRVhQRUNU
X0VRKENDQWN0aXZlQW5pbWF0aW9uOjpUcmFuc2Zvcm0sIGFjdGl2ZUFuaW1hdGlvbi0+dGFyZ2V0
UHJvcGVydHkoKSk7CiAKLSAgICBncmFwaGljc0xheWVyLT5zZXRQcmVzZXJ2ZXMzRChmYWxzZSk7
CisgICAgRVhQRUNUX0VRKENDQW5pbWF0aW9uQ3VydmU6OlRyYW5zZm9ybSwgYWN0aXZlQW5pbWF0
aW9uLT5jdXJ2ZSgpLT50eXBlKCkpOwogCi0gICAgcGxhdGZvcm1MYXllciA9IHN0YXRpY19jYXN0
PExheWVyQ2hyb21pdW0qPihncmFwaGljc0xheWVyLT5wbGF0Zm9ybUxheWVyKCkpOwotICAgIEFT
U0VSVF9UUlVFKHBsYXRmb3JtTGF5ZXIpOworICAgIGNvbnN0IENDVHJhbnNmb3JtQW5pbWF0aW9u
Q3VydmUqIGN1cnZlID0gYWN0aXZlQW5pbWF0aW9uLT5jdXJ2ZSgpLT50b1RyYW5zZm9ybUFuaW1h
dGlvbkN1cnZlKCk7CisgICAgRVhQRUNUX1RSVUUoY3VydmUpOwogCi0gICAgQVNTRVJUX0ZBTFNF
KHBsYXRmb3JtTGF5ZXItPmhhc0FjdGl2ZUFuaW1hdGlvbigpKTsKKyAgICBleHBlY3RUcmFuc2xh
dGVYKDQsIGN1cnZlLT5nZXRWYWx1ZSgwKSk7CisgICAgZXhwZWN0VHJhbnNsYXRlWCgyLCBjdXJ2
ZS0+Z2V0VmFsdWUoZHVyYXRpb24pKTsKIH0KIAogfSAvLyBuYW1lc3BhY2UK
</data>

          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>145160</attachid>
            <date>2012-05-31 14:47:28 -0700</date>
            <delta_ts>2012-05-31 19:17:38 -0700</delta_ts>
            <desc>Patch</desc>
            <filename>bug-87686-20120531174727.patch</filename>
            <type>text/plain</type>
            <size>92003</size>
            <attacher>vollick</attacher>
            
              <data encoding="base64">U3VidmVyc2lvbiBSZXZpc2lvbjogMTE5MTM4CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9D
aGFuZ2VMb2cgYi9Tb3VyY2UvV2ViQ29yZS9DaGFuZ2VMb2cKaW5kZXggYTFkNTg4YmI5N2Y3MjJm
YjdlMGViMzA3NWU0N2NlYzI3ODZhZDZmOC4uMTQ1NTVkN2Y0M2U1Yzc2NjZiMjljMzRlMzA5YjNh
Nzg3YTkwNzkwMCAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvQ2hhbmdlTG9nCisrKyBiL1Nv
dXJjZS9XZWJDb3JlL0NoYW5nZUxvZwpAQCAtMSwzICsxLDYyIEBACisyMDEyLTA1LTMxICBJYW4g
Vm9sbGljayAgPHZvbGxpY2tAY2hyb21pdW0ub3JnPgorCisgICAgICAgIFtjaHJvbWl1bV0gQWNj
ZWxlcmF0ZWQgYW5pbWF0aW9ucyBzaG91bGQgdXNlIFdlYlRyYW5zZm9ybU9wZXJhdGlvbnMKKyAg
ICAgICAgaHR0cHM6Ly9idWdzLndlYmtpdC5vcmcvc2hvd19idWcuY2dpP2lkPTg3Njg2CisKKyAg
ICAgICAgUmV2aWV3ZWQgYnkgTk9CT0RZIChPT1BTISkuCisKKyAgICAgICAgQ0NUcmFuc2Zvcm1L
ZXlmcmFtZSBuZXcgb3ducyBhIFdlYlRyYW5zZm9ybU9wZXJhdGlvbnMgcmF0aGVyIHRoYW4gYSAK
KyAgICAgICAgVHJhbnNmb3JtT3BlcmF0aW9ucy4gTGF5ZXJDaHJvbWl1bSdzIEFQSSBoYXMgYmVl
biBjaGFuZ2VkIHNvIHRoYXQgCisgICAgICAgIExheWVyQ2hyb21pdW06OmFkZEFuaW1hdGlvbiBz
aG91bGQgdGFrZSBvbmx5IGEgQ0NBY3RpdmVBbmltYXRpb24uCisgICAgICAgIEdyYXBoaWNzTGF5
ZXJDaHJvbWl1bSBpcyBuZXcgcmVzcG9uc2libGUgZm9yIHRyYW5zbGF0aW5nIHRvIAorICAgICAg
ICBXZWJUcmFuc2Zvcm1PcGVyYXRpb25zIGFuZCBjcmVhdGluZyBDQ0FjdGl2ZUFuaW1hdGlvbnMu
IFRlc3RzIHRoYXQgdXNlIAorICAgICAgICB0aGUgcHVibGljIEFQSSAodGhhdCBpcywgdGhleSBj
YWxsIGFkZEFuaW1hdGlvbiB3aXRoIEtleWZyYW1lVmFsdWVMaXN0IAorICAgICAgICBhbmQgQW5p
bWF0aW9uIGFyZ3VtZW50cykgaGF2ZSBiZWVuIG1vdmVkIHRvIEdyYXBoaWNzTGF5ZXJDaHJvbWl1
bVRlc3QuCisKKyAgICAgICAgQWZmZWN0ZWQgdW5pdCB0ZXN0czoKKyAgICAgICAgICBHcmFwaGlj
c0xheWVyQ2hyb21pdW1UZXN0LmNyZWF0ZU9wYWNpdHlBbmltYXRpb24KKyAgICAgICAgICBHcmFw
aGljc0xheWVyQ2hyb21pdW1UZXN0LmNyZWF0ZVRyYW5zZm9ybUFuaW1hdGlvbgorICAgICAgICAg
IEdyYXBoaWNzTGF5ZXJDaHJvbWl1bVRlc3QuY3JlYXRlUmV2ZXJzZWRBbmltYXRpb24KKyAgICAg
ICAgICBHcmFwaGljc0xheWVyQ2hyb21pdW1UZXN0LmNyZWF0ZUFsdGVybmF0aW5nQW5pbWF0aW9u
CisgICAgICAgICAgR3JhcGhpY3NMYXllckNocm9taXVtVGVzdC5jcmVhdGVSZXZlcnNlZEFsdGVy
bmF0aW5nQW5pbWF0aW9uCisKKyAgICAgICAgKiBwbGF0Zm9ybS9ncmFwaGljcy9jaHJvbWl1bS9H
cmFwaGljc0xheWVyQ2hyb21pdW0uY3BwOgorICAgICAgICAoV2ViQ29yZTo6dG9XZWJUcmFuc2Zv
cm1PcGVyYXRpb25zKToKKyAgICAgICAgKFdlYkNvcmUpOgorICAgICAgICAoV2ViQ29yZTo6YXBw
ZW5kS2V5ZnJhbWUpOgorICAgICAgICAoV2ViQ29yZTo6Q0NLZXlmcmFtZWRUcmFuc2Zvcm1Bbmlt
YXRpb25DdXJ2ZSk6CisgICAgICAgIChXZWJDb3JlOjpjcmVhdGVBY3RpdmVBbmltYXRpb24pOgor
ICAgICAgICAoV2ViQ29yZTo6R3JhcGhpY3NMYXllckNocm9taXVtOjphZGRBbmltYXRpb24pOgor
ICAgICAgICAqIHBsYXRmb3JtL2dyYXBoaWNzL2Nocm9taXVtL0xheWVyQ2hyb21pdW0uY3BwOgor
ICAgICAgICAoV2ViQ29yZTo6TGF5ZXJDaHJvbWl1bTo6YWRkQW5pbWF0aW9uKToKKyAgICAgICAg
KiBwbGF0Zm9ybS9ncmFwaGljcy9jaHJvbWl1bS9MYXllckNocm9taXVtLmg6CisgICAgICAgIChX
ZWJDb3JlKToKKyAgICAgICAgKExheWVyQ2hyb21pdW0pOgorICAgICAgICAqIHBsYXRmb3JtL2dy
YXBoaWNzL2Nocm9taXVtL0xpbmtIaWdobGlnaHQuY3BwOgorICAgICAgICAoV2ViQ29yZTo6TGlu
a0hpZ2hsaWdodDo6TGlua0hpZ2hsaWdodCk6CisgICAgICAgICogcGxhdGZvcm0vZ3JhcGhpY3Mv
Y2hyb21pdW0vY2MvQ0NBbmltYXRpb25DdXJ2ZS5oOgorICAgICAgICAoQ0NUcmFuc2Zvcm1Bbmlt
YXRpb25DdXJ2ZSk6CisgICAgICAgICogcGxhdGZvcm0vZ3JhcGhpY3MvY2hyb21pdW0vY2MvQ0NL
ZXlmcmFtZWRBbmltYXRpb25DdXJ2ZS5jcHA6CisgICAgICAgIChXZWJDb3JlOjpDQ1RyYW5zZm9y
bUtleWZyYW1lOjpjcmVhdGUpOgorICAgICAgICAoV2ViQ29yZTo6Q0NUcmFuc2Zvcm1LZXlmcmFt
ZTo6Q0NUcmFuc2Zvcm1LZXlmcmFtZSk6CisgICAgICAgIChXZWJDb3JlOjpDQ1RyYW5zZm9ybUtl
eWZyYW1lOjp2YWx1ZSk6CisgICAgICAgIChXZWJDb3JlOjpDQ1RyYW5zZm9ybUtleWZyYW1lOjpj
bG9uZSk6CisgICAgICAgIChXZWJDb3JlOjpDQ0tleWZyYW1lZFRyYW5zZm9ybUFuaW1hdGlvbkN1
cnZlOjpnZXRWYWx1ZSk6CisgICAgICAgICogcGxhdGZvcm0vZ3JhcGhpY3MvY2hyb21pdW0vY2Mv
Q0NLZXlmcmFtZWRBbmltYXRpb25DdXJ2ZS5oOgorICAgICAgICAoQ0NUcmFuc2Zvcm1LZXlmcmFt
ZSk6CisgICAgICAgIChDQ0tleWZyYW1lZFRyYW5zZm9ybUFuaW1hdGlvbkN1cnZlKToKKyAgICAg
ICAgKiBwbGF0Zm9ybS9ncmFwaGljcy9jaHJvbWl1bS9jYy9DQ0xheWVyQW5pbWF0aW9uQ29udHJv
bGxlci5jcHA6CisgICAgICAgIChXZWJDb3JlOjpDQ0xheWVyQW5pbWF0aW9uQ29udHJvbGxlcjo6
cmVtb3ZlQW5pbWF0aW9uKToKKyAgICAgICAgKFdlYkNvcmUpOgorICAgICAgICAoV2ViQ29yZTo6
Q0NMYXllckFuaW1hdGlvbkNvbnRyb2xsZXI6OmFkZEFuaW1hdGlvbik6CisgICAgICAgIChXZWJD
b3JlOjpDQ0xheWVyQW5pbWF0aW9uQ29udHJvbGxlcjo6Z2V0QWN0aXZlQW5pbWF0aW9uKToKKyAg
ICAgICAgKFdlYkNvcmU6OkNDTGF5ZXJBbmltYXRpb25Db250cm9sbGVyOjpwdXNoTmV3QW5pbWF0
aW9uc1RvSW1wbFRocmVhZCk6CisgICAgICAgIChXZWJDb3JlOjpDQ0xheWVyQW5pbWF0aW9uQ29u
dHJvbGxlcjo6cmVwbGFjZUltcGxUaHJlYWRBbmltYXRpb25zKToKKyAgICAgICAgKFdlYkNvcmU6
OkNDTGF5ZXJBbmltYXRpb25Db250cm9sbGVyOjp0aWNrQW5pbWF0aW9ucyk6CisgICAgICAgICog
cGxhdGZvcm0vZ3JhcGhpY3MvY2hyb21pdW0vY2MvQ0NMYXllckFuaW1hdGlvbkNvbnRyb2xsZXIu
aDoKKyAgICAgICAgKENDTGF5ZXJBbmltYXRpb25Db250cm9sbGVyQ2xpZW50KToKKyAgICAgICAg
KENDTGF5ZXJBbmltYXRpb25Db250cm9sbGVyKToKKwogMjAxMi0wNS0zMSAgQnJhZHkgRWlkc29u
ICA8YmVpZHNvbkBhcHBsZS5jb20+CiAKICAgICAgICAgPHJkYXI6Ly9wcm9ibGVtLzExNTQ0NDU0
PiBhbmQgaHR0cHM6Ly9idWdzLndlYmtpdC5vcmcvc2hvd19idWcuY2dpP2lkPTg3OTkwCmRpZmYg
LS1naXQgYS9Tb3VyY2UvV2ViS2l0L2Nocm9taXVtL0NoYW5nZUxvZyBiL1NvdXJjZS9XZWJLaXQv
Y2hyb21pdW0vQ2hhbmdlTG9nCmluZGV4IGQwODZlNGFhMmU3NjQ4ZjFjNGE5MDQ1MGVmMDY3MTA1
Y2Q4NGExMDMuLmY4MjE0YzU2YTc4NzY3NWYwMTZkMzU1MjhhNjVhOGM2ZDY1Y2UxOWQgMTAwNjQ0
Ci0tLSBhL1NvdXJjZS9XZWJLaXQvY2hyb21pdW0vQ2hhbmdlTG9nCisrKyBiL1NvdXJjZS9XZWJL
aXQvY2hyb21pdW0vQ2hhbmdlTG9nCkBAIC0xLDMgKzEsNDIgQEAKKzIwMTItMDUtMzEgIElhbiBW
b2xsaWNrICA8dm9sbGlja0BjaHJvbWl1bS5vcmc+CisKKyAgICAgICAgW2Nocm9taXVtXSBBY2Nl
bGVyYXRlZCBhbmltYXRpb25zIHNob3VsZCB1c2UgV2ViVHJhbnNmb3JtT3BlcmF0aW9ucworICAg
ICAgICBodHRwczovL2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9ODc2ODYKKworICAg
ICAgICBSZXZpZXdlZCBieSBOT0JPRFkgKE9PUFMhKS4KKworICAgICAgICBDQ1RyYW5zZm9ybUtl
eWZyYW1lIG5ldyBvd25zIGEgV2ViVHJhbnNmb3JtT3BlcmF0aW9ucyByYXRoZXIgdGhhbiBhIAor
ICAgICAgICBUcmFuc2Zvcm1PcGVyYXRpb25zLiBMYXllckNocm9taXVtJ3MgQVBJIGhhcyBiZWVu
IGNoYW5nZWQgc28gdGhhdCAKKyAgICAgICAgTGF5ZXJDaHJvbWl1bTo6YWRkQW5pbWF0aW9uIHNo
b3VsZCB0YWtlIG9ubHkgYSBDQ0FjdGl2ZUFuaW1hdGlvbi4KKyAgICAgICAgR3JhcGhpY3NMYXll
ckNocm9taXVtIGlzIG5ldyByZXNwb25zaWJsZSBmb3IgdHJhbnNsYXRpbmcgdG8gCisgICAgICAg
IFdlYlRyYW5zZm9ybU9wZXJhdGlvbnMgYW5kIGNyZWF0aW5nIENDQWN0aXZlQW5pbWF0aW9ucy4g
VGVzdHMgdGhhdCB1c2UgCisgICAgICAgIHRoZSBwdWJsaWMgQVBJICh0aGF0IGlzLCB0aGV5IGNh
bGwgYWRkQW5pbWF0aW9uIHdpdGggS2V5ZnJhbWVWYWx1ZUxpc3QgCisgICAgICAgIGFuZCBBbmlt
YXRpb24gYXJndW1lbnRzKSBoYXZlIGJlZW4gbW92ZWQgdG8gR3JhcGhpY3NMYXllckNocm9taXVt
VGVzdC4KKworICAgICAgICAqIHRlc3RzL0NDQW5pbWF0aW9uVGVzdENvbW1vbi5jcHA6CisgICAg
ICAgIChXZWJDb3JlOjphZGRPcGFjaXR5VHJhbnNpdGlvbik6CisgICAgICAgIChXZWJDb3JlOjph
ZGRBbmltYXRlZFRyYW5zZm9ybSk6CisgICAgICAgIChXZWJLaXRUZXN0czo6RmFrZVRyYW5zZm9y
bVRyYW5zaXRpb246OmdldFZhbHVlKToKKyAgICAgICAgKiB0ZXN0cy9DQ0FuaW1hdGlvblRlc3RD
b21tb24uaDoKKyAgICAgICAgKiB0ZXN0cy9DQ0tleWZyYW1lZEFuaW1hdGlvbkN1cnZlVGVzdC5j
cHA6CisgICAgICAgIChXZWJDb3JlOjpURVNUKToKKyAgICAgICAgKiB0ZXN0cy9DQ0xheWVyQW5p
bWF0aW9uQ29udHJvbGxlclRlc3QuY3BwOgorICAgICAgICAoV2ViS2l0VGVzdHM6OlRFU1QpOgor
ICAgICAgICAqIHRlc3RzL0NDTGF5ZXJUcmVlSG9zdFRlc3QuY3BwOgorICAgICAgICAoV1RGOjpD
Q0xheWVyVHJlZUhvc3RUZXN0TGF5ZXJBZGRlZFdpdGhBbmltYXRpb246OmJlZ2luVGVzdCk6Cisg
ICAgICAgICogdGVzdHMvR3JhcGhpY3NMYXllckNocm9taXVtVGVzdC5jcHA6CisgICAgICAgIChN
b2NrTGF5ZXJUcmVlSG9zdENsaWVudCk6CisgICAgICAgIChXZWJLaXRUZXN0cyk6CisgICAgICAg
IChNb2NrTGF5ZXJUcmVlSG9zdCk6CisgICAgICAgIChXZWJLaXRUZXN0czo6TW9ja0xheWVyVHJl
ZUhvc3Q6OmNyZWF0ZSk6CisgICAgICAgIChXZWJLaXRUZXN0czo6TW9ja0xheWVyVHJlZUhvc3Q6
OmNyZWF0ZUxheWVyVHJlZUhvc3RJbXBsKToKKyAgICAgICAgKFdlYktpdFRlc3RzOjpNb2NrTGF5
ZXJUcmVlSG9zdDo6TW9ja0xheWVyVHJlZUhvc3QpOgorICAgICAgICAoR3JhcGhpY3NMYXllckNo
cm9taXVtVGVzdCk6CisgICAgICAgIChXZWJLaXRUZXN0czo6R3JhcGhpY3NMYXllckNocm9taXVt
VGVzdDo6R3JhcGhpY3NMYXllckNocm9taXVtVGVzdCk6CisgICAgICAgIChXZWJLaXRUZXN0czo6
R3JhcGhpY3NMYXllckNocm9taXVtVGVzdDo6fkdyYXBoaWNzTGF5ZXJDaHJvbWl1bVRlc3QpOgor
ICAgICAgICAoV2ViS2l0VGVzdHM6OkdyYXBoaWNzTGF5ZXJDaHJvbWl1bVRlc3Q6OmV4cGVjdFRy
YW5zbGF0ZVgpOgorICAgICAgICAoV2ViS2l0VGVzdHM6OlRFU1RfRik6CisKIDIwMTItMDUtMzEg
IEFtaSBGaXNjaG1hbiAgPGZpc2NobWFuQGNocm9taXVtLm9yZz4KIAogICAgICAgICBSZXBsYWNl
IFdlYk1lZGlhUGxheWVyOjpieXRlc0xvYWRlZCgpIHdpdGggYW4gZXhwbGljaXQgZGlkTG9hZGlu
Z1Byb2dyZXNzKCkKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNz
L2Nocm9taXVtL0dyYXBoaWNzTGF5ZXJDaHJvbWl1bS5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0
Zm9ybS9ncmFwaGljcy9jaHJvbWl1bS9HcmFwaGljc0xheWVyQ2hyb21pdW0uY3BwCmluZGV4IDE4
NDMzMzYwOTUxYjJiZmNlYTdjYjExYmJlOTAwMWVhOTg1ZjRlMDEuLmUyMWM5NGEwYjAxMzk4NDNh
ZmEzYTlkZWZiN2FiZjc5N2JlZDMyNzAgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL3BsYXRm
b3JtL2dyYXBoaWNzL2Nocm9taXVtL0dyYXBoaWNzTGF5ZXJDaHJvbWl1bS5jcHAKKysrIGIvU291
cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvY2hyb21pdW0vR3JhcGhpY3NMYXllckNocm9t
aXVtLmNwcApAQCAtNTAsMTkgKzUwLDM0IEBACiAjaW5jbHVkZSAiQ29udGVudExheWVyQ2hyb21p
dW0uaCIKICNpbmNsdWRlICJGbG9hdENvbnZlcnNpb24uaCIKICNpbmNsdWRlICJGbG9hdFJlY3Qu
aCIKKyNpbmNsdWRlICJJZGVudGl0eVRyYW5zZm9ybU9wZXJhdGlvbi5oIgogI2luY2x1ZGUgIklt
YWdlLmgiCiAjaW5jbHVkZSAiSW1hZ2VMYXllckNocm9taXVtLmgiCiAjaW5jbHVkZSAiTGF5ZXJD
aHJvbWl1bS5oIgorI2luY2x1ZGUgIkxlbmd0aC5oIgorI2luY2x1ZGUgIkxlbmd0aEZ1bmN0aW9u
cy5oIgogI2luY2x1ZGUgIkxpbmtIaWdobGlnaHQuaCIKKyNpbmNsdWRlICJNYXRyaXgzRFRyYW5z
Zm9ybU9wZXJhdGlvbi5oIgorI2luY2x1ZGUgIk1hdHJpeFRyYW5zZm9ybU9wZXJhdGlvbi5oIgor
I2luY2x1ZGUgIlBlcnNwZWN0aXZlVHJhbnNmb3JtT3BlcmF0aW9uLmgiCiAjaW5jbHVkZSAiUGxh
dGZvcm1TdHJpbmcuaCIKKyNpbmNsdWRlICJSb3RhdGVUcmFuc2Zvcm1PcGVyYXRpb24uaCIKKyNp
bmNsdWRlICJTY2FsZVRyYW5zZm9ybU9wZXJhdGlvbi5oIgogI2luY2x1ZGUgIlNrTWF0cml4NDQu
aCIKKyNpbmNsdWRlICJTa2V3VHJhbnNmb3JtT3BlcmF0aW9uLmgiCiAjaW5jbHVkZSAiU3lzdGVt
VGltZS5oIgorI2luY2x1ZGUgIlRyYW5zZm9ybU9wZXJhdGlvbnMuaCIKKyNpbmNsdWRlICJUcmFu
c2xhdGVUcmFuc2Zvcm1PcGVyYXRpb24uaCIKKworI2luY2x1ZGUgImNjL0NDQWN0aXZlQW5pbWF0
aW9uLmgiCisjaW5jbHVkZSAiY2MvQ0NLZXlmcmFtZWRBbmltYXRpb25DdXJ2ZS5oIgogCiAjaW5j
bHVkZSA8cHVibGljL1dlYkZpbHRlck9wZXJhdGlvbi5oPgogI2luY2x1ZGUgPHB1YmxpYy9XZWJG
aWx0ZXJPcGVyYXRpb25zLmg+CiAjaW5jbHVkZSA8cHVibGljL1dlYkZsb2F0UG9pbnQuaD4KICNp
bmNsdWRlIDxwdWJsaWMvV2ViRmxvYXRSZWN0Lmg+CiAjaW5jbHVkZSA8cHVibGljL1dlYlNpemUu
aD4KKyNpbmNsdWRlIDxwdWJsaWMvV2ViVHJhbnNmb3JtT3BlcmF0aW9ucy5oPgogI2luY2x1ZGUg
PHB1YmxpYy9XZWJUcmFuc2Zvcm1hdGlvbk1hdHJpeC5oPgogI2luY2x1ZGUgPHd0Zi9DdXJyZW50
VGltZS5oPgogI2luY2x1ZGUgPHd0Zi9TdHJpbmdFeHRyYXMuaD4KQEAgLTQ5OCwxMCArNTEzLDE4
MSBAQCB2b2lkIEdyYXBoaWNzTGF5ZXJDaHJvbWl1bTo6c2V0Q29udGVudHNUb0NhbnZhcyhQbGF0
Zm9ybUxheWVyKiBwbGF0Zm9ybUxheWVyKQogICAgICAgICB1cGRhdGVDaGlsZExpc3QoKTsKIH0K
IAorV2ViVHJhbnNmb3JtT3BlcmF0aW9ucyB0b1dlYlRyYW5zZm9ybU9wZXJhdGlvbnMoY29uc3Qg
VHJhbnNmb3JtT3BlcmF0aW9ucyYgdHJhbnNmb3JtT3BlcmF0aW9ucywgY29uc3QgRmxvYXRTaXpl
JiBib3hTaXplKQoreworICAgIC8vIFdlIG5lZWQgdG8gZG8gYSBkZWVwIGNvcHkgdGhlIHRyYW5z
Zm9ybU9wZXJhdGlvbnMgbWF5IGNvbnRhaW4gcmVmIHBvaW50ZXJzIHRvIFRyYW5zZm9ybU9wZXJh
dGlvbiBvYmplY3RzLgorICAgIFdlYlRyYW5zZm9ybU9wZXJhdGlvbnMgd2ViVHJhbnNmb3JtT3Bl
cmF0aW9uczsKKyAgICBmb3IgKHNpemVfdCBqID0gMDsgaiA8IHRyYW5zZm9ybU9wZXJhdGlvbnMu
c2l6ZSgpOyArK2opIHsKKyAgICAgICAgVHJhbnNmb3JtT3BlcmF0aW9uOjpPcGVyYXRpb25UeXBl
IG9wZXJhdGlvblR5cGUgPSB0cmFuc2Zvcm1PcGVyYXRpb25zLm9wZXJhdGlvbnMoKVtqXS0+Z2V0
T3BlcmF0aW9uVHlwZSgpOworICAgICAgICBzd2l0Y2ggKG9wZXJhdGlvblR5cGUpIHsKKyAgICAg
ICAgY2FzZSBUcmFuc2Zvcm1PcGVyYXRpb246OlNDQUxFX1g6CisgICAgICAgIGNhc2UgVHJhbnNm
b3JtT3BlcmF0aW9uOjpTQ0FMRV9ZOgorICAgICAgICBjYXNlIFRyYW5zZm9ybU9wZXJhdGlvbjo6
U0NBTEVfWjoKKyAgICAgICAgY2FzZSBUcmFuc2Zvcm1PcGVyYXRpb246OlNDQUxFXzNEOgorICAg
ICAgICBjYXNlIFRyYW5zZm9ybU9wZXJhdGlvbjo6U0NBTEU6IHsKKyAgICAgICAgICAgIFNjYWxl
VHJhbnNmb3JtT3BlcmF0aW9uKiB0cmFuc2Zvcm0gPSBzdGF0aWNfY2FzdDxTY2FsZVRyYW5zZm9y
bU9wZXJhdGlvbio+KHRyYW5zZm9ybU9wZXJhdGlvbnMub3BlcmF0aW9ucygpW2pdLmdldCgpKTsK
KyAgICAgICAgICAgIHdlYlRyYW5zZm9ybU9wZXJhdGlvbnMuYXBwZW5kU2NhbGUodHJhbnNmb3Jt
LT54KCksIHRyYW5zZm9ybS0+eSgpLCB0cmFuc2Zvcm0tPnooKSk7CisgICAgICAgICAgICBicmVh
azsKKyAgICAgICAgfQorICAgICAgICBjYXNlIFRyYW5zZm9ybU9wZXJhdGlvbjo6VFJBTlNMQVRF
X1g6CisgICAgICAgIGNhc2UgVHJhbnNmb3JtT3BlcmF0aW9uOjpUUkFOU0xBVEVfWToKKyAgICAg
ICAgY2FzZSBUcmFuc2Zvcm1PcGVyYXRpb246OlRSQU5TTEFURV9aOgorICAgICAgICBjYXNlIFRy
YW5zZm9ybU9wZXJhdGlvbjo6VFJBTlNMQVRFXzNEOgorICAgICAgICBjYXNlIFRyYW5zZm9ybU9w
ZXJhdGlvbjo6VFJBTlNMQVRFOiB7CisgICAgICAgICAgICBUcmFuc2xhdGVUcmFuc2Zvcm1PcGVy
YXRpb24qIHRyYW5zZm9ybSA9IHN0YXRpY19jYXN0PFRyYW5zbGF0ZVRyYW5zZm9ybU9wZXJhdGlv
bio+KHRyYW5zZm9ybU9wZXJhdGlvbnMub3BlcmF0aW9ucygpW2pdLmdldCgpKTsKKyAgICAgICAg
ICAgIHdlYlRyYW5zZm9ybU9wZXJhdGlvbnMuYXBwZW5kVHJhbnNsYXRlKGZsb2F0VmFsdWVGb3JM
ZW5ndGgodHJhbnNmb3JtLT54KCksIGJveFNpemUud2lkdGgoKSksIGZsb2F0VmFsdWVGb3JMZW5n
dGgodHJhbnNmb3JtLT55KCksIGJveFNpemUuaGVpZ2h0KCkpLCBmbG9hdFZhbHVlRm9yTGVuZ3Ro
KHRyYW5zZm9ybS0+eigpLCAxKSk7CisgICAgICAgICAgICBicmVhazsKKyAgICAgICAgfQorICAg
ICAgICBjYXNlIFRyYW5zZm9ybU9wZXJhdGlvbjo6Uk9UQVRFX1g6CisgICAgICAgIGNhc2UgVHJh
bnNmb3JtT3BlcmF0aW9uOjpST1RBVEVfWToKKyAgICAgICAgY2FzZSBUcmFuc2Zvcm1PcGVyYXRp
b246OlJPVEFURV8zRDoKKyAgICAgICAgY2FzZSBUcmFuc2Zvcm1PcGVyYXRpb246OlJPVEFURTog
eworICAgICAgICAgICAgUm90YXRlVHJhbnNmb3JtT3BlcmF0aW9uKiB0cmFuc2Zvcm0gPSBzdGF0
aWNfY2FzdDxSb3RhdGVUcmFuc2Zvcm1PcGVyYXRpb24qPih0cmFuc2Zvcm1PcGVyYXRpb25zLm9w
ZXJhdGlvbnMoKVtqXS5nZXQoKSk7CisgICAgICAgICAgICB3ZWJUcmFuc2Zvcm1PcGVyYXRpb25z
LmFwcGVuZFJvdGF0ZSh0cmFuc2Zvcm0tPngoKSwgdHJhbnNmb3JtLT55KCksIHRyYW5zZm9ybS0+
eigpLCB0cmFuc2Zvcm0tPmFuZ2xlKCkpOworICAgICAgICAgICAgYnJlYWs7CisgICAgICAgIH0K
KyAgICAgICAgY2FzZSBUcmFuc2Zvcm1PcGVyYXRpb246OlNLRVdfWDoKKyAgICAgICAgY2FzZSBU
cmFuc2Zvcm1PcGVyYXRpb246OlNLRVdfWToKKyAgICAgICAgY2FzZSBUcmFuc2Zvcm1PcGVyYXRp
b246OlNLRVc6IHsKKyAgICAgICAgICAgIFNrZXdUcmFuc2Zvcm1PcGVyYXRpb24qIHRyYW5zZm9y
bSA9IHN0YXRpY19jYXN0PFNrZXdUcmFuc2Zvcm1PcGVyYXRpb24qPih0cmFuc2Zvcm1PcGVyYXRp
b25zLm9wZXJhdGlvbnMoKVtqXS5nZXQoKSk7CisgICAgICAgICAgICB3ZWJUcmFuc2Zvcm1PcGVy
YXRpb25zLmFwcGVuZFNrZXcodHJhbnNmb3JtLT5hbmdsZVgoKSwgdHJhbnNmb3JtLT5hbmdsZVko
KSk7CisgICAgICAgICAgICBicmVhazsKKyAgICAgICAgfQorICAgICAgICBjYXNlIFRyYW5zZm9y
bU9wZXJhdGlvbjo6TUFUUklYOiB7CisgICAgICAgICAgICBNYXRyaXhUcmFuc2Zvcm1PcGVyYXRp
b24qIHRyYW5zZm9ybSA9IHN0YXRpY19jYXN0PE1hdHJpeFRyYW5zZm9ybU9wZXJhdGlvbio+KHRy
YW5zZm9ybU9wZXJhdGlvbnMub3BlcmF0aW9ucygpW2pdLmdldCgpKTsKKyAgICAgICAgICAgIFRy
YW5zZm9ybWF0aW9uTWF0cml4IG0gPSB0cmFuc2Zvcm0tPm1hdHJpeCgpOworICAgICAgICAgICAg
d2ViVHJhbnNmb3JtT3BlcmF0aW9ucy5hcHBlbmRNYXRyaXgoV2ViVHJhbnNmb3JtYXRpb25NYXRy
aXgobSkpOworICAgICAgICAgICAgYnJlYWs7CisgICAgICAgIH0KKyAgICAgICAgY2FzZSBUcmFu
c2Zvcm1PcGVyYXRpb246Ok1BVFJJWF8zRDogeworICAgICAgICAgICAgTWF0cml4M0RUcmFuc2Zv
cm1PcGVyYXRpb24qIHRyYW5zZm9ybSA9IHN0YXRpY19jYXN0PE1hdHJpeDNEVHJhbnNmb3JtT3Bl
cmF0aW9uKj4odHJhbnNmb3JtT3BlcmF0aW9ucy5vcGVyYXRpb25zKClbal0uZ2V0KCkpOworICAg
ICAgICAgICAgVHJhbnNmb3JtYXRpb25NYXRyaXggbSA9IHRyYW5zZm9ybS0+bWF0cml4KCk7Cisg
ICAgICAgICAgICB3ZWJUcmFuc2Zvcm1PcGVyYXRpb25zLmFwcGVuZE1hdHJpeChXZWJUcmFuc2Zv
cm1hdGlvbk1hdHJpeChtKSk7CisgICAgICAgICAgICBicmVhazsKKyAgICAgICAgfQorICAgICAg
ICBjYXNlIFRyYW5zZm9ybU9wZXJhdGlvbjo6UEVSU1BFQ1RJVkU6IHsKKyAgICAgICAgICAgIFBl
cnNwZWN0aXZlVHJhbnNmb3JtT3BlcmF0aW9uKiB0cmFuc2Zvcm0gPSBzdGF0aWNfY2FzdDxQZXJz
cGVjdGl2ZVRyYW5zZm9ybU9wZXJhdGlvbio+KHRyYW5zZm9ybU9wZXJhdGlvbnMub3BlcmF0aW9u
cygpW2pdLmdldCgpKTsKKyAgICAgICAgICAgIHdlYlRyYW5zZm9ybU9wZXJhdGlvbnMuYXBwZW5k
UGVyc3BlY3RpdmUoZmxvYXRWYWx1ZUZvckxlbmd0aCh0cmFuc2Zvcm0tPnBlcnNwZWN0aXZlKCks
IDApKTsKKyAgICAgICAgICAgIGJyZWFrOworICAgICAgICB9CisgICAgICAgIGNhc2UgVHJhbnNm
b3JtT3BlcmF0aW9uOjpJREVOVElUWToKKyAgICAgICAgY2FzZSBUcmFuc2Zvcm1PcGVyYXRpb246
Ok5PTkU6CisgICAgICAgICAgICAvLyBEbyBub3RoaW5nLgorICAgICAgICAgICAgYnJlYWs7Cisg
ICAgICAgIH0gLy8gc3dpdGNoCisgICAgfSAvLyBmb3IgZWFjaCBvcGVyYXRpb24KKworICAgIHJl
dHVybiB3ZWJUcmFuc2Zvcm1PcGVyYXRpb25zOworfQorCit0ZW1wbGF0ZSA8Y2xhc3MgVmFsdWUs
IGNsYXNzIEtleWZyYW1lLCBjbGFzcyBDdXJ2ZT4KK3ZvaWQgYXBwZW5kS2V5ZnJhbWUoQ3VydmUm
IGN1cnZlLCBkb3VibGUga2V5VGltZSwgY29uc3QgVmFsdWUqIHZhbHVlLCBQYXNzT3duUHRyPEND
VGltaW5nRnVuY3Rpb24+IHRpbWluZ0Z1bmN0aW9uLCBjb25zdCBGbG9hdFNpemUmKQoreworICAg
IGN1cnZlLmFkZEtleWZyYW1lKEtleWZyYW1lOjpjcmVhdGUoa2V5VGltZSwgdmFsdWUtPnZhbHVl
KCksIHRpbWluZ0Z1bmN0aW9uKSk7Cit9CisKK3RlbXBsYXRlIDw+Cit2b2lkIGFwcGVuZEtleWZy
YW1lPFRyYW5zZm9ybUFuaW1hdGlvblZhbHVlLCBDQ1RyYW5zZm9ybUtleWZyYW1lLCBDQ0tleWZy
YW1lZFRyYW5zZm9ybUFuaW1hdGlvbkN1cnZlPihDQ0tleWZyYW1lZFRyYW5zZm9ybUFuaW1hdGlv
bkN1cnZlJiBjdXJ2ZSwgZG91YmxlIGtleVRpbWUsIGNvbnN0IFRyYW5zZm9ybUFuaW1hdGlvblZh
bHVlKiB2YWx1ZSwgUGFzc093blB0cjxDQ1RpbWluZ0Z1bmN0aW9uPiB0aW1pbmdGdW5jdGlvbiwg
Y29uc3QgRmxvYXRTaXplJiBib3hTaXplKQoreworICAgIGN1cnZlLmFkZEtleWZyYW1lKENDVHJh
bnNmb3JtS2V5ZnJhbWU6OmNyZWF0ZShrZXlUaW1lLCB0b1dlYlRyYW5zZm9ybU9wZXJhdGlvbnMo
KnZhbHVlLT52YWx1ZSgpLCBib3hTaXplKSwgdGltaW5nRnVuY3Rpb24pKTsKK30KKwordGVtcGxh
dGUgPGNsYXNzIFZhbHVlLCBjbGFzcyBLZXlmcmFtZSwgY2xhc3MgQ3VydmU+CitQYXNzT3duUHRy
PENDQWN0aXZlQW5pbWF0aW9uPiBjcmVhdGVBY3RpdmVBbmltYXRpb24oY29uc3QgS2V5ZnJhbWVW
YWx1ZUxpc3QmIHZhbHVlTGlzdCwgY29uc3QgQW5pbWF0aW9uKiBhbmltYXRpb24sIHNpemVfdCBh
bmltYXRpb25JZCwgc2l6ZV90IGdyb3VwSWQsIGRvdWJsZSB0aW1lT2Zmc2V0LCBDQ0FjdGl2ZUFu
aW1hdGlvbjo6VGFyZ2V0UHJvcGVydHkgdGFyZ2V0UHJvcGVydHksIGNvbnN0IEZsb2F0U2l6ZSYg
Ym94U2l6ZSkKK3sKKyAgICBib29sIGFsdGVybmF0ZSA9IGZhbHNlOworICAgIGJvb2wgcmV2ZXJz
ZSA9IGZhbHNlOworICAgIGlmIChhbmltYXRpb24gJiYgYW5pbWF0aW9uLT5pc0RpcmVjdGlvblNl
dCgpKSB7CisgICAgICAgIEFuaW1hdGlvbjo6QW5pbWF0aW9uRGlyZWN0aW9uIGRpcmVjdGlvbiA9
IGFuaW1hdGlvbi0+ZGlyZWN0aW9uKCk7CisgICAgICAgIGlmIChkaXJlY3Rpb24gPT0gQW5pbWF0
aW9uOjpBbmltYXRpb25EaXJlY3Rpb25BbHRlcm5hdGUgfHwgZGlyZWN0aW9uID09IEFuaW1hdGlv
bjo6QW5pbWF0aW9uRGlyZWN0aW9uQWx0ZXJuYXRlUmV2ZXJzZSkKKyAgICAgICAgICAgIGFsdGVy
bmF0ZSA9IHRydWU7CisgICAgICAgIGlmIChkaXJlY3Rpb24gPT0gQW5pbWF0aW9uOjpBbmltYXRp
b25EaXJlY3Rpb25SZXZlcnNlIHx8IGRpcmVjdGlvbiA9PSBBbmltYXRpb246OkFuaW1hdGlvbkRp
cmVjdGlvbkFsdGVybmF0ZVJldmVyc2UpCisgICAgICAgICAgICByZXZlcnNlID0gdHJ1ZTsKKyAg
ICB9CisKKyAgICBPd25QdHI8Q3VydmU+IGN1cnZlID0gQ3VydmU6OmNyZWF0ZSgpOworICAgIFZl
Y3RvcjxLZXlmcmFtZT4ga2V5ZnJhbWVzOworCisgICAgZm9yIChzaXplX3QgaSA9IDA7IGkgPCB2
YWx1ZUxpc3Quc2l6ZSgpOyBpKyspIHsKKyAgICAgICAgc2l6ZV90IGluZGV4ID0gcmV2ZXJzZSA/
IHZhbHVlTGlzdC5zaXplKCkgLSBpIC0gMSA6IGk7CisKKyAgICAgICAgY29uc3QgVmFsdWUqIG9y
aWdpbmFsVmFsdWUgPSBzdGF0aWNfY2FzdDxjb25zdCBWYWx1ZSo+KHZhbHVlTGlzdC5hdChpbmRl
eCkpOworCisgICAgICAgIE93blB0cjxDQ1RpbWluZ0Z1bmN0aW9uPiB0aW1pbmdGdW5jdGlvbjsK
KyAgICAgICAgY29uc3QgVGltaW5nRnVuY3Rpb24qIG9yaWdpbmFsVGltaW5nRnVuY3Rpb24gPSBv
cmlnaW5hbFZhbHVlLT50aW1pbmdGdW5jdGlvbigpOworCisgICAgICAgIC8vIElmIHRoZXJlIGhh
c24ndCBiZWVuIGEgdGltaW5nIGZ1bmN0aW9uIGFzc29jaWF0ZWQgd2l0aCB0aGlzIGtleWZyYW1l
LCB1c2UgdGhlCisgICAgICAgIC8vIGFuaW1hdGlvbidzIHRpbWluZyBmdW5jdGlvbiwgaWYgd2Ug
aGF2ZSBvbmUuCisgICAgICAgIGlmICghb3JpZ2luYWxUaW1pbmdGdW5jdGlvbiAmJiBhbmltYXRp
b24tPmlzVGltaW5nRnVuY3Rpb25TZXQoKSkKKyAgICAgICAgICAgIG9yaWdpbmFsVGltaW5nRnVu
Y3Rpb24gPSBhbmltYXRpb24tPnRpbWluZ0Z1bmN0aW9uKCkuZ2V0KCk7CisKKyAgICAgICAgaWYg
KG9yaWdpbmFsVGltaW5nRnVuY3Rpb24pIHsKKyAgICAgICAgICAgIHN3aXRjaCAob3JpZ2luYWxU
aW1pbmdGdW5jdGlvbi0+dHlwZSgpKSB7CisgICAgICAgICAgICBjYXNlIFRpbWluZ0Z1bmN0aW9u
OjpTdGVwc0Z1bmN0aW9uOgorICAgICAgICAgICAgICAgIC8vIEZJWE1FOiBhZGQgc3VwcG9ydCBm
b3Igc3RlcHMgdGltaW5nIGZ1bmN0aW9uLgorICAgICAgICAgICAgICAgIHJldHVybiBudWxscHRy
OworICAgICAgICAgICAgY2FzZSBUaW1pbmdGdW5jdGlvbjo6TGluZWFyRnVuY3Rpb246CisgICAg
ICAgICAgICAgICAgLy8gRG9uJ3Qgc2V0IHRoZSB0aW1pbmcgZnVuY3Rpb24uIEtleWZyYW1lcyBh
cmUgaW50ZXJwb2xhdGVkIGxpbmVhcmx5IGlmIHRoZXJlIGlzIG5vIHRpbWluZyBmdW5jdGlvbi4K
KyAgICAgICAgICAgICAgICBicmVhazsKKyAgICAgICAgICAgIGNhc2UgVGltaW5nRnVuY3Rpb246
OkN1YmljQmV6aWVyRnVuY3Rpb246CisgICAgICAgICAgICAgICAgY29uc3QgQ3ViaWNCZXppZXJU
aW1pbmdGdW5jdGlvbiogb3JpZ2luYWxCZXppZXJUaW1pbmdGdW5jdGlvbiA9IHN0YXRpY19jYXN0
PGNvbnN0IEN1YmljQmV6aWVyVGltaW5nRnVuY3Rpb24qPihvcmlnaW5hbFRpbWluZ0Z1bmN0aW9u
KTsKKyAgICAgICAgICAgICAgICB0aW1pbmdGdW5jdGlvbiA9IENDQ3ViaWNCZXppZXJUaW1pbmdG
dW5jdGlvbjo6Y3JlYXRlKG9yaWdpbmFsQmV6aWVyVGltaW5nRnVuY3Rpb24tPngxKCksIG9yaWdp
bmFsQmV6aWVyVGltaW5nRnVuY3Rpb24tPnkxKCksIG9yaWdpbmFsQmV6aWVyVGltaW5nRnVuY3Rp
b24tPngyKCksIG9yaWdpbmFsQmV6aWVyVGltaW5nRnVuY3Rpb24tPnkyKCkpOworICAgICAgICAg
ICAgICAgIGJyZWFrOworICAgICAgICAgICAgfSAvLyBzd2l0Y2gKKyAgICAgICAgfSBlbHNlCisg
ICAgICAgICAgICB0aW1pbmdGdW5jdGlvbiA9IENDRWFzZVRpbWluZ0Z1bmN0aW9uOjpjcmVhdGUo
KTsKKworICAgICAgICBkb3VibGUgZHVyYXRpb24gPSAoYW5pbWF0aW9uICYmIGFuaW1hdGlvbi0+
aXNEdXJhdGlvblNldCgpKSA/IGFuaW1hdGlvbi0+ZHVyYXRpb24oKSA6IDE7CisgICAgICAgIGRv
dWJsZSBrZXlUaW1lID0gb3JpZ2luYWxWYWx1ZS0+a2V5VGltZSgpICogZHVyYXRpb247CisgICAg
ICAgIGlmIChyZXZlcnNlKQorICAgICAgICAgICAga2V5VGltZSA9IGR1cmF0aW9uIC0ga2V5VGlt
ZTsKKyAgICAgICAgYXBwZW5kS2V5ZnJhbWU8VmFsdWUsIEtleWZyYW1lLCBDdXJ2ZT4oKmN1cnZl
LCBrZXlUaW1lLCBvcmlnaW5hbFZhbHVlLCB0aW1pbmdGdW5jdGlvbi5yZWxlYXNlKCksIGJveFNp
emUpOworICAgIH0KKworICAgIE93blB0cjxDQ0FjdGl2ZUFuaW1hdGlvbj4gYW5pbSA9IENDQWN0
aXZlQW5pbWF0aW9uOjpjcmVhdGUoY3VydmUucmVsZWFzZSgpLCBhbmltYXRpb25JZCwgZ3JvdXBJ
ZCwgdGFyZ2V0UHJvcGVydHkpOworCisgICAgQVNTRVJUKGFuaW0uZ2V0KCkpOworCisgICAgaWYg
KGFuaW0uZ2V0KCkpIHsKKyAgICAgICAgaW50IGl0ZXJhdGlvbnMgPSAoYW5pbWF0aW9uICYmIGFu
aW1hdGlvbi0+aXNJdGVyYXRpb25Db3VudFNldCgpKSA/IGFuaW1hdGlvbi0+aXRlcmF0aW9uQ291
bnQoKSA6IDE7CisgICAgICAgIGFuaW0tPnNldEl0ZXJhdGlvbnMoaXRlcmF0aW9ucyk7CisgICAg
ICAgIGFuaW0tPnNldEFsdGVybmF0ZXNEaXJlY3Rpb24oYWx0ZXJuYXRlKTsKKyAgICB9CisKKyAg
ICAvLyBJbiBvcmRlciB0byBhdm9pZCBza2V3LCB0aGUgbWFpbiB0aHJlYWQgYW5pbWF0aW9uIGNh
bm5vdCB0aWNrIHVudGlsIGl0IGhhcyByZWNlaXZlZCB0aGUgc3RhcnQgdGltZSBvZgorICAgIC8v
IHRoZSBjb3JyZXNwb25kaW5nIGltcGwgdGhyZWFkIGFuaW1hdGlvbi4KKyAgICBhbmltLT5zZXRO
ZWVkc1N5bmNocm9uaXplZFN0YXJ0VGltZSh0cnVlKTsKKworICAgIC8vIElmIHRpbWVPZmZzZXQg
PiAwLCB0aGVuIHRoZSBhbmltYXRpb24gaGFzIHN0YXJ0ZWQgaW4gdGhlIHBhc3QuCisgICAgYW5p
bS0+c2V0VGltZU9mZnNldCh0aW1lT2Zmc2V0KTsKKworICAgIHJldHVybiBhbmltLnJlbGVhc2Uo
KTsKK30KKwogYm9vbCBHcmFwaGljc0xheWVyQ2hyb21pdW06OmFkZEFuaW1hdGlvbihjb25zdCBL
ZXlmcmFtZVZhbHVlTGlzdCYgdmFsdWVzLCBjb25zdCBJbnRTaXplJiBib3hTaXplLCBjb25zdCBB
bmltYXRpb24qIGFuaW1hdGlvbiwgY29uc3QgU3RyaW5nJiBhbmltYXRpb25OYW1lLCBkb3VibGUg
dGltZU9mZnNldCkKIHsKICAgICBwcmltYXJ5TGF5ZXIoKS51bndyYXA8TGF5ZXJDaHJvbWl1bT4o
KS0+c2V0TGF5ZXJBbmltYXRpb25EZWxlZ2F0ZSh0aGlzKTsKLSAgICByZXR1cm4gcHJpbWFyeUxh
eWVyKCkudW53cmFwPExheWVyQ2hyb21pdW0+KCktPmFkZEFuaW1hdGlvbih2YWx1ZXMsIGJveFNp
emUsIGFuaW1hdGlvbiwgbWFwQW5pbWF0aW9uTmFtZVRvSWQoYW5pbWF0aW9uTmFtZSksIEFuaW1h
dGlvbklkVmVuZG9yOjpnZXROZXh0R3JvdXBJZCgpLCB0aW1lT2Zmc2V0KTsKKworICAgIGludCBh
bmltYXRpb25JZCA9IG1hcEFuaW1hdGlvbk5hbWVUb0lkKGFuaW1hdGlvbk5hbWUpOworICAgIGlu
dCBncm91cElkID0gQW5pbWF0aW9uSWRWZW5kb3I6OmdldE5leHRHcm91cElkKCk7CisKKyAgICBP
d25QdHI8Q0NBY3RpdmVBbmltYXRpb24+IHRvQWRkOworICAgIGlmICh2YWx1ZXMucHJvcGVydHko
KSA9PSBBbmltYXRlZFByb3BlcnR5V2Via2l0VHJhbnNmb3JtKSB7CisgICAgICAgIGJvb2wgaGFz
Um90YXRpb25PZk1vcmVUaGFuMTgwRGVncmVlcyA9IGZhbHNlOworICAgICAgICB2YWxpZGF0ZVRy
YW5zZm9ybU9wZXJhdGlvbnModmFsdWVzLCBoYXNSb3RhdGlvbk9mTW9yZVRoYW4xODBEZWdyZWVz
KTsKKyAgICAgICAgaWYgKGhhc1JvdGF0aW9uT2ZNb3JlVGhhbjE4MERlZ3JlZXMpCisgICAgICAg
ICAgICByZXR1cm4gZmFsc2U7CisgICAgICAgIHRvQWRkID0gY3JlYXRlQWN0aXZlQW5pbWF0aW9u
PFRyYW5zZm9ybUFuaW1hdGlvblZhbHVlLCBDQ1RyYW5zZm9ybUtleWZyYW1lLCBDQ0tleWZyYW1l
ZFRyYW5zZm9ybUFuaW1hdGlvbkN1cnZlPih2YWx1ZXMsIGFuaW1hdGlvbiwgYW5pbWF0aW9uSWQs
IGdyb3VwSWQsIHRpbWVPZmZzZXQsIENDQWN0aXZlQW5pbWF0aW9uOjpUcmFuc2Zvcm0sIEZsb2F0
U2l6ZShib3hTaXplKSk7CisgICAgfSBlbHNlIGlmICh2YWx1ZXMucHJvcGVydHkoKSA9PSBBbmlt
YXRlZFByb3BlcnR5T3BhY2l0eSkKKyAgICAgICAgdG9BZGQgPSBjcmVhdGVBY3RpdmVBbmltYXRp
b248RmxvYXRBbmltYXRpb25WYWx1ZSwgQ0NGbG9hdEtleWZyYW1lLCBDQ0tleWZyYW1lZEZsb2F0
QW5pbWF0aW9uQ3VydmU+KHZhbHVlcywgYW5pbWF0aW9uLCBhbmltYXRpb25JZCwgZ3JvdXBJZCwg
dGltZU9mZnNldCwgQ0NBY3RpdmVBbmltYXRpb246Ok9wYWNpdHksIEZsb2F0U2l6ZSgpKTsKKwor
ICAgIGlmICh0b0FkZC5nZXQoKSkgeworICAgICAgICAvLyBSZW1vdmUgYW55IGV4aXN0aW5nIGFu
aW1hdGlvbnMgd2l0aCB0aGUgc2FtZSBhbmltYXRpb24gaWQgYW5kIHRhcmdldCBwcm9wZXJ0eS4K
KyAgICAgICAgcHJpbWFyeUxheWVyKCkudW53cmFwPExheWVyQ2hyb21pdW0+KCktPmxheWVyQW5p
bWF0aW9uQ29udHJvbGxlcigpLT5yZW1vdmVBbmltYXRpb24odG9BZGQtPmlkKCksIHRvQWRkLT50
YXJnZXRQcm9wZXJ0eSgpKTsKKyAgICAgICAgcmV0dXJuIHByaW1hcnlMYXllcigpLnVud3JhcDxM
YXllckNocm9taXVtPigpLT5hZGRBbmltYXRpb24odG9BZGQucmVsZWFzZSgpKTsKKyAgICB9CisK
KyAgICByZXR1cm4gZmFsc2U7CiB9CiAKIHZvaWQgR3JhcGhpY3NMYXllckNocm9taXVtOjpwYXVz
ZUFuaW1hdGlvbihjb25zdCBTdHJpbmcmIGFuaW1hdGlvbk5hbWUsIGRvdWJsZSB0aW1lT2Zmc2V0
KQpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvY2hyb21pdW0v
TGF5ZXJDaHJvbWl1bS5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9jaHJv
bWl1bS9MYXllckNocm9taXVtLmNwcAppbmRleCA3NDQ1OWE4NTFkMWFjMjZhZWVhODQyMWE0M2Ux
NWY4M2NmNDFkMDMwLi40NDM2YWQ2MmRmNWQ2YmVhOTk2NzYxZDExNzgyZDg4NmQzYjRjYWQ1IDEw
MDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9jaHJvbWl1bS9MYXll
ckNocm9taXVtLmNwcAorKysgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9jaHJv
bWl1bS9MYXllckNocm9taXVtLmNwcApAQCAtMzcsNiArMzcsNyBAQAogI2luY2x1ZGUgIlBsYXRm
b3JtQ29udGV4dFNraWEuaCIKICNpbmNsdWRlICJSZW5kZXJMYXllckJhY2tpbmcuaCIKICNpbmNs
dWRlICJUZXh0U3RyZWFtLmgiCisjaW5jbHVkZSAiY2MvQ0NBY3RpdmVBbmltYXRpb24uaCIKICNp
bmNsdWRlICJjYy9DQ0FuaW1hdGlvbkV2ZW50cy5oIgogI2luY2x1ZGUgImNjL0NDTGF5ZXJBbmlt
YXRpb25Db250cm9sbGVyLmgiCiAjaW5jbHVkZSAiY2MvQ0NMYXllckFuaW1hdGlvbkRlbGVnYXRl
LmgiCkBAIC01OTgsMTcgKzU5OSwxNSBAQCB2b2lkIExheWVyQ2hyb21pdW06OnNldFRyYW5zZm9y
bUZyb21BbmltYXRpb24oY29uc3QgVHJhbnNmb3JtYXRpb25NYXRyaXgmIHRyYW5zZgogICAgIG1f
dHJhbnNmb3JtID0gdHJhbnNmb3JtOwogfQogCi1ib29sIExheWVyQ2hyb21pdW06OmFkZEFuaW1h
dGlvbihjb25zdCBLZXlmcmFtZVZhbHVlTGlzdCYgdmFsdWVzLCBjb25zdCBJbnRTaXplJiBib3hT
aXplLCBjb25zdCBBbmltYXRpb24qIGFuaW1hdGlvbiwgaW50IGFuaW1hdGlvbklkLCBpbnQgZ3Jv
dXBJZCwgZG91YmxlIHRpbWVPZmZzZXQpCitib29sIExheWVyQ2hyb21pdW06OmFkZEFuaW1hdGlv
bihQYXNzT3duUHRyPENDQWN0aXZlQW5pbWF0aW9uPiBhbmltYXRpb24pCiB7CiAgICAgaWYgKCFt
X2xheWVyVHJlZUhvc3QgfHwgIW1fbGF5ZXJUcmVlSG9zdC0+c2V0dGluZ3MoKS50aHJlYWRlZEFu
aW1hdGlvbkVuYWJsZWQpCiAgICAgICAgIHJldHVybiBmYWxzZTsKIAotICAgIGJvb2wgYWRkZWRB
bmltYXRpb24gPSBtX2xheWVyQW5pbWF0aW9uQ29udHJvbGxlci0+YWRkQW5pbWF0aW9uKHZhbHVl
cywgYm94U2l6ZSwgYW5pbWF0aW9uLCBhbmltYXRpb25JZCwgZ3JvdXBJZCwgdGltZU9mZnNldCk7
Ci0gICAgaWYgKGFkZGVkQW5pbWF0aW9uKSB7Ci0gICAgICAgIG1fbGF5ZXJUcmVlSG9zdC0+ZGlk
QWRkQW5pbWF0aW9uKCk7Ci0gICAgICAgIHNldE5lZWRzQ29tbWl0KCk7Ci0gICAgfQotICAgIHJl
dHVybiBhZGRlZEFuaW1hdGlvbjsKKyAgICBtX2xheWVyQW5pbWF0aW9uQ29udHJvbGxlci0+YWRk
QW5pbWF0aW9uKGFuaW1hdGlvbik7CisgICAgbV9sYXllclRyZWVIb3N0LT5kaWRBZGRBbmltYXRp
b24oKTsKKyAgICBzZXROZWVkc0NvbW1pdCgpOworICAgIHJldHVybiB0cnVlOwogfQogCiB2b2lk
IExheWVyQ2hyb21pdW06OnBhdXNlQW5pbWF0aW9uKGludCBhbmltYXRpb25JZCwgZG91YmxlIHRp
bWVPZmZzZXQpCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9j
aHJvbWl1bS9MYXllckNocm9taXVtLmggYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGlj
cy9jaHJvbWl1bS9MYXllckNocm9taXVtLmgKaW5kZXggOWJlMDI3OWUyYWViY2Q3Y2RjN2M2OGJk
MDI1ZWJlMDg0MWMxNzVkMy4uOTdhMjM4NGFlMzkwMTAzNDE2ZWZkMjM2OGJmN2QyOGE5ZDYyYTM2
YSAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvY2hyb21pdW0v
TGF5ZXJDaHJvbWl1bS5oCisrKyBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2No
cm9taXVtL0xheWVyQ2hyb21pdW0uaApAQCAtNTcsNiArNTcsNyBAQAogCiBuYW1lc3BhY2UgV2Vi
Q29yZSB7CiAKK2NsYXNzIENDQWN0aXZlQW5pbWF0aW9uOwogc3RydWN0IENDQW5pbWF0aW9uRXZl
bnQ7CiBjbGFzcyBDQ0xheWVyQW5pbWF0aW9uRGVsZWdhdGU7CiBjbGFzcyBDQ0xheWVySW1wbDsK
QEAgLTIzNCw3ICsyMzUsNyBAQCBwdWJsaWM6CiAgICAgdm9pZCBzZXRBbHdheXNSZXNlcnZlVGV4
dHVyZXMoYm9vbCBhbHdheXNSZXNlcnZlVGV4dHVyZXMpIHsgbV9hbHdheXNSZXNlcnZlVGV4dHVy
ZXMgPSBhbHdheXNSZXNlcnZlVGV4dHVyZXM7IH0KICAgICBib29sIGFsd2F5c1Jlc2VydmVUZXh0
dXJlcygpIGNvbnN0IHsgcmV0dXJuIG1fYWx3YXlzUmVzZXJ2ZVRleHR1cmVzOyB9CiAKLSAgICBi
b29sIGFkZEFuaW1hdGlvbihjb25zdCBLZXlmcmFtZVZhbHVlTGlzdCYsIGNvbnN0IEludFNpemUm
IGJveFNpemUsIGNvbnN0IEFuaW1hdGlvbiosIGludCBhbmltYXRpb25JZCwgaW50IGdyb3VwSWQs
IGRvdWJsZSB0aW1lT2Zmc2V0KTsKKyAgICBib29sIGFkZEFuaW1hdGlvbihQYXNzT3duUHRyPEND
QWN0aXZlQW5pbWF0aW9uPik7CiAgICAgdm9pZCBwYXVzZUFuaW1hdGlvbihpbnQgYW5pbWF0aW9u
SWQsIGRvdWJsZSB0aW1lT2Zmc2V0KTsKICAgICB2b2lkIHJlbW92ZUFuaW1hdGlvbihpbnQgYW5p
bWF0aW9uSWQpOwogCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGlj
cy9jaHJvbWl1bS9MaW5rSGlnaGxpZ2h0LmNwcCBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dy
YXBoaWNzL2Nocm9taXVtL0xpbmtIaWdobGlnaHQuY3BwCmluZGV4IDUzNTM2YjMyY2UwYWQ3MDcy
NjEzMjU0MzJhMGExNTE1YTE2ZTA0ODcuLjhlZDE3OWRkODExZWU3NjBkZWZkZDE5ZTVmOTEwMmQ1
MzI3NmUyYTYgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2No
cm9taXVtL0xpbmtIaWdobGlnaHQuY3BwCisrKyBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dy
YXBoaWNzL2Nocm9taXVtL0xpbmtIaWdobGlnaHQuY3BwCkBAIC03NCw3ICs3NCw3IEBAIExpbmtI
aWdobGlnaHQ6OkxpbmtIaWdobGlnaHQoR3JhcGhpY3NMYXllckNocm9taXVtKiBwYXJlbnQsIGNv
bnN0IFBhdGgmIHBhdGgsIGluCiAgICAgLy8gYW5pbWF0aW9uSWQgPSAxIGlzIHJlc2VydmVkIGZv
ciB1cy4KICAgICBPd25QdHI8Q0NBY3RpdmVBbmltYXRpb24+IGFuaW1hdGlvbihDQ0FjdGl2ZUFu
aW1hdGlvbjo6Y3JlYXRlKGN1cnZlLnJlbGVhc2UoKSwgYW5pbWF0aW9uSWQsIGdyb3VwSWQsIEND
QWN0aXZlQW5pbWF0aW9uOjpPcGFjaXR5KSk7CiAgICAgYW5pbWF0aW9uLT5zZXROZWVkc1N5bmNo
cm9uaXplZFN0YXJ0VGltZSh0cnVlKTsKLSAgICBtX2NvbnRlbnRMYXllci0+bGF5ZXJBbmltYXRp
b25Db250cm9sbGVyKCktPmFkZChhbmltYXRpb24ucmVsZWFzZSgpKTsKKyAgICBtX2NvbnRlbnRM
YXllci0+bGF5ZXJBbmltYXRpb25Db250cm9sbGVyKCktPmFkZEFuaW1hdGlvbihhbmltYXRpb24u
cmVsZWFzZSgpKTsKIH0KIAogTGlua0hpZ2hsaWdodDo6fkxpbmtIaWdobGlnaHQoKQpkaWZmIC0t
Z2l0IGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvY2hyb21pdW0vY2MvQ0NBbmlt
YXRpb25DdXJ2ZS5oIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvY2hyb21pdW0v
Y2MvQ0NBbmltYXRpb25DdXJ2ZS5oCmluZGV4IDdmNTA2YTcwNmYyYTQzYWU2ZDM4YTVhZjYzYmQ3
NWNmOGNiM2U3ZDUuLjM5OWUwNjZiZDIwNjJiN2ExYWYyMWQ2NmU2M2U4NGZjMWZhNmM5YjkgMTAw
NjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2Nocm9taXVtL2NjL0ND
QW5pbWF0aW9uQ3VydmUuaAorKysgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9j
aHJvbWl1bS9jYy9DQ0FuaW1hdGlvbkN1cnZlLmgKQEAgLTY1LDcgKzY1LDcgQEAgY2xhc3MgQ0NU
cmFuc2Zvcm1BbmltYXRpb25DdXJ2ZSA6IHB1YmxpYyBDQ0FuaW1hdGlvbkN1cnZlIHsKIHB1Ymxp
YzoKICAgICB2aXJ0dWFsIH5DQ1RyYW5zZm9ybUFuaW1hdGlvbkN1cnZlKCkgeyB9CiAKLSAgICB2
aXJ0dWFsIFRyYW5zZm9ybWF0aW9uTWF0cml4IGdldFZhbHVlKGRvdWJsZSB0LCBjb25zdCBJbnRT
aXplJiBsYXllclNpemUpIGNvbnN0ID0gMDsKKyAgICB2aXJ0dWFsIFRyYW5zZm9ybWF0aW9uTWF0
cml4IGdldFZhbHVlKGRvdWJsZSB0KSBjb25zdCA9IDA7CiAKICAgICAvLyBQYXJ0aWFsIENDQW5p
bWF0aW9uIGltcGxlbWVudGF0aW9uLgogICAgIHZpcnR1YWwgVHlwZSB0eXBlKCkgY29uc3QgT1ZF
UlJJREUgeyByZXR1cm4gVHJhbnNmb3JtOyB9CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9w
bGF0Zm9ybS9ncmFwaGljcy9jaHJvbWl1bS9jYy9DQ0tleWZyYW1lZEFuaW1hdGlvbkN1cnZlLmNw
cCBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2Nocm9taXVtL2NjL0NDS2V5ZnJh
bWVkQW5pbWF0aW9uQ3VydmUuY3BwCmluZGV4IGFlNDFmZTA2OTViMzBkNmEyOTQ3NzU1MGVmNmYx
OTliMTMxNGNmZDkuLmVmNDdhOTVkMjNjN2Q4NGI2ZjhiMmIyODAxOGU5ZDkyOWE5YWY3NDcgMTAw
NjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2Nocm9taXVtL2NjL0ND
S2V5ZnJhbWVkQW5pbWF0aW9uQ3VydmUuY3BwCisrKyBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3Jt
L2dyYXBoaWNzL2Nocm9taXVtL2NjL0NDS2V5ZnJhbWVkQW5pbWF0aW9uQ3VydmUuY3BwCkBAIC0y
NiwxNSArMjYsNiBAQAogCiAjaW5jbHVkZSAiY2MvQ0NLZXlmcmFtZWRBbmltYXRpb25DdXJ2ZS5o
IgogCi0jaW5jbHVkZSAiSWRlbnRpdHlUcmFuc2Zvcm1PcGVyYXRpb24uaCIKLSNpbmNsdWRlICJN
YXRyaXgzRFRyYW5zZm9ybU9wZXJhdGlvbi5oIgotI2luY2x1ZGUgIk1hdHJpeFRyYW5zZm9ybU9w
ZXJhdGlvbi5oIgotI2luY2x1ZGUgIlBlcnNwZWN0aXZlVHJhbnNmb3JtT3BlcmF0aW9uLmgiCi0j
aW5jbHVkZSAiUm90YXRlVHJhbnNmb3JtT3BlcmF0aW9uLmgiCi0jaW5jbHVkZSAiU2NhbGVUcmFu
c2Zvcm1PcGVyYXRpb24uaCIKLSNpbmNsdWRlICJTa2V3VHJhbnNmb3JtT3BlcmF0aW9uLmgiCi0j
aW5jbHVkZSAiVHJhbnNsYXRlVHJhbnNmb3JtT3BlcmF0aW9uLmgiCi0KICNpbmNsdWRlIDx3dGYv
T3duUHRyLmg+CiAKIG5hbWVzcGFjZSBXZWJDb3JlIHsKQEAgLTExNCwxMiArMTA1LDEyIEBAIFBh
c3NPd25QdHI8Q0NGbG9hdEtleWZyYW1lPiBDQ0Zsb2F0S2V5ZnJhbWU6OmNsb25lKCkgY29uc3QK
ICAgICByZXR1cm4gQ0NGbG9hdEtleWZyYW1lOjpjcmVhdGUodGltZSgpLCB2YWx1ZSgpLCB0aW1p
bmdGdW5jdGlvbigpID8gY2xvbmVUaW1pbmdGdW5jdGlvbih0aW1pbmdGdW5jdGlvbigpKSA6IG51
bGxwdHIpOwogfQogCi1QYXNzT3duUHRyPENDVHJhbnNmb3JtS2V5ZnJhbWU+IENDVHJhbnNmb3Jt
S2V5ZnJhbWU6OmNyZWF0ZShkb3VibGUgdGltZSwgY29uc3QgVHJhbnNmb3JtT3BlcmF0aW9ucyYg
dmFsdWUsIFBhc3NPd25QdHI8Q0NUaW1pbmdGdW5jdGlvbj4gdGltaW5nRnVuY3Rpb24pCitQYXNz
T3duUHRyPENDVHJhbnNmb3JtS2V5ZnJhbWU+IENDVHJhbnNmb3JtS2V5ZnJhbWU6OmNyZWF0ZShk
b3VibGUgdGltZSwgY29uc3QgV2ViS2l0OjpXZWJUcmFuc2Zvcm1PcGVyYXRpb25zJiB2YWx1ZSwg
UGFzc093blB0cjxDQ1RpbWluZ0Z1bmN0aW9uPiB0aW1pbmdGdW5jdGlvbikKIHsKICAgICByZXR1
cm4gYWRvcHRQdHIobmV3IENDVHJhbnNmb3JtS2V5ZnJhbWUodGltZSwgdmFsdWUsIHRpbWluZ0Z1
bmN0aW9uKSk7CiB9CiAKLUNDVHJhbnNmb3JtS2V5ZnJhbWU6OkNDVHJhbnNmb3JtS2V5ZnJhbWUo
ZG91YmxlIHRpbWUsIGNvbnN0IFRyYW5zZm9ybU9wZXJhdGlvbnMmIHZhbHVlLCBQYXNzT3duUHRy
PENDVGltaW5nRnVuY3Rpb24+IHRpbWluZ0Z1bmN0aW9uKQorQ0NUcmFuc2Zvcm1LZXlmcmFtZTo6
Q0NUcmFuc2Zvcm1LZXlmcmFtZShkb3VibGUgdGltZSwgY29uc3QgV2ViS2l0OjpXZWJUcmFuc2Zv
cm1PcGVyYXRpb25zJiB2YWx1ZSwgUGFzc093blB0cjxDQ1RpbWluZ0Z1bmN0aW9uPiB0aW1pbmdG
dW5jdGlvbikKICAgICA6IENDS2V5ZnJhbWUodGltZSwgdGltaW5nRnVuY3Rpb24pCiAgICAgLCBt
X3ZhbHVlKHZhbHVlKQogewpAQCAtMTI5LDc4ICsxMjAsMTQgQEAgQ0NUcmFuc2Zvcm1LZXlmcmFt
ZTo6fkNDVHJhbnNmb3JtS2V5ZnJhbWUoKQogewogfQogCi1jb25zdCBUcmFuc2Zvcm1PcGVyYXRp
b25zJiBDQ1RyYW5zZm9ybUtleWZyYW1lOjp2YWx1ZSgpIGNvbnN0Citjb25zdCBXZWJLaXQ6Oldl
YlRyYW5zZm9ybU9wZXJhdGlvbnMmIENDVHJhbnNmb3JtS2V5ZnJhbWU6OnZhbHVlKCkgY29uc3QK
IHsKICAgICByZXR1cm4gbV92YWx1ZTsKIH0KIAogUGFzc093blB0cjxDQ1RyYW5zZm9ybUtleWZy
YW1lPiBDQ1RyYW5zZm9ybUtleWZyYW1lOjpjbG9uZSgpIGNvbnN0CiB7Ci0gICAgLy8gV2UgbmVl
ZCB0byBkbyBhIGRlZXAgY29weSB0aGUgbV92YWx1ZSBtYXkgY29udGFpbiByZWYgcG9pbnRlcnMg
dG8gVHJhbnNmb3JtT3BlcmF0aW9uIG9iamVjdHMuCi0gICAgVHJhbnNmb3JtT3BlcmF0aW9ucyBv
cGVyYXRpb25zOwotICAgIGZvciAoc2l6ZV90IGogPSAwOyBqIDwgbV92YWx1ZS5zaXplKCk7ICsr
aikgewotICAgICAgICBUcmFuc2Zvcm1PcGVyYXRpb246Ok9wZXJhdGlvblR5cGUgb3BlcmF0aW9u
VHlwZSA9IG1fdmFsdWUub3BlcmF0aW9ucygpW2pdLT5nZXRPcGVyYXRpb25UeXBlKCk7Ci0gICAg
ICAgIHN3aXRjaCAob3BlcmF0aW9uVHlwZSkgewotICAgICAgICBjYXNlIFRyYW5zZm9ybU9wZXJh
dGlvbjo6U0NBTEVfWDoKLSAgICAgICAgY2FzZSBUcmFuc2Zvcm1PcGVyYXRpb246OlNDQUxFX1k6
Ci0gICAgICAgIGNhc2UgVHJhbnNmb3JtT3BlcmF0aW9uOjpTQ0FMRV9aOgotICAgICAgICBjYXNl
IFRyYW5zZm9ybU9wZXJhdGlvbjo6U0NBTEVfM0Q6Ci0gICAgICAgIGNhc2UgVHJhbnNmb3JtT3Bl
cmF0aW9uOjpTQ0FMRTogewotICAgICAgICAgICAgU2NhbGVUcmFuc2Zvcm1PcGVyYXRpb24qIHRy
YW5zZm9ybSA9IHN0YXRpY19jYXN0PFNjYWxlVHJhbnNmb3JtT3BlcmF0aW9uKj4obV92YWx1ZS5v
cGVyYXRpb25zKClbal0uZ2V0KCkpOwotICAgICAgICAgICAgb3BlcmF0aW9ucy5vcGVyYXRpb25z
KCkuYXBwZW5kKFNjYWxlVHJhbnNmb3JtT3BlcmF0aW9uOjpjcmVhdGUodHJhbnNmb3JtLT54KCks
IHRyYW5zZm9ybS0+eSgpLCB0cmFuc2Zvcm0tPnooKSwgb3BlcmF0aW9uVHlwZSkpOwotICAgICAg
ICAgICAgYnJlYWs7Ci0gICAgICAgIH0KLSAgICAgICAgY2FzZSBUcmFuc2Zvcm1PcGVyYXRpb246
OlRSQU5TTEFURV9YOgotICAgICAgICBjYXNlIFRyYW5zZm9ybU9wZXJhdGlvbjo6VFJBTlNMQVRF
X1k6Ci0gICAgICAgIGNhc2UgVHJhbnNmb3JtT3BlcmF0aW9uOjpUUkFOU0xBVEVfWjoKLSAgICAg
ICAgY2FzZSBUcmFuc2Zvcm1PcGVyYXRpb246OlRSQU5TTEFURV8zRDoKLSAgICAgICAgY2FzZSBU
cmFuc2Zvcm1PcGVyYXRpb246OlRSQU5TTEFURTogewotICAgICAgICAgICAgVHJhbnNsYXRlVHJh
bnNmb3JtT3BlcmF0aW9uKiB0cmFuc2Zvcm0gPSBzdGF0aWNfY2FzdDxUcmFuc2xhdGVUcmFuc2Zv
cm1PcGVyYXRpb24qPihtX3ZhbHVlLm9wZXJhdGlvbnMoKVtqXS5nZXQoKSk7Ci0gICAgICAgICAg
ICBvcGVyYXRpb25zLm9wZXJhdGlvbnMoKS5hcHBlbmQoVHJhbnNsYXRlVHJhbnNmb3JtT3BlcmF0
aW9uOjpjcmVhdGUodHJhbnNmb3JtLT54KCksIHRyYW5zZm9ybS0+eSgpLCB0cmFuc2Zvcm0tPnoo
KSwgb3BlcmF0aW9uVHlwZSkpOwotICAgICAgICAgICAgYnJlYWs7Ci0gICAgICAgIH0KLSAgICAg
ICAgY2FzZSBUcmFuc2Zvcm1PcGVyYXRpb246OlJPVEFURV9YOgotICAgICAgICBjYXNlIFRyYW5z
Zm9ybU9wZXJhdGlvbjo6Uk9UQVRFX1k6Ci0gICAgICAgIGNhc2UgVHJhbnNmb3JtT3BlcmF0aW9u
OjpST1RBVEVfM0Q6Ci0gICAgICAgIGNhc2UgVHJhbnNmb3JtT3BlcmF0aW9uOjpST1RBVEU6IHsK
LSAgICAgICAgICAgIFJvdGF0ZVRyYW5zZm9ybU9wZXJhdGlvbiogdHJhbnNmb3JtID0gc3RhdGlj
X2Nhc3Q8Um90YXRlVHJhbnNmb3JtT3BlcmF0aW9uKj4obV92YWx1ZS5vcGVyYXRpb25zKClbal0u
Z2V0KCkpOwotICAgICAgICAgICAgb3BlcmF0aW9ucy5vcGVyYXRpb25zKCkuYXBwZW5kKFJvdGF0
ZVRyYW5zZm9ybU9wZXJhdGlvbjo6Y3JlYXRlKHRyYW5zZm9ybS0+eCgpLCB0cmFuc2Zvcm0tPnko
KSwgdHJhbnNmb3JtLT56KCksIHRyYW5zZm9ybS0+YW5nbGUoKSwgb3BlcmF0aW9uVHlwZSkpOwot
ICAgICAgICAgICAgYnJlYWs7Ci0gICAgICAgIH0KLSAgICAgICAgY2FzZSBUcmFuc2Zvcm1PcGVy
YXRpb246OlNLRVdfWDoKLSAgICAgICAgY2FzZSBUcmFuc2Zvcm1PcGVyYXRpb246OlNLRVdfWToK
LSAgICAgICAgY2FzZSBUcmFuc2Zvcm1PcGVyYXRpb246OlNLRVc6IHsKLSAgICAgICAgICAgIFNr
ZXdUcmFuc2Zvcm1PcGVyYXRpb24qIHRyYW5zZm9ybSA9IHN0YXRpY19jYXN0PFNrZXdUcmFuc2Zv
cm1PcGVyYXRpb24qPihtX3ZhbHVlLm9wZXJhdGlvbnMoKVtqXS5nZXQoKSk7Ci0gICAgICAgICAg
ICBvcGVyYXRpb25zLm9wZXJhdGlvbnMoKS5hcHBlbmQoU2tld1RyYW5zZm9ybU9wZXJhdGlvbjo6
Y3JlYXRlKHRyYW5zZm9ybS0+YW5nbGVYKCksIHRyYW5zZm9ybS0+YW5nbGVZKCksIG9wZXJhdGlv
blR5cGUpKTsKLSAgICAgICAgICAgIGJyZWFrOwotICAgICAgICB9Ci0gICAgICAgIGNhc2UgVHJh
bnNmb3JtT3BlcmF0aW9uOjpNQVRSSVg6IHsKLSAgICAgICAgICAgIE1hdHJpeFRyYW5zZm9ybU9w
ZXJhdGlvbiogdHJhbnNmb3JtID0gc3RhdGljX2Nhc3Q8TWF0cml4VHJhbnNmb3JtT3BlcmF0aW9u
Kj4obV92YWx1ZS5vcGVyYXRpb25zKClbal0uZ2V0KCkpOwotICAgICAgICAgICAgVHJhbnNmb3Jt
YXRpb25NYXRyaXggbSA9IHRyYW5zZm9ybS0+bWF0cml4KCk7Ci0gICAgICAgICAgICBvcGVyYXRp
b25zLm9wZXJhdGlvbnMoKS5hcHBlbmQoTWF0cml4VHJhbnNmb3JtT3BlcmF0aW9uOjpjcmVhdGUo
bS5hKCksIG0uYigpLCBtLmMoKSwgbS5kKCksIG0uZSgpLCBtLmYoKSkpOwotICAgICAgICAgICAg
YnJlYWs7Ci0gICAgICAgIH0KLSAgICAgICAgY2FzZSBUcmFuc2Zvcm1PcGVyYXRpb246Ok1BVFJJ
WF8zRDogewotICAgICAgICAgICAgTWF0cml4M0RUcmFuc2Zvcm1PcGVyYXRpb24qIHRyYW5zZm9y
bSA9IHN0YXRpY19jYXN0PE1hdHJpeDNEVHJhbnNmb3JtT3BlcmF0aW9uKj4obV92YWx1ZS5vcGVy
YXRpb25zKClbal0uZ2V0KCkpOwotICAgICAgICAgICAgb3BlcmF0aW9ucy5vcGVyYXRpb25zKCku
YXBwZW5kKE1hdHJpeDNEVHJhbnNmb3JtT3BlcmF0aW9uOjpjcmVhdGUodHJhbnNmb3JtLT5tYXRy
aXgoKSkpOwotICAgICAgICAgICAgYnJlYWs7Ci0gICAgICAgIH0KLSAgICAgICAgY2FzZSBUcmFu
c2Zvcm1PcGVyYXRpb246OlBFUlNQRUNUSVZFOiB7Ci0gICAgICAgICAgICBQZXJzcGVjdGl2ZVRy
YW5zZm9ybU9wZXJhdGlvbiogdHJhbnNmb3JtID0gc3RhdGljX2Nhc3Q8UGVyc3BlY3RpdmVUcmFu
c2Zvcm1PcGVyYXRpb24qPihtX3ZhbHVlLm9wZXJhdGlvbnMoKVtqXS5nZXQoKSk7Ci0gICAgICAg
ICAgICBvcGVyYXRpb25zLm9wZXJhdGlvbnMoKS5hcHBlbmQoUGVyc3BlY3RpdmVUcmFuc2Zvcm1P
cGVyYXRpb246OmNyZWF0ZSh0cmFuc2Zvcm0tPnBlcnNwZWN0aXZlKCkpKTsKLSAgICAgICAgICAg
IGJyZWFrOwotICAgICAgICB9Ci0gICAgICAgIGNhc2UgVHJhbnNmb3JtT3BlcmF0aW9uOjpJREVO
VElUWTogewotICAgICAgICAgICAgb3BlcmF0aW9ucy5vcGVyYXRpb25zKCkuYXBwZW5kKElkZW50
aXR5VHJhbnNmb3JtT3BlcmF0aW9uOjpjcmVhdGUoKSk7Ci0gICAgICAgICAgICBicmVhazsKLSAg
ICAgICAgfQotICAgICAgICBjYXNlIFRyYW5zZm9ybU9wZXJhdGlvbjo6Tk9ORToKLSAgICAgICAg
ICAgIC8vIERvIG5vdGhpbmcuCi0gICAgICAgICAgICBicmVhazsKLSAgICAgICAgfSAvLyBzd2l0
Y2gKLSAgICB9IC8vIGZvciBlYWNoIG9wZXJhdGlvbgotCi0gICAgcmV0dXJuIENDVHJhbnNmb3Jt
S2V5ZnJhbWU6OmNyZWF0ZSh0aW1lKCksIG9wZXJhdGlvbnMsIHRpbWluZ0Z1bmN0aW9uKCkgPyBj
bG9uZVRpbWluZ0Z1bmN0aW9uKHRpbWluZ0Z1bmN0aW9uKCkpIDogbnVsbHB0cik7CisgICAgcmV0
dXJuIENDVHJhbnNmb3JtS2V5ZnJhbWU6OmNyZWF0ZSh0aW1lKCksIHZhbHVlKCksIHRpbWluZ0Z1
bmN0aW9uKCkgPyBjbG9uZVRpbWluZ0Z1bmN0aW9uKHRpbWluZ0Z1bmN0aW9uKCkpIDogbnVsbHB0
cik7CiB9CiAKIFBhc3NPd25QdHI8Q0NLZXlmcmFtZWRGbG9hdEFuaW1hdGlvbkN1cnZlPiBDQ0tl
eWZyYW1lZEZsb2F0QW5pbWF0aW9uQ3VydmU6OmNyZWF0ZSgpCkBAIC0yODcsMTkgKzIxNCwxMyBA
QCBQYXNzT3duUHRyPENDQW5pbWF0aW9uQ3VydmU+IENDS2V5ZnJhbWVkVHJhbnNmb3JtQW5pbWF0
aW9uQ3VydmU6OmNsb25lKCkgY29uc3QKICAgICByZXR1cm4gdG9SZXR1cm4ucmVsZWFzZSgpOwog
fQogCi1UcmFuc2Zvcm1hdGlvbk1hdHJpeCBDQ0tleWZyYW1lZFRyYW5zZm9ybUFuaW1hdGlvbkN1
cnZlOjpnZXRWYWx1ZShkb3VibGUgdCwgY29uc3QgSW50U2l6ZSYgbGF5ZXJTaXplKSBjb25zdAor
VHJhbnNmb3JtYXRpb25NYXRyaXggQ0NLZXlmcmFtZWRUcmFuc2Zvcm1BbmltYXRpb25DdXJ2ZTo6
Z2V0VmFsdWUoZG91YmxlIHQpIGNvbnN0CiB7Ci0gICAgVHJhbnNmb3JtYXRpb25NYXRyaXggdHJh
bnNmb3JtTWF0cml4OwotCi0gICAgaWYgKHQgPD0gbV9rZXlmcmFtZXMuZmlyc3QoKS0+dGltZSgp
KSB7Ci0gICAgICAgIG1fa2V5ZnJhbWVzLmZpcnN0KCktPnZhbHVlKCkuYXBwbHkobGF5ZXJTaXpl
LCB0cmFuc2Zvcm1NYXRyaXgpOwotICAgICAgICByZXR1cm4gdHJhbnNmb3JtTWF0cml4OwotICAg
IH0KKyAgICBpZiAodCA8PSBtX2tleWZyYW1lcy5maXJzdCgpLT50aW1lKCkpCisgICAgICAgIHJl
dHVybiBtX2tleWZyYW1lcy5maXJzdCgpLT52YWx1ZSgpLmFwcGx5KCkudG9XZWJDb3JlVHJhbnNm
b3JtKCk7CiAKLSAgICBpZiAodCA+PSBtX2tleWZyYW1lcy5sYXN0KCktPnRpbWUoKSkgewotICAg
ICAgICBtX2tleWZyYW1lcy5sYXN0KCktPnZhbHVlKCkuYXBwbHkobGF5ZXJTaXplLCB0cmFuc2Zv
cm1NYXRyaXgpOwotICAgICAgICByZXR1cm4gdHJhbnNmb3JtTWF0cml4OwotICAgIH0KKyAgICBp
ZiAodCA+PSBtX2tleWZyYW1lcy5sYXN0KCktPnRpbWUoKSkKKyAgICAgICAgcmV0dXJuIG1fa2V5
ZnJhbWVzLmxhc3QoKS0+dmFsdWUoKS5hcHBseSgpLnRvV2ViQ29yZVRyYW5zZm9ybSgpOwogCiAg
ICAgc2l6ZV90IGkgPSAwOwogICAgIGZvciAoOyBpIDwgbV9rZXlmcmFtZXMuc2l6ZSgpIC0gMTsg
KytpKSB7CkBAIC0zMTIsMTkgKzIzMyw3IEBAIFRyYW5zZm9ybWF0aW9uTWF0cml4IENDS2V5ZnJh
bWVkVHJhbnNmb3JtQW5pbWF0aW9uQ3VydmU6OmdldFZhbHVlKGRvdWJsZSB0LCBjb25zCiAgICAg
aWYgKG1fa2V5ZnJhbWVzW2ldLT50aW1pbmdGdW5jdGlvbigpKQogICAgICAgICBwcm9ncmVzcyA9
IG1fa2V5ZnJhbWVzW2ldLT50aW1pbmdGdW5jdGlvbigpLT5nZXRWYWx1ZShwcm9ncmVzcyk7CiAK
LSAgICBpZiAobV9rZXlmcmFtZXNbaV0tPnZhbHVlKCkub3BlcmF0aW9uc01hdGNoKG1fa2V5ZnJh
bWVzW2krMV0tPnZhbHVlKCkpKSB7Ci0gICAgICAgIGZvciAoc2l6ZV90IGogPSAwOyBqIDwgbV9r
ZXlmcmFtZXNbaSsxXS0+dmFsdWUoKS5zaXplKCk7ICsraikKLSAgICAgICAgICAgIG1fa2V5ZnJh
bWVzW2krMV0tPnZhbHVlKCkub3BlcmF0aW9ucygpW2pdLT5ibGVuZChtX2tleWZyYW1lc1tpXS0+
dmFsdWUoKS5hdChqKSwgcHJvZ3Jlc3MpLT5hcHBseSh0cmFuc2Zvcm1NYXRyaXgsIGxheWVyU2l6
ZSk7Ci0gICAgfSBlbHNlIHsKLSAgICAgICAgVHJhbnNmb3JtYXRpb25NYXRyaXggc291cmNlOwot
Ci0gICAgICAgIG1fa2V5ZnJhbWVzW2ldLT52YWx1ZSgpLmFwcGx5KGxheWVyU2l6ZSwgc291cmNl
KTsKLSAgICAgICAgbV9rZXlmcmFtZXNbaSsxXS0+dmFsdWUoKS5hcHBseShsYXllclNpemUsIHRy
YW5zZm9ybU1hdHJpeCk7Ci0KLSAgICAgICAgdHJhbnNmb3JtTWF0cml4LmJsZW5kKHNvdXJjZSwg
cHJvZ3Jlc3MpOwotICAgIH0KLQotICAgIHJldHVybiB0cmFuc2Zvcm1NYXRyaXg7CisgICAgcmV0
dXJuIG1fa2V5ZnJhbWVzW2krMV0tPnZhbHVlKCkuYmxlbmQobV9rZXlmcmFtZXNbaV0tPnZhbHVl
KCksIHByb2dyZXNzKS50b1dlYkNvcmVUcmFuc2Zvcm0oKTsKIH0KIAogfSAvLyBuYW1lc3BhY2Ug
V2ViQ29yZQpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvY2hy
b21pdW0vY2MvQ0NLZXlmcmFtZWRBbmltYXRpb25DdXJ2ZS5oIGIvU291cmNlL1dlYkNvcmUvcGxh
dGZvcm0vZ3JhcGhpY3MvY2hyb21pdW0vY2MvQ0NLZXlmcmFtZWRBbmltYXRpb25DdXJ2ZS5oCmlu
ZGV4IDhkMWYwZTA1NWY0Mjk3ZDQzNjM3Nzc5OGRjNDI1ZGE4ZDk0ZjUwMWYuLjE1ZjEzOWZhMGIx
YTExMjZjNGRkMjJiMTMwNTZiNDI1NDkwM2U5MTQgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3Jl
L3BsYXRmb3JtL2dyYXBoaWNzL2Nocm9taXVtL2NjL0NDS2V5ZnJhbWVkQW5pbWF0aW9uQ3VydmUu
aAorKysgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9jaHJvbWl1bS9jYy9DQ0tl
eWZyYW1lZEFuaW1hdGlvbkN1cnZlLmgKQEAgLTI1LDEwICsyNSwxMSBAQAogI2lmbmRlZiBDQ0tl
eWZyYW1lZEFuaW1hdGlvbkN1cnZlX2gKICNkZWZpbmUgQ0NLZXlmcmFtZWRBbmltYXRpb25DdXJ2
ZV9oCiAKLSNpbmNsdWRlICJUcmFuc2Zvcm1PcGVyYXRpb25zLmgiCiAjaW5jbHVkZSAiY2MvQ0NB
bmltYXRpb25DdXJ2ZS5oIgogI2luY2x1ZGUgImNjL0NDVGltaW5nRnVuY3Rpb24uaCIKIAorI2lu
Y2x1ZGUgPHB1YmxpYy9XZWJUcmFuc2Zvcm1PcGVyYXRpb25zLmg+CisKICNpbmNsdWRlIDx3dGYv
T3duUHRyLmg+CiAjaW5jbHVkZSA8d3RmL1Bhc3NPd25QdHIuaD4KIApAQCAtNjUsMTcgKzY2LDE3
IEBAIHByaXZhdGU6CiAKIGNsYXNzIENDVHJhbnNmb3JtS2V5ZnJhbWUgOiBwdWJsaWMgQ0NLZXlm
cmFtZSB7CiBwdWJsaWM6Ci0gICAgc3RhdGljIFBhc3NPd25QdHI8Q0NUcmFuc2Zvcm1LZXlmcmFt
ZT4gY3JlYXRlKGRvdWJsZSB0aW1lLCBjb25zdCBUcmFuc2Zvcm1PcGVyYXRpb25zJiB2YWx1ZSwg
UGFzc093blB0cjxDQ1RpbWluZ0Z1bmN0aW9uPik7CisgICAgc3RhdGljIFBhc3NPd25QdHI8Q0NU
cmFuc2Zvcm1LZXlmcmFtZT4gY3JlYXRlKGRvdWJsZSB0aW1lLCBjb25zdCBXZWJLaXQ6OldlYlRy
YW5zZm9ybU9wZXJhdGlvbnMmIHZhbHVlLCBQYXNzT3duUHRyPENDVGltaW5nRnVuY3Rpb24+KTsK
ICAgICB2aXJ0dWFsIH5DQ1RyYW5zZm9ybUtleWZyYW1lKCk7CiAKLSAgICBjb25zdCBUcmFuc2Zv
cm1PcGVyYXRpb25zJiB2YWx1ZSgpIGNvbnN0OworICAgIGNvbnN0IFdlYktpdDo6V2ViVHJhbnNm
b3JtT3BlcmF0aW9ucyYgdmFsdWUoKSBjb25zdDsKIAogICAgIFBhc3NPd25QdHI8Q0NUcmFuc2Zv
cm1LZXlmcmFtZT4gY2xvbmUoKSBjb25zdDsKIAogcHJpdmF0ZToKLSAgICBDQ1RyYW5zZm9ybUtl
eWZyYW1lKGRvdWJsZSB0aW1lLCBjb25zdCBUcmFuc2Zvcm1PcGVyYXRpb25zJiB2YWx1ZSwgUGFz
c093blB0cjxDQ1RpbWluZ0Z1bmN0aW9uPik7CisgICAgQ0NUcmFuc2Zvcm1LZXlmcmFtZShkb3Vi
bGUgdGltZSwgY29uc3QgV2ViS2l0OjpXZWJUcmFuc2Zvcm1PcGVyYXRpb25zJiB2YWx1ZSwgUGFz
c093blB0cjxDQ1RpbWluZ0Z1bmN0aW9uPik7CiAKLSAgICBUcmFuc2Zvcm1PcGVyYXRpb25zIG1f
dmFsdWU7CisgICAgV2ViS2l0OjpXZWJUcmFuc2Zvcm1PcGVyYXRpb25zIG1fdmFsdWU7CiB9Owog
CiBjbGFzcyBDQ0tleWZyYW1lZEZsb2F0QW5pbWF0aW9uQ3VydmUgOiBwdWJsaWMgQ0NGbG9hdEFu
aW1hdGlvbkN1cnZlIHsKQEAgLTExNiw3ICsxMTcsNyBAQCBwdWJsaWM6CiAgICAgdmlydHVhbCBQ
YXNzT3duUHRyPENDQW5pbWF0aW9uQ3VydmU+IGNsb25lKCkgY29uc3QgT1ZFUlJJREU7CiAKICAg
ICAvLyBDQ1RyYW5zZm9ybUFuaW1hdGlvbkN1cnZlIGltcGxlbWVudGF0aW9uCi0gICAgdmlydHVh
bCBUcmFuc2Zvcm1hdGlvbk1hdHJpeCBnZXRWYWx1ZShkb3VibGUgdCwgY29uc3QgSW50U2l6ZSYp
IGNvbnN0IE9WRVJSSURFOworICAgIHZpcnR1YWwgVHJhbnNmb3JtYXRpb25NYXRyaXggZ2V0VmFs
dWUoZG91YmxlIHQpIGNvbnN0IE9WRVJSSURFOwogCiBwcml2YXRlOgogICAgIENDS2V5ZnJhbWVk
VHJhbnNmb3JtQW5pbWF0aW9uQ3VydmUoKTsKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3Bs
YXRmb3JtL2dyYXBoaWNzL2Nocm9taXVtL2NjL0NDTGF5ZXJBbmltYXRpb25Db250cm9sbGVyLmNw
cCBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2Nocm9taXVtL2NjL0NDTGF5ZXJB
bmltYXRpb25Db250cm9sbGVyLmNwcAppbmRleCAxNGZiNzhhNjVjMjU4MDI3NGVhZjY4OTAxZjUy
ZTRiZjc3YzU4YmJjLi4xNWI2MTA2YzVlOTk2ZTgyNGJjYzRhZDIxY2ZkZDkxZWZlNDQ0YjU4IDEw
MDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9jaHJvbWl1bS9jYy9D
Q0xheWVyQW5pbWF0aW9uQ29udHJvbGxlci5jcHAKKysrIGIvU291cmNlL1dlYkNvcmUvcGxhdGZv
cm0vZ3JhcGhpY3MvY2hyb21pdW0vY2MvQ0NMYXllckFuaW1hdGlvbkNvbnRyb2xsZXIuY3BwCkBA
IC0zNSw5NCArMzUsNiBAQAogCiBuYW1lc3BhY2UgV2ViQ29yZSB7CiAKLW5hbWVzcGFjZSB7Ci0K
LXRlbXBsYXRlIDxjbGFzcyBWYWx1ZSwgY2xhc3MgS2V5ZnJhbWUsIGNsYXNzIEN1cnZlPgotdm9p
ZCBhcHBlbmRLZXlmcmFtZShDdXJ2ZSYgY3VydmUsIGRvdWJsZSBrZXlUaW1lLCBjb25zdCBWYWx1
ZSogdmFsdWUsIFBhc3NPd25QdHI8Q0NUaW1pbmdGdW5jdGlvbj4gdGltaW5nRnVuY3Rpb24pCi17
Ci0gICAgY3VydmUuYWRkS2V5ZnJhbWUoS2V5ZnJhbWU6OmNyZWF0ZShrZXlUaW1lLCB2YWx1ZS0+
dmFsdWUoKSwgdGltaW5nRnVuY3Rpb24pKTsKLX0KLQotdGVtcGxhdGUgPD4KLXZvaWQgYXBwZW5k
S2V5ZnJhbWU8VHJhbnNmb3JtQW5pbWF0aW9uVmFsdWUsIENDVHJhbnNmb3JtS2V5ZnJhbWUsIEND
S2V5ZnJhbWVkVHJhbnNmb3JtQW5pbWF0aW9uQ3VydmU+KENDS2V5ZnJhbWVkVHJhbnNmb3JtQW5p
bWF0aW9uQ3VydmUmIGN1cnZlLCBkb3VibGUga2V5VGltZSwgY29uc3QgVHJhbnNmb3JtQW5pbWF0
aW9uVmFsdWUqIHZhbHVlLCBQYXNzT3duUHRyPENDVGltaW5nRnVuY3Rpb24+IHRpbWluZ0Z1bmN0
aW9uKQotewotICAgIGN1cnZlLmFkZEtleWZyYW1lKENDVHJhbnNmb3JtS2V5ZnJhbWU6OmNyZWF0
ZShrZXlUaW1lLCAqdmFsdWUtPnZhbHVlKCksIHRpbWluZ0Z1bmN0aW9uKSk7Ci19Ci0KLXRlbXBs
YXRlIDxjbGFzcyBWYWx1ZSwgY2xhc3MgS2V5ZnJhbWUsIGNsYXNzIEN1cnZlPgotUGFzc093blB0
cjxDQ0FjdGl2ZUFuaW1hdGlvbj4gY3JlYXRlQWN0aXZlQW5pbWF0aW9uKGNvbnN0IEtleWZyYW1l
VmFsdWVMaXN0JiB2YWx1ZUxpc3QsIGNvbnN0IEFuaW1hdGlvbiogYW5pbWF0aW9uLCBzaXplX3Qg
YW5pbWF0aW9uSWQsIHNpemVfdCBncm91cElkLCBkb3VibGUgdGltZU9mZnNldCwgQ0NBY3RpdmVB
bmltYXRpb246OlRhcmdldFByb3BlcnR5IHRhcmdldFByb3BlcnR5KQotewotICAgIGJvb2wgYWx0
ZXJuYXRlID0gZmFsc2U7Ci0gICAgYm9vbCByZXZlcnNlID0gZmFsc2U7Ci0gICAgaWYgKGFuaW1h
dGlvbiAmJiBhbmltYXRpb24tPmlzRGlyZWN0aW9uU2V0KCkpIHsKLSAgICAgICAgQW5pbWF0aW9u
OjpBbmltYXRpb25EaXJlY3Rpb24gZGlyZWN0aW9uID0gYW5pbWF0aW9uLT5kaXJlY3Rpb24oKTsK
LSAgICAgICAgaWYgKGRpcmVjdGlvbiA9PSBBbmltYXRpb246OkFuaW1hdGlvbkRpcmVjdGlvbkFs
dGVybmF0ZSB8fCBkaXJlY3Rpb24gPT0gQW5pbWF0aW9uOjpBbmltYXRpb25EaXJlY3Rpb25BbHRl
cm5hdGVSZXZlcnNlKQotICAgICAgICAgICAgYWx0ZXJuYXRlID0gdHJ1ZTsKLSAgICAgICAgaWYg
KGRpcmVjdGlvbiA9PSBBbmltYXRpb246OkFuaW1hdGlvbkRpcmVjdGlvblJldmVyc2UgfHwgZGly
ZWN0aW9uID09IEFuaW1hdGlvbjo6QW5pbWF0aW9uRGlyZWN0aW9uQWx0ZXJuYXRlUmV2ZXJzZSkK
LSAgICAgICAgICAgIHJldmVyc2UgPSB0cnVlOwotICAgIH0KLQotICAgIE93blB0cjxDdXJ2ZT4g
Y3VydmUgPSBDdXJ2ZTo6Y3JlYXRlKCk7Ci0gICAgVmVjdG9yPEtleWZyYW1lPiBrZXlmcmFtZXM7
Ci0KLSAgICBmb3IgKHNpemVfdCBpID0gMDsgaSA8IHZhbHVlTGlzdC5zaXplKCk7IGkrKykgewot
ICAgICAgICBzaXplX3QgaW5kZXggPSByZXZlcnNlID8gdmFsdWVMaXN0LnNpemUoKSAtIGkgLSAx
IDogaTsKLQotICAgICAgICBjb25zdCBWYWx1ZSogb3JpZ2luYWxWYWx1ZSA9IHN0YXRpY19jYXN0
PGNvbnN0IFZhbHVlKj4odmFsdWVMaXN0LmF0KGluZGV4KSk7Ci0KLSAgICAgICAgT3duUHRyPEND
VGltaW5nRnVuY3Rpb24+IHRpbWluZ0Z1bmN0aW9uOwotICAgICAgICBjb25zdCBUaW1pbmdGdW5j
dGlvbiogb3JpZ2luYWxUaW1pbmdGdW5jdGlvbiA9IG9yaWdpbmFsVmFsdWUtPnRpbWluZ0Z1bmN0
aW9uKCk7Ci0KLSAgICAgICAgLy8gSWYgdGhlcmUgaGFzbid0IGJlZW4gYSB0aW1pbmcgZnVuY3Rp
b24gYXNzb2NpYXRlZCB3aXRoIHRoaXMga2V5ZnJhbWUsIHVzZSB0aGUKLSAgICAgICAgLy8gYW5p
bWF0aW9uJ3MgdGltaW5nIGZ1bmN0aW9uLCBpZiB3ZSBoYXZlIG9uZS4KLSAgICAgICAgaWYgKCFv
cmlnaW5hbFRpbWluZ0Z1bmN0aW9uICYmIGFuaW1hdGlvbi0+aXNUaW1pbmdGdW5jdGlvblNldCgp
KQotICAgICAgICAgICAgb3JpZ2luYWxUaW1pbmdGdW5jdGlvbiA9IGFuaW1hdGlvbi0+dGltaW5n
RnVuY3Rpb24oKS5nZXQoKTsKLQotICAgICAgICBpZiAob3JpZ2luYWxUaW1pbmdGdW5jdGlvbikg
ewotICAgICAgICAgICAgc3dpdGNoIChvcmlnaW5hbFRpbWluZ0Z1bmN0aW9uLT50eXBlKCkpIHsK
LSAgICAgICAgICAgIGNhc2UgVGltaW5nRnVuY3Rpb246OlN0ZXBzRnVuY3Rpb246Ci0gICAgICAg
ICAgICAgICAgLy8gRklYTUU6IGFkZCBzdXBwb3J0IGZvciBzdGVwcyB0aW1pbmcgZnVuY3Rpb24u
Ci0gICAgICAgICAgICAgICAgcmV0dXJuIG51bGxwdHI7Ci0gICAgICAgICAgICBjYXNlIFRpbWlu
Z0Z1bmN0aW9uOjpMaW5lYXJGdW5jdGlvbjoKLSAgICAgICAgICAgICAgICAvLyBEb24ndCBzZXQg
dGhlIHRpbWluZyBmdW5jdGlvbi4gS2V5ZnJhbWVzIGFyZSBpbnRlcnBvbGF0ZWQgbGluZWFybHkg
aWYgdGhlcmUgaXMgbm8gdGltaW5nIGZ1bmN0aW9uLgotICAgICAgICAgICAgICAgIGJyZWFrOwot
ICAgICAgICAgICAgY2FzZSBUaW1pbmdGdW5jdGlvbjo6Q3ViaWNCZXppZXJGdW5jdGlvbjoKLSAg
ICAgICAgICAgICAgICBjb25zdCBDdWJpY0JlemllclRpbWluZ0Z1bmN0aW9uKiBvcmlnaW5hbEJl
emllclRpbWluZ0Z1bmN0aW9uID0gc3RhdGljX2Nhc3Q8Y29uc3QgQ3ViaWNCZXppZXJUaW1pbmdG
dW5jdGlvbio+KG9yaWdpbmFsVGltaW5nRnVuY3Rpb24pOwotICAgICAgICAgICAgICAgIHRpbWlu
Z0Z1bmN0aW9uID0gQ0NDdWJpY0JlemllclRpbWluZ0Z1bmN0aW9uOjpjcmVhdGUob3JpZ2luYWxC
ZXppZXJUaW1pbmdGdW5jdGlvbi0+eDEoKSwgb3JpZ2luYWxCZXppZXJUaW1pbmdGdW5jdGlvbi0+
eTEoKSwgb3JpZ2luYWxCZXppZXJUaW1pbmdGdW5jdGlvbi0+eDIoKSwgb3JpZ2luYWxCZXppZXJU
aW1pbmdGdW5jdGlvbi0+eTIoKSk7Ci0gICAgICAgICAgICAgICAgYnJlYWs7Ci0gICAgICAgICAg
ICB9IC8vIHN3aXRjaAotICAgICAgICB9IGVsc2UKLSAgICAgICAgICAgIHRpbWluZ0Z1bmN0aW9u
ID0gQ0NFYXNlVGltaW5nRnVuY3Rpb246OmNyZWF0ZSgpOwotCi0gICAgICAgIGRvdWJsZSBkdXJh
dGlvbiA9IChhbmltYXRpb24gJiYgYW5pbWF0aW9uLT5pc0R1cmF0aW9uU2V0KCkpID8gYW5pbWF0
aW9uLT5kdXJhdGlvbigpIDogMTsKLSAgICAgICAgZG91YmxlIGtleVRpbWUgPSBvcmlnaW5hbFZh
bHVlLT5rZXlUaW1lKCkgKiBkdXJhdGlvbjsKLSAgICAgICAgaWYgKHJldmVyc2UpCi0gICAgICAg
ICAgICBrZXlUaW1lID0gZHVyYXRpb24gLSBrZXlUaW1lOwotICAgICAgICBhcHBlbmRLZXlmcmFt
ZTxWYWx1ZSwgS2V5ZnJhbWUsIEN1cnZlPigqY3VydmUsIGtleVRpbWUsIG9yaWdpbmFsVmFsdWUs
IHRpbWluZ0Z1bmN0aW9uLnJlbGVhc2UoKSk7Ci0gICAgfQotCi0gICAgT3duUHRyPENDQWN0aXZl
QW5pbWF0aW9uPiBhbmltID0gQ0NBY3RpdmVBbmltYXRpb246OmNyZWF0ZShjdXJ2ZS5yZWxlYXNl
KCksIGFuaW1hdGlvbklkLCBncm91cElkLCB0YXJnZXRQcm9wZXJ0eSk7Ci0KLSAgICBBU1NFUlQo
YW5pbS5nZXQoKSk7Ci0KLSAgICBpZiAoYW5pbS5nZXQoKSkgewotICAgICAgICBpbnQgaXRlcmF0
aW9ucyA9IChhbmltYXRpb24gJiYgYW5pbWF0aW9uLT5pc0l0ZXJhdGlvbkNvdW50U2V0KCkpID8g
YW5pbWF0aW9uLT5pdGVyYXRpb25Db3VudCgpIDogMTsKLSAgICAgICAgYW5pbS0+c2V0SXRlcmF0
aW9ucyhpdGVyYXRpb25zKTsKLSAgICAgICAgYW5pbS0+c2V0QWx0ZXJuYXRlc0RpcmVjdGlvbihh
bHRlcm5hdGUpOwotICAgIH0KLQotICAgIC8vIEluIG9yZGVyIHRvIGF2b2lkIHNrZXcsIHRoZSBt
YWluIHRocmVhZCBhbmltYXRpb24gY2Fubm90IHRpY2sgdW50aWwgaXQgaGFzIHJlY2VpdmVkIHRo
ZSBzdGFydCB0aW1lIG9mCi0gICAgLy8gdGhlIGNvcnJlc3BvbmRpbmcgaW1wbCB0aHJlYWQgYW5p
bWF0aW9uLgotICAgIGFuaW0tPnNldE5lZWRzU3luY2hyb25pemVkU3RhcnRUaW1lKHRydWUpOwot
Ci0gICAgLy8gSWYgdGltZU9mZnNldCA+IDAsIHRoZW4gdGhlIGFuaW1hdGlvbiBoYXMgc3RhcnRl
ZCBpbiB0aGUgcGFzdC4KLSAgICBhbmltLT5zZXRUaW1lT2Zmc2V0KHRpbWVPZmZzZXQpOwotCi0g
ICAgcmV0dXJuIGFuaW0ucmVsZWFzZSgpOwotfQotCi19IC8vIG5hbWVwYWNlCi0KIENDTGF5ZXJB
bmltYXRpb25Db250cm9sbGVyOjpDQ0xheWVyQW5pbWF0aW9uQ29udHJvbGxlcihDQ0xheWVyQW5p
bWF0aW9uQ29udHJvbGxlckNsaWVudCogY2xpZW50KQogICAgIDogbV9mb3JjZVN5bmMoZmFsc2Up
CiAgICAgLCBtX2NsaWVudChjbGllbnQpCkBAIC0xMzgsMzIgKzUwLDYgQEAgUGFzc093blB0cjxD
Q0xheWVyQW5pbWF0aW9uQ29udHJvbGxlcj4gQ0NMYXllckFuaW1hdGlvbkNvbnRyb2xsZXI6OmNy
ZWF0ZShDQ0xheWUKICAgICByZXR1cm4gYWRvcHRQdHIobmV3IENDTGF5ZXJBbmltYXRpb25Db250
cm9sbGVyKGNsaWVudCkpOwogfQogCi1ib29sIENDTGF5ZXJBbmltYXRpb25Db250cm9sbGVyOjph
ZGRBbmltYXRpb24oY29uc3QgS2V5ZnJhbWVWYWx1ZUxpc3QmIHZhbHVlTGlzdCwgY29uc3QgSW50
U2l6ZSYsIGNvbnN0IEFuaW1hdGlvbiogYW5pbWF0aW9uLCBpbnQgYW5pbWF0aW9uSWQsIGludCBn
cm91cElkLCBkb3VibGUgdGltZU9mZnNldCkKLXsKLSAgICBpZiAoIWFuaW1hdGlvbikKLSAgICAg
ICAgcmV0dXJuIGZhbHNlOwotCi0gICAgT3duUHRyPENDQWN0aXZlQW5pbWF0aW9uPiB0b0FkZDsK
LSAgICBpZiAodmFsdWVMaXN0LnByb3BlcnR5KCkgPT0gQW5pbWF0ZWRQcm9wZXJ0eVdlYmtpdFRy
YW5zZm9ybSkKLSAgICAgICAgdG9BZGQgPSBjcmVhdGVBY3RpdmVBbmltYXRpb248VHJhbnNmb3Jt
QW5pbWF0aW9uVmFsdWUsIENDVHJhbnNmb3JtS2V5ZnJhbWUsIENDS2V5ZnJhbWVkVHJhbnNmb3Jt
QW5pbWF0aW9uQ3VydmU+KHZhbHVlTGlzdCwgYW5pbWF0aW9uLCBhbmltYXRpb25JZCwgZ3JvdXBJ
ZCwgdGltZU9mZnNldCwgQ0NBY3RpdmVBbmltYXRpb246OlRyYW5zZm9ybSk7Ci0gICAgZWxzZSBp
ZiAodmFsdWVMaXN0LnByb3BlcnR5KCkgPT0gQW5pbWF0ZWRQcm9wZXJ0eU9wYWNpdHkpCi0gICAg
ICAgIHRvQWRkID0gY3JlYXRlQWN0aXZlQW5pbWF0aW9uPEZsb2F0QW5pbWF0aW9uVmFsdWUsIEND
RmxvYXRLZXlmcmFtZSwgQ0NLZXlmcmFtZWRGbG9hdEFuaW1hdGlvbkN1cnZlPih2YWx1ZUxpc3Qs
IGFuaW1hdGlvbiwgYW5pbWF0aW9uSWQsIGdyb3VwSWQsIHRpbWVPZmZzZXQsIENDQWN0aXZlQW5p
bWF0aW9uOjpPcGFjaXR5KTsKLQotICAgIGlmICh0b0FkZC5nZXQoKSkgewotICAgICAgICAvLyBS
ZW1vdmUgYW55IGV4aXN0aW5nIGFuaW1hdGlvbnMgd2l0aCB0aGUgc2FtZSBhbmltYXRpb24gaWQg
YW5kIHRhcmdldCBwcm9wZXJ0eS4KLSAgICAgICAgZm9yIChzaXplX3QgaSA9IDA7IGkgPCBtX2Fj
dGl2ZUFuaW1hdGlvbnMuc2l6ZSgpOykgewotICAgICAgICAgICAgaWYgKG1fYWN0aXZlQW5pbWF0
aW9uc1tpXS0+aWQoKSA9PSBhbmltYXRpb25JZCAmJiBtX2FjdGl2ZUFuaW1hdGlvbnNbaV0tPnRh
cmdldFByb3BlcnR5KCkgPT0gdG9BZGQtPnRhcmdldFByb3BlcnR5KCkpCi0gICAgICAgICAgICAg
ICAgbV9hY3RpdmVBbmltYXRpb25zLnJlbW92ZShpKTsKLSAgICAgICAgICAgIGVsc2UKLSAgICAg
ICAgICAgICAgICBpKys7Ci0gICAgICAgIH0KLSAgICAgICAgbV9hY3RpdmVBbmltYXRpb25zLmFw
cGVuZCh0b0FkZC5yZWxlYXNlKCkpOwotICAgICAgICByZXR1cm4gdHJ1ZTsKLSAgICB9Ci0KLSAg
ICByZXR1cm4gZmFsc2U7Ci19Ci0KIHZvaWQgQ0NMYXllckFuaW1hdGlvbkNvbnRyb2xsZXI6OnBh
dXNlQW5pbWF0aW9uKGludCBhbmltYXRpb25JZCwgZG91YmxlIHRpbWVPZmZzZXQpCiB7CiAgICAg
Zm9yIChzaXplX3QgaSA9IDA7IGkgPCBtX2FjdGl2ZUFuaW1hdGlvbnMuc2l6ZSgpOyArK2kpIHsK
QEAgLTE4Miw2ICs2OCwxNiBAQCB2b2lkIENDTGF5ZXJBbmltYXRpb25Db250cm9sbGVyOjpyZW1v
dmVBbmltYXRpb24oaW50IGFuaW1hdGlvbklkKQogICAgIH0KIH0KIAordm9pZCBDQ0xheWVyQW5p
bWF0aW9uQ29udHJvbGxlcjo6cmVtb3ZlQW5pbWF0aW9uKGludCBhbmltYXRpb25JZCwgQ0NBY3Rp
dmVBbmltYXRpb246OlRhcmdldFByb3BlcnR5IHRhcmdldFByb3BlcnR5KQoreworICAgIGZvciAo
c2l6ZV90IGkgPSAwOyBpIDwgbV9hY3RpdmVBbmltYXRpb25zLnNpemUoKTspIHsKKyAgICAgICAg
aWYgKG1fYWN0aXZlQW5pbWF0aW9uc1tpXS0+aWQoKSA9PSBhbmltYXRpb25JZCAmJiBtX2FjdGl2
ZUFuaW1hdGlvbnNbaV0tPnRhcmdldFByb3BlcnR5KCkgPT0gdGFyZ2V0UHJvcGVydHkpCisgICAg
ICAgICAgICBtX2FjdGl2ZUFuaW1hdGlvbnMucmVtb3ZlKGkpOworICAgICAgICBlbHNlCisgICAg
ICAgICAgICBpKys7CisgICAgfQorfQorCiAvLyBBY2NvcmRpbmcgdG8gcmVuZGVyIGxheWVyIGJh
Y2tpbmcsIHRoZXNlIGFyZSBmb3IgdGVzdGluZyBvbmx5Lgogdm9pZCBDQ0xheWVyQW5pbWF0aW9u
Q29udHJvbGxlcjo6c3VzcGVuZEFuaW1hdGlvbnMoZG91YmxlIG1vbm90b25pY1RpbWUpCiB7CkBA
IC0yMjUsNyArMTIxLDcgQEAgdm9pZCBDQ0xheWVyQW5pbWF0aW9uQ29udHJvbGxlcjo6YW5pbWF0
ZShkb3VibGUgbW9ub3RvbmljVGltZSwgQ0NBbmltYXRpb25FdmVudHMKICAgICBzdGFydEFuaW1h
dGlvbnNXYWl0aW5nRm9yVGFyZ2V0QXZhaWxhYmlsaXR5KG1vbm90b25pY1RpbWUsIGV2ZW50cyk7
CiB9CiAKLXZvaWQgQ0NMYXllckFuaW1hdGlvbkNvbnRyb2xsZXI6OmFkZChQYXNzT3duUHRyPEND
QWN0aXZlQW5pbWF0aW9uPiBhbmltYXRpb24pCit2b2lkIENDTGF5ZXJBbmltYXRpb25Db250cm9s
bGVyOjphZGRBbmltYXRpb24oUGFzc093blB0cjxDQ0FjdGl2ZUFuaW1hdGlvbj4gYW5pbWF0aW9u
KQogewogICAgIG1fYWN0aXZlQW5pbWF0aW9ucy5hcHBlbmQoYW5pbWF0aW9uKTsKIH0KQEAgLTIz
OCw2ICsxMzQsMTYgQEAgQ0NBY3RpdmVBbmltYXRpb24qIENDTGF5ZXJBbmltYXRpb25Db250cm9s
bGVyOjpnZXRBY3RpdmVBbmltYXRpb24oaW50IGdyb3VwSWQsIEMKICAgICByZXR1cm4gMDsKIH0K
IAorQ0NBY3RpdmVBbmltYXRpb24qIENDTGF5ZXJBbmltYXRpb25Db250cm9sbGVyOjpnZXRBY3Rp
dmVBbmltYXRpb24oQ0NBY3RpdmVBbmltYXRpb246OlRhcmdldFByb3BlcnR5IHRhcmdldFByb3Bl
cnR5KSBjb25zdAoreworICAgIGZvciAoc2l6ZV90IGkgPSAwOyBpIDwgbV9hY3RpdmVBbmltYXRp
b25zLnNpemUoKTsgKytpKSB7CisgICAgICAgIHNpemVfdCBpbmRleCA9IG1fYWN0aXZlQW5pbWF0
aW9ucy5zaXplKCkgLSBpIC0gMTsKKyAgICAgICAgaWYgKG1fYWN0aXZlQW5pbWF0aW9uc1tpbmRl
eF0tPnRhcmdldFByb3BlcnR5KCkgPT0gdGFyZ2V0UHJvcGVydHkpCisgICAgICAgICAgICByZXR1
cm4gbV9hY3RpdmVBbmltYXRpb25zW2luZGV4XS5nZXQoKTsKKyAgICB9CisgICAgcmV0dXJuIDA7
Cit9CisKIGJvb2wgQ0NMYXllckFuaW1hdGlvbkNvbnRyb2xsZXI6Omhhc0FjdGl2ZUFuaW1hdGlv
bigpIGNvbnN0CiB7CiAgICAgZm9yIChzaXplX3QgaSA9IDA7IGkgPCBtX2FjdGl2ZUFuaW1hdGlv
bnMuc2l6ZSgpOyArK2kpIHsKQEAgLTI5Miw3ICsxOTgsNyBAQCB2b2lkIENDTGF5ZXJBbmltYXRp
b25Db250cm9sbGVyOjpwdXNoTmV3QW5pbWF0aW9uc1RvSW1wbFRocmVhZChDQ0xheWVyQW5pbWF0
aW9uQwogICAgICAgICAvLyBUaGUgbmV3IGFuaW1hdGlvbiBzaG91bGQgYmUgc2V0IHRvIHJ1biBh
cyBzb29uIGFzIHBvc3NpYmxlLgogICAgICAgICB0b0FkZC0+c2V0UnVuU3RhdGUoQ0NBY3RpdmVB
bmltYXRpb246OldhaXRpbmdGb3JUYXJnZXRBdmFpbGFiaWxpdHksIDApOwogICAgICAgICB0b0Fk
ZC0+c2V0U3RhcnRUaW1lKDApOwotICAgICAgICBjb250cm9sbGVySW1wbC0+YWRkKHRvQWRkLnJl
bGVhc2UoKSk7CisgICAgICAgIGNvbnRyb2xsZXJJbXBsLT5hZGRBbmltYXRpb24odG9BZGQucmVs
ZWFzZSgpKTsKICAgICB9CiB9CiAKQEAgLTQ1OSw3ICszNjUsNyBAQCB2b2lkIENDTGF5ZXJBbmlt
YXRpb25Db250cm9sbGVyOjpyZXBsYWNlSW1wbFRocmVhZEFuaW1hdGlvbnMoQ0NMYXllckFuaW1h
dGlvbkNvbgogICAgICAgICAgICAgdG9BZGQtPnNldFJ1blN0YXRlKENDQWN0aXZlQW5pbWF0aW9u
OjpXYWl0aW5nRm9yVGFyZ2V0QXZhaWxhYmlsaXR5LCAwKTsKICAgICAgICAgICAgIHRvQWRkLT5z
ZXRTdGFydFRpbWUoMCk7CiAgICAgICAgIH0KLSAgICAgICAgY29udHJvbGxlckltcGwtPmFkZCh0
b0FkZC5yZWxlYXNlKCkpOworICAgICAgICBjb250cm9sbGVySW1wbC0+YWRkQW5pbWF0aW9uKHRv
QWRkLnJlbGVhc2UoKSk7CiAgICAgfQogfQogCkBAIC00NzgsNyArMzg0LDcgQEAgdm9pZCBDQ0xh
eWVyQW5pbWF0aW9uQ29udHJvbGxlcjo6dGlja0FuaW1hdGlvbnMoZG91YmxlIG1vbm90b25pY1Rp
bWUpCiAKICAgICAgICAgICAgIGNhc2UgQ0NBY3RpdmVBbmltYXRpb246OlRyYW5zZm9ybTogewog
ICAgICAgICAgICAgICAgIGNvbnN0IENDVHJhbnNmb3JtQW5pbWF0aW9uQ3VydmUqIHRyYW5zZm9y
bUFuaW1hdGlvbkN1cnZlID0gbV9hY3RpdmVBbmltYXRpb25zW2ldLT5jdXJ2ZSgpLT50b1RyYW5z
Zm9ybUFuaW1hdGlvbkN1cnZlKCk7Ci0gICAgICAgICAgICAgICAgY29uc3QgVHJhbnNmb3JtYXRp
b25NYXRyaXggbWF0cml4ID0gdHJhbnNmb3JtQW5pbWF0aW9uQ3VydmUtPmdldFZhbHVlKHRyaW1t
ZWQsIG1fY2xpZW50LT5ib3VuZHMoKSk7CisgICAgICAgICAgICAgICAgY29uc3QgVHJhbnNmb3Jt
YXRpb25NYXRyaXggbWF0cml4ID0gdHJhbnNmb3JtQW5pbWF0aW9uQ3VydmUtPmdldFZhbHVlKHRy
aW1tZWQpOwogICAgICAgICAgICAgICAgIGlmIChtX2FjdGl2ZUFuaW1hdGlvbnNbaV0tPmlzRmlu
aXNoZWRBdChtb25vdG9uaWNUaW1lKSkKICAgICAgICAgICAgICAgICAgICAgbV9hY3RpdmVBbmlt
YXRpb25zW2ldLT5zZXRSdW5TdGF0ZShDQ0FjdGl2ZUFuaW1hdGlvbjo6RmluaXNoZWQsIG1vbm90
b25pY1RpbWUpOwogCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGlj
cy9jaHJvbWl1bS9jYy9DQ0xheWVyQW5pbWF0aW9uQ29udHJvbGxlci5oIGIvU291cmNlL1dlYkNv
cmUvcGxhdGZvcm0vZ3JhcGhpY3MvY2hyb21pdW0vY2MvQ0NMYXllckFuaW1hdGlvbkNvbnRyb2xs
ZXIuaAppbmRleCBhYzcyODdmNzExZTIzMDNhYTA5M2E3MTJjNWM1OTFhMTBlMzFjM2U0Li5iYWE0
YWMzZGRhYTAzOGJlMWUxMTJhMzE0MjUyN2E5YjIyYzRiNzAxIDEwMDY0NAotLS0gYS9Tb3VyY2Uv
V2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9jaHJvbWl1bS9jYy9DQ0xheWVyQW5pbWF0aW9uQ29u
dHJvbGxlci5oCisrKyBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2Nocm9taXVt
L2NjL0NDTGF5ZXJBbmltYXRpb25Db250cm9sbGVyLmgKQEAgLTUwLDcgKzUwLDYgQEAgcHVibGlj
OgogICAgIHZpcnR1YWwgZmxvYXQgb3BhY2l0eSgpIGNvbnN0ID0gMDsKICAgICB2aXJ0dWFsIHZv
aWQgc2V0VHJhbnNmb3JtRnJvbUFuaW1hdGlvbihjb25zdCBUcmFuc2Zvcm1hdGlvbk1hdHJpeCYp
ID0gMDsKICAgICB2aXJ0dWFsIGNvbnN0IFRyYW5zZm9ybWF0aW9uTWF0cml4JiB0cmFuc2Zvcm0o
KSBjb25zdCA9IDA7Ci0gICAgdmlydHVhbCBjb25zdCBJbnRTaXplJiBib3VuZHMoKSBjb25zdCA9
IDA7CiB9OwogCiBjbGFzcyBDQ0xheWVyQW5pbWF0aW9uQ29udHJvbGxlciB7CkBAIC02MSw5ICs2
MCwxMCBAQCBwdWJsaWM6CiAgICAgdmlydHVhbCB+Q0NMYXllckFuaW1hdGlvbkNvbnRyb2xsZXIo
KTsKIAogICAgIC8vIFRoZXNlIG1ldGhvZHMgYXJlIHZpcnR1YWwgZm9yIHRlc3RpbmcuCi0gICAg
dmlydHVhbCBib29sIGFkZEFuaW1hdGlvbihjb25zdCBLZXlmcmFtZVZhbHVlTGlzdCYsIGNvbnN0
IEludFNpemUmIGJveFNpemUsIGNvbnN0IEFuaW1hdGlvbiosIGludCBhbmltYXRpb25JZCwgaW50
IGdyb3VwSWQsIGRvdWJsZSB0aW1lT2Zmc2V0KTsKKyAgICB2aXJ0dWFsIHZvaWQgYWRkQW5pbWF0
aW9uKFBhc3NPd25QdHI8Q0NBY3RpdmVBbmltYXRpb24+KTsKICAgICB2aXJ0dWFsIHZvaWQgcGF1
c2VBbmltYXRpb24oaW50IGFuaW1hdGlvbklkLCBkb3VibGUgdGltZU9mZnNldCk7CiAgICAgdmly
dHVhbCB2b2lkIHJlbW92ZUFuaW1hdGlvbihpbnQgYW5pbWF0aW9uSWQpOworICAgIHZpcnR1YWwg
dm9pZCByZW1vdmVBbmltYXRpb24oaW50IGFuaW1hdGlvbklkLCBDQ0FjdGl2ZUFuaW1hdGlvbjo6
VGFyZ2V0UHJvcGVydHkpOwogICAgIHZpcnR1YWwgdm9pZCBzdXNwZW5kQW5pbWF0aW9ucyhkb3Vi
bGUgbW9ub3RvbmljVGltZSk7CiAgICAgdmlydHVhbCB2b2lkIHJlc3VtZUFuaW1hdGlvbnMoZG91
YmxlIG1vbm90b25pY1RpbWUpOwogCkBAIC03MywxMiArNzMsMTQgQEAgcHVibGljOgogCiAgICAg
dm9pZCBhbmltYXRlKGRvdWJsZSBtb25vdG9uaWNUaW1lLCBDQ0FuaW1hdGlvbkV2ZW50c1ZlY3Rv
ciopOwogCi0gICAgdm9pZCBhZGQoUGFzc093blB0cjxDQ0FjdGl2ZUFuaW1hdGlvbj4pOwotCi0g
ICAgLy8gUmV0dXJucyB0aGUgYWN0aXZlIGFuaW1hdGlvbiBpbiB0aGUgZ2l2ZW4gZ3JvdXAsIGFu
aW1hdGluZyB0aGUgZ2l2ZW4gcHJvcGVydHkgaWYgc3VjaCBhbgorICAgIC8vIFJldHVybnMgdGhl
IGFjdGl2ZSBhbmltYXRpb24gaW4gdGhlIGdpdmVuIGdyb3VwLCBhbmltYXRpbmcgdGhlIGdpdmVu
IHByb3BlcnR5LCBpZiBzdWNoIGFuCiAgICAgLy8gYW5pbWF0aW9uIGV4aXN0cy4KICAgICBDQ0Fj
dGl2ZUFuaW1hdGlvbiogZ2V0QWN0aXZlQW5pbWF0aW9uKGludCBncm91cElkLCBDQ0FjdGl2ZUFu
aW1hdGlvbjo6VGFyZ2V0UHJvcGVydHkpIGNvbnN0OwogCisgICAgLy8gUmV0dXJucyB0aGUgYWN0
aXZlIGFuaW1hdGlvbiBhbmltYXRpbmcgdGhlIGdpdmVuIHByb3BlcnR5IHRoYXQgaXMgZWl0aGVy
IHJ1bm5pbmcsIG9yIGlzCisgICAgLy8gbmV4dCB0byBydW4sIGlmIHN1Y2ggYW4gYW5pbWF0aW9u
IGV4aXN0cy4KKyAgICBDQ0FjdGl2ZUFuaW1hdGlvbiogZ2V0QWN0aXZlQW5pbWF0aW9uKENDQWN0
aXZlQW5pbWF0aW9uOjpUYXJnZXRQcm9wZXJ0eSkgY29uc3Q7CisKICAgICAvLyBSZXR1cm5zIHRy
dWUgaWYgdGhlcmUgYXJlIGFueSBhbmltYXRpb25zIHRoYXQgaGF2ZSBuZWl0aGVyIGZpbmlzaGVk
IG5vciBhYm9ydGVkLgogICAgIGJvb2wgaGFzQWN0aXZlQW5pbWF0aW9uKCkgY29uc3Q7CiAKZGlm
ZiAtLWdpdCBhL1NvdXJjZS9XZWJLaXQvY2hyb21pdW0vdGVzdHMvQ0NBbmltYXRpb25UZXN0Q29t
bW9uLmNwcCBiL1NvdXJjZS9XZWJLaXQvY2hyb21pdW0vdGVzdHMvQ0NBbmltYXRpb25UZXN0Q29t
bW9uLmNwcAppbmRleCAzNmY3OTgxOGVmMDllODM4Y2M5ODI3YjhmYTE2MjU4ODE5NTBkYTQyLi4x
NDE0YjhjYTVjNDAzMzI3OTk2ZDdiZmU5NDRjNDM4MDVjYTc3ZWNhIDEwMDY0NAotLS0gYS9Tb3Vy
Y2UvV2ViS2l0L2Nocm9taXVtL3Rlc3RzL0NDQW5pbWF0aW9uVGVzdENvbW1vbi5jcHAKKysrIGIv
U291cmNlL1dlYktpdC9jaHJvbWl1bS90ZXN0cy9DQ0FuaW1hdGlvblRlc3RDb21tb24uY3BwCkBA
IC0yOSw5ICsyOSwxMiBAQAogI2luY2x1ZGUgIkdyYXBoaWNzTGF5ZXIuaCIKICNpbmNsdWRlICJM
YXllckNocm9taXVtLmgiCiAjaW5jbHVkZSAiVHJhbnNsYXRlVHJhbnNmb3JtT3BlcmF0aW9uLmgi
CisjaW5jbHVkZSAiY2MvQ0NLZXlmcmFtZWRBbmltYXRpb25DdXJ2ZS5oIgogI2luY2x1ZGUgImNj
L0NDTGF5ZXJBbmltYXRpb25Db250cm9sbGVyLmgiCiAjaW5jbHVkZSAiY2MvQ0NMYXllckltcGwu
aCIKIAorI2luY2x1ZGUgPHB1YmxpYy9XZWJUcmFuc2Zvcm1PcGVyYXRpb25zLmg+CisKIHVzaW5n
IG5hbWVzcGFjZSBXZWJDb3JlOwogCiBuYW1lc3BhY2UgewpAQCAtMzksMzggKzQyLDM4IEBAIG5h
bWVzcGFjZSB7CiB0ZW1wbGF0ZSA8Y2xhc3MgVGFyZ2V0Pgogdm9pZCBhZGRPcGFjaXR5VHJhbnNp
dGlvbihUYXJnZXQmIHRhcmdldCwgZG91YmxlIGR1cmF0aW9uLCBmbG9hdCBzdGFydE9wYWNpdHks
IGZsb2F0IGVuZE9wYWNpdHksIGJvb2wgdXNlVGltaW5nRnVuY3Rpb24pCiB7Ci0gICAgV2ViQ29y
ZTo6S2V5ZnJhbWVWYWx1ZUxpc3QgdmFsdWVzKEFuaW1hdGVkUHJvcGVydHlPcGFjaXR5KTsKLSAg
ICBpZiAoZHVyYXRpb24gPiAwKQotICAgICAgICB2YWx1ZXMuaW5zZXJ0KG5ldyBGbG9hdEFuaW1h
dGlvblZhbHVlKDAsIHN0YXJ0T3BhY2l0eSkpOwotICAgIHZhbHVlcy5pbnNlcnQobmV3IEZsb2F0
QW5pbWF0aW9uVmFsdWUoZHVyYXRpb24sIGVuZE9wYWNpdHkpKTsKKyAgICBPd25QdHI8Q0NLZXlm
cmFtZWRGbG9hdEFuaW1hdGlvbkN1cnZlPiBjdXJ2ZShDQ0tleWZyYW1lZEZsb2F0QW5pbWF0aW9u
Q3VydmU6OmNyZWF0ZSgpKTsKIAotICAgIFJlZlB0cjxBbmltYXRpb24+IGFuaW1hdGlvbiA9IEFu
aW1hdGlvbjo6Y3JlYXRlKCk7Ci0gICAgYW5pbWF0aW9uLT5zZXREdXJhdGlvbihkdXJhdGlvbik7
Ci0KLSAgICBpZiAodXNlVGltaW5nRnVuY3Rpb24pCi0gICAgICAgIGFuaW1hdGlvbi0+c2V0VGlt
aW5nRnVuY3Rpb24oTGluZWFyVGltaW5nRnVuY3Rpb246OmNyZWF0ZSgpKTsKKyAgICBpZiAoZHVy
YXRpb24gPiAwKQorICAgICAgICBjdXJ2ZS0+YWRkS2V5ZnJhbWUoQ0NGbG9hdEtleWZyYW1lOjpj
cmVhdGUoMCwgc3RhcnRPcGFjaXR5LCB1c2VUaW1pbmdGdW5jdGlvbiA/IG51bGxwdHIgOiBDQ0Vh
c2VUaW1pbmdGdW5jdGlvbjo6Y3JlYXRlKCkpKTsKKyAgICBjdXJ2ZS0+YWRkS2V5ZnJhbWUoQ0NG
bG9hdEtleWZyYW1lOjpjcmVhdGUoZHVyYXRpb24sIGVuZE9wYWNpdHksIG51bGxwdHIpKTsKIAot
ICAgIEludFNpemUgYm94U2l6ZTsKKyAgICBPd25QdHI8Q0NBY3RpdmVBbmltYXRpb24+IGFuaW1h
dGlvbihDQ0FjdGl2ZUFuaW1hdGlvbjo6Y3JlYXRlKGN1cnZlLnJlbGVhc2UoKSwgMCwgMCwgQ0NB
Y3RpdmVBbmltYXRpb246Ok9wYWNpdHkpKTsKKyAgICBhbmltYXRpb24tPnNldE5lZWRzU3luY2hy
b25pemVkU3RhcnRUaW1lKHRydWUpOwogCi0gICAgdGFyZ2V0LmFkZEFuaW1hdGlvbih2YWx1ZXMs
IGJveFNpemUsIGFuaW1hdGlvbi5nZXQoKSwgMCwgMCwgMCk7CisgICAgdGFyZ2V0LmFkZEFuaW1h
dGlvbihhbmltYXRpb24ucmVsZWFzZSgpKTsKIH0KIAogdGVtcGxhdGUgPGNsYXNzIFRhcmdldD4K
IHZvaWQgYWRkQW5pbWF0ZWRUcmFuc2Zvcm0oVGFyZ2V0JiB0YXJnZXQsIGRvdWJsZSBkdXJhdGlv
biwgaW50IGRlbHRhWCwgaW50IGRlbHRhWSkKIHsKICAgICBzdGF0aWMgaW50IGlkID0gMDsKLSAg
ICBXZWJDb3JlOjpLZXlmcmFtZVZhbHVlTGlzdCB2YWx1ZXMoQW5pbWF0ZWRQcm9wZXJ0eVdlYmtp
dFRyYW5zZm9ybSk7CisgICAgT3duUHRyPENDS2V5ZnJhbWVkVHJhbnNmb3JtQW5pbWF0aW9uQ3Vy
dmU+IGN1cnZlKENDS2V5ZnJhbWVkVHJhbnNmb3JtQW5pbWF0aW9uQ3VydmU6OmNyZWF0ZSgpKTsK
IAotICAgIFRyYW5zZm9ybU9wZXJhdGlvbnMgb3BlcmF0aW9uczsKLSAgICBvcGVyYXRpb25zLm9w
ZXJhdGlvbnMoKS5hcHBlbmQoVHJhbnNsYXRlVHJhbnNmb3JtT3BlcmF0aW9uOjpjcmVhdGUoTGVu
Z3RoKGRlbHRhWCwgV2ViQ29yZTo6Rml4ZWQpLCBMZW5ndGgoZGVsdGFZLCBXZWJDb3JlOjpGaXhl
ZCksIFRyYW5zZm9ybU9wZXJhdGlvbjo6VFJBTlNMQVRFX1gpKTsKLSAgICB2YWx1ZXMuaW5zZXJ0
KG5ldyBUcmFuc2Zvcm1BbmltYXRpb25WYWx1ZSgwLCAmb3BlcmF0aW9ucykpOworICAgIGlmIChk
dXJhdGlvbiA+IDApIHsKKyAgICAgICAgV2ViS2l0OjpXZWJUcmFuc2Zvcm1PcGVyYXRpb25zIHN0
YXJ0T3BlcmF0aW9uczsKKyAgICAgICAgc3RhcnRPcGVyYXRpb25zLmFwcGVuZFRyYW5zbGF0ZShk
ZWx0YVgsIGRlbHRhWSwgMCk7CisgICAgICAgIGN1cnZlLT5hZGRLZXlmcmFtZShDQ1RyYW5zZm9y
bUtleWZyYW1lOjpjcmVhdGUoMCwgc3RhcnRPcGVyYXRpb25zLCBudWxscHRyKSk7CisgICAgfQog
Ci0gICAgUmVmUHRyPEFuaW1hdGlvbj4gYW5pbWF0aW9uID0gQW5pbWF0aW9uOjpjcmVhdGUoKTsK
LSAgICBhbmltYXRpb24tPnNldER1cmF0aW9uKGR1cmF0aW9uKTsKKyAgICBXZWJLaXQ6OldlYlRy
YW5zZm9ybU9wZXJhdGlvbnMgb3BlcmF0aW9uczsKKyAgICBvcGVyYXRpb25zLmFwcGVuZFRyYW5z
bGF0ZShkZWx0YVgsIGRlbHRhWSwgMCk7CisgICAgY3VydmUtPmFkZEtleWZyYW1lKENDVHJhbnNm
b3JtS2V5ZnJhbWU6OmNyZWF0ZShkdXJhdGlvbiwgb3BlcmF0aW9ucywgbnVsbHB0cikpOwogCi0g
ICAgSW50U2l6ZSBib3hTaXplOworICAgIE93blB0cjxDQ0FjdGl2ZUFuaW1hdGlvbj4gYW5pbWF0
aW9uKENDQWN0aXZlQW5pbWF0aW9uOjpjcmVhdGUoY3VydmUucmVsZWFzZSgpLCBpZCsrLCAwLCBD
Q0FjdGl2ZUFuaW1hdGlvbjo6VHJhbnNmb3JtKSk7CisgICAgYW5pbWF0aW9uLT5zZXROZWVkc1N5
bmNocm9uaXplZFN0YXJ0VGltZSh0cnVlKTsKIAotICAgIHRhcmdldC5hZGRBbmltYXRpb24odmFs
dWVzLCBib3hTaXplLCBhbmltYXRpb24uZ2V0KCksICsraWQsIDAsIDApOworICAgIHRhcmdldC5h
ZGRBbmltYXRpb24oYW5pbWF0aW9uLnJlbGVhc2UoKSk7CiB9CiAKIH0gLy8gbmFtZXNwYWNlCkBA
IC05OSw3ICsxMDIsNyBAQCBGYWtlVHJhbnNmb3JtVHJhbnNpdGlvbjo6fkZha2VUcmFuc2Zvcm1U
cmFuc2l0aW9uKCkKIHsKIH0KIAotV2ViQ29yZTo6VHJhbnNmb3JtYXRpb25NYXRyaXggRmFrZVRy
YW5zZm9ybVRyYW5zaXRpb246OmdldFZhbHVlKGRvdWJsZSB0aW1lLCBjb25zdCBXZWJDb3JlOjpJ
bnRTaXplJiBzaXplKSBjb25zdAorV2ViQ29yZTo6VHJhbnNmb3JtYXRpb25NYXRyaXggRmFrZVRy
YW5zZm9ybVRyYW5zaXRpb246OmdldFZhbHVlKGRvdWJsZSB0aW1lKSBjb25zdAogewogICAgIHJl
dHVybiBXZWJDb3JlOjpUcmFuc2Zvcm1hdGlvbk1hdHJpeCgpOwogfQpkaWZmIC0tZ2l0IGEvU291
cmNlL1dlYktpdC9jaHJvbWl1bS90ZXN0cy9DQ0FuaW1hdGlvblRlc3RDb21tb24uaCBiL1NvdXJj
ZS9XZWJLaXQvY2hyb21pdW0vdGVzdHMvQ0NBbmltYXRpb25UZXN0Q29tbW9uLmgKaW5kZXggNzc2
Yjc1YzhkNmY2ZWFlNDljYjJjMjhlZThkNjNjMjFiZTEyMzgzNC4uOTY3ZGQ4MThkZDU2YjhiY2Jj
ZjdhYmM4Y2E0NmY4OTNiNzBhM2RjNCAxMDA2NDQKLS0tIGEvU291cmNlL1dlYktpdC9jaHJvbWl1
bS90ZXN0cy9DQ0FuaW1hdGlvblRlc3RDb21tb24uaAorKysgYi9Tb3VyY2UvV2ViS2l0L2Nocm9t
aXVtL3Rlc3RzL0NDQW5pbWF0aW9uVGVzdENvbW1vbi5oCkBAIC01Myw3ICs1Myw3IEBAIHB1Ymxp
YzoKICAgICB2aXJ0dWFsIH5GYWtlVHJhbnNmb3JtVHJhbnNpdGlvbigpOwogCiAgICAgdmlydHVh
bCBkb3VibGUgZHVyYXRpb24oKSBjb25zdCBPVkVSUklERSB7IHJldHVybiBtX2R1cmF0aW9uOyB9
Ci0gICAgdmlydHVhbCBXZWJDb3JlOjpUcmFuc2Zvcm1hdGlvbk1hdHJpeCBnZXRWYWx1ZShkb3Vi
bGUgdGltZSwgY29uc3QgV2ViQ29yZTo6SW50U2l6ZSYpIGNvbnN0IE9WRVJSSURFOworICAgIHZp
cnR1YWwgV2ViQ29yZTo6VHJhbnNmb3JtYXRpb25NYXRyaXggZ2V0VmFsdWUoZG91YmxlIHRpbWUp
IGNvbnN0IE9WRVJSSURFOwogCiAgICAgdmlydHVhbCBQYXNzT3duUHRyPFdlYkNvcmU6OkNDQW5p
bWF0aW9uQ3VydmU+IGNsb25lKCkgY29uc3QgT1ZFUlJJREU7CiAKZGlmZiAtLWdpdCBhL1NvdXJj
ZS9XZWJLaXQvY2hyb21pdW0vdGVzdHMvQ0NLZXlmcmFtZWRBbmltYXRpb25DdXJ2ZVRlc3QuY3Bw
IGIvU291cmNlL1dlYktpdC9jaHJvbWl1bS90ZXN0cy9DQ0tleWZyYW1lZEFuaW1hdGlvbkN1cnZl
VGVzdC5jcHAKaW5kZXggMTViNTU0YTA2OTA1NzUyZjFiZGVmY2I4YWViYjg3MjhmZWVmYTU1YS4u
NWFjNzI3Y2I1NzM5ZDQ1N2NkMjk5ZGNhN2ExMDNlM2I5ZDkwZjI2ZiAxMDA2NDQKLS0tIGEvU291
cmNlL1dlYktpdC9jaHJvbWl1bS90ZXN0cy9DQ0tleWZyYW1lZEFuaW1hdGlvbkN1cnZlVGVzdC5j
cHAKKysrIGIvU291cmNlL1dlYktpdC9jaHJvbWl1bS90ZXN0cy9DQ0tleWZyYW1lZEFuaW1hdGlv
bkN1cnZlVGVzdC5jcHAKQEAgLTMxLDYgKzMxLDcgQEAKIAogI2luY2x1ZGUgPGdtb2NrL2dtb2Nr
Lmg+CiAjaW5jbHVkZSA8Z3Rlc3QvZ3Rlc3QuaD4KKyNpbmNsdWRlIDxwdWJsaWMvV2ViVHJhbnNm
b3JtT3BlcmF0aW9ucy5oPgogI2luY2x1ZGUgPHd0Zi9Pd25QdHIuaD4KICNpbmNsdWRlIDx3dGYv
VmVjdG9yLmg+CiAKQEAgLTExMyw1NyArMTE0LDU1IEBAIFRFU1QoQ0NLZXlmcmFtZWRBbmltYXRp
b25DdXJ2ZVRlc3QsIFJlcGVhdGVkRmxvYXRLZXlUaW1lcykKIFRFU1QoQ0NLZXlmcmFtZWRBbmlt
YXRpb25DdXJ2ZVRlc3QsIE9uZVRyYW5zZm9ybUtleWZyYW1lKQogewogICAgIE93blB0cjxDQ0tl
eWZyYW1lZFRyYW5zZm9ybUFuaW1hdGlvbkN1cnZlPiBjdXJ2ZShDQ0tleWZyYW1lZFRyYW5zZm9y
bUFuaW1hdGlvbkN1cnZlOjpjcmVhdGUoKSk7Ci0gICAgVHJhbnNmb3JtT3BlcmF0aW9ucyBvcGVy
YXRpb25zOwotICAgIG9wZXJhdGlvbnMub3BlcmF0aW9ucygpLmFwcGVuZChUcmFuc2xhdGVUcmFu
c2Zvcm1PcGVyYXRpb246OmNyZWF0ZShMZW5ndGgoMiwgRml4ZWQpLCBMZW5ndGgoMCwgRml4ZWQp
LCBUcmFuc2Zvcm1PcGVyYXRpb246OlRSQU5TTEFURV9YKSk7CisgICAgV2ViS2l0OjpXZWJUcmFu
c2Zvcm1PcGVyYXRpb25zIG9wZXJhdGlvbnM7CisgICAgb3BlcmF0aW9ucy5hcHBlbmRUcmFuc2xh
dGUoMiwgMCwgMCk7CiAgICAgY3VydmUtPmFkZEtleWZyYW1lKENDVHJhbnNmb3JtS2V5ZnJhbWU6
OmNyZWF0ZSgwLCBvcGVyYXRpb25zLCBudWxscHRyKSk7CiAKLSAgICBJbnRTaXplIGxheWVyU2l6
ZTsgLy8gaWdub3JlZAotICAgIGV4cGVjdFRyYW5zbGF0ZVgoMiwgY3VydmUtPmdldFZhbHVlKC0x
LCBsYXllclNpemUpKTsKLSAgICBleHBlY3RUcmFuc2xhdGVYKDIsIGN1cnZlLT5nZXRWYWx1ZSgw
LCBsYXllclNpemUpKTsKLSAgICBleHBlY3RUcmFuc2xhdGVYKDIsIGN1cnZlLT5nZXRWYWx1ZSgw
LjUsIGxheWVyU2l6ZSkpOwotICAgIGV4cGVjdFRyYW5zbGF0ZVgoMiwgY3VydmUtPmdldFZhbHVl
KDEsIGxheWVyU2l6ZSkpOwotICAgIGV4cGVjdFRyYW5zbGF0ZVgoMiwgY3VydmUtPmdldFZhbHVl
KDIsIGxheWVyU2l6ZSkpOworICAgIGV4cGVjdFRyYW5zbGF0ZVgoMiwgY3VydmUtPmdldFZhbHVl
KC0xKSk7CisgICAgZXhwZWN0VHJhbnNsYXRlWCgyLCBjdXJ2ZS0+Z2V0VmFsdWUoMCkpOworICAg
IGV4cGVjdFRyYW5zbGF0ZVgoMiwgY3VydmUtPmdldFZhbHVlKDAuNSkpOworICAgIGV4cGVjdFRy
YW5zbGF0ZVgoMiwgY3VydmUtPmdldFZhbHVlKDEpKTsKKyAgICBleHBlY3RUcmFuc2xhdGVYKDIs
IGN1cnZlLT5nZXRWYWx1ZSgyKSk7CiB9CiAKIC8vIFRlc3RzIHRoYXQgYSB0cmFuc2Zvcm0gYW5p
bWF0aW9uIHdpdGggdHdvIGtleWZyYW1lcyB3b3JrcyBhcyBleHBlY3RlZC4KIFRFU1QoQ0NLZXlm
cmFtZWRBbmltYXRpb25DdXJ2ZVRlc3QsIFR3b1RyYW5zZm9ybUtleWZyYW1lKQogewogICAgIE93
blB0cjxDQ0tleWZyYW1lZFRyYW5zZm9ybUFuaW1hdGlvbkN1cnZlPiBjdXJ2ZShDQ0tleWZyYW1l
ZFRyYW5zZm9ybUFuaW1hdGlvbkN1cnZlOjpjcmVhdGUoKSk7Ci0gICAgVHJhbnNmb3JtT3BlcmF0
aW9ucyBvcGVyYXRpb25zMTsKLSAgICBvcGVyYXRpb25zMS5vcGVyYXRpb25zKCkuYXBwZW5kKFRy
YW5zbGF0ZVRyYW5zZm9ybU9wZXJhdGlvbjo6Y3JlYXRlKExlbmd0aCgyLCBGaXhlZCksIExlbmd0
aCgwLCBGaXhlZCksIFRyYW5zZm9ybU9wZXJhdGlvbjo6VFJBTlNMQVRFX1gpKTsKLSAgICBUcmFu
c2Zvcm1PcGVyYXRpb25zIG9wZXJhdGlvbnMyOwotICAgIG9wZXJhdGlvbnMyLm9wZXJhdGlvbnMo
KS5hcHBlbmQoVHJhbnNsYXRlVHJhbnNmb3JtT3BlcmF0aW9uOjpjcmVhdGUoTGVuZ3RoKDQsIEZp
eGVkKSwgTGVuZ3RoKDAsIEZpeGVkKSwgVHJhbnNmb3JtT3BlcmF0aW9uOjpUUkFOU0xBVEVfWCkp
OworICAgIFdlYktpdDo6V2ViVHJhbnNmb3JtT3BlcmF0aW9ucyBvcGVyYXRpb25zMTsKKyAgICBv
cGVyYXRpb25zMS5hcHBlbmRUcmFuc2xhdGUoMiwgMCwgMCk7CisgICAgV2ViS2l0OjpXZWJUcmFu
c2Zvcm1PcGVyYXRpb25zIG9wZXJhdGlvbnMyOworICAgIG9wZXJhdGlvbnMyLmFwcGVuZFRyYW5z
bGF0ZSg0LCAwLCAwKTsKKwogICAgIGN1cnZlLT5hZGRLZXlmcmFtZShDQ1RyYW5zZm9ybUtleWZy
YW1lOjpjcmVhdGUoMCwgb3BlcmF0aW9uczEsIG51bGxwdHIpKTsKICAgICBjdXJ2ZS0+YWRkS2V5
ZnJhbWUoQ0NUcmFuc2Zvcm1LZXlmcmFtZTo6Y3JlYXRlKDEsIG9wZXJhdGlvbnMyLCBudWxscHRy
KSk7Ci0gICAgSW50U2l6ZSBsYXllclNpemU7IC8vIGlnbm9yZWQKLSAgICBleHBlY3RUcmFuc2xh
dGVYKDIsIGN1cnZlLT5nZXRWYWx1ZSgtMSwgbGF5ZXJTaXplKSk7Ci0gICAgZXhwZWN0VHJhbnNs
YXRlWCgyLCBjdXJ2ZS0+Z2V0VmFsdWUoMCwgbGF5ZXJTaXplKSk7Ci0gICAgZXhwZWN0VHJhbnNs
YXRlWCgzLCBjdXJ2ZS0+Z2V0VmFsdWUoMC41LCBsYXllclNpemUpKTsKLSAgICBleHBlY3RUcmFu
c2xhdGVYKDQsIGN1cnZlLT5nZXRWYWx1ZSgxLCBsYXllclNpemUpKTsKLSAgICBleHBlY3RUcmFu
c2xhdGVYKDQsIGN1cnZlLT5nZXRWYWx1ZSgyLCBsYXllclNpemUpKTsKKyAgICBleHBlY3RUcmFu
c2xhdGVYKDIsIGN1cnZlLT5nZXRWYWx1ZSgtMSkpOworICAgIGV4cGVjdFRyYW5zbGF0ZVgoMiwg
Y3VydmUtPmdldFZhbHVlKDApKTsKKyAgICBleHBlY3RUcmFuc2xhdGVYKDMsIGN1cnZlLT5nZXRW
YWx1ZSgwLjUpKTsKKyAgICBleHBlY3RUcmFuc2xhdGVYKDQsIGN1cnZlLT5nZXRWYWx1ZSgxKSk7
CisgICAgZXhwZWN0VHJhbnNsYXRlWCg0LCBjdXJ2ZS0+Z2V0VmFsdWUoMikpOwogfQogCiAvLyBU
ZXN0cyB0aGF0IGEgdHJhbnNmb3JtIGFuaW1hdGlvbiB3aXRoIHRocmVlIGtleWZyYW1lcyB3b3Jr
cyBhcyBleHBlY3RlZC4KIFRFU1QoQ0NLZXlmcmFtZWRBbmltYXRpb25DdXJ2ZVRlc3QsIFRocmVl
VHJhbnNmb3JtS2V5ZnJhbWUpCiB7CiAgICAgT3duUHRyPENDS2V5ZnJhbWVkVHJhbnNmb3JtQW5p
bWF0aW9uQ3VydmU+IGN1cnZlKENDS2V5ZnJhbWVkVHJhbnNmb3JtQW5pbWF0aW9uQ3VydmU6OmNy
ZWF0ZSgpKTsKLSAgICBUcmFuc2Zvcm1PcGVyYXRpb25zIG9wZXJhdGlvbnMxOwotICAgIG9wZXJh
dGlvbnMxLm9wZXJhdGlvbnMoKS5hcHBlbmQoVHJhbnNsYXRlVHJhbnNmb3JtT3BlcmF0aW9uOjpj
cmVhdGUoTGVuZ3RoKDIsIEZpeGVkKSwgTGVuZ3RoKDAsIEZpeGVkKSwgVHJhbnNmb3JtT3BlcmF0
aW9uOjpUUkFOU0xBVEVfWCkpOwotICAgIFRyYW5zZm9ybU9wZXJhdGlvbnMgb3BlcmF0aW9uczI7
Ci0gICAgb3BlcmF0aW9uczIub3BlcmF0aW9ucygpLmFwcGVuZChUcmFuc2xhdGVUcmFuc2Zvcm1P
cGVyYXRpb246OmNyZWF0ZShMZW5ndGgoNCwgRml4ZWQpLCBMZW5ndGgoMCwgRml4ZWQpLCBUcmFu
c2Zvcm1PcGVyYXRpb246OlRSQU5TTEFURV9YKSk7Ci0gICAgVHJhbnNmb3JtT3BlcmF0aW9ucyBv
cGVyYXRpb25zMzsKLSAgICBvcGVyYXRpb25zMy5vcGVyYXRpb25zKCkuYXBwZW5kKFRyYW5zbGF0
ZVRyYW5zZm9ybU9wZXJhdGlvbjo6Y3JlYXRlKExlbmd0aCg4LCBGaXhlZCksIExlbmd0aCgwLCBG
aXhlZCksIFRyYW5zZm9ybU9wZXJhdGlvbjo6VFJBTlNMQVRFX1gpKTsKKyAgICBXZWJLaXQ6Oldl
YlRyYW5zZm9ybU9wZXJhdGlvbnMgb3BlcmF0aW9uczE7CisgICAgb3BlcmF0aW9uczEuYXBwZW5k
VHJhbnNsYXRlKDIsIDAsIDApOworICAgIFdlYktpdDo6V2ViVHJhbnNmb3JtT3BlcmF0aW9ucyBv
cGVyYXRpb25zMjsKKyAgICBvcGVyYXRpb25zMi5hcHBlbmRUcmFuc2xhdGUoNCwgMCwgMCk7Cisg
ICAgV2ViS2l0OjpXZWJUcmFuc2Zvcm1PcGVyYXRpb25zIG9wZXJhdGlvbnMzOworICAgIG9wZXJh
dGlvbnMzLmFwcGVuZFRyYW5zbGF0ZSg4LCAwLCAwKTsKICAgICBjdXJ2ZS0+YWRkS2V5ZnJhbWUo
Q0NUcmFuc2Zvcm1LZXlmcmFtZTo6Y3JlYXRlKDAsIG9wZXJhdGlvbnMxLCBudWxscHRyKSk7CiAg
ICAgY3VydmUtPmFkZEtleWZyYW1lKENDVHJhbnNmb3JtS2V5ZnJhbWU6OmNyZWF0ZSgxLCBvcGVy
YXRpb25zMiwgbnVsbHB0cikpOwogICAgIGN1cnZlLT5hZGRLZXlmcmFtZShDQ1RyYW5zZm9ybUtl
eWZyYW1lOjpjcmVhdGUoMiwgb3BlcmF0aW9uczMsIG51bGxwdHIpKTsKLSAgICBJbnRTaXplIGxh
eWVyU2l6ZTsgLy8gaWdub3JlZAotICAgIGV4cGVjdFRyYW5zbGF0ZVgoMiwgY3VydmUtPmdldFZh
bHVlKC0xLCBsYXllclNpemUpKTsKLSAgICBleHBlY3RUcmFuc2xhdGVYKDIsIGN1cnZlLT5nZXRW
YWx1ZSgwLCBsYXllclNpemUpKTsKLSAgICBleHBlY3RUcmFuc2xhdGVYKDMsIGN1cnZlLT5nZXRW
YWx1ZSgwLjUsIGxheWVyU2l6ZSkpOwotICAgIGV4cGVjdFRyYW5zbGF0ZVgoNCwgY3VydmUtPmdl
dFZhbHVlKDEsIGxheWVyU2l6ZSkpOwotICAgIGV4cGVjdFRyYW5zbGF0ZVgoNiwgY3VydmUtPmdl
dFZhbHVlKDEuNSwgbGF5ZXJTaXplKSk7Ci0gICAgZXhwZWN0VHJhbnNsYXRlWCg4LCBjdXJ2ZS0+
Z2V0VmFsdWUoMiwgbGF5ZXJTaXplKSk7Ci0gICAgZXhwZWN0VHJhbnNsYXRlWCg4LCBjdXJ2ZS0+
Z2V0VmFsdWUoMywgbGF5ZXJTaXplKSk7CisgICAgZXhwZWN0VHJhbnNsYXRlWCgyLCBjdXJ2ZS0+
Z2V0VmFsdWUoLTEpKTsKKyAgICBleHBlY3RUcmFuc2xhdGVYKDIsIGN1cnZlLT5nZXRWYWx1ZSgw
KSk7CisgICAgZXhwZWN0VHJhbnNsYXRlWCgzLCBjdXJ2ZS0+Z2V0VmFsdWUoMC41KSk7CisgICAg
ZXhwZWN0VHJhbnNsYXRlWCg0LCBjdXJ2ZS0+Z2V0VmFsdWUoMSkpOworICAgIGV4cGVjdFRyYW5z
bGF0ZVgoNiwgY3VydmUtPmdldFZhbHVlKDEuNSkpOworICAgIGV4cGVjdFRyYW5zbGF0ZVgoOCwg
Y3VydmUtPmdldFZhbHVlKDIpKTsKKyAgICBleHBlY3RUcmFuc2xhdGVYKDgsIGN1cnZlLT5nZXRW
YWx1ZSgzKSk7CiB9CiAKIC8vIFRlc3RzIHRoYXQgYSB0cmFuc2Zvcm0gYW5pbWF0aW9uIHdpdGgg
bXVsdGlwbGUga2V5cyBhdCBhIGdpdmVuIHRpbWUgd29ya3Mgc2FuZWx5LgpAQCAtMTcxLDM0ICsx
NzAsMzIgQEAgVEVTVChDQ0tleWZyYW1lZEFuaW1hdGlvbkN1cnZlVGVzdCwgUmVwZWF0ZWRUcmFu
c2Zvcm1LZXlUaW1lcykKIHsKICAgICBPd25QdHI8Q0NLZXlmcmFtZWRUcmFuc2Zvcm1BbmltYXRp
b25DdXJ2ZT4gY3VydmUoQ0NLZXlmcmFtZWRUcmFuc2Zvcm1BbmltYXRpb25DdXJ2ZTo6Y3JlYXRl
KCkpOwogICAgIC8vIEEgc3RlcCBmdW5jdGlvbi4KLSAgICBUcmFuc2Zvcm1PcGVyYXRpb25zIG9w
ZXJhdGlvbnMxOwotICAgIG9wZXJhdGlvbnMxLm9wZXJhdGlvbnMoKS5hcHBlbmQoVHJhbnNsYXRl
VHJhbnNmb3JtT3BlcmF0aW9uOjpjcmVhdGUoTGVuZ3RoKDQsIEZpeGVkKSwgTGVuZ3RoKDAsIEZp
eGVkKSwgVHJhbnNmb3JtT3BlcmF0aW9uOjpUUkFOU0xBVEVfWCkpOwotICAgIFRyYW5zZm9ybU9w
ZXJhdGlvbnMgb3BlcmF0aW9uczI7Ci0gICAgb3BlcmF0aW9uczIub3BlcmF0aW9ucygpLmFwcGVu
ZChUcmFuc2xhdGVUcmFuc2Zvcm1PcGVyYXRpb246OmNyZWF0ZShMZW5ndGgoNCwgRml4ZWQpLCBM
ZW5ndGgoMCwgRml4ZWQpLCBUcmFuc2Zvcm1PcGVyYXRpb246OlRSQU5TTEFURV9YKSk7Ci0gICAg
VHJhbnNmb3JtT3BlcmF0aW9ucyBvcGVyYXRpb25zMzsKLSAgICBvcGVyYXRpb25zMy5vcGVyYXRp
b25zKCkuYXBwZW5kKFRyYW5zbGF0ZVRyYW5zZm9ybU9wZXJhdGlvbjo6Y3JlYXRlKExlbmd0aCg2
LCBGaXhlZCksIExlbmd0aCgwLCBGaXhlZCksIFRyYW5zZm9ybU9wZXJhdGlvbjo6VFJBTlNMQVRF
X1gpKTsKLSAgICBUcmFuc2Zvcm1PcGVyYXRpb25zIG9wZXJhdGlvbnM0OwotICAgIG9wZXJhdGlv
bnM0Lm9wZXJhdGlvbnMoKS5hcHBlbmQoVHJhbnNsYXRlVHJhbnNmb3JtT3BlcmF0aW9uOjpjcmVh
dGUoTGVuZ3RoKDYsIEZpeGVkKSwgTGVuZ3RoKDAsIEZpeGVkKSwgVHJhbnNmb3JtT3BlcmF0aW9u
OjpUUkFOU0xBVEVfWCkpOworICAgIFdlYktpdDo6V2ViVHJhbnNmb3JtT3BlcmF0aW9ucyBvcGVy
YXRpb25zMTsKKyAgICBvcGVyYXRpb25zMS5hcHBlbmRUcmFuc2xhdGUoNCwgMCwgMCk7CisgICAg
V2ViS2l0OjpXZWJUcmFuc2Zvcm1PcGVyYXRpb25zIG9wZXJhdGlvbnMyOworICAgIG9wZXJhdGlv
bnMyLmFwcGVuZFRyYW5zbGF0ZSg0LCAwLCAwKTsKKyAgICBXZWJLaXQ6OldlYlRyYW5zZm9ybU9w
ZXJhdGlvbnMgb3BlcmF0aW9uczM7CisgICAgb3BlcmF0aW9uczMuYXBwZW5kVHJhbnNsYXRlKDYs
IDAsIDApOworICAgIFdlYktpdDo6V2ViVHJhbnNmb3JtT3BlcmF0aW9ucyBvcGVyYXRpb25zNDsK
KyAgICBvcGVyYXRpb25zNC5hcHBlbmRUcmFuc2xhdGUoNiwgMCwgMCk7CiAgICAgY3VydmUtPmFk
ZEtleWZyYW1lKENDVHJhbnNmb3JtS2V5ZnJhbWU6OmNyZWF0ZSgwLCBvcGVyYXRpb25zMSwgbnVs
bHB0cikpOwogICAgIGN1cnZlLT5hZGRLZXlmcmFtZShDQ1RyYW5zZm9ybUtleWZyYW1lOjpjcmVh
dGUoMSwgb3BlcmF0aW9uczIsIG51bGxwdHIpKTsKICAgICBjdXJ2ZS0+YWRkS2V5ZnJhbWUoQ0NU
cmFuc2Zvcm1LZXlmcmFtZTo6Y3JlYXRlKDEsIG9wZXJhdGlvbnMzLCBudWxscHRyKSk7CiAgICAg
Y3VydmUtPmFkZEtleWZyYW1lKENDVHJhbnNmb3JtS2V5ZnJhbWU6OmNyZWF0ZSgyLCBvcGVyYXRp
b25zNCwgbnVsbHB0cikpOwogCi0gICAgSW50U2l6ZSBsYXllclNpemU7IC8vIGlnbm9yZWQKLQot
ICAgIGV4cGVjdFRyYW5zbGF0ZVgoNCwgY3VydmUtPmdldFZhbHVlKC0xLCBsYXllclNpemUpKTsK
LSAgICBleHBlY3RUcmFuc2xhdGVYKDQsIGN1cnZlLT5nZXRWYWx1ZSgwLCBsYXllclNpemUpKTsK
LSAgICBleHBlY3RUcmFuc2xhdGVYKDQsIGN1cnZlLT5nZXRWYWx1ZSgwLjUsIGxheWVyU2l6ZSkp
OworICAgIGV4cGVjdFRyYW5zbGF0ZVgoNCwgY3VydmUtPmdldFZhbHVlKC0xKSk7CisgICAgZXhw
ZWN0VHJhbnNsYXRlWCg0LCBjdXJ2ZS0+Z2V0VmFsdWUoMCkpOworICAgIGV4cGVjdFRyYW5zbGF0
ZVgoNCwgY3VydmUtPmdldFZhbHVlKDAuNSkpOwogCiAgICAgLy8gVGhlcmUgaXMgYSBkaXNjb250
aW51aXR5IGF0IDEuIEFueSB2YWx1ZSBiZXR3ZWVuIDQgYW5kIDYgaXMgdmFsaWQuCi0gICAgVHJh
bnNmb3JtYXRpb25NYXRyaXggdmFsdWUgPSBjdXJ2ZS0+Z2V0VmFsdWUoMSwgbGF5ZXJTaXplKTsK
KyAgICBUcmFuc2Zvcm1hdGlvbk1hdHJpeCB2YWx1ZSA9IGN1cnZlLT5nZXRWYWx1ZSgxKTsKICAg
ICBUcmFuc2Zvcm1hdGlvbk1hdHJpeDo6RGVjb21wb3NlZFR5cGUgZGVjb21wb3NlZFR5cGU7CiAg
ICAgdmFsdWUuZGVjb21wb3NlKGRlY29tcG9zZWRUeXBlKTsKICAgICBFWFBFQ1RfVFJVRShkZWNv
bXBvc2VkVHlwZS50cmFuc2xhdGVYID49IDQgJiYgZGVjb21wb3NlZFR5cGUudHJhbnNsYXRlWCA8
PSA2KTsKIAotICAgIGV4cGVjdFRyYW5zbGF0ZVgoNiwgY3VydmUtPmdldFZhbHVlKDEuNSwgbGF5
ZXJTaXplKSk7Ci0gICAgZXhwZWN0VHJhbnNsYXRlWCg2LCBjdXJ2ZS0+Z2V0VmFsdWUoMiwgbGF5
ZXJTaXplKSk7Ci0gICAgZXhwZWN0VHJhbnNsYXRlWCg2LCBjdXJ2ZS0+Z2V0VmFsdWUoMywgbGF5
ZXJTaXplKSk7CisgICAgZXhwZWN0VHJhbnNsYXRlWCg2LCBjdXJ2ZS0+Z2V0VmFsdWUoMS41KSk7
CisgICAgZXhwZWN0VHJhbnNsYXRlWCg2LCBjdXJ2ZS0+Z2V0VmFsdWUoMikpOworICAgIGV4cGVj
dFRyYW5zbGF0ZVgoNiwgY3VydmUtPmdldFZhbHVlKDMpKTsKIH0KIAogLy8gVGVzdHMgdGhhdCB0
aGUga2V5ZnJhbWVzIG1heSBiZSBhZGRlZCBvdXQgb2Ygb3JkZXIuCmRpZmYgLS1naXQgYS9Tb3Vy
Y2UvV2ViS2l0L2Nocm9taXVtL3Rlc3RzL0NDTGF5ZXJBbmltYXRpb25Db250cm9sbGVyVGVzdC5j
cHAgYi9Tb3VyY2UvV2ViS2l0L2Nocm9taXVtL3Rlc3RzL0NDTGF5ZXJBbmltYXRpb25Db250cm9s
bGVyVGVzdC5jcHAKaW5kZXggODI3MTk0YmJjNDE1MzZmMmZhYzM0OTFkM2Q1MWU0NDg4YTExNDJm
Ni4uMDJhZTUwNDQ5YTU3MDM3NDc1OWI1Yjk4YzA1ZWUwZjQzODM0Y2Q1MSAxMDA2NDQKLS0tIGEv
U291cmNlL1dlYktpdC9jaHJvbWl1bS90ZXN0cy9DQ0xheWVyQW5pbWF0aW9uQ29udHJvbGxlclRl
c3QuY3BwCisrKyBiL1NvdXJjZS9XZWJLaXQvY2hyb21pdW0vdGVzdHMvQ0NMYXllckFuaW1hdGlv
bkNvbnRyb2xsZXJUZXN0LmNwcApAQCAtMjksNyArMjksNiBAQAogI2luY2x1ZGUgIkNDQW5pbWF0
aW9uVGVzdENvbW1vbi5oIgogI2luY2x1ZGUgIkdyYXBoaWNzTGF5ZXIuaCIKICNpbmNsdWRlICJM
ZW5ndGguaCIKLSNpbmNsdWRlICJUcmFuc2xhdGVUcmFuc2Zvcm1PcGVyYXRpb24uaCIKICNpbmNs
dWRlICJjYy9DQ0FjdGl2ZUFuaW1hdGlvbi5oIgogI2luY2x1ZGUgImNjL0NDQW5pbWF0aW9uQ3Vy
dmUuaCIKIApAQCAtNDIsMjA5ICs0MSwxMSBAQCB1c2luZyBuYW1lc3BhY2UgV2ViS2l0VGVzdHM7
CiAKIG5hbWVzcGFjZSB7CiAKLXZvaWQgZXhwZWN0VHJhbnNsYXRlWChkb3VibGUgdHJhbnNsYXRl
WCwgY29uc3QgVHJhbnNmb3JtYXRpb25NYXRyaXgmIG1hdHJpeCkKLXsKLSAgICBUcmFuc2Zvcm1h
dGlvbk1hdHJpeDo6RGVjb21wb3NlZFR5cGUgZGVjb21wb3NlZFR5cGU7Ci0gICAgbWF0cml4LmRl
Y29tcG9zZShkZWNvbXBvc2VkVHlwZSk7Ci0gICAgRVhQRUNUX0ZMT0FUX0VRKHRyYW5zbGF0ZVgs
IGRlY29tcG9zZWRUeXBlLnRyYW5zbGF0ZVgpOwotfQotCiBQYXNzT3duUHRyPENDQWN0aXZlQW5p
bWF0aW9uPiBjcmVhdGVBY3RpdmVBbmltYXRpb24oUGFzc093blB0cjxDQ0FuaW1hdGlvbkN1cnZl
PiBjdXJ2ZSwgaW50IGlkLCBDQ0FjdGl2ZUFuaW1hdGlvbjo6VGFyZ2V0UHJvcGVydHkgcHJvcGVy
dHkpCiB7CiAgICAgcmV0dXJuIENDQWN0aXZlQW5pbWF0aW9uOjpjcmVhdGUoY3VydmUsIDAsIGlk
LCBwcm9wZXJ0eSk7CiB9CiAKLVRFU1QoQ0NMYXllckFuaW1hdGlvbkNvbnRyb2xsZXJUZXN0LCBj
cmVhdGVPcGFjaXR5QW5pbWF0aW9uKQotewotICAgIEZha2VMYXllckFuaW1hdGlvbkNvbnRyb2xs
ZXJDbGllbnQgZHVtbXk7Ci0gICAgT3duUHRyPENDTGF5ZXJBbmltYXRpb25Db250cm9sbGVyPiBj
b250cm9sbGVyKENDTGF5ZXJBbmltYXRpb25Db250cm9sbGVyOjpjcmVhdGUoJmR1bW15KSk7Ci0g
ICAgY29uc3QgZG91YmxlIGR1cmF0aW9uID0gMTsKLSAgICBXZWJDb3JlOjpLZXlmcmFtZVZhbHVl
TGlzdCB2YWx1ZXMoQW5pbWF0ZWRQcm9wZXJ0eU9wYWNpdHkpOwotICAgIHZhbHVlcy5pbnNlcnQo
bmV3IEZsb2F0QW5pbWF0aW9uVmFsdWUoMCwgMCkpOwotICAgIHZhbHVlcy5pbnNlcnQobmV3IEZs
b2F0QW5pbWF0aW9uVmFsdWUoZHVyYXRpb24sIDEpKTsKLQotICAgIFJlZlB0cjxBbmltYXRpb24+
IGFuaW1hdGlvbiA9IEFuaW1hdGlvbjo6Y3JlYXRlKCk7Ci0gICAgYW5pbWF0aW9uLT5zZXREdXJh
dGlvbihkdXJhdGlvbik7Ci0KLSAgICBJbnRTaXplIGJveFNpemU7Ci0gICAgY29udHJvbGxlci0+
YWRkQW5pbWF0aW9uKHZhbHVlcywgYm94U2l6ZSwgYW5pbWF0aW9uLmdldCgpLCAwLCAwLCAwKTsK
LQotICAgIEVYUEVDVF9UUlVFKGNvbnRyb2xsZXItPmhhc0FjdGl2ZUFuaW1hdGlvbigpKTsKLQot
ICAgIENDQWN0aXZlQW5pbWF0aW9uKiBhY3RpdmVBbmltYXRpb24gPSBjb250cm9sbGVyLT5nZXRB
Y3RpdmVBbmltYXRpb24oMCwgQ0NBY3RpdmVBbmltYXRpb246Ok9wYWNpdHkpOwotICAgIEVYUEVD
VF9UUlVFKGFjdGl2ZUFuaW1hdGlvbik7Ci0KLSAgICBFWFBFQ1RfRVEoMSwgYWN0aXZlQW5pbWF0
aW9uLT5pdGVyYXRpb25zKCkpOwotICAgIEVYUEVDVF9FUShDQ0FjdGl2ZUFuaW1hdGlvbjo6T3Bh
Y2l0eSwgYWN0aXZlQW5pbWF0aW9uLT50YXJnZXRQcm9wZXJ0eSgpKTsKLQotICAgIEVYUEVDVF9F
UShDQ0FuaW1hdGlvbkN1cnZlOjpGbG9hdCwgYWN0aXZlQW5pbWF0aW9uLT5jdXJ2ZSgpLT50eXBl
KCkpOwotCi0gICAgY29uc3QgQ0NGbG9hdEFuaW1hdGlvbkN1cnZlKiBjdXJ2ZSA9IGFjdGl2ZUFu
aW1hdGlvbi0+Y3VydmUoKS0+dG9GbG9hdEFuaW1hdGlvbkN1cnZlKCk7Ci0gICAgRVhQRUNUX1RS
VUUoY3VydmUpOwotCi0gICAgRVhQRUNUX0VRKDAsIGN1cnZlLT5nZXRWYWx1ZSgwKSk7Ci0gICAg
RVhQRUNUX0VRKDEsIGN1cnZlLT5nZXRWYWx1ZShkdXJhdGlvbikpOwotfQotCi1URVNUKENDTGF5
ZXJBbmltYXRpb25Db250cm9sbGVyVGVzdCwgY3JlYXRlVHJhbnNmb3JtQW5pbWF0aW9uKQotewot
ICAgIEZha2VMYXllckFuaW1hdGlvbkNvbnRyb2xsZXJDbGllbnQgZHVtbXk7Ci0gICAgT3duUHRy
PENDTGF5ZXJBbmltYXRpb25Db250cm9sbGVyPiBjb250cm9sbGVyKENDTGF5ZXJBbmltYXRpb25D
b250cm9sbGVyOjpjcmVhdGUoJmR1bW15KSk7Ci0gICAgY29uc3QgZG91YmxlIGR1cmF0aW9uID0g
MTsKLSAgICBXZWJDb3JlOjpLZXlmcmFtZVZhbHVlTGlzdCB2YWx1ZXMoQW5pbWF0ZWRQcm9wZXJ0
eVdlYmtpdFRyYW5zZm9ybSk7Ci0KLSAgICBUcmFuc2Zvcm1PcGVyYXRpb25zIG9wZXJhdGlvbnMx
OwotICAgIG9wZXJhdGlvbnMxLm9wZXJhdGlvbnMoKS5hcHBlbmQoVHJhbnNsYXRlVHJhbnNmb3Jt
T3BlcmF0aW9uOjpjcmVhdGUoTGVuZ3RoKDIsIEZpeGVkKSwgTGVuZ3RoKDAsIEZpeGVkKSwgVHJh
bnNmb3JtT3BlcmF0aW9uOjpUUkFOU0xBVEVfWCkpOwotICAgIHZhbHVlcy5pbnNlcnQobmV3IFRy
YW5zZm9ybUFuaW1hdGlvblZhbHVlKDAsICZvcGVyYXRpb25zMSkpOwotCi0gICAgVHJhbnNmb3Jt
T3BlcmF0aW9ucyBvcGVyYXRpb25zMjsKLSAgICBvcGVyYXRpb25zMi5vcGVyYXRpb25zKCkuYXBw
ZW5kKFRyYW5zbGF0ZVRyYW5zZm9ybU9wZXJhdGlvbjo6Y3JlYXRlKExlbmd0aCg0LCBGaXhlZCks
IExlbmd0aCgwLCBGaXhlZCksIFRyYW5zZm9ybU9wZXJhdGlvbjo6VFJBTlNMQVRFX1gpKTsKLSAg
ICB2YWx1ZXMuaW5zZXJ0KG5ldyBUcmFuc2Zvcm1BbmltYXRpb25WYWx1ZShkdXJhdGlvbiwgJm9w
ZXJhdGlvbnMyKSk7Ci0KLSAgICBSZWZQdHI8QW5pbWF0aW9uPiBhbmltYXRpb24gPSBBbmltYXRp
b246OmNyZWF0ZSgpOwotICAgIGFuaW1hdGlvbi0+c2V0RHVyYXRpb24oZHVyYXRpb24pOwotCi0g
ICAgSW50U2l6ZSBib3hTaXplOwotICAgIGNvbnRyb2xsZXItPmFkZEFuaW1hdGlvbih2YWx1ZXMs
IGJveFNpemUsIGFuaW1hdGlvbi5nZXQoKSwgMCwgMCwgMCk7Ci0KLSAgICBFWFBFQ1RfVFJVRShj
b250cm9sbGVyLT5oYXNBY3RpdmVBbmltYXRpb24oKSk7Ci0KLSAgICBDQ0FjdGl2ZUFuaW1hdGlv
biogYWN0aXZlQW5pbWF0aW9uID0gY29udHJvbGxlci0+Z2V0QWN0aXZlQW5pbWF0aW9uKDAsIEND
QWN0aXZlQW5pbWF0aW9uOjpUcmFuc2Zvcm0pOwotICAgIEVYUEVDVF9UUlVFKGFjdGl2ZUFuaW1h
dGlvbik7Ci0KLSAgICBFWFBFQ1RfRVEoMSwgYWN0aXZlQW5pbWF0aW9uLT5pdGVyYXRpb25zKCkp
OwotICAgIEVYUEVDVF9FUShDQ0FjdGl2ZUFuaW1hdGlvbjo6VHJhbnNmb3JtLCBhY3RpdmVBbmlt
YXRpb24tPnRhcmdldFByb3BlcnR5KCkpOwotCi0gICAgRVhQRUNUX0VRKENDQW5pbWF0aW9uQ3Vy
dmU6OlRyYW5zZm9ybSwgYWN0aXZlQW5pbWF0aW9uLT5jdXJ2ZSgpLT50eXBlKCkpOwotCi0gICAg
Y29uc3QgQ0NUcmFuc2Zvcm1BbmltYXRpb25DdXJ2ZSogY3VydmUgPSBhY3RpdmVBbmltYXRpb24t
PmN1cnZlKCktPnRvVHJhbnNmb3JtQW5pbWF0aW9uQ3VydmUoKTsKLSAgICBFWFBFQ1RfVFJVRShj
dXJ2ZSk7Ci0KLSAgICBleHBlY3RUcmFuc2xhdGVYKDIsIGN1cnZlLT5nZXRWYWx1ZSgwLCBib3hT
aXplKSk7Ci0gICAgZXhwZWN0VHJhbnNsYXRlWCg0LCBjdXJ2ZS0+Z2V0VmFsdWUoZHVyYXRpb24s
IGJveFNpemUpKTsKLX0KLQotVEVTVChDQ0xheWVyQW5pbWF0aW9uQ29udHJvbGxlclRlc3QsIGNy
ZWF0ZVJldmVyc2VkQW5pbWF0aW9uKQotewotICAgIEZha2VMYXllckFuaW1hdGlvbkNvbnRyb2xs
ZXJDbGllbnQgZHVtbXk7Ci0gICAgT3duUHRyPENDTGF5ZXJBbmltYXRpb25Db250cm9sbGVyPiBj
b250cm9sbGVyKENDTGF5ZXJBbmltYXRpb25Db250cm9sbGVyOjpjcmVhdGUoJmR1bW15KSk7Ci0g
ICAgY29uc3QgZG91YmxlIGR1cmF0aW9uID0gMTsKLSAgICBXZWJDb3JlOjpLZXlmcmFtZVZhbHVl
TGlzdCB2YWx1ZXMoQW5pbWF0ZWRQcm9wZXJ0eVdlYmtpdFRyYW5zZm9ybSk7Ci0KLSAgICBUcmFu
c2Zvcm1PcGVyYXRpb25zIG9wZXJhdGlvbnMxOwotICAgIG9wZXJhdGlvbnMxLm9wZXJhdGlvbnMo
KS5hcHBlbmQoVHJhbnNsYXRlVHJhbnNmb3JtT3BlcmF0aW9uOjpjcmVhdGUoTGVuZ3RoKDIsIEZp
eGVkKSwgTGVuZ3RoKDAsIEZpeGVkKSwgVHJhbnNmb3JtT3BlcmF0aW9uOjpUUkFOU0xBVEVfWCkp
OwotICAgIHZhbHVlcy5pbnNlcnQobmV3IFRyYW5zZm9ybUFuaW1hdGlvblZhbHVlKDAsICZvcGVy
YXRpb25zMSkpOwotCi0gICAgVHJhbnNmb3JtT3BlcmF0aW9ucyBvcGVyYXRpb25zMjsKLSAgICBv
cGVyYXRpb25zMi5vcGVyYXRpb25zKCkuYXBwZW5kKFRyYW5zbGF0ZVRyYW5zZm9ybU9wZXJhdGlv
bjo6Y3JlYXRlKExlbmd0aCg0LCBGaXhlZCksIExlbmd0aCgwLCBGaXhlZCksIFRyYW5zZm9ybU9w
ZXJhdGlvbjo6VFJBTlNMQVRFX1gpKTsKLSAgICB2YWx1ZXMuaW5zZXJ0KG5ldyBUcmFuc2Zvcm1B
bmltYXRpb25WYWx1ZShkdXJhdGlvbiwgJm9wZXJhdGlvbnMyKSk7Ci0KLSAgICBSZWZQdHI8QW5p
bWF0aW9uPiBhbmltYXRpb24gPSBBbmltYXRpb246OmNyZWF0ZSgpOwotICAgIGFuaW1hdGlvbi0+
c2V0RHVyYXRpb24oZHVyYXRpb24pOwotICAgIGFuaW1hdGlvbi0+c2V0RGlyZWN0aW9uKEFuaW1h
dGlvbjo6QW5pbWF0aW9uRGlyZWN0aW9uUmV2ZXJzZSk7Ci0KLSAgICBJbnRTaXplIGJveFNpemU7
Ci0gICAgY29udHJvbGxlci0+YWRkQW5pbWF0aW9uKHZhbHVlcywgYm94U2l6ZSwgYW5pbWF0aW9u
LmdldCgpLCAwLCAwLCAwKTsKLQotICAgIEVYUEVDVF9UUlVFKGNvbnRyb2xsZXItPmhhc0FjdGl2
ZUFuaW1hdGlvbigpKTsKLQotICAgIENDQWN0aXZlQW5pbWF0aW9uKiBhY3RpdmVBbmltYXRpb24g
PSBjb250cm9sbGVyLT5nZXRBY3RpdmVBbmltYXRpb24oMCwgQ0NBY3RpdmVBbmltYXRpb246OlRy
YW5zZm9ybSk7Ci0gICAgRVhQRUNUX1RSVUUoYWN0aXZlQW5pbWF0aW9uKTsKLQotICAgIEVYUEVD
VF9FUSgxLCBhY3RpdmVBbmltYXRpb24tPml0ZXJhdGlvbnMoKSk7Ci0gICAgRVhQRUNUX0VRKEND
QWN0aXZlQW5pbWF0aW9uOjpUcmFuc2Zvcm0sIGFjdGl2ZUFuaW1hdGlvbi0+dGFyZ2V0UHJvcGVy
dHkoKSk7Ci0KLSAgICBFWFBFQ1RfRVEoQ0NBbmltYXRpb25DdXJ2ZTo6VHJhbnNmb3JtLCBhY3Rp
dmVBbmltYXRpb24tPmN1cnZlKCktPnR5cGUoKSk7Ci0KLSAgICBjb25zdCBDQ1RyYW5zZm9ybUFu
aW1hdGlvbkN1cnZlKiBjdXJ2ZSA9IGFjdGl2ZUFuaW1hdGlvbi0+Y3VydmUoKS0+dG9UcmFuc2Zv
cm1BbmltYXRpb25DdXJ2ZSgpOwotICAgIEVYUEVDVF9UUlVFKGN1cnZlKTsKLQotICAgIGV4cGVj
dFRyYW5zbGF0ZVgoNCwgY3VydmUtPmdldFZhbHVlKDAsIGJveFNpemUpKTsKLSAgICBleHBlY3RU
cmFuc2xhdGVYKDIsIGN1cnZlLT5nZXRWYWx1ZShkdXJhdGlvbiwgYm94U2l6ZSkpOwotfQotCi1U
RVNUKENDTGF5ZXJBbmltYXRpb25Db250cm9sbGVyVGVzdCwgY3JlYXRlQWx0ZXJuYXRpbmdBbmlt
YXRpb24pCi17Ci0gICAgRmFrZUxheWVyQW5pbWF0aW9uQ29udHJvbGxlckNsaWVudCBkdW1teTsK
LSAgICBPd25QdHI8Q0NMYXllckFuaW1hdGlvbkNvbnRyb2xsZXI+IGNvbnRyb2xsZXIoQ0NMYXll
ckFuaW1hdGlvbkNvbnRyb2xsZXI6OmNyZWF0ZSgmZHVtbXkpKTsKLSAgICBjb25zdCBkb3VibGUg
ZHVyYXRpb24gPSAxOwotICAgIFdlYkNvcmU6OktleWZyYW1lVmFsdWVMaXN0IHZhbHVlcyhBbmlt
YXRlZFByb3BlcnR5V2Via2l0VHJhbnNmb3JtKTsKLQotICAgIFRyYW5zZm9ybU9wZXJhdGlvbnMg
b3BlcmF0aW9uczE7Ci0gICAgb3BlcmF0aW9uczEub3BlcmF0aW9ucygpLmFwcGVuZChUcmFuc2xh
dGVUcmFuc2Zvcm1PcGVyYXRpb246OmNyZWF0ZShMZW5ndGgoMiwgRml4ZWQpLCBMZW5ndGgoMCwg
Rml4ZWQpLCBUcmFuc2Zvcm1PcGVyYXRpb246OlRSQU5TTEFURV9YKSk7Ci0gICAgdmFsdWVzLmlu
c2VydChuZXcgVHJhbnNmb3JtQW5pbWF0aW9uVmFsdWUoMCwgJm9wZXJhdGlvbnMxKSk7Ci0KLSAg
ICBUcmFuc2Zvcm1PcGVyYXRpb25zIG9wZXJhdGlvbnMyOwotICAgIG9wZXJhdGlvbnMyLm9wZXJh
dGlvbnMoKS5hcHBlbmQoVHJhbnNsYXRlVHJhbnNmb3JtT3BlcmF0aW9uOjpjcmVhdGUoTGVuZ3Ro
KDQsIEZpeGVkKSwgTGVuZ3RoKDAsIEZpeGVkKSwgVHJhbnNmb3JtT3BlcmF0aW9uOjpUUkFOU0xB
VEVfWCkpOwotICAgIHZhbHVlcy5pbnNlcnQobmV3IFRyYW5zZm9ybUFuaW1hdGlvblZhbHVlKGR1
cmF0aW9uLCAmb3BlcmF0aW9uczIpKTsKLQotICAgIFJlZlB0cjxBbmltYXRpb24+IGFuaW1hdGlv
biA9IEFuaW1hdGlvbjo6Y3JlYXRlKCk7Ci0gICAgYW5pbWF0aW9uLT5zZXREdXJhdGlvbihkdXJh
dGlvbik7Ci0gICAgYW5pbWF0aW9uLT5zZXREaXJlY3Rpb24oQW5pbWF0aW9uOjpBbmltYXRpb25E
aXJlY3Rpb25BbHRlcm5hdGUpOwotICAgIGFuaW1hdGlvbi0+c2V0SXRlcmF0aW9uQ291bnQoMik7
Ci0KLSAgICBJbnRTaXplIGJveFNpemU7Ci0gICAgY29udHJvbGxlci0+YWRkQW5pbWF0aW9uKHZh
bHVlcywgYm94U2l6ZSwgYW5pbWF0aW9uLmdldCgpLCAwLCAwLCAwKTsKLQotICAgIEVYUEVDVF9U
UlVFKGNvbnRyb2xsZXItPmhhc0FjdGl2ZUFuaW1hdGlvbigpKTsKLQotICAgIENDQWN0aXZlQW5p
bWF0aW9uKiBhY3RpdmVBbmltYXRpb24gPSBjb250cm9sbGVyLT5nZXRBY3RpdmVBbmltYXRpb24o
MCwgQ0NBY3RpdmVBbmltYXRpb246OlRyYW5zZm9ybSk7Ci0gICAgRVhQRUNUX1RSVUUoYWN0aXZl
QW5pbWF0aW9uKTsKLSAgICBFWFBFQ1RfVFJVRShhY3RpdmVBbmltYXRpb24tPmFsdGVybmF0ZXNE
aXJlY3Rpb24oKSk7Ci0KLSAgICBFWFBFQ1RfRVEoMiwgYWN0aXZlQW5pbWF0aW9uLT5pdGVyYXRp
b25zKCkpOwotICAgIEVYUEVDVF9FUShDQ0FjdGl2ZUFuaW1hdGlvbjo6VHJhbnNmb3JtLCBhY3Rp
dmVBbmltYXRpb24tPnRhcmdldFByb3BlcnR5KCkpOwotCi0gICAgRVhQRUNUX0VRKENDQW5pbWF0
aW9uQ3VydmU6OlRyYW5zZm9ybSwgYWN0aXZlQW5pbWF0aW9uLT5jdXJ2ZSgpLT50eXBlKCkpOwot
Ci0gICAgY29uc3QgQ0NUcmFuc2Zvcm1BbmltYXRpb25DdXJ2ZSogY3VydmUgPSBhY3RpdmVBbmlt
YXRpb24tPmN1cnZlKCktPnRvVHJhbnNmb3JtQW5pbWF0aW9uQ3VydmUoKTsKLSAgICBFWFBFQ1Rf
VFJVRShjdXJ2ZSk7Ci0KLSAgICBleHBlY3RUcmFuc2xhdGVYKDIsIGN1cnZlLT5nZXRWYWx1ZSgw
LCBib3hTaXplKSk7Ci0gICAgZXhwZWN0VHJhbnNsYXRlWCg0LCBjdXJ2ZS0+Z2V0VmFsdWUoZHVy
YXRpb24sIGJveFNpemUpKTsKLX0KLQotVEVTVChDQ0xheWVyQW5pbWF0aW9uQ29udHJvbGxlclRl
c3QsIGNyZWF0ZVJldmVyc2VkQWx0ZXJuYXRpbmdBbmltYXRpb24pCi17Ci0gICAgRmFrZUxheWVy
QW5pbWF0aW9uQ29udHJvbGxlckNsaWVudCBkdW1teTsKLSAgICBPd25QdHI8Q0NMYXllckFuaW1h
dGlvbkNvbnRyb2xsZXI+IGNvbnRyb2xsZXIoQ0NMYXllckFuaW1hdGlvbkNvbnRyb2xsZXI6OmNy
ZWF0ZSgmZHVtbXkpKTsKLSAgICBjb25zdCBkb3VibGUgZHVyYXRpb24gPSAxOwotICAgIFdlYkNv
cmU6OktleWZyYW1lVmFsdWVMaXN0IHZhbHVlcyhBbmltYXRlZFByb3BlcnR5V2Via2l0VHJhbnNm
b3JtKTsKLQotICAgIFRyYW5zZm9ybU9wZXJhdGlvbnMgb3BlcmF0aW9uczE7Ci0gICAgb3BlcmF0
aW9uczEub3BlcmF0aW9ucygpLmFwcGVuZChUcmFuc2xhdGVUcmFuc2Zvcm1PcGVyYXRpb246OmNy
ZWF0ZShMZW5ndGgoMiwgRml4ZWQpLCBMZW5ndGgoMCwgRml4ZWQpLCBUcmFuc2Zvcm1PcGVyYXRp
b246OlRSQU5TTEFURV9YKSk7Ci0gICAgdmFsdWVzLmluc2VydChuZXcgVHJhbnNmb3JtQW5pbWF0
aW9uVmFsdWUoMCwgJm9wZXJhdGlvbnMxKSk7Ci0KLSAgICBUcmFuc2Zvcm1PcGVyYXRpb25zIG9w
ZXJhdGlvbnMyOwotICAgIG9wZXJhdGlvbnMyLm9wZXJhdGlvbnMoKS5hcHBlbmQoVHJhbnNsYXRl
VHJhbnNmb3JtT3BlcmF0aW9uOjpjcmVhdGUoTGVuZ3RoKDQsIEZpeGVkKSwgTGVuZ3RoKDAsIEZp
eGVkKSwgVHJhbnNmb3JtT3BlcmF0aW9uOjpUUkFOU0xBVEVfWCkpOwotICAgIHZhbHVlcy5pbnNl
cnQobmV3IFRyYW5zZm9ybUFuaW1hdGlvblZhbHVlKGR1cmF0aW9uLCAmb3BlcmF0aW9uczIpKTsK
LQotICAgIFJlZlB0cjxBbmltYXRpb24+IGFuaW1hdGlvbiA9IEFuaW1hdGlvbjo6Y3JlYXRlKCk7
Ci0gICAgYW5pbWF0aW9uLT5zZXREdXJhdGlvbihkdXJhdGlvbik7Ci0gICAgYW5pbWF0aW9uLT5z
ZXREaXJlY3Rpb24oQW5pbWF0aW9uOjpBbmltYXRpb25EaXJlY3Rpb25BbHRlcm5hdGVSZXZlcnNl
KTsKLSAgICBhbmltYXRpb24tPnNldEl0ZXJhdGlvbkNvdW50KDIpOwotCi0gICAgSW50U2l6ZSBi
b3hTaXplOwotICAgIGNvbnRyb2xsZXItPmFkZEFuaW1hdGlvbih2YWx1ZXMsIGJveFNpemUsIGFu
aW1hdGlvbi5nZXQoKSwgMCwgMCwgMCk7Ci0KLSAgICBFWFBFQ1RfVFJVRShjb250cm9sbGVyLT5o
YXNBY3RpdmVBbmltYXRpb24oKSk7Ci0KLSAgICBDQ0FjdGl2ZUFuaW1hdGlvbiogYWN0aXZlQW5p
bWF0aW9uID0gY29udHJvbGxlci0+Z2V0QWN0aXZlQW5pbWF0aW9uKDAsIENDQWN0aXZlQW5pbWF0
aW9uOjpUcmFuc2Zvcm0pOwotICAgIEVYUEVDVF9UUlVFKGFjdGl2ZUFuaW1hdGlvbik7Ci0gICAg
RVhQRUNUX1RSVUUoYWN0aXZlQW5pbWF0aW9uLT5hbHRlcm5hdGVzRGlyZWN0aW9uKCkpOwotCi0g
ICAgRVhQRUNUX0VRKDIsIGFjdGl2ZUFuaW1hdGlvbi0+aXRlcmF0aW9ucygpKTsKLSAgICBFWFBF
Q1RfRVEoQ0NBY3RpdmVBbmltYXRpb246OlRyYW5zZm9ybSwgYWN0aXZlQW5pbWF0aW9uLT50YXJn
ZXRQcm9wZXJ0eSgpKTsKLQotICAgIEVYUEVDVF9FUShDQ0FuaW1hdGlvbkN1cnZlOjpUcmFuc2Zv
cm0sIGFjdGl2ZUFuaW1hdGlvbi0+Y3VydmUoKS0+dHlwZSgpKTsKLQotICAgIGNvbnN0IENDVHJh
bnNmb3JtQW5pbWF0aW9uQ3VydmUqIGN1cnZlID0gYWN0aXZlQW5pbWF0aW9uLT5jdXJ2ZSgpLT50
b1RyYW5zZm9ybUFuaW1hdGlvbkN1cnZlKCk7Ci0gICAgRVhQRUNUX1RSVUUoY3VydmUpOwotCi0g
ICAgZXhwZWN0VHJhbnNsYXRlWCg0LCBjdXJ2ZS0+Z2V0VmFsdWUoMCwgYm94U2l6ZSkpOwotICAg
IGV4cGVjdFRyYW5zbGF0ZVgoMiwgY3VydmUtPmdldFZhbHVlKGR1cmF0aW9uLCBib3hTaXplKSk7
Ci19Ci0KIFRFU1QoQ0NMYXllckFuaW1hdGlvbkNvbnRyb2xsZXJUZXN0LCBzeW5jTmV3QW5pbWF0
aW9uKQogewogICAgIEZha2VMYXllckFuaW1hdGlvbkNvbnRyb2xsZXJDbGllbnQgZHVtbXlJbXBs
OwpAQCAtMzMzLDcgKzEzNCw2IEBAIFRFU1QoQ0NMYXllckFuaW1hdGlvbkNvbnRyb2xsZXJUZXN0
LCBzeW5jUGF1c2VBbmRSZXN1bWUpCiAgICAgRVhQRUNUX0VRKENDQWN0aXZlQW5pbWF0aW9uOjpS
dW5uaW5nLCBjb250cm9sbGVySW1wbC0+Z2V0QWN0aXZlQW5pbWF0aW9uKDAsIENDQWN0aXZlQW5p
bWF0aW9uOjpPcGFjaXR5KS0+cnVuU3RhdGUoKSk7CiB9CiAKLQogVEVTVChDQ0xheWVyQW5pbWF0
aW9uQ29udHJvbGxlclRlc3QsIGRvTm90U3luY0ZpbmlzaGVkQW5pbWF0aW9uKQogewogICAgIEZh
a2VMYXllckFuaW1hdGlvbkNvbnRyb2xsZXJDbGllbnQgZHVtbXlJbXBsOwpAQCAtMzc1LDcgKzE3
NSw3IEBAIFRFU1QoQ0NMYXllckFuaW1hdGlvbkNvbnRyb2xsZXJUZXN0LCBUcml2aWFsVHJhbnNp
dGlvbikKIAogICAgIE93blB0cjxDQ0FjdGl2ZUFuaW1hdGlvbj4gdG9BZGQoY3JlYXRlQWN0aXZl
QW5pbWF0aW9uKGFkb3B0UHRyKG5ldyBGYWtlRmxvYXRUcmFuc2l0aW9uKDEsIDAsIDEpKSwgMSwg
Q0NBY3RpdmVBbmltYXRpb246Ok9wYWNpdHkpKTsKIAotICAgIGNvbnRyb2xsZXItPmFkZCh0b0Fk
ZC5yZWxlYXNlKCkpOworICAgIGNvbnRyb2xsZXItPmFkZEFuaW1hdGlvbih0b0FkZC5yZWxlYXNl
KCkpOwogICAgIGNvbnRyb2xsZXItPmFuaW1hdGUoMCwgZXZlbnRzLmdldCgpKTsKICAgICBFWFBF
Q1RfVFJVRShjb250cm9sbGVyLT5oYXNBY3RpdmVBbmltYXRpb24oKSk7CiAgICAgRVhQRUNUX0VR
KDAsIGR1bW15Lm9wYWNpdHkoKSk7CkBAIC0zOTYsNyArMTk2LDcgQEAgVEVTVChDQ0xheWVyQW5p
bWF0aW9uQ29udHJvbGxlclRlc3QsIEFuaW1hdGlvbnNXYWl0aW5nRm9yU3RhcnRUaW1lRG9Ob3RG
aW5pc2hJZlQKICAgICB0b0FkZC0+c2V0TmVlZHNTeW5jaHJvbml6ZWRTdGFydFRpbWUodHJ1ZSk7
CiAKICAgICAvLyBXZSBzaG91bGQgcGF1c2UgYXQgdGhlIGZpcnN0IGtleWZyYW1lIGluZGVmaW5p
dGVseSB3YWl0aW5nIGZvciB0aGF0IGFuaW1hdGlvbiB0byBzdGFydC4KLSAgICBjb250cm9sbGVy
LT5hZGQodG9BZGQucmVsZWFzZSgpKTsKKyAgICBjb250cm9sbGVyLT5hZGRBbmltYXRpb24odG9B
ZGQucmVsZWFzZSgpKTsKICAgICBjb250cm9sbGVyLT5hbmltYXRlKDAsIGV2ZW50cy5nZXQoKSk7
CiAgICAgRVhQRUNUX1RSVUUoY29udHJvbGxlci0+aGFzQWN0aXZlQW5pbWF0aW9uKCkpOwogICAg
IEVYUEVDVF9FUSgwLCBkdW1teS5vcGFjaXR5KCkpOwpAQCAtNDIyLDggKzIyMiw4IEBAIFRFU1Qo
Q0NMYXllckFuaW1hdGlvbkNvbnRyb2xsZXJUZXN0LCBUcml2aWFsUXVldWluZykKICAgICBPd25Q
dHI8Q0NMYXllckFuaW1hdGlvbkNvbnRyb2xsZXI+IGNvbnRyb2xsZXIoCiAgICAgICAgIENDTGF5
ZXJBbmltYXRpb25Db250cm9sbGVyOjpjcmVhdGUoJmR1bW15KSk7CiAKLSAgICBjb250cm9sbGVy
LT5hZGQoY3JlYXRlQWN0aXZlQW5pbWF0aW9uKGFkb3B0UHRyKG5ldyBGYWtlRmxvYXRUcmFuc2l0
aW9uKDEsIDAsIDEpKSwgMSwgQ0NBY3RpdmVBbmltYXRpb246Ok9wYWNpdHkpKTsKLSAgICBjb250
cm9sbGVyLT5hZGQoY3JlYXRlQWN0aXZlQW5pbWF0aW9uKGFkb3B0UHRyKG5ldyBGYWtlRmxvYXRU
cmFuc2l0aW9uKDEsIDEsIDAuNSkpLCAyLCBDQ0FjdGl2ZUFuaW1hdGlvbjo6T3BhY2l0eSkpOwor
ICAgIGNvbnRyb2xsZXItPmFkZEFuaW1hdGlvbihjcmVhdGVBY3RpdmVBbmltYXRpb24oYWRvcHRQ
dHIobmV3IEZha2VGbG9hdFRyYW5zaXRpb24oMSwgMCwgMSkpLCAxLCBDQ0FjdGl2ZUFuaW1hdGlv
bjo6T3BhY2l0eSkpOworICAgIGNvbnRyb2xsZXItPmFkZEFuaW1hdGlvbihjcmVhdGVBY3RpdmVB
bmltYXRpb24oYWRvcHRQdHIobmV3IEZha2VGbG9hdFRyYW5zaXRpb24oMSwgMSwgMC41KSksIDIs
IENDQWN0aXZlQW5pbWF0aW9uOjpPcGFjaXR5KSk7CiAKICAgICBjb250cm9sbGVyLT5hbmltYXRl
KDAsIGV2ZW50cy5nZXQoKSk7CiAgICAgRVhQRUNUX1RSVUUoY29udHJvbGxlci0+aGFzQWN0aXZl
QW5pbWF0aW9uKCkpOwpAQCAtNDQzLDE0ICsyNDMsMTQgQEAgVEVTVChDQ0xheWVyQW5pbWF0aW9u
Q29udHJvbGxlclRlc3QsIEludGVycnVwdCkKICAgICBGYWtlTGF5ZXJBbmltYXRpb25Db250cm9s
bGVyQ2xpZW50IGR1bW15OwogICAgIE93blB0cjxDQ0xheWVyQW5pbWF0aW9uQ29udHJvbGxlcj4g
Y29udHJvbGxlcigKICAgICAgICAgQ0NMYXllckFuaW1hdGlvbkNvbnRyb2xsZXI6OmNyZWF0ZSgm
ZHVtbXkpKTsKLSAgICBjb250cm9sbGVyLT5hZGQoY3JlYXRlQWN0aXZlQW5pbWF0aW9uKGFkb3B0
UHRyKG5ldyBGYWtlRmxvYXRUcmFuc2l0aW9uKDEsIDAsIDEpKSwgMSwgQ0NBY3RpdmVBbmltYXRp
b246Ok9wYWNpdHkpKTsKKyAgICBjb250cm9sbGVyLT5hZGRBbmltYXRpb24oY3JlYXRlQWN0aXZl
QW5pbWF0aW9uKGFkb3B0UHRyKG5ldyBGYWtlRmxvYXRUcmFuc2l0aW9uKDEsIDAsIDEpKSwgMSwg
Q0NBY3RpdmVBbmltYXRpb246Ok9wYWNpdHkpKTsKICAgICBjb250cm9sbGVyLT5hbmltYXRlKDAs
IGV2ZW50cy5nZXQoKSk7CiAgICAgRVhQRUNUX1RSVUUoY29udHJvbGxlci0+aGFzQWN0aXZlQW5p
bWF0aW9uKCkpOwogICAgIEVYUEVDVF9FUSgwLCBkdW1teS5vcGFjaXR5KCkpOwogCiAgICAgT3du
UHRyPENDQWN0aXZlQW5pbWF0aW9uPiB0b0FkZChjcmVhdGVBY3RpdmVBbmltYXRpb24oYWRvcHRQ
dHIobmV3IEZha2VGbG9hdFRyYW5zaXRpb24oMSwgMSwgMC41KSksIDIsIENDQWN0aXZlQW5pbWF0
aW9uOjpPcGFjaXR5KSk7CiAgICAgdG9BZGQtPnNldFJ1blN0YXRlKENDQWN0aXZlQW5pbWF0aW9u
OjpXYWl0aW5nRm9yTmV4dFRpY2ssIDApOwotICAgIGNvbnRyb2xsZXItPmFkZCh0b0FkZC5yZWxl
YXNlKCkpOworICAgIGNvbnRyb2xsZXItPmFkZEFuaW1hdGlvbih0b0FkZC5yZWxlYXNlKCkpOwog
CiAgICAgLy8gU2luY2UgdGhlIGFuaW1hdGlvbiB3YXMgaW4gdGhlIFdhaXRpbmdGb3JOZXh0VGlj
ayBzdGF0ZSwgaXQgc2hvdWxkIHN0YXJ0IHJpZ2h0IGluCiAgICAgLy8gdGhpcyBjYWxsIHRvIGFu
aW1hdGUuCkBAIC00NzAsOSArMjcwLDkgQEAgVEVTVChDQ0xheWVyQW5pbWF0aW9uQ29udHJvbGxl
clRlc3QsIFNjaGVkdWxlVG9nZXRoZXJXaGVuQVByb3BlcnR5SXNCbG9ja2VkKQogICAgIE93blB0
cjxDQ0xheWVyQW5pbWF0aW9uQ29udHJvbGxlcj4gY29udHJvbGxlcigKICAgICAgICAgQ0NMYXll
ckFuaW1hdGlvbkNvbnRyb2xsZXI6OmNyZWF0ZSgmZHVtbXkpKTsKIAotICAgIGNvbnRyb2xsZXIt
PmFkZChjcmVhdGVBY3RpdmVBbmltYXRpb24oYWRvcHRQdHIobmV3IEZha2VUcmFuc2Zvcm1UcmFu
c2l0aW9uKDEpKSwgMSwgQ0NBY3RpdmVBbmltYXRpb246OlRyYW5zZm9ybSkpOwotICAgIGNvbnRy
b2xsZXItPmFkZChjcmVhdGVBY3RpdmVBbmltYXRpb24oYWRvcHRQdHIobmV3IEZha2VUcmFuc2Zv
cm1UcmFuc2l0aW9uKDEpKSwgMiwgQ0NBY3RpdmVBbmltYXRpb246OlRyYW5zZm9ybSkpOwotICAg
IGNvbnRyb2xsZXItPmFkZChjcmVhdGVBY3RpdmVBbmltYXRpb24oYWRvcHRQdHIobmV3IEZha2VG
bG9hdFRyYW5zaXRpb24oMSwgMCwgMSkpLCAyLCBDQ0FjdGl2ZUFuaW1hdGlvbjo6T3BhY2l0eSkp
OworICAgIGNvbnRyb2xsZXItPmFkZEFuaW1hdGlvbihjcmVhdGVBY3RpdmVBbmltYXRpb24oYWRv
cHRQdHIobmV3IEZha2VUcmFuc2Zvcm1UcmFuc2l0aW9uKDEpKSwgMSwgQ0NBY3RpdmVBbmltYXRp
b246OlRyYW5zZm9ybSkpOworICAgIGNvbnRyb2xsZXItPmFkZEFuaW1hdGlvbihjcmVhdGVBY3Rp
dmVBbmltYXRpb24oYWRvcHRQdHIobmV3IEZha2VUcmFuc2Zvcm1UcmFuc2l0aW9uKDEpKSwgMiwg
Q0NBY3RpdmVBbmltYXRpb246OlRyYW5zZm9ybSkpOworICAgIGNvbnRyb2xsZXItPmFkZEFuaW1h
dGlvbihjcmVhdGVBY3RpdmVBbmltYXRpb24oYWRvcHRQdHIobmV3IEZha2VGbG9hdFRyYW5zaXRp
b24oMSwgMCwgMSkpLCAyLCBDQ0FjdGl2ZUFuaW1hdGlvbjo6T3BhY2l0eSkpOwogCiAgICAgY29u
dHJvbGxlci0+YW5pbWF0ZSgwLCBldmVudHMuZ2V0KCkpOwogICAgIEVYUEVDVF9FUSgwLCBkdW1t
eS5vcGFjaXR5KCkpOwpAQCAtNDk3LDkgKzI5Nyw5IEBAIFRFU1QoQ0NMYXllckFuaW1hdGlvbkNv
bnRyb2xsZXJUZXN0LCBTY2hlZHVsZVRvZ2V0aGVyV2l0aEFuQW5pbVdhaXRpbmcpCiAgICAgT3du
UHRyPENDTGF5ZXJBbmltYXRpb25Db250cm9sbGVyPiBjb250cm9sbGVyKAogICAgICAgICBDQ0xh
eWVyQW5pbWF0aW9uQ29udHJvbGxlcjo6Y3JlYXRlKCZkdW1teSkpOwogCi0gICAgY29udHJvbGxl
ci0+YWRkKGNyZWF0ZUFjdGl2ZUFuaW1hdGlvbihhZG9wdFB0cihuZXcgRmFrZVRyYW5zZm9ybVRy
YW5zaXRpb24oMikpLCAxLCBDQ0FjdGl2ZUFuaW1hdGlvbjo6VHJhbnNmb3JtKSk7Ci0gICAgY29u
dHJvbGxlci0+YWRkKGNyZWF0ZUFjdGl2ZUFuaW1hdGlvbihhZG9wdFB0cihuZXcgRmFrZUZsb2F0
VHJhbnNpdGlvbigxLCAwLCAxKSksIDEsIENDQWN0aXZlQW5pbWF0aW9uOjpPcGFjaXR5KSk7Ci0g
ICAgY29udHJvbGxlci0+YWRkKGNyZWF0ZUFjdGl2ZUFuaW1hdGlvbihhZG9wdFB0cihuZXcgRmFr
ZUZsb2F0VHJhbnNpdGlvbigxLCAxLCAwLjUpKSwgMiwgQ0NBY3RpdmVBbmltYXRpb246Ok9wYWNp
dHkpKTsKKyAgICBjb250cm9sbGVyLT5hZGRBbmltYXRpb24oY3JlYXRlQWN0aXZlQW5pbWF0aW9u
KGFkb3B0UHRyKG5ldyBGYWtlVHJhbnNmb3JtVHJhbnNpdGlvbigyKSksIDEsIENDQWN0aXZlQW5p
bWF0aW9uOjpUcmFuc2Zvcm0pKTsKKyAgICBjb250cm9sbGVyLT5hZGRBbmltYXRpb24oY3JlYXRl
QWN0aXZlQW5pbWF0aW9uKGFkb3B0UHRyKG5ldyBGYWtlRmxvYXRUcmFuc2l0aW9uKDEsIDAsIDEp
KSwgMSwgQ0NBY3RpdmVBbmltYXRpb246Ok9wYWNpdHkpKTsKKyAgICBjb250cm9sbGVyLT5hZGRB
bmltYXRpb24oY3JlYXRlQWN0aXZlQW5pbWF0aW9uKGFkb3B0UHRyKG5ldyBGYWtlRmxvYXRUcmFu
c2l0aW9uKDEsIDEsIDAuNSkpLCAyLCBDQ0FjdGl2ZUFuaW1hdGlvbjo6T3BhY2l0eSkpOwogCiAg
ICAgLy8gQW5pbWF0aW9ucyB3aXRoIGlkIDEgc2hvdWxkIGJvdGggc3RhcnQgbm93LgogICAgIGNv
bnRyb2xsZXItPmFuaW1hdGUoMCwgZXZlbnRzLmdldCgpKTsKQEAgLTUzMCw3ICszMzAsNyBAQCBU
RVNUKENDTGF5ZXJBbmltYXRpb25Db250cm9sbGVyVGVzdCwgU2NoZWR1bGVBbmltYXRpb24pCiAg
ICAgT3duUHRyPENDQWN0aXZlQW5pbWF0aW9uPiB0b0FkZChjcmVhdGVBY3RpdmVBbmltYXRpb24o
YWRvcHRQdHIobmV3IEZha2VGbG9hdFRyYW5zaXRpb24oMSwgMCwgMSkpLCAxLCBDQ0FjdGl2ZUFu
aW1hdGlvbjo6T3BhY2l0eSkpOwogICAgIHRvQWRkLT5zZXRSdW5TdGF0ZShDQ0FjdGl2ZUFuaW1h
dGlvbjo6V2FpdGluZ0ZvclN0YXJ0VGltZSwgMCk7CiAgICAgdG9BZGQtPnNldFN0YXJ0VGltZSgx
KTsKLSAgICBjb250cm9sbGVyLT5hZGQodG9BZGQucmVsZWFzZSgpKTsKKyAgICBjb250cm9sbGVy
LT5hZGRBbmltYXRpb24odG9BZGQucmVsZWFzZSgpKTsKIAogICAgIGNvbnRyb2xsZXItPmFuaW1h
dGUoMCwgZXZlbnRzLmdldCgpKTsKICAgICBFWFBFQ1RfVFJVRShjb250cm9sbGVyLT5oYXNBY3Rp
dmVBbmltYXRpb24oKSk7CkBAIC01NTEsMTIgKzM1MSwxMiBAQCBURVNUKENDTGF5ZXJBbmltYXRp
b25Db250cm9sbGVyVGVzdCwgU2NoZWR1bGVkQW5pbWF0aW9uSW50ZXJydXB0c1J1bm5pbmdBbmlt
YXRpbwogICAgIE93blB0cjxDQ0xheWVyQW5pbWF0aW9uQ29udHJvbGxlcj4gY29udHJvbGxlcigK
ICAgICAgICAgQ0NMYXllckFuaW1hdGlvbkNvbnRyb2xsZXI6OmNyZWF0ZSgmZHVtbXkpKTsKIAot
ICAgIGNvbnRyb2xsZXItPmFkZChjcmVhdGVBY3RpdmVBbmltYXRpb24oYWRvcHRQdHIobmV3IEZh
a2VGbG9hdFRyYW5zaXRpb24oMiwgMCwgMSkpLCAxLCBDQ0FjdGl2ZUFuaW1hdGlvbjo6T3BhY2l0
eSkpOworICAgIGNvbnRyb2xsZXItPmFkZEFuaW1hdGlvbihjcmVhdGVBY3RpdmVBbmltYXRpb24o
YWRvcHRQdHIobmV3IEZha2VGbG9hdFRyYW5zaXRpb24oMiwgMCwgMSkpLCAxLCBDQ0FjdGl2ZUFu
aW1hdGlvbjo6T3BhY2l0eSkpOwogCiAgICAgT3duUHRyPENDQWN0aXZlQW5pbWF0aW9uPiB0b0Fk
ZChjcmVhdGVBY3RpdmVBbmltYXRpb24oYWRvcHRQdHIobmV3IEZha2VGbG9hdFRyYW5zaXRpb24o
MSwgMC41LCAwKSksIDIsIENDQWN0aXZlQW5pbWF0aW9uOjpPcGFjaXR5KSk7CiAgICAgdG9BZGQt
PnNldFJ1blN0YXRlKENDQWN0aXZlQW5pbWF0aW9uOjpXYWl0aW5nRm9yU3RhcnRUaW1lLCAwKTsK
ICAgICB0b0FkZC0+c2V0U3RhcnRUaW1lKDEpOwotICAgIGNvbnRyb2xsZXItPmFkZCh0b0FkZC5y
ZWxlYXNlKCkpOworICAgIGNvbnRyb2xsZXItPmFkZEFuaW1hdGlvbih0b0FkZC5yZWxlYXNlKCkp
OwogCiAgICAgLy8gRmlyc3QgMnMgb3BhY2l0eSB0cmFuc2l0aW9uIHNob3VsZCBzdGFydCBpbW1l
ZGlhdGVseS4KICAgICBjb250cm9sbGVyLT5hbmltYXRlKDAsIGV2ZW50cy5nZXQoKSk7CkBAIC01
ODIsMTQgKzM4MiwxNCBAQCBURVNUKENDTGF5ZXJBbmltYXRpb25Db250cm9sbGVyVGVzdCwgU2No
ZWR1bGVkQW5pbWF0aW9uSW50ZXJydXB0c1J1bm5pbmdBbmltYXRpbwogICAgIE93blB0cjxDQ0xh
eWVyQW5pbWF0aW9uQ29udHJvbGxlcj4gY29udHJvbGxlcigKICAgICAgICAgQ0NMYXllckFuaW1h
dGlvbkNvbnRyb2xsZXI6OmNyZWF0ZSgmZHVtbXkpKTsKIAotICAgIGNvbnRyb2xsZXItPmFkZChj
cmVhdGVBY3RpdmVBbmltYXRpb24oYWRvcHRQdHIobmV3IEZha2VGbG9hdFRyYW5zaXRpb24oMiwg
MCwgMSkpLCAxLCBDQ0FjdGl2ZUFuaW1hdGlvbjo6T3BhY2l0eSkpOworICAgIGNvbnRyb2xsZXIt
PmFkZEFuaW1hdGlvbihjcmVhdGVBY3RpdmVBbmltYXRpb24oYWRvcHRQdHIobmV3IEZha2VGbG9h
dFRyYW5zaXRpb24oMiwgMCwgMSkpLCAxLCBDQ0FjdGl2ZUFuaW1hdGlvbjo6T3BhY2l0eSkpOwog
CiAgICAgT3duUHRyPENDQWN0aXZlQW5pbWF0aW9uPiB0b0FkZChjcmVhdGVBY3RpdmVBbmltYXRp
b24oYWRvcHRQdHIobmV3IEZha2VGbG9hdFRyYW5zaXRpb24oMiwgMC41LCAwKSksIDIsIENDQWN0
aXZlQW5pbWF0aW9uOjpPcGFjaXR5KSk7CiAgICAgdG9BZGQtPnNldFJ1blN0YXRlKENDQWN0aXZl
QW5pbWF0aW9uOjpXYWl0aW5nRm9yU3RhcnRUaW1lLCAwKTsKICAgICB0b0FkZC0+c2V0U3RhcnRU
aW1lKDEpOwotICAgIGNvbnRyb2xsZXItPmFkZCh0b0FkZC5yZWxlYXNlKCkpOworICAgIGNvbnRy
b2xsZXItPmFkZEFuaW1hdGlvbih0b0FkZC5yZWxlYXNlKCkpOwogCi0gICAgY29udHJvbGxlci0+
YWRkKGNyZWF0ZUFjdGl2ZUFuaW1hdGlvbihhZG9wdFB0cihuZXcgRmFrZUZsb2F0VHJhbnNpdGlv
bigxLCAwLCAwLjc1KSksIDMsIENDQWN0aXZlQW5pbWF0aW9uOjpPcGFjaXR5KSk7CisgICAgY29u
dHJvbGxlci0+YWRkQW5pbWF0aW9uKGNyZWF0ZUFjdGl2ZUFuaW1hdGlvbihhZG9wdFB0cihuZXcg
RmFrZUZsb2F0VHJhbnNpdGlvbigxLCAwLCAwLjc1KSksIDMsIENDQWN0aXZlQW5pbWF0aW9uOjpP
cGFjaXR5KSk7CiAKICAgICAvLyBGaXJzdCAycyBvcGFjaXR5IHRyYW5zaXRpb24gc2hvdWxkIHN0
YXJ0IGltbWVkaWF0ZWx5LgogICAgIGNvbnRyb2xsZXItPmFuaW1hdGUoMCwgZXZlbnRzLmdldCgp
KTsKQEAgLTYyMCw3ICs0MjAsNyBAQCBURVNUKENDTGF5ZXJBbmltYXRpb25Db250cm9sbGVyVGVz
dCwgVHJpdmlhbExvb3BpbmcpCiAKICAgICBPd25QdHI8Q0NBY3RpdmVBbmltYXRpb24+IHRvQWRk
KGNyZWF0ZUFjdGl2ZUFuaW1hdGlvbihhZG9wdFB0cihuZXcgRmFrZUZsb2F0VHJhbnNpdGlvbigx
LCAwLCAxKSksIDEsIENDQWN0aXZlQW5pbWF0aW9uOjpPcGFjaXR5KSk7CiAgICAgdG9BZGQtPnNl
dEl0ZXJhdGlvbnMoMyk7Ci0gICAgY29udHJvbGxlci0+YWRkKHRvQWRkLnJlbGVhc2UoKSk7Cisg
ICAgY29udHJvbGxlci0+YWRkQW5pbWF0aW9uKHRvQWRkLnJlbGVhc2UoKSk7CiAKICAgICBjb250
cm9sbGVyLT5hbmltYXRlKDAsIGV2ZW50cy5nZXQoKSk7CiAgICAgRVhQRUNUX1RSVUUoY29udHJv
bGxlci0+aGFzQWN0aXZlQW5pbWF0aW9uKCkpOwpAQCAtNjU3LDcgKzQ1Nyw3IEBAIFRFU1QoQ0NM
YXllckFuaW1hdGlvbkNvbnRyb2xsZXJUZXN0LCBJbmZpbml0ZUxvb3BpbmcpCiAgICAgY29uc3Qg
aW50IGlkID0gMTsKICAgICBPd25QdHI8Q0NBY3RpdmVBbmltYXRpb24+IHRvQWRkKGNyZWF0ZUFj
dGl2ZUFuaW1hdGlvbihhZG9wdFB0cihuZXcgRmFrZUZsb2F0VHJhbnNpdGlvbigxLCAwLCAxKSks
IGlkLCBDQ0FjdGl2ZUFuaW1hdGlvbjo6T3BhY2l0eSkpOwogICAgIHRvQWRkLT5zZXRJdGVyYXRp
b25zKC0xKTsKLSAgICBjb250cm9sbGVyLT5hZGQodG9BZGQucmVsZWFzZSgpKTsKKyAgICBjb250
cm9sbGVyLT5hZGRBbmltYXRpb24odG9BZGQucmVsZWFzZSgpKTsKIAogICAgIGNvbnRyb2xsZXIt
PmFuaW1hdGUoMCwgZXZlbnRzLmdldCgpKTsKICAgICBFWFBFQ1RfVFJVRShjb250cm9sbGVyLT5o
YXNBY3RpdmVBbmltYXRpb24oKSk7CkBAIC02OTEsNyArNDkxLDcgQEAgVEVTVChDQ0xheWVyQW5p
bWF0aW9uQ29udHJvbGxlclRlc3QsIFBhdXNlUmVzdW1lKQogICAgICAgICBDQ0xheWVyQW5pbWF0
aW9uQ29udHJvbGxlcjo6Y3JlYXRlKCZkdW1teSkpOwogCiAgICAgY29uc3QgaW50IGlkID0gMTsK
LSAgICBjb250cm9sbGVyLT5hZGQoY3JlYXRlQWN0aXZlQW5pbWF0aW9uKGFkb3B0UHRyKG5ldyBG
YWtlRmxvYXRUcmFuc2l0aW9uKDEsIDAsIDEpKSwgaWQsIENDQWN0aXZlQW5pbWF0aW9uOjpPcGFj
aXR5KSk7CisgICAgY29udHJvbGxlci0+YWRkQW5pbWF0aW9uKGNyZWF0ZUFjdGl2ZUFuaW1hdGlv
bihhZG9wdFB0cihuZXcgRmFrZUZsb2F0VHJhbnNpdGlvbigxLCAwLCAxKSksIGlkLCBDQ0FjdGl2
ZUFuaW1hdGlvbjo6T3BhY2l0eSkpOwogCiAgICAgY29udHJvbGxlci0+YW5pbWF0ZSgwLCBldmVu
dHMuZ2V0KCkpOwogICAgIEVYUEVDVF9UUlVFKGNvbnRyb2xsZXItPmhhc0FjdGl2ZUFuaW1hdGlv
bigpKTsKQEAgLTcyNiw5ICs1MjYsOSBAQCBURVNUKENDTGF5ZXJBbmltYXRpb25Db250cm9sbGVy
VGVzdCwgQWJvcnRBR3JvdXBlZEFuaW1hdGlvbikKICAgICAgICAgQ0NMYXllckFuaW1hdGlvbkNv
bnRyb2xsZXI6OmNyZWF0ZSgmZHVtbXkpKTsKIAogICAgIGNvbnN0IGludCBpZCA9IDE7Ci0gICAg
Y29udHJvbGxlci0+YWRkKGNyZWF0ZUFjdGl2ZUFuaW1hdGlvbihhZG9wdFB0cihuZXcgRmFrZVRy
YW5zZm9ybVRyYW5zaXRpb24oMSkpLCBpZCwgQ0NBY3RpdmVBbmltYXRpb246OlRyYW5zZm9ybSkp
OwotICAgIGNvbnRyb2xsZXItPmFkZChjcmVhdGVBY3RpdmVBbmltYXRpb24oYWRvcHRQdHIobmV3
IEZha2VGbG9hdFRyYW5zaXRpb24oMiwgMCwgMSkpLCBpZCwgQ0NBY3RpdmVBbmltYXRpb246Ok9w
YWNpdHkpKTsKLSAgICBjb250cm9sbGVyLT5hZGQoY3JlYXRlQWN0aXZlQW5pbWF0aW9uKGFkb3B0
UHRyKG5ldyBGYWtlRmxvYXRUcmFuc2l0aW9uKDEsIDEsIDAuNzUpKSwgMiwgQ0NBY3RpdmVBbmlt
YXRpb246Ok9wYWNpdHkpKTsKKyAgICBjb250cm9sbGVyLT5hZGRBbmltYXRpb24oY3JlYXRlQWN0
aXZlQW5pbWF0aW9uKGFkb3B0UHRyKG5ldyBGYWtlVHJhbnNmb3JtVHJhbnNpdGlvbigxKSksIGlk
LCBDQ0FjdGl2ZUFuaW1hdGlvbjo6VHJhbnNmb3JtKSk7CisgICAgY29udHJvbGxlci0+YWRkQW5p
bWF0aW9uKGNyZWF0ZUFjdGl2ZUFuaW1hdGlvbihhZG9wdFB0cihuZXcgRmFrZUZsb2F0VHJhbnNp
dGlvbigyLCAwLCAxKSksIGlkLCBDQ0FjdGl2ZUFuaW1hdGlvbjo6T3BhY2l0eSkpOworICAgIGNv
bnRyb2xsZXItPmFkZEFuaW1hdGlvbihjcmVhdGVBY3RpdmVBbmltYXRpb24oYWRvcHRQdHIobmV3
IEZha2VGbG9hdFRyYW5zaXRpb24oMSwgMSwgMC43NSkpLCAyLCBDQ0FjdGl2ZUFuaW1hdGlvbjo6
T3BhY2l0eSkpOwogCiAgICAgY29udHJvbGxlci0+YW5pbWF0ZSgwLCBldmVudHMuZ2V0KCkpOwog
ICAgIEVYUEVDVF9UUlVFKGNvbnRyb2xsZXItPmhhc0FjdGl2ZUFuaW1hdGlvbigpKTsKQEAgLTc1
OCw3ICs1NTgsNyBAQCBURVNUKENDTGF5ZXJBbmltYXRpb25Db250cm9sbGVyVGVzdCwgRm9yY2VT
eW5jV2hlblN5bmNocm9uaXplZFN0YXJ0VGltZU5lZWRlZCkKIAogICAgIE93blB0cjxDQ0FjdGl2
ZUFuaW1hdGlvbj4gdG9BZGQoY3JlYXRlQWN0aXZlQW5pbWF0aW9uKGFkb3B0UHRyKG5ldyBGYWtl
RmxvYXRUcmFuc2l0aW9uKDIsIDAsIDEpKSwgMCwgQ0NBY3RpdmVBbmltYXRpb246Ok9wYWNpdHkp
KTsKICAgICB0b0FkZC0+c2V0TmVlZHNTeW5jaHJvbml6ZWRTdGFydFRpbWUodHJ1ZSk7Ci0gICAg
Y29udHJvbGxlci0+YWRkKHRvQWRkLnJlbGVhc2UoKSk7CisgICAgY29udHJvbGxlci0+YWRkQW5p
bWF0aW9uKHRvQWRkLnJlbGVhc2UoKSk7CiAKICAgICBjb250cm9sbGVyLT5hbmltYXRlKDAsIDAp
OwogICAgIEVYUEVDVF9UUlVFKGNvbnRyb2xsZXItPmhhc0FjdGl2ZUFuaW1hdGlvbigpKTsKZGlm
ZiAtLWdpdCBhL1NvdXJjZS9XZWJLaXQvY2hyb21pdW0vdGVzdHMvQ0NMYXllclRyZWVIb3N0VGVz
dC5jcHAgYi9Tb3VyY2UvV2ViS2l0L2Nocm9taXVtL3Rlc3RzL0NDTGF5ZXJUcmVlSG9zdFRlc3Qu
Y3BwCmluZGV4IDEyNzVlYzg1NDI4MTA5OGMzMWUxYjgwMzA2MWM5Y2NhNGRiZjVkOGMuLmQ3MTM0
MTM3ZDA1OGEzNjFjMGUzN2ZkZTM0YjkzODMzZDRkZmM3ZDggMTAwNjQ0Ci0tLSBhL1NvdXJjZS9X
ZWJLaXQvY2hyb21pdW0vdGVzdHMvQ0NMYXllclRyZWVIb3N0VGVzdC5jcHAKKysrIGIvU291cmNl
L1dlYktpdC9jaHJvbWl1bS90ZXN0cy9DQ0xheWVyVHJlZUhvc3RUZXN0LmNwcApAQCAtMjg0NSw3
ICsyODQ1LDcgQEAgcHVibGljOgogICAgICAgICAvLyBBbnkgdmFsaWQgQ0NBbmltYXRpb25DdXJ2
ZSB3aWxsIGRvIGhlcmUuCiAgICAgICAgIE93blB0cjxDQ0FuaW1hdGlvbkN1cnZlPiBjdXJ2ZShD
Q0Vhc2VUaW1pbmdGdW5jdGlvbjo6Y3JlYXRlKCkpOwogICAgICAgICBPd25QdHI8Q0NBY3RpdmVB
bmltYXRpb24+IGFuaW1hdGlvbihDQ0FjdGl2ZUFuaW1hdGlvbjo6Y3JlYXRlKGN1cnZlLnJlbGVh
c2UoKSwgQW5pbWF0aW9uSWRWZW5kb3I6OmdldE5leHRBbmltYXRpb25JZCgpLCBBbmltYXRpb25J
ZFZlbmRvcjo6Z2V0TmV4dEdyb3VwSWQoKSwgQ0NBY3RpdmVBbmltYXRpb246Ok9wYWNpdHkpKTsK
LSAgICAgICAgbGF5ZXItPmxheWVyQW5pbWF0aW9uQ29udHJvbGxlcigpLT5hZGQoYW5pbWF0aW9u
LnJlbGVhc2UoKSk7CisgICAgICAgIGxheWVyLT5sYXllckFuaW1hdGlvbkNvbnRyb2xsZXIoKS0+
YWRkQW5pbWF0aW9uKGFuaW1hdGlvbi5yZWxlYXNlKCkpOwogCiAgICAgICAgIC8vIFdlIGFkZCB0
aGUgYW5pbWF0aW9uICpiZWZvcmUqIGF0dGFjaGluZyB0aGUgbGF5ZXIgdG8gdGhlIHRyZWUuCiAg
ICAgICAgIG1fbGF5ZXJUcmVlSG9zdC0+cm9vdExheWVyKCktPmFkZENoaWxkKGxheWVyKTsKZGlm
ZiAtLWdpdCBhL1NvdXJjZS9XZWJLaXQvY2hyb21pdW0vdGVzdHMvR3JhcGhpY3NMYXllckNocm9t
aXVtVGVzdC5jcHAgYi9Tb3VyY2UvV2ViS2l0L2Nocm9taXVtL3Rlc3RzL0dyYXBoaWNzTGF5ZXJD
aHJvbWl1bVRlc3QuY3BwCmluZGV4IGI3YWE4NTc0NjVjYmFjMThjNDgyYWVkNWQ5NzMyMzI2NTE0
ZGE2YTQuLjdjMzYxM2YxZmFmNjk0ZTg3NzYyMTUwMzQ5YWJhOGE2ODgxMjNhMWEgMTAwNjQ0Ci0t
LSBhL1NvdXJjZS9XZWJLaXQvY2hyb21pdW0vdGVzdHMvR3JhcGhpY3NMYXllckNocm9taXVtVGVz
dC5jcHAKKysrIGIvU291cmNlL1dlYktpdC9jaHJvbWl1bS90ZXN0cy9HcmFwaGljc0xheWVyQ2hy
b21pdW1UZXN0LmNwcApAQCAtMjcsNTYgKzI3LDMyOCBAQAogI2luY2x1ZGUgIkdyYXBoaWNzTGF5
ZXJDaHJvbWl1bS5oIgogCiAjaW5jbHVkZSAiQ0NBbmltYXRpb25UZXN0Q29tbW9uLmgiCisjaW5j
bHVkZSAiQ29tcG9zaXRvckZha2VHcmFwaGljc0NvbnRleHQzRC5oIgorI2luY2x1ZGUgIkdyYXBo
aWNzQ29udGV4dDNELmgiCisjaW5jbHVkZSAiR3JhcGhpY3NDb250ZXh0M0RQcml2YXRlLmgiCiAj
aW5jbHVkZSAiR3JhcGhpY3NMYXllci5oIgogI2luY2x1ZGUgIkxheWVyQ2hyb21pdW0uaCIKKyNp
bmNsdWRlICJUcmFuc2xhdGVUcmFuc2Zvcm1PcGVyYXRpb24uaCIKKyNpbmNsdWRlICJXZWJDb21w
b3NpdG9yLmgiCisKKyNpbmNsdWRlICJjYy9DQ0xheWVyVHJlZUhvc3QuaCIKKyNpbmNsdWRlICJj
Yy9DQ0xheWVyVHJlZUhvc3RJbXBsLmgiCisjaW5jbHVkZSAiY2MvQ0NTaW5nbGVUaHJlYWRQcm94
eS5oIgorCiAjaW5jbHVkZSA8Z3Rlc3QvZ3Rlc3QuaD4KICNpbmNsdWRlIDx3dGYvUGFzc093blB0
ci5oPgogCiB1c2luZyBuYW1lc3BhY2UgV2ViQ29yZTsKK3VzaW5nIG5hbWVzcGFjZSBXZWJLaXQ7
CiB1c2luZyBuYW1lc3BhY2UgV2ViS2l0VGVzdHM7CiAKIG5hbWVzcGFjZSB7CiAKIGNsYXNzIE1v
Y2tHcmFwaGljc0xheWVyQ2xpZW50IDogcHVibGljIEdyYXBoaWNzTGF5ZXJDbGllbnQgewogICBw
dWJsaWM6Ci0gICAgdmlydHVhbCB2b2lkIG5vdGlmeUFuaW1hdGlvblN0YXJ0ZWQoY29uc3QgR3Jh
cGhpY3NMYXllciosIGRvdWJsZSB0aW1lKSB7IH0KLSAgICB2aXJ0dWFsIHZvaWQgbm90aWZ5U3lu
Y1JlcXVpcmVkKGNvbnN0IEdyYXBoaWNzTGF5ZXIqKSB7IH0KLSAgICB2aXJ0dWFsIHZvaWQgcGFp
bnRDb250ZW50cyhjb25zdCBHcmFwaGljc0xheWVyKiwgR3JhcGhpY3NDb250ZXh0JiwgR3JhcGhp
Y3NMYXllclBhaW50aW5nUGhhc2UsIGNvbnN0IEludFJlY3QmIGluQ2xpcCkgeyB9Ci0gICAgdmly
dHVhbCBib29sIHNob3dEZWJ1Z0JvcmRlcnMoY29uc3QgR3JhcGhpY3NMYXllciopIGNvbnN0IHsg
cmV0dXJuIGZhbHNlOyB9Ci0gICAgdmlydHVhbCBib29sIHNob3dSZXBhaW50Q291bnRlcihjb25z
dCBHcmFwaGljc0xheWVyKikgY29uc3QgeyByZXR1cm4gZmFsc2U7IH0KKyAgICB2aXJ0dWFsIHZv
aWQgbm90aWZ5QW5pbWF0aW9uU3RhcnRlZChjb25zdCBHcmFwaGljc0xheWVyKiwgZG91YmxlIHRp
bWUpIE9WRVJSSURFIHsgfQorICAgIHZpcnR1YWwgdm9pZCBub3RpZnlTeW5jUmVxdWlyZWQoY29u
c3QgR3JhcGhpY3NMYXllciopIE9WRVJSSURFIHsgfQorICAgIHZpcnR1YWwgdm9pZCBwYWludENv
bnRlbnRzKGNvbnN0IEdyYXBoaWNzTGF5ZXIqLCBHcmFwaGljc0NvbnRleHQmLCBHcmFwaGljc0xh
eWVyUGFpbnRpbmdQaGFzZSwgY29uc3QgSW50UmVjdCYgaW5DbGlwKSBPVkVSUklERSB7IH0KKyAg
ICB2aXJ0dWFsIGJvb2wgc2hvd0RlYnVnQm9yZGVycyhjb25zdCBHcmFwaGljc0xheWVyKikgY29u
c3QgT1ZFUlJJREUgeyByZXR1cm4gZmFsc2U7IH0KKyAgICB2aXJ0dWFsIGJvb2wgc2hvd1JlcGFp
bnRDb3VudGVyKGNvbnN0IEdyYXBoaWNzTGF5ZXIqKSBjb25zdCBPVkVSUklERSB7IHJldHVybiBm
YWxzZTsgfQogfTsKIAotVEVTVChHcmFwaGljc0xheWVyQ2hyb21pdW1UZXN0LCB1cGRhdGVMYXll
clByZXNlcnZlczNEV2l0aEFuaW1hdGlvbnMpCi17Ci0gICAgTW9ja0dyYXBoaWNzTGF5ZXJDbGll
bnQgY2xpZW50OwotICAgIE93blB0cjxHcmFwaGljc0xheWVyQ2hyb21pdW0+IGdyYXBoaWNzTGF5
ZXIgPSBzdGF0aWNfcG9pbnRlcl9jYXN0PEdyYXBoaWNzTGF5ZXJDaHJvbWl1bT4oR3JhcGhpY3NM
YXllcjo6Y3JlYXRlKCZjbGllbnQpKTsKLSAgICBBU1NFUlRfVFJVRShncmFwaGljc0xheWVyLmdl
dCgpKTsKK2NsYXNzIE1vY2tMYXllclRyZWVIb3N0Q2xpZW50IDogcHVibGljIENDTGF5ZXJUcmVl
SG9zdENsaWVudCB7CitwdWJsaWM6CisgICAgdmlydHVhbCB2b2lkIHdpbGxCZWdpbkZyYW1lKCkg
T1ZFUlJJREUgeyB9CisgICAgdmlydHVhbCB2b2lkIGRpZEJlZ2luRnJhbWUoKSBPVkVSUklERSB7
IH0KKyAgICB2aXJ0dWFsIHZvaWQgdXBkYXRlQW5pbWF0aW9ucyhkb3VibGUgZnJhbWVCZWdpblRp
bWUpIE9WRVJSSURFIHsgfQorICAgIHZpcnR1YWwgdm9pZCBsYXlvdXQoKSBPVkVSUklERSB7IH0K
KyAgICB2aXJ0dWFsIHZvaWQgYXBwbHlTY3JvbGxBbmRTY2FsZShjb25zdCBJbnRTaXplJiBzY3Jv
bGxEZWx0YSwgZmxvYXQgcGFnZVNjYWxlKSBPVkVSUklERSB7IH0KKyAgICB2aXJ0dWFsIFBhc3NS
ZWZQdHI8R3JhcGhpY3NDb250ZXh0M0Q+IGNyZWF0ZUNvbnRleHQoKSBPVkVSUklERQorICAgIHsK
KyAgICAgICAgR3JhcGhpY3NDb250ZXh0M0Q6OkF0dHJpYnV0ZXMgYXR0cnM7CisgICAgICAgIHJl
dHVybiBjcmVhdGVDb21wb3NpdG9yTW9ja0dyYXBoaWNzQ29udGV4dDNEKGF0dHJzKTsKKyAgICB9
CisgICAgdmlydHVhbCB2b2lkIGRpZFJlY3JlYXRlQ29udGV4dChib29sIHN1Y2Nlc3MpIE9WRVJS
SURFIHsgfQorICAgIHZpcnR1YWwgdm9pZCB3aWxsQ29tbWl0KCkgT1ZFUlJJREUgeyB9CisgICAg
dmlydHVhbCB2b2lkIGRpZENvbW1pdCgpIE9WRVJSSURFIHsgfQorICAgIHZpcnR1YWwgdm9pZCBk
aWRDb21taXRBbmREcmF3RnJhbWUoKSBPVkVSUklERSB7IH0KKyAgICB2aXJ0dWFsIHZvaWQgZGlk
Q29tcGxldGVTd2FwQnVmZmVycygpIE9WRVJSSURFIHsgfQorICAgIHZpcnR1YWwgdm9pZCBzY2hl
ZHVsZUNvbXBvc2l0ZSgpIE9WRVJSSURFIHsgfQorfTsKKworY2xhc3MgTW9ja0xheWVyVHJlZUhv
c3QgOiBwdWJsaWMgQ0NMYXllclRyZWVIb3N0IHsKK3B1YmxpYzoKKyAgICBzdGF0aWMgUGFzc093
blB0cjxNb2NrTGF5ZXJUcmVlSG9zdD4gY3JlYXRlKCkKKyAgICB7CisgICAgICAgIC8vIEZvciB0
aGVzZSB0ZXN0cywgd2Ugd2lsbCBlbmFibGUgdGhyZWFkZWQgYW5pbWF0aW9ucy4KKyAgICAgICAg
Q0NTZXR0aW5ncyBzZXR0aW5nczsKKyAgICAgICAgc2V0dGluZ3MudGhyZWFkZWRBbmltYXRpb25F
bmFibGVkID0gdHJ1ZTsKKyAgICAgICAgT3duUHRyPE1vY2tMYXllclRyZWVIb3N0PiBsYXllclRy
ZWVIb3N0KGFkb3B0UHRyKG5ldyBNb2NrTGF5ZXJUcmVlSG9zdChuZXcgTW9ja0xheWVyVHJlZUhv
c3RDbGllbnQoKSwgc2V0dGluZ3MpKSk7CisgICAgICAgIGJvb2wgc3VjY2VzcyA9IGxheWVyVHJl
ZUhvc3QtPmluaXRpYWxpemUoKTsKKyAgICAgICAgRVhQRUNUX1RSVUUoc3VjY2Vzcyk7CisgICAg
ICAgIGxheWVyVHJlZUhvc3QtPnNldFJvb3RMYXllcihMYXllckNocm9taXVtOjpjcmVhdGUoKSk7
CisgICAgICAgIGxheWVyVHJlZUhvc3QtPnNldFZpZXdwb3J0U2l6ZShJbnRTaXplKDEsIDEpKTsK
KyAgICAgICAgcmV0dXJuIGxheWVyVHJlZUhvc3QucmVsZWFzZSgpOworICAgIH0KKworICAgIHZp
cnR1YWwgUGFzc093blB0cjxDQ0xheWVyVHJlZUhvc3RJbXBsPiBjcmVhdGVMYXllclRyZWVIb3N0
SW1wbChDQ0xheWVyVHJlZUhvc3RJbXBsQ2xpZW50KiBjbGllbnQpCisgICAgeworICAgICAgICAv
LyBGb3IgdGhlc2UgdGVzdHMsIHdlIHdpbGwgZW5hYmxlIHRocmVhZGVkIGFuaW1hdGlvbnMuCisg
ICAgICAgIENDU2V0dGluZ3MgY29weVNldHRpbmdzID0gc2V0dGluZ3MoKTsKKyAgICAgICAgY29w
eVNldHRpbmdzLnRocmVhZGVkQW5pbWF0aW9uRW5hYmxlZCA9IHRydWU7CisgICAgICAgIHJldHVy
biBDQ0xheWVyVHJlZUhvc3RJbXBsOjpjcmVhdGUoY29weVNldHRpbmdzLCBjbGllbnQpOworICAg
IH0KKworcHJpdmF0ZToKKyAgICBNb2NrTGF5ZXJUcmVlSG9zdChDQ0xheWVyVHJlZUhvc3RDbGll
bnQqIGNsaWVudCwgY29uc3QgQ0NTZXR0aW5ncyYgc2V0dGluZ3MpCisgICAgICAgIDogQ0NMYXll
clRyZWVIb3N0KGNsaWVudCwgc2V0dGluZ3MpCisgICAgeworICAgIH0KK307CisKK2NsYXNzIEdy
YXBoaWNzTGF5ZXJDaHJvbWl1bVRlc3QgOiBwdWJsaWMgdGVzdGluZzo6VGVzdCB7CitwdWJsaWM6
CisgICAgR3JhcGhpY3NMYXllckNocm9taXVtVGVzdCgpCisgICAgeworICAgICAgICBXZWJDb21w
b3NpdG9yOjppbml0aWFsaXplKDApOworICAgICAgICBtX2dyYXBoaWNzTGF5ZXIgPSBzdGF0aWNf
cG9pbnRlcl9jYXN0PEdyYXBoaWNzTGF5ZXJDaHJvbWl1bT4oR3JhcGhpY3NMYXllcjo6Y3JlYXRl
KCZtX2NsaWVudCkpOworICAgICAgICBtX3BsYXRmb3JtTGF5ZXIgPSBzdGF0aWNfY2FzdDxMYXll
ckNocm9taXVtKj4obV9ncmFwaGljc0xheWVyLT5wbGF0Zm9ybUxheWVyKCkpOworICAgICAgICBt
X2xheWVyVHJlZUhvc3QgPSBNb2NrTGF5ZXJUcmVlSG9zdDo6Y3JlYXRlKCk7CisgICAgICAgIG1f
cGxhdGZvcm1MYXllci0+c2V0TGF5ZXJUcmVlSG9zdChtX2xheWVyVHJlZUhvc3QuZ2V0KCkpOwor
ICAgIH0KKworICAgIHZpcnR1YWwgfkdyYXBoaWNzTGF5ZXJDaHJvbWl1bVRlc3QoKQorICAgIHsK
KyAgICAgICAgbV9ncmFwaGljc0xheWVyLmNsZWFyKCk7CisgICAgICAgIG1fbGF5ZXJUcmVlSG9z
dC5jbGVhcigpOworICAgICAgICBXZWJDb21wb3NpdG9yOjpzaHV0ZG93bigpOworICAgIH0KIAot
ICAgIExheWVyQ2hyb21pdW0qIHBsYXRmb3JtTGF5ZXIgPSBzdGF0aWNfY2FzdDxMYXllckNocm9t
aXVtKj4oZ3JhcGhpY3NMYXllci0+cGxhdGZvcm1MYXllcigpKTsKLSAgICBBU1NFUlRfVFJVRShw
bGF0Zm9ybUxheWVyKTsKK3Byb3RlY3RlZDoKKyAgICBzdGF0aWMgdm9pZCBleHBlY3RUcmFuc2xh
dGVYKGRvdWJsZSB0cmFuc2xhdGVYLCBjb25zdCBUcmFuc2Zvcm1hdGlvbk1hdHJpeCYgbWF0cml4
KQorICAgIHsKKyAgICAgICAgVHJhbnNmb3JtYXRpb25NYXRyaXg6OkRlY29tcG9zZWRUeXBlIGRl
Y29tcG9zZWRUeXBlOworICAgICAgICBtYXRyaXguZGVjb21wb3NlKGRlY29tcG9zZWRUeXBlKTsK
KyAgICAgICAgRVhQRUNUX0ZMT0FUX0VRKHRyYW5zbGF0ZVgsIGRlY29tcG9zZWRUeXBlLnRyYW5z
bGF0ZVgpOworICAgIH0KIAotICAgIEFTU0VSVF9GQUxTRShwbGF0Zm9ybUxheWVyLT5oYXNBY3Rp
dmVBbmltYXRpb24oKSk7CisgICAgTGF5ZXJDaHJvbWl1bSogbV9wbGF0Zm9ybUxheWVyOworICAg
IE93blB0cjxHcmFwaGljc0xheWVyQ2hyb21pdW0+IG1fZ3JhcGhpY3NMYXllcjsKKyAgICBPd25Q
dHI8Q0NMYXllclRyZWVIb3N0PiBtX2xheWVyVHJlZUhvc3Q7CisKK3ByaXZhdGU6CisgICAgTW9j
a0dyYXBoaWNzTGF5ZXJDbGllbnQgbV9jbGllbnQ7CisgICAgRGVidWdTY29wZWRTZXRNYWluVGhy
ZWFkIG1fbWFpbjsKK307CisKK1RFU1RfRihHcmFwaGljc0xheWVyQ2hyb21pdW1UZXN0LCB1cGRh
dGVMYXllclByZXNlcnZlczNEV2l0aEFuaW1hdGlvbnMpCit7CisgICAgQVNTRVJUX0ZBTFNFKG1f
cGxhdGZvcm1MYXllci0+aGFzQWN0aXZlQW5pbWF0aW9uKCkpOwogCiAgICAgT3duUHRyPENDQWN0
aXZlQW5pbWF0aW9uPiBmbG9hdEFuaW1hdGlvbihDQ0FjdGl2ZUFuaW1hdGlvbjo6Y3JlYXRlKGFk
b3B0UHRyKG5ldyBGYWtlRmxvYXRBbmltYXRpb25DdXJ2ZSksIDAsIDEsIENDQWN0aXZlQW5pbWF0
aW9uOjpPcGFjaXR5KSk7Ci0gICAgcGxhdGZvcm1MYXllci0+bGF5ZXJBbmltYXRpb25Db250cm9s
bGVyKCktPmFkZChmbG9hdEFuaW1hdGlvbi5yZWxlYXNlKCkpOworICAgIG1fcGxhdGZvcm1MYXll
ci0+bGF5ZXJBbmltYXRpb25Db250cm9sbGVyKCktPmFkZEFuaW1hdGlvbihmbG9hdEFuaW1hdGlv
bi5yZWxlYXNlKCkpOworCisgICAgQVNTRVJUX1RSVUUobV9wbGF0Zm9ybUxheWVyLT5oYXNBY3Rp
dmVBbmltYXRpb24oKSk7CisKKyAgICBtX2dyYXBoaWNzTGF5ZXItPnNldFByZXNlcnZlczNEKHRy
dWUpOworCisgICAgbV9wbGF0Zm9ybUxheWVyID0gc3RhdGljX2Nhc3Q8TGF5ZXJDaHJvbWl1bSo+
KG1fZ3JhcGhpY3NMYXllci0+cGxhdGZvcm1MYXllcigpKTsKKyAgICBBU1NFUlRfVFJVRShtX3Bs
YXRmb3JtTGF5ZXIpOworCisgICAgQVNTRVJUX1RSVUUobV9wbGF0Zm9ybUxheWVyLT5oYXNBY3Rp
dmVBbmltYXRpb24oKSk7CisgICAgbV9wbGF0Zm9ybUxheWVyLT5yZW1vdmVBbmltYXRpb24oMCk7
CisgICAgQVNTRVJUX0ZBTFNFKG1fcGxhdGZvcm1MYXllci0+aGFzQWN0aXZlQW5pbWF0aW9uKCkp
OworCisgICAgbV9ncmFwaGljc0xheWVyLT5zZXRQcmVzZXJ2ZXMzRChmYWxzZSk7CisKKyAgICBt
X3BsYXRmb3JtTGF5ZXIgPSBzdGF0aWNfY2FzdDxMYXllckNocm9taXVtKj4obV9ncmFwaGljc0xh
eWVyLT5wbGF0Zm9ybUxheWVyKCkpOworICAgIEFTU0VSVF9UUlVFKG1fcGxhdGZvcm1MYXllcik7
CisKKyAgICBBU1NFUlRfRkFMU0UobV9wbGF0Zm9ybUxheWVyLT5oYXNBY3RpdmVBbmltYXRpb24o
KSk7Cit9CisKK1RFU1RfRihHcmFwaGljc0xheWVyQ2hyb21pdW1UZXN0LCBjcmVhdGVPcGFjaXR5
QW5pbWF0aW9uKQoreworICAgIGNvbnN0IGRvdWJsZSBkdXJhdGlvbiA9IDE7CisgICAgV2ViQ29y
ZTo6S2V5ZnJhbWVWYWx1ZUxpc3QgdmFsdWVzKEFuaW1hdGVkUHJvcGVydHlPcGFjaXR5KTsKKyAg
ICB2YWx1ZXMuaW5zZXJ0KG5ldyBGbG9hdEFuaW1hdGlvblZhbHVlKDAsIDApKTsKKyAgICB2YWx1
ZXMuaW5zZXJ0KG5ldyBGbG9hdEFuaW1hdGlvblZhbHVlKGR1cmF0aW9uLCAxKSk7CisKKyAgICBS
ZWZQdHI8QW5pbWF0aW9uPiBhbmltYXRpb24gPSBBbmltYXRpb246OmNyZWF0ZSgpOworICAgIGFu
aW1hdGlvbi0+c2V0RHVyYXRpb24oZHVyYXRpb24pOworCisgICAgSW50U2l6ZSBib3hTaXplOwor
ICAgIGJvb2wgYWRkZWRBbmltYXRpb24gPSBtX2dyYXBoaWNzTGF5ZXItPmFkZEFuaW1hdGlvbih2
YWx1ZXMsIGJveFNpemUsIGFuaW1hdGlvbi5nZXQoKSwgIiIsIDApOworCisgICAgRVhQRUNUX1RS
VUUoYWRkZWRBbmltYXRpb24pOworCisgICAgRVhQRUNUX1RSVUUobV9wbGF0Zm9ybUxheWVyLT5s
YXllckFuaW1hdGlvbkNvbnRyb2xsZXIoKS0+aGFzQWN0aXZlQW5pbWF0aW9uKCkpOworCisgICAg
Q0NBY3RpdmVBbmltYXRpb24qIGFjdGl2ZUFuaW1hdGlvbiA9IG1fcGxhdGZvcm1MYXllci0+bGF5
ZXJBbmltYXRpb25Db250cm9sbGVyKCktPmdldEFjdGl2ZUFuaW1hdGlvbihDQ0FjdGl2ZUFuaW1h
dGlvbjo6T3BhY2l0eSk7CisgICAgRVhQRUNUX1RSVUUoYWN0aXZlQW5pbWF0aW9uKTsKKworICAg
IEVYUEVDVF9FUSgxLCBhY3RpdmVBbmltYXRpb24tPml0ZXJhdGlvbnMoKSk7CisgICAgRVhQRUNU
X0VRKENDQWN0aXZlQW5pbWF0aW9uOjpPcGFjaXR5LCBhY3RpdmVBbmltYXRpb24tPnRhcmdldFBy
b3BlcnR5KCkpOworCisgICAgRVhQRUNUX0VRKENDQW5pbWF0aW9uQ3VydmU6OkZsb2F0LCBhY3Rp
dmVBbmltYXRpb24tPmN1cnZlKCktPnR5cGUoKSk7CisKKyAgICBjb25zdCBDQ0Zsb2F0QW5pbWF0
aW9uQ3VydmUqIGN1cnZlID0gYWN0aXZlQW5pbWF0aW9uLT5jdXJ2ZSgpLT50b0Zsb2F0QW5pbWF0
aW9uQ3VydmUoKTsKKyAgICBFWFBFQ1RfVFJVRShjdXJ2ZSk7CisKKyAgICBFWFBFQ1RfRVEoMCwg
Y3VydmUtPmdldFZhbHVlKDApKTsKKyAgICBFWFBFQ1RfRVEoMSwgY3VydmUtPmdldFZhbHVlKGR1
cmF0aW9uKSk7Cit9CisKK1RFU1RfRihHcmFwaGljc0xheWVyQ2hyb21pdW1UZXN0LCBjcmVhdGVU
cmFuc2Zvcm1BbmltYXRpb24pCit7CisgICAgY29uc3QgZG91YmxlIGR1cmF0aW9uID0gMTsKKyAg
ICBXZWJDb3JlOjpLZXlmcmFtZVZhbHVlTGlzdCB2YWx1ZXMoQW5pbWF0ZWRQcm9wZXJ0eVdlYmtp
dFRyYW5zZm9ybSk7CisKKyAgICBUcmFuc2Zvcm1PcGVyYXRpb25zIG9wZXJhdGlvbnMxOworICAg
IG9wZXJhdGlvbnMxLm9wZXJhdGlvbnMoKS5hcHBlbmQoVHJhbnNsYXRlVHJhbnNmb3JtT3BlcmF0
aW9uOjpjcmVhdGUoTGVuZ3RoKDIsIEZpeGVkKSwgTGVuZ3RoKDAsIEZpeGVkKSwgVHJhbnNmb3Jt
T3BlcmF0aW9uOjpUUkFOU0xBVEVfWCkpOworICAgIHZhbHVlcy5pbnNlcnQobmV3IFRyYW5zZm9y
bUFuaW1hdGlvblZhbHVlKDAsICZvcGVyYXRpb25zMSkpOworCisgICAgVHJhbnNmb3JtT3BlcmF0
aW9ucyBvcGVyYXRpb25zMjsKKyAgICBvcGVyYXRpb25zMi5vcGVyYXRpb25zKCkuYXBwZW5kKFRy
YW5zbGF0ZVRyYW5zZm9ybU9wZXJhdGlvbjo6Y3JlYXRlKExlbmd0aCg0LCBGaXhlZCksIExlbmd0
aCgwLCBGaXhlZCksIFRyYW5zZm9ybU9wZXJhdGlvbjo6VFJBTlNMQVRFX1gpKTsKKyAgICB2YWx1
ZXMuaW5zZXJ0KG5ldyBUcmFuc2Zvcm1BbmltYXRpb25WYWx1ZShkdXJhdGlvbiwgJm9wZXJhdGlv
bnMyKSk7CisKKyAgICBSZWZQdHI8QW5pbWF0aW9uPiBhbmltYXRpb24gPSBBbmltYXRpb246OmNy
ZWF0ZSgpOworICAgIGFuaW1hdGlvbi0+c2V0RHVyYXRpb24oZHVyYXRpb24pOworCisgICAgSW50
U2l6ZSBib3hTaXplOworICAgIG1fZ3JhcGhpY3NMYXllci0+YWRkQW5pbWF0aW9uKHZhbHVlcywg
Ym94U2l6ZSwgYW5pbWF0aW9uLmdldCgpLCAiIiwgMCk7CisKKyAgICBFWFBFQ1RfVFJVRShtX3Bs
YXRmb3JtTGF5ZXItPmxheWVyQW5pbWF0aW9uQ29udHJvbGxlcigpLT5oYXNBY3RpdmVBbmltYXRp
b24oKSk7CisKKyAgICBDQ0FjdGl2ZUFuaW1hdGlvbiogYWN0aXZlQW5pbWF0aW9uID0gbV9wbGF0
Zm9ybUxheWVyLT5sYXllckFuaW1hdGlvbkNvbnRyb2xsZXIoKS0+Z2V0QWN0aXZlQW5pbWF0aW9u
KENDQWN0aXZlQW5pbWF0aW9uOjpUcmFuc2Zvcm0pOworICAgIEVYUEVDVF9UUlVFKGFjdGl2ZUFu
aW1hdGlvbik7CisKKyAgICBFWFBFQ1RfRVEoMSwgYWN0aXZlQW5pbWF0aW9uLT5pdGVyYXRpb25z
KCkpOworICAgIEVYUEVDVF9FUShDQ0FjdGl2ZUFuaW1hdGlvbjo6VHJhbnNmb3JtLCBhY3RpdmVB
bmltYXRpb24tPnRhcmdldFByb3BlcnR5KCkpOworCisgICAgRVhQRUNUX0VRKENDQW5pbWF0aW9u
Q3VydmU6OlRyYW5zZm9ybSwgYWN0aXZlQW5pbWF0aW9uLT5jdXJ2ZSgpLT50eXBlKCkpOworCisg
ICAgY29uc3QgQ0NUcmFuc2Zvcm1BbmltYXRpb25DdXJ2ZSogY3VydmUgPSBhY3RpdmVBbmltYXRp
b24tPmN1cnZlKCktPnRvVHJhbnNmb3JtQW5pbWF0aW9uQ3VydmUoKTsKKyAgICBFWFBFQ1RfVFJV
RShjdXJ2ZSk7CisKKyAgICBleHBlY3RUcmFuc2xhdGVYKDIsIGN1cnZlLT5nZXRWYWx1ZSgwKSk7
CisgICAgZXhwZWN0VHJhbnNsYXRlWCg0LCBjdXJ2ZS0+Z2V0VmFsdWUoZHVyYXRpb24pKTsKK30K
KworVEVTVF9GKEdyYXBoaWNzTGF5ZXJDaHJvbWl1bVRlc3QsIGNyZWF0ZVJldmVyc2VkQW5pbWF0
aW9uKQoreworICAgIGNvbnN0IGRvdWJsZSBkdXJhdGlvbiA9IDE7CisgICAgV2ViQ29yZTo6S2V5
ZnJhbWVWYWx1ZUxpc3QgdmFsdWVzKEFuaW1hdGVkUHJvcGVydHlXZWJraXRUcmFuc2Zvcm0pOwor
CisgICAgVHJhbnNmb3JtT3BlcmF0aW9ucyBvcGVyYXRpb25zMTsKKyAgICBvcGVyYXRpb25zMS5v
cGVyYXRpb25zKCkuYXBwZW5kKFRyYW5zbGF0ZVRyYW5zZm9ybU9wZXJhdGlvbjo6Y3JlYXRlKExl
bmd0aCgyLCBGaXhlZCksIExlbmd0aCgwLCBGaXhlZCksIFRyYW5zZm9ybU9wZXJhdGlvbjo6VFJB
TlNMQVRFX1gpKTsKKyAgICB2YWx1ZXMuaW5zZXJ0KG5ldyBUcmFuc2Zvcm1BbmltYXRpb25WYWx1
ZSgwLCAmb3BlcmF0aW9uczEpKTsKKworICAgIFRyYW5zZm9ybU9wZXJhdGlvbnMgb3BlcmF0aW9u
czI7CisgICAgb3BlcmF0aW9uczIub3BlcmF0aW9ucygpLmFwcGVuZChUcmFuc2xhdGVUcmFuc2Zv
cm1PcGVyYXRpb246OmNyZWF0ZShMZW5ndGgoNCwgRml4ZWQpLCBMZW5ndGgoMCwgRml4ZWQpLCBU
cmFuc2Zvcm1PcGVyYXRpb246OlRSQU5TTEFURV9YKSk7CisgICAgdmFsdWVzLmluc2VydChuZXcg
VHJhbnNmb3JtQW5pbWF0aW9uVmFsdWUoZHVyYXRpb24sICZvcGVyYXRpb25zMikpOworCisgICAg
UmVmUHRyPEFuaW1hdGlvbj4gYW5pbWF0aW9uID0gQW5pbWF0aW9uOjpjcmVhdGUoKTsKKyAgICBh
bmltYXRpb24tPnNldER1cmF0aW9uKGR1cmF0aW9uKTsKKyAgICBhbmltYXRpb24tPnNldERpcmVj
dGlvbihBbmltYXRpb246OkFuaW1hdGlvbkRpcmVjdGlvblJldmVyc2UpOworCisgICAgSW50U2l6
ZSBib3hTaXplOworICAgIG1fZ3JhcGhpY3NMYXllci0+YWRkQW5pbWF0aW9uKHZhbHVlcywgYm94
U2l6ZSwgYW5pbWF0aW9uLmdldCgpLCAiIiwgMCk7CisKKyAgICBFWFBFQ1RfVFJVRShtX3BsYXRm
b3JtTGF5ZXItPmxheWVyQW5pbWF0aW9uQ29udHJvbGxlcigpLT5oYXNBY3RpdmVBbmltYXRpb24o
KSk7CisKKyAgICBDQ0FjdGl2ZUFuaW1hdGlvbiogYWN0aXZlQW5pbWF0aW9uID0gbV9wbGF0Zm9y
bUxheWVyLT5sYXllckFuaW1hdGlvbkNvbnRyb2xsZXIoKS0+Z2V0QWN0aXZlQW5pbWF0aW9uKEND
QWN0aXZlQW5pbWF0aW9uOjpUcmFuc2Zvcm0pOworICAgIEVYUEVDVF9UUlVFKGFjdGl2ZUFuaW1h
dGlvbik7CisKKyAgICBFWFBFQ1RfRVEoMSwgYWN0aXZlQW5pbWF0aW9uLT5pdGVyYXRpb25zKCkp
OworICAgIEVYUEVDVF9FUShDQ0FjdGl2ZUFuaW1hdGlvbjo6VHJhbnNmb3JtLCBhY3RpdmVBbmlt
YXRpb24tPnRhcmdldFByb3BlcnR5KCkpOworCisgICAgRVhQRUNUX0VRKENDQW5pbWF0aW9uQ3Vy
dmU6OlRyYW5zZm9ybSwgYWN0aXZlQW5pbWF0aW9uLT5jdXJ2ZSgpLT50eXBlKCkpOworCisgICAg
Y29uc3QgQ0NUcmFuc2Zvcm1BbmltYXRpb25DdXJ2ZSogY3VydmUgPSBhY3RpdmVBbmltYXRpb24t
PmN1cnZlKCktPnRvVHJhbnNmb3JtQW5pbWF0aW9uQ3VydmUoKTsKKyAgICBFWFBFQ1RfVFJVRShj
dXJ2ZSk7CisKKyAgICBleHBlY3RUcmFuc2xhdGVYKDQsIGN1cnZlLT5nZXRWYWx1ZSgwKSk7Cisg
ICAgZXhwZWN0VHJhbnNsYXRlWCgyLCBjdXJ2ZS0+Z2V0VmFsdWUoZHVyYXRpb24pKTsKK30KKwor
VEVTVF9GKEdyYXBoaWNzTGF5ZXJDaHJvbWl1bVRlc3QsIGNyZWF0ZUFsdGVybmF0aW5nQW5pbWF0
aW9uKQoreworICAgIGNvbnN0IGRvdWJsZSBkdXJhdGlvbiA9IDE7CisgICAgV2ViQ29yZTo6S2V5
ZnJhbWVWYWx1ZUxpc3QgdmFsdWVzKEFuaW1hdGVkUHJvcGVydHlXZWJraXRUcmFuc2Zvcm0pOwor
CisgICAgVHJhbnNmb3JtT3BlcmF0aW9ucyBvcGVyYXRpb25zMTsKKyAgICBvcGVyYXRpb25zMS5v
cGVyYXRpb25zKCkuYXBwZW5kKFRyYW5zbGF0ZVRyYW5zZm9ybU9wZXJhdGlvbjo6Y3JlYXRlKExl
bmd0aCgyLCBGaXhlZCksIExlbmd0aCgwLCBGaXhlZCksIFRyYW5zZm9ybU9wZXJhdGlvbjo6VFJB
TlNMQVRFX1gpKTsKKyAgICB2YWx1ZXMuaW5zZXJ0KG5ldyBUcmFuc2Zvcm1BbmltYXRpb25WYWx1
ZSgwLCAmb3BlcmF0aW9uczEpKTsKKworICAgIFRyYW5zZm9ybU9wZXJhdGlvbnMgb3BlcmF0aW9u
czI7CisgICAgb3BlcmF0aW9uczIub3BlcmF0aW9ucygpLmFwcGVuZChUcmFuc2xhdGVUcmFuc2Zv
cm1PcGVyYXRpb246OmNyZWF0ZShMZW5ndGgoNCwgRml4ZWQpLCBMZW5ndGgoMCwgRml4ZWQpLCBU
cmFuc2Zvcm1PcGVyYXRpb246OlRSQU5TTEFURV9YKSk7CisgICAgdmFsdWVzLmluc2VydChuZXcg
VHJhbnNmb3JtQW5pbWF0aW9uVmFsdWUoZHVyYXRpb24sICZvcGVyYXRpb25zMikpOworCisgICAg
UmVmUHRyPEFuaW1hdGlvbj4gYW5pbWF0aW9uID0gQW5pbWF0aW9uOjpjcmVhdGUoKTsKKyAgICBh
bmltYXRpb24tPnNldER1cmF0aW9uKGR1cmF0aW9uKTsKKyAgICBhbmltYXRpb24tPnNldERpcmVj
dGlvbihBbmltYXRpb246OkFuaW1hdGlvbkRpcmVjdGlvbkFsdGVybmF0ZSk7CisgICAgYW5pbWF0
aW9uLT5zZXRJdGVyYXRpb25Db3VudCgyKTsKKworICAgIEludFNpemUgYm94U2l6ZTsKKyAgICBt
X2dyYXBoaWNzTGF5ZXItPmFkZEFuaW1hdGlvbih2YWx1ZXMsIGJveFNpemUsIGFuaW1hdGlvbi5n
ZXQoKSwgIiIsIDApOworCisgICAgRVhQRUNUX1RSVUUobV9wbGF0Zm9ybUxheWVyLT5sYXllckFu
aW1hdGlvbkNvbnRyb2xsZXIoKS0+aGFzQWN0aXZlQW5pbWF0aW9uKCkpOworCisgICAgQ0NBY3Rp
dmVBbmltYXRpb24qIGFjdGl2ZUFuaW1hdGlvbiA9IG1fcGxhdGZvcm1MYXllci0+bGF5ZXJBbmlt
YXRpb25Db250cm9sbGVyKCktPmdldEFjdGl2ZUFuaW1hdGlvbihDQ0FjdGl2ZUFuaW1hdGlvbjo6
VHJhbnNmb3JtKTsKKyAgICBFWFBFQ1RfVFJVRShhY3RpdmVBbmltYXRpb24pOworICAgIEVYUEVD
VF9UUlVFKGFjdGl2ZUFuaW1hdGlvbi0+YWx0ZXJuYXRlc0RpcmVjdGlvbigpKTsKKworICAgIEVY
UEVDVF9FUSgyLCBhY3RpdmVBbmltYXRpb24tPml0ZXJhdGlvbnMoKSk7CisgICAgRVhQRUNUX0VR
KENDQWN0aXZlQW5pbWF0aW9uOjpUcmFuc2Zvcm0sIGFjdGl2ZUFuaW1hdGlvbi0+dGFyZ2V0UHJv
cGVydHkoKSk7CisKKyAgICBFWFBFQ1RfRVEoQ0NBbmltYXRpb25DdXJ2ZTo6VHJhbnNmb3JtLCBh
Y3RpdmVBbmltYXRpb24tPmN1cnZlKCktPnR5cGUoKSk7CisKKyAgICBjb25zdCBDQ1RyYW5zZm9y
bUFuaW1hdGlvbkN1cnZlKiBjdXJ2ZSA9IGFjdGl2ZUFuaW1hdGlvbi0+Y3VydmUoKS0+dG9UcmFu
c2Zvcm1BbmltYXRpb25DdXJ2ZSgpOworICAgIEVYUEVDVF9UUlVFKGN1cnZlKTsKKworICAgIGV4
cGVjdFRyYW5zbGF0ZVgoMiwgY3VydmUtPmdldFZhbHVlKDApKTsKKyAgICBleHBlY3RUcmFuc2xh
dGVYKDQsIGN1cnZlLT5nZXRWYWx1ZShkdXJhdGlvbikpOworfQorCitURVNUX0YoR3JhcGhpY3NM
YXllckNocm9taXVtVGVzdCwgY3JlYXRlUmV2ZXJzZWRBbHRlcm5hdGluZ0FuaW1hdGlvbikKK3sK
KyAgICBjb25zdCBkb3VibGUgZHVyYXRpb24gPSAxOworICAgIFdlYkNvcmU6OktleWZyYW1lVmFs
dWVMaXN0IHZhbHVlcyhBbmltYXRlZFByb3BlcnR5V2Via2l0VHJhbnNmb3JtKTsKKworICAgIFRy
YW5zZm9ybU9wZXJhdGlvbnMgb3BlcmF0aW9uczE7CisgICAgb3BlcmF0aW9uczEub3BlcmF0aW9u
cygpLmFwcGVuZChUcmFuc2xhdGVUcmFuc2Zvcm1PcGVyYXRpb246OmNyZWF0ZShMZW5ndGgoMiwg
Rml4ZWQpLCBMZW5ndGgoMCwgRml4ZWQpLCBUcmFuc2Zvcm1PcGVyYXRpb246OlRSQU5TTEFURV9Y
KSk7CisgICAgdmFsdWVzLmluc2VydChuZXcgVHJhbnNmb3JtQW5pbWF0aW9uVmFsdWUoMCwgJm9w
ZXJhdGlvbnMxKSk7CisKKyAgICBUcmFuc2Zvcm1PcGVyYXRpb25zIG9wZXJhdGlvbnMyOworICAg
IG9wZXJhdGlvbnMyLm9wZXJhdGlvbnMoKS5hcHBlbmQoVHJhbnNsYXRlVHJhbnNmb3JtT3BlcmF0
aW9uOjpjcmVhdGUoTGVuZ3RoKDQsIEZpeGVkKSwgTGVuZ3RoKDAsIEZpeGVkKSwgVHJhbnNmb3Jt
T3BlcmF0aW9uOjpUUkFOU0xBVEVfWCkpOworICAgIHZhbHVlcy5pbnNlcnQobmV3IFRyYW5zZm9y
bUFuaW1hdGlvblZhbHVlKGR1cmF0aW9uLCAmb3BlcmF0aW9uczIpKTsKKworICAgIFJlZlB0cjxB
bmltYXRpb24+IGFuaW1hdGlvbiA9IEFuaW1hdGlvbjo6Y3JlYXRlKCk7CisgICAgYW5pbWF0aW9u
LT5zZXREdXJhdGlvbihkdXJhdGlvbik7CisgICAgYW5pbWF0aW9uLT5zZXREaXJlY3Rpb24oQW5p
bWF0aW9uOjpBbmltYXRpb25EaXJlY3Rpb25BbHRlcm5hdGVSZXZlcnNlKTsKKyAgICBhbmltYXRp
b24tPnNldEl0ZXJhdGlvbkNvdW50KDIpOwogCi0gICAgQVNTRVJUX1RSVUUocGxhdGZvcm1MYXll
ci0+aGFzQWN0aXZlQW5pbWF0aW9uKCkpOworICAgIEludFNpemUgYm94U2l6ZTsKKyAgICBtX2dy
YXBoaWNzTGF5ZXItPmFkZEFuaW1hdGlvbih2YWx1ZXMsIGJveFNpemUsIGFuaW1hdGlvbi5nZXQo
KSwgIiIsIDApOwogCi0gICAgZ3JhcGhpY3NMYXllci0+c2V0UHJlc2VydmVzM0QodHJ1ZSk7Cisg
ICAgRVhQRUNUX1RSVUUobV9wbGF0Zm9ybUxheWVyLT5sYXllckFuaW1hdGlvbkNvbnRyb2xsZXIo
KS0+aGFzQWN0aXZlQW5pbWF0aW9uKCkpOwogCi0gICAgcGxhdGZvcm1MYXllciA9IHN0YXRpY19j
YXN0PExheWVyQ2hyb21pdW0qPihncmFwaGljc0xheWVyLT5wbGF0Zm9ybUxheWVyKCkpOwotICAg
IEFTU0VSVF9UUlVFKHBsYXRmb3JtTGF5ZXIpOworICAgIENDQWN0aXZlQW5pbWF0aW9uKiBhY3Rp
dmVBbmltYXRpb24gPSBtX3BsYXRmb3JtTGF5ZXItPmxheWVyQW5pbWF0aW9uQ29udHJvbGxlcigp
LT5nZXRBY3RpdmVBbmltYXRpb24oQ0NBY3RpdmVBbmltYXRpb246OlRyYW5zZm9ybSk7CisgICAg
RVhQRUNUX1RSVUUoYWN0aXZlQW5pbWF0aW9uKTsKKyAgICBFWFBFQ1RfVFJVRShhY3RpdmVBbmlt
YXRpb24tPmFsdGVybmF0ZXNEaXJlY3Rpb24oKSk7CiAKLSAgICBBU1NFUlRfVFJVRShwbGF0Zm9y
bUxheWVyLT5oYXNBY3RpdmVBbmltYXRpb24oKSk7Ci0gICAgcGxhdGZvcm1MYXllci0+cmVtb3Zl
QW5pbWF0aW9uKDApOwotICAgIEFTU0VSVF9GQUxTRShwbGF0Zm9ybUxheWVyLT5oYXNBY3RpdmVB
bmltYXRpb24oKSk7CisgICAgRVhQRUNUX0VRKDIsIGFjdGl2ZUFuaW1hdGlvbi0+aXRlcmF0aW9u
cygpKTsKKyAgICBFWFBFQ1RfRVEoQ0NBY3RpdmVBbmltYXRpb246OlRyYW5zZm9ybSwgYWN0aXZl
QW5pbWF0aW9uLT50YXJnZXRQcm9wZXJ0eSgpKTsKIAotICAgIGdyYXBoaWNzTGF5ZXItPnNldFBy
ZXNlcnZlczNEKGZhbHNlKTsKKyAgICBFWFBFQ1RfRVEoQ0NBbmltYXRpb25DdXJ2ZTo6VHJhbnNm
b3JtLCBhY3RpdmVBbmltYXRpb24tPmN1cnZlKCktPnR5cGUoKSk7CiAKLSAgICBwbGF0Zm9ybUxh
eWVyID0gc3RhdGljX2Nhc3Q8TGF5ZXJDaHJvbWl1bSo+KGdyYXBoaWNzTGF5ZXItPnBsYXRmb3Jt
TGF5ZXIoKSk7Ci0gICAgQVNTRVJUX1RSVUUocGxhdGZvcm1MYXllcik7CisgICAgY29uc3QgQ0NU
cmFuc2Zvcm1BbmltYXRpb25DdXJ2ZSogY3VydmUgPSBhY3RpdmVBbmltYXRpb24tPmN1cnZlKCkt
PnRvVHJhbnNmb3JtQW5pbWF0aW9uQ3VydmUoKTsKKyAgICBFWFBFQ1RfVFJVRShjdXJ2ZSk7CiAK
LSAgICBBU1NFUlRfRkFMU0UocGxhdGZvcm1MYXllci0+aGFzQWN0aXZlQW5pbWF0aW9uKCkpOwor
ICAgIGV4cGVjdFRyYW5zbGF0ZVgoNCwgY3VydmUtPmdldFZhbHVlKDApKTsKKyAgICBleHBlY3RU
cmFuc2xhdGVYKDIsIGN1cnZlLT5nZXRWYWx1ZShkdXJhdGlvbikpOwogfQogCiB9IC8vIG5hbWVz
cGFjZQo=
</data>

          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>145194</attachid>
            <date>2012-05-31 19:17:41 -0700</date>
            <delta_ts>2012-06-01 08:04:06 -0700</delta_ts>
            <desc>Patch</desc>
            <filename>bug-87686-20120531221740.patch</filename>
            <type>text/plain</type>
            <size>100463</size>
            <attacher>vollick</attacher>
            
              <data encoding="base64">U3VidmVyc2lvbiBSZXZpc2lvbjogMTE5MTM4CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9D
aGFuZ2VMb2cgYi9Tb3VyY2UvV2ViQ29yZS9DaGFuZ2VMb2cKaW5kZXggYTFkNTg4YmI5N2Y3MjJm
YjdlMGViMzA3NWU0N2NlYzI3ODZhZDZmOC4uN2U2MWIyZjM2NWNhNjk1MWU4MzI5MGRjOWM0Y2Jl
MzNmZjc4ZTRiOSAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvQ2hhbmdlTG9nCisrKyBiL1Nv
dXJjZS9XZWJDb3JlL0NoYW5nZUxvZwpAQCAtMSwzICsxLDY4IEBACisyMDEyLTA1LTMxICBJYW4g
Vm9sbGljayAgPHZvbGxpY2tAY2hyb21pdW0ub3JnPgorCisgICAgICAgIFtjaHJvbWl1bV0gQWNj
ZWxlcmF0ZWQgYW5pbWF0aW9ucyBzaG91bGQgdXNlIFdlYlRyYW5zZm9ybU9wZXJhdGlvbnMKKyAg
ICAgICAgaHR0cHM6Ly9idWdzLndlYmtpdC5vcmcvc2hvd19idWcuY2dpP2lkPTg3Njg2CisKKyAg
ICAgICAgUmV2aWV3ZWQgYnkgTk9CT0RZIChPT1BTISkuCisKKyAgICAgICAgQ0NUcmFuc2Zvcm1L
ZXlmcmFtZSBuZXcgb3ducyBhIFdlYlRyYW5zZm9ybU9wZXJhdGlvbnMgcmF0aGVyIHRoYW4gYQor
ICAgICAgICBUcmFuc2Zvcm1PcGVyYXRpb25zLiBMYXllckNocm9taXVtJ3MgQVBJIGhhcyBiZWVu
IGNoYW5nZWQgc28gdGhhdAorICAgICAgICBMYXllckNocm9taXVtOjphZGRBbmltYXRpb24gc2hv
dWxkIHRha2Ugb25seSBhIENDQWN0aXZlQW5pbWF0aW9uLgorICAgICAgICBHcmFwaGljc0xheWVy
Q2hyb21pdW0gaXMgbmV3IHJlc3BvbnNpYmxlIGZvciB0cmFuc2xhdGluZyB0bworICAgICAgICBX
ZWJUcmFuc2Zvcm1PcGVyYXRpb25zIGFuZCBjcmVhdGluZyBDQ0FjdGl2ZUFuaW1hdGlvbnMuIFRl
c3RzIHRoYXQgdXNlCisgICAgICAgIHRoZSBwdWJsaWMgQVBJICh0aGF0IGlzLCB0aGV5IGNhbGwg
YWRkQW5pbWF0aW9uIHdpdGggS2V5ZnJhbWVWYWx1ZUxpc3QKKyAgICAgICAgYW5kIEFuaW1hdGlv
biBhcmd1bWVudHMpIGhhdmUgYmVlbiBtb3ZlZCB0byBHcmFwaGljc0xheWVyQ2hyb21pdW1UZXN0
LgorCisgICAgICAgIFVuaXQgdGVzdHM6CisgICAgICAgICAgICBHcmFwaGljc0xheWVyQ2hyb21p
dW1UZXN0LmNyZWF0ZU9wYWNpdHlBbmltYXRpb24KKyAgICAgICAgICAgIEdyYXBoaWNzTGF5ZXJD
aHJvbWl1bVRlc3QuY3JlYXRlVHJhbnNmb3JtQW5pbWF0aW9uCisgICAgICAgICAgICBHcmFwaGlj
c0xheWVyQ2hyb21pdW1UZXN0LmNyZWF0ZVRyYW5zZm9ybUFuaW1hdGlvbldpdGhCaWdSb3RhdGlv
bgorICAgICAgICAgICAgR3JhcGhpY3NMYXllckNocm9taXVtVGVzdC5jcmVhdGVUcmFuc2Zvcm1B
bmltYXRpb25XaXRoU2luZ3VsYXJNYXRyaXgKKyAgICAgICAgICAgIEdyYXBoaWNzTGF5ZXJDaHJv
bWl1bVRlc3QuY3JlYXRlUmV2ZXJzZWRBbmltYXRpb24KKyAgICAgICAgICAgIEdyYXBoaWNzTGF5
ZXJDaHJvbWl1bVRlc3QuY3JlYXRlQWx0ZXJuYXRpbmdBbmltYXRpb24KKyAgICAgICAgICAgIEdy
YXBoaWNzTGF5ZXJDaHJvbWl1bVRlc3QuY3JlYXRlUmV2ZXJzZWRBbHRlcm5hdGluZ0FuaW1hdGlv
bgorCisgICAgICAgICogV2ViQ29yZS5neXBpOgorICAgICAgICAqIHBsYXRmb3JtL2dyYXBoaWNz
L2Nocm9taXVtL0FuaW1hdGlvblRyYW5zbGF0aW9uVXRpbC5jcHA6IEFkZGVkLgorICAgICAgICAo
V2ViQ29yZSk6CisgICAgICAgIChXZWJDb3JlOjp0b1dlYlRyYW5zZm9ybU9wZXJhdGlvbnMpOgor
ICAgICAgICAoV2ViQ29yZTo6YXBwZW5kS2V5ZnJhbWUpOgorICAgICAgICAoV2ViQ29yZTo6Q0NL
ZXlmcmFtZWRUcmFuc2Zvcm1BbmltYXRpb25DdXJ2ZSk6CisgICAgICAgIChXZWJDb3JlOjpjcmVh
dGVBY3RpdmVBbmltYXRpb24pOgorICAgICAgICAqIHBsYXRmb3JtL2dyYXBoaWNzL2Nocm9taXVt
L0FuaW1hdGlvblRyYW5zbGF0aW9uVXRpbC5oOiBBZGRlZC4KKyAgICAgICAgKFdlYkNvcmUpOgor
ICAgICAgICAqIHBsYXRmb3JtL2dyYXBoaWNzL2Nocm9taXVtL0dyYXBoaWNzTGF5ZXJDaHJvbWl1
bS5jcHA6CisgICAgICAgIChXZWJDb3JlOjpHcmFwaGljc0xheWVyQ2hyb21pdW06OmFkZEFuaW1h
dGlvbik6CisgICAgICAgICogcGxhdGZvcm0vZ3JhcGhpY3MvY2hyb21pdW0vTGF5ZXJDaHJvbWl1
bS5jcHA6CisgICAgICAgIChXZWJDb3JlOjpMYXllckNocm9taXVtOjphZGRBbmltYXRpb24pOgor
ICAgICAgICAqIHBsYXRmb3JtL2dyYXBoaWNzL2Nocm9taXVtL0xheWVyQ2hyb21pdW0uaDoKKyAg
ICAgICAgKFdlYkNvcmUpOgorICAgICAgICAoTGF5ZXJDaHJvbWl1bSk6CisgICAgICAgICogcGxh
dGZvcm0vZ3JhcGhpY3MvY2hyb21pdW0vTGlua0hpZ2hsaWdodC5jcHA6CisgICAgICAgIChXZWJD
b3JlOjpMaW5rSGlnaGxpZ2h0OjpMaW5rSGlnaGxpZ2h0KToKKyAgICAgICAgKiBwbGF0Zm9ybS9n
cmFwaGljcy9jaHJvbWl1bS9jYy9DQ0FuaW1hdGlvbkN1cnZlLmg6CisgICAgICAgIChDQ1RyYW5z
Zm9ybUFuaW1hdGlvbkN1cnZlKToKKyAgICAgICAgKiBwbGF0Zm9ybS9ncmFwaGljcy9jaHJvbWl1
bS9jYy9DQ0tleWZyYW1lZEFuaW1hdGlvbkN1cnZlLmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OkND
VHJhbnNmb3JtS2V5ZnJhbWU6OmNyZWF0ZSk6CisgICAgICAgIChXZWJDb3JlOjpDQ1RyYW5zZm9y
bUtleWZyYW1lOjpDQ1RyYW5zZm9ybUtleWZyYW1lKToKKyAgICAgICAgKFdlYkNvcmU6OkNDVHJh
bnNmb3JtS2V5ZnJhbWU6OnZhbHVlKToKKyAgICAgICAgKFdlYkNvcmU6OkNDVHJhbnNmb3JtS2V5
ZnJhbWU6OmNsb25lKToKKyAgICAgICAgKFdlYkNvcmU6OkNDS2V5ZnJhbWVkVHJhbnNmb3JtQW5p
bWF0aW9uQ3VydmU6OmdldFZhbHVlKToKKyAgICAgICAgKiBwbGF0Zm9ybS9ncmFwaGljcy9jaHJv
bWl1bS9jYy9DQ0tleWZyYW1lZEFuaW1hdGlvbkN1cnZlLmg6CisgICAgICAgIChDQ1RyYW5zZm9y
bUtleWZyYW1lKToKKyAgICAgICAgKENDS2V5ZnJhbWVkVHJhbnNmb3JtQW5pbWF0aW9uQ3VydmUp
OgorICAgICAgICAqIHBsYXRmb3JtL2dyYXBoaWNzL2Nocm9taXVtL2NjL0NDTGF5ZXJBbmltYXRp
b25Db250cm9sbGVyLmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OkNDTGF5ZXJBbmltYXRpb25Db250
cm9sbGVyOjpyZW1vdmVBbmltYXRpb24pOgorICAgICAgICAoV2ViQ29yZSk6CisgICAgICAgIChX
ZWJDb3JlOjpDQ0xheWVyQW5pbWF0aW9uQ29udHJvbGxlcjo6YWRkQW5pbWF0aW9uKToKKyAgICAg
ICAgKFdlYkNvcmU6OkNDTGF5ZXJBbmltYXRpb25Db250cm9sbGVyOjpnZXRBY3RpdmVBbmltYXRp
b24pOgorICAgICAgICAoV2ViQ29yZTo6Q0NMYXllckFuaW1hdGlvbkNvbnRyb2xsZXI6OnB1c2hO
ZXdBbmltYXRpb25zVG9JbXBsVGhyZWFkKToKKyAgICAgICAgKFdlYkNvcmU6OkNDTGF5ZXJBbmlt
YXRpb25Db250cm9sbGVyOjpyZXBsYWNlSW1wbFRocmVhZEFuaW1hdGlvbnMpOgorICAgICAgICAo
V2ViQ29yZTo6Q0NMYXllckFuaW1hdGlvbkNvbnRyb2xsZXI6OnRpY2tBbmltYXRpb25zKToKKyAg
ICAgICAgKiBwbGF0Zm9ybS9ncmFwaGljcy9jaHJvbWl1bS9jYy9DQ0xheWVyQW5pbWF0aW9uQ29u
dHJvbGxlci5oOgorICAgICAgICAoQ0NMYXllckFuaW1hdGlvbkNvbnRyb2xsZXJDbGllbnQpOgor
ICAgICAgICAoQ0NMYXllckFuaW1hdGlvbkNvbnRyb2xsZXIpOgorCiAyMDEyLTA1LTMxICBCcmFk
eSBFaWRzb24gIDxiZWlkc29uQGFwcGxlLmNvbT4KIAogICAgICAgICA8cmRhcjovL3Byb2JsZW0v
MTE1NDQ0NTQ+IGFuZCBodHRwczovL2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9ODc5
OTAKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJLaXQvY2hyb21pdW0vQ2hhbmdlTG9nIGIvU291cmNl
L1dlYktpdC9jaHJvbWl1bS9DaGFuZ2VMb2cKaW5kZXggZDA4NmU0YWEyZTc2NDhmMWM0YTkwNDUw
ZWYwNjcxMDVjZDg0YTEwMy4uMjA5MmMwOTIwYjQ0OWZhNGVhMzRiMDU1YWNkYTJlN2QzZjU4MGU4
NCAxMDA2NDQKLS0tIGEvU291cmNlL1dlYktpdC9jaHJvbWl1bS9DaGFuZ2VMb2cKKysrIGIvU291
cmNlL1dlYktpdC9jaHJvbWl1bS9DaGFuZ2VMb2cKQEAgLTEsMyArMSw0MiBAQAorMjAxMi0wNS0z
MSAgSWFuIFZvbGxpY2sgIDx2b2xsaWNrQGNocm9taXVtLm9yZz4KKworICAgICAgICBbY2hyb21p
dW1dIEFjY2VsZXJhdGVkIGFuaW1hdGlvbnMgc2hvdWxkIHVzZSBXZWJUcmFuc2Zvcm1PcGVyYXRp
b25zCisgICAgICAgIGh0dHBzOi8vYnVncy53ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9pZD04NzY4
NgorCisgICAgICAgIFJldmlld2VkIGJ5IE5PQk9EWSAoT09QUyEpLgorCisgICAgICAgIENDVHJh
bnNmb3JtS2V5ZnJhbWUgbmV3IG93bnMgYSBXZWJUcmFuc2Zvcm1PcGVyYXRpb25zIHJhdGhlciB0
aGFuIGEKKyAgICAgICAgVHJhbnNmb3JtT3BlcmF0aW9ucy4gTGF5ZXJDaHJvbWl1bSdzIEFQSSBo
YXMgYmVlbiBjaGFuZ2VkIHNvIHRoYXQKKyAgICAgICAgTGF5ZXJDaHJvbWl1bTo6YWRkQW5pbWF0
aW9uIHNob3VsZCB0YWtlIG9ubHkgYSBDQ0FjdGl2ZUFuaW1hdGlvbi4KKyAgICAgICAgR3JhcGhp
Y3NMYXllckNocm9taXVtIGlzIG5ldyByZXNwb25zaWJsZSBmb3IgdHJhbnNsYXRpbmcgdG8KKyAg
ICAgICAgV2ViVHJhbnNmb3JtT3BlcmF0aW9ucyBhbmQgY3JlYXRpbmcgQ0NBY3RpdmVBbmltYXRp
b25zLiBUZXN0cyB0aGF0IHVzZQorICAgICAgICB0aGUgcHVibGljIEFQSSAodGhhdCBpcywgdGhl
eSBjYWxsIGFkZEFuaW1hdGlvbiB3aXRoIEtleWZyYW1lVmFsdWVMaXN0CisgICAgICAgIGFuZCBB
bmltYXRpb24gYXJndW1lbnRzKSBoYXZlIGJlZW4gbW92ZWQgdG8gR3JhcGhpY3NMYXllckNocm9t
aXVtVGVzdC4KKworICAgICAgICAqIHRlc3RzL0NDQW5pbWF0aW9uVGVzdENvbW1vbi5jcHA6Cisg
ICAgICAgIChXZWJDb3JlOjphZGRPcGFjaXR5VHJhbnNpdGlvbik6CisgICAgICAgIChXZWJDb3Jl
OjphZGRBbmltYXRlZFRyYW5zZm9ybSk6CisgICAgICAgIChXZWJLaXRUZXN0czo6RmFrZVRyYW5z
Zm9ybVRyYW5zaXRpb246OmdldFZhbHVlKToKKyAgICAgICAgKiB0ZXN0cy9DQ0FuaW1hdGlvblRl
c3RDb21tb24uaDoKKyAgICAgICAgKiB0ZXN0cy9DQ0tleWZyYW1lZEFuaW1hdGlvbkN1cnZlVGVz
dC5jcHA6CisgICAgICAgIChXZWJDb3JlOjpURVNUKToKKyAgICAgICAgKiB0ZXN0cy9DQ0xheWVy
QW5pbWF0aW9uQ29udHJvbGxlclRlc3QuY3BwOgorICAgICAgICAoV2ViS2l0VGVzdHM6OlRFU1Qp
OgorICAgICAgICAqIHRlc3RzL0NDTGF5ZXJUcmVlSG9zdFRlc3QuY3BwOgorICAgICAgICAoV1RG
OjpDQ0xheWVyVHJlZUhvc3RUZXN0TGF5ZXJBZGRlZFdpdGhBbmltYXRpb246OmJlZ2luVGVzdCk6
CisgICAgICAgICogdGVzdHMvR3JhcGhpY3NMYXllckNocm9taXVtVGVzdC5jcHA6CisgICAgICAg
IChNb2NrTGF5ZXJUcmVlSG9zdENsaWVudCk6CisgICAgICAgIChXZWJLaXRUZXN0cyk6CisgICAg
ICAgIChNb2NrTGF5ZXJUcmVlSG9zdCk6CisgICAgICAgIChXZWJLaXRUZXN0czo6TW9ja0xheWVy
VHJlZUhvc3Q6OmNyZWF0ZSk6CisgICAgICAgIChXZWJLaXRUZXN0czo6TW9ja0xheWVyVHJlZUhv
c3Q6OmNyZWF0ZUxheWVyVHJlZUhvc3RJbXBsKToKKyAgICAgICAgKFdlYktpdFRlc3RzOjpNb2Nr
TGF5ZXJUcmVlSG9zdDo6TW9ja0xheWVyVHJlZUhvc3QpOgorICAgICAgICAoR3JhcGhpY3NMYXll
ckNocm9taXVtVGVzdCk6CisgICAgICAgIChXZWJLaXRUZXN0czo6R3JhcGhpY3NMYXllckNocm9t
aXVtVGVzdDo6R3JhcGhpY3NMYXllckNocm9taXVtVGVzdCk6CisgICAgICAgIChXZWJLaXRUZXN0
czo6R3JhcGhpY3NMYXllckNocm9taXVtVGVzdDo6fkdyYXBoaWNzTGF5ZXJDaHJvbWl1bVRlc3Qp
OgorICAgICAgICAoV2ViS2l0VGVzdHM6OkdyYXBoaWNzTGF5ZXJDaHJvbWl1bVRlc3Q6OmV4cGVj
dFRyYW5zbGF0ZVgpOgorICAgICAgICAoV2ViS2l0VGVzdHM6OlRFU1RfRik6CisKIDIwMTItMDUt
MzEgIEFtaSBGaXNjaG1hbiAgPGZpc2NobWFuQGNocm9taXVtLm9yZz4KIAogICAgICAgICBSZXBs
YWNlIFdlYk1lZGlhUGxheWVyOjpieXRlc0xvYWRlZCgpIHdpdGggYW4gZXhwbGljaXQgZGlkTG9h
ZGluZ1Byb2dyZXNzKCkKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL1dlYkNvcmUuZ3lwaSBi
L1NvdXJjZS9XZWJDb3JlL1dlYkNvcmUuZ3lwaQppbmRleCBiNDAzYjljODY0NWU2YTM3YzZmNjdk
Y2Q3NmM3ZWJiNTBlNGI2ZjhiLi5hMTBkODgxNTdkMjA5NDhkZWJjMzAxYWMwZjhmYzU3YzJmZGY4
MzUxIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9XZWJDb3JlLmd5cGkKKysrIGIvU291cmNl
L1dlYkNvcmUvV2ViQ29yZS5neXBpCkBAIC0zNTYzLDcgKzM1NjMsOSBAQAogICAgICAgICAgICAg
J3BsYXRmb3JtL2dyYXBoaWNzL2NnL1BhdHRlcm5DRy5jcHAnLAogICAgICAgICAgICAgJ3BsYXRm
b3JtL2dyYXBoaWNzL2NnL1RyYW5zZm9ybWF0aW9uTWF0cml4Q0cuY3BwJywKICAgICAgICAgICAg
ICdwbGF0Zm9ybS9ncmFwaGljcy9jaHJvbWl1bS9BbmltYXRpb25JZFZlbmRvci5jcHAnLAotICAg
ICAgICAgICAgJ3BsYXRmb3JtL2dyYXBoaWNzL2Nocm9taXVtL0FuaW1hdGlvbklkVmVuZG9yLmgn
LAorICAgICAgICAgICAgJ3BsYXRmb3JtL2dyYXBoaWNzL2Nocm9taXVtL0FuaW1hdGlvbklkVmVu
ZG9yLmNwcCcsCisgICAgICAgICAgICAncGxhdGZvcm0vZ3JhcGhpY3MvY2hyb21pdW0vQW5pbWF0
aW9uVHJhbnNsYXRpb25VdGlsLmNwcCcsCisgICAgICAgICAgICAncGxhdGZvcm0vZ3JhcGhpY3Mv
Y2hyb21pdW0vQW5pbWF0aW9uVHJhbnNsYXRpb25VdGlsLmgnLAogICAgICAgICAgICAgJ3BsYXRm
b3JtL2dyYXBoaWNzL2Nocm9taXVtL0JpdG1hcENhbnZhc0xheWVyVGV4dHVyZVVwZGF0ZXIuY3Bw
JywKICAgICAgICAgICAgICdwbGF0Zm9ybS9ncmFwaGljcy9jaHJvbWl1bS9CaXRtYXBDYW52YXNM
YXllclRleHR1cmVVcGRhdGVyLmgnLAogICAgICAgICAgICAgJ3BsYXRmb3JtL2dyYXBoaWNzL2No
cm9taXVtL0JpdG1hcFNrUGljdHVyZUNhbnZhc0xheWVyVGV4dHVyZVVwZGF0ZXIuY3BwJywKZGlm
ZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2Nocm9taXVtL0FuaW1h
dGlvblRyYW5zbGF0aW9uVXRpbC5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGlj
cy9jaHJvbWl1bS9BbmltYXRpb25UcmFuc2xhdGlvblV0aWwuY3BwCm5ldyBmaWxlIG1vZGUgMTAw
NjQ0CmluZGV4IDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAuLjViNzBj
MzY4Yzc1ZjE2MDBlYzc3NDc1ZTVmZDM0ZmIxMDhmNWUzM2MKLS0tIC9kZXYvbnVsbAorKysgYi9T
b3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9jaHJvbWl1bS9BbmltYXRpb25UcmFuc2xh
dGlvblV0aWwuY3BwCkBAIC0wLDAgKzEsMjM1IEBACisvKgorICogQ29weXJpZ2h0IChDKSAyMDEw
IEdvb2dsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKgorICogUmVkaXN0cmlidXRpb24g
YW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CisgKiBt
b2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNv
bmRpdGlvbnMgYXJlCisgKiBtZXQ6CisgKgorICogICAgICogUmVkaXN0cmlidXRpb25zIG9mIHNv
dXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqIG5vdGljZSwgdGhp
cyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KKyAqICAg
ICAqIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJv
dmUKKyAqIGNvcHlyaWdodCBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUg
Zm9sbG93aW5nIGRpc2NsYWltZXIKKyAqIGluIHRoZSBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhl
ciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUKKyAqIGRpc3RyaWJ1dGlvbi4KKyAqICAgICAq
IE5laXRoZXIgdGhlIG5hbWUgb2YgR29vZ2xlIEluYy4gbm9yIHRoZSBuYW1lcyBvZiBpdHMKKyAq
IGNvbnRyaWJ1dG9ycyBtYXkgYmUgdXNlZCB0byBlbmRvcnNlIG9yIHByb21vdGUgcHJvZHVjdHMg
ZGVyaXZlZCBmcm9tCisgKiB0aGlzIHNvZnR3YXJlIHdpdGhvdXQgc3BlY2lmaWMgcHJpb3Igd3Jp
dHRlbiBwZXJtaXNzaW9uLgorICoKKyAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgVEhF
IENPUFlSSUdIVCBIT0xERVJTIEFORCBDT05UUklCVVRPUlMKKyAqICJBUyBJUyIgQU5EIEFOWSBF
WFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UCisgKiBMSU1J
VEVEIFRPLCBUSEUgSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklU
TkVTUyBGT1IKKyAqIEEgUEFSVElDVUxBUiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiBJTiBOTyBF
VkVOVCBTSEFMTCBUSEUgQ09QWVJJR0hUCisgKiBPV05FUiBPUiBDT05UUklCVVRPUlMgQkUgTElB
QkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwKKyAqIFNQRUNJQUwsIEVY
RU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QKKyAq
IExJTUlURUQgVE8sIFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7
IExPU1MgT0YgVVNFLAorICogREFUQSwgT1IgUFJPRklUUzsgT1IgQlVTSU5FU1MgSU5URVJSVVBU
SU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZCisgKiBUSEVPUlkgT0YgTElBQklMSVRZLCBX
SEVUSEVSIElOIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUCisgKiAoSU5DTFVE
SU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRI
RSBVU0UKKyAqIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUgUE9TU0lC
SUxJVFkgT0YgU1VDSCBEQU1BR0UuCisgKi8KKworI2luY2x1ZGUgImNvbmZpZy5oIgorCisjaW5j
bHVkZSAiQW5pbWF0aW9uVHJhbnNsYXRpb25VdGlsLmgiCisKKyNpbmNsdWRlICJGbG9hdFNpemUu
aCIKKyNpbmNsdWRlICJHcmFwaGljc0xheWVyLmgiCisjaW5jbHVkZSAiSWRlbnRpdHlUcmFuc2Zv
cm1PcGVyYXRpb24uaCIKKyNpbmNsdWRlICJMZW5ndGguaCIKKyNpbmNsdWRlICJMZW5ndGhGdW5j
dGlvbnMuaCIKKyNpbmNsdWRlICJNYXRyaXgzRFRyYW5zZm9ybU9wZXJhdGlvbi5oIgorI2luY2x1
ZGUgIk1hdHJpeFRyYW5zZm9ybU9wZXJhdGlvbi5oIgorI2luY2x1ZGUgIlBlcnNwZWN0aXZlVHJh
bnNmb3JtT3BlcmF0aW9uLmgiCisjaW5jbHVkZSAiUm90YXRlVHJhbnNmb3JtT3BlcmF0aW9uLmgi
CisjaW5jbHVkZSAiU2NhbGVUcmFuc2Zvcm1PcGVyYXRpb24uaCIKKyNpbmNsdWRlICJTa2V3VHJh
bnNmb3JtT3BlcmF0aW9uLmgiCisjaW5jbHVkZSAiVHJhbnNmb3JtT3BlcmF0aW9ucy5oIgorI2lu
Y2x1ZGUgIlRyYW5zbGF0ZVRyYW5zZm9ybU9wZXJhdGlvbi5oIgorCisjaW5jbHVkZSAiY2MvQ0NB
Y3RpdmVBbmltYXRpb24uaCIKKyNpbmNsdWRlICJjYy9DQ0tleWZyYW1lZEFuaW1hdGlvbkN1cnZl
LmgiCisKKyNpbmNsdWRlIDxwdWJsaWMvV2ViVHJhbnNmb3JtT3BlcmF0aW9ucy5oPgorI2luY2x1
ZGUgPHB1YmxpYy9XZWJUcmFuc2Zvcm1hdGlvbk1hdHJpeC5oPgorCisjaW5jbHVkZSA8d3RmL093
blB0ci5oPgorI2luY2x1ZGUgPHd0Zi90ZXh0L0NTdHJpbmcuaD4KKwordXNpbmcgbmFtZXNwYWNl
IHN0ZDsKK3VzaW5nIG5hbWVzcGFjZSBXZWJLaXQ7CisKK25hbWVzcGFjZSBXZWJDb3JlIHsKKwor
V2ViVHJhbnNmb3JtT3BlcmF0aW9ucyB0b1dlYlRyYW5zZm9ybU9wZXJhdGlvbnMoY29uc3QgVHJh
bnNmb3JtT3BlcmF0aW9ucyYgdHJhbnNmb3JtT3BlcmF0aW9ucywgY29uc3QgRmxvYXRTaXplJiBi
b3hTaXplKQoreworICAgIC8vIFdlIG5lZWQgdG8gZG8gYSBkZWVwIGNvcHkgdGhlIHRyYW5zZm9y
bU9wZXJhdGlvbnMgbWF5IGNvbnRhaW4gcmVmIHBvaW50ZXJzIHRvIFRyYW5zZm9ybU9wZXJhdGlv
biBvYmplY3RzLgorICAgIFdlYlRyYW5zZm9ybU9wZXJhdGlvbnMgd2ViVHJhbnNmb3JtT3BlcmF0
aW9uczsKKyAgICBmb3IgKHNpemVfdCBqID0gMDsgaiA8IHRyYW5zZm9ybU9wZXJhdGlvbnMuc2l6
ZSgpOyArK2opIHsKKyAgICAgICAgVHJhbnNmb3JtT3BlcmF0aW9uOjpPcGVyYXRpb25UeXBlIG9w
ZXJhdGlvblR5cGUgPSB0cmFuc2Zvcm1PcGVyYXRpb25zLm9wZXJhdGlvbnMoKVtqXS0+Z2V0T3Bl
cmF0aW9uVHlwZSgpOworICAgICAgICBzd2l0Y2ggKG9wZXJhdGlvblR5cGUpIHsKKyAgICAgICAg
Y2FzZSBUcmFuc2Zvcm1PcGVyYXRpb246OlNDQUxFX1g6CisgICAgICAgIGNhc2UgVHJhbnNmb3Jt
T3BlcmF0aW9uOjpTQ0FMRV9ZOgorICAgICAgICBjYXNlIFRyYW5zZm9ybU9wZXJhdGlvbjo6U0NB
TEVfWjoKKyAgICAgICAgY2FzZSBUcmFuc2Zvcm1PcGVyYXRpb246OlNDQUxFXzNEOgorICAgICAg
ICBjYXNlIFRyYW5zZm9ybU9wZXJhdGlvbjo6U0NBTEU6IHsKKyAgICAgICAgICAgIFNjYWxlVHJh
bnNmb3JtT3BlcmF0aW9uKiB0cmFuc2Zvcm0gPSBzdGF0aWNfY2FzdDxTY2FsZVRyYW5zZm9ybU9w
ZXJhdGlvbio+KHRyYW5zZm9ybU9wZXJhdGlvbnMub3BlcmF0aW9ucygpW2pdLmdldCgpKTsKKyAg
ICAgICAgICAgIHdlYlRyYW5zZm9ybU9wZXJhdGlvbnMuYXBwZW5kU2NhbGUodHJhbnNmb3JtLT54
KCksIHRyYW5zZm9ybS0+eSgpLCB0cmFuc2Zvcm0tPnooKSk7CisgICAgICAgICAgICBicmVhazsK
KyAgICAgICAgfQorICAgICAgICBjYXNlIFRyYW5zZm9ybU9wZXJhdGlvbjo6VFJBTlNMQVRFX1g6
CisgICAgICAgIGNhc2UgVHJhbnNmb3JtT3BlcmF0aW9uOjpUUkFOU0xBVEVfWToKKyAgICAgICAg
Y2FzZSBUcmFuc2Zvcm1PcGVyYXRpb246OlRSQU5TTEFURV9aOgorICAgICAgICBjYXNlIFRyYW5z
Zm9ybU9wZXJhdGlvbjo6VFJBTlNMQVRFXzNEOgorICAgICAgICBjYXNlIFRyYW5zZm9ybU9wZXJh
dGlvbjo6VFJBTlNMQVRFOiB7CisgICAgICAgICAgICBUcmFuc2xhdGVUcmFuc2Zvcm1PcGVyYXRp
b24qIHRyYW5zZm9ybSA9IHN0YXRpY19jYXN0PFRyYW5zbGF0ZVRyYW5zZm9ybU9wZXJhdGlvbio+
KHRyYW5zZm9ybU9wZXJhdGlvbnMub3BlcmF0aW9ucygpW2pdLmdldCgpKTsKKyAgICAgICAgICAg
IHdlYlRyYW5zZm9ybU9wZXJhdGlvbnMuYXBwZW5kVHJhbnNsYXRlKGZsb2F0VmFsdWVGb3JMZW5n
dGgodHJhbnNmb3JtLT54KCksIGJveFNpemUud2lkdGgoKSksIGZsb2F0VmFsdWVGb3JMZW5ndGgo
dHJhbnNmb3JtLT55KCksIGJveFNpemUuaGVpZ2h0KCkpLCBmbG9hdFZhbHVlRm9yTGVuZ3RoKHRy
YW5zZm9ybS0+eigpLCAxKSk7CisgICAgICAgICAgICBicmVhazsKKyAgICAgICAgfQorICAgICAg
ICBjYXNlIFRyYW5zZm9ybU9wZXJhdGlvbjo6Uk9UQVRFX1g6CisgICAgICAgIGNhc2UgVHJhbnNm
b3JtT3BlcmF0aW9uOjpST1RBVEVfWToKKyAgICAgICAgY2FzZSBUcmFuc2Zvcm1PcGVyYXRpb246
OlJPVEFURV8zRDoKKyAgICAgICAgY2FzZSBUcmFuc2Zvcm1PcGVyYXRpb246OlJPVEFURTogewor
ICAgICAgICAgICAgUm90YXRlVHJhbnNmb3JtT3BlcmF0aW9uKiB0cmFuc2Zvcm0gPSBzdGF0aWNf
Y2FzdDxSb3RhdGVUcmFuc2Zvcm1PcGVyYXRpb24qPih0cmFuc2Zvcm1PcGVyYXRpb25zLm9wZXJh
dGlvbnMoKVtqXS5nZXQoKSk7CisgICAgICAgICAgICB3ZWJUcmFuc2Zvcm1PcGVyYXRpb25zLmFw
cGVuZFJvdGF0ZSh0cmFuc2Zvcm0tPngoKSwgdHJhbnNmb3JtLT55KCksIHRyYW5zZm9ybS0+eigp
LCB0cmFuc2Zvcm0tPmFuZ2xlKCkpOworICAgICAgICAgICAgYnJlYWs7CisgICAgICAgIH0KKyAg
ICAgICAgY2FzZSBUcmFuc2Zvcm1PcGVyYXRpb246OlNLRVdfWDoKKyAgICAgICAgY2FzZSBUcmFu
c2Zvcm1PcGVyYXRpb246OlNLRVdfWToKKyAgICAgICAgY2FzZSBUcmFuc2Zvcm1PcGVyYXRpb246
OlNLRVc6IHsKKyAgICAgICAgICAgIFNrZXdUcmFuc2Zvcm1PcGVyYXRpb24qIHRyYW5zZm9ybSA9
IHN0YXRpY19jYXN0PFNrZXdUcmFuc2Zvcm1PcGVyYXRpb24qPih0cmFuc2Zvcm1PcGVyYXRpb25z
Lm9wZXJhdGlvbnMoKVtqXS5nZXQoKSk7CisgICAgICAgICAgICB3ZWJUcmFuc2Zvcm1PcGVyYXRp
b25zLmFwcGVuZFNrZXcodHJhbnNmb3JtLT5hbmdsZVgoKSwgdHJhbnNmb3JtLT5hbmdsZVkoKSk7
CisgICAgICAgICAgICBicmVhazsKKyAgICAgICAgfQorICAgICAgICBjYXNlIFRyYW5zZm9ybU9w
ZXJhdGlvbjo6TUFUUklYOiB7CisgICAgICAgICAgICBNYXRyaXhUcmFuc2Zvcm1PcGVyYXRpb24q
IHRyYW5zZm9ybSA9IHN0YXRpY19jYXN0PE1hdHJpeFRyYW5zZm9ybU9wZXJhdGlvbio+KHRyYW5z
Zm9ybU9wZXJhdGlvbnMub3BlcmF0aW9ucygpW2pdLmdldCgpKTsKKyAgICAgICAgICAgIFRyYW5z
Zm9ybWF0aW9uTWF0cml4IG0gPSB0cmFuc2Zvcm0tPm1hdHJpeCgpOworICAgICAgICAgICAgd2Vi
VHJhbnNmb3JtT3BlcmF0aW9ucy5hcHBlbmRNYXRyaXgoV2ViVHJhbnNmb3JtYXRpb25NYXRyaXgo
bSkpOworICAgICAgICAgICAgYnJlYWs7CisgICAgICAgIH0KKyAgICAgICAgY2FzZSBUcmFuc2Zv
cm1PcGVyYXRpb246Ok1BVFJJWF8zRDogeworICAgICAgICAgICAgTWF0cml4M0RUcmFuc2Zvcm1P
cGVyYXRpb24qIHRyYW5zZm9ybSA9IHN0YXRpY19jYXN0PE1hdHJpeDNEVHJhbnNmb3JtT3BlcmF0
aW9uKj4odHJhbnNmb3JtT3BlcmF0aW9ucy5vcGVyYXRpb25zKClbal0uZ2V0KCkpOworICAgICAg
ICAgICAgVHJhbnNmb3JtYXRpb25NYXRyaXggbSA9IHRyYW5zZm9ybS0+bWF0cml4KCk7CisgICAg
ICAgICAgICB3ZWJUcmFuc2Zvcm1PcGVyYXRpb25zLmFwcGVuZE1hdHJpeChXZWJUcmFuc2Zvcm1h
dGlvbk1hdHJpeChtKSk7CisgICAgICAgICAgICBicmVhazsKKyAgICAgICAgfQorICAgICAgICBj
YXNlIFRyYW5zZm9ybU9wZXJhdGlvbjo6UEVSU1BFQ1RJVkU6IHsKKyAgICAgICAgICAgIFBlcnNw
ZWN0aXZlVHJhbnNmb3JtT3BlcmF0aW9uKiB0cmFuc2Zvcm0gPSBzdGF0aWNfY2FzdDxQZXJzcGVj
dGl2ZVRyYW5zZm9ybU9wZXJhdGlvbio+KHRyYW5zZm9ybU9wZXJhdGlvbnMub3BlcmF0aW9ucygp
W2pdLmdldCgpKTsKKyAgICAgICAgICAgIHdlYlRyYW5zZm9ybU9wZXJhdGlvbnMuYXBwZW5kUGVy
c3BlY3RpdmUoZmxvYXRWYWx1ZUZvckxlbmd0aCh0cmFuc2Zvcm0tPnBlcnNwZWN0aXZlKCksIDAp
KTsKKyAgICAgICAgICAgIGJyZWFrOworICAgICAgICB9CisgICAgICAgIGNhc2UgVHJhbnNmb3Jt
T3BlcmF0aW9uOjpJREVOVElUWToKKyAgICAgICAgY2FzZSBUcmFuc2Zvcm1PcGVyYXRpb246Ok5P
TkU6CisgICAgICAgICAgICAvLyBEbyBub3RoaW5nLgorICAgICAgICAgICAgYnJlYWs7CisgICAg
ICAgIH0gLy8gc3dpdGNoCisgICAgfSAvLyBmb3IgZWFjaCBvcGVyYXRpb24KKworICAgIHJldHVy
biB3ZWJUcmFuc2Zvcm1PcGVyYXRpb25zOworfQorCit0ZW1wbGF0ZSA8Y2xhc3MgVmFsdWUsIGNs
YXNzIEtleWZyYW1lLCBjbGFzcyBDdXJ2ZT4KK2Jvb2wgYXBwZW5kS2V5ZnJhbWUoQ3VydmUmIGN1
cnZlLCBkb3VibGUga2V5VGltZSwgY29uc3QgVmFsdWUqIHZhbHVlLCBQYXNzT3duUHRyPENDVGlt
aW5nRnVuY3Rpb24+IHRpbWluZ0Z1bmN0aW9uLCBjb25zdCBGbG9hdFNpemUmKQoreworICAgIGN1
cnZlLmFkZEtleWZyYW1lKEtleWZyYW1lOjpjcmVhdGUoa2V5VGltZSwgdmFsdWUtPnZhbHVlKCks
IHRpbWluZ0Z1bmN0aW9uKSk7CisgICAgcmV0dXJuIHRydWU7Cit9CisKK3RlbXBsYXRlIDw+Citi
b29sIGFwcGVuZEtleWZyYW1lPFRyYW5zZm9ybUFuaW1hdGlvblZhbHVlLCBDQ1RyYW5zZm9ybUtl
eWZyYW1lLCBDQ0tleWZyYW1lZFRyYW5zZm9ybUFuaW1hdGlvbkN1cnZlPihDQ0tleWZyYW1lZFRy
YW5zZm9ybUFuaW1hdGlvbkN1cnZlJiBjdXJ2ZSwgZG91YmxlIGtleVRpbWUsIGNvbnN0IFRyYW5z
Zm9ybUFuaW1hdGlvblZhbHVlKiB2YWx1ZSwgUGFzc093blB0cjxDQ1RpbWluZ0Z1bmN0aW9uPiB0
aW1pbmdGdW5jdGlvbiwgY29uc3QgRmxvYXRTaXplJiBib3hTaXplKQoreworICAgIFdlYlRyYW5z
Zm9ybU9wZXJhdGlvbnMgb3BlcmF0aW9ucyA9IHRvV2ViVHJhbnNmb3JtT3BlcmF0aW9ucygqdmFs
dWUtPnZhbHVlKCksIGJveFNpemUpOworICAgIGlmIChvcGVyYXRpb25zLmFwcGx5KCkuaXNJbnZl
cnRpYmxlKCkpIHsKKyAgICAgICAgY3VydmUuYWRkS2V5ZnJhbWUoQ0NUcmFuc2Zvcm1LZXlmcmFt
ZTo6Y3JlYXRlKGtleVRpbWUsIG9wZXJhdGlvbnMsIHRpbWluZ0Z1bmN0aW9uKSk7CisgICAgICAg
IHJldHVybiB0cnVlOworICAgIH0KKyAgICByZXR1cm4gZmFsc2U7Cit9CisKK3RlbXBsYXRlIDxj
bGFzcyBWYWx1ZSwgY2xhc3MgS2V5ZnJhbWUsIGNsYXNzIEN1cnZlPgorUGFzc093blB0cjxDQ0Fj
dGl2ZUFuaW1hdGlvbj4gY3JlYXRlQWN0aXZlQW5pbWF0aW9uKGNvbnN0IEtleWZyYW1lVmFsdWVM
aXN0JiB2YWx1ZUxpc3QsIGNvbnN0IEFuaW1hdGlvbiogYW5pbWF0aW9uLCBzaXplX3QgYW5pbWF0
aW9uSWQsIHNpemVfdCBncm91cElkLCBkb3VibGUgdGltZU9mZnNldCwgQ0NBY3RpdmVBbmltYXRp
b246OlRhcmdldFByb3BlcnR5IHRhcmdldFByb3BlcnR5LCBjb25zdCBGbG9hdFNpemUmIGJveFNp
emUpCit7CisgICAgYm9vbCBhbHRlcm5hdGUgPSBmYWxzZTsKKyAgICBib29sIHJldmVyc2UgPSBm
YWxzZTsKKyAgICBpZiAoYW5pbWF0aW9uICYmIGFuaW1hdGlvbi0+aXNEaXJlY3Rpb25TZXQoKSkg
eworICAgICAgICBBbmltYXRpb246OkFuaW1hdGlvbkRpcmVjdGlvbiBkaXJlY3Rpb24gPSBhbmlt
YXRpb24tPmRpcmVjdGlvbigpOworICAgICAgICBpZiAoZGlyZWN0aW9uID09IEFuaW1hdGlvbjo6
QW5pbWF0aW9uRGlyZWN0aW9uQWx0ZXJuYXRlIHx8IGRpcmVjdGlvbiA9PSBBbmltYXRpb246OkFu
aW1hdGlvbkRpcmVjdGlvbkFsdGVybmF0ZVJldmVyc2UpCisgICAgICAgICAgICBhbHRlcm5hdGUg
PSB0cnVlOworICAgICAgICBpZiAoZGlyZWN0aW9uID09IEFuaW1hdGlvbjo6QW5pbWF0aW9uRGly
ZWN0aW9uUmV2ZXJzZSB8fCBkaXJlY3Rpb24gPT0gQW5pbWF0aW9uOjpBbmltYXRpb25EaXJlY3Rp
b25BbHRlcm5hdGVSZXZlcnNlKQorICAgICAgICAgICAgcmV2ZXJzZSA9IHRydWU7CisgICAgfQor
CisgICAgT3duUHRyPEN1cnZlPiBjdXJ2ZSA9IEN1cnZlOjpjcmVhdGUoKTsKKyAgICBWZWN0b3I8
S2V5ZnJhbWU+IGtleWZyYW1lczsKKworICAgIGZvciAoc2l6ZV90IGkgPSAwOyBpIDwgdmFsdWVM
aXN0LnNpemUoKTsgaSsrKSB7CisgICAgICAgIHNpemVfdCBpbmRleCA9IHJldmVyc2UgPyB2YWx1
ZUxpc3Quc2l6ZSgpIC0gaSAtIDEgOiBpOworCisgICAgICAgIGNvbnN0IFZhbHVlKiBvcmlnaW5h
bFZhbHVlID0gc3RhdGljX2Nhc3Q8Y29uc3QgVmFsdWUqPih2YWx1ZUxpc3QuYXQoaW5kZXgpKTsK
KworICAgICAgICBPd25QdHI8Q0NUaW1pbmdGdW5jdGlvbj4gdGltaW5nRnVuY3Rpb247CisgICAg
ICAgIGNvbnN0IFRpbWluZ0Z1bmN0aW9uKiBvcmlnaW5hbFRpbWluZ0Z1bmN0aW9uID0gb3JpZ2lu
YWxWYWx1ZS0+dGltaW5nRnVuY3Rpb24oKTsKKworICAgICAgICAvLyBJZiB0aGVyZSBoYXNuJ3Qg
YmVlbiBhIHRpbWluZyBmdW5jdGlvbiBhc3NvY2lhdGVkIHdpdGggdGhpcyBrZXlmcmFtZSwgdXNl
IHRoZQorICAgICAgICAvLyBhbmltYXRpb24ncyB0aW1pbmcgZnVuY3Rpb24sIGlmIHdlIGhhdmUg
b25lLgorICAgICAgICBpZiAoIW9yaWdpbmFsVGltaW5nRnVuY3Rpb24gJiYgYW5pbWF0aW9uLT5p
c1RpbWluZ0Z1bmN0aW9uU2V0KCkpCisgICAgICAgICAgICBvcmlnaW5hbFRpbWluZ0Z1bmN0aW9u
ID0gYW5pbWF0aW9uLT50aW1pbmdGdW5jdGlvbigpLmdldCgpOworCisgICAgICAgIGlmIChvcmln
aW5hbFRpbWluZ0Z1bmN0aW9uKSB7CisgICAgICAgICAgICBzd2l0Y2ggKG9yaWdpbmFsVGltaW5n
RnVuY3Rpb24tPnR5cGUoKSkgeworICAgICAgICAgICAgY2FzZSBUaW1pbmdGdW5jdGlvbjo6U3Rl
cHNGdW5jdGlvbjoKKyAgICAgICAgICAgICAgICAvLyBGSVhNRTogYWRkIHN1cHBvcnQgZm9yIHN0
ZXBzIHRpbWluZyBmdW5jdGlvbi4KKyAgICAgICAgICAgICAgICByZXR1cm4gbnVsbHB0cjsKKyAg
ICAgICAgICAgIGNhc2UgVGltaW5nRnVuY3Rpb246OkxpbmVhckZ1bmN0aW9uOgorICAgICAgICAg
ICAgICAgIC8vIERvbid0IHNldCB0aGUgdGltaW5nIGZ1bmN0aW9uLiBLZXlmcmFtZXMgYXJlIGlu
dGVycG9sYXRlZCBsaW5lYXJseSBpZiB0aGVyZSBpcyBubyB0aW1pbmcgZnVuY3Rpb24uCisgICAg
ICAgICAgICAgICAgYnJlYWs7CisgICAgICAgICAgICBjYXNlIFRpbWluZ0Z1bmN0aW9uOjpDdWJp
Y0JlemllckZ1bmN0aW9uOgorICAgICAgICAgICAgICAgIGNvbnN0IEN1YmljQmV6aWVyVGltaW5n
RnVuY3Rpb24qIG9yaWdpbmFsQmV6aWVyVGltaW5nRnVuY3Rpb24gPSBzdGF0aWNfY2FzdDxjb25z
dCBDdWJpY0JlemllclRpbWluZ0Z1bmN0aW9uKj4ob3JpZ2luYWxUaW1pbmdGdW5jdGlvbik7Cisg
ICAgICAgICAgICAgICAgdGltaW5nRnVuY3Rpb24gPSBDQ0N1YmljQmV6aWVyVGltaW5nRnVuY3Rp
b246OmNyZWF0ZShvcmlnaW5hbEJlemllclRpbWluZ0Z1bmN0aW9uLT54MSgpLCBvcmlnaW5hbEJl
emllclRpbWluZ0Z1bmN0aW9uLT55MSgpLCBvcmlnaW5hbEJlemllclRpbWluZ0Z1bmN0aW9uLT54
MigpLCBvcmlnaW5hbEJlemllclRpbWluZ0Z1bmN0aW9uLT55MigpKTsKKyAgICAgICAgICAgICAg
ICBicmVhazsKKyAgICAgICAgICAgIH0gLy8gc3dpdGNoCisgICAgICAgIH0gZWxzZQorICAgICAg
ICAgICAgdGltaW5nRnVuY3Rpb24gPSBDQ0Vhc2VUaW1pbmdGdW5jdGlvbjo6Y3JlYXRlKCk7CisK
KyAgICAgICAgZG91YmxlIGR1cmF0aW9uID0gKGFuaW1hdGlvbiAmJiBhbmltYXRpb24tPmlzRHVy
YXRpb25TZXQoKSkgPyBhbmltYXRpb24tPmR1cmF0aW9uKCkgOiAxOworICAgICAgICBkb3VibGUg
a2V5VGltZSA9IG9yaWdpbmFsVmFsdWUtPmtleVRpbWUoKSAqIGR1cmF0aW9uOworCisgICAgICAg
IGlmIChyZXZlcnNlKQorICAgICAgICAgICAga2V5VGltZSA9IGR1cmF0aW9uIC0ga2V5VGltZTsK
KworICAgICAgICBib29sIGFkZGVkS2V5ZnJhbWUgPSBhcHBlbmRLZXlmcmFtZTxWYWx1ZSwgS2V5
ZnJhbWUsIEN1cnZlPigqY3VydmUsIGtleVRpbWUsIG9yaWdpbmFsVmFsdWUsIHRpbWluZ0Z1bmN0
aW9uLnJlbGVhc2UoKSwgYm94U2l6ZSk7CisgICAgICAgIGlmICghYWRkZWRLZXlmcmFtZSkKKyAg
ICAgICAgICAgIHJldHVybiBudWxscHRyOworICAgIH0KKworICAgIE93blB0cjxDQ0FjdGl2ZUFu
aW1hdGlvbj4gYW5pbSA9IENDQWN0aXZlQW5pbWF0aW9uOjpjcmVhdGUoY3VydmUucmVsZWFzZSgp
LCBhbmltYXRpb25JZCwgZ3JvdXBJZCwgdGFyZ2V0UHJvcGVydHkpOworCisgICAgQVNTRVJUKGFu
aW0uZ2V0KCkpOworCisgICAgaWYgKGFuaW0uZ2V0KCkpIHsKKyAgICAgICAgaW50IGl0ZXJhdGlv
bnMgPSAoYW5pbWF0aW9uICYmIGFuaW1hdGlvbi0+aXNJdGVyYXRpb25Db3VudFNldCgpKSA/IGFu
aW1hdGlvbi0+aXRlcmF0aW9uQ291bnQoKSA6IDE7CisgICAgICAgIGFuaW0tPnNldEl0ZXJhdGlv
bnMoaXRlcmF0aW9ucyk7CisgICAgICAgIGFuaW0tPnNldEFsdGVybmF0ZXNEaXJlY3Rpb24oYWx0
ZXJuYXRlKTsKKyAgICB9CisKKyAgICAvLyBJbiBvcmRlciB0byBhdm9pZCBza2V3LCB0aGUgbWFp
biB0aHJlYWQgYW5pbWF0aW9uIGNhbm5vdCB0aWNrIHVudGlsIGl0IGhhcyByZWNlaXZlZCB0aGUg
c3RhcnQgdGltZSBvZgorICAgIC8vIHRoZSBjb3JyZXNwb25kaW5nIGltcGwgdGhyZWFkIGFuaW1h
dGlvbi4KKyAgICBhbmltLT5zZXROZWVkc1N5bmNocm9uaXplZFN0YXJ0VGltZSh0cnVlKTsKKwor
ICAgIC8vIElmIHRpbWVPZmZzZXQgPiAwLCB0aGVuIHRoZSBhbmltYXRpb24gaGFzIHN0YXJ0ZWQg
aW4gdGhlIHBhc3QuCisgICAgYW5pbS0+c2V0VGltZU9mZnNldCh0aW1lT2Zmc2V0KTsKKworICAg
IHJldHVybiBhbmltLnJlbGVhc2UoKTsKK30KKworUGFzc093blB0cjxDQ0FjdGl2ZUFuaW1hdGlv
bj4gY3JlYXRlQWN0aXZlQW5pbWF0aW9uKGNvbnN0IEtleWZyYW1lVmFsdWVMaXN0JiB2YWx1ZXMs
IGNvbnN0IEFuaW1hdGlvbiogYW5pbWF0aW9uLCBzaXplX3QgYW5pbWF0aW9uSWQsIHNpemVfdCBn
cm91cElkLCBkb3VibGUgdGltZU9mZnNldCwgY29uc3QgRmxvYXRTaXplJiBib3hTaXplKQorewor
ICAgIGlmICh2YWx1ZXMucHJvcGVydHkoKSA9PSBBbmltYXRlZFByb3BlcnR5V2Via2l0VHJhbnNm
b3JtKQorICAgICAgICByZXR1cm4gY3JlYXRlQWN0aXZlQW5pbWF0aW9uPFRyYW5zZm9ybUFuaW1h
dGlvblZhbHVlLCBDQ1RyYW5zZm9ybUtleWZyYW1lLCBDQ0tleWZyYW1lZFRyYW5zZm9ybUFuaW1h
dGlvbkN1cnZlPih2YWx1ZXMsIGFuaW1hdGlvbiwgYW5pbWF0aW9uSWQsIGdyb3VwSWQsIHRpbWVP
ZmZzZXQsIENDQWN0aXZlQW5pbWF0aW9uOjpUcmFuc2Zvcm0sIEZsb2F0U2l6ZShib3hTaXplKSk7
CisKKyAgICBpZiAodmFsdWVzLnByb3BlcnR5KCkgPT0gQW5pbWF0ZWRQcm9wZXJ0eU9wYWNpdHkp
CisgICAgICAgIHJldHVybiBjcmVhdGVBY3RpdmVBbmltYXRpb248RmxvYXRBbmltYXRpb25WYWx1
ZSwgQ0NGbG9hdEtleWZyYW1lLCBDQ0tleWZyYW1lZEZsb2F0QW5pbWF0aW9uQ3VydmU+KHZhbHVl
cywgYW5pbWF0aW9uLCBhbmltYXRpb25JZCwgZ3JvdXBJZCwgdGltZU9mZnNldCwgQ0NBY3RpdmVB
bmltYXRpb246Ok9wYWNpdHksIEZsb2F0U2l6ZSgpKTsKKworICAgIHJldHVybiBudWxscHRyOwor
fQorCit9IC8vIG5hbWVzcGFjZSBXZWJDb3JlCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9w
bGF0Zm9ybS9ncmFwaGljcy9jaHJvbWl1bS9BbmltYXRpb25UcmFuc2xhdGlvblV0aWwuaCBiL1Nv
dXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2Nocm9taXVtL0FuaW1hdGlvblRyYW5zbGF0
aW9uVXRpbC5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAuLjA4ZjYwZDIwZGMzYmMxZmM3OGRhNGRhYjM1ZjdiY2MzOTUw
Y2E1MTQKLS0tIC9kZXYvbnVsbAorKysgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGlj
cy9jaHJvbWl1bS9BbmltYXRpb25UcmFuc2xhdGlvblV0aWwuaApAQCAtMCwwICsxLDQ3IEBACisv
KgorICogQ29weXJpZ2h0IChDKSAyMDEwIEdvb2dsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQu
CisgKgorICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jt
cywgd2l0aCBvciB3aXRob3V0CisgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlk
ZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMgYXJlCisgKiBtZXQ6CisgKgorICogICAg
ICogUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBj
b3B5cmlnaHQKKyAqIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xs
b3dpbmcgZGlzY2xhaW1lci4KKyAqICAgICAqIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9y
bSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUKKyAqIGNvcHlyaWdodCBub3RpY2UsIHRoaXMgbGlz
dCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIKKyAqIGluIHRoZSBk
b2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUKKyAq
IGRpc3RyaWJ1dGlvbi4KKyAqICAgICAqIE5laXRoZXIgdGhlIG5hbWUgb2YgR29vZ2xlIEluYy4g
bm9yIHRoZSBuYW1lcyBvZiBpdHMKKyAqIGNvbnRyaWJ1dG9ycyBtYXkgYmUgdXNlZCB0byBlbmRv
cnNlIG9yIHByb21vdGUgcHJvZHVjdHMgZGVyaXZlZCBmcm9tCisgKiB0aGlzIHNvZnR3YXJlIHdp
dGhvdXQgc3BlY2lmaWMgcHJpb3Igd3JpdHRlbiBwZXJtaXNzaW9uLgorICoKKyAqIFRISVMgU09G
VFdBUkUgSVMgUFJPVklERUQgQlkgVEhFIENPUFlSSUdIVCBIT0xERVJTIEFORCBDT05UUklCVVRP
UlMKKyAqICJBUyBJUyIgQU5EIEFOWSBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5D
TFVESU5HLCBCVVQgTk9UCisgKiBMSU1JVEVEIFRPLCBUSEUgSU1QTElFRCBXQVJSQU5USUVTIE9G
IE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IKKyAqIEEgUEFSVElDVUxBUiBQVVJQT1NF
IEFSRSBESVNDTEFJTUVELiBJTiBOTyBFVkVOVCBTSEFMTCBUSEUgQ09QWVJJR0hUCisgKiBPV05F
UiBPUiBDT05UUklCVVRPUlMgQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5D
SURFTlRBTCwKKyAqIFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTCBEQU1BR0VT
IChJTkNMVURJTkcsIEJVVCBOT1QKKyAqIExJTUlURUQgVE8sIFBST0NVUkVNRU5UIE9GIFNVQlNU
SVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLAorICogREFUQSwgT1IgUFJPRklU
UzsgT1IgQlVTSU5FU1MgSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZCisg
KiBUSEVPUlkgT0YgTElBQklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNULCBTVFJJQ1QgTElBQklM
SVRZLCBPUiBUT1JUCisgKiAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklT
SU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UKKyAqIE9GIFRISVMgU09GVFdBUkUsIEVWRU4g
SUYgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCisgKi8KKworI2lm
bmRlZiBBbmltYXRpb25UcmFuc2xhdGlvblV0aWxfaAorI2RlZmluZSBBbmltYXRpb25UcmFuc2xh
dGlvblV0aWxfaAorCisjaW5jbHVkZSA8d3RmL1Bhc3NPd25QdHIuaD4KKworY2xhc3MgS2V5ZnJh
bWVWYWx1ZUxpc3Q7CitjbGFzcyBBbmltYXRpb247CitjbGFzcyBGbG9hdFNpemU7CitjbGFzcyBD
Q0FjdGl2ZUFuaW1hdGlvbjsKKworbmFtZXNwYWNlIFdlYkNvcmUgeworCitQYXNzT3duUHRyPEND
QWN0aXZlQW5pbWF0aW9uPiBjcmVhdGVBY3RpdmVBbmltYXRpb24oY29uc3QgS2V5ZnJhbWVWYWx1
ZUxpc3QmLCBjb25zdCBBbmltYXRpb24qLCBzaXplX3QgYW5pbWF0aW9uSWQsIHNpemVfdCBncm91
cElkLCBkb3VibGUgdGltZU9mZnNldCwgY29uc3QgRmxvYXRTaXplJiBib3hTaXplKTsKKworfSAv
LyBuYW1lc3BhY2UgV2ViQ29yZQorCisjZW5kaWYgLy8gQW5pbWF0aW9uVHJhbnNsYXRpb25VdGls
X2gKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2Nocm9taXVt
L0dyYXBoaWNzTGF5ZXJDaHJvbWl1bS5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFw
aGljcy9jaHJvbWl1bS9HcmFwaGljc0xheWVyQ2hyb21pdW0uY3BwCmluZGV4IDE4NDMzMzYwOTUx
YjJiZmNlYTdjYjExYmJlOTAwMWVhOTg1ZjRlMDEuLjk0OWE0YTk4ZDM2MWI0YTNkMTAxY2QzZjEz
MzRmZmRlOGI3OTJjMmIgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBo
aWNzL2Nocm9taXVtL0dyYXBoaWNzTGF5ZXJDaHJvbWl1bS5jcHAKKysrIGIvU291cmNlL1dlYkNv
cmUvcGxhdGZvcm0vZ3JhcGhpY3MvY2hyb21pdW0vR3JhcGhpY3NMYXllckNocm9taXVtLmNwcApA
QCAtNDYsNiArNDYsNyBAQAogI2luY2x1ZGUgIkdyYXBoaWNzTGF5ZXJDaHJvbWl1bS5oIgogCiAj
aW5jbHVkZSAiQW5pbWF0aW9uSWRWZW5kb3IuaCIKKyNpbmNsdWRlICJBbmltYXRpb25UcmFuc2xh
dGlvblV0aWwuaCIKICNpbmNsdWRlICJDYW52YXMyRExheWVyQ2hyb21pdW0uaCIKICNpbmNsdWRl
ICJDb250ZW50TGF5ZXJDaHJvbWl1bS5oIgogI2luY2x1ZGUgIkZsb2F0Q29udmVyc2lvbi5oIgpA
QCAtNTgsNiArNTksOCBAQAogI2luY2x1ZGUgIlNrTWF0cml4NDQuaCIKICNpbmNsdWRlICJTeXN0
ZW1UaW1lLmgiCiAKKyNpbmNsdWRlICJjYy9DQ0FjdGl2ZUFuaW1hdGlvbi5oIgorCiAjaW5jbHVk
ZSA8cHVibGljL1dlYkZpbHRlck9wZXJhdGlvbi5oPgogI2luY2x1ZGUgPHB1YmxpYy9XZWJGaWx0
ZXJPcGVyYXRpb25zLmg+CiAjaW5jbHVkZSA8cHVibGljL1dlYkZsb2F0UG9pbnQuaD4KQEAgLTUw
MCw4ICs1MDMsMjggQEAgdm9pZCBHcmFwaGljc0xheWVyQ2hyb21pdW06OnNldENvbnRlbnRzVG9D
YW52YXMoUGxhdGZvcm1MYXllciogcGxhdGZvcm1MYXllcikKIAogYm9vbCBHcmFwaGljc0xheWVy
Q2hyb21pdW06OmFkZEFuaW1hdGlvbihjb25zdCBLZXlmcmFtZVZhbHVlTGlzdCYgdmFsdWVzLCBj
b25zdCBJbnRTaXplJiBib3hTaXplLCBjb25zdCBBbmltYXRpb24qIGFuaW1hdGlvbiwgY29uc3Qg
U3RyaW5nJiBhbmltYXRpb25OYW1lLCBkb3VibGUgdGltZU9mZnNldCkKIHsKKyAgICAvLyBCYWls
IGVhcmx5IGlmIHdlIGhhdmUgYSBsYXJnZSByb3RhdGlvbi4KKyAgICBpZiAodmFsdWVzLnByb3Bl
cnR5KCkgPT0gQW5pbWF0ZWRQcm9wZXJ0eVdlYmtpdFRyYW5zZm9ybSkgeworICAgICAgICBib29s
IGhhc1JvdGF0aW9uT2ZNb3JlVGhhbjE4MERlZ3JlZXMgPSBmYWxzZTsKKyAgICAgICAgdmFsaWRh
dGVUcmFuc2Zvcm1PcGVyYXRpb25zKHZhbHVlcywgaGFzUm90YXRpb25PZk1vcmVUaGFuMTgwRGVn
cmVlcyk7CisgICAgICAgIGlmIChoYXNSb3RhdGlvbk9mTW9yZVRoYW4xODBEZWdyZWVzKQorICAg
ICAgICAgICAgcmV0dXJuIGZhbHNlOworICAgIH0KKwogICAgIHByaW1hcnlMYXllcigpLnVud3Jh
cDxMYXllckNocm9taXVtPigpLT5zZXRMYXllckFuaW1hdGlvbkRlbGVnYXRlKHRoaXMpOwotICAg
IHJldHVybiBwcmltYXJ5TGF5ZXIoKS51bndyYXA8TGF5ZXJDaHJvbWl1bT4oKS0+YWRkQW5pbWF0
aW9uKHZhbHVlcywgYm94U2l6ZSwgYW5pbWF0aW9uLCBtYXBBbmltYXRpb25OYW1lVG9JZChhbmlt
YXRpb25OYW1lKSwgQW5pbWF0aW9uSWRWZW5kb3I6OmdldE5leHRHcm91cElkKCksIHRpbWVPZmZz
ZXQpOworCisgICAgaW50IGFuaW1hdGlvbklkID0gbWFwQW5pbWF0aW9uTmFtZVRvSWQoYW5pbWF0
aW9uTmFtZSk7CisgICAgaW50IGdyb3VwSWQgPSBBbmltYXRpb25JZFZlbmRvcjo6Z2V0TmV4dEdy
b3VwSWQoKTsKKworICAgIE93blB0cjxDQ0FjdGl2ZUFuaW1hdGlvbj4gdG9BZGQoY3JlYXRlQWN0
aXZlQW5pbWF0aW9uKHZhbHVlcywgYW5pbWF0aW9uLCBhbmltYXRpb25JZCwgZ3JvdXBJZCwgdGlt
ZU9mZnNldCwgYm94U2l6ZSkpOworCisgICAgaWYgKHRvQWRkLmdldCgpKSB7CisgICAgICAgIC8v
IFJlbW92ZSBhbnkgZXhpc3RpbmcgYW5pbWF0aW9ucyB3aXRoIHRoZSBzYW1lIGFuaW1hdGlvbiBp
ZCBhbmQgdGFyZ2V0IHByb3BlcnR5LgorICAgICAgICBwcmltYXJ5TGF5ZXIoKS51bndyYXA8TGF5
ZXJDaHJvbWl1bT4oKS0+bGF5ZXJBbmltYXRpb25Db250cm9sbGVyKCktPnJlbW92ZUFuaW1hdGlv
bih0b0FkZC0+aWQoKSwgdG9BZGQtPnRhcmdldFByb3BlcnR5KCkpOworICAgICAgICByZXR1cm4g
cHJpbWFyeUxheWVyKCkudW53cmFwPExheWVyQ2hyb21pdW0+KCktPmFkZEFuaW1hdGlvbih0b0Fk
ZC5yZWxlYXNlKCkpOworICAgIH0KKworICAgIHJldHVybiBmYWxzZTsKIH0KIAogdm9pZCBHcmFw
aGljc0xheWVyQ2hyb21pdW06OnBhdXNlQW5pbWF0aW9uKGNvbnN0IFN0cmluZyYgYW5pbWF0aW9u
TmFtZSwgZG91YmxlIHRpbWVPZmZzZXQpCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9wbGF0
Zm9ybS9ncmFwaGljcy9jaHJvbWl1bS9MYXllckNocm9taXVtLmNwcCBiL1NvdXJjZS9XZWJDb3Jl
L3BsYXRmb3JtL2dyYXBoaWNzL2Nocm9taXVtL0xheWVyQ2hyb21pdW0uY3BwCmluZGV4IDc0NDU5
YTg1MWQxYWMyNmFlZWE4NDIxYTQzZTE1ZjgzY2Y0MWQwMzAuLjQ0MzZhZDYyZGY1ZDZiZWE5OTY3
NjFkMTE3ODJkODg2ZDNiNGNhZDUgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3Jt
L2dyYXBoaWNzL2Nocm9taXVtL0xheWVyQ2hyb21pdW0uY3BwCisrKyBiL1NvdXJjZS9XZWJDb3Jl
L3BsYXRmb3JtL2dyYXBoaWNzL2Nocm9taXVtL0xheWVyQ2hyb21pdW0uY3BwCkBAIC0zNyw2ICsz
Nyw3IEBACiAjaW5jbHVkZSAiUGxhdGZvcm1Db250ZXh0U2tpYS5oIgogI2luY2x1ZGUgIlJlbmRl
ckxheWVyQmFja2luZy5oIgogI2luY2x1ZGUgIlRleHRTdHJlYW0uaCIKKyNpbmNsdWRlICJjYy9D
Q0FjdGl2ZUFuaW1hdGlvbi5oIgogI2luY2x1ZGUgImNjL0NDQW5pbWF0aW9uRXZlbnRzLmgiCiAj
aW5jbHVkZSAiY2MvQ0NMYXllckFuaW1hdGlvbkNvbnRyb2xsZXIuaCIKICNpbmNsdWRlICJjYy9D
Q0xheWVyQW5pbWF0aW9uRGVsZWdhdGUuaCIKQEAgLTU5OCwxNyArNTk5LDE1IEBAIHZvaWQgTGF5
ZXJDaHJvbWl1bTo6c2V0VHJhbnNmb3JtRnJvbUFuaW1hdGlvbihjb25zdCBUcmFuc2Zvcm1hdGlv
bk1hdHJpeCYgdHJhbnNmCiAgICAgbV90cmFuc2Zvcm0gPSB0cmFuc2Zvcm07CiB9CiAKLWJvb2wg
TGF5ZXJDaHJvbWl1bTo6YWRkQW5pbWF0aW9uKGNvbnN0IEtleWZyYW1lVmFsdWVMaXN0JiB2YWx1
ZXMsIGNvbnN0IEludFNpemUmIGJveFNpemUsIGNvbnN0IEFuaW1hdGlvbiogYW5pbWF0aW9uLCBp
bnQgYW5pbWF0aW9uSWQsIGludCBncm91cElkLCBkb3VibGUgdGltZU9mZnNldCkKK2Jvb2wgTGF5
ZXJDaHJvbWl1bTo6YWRkQW5pbWF0aW9uKFBhc3NPd25QdHI8Q0NBY3RpdmVBbmltYXRpb24+IGFu
aW1hdGlvbikKIHsKICAgICBpZiAoIW1fbGF5ZXJUcmVlSG9zdCB8fCAhbV9sYXllclRyZWVIb3N0
LT5zZXR0aW5ncygpLnRocmVhZGVkQW5pbWF0aW9uRW5hYmxlZCkKICAgICAgICAgcmV0dXJuIGZh
bHNlOwogCi0gICAgYm9vbCBhZGRlZEFuaW1hdGlvbiA9IG1fbGF5ZXJBbmltYXRpb25Db250cm9s
bGVyLT5hZGRBbmltYXRpb24odmFsdWVzLCBib3hTaXplLCBhbmltYXRpb24sIGFuaW1hdGlvbklk
LCBncm91cElkLCB0aW1lT2Zmc2V0KTsKLSAgICBpZiAoYWRkZWRBbmltYXRpb24pIHsKLSAgICAg
ICAgbV9sYXllclRyZWVIb3N0LT5kaWRBZGRBbmltYXRpb24oKTsKLSAgICAgICAgc2V0TmVlZHND
b21taXQoKTsKLSAgICB9Ci0gICAgcmV0dXJuIGFkZGVkQW5pbWF0aW9uOworICAgIG1fbGF5ZXJB
bmltYXRpb25Db250cm9sbGVyLT5hZGRBbmltYXRpb24oYW5pbWF0aW9uKTsKKyAgICBtX2xheWVy
VHJlZUhvc3QtPmRpZEFkZEFuaW1hdGlvbigpOworICAgIHNldE5lZWRzQ29tbWl0KCk7CisgICAg
cmV0dXJuIHRydWU7CiB9CiAKIHZvaWQgTGF5ZXJDaHJvbWl1bTo6cGF1c2VBbmltYXRpb24oaW50
IGFuaW1hdGlvbklkLCBkb3VibGUgdGltZU9mZnNldCkKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJD
b3JlL3BsYXRmb3JtL2dyYXBoaWNzL2Nocm9taXVtL0xheWVyQ2hyb21pdW0uaCBiL1NvdXJjZS9X
ZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2Nocm9taXVtL0xheWVyQ2hyb21pdW0uaAppbmRleCA5
YmUwMjc5ZTJhZWJjZDdjZGM3YzY4YmQwMjVlYmUwODQxYzE3NWQzLi45N2EyMzg0YWUzOTAxMDM0
MTZlZmQyMzY4YmY3ZDI4YTlkNjJhMzZhIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9wbGF0
Zm9ybS9ncmFwaGljcy9jaHJvbWl1bS9MYXllckNocm9taXVtLmgKKysrIGIvU291cmNlL1dlYkNv
cmUvcGxhdGZvcm0vZ3JhcGhpY3MvY2hyb21pdW0vTGF5ZXJDaHJvbWl1bS5oCkBAIC01Nyw2ICs1
Nyw3IEBACiAKIG5hbWVzcGFjZSBXZWJDb3JlIHsKIAorY2xhc3MgQ0NBY3RpdmVBbmltYXRpb247
CiBzdHJ1Y3QgQ0NBbmltYXRpb25FdmVudDsKIGNsYXNzIENDTGF5ZXJBbmltYXRpb25EZWxlZ2F0
ZTsKIGNsYXNzIENDTGF5ZXJJbXBsOwpAQCAtMjM0LDcgKzIzNSw3IEBAIHB1YmxpYzoKICAgICB2
b2lkIHNldEFsd2F5c1Jlc2VydmVUZXh0dXJlcyhib29sIGFsd2F5c1Jlc2VydmVUZXh0dXJlcykg
eyBtX2Fsd2F5c1Jlc2VydmVUZXh0dXJlcyA9IGFsd2F5c1Jlc2VydmVUZXh0dXJlczsgfQogICAg
IGJvb2wgYWx3YXlzUmVzZXJ2ZVRleHR1cmVzKCkgY29uc3QgeyByZXR1cm4gbV9hbHdheXNSZXNl
cnZlVGV4dHVyZXM7IH0KIAotICAgIGJvb2wgYWRkQW5pbWF0aW9uKGNvbnN0IEtleWZyYW1lVmFs
dWVMaXN0JiwgY29uc3QgSW50U2l6ZSYgYm94U2l6ZSwgY29uc3QgQW5pbWF0aW9uKiwgaW50IGFu
aW1hdGlvbklkLCBpbnQgZ3JvdXBJZCwgZG91YmxlIHRpbWVPZmZzZXQpOworICAgIGJvb2wgYWRk
QW5pbWF0aW9uKFBhc3NPd25QdHI8Q0NBY3RpdmVBbmltYXRpb24+KTsKICAgICB2b2lkIHBhdXNl
QW5pbWF0aW9uKGludCBhbmltYXRpb25JZCwgZG91YmxlIHRpbWVPZmZzZXQpOwogICAgIHZvaWQg
cmVtb3ZlQW5pbWF0aW9uKGludCBhbmltYXRpb25JZCk7CiAKZGlmZiAtLWdpdCBhL1NvdXJjZS9X
ZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2Nocm9taXVtL0xpbmtIaWdobGlnaHQuY3BwIGIvU291
cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvY2hyb21pdW0vTGlua0hpZ2hsaWdodC5jcHAK
aW5kZXggNTM1MzZiMzJjZTBhZDcwNzI2MTMyNTQzMmEwYTE1MTVhMTZlMDQ4Ny4uOGVkMTc5ZGQ4
MTFlZTc2MGRlZmRkMTllNWY5MTAyZDUzMjc2ZTJhNiAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNv
cmUvcGxhdGZvcm0vZ3JhcGhpY3MvY2hyb21pdW0vTGlua0hpZ2hsaWdodC5jcHAKKysrIGIvU291
cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvY2hyb21pdW0vTGlua0hpZ2hsaWdodC5jcHAK
QEAgLTc0LDcgKzc0LDcgQEAgTGlua0hpZ2hsaWdodDo6TGlua0hpZ2hsaWdodChHcmFwaGljc0xh
eWVyQ2hyb21pdW0qIHBhcmVudCwgY29uc3QgUGF0aCYgcGF0aCwgaW4KICAgICAvLyBhbmltYXRp
b25JZCA9IDEgaXMgcmVzZXJ2ZWQgZm9yIHVzLgogICAgIE93blB0cjxDQ0FjdGl2ZUFuaW1hdGlv
bj4gYW5pbWF0aW9uKENDQWN0aXZlQW5pbWF0aW9uOjpjcmVhdGUoY3VydmUucmVsZWFzZSgpLCBh
bmltYXRpb25JZCwgZ3JvdXBJZCwgQ0NBY3RpdmVBbmltYXRpb246Ok9wYWNpdHkpKTsKICAgICBh
bmltYXRpb24tPnNldE5lZWRzU3luY2hyb25pemVkU3RhcnRUaW1lKHRydWUpOwotICAgIG1fY29u
dGVudExheWVyLT5sYXllckFuaW1hdGlvbkNvbnRyb2xsZXIoKS0+YWRkKGFuaW1hdGlvbi5yZWxl
YXNlKCkpOworICAgIG1fY29udGVudExheWVyLT5sYXllckFuaW1hdGlvbkNvbnRyb2xsZXIoKS0+
YWRkQW5pbWF0aW9uKGFuaW1hdGlvbi5yZWxlYXNlKCkpOwogfQogCiBMaW5rSGlnaGxpZ2h0Ojp+
TGlua0hpZ2hsaWdodCgpCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFw
aGljcy9jaHJvbWl1bS9jYy9DQ0FuaW1hdGlvbkN1cnZlLmggYi9Tb3VyY2UvV2ViQ29yZS9wbGF0
Zm9ybS9ncmFwaGljcy9jaHJvbWl1bS9jYy9DQ0FuaW1hdGlvbkN1cnZlLmgKaW5kZXggN2Y1MDZh
NzA2ZjJhNDNhZTZkMzhhNWFmNjNiZDc1Y2Y4Y2IzZTdkNS4uMzk5ZTA2NmJkMjA2MmI3YTFhZjIx
ZDY2ZTYzZTg0ZmMxZmE2YzliOSAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0v
Z3JhcGhpY3MvY2hyb21pdW0vY2MvQ0NBbmltYXRpb25DdXJ2ZS5oCisrKyBiL1NvdXJjZS9XZWJD
b3JlL3BsYXRmb3JtL2dyYXBoaWNzL2Nocm9taXVtL2NjL0NDQW5pbWF0aW9uQ3VydmUuaApAQCAt
NjUsNyArNjUsNyBAQCBjbGFzcyBDQ1RyYW5zZm9ybUFuaW1hdGlvbkN1cnZlIDogcHVibGljIEND
QW5pbWF0aW9uQ3VydmUgewogcHVibGljOgogICAgIHZpcnR1YWwgfkNDVHJhbnNmb3JtQW5pbWF0
aW9uQ3VydmUoKSB7IH0KIAotICAgIHZpcnR1YWwgVHJhbnNmb3JtYXRpb25NYXRyaXggZ2V0VmFs
dWUoZG91YmxlIHQsIGNvbnN0IEludFNpemUmIGxheWVyU2l6ZSkgY29uc3QgPSAwOworICAgIHZp
cnR1YWwgVHJhbnNmb3JtYXRpb25NYXRyaXggZ2V0VmFsdWUoZG91YmxlIHQpIGNvbnN0ID0gMDsK
IAogICAgIC8vIFBhcnRpYWwgQ0NBbmltYXRpb24gaW1wbGVtZW50YXRpb24uCiAgICAgdmlydHVh
bCBUeXBlIHR5cGUoKSBjb25zdCBPVkVSUklERSB7IHJldHVybiBUcmFuc2Zvcm07IH0KZGlmZiAt
LWdpdCBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2Nocm9taXVtL2NjL0NDS2V5
ZnJhbWVkQW5pbWF0aW9uQ3VydmUuY3BwIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhp
Y3MvY2hyb21pdW0vY2MvQ0NLZXlmcmFtZWRBbmltYXRpb25DdXJ2ZS5jcHAKaW5kZXggYWU0MWZl
MDY5NWIzMGQ2YTI5NDc3NTUwZWY2ZjE5OWIxMzE0Y2ZkOS4uZWY0N2E5NWQyM2M3ZDg0YjZmOGIy
YjI4MDE4ZTlkOTI5YTlhZjc0NyAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0v
Z3JhcGhpY3MvY2hyb21pdW0vY2MvQ0NLZXlmcmFtZWRBbmltYXRpb25DdXJ2ZS5jcHAKKysrIGIv
U291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvY2hyb21pdW0vY2MvQ0NLZXlmcmFtZWRB
bmltYXRpb25DdXJ2ZS5jcHAKQEAgLTI2LDE1ICsyNiw2IEBACiAKICNpbmNsdWRlICJjYy9DQ0tl
eWZyYW1lZEFuaW1hdGlvbkN1cnZlLmgiCiAKLSNpbmNsdWRlICJJZGVudGl0eVRyYW5zZm9ybU9w
ZXJhdGlvbi5oIgotI2luY2x1ZGUgIk1hdHJpeDNEVHJhbnNmb3JtT3BlcmF0aW9uLmgiCi0jaW5j
bHVkZSAiTWF0cml4VHJhbnNmb3JtT3BlcmF0aW9uLmgiCi0jaW5jbHVkZSAiUGVyc3BlY3RpdmVU
cmFuc2Zvcm1PcGVyYXRpb24uaCIKLSNpbmNsdWRlICJSb3RhdGVUcmFuc2Zvcm1PcGVyYXRpb24u
aCIKLSNpbmNsdWRlICJTY2FsZVRyYW5zZm9ybU9wZXJhdGlvbi5oIgotI2luY2x1ZGUgIlNrZXdU
cmFuc2Zvcm1PcGVyYXRpb24uaCIKLSNpbmNsdWRlICJUcmFuc2xhdGVUcmFuc2Zvcm1PcGVyYXRp
b24uaCIKLQogI2luY2x1ZGUgPHd0Zi9Pd25QdHIuaD4KIAogbmFtZXNwYWNlIFdlYkNvcmUgewpA
QCAtMTE0LDEyICsxMDUsMTIgQEAgUGFzc093blB0cjxDQ0Zsb2F0S2V5ZnJhbWU+IENDRmxvYXRL
ZXlmcmFtZTo6Y2xvbmUoKSBjb25zdAogICAgIHJldHVybiBDQ0Zsb2F0S2V5ZnJhbWU6OmNyZWF0
ZSh0aW1lKCksIHZhbHVlKCksIHRpbWluZ0Z1bmN0aW9uKCkgPyBjbG9uZVRpbWluZ0Z1bmN0aW9u
KHRpbWluZ0Z1bmN0aW9uKCkpIDogbnVsbHB0cik7CiB9CiAKLVBhc3NPd25QdHI8Q0NUcmFuc2Zv
cm1LZXlmcmFtZT4gQ0NUcmFuc2Zvcm1LZXlmcmFtZTo6Y3JlYXRlKGRvdWJsZSB0aW1lLCBjb25z
dCBUcmFuc2Zvcm1PcGVyYXRpb25zJiB2YWx1ZSwgUGFzc093blB0cjxDQ1RpbWluZ0Z1bmN0aW9u
PiB0aW1pbmdGdW5jdGlvbikKK1Bhc3NPd25QdHI8Q0NUcmFuc2Zvcm1LZXlmcmFtZT4gQ0NUcmFu
c2Zvcm1LZXlmcmFtZTo6Y3JlYXRlKGRvdWJsZSB0aW1lLCBjb25zdCBXZWJLaXQ6OldlYlRyYW5z
Zm9ybU9wZXJhdGlvbnMmIHZhbHVlLCBQYXNzT3duUHRyPENDVGltaW5nRnVuY3Rpb24+IHRpbWlu
Z0Z1bmN0aW9uKQogewogICAgIHJldHVybiBhZG9wdFB0cihuZXcgQ0NUcmFuc2Zvcm1LZXlmcmFt
ZSh0aW1lLCB2YWx1ZSwgdGltaW5nRnVuY3Rpb24pKTsKIH0KIAotQ0NUcmFuc2Zvcm1LZXlmcmFt
ZTo6Q0NUcmFuc2Zvcm1LZXlmcmFtZShkb3VibGUgdGltZSwgY29uc3QgVHJhbnNmb3JtT3BlcmF0
aW9ucyYgdmFsdWUsIFBhc3NPd25QdHI8Q0NUaW1pbmdGdW5jdGlvbj4gdGltaW5nRnVuY3Rpb24p
CitDQ1RyYW5zZm9ybUtleWZyYW1lOjpDQ1RyYW5zZm9ybUtleWZyYW1lKGRvdWJsZSB0aW1lLCBj
b25zdCBXZWJLaXQ6OldlYlRyYW5zZm9ybU9wZXJhdGlvbnMmIHZhbHVlLCBQYXNzT3duUHRyPEND
VGltaW5nRnVuY3Rpb24+IHRpbWluZ0Z1bmN0aW9uKQogICAgIDogQ0NLZXlmcmFtZSh0aW1lLCB0
aW1pbmdGdW5jdGlvbikKICAgICAsIG1fdmFsdWUodmFsdWUpCiB7CkBAIC0xMjksNzggKzEyMCwx
NCBAQCBDQ1RyYW5zZm9ybUtleWZyYW1lOjp+Q0NUcmFuc2Zvcm1LZXlmcmFtZSgpCiB7CiB9CiAK
LWNvbnN0IFRyYW5zZm9ybU9wZXJhdGlvbnMmIENDVHJhbnNmb3JtS2V5ZnJhbWU6OnZhbHVlKCkg
Y29uc3QKK2NvbnN0IFdlYktpdDo6V2ViVHJhbnNmb3JtT3BlcmF0aW9ucyYgQ0NUcmFuc2Zvcm1L
ZXlmcmFtZTo6dmFsdWUoKSBjb25zdAogewogICAgIHJldHVybiBtX3ZhbHVlOwogfQogCiBQYXNz
T3duUHRyPENDVHJhbnNmb3JtS2V5ZnJhbWU+IENDVHJhbnNmb3JtS2V5ZnJhbWU6OmNsb25lKCkg
Y29uc3QKIHsKLSAgICAvLyBXZSBuZWVkIHRvIGRvIGEgZGVlcCBjb3B5IHRoZSBtX3ZhbHVlIG1h
eSBjb250YWluIHJlZiBwb2ludGVycyB0byBUcmFuc2Zvcm1PcGVyYXRpb24gb2JqZWN0cy4KLSAg
ICBUcmFuc2Zvcm1PcGVyYXRpb25zIG9wZXJhdGlvbnM7Ci0gICAgZm9yIChzaXplX3QgaiA9IDA7
IGogPCBtX3ZhbHVlLnNpemUoKTsgKytqKSB7Ci0gICAgICAgIFRyYW5zZm9ybU9wZXJhdGlvbjo6
T3BlcmF0aW9uVHlwZSBvcGVyYXRpb25UeXBlID0gbV92YWx1ZS5vcGVyYXRpb25zKClbal0tPmdl
dE9wZXJhdGlvblR5cGUoKTsKLSAgICAgICAgc3dpdGNoIChvcGVyYXRpb25UeXBlKSB7Ci0gICAg
ICAgIGNhc2UgVHJhbnNmb3JtT3BlcmF0aW9uOjpTQ0FMRV9YOgotICAgICAgICBjYXNlIFRyYW5z
Zm9ybU9wZXJhdGlvbjo6U0NBTEVfWToKLSAgICAgICAgY2FzZSBUcmFuc2Zvcm1PcGVyYXRpb246
OlNDQUxFX1o6Ci0gICAgICAgIGNhc2UgVHJhbnNmb3JtT3BlcmF0aW9uOjpTQ0FMRV8zRDoKLSAg
ICAgICAgY2FzZSBUcmFuc2Zvcm1PcGVyYXRpb246OlNDQUxFOiB7Ci0gICAgICAgICAgICBTY2Fs
ZVRyYW5zZm9ybU9wZXJhdGlvbiogdHJhbnNmb3JtID0gc3RhdGljX2Nhc3Q8U2NhbGVUcmFuc2Zv
cm1PcGVyYXRpb24qPihtX3ZhbHVlLm9wZXJhdGlvbnMoKVtqXS5nZXQoKSk7Ci0gICAgICAgICAg
ICBvcGVyYXRpb25zLm9wZXJhdGlvbnMoKS5hcHBlbmQoU2NhbGVUcmFuc2Zvcm1PcGVyYXRpb246
OmNyZWF0ZSh0cmFuc2Zvcm0tPngoKSwgdHJhbnNmb3JtLT55KCksIHRyYW5zZm9ybS0+eigpLCBv
cGVyYXRpb25UeXBlKSk7Ci0gICAgICAgICAgICBicmVhazsKLSAgICAgICAgfQotICAgICAgICBj
YXNlIFRyYW5zZm9ybU9wZXJhdGlvbjo6VFJBTlNMQVRFX1g6Ci0gICAgICAgIGNhc2UgVHJhbnNm
b3JtT3BlcmF0aW9uOjpUUkFOU0xBVEVfWToKLSAgICAgICAgY2FzZSBUcmFuc2Zvcm1PcGVyYXRp
b246OlRSQU5TTEFURV9aOgotICAgICAgICBjYXNlIFRyYW5zZm9ybU9wZXJhdGlvbjo6VFJBTlNM
QVRFXzNEOgotICAgICAgICBjYXNlIFRyYW5zZm9ybU9wZXJhdGlvbjo6VFJBTlNMQVRFOiB7Ci0g
ICAgICAgICAgICBUcmFuc2xhdGVUcmFuc2Zvcm1PcGVyYXRpb24qIHRyYW5zZm9ybSA9IHN0YXRp
Y19jYXN0PFRyYW5zbGF0ZVRyYW5zZm9ybU9wZXJhdGlvbio+KG1fdmFsdWUub3BlcmF0aW9ucygp
W2pdLmdldCgpKTsKLSAgICAgICAgICAgIG9wZXJhdGlvbnMub3BlcmF0aW9ucygpLmFwcGVuZChU
cmFuc2xhdGVUcmFuc2Zvcm1PcGVyYXRpb246OmNyZWF0ZSh0cmFuc2Zvcm0tPngoKSwgdHJhbnNm
b3JtLT55KCksIHRyYW5zZm9ybS0+eigpLCBvcGVyYXRpb25UeXBlKSk7Ci0gICAgICAgICAgICBi
cmVhazsKLSAgICAgICAgfQotICAgICAgICBjYXNlIFRyYW5zZm9ybU9wZXJhdGlvbjo6Uk9UQVRF
X1g6Ci0gICAgICAgIGNhc2UgVHJhbnNmb3JtT3BlcmF0aW9uOjpST1RBVEVfWToKLSAgICAgICAg
Y2FzZSBUcmFuc2Zvcm1PcGVyYXRpb246OlJPVEFURV8zRDoKLSAgICAgICAgY2FzZSBUcmFuc2Zv
cm1PcGVyYXRpb246OlJPVEFURTogewotICAgICAgICAgICAgUm90YXRlVHJhbnNmb3JtT3BlcmF0
aW9uKiB0cmFuc2Zvcm0gPSBzdGF0aWNfY2FzdDxSb3RhdGVUcmFuc2Zvcm1PcGVyYXRpb24qPiht
X3ZhbHVlLm9wZXJhdGlvbnMoKVtqXS5nZXQoKSk7Ci0gICAgICAgICAgICBvcGVyYXRpb25zLm9w
ZXJhdGlvbnMoKS5hcHBlbmQoUm90YXRlVHJhbnNmb3JtT3BlcmF0aW9uOjpjcmVhdGUodHJhbnNm
b3JtLT54KCksIHRyYW5zZm9ybS0+eSgpLCB0cmFuc2Zvcm0tPnooKSwgdHJhbnNmb3JtLT5hbmds
ZSgpLCBvcGVyYXRpb25UeXBlKSk7Ci0gICAgICAgICAgICBicmVhazsKLSAgICAgICAgfQotICAg
ICAgICBjYXNlIFRyYW5zZm9ybU9wZXJhdGlvbjo6U0tFV19YOgotICAgICAgICBjYXNlIFRyYW5z
Zm9ybU9wZXJhdGlvbjo6U0tFV19ZOgotICAgICAgICBjYXNlIFRyYW5zZm9ybU9wZXJhdGlvbjo6
U0tFVzogewotICAgICAgICAgICAgU2tld1RyYW5zZm9ybU9wZXJhdGlvbiogdHJhbnNmb3JtID0g
c3RhdGljX2Nhc3Q8U2tld1RyYW5zZm9ybU9wZXJhdGlvbio+KG1fdmFsdWUub3BlcmF0aW9ucygp
W2pdLmdldCgpKTsKLSAgICAgICAgICAgIG9wZXJhdGlvbnMub3BlcmF0aW9ucygpLmFwcGVuZChT
a2V3VHJhbnNmb3JtT3BlcmF0aW9uOjpjcmVhdGUodHJhbnNmb3JtLT5hbmdsZVgoKSwgdHJhbnNm
b3JtLT5hbmdsZVkoKSwgb3BlcmF0aW9uVHlwZSkpOwotICAgICAgICAgICAgYnJlYWs7Ci0gICAg
ICAgIH0KLSAgICAgICAgY2FzZSBUcmFuc2Zvcm1PcGVyYXRpb246Ok1BVFJJWDogewotICAgICAg
ICAgICAgTWF0cml4VHJhbnNmb3JtT3BlcmF0aW9uKiB0cmFuc2Zvcm0gPSBzdGF0aWNfY2FzdDxN
YXRyaXhUcmFuc2Zvcm1PcGVyYXRpb24qPihtX3ZhbHVlLm9wZXJhdGlvbnMoKVtqXS5nZXQoKSk7
Ci0gICAgICAgICAgICBUcmFuc2Zvcm1hdGlvbk1hdHJpeCBtID0gdHJhbnNmb3JtLT5tYXRyaXgo
KTsKLSAgICAgICAgICAgIG9wZXJhdGlvbnMub3BlcmF0aW9ucygpLmFwcGVuZChNYXRyaXhUcmFu
c2Zvcm1PcGVyYXRpb246OmNyZWF0ZShtLmEoKSwgbS5iKCksIG0uYygpLCBtLmQoKSwgbS5lKCks
IG0uZigpKSk7Ci0gICAgICAgICAgICBicmVhazsKLSAgICAgICAgfQotICAgICAgICBjYXNlIFRy
YW5zZm9ybU9wZXJhdGlvbjo6TUFUUklYXzNEOiB7Ci0gICAgICAgICAgICBNYXRyaXgzRFRyYW5z
Zm9ybU9wZXJhdGlvbiogdHJhbnNmb3JtID0gc3RhdGljX2Nhc3Q8TWF0cml4M0RUcmFuc2Zvcm1P
cGVyYXRpb24qPihtX3ZhbHVlLm9wZXJhdGlvbnMoKVtqXS5nZXQoKSk7Ci0gICAgICAgICAgICBv
cGVyYXRpb25zLm9wZXJhdGlvbnMoKS5hcHBlbmQoTWF0cml4M0RUcmFuc2Zvcm1PcGVyYXRpb246
OmNyZWF0ZSh0cmFuc2Zvcm0tPm1hdHJpeCgpKSk7Ci0gICAgICAgICAgICBicmVhazsKLSAgICAg
ICAgfQotICAgICAgICBjYXNlIFRyYW5zZm9ybU9wZXJhdGlvbjo6UEVSU1BFQ1RJVkU6IHsKLSAg
ICAgICAgICAgIFBlcnNwZWN0aXZlVHJhbnNmb3JtT3BlcmF0aW9uKiB0cmFuc2Zvcm0gPSBzdGF0
aWNfY2FzdDxQZXJzcGVjdGl2ZVRyYW5zZm9ybU9wZXJhdGlvbio+KG1fdmFsdWUub3BlcmF0aW9u
cygpW2pdLmdldCgpKTsKLSAgICAgICAgICAgIG9wZXJhdGlvbnMub3BlcmF0aW9ucygpLmFwcGVu
ZChQZXJzcGVjdGl2ZVRyYW5zZm9ybU9wZXJhdGlvbjo6Y3JlYXRlKHRyYW5zZm9ybS0+cGVyc3Bl
Y3RpdmUoKSkpOwotICAgICAgICAgICAgYnJlYWs7Ci0gICAgICAgIH0KLSAgICAgICAgY2FzZSBU
cmFuc2Zvcm1PcGVyYXRpb246OklERU5USVRZOiB7Ci0gICAgICAgICAgICBvcGVyYXRpb25zLm9w
ZXJhdGlvbnMoKS5hcHBlbmQoSWRlbnRpdHlUcmFuc2Zvcm1PcGVyYXRpb246OmNyZWF0ZSgpKTsK
LSAgICAgICAgICAgIGJyZWFrOwotICAgICAgICB9Ci0gICAgICAgIGNhc2UgVHJhbnNmb3JtT3Bl
cmF0aW9uOjpOT05FOgotICAgICAgICAgICAgLy8gRG8gbm90aGluZy4KLSAgICAgICAgICAgIGJy
ZWFrOwotICAgICAgICB9IC8vIHN3aXRjaAotICAgIH0gLy8gZm9yIGVhY2ggb3BlcmF0aW9uCi0K
LSAgICByZXR1cm4gQ0NUcmFuc2Zvcm1LZXlmcmFtZTo6Y3JlYXRlKHRpbWUoKSwgb3BlcmF0aW9u
cywgdGltaW5nRnVuY3Rpb24oKSA/IGNsb25lVGltaW5nRnVuY3Rpb24odGltaW5nRnVuY3Rpb24o
KSkgOiBudWxscHRyKTsKKyAgICByZXR1cm4gQ0NUcmFuc2Zvcm1LZXlmcmFtZTo6Y3JlYXRlKHRp
bWUoKSwgdmFsdWUoKSwgdGltaW5nRnVuY3Rpb24oKSA/IGNsb25lVGltaW5nRnVuY3Rpb24odGlt
aW5nRnVuY3Rpb24oKSkgOiBudWxscHRyKTsKIH0KIAogUGFzc093blB0cjxDQ0tleWZyYW1lZEZs
b2F0QW5pbWF0aW9uQ3VydmU+IENDS2V5ZnJhbWVkRmxvYXRBbmltYXRpb25DdXJ2ZTo6Y3JlYXRl
KCkKQEAgLTI4NywxOSArMjE0LDEzIEBAIFBhc3NPd25QdHI8Q0NBbmltYXRpb25DdXJ2ZT4gQ0NL
ZXlmcmFtZWRUcmFuc2Zvcm1BbmltYXRpb25DdXJ2ZTo6Y2xvbmUoKSBjb25zdAogICAgIHJldHVy
biB0b1JldHVybi5yZWxlYXNlKCk7CiB9CiAKLVRyYW5zZm9ybWF0aW9uTWF0cml4IENDS2V5ZnJh
bWVkVHJhbnNmb3JtQW5pbWF0aW9uQ3VydmU6OmdldFZhbHVlKGRvdWJsZSB0LCBjb25zdCBJbnRT
aXplJiBsYXllclNpemUpIGNvbnN0CitUcmFuc2Zvcm1hdGlvbk1hdHJpeCBDQ0tleWZyYW1lZFRy
YW5zZm9ybUFuaW1hdGlvbkN1cnZlOjpnZXRWYWx1ZShkb3VibGUgdCkgY29uc3QKIHsKLSAgICBU
cmFuc2Zvcm1hdGlvbk1hdHJpeCB0cmFuc2Zvcm1NYXRyaXg7Ci0KLSAgICBpZiAodCA8PSBtX2tl
eWZyYW1lcy5maXJzdCgpLT50aW1lKCkpIHsKLSAgICAgICAgbV9rZXlmcmFtZXMuZmlyc3QoKS0+
dmFsdWUoKS5hcHBseShsYXllclNpemUsIHRyYW5zZm9ybU1hdHJpeCk7Ci0gICAgICAgIHJldHVy
biB0cmFuc2Zvcm1NYXRyaXg7Ci0gICAgfQorICAgIGlmICh0IDw9IG1fa2V5ZnJhbWVzLmZpcnN0
KCktPnRpbWUoKSkKKyAgICAgICAgcmV0dXJuIG1fa2V5ZnJhbWVzLmZpcnN0KCktPnZhbHVlKCku
YXBwbHkoKS50b1dlYkNvcmVUcmFuc2Zvcm0oKTsKIAotICAgIGlmICh0ID49IG1fa2V5ZnJhbWVz
Lmxhc3QoKS0+dGltZSgpKSB7Ci0gICAgICAgIG1fa2V5ZnJhbWVzLmxhc3QoKS0+dmFsdWUoKS5h
cHBseShsYXllclNpemUsIHRyYW5zZm9ybU1hdHJpeCk7Ci0gICAgICAgIHJldHVybiB0cmFuc2Zv
cm1NYXRyaXg7Ci0gICAgfQorICAgIGlmICh0ID49IG1fa2V5ZnJhbWVzLmxhc3QoKS0+dGltZSgp
KQorICAgICAgICByZXR1cm4gbV9rZXlmcmFtZXMubGFzdCgpLT52YWx1ZSgpLmFwcGx5KCkudG9X
ZWJDb3JlVHJhbnNmb3JtKCk7CiAKICAgICBzaXplX3QgaSA9IDA7CiAgICAgZm9yICg7IGkgPCBt
X2tleWZyYW1lcy5zaXplKCkgLSAxOyArK2kpIHsKQEAgLTMxMiwxOSArMjMzLDcgQEAgVHJhbnNm
b3JtYXRpb25NYXRyaXggQ0NLZXlmcmFtZWRUcmFuc2Zvcm1BbmltYXRpb25DdXJ2ZTo6Z2V0VmFs
dWUoZG91YmxlIHQsIGNvbnMKICAgICBpZiAobV9rZXlmcmFtZXNbaV0tPnRpbWluZ0Z1bmN0aW9u
KCkpCiAgICAgICAgIHByb2dyZXNzID0gbV9rZXlmcmFtZXNbaV0tPnRpbWluZ0Z1bmN0aW9uKCkt
PmdldFZhbHVlKHByb2dyZXNzKTsKIAotICAgIGlmIChtX2tleWZyYW1lc1tpXS0+dmFsdWUoKS5v
cGVyYXRpb25zTWF0Y2gobV9rZXlmcmFtZXNbaSsxXS0+dmFsdWUoKSkpIHsKLSAgICAgICAgZm9y
IChzaXplX3QgaiA9IDA7IGogPCBtX2tleWZyYW1lc1tpKzFdLT52YWx1ZSgpLnNpemUoKTsgKytq
KQotICAgICAgICAgICAgbV9rZXlmcmFtZXNbaSsxXS0+dmFsdWUoKS5vcGVyYXRpb25zKClbal0t
PmJsZW5kKG1fa2V5ZnJhbWVzW2ldLT52YWx1ZSgpLmF0KGopLCBwcm9ncmVzcyktPmFwcGx5KHRy
YW5zZm9ybU1hdHJpeCwgbGF5ZXJTaXplKTsKLSAgICB9IGVsc2UgewotICAgICAgICBUcmFuc2Zv
cm1hdGlvbk1hdHJpeCBzb3VyY2U7Ci0KLSAgICAgICAgbV9rZXlmcmFtZXNbaV0tPnZhbHVlKCku
YXBwbHkobGF5ZXJTaXplLCBzb3VyY2UpOwotICAgICAgICBtX2tleWZyYW1lc1tpKzFdLT52YWx1
ZSgpLmFwcGx5KGxheWVyU2l6ZSwgdHJhbnNmb3JtTWF0cml4KTsKLQotICAgICAgICB0cmFuc2Zv
cm1NYXRyaXguYmxlbmQoc291cmNlLCBwcm9ncmVzcyk7Ci0gICAgfQotCi0gICAgcmV0dXJuIHRy
YW5zZm9ybU1hdHJpeDsKKyAgICByZXR1cm4gbV9rZXlmcmFtZXNbaSsxXS0+dmFsdWUoKS5ibGVu
ZChtX2tleWZyYW1lc1tpXS0+dmFsdWUoKSwgcHJvZ3Jlc3MpLnRvV2ViQ29yZVRyYW5zZm9ybSgp
OwogfQogCiB9IC8vIG5hbWVzcGFjZSBXZWJDb3JlCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29y
ZS9wbGF0Zm9ybS9ncmFwaGljcy9jaHJvbWl1bS9jYy9DQ0tleWZyYW1lZEFuaW1hdGlvbkN1cnZl
LmggYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9jaHJvbWl1bS9jYy9DQ0tleWZy
YW1lZEFuaW1hdGlvbkN1cnZlLmgKaW5kZXggOGQxZjBlMDU1ZjQyOTdkNDM2Mzc3Nzk4ZGM0MjVk
YThkOTRmNTAxZi4uMTVmMTM5ZmEwYjFhMTEyNmM0ZGQyMmIxMzA1NmI0MjU0OTAzZTkxNCAxMDA2
NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvY2hyb21pdW0vY2MvQ0NL
ZXlmcmFtZWRBbmltYXRpb25DdXJ2ZS5oCisrKyBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dy
YXBoaWNzL2Nocm9taXVtL2NjL0NDS2V5ZnJhbWVkQW5pbWF0aW9uQ3VydmUuaApAQCAtMjUsMTAg
KzI1LDExIEBACiAjaWZuZGVmIENDS2V5ZnJhbWVkQW5pbWF0aW9uQ3VydmVfaAogI2RlZmluZSBD
Q0tleWZyYW1lZEFuaW1hdGlvbkN1cnZlX2gKIAotI2luY2x1ZGUgIlRyYW5zZm9ybU9wZXJhdGlv
bnMuaCIKICNpbmNsdWRlICJjYy9DQ0FuaW1hdGlvbkN1cnZlLmgiCiAjaW5jbHVkZSAiY2MvQ0NU
aW1pbmdGdW5jdGlvbi5oIgogCisjaW5jbHVkZSA8cHVibGljL1dlYlRyYW5zZm9ybU9wZXJhdGlv
bnMuaD4KKwogI2luY2x1ZGUgPHd0Zi9Pd25QdHIuaD4KICNpbmNsdWRlIDx3dGYvUGFzc093blB0
ci5oPgogCkBAIC02NSwxNyArNjYsMTcgQEAgcHJpdmF0ZToKIAogY2xhc3MgQ0NUcmFuc2Zvcm1L
ZXlmcmFtZSA6IHB1YmxpYyBDQ0tleWZyYW1lIHsKIHB1YmxpYzoKLSAgICBzdGF0aWMgUGFzc093
blB0cjxDQ1RyYW5zZm9ybUtleWZyYW1lPiBjcmVhdGUoZG91YmxlIHRpbWUsIGNvbnN0IFRyYW5z
Zm9ybU9wZXJhdGlvbnMmIHZhbHVlLCBQYXNzT3duUHRyPENDVGltaW5nRnVuY3Rpb24+KTsKKyAg
ICBzdGF0aWMgUGFzc093blB0cjxDQ1RyYW5zZm9ybUtleWZyYW1lPiBjcmVhdGUoZG91YmxlIHRp
bWUsIGNvbnN0IFdlYktpdDo6V2ViVHJhbnNmb3JtT3BlcmF0aW9ucyYgdmFsdWUsIFBhc3NPd25Q
dHI8Q0NUaW1pbmdGdW5jdGlvbj4pOwogICAgIHZpcnR1YWwgfkNDVHJhbnNmb3JtS2V5ZnJhbWUo
KTsKIAotICAgIGNvbnN0IFRyYW5zZm9ybU9wZXJhdGlvbnMmIHZhbHVlKCkgY29uc3Q7CisgICAg
Y29uc3QgV2ViS2l0OjpXZWJUcmFuc2Zvcm1PcGVyYXRpb25zJiB2YWx1ZSgpIGNvbnN0OwogCiAg
ICAgUGFzc093blB0cjxDQ1RyYW5zZm9ybUtleWZyYW1lPiBjbG9uZSgpIGNvbnN0OwogCiBwcml2
YXRlOgotICAgIENDVHJhbnNmb3JtS2V5ZnJhbWUoZG91YmxlIHRpbWUsIGNvbnN0IFRyYW5zZm9y
bU9wZXJhdGlvbnMmIHZhbHVlLCBQYXNzT3duUHRyPENDVGltaW5nRnVuY3Rpb24+KTsKKyAgICBD
Q1RyYW5zZm9ybUtleWZyYW1lKGRvdWJsZSB0aW1lLCBjb25zdCBXZWJLaXQ6OldlYlRyYW5zZm9y
bU9wZXJhdGlvbnMmIHZhbHVlLCBQYXNzT3duUHRyPENDVGltaW5nRnVuY3Rpb24+KTsKIAotICAg
IFRyYW5zZm9ybU9wZXJhdGlvbnMgbV92YWx1ZTsKKyAgICBXZWJLaXQ6OldlYlRyYW5zZm9ybU9w
ZXJhdGlvbnMgbV92YWx1ZTsKIH07CiAKIGNsYXNzIENDS2V5ZnJhbWVkRmxvYXRBbmltYXRpb25D
dXJ2ZSA6IHB1YmxpYyBDQ0Zsb2F0QW5pbWF0aW9uQ3VydmUgewpAQCAtMTE2LDcgKzExNyw3IEBA
IHB1YmxpYzoKICAgICB2aXJ0dWFsIFBhc3NPd25QdHI8Q0NBbmltYXRpb25DdXJ2ZT4gY2xvbmUo
KSBjb25zdCBPVkVSUklERTsKIAogICAgIC8vIENDVHJhbnNmb3JtQW5pbWF0aW9uQ3VydmUgaW1w
bGVtZW50YXRpb24KLSAgICB2aXJ0dWFsIFRyYW5zZm9ybWF0aW9uTWF0cml4IGdldFZhbHVlKGRv
dWJsZSB0LCBjb25zdCBJbnRTaXplJikgY29uc3QgT1ZFUlJJREU7CisgICAgdmlydHVhbCBUcmFu
c2Zvcm1hdGlvbk1hdHJpeCBnZXRWYWx1ZShkb3VibGUgdCkgY29uc3QgT1ZFUlJJREU7CiAKIHBy
aXZhdGU6CiAgICAgQ0NLZXlmcmFtZWRUcmFuc2Zvcm1BbmltYXRpb25DdXJ2ZSgpOwpkaWZmIC0t
Z2l0IGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvY2hyb21pdW0vY2MvQ0NMYXll
ckFuaW1hdGlvbkNvbnRyb2xsZXIuY3BwIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhp
Y3MvY2hyb21pdW0vY2MvQ0NMYXllckFuaW1hdGlvbkNvbnRyb2xsZXIuY3BwCmluZGV4IDE0ZmI3
OGE2NWMyNTgwMjc0ZWFmNjg5MDFmNTJlNGJmNzdjNThiYmMuLjE1YjYxMDZjNWU5OTZlODI0YmNj
NGFkMjFjZmRkOTFlZmU0NDRiNTggMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3Jt
L2dyYXBoaWNzL2Nocm9taXVtL2NjL0NDTGF5ZXJBbmltYXRpb25Db250cm9sbGVyLmNwcAorKysg
Yi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9jaHJvbWl1bS9jYy9DQ0xheWVyQW5p
bWF0aW9uQ29udHJvbGxlci5jcHAKQEAgLTM1LDk0ICszNSw2IEBACiAKIG5hbWVzcGFjZSBXZWJD
b3JlIHsKIAotbmFtZXNwYWNlIHsKLQotdGVtcGxhdGUgPGNsYXNzIFZhbHVlLCBjbGFzcyBLZXlm
cmFtZSwgY2xhc3MgQ3VydmU+Ci12b2lkIGFwcGVuZEtleWZyYW1lKEN1cnZlJiBjdXJ2ZSwgZG91
YmxlIGtleVRpbWUsIGNvbnN0IFZhbHVlKiB2YWx1ZSwgUGFzc093blB0cjxDQ1RpbWluZ0Z1bmN0
aW9uPiB0aW1pbmdGdW5jdGlvbikKLXsKLSAgICBjdXJ2ZS5hZGRLZXlmcmFtZShLZXlmcmFtZTo6
Y3JlYXRlKGtleVRpbWUsIHZhbHVlLT52YWx1ZSgpLCB0aW1pbmdGdW5jdGlvbikpOwotfQotCi10
ZW1wbGF0ZSA8Pgotdm9pZCBhcHBlbmRLZXlmcmFtZTxUcmFuc2Zvcm1BbmltYXRpb25WYWx1ZSwg
Q0NUcmFuc2Zvcm1LZXlmcmFtZSwgQ0NLZXlmcmFtZWRUcmFuc2Zvcm1BbmltYXRpb25DdXJ2ZT4o
Q0NLZXlmcmFtZWRUcmFuc2Zvcm1BbmltYXRpb25DdXJ2ZSYgY3VydmUsIGRvdWJsZSBrZXlUaW1l
LCBjb25zdCBUcmFuc2Zvcm1BbmltYXRpb25WYWx1ZSogdmFsdWUsIFBhc3NPd25QdHI8Q0NUaW1p
bmdGdW5jdGlvbj4gdGltaW5nRnVuY3Rpb24pCi17Ci0gICAgY3VydmUuYWRkS2V5ZnJhbWUoQ0NU
cmFuc2Zvcm1LZXlmcmFtZTo6Y3JlYXRlKGtleVRpbWUsICp2YWx1ZS0+dmFsdWUoKSwgdGltaW5n
RnVuY3Rpb24pKTsKLX0KLQotdGVtcGxhdGUgPGNsYXNzIFZhbHVlLCBjbGFzcyBLZXlmcmFtZSwg
Y2xhc3MgQ3VydmU+Ci1QYXNzT3duUHRyPENDQWN0aXZlQW5pbWF0aW9uPiBjcmVhdGVBY3RpdmVB
bmltYXRpb24oY29uc3QgS2V5ZnJhbWVWYWx1ZUxpc3QmIHZhbHVlTGlzdCwgY29uc3QgQW5pbWF0
aW9uKiBhbmltYXRpb24sIHNpemVfdCBhbmltYXRpb25JZCwgc2l6ZV90IGdyb3VwSWQsIGRvdWJs
ZSB0aW1lT2Zmc2V0LCBDQ0FjdGl2ZUFuaW1hdGlvbjo6VGFyZ2V0UHJvcGVydHkgdGFyZ2V0UHJv
cGVydHkpCi17Ci0gICAgYm9vbCBhbHRlcm5hdGUgPSBmYWxzZTsKLSAgICBib29sIHJldmVyc2Ug
PSBmYWxzZTsKLSAgICBpZiAoYW5pbWF0aW9uICYmIGFuaW1hdGlvbi0+aXNEaXJlY3Rpb25TZXQo
KSkgewotICAgICAgICBBbmltYXRpb246OkFuaW1hdGlvbkRpcmVjdGlvbiBkaXJlY3Rpb24gPSBh
bmltYXRpb24tPmRpcmVjdGlvbigpOwotICAgICAgICBpZiAoZGlyZWN0aW9uID09IEFuaW1hdGlv
bjo6QW5pbWF0aW9uRGlyZWN0aW9uQWx0ZXJuYXRlIHx8IGRpcmVjdGlvbiA9PSBBbmltYXRpb246
OkFuaW1hdGlvbkRpcmVjdGlvbkFsdGVybmF0ZVJldmVyc2UpCi0gICAgICAgICAgICBhbHRlcm5h
dGUgPSB0cnVlOwotICAgICAgICBpZiAoZGlyZWN0aW9uID09IEFuaW1hdGlvbjo6QW5pbWF0aW9u
RGlyZWN0aW9uUmV2ZXJzZSB8fCBkaXJlY3Rpb24gPT0gQW5pbWF0aW9uOjpBbmltYXRpb25EaXJl
Y3Rpb25BbHRlcm5hdGVSZXZlcnNlKQotICAgICAgICAgICAgcmV2ZXJzZSA9IHRydWU7Ci0gICAg
fQotCi0gICAgT3duUHRyPEN1cnZlPiBjdXJ2ZSA9IEN1cnZlOjpjcmVhdGUoKTsKLSAgICBWZWN0
b3I8S2V5ZnJhbWU+IGtleWZyYW1lczsKLQotICAgIGZvciAoc2l6ZV90IGkgPSAwOyBpIDwgdmFs
dWVMaXN0LnNpemUoKTsgaSsrKSB7Ci0gICAgICAgIHNpemVfdCBpbmRleCA9IHJldmVyc2UgPyB2
YWx1ZUxpc3Quc2l6ZSgpIC0gaSAtIDEgOiBpOwotCi0gICAgICAgIGNvbnN0IFZhbHVlKiBvcmln
aW5hbFZhbHVlID0gc3RhdGljX2Nhc3Q8Y29uc3QgVmFsdWUqPih2YWx1ZUxpc3QuYXQoaW5kZXgp
KTsKLQotICAgICAgICBPd25QdHI8Q0NUaW1pbmdGdW5jdGlvbj4gdGltaW5nRnVuY3Rpb247Ci0g
ICAgICAgIGNvbnN0IFRpbWluZ0Z1bmN0aW9uKiBvcmlnaW5hbFRpbWluZ0Z1bmN0aW9uID0gb3Jp
Z2luYWxWYWx1ZS0+dGltaW5nRnVuY3Rpb24oKTsKLQotICAgICAgICAvLyBJZiB0aGVyZSBoYXNu
J3QgYmVlbiBhIHRpbWluZyBmdW5jdGlvbiBhc3NvY2lhdGVkIHdpdGggdGhpcyBrZXlmcmFtZSwg
dXNlIHRoZQotICAgICAgICAvLyBhbmltYXRpb24ncyB0aW1pbmcgZnVuY3Rpb24sIGlmIHdlIGhh
dmUgb25lLgotICAgICAgICBpZiAoIW9yaWdpbmFsVGltaW5nRnVuY3Rpb24gJiYgYW5pbWF0aW9u
LT5pc1RpbWluZ0Z1bmN0aW9uU2V0KCkpCi0gICAgICAgICAgICBvcmlnaW5hbFRpbWluZ0Z1bmN0
aW9uID0gYW5pbWF0aW9uLT50aW1pbmdGdW5jdGlvbigpLmdldCgpOwotCi0gICAgICAgIGlmIChv
cmlnaW5hbFRpbWluZ0Z1bmN0aW9uKSB7Ci0gICAgICAgICAgICBzd2l0Y2ggKG9yaWdpbmFsVGlt
aW5nRnVuY3Rpb24tPnR5cGUoKSkgewotICAgICAgICAgICAgY2FzZSBUaW1pbmdGdW5jdGlvbjo6
U3RlcHNGdW5jdGlvbjoKLSAgICAgICAgICAgICAgICAvLyBGSVhNRTogYWRkIHN1cHBvcnQgZm9y
IHN0ZXBzIHRpbWluZyBmdW5jdGlvbi4KLSAgICAgICAgICAgICAgICByZXR1cm4gbnVsbHB0cjsK
LSAgICAgICAgICAgIGNhc2UgVGltaW5nRnVuY3Rpb246OkxpbmVhckZ1bmN0aW9uOgotICAgICAg
ICAgICAgICAgIC8vIERvbid0IHNldCB0aGUgdGltaW5nIGZ1bmN0aW9uLiBLZXlmcmFtZXMgYXJl
IGludGVycG9sYXRlZCBsaW5lYXJseSBpZiB0aGVyZSBpcyBubyB0aW1pbmcgZnVuY3Rpb24uCi0g
ICAgICAgICAgICAgICAgYnJlYWs7Ci0gICAgICAgICAgICBjYXNlIFRpbWluZ0Z1bmN0aW9uOjpD
dWJpY0JlemllckZ1bmN0aW9uOgotICAgICAgICAgICAgICAgIGNvbnN0IEN1YmljQmV6aWVyVGlt
aW5nRnVuY3Rpb24qIG9yaWdpbmFsQmV6aWVyVGltaW5nRnVuY3Rpb24gPSBzdGF0aWNfY2FzdDxj
b25zdCBDdWJpY0JlemllclRpbWluZ0Z1bmN0aW9uKj4ob3JpZ2luYWxUaW1pbmdGdW5jdGlvbik7
Ci0gICAgICAgICAgICAgICAgdGltaW5nRnVuY3Rpb24gPSBDQ0N1YmljQmV6aWVyVGltaW5nRnVu
Y3Rpb246OmNyZWF0ZShvcmlnaW5hbEJlemllclRpbWluZ0Z1bmN0aW9uLT54MSgpLCBvcmlnaW5h
bEJlemllclRpbWluZ0Z1bmN0aW9uLT55MSgpLCBvcmlnaW5hbEJlemllclRpbWluZ0Z1bmN0aW9u
LT54MigpLCBvcmlnaW5hbEJlemllclRpbWluZ0Z1bmN0aW9uLT55MigpKTsKLSAgICAgICAgICAg
ICAgICBicmVhazsKLSAgICAgICAgICAgIH0gLy8gc3dpdGNoCi0gICAgICAgIH0gZWxzZQotICAg
ICAgICAgICAgdGltaW5nRnVuY3Rpb24gPSBDQ0Vhc2VUaW1pbmdGdW5jdGlvbjo6Y3JlYXRlKCk7
Ci0KLSAgICAgICAgZG91YmxlIGR1cmF0aW9uID0gKGFuaW1hdGlvbiAmJiBhbmltYXRpb24tPmlz
RHVyYXRpb25TZXQoKSkgPyBhbmltYXRpb24tPmR1cmF0aW9uKCkgOiAxOwotICAgICAgICBkb3Vi
bGUga2V5VGltZSA9IG9yaWdpbmFsVmFsdWUtPmtleVRpbWUoKSAqIGR1cmF0aW9uOwotICAgICAg
ICBpZiAocmV2ZXJzZSkKLSAgICAgICAgICAgIGtleVRpbWUgPSBkdXJhdGlvbiAtIGtleVRpbWU7
Ci0gICAgICAgIGFwcGVuZEtleWZyYW1lPFZhbHVlLCBLZXlmcmFtZSwgQ3VydmU+KCpjdXJ2ZSwg
a2V5VGltZSwgb3JpZ2luYWxWYWx1ZSwgdGltaW5nRnVuY3Rpb24ucmVsZWFzZSgpKTsKLSAgICB9
Ci0KLSAgICBPd25QdHI8Q0NBY3RpdmVBbmltYXRpb24+IGFuaW0gPSBDQ0FjdGl2ZUFuaW1hdGlv
bjo6Y3JlYXRlKGN1cnZlLnJlbGVhc2UoKSwgYW5pbWF0aW9uSWQsIGdyb3VwSWQsIHRhcmdldFBy
b3BlcnR5KTsKLQotICAgIEFTU0VSVChhbmltLmdldCgpKTsKLQotICAgIGlmIChhbmltLmdldCgp
KSB7Ci0gICAgICAgIGludCBpdGVyYXRpb25zID0gKGFuaW1hdGlvbiAmJiBhbmltYXRpb24tPmlz
SXRlcmF0aW9uQ291bnRTZXQoKSkgPyBhbmltYXRpb24tPml0ZXJhdGlvbkNvdW50KCkgOiAxOwot
ICAgICAgICBhbmltLT5zZXRJdGVyYXRpb25zKGl0ZXJhdGlvbnMpOwotICAgICAgICBhbmltLT5z
ZXRBbHRlcm5hdGVzRGlyZWN0aW9uKGFsdGVybmF0ZSk7Ci0gICAgfQotCi0gICAgLy8gSW4gb3Jk
ZXIgdG8gYXZvaWQgc2tldywgdGhlIG1haW4gdGhyZWFkIGFuaW1hdGlvbiBjYW5ub3QgdGljayB1
bnRpbCBpdCBoYXMgcmVjZWl2ZWQgdGhlIHN0YXJ0IHRpbWUgb2YKLSAgICAvLyB0aGUgY29ycmVz
cG9uZGluZyBpbXBsIHRocmVhZCBhbmltYXRpb24uCi0gICAgYW5pbS0+c2V0TmVlZHNTeW5jaHJv
bml6ZWRTdGFydFRpbWUodHJ1ZSk7Ci0KLSAgICAvLyBJZiB0aW1lT2Zmc2V0ID4gMCwgdGhlbiB0
aGUgYW5pbWF0aW9uIGhhcyBzdGFydGVkIGluIHRoZSBwYXN0LgotICAgIGFuaW0tPnNldFRpbWVP
ZmZzZXQodGltZU9mZnNldCk7Ci0KLSAgICByZXR1cm4gYW5pbS5yZWxlYXNlKCk7Ci19Ci0KLX0g
Ly8gbmFtZXBhY2UKLQogQ0NMYXllckFuaW1hdGlvbkNvbnRyb2xsZXI6OkNDTGF5ZXJBbmltYXRp
b25Db250cm9sbGVyKENDTGF5ZXJBbmltYXRpb25Db250cm9sbGVyQ2xpZW50KiBjbGllbnQpCiAg
ICAgOiBtX2ZvcmNlU3luYyhmYWxzZSkKICAgICAsIG1fY2xpZW50KGNsaWVudCkKQEAgLTEzOCwz
MiArNTAsNiBAQCBQYXNzT3duUHRyPENDTGF5ZXJBbmltYXRpb25Db250cm9sbGVyPiBDQ0xheWVy
QW5pbWF0aW9uQ29udHJvbGxlcjo6Y3JlYXRlKENDTGF5ZQogICAgIHJldHVybiBhZG9wdFB0cihu
ZXcgQ0NMYXllckFuaW1hdGlvbkNvbnRyb2xsZXIoY2xpZW50KSk7CiB9CiAKLWJvb2wgQ0NMYXll
ckFuaW1hdGlvbkNvbnRyb2xsZXI6OmFkZEFuaW1hdGlvbihjb25zdCBLZXlmcmFtZVZhbHVlTGlz
dCYgdmFsdWVMaXN0LCBjb25zdCBJbnRTaXplJiwgY29uc3QgQW5pbWF0aW9uKiBhbmltYXRpb24s
IGludCBhbmltYXRpb25JZCwgaW50IGdyb3VwSWQsIGRvdWJsZSB0aW1lT2Zmc2V0KQotewotICAg
IGlmICghYW5pbWF0aW9uKQotICAgICAgICByZXR1cm4gZmFsc2U7Ci0KLSAgICBPd25QdHI8Q0NB
Y3RpdmVBbmltYXRpb24+IHRvQWRkOwotICAgIGlmICh2YWx1ZUxpc3QucHJvcGVydHkoKSA9PSBB
bmltYXRlZFByb3BlcnR5V2Via2l0VHJhbnNmb3JtKQotICAgICAgICB0b0FkZCA9IGNyZWF0ZUFj
dGl2ZUFuaW1hdGlvbjxUcmFuc2Zvcm1BbmltYXRpb25WYWx1ZSwgQ0NUcmFuc2Zvcm1LZXlmcmFt
ZSwgQ0NLZXlmcmFtZWRUcmFuc2Zvcm1BbmltYXRpb25DdXJ2ZT4odmFsdWVMaXN0LCBhbmltYXRp
b24sIGFuaW1hdGlvbklkLCBncm91cElkLCB0aW1lT2Zmc2V0LCBDQ0FjdGl2ZUFuaW1hdGlvbjo6
VHJhbnNmb3JtKTsKLSAgICBlbHNlIGlmICh2YWx1ZUxpc3QucHJvcGVydHkoKSA9PSBBbmltYXRl
ZFByb3BlcnR5T3BhY2l0eSkKLSAgICAgICAgdG9BZGQgPSBjcmVhdGVBY3RpdmVBbmltYXRpb248
RmxvYXRBbmltYXRpb25WYWx1ZSwgQ0NGbG9hdEtleWZyYW1lLCBDQ0tleWZyYW1lZEZsb2F0QW5p
bWF0aW9uQ3VydmU+KHZhbHVlTGlzdCwgYW5pbWF0aW9uLCBhbmltYXRpb25JZCwgZ3JvdXBJZCwg
dGltZU9mZnNldCwgQ0NBY3RpdmVBbmltYXRpb246Ok9wYWNpdHkpOwotCi0gICAgaWYgKHRvQWRk
LmdldCgpKSB7Ci0gICAgICAgIC8vIFJlbW92ZSBhbnkgZXhpc3RpbmcgYW5pbWF0aW9ucyB3aXRo
IHRoZSBzYW1lIGFuaW1hdGlvbiBpZCBhbmQgdGFyZ2V0IHByb3BlcnR5LgotICAgICAgICBmb3Ig
KHNpemVfdCBpID0gMDsgaSA8IG1fYWN0aXZlQW5pbWF0aW9ucy5zaXplKCk7KSB7Ci0gICAgICAg
ICAgICBpZiAobV9hY3RpdmVBbmltYXRpb25zW2ldLT5pZCgpID09IGFuaW1hdGlvbklkICYmIG1f
YWN0aXZlQW5pbWF0aW9uc1tpXS0+dGFyZ2V0UHJvcGVydHkoKSA9PSB0b0FkZC0+dGFyZ2V0UHJv
cGVydHkoKSkKLSAgICAgICAgICAgICAgICBtX2FjdGl2ZUFuaW1hdGlvbnMucmVtb3ZlKGkpOwot
ICAgICAgICAgICAgZWxzZQotICAgICAgICAgICAgICAgIGkrKzsKLSAgICAgICAgfQotICAgICAg
ICBtX2FjdGl2ZUFuaW1hdGlvbnMuYXBwZW5kKHRvQWRkLnJlbGVhc2UoKSk7Ci0gICAgICAgIHJl
dHVybiB0cnVlOwotICAgIH0KLQotICAgIHJldHVybiBmYWxzZTsKLX0KLQogdm9pZCBDQ0xheWVy
QW5pbWF0aW9uQ29udHJvbGxlcjo6cGF1c2VBbmltYXRpb24oaW50IGFuaW1hdGlvbklkLCBkb3Vi
bGUgdGltZU9mZnNldCkKIHsKICAgICBmb3IgKHNpemVfdCBpID0gMDsgaSA8IG1fYWN0aXZlQW5p
bWF0aW9ucy5zaXplKCk7ICsraSkgewpAQCAtMTgyLDYgKzY4LDE2IEBAIHZvaWQgQ0NMYXllckFu
aW1hdGlvbkNvbnRyb2xsZXI6OnJlbW92ZUFuaW1hdGlvbihpbnQgYW5pbWF0aW9uSWQpCiAgICAg
fQogfQogCit2b2lkIENDTGF5ZXJBbmltYXRpb25Db250cm9sbGVyOjpyZW1vdmVBbmltYXRpb24o
aW50IGFuaW1hdGlvbklkLCBDQ0FjdGl2ZUFuaW1hdGlvbjo6VGFyZ2V0UHJvcGVydHkgdGFyZ2V0
UHJvcGVydHkpCit7CisgICAgZm9yIChzaXplX3QgaSA9IDA7IGkgPCBtX2FjdGl2ZUFuaW1hdGlv
bnMuc2l6ZSgpOykgeworICAgICAgICBpZiAobV9hY3RpdmVBbmltYXRpb25zW2ldLT5pZCgpID09
IGFuaW1hdGlvbklkICYmIG1fYWN0aXZlQW5pbWF0aW9uc1tpXS0+dGFyZ2V0UHJvcGVydHkoKSA9
PSB0YXJnZXRQcm9wZXJ0eSkKKyAgICAgICAgICAgIG1fYWN0aXZlQW5pbWF0aW9ucy5yZW1vdmUo
aSk7CisgICAgICAgIGVsc2UKKyAgICAgICAgICAgIGkrKzsKKyAgICB9Cit9CisKIC8vIEFjY29y
ZGluZyB0byByZW5kZXIgbGF5ZXIgYmFja2luZywgdGhlc2UgYXJlIGZvciB0ZXN0aW5nIG9ubHku
CiB2b2lkIENDTGF5ZXJBbmltYXRpb25Db250cm9sbGVyOjpzdXNwZW5kQW5pbWF0aW9ucyhkb3Vi
bGUgbW9ub3RvbmljVGltZSkKIHsKQEAgLTIyNSw3ICsxMjEsNyBAQCB2b2lkIENDTGF5ZXJBbmlt
YXRpb25Db250cm9sbGVyOjphbmltYXRlKGRvdWJsZSBtb25vdG9uaWNUaW1lLCBDQ0FuaW1hdGlv
bkV2ZW50cwogICAgIHN0YXJ0QW5pbWF0aW9uc1dhaXRpbmdGb3JUYXJnZXRBdmFpbGFiaWxpdHko
bW9ub3RvbmljVGltZSwgZXZlbnRzKTsKIH0KIAotdm9pZCBDQ0xheWVyQW5pbWF0aW9uQ29udHJv
bGxlcjo6YWRkKFBhc3NPd25QdHI8Q0NBY3RpdmVBbmltYXRpb24+IGFuaW1hdGlvbikKK3ZvaWQg
Q0NMYXllckFuaW1hdGlvbkNvbnRyb2xsZXI6OmFkZEFuaW1hdGlvbihQYXNzT3duUHRyPENDQWN0
aXZlQW5pbWF0aW9uPiBhbmltYXRpb24pCiB7CiAgICAgbV9hY3RpdmVBbmltYXRpb25zLmFwcGVu
ZChhbmltYXRpb24pOwogfQpAQCAtMjM4LDYgKzEzNCwxNiBAQCBDQ0FjdGl2ZUFuaW1hdGlvbiog
Q0NMYXllckFuaW1hdGlvbkNvbnRyb2xsZXI6OmdldEFjdGl2ZUFuaW1hdGlvbihpbnQgZ3JvdXBJ
ZCwgQwogICAgIHJldHVybiAwOwogfQogCitDQ0FjdGl2ZUFuaW1hdGlvbiogQ0NMYXllckFuaW1h
dGlvbkNvbnRyb2xsZXI6OmdldEFjdGl2ZUFuaW1hdGlvbihDQ0FjdGl2ZUFuaW1hdGlvbjo6VGFy
Z2V0UHJvcGVydHkgdGFyZ2V0UHJvcGVydHkpIGNvbnN0Cit7CisgICAgZm9yIChzaXplX3QgaSA9
IDA7IGkgPCBtX2FjdGl2ZUFuaW1hdGlvbnMuc2l6ZSgpOyArK2kpIHsKKyAgICAgICAgc2l6ZV90
IGluZGV4ID0gbV9hY3RpdmVBbmltYXRpb25zLnNpemUoKSAtIGkgLSAxOworICAgICAgICBpZiAo
bV9hY3RpdmVBbmltYXRpb25zW2luZGV4XS0+dGFyZ2V0UHJvcGVydHkoKSA9PSB0YXJnZXRQcm9w
ZXJ0eSkKKyAgICAgICAgICAgIHJldHVybiBtX2FjdGl2ZUFuaW1hdGlvbnNbaW5kZXhdLmdldCgp
OworICAgIH0KKyAgICByZXR1cm4gMDsKK30KKwogYm9vbCBDQ0xheWVyQW5pbWF0aW9uQ29udHJv
bGxlcjo6aGFzQWN0aXZlQW5pbWF0aW9uKCkgY29uc3QKIHsKICAgICBmb3IgKHNpemVfdCBpID0g
MDsgaSA8IG1fYWN0aXZlQW5pbWF0aW9ucy5zaXplKCk7ICsraSkgewpAQCAtMjkyLDcgKzE5OCw3
IEBAIHZvaWQgQ0NMYXllckFuaW1hdGlvbkNvbnRyb2xsZXI6OnB1c2hOZXdBbmltYXRpb25zVG9J
bXBsVGhyZWFkKENDTGF5ZXJBbmltYXRpb25DCiAgICAgICAgIC8vIFRoZSBuZXcgYW5pbWF0aW9u
IHNob3VsZCBiZSBzZXQgdG8gcnVuIGFzIHNvb24gYXMgcG9zc2libGUuCiAgICAgICAgIHRvQWRk
LT5zZXRSdW5TdGF0ZShDQ0FjdGl2ZUFuaW1hdGlvbjo6V2FpdGluZ0ZvclRhcmdldEF2YWlsYWJp
bGl0eSwgMCk7CiAgICAgICAgIHRvQWRkLT5zZXRTdGFydFRpbWUoMCk7Ci0gICAgICAgIGNvbnRy
b2xsZXJJbXBsLT5hZGQodG9BZGQucmVsZWFzZSgpKTsKKyAgICAgICAgY29udHJvbGxlckltcGwt
PmFkZEFuaW1hdGlvbih0b0FkZC5yZWxlYXNlKCkpOwogICAgIH0KIH0KIApAQCAtNDU5LDcgKzM2
NSw3IEBAIHZvaWQgQ0NMYXllckFuaW1hdGlvbkNvbnRyb2xsZXI6OnJlcGxhY2VJbXBsVGhyZWFk
QW5pbWF0aW9ucyhDQ0xheWVyQW5pbWF0aW9uQ29uCiAgICAgICAgICAgICB0b0FkZC0+c2V0UnVu
U3RhdGUoQ0NBY3RpdmVBbmltYXRpb246OldhaXRpbmdGb3JUYXJnZXRBdmFpbGFiaWxpdHksIDAp
OwogICAgICAgICAgICAgdG9BZGQtPnNldFN0YXJ0VGltZSgwKTsKICAgICAgICAgfQotICAgICAg
ICBjb250cm9sbGVySW1wbC0+YWRkKHRvQWRkLnJlbGVhc2UoKSk7CisgICAgICAgIGNvbnRyb2xs
ZXJJbXBsLT5hZGRBbmltYXRpb24odG9BZGQucmVsZWFzZSgpKTsKICAgICB9CiB9CiAKQEAgLTQ3
OCw3ICszODQsNyBAQCB2b2lkIENDTGF5ZXJBbmltYXRpb25Db250cm9sbGVyOjp0aWNrQW5pbWF0
aW9ucyhkb3VibGUgbW9ub3RvbmljVGltZSkKIAogICAgICAgICAgICAgY2FzZSBDQ0FjdGl2ZUFu
aW1hdGlvbjo6VHJhbnNmb3JtOiB7CiAgICAgICAgICAgICAgICAgY29uc3QgQ0NUcmFuc2Zvcm1B
bmltYXRpb25DdXJ2ZSogdHJhbnNmb3JtQW5pbWF0aW9uQ3VydmUgPSBtX2FjdGl2ZUFuaW1hdGlv
bnNbaV0tPmN1cnZlKCktPnRvVHJhbnNmb3JtQW5pbWF0aW9uQ3VydmUoKTsKLSAgICAgICAgICAg
ICAgICBjb25zdCBUcmFuc2Zvcm1hdGlvbk1hdHJpeCBtYXRyaXggPSB0cmFuc2Zvcm1BbmltYXRp
b25DdXJ2ZS0+Z2V0VmFsdWUodHJpbW1lZCwgbV9jbGllbnQtPmJvdW5kcygpKTsKKyAgICAgICAg
ICAgICAgICBjb25zdCBUcmFuc2Zvcm1hdGlvbk1hdHJpeCBtYXRyaXggPSB0cmFuc2Zvcm1Bbmlt
YXRpb25DdXJ2ZS0+Z2V0VmFsdWUodHJpbW1lZCk7CiAgICAgICAgICAgICAgICAgaWYgKG1fYWN0
aXZlQW5pbWF0aW9uc1tpXS0+aXNGaW5pc2hlZEF0KG1vbm90b25pY1RpbWUpKQogICAgICAgICAg
ICAgICAgICAgICBtX2FjdGl2ZUFuaW1hdGlvbnNbaV0tPnNldFJ1blN0YXRlKENDQWN0aXZlQW5p
bWF0aW9uOjpGaW5pc2hlZCwgbW9ub3RvbmljVGltZSk7CiAKZGlmZiAtLWdpdCBhL1NvdXJjZS9X
ZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2Nocm9taXVtL2NjL0NDTGF5ZXJBbmltYXRpb25Db250
cm9sbGVyLmggYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9jaHJvbWl1bS9jYy9D
Q0xheWVyQW5pbWF0aW9uQ29udHJvbGxlci5oCmluZGV4IGFjNzI4N2Y3MTFlMjMwM2FhMDkzYTcx
MmM1YzU5MWExMGUzMWMzZTQuLmJhYTRhYzNkZGFhMDM4YmUxZTExMmEzMTQyNTI3YTliMjJjNGI3
MDEgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2Nocm9taXVt
L2NjL0NDTGF5ZXJBbmltYXRpb25Db250cm9sbGVyLmgKKysrIGIvU291cmNlL1dlYkNvcmUvcGxh
dGZvcm0vZ3JhcGhpY3MvY2hyb21pdW0vY2MvQ0NMYXllckFuaW1hdGlvbkNvbnRyb2xsZXIuaApA
QCAtNTAsNyArNTAsNiBAQCBwdWJsaWM6CiAgICAgdmlydHVhbCBmbG9hdCBvcGFjaXR5KCkgY29u
c3QgPSAwOwogICAgIHZpcnR1YWwgdm9pZCBzZXRUcmFuc2Zvcm1Gcm9tQW5pbWF0aW9uKGNvbnN0
IFRyYW5zZm9ybWF0aW9uTWF0cml4JikgPSAwOwogICAgIHZpcnR1YWwgY29uc3QgVHJhbnNmb3Jt
YXRpb25NYXRyaXgmIHRyYW5zZm9ybSgpIGNvbnN0ID0gMDsKLSAgICB2aXJ0dWFsIGNvbnN0IElu
dFNpemUmIGJvdW5kcygpIGNvbnN0ID0gMDsKIH07CiAKIGNsYXNzIENDTGF5ZXJBbmltYXRpb25D
b250cm9sbGVyIHsKQEAgLTYxLDkgKzYwLDEwIEBAIHB1YmxpYzoKICAgICB2aXJ0dWFsIH5DQ0xh
eWVyQW5pbWF0aW9uQ29udHJvbGxlcigpOwogCiAgICAgLy8gVGhlc2UgbWV0aG9kcyBhcmUgdmly
dHVhbCBmb3IgdGVzdGluZy4KLSAgICB2aXJ0dWFsIGJvb2wgYWRkQW5pbWF0aW9uKGNvbnN0IEtl
eWZyYW1lVmFsdWVMaXN0JiwgY29uc3QgSW50U2l6ZSYgYm94U2l6ZSwgY29uc3QgQW5pbWF0aW9u
KiwgaW50IGFuaW1hdGlvbklkLCBpbnQgZ3JvdXBJZCwgZG91YmxlIHRpbWVPZmZzZXQpOworICAg
IHZpcnR1YWwgdm9pZCBhZGRBbmltYXRpb24oUGFzc093blB0cjxDQ0FjdGl2ZUFuaW1hdGlvbj4p
OwogICAgIHZpcnR1YWwgdm9pZCBwYXVzZUFuaW1hdGlvbihpbnQgYW5pbWF0aW9uSWQsIGRvdWJs
ZSB0aW1lT2Zmc2V0KTsKICAgICB2aXJ0dWFsIHZvaWQgcmVtb3ZlQW5pbWF0aW9uKGludCBhbmlt
YXRpb25JZCk7CisgICAgdmlydHVhbCB2b2lkIHJlbW92ZUFuaW1hdGlvbihpbnQgYW5pbWF0aW9u
SWQsIENDQWN0aXZlQW5pbWF0aW9uOjpUYXJnZXRQcm9wZXJ0eSk7CiAgICAgdmlydHVhbCB2b2lk
IHN1c3BlbmRBbmltYXRpb25zKGRvdWJsZSBtb25vdG9uaWNUaW1lKTsKICAgICB2aXJ0dWFsIHZv
aWQgcmVzdW1lQW5pbWF0aW9ucyhkb3VibGUgbW9ub3RvbmljVGltZSk7CiAKQEAgLTczLDEyICs3
MywxNCBAQCBwdWJsaWM6CiAKICAgICB2b2lkIGFuaW1hdGUoZG91YmxlIG1vbm90b25pY1RpbWUs
IENDQW5pbWF0aW9uRXZlbnRzVmVjdG9yKik7CiAKLSAgICB2b2lkIGFkZChQYXNzT3duUHRyPEND
QWN0aXZlQW5pbWF0aW9uPik7Ci0KLSAgICAvLyBSZXR1cm5zIHRoZSBhY3RpdmUgYW5pbWF0aW9u
IGluIHRoZSBnaXZlbiBncm91cCwgYW5pbWF0aW5nIHRoZSBnaXZlbiBwcm9wZXJ0eSBpZiBzdWNo
IGFuCisgICAgLy8gUmV0dXJucyB0aGUgYWN0aXZlIGFuaW1hdGlvbiBpbiB0aGUgZ2l2ZW4gZ3Jv
dXAsIGFuaW1hdGluZyB0aGUgZ2l2ZW4gcHJvcGVydHksIGlmIHN1Y2ggYW4KICAgICAvLyBhbmlt
YXRpb24gZXhpc3RzLgogICAgIENDQWN0aXZlQW5pbWF0aW9uKiBnZXRBY3RpdmVBbmltYXRpb24o
aW50IGdyb3VwSWQsIENDQWN0aXZlQW5pbWF0aW9uOjpUYXJnZXRQcm9wZXJ0eSkgY29uc3Q7CiAK
KyAgICAvLyBSZXR1cm5zIHRoZSBhY3RpdmUgYW5pbWF0aW9uIGFuaW1hdGluZyB0aGUgZ2l2ZW4g
cHJvcGVydHkgdGhhdCBpcyBlaXRoZXIgcnVubmluZywgb3IgaXMKKyAgICAvLyBuZXh0IHRvIHJ1
biwgaWYgc3VjaCBhbiBhbmltYXRpb24gZXhpc3RzLgorICAgIENDQWN0aXZlQW5pbWF0aW9uKiBn
ZXRBY3RpdmVBbmltYXRpb24oQ0NBY3RpdmVBbmltYXRpb246OlRhcmdldFByb3BlcnR5KSBjb25z
dDsKKwogICAgIC8vIFJldHVybnMgdHJ1ZSBpZiB0aGVyZSBhcmUgYW55IGFuaW1hdGlvbnMgdGhh
dCBoYXZlIG5laXRoZXIgZmluaXNoZWQgbm9yIGFib3J0ZWQuCiAgICAgYm9vbCBoYXNBY3RpdmVB
bmltYXRpb24oKSBjb25zdDsKIApkaWZmIC0tZ2l0IGEvU291cmNlL1dlYktpdC9jaHJvbWl1bS90
ZXN0cy9DQ0FuaW1hdGlvblRlc3RDb21tb24uY3BwIGIvU291cmNlL1dlYktpdC9jaHJvbWl1bS90
ZXN0cy9DQ0FuaW1hdGlvblRlc3RDb21tb24uY3BwCmluZGV4IDM2Zjc5ODE4ZWYwOWU4MzhjYzk4
MjdiOGZhMTYyNTg4MTk1MGRhNDIuLjE0MTRiOGNhNWM0MDMzMjc5OTZkN2JmZTk0NGM0MzgwNWNh
NzdlY2EgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJLaXQvY2hyb21pdW0vdGVzdHMvQ0NBbmltYXRp
b25UZXN0Q29tbW9uLmNwcAorKysgYi9Tb3VyY2UvV2ViS2l0L2Nocm9taXVtL3Rlc3RzL0NDQW5p
bWF0aW9uVGVzdENvbW1vbi5jcHAKQEAgLTI5LDkgKzI5LDEyIEBACiAjaW5jbHVkZSAiR3JhcGhp
Y3NMYXllci5oIgogI2luY2x1ZGUgIkxheWVyQ2hyb21pdW0uaCIKICNpbmNsdWRlICJUcmFuc2xh
dGVUcmFuc2Zvcm1PcGVyYXRpb24uaCIKKyNpbmNsdWRlICJjYy9DQ0tleWZyYW1lZEFuaW1hdGlv
bkN1cnZlLmgiCiAjaW5jbHVkZSAiY2MvQ0NMYXllckFuaW1hdGlvbkNvbnRyb2xsZXIuaCIKICNp
bmNsdWRlICJjYy9DQ0xheWVySW1wbC5oIgogCisjaW5jbHVkZSA8cHVibGljL1dlYlRyYW5zZm9y
bU9wZXJhdGlvbnMuaD4KKwogdXNpbmcgbmFtZXNwYWNlIFdlYkNvcmU7CiAKIG5hbWVzcGFjZSB7
CkBAIC0zOSwzOCArNDIsMzggQEAgbmFtZXNwYWNlIHsKIHRlbXBsYXRlIDxjbGFzcyBUYXJnZXQ+
CiB2b2lkIGFkZE9wYWNpdHlUcmFuc2l0aW9uKFRhcmdldCYgdGFyZ2V0LCBkb3VibGUgZHVyYXRp
b24sIGZsb2F0IHN0YXJ0T3BhY2l0eSwgZmxvYXQgZW5kT3BhY2l0eSwgYm9vbCB1c2VUaW1pbmdG
dW5jdGlvbikKIHsKLSAgICBXZWJDb3JlOjpLZXlmcmFtZVZhbHVlTGlzdCB2YWx1ZXMoQW5pbWF0
ZWRQcm9wZXJ0eU9wYWNpdHkpOwotICAgIGlmIChkdXJhdGlvbiA+IDApCi0gICAgICAgIHZhbHVl
cy5pbnNlcnQobmV3IEZsb2F0QW5pbWF0aW9uVmFsdWUoMCwgc3RhcnRPcGFjaXR5KSk7Ci0gICAg
dmFsdWVzLmluc2VydChuZXcgRmxvYXRBbmltYXRpb25WYWx1ZShkdXJhdGlvbiwgZW5kT3BhY2l0
eSkpOworICAgIE93blB0cjxDQ0tleWZyYW1lZEZsb2F0QW5pbWF0aW9uQ3VydmU+IGN1cnZlKEND
S2V5ZnJhbWVkRmxvYXRBbmltYXRpb25DdXJ2ZTo6Y3JlYXRlKCkpOwogCi0gICAgUmVmUHRyPEFu
aW1hdGlvbj4gYW5pbWF0aW9uID0gQW5pbWF0aW9uOjpjcmVhdGUoKTsKLSAgICBhbmltYXRpb24t
PnNldER1cmF0aW9uKGR1cmF0aW9uKTsKLQotICAgIGlmICh1c2VUaW1pbmdGdW5jdGlvbikKLSAg
ICAgICAgYW5pbWF0aW9uLT5zZXRUaW1pbmdGdW5jdGlvbihMaW5lYXJUaW1pbmdGdW5jdGlvbjo6
Y3JlYXRlKCkpOworICAgIGlmIChkdXJhdGlvbiA+IDApCisgICAgICAgIGN1cnZlLT5hZGRLZXlm
cmFtZShDQ0Zsb2F0S2V5ZnJhbWU6OmNyZWF0ZSgwLCBzdGFydE9wYWNpdHksIHVzZVRpbWluZ0Z1
bmN0aW9uID8gbnVsbHB0ciA6IENDRWFzZVRpbWluZ0Z1bmN0aW9uOjpjcmVhdGUoKSkpOworICAg
IGN1cnZlLT5hZGRLZXlmcmFtZShDQ0Zsb2F0S2V5ZnJhbWU6OmNyZWF0ZShkdXJhdGlvbiwgZW5k
T3BhY2l0eSwgbnVsbHB0cikpOwogCi0gICAgSW50U2l6ZSBib3hTaXplOworICAgIE93blB0cjxD
Q0FjdGl2ZUFuaW1hdGlvbj4gYW5pbWF0aW9uKENDQWN0aXZlQW5pbWF0aW9uOjpjcmVhdGUoY3Vy
dmUucmVsZWFzZSgpLCAwLCAwLCBDQ0FjdGl2ZUFuaW1hdGlvbjo6T3BhY2l0eSkpOworICAgIGFu
aW1hdGlvbi0+c2V0TmVlZHNTeW5jaHJvbml6ZWRTdGFydFRpbWUodHJ1ZSk7CiAKLSAgICB0YXJn
ZXQuYWRkQW5pbWF0aW9uKHZhbHVlcywgYm94U2l6ZSwgYW5pbWF0aW9uLmdldCgpLCAwLCAwLCAw
KTsKKyAgICB0YXJnZXQuYWRkQW5pbWF0aW9uKGFuaW1hdGlvbi5yZWxlYXNlKCkpOwogfQogCiB0
ZW1wbGF0ZSA8Y2xhc3MgVGFyZ2V0Pgogdm9pZCBhZGRBbmltYXRlZFRyYW5zZm9ybShUYXJnZXQm
IHRhcmdldCwgZG91YmxlIGR1cmF0aW9uLCBpbnQgZGVsdGFYLCBpbnQgZGVsdGFZKQogewogICAg
IHN0YXRpYyBpbnQgaWQgPSAwOwotICAgIFdlYkNvcmU6OktleWZyYW1lVmFsdWVMaXN0IHZhbHVl
cyhBbmltYXRlZFByb3BlcnR5V2Via2l0VHJhbnNmb3JtKTsKKyAgICBPd25QdHI8Q0NLZXlmcmFt
ZWRUcmFuc2Zvcm1BbmltYXRpb25DdXJ2ZT4gY3VydmUoQ0NLZXlmcmFtZWRUcmFuc2Zvcm1Bbmlt
YXRpb25DdXJ2ZTo6Y3JlYXRlKCkpOwogCi0gICAgVHJhbnNmb3JtT3BlcmF0aW9ucyBvcGVyYXRp
b25zOwotICAgIG9wZXJhdGlvbnMub3BlcmF0aW9ucygpLmFwcGVuZChUcmFuc2xhdGVUcmFuc2Zv
cm1PcGVyYXRpb246OmNyZWF0ZShMZW5ndGgoZGVsdGFYLCBXZWJDb3JlOjpGaXhlZCksIExlbmd0
aChkZWx0YVksIFdlYkNvcmU6OkZpeGVkKSwgVHJhbnNmb3JtT3BlcmF0aW9uOjpUUkFOU0xBVEVf
WCkpOwotICAgIHZhbHVlcy5pbnNlcnQobmV3IFRyYW5zZm9ybUFuaW1hdGlvblZhbHVlKDAsICZv
cGVyYXRpb25zKSk7CisgICAgaWYgKGR1cmF0aW9uID4gMCkgeworICAgICAgICBXZWJLaXQ6Oldl
YlRyYW5zZm9ybU9wZXJhdGlvbnMgc3RhcnRPcGVyYXRpb25zOworICAgICAgICBzdGFydE9wZXJh
dGlvbnMuYXBwZW5kVHJhbnNsYXRlKGRlbHRhWCwgZGVsdGFZLCAwKTsKKyAgICAgICAgY3VydmUt
PmFkZEtleWZyYW1lKENDVHJhbnNmb3JtS2V5ZnJhbWU6OmNyZWF0ZSgwLCBzdGFydE9wZXJhdGlv
bnMsIG51bGxwdHIpKTsKKyAgICB9CiAKLSAgICBSZWZQdHI8QW5pbWF0aW9uPiBhbmltYXRpb24g
PSBBbmltYXRpb246OmNyZWF0ZSgpOwotICAgIGFuaW1hdGlvbi0+c2V0RHVyYXRpb24oZHVyYXRp
b24pOworICAgIFdlYktpdDo6V2ViVHJhbnNmb3JtT3BlcmF0aW9ucyBvcGVyYXRpb25zOworICAg
IG9wZXJhdGlvbnMuYXBwZW5kVHJhbnNsYXRlKGRlbHRhWCwgZGVsdGFZLCAwKTsKKyAgICBjdXJ2
ZS0+YWRkS2V5ZnJhbWUoQ0NUcmFuc2Zvcm1LZXlmcmFtZTo6Y3JlYXRlKGR1cmF0aW9uLCBvcGVy
YXRpb25zLCBudWxscHRyKSk7CiAKLSAgICBJbnRTaXplIGJveFNpemU7CisgICAgT3duUHRyPEND
QWN0aXZlQW5pbWF0aW9uPiBhbmltYXRpb24oQ0NBY3RpdmVBbmltYXRpb246OmNyZWF0ZShjdXJ2
ZS5yZWxlYXNlKCksIGlkKyssIDAsIENDQWN0aXZlQW5pbWF0aW9uOjpUcmFuc2Zvcm0pKTsKKyAg
ICBhbmltYXRpb24tPnNldE5lZWRzU3luY2hyb25pemVkU3RhcnRUaW1lKHRydWUpOwogCi0gICAg
dGFyZ2V0LmFkZEFuaW1hdGlvbih2YWx1ZXMsIGJveFNpemUsIGFuaW1hdGlvbi5nZXQoKSwgKytp
ZCwgMCwgMCk7CisgICAgdGFyZ2V0LmFkZEFuaW1hdGlvbihhbmltYXRpb24ucmVsZWFzZSgpKTsK
IH0KIAogfSAvLyBuYW1lc3BhY2UKQEAgLTk5LDcgKzEwMiw3IEBAIEZha2VUcmFuc2Zvcm1UcmFu
c2l0aW9uOjp+RmFrZVRyYW5zZm9ybVRyYW5zaXRpb24oKQogewogfQogCi1XZWJDb3JlOjpUcmFu
c2Zvcm1hdGlvbk1hdHJpeCBGYWtlVHJhbnNmb3JtVHJhbnNpdGlvbjo6Z2V0VmFsdWUoZG91Ymxl
IHRpbWUsIGNvbnN0IFdlYkNvcmU6OkludFNpemUmIHNpemUpIGNvbnN0CitXZWJDb3JlOjpUcmFu
c2Zvcm1hdGlvbk1hdHJpeCBGYWtlVHJhbnNmb3JtVHJhbnNpdGlvbjo6Z2V0VmFsdWUoZG91Ymxl
IHRpbWUpIGNvbnN0CiB7CiAgICAgcmV0dXJuIFdlYkNvcmU6OlRyYW5zZm9ybWF0aW9uTWF0cml4
KCk7CiB9CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViS2l0L2Nocm9taXVtL3Rlc3RzL0NDQW5pbWF0
aW9uVGVzdENvbW1vbi5oIGIvU291cmNlL1dlYktpdC9jaHJvbWl1bS90ZXN0cy9DQ0FuaW1hdGlv
blRlc3RDb21tb24uaAppbmRleCA3NzZiNzVjOGQ2ZjZlYWU0OWNiMmMyOGVlOGQ2M2MyMWJlMTIz
ODM0Li45NjdkZDgxOGRkNTZiOGJjYmNmN2FiYzhjYTQ2Zjg5M2I3MGEzZGM0IDEwMDY0NAotLS0g
YS9Tb3VyY2UvV2ViS2l0L2Nocm9taXVtL3Rlc3RzL0NDQW5pbWF0aW9uVGVzdENvbW1vbi5oCisr
KyBiL1NvdXJjZS9XZWJLaXQvY2hyb21pdW0vdGVzdHMvQ0NBbmltYXRpb25UZXN0Q29tbW9uLmgK
QEAgLTUzLDcgKzUzLDcgQEAgcHVibGljOgogICAgIHZpcnR1YWwgfkZha2VUcmFuc2Zvcm1UcmFu
c2l0aW9uKCk7CiAKICAgICB2aXJ0dWFsIGRvdWJsZSBkdXJhdGlvbigpIGNvbnN0IE9WRVJSSURF
IHsgcmV0dXJuIG1fZHVyYXRpb247IH0KLSAgICB2aXJ0dWFsIFdlYkNvcmU6OlRyYW5zZm9ybWF0
aW9uTWF0cml4IGdldFZhbHVlKGRvdWJsZSB0aW1lLCBjb25zdCBXZWJDb3JlOjpJbnRTaXplJikg
Y29uc3QgT1ZFUlJJREU7CisgICAgdmlydHVhbCBXZWJDb3JlOjpUcmFuc2Zvcm1hdGlvbk1hdHJp
eCBnZXRWYWx1ZShkb3VibGUgdGltZSkgY29uc3QgT1ZFUlJJREU7CiAKICAgICB2aXJ0dWFsIFBh
c3NPd25QdHI8V2ViQ29yZTo6Q0NBbmltYXRpb25DdXJ2ZT4gY2xvbmUoKSBjb25zdCBPVkVSUklE
RTsKIApkaWZmIC0tZ2l0IGEvU291cmNlL1dlYktpdC9jaHJvbWl1bS90ZXN0cy9DQ0tleWZyYW1l
ZEFuaW1hdGlvbkN1cnZlVGVzdC5jcHAgYi9Tb3VyY2UvV2ViS2l0L2Nocm9taXVtL3Rlc3RzL0ND
S2V5ZnJhbWVkQW5pbWF0aW9uQ3VydmVUZXN0LmNwcAppbmRleCAxNWI1NTRhMDY5MDU3NTJmMWJk
ZWZjYjhhZWJiODcyOGZlZWZhNTVhLi41YWM3MjdjYjU3MzlkNDU3Y2QyOTlkY2E3YTEwM2UzYjlk
OTBmMjZmIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViS2l0L2Nocm9taXVtL3Rlc3RzL0NDS2V5ZnJh
bWVkQW5pbWF0aW9uQ3VydmVUZXN0LmNwcAorKysgYi9Tb3VyY2UvV2ViS2l0L2Nocm9taXVtL3Rl
c3RzL0NDS2V5ZnJhbWVkQW5pbWF0aW9uQ3VydmVUZXN0LmNwcApAQCAtMzEsNiArMzEsNyBAQAog
CiAjaW5jbHVkZSA8Z21vY2svZ21vY2suaD4KICNpbmNsdWRlIDxndGVzdC9ndGVzdC5oPgorI2lu
Y2x1ZGUgPHB1YmxpYy9XZWJUcmFuc2Zvcm1PcGVyYXRpb25zLmg+CiAjaW5jbHVkZSA8d3RmL093
blB0ci5oPgogI2luY2x1ZGUgPHd0Zi9WZWN0b3IuaD4KIApAQCAtMTEzLDU3ICsxMTQsNTUgQEAg
VEVTVChDQ0tleWZyYW1lZEFuaW1hdGlvbkN1cnZlVGVzdCwgUmVwZWF0ZWRGbG9hdEtleVRpbWVz
KQogVEVTVChDQ0tleWZyYW1lZEFuaW1hdGlvbkN1cnZlVGVzdCwgT25lVHJhbnNmb3JtS2V5ZnJh
bWUpCiB7CiAgICAgT3duUHRyPENDS2V5ZnJhbWVkVHJhbnNmb3JtQW5pbWF0aW9uQ3VydmU+IGN1
cnZlKENDS2V5ZnJhbWVkVHJhbnNmb3JtQW5pbWF0aW9uQ3VydmU6OmNyZWF0ZSgpKTsKLSAgICBU
cmFuc2Zvcm1PcGVyYXRpb25zIG9wZXJhdGlvbnM7Ci0gICAgb3BlcmF0aW9ucy5vcGVyYXRpb25z
KCkuYXBwZW5kKFRyYW5zbGF0ZVRyYW5zZm9ybU9wZXJhdGlvbjo6Y3JlYXRlKExlbmd0aCgyLCBG
aXhlZCksIExlbmd0aCgwLCBGaXhlZCksIFRyYW5zZm9ybU9wZXJhdGlvbjo6VFJBTlNMQVRFX1gp
KTsKKyAgICBXZWJLaXQ6OldlYlRyYW5zZm9ybU9wZXJhdGlvbnMgb3BlcmF0aW9uczsKKyAgICBv
cGVyYXRpb25zLmFwcGVuZFRyYW5zbGF0ZSgyLCAwLCAwKTsKICAgICBjdXJ2ZS0+YWRkS2V5ZnJh
bWUoQ0NUcmFuc2Zvcm1LZXlmcmFtZTo6Y3JlYXRlKDAsIG9wZXJhdGlvbnMsIG51bGxwdHIpKTsK
IAotICAgIEludFNpemUgbGF5ZXJTaXplOyAvLyBpZ25vcmVkCi0gICAgZXhwZWN0VHJhbnNsYXRl
WCgyLCBjdXJ2ZS0+Z2V0VmFsdWUoLTEsIGxheWVyU2l6ZSkpOwotICAgIGV4cGVjdFRyYW5zbGF0
ZVgoMiwgY3VydmUtPmdldFZhbHVlKDAsIGxheWVyU2l6ZSkpOwotICAgIGV4cGVjdFRyYW5zbGF0
ZVgoMiwgY3VydmUtPmdldFZhbHVlKDAuNSwgbGF5ZXJTaXplKSk7Ci0gICAgZXhwZWN0VHJhbnNs
YXRlWCgyLCBjdXJ2ZS0+Z2V0VmFsdWUoMSwgbGF5ZXJTaXplKSk7Ci0gICAgZXhwZWN0VHJhbnNs
YXRlWCgyLCBjdXJ2ZS0+Z2V0VmFsdWUoMiwgbGF5ZXJTaXplKSk7CisgICAgZXhwZWN0VHJhbnNs
YXRlWCgyLCBjdXJ2ZS0+Z2V0VmFsdWUoLTEpKTsKKyAgICBleHBlY3RUcmFuc2xhdGVYKDIsIGN1
cnZlLT5nZXRWYWx1ZSgwKSk7CisgICAgZXhwZWN0VHJhbnNsYXRlWCgyLCBjdXJ2ZS0+Z2V0VmFs
dWUoMC41KSk7CisgICAgZXhwZWN0VHJhbnNsYXRlWCgyLCBjdXJ2ZS0+Z2V0VmFsdWUoMSkpOwor
ICAgIGV4cGVjdFRyYW5zbGF0ZVgoMiwgY3VydmUtPmdldFZhbHVlKDIpKTsKIH0KIAogLy8gVGVz
dHMgdGhhdCBhIHRyYW5zZm9ybSBhbmltYXRpb24gd2l0aCB0d28ga2V5ZnJhbWVzIHdvcmtzIGFz
IGV4cGVjdGVkLgogVEVTVChDQ0tleWZyYW1lZEFuaW1hdGlvbkN1cnZlVGVzdCwgVHdvVHJhbnNm
b3JtS2V5ZnJhbWUpCiB7CiAgICAgT3duUHRyPENDS2V5ZnJhbWVkVHJhbnNmb3JtQW5pbWF0aW9u
Q3VydmU+IGN1cnZlKENDS2V5ZnJhbWVkVHJhbnNmb3JtQW5pbWF0aW9uQ3VydmU6OmNyZWF0ZSgp
KTsKLSAgICBUcmFuc2Zvcm1PcGVyYXRpb25zIG9wZXJhdGlvbnMxOwotICAgIG9wZXJhdGlvbnMx
Lm9wZXJhdGlvbnMoKS5hcHBlbmQoVHJhbnNsYXRlVHJhbnNmb3JtT3BlcmF0aW9uOjpjcmVhdGUo
TGVuZ3RoKDIsIEZpeGVkKSwgTGVuZ3RoKDAsIEZpeGVkKSwgVHJhbnNmb3JtT3BlcmF0aW9uOjpU
UkFOU0xBVEVfWCkpOwotICAgIFRyYW5zZm9ybU9wZXJhdGlvbnMgb3BlcmF0aW9uczI7Ci0gICAg
b3BlcmF0aW9uczIub3BlcmF0aW9ucygpLmFwcGVuZChUcmFuc2xhdGVUcmFuc2Zvcm1PcGVyYXRp
b246OmNyZWF0ZShMZW5ndGgoNCwgRml4ZWQpLCBMZW5ndGgoMCwgRml4ZWQpLCBUcmFuc2Zvcm1P
cGVyYXRpb246OlRSQU5TTEFURV9YKSk7CisgICAgV2ViS2l0OjpXZWJUcmFuc2Zvcm1PcGVyYXRp
b25zIG9wZXJhdGlvbnMxOworICAgIG9wZXJhdGlvbnMxLmFwcGVuZFRyYW5zbGF0ZSgyLCAwLCAw
KTsKKyAgICBXZWJLaXQ6OldlYlRyYW5zZm9ybU9wZXJhdGlvbnMgb3BlcmF0aW9uczI7CisgICAg
b3BlcmF0aW9uczIuYXBwZW5kVHJhbnNsYXRlKDQsIDAsIDApOworCiAgICAgY3VydmUtPmFkZEtl
eWZyYW1lKENDVHJhbnNmb3JtS2V5ZnJhbWU6OmNyZWF0ZSgwLCBvcGVyYXRpb25zMSwgbnVsbHB0
cikpOwogICAgIGN1cnZlLT5hZGRLZXlmcmFtZShDQ1RyYW5zZm9ybUtleWZyYW1lOjpjcmVhdGUo
MSwgb3BlcmF0aW9uczIsIG51bGxwdHIpKTsKLSAgICBJbnRTaXplIGxheWVyU2l6ZTsgLy8gaWdu
b3JlZAotICAgIGV4cGVjdFRyYW5zbGF0ZVgoMiwgY3VydmUtPmdldFZhbHVlKC0xLCBsYXllclNp
emUpKTsKLSAgICBleHBlY3RUcmFuc2xhdGVYKDIsIGN1cnZlLT5nZXRWYWx1ZSgwLCBsYXllclNp
emUpKTsKLSAgICBleHBlY3RUcmFuc2xhdGVYKDMsIGN1cnZlLT5nZXRWYWx1ZSgwLjUsIGxheWVy
U2l6ZSkpOwotICAgIGV4cGVjdFRyYW5zbGF0ZVgoNCwgY3VydmUtPmdldFZhbHVlKDEsIGxheWVy
U2l6ZSkpOwotICAgIGV4cGVjdFRyYW5zbGF0ZVgoNCwgY3VydmUtPmdldFZhbHVlKDIsIGxheWVy
U2l6ZSkpOworICAgIGV4cGVjdFRyYW5zbGF0ZVgoMiwgY3VydmUtPmdldFZhbHVlKC0xKSk7Cisg
ICAgZXhwZWN0VHJhbnNsYXRlWCgyLCBjdXJ2ZS0+Z2V0VmFsdWUoMCkpOworICAgIGV4cGVjdFRy
YW5zbGF0ZVgoMywgY3VydmUtPmdldFZhbHVlKDAuNSkpOworICAgIGV4cGVjdFRyYW5zbGF0ZVgo
NCwgY3VydmUtPmdldFZhbHVlKDEpKTsKKyAgICBleHBlY3RUcmFuc2xhdGVYKDQsIGN1cnZlLT5n
ZXRWYWx1ZSgyKSk7CiB9CiAKIC8vIFRlc3RzIHRoYXQgYSB0cmFuc2Zvcm0gYW5pbWF0aW9uIHdp
dGggdGhyZWUga2V5ZnJhbWVzIHdvcmtzIGFzIGV4cGVjdGVkLgogVEVTVChDQ0tleWZyYW1lZEFu
aW1hdGlvbkN1cnZlVGVzdCwgVGhyZWVUcmFuc2Zvcm1LZXlmcmFtZSkKIHsKICAgICBPd25QdHI8
Q0NLZXlmcmFtZWRUcmFuc2Zvcm1BbmltYXRpb25DdXJ2ZT4gY3VydmUoQ0NLZXlmcmFtZWRUcmFu
c2Zvcm1BbmltYXRpb25DdXJ2ZTo6Y3JlYXRlKCkpOwotICAgIFRyYW5zZm9ybU9wZXJhdGlvbnMg
b3BlcmF0aW9uczE7Ci0gICAgb3BlcmF0aW9uczEub3BlcmF0aW9ucygpLmFwcGVuZChUcmFuc2xh
dGVUcmFuc2Zvcm1PcGVyYXRpb246OmNyZWF0ZShMZW5ndGgoMiwgRml4ZWQpLCBMZW5ndGgoMCwg
Rml4ZWQpLCBUcmFuc2Zvcm1PcGVyYXRpb246OlRSQU5TTEFURV9YKSk7Ci0gICAgVHJhbnNmb3Jt
T3BlcmF0aW9ucyBvcGVyYXRpb25zMjsKLSAgICBvcGVyYXRpb25zMi5vcGVyYXRpb25zKCkuYXBw
ZW5kKFRyYW5zbGF0ZVRyYW5zZm9ybU9wZXJhdGlvbjo6Y3JlYXRlKExlbmd0aCg0LCBGaXhlZCks
IExlbmd0aCgwLCBGaXhlZCksIFRyYW5zZm9ybU9wZXJhdGlvbjo6VFJBTlNMQVRFX1gpKTsKLSAg
ICBUcmFuc2Zvcm1PcGVyYXRpb25zIG9wZXJhdGlvbnMzOwotICAgIG9wZXJhdGlvbnMzLm9wZXJh
dGlvbnMoKS5hcHBlbmQoVHJhbnNsYXRlVHJhbnNmb3JtT3BlcmF0aW9uOjpjcmVhdGUoTGVuZ3Ro
KDgsIEZpeGVkKSwgTGVuZ3RoKDAsIEZpeGVkKSwgVHJhbnNmb3JtT3BlcmF0aW9uOjpUUkFOU0xB
VEVfWCkpOworICAgIFdlYktpdDo6V2ViVHJhbnNmb3JtT3BlcmF0aW9ucyBvcGVyYXRpb25zMTsK
KyAgICBvcGVyYXRpb25zMS5hcHBlbmRUcmFuc2xhdGUoMiwgMCwgMCk7CisgICAgV2ViS2l0OjpX
ZWJUcmFuc2Zvcm1PcGVyYXRpb25zIG9wZXJhdGlvbnMyOworICAgIG9wZXJhdGlvbnMyLmFwcGVu
ZFRyYW5zbGF0ZSg0LCAwLCAwKTsKKyAgICBXZWJLaXQ6OldlYlRyYW5zZm9ybU9wZXJhdGlvbnMg
b3BlcmF0aW9uczM7CisgICAgb3BlcmF0aW9uczMuYXBwZW5kVHJhbnNsYXRlKDgsIDAsIDApOwog
ICAgIGN1cnZlLT5hZGRLZXlmcmFtZShDQ1RyYW5zZm9ybUtleWZyYW1lOjpjcmVhdGUoMCwgb3Bl
cmF0aW9uczEsIG51bGxwdHIpKTsKICAgICBjdXJ2ZS0+YWRkS2V5ZnJhbWUoQ0NUcmFuc2Zvcm1L
ZXlmcmFtZTo6Y3JlYXRlKDEsIG9wZXJhdGlvbnMyLCBudWxscHRyKSk7CiAgICAgY3VydmUtPmFk
ZEtleWZyYW1lKENDVHJhbnNmb3JtS2V5ZnJhbWU6OmNyZWF0ZSgyLCBvcGVyYXRpb25zMywgbnVs
bHB0cikpOwotICAgIEludFNpemUgbGF5ZXJTaXplOyAvLyBpZ25vcmVkCi0gICAgZXhwZWN0VHJh
bnNsYXRlWCgyLCBjdXJ2ZS0+Z2V0VmFsdWUoLTEsIGxheWVyU2l6ZSkpOwotICAgIGV4cGVjdFRy
YW5zbGF0ZVgoMiwgY3VydmUtPmdldFZhbHVlKDAsIGxheWVyU2l6ZSkpOwotICAgIGV4cGVjdFRy
YW5zbGF0ZVgoMywgY3VydmUtPmdldFZhbHVlKDAuNSwgbGF5ZXJTaXplKSk7Ci0gICAgZXhwZWN0
VHJhbnNsYXRlWCg0LCBjdXJ2ZS0+Z2V0VmFsdWUoMSwgbGF5ZXJTaXplKSk7Ci0gICAgZXhwZWN0
VHJhbnNsYXRlWCg2LCBjdXJ2ZS0+Z2V0VmFsdWUoMS41LCBsYXllclNpemUpKTsKLSAgICBleHBl
Y3RUcmFuc2xhdGVYKDgsIGN1cnZlLT5nZXRWYWx1ZSgyLCBsYXllclNpemUpKTsKLSAgICBleHBl
Y3RUcmFuc2xhdGVYKDgsIGN1cnZlLT5nZXRWYWx1ZSgzLCBsYXllclNpemUpKTsKKyAgICBleHBl
Y3RUcmFuc2xhdGVYKDIsIGN1cnZlLT5nZXRWYWx1ZSgtMSkpOworICAgIGV4cGVjdFRyYW5zbGF0
ZVgoMiwgY3VydmUtPmdldFZhbHVlKDApKTsKKyAgICBleHBlY3RUcmFuc2xhdGVYKDMsIGN1cnZl
LT5nZXRWYWx1ZSgwLjUpKTsKKyAgICBleHBlY3RUcmFuc2xhdGVYKDQsIGN1cnZlLT5nZXRWYWx1
ZSgxKSk7CisgICAgZXhwZWN0VHJhbnNsYXRlWCg2LCBjdXJ2ZS0+Z2V0VmFsdWUoMS41KSk7Cisg
ICAgZXhwZWN0VHJhbnNsYXRlWCg4LCBjdXJ2ZS0+Z2V0VmFsdWUoMikpOworICAgIGV4cGVjdFRy
YW5zbGF0ZVgoOCwgY3VydmUtPmdldFZhbHVlKDMpKTsKIH0KIAogLy8gVGVzdHMgdGhhdCBhIHRy
YW5zZm9ybSBhbmltYXRpb24gd2l0aCBtdWx0aXBsZSBrZXlzIGF0IGEgZ2l2ZW4gdGltZSB3b3Jr
cyBzYW5lbHkuCkBAIC0xNzEsMzQgKzE3MCwzMiBAQCBURVNUKENDS2V5ZnJhbWVkQW5pbWF0aW9u
Q3VydmVUZXN0LCBSZXBlYXRlZFRyYW5zZm9ybUtleVRpbWVzKQogewogICAgIE93blB0cjxDQ0tl
eWZyYW1lZFRyYW5zZm9ybUFuaW1hdGlvbkN1cnZlPiBjdXJ2ZShDQ0tleWZyYW1lZFRyYW5zZm9y
bUFuaW1hdGlvbkN1cnZlOjpjcmVhdGUoKSk7CiAgICAgLy8gQSBzdGVwIGZ1bmN0aW9uLgotICAg
IFRyYW5zZm9ybU9wZXJhdGlvbnMgb3BlcmF0aW9uczE7Ci0gICAgb3BlcmF0aW9uczEub3BlcmF0
aW9ucygpLmFwcGVuZChUcmFuc2xhdGVUcmFuc2Zvcm1PcGVyYXRpb246OmNyZWF0ZShMZW5ndGgo
NCwgRml4ZWQpLCBMZW5ndGgoMCwgRml4ZWQpLCBUcmFuc2Zvcm1PcGVyYXRpb246OlRSQU5TTEFU
RV9YKSk7Ci0gICAgVHJhbnNmb3JtT3BlcmF0aW9ucyBvcGVyYXRpb25zMjsKLSAgICBvcGVyYXRp
b25zMi5vcGVyYXRpb25zKCkuYXBwZW5kKFRyYW5zbGF0ZVRyYW5zZm9ybU9wZXJhdGlvbjo6Y3Jl
YXRlKExlbmd0aCg0LCBGaXhlZCksIExlbmd0aCgwLCBGaXhlZCksIFRyYW5zZm9ybU9wZXJhdGlv
bjo6VFJBTlNMQVRFX1gpKTsKLSAgICBUcmFuc2Zvcm1PcGVyYXRpb25zIG9wZXJhdGlvbnMzOwot
ICAgIG9wZXJhdGlvbnMzLm9wZXJhdGlvbnMoKS5hcHBlbmQoVHJhbnNsYXRlVHJhbnNmb3JtT3Bl
cmF0aW9uOjpjcmVhdGUoTGVuZ3RoKDYsIEZpeGVkKSwgTGVuZ3RoKDAsIEZpeGVkKSwgVHJhbnNm
b3JtT3BlcmF0aW9uOjpUUkFOU0xBVEVfWCkpOwotICAgIFRyYW5zZm9ybU9wZXJhdGlvbnMgb3Bl
cmF0aW9uczQ7Ci0gICAgb3BlcmF0aW9uczQub3BlcmF0aW9ucygpLmFwcGVuZChUcmFuc2xhdGVU
cmFuc2Zvcm1PcGVyYXRpb246OmNyZWF0ZShMZW5ndGgoNiwgRml4ZWQpLCBMZW5ndGgoMCwgRml4
ZWQpLCBUcmFuc2Zvcm1PcGVyYXRpb246OlRSQU5TTEFURV9YKSk7CisgICAgV2ViS2l0OjpXZWJU
cmFuc2Zvcm1PcGVyYXRpb25zIG9wZXJhdGlvbnMxOworICAgIG9wZXJhdGlvbnMxLmFwcGVuZFRy
YW5zbGF0ZSg0LCAwLCAwKTsKKyAgICBXZWJLaXQ6OldlYlRyYW5zZm9ybU9wZXJhdGlvbnMgb3Bl
cmF0aW9uczI7CisgICAgb3BlcmF0aW9uczIuYXBwZW5kVHJhbnNsYXRlKDQsIDAsIDApOworICAg
IFdlYktpdDo6V2ViVHJhbnNmb3JtT3BlcmF0aW9ucyBvcGVyYXRpb25zMzsKKyAgICBvcGVyYXRp
b25zMy5hcHBlbmRUcmFuc2xhdGUoNiwgMCwgMCk7CisgICAgV2ViS2l0OjpXZWJUcmFuc2Zvcm1P
cGVyYXRpb25zIG9wZXJhdGlvbnM0OworICAgIG9wZXJhdGlvbnM0LmFwcGVuZFRyYW5zbGF0ZSg2
LCAwLCAwKTsKICAgICBjdXJ2ZS0+YWRkS2V5ZnJhbWUoQ0NUcmFuc2Zvcm1LZXlmcmFtZTo6Y3Jl
YXRlKDAsIG9wZXJhdGlvbnMxLCBudWxscHRyKSk7CiAgICAgY3VydmUtPmFkZEtleWZyYW1lKEND
VHJhbnNmb3JtS2V5ZnJhbWU6OmNyZWF0ZSgxLCBvcGVyYXRpb25zMiwgbnVsbHB0cikpOwogICAg
IGN1cnZlLT5hZGRLZXlmcmFtZShDQ1RyYW5zZm9ybUtleWZyYW1lOjpjcmVhdGUoMSwgb3BlcmF0
aW9uczMsIG51bGxwdHIpKTsKICAgICBjdXJ2ZS0+YWRkS2V5ZnJhbWUoQ0NUcmFuc2Zvcm1LZXlm
cmFtZTo6Y3JlYXRlKDIsIG9wZXJhdGlvbnM0LCBudWxscHRyKSk7CiAKLSAgICBJbnRTaXplIGxh
eWVyU2l6ZTsgLy8gaWdub3JlZAotCi0gICAgZXhwZWN0VHJhbnNsYXRlWCg0LCBjdXJ2ZS0+Z2V0
VmFsdWUoLTEsIGxheWVyU2l6ZSkpOwotICAgIGV4cGVjdFRyYW5zbGF0ZVgoNCwgY3VydmUtPmdl
dFZhbHVlKDAsIGxheWVyU2l6ZSkpOwotICAgIGV4cGVjdFRyYW5zbGF0ZVgoNCwgY3VydmUtPmdl
dFZhbHVlKDAuNSwgbGF5ZXJTaXplKSk7CisgICAgZXhwZWN0VHJhbnNsYXRlWCg0LCBjdXJ2ZS0+
Z2V0VmFsdWUoLTEpKTsKKyAgICBleHBlY3RUcmFuc2xhdGVYKDQsIGN1cnZlLT5nZXRWYWx1ZSgw
KSk7CisgICAgZXhwZWN0VHJhbnNsYXRlWCg0LCBjdXJ2ZS0+Z2V0VmFsdWUoMC41KSk7CiAKICAg
ICAvLyBUaGVyZSBpcyBhIGRpc2NvbnRpbnVpdHkgYXQgMS4gQW55IHZhbHVlIGJldHdlZW4gNCBh
bmQgNiBpcyB2YWxpZC4KLSAgICBUcmFuc2Zvcm1hdGlvbk1hdHJpeCB2YWx1ZSA9IGN1cnZlLT5n
ZXRWYWx1ZSgxLCBsYXllclNpemUpOworICAgIFRyYW5zZm9ybWF0aW9uTWF0cml4IHZhbHVlID0g
Y3VydmUtPmdldFZhbHVlKDEpOwogICAgIFRyYW5zZm9ybWF0aW9uTWF0cml4OjpEZWNvbXBvc2Vk
VHlwZSBkZWNvbXBvc2VkVHlwZTsKICAgICB2YWx1ZS5kZWNvbXBvc2UoZGVjb21wb3NlZFR5cGUp
OwogICAgIEVYUEVDVF9UUlVFKGRlY29tcG9zZWRUeXBlLnRyYW5zbGF0ZVggPj0gNCAmJiBkZWNv
bXBvc2VkVHlwZS50cmFuc2xhdGVYIDw9IDYpOwogCi0gICAgZXhwZWN0VHJhbnNsYXRlWCg2LCBj
dXJ2ZS0+Z2V0VmFsdWUoMS41LCBsYXllclNpemUpKTsKLSAgICBleHBlY3RUcmFuc2xhdGVYKDYs
IGN1cnZlLT5nZXRWYWx1ZSgyLCBsYXllclNpemUpKTsKLSAgICBleHBlY3RUcmFuc2xhdGVYKDYs
IGN1cnZlLT5nZXRWYWx1ZSgzLCBsYXllclNpemUpKTsKKyAgICBleHBlY3RUcmFuc2xhdGVYKDYs
IGN1cnZlLT5nZXRWYWx1ZSgxLjUpKTsKKyAgICBleHBlY3RUcmFuc2xhdGVYKDYsIGN1cnZlLT5n
ZXRWYWx1ZSgyKSk7CisgICAgZXhwZWN0VHJhbnNsYXRlWCg2LCBjdXJ2ZS0+Z2V0VmFsdWUoMykp
OwogfQogCiAvLyBUZXN0cyB0aGF0IHRoZSBrZXlmcmFtZXMgbWF5IGJlIGFkZGVkIG91dCBvZiBv
cmRlci4KZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJLaXQvY2hyb21pdW0vdGVzdHMvQ0NMYXllckFu
aW1hdGlvbkNvbnRyb2xsZXJUZXN0LmNwcCBiL1NvdXJjZS9XZWJLaXQvY2hyb21pdW0vdGVzdHMv
Q0NMYXllckFuaW1hdGlvbkNvbnRyb2xsZXJUZXN0LmNwcAppbmRleCA4MjcxOTRiYmM0MTUzNmYy
ZmFjMzQ5MWQzZDUxZTQ0ODhhMTE0MmY2Li4wMmFlNTA0NDlhNTcwMzc0NzU5YjViOThjMDVlZTBm
NDM4MzRjZDUxIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViS2l0L2Nocm9taXVtL3Rlc3RzL0NDTGF5
ZXJBbmltYXRpb25Db250cm9sbGVyVGVzdC5jcHAKKysrIGIvU291cmNlL1dlYktpdC9jaHJvbWl1
bS90ZXN0cy9DQ0xheWVyQW5pbWF0aW9uQ29udHJvbGxlclRlc3QuY3BwCkBAIC0yOSw3ICsyOSw2
IEBACiAjaW5jbHVkZSAiQ0NBbmltYXRpb25UZXN0Q29tbW9uLmgiCiAjaW5jbHVkZSAiR3JhcGhp
Y3NMYXllci5oIgogI2luY2x1ZGUgIkxlbmd0aC5oIgotI2luY2x1ZGUgIlRyYW5zbGF0ZVRyYW5z
Zm9ybU9wZXJhdGlvbi5oIgogI2luY2x1ZGUgImNjL0NDQWN0aXZlQW5pbWF0aW9uLmgiCiAjaW5j
bHVkZSAiY2MvQ0NBbmltYXRpb25DdXJ2ZS5oIgogCkBAIC00MiwyMDkgKzQxLDExIEBAIHVzaW5n
IG5hbWVzcGFjZSBXZWJLaXRUZXN0czsKIAogbmFtZXNwYWNlIHsKIAotdm9pZCBleHBlY3RUcmFu
c2xhdGVYKGRvdWJsZSB0cmFuc2xhdGVYLCBjb25zdCBUcmFuc2Zvcm1hdGlvbk1hdHJpeCYgbWF0
cml4KQotewotICAgIFRyYW5zZm9ybWF0aW9uTWF0cml4OjpEZWNvbXBvc2VkVHlwZSBkZWNvbXBv
c2VkVHlwZTsKLSAgICBtYXRyaXguZGVjb21wb3NlKGRlY29tcG9zZWRUeXBlKTsKLSAgICBFWFBF
Q1RfRkxPQVRfRVEodHJhbnNsYXRlWCwgZGVjb21wb3NlZFR5cGUudHJhbnNsYXRlWCk7Ci19Ci0K
IFBhc3NPd25QdHI8Q0NBY3RpdmVBbmltYXRpb24+IGNyZWF0ZUFjdGl2ZUFuaW1hdGlvbihQYXNz
T3duUHRyPENDQW5pbWF0aW9uQ3VydmU+IGN1cnZlLCBpbnQgaWQsIENDQWN0aXZlQW5pbWF0aW9u
OjpUYXJnZXRQcm9wZXJ0eSBwcm9wZXJ0eSkKIHsKICAgICByZXR1cm4gQ0NBY3RpdmVBbmltYXRp
b246OmNyZWF0ZShjdXJ2ZSwgMCwgaWQsIHByb3BlcnR5KTsKIH0KIAotVEVTVChDQ0xheWVyQW5p
bWF0aW9uQ29udHJvbGxlclRlc3QsIGNyZWF0ZU9wYWNpdHlBbmltYXRpb24pCi17Ci0gICAgRmFr
ZUxheWVyQW5pbWF0aW9uQ29udHJvbGxlckNsaWVudCBkdW1teTsKLSAgICBPd25QdHI8Q0NMYXll
ckFuaW1hdGlvbkNvbnRyb2xsZXI+IGNvbnRyb2xsZXIoQ0NMYXllckFuaW1hdGlvbkNvbnRyb2xs
ZXI6OmNyZWF0ZSgmZHVtbXkpKTsKLSAgICBjb25zdCBkb3VibGUgZHVyYXRpb24gPSAxOwotICAg
IFdlYkNvcmU6OktleWZyYW1lVmFsdWVMaXN0IHZhbHVlcyhBbmltYXRlZFByb3BlcnR5T3BhY2l0
eSk7Ci0gICAgdmFsdWVzLmluc2VydChuZXcgRmxvYXRBbmltYXRpb25WYWx1ZSgwLCAwKSk7Ci0g
ICAgdmFsdWVzLmluc2VydChuZXcgRmxvYXRBbmltYXRpb25WYWx1ZShkdXJhdGlvbiwgMSkpOwot
Ci0gICAgUmVmUHRyPEFuaW1hdGlvbj4gYW5pbWF0aW9uID0gQW5pbWF0aW9uOjpjcmVhdGUoKTsK
LSAgICBhbmltYXRpb24tPnNldER1cmF0aW9uKGR1cmF0aW9uKTsKLQotICAgIEludFNpemUgYm94
U2l6ZTsKLSAgICBjb250cm9sbGVyLT5hZGRBbmltYXRpb24odmFsdWVzLCBib3hTaXplLCBhbmlt
YXRpb24uZ2V0KCksIDAsIDAsIDApOwotCi0gICAgRVhQRUNUX1RSVUUoY29udHJvbGxlci0+aGFz
QWN0aXZlQW5pbWF0aW9uKCkpOwotCi0gICAgQ0NBY3RpdmVBbmltYXRpb24qIGFjdGl2ZUFuaW1h
dGlvbiA9IGNvbnRyb2xsZXItPmdldEFjdGl2ZUFuaW1hdGlvbigwLCBDQ0FjdGl2ZUFuaW1hdGlv
bjo6T3BhY2l0eSk7Ci0gICAgRVhQRUNUX1RSVUUoYWN0aXZlQW5pbWF0aW9uKTsKLQotICAgIEVY
UEVDVF9FUSgxLCBhY3RpdmVBbmltYXRpb24tPml0ZXJhdGlvbnMoKSk7Ci0gICAgRVhQRUNUX0VR
KENDQWN0aXZlQW5pbWF0aW9uOjpPcGFjaXR5LCBhY3RpdmVBbmltYXRpb24tPnRhcmdldFByb3Bl
cnR5KCkpOwotCi0gICAgRVhQRUNUX0VRKENDQW5pbWF0aW9uQ3VydmU6OkZsb2F0LCBhY3RpdmVB
bmltYXRpb24tPmN1cnZlKCktPnR5cGUoKSk7Ci0KLSAgICBjb25zdCBDQ0Zsb2F0QW5pbWF0aW9u
Q3VydmUqIGN1cnZlID0gYWN0aXZlQW5pbWF0aW9uLT5jdXJ2ZSgpLT50b0Zsb2F0QW5pbWF0aW9u
Q3VydmUoKTsKLSAgICBFWFBFQ1RfVFJVRShjdXJ2ZSk7Ci0KLSAgICBFWFBFQ1RfRVEoMCwgY3Vy
dmUtPmdldFZhbHVlKDApKTsKLSAgICBFWFBFQ1RfRVEoMSwgY3VydmUtPmdldFZhbHVlKGR1cmF0
aW9uKSk7Ci19Ci0KLVRFU1QoQ0NMYXllckFuaW1hdGlvbkNvbnRyb2xsZXJUZXN0LCBjcmVhdGVU
cmFuc2Zvcm1BbmltYXRpb24pCi17Ci0gICAgRmFrZUxheWVyQW5pbWF0aW9uQ29udHJvbGxlckNs
aWVudCBkdW1teTsKLSAgICBPd25QdHI8Q0NMYXllckFuaW1hdGlvbkNvbnRyb2xsZXI+IGNvbnRy
b2xsZXIoQ0NMYXllckFuaW1hdGlvbkNvbnRyb2xsZXI6OmNyZWF0ZSgmZHVtbXkpKTsKLSAgICBj
b25zdCBkb3VibGUgZHVyYXRpb24gPSAxOwotICAgIFdlYkNvcmU6OktleWZyYW1lVmFsdWVMaXN0
IHZhbHVlcyhBbmltYXRlZFByb3BlcnR5V2Via2l0VHJhbnNmb3JtKTsKLQotICAgIFRyYW5zZm9y
bU9wZXJhdGlvbnMgb3BlcmF0aW9uczE7Ci0gICAgb3BlcmF0aW9uczEub3BlcmF0aW9ucygpLmFw
cGVuZChUcmFuc2xhdGVUcmFuc2Zvcm1PcGVyYXRpb246OmNyZWF0ZShMZW5ndGgoMiwgRml4ZWQp
LCBMZW5ndGgoMCwgRml4ZWQpLCBUcmFuc2Zvcm1PcGVyYXRpb246OlRSQU5TTEFURV9YKSk7Ci0g
ICAgdmFsdWVzLmluc2VydChuZXcgVHJhbnNmb3JtQW5pbWF0aW9uVmFsdWUoMCwgJm9wZXJhdGlv
bnMxKSk7Ci0KLSAgICBUcmFuc2Zvcm1PcGVyYXRpb25zIG9wZXJhdGlvbnMyOwotICAgIG9wZXJh
dGlvbnMyLm9wZXJhdGlvbnMoKS5hcHBlbmQoVHJhbnNsYXRlVHJhbnNmb3JtT3BlcmF0aW9uOjpj
cmVhdGUoTGVuZ3RoKDQsIEZpeGVkKSwgTGVuZ3RoKDAsIEZpeGVkKSwgVHJhbnNmb3JtT3BlcmF0
aW9uOjpUUkFOU0xBVEVfWCkpOwotICAgIHZhbHVlcy5pbnNlcnQobmV3IFRyYW5zZm9ybUFuaW1h
dGlvblZhbHVlKGR1cmF0aW9uLCAmb3BlcmF0aW9uczIpKTsKLQotICAgIFJlZlB0cjxBbmltYXRp
b24+IGFuaW1hdGlvbiA9IEFuaW1hdGlvbjo6Y3JlYXRlKCk7Ci0gICAgYW5pbWF0aW9uLT5zZXRE
dXJhdGlvbihkdXJhdGlvbik7Ci0KLSAgICBJbnRTaXplIGJveFNpemU7Ci0gICAgY29udHJvbGxl
ci0+YWRkQW5pbWF0aW9uKHZhbHVlcywgYm94U2l6ZSwgYW5pbWF0aW9uLmdldCgpLCAwLCAwLCAw
KTsKLQotICAgIEVYUEVDVF9UUlVFKGNvbnRyb2xsZXItPmhhc0FjdGl2ZUFuaW1hdGlvbigpKTsK
LQotICAgIENDQWN0aXZlQW5pbWF0aW9uKiBhY3RpdmVBbmltYXRpb24gPSBjb250cm9sbGVyLT5n
ZXRBY3RpdmVBbmltYXRpb24oMCwgQ0NBY3RpdmVBbmltYXRpb246OlRyYW5zZm9ybSk7Ci0gICAg
RVhQRUNUX1RSVUUoYWN0aXZlQW5pbWF0aW9uKTsKLQotICAgIEVYUEVDVF9FUSgxLCBhY3RpdmVB
bmltYXRpb24tPml0ZXJhdGlvbnMoKSk7Ci0gICAgRVhQRUNUX0VRKENDQWN0aXZlQW5pbWF0aW9u
OjpUcmFuc2Zvcm0sIGFjdGl2ZUFuaW1hdGlvbi0+dGFyZ2V0UHJvcGVydHkoKSk7Ci0KLSAgICBF
WFBFQ1RfRVEoQ0NBbmltYXRpb25DdXJ2ZTo6VHJhbnNmb3JtLCBhY3RpdmVBbmltYXRpb24tPmN1
cnZlKCktPnR5cGUoKSk7Ci0KLSAgICBjb25zdCBDQ1RyYW5zZm9ybUFuaW1hdGlvbkN1cnZlKiBj
dXJ2ZSA9IGFjdGl2ZUFuaW1hdGlvbi0+Y3VydmUoKS0+dG9UcmFuc2Zvcm1BbmltYXRpb25DdXJ2
ZSgpOwotICAgIEVYUEVDVF9UUlVFKGN1cnZlKTsKLQotICAgIGV4cGVjdFRyYW5zbGF0ZVgoMiwg
Y3VydmUtPmdldFZhbHVlKDAsIGJveFNpemUpKTsKLSAgICBleHBlY3RUcmFuc2xhdGVYKDQsIGN1
cnZlLT5nZXRWYWx1ZShkdXJhdGlvbiwgYm94U2l6ZSkpOwotfQotCi1URVNUKENDTGF5ZXJBbmlt
YXRpb25Db250cm9sbGVyVGVzdCwgY3JlYXRlUmV2ZXJzZWRBbmltYXRpb24pCi17Ci0gICAgRmFr
ZUxheWVyQW5pbWF0aW9uQ29udHJvbGxlckNsaWVudCBkdW1teTsKLSAgICBPd25QdHI8Q0NMYXll
ckFuaW1hdGlvbkNvbnRyb2xsZXI+IGNvbnRyb2xsZXIoQ0NMYXllckFuaW1hdGlvbkNvbnRyb2xs
ZXI6OmNyZWF0ZSgmZHVtbXkpKTsKLSAgICBjb25zdCBkb3VibGUgZHVyYXRpb24gPSAxOwotICAg
IFdlYkNvcmU6OktleWZyYW1lVmFsdWVMaXN0IHZhbHVlcyhBbmltYXRlZFByb3BlcnR5V2Via2l0
VHJhbnNmb3JtKTsKLQotICAgIFRyYW5zZm9ybU9wZXJhdGlvbnMgb3BlcmF0aW9uczE7Ci0gICAg
b3BlcmF0aW9uczEub3BlcmF0aW9ucygpLmFwcGVuZChUcmFuc2xhdGVUcmFuc2Zvcm1PcGVyYXRp
b246OmNyZWF0ZShMZW5ndGgoMiwgRml4ZWQpLCBMZW5ndGgoMCwgRml4ZWQpLCBUcmFuc2Zvcm1P
cGVyYXRpb246OlRSQU5TTEFURV9YKSk7Ci0gICAgdmFsdWVzLmluc2VydChuZXcgVHJhbnNmb3Jt
QW5pbWF0aW9uVmFsdWUoMCwgJm9wZXJhdGlvbnMxKSk7Ci0KLSAgICBUcmFuc2Zvcm1PcGVyYXRp
b25zIG9wZXJhdGlvbnMyOwotICAgIG9wZXJhdGlvbnMyLm9wZXJhdGlvbnMoKS5hcHBlbmQoVHJh
bnNsYXRlVHJhbnNmb3JtT3BlcmF0aW9uOjpjcmVhdGUoTGVuZ3RoKDQsIEZpeGVkKSwgTGVuZ3Ro
KDAsIEZpeGVkKSwgVHJhbnNmb3JtT3BlcmF0aW9uOjpUUkFOU0xBVEVfWCkpOwotICAgIHZhbHVl
cy5pbnNlcnQobmV3IFRyYW5zZm9ybUFuaW1hdGlvblZhbHVlKGR1cmF0aW9uLCAmb3BlcmF0aW9u
czIpKTsKLQotICAgIFJlZlB0cjxBbmltYXRpb24+IGFuaW1hdGlvbiA9IEFuaW1hdGlvbjo6Y3Jl
YXRlKCk7Ci0gICAgYW5pbWF0aW9uLT5zZXREdXJhdGlvbihkdXJhdGlvbik7Ci0gICAgYW5pbWF0
aW9uLT5zZXREaXJlY3Rpb24oQW5pbWF0aW9uOjpBbmltYXRpb25EaXJlY3Rpb25SZXZlcnNlKTsK
LQotICAgIEludFNpemUgYm94U2l6ZTsKLSAgICBjb250cm9sbGVyLT5hZGRBbmltYXRpb24odmFs
dWVzLCBib3hTaXplLCBhbmltYXRpb24uZ2V0KCksIDAsIDAsIDApOwotCi0gICAgRVhQRUNUX1RS
VUUoY29udHJvbGxlci0+aGFzQWN0aXZlQW5pbWF0aW9uKCkpOwotCi0gICAgQ0NBY3RpdmVBbmlt
YXRpb24qIGFjdGl2ZUFuaW1hdGlvbiA9IGNvbnRyb2xsZXItPmdldEFjdGl2ZUFuaW1hdGlvbigw
LCBDQ0FjdGl2ZUFuaW1hdGlvbjo6VHJhbnNmb3JtKTsKLSAgICBFWFBFQ1RfVFJVRShhY3RpdmVB
bmltYXRpb24pOwotCi0gICAgRVhQRUNUX0VRKDEsIGFjdGl2ZUFuaW1hdGlvbi0+aXRlcmF0aW9u
cygpKTsKLSAgICBFWFBFQ1RfRVEoQ0NBY3RpdmVBbmltYXRpb246OlRyYW5zZm9ybSwgYWN0aXZl
QW5pbWF0aW9uLT50YXJnZXRQcm9wZXJ0eSgpKTsKLQotICAgIEVYUEVDVF9FUShDQ0FuaW1hdGlv
bkN1cnZlOjpUcmFuc2Zvcm0sIGFjdGl2ZUFuaW1hdGlvbi0+Y3VydmUoKS0+dHlwZSgpKTsKLQot
ICAgIGNvbnN0IENDVHJhbnNmb3JtQW5pbWF0aW9uQ3VydmUqIGN1cnZlID0gYWN0aXZlQW5pbWF0
aW9uLT5jdXJ2ZSgpLT50b1RyYW5zZm9ybUFuaW1hdGlvbkN1cnZlKCk7Ci0gICAgRVhQRUNUX1RS
VUUoY3VydmUpOwotCi0gICAgZXhwZWN0VHJhbnNsYXRlWCg0LCBjdXJ2ZS0+Z2V0VmFsdWUoMCwg
Ym94U2l6ZSkpOwotICAgIGV4cGVjdFRyYW5zbGF0ZVgoMiwgY3VydmUtPmdldFZhbHVlKGR1cmF0
aW9uLCBib3hTaXplKSk7Ci19Ci0KLVRFU1QoQ0NMYXllckFuaW1hdGlvbkNvbnRyb2xsZXJUZXN0
LCBjcmVhdGVBbHRlcm5hdGluZ0FuaW1hdGlvbikKLXsKLSAgICBGYWtlTGF5ZXJBbmltYXRpb25D
b250cm9sbGVyQ2xpZW50IGR1bW15OwotICAgIE93blB0cjxDQ0xheWVyQW5pbWF0aW9uQ29udHJv
bGxlcj4gY29udHJvbGxlcihDQ0xheWVyQW5pbWF0aW9uQ29udHJvbGxlcjo6Y3JlYXRlKCZkdW1t
eSkpOwotICAgIGNvbnN0IGRvdWJsZSBkdXJhdGlvbiA9IDE7Ci0gICAgV2ViQ29yZTo6S2V5ZnJh
bWVWYWx1ZUxpc3QgdmFsdWVzKEFuaW1hdGVkUHJvcGVydHlXZWJraXRUcmFuc2Zvcm0pOwotCi0g
ICAgVHJhbnNmb3JtT3BlcmF0aW9ucyBvcGVyYXRpb25zMTsKLSAgICBvcGVyYXRpb25zMS5vcGVy
YXRpb25zKCkuYXBwZW5kKFRyYW5zbGF0ZVRyYW5zZm9ybU9wZXJhdGlvbjo6Y3JlYXRlKExlbmd0
aCgyLCBGaXhlZCksIExlbmd0aCgwLCBGaXhlZCksIFRyYW5zZm9ybU9wZXJhdGlvbjo6VFJBTlNM
QVRFX1gpKTsKLSAgICB2YWx1ZXMuaW5zZXJ0KG5ldyBUcmFuc2Zvcm1BbmltYXRpb25WYWx1ZSgw
LCAmb3BlcmF0aW9uczEpKTsKLQotICAgIFRyYW5zZm9ybU9wZXJhdGlvbnMgb3BlcmF0aW9uczI7
Ci0gICAgb3BlcmF0aW9uczIub3BlcmF0aW9ucygpLmFwcGVuZChUcmFuc2xhdGVUcmFuc2Zvcm1P
cGVyYXRpb246OmNyZWF0ZShMZW5ndGgoNCwgRml4ZWQpLCBMZW5ndGgoMCwgRml4ZWQpLCBUcmFu
c2Zvcm1PcGVyYXRpb246OlRSQU5TTEFURV9YKSk7Ci0gICAgdmFsdWVzLmluc2VydChuZXcgVHJh
bnNmb3JtQW5pbWF0aW9uVmFsdWUoZHVyYXRpb24sICZvcGVyYXRpb25zMikpOwotCi0gICAgUmVm
UHRyPEFuaW1hdGlvbj4gYW5pbWF0aW9uID0gQW5pbWF0aW9uOjpjcmVhdGUoKTsKLSAgICBhbmlt
YXRpb24tPnNldER1cmF0aW9uKGR1cmF0aW9uKTsKLSAgICBhbmltYXRpb24tPnNldERpcmVjdGlv
bihBbmltYXRpb246OkFuaW1hdGlvbkRpcmVjdGlvbkFsdGVybmF0ZSk7Ci0gICAgYW5pbWF0aW9u
LT5zZXRJdGVyYXRpb25Db3VudCgyKTsKLQotICAgIEludFNpemUgYm94U2l6ZTsKLSAgICBjb250
cm9sbGVyLT5hZGRBbmltYXRpb24odmFsdWVzLCBib3hTaXplLCBhbmltYXRpb24uZ2V0KCksIDAs
IDAsIDApOwotCi0gICAgRVhQRUNUX1RSVUUoY29udHJvbGxlci0+aGFzQWN0aXZlQW5pbWF0aW9u
KCkpOwotCi0gICAgQ0NBY3RpdmVBbmltYXRpb24qIGFjdGl2ZUFuaW1hdGlvbiA9IGNvbnRyb2xs
ZXItPmdldEFjdGl2ZUFuaW1hdGlvbigwLCBDQ0FjdGl2ZUFuaW1hdGlvbjo6VHJhbnNmb3JtKTsK
LSAgICBFWFBFQ1RfVFJVRShhY3RpdmVBbmltYXRpb24pOwotICAgIEVYUEVDVF9UUlVFKGFjdGl2
ZUFuaW1hdGlvbi0+YWx0ZXJuYXRlc0RpcmVjdGlvbigpKTsKLQotICAgIEVYUEVDVF9FUSgyLCBh
Y3RpdmVBbmltYXRpb24tPml0ZXJhdGlvbnMoKSk7Ci0gICAgRVhQRUNUX0VRKENDQWN0aXZlQW5p
bWF0aW9uOjpUcmFuc2Zvcm0sIGFjdGl2ZUFuaW1hdGlvbi0+dGFyZ2V0UHJvcGVydHkoKSk7Ci0K
LSAgICBFWFBFQ1RfRVEoQ0NBbmltYXRpb25DdXJ2ZTo6VHJhbnNmb3JtLCBhY3RpdmVBbmltYXRp
b24tPmN1cnZlKCktPnR5cGUoKSk7Ci0KLSAgICBjb25zdCBDQ1RyYW5zZm9ybUFuaW1hdGlvbkN1
cnZlKiBjdXJ2ZSA9IGFjdGl2ZUFuaW1hdGlvbi0+Y3VydmUoKS0+dG9UcmFuc2Zvcm1BbmltYXRp
b25DdXJ2ZSgpOwotICAgIEVYUEVDVF9UUlVFKGN1cnZlKTsKLQotICAgIGV4cGVjdFRyYW5zbGF0
ZVgoMiwgY3VydmUtPmdldFZhbHVlKDAsIGJveFNpemUpKTsKLSAgICBleHBlY3RUcmFuc2xhdGVY
KDQsIGN1cnZlLT5nZXRWYWx1ZShkdXJhdGlvbiwgYm94U2l6ZSkpOwotfQotCi1URVNUKENDTGF5
ZXJBbmltYXRpb25Db250cm9sbGVyVGVzdCwgY3JlYXRlUmV2ZXJzZWRBbHRlcm5hdGluZ0FuaW1h
dGlvbikKLXsKLSAgICBGYWtlTGF5ZXJBbmltYXRpb25Db250cm9sbGVyQ2xpZW50IGR1bW15Owot
ICAgIE93blB0cjxDQ0xheWVyQW5pbWF0aW9uQ29udHJvbGxlcj4gY29udHJvbGxlcihDQ0xheWVy
QW5pbWF0aW9uQ29udHJvbGxlcjo6Y3JlYXRlKCZkdW1teSkpOwotICAgIGNvbnN0IGRvdWJsZSBk
dXJhdGlvbiA9IDE7Ci0gICAgV2ViQ29yZTo6S2V5ZnJhbWVWYWx1ZUxpc3QgdmFsdWVzKEFuaW1h
dGVkUHJvcGVydHlXZWJraXRUcmFuc2Zvcm0pOwotCi0gICAgVHJhbnNmb3JtT3BlcmF0aW9ucyBv
cGVyYXRpb25zMTsKLSAgICBvcGVyYXRpb25zMS5vcGVyYXRpb25zKCkuYXBwZW5kKFRyYW5zbGF0
ZVRyYW5zZm9ybU9wZXJhdGlvbjo6Y3JlYXRlKExlbmd0aCgyLCBGaXhlZCksIExlbmd0aCgwLCBG
aXhlZCksIFRyYW5zZm9ybU9wZXJhdGlvbjo6VFJBTlNMQVRFX1gpKTsKLSAgICB2YWx1ZXMuaW5z
ZXJ0KG5ldyBUcmFuc2Zvcm1BbmltYXRpb25WYWx1ZSgwLCAmb3BlcmF0aW9uczEpKTsKLQotICAg
IFRyYW5zZm9ybU9wZXJhdGlvbnMgb3BlcmF0aW9uczI7Ci0gICAgb3BlcmF0aW9uczIub3BlcmF0
aW9ucygpLmFwcGVuZChUcmFuc2xhdGVUcmFuc2Zvcm1PcGVyYXRpb246OmNyZWF0ZShMZW5ndGgo
NCwgRml4ZWQpLCBMZW5ndGgoMCwgRml4ZWQpLCBUcmFuc2Zvcm1PcGVyYXRpb246OlRSQU5TTEFU
RV9YKSk7Ci0gICAgdmFsdWVzLmluc2VydChuZXcgVHJhbnNmb3JtQW5pbWF0aW9uVmFsdWUoZHVy
YXRpb24sICZvcGVyYXRpb25zMikpOwotCi0gICAgUmVmUHRyPEFuaW1hdGlvbj4gYW5pbWF0aW9u
ID0gQW5pbWF0aW9uOjpjcmVhdGUoKTsKLSAgICBhbmltYXRpb24tPnNldER1cmF0aW9uKGR1cmF0
aW9uKTsKLSAgICBhbmltYXRpb24tPnNldERpcmVjdGlvbihBbmltYXRpb246OkFuaW1hdGlvbkRp
cmVjdGlvbkFsdGVybmF0ZVJldmVyc2UpOwotICAgIGFuaW1hdGlvbi0+c2V0SXRlcmF0aW9uQ291
bnQoMik7Ci0KLSAgICBJbnRTaXplIGJveFNpemU7Ci0gICAgY29udHJvbGxlci0+YWRkQW5pbWF0
aW9uKHZhbHVlcywgYm94U2l6ZSwgYW5pbWF0aW9uLmdldCgpLCAwLCAwLCAwKTsKLQotICAgIEVY
UEVDVF9UUlVFKGNvbnRyb2xsZXItPmhhc0FjdGl2ZUFuaW1hdGlvbigpKTsKLQotICAgIENDQWN0
aXZlQW5pbWF0aW9uKiBhY3RpdmVBbmltYXRpb24gPSBjb250cm9sbGVyLT5nZXRBY3RpdmVBbmlt
YXRpb24oMCwgQ0NBY3RpdmVBbmltYXRpb246OlRyYW5zZm9ybSk7Ci0gICAgRVhQRUNUX1RSVUUo
YWN0aXZlQW5pbWF0aW9uKTsKLSAgICBFWFBFQ1RfVFJVRShhY3RpdmVBbmltYXRpb24tPmFsdGVy
bmF0ZXNEaXJlY3Rpb24oKSk7Ci0KLSAgICBFWFBFQ1RfRVEoMiwgYWN0aXZlQW5pbWF0aW9uLT5p
dGVyYXRpb25zKCkpOwotICAgIEVYUEVDVF9FUShDQ0FjdGl2ZUFuaW1hdGlvbjo6VHJhbnNmb3Jt
LCBhY3RpdmVBbmltYXRpb24tPnRhcmdldFByb3BlcnR5KCkpOwotCi0gICAgRVhQRUNUX0VRKEND
QW5pbWF0aW9uQ3VydmU6OlRyYW5zZm9ybSwgYWN0aXZlQW5pbWF0aW9uLT5jdXJ2ZSgpLT50eXBl
KCkpOwotCi0gICAgY29uc3QgQ0NUcmFuc2Zvcm1BbmltYXRpb25DdXJ2ZSogY3VydmUgPSBhY3Rp
dmVBbmltYXRpb24tPmN1cnZlKCktPnRvVHJhbnNmb3JtQW5pbWF0aW9uQ3VydmUoKTsKLSAgICBF
WFBFQ1RfVFJVRShjdXJ2ZSk7Ci0KLSAgICBleHBlY3RUcmFuc2xhdGVYKDQsIGN1cnZlLT5nZXRW
YWx1ZSgwLCBib3hTaXplKSk7Ci0gICAgZXhwZWN0VHJhbnNsYXRlWCgyLCBjdXJ2ZS0+Z2V0VmFs
dWUoZHVyYXRpb24sIGJveFNpemUpKTsKLX0KLQogVEVTVChDQ0xheWVyQW5pbWF0aW9uQ29udHJv
bGxlclRlc3QsIHN5bmNOZXdBbmltYXRpb24pCiB7CiAgICAgRmFrZUxheWVyQW5pbWF0aW9uQ29u
dHJvbGxlckNsaWVudCBkdW1teUltcGw7CkBAIC0zMzMsNyArMTM0LDYgQEAgVEVTVChDQ0xheWVy
QW5pbWF0aW9uQ29udHJvbGxlclRlc3QsIHN5bmNQYXVzZUFuZFJlc3VtZSkKICAgICBFWFBFQ1Rf
RVEoQ0NBY3RpdmVBbmltYXRpb246OlJ1bm5pbmcsIGNvbnRyb2xsZXJJbXBsLT5nZXRBY3RpdmVB
bmltYXRpb24oMCwgQ0NBY3RpdmVBbmltYXRpb246Ok9wYWNpdHkpLT5ydW5TdGF0ZSgpKTsKIH0K
IAotCiBURVNUKENDTGF5ZXJBbmltYXRpb25Db250cm9sbGVyVGVzdCwgZG9Ob3RTeW5jRmluaXNo
ZWRBbmltYXRpb24pCiB7CiAgICAgRmFrZUxheWVyQW5pbWF0aW9uQ29udHJvbGxlckNsaWVudCBk
dW1teUltcGw7CkBAIC0zNzUsNyArMTc1LDcgQEAgVEVTVChDQ0xheWVyQW5pbWF0aW9uQ29udHJv
bGxlclRlc3QsIFRyaXZpYWxUcmFuc2l0aW9uKQogCiAgICAgT3duUHRyPENDQWN0aXZlQW5pbWF0
aW9uPiB0b0FkZChjcmVhdGVBY3RpdmVBbmltYXRpb24oYWRvcHRQdHIobmV3IEZha2VGbG9hdFRy
YW5zaXRpb24oMSwgMCwgMSkpLCAxLCBDQ0FjdGl2ZUFuaW1hdGlvbjo6T3BhY2l0eSkpOwogCi0g
ICAgY29udHJvbGxlci0+YWRkKHRvQWRkLnJlbGVhc2UoKSk7CisgICAgY29udHJvbGxlci0+YWRk
QW5pbWF0aW9uKHRvQWRkLnJlbGVhc2UoKSk7CiAgICAgY29udHJvbGxlci0+YW5pbWF0ZSgwLCBl
dmVudHMuZ2V0KCkpOwogICAgIEVYUEVDVF9UUlVFKGNvbnRyb2xsZXItPmhhc0FjdGl2ZUFuaW1h
dGlvbigpKTsKICAgICBFWFBFQ1RfRVEoMCwgZHVtbXkub3BhY2l0eSgpKTsKQEAgLTM5Niw3ICsx
OTYsNyBAQCBURVNUKENDTGF5ZXJBbmltYXRpb25Db250cm9sbGVyVGVzdCwgQW5pbWF0aW9uc1dh
aXRpbmdGb3JTdGFydFRpbWVEb05vdEZpbmlzaElmVAogICAgIHRvQWRkLT5zZXROZWVkc1N5bmNo
cm9uaXplZFN0YXJ0VGltZSh0cnVlKTsKIAogICAgIC8vIFdlIHNob3VsZCBwYXVzZSBhdCB0aGUg
Zmlyc3Qga2V5ZnJhbWUgaW5kZWZpbml0ZWx5IHdhaXRpbmcgZm9yIHRoYXQgYW5pbWF0aW9uIHRv
IHN0YXJ0LgotICAgIGNvbnRyb2xsZXItPmFkZCh0b0FkZC5yZWxlYXNlKCkpOworICAgIGNvbnRy
b2xsZXItPmFkZEFuaW1hdGlvbih0b0FkZC5yZWxlYXNlKCkpOwogICAgIGNvbnRyb2xsZXItPmFu
aW1hdGUoMCwgZXZlbnRzLmdldCgpKTsKICAgICBFWFBFQ1RfVFJVRShjb250cm9sbGVyLT5oYXNB
Y3RpdmVBbmltYXRpb24oKSk7CiAgICAgRVhQRUNUX0VRKDAsIGR1bW15Lm9wYWNpdHkoKSk7CkBA
IC00MjIsOCArMjIyLDggQEAgVEVTVChDQ0xheWVyQW5pbWF0aW9uQ29udHJvbGxlclRlc3QsIFRy
aXZpYWxRdWV1aW5nKQogICAgIE93blB0cjxDQ0xheWVyQW5pbWF0aW9uQ29udHJvbGxlcj4gY29u
dHJvbGxlcigKICAgICAgICAgQ0NMYXllckFuaW1hdGlvbkNvbnRyb2xsZXI6OmNyZWF0ZSgmZHVt
bXkpKTsKIAotICAgIGNvbnRyb2xsZXItPmFkZChjcmVhdGVBY3RpdmVBbmltYXRpb24oYWRvcHRQ
dHIobmV3IEZha2VGbG9hdFRyYW5zaXRpb24oMSwgMCwgMSkpLCAxLCBDQ0FjdGl2ZUFuaW1hdGlv
bjo6T3BhY2l0eSkpOwotICAgIGNvbnRyb2xsZXItPmFkZChjcmVhdGVBY3RpdmVBbmltYXRpb24o
YWRvcHRQdHIobmV3IEZha2VGbG9hdFRyYW5zaXRpb24oMSwgMSwgMC41KSksIDIsIENDQWN0aXZl
QW5pbWF0aW9uOjpPcGFjaXR5KSk7CisgICAgY29udHJvbGxlci0+YWRkQW5pbWF0aW9uKGNyZWF0
ZUFjdGl2ZUFuaW1hdGlvbihhZG9wdFB0cihuZXcgRmFrZUZsb2F0VHJhbnNpdGlvbigxLCAwLCAx
KSksIDEsIENDQWN0aXZlQW5pbWF0aW9uOjpPcGFjaXR5KSk7CisgICAgY29udHJvbGxlci0+YWRk
QW5pbWF0aW9uKGNyZWF0ZUFjdGl2ZUFuaW1hdGlvbihhZG9wdFB0cihuZXcgRmFrZUZsb2F0VHJh
bnNpdGlvbigxLCAxLCAwLjUpKSwgMiwgQ0NBY3RpdmVBbmltYXRpb246Ok9wYWNpdHkpKTsKIAog
ICAgIGNvbnRyb2xsZXItPmFuaW1hdGUoMCwgZXZlbnRzLmdldCgpKTsKICAgICBFWFBFQ1RfVFJV
RShjb250cm9sbGVyLT5oYXNBY3RpdmVBbmltYXRpb24oKSk7CkBAIC00NDMsMTQgKzI0MywxNCBA
QCBURVNUKENDTGF5ZXJBbmltYXRpb25Db250cm9sbGVyVGVzdCwgSW50ZXJydXB0KQogICAgIEZh
a2VMYXllckFuaW1hdGlvbkNvbnRyb2xsZXJDbGllbnQgZHVtbXk7CiAgICAgT3duUHRyPENDTGF5
ZXJBbmltYXRpb25Db250cm9sbGVyPiBjb250cm9sbGVyKAogICAgICAgICBDQ0xheWVyQW5pbWF0
aW9uQ29udHJvbGxlcjo6Y3JlYXRlKCZkdW1teSkpOwotICAgIGNvbnRyb2xsZXItPmFkZChjcmVh
dGVBY3RpdmVBbmltYXRpb24oYWRvcHRQdHIobmV3IEZha2VGbG9hdFRyYW5zaXRpb24oMSwgMCwg
MSkpLCAxLCBDQ0FjdGl2ZUFuaW1hdGlvbjo6T3BhY2l0eSkpOworICAgIGNvbnRyb2xsZXItPmFk
ZEFuaW1hdGlvbihjcmVhdGVBY3RpdmVBbmltYXRpb24oYWRvcHRQdHIobmV3IEZha2VGbG9hdFRy
YW5zaXRpb24oMSwgMCwgMSkpLCAxLCBDQ0FjdGl2ZUFuaW1hdGlvbjo6T3BhY2l0eSkpOwogICAg
IGNvbnRyb2xsZXItPmFuaW1hdGUoMCwgZXZlbnRzLmdldCgpKTsKICAgICBFWFBFQ1RfVFJVRShj
b250cm9sbGVyLT5oYXNBY3RpdmVBbmltYXRpb24oKSk7CiAgICAgRVhQRUNUX0VRKDAsIGR1bW15
Lm9wYWNpdHkoKSk7CiAKICAgICBPd25QdHI8Q0NBY3RpdmVBbmltYXRpb24+IHRvQWRkKGNyZWF0
ZUFjdGl2ZUFuaW1hdGlvbihhZG9wdFB0cihuZXcgRmFrZUZsb2F0VHJhbnNpdGlvbigxLCAxLCAw
LjUpKSwgMiwgQ0NBY3RpdmVBbmltYXRpb246Ok9wYWNpdHkpKTsKICAgICB0b0FkZC0+c2V0UnVu
U3RhdGUoQ0NBY3RpdmVBbmltYXRpb246OldhaXRpbmdGb3JOZXh0VGljaywgMCk7Ci0gICAgY29u
dHJvbGxlci0+YWRkKHRvQWRkLnJlbGVhc2UoKSk7CisgICAgY29udHJvbGxlci0+YWRkQW5pbWF0
aW9uKHRvQWRkLnJlbGVhc2UoKSk7CiAKICAgICAvLyBTaW5jZSB0aGUgYW5pbWF0aW9uIHdhcyBp
biB0aGUgV2FpdGluZ0Zvck5leHRUaWNrIHN0YXRlLCBpdCBzaG91bGQgc3RhcnQgcmlnaHQgaW4K
ICAgICAvLyB0aGlzIGNhbGwgdG8gYW5pbWF0ZS4KQEAgLTQ3MCw5ICsyNzAsOSBAQCBURVNUKEND
TGF5ZXJBbmltYXRpb25Db250cm9sbGVyVGVzdCwgU2NoZWR1bGVUb2dldGhlcldoZW5BUHJvcGVy
dHlJc0Jsb2NrZWQpCiAgICAgT3duUHRyPENDTGF5ZXJBbmltYXRpb25Db250cm9sbGVyPiBjb250
cm9sbGVyKAogICAgICAgICBDQ0xheWVyQW5pbWF0aW9uQ29udHJvbGxlcjo6Y3JlYXRlKCZkdW1t
eSkpOwogCi0gICAgY29udHJvbGxlci0+YWRkKGNyZWF0ZUFjdGl2ZUFuaW1hdGlvbihhZG9wdFB0
cihuZXcgRmFrZVRyYW5zZm9ybVRyYW5zaXRpb24oMSkpLCAxLCBDQ0FjdGl2ZUFuaW1hdGlvbjo6
VHJhbnNmb3JtKSk7Ci0gICAgY29udHJvbGxlci0+YWRkKGNyZWF0ZUFjdGl2ZUFuaW1hdGlvbihh
ZG9wdFB0cihuZXcgRmFrZVRyYW5zZm9ybVRyYW5zaXRpb24oMSkpLCAyLCBDQ0FjdGl2ZUFuaW1h
dGlvbjo6VHJhbnNmb3JtKSk7Ci0gICAgY29udHJvbGxlci0+YWRkKGNyZWF0ZUFjdGl2ZUFuaW1h
dGlvbihhZG9wdFB0cihuZXcgRmFrZUZsb2F0VHJhbnNpdGlvbigxLCAwLCAxKSksIDIsIENDQWN0
aXZlQW5pbWF0aW9uOjpPcGFjaXR5KSk7CisgICAgY29udHJvbGxlci0+YWRkQW5pbWF0aW9uKGNy
ZWF0ZUFjdGl2ZUFuaW1hdGlvbihhZG9wdFB0cihuZXcgRmFrZVRyYW5zZm9ybVRyYW5zaXRpb24o
MSkpLCAxLCBDQ0FjdGl2ZUFuaW1hdGlvbjo6VHJhbnNmb3JtKSk7CisgICAgY29udHJvbGxlci0+
YWRkQW5pbWF0aW9uKGNyZWF0ZUFjdGl2ZUFuaW1hdGlvbihhZG9wdFB0cihuZXcgRmFrZVRyYW5z
Zm9ybVRyYW5zaXRpb24oMSkpLCAyLCBDQ0FjdGl2ZUFuaW1hdGlvbjo6VHJhbnNmb3JtKSk7Cisg
ICAgY29udHJvbGxlci0+YWRkQW5pbWF0aW9uKGNyZWF0ZUFjdGl2ZUFuaW1hdGlvbihhZG9wdFB0
cihuZXcgRmFrZUZsb2F0VHJhbnNpdGlvbigxLCAwLCAxKSksIDIsIENDQWN0aXZlQW5pbWF0aW9u
OjpPcGFjaXR5KSk7CiAKICAgICBjb250cm9sbGVyLT5hbmltYXRlKDAsIGV2ZW50cy5nZXQoKSk7
CiAgICAgRVhQRUNUX0VRKDAsIGR1bW15Lm9wYWNpdHkoKSk7CkBAIC00OTcsOSArMjk3LDkgQEAg
VEVTVChDQ0xheWVyQW5pbWF0aW9uQ29udHJvbGxlclRlc3QsIFNjaGVkdWxlVG9nZXRoZXJXaXRo
QW5BbmltV2FpdGluZykKICAgICBPd25QdHI8Q0NMYXllckFuaW1hdGlvbkNvbnRyb2xsZXI+IGNv
bnRyb2xsZXIoCiAgICAgICAgIENDTGF5ZXJBbmltYXRpb25Db250cm9sbGVyOjpjcmVhdGUoJmR1
bW15KSk7CiAKLSAgICBjb250cm9sbGVyLT5hZGQoY3JlYXRlQWN0aXZlQW5pbWF0aW9uKGFkb3B0
UHRyKG5ldyBGYWtlVHJhbnNmb3JtVHJhbnNpdGlvbigyKSksIDEsIENDQWN0aXZlQW5pbWF0aW9u
OjpUcmFuc2Zvcm0pKTsKLSAgICBjb250cm9sbGVyLT5hZGQoY3JlYXRlQWN0aXZlQW5pbWF0aW9u
KGFkb3B0UHRyKG5ldyBGYWtlRmxvYXRUcmFuc2l0aW9uKDEsIDAsIDEpKSwgMSwgQ0NBY3RpdmVB
bmltYXRpb246Ok9wYWNpdHkpKTsKLSAgICBjb250cm9sbGVyLT5hZGQoY3JlYXRlQWN0aXZlQW5p
bWF0aW9uKGFkb3B0UHRyKG5ldyBGYWtlRmxvYXRUcmFuc2l0aW9uKDEsIDEsIDAuNSkpLCAyLCBD
Q0FjdGl2ZUFuaW1hdGlvbjo6T3BhY2l0eSkpOworICAgIGNvbnRyb2xsZXItPmFkZEFuaW1hdGlv
bihjcmVhdGVBY3RpdmVBbmltYXRpb24oYWRvcHRQdHIobmV3IEZha2VUcmFuc2Zvcm1UcmFuc2l0
aW9uKDIpKSwgMSwgQ0NBY3RpdmVBbmltYXRpb246OlRyYW5zZm9ybSkpOworICAgIGNvbnRyb2xs
ZXItPmFkZEFuaW1hdGlvbihjcmVhdGVBY3RpdmVBbmltYXRpb24oYWRvcHRQdHIobmV3IEZha2VG
bG9hdFRyYW5zaXRpb24oMSwgMCwgMSkpLCAxLCBDQ0FjdGl2ZUFuaW1hdGlvbjo6T3BhY2l0eSkp
OworICAgIGNvbnRyb2xsZXItPmFkZEFuaW1hdGlvbihjcmVhdGVBY3RpdmVBbmltYXRpb24oYWRv
cHRQdHIobmV3IEZha2VGbG9hdFRyYW5zaXRpb24oMSwgMSwgMC41KSksIDIsIENDQWN0aXZlQW5p
bWF0aW9uOjpPcGFjaXR5KSk7CiAKICAgICAvLyBBbmltYXRpb25zIHdpdGggaWQgMSBzaG91bGQg
Ym90aCBzdGFydCBub3cuCiAgICAgY29udHJvbGxlci0+YW5pbWF0ZSgwLCBldmVudHMuZ2V0KCkp
OwpAQCAtNTMwLDcgKzMzMCw3IEBAIFRFU1QoQ0NMYXllckFuaW1hdGlvbkNvbnRyb2xsZXJUZXN0
LCBTY2hlZHVsZUFuaW1hdGlvbikKICAgICBPd25QdHI8Q0NBY3RpdmVBbmltYXRpb24+IHRvQWRk
KGNyZWF0ZUFjdGl2ZUFuaW1hdGlvbihhZG9wdFB0cihuZXcgRmFrZUZsb2F0VHJhbnNpdGlvbigx
LCAwLCAxKSksIDEsIENDQWN0aXZlQW5pbWF0aW9uOjpPcGFjaXR5KSk7CiAgICAgdG9BZGQtPnNl
dFJ1blN0YXRlKENDQWN0aXZlQW5pbWF0aW9uOjpXYWl0aW5nRm9yU3RhcnRUaW1lLCAwKTsKICAg
ICB0b0FkZC0+c2V0U3RhcnRUaW1lKDEpOwotICAgIGNvbnRyb2xsZXItPmFkZCh0b0FkZC5yZWxl
YXNlKCkpOworICAgIGNvbnRyb2xsZXItPmFkZEFuaW1hdGlvbih0b0FkZC5yZWxlYXNlKCkpOwog
CiAgICAgY29udHJvbGxlci0+YW5pbWF0ZSgwLCBldmVudHMuZ2V0KCkpOwogICAgIEVYUEVDVF9U
UlVFKGNvbnRyb2xsZXItPmhhc0FjdGl2ZUFuaW1hdGlvbigpKTsKQEAgLTU1MSwxMiArMzUxLDEy
IEBAIFRFU1QoQ0NMYXllckFuaW1hdGlvbkNvbnRyb2xsZXJUZXN0LCBTY2hlZHVsZWRBbmltYXRp
b25JbnRlcnJ1cHRzUnVubmluZ0FuaW1hdGlvCiAgICAgT3duUHRyPENDTGF5ZXJBbmltYXRpb25D
b250cm9sbGVyPiBjb250cm9sbGVyKAogICAgICAgICBDQ0xheWVyQW5pbWF0aW9uQ29udHJvbGxl
cjo6Y3JlYXRlKCZkdW1teSkpOwogCi0gICAgY29udHJvbGxlci0+YWRkKGNyZWF0ZUFjdGl2ZUFu
aW1hdGlvbihhZG9wdFB0cihuZXcgRmFrZUZsb2F0VHJhbnNpdGlvbigyLCAwLCAxKSksIDEsIEND
QWN0aXZlQW5pbWF0aW9uOjpPcGFjaXR5KSk7CisgICAgY29udHJvbGxlci0+YWRkQW5pbWF0aW9u
KGNyZWF0ZUFjdGl2ZUFuaW1hdGlvbihhZG9wdFB0cihuZXcgRmFrZUZsb2F0VHJhbnNpdGlvbigy
LCAwLCAxKSksIDEsIENDQWN0aXZlQW5pbWF0aW9uOjpPcGFjaXR5KSk7CiAKICAgICBPd25QdHI8
Q0NBY3RpdmVBbmltYXRpb24+IHRvQWRkKGNyZWF0ZUFjdGl2ZUFuaW1hdGlvbihhZG9wdFB0cihu
ZXcgRmFrZUZsb2F0VHJhbnNpdGlvbigxLCAwLjUsIDApKSwgMiwgQ0NBY3RpdmVBbmltYXRpb246
Ok9wYWNpdHkpKTsKICAgICB0b0FkZC0+c2V0UnVuU3RhdGUoQ0NBY3RpdmVBbmltYXRpb246Oldh
aXRpbmdGb3JTdGFydFRpbWUsIDApOwogICAgIHRvQWRkLT5zZXRTdGFydFRpbWUoMSk7Ci0gICAg
Y29udHJvbGxlci0+YWRkKHRvQWRkLnJlbGVhc2UoKSk7CisgICAgY29udHJvbGxlci0+YWRkQW5p
bWF0aW9uKHRvQWRkLnJlbGVhc2UoKSk7CiAKICAgICAvLyBGaXJzdCAycyBvcGFjaXR5IHRyYW5z
aXRpb24gc2hvdWxkIHN0YXJ0IGltbWVkaWF0ZWx5LgogICAgIGNvbnRyb2xsZXItPmFuaW1hdGUo
MCwgZXZlbnRzLmdldCgpKTsKQEAgLTU4MiwxNCArMzgyLDE0IEBAIFRFU1QoQ0NMYXllckFuaW1h
dGlvbkNvbnRyb2xsZXJUZXN0LCBTY2hlZHVsZWRBbmltYXRpb25JbnRlcnJ1cHRzUnVubmluZ0Fu
aW1hdGlvCiAgICAgT3duUHRyPENDTGF5ZXJBbmltYXRpb25Db250cm9sbGVyPiBjb250cm9sbGVy
KAogICAgICAgICBDQ0xheWVyQW5pbWF0aW9uQ29udHJvbGxlcjo6Y3JlYXRlKCZkdW1teSkpOwog
Ci0gICAgY29udHJvbGxlci0+YWRkKGNyZWF0ZUFjdGl2ZUFuaW1hdGlvbihhZG9wdFB0cihuZXcg
RmFrZUZsb2F0VHJhbnNpdGlvbigyLCAwLCAxKSksIDEsIENDQWN0aXZlQW5pbWF0aW9uOjpPcGFj
aXR5KSk7CisgICAgY29udHJvbGxlci0+YWRkQW5pbWF0aW9uKGNyZWF0ZUFjdGl2ZUFuaW1hdGlv
bihhZG9wdFB0cihuZXcgRmFrZUZsb2F0VHJhbnNpdGlvbigyLCAwLCAxKSksIDEsIENDQWN0aXZl
QW5pbWF0aW9uOjpPcGFjaXR5KSk7CiAKICAgICBPd25QdHI8Q0NBY3RpdmVBbmltYXRpb24+IHRv
QWRkKGNyZWF0ZUFjdGl2ZUFuaW1hdGlvbihhZG9wdFB0cihuZXcgRmFrZUZsb2F0VHJhbnNpdGlv
bigyLCAwLjUsIDApKSwgMiwgQ0NBY3RpdmVBbmltYXRpb246Ok9wYWNpdHkpKTsKICAgICB0b0Fk
ZC0+c2V0UnVuU3RhdGUoQ0NBY3RpdmVBbmltYXRpb246OldhaXRpbmdGb3JTdGFydFRpbWUsIDAp
OwogICAgIHRvQWRkLT5zZXRTdGFydFRpbWUoMSk7Ci0gICAgY29udHJvbGxlci0+YWRkKHRvQWRk
LnJlbGVhc2UoKSk7CisgICAgY29udHJvbGxlci0+YWRkQW5pbWF0aW9uKHRvQWRkLnJlbGVhc2Uo
KSk7CiAKLSAgICBjb250cm9sbGVyLT5hZGQoY3JlYXRlQWN0aXZlQW5pbWF0aW9uKGFkb3B0UHRy
KG5ldyBGYWtlRmxvYXRUcmFuc2l0aW9uKDEsIDAsIDAuNzUpKSwgMywgQ0NBY3RpdmVBbmltYXRp
b246Ok9wYWNpdHkpKTsKKyAgICBjb250cm9sbGVyLT5hZGRBbmltYXRpb24oY3JlYXRlQWN0aXZl
QW5pbWF0aW9uKGFkb3B0UHRyKG5ldyBGYWtlRmxvYXRUcmFuc2l0aW9uKDEsIDAsIDAuNzUpKSwg
MywgQ0NBY3RpdmVBbmltYXRpb246Ok9wYWNpdHkpKTsKIAogICAgIC8vIEZpcnN0IDJzIG9wYWNp
dHkgdHJhbnNpdGlvbiBzaG91bGQgc3RhcnQgaW1tZWRpYXRlbHkuCiAgICAgY29udHJvbGxlci0+
YW5pbWF0ZSgwLCBldmVudHMuZ2V0KCkpOwpAQCAtNjIwLDcgKzQyMCw3IEBAIFRFU1QoQ0NMYXll
ckFuaW1hdGlvbkNvbnRyb2xsZXJUZXN0LCBUcml2aWFsTG9vcGluZykKIAogICAgIE93blB0cjxD
Q0FjdGl2ZUFuaW1hdGlvbj4gdG9BZGQoY3JlYXRlQWN0aXZlQW5pbWF0aW9uKGFkb3B0UHRyKG5l
dyBGYWtlRmxvYXRUcmFuc2l0aW9uKDEsIDAsIDEpKSwgMSwgQ0NBY3RpdmVBbmltYXRpb246Ok9w
YWNpdHkpKTsKICAgICB0b0FkZC0+c2V0SXRlcmF0aW9ucygzKTsKLSAgICBjb250cm9sbGVyLT5h
ZGQodG9BZGQucmVsZWFzZSgpKTsKKyAgICBjb250cm9sbGVyLT5hZGRBbmltYXRpb24odG9BZGQu
cmVsZWFzZSgpKTsKIAogICAgIGNvbnRyb2xsZXItPmFuaW1hdGUoMCwgZXZlbnRzLmdldCgpKTsK
ICAgICBFWFBFQ1RfVFJVRShjb250cm9sbGVyLT5oYXNBY3RpdmVBbmltYXRpb24oKSk7CkBAIC02
NTcsNyArNDU3LDcgQEAgVEVTVChDQ0xheWVyQW5pbWF0aW9uQ29udHJvbGxlclRlc3QsIEluZmlu
aXRlTG9vcGluZykKICAgICBjb25zdCBpbnQgaWQgPSAxOwogICAgIE93blB0cjxDQ0FjdGl2ZUFu
aW1hdGlvbj4gdG9BZGQoY3JlYXRlQWN0aXZlQW5pbWF0aW9uKGFkb3B0UHRyKG5ldyBGYWtlRmxv
YXRUcmFuc2l0aW9uKDEsIDAsIDEpKSwgaWQsIENDQWN0aXZlQW5pbWF0aW9uOjpPcGFjaXR5KSk7
CiAgICAgdG9BZGQtPnNldEl0ZXJhdGlvbnMoLTEpOwotICAgIGNvbnRyb2xsZXItPmFkZCh0b0Fk
ZC5yZWxlYXNlKCkpOworICAgIGNvbnRyb2xsZXItPmFkZEFuaW1hdGlvbih0b0FkZC5yZWxlYXNl
KCkpOwogCiAgICAgY29udHJvbGxlci0+YW5pbWF0ZSgwLCBldmVudHMuZ2V0KCkpOwogICAgIEVY
UEVDVF9UUlVFKGNvbnRyb2xsZXItPmhhc0FjdGl2ZUFuaW1hdGlvbigpKTsKQEAgLTY5MSw3ICs0
OTEsNyBAQCBURVNUKENDTGF5ZXJBbmltYXRpb25Db250cm9sbGVyVGVzdCwgUGF1c2VSZXN1bWUp
CiAgICAgICAgIENDTGF5ZXJBbmltYXRpb25Db250cm9sbGVyOjpjcmVhdGUoJmR1bW15KSk7CiAK
ICAgICBjb25zdCBpbnQgaWQgPSAxOwotICAgIGNvbnRyb2xsZXItPmFkZChjcmVhdGVBY3RpdmVB
bmltYXRpb24oYWRvcHRQdHIobmV3IEZha2VGbG9hdFRyYW5zaXRpb24oMSwgMCwgMSkpLCBpZCwg
Q0NBY3RpdmVBbmltYXRpb246Ok9wYWNpdHkpKTsKKyAgICBjb250cm9sbGVyLT5hZGRBbmltYXRp
b24oY3JlYXRlQWN0aXZlQW5pbWF0aW9uKGFkb3B0UHRyKG5ldyBGYWtlRmxvYXRUcmFuc2l0aW9u
KDEsIDAsIDEpKSwgaWQsIENDQWN0aXZlQW5pbWF0aW9uOjpPcGFjaXR5KSk7CiAKICAgICBjb250
cm9sbGVyLT5hbmltYXRlKDAsIGV2ZW50cy5nZXQoKSk7CiAgICAgRVhQRUNUX1RSVUUoY29udHJv
bGxlci0+aGFzQWN0aXZlQW5pbWF0aW9uKCkpOwpAQCAtNzI2LDkgKzUyNiw5IEBAIFRFU1QoQ0NM
YXllckFuaW1hdGlvbkNvbnRyb2xsZXJUZXN0LCBBYm9ydEFHcm91cGVkQW5pbWF0aW9uKQogICAg
ICAgICBDQ0xheWVyQW5pbWF0aW9uQ29udHJvbGxlcjo6Y3JlYXRlKCZkdW1teSkpOwogCiAgICAg
Y29uc3QgaW50IGlkID0gMTsKLSAgICBjb250cm9sbGVyLT5hZGQoY3JlYXRlQWN0aXZlQW5pbWF0
aW9uKGFkb3B0UHRyKG5ldyBGYWtlVHJhbnNmb3JtVHJhbnNpdGlvbigxKSksIGlkLCBDQ0FjdGl2
ZUFuaW1hdGlvbjo6VHJhbnNmb3JtKSk7Ci0gICAgY29udHJvbGxlci0+YWRkKGNyZWF0ZUFjdGl2
ZUFuaW1hdGlvbihhZG9wdFB0cihuZXcgRmFrZUZsb2F0VHJhbnNpdGlvbigyLCAwLCAxKSksIGlk
LCBDQ0FjdGl2ZUFuaW1hdGlvbjo6T3BhY2l0eSkpOwotICAgIGNvbnRyb2xsZXItPmFkZChjcmVh
dGVBY3RpdmVBbmltYXRpb24oYWRvcHRQdHIobmV3IEZha2VGbG9hdFRyYW5zaXRpb24oMSwgMSwg
MC43NSkpLCAyLCBDQ0FjdGl2ZUFuaW1hdGlvbjo6T3BhY2l0eSkpOworICAgIGNvbnRyb2xsZXIt
PmFkZEFuaW1hdGlvbihjcmVhdGVBY3RpdmVBbmltYXRpb24oYWRvcHRQdHIobmV3IEZha2VUcmFu
c2Zvcm1UcmFuc2l0aW9uKDEpKSwgaWQsIENDQWN0aXZlQW5pbWF0aW9uOjpUcmFuc2Zvcm0pKTsK
KyAgICBjb250cm9sbGVyLT5hZGRBbmltYXRpb24oY3JlYXRlQWN0aXZlQW5pbWF0aW9uKGFkb3B0
UHRyKG5ldyBGYWtlRmxvYXRUcmFuc2l0aW9uKDIsIDAsIDEpKSwgaWQsIENDQWN0aXZlQW5pbWF0
aW9uOjpPcGFjaXR5KSk7CisgICAgY29udHJvbGxlci0+YWRkQW5pbWF0aW9uKGNyZWF0ZUFjdGl2
ZUFuaW1hdGlvbihhZG9wdFB0cihuZXcgRmFrZUZsb2F0VHJhbnNpdGlvbigxLCAxLCAwLjc1KSks
IDIsIENDQWN0aXZlQW5pbWF0aW9uOjpPcGFjaXR5KSk7CiAKICAgICBjb250cm9sbGVyLT5hbmlt
YXRlKDAsIGV2ZW50cy5nZXQoKSk7CiAgICAgRVhQRUNUX1RSVUUoY29udHJvbGxlci0+aGFzQWN0
aXZlQW5pbWF0aW9uKCkpOwpAQCAtNzU4LDcgKzU1OCw3IEBAIFRFU1QoQ0NMYXllckFuaW1hdGlv
bkNvbnRyb2xsZXJUZXN0LCBGb3JjZVN5bmNXaGVuU3luY2hyb25pemVkU3RhcnRUaW1lTmVlZGVk
KQogCiAgICAgT3duUHRyPENDQWN0aXZlQW5pbWF0aW9uPiB0b0FkZChjcmVhdGVBY3RpdmVBbmlt
YXRpb24oYWRvcHRQdHIobmV3IEZha2VGbG9hdFRyYW5zaXRpb24oMiwgMCwgMSkpLCAwLCBDQ0Fj
dGl2ZUFuaW1hdGlvbjo6T3BhY2l0eSkpOwogICAgIHRvQWRkLT5zZXROZWVkc1N5bmNocm9uaXpl
ZFN0YXJ0VGltZSh0cnVlKTsKLSAgICBjb250cm9sbGVyLT5hZGQodG9BZGQucmVsZWFzZSgpKTsK
KyAgICBjb250cm9sbGVyLT5hZGRBbmltYXRpb24odG9BZGQucmVsZWFzZSgpKTsKIAogICAgIGNv
bnRyb2xsZXItPmFuaW1hdGUoMCwgMCk7CiAgICAgRVhQRUNUX1RSVUUoY29udHJvbGxlci0+aGFz
QWN0aXZlQW5pbWF0aW9uKCkpOwpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYktpdC9jaHJvbWl1bS90
ZXN0cy9DQ0xheWVyVHJlZUhvc3RUZXN0LmNwcCBiL1NvdXJjZS9XZWJLaXQvY2hyb21pdW0vdGVz
dHMvQ0NMYXllclRyZWVIb3N0VGVzdC5jcHAKaW5kZXggMTI3NWVjODU0MjgxMDk4YzMxZTFiODAz
MDYxYzljY2E0ZGJmNWQ4Yy4uZDcxMzQxMzdkMDU4YTM2MWMwZTM3ZmRlMzRiOTM4MzNkNGRmYzdk
OCAxMDA2NDQKLS0tIGEvU291cmNlL1dlYktpdC9jaHJvbWl1bS90ZXN0cy9DQ0xheWVyVHJlZUhv
c3RUZXN0LmNwcAorKysgYi9Tb3VyY2UvV2ViS2l0L2Nocm9taXVtL3Rlc3RzL0NDTGF5ZXJUcmVl
SG9zdFRlc3QuY3BwCkBAIC0yODQ1LDcgKzI4NDUsNyBAQCBwdWJsaWM6CiAgICAgICAgIC8vIEFu
eSB2YWxpZCBDQ0FuaW1hdGlvbkN1cnZlIHdpbGwgZG8gaGVyZS4KICAgICAgICAgT3duUHRyPEND
QW5pbWF0aW9uQ3VydmU+IGN1cnZlKENDRWFzZVRpbWluZ0Z1bmN0aW9uOjpjcmVhdGUoKSk7CiAg
ICAgICAgIE93blB0cjxDQ0FjdGl2ZUFuaW1hdGlvbj4gYW5pbWF0aW9uKENDQWN0aXZlQW5pbWF0
aW9uOjpjcmVhdGUoY3VydmUucmVsZWFzZSgpLCBBbmltYXRpb25JZFZlbmRvcjo6Z2V0TmV4dEFu
aW1hdGlvbklkKCksIEFuaW1hdGlvbklkVmVuZG9yOjpnZXROZXh0R3JvdXBJZCgpLCBDQ0FjdGl2
ZUFuaW1hdGlvbjo6T3BhY2l0eSkpOwotICAgICAgICBsYXllci0+bGF5ZXJBbmltYXRpb25Db250
cm9sbGVyKCktPmFkZChhbmltYXRpb24ucmVsZWFzZSgpKTsKKyAgICAgICAgbGF5ZXItPmxheWVy
QW5pbWF0aW9uQ29udHJvbGxlcigpLT5hZGRBbmltYXRpb24oYW5pbWF0aW9uLnJlbGVhc2UoKSk7
CiAKICAgICAgICAgLy8gV2UgYWRkIHRoZSBhbmltYXRpb24gKmJlZm9yZSogYXR0YWNoaW5nIHRo
ZSBsYXllciB0byB0aGUgdHJlZS4KICAgICAgICAgbV9sYXllclRyZWVIb3N0LT5yb290TGF5ZXIo
KS0+YWRkQ2hpbGQobGF5ZXIpOwpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYktpdC9jaHJvbWl1bS90
ZXN0cy9HcmFwaGljc0xheWVyQ2hyb21pdW1UZXN0LmNwcCBiL1NvdXJjZS9XZWJLaXQvY2hyb21p
dW0vdGVzdHMvR3JhcGhpY3NMYXllckNocm9taXVtVGVzdC5jcHAKaW5kZXggYjdhYTg1NzQ2NWNi
YWMxOGM0ODJhZWQ1ZDk3MzIzMjY1MTRkYTZhNC4uNzMyOGViZmM2YWIyY2M4MTI3MjIxNjk4ZDY0
ZTA0ZjFlOGE4YzU4ZSAxMDA2NDQKLS0tIGEvU291cmNlL1dlYktpdC9jaHJvbWl1bS90ZXN0cy9H
cmFwaGljc0xheWVyQ2hyb21pdW1UZXN0LmNwcAorKysgYi9Tb3VyY2UvV2ViS2l0L2Nocm9taXVt
L3Rlc3RzL0dyYXBoaWNzTGF5ZXJDaHJvbWl1bVRlc3QuY3BwCkBAIC0yNyw1NiArMjcsMzc3IEBA
CiAjaW5jbHVkZSAiR3JhcGhpY3NMYXllckNocm9taXVtLmgiCiAKICNpbmNsdWRlICJDQ0FuaW1h
dGlvblRlc3RDb21tb24uaCIKKyNpbmNsdWRlICJDb21wb3NpdG9yRmFrZUdyYXBoaWNzQ29udGV4
dDNELmgiCisjaW5jbHVkZSAiR3JhcGhpY3NDb250ZXh0M0QuaCIKKyNpbmNsdWRlICJHcmFwaGlj
c0NvbnRleHQzRFByaXZhdGUuaCIKICNpbmNsdWRlICJHcmFwaGljc0xheWVyLmgiCiAjaW5jbHVk
ZSAiTGF5ZXJDaHJvbWl1bS5oIgorI2luY2x1ZGUgIk1hdHJpeDNEVHJhbnNmb3JtT3BlcmF0aW9u
LmgiCisjaW5jbHVkZSAiUm90YXRlVHJhbnNmb3JtT3BlcmF0aW9uLmgiCisjaW5jbHVkZSAiVHJh
bnNsYXRlVHJhbnNmb3JtT3BlcmF0aW9uLmgiCisjaW5jbHVkZSAiV2ViQ29tcG9zaXRvci5oIgor
CisjaW5jbHVkZSAiY2MvQ0NMYXllclRyZWVIb3N0LmgiCisjaW5jbHVkZSAiY2MvQ0NMYXllclRy
ZWVIb3N0SW1wbC5oIgorI2luY2x1ZGUgImNjL0NDU2luZ2xlVGhyZWFkUHJveHkuaCIKKwogI2lu
Y2x1ZGUgPGd0ZXN0L2d0ZXN0Lmg+CiAjaW5jbHVkZSA8d3RmL1Bhc3NPd25QdHIuaD4KIAogdXNp
bmcgbmFtZXNwYWNlIFdlYkNvcmU7Cit1c2luZyBuYW1lc3BhY2UgV2ViS2l0OwogdXNpbmcgbmFt
ZXNwYWNlIFdlYktpdFRlc3RzOwogCiBuYW1lc3BhY2UgewogCiBjbGFzcyBNb2NrR3JhcGhpY3NM
YXllckNsaWVudCA6IHB1YmxpYyBHcmFwaGljc0xheWVyQ2xpZW50IHsKICAgcHVibGljOgotICAg
IHZpcnR1YWwgdm9pZCBub3RpZnlBbmltYXRpb25TdGFydGVkKGNvbnN0IEdyYXBoaWNzTGF5ZXIq
LCBkb3VibGUgdGltZSkgeyB9Ci0gICAgdmlydHVhbCB2b2lkIG5vdGlmeVN5bmNSZXF1aXJlZChj
b25zdCBHcmFwaGljc0xheWVyKikgeyB9Ci0gICAgdmlydHVhbCB2b2lkIHBhaW50Q29udGVudHMo
Y29uc3QgR3JhcGhpY3NMYXllciosIEdyYXBoaWNzQ29udGV4dCYsIEdyYXBoaWNzTGF5ZXJQYWlu
dGluZ1BoYXNlLCBjb25zdCBJbnRSZWN0JiBpbkNsaXApIHsgfQotICAgIHZpcnR1YWwgYm9vbCBz
aG93RGVidWdCb3JkZXJzKGNvbnN0IEdyYXBoaWNzTGF5ZXIqKSBjb25zdCB7IHJldHVybiBmYWxz
ZTsgfQotICAgIHZpcnR1YWwgYm9vbCBzaG93UmVwYWludENvdW50ZXIoY29uc3QgR3JhcGhpY3NM
YXllciopIGNvbnN0IHsgcmV0dXJuIGZhbHNlOyB9CisgICAgdmlydHVhbCB2b2lkIG5vdGlmeUFu
aW1hdGlvblN0YXJ0ZWQoY29uc3QgR3JhcGhpY3NMYXllciosIGRvdWJsZSB0aW1lKSBPVkVSUklE
RSB7IH0KKyAgICB2aXJ0dWFsIHZvaWQgbm90aWZ5U3luY1JlcXVpcmVkKGNvbnN0IEdyYXBoaWNz
TGF5ZXIqKSBPVkVSUklERSB7IH0KKyAgICB2aXJ0dWFsIHZvaWQgcGFpbnRDb250ZW50cyhjb25z
dCBHcmFwaGljc0xheWVyKiwgR3JhcGhpY3NDb250ZXh0JiwgR3JhcGhpY3NMYXllclBhaW50aW5n
UGhhc2UsIGNvbnN0IEludFJlY3QmIGluQ2xpcCkgT1ZFUlJJREUgeyB9CisgICAgdmlydHVhbCBi
b29sIHNob3dEZWJ1Z0JvcmRlcnMoY29uc3QgR3JhcGhpY3NMYXllciopIGNvbnN0IE9WRVJSSURF
IHsgcmV0dXJuIGZhbHNlOyB9CisgICAgdmlydHVhbCBib29sIHNob3dSZXBhaW50Q291bnRlcihj
b25zdCBHcmFwaGljc0xheWVyKikgY29uc3QgT1ZFUlJJREUgeyByZXR1cm4gZmFsc2U7IH0KIH07
CiAKLVRFU1QoR3JhcGhpY3NMYXllckNocm9taXVtVGVzdCwgdXBkYXRlTGF5ZXJQcmVzZXJ2ZXMz
RFdpdGhBbmltYXRpb25zKQotewotICAgIE1vY2tHcmFwaGljc0xheWVyQ2xpZW50IGNsaWVudDsK
LSAgICBPd25QdHI8R3JhcGhpY3NMYXllckNocm9taXVtPiBncmFwaGljc0xheWVyID0gc3RhdGlj
X3BvaW50ZXJfY2FzdDxHcmFwaGljc0xheWVyQ2hyb21pdW0+KEdyYXBoaWNzTGF5ZXI6OmNyZWF0
ZSgmY2xpZW50KSk7Ci0gICAgQVNTRVJUX1RSVUUoZ3JhcGhpY3NMYXllci5nZXQoKSk7CitjbGFz
cyBNb2NrTGF5ZXJUcmVlSG9zdENsaWVudCA6IHB1YmxpYyBDQ0xheWVyVHJlZUhvc3RDbGllbnQg
eworcHVibGljOgorICAgIHZpcnR1YWwgdm9pZCB3aWxsQmVnaW5GcmFtZSgpIE9WRVJSSURFIHsg
fQorICAgIHZpcnR1YWwgdm9pZCBkaWRCZWdpbkZyYW1lKCkgT1ZFUlJJREUgeyB9CisgICAgdmly
dHVhbCB2b2lkIHVwZGF0ZUFuaW1hdGlvbnMoZG91YmxlIGZyYW1lQmVnaW5UaW1lKSBPVkVSUklE
RSB7IH0KKyAgICB2aXJ0dWFsIHZvaWQgbGF5b3V0KCkgT1ZFUlJJREUgeyB9CisgICAgdmlydHVh
bCB2b2lkIGFwcGx5U2Nyb2xsQW5kU2NhbGUoY29uc3QgSW50U2l6ZSYgc2Nyb2xsRGVsdGEsIGZs
b2F0IHBhZ2VTY2FsZSkgT1ZFUlJJREUgeyB9CisgICAgdmlydHVhbCBQYXNzUmVmUHRyPEdyYXBo
aWNzQ29udGV4dDNEPiBjcmVhdGVDb250ZXh0KCkgT1ZFUlJJREUKKyAgICB7CisgICAgICAgIEdy
YXBoaWNzQ29udGV4dDNEOjpBdHRyaWJ1dGVzIGF0dHJzOworICAgICAgICByZXR1cm4gY3JlYXRl
Q29tcG9zaXRvck1vY2tHcmFwaGljc0NvbnRleHQzRChhdHRycyk7CisgICAgfQorICAgIHZpcnR1
YWwgdm9pZCBkaWRSZWNyZWF0ZUNvbnRleHQoYm9vbCBzdWNjZXNzKSBPVkVSUklERSB7IH0KKyAg
ICB2aXJ0dWFsIHZvaWQgd2lsbENvbW1pdCgpIE9WRVJSSURFIHsgfQorICAgIHZpcnR1YWwgdm9p
ZCBkaWRDb21taXQoKSBPVkVSUklERSB7IH0KKyAgICB2aXJ0dWFsIHZvaWQgZGlkQ29tbWl0QW5k
RHJhd0ZyYW1lKCkgT1ZFUlJJREUgeyB9CisgICAgdmlydHVhbCB2b2lkIGRpZENvbXBsZXRlU3dh
cEJ1ZmZlcnMoKSBPVkVSUklERSB7IH0KKyAgICB2aXJ0dWFsIHZvaWQgc2NoZWR1bGVDb21wb3Np
dGUoKSBPVkVSUklERSB7IH0KK307CisKK2NsYXNzIE1vY2tMYXllclRyZWVIb3N0IDogcHVibGlj
IENDTGF5ZXJUcmVlSG9zdCB7CitwdWJsaWM6CisgICAgc3RhdGljIFBhc3NPd25QdHI8TW9ja0xh
eWVyVHJlZUhvc3Q+IGNyZWF0ZSgpCisgICAgeworICAgICAgICAvLyBGb3IgdGhlc2UgdGVzdHMs
IHdlIHdpbGwgZW5hYmxlIHRocmVhZGVkIGFuaW1hdGlvbnMuCisgICAgICAgIENDU2V0dGluZ3Mg
c2V0dGluZ3M7CisgICAgICAgIHNldHRpbmdzLnRocmVhZGVkQW5pbWF0aW9uRW5hYmxlZCA9IHRy
dWU7CisgICAgICAgIE93blB0cjxNb2NrTGF5ZXJUcmVlSG9zdD4gbGF5ZXJUcmVlSG9zdChhZG9w
dFB0cihuZXcgTW9ja0xheWVyVHJlZUhvc3QobmV3IE1vY2tMYXllclRyZWVIb3N0Q2xpZW50KCks
IHNldHRpbmdzKSkpOworICAgICAgICBib29sIHN1Y2Nlc3MgPSBsYXllclRyZWVIb3N0LT5pbml0
aWFsaXplKCk7CisgICAgICAgIEVYUEVDVF9UUlVFKHN1Y2Nlc3MpOworICAgICAgICBsYXllclRy
ZWVIb3N0LT5zZXRSb290TGF5ZXIoTGF5ZXJDaHJvbWl1bTo6Y3JlYXRlKCkpOworICAgICAgICBs
YXllclRyZWVIb3N0LT5zZXRWaWV3cG9ydFNpemUoSW50U2l6ZSgxLCAxKSk7CisgICAgICAgIHJl
dHVybiBsYXllclRyZWVIb3N0LnJlbGVhc2UoKTsKKyAgICB9CisKKyAgICB2aXJ0dWFsIFBhc3NP
d25QdHI8Q0NMYXllclRyZWVIb3N0SW1wbD4gY3JlYXRlTGF5ZXJUcmVlSG9zdEltcGwoQ0NMYXll
clRyZWVIb3N0SW1wbENsaWVudCogY2xpZW50KQorICAgIHsKKyAgICAgICAgLy8gRm9yIHRoZXNl
IHRlc3RzLCB3ZSB3aWxsIGVuYWJsZSB0aHJlYWRlZCBhbmltYXRpb25zLgorICAgICAgICBDQ1Nl
dHRpbmdzIGNvcHlTZXR0aW5ncyA9IHNldHRpbmdzKCk7CisgICAgICAgIGNvcHlTZXR0aW5ncy50
aHJlYWRlZEFuaW1hdGlvbkVuYWJsZWQgPSB0cnVlOworICAgICAgICByZXR1cm4gQ0NMYXllclRy
ZWVIb3N0SW1wbDo6Y3JlYXRlKGNvcHlTZXR0aW5ncywgY2xpZW50KTsKKyAgICB9CisKK3ByaXZh
dGU6CisgICAgTW9ja0xheWVyVHJlZUhvc3QoQ0NMYXllclRyZWVIb3N0Q2xpZW50KiBjbGllbnQs
IGNvbnN0IENDU2V0dGluZ3MmIHNldHRpbmdzKQorICAgICAgICA6IENDTGF5ZXJUcmVlSG9zdChj
bGllbnQsIHNldHRpbmdzKQorICAgIHsKKyAgICB9Cit9OworCitjbGFzcyBHcmFwaGljc0xheWVy
Q2hyb21pdW1UZXN0IDogcHVibGljIHRlc3Rpbmc6OlRlc3QgeworcHVibGljOgorICAgIEdyYXBo
aWNzTGF5ZXJDaHJvbWl1bVRlc3QoKQorICAgIHsKKyAgICAgICAgV2ViQ29tcG9zaXRvcjo6aW5p
dGlhbGl6ZSgwKTsKKyAgICAgICAgbV9ncmFwaGljc0xheWVyID0gc3RhdGljX3BvaW50ZXJfY2Fz
dDxHcmFwaGljc0xheWVyQ2hyb21pdW0+KEdyYXBoaWNzTGF5ZXI6OmNyZWF0ZSgmbV9jbGllbnQp
KTsKKyAgICAgICAgbV9wbGF0Zm9ybUxheWVyID0gc3RhdGljX2Nhc3Q8TGF5ZXJDaHJvbWl1bSo+
KG1fZ3JhcGhpY3NMYXllci0+cGxhdGZvcm1MYXllcigpKTsKKyAgICAgICAgbV9sYXllclRyZWVI
b3N0ID0gTW9ja0xheWVyVHJlZUhvc3Q6OmNyZWF0ZSgpOworICAgICAgICBtX3BsYXRmb3JtTGF5
ZXItPnNldExheWVyVHJlZUhvc3QobV9sYXllclRyZWVIb3N0LmdldCgpKTsKKyAgICB9CisKKyAg
ICB2aXJ0dWFsIH5HcmFwaGljc0xheWVyQ2hyb21pdW1UZXN0KCkKKyAgICB7CisgICAgICAgIG1f
Z3JhcGhpY3NMYXllci5jbGVhcigpOworICAgICAgICBtX2xheWVyVHJlZUhvc3QuY2xlYXIoKTsK
KyAgICAgICAgV2ViQ29tcG9zaXRvcjo6c2h1dGRvd24oKTsKKyAgICB9CisKK3Byb3RlY3RlZDoK
KyAgICBzdGF0aWMgdm9pZCBleHBlY3RUcmFuc2xhdGVYKGRvdWJsZSB0cmFuc2xhdGVYLCBjb25z
dCBUcmFuc2Zvcm1hdGlvbk1hdHJpeCYgbWF0cml4KQorICAgIHsKKyAgICAgICAgVHJhbnNmb3Jt
YXRpb25NYXRyaXg6OkRlY29tcG9zZWRUeXBlIGRlY29tcG9zZWRUeXBlOworICAgICAgICBtYXRy
aXguZGVjb21wb3NlKGRlY29tcG9zZWRUeXBlKTsKKyAgICAgICAgRVhQRUNUX0ZMT0FUX0VRKHRy
YW5zbGF0ZVgsIGRlY29tcG9zZWRUeXBlLnRyYW5zbGF0ZVgpOworICAgIH0KKworICAgIExheWVy
Q2hyb21pdW0qIG1fcGxhdGZvcm1MYXllcjsKKyAgICBPd25QdHI8R3JhcGhpY3NMYXllckNocm9t
aXVtPiBtX2dyYXBoaWNzTGF5ZXI7CisgICAgT3duUHRyPENDTGF5ZXJUcmVlSG9zdD4gbV9sYXll
clRyZWVIb3N0OwogCi0gICAgTGF5ZXJDaHJvbWl1bSogcGxhdGZvcm1MYXllciA9IHN0YXRpY19j
YXN0PExheWVyQ2hyb21pdW0qPihncmFwaGljc0xheWVyLT5wbGF0Zm9ybUxheWVyKCkpOwotICAg
IEFTU0VSVF9UUlVFKHBsYXRmb3JtTGF5ZXIpOworcHJpdmF0ZToKKyAgICBNb2NrR3JhcGhpY3NM
YXllckNsaWVudCBtX2NsaWVudDsKKyAgICBEZWJ1Z1Njb3BlZFNldE1haW5UaHJlYWQgbV9tYWlu
OworfTsKIAotICAgIEFTU0VSVF9GQUxTRShwbGF0Zm9ybUxheWVyLT5oYXNBY3RpdmVBbmltYXRp
b24oKSk7CitURVNUX0YoR3JhcGhpY3NMYXllckNocm9taXVtVGVzdCwgdXBkYXRlTGF5ZXJQcmVz
ZXJ2ZXMzRFdpdGhBbmltYXRpb25zKQoreworICAgIEFTU0VSVF9GQUxTRShtX3BsYXRmb3JtTGF5
ZXItPmhhc0FjdGl2ZUFuaW1hdGlvbigpKTsKIAogICAgIE93blB0cjxDQ0FjdGl2ZUFuaW1hdGlv
bj4gZmxvYXRBbmltYXRpb24oQ0NBY3RpdmVBbmltYXRpb246OmNyZWF0ZShhZG9wdFB0cihuZXcg
RmFrZUZsb2F0QW5pbWF0aW9uQ3VydmUpLCAwLCAxLCBDQ0FjdGl2ZUFuaW1hdGlvbjo6T3BhY2l0
eSkpOwotICAgIHBsYXRmb3JtTGF5ZXItPmxheWVyQW5pbWF0aW9uQ29udHJvbGxlcigpLT5hZGQo
ZmxvYXRBbmltYXRpb24ucmVsZWFzZSgpKTsKKyAgICBtX3BsYXRmb3JtTGF5ZXItPmxheWVyQW5p
bWF0aW9uQ29udHJvbGxlcigpLT5hZGRBbmltYXRpb24oZmxvYXRBbmltYXRpb24ucmVsZWFzZSgp
KTsKKworICAgIEFTU0VSVF9UUlVFKG1fcGxhdGZvcm1MYXllci0+aGFzQWN0aXZlQW5pbWF0aW9u
KCkpOworCisgICAgbV9ncmFwaGljc0xheWVyLT5zZXRQcmVzZXJ2ZXMzRCh0cnVlKTsKKworICAg
IG1fcGxhdGZvcm1MYXllciA9IHN0YXRpY19jYXN0PExheWVyQ2hyb21pdW0qPihtX2dyYXBoaWNz
TGF5ZXItPnBsYXRmb3JtTGF5ZXIoKSk7CisgICAgQVNTRVJUX1RSVUUobV9wbGF0Zm9ybUxheWVy
KTsKKworICAgIEFTU0VSVF9UUlVFKG1fcGxhdGZvcm1MYXllci0+aGFzQWN0aXZlQW5pbWF0aW9u
KCkpOworICAgIG1fcGxhdGZvcm1MYXllci0+cmVtb3ZlQW5pbWF0aW9uKDApOworICAgIEFTU0VS
VF9GQUxTRShtX3BsYXRmb3JtTGF5ZXItPmhhc0FjdGl2ZUFuaW1hdGlvbigpKTsKKworICAgIG1f
Z3JhcGhpY3NMYXllci0+c2V0UHJlc2VydmVzM0QoZmFsc2UpOworCisgICAgbV9wbGF0Zm9ybUxh
eWVyID0gc3RhdGljX2Nhc3Q8TGF5ZXJDaHJvbWl1bSo+KG1fZ3JhcGhpY3NMYXllci0+cGxhdGZv
cm1MYXllcigpKTsKKyAgICBBU1NFUlRfVFJVRShtX3BsYXRmb3JtTGF5ZXIpOworCisgICAgQVNT
RVJUX0ZBTFNFKG1fcGxhdGZvcm1MYXllci0+aGFzQWN0aXZlQW5pbWF0aW9uKCkpOworfQorCitU
RVNUX0YoR3JhcGhpY3NMYXllckNocm9taXVtVGVzdCwgY3JlYXRlT3BhY2l0eUFuaW1hdGlvbikK
K3sKKyAgICBjb25zdCBkb3VibGUgZHVyYXRpb24gPSAxOworICAgIFdlYkNvcmU6OktleWZyYW1l
VmFsdWVMaXN0IHZhbHVlcyhBbmltYXRlZFByb3BlcnR5T3BhY2l0eSk7CisgICAgdmFsdWVzLmlu
c2VydChuZXcgRmxvYXRBbmltYXRpb25WYWx1ZSgwLCAwKSk7CisgICAgdmFsdWVzLmluc2VydChu
ZXcgRmxvYXRBbmltYXRpb25WYWx1ZShkdXJhdGlvbiwgMSkpOworCisgICAgUmVmUHRyPEFuaW1h
dGlvbj4gYW5pbWF0aW9uID0gQW5pbWF0aW9uOjpjcmVhdGUoKTsKKyAgICBhbmltYXRpb24tPnNl
dER1cmF0aW9uKGR1cmF0aW9uKTsKKworICAgIEludFNpemUgYm94U2l6ZTsKKyAgICBib29sIGFk
ZGVkQW5pbWF0aW9uID0gbV9ncmFwaGljc0xheWVyLT5hZGRBbmltYXRpb24odmFsdWVzLCBib3hT
aXplLCBhbmltYXRpb24uZ2V0KCksICIiLCAwKTsKKworICAgIEVYUEVDVF9UUlVFKGFkZGVkQW5p
bWF0aW9uKTsKKworICAgIEVYUEVDVF9UUlVFKG1fcGxhdGZvcm1MYXllci0+bGF5ZXJBbmltYXRp
b25Db250cm9sbGVyKCktPmhhc0FjdGl2ZUFuaW1hdGlvbigpKTsKKworICAgIENDQWN0aXZlQW5p
bWF0aW9uKiBhY3RpdmVBbmltYXRpb24gPSBtX3BsYXRmb3JtTGF5ZXItPmxheWVyQW5pbWF0aW9u
Q29udHJvbGxlcigpLT5nZXRBY3RpdmVBbmltYXRpb24oQ0NBY3RpdmVBbmltYXRpb246Ok9wYWNp
dHkpOworICAgIEVYUEVDVF9UUlVFKGFjdGl2ZUFuaW1hdGlvbik7CisKKyAgICBFWFBFQ1RfRVEo
MSwgYWN0aXZlQW5pbWF0aW9uLT5pdGVyYXRpb25zKCkpOworICAgIEVYUEVDVF9FUShDQ0FjdGl2
ZUFuaW1hdGlvbjo6T3BhY2l0eSwgYWN0aXZlQW5pbWF0aW9uLT50YXJnZXRQcm9wZXJ0eSgpKTsK
KworICAgIEVYUEVDVF9FUShDQ0FuaW1hdGlvbkN1cnZlOjpGbG9hdCwgYWN0aXZlQW5pbWF0aW9u
LT5jdXJ2ZSgpLT50eXBlKCkpOworCisgICAgY29uc3QgQ0NGbG9hdEFuaW1hdGlvbkN1cnZlKiBj
dXJ2ZSA9IGFjdGl2ZUFuaW1hdGlvbi0+Y3VydmUoKS0+dG9GbG9hdEFuaW1hdGlvbkN1cnZlKCk7
CisgICAgRVhQRUNUX1RSVUUoY3VydmUpOworCisgICAgRVhQRUNUX0VRKDAsIGN1cnZlLT5nZXRW
YWx1ZSgwKSk7CisgICAgRVhQRUNUX0VRKDEsIGN1cnZlLT5nZXRWYWx1ZShkdXJhdGlvbikpOwor
fQorCitURVNUX0YoR3JhcGhpY3NMYXllckNocm9taXVtVGVzdCwgY3JlYXRlVHJhbnNmb3JtQW5p
bWF0aW9uKQoreworICAgIGNvbnN0IGRvdWJsZSBkdXJhdGlvbiA9IDE7CisgICAgV2ViQ29yZTo6
S2V5ZnJhbWVWYWx1ZUxpc3QgdmFsdWVzKEFuaW1hdGVkUHJvcGVydHlXZWJraXRUcmFuc2Zvcm0p
OworCisgICAgVHJhbnNmb3JtT3BlcmF0aW9ucyBvcGVyYXRpb25zMTsKKyAgICBvcGVyYXRpb25z
MS5vcGVyYXRpb25zKCkuYXBwZW5kKFRyYW5zbGF0ZVRyYW5zZm9ybU9wZXJhdGlvbjo6Y3JlYXRl
KExlbmd0aCgyLCBGaXhlZCksIExlbmd0aCgwLCBGaXhlZCksIFRyYW5zZm9ybU9wZXJhdGlvbjo6
VFJBTlNMQVRFX1gpKTsKKyAgICB2YWx1ZXMuaW5zZXJ0KG5ldyBUcmFuc2Zvcm1BbmltYXRpb25W
YWx1ZSgwLCAmb3BlcmF0aW9uczEpKTsKKworICAgIFRyYW5zZm9ybU9wZXJhdGlvbnMgb3BlcmF0
aW9uczI7CisgICAgb3BlcmF0aW9uczIub3BlcmF0aW9ucygpLmFwcGVuZChUcmFuc2xhdGVUcmFu
c2Zvcm1PcGVyYXRpb246OmNyZWF0ZShMZW5ndGgoNCwgRml4ZWQpLCBMZW5ndGgoMCwgRml4ZWQp
LCBUcmFuc2Zvcm1PcGVyYXRpb246OlRSQU5TTEFURV9YKSk7CisgICAgdmFsdWVzLmluc2VydChu
ZXcgVHJhbnNmb3JtQW5pbWF0aW9uVmFsdWUoZHVyYXRpb24sICZvcGVyYXRpb25zMikpOworCisg
ICAgUmVmUHRyPEFuaW1hdGlvbj4gYW5pbWF0aW9uID0gQW5pbWF0aW9uOjpjcmVhdGUoKTsKKyAg
ICBhbmltYXRpb24tPnNldER1cmF0aW9uKGR1cmF0aW9uKTsKKworICAgIEludFNpemUgYm94U2l6
ZTsKKyAgICBtX2dyYXBoaWNzTGF5ZXItPmFkZEFuaW1hdGlvbih2YWx1ZXMsIGJveFNpemUsIGFu
aW1hdGlvbi5nZXQoKSwgIiIsIDApOworCisgICAgRVhQRUNUX1RSVUUobV9wbGF0Zm9ybUxheWVy
LT5sYXllckFuaW1hdGlvbkNvbnRyb2xsZXIoKS0+aGFzQWN0aXZlQW5pbWF0aW9uKCkpOworCisg
ICAgQ0NBY3RpdmVBbmltYXRpb24qIGFjdGl2ZUFuaW1hdGlvbiA9IG1fcGxhdGZvcm1MYXllci0+
bGF5ZXJBbmltYXRpb25Db250cm9sbGVyKCktPmdldEFjdGl2ZUFuaW1hdGlvbihDQ0FjdGl2ZUFu
aW1hdGlvbjo6VHJhbnNmb3JtKTsKKyAgICBFWFBFQ1RfVFJVRShhY3RpdmVBbmltYXRpb24pOwor
CisgICAgRVhQRUNUX0VRKDEsIGFjdGl2ZUFuaW1hdGlvbi0+aXRlcmF0aW9ucygpKTsKKyAgICBF
WFBFQ1RfRVEoQ0NBY3RpdmVBbmltYXRpb246OlRyYW5zZm9ybSwgYWN0aXZlQW5pbWF0aW9uLT50
YXJnZXRQcm9wZXJ0eSgpKTsKKworICAgIEVYUEVDVF9FUShDQ0FuaW1hdGlvbkN1cnZlOjpUcmFu
c2Zvcm0sIGFjdGl2ZUFuaW1hdGlvbi0+Y3VydmUoKS0+dHlwZSgpKTsKKworICAgIGNvbnN0IEND
VHJhbnNmb3JtQW5pbWF0aW9uQ3VydmUqIGN1cnZlID0gYWN0aXZlQW5pbWF0aW9uLT5jdXJ2ZSgp
LT50b1RyYW5zZm9ybUFuaW1hdGlvbkN1cnZlKCk7CisgICAgRVhQRUNUX1RSVUUoY3VydmUpOwor
CisgICAgZXhwZWN0VHJhbnNsYXRlWCgyLCBjdXJ2ZS0+Z2V0VmFsdWUoMCkpOworICAgIGV4cGVj
dFRyYW5zbGF0ZVgoNCwgY3VydmUtPmdldFZhbHVlKGR1cmF0aW9uKSk7Cit9CisKK1RFU1RfRihH
cmFwaGljc0xheWVyQ2hyb21pdW1UZXN0LCBjcmVhdGVUcmFuc2Zvcm1BbmltYXRpb25XaXRoQmln
Um90YXRpb24pCit7CisgICAgY29uc3QgZG91YmxlIGR1cmF0aW9uID0gMTsKKyAgICBXZWJDb3Jl
OjpLZXlmcmFtZVZhbHVlTGlzdCB2YWx1ZXMoQW5pbWF0ZWRQcm9wZXJ0eVdlYmtpdFRyYW5zZm9y
bSk7CisKKyAgICBUcmFuc2Zvcm1PcGVyYXRpb25zIG9wZXJhdGlvbnMxOworICAgIG9wZXJhdGlv
bnMxLm9wZXJhdGlvbnMoKS5hcHBlbmQoUm90YXRlVHJhbnNmb3JtT3BlcmF0aW9uOjpjcmVhdGUo
MCwgVHJhbnNmb3JtT3BlcmF0aW9uOjpST1RBVEUpKTsKKyAgICB2YWx1ZXMuaW5zZXJ0KG5ldyBU
cmFuc2Zvcm1BbmltYXRpb25WYWx1ZSgwLCAmb3BlcmF0aW9uczEpKTsKKworICAgIFRyYW5zZm9y
bU9wZXJhdGlvbnMgb3BlcmF0aW9uczI7CisgICAgb3BlcmF0aW9uczIub3BlcmF0aW9ucygpLmFw
cGVuZChSb3RhdGVUcmFuc2Zvcm1PcGVyYXRpb246OmNyZWF0ZSgyNzAsIFRyYW5zZm9ybU9wZXJh
dGlvbjo6Uk9UQVRFKSk7CisgICAgdmFsdWVzLmluc2VydChuZXcgVHJhbnNmb3JtQW5pbWF0aW9u
VmFsdWUoZHVyYXRpb24sICZvcGVyYXRpb25zMikpOworCisgICAgUmVmUHRyPEFuaW1hdGlvbj4g
YW5pbWF0aW9uID0gQW5pbWF0aW9uOjpjcmVhdGUoKTsKKyAgICBhbmltYXRpb24tPnNldER1cmF0
aW9uKGR1cmF0aW9uKTsKKworICAgIEludFNpemUgYm94U2l6ZTsKKyAgICBtX2dyYXBoaWNzTGF5
ZXItPmFkZEFuaW1hdGlvbih2YWx1ZXMsIGJveFNpemUsIGFuaW1hdGlvbi5nZXQoKSwgIiIsIDAp
OworCisgICAgRVhQRUNUX0ZBTFNFKG1fcGxhdGZvcm1MYXllci0+bGF5ZXJBbmltYXRpb25Db250
cm9sbGVyKCktPmhhc0FjdGl2ZUFuaW1hdGlvbigpKTsKK30KKworVEVTVF9GKEdyYXBoaWNzTGF5
ZXJDaHJvbWl1bVRlc3QsIGNyZWF0ZVRyYW5zZm9ybUFuaW1hdGlvbldpdGhTaW5ndWxhck1hdHJp
eCkKK3sKKyAgICBjb25zdCBkb3VibGUgZHVyYXRpb24gPSAxOworICAgIFdlYkNvcmU6OktleWZy
YW1lVmFsdWVMaXN0IHZhbHVlcyhBbmltYXRlZFByb3BlcnR5V2Via2l0VHJhbnNmb3JtKTsKKwor
ICAgIFRyYW5zZm9ybWF0aW9uTWF0cml4IG1hdHJpeDE7CisgICAgVHJhbnNmb3JtT3BlcmF0aW9u
cyBvcGVyYXRpb25zMTsKKyAgICBvcGVyYXRpb25zMS5vcGVyYXRpb25zKCkuYXBwZW5kKE1hdHJp
eDNEVHJhbnNmb3JtT3BlcmF0aW9uOjpjcmVhdGUobWF0cml4MSkpOworICAgIHZhbHVlcy5pbnNl
cnQobmV3IFRyYW5zZm9ybUFuaW1hdGlvblZhbHVlKDAsICZvcGVyYXRpb25zMSkpOworCisgICAg
VHJhbnNmb3JtYXRpb25NYXRyaXggbWF0cml4MjsKKyAgICBtYXRyaXgyLnNldE0xMSgwKTsKKyAg
ICBUcmFuc2Zvcm1PcGVyYXRpb25zIG9wZXJhdGlvbnMyOworICAgIG9wZXJhdGlvbnMyLm9wZXJh
dGlvbnMoKS5hcHBlbmQoTWF0cml4M0RUcmFuc2Zvcm1PcGVyYXRpb246OmNyZWF0ZShtYXRyaXgy
KSk7CisgICAgdmFsdWVzLmluc2VydChuZXcgVHJhbnNmb3JtQW5pbWF0aW9uVmFsdWUoZHVyYXRp
b24sICZvcGVyYXRpb25zMikpOworCisgICAgUmVmUHRyPEFuaW1hdGlvbj4gYW5pbWF0aW9uID0g
QW5pbWF0aW9uOjpjcmVhdGUoKTsKKyAgICBhbmltYXRpb24tPnNldER1cmF0aW9uKGR1cmF0aW9u
KTsKKworICAgIEludFNpemUgYm94U2l6ZTsKKyAgICBtX2dyYXBoaWNzTGF5ZXItPmFkZEFuaW1h
dGlvbih2YWx1ZXMsIGJveFNpemUsIGFuaW1hdGlvbi5nZXQoKSwgIiIsIDApOworCisgICAgRVhQ
RUNUX0ZBTFNFKG1fcGxhdGZvcm1MYXllci0+bGF5ZXJBbmltYXRpb25Db250cm9sbGVyKCktPmhh
c0FjdGl2ZUFuaW1hdGlvbigpKTsKK30KKworVEVTVF9GKEdyYXBoaWNzTGF5ZXJDaHJvbWl1bVRl
c3QsIGNyZWF0ZVJldmVyc2VkQW5pbWF0aW9uKQoreworICAgIGNvbnN0IGRvdWJsZSBkdXJhdGlv
biA9IDE7CisgICAgV2ViQ29yZTo6S2V5ZnJhbWVWYWx1ZUxpc3QgdmFsdWVzKEFuaW1hdGVkUHJv
cGVydHlXZWJraXRUcmFuc2Zvcm0pOworCisgICAgVHJhbnNmb3JtT3BlcmF0aW9ucyBvcGVyYXRp
b25zMTsKKyAgICBvcGVyYXRpb25zMS5vcGVyYXRpb25zKCkuYXBwZW5kKFRyYW5zbGF0ZVRyYW5z
Zm9ybU9wZXJhdGlvbjo6Y3JlYXRlKExlbmd0aCgyLCBGaXhlZCksIExlbmd0aCgwLCBGaXhlZCks
IFRyYW5zZm9ybU9wZXJhdGlvbjo6VFJBTlNMQVRFX1gpKTsKKyAgICB2YWx1ZXMuaW5zZXJ0KG5l
dyBUcmFuc2Zvcm1BbmltYXRpb25WYWx1ZSgwLCAmb3BlcmF0aW9uczEpKTsKKworICAgIFRyYW5z
Zm9ybU9wZXJhdGlvbnMgb3BlcmF0aW9uczI7CisgICAgb3BlcmF0aW9uczIub3BlcmF0aW9ucygp
LmFwcGVuZChUcmFuc2xhdGVUcmFuc2Zvcm1PcGVyYXRpb246OmNyZWF0ZShMZW5ndGgoNCwgRml4
ZWQpLCBMZW5ndGgoMCwgRml4ZWQpLCBUcmFuc2Zvcm1PcGVyYXRpb246OlRSQU5TTEFURV9YKSk7
CisgICAgdmFsdWVzLmluc2VydChuZXcgVHJhbnNmb3JtQW5pbWF0aW9uVmFsdWUoZHVyYXRpb24s
ICZvcGVyYXRpb25zMikpOworCisgICAgUmVmUHRyPEFuaW1hdGlvbj4gYW5pbWF0aW9uID0gQW5p
bWF0aW9uOjpjcmVhdGUoKTsKKyAgICBhbmltYXRpb24tPnNldER1cmF0aW9uKGR1cmF0aW9uKTsK
KyAgICBhbmltYXRpb24tPnNldERpcmVjdGlvbihBbmltYXRpb246OkFuaW1hdGlvbkRpcmVjdGlv
blJldmVyc2UpOworCisgICAgSW50U2l6ZSBib3hTaXplOworICAgIG1fZ3JhcGhpY3NMYXllci0+
YWRkQW5pbWF0aW9uKHZhbHVlcywgYm94U2l6ZSwgYW5pbWF0aW9uLmdldCgpLCAiIiwgMCk7CisK
KyAgICBFWFBFQ1RfVFJVRShtX3BsYXRmb3JtTGF5ZXItPmxheWVyQW5pbWF0aW9uQ29udHJvbGxl
cigpLT5oYXNBY3RpdmVBbmltYXRpb24oKSk7CisKKyAgICBDQ0FjdGl2ZUFuaW1hdGlvbiogYWN0
aXZlQW5pbWF0aW9uID0gbV9wbGF0Zm9ybUxheWVyLT5sYXllckFuaW1hdGlvbkNvbnRyb2xsZXIo
KS0+Z2V0QWN0aXZlQW5pbWF0aW9uKENDQWN0aXZlQW5pbWF0aW9uOjpUcmFuc2Zvcm0pOworICAg
IEVYUEVDVF9UUlVFKGFjdGl2ZUFuaW1hdGlvbik7CisKKyAgICBFWFBFQ1RfRVEoMSwgYWN0aXZl
QW5pbWF0aW9uLT5pdGVyYXRpb25zKCkpOworICAgIEVYUEVDVF9FUShDQ0FjdGl2ZUFuaW1hdGlv
bjo6VHJhbnNmb3JtLCBhY3RpdmVBbmltYXRpb24tPnRhcmdldFByb3BlcnR5KCkpOworCisgICAg
RVhQRUNUX0VRKENDQW5pbWF0aW9uQ3VydmU6OlRyYW5zZm9ybSwgYWN0aXZlQW5pbWF0aW9uLT5j
dXJ2ZSgpLT50eXBlKCkpOworCisgICAgY29uc3QgQ0NUcmFuc2Zvcm1BbmltYXRpb25DdXJ2ZSog
Y3VydmUgPSBhY3RpdmVBbmltYXRpb24tPmN1cnZlKCktPnRvVHJhbnNmb3JtQW5pbWF0aW9uQ3Vy
dmUoKTsKKyAgICBFWFBFQ1RfVFJVRShjdXJ2ZSk7CisKKyAgICBleHBlY3RUcmFuc2xhdGVYKDQs
IGN1cnZlLT5nZXRWYWx1ZSgwKSk7CisgICAgZXhwZWN0VHJhbnNsYXRlWCgyLCBjdXJ2ZS0+Z2V0
VmFsdWUoZHVyYXRpb24pKTsKK30KKworVEVTVF9GKEdyYXBoaWNzTGF5ZXJDaHJvbWl1bVRlc3Qs
IGNyZWF0ZUFsdGVybmF0aW5nQW5pbWF0aW9uKQoreworICAgIGNvbnN0IGRvdWJsZSBkdXJhdGlv
biA9IDE7CisgICAgV2ViQ29yZTo6S2V5ZnJhbWVWYWx1ZUxpc3QgdmFsdWVzKEFuaW1hdGVkUHJv
cGVydHlXZWJraXRUcmFuc2Zvcm0pOworCisgICAgVHJhbnNmb3JtT3BlcmF0aW9ucyBvcGVyYXRp
b25zMTsKKyAgICBvcGVyYXRpb25zMS5vcGVyYXRpb25zKCkuYXBwZW5kKFRyYW5zbGF0ZVRyYW5z
Zm9ybU9wZXJhdGlvbjo6Y3JlYXRlKExlbmd0aCgyLCBGaXhlZCksIExlbmd0aCgwLCBGaXhlZCks
IFRyYW5zZm9ybU9wZXJhdGlvbjo6VFJBTlNMQVRFX1gpKTsKKyAgICB2YWx1ZXMuaW5zZXJ0KG5l
dyBUcmFuc2Zvcm1BbmltYXRpb25WYWx1ZSgwLCAmb3BlcmF0aW9uczEpKTsKKworICAgIFRyYW5z
Zm9ybU9wZXJhdGlvbnMgb3BlcmF0aW9uczI7CisgICAgb3BlcmF0aW9uczIub3BlcmF0aW9ucygp
LmFwcGVuZChUcmFuc2xhdGVUcmFuc2Zvcm1PcGVyYXRpb246OmNyZWF0ZShMZW5ndGgoNCwgRml4
ZWQpLCBMZW5ndGgoMCwgRml4ZWQpLCBUcmFuc2Zvcm1PcGVyYXRpb246OlRSQU5TTEFURV9YKSk7
CisgICAgdmFsdWVzLmluc2VydChuZXcgVHJhbnNmb3JtQW5pbWF0aW9uVmFsdWUoZHVyYXRpb24s
ICZvcGVyYXRpb25zMikpOworCisgICAgUmVmUHRyPEFuaW1hdGlvbj4gYW5pbWF0aW9uID0gQW5p
bWF0aW9uOjpjcmVhdGUoKTsKKyAgICBhbmltYXRpb24tPnNldER1cmF0aW9uKGR1cmF0aW9uKTsK
KyAgICBhbmltYXRpb24tPnNldERpcmVjdGlvbihBbmltYXRpb246OkFuaW1hdGlvbkRpcmVjdGlv
bkFsdGVybmF0ZSk7CisgICAgYW5pbWF0aW9uLT5zZXRJdGVyYXRpb25Db3VudCgyKTsKKworICAg
IEludFNpemUgYm94U2l6ZTsKKyAgICBtX2dyYXBoaWNzTGF5ZXItPmFkZEFuaW1hdGlvbih2YWx1
ZXMsIGJveFNpemUsIGFuaW1hdGlvbi5nZXQoKSwgIiIsIDApOworCisgICAgRVhQRUNUX1RSVUUo
bV9wbGF0Zm9ybUxheWVyLT5sYXllckFuaW1hdGlvbkNvbnRyb2xsZXIoKS0+aGFzQWN0aXZlQW5p
bWF0aW9uKCkpOworCisgICAgQ0NBY3RpdmVBbmltYXRpb24qIGFjdGl2ZUFuaW1hdGlvbiA9IG1f
cGxhdGZvcm1MYXllci0+bGF5ZXJBbmltYXRpb25Db250cm9sbGVyKCktPmdldEFjdGl2ZUFuaW1h
dGlvbihDQ0FjdGl2ZUFuaW1hdGlvbjo6VHJhbnNmb3JtKTsKKyAgICBFWFBFQ1RfVFJVRShhY3Rp
dmVBbmltYXRpb24pOworICAgIEVYUEVDVF9UUlVFKGFjdGl2ZUFuaW1hdGlvbi0+YWx0ZXJuYXRl
c0RpcmVjdGlvbigpKTsKKworICAgIEVYUEVDVF9FUSgyLCBhY3RpdmVBbmltYXRpb24tPml0ZXJh
dGlvbnMoKSk7CisgICAgRVhQRUNUX0VRKENDQWN0aXZlQW5pbWF0aW9uOjpUcmFuc2Zvcm0sIGFj
dGl2ZUFuaW1hdGlvbi0+dGFyZ2V0UHJvcGVydHkoKSk7CisKKyAgICBFWFBFQ1RfRVEoQ0NBbmlt
YXRpb25DdXJ2ZTo6VHJhbnNmb3JtLCBhY3RpdmVBbmltYXRpb24tPmN1cnZlKCktPnR5cGUoKSk7
CisKKyAgICBjb25zdCBDQ1RyYW5zZm9ybUFuaW1hdGlvbkN1cnZlKiBjdXJ2ZSA9IGFjdGl2ZUFu
aW1hdGlvbi0+Y3VydmUoKS0+dG9UcmFuc2Zvcm1BbmltYXRpb25DdXJ2ZSgpOworICAgIEVYUEVD
VF9UUlVFKGN1cnZlKTsKKworICAgIGV4cGVjdFRyYW5zbGF0ZVgoMiwgY3VydmUtPmdldFZhbHVl
KDApKTsKKyAgICBleHBlY3RUcmFuc2xhdGVYKDQsIGN1cnZlLT5nZXRWYWx1ZShkdXJhdGlvbikp
OworfQorCitURVNUX0YoR3JhcGhpY3NMYXllckNocm9taXVtVGVzdCwgY3JlYXRlUmV2ZXJzZWRB
bHRlcm5hdGluZ0FuaW1hdGlvbikKK3sKKyAgICBjb25zdCBkb3VibGUgZHVyYXRpb24gPSAxOwor
ICAgIFdlYkNvcmU6OktleWZyYW1lVmFsdWVMaXN0IHZhbHVlcyhBbmltYXRlZFByb3BlcnR5V2Vi
a2l0VHJhbnNmb3JtKTsKKworICAgIFRyYW5zZm9ybU9wZXJhdGlvbnMgb3BlcmF0aW9uczE7Cisg
ICAgb3BlcmF0aW9uczEub3BlcmF0aW9ucygpLmFwcGVuZChUcmFuc2xhdGVUcmFuc2Zvcm1PcGVy
YXRpb246OmNyZWF0ZShMZW5ndGgoMiwgRml4ZWQpLCBMZW5ndGgoMCwgRml4ZWQpLCBUcmFuc2Zv
cm1PcGVyYXRpb246OlRSQU5TTEFURV9YKSk7CisgICAgdmFsdWVzLmluc2VydChuZXcgVHJhbnNm
b3JtQW5pbWF0aW9uVmFsdWUoMCwgJm9wZXJhdGlvbnMxKSk7CisKKyAgICBUcmFuc2Zvcm1PcGVy
YXRpb25zIG9wZXJhdGlvbnMyOworICAgIG9wZXJhdGlvbnMyLm9wZXJhdGlvbnMoKS5hcHBlbmQo
VHJhbnNsYXRlVHJhbnNmb3JtT3BlcmF0aW9uOjpjcmVhdGUoTGVuZ3RoKDQsIEZpeGVkKSwgTGVu
Z3RoKDAsIEZpeGVkKSwgVHJhbnNmb3JtT3BlcmF0aW9uOjpUUkFOU0xBVEVfWCkpOworICAgIHZh
bHVlcy5pbnNlcnQobmV3IFRyYW5zZm9ybUFuaW1hdGlvblZhbHVlKGR1cmF0aW9uLCAmb3BlcmF0
aW9uczIpKTsKKworICAgIFJlZlB0cjxBbmltYXRpb24+IGFuaW1hdGlvbiA9IEFuaW1hdGlvbjo6
Y3JlYXRlKCk7CisgICAgYW5pbWF0aW9uLT5zZXREdXJhdGlvbihkdXJhdGlvbik7CisgICAgYW5p
bWF0aW9uLT5zZXREaXJlY3Rpb24oQW5pbWF0aW9uOjpBbmltYXRpb25EaXJlY3Rpb25BbHRlcm5h
dGVSZXZlcnNlKTsKKyAgICBhbmltYXRpb24tPnNldEl0ZXJhdGlvbkNvdW50KDIpOwogCi0gICAg
QVNTRVJUX1RSVUUocGxhdGZvcm1MYXllci0+aGFzQWN0aXZlQW5pbWF0aW9uKCkpOworICAgIElu
dFNpemUgYm94U2l6ZTsKKyAgICBtX2dyYXBoaWNzTGF5ZXItPmFkZEFuaW1hdGlvbih2YWx1ZXMs
IGJveFNpemUsIGFuaW1hdGlvbi5nZXQoKSwgIiIsIDApOwogCi0gICAgZ3JhcGhpY3NMYXllci0+
c2V0UHJlc2VydmVzM0QodHJ1ZSk7CisgICAgRVhQRUNUX1RSVUUobV9wbGF0Zm9ybUxheWVyLT5s
YXllckFuaW1hdGlvbkNvbnRyb2xsZXIoKS0+aGFzQWN0aXZlQW5pbWF0aW9uKCkpOwogCi0gICAg
cGxhdGZvcm1MYXllciA9IHN0YXRpY19jYXN0PExheWVyQ2hyb21pdW0qPihncmFwaGljc0xheWVy
LT5wbGF0Zm9ybUxheWVyKCkpOwotICAgIEFTU0VSVF9UUlVFKHBsYXRmb3JtTGF5ZXIpOworICAg
IENDQWN0aXZlQW5pbWF0aW9uKiBhY3RpdmVBbmltYXRpb24gPSBtX3BsYXRmb3JtTGF5ZXItPmxh
eWVyQW5pbWF0aW9uQ29udHJvbGxlcigpLT5nZXRBY3RpdmVBbmltYXRpb24oQ0NBY3RpdmVBbmlt
YXRpb246OlRyYW5zZm9ybSk7CisgICAgRVhQRUNUX1RSVUUoYWN0aXZlQW5pbWF0aW9uKTsKKyAg
ICBFWFBFQ1RfVFJVRShhY3RpdmVBbmltYXRpb24tPmFsdGVybmF0ZXNEaXJlY3Rpb24oKSk7CiAK
LSAgICBBU1NFUlRfVFJVRShwbGF0Zm9ybUxheWVyLT5oYXNBY3RpdmVBbmltYXRpb24oKSk7Ci0g
ICAgcGxhdGZvcm1MYXllci0+cmVtb3ZlQW5pbWF0aW9uKDApOwotICAgIEFTU0VSVF9GQUxTRShw
bGF0Zm9ybUxheWVyLT5oYXNBY3RpdmVBbmltYXRpb24oKSk7CisgICAgRVhQRUNUX0VRKDIsIGFj
dGl2ZUFuaW1hdGlvbi0+aXRlcmF0aW9ucygpKTsKKyAgICBFWFBFQ1RfRVEoQ0NBY3RpdmVBbmlt
YXRpb246OlRyYW5zZm9ybSwgYWN0aXZlQW5pbWF0aW9uLT50YXJnZXRQcm9wZXJ0eSgpKTsKIAot
ICAgIGdyYXBoaWNzTGF5ZXItPnNldFByZXNlcnZlczNEKGZhbHNlKTsKKyAgICBFWFBFQ1RfRVEo
Q0NBbmltYXRpb25DdXJ2ZTo6VHJhbnNmb3JtLCBhY3RpdmVBbmltYXRpb24tPmN1cnZlKCktPnR5
cGUoKSk7CiAKLSAgICBwbGF0Zm9ybUxheWVyID0gc3RhdGljX2Nhc3Q8TGF5ZXJDaHJvbWl1bSo+
KGdyYXBoaWNzTGF5ZXItPnBsYXRmb3JtTGF5ZXIoKSk7Ci0gICAgQVNTRVJUX1RSVUUocGxhdGZv
cm1MYXllcik7CisgICAgY29uc3QgQ0NUcmFuc2Zvcm1BbmltYXRpb25DdXJ2ZSogY3VydmUgPSBh
Y3RpdmVBbmltYXRpb24tPmN1cnZlKCktPnRvVHJhbnNmb3JtQW5pbWF0aW9uQ3VydmUoKTsKKyAg
ICBFWFBFQ1RfVFJVRShjdXJ2ZSk7CiAKLSAgICBBU1NFUlRfRkFMU0UocGxhdGZvcm1MYXllci0+
aGFzQWN0aXZlQW5pbWF0aW9uKCkpOworICAgIGV4cGVjdFRyYW5zbGF0ZVgoNCwgY3VydmUtPmdl
dFZhbHVlKDApKTsKKyAgICBleHBlY3RUcmFuc2xhdGVYKDIsIGN1cnZlLT5nZXRWYWx1ZShkdXJh
dGlvbikpOwogfQogCiB9IC8vIG5hbWVzcGFjZQo=
</data>

          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>145309</attachid>
            <date>2012-06-01 08:04:10 -0700</date>
            <delta_ts>2012-06-01 09:53:16 -0700</delta_ts>
            <desc>Patch</desc>
            <filename>bug-87686-20120601110409.patch</filename>
            <type>text/plain</type>
            <size>100569</size>
            <attacher>vollick</attacher>
            
              <data encoding="base64">U3VidmVyc2lvbiBSZXZpc2lvbjogMTE5MjE5CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9D
aGFuZ2VMb2cgYi9Tb3VyY2UvV2ViQ29yZS9DaGFuZ2VMb2cKaW5kZXggMTk5MzBlM2EzNjQ3Y2I3
NTI4MGI3OWQ5YzIwYTFkOWIzMTI1ZDU3ZS4uNWRmM2FhOWNmNmY1OTk1NzY3YzdhODljN2YzZjYz
ZGM2ZDY5OWUyYyAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvQ2hhbmdlTG9nCisrKyBiL1Nv
dXJjZS9XZWJDb3JlL0NoYW5nZUxvZwpAQCAtMSwzICsxLDY4IEBACisyMDEyLTA1LTMxICBJYW4g
Vm9sbGljayAgPHZvbGxpY2tAY2hyb21pdW0ub3JnPgorCisgICAgICAgIFtjaHJvbWl1bV0gQWNj
ZWxlcmF0ZWQgYW5pbWF0aW9ucyBzaG91bGQgdXNlIFdlYlRyYW5zZm9ybU9wZXJhdGlvbnMKKyAg
ICAgICAgaHR0cHM6Ly9idWdzLndlYmtpdC5vcmcvc2hvd19idWcuY2dpP2lkPTg3Njg2CisKKyAg
ICAgICAgUmV2aWV3ZWQgYnkgSmFtZXMgUm9iaW5zb24uCisKKyAgICAgICAgQ0NUcmFuc2Zvcm1L
ZXlmcmFtZSBuZXcgb3ducyBhIFdlYlRyYW5zZm9ybU9wZXJhdGlvbnMgcmF0aGVyIHRoYW4gYQor
ICAgICAgICBUcmFuc2Zvcm1PcGVyYXRpb25zLiBMYXllckNocm9taXVtJ3MgQVBJIGhhcyBiZWVu
IGNoYW5nZWQgc28gdGhhdAorICAgICAgICBMYXllckNocm9taXVtOjphZGRBbmltYXRpb24gc2hv
dWxkIHRha2Ugb25seSBhIENDQWN0aXZlQW5pbWF0aW9uLgorICAgICAgICBHcmFwaGljc0xheWVy
Q2hyb21pdW0gaXMgbmV3IHJlc3BvbnNpYmxlIGZvciB0cmFuc2xhdGluZyB0bworICAgICAgICBX
ZWJUcmFuc2Zvcm1PcGVyYXRpb25zIGFuZCBjcmVhdGluZyBDQ0FjdGl2ZUFuaW1hdGlvbnMuIFRl
c3RzIHRoYXQgdXNlCisgICAgICAgIHRoZSBwdWJsaWMgQVBJICh0aGF0IGlzLCB0aGV5IGNhbGwg
YWRkQW5pbWF0aW9uIHdpdGggS2V5ZnJhbWVWYWx1ZUxpc3QKKyAgICAgICAgYW5kIEFuaW1hdGlv
biBhcmd1bWVudHMpIGhhdmUgYmVlbiBtb3ZlZCB0byBHcmFwaGljc0xheWVyQ2hyb21pdW1UZXN0
LgorCisgICAgICAgIFVuaXQgdGVzdHM6CisgICAgICAgICAgICBHcmFwaGljc0xheWVyQ2hyb21p
dW1UZXN0LmNyZWF0ZU9wYWNpdHlBbmltYXRpb24KKyAgICAgICAgICAgIEdyYXBoaWNzTGF5ZXJD
aHJvbWl1bVRlc3QuY3JlYXRlVHJhbnNmb3JtQW5pbWF0aW9uCisgICAgICAgICAgICBHcmFwaGlj
c0xheWVyQ2hyb21pdW1UZXN0LmNyZWF0ZVRyYW5zZm9ybUFuaW1hdGlvbldpdGhCaWdSb3RhdGlv
bgorICAgICAgICAgICAgR3JhcGhpY3NMYXllckNocm9taXVtVGVzdC5jcmVhdGVUcmFuc2Zvcm1B
bmltYXRpb25XaXRoU2luZ3VsYXJNYXRyaXgKKyAgICAgICAgICAgIEdyYXBoaWNzTGF5ZXJDaHJv
bWl1bVRlc3QuY3JlYXRlUmV2ZXJzZWRBbmltYXRpb24KKyAgICAgICAgICAgIEdyYXBoaWNzTGF5
ZXJDaHJvbWl1bVRlc3QuY3JlYXRlQWx0ZXJuYXRpbmdBbmltYXRpb24KKyAgICAgICAgICAgIEdy
YXBoaWNzTGF5ZXJDaHJvbWl1bVRlc3QuY3JlYXRlUmV2ZXJzZWRBbHRlcm5hdGluZ0FuaW1hdGlv
bgorCisgICAgICAgICogV2ViQ29yZS5neXBpOgorICAgICAgICAqIHBsYXRmb3JtL2dyYXBoaWNz
L2Nocm9taXVtL0FuaW1hdGlvblRyYW5zbGF0aW9uVXRpbC5jcHA6IEFkZGVkLgorICAgICAgICAo
V2ViQ29yZSk6CisgICAgICAgIChXZWJDb3JlOjp0b1dlYlRyYW5zZm9ybU9wZXJhdGlvbnMpOgor
ICAgICAgICAoV2ViQ29yZTo6YXBwZW5kS2V5ZnJhbWUpOgorICAgICAgICAoV2ViQ29yZTo6Q0NL
ZXlmcmFtZWRUcmFuc2Zvcm1BbmltYXRpb25DdXJ2ZSk6CisgICAgICAgIChXZWJDb3JlOjpjcmVh
dGVBY3RpdmVBbmltYXRpb24pOgorICAgICAgICAqIHBsYXRmb3JtL2dyYXBoaWNzL2Nocm9taXVt
L0FuaW1hdGlvblRyYW5zbGF0aW9uVXRpbC5oOiBBZGRlZC4KKyAgICAgICAgKFdlYkNvcmUpOgor
ICAgICAgICAqIHBsYXRmb3JtL2dyYXBoaWNzL2Nocm9taXVtL0dyYXBoaWNzTGF5ZXJDaHJvbWl1
bS5jcHA6CisgICAgICAgIChXZWJDb3JlOjpHcmFwaGljc0xheWVyQ2hyb21pdW06OmFkZEFuaW1h
dGlvbik6CisgICAgICAgICogcGxhdGZvcm0vZ3JhcGhpY3MvY2hyb21pdW0vTGF5ZXJDaHJvbWl1
bS5jcHA6CisgICAgICAgIChXZWJDb3JlOjpMYXllckNocm9taXVtOjphZGRBbmltYXRpb24pOgor
ICAgICAgICAqIHBsYXRmb3JtL2dyYXBoaWNzL2Nocm9taXVtL0xheWVyQ2hyb21pdW0uaDoKKyAg
ICAgICAgKFdlYkNvcmUpOgorICAgICAgICAoTGF5ZXJDaHJvbWl1bSk6CisgICAgICAgICogcGxh
dGZvcm0vZ3JhcGhpY3MvY2hyb21pdW0vTGlua0hpZ2hsaWdodC5jcHA6CisgICAgICAgIChXZWJD
b3JlOjpMaW5rSGlnaGxpZ2h0OjpMaW5rSGlnaGxpZ2h0KToKKyAgICAgICAgKiBwbGF0Zm9ybS9n
cmFwaGljcy9jaHJvbWl1bS9jYy9DQ0FuaW1hdGlvbkN1cnZlLmg6CisgICAgICAgIChDQ1RyYW5z
Zm9ybUFuaW1hdGlvbkN1cnZlKToKKyAgICAgICAgKiBwbGF0Zm9ybS9ncmFwaGljcy9jaHJvbWl1
bS9jYy9DQ0tleWZyYW1lZEFuaW1hdGlvbkN1cnZlLmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OkND
VHJhbnNmb3JtS2V5ZnJhbWU6OmNyZWF0ZSk6CisgICAgICAgIChXZWJDb3JlOjpDQ1RyYW5zZm9y
bUtleWZyYW1lOjpDQ1RyYW5zZm9ybUtleWZyYW1lKToKKyAgICAgICAgKFdlYkNvcmU6OkNDVHJh
bnNmb3JtS2V5ZnJhbWU6OnZhbHVlKToKKyAgICAgICAgKFdlYkNvcmU6OkNDVHJhbnNmb3JtS2V5
ZnJhbWU6OmNsb25lKToKKyAgICAgICAgKFdlYkNvcmU6OkNDS2V5ZnJhbWVkVHJhbnNmb3JtQW5p
bWF0aW9uQ3VydmU6OmdldFZhbHVlKToKKyAgICAgICAgKiBwbGF0Zm9ybS9ncmFwaGljcy9jaHJv
bWl1bS9jYy9DQ0tleWZyYW1lZEFuaW1hdGlvbkN1cnZlLmg6CisgICAgICAgIChDQ1RyYW5zZm9y
bUtleWZyYW1lKToKKyAgICAgICAgKENDS2V5ZnJhbWVkVHJhbnNmb3JtQW5pbWF0aW9uQ3VydmUp
OgorICAgICAgICAqIHBsYXRmb3JtL2dyYXBoaWNzL2Nocm9taXVtL2NjL0NDTGF5ZXJBbmltYXRp
b25Db250cm9sbGVyLmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OkNDTGF5ZXJBbmltYXRpb25Db250
cm9sbGVyOjpyZW1vdmVBbmltYXRpb24pOgorICAgICAgICAoV2ViQ29yZSk6CisgICAgICAgIChX
ZWJDb3JlOjpDQ0xheWVyQW5pbWF0aW9uQ29udHJvbGxlcjo6YWRkQW5pbWF0aW9uKToKKyAgICAg
ICAgKFdlYkNvcmU6OkNDTGF5ZXJBbmltYXRpb25Db250cm9sbGVyOjpnZXRBY3RpdmVBbmltYXRp
b24pOgorICAgICAgICAoV2ViQ29yZTo6Q0NMYXllckFuaW1hdGlvbkNvbnRyb2xsZXI6OnB1c2hO
ZXdBbmltYXRpb25zVG9JbXBsVGhyZWFkKToKKyAgICAgICAgKFdlYkNvcmU6OkNDTGF5ZXJBbmlt
YXRpb25Db250cm9sbGVyOjpyZXBsYWNlSW1wbFRocmVhZEFuaW1hdGlvbnMpOgorICAgICAgICAo
V2ViQ29yZTo6Q0NMYXllckFuaW1hdGlvbkNvbnRyb2xsZXI6OnRpY2tBbmltYXRpb25zKToKKyAg
ICAgICAgKiBwbGF0Zm9ybS9ncmFwaGljcy9jaHJvbWl1bS9jYy9DQ0xheWVyQW5pbWF0aW9uQ29u
dHJvbGxlci5oOgorICAgICAgICAoQ0NMYXllckFuaW1hdGlvbkNvbnRyb2xsZXJDbGllbnQpOgor
ICAgICAgICAoQ0NMYXllckFuaW1hdGlvbkNvbnRyb2xsZXIpOgorCiAyMDEyLTA2LTAxICBNT1JJ
VEEgSGFqaW1lICA8bW9ycml0YUBnb29nbGUuY29tPgogCiAgICAgICAgIEZyYW1lOjp3aWxsRGV0
YWNoUGFnZSgpIHNob3VsZG4ndCBiZSBjYWxsZWQgbW9yZSB0aGFuIG9uY2UuCmRpZmYgLS1naXQg
YS9Tb3VyY2UvV2ViS2l0L2Nocm9taXVtL0NoYW5nZUxvZyBiL1NvdXJjZS9XZWJLaXQvY2hyb21p
dW0vQ2hhbmdlTG9nCmluZGV4IDkzNjFhNDg1YjhmYjUxZDBiZTcwYjhhZDdmZTg1ZDZlNTM1NGU0
NjAuLmFiZTIzNGZjOTJhYjhlYTViYTY3NzZmYTRkZTY3ZjQxZGQ4NDQ5NDggMTAwNjQ0Ci0tLSBh
L1NvdXJjZS9XZWJLaXQvY2hyb21pdW0vQ2hhbmdlTG9nCisrKyBiL1NvdXJjZS9XZWJLaXQvY2hy
b21pdW0vQ2hhbmdlTG9nCkBAIC0xLDMgKzEsNDIgQEAKKzIwMTItMDUtMzEgIElhbiBWb2xsaWNr
ICA8dm9sbGlja0BjaHJvbWl1bS5vcmc+CisKKyAgICAgICAgW2Nocm9taXVtXSBBY2NlbGVyYXRl
ZCBhbmltYXRpb25zIHNob3VsZCB1c2UgV2ViVHJhbnNmb3JtT3BlcmF0aW9ucworICAgICAgICBo
dHRwczovL2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9ODc2ODYKKworICAgICAgICBS
ZXZpZXdlZCBieSBKYW1lcyBSb2JpbnNvbi4KKworICAgICAgICBDQ1RyYW5zZm9ybUtleWZyYW1l
IG5ldyBvd25zIGEgV2ViVHJhbnNmb3JtT3BlcmF0aW9ucyByYXRoZXIgdGhhbiBhCisgICAgICAg
IFRyYW5zZm9ybU9wZXJhdGlvbnMuIExheWVyQ2hyb21pdW0ncyBBUEkgaGFzIGJlZW4gY2hhbmdl
ZCBzbyB0aGF0CisgICAgICAgIExheWVyQ2hyb21pdW06OmFkZEFuaW1hdGlvbiBzaG91bGQgdGFr
ZSBvbmx5IGEgQ0NBY3RpdmVBbmltYXRpb24uCisgICAgICAgIEdyYXBoaWNzTGF5ZXJDaHJvbWl1
bSBpcyBuZXcgcmVzcG9uc2libGUgZm9yIHRyYW5zbGF0aW5nIHRvCisgICAgICAgIFdlYlRyYW5z
Zm9ybU9wZXJhdGlvbnMgYW5kIGNyZWF0aW5nIENDQWN0aXZlQW5pbWF0aW9ucy4gVGVzdHMgdGhh
dCB1c2UKKyAgICAgICAgdGhlIHB1YmxpYyBBUEkgKHRoYXQgaXMsIHRoZXkgY2FsbCBhZGRBbmlt
YXRpb24gd2l0aCBLZXlmcmFtZVZhbHVlTGlzdAorICAgICAgICBhbmQgQW5pbWF0aW9uIGFyZ3Vt
ZW50cykgaGF2ZSBiZWVuIG1vdmVkIHRvIEdyYXBoaWNzTGF5ZXJDaHJvbWl1bVRlc3QuCisKKyAg
ICAgICAgKiB0ZXN0cy9DQ0FuaW1hdGlvblRlc3RDb21tb24uY3BwOgorICAgICAgICAoV2ViQ29y
ZTo6YWRkT3BhY2l0eVRyYW5zaXRpb24pOgorICAgICAgICAoV2ViQ29yZTo6YWRkQW5pbWF0ZWRU
cmFuc2Zvcm0pOgorICAgICAgICAoV2ViS2l0VGVzdHM6OkZha2VUcmFuc2Zvcm1UcmFuc2l0aW9u
OjpnZXRWYWx1ZSk6CisgICAgICAgICogdGVzdHMvQ0NBbmltYXRpb25UZXN0Q29tbW9uLmg6Cisg
ICAgICAgICogdGVzdHMvQ0NLZXlmcmFtZWRBbmltYXRpb25DdXJ2ZVRlc3QuY3BwOgorICAgICAg
ICAoV2ViQ29yZTo6VEVTVCk6CisgICAgICAgICogdGVzdHMvQ0NMYXllckFuaW1hdGlvbkNvbnRy
b2xsZXJUZXN0LmNwcDoKKyAgICAgICAgKFdlYktpdFRlc3RzOjpURVNUKToKKyAgICAgICAgKiB0
ZXN0cy9DQ0xheWVyVHJlZUhvc3RUZXN0LmNwcDoKKyAgICAgICAgKFdURjo6Q0NMYXllclRyZWVI
b3N0VGVzdExheWVyQWRkZWRXaXRoQW5pbWF0aW9uOjpiZWdpblRlc3QpOgorICAgICAgICAqIHRl
c3RzL0dyYXBoaWNzTGF5ZXJDaHJvbWl1bVRlc3QuY3BwOgorICAgICAgICAoTW9ja0xheWVyVHJl
ZUhvc3RDbGllbnQpOgorICAgICAgICAoV2ViS2l0VGVzdHMpOgorICAgICAgICAoTW9ja0xheWVy
VHJlZUhvc3QpOgorICAgICAgICAoV2ViS2l0VGVzdHM6Ok1vY2tMYXllclRyZWVIb3N0OjpjcmVh
dGUpOgorICAgICAgICAoV2ViS2l0VGVzdHM6Ok1vY2tMYXllclRyZWVIb3N0OjpjcmVhdGVMYXll
clRyZWVIb3N0SW1wbCk6CisgICAgICAgIChXZWJLaXRUZXN0czo6TW9ja0xheWVyVHJlZUhvc3Q6
Ok1vY2tMYXllclRyZWVIb3N0KToKKyAgICAgICAgKEdyYXBoaWNzTGF5ZXJDaHJvbWl1bVRlc3Qp
OgorICAgICAgICAoV2ViS2l0VGVzdHM6OkdyYXBoaWNzTGF5ZXJDaHJvbWl1bVRlc3Q6OkdyYXBo
aWNzTGF5ZXJDaHJvbWl1bVRlc3QpOgorICAgICAgICAoV2ViS2l0VGVzdHM6OkdyYXBoaWNzTGF5
ZXJDaHJvbWl1bVRlc3Q6On5HcmFwaGljc0xheWVyQ2hyb21pdW1UZXN0KToKKyAgICAgICAgKFdl
YktpdFRlc3RzOjpHcmFwaGljc0xheWVyQ2hyb21pdW1UZXN0OjpleHBlY3RUcmFuc2xhdGVYKToK
KyAgICAgICAgKFdlYktpdFRlc3RzOjpURVNUX0YpOgorCiAyMDEyLTA2LTAxICBQZXRlciBCZXZl
cmxvbyAgPHBldGVyQGNocm9taXVtLm9yZz4KIAogICAgICAgICBVbnJldmlld2VkLiAgUm9sbGVk
IERFUFMuCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9XZWJDb3JlLmd5cGkgYi9Tb3VyY2Uv
V2ViQ29yZS9XZWJDb3JlLmd5cGkKaW5kZXggMThhNTE0ZjI1MzMxMTMyMzI0NDM4YTNhMWIxNzgz
MzA2MDk5ZDZmNy4uMzQ4NGE3MjA1OWQ3ZGJkNTRhNzM0Njk0YzNmZTZlOTI1YmIzZWI1NSAxMDA2
NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvV2ViQ29yZS5neXBpCisrKyBiL1NvdXJjZS9XZWJDb3Jl
L1dlYkNvcmUuZ3lwaQpAQCAtMzU2NCw2ICszNTY0LDggQEAKICAgICAgICAgICAgICdwbGF0Zm9y
bS9ncmFwaGljcy9jZy9UcmFuc2Zvcm1hdGlvbk1hdHJpeENHLmNwcCcsCiAgICAgICAgICAgICAn
cGxhdGZvcm0vZ3JhcGhpY3MvY2hyb21pdW0vQW5pbWF0aW9uSWRWZW5kb3IuY3BwJywKICAgICAg
ICAgICAgICdwbGF0Zm9ybS9ncmFwaGljcy9jaHJvbWl1bS9BbmltYXRpb25JZFZlbmRvci5oJywK
KyAgICAgICAgICAgICdwbGF0Zm9ybS9ncmFwaGljcy9jaHJvbWl1bS9BbmltYXRpb25UcmFuc2xh
dGlvblV0aWwuY3BwJywKKyAgICAgICAgICAgICdwbGF0Zm9ybS9ncmFwaGljcy9jaHJvbWl1bS9B
bmltYXRpb25UcmFuc2xhdGlvblV0aWwuaCcsCiAgICAgICAgICAgICAncGxhdGZvcm0vZ3JhcGhp
Y3MvY2hyb21pdW0vQml0bWFwQ2FudmFzTGF5ZXJUZXh0dXJlVXBkYXRlci5jcHAnLAogICAgICAg
ICAgICAgJ3BsYXRmb3JtL2dyYXBoaWNzL2Nocm9taXVtL0JpdG1hcENhbnZhc0xheWVyVGV4dHVy
ZVVwZGF0ZXIuaCcsCiAgICAgICAgICAgICAncGxhdGZvcm0vZ3JhcGhpY3MvY2hyb21pdW0vQml0
bWFwU2tQaWN0dXJlQ2FudmFzTGF5ZXJUZXh0dXJlVXBkYXRlci5jcHAnLApAQCAtNjY0Myw3ICs2
NjQ1LDcgQEAKICAgICAgICAgICAgICdpbnNwZWN0b3IvZnJvbnQtZW5kL0ltYWdlcy9zZWFyY2hT
bWFsbEdyYXkucG5nJywKICAgICAgICAgICAgICdpbnNwZWN0b3IvZnJvbnQtZW5kL0ltYWdlcy9z
ZWFyY2hTbWFsbFdoaXRlLnBuZycsCiAgICAgICAgICAgICAnaW5zcGVjdG9yL2Zyb250LWVuZC9J
bWFnZXMvc2VhcmNoTmV4dC5wbmcnLAotICAgICAgICAgICAgJ2luc3BlY3Rvci9mcm9udC1lbmQv
SW1hZ2VzL3NlYXJjaFByZXYucG5nJywgICAgICAgICAgICAKKyAgICAgICAgICAgICdpbnNwZWN0
b3IvZnJvbnQtZW5kL0ltYWdlcy9zZWFyY2hQcmV2LnBuZycsCiAgICAgICAgICAgICAnaW5zcGVj
dG9yL2Zyb250LWVuZC9JbWFnZXMvc2VnbWVudC5wbmcnLAogICAgICAgICAgICAgJ2luc3BlY3Rv
ci9mcm9udC1lbmQvSW1hZ2VzL3NlZ21lbnRFbmQucG5nJywKICAgICAgICAgICAgICdpbnNwZWN0
b3IvZnJvbnQtZW5kL0ltYWdlcy9zZWdtZW50SG92ZXIucG5nJywKZGlmZiAtLWdpdCBhL1NvdXJj
ZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2Nocm9taXVtL0FuaW1hdGlvblRyYW5zbGF0aW9u
VXRpbC5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9jaHJvbWl1bS9Bbmlt
YXRpb25UcmFuc2xhdGlvblV0aWwuY3BwCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAuLjA3ZWRiNmQ2YmEyMjkxMjE0ZTgw
NmMzMTM4OGU0OTZlNTE0ODJiMWYKLS0tIC9kZXYvbnVsbAorKysgYi9Tb3VyY2UvV2ViQ29yZS9w
bGF0Zm9ybS9ncmFwaGljcy9jaHJvbWl1bS9BbmltYXRpb25UcmFuc2xhdGlvblV0aWwuY3BwCkBA
IC0wLDAgKzEsMjM0IEBACisvKgorICogQ29weXJpZ2h0IChDKSAyMDEwIEdvb2dsZSBJbmMuIEFs
bCByaWdodHMgcmVzZXJ2ZWQuCisgKgorICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3Vy
Y2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CisgKiBtb2RpZmljYXRpb24sIGFy
ZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMgYXJlCisg
KiBtZXQ6CisgKgorICogICAgICogUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3Qg
cmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRp
dGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KKyAqICAgICAqIFJlZGlzdHJpYnV0
aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUKKyAqIGNvcHlyaWdo
dCBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2Ns
YWltZXIKKyAqIGluIHRoZSBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJv
dmlkZWQgd2l0aCB0aGUKKyAqIGRpc3RyaWJ1dGlvbi4KKyAqICAgICAqIE5laXRoZXIgdGhlIG5h
bWUgb2YgR29vZ2xlIEluYy4gbm9yIHRoZSBuYW1lcyBvZiBpdHMKKyAqIGNvbnRyaWJ1dG9ycyBt
YXkgYmUgdXNlZCB0byBlbmRvcnNlIG9yIHByb21vdGUgcHJvZHVjdHMgZGVyaXZlZCBmcm9tCisg
KiB0aGlzIHNvZnR3YXJlIHdpdGhvdXQgc3BlY2lmaWMgcHJpb3Igd3JpdHRlbiBwZXJtaXNzaW9u
LgorICoKKyAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgVEhFIENPUFlSSUdIVCBIT0xE
RVJTIEFORCBDT05UUklCVVRPUlMKKyAqICJBUyBJUyIgQU5EIEFOWSBFWFBSRVNTIE9SIElNUExJ
RUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UCisgKiBMSU1JVEVEIFRPLCBUSEUgSU1Q
TElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IKKyAqIEEg
UEFSVElDVUxBUiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiBJTiBOTyBFVkVOVCBTSEFMTCBUSEUg
Q09QWVJJR0hUCisgKiBPV05FUiBPUiBDT05UUklCVVRPUlMgQkUgTElBQkxFIEZPUiBBTlkgRElS
RUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwKKyAqIFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IgQ09O
U0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QKKyAqIExJTUlURUQgVE8sIFBS
T0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLAor
ICogREFUQSwgT1IgUFJPRklUUzsgT1IgQlVTSU5FU1MgSU5URVJSVVBUSU9OKSBIT1dFVkVSIENB
VVNFRCBBTkQgT04gQU5ZCisgKiBUSEVPUlkgT0YgTElBQklMSVRZLCBXSEVUSEVSIElOIENPTlRS
QUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUCisgKiAoSU5DTFVESU5HIE5FR0xJR0VOQ0Ug
T1IgT1RIRVJXSVNFKSBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UKKyAqIE9GIFRI
SVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBE
QU1BR0UuCisgKi8KKworI2luY2x1ZGUgImNvbmZpZy5oIgorCisjaW5jbHVkZSAiQW5pbWF0aW9u
VHJhbnNsYXRpb25VdGlsLmgiCisKKyNpbmNsdWRlICJGbG9hdFNpemUuaCIKKyNpbmNsdWRlICJH
cmFwaGljc0xheWVyLmgiCisjaW5jbHVkZSAiSWRlbnRpdHlUcmFuc2Zvcm1PcGVyYXRpb24uaCIK
KyNpbmNsdWRlICJMZW5ndGguaCIKKyNpbmNsdWRlICJMZW5ndGhGdW5jdGlvbnMuaCIKKyNpbmNs
dWRlICJNYXRyaXgzRFRyYW5zZm9ybU9wZXJhdGlvbi5oIgorI2luY2x1ZGUgIk1hdHJpeFRyYW5z
Zm9ybU9wZXJhdGlvbi5oIgorI2luY2x1ZGUgIlBlcnNwZWN0aXZlVHJhbnNmb3JtT3BlcmF0aW9u
LmgiCisjaW5jbHVkZSAiUm90YXRlVHJhbnNmb3JtT3BlcmF0aW9uLmgiCisjaW5jbHVkZSAiU2Nh
bGVUcmFuc2Zvcm1PcGVyYXRpb24uaCIKKyNpbmNsdWRlICJTa2V3VHJhbnNmb3JtT3BlcmF0aW9u
LmgiCisjaW5jbHVkZSAiVHJhbnNmb3JtT3BlcmF0aW9ucy5oIgorI2luY2x1ZGUgIlRyYW5zbGF0
ZVRyYW5zZm9ybU9wZXJhdGlvbi5oIgorCisjaW5jbHVkZSAiY2MvQ0NBY3RpdmVBbmltYXRpb24u
aCIKKyNpbmNsdWRlICJjYy9DQ0tleWZyYW1lZEFuaW1hdGlvbkN1cnZlLmgiCisKKyNpbmNsdWRl
IDxwdWJsaWMvV2ViVHJhbnNmb3JtT3BlcmF0aW9ucy5oPgorI2luY2x1ZGUgPHB1YmxpYy9XZWJU
cmFuc2Zvcm1hdGlvbk1hdHJpeC5oPgorCisjaW5jbHVkZSA8d3RmL093blB0ci5oPgorI2luY2x1
ZGUgPHd0Zi90ZXh0L0NTdHJpbmcuaD4KKwordXNpbmcgbmFtZXNwYWNlIHN0ZDsKK3VzaW5nIG5h
bWVzcGFjZSBXZWJLaXQ7CisKK25hbWVzcGFjZSBXZWJDb3JlIHsKKworV2ViVHJhbnNmb3JtT3Bl
cmF0aW9ucyB0b1dlYlRyYW5zZm9ybU9wZXJhdGlvbnMoY29uc3QgVHJhbnNmb3JtT3BlcmF0aW9u
cyYgdHJhbnNmb3JtT3BlcmF0aW9ucywgY29uc3QgRmxvYXRTaXplJiBib3hTaXplKQoreworICAg
IFdlYlRyYW5zZm9ybU9wZXJhdGlvbnMgd2ViVHJhbnNmb3JtT3BlcmF0aW9uczsKKyAgICBmb3Ig
KHNpemVfdCBqID0gMDsgaiA8IHRyYW5zZm9ybU9wZXJhdGlvbnMuc2l6ZSgpOyArK2opIHsKKyAg
ICAgICAgVHJhbnNmb3JtT3BlcmF0aW9uOjpPcGVyYXRpb25UeXBlIG9wZXJhdGlvblR5cGUgPSB0
cmFuc2Zvcm1PcGVyYXRpb25zLm9wZXJhdGlvbnMoKVtqXS0+Z2V0T3BlcmF0aW9uVHlwZSgpOwor
ICAgICAgICBzd2l0Y2ggKG9wZXJhdGlvblR5cGUpIHsKKyAgICAgICAgY2FzZSBUcmFuc2Zvcm1P
cGVyYXRpb246OlNDQUxFX1g6CisgICAgICAgIGNhc2UgVHJhbnNmb3JtT3BlcmF0aW9uOjpTQ0FM
RV9ZOgorICAgICAgICBjYXNlIFRyYW5zZm9ybU9wZXJhdGlvbjo6U0NBTEVfWjoKKyAgICAgICAg
Y2FzZSBUcmFuc2Zvcm1PcGVyYXRpb246OlNDQUxFXzNEOgorICAgICAgICBjYXNlIFRyYW5zZm9y
bU9wZXJhdGlvbjo6U0NBTEU6IHsKKyAgICAgICAgICAgIGNvbnN0IFNjYWxlVHJhbnNmb3JtT3Bl
cmF0aW9uKiB0cmFuc2Zvcm0gPSBzdGF0aWNfY2FzdDxjb25zdCBTY2FsZVRyYW5zZm9ybU9wZXJh
dGlvbio+KHRyYW5zZm9ybU9wZXJhdGlvbnMub3BlcmF0aW9ucygpW2pdLmdldCgpKTsKKyAgICAg
ICAgICAgIHdlYlRyYW5zZm9ybU9wZXJhdGlvbnMuYXBwZW5kU2NhbGUodHJhbnNmb3JtLT54KCks
IHRyYW5zZm9ybS0+eSgpLCB0cmFuc2Zvcm0tPnooKSk7CisgICAgICAgICAgICBicmVhazsKKyAg
ICAgICAgfQorICAgICAgICBjYXNlIFRyYW5zZm9ybU9wZXJhdGlvbjo6VFJBTlNMQVRFX1g6Cisg
ICAgICAgIGNhc2UgVHJhbnNmb3JtT3BlcmF0aW9uOjpUUkFOU0xBVEVfWToKKyAgICAgICAgY2Fz
ZSBUcmFuc2Zvcm1PcGVyYXRpb246OlRSQU5TTEFURV9aOgorICAgICAgICBjYXNlIFRyYW5zZm9y
bU9wZXJhdGlvbjo6VFJBTlNMQVRFXzNEOgorICAgICAgICBjYXNlIFRyYW5zZm9ybU9wZXJhdGlv
bjo6VFJBTlNMQVRFOiB7CisgICAgICAgICAgICBjb25zdCBUcmFuc2xhdGVUcmFuc2Zvcm1PcGVy
YXRpb24qIHRyYW5zZm9ybSA9IHN0YXRpY19jYXN0PGNvbnN0IFRyYW5zbGF0ZVRyYW5zZm9ybU9w
ZXJhdGlvbio+KHRyYW5zZm9ybU9wZXJhdGlvbnMub3BlcmF0aW9ucygpW2pdLmdldCgpKTsKKyAg
ICAgICAgICAgIHdlYlRyYW5zZm9ybU9wZXJhdGlvbnMuYXBwZW5kVHJhbnNsYXRlKGZsb2F0VmFs
dWVGb3JMZW5ndGgodHJhbnNmb3JtLT54KCksIGJveFNpemUud2lkdGgoKSksIGZsb2F0VmFsdWVG
b3JMZW5ndGgodHJhbnNmb3JtLT55KCksIGJveFNpemUuaGVpZ2h0KCkpLCBmbG9hdFZhbHVlRm9y
TGVuZ3RoKHRyYW5zZm9ybS0+eigpLCAxKSk7CisgICAgICAgICAgICBicmVhazsKKyAgICAgICAg
fQorICAgICAgICBjYXNlIFRyYW5zZm9ybU9wZXJhdGlvbjo6Uk9UQVRFX1g6CisgICAgICAgIGNh
c2UgVHJhbnNmb3JtT3BlcmF0aW9uOjpST1RBVEVfWToKKyAgICAgICAgY2FzZSBUcmFuc2Zvcm1P
cGVyYXRpb246OlJPVEFURV8zRDoKKyAgICAgICAgY2FzZSBUcmFuc2Zvcm1PcGVyYXRpb246OlJP
VEFURTogeworICAgICAgICAgICAgY29uc3QgUm90YXRlVHJhbnNmb3JtT3BlcmF0aW9uKiB0cmFu
c2Zvcm0gPSBzdGF0aWNfY2FzdDxjb25zdCBSb3RhdGVUcmFuc2Zvcm1PcGVyYXRpb24qPih0cmFu
c2Zvcm1PcGVyYXRpb25zLm9wZXJhdGlvbnMoKVtqXS5nZXQoKSk7CisgICAgICAgICAgICB3ZWJU
cmFuc2Zvcm1PcGVyYXRpb25zLmFwcGVuZFJvdGF0ZSh0cmFuc2Zvcm0tPngoKSwgdHJhbnNmb3Jt
LT55KCksIHRyYW5zZm9ybS0+eigpLCB0cmFuc2Zvcm0tPmFuZ2xlKCkpOworICAgICAgICAgICAg
YnJlYWs7CisgICAgICAgIH0KKyAgICAgICAgY2FzZSBUcmFuc2Zvcm1PcGVyYXRpb246OlNLRVdf
WDoKKyAgICAgICAgY2FzZSBUcmFuc2Zvcm1PcGVyYXRpb246OlNLRVdfWToKKyAgICAgICAgY2Fz
ZSBUcmFuc2Zvcm1PcGVyYXRpb246OlNLRVc6IHsKKyAgICAgICAgICAgIGNvbnN0IFNrZXdUcmFu
c2Zvcm1PcGVyYXRpb24qIHRyYW5zZm9ybSA9IHN0YXRpY19jYXN0PGNvbnN0IFNrZXdUcmFuc2Zv
cm1PcGVyYXRpb24qPih0cmFuc2Zvcm1PcGVyYXRpb25zLm9wZXJhdGlvbnMoKVtqXS5nZXQoKSk7
CisgICAgICAgICAgICB3ZWJUcmFuc2Zvcm1PcGVyYXRpb25zLmFwcGVuZFNrZXcodHJhbnNmb3Jt
LT5hbmdsZVgoKSwgdHJhbnNmb3JtLT5hbmdsZVkoKSk7CisgICAgICAgICAgICBicmVhazsKKyAg
ICAgICAgfQorICAgICAgICBjYXNlIFRyYW5zZm9ybU9wZXJhdGlvbjo6TUFUUklYOiB7CisgICAg
ICAgICAgICBjb25zdCBNYXRyaXhUcmFuc2Zvcm1PcGVyYXRpb24qIHRyYW5zZm9ybSA9IHN0YXRp
Y19jYXN0PGNvbnN0IE1hdHJpeFRyYW5zZm9ybU9wZXJhdGlvbio+KHRyYW5zZm9ybU9wZXJhdGlv
bnMub3BlcmF0aW9ucygpW2pdLmdldCgpKTsKKyAgICAgICAgICAgIFRyYW5zZm9ybWF0aW9uTWF0
cml4IG0gPSB0cmFuc2Zvcm0tPm1hdHJpeCgpOworICAgICAgICAgICAgd2ViVHJhbnNmb3JtT3Bl
cmF0aW9ucy5hcHBlbmRNYXRyaXgoV2ViVHJhbnNmb3JtYXRpb25NYXRyaXgobSkpOworICAgICAg
ICAgICAgYnJlYWs7CisgICAgICAgIH0KKyAgICAgICAgY2FzZSBUcmFuc2Zvcm1PcGVyYXRpb246
Ok1BVFJJWF8zRDogeworICAgICAgICAgICAgY29uc3QgTWF0cml4M0RUcmFuc2Zvcm1PcGVyYXRp
b24qIHRyYW5zZm9ybSA9IHN0YXRpY19jYXN0PGNvbnN0IE1hdHJpeDNEVHJhbnNmb3JtT3BlcmF0
aW9uKj4odHJhbnNmb3JtT3BlcmF0aW9ucy5vcGVyYXRpb25zKClbal0uZ2V0KCkpOworICAgICAg
ICAgICAgVHJhbnNmb3JtYXRpb25NYXRyaXggbSA9IHRyYW5zZm9ybS0+bWF0cml4KCk7CisgICAg
ICAgICAgICB3ZWJUcmFuc2Zvcm1PcGVyYXRpb25zLmFwcGVuZE1hdHJpeChXZWJUcmFuc2Zvcm1h
dGlvbk1hdHJpeChtKSk7CisgICAgICAgICAgICBicmVhazsKKyAgICAgICAgfQorICAgICAgICBj
YXNlIFRyYW5zZm9ybU9wZXJhdGlvbjo6UEVSU1BFQ1RJVkU6IHsKKyAgICAgICAgICAgIGNvbnN0
IFBlcnNwZWN0aXZlVHJhbnNmb3JtT3BlcmF0aW9uKiB0cmFuc2Zvcm0gPSBzdGF0aWNfY2FzdDxj
b25zdCBQZXJzcGVjdGl2ZVRyYW5zZm9ybU9wZXJhdGlvbio+KHRyYW5zZm9ybU9wZXJhdGlvbnMu
b3BlcmF0aW9ucygpW2pdLmdldCgpKTsKKyAgICAgICAgICAgIHdlYlRyYW5zZm9ybU9wZXJhdGlv
bnMuYXBwZW5kUGVyc3BlY3RpdmUoZmxvYXRWYWx1ZUZvckxlbmd0aCh0cmFuc2Zvcm0tPnBlcnNw
ZWN0aXZlKCksIDApKTsKKyAgICAgICAgICAgIGJyZWFrOworICAgICAgICB9CisgICAgICAgIGNh
c2UgVHJhbnNmb3JtT3BlcmF0aW9uOjpJREVOVElUWToKKyAgICAgICAgY2FzZSBUcmFuc2Zvcm1P
cGVyYXRpb246Ok5PTkU6CisgICAgICAgICAgICAvLyBEbyBub3RoaW5nLgorICAgICAgICAgICAg
YnJlYWs7CisgICAgICAgIH0gLy8gc3dpdGNoCisgICAgfSAvLyBmb3IgZWFjaCBvcGVyYXRpb24K
KworICAgIHJldHVybiB3ZWJUcmFuc2Zvcm1PcGVyYXRpb25zOworfQorCit0ZW1wbGF0ZSA8Y2xh
c3MgVmFsdWUsIGNsYXNzIEtleWZyYW1lLCBjbGFzcyBDdXJ2ZT4KK2Jvb2wgYXBwZW5kS2V5ZnJh
bWUoQ3VydmUmIGN1cnZlLCBkb3VibGUga2V5VGltZSwgY29uc3QgVmFsdWUqIHZhbHVlLCBQYXNz
T3duUHRyPENDVGltaW5nRnVuY3Rpb24+IHRpbWluZ0Z1bmN0aW9uLCBjb25zdCBGbG9hdFNpemUm
KQoreworICAgIGN1cnZlLmFkZEtleWZyYW1lKEtleWZyYW1lOjpjcmVhdGUoa2V5VGltZSwgdmFs
dWUtPnZhbHVlKCksIHRpbWluZ0Z1bmN0aW9uKSk7CisgICAgcmV0dXJuIHRydWU7Cit9CisKK3Rl
bXBsYXRlIDw+Citib29sIGFwcGVuZEtleWZyYW1lPFRyYW5zZm9ybUFuaW1hdGlvblZhbHVlLCBD
Q1RyYW5zZm9ybUtleWZyYW1lLCBDQ0tleWZyYW1lZFRyYW5zZm9ybUFuaW1hdGlvbkN1cnZlPihD
Q0tleWZyYW1lZFRyYW5zZm9ybUFuaW1hdGlvbkN1cnZlJiBjdXJ2ZSwgZG91YmxlIGtleVRpbWUs
IGNvbnN0IFRyYW5zZm9ybUFuaW1hdGlvblZhbHVlKiB2YWx1ZSwgUGFzc093blB0cjxDQ1RpbWlu
Z0Z1bmN0aW9uPiB0aW1pbmdGdW5jdGlvbiwgY29uc3QgRmxvYXRTaXplJiBib3hTaXplKQorewor
ICAgIFdlYlRyYW5zZm9ybU9wZXJhdGlvbnMgb3BlcmF0aW9ucyA9IHRvV2ViVHJhbnNmb3JtT3Bl
cmF0aW9ucygqdmFsdWUtPnZhbHVlKCksIGJveFNpemUpOworICAgIGlmIChvcGVyYXRpb25zLmFw
cGx5KCkuaXNJbnZlcnRpYmxlKCkpIHsKKyAgICAgICAgY3VydmUuYWRkS2V5ZnJhbWUoQ0NUcmFu
c2Zvcm1LZXlmcmFtZTo6Y3JlYXRlKGtleVRpbWUsIG9wZXJhdGlvbnMsIHRpbWluZ0Z1bmN0aW9u
KSk7CisgICAgICAgIHJldHVybiB0cnVlOworICAgIH0KKyAgICByZXR1cm4gZmFsc2U7Cit9CisK
K3RlbXBsYXRlIDxjbGFzcyBWYWx1ZSwgY2xhc3MgS2V5ZnJhbWUsIGNsYXNzIEN1cnZlPgorUGFz
c093blB0cjxDQ0FjdGl2ZUFuaW1hdGlvbj4gY3JlYXRlQWN0aXZlQW5pbWF0aW9uKGNvbnN0IEtl
eWZyYW1lVmFsdWVMaXN0JiB2YWx1ZUxpc3QsIGNvbnN0IEFuaW1hdGlvbiogYW5pbWF0aW9uLCBz
aXplX3QgYW5pbWF0aW9uSWQsIHNpemVfdCBncm91cElkLCBkb3VibGUgdGltZU9mZnNldCwgQ0NB
Y3RpdmVBbmltYXRpb246OlRhcmdldFByb3BlcnR5IHRhcmdldFByb3BlcnR5LCBjb25zdCBGbG9h
dFNpemUmIGJveFNpemUpCit7CisgICAgYm9vbCBhbHRlcm5hdGUgPSBmYWxzZTsKKyAgICBib29s
IHJldmVyc2UgPSBmYWxzZTsKKyAgICBpZiAoYW5pbWF0aW9uICYmIGFuaW1hdGlvbi0+aXNEaXJl
Y3Rpb25TZXQoKSkgeworICAgICAgICBBbmltYXRpb246OkFuaW1hdGlvbkRpcmVjdGlvbiBkaXJl
Y3Rpb24gPSBhbmltYXRpb24tPmRpcmVjdGlvbigpOworICAgICAgICBpZiAoZGlyZWN0aW9uID09
IEFuaW1hdGlvbjo6QW5pbWF0aW9uRGlyZWN0aW9uQWx0ZXJuYXRlIHx8IGRpcmVjdGlvbiA9PSBB
bmltYXRpb246OkFuaW1hdGlvbkRpcmVjdGlvbkFsdGVybmF0ZVJldmVyc2UpCisgICAgICAgICAg
ICBhbHRlcm5hdGUgPSB0cnVlOworICAgICAgICBpZiAoZGlyZWN0aW9uID09IEFuaW1hdGlvbjo6
QW5pbWF0aW9uRGlyZWN0aW9uUmV2ZXJzZSB8fCBkaXJlY3Rpb24gPT0gQW5pbWF0aW9uOjpBbmlt
YXRpb25EaXJlY3Rpb25BbHRlcm5hdGVSZXZlcnNlKQorICAgICAgICAgICAgcmV2ZXJzZSA9IHRy
dWU7CisgICAgfQorCisgICAgT3duUHRyPEN1cnZlPiBjdXJ2ZSA9IEN1cnZlOjpjcmVhdGUoKTsK
KyAgICBWZWN0b3I8S2V5ZnJhbWU+IGtleWZyYW1lczsKKworICAgIGZvciAoc2l6ZV90IGkgPSAw
OyBpIDwgdmFsdWVMaXN0LnNpemUoKTsgaSsrKSB7CisgICAgICAgIHNpemVfdCBpbmRleCA9IHJl
dmVyc2UgPyB2YWx1ZUxpc3Quc2l6ZSgpIC0gaSAtIDEgOiBpOworCisgICAgICAgIGNvbnN0IFZh
bHVlKiBvcmlnaW5hbFZhbHVlID0gc3RhdGljX2Nhc3Q8Y29uc3QgVmFsdWUqPih2YWx1ZUxpc3Qu
YXQoaW5kZXgpKTsKKworICAgICAgICBPd25QdHI8Q0NUaW1pbmdGdW5jdGlvbj4gdGltaW5nRnVu
Y3Rpb247CisgICAgICAgIGNvbnN0IFRpbWluZ0Z1bmN0aW9uKiBvcmlnaW5hbFRpbWluZ0Z1bmN0
aW9uID0gb3JpZ2luYWxWYWx1ZS0+dGltaW5nRnVuY3Rpb24oKTsKKworICAgICAgICAvLyBJZiB0
aGVyZSBoYXNuJ3QgYmVlbiBhIHRpbWluZyBmdW5jdGlvbiBhc3NvY2lhdGVkIHdpdGggdGhpcyBr
ZXlmcmFtZSwgdXNlIHRoZQorICAgICAgICAvLyBhbmltYXRpb24ncyB0aW1pbmcgZnVuY3Rpb24s
IGlmIHdlIGhhdmUgb25lLgorICAgICAgICBpZiAoIW9yaWdpbmFsVGltaW5nRnVuY3Rpb24gJiYg
YW5pbWF0aW9uLT5pc1RpbWluZ0Z1bmN0aW9uU2V0KCkpCisgICAgICAgICAgICBvcmlnaW5hbFRp
bWluZ0Z1bmN0aW9uID0gYW5pbWF0aW9uLT50aW1pbmdGdW5jdGlvbigpLmdldCgpOworCisgICAg
ICAgIGlmIChvcmlnaW5hbFRpbWluZ0Z1bmN0aW9uKSB7CisgICAgICAgICAgICBzd2l0Y2ggKG9y
aWdpbmFsVGltaW5nRnVuY3Rpb24tPnR5cGUoKSkgeworICAgICAgICAgICAgY2FzZSBUaW1pbmdG
dW5jdGlvbjo6U3RlcHNGdW5jdGlvbjoKKyAgICAgICAgICAgICAgICAvLyBGSVhNRTogYWRkIHN1
cHBvcnQgZm9yIHN0ZXBzIHRpbWluZyBmdW5jdGlvbi4KKyAgICAgICAgICAgICAgICByZXR1cm4g
bnVsbHB0cjsKKyAgICAgICAgICAgIGNhc2UgVGltaW5nRnVuY3Rpb246OkxpbmVhckZ1bmN0aW9u
OgorICAgICAgICAgICAgICAgIC8vIERvbid0IHNldCB0aGUgdGltaW5nIGZ1bmN0aW9uLiBLZXlm
cmFtZXMgYXJlIGludGVycG9sYXRlZCBsaW5lYXJseSBpZiB0aGVyZSBpcyBubyB0aW1pbmcgZnVu
Y3Rpb24uCisgICAgICAgICAgICAgICAgYnJlYWs7CisgICAgICAgICAgICBjYXNlIFRpbWluZ0Z1
bmN0aW9uOjpDdWJpY0JlemllckZ1bmN0aW9uOgorICAgICAgICAgICAgICAgIGNvbnN0IEN1Ymlj
QmV6aWVyVGltaW5nRnVuY3Rpb24qIG9yaWdpbmFsQmV6aWVyVGltaW5nRnVuY3Rpb24gPSBzdGF0
aWNfY2FzdDxjb25zdCBDdWJpY0JlemllclRpbWluZ0Z1bmN0aW9uKj4ob3JpZ2luYWxUaW1pbmdG
dW5jdGlvbik7CisgICAgICAgICAgICAgICAgdGltaW5nRnVuY3Rpb24gPSBDQ0N1YmljQmV6aWVy
VGltaW5nRnVuY3Rpb246OmNyZWF0ZShvcmlnaW5hbEJlemllclRpbWluZ0Z1bmN0aW9uLT54MSgp
LCBvcmlnaW5hbEJlemllclRpbWluZ0Z1bmN0aW9uLT55MSgpLCBvcmlnaW5hbEJlemllclRpbWlu
Z0Z1bmN0aW9uLT54MigpLCBvcmlnaW5hbEJlemllclRpbWluZ0Z1bmN0aW9uLT55MigpKTsKKyAg
ICAgICAgICAgICAgICBicmVhazsKKyAgICAgICAgICAgIH0gLy8gc3dpdGNoCisgICAgICAgIH0g
ZWxzZQorICAgICAgICAgICAgdGltaW5nRnVuY3Rpb24gPSBDQ0Vhc2VUaW1pbmdGdW5jdGlvbjo6
Y3JlYXRlKCk7CisKKyAgICAgICAgZG91YmxlIGR1cmF0aW9uID0gKGFuaW1hdGlvbiAmJiBhbmlt
YXRpb24tPmlzRHVyYXRpb25TZXQoKSkgPyBhbmltYXRpb24tPmR1cmF0aW9uKCkgOiAxOworICAg
ICAgICBkb3VibGUga2V5VGltZSA9IG9yaWdpbmFsVmFsdWUtPmtleVRpbWUoKSAqIGR1cmF0aW9u
OworCisgICAgICAgIGlmIChyZXZlcnNlKQorICAgICAgICAgICAga2V5VGltZSA9IGR1cmF0aW9u
IC0ga2V5VGltZTsKKworICAgICAgICBib29sIGFkZGVkS2V5ZnJhbWUgPSBhcHBlbmRLZXlmcmFt
ZTxWYWx1ZSwgS2V5ZnJhbWUsIEN1cnZlPigqY3VydmUsIGtleVRpbWUsIG9yaWdpbmFsVmFsdWUs
IHRpbWluZ0Z1bmN0aW9uLnJlbGVhc2UoKSwgYm94U2l6ZSk7CisgICAgICAgIGlmICghYWRkZWRL
ZXlmcmFtZSkKKyAgICAgICAgICAgIHJldHVybiBudWxscHRyOworICAgIH0KKworICAgIE93blB0
cjxDQ0FjdGl2ZUFuaW1hdGlvbj4gYW5pbSA9IENDQWN0aXZlQW5pbWF0aW9uOjpjcmVhdGUoY3Vy
dmUucmVsZWFzZSgpLCBhbmltYXRpb25JZCwgZ3JvdXBJZCwgdGFyZ2V0UHJvcGVydHkpOworCisg
ICAgQVNTRVJUKGFuaW0uZ2V0KCkpOworCisgICAgaWYgKGFuaW0uZ2V0KCkpIHsKKyAgICAgICAg
aW50IGl0ZXJhdGlvbnMgPSAoYW5pbWF0aW9uICYmIGFuaW1hdGlvbi0+aXNJdGVyYXRpb25Db3Vu
dFNldCgpKSA/IGFuaW1hdGlvbi0+aXRlcmF0aW9uQ291bnQoKSA6IDE7CisgICAgICAgIGFuaW0t
PnNldEl0ZXJhdGlvbnMoaXRlcmF0aW9ucyk7CisgICAgICAgIGFuaW0tPnNldEFsdGVybmF0ZXNE
aXJlY3Rpb24oYWx0ZXJuYXRlKTsKKyAgICB9CisKKyAgICAvLyBJbiBvcmRlciB0byBhdm9pZCBz
a2V3LCB0aGUgbWFpbiB0aHJlYWQgYW5pbWF0aW9uIGNhbm5vdCB0aWNrIHVudGlsIGl0IGhhcyBy
ZWNlaXZlZCB0aGUgc3RhcnQgdGltZSBvZgorICAgIC8vIHRoZSBjb3JyZXNwb25kaW5nIGltcGwg
dGhyZWFkIGFuaW1hdGlvbi4KKyAgICBhbmltLT5zZXROZWVkc1N5bmNocm9uaXplZFN0YXJ0VGlt
ZSh0cnVlKTsKKworICAgIC8vIElmIHRpbWVPZmZzZXQgPiAwLCB0aGVuIHRoZSBhbmltYXRpb24g
aGFzIHN0YXJ0ZWQgaW4gdGhlIHBhc3QuCisgICAgYW5pbS0+c2V0VGltZU9mZnNldCh0aW1lT2Zm
c2V0KTsKKworICAgIHJldHVybiBhbmltLnJlbGVhc2UoKTsKK30KKworUGFzc093blB0cjxDQ0Fj
dGl2ZUFuaW1hdGlvbj4gY3JlYXRlQWN0aXZlQW5pbWF0aW9uKGNvbnN0IEtleWZyYW1lVmFsdWVM
aXN0JiB2YWx1ZXMsIGNvbnN0IEFuaW1hdGlvbiogYW5pbWF0aW9uLCBzaXplX3QgYW5pbWF0aW9u
SWQsIHNpemVfdCBncm91cElkLCBkb3VibGUgdGltZU9mZnNldCwgY29uc3QgRmxvYXRTaXplJiBi
b3hTaXplKQoreworICAgIGlmICh2YWx1ZXMucHJvcGVydHkoKSA9PSBBbmltYXRlZFByb3BlcnR5
V2Via2l0VHJhbnNmb3JtKQorICAgICAgICByZXR1cm4gY3JlYXRlQWN0aXZlQW5pbWF0aW9uPFRy
YW5zZm9ybUFuaW1hdGlvblZhbHVlLCBDQ1RyYW5zZm9ybUtleWZyYW1lLCBDQ0tleWZyYW1lZFRy
YW5zZm9ybUFuaW1hdGlvbkN1cnZlPih2YWx1ZXMsIGFuaW1hdGlvbiwgYW5pbWF0aW9uSWQsIGdy
b3VwSWQsIHRpbWVPZmZzZXQsIENDQWN0aXZlQW5pbWF0aW9uOjpUcmFuc2Zvcm0sIEZsb2F0U2l6
ZShib3hTaXplKSk7CisKKyAgICBpZiAodmFsdWVzLnByb3BlcnR5KCkgPT0gQW5pbWF0ZWRQcm9w
ZXJ0eU9wYWNpdHkpCisgICAgICAgIHJldHVybiBjcmVhdGVBY3RpdmVBbmltYXRpb248RmxvYXRB
bmltYXRpb25WYWx1ZSwgQ0NGbG9hdEtleWZyYW1lLCBDQ0tleWZyYW1lZEZsb2F0QW5pbWF0aW9u
Q3VydmU+KHZhbHVlcywgYW5pbWF0aW9uLCBhbmltYXRpb25JZCwgZ3JvdXBJZCwgdGltZU9mZnNl
dCwgQ0NBY3RpdmVBbmltYXRpb246Ok9wYWNpdHksIEZsb2F0U2l6ZSgpKTsKKworICAgIHJldHVy
biBudWxscHRyOworfQorCit9IC8vIG5hbWVzcGFjZSBXZWJDb3JlCmRpZmYgLS1naXQgYS9Tb3Vy
Y2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9jaHJvbWl1bS9BbmltYXRpb25UcmFuc2xhdGlv
blV0aWwuaCBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2Nocm9taXVtL0FuaW1h
dGlvblRyYW5zbGF0aW9uVXRpbC5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAuLjA4ZjYwZDIwZGMzYmMxZmM3OGRhNGRh
YjM1ZjdiY2MzOTUwY2E1MTQKLS0tIC9kZXYvbnVsbAorKysgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0
Zm9ybS9ncmFwaGljcy9jaHJvbWl1bS9BbmltYXRpb25UcmFuc2xhdGlvblV0aWwuaApAQCAtMCww
ICsxLDQ3IEBACisvKgorICogQ29weXJpZ2h0IChDKSAyMDEwIEdvb2dsZSBJbmMuIEFsbCByaWdo
dHMgcmVzZXJ2ZWQuCisgKgorICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5k
IGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CisgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJt
aXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMgYXJlCisgKiBtZXQ6
CisgKgorICogICAgICogUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWlu
IHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMg
YW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KKyAqICAgICAqIFJlZGlzdHJpYnV0aW9ucyBp
biBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUKKyAqIGNvcHlyaWdodCBub3Rp
Y2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIK
KyAqIGluIHRoZSBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQg
d2l0aCB0aGUKKyAqIGRpc3RyaWJ1dGlvbi4KKyAqICAgICAqIE5laXRoZXIgdGhlIG5hbWUgb2Yg
R29vZ2xlIEluYy4gbm9yIHRoZSBuYW1lcyBvZiBpdHMKKyAqIGNvbnRyaWJ1dG9ycyBtYXkgYmUg
dXNlZCB0byBlbmRvcnNlIG9yIHByb21vdGUgcHJvZHVjdHMgZGVyaXZlZCBmcm9tCisgKiB0aGlz
IHNvZnR3YXJlIHdpdGhvdXQgc3BlY2lmaWMgcHJpb3Igd3JpdHRlbiBwZXJtaXNzaW9uLgorICoK
KyAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgVEhFIENPUFlSSUdIVCBIT0xERVJTIEFO
RCBDT05UUklCVVRPUlMKKyAqICJBUyBJUyIgQU5EIEFOWSBFWFBSRVNTIE9SIElNUExJRUQgV0FS
UkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UCisgKiBMSU1JVEVEIFRPLCBUSEUgSU1QTElFRCBX
QVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IKKyAqIEEgUEFSVElD
VUxBUiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiBJTiBOTyBFVkVOVCBTSEFMTCBUSEUgQ09QWVJJ
R0hUCisgKiBPV05FUiBPUiBDT05UUklCVVRPUlMgQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJ
TkRJUkVDVCwgSU5DSURFTlRBTCwKKyAqIFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVO
VElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QKKyAqIExJTUlURUQgVE8sIFBST0NVUkVN
RU5UIE9GIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLAorICogREFU
QSwgT1IgUFJPRklUUzsgT1IgQlVTSU5FU1MgSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBB
TkQgT04gQU5ZCisgKiBUSEVPUlkgT0YgTElBQklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNULCBT
VFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUCisgKiAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RI
RVJXSVNFKSBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UKKyAqIE9GIFRISVMgU09G
VFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0Uu
CisgKi8KKworI2lmbmRlZiBBbmltYXRpb25UcmFuc2xhdGlvblV0aWxfaAorI2RlZmluZSBBbmlt
YXRpb25UcmFuc2xhdGlvblV0aWxfaAorCisjaW5jbHVkZSA8d3RmL1Bhc3NPd25QdHIuaD4KKwor
Y2xhc3MgS2V5ZnJhbWVWYWx1ZUxpc3Q7CitjbGFzcyBBbmltYXRpb247CitjbGFzcyBGbG9hdFNp
emU7CitjbGFzcyBDQ0FjdGl2ZUFuaW1hdGlvbjsKKworbmFtZXNwYWNlIFdlYkNvcmUgeworCitQ
YXNzT3duUHRyPENDQWN0aXZlQW5pbWF0aW9uPiBjcmVhdGVBY3RpdmVBbmltYXRpb24oY29uc3Qg
S2V5ZnJhbWVWYWx1ZUxpc3QmLCBjb25zdCBBbmltYXRpb24qLCBzaXplX3QgYW5pbWF0aW9uSWQs
IHNpemVfdCBncm91cElkLCBkb3VibGUgdGltZU9mZnNldCwgY29uc3QgRmxvYXRTaXplJiBib3hT
aXplKTsKKworfSAvLyBuYW1lc3BhY2UgV2ViQ29yZQorCisjZW5kaWYgLy8gQW5pbWF0aW9uVHJh
bnNsYXRpb25VdGlsX2gKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBo
aWNzL2Nocm9taXVtL0dyYXBoaWNzTGF5ZXJDaHJvbWl1bS5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9w
bGF0Zm9ybS9ncmFwaGljcy9jaHJvbWl1bS9HcmFwaGljc0xheWVyQ2hyb21pdW0uY3BwCmluZGV4
IDE4NDMzMzYwOTUxYjJiZmNlYTdjYjExYmJlOTAwMWVhOTg1ZjRlMDEuLjk0OWE0YTk4ZDM2MWI0
YTNkMTAxY2QzZjEzMzRmZmRlOGI3OTJjMmIgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL3Bs
YXRmb3JtL2dyYXBoaWNzL2Nocm9taXVtL0dyYXBoaWNzTGF5ZXJDaHJvbWl1bS5jcHAKKysrIGIv
U291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvY2hyb21pdW0vR3JhcGhpY3NMYXllckNo
cm9taXVtLmNwcApAQCAtNDYsNiArNDYsNyBAQAogI2luY2x1ZGUgIkdyYXBoaWNzTGF5ZXJDaHJv
bWl1bS5oIgogCiAjaW5jbHVkZSAiQW5pbWF0aW9uSWRWZW5kb3IuaCIKKyNpbmNsdWRlICJBbmlt
YXRpb25UcmFuc2xhdGlvblV0aWwuaCIKICNpbmNsdWRlICJDYW52YXMyRExheWVyQ2hyb21pdW0u
aCIKICNpbmNsdWRlICJDb250ZW50TGF5ZXJDaHJvbWl1bS5oIgogI2luY2x1ZGUgIkZsb2F0Q29u
dmVyc2lvbi5oIgpAQCAtNTgsNiArNTksOCBAQAogI2luY2x1ZGUgIlNrTWF0cml4NDQuaCIKICNp
bmNsdWRlICJTeXN0ZW1UaW1lLmgiCiAKKyNpbmNsdWRlICJjYy9DQ0FjdGl2ZUFuaW1hdGlvbi5o
IgorCiAjaW5jbHVkZSA8cHVibGljL1dlYkZpbHRlck9wZXJhdGlvbi5oPgogI2luY2x1ZGUgPHB1
YmxpYy9XZWJGaWx0ZXJPcGVyYXRpb25zLmg+CiAjaW5jbHVkZSA8cHVibGljL1dlYkZsb2F0UG9p
bnQuaD4KQEAgLTUwMCw4ICs1MDMsMjggQEAgdm9pZCBHcmFwaGljc0xheWVyQ2hyb21pdW06OnNl
dENvbnRlbnRzVG9DYW52YXMoUGxhdGZvcm1MYXllciogcGxhdGZvcm1MYXllcikKIAogYm9vbCBH
cmFwaGljc0xheWVyQ2hyb21pdW06OmFkZEFuaW1hdGlvbihjb25zdCBLZXlmcmFtZVZhbHVlTGlz
dCYgdmFsdWVzLCBjb25zdCBJbnRTaXplJiBib3hTaXplLCBjb25zdCBBbmltYXRpb24qIGFuaW1h
dGlvbiwgY29uc3QgU3RyaW5nJiBhbmltYXRpb25OYW1lLCBkb3VibGUgdGltZU9mZnNldCkKIHsK
KyAgICAvLyBCYWlsIGVhcmx5IGlmIHdlIGhhdmUgYSBsYXJnZSByb3RhdGlvbi4KKyAgICBpZiAo
dmFsdWVzLnByb3BlcnR5KCkgPT0gQW5pbWF0ZWRQcm9wZXJ0eVdlYmtpdFRyYW5zZm9ybSkgewor
ICAgICAgICBib29sIGhhc1JvdGF0aW9uT2ZNb3JlVGhhbjE4MERlZ3JlZXMgPSBmYWxzZTsKKyAg
ICAgICAgdmFsaWRhdGVUcmFuc2Zvcm1PcGVyYXRpb25zKHZhbHVlcywgaGFzUm90YXRpb25PZk1v
cmVUaGFuMTgwRGVncmVlcyk7CisgICAgICAgIGlmIChoYXNSb3RhdGlvbk9mTW9yZVRoYW4xODBE
ZWdyZWVzKQorICAgICAgICAgICAgcmV0dXJuIGZhbHNlOworICAgIH0KKwogICAgIHByaW1hcnlM
YXllcigpLnVud3JhcDxMYXllckNocm9taXVtPigpLT5zZXRMYXllckFuaW1hdGlvbkRlbGVnYXRl
KHRoaXMpOwotICAgIHJldHVybiBwcmltYXJ5TGF5ZXIoKS51bndyYXA8TGF5ZXJDaHJvbWl1bT4o
KS0+YWRkQW5pbWF0aW9uKHZhbHVlcywgYm94U2l6ZSwgYW5pbWF0aW9uLCBtYXBBbmltYXRpb25O
YW1lVG9JZChhbmltYXRpb25OYW1lKSwgQW5pbWF0aW9uSWRWZW5kb3I6OmdldE5leHRHcm91cElk
KCksIHRpbWVPZmZzZXQpOworCisgICAgaW50IGFuaW1hdGlvbklkID0gbWFwQW5pbWF0aW9uTmFt
ZVRvSWQoYW5pbWF0aW9uTmFtZSk7CisgICAgaW50IGdyb3VwSWQgPSBBbmltYXRpb25JZFZlbmRv
cjo6Z2V0TmV4dEdyb3VwSWQoKTsKKworICAgIE93blB0cjxDQ0FjdGl2ZUFuaW1hdGlvbj4gdG9B
ZGQoY3JlYXRlQWN0aXZlQW5pbWF0aW9uKHZhbHVlcywgYW5pbWF0aW9uLCBhbmltYXRpb25JZCwg
Z3JvdXBJZCwgdGltZU9mZnNldCwgYm94U2l6ZSkpOworCisgICAgaWYgKHRvQWRkLmdldCgpKSB7
CisgICAgICAgIC8vIFJlbW92ZSBhbnkgZXhpc3RpbmcgYW5pbWF0aW9ucyB3aXRoIHRoZSBzYW1l
IGFuaW1hdGlvbiBpZCBhbmQgdGFyZ2V0IHByb3BlcnR5LgorICAgICAgICBwcmltYXJ5TGF5ZXIo
KS51bndyYXA8TGF5ZXJDaHJvbWl1bT4oKS0+bGF5ZXJBbmltYXRpb25Db250cm9sbGVyKCktPnJl
bW92ZUFuaW1hdGlvbih0b0FkZC0+aWQoKSwgdG9BZGQtPnRhcmdldFByb3BlcnR5KCkpOworICAg
ICAgICByZXR1cm4gcHJpbWFyeUxheWVyKCkudW53cmFwPExheWVyQ2hyb21pdW0+KCktPmFkZEFu
aW1hdGlvbih0b0FkZC5yZWxlYXNlKCkpOworICAgIH0KKworICAgIHJldHVybiBmYWxzZTsKIH0K
IAogdm9pZCBHcmFwaGljc0xheWVyQ2hyb21pdW06OnBhdXNlQW5pbWF0aW9uKGNvbnN0IFN0cmlu
ZyYgYW5pbWF0aW9uTmFtZSwgZG91YmxlIHRpbWVPZmZzZXQpCmRpZmYgLS1naXQgYS9Tb3VyY2Uv
V2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9jaHJvbWl1bS9MYXllckNocm9taXVtLmNwcCBiL1Nv
dXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2Nocm9taXVtL0xheWVyQ2hyb21pdW0uY3Bw
CmluZGV4IGY2MWZkMzVkNTMwMDE0MWYyYjJmZjI2Yjg3NjRiOGY2MmUwM2UyM2QuLmQzNWY1OTIx
OWZmNzQzY2ZkOWRlNmJkNzllYmU1OTFjYWM5MjFhYTkgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJD
b3JlL3BsYXRmb3JtL2dyYXBoaWNzL2Nocm9taXVtL0xheWVyQ2hyb21pdW0uY3BwCisrKyBiL1Nv
dXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2Nocm9taXVtL0xheWVyQ2hyb21pdW0uY3Bw
CkBAIC0zNyw2ICszNyw3IEBACiAjaW5jbHVkZSAiUGxhdGZvcm1Db250ZXh0U2tpYS5oIgogI2lu
Y2x1ZGUgIlJlbmRlckxheWVyQmFja2luZy5oIgogI2luY2x1ZGUgIlRleHRTdHJlYW0uaCIKKyNp
bmNsdWRlICJjYy9DQ0FjdGl2ZUFuaW1hdGlvbi5oIgogI2luY2x1ZGUgImNjL0NDQW5pbWF0aW9u
RXZlbnRzLmgiCiAjaW5jbHVkZSAiY2MvQ0NMYXllckFuaW1hdGlvbkNvbnRyb2xsZXIuaCIKICNp
bmNsdWRlICJjYy9DQ0xheWVyQW5pbWF0aW9uRGVsZWdhdGUuaCIKQEAgLTU5OSwxNyArNjAwLDE1
IEBAIHZvaWQgTGF5ZXJDaHJvbWl1bTo6c2V0VHJhbnNmb3JtRnJvbUFuaW1hdGlvbihjb25zdCBX
ZWJUcmFuc2Zvcm1hdGlvbk1hdHJpeCYgdHJhCiAgICAgbV90cmFuc2Zvcm0gPSB0cmFuc2Zvcm07
CiB9CiAKLWJvb2wgTGF5ZXJDaHJvbWl1bTo6YWRkQW5pbWF0aW9uKGNvbnN0IEtleWZyYW1lVmFs
dWVMaXN0JiB2YWx1ZXMsIGNvbnN0IEludFNpemUmIGJveFNpemUsIGNvbnN0IEFuaW1hdGlvbiog
YW5pbWF0aW9uLCBpbnQgYW5pbWF0aW9uSWQsIGludCBncm91cElkLCBkb3VibGUgdGltZU9mZnNl
dCkKK2Jvb2wgTGF5ZXJDaHJvbWl1bTo6YWRkQW5pbWF0aW9uKFBhc3NPd25QdHI8Q0NBY3RpdmVB
bmltYXRpb24+IGFuaW1hdGlvbikKIHsKICAgICBpZiAoIW1fbGF5ZXJUcmVlSG9zdCB8fCAhbV9s
YXllclRyZWVIb3N0LT5zZXR0aW5ncygpLnRocmVhZGVkQW5pbWF0aW9uRW5hYmxlZCkKICAgICAg
ICAgcmV0dXJuIGZhbHNlOwogCi0gICAgYm9vbCBhZGRlZEFuaW1hdGlvbiA9IG1fbGF5ZXJBbmlt
YXRpb25Db250cm9sbGVyLT5hZGRBbmltYXRpb24odmFsdWVzLCBib3hTaXplLCBhbmltYXRpb24s
IGFuaW1hdGlvbklkLCBncm91cElkLCB0aW1lT2Zmc2V0KTsKLSAgICBpZiAoYWRkZWRBbmltYXRp
b24pIHsKLSAgICAgICAgbV9sYXllclRyZWVIb3N0LT5kaWRBZGRBbmltYXRpb24oKTsKLSAgICAg
ICAgc2V0TmVlZHNDb21taXQoKTsKLSAgICB9Ci0gICAgcmV0dXJuIGFkZGVkQW5pbWF0aW9uOwor
ICAgIG1fbGF5ZXJBbmltYXRpb25Db250cm9sbGVyLT5hZGRBbmltYXRpb24oYW5pbWF0aW9uKTsK
KyAgICBtX2xheWVyVHJlZUhvc3QtPmRpZEFkZEFuaW1hdGlvbigpOworICAgIHNldE5lZWRzQ29t
bWl0KCk7CisgICAgcmV0dXJuIHRydWU7CiB9CiAKIHZvaWQgTGF5ZXJDaHJvbWl1bTo6cGF1c2VB
bmltYXRpb24oaW50IGFuaW1hdGlvbklkLCBkb3VibGUgdGltZU9mZnNldCkKZGlmZiAtLWdpdCBh
L1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2Nocm9taXVtL0xheWVyQ2hyb21pdW0u
aCBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2Nocm9taXVtL0xheWVyQ2hyb21p
dW0uaAppbmRleCBhOTNkMTc2MGZjYWQwMGUyMTI3MGQ1MDYxYTAyNDdlMmY2MjFiZGNkLi44MGFj
YzhlZTZmNDRiMzEyNzhjN2Y1ZDJlYmZiMmU3MTNhNTEwYThmIDEwMDY0NAotLS0gYS9Tb3VyY2Uv
V2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9jaHJvbWl1bS9MYXllckNocm9taXVtLmgKKysrIGIv
U291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvY2hyb21pdW0vTGF5ZXJDaHJvbWl1bS5o
CkBAIC01Nyw2ICs1Nyw3IEBACiAKIG5hbWVzcGFjZSBXZWJDb3JlIHsKIAorY2xhc3MgQ0NBY3Rp
dmVBbmltYXRpb247CiBzdHJ1Y3QgQ0NBbmltYXRpb25FdmVudDsKIGNsYXNzIENDTGF5ZXJBbmlt
YXRpb25EZWxlZ2F0ZTsKIGNsYXNzIENDTGF5ZXJJbXBsOwpAQCAtMjM0LDcgKzIzNSw3IEBAIHB1
YmxpYzoKICAgICB2b2lkIHNldEFsd2F5c1Jlc2VydmVUZXh0dXJlcyhib29sIGFsd2F5c1Jlc2Vy
dmVUZXh0dXJlcykgeyBtX2Fsd2F5c1Jlc2VydmVUZXh0dXJlcyA9IGFsd2F5c1Jlc2VydmVUZXh0
dXJlczsgfQogICAgIGJvb2wgYWx3YXlzUmVzZXJ2ZVRleHR1cmVzKCkgY29uc3QgeyByZXR1cm4g
bV9hbHdheXNSZXNlcnZlVGV4dHVyZXM7IH0KIAotICAgIGJvb2wgYWRkQW5pbWF0aW9uKGNvbnN0
IEtleWZyYW1lVmFsdWVMaXN0JiwgY29uc3QgSW50U2l6ZSYgYm94U2l6ZSwgY29uc3QgQW5pbWF0
aW9uKiwgaW50IGFuaW1hdGlvbklkLCBpbnQgZ3JvdXBJZCwgZG91YmxlIHRpbWVPZmZzZXQpOwor
ICAgIGJvb2wgYWRkQW5pbWF0aW9uKFBhc3NPd25QdHI8Q0NBY3RpdmVBbmltYXRpb24+KTsKICAg
ICB2b2lkIHBhdXNlQW5pbWF0aW9uKGludCBhbmltYXRpb25JZCwgZG91YmxlIHRpbWVPZmZzZXQp
OwogICAgIHZvaWQgcmVtb3ZlQW5pbWF0aW9uKGludCBhbmltYXRpb25JZCk7CiAKZGlmZiAtLWdp
dCBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2Nocm9taXVtL0xpbmtIaWdobGln
aHQuY3BwIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvY2hyb21pdW0vTGlua0hp
Z2hsaWdodC5jcHAKaW5kZXggYmNiN2IzYzM2YzdiOGUxODRjZDIwNjdkZmE1YTBhNDUwYzViODY3
OS4uYmVhMzJjMGEzNTc5YWY1NzFmYzdmMDUyYTc0ZGJkYzdmYjlkZTY3OCAxMDA2NDQKLS0tIGEv
U291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvY2hyb21pdW0vTGlua0hpZ2hsaWdodC5j
cHAKKysrIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvY2hyb21pdW0vTGlua0hp
Z2hsaWdodC5jcHAKQEAgLTc2LDcgKzc2LDcgQEAgTGlua0hpZ2hsaWdodDo6TGlua0hpZ2hsaWdo
dChHcmFwaGljc0xheWVyQ2hyb21pdW0qIHBhcmVudCwgY29uc3QgUGF0aCYgcGF0aCwgaW4KICAg
ICAvLyBhbmltYXRpb25JZCA9IDEgaXMgcmVzZXJ2ZWQgZm9yIHVzLgogICAgIE93blB0cjxDQ0Fj
dGl2ZUFuaW1hdGlvbj4gYW5pbWF0aW9uKENDQWN0aXZlQW5pbWF0aW9uOjpjcmVhdGUoY3VydmUu
cmVsZWFzZSgpLCBhbmltYXRpb25JZCwgZ3JvdXBJZCwgQ0NBY3RpdmVBbmltYXRpb246Ok9wYWNp
dHkpKTsKICAgICBhbmltYXRpb24tPnNldE5lZWRzU3luY2hyb25pemVkU3RhcnRUaW1lKHRydWUp
OwotICAgIG1fY29udGVudExheWVyLT5sYXllckFuaW1hdGlvbkNvbnRyb2xsZXIoKS0+YWRkKGFu
aW1hdGlvbi5yZWxlYXNlKCkpOworICAgIG1fY29udGVudExheWVyLT5sYXllckFuaW1hdGlvbkNv
bnRyb2xsZXIoKS0+YWRkQW5pbWF0aW9uKGFuaW1hdGlvbi5yZWxlYXNlKCkpOwogfQogCiBMaW5r
SGlnaGxpZ2h0Ojp+TGlua0hpZ2hsaWdodCgpCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9w
bGF0Zm9ybS9ncmFwaGljcy9jaHJvbWl1bS9jYy9DQ0FuaW1hdGlvbkN1cnZlLmggYi9Tb3VyY2Uv
V2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9jaHJvbWl1bS9jYy9DQ0FuaW1hdGlvbkN1cnZlLmgK
aW5kZXggZTIxZGU4OTY0NzU3NWJmZTY5YmVjZWUzOTgyYjI5NTJkNWUyMmMwYy4uMGU0NThlYjJi
Nzk4Mzk2YWVjMGM0YzU2Mzk1OWY3Y2Y5M2MxZTkyZSAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNv
cmUvcGxhdGZvcm0vZ3JhcGhpY3MvY2hyb21pdW0vY2MvQ0NBbmltYXRpb25DdXJ2ZS5oCisrKyBi
L1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2Nocm9taXVtL2NjL0NDQW5pbWF0aW9u
Q3VydmUuaApAQCAtNjUsNyArNjUsNyBAQCBjbGFzcyBDQ1RyYW5zZm9ybUFuaW1hdGlvbkN1cnZl
IDogcHVibGljIENDQW5pbWF0aW9uQ3VydmUgewogcHVibGljOgogICAgIHZpcnR1YWwgfkNDVHJh
bnNmb3JtQW5pbWF0aW9uQ3VydmUoKSB7IH0KIAotICAgIHZpcnR1YWwgV2ViS2l0OjpXZWJUcmFu
c2Zvcm1hdGlvbk1hdHJpeCBnZXRWYWx1ZShkb3VibGUgdCwgY29uc3QgSW50U2l6ZSYgbGF5ZXJT
aXplKSBjb25zdCA9IDA7CisgICAgdmlydHVhbCBXZWJLaXQ6OldlYlRyYW5zZm9ybWF0aW9uTWF0
cml4IGdldFZhbHVlKGRvdWJsZSB0KSBjb25zdCA9IDA7CiAKICAgICAvLyBQYXJ0aWFsIENDQW5p
bWF0aW9uIGltcGxlbWVudGF0aW9uLgogICAgIHZpcnR1YWwgVHlwZSB0eXBlKCkgY29uc3QgT1ZF
UlJJREUgeyByZXR1cm4gVHJhbnNmb3JtOyB9CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9w
bGF0Zm9ybS9ncmFwaGljcy9jaHJvbWl1bS9jYy9DQ0tleWZyYW1lZEFuaW1hdGlvbkN1cnZlLmNw
cCBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2Nocm9taXVtL2NjL0NDS2V5ZnJh
bWVkQW5pbWF0aW9uQ3VydmUuY3BwCmluZGV4IDRkYjM5YjY5YTAwMWZjODczZjI1NDUzNGJkNzcy
Y2EwNDQ0MWFlZmYuLmJiNGQ0NzgzNGFhMjY1ZmYwYmZiYzdlZjEzODg5MDQyZDE3OWE5ZjIgMTAw
NjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2Nocm9taXVtL2NjL0ND
S2V5ZnJhbWVkQW5pbWF0aW9uQ3VydmUuY3BwCisrKyBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3Jt
L2dyYXBoaWNzL2Nocm9taXVtL2NjL0NDS2V5ZnJhbWVkQW5pbWF0aW9uQ3VydmUuY3BwCkBAIC0y
NiwxNSArMjYsNiBAQAogCiAjaW5jbHVkZSAiY2MvQ0NLZXlmcmFtZWRBbmltYXRpb25DdXJ2ZS5o
IgogCi0jaW5jbHVkZSAiSWRlbnRpdHlUcmFuc2Zvcm1PcGVyYXRpb24uaCIKLSNpbmNsdWRlICJN
YXRyaXgzRFRyYW5zZm9ybU9wZXJhdGlvbi5oIgotI2luY2x1ZGUgIk1hdHJpeFRyYW5zZm9ybU9w
ZXJhdGlvbi5oIgotI2luY2x1ZGUgIlBlcnNwZWN0aXZlVHJhbnNmb3JtT3BlcmF0aW9uLmgiCi0j
aW5jbHVkZSAiUm90YXRlVHJhbnNmb3JtT3BlcmF0aW9uLmgiCi0jaW5jbHVkZSAiU2NhbGVUcmFu
c2Zvcm1PcGVyYXRpb24uaCIKLSNpbmNsdWRlICJTa2V3VHJhbnNmb3JtT3BlcmF0aW9uLmgiCi0j
aW5jbHVkZSAiVHJhbnNsYXRlVHJhbnNmb3JtT3BlcmF0aW9uLmgiCi0KICNpbmNsdWRlIDx3dGYv
T3duUHRyLmg+CiAKIHVzaW5nIFdlYktpdDo6V2ViVHJhbnNmb3JtYXRpb25NYXRyaXg7CkBAIC0x
MTYsMTIgKzEwNywxMiBAQCBQYXNzT3duUHRyPENDRmxvYXRLZXlmcmFtZT4gQ0NGbG9hdEtleWZy
YW1lOjpjbG9uZSgpIGNvbnN0CiAgICAgcmV0dXJuIENDRmxvYXRLZXlmcmFtZTo6Y3JlYXRlKHRp
bWUoKSwgdmFsdWUoKSwgdGltaW5nRnVuY3Rpb24oKSA/IGNsb25lVGltaW5nRnVuY3Rpb24odGlt
aW5nRnVuY3Rpb24oKSkgOiBudWxscHRyKTsKIH0KIAotUGFzc093blB0cjxDQ1RyYW5zZm9ybUtl
eWZyYW1lPiBDQ1RyYW5zZm9ybUtleWZyYW1lOjpjcmVhdGUoZG91YmxlIHRpbWUsIGNvbnN0IFRy
YW5zZm9ybU9wZXJhdGlvbnMmIHZhbHVlLCBQYXNzT3duUHRyPENDVGltaW5nRnVuY3Rpb24+IHRp
bWluZ0Z1bmN0aW9uKQorUGFzc093blB0cjxDQ1RyYW5zZm9ybUtleWZyYW1lPiBDQ1RyYW5zZm9y
bUtleWZyYW1lOjpjcmVhdGUoZG91YmxlIHRpbWUsIGNvbnN0IFdlYktpdDo6V2ViVHJhbnNmb3Jt
T3BlcmF0aW9ucyYgdmFsdWUsIFBhc3NPd25QdHI8Q0NUaW1pbmdGdW5jdGlvbj4gdGltaW5nRnVu
Y3Rpb24pCiB7CiAgICAgcmV0dXJuIGFkb3B0UHRyKG5ldyBDQ1RyYW5zZm9ybUtleWZyYW1lKHRp
bWUsIHZhbHVlLCB0aW1pbmdGdW5jdGlvbikpOwogfQogCi1DQ1RyYW5zZm9ybUtleWZyYW1lOjpD
Q1RyYW5zZm9ybUtleWZyYW1lKGRvdWJsZSB0aW1lLCBjb25zdCBUcmFuc2Zvcm1PcGVyYXRpb25z
JiB2YWx1ZSwgUGFzc093blB0cjxDQ1RpbWluZ0Z1bmN0aW9uPiB0aW1pbmdGdW5jdGlvbikKK0ND
VHJhbnNmb3JtS2V5ZnJhbWU6OkNDVHJhbnNmb3JtS2V5ZnJhbWUoZG91YmxlIHRpbWUsIGNvbnN0
IFdlYktpdDo6V2ViVHJhbnNmb3JtT3BlcmF0aW9ucyYgdmFsdWUsIFBhc3NPd25QdHI8Q0NUaW1p
bmdGdW5jdGlvbj4gdGltaW5nRnVuY3Rpb24pCiAgICAgOiBDQ0tleWZyYW1lKHRpbWUsIHRpbWlu
Z0Z1bmN0aW9uKQogICAgICwgbV92YWx1ZSh2YWx1ZSkKIHsKQEAgLTEzMSw3OCArMTIyLDE0IEBA
IENDVHJhbnNmb3JtS2V5ZnJhbWU6On5DQ1RyYW5zZm9ybUtleWZyYW1lKCkKIHsKIH0KIAotY29u
c3QgVHJhbnNmb3JtT3BlcmF0aW9ucyYgQ0NUcmFuc2Zvcm1LZXlmcmFtZTo6dmFsdWUoKSBjb25z
dAorY29uc3QgV2ViS2l0OjpXZWJUcmFuc2Zvcm1PcGVyYXRpb25zJiBDQ1RyYW5zZm9ybUtleWZy
YW1lOjp2YWx1ZSgpIGNvbnN0CiB7CiAgICAgcmV0dXJuIG1fdmFsdWU7CiB9CiAKIFBhc3NPd25Q
dHI8Q0NUcmFuc2Zvcm1LZXlmcmFtZT4gQ0NUcmFuc2Zvcm1LZXlmcmFtZTo6Y2xvbmUoKSBjb25z
dAogewotICAgIC8vIFdlIG5lZWQgdG8gZG8gYSBkZWVwIGNvcHkgdGhlIG1fdmFsdWUgbWF5IGNv
bnRhaW4gcmVmIHBvaW50ZXJzIHRvIFRyYW5zZm9ybU9wZXJhdGlvbiBvYmplY3RzLgotICAgIFRy
YW5zZm9ybU9wZXJhdGlvbnMgb3BlcmF0aW9uczsKLSAgICBmb3IgKHNpemVfdCBqID0gMDsgaiA8
IG1fdmFsdWUuc2l6ZSgpOyArK2opIHsKLSAgICAgICAgVHJhbnNmb3JtT3BlcmF0aW9uOjpPcGVy
YXRpb25UeXBlIG9wZXJhdGlvblR5cGUgPSBtX3ZhbHVlLm9wZXJhdGlvbnMoKVtqXS0+Z2V0T3Bl
cmF0aW9uVHlwZSgpOwotICAgICAgICBzd2l0Y2ggKG9wZXJhdGlvblR5cGUpIHsKLSAgICAgICAg
Y2FzZSBUcmFuc2Zvcm1PcGVyYXRpb246OlNDQUxFX1g6Ci0gICAgICAgIGNhc2UgVHJhbnNmb3Jt
T3BlcmF0aW9uOjpTQ0FMRV9ZOgotICAgICAgICBjYXNlIFRyYW5zZm9ybU9wZXJhdGlvbjo6U0NB
TEVfWjoKLSAgICAgICAgY2FzZSBUcmFuc2Zvcm1PcGVyYXRpb246OlNDQUxFXzNEOgotICAgICAg
ICBjYXNlIFRyYW5zZm9ybU9wZXJhdGlvbjo6U0NBTEU6IHsKLSAgICAgICAgICAgIFNjYWxlVHJh
bnNmb3JtT3BlcmF0aW9uKiB0cmFuc2Zvcm0gPSBzdGF0aWNfY2FzdDxTY2FsZVRyYW5zZm9ybU9w
ZXJhdGlvbio+KG1fdmFsdWUub3BlcmF0aW9ucygpW2pdLmdldCgpKTsKLSAgICAgICAgICAgIG9w
ZXJhdGlvbnMub3BlcmF0aW9ucygpLmFwcGVuZChTY2FsZVRyYW5zZm9ybU9wZXJhdGlvbjo6Y3Jl
YXRlKHRyYW5zZm9ybS0+eCgpLCB0cmFuc2Zvcm0tPnkoKSwgdHJhbnNmb3JtLT56KCksIG9wZXJh
dGlvblR5cGUpKTsKLSAgICAgICAgICAgIGJyZWFrOwotICAgICAgICB9Ci0gICAgICAgIGNhc2Ug
VHJhbnNmb3JtT3BlcmF0aW9uOjpUUkFOU0xBVEVfWDoKLSAgICAgICAgY2FzZSBUcmFuc2Zvcm1P
cGVyYXRpb246OlRSQU5TTEFURV9ZOgotICAgICAgICBjYXNlIFRyYW5zZm9ybU9wZXJhdGlvbjo6
VFJBTlNMQVRFX1o6Ci0gICAgICAgIGNhc2UgVHJhbnNmb3JtT3BlcmF0aW9uOjpUUkFOU0xBVEVf
M0Q6Ci0gICAgICAgIGNhc2UgVHJhbnNmb3JtT3BlcmF0aW9uOjpUUkFOU0xBVEU6IHsKLSAgICAg
ICAgICAgIFRyYW5zbGF0ZVRyYW5zZm9ybU9wZXJhdGlvbiogdHJhbnNmb3JtID0gc3RhdGljX2Nh
c3Q8VHJhbnNsYXRlVHJhbnNmb3JtT3BlcmF0aW9uKj4obV92YWx1ZS5vcGVyYXRpb25zKClbal0u
Z2V0KCkpOwotICAgICAgICAgICAgb3BlcmF0aW9ucy5vcGVyYXRpb25zKCkuYXBwZW5kKFRyYW5z
bGF0ZVRyYW5zZm9ybU9wZXJhdGlvbjo6Y3JlYXRlKHRyYW5zZm9ybS0+eCgpLCB0cmFuc2Zvcm0t
PnkoKSwgdHJhbnNmb3JtLT56KCksIG9wZXJhdGlvblR5cGUpKTsKLSAgICAgICAgICAgIGJyZWFr
OwotICAgICAgICB9Ci0gICAgICAgIGNhc2UgVHJhbnNmb3JtT3BlcmF0aW9uOjpST1RBVEVfWDoK
LSAgICAgICAgY2FzZSBUcmFuc2Zvcm1PcGVyYXRpb246OlJPVEFURV9ZOgotICAgICAgICBjYXNl
IFRyYW5zZm9ybU9wZXJhdGlvbjo6Uk9UQVRFXzNEOgotICAgICAgICBjYXNlIFRyYW5zZm9ybU9w
ZXJhdGlvbjo6Uk9UQVRFOiB7Ci0gICAgICAgICAgICBSb3RhdGVUcmFuc2Zvcm1PcGVyYXRpb24q
IHRyYW5zZm9ybSA9IHN0YXRpY19jYXN0PFJvdGF0ZVRyYW5zZm9ybU9wZXJhdGlvbio+KG1fdmFs
dWUub3BlcmF0aW9ucygpW2pdLmdldCgpKTsKLSAgICAgICAgICAgIG9wZXJhdGlvbnMub3BlcmF0
aW9ucygpLmFwcGVuZChSb3RhdGVUcmFuc2Zvcm1PcGVyYXRpb246OmNyZWF0ZSh0cmFuc2Zvcm0t
PngoKSwgdHJhbnNmb3JtLT55KCksIHRyYW5zZm9ybS0+eigpLCB0cmFuc2Zvcm0tPmFuZ2xlKCks
IG9wZXJhdGlvblR5cGUpKTsKLSAgICAgICAgICAgIGJyZWFrOwotICAgICAgICB9Ci0gICAgICAg
IGNhc2UgVHJhbnNmb3JtT3BlcmF0aW9uOjpTS0VXX1g6Ci0gICAgICAgIGNhc2UgVHJhbnNmb3Jt
T3BlcmF0aW9uOjpTS0VXX1k6Ci0gICAgICAgIGNhc2UgVHJhbnNmb3JtT3BlcmF0aW9uOjpTS0VX
OiB7Ci0gICAgICAgICAgICBTa2V3VHJhbnNmb3JtT3BlcmF0aW9uKiB0cmFuc2Zvcm0gPSBzdGF0
aWNfY2FzdDxTa2V3VHJhbnNmb3JtT3BlcmF0aW9uKj4obV92YWx1ZS5vcGVyYXRpb25zKClbal0u
Z2V0KCkpOwotICAgICAgICAgICAgb3BlcmF0aW9ucy5vcGVyYXRpb25zKCkuYXBwZW5kKFNrZXdU
cmFuc2Zvcm1PcGVyYXRpb246OmNyZWF0ZSh0cmFuc2Zvcm0tPmFuZ2xlWCgpLCB0cmFuc2Zvcm0t
PmFuZ2xlWSgpLCBvcGVyYXRpb25UeXBlKSk7Ci0gICAgICAgICAgICBicmVhazsKLSAgICAgICAg
fQotICAgICAgICBjYXNlIFRyYW5zZm9ybU9wZXJhdGlvbjo6TUFUUklYOiB7Ci0gICAgICAgICAg
ICBNYXRyaXhUcmFuc2Zvcm1PcGVyYXRpb24qIHRyYW5zZm9ybSA9IHN0YXRpY19jYXN0PE1hdHJp
eFRyYW5zZm9ybU9wZXJhdGlvbio+KG1fdmFsdWUub3BlcmF0aW9ucygpW2pdLmdldCgpKTsKLSAg
ICAgICAgICAgIFdlYlRyYW5zZm9ybWF0aW9uTWF0cml4IG0gPSBXZWJUcmFuc2Zvcm1hdGlvbk1h
dHJpeCh0cmFuc2Zvcm0tPm1hdHJpeCgpKTsKLSAgICAgICAgICAgIG9wZXJhdGlvbnMub3BlcmF0
aW9ucygpLmFwcGVuZChNYXRyaXhUcmFuc2Zvcm1PcGVyYXRpb246OmNyZWF0ZShtLmEoKSwgbS5i
KCksIG0uYygpLCBtLmQoKSwgbS5lKCksIG0uZigpKSk7Ci0gICAgICAgICAgICBicmVhazsKLSAg
ICAgICAgfQotICAgICAgICBjYXNlIFRyYW5zZm9ybU9wZXJhdGlvbjo6TUFUUklYXzNEOiB7Ci0g
ICAgICAgICAgICBNYXRyaXgzRFRyYW5zZm9ybU9wZXJhdGlvbiogdHJhbnNmb3JtID0gc3RhdGlj
X2Nhc3Q8TWF0cml4M0RUcmFuc2Zvcm1PcGVyYXRpb24qPihtX3ZhbHVlLm9wZXJhdGlvbnMoKVtq
XS5nZXQoKSk7Ci0gICAgICAgICAgICBvcGVyYXRpb25zLm9wZXJhdGlvbnMoKS5hcHBlbmQoTWF0
cml4M0RUcmFuc2Zvcm1PcGVyYXRpb246OmNyZWF0ZSh0cmFuc2Zvcm0tPm1hdHJpeCgpKSk7Ci0g
ICAgICAgICAgICBicmVhazsKLSAgICAgICAgfQotICAgICAgICBjYXNlIFRyYW5zZm9ybU9wZXJh
dGlvbjo6UEVSU1BFQ1RJVkU6IHsKLSAgICAgICAgICAgIFBlcnNwZWN0aXZlVHJhbnNmb3JtT3Bl
cmF0aW9uKiB0cmFuc2Zvcm0gPSBzdGF0aWNfY2FzdDxQZXJzcGVjdGl2ZVRyYW5zZm9ybU9wZXJh
dGlvbio+KG1fdmFsdWUub3BlcmF0aW9ucygpW2pdLmdldCgpKTsKLSAgICAgICAgICAgIG9wZXJh
dGlvbnMub3BlcmF0aW9ucygpLmFwcGVuZChQZXJzcGVjdGl2ZVRyYW5zZm9ybU9wZXJhdGlvbjo6
Y3JlYXRlKHRyYW5zZm9ybS0+cGVyc3BlY3RpdmUoKSkpOwotICAgICAgICAgICAgYnJlYWs7Ci0g
ICAgICAgIH0KLSAgICAgICAgY2FzZSBUcmFuc2Zvcm1PcGVyYXRpb246OklERU5USVRZOiB7Ci0g
ICAgICAgICAgICBvcGVyYXRpb25zLm9wZXJhdGlvbnMoKS5hcHBlbmQoSWRlbnRpdHlUcmFuc2Zv
cm1PcGVyYXRpb246OmNyZWF0ZSgpKTsKLSAgICAgICAgICAgIGJyZWFrOwotICAgICAgICB9Ci0g
ICAgICAgIGNhc2UgVHJhbnNmb3JtT3BlcmF0aW9uOjpOT05FOgotICAgICAgICAgICAgLy8gRG8g
bm90aGluZy4KLSAgICAgICAgICAgIGJyZWFrOwotICAgICAgICB9IC8vIHN3aXRjaAotICAgIH0g
Ly8gZm9yIGVhY2ggb3BlcmF0aW9uCi0KLSAgICByZXR1cm4gQ0NUcmFuc2Zvcm1LZXlmcmFtZTo6
Y3JlYXRlKHRpbWUoKSwgb3BlcmF0aW9ucywgdGltaW5nRnVuY3Rpb24oKSA/IGNsb25lVGltaW5n
RnVuY3Rpb24odGltaW5nRnVuY3Rpb24oKSkgOiBudWxscHRyKTsKKyAgICByZXR1cm4gQ0NUcmFu
c2Zvcm1LZXlmcmFtZTo6Y3JlYXRlKHRpbWUoKSwgdmFsdWUoKSwgdGltaW5nRnVuY3Rpb24oKSA/
IGNsb25lVGltaW5nRnVuY3Rpb24odGltaW5nRnVuY3Rpb24oKSkgOiBudWxscHRyKTsKIH0KIAog
UGFzc093blB0cjxDQ0tleWZyYW1lZEZsb2F0QW5pbWF0aW9uQ3VydmU+IENDS2V5ZnJhbWVkRmxv
YXRBbmltYXRpb25DdXJ2ZTo6Y3JlYXRlKCkKQEAgLTI4OSwyMCArMjE2LDEzIEBAIFBhc3NPd25Q
dHI8Q0NBbmltYXRpb25DdXJ2ZT4gQ0NLZXlmcmFtZWRUcmFuc2Zvcm1BbmltYXRpb25DdXJ2ZTo6
Y2xvbmUoKSBjb25zdAogICAgIHJldHVybiB0b1JldHVybi5yZWxlYXNlKCk7CiB9CiAKLVdlYlRy
YW5zZm9ybWF0aW9uTWF0cml4IENDS2V5ZnJhbWVkVHJhbnNmb3JtQW5pbWF0aW9uQ3VydmU6Omdl
dFZhbHVlKGRvdWJsZSB0LCBjb25zdCBJbnRTaXplJiBsYXllclNpemUpIGNvbnN0CitXZWJUcmFu
c2Zvcm1hdGlvbk1hdHJpeCBDQ0tleWZyYW1lZFRyYW5zZm9ybUFuaW1hdGlvbkN1cnZlOjpnZXRW
YWx1ZShkb3VibGUgdCkgY29uc3QKIHsKLSAgICAvLyBOb3RlOiBXZWJDb3JlIGRhdGEgdHlwZSB1
c2VkIGhlcmUsIGp1c3QgZm9yIG5vdy4KLSAgICBUcmFuc2Zvcm1hdGlvbk1hdHJpeCB0cmFuc2Zv
cm1NYXRyaXg7Ci0KLSAgICBpZiAodCA8PSBtX2tleWZyYW1lcy5maXJzdCgpLT50aW1lKCkpIHsK
LSAgICAgICAgbV9rZXlmcmFtZXMuZmlyc3QoKS0+dmFsdWUoKS5hcHBseShsYXllclNpemUsIHRy
YW5zZm9ybU1hdHJpeCk7Ci0gICAgICAgIHJldHVybiBXZWJUcmFuc2Zvcm1hdGlvbk1hdHJpeCh0
cmFuc2Zvcm1NYXRyaXgpOwotICAgIH0KKyAgICBpZiAodCA8PSBtX2tleWZyYW1lcy5maXJzdCgp
LT50aW1lKCkpCisgICAgICAgIHJldHVybiBtX2tleWZyYW1lcy5maXJzdCgpLT52YWx1ZSgpLmFw
cGx5KCk7CiAKLSAgICBpZiAodCA+PSBtX2tleWZyYW1lcy5sYXN0KCktPnRpbWUoKSkgewotICAg
ICAgICBtX2tleWZyYW1lcy5sYXN0KCktPnZhbHVlKCkuYXBwbHkobGF5ZXJTaXplLCB0cmFuc2Zv
cm1NYXRyaXgpOwotICAgICAgICByZXR1cm4gV2ViVHJhbnNmb3JtYXRpb25NYXRyaXgodHJhbnNm
b3JtTWF0cml4KTsKLSAgICB9CisgICAgaWYgKHQgPj0gbV9rZXlmcmFtZXMubGFzdCgpLT50aW1l
KCkpCisgICAgICAgIHJldHVybiBtX2tleWZyYW1lcy5sYXN0KCktPnZhbHVlKCkuYXBwbHkoKTsK
IAogICAgIHNpemVfdCBpID0gMDsKICAgICBmb3IgKDsgaSA8IG1fa2V5ZnJhbWVzLnNpemUoKSAt
IDE7ICsraSkgewpAQCAtMzE1LDIwICsyMzUsNyBAQCBXZWJUcmFuc2Zvcm1hdGlvbk1hdHJpeCBD
Q0tleWZyYW1lZFRyYW5zZm9ybUFuaW1hdGlvbkN1cnZlOjpnZXRWYWx1ZShkb3VibGUgdCwgYwog
ICAgIGlmIChtX2tleWZyYW1lc1tpXS0+dGltaW5nRnVuY3Rpb24oKSkKICAgICAgICAgcHJvZ3Jl
c3MgPSBtX2tleWZyYW1lc1tpXS0+dGltaW5nRnVuY3Rpb24oKS0+Z2V0VmFsdWUocHJvZ3Jlc3Mp
OwogCi0gICAgaWYgKG1fa2V5ZnJhbWVzW2ldLT52YWx1ZSgpLm9wZXJhdGlvbnNNYXRjaChtX2tl
eWZyYW1lc1tpKzFdLT52YWx1ZSgpKSkgewotICAgICAgICBmb3IgKHNpemVfdCBqID0gMDsgaiA8
IG1fa2V5ZnJhbWVzW2krMV0tPnZhbHVlKCkuc2l6ZSgpOyArK2opCi0gICAgICAgICAgICBtX2tl
eWZyYW1lc1tpKzFdLT52YWx1ZSgpLm9wZXJhdGlvbnMoKVtqXS0+YmxlbmQobV9rZXlmcmFtZXNb
aV0tPnZhbHVlKCkuYXQoaiksIHByb2dyZXNzKS0+YXBwbHkodHJhbnNmb3JtTWF0cml4LCBsYXll
clNpemUpOwotICAgIH0gZWxzZSB7Ci0gICAgICAgIC8vIE5vdGU6IFdlYkNvcmUgZGF0YSB0eXBl
IHVzZWQgaGVyZSwganVzdCBmb3Igbm93LgotICAgICAgICBUcmFuc2Zvcm1hdGlvbk1hdHJpeCBz
b3VyY2U7Ci0KLSAgICAgICAgbV9rZXlmcmFtZXNbaV0tPnZhbHVlKCkuYXBwbHkobGF5ZXJTaXpl
LCBzb3VyY2UpOwotICAgICAgICBtX2tleWZyYW1lc1tpKzFdLT52YWx1ZSgpLmFwcGx5KGxheWVy
U2l6ZSwgdHJhbnNmb3JtTWF0cml4KTsKLQotICAgICAgICB0cmFuc2Zvcm1NYXRyaXguYmxlbmQo
c291cmNlLCBwcm9ncmVzcyk7Ci0gICAgfQotCi0gICAgcmV0dXJuIFdlYlRyYW5zZm9ybWF0aW9u
TWF0cml4KHRyYW5zZm9ybU1hdHJpeCk7CisgICAgcmV0dXJuIG1fa2V5ZnJhbWVzW2krMV0tPnZh
bHVlKCkuYmxlbmQobV9rZXlmcmFtZXNbaV0tPnZhbHVlKCksIHByb2dyZXNzKTsKIH0KIAogfSAv
LyBuYW1lc3BhY2UgV2ViQ29yZQpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0v
Z3JhcGhpY3MvY2hyb21pdW0vY2MvQ0NLZXlmcmFtZWRBbmltYXRpb25DdXJ2ZS5oIGIvU291cmNl
L1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvY2hyb21pdW0vY2MvQ0NLZXlmcmFtZWRBbmltYXRp
b25DdXJ2ZS5oCmluZGV4IGU3MGNkYWZiNzViMjk4MDliMGVkYmUzOTBjN2FiYWM5OTBhNWNiZDAu
LmUwZmM3OWViNzc0NzJhZDBjZjgzMjUxZjI4MzlkNDljNWNmZDFiZDggMTAwNjQ0Ci0tLSBhL1Nv
dXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2Nocm9taXVtL2NjL0NDS2V5ZnJhbWVkQW5p
bWF0aW9uQ3VydmUuaAorKysgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9jaHJv
bWl1bS9jYy9DQ0tleWZyYW1lZEFuaW1hdGlvbkN1cnZlLmgKQEAgLTI1LDEwICsyNSwxMSBAQAog
I2lmbmRlZiBDQ0tleWZyYW1lZEFuaW1hdGlvbkN1cnZlX2gKICNkZWZpbmUgQ0NLZXlmcmFtZWRB
bmltYXRpb25DdXJ2ZV9oCiAKLSNpbmNsdWRlICJUcmFuc2Zvcm1PcGVyYXRpb25zLmgiCiAjaW5j
bHVkZSAiY2MvQ0NBbmltYXRpb25DdXJ2ZS5oIgogI2luY2x1ZGUgImNjL0NDVGltaW5nRnVuY3Rp
b24uaCIKIAorI2luY2x1ZGUgPHB1YmxpYy9XZWJUcmFuc2Zvcm1PcGVyYXRpb25zLmg+CisKICNp
bmNsdWRlIDx3dGYvT3duUHRyLmg+CiAjaW5jbHVkZSA8d3RmL1Bhc3NPd25QdHIuaD4KIApAQCAt
NjUsMTcgKzY2LDE3IEBAIHByaXZhdGU6CiAKIGNsYXNzIENDVHJhbnNmb3JtS2V5ZnJhbWUgOiBw
dWJsaWMgQ0NLZXlmcmFtZSB7CiBwdWJsaWM6Ci0gICAgc3RhdGljIFBhc3NPd25QdHI8Q0NUcmFu
c2Zvcm1LZXlmcmFtZT4gY3JlYXRlKGRvdWJsZSB0aW1lLCBjb25zdCBUcmFuc2Zvcm1PcGVyYXRp
b25zJiB2YWx1ZSwgUGFzc093blB0cjxDQ1RpbWluZ0Z1bmN0aW9uPik7CisgICAgc3RhdGljIFBh
c3NPd25QdHI8Q0NUcmFuc2Zvcm1LZXlmcmFtZT4gY3JlYXRlKGRvdWJsZSB0aW1lLCBjb25zdCBX
ZWJLaXQ6OldlYlRyYW5zZm9ybU9wZXJhdGlvbnMmIHZhbHVlLCBQYXNzT3duUHRyPENDVGltaW5n
RnVuY3Rpb24+KTsKICAgICB2aXJ0dWFsIH5DQ1RyYW5zZm9ybUtleWZyYW1lKCk7CiAKLSAgICBj
b25zdCBUcmFuc2Zvcm1PcGVyYXRpb25zJiB2YWx1ZSgpIGNvbnN0OworICAgIGNvbnN0IFdlYktp
dDo6V2ViVHJhbnNmb3JtT3BlcmF0aW9ucyYgdmFsdWUoKSBjb25zdDsKIAogICAgIFBhc3NPd25Q
dHI8Q0NUcmFuc2Zvcm1LZXlmcmFtZT4gY2xvbmUoKSBjb25zdDsKIAogcHJpdmF0ZToKLSAgICBD
Q1RyYW5zZm9ybUtleWZyYW1lKGRvdWJsZSB0aW1lLCBjb25zdCBUcmFuc2Zvcm1PcGVyYXRpb25z
JiB2YWx1ZSwgUGFzc093blB0cjxDQ1RpbWluZ0Z1bmN0aW9uPik7CisgICAgQ0NUcmFuc2Zvcm1L
ZXlmcmFtZShkb3VibGUgdGltZSwgY29uc3QgV2ViS2l0OjpXZWJUcmFuc2Zvcm1PcGVyYXRpb25z
JiB2YWx1ZSwgUGFzc093blB0cjxDQ1RpbWluZ0Z1bmN0aW9uPik7CiAKLSAgICBUcmFuc2Zvcm1P
cGVyYXRpb25zIG1fdmFsdWU7CisgICAgV2ViS2l0OjpXZWJUcmFuc2Zvcm1PcGVyYXRpb25zIG1f
dmFsdWU7CiB9OwogCiBjbGFzcyBDQ0tleWZyYW1lZEZsb2F0QW5pbWF0aW9uQ3VydmUgOiBwdWJs
aWMgQ0NGbG9hdEFuaW1hdGlvbkN1cnZlIHsKQEAgLTExNiw3ICsxMTcsNyBAQCBwdWJsaWM6CiAg
ICAgdmlydHVhbCBQYXNzT3duUHRyPENDQW5pbWF0aW9uQ3VydmU+IGNsb25lKCkgY29uc3QgT1ZF
UlJJREU7CiAKICAgICAvLyBDQ1RyYW5zZm9ybUFuaW1hdGlvbkN1cnZlIGltcGxlbWVudGF0aW9u
Ci0gICAgdmlydHVhbCBXZWJLaXQ6OldlYlRyYW5zZm9ybWF0aW9uTWF0cml4IGdldFZhbHVlKGRv
dWJsZSB0LCBjb25zdCBJbnRTaXplJikgY29uc3QgT1ZFUlJJREU7CisgICAgdmlydHVhbCBXZWJL
aXQ6OldlYlRyYW5zZm9ybWF0aW9uTWF0cml4IGdldFZhbHVlKGRvdWJsZSB0KSBjb25zdCBPVkVS
UklERTsKIAogcHJpdmF0ZToKICAgICBDQ0tleWZyYW1lZFRyYW5zZm9ybUFuaW1hdGlvbkN1cnZl
KCk7CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9jaHJvbWl1
bS9jYy9DQ0xheWVyQW5pbWF0aW9uQ29udHJvbGxlci5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0
Zm9ybS9ncmFwaGljcy9jaHJvbWl1bS9jYy9DQ0xheWVyQW5pbWF0aW9uQ29udHJvbGxlci5jcHAK
aW5kZXggMDk2OTc5NTQ0ODNhNTc5MmYyZTQyOGQzMGYwYTJlNGZjY2NkYWZmNi4uNjY2MTlhZjkx
YTYxYzA3NzFiZTY0N2MxZTBhMzZmM2QwYmI3ZGViNSAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNv
cmUvcGxhdGZvcm0vZ3JhcGhpY3MvY2hyb21pdW0vY2MvQ0NMYXllckFuaW1hdGlvbkNvbnRyb2xs
ZXIuY3BwCisrKyBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2Nocm9taXVtL2Nj
L0NDTGF5ZXJBbmltYXRpb25Db250cm9sbGVyLmNwcApAQCAtMzcsOTQgKzM3LDYgQEAgdXNpbmcg
V2ViS2l0OjpXZWJUcmFuc2Zvcm1hdGlvbk1hdHJpeDsKIAogbmFtZXNwYWNlIFdlYkNvcmUgewog
Ci1uYW1lc3BhY2UgewotCi10ZW1wbGF0ZSA8Y2xhc3MgVmFsdWUsIGNsYXNzIEtleWZyYW1lLCBj
bGFzcyBDdXJ2ZT4KLXZvaWQgYXBwZW5kS2V5ZnJhbWUoQ3VydmUmIGN1cnZlLCBkb3VibGUga2V5
VGltZSwgY29uc3QgVmFsdWUqIHZhbHVlLCBQYXNzT3duUHRyPENDVGltaW5nRnVuY3Rpb24+IHRp
bWluZ0Z1bmN0aW9uKQotewotICAgIGN1cnZlLmFkZEtleWZyYW1lKEtleWZyYW1lOjpjcmVhdGUo
a2V5VGltZSwgdmFsdWUtPnZhbHVlKCksIHRpbWluZ0Z1bmN0aW9uKSk7Ci19Ci0KLXRlbXBsYXRl
IDw+Ci12b2lkIGFwcGVuZEtleWZyYW1lPFRyYW5zZm9ybUFuaW1hdGlvblZhbHVlLCBDQ1RyYW5z
Zm9ybUtleWZyYW1lLCBDQ0tleWZyYW1lZFRyYW5zZm9ybUFuaW1hdGlvbkN1cnZlPihDQ0tleWZy
YW1lZFRyYW5zZm9ybUFuaW1hdGlvbkN1cnZlJiBjdXJ2ZSwgZG91YmxlIGtleVRpbWUsIGNvbnN0
IFRyYW5zZm9ybUFuaW1hdGlvblZhbHVlKiB2YWx1ZSwgUGFzc093blB0cjxDQ1RpbWluZ0Z1bmN0
aW9uPiB0aW1pbmdGdW5jdGlvbikKLXsKLSAgICBjdXJ2ZS5hZGRLZXlmcmFtZShDQ1RyYW5zZm9y
bUtleWZyYW1lOjpjcmVhdGUoa2V5VGltZSwgKnZhbHVlLT52YWx1ZSgpLCB0aW1pbmdGdW5jdGlv
bikpOwotfQotCi10ZW1wbGF0ZSA8Y2xhc3MgVmFsdWUsIGNsYXNzIEtleWZyYW1lLCBjbGFzcyBD
dXJ2ZT4KLVBhc3NPd25QdHI8Q0NBY3RpdmVBbmltYXRpb24+IGNyZWF0ZUFjdGl2ZUFuaW1hdGlv
bihjb25zdCBLZXlmcmFtZVZhbHVlTGlzdCYgdmFsdWVMaXN0LCBjb25zdCBBbmltYXRpb24qIGFu
aW1hdGlvbiwgc2l6ZV90IGFuaW1hdGlvbklkLCBzaXplX3QgZ3JvdXBJZCwgZG91YmxlIHRpbWVP
ZmZzZXQsIENDQWN0aXZlQW5pbWF0aW9uOjpUYXJnZXRQcm9wZXJ0eSB0YXJnZXRQcm9wZXJ0eSkK
LXsKLSAgICBib29sIGFsdGVybmF0ZSA9IGZhbHNlOwotICAgIGJvb2wgcmV2ZXJzZSA9IGZhbHNl
OwotICAgIGlmIChhbmltYXRpb24gJiYgYW5pbWF0aW9uLT5pc0RpcmVjdGlvblNldCgpKSB7Ci0g
ICAgICAgIEFuaW1hdGlvbjo6QW5pbWF0aW9uRGlyZWN0aW9uIGRpcmVjdGlvbiA9IGFuaW1hdGlv
bi0+ZGlyZWN0aW9uKCk7Ci0gICAgICAgIGlmIChkaXJlY3Rpb24gPT0gQW5pbWF0aW9uOjpBbmlt
YXRpb25EaXJlY3Rpb25BbHRlcm5hdGUgfHwgZGlyZWN0aW9uID09IEFuaW1hdGlvbjo6QW5pbWF0
aW9uRGlyZWN0aW9uQWx0ZXJuYXRlUmV2ZXJzZSkKLSAgICAgICAgICAgIGFsdGVybmF0ZSA9IHRy
dWU7Ci0gICAgICAgIGlmIChkaXJlY3Rpb24gPT0gQW5pbWF0aW9uOjpBbmltYXRpb25EaXJlY3Rp
b25SZXZlcnNlIHx8IGRpcmVjdGlvbiA9PSBBbmltYXRpb246OkFuaW1hdGlvbkRpcmVjdGlvbkFs
dGVybmF0ZVJldmVyc2UpCi0gICAgICAgICAgICByZXZlcnNlID0gdHJ1ZTsKLSAgICB9Ci0KLSAg
ICBPd25QdHI8Q3VydmU+IGN1cnZlID0gQ3VydmU6OmNyZWF0ZSgpOwotICAgIFZlY3RvcjxLZXlm
cmFtZT4ga2V5ZnJhbWVzOwotCi0gICAgZm9yIChzaXplX3QgaSA9IDA7IGkgPCB2YWx1ZUxpc3Qu
c2l6ZSgpOyBpKyspIHsKLSAgICAgICAgc2l6ZV90IGluZGV4ID0gcmV2ZXJzZSA/IHZhbHVlTGlz
dC5zaXplKCkgLSBpIC0gMSA6IGk7Ci0KLSAgICAgICAgY29uc3QgVmFsdWUqIG9yaWdpbmFsVmFs
dWUgPSBzdGF0aWNfY2FzdDxjb25zdCBWYWx1ZSo+KHZhbHVlTGlzdC5hdChpbmRleCkpOwotCi0g
ICAgICAgIE93blB0cjxDQ1RpbWluZ0Z1bmN0aW9uPiB0aW1pbmdGdW5jdGlvbjsKLSAgICAgICAg
Y29uc3QgVGltaW5nRnVuY3Rpb24qIG9yaWdpbmFsVGltaW5nRnVuY3Rpb24gPSBvcmlnaW5hbFZh
bHVlLT50aW1pbmdGdW5jdGlvbigpOwotCi0gICAgICAgIC8vIElmIHRoZXJlIGhhc24ndCBiZWVu
IGEgdGltaW5nIGZ1bmN0aW9uIGFzc29jaWF0ZWQgd2l0aCB0aGlzIGtleWZyYW1lLCB1c2UgdGhl
Ci0gICAgICAgIC8vIGFuaW1hdGlvbidzIHRpbWluZyBmdW5jdGlvbiwgaWYgd2UgaGF2ZSBvbmUu
Ci0gICAgICAgIGlmICghb3JpZ2luYWxUaW1pbmdGdW5jdGlvbiAmJiBhbmltYXRpb24tPmlzVGlt
aW5nRnVuY3Rpb25TZXQoKSkKLSAgICAgICAgICAgIG9yaWdpbmFsVGltaW5nRnVuY3Rpb24gPSBh
bmltYXRpb24tPnRpbWluZ0Z1bmN0aW9uKCkuZ2V0KCk7Ci0KLSAgICAgICAgaWYgKG9yaWdpbmFs
VGltaW5nRnVuY3Rpb24pIHsKLSAgICAgICAgICAgIHN3aXRjaCAob3JpZ2luYWxUaW1pbmdGdW5j
dGlvbi0+dHlwZSgpKSB7Ci0gICAgICAgICAgICBjYXNlIFRpbWluZ0Z1bmN0aW9uOjpTdGVwc0Z1
bmN0aW9uOgotICAgICAgICAgICAgICAgIC8vIEZJWE1FOiBhZGQgc3VwcG9ydCBmb3Igc3RlcHMg
dGltaW5nIGZ1bmN0aW9uLgotICAgICAgICAgICAgICAgIHJldHVybiBudWxscHRyOwotICAgICAg
ICAgICAgY2FzZSBUaW1pbmdGdW5jdGlvbjo6TGluZWFyRnVuY3Rpb246Ci0gICAgICAgICAgICAg
ICAgLy8gRG9uJ3Qgc2V0IHRoZSB0aW1pbmcgZnVuY3Rpb24uIEtleWZyYW1lcyBhcmUgaW50ZXJw
b2xhdGVkIGxpbmVhcmx5IGlmIHRoZXJlIGlzIG5vIHRpbWluZyBmdW5jdGlvbi4KLSAgICAgICAg
ICAgICAgICBicmVhazsKLSAgICAgICAgICAgIGNhc2UgVGltaW5nRnVuY3Rpb246OkN1YmljQmV6
aWVyRnVuY3Rpb246Ci0gICAgICAgICAgICAgICAgY29uc3QgQ3ViaWNCZXppZXJUaW1pbmdGdW5j
dGlvbiogb3JpZ2luYWxCZXppZXJUaW1pbmdGdW5jdGlvbiA9IHN0YXRpY19jYXN0PGNvbnN0IEN1
YmljQmV6aWVyVGltaW5nRnVuY3Rpb24qPihvcmlnaW5hbFRpbWluZ0Z1bmN0aW9uKTsKLSAgICAg
ICAgICAgICAgICB0aW1pbmdGdW5jdGlvbiA9IENDQ3ViaWNCZXppZXJUaW1pbmdGdW5jdGlvbjo6
Y3JlYXRlKG9yaWdpbmFsQmV6aWVyVGltaW5nRnVuY3Rpb24tPngxKCksIG9yaWdpbmFsQmV6aWVy
VGltaW5nRnVuY3Rpb24tPnkxKCksIG9yaWdpbmFsQmV6aWVyVGltaW5nRnVuY3Rpb24tPngyKCks
IG9yaWdpbmFsQmV6aWVyVGltaW5nRnVuY3Rpb24tPnkyKCkpOwotICAgICAgICAgICAgICAgIGJy
ZWFrOwotICAgICAgICAgICAgfSAvLyBzd2l0Y2gKLSAgICAgICAgfSBlbHNlCi0gICAgICAgICAg
ICB0aW1pbmdGdW5jdGlvbiA9IENDRWFzZVRpbWluZ0Z1bmN0aW9uOjpjcmVhdGUoKTsKLQotICAg
ICAgICBkb3VibGUgZHVyYXRpb24gPSAoYW5pbWF0aW9uICYmIGFuaW1hdGlvbi0+aXNEdXJhdGlv
blNldCgpKSA/IGFuaW1hdGlvbi0+ZHVyYXRpb24oKSA6IDE7Ci0gICAgICAgIGRvdWJsZSBrZXlU
aW1lID0gb3JpZ2luYWxWYWx1ZS0+a2V5VGltZSgpICogZHVyYXRpb247Ci0gICAgICAgIGlmIChy
ZXZlcnNlKQotICAgICAgICAgICAga2V5VGltZSA9IGR1cmF0aW9uIC0ga2V5VGltZTsKLSAgICAg
ICAgYXBwZW5kS2V5ZnJhbWU8VmFsdWUsIEtleWZyYW1lLCBDdXJ2ZT4oKmN1cnZlLCBrZXlUaW1l
LCBvcmlnaW5hbFZhbHVlLCB0aW1pbmdGdW5jdGlvbi5yZWxlYXNlKCkpOwotICAgIH0KLQotICAg
IE93blB0cjxDQ0FjdGl2ZUFuaW1hdGlvbj4gYW5pbSA9IENDQWN0aXZlQW5pbWF0aW9uOjpjcmVh
dGUoY3VydmUucmVsZWFzZSgpLCBhbmltYXRpb25JZCwgZ3JvdXBJZCwgdGFyZ2V0UHJvcGVydHkp
OwotCi0gICAgQVNTRVJUKGFuaW0uZ2V0KCkpOwotCi0gICAgaWYgKGFuaW0uZ2V0KCkpIHsKLSAg
ICAgICAgaW50IGl0ZXJhdGlvbnMgPSAoYW5pbWF0aW9uICYmIGFuaW1hdGlvbi0+aXNJdGVyYXRp
b25Db3VudFNldCgpKSA/IGFuaW1hdGlvbi0+aXRlcmF0aW9uQ291bnQoKSA6IDE7Ci0gICAgICAg
IGFuaW0tPnNldEl0ZXJhdGlvbnMoaXRlcmF0aW9ucyk7Ci0gICAgICAgIGFuaW0tPnNldEFsdGVy
bmF0ZXNEaXJlY3Rpb24oYWx0ZXJuYXRlKTsKLSAgICB9Ci0KLSAgICAvLyBJbiBvcmRlciB0byBh
dm9pZCBza2V3LCB0aGUgbWFpbiB0aHJlYWQgYW5pbWF0aW9uIGNhbm5vdCB0aWNrIHVudGlsIGl0
IGhhcyByZWNlaXZlZCB0aGUgc3RhcnQgdGltZSBvZgotICAgIC8vIHRoZSBjb3JyZXNwb25kaW5n
IGltcGwgdGhyZWFkIGFuaW1hdGlvbi4KLSAgICBhbmltLT5zZXROZWVkc1N5bmNocm9uaXplZFN0
YXJ0VGltZSh0cnVlKTsKLQotICAgIC8vIElmIHRpbWVPZmZzZXQgPiAwLCB0aGVuIHRoZSBhbmlt
YXRpb24gaGFzIHN0YXJ0ZWQgaW4gdGhlIHBhc3QuCi0gICAgYW5pbS0+c2V0VGltZU9mZnNldCh0
aW1lT2Zmc2V0KTsKLQotICAgIHJldHVybiBhbmltLnJlbGVhc2UoKTsKLX0KLQotfSAvLyBuYW1l
cGFjZQotCiBDQ0xheWVyQW5pbWF0aW9uQ29udHJvbGxlcjo6Q0NMYXllckFuaW1hdGlvbkNvbnRy
b2xsZXIoQ0NMYXllckFuaW1hdGlvbkNvbnRyb2xsZXJDbGllbnQqIGNsaWVudCkKICAgICA6IG1f
Zm9yY2VTeW5jKGZhbHNlKQogICAgICwgbV9jbGllbnQoY2xpZW50KQpAQCAtMTQwLDMyICs1Miw2
IEBAIFBhc3NPd25QdHI8Q0NMYXllckFuaW1hdGlvbkNvbnRyb2xsZXI+IENDTGF5ZXJBbmltYXRp
b25Db250cm9sbGVyOjpjcmVhdGUoQ0NMYXllCiAgICAgcmV0dXJuIGFkb3B0UHRyKG5ldyBDQ0xh
eWVyQW5pbWF0aW9uQ29udHJvbGxlcihjbGllbnQpKTsKIH0KIAotYm9vbCBDQ0xheWVyQW5pbWF0
aW9uQ29udHJvbGxlcjo6YWRkQW5pbWF0aW9uKGNvbnN0IEtleWZyYW1lVmFsdWVMaXN0JiB2YWx1
ZUxpc3QsIGNvbnN0IEludFNpemUmLCBjb25zdCBBbmltYXRpb24qIGFuaW1hdGlvbiwgaW50IGFu
aW1hdGlvbklkLCBpbnQgZ3JvdXBJZCwgZG91YmxlIHRpbWVPZmZzZXQpCi17Ci0gICAgaWYgKCFh
bmltYXRpb24pCi0gICAgICAgIHJldHVybiBmYWxzZTsKLQotICAgIE93blB0cjxDQ0FjdGl2ZUFu
aW1hdGlvbj4gdG9BZGQ7Ci0gICAgaWYgKHZhbHVlTGlzdC5wcm9wZXJ0eSgpID09IEFuaW1hdGVk
UHJvcGVydHlXZWJraXRUcmFuc2Zvcm0pCi0gICAgICAgIHRvQWRkID0gY3JlYXRlQWN0aXZlQW5p
bWF0aW9uPFRyYW5zZm9ybUFuaW1hdGlvblZhbHVlLCBDQ1RyYW5zZm9ybUtleWZyYW1lLCBDQ0tl
eWZyYW1lZFRyYW5zZm9ybUFuaW1hdGlvbkN1cnZlPih2YWx1ZUxpc3QsIGFuaW1hdGlvbiwgYW5p
bWF0aW9uSWQsIGdyb3VwSWQsIHRpbWVPZmZzZXQsIENDQWN0aXZlQW5pbWF0aW9uOjpUcmFuc2Zv
cm0pOwotICAgIGVsc2UgaWYgKHZhbHVlTGlzdC5wcm9wZXJ0eSgpID09IEFuaW1hdGVkUHJvcGVy
dHlPcGFjaXR5KQotICAgICAgICB0b0FkZCA9IGNyZWF0ZUFjdGl2ZUFuaW1hdGlvbjxGbG9hdEFu
aW1hdGlvblZhbHVlLCBDQ0Zsb2F0S2V5ZnJhbWUsIENDS2V5ZnJhbWVkRmxvYXRBbmltYXRpb25D
dXJ2ZT4odmFsdWVMaXN0LCBhbmltYXRpb24sIGFuaW1hdGlvbklkLCBncm91cElkLCB0aW1lT2Zm
c2V0LCBDQ0FjdGl2ZUFuaW1hdGlvbjo6T3BhY2l0eSk7Ci0KLSAgICBpZiAodG9BZGQuZ2V0KCkp
IHsKLSAgICAgICAgLy8gUmVtb3ZlIGFueSBleGlzdGluZyBhbmltYXRpb25zIHdpdGggdGhlIHNh
bWUgYW5pbWF0aW9uIGlkIGFuZCB0YXJnZXQgcHJvcGVydHkuCi0gICAgICAgIGZvciAoc2l6ZV90
IGkgPSAwOyBpIDwgbV9hY3RpdmVBbmltYXRpb25zLnNpemUoKTspIHsKLSAgICAgICAgICAgIGlm
IChtX2FjdGl2ZUFuaW1hdGlvbnNbaV0tPmlkKCkgPT0gYW5pbWF0aW9uSWQgJiYgbV9hY3RpdmVB
bmltYXRpb25zW2ldLT50YXJnZXRQcm9wZXJ0eSgpID09IHRvQWRkLT50YXJnZXRQcm9wZXJ0eSgp
KQotICAgICAgICAgICAgICAgIG1fYWN0aXZlQW5pbWF0aW9ucy5yZW1vdmUoaSk7Ci0gICAgICAg
ICAgICBlbHNlCi0gICAgICAgICAgICAgICAgaSsrOwotICAgICAgICB9Ci0gICAgICAgIG1fYWN0
aXZlQW5pbWF0aW9ucy5hcHBlbmQodG9BZGQucmVsZWFzZSgpKTsKLSAgICAgICAgcmV0dXJuIHRy
dWU7Ci0gICAgfQotCi0gICAgcmV0dXJuIGZhbHNlOwotfQotCiB2b2lkIENDTGF5ZXJBbmltYXRp
b25Db250cm9sbGVyOjpwYXVzZUFuaW1hdGlvbihpbnQgYW5pbWF0aW9uSWQsIGRvdWJsZSB0aW1l
T2Zmc2V0KQogewogICAgIGZvciAoc2l6ZV90IGkgPSAwOyBpIDwgbV9hY3RpdmVBbmltYXRpb25z
LnNpemUoKTsgKytpKSB7CkBAIC0xODQsNiArNzAsMTYgQEAgdm9pZCBDQ0xheWVyQW5pbWF0aW9u
Q29udHJvbGxlcjo6cmVtb3ZlQW5pbWF0aW9uKGludCBhbmltYXRpb25JZCkKICAgICB9CiB9CiAK
K3ZvaWQgQ0NMYXllckFuaW1hdGlvbkNvbnRyb2xsZXI6OnJlbW92ZUFuaW1hdGlvbihpbnQgYW5p
bWF0aW9uSWQsIENDQWN0aXZlQW5pbWF0aW9uOjpUYXJnZXRQcm9wZXJ0eSB0YXJnZXRQcm9wZXJ0
eSkKK3sKKyAgICBmb3IgKHNpemVfdCBpID0gMDsgaSA8IG1fYWN0aXZlQW5pbWF0aW9ucy5zaXpl
KCk7KSB7CisgICAgICAgIGlmIChtX2FjdGl2ZUFuaW1hdGlvbnNbaV0tPmlkKCkgPT0gYW5pbWF0
aW9uSWQgJiYgbV9hY3RpdmVBbmltYXRpb25zW2ldLT50YXJnZXRQcm9wZXJ0eSgpID09IHRhcmdl
dFByb3BlcnR5KQorICAgICAgICAgICAgbV9hY3RpdmVBbmltYXRpb25zLnJlbW92ZShpKTsKKyAg
ICAgICAgZWxzZQorICAgICAgICAgICAgaSsrOworICAgIH0KK30KKwogLy8gQWNjb3JkaW5nIHRv
IHJlbmRlciBsYXllciBiYWNraW5nLCB0aGVzZSBhcmUgZm9yIHRlc3Rpbmcgb25seS4KIHZvaWQg
Q0NMYXllckFuaW1hdGlvbkNvbnRyb2xsZXI6OnN1c3BlbmRBbmltYXRpb25zKGRvdWJsZSBtb25v
dG9uaWNUaW1lKQogewpAQCAtMjI3LDcgKzEyMyw3IEBAIHZvaWQgQ0NMYXllckFuaW1hdGlvbkNv
bnRyb2xsZXI6OmFuaW1hdGUoZG91YmxlIG1vbm90b25pY1RpbWUsIENDQW5pbWF0aW9uRXZlbnRz
CiAgICAgc3RhcnRBbmltYXRpb25zV2FpdGluZ0ZvclRhcmdldEF2YWlsYWJpbGl0eShtb25vdG9u
aWNUaW1lLCBldmVudHMpOwogfQogCi12b2lkIENDTGF5ZXJBbmltYXRpb25Db250cm9sbGVyOjph
ZGQoUGFzc093blB0cjxDQ0FjdGl2ZUFuaW1hdGlvbj4gYW5pbWF0aW9uKQordm9pZCBDQ0xheWVy
QW5pbWF0aW9uQ29udHJvbGxlcjo6YWRkQW5pbWF0aW9uKFBhc3NPd25QdHI8Q0NBY3RpdmVBbmlt
YXRpb24+IGFuaW1hdGlvbikKIHsKICAgICBtX2FjdGl2ZUFuaW1hdGlvbnMuYXBwZW5kKGFuaW1h
dGlvbik7CiB9CkBAIC0yNDAsNiArMTM2LDE2IEBAIENDQWN0aXZlQW5pbWF0aW9uKiBDQ0xheWVy
QW5pbWF0aW9uQ29udHJvbGxlcjo6Z2V0QWN0aXZlQW5pbWF0aW9uKGludCBncm91cElkLCBDCiAg
ICAgcmV0dXJuIDA7CiB9CiAKK0NDQWN0aXZlQW5pbWF0aW9uKiBDQ0xheWVyQW5pbWF0aW9uQ29u
dHJvbGxlcjo6Z2V0QWN0aXZlQW5pbWF0aW9uKENDQWN0aXZlQW5pbWF0aW9uOjpUYXJnZXRQcm9w
ZXJ0eSB0YXJnZXRQcm9wZXJ0eSkgY29uc3QKK3sKKyAgICBmb3IgKHNpemVfdCBpID0gMDsgaSA8
IG1fYWN0aXZlQW5pbWF0aW9ucy5zaXplKCk7ICsraSkgeworICAgICAgICBzaXplX3QgaW5kZXgg
PSBtX2FjdGl2ZUFuaW1hdGlvbnMuc2l6ZSgpIC0gaSAtIDE7CisgICAgICAgIGlmIChtX2FjdGl2
ZUFuaW1hdGlvbnNbaW5kZXhdLT50YXJnZXRQcm9wZXJ0eSgpID09IHRhcmdldFByb3BlcnR5KQor
ICAgICAgICAgICAgcmV0dXJuIG1fYWN0aXZlQW5pbWF0aW9uc1tpbmRleF0uZ2V0KCk7CisgICAg
fQorICAgIHJldHVybiAwOworfQorCiBib29sIENDTGF5ZXJBbmltYXRpb25Db250cm9sbGVyOjpo
YXNBY3RpdmVBbmltYXRpb24oKSBjb25zdAogewogICAgIGZvciAoc2l6ZV90IGkgPSAwOyBpIDwg
bV9hY3RpdmVBbmltYXRpb25zLnNpemUoKTsgKytpKSB7CkBAIC0yOTQsNyArMjAwLDcgQEAgdm9p
ZCBDQ0xheWVyQW5pbWF0aW9uQ29udHJvbGxlcjo6cHVzaE5ld0FuaW1hdGlvbnNUb0ltcGxUaHJl
YWQoQ0NMYXllckFuaW1hdGlvbkMKICAgICAgICAgLy8gVGhlIG5ldyBhbmltYXRpb24gc2hvdWxk
IGJlIHNldCB0byBydW4gYXMgc29vbiBhcyBwb3NzaWJsZS4KICAgICAgICAgdG9BZGQtPnNldFJ1
blN0YXRlKENDQWN0aXZlQW5pbWF0aW9uOjpXYWl0aW5nRm9yVGFyZ2V0QXZhaWxhYmlsaXR5LCAw
KTsKICAgICAgICAgdG9BZGQtPnNldFN0YXJ0VGltZSgwKTsKLSAgICAgICAgY29udHJvbGxlcklt
cGwtPmFkZCh0b0FkZC5yZWxlYXNlKCkpOworICAgICAgICBjb250cm9sbGVySW1wbC0+YWRkQW5p
bWF0aW9uKHRvQWRkLnJlbGVhc2UoKSk7CiAgICAgfQogfQogCkBAIC00NjEsNyArMzY3LDcgQEAg
dm9pZCBDQ0xheWVyQW5pbWF0aW9uQ29udHJvbGxlcjo6cmVwbGFjZUltcGxUaHJlYWRBbmltYXRp
b25zKENDTGF5ZXJBbmltYXRpb25Db24KICAgICAgICAgICAgIHRvQWRkLT5zZXRSdW5TdGF0ZShD
Q0FjdGl2ZUFuaW1hdGlvbjo6V2FpdGluZ0ZvclRhcmdldEF2YWlsYWJpbGl0eSwgMCk7CiAgICAg
ICAgICAgICB0b0FkZC0+c2V0U3RhcnRUaW1lKDApOwogICAgICAgICB9Ci0gICAgICAgIGNvbnRy
b2xsZXJJbXBsLT5hZGQodG9BZGQucmVsZWFzZSgpKTsKKyAgICAgICAgY29udHJvbGxlckltcGwt
PmFkZEFuaW1hdGlvbih0b0FkZC5yZWxlYXNlKCkpOwogICAgIH0KIH0KIApAQCAtNDgwLDcgKzM4
Niw3IEBAIHZvaWQgQ0NMYXllckFuaW1hdGlvbkNvbnRyb2xsZXI6OnRpY2tBbmltYXRpb25zKGRv
dWJsZSBtb25vdG9uaWNUaW1lKQogCiAgICAgICAgICAgICBjYXNlIENDQWN0aXZlQW5pbWF0aW9u
OjpUcmFuc2Zvcm06IHsKICAgICAgICAgICAgICAgICBjb25zdCBDQ1RyYW5zZm9ybUFuaW1hdGlv
bkN1cnZlKiB0cmFuc2Zvcm1BbmltYXRpb25DdXJ2ZSA9IG1fYWN0aXZlQW5pbWF0aW9uc1tpXS0+
Y3VydmUoKS0+dG9UcmFuc2Zvcm1BbmltYXRpb25DdXJ2ZSgpOwotICAgICAgICAgICAgICAgIGNv
bnN0IFdlYlRyYW5zZm9ybWF0aW9uTWF0cml4IG1hdHJpeCA9IHRyYW5zZm9ybUFuaW1hdGlvbkN1
cnZlLT5nZXRWYWx1ZSh0cmltbWVkLCBtX2NsaWVudC0+Ym91bmRzKCkpOworICAgICAgICAgICAg
ICAgIGNvbnN0IFdlYlRyYW5zZm9ybWF0aW9uTWF0cml4IG1hdHJpeCA9IHRyYW5zZm9ybUFuaW1h
dGlvbkN1cnZlLT5nZXRWYWx1ZSh0cmltbWVkKTsKICAgICAgICAgICAgICAgICBpZiAobV9hY3Rp
dmVBbmltYXRpb25zW2ldLT5pc0ZpbmlzaGVkQXQobW9ub3RvbmljVGltZSkpCiAgICAgICAgICAg
ICAgICAgICAgIG1fYWN0aXZlQW5pbWF0aW9uc1tpXS0+c2V0UnVuU3RhdGUoQ0NBY3RpdmVBbmlt
YXRpb246OkZpbmlzaGVkLCBtb25vdG9uaWNUaW1lKTsKIApkaWZmIC0tZ2l0IGEvU291cmNlL1dl
YkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvY2hyb21pdW0vY2MvQ0NMYXllckFuaW1hdGlvbkNvbnRy
b2xsZXIuaCBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2Nocm9taXVtL2NjL0ND
TGF5ZXJBbmltYXRpb25Db250cm9sbGVyLmgKaW5kZXggYzRjOTE1OGIyYzg3Y2ZlNDZkZmMxNjJk
MDg3YTExZmRmZmI4OTI0OC4uMmZjMzlkODEzZTE4ZTYwMDk5ODA0NzdjNDVlNzdmZTgzNDk2M2Ex
YyAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvY2hyb21pdW0v
Y2MvQ0NMYXllckFuaW1hdGlvbkNvbnRyb2xsZXIuaAorKysgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0
Zm9ybS9ncmFwaGljcy9jaHJvbWl1bS9jYy9DQ0xheWVyQW5pbWF0aW9uQ29udHJvbGxlci5oCkBA
IC01NCw3ICs1NCw2IEBAIHB1YmxpYzoKICAgICB2aXJ0dWFsIGZsb2F0IG9wYWNpdHkoKSBjb25z
dCA9IDA7CiAgICAgdmlydHVhbCB2b2lkIHNldFRyYW5zZm9ybUZyb21BbmltYXRpb24oY29uc3Qg
V2ViS2l0OjpXZWJUcmFuc2Zvcm1hdGlvbk1hdHJpeCYpID0gMDsKICAgICB2aXJ0dWFsIGNvbnN0
IFdlYktpdDo6V2ViVHJhbnNmb3JtYXRpb25NYXRyaXgmIHRyYW5zZm9ybSgpIGNvbnN0ID0gMDsK
LSAgICB2aXJ0dWFsIGNvbnN0IEludFNpemUmIGJvdW5kcygpIGNvbnN0ID0gMDsKIH07CiAKIGNs
YXNzIENDTGF5ZXJBbmltYXRpb25Db250cm9sbGVyIHsKQEAgLTY1LDkgKzY0LDEwIEBAIHB1Ymxp
YzoKICAgICB2aXJ0dWFsIH5DQ0xheWVyQW5pbWF0aW9uQ29udHJvbGxlcigpOwogCiAgICAgLy8g
VGhlc2UgbWV0aG9kcyBhcmUgdmlydHVhbCBmb3IgdGVzdGluZy4KLSAgICB2aXJ0dWFsIGJvb2wg
YWRkQW5pbWF0aW9uKGNvbnN0IEtleWZyYW1lVmFsdWVMaXN0JiwgY29uc3QgSW50U2l6ZSYgYm94
U2l6ZSwgY29uc3QgQW5pbWF0aW9uKiwgaW50IGFuaW1hdGlvbklkLCBpbnQgZ3JvdXBJZCwgZG91
YmxlIHRpbWVPZmZzZXQpOworICAgIHZpcnR1YWwgdm9pZCBhZGRBbmltYXRpb24oUGFzc093blB0
cjxDQ0FjdGl2ZUFuaW1hdGlvbj4pOwogICAgIHZpcnR1YWwgdm9pZCBwYXVzZUFuaW1hdGlvbihp
bnQgYW5pbWF0aW9uSWQsIGRvdWJsZSB0aW1lT2Zmc2V0KTsKICAgICB2aXJ0dWFsIHZvaWQgcmVt
b3ZlQW5pbWF0aW9uKGludCBhbmltYXRpb25JZCk7CisgICAgdmlydHVhbCB2b2lkIHJlbW92ZUFu
aW1hdGlvbihpbnQgYW5pbWF0aW9uSWQsIENDQWN0aXZlQW5pbWF0aW9uOjpUYXJnZXRQcm9wZXJ0
eSk7CiAgICAgdmlydHVhbCB2b2lkIHN1c3BlbmRBbmltYXRpb25zKGRvdWJsZSBtb25vdG9uaWNU
aW1lKTsKICAgICB2aXJ0dWFsIHZvaWQgcmVzdW1lQW5pbWF0aW9ucyhkb3VibGUgbW9ub3Rvbmlj
VGltZSk7CiAKQEAgLTc3LDEyICs3NywxNCBAQCBwdWJsaWM6CiAKICAgICB2b2lkIGFuaW1hdGUo
ZG91YmxlIG1vbm90b25pY1RpbWUsIENDQW5pbWF0aW9uRXZlbnRzVmVjdG9yKik7CiAKLSAgICB2
b2lkIGFkZChQYXNzT3duUHRyPENDQWN0aXZlQW5pbWF0aW9uPik7Ci0KLSAgICAvLyBSZXR1cm5z
IHRoZSBhY3RpdmUgYW5pbWF0aW9uIGluIHRoZSBnaXZlbiBncm91cCwgYW5pbWF0aW5nIHRoZSBn
aXZlbiBwcm9wZXJ0eSBpZiBzdWNoIGFuCisgICAgLy8gUmV0dXJucyB0aGUgYWN0aXZlIGFuaW1h
dGlvbiBpbiB0aGUgZ2l2ZW4gZ3JvdXAsIGFuaW1hdGluZyB0aGUgZ2l2ZW4gcHJvcGVydHksIGlm
IHN1Y2ggYW4KICAgICAvLyBhbmltYXRpb24gZXhpc3RzLgogICAgIENDQWN0aXZlQW5pbWF0aW9u
KiBnZXRBY3RpdmVBbmltYXRpb24oaW50IGdyb3VwSWQsIENDQWN0aXZlQW5pbWF0aW9uOjpUYXJn
ZXRQcm9wZXJ0eSkgY29uc3Q7CiAKKyAgICAvLyBSZXR1cm5zIHRoZSBhY3RpdmUgYW5pbWF0aW9u
IGFuaW1hdGluZyB0aGUgZ2l2ZW4gcHJvcGVydHkgdGhhdCBpcyBlaXRoZXIgcnVubmluZywgb3Ig
aXMKKyAgICAvLyBuZXh0IHRvIHJ1biwgaWYgc3VjaCBhbiBhbmltYXRpb24gZXhpc3RzLgorICAg
IENDQWN0aXZlQW5pbWF0aW9uKiBnZXRBY3RpdmVBbmltYXRpb24oQ0NBY3RpdmVBbmltYXRpb246
OlRhcmdldFByb3BlcnR5KSBjb25zdDsKKwogICAgIC8vIFJldHVybnMgdHJ1ZSBpZiB0aGVyZSBh
cmUgYW55IGFuaW1hdGlvbnMgdGhhdCBoYXZlIG5laXRoZXIgZmluaXNoZWQgbm9yIGFib3J0ZWQu
CiAgICAgYm9vbCBoYXNBY3RpdmVBbmltYXRpb24oKSBjb25zdDsKIApkaWZmIC0tZ2l0IGEvU291
cmNlL1dlYktpdC9jaHJvbWl1bS90ZXN0cy9DQ0FuaW1hdGlvblRlc3RDb21tb24uY3BwIGIvU291
cmNlL1dlYktpdC9jaHJvbWl1bS90ZXN0cy9DQ0FuaW1hdGlvblRlc3RDb21tb24uY3BwCmluZGV4
IDBlOGMxYTQwMWY2YzhiYmRlMjIzMjMxZDJjOTNmZDk4NGIzNTIxM2EuLjg1NDU5NTM4MDUzYzZh
OTg2MGFmMGY3OTQ4MGZjZTZmNjNkN2MzYzMgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJLaXQvY2hy
b21pdW0vdGVzdHMvQ0NBbmltYXRpb25UZXN0Q29tbW9uLmNwcAorKysgYi9Tb3VyY2UvV2ViS2l0
L2Nocm9taXVtL3Rlc3RzL0NDQW5pbWF0aW9uVGVzdENvbW1vbi5jcHAKQEAgLTI5LDkgKzI5LDEy
IEBACiAjaW5jbHVkZSAiR3JhcGhpY3NMYXllci5oIgogI2luY2x1ZGUgIkxheWVyQ2hyb21pdW0u
aCIKICNpbmNsdWRlICJUcmFuc2xhdGVUcmFuc2Zvcm1PcGVyYXRpb24uaCIKKyNpbmNsdWRlICJj
Yy9DQ0tleWZyYW1lZEFuaW1hdGlvbkN1cnZlLmgiCiAjaW5jbHVkZSAiY2MvQ0NMYXllckFuaW1h
dGlvbkNvbnRyb2xsZXIuaCIKICNpbmNsdWRlICJjYy9DQ0xheWVySW1wbC5oIgogCisjaW5jbHVk
ZSA8cHVibGljL1dlYlRyYW5zZm9ybU9wZXJhdGlvbnMuaD4KKwogdXNpbmcgbmFtZXNwYWNlIFdl
YkNvcmU7CiAKIG5hbWVzcGFjZSB7CkBAIC0zOSwzOCArNDIsMzggQEAgbmFtZXNwYWNlIHsKIHRl
bXBsYXRlIDxjbGFzcyBUYXJnZXQ+CiB2b2lkIGFkZE9wYWNpdHlUcmFuc2l0aW9uKFRhcmdldCYg
dGFyZ2V0LCBkb3VibGUgZHVyYXRpb24sIGZsb2F0IHN0YXJ0T3BhY2l0eSwgZmxvYXQgZW5kT3Bh
Y2l0eSwgYm9vbCB1c2VUaW1pbmdGdW5jdGlvbikKIHsKLSAgICBXZWJDb3JlOjpLZXlmcmFtZVZh
bHVlTGlzdCB2YWx1ZXMoQW5pbWF0ZWRQcm9wZXJ0eU9wYWNpdHkpOwotICAgIGlmIChkdXJhdGlv
biA+IDApCi0gICAgICAgIHZhbHVlcy5pbnNlcnQobmV3IEZsb2F0QW5pbWF0aW9uVmFsdWUoMCwg
c3RhcnRPcGFjaXR5KSk7Ci0gICAgdmFsdWVzLmluc2VydChuZXcgRmxvYXRBbmltYXRpb25WYWx1
ZShkdXJhdGlvbiwgZW5kT3BhY2l0eSkpOworICAgIE93blB0cjxDQ0tleWZyYW1lZEZsb2F0QW5p
bWF0aW9uQ3VydmU+IGN1cnZlKENDS2V5ZnJhbWVkRmxvYXRBbmltYXRpb25DdXJ2ZTo6Y3JlYXRl
KCkpOwogCi0gICAgUmVmUHRyPEFuaW1hdGlvbj4gYW5pbWF0aW9uID0gQW5pbWF0aW9uOjpjcmVh
dGUoKTsKLSAgICBhbmltYXRpb24tPnNldER1cmF0aW9uKGR1cmF0aW9uKTsKLQotICAgIGlmICh1
c2VUaW1pbmdGdW5jdGlvbikKLSAgICAgICAgYW5pbWF0aW9uLT5zZXRUaW1pbmdGdW5jdGlvbihM
aW5lYXJUaW1pbmdGdW5jdGlvbjo6Y3JlYXRlKCkpOworICAgIGlmIChkdXJhdGlvbiA+IDApCisg
ICAgICAgIGN1cnZlLT5hZGRLZXlmcmFtZShDQ0Zsb2F0S2V5ZnJhbWU6OmNyZWF0ZSgwLCBzdGFy
dE9wYWNpdHksIHVzZVRpbWluZ0Z1bmN0aW9uID8gbnVsbHB0ciA6IENDRWFzZVRpbWluZ0Z1bmN0
aW9uOjpjcmVhdGUoKSkpOworICAgIGN1cnZlLT5hZGRLZXlmcmFtZShDQ0Zsb2F0S2V5ZnJhbWU6
OmNyZWF0ZShkdXJhdGlvbiwgZW5kT3BhY2l0eSwgbnVsbHB0cikpOwogCi0gICAgSW50U2l6ZSBi
b3hTaXplOworICAgIE93blB0cjxDQ0FjdGl2ZUFuaW1hdGlvbj4gYW5pbWF0aW9uKENDQWN0aXZl
QW5pbWF0aW9uOjpjcmVhdGUoY3VydmUucmVsZWFzZSgpLCAwLCAwLCBDQ0FjdGl2ZUFuaW1hdGlv
bjo6T3BhY2l0eSkpOworICAgIGFuaW1hdGlvbi0+c2V0TmVlZHNTeW5jaHJvbml6ZWRTdGFydFRp
bWUodHJ1ZSk7CiAKLSAgICB0YXJnZXQuYWRkQW5pbWF0aW9uKHZhbHVlcywgYm94U2l6ZSwgYW5p
bWF0aW9uLmdldCgpLCAwLCAwLCAwKTsKKyAgICB0YXJnZXQuYWRkQW5pbWF0aW9uKGFuaW1hdGlv
bi5yZWxlYXNlKCkpOwogfQogCiB0ZW1wbGF0ZSA8Y2xhc3MgVGFyZ2V0Pgogdm9pZCBhZGRBbmlt
YXRlZFRyYW5zZm9ybShUYXJnZXQmIHRhcmdldCwgZG91YmxlIGR1cmF0aW9uLCBpbnQgZGVsdGFY
LCBpbnQgZGVsdGFZKQogewogICAgIHN0YXRpYyBpbnQgaWQgPSAwOwotICAgIFdlYkNvcmU6Oktl
eWZyYW1lVmFsdWVMaXN0IHZhbHVlcyhBbmltYXRlZFByb3BlcnR5V2Via2l0VHJhbnNmb3JtKTsK
KyAgICBPd25QdHI8Q0NLZXlmcmFtZWRUcmFuc2Zvcm1BbmltYXRpb25DdXJ2ZT4gY3VydmUoQ0NL
ZXlmcmFtZWRUcmFuc2Zvcm1BbmltYXRpb25DdXJ2ZTo6Y3JlYXRlKCkpOwogCi0gICAgVHJhbnNm
b3JtT3BlcmF0aW9ucyBvcGVyYXRpb25zOwotICAgIG9wZXJhdGlvbnMub3BlcmF0aW9ucygpLmFw
cGVuZChUcmFuc2xhdGVUcmFuc2Zvcm1PcGVyYXRpb246OmNyZWF0ZShMZW5ndGgoZGVsdGFYLCBX
ZWJDb3JlOjpGaXhlZCksIExlbmd0aChkZWx0YVksIFdlYkNvcmU6OkZpeGVkKSwgVHJhbnNmb3Jt
T3BlcmF0aW9uOjpUUkFOU0xBVEVfWCkpOwotICAgIHZhbHVlcy5pbnNlcnQobmV3IFRyYW5zZm9y
bUFuaW1hdGlvblZhbHVlKDAsICZvcGVyYXRpb25zKSk7CisgICAgaWYgKGR1cmF0aW9uID4gMCkg
eworICAgICAgICBXZWJLaXQ6OldlYlRyYW5zZm9ybU9wZXJhdGlvbnMgc3RhcnRPcGVyYXRpb25z
OworICAgICAgICBzdGFydE9wZXJhdGlvbnMuYXBwZW5kVHJhbnNsYXRlKGRlbHRhWCwgZGVsdGFZ
LCAwKTsKKyAgICAgICAgY3VydmUtPmFkZEtleWZyYW1lKENDVHJhbnNmb3JtS2V5ZnJhbWU6OmNy
ZWF0ZSgwLCBzdGFydE9wZXJhdGlvbnMsIG51bGxwdHIpKTsKKyAgICB9CiAKLSAgICBSZWZQdHI8
QW5pbWF0aW9uPiBhbmltYXRpb24gPSBBbmltYXRpb246OmNyZWF0ZSgpOwotICAgIGFuaW1hdGlv
bi0+c2V0RHVyYXRpb24oZHVyYXRpb24pOworICAgIFdlYktpdDo6V2ViVHJhbnNmb3JtT3BlcmF0
aW9ucyBvcGVyYXRpb25zOworICAgIG9wZXJhdGlvbnMuYXBwZW5kVHJhbnNsYXRlKGRlbHRhWCwg
ZGVsdGFZLCAwKTsKKyAgICBjdXJ2ZS0+YWRkS2V5ZnJhbWUoQ0NUcmFuc2Zvcm1LZXlmcmFtZTo6
Y3JlYXRlKGR1cmF0aW9uLCBvcGVyYXRpb25zLCBudWxscHRyKSk7CiAKLSAgICBJbnRTaXplIGJv
eFNpemU7CisgICAgT3duUHRyPENDQWN0aXZlQW5pbWF0aW9uPiBhbmltYXRpb24oQ0NBY3RpdmVB
bmltYXRpb246OmNyZWF0ZShjdXJ2ZS5yZWxlYXNlKCksIGlkKyssIDAsIENDQWN0aXZlQW5pbWF0
aW9uOjpUcmFuc2Zvcm0pKTsKKyAgICBhbmltYXRpb24tPnNldE5lZWRzU3luY2hyb25pemVkU3Rh
cnRUaW1lKHRydWUpOwogCi0gICAgdGFyZ2V0LmFkZEFuaW1hdGlvbih2YWx1ZXMsIGJveFNpemUs
IGFuaW1hdGlvbi5nZXQoKSwgKytpZCwgMCwgMCk7CisgICAgdGFyZ2V0LmFkZEFuaW1hdGlvbihh
bmltYXRpb24ucmVsZWFzZSgpKTsKIH0KIAogfSAvLyBuYW1lc3BhY2UKQEAgLTk5LDcgKzEwMiw3
IEBAIEZha2VUcmFuc2Zvcm1UcmFuc2l0aW9uOjp+RmFrZVRyYW5zZm9ybVRyYW5zaXRpb24oKQog
ewogfQogCi1XZWJLaXQ6OldlYlRyYW5zZm9ybWF0aW9uTWF0cml4IEZha2VUcmFuc2Zvcm1UcmFu
c2l0aW9uOjpnZXRWYWx1ZShkb3VibGUgdGltZSwgY29uc3QgV2ViQ29yZTo6SW50U2l6ZSYgc2l6
ZSkgY29uc3QKK1dlYktpdDo6V2ViVHJhbnNmb3JtYXRpb25NYXRyaXggRmFrZVRyYW5zZm9ybVRy
YW5zaXRpb246OmdldFZhbHVlKGRvdWJsZSB0aW1lKSBjb25zdAogewogICAgIHJldHVybiBXZWJL
aXQ6OldlYlRyYW5zZm9ybWF0aW9uTWF0cml4KCk7CiB9CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2Vi
S2l0L2Nocm9taXVtL3Rlc3RzL0NDQW5pbWF0aW9uVGVzdENvbW1vbi5oIGIvU291cmNlL1dlYktp
dC9jaHJvbWl1bS90ZXN0cy9DQ0FuaW1hdGlvblRlc3RDb21tb24uaAppbmRleCA0Mzg0MTE3ZDM5
Y2FiNzIyZjg0NTRlZDU3NzZlNTAyMjk5MTYwZjdlLi5hODUzM2E4NzM2MGY4MmFlZDU3NGIxMGNi
NTQ1ZmE2OGM2YzM5MzA5IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViS2l0L2Nocm9taXVtL3Rlc3Rz
L0NDQW5pbWF0aW9uVGVzdENvbW1vbi5oCisrKyBiL1NvdXJjZS9XZWJLaXQvY2hyb21pdW0vdGVz
dHMvQ0NBbmltYXRpb25UZXN0Q29tbW9uLmgKQEAgLTU0LDcgKzU0LDcgQEAgcHVibGljOgogICAg
IHZpcnR1YWwgfkZha2VUcmFuc2Zvcm1UcmFuc2l0aW9uKCk7CiAKICAgICB2aXJ0dWFsIGRvdWJs
ZSBkdXJhdGlvbigpIGNvbnN0IE9WRVJSSURFIHsgcmV0dXJuIG1fZHVyYXRpb247IH0KLSAgICB2
aXJ0dWFsIFdlYktpdDo6V2ViVHJhbnNmb3JtYXRpb25NYXRyaXggZ2V0VmFsdWUoZG91YmxlIHRp
bWUsIGNvbnN0IFdlYkNvcmU6OkludFNpemUmKSBjb25zdCBPVkVSUklERTsKKyAgICB2aXJ0dWFs
IFdlYktpdDo6V2ViVHJhbnNmb3JtYXRpb25NYXRyaXggZ2V0VmFsdWUoZG91YmxlIHRpbWUpIGNv
bnN0IE9WRVJSSURFOwogCiAgICAgdmlydHVhbCBQYXNzT3duUHRyPFdlYkNvcmU6OkNDQW5pbWF0
aW9uQ3VydmU+IGNsb25lKCkgY29uc3QgT1ZFUlJJREU7CiAKZGlmZiAtLWdpdCBhL1NvdXJjZS9X
ZWJLaXQvY2hyb21pdW0vdGVzdHMvQ0NLZXlmcmFtZWRBbmltYXRpb25DdXJ2ZVRlc3QuY3BwIGIv
U291cmNlL1dlYktpdC9jaHJvbWl1bS90ZXN0cy9DQ0tleWZyYW1lZEFuaW1hdGlvbkN1cnZlVGVz
dC5jcHAKaW5kZXggYWQxYWU3NGNhMTI1NzM2NGM5YzE1MzBlNDdlMjBiNjk0N2Y1MGJiZC4uZWI2
YmIwMzYzZGE4NTVlZmM1NzNlODA5NDY4YmE3MjllNDhhY2Q0ZiAxMDA2NDQKLS0tIGEvU291cmNl
L1dlYktpdC9jaHJvbWl1bS90ZXN0cy9DQ0tleWZyYW1lZEFuaW1hdGlvbkN1cnZlVGVzdC5jcHAK
KysrIGIvU291cmNlL1dlYktpdC9jaHJvbWl1bS90ZXN0cy9DQ0tleWZyYW1lZEFuaW1hdGlvbkN1
cnZlVGVzdC5jcHAKQEAgLTMxLDYgKzMxLDcgQEAKIAogI2luY2x1ZGUgPGdtb2NrL2dtb2NrLmg+
CiAjaW5jbHVkZSA8Z3Rlc3QvZ3Rlc3QuaD4KKyNpbmNsdWRlIDxwdWJsaWMvV2ViVHJhbnNmb3Jt
T3BlcmF0aW9ucy5oPgogI2luY2x1ZGUgPHB1YmxpYy9XZWJUcmFuc2Zvcm1hdGlvbk1hdHJpeC5o
PgogI2luY2x1ZGUgPHd0Zi9Pd25QdHIuaD4KICNpbmNsdWRlIDx3dGYvVmVjdG9yLmg+CkBAIC0x
MTMsNTcgKzExNCw1NSBAQCBURVNUKENDS2V5ZnJhbWVkQW5pbWF0aW9uQ3VydmVUZXN0LCBSZXBl
YXRlZEZsb2F0S2V5VGltZXMpCiBURVNUKENDS2V5ZnJhbWVkQW5pbWF0aW9uQ3VydmVUZXN0LCBP
bmVUcmFuc2Zvcm1LZXlmcmFtZSkKIHsKICAgICBPd25QdHI8Q0NLZXlmcmFtZWRUcmFuc2Zvcm1B
bmltYXRpb25DdXJ2ZT4gY3VydmUoQ0NLZXlmcmFtZWRUcmFuc2Zvcm1BbmltYXRpb25DdXJ2ZTo6
Y3JlYXRlKCkpOwotICAgIFRyYW5zZm9ybU9wZXJhdGlvbnMgb3BlcmF0aW9uczsKLSAgICBvcGVy
YXRpb25zLm9wZXJhdGlvbnMoKS5hcHBlbmQoVHJhbnNsYXRlVHJhbnNmb3JtT3BlcmF0aW9uOjpj
cmVhdGUoTGVuZ3RoKDIsIEZpeGVkKSwgTGVuZ3RoKDAsIEZpeGVkKSwgVHJhbnNmb3JtT3BlcmF0
aW9uOjpUUkFOU0xBVEVfWCkpOworICAgIFdlYktpdDo6V2ViVHJhbnNmb3JtT3BlcmF0aW9ucyBv
cGVyYXRpb25zOworICAgIG9wZXJhdGlvbnMuYXBwZW5kVHJhbnNsYXRlKDIsIDAsIDApOwogICAg
IGN1cnZlLT5hZGRLZXlmcmFtZShDQ1RyYW5zZm9ybUtleWZyYW1lOjpjcmVhdGUoMCwgb3BlcmF0
aW9ucywgbnVsbHB0cikpOwogCi0gICAgSW50U2l6ZSBsYXllclNpemU7IC8vIGlnbm9yZWQKLSAg
ICBleHBlY3RUcmFuc2xhdGVYKDIsIGN1cnZlLT5nZXRWYWx1ZSgtMSwgbGF5ZXJTaXplKSk7Ci0g
ICAgZXhwZWN0VHJhbnNsYXRlWCgyLCBjdXJ2ZS0+Z2V0VmFsdWUoMCwgbGF5ZXJTaXplKSk7Ci0g
ICAgZXhwZWN0VHJhbnNsYXRlWCgyLCBjdXJ2ZS0+Z2V0VmFsdWUoMC41LCBsYXllclNpemUpKTsK
LSAgICBleHBlY3RUcmFuc2xhdGVYKDIsIGN1cnZlLT5nZXRWYWx1ZSgxLCBsYXllclNpemUpKTsK
LSAgICBleHBlY3RUcmFuc2xhdGVYKDIsIGN1cnZlLT5nZXRWYWx1ZSgyLCBsYXllclNpemUpKTsK
KyAgICBleHBlY3RUcmFuc2xhdGVYKDIsIGN1cnZlLT5nZXRWYWx1ZSgtMSkpOworICAgIGV4cGVj
dFRyYW5zbGF0ZVgoMiwgY3VydmUtPmdldFZhbHVlKDApKTsKKyAgICBleHBlY3RUcmFuc2xhdGVY
KDIsIGN1cnZlLT5nZXRWYWx1ZSgwLjUpKTsKKyAgICBleHBlY3RUcmFuc2xhdGVYKDIsIGN1cnZl
LT5nZXRWYWx1ZSgxKSk7CisgICAgZXhwZWN0VHJhbnNsYXRlWCgyLCBjdXJ2ZS0+Z2V0VmFsdWUo
MikpOwogfQogCiAvLyBUZXN0cyB0aGF0IGEgdHJhbnNmb3JtIGFuaW1hdGlvbiB3aXRoIHR3byBr
ZXlmcmFtZXMgd29ya3MgYXMgZXhwZWN0ZWQuCiBURVNUKENDS2V5ZnJhbWVkQW5pbWF0aW9uQ3Vy
dmVUZXN0LCBUd29UcmFuc2Zvcm1LZXlmcmFtZSkKIHsKICAgICBPd25QdHI8Q0NLZXlmcmFtZWRU
cmFuc2Zvcm1BbmltYXRpb25DdXJ2ZT4gY3VydmUoQ0NLZXlmcmFtZWRUcmFuc2Zvcm1BbmltYXRp
b25DdXJ2ZTo6Y3JlYXRlKCkpOwotICAgIFRyYW5zZm9ybU9wZXJhdGlvbnMgb3BlcmF0aW9uczE7
Ci0gICAgb3BlcmF0aW9uczEub3BlcmF0aW9ucygpLmFwcGVuZChUcmFuc2xhdGVUcmFuc2Zvcm1P
cGVyYXRpb246OmNyZWF0ZShMZW5ndGgoMiwgRml4ZWQpLCBMZW5ndGgoMCwgRml4ZWQpLCBUcmFu
c2Zvcm1PcGVyYXRpb246OlRSQU5TTEFURV9YKSk7Ci0gICAgVHJhbnNmb3JtT3BlcmF0aW9ucyBv
cGVyYXRpb25zMjsKLSAgICBvcGVyYXRpb25zMi5vcGVyYXRpb25zKCkuYXBwZW5kKFRyYW5zbGF0
ZVRyYW5zZm9ybU9wZXJhdGlvbjo6Y3JlYXRlKExlbmd0aCg0LCBGaXhlZCksIExlbmd0aCgwLCBG
aXhlZCksIFRyYW5zZm9ybU9wZXJhdGlvbjo6VFJBTlNMQVRFX1gpKTsKKyAgICBXZWJLaXQ6Oldl
YlRyYW5zZm9ybU9wZXJhdGlvbnMgb3BlcmF0aW9uczE7CisgICAgb3BlcmF0aW9uczEuYXBwZW5k
VHJhbnNsYXRlKDIsIDAsIDApOworICAgIFdlYktpdDo6V2ViVHJhbnNmb3JtT3BlcmF0aW9ucyBv
cGVyYXRpb25zMjsKKyAgICBvcGVyYXRpb25zMi5hcHBlbmRUcmFuc2xhdGUoNCwgMCwgMCk7CisK
ICAgICBjdXJ2ZS0+YWRkS2V5ZnJhbWUoQ0NUcmFuc2Zvcm1LZXlmcmFtZTo6Y3JlYXRlKDAsIG9w
ZXJhdGlvbnMxLCBudWxscHRyKSk7CiAgICAgY3VydmUtPmFkZEtleWZyYW1lKENDVHJhbnNmb3Jt
S2V5ZnJhbWU6OmNyZWF0ZSgxLCBvcGVyYXRpb25zMiwgbnVsbHB0cikpOwotICAgIEludFNpemUg
bGF5ZXJTaXplOyAvLyBpZ25vcmVkCi0gICAgZXhwZWN0VHJhbnNsYXRlWCgyLCBjdXJ2ZS0+Z2V0
VmFsdWUoLTEsIGxheWVyU2l6ZSkpOwotICAgIGV4cGVjdFRyYW5zbGF0ZVgoMiwgY3VydmUtPmdl
dFZhbHVlKDAsIGxheWVyU2l6ZSkpOwotICAgIGV4cGVjdFRyYW5zbGF0ZVgoMywgY3VydmUtPmdl
dFZhbHVlKDAuNSwgbGF5ZXJTaXplKSk7Ci0gICAgZXhwZWN0VHJhbnNsYXRlWCg0LCBjdXJ2ZS0+
Z2V0VmFsdWUoMSwgbGF5ZXJTaXplKSk7Ci0gICAgZXhwZWN0VHJhbnNsYXRlWCg0LCBjdXJ2ZS0+
Z2V0VmFsdWUoMiwgbGF5ZXJTaXplKSk7CisgICAgZXhwZWN0VHJhbnNsYXRlWCgyLCBjdXJ2ZS0+
Z2V0VmFsdWUoLTEpKTsKKyAgICBleHBlY3RUcmFuc2xhdGVYKDIsIGN1cnZlLT5nZXRWYWx1ZSgw
KSk7CisgICAgZXhwZWN0VHJhbnNsYXRlWCgzLCBjdXJ2ZS0+Z2V0VmFsdWUoMC41KSk7CisgICAg
ZXhwZWN0VHJhbnNsYXRlWCg0LCBjdXJ2ZS0+Z2V0VmFsdWUoMSkpOworICAgIGV4cGVjdFRyYW5z
bGF0ZVgoNCwgY3VydmUtPmdldFZhbHVlKDIpKTsKIH0KIAogLy8gVGVzdHMgdGhhdCBhIHRyYW5z
Zm9ybSBhbmltYXRpb24gd2l0aCB0aHJlZSBrZXlmcmFtZXMgd29ya3MgYXMgZXhwZWN0ZWQuCiBU
RVNUKENDS2V5ZnJhbWVkQW5pbWF0aW9uQ3VydmVUZXN0LCBUaHJlZVRyYW5zZm9ybUtleWZyYW1l
KQogewogICAgIE93blB0cjxDQ0tleWZyYW1lZFRyYW5zZm9ybUFuaW1hdGlvbkN1cnZlPiBjdXJ2
ZShDQ0tleWZyYW1lZFRyYW5zZm9ybUFuaW1hdGlvbkN1cnZlOjpjcmVhdGUoKSk7Ci0gICAgVHJh
bnNmb3JtT3BlcmF0aW9ucyBvcGVyYXRpb25zMTsKLSAgICBvcGVyYXRpb25zMS5vcGVyYXRpb25z
KCkuYXBwZW5kKFRyYW5zbGF0ZVRyYW5zZm9ybU9wZXJhdGlvbjo6Y3JlYXRlKExlbmd0aCgyLCBG
aXhlZCksIExlbmd0aCgwLCBGaXhlZCksIFRyYW5zZm9ybU9wZXJhdGlvbjo6VFJBTlNMQVRFX1gp
KTsKLSAgICBUcmFuc2Zvcm1PcGVyYXRpb25zIG9wZXJhdGlvbnMyOwotICAgIG9wZXJhdGlvbnMy
Lm9wZXJhdGlvbnMoKS5hcHBlbmQoVHJhbnNsYXRlVHJhbnNmb3JtT3BlcmF0aW9uOjpjcmVhdGUo
TGVuZ3RoKDQsIEZpeGVkKSwgTGVuZ3RoKDAsIEZpeGVkKSwgVHJhbnNmb3JtT3BlcmF0aW9uOjpU
UkFOU0xBVEVfWCkpOwotICAgIFRyYW5zZm9ybU9wZXJhdGlvbnMgb3BlcmF0aW9uczM7Ci0gICAg
b3BlcmF0aW9uczMub3BlcmF0aW9ucygpLmFwcGVuZChUcmFuc2xhdGVUcmFuc2Zvcm1PcGVyYXRp
b246OmNyZWF0ZShMZW5ndGgoOCwgRml4ZWQpLCBMZW5ndGgoMCwgRml4ZWQpLCBUcmFuc2Zvcm1P
cGVyYXRpb246OlRSQU5TTEFURV9YKSk7CisgICAgV2ViS2l0OjpXZWJUcmFuc2Zvcm1PcGVyYXRp
b25zIG9wZXJhdGlvbnMxOworICAgIG9wZXJhdGlvbnMxLmFwcGVuZFRyYW5zbGF0ZSgyLCAwLCAw
KTsKKyAgICBXZWJLaXQ6OldlYlRyYW5zZm9ybU9wZXJhdGlvbnMgb3BlcmF0aW9uczI7CisgICAg
b3BlcmF0aW9uczIuYXBwZW5kVHJhbnNsYXRlKDQsIDAsIDApOworICAgIFdlYktpdDo6V2ViVHJh
bnNmb3JtT3BlcmF0aW9ucyBvcGVyYXRpb25zMzsKKyAgICBvcGVyYXRpb25zMy5hcHBlbmRUcmFu
c2xhdGUoOCwgMCwgMCk7CiAgICAgY3VydmUtPmFkZEtleWZyYW1lKENDVHJhbnNmb3JtS2V5ZnJh
bWU6OmNyZWF0ZSgwLCBvcGVyYXRpb25zMSwgbnVsbHB0cikpOwogICAgIGN1cnZlLT5hZGRLZXlm
cmFtZShDQ1RyYW5zZm9ybUtleWZyYW1lOjpjcmVhdGUoMSwgb3BlcmF0aW9uczIsIG51bGxwdHIp
KTsKICAgICBjdXJ2ZS0+YWRkS2V5ZnJhbWUoQ0NUcmFuc2Zvcm1LZXlmcmFtZTo6Y3JlYXRlKDIs
IG9wZXJhdGlvbnMzLCBudWxscHRyKSk7Ci0gICAgSW50U2l6ZSBsYXllclNpemU7IC8vIGlnbm9y
ZWQKLSAgICBleHBlY3RUcmFuc2xhdGVYKDIsIGN1cnZlLT5nZXRWYWx1ZSgtMSwgbGF5ZXJTaXpl
KSk7Ci0gICAgZXhwZWN0VHJhbnNsYXRlWCgyLCBjdXJ2ZS0+Z2V0VmFsdWUoMCwgbGF5ZXJTaXpl
KSk7Ci0gICAgZXhwZWN0VHJhbnNsYXRlWCgzLCBjdXJ2ZS0+Z2V0VmFsdWUoMC41LCBsYXllclNp
emUpKTsKLSAgICBleHBlY3RUcmFuc2xhdGVYKDQsIGN1cnZlLT5nZXRWYWx1ZSgxLCBsYXllclNp
emUpKTsKLSAgICBleHBlY3RUcmFuc2xhdGVYKDYsIGN1cnZlLT5nZXRWYWx1ZSgxLjUsIGxheWVy
U2l6ZSkpOwotICAgIGV4cGVjdFRyYW5zbGF0ZVgoOCwgY3VydmUtPmdldFZhbHVlKDIsIGxheWVy
U2l6ZSkpOwotICAgIGV4cGVjdFRyYW5zbGF0ZVgoOCwgY3VydmUtPmdldFZhbHVlKDMsIGxheWVy
U2l6ZSkpOworICAgIGV4cGVjdFRyYW5zbGF0ZVgoMiwgY3VydmUtPmdldFZhbHVlKC0xKSk7Cisg
ICAgZXhwZWN0VHJhbnNsYXRlWCgyLCBjdXJ2ZS0+Z2V0VmFsdWUoMCkpOworICAgIGV4cGVjdFRy
YW5zbGF0ZVgoMywgY3VydmUtPmdldFZhbHVlKDAuNSkpOworICAgIGV4cGVjdFRyYW5zbGF0ZVgo
NCwgY3VydmUtPmdldFZhbHVlKDEpKTsKKyAgICBleHBlY3RUcmFuc2xhdGVYKDYsIGN1cnZlLT5n
ZXRWYWx1ZSgxLjUpKTsKKyAgICBleHBlY3RUcmFuc2xhdGVYKDgsIGN1cnZlLT5nZXRWYWx1ZSgy
KSk7CisgICAgZXhwZWN0VHJhbnNsYXRlWCg4LCBjdXJ2ZS0+Z2V0VmFsdWUoMykpOwogfQogCiAv
LyBUZXN0cyB0aGF0IGEgdHJhbnNmb3JtIGFuaW1hdGlvbiB3aXRoIG11bHRpcGxlIGtleXMgYXQg
YSBnaXZlbiB0aW1lIHdvcmtzIHNhbmVseS4KQEAgLTE3MSwzMiArMTcwLDMwIEBAIFRFU1QoQ0NL
ZXlmcmFtZWRBbmltYXRpb25DdXJ2ZVRlc3QsIFJlcGVhdGVkVHJhbnNmb3JtS2V5VGltZXMpCiB7
CiAgICAgT3duUHRyPENDS2V5ZnJhbWVkVHJhbnNmb3JtQW5pbWF0aW9uQ3VydmU+IGN1cnZlKEND
S2V5ZnJhbWVkVHJhbnNmb3JtQW5pbWF0aW9uQ3VydmU6OmNyZWF0ZSgpKTsKICAgICAvLyBBIHN0
ZXAgZnVuY3Rpb24uCi0gICAgVHJhbnNmb3JtT3BlcmF0aW9ucyBvcGVyYXRpb25zMTsKLSAgICBv
cGVyYXRpb25zMS5vcGVyYXRpb25zKCkuYXBwZW5kKFRyYW5zbGF0ZVRyYW5zZm9ybU9wZXJhdGlv
bjo6Y3JlYXRlKExlbmd0aCg0LCBGaXhlZCksIExlbmd0aCgwLCBGaXhlZCksIFRyYW5zZm9ybU9w
ZXJhdGlvbjo6VFJBTlNMQVRFX1gpKTsKLSAgICBUcmFuc2Zvcm1PcGVyYXRpb25zIG9wZXJhdGlv
bnMyOwotICAgIG9wZXJhdGlvbnMyLm9wZXJhdGlvbnMoKS5hcHBlbmQoVHJhbnNsYXRlVHJhbnNm
b3JtT3BlcmF0aW9uOjpjcmVhdGUoTGVuZ3RoKDQsIEZpeGVkKSwgTGVuZ3RoKDAsIEZpeGVkKSwg
VHJhbnNmb3JtT3BlcmF0aW9uOjpUUkFOU0xBVEVfWCkpOwotICAgIFRyYW5zZm9ybU9wZXJhdGlv
bnMgb3BlcmF0aW9uczM7Ci0gICAgb3BlcmF0aW9uczMub3BlcmF0aW9ucygpLmFwcGVuZChUcmFu
c2xhdGVUcmFuc2Zvcm1PcGVyYXRpb246OmNyZWF0ZShMZW5ndGgoNiwgRml4ZWQpLCBMZW5ndGgo
MCwgRml4ZWQpLCBUcmFuc2Zvcm1PcGVyYXRpb246OlRSQU5TTEFURV9YKSk7Ci0gICAgVHJhbnNm
b3JtT3BlcmF0aW9ucyBvcGVyYXRpb25zNDsKLSAgICBvcGVyYXRpb25zNC5vcGVyYXRpb25zKCku
YXBwZW5kKFRyYW5zbGF0ZVRyYW5zZm9ybU9wZXJhdGlvbjo6Y3JlYXRlKExlbmd0aCg2LCBGaXhl
ZCksIExlbmd0aCgwLCBGaXhlZCksIFRyYW5zZm9ybU9wZXJhdGlvbjo6VFJBTlNMQVRFX1gpKTsK
KyAgICBXZWJLaXQ6OldlYlRyYW5zZm9ybU9wZXJhdGlvbnMgb3BlcmF0aW9uczE7CisgICAgb3Bl
cmF0aW9uczEuYXBwZW5kVHJhbnNsYXRlKDQsIDAsIDApOworICAgIFdlYktpdDo6V2ViVHJhbnNm
b3JtT3BlcmF0aW9ucyBvcGVyYXRpb25zMjsKKyAgICBvcGVyYXRpb25zMi5hcHBlbmRUcmFuc2xh
dGUoNCwgMCwgMCk7CisgICAgV2ViS2l0OjpXZWJUcmFuc2Zvcm1PcGVyYXRpb25zIG9wZXJhdGlv
bnMzOworICAgIG9wZXJhdGlvbnMzLmFwcGVuZFRyYW5zbGF0ZSg2LCAwLCAwKTsKKyAgICBXZWJL
aXQ6OldlYlRyYW5zZm9ybU9wZXJhdGlvbnMgb3BlcmF0aW9uczQ7CisgICAgb3BlcmF0aW9uczQu
YXBwZW5kVHJhbnNsYXRlKDYsIDAsIDApOwogICAgIGN1cnZlLT5hZGRLZXlmcmFtZShDQ1RyYW5z
Zm9ybUtleWZyYW1lOjpjcmVhdGUoMCwgb3BlcmF0aW9uczEsIG51bGxwdHIpKTsKICAgICBjdXJ2
ZS0+YWRkS2V5ZnJhbWUoQ0NUcmFuc2Zvcm1LZXlmcmFtZTo6Y3JlYXRlKDEsIG9wZXJhdGlvbnMy
LCBudWxscHRyKSk7CiAgICAgY3VydmUtPmFkZEtleWZyYW1lKENDVHJhbnNmb3JtS2V5ZnJhbWU6
OmNyZWF0ZSgxLCBvcGVyYXRpb25zMywgbnVsbHB0cikpOwogICAgIGN1cnZlLT5hZGRLZXlmcmFt
ZShDQ1RyYW5zZm9ybUtleWZyYW1lOjpjcmVhdGUoMiwgb3BlcmF0aW9uczQsIG51bGxwdHIpKTsK
IAotICAgIEludFNpemUgbGF5ZXJTaXplOyAvLyBpZ25vcmVkCi0KLSAgICBleHBlY3RUcmFuc2xh
dGVYKDQsIGN1cnZlLT5nZXRWYWx1ZSgtMSwgbGF5ZXJTaXplKSk7Ci0gICAgZXhwZWN0VHJhbnNs
YXRlWCg0LCBjdXJ2ZS0+Z2V0VmFsdWUoMCwgbGF5ZXJTaXplKSk7Ci0gICAgZXhwZWN0VHJhbnNs
YXRlWCg0LCBjdXJ2ZS0+Z2V0VmFsdWUoMC41LCBsYXllclNpemUpKTsKKyAgICBleHBlY3RUcmFu
c2xhdGVYKDQsIGN1cnZlLT5nZXRWYWx1ZSgtMSkpOworICAgIGV4cGVjdFRyYW5zbGF0ZVgoNCwg
Y3VydmUtPmdldFZhbHVlKDApKTsKKyAgICBleHBlY3RUcmFuc2xhdGVYKDQsIGN1cnZlLT5nZXRW
YWx1ZSgwLjUpKTsKIAogICAgIC8vIFRoZXJlIGlzIGEgZGlzY29udGludWl0eSBhdCAxLiBBbnkg
dmFsdWUgYmV0d2VlbiA0IGFuZCA2IGlzIHZhbGlkLgotICAgIFdlYlRyYW5zZm9ybWF0aW9uTWF0
cml4IHZhbHVlID0gY3VydmUtPmdldFZhbHVlKDEsIGxheWVyU2l6ZSk7CisgICAgV2ViVHJhbnNm
b3JtYXRpb25NYXRyaXggdmFsdWUgPSBjdXJ2ZS0+Z2V0VmFsdWUoMSk7CiAgICAgRVhQRUNUX1RS
VUUodmFsdWUubTQxKCkgPj0gNCAmJiB2YWx1ZS5tNDEoKSA8PSA2KTsKIAotICAgIGV4cGVjdFRy
YW5zbGF0ZVgoNiwgY3VydmUtPmdldFZhbHVlKDEuNSwgbGF5ZXJTaXplKSk7Ci0gICAgZXhwZWN0
VHJhbnNsYXRlWCg2LCBjdXJ2ZS0+Z2V0VmFsdWUoMiwgbGF5ZXJTaXplKSk7Ci0gICAgZXhwZWN0
VHJhbnNsYXRlWCg2LCBjdXJ2ZS0+Z2V0VmFsdWUoMywgbGF5ZXJTaXplKSk7CisgICAgZXhwZWN0
VHJhbnNsYXRlWCg2LCBjdXJ2ZS0+Z2V0VmFsdWUoMS41KSk7CisgICAgZXhwZWN0VHJhbnNsYXRl
WCg2LCBjdXJ2ZS0+Z2V0VmFsdWUoMikpOworICAgIGV4cGVjdFRyYW5zbGF0ZVgoNiwgY3VydmUt
PmdldFZhbHVlKDMpKTsKIH0KIAogLy8gVGVzdHMgdGhhdCB0aGUga2V5ZnJhbWVzIG1heSBiZSBh
ZGRlZCBvdXQgb2Ygb3JkZXIuCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViS2l0L2Nocm9taXVtL3Rl
c3RzL0NDTGF5ZXJBbmltYXRpb25Db250cm9sbGVyVGVzdC5jcHAgYi9Tb3VyY2UvV2ViS2l0L2No
cm9taXVtL3Rlc3RzL0NDTGF5ZXJBbmltYXRpb25Db250cm9sbGVyVGVzdC5jcHAKaW5kZXggZGJl
ZDAyYzc0OWI5ZTdhZGUzM2E2NTVhZGFlNDZjYTI4YWVmYjAzZC4uNzIzNjEwOTJhZjIyODdlN2Rm
N2IyNTU2NjRjZjAyOTQxM2I4MmEwMSAxMDA2NDQKLS0tIGEvU291cmNlL1dlYktpdC9jaHJvbWl1
bS90ZXN0cy9DQ0xheWVyQW5pbWF0aW9uQ29udHJvbGxlclRlc3QuY3BwCisrKyBiL1NvdXJjZS9X
ZWJLaXQvY2hyb21pdW0vdGVzdHMvQ0NMYXllckFuaW1hdGlvbkNvbnRyb2xsZXJUZXN0LmNwcApA
QCAtMjksNyArMjksNiBAQAogI2luY2x1ZGUgIkNDQW5pbWF0aW9uVGVzdENvbW1vbi5oIgogI2lu
Y2x1ZGUgIkdyYXBoaWNzTGF5ZXIuaCIKICNpbmNsdWRlICJMZW5ndGguaCIKLSNpbmNsdWRlICJU
cmFuc2xhdGVUcmFuc2Zvcm1PcGVyYXRpb24uaCIKICNpbmNsdWRlICJjYy9DQ0FjdGl2ZUFuaW1h
dGlvbi5oIgogI2luY2x1ZGUgImNjL0NDQW5pbWF0aW9uQ3VydmUuaCIKIApAQCAtNTQsMTk3ICs1
Myw2IEBAIFBhc3NPd25QdHI8Q0NBY3RpdmVBbmltYXRpb24+IGNyZWF0ZUFjdGl2ZUFuaW1hdGlv
bihQYXNzT3duUHRyPENDQW5pbWF0aW9uQ3VydmU+CiAgICAgcmV0dXJuIENDQWN0aXZlQW5pbWF0
aW9uOjpjcmVhdGUoY3VydmUsIDAsIGlkLCBwcm9wZXJ0eSk7CiB9CiAKLVRFU1QoQ0NMYXllckFu
aW1hdGlvbkNvbnRyb2xsZXJUZXN0LCBjcmVhdGVPcGFjaXR5QW5pbWF0aW9uKQotewotICAgIEZh
a2VMYXllckFuaW1hdGlvbkNvbnRyb2xsZXJDbGllbnQgZHVtbXk7Ci0gICAgT3duUHRyPENDTGF5
ZXJBbmltYXRpb25Db250cm9sbGVyPiBjb250cm9sbGVyKENDTGF5ZXJBbmltYXRpb25Db250cm9s
bGVyOjpjcmVhdGUoJmR1bW15KSk7Ci0gICAgY29uc3QgZG91YmxlIGR1cmF0aW9uID0gMTsKLSAg
ICBXZWJDb3JlOjpLZXlmcmFtZVZhbHVlTGlzdCB2YWx1ZXMoQW5pbWF0ZWRQcm9wZXJ0eU9wYWNp
dHkpOwotICAgIHZhbHVlcy5pbnNlcnQobmV3IEZsb2F0QW5pbWF0aW9uVmFsdWUoMCwgMCkpOwot
ICAgIHZhbHVlcy5pbnNlcnQobmV3IEZsb2F0QW5pbWF0aW9uVmFsdWUoZHVyYXRpb24sIDEpKTsK
LQotICAgIFJlZlB0cjxBbmltYXRpb24+IGFuaW1hdGlvbiA9IEFuaW1hdGlvbjo6Y3JlYXRlKCk7
Ci0gICAgYW5pbWF0aW9uLT5zZXREdXJhdGlvbihkdXJhdGlvbik7Ci0KLSAgICBJbnRTaXplIGJv
eFNpemU7Ci0gICAgY29udHJvbGxlci0+YWRkQW5pbWF0aW9uKHZhbHVlcywgYm94U2l6ZSwgYW5p
bWF0aW9uLmdldCgpLCAwLCAwLCAwKTsKLQotICAgIEVYUEVDVF9UUlVFKGNvbnRyb2xsZXItPmhh
c0FjdGl2ZUFuaW1hdGlvbigpKTsKLQotICAgIENDQWN0aXZlQW5pbWF0aW9uKiBhY3RpdmVBbmlt
YXRpb24gPSBjb250cm9sbGVyLT5nZXRBY3RpdmVBbmltYXRpb24oMCwgQ0NBY3RpdmVBbmltYXRp
b246Ok9wYWNpdHkpOwotICAgIEVYUEVDVF9UUlVFKGFjdGl2ZUFuaW1hdGlvbik7Ci0KLSAgICBF
WFBFQ1RfRVEoMSwgYWN0aXZlQW5pbWF0aW9uLT5pdGVyYXRpb25zKCkpOwotICAgIEVYUEVDVF9F
UShDQ0FjdGl2ZUFuaW1hdGlvbjo6T3BhY2l0eSwgYWN0aXZlQW5pbWF0aW9uLT50YXJnZXRQcm9w
ZXJ0eSgpKTsKLQotICAgIEVYUEVDVF9FUShDQ0FuaW1hdGlvbkN1cnZlOjpGbG9hdCwgYWN0aXZl
QW5pbWF0aW9uLT5jdXJ2ZSgpLT50eXBlKCkpOwotCi0gICAgY29uc3QgQ0NGbG9hdEFuaW1hdGlv
bkN1cnZlKiBjdXJ2ZSA9IGFjdGl2ZUFuaW1hdGlvbi0+Y3VydmUoKS0+dG9GbG9hdEFuaW1hdGlv
bkN1cnZlKCk7Ci0gICAgRVhQRUNUX1RSVUUoY3VydmUpOwotCi0gICAgRVhQRUNUX0VRKDAsIGN1
cnZlLT5nZXRWYWx1ZSgwKSk7Ci0gICAgRVhQRUNUX0VRKDEsIGN1cnZlLT5nZXRWYWx1ZShkdXJh
dGlvbikpOwotfQotCi1URVNUKENDTGF5ZXJBbmltYXRpb25Db250cm9sbGVyVGVzdCwgY3JlYXRl
VHJhbnNmb3JtQW5pbWF0aW9uKQotewotICAgIEZha2VMYXllckFuaW1hdGlvbkNvbnRyb2xsZXJD
bGllbnQgZHVtbXk7Ci0gICAgT3duUHRyPENDTGF5ZXJBbmltYXRpb25Db250cm9sbGVyPiBjb250
cm9sbGVyKENDTGF5ZXJBbmltYXRpb25Db250cm9sbGVyOjpjcmVhdGUoJmR1bW15KSk7Ci0gICAg
Y29uc3QgZG91YmxlIGR1cmF0aW9uID0gMTsKLSAgICBXZWJDb3JlOjpLZXlmcmFtZVZhbHVlTGlz
dCB2YWx1ZXMoQW5pbWF0ZWRQcm9wZXJ0eVdlYmtpdFRyYW5zZm9ybSk7Ci0KLSAgICBUcmFuc2Zv
cm1PcGVyYXRpb25zIG9wZXJhdGlvbnMxOwotICAgIG9wZXJhdGlvbnMxLm9wZXJhdGlvbnMoKS5h
cHBlbmQoVHJhbnNsYXRlVHJhbnNmb3JtT3BlcmF0aW9uOjpjcmVhdGUoTGVuZ3RoKDIsIEZpeGVk
KSwgTGVuZ3RoKDAsIEZpeGVkKSwgVHJhbnNmb3JtT3BlcmF0aW9uOjpUUkFOU0xBVEVfWCkpOwot
ICAgIHZhbHVlcy5pbnNlcnQobmV3IFRyYW5zZm9ybUFuaW1hdGlvblZhbHVlKDAsICZvcGVyYXRp
b25zMSkpOwotCi0gICAgVHJhbnNmb3JtT3BlcmF0aW9ucyBvcGVyYXRpb25zMjsKLSAgICBvcGVy
YXRpb25zMi5vcGVyYXRpb25zKCkuYXBwZW5kKFRyYW5zbGF0ZVRyYW5zZm9ybU9wZXJhdGlvbjo6
Y3JlYXRlKExlbmd0aCg0LCBGaXhlZCksIExlbmd0aCgwLCBGaXhlZCksIFRyYW5zZm9ybU9wZXJh
dGlvbjo6VFJBTlNMQVRFX1gpKTsKLSAgICB2YWx1ZXMuaW5zZXJ0KG5ldyBUcmFuc2Zvcm1Bbmlt
YXRpb25WYWx1ZShkdXJhdGlvbiwgJm9wZXJhdGlvbnMyKSk7Ci0KLSAgICBSZWZQdHI8QW5pbWF0
aW9uPiBhbmltYXRpb24gPSBBbmltYXRpb246OmNyZWF0ZSgpOwotICAgIGFuaW1hdGlvbi0+c2V0
RHVyYXRpb24oZHVyYXRpb24pOwotCi0gICAgSW50U2l6ZSBib3hTaXplOwotICAgIGNvbnRyb2xs
ZXItPmFkZEFuaW1hdGlvbih2YWx1ZXMsIGJveFNpemUsIGFuaW1hdGlvbi5nZXQoKSwgMCwgMCwg
MCk7Ci0KLSAgICBFWFBFQ1RfVFJVRShjb250cm9sbGVyLT5oYXNBY3RpdmVBbmltYXRpb24oKSk7
Ci0KLSAgICBDQ0FjdGl2ZUFuaW1hdGlvbiogYWN0aXZlQW5pbWF0aW9uID0gY29udHJvbGxlci0+
Z2V0QWN0aXZlQW5pbWF0aW9uKDAsIENDQWN0aXZlQW5pbWF0aW9uOjpUcmFuc2Zvcm0pOwotICAg
IEVYUEVDVF9UUlVFKGFjdGl2ZUFuaW1hdGlvbik7Ci0KLSAgICBFWFBFQ1RfRVEoMSwgYWN0aXZl
QW5pbWF0aW9uLT5pdGVyYXRpb25zKCkpOwotICAgIEVYUEVDVF9FUShDQ0FjdGl2ZUFuaW1hdGlv
bjo6VHJhbnNmb3JtLCBhY3RpdmVBbmltYXRpb24tPnRhcmdldFByb3BlcnR5KCkpOwotCi0gICAg
RVhQRUNUX0VRKENDQW5pbWF0aW9uQ3VydmU6OlRyYW5zZm9ybSwgYWN0aXZlQW5pbWF0aW9uLT5j
dXJ2ZSgpLT50eXBlKCkpOwotCi0gICAgY29uc3QgQ0NUcmFuc2Zvcm1BbmltYXRpb25DdXJ2ZSog
Y3VydmUgPSBhY3RpdmVBbmltYXRpb24tPmN1cnZlKCktPnRvVHJhbnNmb3JtQW5pbWF0aW9uQ3Vy
dmUoKTsKLSAgICBFWFBFQ1RfVFJVRShjdXJ2ZSk7Ci0KLSAgICBleHBlY3RUcmFuc2xhdGVYKDIs
IGN1cnZlLT5nZXRWYWx1ZSgwLCBib3hTaXplKSk7Ci0gICAgZXhwZWN0VHJhbnNsYXRlWCg0LCBj
dXJ2ZS0+Z2V0VmFsdWUoZHVyYXRpb24sIGJveFNpemUpKTsKLX0KLQotVEVTVChDQ0xheWVyQW5p
bWF0aW9uQ29udHJvbGxlclRlc3QsIGNyZWF0ZVJldmVyc2VkQW5pbWF0aW9uKQotewotICAgIEZh
a2VMYXllckFuaW1hdGlvbkNvbnRyb2xsZXJDbGllbnQgZHVtbXk7Ci0gICAgT3duUHRyPENDTGF5
ZXJBbmltYXRpb25Db250cm9sbGVyPiBjb250cm9sbGVyKENDTGF5ZXJBbmltYXRpb25Db250cm9s
bGVyOjpjcmVhdGUoJmR1bW15KSk7Ci0gICAgY29uc3QgZG91YmxlIGR1cmF0aW9uID0gMTsKLSAg
ICBXZWJDb3JlOjpLZXlmcmFtZVZhbHVlTGlzdCB2YWx1ZXMoQW5pbWF0ZWRQcm9wZXJ0eVdlYmtp
dFRyYW5zZm9ybSk7Ci0KLSAgICBUcmFuc2Zvcm1PcGVyYXRpb25zIG9wZXJhdGlvbnMxOwotICAg
IG9wZXJhdGlvbnMxLm9wZXJhdGlvbnMoKS5hcHBlbmQoVHJhbnNsYXRlVHJhbnNmb3JtT3BlcmF0
aW9uOjpjcmVhdGUoTGVuZ3RoKDIsIEZpeGVkKSwgTGVuZ3RoKDAsIEZpeGVkKSwgVHJhbnNmb3Jt
T3BlcmF0aW9uOjpUUkFOU0xBVEVfWCkpOwotICAgIHZhbHVlcy5pbnNlcnQobmV3IFRyYW5zZm9y
bUFuaW1hdGlvblZhbHVlKDAsICZvcGVyYXRpb25zMSkpOwotCi0gICAgVHJhbnNmb3JtT3BlcmF0
aW9ucyBvcGVyYXRpb25zMjsKLSAgICBvcGVyYXRpb25zMi5vcGVyYXRpb25zKCkuYXBwZW5kKFRy
YW5zbGF0ZVRyYW5zZm9ybU9wZXJhdGlvbjo6Y3JlYXRlKExlbmd0aCg0LCBGaXhlZCksIExlbmd0
aCgwLCBGaXhlZCksIFRyYW5zZm9ybU9wZXJhdGlvbjo6VFJBTlNMQVRFX1gpKTsKLSAgICB2YWx1
ZXMuaW5zZXJ0KG5ldyBUcmFuc2Zvcm1BbmltYXRpb25WYWx1ZShkdXJhdGlvbiwgJm9wZXJhdGlv
bnMyKSk7Ci0KLSAgICBSZWZQdHI8QW5pbWF0aW9uPiBhbmltYXRpb24gPSBBbmltYXRpb246OmNy
ZWF0ZSgpOwotICAgIGFuaW1hdGlvbi0+c2V0RHVyYXRpb24oZHVyYXRpb24pOwotICAgIGFuaW1h
dGlvbi0+c2V0RGlyZWN0aW9uKEFuaW1hdGlvbjo6QW5pbWF0aW9uRGlyZWN0aW9uUmV2ZXJzZSk7
Ci0KLSAgICBJbnRTaXplIGJveFNpemU7Ci0gICAgY29udHJvbGxlci0+YWRkQW5pbWF0aW9uKHZh
bHVlcywgYm94U2l6ZSwgYW5pbWF0aW9uLmdldCgpLCAwLCAwLCAwKTsKLQotICAgIEVYUEVDVF9U
UlVFKGNvbnRyb2xsZXItPmhhc0FjdGl2ZUFuaW1hdGlvbigpKTsKLQotICAgIENDQWN0aXZlQW5p
bWF0aW9uKiBhY3RpdmVBbmltYXRpb24gPSBjb250cm9sbGVyLT5nZXRBY3RpdmVBbmltYXRpb24o
MCwgQ0NBY3RpdmVBbmltYXRpb246OlRyYW5zZm9ybSk7Ci0gICAgRVhQRUNUX1RSVUUoYWN0aXZl
QW5pbWF0aW9uKTsKLQotICAgIEVYUEVDVF9FUSgxLCBhY3RpdmVBbmltYXRpb24tPml0ZXJhdGlv
bnMoKSk7Ci0gICAgRVhQRUNUX0VRKENDQWN0aXZlQW5pbWF0aW9uOjpUcmFuc2Zvcm0sIGFjdGl2
ZUFuaW1hdGlvbi0+dGFyZ2V0UHJvcGVydHkoKSk7Ci0KLSAgICBFWFBFQ1RfRVEoQ0NBbmltYXRp
b25DdXJ2ZTo6VHJhbnNmb3JtLCBhY3RpdmVBbmltYXRpb24tPmN1cnZlKCktPnR5cGUoKSk7Ci0K
LSAgICBjb25zdCBDQ1RyYW5zZm9ybUFuaW1hdGlvbkN1cnZlKiBjdXJ2ZSA9IGFjdGl2ZUFuaW1h
dGlvbi0+Y3VydmUoKS0+dG9UcmFuc2Zvcm1BbmltYXRpb25DdXJ2ZSgpOwotICAgIEVYUEVDVF9U
UlVFKGN1cnZlKTsKLQotICAgIGV4cGVjdFRyYW5zbGF0ZVgoNCwgY3VydmUtPmdldFZhbHVlKDAs
IGJveFNpemUpKTsKLSAgICBleHBlY3RUcmFuc2xhdGVYKDIsIGN1cnZlLT5nZXRWYWx1ZShkdXJh
dGlvbiwgYm94U2l6ZSkpOwotfQotCi1URVNUKENDTGF5ZXJBbmltYXRpb25Db250cm9sbGVyVGVz
dCwgY3JlYXRlQWx0ZXJuYXRpbmdBbmltYXRpb24pCi17Ci0gICAgRmFrZUxheWVyQW5pbWF0aW9u
Q29udHJvbGxlckNsaWVudCBkdW1teTsKLSAgICBPd25QdHI8Q0NMYXllckFuaW1hdGlvbkNvbnRy
b2xsZXI+IGNvbnRyb2xsZXIoQ0NMYXllckFuaW1hdGlvbkNvbnRyb2xsZXI6OmNyZWF0ZSgmZHVt
bXkpKTsKLSAgICBjb25zdCBkb3VibGUgZHVyYXRpb24gPSAxOwotICAgIFdlYkNvcmU6OktleWZy
YW1lVmFsdWVMaXN0IHZhbHVlcyhBbmltYXRlZFByb3BlcnR5V2Via2l0VHJhbnNmb3JtKTsKLQot
ICAgIFRyYW5zZm9ybU9wZXJhdGlvbnMgb3BlcmF0aW9uczE7Ci0gICAgb3BlcmF0aW9uczEub3Bl
cmF0aW9ucygpLmFwcGVuZChUcmFuc2xhdGVUcmFuc2Zvcm1PcGVyYXRpb246OmNyZWF0ZShMZW5n
dGgoMiwgRml4ZWQpLCBMZW5ndGgoMCwgRml4ZWQpLCBUcmFuc2Zvcm1PcGVyYXRpb246OlRSQU5T
TEFURV9YKSk7Ci0gICAgdmFsdWVzLmluc2VydChuZXcgVHJhbnNmb3JtQW5pbWF0aW9uVmFsdWUo
MCwgJm9wZXJhdGlvbnMxKSk7Ci0KLSAgICBUcmFuc2Zvcm1PcGVyYXRpb25zIG9wZXJhdGlvbnMy
OwotICAgIG9wZXJhdGlvbnMyLm9wZXJhdGlvbnMoKS5hcHBlbmQoVHJhbnNsYXRlVHJhbnNmb3Jt
T3BlcmF0aW9uOjpjcmVhdGUoTGVuZ3RoKDQsIEZpeGVkKSwgTGVuZ3RoKDAsIEZpeGVkKSwgVHJh
bnNmb3JtT3BlcmF0aW9uOjpUUkFOU0xBVEVfWCkpOwotICAgIHZhbHVlcy5pbnNlcnQobmV3IFRy
YW5zZm9ybUFuaW1hdGlvblZhbHVlKGR1cmF0aW9uLCAmb3BlcmF0aW9uczIpKTsKLQotICAgIFJl
ZlB0cjxBbmltYXRpb24+IGFuaW1hdGlvbiA9IEFuaW1hdGlvbjo6Y3JlYXRlKCk7Ci0gICAgYW5p
bWF0aW9uLT5zZXREdXJhdGlvbihkdXJhdGlvbik7Ci0gICAgYW5pbWF0aW9uLT5zZXREaXJlY3Rp
b24oQW5pbWF0aW9uOjpBbmltYXRpb25EaXJlY3Rpb25BbHRlcm5hdGUpOwotICAgIGFuaW1hdGlv
bi0+c2V0SXRlcmF0aW9uQ291bnQoMik7Ci0KLSAgICBJbnRTaXplIGJveFNpemU7Ci0gICAgY29u
dHJvbGxlci0+YWRkQW5pbWF0aW9uKHZhbHVlcywgYm94U2l6ZSwgYW5pbWF0aW9uLmdldCgpLCAw
LCAwLCAwKTsKLQotICAgIEVYUEVDVF9UUlVFKGNvbnRyb2xsZXItPmhhc0FjdGl2ZUFuaW1hdGlv
bigpKTsKLQotICAgIENDQWN0aXZlQW5pbWF0aW9uKiBhY3RpdmVBbmltYXRpb24gPSBjb250cm9s
bGVyLT5nZXRBY3RpdmVBbmltYXRpb24oMCwgQ0NBY3RpdmVBbmltYXRpb246OlRyYW5zZm9ybSk7
Ci0gICAgRVhQRUNUX1RSVUUoYWN0aXZlQW5pbWF0aW9uKTsKLSAgICBFWFBFQ1RfVFJVRShhY3Rp
dmVBbmltYXRpb24tPmFsdGVybmF0ZXNEaXJlY3Rpb24oKSk7Ci0KLSAgICBFWFBFQ1RfRVEoMiwg
YWN0aXZlQW5pbWF0aW9uLT5pdGVyYXRpb25zKCkpOwotICAgIEVYUEVDVF9FUShDQ0FjdGl2ZUFu
aW1hdGlvbjo6VHJhbnNmb3JtLCBhY3RpdmVBbmltYXRpb24tPnRhcmdldFByb3BlcnR5KCkpOwot
Ci0gICAgRVhQRUNUX0VRKENDQW5pbWF0aW9uQ3VydmU6OlRyYW5zZm9ybSwgYWN0aXZlQW5pbWF0
aW9uLT5jdXJ2ZSgpLT50eXBlKCkpOwotCi0gICAgY29uc3QgQ0NUcmFuc2Zvcm1BbmltYXRpb25D
dXJ2ZSogY3VydmUgPSBhY3RpdmVBbmltYXRpb24tPmN1cnZlKCktPnRvVHJhbnNmb3JtQW5pbWF0
aW9uQ3VydmUoKTsKLSAgICBFWFBFQ1RfVFJVRShjdXJ2ZSk7Ci0KLSAgICBleHBlY3RUcmFuc2xh
dGVYKDIsIGN1cnZlLT5nZXRWYWx1ZSgwLCBib3hTaXplKSk7Ci0gICAgZXhwZWN0VHJhbnNsYXRl
WCg0LCBjdXJ2ZS0+Z2V0VmFsdWUoZHVyYXRpb24sIGJveFNpemUpKTsKLX0KLQotVEVTVChDQ0xh
eWVyQW5pbWF0aW9uQ29udHJvbGxlclRlc3QsIGNyZWF0ZVJldmVyc2VkQWx0ZXJuYXRpbmdBbmlt
YXRpb24pCi17Ci0gICAgRmFrZUxheWVyQW5pbWF0aW9uQ29udHJvbGxlckNsaWVudCBkdW1teTsK
LSAgICBPd25QdHI8Q0NMYXllckFuaW1hdGlvbkNvbnRyb2xsZXI+IGNvbnRyb2xsZXIoQ0NMYXll
ckFuaW1hdGlvbkNvbnRyb2xsZXI6OmNyZWF0ZSgmZHVtbXkpKTsKLSAgICBjb25zdCBkb3VibGUg
ZHVyYXRpb24gPSAxOwotICAgIFdlYkNvcmU6OktleWZyYW1lVmFsdWVMaXN0IHZhbHVlcyhBbmlt
YXRlZFByb3BlcnR5V2Via2l0VHJhbnNmb3JtKTsKLQotICAgIFRyYW5zZm9ybU9wZXJhdGlvbnMg
b3BlcmF0aW9uczE7Ci0gICAgb3BlcmF0aW9uczEub3BlcmF0aW9ucygpLmFwcGVuZChUcmFuc2xh
dGVUcmFuc2Zvcm1PcGVyYXRpb246OmNyZWF0ZShMZW5ndGgoMiwgRml4ZWQpLCBMZW5ndGgoMCwg
Rml4ZWQpLCBUcmFuc2Zvcm1PcGVyYXRpb246OlRSQU5TTEFURV9YKSk7Ci0gICAgdmFsdWVzLmlu
c2VydChuZXcgVHJhbnNmb3JtQW5pbWF0aW9uVmFsdWUoMCwgJm9wZXJhdGlvbnMxKSk7Ci0KLSAg
ICBUcmFuc2Zvcm1PcGVyYXRpb25zIG9wZXJhdGlvbnMyOwotICAgIG9wZXJhdGlvbnMyLm9wZXJh
dGlvbnMoKS5hcHBlbmQoVHJhbnNsYXRlVHJhbnNmb3JtT3BlcmF0aW9uOjpjcmVhdGUoTGVuZ3Ro
KDQsIEZpeGVkKSwgTGVuZ3RoKDAsIEZpeGVkKSwgVHJhbnNmb3JtT3BlcmF0aW9uOjpUUkFOU0xB
VEVfWCkpOwotICAgIHZhbHVlcy5pbnNlcnQobmV3IFRyYW5zZm9ybUFuaW1hdGlvblZhbHVlKGR1
cmF0aW9uLCAmb3BlcmF0aW9uczIpKTsKLQotICAgIFJlZlB0cjxBbmltYXRpb24+IGFuaW1hdGlv
biA9IEFuaW1hdGlvbjo6Y3JlYXRlKCk7Ci0gICAgYW5pbWF0aW9uLT5zZXREdXJhdGlvbihkdXJh
dGlvbik7Ci0gICAgYW5pbWF0aW9uLT5zZXREaXJlY3Rpb24oQW5pbWF0aW9uOjpBbmltYXRpb25E
aXJlY3Rpb25BbHRlcm5hdGVSZXZlcnNlKTsKLSAgICBhbmltYXRpb24tPnNldEl0ZXJhdGlvbkNv
dW50KDIpOwotCi0gICAgSW50U2l6ZSBib3hTaXplOwotICAgIGNvbnRyb2xsZXItPmFkZEFuaW1h
dGlvbih2YWx1ZXMsIGJveFNpemUsIGFuaW1hdGlvbi5nZXQoKSwgMCwgMCwgMCk7Ci0KLSAgICBF
WFBFQ1RfVFJVRShjb250cm9sbGVyLT5oYXNBY3RpdmVBbmltYXRpb24oKSk7Ci0KLSAgICBDQ0Fj
dGl2ZUFuaW1hdGlvbiogYWN0aXZlQW5pbWF0aW9uID0gY29udHJvbGxlci0+Z2V0QWN0aXZlQW5p
bWF0aW9uKDAsIENDQWN0aXZlQW5pbWF0aW9uOjpUcmFuc2Zvcm0pOwotICAgIEVYUEVDVF9UUlVF
KGFjdGl2ZUFuaW1hdGlvbik7Ci0gICAgRVhQRUNUX1RSVUUoYWN0aXZlQW5pbWF0aW9uLT5hbHRl
cm5hdGVzRGlyZWN0aW9uKCkpOwotCi0gICAgRVhQRUNUX0VRKDIsIGFjdGl2ZUFuaW1hdGlvbi0+
aXRlcmF0aW9ucygpKTsKLSAgICBFWFBFQ1RfRVEoQ0NBY3RpdmVBbmltYXRpb246OlRyYW5zZm9y
bSwgYWN0aXZlQW5pbWF0aW9uLT50YXJnZXRQcm9wZXJ0eSgpKTsKLQotICAgIEVYUEVDVF9FUShD
Q0FuaW1hdGlvbkN1cnZlOjpUcmFuc2Zvcm0sIGFjdGl2ZUFuaW1hdGlvbi0+Y3VydmUoKS0+dHlw
ZSgpKTsKLQotICAgIGNvbnN0IENDVHJhbnNmb3JtQW5pbWF0aW9uQ3VydmUqIGN1cnZlID0gYWN0
aXZlQW5pbWF0aW9uLT5jdXJ2ZSgpLT50b1RyYW5zZm9ybUFuaW1hdGlvbkN1cnZlKCk7Ci0gICAg
RVhQRUNUX1RSVUUoY3VydmUpOwotCi0gICAgZXhwZWN0VHJhbnNsYXRlWCg0LCBjdXJ2ZS0+Z2V0
VmFsdWUoMCwgYm94U2l6ZSkpOwotICAgIGV4cGVjdFRyYW5zbGF0ZVgoMiwgY3VydmUtPmdldFZh
bHVlKGR1cmF0aW9uLCBib3hTaXplKSk7Ci19Ci0KIFRFU1QoQ0NMYXllckFuaW1hdGlvbkNvbnRy
b2xsZXJUZXN0LCBzeW5jTmV3QW5pbWF0aW9uKQogewogICAgIEZha2VMYXllckFuaW1hdGlvbkNv
bnRyb2xsZXJDbGllbnQgZHVtbXlJbXBsOwpAQCAtMzMzLDcgKzE0MSw2IEBAIFRFU1QoQ0NMYXll
ckFuaW1hdGlvbkNvbnRyb2xsZXJUZXN0LCBzeW5jUGF1c2VBbmRSZXN1bWUpCiAgICAgRVhQRUNU
X0VRKENDQWN0aXZlQW5pbWF0aW9uOjpSdW5uaW5nLCBjb250cm9sbGVySW1wbC0+Z2V0QWN0aXZl
QW5pbWF0aW9uKDAsIENDQWN0aXZlQW5pbWF0aW9uOjpPcGFjaXR5KS0+cnVuU3RhdGUoKSk7CiB9
CiAKLQogVEVTVChDQ0xheWVyQW5pbWF0aW9uQ29udHJvbGxlclRlc3QsIGRvTm90U3luY0Zpbmlz
aGVkQW5pbWF0aW9uKQogewogICAgIEZha2VMYXllckFuaW1hdGlvbkNvbnRyb2xsZXJDbGllbnQg
ZHVtbXlJbXBsOwpAQCAtMzc1LDcgKzE4Miw3IEBAIFRFU1QoQ0NMYXllckFuaW1hdGlvbkNvbnRy
b2xsZXJUZXN0LCBUcml2aWFsVHJhbnNpdGlvbikKIAogICAgIE93blB0cjxDQ0FjdGl2ZUFuaW1h
dGlvbj4gdG9BZGQoY3JlYXRlQWN0aXZlQW5pbWF0aW9uKGFkb3B0UHRyKG5ldyBGYWtlRmxvYXRU
cmFuc2l0aW9uKDEsIDAsIDEpKSwgMSwgQ0NBY3RpdmVBbmltYXRpb246Ok9wYWNpdHkpKTsKIAot
ICAgIGNvbnRyb2xsZXItPmFkZCh0b0FkZC5yZWxlYXNlKCkpOworICAgIGNvbnRyb2xsZXItPmFk
ZEFuaW1hdGlvbih0b0FkZC5yZWxlYXNlKCkpOwogICAgIGNvbnRyb2xsZXItPmFuaW1hdGUoMCwg
ZXZlbnRzLmdldCgpKTsKICAgICBFWFBFQ1RfVFJVRShjb250cm9sbGVyLT5oYXNBY3RpdmVBbmlt
YXRpb24oKSk7CiAgICAgRVhQRUNUX0VRKDAsIGR1bW15Lm9wYWNpdHkoKSk7CkBAIC0zOTYsNyAr
MjAzLDcgQEAgVEVTVChDQ0xheWVyQW5pbWF0aW9uQ29udHJvbGxlclRlc3QsIEFuaW1hdGlvbnNX
YWl0aW5nRm9yU3RhcnRUaW1lRG9Ob3RGaW5pc2hJZlQKICAgICB0b0FkZC0+c2V0TmVlZHNTeW5j
aHJvbml6ZWRTdGFydFRpbWUodHJ1ZSk7CiAKICAgICAvLyBXZSBzaG91bGQgcGF1c2UgYXQgdGhl
IGZpcnN0IGtleWZyYW1lIGluZGVmaW5pdGVseSB3YWl0aW5nIGZvciB0aGF0IGFuaW1hdGlvbiB0
byBzdGFydC4KLSAgICBjb250cm9sbGVyLT5hZGQodG9BZGQucmVsZWFzZSgpKTsKKyAgICBjb250
cm9sbGVyLT5hZGRBbmltYXRpb24odG9BZGQucmVsZWFzZSgpKTsKICAgICBjb250cm9sbGVyLT5h
bmltYXRlKDAsIGV2ZW50cy5nZXQoKSk7CiAgICAgRVhQRUNUX1RSVUUoY29udHJvbGxlci0+aGFz
QWN0aXZlQW5pbWF0aW9uKCkpOwogICAgIEVYUEVDVF9FUSgwLCBkdW1teS5vcGFjaXR5KCkpOwpA
QCAtNDIyLDggKzIyOSw4IEBAIFRFU1QoQ0NMYXllckFuaW1hdGlvbkNvbnRyb2xsZXJUZXN0LCBU
cml2aWFsUXVldWluZykKICAgICBPd25QdHI8Q0NMYXllckFuaW1hdGlvbkNvbnRyb2xsZXI+IGNv
bnRyb2xsZXIoCiAgICAgICAgIENDTGF5ZXJBbmltYXRpb25Db250cm9sbGVyOjpjcmVhdGUoJmR1
bW15KSk7CiAKLSAgICBjb250cm9sbGVyLT5hZGQoY3JlYXRlQWN0aXZlQW5pbWF0aW9uKGFkb3B0
UHRyKG5ldyBGYWtlRmxvYXRUcmFuc2l0aW9uKDEsIDAsIDEpKSwgMSwgQ0NBY3RpdmVBbmltYXRp
b246Ok9wYWNpdHkpKTsKLSAgICBjb250cm9sbGVyLT5hZGQoY3JlYXRlQWN0aXZlQW5pbWF0aW9u
KGFkb3B0UHRyKG5ldyBGYWtlRmxvYXRUcmFuc2l0aW9uKDEsIDEsIDAuNSkpLCAyLCBDQ0FjdGl2
ZUFuaW1hdGlvbjo6T3BhY2l0eSkpOworICAgIGNvbnRyb2xsZXItPmFkZEFuaW1hdGlvbihjcmVh
dGVBY3RpdmVBbmltYXRpb24oYWRvcHRQdHIobmV3IEZha2VGbG9hdFRyYW5zaXRpb24oMSwgMCwg
MSkpLCAxLCBDQ0FjdGl2ZUFuaW1hdGlvbjo6T3BhY2l0eSkpOworICAgIGNvbnRyb2xsZXItPmFk
ZEFuaW1hdGlvbihjcmVhdGVBY3RpdmVBbmltYXRpb24oYWRvcHRQdHIobmV3IEZha2VGbG9hdFRy
YW5zaXRpb24oMSwgMSwgMC41KSksIDIsIENDQWN0aXZlQW5pbWF0aW9uOjpPcGFjaXR5KSk7CiAK
ICAgICBjb250cm9sbGVyLT5hbmltYXRlKDAsIGV2ZW50cy5nZXQoKSk7CiAgICAgRVhQRUNUX1RS
VUUoY29udHJvbGxlci0+aGFzQWN0aXZlQW5pbWF0aW9uKCkpOwpAQCAtNDQzLDE0ICsyNTAsMTQg
QEAgVEVTVChDQ0xheWVyQW5pbWF0aW9uQ29udHJvbGxlclRlc3QsIEludGVycnVwdCkKICAgICBG
YWtlTGF5ZXJBbmltYXRpb25Db250cm9sbGVyQ2xpZW50IGR1bW15OwogICAgIE93blB0cjxDQ0xh
eWVyQW5pbWF0aW9uQ29udHJvbGxlcj4gY29udHJvbGxlcigKICAgICAgICAgQ0NMYXllckFuaW1h
dGlvbkNvbnRyb2xsZXI6OmNyZWF0ZSgmZHVtbXkpKTsKLSAgICBjb250cm9sbGVyLT5hZGQoY3Jl
YXRlQWN0aXZlQW5pbWF0aW9uKGFkb3B0UHRyKG5ldyBGYWtlRmxvYXRUcmFuc2l0aW9uKDEsIDAs
IDEpKSwgMSwgQ0NBY3RpdmVBbmltYXRpb246Ok9wYWNpdHkpKTsKKyAgICBjb250cm9sbGVyLT5h
ZGRBbmltYXRpb24oY3JlYXRlQWN0aXZlQW5pbWF0aW9uKGFkb3B0UHRyKG5ldyBGYWtlRmxvYXRU
cmFuc2l0aW9uKDEsIDAsIDEpKSwgMSwgQ0NBY3RpdmVBbmltYXRpb246Ok9wYWNpdHkpKTsKICAg
ICBjb250cm9sbGVyLT5hbmltYXRlKDAsIGV2ZW50cy5nZXQoKSk7CiAgICAgRVhQRUNUX1RSVUUo
Y29udHJvbGxlci0+aGFzQWN0aXZlQW5pbWF0aW9uKCkpOwogICAgIEVYUEVDVF9FUSgwLCBkdW1t
eS5vcGFjaXR5KCkpOwogCiAgICAgT3duUHRyPENDQWN0aXZlQW5pbWF0aW9uPiB0b0FkZChjcmVh
dGVBY3RpdmVBbmltYXRpb24oYWRvcHRQdHIobmV3IEZha2VGbG9hdFRyYW5zaXRpb24oMSwgMSwg
MC41KSksIDIsIENDQWN0aXZlQW5pbWF0aW9uOjpPcGFjaXR5KSk7CiAgICAgdG9BZGQtPnNldFJ1
blN0YXRlKENDQWN0aXZlQW5pbWF0aW9uOjpXYWl0aW5nRm9yTmV4dFRpY2ssIDApOwotICAgIGNv
bnRyb2xsZXItPmFkZCh0b0FkZC5yZWxlYXNlKCkpOworICAgIGNvbnRyb2xsZXItPmFkZEFuaW1h
dGlvbih0b0FkZC5yZWxlYXNlKCkpOwogCiAgICAgLy8gU2luY2UgdGhlIGFuaW1hdGlvbiB3YXMg
aW4gdGhlIFdhaXRpbmdGb3JOZXh0VGljayBzdGF0ZSwgaXQgc2hvdWxkIHN0YXJ0IHJpZ2h0IGlu
CiAgICAgLy8gdGhpcyBjYWxsIHRvIGFuaW1hdGUuCkBAIC00NzAsOSArMjc3LDkgQEAgVEVTVChD
Q0xheWVyQW5pbWF0aW9uQ29udHJvbGxlclRlc3QsIFNjaGVkdWxlVG9nZXRoZXJXaGVuQVByb3Bl
cnR5SXNCbG9ja2VkKQogICAgIE93blB0cjxDQ0xheWVyQW5pbWF0aW9uQ29udHJvbGxlcj4gY29u
dHJvbGxlcigKICAgICAgICAgQ0NMYXllckFuaW1hdGlvbkNvbnRyb2xsZXI6OmNyZWF0ZSgmZHVt
bXkpKTsKIAotICAgIGNvbnRyb2xsZXItPmFkZChjcmVhdGVBY3RpdmVBbmltYXRpb24oYWRvcHRQ
dHIobmV3IEZha2VUcmFuc2Zvcm1UcmFuc2l0aW9uKDEpKSwgMSwgQ0NBY3RpdmVBbmltYXRpb246
OlRyYW5zZm9ybSkpOwotICAgIGNvbnRyb2xsZXItPmFkZChjcmVhdGVBY3RpdmVBbmltYXRpb24o
YWRvcHRQdHIobmV3IEZha2VUcmFuc2Zvcm1UcmFuc2l0aW9uKDEpKSwgMiwgQ0NBY3RpdmVBbmlt
YXRpb246OlRyYW5zZm9ybSkpOwotICAgIGNvbnRyb2xsZXItPmFkZChjcmVhdGVBY3RpdmVBbmlt
YXRpb24oYWRvcHRQdHIobmV3IEZha2VGbG9hdFRyYW5zaXRpb24oMSwgMCwgMSkpLCAyLCBDQ0Fj
dGl2ZUFuaW1hdGlvbjo6T3BhY2l0eSkpOworICAgIGNvbnRyb2xsZXItPmFkZEFuaW1hdGlvbihj
cmVhdGVBY3RpdmVBbmltYXRpb24oYWRvcHRQdHIobmV3IEZha2VUcmFuc2Zvcm1UcmFuc2l0aW9u
KDEpKSwgMSwgQ0NBY3RpdmVBbmltYXRpb246OlRyYW5zZm9ybSkpOworICAgIGNvbnRyb2xsZXIt
PmFkZEFuaW1hdGlvbihjcmVhdGVBY3RpdmVBbmltYXRpb24oYWRvcHRQdHIobmV3IEZha2VUcmFu
c2Zvcm1UcmFuc2l0aW9uKDEpKSwgMiwgQ0NBY3RpdmVBbmltYXRpb246OlRyYW5zZm9ybSkpOwor
ICAgIGNvbnRyb2xsZXItPmFkZEFuaW1hdGlvbihjcmVhdGVBY3RpdmVBbmltYXRpb24oYWRvcHRQ
dHIobmV3IEZha2VGbG9hdFRyYW5zaXRpb24oMSwgMCwgMSkpLCAyLCBDQ0FjdGl2ZUFuaW1hdGlv
bjo6T3BhY2l0eSkpOwogCiAgICAgY29udHJvbGxlci0+YW5pbWF0ZSgwLCBldmVudHMuZ2V0KCkp
OwogICAgIEVYUEVDVF9FUSgwLCBkdW1teS5vcGFjaXR5KCkpOwpAQCAtNDk3LDkgKzMwNCw5IEBA
IFRFU1QoQ0NMYXllckFuaW1hdGlvbkNvbnRyb2xsZXJUZXN0LCBTY2hlZHVsZVRvZ2V0aGVyV2l0
aEFuQW5pbVdhaXRpbmcpCiAgICAgT3duUHRyPENDTGF5ZXJBbmltYXRpb25Db250cm9sbGVyPiBj
b250cm9sbGVyKAogICAgICAgICBDQ0xheWVyQW5pbWF0aW9uQ29udHJvbGxlcjo6Y3JlYXRlKCZk
dW1teSkpOwogCi0gICAgY29udHJvbGxlci0+YWRkKGNyZWF0ZUFjdGl2ZUFuaW1hdGlvbihhZG9w
dFB0cihuZXcgRmFrZVRyYW5zZm9ybVRyYW5zaXRpb24oMikpLCAxLCBDQ0FjdGl2ZUFuaW1hdGlv
bjo6VHJhbnNmb3JtKSk7Ci0gICAgY29udHJvbGxlci0+YWRkKGNyZWF0ZUFjdGl2ZUFuaW1hdGlv
bihhZG9wdFB0cihuZXcgRmFrZUZsb2F0VHJhbnNpdGlvbigxLCAwLCAxKSksIDEsIENDQWN0aXZl
QW5pbWF0aW9uOjpPcGFjaXR5KSk7Ci0gICAgY29udHJvbGxlci0+YWRkKGNyZWF0ZUFjdGl2ZUFu
aW1hdGlvbihhZG9wdFB0cihuZXcgRmFrZUZsb2F0VHJhbnNpdGlvbigxLCAxLCAwLjUpKSwgMiwg
Q0NBY3RpdmVBbmltYXRpb246Ok9wYWNpdHkpKTsKKyAgICBjb250cm9sbGVyLT5hZGRBbmltYXRp
b24oY3JlYXRlQWN0aXZlQW5pbWF0aW9uKGFkb3B0UHRyKG5ldyBGYWtlVHJhbnNmb3JtVHJhbnNp
dGlvbigyKSksIDEsIENDQWN0aXZlQW5pbWF0aW9uOjpUcmFuc2Zvcm0pKTsKKyAgICBjb250cm9s
bGVyLT5hZGRBbmltYXRpb24oY3JlYXRlQWN0aXZlQW5pbWF0aW9uKGFkb3B0UHRyKG5ldyBGYWtl
RmxvYXRUcmFuc2l0aW9uKDEsIDAsIDEpKSwgMSwgQ0NBY3RpdmVBbmltYXRpb246Ok9wYWNpdHkp
KTsKKyAgICBjb250cm9sbGVyLT5hZGRBbmltYXRpb24oY3JlYXRlQWN0aXZlQW5pbWF0aW9uKGFk
b3B0UHRyKG5ldyBGYWtlRmxvYXRUcmFuc2l0aW9uKDEsIDEsIDAuNSkpLCAyLCBDQ0FjdGl2ZUFu
aW1hdGlvbjo6T3BhY2l0eSkpOwogCiAgICAgLy8gQW5pbWF0aW9ucyB3aXRoIGlkIDEgc2hvdWxk
IGJvdGggc3RhcnQgbm93LgogICAgIGNvbnRyb2xsZXItPmFuaW1hdGUoMCwgZXZlbnRzLmdldCgp
KTsKQEAgLTUzMCw3ICszMzcsNyBAQCBURVNUKENDTGF5ZXJBbmltYXRpb25Db250cm9sbGVyVGVz
dCwgU2NoZWR1bGVBbmltYXRpb24pCiAgICAgT3duUHRyPENDQWN0aXZlQW5pbWF0aW9uPiB0b0Fk
ZChjcmVhdGVBY3RpdmVBbmltYXRpb24oYWRvcHRQdHIobmV3IEZha2VGbG9hdFRyYW5zaXRpb24o
MSwgMCwgMSkpLCAxLCBDQ0FjdGl2ZUFuaW1hdGlvbjo6T3BhY2l0eSkpOwogICAgIHRvQWRkLT5z
ZXRSdW5TdGF0ZShDQ0FjdGl2ZUFuaW1hdGlvbjo6V2FpdGluZ0ZvclN0YXJ0VGltZSwgMCk7CiAg
ICAgdG9BZGQtPnNldFN0YXJ0VGltZSgxKTsKLSAgICBjb250cm9sbGVyLT5hZGQodG9BZGQucmVs
ZWFzZSgpKTsKKyAgICBjb250cm9sbGVyLT5hZGRBbmltYXRpb24odG9BZGQucmVsZWFzZSgpKTsK
IAogICAgIGNvbnRyb2xsZXItPmFuaW1hdGUoMCwgZXZlbnRzLmdldCgpKTsKICAgICBFWFBFQ1Rf
VFJVRShjb250cm9sbGVyLT5oYXNBY3RpdmVBbmltYXRpb24oKSk7CkBAIC01NTEsMTIgKzM1OCwx
MiBAQCBURVNUKENDTGF5ZXJBbmltYXRpb25Db250cm9sbGVyVGVzdCwgU2NoZWR1bGVkQW5pbWF0
aW9uSW50ZXJydXB0c1J1bm5pbmdBbmltYXRpbwogICAgIE93blB0cjxDQ0xheWVyQW5pbWF0aW9u
Q29udHJvbGxlcj4gY29udHJvbGxlcigKICAgICAgICAgQ0NMYXllckFuaW1hdGlvbkNvbnRyb2xs
ZXI6OmNyZWF0ZSgmZHVtbXkpKTsKIAotICAgIGNvbnRyb2xsZXItPmFkZChjcmVhdGVBY3RpdmVB
bmltYXRpb24oYWRvcHRQdHIobmV3IEZha2VGbG9hdFRyYW5zaXRpb24oMiwgMCwgMSkpLCAxLCBD
Q0FjdGl2ZUFuaW1hdGlvbjo6T3BhY2l0eSkpOworICAgIGNvbnRyb2xsZXItPmFkZEFuaW1hdGlv
bihjcmVhdGVBY3RpdmVBbmltYXRpb24oYWRvcHRQdHIobmV3IEZha2VGbG9hdFRyYW5zaXRpb24o
MiwgMCwgMSkpLCAxLCBDQ0FjdGl2ZUFuaW1hdGlvbjo6T3BhY2l0eSkpOwogCiAgICAgT3duUHRy
PENDQWN0aXZlQW5pbWF0aW9uPiB0b0FkZChjcmVhdGVBY3RpdmVBbmltYXRpb24oYWRvcHRQdHIo
bmV3IEZha2VGbG9hdFRyYW5zaXRpb24oMSwgMC41LCAwKSksIDIsIENDQWN0aXZlQW5pbWF0aW9u
OjpPcGFjaXR5KSk7CiAgICAgdG9BZGQtPnNldFJ1blN0YXRlKENDQWN0aXZlQW5pbWF0aW9uOjpX
YWl0aW5nRm9yU3RhcnRUaW1lLCAwKTsKICAgICB0b0FkZC0+c2V0U3RhcnRUaW1lKDEpOwotICAg
IGNvbnRyb2xsZXItPmFkZCh0b0FkZC5yZWxlYXNlKCkpOworICAgIGNvbnRyb2xsZXItPmFkZEFu
aW1hdGlvbih0b0FkZC5yZWxlYXNlKCkpOwogCiAgICAgLy8gRmlyc3QgMnMgb3BhY2l0eSB0cmFu
c2l0aW9uIHNob3VsZCBzdGFydCBpbW1lZGlhdGVseS4KICAgICBjb250cm9sbGVyLT5hbmltYXRl
KDAsIGV2ZW50cy5nZXQoKSk7CkBAIC01ODIsMTQgKzM4OSwxNCBAQCBURVNUKENDTGF5ZXJBbmlt
YXRpb25Db250cm9sbGVyVGVzdCwgU2NoZWR1bGVkQW5pbWF0aW9uSW50ZXJydXB0c1J1bm5pbmdB
bmltYXRpbwogICAgIE93blB0cjxDQ0xheWVyQW5pbWF0aW9uQ29udHJvbGxlcj4gY29udHJvbGxl
cigKICAgICAgICAgQ0NMYXllckFuaW1hdGlvbkNvbnRyb2xsZXI6OmNyZWF0ZSgmZHVtbXkpKTsK
IAotICAgIGNvbnRyb2xsZXItPmFkZChjcmVhdGVBY3RpdmVBbmltYXRpb24oYWRvcHRQdHIobmV3
IEZha2VGbG9hdFRyYW5zaXRpb24oMiwgMCwgMSkpLCAxLCBDQ0FjdGl2ZUFuaW1hdGlvbjo6T3Bh
Y2l0eSkpOworICAgIGNvbnRyb2xsZXItPmFkZEFuaW1hdGlvbihjcmVhdGVBY3RpdmVBbmltYXRp
b24oYWRvcHRQdHIobmV3IEZha2VGbG9hdFRyYW5zaXRpb24oMiwgMCwgMSkpLCAxLCBDQ0FjdGl2
ZUFuaW1hdGlvbjo6T3BhY2l0eSkpOwogCiAgICAgT3duUHRyPENDQWN0aXZlQW5pbWF0aW9uPiB0
b0FkZChjcmVhdGVBY3RpdmVBbmltYXRpb24oYWRvcHRQdHIobmV3IEZha2VGbG9hdFRyYW5zaXRp
b24oMiwgMC41LCAwKSksIDIsIENDQWN0aXZlQW5pbWF0aW9uOjpPcGFjaXR5KSk7CiAgICAgdG9B
ZGQtPnNldFJ1blN0YXRlKENDQWN0aXZlQW5pbWF0aW9uOjpXYWl0aW5nRm9yU3RhcnRUaW1lLCAw
KTsKICAgICB0b0FkZC0+c2V0U3RhcnRUaW1lKDEpOwotICAgIGNvbnRyb2xsZXItPmFkZCh0b0Fk
ZC5yZWxlYXNlKCkpOworICAgIGNvbnRyb2xsZXItPmFkZEFuaW1hdGlvbih0b0FkZC5yZWxlYXNl
KCkpOwogCi0gICAgY29udHJvbGxlci0+YWRkKGNyZWF0ZUFjdGl2ZUFuaW1hdGlvbihhZG9wdFB0
cihuZXcgRmFrZUZsb2F0VHJhbnNpdGlvbigxLCAwLCAwLjc1KSksIDMsIENDQWN0aXZlQW5pbWF0
aW9uOjpPcGFjaXR5KSk7CisgICAgY29udHJvbGxlci0+YWRkQW5pbWF0aW9uKGNyZWF0ZUFjdGl2
ZUFuaW1hdGlvbihhZG9wdFB0cihuZXcgRmFrZUZsb2F0VHJhbnNpdGlvbigxLCAwLCAwLjc1KSks
IDMsIENDQWN0aXZlQW5pbWF0aW9uOjpPcGFjaXR5KSk7CiAKICAgICAvLyBGaXJzdCAycyBvcGFj
aXR5IHRyYW5zaXRpb24gc2hvdWxkIHN0YXJ0IGltbWVkaWF0ZWx5LgogICAgIGNvbnRyb2xsZXIt
PmFuaW1hdGUoMCwgZXZlbnRzLmdldCgpKTsKQEAgLTYyMCw3ICs0MjcsNyBAQCBURVNUKENDTGF5
ZXJBbmltYXRpb25Db250cm9sbGVyVGVzdCwgVHJpdmlhbExvb3BpbmcpCiAKICAgICBPd25QdHI8
Q0NBY3RpdmVBbmltYXRpb24+IHRvQWRkKGNyZWF0ZUFjdGl2ZUFuaW1hdGlvbihhZG9wdFB0cihu
ZXcgRmFrZUZsb2F0VHJhbnNpdGlvbigxLCAwLCAxKSksIDEsIENDQWN0aXZlQW5pbWF0aW9uOjpP
cGFjaXR5KSk7CiAgICAgdG9BZGQtPnNldEl0ZXJhdGlvbnMoMyk7Ci0gICAgY29udHJvbGxlci0+
YWRkKHRvQWRkLnJlbGVhc2UoKSk7CisgICAgY29udHJvbGxlci0+YWRkQW5pbWF0aW9uKHRvQWRk
LnJlbGVhc2UoKSk7CiAKICAgICBjb250cm9sbGVyLT5hbmltYXRlKDAsIGV2ZW50cy5nZXQoKSk7
CiAgICAgRVhQRUNUX1RSVUUoY29udHJvbGxlci0+aGFzQWN0aXZlQW5pbWF0aW9uKCkpOwpAQCAt
NjU3LDcgKzQ2NCw3IEBAIFRFU1QoQ0NMYXllckFuaW1hdGlvbkNvbnRyb2xsZXJUZXN0LCBJbmZp
bml0ZUxvb3BpbmcpCiAgICAgY29uc3QgaW50IGlkID0gMTsKICAgICBPd25QdHI8Q0NBY3RpdmVB
bmltYXRpb24+IHRvQWRkKGNyZWF0ZUFjdGl2ZUFuaW1hdGlvbihhZG9wdFB0cihuZXcgRmFrZUZs
b2F0VHJhbnNpdGlvbigxLCAwLCAxKSksIGlkLCBDQ0FjdGl2ZUFuaW1hdGlvbjo6T3BhY2l0eSkp
OwogICAgIHRvQWRkLT5zZXRJdGVyYXRpb25zKC0xKTsKLSAgICBjb250cm9sbGVyLT5hZGQodG9B
ZGQucmVsZWFzZSgpKTsKKyAgICBjb250cm9sbGVyLT5hZGRBbmltYXRpb24odG9BZGQucmVsZWFz
ZSgpKTsKIAogICAgIGNvbnRyb2xsZXItPmFuaW1hdGUoMCwgZXZlbnRzLmdldCgpKTsKICAgICBF
WFBFQ1RfVFJVRShjb250cm9sbGVyLT5oYXNBY3RpdmVBbmltYXRpb24oKSk7CkBAIC02OTEsNyAr
NDk4LDcgQEAgVEVTVChDQ0xheWVyQW5pbWF0aW9uQ29udHJvbGxlclRlc3QsIFBhdXNlUmVzdW1l
KQogICAgICAgICBDQ0xheWVyQW5pbWF0aW9uQ29udHJvbGxlcjo6Y3JlYXRlKCZkdW1teSkpOwog
CiAgICAgY29uc3QgaW50IGlkID0gMTsKLSAgICBjb250cm9sbGVyLT5hZGQoY3JlYXRlQWN0aXZl
QW5pbWF0aW9uKGFkb3B0UHRyKG5ldyBGYWtlRmxvYXRUcmFuc2l0aW9uKDEsIDAsIDEpKSwgaWQs
IENDQWN0aXZlQW5pbWF0aW9uOjpPcGFjaXR5KSk7CisgICAgY29udHJvbGxlci0+YWRkQW5pbWF0
aW9uKGNyZWF0ZUFjdGl2ZUFuaW1hdGlvbihhZG9wdFB0cihuZXcgRmFrZUZsb2F0VHJhbnNpdGlv
bigxLCAwLCAxKSksIGlkLCBDQ0FjdGl2ZUFuaW1hdGlvbjo6T3BhY2l0eSkpOwogCiAgICAgY29u
dHJvbGxlci0+YW5pbWF0ZSgwLCBldmVudHMuZ2V0KCkpOwogICAgIEVYUEVDVF9UUlVFKGNvbnRy
b2xsZXItPmhhc0FjdGl2ZUFuaW1hdGlvbigpKTsKQEAgLTcyNiw5ICs1MzMsOSBAQCBURVNUKEND
TGF5ZXJBbmltYXRpb25Db250cm9sbGVyVGVzdCwgQWJvcnRBR3JvdXBlZEFuaW1hdGlvbikKICAg
ICAgICAgQ0NMYXllckFuaW1hdGlvbkNvbnRyb2xsZXI6OmNyZWF0ZSgmZHVtbXkpKTsKIAogICAg
IGNvbnN0IGludCBpZCA9IDE7Ci0gICAgY29udHJvbGxlci0+YWRkKGNyZWF0ZUFjdGl2ZUFuaW1h
dGlvbihhZG9wdFB0cihuZXcgRmFrZVRyYW5zZm9ybVRyYW5zaXRpb24oMSkpLCBpZCwgQ0NBY3Rp
dmVBbmltYXRpb246OlRyYW5zZm9ybSkpOwotICAgIGNvbnRyb2xsZXItPmFkZChjcmVhdGVBY3Rp
dmVBbmltYXRpb24oYWRvcHRQdHIobmV3IEZha2VGbG9hdFRyYW5zaXRpb24oMiwgMCwgMSkpLCBp
ZCwgQ0NBY3RpdmVBbmltYXRpb246Ok9wYWNpdHkpKTsKLSAgICBjb250cm9sbGVyLT5hZGQoY3Jl
YXRlQWN0aXZlQW5pbWF0aW9uKGFkb3B0UHRyKG5ldyBGYWtlRmxvYXRUcmFuc2l0aW9uKDEsIDEs
IDAuNzUpKSwgMiwgQ0NBY3RpdmVBbmltYXRpb246Ok9wYWNpdHkpKTsKKyAgICBjb250cm9sbGVy
LT5hZGRBbmltYXRpb24oY3JlYXRlQWN0aXZlQW5pbWF0aW9uKGFkb3B0UHRyKG5ldyBGYWtlVHJh
bnNmb3JtVHJhbnNpdGlvbigxKSksIGlkLCBDQ0FjdGl2ZUFuaW1hdGlvbjo6VHJhbnNmb3JtKSk7
CisgICAgY29udHJvbGxlci0+YWRkQW5pbWF0aW9uKGNyZWF0ZUFjdGl2ZUFuaW1hdGlvbihhZG9w
dFB0cihuZXcgRmFrZUZsb2F0VHJhbnNpdGlvbigyLCAwLCAxKSksIGlkLCBDQ0FjdGl2ZUFuaW1h
dGlvbjo6T3BhY2l0eSkpOworICAgIGNvbnRyb2xsZXItPmFkZEFuaW1hdGlvbihjcmVhdGVBY3Rp
dmVBbmltYXRpb24oYWRvcHRQdHIobmV3IEZha2VGbG9hdFRyYW5zaXRpb24oMSwgMSwgMC43NSkp
LCAyLCBDQ0FjdGl2ZUFuaW1hdGlvbjo6T3BhY2l0eSkpOwogCiAgICAgY29udHJvbGxlci0+YW5p
bWF0ZSgwLCBldmVudHMuZ2V0KCkpOwogICAgIEVYUEVDVF9UUlVFKGNvbnRyb2xsZXItPmhhc0Fj
dGl2ZUFuaW1hdGlvbigpKTsKQEAgLTc1OCw3ICs1NjUsNyBAQCBURVNUKENDTGF5ZXJBbmltYXRp
b25Db250cm9sbGVyVGVzdCwgRm9yY2VTeW5jV2hlblN5bmNocm9uaXplZFN0YXJ0VGltZU5lZWRl
ZCkKIAogICAgIE93blB0cjxDQ0FjdGl2ZUFuaW1hdGlvbj4gdG9BZGQoY3JlYXRlQWN0aXZlQW5p
bWF0aW9uKGFkb3B0UHRyKG5ldyBGYWtlRmxvYXRUcmFuc2l0aW9uKDIsIDAsIDEpKSwgMCwgQ0NB
Y3RpdmVBbmltYXRpb246Ok9wYWNpdHkpKTsKICAgICB0b0FkZC0+c2V0TmVlZHNTeW5jaHJvbml6
ZWRTdGFydFRpbWUodHJ1ZSk7Ci0gICAgY29udHJvbGxlci0+YWRkKHRvQWRkLnJlbGVhc2UoKSk7
CisgICAgY29udHJvbGxlci0+YWRkQW5pbWF0aW9uKHRvQWRkLnJlbGVhc2UoKSk7CiAKICAgICBj
b250cm9sbGVyLT5hbmltYXRlKDAsIDApOwogICAgIEVYUEVDVF9UUlVFKGNvbnRyb2xsZXItPmhh
c0FjdGl2ZUFuaW1hdGlvbigpKTsKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJLaXQvY2hyb21pdW0v
dGVzdHMvQ0NMYXllclRyZWVIb3N0VGVzdC5jcHAgYi9Tb3VyY2UvV2ViS2l0L2Nocm9taXVtL3Rl
c3RzL0NDTGF5ZXJUcmVlSG9zdFRlc3QuY3BwCmluZGV4IGI5OTYwMDZhZTI4OTFiOGExODM2Mjdk
ZjVkOWEzYjkyNGZjMzBmMGQuLmQxM2Q2ZjdkNThjZTlmMWNhMzUzM2RiYWQ4ZDJkNjU5YjUxZGJj
MGUgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJLaXQvY2hyb21pdW0vdGVzdHMvQ0NMYXllclRyZWVI
b3N0VGVzdC5jcHAKKysrIGIvU291cmNlL1dlYktpdC9jaHJvbWl1bS90ZXN0cy9DQ0xheWVyVHJl
ZUhvc3RUZXN0LmNwcApAQCAtMjk1Miw3ICsyOTUyLDcgQEAgcHVibGljOgogICAgICAgICAvLyBB
bnkgdmFsaWQgQ0NBbmltYXRpb25DdXJ2ZSB3aWxsIGRvIGhlcmUuCiAgICAgICAgIE93blB0cjxD
Q0FuaW1hdGlvbkN1cnZlPiBjdXJ2ZShDQ0Vhc2VUaW1pbmdGdW5jdGlvbjo6Y3JlYXRlKCkpOwog
ICAgICAgICBPd25QdHI8Q0NBY3RpdmVBbmltYXRpb24+IGFuaW1hdGlvbihDQ0FjdGl2ZUFuaW1h
dGlvbjo6Y3JlYXRlKGN1cnZlLnJlbGVhc2UoKSwgQW5pbWF0aW9uSWRWZW5kb3I6OmdldE5leHRB
bmltYXRpb25JZCgpLCBBbmltYXRpb25JZFZlbmRvcjo6Z2V0TmV4dEdyb3VwSWQoKSwgQ0NBY3Rp
dmVBbmltYXRpb246Ok9wYWNpdHkpKTsKLSAgICAgICAgbGF5ZXItPmxheWVyQW5pbWF0aW9uQ29u
dHJvbGxlcigpLT5hZGQoYW5pbWF0aW9uLnJlbGVhc2UoKSk7CisgICAgICAgIGxheWVyLT5sYXll
ckFuaW1hdGlvbkNvbnRyb2xsZXIoKS0+YWRkQW5pbWF0aW9uKGFuaW1hdGlvbi5yZWxlYXNlKCkp
OwogCiAgICAgICAgIC8vIFdlIGFkZCB0aGUgYW5pbWF0aW9uICpiZWZvcmUqIGF0dGFjaGluZyB0
aGUgbGF5ZXIgdG8gdGhlIHRyZWUuCiAgICAgICAgIG1fbGF5ZXJUcmVlSG9zdC0+cm9vdExheWVy
KCktPmFkZENoaWxkKGxheWVyKTsKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJLaXQvY2hyb21pdW0v
dGVzdHMvR3JhcGhpY3NMYXllckNocm9taXVtVGVzdC5jcHAgYi9Tb3VyY2UvV2ViS2l0L2Nocm9t
aXVtL3Rlc3RzL0dyYXBoaWNzTGF5ZXJDaHJvbWl1bVRlc3QuY3BwCmluZGV4IGI3YWE4NTc0NjVj
YmFjMThjNDgyYWVkNWQ5NzMyMzI2NTE0ZGE2YTQuLjQzMDRjNmY2YWMxZjI1MTU2Yjk3N2FkMWQx
ZWUxZTg1NmIxNTk3OTIgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJLaXQvY2hyb21pdW0vdGVzdHMv
R3JhcGhpY3NMYXllckNocm9taXVtVGVzdC5jcHAKKysrIGIvU291cmNlL1dlYktpdC9jaHJvbWl1
bS90ZXN0cy9HcmFwaGljc0xheWVyQ2hyb21pdW1UZXN0LmNwcApAQCAtMjcsNTYgKzI3LDM3OCBA
QAogI2luY2x1ZGUgIkdyYXBoaWNzTGF5ZXJDaHJvbWl1bS5oIgogCiAjaW5jbHVkZSAiQ0NBbmlt
YXRpb25UZXN0Q29tbW9uLmgiCisjaW5jbHVkZSAiQ29tcG9zaXRvckZha2VHcmFwaGljc0NvbnRl
eHQzRC5oIgorI2luY2x1ZGUgIkdyYXBoaWNzQ29udGV4dDNELmgiCisjaW5jbHVkZSAiR3JhcGhp
Y3NDb250ZXh0M0RQcml2YXRlLmgiCiAjaW5jbHVkZSAiR3JhcGhpY3NMYXllci5oIgogI2luY2x1
ZGUgIkxheWVyQ2hyb21pdW0uaCIKKyNpbmNsdWRlICJNYXRyaXgzRFRyYW5zZm9ybU9wZXJhdGlv
bi5oIgorI2luY2x1ZGUgIlJvdGF0ZVRyYW5zZm9ybU9wZXJhdGlvbi5oIgorI2luY2x1ZGUgIlRy
YW5zbGF0ZVRyYW5zZm9ybU9wZXJhdGlvbi5oIgorI2luY2x1ZGUgIldlYkNvbXBvc2l0b3IuaCIK
KworI2luY2x1ZGUgImNjL0NDTGF5ZXJUcmVlSG9zdC5oIgorI2luY2x1ZGUgImNjL0NDTGF5ZXJU
cmVlSG9zdEltcGwuaCIKKyNpbmNsdWRlICJjYy9DQ1NpbmdsZVRocmVhZFByb3h5LmgiCisKICNp
bmNsdWRlIDxndGVzdC9ndGVzdC5oPgorCisjaW5jbHVkZSA8cHVibGljL1dlYlRyYW5zZm9ybWF0
aW9uTWF0cml4Lmg+CisKICNpbmNsdWRlIDx3dGYvUGFzc093blB0ci5oPgogCiB1c2luZyBuYW1l
c3BhY2UgV2ViQ29yZTsKK3VzaW5nIG5hbWVzcGFjZSBXZWJLaXQ7CiB1c2luZyBuYW1lc3BhY2Ug
V2ViS2l0VGVzdHM7CiAKIG5hbWVzcGFjZSB7CiAKIGNsYXNzIE1vY2tHcmFwaGljc0xheWVyQ2xp
ZW50IDogcHVibGljIEdyYXBoaWNzTGF5ZXJDbGllbnQgewogICBwdWJsaWM6Ci0gICAgdmlydHVh
bCB2b2lkIG5vdGlmeUFuaW1hdGlvblN0YXJ0ZWQoY29uc3QgR3JhcGhpY3NMYXllciosIGRvdWJs
ZSB0aW1lKSB7IH0KLSAgICB2aXJ0dWFsIHZvaWQgbm90aWZ5U3luY1JlcXVpcmVkKGNvbnN0IEdy
YXBoaWNzTGF5ZXIqKSB7IH0KLSAgICB2aXJ0dWFsIHZvaWQgcGFpbnRDb250ZW50cyhjb25zdCBH
cmFwaGljc0xheWVyKiwgR3JhcGhpY3NDb250ZXh0JiwgR3JhcGhpY3NMYXllclBhaW50aW5nUGhh
c2UsIGNvbnN0IEludFJlY3QmIGluQ2xpcCkgeyB9Ci0gICAgdmlydHVhbCBib29sIHNob3dEZWJ1
Z0JvcmRlcnMoY29uc3QgR3JhcGhpY3NMYXllciopIGNvbnN0IHsgcmV0dXJuIGZhbHNlOyB9Ci0g
ICAgdmlydHVhbCBib29sIHNob3dSZXBhaW50Q291bnRlcihjb25zdCBHcmFwaGljc0xheWVyKikg
Y29uc3QgeyByZXR1cm4gZmFsc2U7IH0KKyAgICB2aXJ0dWFsIHZvaWQgbm90aWZ5QW5pbWF0aW9u
U3RhcnRlZChjb25zdCBHcmFwaGljc0xheWVyKiwgZG91YmxlIHRpbWUpIE9WRVJSSURFIHsgfQor
ICAgIHZpcnR1YWwgdm9pZCBub3RpZnlTeW5jUmVxdWlyZWQoY29uc3QgR3JhcGhpY3NMYXllciop
IE9WRVJSSURFIHsgfQorICAgIHZpcnR1YWwgdm9pZCBwYWludENvbnRlbnRzKGNvbnN0IEdyYXBo
aWNzTGF5ZXIqLCBHcmFwaGljc0NvbnRleHQmLCBHcmFwaGljc0xheWVyUGFpbnRpbmdQaGFzZSwg
Y29uc3QgSW50UmVjdCYgaW5DbGlwKSBPVkVSUklERSB7IH0KKyAgICB2aXJ0dWFsIGJvb2wgc2hv
d0RlYnVnQm9yZGVycyhjb25zdCBHcmFwaGljc0xheWVyKikgY29uc3QgT1ZFUlJJREUgeyByZXR1
cm4gZmFsc2U7IH0KKyAgICB2aXJ0dWFsIGJvb2wgc2hvd1JlcGFpbnRDb3VudGVyKGNvbnN0IEdy
YXBoaWNzTGF5ZXIqKSBjb25zdCBPVkVSUklERSB7IHJldHVybiBmYWxzZTsgfQogfTsKIAotVEVT
VChHcmFwaGljc0xheWVyQ2hyb21pdW1UZXN0LCB1cGRhdGVMYXllclByZXNlcnZlczNEV2l0aEFu
aW1hdGlvbnMpCi17Ci0gICAgTW9ja0dyYXBoaWNzTGF5ZXJDbGllbnQgY2xpZW50OwotICAgIE93
blB0cjxHcmFwaGljc0xheWVyQ2hyb21pdW0+IGdyYXBoaWNzTGF5ZXIgPSBzdGF0aWNfcG9pbnRl
cl9jYXN0PEdyYXBoaWNzTGF5ZXJDaHJvbWl1bT4oR3JhcGhpY3NMYXllcjo6Y3JlYXRlKCZjbGll
bnQpKTsKLSAgICBBU1NFUlRfVFJVRShncmFwaGljc0xheWVyLmdldCgpKTsKK2NsYXNzIE1vY2tM
YXllclRyZWVIb3N0Q2xpZW50IDogcHVibGljIENDTGF5ZXJUcmVlSG9zdENsaWVudCB7CitwdWJs
aWM6CisgICAgdmlydHVhbCB2b2lkIHdpbGxCZWdpbkZyYW1lKCkgT1ZFUlJJREUgeyB9CisgICAg
dmlydHVhbCB2b2lkIGRpZEJlZ2luRnJhbWUoKSBPVkVSUklERSB7IH0KKyAgICB2aXJ0dWFsIHZv
aWQgdXBkYXRlQW5pbWF0aW9ucyhkb3VibGUgZnJhbWVCZWdpblRpbWUpIE9WRVJSSURFIHsgfQor
ICAgIHZpcnR1YWwgdm9pZCBsYXlvdXQoKSBPVkVSUklERSB7IH0KKyAgICB2aXJ0dWFsIHZvaWQg
YXBwbHlTY3JvbGxBbmRTY2FsZShjb25zdCBJbnRTaXplJiBzY3JvbGxEZWx0YSwgZmxvYXQgcGFn
ZVNjYWxlKSBPVkVSUklERSB7IH0KKyAgICB2aXJ0dWFsIFBhc3NSZWZQdHI8R3JhcGhpY3NDb250
ZXh0M0Q+IGNyZWF0ZUNvbnRleHQoKSBPVkVSUklERQorICAgIHsKKyAgICAgICAgR3JhcGhpY3ND
b250ZXh0M0Q6OkF0dHJpYnV0ZXMgYXR0cnM7CisgICAgICAgIHJldHVybiBjcmVhdGVDb21wb3Np
dG9yTW9ja0dyYXBoaWNzQ29udGV4dDNEKGF0dHJzKTsKKyAgICB9CisgICAgdmlydHVhbCB2b2lk
IGRpZFJlY3JlYXRlQ29udGV4dChib29sIHN1Y2Nlc3MpIE9WRVJSSURFIHsgfQorICAgIHZpcnR1
YWwgdm9pZCB3aWxsQ29tbWl0KCkgT1ZFUlJJREUgeyB9CisgICAgdmlydHVhbCB2b2lkIGRpZENv
bW1pdCgpIE9WRVJSSURFIHsgfQorICAgIHZpcnR1YWwgdm9pZCBkaWRDb21taXRBbmREcmF3RnJh
bWUoKSBPVkVSUklERSB7IH0KKyAgICB2aXJ0dWFsIHZvaWQgZGlkQ29tcGxldGVTd2FwQnVmZmVy
cygpIE9WRVJSSURFIHsgfQorICAgIHZpcnR1YWwgdm9pZCBzY2hlZHVsZUNvbXBvc2l0ZSgpIE9W
RVJSSURFIHsgfQorfTsKKworY2xhc3MgTW9ja0xheWVyVHJlZUhvc3QgOiBwdWJsaWMgQ0NMYXll
clRyZWVIb3N0IHsKK3B1YmxpYzoKKyAgICBzdGF0aWMgUGFzc093blB0cjxNb2NrTGF5ZXJUcmVl
SG9zdD4gY3JlYXRlKCkKKyAgICB7CisgICAgICAgIC8vIEZvciB0aGVzZSB0ZXN0cywgd2Ugd2ls
bCBlbmFibGUgdGhyZWFkZWQgYW5pbWF0aW9ucy4KKyAgICAgICAgQ0NTZXR0aW5ncyBzZXR0aW5n
czsKKyAgICAgICAgc2V0dGluZ3MudGhyZWFkZWRBbmltYXRpb25FbmFibGVkID0gdHJ1ZTsKKyAg
ICAgICAgT3duUHRyPE1vY2tMYXllclRyZWVIb3N0PiBsYXllclRyZWVIb3N0KGFkb3B0UHRyKG5l
dyBNb2NrTGF5ZXJUcmVlSG9zdChuZXcgTW9ja0xheWVyVHJlZUhvc3RDbGllbnQoKSwgc2V0dGlu
Z3MpKSk7CisgICAgICAgIGJvb2wgc3VjY2VzcyA9IGxheWVyVHJlZUhvc3QtPmluaXRpYWxpemUo
KTsKKyAgICAgICAgRVhQRUNUX1RSVUUoc3VjY2Vzcyk7CisgICAgICAgIGxheWVyVHJlZUhvc3Qt
PnNldFJvb3RMYXllcihMYXllckNocm9taXVtOjpjcmVhdGUoKSk7CisgICAgICAgIGxheWVyVHJl
ZUhvc3QtPnNldFZpZXdwb3J0U2l6ZShJbnRTaXplKDEsIDEpKTsKKyAgICAgICAgcmV0dXJuIGxh
eWVyVHJlZUhvc3QucmVsZWFzZSgpOworICAgIH0KKworICAgIHZpcnR1YWwgUGFzc093blB0cjxD
Q0xheWVyVHJlZUhvc3RJbXBsPiBjcmVhdGVMYXllclRyZWVIb3N0SW1wbChDQ0xheWVyVHJlZUhv
c3RJbXBsQ2xpZW50KiBjbGllbnQpCisgICAgeworICAgICAgICAvLyBGb3IgdGhlc2UgdGVzdHMs
IHdlIHdpbGwgZW5hYmxlIHRocmVhZGVkIGFuaW1hdGlvbnMuCisgICAgICAgIENDU2V0dGluZ3Mg
Y29weVNldHRpbmdzID0gc2V0dGluZ3MoKTsKKyAgICAgICAgY29weVNldHRpbmdzLnRocmVhZGVk
QW5pbWF0aW9uRW5hYmxlZCA9IHRydWU7CisgICAgICAgIHJldHVybiBDQ0xheWVyVHJlZUhvc3RJ
bXBsOjpjcmVhdGUoY29weVNldHRpbmdzLCBjbGllbnQpOworICAgIH0KKworcHJpdmF0ZToKKyAg
ICBNb2NrTGF5ZXJUcmVlSG9zdChDQ0xheWVyVHJlZUhvc3RDbGllbnQqIGNsaWVudCwgY29uc3Qg
Q0NTZXR0aW5ncyYgc2V0dGluZ3MpCisgICAgICAgIDogQ0NMYXllclRyZWVIb3N0KGNsaWVudCwg
c2V0dGluZ3MpCisgICAgeworICAgIH0KK307CisKK2NsYXNzIEdyYXBoaWNzTGF5ZXJDaHJvbWl1
bVRlc3QgOiBwdWJsaWMgdGVzdGluZzo6VGVzdCB7CitwdWJsaWM6CisgICAgR3JhcGhpY3NMYXll
ckNocm9taXVtVGVzdCgpCisgICAgeworICAgICAgICBXZWJDb21wb3NpdG9yOjppbml0aWFsaXpl
KDApOworICAgICAgICBtX2dyYXBoaWNzTGF5ZXIgPSBzdGF0aWNfcG9pbnRlcl9jYXN0PEdyYXBo
aWNzTGF5ZXJDaHJvbWl1bT4oR3JhcGhpY3NMYXllcjo6Y3JlYXRlKCZtX2NsaWVudCkpOworICAg
ICAgICBtX3BsYXRmb3JtTGF5ZXIgPSBzdGF0aWNfY2FzdDxMYXllckNocm9taXVtKj4obV9ncmFw
aGljc0xheWVyLT5wbGF0Zm9ybUxheWVyKCkpOworICAgICAgICBtX2xheWVyVHJlZUhvc3QgPSBN
b2NrTGF5ZXJUcmVlSG9zdDo6Y3JlYXRlKCk7CisgICAgICAgIG1fcGxhdGZvcm1MYXllci0+c2V0
TGF5ZXJUcmVlSG9zdChtX2xheWVyVHJlZUhvc3QuZ2V0KCkpOworICAgIH0KKworICAgIHZpcnR1
YWwgfkdyYXBoaWNzTGF5ZXJDaHJvbWl1bVRlc3QoKQorICAgIHsKKyAgICAgICAgbV9ncmFwaGlj
c0xheWVyLmNsZWFyKCk7CisgICAgICAgIG1fbGF5ZXJUcmVlSG9zdC5jbGVhcigpOworICAgICAg
ICBXZWJDb21wb3NpdG9yOjpzaHV0ZG93bigpOworICAgIH0KIAotICAgIExheWVyQ2hyb21pdW0q
IHBsYXRmb3JtTGF5ZXIgPSBzdGF0aWNfY2FzdDxMYXllckNocm9taXVtKj4oZ3JhcGhpY3NMYXll
ci0+cGxhdGZvcm1MYXllcigpKTsKLSAgICBBU1NFUlRfVFJVRShwbGF0Zm9ybUxheWVyKTsKK3By
b3RlY3RlZDoKKyAgICBzdGF0aWMgdm9pZCBleHBlY3RUcmFuc2xhdGVYKGRvdWJsZSB0cmFuc2xh
dGVYLCBjb25zdCBXZWJUcmFuc2Zvcm1hdGlvbk1hdHJpeCYgbWF0cml4KQorICAgIHsKKyAgICAg
ICAgRVhQRUNUX0ZMT0FUX0VRKHRyYW5zbGF0ZVgsIG1hdHJpeC5tNDEoKSk7CisgICAgfQogCi0g
ICAgQVNTRVJUX0ZBTFNFKHBsYXRmb3JtTGF5ZXItPmhhc0FjdGl2ZUFuaW1hdGlvbigpKTsKKyAg
ICBMYXllckNocm9taXVtKiBtX3BsYXRmb3JtTGF5ZXI7CisgICAgT3duUHRyPEdyYXBoaWNzTGF5
ZXJDaHJvbWl1bT4gbV9ncmFwaGljc0xheWVyOworICAgIE93blB0cjxDQ0xheWVyVHJlZUhvc3Q+
IG1fbGF5ZXJUcmVlSG9zdDsKKworcHJpdmF0ZToKKyAgICBNb2NrR3JhcGhpY3NMYXllckNsaWVu
dCBtX2NsaWVudDsKKyAgICBEZWJ1Z1Njb3BlZFNldE1haW5UaHJlYWQgbV9tYWluOworfTsKKwor
VEVTVF9GKEdyYXBoaWNzTGF5ZXJDaHJvbWl1bVRlc3QsIHVwZGF0ZUxheWVyUHJlc2VydmVzM0RX
aXRoQW5pbWF0aW9ucykKK3sKKyAgICBBU1NFUlRfRkFMU0UobV9wbGF0Zm9ybUxheWVyLT5oYXNB
Y3RpdmVBbmltYXRpb24oKSk7CiAKICAgICBPd25QdHI8Q0NBY3RpdmVBbmltYXRpb24+IGZsb2F0
QW5pbWF0aW9uKENDQWN0aXZlQW5pbWF0aW9uOjpjcmVhdGUoYWRvcHRQdHIobmV3IEZha2VGbG9h
dEFuaW1hdGlvbkN1cnZlKSwgMCwgMSwgQ0NBY3RpdmVBbmltYXRpb246Ok9wYWNpdHkpKTsKLSAg
ICBwbGF0Zm9ybUxheWVyLT5sYXllckFuaW1hdGlvbkNvbnRyb2xsZXIoKS0+YWRkKGZsb2F0QW5p
bWF0aW9uLnJlbGVhc2UoKSk7CisgICAgbV9wbGF0Zm9ybUxheWVyLT5sYXllckFuaW1hdGlvbkNv
bnRyb2xsZXIoKS0+YWRkQW5pbWF0aW9uKGZsb2F0QW5pbWF0aW9uLnJlbGVhc2UoKSk7CisKKyAg
ICBBU1NFUlRfVFJVRShtX3BsYXRmb3JtTGF5ZXItPmhhc0FjdGl2ZUFuaW1hdGlvbigpKTsKKwor
ICAgIG1fZ3JhcGhpY3NMYXllci0+c2V0UHJlc2VydmVzM0QodHJ1ZSk7CisKKyAgICBtX3BsYXRm
b3JtTGF5ZXIgPSBzdGF0aWNfY2FzdDxMYXllckNocm9taXVtKj4obV9ncmFwaGljc0xheWVyLT5w
bGF0Zm9ybUxheWVyKCkpOworICAgIEFTU0VSVF9UUlVFKG1fcGxhdGZvcm1MYXllcik7CisKKyAg
ICBBU1NFUlRfVFJVRShtX3BsYXRmb3JtTGF5ZXItPmhhc0FjdGl2ZUFuaW1hdGlvbigpKTsKKyAg
ICBtX3BsYXRmb3JtTGF5ZXItPnJlbW92ZUFuaW1hdGlvbigwKTsKKyAgICBBU1NFUlRfRkFMU0Uo
bV9wbGF0Zm9ybUxheWVyLT5oYXNBY3RpdmVBbmltYXRpb24oKSk7CisKKyAgICBtX2dyYXBoaWNz
TGF5ZXItPnNldFByZXNlcnZlczNEKGZhbHNlKTsKKworICAgIG1fcGxhdGZvcm1MYXllciA9IHN0
YXRpY19jYXN0PExheWVyQ2hyb21pdW0qPihtX2dyYXBoaWNzTGF5ZXItPnBsYXRmb3JtTGF5ZXIo
KSk7CisgICAgQVNTRVJUX1RSVUUobV9wbGF0Zm9ybUxheWVyKTsKKworICAgIEFTU0VSVF9GQUxT
RShtX3BsYXRmb3JtTGF5ZXItPmhhc0FjdGl2ZUFuaW1hdGlvbigpKTsKK30KKworVEVTVF9GKEdy
YXBoaWNzTGF5ZXJDaHJvbWl1bVRlc3QsIGNyZWF0ZU9wYWNpdHlBbmltYXRpb24pCit7CisgICAg
Y29uc3QgZG91YmxlIGR1cmF0aW9uID0gMTsKKyAgICBXZWJDb3JlOjpLZXlmcmFtZVZhbHVlTGlz
dCB2YWx1ZXMoQW5pbWF0ZWRQcm9wZXJ0eU9wYWNpdHkpOworICAgIHZhbHVlcy5pbnNlcnQobmV3
IEZsb2F0QW5pbWF0aW9uVmFsdWUoMCwgMCkpOworICAgIHZhbHVlcy5pbnNlcnQobmV3IEZsb2F0
QW5pbWF0aW9uVmFsdWUoZHVyYXRpb24sIDEpKTsKKworICAgIFJlZlB0cjxBbmltYXRpb24+IGFu
aW1hdGlvbiA9IEFuaW1hdGlvbjo6Y3JlYXRlKCk7CisgICAgYW5pbWF0aW9uLT5zZXREdXJhdGlv
bihkdXJhdGlvbik7CisKKyAgICBJbnRTaXplIGJveFNpemU7CisgICAgYm9vbCBhZGRlZEFuaW1h
dGlvbiA9IG1fZ3JhcGhpY3NMYXllci0+YWRkQW5pbWF0aW9uKHZhbHVlcywgYm94U2l6ZSwgYW5p
bWF0aW9uLmdldCgpLCAiIiwgMCk7CisKKyAgICBFWFBFQ1RfVFJVRShhZGRlZEFuaW1hdGlvbik7
CisKKyAgICBFWFBFQ1RfVFJVRShtX3BsYXRmb3JtTGF5ZXItPmxheWVyQW5pbWF0aW9uQ29udHJv
bGxlcigpLT5oYXNBY3RpdmVBbmltYXRpb24oKSk7CisKKyAgICBDQ0FjdGl2ZUFuaW1hdGlvbiog
YWN0aXZlQW5pbWF0aW9uID0gbV9wbGF0Zm9ybUxheWVyLT5sYXllckFuaW1hdGlvbkNvbnRyb2xs
ZXIoKS0+Z2V0QWN0aXZlQW5pbWF0aW9uKENDQWN0aXZlQW5pbWF0aW9uOjpPcGFjaXR5KTsKKyAg
ICBFWFBFQ1RfVFJVRShhY3RpdmVBbmltYXRpb24pOworCisgICAgRVhQRUNUX0VRKDEsIGFjdGl2
ZUFuaW1hdGlvbi0+aXRlcmF0aW9ucygpKTsKKyAgICBFWFBFQ1RfRVEoQ0NBY3RpdmVBbmltYXRp
b246Ok9wYWNpdHksIGFjdGl2ZUFuaW1hdGlvbi0+dGFyZ2V0UHJvcGVydHkoKSk7CisKKyAgICBF
WFBFQ1RfRVEoQ0NBbmltYXRpb25DdXJ2ZTo6RmxvYXQsIGFjdGl2ZUFuaW1hdGlvbi0+Y3VydmUo
KS0+dHlwZSgpKTsKKworICAgIGNvbnN0IENDRmxvYXRBbmltYXRpb25DdXJ2ZSogY3VydmUgPSBh
Y3RpdmVBbmltYXRpb24tPmN1cnZlKCktPnRvRmxvYXRBbmltYXRpb25DdXJ2ZSgpOworICAgIEVY
UEVDVF9UUlVFKGN1cnZlKTsKKworICAgIEVYUEVDVF9FUSgwLCBjdXJ2ZS0+Z2V0VmFsdWUoMCkp
OworICAgIEVYUEVDVF9FUSgxLCBjdXJ2ZS0+Z2V0VmFsdWUoZHVyYXRpb24pKTsKK30KKworVEVT
VF9GKEdyYXBoaWNzTGF5ZXJDaHJvbWl1bVRlc3QsIGNyZWF0ZVRyYW5zZm9ybUFuaW1hdGlvbikK
K3sKKyAgICBjb25zdCBkb3VibGUgZHVyYXRpb24gPSAxOworICAgIFdlYkNvcmU6OktleWZyYW1l
VmFsdWVMaXN0IHZhbHVlcyhBbmltYXRlZFByb3BlcnR5V2Via2l0VHJhbnNmb3JtKTsKKworICAg
IFRyYW5zZm9ybU9wZXJhdGlvbnMgb3BlcmF0aW9uczE7CisgICAgb3BlcmF0aW9uczEub3BlcmF0
aW9ucygpLmFwcGVuZChUcmFuc2xhdGVUcmFuc2Zvcm1PcGVyYXRpb246OmNyZWF0ZShMZW5ndGgo
MiwgRml4ZWQpLCBMZW5ndGgoMCwgRml4ZWQpLCBUcmFuc2Zvcm1PcGVyYXRpb246OlRSQU5TTEFU
RV9YKSk7CisgICAgdmFsdWVzLmluc2VydChuZXcgVHJhbnNmb3JtQW5pbWF0aW9uVmFsdWUoMCwg
Jm9wZXJhdGlvbnMxKSk7CisKKyAgICBUcmFuc2Zvcm1PcGVyYXRpb25zIG9wZXJhdGlvbnMyOwor
ICAgIG9wZXJhdGlvbnMyLm9wZXJhdGlvbnMoKS5hcHBlbmQoVHJhbnNsYXRlVHJhbnNmb3JtT3Bl
cmF0aW9uOjpjcmVhdGUoTGVuZ3RoKDQsIEZpeGVkKSwgTGVuZ3RoKDAsIEZpeGVkKSwgVHJhbnNm
b3JtT3BlcmF0aW9uOjpUUkFOU0xBVEVfWCkpOworICAgIHZhbHVlcy5pbnNlcnQobmV3IFRyYW5z
Zm9ybUFuaW1hdGlvblZhbHVlKGR1cmF0aW9uLCAmb3BlcmF0aW9uczIpKTsKKworICAgIFJlZlB0
cjxBbmltYXRpb24+IGFuaW1hdGlvbiA9IEFuaW1hdGlvbjo6Y3JlYXRlKCk7CisgICAgYW5pbWF0
aW9uLT5zZXREdXJhdGlvbihkdXJhdGlvbik7CisKKyAgICBJbnRTaXplIGJveFNpemU7CisgICAg
bV9ncmFwaGljc0xheWVyLT5hZGRBbmltYXRpb24odmFsdWVzLCBib3hTaXplLCBhbmltYXRpb24u
Z2V0KCksICIiLCAwKTsKKworICAgIEVYUEVDVF9UUlVFKG1fcGxhdGZvcm1MYXllci0+bGF5ZXJB
bmltYXRpb25Db250cm9sbGVyKCktPmhhc0FjdGl2ZUFuaW1hdGlvbigpKTsKKworICAgIENDQWN0
aXZlQW5pbWF0aW9uKiBhY3RpdmVBbmltYXRpb24gPSBtX3BsYXRmb3JtTGF5ZXItPmxheWVyQW5p
bWF0aW9uQ29udHJvbGxlcigpLT5nZXRBY3RpdmVBbmltYXRpb24oQ0NBY3RpdmVBbmltYXRpb246
OlRyYW5zZm9ybSk7CisgICAgRVhQRUNUX1RSVUUoYWN0aXZlQW5pbWF0aW9uKTsKKworICAgIEVY
UEVDVF9FUSgxLCBhY3RpdmVBbmltYXRpb24tPml0ZXJhdGlvbnMoKSk7CisgICAgRVhQRUNUX0VR
KENDQWN0aXZlQW5pbWF0aW9uOjpUcmFuc2Zvcm0sIGFjdGl2ZUFuaW1hdGlvbi0+dGFyZ2V0UHJv
cGVydHkoKSk7CisKKyAgICBFWFBFQ1RfRVEoQ0NBbmltYXRpb25DdXJ2ZTo6VHJhbnNmb3JtLCBh
Y3RpdmVBbmltYXRpb24tPmN1cnZlKCktPnR5cGUoKSk7CisKKyAgICBjb25zdCBDQ1RyYW5zZm9y
bUFuaW1hdGlvbkN1cnZlKiBjdXJ2ZSA9IGFjdGl2ZUFuaW1hdGlvbi0+Y3VydmUoKS0+dG9UcmFu
c2Zvcm1BbmltYXRpb25DdXJ2ZSgpOworICAgIEVYUEVDVF9UUlVFKGN1cnZlKTsKKworICAgIGV4
cGVjdFRyYW5zbGF0ZVgoMiwgY3VydmUtPmdldFZhbHVlKDApKTsKKyAgICBleHBlY3RUcmFuc2xh
dGVYKDQsIGN1cnZlLT5nZXRWYWx1ZShkdXJhdGlvbikpOworfQorCitURVNUX0YoR3JhcGhpY3NM
YXllckNocm9taXVtVGVzdCwgY3JlYXRlVHJhbnNmb3JtQW5pbWF0aW9uV2l0aEJpZ1JvdGF0aW9u
KQoreworICAgIGNvbnN0IGRvdWJsZSBkdXJhdGlvbiA9IDE7CisgICAgV2ViQ29yZTo6S2V5ZnJh
bWVWYWx1ZUxpc3QgdmFsdWVzKEFuaW1hdGVkUHJvcGVydHlXZWJraXRUcmFuc2Zvcm0pOworCisg
ICAgVHJhbnNmb3JtT3BlcmF0aW9ucyBvcGVyYXRpb25zMTsKKyAgICBvcGVyYXRpb25zMS5vcGVy
YXRpb25zKCkuYXBwZW5kKFJvdGF0ZVRyYW5zZm9ybU9wZXJhdGlvbjo6Y3JlYXRlKDAsIFRyYW5z
Zm9ybU9wZXJhdGlvbjo6Uk9UQVRFKSk7CisgICAgdmFsdWVzLmluc2VydChuZXcgVHJhbnNmb3Jt
QW5pbWF0aW9uVmFsdWUoMCwgJm9wZXJhdGlvbnMxKSk7CisKKyAgICBUcmFuc2Zvcm1PcGVyYXRp
b25zIG9wZXJhdGlvbnMyOworICAgIG9wZXJhdGlvbnMyLm9wZXJhdGlvbnMoKS5hcHBlbmQoUm90
YXRlVHJhbnNmb3JtT3BlcmF0aW9uOjpjcmVhdGUoMjcwLCBUcmFuc2Zvcm1PcGVyYXRpb246OlJP
VEFURSkpOworICAgIHZhbHVlcy5pbnNlcnQobmV3IFRyYW5zZm9ybUFuaW1hdGlvblZhbHVlKGR1
cmF0aW9uLCAmb3BlcmF0aW9uczIpKTsKKworICAgIFJlZlB0cjxBbmltYXRpb24+IGFuaW1hdGlv
biA9IEFuaW1hdGlvbjo6Y3JlYXRlKCk7CisgICAgYW5pbWF0aW9uLT5zZXREdXJhdGlvbihkdXJh
dGlvbik7CisKKyAgICBJbnRTaXplIGJveFNpemU7CisgICAgbV9ncmFwaGljc0xheWVyLT5hZGRB
bmltYXRpb24odmFsdWVzLCBib3hTaXplLCBhbmltYXRpb24uZ2V0KCksICIiLCAwKTsKKworICAg
IEVYUEVDVF9GQUxTRShtX3BsYXRmb3JtTGF5ZXItPmxheWVyQW5pbWF0aW9uQ29udHJvbGxlcigp
LT5oYXNBY3RpdmVBbmltYXRpb24oKSk7Cit9CisKK1RFU1RfRihHcmFwaGljc0xheWVyQ2hyb21p
dW1UZXN0LCBjcmVhdGVUcmFuc2Zvcm1BbmltYXRpb25XaXRoU2luZ3VsYXJNYXRyaXgpCit7Cisg
ICAgY29uc3QgZG91YmxlIGR1cmF0aW9uID0gMTsKKyAgICBXZWJDb3JlOjpLZXlmcmFtZVZhbHVl
TGlzdCB2YWx1ZXMoQW5pbWF0ZWRQcm9wZXJ0eVdlYmtpdFRyYW5zZm9ybSk7CisKKyAgICBUcmFu
c2Zvcm1hdGlvbk1hdHJpeCBtYXRyaXgxOworICAgIFRyYW5zZm9ybU9wZXJhdGlvbnMgb3BlcmF0
aW9uczE7CisgICAgb3BlcmF0aW9uczEub3BlcmF0aW9ucygpLmFwcGVuZChNYXRyaXgzRFRyYW5z
Zm9ybU9wZXJhdGlvbjo6Y3JlYXRlKG1hdHJpeDEpKTsKKyAgICB2YWx1ZXMuaW5zZXJ0KG5ldyBU
cmFuc2Zvcm1BbmltYXRpb25WYWx1ZSgwLCAmb3BlcmF0aW9uczEpKTsKKworICAgIFRyYW5zZm9y
bWF0aW9uTWF0cml4IG1hdHJpeDI7CisgICAgbWF0cml4Mi5zZXRNMTEoMCk7CisgICAgVHJhbnNm
b3JtT3BlcmF0aW9ucyBvcGVyYXRpb25zMjsKKyAgICBvcGVyYXRpb25zMi5vcGVyYXRpb25zKCku
YXBwZW5kKE1hdHJpeDNEVHJhbnNmb3JtT3BlcmF0aW9uOjpjcmVhdGUobWF0cml4MikpOworICAg
IHZhbHVlcy5pbnNlcnQobmV3IFRyYW5zZm9ybUFuaW1hdGlvblZhbHVlKGR1cmF0aW9uLCAmb3Bl
cmF0aW9uczIpKTsKKworICAgIFJlZlB0cjxBbmltYXRpb24+IGFuaW1hdGlvbiA9IEFuaW1hdGlv
bjo6Y3JlYXRlKCk7CisgICAgYW5pbWF0aW9uLT5zZXREdXJhdGlvbihkdXJhdGlvbik7CisKKyAg
ICBJbnRTaXplIGJveFNpemU7CisgICAgbV9ncmFwaGljc0xheWVyLT5hZGRBbmltYXRpb24odmFs
dWVzLCBib3hTaXplLCBhbmltYXRpb24uZ2V0KCksICIiLCAwKTsKKworICAgIEVYUEVDVF9GQUxT
RShtX3BsYXRmb3JtTGF5ZXItPmxheWVyQW5pbWF0aW9uQ29udHJvbGxlcigpLT5oYXNBY3RpdmVB
bmltYXRpb24oKSk7Cit9CisKK1RFU1RfRihHcmFwaGljc0xheWVyQ2hyb21pdW1UZXN0LCBjcmVh
dGVSZXZlcnNlZEFuaW1hdGlvbikKK3sKKyAgICBjb25zdCBkb3VibGUgZHVyYXRpb24gPSAxOwor
ICAgIFdlYkNvcmU6OktleWZyYW1lVmFsdWVMaXN0IHZhbHVlcyhBbmltYXRlZFByb3BlcnR5V2Vi
a2l0VHJhbnNmb3JtKTsKKworICAgIFRyYW5zZm9ybU9wZXJhdGlvbnMgb3BlcmF0aW9uczE7Cisg
ICAgb3BlcmF0aW9uczEub3BlcmF0aW9ucygpLmFwcGVuZChUcmFuc2xhdGVUcmFuc2Zvcm1PcGVy
YXRpb246OmNyZWF0ZShMZW5ndGgoMiwgRml4ZWQpLCBMZW5ndGgoMCwgRml4ZWQpLCBUcmFuc2Zv
cm1PcGVyYXRpb246OlRSQU5TTEFURV9YKSk7CisgICAgdmFsdWVzLmluc2VydChuZXcgVHJhbnNm
b3JtQW5pbWF0aW9uVmFsdWUoMCwgJm9wZXJhdGlvbnMxKSk7CisKKyAgICBUcmFuc2Zvcm1PcGVy
YXRpb25zIG9wZXJhdGlvbnMyOworICAgIG9wZXJhdGlvbnMyLm9wZXJhdGlvbnMoKS5hcHBlbmQo
VHJhbnNsYXRlVHJhbnNmb3JtT3BlcmF0aW9uOjpjcmVhdGUoTGVuZ3RoKDQsIEZpeGVkKSwgTGVu
Z3RoKDAsIEZpeGVkKSwgVHJhbnNmb3JtT3BlcmF0aW9uOjpUUkFOU0xBVEVfWCkpOworICAgIHZh
bHVlcy5pbnNlcnQobmV3IFRyYW5zZm9ybUFuaW1hdGlvblZhbHVlKGR1cmF0aW9uLCAmb3BlcmF0
aW9uczIpKTsKKworICAgIFJlZlB0cjxBbmltYXRpb24+IGFuaW1hdGlvbiA9IEFuaW1hdGlvbjo6
Y3JlYXRlKCk7CisgICAgYW5pbWF0aW9uLT5zZXREdXJhdGlvbihkdXJhdGlvbik7CisgICAgYW5p
bWF0aW9uLT5zZXREaXJlY3Rpb24oQW5pbWF0aW9uOjpBbmltYXRpb25EaXJlY3Rpb25SZXZlcnNl
KTsKKworICAgIEludFNpemUgYm94U2l6ZTsKKyAgICBtX2dyYXBoaWNzTGF5ZXItPmFkZEFuaW1h
dGlvbih2YWx1ZXMsIGJveFNpemUsIGFuaW1hdGlvbi5nZXQoKSwgIiIsIDApOworCisgICAgRVhQ
RUNUX1RSVUUobV9wbGF0Zm9ybUxheWVyLT5sYXllckFuaW1hdGlvbkNvbnRyb2xsZXIoKS0+aGFz
QWN0aXZlQW5pbWF0aW9uKCkpOworCisgICAgQ0NBY3RpdmVBbmltYXRpb24qIGFjdGl2ZUFuaW1h
dGlvbiA9IG1fcGxhdGZvcm1MYXllci0+bGF5ZXJBbmltYXRpb25Db250cm9sbGVyKCktPmdldEFj
dGl2ZUFuaW1hdGlvbihDQ0FjdGl2ZUFuaW1hdGlvbjo6VHJhbnNmb3JtKTsKKyAgICBFWFBFQ1Rf
VFJVRShhY3RpdmVBbmltYXRpb24pOworCisgICAgRVhQRUNUX0VRKDEsIGFjdGl2ZUFuaW1hdGlv
bi0+aXRlcmF0aW9ucygpKTsKKyAgICBFWFBFQ1RfRVEoQ0NBY3RpdmVBbmltYXRpb246OlRyYW5z
Zm9ybSwgYWN0aXZlQW5pbWF0aW9uLT50YXJnZXRQcm9wZXJ0eSgpKTsKKworICAgIEVYUEVDVF9F
UShDQ0FuaW1hdGlvbkN1cnZlOjpUcmFuc2Zvcm0sIGFjdGl2ZUFuaW1hdGlvbi0+Y3VydmUoKS0+
dHlwZSgpKTsKKworICAgIGNvbnN0IENDVHJhbnNmb3JtQW5pbWF0aW9uQ3VydmUqIGN1cnZlID0g
YWN0aXZlQW5pbWF0aW9uLT5jdXJ2ZSgpLT50b1RyYW5zZm9ybUFuaW1hdGlvbkN1cnZlKCk7Cisg
ICAgRVhQRUNUX1RSVUUoY3VydmUpOworCisgICAgZXhwZWN0VHJhbnNsYXRlWCg0LCBjdXJ2ZS0+
Z2V0VmFsdWUoMCkpOworICAgIGV4cGVjdFRyYW5zbGF0ZVgoMiwgY3VydmUtPmdldFZhbHVlKGR1
cmF0aW9uKSk7Cit9CisKK1RFU1RfRihHcmFwaGljc0xheWVyQ2hyb21pdW1UZXN0LCBjcmVhdGVB
bHRlcm5hdGluZ0FuaW1hdGlvbikKK3sKKyAgICBjb25zdCBkb3VibGUgZHVyYXRpb24gPSAxOwor
ICAgIFdlYkNvcmU6OktleWZyYW1lVmFsdWVMaXN0IHZhbHVlcyhBbmltYXRlZFByb3BlcnR5V2Vi
a2l0VHJhbnNmb3JtKTsKKworICAgIFRyYW5zZm9ybU9wZXJhdGlvbnMgb3BlcmF0aW9uczE7Cisg
ICAgb3BlcmF0aW9uczEub3BlcmF0aW9ucygpLmFwcGVuZChUcmFuc2xhdGVUcmFuc2Zvcm1PcGVy
YXRpb246OmNyZWF0ZShMZW5ndGgoMiwgRml4ZWQpLCBMZW5ndGgoMCwgRml4ZWQpLCBUcmFuc2Zv
cm1PcGVyYXRpb246OlRSQU5TTEFURV9YKSk7CisgICAgdmFsdWVzLmluc2VydChuZXcgVHJhbnNm
b3JtQW5pbWF0aW9uVmFsdWUoMCwgJm9wZXJhdGlvbnMxKSk7CisKKyAgICBUcmFuc2Zvcm1PcGVy
YXRpb25zIG9wZXJhdGlvbnMyOworICAgIG9wZXJhdGlvbnMyLm9wZXJhdGlvbnMoKS5hcHBlbmQo
VHJhbnNsYXRlVHJhbnNmb3JtT3BlcmF0aW9uOjpjcmVhdGUoTGVuZ3RoKDQsIEZpeGVkKSwgTGVu
Z3RoKDAsIEZpeGVkKSwgVHJhbnNmb3JtT3BlcmF0aW9uOjpUUkFOU0xBVEVfWCkpOworICAgIHZh
bHVlcy5pbnNlcnQobmV3IFRyYW5zZm9ybUFuaW1hdGlvblZhbHVlKGR1cmF0aW9uLCAmb3BlcmF0
aW9uczIpKTsKKworICAgIFJlZlB0cjxBbmltYXRpb24+IGFuaW1hdGlvbiA9IEFuaW1hdGlvbjo6
Y3JlYXRlKCk7CisgICAgYW5pbWF0aW9uLT5zZXREdXJhdGlvbihkdXJhdGlvbik7CisgICAgYW5p
bWF0aW9uLT5zZXREaXJlY3Rpb24oQW5pbWF0aW9uOjpBbmltYXRpb25EaXJlY3Rpb25BbHRlcm5h
dGUpOworICAgIGFuaW1hdGlvbi0+c2V0SXRlcmF0aW9uQ291bnQoMik7CisKKyAgICBJbnRTaXpl
IGJveFNpemU7CisgICAgbV9ncmFwaGljc0xheWVyLT5hZGRBbmltYXRpb24odmFsdWVzLCBib3hT
aXplLCBhbmltYXRpb24uZ2V0KCksICIiLCAwKTsKKworICAgIEVYUEVDVF9UUlVFKG1fcGxhdGZv
cm1MYXllci0+bGF5ZXJBbmltYXRpb25Db250cm9sbGVyKCktPmhhc0FjdGl2ZUFuaW1hdGlvbigp
KTsKKworICAgIENDQWN0aXZlQW5pbWF0aW9uKiBhY3RpdmVBbmltYXRpb24gPSBtX3BsYXRmb3Jt
TGF5ZXItPmxheWVyQW5pbWF0aW9uQ29udHJvbGxlcigpLT5nZXRBY3RpdmVBbmltYXRpb24oQ0NB
Y3RpdmVBbmltYXRpb246OlRyYW5zZm9ybSk7CisgICAgRVhQRUNUX1RSVUUoYWN0aXZlQW5pbWF0
aW9uKTsKKyAgICBFWFBFQ1RfVFJVRShhY3RpdmVBbmltYXRpb24tPmFsdGVybmF0ZXNEaXJlY3Rp
b24oKSk7CisKKyAgICBFWFBFQ1RfRVEoMiwgYWN0aXZlQW5pbWF0aW9uLT5pdGVyYXRpb25zKCkp
OworICAgIEVYUEVDVF9FUShDQ0FjdGl2ZUFuaW1hdGlvbjo6VHJhbnNmb3JtLCBhY3RpdmVBbmlt
YXRpb24tPnRhcmdldFByb3BlcnR5KCkpOworCisgICAgRVhQRUNUX0VRKENDQW5pbWF0aW9uQ3Vy
dmU6OlRyYW5zZm9ybSwgYWN0aXZlQW5pbWF0aW9uLT5jdXJ2ZSgpLT50eXBlKCkpOworCisgICAg
Y29uc3QgQ0NUcmFuc2Zvcm1BbmltYXRpb25DdXJ2ZSogY3VydmUgPSBhY3RpdmVBbmltYXRpb24t
PmN1cnZlKCktPnRvVHJhbnNmb3JtQW5pbWF0aW9uQ3VydmUoKTsKKyAgICBFWFBFQ1RfVFJVRShj
dXJ2ZSk7CisKKyAgICBleHBlY3RUcmFuc2xhdGVYKDIsIGN1cnZlLT5nZXRWYWx1ZSgwKSk7Cisg
ICAgZXhwZWN0VHJhbnNsYXRlWCg0LCBjdXJ2ZS0+Z2V0VmFsdWUoZHVyYXRpb24pKTsKK30KKwor
VEVTVF9GKEdyYXBoaWNzTGF5ZXJDaHJvbWl1bVRlc3QsIGNyZWF0ZVJldmVyc2VkQWx0ZXJuYXRp
bmdBbmltYXRpb24pCit7CisgICAgY29uc3QgZG91YmxlIGR1cmF0aW9uID0gMTsKKyAgICBXZWJD
b3JlOjpLZXlmcmFtZVZhbHVlTGlzdCB2YWx1ZXMoQW5pbWF0ZWRQcm9wZXJ0eVdlYmtpdFRyYW5z
Zm9ybSk7CisKKyAgICBUcmFuc2Zvcm1PcGVyYXRpb25zIG9wZXJhdGlvbnMxOworICAgIG9wZXJh
dGlvbnMxLm9wZXJhdGlvbnMoKS5hcHBlbmQoVHJhbnNsYXRlVHJhbnNmb3JtT3BlcmF0aW9uOjpj
cmVhdGUoTGVuZ3RoKDIsIEZpeGVkKSwgTGVuZ3RoKDAsIEZpeGVkKSwgVHJhbnNmb3JtT3BlcmF0
aW9uOjpUUkFOU0xBVEVfWCkpOworICAgIHZhbHVlcy5pbnNlcnQobmV3IFRyYW5zZm9ybUFuaW1h
dGlvblZhbHVlKDAsICZvcGVyYXRpb25zMSkpOworCisgICAgVHJhbnNmb3JtT3BlcmF0aW9ucyBv
cGVyYXRpb25zMjsKKyAgICBvcGVyYXRpb25zMi5vcGVyYXRpb25zKCkuYXBwZW5kKFRyYW5zbGF0
ZVRyYW5zZm9ybU9wZXJhdGlvbjo6Y3JlYXRlKExlbmd0aCg0LCBGaXhlZCksIExlbmd0aCgwLCBG
aXhlZCksIFRyYW5zZm9ybU9wZXJhdGlvbjo6VFJBTlNMQVRFX1gpKTsKKyAgICB2YWx1ZXMuaW5z
ZXJ0KG5ldyBUcmFuc2Zvcm1BbmltYXRpb25WYWx1ZShkdXJhdGlvbiwgJm9wZXJhdGlvbnMyKSk7
CisKKyAgICBSZWZQdHI8QW5pbWF0aW9uPiBhbmltYXRpb24gPSBBbmltYXRpb246OmNyZWF0ZSgp
OworICAgIGFuaW1hdGlvbi0+c2V0RHVyYXRpb24oZHVyYXRpb24pOworICAgIGFuaW1hdGlvbi0+
c2V0RGlyZWN0aW9uKEFuaW1hdGlvbjo6QW5pbWF0aW9uRGlyZWN0aW9uQWx0ZXJuYXRlUmV2ZXJz
ZSk7CisgICAgYW5pbWF0aW9uLT5zZXRJdGVyYXRpb25Db3VudCgyKTsKIAotICAgIEFTU0VSVF9U
UlVFKHBsYXRmb3JtTGF5ZXItPmhhc0FjdGl2ZUFuaW1hdGlvbigpKTsKKyAgICBJbnRTaXplIGJv
eFNpemU7CisgICAgbV9ncmFwaGljc0xheWVyLT5hZGRBbmltYXRpb24odmFsdWVzLCBib3hTaXpl
LCBhbmltYXRpb24uZ2V0KCksICIiLCAwKTsKIAotICAgIGdyYXBoaWNzTGF5ZXItPnNldFByZXNl
cnZlczNEKHRydWUpOworICAgIEVYUEVDVF9UUlVFKG1fcGxhdGZvcm1MYXllci0+bGF5ZXJBbmlt
YXRpb25Db250cm9sbGVyKCktPmhhc0FjdGl2ZUFuaW1hdGlvbigpKTsKIAotICAgIHBsYXRmb3Jt
TGF5ZXIgPSBzdGF0aWNfY2FzdDxMYXllckNocm9taXVtKj4oZ3JhcGhpY3NMYXllci0+cGxhdGZv
cm1MYXllcigpKTsKLSAgICBBU1NFUlRfVFJVRShwbGF0Zm9ybUxheWVyKTsKKyAgICBDQ0FjdGl2
ZUFuaW1hdGlvbiogYWN0aXZlQW5pbWF0aW9uID0gbV9wbGF0Zm9ybUxheWVyLT5sYXllckFuaW1h
dGlvbkNvbnRyb2xsZXIoKS0+Z2V0QWN0aXZlQW5pbWF0aW9uKENDQWN0aXZlQW5pbWF0aW9uOjpU
cmFuc2Zvcm0pOworICAgIEVYUEVDVF9UUlVFKGFjdGl2ZUFuaW1hdGlvbik7CisgICAgRVhQRUNU
X1RSVUUoYWN0aXZlQW5pbWF0aW9uLT5hbHRlcm5hdGVzRGlyZWN0aW9uKCkpOwogCi0gICAgQVNT
RVJUX1RSVUUocGxhdGZvcm1MYXllci0+aGFzQWN0aXZlQW5pbWF0aW9uKCkpOwotICAgIHBsYXRm
b3JtTGF5ZXItPnJlbW92ZUFuaW1hdGlvbigwKTsKLSAgICBBU1NFUlRfRkFMU0UocGxhdGZvcm1M
YXllci0+aGFzQWN0aXZlQW5pbWF0aW9uKCkpOworICAgIEVYUEVDVF9FUSgyLCBhY3RpdmVBbmlt
YXRpb24tPml0ZXJhdGlvbnMoKSk7CisgICAgRVhQRUNUX0VRKENDQWN0aXZlQW5pbWF0aW9uOjpU
cmFuc2Zvcm0sIGFjdGl2ZUFuaW1hdGlvbi0+dGFyZ2V0UHJvcGVydHkoKSk7CiAKLSAgICBncmFw
aGljc0xheWVyLT5zZXRQcmVzZXJ2ZXMzRChmYWxzZSk7CisgICAgRVhQRUNUX0VRKENDQW5pbWF0
aW9uQ3VydmU6OlRyYW5zZm9ybSwgYWN0aXZlQW5pbWF0aW9uLT5jdXJ2ZSgpLT50eXBlKCkpOwog
Ci0gICAgcGxhdGZvcm1MYXllciA9IHN0YXRpY19jYXN0PExheWVyQ2hyb21pdW0qPihncmFwaGlj
c0xheWVyLT5wbGF0Zm9ybUxheWVyKCkpOwotICAgIEFTU0VSVF9UUlVFKHBsYXRmb3JtTGF5ZXIp
OworICAgIGNvbnN0IENDVHJhbnNmb3JtQW5pbWF0aW9uQ3VydmUqIGN1cnZlID0gYWN0aXZlQW5p
bWF0aW9uLT5jdXJ2ZSgpLT50b1RyYW5zZm9ybUFuaW1hdGlvbkN1cnZlKCk7CisgICAgRVhQRUNU
X1RSVUUoY3VydmUpOwogCi0gICAgQVNTRVJUX0ZBTFNFKHBsYXRmb3JtTGF5ZXItPmhhc0FjdGl2
ZUFuaW1hdGlvbigpKTsKKyAgICBleHBlY3RUcmFuc2xhdGVYKDQsIGN1cnZlLT5nZXRWYWx1ZSgw
KSk7CisgICAgZXhwZWN0VHJhbnNsYXRlWCgyLCBjdXJ2ZS0+Z2V0VmFsdWUoZHVyYXRpb24pKTsK
IH0KIAogfSAvLyBuYW1lc3BhY2UK
</data>

          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>145330</attachid>
            <date>2012-06-01 09:53:21 -0700</date>
            <delta_ts>2012-06-05 17:22:27 -0700</delta_ts>
            <desc>Patch</desc>
            <filename>bug-87686-20120601125319.patch</filename>
            <type>text/plain</type>
            <size>100617</size>
            <attacher>vollick</attacher>
            
              <data encoding="base64">U3VidmVyc2lvbiBSZXZpc2lvbjogMTE5MjE5CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9D
aGFuZ2VMb2cgYi9Tb3VyY2UvV2ViQ29yZS9DaGFuZ2VMb2cKaW5kZXggMTk5MzBlM2EzNjQ3Y2I3
NTI4MGI3OWQ5YzIwYTFkOWIzMTI1ZDU3ZS4uNWRmM2FhOWNmNmY1OTk1NzY3YzdhODljN2YzZjYz
ZGM2ZDY5OWUyYyAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvQ2hhbmdlTG9nCisrKyBiL1Nv
dXJjZS9XZWJDb3JlL0NoYW5nZUxvZwpAQCAtMSwzICsxLDY4IEBACisyMDEyLTA1LTMxICBJYW4g
Vm9sbGljayAgPHZvbGxpY2tAY2hyb21pdW0ub3JnPgorCisgICAgICAgIFtjaHJvbWl1bV0gQWNj
ZWxlcmF0ZWQgYW5pbWF0aW9ucyBzaG91bGQgdXNlIFdlYlRyYW5zZm9ybU9wZXJhdGlvbnMKKyAg
ICAgICAgaHR0cHM6Ly9idWdzLndlYmtpdC5vcmcvc2hvd19idWcuY2dpP2lkPTg3Njg2CisKKyAg
ICAgICAgUmV2aWV3ZWQgYnkgSmFtZXMgUm9iaW5zb24uCisKKyAgICAgICAgQ0NUcmFuc2Zvcm1L
ZXlmcmFtZSBuZXcgb3ducyBhIFdlYlRyYW5zZm9ybU9wZXJhdGlvbnMgcmF0aGVyIHRoYW4gYQor
ICAgICAgICBUcmFuc2Zvcm1PcGVyYXRpb25zLiBMYXllckNocm9taXVtJ3MgQVBJIGhhcyBiZWVu
IGNoYW5nZWQgc28gdGhhdAorICAgICAgICBMYXllckNocm9taXVtOjphZGRBbmltYXRpb24gc2hv
dWxkIHRha2Ugb25seSBhIENDQWN0aXZlQW5pbWF0aW9uLgorICAgICAgICBHcmFwaGljc0xheWVy
Q2hyb21pdW0gaXMgbmV3IHJlc3BvbnNpYmxlIGZvciB0cmFuc2xhdGluZyB0bworICAgICAgICBX
ZWJUcmFuc2Zvcm1PcGVyYXRpb25zIGFuZCBjcmVhdGluZyBDQ0FjdGl2ZUFuaW1hdGlvbnMuIFRl
c3RzIHRoYXQgdXNlCisgICAgICAgIHRoZSBwdWJsaWMgQVBJICh0aGF0IGlzLCB0aGV5IGNhbGwg
YWRkQW5pbWF0aW9uIHdpdGggS2V5ZnJhbWVWYWx1ZUxpc3QKKyAgICAgICAgYW5kIEFuaW1hdGlv
biBhcmd1bWVudHMpIGhhdmUgYmVlbiBtb3ZlZCB0byBHcmFwaGljc0xheWVyQ2hyb21pdW1UZXN0
LgorCisgICAgICAgIFVuaXQgdGVzdHM6CisgICAgICAgICAgICBHcmFwaGljc0xheWVyQ2hyb21p
dW1UZXN0LmNyZWF0ZU9wYWNpdHlBbmltYXRpb24KKyAgICAgICAgICAgIEdyYXBoaWNzTGF5ZXJD
aHJvbWl1bVRlc3QuY3JlYXRlVHJhbnNmb3JtQW5pbWF0aW9uCisgICAgICAgICAgICBHcmFwaGlj
c0xheWVyQ2hyb21pdW1UZXN0LmNyZWF0ZVRyYW5zZm9ybUFuaW1hdGlvbldpdGhCaWdSb3RhdGlv
bgorICAgICAgICAgICAgR3JhcGhpY3NMYXllckNocm9taXVtVGVzdC5jcmVhdGVUcmFuc2Zvcm1B
bmltYXRpb25XaXRoU2luZ3VsYXJNYXRyaXgKKyAgICAgICAgICAgIEdyYXBoaWNzTGF5ZXJDaHJv
bWl1bVRlc3QuY3JlYXRlUmV2ZXJzZWRBbmltYXRpb24KKyAgICAgICAgICAgIEdyYXBoaWNzTGF5
ZXJDaHJvbWl1bVRlc3QuY3JlYXRlQWx0ZXJuYXRpbmdBbmltYXRpb24KKyAgICAgICAgICAgIEdy
YXBoaWNzTGF5ZXJDaHJvbWl1bVRlc3QuY3JlYXRlUmV2ZXJzZWRBbHRlcm5hdGluZ0FuaW1hdGlv
bgorCisgICAgICAgICogV2ViQ29yZS5neXBpOgorICAgICAgICAqIHBsYXRmb3JtL2dyYXBoaWNz
L2Nocm9taXVtL0FuaW1hdGlvblRyYW5zbGF0aW9uVXRpbC5jcHA6IEFkZGVkLgorICAgICAgICAo
V2ViQ29yZSk6CisgICAgICAgIChXZWJDb3JlOjp0b1dlYlRyYW5zZm9ybU9wZXJhdGlvbnMpOgor
ICAgICAgICAoV2ViQ29yZTo6YXBwZW5kS2V5ZnJhbWUpOgorICAgICAgICAoV2ViQ29yZTo6Q0NL
ZXlmcmFtZWRUcmFuc2Zvcm1BbmltYXRpb25DdXJ2ZSk6CisgICAgICAgIChXZWJDb3JlOjpjcmVh
dGVBY3RpdmVBbmltYXRpb24pOgorICAgICAgICAqIHBsYXRmb3JtL2dyYXBoaWNzL2Nocm9taXVt
L0FuaW1hdGlvblRyYW5zbGF0aW9uVXRpbC5oOiBBZGRlZC4KKyAgICAgICAgKFdlYkNvcmUpOgor
ICAgICAgICAqIHBsYXRmb3JtL2dyYXBoaWNzL2Nocm9taXVtL0dyYXBoaWNzTGF5ZXJDaHJvbWl1
bS5jcHA6CisgICAgICAgIChXZWJDb3JlOjpHcmFwaGljc0xheWVyQ2hyb21pdW06OmFkZEFuaW1h
dGlvbik6CisgICAgICAgICogcGxhdGZvcm0vZ3JhcGhpY3MvY2hyb21pdW0vTGF5ZXJDaHJvbWl1
bS5jcHA6CisgICAgICAgIChXZWJDb3JlOjpMYXllckNocm9taXVtOjphZGRBbmltYXRpb24pOgor
ICAgICAgICAqIHBsYXRmb3JtL2dyYXBoaWNzL2Nocm9taXVtL0xheWVyQ2hyb21pdW0uaDoKKyAg
ICAgICAgKFdlYkNvcmUpOgorICAgICAgICAoTGF5ZXJDaHJvbWl1bSk6CisgICAgICAgICogcGxh
dGZvcm0vZ3JhcGhpY3MvY2hyb21pdW0vTGlua0hpZ2hsaWdodC5jcHA6CisgICAgICAgIChXZWJD
b3JlOjpMaW5rSGlnaGxpZ2h0OjpMaW5rSGlnaGxpZ2h0KToKKyAgICAgICAgKiBwbGF0Zm9ybS9n
cmFwaGljcy9jaHJvbWl1bS9jYy9DQ0FuaW1hdGlvbkN1cnZlLmg6CisgICAgICAgIChDQ1RyYW5z
Zm9ybUFuaW1hdGlvbkN1cnZlKToKKyAgICAgICAgKiBwbGF0Zm9ybS9ncmFwaGljcy9jaHJvbWl1
bS9jYy9DQ0tleWZyYW1lZEFuaW1hdGlvbkN1cnZlLmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OkND
VHJhbnNmb3JtS2V5ZnJhbWU6OmNyZWF0ZSk6CisgICAgICAgIChXZWJDb3JlOjpDQ1RyYW5zZm9y
bUtleWZyYW1lOjpDQ1RyYW5zZm9ybUtleWZyYW1lKToKKyAgICAgICAgKFdlYkNvcmU6OkNDVHJh
bnNmb3JtS2V5ZnJhbWU6OnZhbHVlKToKKyAgICAgICAgKFdlYkNvcmU6OkNDVHJhbnNmb3JtS2V5
ZnJhbWU6OmNsb25lKToKKyAgICAgICAgKFdlYkNvcmU6OkNDS2V5ZnJhbWVkVHJhbnNmb3JtQW5p
bWF0aW9uQ3VydmU6OmdldFZhbHVlKToKKyAgICAgICAgKiBwbGF0Zm9ybS9ncmFwaGljcy9jaHJv
bWl1bS9jYy9DQ0tleWZyYW1lZEFuaW1hdGlvbkN1cnZlLmg6CisgICAgICAgIChDQ1RyYW5zZm9y
bUtleWZyYW1lKToKKyAgICAgICAgKENDS2V5ZnJhbWVkVHJhbnNmb3JtQW5pbWF0aW9uQ3VydmUp
OgorICAgICAgICAqIHBsYXRmb3JtL2dyYXBoaWNzL2Nocm9taXVtL2NjL0NDTGF5ZXJBbmltYXRp
b25Db250cm9sbGVyLmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OkNDTGF5ZXJBbmltYXRpb25Db250
cm9sbGVyOjpyZW1vdmVBbmltYXRpb24pOgorICAgICAgICAoV2ViQ29yZSk6CisgICAgICAgIChX
ZWJDb3JlOjpDQ0xheWVyQW5pbWF0aW9uQ29udHJvbGxlcjo6YWRkQW5pbWF0aW9uKToKKyAgICAg
ICAgKFdlYkNvcmU6OkNDTGF5ZXJBbmltYXRpb25Db250cm9sbGVyOjpnZXRBY3RpdmVBbmltYXRp
b24pOgorICAgICAgICAoV2ViQ29yZTo6Q0NMYXllckFuaW1hdGlvbkNvbnRyb2xsZXI6OnB1c2hO
ZXdBbmltYXRpb25zVG9JbXBsVGhyZWFkKToKKyAgICAgICAgKFdlYkNvcmU6OkNDTGF5ZXJBbmlt
YXRpb25Db250cm9sbGVyOjpyZXBsYWNlSW1wbFRocmVhZEFuaW1hdGlvbnMpOgorICAgICAgICAo
V2ViQ29yZTo6Q0NMYXllckFuaW1hdGlvbkNvbnRyb2xsZXI6OnRpY2tBbmltYXRpb25zKToKKyAg
ICAgICAgKiBwbGF0Zm9ybS9ncmFwaGljcy9jaHJvbWl1bS9jYy9DQ0xheWVyQW5pbWF0aW9uQ29u
dHJvbGxlci5oOgorICAgICAgICAoQ0NMYXllckFuaW1hdGlvbkNvbnRyb2xsZXJDbGllbnQpOgor
ICAgICAgICAoQ0NMYXllckFuaW1hdGlvbkNvbnRyb2xsZXIpOgorCiAyMDEyLTA2LTAxICBNT1JJ
VEEgSGFqaW1lICA8bW9ycml0YUBnb29nbGUuY29tPgogCiAgICAgICAgIEZyYW1lOjp3aWxsRGV0
YWNoUGFnZSgpIHNob3VsZG4ndCBiZSBjYWxsZWQgbW9yZSB0aGFuIG9uY2UuCmRpZmYgLS1naXQg
YS9Tb3VyY2UvV2ViS2l0L2Nocm9taXVtL0NoYW5nZUxvZyBiL1NvdXJjZS9XZWJLaXQvY2hyb21p
dW0vQ2hhbmdlTG9nCmluZGV4IDkzNjFhNDg1YjhmYjUxZDBiZTcwYjhhZDdmZTg1ZDZlNTM1NGU0
NjAuLmFiZTIzNGZjOTJhYjhlYTViYTY3NzZmYTRkZTY3ZjQxZGQ4NDQ5NDggMTAwNjQ0Ci0tLSBh
L1NvdXJjZS9XZWJLaXQvY2hyb21pdW0vQ2hhbmdlTG9nCisrKyBiL1NvdXJjZS9XZWJLaXQvY2hy
b21pdW0vQ2hhbmdlTG9nCkBAIC0xLDMgKzEsNDIgQEAKKzIwMTItMDUtMzEgIElhbiBWb2xsaWNr
ICA8dm9sbGlja0BjaHJvbWl1bS5vcmc+CisKKyAgICAgICAgW2Nocm9taXVtXSBBY2NlbGVyYXRl
ZCBhbmltYXRpb25zIHNob3VsZCB1c2UgV2ViVHJhbnNmb3JtT3BlcmF0aW9ucworICAgICAgICBo
dHRwczovL2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9ODc2ODYKKworICAgICAgICBS
ZXZpZXdlZCBieSBKYW1lcyBSb2JpbnNvbi4KKworICAgICAgICBDQ1RyYW5zZm9ybUtleWZyYW1l
IG5ldyBvd25zIGEgV2ViVHJhbnNmb3JtT3BlcmF0aW9ucyByYXRoZXIgdGhhbiBhCisgICAgICAg
IFRyYW5zZm9ybU9wZXJhdGlvbnMuIExheWVyQ2hyb21pdW0ncyBBUEkgaGFzIGJlZW4gY2hhbmdl
ZCBzbyB0aGF0CisgICAgICAgIExheWVyQ2hyb21pdW06OmFkZEFuaW1hdGlvbiBzaG91bGQgdGFr
ZSBvbmx5IGEgQ0NBY3RpdmVBbmltYXRpb24uCisgICAgICAgIEdyYXBoaWNzTGF5ZXJDaHJvbWl1
bSBpcyBuZXcgcmVzcG9uc2libGUgZm9yIHRyYW5zbGF0aW5nIHRvCisgICAgICAgIFdlYlRyYW5z
Zm9ybU9wZXJhdGlvbnMgYW5kIGNyZWF0aW5nIENDQWN0aXZlQW5pbWF0aW9ucy4gVGVzdHMgdGhh
dCB1c2UKKyAgICAgICAgdGhlIHB1YmxpYyBBUEkgKHRoYXQgaXMsIHRoZXkgY2FsbCBhZGRBbmlt
YXRpb24gd2l0aCBLZXlmcmFtZVZhbHVlTGlzdAorICAgICAgICBhbmQgQW5pbWF0aW9uIGFyZ3Vt
ZW50cykgaGF2ZSBiZWVuIG1vdmVkIHRvIEdyYXBoaWNzTGF5ZXJDaHJvbWl1bVRlc3QuCisKKyAg
ICAgICAgKiB0ZXN0cy9DQ0FuaW1hdGlvblRlc3RDb21tb24uY3BwOgorICAgICAgICAoV2ViQ29y
ZTo6YWRkT3BhY2l0eVRyYW5zaXRpb24pOgorICAgICAgICAoV2ViQ29yZTo6YWRkQW5pbWF0ZWRU
cmFuc2Zvcm0pOgorICAgICAgICAoV2ViS2l0VGVzdHM6OkZha2VUcmFuc2Zvcm1UcmFuc2l0aW9u
OjpnZXRWYWx1ZSk6CisgICAgICAgICogdGVzdHMvQ0NBbmltYXRpb25UZXN0Q29tbW9uLmg6Cisg
ICAgICAgICogdGVzdHMvQ0NLZXlmcmFtZWRBbmltYXRpb25DdXJ2ZVRlc3QuY3BwOgorICAgICAg
ICAoV2ViQ29yZTo6VEVTVCk6CisgICAgICAgICogdGVzdHMvQ0NMYXllckFuaW1hdGlvbkNvbnRy
b2xsZXJUZXN0LmNwcDoKKyAgICAgICAgKFdlYktpdFRlc3RzOjpURVNUKToKKyAgICAgICAgKiB0
ZXN0cy9DQ0xheWVyVHJlZUhvc3RUZXN0LmNwcDoKKyAgICAgICAgKFdURjo6Q0NMYXllclRyZWVI
b3N0VGVzdExheWVyQWRkZWRXaXRoQW5pbWF0aW9uOjpiZWdpblRlc3QpOgorICAgICAgICAqIHRl
c3RzL0dyYXBoaWNzTGF5ZXJDaHJvbWl1bVRlc3QuY3BwOgorICAgICAgICAoTW9ja0xheWVyVHJl
ZUhvc3RDbGllbnQpOgorICAgICAgICAoV2ViS2l0VGVzdHMpOgorICAgICAgICAoTW9ja0xheWVy
VHJlZUhvc3QpOgorICAgICAgICAoV2ViS2l0VGVzdHM6Ok1vY2tMYXllclRyZWVIb3N0OjpjcmVh
dGUpOgorICAgICAgICAoV2ViS2l0VGVzdHM6Ok1vY2tMYXllclRyZWVIb3N0OjpjcmVhdGVMYXll
clRyZWVIb3N0SW1wbCk6CisgICAgICAgIChXZWJLaXRUZXN0czo6TW9ja0xheWVyVHJlZUhvc3Q6
Ok1vY2tMYXllclRyZWVIb3N0KToKKyAgICAgICAgKEdyYXBoaWNzTGF5ZXJDaHJvbWl1bVRlc3Qp
OgorICAgICAgICAoV2ViS2l0VGVzdHM6OkdyYXBoaWNzTGF5ZXJDaHJvbWl1bVRlc3Q6OkdyYXBo
aWNzTGF5ZXJDaHJvbWl1bVRlc3QpOgorICAgICAgICAoV2ViS2l0VGVzdHM6OkdyYXBoaWNzTGF5
ZXJDaHJvbWl1bVRlc3Q6On5HcmFwaGljc0xheWVyQ2hyb21pdW1UZXN0KToKKyAgICAgICAgKFdl
YktpdFRlc3RzOjpHcmFwaGljc0xheWVyQ2hyb21pdW1UZXN0OjpleHBlY3RUcmFuc2xhdGVYKToK
KyAgICAgICAgKFdlYktpdFRlc3RzOjpURVNUX0YpOgorCiAyMDEyLTA2LTAxICBQZXRlciBCZXZl
cmxvbyAgPHBldGVyQGNocm9taXVtLm9yZz4KIAogICAgICAgICBVbnJldmlld2VkLiAgUm9sbGVk
IERFUFMuCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9XZWJDb3JlLmd5cGkgYi9Tb3VyY2Uv
V2ViQ29yZS9XZWJDb3JlLmd5cGkKaW5kZXggMThhNTE0ZjI1MzMxMTMyMzI0NDM4YTNhMWIxNzgz
MzA2MDk5ZDZmNy4uMzQ4NGE3MjA1OWQ3ZGJkNTRhNzM0Njk0YzNmZTZlOTI1YmIzZWI1NSAxMDA2
NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvV2ViQ29yZS5neXBpCisrKyBiL1NvdXJjZS9XZWJDb3Jl
L1dlYkNvcmUuZ3lwaQpAQCAtMzU2NCw2ICszNTY0LDggQEAKICAgICAgICAgICAgICdwbGF0Zm9y
bS9ncmFwaGljcy9jZy9UcmFuc2Zvcm1hdGlvbk1hdHJpeENHLmNwcCcsCiAgICAgICAgICAgICAn
cGxhdGZvcm0vZ3JhcGhpY3MvY2hyb21pdW0vQW5pbWF0aW9uSWRWZW5kb3IuY3BwJywKICAgICAg
ICAgICAgICdwbGF0Zm9ybS9ncmFwaGljcy9jaHJvbWl1bS9BbmltYXRpb25JZFZlbmRvci5oJywK
KyAgICAgICAgICAgICdwbGF0Zm9ybS9ncmFwaGljcy9jaHJvbWl1bS9BbmltYXRpb25UcmFuc2xh
dGlvblV0aWwuY3BwJywKKyAgICAgICAgICAgICdwbGF0Zm9ybS9ncmFwaGljcy9jaHJvbWl1bS9B
bmltYXRpb25UcmFuc2xhdGlvblV0aWwuaCcsCiAgICAgICAgICAgICAncGxhdGZvcm0vZ3JhcGhp
Y3MvY2hyb21pdW0vQml0bWFwQ2FudmFzTGF5ZXJUZXh0dXJlVXBkYXRlci5jcHAnLAogICAgICAg
ICAgICAgJ3BsYXRmb3JtL2dyYXBoaWNzL2Nocm9taXVtL0JpdG1hcENhbnZhc0xheWVyVGV4dHVy
ZVVwZGF0ZXIuaCcsCiAgICAgICAgICAgICAncGxhdGZvcm0vZ3JhcGhpY3MvY2hyb21pdW0vQml0
bWFwU2tQaWN0dXJlQ2FudmFzTGF5ZXJUZXh0dXJlVXBkYXRlci5jcHAnLApAQCAtNjY0Myw3ICs2
NjQ1LDcgQEAKICAgICAgICAgICAgICdpbnNwZWN0b3IvZnJvbnQtZW5kL0ltYWdlcy9zZWFyY2hT
bWFsbEdyYXkucG5nJywKICAgICAgICAgICAgICdpbnNwZWN0b3IvZnJvbnQtZW5kL0ltYWdlcy9z
ZWFyY2hTbWFsbFdoaXRlLnBuZycsCiAgICAgICAgICAgICAnaW5zcGVjdG9yL2Zyb250LWVuZC9J
bWFnZXMvc2VhcmNoTmV4dC5wbmcnLAotICAgICAgICAgICAgJ2luc3BlY3Rvci9mcm9udC1lbmQv
SW1hZ2VzL3NlYXJjaFByZXYucG5nJywgICAgICAgICAgICAKKyAgICAgICAgICAgICdpbnNwZWN0
b3IvZnJvbnQtZW5kL0ltYWdlcy9zZWFyY2hQcmV2LnBuZycsCiAgICAgICAgICAgICAnaW5zcGVj
dG9yL2Zyb250LWVuZC9JbWFnZXMvc2VnbWVudC5wbmcnLAogICAgICAgICAgICAgJ2luc3BlY3Rv
ci9mcm9udC1lbmQvSW1hZ2VzL3NlZ21lbnRFbmQucG5nJywKICAgICAgICAgICAgICdpbnNwZWN0
b3IvZnJvbnQtZW5kL0ltYWdlcy9zZWdtZW50SG92ZXIucG5nJywKZGlmZiAtLWdpdCBhL1NvdXJj
ZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2Nocm9taXVtL0FuaW1hdGlvblRyYW5zbGF0aW9u
VXRpbC5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9jaHJvbWl1bS9Bbmlt
YXRpb25UcmFuc2xhdGlvblV0aWwuY3BwCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAuLjA3ZWRiNmQ2YmEyMjkxMjE0ZTgw
NmMzMTM4OGU0OTZlNTE0ODJiMWYKLS0tIC9kZXYvbnVsbAorKysgYi9Tb3VyY2UvV2ViQ29yZS9w
bGF0Zm9ybS9ncmFwaGljcy9jaHJvbWl1bS9BbmltYXRpb25UcmFuc2xhdGlvblV0aWwuY3BwCkBA
IC0wLDAgKzEsMjM0IEBACisvKgorICogQ29weXJpZ2h0IChDKSAyMDEwIEdvb2dsZSBJbmMuIEFs
bCByaWdodHMgcmVzZXJ2ZWQuCisgKgorICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3Vy
Y2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CisgKiBtb2RpZmljYXRpb24sIGFy
ZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMgYXJlCisg
KiBtZXQ6CisgKgorICogICAgICogUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3Qg
cmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRp
dGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KKyAqICAgICAqIFJlZGlzdHJpYnV0
aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUKKyAqIGNvcHlyaWdo
dCBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2Ns
YWltZXIKKyAqIGluIHRoZSBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJv
dmlkZWQgd2l0aCB0aGUKKyAqIGRpc3RyaWJ1dGlvbi4KKyAqICAgICAqIE5laXRoZXIgdGhlIG5h
bWUgb2YgR29vZ2xlIEluYy4gbm9yIHRoZSBuYW1lcyBvZiBpdHMKKyAqIGNvbnRyaWJ1dG9ycyBt
YXkgYmUgdXNlZCB0byBlbmRvcnNlIG9yIHByb21vdGUgcHJvZHVjdHMgZGVyaXZlZCBmcm9tCisg
KiB0aGlzIHNvZnR3YXJlIHdpdGhvdXQgc3BlY2lmaWMgcHJpb3Igd3JpdHRlbiBwZXJtaXNzaW9u
LgorICoKKyAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgVEhFIENPUFlSSUdIVCBIT0xE
RVJTIEFORCBDT05UUklCVVRPUlMKKyAqICJBUyBJUyIgQU5EIEFOWSBFWFBSRVNTIE9SIElNUExJ
RUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UCisgKiBMSU1JVEVEIFRPLCBUSEUgSU1Q
TElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IKKyAqIEEg
UEFSVElDVUxBUiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiBJTiBOTyBFVkVOVCBTSEFMTCBUSEUg
Q09QWVJJR0hUCisgKiBPV05FUiBPUiBDT05UUklCVVRPUlMgQkUgTElBQkxFIEZPUiBBTlkgRElS
RUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwKKyAqIFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IgQ09O
U0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QKKyAqIExJTUlURUQgVE8sIFBS
T0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLAor
ICogREFUQSwgT1IgUFJPRklUUzsgT1IgQlVTSU5FU1MgSU5URVJSVVBUSU9OKSBIT1dFVkVSIENB
VVNFRCBBTkQgT04gQU5ZCisgKiBUSEVPUlkgT0YgTElBQklMSVRZLCBXSEVUSEVSIElOIENPTlRS
QUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUCisgKiAoSU5DTFVESU5HIE5FR0xJR0VOQ0Ug
T1IgT1RIRVJXSVNFKSBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UKKyAqIE9GIFRI
SVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBE
QU1BR0UuCisgKi8KKworI2luY2x1ZGUgImNvbmZpZy5oIgorCisjaW5jbHVkZSAiQW5pbWF0aW9u
VHJhbnNsYXRpb25VdGlsLmgiCisKKyNpbmNsdWRlICJGbG9hdFNpemUuaCIKKyNpbmNsdWRlICJH
cmFwaGljc0xheWVyLmgiCisjaW5jbHVkZSAiSWRlbnRpdHlUcmFuc2Zvcm1PcGVyYXRpb24uaCIK
KyNpbmNsdWRlICJMZW5ndGguaCIKKyNpbmNsdWRlICJMZW5ndGhGdW5jdGlvbnMuaCIKKyNpbmNs
dWRlICJNYXRyaXgzRFRyYW5zZm9ybU9wZXJhdGlvbi5oIgorI2luY2x1ZGUgIk1hdHJpeFRyYW5z
Zm9ybU9wZXJhdGlvbi5oIgorI2luY2x1ZGUgIlBlcnNwZWN0aXZlVHJhbnNmb3JtT3BlcmF0aW9u
LmgiCisjaW5jbHVkZSAiUm90YXRlVHJhbnNmb3JtT3BlcmF0aW9uLmgiCisjaW5jbHVkZSAiU2Nh
bGVUcmFuc2Zvcm1PcGVyYXRpb24uaCIKKyNpbmNsdWRlICJTa2V3VHJhbnNmb3JtT3BlcmF0aW9u
LmgiCisjaW5jbHVkZSAiVHJhbnNmb3JtT3BlcmF0aW9ucy5oIgorI2luY2x1ZGUgIlRyYW5zbGF0
ZVRyYW5zZm9ybU9wZXJhdGlvbi5oIgorCisjaW5jbHVkZSAiY2MvQ0NBY3RpdmVBbmltYXRpb24u
aCIKKyNpbmNsdWRlICJjYy9DQ0tleWZyYW1lZEFuaW1hdGlvbkN1cnZlLmgiCisKKyNpbmNsdWRl
IDxwdWJsaWMvV2ViVHJhbnNmb3JtT3BlcmF0aW9ucy5oPgorI2luY2x1ZGUgPHB1YmxpYy9XZWJU
cmFuc2Zvcm1hdGlvbk1hdHJpeC5oPgorCisjaW5jbHVkZSA8d3RmL093blB0ci5oPgorI2luY2x1
ZGUgPHd0Zi90ZXh0L0NTdHJpbmcuaD4KKwordXNpbmcgbmFtZXNwYWNlIHN0ZDsKK3VzaW5nIG5h
bWVzcGFjZSBXZWJLaXQ7CisKK25hbWVzcGFjZSBXZWJDb3JlIHsKKworV2ViVHJhbnNmb3JtT3Bl
cmF0aW9ucyB0b1dlYlRyYW5zZm9ybU9wZXJhdGlvbnMoY29uc3QgVHJhbnNmb3JtT3BlcmF0aW9u
cyYgdHJhbnNmb3JtT3BlcmF0aW9ucywgY29uc3QgRmxvYXRTaXplJiBib3hTaXplKQoreworICAg
IFdlYlRyYW5zZm9ybU9wZXJhdGlvbnMgd2ViVHJhbnNmb3JtT3BlcmF0aW9uczsKKyAgICBmb3Ig
KHNpemVfdCBqID0gMDsgaiA8IHRyYW5zZm9ybU9wZXJhdGlvbnMuc2l6ZSgpOyArK2opIHsKKyAg
ICAgICAgVHJhbnNmb3JtT3BlcmF0aW9uOjpPcGVyYXRpb25UeXBlIG9wZXJhdGlvblR5cGUgPSB0
cmFuc2Zvcm1PcGVyYXRpb25zLm9wZXJhdGlvbnMoKVtqXS0+Z2V0T3BlcmF0aW9uVHlwZSgpOwor
ICAgICAgICBzd2l0Y2ggKG9wZXJhdGlvblR5cGUpIHsKKyAgICAgICAgY2FzZSBUcmFuc2Zvcm1P
cGVyYXRpb246OlNDQUxFX1g6CisgICAgICAgIGNhc2UgVHJhbnNmb3JtT3BlcmF0aW9uOjpTQ0FM
RV9ZOgorICAgICAgICBjYXNlIFRyYW5zZm9ybU9wZXJhdGlvbjo6U0NBTEVfWjoKKyAgICAgICAg
Y2FzZSBUcmFuc2Zvcm1PcGVyYXRpb246OlNDQUxFXzNEOgorICAgICAgICBjYXNlIFRyYW5zZm9y
bU9wZXJhdGlvbjo6U0NBTEU6IHsKKyAgICAgICAgICAgIGNvbnN0IFNjYWxlVHJhbnNmb3JtT3Bl
cmF0aW9uKiB0cmFuc2Zvcm0gPSBzdGF0aWNfY2FzdDxjb25zdCBTY2FsZVRyYW5zZm9ybU9wZXJh
dGlvbio+KHRyYW5zZm9ybU9wZXJhdGlvbnMub3BlcmF0aW9ucygpW2pdLmdldCgpKTsKKyAgICAg
ICAgICAgIHdlYlRyYW5zZm9ybU9wZXJhdGlvbnMuYXBwZW5kU2NhbGUodHJhbnNmb3JtLT54KCks
IHRyYW5zZm9ybS0+eSgpLCB0cmFuc2Zvcm0tPnooKSk7CisgICAgICAgICAgICBicmVhazsKKyAg
ICAgICAgfQorICAgICAgICBjYXNlIFRyYW5zZm9ybU9wZXJhdGlvbjo6VFJBTlNMQVRFX1g6Cisg
ICAgICAgIGNhc2UgVHJhbnNmb3JtT3BlcmF0aW9uOjpUUkFOU0xBVEVfWToKKyAgICAgICAgY2Fz
ZSBUcmFuc2Zvcm1PcGVyYXRpb246OlRSQU5TTEFURV9aOgorICAgICAgICBjYXNlIFRyYW5zZm9y
bU9wZXJhdGlvbjo6VFJBTlNMQVRFXzNEOgorICAgICAgICBjYXNlIFRyYW5zZm9ybU9wZXJhdGlv
bjo6VFJBTlNMQVRFOiB7CisgICAgICAgICAgICBjb25zdCBUcmFuc2xhdGVUcmFuc2Zvcm1PcGVy
YXRpb24qIHRyYW5zZm9ybSA9IHN0YXRpY19jYXN0PGNvbnN0IFRyYW5zbGF0ZVRyYW5zZm9ybU9w
ZXJhdGlvbio+KHRyYW5zZm9ybU9wZXJhdGlvbnMub3BlcmF0aW9ucygpW2pdLmdldCgpKTsKKyAg
ICAgICAgICAgIHdlYlRyYW5zZm9ybU9wZXJhdGlvbnMuYXBwZW5kVHJhbnNsYXRlKGZsb2F0VmFs
dWVGb3JMZW5ndGgodHJhbnNmb3JtLT54KCksIGJveFNpemUud2lkdGgoKSksIGZsb2F0VmFsdWVG
b3JMZW5ndGgodHJhbnNmb3JtLT55KCksIGJveFNpemUuaGVpZ2h0KCkpLCBmbG9hdFZhbHVlRm9y
TGVuZ3RoKHRyYW5zZm9ybS0+eigpLCAxKSk7CisgICAgICAgICAgICBicmVhazsKKyAgICAgICAg
fQorICAgICAgICBjYXNlIFRyYW5zZm9ybU9wZXJhdGlvbjo6Uk9UQVRFX1g6CisgICAgICAgIGNh
c2UgVHJhbnNmb3JtT3BlcmF0aW9uOjpST1RBVEVfWToKKyAgICAgICAgY2FzZSBUcmFuc2Zvcm1P
cGVyYXRpb246OlJPVEFURV8zRDoKKyAgICAgICAgY2FzZSBUcmFuc2Zvcm1PcGVyYXRpb246OlJP
VEFURTogeworICAgICAgICAgICAgY29uc3QgUm90YXRlVHJhbnNmb3JtT3BlcmF0aW9uKiB0cmFu
c2Zvcm0gPSBzdGF0aWNfY2FzdDxjb25zdCBSb3RhdGVUcmFuc2Zvcm1PcGVyYXRpb24qPih0cmFu
c2Zvcm1PcGVyYXRpb25zLm9wZXJhdGlvbnMoKVtqXS5nZXQoKSk7CisgICAgICAgICAgICB3ZWJU
cmFuc2Zvcm1PcGVyYXRpb25zLmFwcGVuZFJvdGF0ZSh0cmFuc2Zvcm0tPngoKSwgdHJhbnNmb3Jt
LT55KCksIHRyYW5zZm9ybS0+eigpLCB0cmFuc2Zvcm0tPmFuZ2xlKCkpOworICAgICAgICAgICAg
YnJlYWs7CisgICAgICAgIH0KKyAgICAgICAgY2FzZSBUcmFuc2Zvcm1PcGVyYXRpb246OlNLRVdf
WDoKKyAgICAgICAgY2FzZSBUcmFuc2Zvcm1PcGVyYXRpb246OlNLRVdfWToKKyAgICAgICAgY2Fz
ZSBUcmFuc2Zvcm1PcGVyYXRpb246OlNLRVc6IHsKKyAgICAgICAgICAgIGNvbnN0IFNrZXdUcmFu
c2Zvcm1PcGVyYXRpb24qIHRyYW5zZm9ybSA9IHN0YXRpY19jYXN0PGNvbnN0IFNrZXdUcmFuc2Zv
cm1PcGVyYXRpb24qPih0cmFuc2Zvcm1PcGVyYXRpb25zLm9wZXJhdGlvbnMoKVtqXS5nZXQoKSk7
CisgICAgICAgICAgICB3ZWJUcmFuc2Zvcm1PcGVyYXRpb25zLmFwcGVuZFNrZXcodHJhbnNmb3Jt
LT5hbmdsZVgoKSwgdHJhbnNmb3JtLT5hbmdsZVkoKSk7CisgICAgICAgICAgICBicmVhazsKKyAg
ICAgICAgfQorICAgICAgICBjYXNlIFRyYW5zZm9ybU9wZXJhdGlvbjo6TUFUUklYOiB7CisgICAg
ICAgICAgICBjb25zdCBNYXRyaXhUcmFuc2Zvcm1PcGVyYXRpb24qIHRyYW5zZm9ybSA9IHN0YXRp
Y19jYXN0PGNvbnN0IE1hdHJpeFRyYW5zZm9ybU9wZXJhdGlvbio+KHRyYW5zZm9ybU9wZXJhdGlv
bnMub3BlcmF0aW9ucygpW2pdLmdldCgpKTsKKyAgICAgICAgICAgIFRyYW5zZm9ybWF0aW9uTWF0
cml4IG0gPSB0cmFuc2Zvcm0tPm1hdHJpeCgpOworICAgICAgICAgICAgd2ViVHJhbnNmb3JtT3Bl
cmF0aW9ucy5hcHBlbmRNYXRyaXgoV2ViVHJhbnNmb3JtYXRpb25NYXRyaXgobSkpOworICAgICAg
ICAgICAgYnJlYWs7CisgICAgICAgIH0KKyAgICAgICAgY2FzZSBUcmFuc2Zvcm1PcGVyYXRpb246
Ok1BVFJJWF8zRDogeworICAgICAgICAgICAgY29uc3QgTWF0cml4M0RUcmFuc2Zvcm1PcGVyYXRp
b24qIHRyYW5zZm9ybSA9IHN0YXRpY19jYXN0PGNvbnN0IE1hdHJpeDNEVHJhbnNmb3JtT3BlcmF0
aW9uKj4odHJhbnNmb3JtT3BlcmF0aW9ucy5vcGVyYXRpb25zKClbal0uZ2V0KCkpOworICAgICAg
ICAgICAgVHJhbnNmb3JtYXRpb25NYXRyaXggbSA9IHRyYW5zZm9ybS0+bWF0cml4KCk7CisgICAg
ICAgICAgICB3ZWJUcmFuc2Zvcm1PcGVyYXRpb25zLmFwcGVuZE1hdHJpeChXZWJUcmFuc2Zvcm1h
dGlvbk1hdHJpeChtKSk7CisgICAgICAgICAgICBicmVhazsKKyAgICAgICAgfQorICAgICAgICBj
YXNlIFRyYW5zZm9ybU9wZXJhdGlvbjo6UEVSU1BFQ1RJVkU6IHsKKyAgICAgICAgICAgIGNvbnN0
IFBlcnNwZWN0aXZlVHJhbnNmb3JtT3BlcmF0aW9uKiB0cmFuc2Zvcm0gPSBzdGF0aWNfY2FzdDxj
b25zdCBQZXJzcGVjdGl2ZVRyYW5zZm9ybU9wZXJhdGlvbio+KHRyYW5zZm9ybU9wZXJhdGlvbnMu
b3BlcmF0aW9ucygpW2pdLmdldCgpKTsKKyAgICAgICAgICAgIHdlYlRyYW5zZm9ybU9wZXJhdGlv
bnMuYXBwZW5kUGVyc3BlY3RpdmUoZmxvYXRWYWx1ZUZvckxlbmd0aCh0cmFuc2Zvcm0tPnBlcnNw
ZWN0aXZlKCksIDApKTsKKyAgICAgICAgICAgIGJyZWFrOworICAgICAgICB9CisgICAgICAgIGNh
c2UgVHJhbnNmb3JtT3BlcmF0aW9uOjpJREVOVElUWToKKyAgICAgICAgY2FzZSBUcmFuc2Zvcm1P
cGVyYXRpb246Ok5PTkU6CisgICAgICAgICAgICAvLyBEbyBub3RoaW5nLgorICAgICAgICAgICAg
YnJlYWs7CisgICAgICAgIH0gLy8gc3dpdGNoCisgICAgfSAvLyBmb3IgZWFjaCBvcGVyYXRpb24K
KworICAgIHJldHVybiB3ZWJUcmFuc2Zvcm1PcGVyYXRpb25zOworfQorCit0ZW1wbGF0ZSA8Y2xh
c3MgVmFsdWUsIGNsYXNzIEtleWZyYW1lLCBjbGFzcyBDdXJ2ZT4KK2Jvb2wgYXBwZW5kS2V5ZnJh
bWUoQ3VydmUmIGN1cnZlLCBkb3VibGUga2V5VGltZSwgY29uc3QgVmFsdWUqIHZhbHVlLCBQYXNz
T3duUHRyPENDVGltaW5nRnVuY3Rpb24+IHRpbWluZ0Z1bmN0aW9uLCBjb25zdCBGbG9hdFNpemUm
KQoreworICAgIGN1cnZlLmFkZEtleWZyYW1lKEtleWZyYW1lOjpjcmVhdGUoa2V5VGltZSwgdmFs
dWUtPnZhbHVlKCksIHRpbWluZ0Z1bmN0aW9uKSk7CisgICAgcmV0dXJuIHRydWU7Cit9CisKK3Rl
bXBsYXRlIDw+Citib29sIGFwcGVuZEtleWZyYW1lPFRyYW5zZm9ybUFuaW1hdGlvblZhbHVlLCBD
Q1RyYW5zZm9ybUtleWZyYW1lLCBDQ0tleWZyYW1lZFRyYW5zZm9ybUFuaW1hdGlvbkN1cnZlPihD
Q0tleWZyYW1lZFRyYW5zZm9ybUFuaW1hdGlvbkN1cnZlJiBjdXJ2ZSwgZG91YmxlIGtleVRpbWUs
IGNvbnN0IFRyYW5zZm9ybUFuaW1hdGlvblZhbHVlKiB2YWx1ZSwgUGFzc093blB0cjxDQ1RpbWlu
Z0Z1bmN0aW9uPiB0aW1pbmdGdW5jdGlvbiwgY29uc3QgRmxvYXRTaXplJiBib3hTaXplKQorewor
ICAgIFdlYlRyYW5zZm9ybU9wZXJhdGlvbnMgb3BlcmF0aW9ucyA9IHRvV2ViVHJhbnNmb3JtT3Bl
cmF0aW9ucygqdmFsdWUtPnZhbHVlKCksIGJveFNpemUpOworICAgIGlmIChvcGVyYXRpb25zLmFw
cGx5KCkuaXNJbnZlcnRpYmxlKCkpIHsKKyAgICAgICAgY3VydmUuYWRkS2V5ZnJhbWUoQ0NUcmFu
c2Zvcm1LZXlmcmFtZTo6Y3JlYXRlKGtleVRpbWUsIG9wZXJhdGlvbnMsIHRpbWluZ0Z1bmN0aW9u
KSk7CisgICAgICAgIHJldHVybiB0cnVlOworICAgIH0KKyAgICByZXR1cm4gZmFsc2U7Cit9CisK
K3RlbXBsYXRlIDxjbGFzcyBWYWx1ZSwgY2xhc3MgS2V5ZnJhbWUsIGNsYXNzIEN1cnZlPgorUGFz
c093blB0cjxDQ0FjdGl2ZUFuaW1hdGlvbj4gY3JlYXRlQWN0aXZlQW5pbWF0aW9uKGNvbnN0IEtl
eWZyYW1lVmFsdWVMaXN0JiB2YWx1ZUxpc3QsIGNvbnN0IEFuaW1hdGlvbiogYW5pbWF0aW9uLCBz
aXplX3QgYW5pbWF0aW9uSWQsIHNpemVfdCBncm91cElkLCBkb3VibGUgdGltZU9mZnNldCwgQ0NB
Y3RpdmVBbmltYXRpb246OlRhcmdldFByb3BlcnR5IHRhcmdldFByb3BlcnR5LCBjb25zdCBGbG9h
dFNpemUmIGJveFNpemUpCit7CisgICAgYm9vbCBhbHRlcm5hdGUgPSBmYWxzZTsKKyAgICBib29s
IHJldmVyc2UgPSBmYWxzZTsKKyAgICBpZiAoYW5pbWF0aW9uICYmIGFuaW1hdGlvbi0+aXNEaXJl
Y3Rpb25TZXQoKSkgeworICAgICAgICBBbmltYXRpb246OkFuaW1hdGlvbkRpcmVjdGlvbiBkaXJl
Y3Rpb24gPSBhbmltYXRpb24tPmRpcmVjdGlvbigpOworICAgICAgICBpZiAoZGlyZWN0aW9uID09
IEFuaW1hdGlvbjo6QW5pbWF0aW9uRGlyZWN0aW9uQWx0ZXJuYXRlIHx8IGRpcmVjdGlvbiA9PSBB
bmltYXRpb246OkFuaW1hdGlvbkRpcmVjdGlvbkFsdGVybmF0ZVJldmVyc2UpCisgICAgICAgICAg
ICBhbHRlcm5hdGUgPSB0cnVlOworICAgICAgICBpZiAoZGlyZWN0aW9uID09IEFuaW1hdGlvbjo6
QW5pbWF0aW9uRGlyZWN0aW9uUmV2ZXJzZSB8fCBkaXJlY3Rpb24gPT0gQW5pbWF0aW9uOjpBbmlt
YXRpb25EaXJlY3Rpb25BbHRlcm5hdGVSZXZlcnNlKQorICAgICAgICAgICAgcmV2ZXJzZSA9IHRy
dWU7CisgICAgfQorCisgICAgT3duUHRyPEN1cnZlPiBjdXJ2ZSA9IEN1cnZlOjpjcmVhdGUoKTsK
KyAgICBWZWN0b3I8S2V5ZnJhbWU+IGtleWZyYW1lczsKKworICAgIGZvciAoc2l6ZV90IGkgPSAw
OyBpIDwgdmFsdWVMaXN0LnNpemUoKTsgaSsrKSB7CisgICAgICAgIHNpemVfdCBpbmRleCA9IHJl
dmVyc2UgPyB2YWx1ZUxpc3Quc2l6ZSgpIC0gaSAtIDEgOiBpOworCisgICAgICAgIGNvbnN0IFZh
bHVlKiBvcmlnaW5hbFZhbHVlID0gc3RhdGljX2Nhc3Q8Y29uc3QgVmFsdWUqPih2YWx1ZUxpc3Qu
YXQoaW5kZXgpKTsKKworICAgICAgICBPd25QdHI8Q0NUaW1pbmdGdW5jdGlvbj4gdGltaW5nRnVu
Y3Rpb247CisgICAgICAgIGNvbnN0IFRpbWluZ0Z1bmN0aW9uKiBvcmlnaW5hbFRpbWluZ0Z1bmN0
aW9uID0gb3JpZ2luYWxWYWx1ZS0+dGltaW5nRnVuY3Rpb24oKTsKKworICAgICAgICAvLyBJZiB0
aGVyZSBoYXNuJ3QgYmVlbiBhIHRpbWluZyBmdW5jdGlvbiBhc3NvY2lhdGVkIHdpdGggdGhpcyBr
ZXlmcmFtZSwgdXNlIHRoZQorICAgICAgICAvLyBhbmltYXRpb24ncyB0aW1pbmcgZnVuY3Rpb24s
IGlmIHdlIGhhdmUgb25lLgorICAgICAgICBpZiAoIW9yaWdpbmFsVGltaW5nRnVuY3Rpb24gJiYg
YW5pbWF0aW9uLT5pc1RpbWluZ0Z1bmN0aW9uU2V0KCkpCisgICAgICAgICAgICBvcmlnaW5hbFRp
bWluZ0Z1bmN0aW9uID0gYW5pbWF0aW9uLT50aW1pbmdGdW5jdGlvbigpLmdldCgpOworCisgICAg
ICAgIGlmIChvcmlnaW5hbFRpbWluZ0Z1bmN0aW9uKSB7CisgICAgICAgICAgICBzd2l0Y2ggKG9y
aWdpbmFsVGltaW5nRnVuY3Rpb24tPnR5cGUoKSkgeworICAgICAgICAgICAgY2FzZSBUaW1pbmdG
dW5jdGlvbjo6U3RlcHNGdW5jdGlvbjoKKyAgICAgICAgICAgICAgICAvLyBGSVhNRTogYWRkIHN1
cHBvcnQgZm9yIHN0ZXBzIHRpbWluZyBmdW5jdGlvbi4KKyAgICAgICAgICAgICAgICByZXR1cm4g
bnVsbHB0cjsKKyAgICAgICAgICAgIGNhc2UgVGltaW5nRnVuY3Rpb246OkxpbmVhckZ1bmN0aW9u
OgorICAgICAgICAgICAgICAgIC8vIERvbid0IHNldCB0aGUgdGltaW5nIGZ1bmN0aW9uLiBLZXlm
cmFtZXMgYXJlIGludGVycG9sYXRlZCBsaW5lYXJseSBpZiB0aGVyZSBpcyBubyB0aW1pbmcgZnVu
Y3Rpb24uCisgICAgICAgICAgICAgICAgYnJlYWs7CisgICAgICAgICAgICBjYXNlIFRpbWluZ0Z1
bmN0aW9uOjpDdWJpY0JlemllckZ1bmN0aW9uOgorICAgICAgICAgICAgICAgIGNvbnN0IEN1Ymlj
QmV6aWVyVGltaW5nRnVuY3Rpb24qIG9yaWdpbmFsQmV6aWVyVGltaW5nRnVuY3Rpb24gPSBzdGF0
aWNfY2FzdDxjb25zdCBDdWJpY0JlemllclRpbWluZ0Z1bmN0aW9uKj4ob3JpZ2luYWxUaW1pbmdG
dW5jdGlvbik7CisgICAgICAgICAgICAgICAgdGltaW5nRnVuY3Rpb24gPSBDQ0N1YmljQmV6aWVy
VGltaW5nRnVuY3Rpb246OmNyZWF0ZShvcmlnaW5hbEJlemllclRpbWluZ0Z1bmN0aW9uLT54MSgp
LCBvcmlnaW5hbEJlemllclRpbWluZ0Z1bmN0aW9uLT55MSgpLCBvcmlnaW5hbEJlemllclRpbWlu
Z0Z1bmN0aW9uLT54MigpLCBvcmlnaW5hbEJlemllclRpbWluZ0Z1bmN0aW9uLT55MigpKTsKKyAg
ICAgICAgICAgICAgICBicmVhazsKKyAgICAgICAgICAgIH0gLy8gc3dpdGNoCisgICAgICAgIH0g
ZWxzZQorICAgICAgICAgICAgdGltaW5nRnVuY3Rpb24gPSBDQ0Vhc2VUaW1pbmdGdW5jdGlvbjo6
Y3JlYXRlKCk7CisKKyAgICAgICAgZG91YmxlIGR1cmF0aW9uID0gKGFuaW1hdGlvbiAmJiBhbmlt
YXRpb24tPmlzRHVyYXRpb25TZXQoKSkgPyBhbmltYXRpb24tPmR1cmF0aW9uKCkgOiAxOworICAg
ICAgICBkb3VibGUga2V5VGltZSA9IG9yaWdpbmFsVmFsdWUtPmtleVRpbWUoKSAqIGR1cmF0aW9u
OworCisgICAgICAgIGlmIChyZXZlcnNlKQorICAgICAgICAgICAga2V5VGltZSA9IGR1cmF0aW9u
IC0ga2V5VGltZTsKKworICAgICAgICBib29sIGFkZGVkS2V5ZnJhbWUgPSBhcHBlbmRLZXlmcmFt
ZTxWYWx1ZSwgS2V5ZnJhbWUsIEN1cnZlPigqY3VydmUsIGtleVRpbWUsIG9yaWdpbmFsVmFsdWUs
IHRpbWluZ0Z1bmN0aW9uLnJlbGVhc2UoKSwgYm94U2l6ZSk7CisgICAgICAgIGlmICghYWRkZWRL
ZXlmcmFtZSkKKyAgICAgICAgICAgIHJldHVybiBudWxscHRyOworICAgIH0KKworICAgIE93blB0
cjxDQ0FjdGl2ZUFuaW1hdGlvbj4gYW5pbSA9IENDQWN0aXZlQW5pbWF0aW9uOjpjcmVhdGUoY3Vy
dmUucmVsZWFzZSgpLCBhbmltYXRpb25JZCwgZ3JvdXBJZCwgdGFyZ2V0UHJvcGVydHkpOworCisg
ICAgQVNTRVJUKGFuaW0uZ2V0KCkpOworCisgICAgaWYgKGFuaW0uZ2V0KCkpIHsKKyAgICAgICAg
aW50IGl0ZXJhdGlvbnMgPSAoYW5pbWF0aW9uICYmIGFuaW1hdGlvbi0+aXNJdGVyYXRpb25Db3Vu
dFNldCgpKSA/IGFuaW1hdGlvbi0+aXRlcmF0aW9uQ291bnQoKSA6IDE7CisgICAgICAgIGFuaW0t
PnNldEl0ZXJhdGlvbnMoaXRlcmF0aW9ucyk7CisgICAgICAgIGFuaW0tPnNldEFsdGVybmF0ZXNE
aXJlY3Rpb24oYWx0ZXJuYXRlKTsKKyAgICB9CisKKyAgICAvLyBJbiBvcmRlciB0byBhdm9pZCBz
a2V3LCB0aGUgbWFpbiB0aHJlYWQgYW5pbWF0aW9uIGNhbm5vdCB0aWNrIHVudGlsIGl0IGhhcyBy
ZWNlaXZlZCB0aGUgc3RhcnQgdGltZSBvZgorICAgIC8vIHRoZSBjb3JyZXNwb25kaW5nIGltcGwg
dGhyZWFkIGFuaW1hdGlvbi4KKyAgICBhbmltLT5zZXROZWVkc1N5bmNocm9uaXplZFN0YXJ0VGlt
ZSh0cnVlKTsKKworICAgIC8vIElmIHRpbWVPZmZzZXQgPiAwLCB0aGVuIHRoZSBhbmltYXRpb24g
aGFzIHN0YXJ0ZWQgaW4gdGhlIHBhc3QuCisgICAgYW5pbS0+c2V0VGltZU9mZnNldCh0aW1lT2Zm
c2V0KTsKKworICAgIHJldHVybiBhbmltLnJlbGVhc2UoKTsKK30KKworUGFzc093blB0cjxDQ0Fj
dGl2ZUFuaW1hdGlvbj4gY3JlYXRlQWN0aXZlQW5pbWF0aW9uKGNvbnN0IEtleWZyYW1lVmFsdWVM
aXN0JiB2YWx1ZXMsIGNvbnN0IEFuaW1hdGlvbiogYW5pbWF0aW9uLCBzaXplX3QgYW5pbWF0aW9u
SWQsIHNpemVfdCBncm91cElkLCBkb3VibGUgdGltZU9mZnNldCwgY29uc3QgRmxvYXRTaXplJiBi
b3hTaXplKQoreworICAgIGlmICh2YWx1ZXMucHJvcGVydHkoKSA9PSBBbmltYXRlZFByb3BlcnR5
V2Via2l0VHJhbnNmb3JtKQorICAgICAgICByZXR1cm4gY3JlYXRlQWN0aXZlQW5pbWF0aW9uPFRy
YW5zZm9ybUFuaW1hdGlvblZhbHVlLCBDQ1RyYW5zZm9ybUtleWZyYW1lLCBDQ0tleWZyYW1lZFRy
YW5zZm9ybUFuaW1hdGlvbkN1cnZlPih2YWx1ZXMsIGFuaW1hdGlvbiwgYW5pbWF0aW9uSWQsIGdy
b3VwSWQsIHRpbWVPZmZzZXQsIENDQWN0aXZlQW5pbWF0aW9uOjpUcmFuc2Zvcm0sIEZsb2F0U2l6
ZShib3hTaXplKSk7CisKKyAgICBpZiAodmFsdWVzLnByb3BlcnR5KCkgPT0gQW5pbWF0ZWRQcm9w
ZXJ0eU9wYWNpdHkpCisgICAgICAgIHJldHVybiBjcmVhdGVBY3RpdmVBbmltYXRpb248RmxvYXRB
bmltYXRpb25WYWx1ZSwgQ0NGbG9hdEtleWZyYW1lLCBDQ0tleWZyYW1lZEZsb2F0QW5pbWF0aW9u
Q3VydmU+KHZhbHVlcywgYW5pbWF0aW9uLCBhbmltYXRpb25JZCwgZ3JvdXBJZCwgdGltZU9mZnNl
dCwgQ0NBY3RpdmVBbmltYXRpb246Ok9wYWNpdHksIEZsb2F0U2l6ZSgpKTsKKworICAgIHJldHVy
biBudWxscHRyOworfQorCit9IC8vIG5hbWVzcGFjZSBXZWJDb3JlCmRpZmYgLS1naXQgYS9Tb3Vy
Y2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9jaHJvbWl1bS9BbmltYXRpb25UcmFuc2xhdGlv
blV0aWwuaCBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2Nocm9taXVtL0FuaW1h
dGlvblRyYW5zbGF0aW9uVXRpbC5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAuLjA4ZjYwZDIwZGMzYmMxZmM3OGRhNGRh
YjM1ZjdiY2MzOTUwY2E1MTQKLS0tIC9kZXYvbnVsbAorKysgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0
Zm9ybS9ncmFwaGljcy9jaHJvbWl1bS9BbmltYXRpb25UcmFuc2xhdGlvblV0aWwuaApAQCAtMCww
ICsxLDQ3IEBACisvKgorICogQ29weXJpZ2h0IChDKSAyMDEwIEdvb2dsZSBJbmMuIEFsbCByaWdo
dHMgcmVzZXJ2ZWQuCisgKgorICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5k
IGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CisgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJt
aXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMgYXJlCisgKiBtZXQ6
CisgKgorICogICAgICogUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWlu
IHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMg
YW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KKyAqICAgICAqIFJlZGlzdHJpYnV0aW9ucyBp
biBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUKKyAqIGNvcHlyaWdodCBub3Rp
Y2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIK
KyAqIGluIHRoZSBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQg
d2l0aCB0aGUKKyAqIGRpc3RyaWJ1dGlvbi4KKyAqICAgICAqIE5laXRoZXIgdGhlIG5hbWUgb2Yg
R29vZ2xlIEluYy4gbm9yIHRoZSBuYW1lcyBvZiBpdHMKKyAqIGNvbnRyaWJ1dG9ycyBtYXkgYmUg
dXNlZCB0byBlbmRvcnNlIG9yIHByb21vdGUgcHJvZHVjdHMgZGVyaXZlZCBmcm9tCisgKiB0aGlz
IHNvZnR3YXJlIHdpdGhvdXQgc3BlY2lmaWMgcHJpb3Igd3JpdHRlbiBwZXJtaXNzaW9uLgorICoK
KyAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgVEhFIENPUFlSSUdIVCBIT0xERVJTIEFO
RCBDT05UUklCVVRPUlMKKyAqICJBUyBJUyIgQU5EIEFOWSBFWFBSRVNTIE9SIElNUExJRUQgV0FS
UkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UCisgKiBMSU1JVEVEIFRPLCBUSEUgSU1QTElFRCBX
QVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IKKyAqIEEgUEFSVElD
VUxBUiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiBJTiBOTyBFVkVOVCBTSEFMTCBUSEUgQ09QWVJJ
R0hUCisgKiBPV05FUiBPUiBDT05UUklCVVRPUlMgQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJ
TkRJUkVDVCwgSU5DSURFTlRBTCwKKyAqIFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVO
VElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QKKyAqIExJTUlURUQgVE8sIFBST0NVUkVN
RU5UIE9GIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLAorICogREFU
QSwgT1IgUFJPRklUUzsgT1IgQlVTSU5FU1MgSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBB
TkQgT04gQU5ZCisgKiBUSEVPUlkgT0YgTElBQklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNULCBT
VFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUCisgKiAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RI
RVJXSVNFKSBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UKKyAqIE9GIFRISVMgU09G
VFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0Uu
CisgKi8KKworI2lmbmRlZiBBbmltYXRpb25UcmFuc2xhdGlvblV0aWxfaAorI2RlZmluZSBBbmlt
YXRpb25UcmFuc2xhdGlvblV0aWxfaAorCisjaW5jbHVkZSA8d3RmL1Bhc3NPd25QdHIuaD4KKwor
Y2xhc3MgS2V5ZnJhbWVWYWx1ZUxpc3Q7CitjbGFzcyBBbmltYXRpb247CitjbGFzcyBGbG9hdFNp
emU7CitjbGFzcyBDQ0FjdGl2ZUFuaW1hdGlvbjsKKworbmFtZXNwYWNlIFdlYkNvcmUgeworCitQ
YXNzT3duUHRyPENDQWN0aXZlQW5pbWF0aW9uPiBjcmVhdGVBY3RpdmVBbmltYXRpb24oY29uc3Qg
S2V5ZnJhbWVWYWx1ZUxpc3QmLCBjb25zdCBBbmltYXRpb24qLCBzaXplX3QgYW5pbWF0aW9uSWQs
IHNpemVfdCBncm91cElkLCBkb3VibGUgdGltZU9mZnNldCwgY29uc3QgRmxvYXRTaXplJiBib3hT
aXplKTsKKworfSAvLyBuYW1lc3BhY2UgV2ViQ29yZQorCisjZW5kaWYgLy8gQW5pbWF0aW9uVHJh
bnNsYXRpb25VdGlsX2gKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBo
aWNzL2Nocm9taXVtL0dyYXBoaWNzTGF5ZXJDaHJvbWl1bS5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9w
bGF0Zm9ybS9ncmFwaGljcy9jaHJvbWl1bS9HcmFwaGljc0xheWVyQ2hyb21pdW0uY3BwCmluZGV4
IDE4NDMzMzYwOTUxYjJiZmNlYTdjYjExYmJlOTAwMWVhOTg1ZjRlMDEuLjk0OWE0YTk4ZDM2MWI0
YTNkMTAxY2QzZjEzMzRmZmRlOGI3OTJjMmIgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL3Bs
YXRmb3JtL2dyYXBoaWNzL2Nocm9taXVtL0dyYXBoaWNzTGF5ZXJDaHJvbWl1bS5jcHAKKysrIGIv
U291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvY2hyb21pdW0vR3JhcGhpY3NMYXllckNo
cm9taXVtLmNwcApAQCAtNDYsNiArNDYsNyBAQAogI2luY2x1ZGUgIkdyYXBoaWNzTGF5ZXJDaHJv
bWl1bS5oIgogCiAjaW5jbHVkZSAiQW5pbWF0aW9uSWRWZW5kb3IuaCIKKyNpbmNsdWRlICJBbmlt
YXRpb25UcmFuc2xhdGlvblV0aWwuaCIKICNpbmNsdWRlICJDYW52YXMyRExheWVyQ2hyb21pdW0u
aCIKICNpbmNsdWRlICJDb250ZW50TGF5ZXJDaHJvbWl1bS5oIgogI2luY2x1ZGUgIkZsb2F0Q29u
dmVyc2lvbi5oIgpAQCAtNTgsNiArNTksOCBAQAogI2luY2x1ZGUgIlNrTWF0cml4NDQuaCIKICNp
bmNsdWRlICJTeXN0ZW1UaW1lLmgiCiAKKyNpbmNsdWRlICJjYy9DQ0FjdGl2ZUFuaW1hdGlvbi5o
IgorCiAjaW5jbHVkZSA8cHVibGljL1dlYkZpbHRlck9wZXJhdGlvbi5oPgogI2luY2x1ZGUgPHB1
YmxpYy9XZWJGaWx0ZXJPcGVyYXRpb25zLmg+CiAjaW5jbHVkZSA8cHVibGljL1dlYkZsb2F0UG9p
bnQuaD4KQEAgLTUwMCw4ICs1MDMsMjggQEAgdm9pZCBHcmFwaGljc0xheWVyQ2hyb21pdW06OnNl
dENvbnRlbnRzVG9DYW52YXMoUGxhdGZvcm1MYXllciogcGxhdGZvcm1MYXllcikKIAogYm9vbCBH
cmFwaGljc0xheWVyQ2hyb21pdW06OmFkZEFuaW1hdGlvbihjb25zdCBLZXlmcmFtZVZhbHVlTGlz
dCYgdmFsdWVzLCBjb25zdCBJbnRTaXplJiBib3hTaXplLCBjb25zdCBBbmltYXRpb24qIGFuaW1h
dGlvbiwgY29uc3QgU3RyaW5nJiBhbmltYXRpb25OYW1lLCBkb3VibGUgdGltZU9mZnNldCkKIHsK
KyAgICAvLyBCYWlsIGVhcmx5IGlmIHdlIGhhdmUgYSBsYXJnZSByb3RhdGlvbi4KKyAgICBpZiAo
dmFsdWVzLnByb3BlcnR5KCkgPT0gQW5pbWF0ZWRQcm9wZXJ0eVdlYmtpdFRyYW5zZm9ybSkgewor
ICAgICAgICBib29sIGhhc1JvdGF0aW9uT2ZNb3JlVGhhbjE4MERlZ3JlZXMgPSBmYWxzZTsKKyAg
ICAgICAgdmFsaWRhdGVUcmFuc2Zvcm1PcGVyYXRpb25zKHZhbHVlcywgaGFzUm90YXRpb25PZk1v
cmVUaGFuMTgwRGVncmVlcyk7CisgICAgICAgIGlmIChoYXNSb3RhdGlvbk9mTW9yZVRoYW4xODBE
ZWdyZWVzKQorICAgICAgICAgICAgcmV0dXJuIGZhbHNlOworICAgIH0KKwogICAgIHByaW1hcnlM
YXllcigpLnVud3JhcDxMYXllckNocm9taXVtPigpLT5zZXRMYXllckFuaW1hdGlvbkRlbGVnYXRl
KHRoaXMpOwotICAgIHJldHVybiBwcmltYXJ5TGF5ZXIoKS51bndyYXA8TGF5ZXJDaHJvbWl1bT4o
KS0+YWRkQW5pbWF0aW9uKHZhbHVlcywgYm94U2l6ZSwgYW5pbWF0aW9uLCBtYXBBbmltYXRpb25O
YW1lVG9JZChhbmltYXRpb25OYW1lKSwgQW5pbWF0aW9uSWRWZW5kb3I6OmdldE5leHRHcm91cElk
KCksIHRpbWVPZmZzZXQpOworCisgICAgaW50IGFuaW1hdGlvbklkID0gbWFwQW5pbWF0aW9uTmFt
ZVRvSWQoYW5pbWF0aW9uTmFtZSk7CisgICAgaW50IGdyb3VwSWQgPSBBbmltYXRpb25JZFZlbmRv
cjo6Z2V0TmV4dEdyb3VwSWQoKTsKKworICAgIE93blB0cjxDQ0FjdGl2ZUFuaW1hdGlvbj4gdG9B
ZGQoY3JlYXRlQWN0aXZlQW5pbWF0aW9uKHZhbHVlcywgYW5pbWF0aW9uLCBhbmltYXRpb25JZCwg
Z3JvdXBJZCwgdGltZU9mZnNldCwgYm94U2l6ZSkpOworCisgICAgaWYgKHRvQWRkLmdldCgpKSB7
CisgICAgICAgIC8vIFJlbW92ZSBhbnkgZXhpc3RpbmcgYW5pbWF0aW9ucyB3aXRoIHRoZSBzYW1l
IGFuaW1hdGlvbiBpZCBhbmQgdGFyZ2V0IHByb3BlcnR5LgorICAgICAgICBwcmltYXJ5TGF5ZXIo
KS51bndyYXA8TGF5ZXJDaHJvbWl1bT4oKS0+bGF5ZXJBbmltYXRpb25Db250cm9sbGVyKCktPnJl
bW92ZUFuaW1hdGlvbih0b0FkZC0+aWQoKSwgdG9BZGQtPnRhcmdldFByb3BlcnR5KCkpOworICAg
ICAgICByZXR1cm4gcHJpbWFyeUxheWVyKCkudW53cmFwPExheWVyQ2hyb21pdW0+KCktPmFkZEFu
aW1hdGlvbih0b0FkZC5yZWxlYXNlKCkpOworICAgIH0KKworICAgIHJldHVybiBmYWxzZTsKIH0K
IAogdm9pZCBHcmFwaGljc0xheWVyQ2hyb21pdW06OnBhdXNlQW5pbWF0aW9uKGNvbnN0IFN0cmlu
ZyYgYW5pbWF0aW9uTmFtZSwgZG91YmxlIHRpbWVPZmZzZXQpCmRpZmYgLS1naXQgYS9Tb3VyY2Uv
V2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9jaHJvbWl1bS9MYXllckNocm9taXVtLmNwcCBiL1Nv
dXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2Nocm9taXVtL0xheWVyQ2hyb21pdW0uY3Bw
CmluZGV4IGY2MWZkMzVkNTMwMDE0MWYyYjJmZjI2Yjg3NjRiOGY2MmUwM2UyM2QuLmQzNWY1OTIx
OWZmNzQzY2ZkOWRlNmJkNzllYmU1OTFjYWM5MjFhYTkgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJD
b3JlL3BsYXRmb3JtL2dyYXBoaWNzL2Nocm9taXVtL0xheWVyQ2hyb21pdW0uY3BwCisrKyBiL1Nv
dXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2Nocm9taXVtL0xheWVyQ2hyb21pdW0uY3Bw
CkBAIC0zNyw2ICszNyw3IEBACiAjaW5jbHVkZSAiUGxhdGZvcm1Db250ZXh0U2tpYS5oIgogI2lu
Y2x1ZGUgIlJlbmRlckxheWVyQmFja2luZy5oIgogI2luY2x1ZGUgIlRleHRTdHJlYW0uaCIKKyNp
bmNsdWRlICJjYy9DQ0FjdGl2ZUFuaW1hdGlvbi5oIgogI2luY2x1ZGUgImNjL0NDQW5pbWF0aW9u
RXZlbnRzLmgiCiAjaW5jbHVkZSAiY2MvQ0NMYXllckFuaW1hdGlvbkNvbnRyb2xsZXIuaCIKICNp
bmNsdWRlICJjYy9DQ0xheWVyQW5pbWF0aW9uRGVsZWdhdGUuaCIKQEAgLTU5OSwxNyArNjAwLDE1
IEBAIHZvaWQgTGF5ZXJDaHJvbWl1bTo6c2V0VHJhbnNmb3JtRnJvbUFuaW1hdGlvbihjb25zdCBX
ZWJUcmFuc2Zvcm1hdGlvbk1hdHJpeCYgdHJhCiAgICAgbV90cmFuc2Zvcm0gPSB0cmFuc2Zvcm07
CiB9CiAKLWJvb2wgTGF5ZXJDaHJvbWl1bTo6YWRkQW5pbWF0aW9uKGNvbnN0IEtleWZyYW1lVmFs
dWVMaXN0JiB2YWx1ZXMsIGNvbnN0IEludFNpemUmIGJveFNpemUsIGNvbnN0IEFuaW1hdGlvbiog
YW5pbWF0aW9uLCBpbnQgYW5pbWF0aW9uSWQsIGludCBncm91cElkLCBkb3VibGUgdGltZU9mZnNl
dCkKK2Jvb2wgTGF5ZXJDaHJvbWl1bTo6YWRkQW5pbWF0aW9uKFBhc3NPd25QdHI8Q0NBY3RpdmVB
bmltYXRpb24+IGFuaW1hdGlvbikKIHsKICAgICBpZiAoIW1fbGF5ZXJUcmVlSG9zdCB8fCAhbV9s
YXllclRyZWVIb3N0LT5zZXR0aW5ncygpLnRocmVhZGVkQW5pbWF0aW9uRW5hYmxlZCkKICAgICAg
ICAgcmV0dXJuIGZhbHNlOwogCi0gICAgYm9vbCBhZGRlZEFuaW1hdGlvbiA9IG1fbGF5ZXJBbmlt
YXRpb25Db250cm9sbGVyLT5hZGRBbmltYXRpb24odmFsdWVzLCBib3hTaXplLCBhbmltYXRpb24s
IGFuaW1hdGlvbklkLCBncm91cElkLCB0aW1lT2Zmc2V0KTsKLSAgICBpZiAoYWRkZWRBbmltYXRp
b24pIHsKLSAgICAgICAgbV9sYXllclRyZWVIb3N0LT5kaWRBZGRBbmltYXRpb24oKTsKLSAgICAg
ICAgc2V0TmVlZHNDb21taXQoKTsKLSAgICB9Ci0gICAgcmV0dXJuIGFkZGVkQW5pbWF0aW9uOwor
ICAgIG1fbGF5ZXJBbmltYXRpb25Db250cm9sbGVyLT5hZGRBbmltYXRpb24oYW5pbWF0aW9uKTsK
KyAgICBtX2xheWVyVHJlZUhvc3QtPmRpZEFkZEFuaW1hdGlvbigpOworICAgIHNldE5lZWRzQ29t
bWl0KCk7CisgICAgcmV0dXJuIHRydWU7CiB9CiAKIHZvaWQgTGF5ZXJDaHJvbWl1bTo6cGF1c2VB
bmltYXRpb24oaW50IGFuaW1hdGlvbklkLCBkb3VibGUgdGltZU9mZnNldCkKZGlmZiAtLWdpdCBh
L1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2Nocm9taXVtL0xheWVyQ2hyb21pdW0u
aCBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2Nocm9taXVtL0xheWVyQ2hyb21p
dW0uaAppbmRleCBhOTNkMTc2MGZjYWQwMGUyMTI3MGQ1MDYxYTAyNDdlMmY2MjFiZGNkLi44MGFj
YzhlZTZmNDRiMzEyNzhjN2Y1ZDJlYmZiMmU3MTNhNTEwYThmIDEwMDY0NAotLS0gYS9Tb3VyY2Uv
V2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9jaHJvbWl1bS9MYXllckNocm9taXVtLmgKKysrIGIv
U291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvY2hyb21pdW0vTGF5ZXJDaHJvbWl1bS5o
CkBAIC01Nyw2ICs1Nyw3IEBACiAKIG5hbWVzcGFjZSBXZWJDb3JlIHsKIAorY2xhc3MgQ0NBY3Rp
dmVBbmltYXRpb247CiBzdHJ1Y3QgQ0NBbmltYXRpb25FdmVudDsKIGNsYXNzIENDTGF5ZXJBbmlt
YXRpb25EZWxlZ2F0ZTsKIGNsYXNzIENDTGF5ZXJJbXBsOwpAQCAtMjM0LDcgKzIzNSw3IEBAIHB1
YmxpYzoKICAgICB2b2lkIHNldEFsd2F5c1Jlc2VydmVUZXh0dXJlcyhib29sIGFsd2F5c1Jlc2Vy
dmVUZXh0dXJlcykgeyBtX2Fsd2F5c1Jlc2VydmVUZXh0dXJlcyA9IGFsd2F5c1Jlc2VydmVUZXh0
dXJlczsgfQogICAgIGJvb2wgYWx3YXlzUmVzZXJ2ZVRleHR1cmVzKCkgY29uc3QgeyByZXR1cm4g
bV9hbHdheXNSZXNlcnZlVGV4dHVyZXM7IH0KIAotICAgIGJvb2wgYWRkQW5pbWF0aW9uKGNvbnN0
IEtleWZyYW1lVmFsdWVMaXN0JiwgY29uc3QgSW50U2l6ZSYgYm94U2l6ZSwgY29uc3QgQW5pbWF0
aW9uKiwgaW50IGFuaW1hdGlvbklkLCBpbnQgZ3JvdXBJZCwgZG91YmxlIHRpbWVPZmZzZXQpOwor
ICAgIGJvb2wgYWRkQW5pbWF0aW9uKFBhc3NPd25QdHI8Q0NBY3RpdmVBbmltYXRpb24+KTsKICAg
ICB2b2lkIHBhdXNlQW5pbWF0aW9uKGludCBhbmltYXRpb25JZCwgZG91YmxlIHRpbWVPZmZzZXQp
OwogICAgIHZvaWQgcmVtb3ZlQW5pbWF0aW9uKGludCBhbmltYXRpb25JZCk7CiAKZGlmZiAtLWdp
dCBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2Nocm9taXVtL0xpbmtIaWdobGln
aHQuY3BwIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvY2hyb21pdW0vTGlua0hp
Z2hsaWdodC5jcHAKaW5kZXggYmNiN2IzYzM2YzdiOGUxODRjZDIwNjdkZmE1YTBhNDUwYzViODY3
OS4uYmVhMzJjMGEzNTc5YWY1NzFmYzdmMDUyYTc0ZGJkYzdmYjlkZTY3OCAxMDA2NDQKLS0tIGEv
U291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvY2hyb21pdW0vTGlua0hpZ2hsaWdodC5j
cHAKKysrIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvY2hyb21pdW0vTGlua0hp
Z2hsaWdodC5jcHAKQEAgLTc2LDcgKzc2LDcgQEAgTGlua0hpZ2hsaWdodDo6TGlua0hpZ2hsaWdo
dChHcmFwaGljc0xheWVyQ2hyb21pdW0qIHBhcmVudCwgY29uc3QgUGF0aCYgcGF0aCwgaW4KICAg
ICAvLyBhbmltYXRpb25JZCA9IDEgaXMgcmVzZXJ2ZWQgZm9yIHVzLgogICAgIE93blB0cjxDQ0Fj
dGl2ZUFuaW1hdGlvbj4gYW5pbWF0aW9uKENDQWN0aXZlQW5pbWF0aW9uOjpjcmVhdGUoY3VydmUu
cmVsZWFzZSgpLCBhbmltYXRpb25JZCwgZ3JvdXBJZCwgQ0NBY3RpdmVBbmltYXRpb246Ok9wYWNp
dHkpKTsKICAgICBhbmltYXRpb24tPnNldE5lZWRzU3luY2hyb25pemVkU3RhcnRUaW1lKHRydWUp
OwotICAgIG1fY29udGVudExheWVyLT5sYXllckFuaW1hdGlvbkNvbnRyb2xsZXIoKS0+YWRkKGFu
aW1hdGlvbi5yZWxlYXNlKCkpOworICAgIG1fY29udGVudExheWVyLT5sYXllckFuaW1hdGlvbkNv
bnRyb2xsZXIoKS0+YWRkQW5pbWF0aW9uKGFuaW1hdGlvbi5yZWxlYXNlKCkpOwogfQogCiBMaW5r
SGlnaGxpZ2h0Ojp+TGlua0hpZ2hsaWdodCgpCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9w
bGF0Zm9ybS9ncmFwaGljcy9jaHJvbWl1bS9jYy9DQ0FuaW1hdGlvbkN1cnZlLmggYi9Tb3VyY2Uv
V2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9jaHJvbWl1bS9jYy9DQ0FuaW1hdGlvbkN1cnZlLmgK
aW5kZXggZTIxZGU4OTY0NzU3NWJmZTY5YmVjZWUzOTgyYjI5NTJkNWUyMmMwYy4uMGU0NThlYjJi
Nzk4Mzk2YWVjMGM0YzU2Mzk1OWY3Y2Y5M2MxZTkyZSAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNv
cmUvcGxhdGZvcm0vZ3JhcGhpY3MvY2hyb21pdW0vY2MvQ0NBbmltYXRpb25DdXJ2ZS5oCisrKyBi
L1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2Nocm9taXVtL2NjL0NDQW5pbWF0aW9u
Q3VydmUuaApAQCAtNjUsNyArNjUsNyBAQCBjbGFzcyBDQ1RyYW5zZm9ybUFuaW1hdGlvbkN1cnZl
IDogcHVibGljIENDQW5pbWF0aW9uQ3VydmUgewogcHVibGljOgogICAgIHZpcnR1YWwgfkNDVHJh
bnNmb3JtQW5pbWF0aW9uQ3VydmUoKSB7IH0KIAotICAgIHZpcnR1YWwgV2ViS2l0OjpXZWJUcmFu
c2Zvcm1hdGlvbk1hdHJpeCBnZXRWYWx1ZShkb3VibGUgdCwgY29uc3QgSW50U2l6ZSYgbGF5ZXJT
aXplKSBjb25zdCA9IDA7CisgICAgdmlydHVhbCBXZWJLaXQ6OldlYlRyYW5zZm9ybWF0aW9uTWF0
cml4IGdldFZhbHVlKGRvdWJsZSB0KSBjb25zdCA9IDA7CiAKICAgICAvLyBQYXJ0aWFsIENDQW5p
bWF0aW9uIGltcGxlbWVudGF0aW9uLgogICAgIHZpcnR1YWwgVHlwZSB0eXBlKCkgY29uc3QgT1ZF
UlJJREUgeyByZXR1cm4gVHJhbnNmb3JtOyB9CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9w
bGF0Zm9ybS9ncmFwaGljcy9jaHJvbWl1bS9jYy9DQ0tleWZyYW1lZEFuaW1hdGlvbkN1cnZlLmNw
cCBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2Nocm9taXVtL2NjL0NDS2V5ZnJh
bWVkQW5pbWF0aW9uQ3VydmUuY3BwCmluZGV4IDRkYjM5YjY5YTAwMWZjODczZjI1NDUzNGJkNzcy
Y2EwNDQ0MWFlZmYuLmJiNGQ0NzgzNGFhMjY1ZmYwYmZiYzdlZjEzODg5MDQyZDE3OWE5ZjIgMTAw
NjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2Nocm9taXVtL2NjL0ND
S2V5ZnJhbWVkQW5pbWF0aW9uQ3VydmUuY3BwCisrKyBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3Jt
L2dyYXBoaWNzL2Nocm9taXVtL2NjL0NDS2V5ZnJhbWVkQW5pbWF0aW9uQ3VydmUuY3BwCkBAIC0y
NiwxNSArMjYsNiBAQAogCiAjaW5jbHVkZSAiY2MvQ0NLZXlmcmFtZWRBbmltYXRpb25DdXJ2ZS5o
IgogCi0jaW5jbHVkZSAiSWRlbnRpdHlUcmFuc2Zvcm1PcGVyYXRpb24uaCIKLSNpbmNsdWRlICJN
YXRyaXgzRFRyYW5zZm9ybU9wZXJhdGlvbi5oIgotI2luY2x1ZGUgIk1hdHJpeFRyYW5zZm9ybU9w
ZXJhdGlvbi5oIgotI2luY2x1ZGUgIlBlcnNwZWN0aXZlVHJhbnNmb3JtT3BlcmF0aW9uLmgiCi0j
aW5jbHVkZSAiUm90YXRlVHJhbnNmb3JtT3BlcmF0aW9uLmgiCi0jaW5jbHVkZSAiU2NhbGVUcmFu
c2Zvcm1PcGVyYXRpb24uaCIKLSNpbmNsdWRlICJTa2V3VHJhbnNmb3JtT3BlcmF0aW9uLmgiCi0j
aW5jbHVkZSAiVHJhbnNsYXRlVHJhbnNmb3JtT3BlcmF0aW9uLmgiCi0KICNpbmNsdWRlIDx3dGYv
T3duUHRyLmg+CiAKIHVzaW5nIFdlYktpdDo6V2ViVHJhbnNmb3JtYXRpb25NYXRyaXg7CkBAIC0x
MTYsMTIgKzEwNywxMiBAQCBQYXNzT3duUHRyPENDRmxvYXRLZXlmcmFtZT4gQ0NGbG9hdEtleWZy
YW1lOjpjbG9uZSgpIGNvbnN0CiAgICAgcmV0dXJuIENDRmxvYXRLZXlmcmFtZTo6Y3JlYXRlKHRp
bWUoKSwgdmFsdWUoKSwgdGltaW5nRnVuY3Rpb24oKSA/IGNsb25lVGltaW5nRnVuY3Rpb24odGlt
aW5nRnVuY3Rpb24oKSkgOiBudWxscHRyKTsKIH0KIAotUGFzc093blB0cjxDQ1RyYW5zZm9ybUtl
eWZyYW1lPiBDQ1RyYW5zZm9ybUtleWZyYW1lOjpjcmVhdGUoZG91YmxlIHRpbWUsIGNvbnN0IFRy
YW5zZm9ybU9wZXJhdGlvbnMmIHZhbHVlLCBQYXNzT3duUHRyPENDVGltaW5nRnVuY3Rpb24+IHRp
bWluZ0Z1bmN0aW9uKQorUGFzc093blB0cjxDQ1RyYW5zZm9ybUtleWZyYW1lPiBDQ1RyYW5zZm9y
bUtleWZyYW1lOjpjcmVhdGUoZG91YmxlIHRpbWUsIGNvbnN0IFdlYktpdDo6V2ViVHJhbnNmb3Jt
T3BlcmF0aW9ucyYgdmFsdWUsIFBhc3NPd25QdHI8Q0NUaW1pbmdGdW5jdGlvbj4gdGltaW5nRnVu
Y3Rpb24pCiB7CiAgICAgcmV0dXJuIGFkb3B0UHRyKG5ldyBDQ1RyYW5zZm9ybUtleWZyYW1lKHRp
bWUsIHZhbHVlLCB0aW1pbmdGdW5jdGlvbikpOwogfQogCi1DQ1RyYW5zZm9ybUtleWZyYW1lOjpD
Q1RyYW5zZm9ybUtleWZyYW1lKGRvdWJsZSB0aW1lLCBjb25zdCBUcmFuc2Zvcm1PcGVyYXRpb25z
JiB2YWx1ZSwgUGFzc093blB0cjxDQ1RpbWluZ0Z1bmN0aW9uPiB0aW1pbmdGdW5jdGlvbikKK0ND
VHJhbnNmb3JtS2V5ZnJhbWU6OkNDVHJhbnNmb3JtS2V5ZnJhbWUoZG91YmxlIHRpbWUsIGNvbnN0
IFdlYktpdDo6V2ViVHJhbnNmb3JtT3BlcmF0aW9ucyYgdmFsdWUsIFBhc3NPd25QdHI8Q0NUaW1p
bmdGdW5jdGlvbj4gdGltaW5nRnVuY3Rpb24pCiAgICAgOiBDQ0tleWZyYW1lKHRpbWUsIHRpbWlu
Z0Z1bmN0aW9uKQogICAgICwgbV92YWx1ZSh2YWx1ZSkKIHsKQEAgLTEzMSw3OCArMTIyLDE0IEBA
IENDVHJhbnNmb3JtS2V5ZnJhbWU6On5DQ1RyYW5zZm9ybUtleWZyYW1lKCkKIHsKIH0KIAotY29u
c3QgVHJhbnNmb3JtT3BlcmF0aW9ucyYgQ0NUcmFuc2Zvcm1LZXlmcmFtZTo6dmFsdWUoKSBjb25z
dAorY29uc3QgV2ViS2l0OjpXZWJUcmFuc2Zvcm1PcGVyYXRpb25zJiBDQ1RyYW5zZm9ybUtleWZy
YW1lOjp2YWx1ZSgpIGNvbnN0CiB7CiAgICAgcmV0dXJuIG1fdmFsdWU7CiB9CiAKIFBhc3NPd25Q
dHI8Q0NUcmFuc2Zvcm1LZXlmcmFtZT4gQ0NUcmFuc2Zvcm1LZXlmcmFtZTo6Y2xvbmUoKSBjb25z
dAogewotICAgIC8vIFdlIG5lZWQgdG8gZG8gYSBkZWVwIGNvcHkgdGhlIG1fdmFsdWUgbWF5IGNv
bnRhaW4gcmVmIHBvaW50ZXJzIHRvIFRyYW5zZm9ybU9wZXJhdGlvbiBvYmplY3RzLgotICAgIFRy
YW5zZm9ybU9wZXJhdGlvbnMgb3BlcmF0aW9uczsKLSAgICBmb3IgKHNpemVfdCBqID0gMDsgaiA8
IG1fdmFsdWUuc2l6ZSgpOyArK2opIHsKLSAgICAgICAgVHJhbnNmb3JtT3BlcmF0aW9uOjpPcGVy
YXRpb25UeXBlIG9wZXJhdGlvblR5cGUgPSBtX3ZhbHVlLm9wZXJhdGlvbnMoKVtqXS0+Z2V0T3Bl
cmF0aW9uVHlwZSgpOwotICAgICAgICBzd2l0Y2ggKG9wZXJhdGlvblR5cGUpIHsKLSAgICAgICAg
Y2FzZSBUcmFuc2Zvcm1PcGVyYXRpb246OlNDQUxFX1g6Ci0gICAgICAgIGNhc2UgVHJhbnNmb3Jt
T3BlcmF0aW9uOjpTQ0FMRV9ZOgotICAgICAgICBjYXNlIFRyYW5zZm9ybU9wZXJhdGlvbjo6U0NB
TEVfWjoKLSAgICAgICAgY2FzZSBUcmFuc2Zvcm1PcGVyYXRpb246OlNDQUxFXzNEOgotICAgICAg
ICBjYXNlIFRyYW5zZm9ybU9wZXJhdGlvbjo6U0NBTEU6IHsKLSAgICAgICAgICAgIFNjYWxlVHJh
bnNmb3JtT3BlcmF0aW9uKiB0cmFuc2Zvcm0gPSBzdGF0aWNfY2FzdDxTY2FsZVRyYW5zZm9ybU9w
ZXJhdGlvbio+KG1fdmFsdWUub3BlcmF0aW9ucygpW2pdLmdldCgpKTsKLSAgICAgICAgICAgIG9w
ZXJhdGlvbnMub3BlcmF0aW9ucygpLmFwcGVuZChTY2FsZVRyYW5zZm9ybU9wZXJhdGlvbjo6Y3Jl
YXRlKHRyYW5zZm9ybS0+eCgpLCB0cmFuc2Zvcm0tPnkoKSwgdHJhbnNmb3JtLT56KCksIG9wZXJh
dGlvblR5cGUpKTsKLSAgICAgICAgICAgIGJyZWFrOwotICAgICAgICB9Ci0gICAgICAgIGNhc2Ug
VHJhbnNmb3JtT3BlcmF0aW9uOjpUUkFOU0xBVEVfWDoKLSAgICAgICAgY2FzZSBUcmFuc2Zvcm1P
cGVyYXRpb246OlRSQU5TTEFURV9ZOgotICAgICAgICBjYXNlIFRyYW5zZm9ybU9wZXJhdGlvbjo6
VFJBTlNMQVRFX1o6Ci0gICAgICAgIGNhc2UgVHJhbnNmb3JtT3BlcmF0aW9uOjpUUkFOU0xBVEVf
M0Q6Ci0gICAgICAgIGNhc2UgVHJhbnNmb3JtT3BlcmF0aW9uOjpUUkFOU0xBVEU6IHsKLSAgICAg
ICAgICAgIFRyYW5zbGF0ZVRyYW5zZm9ybU9wZXJhdGlvbiogdHJhbnNmb3JtID0gc3RhdGljX2Nh
c3Q8VHJhbnNsYXRlVHJhbnNmb3JtT3BlcmF0aW9uKj4obV92YWx1ZS5vcGVyYXRpb25zKClbal0u
Z2V0KCkpOwotICAgICAgICAgICAgb3BlcmF0aW9ucy5vcGVyYXRpb25zKCkuYXBwZW5kKFRyYW5z
bGF0ZVRyYW5zZm9ybU9wZXJhdGlvbjo6Y3JlYXRlKHRyYW5zZm9ybS0+eCgpLCB0cmFuc2Zvcm0t
PnkoKSwgdHJhbnNmb3JtLT56KCksIG9wZXJhdGlvblR5cGUpKTsKLSAgICAgICAgICAgIGJyZWFr
OwotICAgICAgICB9Ci0gICAgICAgIGNhc2UgVHJhbnNmb3JtT3BlcmF0aW9uOjpST1RBVEVfWDoK
LSAgICAgICAgY2FzZSBUcmFuc2Zvcm1PcGVyYXRpb246OlJPVEFURV9ZOgotICAgICAgICBjYXNl
IFRyYW5zZm9ybU9wZXJhdGlvbjo6Uk9UQVRFXzNEOgotICAgICAgICBjYXNlIFRyYW5zZm9ybU9w
ZXJhdGlvbjo6Uk9UQVRFOiB7Ci0gICAgICAgICAgICBSb3RhdGVUcmFuc2Zvcm1PcGVyYXRpb24q
IHRyYW5zZm9ybSA9IHN0YXRpY19jYXN0PFJvdGF0ZVRyYW5zZm9ybU9wZXJhdGlvbio+KG1fdmFs
dWUub3BlcmF0aW9ucygpW2pdLmdldCgpKTsKLSAgICAgICAgICAgIG9wZXJhdGlvbnMub3BlcmF0
aW9ucygpLmFwcGVuZChSb3RhdGVUcmFuc2Zvcm1PcGVyYXRpb246OmNyZWF0ZSh0cmFuc2Zvcm0t
PngoKSwgdHJhbnNmb3JtLT55KCksIHRyYW5zZm9ybS0+eigpLCB0cmFuc2Zvcm0tPmFuZ2xlKCks
IG9wZXJhdGlvblR5cGUpKTsKLSAgICAgICAgICAgIGJyZWFrOwotICAgICAgICB9Ci0gICAgICAg
IGNhc2UgVHJhbnNmb3JtT3BlcmF0aW9uOjpTS0VXX1g6Ci0gICAgICAgIGNhc2UgVHJhbnNmb3Jt
T3BlcmF0aW9uOjpTS0VXX1k6Ci0gICAgICAgIGNhc2UgVHJhbnNmb3JtT3BlcmF0aW9uOjpTS0VX
OiB7Ci0gICAgICAgICAgICBTa2V3VHJhbnNmb3JtT3BlcmF0aW9uKiB0cmFuc2Zvcm0gPSBzdGF0
aWNfY2FzdDxTa2V3VHJhbnNmb3JtT3BlcmF0aW9uKj4obV92YWx1ZS5vcGVyYXRpb25zKClbal0u
Z2V0KCkpOwotICAgICAgICAgICAgb3BlcmF0aW9ucy5vcGVyYXRpb25zKCkuYXBwZW5kKFNrZXdU
cmFuc2Zvcm1PcGVyYXRpb246OmNyZWF0ZSh0cmFuc2Zvcm0tPmFuZ2xlWCgpLCB0cmFuc2Zvcm0t
PmFuZ2xlWSgpLCBvcGVyYXRpb25UeXBlKSk7Ci0gICAgICAgICAgICBicmVhazsKLSAgICAgICAg
fQotICAgICAgICBjYXNlIFRyYW5zZm9ybU9wZXJhdGlvbjo6TUFUUklYOiB7Ci0gICAgICAgICAg
ICBNYXRyaXhUcmFuc2Zvcm1PcGVyYXRpb24qIHRyYW5zZm9ybSA9IHN0YXRpY19jYXN0PE1hdHJp
eFRyYW5zZm9ybU9wZXJhdGlvbio+KG1fdmFsdWUub3BlcmF0aW9ucygpW2pdLmdldCgpKTsKLSAg
ICAgICAgICAgIFdlYlRyYW5zZm9ybWF0aW9uTWF0cml4IG0gPSBXZWJUcmFuc2Zvcm1hdGlvbk1h
dHJpeCh0cmFuc2Zvcm0tPm1hdHJpeCgpKTsKLSAgICAgICAgICAgIG9wZXJhdGlvbnMub3BlcmF0
aW9ucygpLmFwcGVuZChNYXRyaXhUcmFuc2Zvcm1PcGVyYXRpb246OmNyZWF0ZShtLmEoKSwgbS5i
KCksIG0uYygpLCBtLmQoKSwgbS5lKCksIG0uZigpKSk7Ci0gICAgICAgICAgICBicmVhazsKLSAg
ICAgICAgfQotICAgICAgICBjYXNlIFRyYW5zZm9ybU9wZXJhdGlvbjo6TUFUUklYXzNEOiB7Ci0g
ICAgICAgICAgICBNYXRyaXgzRFRyYW5zZm9ybU9wZXJhdGlvbiogdHJhbnNmb3JtID0gc3RhdGlj
X2Nhc3Q8TWF0cml4M0RUcmFuc2Zvcm1PcGVyYXRpb24qPihtX3ZhbHVlLm9wZXJhdGlvbnMoKVtq
XS5nZXQoKSk7Ci0gICAgICAgICAgICBvcGVyYXRpb25zLm9wZXJhdGlvbnMoKS5hcHBlbmQoTWF0
cml4M0RUcmFuc2Zvcm1PcGVyYXRpb246OmNyZWF0ZSh0cmFuc2Zvcm0tPm1hdHJpeCgpKSk7Ci0g
ICAgICAgICAgICBicmVhazsKLSAgICAgICAgfQotICAgICAgICBjYXNlIFRyYW5zZm9ybU9wZXJh
dGlvbjo6UEVSU1BFQ1RJVkU6IHsKLSAgICAgICAgICAgIFBlcnNwZWN0aXZlVHJhbnNmb3JtT3Bl
cmF0aW9uKiB0cmFuc2Zvcm0gPSBzdGF0aWNfY2FzdDxQZXJzcGVjdGl2ZVRyYW5zZm9ybU9wZXJh
dGlvbio+KG1fdmFsdWUub3BlcmF0aW9ucygpW2pdLmdldCgpKTsKLSAgICAgICAgICAgIG9wZXJh
dGlvbnMub3BlcmF0aW9ucygpLmFwcGVuZChQZXJzcGVjdGl2ZVRyYW5zZm9ybU9wZXJhdGlvbjo6
Y3JlYXRlKHRyYW5zZm9ybS0+cGVyc3BlY3RpdmUoKSkpOwotICAgICAgICAgICAgYnJlYWs7Ci0g
ICAgICAgIH0KLSAgICAgICAgY2FzZSBUcmFuc2Zvcm1PcGVyYXRpb246OklERU5USVRZOiB7Ci0g
ICAgICAgICAgICBvcGVyYXRpb25zLm9wZXJhdGlvbnMoKS5hcHBlbmQoSWRlbnRpdHlUcmFuc2Zv
cm1PcGVyYXRpb246OmNyZWF0ZSgpKTsKLSAgICAgICAgICAgIGJyZWFrOwotICAgICAgICB9Ci0g
ICAgICAgIGNhc2UgVHJhbnNmb3JtT3BlcmF0aW9uOjpOT05FOgotICAgICAgICAgICAgLy8gRG8g
bm90aGluZy4KLSAgICAgICAgICAgIGJyZWFrOwotICAgICAgICB9IC8vIHN3aXRjaAotICAgIH0g
Ly8gZm9yIGVhY2ggb3BlcmF0aW9uCi0KLSAgICByZXR1cm4gQ0NUcmFuc2Zvcm1LZXlmcmFtZTo6
Y3JlYXRlKHRpbWUoKSwgb3BlcmF0aW9ucywgdGltaW5nRnVuY3Rpb24oKSA/IGNsb25lVGltaW5n
RnVuY3Rpb24odGltaW5nRnVuY3Rpb24oKSkgOiBudWxscHRyKTsKKyAgICByZXR1cm4gQ0NUcmFu
c2Zvcm1LZXlmcmFtZTo6Y3JlYXRlKHRpbWUoKSwgdmFsdWUoKSwgdGltaW5nRnVuY3Rpb24oKSA/
IGNsb25lVGltaW5nRnVuY3Rpb24odGltaW5nRnVuY3Rpb24oKSkgOiBudWxscHRyKTsKIH0KIAog
UGFzc093blB0cjxDQ0tleWZyYW1lZEZsb2F0QW5pbWF0aW9uQ3VydmU+IENDS2V5ZnJhbWVkRmxv
YXRBbmltYXRpb25DdXJ2ZTo6Y3JlYXRlKCkKQEAgLTI4OSwyMCArMjE2LDEzIEBAIFBhc3NPd25Q
dHI8Q0NBbmltYXRpb25DdXJ2ZT4gQ0NLZXlmcmFtZWRUcmFuc2Zvcm1BbmltYXRpb25DdXJ2ZTo6
Y2xvbmUoKSBjb25zdAogICAgIHJldHVybiB0b1JldHVybi5yZWxlYXNlKCk7CiB9CiAKLVdlYlRy
YW5zZm9ybWF0aW9uTWF0cml4IENDS2V5ZnJhbWVkVHJhbnNmb3JtQW5pbWF0aW9uQ3VydmU6Omdl
dFZhbHVlKGRvdWJsZSB0LCBjb25zdCBJbnRTaXplJiBsYXllclNpemUpIGNvbnN0CitXZWJUcmFu
c2Zvcm1hdGlvbk1hdHJpeCBDQ0tleWZyYW1lZFRyYW5zZm9ybUFuaW1hdGlvbkN1cnZlOjpnZXRW
YWx1ZShkb3VibGUgdCkgY29uc3QKIHsKLSAgICAvLyBOb3RlOiBXZWJDb3JlIGRhdGEgdHlwZSB1
c2VkIGhlcmUsIGp1c3QgZm9yIG5vdy4KLSAgICBUcmFuc2Zvcm1hdGlvbk1hdHJpeCB0cmFuc2Zv
cm1NYXRyaXg7Ci0KLSAgICBpZiAodCA8PSBtX2tleWZyYW1lcy5maXJzdCgpLT50aW1lKCkpIHsK
LSAgICAgICAgbV9rZXlmcmFtZXMuZmlyc3QoKS0+dmFsdWUoKS5hcHBseShsYXllclNpemUsIHRy
YW5zZm9ybU1hdHJpeCk7Ci0gICAgICAgIHJldHVybiBXZWJUcmFuc2Zvcm1hdGlvbk1hdHJpeCh0
cmFuc2Zvcm1NYXRyaXgpOwotICAgIH0KKyAgICBpZiAodCA8PSBtX2tleWZyYW1lcy5maXJzdCgp
LT50aW1lKCkpCisgICAgICAgIHJldHVybiBtX2tleWZyYW1lcy5maXJzdCgpLT52YWx1ZSgpLmFw
cGx5KCk7CiAKLSAgICBpZiAodCA+PSBtX2tleWZyYW1lcy5sYXN0KCktPnRpbWUoKSkgewotICAg
ICAgICBtX2tleWZyYW1lcy5sYXN0KCktPnZhbHVlKCkuYXBwbHkobGF5ZXJTaXplLCB0cmFuc2Zv
cm1NYXRyaXgpOwotICAgICAgICByZXR1cm4gV2ViVHJhbnNmb3JtYXRpb25NYXRyaXgodHJhbnNm
b3JtTWF0cml4KTsKLSAgICB9CisgICAgaWYgKHQgPj0gbV9rZXlmcmFtZXMubGFzdCgpLT50aW1l
KCkpCisgICAgICAgIHJldHVybiBtX2tleWZyYW1lcy5sYXN0KCktPnZhbHVlKCkuYXBwbHkoKTsK
IAogICAgIHNpemVfdCBpID0gMDsKICAgICBmb3IgKDsgaSA8IG1fa2V5ZnJhbWVzLnNpemUoKSAt
IDE7ICsraSkgewpAQCAtMzE1LDIwICsyMzUsNyBAQCBXZWJUcmFuc2Zvcm1hdGlvbk1hdHJpeCBD
Q0tleWZyYW1lZFRyYW5zZm9ybUFuaW1hdGlvbkN1cnZlOjpnZXRWYWx1ZShkb3VibGUgdCwgYwog
ICAgIGlmIChtX2tleWZyYW1lc1tpXS0+dGltaW5nRnVuY3Rpb24oKSkKICAgICAgICAgcHJvZ3Jl
c3MgPSBtX2tleWZyYW1lc1tpXS0+dGltaW5nRnVuY3Rpb24oKS0+Z2V0VmFsdWUocHJvZ3Jlc3Mp
OwogCi0gICAgaWYgKG1fa2V5ZnJhbWVzW2ldLT52YWx1ZSgpLm9wZXJhdGlvbnNNYXRjaChtX2tl
eWZyYW1lc1tpKzFdLT52YWx1ZSgpKSkgewotICAgICAgICBmb3IgKHNpemVfdCBqID0gMDsgaiA8
IG1fa2V5ZnJhbWVzW2krMV0tPnZhbHVlKCkuc2l6ZSgpOyArK2opCi0gICAgICAgICAgICBtX2tl
eWZyYW1lc1tpKzFdLT52YWx1ZSgpLm9wZXJhdGlvbnMoKVtqXS0+YmxlbmQobV9rZXlmcmFtZXNb
aV0tPnZhbHVlKCkuYXQoaiksIHByb2dyZXNzKS0+YXBwbHkodHJhbnNmb3JtTWF0cml4LCBsYXll
clNpemUpOwotICAgIH0gZWxzZSB7Ci0gICAgICAgIC8vIE5vdGU6IFdlYkNvcmUgZGF0YSB0eXBl
IHVzZWQgaGVyZSwganVzdCBmb3Igbm93LgotICAgICAgICBUcmFuc2Zvcm1hdGlvbk1hdHJpeCBz
b3VyY2U7Ci0KLSAgICAgICAgbV9rZXlmcmFtZXNbaV0tPnZhbHVlKCkuYXBwbHkobGF5ZXJTaXpl
LCBzb3VyY2UpOwotICAgICAgICBtX2tleWZyYW1lc1tpKzFdLT52YWx1ZSgpLmFwcGx5KGxheWVy
U2l6ZSwgdHJhbnNmb3JtTWF0cml4KTsKLQotICAgICAgICB0cmFuc2Zvcm1NYXRyaXguYmxlbmQo
c291cmNlLCBwcm9ncmVzcyk7Ci0gICAgfQotCi0gICAgcmV0dXJuIFdlYlRyYW5zZm9ybWF0aW9u
TWF0cml4KHRyYW5zZm9ybU1hdHJpeCk7CisgICAgcmV0dXJuIG1fa2V5ZnJhbWVzW2krMV0tPnZh
bHVlKCkuYmxlbmQobV9rZXlmcmFtZXNbaV0tPnZhbHVlKCksIHByb2dyZXNzKTsKIH0KIAogfSAv
LyBuYW1lc3BhY2UgV2ViQ29yZQpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0v
Z3JhcGhpY3MvY2hyb21pdW0vY2MvQ0NLZXlmcmFtZWRBbmltYXRpb25DdXJ2ZS5oIGIvU291cmNl
L1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvY2hyb21pdW0vY2MvQ0NLZXlmcmFtZWRBbmltYXRp
b25DdXJ2ZS5oCmluZGV4IGU3MGNkYWZiNzViMjk4MDliMGVkYmUzOTBjN2FiYWM5OTBhNWNiZDAu
LjExMWNhODFjZTc1MTY3OTdlMDQ0MmZiNzI5ZWIzMGFiYWVhNTM3YmEgMTAwNjQ0Ci0tLSBhL1Nv
dXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2Nocm9taXVtL2NjL0NDS2V5ZnJhbWVkQW5p
bWF0aW9uQ3VydmUuaAorKysgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9jaHJv
bWl1bS9jYy9DQ0tleWZyYW1lZEFuaW1hdGlvbkN1cnZlLmgKQEAgLTI1LDEyICsyNSwxNCBAQAog
I2lmbmRlZiBDQ0tleWZyYW1lZEFuaW1hdGlvbkN1cnZlX2gKICNkZWZpbmUgQ0NLZXlmcmFtZWRB
bmltYXRpb25DdXJ2ZV9oCiAKLSNpbmNsdWRlICJUcmFuc2Zvcm1PcGVyYXRpb25zLmgiCiAjaW5j
bHVkZSAiY2MvQ0NBbmltYXRpb25DdXJ2ZS5oIgogI2luY2x1ZGUgImNjL0NDVGltaW5nRnVuY3Rp
b24uaCIKIAorI2luY2x1ZGUgPHB1YmxpYy9XZWJUcmFuc2Zvcm1PcGVyYXRpb25zLmg+CisKICNp
bmNsdWRlIDx3dGYvT3duUHRyLmg+CiAjaW5jbHVkZSA8d3RmL1Bhc3NPd25QdHIuaD4KKyNpbmNs
dWRlIDx3dGYvVmVjdG9yLmg+CiAKIG5hbWVzcGFjZSBXZWJDb3JlIHsKIApAQCAtNjUsMTcgKzY3
LDE3IEBAIHByaXZhdGU6CiAKIGNsYXNzIENDVHJhbnNmb3JtS2V5ZnJhbWUgOiBwdWJsaWMgQ0NL
ZXlmcmFtZSB7CiBwdWJsaWM6Ci0gICAgc3RhdGljIFBhc3NPd25QdHI8Q0NUcmFuc2Zvcm1LZXlm
cmFtZT4gY3JlYXRlKGRvdWJsZSB0aW1lLCBjb25zdCBUcmFuc2Zvcm1PcGVyYXRpb25zJiB2YWx1
ZSwgUGFzc093blB0cjxDQ1RpbWluZ0Z1bmN0aW9uPik7CisgICAgc3RhdGljIFBhc3NPd25QdHI8
Q0NUcmFuc2Zvcm1LZXlmcmFtZT4gY3JlYXRlKGRvdWJsZSB0aW1lLCBjb25zdCBXZWJLaXQ6Oldl
YlRyYW5zZm9ybU9wZXJhdGlvbnMmIHZhbHVlLCBQYXNzT3duUHRyPENDVGltaW5nRnVuY3Rpb24+
KTsKICAgICB2aXJ0dWFsIH5DQ1RyYW5zZm9ybUtleWZyYW1lKCk7CiAKLSAgICBjb25zdCBUcmFu
c2Zvcm1PcGVyYXRpb25zJiB2YWx1ZSgpIGNvbnN0OworICAgIGNvbnN0IFdlYktpdDo6V2ViVHJh
bnNmb3JtT3BlcmF0aW9ucyYgdmFsdWUoKSBjb25zdDsKIAogICAgIFBhc3NPd25QdHI8Q0NUcmFu
c2Zvcm1LZXlmcmFtZT4gY2xvbmUoKSBjb25zdDsKIAogcHJpdmF0ZToKLSAgICBDQ1RyYW5zZm9y
bUtleWZyYW1lKGRvdWJsZSB0aW1lLCBjb25zdCBUcmFuc2Zvcm1PcGVyYXRpb25zJiB2YWx1ZSwg
UGFzc093blB0cjxDQ1RpbWluZ0Z1bmN0aW9uPik7CisgICAgQ0NUcmFuc2Zvcm1LZXlmcmFtZShk
b3VibGUgdGltZSwgY29uc3QgV2ViS2l0OjpXZWJUcmFuc2Zvcm1PcGVyYXRpb25zJiB2YWx1ZSwg
UGFzc093blB0cjxDQ1RpbWluZ0Z1bmN0aW9uPik7CiAKLSAgICBUcmFuc2Zvcm1PcGVyYXRpb25z
IG1fdmFsdWU7CisgICAgV2ViS2l0OjpXZWJUcmFuc2Zvcm1PcGVyYXRpb25zIG1fdmFsdWU7CiB9
OwogCiBjbGFzcyBDQ0tleWZyYW1lZEZsb2F0QW5pbWF0aW9uQ3VydmUgOiBwdWJsaWMgQ0NGbG9h
dEFuaW1hdGlvbkN1cnZlIHsKQEAgLTExNiw3ICsxMTgsNyBAQCBwdWJsaWM6CiAgICAgdmlydHVh
bCBQYXNzT3duUHRyPENDQW5pbWF0aW9uQ3VydmU+IGNsb25lKCkgY29uc3QgT1ZFUlJJREU7CiAK
ICAgICAvLyBDQ1RyYW5zZm9ybUFuaW1hdGlvbkN1cnZlIGltcGxlbWVudGF0aW9uCi0gICAgdmly
dHVhbCBXZWJLaXQ6OldlYlRyYW5zZm9ybWF0aW9uTWF0cml4IGdldFZhbHVlKGRvdWJsZSB0LCBj
b25zdCBJbnRTaXplJikgY29uc3QgT1ZFUlJJREU7CisgICAgdmlydHVhbCBXZWJLaXQ6OldlYlRy
YW5zZm9ybWF0aW9uTWF0cml4IGdldFZhbHVlKGRvdWJsZSB0KSBjb25zdCBPVkVSUklERTsKIAog
cHJpdmF0ZToKICAgICBDQ0tleWZyYW1lZFRyYW5zZm9ybUFuaW1hdGlvbkN1cnZlKCk7CmRpZmYg
LS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9jaHJvbWl1bS9jYy9DQ0xh
eWVyQW5pbWF0aW9uQ29udHJvbGxlci5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFw
aGljcy9jaHJvbWl1bS9jYy9DQ0xheWVyQW5pbWF0aW9uQ29udHJvbGxlci5jcHAKaW5kZXggMDk2
OTc5NTQ0ODNhNTc5MmYyZTQyOGQzMGYwYTJlNGZjY2NkYWZmNi4uNjY2MTlhZjkxYTYxYzA3NzFi
ZTY0N2MxZTBhMzZmM2QwYmI3ZGViNSAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvcGxhdGZv
cm0vZ3JhcGhpY3MvY2hyb21pdW0vY2MvQ0NMYXllckFuaW1hdGlvbkNvbnRyb2xsZXIuY3BwCisr
KyBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2Nocm9taXVtL2NjL0NDTGF5ZXJB
bmltYXRpb25Db250cm9sbGVyLmNwcApAQCAtMzcsOTQgKzM3LDYgQEAgdXNpbmcgV2ViS2l0OjpX
ZWJUcmFuc2Zvcm1hdGlvbk1hdHJpeDsKIAogbmFtZXNwYWNlIFdlYkNvcmUgewogCi1uYW1lc3Bh
Y2UgewotCi10ZW1wbGF0ZSA8Y2xhc3MgVmFsdWUsIGNsYXNzIEtleWZyYW1lLCBjbGFzcyBDdXJ2
ZT4KLXZvaWQgYXBwZW5kS2V5ZnJhbWUoQ3VydmUmIGN1cnZlLCBkb3VibGUga2V5VGltZSwgY29u
c3QgVmFsdWUqIHZhbHVlLCBQYXNzT3duUHRyPENDVGltaW5nRnVuY3Rpb24+IHRpbWluZ0Z1bmN0
aW9uKQotewotICAgIGN1cnZlLmFkZEtleWZyYW1lKEtleWZyYW1lOjpjcmVhdGUoa2V5VGltZSwg
dmFsdWUtPnZhbHVlKCksIHRpbWluZ0Z1bmN0aW9uKSk7Ci19Ci0KLXRlbXBsYXRlIDw+Ci12b2lk
IGFwcGVuZEtleWZyYW1lPFRyYW5zZm9ybUFuaW1hdGlvblZhbHVlLCBDQ1RyYW5zZm9ybUtleWZy
YW1lLCBDQ0tleWZyYW1lZFRyYW5zZm9ybUFuaW1hdGlvbkN1cnZlPihDQ0tleWZyYW1lZFRyYW5z
Zm9ybUFuaW1hdGlvbkN1cnZlJiBjdXJ2ZSwgZG91YmxlIGtleVRpbWUsIGNvbnN0IFRyYW5zZm9y
bUFuaW1hdGlvblZhbHVlKiB2YWx1ZSwgUGFzc093blB0cjxDQ1RpbWluZ0Z1bmN0aW9uPiB0aW1p
bmdGdW5jdGlvbikKLXsKLSAgICBjdXJ2ZS5hZGRLZXlmcmFtZShDQ1RyYW5zZm9ybUtleWZyYW1l
OjpjcmVhdGUoa2V5VGltZSwgKnZhbHVlLT52YWx1ZSgpLCB0aW1pbmdGdW5jdGlvbikpOwotfQot
Ci10ZW1wbGF0ZSA8Y2xhc3MgVmFsdWUsIGNsYXNzIEtleWZyYW1lLCBjbGFzcyBDdXJ2ZT4KLVBh
c3NPd25QdHI8Q0NBY3RpdmVBbmltYXRpb24+IGNyZWF0ZUFjdGl2ZUFuaW1hdGlvbihjb25zdCBL
ZXlmcmFtZVZhbHVlTGlzdCYgdmFsdWVMaXN0LCBjb25zdCBBbmltYXRpb24qIGFuaW1hdGlvbiwg
c2l6ZV90IGFuaW1hdGlvbklkLCBzaXplX3QgZ3JvdXBJZCwgZG91YmxlIHRpbWVPZmZzZXQsIEND
QWN0aXZlQW5pbWF0aW9uOjpUYXJnZXRQcm9wZXJ0eSB0YXJnZXRQcm9wZXJ0eSkKLXsKLSAgICBi
b29sIGFsdGVybmF0ZSA9IGZhbHNlOwotICAgIGJvb2wgcmV2ZXJzZSA9IGZhbHNlOwotICAgIGlm
IChhbmltYXRpb24gJiYgYW5pbWF0aW9uLT5pc0RpcmVjdGlvblNldCgpKSB7Ci0gICAgICAgIEFu
aW1hdGlvbjo6QW5pbWF0aW9uRGlyZWN0aW9uIGRpcmVjdGlvbiA9IGFuaW1hdGlvbi0+ZGlyZWN0
aW9uKCk7Ci0gICAgICAgIGlmIChkaXJlY3Rpb24gPT0gQW5pbWF0aW9uOjpBbmltYXRpb25EaXJl
Y3Rpb25BbHRlcm5hdGUgfHwgZGlyZWN0aW9uID09IEFuaW1hdGlvbjo6QW5pbWF0aW9uRGlyZWN0
aW9uQWx0ZXJuYXRlUmV2ZXJzZSkKLSAgICAgICAgICAgIGFsdGVybmF0ZSA9IHRydWU7Ci0gICAg
ICAgIGlmIChkaXJlY3Rpb24gPT0gQW5pbWF0aW9uOjpBbmltYXRpb25EaXJlY3Rpb25SZXZlcnNl
IHx8IGRpcmVjdGlvbiA9PSBBbmltYXRpb246OkFuaW1hdGlvbkRpcmVjdGlvbkFsdGVybmF0ZVJl
dmVyc2UpCi0gICAgICAgICAgICByZXZlcnNlID0gdHJ1ZTsKLSAgICB9Ci0KLSAgICBPd25QdHI8
Q3VydmU+IGN1cnZlID0gQ3VydmU6OmNyZWF0ZSgpOwotICAgIFZlY3RvcjxLZXlmcmFtZT4ga2V5
ZnJhbWVzOwotCi0gICAgZm9yIChzaXplX3QgaSA9IDA7IGkgPCB2YWx1ZUxpc3Quc2l6ZSgpOyBp
KyspIHsKLSAgICAgICAgc2l6ZV90IGluZGV4ID0gcmV2ZXJzZSA/IHZhbHVlTGlzdC5zaXplKCkg
LSBpIC0gMSA6IGk7Ci0KLSAgICAgICAgY29uc3QgVmFsdWUqIG9yaWdpbmFsVmFsdWUgPSBzdGF0
aWNfY2FzdDxjb25zdCBWYWx1ZSo+KHZhbHVlTGlzdC5hdChpbmRleCkpOwotCi0gICAgICAgIE93
blB0cjxDQ1RpbWluZ0Z1bmN0aW9uPiB0aW1pbmdGdW5jdGlvbjsKLSAgICAgICAgY29uc3QgVGlt
aW5nRnVuY3Rpb24qIG9yaWdpbmFsVGltaW5nRnVuY3Rpb24gPSBvcmlnaW5hbFZhbHVlLT50aW1p
bmdGdW5jdGlvbigpOwotCi0gICAgICAgIC8vIElmIHRoZXJlIGhhc24ndCBiZWVuIGEgdGltaW5n
IGZ1bmN0aW9uIGFzc29jaWF0ZWQgd2l0aCB0aGlzIGtleWZyYW1lLCB1c2UgdGhlCi0gICAgICAg
IC8vIGFuaW1hdGlvbidzIHRpbWluZyBmdW5jdGlvbiwgaWYgd2UgaGF2ZSBvbmUuCi0gICAgICAg
IGlmICghb3JpZ2luYWxUaW1pbmdGdW5jdGlvbiAmJiBhbmltYXRpb24tPmlzVGltaW5nRnVuY3Rp
b25TZXQoKSkKLSAgICAgICAgICAgIG9yaWdpbmFsVGltaW5nRnVuY3Rpb24gPSBhbmltYXRpb24t
PnRpbWluZ0Z1bmN0aW9uKCkuZ2V0KCk7Ci0KLSAgICAgICAgaWYgKG9yaWdpbmFsVGltaW5nRnVu
Y3Rpb24pIHsKLSAgICAgICAgICAgIHN3aXRjaCAob3JpZ2luYWxUaW1pbmdGdW5jdGlvbi0+dHlw
ZSgpKSB7Ci0gICAgICAgICAgICBjYXNlIFRpbWluZ0Z1bmN0aW9uOjpTdGVwc0Z1bmN0aW9uOgot
ICAgICAgICAgICAgICAgIC8vIEZJWE1FOiBhZGQgc3VwcG9ydCBmb3Igc3RlcHMgdGltaW5nIGZ1
bmN0aW9uLgotICAgICAgICAgICAgICAgIHJldHVybiBudWxscHRyOwotICAgICAgICAgICAgY2Fz
ZSBUaW1pbmdGdW5jdGlvbjo6TGluZWFyRnVuY3Rpb246Ci0gICAgICAgICAgICAgICAgLy8gRG9u
J3Qgc2V0IHRoZSB0aW1pbmcgZnVuY3Rpb24uIEtleWZyYW1lcyBhcmUgaW50ZXJwb2xhdGVkIGxp
bmVhcmx5IGlmIHRoZXJlIGlzIG5vIHRpbWluZyBmdW5jdGlvbi4KLSAgICAgICAgICAgICAgICBi
cmVhazsKLSAgICAgICAgICAgIGNhc2UgVGltaW5nRnVuY3Rpb246OkN1YmljQmV6aWVyRnVuY3Rp
b246Ci0gICAgICAgICAgICAgICAgY29uc3QgQ3ViaWNCZXppZXJUaW1pbmdGdW5jdGlvbiogb3Jp
Z2luYWxCZXppZXJUaW1pbmdGdW5jdGlvbiA9IHN0YXRpY19jYXN0PGNvbnN0IEN1YmljQmV6aWVy
VGltaW5nRnVuY3Rpb24qPihvcmlnaW5hbFRpbWluZ0Z1bmN0aW9uKTsKLSAgICAgICAgICAgICAg
ICB0aW1pbmdGdW5jdGlvbiA9IENDQ3ViaWNCZXppZXJUaW1pbmdGdW5jdGlvbjo6Y3JlYXRlKG9y
aWdpbmFsQmV6aWVyVGltaW5nRnVuY3Rpb24tPngxKCksIG9yaWdpbmFsQmV6aWVyVGltaW5nRnVu
Y3Rpb24tPnkxKCksIG9yaWdpbmFsQmV6aWVyVGltaW5nRnVuY3Rpb24tPngyKCksIG9yaWdpbmFs
QmV6aWVyVGltaW5nRnVuY3Rpb24tPnkyKCkpOwotICAgICAgICAgICAgICAgIGJyZWFrOwotICAg
ICAgICAgICAgfSAvLyBzd2l0Y2gKLSAgICAgICAgfSBlbHNlCi0gICAgICAgICAgICB0aW1pbmdG
dW5jdGlvbiA9IENDRWFzZVRpbWluZ0Z1bmN0aW9uOjpjcmVhdGUoKTsKLQotICAgICAgICBkb3Vi
bGUgZHVyYXRpb24gPSAoYW5pbWF0aW9uICYmIGFuaW1hdGlvbi0+aXNEdXJhdGlvblNldCgpKSA/
IGFuaW1hdGlvbi0+ZHVyYXRpb24oKSA6IDE7Ci0gICAgICAgIGRvdWJsZSBrZXlUaW1lID0gb3Jp
Z2luYWxWYWx1ZS0+a2V5VGltZSgpICogZHVyYXRpb247Ci0gICAgICAgIGlmIChyZXZlcnNlKQot
ICAgICAgICAgICAga2V5VGltZSA9IGR1cmF0aW9uIC0ga2V5VGltZTsKLSAgICAgICAgYXBwZW5k
S2V5ZnJhbWU8VmFsdWUsIEtleWZyYW1lLCBDdXJ2ZT4oKmN1cnZlLCBrZXlUaW1lLCBvcmlnaW5h
bFZhbHVlLCB0aW1pbmdGdW5jdGlvbi5yZWxlYXNlKCkpOwotICAgIH0KLQotICAgIE93blB0cjxD
Q0FjdGl2ZUFuaW1hdGlvbj4gYW5pbSA9IENDQWN0aXZlQW5pbWF0aW9uOjpjcmVhdGUoY3VydmUu
cmVsZWFzZSgpLCBhbmltYXRpb25JZCwgZ3JvdXBJZCwgdGFyZ2V0UHJvcGVydHkpOwotCi0gICAg
QVNTRVJUKGFuaW0uZ2V0KCkpOwotCi0gICAgaWYgKGFuaW0uZ2V0KCkpIHsKLSAgICAgICAgaW50
IGl0ZXJhdGlvbnMgPSAoYW5pbWF0aW9uICYmIGFuaW1hdGlvbi0+aXNJdGVyYXRpb25Db3VudFNl
dCgpKSA/IGFuaW1hdGlvbi0+aXRlcmF0aW9uQ291bnQoKSA6IDE7Ci0gICAgICAgIGFuaW0tPnNl
dEl0ZXJhdGlvbnMoaXRlcmF0aW9ucyk7Ci0gICAgICAgIGFuaW0tPnNldEFsdGVybmF0ZXNEaXJl
Y3Rpb24oYWx0ZXJuYXRlKTsKLSAgICB9Ci0KLSAgICAvLyBJbiBvcmRlciB0byBhdm9pZCBza2V3
LCB0aGUgbWFpbiB0aHJlYWQgYW5pbWF0aW9uIGNhbm5vdCB0aWNrIHVudGlsIGl0IGhhcyByZWNl
aXZlZCB0aGUgc3RhcnQgdGltZSBvZgotICAgIC8vIHRoZSBjb3JyZXNwb25kaW5nIGltcGwgdGhy
ZWFkIGFuaW1hdGlvbi4KLSAgICBhbmltLT5zZXROZWVkc1N5bmNocm9uaXplZFN0YXJ0VGltZSh0
cnVlKTsKLQotICAgIC8vIElmIHRpbWVPZmZzZXQgPiAwLCB0aGVuIHRoZSBhbmltYXRpb24gaGFz
IHN0YXJ0ZWQgaW4gdGhlIHBhc3QuCi0gICAgYW5pbS0+c2V0VGltZU9mZnNldCh0aW1lT2Zmc2V0
KTsKLQotICAgIHJldHVybiBhbmltLnJlbGVhc2UoKTsKLX0KLQotfSAvLyBuYW1lcGFjZQotCiBD
Q0xheWVyQW5pbWF0aW9uQ29udHJvbGxlcjo6Q0NMYXllckFuaW1hdGlvbkNvbnRyb2xsZXIoQ0NM
YXllckFuaW1hdGlvbkNvbnRyb2xsZXJDbGllbnQqIGNsaWVudCkKICAgICA6IG1fZm9yY2VTeW5j
KGZhbHNlKQogICAgICwgbV9jbGllbnQoY2xpZW50KQpAQCAtMTQwLDMyICs1Miw2IEBAIFBhc3NP
d25QdHI8Q0NMYXllckFuaW1hdGlvbkNvbnRyb2xsZXI+IENDTGF5ZXJBbmltYXRpb25Db250cm9s
bGVyOjpjcmVhdGUoQ0NMYXllCiAgICAgcmV0dXJuIGFkb3B0UHRyKG5ldyBDQ0xheWVyQW5pbWF0
aW9uQ29udHJvbGxlcihjbGllbnQpKTsKIH0KIAotYm9vbCBDQ0xheWVyQW5pbWF0aW9uQ29udHJv
bGxlcjo6YWRkQW5pbWF0aW9uKGNvbnN0IEtleWZyYW1lVmFsdWVMaXN0JiB2YWx1ZUxpc3QsIGNv
bnN0IEludFNpemUmLCBjb25zdCBBbmltYXRpb24qIGFuaW1hdGlvbiwgaW50IGFuaW1hdGlvbklk
LCBpbnQgZ3JvdXBJZCwgZG91YmxlIHRpbWVPZmZzZXQpCi17Ci0gICAgaWYgKCFhbmltYXRpb24p
Ci0gICAgICAgIHJldHVybiBmYWxzZTsKLQotICAgIE93blB0cjxDQ0FjdGl2ZUFuaW1hdGlvbj4g
dG9BZGQ7Ci0gICAgaWYgKHZhbHVlTGlzdC5wcm9wZXJ0eSgpID09IEFuaW1hdGVkUHJvcGVydHlX
ZWJraXRUcmFuc2Zvcm0pCi0gICAgICAgIHRvQWRkID0gY3JlYXRlQWN0aXZlQW5pbWF0aW9uPFRy
YW5zZm9ybUFuaW1hdGlvblZhbHVlLCBDQ1RyYW5zZm9ybUtleWZyYW1lLCBDQ0tleWZyYW1lZFRy
YW5zZm9ybUFuaW1hdGlvbkN1cnZlPih2YWx1ZUxpc3QsIGFuaW1hdGlvbiwgYW5pbWF0aW9uSWQs
IGdyb3VwSWQsIHRpbWVPZmZzZXQsIENDQWN0aXZlQW5pbWF0aW9uOjpUcmFuc2Zvcm0pOwotICAg
IGVsc2UgaWYgKHZhbHVlTGlzdC5wcm9wZXJ0eSgpID09IEFuaW1hdGVkUHJvcGVydHlPcGFjaXR5
KQotICAgICAgICB0b0FkZCA9IGNyZWF0ZUFjdGl2ZUFuaW1hdGlvbjxGbG9hdEFuaW1hdGlvblZh
bHVlLCBDQ0Zsb2F0S2V5ZnJhbWUsIENDS2V5ZnJhbWVkRmxvYXRBbmltYXRpb25DdXJ2ZT4odmFs
dWVMaXN0LCBhbmltYXRpb24sIGFuaW1hdGlvbklkLCBncm91cElkLCB0aW1lT2Zmc2V0LCBDQ0Fj
dGl2ZUFuaW1hdGlvbjo6T3BhY2l0eSk7Ci0KLSAgICBpZiAodG9BZGQuZ2V0KCkpIHsKLSAgICAg
ICAgLy8gUmVtb3ZlIGFueSBleGlzdGluZyBhbmltYXRpb25zIHdpdGggdGhlIHNhbWUgYW5pbWF0
aW9uIGlkIGFuZCB0YXJnZXQgcHJvcGVydHkuCi0gICAgICAgIGZvciAoc2l6ZV90IGkgPSAwOyBp
IDwgbV9hY3RpdmVBbmltYXRpb25zLnNpemUoKTspIHsKLSAgICAgICAgICAgIGlmIChtX2FjdGl2
ZUFuaW1hdGlvbnNbaV0tPmlkKCkgPT0gYW5pbWF0aW9uSWQgJiYgbV9hY3RpdmVBbmltYXRpb25z
W2ldLT50YXJnZXRQcm9wZXJ0eSgpID09IHRvQWRkLT50YXJnZXRQcm9wZXJ0eSgpKQotICAgICAg
ICAgICAgICAgIG1fYWN0aXZlQW5pbWF0aW9ucy5yZW1vdmUoaSk7Ci0gICAgICAgICAgICBlbHNl
Ci0gICAgICAgICAgICAgICAgaSsrOwotICAgICAgICB9Ci0gICAgICAgIG1fYWN0aXZlQW5pbWF0
aW9ucy5hcHBlbmQodG9BZGQucmVsZWFzZSgpKTsKLSAgICAgICAgcmV0dXJuIHRydWU7Ci0gICAg
fQotCi0gICAgcmV0dXJuIGZhbHNlOwotfQotCiB2b2lkIENDTGF5ZXJBbmltYXRpb25Db250cm9s
bGVyOjpwYXVzZUFuaW1hdGlvbihpbnQgYW5pbWF0aW9uSWQsIGRvdWJsZSB0aW1lT2Zmc2V0KQog
ewogICAgIGZvciAoc2l6ZV90IGkgPSAwOyBpIDwgbV9hY3RpdmVBbmltYXRpb25zLnNpemUoKTsg
KytpKSB7CkBAIC0xODQsNiArNzAsMTYgQEAgdm9pZCBDQ0xheWVyQW5pbWF0aW9uQ29udHJvbGxl
cjo6cmVtb3ZlQW5pbWF0aW9uKGludCBhbmltYXRpb25JZCkKICAgICB9CiB9CiAKK3ZvaWQgQ0NM
YXllckFuaW1hdGlvbkNvbnRyb2xsZXI6OnJlbW92ZUFuaW1hdGlvbihpbnQgYW5pbWF0aW9uSWQs
IENDQWN0aXZlQW5pbWF0aW9uOjpUYXJnZXRQcm9wZXJ0eSB0YXJnZXRQcm9wZXJ0eSkKK3sKKyAg
ICBmb3IgKHNpemVfdCBpID0gMDsgaSA8IG1fYWN0aXZlQW5pbWF0aW9ucy5zaXplKCk7KSB7Cisg
ICAgICAgIGlmIChtX2FjdGl2ZUFuaW1hdGlvbnNbaV0tPmlkKCkgPT0gYW5pbWF0aW9uSWQgJiYg
bV9hY3RpdmVBbmltYXRpb25zW2ldLT50YXJnZXRQcm9wZXJ0eSgpID09IHRhcmdldFByb3BlcnR5
KQorICAgICAgICAgICAgbV9hY3RpdmVBbmltYXRpb25zLnJlbW92ZShpKTsKKyAgICAgICAgZWxz
ZQorICAgICAgICAgICAgaSsrOworICAgIH0KK30KKwogLy8gQWNjb3JkaW5nIHRvIHJlbmRlciBs
YXllciBiYWNraW5nLCB0aGVzZSBhcmUgZm9yIHRlc3Rpbmcgb25seS4KIHZvaWQgQ0NMYXllckFu
aW1hdGlvbkNvbnRyb2xsZXI6OnN1c3BlbmRBbmltYXRpb25zKGRvdWJsZSBtb25vdG9uaWNUaW1l
KQogewpAQCAtMjI3LDcgKzEyMyw3IEBAIHZvaWQgQ0NMYXllckFuaW1hdGlvbkNvbnRyb2xsZXI6
OmFuaW1hdGUoZG91YmxlIG1vbm90b25pY1RpbWUsIENDQW5pbWF0aW9uRXZlbnRzCiAgICAgc3Rh
cnRBbmltYXRpb25zV2FpdGluZ0ZvclRhcmdldEF2YWlsYWJpbGl0eShtb25vdG9uaWNUaW1lLCBl
dmVudHMpOwogfQogCi12b2lkIENDTGF5ZXJBbmltYXRpb25Db250cm9sbGVyOjphZGQoUGFzc093
blB0cjxDQ0FjdGl2ZUFuaW1hdGlvbj4gYW5pbWF0aW9uKQordm9pZCBDQ0xheWVyQW5pbWF0aW9u
Q29udHJvbGxlcjo6YWRkQW5pbWF0aW9uKFBhc3NPd25QdHI8Q0NBY3RpdmVBbmltYXRpb24+IGFu
aW1hdGlvbikKIHsKICAgICBtX2FjdGl2ZUFuaW1hdGlvbnMuYXBwZW5kKGFuaW1hdGlvbik7CiB9
CkBAIC0yNDAsNiArMTM2LDE2IEBAIENDQWN0aXZlQW5pbWF0aW9uKiBDQ0xheWVyQW5pbWF0aW9u
Q29udHJvbGxlcjo6Z2V0QWN0aXZlQW5pbWF0aW9uKGludCBncm91cElkLCBDCiAgICAgcmV0dXJu
IDA7CiB9CiAKK0NDQWN0aXZlQW5pbWF0aW9uKiBDQ0xheWVyQW5pbWF0aW9uQ29udHJvbGxlcjo6
Z2V0QWN0aXZlQW5pbWF0aW9uKENDQWN0aXZlQW5pbWF0aW9uOjpUYXJnZXRQcm9wZXJ0eSB0YXJn
ZXRQcm9wZXJ0eSkgY29uc3QKK3sKKyAgICBmb3IgKHNpemVfdCBpID0gMDsgaSA8IG1fYWN0aXZl
QW5pbWF0aW9ucy5zaXplKCk7ICsraSkgeworICAgICAgICBzaXplX3QgaW5kZXggPSBtX2FjdGl2
ZUFuaW1hdGlvbnMuc2l6ZSgpIC0gaSAtIDE7CisgICAgICAgIGlmIChtX2FjdGl2ZUFuaW1hdGlv
bnNbaW5kZXhdLT50YXJnZXRQcm9wZXJ0eSgpID09IHRhcmdldFByb3BlcnR5KQorICAgICAgICAg
ICAgcmV0dXJuIG1fYWN0aXZlQW5pbWF0aW9uc1tpbmRleF0uZ2V0KCk7CisgICAgfQorICAgIHJl
dHVybiAwOworfQorCiBib29sIENDTGF5ZXJBbmltYXRpb25Db250cm9sbGVyOjpoYXNBY3RpdmVB
bmltYXRpb24oKSBjb25zdAogewogICAgIGZvciAoc2l6ZV90IGkgPSAwOyBpIDwgbV9hY3RpdmVB
bmltYXRpb25zLnNpemUoKTsgKytpKSB7CkBAIC0yOTQsNyArMjAwLDcgQEAgdm9pZCBDQ0xheWVy
QW5pbWF0aW9uQ29udHJvbGxlcjo6cHVzaE5ld0FuaW1hdGlvbnNUb0ltcGxUaHJlYWQoQ0NMYXll
ckFuaW1hdGlvbkMKICAgICAgICAgLy8gVGhlIG5ldyBhbmltYXRpb24gc2hvdWxkIGJlIHNldCB0
byBydW4gYXMgc29vbiBhcyBwb3NzaWJsZS4KICAgICAgICAgdG9BZGQtPnNldFJ1blN0YXRlKEND
QWN0aXZlQW5pbWF0aW9uOjpXYWl0aW5nRm9yVGFyZ2V0QXZhaWxhYmlsaXR5LCAwKTsKICAgICAg
ICAgdG9BZGQtPnNldFN0YXJ0VGltZSgwKTsKLSAgICAgICAgY29udHJvbGxlckltcGwtPmFkZCh0
b0FkZC5yZWxlYXNlKCkpOworICAgICAgICBjb250cm9sbGVySW1wbC0+YWRkQW5pbWF0aW9uKHRv
QWRkLnJlbGVhc2UoKSk7CiAgICAgfQogfQogCkBAIC00NjEsNyArMzY3LDcgQEAgdm9pZCBDQ0xh
eWVyQW5pbWF0aW9uQ29udHJvbGxlcjo6cmVwbGFjZUltcGxUaHJlYWRBbmltYXRpb25zKENDTGF5
ZXJBbmltYXRpb25Db24KICAgICAgICAgICAgIHRvQWRkLT5zZXRSdW5TdGF0ZShDQ0FjdGl2ZUFu
aW1hdGlvbjo6V2FpdGluZ0ZvclRhcmdldEF2YWlsYWJpbGl0eSwgMCk7CiAgICAgICAgICAgICB0
b0FkZC0+c2V0U3RhcnRUaW1lKDApOwogICAgICAgICB9Ci0gICAgICAgIGNvbnRyb2xsZXJJbXBs
LT5hZGQodG9BZGQucmVsZWFzZSgpKTsKKyAgICAgICAgY29udHJvbGxlckltcGwtPmFkZEFuaW1h
dGlvbih0b0FkZC5yZWxlYXNlKCkpOwogICAgIH0KIH0KIApAQCAtNDgwLDcgKzM4Niw3IEBAIHZv
aWQgQ0NMYXllckFuaW1hdGlvbkNvbnRyb2xsZXI6OnRpY2tBbmltYXRpb25zKGRvdWJsZSBtb25v
dG9uaWNUaW1lKQogCiAgICAgICAgICAgICBjYXNlIENDQWN0aXZlQW5pbWF0aW9uOjpUcmFuc2Zv
cm06IHsKICAgICAgICAgICAgICAgICBjb25zdCBDQ1RyYW5zZm9ybUFuaW1hdGlvbkN1cnZlKiB0
cmFuc2Zvcm1BbmltYXRpb25DdXJ2ZSA9IG1fYWN0aXZlQW5pbWF0aW9uc1tpXS0+Y3VydmUoKS0+
dG9UcmFuc2Zvcm1BbmltYXRpb25DdXJ2ZSgpOwotICAgICAgICAgICAgICAgIGNvbnN0IFdlYlRy
YW5zZm9ybWF0aW9uTWF0cml4IG1hdHJpeCA9IHRyYW5zZm9ybUFuaW1hdGlvbkN1cnZlLT5nZXRW
YWx1ZSh0cmltbWVkLCBtX2NsaWVudC0+Ym91bmRzKCkpOworICAgICAgICAgICAgICAgIGNvbnN0
IFdlYlRyYW5zZm9ybWF0aW9uTWF0cml4IG1hdHJpeCA9IHRyYW5zZm9ybUFuaW1hdGlvbkN1cnZl
LT5nZXRWYWx1ZSh0cmltbWVkKTsKICAgICAgICAgICAgICAgICBpZiAobV9hY3RpdmVBbmltYXRp
b25zW2ldLT5pc0ZpbmlzaGVkQXQobW9ub3RvbmljVGltZSkpCiAgICAgICAgICAgICAgICAgICAg
IG1fYWN0aXZlQW5pbWF0aW9uc1tpXS0+c2V0UnVuU3RhdGUoQ0NBY3RpdmVBbmltYXRpb246OkZp
bmlzaGVkLCBtb25vdG9uaWNUaW1lKTsKIApkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvcGxh
dGZvcm0vZ3JhcGhpY3MvY2hyb21pdW0vY2MvQ0NMYXllckFuaW1hdGlvbkNvbnRyb2xsZXIuaCBi
L1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2Nocm9taXVtL2NjL0NDTGF5ZXJBbmlt
YXRpb25Db250cm9sbGVyLmgKaW5kZXggYzRjOTE1OGIyYzg3Y2ZlNDZkZmMxNjJkMDg3YTExZmRm
ZmI4OTI0OC4uMmZjMzlkODEzZTE4ZTYwMDk5ODA0NzdjNDVlNzdmZTgzNDk2M2ExYyAxMDA2NDQK
LS0tIGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvY2hyb21pdW0vY2MvQ0NMYXll
ckFuaW1hdGlvbkNvbnRyb2xsZXIuaAorKysgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFw
aGljcy9jaHJvbWl1bS9jYy9DQ0xheWVyQW5pbWF0aW9uQ29udHJvbGxlci5oCkBAIC01NCw3ICs1
NCw2IEBAIHB1YmxpYzoKICAgICB2aXJ0dWFsIGZsb2F0IG9wYWNpdHkoKSBjb25zdCA9IDA7CiAg
ICAgdmlydHVhbCB2b2lkIHNldFRyYW5zZm9ybUZyb21BbmltYXRpb24oY29uc3QgV2ViS2l0OjpX
ZWJUcmFuc2Zvcm1hdGlvbk1hdHJpeCYpID0gMDsKICAgICB2aXJ0dWFsIGNvbnN0IFdlYktpdDo6
V2ViVHJhbnNmb3JtYXRpb25NYXRyaXgmIHRyYW5zZm9ybSgpIGNvbnN0ID0gMDsKLSAgICB2aXJ0
dWFsIGNvbnN0IEludFNpemUmIGJvdW5kcygpIGNvbnN0ID0gMDsKIH07CiAKIGNsYXNzIENDTGF5
ZXJBbmltYXRpb25Db250cm9sbGVyIHsKQEAgLTY1LDkgKzY0LDEwIEBAIHB1YmxpYzoKICAgICB2
aXJ0dWFsIH5DQ0xheWVyQW5pbWF0aW9uQ29udHJvbGxlcigpOwogCiAgICAgLy8gVGhlc2UgbWV0
aG9kcyBhcmUgdmlydHVhbCBmb3IgdGVzdGluZy4KLSAgICB2aXJ0dWFsIGJvb2wgYWRkQW5pbWF0
aW9uKGNvbnN0IEtleWZyYW1lVmFsdWVMaXN0JiwgY29uc3QgSW50U2l6ZSYgYm94U2l6ZSwgY29u
c3QgQW5pbWF0aW9uKiwgaW50IGFuaW1hdGlvbklkLCBpbnQgZ3JvdXBJZCwgZG91YmxlIHRpbWVP
ZmZzZXQpOworICAgIHZpcnR1YWwgdm9pZCBhZGRBbmltYXRpb24oUGFzc093blB0cjxDQ0FjdGl2
ZUFuaW1hdGlvbj4pOwogICAgIHZpcnR1YWwgdm9pZCBwYXVzZUFuaW1hdGlvbihpbnQgYW5pbWF0
aW9uSWQsIGRvdWJsZSB0aW1lT2Zmc2V0KTsKICAgICB2aXJ0dWFsIHZvaWQgcmVtb3ZlQW5pbWF0
aW9uKGludCBhbmltYXRpb25JZCk7CisgICAgdmlydHVhbCB2b2lkIHJlbW92ZUFuaW1hdGlvbihp
bnQgYW5pbWF0aW9uSWQsIENDQWN0aXZlQW5pbWF0aW9uOjpUYXJnZXRQcm9wZXJ0eSk7CiAgICAg
dmlydHVhbCB2b2lkIHN1c3BlbmRBbmltYXRpb25zKGRvdWJsZSBtb25vdG9uaWNUaW1lKTsKICAg
ICB2aXJ0dWFsIHZvaWQgcmVzdW1lQW5pbWF0aW9ucyhkb3VibGUgbW9ub3RvbmljVGltZSk7CiAK
QEAgLTc3LDEyICs3NywxNCBAQCBwdWJsaWM6CiAKICAgICB2b2lkIGFuaW1hdGUoZG91YmxlIG1v
bm90b25pY1RpbWUsIENDQW5pbWF0aW9uRXZlbnRzVmVjdG9yKik7CiAKLSAgICB2b2lkIGFkZChQ
YXNzT3duUHRyPENDQWN0aXZlQW5pbWF0aW9uPik7Ci0KLSAgICAvLyBSZXR1cm5zIHRoZSBhY3Rp
dmUgYW5pbWF0aW9uIGluIHRoZSBnaXZlbiBncm91cCwgYW5pbWF0aW5nIHRoZSBnaXZlbiBwcm9w
ZXJ0eSBpZiBzdWNoIGFuCisgICAgLy8gUmV0dXJucyB0aGUgYWN0aXZlIGFuaW1hdGlvbiBpbiB0
aGUgZ2l2ZW4gZ3JvdXAsIGFuaW1hdGluZyB0aGUgZ2l2ZW4gcHJvcGVydHksIGlmIHN1Y2ggYW4K
ICAgICAvLyBhbmltYXRpb24gZXhpc3RzLgogICAgIENDQWN0aXZlQW5pbWF0aW9uKiBnZXRBY3Rp
dmVBbmltYXRpb24oaW50IGdyb3VwSWQsIENDQWN0aXZlQW5pbWF0aW9uOjpUYXJnZXRQcm9wZXJ0
eSkgY29uc3Q7CiAKKyAgICAvLyBSZXR1cm5zIHRoZSBhY3RpdmUgYW5pbWF0aW9uIGFuaW1hdGlu
ZyB0aGUgZ2l2ZW4gcHJvcGVydHkgdGhhdCBpcyBlaXRoZXIgcnVubmluZywgb3IgaXMKKyAgICAv
LyBuZXh0IHRvIHJ1biwgaWYgc3VjaCBhbiBhbmltYXRpb24gZXhpc3RzLgorICAgIENDQWN0aXZl
QW5pbWF0aW9uKiBnZXRBY3RpdmVBbmltYXRpb24oQ0NBY3RpdmVBbmltYXRpb246OlRhcmdldFBy
b3BlcnR5KSBjb25zdDsKKwogICAgIC8vIFJldHVybnMgdHJ1ZSBpZiB0aGVyZSBhcmUgYW55IGFu
aW1hdGlvbnMgdGhhdCBoYXZlIG5laXRoZXIgZmluaXNoZWQgbm9yIGFib3J0ZWQuCiAgICAgYm9v
bCBoYXNBY3RpdmVBbmltYXRpb24oKSBjb25zdDsKIApkaWZmIC0tZ2l0IGEvU291cmNlL1dlYktp
dC9jaHJvbWl1bS90ZXN0cy9DQ0FuaW1hdGlvblRlc3RDb21tb24uY3BwIGIvU291cmNlL1dlYktp
dC9jaHJvbWl1bS90ZXN0cy9DQ0FuaW1hdGlvblRlc3RDb21tb24uY3BwCmluZGV4IDBlOGMxYTQw
MWY2YzhiYmRlMjIzMjMxZDJjOTNmZDk4NGIzNTIxM2EuLjg1NDU5NTM4MDUzYzZhOTg2MGFmMGY3
OTQ4MGZjZTZmNjNkN2MzYzMgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJLaXQvY2hyb21pdW0vdGVz
dHMvQ0NBbmltYXRpb25UZXN0Q29tbW9uLmNwcAorKysgYi9Tb3VyY2UvV2ViS2l0L2Nocm9taXVt
L3Rlc3RzL0NDQW5pbWF0aW9uVGVzdENvbW1vbi5jcHAKQEAgLTI5LDkgKzI5LDEyIEBACiAjaW5j
bHVkZSAiR3JhcGhpY3NMYXllci5oIgogI2luY2x1ZGUgIkxheWVyQ2hyb21pdW0uaCIKICNpbmNs
dWRlICJUcmFuc2xhdGVUcmFuc2Zvcm1PcGVyYXRpb24uaCIKKyNpbmNsdWRlICJjYy9DQ0tleWZy
YW1lZEFuaW1hdGlvbkN1cnZlLmgiCiAjaW5jbHVkZSAiY2MvQ0NMYXllckFuaW1hdGlvbkNvbnRy
b2xsZXIuaCIKICNpbmNsdWRlICJjYy9DQ0xheWVySW1wbC5oIgogCisjaW5jbHVkZSA8cHVibGlj
L1dlYlRyYW5zZm9ybU9wZXJhdGlvbnMuaD4KKwogdXNpbmcgbmFtZXNwYWNlIFdlYkNvcmU7CiAK
IG5hbWVzcGFjZSB7CkBAIC0zOSwzOCArNDIsMzggQEAgbmFtZXNwYWNlIHsKIHRlbXBsYXRlIDxj
bGFzcyBUYXJnZXQ+CiB2b2lkIGFkZE9wYWNpdHlUcmFuc2l0aW9uKFRhcmdldCYgdGFyZ2V0LCBk
b3VibGUgZHVyYXRpb24sIGZsb2F0IHN0YXJ0T3BhY2l0eSwgZmxvYXQgZW5kT3BhY2l0eSwgYm9v
bCB1c2VUaW1pbmdGdW5jdGlvbikKIHsKLSAgICBXZWJDb3JlOjpLZXlmcmFtZVZhbHVlTGlzdCB2
YWx1ZXMoQW5pbWF0ZWRQcm9wZXJ0eU9wYWNpdHkpOwotICAgIGlmIChkdXJhdGlvbiA+IDApCi0g
ICAgICAgIHZhbHVlcy5pbnNlcnQobmV3IEZsb2F0QW5pbWF0aW9uVmFsdWUoMCwgc3RhcnRPcGFj
aXR5KSk7Ci0gICAgdmFsdWVzLmluc2VydChuZXcgRmxvYXRBbmltYXRpb25WYWx1ZShkdXJhdGlv
biwgZW5kT3BhY2l0eSkpOworICAgIE93blB0cjxDQ0tleWZyYW1lZEZsb2F0QW5pbWF0aW9uQ3Vy
dmU+IGN1cnZlKENDS2V5ZnJhbWVkRmxvYXRBbmltYXRpb25DdXJ2ZTo6Y3JlYXRlKCkpOwogCi0g
ICAgUmVmUHRyPEFuaW1hdGlvbj4gYW5pbWF0aW9uID0gQW5pbWF0aW9uOjpjcmVhdGUoKTsKLSAg
ICBhbmltYXRpb24tPnNldER1cmF0aW9uKGR1cmF0aW9uKTsKLQotICAgIGlmICh1c2VUaW1pbmdG
dW5jdGlvbikKLSAgICAgICAgYW5pbWF0aW9uLT5zZXRUaW1pbmdGdW5jdGlvbihMaW5lYXJUaW1p
bmdGdW5jdGlvbjo6Y3JlYXRlKCkpOworICAgIGlmIChkdXJhdGlvbiA+IDApCisgICAgICAgIGN1
cnZlLT5hZGRLZXlmcmFtZShDQ0Zsb2F0S2V5ZnJhbWU6OmNyZWF0ZSgwLCBzdGFydE9wYWNpdHks
IHVzZVRpbWluZ0Z1bmN0aW9uID8gbnVsbHB0ciA6IENDRWFzZVRpbWluZ0Z1bmN0aW9uOjpjcmVh
dGUoKSkpOworICAgIGN1cnZlLT5hZGRLZXlmcmFtZShDQ0Zsb2F0S2V5ZnJhbWU6OmNyZWF0ZShk
dXJhdGlvbiwgZW5kT3BhY2l0eSwgbnVsbHB0cikpOwogCi0gICAgSW50U2l6ZSBib3hTaXplOwor
ICAgIE93blB0cjxDQ0FjdGl2ZUFuaW1hdGlvbj4gYW5pbWF0aW9uKENDQWN0aXZlQW5pbWF0aW9u
OjpjcmVhdGUoY3VydmUucmVsZWFzZSgpLCAwLCAwLCBDQ0FjdGl2ZUFuaW1hdGlvbjo6T3BhY2l0
eSkpOworICAgIGFuaW1hdGlvbi0+c2V0TmVlZHNTeW5jaHJvbml6ZWRTdGFydFRpbWUodHJ1ZSk7
CiAKLSAgICB0YXJnZXQuYWRkQW5pbWF0aW9uKHZhbHVlcywgYm94U2l6ZSwgYW5pbWF0aW9uLmdl
dCgpLCAwLCAwLCAwKTsKKyAgICB0YXJnZXQuYWRkQW5pbWF0aW9uKGFuaW1hdGlvbi5yZWxlYXNl
KCkpOwogfQogCiB0ZW1wbGF0ZSA8Y2xhc3MgVGFyZ2V0Pgogdm9pZCBhZGRBbmltYXRlZFRyYW5z
Zm9ybShUYXJnZXQmIHRhcmdldCwgZG91YmxlIGR1cmF0aW9uLCBpbnQgZGVsdGFYLCBpbnQgZGVs
dGFZKQogewogICAgIHN0YXRpYyBpbnQgaWQgPSAwOwotICAgIFdlYkNvcmU6OktleWZyYW1lVmFs
dWVMaXN0IHZhbHVlcyhBbmltYXRlZFByb3BlcnR5V2Via2l0VHJhbnNmb3JtKTsKKyAgICBPd25Q
dHI8Q0NLZXlmcmFtZWRUcmFuc2Zvcm1BbmltYXRpb25DdXJ2ZT4gY3VydmUoQ0NLZXlmcmFtZWRU
cmFuc2Zvcm1BbmltYXRpb25DdXJ2ZTo6Y3JlYXRlKCkpOwogCi0gICAgVHJhbnNmb3JtT3BlcmF0
aW9ucyBvcGVyYXRpb25zOwotICAgIG9wZXJhdGlvbnMub3BlcmF0aW9ucygpLmFwcGVuZChUcmFu
c2xhdGVUcmFuc2Zvcm1PcGVyYXRpb246OmNyZWF0ZShMZW5ndGgoZGVsdGFYLCBXZWJDb3JlOjpG
aXhlZCksIExlbmd0aChkZWx0YVksIFdlYkNvcmU6OkZpeGVkKSwgVHJhbnNmb3JtT3BlcmF0aW9u
OjpUUkFOU0xBVEVfWCkpOwotICAgIHZhbHVlcy5pbnNlcnQobmV3IFRyYW5zZm9ybUFuaW1hdGlv
blZhbHVlKDAsICZvcGVyYXRpb25zKSk7CisgICAgaWYgKGR1cmF0aW9uID4gMCkgeworICAgICAg
ICBXZWJLaXQ6OldlYlRyYW5zZm9ybU9wZXJhdGlvbnMgc3RhcnRPcGVyYXRpb25zOworICAgICAg
ICBzdGFydE9wZXJhdGlvbnMuYXBwZW5kVHJhbnNsYXRlKGRlbHRhWCwgZGVsdGFZLCAwKTsKKyAg
ICAgICAgY3VydmUtPmFkZEtleWZyYW1lKENDVHJhbnNmb3JtS2V5ZnJhbWU6OmNyZWF0ZSgwLCBz
dGFydE9wZXJhdGlvbnMsIG51bGxwdHIpKTsKKyAgICB9CiAKLSAgICBSZWZQdHI8QW5pbWF0aW9u
PiBhbmltYXRpb24gPSBBbmltYXRpb246OmNyZWF0ZSgpOwotICAgIGFuaW1hdGlvbi0+c2V0RHVy
YXRpb24oZHVyYXRpb24pOworICAgIFdlYktpdDo6V2ViVHJhbnNmb3JtT3BlcmF0aW9ucyBvcGVy
YXRpb25zOworICAgIG9wZXJhdGlvbnMuYXBwZW5kVHJhbnNsYXRlKGRlbHRhWCwgZGVsdGFZLCAw
KTsKKyAgICBjdXJ2ZS0+YWRkS2V5ZnJhbWUoQ0NUcmFuc2Zvcm1LZXlmcmFtZTo6Y3JlYXRlKGR1
cmF0aW9uLCBvcGVyYXRpb25zLCBudWxscHRyKSk7CiAKLSAgICBJbnRTaXplIGJveFNpemU7Cisg
ICAgT3duUHRyPENDQWN0aXZlQW5pbWF0aW9uPiBhbmltYXRpb24oQ0NBY3RpdmVBbmltYXRpb246
OmNyZWF0ZShjdXJ2ZS5yZWxlYXNlKCksIGlkKyssIDAsIENDQWN0aXZlQW5pbWF0aW9uOjpUcmFu
c2Zvcm0pKTsKKyAgICBhbmltYXRpb24tPnNldE5lZWRzU3luY2hyb25pemVkU3RhcnRUaW1lKHRy
dWUpOwogCi0gICAgdGFyZ2V0LmFkZEFuaW1hdGlvbih2YWx1ZXMsIGJveFNpemUsIGFuaW1hdGlv
bi5nZXQoKSwgKytpZCwgMCwgMCk7CisgICAgdGFyZ2V0LmFkZEFuaW1hdGlvbihhbmltYXRpb24u
cmVsZWFzZSgpKTsKIH0KIAogfSAvLyBuYW1lc3BhY2UKQEAgLTk5LDcgKzEwMiw3IEBAIEZha2VU
cmFuc2Zvcm1UcmFuc2l0aW9uOjp+RmFrZVRyYW5zZm9ybVRyYW5zaXRpb24oKQogewogfQogCi1X
ZWJLaXQ6OldlYlRyYW5zZm9ybWF0aW9uTWF0cml4IEZha2VUcmFuc2Zvcm1UcmFuc2l0aW9uOjpn
ZXRWYWx1ZShkb3VibGUgdGltZSwgY29uc3QgV2ViQ29yZTo6SW50U2l6ZSYgc2l6ZSkgY29uc3QK
K1dlYktpdDo6V2ViVHJhbnNmb3JtYXRpb25NYXRyaXggRmFrZVRyYW5zZm9ybVRyYW5zaXRpb246
OmdldFZhbHVlKGRvdWJsZSB0aW1lKSBjb25zdAogewogICAgIHJldHVybiBXZWJLaXQ6OldlYlRy
YW5zZm9ybWF0aW9uTWF0cml4KCk7CiB9CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViS2l0L2Nocm9t
aXVtL3Rlc3RzL0NDQW5pbWF0aW9uVGVzdENvbW1vbi5oIGIvU291cmNlL1dlYktpdC9jaHJvbWl1
bS90ZXN0cy9DQ0FuaW1hdGlvblRlc3RDb21tb24uaAppbmRleCA0Mzg0MTE3ZDM5Y2FiNzIyZjg0
NTRlZDU3NzZlNTAyMjk5MTYwZjdlLi5hODUzM2E4NzM2MGY4MmFlZDU3NGIxMGNiNTQ1ZmE2OGM2
YzM5MzA5IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViS2l0L2Nocm9taXVtL3Rlc3RzL0NDQW5pbWF0
aW9uVGVzdENvbW1vbi5oCisrKyBiL1NvdXJjZS9XZWJLaXQvY2hyb21pdW0vdGVzdHMvQ0NBbmlt
YXRpb25UZXN0Q29tbW9uLmgKQEAgLTU0LDcgKzU0LDcgQEAgcHVibGljOgogICAgIHZpcnR1YWwg
fkZha2VUcmFuc2Zvcm1UcmFuc2l0aW9uKCk7CiAKICAgICB2aXJ0dWFsIGRvdWJsZSBkdXJhdGlv
bigpIGNvbnN0IE9WRVJSSURFIHsgcmV0dXJuIG1fZHVyYXRpb247IH0KLSAgICB2aXJ0dWFsIFdl
YktpdDo6V2ViVHJhbnNmb3JtYXRpb25NYXRyaXggZ2V0VmFsdWUoZG91YmxlIHRpbWUsIGNvbnN0
IFdlYkNvcmU6OkludFNpemUmKSBjb25zdCBPVkVSUklERTsKKyAgICB2aXJ0dWFsIFdlYktpdDo6
V2ViVHJhbnNmb3JtYXRpb25NYXRyaXggZ2V0VmFsdWUoZG91YmxlIHRpbWUpIGNvbnN0IE9WRVJS
SURFOwogCiAgICAgdmlydHVhbCBQYXNzT3duUHRyPFdlYkNvcmU6OkNDQW5pbWF0aW9uQ3VydmU+
IGNsb25lKCkgY29uc3QgT1ZFUlJJREU7CiAKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJLaXQvY2hy
b21pdW0vdGVzdHMvQ0NLZXlmcmFtZWRBbmltYXRpb25DdXJ2ZVRlc3QuY3BwIGIvU291cmNlL1dl
YktpdC9jaHJvbWl1bS90ZXN0cy9DQ0tleWZyYW1lZEFuaW1hdGlvbkN1cnZlVGVzdC5jcHAKaW5k
ZXggYWQxYWU3NGNhMTI1NzM2NGM5YzE1MzBlNDdlMjBiNjk0N2Y1MGJiZC4uZWI2YmIwMzYzZGE4
NTVlZmM1NzNlODA5NDY4YmE3MjllNDhhY2Q0ZiAxMDA2NDQKLS0tIGEvU291cmNlL1dlYktpdC9j
aHJvbWl1bS90ZXN0cy9DQ0tleWZyYW1lZEFuaW1hdGlvbkN1cnZlVGVzdC5jcHAKKysrIGIvU291
cmNlL1dlYktpdC9jaHJvbWl1bS90ZXN0cy9DQ0tleWZyYW1lZEFuaW1hdGlvbkN1cnZlVGVzdC5j
cHAKQEAgLTMxLDYgKzMxLDcgQEAKIAogI2luY2x1ZGUgPGdtb2NrL2dtb2NrLmg+CiAjaW5jbHVk
ZSA8Z3Rlc3QvZ3Rlc3QuaD4KKyNpbmNsdWRlIDxwdWJsaWMvV2ViVHJhbnNmb3JtT3BlcmF0aW9u
cy5oPgogI2luY2x1ZGUgPHB1YmxpYy9XZWJUcmFuc2Zvcm1hdGlvbk1hdHJpeC5oPgogI2luY2x1
ZGUgPHd0Zi9Pd25QdHIuaD4KICNpbmNsdWRlIDx3dGYvVmVjdG9yLmg+CkBAIC0xMTMsNTcgKzEx
NCw1NSBAQCBURVNUKENDS2V5ZnJhbWVkQW5pbWF0aW9uQ3VydmVUZXN0LCBSZXBlYXRlZEZsb2F0
S2V5VGltZXMpCiBURVNUKENDS2V5ZnJhbWVkQW5pbWF0aW9uQ3VydmVUZXN0LCBPbmVUcmFuc2Zv
cm1LZXlmcmFtZSkKIHsKICAgICBPd25QdHI8Q0NLZXlmcmFtZWRUcmFuc2Zvcm1BbmltYXRpb25D
dXJ2ZT4gY3VydmUoQ0NLZXlmcmFtZWRUcmFuc2Zvcm1BbmltYXRpb25DdXJ2ZTo6Y3JlYXRlKCkp
OwotICAgIFRyYW5zZm9ybU9wZXJhdGlvbnMgb3BlcmF0aW9uczsKLSAgICBvcGVyYXRpb25zLm9w
ZXJhdGlvbnMoKS5hcHBlbmQoVHJhbnNsYXRlVHJhbnNmb3JtT3BlcmF0aW9uOjpjcmVhdGUoTGVu
Z3RoKDIsIEZpeGVkKSwgTGVuZ3RoKDAsIEZpeGVkKSwgVHJhbnNmb3JtT3BlcmF0aW9uOjpUUkFO
U0xBVEVfWCkpOworICAgIFdlYktpdDo6V2ViVHJhbnNmb3JtT3BlcmF0aW9ucyBvcGVyYXRpb25z
OworICAgIG9wZXJhdGlvbnMuYXBwZW5kVHJhbnNsYXRlKDIsIDAsIDApOwogICAgIGN1cnZlLT5h
ZGRLZXlmcmFtZShDQ1RyYW5zZm9ybUtleWZyYW1lOjpjcmVhdGUoMCwgb3BlcmF0aW9ucywgbnVs
bHB0cikpOwogCi0gICAgSW50U2l6ZSBsYXllclNpemU7IC8vIGlnbm9yZWQKLSAgICBleHBlY3RU
cmFuc2xhdGVYKDIsIGN1cnZlLT5nZXRWYWx1ZSgtMSwgbGF5ZXJTaXplKSk7Ci0gICAgZXhwZWN0
VHJhbnNsYXRlWCgyLCBjdXJ2ZS0+Z2V0VmFsdWUoMCwgbGF5ZXJTaXplKSk7Ci0gICAgZXhwZWN0
VHJhbnNsYXRlWCgyLCBjdXJ2ZS0+Z2V0VmFsdWUoMC41LCBsYXllclNpemUpKTsKLSAgICBleHBl
Y3RUcmFuc2xhdGVYKDIsIGN1cnZlLT5nZXRWYWx1ZSgxLCBsYXllclNpemUpKTsKLSAgICBleHBl
Y3RUcmFuc2xhdGVYKDIsIGN1cnZlLT5nZXRWYWx1ZSgyLCBsYXllclNpemUpKTsKKyAgICBleHBl
Y3RUcmFuc2xhdGVYKDIsIGN1cnZlLT5nZXRWYWx1ZSgtMSkpOworICAgIGV4cGVjdFRyYW5zbGF0
ZVgoMiwgY3VydmUtPmdldFZhbHVlKDApKTsKKyAgICBleHBlY3RUcmFuc2xhdGVYKDIsIGN1cnZl
LT5nZXRWYWx1ZSgwLjUpKTsKKyAgICBleHBlY3RUcmFuc2xhdGVYKDIsIGN1cnZlLT5nZXRWYWx1
ZSgxKSk7CisgICAgZXhwZWN0VHJhbnNsYXRlWCgyLCBjdXJ2ZS0+Z2V0VmFsdWUoMikpOwogfQog
CiAvLyBUZXN0cyB0aGF0IGEgdHJhbnNmb3JtIGFuaW1hdGlvbiB3aXRoIHR3byBrZXlmcmFtZXMg
d29ya3MgYXMgZXhwZWN0ZWQuCiBURVNUKENDS2V5ZnJhbWVkQW5pbWF0aW9uQ3VydmVUZXN0LCBU
d29UcmFuc2Zvcm1LZXlmcmFtZSkKIHsKICAgICBPd25QdHI8Q0NLZXlmcmFtZWRUcmFuc2Zvcm1B
bmltYXRpb25DdXJ2ZT4gY3VydmUoQ0NLZXlmcmFtZWRUcmFuc2Zvcm1BbmltYXRpb25DdXJ2ZTo6
Y3JlYXRlKCkpOwotICAgIFRyYW5zZm9ybU9wZXJhdGlvbnMgb3BlcmF0aW9uczE7Ci0gICAgb3Bl
cmF0aW9uczEub3BlcmF0aW9ucygpLmFwcGVuZChUcmFuc2xhdGVUcmFuc2Zvcm1PcGVyYXRpb246
OmNyZWF0ZShMZW5ndGgoMiwgRml4ZWQpLCBMZW5ndGgoMCwgRml4ZWQpLCBUcmFuc2Zvcm1PcGVy
YXRpb246OlRSQU5TTEFURV9YKSk7Ci0gICAgVHJhbnNmb3JtT3BlcmF0aW9ucyBvcGVyYXRpb25z
MjsKLSAgICBvcGVyYXRpb25zMi5vcGVyYXRpb25zKCkuYXBwZW5kKFRyYW5zbGF0ZVRyYW5zZm9y
bU9wZXJhdGlvbjo6Y3JlYXRlKExlbmd0aCg0LCBGaXhlZCksIExlbmd0aCgwLCBGaXhlZCksIFRy
YW5zZm9ybU9wZXJhdGlvbjo6VFJBTlNMQVRFX1gpKTsKKyAgICBXZWJLaXQ6OldlYlRyYW5zZm9y
bU9wZXJhdGlvbnMgb3BlcmF0aW9uczE7CisgICAgb3BlcmF0aW9uczEuYXBwZW5kVHJhbnNsYXRl
KDIsIDAsIDApOworICAgIFdlYktpdDo6V2ViVHJhbnNmb3JtT3BlcmF0aW9ucyBvcGVyYXRpb25z
MjsKKyAgICBvcGVyYXRpb25zMi5hcHBlbmRUcmFuc2xhdGUoNCwgMCwgMCk7CisKICAgICBjdXJ2
ZS0+YWRkS2V5ZnJhbWUoQ0NUcmFuc2Zvcm1LZXlmcmFtZTo6Y3JlYXRlKDAsIG9wZXJhdGlvbnMx
LCBudWxscHRyKSk7CiAgICAgY3VydmUtPmFkZEtleWZyYW1lKENDVHJhbnNmb3JtS2V5ZnJhbWU6
OmNyZWF0ZSgxLCBvcGVyYXRpb25zMiwgbnVsbHB0cikpOwotICAgIEludFNpemUgbGF5ZXJTaXpl
OyAvLyBpZ25vcmVkCi0gICAgZXhwZWN0VHJhbnNsYXRlWCgyLCBjdXJ2ZS0+Z2V0VmFsdWUoLTEs
IGxheWVyU2l6ZSkpOwotICAgIGV4cGVjdFRyYW5zbGF0ZVgoMiwgY3VydmUtPmdldFZhbHVlKDAs
IGxheWVyU2l6ZSkpOwotICAgIGV4cGVjdFRyYW5zbGF0ZVgoMywgY3VydmUtPmdldFZhbHVlKDAu
NSwgbGF5ZXJTaXplKSk7Ci0gICAgZXhwZWN0VHJhbnNsYXRlWCg0LCBjdXJ2ZS0+Z2V0VmFsdWUo
MSwgbGF5ZXJTaXplKSk7Ci0gICAgZXhwZWN0VHJhbnNsYXRlWCg0LCBjdXJ2ZS0+Z2V0VmFsdWUo
MiwgbGF5ZXJTaXplKSk7CisgICAgZXhwZWN0VHJhbnNsYXRlWCgyLCBjdXJ2ZS0+Z2V0VmFsdWUo
LTEpKTsKKyAgICBleHBlY3RUcmFuc2xhdGVYKDIsIGN1cnZlLT5nZXRWYWx1ZSgwKSk7CisgICAg
ZXhwZWN0VHJhbnNsYXRlWCgzLCBjdXJ2ZS0+Z2V0VmFsdWUoMC41KSk7CisgICAgZXhwZWN0VHJh
bnNsYXRlWCg0LCBjdXJ2ZS0+Z2V0VmFsdWUoMSkpOworICAgIGV4cGVjdFRyYW5zbGF0ZVgoNCwg
Y3VydmUtPmdldFZhbHVlKDIpKTsKIH0KIAogLy8gVGVzdHMgdGhhdCBhIHRyYW5zZm9ybSBhbmlt
YXRpb24gd2l0aCB0aHJlZSBrZXlmcmFtZXMgd29ya3MgYXMgZXhwZWN0ZWQuCiBURVNUKENDS2V5
ZnJhbWVkQW5pbWF0aW9uQ3VydmVUZXN0LCBUaHJlZVRyYW5zZm9ybUtleWZyYW1lKQogewogICAg
IE93blB0cjxDQ0tleWZyYW1lZFRyYW5zZm9ybUFuaW1hdGlvbkN1cnZlPiBjdXJ2ZShDQ0tleWZy
YW1lZFRyYW5zZm9ybUFuaW1hdGlvbkN1cnZlOjpjcmVhdGUoKSk7Ci0gICAgVHJhbnNmb3JtT3Bl
cmF0aW9ucyBvcGVyYXRpb25zMTsKLSAgICBvcGVyYXRpb25zMS5vcGVyYXRpb25zKCkuYXBwZW5k
KFRyYW5zbGF0ZVRyYW5zZm9ybU9wZXJhdGlvbjo6Y3JlYXRlKExlbmd0aCgyLCBGaXhlZCksIExl
bmd0aCgwLCBGaXhlZCksIFRyYW5zZm9ybU9wZXJhdGlvbjo6VFJBTlNMQVRFX1gpKTsKLSAgICBU
cmFuc2Zvcm1PcGVyYXRpb25zIG9wZXJhdGlvbnMyOwotICAgIG9wZXJhdGlvbnMyLm9wZXJhdGlv
bnMoKS5hcHBlbmQoVHJhbnNsYXRlVHJhbnNmb3JtT3BlcmF0aW9uOjpjcmVhdGUoTGVuZ3RoKDQs
IEZpeGVkKSwgTGVuZ3RoKDAsIEZpeGVkKSwgVHJhbnNmb3JtT3BlcmF0aW9uOjpUUkFOU0xBVEVf
WCkpOwotICAgIFRyYW5zZm9ybU9wZXJhdGlvbnMgb3BlcmF0aW9uczM7Ci0gICAgb3BlcmF0aW9u
czMub3BlcmF0aW9ucygpLmFwcGVuZChUcmFuc2xhdGVUcmFuc2Zvcm1PcGVyYXRpb246OmNyZWF0
ZShMZW5ndGgoOCwgRml4ZWQpLCBMZW5ndGgoMCwgRml4ZWQpLCBUcmFuc2Zvcm1PcGVyYXRpb246
OlRSQU5TTEFURV9YKSk7CisgICAgV2ViS2l0OjpXZWJUcmFuc2Zvcm1PcGVyYXRpb25zIG9wZXJh
dGlvbnMxOworICAgIG9wZXJhdGlvbnMxLmFwcGVuZFRyYW5zbGF0ZSgyLCAwLCAwKTsKKyAgICBX
ZWJLaXQ6OldlYlRyYW5zZm9ybU9wZXJhdGlvbnMgb3BlcmF0aW9uczI7CisgICAgb3BlcmF0aW9u
czIuYXBwZW5kVHJhbnNsYXRlKDQsIDAsIDApOworICAgIFdlYktpdDo6V2ViVHJhbnNmb3JtT3Bl
cmF0aW9ucyBvcGVyYXRpb25zMzsKKyAgICBvcGVyYXRpb25zMy5hcHBlbmRUcmFuc2xhdGUoOCwg
MCwgMCk7CiAgICAgY3VydmUtPmFkZEtleWZyYW1lKENDVHJhbnNmb3JtS2V5ZnJhbWU6OmNyZWF0
ZSgwLCBvcGVyYXRpb25zMSwgbnVsbHB0cikpOwogICAgIGN1cnZlLT5hZGRLZXlmcmFtZShDQ1Ry
YW5zZm9ybUtleWZyYW1lOjpjcmVhdGUoMSwgb3BlcmF0aW9uczIsIG51bGxwdHIpKTsKICAgICBj
dXJ2ZS0+YWRkS2V5ZnJhbWUoQ0NUcmFuc2Zvcm1LZXlmcmFtZTo6Y3JlYXRlKDIsIG9wZXJhdGlv
bnMzLCBudWxscHRyKSk7Ci0gICAgSW50U2l6ZSBsYXllclNpemU7IC8vIGlnbm9yZWQKLSAgICBl
eHBlY3RUcmFuc2xhdGVYKDIsIGN1cnZlLT5nZXRWYWx1ZSgtMSwgbGF5ZXJTaXplKSk7Ci0gICAg
ZXhwZWN0VHJhbnNsYXRlWCgyLCBjdXJ2ZS0+Z2V0VmFsdWUoMCwgbGF5ZXJTaXplKSk7Ci0gICAg
ZXhwZWN0VHJhbnNsYXRlWCgzLCBjdXJ2ZS0+Z2V0VmFsdWUoMC41LCBsYXllclNpemUpKTsKLSAg
ICBleHBlY3RUcmFuc2xhdGVYKDQsIGN1cnZlLT5nZXRWYWx1ZSgxLCBsYXllclNpemUpKTsKLSAg
ICBleHBlY3RUcmFuc2xhdGVYKDYsIGN1cnZlLT5nZXRWYWx1ZSgxLjUsIGxheWVyU2l6ZSkpOwot
ICAgIGV4cGVjdFRyYW5zbGF0ZVgoOCwgY3VydmUtPmdldFZhbHVlKDIsIGxheWVyU2l6ZSkpOwot
ICAgIGV4cGVjdFRyYW5zbGF0ZVgoOCwgY3VydmUtPmdldFZhbHVlKDMsIGxheWVyU2l6ZSkpOwor
ICAgIGV4cGVjdFRyYW5zbGF0ZVgoMiwgY3VydmUtPmdldFZhbHVlKC0xKSk7CisgICAgZXhwZWN0
VHJhbnNsYXRlWCgyLCBjdXJ2ZS0+Z2V0VmFsdWUoMCkpOworICAgIGV4cGVjdFRyYW5zbGF0ZVgo
MywgY3VydmUtPmdldFZhbHVlKDAuNSkpOworICAgIGV4cGVjdFRyYW5zbGF0ZVgoNCwgY3VydmUt
PmdldFZhbHVlKDEpKTsKKyAgICBleHBlY3RUcmFuc2xhdGVYKDYsIGN1cnZlLT5nZXRWYWx1ZSgx
LjUpKTsKKyAgICBleHBlY3RUcmFuc2xhdGVYKDgsIGN1cnZlLT5nZXRWYWx1ZSgyKSk7CisgICAg
ZXhwZWN0VHJhbnNsYXRlWCg4LCBjdXJ2ZS0+Z2V0VmFsdWUoMykpOwogfQogCiAvLyBUZXN0cyB0
aGF0IGEgdHJhbnNmb3JtIGFuaW1hdGlvbiB3aXRoIG11bHRpcGxlIGtleXMgYXQgYSBnaXZlbiB0
aW1lIHdvcmtzIHNhbmVseS4KQEAgLTE3MSwzMiArMTcwLDMwIEBAIFRFU1QoQ0NLZXlmcmFtZWRB
bmltYXRpb25DdXJ2ZVRlc3QsIFJlcGVhdGVkVHJhbnNmb3JtS2V5VGltZXMpCiB7CiAgICAgT3du
UHRyPENDS2V5ZnJhbWVkVHJhbnNmb3JtQW5pbWF0aW9uQ3VydmU+IGN1cnZlKENDS2V5ZnJhbWVk
VHJhbnNmb3JtQW5pbWF0aW9uQ3VydmU6OmNyZWF0ZSgpKTsKICAgICAvLyBBIHN0ZXAgZnVuY3Rp
b24uCi0gICAgVHJhbnNmb3JtT3BlcmF0aW9ucyBvcGVyYXRpb25zMTsKLSAgICBvcGVyYXRpb25z
MS5vcGVyYXRpb25zKCkuYXBwZW5kKFRyYW5zbGF0ZVRyYW5zZm9ybU9wZXJhdGlvbjo6Y3JlYXRl
KExlbmd0aCg0LCBGaXhlZCksIExlbmd0aCgwLCBGaXhlZCksIFRyYW5zZm9ybU9wZXJhdGlvbjo6
VFJBTlNMQVRFX1gpKTsKLSAgICBUcmFuc2Zvcm1PcGVyYXRpb25zIG9wZXJhdGlvbnMyOwotICAg
IG9wZXJhdGlvbnMyLm9wZXJhdGlvbnMoKS5hcHBlbmQoVHJhbnNsYXRlVHJhbnNmb3JtT3BlcmF0
aW9uOjpjcmVhdGUoTGVuZ3RoKDQsIEZpeGVkKSwgTGVuZ3RoKDAsIEZpeGVkKSwgVHJhbnNmb3Jt
T3BlcmF0aW9uOjpUUkFOU0xBVEVfWCkpOwotICAgIFRyYW5zZm9ybU9wZXJhdGlvbnMgb3BlcmF0
aW9uczM7Ci0gICAgb3BlcmF0aW9uczMub3BlcmF0aW9ucygpLmFwcGVuZChUcmFuc2xhdGVUcmFu
c2Zvcm1PcGVyYXRpb246OmNyZWF0ZShMZW5ndGgoNiwgRml4ZWQpLCBMZW5ndGgoMCwgRml4ZWQp
LCBUcmFuc2Zvcm1PcGVyYXRpb246OlRSQU5TTEFURV9YKSk7Ci0gICAgVHJhbnNmb3JtT3BlcmF0
aW9ucyBvcGVyYXRpb25zNDsKLSAgICBvcGVyYXRpb25zNC5vcGVyYXRpb25zKCkuYXBwZW5kKFRy
YW5zbGF0ZVRyYW5zZm9ybU9wZXJhdGlvbjo6Y3JlYXRlKExlbmd0aCg2LCBGaXhlZCksIExlbmd0
aCgwLCBGaXhlZCksIFRyYW5zZm9ybU9wZXJhdGlvbjo6VFJBTlNMQVRFX1gpKTsKKyAgICBXZWJL
aXQ6OldlYlRyYW5zZm9ybU9wZXJhdGlvbnMgb3BlcmF0aW9uczE7CisgICAgb3BlcmF0aW9uczEu
YXBwZW5kVHJhbnNsYXRlKDQsIDAsIDApOworICAgIFdlYktpdDo6V2ViVHJhbnNmb3JtT3BlcmF0
aW9ucyBvcGVyYXRpb25zMjsKKyAgICBvcGVyYXRpb25zMi5hcHBlbmRUcmFuc2xhdGUoNCwgMCwg
MCk7CisgICAgV2ViS2l0OjpXZWJUcmFuc2Zvcm1PcGVyYXRpb25zIG9wZXJhdGlvbnMzOworICAg
IG9wZXJhdGlvbnMzLmFwcGVuZFRyYW5zbGF0ZSg2LCAwLCAwKTsKKyAgICBXZWJLaXQ6OldlYlRy
YW5zZm9ybU9wZXJhdGlvbnMgb3BlcmF0aW9uczQ7CisgICAgb3BlcmF0aW9uczQuYXBwZW5kVHJh
bnNsYXRlKDYsIDAsIDApOwogICAgIGN1cnZlLT5hZGRLZXlmcmFtZShDQ1RyYW5zZm9ybUtleWZy
YW1lOjpjcmVhdGUoMCwgb3BlcmF0aW9uczEsIG51bGxwdHIpKTsKICAgICBjdXJ2ZS0+YWRkS2V5
ZnJhbWUoQ0NUcmFuc2Zvcm1LZXlmcmFtZTo6Y3JlYXRlKDEsIG9wZXJhdGlvbnMyLCBudWxscHRy
KSk7CiAgICAgY3VydmUtPmFkZEtleWZyYW1lKENDVHJhbnNmb3JtS2V5ZnJhbWU6OmNyZWF0ZSgx
LCBvcGVyYXRpb25zMywgbnVsbHB0cikpOwogICAgIGN1cnZlLT5hZGRLZXlmcmFtZShDQ1RyYW5z
Zm9ybUtleWZyYW1lOjpjcmVhdGUoMiwgb3BlcmF0aW9uczQsIG51bGxwdHIpKTsKIAotICAgIElu
dFNpemUgbGF5ZXJTaXplOyAvLyBpZ25vcmVkCi0KLSAgICBleHBlY3RUcmFuc2xhdGVYKDQsIGN1
cnZlLT5nZXRWYWx1ZSgtMSwgbGF5ZXJTaXplKSk7Ci0gICAgZXhwZWN0VHJhbnNsYXRlWCg0LCBj
dXJ2ZS0+Z2V0VmFsdWUoMCwgbGF5ZXJTaXplKSk7Ci0gICAgZXhwZWN0VHJhbnNsYXRlWCg0LCBj
dXJ2ZS0+Z2V0VmFsdWUoMC41LCBsYXllclNpemUpKTsKKyAgICBleHBlY3RUcmFuc2xhdGVYKDQs
IGN1cnZlLT5nZXRWYWx1ZSgtMSkpOworICAgIGV4cGVjdFRyYW5zbGF0ZVgoNCwgY3VydmUtPmdl
dFZhbHVlKDApKTsKKyAgICBleHBlY3RUcmFuc2xhdGVYKDQsIGN1cnZlLT5nZXRWYWx1ZSgwLjUp
KTsKIAogICAgIC8vIFRoZXJlIGlzIGEgZGlzY29udGludWl0eSBhdCAxLiBBbnkgdmFsdWUgYmV0
d2VlbiA0IGFuZCA2IGlzIHZhbGlkLgotICAgIFdlYlRyYW5zZm9ybWF0aW9uTWF0cml4IHZhbHVl
ID0gY3VydmUtPmdldFZhbHVlKDEsIGxheWVyU2l6ZSk7CisgICAgV2ViVHJhbnNmb3JtYXRpb25N
YXRyaXggdmFsdWUgPSBjdXJ2ZS0+Z2V0VmFsdWUoMSk7CiAgICAgRVhQRUNUX1RSVUUodmFsdWUu
bTQxKCkgPj0gNCAmJiB2YWx1ZS5tNDEoKSA8PSA2KTsKIAotICAgIGV4cGVjdFRyYW5zbGF0ZVgo
NiwgY3VydmUtPmdldFZhbHVlKDEuNSwgbGF5ZXJTaXplKSk7Ci0gICAgZXhwZWN0VHJhbnNsYXRl
WCg2LCBjdXJ2ZS0+Z2V0VmFsdWUoMiwgbGF5ZXJTaXplKSk7Ci0gICAgZXhwZWN0VHJhbnNsYXRl
WCg2LCBjdXJ2ZS0+Z2V0VmFsdWUoMywgbGF5ZXJTaXplKSk7CisgICAgZXhwZWN0VHJhbnNsYXRl
WCg2LCBjdXJ2ZS0+Z2V0VmFsdWUoMS41KSk7CisgICAgZXhwZWN0VHJhbnNsYXRlWCg2LCBjdXJ2
ZS0+Z2V0VmFsdWUoMikpOworICAgIGV4cGVjdFRyYW5zbGF0ZVgoNiwgY3VydmUtPmdldFZhbHVl
KDMpKTsKIH0KIAogLy8gVGVzdHMgdGhhdCB0aGUga2V5ZnJhbWVzIG1heSBiZSBhZGRlZCBvdXQg
b2Ygb3JkZXIuCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViS2l0L2Nocm9taXVtL3Rlc3RzL0NDTGF5
ZXJBbmltYXRpb25Db250cm9sbGVyVGVzdC5jcHAgYi9Tb3VyY2UvV2ViS2l0L2Nocm9taXVtL3Rl
c3RzL0NDTGF5ZXJBbmltYXRpb25Db250cm9sbGVyVGVzdC5jcHAKaW5kZXggZGJlZDAyYzc0OWI5
ZTdhZGUzM2E2NTVhZGFlNDZjYTI4YWVmYjAzZC4uNzIzNjEwOTJhZjIyODdlN2RmN2IyNTU2NjRj
ZjAyOTQxM2I4MmEwMSAxMDA2NDQKLS0tIGEvU291cmNlL1dlYktpdC9jaHJvbWl1bS90ZXN0cy9D
Q0xheWVyQW5pbWF0aW9uQ29udHJvbGxlclRlc3QuY3BwCisrKyBiL1NvdXJjZS9XZWJLaXQvY2hy
b21pdW0vdGVzdHMvQ0NMYXllckFuaW1hdGlvbkNvbnRyb2xsZXJUZXN0LmNwcApAQCAtMjksNyAr
MjksNiBAQAogI2luY2x1ZGUgIkNDQW5pbWF0aW9uVGVzdENvbW1vbi5oIgogI2luY2x1ZGUgIkdy
YXBoaWNzTGF5ZXIuaCIKICNpbmNsdWRlICJMZW5ndGguaCIKLSNpbmNsdWRlICJUcmFuc2xhdGVU
cmFuc2Zvcm1PcGVyYXRpb24uaCIKICNpbmNsdWRlICJjYy9DQ0FjdGl2ZUFuaW1hdGlvbi5oIgog
I2luY2x1ZGUgImNjL0NDQW5pbWF0aW9uQ3VydmUuaCIKIApAQCAtNTQsMTk3ICs1Myw2IEBAIFBh
c3NPd25QdHI8Q0NBY3RpdmVBbmltYXRpb24+IGNyZWF0ZUFjdGl2ZUFuaW1hdGlvbihQYXNzT3du
UHRyPENDQW5pbWF0aW9uQ3VydmU+CiAgICAgcmV0dXJuIENDQWN0aXZlQW5pbWF0aW9uOjpjcmVh
dGUoY3VydmUsIDAsIGlkLCBwcm9wZXJ0eSk7CiB9CiAKLVRFU1QoQ0NMYXllckFuaW1hdGlvbkNv
bnRyb2xsZXJUZXN0LCBjcmVhdGVPcGFjaXR5QW5pbWF0aW9uKQotewotICAgIEZha2VMYXllckFu
aW1hdGlvbkNvbnRyb2xsZXJDbGllbnQgZHVtbXk7Ci0gICAgT3duUHRyPENDTGF5ZXJBbmltYXRp
b25Db250cm9sbGVyPiBjb250cm9sbGVyKENDTGF5ZXJBbmltYXRpb25Db250cm9sbGVyOjpjcmVh
dGUoJmR1bW15KSk7Ci0gICAgY29uc3QgZG91YmxlIGR1cmF0aW9uID0gMTsKLSAgICBXZWJDb3Jl
OjpLZXlmcmFtZVZhbHVlTGlzdCB2YWx1ZXMoQW5pbWF0ZWRQcm9wZXJ0eU9wYWNpdHkpOwotICAg
IHZhbHVlcy5pbnNlcnQobmV3IEZsb2F0QW5pbWF0aW9uVmFsdWUoMCwgMCkpOwotICAgIHZhbHVl
cy5pbnNlcnQobmV3IEZsb2F0QW5pbWF0aW9uVmFsdWUoZHVyYXRpb24sIDEpKTsKLQotICAgIFJl
ZlB0cjxBbmltYXRpb24+IGFuaW1hdGlvbiA9IEFuaW1hdGlvbjo6Y3JlYXRlKCk7Ci0gICAgYW5p
bWF0aW9uLT5zZXREdXJhdGlvbihkdXJhdGlvbik7Ci0KLSAgICBJbnRTaXplIGJveFNpemU7Ci0g
ICAgY29udHJvbGxlci0+YWRkQW5pbWF0aW9uKHZhbHVlcywgYm94U2l6ZSwgYW5pbWF0aW9uLmdl
dCgpLCAwLCAwLCAwKTsKLQotICAgIEVYUEVDVF9UUlVFKGNvbnRyb2xsZXItPmhhc0FjdGl2ZUFu
aW1hdGlvbigpKTsKLQotICAgIENDQWN0aXZlQW5pbWF0aW9uKiBhY3RpdmVBbmltYXRpb24gPSBj
b250cm9sbGVyLT5nZXRBY3RpdmVBbmltYXRpb24oMCwgQ0NBY3RpdmVBbmltYXRpb246Ok9wYWNp
dHkpOwotICAgIEVYUEVDVF9UUlVFKGFjdGl2ZUFuaW1hdGlvbik7Ci0KLSAgICBFWFBFQ1RfRVEo
MSwgYWN0aXZlQW5pbWF0aW9uLT5pdGVyYXRpb25zKCkpOwotICAgIEVYUEVDVF9FUShDQ0FjdGl2
ZUFuaW1hdGlvbjo6T3BhY2l0eSwgYWN0aXZlQW5pbWF0aW9uLT50YXJnZXRQcm9wZXJ0eSgpKTsK
LQotICAgIEVYUEVDVF9FUShDQ0FuaW1hdGlvbkN1cnZlOjpGbG9hdCwgYWN0aXZlQW5pbWF0aW9u
LT5jdXJ2ZSgpLT50eXBlKCkpOwotCi0gICAgY29uc3QgQ0NGbG9hdEFuaW1hdGlvbkN1cnZlKiBj
dXJ2ZSA9IGFjdGl2ZUFuaW1hdGlvbi0+Y3VydmUoKS0+dG9GbG9hdEFuaW1hdGlvbkN1cnZlKCk7
Ci0gICAgRVhQRUNUX1RSVUUoY3VydmUpOwotCi0gICAgRVhQRUNUX0VRKDAsIGN1cnZlLT5nZXRW
YWx1ZSgwKSk7Ci0gICAgRVhQRUNUX0VRKDEsIGN1cnZlLT5nZXRWYWx1ZShkdXJhdGlvbikpOwot
fQotCi1URVNUKENDTGF5ZXJBbmltYXRpb25Db250cm9sbGVyVGVzdCwgY3JlYXRlVHJhbnNmb3Jt
QW5pbWF0aW9uKQotewotICAgIEZha2VMYXllckFuaW1hdGlvbkNvbnRyb2xsZXJDbGllbnQgZHVt
bXk7Ci0gICAgT3duUHRyPENDTGF5ZXJBbmltYXRpb25Db250cm9sbGVyPiBjb250cm9sbGVyKEND
TGF5ZXJBbmltYXRpb25Db250cm9sbGVyOjpjcmVhdGUoJmR1bW15KSk7Ci0gICAgY29uc3QgZG91
YmxlIGR1cmF0aW9uID0gMTsKLSAgICBXZWJDb3JlOjpLZXlmcmFtZVZhbHVlTGlzdCB2YWx1ZXMo
QW5pbWF0ZWRQcm9wZXJ0eVdlYmtpdFRyYW5zZm9ybSk7Ci0KLSAgICBUcmFuc2Zvcm1PcGVyYXRp
b25zIG9wZXJhdGlvbnMxOwotICAgIG9wZXJhdGlvbnMxLm9wZXJhdGlvbnMoKS5hcHBlbmQoVHJh
bnNsYXRlVHJhbnNmb3JtT3BlcmF0aW9uOjpjcmVhdGUoTGVuZ3RoKDIsIEZpeGVkKSwgTGVuZ3Ro
KDAsIEZpeGVkKSwgVHJhbnNmb3JtT3BlcmF0aW9uOjpUUkFOU0xBVEVfWCkpOwotICAgIHZhbHVl
cy5pbnNlcnQobmV3IFRyYW5zZm9ybUFuaW1hdGlvblZhbHVlKDAsICZvcGVyYXRpb25zMSkpOwot
Ci0gICAgVHJhbnNmb3JtT3BlcmF0aW9ucyBvcGVyYXRpb25zMjsKLSAgICBvcGVyYXRpb25zMi5v
cGVyYXRpb25zKCkuYXBwZW5kKFRyYW5zbGF0ZVRyYW5zZm9ybU9wZXJhdGlvbjo6Y3JlYXRlKExl
bmd0aCg0LCBGaXhlZCksIExlbmd0aCgwLCBGaXhlZCksIFRyYW5zZm9ybU9wZXJhdGlvbjo6VFJB
TlNMQVRFX1gpKTsKLSAgICB2YWx1ZXMuaW5zZXJ0KG5ldyBUcmFuc2Zvcm1BbmltYXRpb25WYWx1
ZShkdXJhdGlvbiwgJm9wZXJhdGlvbnMyKSk7Ci0KLSAgICBSZWZQdHI8QW5pbWF0aW9uPiBhbmlt
YXRpb24gPSBBbmltYXRpb246OmNyZWF0ZSgpOwotICAgIGFuaW1hdGlvbi0+c2V0RHVyYXRpb24o
ZHVyYXRpb24pOwotCi0gICAgSW50U2l6ZSBib3hTaXplOwotICAgIGNvbnRyb2xsZXItPmFkZEFu
aW1hdGlvbih2YWx1ZXMsIGJveFNpemUsIGFuaW1hdGlvbi5nZXQoKSwgMCwgMCwgMCk7Ci0KLSAg
ICBFWFBFQ1RfVFJVRShjb250cm9sbGVyLT5oYXNBY3RpdmVBbmltYXRpb24oKSk7Ci0KLSAgICBD
Q0FjdGl2ZUFuaW1hdGlvbiogYWN0aXZlQW5pbWF0aW9uID0gY29udHJvbGxlci0+Z2V0QWN0aXZl
QW5pbWF0aW9uKDAsIENDQWN0aXZlQW5pbWF0aW9uOjpUcmFuc2Zvcm0pOwotICAgIEVYUEVDVF9U
UlVFKGFjdGl2ZUFuaW1hdGlvbik7Ci0KLSAgICBFWFBFQ1RfRVEoMSwgYWN0aXZlQW5pbWF0aW9u
LT5pdGVyYXRpb25zKCkpOwotICAgIEVYUEVDVF9FUShDQ0FjdGl2ZUFuaW1hdGlvbjo6VHJhbnNm
b3JtLCBhY3RpdmVBbmltYXRpb24tPnRhcmdldFByb3BlcnR5KCkpOwotCi0gICAgRVhQRUNUX0VR
KENDQW5pbWF0aW9uQ3VydmU6OlRyYW5zZm9ybSwgYWN0aXZlQW5pbWF0aW9uLT5jdXJ2ZSgpLT50
eXBlKCkpOwotCi0gICAgY29uc3QgQ0NUcmFuc2Zvcm1BbmltYXRpb25DdXJ2ZSogY3VydmUgPSBh
Y3RpdmVBbmltYXRpb24tPmN1cnZlKCktPnRvVHJhbnNmb3JtQW5pbWF0aW9uQ3VydmUoKTsKLSAg
ICBFWFBFQ1RfVFJVRShjdXJ2ZSk7Ci0KLSAgICBleHBlY3RUcmFuc2xhdGVYKDIsIGN1cnZlLT5n
ZXRWYWx1ZSgwLCBib3hTaXplKSk7Ci0gICAgZXhwZWN0VHJhbnNsYXRlWCg0LCBjdXJ2ZS0+Z2V0
VmFsdWUoZHVyYXRpb24sIGJveFNpemUpKTsKLX0KLQotVEVTVChDQ0xheWVyQW5pbWF0aW9uQ29u
dHJvbGxlclRlc3QsIGNyZWF0ZVJldmVyc2VkQW5pbWF0aW9uKQotewotICAgIEZha2VMYXllckFu
aW1hdGlvbkNvbnRyb2xsZXJDbGllbnQgZHVtbXk7Ci0gICAgT3duUHRyPENDTGF5ZXJBbmltYXRp
b25Db250cm9sbGVyPiBjb250cm9sbGVyKENDTGF5ZXJBbmltYXRpb25Db250cm9sbGVyOjpjcmVh
dGUoJmR1bW15KSk7Ci0gICAgY29uc3QgZG91YmxlIGR1cmF0aW9uID0gMTsKLSAgICBXZWJDb3Jl
OjpLZXlmcmFtZVZhbHVlTGlzdCB2YWx1ZXMoQW5pbWF0ZWRQcm9wZXJ0eVdlYmtpdFRyYW5zZm9y
bSk7Ci0KLSAgICBUcmFuc2Zvcm1PcGVyYXRpb25zIG9wZXJhdGlvbnMxOwotICAgIG9wZXJhdGlv
bnMxLm9wZXJhdGlvbnMoKS5hcHBlbmQoVHJhbnNsYXRlVHJhbnNmb3JtT3BlcmF0aW9uOjpjcmVh
dGUoTGVuZ3RoKDIsIEZpeGVkKSwgTGVuZ3RoKDAsIEZpeGVkKSwgVHJhbnNmb3JtT3BlcmF0aW9u
OjpUUkFOU0xBVEVfWCkpOwotICAgIHZhbHVlcy5pbnNlcnQobmV3IFRyYW5zZm9ybUFuaW1hdGlv
blZhbHVlKDAsICZvcGVyYXRpb25zMSkpOwotCi0gICAgVHJhbnNmb3JtT3BlcmF0aW9ucyBvcGVy
YXRpb25zMjsKLSAgICBvcGVyYXRpb25zMi5vcGVyYXRpb25zKCkuYXBwZW5kKFRyYW5zbGF0ZVRy
YW5zZm9ybU9wZXJhdGlvbjo6Y3JlYXRlKExlbmd0aCg0LCBGaXhlZCksIExlbmd0aCgwLCBGaXhl
ZCksIFRyYW5zZm9ybU9wZXJhdGlvbjo6VFJBTlNMQVRFX1gpKTsKLSAgICB2YWx1ZXMuaW5zZXJ0
KG5ldyBUcmFuc2Zvcm1BbmltYXRpb25WYWx1ZShkdXJhdGlvbiwgJm9wZXJhdGlvbnMyKSk7Ci0K
LSAgICBSZWZQdHI8QW5pbWF0aW9uPiBhbmltYXRpb24gPSBBbmltYXRpb246OmNyZWF0ZSgpOwot
ICAgIGFuaW1hdGlvbi0+c2V0RHVyYXRpb24oZHVyYXRpb24pOwotICAgIGFuaW1hdGlvbi0+c2V0
RGlyZWN0aW9uKEFuaW1hdGlvbjo6QW5pbWF0aW9uRGlyZWN0aW9uUmV2ZXJzZSk7Ci0KLSAgICBJ
bnRTaXplIGJveFNpemU7Ci0gICAgY29udHJvbGxlci0+YWRkQW5pbWF0aW9uKHZhbHVlcywgYm94
U2l6ZSwgYW5pbWF0aW9uLmdldCgpLCAwLCAwLCAwKTsKLQotICAgIEVYUEVDVF9UUlVFKGNvbnRy
b2xsZXItPmhhc0FjdGl2ZUFuaW1hdGlvbigpKTsKLQotICAgIENDQWN0aXZlQW5pbWF0aW9uKiBh
Y3RpdmVBbmltYXRpb24gPSBjb250cm9sbGVyLT5nZXRBY3RpdmVBbmltYXRpb24oMCwgQ0NBY3Rp
dmVBbmltYXRpb246OlRyYW5zZm9ybSk7Ci0gICAgRVhQRUNUX1RSVUUoYWN0aXZlQW5pbWF0aW9u
KTsKLQotICAgIEVYUEVDVF9FUSgxLCBhY3RpdmVBbmltYXRpb24tPml0ZXJhdGlvbnMoKSk7Ci0g
ICAgRVhQRUNUX0VRKENDQWN0aXZlQW5pbWF0aW9uOjpUcmFuc2Zvcm0sIGFjdGl2ZUFuaW1hdGlv
bi0+dGFyZ2V0UHJvcGVydHkoKSk7Ci0KLSAgICBFWFBFQ1RfRVEoQ0NBbmltYXRpb25DdXJ2ZTo6
VHJhbnNmb3JtLCBhY3RpdmVBbmltYXRpb24tPmN1cnZlKCktPnR5cGUoKSk7Ci0KLSAgICBjb25z
dCBDQ1RyYW5zZm9ybUFuaW1hdGlvbkN1cnZlKiBjdXJ2ZSA9IGFjdGl2ZUFuaW1hdGlvbi0+Y3Vy
dmUoKS0+dG9UcmFuc2Zvcm1BbmltYXRpb25DdXJ2ZSgpOwotICAgIEVYUEVDVF9UUlVFKGN1cnZl
KTsKLQotICAgIGV4cGVjdFRyYW5zbGF0ZVgoNCwgY3VydmUtPmdldFZhbHVlKDAsIGJveFNpemUp
KTsKLSAgICBleHBlY3RUcmFuc2xhdGVYKDIsIGN1cnZlLT5nZXRWYWx1ZShkdXJhdGlvbiwgYm94
U2l6ZSkpOwotfQotCi1URVNUKENDTGF5ZXJBbmltYXRpb25Db250cm9sbGVyVGVzdCwgY3JlYXRl
QWx0ZXJuYXRpbmdBbmltYXRpb24pCi17Ci0gICAgRmFrZUxheWVyQW5pbWF0aW9uQ29udHJvbGxl
ckNsaWVudCBkdW1teTsKLSAgICBPd25QdHI8Q0NMYXllckFuaW1hdGlvbkNvbnRyb2xsZXI+IGNv
bnRyb2xsZXIoQ0NMYXllckFuaW1hdGlvbkNvbnRyb2xsZXI6OmNyZWF0ZSgmZHVtbXkpKTsKLSAg
ICBjb25zdCBkb3VibGUgZHVyYXRpb24gPSAxOwotICAgIFdlYkNvcmU6OktleWZyYW1lVmFsdWVM
aXN0IHZhbHVlcyhBbmltYXRlZFByb3BlcnR5V2Via2l0VHJhbnNmb3JtKTsKLQotICAgIFRyYW5z
Zm9ybU9wZXJhdGlvbnMgb3BlcmF0aW9uczE7Ci0gICAgb3BlcmF0aW9uczEub3BlcmF0aW9ucygp
LmFwcGVuZChUcmFuc2xhdGVUcmFuc2Zvcm1PcGVyYXRpb246OmNyZWF0ZShMZW5ndGgoMiwgRml4
ZWQpLCBMZW5ndGgoMCwgRml4ZWQpLCBUcmFuc2Zvcm1PcGVyYXRpb246OlRSQU5TTEFURV9YKSk7
Ci0gICAgdmFsdWVzLmluc2VydChuZXcgVHJhbnNmb3JtQW5pbWF0aW9uVmFsdWUoMCwgJm9wZXJh
dGlvbnMxKSk7Ci0KLSAgICBUcmFuc2Zvcm1PcGVyYXRpb25zIG9wZXJhdGlvbnMyOwotICAgIG9w
ZXJhdGlvbnMyLm9wZXJhdGlvbnMoKS5hcHBlbmQoVHJhbnNsYXRlVHJhbnNmb3JtT3BlcmF0aW9u
OjpjcmVhdGUoTGVuZ3RoKDQsIEZpeGVkKSwgTGVuZ3RoKDAsIEZpeGVkKSwgVHJhbnNmb3JtT3Bl
cmF0aW9uOjpUUkFOU0xBVEVfWCkpOwotICAgIHZhbHVlcy5pbnNlcnQobmV3IFRyYW5zZm9ybUFu
aW1hdGlvblZhbHVlKGR1cmF0aW9uLCAmb3BlcmF0aW9uczIpKTsKLQotICAgIFJlZlB0cjxBbmlt
YXRpb24+IGFuaW1hdGlvbiA9IEFuaW1hdGlvbjo6Y3JlYXRlKCk7Ci0gICAgYW5pbWF0aW9uLT5z
ZXREdXJhdGlvbihkdXJhdGlvbik7Ci0gICAgYW5pbWF0aW9uLT5zZXREaXJlY3Rpb24oQW5pbWF0
aW9uOjpBbmltYXRpb25EaXJlY3Rpb25BbHRlcm5hdGUpOwotICAgIGFuaW1hdGlvbi0+c2V0SXRl
cmF0aW9uQ291bnQoMik7Ci0KLSAgICBJbnRTaXplIGJveFNpemU7Ci0gICAgY29udHJvbGxlci0+
YWRkQW5pbWF0aW9uKHZhbHVlcywgYm94U2l6ZSwgYW5pbWF0aW9uLmdldCgpLCAwLCAwLCAwKTsK
LQotICAgIEVYUEVDVF9UUlVFKGNvbnRyb2xsZXItPmhhc0FjdGl2ZUFuaW1hdGlvbigpKTsKLQot
ICAgIENDQWN0aXZlQW5pbWF0aW9uKiBhY3RpdmVBbmltYXRpb24gPSBjb250cm9sbGVyLT5nZXRB
Y3RpdmVBbmltYXRpb24oMCwgQ0NBY3RpdmVBbmltYXRpb246OlRyYW5zZm9ybSk7Ci0gICAgRVhQ
RUNUX1RSVUUoYWN0aXZlQW5pbWF0aW9uKTsKLSAgICBFWFBFQ1RfVFJVRShhY3RpdmVBbmltYXRp
b24tPmFsdGVybmF0ZXNEaXJlY3Rpb24oKSk7Ci0KLSAgICBFWFBFQ1RfRVEoMiwgYWN0aXZlQW5p
bWF0aW9uLT5pdGVyYXRpb25zKCkpOwotICAgIEVYUEVDVF9FUShDQ0FjdGl2ZUFuaW1hdGlvbjo6
VHJhbnNmb3JtLCBhY3RpdmVBbmltYXRpb24tPnRhcmdldFByb3BlcnR5KCkpOwotCi0gICAgRVhQ
RUNUX0VRKENDQW5pbWF0aW9uQ3VydmU6OlRyYW5zZm9ybSwgYWN0aXZlQW5pbWF0aW9uLT5jdXJ2
ZSgpLT50eXBlKCkpOwotCi0gICAgY29uc3QgQ0NUcmFuc2Zvcm1BbmltYXRpb25DdXJ2ZSogY3Vy
dmUgPSBhY3RpdmVBbmltYXRpb24tPmN1cnZlKCktPnRvVHJhbnNmb3JtQW5pbWF0aW9uQ3VydmUo
KTsKLSAgICBFWFBFQ1RfVFJVRShjdXJ2ZSk7Ci0KLSAgICBleHBlY3RUcmFuc2xhdGVYKDIsIGN1
cnZlLT5nZXRWYWx1ZSgwLCBib3hTaXplKSk7Ci0gICAgZXhwZWN0VHJhbnNsYXRlWCg0LCBjdXJ2
ZS0+Z2V0VmFsdWUoZHVyYXRpb24sIGJveFNpemUpKTsKLX0KLQotVEVTVChDQ0xheWVyQW5pbWF0
aW9uQ29udHJvbGxlclRlc3QsIGNyZWF0ZVJldmVyc2VkQWx0ZXJuYXRpbmdBbmltYXRpb24pCi17
Ci0gICAgRmFrZUxheWVyQW5pbWF0aW9uQ29udHJvbGxlckNsaWVudCBkdW1teTsKLSAgICBPd25Q
dHI8Q0NMYXllckFuaW1hdGlvbkNvbnRyb2xsZXI+IGNvbnRyb2xsZXIoQ0NMYXllckFuaW1hdGlv
bkNvbnRyb2xsZXI6OmNyZWF0ZSgmZHVtbXkpKTsKLSAgICBjb25zdCBkb3VibGUgZHVyYXRpb24g
PSAxOwotICAgIFdlYkNvcmU6OktleWZyYW1lVmFsdWVMaXN0IHZhbHVlcyhBbmltYXRlZFByb3Bl
cnR5V2Via2l0VHJhbnNmb3JtKTsKLQotICAgIFRyYW5zZm9ybU9wZXJhdGlvbnMgb3BlcmF0aW9u
czE7Ci0gICAgb3BlcmF0aW9uczEub3BlcmF0aW9ucygpLmFwcGVuZChUcmFuc2xhdGVUcmFuc2Zv
cm1PcGVyYXRpb246OmNyZWF0ZShMZW5ndGgoMiwgRml4ZWQpLCBMZW5ndGgoMCwgRml4ZWQpLCBU
cmFuc2Zvcm1PcGVyYXRpb246OlRSQU5TTEFURV9YKSk7Ci0gICAgdmFsdWVzLmluc2VydChuZXcg
VHJhbnNmb3JtQW5pbWF0aW9uVmFsdWUoMCwgJm9wZXJhdGlvbnMxKSk7Ci0KLSAgICBUcmFuc2Zv
cm1PcGVyYXRpb25zIG9wZXJhdGlvbnMyOwotICAgIG9wZXJhdGlvbnMyLm9wZXJhdGlvbnMoKS5h
cHBlbmQoVHJhbnNsYXRlVHJhbnNmb3JtT3BlcmF0aW9uOjpjcmVhdGUoTGVuZ3RoKDQsIEZpeGVk
KSwgTGVuZ3RoKDAsIEZpeGVkKSwgVHJhbnNmb3JtT3BlcmF0aW9uOjpUUkFOU0xBVEVfWCkpOwot
ICAgIHZhbHVlcy5pbnNlcnQobmV3IFRyYW5zZm9ybUFuaW1hdGlvblZhbHVlKGR1cmF0aW9uLCAm
b3BlcmF0aW9uczIpKTsKLQotICAgIFJlZlB0cjxBbmltYXRpb24+IGFuaW1hdGlvbiA9IEFuaW1h
dGlvbjo6Y3JlYXRlKCk7Ci0gICAgYW5pbWF0aW9uLT5zZXREdXJhdGlvbihkdXJhdGlvbik7Ci0g
ICAgYW5pbWF0aW9uLT5zZXREaXJlY3Rpb24oQW5pbWF0aW9uOjpBbmltYXRpb25EaXJlY3Rpb25B
bHRlcm5hdGVSZXZlcnNlKTsKLSAgICBhbmltYXRpb24tPnNldEl0ZXJhdGlvbkNvdW50KDIpOwot
Ci0gICAgSW50U2l6ZSBib3hTaXplOwotICAgIGNvbnRyb2xsZXItPmFkZEFuaW1hdGlvbih2YWx1
ZXMsIGJveFNpemUsIGFuaW1hdGlvbi5nZXQoKSwgMCwgMCwgMCk7Ci0KLSAgICBFWFBFQ1RfVFJV
RShjb250cm9sbGVyLT5oYXNBY3RpdmVBbmltYXRpb24oKSk7Ci0KLSAgICBDQ0FjdGl2ZUFuaW1h
dGlvbiogYWN0aXZlQW5pbWF0aW9uID0gY29udHJvbGxlci0+Z2V0QWN0aXZlQW5pbWF0aW9uKDAs
IENDQWN0aXZlQW5pbWF0aW9uOjpUcmFuc2Zvcm0pOwotICAgIEVYUEVDVF9UUlVFKGFjdGl2ZUFu
aW1hdGlvbik7Ci0gICAgRVhQRUNUX1RSVUUoYWN0aXZlQW5pbWF0aW9uLT5hbHRlcm5hdGVzRGly
ZWN0aW9uKCkpOwotCi0gICAgRVhQRUNUX0VRKDIsIGFjdGl2ZUFuaW1hdGlvbi0+aXRlcmF0aW9u
cygpKTsKLSAgICBFWFBFQ1RfRVEoQ0NBY3RpdmVBbmltYXRpb246OlRyYW5zZm9ybSwgYWN0aXZl
QW5pbWF0aW9uLT50YXJnZXRQcm9wZXJ0eSgpKTsKLQotICAgIEVYUEVDVF9FUShDQ0FuaW1hdGlv
bkN1cnZlOjpUcmFuc2Zvcm0sIGFjdGl2ZUFuaW1hdGlvbi0+Y3VydmUoKS0+dHlwZSgpKTsKLQot
ICAgIGNvbnN0IENDVHJhbnNmb3JtQW5pbWF0aW9uQ3VydmUqIGN1cnZlID0gYWN0aXZlQW5pbWF0
aW9uLT5jdXJ2ZSgpLT50b1RyYW5zZm9ybUFuaW1hdGlvbkN1cnZlKCk7Ci0gICAgRVhQRUNUX1RS
VUUoY3VydmUpOwotCi0gICAgZXhwZWN0VHJhbnNsYXRlWCg0LCBjdXJ2ZS0+Z2V0VmFsdWUoMCwg
Ym94U2l6ZSkpOwotICAgIGV4cGVjdFRyYW5zbGF0ZVgoMiwgY3VydmUtPmdldFZhbHVlKGR1cmF0
aW9uLCBib3hTaXplKSk7Ci19Ci0KIFRFU1QoQ0NMYXllckFuaW1hdGlvbkNvbnRyb2xsZXJUZXN0
LCBzeW5jTmV3QW5pbWF0aW9uKQogewogICAgIEZha2VMYXllckFuaW1hdGlvbkNvbnRyb2xsZXJD
bGllbnQgZHVtbXlJbXBsOwpAQCAtMzMzLDcgKzE0MSw2IEBAIFRFU1QoQ0NMYXllckFuaW1hdGlv
bkNvbnRyb2xsZXJUZXN0LCBzeW5jUGF1c2VBbmRSZXN1bWUpCiAgICAgRVhQRUNUX0VRKENDQWN0
aXZlQW5pbWF0aW9uOjpSdW5uaW5nLCBjb250cm9sbGVySW1wbC0+Z2V0QWN0aXZlQW5pbWF0aW9u
KDAsIENDQWN0aXZlQW5pbWF0aW9uOjpPcGFjaXR5KS0+cnVuU3RhdGUoKSk7CiB9CiAKLQogVEVT
VChDQ0xheWVyQW5pbWF0aW9uQ29udHJvbGxlclRlc3QsIGRvTm90U3luY0ZpbmlzaGVkQW5pbWF0
aW9uKQogewogICAgIEZha2VMYXllckFuaW1hdGlvbkNvbnRyb2xsZXJDbGllbnQgZHVtbXlJbXBs
OwpAQCAtMzc1LDcgKzE4Miw3IEBAIFRFU1QoQ0NMYXllckFuaW1hdGlvbkNvbnRyb2xsZXJUZXN0
LCBUcml2aWFsVHJhbnNpdGlvbikKIAogICAgIE93blB0cjxDQ0FjdGl2ZUFuaW1hdGlvbj4gdG9B
ZGQoY3JlYXRlQWN0aXZlQW5pbWF0aW9uKGFkb3B0UHRyKG5ldyBGYWtlRmxvYXRUcmFuc2l0aW9u
KDEsIDAsIDEpKSwgMSwgQ0NBY3RpdmVBbmltYXRpb246Ok9wYWNpdHkpKTsKIAotICAgIGNvbnRy
b2xsZXItPmFkZCh0b0FkZC5yZWxlYXNlKCkpOworICAgIGNvbnRyb2xsZXItPmFkZEFuaW1hdGlv
bih0b0FkZC5yZWxlYXNlKCkpOwogICAgIGNvbnRyb2xsZXItPmFuaW1hdGUoMCwgZXZlbnRzLmdl
dCgpKTsKICAgICBFWFBFQ1RfVFJVRShjb250cm9sbGVyLT5oYXNBY3RpdmVBbmltYXRpb24oKSk7
CiAgICAgRVhQRUNUX0VRKDAsIGR1bW15Lm9wYWNpdHkoKSk7CkBAIC0zOTYsNyArMjAzLDcgQEAg
VEVTVChDQ0xheWVyQW5pbWF0aW9uQ29udHJvbGxlclRlc3QsIEFuaW1hdGlvbnNXYWl0aW5nRm9y
U3RhcnRUaW1lRG9Ob3RGaW5pc2hJZlQKICAgICB0b0FkZC0+c2V0TmVlZHNTeW5jaHJvbml6ZWRT
dGFydFRpbWUodHJ1ZSk7CiAKICAgICAvLyBXZSBzaG91bGQgcGF1c2UgYXQgdGhlIGZpcnN0IGtl
eWZyYW1lIGluZGVmaW5pdGVseSB3YWl0aW5nIGZvciB0aGF0IGFuaW1hdGlvbiB0byBzdGFydC4K
LSAgICBjb250cm9sbGVyLT5hZGQodG9BZGQucmVsZWFzZSgpKTsKKyAgICBjb250cm9sbGVyLT5h
ZGRBbmltYXRpb24odG9BZGQucmVsZWFzZSgpKTsKICAgICBjb250cm9sbGVyLT5hbmltYXRlKDAs
IGV2ZW50cy5nZXQoKSk7CiAgICAgRVhQRUNUX1RSVUUoY29udHJvbGxlci0+aGFzQWN0aXZlQW5p
bWF0aW9uKCkpOwogICAgIEVYUEVDVF9FUSgwLCBkdW1teS5vcGFjaXR5KCkpOwpAQCAtNDIyLDgg
KzIyOSw4IEBAIFRFU1QoQ0NMYXllckFuaW1hdGlvbkNvbnRyb2xsZXJUZXN0LCBUcml2aWFsUXVl
dWluZykKICAgICBPd25QdHI8Q0NMYXllckFuaW1hdGlvbkNvbnRyb2xsZXI+IGNvbnRyb2xsZXIo
CiAgICAgICAgIENDTGF5ZXJBbmltYXRpb25Db250cm9sbGVyOjpjcmVhdGUoJmR1bW15KSk7CiAK
LSAgICBjb250cm9sbGVyLT5hZGQoY3JlYXRlQWN0aXZlQW5pbWF0aW9uKGFkb3B0UHRyKG5ldyBG
YWtlRmxvYXRUcmFuc2l0aW9uKDEsIDAsIDEpKSwgMSwgQ0NBY3RpdmVBbmltYXRpb246Ok9wYWNp
dHkpKTsKLSAgICBjb250cm9sbGVyLT5hZGQoY3JlYXRlQWN0aXZlQW5pbWF0aW9uKGFkb3B0UHRy
KG5ldyBGYWtlRmxvYXRUcmFuc2l0aW9uKDEsIDEsIDAuNSkpLCAyLCBDQ0FjdGl2ZUFuaW1hdGlv
bjo6T3BhY2l0eSkpOworICAgIGNvbnRyb2xsZXItPmFkZEFuaW1hdGlvbihjcmVhdGVBY3RpdmVB
bmltYXRpb24oYWRvcHRQdHIobmV3IEZha2VGbG9hdFRyYW5zaXRpb24oMSwgMCwgMSkpLCAxLCBD
Q0FjdGl2ZUFuaW1hdGlvbjo6T3BhY2l0eSkpOworICAgIGNvbnRyb2xsZXItPmFkZEFuaW1hdGlv
bihjcmVhdGVBY3RpdmVBbmltYXRpb24oYWRvcHRQdHIobmV3IEZha2VGbG9hdFRyYW5zaXRpb24o
MSwgMSwgMC41KSksIDIsIENDQWN0aXZlQW5pbWF0aW9uOjpPcGFjaXR5KSk7CiAKICAgICBjb250
cm9sbGVyLT5hbmltYXRlKDAsIGV2ZW50cy5nZXQoKSk7CiAgICAgRVhQRUNUX1RSVUUoY29udHJv
bGxlci0+aGFzQWN0aXZlQW5pbWF0aW9uKCkpOwpAQCAtNDQzLDE0ICsyNTAsMTQgQEAgVEVTVChD
Q0xheWVyQW5pbWF0aW9uQ29udHJvbGxlclRlc3QsIEludGVycnVwdCkKICAgICBGYWtlTGF5ZXJB
bmltYXRpb25Db250cm9sbGVyQ2xpZW50IGR1bW15OwogICAgIE93blB0cjxDQ0xheWVyQW5pbWF0
aW9uQ29udHJvbGxlcj4gY29udHJvbGxlcigKICAgICAgICAgQ0NMYXllckFuaW1hdGlvbkNvbnRy
b2xsZXI6OmNyZWF0ZSgmZHVtbXkpKTsKLSAgICBjb250cm9sbGVyLT5hZGQoY3JlYXRlQWN0aXZl
QW5pbWF0aW9uKGFkb3B0UHRyKG5ldyBGYWtlRmxvYXRUcmFuc2l0aW9uKDEsIDAsIDEpKSwgMSwg
Q0NBY3RpdmVBbmltYXRpb246Ok9wYWNpdHkpKTsKKyAgICBjb250cm9sbGVyLT5hZGRBbmltYXRp
b24oY3JlYXRlQWN0aXZlQW5pbWF0aW9uKGFkb3B0UHRyKG5ldyBGYWtlRmxvYXRUcmFuc2l0aW9u
KDEsIDAsIDEpKSwgMSwgQ0NBY3RpdmVBbmltYXRpb246Ok9wYWNpdHkpKTsKICAgICBjb250cm9s
bGVyLT5hbmltYXRlKDAsIGV2ZW50cy5nZXQoKSk7CiAgICAgRVhQRUNUX1RSVUUoY29udHJvbGxl
ci0+aGFzQWN0aXZlQW5pbWF0aW9uKCkpOwogICAgIEVYUEVDVF9FUSgwLCBkdW1teS5vcGFjaXR5
KCkpOwogCiAgICAgT3duUHRyPENDQWN0aXZlQW5pbWF0aW9uPiB0b0FkZChjcmVhdGVBY3RpdmVB
bmltYXRpb24oYWRvcHRQdHIobmV3IEZha2VGbG9hdFRyYW5zaXRpb24oMSwgMSwgMC41KSksIDIs
IENDQWN0aXZlQW5pbWF0aW9uOjpPcGFjaXR5KSk7CiAgICAgdG9BZGQtPnNldFJ1blN0YXRlKEND
QWN0aXZlQW5pbWF0aW9uOjpXYWl0aW5nRm9yTmV4dFRpY2ssIDApOwotICAgIGNvbnRyb2xsZXIt
PmFkZCh0b0FkZC5yZWxlYXNlKCkpOworICAgIGNvbnRyb2xsZXItPmFkZEFuaW1hdGlvbih0b0Fk
ZC5yZWxlYXNlKCkpOwogCiAgICAgLy8gU2luY2UgdGhlIGFuaW1hdGlvbiB3YXMgaW4gdGhlIFdh
aXRpbmdGb3JOZXh0VGljayBzdGF0ZSwgaXQgc2hvdWxkIHN0YXJ0IHJpZ2h0IGluCiAgICAgLy8g
dGhpcyBjYWxsIHRvIGFuaW1hdGUuCkBAIC00NzAsOSArMjc3LDkgQEAgVEVTVChDQ0xheWVyQW5p
bWF0aW9uQ29udHJvbGxlclRlc3QsIFNjaGVkdWxlVG9nZXRoZXJXaGVuQVByb3BlcnR5SXNCbG9j
a2VkKQogICAgIE93blB0cjxDQ0xheWVyQW5pbWF0aW9uQ29udHJvbGxlcj4gY29udHJvbGxlcigK
ICAgICAgICAgQ0NMYXllckFuaW1hdGlvbkNvbnRyb2xsZXI6OmNyZWF0ZSgmZHVtbXkpKTsKIAot
ICAgIGNvbnRyb2xsZXItPmFkZChjcmVhdGVBY3RpdmVBbmltYXRpb24oYWRvcHRQdHIobmV3IEZh
a2VUcmFuc2Zvcm1UcmFuc2l0aW9uKDEpKSwgMSwgQ0NBY3RpdmVBbmltYXRpb246OlRyYW5zZm9y
bSkpOwotICAgIGNvbnRyb2xsZXItPmFkZChjcmVhdGVBY3RpdmVBbmltYXRpb24oYWRvcHRQdHIo
bmV3IEZha2VUcmFuc2Zvcm1UcmFuc2l0aW9uKDEpKSwgMiwgQ0NBY3RpdmVBbmltYXRpb246OlRy
YW5zZm9ybSkpOwotICAgIGNvbnRyb2xsZXItPmFkZChjcmVhdGVBY3RpdmVBbmltYXRpb24oYWRv
cHRQdHIobmV3IEZha2VGbG9hdFRyYW5zaXRpb24oMSwgMCwgMSkpLCAyLCBDQ0FjdGl2ZUFuaW1h
dGlvbjo6T3BhY2l0eSkpOworICAgIGNvbnRyb2xsZXItPmFkZEFuaW1hdGlvbihjcmVhdGVBY3Rp
dmVBbmltYXRpb24oYWRvcHRQdHIobmV3IEZha2VUcmFuc2Zvcm1UcmFuc2l0aW9uKDEpKSwgMSwg
Q0NBY3RpdmVBbmltYXRpb246OlRyYW5zZm9ybSkpOworICAgIGNvbnRyb2xsZXItPmFkZEFuaW1h
dGlvbihjcmVhdGVBY3RpdmVBbmltYXRpb24oYWRvcHRQdHIobmV3IEZha2VUcmFuc2Zvcm1UcmFu
c2l0aW9uKDEpKSwgMiwgQ0NBY3RpdmVBbmltYXRpb246OlRyYW5zZm9ybSkpOworICAgIGNvbnRy
b2xsZXItPmFkZEFuaW1hdGlvbihjcmVhdGVBY3RpdmVBbmltYXRpb24oYWRvcHRQdHIobmV3IEZh
a2VGbG9hdFRyYW5zaXRpb24oMSwgMCwgMSkpLCAyLCBDQ0FjdGl2ZUFuaW1hdGlvbjo6T3BhY2l0
eSkpOwogCiAgICAgY29udHJvbGxlci0+YW5pbWF0ZSgwLCBldmVudHMuZ2V0KCkpOwogICAgIEVY
UEVDVF9FUSgwLCBkdW1teS5vcGFjaXR5KCkpOwpAQCAtNDk3LDkgKzMwNCw5IEBAIFRFU1QoQ0NM
YXllckFuaW1hdGlvbkNvbnRyb2xsZXJUZXN0LCBTY2hlZHVsZVRvZ2V0aGVyV2l0aEFuQW5pbVdh
aXRpbmcpCiAgICAgT3duUHRyPENDTGF5ZXJBbmltYXRpb25Db250cm9sbGVyPiBjb250cm9sbGVy
KAogICAgICAgICBDQ0xheWVyQW5pbWF0aW9uQ29udHJvbGxlcjo6Y3JlYXRlKCZkdW1teSkpOwog
Ci0gICAgY29udHJvbGxlci0+YWRkKGNyZWF0ZUFjdGl2ZUFuaW1hdGlvbihhZG9wdFB0cihuZXcg
RmFrZVRyYW5zZm9ybVRyYW5zaXRpb24oMikpLCAxLCBDQ0FjdGl2ZUFuaW1hdGlvbjo6VHJhbnNm
b3JtKSk7Ci0gICAgY29udHJvbGxlci0+YWRkKGNyZWF0ZUFjdGl2ZUFuaW1hdGlvbihhZG9wdFB0
cihuZXcgRmFrZUZsb2F0VHJhbnNpdGlvbigxLCAwLCAxKSksIDEsIENDQWN0aXZlQW5pbWF0aW9u
OjpPcGFjaXR5KSk7Ci0gICAgY29udHJvbGxlci0+YWRkKGNyZWF0ZUFjdGl2ZUFuaW1hdGlvbihh
ZG9wdFB0cihuZXcgRmFrZUZsb2F0VHJhbnNpdGlvbigxLCAxLCAwLjUpKSwgMiwgQ0NBY3RpdmVB
bmltYXRpb246Ok9wYWNpdHkpKTsKKyAgICBjb250cm9sbGVyLT5hZGRBbmltYXRpb24oY3JlYXRl
QWN0aXZlQW5pbWF0aW9uKGFkb3B0UHRyKG5ldyBGYWtlVHJhbnNmb3JtVHJhbnNpdGlvbigyKSks
IDEsIENDQWN0aXZlQW5pbWF0aW9uOjpUcmFuc2Zvcm0pKTsKKyAgICBjb250cm9sbGVyLT5hZGRB
bmltYXRpb24oY3JlYXRlQWN0aXZlQW5pbWF0aW9uKGFkb3B0UHRyKG5ldyBGYWtlRmxvYXRUcmFu
c2l0aW9uKDEsIDAsIDEpKSwgMSwgQ0NBY3RpdmVBbmltYXRpb246Ok9wYWNpdHkpKTsKKyAgICBj
b250cm9sbGVyLT5hZGRBbmltYXRpb24oY3JlYXRlQWN0aXZlQW5pbWF0aW9uKGFkb3B0UHRyKG5l
dyBGYWtlRmxvYXRUcmFuc2l0aW9uKDEsIDEsIDAuNSkpLCAyLCBDQ0FjdGl2ZUFuaW1hdGlvbjo6
T3BhY2l0eSkpOwogCiAgICAgLy8gQW5pbWF0aW9ucyB3aXRoIGlkIDEgc2hvdWxkIGJvdGggc3Rh
cnQgbm93LgogICAgIGNvbnRyb2xsZXItPmFuaW1hdGUoMCwgZXZlbnRzLmdldCgpKTsKQEAgLTUz
MCw3ICszMzcsNyBAQCBURVNUKENDTGF5ZXJBbmltYXRpb25Db250cm9sbGVyVGVzdCwgU2NoZWR1
bGVBbmltYXRpb24pCiAgICAgT3duUHRyPENDQWN0aXZlQW5pbWF0aW9uPiB0b0FkZChjcmVhdGVB
Y3RpdmVBbmltYXRpb24oYWRvcHRQdHIobmV3IEZha2VGbG9hdFRyYW5zaXRpb24oMSwgMCwgMSkp
LCAxLCBDQ0FjdGl2ZUFuaW1hdGlvbjo6T3BhY2l0eSkpOwogICAgIHRvQWRkLT5zZXRSdW5TdGF0
ZShDQ0FjdGl2ZUFuaW1hdGlvbjo6V2FpdGluZ0ZvclN0YXJ0VGltZSwgMCk7CiAgICAgdG9BZGQt
PnNldFN0YXJ0VGltZSgxKTsKLSAgICBjb250cm9sbGVyLT5hZGQodG9BZGQucmVsZWFzZSgpKTsK
KyAgICBjb250cm9sbGVyLT5hZGRBbmltYXRpb24odG9BZGQucmVsZWFzZSgpKTsKIAogICAgIGNv
bnRyb2xsZXItPmFuaW1hdGUoMCwgZXZlbnRzLmdldCgpKTsKICAgICBFWFBFQ1RfVFJVRShjb250
cm9sbGVyLT5oYXNBY3RpdmVBbmltYXRpb24oKSk7CkBAIC01NTEsMTIgKzM1OCwxMiBAQCBURVNU
KENDTGF5ZXJBbmltYXRpb25Db250cm9sbGVyVGVzdCwgU2NoZWR1bGVkQW5pbWF0aW9uSW50ZXJy
dXB0c1J1bm5pbmdBbmltYXRpbwogICAgIE93blB0cjxDQ0xheWVyQW5pbWF0aW9uQ29udHJvbGxl
cj4gY29udHJvbGxlcigKICAgICAgICAgQ0NMYXllckFuaW1hdGlvbkNvbnRyb2xsZXI6OmNyZWF0
ZSgmZHVtbXkpKTsKIAotICAgIGNvbnRyb2xsZXItPmFkZChjcmVhdGVBY3RpdmVBbmltYXRpb24o
YWRvcHRQdHIobmV3IEZha2VGbG9hdFRyYW5zaXRpb24oMiwgMCwgMSkpLCAxLCBDQ0FjdGl2ZUFu
aW1hdGlvbjo6T3BhY2l0eSkpOworICAgIGNvbnRyb2xsZXItPmFkZEFuaW1hdGlvbihjcmVhdGVB
Y3RpdmVBbmltYXRpb24oYWRvcHRQdHIobmV3IEZha2VGbG9hdFRyYW5zaXRpb24oMiwgMCwgMSkp
LCAxLCBDQ0FjdGl2ZUFuaW1hdGlvbjo6T3BhY2l0eSkpOwogCiAgICAgT3duUHRyPENDQWN0aXZl
QW5pbWF0aW9uPiB0b0FkZChjcmVhdGVBY3RpdmVBbmltYXRpb24oYWRvcHRQdHIobmV3IEZha2VG
bG9hdFRyYW5zaXRpb24oMSwgMC41LCAwKSksIDIsIENDQWN0aXZlQW5pbWF0aW9uOjpPcGFjaXR5
KSk7CiAgICAgdG9BZGQtPnNldFJ1blN0YXRlKENDQWN0aXZlQW5pbWF0aW9uOjpXYWl0aW5nRm9y
U3RhcnRUaW1lLCAwKTsKICAgICB0b0FkZC0+c2V0U3RhcnRUaW1lKDEpOwotICAgIGNvbnRyb2xs
ZXItPmFkZCh0b0FkZC5yZWxlYXNlKCkpOworICAgIGNvbnRyb2xsZXItPmFkZEFuaW1hdGlvbih0
b0FkZC5yZWxlYXNlKCkpOwogCiAgICAgLy8gRmlyc3QgMnMgb3BhY2l0eSB0cmFuc2l0aW9uIHNo
b3VsZCBzdGFydCBpbW1lZGlhdGVseS4KICAgICBjb250cm9sbGVyLT5hbmltYXRlKDAsIGV2ZW50
cy5nZXQoKSk7CkBAIC01ODIsMTQgKzM4OSwxNCBAQCBURVNUKENDTGF5ZXJBbmltYXRpb25Db250
cm9sbGVyVGVzdCwgU2NoZWR1bGVkQW5pbWF0aW9uSW50ZXJydXB0c1J1bm5pbmdBbmltYXRpbwog
ICAgIE93blB0cjxDQ0xheWVyQW5pbWF0aW9uQ29udHJvbGxlcj4gY29udHJvbGxlcigKICAgICAg
ICAgQ0NMYXllckFuaW1hdGlvbkNvbnRyb2xsZXI6OmNyZWF0ZSgmZHVtbXkpKTsKIAotICAgIGNv
bnRyb2xsZXItPmFkZChjcmVhdGVBY3RpdmVBbmltYXRpb24oYWRvcHRQdHIobmV3IEZha2VGbG9h
dFRyYW5zaXRpb24oMiwgMCwgMSkpLCAxLCBDQ0FjdGl2ZUFuaW1hdGlvbjo6T3BhY2l0eSkpOwor
ICAgIGNvbnRyb2xsZXItPmFkZEFuaW1hdGlvbihjcmVhdGVBY3RpdmVBbmltYXRpb24oYWRvcHRQ
dHIobmV3IEZha2VGbG9hdFRyYW5zaXRpb24oMiwgMCwgMSkpLCAxLCBDQ0FjdGl2ZUFuaW1hdGlv
bjo6T3BhY2l0eSkpOwogCiAgICAgT3duUHRyPENDQWN0aXZlQW5pbWF0aW9uPiB0b0FkZChjcmVh
dGVBY3RpdmVBbmltYXRpb24oYWRvcHRQdHIobmV3IEZha2VGbG9hdFRyYW5zaXRpb24oMiwgMC41
LCAwKSksIDIsIENDQWN0aXZlQW5pbWF0aW9uOjpPcGFjaXR5KSk7CiAgICAgdG9BZGQtPnNldFJ1
blN0YXRlKENDQWN0aXZlQW5pbWF0aW9uOjpXYWl0aW5nRm9yU3RhcnRUaW1lLCAwKTsKICAgICB0
b0FkZC0+c2V0U3RhcnRUaW1lKDEpOwotICAgIGNvbnRyb2xsZXItPmFkZCh0b0FkZC5yZWxlYXNl
KCkpOworICAgIGNvbnRyb2xsZXItPmFkZEFuaW1hdGlvbih0b0FkZC5yZWxlYXNlKCkpOwogCi0g
ICAgY29udHJvbGxlci0+YWRkKGNyZWF0ZUFjdGl2ZUFuaW1hdGlvbihhZG9wdFB0cihuZXcgRmFr
ZUZsb2F0VHJhbnNpdGlvbigxLCAwLCAwLjc1KSksIDMsIENDQWN0aXZlQW5pbWF0aW9uOjpPcGFj
aXR5KSk7CisgICAgY29udHJvbGxlci0+YWRkQW5pbWF0aW9uKGNyZWF0ZUFjdGl2ZUFuaW1hdGlv
bihhZG9wdFB0cihuZXcgRmFrZUZsb2F0VHJhbnNpdGlvbigxLCAwLCAwLjc1KSksIDMsIENDQWN0
aXZlQW5pbWF0aW9uOjpPcGFjaXR5KSk7CiAKICAgICAvLyBGaXJzdCAycyBvcGFjaXR5IHRyYW5z
aXRpb24gc2hvdWxkIHN0YXJ0IGltbWVkaWF0ZWx5LgogICAgIGNvbnRyb2xsZXItPmFuaW1hdGUo
MCwgZXZlbnRzLmdldCgpKTsKQEAgLTYyMCw3ICs0MjcsNyBAQCBURVNUKENDTGF5ZXJBbmltYXRp
b25Db250cm9sbGVyVGVzdCwgVHJpdmlhbExvb3BpbmcpCiAKICAgICBPd25QdHI8Q0NBY3RpdmVB
bmltYXRpb24+IHRvQWRkKGNyZWF0ZUFjdGl2ZUFuaW1hdGlvbihhZG9wdFB0cihuZXcgRmFrZUZs
b2F0VHJhbnNpdGlvbigxLCAwLCAxKSksIDEsIENDQWN0aXZlQW5pbWF0aW9uOjpPcGFjaXR5KSk7
CiAgICAgdG9BZGQtPnNldEl0ZXJhdGlvbnMoMyk7Ci0gICAgY29udHJvbGxlci0+YWRkKHRvQWRk
LnJlbGVhc2UoKSk7CisgICAgY29udHJvbGxlci0+YWRkQW5pbWF0aW9uKHRvQWRkLnJlbGVhc2Uo
KSk7CiAKICAgICBjb250cm9sbGVyLT5hbmltYXRlKDAsIGV2ZW50cy5nZXQoKSk7CiAgICAgRVhQ
RUNUX1RSVUUoY29udHJvbGxlci0+aGFzQWN0aXZlQW5pbWF0aW9uKCkpOwpAQCAtNjU3LDcgKzQ2
NCw3IEBAIFRFU1QoQ0NMYXllckFuaW1hdGlvbkNvbnRyb2xsZXJUZXN0LCBJbmZpbml0ZUxvb3Bp
bmcpCiAgICAgY29uc3QgaW50IGlkID0gMTsKICAgICBPd25QdHI8Q0NBY3RpdmVBbmltYXRpb24+
IHRvQWRkKGNyZWF0ZUFjdGl2ZUFuaW1hdGlvbihhZG9wdFB0cihuZXcgRmFrZUZsb2F0VHJhbnNp
dGlvbigxLCAwLCAxKSksIGlkLCBDQ0FjdGl2ZUFuaW1hdGlvbjo6T3BhY2l0eSkpOwogICAgIHRv
QWRkLT5zZXRJdGVyYXRpb25zKC0xKTsKLSAgICBjb250cm9sbGVyLT5hZGQodG9BZGQucmVsZWFz
ZSgpKTsKKyAgICBjb250cm9sbGVyLT5hZGRBbmltYXRpb24odG9BZGQucmVsZWFzZSgpKTsKIAog
ICAgIGNvbnRyb2xsZXItPmFuaW1hdGUoMCwgZXZlbnRzLmdldCgpKTsKICAgICBFWFBFQ1RfVFJV
RShjb250cm9sbGVyLT5oYXNBY3RpdmVBbmltYXRpb24oKSk7CkBAIC02OTEsNyArNDk4LDcgQEAg
VEVTVChDQ0xheWVyQW5pbWF0aW9uQ29udHJvbGxlclRlc3QsIFBhdXNlUmVzdW1lKQogICAgICAg
ICBDQ0xheWVyQW5pbWF0aW9uQ29udHJvbGxlcjo6Y3JlYXRlKCZkdW1teSkpOwogCiAgICAgY29u
c3QgaW50IGlkID0gMTsKLSAgICBjb250cm9sbGVyLT5hZGQoY3JlYXRlQWN0aXZlQW5pbWF0aW9u
KGFkb3B0UHRyKG5ldyBGYWtlRmxvYXRUcmFuc2l0aW9uKDEsIDAsIDEpKSwgaWQsIENDQWN0aXZl
QW5pbWF0aW9uOjpPcGFjaXR5KSk7CisgICAgY29udHJvbGxlci0+YWRkQW5pbWF0aW9uKGNyZWF0
ZUFjdGl2ZUFuaW1hdGlvbihhZG9wdFB0cihuZXcgRmFrZUZsb2F0VHJhbnNpdGlvbigxLCAwLCAx
KSksIGlkLCBDQ0FjdGl2ZUFuaW1hdGlvbjo6T3BhY2l0eSkpOwogCiAgICAgY29udHJvbGxlci0+
YW5pbWF0ZSgwLCBldmVudHMuZ2V0KCkpOwogICAgIEVYUEVDVF9UUlVFKGNvbnRyb2xsZXItPmhh
c0FjdGl2ZUFuaW1hdGlvbigpKTsKQEAgLTcyNiw5ICs1MzMsOSBAQCBURVNUKENDTGF5ZXJBbmlt
YXRpb25Db250cm9sbGVyVGVzdCwgQWJvcnRBR3JvdXBlZEFuaW1hdGlvbikKICAgICAgICAgQ0NM
YXllckFuaW1hdGlvbkNvbnRyb2xsZXI6OmNyZWF0ZSgmZHVtbXkpKTsKIAogICAgIGNvbnN0IGlu
dCBpZCA9IDE7Ci0gICAgY29udHJvbGxlci0+YWRkKGNyZWF0ZUFjdGl2ZUFuaW1hdGlvbihhZG9w
dFB0cihuZXcgRmFrZVRyYW5zZm9ybVRyYW5zaXRpb24oMSkpLCBpZCwgQ0NBY3RpdmVBbmltYXRp
b246OlRyYW5zZm9ybSkpOwotICAgIGNvbnRyb2xsZXItPmFkZChjcmVhdGVBY3RpdmVBbmltYXRp
b24oYWRvcHRQdHIobmV3IEZha2VGbG9hdFRyYW5zaXRpb24oMiwgMCwgMSkpLCBpZCwgQ0NBY3Rp
dmVBbmltYXRpb246Ok9wYWNpdHkpKTsKLSAgICBjb250cm9sbGVyLT5hZGQoY3JlYXRlQWN0aXZl
QW5pbWF0aW9uKGFkb3B0UHRyKG5ldyBGYWtlRmxvYXRUcmFuc2l0aW9uKDEsIDEsIDAuNzUpKSwg
MiwgQ0NBY3RpdmVBbmltYXRpb246Ok9wYWNpdHkpKTsKKyAgICBjb250cm9sbGVyLT5hZGRBbmlt
YXRpb24oY3JlYXRlQWN0aXZlQW5pbWF0aW9uKGFkb3B0UHRyKG5ldyBGYWtlVHJhbnNmb3JtVHJh
bnNpdGlvbigxKSksIGlkLCBDQ0FjdGl2ZUFuaW1hdGlvbjo6VHJhbnNmb3JtKSk7CisgICAgY29u
dHJvbGxlci0+YWRkQW5pbWF0aW9uKGNyZWF0ZUFjdGl2ZUFuaW1hdGlvbihhZG9wdFB0cihuZXcg
RmFrZUZsb2F0VHJhbnNpdGlvbigyLCAwLCAxKSksIGlkLCBDQ0FjdGl2ZUFuaW1hdGlvbjo6T3Bh
Y2l0eSkpOworICAgIGNvbnRyb2xsZXItPmFkZEFuaW1hdGlvbihjcmVhdGVBY3RpdmVBbmltYXRp
b24oYWRvcHRQdHIobmV3IEZha2VGbG9hdFRyYW5zaXRpb24oMSwgMSwgMC43NSkpLCAyLCBDQ0Fj
dGl2ZUFuaW1hdGlvbjo6T3BhY2l0eSkpOwogCiAgICAgY29udHJvbGxlci0+YW5pbWF0ZSgwLCBl
dmVudHMuZ2V0KCkpOwogICAgIEVYUEVDVF9UUlVFKGNvbnRyb2xsZXItPmhhc0FjdGl2ZUFuaW1h
dGlvbigpKTsKQEAgLTc1OCw3ICs1NjUsNyBAQCBURVNUKENDTGF5ZXJBbmltYXRpb25Db250cm9s
bGVyVGVzdCwgRm9yY2VTeW5jV2hlblN5bmNocm9uaXplZFN0YXJ0VGltZU5lZWRlZCkKIAogICAg
IE93blB0cjxDQ0FjdGl2ZUFuaW1hdGlvbj4gdG9BZGQoY3JlYXRlQWN0aXZlQW5pbWF0aW9uKGFk
b3B0UHRyKG5ldyBGYWtlRmxvYXRUcmFuc2l0aW9uKDIsIDAsIDEpKSwgMCwgQ0NBY3RpdmVBbmlt
YXRpb246Ok9wYWNpdHkpKTsKICAgICB0b0FkZC0+c2V0TmVlZHNTeW5jaHJvbml6ZWRTdGFydFRp
bWUodHJ1ZSk7Ci0gICAgY29udHJvbGxlci0+YWRkKHRvQWRkLnJlbGVhc2UoKSk7CisgICAgY29u
dHJvbGxlci0+YWRkQW5pbWF0aW9uKHRvQWRkLnJlbGVhc2UoKSk7CiAKICAgICBjb250cm9sbGVy
LT5hbmltYXRlKDAsIDApOwogICAgIEVYUEVDVF9UUlVFKGNvbnRyb2xsZXItPmhhc0FjdGl2ZUFu
aW1hdGlvbigpKTsKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJLaXQvY2hyb21pdW0vdGVzdHMvQ0NM
YXllclRyZWVIb3N0VGVzdC5jcHAgYi9Tb3VyY2UvV2ViS2l0L2Nocm9taXVtL3Rlc3RzL0NDTGF5
ZXJUcmVlSG9zdFRlc3QuY3BwCmluZGV4IGI5OTYwMDZhZTI4OTFiOGExODM2MjdkZjVkOWEzYjky
NGZjMzBmMGQuLmQxM2Q2ZjdkNThjZTlmMWNhMzUzM2RiYWQ4ZDJkNjU5YjUxZGJjMGUgMTAwNjQ0
Ci0tLSBhL1NvdXJjZS9XZWJLaXQvY2hyb21pdW0vdGVzdHMvQ0NMYXllclRyZWVIb3N0VGVzdC5j
cHAKKysrIGIvU291cmNlL1dlYktpdC9jaHJvbWl1bS90ZXN0cy9DQ0xheWVyVHJlZUhvc3RUZXN0
LmNwcApAQCAtMjk1Miw3ICsyOTUyLDcgQEAgcHVibGljOgogICAgICAgICAvLyBBbnkgdmFsaWQg
Q0NBbmltYXRpb25DdXJ2ZSB3aWxsIGRvIGhlcmUuCiAgICAgICAgIE93blB0cjxDQ0FuaW1hdGlv
bkN1cnZlPiBjdXJ2ZShDQ0Vhc2VUaW1pbmdGdW5jdGlvbjo6Y3JlYXRlKCkpOwogICAgICAgICBP
d25QdHI8Q0NBY3RpdmVBbmltYXRpb24+IGFuaW1hdGlvbihDQ0FjdGl2ZUFuaW1hdGlvbjo6Y3Jl
YXRlKGN1cnZlLnJlbGVhc2UoKSwgQW5pbWF0aW9uSWRWZW5kb3I6OmdldE5leHRBbmltYXRpb25J
ZCgpLCBBbmltYXRpb25JZFZlbmRvcjo6Z2V0TmV4dEdyb3VwSWQoKSwgQ0NBY3RpdmVBbmltYXRp
b246Ok9wYWNpdHkpKTsKLSAgICAgICAgbGF5ZXItPmxheWVyQW5pbWF0aW9uQ29udHJvbGxlcigp
LT5hZGQoYW5pbWF0aW9uLnJlbGVhc2UoKSk7CisgICAgICAgIGxheWVyLT5sYXllckFuaW1hdGlv
bkNvbnRyb2xsZXIoKS0+YWRkQW5pbWF0aW9uKGFuaW1hdGlvbi5yZWxlYXNlKCkpOwogCiAgICAg
ICAgIC8vIFdlIGFkZCB0aGUgYW5pbWF0aW9uICpiZWZvcmUqIGF0dGFjaGluZyB0aGUgbGF5ZXIg
dG8gdGhlIHRyZWUuCiAgICAgICAgIG1fbGF5ZXJUcmVlSG9zdC0+cm9vdExheWVyKCktPmFkZENo
aWxkKGxheWVyKTsKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJLaXQvY2hyb21pdW0vdGVzdHMvR3Jh
cGhpY3NMYXllckNocm9taXVtVGVzdC5jcHAgYi9Tb3VyY2UvV2ViS2l0L2Nocm9taXVtL3Rlc3Rz
L0dyYXBoaWNzTGF5ZXJDaHJvbWl1bVRlc3QuY3BwCmluZGV4IGI3YWE4NTc0NjVjYmFjMThjNDgy
YWVkNWQ5NzMyMzI2NTE0ZGE2YTQuLjQzMDRjNmY2YWMxZjI1MTU2Yjk3N2FkMWQxZWUxZTg1NmIx
NTk3OTIgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJLaXQvY2hyb21pdW0vdGVzdHMvR3JhcGhpY3NM
YXllckNocm9taXVtVGVzdC5jcHAKKysrIGIvU291cmNlL1dlYktpdC9jaHJvbWl1bS90ZXN0cy9H
cmFwaGljc0xheWVyQ2hyb21pdW1UZXN0LmNwcApAQCAtMjcsNTYgKzI3LDM3OCBAQAogI2luY2x1
ZGUgIkdyYXBoaWNzTGF5ZXJDaHJvbWl1bS5oIgogCiAjaW5jbHVkZSAiQ0NBbmltYXRpb25UZXN0
Q29tbW9uLmgiCisjaW5jbHVkZSAiQ29tcG9zaXRvckZha2VHcmFwaGljc0NvbnRleHQzRC5oIgor
I2luY2x1ZGUgIkdyYXBoaWNzQ29udGV4dDNELmgiCisjaW5jbHVkZSAiR3JhcGhpY3NDb250ZXh0
M0RQcml2YXRlLmgiCiAjaW5jbHVkZSAiR3JhcGhpY3NMYXllci5oIgogI2luY2x1ZGUgIkxheWVy
Q2hyb21pdW0uaCIKKyNpbmNsdWRlICJNYXRyaXgzRFRyYW5zZm9ybU9wZXJhdGlvbi5oIgorI2lu
Y2x1ZGUgIlJvdGF0ZVRyYW5zZm9ybU9wZXJhdGlvbi5oIgorI2luY2x1ZGUgIlRyYW5zbGF0ZVRy
YW5zZm9ybU9wZXJhdGlvbi5oIgorI2luY2x1ZGUgIldlYkNvbXBvc2l0b3IuaCIKKworI2luY2x1
ZGUgImNjL0NDTGF5ZXJUcmVlSG9zdC5oIgorI2luY2x1ZGUgImNjL0NDTGF5ZXJUcmVlSG9zdElt
cGwuaCIKKyNpbmNsdWRlICJjYy9DQ1NpbmdsZVRocmVhZFByb3h5LmgiCisKICNpbmNsdWRlIDxn
dGVzdC9ndGVzdC5oPgorCisjaW5jbHVkZSA8cHVibGljL1dlYlRyYW5zZm9ybWF0aW9uTWF0cml4
Lmg+CisKICNpbmNsdWRlIDx3dGYvUGFzc093blB0ci5oPgogCiB1c2luZyBuYW1lc3BhY2UgV2Vi
Q29yZTsKK3VzaW5nIG5hbWVzcGFjZSBXZWJLaXQ7CiB1c2luZyBuYW1lc3BhY2UgV2ViS2l0VGVz
dHM7CiAKIG5hbWVzcGFjZSB7CiAKIGNsYXNzIE1vY2tHcmFwaGljc0xheWVyQ2xpZW50IDogcHVi
bGljIEdyYXBoaWNzTGF5ZXJDbGllbnQgewogICBwdWJsaWM6Ci0gICAgdmlydHVhbCB2b2lkIG5v
dGlmeUFuaW1hdGlvblN0YXJ0ZWQoY29uc3QgR3JhcGhpY3NMYXllciosIGRvdWJsZSB0aW1lKSB7
IH0KLSAgICB2aXJ0dWFsIHZvaWQgbm90aWZ5U3luY1JlcXVpcmVkKGNvbnN0IEdyYXBoaWNzTGF5
ZXIqKSB7IH0KLSAgICB2aXJ0dWFsIHZvaWQgcGFpbnRDb250ZW50cyhjb25zdCBHcmFwaGljc0xh
eWVyKiwgR3JhcGhpY3NDb250ZXh0JiwgR3JhcGhpY3NMYXllclBhaW50aW5nUGhhc2UsIGNvbnN0
IEludFJlY3QmIGluQ2xpcCkgeyB9Ci0gICAgdmlydHVhbCBib29sIHNob3dEZWJ1Z0JvcmRlcnMo
Y29uc3QgR3JhcGhpY3NMYXllciopIGNvbnN0IHsgcmV0dXJuIGZhbHNlOyB9Ci0gICAgdmlydHVh
bCBib29sIHNob3dSZXBhaW50Q291bnRlcihjb25zdCBHcmFwaGljc0xheWVyKikgY29uc3QgeyBy
ZXR1cm4gZmFsc2U7IH0KKyAgICB2aXJ0dWFsIHZvaWQgbm90aWZ5QW5pbWF0aW9uU3RhcnRlZChj
b25zdCBHcmFwaGljc0xheWVyKiwgZG91YmxlIHRpbWUpIE9WRVJSSURFIHsgfQorICAgIHZpcnR1
YWwgdm9pZCBub3RpZnlTeW5jUmVxdWlyZWQoY29uc3QgR3JhcGhpY3NMYXllciopIE9WRVJSSURF
IHsgfQorICAgIHZpcnR1YWwgdm9pZCBwYWludENvbnRlbnRzKGNvbnN0IEdyYXBoaWNzTGF5ZXIq
LCBHcmFwaGljc0NvbnRleHQmLCBHcmFwaGljc0xheWVyUGFpbnRpbmdQaGFzZSwgY29uc3QgSW50
UmVjdCYgaW5DbGlwKSBPVkVSUklERSB7IH0KKyAgICB2aXJ0dWFsIGJvb2wgc2hvd0RlYnVnQm9y
ZGVycyhjb25zdCBHcmFwaGljc0xheWVyKikgY29uc3QgT1ZFUlJJREUgeyByZXR1cm4gZmFsc2U7
IH0KKyAgICB2aXJ0dWFsIGJvb2wgc2hvd1JlcGFpbnRDb3VudGVyKGNvbnN0IEdyYXBoaWNzTGF5
ZXIqKSBjb25zdCBPVkVSUklERSB7IHJldHVybiBmYWxzZTsgfQogfTsKIAotVEVTVChHcmFwaGlj
c0xheWVyQ2hyb21pdW1UZXN0LCB1cGRhdGVMYXllclByZXNlcnZlczNEV2l0aEFuaW1hdGlvbnMp
Ci17Ci0gICAgTW9ja0dyYXBoaWNzTGF5ZXJDbGllbnQgY2xpZW50OwotICAgIE93blB0cjxHcmFw
aGljc0xheWVyQ2hyb21pdW0+IGdyYXBoaWNzTGF5ZXIgPSBzdGF0aWNfcG9pbnRlcl9jYXN0PEdy
YXBoaWNzTGF5ZXJDaHJvbWl1bT4oR3JhcGhpY3NMYXllcjo6Y3JlYXRlKCZjbGllbnQpKTsKLSAg
ICBBU1NFUlRfVFJVRShncmFwaGljc0xheWVyLmdldCgpKTsKK2NsYXNzIE1vY2tMYXllclRyZWVI
b3N0Q2xpZW50IDogcHVibGljIENDTGF5ZXJUcmVlSG9zdENsaWVudCB7CitwdWJsaWM6CisgICAg
dmlydHVhbCB2b2lkIHdpbGxCZWdpbkZyYW1lKCkgT1ZFUlJJREUgeyB9CisgICAgdmlydHVhbCB2
b2lkIGRpZEJlZ2luRnJhbWUoKSBPVkVSUklERSB7IH0KKyAgICB2aXJ0dWFsIHZvaWQgdXBkYXRl
QW5pbWF0aW9ucyhkb3VibGUgZnJhbWVCZWdpblRpbWUpIE9WRVJSSURFIHsgfQorICAgIHZpcnR1
YWwgdm9pZCBsYXlvdXQoKSBPVkVSUklERSB7IH0KKyAgICB2aXJ0dWFsIHZvaWQgYXBwbHlTY3Jv
bGxBbmRTY2FsZShjb25zdCBJbnRTaXplJiBzY3JvbGxEZWx0YSwgZmxvYXQgcGFnZVNjYWxlKSBP
VkVSUklERSB7IH0KKyAgICB2aXJ0dWFsIFBhc3NSZWZQdHI8R3JhcGhpY3NDb250ZXh0M0Q+IGNy
ZWF0ZUNvbnRleHQoKSBPVkVSUklERQorICAgIHsKKyAgICAgICAgR3JhcGhpY3NDb250ZXh0M0Q6
OkF0dHJpYnV0ZXMgYXR0cnM7CisgICAgICAgIHJldHVybiBjcmVhdGVDb21wb3NpdG9yTW9ja0dy
YXBoaWNzQ29udGV4dDNEKGF0dHJzKTsKKyAgICB9CisgICAgdmlydHVhbCB2b2lkIGRpZFJlY3Jl
YXRlQ29udGV4dChib29sIHN1Y2Nlc3MpIE9WRVJSSURFIHsgfQorICAgIHZpcnR1YWwgdm9pZCB3
aWxsQ29tbWl0KCkgT1ZFUlJJREUgeyB9CisgICAgdmlydHVhbCB2b2lkIGRpZENvbW1pdCgpIE9W
RVJSSURFIHsgfQorICAgIHZpcnR1YWwgdm9pZCBkaWRDb21taXRBbmREcmF3RnJhbWUoKSBPVkVS
UklERSB7IH0KKyAgICB2aXJ0dWFsIHZvaWQgZGlkQ29tcGxldGVTd2FwQnVmZmVycygpIE9WRVJS
SURFIHsgfQorICAgIHZpcnR1YWwgdm9pZCBzY2hlZHVsZUNvbXBvc2l0ZSgpIE9WRVJSSURFIHsg
fQorfTsKKworY2xhc3MgTW9ja0xheWVyVHJlZUhvc3QgOiBwdWJsaWMgQ0NMYXllclRyZWVIb3N0
IHsKK3B1YmxpYzoKKyAgICBzdGF0aWMgUGFzc093blB0cjxNb2NrTGF5ZXJUcmVlSG9zdD4gY3Jl
YXRlKCkKKyAgICB7CisgICAgICAgIC8vIEZvciB0aGVzZSB0ZXN0cywgd2Ugd2lsbCBlbmFibGUg
dGhyZWFkZWQgYW5pbWF0aW9ucy4KKyAgICAgICAgQ0NTZXR0aW5ncyBzZXR0aW5nczsKKyAgICAg
ICAgc2V0dGluZ3MudGhyZWFkZWRBbmltYXRpb25FbmFibGVkID0gdHJ1ZTsKKyAgICAgICAgT3du
UHRyPE1vY2tMYXllclRyZWVIb3N0PiBsYXllclRyZWVIb3N0KGFkb3B0UHRyKG5ldyBNb2NrTGF5
ZXJUcmVlSG9zdChuZXcgTW9ja0xheWVyVHJlZUhvc3RDbGllbnQoKSwgc2V0dGluZ3MpKSk7Cisg
ICAgICAgIGJvb2wgc3VjY2VzcyA9IGxheWVyVHJlZUhvc3QtPmluaXRpYWxpemUoKTsKKyAgICAg
ICAgRVhQRUNUX1RSVUUoc3VjY2Vzcyk7CisgICAgICAgIGxheWVyVHJlZUhvc3QtPnNldFJvb3RM
YXllcihMYXllckNocm9taXVtOjpjcmVhdGUoKSk7CisgICAgICAgIGxheWVyVHJlZUhvc3QtPnNl
dFZpZXdwb3J0U2l6ZShJbnRTaXplKDEsIDEpKTsKKyAgICAgICAgcmV0dXJuIGxheWVyVHJlZUhv
c3QucmVsZWFzZSgpOworICAgIH0KKworICAgIHZpcnR1YWwgUGFzc093blB0cjxDQ0xheWVyVHJl
ZUhvc3RJbXBsPiBjcmVhdGVMYXllclRyZWVIb3N0SW1wbChDQ0xheWVyVHJlZUhvc3RJbXBsQ2xp
ZW50KiBjbGllbnQpCisgICAgeworICAgICAgICAvLyBGb3IgdGhlc2UgdGVzdHMsIHdlIHdpbGwg
ZW5hYmxlIHRocmVhZGVkIGFuaW1hdGlvbnMuCisgICAgICAgIENDU2V0dGluZ3MgY29weVNldHRp
bmdzID0gc2V0dGluZ3MoKTsKKyAgICAgICAgY29weVNldHRpbmdzLnRocmVhZGVkQW5pbWF0aW9u
RW5hYmxlZCA9IHRydWU7CisgICAgICAgIHJldHVybiBDQ0xheWVyVHJlZUhvc3RJbXBsOjpjcmVh
dGUoY29weVNldHRpbmdzLCBjbGllbnQpOworICAgIH0KKworcHJpdmF0ZToKKyAgICBNb2NrTGF5
ZXJUcmVlSG9zdChDQ0xheWVyVHJlZUhvc3RDbGllbnQqIGNsaWVudCwgY29uc3QgQ0NTZXR0aW5n
cyYgc2V0dGluZ3MpCisgICAgICAgIDogQ0NMYXllclRyZWVIb3N0KGNsaWVudCwgc2V0dGluZ3Mp
CisgICAgeworICAgIH0KK307CisKK2NsYXNzIEdyYXBoaWNzTGF5ZXJDaHJvbWl1bVRlc3QgOiBw
dWJsaWMgdGVzdGluZzo6VGVzdCB7CitwdWJsaWM6CisgICAgR3JhcGhpY3NMYXllckNocm9taXVt
VGVzdCgpCisgICAgeworICAgICAgICBXZWJDb21wb3NpdG9yOjppbml0aWFsaXplKDApOworICAg
ICAgICBtX2dyYXBoaWNzTGF5ZXIgPSBzdGF0aWNfcG9pbnRlcl9jYXN0PEdyYXBoaWNzTGF5ZXJD
aHJvbWl1bT4oR3JhcGhpY3NMYXllcjo6Y3JlYXRlKCZtX2NsaWVudCkpOworICAgICAgICBtX3Bs
YXRmb3JtTGF5ZXIgPSBzdGF0aWNfY2FzdDxMYXllckNocm9taXVtKj4obV9ncmFwaGljc0xheWVy
LT5wbGF0Zm9ybUxheWVyKCkpOworICAgICAgICBtX2xheWVyVHJlZUhvc3QgPSBNb2NrTGF5ZXJU
cmVlSG9zdDo6Y3JlYXRlKCk7CisgICAgICAgIG1fcGxhdGZvcm1MYXllci0+c2V0TGF5ZXJUcmVl
SG9zdChtX2xheWVyVHJlZUhvc3QuZ2V0KCkpOworICAgIH0KKworICAgIHZpcnR1YWwgfkdyYXBo
aWNzTGF5ZXJDaHJvbWl1bVRlc3QoKQorICAgIHsKKyAgICAgICAgbV9ncmFwaGljc0xheWVyLmNs
ZWFyKCk7CisgICAgICAgIG1fbGF5ZXJUcmVlSG9zdC5jbGVhcigpOworICAgICAgICBXZWJDb21w
b3NpdG9yOjpzaHV0ZG93bigpOworICAgIH0KIAotICAgIExheWVyQ2hyb21pdW0qIHBsYXRmb3Jt
TGF5ZXIgPSBzdGF0aWNfY2FzdDxMYXllckNocm9taXVtKj4oZ3JhcGhpY3NMYXllci0+cGxhdGZv
cm1MYXllcigpKTsKLSAgICBBU1NFUlRfVFJVRShwbGF0Zm9ybUxheWVyKTsKK3Byb3RlY3RlZDoK
KyAgICBzdGF0aWMgdm9pZCBleHBlY3RUcmFuc2xhdGVYKGRvdWJsZSB0cmFuc2xhdGVYLCBjb25z
dCBXZWJUcmFuc2Zvcm1hdGlvbk1hdHJpeCYgbWF0cml4KQorICAgIHsKKyAgICAgICAgRVhQRUNU
X0ZMT0FUX0VRKHRyYW5zbGF0ZVgsIG1hdHJpeC5tNDEoKSk7CisgICAgfQogCi0gICAgQVNTRVJU
X0ZBTFNFKHBsYXRmb3JtTGF5ZXItPmhhc0FjdGl2ZUFuaW1hdGlvbigpKTsKKyAgICBMYXllckNo
cm9taXVtKiBtX3BsYXRmb3JtTGF5ZXI7CisgICAgT3duUHRyPEdyYXBoaWNzTGF5ZXJDaHJvbWl1
bT4gbV9ncmFwaGljc0xheWVyOworICAgIE93blB0cjxDQ0xheWVyVHJlZUhvc3Q+IG1fbGF5ZXJU
cmVlSG9zdDsKKworcHJpdmF0ZToKKyAgICBNb2NrR3JhcGhpY3NMYXllckNsaWVudCBtX2NsaWVu
dDsKKyAgICBEZWJ1Z1Njb3BlZFNldE1haW5UaHJlYWQgbV9tYWluOworfTsKKworVEVTVF9GKEdy
YXBoaWNzTGF5ZXJDaHJvbWl1bVRlc3QsIHVwZGF0ZUxheWVyUHJlc2VydmVzM0RXaXRoQW5pbWF0
aW9ucykKK3sKKyAgICBBU1NFUlRfRkFMU0UobV9wbGF0Zm9ybUxheWVyLT5oYXNBY3RpdmVBbmlt
YXRpb24oKSk7CiAKICAgICBPd25QdHI8Q0NBY3RpdmVBbmltYXRpb24+IGZsb2F0QW5pbWF0aW9u
KENDQWN0aXZlQW5pbWF0aW9uOjpjcmVhdGUoYWRvcHRQdHIobmV3IEZha2VGbG9hdEFuaW1hdGlv
bkN1cnZlKSwgMCwgMSwgQ0NBY3RpdmVBbmltYXRpb246Ok9wYWNpdHkpKTsKLSAgICBwbGF0Zm9y
bUxheWVyLT5sYXllckFuaW1hdGlvbkNvbnRyb2xsZXIoKS0+YWRkKGZsb2F0QW5pbWF0aW9uLnJl
bGVhc2UoKSk7CisgICAgbV9wbGF0Zm9ybUxheWVyLT5sYXllckFuaW1hdGlvbkNvbnRyb2xsZXIo
KS0+YWRkQW5pbWF0aW9uKGZsb2F0QW5pbWF0aW9uLnJlbGVhc2UoKSk7CisKKyAgICBBU1NFUlRf
VFJVRShtX3BsYXRmb3JtTGF5ZXItPmhhc0FjdGl2ZUFuaW1hdGlvbigpKTsKKworICAgIG1fZ3Jh
cGhpY3NMYXllci0+c2V0UHJlc2VydmVzM0QodHJ1ZSk7CisKKyAgICBtX3BsYXRmb3JtTGF5ZXIg
PSBzdGF0aWNfY2FzdDxMYXllckNocm9taXVtKj4obV9ncmFwaGljc0xheWVyLT5wbGF0Zm9ybUxh
eWVyKCkpOworICAgIEFTU0VSVF9UUlVFKG1fcGxhdGZvcm1MYXllcik7CisKKyAgICBBU1NFUlRf
VFJVRShtX3BsYXRmb3JtTGF5ZXItPmhhc0FjdGl2ZUFuaW1hdGlvbigpKTsKKyAgICBtX3BsYXRm
b3JtTGF5ZXItPnJlbW92ZUFuaW1hdGlvbigwKTsKKyAgICBBU1NFUlRfRkFMU0UobV9wbGF0Zm9y
bUxheWVyLT5oYXNBY3RpdmVBbmltYXRpb24oKSk7CisKKyAgICBtX2dyYXBoaWNzTGF5ZXItPnNl
dFByZXNlcnZlczNEKGZhbHNlKTsKKworICAgIG1fcGxhdGZvcm1MYXllciA9IHN0YXRpY19jYXN0
PExheWVyQ2hyb21pdW0qPihtX2dyYXBoaWNzTGF5ZXItPnBsYXRmb3JtTGF5ZXIoKSk7CisgICAg
QVNTRVJUX1RSVUUobV9wbGF0Zm9ybUxheWVyKTsKKworICAgIEFTU0VSVF9GQUxTRShtX3BsYXRm
b3JtTGF5ZXItPmhhc0FjdGl2ZUFuaW1hdGlvbigpKTsKK30KKworVEVTVF9GKEdyYXBoaWNzTGF5
ZXJDaHJvbWl1bVRlc3QsIGNyZWF0ZU9wYWNpdHlBbmltYXRpb24pCit7CisgICAgY29uc3QgZG91
YmxlIGR1cmF0aW9uID0gMTsKKyAgICBXZWJDb3JlOjpLZXlmcmFtZVZhbHVlTGlzdCB2YWx1ZXMo
QW5pbWF0ZWRQcm9wZXJ0eU9wYWNpdHkpOworICAgIHZhbHVlcy5pbnNlcnQobmV3IEZsb2F0QW5p
bWF0aW9uVmFsdWUoMCwgMCkpOworICAgIHZhbHVlcy5pbnNlcnQobmV3IEZsb2F0QW5pbWF0aW9u
VmFsdWUoZHVyYXRpb24sIDEpKTsKKworICAgIFJlZlB0cjxBbmltYXRpb24+IGFuaW1hdGlvbiA9
IEFuaW1hdGlvbjo6Y3JlYXRlKCk7CisgICAgYW5pbWF0aW9uLT5zZXREdXJhdGlvbihkdXJhdGlv
bik7CisKKyAgICBJbnRTaXplIGJveFNpemU7CisgICAgYm9vbCBhZGRlZEFuaW1hdGlvbiA9IG1f
Z3JhcGhpY3NMYXllci0+YWRkQW5pbWF0aW9uKHZhbHVlcywgYm94U2l6ZSwgYW5pbWF0aW9uLmdl
dCgpLCAiIiwgMCk7CisKKyAgICBFWFBFQ1RfVFJVRShhZGRlZEFuaW1hdGlvbik7CisKKyAgICBF
WFBFQ1RfVFJVRShtX3BsYXRmb3JtTGF5ZXItPmxheWVyQW5pbWF0aW9uQ29udHJvbGxlcigpLT5o
YXNBY3RpdmVBbmltYXRpb24oKSk7CisKKyAgICBDQ0FjdGl2ZUFuaW1hdGlvbiogYWN0aXZlQW5p
bWF0aW9uID0gbV9wbGF0Zm9ybUxheWVyLT5sYXllckFuaW1hdGlvbkNvbnRyb2xsZXIoKS0+Z2V0
QWN0aXZlQW5pbWF0aW9uKENDQWN0aXZlQW5pbWF0aW9uOjpPcGFjaXR5KTsKKyAgICBFWFBFQ1Rf
VFJVRShhY3RpdmVBbmltYXRpb24pOworCisgICAgRVhQRUNUX0VRKDEsIGFjdGl2ZUFuaW1hdGlv
bi0+aXRlcmF0aW9ucygpKTsKKyAgICBFWFBFQ1RfRVEoQ0NBY3RpdmVBbmltYXRpb246Ok9wYWNp
dHksIGFjdGl2ZUFuaW1hdGlvbi0+dGFyZ2V0UHJvcGVydHkoKSk7CisKKyAgICBFWFBFQ1RfRVEo
Q0NBbmltYXRpb25DdXJ2ZTo6RmxvYXQsIGFjdGl2ZUFuaW1hdGlvbi0+Y3VydmUoKS0+dHlwZSgp
KTsKKworICAgIGNvbnN0IENDRmxvYXRBbmltYXRpb25DdXJ2ZSogY3VydmUgPSBhY3RpdmVBbmlt
YXRpb24tPmN1cnZlKCktPnRvRmxvYXRBbmltYXRpb25DdXJ2ZSgpOworICAgIEVYUEVDVF9UUlVF
KGN1cnZlKTsKKworICAgIEVYUEVDVF9FUSgwLCBjdXJ2ZS0+Z2V0VmFsdWUoMCkpOworICAgIEVY
UEVDVF9FUSgxLCBjdXJ2ZS0+Z2V0VmFsdWUoZHVyYXRpb24pKTsKK30KKworVEVTVF9GKEdyYXBo
aWNzTGF5ZXJDaHJvbWl1bVRlc3QsIGNyZWF0ZVRyYW5zZm9ybUFuaW1hdGlvbikKK3sKKyAgICBj
b25zdCBkb3VibGUgZHVyYXRpb24gPSAxOworICAgIFdlYkNvcmU6OktleWZyYW1lVmFsdWVMaXN0
IHZhbHVlcyhBbmltYXRlZFByb3BlcnR5V2Via2l0VHJhbnNmb3JtKTsKKworICAgIFRyYW5zZm9y
bU9wZXJhdGlvbnMgb3BlcmF0aW9uczE7CisgICAgb3BlcmF0aW9uczEub3BlcmF0aW9ucygpLmFw
cGVuZChUcmFuc2xhdGVUcmFuc2Zvcm1PcGVyYXRpb246OmNyZWF0ZShMZW5ndGgoMiwgRml4ZWQp
LCBMZW5ndGgoMCwgRml4ZWQpLCBUcmFuc2Zvcm1PcGVyYXRpb246OlRSQU5TTEFURV9YKSk7Cisg
ICAgdmFsdWVzLmluc2VydChuZXcgVHJhbnNmb3JtQW5pbWF0aW9uVmFsdWUoMCwgJm9wZXJhdGlv
bnMxKSk7CisKKyAgICBUcmFuc2Zvcm1PcGVyYXRpb25zIG9wZXJhdGlvbnMyOworICAgIG9wZXJh
dGlvbnMyLm9wZXJhdGlvbnMoKS5hcHBlbmQoVHJhbnNsYXRlVHJhbnNmb3JtT3BlcmF0aW9uOjpj
cmVhdGUoTGVuZ3RoKDQsIEZpeGVkKSwgTGVuZ3RoKDAsIEZpeGVkKSwgVHJhbnNmb3JtT3BlcmF0
aW9uOjpUUkFOU0xBVEVfWCkpOworICAgIHZhbHVlcy5pbnNlcnQobmV3IFRyYW5zZm9ybUFuaW1h
dGlvblZhbHVlKGR1cmF0aW9uLCAmb3BlcmF0aW9uczIpKTsKKworICAgIFJlZlB0cjxBbmltYXRp
b24+IGFuaW1hdGlvbiA9IEFuaW1hdGlvbjo6Y3JlYXRlKCk7CisgICAgYW5pbWF0aW9uLT5zZXRE
dXJhdGlvbihkdXJhdGlvbik7CisKKyAgICBJbnRTaXplIGJveFNpemU7CisgICAgbV9ncmFwaGlj
c0xheWVyLT5hZGRBbmltYXRpb24odmFsdWVzLCBib3hTaXplLCBhbmltYXRpb24uZ2V0KCksICIi
LCAwKTsKKworICAgIEVYUEVDVF9UUlVFKG1fcGxhdGZvcm1MYXllci0+bGF5ZXJBbmltYXRpb25D
b250cm9sbGVyKCktPmhhc0FjdGl2ZUFuaW1hdGlvbigpKTsKKworICAgIENDQWN0aXZlQW5pbWF0
aW9uKiBhY3RpdmVBbmltYXRpb24gPSBtX3BsYXRmb3JtTGF5ZXItPmxheWVyQW5pbWF0aW9uQ29u
dHJvbGxlcigpLT5nZXRBY3RpdmVBbmltYXRpb24oQ0NBY3RpdmVBbmltYXRpb246OlRyYW5zZm9y
bSk7CisgICAgRVhQRUNUX1RSVUUoYWN0aXZlQW5pbWF0aW9uKTsKKworICAgIEVYUEVDVF9FUSgx
LCBhY3RpdmVBbmltYXRpb24tPml0ZXJhdGlvbnMoKSk7CisgICAgRVhQRUNUX0VRKENDQWN0aXZl
QW5pbWF0aW9uOjpUcmFuc2Zvcm0sIGFjdGl2ZUFuaW1hdGlvbi0+dGFyZ2V0UHJvcGVydHkoKSk7
CisKKyAgICBFWFBFQ1RfRVEoQ0NBbmltYXRpb25DdXJ2ZTo6VHJhbnNmb3JtLCBhY3RpdmVBbmlt
YXRpb24tPmN1cnZlKCktPnR5cGUoKSk7CisKKyAgICBjb25zdCBDQ1RyYW5zZm9ybUFuaW1hdGlv
bkN1cnZlKiBjdXJ2ZSA9IGFjdGl2ZUFuaW1hdGlvbi0+Y3VydmUoKS0+dG9UcmFuc2Zvcm1Bbmlt
YXRpb25DdXJ2ZSgpOworICAgIEVYUEVDVF9UUlVFKGN1cnZlKTsKKworICAgIGV4cGVjdFRyYW5z
bGF0ZVgoMiwgY3VydmUtPmdldFZhbHVlKDApKTsKKyAgICBleHBlY3RUcmFuc2xhdGVYKDQsIGN1
cnZlLT5nZXRWYWx1ZShkdXJhdGlvbikpOworfQorCitURVNUX0YoR3JhcGhpY3NMYXllckNocm9t
aXVtVGVzdCwgY3JlYXRlVHJhbnNmb3JtQW5pbWF0aW9uV2l0aEJpZ1JvdGF0aW9uKQoreworICAg
IGNvbnN0IGRvdWJsZSBkdXJhdGlvbiA9IDE7CisgICAgV2ViQ29yZTo6S2V5ZnJhbWVWYWx1ZUxp
c3QgdmFsdWVzKEFuaW1hdGVkUHJvcGVydHlXZWJraXRUcmFuc2Zvcm0pOworCisgICAgVHJhbnNm
b3JtT3BlcmF0aW9ucyBvcGVyYXRpb25zMTsKKyAgICBvcGVyYXRpb25zMS5vcGVyYXRpb25zKCku
YXBwZW5kKFJvdGF0ZVRyYW5zZm9ybU9wZXJhdGlvbjo6Y3JlYXRlKDAsIFRyYW5zZm9ybU9wZXJh
dGlvbjo6Uk9UQVRFKSk7CisgICAgdmFsdWVzLmluc2VydChuZXcgVHJhbnNmb3JtQW5pbWF0aW9u
VmFsdWUoMCwgJm9wZXJhdGlvbnMxKSk7CisKKyAgICBUcmFuc2Zvcm1PcGVyYXRpb25zIG9wZXJh
dGlvbnMyOworICAgIG9wZXJhdGlvbnMyLm9wZXJhdGlvbnMoKS5hcHBlbmQoUm90YXRlVHJhbnNm
b3JtT3BlcmF0aW9uOjpjcmVhdGUoMjcwLCBUcmFuc2Zvcm1PcGVyYXRpb246OlJPVEFURSkpOwor
ICAgIHZhbHVlcy5pbnNlcnQobmV3IFRyYW5zZm9ybUFuaW1hdGlvblZhbHVlKGR1cmF0aW9uLCAm
b3BlcmF0aW9uczIpKTsKKworICAgIFJlZlB0cjxBbmltYXRpb24+IGFuaW1hdGlvbiA9IEFuaW1h
dGlvbjo6Y3JlYXRlKCk7CisgICAgYW5pbWF0aW9uLT5zZXREdXJhdGlvbihkdXJhdGlvbik7CisK
KyAgICBJbnRTaXplIGJveFNpemU7CisgICAgbV9ncmFwaGljc0xheWVyLT5hZGRBbmltYXRpb24o
dmFsdWVzLCBib3hTaXplLCBhbmltYXRpb24uZ2V0KCksICIiLCAwKTsKKworICAgIEVYUEVDVF9G
QUxTRShtX3BsYXRmb3JtTGF5ZXItPmxheWVyQW5pbWF0aW9uQ29udHJvbGxlcigpLT5oYXNBY3Rp
dmVBbmltYXRpb24oKSk7Cit9CisKK1RFU1RfRihHcmFwaGljc0xheWVyQ2hyb21pdW1UZXN0LCBj
cmVhdGVUcmFuc2Zvcm1BbmltYXRpb25XaXRoU2luZ3VsYXJNYXRyaXgpCit7CisgICAgY29uc3Qg
ZG91YmxlIGR1cmF0aW9uID0gMTsKKyAgICBXZWJDb3JlOjpLZXlmcmFtZVZhbHVlTGlzdCB2YWx1
ZXMoQW5pbWF0ZWRQcm9wZXJ0eVdlYmtpdFRyYW5zZm9ybSk7CisKKyAgICBUcmFuc2Zvcm1hdGlv
bk1hdHJpeCBtYXRyaXgxOworICAgIFRyYW5zZm9ybU9wZXJhdGlvbnMgb3BlcmF0aW9uczE7Cisg
ICAgb3BlcmF0aW9uczEub3BlcmF0aW9ucygpLmFwcGVuZChNYXRyaXgzRFRyYW5zZm9ybU9wZXJh
dGlvbjo6Y3JlYXRlKG1hdHJpeDEpKTsKKyAgICB2YWx1ZXMuaW5zZXJ0KG5ldyBUcmFuc2Zvcm1B
bmltYXRpb25WYWx1ZSgwLCAmb3BlcmF0aW9uczEpKTsKKworICAgIFRyYW5zZm9ybWF0aW9uTWF0
cml4IG1hdHJpeDI7CisgICAgbWF0cml4Mi5zZXRNMTEoMCk7CisgICAgVHJhbnNmb3JtT3BlcmF0
aW9ucyBvcGVyYXRpb25zMjsKKyAgICBvcGVyYXRpb25zMi5vcGVyYXRpb25zKCkuYXBwZW5kKE1h
dHJpeDNEVHJhbnNmb3JtT3BlcmF0aW9uOjpjcmVhdGUobWF0cml4MikpOworICAgIHZhbHVlcy5p
bnNlcnQobmV3IFRyYW5zZm9ybUFuaW1hdGlvblZhbHVlKGR1cmF0aW9uLCAmb3BlcmF0aW9uczIp
KTsKKworICAgIFJlZlB0cjxBbmltYXRpb24+IGFuaW1hdGlvbiA9IEFuaW1hdGlvbjo6Y3JlYXRl
KCk7CisgICAgYW5pbWF0aW9uLT5zZXREdXJhdGlvbihkdXJhdGlvbik7CisKKyAgICBJbnRTaXpl
IGJveFNpemU7CisgICAgbV9ncmFwaGljc0xheWVyLT5hZGRBbmltYXRpb24odmFsdWVzLCBib3hT
aXplLCBhbmltYXRpb24uZ2V0KCksICIiLCAwKTsKKworICAgIEVYUEVDVF9GQUxTRShtX3BsYXRm
b3JtTGF5ZXItPmxheWVyQW5pbWF0aW9uQ29udHJvbGxlcigpLT5oYXNBY3RpdmVBbmltYXRpb24o
KSk7Cit9CisKK1RFU1RfRihHcmFwaGljc0xheWVyQ2hyb21pdW1UZXN0LCBjcmVhdGVSZXZlcnNl
ZEFuaW1hdGlvbikKK3sKKyAgICBjb25zdCBkb3VibGUgZHVyYXRpb24gPSAxOworICAgIFdlYkNv
cmU6OktleWZyYW1lVmFsdWVMaXN0IHZhbHVlcyhBbmltYXRlZFByb3BlcnR5V2Via2l0VHJhbnNm
b3JtKTsKKworICAgIFRyYW5zZm9ybU9wZXJhdGlvbnMgb3BlcmF0aW9uczE7CisgICAgb3BlcmF0
aW9uczEub3BlcmF0aW9ucygpLmFwcGVuZChUcmFuc2xhdGVUcmFuc2Zvcm1PcGVyYXRpb246OmNy
ZWF0ZShMZW5ndGgoMiwgRml4ZWQpLCBMZW5ndGgoMCwgRml4ZWQpLCBUcmFuc2Zvcm1PcGVyYXRp
b246OlRSQU5TTEFURV9YKSk7CisgICAgdmFsdWVzLmluc2VydChuZXcgVHJhbnNmb3JtQW5pbWF0
aW9uVmFsdWUoMCwgJm9wZXJhdGlvbnMxKSk7CisKKyAgICBUcmFuc2Zvcm1PcGVyYXRpb25zIG9w
ZXJhdGlvbnMyOworICAgIG9wZXJhdGlvbnMyLm9wZXJhdGlvbnMoKS5hcHBlbmQoVHJhbnNsYXRl
VHJhbnNmb3JtT3BlcmF0aW9uOjpjcmVhdGUoTGVuZ3RoKDQsIEZpeGVkKSwgTGVuZ3RoKDAsIEZp
eGVkKSwgVHJhbnNmb3JtT3BlcmF0aW9uOjpUUkFOU0xBVEVfWCkpOworICAgIHZhbHVlcy5pbnNl
cnQobmV3IFRyYW5zZm9ybUFuaW1hdGlvblZhbHVlKGR1cmF0aW9uLCAmb3BlcmF0aW9uczIpKTsK
KworICAgIFJlZlB0cjxBbmltYXRpb24+IGFuaW1hdGlvbiA9IEFuaW1hdGlvbjo6Y3JlYXRlKCk7
CisgICAgYW5pbWF0aW9uLT5zZXREdXJhdGlvbihkdXJhdGlvbik7CisgICAgYW5pbWF0aW9uLT5z
ZXREaXJlY3Rpb24oQW5pbWF0aW9uOjpBbmltYXRpb25EaXJlY3Rpb25SZXZlcnNlKTsKKworICAg
IEludFNpemUgYm94U2l6ZTsKKyAgICBtX2dyYXBoaWNzTGF5ZXItPmFkZEFuaW1hdGlvbih2YWx1
ZXMsIGJveFNpemUsIGFuaW1hdGlvbi5nZXQoKSwgIiIsIDApOworCisgICAgRVhQRUNUX1RSVUUo
bV9wbGF0Zm9ybUxheWVyLT5sYXllckFuaW1hdGlvbkNvbnRyb2xsZXIoKS0+aGFzQWN0aXZlQW5p
bWF0aW9uKCkpOworCisgICAgQ0NBY3RpdmVBbmltYXRpb24qIGFjdGl2ZUFuaW1hdGlvbiA9IG1f
cGxhdGZvcm1MYXllci0+bGF5ZXJBbmltYXRpb25Db250cm9sbGVyKCktPmdldEFjdGl2ZUFuaW1h
dGlvbihDQ0FjdGl2ZUFuaW1hdGlvbjo6VHJhbnNmb3JtKTsKKyAgICBFWFBFQ1RfVFJVRShhY3Rp
dmVBbmltYXRpb24pOworCisgICAgRVhQRUNUX0VRKDEsIGFjdGl2ZUFuaW1hdGlvbi0+aXRlcmF0
aW9ucygpKTsKKyAgICBFWFBFQ1RfRVEoQ0NBY3RpdmVBbmltYXRpb246OlRyYW5zZm9ybSwgYWN0
aXZlQW5pbWF0aW9uLT50YXJnZXRQcm9wZXJ0eSgpKTsKKworICAgIEVYUEVDVF9FUShDQ0FuaW1h
dGlvbkN1cnZlOjpUcmFuc2Zvcm0sIGFjdGl2ZUFuaW1hdGlvbi0+Y3VydmUoKS0+dHlwZSgpKTsK
KworICAgIGNvbnN0IENDVHJhbnNmb3JtQW5pbWF0aW9uQ3VydmUqIGN1cnZlID0gYWN0aXZlQW5p
bWF0aW9uLT5jdXJ2ZSgpLT50b1RyYW5zZm9ybUFuaW1hdGlvbkN1cnZlKCk7CisgICAgRVhQRUNU
X1RSVUUoY3VydmUpOworCisgICAgZXhwZWN0VHJhbnNsYXRlWCg0LCBjdXJ2ZS0+Z2V0VmFsdWUo
MCkpOworICAgIGV4cGVjdFRyYW5zbGF0ZVgoMiwgY3VydmUtPmdldFZhbHVlKGR1cmF0aW9uKSk7
Cit9CisKK1RFU1RfRihHcmFwaGljc0xheWVyQ2hyb21pdW1UZXN0LCBjcmVhdGVBbHRlcm5hdGlu
Z0FuaW1hdGlvbikKK3sKKyAgICBjb25zdCBkb3VibGUgZHVyYXRpb24gPSAxOworICAgIFdlYkNv
cmU6OktleWZyYW1lVmFsdWVMaXN0IHZhbHVlcyhBbmltYXRlZFByb3BlcnR5V2Via2l0VHJhbnNm
b3JtKTsKKworICAgIFRyYW5zZm9ybU9wZXJhdGlvbnMgb3BlcmF0aW9uczE7CisgICAgb3BlcmF0
aW9uczEub3BlcmF0aW9ucygpLmFwcGVuZChUcmFuc2xhdGVUcmFuc2Zvcm1PcGVyYXRpb246OmNy
ZWF0ZShMZW5ndGgoMiwgRml4ZWQpLCBMZW5ndGgoMCwgRml4ZWQpLCBUcmFuc2Zvcm1PcGVyYXRp
b246OlRSQU5TTEFURV9YKSk7CisgICAgdmFsdWVzLmluc2VydChuZXcgVHJhbnNmb3JtQW5pbWF0
aW9uVmFsdWUoMCwgJm9wZXJhdGlvbnMxKSk7CisKKyAgICBUcmFuc2Zvcm1PcGVyYXRpb25zIG9w
ZXJhdGlvbnMyOworICAgIG9wZXJhdGlvbnMyLm9wZXJhdGlvbnMoKS5hcHBlbmQoVHJhbnNsYXRl
VHJhbnNmb3JtT3BlcmF0aW9uOjpjcmVhdGUoTGVuZ3RoKDQsIEZpeGVkKSwgTGVuZ3RoKDAsIEZp
eGVkKSwgVHJhbnNmb3JtT3BlcmF0aW9uOjpUUkFOU0xBVEVfWCkpOworICAgIHZhbHVlcy5pbnNl
cnQobmV3IFRyYW5zZm9ybUFuaW1hdGlvblZhbHVlKGR1cmF0aW9uLCAmb3BlcmF0aW9uczIpKTsK
KworICAgIFJlZlB0cjxBbmltYXRpb24+IGFuaW1hdGlvbiA9IEFuaW1hdGlvbjo6Y3JlYXRlKCk7
CisgICAgYW5pbWF0aW9uLT5zZXREdXJhdGlvbihkdXJhdGlvbik7CisgICAgYW5pbWF0aW9uLT5z
ZXREaXJlY3Rpb24oQW5pbWF0aW9uOjpBbmltYXRpb25EaXJlY3Rpb25BbHRlcm5hdGUpOworICAg
IGFuaW1hdGlvbi0+c2V0SXRlcmF0aW9uQ291bnQoMik7CisKKyAgICBJbnRTaXplIGJveFNpemU7
CisgICAgbV9ncmFwaGljc0xheWVyLT5hZGRBbmltYXRpb24odmFsdWVzLCBib3hTaXplLCBhbmlt
YXRpb24uZ2V0KCksICIiLCAwKTsKKworICAgIEVYUEVDVF9UUlVFKG1fcGxhdGZvcm1MYXllci0+
bGF5ZXJBbmltYXRpb25Db250cm9sbGVyKCktPmhhc0FjdGl2ZUFuaW1hdGlvbigpKTsKKworICAg
IENDQWN0aXZlQW5pbWF0aW9uKiBhY3RpdmVBbmltYXRpb24gPSBtX3BsYXRmb3JtTGF5ZXItPmxh
eWVyQW5pbWF0aW9uQ29udHJvbGxlcigpLT5nZXRBY3RpdmVBbmltYXRpb24oQ0NBY3RpdmVBbmlt
YXRpb246OlRyYW5zZm9ybSk7CisgICAgRVhQRUNUX1RSVUUoYWN0aXZlQW5pbWF0aW9uKTsKKyAg
ICBFWFBFQ1RfVFJVRShhY3RpdmVBbmltYXRpb24tPmFsdGVybmF0ZXNEaXJlY3Rpb24oKSk7CisK
KyAgICBFWFBFQ1RfRVEoMiwgYWN0aXZlQW5pbWF0aW9uLT5pdGVyYXRpb25zKCkpOworICAgIEVY
UEVDVF9FUShDQ0FjdGl2ZUFuaW1hdGlvbjo6VHJhbnNmb3JtLCBhY3RpdmVBbmltYXRpb24tPnRh
cmdldFByb3BlcnR5KCkpOworCisgICAgRVhQRUNUX0VRKENDQW5pbWF0aW9uQ3VydmU6OlRyYW5z
Zm9ybSwgYWN0aXZlQW5pbWF0aW9uLT5jdXJ2ZSgpLT50eXBlKCkpOworCisgICAgY29uc3QgQ0NU
cmFuc2Zvcm1BbmltYXRpb25DdXJ2ZSogY3VydmUgPSBhY3RpdmVBbmltYXRpb24tPmN1cnZlKCkt
PnRvVHJhbnNmb3JtQW5pbWF0aW9uQ3VydmUoKTsKKyAgICBFWFBFQ1RfVFJVRShjdXJ2ZSk7CisK
KyAgICBleHBlY3RUcmFuc2xhdGVYKDIsIGN1cnZlLT5nZXRWYWx1ZSgwKSk7CisgICAgZXhwZWN0
VHJhbnNsYXRlWCg0LCBjdXJ2ZS0+Z2V0VmFsdWUoZHVyYXRpb24pKTsKK30KKworVEVTVF9GKEdy
YXBoaWNzTGF5ZXJDaHJvbWl1bVRlc3QsIGNyZWF0ZVJldmVyc2VkQWx0ZXJuYXRpbmdBbmltYXRp
b24pCit7CisgICAgY29uc3QgZG91YmxlIGR1cmF0aW9uID0gMTsKKyAgICBXZWJDb3JlOjpLZXlm
cmFtZVZhbHVlTGlzdCB2YWx1ZXMoQW5pbWF0ZWRQcm9wZXJ0eVdlYmtpdFRyYW5zZm9ybSk7CisK
KyAgICBUcmFuc2Zvcm1PcGVyYXRpb25zIG9wZXJhdGlvbnMxOworICAgIG9wZXJhdGlvbnMxLm9w
ZXJhdGlvbnMoKS5hcHBlbmQoVHJhbnNsYXRlVHJhbnNmb3JtT3BlcmF0aW9uOjpjcmVhdGUoTGVu
Z3RoKDIsIEZpeGVkKSwgTGVuZ3RoKDAsIEZpeGVkKSwgVHJhbnNmb3JtT3BlcmF0aW9uOjpUUkFO
U0xBVEVfWCkpOworICAgIHZhbHVlcy5pbnNlcnQobmV3IFRyYW5zZm9ybUFuaW1hdGlvblZhbHVl
KDAsICZvcGVyYXRpb25zMSkpOworCisgICAgVHJhbnNmb3JtT3BlcmF0aW9ucyBvcGVyYXRpb25z
MjsKKyAgICBvcGVyYXRpb25zMi5vcGVyYXRpb25zKCkuYXBwZW5kKFRyYW5zbGF0ZVRyYW5zZm9y
bU9wZXJhdGlvbjo6Y3JlYXRlKExlbmd0aCg0LCBGaXhlZCksIExlbmd0aCgwLCBGaXhlZCksIFRy
YW5zZm9ybU9wZXJhdGlvbjo6VFJBTlNMQVRFX1gpKTsKKyAgICB2YWx1ZXMuaW5zZXJ0KG5ldyBU
cmFuc2Zvcm1BbmltYXRpb25WYWx1ZShkdXJhdGlvbiwgJm9wZXJhdGlvbnMyKSk7CisKKyAgICBS
ZWZQdHI8QW5pbWF0aW9uPiBhbmltYXRpb24gPSBBbmltYXRpb246OmNyZWF0ZSgpOworICAgIGFu
aW1hdGlvbi0+c2V0RHVyYXRpb24oZHVyYXRpb24pOworICAgIGFuaW1hdGlvbi0+c2V0RGlyZWN0
aW9uKEFuaW1hdGlvbjo6QW5pbWF0aW9uRGlyZWN0aW9uQWx0ZXJuYXRlUmV2ZXJzZSk7CisgICAg
YW5pbWF0aW9uLT5zZXRJdGVyYXRpb25Db3VudCgyKTsKIAotICAgIEFTU0VSVF9UUlVFKHBsYXRm
b3JtTGF5ZXItPmhhc0FjdGl2ZUFuaW1hdGlvbigpKTsKKyAgICBJbnRTaXplIGJveFNpemU7Cisg
ICAgbV9ncmFwaGljc0xheWVyLT5hZGRBbmltYXRpb24odmFsdWVzLCBib3hTaXplLCBhbmltYXRp
b24uZ2V0KCksICIiLCAwKTsKIAotICAgIGdyYXBoaWNzTGF5ZXItPnNldFByZXNlcnZlczNEKHRy
dWUpOworICAgIEVYUEVDVF9UUlVFKG1fcGxhdGZvcm1MYXllci0+bGF5ZXJBbmltYXRpb25Db250
cm9sbGVyKCktPmhhc0FjdGl2ZUFuaW1hdGlvbigpKTsKIAotICAgIHBsYXRmb3JtTGF5ZXIgPSBz
dGF0aWNfY2FzdDxMYXllckNocm9taXVtKj4oZ3JhcGhpY3NMYXllci0+cGxhdGZvcm1MYXllcigp
KTsKLSAgICBBU1NFUlRfVFJVRShwbGF0Zm9ybUxheWVyKTsKKyAgICBDQ0FjdGl2ZUFuaW1hdGlv
biogYWN0aXZlQW5pbWF0aW9uID0gbV9wbGF0Zm9ybUxheWVyLT5sYXllckFuaW1hdGlvbkNvbnRy
b2xsZXIoKS0+Z2V0QWN0aXZlQW5pbWF0aW9uKENDQWN0aXZlQW5pbWF0aW9uOjpUcmFuc2Zvcm0p
OworICAgIEVYUEVDVF9UUlVFKGFjdGl2ZUFuaW1hdGlvbik7CisgICAgRVhQRUNUX1RSVUUoYWN0
aXZlQW5pbWF0aW9uLT5hbHRlcm5hdGVzRGlyZWN0aW9uKCkpOwogCi0gICAgQVNTRVJUX1RSVUUo
cGxhdGZvcm1MYXllci0+aGFzQWN0aXZlQW5pbWF0aW9uKCkpOwotICAgIHBsYXRmb3JtTGF5ZXIt
PnJlbW92ZUFuaW1hdGlvbigwKTsKLSAgICBBU1NFUlRfRkFMU0UocGxhdGZvcm1MYXllci0+aGFz
QWN0aXZlQW5pbWF0aW9uKCkpOworICAgIEVYUEVDVF9FUSgyLCBhY3RpdmVBbmltYXRpb24tPml0
ZXJhdGlvbnMoKSk7CisgICAgRVhQRUNUX0VRKENDQWN0aXZlQW5pbWF0aW9uOjpUcmFuc2Zvcm0s
IGFjdGl2ZUFuaW1hdGlvbi0+dGFyZ2V0UHJvcGVydHkoKSk7CiAKLSAgICBncmFwaGljc0xheWVy
LT5zZXRQcmVzZXJ2ZXMzRChmYWxzZSk7CisgICAgRVhQRUNUX0VRKENDQW5pbWF0aW9uQ3VydmU6
OlRyYW5zZm9ybSwgYWN0aXZlQW5pbWF0aW9uLT5jdXJ2ZSgpLT50eXBlKCkpOwogCi0gICAgcGxh
dGZvcm1MYXllciA9IHN0YXRpY19jYXN0PExheWVyQ2hyb21pdW0qPihncmFwaGljc0xheWVyLT5w
bGF0Zm9ybUxheWVyKCkpOwotICAgIEFTU0VSVF9UUlVFKHBsYXRmb3JtTGF5ZXIpOworICAgIGNv
bnN0IENDVHJhbnNmb3JtQW5pbWF0aW9uQ3VydmUqIGN1cnZlID0gYWN0aXZlQW5pbWF0aW9uLT5j
dXJ2ZSgpLT50b1RyYW5zZm9ybUFuaW1hdGlvbkN1cnZlKCk7CisgICAgRVhQRUNUX1RSVUUoY3Vy
dmUpOwogCi0gICAgQVNTRVJUX0ZBTFNFKHBsYXRmb3JtTGF5ZXItPmhhc0FjdGl2ZUFuaW1hdGlv
bigpKTsKKyAgICBleHBlY3RUcmFuc2xhdGVYKDQsIGN1cnZlLT5nZXRWYWx1ZSgwKSk7CisgICAg
ZXhwZWN0VHJhbnNsYXRlWCgyLCBjdXJ2ZS0+Z2V0VmFsdWUoZHVyYXRpb24pKTsKIH0KIAogfSAv
LyBuYW1lc3BhY2UK
</data>

          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>145901</attachid>
            <date>2012-06-05 17:22:32 -0700</date>
            <delta_ts>2012-06-05 19:03:57 -0700</delta_ts>
            <desc>Patch</desc>
            <filename>bug-87686-20120605202231.patch</filename>
            <type>text/plain</type>
            <size>105740</size>
            <attacher>vollick</attacher>
            
              <data encoding="base64">U3VidmVyc2lvbiBSZXZpc2lvbjogMTE5NTMzCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9D
aGFuZ2VMb2cgYi9Tb3VyY2UvV2ViQ29yZS9DaGFuZ2VMb2cKaW5kZXggNGQ1MWI1MzE0ODg0NDMx
MWQ4MWVlZTdhMWQxMWU0MDk4NGM0ZGM3MS4uODQ4ZDU4NzQzNTYxMGI4NDYwNWE3NTI1MDA2YzRm
NGQyYmFlMWM5MiAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvQ2hhbmdlTG9nCisrKyBiL1Nv
dXJjZS9XZWJDb3JlL0NoYW5nZUxvZwpAQCAtMSwzICsxLDcxIEBACisyMDEyLTA2LTA1ICBJYW4g
Vm9sbGljayAgPHZvbGxpY2tAY2hyb21pdW0ub3JnPgorCisgICAgICAgIFtjaHJvbWl1bV0gQWNj
ZWxlcmF0ZWQgYW5pbWF0aW9ucyBzaG91bGQgdXNlIFdlYlRyYW5zZm9ybU9wZXJhdGlvbnMKKyAg
ICAgICAgaHR0cHM6Ly9idWdzLndlYmtpdC5vcmcvc2hvd19idWcuY2dpP2lkPTg3Njg2CisKKyAg
ICAgICAgUmV2aWV3ZWQgYnkgSmFtZXMgUm9iaW5zb24uCisKKyAgICAgICAgQ0NUcmFuc2Zvcm1L
ZXlmcmFtZSBuZXcgb3ducyBhIFdlYlRyYW5zZm9ybU9wZXJhdGlvbnMgcmF0aGVyIHRoYW4gYQor
ICAgICAgICBUcmFuc2Zvcm1PcGVyYXRpb25zLiBMYXllckNocm9taXVtJ3MgQVBJIGhhcyBiZWVu
IGNoYW5nZWQgc28gdGhhdAorICAgICAgICBMYXllckNocm9taXVtOjphZGRBbmltYXRpb24gc2hv
dWxkIHRha2Ugb25seSBhIENDQWN0aXZlQW5pbWF0aW9uLgorICAgICAgICBHcmFwaGljc0xheWVy
Q2hyb21pdW0gaXMgbmV3IHJlc3BvbnNpYmxlIGZvciB0cmFuc2xhdGluZyB0bworICAgICAgICBX
ZWJUcmFuc2Zvcm1PcGVyYXRpb25zIGFuZCBjcmVhdGluZyBDQ0FjdGl2ZUFuaW1hdGlvbnMuIFRl
c3RzIHRoYXQgdXNlCisgICAgICAgIHRoZSBwdWJsaWMgQVBJICh0aGF0IGlzLCB0aGV5IGNhbGwg
YWRkQW5pbWF0aW9uIHdpdGggS2V5ZnJhbWVWYWx1ZUxpc3QKKyAgICAgICAgYW5kIEFuaW1hdGlv
biBhcmd1bWVudHMpIGhhdmUgYmVlbiBtb3ZlZCB0byBHcmFwaGljc0xheWVyQ2hyb21pdW1UZXN0
LgorCisgICAgICAgICBVbml0IHRlc3RzOgorICAgICAgICAgICAgR3JhcGhpY3NMYXllckNocm9t
aXVtVGVzdC5jcmVhdGVPcGFjaXR5QW5pbWF0aW9uCisgICAgICAgICAgICBHcmFwaGljc0xheWVy
Q2hyb21pdW1UZXN0LmNyZWF0ZVRyYW5zZm9ybUFuaW1hdGlvbgorICAgICAgICAgICAgR3JhcGhp
Y3NMYXllckNocm9taXVtVGVzdC5jcmVhdGVUcmFuc2Zvcm1BbmltYXRpb25XaXRoQmlnUm90YXRp
b24KKyAgICAgICAgICAgIEdyYXBoaWNzTGF5ZXJDaHJvbWl1bVRlc3QuY3JlYXRlVHJhbnNmb3Jt
QW5pbWF0aW9uV2l0aFNpbmd1bGFyTWF0cml4CisgICAgICAgICAgICBHcmFwaGljc0xheWVyQ2hy
b21pdW1UZXN0LmNyZWF0ZVJldmVyc2VkQW5pbWF0aW9uCisgICAgICAgICAgICBHcmFwaGljc0xh
eWVyQ2hyb21pdW1UZXN0LmNyZWF0ZUFsdGVybmF0aW5nQW5pbWF0aW9uCisgICAgICAgICAgICBH
cmFwaGljc0xheWVyQ2hyb21pdW1UZXN0LmNyZWF0ZVJldmVyc2VkQWx0ZXJuYXRpbmdBbmltYXRp
b24KKworICAgICAgICAqIFdlYkNvcmUuZ3lwaToKKyAgICAgICAgKiBwbGF0Zm9ybS9ncmFwaGlj
cy9jaHJvbWl1bS9BbmltYXRpb25UcmFuc2xhdGlvblV0aWwuY3BwOiBBZGRlZC4KKyAgICAgICAg
KFdlYkNvcmUpOgorICAgICAgICAoV2ViQ29yZTo6dG9XZWJUcmFuc2Zvcm1PcGVyYXRpb25zKToK
KyAgICAgICAgKFdlYkNvcmU6OmFwcGVuZEtleWZyYW1lKToKKyAgICAgICAgKFdlYkNvcmU6OkND
S2V5ZnJhbWVkVHJhbnNmb3JtQW5pbWF0aW9uQ3VydmUpOgorICAgICAgICAoV2ViQ29yZTo6Y3Jl
YXRlQWN0aXZlQW5pbWF0aW9uKToKKyAgICAgICAgKiBwbGF0Zm9ybS9ncmFwaGljcy9jaHJvbWl1
bS9BbmltYXRpb25UcmFuc2xhdGlvblV0aWwuaDogQWRkZWQuCisgICAgICAgIChXZWJDb3JlKToK
KyAgICAgICAgKiBwbGF0Zm9ybS9ncmFwaGljcy9jaHJvbWl1bS9HcmFwaGljc0xheWVyQ2hyb21p
dW0uY3BwOgorICAgICAgICAoV2ViQ29yZTo6R3JhcGhpY3NMYXllckNocm9taXVtOjphZGRBbmlt
YXRpb24pOgorICAgICAgICAqIHBsYXRmb3JtL2dyYXBoaWNzL2Nocm9taXVtL0xheWVyQ2hyb21p
dW0uY3BwOgorICAgICAgICAoV2ViQ29yZTo6TGF5ZXJDaHJvbWl1bTo6YWRkQW5pbWF0aW9uKToK
KyAgICAgICAgKiBwbGF0Zm9ybS9ncmFwaGljcy9jaHJvbWl1bS9MYXllckNocm9taXVtLmg6Cisg
ICAgICAgIChXZWJDb3JlKToKKyAgICAgICAgKFdlYkNvcmU6OkxheWVyQ2hyb21pdW06OmJvdW5k
cyk6CisgICAgICAgIChMYXllckNocm9taXVtKToKKyAgICAgICAgKiBwbGF0Zm9ybS9ncmFwaGlj
cy9jaHJvbWl1bS9MaW5rSGlnaGxpZ2h0LmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OkxpbmtIaWdo
bGlnaHQ6OkxpbmtIaWdobGlnaHQpOgorICAgICAgICAqIHBsYXRmb3JtL2dyYXBoaWNzL2Nocm9t
aXVtL2NjL0NDQW5pbWF0aW9uQ3VydmUuaDoKKyAgICAgICAgKENDVHJhbnNmb3JtQW5pbWF0aW9u
Q3VydmUpOgorICAgICAgICAqIHBsYXRmb3JtL2dyYXBoaWNzL2Nocm9taXVtL2NjL0NDS2V5ZnJh
bWVkQW5pbWF0aW9uQ3VydmUuY3BwOgorICAgICAgICAoV2ViQ29yZTo6Q0NUcmFuc2Zvcm1LZXlm
cmFtZTo6Y3JlYXRlKToKKyAgICAgICAgKFdlYkNvcmU6OkNDVHJhbnNmb3JtS2V5ZnJhbWU6OkND
VHJhbnNmb3JtS2V5ZnJhbWUpOgorICAgICAgICAoV2ViQ29yZTo6Q0NUcmFuc2Zvcm1LZXlmcmFt
ZTo6dmFsdWUpOgorICAgICAgICAoV2ViQ29yZTo6Q0NUcmFuc2Zvcm1LZXlmcmFtZTo6Y2xvbmUp
OgorICAgICAgICAoV2ViQ29yZTo6Q0NLZXlmcmFtZWRUcmFuc2Zvcm1BbmltYXRpb25DdXJ2ZTo6
Z2V0VmFsdWUpOgorICAgICAgICAqIHBsYXRmb3JtL2dyYXBoaWNzL2Nocm9taXVtL2NjL0NDS2V5
ZnJhbWVkQW5pbWF0aW9uQ3VydmUuaDoKKyAgICAgICAgKENDVHJhbnNmb3JtS2V5ZnJhbWUpOgor
ICAgICAgICAoQ0NLZXlmcmFtZWRUcmFuc2Zvcm1BbmltYXRpb25DdXJ2ZSk6CisgICAgICAgICog
cGxhdGZvcm0vZ3JhcGhpY3MvY2hyb21pdW0vY2MvQ0NMYXllckFuaW1hdGlvbkNvbnRyb2xsZXIu
Y3BwOgorICAgICAgICAoV2ViQ29yZTo6Q0NMYXllckFuaW1hdGlvbkNvbnRyb2xsZXI6OnJlbW92
ZUFuaW1hdGlvbik6CisgICAgICAgIChXZWJDb3JlKToKKyAgICAgICAgKFdlYkNvcmU6OkNDTGF5
ZXJBbmltYXRpb25Db250cm9sbGVyOjphZGRBbmltYXRpb24pOgorICAgICAgICAoV2ViQ29yZTo6
Q0NMYXllckFuaW1hdGlvbkNvbnRyb2xsZXI6OmdldEFjdGl2ZUFuaW1hdGlvbik6CisgICAgICAg
IChXZWJDb3JlOjpDQ0xheWVyQW5pbWF0aW9uQ29udHJvbGxlcjo6cHVzaE5ld0FuaW1hdGlvbnNU
b0ltcGxUaHJlYWQpOgorICAgICAgICAoV2ViQ29yZTo6Q0NMYXllckFuaW1hdGlvbkNvbnRyb2xs
ZXI6OnJlcGxhY2VJbXBsVGhyZWFkQW5pbWF0aW9ucyk6CisgICAgICAgIChXZWJDb3JlOjpDQ0xh
eWVyQW5pbWF0aW9uQ29udHJvbGxlcjo6dGlja0FuaW1hdGlvbnMpOgorICAgICAgICAqIHBsYXRm
b3JtL2dyYXBoaWNzL2Nocm9taXVtL2NjL0NDTGF5ZXJBbmltYXRpb25Db250cm9sbGVyLmg6Cisg
ICAgICAgIChDQ0xheWVyQW5pbWF0aW9uQ29udHJvbGxlckNsaWVudCk6CisgICAgICAgIChDQ0xh
eWVyQW5pbWF0aW9uQ29udHJvbGxlcik6CisgICAgICAgICogcGxhdGZvcm0vZ3JhcGhpY3MvY2hy
b21pdW0vY2MvQ0NMYXllckltcGwuaDoKKyAgICAgICAgKFdlYkNvcmU6OkNDTGF5ZXJJbXBsOjpi
b3VuZHMpOgorCiAyMDEyLTA2LTA1ICBNYXJ0aW4gUm9iaW5zb24gIDxtcm9iaW5zb25AaWdhbGlh
LmNvbT4KIAogICAgICAgICBbQ2Fpcm9dIFtPcGVuR0xdIEVuYWJsZSBHTF9PRVNfc3RhbmRhcmRf
ZGVyaXZhdGl2ZXMKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJLaXQvY2hyb21pdW0vQ2hhbmdlTG9n
IGIvU291cmNlL1dlYktpdC9jaHJvbWl1bS9DaGFuZ2VMb2cKaW5kZXggYjY2MmQ3NjVjNzFlNzg0
MTg5OGViYjhmZDE1ZmIwYmE2ZmJmM2RhNS4uZmQxZDA4NjRjZjRiNjVkZmNkNjI4NGRiOWUyODc2
OTYyYjc1YzQwMSAxMDA2NDQKLS0tIGEvU291cmNlL1dlYktpdC9jaHJvbWl1bS9DaGFuZ2VMb2cK
KysrIGIvU291cmNlL1dlYktpdC9jaHJvbWl1bS9DaGFuZ2VMb2cKQEAgLTEsMyArMSw0MSBAQAor
MjAxMi0wNi0wNSAgSWFuIFZvbGxpY2sgIDx2b2xsaWNrQGNocm9taXVtLm9yZz4KKworICAgICAg
ICBbY2hyb21pdW1dIEFjY2VsZXJhdGVkIGFuaW1hdGlvbnMgc2hvdWxkIHVzZSBXZWJUcmFuc2Zv
cm1PcGVyYXRpb25zCisgICAgICAgIGh0dHBzOi8vYnVncy53ZWJraXQub3JnL3Nob3dfYnVnLmNn
aT9pZD04NzY4NgorCisgICAgICAgIFJldmlld2VkIGJ5IE5PQk9EWSAoT09QUyEpLgorCisgICAg
ICAgIENDVHJhbnNmb3JtS2V5ZnJhbWUgbmV3IG93bnMgYSBXZWJUcmFuc2Zvcm1PcGVyYXRpb25z
IHJhdGhlciB0aGFuIGEKKyAgICAgICAgVHJhbnNmb3JtT3BlcmF0aW9ucy4gTGF5ZXJDaHJvbWl1
bSdzIEFQSSBoYXMgYmVlbiBjaGFuZ2VkIHNvIHRoYXQKKyAgICAgICAgTGF5ZXJDaHJvbWl1bTo6
YWRkQW5pbWF0aW9uIHNob3VsZCB0YWtlIG9ubHkgYSBDQ0FjdGl2ZUFuaW1hdGlvbi4KKyAgICAg
ICAgR3JhcGhpY3NMYXllckNocm9taXVtIGlzIG5ldyByZXNwb25zaWJsZSBmb3IgdHJhbnNsYXRp
bmcgdG8KKyAgICAgICAgV2ViVHJhbnNmb3JtT3BlcmF0aW9ucyBhbmQgY3JlYXRpbmcgQ0NBY3Rp
dmVBbmltYXRpb25zLiBUZXN0cyB0aGF0IHVzZQorICAgICAgICB0aGUgcHVibGljIEFQSSAodGhh
dCBpcywgdGhleSBjYWxsIGFkZEFuaW1hdGlvbiB3aXRoIEtleWZyYW1lVmFsdWVMaXN0CisgICAg
ICAgIGFuZCBBbmltYXRpb24gYXJndW1lbnRzKSBoYXZlIGJlZW4gbW92ZWQgdG8gR3JhcGhpY3NM
YXllckNocm9taXVtVGVzdC4KKworICAgICAgICAqIHRlc3RzL0NDQW5pbWF0aW9uVGVzdENvbW1v
bi5jcHA6CisgICAgICAgIChXZWJDb3JlOjphZGRPcGFjaXR5VHJhbnNpdGlvbik6CisgICAgICAg
IChXZWJDb3JlOjphZGRBbmltYXRlZFRyYW5zZm9ybSk6CisgICAgICAgIChXZWJLaXRUZXN0czo6
RmFrZVRyYW5zZm9ybVRyYW5zaXRpb246OmdldFZhbHVlKToKKyAgICAgICAgKiB0ZXN0cy9DQ0Fu
aW1hdGlvblRlc3RDb21tb24uaDoKKyAgICAgICAgKiB0ZXN0cy9DQ0tleWZyYW1lZEFuaW1hdGlv
bkN1cnZlVGVzdC5jcHA6CisgICAgICAgICogdGVzdHMvQ0NMYXllckFuaW1hdGlvbkNvbnRyb2xs
ZXJUZXN0LmNwcDoKKyAgICAgICAgKiB0ZXN0cy9DQ0xheWVyVHJlZUhvc3RUZXN0LmNwcDoKKyAg
ICAgICAgKFdURjo6Q0NMYXllclRyZWVIb3N0VGVzdExheWVyQWRkZWRXaXRoQW5pbWF0aW9uOjpi
ZWdpblRlc3QpOgorICAgICAgICAqIHRlc3RzL0dyYXBoaWNzTGF5ZXJDaHJvbWl1bVRlc3QuY3Bw
OgorICAgICAgICAoTW9ja0xheWVyVHJlZUhvc3RDbGllbnQpOgorICAgICAgICAoV2ViS2l0VGVz
dHMpOgorICAgICAgICAoTW9ja0xheWVyVHJlZUhvc3QpOgorICAgICAgICAoV2ViS2l0VGVzdHM6
Ok1vY2tMYXllclRyZWVIb3N0OjpjcmVhdGUpOgorICAgICAgICAoV2ViS2l0VGVzdHM6Ok1vY2tM
YXllclRyZWVIb3N0OjpjcmVhdGVMYXllclRyZWVIb3N0SW1wbCk6CisgICAgICAgIChXZWJLaXRU
ZXN0czo6TW9ja0xheWVyVHJlZUhvc3Q6Ok1vY2tMYXllclRyZWVIb3N0KToKKyAgICAgICAgKEdy
YXBoaWNzTGF5ZXJDaHJvbWl1bVRlc3QpOgorICAgICAgICAoV2ViS2l0VGVzdHM6OkdyYXBoaWNz
TGF5ZXJDaHJvbWl1bVRlc3Q6OkdyYXBoaWNzTGF5ZXJDaHJvbWl1bVRlc3QpOgorICAgICAgICAo
V2ViS2l0VGVzdHM6OkdyYXBoaWNzTGF5ZXJDaHJvbWl1bVRlc3Q6On5HcmFwaGljc0xheWVyQ2hy
b21pdW1UZXN0KToKKyAgICAgICAgKFdlYktpdFRlc3RzOjpHcmFwaGljc0xheWVyQ2hyb21pdW1U
ZXN0OjpleHBlY3RUcmFuc2xhdGVYKToKKyAgICAgICAgKFdlYktpdFRlc3RzOjpURVNUX0YpOgor
ICAgICAgICAqIHRlc3RzL0xheWVyQ2hyb21pdW1UZXN0LmNwcDoKKwogMjAxMi0wNi0wNSAgTWFy
ayBQaWxncmltICA8cGlsZ3JpbUBjaHJvbWl1bS5vcmc+CiAKICAgICAgICAgW0Nocm9taXVtXSBN
b3ZlIGNyZWF0ZUxvY2FsU3RvcmFnZU5hbWVzcGFjZSB0byBQbGF0Zm9ybS5oCmRpZmYgLS1naXQg
YS9Tb3VyY2UvV2ViQ29yZS9XZWJDb3JlLmd5cGkgYi9Tb3VyY2UvV2ViQ29yZS9XZWJDb3JlLmd5
cGkKaW5kZXggY2JlMmM0ZmMxNTYyMTg4M2E5NjlhZmM2NmJlNTU3OGJmN2Q0OTVmZS4uZGM4N2Fh
YjUzNDBmOGFmZDk2NTUwYTc2Njc2N2ZkNTY0YzM2YzliZSAxMDA2NDQKLS0tIGEvU291cmNlL1dl
YkNvcmUvV2ViQ29yZS5neXBpCisrKyBiL1NvdXJjZS9XZWJDb3JlL1dlYkNvcmUuZ3lwaQpAQCAt
MzU2Miw2ICszNTYyLDggQEAKICAgICAgICAgICAgICdwbGF0Zm9ybS9ncmFwaGljcy9jZy9UcmFu
c2Zvcm1hdGlvbk1hdHJpeENHLmNwcCcsCiAgICAgICAgICAgICAncGxhdGZvcm0vZ3JhcGhpY3Mv
Y2hyb21pdW0vQW5pbWF0aW9uSWRWZW5kb3IuY3BwJywKICAgICAgICAgICAgICdwbGF0Zm9ybS9n
cmFwaGljcy9jaHJvbWl1bS9BbmltYXRpb25JZFZlbmRvci5oJywKKyAgICAgICAgICAgICdwbGF0
Zm9ybS9ncmFwaGljcy9jaHJvbWl1bS9BbmltYXRpb25UcmFuc2xhdGlvblV0aWwuY3BwJywKKyAg
ICAgICAgICAgICdwbGF0Zm9ybS9ncmFwaGljcy9jaHJvbWl1bS9BbmltYXRpb25UcmFuc2xhdGlv
blV0aWwuaCcsCiAgICAgICAgICAgICAncGxhdGZvcm0vZ3JhcGhpY3MvY2hyb21pdW0vQml0bWFw
Q2FudmFzTGF5ZXJUZXh0dXJlVXBkYXRlci5jcHAnLAogICAgICAgICAgICAgJ3BsYXRmb3JtL2dy
YXBoaWNzL2Nocm9taXVtL0JpdG1hcENhbnZhc0xheWVyVGV4dHVyZVVwZGF0ZXIuaCcsCiAgICAg
ICAgICAgICAncGxhdGZvcm0vZ3JhcGhpY3MvY2hyb21pdW0vQml0bWFwU2tQaWN0dXJlQ2FudmFz
TGF5ZXJUZXh0dXJlVXBkYXRlci5jcHAnLApkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvcGxh
dGZvcm0vZ3JhcGhpY3MvY2hyb21pdW0vQW5pbWF0aW9uVHJhbnNsYXRpb25VdGlsLmNwcCBiL1Nv
dXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2Nocm9taXVtL0FuaW1hdGlvblRyYW5zbGF0
aW9uVXRpbC5jcHAKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMC4uNWI3MGMzNjhjNzVmMTYwMGVjNzc0NzVlNWZkMzRmYjEw
OGY1ZTMzYwotLS0gL2Rldi9udWxsCisrKyBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBo
aWNzL2Nocm9taXVtL0FuaW1hdGlvblRyYW5zbGF0aW9uVXRpbC5jcHAKQEAgLTAsMCArMSwyMzUg
QEAKKy8qCisgKiBDb3B5cmlnaHQgKEMpIDIwMTAgR29vZ2xlIEluYy4gQWxsIHJpZ2h0cyByZXNl
cnZlZC4KKyAqCisgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5
IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKyAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBw
cm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucyBhcmUKKyAqIG1ldDoKKyAqCisg
KiAgICAgKiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFi
b3ZlIGNvcHlyaWdodAorICogbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhl
IGZvbGxvd2luZyBkaXNjbGFpbWVyLgorICogICAgICogUmVkaXN0cmlidXRpb25zIGluIGJpbmFy
eSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZQorICogY29weXJpZ2h0IG5vdGljZSwgdGhp
cyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lcgorICogaW4g
dGhlIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRo
ZQorICogZGlzdHJpYnV0aW9uLgorICogICAgICogTmVpdGhlciB0aGUgbmFtZSBvZiBHb29nbGUg
SW5jLiBub3IgdGhlIG5hbWVzIG9mIGl0cworICogY29udHJpYnV0b3JzIG1heSBiZSB1c2VkIHRv
IGVuZG9yc2Ugb3IgcHJvbW90ZSBwcm9kdWN0cyBkZXJpdmVkIGZyb20KKyAqIHRoaXMgc29mdHdh
cmUgd2l0aG91dCBzcGVjaWZpYyBwcmlvciB3cml0dGVuIHBlcm1pc3Npb24uCisgKgorICogVEhJ
UyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBUSEUgQ09QWVJJR0hUIEhPTERFUlMgQU5EIENPTlRS
SUJVVE9SUworICogIkFTIElTIiBBTkQgQU5ZIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVT
LCBJTkNMVURJTkcsIEJVVCBOT1QKKyAqIExJTUlURUQgVE8sIFRIRSBJTVBMSUVEIFdBUlJBTlRJ
RVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUgorICogQSBQQVJUSUNVTEFSIFBV
UlBPU0UgQVJFIERJU0NMQUlNRUQuIElOIE5PIEVWRU5UIFNIQUxMIFRIRSBDT1BZUklHSFQKKyAq
IE9XTkVSIE9SIENPTlRSSUJVVE9SUyBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNU
LCBJTkNJREVOVEFMLAorICogU1BFQ0lBTCwgRVhFTVBMQVJZLCBPUiBDT05TRVFVRU5USUFMIERB
TUFHRVMgKElOQ0xVRElORywgQlVUIE5PVAorICogTElNSVRFRCBUTywgUFJPQ1VSRU1FTlQgT0Yg
U1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsCisgKiBEQVRBLCBPUiBQ
Uk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBB
TlkKKyAqIFRIRU9SWSBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklDVCBM
SUFCSUxJVFksIE9SIFRPUlQKKyAqIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0Up
IEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRQorICogT0YgVEhJUyBTT0ZUV0FSRSwg
RVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4KKyAqLwor
CisjaW5jbHVkZSAiY29uZmlnLmgiCisKKyNpbmNsdWRlICJBbmltYXRpb25UcmFuc2xhdGlvblV0
aWwuaCIKKworI2luY2x1ZGUgIkZsb2F0U2l6ZS5oIgorI2luY2x1ZGUgIkdyYXBoaWNzTGF5ZXIu
aCIKKyNpbmNsdWRlICJJZGVudGl0eVRyYW5zZm9ybU9wZXJhdGlvbi5oIgorI2luY2x1ZGUgIkxl
bmd0aC5oIgorI2luY2x1ZGUgIkxlbmd0aEZ1bmN0aW9ucy5oIgorI2luY2x1ZGUgIk1hdHJpeDNE
VHJhbnNmb3JtT3BlcmF0aW9uLmgiCisjaW5jbHVkZSAiTWF0cml4VHJhbnNmb3JtT3BlcmF0aW9u
LmgiCisjaW5jbHVkZSAiUGVyc3BlY3RpdmVUcmFuc2Zvcm1PcGVyYXRpb24uaCIKKyNpbmNsdWRl
ICJSb3RhdGVUcmFuc2Zvcm1PcGVyYXRpb24uaCIKKyNpbmNsdWRlICJTY2FsZVRyYW5zZm9ybU9w
ZXJhdGlvbi5oIgorI2luY2x1ZGUgIlNrZXdUcmFuc2Zvcm1PcGVyYXRpb24uaCIKKyNpbmNsdWRl
ICJUcmFuc2Zvcm1PcGVyYXRpb25zLmgiCisjaW5jbHVkZSAiVHJhbnNsYXRlVHJhbnNmb3JtT3Bl
cmF0aW9uLmgiCisKKyNpbmNsdWRlICJjYy9DQ0FjdGl2ZUFuaW1hdGlvbi5oIgorI2luY2x1ZGUg
ImNjL0NDS2V5ZnJhbWVkQW5pbWF0aW9uQ3VydmUuaCIKKworI2luY2x1ZGUgPHB1YmxpYy9XZWJU
cmFuc2Zvcm1PcGVyYXRpb25zLmg+CisjaW5jbHVkZSA8cHVibGljL1dlYlRyYW5zZm9ybWF0aW9u
TWF0cml4Lmg+CisKKyNpbmNsdWRlIDx3dGYvT3duUHRyLmg+CisjaW5jbHVkZSA8d3RmL3RleHQv
Q1N0cmluZy5oPgorCit1c2luZyBuYW1lc3BhY2Ugc3RkOwordXNpbmcgbmFtZXNwYWNlIFdlYktp
dDsKKworbmFtZXNwYWNlIFdlYkNvcmUgeworCitXZWJUcmFuc2Zvcm1PcGVyYXRpb25zIHRvV2Vi
VHJhbnNmb3JtT3BlcmF0aW9ucyhjb25zdCBUcmFuc2Zvcm1PcGVyYXRpb25zJiB0cmFuc2Zvcm1P
cGVyYXRpb25zLCBjb25zdCBGbG9hdFNpemUmIGJveFNpemUpCit7CisgICAgLy8gV2UgbmVlZCB0
byBkbyBhIGRlZXAgY29weSB0aGUgdHJhbnNmb3JtT3BlcmF0aW9ucyBtYXkgY29udGFpbiByZWYg
cG9pbnRlcnMgdG8gVHJhbnNmb3JtT3BlcmF0aW9uIG9iamVjdHMuCisgICAgV2ViVHJhbnNmb3Jt
T3BlcmF0aW9ucyB3ZWJUcmFuc2Zvcm1PcGVyYXRpb25zOworICAgIGZvciAoc2l6ZV90IGogPSAw
OyBqIDwgdHJhbnNmb3JtT3BlcmF0aW9ucy5zaXplKCk7ICsraikgeworICAgICAgICBUcmFuc2Zv
cm1PcGVyYXRpb246Ok9wZXJhdGlvblR5cGUgb3BlcmF0aW9uVHlwZSA9IHRyYW5zZm9ybU9wZXJh
dGlvbnMub3BlcmF0aW9ucygpW2pdLT5nZXRPcGVyYXRpb25UeXBlKCk7CisgICAgICAgIHN3aXRj
aCAob3BlcmF0aW9uVHlwZSkgeworICAgICAgICBjYXNlIFRyYW5zZm9ybU9wZXJhdGlvbjo6U0NB
TEVfWDoKKyAgICAgICAgY2FzZSBUcmFuc2Zvcm1PcGVyYXRpb246OlNDQUxFX1k6CisgICAgICAg
IGNhc2UgVHJhbnNmb3JtT3BlcmF0aW9uOjpTQ0FMRV9aOgorICAgICAgICBjYXNlIFRyYW5zZm9y
bU9wZXJhdGlvbjo6U0NBTEVfM0Q6CisgICAgICAgIGNhc2UgVHJhbnNmb3JtT3BlcmF0aW9uOjpT
Q0FMRTogeworICAgICAgICAgICAgU2NhbGVUcmFuc2Zvcm1PcGVyYXRpb24qIHRyYW5zZm9ybSA9
IHN0YXRpY19jYXN0PFNjYWxlVHJhbnNmb3JtT3BlcmF0aW9uKj4odHJhbnNmb3JtT3BlcmF0aW9u
cy5vcGVyYXRpb25zKClbal0uZ2V0KCkpOworICAgICAgICAgICAgd2ViVHJhbnNmb3JtT3BlcmF0
aW9ucy5hcHBlbmRTY2FsZSh0cmFuc2Zvcm0tPngoKSwgdHJhbnNmb3JtLT55KCksIHRyYW5zZm9y
bS0+eigpKTsKKyAgICAgICAgICAgIGJyZWFrOworICAgICAgICB9CisgICAgICAgIGNhc2UgVHJh
bnNmb3JtT3BlcmF0aW9uOjpUUkFOU0xBVEVfWDoKKyAgICAgICAgY2FzZSBUcmFuc2Zvcm1PcGVy
YXRpb246OlRSQU5TTEFURV9ZOgorICAgICAgICBjYXNlIFRyYW5zZm9ybU9wZXJhdGlvbjo6VFJB
TlNMQVRFX1o6CisgICAgICAgIGNhc2UgVHJhbnNmb3JtT3BlcmF0aW9uOjpUUkFOU0xBVEVfM0Q6
CisgICAgICAgIGNhc2UgVHJhbnNmb3JtT3BlcmF0aW9uOjpUUkFOU0xBVEU6IHsKKyAgICAgICAg
ICAgIFRyYW5zbGF0ZVRyYW5zZm9ybU9wZXJhdGlvbiogdHJhbnNmb3JtID0gc3RhdGljX2Nhc3Q8
VHJhbnNsYXRlVHJhbnNmb3JtT3BlcmF0aW9uKj4odHJhbnNmb3JtT3BlcmF0aW9ucy5vcGVyYXRp
b25zKClbal0uZ2V0KCkpOworICAgICAgICAgICAgd2ViVHJhbnNmb3JtT3BlcmF0aW9ucy5hcHBl
bmRUcmFuc2xhdGUoZmxvYXRWYWx1ZUZvckxlbmd0aCh0cmFuc2Zvcm0tPngoKSwgYm94U2l6ZS53
aWR0aCgpKSwgZmxvYXRWYWx1ZUZvckxlbmd0aCh0cmFuc2Zvcm0tPnkoKSwgYm94U2l6ZS5oZWln
aHQoKSksIGZsb2F0VmFsdWVGb3JMZW5ndGgodHJhbnNmb3JtLT56KCksIDEpKTsKKyAgICAgICAg
ICAgIGJyZWFrOworICAgICAgICB9CisgICAgICAgIGNhc2UgVHJhbnNmb3JtT3BlcmF0aW9uOjpS
T1RBVEVfWDoKKyAgICAgICAgY2FzZSBUcmFuc2Zvcm1PcGVyYXRpb246OlJPVEFURV9ZOgorICAg
ICAgICBjYXNlIFRyYW5zZm9ybU9wZXJhdGlvbjo6Uk9UQVRFXzNEOgorICAgICAgICBjYXNlIFRy
YW5zZm9ybU9wZXJhdGlvbjo6Uk9UQVRFOiB7CisgICAgICAgICAgICBSb3RhdGVUcmFuc2Zvcm1P
cGVyYXRpb24qIHRyYW5zZm9ybSA9IHN0YXRpY19jYXN0PFJvdGF0ZVRyYW5zZm9ybU9wZXJhdGlv
bio+KHRyYW5zZm9ybU9wZXJhdGlvbnMub3BlcmF0aW9ucygpW2pdLmdldCgpKTsKKyAgICAgICAg
ICAgIHdlYlRyYW5zZm9ybU9wZXJhdGlvbnMuYXBwZW5kUm90YXRlKHRyYW5zZm9ybS0+eCgpLCB0
cmFuc2Zvcm0tPnkoKSwgdHJhbnNmb3JtLT56KCksIHRyYW5zZm9ybS0+YW5nbGUoKSk7CisgICAg
ICAgICAgICBicmVhazsKKyAgICAgICAgfQorICAgICAgICBjYXNlIFRyYW5zZm9ybU9wZXJhdGlv
bjo6U0tFV19YOgorICAgICAgICBjYXNlIFRyYW5zZm9ybU9wZXJhdGlvbjo6U0tFV19ZOgorICAg
ICAgICBjYXNlIFRyYW5zZm9ybU9wZXJhdGlvbjo6U0tFVzogeworICAgICAgICAgICAgU2tld1Ry
YW5zZm9ybU9wZXJhdGlvbiogdHJhbnNmb3JtID0gc3RhdGljX2Nhc3Q8U2tld1RyYW5zZm9ybU9w
ZXJhdGlvbio+KHRyYW5zZm9ybU9wZXJhdGlvbnMub3BlcmF0aW9ucygpW2pdLmdldCgpKTsKKyAg
ICAgICAgICAgIHdlYlRyYW5zZm9ybU9wZXJhdGlvbnMuYXBwZW5kU2tldyh0cmFuc2Zvcm0tPmFu
Z2xlWCgpLCB0cmFuc2Zvcm0tPmFuZ2xlWSgpKTsKKyAgICAgICAgICAgIGJyZWFrOworICAgICAg
ICB9CisgICAgICAgIGNhc2UgVHJhbnNmb3JtT3BlcmF0aW9uOjpNQVRSSVg6IHsKKyAgICAgICAg
ICAgIE1hdHJpeFRyYW5zZm9ybU9wZXJhdGlvbiogdHJhbnNmb3JtID0gc3RhdGljX2Nhc3Q8TWF0
cml4VHJhbnNmb3JtT3BlcmF0aW9uKj4odHJhbnNmb3JtT3BlcmF0aW9ucy5vcGVyYXRpb25zKClb
al0uZ2V0KCkpOworICAgICAgICAgICAgVHJhbnNmb3JtYXRpb25NYXRyaXggbSA9IHRyYW5zZm9y
bS0+bWF0cml4KCk7CisgICAgICAgICAgICB3ZWJUcmFuc2Zvcm1PcGVyYXRpb25zLmFwcGVuZE1h
dHJpeChXZWJUcmFuc2Zvcm1hdGlvbk1hdHJpeChtKSk7CisgICAgICAgICAgICBicmVhazsKKyAg
ICAgICAgfQorICAgICAgICBjYXNlIFRyYW5zZm9ybU9wZXJhdGlvbjo6TUFUUklYXzNEOiB7Cisg
ICAgICAgICAgICBNYXRyaXgzRFRyYW5zZm9ybU9wZXJhdGlvbiogdHJhbnNmb3JtID0gc3RhdGlj
X2Nhc3Q8TWF0cml4M0RUcmFuc2Zvcm1PcGVyYXRpb24qPih0cmFuc2Zvcm1PcGVyYXRpb25zLm9w
ZXJhdGlvbnMoKVtqXS5nZXQoKSk7CisgICAgICAgICAgICBUcmFuc2Zvcm1hdGlvbk1hdHJpeCBt
ID0gdHJhbnNmb3JtLT5tYXRyaXgoKTsKKyAgICAgICAgICAgIHdlYlRyYW5zZm9ybU9wZXJhdGlv
bnMuYXBwZW5kTWF0cml4KFdlYlRyYW5zZm9ybWF0aW9uTWF0cml4KG0pKTsKKyAgICAgICAgICAg
IGJyZWFrOworICAgICAgICB9CisgICAgICAgIGNhc2UgVHJhbnNmb3JtT3BlcmF0aW9uOjpQRVJT
UEVDVElWRTogeworICAgICAgICAgICAgUGVyc3BlY3RpdmVUcmFuc2Zvcm1PcGVyYXRpb24qIHRy
YW5zZm9ybSA9IHN0YXRpY19jYXN0PFBlcnNwZWN0aXZlVHJhbnNmb3JtT3BlcmF0aW9uKj4odHJh
bnNmb3JtT3BlcmF0aW9ucy5vcGVyYXRpb25zKClbal0uZ2V0KCkpOworICAgICAgICAgICAgd2Vi
VHJhbnNmb3JtT3BlcmF0aW9ucy5hcHBlbmRQZXJzcGVjdGl2ZShmbG9hdFZhbHVlRm9yTGVuZ3Ro
KHRyYW5zZm9ybS0+cGVyc3BlY3RpdmUoKSwgMCkpOworICAgICAgICAgICAgYnJlYWs7CisgICAg
ICAgIH0KKyAgICAgICAgY2FzZSBUcmFuc2Zvcm1PcGVyYXRpb246OklERU5USVRZOgorICAgICAg
ICBjYXNlIFRyYW5zZm9ybU9wZXJhdGlvbjo6Tk9ORToKKyAgICAgICAgICAgIC8vIERvIG5vdGhp
bmcuCisgICAgICAgICAgICBicmVhazsKKyAgICAgICAgfSAvLyBzd2l0Y2gKKyAgICB9IC8vIGZv
ciBlYWNoIG9wZXJhdGlvbgorCisgICAgcmV0dXJuIHdlYlRyYW5zZm9ybU9wZXJhdGlvbnM7Cit9
CisKK3RlbXBsYXRlIDxjbGFzcyBWYWx1ZSwgY2xhc3MgS2V5ZnJhbWUsIGNsYXNzIEN1cnZlPgor
Ym9vbCBhcHBlbmRLZXlmcmFtZShDdXJ2ZSYgY3VydmUsIGRvdWJsZSBrZXlUaW1lLCBjb25zdCBW
YWx1ZSogdmFsdWUsIFBhc3NPd25QdHI8Q0NUaW1pbmdGdW5jdGlvbj4gdGltaW5nRnVuY3Rpb24s
IGNvbnN0IEZsb2F0U2l6ZSYpCit7CisgICAgY3VydmUuYWRkS2V5ZnJhbWUoS2V5ZnJhbWU6OmNy
ZWF0ZShrZXlUaW1lLCB2YWx1ZS0+dmFsdWUoKSwgdGltaW5nRnVuY3Rpb24pKTsKKyAgICByZXR1
cm4gdHJ1ZTsKK30KKwordGVtcGxhdGUgPD4KK2Jvb2wgYXBwZW5kS2V5ZnJhbWU8VHJhbnNmb3Jt
QW5pbWF0aW9uVmFsdWUsIENDVHJhbnNmb3JtS2V5ZnJhbWUsIENDS2V5ZnJhbWVkVHJhbnNmb3Jt
QW5pbWF0aW9uQ3VydmU+KENDS2V5ZnJhbWVkVHJhbnNmb3JtQW5pbWF0aW9uQ3VydmUmIGN1cnZl
LCBkb3VibGUga2V5VGltZSwgY29uc3QgVHJhbnNmb3JtQW5pbWF0aW9uVmFsdWUqIHZhbHVlLCBQ
YXNzT3duUHRyPENDVGltaW5nRnVuY3Rpb24+IHRpbWluZ0Z1bmN0aW9uLCBjb25zdCBGbG9hdFNp
emUmIGJveFNpemUpCit7CisgICAgV2ViVHJhbnNmb3JtT3BlcmF0aW9ucyBvcGVyYXRpb25zID0g
dG9XZWJUcmFuc2Zvcm1PcGVyYXRpb25zKCp2YWx1ZS0+dmFsdWUoKSwgYm94U2l6ZSk7CisgICAg
aWYgKG9wZXJhdGlvbnMuYXBwbHkoKS5pc0ludmVydGlibGUoKSkgeworICAgICAgICBjdXJ2ZS5h
ZGRLZXlmcmFtZShDQ1RyYW5zZm9ybUtleWZyYW1lOjpjcmVhdGUoa2V5VGltZSwgb3BlcmF0aW9u
cywgdGltaW5nRnVuY3Rpb24pKTsKKyAgICAgICAgcmV0dXJuIHRydWU7CisgICAgfQorICAgIHJl
dHVybiBmYWxzZTsKK30KKwordGVtcGxhdGUgPGNsYXNzIFZhbHVlLCBjbGFzcyBLZXlmcmFtZSwg
Y2xhc3MgQ3VydmU+CitQYXNzT3duUHRyPENDQWN0aXZlQW5pbWF0aW9uPiBjcmVhdGVBY3RpdmVB
bmltYXRpb24oY29uc3QgS2V5ZnJhbWVWYWx1ZUxpc3QmIHZhbHVlTGlzdCwgY29uc3QgQW5pbWF0
aW9uKiBhbmltYXRpb24sIHNpemVfdCBhbmltYXRpb25JZCwgc2l6ZV90IGdyb3VwSWQsIGRvdWJs
ZSB0aW1lT2Zmc2V0LCBDQ0FjdGl2ZUFuaW1hdGlvbjo6VGFyZ2V0UHJvcGVydHkgdGFyZ2V0UHJv
cGVydHksIGNvbnN0IEZsb2F0U2l6ZSYgYm94U2l6ZSkKK3sKKyAgICBib29sIGFsdGVybmF0ZSA9
IGZhbHNlOworICAgIGJvb2wgcmV2ZXJzZSA9IGZhbHNlOworICAgIGlmIChhbmltYXRpb24gJiYg
YW5pbWF0aW9uLT5pc0RpcmVjdGlvblNldCgpKSB7CisgICAgICAgIEFuaW1hdGlvbjo6QW5pbWF0
aW9uRGlyZWN0aW9uIGRpcmVjdGlvbiA9IGFuaW1hdGlvbi0+ZGlyZWN0aW9uKCk7CisgICAgICAg
IGlmIChkaXJlY3Rpb24gPT0gQW5pbWF0aW9uOjpBbmltYXRpb25EaXJlY3Rpb25BbHRlcm5hdGUg
fHwgZGlyZWN0aW9uID09IEFuaW1hdGlvbjo6QW5pbWF0aW9uRGlyZWN0aW9uQWx0ZXJuYXRlUmV2
ZXJzZSkKKyAgICAgICAgICAgIGFsdGVybmF0ZSA9IHRydWU7CisgICAgICAgIGlmIChkaXJlY3Rp
b24gPT0gQW5pbWF0aW9uOjpBbmltYXRpb25EaXJlY3Rpb25SZXZlcnNlIHx8IGRpcmVjdGlvbiA9
PSBBbmltYXRpb246OkFuaW1hdGlvbkRpcmVjdGlvbkFsdGVybmF0ZVJldmVyc2UpCisgICAgICAg
ICAgICByZXZlcnNlID0gdHJ1ZTsKKyAgICB9CisKKyAgICBPd25QdHI8Q3VydmU+IGN1cnZlID0g
Q3VydmU6OmNyZWF0ZSgpOworICAgIFZlY3RvcjxLZXlmcmFtZT4ga2V5ZnJhbWVzOworCisgICAg
Zm9yIChzaXplX3QgaSA9IDA7IGkgPCB2YWx1ZUxpc3Quc2l6ZSgpOyBpKyspIHsKKyAgICAgICAg
c2l6ZV90IGluZGV4ID0gcmV2ZXJzZSA/IHZhbHVlTGlzdC5zaXplKCkgLSBpIC0gMSA6IGk7CisK
KyAgICAgICAgY29uc3QgVmFsdWUqIG9yaWdpbmFsVmFsdWUgPSBzdGF0aWNfY2FzdDxjb25zdCBW
YWx1ZSo+KHZhbHVlTGlzdC5hdChpbmRleCkpOworCisgICAgICAgIE93blB0cjxDQ1RpbWluZ0Z1
bmN0aW9uPiB0aW1pbmdGdW5jdGlvbjsKKyAgICAgICAgY29uc3QgVGltaW5nRnVuY3Rpb24qIG9y
aWdpbmFsVGltaW5nRnVuY3Rpb24gPSBvcmlnaW5hbFZhbHVlLT50aW1pbmdGdW5jdGlvbigpOwor
CisgICAgICAgIC8vIElmIHRoZXJlIGhhc24ndCBiZWVuIGEgdGltaW5nIGZ1bmN0aW9uIGFzc29j
aWF0ZWQgd2l0aCB0aGlzIGtleWZyYW1lLCB1c2UgdGhlCisgICAgICAgIC8vIGFuaW1hdGlvbidz
IHRpbWluZyBmdW5jdGlvbiwgaWYgd2UgaGF2ZSBvbmUuCisgICAgICAgIGlmICghb3JpZ2luYWxU
aW1pbmdGdW5jdGlvbiAmJiBhbmltYXRpb24tPmlzVGltaW5nRnVuY3Rpb25TZXQoKSkKKyAgICAg
ICAgICAgIG9yaWdpbmFsVGltaW5nRnVuY3Rpb24gPSBhbmltYXRpb24tPnRpbWluZ0Z1bmN0aW9u
KCkuZ2V0KCk7CisKKyAgICAgICAgaWYgKG9yaWdpbmFsVGltaW5nRnVuY3Rpb24pIHsKKyAgICAg
ICAgICAgIHN3aXRjaCAob3JpZ2luYWxUaW1pbmdGdW5jdGlvbi0+dHlwZSgpKSB7CisgICAgICAg
ICAgICBjYXNlIFRpbWluZ0Z1bmN0aW9uOjpTdGVwc0Z1bmN0aW9uOgorICAgICAgICAgICAgICAg
IC8vIEZJWE1FOiBhZGQgc3VwcG9ydCBmb3Igc3RlcHMgdGltaW5nIGZ1bmN0aW9uLgorICAgICAg
ICAgICAgICAgIHJldHVybiBudWxscHRyOworICAgICAgICAgICAgY2FzZSBUaW1pbmdGdW5jdGlv
bjo6TGluZWFyRnVuY3Rpb246CisgICAgICAgICAgICAgICAgLy8gRG9uJ3Qgc2V0IHRoZSB0aW1p
bmcgZnVuY3Rpb24uIEtleWZyYW1lcyBhcmUgaW50ZXJwb2xhdGVkIGxpbmVhcmx5IGlmIHRoZXJl
IGlzIG5vIHRpbWluZyBmdW5jdGlvbi4KKyAgICAgICAgICAgICAgICBicmVhazsKKyAgICAgICAg
ICAgIGNhc2UgVGltaW5nRnVuY3Rpb246OkN1YmljQmV6aWVyRnVuY3Rpb246CisgICAgICAgICAg
ICAgICAgY29uc3QgQ3ViaWNCZXppZXJUaW1pbmdGdW5jdGlvbiogb3JpZ2luYWxCZXppZXJUaW1p
bmdGdW5jdGlvbiA9IHN0YXRpY19jYXN0PGNvbnN0IEN1YmljQmV6aWVyVGltaW5nRnVuY3Rpb24q
PihvcmlnaW5hbFRpbWluZ0Z1bmN0aW9uKTsKKyAgICAgICAgICAgICAgICB0aW1pbmdGdW5jdGlv
biA9IENDQ3ViaWNCZXppZXJUaW1pbmdGdW5jdGlvbjo6Y3JlYXRlKG9yaWdpbmFsQmV6aWVyVGlt
aW5nRnVuY3Rpb24tPngxKCksIG9yaWdpbmFsQmV6aWVyVGltaW5nRnVuY3Rpb24tPnkxKCksIG9y
aWdpbmFsQmV6aWVyVGltaW5nRnVuY3Rpb24tPngyKCksIG9yaWdpbmFsQmV6aWVyVGltaW5nRnVu
Y3Rpb24tPnkyKCkpOworICAgICAgICAgICAgICAgIGJyZWFrOworICAgICAgICAgICAgfSAvLyBz
d2l0Y2gKKyAgICAgICAgfSBlbHNlCisgICAgICAgICAgICB0aW1pbmdGdW5jdGlvbiA9IENDRWFz
ZVRpbWluZ0Z1bmN0aW9uOjpjcmVhdGUoKTsKKworICAgICAgICBkb3VibGUgZHVyYXRpb24gPSAo
YW5pbWF0aW9uICYmIGFuaW1hdGlvbi0+aXNEdXJhdGlvblNldCgpKSA/IGFuaW1hdGlvbi0+ZHVy
YXRpb24oKSA6IDE7CisgICAgICAgIGRvdWJsZSBrZXlUaW1lID0gb3JpZ2luYWxWYWx1ZS0+a2V5
VGltZSgpICogZHVyYXRpb247CisKKyAgICAgICAgaWYgKHJldmVyc2UpCisgICAgICAgICAgICBr
ZXlUaW1lID0gZHVyYXRpb24gLSBrZXlUaW1lOworCisgICAgICAgIGJvb2wgYWRkZWRLZXlmcmFt
ZSA9IGFwcGVuZEtleWZyYW1lPFZhbHVlLCBLZXlmcmFtZSwgQ3VydmU+KCpjdXJ2ZSwga2V5VGlt
ZSwgb3JpZ2luYWxWYWx1ZSwgdGltaW5nRnVuY3Rpb24ucmVsZWFzZSgpLCBib3hTaXplKTsKKyAg
ICAgICAgaWYgKCFhZGRlZEtleWZyYW1lKQorICAgICAgICAgICAgcmV0dXJuIG51bGxwdHI7Cisg
ICAgfQorCisgICAgT3duUHRyPENDQWN0aXZlQW5pbWF0aW9uPiBhbmltID0gQ0NBY3RpdmVBbmlt
YXRpb246OmNyZWF0ZShjdXJ2ZS5yZWxlYXNlKCksIGFuaW1hdGlvbklkLCBncm91cElkLCB0YXJn
ZXRQcm9wZXJ0eSk7CisKKyAgICBBU1NFUlQoYW5pbS5nZXQoKSk7CisKKyAgICBpZiAoYW5pbS5n
ZXQoKSkgeworICAgICAgICBpbnQgaXRlcmF0aW9ucyA9IChhbmltYXRpb24gJiYgYW5pbWF0aW9u
LT5pc0l0ZXJhdGlvbkNvdW50U2V0KCkpID8gYW5pbWF0aW9uLT5pdGVyYXRpb25Db3VudCgpIDog
MTsKKyAgICAgICAgYW5pbS0+c2V0SXRlcmF0aW9ucyhpdGVyYXRpb25zKTsKKyAgICAgICAgYW5p
bS0+c2V0QWx0ZXJuYXRlc0RpcmVjdGlvbihhbHRlcm5hdGUpOworICAgIH0KKworICAgIC8vIElu
IG9yZGVyIHRvIGF2b2lkIHNrZXcsIHRoZSBtYWluIHRocmVhZCBhbmltYXRpb24gY2Fubm90IHRp
Y2sgdW50aWwgaXQgaGFzIHJlY2VpdmVkIHRoZSBzdGFydCB0aW1lIG9mCisgICAgLy8gdGhlIGNv
cnJlc3BvbmRpbmcgaW1wbCB0aHJlYWQgYW5pbWF0aW9uLgorICAgIGFuaW0tPnNldE5lZWRzU3lu
Y2hyb25pemVkU3RhcnRUaW1lKHRydWUpOworCisgICAgLy8gSWYgdGltZU9mZnNldCA+IDAsIHRo
ZW4gdGhlIGFuaW1hdGlvbiBoYXMgc3RhcnRlZCBpbiB0aGUgcGFzdC4KKyAgICBhbmltLT5zZXRU
aW1lT2Zmc2V0KHRpbWVPZmZzZXQpOworCisgICAgcmV0dXJuIGFuaW0ucmVsZWFzZSgpOworfQor
CitQYXNzT3duUHRyPENDQWN0aXZlQW5pbWF0aW9uPiBjcmVhdGVBY3RpdmVBbmltYXRpb24oY29u
c3QgS2V5ZnJhbWVWYWx1ZUxpc3QmIHZhbHVlcywgY29uc3QgQW5pbWF0aW9uKiBhbmltYXRpb24s
IHNpemVfdCBhbmltYXRpb25JZCwgc2l6ZV90IGdyb3VwSWQsIGRvdWJsZSB0aW1lT2Zmc2V0LCBj
b25zdCBGbG9hdFNpemUmIGJveFNpemUpCit7CisgICAgaWYgKHZhbHVlcy5wcm9wZXJ0eSgpID09
IEFuaW1hdGVkUHJvcGVydHlXZWJraXRUcmFuc2Zvcm0pCisgICAgICAgIHJldHVybiBjcmVhdGVB
Y3RpdmVBbmltYXRpb248VHJhbnNmb3JtQW5pbWF0aW9uVmFsdWUsIENDVHJhbnNmb3JtS2V5ZnJh
bWUsIENDS2V5ZnJhbWVkVHJhbnNmb3JtQW5pbWF0aW9uQ3VydmU+KHZhbHVlcywgYW5pbWF0aW9u
LCBhbmltYXRpb25JZCwgZ3JvdXBJZCwgdGltZU9mZnNldCwgQ0NBY3RpdmVBbmltYXRpb246OlRy
YW5zZm9ybSwgRmxvYXRTaXplKGJveFNpemUpKTsKKworICAgIGlmICh2YWx1ZXMucHJvcGVydHko
KSA9PSBBbmltYXRlZFByb3BlcnR5T3BhY2l0eSkKKyAgICAgICAgcmV0dXJuIGNyZWF0ZUFjdGl2
ZUFuaW1hdGlvbjxGbG9hdEFuaW1hdGlvblZhbHVlLCBDQ0Zsb2F0S2V5ZnJhbWUsIENDS2V5ZnJh
bWVkRmxvYXRBbmltYXRpb25DdXJ2ZT4odmFsdWVzLCBhbmltYXRpb24sIGFuaW1hdGlvbklkLCBn
cm91cElkLCB0aW1lT2Zmc2V0LCBDQ0FjdGl2ZUFuaW1hdGlvbjo6T3BhY2l0eSwgRmxvYXRTaXpl
KCkpOworCisgICAgcmV0dXJuIG51bGxwdHI7Cit9CisKK30gLy8gbmFtZXNwYWNlIFdlYkNvcmUK
ZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2Nocm9taXVtL0Fu
aW1hdGlvblRyYW5zbGF0aW9uVXRpbC5oIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhp
Y3MvY2hyb21pdW0vQW5pbWF0aW9uVHJhbnNsYXRpb25VdGlsLmgKbmV3IGZpbGUgbW9kZSAxMDA2
NDQKaW5kZXggMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMC4uMDhmNjBk
MjBkYzNiYzFmYzc4ZGE0ZGFiMzVmN2JjYzM5NTBjYTUxNAotLS0gL2Rldi9udWxsCisrKyBiL1Nv
dXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2Nocm9taXVtL0FuaW1hdGlvblRyYW5zbGF0
aW9uVXRpbC5oCkBAIC0wLDAgKzEsNDcgQEAKKy8qCisgKiBDb3B5cmlnaHQgKEMpIDIwMTAgR29v
Z2xlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqCisgKiBSZWRpc3RyaWJ1dGlvbiBhbmQg
dXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKyAqIG1vZGlm
aWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0
aW9ucyBhcmUKKyAqIG1ldDoKKyAqCisgKiAgICAgKiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNl
IGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAorICogbm90aWNlLCB0aGlzIGxp
c3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgorICogICAgICog
UmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZQor
ICogY29weXJpZ2h0IG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xs
b3dpbmcgZGlzY2xhaW1lcgorICogaW4gdGhlIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1h
dGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZQorICogZGlzdHJpYnV0aW9uLgorICogICAgICogTmVp
dGhlciB0aGUgbmFtZSBvZiBHb29nbGUgSW5jLiBub3IgdGhlIG5hbWVzIG9mIGl0cworICogY29u
dHJpYnV0b3JzIG1heSBiZSB1c2VkIHRvIGVuZG9yc2Ugb3IgcHJvbW90ZSBwcm9kdWN0cyBkZXJp
dmVkIGZyb20KKyAqIHRoaXMgc29mdHdhcmUgd2l0aG91dCBzcGVjaWZpYyBwcmlvciB3cml0dGVu
IHBlcm1pc3Npb24uCisgKgorICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBUSEUgQ09Q
WVJJR0hUIEhPTERFUlMgQU5EIENPTlRSSUJVVE9SUworICogIkFTIElTIiBBTkQgQU5ZIEVYUFJF
U1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QKKyAqIExJTUlURUQg
VE8sIFRIRSBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNT
IEZPUgorICogQSBQQVJUSUNVTEFSIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuIElOIE5PIEVWRU5U
IFNIQUxMIFRIRSBDT1BZUklHSFQKKyAqIE9XTkVSIE9SIENPTlRSSUJVVE9SUyBCRSBMSUFCTEUg
Rk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLAorICogU1BFQ0lBTCwgRVhFTVBM
QVJZLCBPUiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVAorICogTElN
SVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9T
UyBPRiBVU0UsCisgKiBEQVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJT04p
IEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkKKyAqIFRIRU9SWSBPRiBMSUFCSUxJVFksIFdIRVRI
RVIgSU4gQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQKKyAqIChJTkNMVURJTkcg
TkVHTElHRU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVT
RQorICogT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElU
WSBPRiBTVUNIIERBTUFHRS4KKyAqLworCisjaWZuZGVmIEFuaW1hdGlvblRyYW5zbGF0aW9uVXRp
bF9oCisjZGVmaW5lIEFuaW1hdGlvblRyYW5zbGF0aW9uVXRpbF9oCisKKyNpbmNsdWRlIDx3dGYv
UGFzc093blB0ci5oPgorCitjbGFzcyBLZXlmcmFtZVZhbHVlTGlzdDsKK2NsYXNzIEFuaW1hdGlv
bjsKK2NsYXNzIEZsb2F0U2l6ZTsKK2NsYXNzIENDQWN0aXZlQW5pbWF0aW9uOworCituYW1lc3Bh
Y2UgV2ViQ29yZSB7CisKK1Bhc3NPd25QdHI8Q0NBY3RpdmVBbmltYXRpb24+IGNyZWF0ZUFjdGl2
ZUFuaW1hdGlvbihjb25zdCBLZXlmcmFtZVZhbHVlTGlzdCYsIGNvbnN0IEFuaW1hdGlvbiosIHNp
emVfdCBhbmltYXRpb25JZCwgc2l6ZV90IGdyb3VwSWQsIGRvdWJsZSB0aW1lT2Zmc2V0LCBjb25z
dCBGbG9hdFNpemUmIGJveFNpemUpOworCit9IC8vIG5hbWVzcGFjZSBXZWJDb3JlCisKKyNlbmRp
ZiAvLyBBbmltYXRpb25UcmFuc2xhdGlvblV0aWxfaApkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNv
cmUvcGxhdGZvcm0vZ3JhcGhpY3MvY2hyb21pdW0vR3JhcGhpY3NMYXllckNocm9taXVtLmNwcCBi
L1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2Nocm9taXVtL0dyYXBoaWNzTGF5ZXJD
aHJvbWl1bS5jcHAKaW5kZXggMTg0MzMzNjA5NTFiMmJmY2VhN2NiMTFiYmU5MDAxZWE5ODVmNGUw
MS4uOTQ5YTRhOThkMzYxYjRhM2QxMDFjZDNmMTMzNGZmZGU4Yjc5MmMyYiAxMDA2NDQKLS0tIGEv
U291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvY2hyb21pdW0vR3JhcGhpY3NMYXllckNo
cm9taXVtLmNwcAorKysgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9jaHJvbWl1
bS9HcmFwaGljc0xheWVyQ2hyb21pdW0uY3BwCkBAIC00Niw2ICs0Niw3IEBACiAjaW5jbHVkZSAi
R3JhcGhpY3NMYXllckNocm9taXVtLmgiCiAKICNpbmNsdWRlICJBbmltYXRpb25JZFZlbmRvci5o
IgorI2luY2x1ZGUgIkFuaW1hdGlvblRyYW5zbGF0aW9uVXRpbC5oIgogI2luY2x1ZGUgIkNhbnZh
czJETGF5ZXJDaHJvbWl1bS5oIgogI2luY2x1ZGUgIkNvbnRlbnRMYXllckNocm9taXVtLmgiCiAj
aW5jbHVkZSAiRmxvYXRDb252ZXJzaW9uLmgiCkBAIC01OCw2ICs1OSw4IEBACiAjaW5jbHVkZSAi
U2tNYXRyaXg0NC5oIgogI2luY2x1ZGUgIlN5c3RlbVRpbWUuaCIKIAorI2luY2x1ZGUgImNjL0ND
QWN0aXZlQW5pbWF0aW9uLmgiCisKICNpbmNsdWRlIDxwdWJsaWMvV2ViRmlsdGVyT3BlcmF0aW9u
Lmg+CiAjaW5jbHVkZSA8cHVibGljL1dlYkZpbHRlck9wZXJhdGlvbnMuaD4KICNpbmNsdWRlIDxw
dWJsaWMvV2ViRmxvYXRQb2ludC5oPgpAQCAtNTAwLDggKzUwMywyOCBAQCB2b2lkIEdyYXBoaWNz
TGF5ZXJDaHJvbWl1bTo6c2V0Q29udGVudHNUb0NhbnZhcyhQbGF0Zm9ybUxheWVyKiBwbGF0Zm9y
bUxheWVyKQogCiBib29sIEdyYXBoaWNzTGF5ZXJDaHJvbWl1bTo6YWRkQW5pbWF0aW9uKGNvbnN0
IEtleWZyYW1lVmFsdWVMaXN0JiB2YWx1ZXMsIGNvbnN0IEludFNpemUmIGJveFNpemUsIGNvbnN0
IEFuaW1hdGlvbiogYW5pbWF0aW9uLCBjb25zdCBTdHJpbmcmIGFuaW1hdGlvbk5hbWUsIGRvdWJs
ZSB0aW1lT2Zmc2V0KQogeworICAgIC8vIEJhaWwgZWFybHkgaWYgd2UgaGF2ZSBhIGxhcmdlIHJv
dGF0aW9uLgorICAgIGlmICh2YWx1ZXMucHJvcGVydHkoKSA9PSBBbmltYXRlZFByb3BlcnR5V2Vi
a2l0VHJhbnNmb3JtKSB7CisgICAgICAgIGJvb2wgaGFzUm90YXRpb25PZk1vcmVUaGFuMTgwRGVn
cmVlcyA9IGZhbHNlOworICAgICAgICB2YWxpZGF0ZVRyYW5zZm9ybU9wZXJhdGlvbnModmFsdWVz
LCBoYXNSb3RhdGlvbk9mTW9yZVRoYW4xODBEZWdyZWVzKTsKKyAgICAgICAgaWYgKGhhc1JvdGF0
aW9uT2ZNb3JlVGhhbjE4MERlZ3JlZXMpCisgICAgICAgICAgICByZXR1cm4gZmFsc2U7CisgICAg
fQorCiAgICAgcHJpbWFyeUxheWVyKCkudW53cmFwPExheWVyQ2hyb21pdW0+KCktPnNldExheWVy
QW5pbWF0aW9uRGVsZWdhdGUodGhpcyk7Ci0gICAgcmV0dXJuIHByaW1hcnlMYXllcigpLnVud3Jh
cDxMYXllckNocm9taXVtPigpLT5hZGRBbmltYXRpb24odmFsdWVzLCBib3hTaXplLCBhbmltYXRp
b24sIG1hcEFuaW1hdGlvbk5hbWVUb0lkKGFuaW1hdGlvbk5hbWUpLCBBbmltYXRpb25JZFZlbmRv
cjo6Z2V0TmV4dEdyb3VwSWQoKSwgdGltZU9mZnNldCk7CisKKyAgICBpbnQgYW5pbWF0aW9uSWQg
PSBtYXBBbmltYXRpb25OYW1lVG9JZChhbmltYXRpb25OYW1lKTsKKyAgICBpbnQgZ3JvdXBJZCA9
IEFuaW1hdGlvbklkVmVuZG9yOjpnZXROZXh0R3JvdXBJZCgpOworCisgICAgT3duUHRyPENDQWN0
aXZlQW5pbWF0aW9uPiB0b0FkZChjcmVhdGVBY3RpdmVBbmltYXRpb24odmFsdWVzLCBhbmltYXRp
b24sIGFuaW1hdGlvbklkLCBncm91cElkLCB0aW1lT2Zmc2V0LCBib3hTaXplKSk7CisKKyAgICBp
ZiAodG9BZGQuZ2V0KCkpIHsKKyAgICAgICAgLy8gUmVtb3ZlIGFueSBleGlzdGluZyBhbmltYXRp
b25zIHdpdGggdGhlIHNhbWUgYW5pbWF0aW9uIGlkIGFuZCB0YXJnZXQgcHJvcGVydHkuCisgICAg
ICAgIHByaW1hcnlMYXllcigpLnVud3JhcDxMYXllckNocm9taXVtPigpLT5sYXllckFuaW1hdGlv
bkNvbnRyb2xsZXIoKS0+cmVtb3ZlQW5pbWF0aW9uKHRvQWRkLT5pZCgpLCB0b0FkZC0+dGFyZ2V0
UHJvcGVydHkoKSk7CisgICAgICAgIHJldHVybiBwcmltYXJ5TGF5ZXIoKS51bndyYXA8TGF5ZXJD
aHJvbWl1bT4oKS0+YWRkQW5pbWF0aW9uKHRvQWRkLnJlbGVhc2UoKSk7CisgICAgfQorCisgICAg
cmV0dXJuIGZhbHNlOwogfQogCiB2b2lkIEdyYXBoaWNzTGF5ZXJDaHJvbWl1bTo6cGF1c2VBbmlt
YXRpb24oY29uc3QgU3RyaW5nJiBhbmltYXRpb25OYW1lLCBkb3VibGUgdGltZU9mZnNldCkKZGlm
ZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2Nocm9taXVtL0xheWVy
Q2hyb21pdW0uY3BwIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvY2hyb21pdW0v
TGF5ZXJDaHJvbWl1bS5jcHAKaW5kZXggZjYxZmQzNWQ1MzAwMTQxZjJiMmZmMjZiODc2NGI4ZjYy
ZTAzZTIzZC4uZDM1ZjU5MjE5ZmY3NDNjZmQ5ZGU2YmQ3OWViZTU5MWNhYzkyMWFhOSAxMDA2NDQK
LS0tIGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvY2hyb21pdW0vTGF5ZXJDaHJv
bWl1bS5jcHAKKysrIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvY2hyb21pdW0v
TGF5ZXJDaHJvbWl1bS5jcHAKQEAgLTM3LDYgKzM3LDcgQEAKICNpbmNsdWRlICJQbGF0Zm9ybUNv
bnRleHRTa2lhLmgiCiAjaW5jbHVkZSAiUmVuZGVyTGF5ZXJCYWNraW5nLmgiCiAjaW5jbHVkZSAi
VGV4dFN0cmVhbS5oIgorI2luY2x1ZGUgImNjL0NDQWN0aXZlQW5pbWF0aW9uLmgiCiAjaW5jbHVk
ZSAiY2MvQ0NBbmltYXRpb25FdmVudHMuaCIKICNpbmNsdWRlICJjYy9DQ0xheWVyQW5pbWF0aW9u
Q29udHJvbGxlci5oIgogI2luY2x1ZGUgImNjL0NDTGF5ZXJBbmltYXRpb25EZWxlZ2F0ZS5oIgpA
QCAtNTk5LDE3ICs2MDAsMTUgQEAgdm9pZCBMYXllckNocm9taXVtOjpzZXRUcmFuc2Zvcm1Gcm9t
QW5pbWF0aW9uKGNvbnN0IFdlYlRyYW5zZm9ybWF0aW9uTWF0cml4JiB0cmEKICAgICBtX3RyYW5z
Zm9ybSA9IHRyYW5zZm9ybTsKIH0KIAotYm9vbCBMYXllckNocm9taXVtOjphZGRBbmltYXRpb24o
Y29uc3QgS2V5ZnJhbWVWYWx1ZUxpc3QmIHZhbHVlcywgY29uc3QgSW50U2l6ZSYgYm94U2l6ZSwg
Y29uc3QgQW5pbWF0aW9uKiBhbmltYXRpb24sIGludCBhbmltYXRpb25JZCwgaW50IGdyb3VwSWQs
IGRvdWJsZSB0aW1lT2Zmc2V0KQorYm9vbCBMYXllckNocm9taXVtOjphZGRBbmltYXRpb24oUGFz
c093blB0cjxDQ0FjdGl2ZUFuaW1hdGlvbj4gYW5pbWF0aW9uKQogewogICAgIGlmICghbV9sYXll
clRyZWVIb3N0IHx8ICFtX2xheWVyVHJlZUhvc3QtPnNldHRpbmdzKCkudGhyZWFkZWRBbmltYXRp
b25FbmFibGVkKQogICAgICAgICByZXR1cm4gZmFsc2U7CiAKLSAgICBib29sIGFkZGVkQW5pbWF0
aW9uID0gbV9sYXllckFuaW1hdGlvbkNvbnRyb2xsZXItPmFkZEFuaW1hdGlvbih2YWx1ZXMsIGJv
eFNpemUsIGFuaW1hdGlvbiwgYW5pbWF0aW9uSWQsIGdyb3VwSWQsIHRpbWVPZmZzZXQpOwotICAg
IGlmIChhZGRlZEFuaW1hdGlvbikgewotICAgICAgICBtX2xheWVyVHJlZUhvc3QtPmRpZEFkZEFu
aW1hdGlvbigpOwotICAgICAgICBzZXROZWVkc0NvbW1pdCgpOwotICAgIH0KLSAgICByZXR1cm4g
YWRkZWRBbmltYXRpb247CisgICAgbV9sYXllckFuaW1hdGlvbkNvbnRyb2xsZXItPmFkZEFuaW1h
dGlvbihhbmltYXRpb24pOworICAgIG1fbGF5ZXJUcmVlSG9zdC0+ZGlkQWRkQW5pbWF0aW9uKCk7
CisgICAgc2V0TmVlZHNDb21taXQoKTsKKyAgICByZXR1cm4gdHJ1ZTsKIH0KIAogdm9pZCBMYXll
ckNocm9taXVtOjpwYXVzZUFuaW1hdGlvbihpbnQgYW5pbWF0aW9uSWQsIGRvdWJsZSB0aW1lT2Zm
c2V0KQpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvY2hyb21p
dW0vTGF5ZXJDaHJvbWl1bS5oIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvY2hy
b21pdW0vTGF5ZXJDaHJvbWl1bS5oCmluZGV4IDVkNTJmOGJjOWZlZWQxMjQxMDY4ZDExMTJkY2M4
ZDllNDM3NDYxZWYuLjExZWIyNzJlYThlZjRlYTIzZGNkMmEzNGJhYjc2OTUxZDM3NTMwNDYgMTAw
NjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2Nocm9taXVtL0xheWVy
Q2hyb21pdW0uaAorKysgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9jaHJvbWl1
bS9MYXllckNocm9taXVtLmgKQEAgLTU3LDYgKzU3LDcgQEAKIAogbmFtZXNwYWNlIFdlYkNvcmUg
ewogCitjbGFzcyBDQ0FjdGl2ZUFuaW1hdGlvbjsKIHN0cnVjdCBDQ0FuaW1hdGlvbkV2ZW50Owog
Y2xhc3MgQ0NMYXllckFuaW1hdGlvbkRlbGVnYXRlOwogY2xhc3MgQ0NMYXllckltcGw7CkBAIC03
OCw3ICs3OSw2IEBAIHB1YmxpYzoKICAgICB2aXJ0dWFsIGZsb2F0IG9wYWNpdHkoKSBjb25zdCBP
VkVSUklERSB7IHJldHVybiBtX29wYWNpdHk7IH0KICAgICB2aXJ0dWFsIHZvaWQgc2V0VHJhbnNm
b3JtRnJvbUFuaW1hdGlvbihjb25zdCBXZWJLaXQ6OldlYlRyYW5zZm9ybWF0aW9uTWF0cml4Jikg
T1ZFUlJJREU7CiAgICAgdmlydHVhbCBjb25zdCBXZWJLaXQ6OldlYlRyYW5zZm9ybWF0aW9uTWF0
cml4JiB0cmFuc2Zvcm0oKSBjb25zdCBPVkVSUklERSB7IHJldHVybiBtX3RyYW5zZm9ybTsgfQot
ICAgIHZpcnR1YWwgY29uc3QgSW50U2l6ZSYgYm91bmRzKCkgY29uc3QgT1ZFUlJJREUgeyByZXR1
cm4gbV9ib3VuZHM7IH0KIAogICAgIGNvbnN0IExheWVyQ2hyb21pdW0qIHJvb3RMYXllcigpIGNv
bnN0OwogICAgIExheWVyQ2hyb21pdW0qIHBhcmVudCgpIGNvbnN0OwpAQCAtMTAwLDYgKzEwMCw3
IEBAIHB1YmxpYzoKICAgICBDb2xvciBiYWNrZ3JvdW5kQ29sb3IoKSBjb25zdCB7IHJldHVybiBt
X2JhY2tncm91bmRDb2xvcjsgfQogCiAgICAgdm9pZCBzZXRCb3VuZHMoY29uc3QgSW50U2l6ZSYp
OworICAgIGNvbnN0IEludFNpemUmIGJvdW5kcygpIGNvbnN0IHsgcmV0dXJuIG1fYm91bmRzOyB9
CiAgICAgdmlydHVhbCBJbnRTaXplIGNvbnRlbnRCb3VuZHMoKSBjb25zdCB7IHJldHVybiBib3Vu
ZHMoKTsgfQogCiAgICAgdm9pZCBzZXRNYXNrc1RvQm91bmRzKGJvb2wpOwpAQCAtMjM2LDcgKzIz
Nyw3IEBAIHB1YmxpYzoKICAgICB2b2lkIHNldEFsd2F5c1Jlc2VydmVUZXh0dXJlcyhib29sIGFs
d2F5c1Jlc2VydmVUZXh0dXJlcykgeyBtX2Fsd2F5c1Jlc2VydmVUZXh0dXJlcyA9IGFsd2F5c1Jl
c2VydmVUZXh0dXJlczsgfQogICAgIGJvb2wgYWx3YXlzUmVzZXJ2ZVRleHR1cmVzKCkgY29uc3Qg
eyByZXR1cm4gbV9hbHdheXNSZXNlcnZlVGV4dHVyZXM7IH0KIAotICAgIGJvb2wgYWRkQW5pbWF0
aW9uKGNvbnN0IEtleWZyYW1lVmFsdWVMaXN0JiwgY29uc3QgSW50U2l6ZSYgYm94U2l6ZSwgY29u
c3QgQW5pbWF0aW9uKiwgaW50IGFuaW1hdGlvbklkLCBpbnQgZ3JvdXBJZCwgZG91YmxlIHRpbWVP
ZmZzZXQpOworICAgIGJvb2wgYWRkQW5pbWF0aW9uKFBhc3NPd25QdHI8Q0NBY3RpdmVBbmltYXRp
b24+KTsKICAgICB2b2lkIHBhdXNlQW5pbWF0aW9uKGludCBhbmltYXRpb25JZCwgZG91YmxlIHRp
bWVPZmZzZXQpOwogICAgIHZvaWQgcmVtb3ZlQW5pbWF0aW9uKGludCBhbmltYXRpb25JZCk7CiAK
ZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2Nocm9taXVtL0xp
bmtIaWdobGlnaHQuY3BwIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvY2hyb21p
dW0vTGlua0hpZ2hsaWdodC5jcHAKaW5kZXggYmNiN2IzYzM2YzdiOGUxODRjZDIwNjdkZmE1YTBh
NDUwYzViODY3OS4uYmVhMzJjMGEzNTc5YWY1NzFmYzdmMDUyYTc0ZGJkYzdmYjlkZTY3OCAxMDA2
NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvY2hyb21pdW0vTGlua0hp
Z2hsaWdodC5jcHAKKysrIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvY2hyb21p
dW0vTGlua0hpZ2hsaWdodC5jcHAKQEAgLTc2LDcgKzc2LDcgQEAgTGlua0hpZ2hsaWdodDo6TGlu
a0hpZ2hsaWdodChHcmFwaGljc0xheWVyQ2hyb21pdW0qIHBhcmVudCwgY29uc3QgUGF0aCYgcGF0
aCwgaW4KICAgICAvLyBhbmltYXRpb25JZCA9IDEgaXMgcmVzZXJ2ZWQgZm9yIHVzLgogICAgIE93
blB0cjxDQ0FjdGl2ZUFuaW1hdGlvbj4gYW5pbWF0aW9uKENDQWN0aXZlQW5pbWF0aW9uOjpjcmVh
dGUoY3VydmUucmVsZWFzZSgpLCBhbmltYXRpb25JZCwgZ3JvdXBJZCwgQ0NBY3RpdmVBbmltYXRp
b246Ok9wYWNpdHkpKTsKICAgICBhbmltYXRpb24tPnNldE5lZWRzU3luY2hyb25pemVkU3RhcnRU
aW1lKHRydWUpOwotICAgIG1fY29udGVudExheWVyLT5sYXllckFuaW1hdGlvbkNvbnRyb2xsZXIo
KS0+YWRkKGFuaW1hdGlvbi5yZWxlYXNlKCkpOworICAgIG1fY29udGVudExheWVyLT5sYXllckFu
aW1hdGlvbkNvbnRyb2xsZXIoKS0+YWRkQW5pbWF0aW9uKGFuaW1hdGlvbi5yZWxlYXNlKCkpOwog
fQogCiBMaW5rSGlnaGxpZ2h0Ojp+TGlua0hpZ2hsaWdodCgpCmRpZmYgLS1naXQgYS9Tb3VyY2Uv
V2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9jaHJvbWl1bS9jYy9DQ0FuaW1hdGlvbkN1cnZlLmgg
Yi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9jaHJvbWl1bS9jYy9DQ0FuaW1hdGlv
bkN1cnZlLmgKaW5kZXggZTIxZGU4OTY0NzU3NWJmZTY5YmVjZWUzOTgyYjI5NTJkNWUyMmMwYy4u
MGU0NThlYjJiNzk4Mzk2YWVjMGM0YzU2Mzk1OWY3Y2Y5M2MxZTkyZSAxMDA2NDQKLS0tIGEvU291
cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvY2hyb21pdW0vY2MvQ0NBbmltYXRpb25DdXJ2
ZS5oCisrKyBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2Nocm9taXVtL2NjL0ND
QW5pbWF0aW9uQ3VydmUuaApAQCAtNjUsNyArNjUsNyBAQCBjbGFzcyBDQ1RyYW5zZm9ybUFuaW1h
dGlvbkN1cnZlIDogcHVibGljIENDQW5pbWF0aW9uQ3VydmUgewogcHVibGljOgogICAgIHZpcnR1
YWwgfkNDVHJhbnNmb3JtQW5pbWF0aW9uQ3VydmUoKSB7IH0KIAotICAgIHZpcnR1YWwgV2ViS2l0
OjpXZWJUcmFuc2Zvcm1hdGlvbk1hdHJpeCBnZXRWYWx1ZShkb3VibGUgdCwgY29uc3QgSW50U2l6
ZSYgbGF5ZXJTaXplKSBjb25zdCA9IDA7CisgICAgdmlydHVhbCBXZWJLaXQ6OldlYlRyYW5zZm9y
bWF0aW9uTWF0cml4IGdldFZhbHVlKGRvdWJsZSB0KSBjb25zdCA9IDA7CiAKICAgICAvLyBQYXJ0
aWFsIENDQW5pbWF0aW9uIGltcGxlbWVudGF0aW9uLgogICAgIHZpcnR1YWwgVHlwZSB0eXBlKCkg
Y29uc3QgT1ZFUlJJREUgeyByZXR1cm4gVHJhbnNmb3JtOyB9CmRpZmYgLS1naXQgYS9Tb3VyY2Uv
V2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9jaHJvbWl1bS9jYy9DQ0tleWZyYW1lZEFuaW1hdGlv
bkN1cnZlLmNwcCBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2Nocm9taXVtL2Nj
L0NDS2V5ZnJhbWVkQW5pbWF0aW9uQ3VydmUuY3BwCmluZGV4IDRkYjM5YjY5YTAwMWZjODczZjI1
NDUzNGJkNzcyY2EwNDQ0MWFlZmYuLmJiNGQ0NzgzNGFhMjY1ZmYwYmZiYzdlZjEzODg5MDQyZDE3
OWE5ZjIgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2Nocm9t
aXVtL2NjL0NDS2V5ZnJhbWVkQW5pbWF0aW9uQ3VydmUuY3BwCisrKyBiL1NvdXJjZS9XZWJDb3Jl
L3BsYXRmb3JtL2dyYXBoaWNzL2Nocm9taXVtL2NjL0NDS2V5ZnJhbWVkQW5pbWF0aW9uQ3VydmUu
Y3BwCkBAIC0yNiwxNSArMjYsNiBAQAogCiAjaW5jbHVkZSAiY2MvQ0NLZXlmcmFtZWRBbmltYXRp
b25DdXJ2ZS5oIgogCi0jaW5jbHVkZSAiSWRlbnRpdHlUcmFuc2Zvcm1PcGVyYXRpb24uaCIKLSNp
bmNsdWRlICJNYXRyaXgzRFRyYW5zZm9ybU9wZXJhdGlvbi5oIgotI2luY2x1ZGUgIk1hdHJpeFRy
YW5zZm9ybU9wZXJhdGlvbi5oIgotI2luY2x1ZGUgIlBlcnNwZWN0aXZlVHJhbnNmb3JtT3BlcmF0
aW9uLmgiCi0jaW5jbHVkZSAiUm90YXRlVHJhbnNmb3JtT3BlcmF0aW9uLmgiCi0jaW5jbHVkZSAi
U2NhbGVUcmFuc2Zvcm1PcGVyYXRpb24uaCIKLSNpbmNsdWRlICJTa2V3VHJhbnNmb3JtT3BlcmF0
aW9uLmgiCi0jaW5jbHVkZSAiVHJhbnNsYXRlVHJhbnNmb3JtT3BlcmF0aW9uLmgiCi0KICNpbmNs
dWRlIDx3dGYvT3duUHRyLmg+CiAKIHVzaW5nIFdlYktpdDo6V2ViVHJhbnNmb3JtYXRpb25NYXRy
aXg7CkBAIC0xMTYsMTIgKzEwNywxMiBAQCBQYXNzT3duUHRyPENDRmxvYXRLZXlmcmFtZT4gQ0NG
bG9hdEtleWZyYW1lOjpjbG9uZSgpIGNvbnN0CiAgICAgcmV0dXJuIENDRmxvYXRLZXlmcmFtZTo6
Y3JlYXRlKHRpbWUoKSwgdmFsdWUoKSwgdGltaW5nRnVuY3Rpb24oKSA/IGNsb25lVGltaW5nRnVu
Y3Rpb24odGltaW5nRnVuY3Rpb24oKSkgOiBudWxscHRyKTsKIH0KIAotUGFzc093blB0cjxDQ1Ry
YW5zZm9ybUtleWZyYW1lPiBDQ1RyYW5zZm9ybUtleWZyYW1lOjpjcmVhdGUoZG91YmxlIHRpbWUs
IGNvbnN0IFRyYW5zZm9ybU9wZXJhdGlvbnMmIHZhbHVlLCBQYXNzT3duUHRyPENDVGltaW5nRnVu
Y3Rpb24+IHRpbWluZ0Z1bmN0aW9uKQorUGFzc093blB0cjxDQ1RyYW5zZm9ybUtleWZyYW1lPiBD
Q1RyYW5zZm9ybUtleWZyYW1lOjpjcmVhdGUoZG91YmxlIHRpbWUsIGNvbnN0IFdlYktpdDo6V2Vi
VHJhbnNmb3JtT3BlcmF0aW9ucyYgdmFsdWUsIFBhc3NPd25QdHI8Q0NUaW1pbmdGdW5jdGlvbj4g
dGltaW5nRnVuY3Rpb24pCiB7CiAgICAgcmV0dXJuIGFkb3B0UHRyKG5ldyBDQ1RyYW5zZm9ybUtl
eWZyYW1lKHRpbWUsIHZhbHVlLCB0aW1pbmdGdW5jdGlvbikpOwogfQogCi1DQ1RyYW5zZm9ybUtl
eWZyYW1lOjpDQ1RyYW5zZm9ybUtleWZyYW1lKGRvdWJsZSB0aW1lLCBjb25zdCBUcmFuc2Zvcm1P
cGVyYXRpb25zJiB2YWx1ZSwgUGFzc093blB0cjxDQ1RpbWluZ0Z1bmN0aW9uPiB0aW1pbmdGdW5j
dGlvbikKK0NDVHJhbnNmb3JtS2V5ZnJhbWU6OkNDVHJhbnNmb3JtS2V5ZnJhbWUoZG91YmxlIHRp
bWUsIGNvbnN0IFdlYktpdDo6V2ViVHJhbnNmb3JtT3BlcmF0aW9ucyYgdmFsdWUsIFBhc3NPd25Q
dHI8Q0NUaW1pbmdGdW5jdGlvbj4gdGltaW5nRnVuY3Rpb24pCiAgICAgOiBDQ0tleWZyYW1lKHRp
bWUsIHRpbWluZ0Z1bmN0aW9uKQogICAgICwgbV92YWx1ZSh2YWx1ZSkKIHsKQEAgLTEzMSw3OCAr
MTIyLDE0IEBAIENDVHJhbnNmb3JtS2V5ZnJhbWU6On5DQ1RyYW5zZm9ybUtleWZyYW1lKCkKIHsK
IH0KIAotY29uc3QgVHJhbnNmb3JtT3BlcmF0aW9ucyYgQ0NUcmFuc2Zvcm1LZXlmcmFtZTo6dmFs
dWUoKSBjb25zdAorY29uc3QgV2ViS2l0OjpXZWJUcmFuc2Zvcm1PcGVyYXRpb25zJiBDQ1RyYW5z
Zm9ybUtleWZyYW1lOjp2YWx1ZSgpIGNvbnN0CiB7CiAgICAgcmV0dXJuIG1fdmFsdWU7CiB9CiAK
IFBhc3NPd25QdHI8Q0NUcmFuc2Zvcm1LZXlmcmFtZT4gQ0NUcmFuc2Zvcm1LZXlmcmFtZTo6Y2xv
bmUoKSBjb25zdAogewotICAgIC8vIFdlIG5lZWQgdG8gZG8gYSBkZWVwIGNvcHkgdGhlIG1fdmFs
dWUgbWF5IGNvbnRhaW4gcmVmIHBvaW50ZXJzIHRvIFRyYW5zZm9ybU9wZXJhdGlvbiBvYmplY3Rz
LgotICAgIFRyYW5zZm9ybU9wZXJhdGlvbnMgb3BlcmF0aW9uczsKLSAgICBmb3IgKHNpemVfdCBq
ID0gMDsgaiA8IG1fdmFsdWUuc2l6ZSgpOyArK2opIHsKLSAgICAgICAgVHJhbnNmb3JtT3BlcmF0
aW9uOjpPcGVyYXRpb25UeXBlIG9wZXJhdGlvblR5cGUgPSBtX3ZhbHVlLm9wZXJhdGlvbnMoKVtq
XS0+Z2V0T3BlcmF0aW9uVHlwZSgpOwotICAgICAgICBzd2l0Y2ggKG9wZXJhdGlvblR5cGUpIHsK
LSAgICAgICAgY2FzZSBUcmFuc2Zvcm1PcGVyYXRpb246OlNDQUxFX1g6Ci0gICAgICAgIGNhc2Ug
VHJhbnNmb3JtT3BlcmF0aW9uOjpTQ0FMRV9ZOgotICAgICAgICBjYXNlIFRyYW5zZm9ybU9wZXJh
dGlvbjo6U0NBTEVfWjoKLSAgICAgICAgY2FzZSBUcmFuc2Zvcm1PcGVyYXRpb246OlNDQUxFXzNE
OgotICAgICAgICBjYXNlIFRyYW5zZm9ybU9wZXJhdGlvbjo6U0NBTEU6IHsKLSAgICAgICAgICAg
IFNjYWxlVHJhbnNmb3JtT3BlcmF0aW9uKiB0cmFuc2Zvcm0gPSBzdGF0aWNfY2FzdDxTY2FsZVRy
YW5zZm9ybU9wZXJhdGlvbio+KG1fdmFsdWUub3BlcmF0aW9ucygpW2pdLmdldCgpKTsKLSAgICAg
ICAgICAgIG9wZXJhdGlvbnMub3BlcmF0aW9ucygpLmFwcGVuZChTY2FsZVRyYW5zZm9ybU9wZXJh
dGlvbjo6Y3JlYXRlKHRyYW5zZm9ybS0+eCgpLCB0cmFuc2Zvcm0tPnkoKSwgdHJhbnNmb3JtLT56
KCksIG9wZXJhdGlvblR5cGUpKTsKLSAgICAgICAgICAgIGJyZWFrOwotICAgICAgICB9Ci0gICAg
ICAgIGNhc2UgVHJhbnNmb3JtT3BlcmF0aW9uOjpUUkFOU0xBVEVfWDoKLSAgICAgICAgY2FzZSBU
cmFuc2Zvcm1PcGVyYXRpb246OlRSQU5TTEFURV9ZOgotICAgICAgICBjYXNlIFRyYW5zZm9ybU9w
ZXJhdGlvbjo6VFJBTlNMQVRFX1o6Ci0gICAgICAgIGNhc2UgVHJhbnNmb3JtT3BlcmF0aW9uOjpU
UkFOU0xBVEVfM0Q6Ci0gICAgICAgIGNhc2UgVHJhbnNmb3JtT3BlcmF0aW9uOjpUUkFOU0xBVEU6
IHsKLSAgICAgICAgICAgIFRyYW5zbGF0ZVRyYW5zZm9ybU9wZXJhdGlvbiogdHJhbnNmb3JtID0g
c3RhdGljX2Nhc3Q8VHJhbnNsYXRlVHJhbnNmb3JtT3BlcmF0aW9uKj4obV92YWx1ZS5vcGVyYXRp
b25zKClbal0uZ2V0KCkpOwotICAgICAgICAgICAgb3BlcmF0aW9ucy5vcGVyYXRpb25zKCkuYXBw
ZW5kKFRyYW5zbGF0ZVRyYW5zZm9ybU9wZXJhdGlvbjo6Y3JlYXRlKHRyYW5zZm9ybS0+eCgpLCB0
cmFuc2Zvcm0tPnkoKSwgdHJhbnNmb3JtLT56KCksIG9wZXJhdGlvblR5cGUpKTsKLSAgICAgICAg
ICAgIGJyZWFrOwotICAgICAgICB9Ci0gICAgICAgIGNhc2UgVHJhbnNmb3JtT3BlcmF0aW9uOjpS
T1RBVEVfWDoKLSAgICAgICAgY2FzZSBUcmFuc2Zvcm1PcGVyYXRpb246OlJPVEFURV9ZOgotICAg
ICAgICBjYXNlIFRyYW5zZm9ybU9wZXJhdGlvbjo6Uk9UQVRFXzNEOgotICAgICAgICBjYXNlIFRy
YW5zZm9ybU9wZXJhdGlvbjo6Uk9UQVRFOiB7Ci0gICAgICAgICAgICBSb3RhdGVUcmFuc2Zvcm1P
cGVyYXRpb24qIHRyYW5zZm9ybSA9IHN0YXRpY19jYXN0PFJvdGF0ZVRyYW5zZm9ybU9wZXJhdGlv
bio+KG1fdmFsdWUub3BlcmF0aW9ucygpW2pdLmdldCgpKTsKLSAgICAgICAgICAgIG9wZXJhdGlv
bnMub3BlcmF0aW9ucygpLmFwcGVuZChSb3RhdGVUcmFuc2Zvcm1PcGVyYXRpb246OmNyZWF0ZSh0
cmFuc2Zvcm0tPngoKSwgdHJhbnNmb3JtLT55KCksIHRyYW5zZm9ybS0+eigpLCB0cmFuc2Zvcm0t
PmFuZ2xlKCksIG9wZXJhdGlvblR5cGUpKTsKLSAgICAgICAgICAgIGJyZWFrOwotICAgICAgICB9
Ci0gICAgICAgIGNhc2UgVHJhbnNmb3JtT3BlcmF0aW9uOjpTS0VXX1g6Ci0gICAgICAgIGNhc2Ug
VHJhbnNmb3JtT3BlcmF0aW9uOjpTS0VXX1k6Ci0gICAgICAgIGNhc2UgVHJhbnNmb3JtT3BlcmF0
aW9uOjpTS0VXOiB7Ci0gICAgICAgICAgICBTa2V3VHJhbnNmb3JtT3BlcmF0aW9uKiB0cmFuc2Zv
cm0gPSBzdGF0aWNfY2FzdDxTa2V3VHJhbnNmb3JtT3BlcmF0aW9uKj4obV92YWx1ZS5vcGVyYXRp
b25zKClbal0uZ2V0KCkpOwotICAgICAgICAgICAgb3BlcmF0aW9ucy5vcGVyYXRpb25zKCkuYXBw
ZW5kKFNrZXdUcmFuc2Zvcm1PcGVyYXRpb246OmNyZWF0ZSh0cmFuc2Zvcm0tPmFuZ2xlWCgpLCB0
cmFuc2Zvcm0tPmFuZ2xlWSgpLCBvcGVyYXRpb25UeXBlKSk7Ci0gICAgICAgICAgICBicmVhazsK
LSAgICAgICAgfQotICAgICAgICBjYXNlIFRyYW5zZm9ybU9wZXJhdGlvbjo6TUFUUklYOiB7Ci0g
ICAgICAgICAgICBNYXRyaXhUcmFuc2Zvcm1PcGVyYXRpb24qIHRyYW5zZm9ybSA9IHN0YXRpY19j
YXN0PE1hdHJpeFRyYW5zZm9ybU9wZXJhdGlvbio+KG1fdmFsdWUub3BlcmF0aW9ucygpW2pdLmdl
dCgpKTsKLSAgICAgICAgICAgIFdlYlRyYW5zZm9ybWF0aW9uTWF0cml4IG0gPSBXZWJUcmFuc2Zv
cm1hdGlvbk1hdHJpeCh0cmFuc2Zvcm0tPm1hdHJpeCgpKTsKLSAgICAgICAgICAgIG9wZXJhdGlv
bnMub3BlcmF0aW9ucygpLmFwcGVuZChNYXRyaXhUcmFuc2Zvcm1PcGVyYXRpb246OmNyZWF0ZSht
LmEoKSwgbS5iKCksIG0uYygpLCBtLmQoKSwgbS5lKCksIG0uZigpKSk7Ci0gICAgICAgICAgICBi
cmVhazsKLSAgICAgICAgfQotICAgICAgICBjYXNlIFRyYW5zZm9ybU9wZXJhdGlvbjo6TUFUUklY
XzNEOiB7Ci0gICAgICAgICAgICBNYXRyaXgzRFRyYW5zZm9ybU9wZXJhdGlvbiogdHJhbnNmb3Jt
ID0gc3RhdGljX2Nhc3Q8TWF0cml4M0RUcmFuc2Zvcm1PcGVyYXRpb24qPihtX3ZhbHVlLm9wZXJh
dGlvbnMoKVtqXS5nZXQoKSk7Ci0gICAgICAgICAgICBvcGVyYXRpb25zLm9wZXJhdGlvbnMoKS5h
cHBlbmQoTWF0cml4M0RUcmFuc2Zvcm1PcGVyYXRpb246OmNyZWF0ZSh0cmFuc2Zvcm0tPm1hdHJp
eCgpKSk7Ci0gICAgICAgICAgICBicmVhazsKLSAgICAgICAgfQotICAgICAgICBjYXNlIFRyYW5z
Zm9ybU9wZXJhdGlvbjo6UEVSU1BFQ1RJVkU6IHsKLSAgICAgICAgICAgIFBlcnNwZWN0aXZlVHJh
bnNmb3JtT3BlcmF0aW9uKiB0cmFuc2Zvcm0gPSBzdGF0aWNfY2FzdDxQZXJzcGVjdGl2ZVRyYW5z
Zm9ybU9wZXJhdGlvbio+KG1fdmFsdWUub3BlcmF0aW9ucygpW2pdLmdldCgpKTsKLSAgICAgICAg
ICAgIG9wZXJhdGlvbnMub3BlcmF0aW9ucygpLmFwcGVuZChQZXJzcGVjdGl2ZVRyYW5zZm9ybU9w
ZXJhdGlvbjo6Y3JlYXRlKHRyYW5zZm9ybS0+cGVyc3BlY3RpdmUoKSkpOwotICAgICAgICAgICAg
YnJlYWs7Ci0gICAgICAgIH0KLSAgICAgICAgY2FzZSBUcmFuc2Zvcm1PcGVyYXRpb246OklERU5U
SVRZOiB7Ci0gICAgICAgICAgICBvcGVyYXRpb25zLm9wZXJhdGlvbnMoKS5hcHBlbmQoSWRlbnRp
dHlUcmFuc2Zvcm1PcGVyYXRpb246OmNyZWF0ZSgpKTsKLSAgICAgICAgICAgIGJyZWFrOwotICAg
ICAgICB9Ci0gICAgICAgIGNhc2UgVHJhbnNmb3JtT3BlcmF0aW9uOjpOT05FOgotICAgICAgICAg
ICAgLy8gRG8gbm90aGluZy4KLSAgICAgICAgICAgIGJyZWFrOwotICAgICAgICB9IC8vIHN3aXRj
aAotICAgIH0gLy8gZm9yIGVhY2ggb3BlcmF0aW9uCi0KLSAgICByZXR1cm4gQ0NUcmFuc2Zvcm1L
ZXlmcmFtZTo6Y3JlYXRlKHRpbWUoKSwgb3BlcmF0aW9ucywgdGltaW5nRnVuY3Rpb24oKSA/IGNs
b25lVGltaW5nRnVuY3Rpb24odGltaW5nRnVuY3Rpb24oKSkgOiBudWxscHRyKTsKKyAgICByZXR1
cm4gQ0NUcmFuc2Zvcm1LZXlmcmFtZTo6Y3JlYXRlKHRpbWUoKSwgdmFsdWUoKSwgdGltaW5nRnVu
Y3Rpb24oKSA/IGNsb25lVGltaW5nRnVuY3Rpb24odGltaW5nRnVuY3Rpb24oKSkgOiBudWxscHRy
KTsKIH0KIAogUGFzc093blB0cjxDQ0tleWZyYW1lZEZsb2F0QW5pbWF0aW9uQ3VydmU+IENDS2V5
ZnJhbWVkRmxvYXRBbmltYXRpb25DdXJ2ZTo6Y3JlYXRlKCkKQEAgLTI4OSwyMCArMjE2LDEzIEBA
IFBhc3NPd25QdHI8Q0NBbmltYXRpb25DdXJ2ZT4gQ0NLZXlmcmFtZWRUcmFuc2Zvcm1BbmltYXRp
b25DdXJ2ZTo6Y2xvbmUoKSBjb25zdAogICAgIHJldHVybiB0b1JldHVybi5yZWxlYXNlKCk7CiB9
CiAKLVdlYlRyYW5zZm9ybWF0aW9uTWF0cml4IENDS2V5ZnJhbWVkVHJhbnNmb3JtQW5pbWF0aW9u
Q3VydmU6OmdldFZhbHVlKGRvdWJsZSB0LCBjb25zdCBJbnRTaXplJiBsYXllclNpemUpIGNvbnN0
CitXZWJUcmFuc2Zvcm1hdGlvbk1hdHJpeCBDQ0tleWZyYW1lZFRyYW5zZm9ybUFuaW1hdGlvbkN1
cnZlOjpnZXRWYWx1ZShkb3VibGUgdCkgY29uc3QKIHsKLSAgICAvLyBOb3RlOiBXZWJDb3JlIGRh
dGEgdHlwZSB1c2VkIGhlcmUsIGp1c3QgZm9yIG5vdy4KLSAgICBUcmFuc2Zvcm1hdGlvbk1hdHJp
eCB0cmFuc2Zvcm1NYXRyaXg7Ci0KLSAgICBpZiAodCA8PSBtX2tleWZyYW1lcy5maXJzdCgpLT50
aW1lKCkpIHsKLSAgICAgICAgbV9rZXlmcmFtZXMuZmlyc3QoKS0+dmFsdWUoKS5hcHBseShsYXll
clNpemUsIHRyYW5zZm9ybU1hdHJpeCk7Ci0gICAgICAgIHJldHVybiBXZWJUcmFuc2Zvcm1hdGlv
bk1hdHJpeCh0cmFuc2Zvcm1NYXRyaXgpOwotICAgIH0KKyAgICBpZiAodCA8PSBtX2tleWZyYW1l
cy5maXJzdCgpLT50aW1lKCkpCisgICAgICAgIHJldHVybiBtX2tleWZyYW1lcy5maXJzdCgpLT52
YWx1ZSgpLmFwcGx5KCk7CiAKLSAgICBpZiAodCA+PSBtX2tleWZyYW1lcy5sYXN0KCktPnRpbWUo
KSkgewotICAgICAgICBtX2tleWZyYW1lcy5sYXN0KCktPnZhbHVlKCkuYXBwbHkobGF5ZXJTaXpl
LCB0cmFuc2Zvcm1NYXRyaXgpOwotICAgICAgICByZXR1cm4gV2ViVHJhbnNmb3JtYXRpb25NYXRy
aXgodHJhbnNmb3JtTWF0cml4KTsKLSAgICB9CisgICAgaWYgKHQgPj0gbV9rZXlmcmFtZXMubGFz
dCgpLT50aW1lKCkpCisgICAgICAgIHJldHVybiBtX2tleWZyYW1lcy5sYXN0KCktPnZhbHVlKCku
YXBwbHkoKTsKIAogICAgIHNpemVfdCBpID0gMDsKICAgICBmb3IgKDsgaSA8IG1fa2V5ZnJhbWVz
LnNpemUoKSAtIDE7ICsraSkgewpAQCAtMzE1LDIwICsyMzUsNyBAQCBXZWJUcmFuc2Zvcm1hdGlv
bk1hdHJpeCBDQ0tleWZyYW1lZFRyYW5zZm9ybUFuaW1hdGlvbkN1cnZlOjpnZXRWYWx1ZShkb3Vi
bGUgdCwgYwogICAgIGlmIChtX2tleWZyYW1lc1tpXS0+dGltaW5nRnVuY3Rpb24oKSkKICAgICAg
ICAgcHJvZ3Jlc3MgPSBtX2tleWZyYW1lc1tpXS0+dGltaW5nRnVuY3Rpb24oKS0+Z2V0VmFsdWUo
cHJvZ3Jlc3MpOwogCi0gICAgaWYgKG1fa2V5ZnJhbWVzW2ldLT52YWx1ZSgpLm9wZXJhdGlvbnNN
YXRjaChtX2tleWZyYW1lc1tpKzFdLT52YWx1ZSgpKSkgewotICAgICAgICBmb3IgKHNpemVfdCBq
ID0gMDsgaiA8IG1fa2V5ZnJhbWVzW2krMV0tPnZhbHVlKCkuc2l6ZSgpOyArK2opCi0gICAgICAg
ICAgICBtX2tleWZyYW1lc1tpKzFdLT52YWx1ZSgpLm9wZXJhdGlvbnMoKVtqXS0+YmxlbmQobV9r
ZXlmcmFtZXNbaV0tPnZhbHVlKCkuYXQoaiksIHByb2dyZXNzKS0+YXBwbHkodHJhbnNmb3JtTWF0
cml4LCBsYXllclNpemUpOwotICAgIH0gZWxzZSB7Ci0gICAgICAgIC8vIE5vdGU6IFdlYkNvcmUg
ZGF0YSB0eXBlIHVzZWQgaGVyZSwganVzdCBmb3Igbm93LgotICAgICAgICBUcmFuc2Zvcm1hdGlv
bk1hdHJpeCBzb3VyY2U7Ci0KLSAgICAgICAgbV9rZXlmcmFtZXNbaV0tPnZhbHVlKCkuYXBwbHko
bGF5ZXJTaXplLCBzb3VyY2UpOwotICAgICAgICBtX2tleWZyYW1lc1tpKzFdLT52YWx1ZSgpLmFw
cGx5KGxheWVyU2l6ZSwgdHJhbnNmb3JtTWF0cml4KTsKLQotICAgICAgICB0cmFuc2Zvcm1NYXRy
aXguYmxlbmQoc291cmNlLCBwcm9ncmVzcyk7Ci0gICAgfQotCi0gICAgcmV0dXJuIFdlYlRyYW5z
Zm9ybWF0aW9uTWF0cml4KHRyYW5zZm9ybU1hdHJpeCk7CisgICAgcmV0dXJuIG1fa2V5ZnJhbWVz
W2krMV0tPnZhbHVlKCkuYmxlbmQobV9rZXlmcmFtZXNbaV0tPnZhbHVlKCksIHByb2dyZXNzKTsK
IH0KIAogfSAvLyBuYW1lc3BhY2UgV2ViQ29yZQpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUv
cGxhdGZvcm0vZ3JhcGhpY3MvY2hyb21pdW0vY2MvQ0NLZXlmcmFtZWRBbmltYXRpb25DdXJ2ZS5o
IGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvY2hyb21pdW0vY2MvQ0NLZXlmcmFt
ZWRBbmltYXRpb25DdXJ2ZS5oCmluZGV4IGU3MGNkYWZiNzViMjk4MDliMGVkYmUzOTBjN2FiYWM5
OTBhNWNiZDAuLjExMWNhODFjZTc1MTY3OTdlMDQ0MmZiNzI5ZWIzMGFiYWVhNTM3YmEgMTAwNjQ0
Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2Nocm9taXVtL2NjL0NDS2V5
ZnJhbWVkQW5pbWF0aW9uQ3VydmUuaAorKysgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFw
aGljcy9jaHJvbWl1bS9jYy9DQ0tleWZyYW1lZEFuaW1hdGlvbkN1cnZlLmgKQEAgLTI1LDEyICsy
NSwxNCBAQAogI2lmbmRlZiBDQ0tleWZyYW1lZEFuaW1hdGlvbkN1cnZlX2gKICNkZWZpbmUgQ0NL
ZXlmcmFtZWRBbmltYXRpb25DdXJ2ZV9oCiAKLSNpbmNsdWRlICJUcmFuc2Zvcm1PcGVyYXRpb25z
LmgiCiAjaW5jbHVkZSAiY2MvQ0NBbmltYXRpb25DdXJ2ZS5oIgogI2luY2x1ZGUgImNjL0NDVGlt
aW5nRnVuY3Rpb24uaCIKIAorI2luY2x1ZGUgPHB1YmxpYy9XZWJUcmFuc2Zvcm1PcGVyYXRpb25z
Lmg+CisKICNpbmNsdWRlIDx3dGYvT3duUHRyLmg+CiAjaW5jbHVkZSA8d3RmL1Bhc3NPd25QdHIu
aD4KKyNpbmNsdWRlIDx3dGYvVmVjdG9yLmg+CiAKIG5hbWVzcGFjZSBXZWJDb3JlIHsKIApAQCAt
NjUsMTcgKzY3LDE3IEBAIHByaXZhdGU6CiAKIGNsYXNzIENDVHJhbnNmb3JtS2V5ZnJhbWUgOiBw
dWJsaWMgQ0NLZXlmcmFtZSB7CiBwdWJsaWM6Ci0gICAgc3RhdGljIFBhc3NPd25QdHI8Q0NUcmFu
c2Zvcm1LZXlmcmFtZT4gY3JlYXRlKGRvdWJsZSB0aW1lLCBjb25zdCBUcmFuc2Zvcm1PcGVyYXRp
b25zJiB2YWx1ZSwgUGFzc093blB0cjxDQ1RpbWluZ0Z1bmN0aW9uPik7CisgICAgc3RhdGljIFBh
c3NPd25QdHI8Q0NUcmFuc2Zvcm1LZXlmcmFtZT4gY3JlYXRlKGRvdWJsZSB0aW1lLCBjb25zdCBX
ZWJLaXQ6OldlYlRyYW5zZm9ybU9wZXJhdGlvbnMmIHZhbHVlLCBQYXNzT3duUHRyPENDVGltaW5n
RnVuY3Rpb24+KTsKICAgICB2aXJ0dWFsIH5DQ1RyYW5zZm9ybUtleWZyYW1lKCk7CiAKLSAgICBj
b25zdCBUcmFuc2Zvcm1PcGVyYXRpb25zJiB2YWx1ZSgpIGNvbnN0OworICAgIGNvbnN0IFdlYktp
dDo6V2ViVHJhbnNmb3JtT3BlcmF0aW9ucyYgdmFsdWUoKSBjb25zdDsKIAogICAgIFBhc3NPd25Q
dHI8Q0NUcmFuc2Zvcm1LZXlmcmFtZT4gY2xvbmUoKSBjb25zdDsKIAogcHJpdmF0ZToKLSAgICBD
Q1RyYW5zZm9ybUtleWZyYW1lKGRvdWJsZSB0aW1lLCBjb25zdCBUcmFuc2Zvcm1PcGVyYXRpb25z
JiB2YWx1ZSwgUGFzc093blB0cjxDQ1RpbWluZ0Z1bmN0aW9uPik7CisgICAgQ0NUcmFuc2Zvcm1L
ZXlmcmFtZShkb3VibGUgdGltZSwgY29uc3QgV2ViS2l0OjpXZWJUcmFuc2Zvcm1PcGVyYXRpb25z
JiB2YWx1ZSwgUGFzc093blB0cjxDQ1RpbWluZ0Z1bmN0aW9uPik7CiAKLSAgICBUcmFuc2Zvcm1P
cGVyYXRpb25zIG1fdmFsdWU7CisgICAgV2ViS2l0OjpXZWJUcmFuc2Zvcm1PcGVyYXRpb25zIG1f
dmFsdWU7CiB9OwogCiBjbGFzcyBDQ0tleWZyYW1lZEZsb2F0QW5pbWF0aW9uQ3VydmUgOiBwdWJs
aWMgQ0NGbG9hdEFuaW1hdGlvbkN1cnZlIHsKQEAgLTExNiw3ICsxMTgsNyBAQCBwdWJsaWM6CiAg
ICAgdmlydHVhbCBQYXNzT3duUHRyPENDQW5pbWF0aW9uQ3VydmU+IGNsb25lKCkgY29uc3QgT1ZF
UlJJREU7CiAKICAgICAvLyBDQ1RyYW5zZm9ybUFuaW1hdGlvbkN1cnZlIGltcGxlbWVudGF0aW9u
Ci0gICAgdmlydHVhbCBXZWJLaXQ6OldlYlRyYW5zZm9ybWF0aW9uTWF0cml4IGdldFZhbHVlKGRv
dWJsZSB0LCBjb25zdCBJbnRTaXplJikgY29uc3QgT1ZFUlJJREU7CisgICAgdmlydHVhbCBXZWJL
aXQ6OldlYlRyYW5zZm9ybWF0aW9uTWF0cml4IGdldFZhbHVlKGRvdWJsZSB0KSBjb25zdCBPVkVS
UklERTsKIAogcHJpdmF0ZToKICAgICBDQ0tleWZyYW1lZFRyYW5zZm9ybUFuaW1hdGlvbkN1cnZl
KCk7CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9jaHJvbWl1
bS9jYy9DQ0xheWVyQW5pbWF0aW9uQ29udHJvbGxlci5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0
Zm9ybS9ncmFwaGljcy9jaHJvbWl1bS9jYy9DQ0xheWVyQW5pbWF0aW9uQ29udHJvbGxlci5jcHAK
aW5kZXggMDk2OTc5NTQ0ODNhNTc5MmYyZTQyOGQzMGYwYTJlNGZjY2NkYWZmNi4uNjY2MTlhZjkx
YTYxYzA3NzFiZTY0N2MxZTBhMzZmM2QwYmI3ZGViNSAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNv
cmUvcGxhdGZvcm0vZ3JhcGhpY3MvY2hyb21pdW0vY2MvQ0NMYXllckFuaW1hdGlvbkNvbnRyb2xs
ZXIuY3BwCisrKyBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2Nocm9taXVtL2Nj
L0NDTGF5ZXJBbmltYXRpb25Db250cm9sbGVyLmNwcApAQCAtMzcsOTQgKzM3LDYgQEAgdXNpbmcg
V2ViS2l0OjpXZWJUcmFuc2Zvcm1hdGlvbk1hdHJpeDsKIAogbmFtZXNwYWNlIFdlYkNvcmUgewog
Ci1uYW1lc3BhY2UgewotCi10ZW1wbGF0ZSA8Y2xhc3MgVmFsdWUsIGNsYXNzIEtleWZyYW1lLCBj
bGFzcyBDdXJ2ZT4KLXZvaWQgYXBwZW5kS2V5ZnJhbWUoQ3VydmUmIGN1cnZlLCBkb3VibGUga2V5
VGltZSwgY29uc3QgVmFsdWUqIHZhbHVlLCBQYXNzT3duUHRyPENDVGltaW5nRnVuY3Rpb24+IHRp
bWluZ0Z1bmN0aW9uKQotewotICAgIGN1cnZlLmFkZEtleWZyYW1lKEtleWZyYW1lOjpjcmVhdGUo
a2V5VGltZSwgdmFsdWUtPnZhbHVlKCksIHRpbWluZ0Z1bmN0aW9uKSk7Ci19Ci0KLXRlbXBsYXRl
IDw+Ci12b2lkIGFwcGVuZEtleWZyYW1lPFRyYW5zZm9ybUFuaW1hdGlvblZhbHVlLCBDQ1RyYW5z
Zm9ybUtleWZyYW1lLCBDQ0tleWZyYW1lZFRyYW5zZm9ybUFuaW1hdGlvbkN1cnZlPihDQ0tleWZy
YW1lZFRyYW5zZm9ybUFuaW1hdGlvbkN1cnZlJiBjdXJ2ZSwgZG91YmxlIGtleVRpbWUsIGNvbnN0
IFRyYW5zZm9ybUFuaW1hdGlvblZhbHVlKiB2YWx1ZSwgUGFzc093blB0cjxDQ1RpbWluZ0Z1bmN0
aW9uPiB0aW1pbmdGdW5jdGlvbikKLXsKLSAgICBjdXJ2ZS5hZGRLZXlmcmFtZShDQ1RyYW5zZm9y
bUtleWZyYW1lOjpjcmVhdGUoa2V5VGltZSwgKnZhbHVlLT52YWx1ZSgpLCB0aW1pbmdGdW5jdGlv
bikpOwotfQotCi10ZW1wbGF0ZSA8Y2xhc3MgVmFsdWUsIGNsYXNzIEtleWZyYW1lLCBjbGFzcyBD
dXJ2ZT4KLVBhc3NPd25QdHI8Q0NBY3RpdmVBbmltYXRpb24+IGNyZWF0ZUFjdGl2ZUFuaW1hdGlv
bihjb25zdCBLZXlmcmFtZVZhbHVlTGlzdCYgdmFsdWVMaXN0LCBjb25zdCBBbmltYXRpb24qIGFu
aW1hdGlvbiwgc2l6ZV90IGFuaW1hdGlvbklkLCBzaXplX3QgZ3JvdXBJZCwgZG91YmxlIHRpbWVP
ZmZzZXQsIENDQWN0aXZlQW5pbWF0aW9uOjpUYXJnZXRQcm9wZXJ0eSB0YXJnZXRQcm9wZXJ0eSkK
LXsKLSAgICBib29sIGFsdGVybmF0ZSA9IGZhbHNlOwotICAgIGJvb2wgcmV2ZXJzZSA9IGZhbHNl
OwotICAgIGlmIChhbmltYXRpb24gJiYgYW5pbWF0aW9uLT5pc0RpcmVjdGlvblNldCgpKSB7Ci0g
ICAgICAgIEFuaW1hdGlvbjo6QW5pbWF0aW9uRGlyZWN0aW9uIGRpcmVjdGlvbiA9IGFuaW1hdGlv
bi0+ZGlyZWN0aW9uKCk7Ci0gICAgICAgIGlmIChkaXJlY3Rpb24gPT0gQW5pbWF0aW9uOjpBbmlt
YXRpb25EaXJlY3Rpb25BbHRlcm5hdGUgfHwgZGlyZWN0aW9uID09IEFuaW1hdGlvbjo6QW5pbWF0
aW9uRGlyZWN0aW9uQWx0ZXJuYXRlUmV2ZXJzZSkKLSAgICAgICAgICAgIGFsdGVybmF0ZSA9IHRy
dWU7Ci0gICAgICAgIGlmIChkaXJlY3Rpb24gPT0gQW5pbWF0aW9uOjpBbmltYXRpb25EaXJlY3Rp
b25SZXZlcnNlIHx8IGRpcmVjdGlvbiA9PSBBbmltYXRpb246OkFuaW1hdGlvbkRpcmVjdGlvbkFs
dGVybmF0ZVJldmVyc2UpCi0gICAgICAgICAgICByZXZlcnNlID0gdHJ1ZTsKLSAgICB9Ci0KLSAg
ICBPd25QdHI8Q3VydmU+IGN1cnZlID0gQ3VydmU6OmNyZWF0ZSgpOwotICAgIFZlY3RvcjxLZXlm
cmFtZT4ga2V5ZnJhbWVzOwotCi0gICAgZm9yIChzaXplX3QgaSA9IDA7IGkgPCB2YWx1ZUxpc3Qu
c2l6ZSgpOyBpKyspIHsKLSAgICAgICAgc2l6ZV90IGluZGV4ID0gcmV2ZXJzZSA/IHZhbHVlTGlz
dC5zaXplKCkgLSBpIC0gMSA6IGk7Ci0KLSAgICAgICAgY29uc3QgVmFsdWUqIG9yaWdpbmFsVmFs
dWUgPSBzdGF0aWNfY2FzdDxjb25zdCBWYWx1ZSo+KHZhbHVlTGlzdC5hdChpbmRleCkpOwotCi0g
ICAgICAgIE93blB0cjxDQ1RpbWluZ0Z1bmN0aW9uPiB0aW1pbmdGdW5jdGlvbjsKLSAgICAgICAg
Y29uc3QgVGltaW5nRnVuY3Rpb24qIG9yaWdpbmFsVGltaW5nRnVuY3Rpb24gPSBvcmlnaW5hbFZh
bHVlLT50aW1pbmdGdW5jdGlvbigpOwotCi0gICAgICAgIC8vIElmIHRoZXJlIGhhc24ndCBiZWVu
IGEgdGltaW5nIGZ1bmN0aW9uIGFzc29jaWF0ZWQgd2l0aCB0aGlzIGtleWZyYW1lLCB1c2UgdGhl
Ci0gICAgICAgIC8vIGFuaW1hdGlvbidzIHRpbWluZyBmdW5jdGlvbiwgaWYgd2UgaGF2ZSBvbmUu
Ci0gICAgICAgIGlmICghb3JpZ2luYWxUaW1pbmdGdW5jdGlvbiAmJiBhbmltYXRpb24tPmlzVGlt
aW5nRnVuY3Rpb25TZXQoKSkKLSAgICAgICAgICAgIG9yaWdpbmFsVGltaW5nRnVuY3Rpb24gPSBh
bmltYXRpb24tPnRpbWluZ0Z1bmN0aW9uKCkuZ2V0KCk7Ci0KLSAgICAgICAgaWYgKG9yaWdpbmFs
VGltaW5nRnVuY3Rpb24pIHsKLSAgICAgICAgICAgIHN3aXRjaCAob3JpZ2luYWxUaW1pbmdGdW5j
dGlvbi0+dHlwZSgpKSB7Ci0gICAgICAgICAgICBjYXNlIFRpbWluZ0Z1bmN0aW9uOjpTdGVwc0Z1
bmN0aW9uOgotICAgICAgICAgICAgICAgIC8vIEZJWE1FOiBhZGQgc3VwcG9ydCBmb3Igc3RlcHMg
dGltaW5nIGZ1bmN0aW9uLgotICAgICAgICAgICAgICAgIHJldHVybiBudWxscHRyOwotICAgICAg
ICAgICAgY2FzZSBUaW1pbmdGdW5jdGlvbjo6TGluZWFyRnVuY3Rpb246Ci0gICAgICAgICAgICAg
ICAgLy8gRG9uJ3Qgc2V0IHRoZSB0aW1pbmcgZnVuY3Rpb24uIEtleWZyYW1lcyBhcmUgaW50ZXJw
b2xhdGVkIGxpbmVhcmx5IGlmIHRoZXJlIGlzIG5vIHRpbWluZyBmdW5jdGlvbi4KLSAgICAgICAg
ICAgICAgICBicmVhazsKLSAgICAgICAgICAgIGNhc2UgVGltaW5nRnVuY3Rpb246OkN1YmljQmV6
aWVyRnVuY3Rpb246Ci0gICAgICAgICAgICAgICAgY29uc3QgQ3ViaWNCZXppZXJUaW1pbmdGdW5j
dGlvbiogb3JpZ2luYWxCZXppZXJUaW1pbmdGdW5jdGlvbiA9IHN0YXRpY19jYXN0PGNvbnN0IEN1
YmljQmV6aWVyVGltaW5nRnVuY3Rpb24qPihvcmlnaW5hbFRpbWluZ0Z1bmN0aW9uKTsKLSAgICAg
ICAgICAgICAgICB0aW1pbmdGdW5jdGlvbiA9IENDQ3ViaWNCZXppZXJUaW1pbmdGdW5jdGlvbjo6
Y3JlYXRlKG9yaWdpbmFsQmV6aWVyVGltaW5nRnVuY3Rpb24tPngxKCksIG9yaWdpbmFsQmV6aWVy
VGltaW5nRnVuY3Rpb24tPnkxKCksIG9yaWdpbmFsQmV6aWVyVGltaW5nRnVuY3Rpb24tPngyKCks
IG9yaWdpbmFsQmV6aWVyVGltaW5nRnVuY3Rpb24tPnkyKCkpOwotICAgICAgICAgICAgICAgIGJy
ZWFrOwotICAgICAgICAgICAgfSAvLyBzd2l0Y2gKLSAgICAgICAgfSBlbHNlCi0gICAgICAgICAg
ICB0aW1pbmdGdW5jdGlvbiA9IENDRWFzZVRpbWluZ0Z1bmN0aW9uOjpjcmVhdGUoKTsKLQotICAg
ICAgICBkb3VibGUgZHVyYXRpb24gPSAoYW5pbWF0aW9uICYmIGFuaW1hdGlvbi0+aXNEdXJhdGlv
blNldCgpKSA/IGFuaW1hdGlvbi0+ZHVyYXRpb24oKSA6IDE7Ci0gICAgICAgIGRvdWJsZSBrZXlU
aW1lID0gb3JpZ2luYWxWYWx1ZS0+a2V5VGltZSgpICogZHVyYXRpb247Ci0gICAgICAgIGlmIChy
ZXZlcnNlKQotICAgICAgICAgICAga2V5VGltZSA9IGR1cmF0aW9uIC0ga2V5VGltZTsKLSAgICAg
ICAgYXBwZW5kS2V5ZnJhbWU8VmFsdWUsIEtleWZyYW1lLCBDdXJ2ZT4oKmN1cnZlLCBrZXlUaW1l
LCBvcmlnaW5hbFZhbHVlLCB0aW1pbmdGdW5jdGlvbi5yZWxlYXNlKCkpOwotICAgIH0KLQotICAg
IE93blB0cjxDQ0FjdGl2ZUFuaW1hdGlvbj4gYW5pbSA9IENDQWN0aXZlQW5pbWF0aW9uOjpjcmVh
dGUoY3VydmUucmVsZWFzZSgpLCBhbmltYXRpb25JZCwgZ3JvdXBJZCwgdGFyZ2V0UHJvcGVydHkp
OwotCi0gICAgQVNTRVJUKGFuaW0uZ2V0KCkpOwotCi0gICAgaWYgKGFuaW0uZ2V0KCkpIHsKLSAg
ICAgICAgaW50IGl0ZXJhdGlvbnMgPSAoYW5pbWF0aW9uICYmIGFuaW1hdGlvbi0+aXNJdGVyYXRp
b25Db3VudFNldCgpKSA/IGFuaW1hdGlvbi0+aXRlcmF0aW9uQ291bnQoKSA6IDE7Ci0gICAgICAg
IGFuaW0tPnNldEl0ZXJhdGlvbnMoaXRlcmF0aW9ucyk7Ci0gICAgICAgIGFuaW0tPnNldEFsdGVy
bmF0ZXNEaXJlY3Rpb24oYWx0ZXJuYXRlKTsKLSAgICB9Ci0KLSAgICAvLyBJbiBvcmRlciB0byBh
dm9pZCBza2V3LCB0aGUgbWFpbiB0aHJlYWQgYW5pbWF0aW9uIGNhbm5vdCB0aWNrIHVudGlsIGl0
IGhhcyByZWNlaXZlZCB0aGUgc3RhcnQgdGltZSBvZgotICAgIC8vIHRoZSBjb3JyZXNwb25kaW5n
IGltcGwgdGhyZWFkIGFuaW1hdGlvbi4KLSAgICBhbmltLT5zZXROZWVkc1N5bmNocm9uaXplZFN0
YXJ0VGltZSh0cnVlKTsKLQotICAgIC8vIElmIHRpbWVPZmZzZXQgPiAwLCB0aGVuIHRoZSBhbmlt
YXRpb24gaGFzIHN0YXJ0ZWQgaW4gdGhlIHBhc3QuCi0gICAgYW5pbS0+c2V0VGltZU9mZnNldCh0
aW1lT2Zmc2V0KTsKLQotICAgIHJldHVybiBhbmltLnJlbGVhc2UoKTsKLX0KLQotfSAvLyBuYW1l
cGFjZQotCiBDQ0xheWVyQW5pbWF0aW9uQ29udHJvbGxlcjo6Q0NMYXllckFuaW1hdGlvbkNvbnRy
b2xsZXIoQ0NMYXllckFuaW1hdGlvbkNvbnRyb2xsZXJDbGllbnQqIGNsaWVudCkKICAgICA6IG1f
Zm9yY2VTeW5jKGZhbHNlKQogICAgICwgbV9jbGllbnQoY2xpZW50KQpAQCAtMTQwLDMyICs1Miw2
IEBAIFBhc3NPd25QdHI8Q0NMYXllckFuaW1hdGlvbkNvbnRyb2xsZXI+IENDTGF5ZXJBbmltYXRp
b25Db250cm9sbGVyOjpjcmVhdGUoQ0NMYXllCiAgICAgcmV0dXJuIGFkb3B0UHRyKG5ldyBDQ0xh
eWVyQW5pbWF0aW9uQ29udHJvbGxlcihjbGllbnQpKTsKIH0KIAotYm9vbCBDQ0xheWVyQW5pbWF0
aW9uQ29udHJvbGxlcjo6YWRkQW5pbWF0aW9uKGNvbnN0IEtleWZyYW1lVmFsdWVMaXN0JiB2YWx1
ZUxpc3QsIGNvbnN0IEludFNpemUmLCBjb25zdCBBbmltYXRpb24qIGFuaW1hdGlvbiwgaW50IGFu
aW1hdGlvbklkLCBpbnQgZ3JvdXBJZCwgZG91YmxlIHRpbWVPZmZzZXQpCi17Ci0gICAgaWYgKCFh
bmltYXRpb24pCi0gICAgICAgIHJldHVybiBmYWxzZTsKLQotICAgIE93blB0cjxDQ0FjdGl2ZUFu
aW1hdGlvbj4gdG9BZGQ7Ci0gICAgaWYgKHZhbHVlTGlzdC5wcm9wZXJ0eSgpID09IEFuaW1hdGVk
UHJvcGVydHlXZWJraXRUcmFuc2Zvcm0pCi0gICAgICAgIHRvQWRkID0gY3JlYXRlQWN0aXZlQW5p
bWF0aW9uPFRyYW5zZm9ybUFuaW1hdGlvblZhbHVlLCBDQ1RyYW5zZm9ybUtleWZyYW1lLCBDQ0tl
eWZyYW1lZFRyYW5zZm9ybUFuaW1hdGlvbkN1cnZlPih2YWx1ZUxpc3QsIGFuaW1hdGlvbiwgYW5p
bWF0aW9uSWQsIGdyb3VwSWQsIHRpbWVPZmZzZXQsIENDQWN0aXZlQW5pbWF0aW9uOjpUcmFuc2Zv
cm0pOwotICAgIGVsc2UgaWYgKHZhbHVlTGlzdC5wcm9wZXJ0eSgpID09IEFuaW1hdGVkUHJvcGVy
dHlPcGFjaXR5KQotICAgICAgICB0b0FkZCA9IGNyZWF0ZUFjdGl2ZUFuaW1hdGlvbjxGbG9hdEFu
aW1hdGlvblZhbHVlLCBDQ0Zsb2F0S2V5ZnJhbWUsIENDS2V5ZnJhbWVkRmxvYXRBbmltYXRpb25D
dXJ2ZT4odmFsdWVMaXN0LCBhbmltYXRpb24sIGFuaW1hdGlvbklkLCBncm91cElkLCB0aW1lT2Zm
c2V0LCBDQ0FjdGl2ZUFuaW1hdGlvbjo6T3BhY2l0eSk7Ci0KLSAgICBpZiAodG9BZGQuZ2V0KCkp
IHsKLSAgICAgICAgLy8gUmVtb3ZlIGFueSBleGlzdGluZyBhbmltYXRpb25zIHdpdGggdGhlIHNh
bWUgYW5pbWF0aW9uIGlkIGFuZCB0YXJnZXQgcHJvcGVydHkuCi0gICAgICAgIGZvciAoc2l6ZV90
IGkgPSAwOyBpIDwgbV9hY3RpdmVBbmltYXRpb25zLnNpemUoKTspIHsKLSAgICAgICAgICAgIGlm
IChtX2FjdGl2ZUFuaW1hdGlvbnNbaV0tPmlkKCkgPT0gYW5pbWF0aW9uSWQgJiYgbV9hY3RpdmVB
bmltYXRpb25zW2ldLT50YXJnZXRQcm9wZXJ0eSgpID09IHRvQWRkLT50YXJnZXRQcm9wZXJ0eSgp
KQotICAgICAgICAgICAgICAgIG1fYWN0aXZlQW5pbWF0aW9ucy5yZW1vdmUoaSk7Ci0gICAgICAg
ICAgICBlbHNlCi0gICAgICAgICAgICAgICAgaSsrOwotICAgICAgICB9Ci0gICAgICAgIG1fYWN0
aXZlQW5pbWF0aW9ucy5hcHBlbmQodG9BZGQucmVsZWFzZSgpKTsKLSAgICAgICAgcmV0dXJuIHRy
dWU7Ci0gICAgfQotCi0gICAgcmV0dXJuIGZhbHNlOwotfQotCiB2b2lkIENDTGF5ZXJBbmltYXRp
b25Db250cm9sbGVyOjpwYXVzZUFuaW1hdGlvbihpbnQgYW5pbWF0aW9uSWQsIGRvdWJsZSB0aW1l
T2Zmc2V0KQogewogICAgIGZvciAoc2l6ZV90IGkgPSAwOyBpIDwgbV9hY3RpdmVBbmltYXRpb25z
LnNpemUoKTsgKytpKSB7CkBAIC0xODQsNiArNzAsMTYgQEAgdm9pZCBDQ0xheWVyQW5pbWF0aW9u
Q29udHJvbGxlcjo6cmVtb3ZlQW5pbWF0aW9uKGludCBhbmltYXRpb25JZCkKICAgICB9CiB9CiAK
K3ZvaWQgQ0NMYXllckFuaW1hdGlvbkNvbnRyb2xsZXI6OnJlbW92ZUFuaW1hdGlvbihpbnQgYW5p
bWF0aW9uSWQsIENDQWN0aXZlQW5pbWF0aW9uOjpUYXJnZXRQcm9wZXJ0eSB0YXJnZXRQcm9wZXJ0
eSkKK3sKKyAgICBmb3IgKHNpemVfdCBpID0gMDsgaSA8IG1fYWN0aXZlQW5pbWF0aW9ucy5zaXpl
KCk7KSB7CisgICAgICAgIGlmIChtX2FjdGl2ZUFuaW1hdGlvbnNbaV0tPmlkKCkgPT0gYW5pbWF0
aW9uSWQgJiYgbV9hY3RpdmVBbmltYXRpb25zW2ldLT50YXJnZXRQcm9wZXJ0eSgpID09IHRhcmdl
dFByb3BlcnR5KQorICAgICAgICAgICAgbV9hY3RpdmVBbmltYXRpb25zLnJlbW92ZShpKTsKKyAg
ICAgICAgZWxzZQorICAgICAgICAgICAgaSsrOworICAgIH0KK30KKwogLy8gQWNjb3JkaW5nIHRv
IHJlbmRlciBsYXllciBiYWNraW5nLCB0aGVzZSBhcmUgZm9yIHRlc3Rpbmcgb25seS4KIHZvaWQg
Q0NMYXllckFuaW1hdGlvbkNvbnRyb2xsZXI6OnN1c3BlbmRBbmltYXRpb25zKGRvdWJsZSBtb25v
dG9uaWNUaW1lKQogewpAQCAtMjI3LDcgKzEyMyw3IEBAIHZvaWQgQ0NMYXllckFuaW1hdGlvbkNv
bnRyb2xsZXI6OmFuaW1hdGUoZG91YmxlIG1vbm90b25pY1RpbWUsIENDQW5pbWF0aW9uRXZlbnRz
CiAgICAgc3RhcnRBbmltYXRpb25zV2FpdGluZ0ZvclRhcmdldEF2YWlsYWJpbGl0eShtb25vdG9u
aWNUaW1lLCBldmVudHMpOwogfQogCi12b2lkIENDTGF5ZXJBbmltYXRpb25Db250cm9sbGVyOjph
ZGQoUGFzc093blB0cjxDQ0FjdGl2ZUFuaW1hdGlvbj4gYW5pbWF0aW9uKQordm9pZCBDQ0xheWVy
QW5pbWF0aW9uQ29udHJvbGxlcjo6YWRkQW5pbWF0aW9uKFBhc3NPd25QdHI8Q0NBY3RpdmVBbmlt
YXRpb24+IGFuaW1hdGlvbikKIHsKICAgICBtX2FjdGl2ZUFuaW1hdGlvbnMuYXBwZW5kKGFuaW1h
dGlvbik7CiB9CkBAIC0yNDAsNiArMTM2LDE2IEBAIENDQWN0aXZlQW5pbWF0aW9uKiBDQ0xheWVy
QW5pbWF0aW9uQ29udHJvbGxlcjo6Z2V0QWN0aXZlQW5pbWF0aW9uKGludCBncm91cElkLCBDCiAg
ICAgcmV0dXJuIDA7CiB9CiAKK0NDQWN0aXZlQW5pbWF0aW9uKiBDQ0xheWVyQW5pbWF0aW9uQ29u
dHJvbGxlcjo6Z2V0QWN0aXZlQW5pbWF0aW9uKENDQWN0aXZlQW5pbWF0aW9uOjpUYXJnZXRQcm9w
ZXJ0eSB0YXJnZXRQcm9wZXJ0eSkgY29uc3QKK3sKKyAgICBmb3IgKHNpemVfdCBpID0gMDsgaSA8
IG1fYWN0aXZlQW5pbWF0aW9ucy5zaXplKCk7ICsraSkgeworICAgICAgICBzaXplX3QgaW5kZXgg
PSBtX2FjdGl2ZUFuaW1hdGlvbnMuc2l6ZSgpIC0gaSAtIDE7CisgICAgICAgIGlmIChtX2FjdGl2
ZUFuaW1hdGlvbnNbaW5kZXhdLT50YXJnZXRQcm9wZXJ0eSgpID09IHRhcmdldFByb3BlcnR5KQor
ICAgICAgICAgICAgcmV0dXJuIG1fYWN0aXZlQW5pbWF0aW9uc1tpbmRleF0uZ2V0KCk7CisgICAg
fQorICAgIHJldHVybiAwOworfQorCiBib29sIENDTGF5ZXJBbmltYXRpb25Db250cm9sbGVyOjpo
YXNBY3RpdmVBbmltYXRpb24oKSBjb25zdAogewogICAgIGZvciAoc2l6ZV90IGkgPSAwOyBpIDwg
bV9hY3RpdmVBbmltYXRpb25zLnNpemUoKTsgKytpKSB7CkBAIC0yOTQsNyArMjAwLDcgQEAgdm9p
ZCBDQ0xheWVyQW5pbWF0aW9uQ29udHJvbGxlcjo6cHVzaE5ld0FuaW1hdGlvbnNUb0ltcGxUaHJl
YWQoQ0NMYXllckFuaW1hdGlvbkMKICAgICAgICAgLy8gVGhlIG5ldyBhbmltYXRpb24gc2hvdWxk
IGJlIHNldCB0byBydW4gYXMgc29vbiBhcyBwb3NzaWJsZS4KICAgICAgICAgdG9BZGQtPnNldFJ1
blN0YXRlKENDQWN0aXZlQW5pbWF0aW9uOjpXYWl0aW5nRm9yVGFyZ2V0QXZhaWxhYmlsaXR5LCAw
KTsKICAgICAgICAgdG9BZGQtPnNldFN0YXJ0VGltZSgwKTsKLSAgICAgICAgY29udHJvbGxlcklt
cGwtPmFkZCh0b0FkZC5yZWxlYXNlKCkpOworICAgICAgICBjb250cm9sbGVySW1wbC0+YWRkQW5p
bWF0aW9uKHRvQWRkLnJlbGVhc2UoKSk7CiAgICAgfQogfQogCkBAIC00NjEsNyArMzY3LDcgQEAg
dm9pZCBDQ0xheWVyQW5pbWF0aW9uQ29udHJvbGxlcjo6cmVwbGFjZUltcGxUaHJlYWRBbmltYXRp
b25zKENDTGF5ZXJBbmltYXRpb25Db24KICAgICAgICAgICAgIHRvQWRkLT5zZXRSdW5TdGF0ZShD
Q0FjdGl2ZUFuaW1hdGlvbjo6V2FpdGluZ0ZvclRhcmdldEF2YWlsYWJpbGl0eSwgMCk7CiAgICAg
ICAgICAgICB0b0FkZC0+c2V0U3RhcnRUaW1lKDApOwogICAgICAgICB9Ci0gICAgICAgIGNvbnRy
b2xsZXJJbXBsLT5hZGQodG9BZGQucmVsZWFzZSgpKTsKKyAgICAgICAgY29udHJvbGxlckltcGwt
PmFkZEFuaW1hdGlvbih0b0FkZC5yZWxlYXNlKCkpOwogICAgIH0KIH0KIApAQCAtNDgwLDcgKzM4
Niw3IEBAIHZvaWQgQ0NMYXllckFuaW1hdGlvbkNvbnRyb2xsZXI6OnRpY2tBbmltYXRpb25zKGRv
dWJsZSBtb25vdG9uaWNUaW1lKQogCiAgICAgICAgICAgICBjYXNlIENDQWN0aXZlQW5pbWF0aW9u
OjpUcmFuc2Zvcm06IHsKICAgICAgICAgICAgICAgICBjb25zdCBDQ1RyYW5zZm9ybUFuaW1hdGlv
bkN1cnZlKiB0cmFuc2Zvcm1BbmltYXRpb25DdXJ2ZSA9IG1fYWN0aXZlQW5pbWF0aW9uc1tpXS0+
Y3VydmUoKS0+dG9UcmFuc2Zvcm1BbmltYXRpb25DdXJ2ZSgpOwotICAgICAgICAgICAgICAgIGNv
bnN0IFdlYlRyYW5zZm9ybWF0aW9uTWF0cml4IG1hdHJpeCA9IHRyYW5zZm9ybUFuaW1hdGlvbkN1
cnZlLT5nZXRWYWx1ZSh0cmltbWVkLCBtX2NsaWVudC0+Ym91bmRzKCkpOworICAgICAgICAgICAg
ICAgIGNvbnN0IFdlYlRyYW5zZm9ybWF0aW9uTWF0cml4IG1hdHJpeCA9IHRyYW5zZm9ybUFuaW1h
dGlvbkN1cnZlLT5nZXRWYWx1ZSh0cmltbWVkKTsKICAgICAgICAgICAgICAgICBpZiAobV9hY3Rp
dmVBbmltYXRpb25zW2ldLT5pc0ZpbmlzaGVkQXQobW9ub3RvbmljVGltZSkpCiAgICAgICAgICAg
ICAgICAgICAgIG1fYWN0aXZlQW5pbWF0aW9uc1tpXS0+c2V0UnVuU3RhdGUoQ0NBY3RpdmVBbmlt
YXRpb246OkZpbmlzaGVkLCBtb25vdG9uaWNUaW1lKTsKIApkaWZmIC0tZ2l0IGEvU291cmNlL1dl
YkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvY2hyb21pdW0vY2MvQ0NMYXllckFuaW1hdGlvbkNvbnRy
b2xsZXIuaCBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2Nocm9taXVtL2NjL0ND
TGF5ZXJBbmltYXRpb25Db250cm9sbGVyLmgKaW5kZXggYzRjOTE1OGIyYzg3Y2ZlNDZkZmMxNjJk
MDg3YTExZmRmZmI4OTI0OC4uMmZjMzlkODEzZTE4ZTYwMDk5ODA0NzdjNDVlNzdmZTgzNDk2M2Ex
YyAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvY2hyb21pdW0v
Y2MvQ0NMYXllckFuaW1hdGlvbkNvbnRyb2xsZXIuaAorKysgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0
Zm9ybS9ncmFwaGljcy9jaHJvbWl1bS9jYy9DQ0xheWVyQW5pbWF0aW9uQ29udHJvbGxlci5oCkBA
IC01NCw3ICs1NCw2IEBAIHB1YmxpYzoKICAgICB2aXJ0dWFsIGZsb2F0IG9wYWNpdHkoKSBjb25z
dCA9IDA7CiAgICAgdmlydHVhbCB2b2lkIHNldFRyYW5zZm9ybUZyb21BbmltYXRpb24oY29uc3Qg
V2ViS2l0OjpXZWJUcmFuc2Zvcm1hdGlvbk1hdHJpeCYpID0gMDsKICAgICB2aXJ0dWFsIGNvbnN0
IFdlYktpdDo6V2ViVHJhbnNmb3JtYXRpb25NYXRyaXgmIHRyYW5zZm9ybSgpIGNvbnN0ID0gMDsK
LSAgICB2aXJ0dWFsIGNvbnN0IEludFNpemUmIGJvdW5kcygpIGNvbnN0ID0gMDsKIH07CiAKIGNs
YXNzIENDTGF5ZXJBbmltYXRpb25Db250cm9sbGVyIHsKQEAgLTY1LDkgKzY0LDEwIEBAIHB1Ymxp
YzoKICAgICB2aXJ0dWFsIH5DQ0xheWVyQW5pbWF0aW9uQ29udHJvbGxlcigpOwogCiAgICAgLy8g
VGhlc2UgbWV0aG9kcyBhcmUgdmlydHVhbCBmb3IgdGVzdGluZy4KLSAgICB2aXJ0dWFsIGJvb2wg
YWRkQW5pbWF0aW9uKGNvbnN0IEtleWZyYW1lVmFsdWVMaXN0JiwgY29uc3QgSW50U2l6ZSYgYm94
U2l6ZSwgY29uc3QgQW5pbWF0aW9uKiwgaW50IGFuaW1hdGlvbklkLCBpbnQgZ3JvdXBJZCwgZG91
YmxlIHRpbWVPZmZzZXQpOworICAgIHZpcnR1YWwgdm9pZCBhZGRBbmltYXRpb24oUGFzc093blB0
cjxDQ0FjdGl2ZUFuaW1hdGlvbj4pOwogICAgIHZpcnR1YWwgdm9pZCBwYXVzZUFuaW1hdGlvbihp
bnQgYW5pbWF0aW9uSWQsIGRvdWJsZSB0aW1lT2Zmc2V0KTsKICAgICB2aXJ0dWFsIHZvaWQgcmVt
b3ZlQW5pbWF0aW9uKGludCBhbmltYXRpb25JZCk7CisgICAgdmlydHVhbCB2b2lkIHJlbW92ZUFu
aW1hdGlvbihpbnQgYW5pbWF0aW9uSWQsIENDQWN0aXZlQW5pbWF0aW9uOjpUYXJnZXRQcm9wZXJ0
eSk7CiAgICAgdmlydHVhbCB2b2lkIHN1c3BlbmRBbmltYXRpb25zKGRvdWJsZSBtb25vdG9uaWNU
aW1lKTsKICAgICB2aXJ0dWFsIHZvaWQgcmVzdW1lQW5pbWF0aW9ucyhkb3VibGUgbW9ub3Rvbmlj
VGltZSk7CiAKQEAgLTc3LDEyICs3NywxNCBAQCBwdWJsaWM6CiAKICAgICB2b2lkIGFuaW1hdGUo
ZG91YmxlIG1vbm90b25pY1RpbWUsIENDQW5pbWF0aW9uRXZlbnRzVmVjdG9yKik7CiAKLSAgICB2
b2lkIGFkZChQYXNzT3duUHRyPENDQWN0aXZlQW5pbWF0aW9uPik7Ci0KLSAgICAvLyBSZXR1cm5z
IHRoZSBhY3RpdmUgYW5pbWF0aW9uIGluIHRoZSBnaXZlbiBncm91cCwgYW5pbWF0aW5nIHRoZSBn
aXZlbiBwcm9wZXJ0eSBpZiBzdWNoIGFuCisgICAgLy8gUmV0dXJucyB0aGUgYWN0aXZlIGFuaW1h
dGlvbiBpbiB0aGUgZ2l2ZW4gZ3JvdXAsIGFuaW1hdGluZyB0aGUgZ2l2ZW4gcHJvcGVydHksIGlm
IHN1Y2ggYW4KICAgICAvLyBhbmltYXRpb24gZXhpc3RzLgogICAgIENDQWN0aXZlQW5pbWF0aW9u
KiBnZXRBY3RpdmVBbmltYXRpb24oaW50IGdyb3VwSWQsIENDQWN0aXZlQW5pbWF0aW9uOjpUYXJn
ZXRQcm9wZXJ0eSkgY29uc3Q7CiAKKyAgICAvLyBSZXR1cm5zIHRoZSBhY3RpdmUgYW5pbWF0aW9u
IGFuaW1hdGluZyB0aGUgZ2l2ZW4gcHJvcGVydHkgdGhhdCBpcyBlaXRoZXIgcnVubmluZywgb3Ig
aXMKKyAgICAvLyBuZXh0IHRvIHJ1biwgaWYgc3VjaCBhbiBhbmltYXRpb24gZXhpc3RzLgorICAg
IENDQWN0aXZlQW5pbWF0aW9uKiBnZXRBY3RpdmVBbmltYXRpb24oQ0NBY3RpdmVBbmltYXRpb246
OlRhcmdldFByb3BlcnR5KSBjb25zdDsKKwogICAgIC8vIFJldHVybnMgdHJ1ZSBpZiB0aGVyZSBh
cmUgYW55IGFuaW1hdGlvbnMgdGhhdCBoYXZlIG5laXRoZXIgZmluaXNoZWQgbm9yIGFib3J0ZWQu
CiAgICAgYm9vbCBoYXNBY3RpdmVBbmltYXRpb24oKSBjb25zdDsKIApkaWZmIC0tZ2l0IGEvU291
cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvY2hyb21pdW0vY2MvQ0NMYXllckltcGwuaCBi
L1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2Nocm9taXVtL2NjL0NDTGF5ZXJJbXBs
LmgKaW5kZXggZmQ0ZmFjYWE0MGNiYTE1ZGY2MjlhMWIyNGRhMzJjMmZhNWIzNzQ0ZC4uZjAzYzVj
M2VhMzFkOWJiNDcyNTAxOTE2MzM5OTVhNDBhOTBlZWRkZCAxMDA2NDQKLS0tIGEvU291cmNlL1dl
YkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvY2hyb21pdW0vY2MvQ0NMYXllckltcGwuaAorKysgYi9T
b3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9jaHJvbWl1bS9jYy9DQ0xheWVySW1wbC5o
CkBAIC02NSw3ICs2NSw2IEBAIHB1YmxpYzoKICAgICB2aXJ0dWFsIGZsb2F0IG9wYWNpdHkoKSBj
b25zdCBPVkVSUklERSB7IHJldHVybiBtX29wYWNpdHk7IH0KICAgICB2aXJ0dWFsIHZvaWQgc2V0
VHJhbnNmb3JtRnJvbUFuaW1hdGlvbihjb25zdCBXZWJLaXQ6OldlYlRyYW5zZm9ybWF0aW9uTWF0
cml4JikgT1ZFUlJJREU7CiAgICAgdmlydHVhbCBjb25zdCBXZWJLaXQ6OldlYlRyYW5zZm9ybWF0
aW9uTWF0cml4JiB0cmFuc2Zvcm0oKSBjb25zdCBPVkVSUklERSB7IHJldHVybiBtX3RyYW5zZm9y
bTsgfQotICAgIHZpcnR1YWwgY29uc3QgSW50U2l6ZSYgYm91bmRzKCkgY29uc3QgT1ZFUlJJREUg
eyByZXR1cm4gbV9ib3VuZHM7IH0KIAogICAgIC8vIFRyZWUgc3RydWN0dXJlLgogICAgIENDTGF5
ZXJJbXBsKiBwYXJlbnQoKSBjb25zdCB7IHJldHVybiBtX3BhcmVudDsgfQpAQCAtMTc2LDYgKzE3
NSw3IEBAIHB1YmxpYzoKICAgICB2b2lkIHNldFRhcmdldFJlbmRlclN1cmZhY2UoQ0NSZW5kZXJT
dXJmYWNlKiBzdXJmYWNlKSB7IG1fdGFyZ2V0UmVuZGVyU3VyZmFjZSA9IHN1cmZhY2U7IH0KIAog
ICAgIHZvaWQgc2V0Qm91bmRzKGNvbnN0IEludFNpemUmKTsKKyAgICBjb25zdCBJbnRTaXplJiBi
b3VuZHMoKSBjb25zdCB7IHJldHVybiBtX2JvdW5kczsgfQogCiAgICAgY29uc3QgSW50U2l6ZSYg
Y29udGVudEJvdW5kcygpIGNvbnN0IHsgcmV0dXJuIG1fY29udGVudEJvdW5kczsgfQogICAgIHZv
aWQgc2V0Q29udGVudEJvdW5kcyhjb25zdCBJbnRTaXplJik7CmRpZmYgLS1naXQgYS9Tb3VyY2Uv
V2ViS2l0L2Nocm9taXVtL3Rlc3RzL0NDQW5pbWF0aW9uVGVzdENvbW1vbi5jcHAgYi9Tb3VyY2Uv
V2ViS2l0L2Nocm9taXVtL3Rlc3RzL0NDQW5pbWF0aW9uVGVzdENvbW1vbi5jcHAKaW5kZXggMGU4
YzFhNDAxZjZjOGJiZGUyMjMyMzFkMmM5M2ZkOTg0YjM1MjEzYS4uODU0NTk1MzgwNTNjNmE5ODYw
YWYwZjc5NDgwZmNlNmY2M2Q3YzNjMyAxMDA2NDQKLS0tIGEvU291cmNlL1dlYktpdC9jaHJvbWl1
bS90ZXN0cy9DQ0FuaW1hdGlvblRlc3RDb21tb24uY3BwCisrKyBiL1NvdXJjZS9XZWJLaXQvY2hy
b21pdW0vdGVzdHMvQ0NBbmltYXRpb25UZXN0Q29tbW9uLmNwcApAQCAtMjksOSArMjksMTIgQEAK
ICNpbmNsdWRlICJHcmFwaGljc0xheWVyLmgiCiAjaW5jbHVkZSAiTGF5ZXJDaHJvbWl1bS5oIgog
I2luY2x1ZGUgIlRyYW5zbGF0ZVRyYW5zZm9ybU9wZXJhdGlvbi5oIgorI2luY2x1ZGUgImNjL0ND
S2V5ZnJhbWVkQW5pbWF0aW9uQ3VydmUuaCIKICNpbmNsdWRlICJjYy9DQ0xheWVyQW5pbWF0aW9u
Q29udHJvbGxlci5oIgogI2luY2x1ZGUgImNjL0NDTGF5ZXJJbXBsLmgiCiAKKyNpbmNsdWRlIDxw
dWJsaWMvV2ViVHJhbnNmb3JtT3BlcmF0aW9ucy5oPgorCiB1c2luZyBuYW1lc3BhY2UgV2ViQ29y
ZTsKIAogbmFtZXNwYWNlIHsKQEAgLTM5LDM4ICs0MiwzOCBAQCBuYW1lc3BhY2UgewogdGVtcGxh
dGUgPGNsYXNzIFRhcmdldD4KIHZvaWQgYWRkT3BhY2l0eVRyYW5zaXRpb24oVGFyZ2V0JiB0YXJn
ZXQsIGRvdWJsZSBkdXJhdGlvbiwgZmxvYXQgc3RhcnRPcGFjaXR5LCBmbG9hdCBlbmRPcGFjaXR5
LCBib29sIHVzZVRpbWluZ0Z1bmN0aW9uKQogewotICAgIFdlYkNvcmU6OktleWZyYW1lVmFsdWVM
aXN0IHZhbHVlcyhBbmltYXRlZFByb3BlcnR5T3BhY2l0eSk7Ci0gICAgaWYgKGR1cmF0aW9uID4g
MCkKLSAgICAgICAgdmFsdWVzLmluc2VydChuZXcgRmxvYXRBbmltYXRpb25WYWx1ZSgwLCBzdGFy
dE9wYWNpdHkpKTsKLSAgICB2YWx1ZXMuaW5zZXJ0KG5ldyBGbG9hdEFuaW1hdGlvblZhbHVlKGR1
cmF0aW9uLCBlbmRPcGFjaXR5KSk7CisgICAgT3duUHRyPENDS2V5ZnJhbWVkRmxvYXRBbmltYXRp
b25DdXJ2ZT4gY3VydmUoQ0NLZXlmcmFtZWRGbG9hdEFuaW1hdGlvbkN1cnZlOjpjcmVhdGUoKSk7
CiAKLSAgICBSZWZQdHI8QW5pbWF0aW9uPiBhbmltYXRpb24gPSBBbmltYXRpb246OmNyZWF0ZSgp
OwotICAgIGFuaW1hdGlvbi0+c2V0RHVyYXRpb24oZHVyYXRpb24pOwotCi0gICAgaWYgKHVzZVRp
bWluZ0Z1bmN0aW9uKQotICAgICAgICBhbmltYXRpb24tPnNldFRpbWluZ0Z1bmN0aW9uKExpbmVh
clRpbWluZ0Z1bmN0aW9uOjpjcmVhdGUoKSk7CisgICAgaWYgKGR1cmF0aW9uID4gMCkKKyAgICAg
ICAgY3VydmUtPmFkZEtleWZyYW1lKENDRmxvYXRLZXlmcmFtZTo6Y3JlYXRlKDAsIHN0YXJ0T3Bh
Y2l0eSwgdXNlVGltaW5nRnVuY3Rpb24gPyBudWxscHRyIDogQ0NFYXNlVGltaW5nRnVuY3Rpb246
OmNyZWF0ZSgpKSk7CisgICAgY3VydmUtPmFkZEtleWZyYW1lKENDRmxvYXRLZXlmcmFtZTo6Y3Jl
YXRlKGR1cmF0aW9uLCBlbmRPcGFjaXR5LCBudWxscHRyKSk7CiAKLSAgICBJbnRTaXplIGJveFNp
emU7CisgICAgT3duUHRyPENDQWN0aXZlQW5pbWF0aW9uPiBhbmltYXRpb24oQ0NBY3RpdmVBbmlt
YXRpb246OmNyZWF0ZShjdXJ2ZS5yZWxlYXNlKCksIDAsIDAsIENDQWN0aXZlQW5pbWF0aW9uOjpP
cGFjaXR5KSk7CisgICAgYW5pbWF0aW9uLT5zZXROZWVkc1N5bmNocm9uaXplZFN0YXJ0VGltZSh0
cnVlKTsKIAotICAgIHRhcmdldC5hZGRBbmltYXRpb24odmFsdWVzLCBib3hTaXplLCBhbmltYXRp
b24uZ2V0KCksIDAsIDAsIDApOworICAgIHRhcmdldC5hZGRBbmltYXRpb24oYW5pbWF0aW9uLnJl
bGVhc2UoKSk7CiB9CiAKIHRlbXBsYXRlIDxjbGFzcyBUYXJnZXQ+CiB2b2lkIGFkZEFuaW1hdGVk
VHJhbnNmb3JtKFRhcmdldCYgdGFyZ2V0LCBkb3VibGUgZHVyYXRpb24sIGludCBkZWx0YVgsIGlu
dCBkZWx0YVkpCiB7CiAgICAgc3RhdGljIGludCBpZCA9IDA7Ci0gICAgV2ViQ29yZTo6S2V5ZnJh
bWVWYWx1ZUxpc3QgdmFsdWVzKEFuaW1hdGVkUHJvcGVydHlXZWJraXRUcmFuc2Zvcm0pOworICAg
IE93blB0cjxDQ0tleWZyYW1lZFRyYW5zZm9ybUFuaW1hdGlvbkN1cnZlPiBjdXJ2ZShDQ0tleWZy
YW1lZFRyYW5zZm9ybUFuaW1hdGlvbkN1cnZlOjpjcmVhdGUoKSk7CiAKLSAgICBUcmFuc2Zvcm1P
cGVyYXRpb25zIG9wZXJhdGlvbnM7Ci0gICAgb3BlcmF0aW9ucy5vcGVyYXRpb25zKCkuYXBwZW5k
KFRyYW5zbGF0ZVRyYW5zZm9ybU9wZXJhdGlvbjo6Y3JlYXRlKExlbmd0aChkZWx0YVgsIFdlYkNv
cmU6OkZpeGVkKSwgTGVuZ3RoKGRlbHRhWSwgV2ViQ29yZTo6Rml4ZWQpLCBUcmFuc2Zvcm1PcGVy
YXRpb246OlRSQU5TTEFURV9YKSk7Ci0gICAgdmFsdWVzLmluc2VydChuZXcgVHJhbnNmb3JtQW5p
bWF0aW9uVmFsdWUoMCwgJm9wZXJhdGlvbnMpKTsKKyAgICBpZiAoZHVyYXRpb24gPiAwKSB7Cisg
ICAgICAgIFdlYktpdDo6V2ViVHJhbnNmb3JtT3BlcmF0aW9ucyBzdGFydE9wZXJhdGlvbnM7Cisg
ICAgICAgIHN0YXJ0T3BlcmF0aW9ucy5hcHBlbmRUcmFuc2xhdGUoZGVsdGFYLCBkZWx0YVksIDAp
OworICAgICAgICBjdXJ2ZS0+YWRkS2V5ZnJhbWUoQ0NUcmFuc2Zvcm1LZXlmcmFtZTo6Y3JlYXRl
KDAsIHN0YXJ0T3BlcmF0aW9ucywgbnVsbHB0cikpOworICAgIH0KIAotICAgIFJlZlB0cjxBbmlt
YXRpb24+IGFuaW1hdGlvbiA9IEFuaW1hdGlvbjo6Y3JlYXRlKCk7Ci0gICAgYW5pbWF0aW9uLT5z
ZXREdXJhdGlvbihkdXJhdGlvbik7CisgICAgV2ViS2l0OjpXZWJUcmFuc2Zvcm1PcGVyYXRpb25z
IG9wZXJhdGlvbnM7CisgICAgb3BlcmF0aW9ucy5hcHBlbmRUcmFuc2xhdGUoZGVsdGFYLCBkZWx0
YVksIDApOworICAgIGN1cnZlLT5hZGRLZXlmcmFtZShDQ1RyYW5zZm9ybUtleWZyYW1lOjpjcmVh
dGUoZHVyYXRpb24sIG9wZXJhdGlvbnMsIG51bGxwdHIpKTsKIAotICAgIEludFNpemUgYm94U2l6
ZTsKKyAgICBPd25QdHI8Q0NBY3RpdmVBbmltYXRpb24+IGFuaW1hdGlvbihDQ0FjdGl2ZUFuaW1h
dGlvbjo6Y3JlYXRlKGN1cnZlLnJlbGVhc2UoKSwgaWQrKywgMCwgQ0NBY3RpdmVBbmltYXRpb246
OlRyYW5zZm9ybSkpOworICAgIGFuaW1hdGlvbi0+c2V0TmVlZHNTeW5jaHJvbml6ZWRTdGFydFRp
bWUodHJ1ZSk7CiAKLSAgICB0YXJnZXQuYWRkQW5pbWF0aW9uKHZhbHVlcywgYm94U2l6ZSwgYW5p
bWF0aW9uLmdldCgpLCArK2lkLCAwLCAwKTsKKyAgICB0YXJnZXQuYWRkQW5pbWF0aW9uKGFuaW1h
dGlvbi5yZWxlYXNlKCkpOwogfQogCiB9IC8vIG5hbWVzcGFjZQpAQCAtOTksNyArMTAyLDcgQEAg
RmFrZVRyYW5zZm9ybVRyYW5zaXRpb246On5GYWtlVHJhbnNmb3JtVHJhbnNpdGlvbigpCiB7CiB9
CiAKLVdlYktpdDo6V2ViVHJhbnNmb3JtYXRpb25NYXRyaXggRmFrZVRyYW5zZm9ybVRyYW5zaXRp
b246OmdldFZhbHVlKGRvdWJsZSB0aW1lLCBjb25zdCBXZWJDb3JlOjpJbnRTaXplJiBzaXplKSBj
b25zdAorV2ViS2l0OjpXZWJUcmFuc2Zvcm1hdGlvbk1hdHJpeCBGYWtlVHJhbnNmb3JtVHJhbnNp
dGlvbjo6Z2V0VmFsdWUoZG91YmxlIHRpbWUpIGNvbnN0CiB7CiAgICAgcmV0dXJuIFdlYktpdDo6
V2ViVHJhbnNmb3JtYXRpb25NYXRyaXgoKTsKIH0KZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJLaXQv
Y2hyb21pdW0vdGVzdHMvQ0NBbmltYXRpb25UZXN0Q29tbW9uLmggYi9Tb3VyY2UvV2ViS2l0L2No
cm9taXVtL3Rlc3RzL0NDQW5pbWF0aW9uVGVzdENvbW1vbi5oCmluZGV4IDQzODQxMTdkMzljYWI3
MjJmODQ1NGVkNTc3NmU1MDIyOTkxNjBmN2UuLjRiYmQ2MDExMjIyYTEzMzk5NDcyMThjN2IzYjdm
NzQ2NDdjZmViNTEgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJLaXQvY2hyb21pdW0vdGVzdHMvQ0NB
bmltYXRpb25UZXN0Q29tbW9uLmgKKysrIGIvU291cmNlL1dlYktpdC9jaHJvbWl1bS90ZXN0cy9D
Q0FuaW1hdGlvblRlc3RDb21tb24uaApAQCAtNTQsNyArNTQsNyBAQCBwdWJsaWM6CiAgICAgdmly
dHVhbCB+RmFrZVRyYW5zZm9ybVRyYW5zaXRpb24oKTsKIAogICAgIHZpcnR1YWwgZG91YmxlIGR1
cmF0aW9uKCkgY29uc3QgT1ZFUlJJREUgeyByZXR1cm4gbV9kdXJhdGlvbjsgfQotICAgIHZpcnR1
YWwgV2ViS2l0OjpXZWJUcmFuc2Zvcm1hdGlvbk1hdHJpeCBnZXRWYWx1ZShkb3VibGUgdGltZSwg
Y29uc3QgV2ViQ29yZTo6SW50U2l6ZSYpIGNvbnN0IE9WRVJSSURFOworICAgIHZpcnR1YWwgV2Vi
S2l0OjpXZWJUcmFuc2Zvcm1hdGlvbk1hdHJpeCBnZXRWYWx1ZShkb3VibGUgdGltZSkgY29uc3Qg
T1ZFUlJJREU7CiAKICAgICB2aXJ0dWFsIFBhc3NPd25QdHI8V2ViQ29yZTo6Q0NBbmltYXRpb25D
dXJ2ZT4gY2xvbmUoKSBjb25zdCBPVkVSUklERTsKIApAQCAtODksMTIgKzg5LDEwIEBAIHB1Ymxp
YzoKICAgICB2aXJ0dWFsIGZsb2F0IG9wYWNpdHkoKSBjb25zdCBPVkVSUklERSB7IHJldHVybiBt
X29wYWNpdHk7IH0KICAgICB2aXJ0dWFsIHZvaWQgc2V0VHJhbnNmb3JtRnJvbUFuaW1hdGlvbihj
b25zdCBXZWJLaXQ6OldlYlRyYW5zZm9ybWF0aW9uTWF0cml4JiB0cmFuc2Zvcm0pIE9WRVJSSURF
IHsgbV90cmFuc2Zvcm0gPSB0cmFuc2Zvcm07IH0KICAgICB2aXJ0dWFsIGNvbnN0IFdlYktpdDo6
V2ViVHJhbnNmb3JtYXRpb25NYXRyaXgmIHRyYW5zZm9ybSgpIGNvbnN0IE9WRVJSSURFIHsgcmV0
dXJuIG1fdHJhbnNmb3JtOyB9Ci0gICAgdmlydHVhbCBjb25zdCBXZWJDb3JlOjpJbnRTaXplJiBi
b3VuZHMoKSBjb25zdCBPVkVSUklERSB7IHJldHVybiBtX2JvdW5kczsgfQogCiBwcml2YXRlOgog
ICAgIGZsb2F0IG1fb3BhY2l0eTsKICAgICBXZWJLaXQ6OldlYlRyYW5zZm9ybWF0aW9uTWF0cml4
IG1fdHJhbnNmb3JtOwotICAgIFdlYkNvcmU6OkludFNpemUgbV9ib3VuZHM7CiB9OwogCiB2b2lk
IGFkZE9wYWNpdHlUcmFuc2l0aW9uVG9Db250cm9sbGVyKFdlYkNvcmU6OkNDTGF5ZXJBbmltYXRp
b25Db250cm9sbGVyJiwgZG91YmxlIGR1cmF0aW9uLCBmbG9hdCBzdGFydE9wYWNpdHksIGZsb2F0
IGVuZE9wYWNpdHksIGJvb2wgdXNlVGltaW5nRnVuY3Rpb24pOwpkaWZmIC0tZ2l0IGEvU291cmNl
L1dlYktpdC9jaHJvbWl1bS90ZXN0cy9DQ0tleWZyYW1lZEFuaW1hdGlvbkN1cnZlVGVzdC5jcHAg
Yi9Tb3VyY2UvV2ViS2l0L2Nocm9taXVtL3Rlc3RzL0NDS2V5ZnJhbWVkQW5pbWF0aW9uQ3VydmVU
ZXN0LmNwcAppbmRleCBhZDFhZTc0Y2ExMjU3MzY0YzljMTUzMGU0N2UyMGI2OTQ3ZjUwYmJkLi5l
YjZiYjAzNjNkYTg1NWVmYzU3M2U4MDk0NjhiYTcyOWU0OGFjZDRmIDEwMDY0NAotLS0gYS9Tb3Vy
Y2UvV2ViS2l0L2Nocm9taXVtL3Rlc3RzL0NDS2V5ZnJhbWVkQW5pbWF0aW9uQ3VydmVUZXN0LmNw
cAorKysgYi9Tb3VyY2UvV2ViS2l0L2Nocm9taXVtL3Rlc3RzL0NDS2V5ZnJhbWVkQW5pbWF0aW9u
Q3VydmVUZXN0LmNwcApAQCAtMzEsNiArMzEsNyBAQAogCiAjaW5jbHVkZSA8Z21vY2svZ21vY2su
aD4KICNpbmNsdWRlIDxndGVzdC9ndGVzdC5oPgorI2luY2x1ZGUgPHB1YmxpYy9XZWJUcmFuc2Zv
cm1PcGVyYXRpb25zLmg+CiAjaW5jbHVkZSA8cHVibGljL1dlYlRyYW5zZm9ybWF0aW9uTWF0cml4
Lmg+CiAjaW5jbHVkZSA8d3RmL093blB0ci5oPgogI2luY2x1ZGUgPHd0Zi9WZWN0b3IuaD4KQEAg
LTExMyw1NyArMTE0LDU1IEBAIFRFU1QoQ0NLZXlmcmFtZWRBbmltYXRpb25DdXJ2ZVRlc3QsIFJl
cGVhdGVkRmxvYXRLZXlUaW1lcykKIFRFU1QoQ0NLZXlmcmFtZWRBbmltYXRpb25DdXJ2ZVRlc3Qs
IE9uZVRyYW5zZm9ybUtleWZyYW1lKQogewogICAgIE93blB0cjxDQ0tleWZyYW1lZFRyYW5zZm9y
bUFuaW1hdGlvbkN1cnZlPiBjdXJ2ZShDQ0tleWZyYW1lZFRyYW5zZm9ybUFuaW1hdGlvbkN1cnZl
OjpjcmVhdGUoKSk7Ci0gICAgVHJhbnNmb3JtT3BlcmF0aW9ucyBvcGVyYXRpb25zOwotICAgIG9w
ZXJhdGlvbnMub3BlcmF0aW9ucygpLmFwcGVuZChUcmFuc2xhdGVUcmFuc2Zvcm1PcGVyYXRpb246
OmNyZWF0ZShMZW5ndGgoMiwgRml4ZWQpLCBMZW5ndGgoMCwgRml4ZWQpLCBUcmFuc2Zvcm1PcGVy
YXRpb246OlRSQU5TTEFURV9YKSk7CisgICAgV2ViS2l0OjpXZWJUcmFuc2Zvcm1PcGVyYXRpb25z
IG9wZXJhdGlvbnM7CisgICAgb3BlcmF0aW9ucy5hcHBlbmRUcmFuc2xhdGUoMiwgMCwgMCk7CiAg
ICAgY3VydmUtPmFkZEtleWZyYW1lKENDVHJhbnNmb3JtS2V5ZnJhbWU6OmNyZWF0ZSgwLCBvcGVy
YXRpb25zLCBudWxscHRyKSk7CiAKLSAgICBJbnRTaXplIGxheWVyU2l6ZTsgLy8gaWdub3JlZAot
ICAgIGV4cGVjdFRyYW5zbGF0ZVgoMiwgY3VydmUtPmdldFZhbHVlKC0xLCBsYXllclNpemUpKTsK
LSAgICBleHBlY3RUcmFuc2xhdGVYKDIsIGN1cnZlLT5nZXRWYWx1ZSgwLCBsYXllclNpemUpKTsK
LSAgICBleHBlY3RUcmFuc2xhdGVYKDIsIGN1cnZlLT5nZXRWYWx1ZSgwLjUsIGxheWVyU2l6ZSkp
OwotICAgIGV4cGVjdFRyYW5zbGF0ZVgoMiwgY3VydmUtPmdldFZhbHVlKDEsIGxheWVyU2l6ZSkp
OwotICAgIGV4cGVjdFRyYW5zbGF0ZVgoMiwgY3VydmUtPmdldFZhbHVlKDIsIGxheWVyU2l6ZSkp
OworICAgIGV4cGVjdFRyYW5zbGF0ZVgoMiwgY3VydmUtPmdldFZhbHVlKC0xKSk7CisgICAgZXhw
ZWN0VHJhbnNsYXRlWCgyLCBjdXJ2ZS0+Z2V0VmFsdWUoMCkpOworICAgIGV4cGVjdFRyYW5zbGF0
ZVgoMiwgY3VydmUtPmdldFZhbHVlKDAuNSkpOworICAgIGV4cGVjdFRyYW5zbGF0ZVgoMiwgY3Vy
dmUtPmdldFZhbHVlKDEpKTsKKyAgICBleHBlY3RUcmFuc2xhdGVYKDIsIGN1cnZlLT5nZXRWYWx1
ZSgyKSk7CiB9CiAKIC8vIFRlc3RzIHRoYXQgYSB0cmFuc2Zvcm0gYW5pbWF0aW9uIHdpdGggdHdv
IGtleWZyYW1lcyB3b3JrcyBhcyBleHBlY3RlZC4KIFRFU1QoQ0NLZXlmcmFtZWRBbmltYXRpb25D
dXJ2ZVRlc3QsIFR3b1RyYW5zZm9ybUtleWZyYW1lKQogewogICAgIE93blB0cjxDQ0tleWZyYW1l
ZFRyYW5zZm9ybUFuaW1hdGlvbkN1cnZlPiBjdXJ2ZShDQ0tleWZyYW1lZFRyYW5zZm9ybUFuaW1h
dGlvbkN1cnZlOjpjcmVhdGUoKSk7Ci0gICAgVHJhbnNmb3JtT3BlcmF0aW9ucyBvcGVyYXRpb25z
MTsKLSAgICBvcGVyYXRpb25zMS5vcGVyYXRpb25zKCkuYXBwZW5kKFRyYW5zbGF0ZVRyYW5zZm9y
bU9wZXJhdGlvbjo6Y3JlYXRlKExlbmd0aCgyLCBGaXhlZCksIExlbmd0aCgwLCBGaXhlZCksIFRy
YW5zZm9ybU9wZXJhdGlvbjo6VFJBTlNMQVRFX1gpKTsKLSAgICBUcmFuc2Zvcm1PcGVyYXRpb25z
IG9wZXJhdGlvbnMyOwotICAgIG9wZXJhdGlvbnMyLm9wZXJhdGlvbnMoKS5hcHBlbmQoVHJhbnNs
YXRlVHJhbnNmb3JtT3BlcmF0aW9uOjpjcmVhdGUoTGVuZ3RoKDQsIEZpeGVkKSwgTGVuZ3RoKDAs
IEZpeGVkKSwgVHJhbnNmb3JtT3BlcmF0aW9uOjpUUkFOU0xBVEVfWCkpOworICAgIFdlYktpdDo6
V2ViVHJhbnNmb3JtT3BlcmF0aW9ucyBvcGVyYXRpb25zMTsKKyAgICBvcGVyYXRpb25zMS5hcHBl
bmRUcmFuc2xhdGUoMiwgMCwgMCk7CisgICAgV2ViS2l0OjpXZWJUcmFuc2Zvcm1PcGVyYXRpb25z
IG9wZXJhdGlvbnMyOworICAgIG9wZXJhdGlvbnMyLmFwcGVuZFRyYW5zbGF0ZSg0LCAwLCAwKTsK
KwogICAgIGN1cnZlLT5hZGRLZXlmcmFtZShDQ1RyYW5zZm9ybUtleWZyYW1lOjpjcmVhdGUoMCwg
b3BlcmF0aW9uczEsIG51bGxwdHIpKTsKICAgICBjdXJ2ZS0+YWRkS2V5ZnJhbWUoQ0NUcmFuc2Zv
cm1LZXlmcmFtZTo6Y3JlYXRlKDEsIG9wZXJhdGlvbnMyLCBudWxscHRyKSk7Ci0gICAgSW50U2l6
ZSBsYXllclNpemU7IC8vIGlnbm9yZWQKLSAgICBleHBlY3RUcmFuc2xhdGVYKDIsIGN1cnZlLT5n
ZXRWYWx1ZSgtMSwgbGF5ZXJTaXplKSk7Ci0gICAgZXhwZWN0VHJhbnNsYXRlWCgyLCBjdXJ2ZS0+
Z2V0VmFsdWUoMCwgbGF5ZXJTaXplKSk7Ci0gICAgZXhwZWN0VHJhbnNsYXRlWCgzLCBjdXJ2ZS0+
Z2V0VmFsdWUoMC41LCBsYXllclNpemUpKTsKLSAgICBleHBlY3RUcmFuc2xhdGVYKDQsIGN1cnZl
LT5nZXRWYWx1ZSgxLCBsYXllclNpemUpKTsKLSAgICBleHBlY3RUcmFuc2xhdGVYKDQsIGN1cnZl
LT5nZXRWYWx1ZSgyLCBsYXllclNpemUpKTsKKyAgICBleHBlY3RUcmFuc2xhdGVYKDIsIGN1cnZl
LT5nZXRWYWx1ZSgtMSkpOworICAgIGV4cGVjdFRyYW5zbGF0ZVgoMiwgY3VydmUtPmdldFZhbHVl
KDApKTsKKyAgICBleHBlY3RUcmFuc2xhdGVYKDMsIGN1cnZlLT5nZXRWYWx1ZSgwLjUpKTsKKyAg
ICBleHBlY3RUcmFuc2xhdGVYKDQsIGN1cnZlLT5nZXRWYWx1ZSgxKSk7CisgICAgZXhwZWN0VHJh
bnNsYXRlWCg0LCBjdXJ2ZS0+Z2V0VmFsdWUoMikpOwogfQogCiAvLyBUZXN0cyB0aGF0IGEgdHJh
bnNmb3JtIGFuaW1hdGlvbiB3aXRoIHRocmVlIGtleWZyYW1lcyB3b3JrcyBhcyBleHBlY3RlZC4K
IFRFU1QoQ0NLZXlmcmFtZWRBbmltYXRpb25DdXJ2ZVRlc3QsIFRocmVlVHJhbnNmb3JtS2V5ZnJh
bWUpCiB7CiAgICAgT3duUHRyPENDS2V5ZnJhbWVkVHJhbnNmb3JtQW5pbWF0aW9uQ3VydmU+IGN1
cnZlKENDS2V5ZnJhbWVkVHJhbnNmb3JtQW5pbWF0aW9uQ3VydmU6OmNyZWF0ZSgpKTsKLSAgICBU
cmFuc2Zvcm1PcGVyYXRpb25zIG9wZXJhdGlvbnMxOwotICAgIG9wZXJhdGlvbnMxLm9wZXJhdGlv
bnMoKS5hcHBlbmQoVHJhbnNsYXRlVHJhbnNmb3JtT3BlcmF0aW9uOjpjcmVhdGUoTGVuZ3RoKDIs
IEZpeGVkKSwgTGVuZ3RoKDAsIEZpeGVkKSwgVHJhbnNmb3JtT3BlcmF0aW9uOjpUUkFOU0xBVEVf
WCkpOwotICAgIFRyYW5zZm9ybU9wZXJhdGlvbnMgb3BlcmF0aW9uczI7Ci0gICAgb3BlcmF0aW9u
czIub3BlcmF0aW9ucygpLmFwcGVuZChUcmFuc2xhdGVUcmFuc2Zvcm1PcGVyYXRpb246OmNyZWF0
ZShMZW5ndGgoNCwgRml4ZWQpLCBMZW5ndGgoMCwgRml4ZWQpLCBUcmFuc2Zvcm1PcGVyYXRpb246
OlRSQU5TTEFURV9YKSk7Ci0gICAgVHJhbnNmb3JtT3BlcmF0aW9ucyBvcGVyYXRpb25zMzsKLSAg
ICBvcGVyYXRpb25zMy5vcGVyYXRpb25zKCkuYXBwZW5kKFRyYW5zbGF0ZVRyYW5zZm9ybU9wZXJh
dGlvbjo6Y3JlYXRlKExlbmd0aCg4LCBGaXhlZCksIExlbmd0aCgwLCBGaXhlZCksIFRyYW5zZm9y
bU9wZXJhdGlvbjo6VFJBTlNMQVRFX1gpKTsKKyAgICBXZWJLaXQ6OldlYlRyYW5zZm9ybU9wZXJh
dGlvbnMgb3BlcmF0aW9uczE7CisgICAgb3BlcmF0aW9uczEuYXBwZW5kVHJhbnNsYXRlKDIsIDAs
IDApOworICAgIFdlYktpdDo6V2ViVHJhbnNmb3JtT3BlcmF0aW9ucyBvcGVyYXRpb25zMjsKKyAg
ICBvcGVyYXRpb25zMi5hcHBlbmRUcmFuc2xhdGUoNCwgMCwgMCk7CisgICAgV2ViS2l0OjpXZWJU
cmFuc2Zvcm1PcGVyYXRpb25zIG9wZXJhdGlvbnMzOworICAgIG9wZXJhdGlvbnMzLmFwcGVuZFRy
YW5zbGF0ZSg4LCAwLCAwKTsKICAgICBjdXJ2ZS0+YWRkS2V5ZnJhbWUoQ0NUcmFuc2Zvcm1LZXlm
cmFtZTo6Y3JlYXRlKDAsIG9wZXJhdGlvbnMxLCBudWxscHRyKSk7CiAgICAgY3VydmUtPmFkZEtl
eWZyYW1lKENDVHJhbnNmb3JtS2V5ZnJhbWU6OmNyZWF0ZSgxLCBvcGVyYXRpb25zMiwgbnVsbHB0
cikpOwogICAgIGN1cnZlLT5hZGRLZXlmcmFtZShDQ1RyYW5zZm9ybUtleWZyYW1lOjpjcmVhdGUo
Miwgb3BlcmF0aW9uczMsIG51bGxwdHIpKTsKLSAgICBJbnRTaXplIGxheWVyU2l6ZTsgLy8gaWdu
b3JlZAotICAgIGV4cGVjdFRyYW5zbGF0ZVgoMiwgY3VydmUtPmdldFZhbHVlKC0xLCBsYXllclNp
emUpKTsKLSAgICBleHBlY3RUcmFuc2xhdGVYKDIsIGN1cnZlLT5nZXRWYWx1ZSgwLCBsYXllclNp
emUpKTsKLSAgICBleHBlY3RUcmFuc2xhdGVYKDMsIGN1cnZlLT5nZXRWYWx1ZSgwLjUsIGxheWVy
U2l6ZSkpOwotICAgIGV4cGVjdFRyYW5zbGF0ZVgoNCwgY3VydmUtPmdldFZhbHVlKDEsIGxheWVy
U2l6ZSkpOwotICAgIGV4cGVjdFRyYW5zbGF0ZVgoNiwgY3VydmUtPmdldFZhbHVlKDEuNSwgbGF5
ZXJTaXplKSk7Ci0gICAgZXhwZWN0VHJhbnNsYXRlWCg4LCBjdXJ2ZS0+Z2V0VmFsdWUoMiwgbGF5
ZXJTaXplKSk7Ci0gICAgZXhwZWN0VHJhbnNsYXRlWCg4LCBjdXJ2ZS0+Z2V0VmFsdWUoMywgbGF5
ZXJTaXplKSk7CisgICAgZXhwZWN0VHJhbnNsYXRlWCgyLCBjdXJ2ZS0+Z2V0VmFsdWUoLTEpKTsK
KyAgICBleHBlY3RUcmFuc2xhdGVYKDIsIGN1cnZlLT5nZXRWYWx1ZSgwKSk7CisgICAgZXhwZWN0
VHJhbnNsYXRlWCgzLCBjdXJ2ZS0+Z2V0VmFsdWUoMC41KSk7CisgICAgZXhwZWN0VHJhbnNsYXRl
WCg0LCBjdXJ2ZS0+Z2V0VmFsdWUoMSkpOworICAgIGV4cGVjdFRyYW5zbGF0ZVgoNiwgY3VydmUt
PmdldFZhbHVlKDEuNSkpOworICAgIGV4cGVjdFRyYW5zbGF0ZVgoOCwgY3VydmUtPmdldFZhbHVl
KDIpKTsKKyAgICBleHBlY3RUcmFuc2xhdGVYKDgsIGN1cnZlLT5nZXRWYWx1ZSgzKSk7CiB9CiAK
IC8vIFRlc3RzIHRoYXQgYSB0cmFuc2Zvcm0gYW5pbWF0aW9uIHdpdGggbXVsdGlwbGUga2V5cyBh
dCBhIGdpdmVuIHRpbWUgd29ya3Mgc2FuZWx5LgpAQCAtMTcxLDMyICsxNzAsMzAgQEAgVEVTVChD
Q0tleWZyYW1lZEFuaW1hdGlvbkN1cnZlVGVzdCwgUmVwZWF0ZWRUcmFuc2Zvcm1LZXlUaW1lcykK
IHsKICAgICBPd25QdHI8Q0NLZXlmcmFtZWRUcmFuc2Zvcm1BbmltYXRpb25DdXJ2ZT4gY3VydmUo
Q0NLZXlmcmFtZWRUcmFuc2Zvcm1BbmltYXRpb25DdXJ2ZTo6Y3JlYXRlKCkpOwogICAgIC8vIEEg
c3RlcCBmdW5jdGlvbi4KLSAgICBUcmFuc2Zvcm1PcGVyYXRpb25zIG9wZXJhdGlvbnMxOwotICAg
IG9wZXJhdGlvbnMxLm9wZXJhdGlvbnMoKS5hcHBlbmQoVHJhbnNsYXRlVHJhbnNmb3JtT3BlcmF0
aW9uOjpjcmVhdGUoTGVuZ3RoKDQsIEZpeGVkKSwgTGVuZ3RoKDAsIEZpeGVkKSwgVHJhbnNmb3Jt
T3BlcmF0aW9uOjpUUkFOU0xBVEVfWCkpOwotICAgIFRyYW5zZm9ybU9wZXJhdGlvbnMgb3BlcmF0
aW9uczI7Ci0gICAgb3BlcmF0aW9uczIub3BlcmF0aW9ucygpLmFwcGVuZChUcmFuc2xhdGVUcmFu
c2Zvcm1PcGVyYXRpb246OmNyZWF0ZShMZW5ndGgoNCwgRml4ZWQpLCBMZW5ndGgoMCwgRml4ZWQp
LCBUcmFuc2Zvcm1PcGVyYXRpb246OlRSQU5TTEFURV9YKSk7Ci0gICAgVHJhbnNmb3JtT3BlcmF0
aW9ucyBvcGVyYXRpb25zMzsKLSAgICBvcGVyYXRpb25zMy5vcGVyYXRpb25zKCkuYXBwZW5kKFRy
YW5zbGF0ZVRyYW5zZm9ybU9wZXJhdGlvbjo6Y3JlYXRlKExlbmd0aCg2LCBGaXhlZCksIExlbmd0
aCgwLCBGaXhlZCksIFRyYW5zZm9ybU9wZXJhdGlvbjo6VFJBTlNMQVRFX1gpKTsKLSAgICBUcmFu
c2Zvcm1PcGVyYXRpb25zIG9wZXJhdGlvbnM0OwotICAgIG9wZXJhdGlvbnM0Lm9wZXJhdGlvbnMo
KS5hcHBlbmQoVHJhbnNsYXRlVHJhbnNmb3JtT3BlcmF0aW9uOjpjcmVhdGUoTGVuZ3RoKDYsIEZp
eGVkKSwgTGVuZ3RoKDAsIEZpeGVkKSwgVHJhbnNmb3JtT3BlcmF0aW9uOjpUUkFOU0xBVEVfWCkp
OworICAgIFdlYktpdDo6V2ViVHJhbnNmb3JtT3BlcmF0aW9ucyBvcGVyYXRpb25zMTsKKyAgICBv
cGVyYXRpb25zMS5hcHBlbmRUcmFuc2xhdGUoNCwgMCwgMCk7CisgICAgV2ViS2l0OjpXZWJUcmFu
c2Zvcm1PcGVyYXRpb25zIG9wZXJhdGlvbnMyOworICAgIG9wZXJhdGlvbnMyLmFwcGVuZFRyYW5z
bGF0ZSg0LCAwLCAwKTsKKyAgICBXZWJLaXQ6OldlYlRyYW5zZm9ybU9wZXJhdGlvbnMgb3BlcmF0
aW9uczM7CisgICAgb3BlcmF0aW9uczMuYXBwZW5kVHJhbnNsYXRlKDYsIDAsIDApOworICAgIFdl
YktpdDo6V2ViVHJhbnNmb3JtT3BlcmF0aW9ucyBvcGVyYXRpb25zNDsKKyAgICBvcGVyYXRpb25z
NC5hcHBlbmRUcmFuc2xhdGUoNiwgMCwgMCk7CiAgICAgY3VydmUtPmFkZEtleWZyYW1lKENDVHJh
bnNmb3JtS2V5ZnJhbWU6OmNyZWF0ZSgwLCBvcGVyYXRpb25zMSwgbnVsbHB0cikpOwogICAgIGN1
cnZlLT5hZGRLZXlmcmFtZShDQ1RyYW5zZm9ybUtleWZyYW1lOjpjcmVhdGUoMSwgb3BlcmF0aW9u
czIsIG51bGxwdHIpKTsKICAgICBjdXJ2ZS0+YWRkS2V5ZnJhbWUoQ0NUcmFuc2Zvcm1LZXlmcmFt
ZTo6Y3JlYXRlKDEsIG9wZXJhdGlvbnMzLCBudWxscHRyKSk7CiAgICAgY3VydmUtPmFkZEtleWZy
YW1lKENDVHJhbnNmb3JtS2V5ZnJhbWU6OmNyZWF0ZSgyLCBvcGVyYXRpb25zNCwgbnVsbHB0cikp
OwogCi0gICAgSW50U2l6ZSBsYXllclNpemU7IC8vIGlnbm9yZWQKLQotICAgIGV4cGVjdFRyYW5z
bGF0ZVgoNCwgY3VydmUtPmdldFZhbHVlKC0xLCBsYXllclNpemUpKTsKLSAgICBleHBlY3RUcmFu
c2xhdGVYKDQsIGN1cnZlLT5nZXRWYWx1ZSgwLCBsYXllclNpemUpKTsKLSAgICBleHBlY3RUcmFu
c2xhdGVYKDQsIGN1cnZlLT5nZXRWYWx1ZSgwLjUsIGxheWVyU2l6ZSkpOworICAgIGV4cGVjdFRy
YW5zbGF0ZVgoNCwgY3VydmUtPmdldFZhbHVlKC0xKSk7CisgICAgZXhwZWN0VHJhbnNsYXRlWCg0
LCBjdXJ2ZS0+Z2V0VmFsdWUoMCkpOworICAgIGV4cGVjdFRyYW5zbGF0ZVgoNCwgY3VydmUtPmdl
dFZhbHVlKDAuNSkpOwogCiAgICAgLy8gVGhlcmUgaXMgYSBkaXNjb250aW51aXR5IGF0IDEuIEFu
eSB2YWx1ZSBiZXR3ZWVuIDQgYW5kIDYgaXMgdmFsaWQuCi0gICAgV2ViVHJhbnNmb3JtYXRpb25N
YXRyaXggdmFsdWUgPSBjdXJ2ZS0+Z2V0VmFsdWUoMSwgbGF5ZXJTaXplKTsKKyAgICBXZWJUcmFu
c2Zvcm1hdGlvbk1hdHJpeCB2YWx1ZSA9IGN1cnZlLT5nZXRWYWx1ZSgxKTsKICAgICBFWFBFQ1Rf
VFJVRSh2YWx1ZS5tNDEoKSA+PSA0ICYmIHZhbHVlLm00MSgpIDw9IDYpOwogCi0gICAgZXhwZWN0
VHJhbnNsYXRlWCg2LCBjdXJ2ZS0+Z2V0VmFsdWUoMS41LCBsYXllclNpemUpKTsKLSAgICBleHBl
Y3RUcmFuc2xhdGVYKDYsIGN1cnZlLT5nZXRWYWx1ZSgyLCBsYXllclNpemUpKTsKLSAgICBleHBl
Y3RUcmFuc2xhdGVYKDYsIGN1cnZlLT5nZXRWYWx1ZSgzLCBsYXllclNpemUpKTsKKyAgICBleHBl
Y3RUcmFuc2xhdGVYKDYsIGN1cnZlLT5nZXRWYWx1ZSgxLjUpKTsKKyAgICBleHBlY3RUcmFuc2xh
dGVYKDYsIGN1cnZlLT5nZXRWYWx1ZSgyKSk7CisgICAgZXhwZWN0VHJhbnNsYXRlWCg2LCBjdXJ2
ZS0+Z2V0VmFsdWUoMykpOwogfQogCiAvLyBUZXN0cyB0aGF0IHRoZSBrZXlmcmFtZXMgbWF5IGJl
IGFkZGVkIG91dCBvZiBvcmRlci4KZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJLaXQvY2hyb21pdW0v
dGVzdHMvQ0NMYXllckFuaW1hdGlvbkNvbnRyb2xsZXJUZXN0LmNwcCBiL1NvdXJjZS9XZWJLaXQv
Y2hyb21pdW0vdGVzdHMvQ0NMYXllckFuaW1hdGlvbkNvbnRyb2xsZXJUZXN0LmNwcAppbmRleCBk
YmVkMDJjNzQ5YjllN2FkZTMzYTY1NWFkYWU0NmNhMjhhZWZiMDNkLi43MjM2MTA5MmFmMjI4N2U3
ZGY3YjI1NTY2NGNmMDI5NDEzYjgyYTAxIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViS2l0L2Nocm9t
aXVtL3Rlc3RzL0NDTGF5ZXJBbmltYXRpb25Db250cm9sbGVyVGVzdC5jcHAKKysrIGIvU291cmNl
L1dlYktpdC9jaHJvbWl1bS90ZXN0cy9DQ0xheWVyQW5pbWF0aW9uQ29udHJvbGxlclRlc3QuY3Bw
CkBAIC0yOSw3ICsyOSw2IEBACiAjaW5jbHVkZSAiQ0NBbmltYXRpb25UZXN0Q29tbW9uLmgiCiAj
aW5jbHVkZSAiR3JhcGhpY3NMYXllci5oIgogI2luY2x1ZGUgIkxlbmd0aC5oIgotI2luY2x1ZGUg
IlRyYW5zbGF0ZVRyYW5zZm9ybU9wZXJhdGlvbi5oIgogI2luY2x1ZGUgImNjL0NDQWN0aXZlQW5p
bWF0aW9uLmgiCiAjaW5jbHVkZSAiY2MvQ0NBbmltYXRpb25DdXJ2ZS5oIgogCkBAIC01NCwxOTcg
KzUzLDYgQEAgUGFzc093blB0cjxDQ0FjdGl2ZUFuaW1hdGlvbj4gY3JlYXRlQWN0aXZlQW5pbWF0
aW9uKFBhc3NPd25QdHI8Q0NBbmltYXRpb25DdXJ2ZT4KICAgICByZXR1cm4gQ0NBY3RpdmVBbmlt
YXRpb246OmNyZWF0ZShjdXJ2ZSwgMCwgaWQsIHByb3BlcnR5KTsKIH0KIAotVEVTVChDQ0xheWVy
QW5pbWF0aW9uQ29udHJvbGxlclRlc3QsIGNyZWF0ZU9wYWNpdHlBbmltYXRpb24pCi17Ci0gICAg
RmFrZUxheWVyQW5pbWF0aW9uQ29udHJvbGxlckNsaWVudCBkdW1teTsKLSAgICBPd25QdHI8Q0NM
YXllckFuaW1hdGlvbkNvbnRyb2xsZXI+IGNvbnRyb2xsZXIoQ0NMYXllckFuaW1hdGlvbkNvbnRy
b2xsZXI6OmNyZWF0ZSgmZHVtbXkpKTsKLSAgICBjb25zdCBkb3VibGUgZHVyYXRpb24gPSAxOwot
ICAgIFdlYkNvcmU6OktleWZyYW1lVmFsdWVMaXN0IHZhbHVlcyhBbmltYXRlZFByb3BlcnR5T3Bh
Y2l0eSk7Ci0gICAgdmFsdWVzLmluc2VydChuZXcgRmxvYXRBbmltYXRpb25WYWx1ZSgwLCAwKSk7
Ci0gICAgdmFsdWVzLmluc2VydChuZXcgRmxvYXRBbmltYXRpb25WYWx1ZShkdXJhdGlvbiwgMSkp
OwotCi0gICAgUmVmUHRyPEFuaW1hdGlvbj4gYW5pbWF0aW9uID0gQW5pbWF0aW9uOjpjcmVhdGUo
KTsKLSAgICBhbmltYXRpb24tPnNldER1cmF0aW9uKGR1cmF0aW9uKTsKLQotICAgIEludFNpemUg
Ym94U2l6ZTsKLSAgICBjb250cm9sbGVyLT5hZGRBbmltYXRpb24odmFsdWVzLCBib3hTaXplLCBh
bmltYXRpb24uZ2V0KCksIDAsIDAsIDApOwotCi0gICAgRVhQRUNUX1RSVUUoY29udHJvbGxlci0+
aGFzQWN0aXZlQW5pbWF0aW9uKCkpOwotCi0gICAgQ0NBY3RpdmVBbmltYXRpb24qIGFjdGl2ZUFu
aW1hdGlvbiA9IGNvbnRyb2xsZXItPmdldEFjdGl2ZUFuaW1hdGlvbigwLCBDQ0FjdGl2ZUFuaW1h
dGlvbjo6T3BhY2l0eSk7Ci0gICAgRVhQRUNUX1RSVUUoYWN0aXZlQW5pbWF0aW9uKTsKLQotICAg
IEVYUEVDVF9FUSgxLCBhY3RpdmVBbmltYXRpb24tPml0ZXJhdGlvbnMoKSk7Ci0gICAgRVhQRUNU
X0VRKENDQWN0aXZlQW5pbWF0aW9uOjpPcGFjaXR5LCBhY3RpdmVBbmltYXRpb24tPnRhcmdldFBy
b3BlcnR5KCkpOwotCi0gICAgRVhQRUNUX0VRKENDQW5pbWF0aW9uQ3VydmU6OkZsb2F0LCBhY3Rp
dmVBbmltYXRpb24tPmN1cnZlKCktPnR5cGUoKSk7Ci0KLSAgICBjb25zdCBDQ0Zsb2F0QW5pbWF0
aW9uQ3VydmUqIGN1cnZlID0gYWN0aXZlQW5pbWF0aW9uLT5jdXJ2ZSgpLT50b0Zsb2F0QW5pbWF0
aW9uQ3VydmUoKTsKLSAgICBFWFBFQ1RfVFJVRShjdXJ2ZSk7Ci0KLSAgICBFWFBFQ1RfRVEoMCwg
Y3VydmUtPmdldFZhbHVlKDApKTsKLSAgICBFWFBFQ1RfRVEoMSwgY3VydmUtPmdldFZhbHVlKGR1
cmF0aW9uKSk7Ci19Ci0KLVRFU1QoQ0NMYXllckFuaW1hdGlvbkNvbnRyb2xsZXJUZXN0LCBjcmVh
dGVUcmFuc2Zvcm1BbmltYXRpb24pCi17Ci0gICAgRmFrZUxheWVyQW5pbWF0aW9uQ29udHJvbGxl
ckNsaWVudCBkdW1teTsKLSAgICBPd25QdHI8Q0NMYXllckFuaW1hdGlvbkNvbnRyb2xsZXI+IGNv
bnRyb2xsZXIoQ0NMYXllckFuaW1hdGlvbkNvbnRyb2xsZXI6OmNyZWF0ZSgmZHVtbXkpKTsKLSAg
ICBjb25zdCBkb3VibGUgZHVyYXRpb24gPSAxOwotICAgIFdlYkNvcmU6OktleWZyYW1lVmFsdWVM
aXN0IHZhbHVlcyhBbmltYXRlZFByb3BlcnR5V2Via2l0VHJhbnNmb3JtKTsKLQotICAgIFRyYW5z
Zm9ybU9wZXJhdGlvbnMgb3BlcmF0aW9uczE7Ci0gICAgb3BlcmF0aW9uczEub3BlcmF0aW9ucygp
LmFwcGVuZChUcmFuc2xhdGVUcmFuc2Zvcm1PcGVyYXRpb246OmNyZWF0ZShMZW5ndGgoMiwgRml4
ZWQpLCBMZW5ndGgoMCwgRml4ZWQpLCBUcmFuc2Zvcm1PcGVyYXRpb246OlRSQU5TTEFURV9YKSk7
Ci0gICAgdmFsdWVzLmluc2VydChuZXcgVHJhbnNmb3JtQW5pbWF0aW9uVmFsdWUoMCwgJm9wZXJh
dGlvbnMxKSk7Ci0KLSAgICBUcmFuc2Zvcm1PcGVyYXRpb25zIG9wZXJhdGlvbnMyOwotICAgIG9w
ZXJhdGlvbnMyLm9wZXJhdGlvbnMoKS5hcHBlbmQoVHJhbnNsYXRlVHJhbnNmb3JtT3BlcmF0aW9u
OjpjcmVhdGUoTGVuZ3RoKDQsIEZpeGVkKSwgTGVuZ3RoKDAsIEZpeGVkKSwgVHJhbnNmb3JtT3Bl
cmF0aW9uOjpUUkFOU0xBVEVfWCkpOwotICAgIHZhbHVlcy5pbnNlcnQobmV3IFRyYW5zZm9ybUFu
aW1hdGlvblZhbHVlKGR1cmF0aW9uLCAmb3BlcmF0aW9uczIpKTsKLQotICAgIFJlZlB0cjxBbmlt
YXRpb24+IGFuaW1hdGlvbiA9IEFuaW1hdGlvbjo6Y3JlYXRlKCk7Ci0gICAgYW5pbWF0aW9uLT5z
ZXREdXJhdGlvbihkdXJhdGlvbik7Ci0KLSAgICBJbnRTaXplIGJveFNpemU7Ci0gICAgY29udHJv
bGxlci0+YWRkQW5pbWF0aW9uKHZhbHVlcywgYm94U2l6ZSwgYW5pbWF0aW9uLmdldCgpLCAwLCAw
LCAwKTsKLQotICAgIEVYUEVDVF9UUlVFKGNvbnRyb2xsZXItPmhhc0FjdGl2ZUFuaW1hdGlvbigp
KTsKLQotICAgIENDQWN0aXZlQW5pbWF0aW9uKiBhY3RpdmVBbmltYXRpb24gPSBjb250cm9sbGVy
LT5nZXRBY3RpdmVBbmltYXRpb24oMCwgQ0NBY3RpdmVBbmltYXRpb246OlRyYW5zZm9ybSk7Ci0g
ICAgRVhQRUNUX1RSVUUoYWN0aXZlQW5pbWF0aW9uKTsKLQotICAgIEVYUEVDVF9FUSgxLCBhY3Rp
dmVBbmltYXRpb24tPml0ZXJhdGlvbnMoKSk7Ci0gICAgRVhQRUNUX0VRKENDQWN0aXZlQW5pbWF0
aW9uOjpUcmFuc2Zvcm0sIGFjdGl2ZUFuaW1hdGlvbi0+dGFyZ2V0UHJvcGVydHkoKSk7Ci0KLSAg
ICBFWFBFQ1RfRVEoQ0NBbmltYXRpb25DdXJ2ZTo6VHJhbnNmb3JtLCBhY3RpdmVBbmltYXRpb24t
PmN1cnZlKCktPnR5cGUoKSk7Ci0KLSAgICBjb25zdCBDQ1RyYW5zZm9ybUFuaW1hdGlvbkN1cnZl
KiBjdXJ2ZSA9IGFjdGl2ZUFuaW1hdGlvbi0+Y3VydmUoKS0+dG9UcmFuc2Zvcm1BbmltYXRpb25D
dXJ2ZSgpOwotICAgIEVYUEVDVF9UUlVFKGN1cnZlKTsKLQotICAgIGV4cGVjdFRyYW5zbGF0ZVgo
MiwgY3VydmUtPmdldFZhbHVlKDAsIGJveFNpemUpKTsKLSAgICBleHBlY3RUcmFuc2xhdGVYKDQs
IGN1cnZlLT5nZXRWYWx1ZShkdXJhdGlvbiwgYm94U2l6ZSkpOwotfQotCi1URVNUKENDTGF5ZXJB
bmltYXRpb25Db250cm9sbGVyVGVzdCwgY3JlYXRlUmV2ZXJzZWRBbmltYXRpb24pCi17Ci0gICAg
RmFrZUxheWVyQW5pbWF0aW9uQ29udHJvbGxlckNsaWVudCBkdW1teTsKLSAgICBPd25QdHI8Q0NM
YXllckFuaW1hdGlvbkNvbnRyb2xsZXI+IGNvbnRyb2xsZXIoQ0NMYXllckFuaW1hdGlvbkNvbnRy
b2xsZXI6OmNyZWF0ZSgmZHVtbXkpKTsKLSAgICBjb25zdCBkb3VibGUgZHVyYXRpb24gPSAxOwot
ICAgIFdlYkNvcmU6OktleWZyYW1lVmFsdWVMaXN0IHZhbHVlcyhBbmltYXRlZFByb3BlcnR5V2Vi
a2l0VHJhbnNmb3JtKTsKLQotICAgIFRyYW5zZm9ybU9wZXJhdGlvbnMgb3BlcmF0aW9uczE7Ci0g
ICAgb3BlcmF0aW9uczEub3BlcmF0aW9ucygpLmFwcGVuZChUcmFuc2xhdGVUcmFuc2Zvcm1PcGVy
YXRpb246OmNyZWF0ZShMZW5ndGgoMiwgRml4ZWQpLCBMZW5ndGgoMCwgRml4ZWQpLCBUcmFuc2Zv
cm1PcGVyYXRpb246OlRSQU5TTEFURV9YKSk7Ci0gICAgdmFsdWVzLmluc2VydChuZXcgVHJhbnNm
b3JtQW5pbWF0aW9uVmFsdWUoMCwgJm9wZXJhdGlvbnMxKSk7Ci0KLSAgICBUcmFuc2Zvcm1PcGVy
YXRpb25zIG9wZXJhdGlvbnMyOwotICAgIG9wZXJhdGlvbnMyLm9wZXJhdGlvbnMoKS5hcHBlbmQo
VHJhbnNsYXRlVHJhbnNmb3JtT3BlcmF0aW9uOjpjcmVhdGUoTGVuZ3RoKDQsIEZpeGVkKSwgTGVu
Z3RoKDAsIEZpeGVkKSwgVHJhbnNmb3JtT3BlcmF0aW9uOjpUUkFOU0xBVEVfWCkpOwotICAgIHZh
bHVlcy5pbnNlcnQobmV3IFRyYW5zZm9ybUFuaW1hdGlvblZhbHVlKGR1cmF0aW9uLCAmb3BlcmF0
aW9uczIpKTsKLQotICAgIFJlZlB0cjxBbmltYXRpb24+IGFuaW1hdGlvbiA9IEFuaW1hdGlvbjo6
Y3JlYXRlKCk7Ci0gICAgYW5pbWF0aW9uLT5zZXREdXJhdGlvbihkdXJhdGlvbik7Ci0gICAgYW5p
bWF0aW9uLT5zZXREaXJlY3Rpb24oQW5pbWF0aW9uOjpBbmltYXRpb25EaXJlY3Rpb25SZXZlcnNl
KTsKLQotICAgIEludFNpemUgYm94U2l6ZTsKLSAgICBjb250cm9sbGVyLT5hZGRBbmltYXRpb24o
dmFsdWVzLCBib3hTaXplLCBhbmltYXRpb24uZ2V0KCksIDAsIDAsIDApOwotCi0gICAgRVhQRUNU
X1RSVUUoY29udHJvbGxlci0+aGFzQWN0aXZlQW5pbWF0aW9uKCkpOwotCi0gICAgQ0NBY3RpdmVB
bmltYXRpb24qIGFjdGl2ZUFuaW1hdGlvbiA9IGNvbnRyb2xsZXItPmdldEFjdGl2ZUFuaW1hdGlv
bigwLCBDQ0FjdGl2ZUFuaW1hdGlvbjo6VHJhbnNmb3JtKTsKLSAgICBFWFBFQ1RfVFJVRShhY3Rp
dmVBbmltYXRpb24pOwotCi0gICAgRVhQRUNUX0VRKDEsIGFjdGl2ZUFuaW1hdGlvbi0+aXRlcmF0
aW9ucygpKTsKLSAgICBFWFBFQ1RfRVEoQ0NBY3RpdmVBbmltYXRpb246OlRyYW5zZm9ybSwgYWN0
aXZlQW5pbWF0aW9uLT50YXJnZXRQcm9wZXJ0eSgpKTsKLQotICAgIEVYUEVDVF9FUShDQ0FuaW1h
dGlvbkN1cnZlOjpUcmFuc2Zvcm0sIGFjdGl2ZUFuaW1hdGlvbi0+Y3VydmUoKS0+dHlwZSgpKTsK
LQotICAgIGNvbnN0IENDVHJhbnNmb3JtQW5pbWF0aW9uQ3VydmUqIGN1cnZlID0gYWN0aXZlQW5p
bWF0aW9uLT5jdXJ2ZSgpLT50b1RyYW5zZm9ybUFuaW1hdGlvbkN1cnZlKCk7Ci0gICAgRVhQRUNU
X1RSVUUoY3VydmUpOwotCi0gICAgZXhwZWN0VHJhbnNsYXRlWCg0LCBjdXJ2ZS0+Z2V0VmFsdWUo
MCwgYm94U2l6ZSkpOwotICAgIGV4cGVjdFRyYW5zbGF0ZVgoMiwgY3VydmUtPmdldFZhbHVlKGR1
cmF0aW9uLCBib3hTaXplKSk7Ci19Ci0KLVRFU1QoQ0NMYXllckFuaW1hdGlvbkNvbnRyb2xsZXJU
ZXN0LCBjcmVhdGVBbHRlcm5hdGluZ0FuaW1hdGlvbikKLXsKLSAgICBGYWtlTGF5ZXJBbmltYXRp
b25Db250cm9sbGVyQ2xpZW50IGR1bW15OwotICAgIE93blB0cjxDQ0xheWVyQW5pbWF0aW9uQ29u
dHJvbGxlcj4gY29udHJvbGxlcihDQ0xheWVyQW5pbWF0aW9uQ29udHJvbGxlcjo6Y3JlYXRlKCZk
dW1teSkpOwotICAgIGNvbnN0IGRvdWJsZSBkdXJhdGlvbiA9IDE7Ci0gICAgV2ViQ29yZTo6S2V5
ZnJhbWVWYWx1ZUxpc3QgdmFsdWVzKEFuaW1hdGVkUHJvcGVydHlXZWJraXRUcmFuc2Zvcm0pOwot
Ci0gICAgVHJhbnNmb3JtT3BlcmF0aW9ucyBvcGVyYXRpb25zMTsKLSAgICBvcGVyYXRpb25zMS5v
cGVyYXRpb25zKCkuYXBwZW5kKFRyYW5zbGF0ZVRyYW5zZm9ybU9wZXJhdGlvbjo6Y3JlYXRlKExl
bmd0aCgyLCBGaXhlZCksIExlbmd0aCgwLCBGaXhlZCksIFRyYW5zZm9ybU9wZXJhdGlvbjo6VFJB
TlNMQVRFX1gpKTsKLSAgICB2YWx1ZXMuaW5zZXJ0KG5ldyBUcmFuc2Zvcm1BbmltYXRpb25WYWx1
ZSgwLCAmb3BlcmF0aW9uczEpKTsKLQotICAgIFRyYW5zZm9ybU9wZXJhdGlvbnMgb3BlcmF0aW9u
czI7Ci0gICAgb3BlcmF0aW9uczIub3BlcmF0aW9ucygpLmFwcGVuZChUcmFuc2xhdGVUcmFuc2Zv
cm1PcGVyYXRpb246OmNyZWF0ZShMZW5ndGgoNCwgRml4ZWQpLCBMZW5ndGgoMCwgRml4ZWQpLCBU
cmFuc2Zvcm1PcGVyYXRpb246OlRSQU5TTEFURV9YKSk7Ci0gICAgdmFsdWVzLmluc2VydChuZXcg
VHJhbnNmb3JtQW5pbWF0aW9uVmFsdWUoZHVyYXRpb24sICZvcGVyYXRpb25zMikpOwotCi0gICAg
UmVmUHRyPEFuaW1hdGlvbj4gYW5pbWF0aW9uID0gQW5pbWF0aW9uOjpjcmVhdGUoKTsKLSAgICBh
bmltYXRpb24tPnNldER1cmF0aW9uKGR1cmF0aW9uKTsKLSAgICBhbmltYXRpb24tPnNldERpcmVj
dGlvbihBbmltYXRpb246OkFuaW1hdGlvbkRpcmVjdGlvbkFsdGVybmF0ZSk7Ci0gICAgYW5pbWF0
aW9uLT5zZXRJdGVyYXRpb25Db3VudCgyKTsKLQotICAgIEludFNpemUgYm94U2l6ZTsKLSAgICBj
b250cm9sbGVyLT5hZGRBbmltYXRpb24odmFsdWVzLCBib3hTaXplLCBhbmltYXRpb24uZ2V0KCks
IDAsIDAsIDApOwotCi0gICAgRVhQRUNUX1RSVUUoY29udHJvbGxlci0+aGFzQWN0aXZlQW5pbWF0
aW9uKCkpOwotCi0gICAgQ0NBY3RpdmVBbmltYXRpb24qIGFjdGl2ZUFuaW1hdGlvbiA9IGNvbnRy
b2xsZXItPmdldEFjdGl2ZUFuaW1hdGlvbigwLCBDQ0FjdGl2ZUFuaW1hdGlvbjo6VHJhbnNmb3Jt
KTsKLSAgICBFWFBFQ1RfVFJVRShhY3RpdmVBbmltYXRpb24pOwotICAgIEVYUEVDVF9UUlVFKGFj
dGl2ZUFuaW1hdGlvbi0+YWx0ZXJuYXRlc0RpcmVjdGlvbigpKTsKLQotICAgIEVYUEVDVF9FUSgy
LCBhY3RpdmVBbmltYXRpb24tPml0ZXJhdGlvbnMoKSk7Ci0gICAgRVhQRUNUX0VRKENDQWN0aXZl
QW5pbWF0aW9uOjpUcmFuc2Zvcm0sIGFjdGl2ZUFuaW1hdGlvbi0+dGFyZ2V0UHJvcGVydHkoKSk7
Ci0KLSAgICBFWFBFQ1RfRVEoQ0NBbmltYXRpb25DdXJ2ZTo6VHJhbnNmb3JtLCBhY3RpdmVBbmlt
YXRpb24tPmN1cnZlKCktPnR5cGUoKSk7Ci0KLSAgICBjb25zdCBDQ1RyYW5zZm9ybUFuaW1hdGlv
bkN1cnZlKiBjdXJ2ZSA9IGFjdGl2ZUFuaW1hdGlvbi0+Y3VydmUoKS0+dG9UcmFuc2Zvcm1Bbmlt
YXRpb25DdXJ2ZSgpOwotICAgIEVYUEVDVF9UUlVFKGN1cnZlKTsKLQotICAgIGV4cGVjdFRyYW5z
bGF0ZVgoMiwgY3VydmUtPmdldFZhbHVlKDAsIGJveFNpemUpKTsKLSAgICBleHBlY3RUcmFuc2xh
dGVYKDQsIGN1cnZlLT5nZXRWYWx1ZShkdXJhdGlvbiwgYm94U2l6ZSkpOwotfQotCi1URVNUKEND
TGF5ZXJBbmltYXRpb25Db250cm9sbGVyVGVzdCwgY3JlYXRlUmV2ZXJzZWRBbHRlcm5hdGluZ0Fu
aW1hdGlvbikKLXsKLSAgICBGYWtlTGF5ZXJBbmltYXRpb25Db250cm9sbGVyQ2xpZW50IGR1bW15
OwotICAgIE93blB0cjxDQ0xheWVyQW5pbWF0aW9uQ29udHJvbGxlcj4gY29udHJvbGxlcihDQ0xh
eWVyQW5pbWF0aW9uQ29udHJvbGxlcjo6Y3JlYXRlKCZkdW1teSkpOwotICAgIGNvbnN0IGRvdWJs
ZSBkdXJhdGlvbiA9IDE7Ci0gICAgV2ViQ29yZTo6S2V5ZnJhbWVWYWx1ZUxpc3QgdmFsdWVzKEFu
aW1hdGVkUHJvcGVydHlXZWJraXRUcmFuc2Zvcm0pOwotCi0gICAgVHJhbnNmb3JtT3BlcmF0aW9u
cyBvcGVyYXRpb25zMTsKLSAgICBvcGVyYXRpb25zMS5vcGVyYXRpb25zKCkuYXBwZW5kKFRyYW5z
bGF0ZVRyYW5zZm9ybU9wZXJhdGlvbjo6Y3JlYXRlKExlbmd0aCgyLCBGaXhlZCksIExlbmd0aCgw
LCBGaXhlZCksIFRyYW5zZm9ybU9wZXJhdGlvbjo6VFJBTlNMQVRFX1gpKTsKLSAgICB2YWx1ZXMu
aW5zZXJ0KG5ldyBUcmFuc2Zvcm1BbmltYXRpb25WYWx1ZSgwLCAmb3BlcmF0aW9uczEpKTsKLQot
ICAgIFRyYW5zZm9ybU9wZXJhdGlvbnMgb3BlcmF0aW9uczI7Ci0gICAgb3BlcmF0aW9uczIub3Bl
cmF0aW9ucygpLmFwcGVuZChUcmFuc2xhdGVUcmFuc2Zvcm1PcGVyYXRpb246OmNyZWF0ZShMZW5n
dGgoNCwgRml4ZWQpLCBMZW5ndGgoMCwgRml4ZWQpLCBUcmFuc2Zvcm1PcGVyYXRpb246OlRSQU5T
TEFURV9YKSk7Ci0gICAgdmFsdWVzLmluc2VydChuZXcgVHJhbnNmb3JtQW5pbWF0aW9uVmFsdWUo
ZHVyYXRpb24sICZvcGVyYXRpb25zMikpOwotCi0gICAgUmVmUHRyPEFuaW1hdGlvbj4gYW5pbWF0
aW9uID0gQW5pbWF0aW9uOjpjcmVhdGUoKTsKLSAgICBhbmltYXRpb24tPnNldER1cmF0aW9uKGR1
cmF0aW9uKTsKLSAgICBhbmltYXRpb24tPnNldERpcmVjdGlvbihBbmltYXRpb246OkFuaW1hdGlv
bkRpcmVjdGlvbkFsdGVybmF0ZVJldmVyc2UpOwotICAgIGFuaW1hdGlvbi0+c2V0SXRlcmF0aW9u
Q291bnQoMik7Ci0KLSAgICBJbnRTaXplIGJveFNpemU7Ci0gICAgY29udHJvbGxlci0+YWRkQW5p
bWF0aW9uKHZhbHVlcywgYm94U2l6ZSwgYW5pbWF0aW9uLmdldCgpLCAwLCAwLCAwKTsKLQotICAg
IEVYUEVDVF9UUlVFKGNvbnRyb2xsZXItPmhhc0FjdGl2ZUFuaW1hdGlvbigpKTsKLQotICAgIEND
QWN0aXZlQW5pbWF0aW9uKiBhY3RpdmVBbmltYXRpb24gPSBjb250cm9sbGVyLT5nZXRBY3RpdmVB
bmltYXRpb24oMCwgQ0NBY3RpdmVBbmltYXRpb246OlRyYW5zZm9ybSk7Ci0gICAgRVhQRUNUX1RS
VUUoYWN0aXZlQW5pbWF0aW9uKTsKLSAgICBFWFBFQ1RfVFJVRShhY3RpdmVBbmltYXRpb24tPmFs
dGVybmF0ZXNEaXJlY3Rpb24oKSk7Ci0KLSAgICBFWFBFQ1RfRVEoMiwgYWN0aXZlQW5pbWF0aW9u
LT5pdGVyYXRpb25zKCkpOwotICAgIEVYUEVDVF9FUShDQ0FjdGl2ZUFuaW1hdGlvbjo6VHJhbnNm
b3JtLCBhY3RpdmVBbmltYXRpb24tPnRhcmdldFByb3BlcnR5KCkpOwotCi0gICAgRVhQRUNUX0VR
KENDQW5pbWF0aW9uQ3VydmU6OlRyYW5zZm9ybSwgYWN0aXZlQW5pbWF0aW9uLT5jdXJ2ZSgpLT50
eXBlKCkpOwotCi0gICAgY29uc3QgQ0NUcmFuc2Zvcm1BbmltYXRpb25DdXJ2ZSogY3VydmUgPSBh
Y3RpdmVBbmltYXRpb24tPmN1cnZlKCktPnRvVHJhbnNmb3JtQW5pbWF0aW9uQ3VydmUoKTsKLSAg
ICBFWFBFQ1RfVFJVRShjdXJ2ZSk7Ci0KLSAgICBleHBlY3RUcmFuc2xhdGVYKDQsIGN1cnZlLT5n
ZXRWYWx1ZSgwLCBib3hTaXplKSk7Ci0gICAgZXhwZWN0VHJhbnNsYXRlWCgyLCBjdXJ2ZS0+Z2V0
VmFsdWUoZHVyYXRpb24sIGJveFNpemUpKTsKLX0KLQogVEVTVChDQ0xheWVyQW5pbWF0aW9uQ29u
dHJvbGxlclRlc3QsIHN5bmNOZXdBbmltYXRpb24pCiB7CiAgICAgRmFrZUxheWVyQW5pbWF0aW9u
Q29udHJvbGxlckNsaWVudCBkdW1teUltcGw7CkBAIC0zMzMsNyArMTQxLDYgQEAgVEVTVChDQ0xh
eWVyQW5pbWF0aW9uQ29udHJvbGxlclRlc3QsIHN5bmNQYXVzZUFuZFJlc3VtZSkKICAgICBFWFBF
Q1RfRVEoQ0NBY3RpdmVBbmltYXRpb246OlJ1bm5pbmcsIGNvbnRyb2xsZXJJbXBsLT5nZXRBY3Rp
dmVBbmltYXRpb24oMCwgQ0NBY3RpdmVBbmltYXRpb246Ok9wYWNpdHkpLT5ydW5TdGF0ZSgpKTsK
IH0KIAotCiBURVNUKENDTGF5ZXJBbmltYXRpb25Db250cm9sbGVyVGVzdCwgZG9Ob3RTeW5jRmlu
aXNoZWRBbmltYXRpb24pCiB7CiAgICAgRmFrZUxheWVyQW5pbWF0aW9uQ29udHJvbGxlckNsaWVu
dCBkdW1teUltcGw7CkBAIC0zNzUsNyArMTgyLDcgQEAgVEVTVChDQ0xheWVyQW5pbWF0aW9uQ29u
dHJvbGxlclRlc3QsIFRyaXZpYWxUcmFuc2l0aW9uKQogCiAgICAgT3duUHRyPENDQWN0aXZlQW5p
bWF0aW9uPiB0b0FkZChjcmVhdGVBY3RpdmVBbmltYXRpb24oYWRvcHRQdHIobmV3IEZha2VGbG9h
dFRyYW5zaXRpb24oMSwgMCwgMSkpLCAxLCBDQ0FjdGl2ZUFuaW1hdGlvbjo6T3BhY2l0eSkpOwog
Ci0gICAgY29udHJvbGxlci0+YWRkKHRvQWRkLnJlbGVhc2UoKSk7CisgICAgY29udHJvbGxlci0+
YWRkQW5pbWF0aW9uKHRvQWRkLnJlbGVhc2UoKSk7CiAgICAgY29udHJvbGxlci0+YW5pbWF0ZSgw
LCBldmVudHMuZ2V0KCkpOwogICAgIEVYUEVDVF9UUlVFKGNvbnRyb2xsZXItPmhhc0FjdGl2ZUFu
aW1hdGlvbigpKTsKICAgICBFWFBFQ1RfRVEoMCwgZHVtbXkub3BhY2l0eSgpKTsKQEAgLTM5Niw3
ICsyMDMsNyBAQCBURVNUKENDTGF5ZXJBbmltYXRpb25Db250cm9sbGVyVGVzdCwgQW5pbWF0aW9u
c1dhaXRpbmdGb3JTdGFydFRpbWVEb05vdEZpbmlzaElmVAogICAgIHRvQWRkLT5zZXROZWVkc1N5
bmNocm9uaXplZFN0YXJ0VGltZSh0cnVlKTsKIAogICAgIC8vIFdlIHNob3VsZCBwYXVzZSBhdCB0
aGUgZmlyc3Qga2V5ZnJhbWUgaW5kZWZpbml0ZWx5IHdhaXRpbmcgZm9yIHRoYXQgYW5pbWF0aW9u
IHRvIHN0YXJ0LgotICAgIGNvbnRyb2xsZXItPmFkZCh0b0FkZC5yZWxlYXNlKCkpOworICAgIGNv
bnRyb2xsZXItPmFkZEFuaW1hdGlvbih0b0FkZC5yZWxlYXNlKCkpOwogICAgIGNvbnRyb2xsZXIt
PmFuaW1hdGUoMCwgZXZlbnRzLmdldCgpKTsKICAgICBFWFBFQ1RfVFJVRShjb250cm9sbGVyLT5o
YXNBY3RpdmVBbmltYXRpb24oKSk7CiAgICAgRVhQRUNUX0VRKDAsIGR1bW15Lm9wYWNpdHkoKSk7
CkBAIC00MjIsOCArMjI5LDggQEAgVEVTVChDQ0xheWVyQW5pbWF0aW9uQ29udHJvbGxlclRlc3Qs
IFRyaXZpYWxRdWV1aW5nKQogICAgIE93blB0cjxDQ0xheWVyQW5pbWF0aW9uQ29udHJvbGxlcj4g
Y29udHJvbGxlcigKICAgICAgICAgQ0NMYXllckFuaW1hdGlvbkNvbnRyb2xsZXI6OmNyZWF0ZSgm
ZHVtbXkpKTsKIAotICAgIGNvbnRyb2xsZXItPmFkZChjcmVhdGVBY3RpdmVBbmltYXRpb24oYWRv
cHRQdHIobmV3IEZha2VGbG9hdFRyYW5zaXRpb24oMSwgMCwgMSkpLCAxLCBDQ0FjdGl2ZUFuaW1h
dGlvbjo6T3BhY2l0eSkpOwotICAgIGNvbnRyb2xsZXItPmFkZChjcmVhdGVBY3RpdmVBbmltYXRp
b24oYWRvcHRQdHIobmV3IEZha2VGbG9hdFRyYW5zaXRpb24oMSwgMSwgMC41KSksIDIsIENDQWN0
aXZlQW5pbWF0aW9uOjpPcGFjaXR5KSk7CisgICAgY29udHJvbGxlci0+YWRkQW5pbWF0aW9uKGNy
ZWF0ZUFjdGl2ZUFuaW1hdGlvbihhZG9wdFB0cihuZXcgRmFrZUZsb2F0VHJhbnNpdGlvbigxLCAw
LCAxKSksIDEsIENDQWN0aXZlQW5pbWF0aW9uOjpPcGFjaXR5KSk7CisgICAgY29udHJvbGxlci0+
YWRkQW5pbWF0aW9uKGNyZWF0ZUFjdGl2ZUFuaW1hdGlvbihhZG9wdFB0cihuZXcgRmFrZUZsb2F0
VHJhbnNpdGlvbigxLCAxLCAwLjUpKSwgMiwgQ0NBY3RpdmVBbmltYXRpb246Ok9wYWNpdHkpKTsK
IAogICAgIGNvbnRyb2xsZXItPmFuaW1hdGUoMCwgZXZlbnRzLmdldCgpKTsKICAgICBFWFBFQ1Rf
VFJVRShjb250cm9sbGVyLT5oYXNBY3RpdmVBbmltYXRpb24oKSk7CkBAIC00NDMsMTQgKzI1MCwx
NCBAQCBURVNUKENDTGF5ZXJBbmltYXRpb25Db250cm9sbGVyVGVzdCwgSW50ZXJydXB0KQogICAg
IEZha2VMYXllckFuaW1hdGlvbkNvbnRyb2xsZXJDbGllbnQgZHVtbXk7CiAgICAgT3duUHRyPEND
TGF5ZXJBbmltYXRpb25Db250cm9sbGVyPiBjb250cm9sbGVyKAogICAgICAgICBDQ0xheWVyQW5p
bWF0aW9uQ29udHJvbGxlcjo6Y3JlYXRlKCZkdW1teSkpOwotICAgIGNvbnRyb2xsZXItPmFkZChj
cmVhdGVBY3RpdmVBbmltYXRpb24oYWRvcHRQdHIobmV3IEZha2VGbG9hdFRyYW5zaXRpb24oMSwg
MCwgMSkpLCAxLCBDQ0FjdGl2ZUFuaW1hdGlvbjo6T3BhY2l0eSkpOworICAgIGNvbnRyb2xsZXIt
PmFkZEFuaW1hdGlvbihjcmVhdGVBY3RpdmVBbmltYXRpb24oYWRvcHRQdHIobmV3IEZha2VGbG9h
dFRyYW5zaXRpb24oMSwgMCwgMSkpLCAxLCBDQ0FjdGl2ZUFuaW1hdGlvbjo6T3BhY2l0eSkpOwog
ICAgIGNvbnRyb2xsZXItPmFuaW1hdGUoMCwgZXZlbnRzLmdldCgpKTsKICAgICBFWFBFQ1RfVFJV
RShjb250cm9sbGVyLT5oYXNBY3RpdmVBbmltYXRpb24oKSk7CiAgICAgRVhQRUNUX0VRKDAsIGR1
bW15Lm9wYWNpdHkoKSk7CiAKICAgICBPd25QdHI8Q0NBY3RpdmVBbmltYXRpb24+IHRvQWRkKGNy
ZWF0ZUFjdGl2ZUFuaW1hdGlvbihhZG9wdFB0cihuZXcgRmFrZUZsb2F0VHJhbnNpdGlvbigxLCAx
LCAwLjUpKSwgMiwgQ0NBY3RpdmVBbmltYXRpb246Ok9wYWNpdHkpKTsKICAgICB0b0FkZC0+c2V0
UnVuU3RhdGUoQ0NBY3RpdmVBbmltYXRpb246OldhaXRpbmdGb3JOZXh0VGljaywgMCk7Ci0gICAg
Y29udHJvbGxlci0+YWRkKHRvQWRkLnJlbGVhc2UoKSk7CisgICAgY29udHJvbGxlci0+YWRkQW5p
bWF0aW9uKHRvQWRkLnJlbGVhc2UoKSk7CiAKICAgICAvLyBTaW5jZSB0aGUgYW5pbWF0aW9uIHdh
cyBpbiB0aGUgV2FpdGluZ0Zvck5leHRUaWNrIHN0YXRlLCBpdCBzaG91bGQgc3RhcnQgcmlnaHQg
aW4KICAgICAvLyB0aGlzIGNhbGwgdG8gYW5pbWF0ZS4KQEAgLTQ3MCw5ICsyNzcsOSBAQCBURVNU
KENDTGF5ZXJBbmltYXRpb25Db250cm9sbGVyVGVzdCwgU2NoZWR1bGVUb2dldGhlcldoZW5BUHJv
cGVydHlJc0Jsb2NrZWQpCiAgICAgT3duUHRyPENDTGF5ZXJBbmltYXRpb25Db250cm9sbGVyPiBj
b250cm9sbGVyKAogICAgICAgICBDQ0xheWVyQW5pbWF0aW9uQ29udHJvbGxlcjo6Y3JlYXRlKCZk
dW1teSkpOwogCi0gICAgY29udHJvbGxlci0+YWRkKGNyZWF0ZUFjdGl2ZUFuaW1hdGlvbihhZG9w
dFB0cihuZXcgRmFrZVRyYW5zZm9ybVRyYW5zaXRpb24oMSkpLCAxLCBDQ0FjdGl2ZUFuaW1hdGlv
bjo6VHJhbnNmb3JtKSk7Ci0gICAgY29udHJvbGxlci0+YWRkKGNyZWF0ZUFjdGl2ZUFuaW1hdGlv
bihhZG9wdFB0cihuZXcgRmFrZVRyYW5zZm9ybVRyYW5zaXRpb24oMSkpLCAyLCBDQ0FjdGl2ZUFu
aW1hdGlvbjo6VHJhbnNmb3JtKSk7Ci0gICAgY29udHJvbGxlci0+YWRkKGNyZWF0ZUFjdGl2ZUFu
aW1hdGlvbihhZG9wdFB0cihuZXcgRmFrZUZsb2F0VHJhbnNpdGlvbigxLCAwLCAxKSksIDIsIEND
QWN0aXZlQW5pbWF0aW9uOjpPcGFjaXR5KSk7CisgICAgY29udHJvbGxlci0+YWRkQW5pbWF0aW9u
KGNyZWF0ZUFjdGl2ZUFuaW1hdGlvbihhZG9wdFB0cihuZXcgRmFrZVRyYW5zZm9ybVRyYW5zaXRp
b24oMSkpLCAxLCBDQ0FjdGl2ZUFuaW1hdGlvbjo6VHJhbnNmb3JtKSk7CisgICAgY29udHJvbGxl
ci0+YWRkQW5pbWF0aW9uKGNyZWF0ZUFjdGl2ZUFuaW1hdGlvbihhZG9wdFB0cihuZXcgRmFrZVRy
YW5zZm9ybVRyYW5zaXRpb24oMSkpLCAyLCBDQ0FjdGl2ZUFuaW1hdGlvbjo6VHJhbnNmb3JtKSk7
CisgICAgY29udHJvbGxlci0+YWRkQW5pbWF0aW9uKGNyZWF0ZUFjdGl2ZUFuaW1hdGlvbihhZG9w
dFB0cihuZXcgRmFrZUZsb2F0VHJhbnNpdGlvbigxLCAwLCAxKSksIDIsIENDQWN0aXZlQW5pbWF0
aW9uOjpPcGFjaXR5KSk7CiAKICAgICBjb250cm9sbGVyLT5hbmltYXRlKDAsIGV2ZW50cy5nZXQo
KSk7CiAgICAgRVhQRUNUX0VRKDAsIGR1bW15Lm9wYWNpdHkoKSk7CkBAIC00OTcsOSArMzA0LDkg
QEAgVEVTVChDQ0xheWVyQW5pbWF0aW9uQ29udHJvbGxlclRlc3QsIFNjaGVkdWxlVG9nZXRoZXJX
aXRoQW5BbmltV2FpdGluZykKICAgICBPd25QdHI8Q0NMYXllckFuaW1hdGlvbkNvbnRyb2xsZXI+
IGNvbnRyb2xsZXIoCiAgICAgICAgIENDTGF5ZXJBbmltYXRpb25Db250cm9sbGVyOjpjcmVhdGUo
JmR1bW15KSk7CiAKLSAgICBjb250cm9sbGVyLT5hZGQoY3JlYXRlQWN0aXZlQW5pbWF0aW9uKGFk
b3B0UHRyKG5ldyBGYWtlVHJhbnNmb3JtVHJhbnNpdGlvbigyKSksIDEsIENDQWN0aXZlQW5pbWF0
aW9uOjpUcmFuc2Zvcm0pKTsKLSAgICBjb250cm9sbGVyLT5hZGQoY3JlYXRlQWN0aXZlQW5pbWF0
aW9uKGFkb3B0UHRyKG5ldyBGYWtlRmxvYXRUcmFuc2l0aW9uKDEsIDAsIDEpKSwgMSwgQ0NBY3Rp
dmVBbmltYXRpb246Ok9wYWNpdHkpKTsKLSAgICBjb250cm9sbGVyLT5hZGQoY3JlYXRlQWN0aXZl
QW5pbWF0aW9uKGFkb3B0UHRyKG5ldyBGYWtlRmxvYXRUcmFuc2l0aW9uKDEsIDEsIDAuNSkpLCAy
LCBDQ0FjdGl2ZUFuaW1hdGlvbjo6T3BhY2l0eSkpOworICAgIGNvbnRyb2xsZXItPmFkZEFuaW1h
dGlvbihjcmVhdGVBY3RpdmVBbmltYXRpb24oYWRvcHRQdHIobmV3IEZha2VUcmFuc2Zvcm1UcmFu
c2l0aW9uKDIpKSwgMSwgQ0NBY3RpdmVBbmltYXRpb246OlRyYW5zZm9ybSkpOworICAgIGNvbnRy
b2xsZXItPmFkZEFuaW1hdGlvbihjcmVhdGVBY3RpdmVBbmltYXRpb24oYWRvcHRQdHIobmV3IEZh
a2VGbG9hdFRyYW5zaXRpb24oMSwgMCwgMSkpLCAxLCBDQ0FjdGl2ZUFuaW1hdGlvbjo6T3BhY2l0
eSkpOworICAgIGNvbnRyb2xsZXItPmFkZEFuaW1hdGlvbihjcmVhdGVBY3RpdmVBbmltYXRpb24o
YWRvcHRQdHIobmV3IEZha2VGbG9hdFRyYW5zaXRpb24oMSwgMSwgMC41KSksIDIsIENDQWN0aXZl
QW5pbWF0aW9uOjpPcGFjaXR5KSk7CiAKICAgICAvLyBBbmltYXRpb25zIHdpdGggaWQgMSBzaG91
bGQgYm90aCBzdGFydCBub3cuCiAgICAgY29udHJvbGxlci0+YW5pbWF0ZSgwLCBldmVudHMuZ2V0
KCkpOwpAQCAtNTMwLDcgKzMzNyw3IEBAIFRFU1QoQ0NMYXllckFuaW1hdGlvbkNvbnRyb2xsZXJU
ZXN0LCBTY2hlZHVsZUFuaW1hdGlvbikKICAgICBPd25QdHI8Q0NBY3RpdmVBbmltYXRpb24+IHRv
QWRkKGNyZWF0ZUFjdGl2ZUFuaW1hdGlvbihhZG9wdFB0cihuZXcgRmFrZUZsb2F0VHJhbnNpdGlv
bigxLCAwLCAxKSksIDEsIENDQWN0aXZlQW5pbWF0aW9uOjpPcGFjaXR5KSk7CiAgICAgdG9BZGQt
PnNldFJ1blN0YXRlKENDQWN0aXZlQW5pbWF0aW9uOjpXYWl0aW5nRm9yU3RhcnRUaW1lLCAwKTsK
ICAgICB0b0FkZC0+c2V0U3RhcnRUaW1lKDEpOwotICAgIGNvbnRyb2xsZXItPmFkZCh0b0FkZC5y
ZWxlYXNlKCkpOworICAgIGNvbnRyb2xsZXItPmFkZEFuaW1hdGlvbih0b0FkZC5yZWxlYXNlKCkp
OwogCiAgICAgY29udHJvbGxlci0+YW5pbWF0ZSgwLCBldmVudHMuZ2V0KCkpOwogICAgIEVYUEVD
VF9UUlVFKGNvbnRyb2xsZXItPmhhc0FjdGl2ZUFuaW1hdGlvbigpKTsKQEAgLTU1MSwxMiArMzU4
LDEyIEBAIFRFU1QoQ0NMYXllckFuaW1hdGlvbkNvbnRyb2xsZXJUZXN0LCBTY2hlZHVsZWRBbmlt
YXRpb25JbnRlcnJ1cHRzUnVubmluZ0FuaW1hdGlvCiAgICAgT3duUHRyPENDTGF5ZXJBbmltYXRp
b25Db250cm9sbGVyPiBjb250cm9sbGVyKAogICAgICAgICBDQ0xheWVyQW5pbWF0aW9uQ29udHJv
bGxlcjo6Y3JlYXRlKCZkdW1teSkpOwogCi0gICAgY29udHJvbGxlci0+YWRkKGNyZWF0ZUFjdGl2
ZUFuaW1hdGlvbihhZG9wdFB0cihuZXcgRmFrZUZsb2F0VHJhbnNpdGlvbigyLCAwLCAxKSksIDEs
IENDQWN0aXZlQW5pbWF0aW9uOjpPcGFjaXR5KSk7CisgICAgY29udHJvbGxlci0+YWRkQW5pbWF0
aW9uKGNyZWF0ZUFjdGl2ZUFuaW1hdGlvbihhZG9wdFB0cihuZXcgRmFrZUZsb2F0VHJhbnNpdGlv
bigyLCAwLCAxKSksIDEsIENDQWN0aXZlQW5pbWF0aW9uOjpPcGFjaXR5KSk7CiAKICAgICBPd25Q
dHI8Q0NBY3RpdmVBbmltYXRpb24+IHRvQWRkKGNyZWF0ZUFjdGl2ZUFuaW1hdGlvbihhZG9wdFB0
cihuZXcgRmFrZUZsb2F0VHJhbnNpdGlvbigxLCAwLjUsIDApKSwgMiwgQ0NBY3RpdmVBbmltYXRp
b246Ok9wYWNpdHkpKTsKICAgICB0b0FkZC0+c2V0UnVuU3RhdGUoQ0NBY3RpdmVBbmltYXRpb246
OldhaXRpbmdGb3JTdGFydFRpbWUsIDApOwogICAgIHRvQWRkLT5zZXRTdGFydFRpbWUoMSk7Ci0g
ICAgY29udHJvbGxlci0+YWRkKHRvQWRkLnJlbGVhc2UoKSk7CisgICAgY29udHJvbGxlci0+YWRk
QW5pbWF0aW9uKHRvQWRkLnJlbGVhc2UoKSk7CiAKICAgICAvLyBGaXJzdCAycyBvcGFjaXR5IHRy
YW5zaXRpb24gc2hvdWxkIHN0YXJ0IGltbWVkaWF0ZWx5LgogICAgIGNvbnRyb2xsZXItPmFuaW1h
dGUoMCwgZXZlbnRzLmdldCgpKTsKQEAgLTU4MiwxNCArMzg5LDE0IEBAIFRFU1QoQ0NMYXllckFu
aW1hdGlvbkNvbnRyb2xsZXJUZXN0LCBTY2hlZHVsZWRBbmltYXRpb25JbnRlcnJ1cHRzUnVubmlu
Z0FuaW1hdGlvCiAgICAgT3duUHRyPENDTGF5ZXJBbmltYXRpb25Db250cm9sbGVyPiBjb250cm9s
bGVyKAogICAgICAgICBDQ0xheWVyQW5pbWF0aW9uQ29udHJvbGxlcjo6Y3JlYXRlKCZkdW1teSkp
OwogCi0gICAgY29udHJvbGxlci0+YWRkKGNyZWF0ZUFjdGl2ZUFuaW1hdGlvbihhZG9wdFB0cihu
ZXcgRmFrZUZsb2F0VHJhbnNpdGlvbigyLCAwLCAxKSksIDEsIENDQWN0aXZlQW5pbWF0aW9uOjpP
cGFjaXR5KSk7CisgICAgY29udHJvbGxlci0+YWRkQW5pbWF0aW9uKGNyZWF0ZUFjdGl2ZUFuaW1h
dGlvbihhZG9wdFB0cihuZXcgRmFrZUZsb2F0VHJhbnNpdGlvbigyLCAwLCAxKSksIDEsIENDQWN0
aXZlQW5pbWF0aW9uOjpPcGFjaXR5KSk7CiAKICAgICBPd25QdHI8Q0NBY3RpdmVBbmltYXRpb24+
IHRvQWRkKGNyZWF0ZUFjdGl2ZUFuaW1hdGlvbihhZG9wdFB0cihuZXcgRmFrZUZsb2F0VHJhbnNp
dGlvbigyLCAwLjUsIDApKSwgMiwgQ0NBY3RpdmVBbmltYXRpb246Ok9wYWNpdHkpKTsKICAgICB0
b0FkZC0+c2V0UnVuU3RhdGUoQ0NBY3RpdmVBbmltYXRpb246OldhaXRpbmdGb3JTdGFydFRpbWUs
IDApOwogICAgIHRvQWRkLT5zZXRTdGFydFRpbWUoMSk7Ci0gICAgY29udHJvbGxlci0+YWRkKHRv
QWRkLnJlbGVhc2UoKSk7CisgICAgY29udHJvbGxlci0+YWRkQW5pbWF0aW9uKHRvQWRkLnJlbGVh
c2UoKSk7CiAKLSAgICBjb250cm9sbGVyLT5hZGQoY3JlYXRlQWN0aXZlQW5pbWF0aW9uKGFkb3B0
UHRyKG5ldyBGYWtlRmxvYXRUcmFuc2l0aW9uKDEsIDAsIDAuNzUpKSwgMywgQ0NBY3RpdmVBbmlt
YXRpb246Ok9wYWNpdHkpKTsKKyAgICBjb250cm9sbGVyLT5hZGRBbmltYXRpb24oY3JlYXRlQWN0
aXZlQW5pbWF0aW9uKGFkb3B0UHRyKG5ldyBGYWtlRmxvYXRUcmFuc2l0aW9uKDEsIDAsIDAuNzUp
KSwgMywgQ0NBY3RpdmVBbmltYXRpb246Ok9wYWNpdHkpKTsKIAogICAgIC8vIEZpcnN0IDJzIG9w
YWNpdHkgdHJhbnNpdGlvbiBzaG91bGQgc3RhcnQgaW1tZWRpYXRlbHkuCiAgICAgY29udHJvbGxl
ci0+YW5pbWF0ZSgwLCBldmVudHMuZ2V0KCkpOwpAQCAtNjIwLDcgKzQyNyw3IEBAIFRFU1QoQ0NM
YXllckFuaW1hdGlvbkNvbnRyb2xsZXJUZXN0LCBUcml2aWFsTG9vcGluZykKIAogICAgIE93blB0
cjxDQ0FjdGl2ZUFuaW1hdGlvbj4gdG9BZGQoY3JlYXRlQWN0aXZlQW5pbWF0aW9uKGFkb3B0UHRy
KG5ldyBGYWtlRmxvYXRUcmFuc2l0aW9uKDEsIDAsIDEpKSwgMSwgQ0NBY3RpdmVBbmltYXRpb246
Ok9wYWNpdHkpKTsKICAgICB0b0FkZC0+c2V0SXRlcmF0aW9ucygzKTsKLSAgICBjb250cm9sbGVy
LT5hZGQodG9BZGQucmVsZWFzZSgpKTsKKyAgICBjb250cm9sbGVyLT5hZGRBbmltYXRpb24odG9B
ZGQucmVsZWFzZSgpKTsKIAogICAgIGNvbnRyb2xsZXItPmFuaW1hdGUoMCwgZXZlbnRzLmdldCgp
KTsKICAgICBFWFBFQ1RfVFJVRShjb250cm9sbGVyLT5oYXNBY3RpdmVBbmltYXRpb24oKSk7CkBA
IC02NTcsNyArNDY0LDcgQEAgVEVTVChDQ0xheWVyQW5pbWF0aW9uQ29udHJvbGxlclRlc3QsIElu
ZmluaXRlTG9vcGluZykKICAgICBjb25zdCBpbnQgaWQgPSAxOwogICAgIE93blB0cjxDQ0FjdGl2
ZUFuaW1hdGlvbj4gdG9BZGQoY3JlYXRlQWN0aXZlQW5pbWF0aW9uKGFkb3B0UHRyKG5ldyBGYWtl
RmxvYXRUcmFuc2l0aW9uKDEsIDAsIDEpKSwgaWQsIENDQWN0aXZlQW5pbWF0aW9uOjpPcGFjaXR5
KSk7CiAgICAgdG9BZGQtPnNldEl0ZXJhdGlvbnMoLTEpOwotICAgIGNvbnRyb2xsZXItPmFkZCh0
b0FkZC5yZWxlYXNlKCkpOworICAgIGNvbnRyb2xsZXItPmFkZEFuaW1hdGlvbih0b0FkZC5yZWxl
YXNlKCkpOwogCiAgICAgY29udHJvbGxlci0+YW5pbWF0ZSgwLCBldmVudHMuZ2V0KCkpOwogICAg
IEVYUEVDVF9UUlVFKGNvbnRyb2xsZXItPmhhc0FjdGl2ZUFuaW1hdGlvbigpKTsKQEAgLTY5MSw3
ICs0OTgsNyBAQCBURVNUKENDTGF5ZXJBbmltYXRpb25Db250cm9sbGVyVGVzdCwgUGF1c2VSZXN1
bWUpCiAgICAgICAgIENDTGF5ZXJBbmltYXRpb25Db250cm9sbGVyOjpjcmVhdGUoJmR1bW15KSk7
CiAKICAgICBjb25zdCBpbnQgaWQgPSAxOwotICAgIGNvbnRyb2xsZXItPmFkZChjcmVhdGVBY3Rp
dmVBbmltYXRpb24oYWRvcHRQdHIobmV3IEZha2VGbG9hdFRyYW5zaXRpb24oMSwgMCwgMSkpLCBp
ZCwgQ0NBY3RpdmVBbmltYXRpb246Ok9wYWNpdHkpKTsKKyAgICBjb250cm9sbGVyLT5hZGRBbmlt
YXRpb24oY3JlYXRlQWN0aXZlQW5pbWF0aW9uKGFkb3B0UHRyKG5ldyBGYWtlRmxvYXRUcmFuc2l0
aW9uKDEsIDAsIDEpKSwgaWQsIENDQWN0aXZlQW5pbWF0aW9uOjpPcGFjaXR5KSk7CiAKICAgICBj
b250cm9sbGVyLT5hbmltYXRlKDAsIGV2ZW50cy5nZXQoKSk7CiAgICAgRVhQRUNUX1RSVUUoY29u
dHJvbGxlci0+aGFzQWN0aXZlQW5pbWF0aW9uKCkpOwpAQCAtNzI2LDkgKzUzMyw5IEBAIFRFU1Qo
Q0NMYXllckFuaW1hdGlvbkNvbnRyb2xsZXJUZXN0LCBBYm9ydEFHcm91cGVkQW5pbWF0aW9uKQog
ICAgICAgICBDQ0xheWVyQW5pbWF0aW9uQ29udHJvbGxlcjo6Y3JlYXRlKCZkdW1teSkpOwogCiAg
ICAgY29uc3QgaW50IGlkID0gMTsKLSAgICBjb250cm9sbGVyLT5hZGQoY3JlYXRlQWN0aXZlQW5p
bWF0aW9uKGFkb3B0UHRyKG5ldyBGYWtlVHJhbnNmb3JtVHJhbnNpdGlvbigxKSksIGlkLCBDQ0Fj
dGl2ZUFuaW1hdGlvbjo6VHJhbnNmb3JtKSk7Ci0gICAgY29udHJvbGxlci0+YWRkKGNyZWF0ZUFj
dGl2ZUFuaW1hdGlvbihhZG9wdFB0cihuZXcgRmFrZUZsb2F0VHJhbnNpdGlvbigyLCAwLCAxKSks
IGlkLCBDQ0FjdGl2ZUFuaW1hdGlvbjo6T3BhY2l0eSkpOwotICAgIGNvbnRyb2xsZXItPmFkZChj
cmVhdGVBY3RpdmVBbmltYXRpb24oYWRvcHRQdHIobmV3IEZha2VGbG9hdFRyYW5zaXRpb24oMSwg
MSwgMC43NSkpLCAyLCBDQ0FjdGl2ZUFuaW1hdGlvbjo6T3BhY2l0eSkpOworICAgIGNvbnRyb2xs
ZXItPmFkZEFuaW1hdGlvbihjcmVhdGVBY3RpdmVBbmltYXRpb24oYWRvcHRQdHIobmV3IEZha2VU
cmFuc2Zvcm1UcmFuc2l0aW9uKDEpKSwgaWQsIENDQWN0aXZlQW5pbWF0aW9uOjpUcmFuc2Zvcm0p
KTsKKyAgICBjb250cm9sbGVyLT5hZGRBbmltYXRpb24oY3JlYXRlQWN0aXZlQW5pbWF0aW9uKGFk
b3B0UHRyKG5ldyBGYWtlRmxvYXRUcmFuc2l0aW9uKDIsIDAsIDEpKSwgaWQsIENDQWN0aXZlQW5p
bWF0aW9uOjpPcGFjaXR5KSk7CisgICAgY29udHJvbGxlci0+YWRkQW5pbWF0aW9uKGNyZWF0ZUFj
dGl2ZUFuaW1hdGlvbihhZG9wdFB0cihuZXcgRmFrZUZsb2F0VHJhbnNpdGlvbigxLCAxLCAwLjc1
KSksIDIsIENDQWN0aXZlQW5pbWF0aW9uOjpPcGFjaXR5KSk7CiAKICAgICBjb250cm9sbGVyLT5h
bmltYXRlKDAsIGV2ZW50cy5nZXQoKSk7CiAgICAgRVhQRUNUX1RSVUUoY29udHJvbGxlci0+aGFz
QWN0aXZlQW5pbWF0aW9uKCkpOwpAQCAtNzU4LDcgKzU2NSw3IEBAIFRFU1QoQ0NMYXllckFuaW1h
dGlvbkNvbnRyb2xsZXJUZXN0LCBGb3JjZVN5bmNXaGVuU3luY2hyb25pemVkU3RhcnRUaW1lTmVl
ZGVkKQogCiAgICAgT3duUHRyPENDQWN0aXZlQW5pbWF0aW9uPiB0b0FkZChjcmVhdGVBY3RpdmVB
bmltYXRpb24oYWRvcHRQdHIobmV3IEZha2VGbG9hdFRyYW5zaXRpb24oMiwgMCwgMSkpLCAwLCBD
Q0FjdGl2ZUFuaW1hdGlvbjo6T3BhY2l0eSkpOwogICAgIHRvQWRkLT5zZXROZWVkc1N5bmNocm9u
aXplZFN0YXJ0VGltZSh0cnVlKTsKLSAgICBjb250cm9sbGVyLT5hZGQodG9BZGQucmVsZWFzZSgp
KTsKKyAgICBjb250cm9sbGVyLT5hZGRBbmltYXRpb24odG9BZGQucmVsZWFzZSgpKTsKIAogICAg
IGNvbnRyb2xsZXItPmFuaW1hdGUoMCwgMCk7CiAgICAgRVhQRUNUX1RSVUUoY29udHJvbGxlci0+
aGFzQWN0aXZlQW5pbWF0aW9uKCkpOwpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYktpdC9jaHJvbWl1
bS90ZXN0cy9DQ0xheWVyVHJlZUhvc3RUZXN0LmNwcCBiL1NvdXJjZS9XZWJLaXQvY2hyb21pdW0v
dGVzdHMvQ0NMYXllclRyZWVIb3N0VGVzdC5jcHAKaW5kZXggYWEyN2U4OGY3ZGMzZWQ4MDgwMjEw
NjQ5Y2NkMGJlMzAwMjdjZjBiZi4uZTI3NDIyNDQ5NzI5MmZiMTM3MjdkMzkwOWZiZTdjMzUxNzYy
NDgyYSAxMDA2NDQKLS0tIGEvU291cmNlL1dlYktpdC9jaHJvbWl1bS90ZXN0cy9DQ0xheWVyVHJl
ZUhvc3RUZXN0LmNwcAorKysgYi9Tb3VyY2UvV2ViS2l0L2Nocm9taXVtL3Rlc3RzL0NDTGF5ZXJU
cmVlSG9zdFRlc3QuY3BwCkBAIC0yOTUyLDcgKzI5NTIsNyBAQCBwdWJsaWM6CiAgICAgICAgIC8v
IEFueSB2YWxpZCBDQ0FuaW1hdGlvbkN1cnZlIHdpbGwgZG8gaGVyZS4KICAgICAgICAgT3duUHRy
PENDQW5pbWF0aW9uQ3VydmU+IGN1cnZlKENDRWFzZVRpbWluZ0Z1bmN0aW9uOjpjcmVhdGUoKSk7
CiAgICAgICAgIE93blB0cjxDQ0FjdGl2ZUFuaW1hdGlvbj4gYW5pbWF0aW9uKENDQWN0aXZlQW5p
bWF0aW9uOjpjcmVhdGUoY3VydmUucmVsZWFzZSgpLCBBbmltYXRpb25JZFZlbmRvcjo6Z2V0TmV4
dEFuaW1hdGlvbklkKCksIEFuaW1hdGlvbklkVmVuZG9yOjpnZXROZXh0R3JvdXBJZCgpLCBDQ0Fj
dGl2ZUFuaW1hdGlvbjo6T3BhY2l0eSkpOwotICAgICAgICBsYXllci0+bGF5ZXJBbmltYXRpb25D
b250cm9sbGVyKCktPmFkZChhbmltYXRpb24ucmVsZWFzZSgpKTsKKyAgICAgICAgbGF5ZXItPmxh
eWVyQW5pbWF0aW9uQ29udHJvbGxlcigpLT5hZGRBbmltYXRpb24oYW5pbWF0aW9uLnJlbGVhc2Uo
KSk7CiAKICAgICAgICAgLy8gV2UgYWRkIHRoZSBhbmltYXRpb24gKmJlZm9yZSogYXR0YWNoaW5n
IHRoZSBsYXllciB0byB0aGUgdHJlZS4KICAgICAgICAgbV9sYXllclRyZWVIb3N0LT5yb290TGF5
ZXIoKS0+YWRkQ2hpbGQobGF5ZXIpOwpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYktpdC9jaHJvbWl1
bS90ZXN0cy9HcmFwaGljc0xheWVyQ2hyb21pdW1UZXN0LmNwcCBiL1NvdXJjZS9XZWJLaXQvY2hy
b21pdW0vdGVzdHMvR3JhcGhpY3NMYXllckNocm9taXVtVGVzdC5jcHAKaW5kZXggYjdhYTg1NzQ2
NWNiYWMxOGM0ODJhZWQ1ZDk3MzIzMjY1MTRkYTZhNC4uYjgzODA0OTVhZjkwMDJlNmM2OWYwNDdj
ZWRhYWY5NzIyZGYyYjM2NCAxMDA2NDQKLS0tIGEvU291cmNlL1dlYktpdC9jaHJvbWl1bS90ZXN0
cy9HcmFwaGljc0xheWVyQ2hyb21pdW1UZXN0LmNwcAorKysgYi9Tb3VyY2UvV2ViS2l0L2Nocm9t
aXVtL3Rlc3RzL0dyYXBoaWNzTGF5ZXJDaHJvbWl1bVRlc3QuY3BwCkBAIC0yNyw1NiArMjcsMzc1
IEBACiAjaW5jbHVkZSAiR3JhcGhpY3NMYXllckNocm9taXVtLmgiCiAKICNpbmNsdWRlICJDQ0Fu
aW1hdGlvblRlc3RDb21tb24uaCIKKyNpbmNsdWRlICJDb21wb3NpdG9yRmFrZUdyYXBoaWNzQ29u
dGV4dDNELmgiCisjaW5jbHVkZSAiR3JhcGhpY3NDb250ZXh0M0QuaCIKKyNpbmNsdWRlICJHcmFw
aGljc0NvbnRleHQzRFByaXZhdGUuaCIKICNpbmNsdWRlICJHcmFwaGljc0xheWVyLmgiCiAjaW5j
bHVkZSAiTGF5ZXJDaHJvbWl1bS5oIgorI2luY2x1ZGUgIk1hdHJpeDNEVHJhbnNmb3JtT3BlcmF0
aW9uLmgiCisjaW5jbHVkZSAiUm90YXRlVHJhbnNmb3JtT3BlcmF0aW9uLmgiCisjaW5jbHVkZSAi
VHJhbnNsYXRlVHJhbnNmb3JtT3BlcmF0aW9uLmgiCisjaW5jbHVkZSAiV2ViQ29tcG9zaXRvci5o
IgorCisjaW5jbHVkZSAiY2MvQ0NMYXllclRyZWVIb3N0LmgiCisjaW5jbHVkZSAiY2MvQ0NMYXll
clRyZWVIb3N0SW1wbC5oIgorI2luY2x1ZGUgImNjL0NDU2luZ2xlVGhyZWFkUHJveHkuaCIKKwog
I2luY2x1ZGUgPGd0ZXN0L2d0ZXN0Lmg+CiAjaW5jbHVkZSA8d3RmL1Bhc3NPd25QdHIuaD4KIAog
dXNpbmcgbmFtZXNwYWNlIFdlYkNvcmU7Cit1c2luZyBuYW1lc3BhY2UgV2ViS2l0OwogdXNpbmcg
bmFtZXNwYWNlIFdlYktpdFRlc3RzOwogCiBuYW1lc3BhY2UgewogCiBjbGFzcyBNb2NrR3JhcGhp
Y3NMYXllckNsaWVudCA6IHB1YmxpYyBHcmFwaGljc0xheWVyQ2xpZW50IHsKICAgcHVibGljOgot
ICAgIHZpcnR1YWwgdm9pZCBub3RpZnlBbmltYXRpb25TdGFydGVkKGNvbnN0IEdyYXBoaWNzTGF5
ZXIqLCBkb3VibGUgdGltZSkgeyB9Ci0gICAgdmlydHVhbCB2b2lkIG5vdGlmeVN5bmNSZXF1aXJl
ZChjb25zdCBHcmFwaGljc0xheWVyKikgeyB9Ci0gICAgdmlydHVhbCB2b2lkIHBhaW50Q29udGVu
dHMoY29uc3QgR3JhcGhpY3NMYXllciosIEdyYXBoaWNzQ29udGV4dCYsIEdyYXBoaWNzTGF5ZXJQ
YWludGluZ1BoYXNlLCBjb25zdCBJbnRSZWN0JiBpbkNsaXApIHsgfQotICAgIHZpcnR1YWwgYm9v
bCBzaG93RGVidWdCb3JkZXJzKGNvbnN0IEdyYXBoaWNzTGF5ZXIqKSBjb25zdCB7IHJldHVybiBm
YWxzZTsgfQotICAgIHZpcnR1YWwgYm9vbCBzaG93UmVwYWludENvdW50ZXIoY29uc3QgR3JhcGhp
Y3NMYXllciopIGNvbnN0IHsgcmV0dXJuIGZhbHNlOyB9CisgICAgdmlydHVhbCB2b2lkIG5vdGlm
eUFuaW1hdGlvblN0YXJ0ZWQoY29uc3QgR3JhcGhpY3NMYXllciosIGRvdWJsZSB0aW1lKSBPVkVS
UklERSB7IH0KKyAgICB2aXJ0dWFsIHZvaWQgbm90aWZ5U3luY1JlcXVpcmVkKGNvbnN0IEdyYXBo
aWNzTGF5ZXIqKSBPVkVSUklERSB7IH0KKyAgICB2aXJ0dWFsIHZvaWQgcGFpbnRDb250ZW50cyhj
b25zdCBHcmFwaGljc0xheWVyKiwgR3JhcGhpY3NDb250ZXh0JiwgR3JhcGhpY3NMYXllclBhaW50
aW5nUGhhc2UsIGNvbnN0IEludFJlY3QmIGluQ2xpcCkgT1ZFUlJJREUgeyB9CisgICAgdmlydHVh
bCBib29sIHNob3dEZWJ1Z0JvcmRlcnMoY29uc3QgR3JhcGhpY3NMYXllciopIGNvbnN0IE9WRVJS
SURFIHsgcmV0dXJuIGZhbHNlOyB9CisgICAgdmlydHVhbCBib29sIHNob3dSZXBhaW50Q291bnRl
cihjb25zdCBHcmFwaGljc0xheWVyKikgY29uc3QgT1ZFUlJJREUgeyByZXR1cm4gZmFsc2U7IH0K
IH07CiAKLVRFU1QoR3JhcGhpY3NMYXllckNocm9taXVtVGVzdCwgdXBkYXRlTGF5ZXJQcmVzZXJ2
ZXMzRFdpdGhBbmltYXRpb25zKQotewotICAgIE1vY2tHcmFwaGljc0xheWVyQ2xpZW50IGNsaWVu
dDsKLSAgICBPd25QdHI8R3JhcGhpY3NMYXllckNocm9taXVtPiBncmFwaGljc0xheWVyID0gc3Rh
dGljX3BvaW50ZXJfY2FzdDxHcmFwaGljc0xheWVyQ2hyb21pdW0+KEdyYXBoaWNzTGF5ZXI6OmNy
ZWF0ZSgmY2xpZW50KSk7Ci0gICAgQVNTRVJUX1RSVUUoZ3JhcGhpY3NMYXllci5nZXQoKSk7Citj
bGFzcyBNb2NrTGF5ZXJUcmVlSG9zdENsaWVudCA6IHB1YmxpYyBDQ0xheWVyVHJlZUhvc3RDbGll
bnQgeworcHVibGljOgorICAgIHZpcnR1YWwgdm9pZCB3aWxsQmVnaW5GcmFtZSgpIE9WRVJSSURF
IHsgfQorICAgIHZpcnR1YWwgdm9pZCBkaWRCZWdpbkZyYW1lKCkgT1ZFUlJJREUgeyB9CisgICAg
dmlydHVhbCB2b2lkIHVwZGF0ZUFuaW1hdGlvbnMoZG91YmxlIGZyYW1lQmVnaW5UaW1lKSBPVkVS
UklERSB7IH0KKyAgICB2aXJ0dWFsIHZvaWQgbGF5b3V0KCkgT1ZFUlJJREUgeyB9CisgICAgdmly
dHVhbCB2b2lkIGFwcGx5U2Nyb2xsQW5kU2NhbGUoY29uc3QgSW50U2l6ZSYgc2Nyb2xsRGVsdGEs
IGZsb2F0IHBhZ2VTY2FsZSkgT1ZFUlJJREUgeyB9CisgICAgdmlydHVhbCBQYXNzUmVmUHRyPEdy
YXBoaWNzQ29udGV4dDNEPiBjcmVhdGVDb250ZXh0M0QoKSBPVkVSUklERQorICAgIHsKKyAgICAg
ICAgR3JhcGhpY3NDb250ZXh0M0Q6OkF0dHJpYnV0ZXMgYXR0cnM7CisgICAgICAgIHJldHVybiBj
cmVhdGVDb21wb3NpdG9yTW9ja0dyYXBoaWNzQ29udGV4dDNEKGF0dHJzKTsKKyAgICB9CisgICAg
dmlydHVhbCB2b2lkIGRpZFJlY3JlYXRlQ29udGV4dChib29sIHN1Y2Nlc3MpIE9WRVJSSURFIHsg
fQorICAgIHZpcnR1YWwgdm9pZCB3aWxsQ29tbWl0KCkgT1ZFUlJJREUgeyB9CisgICAgdmlydHVh
bCB2b2lkIGRpZENvbW1pdCgpIE9WRVJSSURFIHsgfQorICAgIHZpcnR1YWwgdm9pZCBkaWRDb21t
aXRBbmREcmF3RnJhbWUoKSBPVkVSUklERSB7IH0KKyAgICB2aXJ0dWFsIHZvaWQgZGlkQ29tcGxl
dGVTd2FwQnVmZmVycygpIE9WRVJSSURFIHsgfQorICAgIHZpcnR1YWwgdm9pZCBzY2hlZHVsZUNv
bXBvc2l0ZSgpIE9WRVJSSURFIHsgfQorfTsKKworY2xhc3MgTW9ja0xheWVyVHJlZUhvc3QgOiBw
dWJsaWMgQ0NMYXllclRyZWVIb3N0IHsKK3B1YmxpYzoKKyAgICBzdGF0aWMgUGFzc093blB0cjxN
b2NrTGF5ZXJUcmVlSG9zdD4gY3JlYXRlKCkKKyAgICB7CisgICAgICAgIC8vIEZvciB0aGVzZSB0
ZXN0cywgd2Ugd2lsbCBlbmFibGUgdGhyZWFkZWQgYW5pbWF0aW9ucy4KKyAgICAgICAgQ0NTZXR0
aW5ncyBzZXR0aW5nczsKKyAgICAgICAgc2V0dGluZ3MudGhyZWFkZWRBbmltYXRpb25FbmFibGVk
ID0gdHJ1ZTsKKyAgICAgICAgT3duUHRyPE1vY2tMYXllclRyZWVIb3N0PiBsYXllclRyZWVIb3N0
KGFkb3B0UHRyKG5ldyBNb2NrTGF5ZXJUcmVlSG9zdChuZXcgTW9ja0xheWVyVHJlZUhvc3RDbGll
bnQoKSwgc2V0dGluZ3MpKSk7CisgICAgICAgIGJvb2wgc3VjY2VzcyA9IGxheWVyVHJlZUhvc3Qt
PmluaXRpYWxpemUoKTsKKyAgICAgICAgRVhQRUNUX1RSVUUoc3VjY2Vzcyk7CisgICAgICAgIGxh
eWVyVHJlZUhvc3QtPnNldFJvb3RMYXllcihMYXllckNocm9taXVtOjpjcmVhdGUoKSk7CisgICAg
ICAgIGxheWVyVHJlZUhvc3QtPnNldFZpZXdwb3J0U2l6ZShJbnRTaXplKDEsIDEpKTsKKyAgICAg
ICAgcmV0dXJuIGxheWVyVHJlZUhvc3QucmVsZWFzZSgpOworICAgIH0KKworICAgIHZpcnR1YWwg
UGFzc093blB0cjxDQ0xheWVyVHJlZUhvc3RJbXBsPiBjcmVhdGVMYXllclRyZWVIb3N0SW1wbChD
Q0xheWVyVHJlZUhvc3RJbXBsQ2xpZW50KiBjbGllbnQpCisgICAgeworICAgICAgICAvLyBGb3Ig
dGhlc2UgdGVzdHMsIHdlIHdpbGwgZW5hYmxlIHRocmVhZGVkIGFuaW1hdGlvbnMuCisgICAgICAg
IENDU2V0dGluZ3MgY29weVNldHRpbmdzID0gc2V0dGluZ3MoKTsKKyAgICAgICAgY29weVNldHRp
bmdzLnRocmVhZGVkQW5pbWF0aW9uRW5hYmxlZCA9IHRydWU7CisgICAgICAgIHJldHVybiBDQ0xh
eWVyVHJlZUhvc3RJbXBsOjpjcmVhdGUoY29weVNldHRpbmdzLCBjbGllbnQpOworICAgIH0KKwor
cHJpdmF0ZToKKyAgICBNb2NrTGF5ZXJUcmVlSG9zdChDQ0xheWVyVHJlZUhvc3RDbGllbnQqIGNs
aWVudCwgY29uc3QgQ0NTZXR0aW5ncyYgc2V0dGluZ3MpCisgICAgICAgIDogQ0NMYXllclRyZWVI
b3N0KGNsaWVudCwgc2V0dGluZ3MpCisgICAgeworICAgIH0KK307CisKK2NsYXNzIEdyYXBoaWNz
TGF5ZXJDaHJvbWl1bVRlc3QgOiBwdWJsaWMgdGVzdGluZzo6VGVzdCB7CitwdWJsaWM6CisgICAg
R3JhcGhpY3NMYXllckNocm9taXVtVGVzdCgpCisgICAgeworICAgICAgICBXZWJDb21wb3NpdG9y
Ojppbml0aWFsaXplKDApOworICAgICAgICBtX2dyYXBoaWNzTGF5ZXIgPSBzdGF0aWNfcG9pbnRl
cl9jYXN0PEdyYXBoaWNzTGF5ZXJDaHJvbWl1bT4oR3JhcGhpY3NMYXllcjo6Y3JlYXRlKCZtX2Ns
aWVudCkpOworICAgICAgICBtX3BsYXRmb3JtTGF5ZXIgPSBzdGF0aWNfY2FzdDxMYXllckNocm9t
aXVtKj4obV9ncmFwaGljc0xheWVyLT5wbGF0Zm9ybUxheWVyKCkpOworICAgICAgICBtX2xheWVy
VHJlZUhvc3QgPSBNb2NrTGF5ZXJUcmVlSG9zdDo6Y3JlYXRlKCk7CisgICAgICAgIG1fcGxhdGZv
cm1MYXllci0+c2V0TGF5ZXJUcmVlSG9zdChtX2xheWVyVHJlZUhvc3QuZ2V0KCkpOworICAgIH0K
KworICAgIHZpcnR1YWwgfkdyYXBoaWNzTGF5ZXJDaHJvbWl1bVRlc3QoKQorICAgIHsKKyAgICAg
ICAgbV9ncmFwaGljc0xheWVyLmNsZWFyKCk7CisgICAgICAgIG1fbGF5ZXJUcmVlSG9zdC5jbGVh
cigpOworICAgICAgICBXZWJDb21wb3NpdG9yOjpzaHV0ZG93bigpOworICAgIH0KKworcHJvdGVj
dGVkOgorICAgIHN0YXRpYyB2b2lkIGV4cGVjdFRyYW5zbGF0ZVgoZG91YmxlIHRyYW5zbGF0ZVgs
IGNvbnN0IFdlYlRyYW5zZm9ybWF0aW9uTWF0cml4JiBtYXRyaXgpCisgICAgeworICAgICAgICBF
WFBFQ1RfRkxPQVRfRVEodHJhbnNsYXRlWCwgbWF0cml4Lm00MSgpKTsKKyAgICB9CisKKyAgICBM
YXllckNocm9taXVtKiBtX3BsYXRmb3JtTGF5ZXI7CisgICAgT3duUHRyPEdyYXBoaWNzTGF5ZXJD
aHJvbWl1bT4gbV9ncmFwaGljc0xheWVyOworICAgIE93blB0cjxDQ0xheWVyVHJlZUhvc3Q+IG1f
bGF5ZXJUcmVlSG9zdDsKIAotICAgIExheWVyQ2hyb21pdW0qIHBsYXRmb3JtTGF5ZXIgPSBzdGF0
aWNfY2FzdDxMYXllckNocm9taXVtKj4oZ3JhcGhpY3NMYXllci0+cGxhdGZvcm1MYXllcigpKTsK
LSAgICBBU1NFUlRfVFJVRShwbGF0Zm9ybUxheWVyKTsKK3ByaXZhdGU6CisgICAgTW9ja0dyYXBo
aWNzTGF5ZXJDbGllbnQgbV9jbGllbnQ7CisgICAgRGVidWdTY29wZWRTZXRNYWluVGhyZWFkIG1f
bWFpbjsKK307CiAKLSAgICBBU1NFUlRfRkFMU0UocGxhdGZvcm1MYXllci0+aGFzQWN0aXZlQW5p
bWF0aW9uKCkpOworVEVTVF9GKEdyYXBoaWNzTGF5ZXJDaHJvbWl1bVRlc3QsIHVwZGF0ZUxheWVy
UHJlc2VydmVzM0RXaXRoQW5pbWF0aW9ucykKK3sKKyAgICBBU1NFUlRfRkFMU0UobV9wbGF0Zm9y
bUxheWVyLT5oYXNBY3RpdmVBbmltYXRpb24oKSk7CiAKICAgICBPd25QdHI8Q0NBY3RpdmVBbmlt
YXRpb24+IGZsb2F0QW5pbWF0aW9uKENDQWN0aXZlQW5pbWF0aW9uOjpjcmVhdGUoYWRvcHRQdHIo
bmV3IEZha2VGbG9hdEFuaW1hdGlvbkN1cnZlKSwgMCwgMSwgQ0NBY3RpdmVBbmltYXRpb246Ok9w
YWNpdHkpKTsKLSAgICBwbGF0Zm9ybUxheWVyLT5sYXllckFuaW1hdGlvbkNvbnRyb2xsZXIoKS0+
YWRkKGZsb2F0QW5pbWF0aW9uLnJlbGVhc2UoKSk7CisgICAgbV9wbGF0Zm9ybUxheWVyLT5sYXll
ckFuaW1hdGlvbkNvbnRyb2xsZXIoKS0+YWRkQW5pbWF0aW9uKGZsb2F0QW5pbWF0aW9uLnJlbGVh
c2UoKSk7CisKKyAgICBBU1NFUlRfVFJVRShtX3BsYXRmb3JtTGF5ZXItPmhhc0FjdGl2ZUFuaW1h
dGlvbigpKTsKKworICAgIG1fZ3JhcGhpY3NMYXllci0+c2V0UHJlc2VydmVzM0QodHJ1ZSk7CisK
KyAgICBtX3BsYXRmb3JtTGF5ZXIgPSBzdGF0aWNfY2FzdDxMYXllckNocm9taXVtKj4obV9ncmFw
aGljc0xheWVyLT5wbGF0Zm9ybUxheWVyKCkpOworICAgIEFTU0VSVF9UUlVFKG1fcGxhdGZvcm1M
YXllcik7CisKKyAgICBBU1NFUlRfVFJVRShtX3BsYXRmb3JtTGF5ZXItPmhhc0FjdGl2ZUFuaW1h
dGlvbigpKTsKKyAgICBtX3BsYXRmb3JtTGF5ZXItPnJlbW92ZUFuaW1hdGlvbigwKTsKKyAgICBB
U1NFUlRfRkFMU0UobV9wbGF0Zm9ybUxheWVyLT5oYXNBY3RpdmVBbmltYXRpb24oKSk7CisKKyAg
ICBtX2dyYXBoaWNzTGF5ZXItPnNldFByZXNlcnZlczNEKGZhbHNlKTsKKworICAgIG1fcGxhdGZv
cm1MYXllciA9IHN0YXRpY19jYXN0PExheWVyQ2hyb21pdW0qPihtX2dyYXBoaWNzTGF5ZXItPnBs
YXRmb3JtTGF5ZXIoKSk7CisgICAgQVNTRVJUX1RSVUUobV9wbGF0Zm9ybUxheWVyKTsKKworICAg
IEFTU0VSVF9GQUxTRShtX3BsYXRmb3JtTGF5ZXItPmhhc0FjdGl2ZUFuaW1hdGlvbigpKTsKK30K
KworVEVTVF9GKEdyYXBoaWNzTGF5ZXJDaHJvbWl1bVRlc3QsIGNyZWF0ZU9wYWNpdHlBbmltYXRp
b24pCit7CisgICAgY29uc3QgZG91YmxlIGR1cmF0aW9uID0gMTsKKyAgICBXZWJDb3JlOjpLZXlm
cmFtZVZhbHVlTGlzdCB2YWx1ZXMoQW5pbWF0ZWRQcm9wZXJ0eU9wYWNpdHkpOworICAgIHZhbHVl
cy5pbnNlcnQobmV3IEZsb2F0QW5pbWF0aW9uVmFsdWUoMCwgMCkpOworICAgIHZhbHVlcy5pbnNl
cnQobmV3IEZsb2F0QW5pbWF0aW9uVmFsdWUoZHVyYXRpb24sIDEpKTsKKworICAgIFJlZlB0cjxB
bmltYXRpb24+IGFuaW1hdGlvbiA9IEFuaW1hdGlvbjo6Y3JlYXRlKCk7CisgICAgYW5pbWF0aW9u
LT5zZXREdXJhdGlvbihkdXJhdGlvbik7CisKKyAgICBJbnRTaXplIGJveFNpemU7CisgICAgYm9v
bCBhZGRlZEFuaW1hdGlvbiA9IG1fZ3JhcGhpY3NMYXllci0+YWRkQW5pbWF0aW9uKHZhbHVlcywg
Ym94U2l6ZSwgYW5pbWF0aW9uLmdldCgpLCAiIiwgMCk7CisKKyAgICBFWFBFQ1RfVFJVRShhZGRl
ZEFuaW1hdGlvbik7CisKKyAgICBFWFBFQ1RfVFJVRShtX3BsYXRmb3JtTGF5ZXItPmxheWVyQW5p
bWF0aW9uQ29udHJvbGxlcigpLT5oYXNBY3RpdmVBbmltYXRpb24oKSk7CisKKyAgICBDQ0FjdGl2
ZUFuaW1hdGlvbiogYWN0aXZlQW5pbWF0aW9uID0gbV9wbGF0Zm9ybUxheWVyLT5sYXllckFuaW1h
dGlvbkNvbnRyb2xsZXIoKS0+Z2V0QWN0aXZlQW5pbWF0aW9uKENDQWN0aXZlQW5pbWF0aW9uOjpP
cGFjaXR5KTsKKyAgICBFWFBFQ1RfVFJVRShhY3RpdmVBbmltYXRpb24pOworCisgICAgRVhQRUNU
X0VRKDEsIGFjdGl2ZUFuaW1hdGlvbi0+aXRlcmF0aW9ucygpKTsKKyAgICBFWFBFQ1RfRVEoQ0NB
Y3RpdmVBbmltYXRpb246Ok9wYWNpdHksIGFjdGl2ZUFuaW1hdGlvbi0+dGFyZ2V0UHJvcGVydHko
KSk7CisKKyAgICBFWFBFQ1RfRVEoQ0NBbmltYXRpb25DdXJ2ZTo6RmxvYXQsIGFjdGl2ZUFuaW1h
dGlvbi0+Y3VydmUoKS0+dHlwZSgpKTsKKworICAgIGNvbnN0IENDRmxvYXRBbmltYXRpb25DdXJ2
ZSogY3VydmUgPSBhY3RpdmVBbmltYXRpb24tPmN1cnZlKCktPnRvRmxvYXRBbmltYXRpb25DdXJ2
ZSgpOworICAgIEVYUEVDVF9UUlVFKGN1cnZlKTsKKworICAgIEVYUEVDVF9FUSgwLCBjdXJ2ZS0+
Z2V0VmFsdWUoMCkpOworICAgIEVYUEVDVF9FUSgxLCBjdXJ2ZS0+Z2V0VmFsdWUoZHVyYXRpb24p
KTsKK30KKworVEVTVF9GKEdyYXBoaWNzTGF5ZXJDaHJvbWl1bVRlc3QsIGNyZWF0ZVRyYW5zZm9y
bUFuaW1hdGlvbikKK3sKKyAgICBjb25zdCBkb3VibGUgZHVyYXRpb24gPSAxOworICAgIFdlYkNv
cmU6OktleWZyYW1lVmFsdWVMaXN0IHZhbHVlcyhBbmltYXRlZFByb3BlcnR5V2Via2l0VHJhbnNm
b3JtKTsKKworICAgIFRyYW5zZm9ybU9wZXJhdGlvbnMgb3BlcmF0aW9uczE7CisgICAgb3BlcmF0
aW9uczEub3BlcmF0aW9ucygpLmFwcGVuZChUcmFuc2xhdGVUcmFuc2Zvcm1PcGVyYXRpb246OmNy
ZWF0ZShMZW5ndGgoMiwgV2ViQ29yZTo6Rml4ZWQpLCBMZW5ndGgoMCwgV2ViQ29yZTo6Rml4ZWQp
LCBUcmFuc2Zvcm1PcGVyYXRpb246OlRSQU5TTEFURV9YKSk7CisgICAgdmFsdWVzLmluc2VydChu
ZXcgVHJhbnNmb3JtQW5pbWF0aW9uVmFsdWUoMCwgJm9wZXJhdGlvbnMxKSk7CisKKyAgICBUcmFu
c2Zvcm1PcGVyYXRpb25zIG9wZXJhdGlvbnMyOworICAgIG9wZXJhdGlvbnMyLm9wZXJhdGlvbnMo
KS5hcHBlbmQoVHJhbnNsYXRlVHJhbnNmb3JtT3BlcmF0aW9uOjpjcmVhdGUoTGVuZ3RoKDQsIFdl
YkNvcmU6OkZpeGVkKSwgTGVuZ3RoKDAsIFdlYkNvcmU6OkZpeGVkKSwgVHJhbnNmb3JtT3BlcmF0
aW9uOjpUUkFOU0xBVEVfWCkpOworICAgIHZhbHVlcy5pbnNlcnQobmV3IFRyYW5zZm9ybUFuaW1h
dGlvblZhbHVlKGR1cmF0aW9uLCAmb3BlcmF0aW9uczIpKTsKKworICAgIFJlZlB0cjxBbmltYXRp
b24+IGFuaW1hdGlvbiA9IEFuaW1hdGlvbjo6Y3JlYXRlKCk7CisgICAgYW5pbWF0aW9uLT5zZXRE
dXJhdGlvbihkdXJhdGlvbik7CisKKyAgICBJbnRTaXplIGJveFNpemU7CisgICAgbV9ncmFwaGlj
c0xheWVyLT5hZGRBbmltYXRpb24odmFsdWVzLCBib3hTaXplLCBhbmltYXRpb24uZ2V0KCksICIi
LCAwKTsKKworICAgIEVYUEVDVF9UUlVFKG1fcGxhdGZvcm1MYXllci0+bGF5ZXJBbmltYXRpb25D
b250cm9sbGVyKCktPmhhc0FjdGl2ZUFuaW1hdGlvbigpKTsKKworICAgIENDQWN0aXZlQW5pbWF0
aW9uKiBhY3RpdmVBbmltYXRpb24gPSBtX3BsYXRmb3JtTGF5ZXItPmxheWVyQW5pbWF0aW9uQ29u
dHJvbGxlcigpLT5nZXRBY3RpdmVBbmltYXRpb24oQ0NBY3RpdmVBbmltYXRpb246OlRyYW5zZm9y
bSk7CisgICAgRVhQRUNUX1RSVUUoYWN0aXZlQW5pbWF0aW9uKTsKKworICAgIEVYUEVDVF9FUSgx
LCBhY3RpdmVBbmltYXRpb24tPml0ZXJhdGlvbnMoKSk7CisgICAgRVhQRUNUX0VRKENDQWN0aXZl
QW5pbWF0aW9uOjpUcmFuc2Zvcm0sIGFjdGl2ZUFuaW1hdGlvbi0+dGFyZ2V0UHJvcGVydHkoKSk7
CisKKyAgICBFWFBFQ1RfRVEoQ0NBbmltYXRpb25DdXJ2ZTo6VHJhbnNmb3JtLCBhY3RpdmVBbmlt
YXRpb24tPmN1cnZlKCktPnR5cGUoKSk7CisKKyAgICBjb25zdCBDQ1RyYW5zZm9ybUFuaW1hdGlv
bkN1cnZlKiBjdXJ2ZSA9IGFjdGl2ZUFuaW1hdGlvbi0+Y3VydmUoKS0+dG9UcmFuc2Zvcm1Bbmlt
YXRpb25DdXJ2ZSgpOworICAgIEVYUEVDVF9UUlVFKGN1cnZlKTsKKworICAgIGV4cGVjdFRyYW5z
bGF0ZVgoMiwgY3VydmUtPmdldFZhbHVlKDApKTsKKyAgICBleHBlY3RUcmFuc2xhdGVYKDQsIGN1
cnZlLT5nZXRWYWx1ZShkdXJhdGlvbikpOworfQorCitURVNUX0YoR3JhcGhpY3NMYXllckNocm9t
aXVtVGVzdCwgY3JlYXRlVHJhbnNmb3JtQW5pbWF0aW9uV2l0aEJpZ1JvdGF0aW9uKQoreworICAg
IGNvbnN0IGRvdWJsZSBkdXJhdGlvbiA9IDE7CisgICAgV2ViQ29yZTo6S2V5ZnJhbWVWYWx1ZUxp
c3QgdmFsdWVzKEFuaW1hdGVkUHJvcGVydHlXZWJraXRUcmFuc2Zvcm0pOworCisgICAgVHJhbnNm
b3JtT3BlcmF0aW9ucyBvcGVyYXRpb25zMTsKKyAgICBvcGVyYXRpb25zMS5vcGVyYXRpb25zKCku
YXBwZW5kKFJvdGF0ZVRyYW5zZm9ybU9wZXJhdGlvbjo6Y3JlYXRlKDAsIFRyYW5zZm9ybU9wZXJh
dGlvbjo6Uk9UQVRFKSk7CisgICAgdmFsdWVzLmluc2VydChuZXcgVHJhbnNmb3JtQW5pbWF0aW9u
VmFsdWUoMCwgJm9wZXJhdGlvbnMxKSk7CisKKyAgICBUcmFuc2Zvcm1PcGVyYXRpb25zIG9wZXJh
dGlvbnMyOworICAgIG9wZXJhdGlvbnMyLm9wZXJhdGlvbnMoKS5hcHBlbmQoUm90YXRlVHJhbnNm
b3JtT3BlcmF0aW9uOjpjcmVhdGUoMjcwLCBUcmFuc2Zvcm1PcGVyYXRpb246OlJPVEFURSkpOwor
ICAgIHZhbHVlcy5pbnNlcnQobmV3IFRyYW5zZm9ybUFuaW1hdGlvblZhbHVlKGR1cmF0aW9uLCAm
b3BlcmF0aW9uczIpKTsKKworICAgIFJlZlB0cjxBbmltYXRpb24+IGFuaW1hdGlvbiA9IEFuaW1h
dGlvbjo6Y3JlYXRlKCk7CisgICAgYW5pbWF0aW9uLT5zZXREdXJhdGlvbihkdXJhdGlvbik7CisK
KyAgICBJbnRTaXplIGJveFNpemU7CisgICAgbV9ncmFwaGljc0xheWVyLT5hZGRBbmltYXRpb24o
dmFsdWVzLCBib3hTaXplLCBhbmltYXRpb24uZ2V0KCksICIiLCAwKTsKKworICAgIEVYUEVDVF9G
QUxTRShtX3BsYXRmb3JtTGF5ZXItPmxheWVyQW5pbWF0aW9uQ29udHJvbGxlcigpLT5oYXNBY3Rp
dmVBbmltYXRpb24oKSk7Cit9CisKK1RFU1RfRihHcmFwaGljc0xheWVyQ2hyb21pdW1UZXN0LCBj
cmVhdGVUcmFuc2Zvcm1BbmltYXRpb25XaXRoU2luZ3VsYXJNYXRyaXgpCit7CisgICAgY29uc3Qg
ZG91YmxlIGR1cmF0aW9uID0gMTsKKyAgICBXZWJDb3JlOjpLZXlmcmFtZVZhbHVlTGlzdCB2YWx1
ZXMoQW5pbWF0ZWRQcm9wZXJ0eVdlYmtpdFRyYW5zZm9ybSk7CisKKyAgICBUcmFuc2Zvcm1hdGlv
bk1hdHJpeCBtYXRyaXgxOworICAgIFRyYW5zZm9ybU9wZXJhdGlvbnMgb3BlcmF0aW9uczE7Cisg
ICAgb3BlcmF0aW9uczEub3BlcmF0aW9ucygpLmFwcGVuZChNYXRyaXgzRFRyYW5zZm9ybU9wZXJh
dGlvbjo6Y3JlYXRlKG1hdHJpeDEpKTsKKyAgICB2YWx1ZXMuaW5zZXJ0KG5ldyBUcmFuc2Zvcm1B
bmltYXRpb25WYWx1ZSgwLCAmb3BlcmF0aW9uczEpKTsKKworICAgIFRyYW5zZm9ybWF0aW9uTWF0
cml4IG1hdHJpeDI7CisgICAgbWF0cml4Mi5zZXRNMTEoMCk7CisgICAgVHJhbnNmb3JtT3BlcmF0
aW9ucyBvcGVyYXRpb25zMjsKKyAgICBvcGVyYXRpb25zMi5vcGVyYXRpb25zKCkuYXBwZW5kKE1h
dHJpeDNEVHJhbnNmb3JtT3BlcmF0aW9uOjpjcmVhdGUobWF0cml4MikpOworICAgIHZhbHVlcy5p
bnNlcnQobmV3IFRyYW5zZm9ybUFuaW1hdGlvblZhbHVlKGR1cmF0aW9uLCAmb3BlcmF0aW9uczIp
KTsKKworICAgIFJlZlB0cjxBbmltYXRpb24+IGFuaW1hdGlvbiA9IEFuaW1hdGlvbjo6Y3JlYXRl
KCk7CisgICAgYW5pbWF0aW9uLT5zZXREdXJhdGlvbihkdXJhdGlvbik7CisKKyAgICBJbnRTaXpl
IGJveFNpemU7CisgICAgbV9ncmFwaGljc0xheWVyLT5hZGRBbmltYXRpb24odmFsdWVzLCBib3hT
aXplLCBhbmltYXRpb24uZ2V0KCksICIiLCAwKTsKKworICAgIEVYUEVDVF9GQUxTRShtX3BsYXRm
b3JtTGF5ZXItPmxheWVyQW5pbWF0aW9uQ29udHJvbGxlcigpLT5oYXNBY3RpdmVBbmltYXRpb24o
KSk7Cit9CisKK1RFU1RfRihHcmFwaGljc0xheWVyQ2hyb21pdW1UZXN0LCBjcmVhdGVSZXZlcnNl
ZEFuaW1hdGlvbikKK3sKKyAgICBjb25zdCBkb3VibGUgZHVyYXRpb24gPSAxOworICAgIFdlYkNv
cmU6OktleWZyYW1lVmFsdWVMaXN0IHZhbHVlcyhBbmltYXRlZFByb3BlcnR5V2Via2l0VHJhbnNm
b3JtKTsKKworICAgIFRyYW5zZm9ybU9wZXJhdGlvbnMgb3BlcmF0aW9uczE7CisgICAgb3BlcmF0
aW9uczEub3BlcmF0aW9ucygpLmFwcGVuZChUcmFuc2xhdGVUcmFuc2Zvcm1PcGVyYXRpb246OmNy
ZWF0ZShMZW5ndGgoMiwgV2ViQ29yZTo6Rml4ZWQpLCBMZW5ndGgoMCwgV2ViQ29yZTo6Rml4ZWQp
LCBUcmFuc2Zvcm1PcGVyYXRpb246OlRSQU5TTEFURV9YKSk7CisgICAgdmFsdWVzLmluc2VydChu
ZXcgVHJhbnNmb3JtQW5pbWF0aW9uVmFsdWUoMCwgJm9wZXJhdGlvbnMxKSk7CisKKyAgICBUcmFu
c2Zvcm1PcGVyYXRpb25zIG9wZXJhdGlvbnMyOworICAgIG9wZXJhdGlvbnMyLm9wZXJhdGlvbnMo
KS5hcHBlbmQoVHJhbnNsYXRlVHJhbnNmb3JtT3BlcmF0aW9uOjpjcmVhdGUoTGVuZ3RoKDQsIFdl
YkNvcmU6OkZpeGVkKSwgTGVuZ3RoKDAsIFdlYkNvcmU6OkZpeGVkKSwgVHJhbnNmb3JtT3BlcmF0
aW9uOjpUUkFOU0xBVEVfWCkpOworICAgIHZhbHVlcy5pbnNlcnQobmV3IFRyYW5zZm9ybUFuaW1h
dGlvblZhbHVlKGR1cmF0aW9uLCAmb3BlcmF0aW9uczIpKTsKKworICAgIFJlZlB0cjxBbmltYXRp
b24+IGFuaW1hdGlvbiA9IEFuaW1hdGlvbjo6Y3JlYXRlKCk7CisgICAgYW5pbWF0aW9uLT5zZXRE
dXJhdGlvbihkdXJhdGlvbik7CisgICAgYW5pbWF0aW9uLT5zZXREaXJlY3Rpb24oQW5pbWF0aW9u
OjpBbmltYXRpb25EaXJlY3Rpb25SZXZlcnNlKTsKKworICAgIEludFNpemUgYm94U2l6ZTsKKyAg
ICBtX2dyYXBoaWNzTGF5ZXItPmFkZEFuaW1hdGlvbih2YWx1ZXMsIGJveFNpemUsIGFuaW1hdGlv
bi5nZXQoKSwgIiIsIDApOworCisgICAgRVhQRUNUX1RSVUUobV9wbGF0Zm9ybUxheWVyLT5sYXll
ckFuaW1hdGlvbkNvbnRyb2xsZXIoKS0+aGFzQWN0aXZlQW5pbWF0aW9uKCkpOworCisgICAgQ0NB
Y3RpdmVBbmltYXRpb24qIGFjdGl2ZUFuaW1hdGlvbiA9IG1fcGxhdGZvcm1MYXllci0+bGF5ZXJB
bmltYXRpb25Db250cm9sbGVyKCktPmdldEFjdGl2ZUFuaW1hdGlvbihDQ0FjdGl2ZUFuaW1hdGlv
bjo6VHJhbnNmb3JtKTsKKyAgICBFWFBFQ1RfVFJVRShhY3RpdmVBbmltYXRpb24pOworCisgICAg
RVhQRUNUX0VRKDEsIGFjdGl2ZUFuaW1hdGlvbi0+aXRlcmF0aW9ucygpKTsKKyAgICBFWFBFQ1Rf
RVEoQ0NBY3RpdmVBbmltYXRpb246OlRyYW5zZm9ybSwgYWN0aXZlQW5pbWF0aW9uLT50YXJnZXRQ
cm9wZXJ0eSgpKTsKKworICAgIEVYUEVDVF9FUShDQ0FuaW1hdGlvbkN1cnZlOjpUcmFuc2Zvcm0s
IGFjdGl2ZUFuaW1hdGlvbi0+Y3VydmUoKS0+dHlwZSgpKTsKKworICAgIGNvbnN0IENDVHJhbnNm
b3JtQW5pbWF0aW9uQ3VydmUqIGN1cnZlID0gYWN0aXZlQW5pbWF0aW9uLT5jdXJ2ZSgpLT50b1Ry
YW5zZm9ybUFuaW1hdGlvbkN1cnZlKCk7CisgICAgRVhQRUNUX1RSVUUoY3VydmUpOworCisgICAg
ZXhwZWN0VHJhbnNsYXRlWCg0LCBjdXJ2ZS0+Z2V0VmFsdWUoMCkpOworICAgIGV4cGVjdFRyYW5z
bGF0ZVgoMiwgY3VydmUtPmdldFZhbHVlKGR1cmF0aW9uKSk7Cit9CisKK1RFU1RfRihHcmFwaGlj
c0xheWVyQ2hyb21pdW1UZXN0LCBjcmVhdGVBbHRlcm5hdGluZ0FuaW1hdGlvbikKK3sKKyAgICBj
b25zdCBkb3VibGUgZHVyYXRpb24gPSAxOworICAgIFdlYkNvcmU6OktleWZyYW1lVmFsdWVMaXN0
IHZhbHVlcyhBbmltYXRlZFByb3BlcnR5V2Via2l0VHJhbnNmb3JtKTsKKworICAgIFRyYW5zZm9y
bU9wZXJhdGlvbnMgb3BlcmF0aW9uczE7CisgICAgb3BlcmF0aW9uczEub3BlcmF0aW9ucygpLmFw
cGVuZChUcmFuc2xhdGVUcmFuc2Zvcm1PcGVyYXRpb246OmNyZWF0ZShMZW5ndGgoMiwgV2ViQ29y
ZTo6Rml4ZWQpLCBMZW5ndGgoMCwgV2ViQ29yZTo6Rml4ZWQpLCBUcmFuc2Zvcm1PcGVyYXRpb246
OlRSQU5TTEFURV9YKSk7CisgICAgdmFsdWVzLmluc2VydChuZXcgVHJhbnNmb3JtQW5pbWF0aW9u
VmFsdWUoMCwgJm9wZXJhdGlvbnMxKSk7CisKKyAgICBUcmFuc2Zvcm1PcGVyYXRpb25zIG9wZXJh
dGlvbnMyOworICAgIG9wZXJhdGlvbnMyLm9wZXJhdGlvbnMoKS5hcHBlbmQoVHJhbnNsYXRlVHJh
bnNmb3JtT3BlcmF0aW9uOjpjcmVhdGUoTGVuZ3RoKDQsIFdlYkNvcmU6OkZpeGVkKSwgTGVuZ3Ro
KDAsIFdlYkNvcmU6OkZpeGVkKSwgVHJhbnNmb3JtT3BlcmF0aW9uOjpUUkFOU0xBVEVfWCkpOwor
ICAgIHZhbHVlcy5pbnNlcnQobmV3IFRyYW5zZm9ybUFuaW1hdGlvblZhbHVlKGR1cmF0aW9uLCAm
b3BlcmF0aW9uczIpKTsKKworICAgIFJlZlB0cjxBbmltYXRpb24+IGFuaW1hdGlvbiA9IEFuaW1h
dGlvbjo6Y3JlYXRlKCk7CisgICAgYW5pbWF0aW9uLT5zZXREdXJhdGlvbihkdXJhdGlvbik7Cisg
ICAgYW5pbWF0aW9uLT5zZXREaXJlY3Rpb24oQW5pbWF0aW9uOjpBbmltYXRpb25EaXJlY3Rpb25B
bHRlcm5hdGUpOworICAgIGFuaW1hdGlvbi0+c2V0SXRlcmF0aW9uQ291bnQoMik7CisKKyAgICBJ
bnRTaXplIGJveFNpemU7CisgICAgbV9ncmFwaGljc0xheWVyLT5hZGRBbmltYXRpb24odmFsdWVz
LCBib3hTaXplLCBhbmltYXRpb24uZ2V0KCksICIiLCAwKTsKKworICAgIEVYUEVDVF9UUlVFKG1f
cGxhdGZvcm1MYXllci0+bGF5ZXJBbmltYXRpb25Db250cm9sbGVyKCktPmhhc0FjdGl2ZUFuaW1h
dGlvbigpKTsKKworICAgIENDQWN0aXZlQW5pbWF0aW9uKiBhY3RpdmVBbmltYXRpb24gPSBtX3Bs
YXRmb3JtTGF5ZXItPmxheWVyQW5pbWF0aW9uQ29udHJvbGxlcigpLT5nZXRBY3RpdmVBbmltYXRp
b24oQ0NBY3RpdmVBbmltYXRpb246OlRyYW5zZm9ybSk7CisgICAgRVhQRUNUX1RSVUUoYWN0aXZl
QW5pbWF0aW9uKTsKKyAgICBFWFBFQ1RfVFJVRShhY3RpdmVBbmltYXRpb24tPmFsdGVybmF0ZXNE
aXJlY3Rpb24oKSk7CisKKyAgICBFWFBFQ1RfRVEoMiwgYWN0aXZlQW5pbWF0aW9uLT5pdGVyYXRp
b25zKCkpOworICAgIEVYUEVDVF9FUShDQ0FjdGl2ZUFuaW1hdGlvbjo6VHJhbnNmb3JtLCBhY3Rp
dmVBbmltYXRpb24tPnRhcmdldFByb3BlcnR5KCkpOworCisgICAgRVhQRUNUX0VRKENDQW5pbWF0
aW9uQ3VydmU6OlRyYW5zZm9ybSwgYWN0aXZlQW5pbWF0aW9uLT5jdXJ2ZSgpLT50eXBlKCkpOwor
CisgICAgY29uc3QgQ0NUcmFuc2Zvcm1BbmltYXRpb25DdXJ2ZSogY3VydmUgPSBhY3RpdmVBbmlt
YXRpb24tPmN1cnZlKCktPnRvVHJhbnNmb3JtQW5pbWF0aW9uQ3VydmUoKTsKKyAgICBFWFBFQ1Rf
VFJVRShjdXJ2ZSk7CisKKyAgICBleHBlY3RUcmFuc2xhdGVYKDIsIGN1cnZlLT5nZXRWYWx1ZSgw
KSk7CisgICAgZXhwZWN0VHJhbnNsYXRlWCg0LCBjdXJ2ZS0+Z2V0VmFsdWUoZHVyYXRpb24pKTsK
K30KKworVEVTVF9GKEdyYXBoaWNzTGF5ZXJDaHJvbWl1bVRlc3QsIGNyZWF0ZVJldmVyc2VkQWx0
ZXJuYXRpbmdBbmltYXRpb24pCit7CisgICAgY29uc3QgZG91YmxlIGR1cmF0aW9uID0gMTsKKyAg
ICBXZWJDb3JlOjpLZXlmcmFtZVZhbHVlTGlzdCB2YWx1ZXMoQW5pbWF0ZWRQcm9wZXJ0eVdlYmtp
dFRyYW5zZm9ybSk7CisKKyAgICBUcmFuc2Zvcm1PcGVyYXRpb25zIG9wZXJhdGlvbnMxOworICAg
IG9wZXJhdGlvbnMxLm9wZXJhdGlvbnMoKS5hcHBlbmQoVHJhbnNsYXRlVHJhbnNmb3JtT3BlcmF0
aW9uOjpjcmVhdGUoTGVuZ3RoKDIsIFdlYkNvcmU6OkZpeGVkKSwgTGVuZ3RoKDAsIFdlYkNvcmU6
OkZpeGVkKSwgVHJhbnNmb3JtT3BlcmF0aW9uOjpUUkFOU0xBVEVfWCkpOworICAgIHZhbHVlcy5p
bnNlcnQobmV3IFRyYW5zZm9ybUFuaW1hdGlvblZhbHVlKDAsICZvcGVyYXRpb25zMSkpOworCisg
ICAgVHJhbnNmb3JtT3BlcmF0aW9ucyBvcGVyYXRpb25zMjsKKyAgICBvcGVyYXRpb25zMi5vcGVy
YXRpb25zKCkuYXBwZW5kKFRyYW5zbGF0ZVRyYW5zZm9ybU9wZXJhdGlvbjo6Y3JlYXRlKExlbmd0
aCg0LCBXZWJDb3JlOjpGaXhlZCksIExlbmd0aCgwLCBXZWJDb3JlOjpGaXhlZCksIFRyYW5zZm9y
bU9wZXJhdGlvbjo6VFJBTlNMQVRFX1gpKTsKKyAgICB2YWx1ZXMuaW5zZXJ0KG5ldyBUcmFuc2Zv
cm1BbmltYXRpb25WYWx1ZShkdXJhdGlvbiwgJm9wZXJhdGlvbnMyKSk7CisKKyAgICBSZWZQdHI8
QW5pbWF0aW9uPiBhbmltYXRpb24gPSBBbmltYXRpb246OmNyZWF0ZSgpOworICAgIGFuaW1hdGlv
bi0+c2V0RHVyYXRpb24oZHVyYXRpb24pOworICAgIGFuaW1hdGlvbi0+c2V0RGlyZWN0aW9uKEFu
aW1hdGlvbjo6QW5pbWF0aW9uRGlyZWN0aW9uQWx0ZXJuYXRlUmV2ZXJzZSk7CisgICAgYW5pbWF0
aW9uLT5zZXRJdGVyYXRpb25Db3VudCgyKTsKIAotICAgIEFTU0VSVF9UUlVFKHBsYXRmb3JtTGF5
ZXItPmhhc0FjdGl2ZUFuaW1hdGlvbigpKTsKKyAgICBJbnRTaXplIGJveFNpemU7CisgICAgbV9n
cmFwaGljc0xheWVyLT5hZGRBbmltYXRpb24odmFsdWVzLCBib3hTaXplLCBhbmltYXRpb24uZ2V0
KCksICIiLCAwKTsKIAotICAgIGdyYXBoaWNzTGF5ZXItPnNldFByZXNlcnZlczNEKHRydWUpOwor
ICAgIEVYUEVDVF9UUlVFKG1fcGxhdGZvcm1MYXllci0+bGF5ZXJBbmltYXRpb25Db250cm9sbGVy
KCktPmhhc0FjdGl2ZUFuaW1hdGlvbigpKTsKIAotICAgIHBsYXRmb3JtTGF5ZXIgPSBzdGF0aWNf
Y2FzdDxMYXllckNocm9taXVtKj4oZ3JhcGhpY3NMYXllci0+cGxhdGZvcm1MYXllcigpKTsKLSAg
ICBBU1NFUlRfVFJVRShwbGF0Zm9ybUxheWVyKTsKKyAgICBDQ0FjdGl2ZUFuaW1hdGlvbiogYWN0
aXZlQW5pbWF0aW9uID0gbV9wbGF0Zm9ybUxheWVyLT5sYXllckFuaW1hdGlvbkNvbnRyb2xsZXIo
KS0+Z2V0QWN0aXZlQW5pbWF0aW9uKENDQWN0aXZlQW5pbWF0aW9uOjpUcmFuc2Zvcm0pOworICAg
IEVYUEVDVF9UUlVFKGFjdGl2ZUFuaW1hdGlvbik7CisgICAgRVhQRUNUX1RSVUUoYWN0aXZlQW5p
bWF0aW9uLT5hbHRlcm5hdGVzRGlyZWN0aW9uKCkpOwogCi0gICAgQVNTRVJUX1RSVUUocGxhdGZv
cm1MYXllci0+aGFzQWN0aXZlQW5pbWF0aW9uKCkpOwotICAgIHBsYXRmb3JtTGF5ZXItPnJlbW92
ZUFuaW1hdGlvbigwKTsKLSAgICBBU1NFUlRfRkFMU0UocGxhdGZvcm1MYXllci0+aGFzQWN0aXZl
QW5pbWF0aW9uKCkpOworICAgIEVYUEVDVF9FUSgyLCBhY3RpdmVBbmltYXRpb24tPml0ZXJhdGlv
bnMoKSk7CisgICAgRVhQRUNUX0VRKENDQWN0aXZlQW5pbWF0aW9uOjpUcmFuc2Zvcm0sIGFjdGl2
ZUFuaW1hdGlvbi0+dGFyZ2V0UHJvcGVydHkoKSk7CiAKLSAgICBncmFwaGljc0xheWVyLT5zZXRQ
cmVzZXJ2ZXMzRChmYWxzZSk7CisgICAgRVhQRUNUX0VRKENDQW5pbWF0aW9uQ3VydmU6OlRyYW5z
Zm9ybSwgYWN0aXZlQW5pbWF0aW9uLT5jdXJ2ZSgpLT50eXBlKCkpOwogCi0gICAgcGxhdGZvcm1M
YXllciA9IHN0YXRpY19jYXN0PExheWVyQ2hyb21pdW0qPihncmFwaGljc0xheWVyLT5wbGF0Zm9y
bUxheWVyKCkpOwotICAgIEFTU0VSVF9UUlVFKHBsYXRmb3JtTGF5ZXIpOworICAgIGNvbnN0IEND
VHJhbnNmb3JtQW5pbWF0aW9uQ3VydmUqIGN1cnZlID0gYWN0aXZlQW5pbWF0aW9uLT5jdXJ2ZSgp
LT50b1RyYW5zZm9ybUFuaW1hdGlvbkN1cnZlKCk7CisgICAgRVhQRUNUX1RSVUUoY3VydmUpOwog
Ci0gICAgQVNTRVJUX0ZBTFNFKHBsYXRmb3JtTGF5ZXItPmhhc0FjdGl2ZUFuaW1hdGlvbigpKTsK
KyAgICBleHBlY3RUcmFuc2xhdGVYKDQsIGN1cnZlLT5nZXRWYWx1ZSgwKSk7CisgICAgZXhwZWN0
VHJhbnNsYXRlWCgyLCBjdXJ2ZS0+Z2V0VmFsdWUoZHVyYXRpb24pKTsKIH0KIAogfSAvLyBuYW1l
c3BhY2UKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJLaXQvY2hyb21pdW0vdGVzdHMvTGF5ZXJDaHJv
bWl1bVRlc3QuY3BwIGIvU291cmNlL1dlYktpdC9jaHJvbWl1bS90ZXN0cy9MYXllckNocm9taXVt
VGVzdC5jcHAKaW5kZXggODIxM2RkODEyMDcxZTVhMzUwYzJkNWYxNzYwZTBiYmZhOGQ0OGY1ZS4u
OTU0MTc0YWI3NjM1N2E3MTMyNDAxYTFkMGEzY2M4MzhjOGVkOTFhOSAxMDA2NDQKLS0tIGEvU291
cmNlL1dlYktpdC9jaHJvbWl1bS90ZXN0cy9MYXllckNocm9taXVtVGVzdC5jcHAKKysrIGIvU291
cmNlL1dlYktpdC9jaHJvbWl1bS90ZXN0cy9MYXllckNocm9taXVtVGVzdC5jcHAKQEAgLTgwLDEx
ICs4MCwxMyBAQCBwcm90ZWN0ZWQ6CiAgICAgewogICAgICAgICAvLyBJbml0aWFsaXplIHdpdGhv
dXQgdGhyZWFkaW5nIHN1cHBvcnQuCiAgICAgICAgIFdlYktpdDo6V2ViQ29tcG9zaXRvcjo6aW5p
dGlhbGl6ZSgwKTsKKyAgICAgICAgRGVidWdTY29wZWRTZXRNYWluVGhyZWFkIG1haW47CiAgICAg
ICAgIG1fbGF5ZXJUcmVlSG9zdCA9IGFkb3B0UHRyKG5ldyBNb2NrQ0NMYXllclRyZWVIb3N0KTsK
ICAgICB9CiAKICAgICB2aXJ0dWFsIHZvaWQgVGVhckRvd24oKQogICAgIHsKKyAgICAgICAgRGVi
dWdTY29wZWRTZXRNYWluVGhyZWFkIG1haW47CiAgICAgICAgIE1vY2s6OlZlcmlmeUFuZENsZWFy
RXhwZWN0YXRpb25zKG1fbGF5ZXJUcmVlSG9zdC5nZXQoKSk7CiAgICAgICAgIEVYUEVDVF9DQUxM
KCptX2xheWVyVHJlZUhvc3QsIHNldE5lZWRzQ29tbWl0KCkpLlRpbWVzKEFueU51bWJlcigpKTsK
ICAgICAgICAgbV9wYXJlbnQuY2xlYXIoKTsKQEAgLTYzOSw2ICs2NDEsNyBAQCB2b2lkIGFzc2Vy
dExheWVyVHJlZUhvc3RNYXRjaGVzRm9yU3VidHJlZShMYXllckNocm9taXVtKiBsYXllciwgQ0NM
YXllclRyZWVIb3N0KgogVEVTVChMYXllckNocm9taXVtTGF5ZXJUcmVlSG9zdFRlc3QsIGVudGVy
aW5nVHJlZSkKIHsKICAgICBXZWJLaXQ6OldlYkNvbXBvc2l0b3I6OmluaXRpYWxpemUoMCk7Cisg
ICAgRGVidWdTY29wZWRTZXRNYWluVGhyZWFkIG1haW47CiAgICAgUmVmUHRyPExheWVyQ2hyb21p
dW0+IHBhcmVudCA9IExheWVyQ2hyb21pdW06OmNyZWF0ZSgpOwogICAgIFJlZlB0cjxMYXllckNo
cm9taXVtPiBjaGlsZCA9IExheWVyQ2hyb21pdW06OmNyZWF0ZSgpOwogICAgIFJlZlB0cjxMYXll
ckNocm9taXVtPiBtYXNrID0gTGF5ZXJDaHJvbWl1bTo6Y3JlYXRlKCk7CkBAIC02NzEsNiArNjc0
LDcgQEAgVEVTVChMYXllckNocm9taXVtTGF5ZXJUcmVlSG9zdFRlc3QsIGVudGVyaW5nVHJlZSkK
IFRFU1QoTGF5ZXJDaHJvbWl1bUxheWVyVHJlZUhvc3RUZXN0LCBhZGRpbmdMYXllclN1YnRyZWUp
CiB7CiAgICAgV2ViS2l0OjpXZWJDb21wb3NpdG9yOjppbml0aWFsaXplKDApOworICAgIERlYnVn
U2NvcGVkU2V0TWFpblRocmVhZCBtYWluOwogICAgIFJlZlB0cjxMYXllckNocm9taXVtPiBwYXJl
bnQgPSBMYXllckNocm9taXVtOjpjcmVhdGUoKTsKICAgICBPd25QdHI8RmFrZUNDTGF5ZXJUcmVl
SG9zdD4gbGF5ZXJUcmVlSG9zdChGYWtlQ0NMYXllclRyZWVIb3N0OjpjcmVhdGUoKSk7CiAKQEAg
LTcwMiw2ICs3MDYsNyBAQCBURVNUKExheWVyQ2hyb21pdW1MYXllclRyZWVIb3N0VGVzdCwgYWRk
aW5nTGF5ZXJTdWJ0cmVlKQogVEVTVChMYXllckNocm9taXVtTGF5ZXJUcmVlSG9zdFRlc3QsIGNo
YW5nZUhvc3QpCiB7CiAgICAgV2ViS2l0OjpXZWJDb21wb3NpdG9yOjppbml0aWFsaXplKDApOwor
ICAgIERlYnVnU2NvcGVkU2V0TWFpblRocmVhZCBtYWluOwogICAgIFJlZlB0cjxMYXllckNocm9t
aXVtPiBwYXJlbnQgPSBMYXllckNocm9taXVtOjpjcmVhdGUoKTsKICAgICBSZWZQdHI8TGF5ZXJD
aHJvbWl1bT4gY2hpbGQgPSBMYXllckNocm9taXVtOjpjcmVhdGUoKTsKICAgICBSZWZQdHI8TGF5
ZXJDaHJvbWl1bT4gbWFzayA9IExheWVyQ2hyb21pdW06OmNyZWF0ZSgpOwpAQCAtNzM1LDYgKzc0
MCw3IEBAIFRFU1QoTGF5ZXJDaHJvbWl1bUxheWVyVHJlZUhvc3RUZXN0LCBjaGFuZ2VIb3N0KQog
VEVTVChMYXllckNocm9taXVtTGF5ZXJUcmVlSG9zdFRlc3QsIGNoYW5nZUhvc3RJblN1YnRyZWUp
CiB7CiAgICAgV2ViS2l0OjpXZWJDb21wb3NpdG9yOjppbml0aWFsaXplKDApOworICAgIERlYnVn
U2NvcGVkU2V0TWFpblRocmVhZCBtYWluOwogICAgIFJlZlB0cjxMYXllckNocm9taXVtPiBmaXJz
dFBhcmVudCA9IExheWVyQ2hyb21pdW06OmNyZWF0ZSgpOwogICAgIFJlZlB0cjxMYXllckNocm9t
aXVtPiBmaXJzdENoaWxkID0gTGF5ZXJDaHJvbWl1bTo6Y3JlYXRlKCk7CiAgICAgUmVmUHRyPExh
eWVyQ2hyb21pdW0+IHNlY29uZFBhcmVudCA9IExheWVyQ2hyb21pdW06OmNyZWF0ZSgpOwpAQCAt
NzcyLDYgKzc3OCw3IEBAIFRFU1QoTGF5ZXJDaHJvbWl1bUxheWVyVHJlZUhvc3RUZXN0LCBjaGFu
Z2VIb3N0SW5TdWJ0cmVlKQogVEVTVChMYXllckNocm9taXVtTGF5ZXJUcmVlSG9zdFRlc3QsIHJl
cGxhY2VNYXNrQW5kUmVwbGljYUxheWVyKQogewogICAgIFdlYktpdDo6V2ViQ29tcG9zaXRvcjo6
aW5pdGlhbGl6ZSgwKTsKKyAgICBEZWJ1Z1Njb3BlZFNldE1haW5UaHJlYWQgbWFpbjsKICAgICBS
ZWZQdHI8TGF5ZXJDaHJvbWl1bT4gcGFyZW50ID0gTGF5ZXJDaHJvbWl1bTo6Y3JlYXRlKCk7CiAg
ICAgUmVmUHRyPExheWVyQ2hyb21pdW0+IG1hc2sgPSBMYXllckNocm9taXVtOjpjcmVhdGUoKTsK
ICAgICBSZWZQdHI8TGF5ZXJDaHJvbWl1bT4gcmVwbGljYSA9IExheWVyQ2hyb21pdW06OmNyZWF0
ZSgpOwo=
</data>

          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>145914</attachid>
            <date>2012-06-05 19:04:02 -0700</date>
            <delta_ts>2012-06-08 11:03:40 -0700</delta_ts>
            <desc>Patch</desc>
            <filename>bug-87686-20120605220401.patch</filename>
            <type>text/plain</type>
            <size>105895</size>
            <attacher>vollick</attacher>
            
              <data encoding="base64">U3VidmVyc2lvbiBSZXZpc2lvbjogMTE5NTMzCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9D
aGFuZ2VMb2cgYi9Tb3VyY2UvV2ViQ29yZS9DaGFuZ2VMb2cKaW5kZXggNGQ1MWI1MzE0ODg0NDMx
MWQ4MWVlZTdhMWQxMWU0MDk4NGM0ZGM3MS4uZTMxYzg5ZjZkMjZjYjI5MjQzMzc1MGJjMTU5YjYz
NzdiYjA1MDFjNSAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvQ2hhbmdlTG9nCisrKyBiL1Nv
dXJjZS9XZWJDb3JlL0NoYW5nZUxvZwpAQCAtMSwzICsxLDcxIEBACisyMDEyLTA2LTA1ICBJYW4g
Vm9sbGljayAgPHZvbGxpY2tAY2hyb21pdW0ub3JnPgorCisgICAgICAgIFtjaHJvbWl1bV0gQWNj
ZWxlcmF0ZWQgYW5pbWF0aW9ucyBzaG91bGQgdXNlIFdlYlRyYW5zZm9ybU9wZXJhdGlvbnMKKyAg
ICAgICAgaHR0cHM6Ly9idWdzLndlYmtpdC5vcmcvc2hvd19idWcuY2dpP2lkPTg3Njg2CisKKyAg
ICAgICAgUmV2aWV3ZWQgYnkgTk9CT0RZIChPT1BTISkuCisKKyAgICAgICAgQ0NUcmFuc2Zvcm1L
ZXlmcmFtZSBuZXcgb3ducyBhIFdlYlRyYW5zZm9ybU9wZXJhdGlvbnMgcmF0aGVyIHRoYW4gYQor
ICAgICAgICBUcmFuc2Zvcm1PcGVyYXRpb25zLiBMYXllckNocm9taXVtJ3MgQVBJIGhhcyBiZWVu
IGNoYW5nZWQgc28gdGhhdAorICAgICAgICBMYXllckNocm9taXVtOjphZGRBbmltYXRpb24gc2hv
dWxkIHRha2Ugb25seSBhIENDQWN0aXZlQW5pbWF0aW9uLgorICAgICAgICBHcmFwaGljc0xheWVy
Q2hyb21pdW0gaXMgbmV3IHJlc3BvbnNpYmxlIGZvciB0cmFuc2xhdGluZyB0bworICAgICAgICBX
ZWJUcmFuc2Zvcm1PcGVyYXRpb25zIGFuZCBjcmVhdGluZyBDQ0FjdGl2ZUFuaW1hdGlvbnMuIFRl
c3RzIHRoYXQgdXNlCisgICAgICAgIHRoZSBwdWJsaWMgQVBJICh0aGF0IGlzLCB0aGV5IGNhbGwg
YWRkQW5pbWF0aW9uIHdpdGggS2V5ZnJhbWVWYWx1ZUxpc3QKKyAgICAgICAgYW5kIEFuaW1hdGlv
biBhcmd1bWVudHMpIGhhdmUgYmVlbiBtb3ZlZCB0byBHcmFwaGljc0xheWVyQ2hyb21pdW1UZXN0
LgorCisgICAgICAgICBVbml0IHRlc3RzOgorICAgICAgICAgICAgR3JhcGhpY3NMYXllckNocm9t
aXVtVGVzdC5jcmVhdGVPcGFjaXR5QW5pbWF0aW9uCisgICAgICAgICAgICBHcmFwaGljc0xheWVy
Q2hyb21pdW1UZXN0LmNyZWF0ZVRyYW5zZm9ybUFuaW1hdGlvbgorICAgICAgICAgICAgR3JhcGhp
Y3NMYXllckNocm9taXVtVGVzdC5jcmVhdGVUcmFuc2Zvcm1BbmltYXRpb25XaXRoQmlnUm90YXRp
b24KKyAgICAgICAgICAgIEdyYXBoaWNzTGF5ZXJDaHJvbWl1bVRlc3QuY3JlYXRlVHJhbnNmb3Jt
QW5pbWF0aW9uV2l0aFNpbmd1bGFyTWF0cml4CisgICAgICAgICAgICBHcmFwaGljc0xheWVyQ2hy
b21pdW1UZXN0LmNyZWF0ZVJldmVyc2VkQW5pbWF0aW9uCisgICAgICAgICAgICBHcmFwaGljc0xh
eWVyQ2hyb21pdW1UZXN0LmNyZWF0ZUFsdGVybmF0aW5nQW5pbWF0aW9uCisgICAgICAgICAgICBH
cmFwaGljc0xheWVyQ2hyb21pdW1UZXN0LmNyZWF0ZVJldmVyc2VkQWx0ZXJuYXRpbmdBbmltYXRp
b24KKworICAgICAgICAqIFdlYkNvcmUuZ3lwaToKKyAgICAgICAgKiBwbGF0Zm9ybS9ncmFwaGlj
cy9jaHJvbWl1bS9BbmltYXRpb25UcmFuc2xhdGlvblV0aWwuY3BwOiBBZGRlZC4KKyAgICAgICAg
KFdlYkNvcmUpOgorICAgICAgICAoV2ViQ29yZTo6dG9XZWJUcmFuc2Zvcm1PcGVyYXRpb25zKToK
KyAgICAgICAgKFdlYkNvcmU6OmFwcGVuZEtleWZyYW1lKToKKyAgICAgICAgKFdlYkNvcmU6OkND
S2V5ZnJhbWVkVHJhbnNmb3JtQW5pbWF0aW9uQ3VydmUpOgorICAgICAgICAoV2ViQ29yZTo6Y3Jl
YXRlQWN0aXZlQW5pbWF0aW9uKToKKyAgICAgICAgKiBwbGF0Zm9ybS9ncmFwaGljcy9jaHJvbWl1
bS9BbmltYXRpb25UcmFuc2xhdGlvblV0aWwuaDogQWRkZWQuCisgICAgICAgIChXZWJDb3JlKToK
KyAgICAgICAgKiBwbGF0Zm9ybS9ncmFwaGljcy9jaHJvbWl1bS9HcmFwaGljc0xheWVyQ2hyb21p
dW0uY3BwOgorICAgICAgICAoV2ViQ29yZTo6R3JhcGhpY3NMYXllckNocm9taXVtOjphZGRBbmlt
YXRpb24pOgorICAgICAgICAqIHBsYXRmb3JtL2dyYXBoaWNzL2Nocm9taXVtL0xheWVyQ2hyb21p
dW0uY3BwOgorICAgICAgICAoV2ViQ29yZTo6TGF5ZXJDaHJvbWl1bTo6YWRkQW5pbWF0aW9uKToK
KyAgICAgICAgKiBwbGF0Zm9ybS9ncmFwaGljcy9jaHJvbWl1bS9MYXllckNocm9taXVtLmg6Cisg
ICAgICAgIChXZWJDb3JlKToKKyAgICAgICAgKFdlYkNvcmU6OkxheWVyQ2hyb21pdW06OmJvdW5k
cyk6CisgICAgICAgIChMYXllckNocm9taXVtKToKKyAgICAgICAgKiBwbGF0Zm9ybS9ncmFwaGlj
cy9jaHJvbWl1bS9MaW5rSGlnaGxpZ2h0LmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OkxpbmtIaWdo
bGlnaHQ6OkxpbmtIaWdobGlnaHQpOgorICAgICAgICAqIHBsYXRmb3JtL2dyYXBoaWNzL2Nocm9t
aXVtL2NjL0NDQW5pbWF0aW9uQ3VydmUuaDoKKyAgICAgICAgKENDVHJhbnNmb3JtQW5pbWF0aW9u
Q3VydmUpOgorICAgICAgICAqIHBsYXRmb3JtL2dyYXBoaWNzL2Nocm9taXVtL2NjL0NDS2V5ZnJh
bWVkQW5pbWF0aW9uQ3VydmUuY3BwOgorICAgICAgICAoV2ViQ29yZTo6Q0NUcmFuc2Zvcm1LZXlm
cmFtZTo6Y3JlYXRlKToKKyAgICAgICAgKFdlYkNvcmU6OkNDVHJhbnNmb3JtS2V5ZnJhbWU6OkND
VHJhbnNmb3JtS2V5ZnJhbWUpOgorICAgICAgICAoV2ViQ29yZTo6Q0NUcmFuc2Zvcm1LZXlmcmFt
ZTo6dmFsdWUpOgorICAgICAgICAoV2ViQ29yZTo6Q0NUcmFuc2Zvcm1LZXlmcmFtZTo6Y2xvbmUp
OgorICAgICAgICAoV2ViQ29yZTo6Q0NLZXlmcmFtZWRUcmFuc2Zvcm1BbmltYXRpb25DdXJ2ZTo6
Z2V0VmFsdWUpOgorICAgICAgICAqIHBsYXRmb3JtL2dyYXBoaWNzL2Nocm9taXVtL2NjL0NDS2V5
ZnJhbWVkQW5pbWF0aW9uQ3VydmUuaDoKKyAgICAgICAgKENDVHJhbnNmb3JtS2V5ZnJhbWUpOgor
ICAgICAgICAoQ0NLZXlmcmFtZWRUcmFuc2Zvcm1BbmltYXRpb25DdXJ2ZSk6CisgICAgICAgICog
cGxhdGZvcm0vZ3JhcGhpY3MvY2hyb21pdW0vY2MvQ0NMYXllckFuaW1hdGlvbkNvbnRyb2xsZXIu
Y3BwOgorICAgICAgICAoV2ViQ29yZTo6Q0NMYXllckFuaW1hdGlvbkNvbnRyb2xsZXI6OnJlbW92
ZUFuaW1hdGlvbik6CisgICAgICAgIChXZWJDb3JlKToKKyAgICAgICAgKFdlYkNvcmU6OkNDTGF5
ZXJBbmltYXRpb25Db250cm9sbGVyOjphZGRBbmltYXRpb24pOgorICAgICAgICAoV2ViQ29yZTo6
Q0NMYXllckFuaW1hdGlvbkNvbnRyb2xsZXI6OmdldEFjdGl2ZUFuaW1hdGlvbik6CisgICAgICAg
IChXZWJDb3JlOjpDQ0xheWVyQW5pbWF0aW9uQ29udHJvbGxlcjo6cHVzaE5ld0FuaW1hdGlvbnNU
b0ltcGxUaHJlYWQpOgorICAgICAgICAoV2ViQ29yZTo6Q0NMYXllckFuaW1hdGlvbkNvbnRyb2xs
ZXI6OnJlcGxhY2VJbXBsVGhyZWFkQW5pbWF0aW9ucyk6CisgICAgICAgIChXZWJDb3JlOjpDQ0xh
eWVyQW5pbWF0aW9uQ29udHJvbGxlcjo6dGlja0FuaW1hdGlvbnMpOgorICAgICAgICAqIHBsYXRm
b3JtL2dyYXBoaWNzL2Nocm9taXVtL2NjL0NDTGF5ZXJBbmltYXRpb25Db250cm9sbGVyLmg6Cisg
ICAgICAgIChDQ0xheWVyQW5pbWF0aW9uQ29udHJvbGxlckNsaWVudCk6CisgICAgICAgIChDQ0xh
eWVyQW5pbWF0aW9uQ29udHJvbGxlcik6CisgICAgICAgICogcGxhdGZvcm0vZ3JhcGhpY3MvY2hy
b21pdW0vY2MvQ0NMYXllckltcGwuaDoKKyAgICAgICAgKFdlYkNvcmU6OkNDTGF5ZXJJbXBsOjpi
b3VuZHMpOgorCiAyMDEyLTA2LTA1ICBNYXJ0aW4gUm9iaW5zb24gIDxtcm9iaW5zb25AaWdhbGlh
LmNvbT4KIAogICAgICAgICBbQ2Fpcm9dIFtPcGVuR0xdIEVuYWJsZSBHTF9PRVNfc3RhbmRhcmRf
ZGVyaXZhdGl2ZXMKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJLaXQvY2hyb21pdW0vQ2hhbmdlTG9n
IGIvU291cmNlL1dlYktpdC9jaHJvbWl1bS9DaGFuZ2VMb2cKaW5kZXggYjY2MmQ3NjVjNzFlNzg0
MTg5OGViYjhmZDE1ZmIwYmE2ZmJmM2RhNS4uZmQxZDA4NjRjZjRiNjVkZmNkNjI4NGRiOWUyODc2
OTYyYjc1YzQwMSAxMDA2NDQKLS0tIGEvU291cmNlL1dlYktpdC9jaHJvbWl1bS9DaGFuZ2VMb2cK
KysrIGIvU291cmNlL1dlYktpdC9jaHJvbWl1bS9DaGFuZ2VMb2cKQEAgLTEsMyArMSw0MSBAQAor
MjAxMi0wNi0wNSAgSWFuIFZvbGxpY2sgIDx2b2xsaWNrQGNocm9taXVtLm9yZz4KKworICAgICAg
ICBbY2hyb21pdW1dIEFjY2VsZXJhdGVkIGFuaW1hdGlvbnMgc2hvdWxkIHVzZSBXZWJUcmFuc2Zv
cm1PcGVyYXRpb25zCisgICAgICAgIGh0dHBzOi8vYnVncy53ZWJraXQub3JnL3Nob3dfYnVnLmNn
aT9pZD04NzY4NgorCisgICAgICAgIFJldmlld2VkIGJ5IE5PQk9EWSAoT09QUyEpLgorCisgICAg
ICAgIENDVHJhbnNmb3JtS2V5ZnJhbWUgbmV3IG93bnMgYSBXZWJUcmFuc2Zvcm1PcGVyYXRpb25z
IHJhdGhlciB0aGFuIGEKKyAgICAgICAgVHJhbnNmb3JtT3BlcmF0aW9ucy4gTGF5ZXJDaHJvbWl1
bSdzIEFQSSBoYXMgYmVlbiBjaGFuZ2VkIHNvIHRoYXQKKyAgICAgICAgTGF5ZXJDaHJvbWl1bTo6
YWRkQW5pbWF0aW9uIHNob3VsZCB0YWtlIG9ubHkgYSBDQ0FjdGl2ZUFuaW1hdGlvbi4KKyAgICAg
ICAgR3JhcGhpY3NMYXllckNocm9taXVtIGlzIG5ldyByZXNwb25zaWJsZSBmb3IgdHJhbnNsYXRp
bmcgdG8KKyAgICAgICAgV2ViVHJhbnNmb3JtT3BlcmF0aW9ucyBhbmQgY3JlYXRpbmcgQ0NBY3Rp
dmVBbmltYXRpb25zLiBUZXN0cyB0aGF0IHVzZQorICAgICAgICB0aGUgcHVibGljIEFQSSAodGhh
dCBpcywgdGhleSBjYWxsIGFkZEFuaW1hdGlvbiB3aXRoIEtleWZyYW1lVmFsdWVMaXN0CisgICAg
ICAgIGFuZCBBbmltYXRpb24gYXJndW1lbnRzKSBoYXZlIGJlZW4gbW92ZWQgdG8gR3JhcGhpY3NM
YXllckNocm9taXVtVGVzdC4KKworICAgICAgICAqIHRlc3RzL0NDQW5pbWF0aW9uVGVzdENvbW1v
bi5jcHA6CisgICAgICAgIChXZWJDb3JlOjphZGRPcGFjaXR5VHJhbnNpdGlvbik6CisgICAgICAg
IChXZWJDb3JlOjphZGRBbmltYXRlZFRyYW5zZm9ybSk6CisgICAgICAgIChXZWJLaXRUZXN0czo6
RmFrZVRyYW5zZm9ybVRyYW5zaXRpb246OmdldFZhbHVlKToKKyAgICAgICAgKiB0ZXN0cy9DQ0Fu
aW1hdGlvblRlc3RDb21tb24uaDoKKyAgICAgICAgKiB0ZXN0cy9DQ0tleWZyYW1lZEFuaW1hdGlv
bkN1cnZlVGVzdC5jcHA6CisgICAgICAgICogdGVzdHMvQ0NMYXllckFuaW1hdGlvbkNvbnRyb2xs
ZXJUZXN0LmNwcDoKKyAgICAgICAgKiB0ZXN0cy9DQ0xheWVyVHJlZUhvc3RUZXN0LmNwcDoKKyAg
ICAgICAgKFdURjo6Q0NMYXllclRyZWVIb3N0VGVzdExheWVyQWRkZWRXaXRoQW5pbWF0aW9uOjpi
ZWdpblRlc3QpOgorICAgICAgICAqIHRlc3RzL0dyYXBoaWNzTGF5ZXJDaHJvbWl1bVRlc3QuY3Bw
OgorICAgICAgICAoTW9ja0xheWVyVHJlZUhvc3RDbGllbnQpOgorICAgICAgICAoV2ViS2l0VGVz
dHMpOgorICAgICAgICAoTW9ja0xheWVyVHJlZUhvc3QpOgorICAgICAgICAoV2ViS2l0VGVzdHM6
Ok1vY2tMYXllclRyZWVIb3N0OjpjcmVhdGUpOgorICAgICAgICAoV2ViS2l0VGVzdHM6Ok1vY2tM
YXllclRyZWVIb3N0OjpjcmVhdGVMYXllclRyZWVIb3N0SW1wbCk6CisgICAgICAgIChXZWJLaXRU
ZXN0czo6TW9ja0xheWVyVHJlZUhvc3Q6Ok1vY2tMYXllclRyZWVIb3N0KToKKyAgICAgICAgKEdy
YXBoaWNzTGF5ZXJDaHJvbWl1bVRlc3QpOgorICAgICAgICAoV2ViS2l0VGVzdHM6OkdyYXBoaWNz
TGF5ZXJDaHJvbWl1bVRlc3Q6OkdyYXBoaWNzTGF5ZXJDaHJvbWl1bVRlc3QpOgorICAgICAgICAo
V2ViS2l0VGVzdHM6OkdyYXBoaWNzTGF5ZXJDaHJvbWl1bVRlc3Q6On5HcmFwaGljc0xheWVyQ2hy
b21pdW1UZXN0KToKKyAgICAgICAgKFdlYktpdFRlc3RzOjpHcmFwaGljc0xheWVyQ2hyb21pdW1U
ZXN0OjpleHBlY3RUcmFuc2xhdGVYKToKKyAgICAgICAgKFdlYktpdFRlc3RzOjpURVNUX0YpOgor
ICAgICAgICAqIHRlc3RzL0xheWVyQ2hyb21pdW1UZXN0LmNwcDoKKwogMjAxMi0wNi0wNSAgTWFy
ayBQaWxncmltICA8cGlsZ3JpbUBjaHJvbWl1bS5vcmc+CiAKICAgICAgICAgW0Nocm9taXVtXSBN
b3ZlIGNyZWF0ZUxvY2FsU3RvcmFnZU5hbWVzcGFjZSB0byBQbGF0Zm9ybS5oCmRpZmYgLS1naXQg
YS9Tb3VyY2UvV2ViQ29yZS9XZWJDb3JlLmd5cGkgYi9Tb3VyY2UvV2ViQ29yZS9XZWJDb3JlLmd5
cGkKaW5kZXggY2JlMmM0ZmMxNTYyMTg4M2E5NjlhZmM2NmJlNTU3OGJmN2Q0OTVmZS4uZGM4N2Fh
YjUzNDBmOGFmZDk2NTUwYTc2Njc2N2ZkNTY0YzM2YzliZSAxMDA2NDQKLS0tIGEvU291cmNlL1dl
YkNvcmUvV2ViQ29yZS5neXBpCisrKyBiL1NvdXJjZS9XZWJDb3JlL1dlYkNvcmUuZ3lwaQpAQCAt
MzU2Miw2ICszNTYyLDggQEAKICAgICAgICAgICAgICdwbGF0Zm9ybS9ncmFwaGljcy9jZy9UcmFu
c2Zvcm1hdGlvbk1hdHJpeENHLmNwcCcsCiAgICAgICAgICAgICAncGxhdGZvcm0vZ3JhcGhpY3Mv
Y2hyb21pdW0vQW5pbWF0aW9uSWRWZW5kb3IuY3BwJywKICAgICAgICAgICAgICdwbGF0Zm9ybS9n
cmFwaGljcy9jaHJvbWl1bS9BbmltYXRpb25JZFZlbmRvci5oJywKKyAgICAgICAgICAgICdwbGF0
Zm9ybS9ncmFwaGljcy9jaHJvbWl1bS9BbmltYXRpb25UcmFuc2xhdGlvblV0aWwuY3BwJywKKyAg
ICAgICAgICAgICdwbGF0Zm9ybS9ncmFwaGljcy9jaHJvbWl1bS9BbmltYXRpb25UcmFuc2xhdGlv
blV0aWwuaCcsCiAgICAgICAgICAgICAncGxhdGZvcm0vZ3JhcGhpY3MvY2hyb21pdW0vQml0bWFw
Q2FudmFzTGF5ZXJUZXh0dXJlVXBkYXRlci5jcHAnLAogICAgICAgICAgICAgJ3BsYXRmb3JtL2dy
YXBoaWNzL2Nocm9taXVtL0JpdG1hcENhbnZhc0xheWVyVGV4dHVyZVVwZGF0ZXIuaCcsCiAgICAg
ICAgICAgICAncGxhdGZvcm0vZ3JhcGhpY3MvY2hyb21pdW0vQml0bWFwU2tQaWN0dXJlQ2FudmFz
TGF5ZXJUZXh0dXJlVXBkYXRlci5jcHAnLApkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvcGxh
dGZvcm0vZ3JhcGhpY3MvY2hyb21pdW0vQW5pbWF0aW9uVHJhbnNsYXRpb25VdGlsLmNwcCBiL1Nv
dXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2Nocm9taXVtL0FuaW1hdGlvblRyYW5zbGF0
aW9uVXRpbC5jcHAKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMC4uNDJjOTUyZjA3MjFjY2I2MzAwY2Y4YjUyYTNhZDVmZDhi
ZGNiYzA2NAotLS0gL2Rldi9udWxsCisrKyBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBo
aWNzL2Nocm9taXVtL0FuaW1hdGlvblRyYW5zbGF0aW9uVXRpbC5jcHAKQEAgLTAsMCArMSwyMjkg
QEAKKy8qCisgKiBDb3B5cmlnaHQgKEMpIDIwMTIgR29vZ2xlIEluYy4gQWxsIHJpZ2h0cyByZXNl
cnZlZC4KKyAqCisgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5
IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKyAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBw
cm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucworICogYXJlIG1ldDoKKyAqIDEu
ICBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNv
cHlyaWdodAorICogICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBm
b2xsb3dpbmcgZGlzY2xhaW1lci4KKyAqIDIuICBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZv
cm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgIG5vdGljZSwgdGhp
cyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUK
KyAqICAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0
aCB0aGUgZGlzdHJpYnV0aW9uLgorICoKKyAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkg
QVBQTEUgSU5DLiBBTkQgSVRTIENPTlRSSUJVVE9SUyBgYEFTIElTJycgQU5EIEFOWQorICogRVhQ
UkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRP
LCBUSEUgSU1QTElFRAorICogV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5F
U1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFIEFSRQorICogRElTQ0xBSU1FRC4gSU4gTk8gRVZF
TlQgU0hBTEwgQVBQTEUgSU5DLiBPUiBJVFMgQ09OVFJJQlVUT1JTIEJFIExJQUJMRSBGT1IgQU5Z
CisgKiBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLCBFWEVNUExBUlksIE9S
IENPTlNFUVVFTlRJQUwgREFNQUdFUworICogKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRP
LCBQUk9DVVJFTUVOVCBPRiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOworICogTE9TUyBP
RiBVU0UsIERBVEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikgSE9XRVZF
UiBDQVVTRUQgQU5EIE9OCisgKiBBTlkgVEhFT1JZIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTiBD
T05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVAorICogKElOQ0xVRElORyBORUdMSUdF
TkNFIE9SIE9USEVSV0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFIE9GIFRI
SVMKKyAqIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GIFNV
Q0ggREFNQUdFLgorICovCisKKyNpbmNsdWRlICJjb25maWcuaCIKKworI2luY2x1ZGUgIkFuaW1h
dGlvblRyYW5zbGF0aW9uVXRpbC5oIgorCisjaW5jbHVkZSAiRmxvYXRTaXplLmgiCisjaW5jbHVk
ZSAiR3JhcGhpY3NMYXllci5oIgorI2luY2x1ZGUgIklkZW50aXR5VHJhbnNmb3JtT3BlcmF0aW9u
LmgiCisjaW5jbHVkZSAiTGVuZ3RoLmgiCisjaW5jbHVkZSAiTGVuZ3RoRnVuY3Rpb25zLmgiCisj
aW5jbHVkZSAiTWF0cml4M0RUcmFuc2Zvcm1PcGVyYXRpb24uaCIKKyNpbmNsdWRlICJNYXRyaXhU
cmFuc2Zvcm1PcGVyYXRpb24uaCIKKyNpbmNsdWRlICJQZXJzcGVjdGl2ZVRyYW5zZm9ybU9wZXJh
dGlvbi5oIgorI2luY2x1ZGUgIlJvdGF0ZVRyYW5zZm9ybU9wZXJhdGlvbi5oIgorI2luY2x1ZGUg
IlNjYWxlVHJhbnNmb3JtT3BlcmF0aW9uLmgiCisjaW5jbHVkZSAiU2tld1RyYW5zZm9ybU9wZXJh
dGlvbi5oIgorI2luY2x1ZGUgIlRyYW5zZm9ybU9wZXJhdGlvbnMuaCIKKyNpbmNsdWRlICJUcmFu
c2xhdGVUcmFuc2Zvcm1PcGVyYXRpb24uaCIKKworI2luY2x1ZGUgImNjL0NDQWN0aXZlQW5pbWF0
aW9uLmgiCisjaW5jbHVkZSAiY2MvQ0NLZXlmcmFtZWRBbmltYXRpb25DdXJ2ZS5oIgorCisjaW5j
bHVkZSA8cHVibGljL1dlYlRyYW5zZm9ybU9wZXJhdGlvbnMuaD4KKyNpbmNsdWRlIDxwdWJsaWMv
V2ViVHJhbnNmb3JtYXRpb25NYXRyaXguaD4KKworI2luY2x1ZGUgPHd0Zi9Pd25QdHIuaD4KKyNp
bmNsdWRlIDx3dGYvdGV4dC9DU3RyaW5nLmg+CisKK3VzaW5nIG5hbWVzcGFjZSBzdGQ7Cit1c2lu
ZyBuYW1lc3BhY2UgV2ViS2l0OworCituYW1lc3BhY2UgV2ViQ29yZSB7CisKK1dlYlRyYW5zZm9y
bU9wZXJhdGlvbnMgdG9XZWJUcmFuc2Zvcm1PcGVyYXRpb25zKGNvbnN0IFRyYW5zZm9ybU9wZXJh
dGlvbnMmIHRyYW5zZm9ybU9wZXJhdGlvbnMsIGNvbnN0IEZsb2F0U2l6ZSYgYm94U2l6ZSkKK3sK
KyAgICAvLyBXZSBuZWVkIHRvIGRvIGEgZGVlcCBjb3B5IHRoZSB0cmFuc2Zvcm1PcGVyYXRpb25z
IG1heSBjb250YWluIHJlZiBwb2ludGVycyB0byBUcmFuc2Zvcm1PcGVyYXRpb24gb2JqZWN0cy4K
KyAgICBXZWJUcmFuc2Zvcm1PcGVyYXRpb25zIHdlYlRyYW5zZm9ybU9wZXJhdGlvbnM7CisgICAg
Zm9yIChzaXplX3QgaiA9IDA7IGogPCB0cmFuc2Zvcm1PcGVyYXRpb25zLnNpemUoKTsgKytqKSB7
CisgICAgICAgIFRyYW5zZm9ybU9wZXJhdGlvbjo6T3BlcmF0aW9uVHlwZSBvcGVyYXRpb25UeXBl
ID0gdHJhbnNmb3JtT3BlcmF0aW9ucy5vcGVyYXRpb25zKClbal0tPmdldE9wZXJhdGlvblR5cGUo
KTsKKyAgICAgICAgc3dpdGNoIChvcGVyYXRpb25UeXBlKSB7CisgICAgICAgIGNhc2UgVHJhbnNm
b3JtT3BlcmF0aW9uOjpTQ0FMRV9YOgorICAgICAgICBjYXNlIFRyYW5zZm9ybU9wZXJhdGlvbjo6
U0NBTEVfWToKKyAgICAgICAgY2FzZSBUcmFuc2Zvcm1PcGVyYXRpb246OlNDQUxFX1o6CisgICAg
ICAgIGNhc2UgVHJhbnNmb3JtT3BlcmF0aW9uOjpTQ0FMRV8zRDoKKyAgICAgICAgY2FzZSBUcmFu
c2Zvcm1PcGVyYXRpb246OlNDQUxFOiB7CisgICAgICAgICAgICBTY2FsZVRyYW5zZm9ybU9wZXJh
dGlvbiogdHJhbnNmb3JtID0gc3RhdGljX2Nhc3Q8U2NhbGVUcmFuc2Zvcm1PcGVyYXRpb24qPih0
cmFuc2Zvcm1PcGVyYXRpb25zLm9wZXJhdGlvbnMoKVtqXS5nZXQoKSk7CisgICAgICAgICAgICB3
ZWJUcmFuc2Zvcm1PcGVyYXRpb25zLmFwcGVuZFNjYWxlKHRyYW5zZm9ybS0+eCgpLCB0cmFuc2Zv
cm0tPnkoKSwgdHJhbnNmb3JtLT56KCkpOworICAgICAgICAgICAgYnJlYWs7CisgICAgICAgIH0K
KyAgICAgICAgY2FzZSBUcmFuc2Zvcm1PcGVyYXRpb246OlRSQU5TTEFURV9YOgorICAgICAgICBj
YXNlIFRyYW5zZm9ybU9wZXJhdGlvbjo6VFJBTlNMQVRFX1k6CisgICAgICAgIGNhc2UgVHJhbnNm
b3JtT3BlcmF0aW9uOjpUUkFOU0xBVEVfWjoKKyAgICAgICAgY2FzZSBUcmFuc2Zvcm1PcGVyYXRp
b246OlRSQU5TTEFURV8zRDoKKyAgICAgICAgY2FzZSBUcmFuc2Zvcm1PcGVyYXRpb246OlRSQU5T
TEFURTogeworICAgICAgICAgICAgVHJhbnNsYXRlVHJhbnNmb3JtT3BlcmF0aW9uKiB0cmFuc2Zv
cm0gPSBzdGF0aWNfY2FzdDxUcmFuc2xhdGVUcmFuc2Zvcm1PcGVyYXRpb24qPih0cmFuc2Zvcm1P
cGVyYXRpb25zLm9wZXJhdGlvbnMoKVtqXS5nZXQoKSk7CisgICAgICAgICAgICB3ZWJUcmFuc2Zv
cm1PcGVyYXRpb25zLmFwcGVuZFRyYW5zbGF0ZShmbG9hdFZhbHVlRm9yTGVuZ3RoKHRyYW5zZm9y
bS0+eCgpLCBib3hTaXplLndpZHRoKCkpLCBmbG9hdFZhbHVlRm9yTGVuZ3RoKHRyYW5zZm9ybS0+
eSgpLCBib3hTaXplLmhlaWdodCgpKSwgZmxvYXRWYWx1ZUZvckxlbmd0aCh0cmFuc2Zvcm0tPnoo
KSwgMSkpOworICAgICAgICAgICAgYnJlYWs7CisgICAgICAgIH0KKyAgICAgICAgY2FzZSBUcmFu
c2Zvcm1PcGVyYXRpb246OlJPVEFURV9YOgorICAgICAgICBjYXNlIFRyYW5zZm9ybU9wZXJhdGlv
bjo6Uk9UQVRFX1k6CisgICAgICAgIGNhc2UgVHJhbnNmb3JtT3BlcmF0aW9uOjpST1RBVEVfM0Q6
CisgICAgICAgIGNhc2UgVHJhbnNmb3JtT3BlcmF0aW9uOjpST1RBVEU6IHsKKyAgICAgICAgICAg
IFJvdGF0ZVRyYW5zZm9ybU9wZXJhdGlvbiogdHJhbnNmb3JtID0gc3RhdGljX2Nhc3Q8Um90YXRl
VHJhbnNmb3JtT3BlcmF0aW9uKj4odHJhbnNmb3JtT3BlcmF0aW9ucy5vcGVyYXRpb25zKClbal0u
Z2V0KCkpOworICAgICAgICAgICAgd2ViVHJhbnNmb3JtT3BlcmF0aW9ucy5hcHBlbmRSb3RhdGUo
dHJhbnNmb3JtLT54KCksIHRyYW5zZm9ybS0+eSgpLCB0cmFuc2Zvcm0tPnooKSwgdHJhbnNmb3Jt
LT5hbmdsZSgpKTsKKyAgICAgICAgICAgIGJyZWFrOworICAgICAgICB9CisgICAgICAgIGNhc2Ug
VHJhbnNmb3JtT3BlcmF0aW9uOjpTS0VXX1g6CisgICAgICAgIGNhc2UgVHJhbnNmb3JtT3BlcmF0
aW9uOjpTS0VXX1k6CisgICAgICAgIGNhc2UgVHJhbnNmb3JtT3BlcmF0aW9uOjpTS0VXOiB7Cisg
ICAgICAgICAgICBTa2V3VHJhbnNmb3JtT3BlcmF0aW9uKiB0cmFuc2Zvcm0gPSBzdGF0aWNfY2Fz
dDxTa2V3VHJhbnNmb3JtT3BlcmF0aW9uKj4odHJhbnNmb3JtT3BlcmF0aW9ucy5vcGVyYXRpb25z
KClbal0uZ2V0KCkpOworICAgICAgICAgICAgd2ViVHJhbnNmb3JtT3BlcmF0aW9ucy5hcHBlbmRT
a2V3KHRyYW5zZm9ybS0+YW5nbGVYKCksIHRyYW5zZm9ybS0+YW5nbGVZKCkpOworICAgICAgICAg
ICAgYnJlYWs7CisgICAgICAgIH0KKyAgICAgICAgY2FzZSBUcmFuc2Zvcm1PcGVyYXRpb246Ok1B
VFJJWDogeworICAgICAgICAgICAgTWF0cml4VHJhbnNmb3JtT3BlcmF0aW9uKiB0cmFuc2Zvcm0g
PSBzdGF0aWNfY2FzdDxNYXRyaXhUcmFuc2Zvcm1PcGVyYXRpb24qPih0cmFuc2Zvcm1PcGVyYXRp
b25zLm9wZXJhdGlvbnMoKVtqXS5nZXQoKSk7CisgICAgICAgICAgICBUcmFuc2Zvcm1hdGlvbk1h
dHJpeCBtID0gdHJhbnNmb3JtLT5tYXRyaXgoKTsKKyAgICAgICAgICAgIHdlYlRyYW5zZm9ybU9w
ZXJhdGlvbnMuYXBwZW5kTWF0cml4KFdlYlRyYW5zZm9ybWF0aW9uTWF0cml4KG0pKTsKKyAgICAg
ICAgICAgIGJyZWFrOworICAgICAgICB9CisgICAgICAgIGNhc2UgVHJhbnNmb3JtT3BlcmF0aW9u
OjpNQVRSSVhfM0Q6IHsKKyAgICAgICAgICAgIE1hdHJpeDNEVHJhbnNmb3JtT3BlcmF0aW9uKiB0
cmFuc2Zvcm0gPSBzdGF0aWNfY2FzdDxNYXRyaXgzRFRyYW5zZm9ybU9wZXJhdGlvbio+KHRyYW5z
Zm9ybU9wZXJhdGlvbnMub3BlcmF0aW9ucygpW2pdLmdldCgpKTsKKyAgICAgICAgICAgIFRyYW5z
Zm9ybWF0aW9uTWF0cml4IG0gPSB0cmFuc2Zvcm0tPm1hdHJpeCgpOworICAgICAgICAgICAgd2Vi
VHJhbnNmb3JtT3BlcmF0aW9ucy5hcHBlbmRNYXRyaXgoV2ViVHJhbnNmb3JtYXRpb25NYXRyaXgo
bSkpOworICAgICAgICAgICAgYnJlYWs7CisgICAgICAgIH0KKyAgICAgICAgY2FzZSBUcmFuc2Zv
cm1PcGVyYXRpb246OlBFUlNQRUNUSVZFOiB7CisgICAgICAgICAgICBQZXJzcGVjdGl2ZVRyYW5z
Zm9ybU9wZXJhdGlvbiogdHJhbnNmb3JtID0gc3RhdGljX2Nhc3Q8UGVyc3BlY3RpdmVUcmFuc2Zv
cm1PcGVyYXRpb24qPih0cmFuc2Zvcm1PcGVyYXRpb25zLm9wZXJhdGlvbnMoKVtqXS5nZXQoKSk7
CisgICAgICAgICAgICB3ZWJUcmFuc2Zvcm1PcGVyYXRpb25zLmFwcGVuZFBlcnNwZWN0aXZlKGZs
b2F0VmFsdWVGb3JMZW5ndGgodHJhbnNmb3JtLT5wZXJzcGVjdGl2ZSgpLCAwKSk7CisgICAgICAg
ICAgICBicmVhazsKKyAgICAgICAgfQorICAgICAgICBjYXNlIFRyYW5zZm9ybU9wZXJhdGlvbjo6
SURFTlRJVFk6CisgICAgICAgIGNhc2UgVHJhbnNmb3JtT3BlcmF0aW9uOjpOT05FOgorICAgICAg
ICAgICAgLy8gRG8gbm90aGluZy4KKyAgICAgICAgICAgIGJyZWFrOworICAgICAgICB9IC8vIHN3
aXRjaAorICAgIH0gLy8gZm9yIGVhY2ggb3BlcmF0aW9uCisKKyAgICByZXR1cm4gd2ViVHJhbnNm
b3JtT3BlcmF0aW9uczsKK30KKwordGVtcGxhdGUgPGNsYXNzIFZhbHVlLCBjbGFzcyBLZXlmcmFt
ZSwgY2xhc3MgQ3VydmU+Citib29sIGFwcGVuZEtleWZyYW1lKEN1cnZlJiBjdXJ2ZSwgZG91Ymxl
IGtleVRpbWUsIGNvbnN0IFZhbHVlKiB2YWx1ZSwgUGFzc093blB0cjxDQ1RpbWluZ0Z1bmN0aW9u
PiB0aW1pbmdGdW5jdGlvbiwgY29uc3QgRmxvYXRTaXplJikKK3sKKyAgICBjdXJ2ZS5hZGRLZXlm
cmFtZShLZXlmcmFtZTo6Y3JlYXRlKGtleVRpbWUsIHZhbHVlLT52YWx1ZSgpLCB0aW1pbmdGdW5j
dGlvbikpOworICAgIHJldHVybiB0cnVlOworfQorCit0ZW1wbGF0ZSA8PgorYm9vbCBhcHBlbmRL
ZXlmcmFtZTxUcmFuc2Zvcm1BbmltYXRpb25WYWx1ZSwgQ0NUcmFuc2Zvcm1LZXlmcmFtZSwgQ0NL
ZXlmcmFtZWRUcmFuc2Zvcm1BbmltYXRpb25DdXJ2ZT4oQ0NLZXlmcmFtZWRUcmFuc2Zvcm1Bbmlt
YXRpb25DdXJ2ZSYgY3VydmUsIGRvdWJsZSBrZXlUaW1lLCBjb25zdCBUcmFuc2Zvcm1BbmltYXRp
b25WYWx1ZSogdmFsdWUsIFBhc3NPd25QdHI8Q0NUaW1pbmdGdW5jdGlvbj4gdGltaW5nRnVuY3Rp
b24sIGNvbnN0IEZsb2F0U2l6ZSYgYm94U2l6ZSkKK3sKKyAgICBXZWJUcmFuc2Zvcm1PcGVyYXRp
b25zIG9wZXJhdGlvbnMgPSB0b1dlYlRyYW5zZm9ybU9wZXJhdGlvbnMoKnZhbHVlLT52YWx1ZSgp
LCBib3hTaXplKTsKKyAgICBpZiAob3BlcmF0aW9ucy5hcHBseSgpLmlzSW52ZXJ0aWJsZSgpKSB7
CisgICAgICAgIGN1cnZlLmFkZEtleWZyYW1lKENDVHJhbnNmb3JtS2V5ZnJhbWU6OmNyZWF0ZShr
ZXlUaW1lLCBvcGVyYXRpb25zLCB0aW1pbmdGdW5jdGlvbikpOworICAgICAgICByZXR1cm4gdHJ1
ZTsKKyAgICB9CisgICAgcmV0dXJuIGZhbHNlOworfQorCit0ZW1wbGF0ZSA8Y2xhc3MgVmFsdWUs
IGNsYXNzIEtleWZyYW1lLCBjbGFzcyBDdXJ2ZT4KK1Bhc3NPd25QdHI8Q0NBY3RpdmVBbmltYXRp
b24+IGNyZWF0ZUFjdGl2ZUFuaW1hdGlvbihjb25zdCBLZXlmcmFtZVZhbHVlTGlzdCYgdmFsdWVM
aXN0LCBjb25zdCBBbmltYXRpb24qIGFuaW1hdGlvbiwgc2l6ZV90IGFuaW1hdGlvbklkLCBzaXpl
X3QgZ3JvdXBJZCwgZG91YmxlIHRpbWVPZmZzZXQsIENDQWN0aXZlQW5pbWF0aW9uOjpUYXJnZXRQ
cm9wZXJ0eSB0YXJnZXRQcm9wZXJ0eSwgY29uc3QgRmxvYXRTaXplJiBib3hTaXplKQoreworICAg
IGJvb2wgYWx0ZXJuYXRlID0gZmFsc2U7CisgICAgYm9vbCByZXZlcnNlID0gZmFsc2U7CisgICAg
aWYgKGFuaW1hdGlvbiAmJiBhbmltYXRpb24tPmlzRGlyZWN0aW9uU2V0KCkpIHsKKyAgICAgICAg
QW5pbWF0aW9uOjpBbmltYXRpb25EaXJlY3Rpb24gZGlyZWN0aW9uID0gYW5pbWF0aW9uLT5kaXJl
Y3Rpb24oKTsKKyAgICAgICAgaWYgKGRpcmVjdGlvbiA9PSBBbmltYXRpb246OkFuaW1hdGlvbkRp
cmVjdGlvbkFsdGVybmF0ZSB8fCBkaXJlY3Rpb24gPT0gQW5pbWF0aW9uOjpBbmltYXRpb25EaXJl
Y3Rpb25BbHRlcm5hdGVSZXZlcnNlKQorICAgICAgICAgICAgYWx0ZXJuYXRlID0gdHJ1ZTsKKyAg
ICAgICAgaWYgKGRpcmVjdGlvbiA9PSBBbmltYXRpb246OkFuaW1hdGlvbkRpcmVjdGlvblJldmVy
c2UgfHwgZGlyZWN0aW9uID09IEFuaW1hdGlvbjo6QW5pbWF0aW9uRGlyZWN0aW9uQWx0ZXJuYXRl
UmV2ZXJzZSkKKyAgICAgICAgICAgIHJldmVyc2UgPSB0cnVlOworICAgIH0KKworICAgIE93blB0
cjxDdXJ2ZT4gY3VydmUgPSBDdXJ2ZTo6Y3JlYXRlKCk7CisgICAgVmVjdG9yPEtleWZyYW1lPiBr
ZXlmcmFtZXM7CisKKyAgICBmb3IgKHNpemVfdCBpID0gMDsgaSA8IHZhbHVlTGlzdC5zaXplKCk7
IGkrKykgeworICAgICAgICBzaXplX3QgaW5kZXggPSByZXZlcnNlID8gdmFsdWVMaXN0LnNpemUo
KSAtIGkgLSAxIDogaTsKKworICAgICAgICBjb25zdCBWYWx1ZSogb3JpZ2luYWxWYWx1ZSA9IHN0
YXRpY19jYXN0PGNvbnN0IFZhbHVlKj4odmFsdWVMaXN0LmF0KGluZGV4KSk7CisKKyAgICAgICAg
T3duUHRyPENDVGltaW5nRnVuY3Rpb24+IHRpbWluZ0Z1bmN0aW9uOworICAgICAgICBjb25zdCBU
aW1pbmdGdW5jdGlvbiogb3JpZ2luYWxUaW1pbmdGdW5jdGlvbiA9IG9yaWdpbmFsVmFsdWUtPnRp
bWluZ0Z1bmN0aW9uKCk7CisKKyAgICAgICAgLy8gSWYgdGhlcmUgaGFzbid0IGJlZW4gYSB0aW1p
bmcgZnVuY3Rpb24gYXNzb2NpYXRlZCB3aXRoIHRoaXMga2V5ZnJhbWUsIHVzZSB0aGUKKyAgICAg
ICAgLy8gYW5pbWF0aW9uJ3MgdGltaW5nIGZ1bmN0aW9uLCBpZiB3ZSBoYXZlIG9uZS4KKyAgICAg
ICAgaWYgKCFvcmlnaW5hbFRpbWluZ0Z1bmN0aW9uICYmIGFuaW1hdGlvbi0+aXNUaW1pbmdGdW5j
dGlvblNldCgpKQorICAgICAgICAgICAgb3JpZ2luYWxUaW1pbmdGdW5jdGlvbiA9IGFuaW1hdGlv
bi0+dGltaW5nRnVuY3Rpb24oKS5nZXQoKTsKKworICAgICAgICBpZiAob3JpZ2luYWxUaW1pbmdG
dW5jdGlvbikgeworICAgICAgICAgICAgc3dpdGNoIChvcmlnaW5hbFRpbWluZ0Z1bmN0aW9uLT50
eXBlKCkpIHsKKyAgICAgICAgICAgIGNhc2UgVGltaW5nRnVuY3Rpb246OlN0ZXBzRnVuY3Rpb246
CisgICAgICAgICAgICAgICAgLy8gRklYTUU6IGFkZCBzdXBwb3J0IGZvciBzdGVwcyB0aW1pbmcg
ZnVuY3Rpb24uCisgICAgICAgICAgICAgICAgcmV0dXJuIG51bGxwdHI7CisgICAgICAgICAgICBj
YXNlIFRpbWluZ0Z1bmN0aW9uOjpMaW5lYXJGdW5jdGlvbjoKKyAgICAgICAgICAgICAgICAvLyBE
b24ndCBzZXQgdGhlIHRpbWluZyBmdW5jdGlvbi4gS2V5ZnJhbWVzIGFyZSBpbnRlcnBvbGF0ZWQg
bGluZWFybHkgaWYgdGhlcmUgaXMgbm8gdGltaW5nIGZ1bmN0aW9uLgorICAgICAgICAgICAgICAg
IGJyZWFrOworICAgICAgICAgICAgY2FzZSBUaW1pbmdGdW5jdGlvbjo6Q3ViaWNCZXppZXJGdW5j
dGlvbjoKKyAgICAgICAgICAgICAgICBjb25zdCBDdWJpY0JlemllclRpbWluZ0Z1bmN0aW9uKiBv
cmlnaW5hbEJlemllclRpbWluZ0Z1bmN0aW9uID0gc3RhdGljX2Nhc3Q8Y29uc3QgQ3ViaWNCZXpp
ZXJUaW1pbmdGdW5jdGlvbio+KG9yaWdpbmFsVGltaW5nRnVuY3Rpb24pOworICAgICAgICAgICAg
ICAgIHRpbWluZ0Z1bmN0aW9uID0gQ0NDdWJpY0JlemllclRpbWluZ0Z1bmN0aW9uOjpjcmVhdGUo
b3JpZ2luYWxCZXppZXJUaW1pbmdGdW5jdGlvbi0+eDEoKSwgb3JpZ2luYWxCZXppZXJUaW1pbmdG
dW5jdGlvbi0+eTEoKSwgb3JpZ2luYWxCZXppZXJUaW1pbmdGdW5jdGlvbi0+eDIoKSwgb3JpZ2lu
YWxCZXppZXJUaW1pbmdGdW5jdGlvbi0+eTIoKSk7CisgICAgICAgICAgICAgICAgYnJlYWs7Cisg
ICAgICAgICAgICB9IC8vIHN3aXRjaAorICAgICAgICB9IGVsc2UKKyAgICAgICAgICAgIHRpbWlu
Z0Z1bmN0aW9uID0gQ0NFYXNlVGltaW5nRnVuY3Rpb246OmNyZWF0ZSgpOworCisgICAgICAgIGRv
dWJsZSBkdXJhdGlvbiA9IChhbmltYXRpb24gJiYgYW5pbWF0aW9uLT5pc0R1cmF0aW9uU2V0KCkp
ID8gYW5pbWF0aW9uLT5kdXJhdGlvbigpIDogMTsKKyAgICAgICAgZG91YmxlIGtleVRpbWUgPSBv
cmlnaW5hbFZhbHVlLT5rZXlUaW1lKCkgKiBkdXJhdGlvbjsKKworICAgICAgICBpZiAocmV2ZXJz
ZSkKKyAgICAgICAgICAgIGtleVRpbWUgPSBkdXJhdGlvbiAtIGtleVRpbWU7CisKKyAgICAgICAg
Ym9vbCBhZGRlZEtleWZyYW1lID0gYXBwZW5kS2V5ZnJhbWU8VmFsdWUsIEtleWZyYW1lLCBDdXJ2
ZT4oKmN1cnZlLCBrZXlUaW1lLCBvcmlnaW5hbFZhbHVlLCB0aW1pbmdGdW5jdGlvbi5yZWxlYXNl
KCksIGJveFNpemUpOworICAgICAgICBpZiAoIWFkZGVkS2V5ZnJhbWUpCisgICAgICAgICAgICBy
ZXR1cm4gbnVsbHB0cjsKKyAgICB9CisKKyAgICBPd25QdHI8Q0NBY3RpdmVBbmltYXRpb24+IGFu
aW0gPSBDQ0FjdGl2ZUFuaW1hdGlvbjo6Y3JlYXRlKGN1cnZlLnJlbGVhc2UoKSwgYW5pbWF0aW9u
SWQsIGdyb3VwSWQsIHRhcmdldFByb3BlcnR5KTsKKworICAgIEFTU0VSVChhbmltLmdldCgpKTsK
KworICAgIGlmIChhbmltLmdldCgpKSB7CisgICAgICAgIGludCBpdGVyYXRpb25zID0gKGFuaW1h
dGlvbiAmJiBhbmltYXRpb24tPmlzSXRlcmF0aW9uQ291bnRTZXQoKSkgPyBhbmltYXRpb24tPml0
ZXJhdGlvbkNvdW50KCkgOiAxOworICAgICAgICBhbmltLT5zZXRJdGVyYXRpb25zKGl0ZXJhdGlv
bnMpOworICAgICAgICBhbmltLT5zZXRBbHRlcm5hdGVzRGlyZWN0aW9uKGFsdGVybmF0ZSk7Cisg
ICAgfQorCisgICAgLy8gSW4gb3JkZXIgdG8gYXZvaWQgc2tldywgdGhlIG1haW4gdGhyZWFkIGFu
aW1hdGlvbiBjYW5ub3QgdGljayB1bnRpbCBpdCBoYXMgcmVjZWl2ZWQgdGhlIHN0YXJ0IHRpbWUg
b2YKKyAgICAvLyB0aGUgY29ycmVzcG9uZGluZyBpbXBsIHRocmVhZCBhbmltYXRpb24uCisgICAg
YW5pbS0+c2V0TmVlZHNTeW5jaHJvbml6ZWRTdGFydFRpbWUodHJ1ZSk7CisKKyAgICAvLyBJZiB0
aW1lT2Zmc2V0ID4gMCwgdGhlbiB0aGUgYW5pbWF0aW9uIGhhcyBzdGFydGVkIGluIHRoZSBwYXN0
LgorICAgIGFuaW0tPnNldFRpbWVPZmZzZXQodGltZU9mZnNldCk7CisKKyAgICByZXR1cm4gYW5p
bS5yZWxlYXNlKCk7Cit9CisKK1Bhc3NPd25QdHI8Q0NBY3RpdmVBbmltYXRpb24+IGNyZWF0ZUFj
dGl2ZUFuaW1hdGlvbihjb25zdCBLZXlmcmFtZVZhbHVlTGlzdCYgdmFsdWVzLCBjb25zdCBBbmlt
YXRpb24qIGFuaW1hdGlvbiwgc2l6ZV90IGFuaW1hdGlvbklkLCBzaXplX3QgZ3JvdXBJZCwgZG91
YmxlIHRpbWVPZmZzZXQsIGNvbnN0IEZsb2F0U2l6ZSYgYm94U2l6ZSkKK3sKKyAgICBpZiAodmFs
dWVzLnByb3BlcnR5KCkgPT0gQW5pbWF0ZWRQcm9wZXJ0eVdlYmtpdFRyYW5zZm9ybSkKKyAgICAg
ICAgcmV0dXJuIGNyZWF0ZUFjdGl2ZUFuaW1hdGlvbjxUcmFuc2Zvcm1BbmltYXRpb25WYWx1ZSwg
Q0NUcmFuc2Zvcm1LZXlmcmFtZSwgQ0NLZXlmcmFtZWRUcmFuc2Zvcm1BbmltYXRpb25DdXJ2ZT4o
dmFsdWVzLCBhbmltYXRpb24sIGFuaW1hdGlvbklkLCBncm91cElkLCB0aW1lT2Zmc2V0LCBDQ0Fj
dGl2ZUFuaW1hdGlvbjo6VHJhbnNmb3JtLCBGbG9hdFNpemUoYm94U2l6ZSkpOworCisgICAgaWYg
KHZhbHVlcy5wcm9wZXJ0eSgpID09IEFuaW1hdGVkUHJvcGVydHlPcGFjaXR5KQorICAgICAgICBy
ZXR1cm4gY3JlYXRlQWN0aXZlQW5pbWF0aW9uPEZsb2F0QW5pbWF0aW9uVmFsdWUsIENDRmxvYXRL
ZXlmcmFtZSwgQ0NLZXlmcmFtZWRGbG9hdEFuaW1hdGlvbkN1cnZlPih2YWx1ZXMsIGFuaW1hdGlv
biwgYW5pbWF0aW9uSWQsIGdyb3VwSWQsIHRpbWVPZmZzZXQsIENDQWN0aXZlQW5pbWF0aW9uOjpP
cGFjaXR5LCBGbG9hdFNpemUoKSk7CisKKyAgICByZXR1cm4gbnVsbHB0cjsKK30KKworfSAvLyBu
YW1lc3BhY2UgV2ViQ29yZQpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3Jh
cGhpY3MvY2hyb21pdW0vQW5pbWF0aW9uVHJhbnNsYXRpb25VdGlsLmggYi9Tb3VyY2UvV2ViQ29y
ZS9wbGF0Zm9ybS9ncmFwaGljcy9jaHJvbWl1bS9BbmltYXRpb25UcmFuc2xhdGlvblV0aWwuaApu
ZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwLi5iMjI0MWI1ZTA3MTJiOGQ2MGYwNmM5OWQ2YmFmNzA5ZDVlZGUwZTc4Ci0tLSAv
ZGV2L251bGwKKysrIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvY2hyb21pdW0v
QW5pbWF0aW9uVHJhbnNsYXRpb25VdGlsLmgKQEAgLTAsMCArMSw1MiBAQAorLyoKKyAqIENvcHly
aWdodCAoQykgMjAxMCBHb29nbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICoKKyAqIFJl
ZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Ig
d2l0aG91dAorICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhl
IGZvbGxvd2luZyBjb25kaXRpb25zIGFyZQorICogbWV0OgorICoKKyAqICAgICAqIFJlZGlzdHJp
YnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0Cisg
KiBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2Ns
YWltZXIuCisgKiAgICAgKiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXBy
b2R1Y2UgdGhlIGFib3ZlCisgKiBjb3B5cmlnaHQgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0
aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyCisgKiBpbiB0aGUgZG9jdW1lbnRhdGlv
biBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlCisgKiBkaXN0cmlidXRp
b24uCisgKiAgICAgKiBOZWl0aGVyIHRoZSBuYW1lIG9mIEdvb2dsZSBJbmMuIG5vciB0aGUgbmFt
ZXMgb2YgaXRzCisgKiBjb250cmlidXRvcnMgbWF5IGJlIHVzZWQgdG8gZW5kb3JzZSBvciBwcm9t
b3RlIHByb2R1Y3RzIGRlcml2ZWQgZnJvbQorICogdGhpcyBzb2Z0d2FyZSB3aXRob3V0IHNwZWNp
ZmljIHByaW9yIHdyaXR0ZW4gcGVybWlzc2lvbi4KKyAqCisgKiBUSElTIFNPRlRXQVJFIElTIFBS
T1ZJREVEIEJZIFRIRSBDT1BZUklHSFQgSE9MREVSUyBBTkQgQ09OVFJJQlVUT1JTCisgKiAiQVMg
SVMiIEFORCBBTlkgRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVU
IE5PVAorICogTElNSVRFRCBUTywgVEhFIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFC
SUxJVFkgQU5EIEZJVE5FU1MgRk9SCisgKiBBIFBBUlRJQ1VMQVIgUFVSUE9TRSBBUkUgRElTQ0xB
SU1FRC4gSU4gTk8gRVZFTlQgU0hBTEwgVEhFIENPUFlSSUdIVAorICogT1dORVIgT1IgQ09OVFJJ
QlVUT1JTIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsCisg
KiBTUEVDSUFMLCBFWEVNUExBUlksIE9SIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5H
LCBCVVQgTk9UCisgKiBMSU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBPRiBTVUJTVElUVVRFIEdPT0RT
IE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwKKyAqIERBVEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lO
RVNTIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWQorICogVEhFT1JZIE9G
IExJQUJJTElUWSwgV0hFVEhFUiBJTiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9S
VAorICogKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJU0lORyBJTiBBTlkg
V0FZIE9VVCBPRiBUSEUgVVNFCisgKiBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQg
T0YgVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgorICovCisKKyNpZm5kZWYgQW5pbWF0
aW9uVHJhbnNsYXRpb25VdGlsX2gKKyNkZWZpbmUgQW5pbWF0aW9uVHJhbnNsYXRpb25VdGlsX2gK
KworI2luY2x1ZGUgPHd0Zi9QYXNzT3duUHRyLmg+CisKK2NsYXNzIEtleWZyYW1lVmFsdWVMaXN0
OworY2xhc3MgQW5pbWF0aW9uOworY2xhc3MgRmxvYXRTaXplOworY2xhc3MgQ0NBY3RpdmVBbmlt
YXRpb247CisKK25hbWVzcGFjZSBXZWJDb3JlIHsKKworLy8gVHJhbnNsYXRlcyBXZWJDb3JlIGFu
aW1hdGlvbiBkYXRhIGludG8gYSBDQ0FjdGl2ZUFuaW1hdGlvbi4gSWYgd2UgYXJlIHVuYWJsZQor
Ly8gdG8gcGVyZm9ybSB0aGlzIHRyYW5zbGF0aW9uLCB3ZSByZXR1cm4gbnVsbHB0ci4gVGhpcyBj
YW4gaGFwcGVuIGlmCisvLyAgIC0gYSBzdGVwcyB0aW1pbmcgZnVuY3Rpb24gaXMgdXNlZCwKKy8v
ICAgLSBhIHByb3BlcnR5IG90aGVyIHRoYW4gQW5pbWF0ZWRQcm9wZXJ0eVdlYmtpdFRyYW5zZm9y
bSwgb3IgQW5pbWF0ZWRQcm9wZXJ0eU9wYWNpdHkgaXMgYW5pbWF0ZWQsIG9yCisvLyAgIC0gYSB0
cmFuc2Zvcm0gYW5pbWF0aW9uIGludm9sdmVzIGEgbm9uLWludmVydGFibGUgdHJhbnNmb3JtLgor
UGFzc093blB0cjxDQ0FjdGl2ZUFuaW1hdGlvbj4gY3JlYXRlQWN0aXZlQW5pbWF0aW9uKGNvbnN0
IEtleWZyYW1lVmFsdWVMaXN0JiwgY29uc3QgQW5pbWF0aW9uKiwgc2l6ZV90IGFuaW1hdGlvbklk
LCBzaXplX3QgZ3JvdXBJZCwgZG91YmxlIHRpbWVPZmZzZXQsIGNvbnN0IEZsb2F0U2l6ZSYgYm94
U2l6ZSk7CisKK30gLy8gbmFtZXNwYWNlIFdlYkNvcmUKKworI2VuZGlmIC8vIEFuaW1hdGlvblRy
YW5zbGF0aW9uVXRpbF9oCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFw
aGljcy9jaHJvbWl1bS9HcmFwaGljc0xheWVyQ2hyb21pdW0uY3BwIGIvU291cmNlL1dlYkNvcmUv
cGxhdGZvcm0vZ3JhcGhpY3MvY2hyb21pdW0vR3JhcGhpY3NMYXllckNocm9taXVtLmNwcAppbmRl
eCAxODQzMzM2MDk1MWIyYmZjZWE3Y2IxMWJiZTkwMDFlYTk4NWY0ZTAxLi45NDlhNGE5OGQzNjFi
NGEzZDEwMWNkM2YxMzM0ZmZkZThiNzkyYzJiIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9w
bGF0Zm9ybS9ncmFwaGljcy9jaHJvbWl1bS9HcmFwaGljc0xheWVyQ2hyb21pdW0uY3BwCisrKyBi
L1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2Nocm9taXVtL0dyYXBoaWNzTGF5ZXJD
aHJvbWl1bS5jcHAKQEAgLTQ2LDYgKzQ2LDcgQEAKICNpbmNsdWRlICJHcmFwaGljc0xheWVyQ2hy
b21pdW0uaCIKIAogI2luY2x1ZGUgIkFuaW1hdGlvbklkVmVuZG9yLmgiCisjaW5jbHVkZSAiQW5p
bWF0aW9uVHJhbnNsYXRpb25VdGlsLmgiCiAjaW5jbHVkZSAiQ2FudmFzMkRMYXllckNocm9taXVt
LmgiCiAjaW5jbHVkZSAiQ29udGVudExheWVyQ2hyb21pdW0uaCIKICNpbmNsdWRlICJGbG9hdENv
bnZlcnNpb24uaCIKQEAgLTU4LDYgKzU5LDggQEAKICNpbmNsdWRlICJTa01hdHJpeDQ0LmgiCiAj
aW5jbHVkZSAiU3lzdGVtVGltZS5oIgogCisjaW5jbHVkZSAiY2MvQ0NBY3RpdmVBbmltYXRpb24u
aCIKKwogI2luY2x1ZGUgPHB1YmxpYy9XZWJGaWx0ZXJPcGVyYXRpb24uaD4KICNpbmNsdWRlIDxw
dWJsaWMvV2ViRmlsdGVyT3BlcmF0aW9ucy5oPgogI2luY2x1ZGUgPHB1YmxpYy9XZWJGbG9hdFBv
aW50Lmg+CkBAIC01MDAsOCArNTAzLDI4IEBAIHZvaWQgR3JhcGhpY3NMYXllckNocm9taXVtOjpz
ZXRDb250ZW50c1RvQ2FudmFzKFBsYXRmb3JtTGF5ZXIqIHBsYXRmb3JtTGF5ZXIpCiAKIGJvb2wg
R3JhcGhpY3NMYXllckNocm9taXVtOjphZGRBbmltYXRpb24oY29uc3QgS2V5ZnJhbWVWYWx1ZUxp
c3QmIHZhbHVlcywgY29uc3QgSW50U2l6ZSYgYm94U2l6ZSwgY29uc3QgQW5pbWF0aW9uKiBhbmlt
YXRpb24sIGNvbnN0IFN0cmluZyYgYW5pbWF0aW9uTmFtZSwgZG91YmxlIHRpbWVPZmZzZXQpCiB7
CisgICAgLy8gQmFpbCBlYXJseSBpZiB3ZSBoYXZlIGEgbGFyZ2Ugcm90YXRpb24uCisgICAgaWYg
KHZhbHVlcy5wcm9wZXJ0eSgpID09IEFuaW1hdGVkUHJvcGVydHlXZWJraXRUcmFuc2Zvcm0pIHsK
KyAgICAgICAgYm9vbCBoYXNSb3RhdGlvbk9mTW9yZVRoYW4xODBEZWdyZWVzID0gZmFsc2U7Cisg
ICAgICAgIHZhbGlkYXRlVHJhbnNmb3JtT3BlcmF0aW9ucyh2YWx1ZXMsIGhhc1JvdGF0aW9uT2ZN
b3JlVGhhbjE4MERlZ3JlZXMpOworICAgICAgICBpZiAoaGFzUm90YXRpb25PZk1vcmVUaGFuMTgw
RGVncmVlcykKKyAgICAgICAgICAgIHJldHVybiBmYWxzZTsKKyAgICB9CisKICAgICBwcmltYXJ5
TGF5ZXIoKS51bndyYXA8TGF5ZXJDaHJvbWl1bT4oKS0+c2V0TGF5ZXJBbmltYXRpb25EZWxlZ2F0
ZSh0aGlzKTsKLSAgICByZXR1cm4gcHJpbWFyeUxheWVyKCkudW53cmFwPExheWVyQ2hyb21pdW0+
KCktPmFkZEFuaW1hdGlvbih2YWx1ZXMsIGJveFNpemUsIGFuaW1hdGlvbiwgbWFwQW5pbWF0aW9u
TmFtZVRvSWQoYW5pbWF0aW9uTmFtZSksIEFuaW1hdGlvbklkVmVuZG9yOjpnZXROZXh0R3JvdXBJ
ZCgpLCB0aW1lT2Zmc2V0KTsKKworICAgIGludCBhbmltYXRpb25JZCA9IG1hcEFuaW1hdGlvbk5h
bWVUb0lkKGFuaW1hdGlvbk5hbWUpOworICAgIGludCBncm91cElkID0gQW5pbWF0aW9uSWRWZW5k
b3I6OmdldE5leHRHcm91cElkKCk7CisKKyAgICBPd25QdHI8Q0NBY3RpdmVBbmltYXRpb24+IHRv
QWRkKGNyZWF0ZUFjdGl2ZUFuaW1hdGlvbih2YWx1ZXMsIGFuaW1hdGlvbiwgYW5pbWF0aW9uSWQs
IGdyb3VwSWQsIHRpbWVPZmZzZXQsIGJveFNpemUpKTsKKworICAgIGlmICh0b0FkZC5nZXQoKSkg
eworICAgICAgICAvLyBSZW1vdmUgYW55IGV4aXN0aW5nIGFuaW1hdGlvbnMgd2l0aCB0aGUgc2Ft
ZSBhbmltYXRpb24gaWQgYW5kIHRhcmdldCBwcm9wZXJ0eS4KKyAgICAgICAgcHJpbWFyeUxheWVy
KCkudW53cmFwPExheWVyQ2hyb21pdW0+KCktPmxheWVyQW5pbWF0aW9uQ29udHJvbGxlcigpLT5y
ZW1vdmVBbmltYXRpb24odG9BZGQtPmlkKCksIHRvQWRkLT50YXJnZXRQcm9wZXJ0eSgpKTsKKyAg
ICAgICAgcmV0dXJuIHByaW1hcnlMYXllcigpLnVud3JhcDxMYXllckNocm9taXVtPigpLT5hZGRB
bmltYXRpb24odG9BZGQucmVsZWFzZSgpKTsKKyAgICB9CisKKyAgICByZXR1cm4gZmFsc2U7CiB9
CiAKIHZvaWQgR3JhcGhpY3NMYXllckNocm9taXVtOjpwYXVzZUFuaW1hdGlvbihjb25zdCBTdHJp
bmcmIGFuaW1hdGlvbk5hbWUsIGRvdWJsZSB0aW1lT2Zmc2V0KQpkaWZmIC0tZ2l0IGEvU291cmNl
L1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvY2hyb21pdW0vTGF5ZXJDaHJvbWl1bS5jcHAgYi9T
b3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9jaHJvbWl1bS9MYXllckNocm9taXVtLmNw
cAppbmRleCBmNjFmZDM1ZDUzMDAxNDFmMmIyZmYyNmI4NzY0YjhmNjJlMDNlMjNkLi5kMzVmNTky
MTlmZjc0M2NmZDlkZTZiZDc5ZWJlNTkxY2FjOTIxYWE5IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2Vi
Q29yZS9wbGF0Zm9ybS9ncmFwaGljcy9jaHJvbWl1bS9MYXllckNocm9taXVtLmNwcAorKysgYi9T
b3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9jaHJvbWl1bS9MYXllckNocm9taXVtLmNw
cApAQCAtMzcsNiArMzcsNyBAQAogI2luY2x1ZGUgIlBsYXRmb3JtQ29udGV4dFNraWEuaCIKICNp
bmNsdWRlICJSZW5kZXJMYXllckJhY2tpbmcuaCIKICNpbmNsdWRlICJUZXh0U3RyZWFtLmgiCisj
aW5jbHVkZSAiY2MvQ0NBY3RpdmVBbmltYXRpb24uaCIKICNpbmNsdWRlICJjYy9DQ0FuaW1hdGlv
bkV2ZW50cy5oIgogI2luY2x1ZGUgImNjL0NDTGF5ZXJBbmltYXRpb25Db250cm9sbGVyLmgiCiAj
aW5jbHVkZSAiY2MvQ0NMYXllckFuaW1hdGlvbkRlbGVnYXRlLmgiCkBAIC01OTksMTcgKzYwMCwx
NSBAQCB2b2lkIExheWVyQ2hyb21pdW06OnNldFRyYW5zZm9ybUZyb21BbmltYXRpb24oY29uc3Qg
V2ViVHJhbnNmb3JtYXRpb25NYXRyaXgmIHRyYQogICAgIG1fdHJhbnNmb3JtID0gdHJhbnNmb3Jt
OwogfQogCi1ib29sIExheWVyQ2hyb21pdW06OmFkZEFuaW1hdGlvbihjb25zdCBLZXlmcmFtZVZh
bHVlTGlzdCYgdmFsdWVzLCBjb25zdCBJbnRTaXplJiBib3hTaXplLCBjb25zdCBBbmltYXRpb24q
IGFuaW1hdGlvbiwgaW50IGFuaW1hdGlvbklkLCBpbnQgZ3JvdXBJZCwgZG91YmxlIHRpbWVPZmZz
ZXQpCitib29sIExheWVyQ2hyb21pdW06OmFkZEFuaW1hdGlvbihQYXNzT3duUHRyPENDQWN0aXZl
QW5pbWF0aW9uPiBhbmltYXRpb24pCiB7CiAgICAgaWYgKCFtX2xheWVyVHJlZUhvc3QgfHwgIW1f
bGF5ZXJUcmVlSG9zdC0+c2V0dGluZ3MoKS50aHJlYWRlZEFuaW1hdGlvbkVuYWJsZWQpCiAgICAg
ICAgIHJldHVybiBmYWxzZTsKIAotICAgIGJvb2wgYWRkZWRBbmltYXRpb24gPSBtX2xheWVyQW5p
bWF0aW9uQ29udHJvbGxlci0+YWRkQW5pbWF0aW9uKHZhbHVlcywgYm94U2l6ZSwgYW5pbWF0aW9u
LCBhbmltYXRpb25JZCwgZ3JvdXBJZCwgdGltZU9mZnNldCk7Ci0gICAgaWYgKGFkZGVkQW5pbWF0
aW9uKSB7Ci0gICAgICAgIG1fbGF5ZXJUcmVlSG9zdC0+ZGlkQWRkQW5pbWF0aW9uKCk7Ci0gICAg
ICAgIHNldE5lZWRzQ29tbWl0KCk7Ci0gICAgfQotICAgIHJldHVybiBhZGRlZEFuaW1hdGlvbjsK
KyAgICBtX2xheWVyQW5pbWF0aW9uQ29udHJvbGxlci0+YWRkQW5pbWF0aW9uKGFuaW1hdGlvbik7
CisgICAgbV9sYXllclRyZWVIb3N0LT5kaWRBZGRBbmltYXRpb24oKTsKKyAgICBzZXROZWVkc0Nv
bW1pdCgpOworICAgIHJldHVybiB0cnVlOwogfQogCiB2b2lkIExheWVyQ2hyb21pdW06OnBhdXNl
QW5pbWF0aW9uKGludCBhbmltYXRpb25JZCwgZG91YmxlIHRpbWVPZmZzZXQpCmRpZmYgLS1naXQg
YS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9jaHJvbWl1bS9MYXllckNocm9taXVt
LmggYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9jaHJvbWl1bS9MYXllckNocm9t
aXVtLmgKaW5kZXggNWQ1MmY4YmM5ZmVlZDEyNDEwNjhkMTExMmRjYzhkOWU0Mzc0NjFlZi4uMTFl
YjI3MmVhOGVmNGVhMjNkY2QyYTM0YmFiNzY5NTFkMzc1MzA0NiAxMDA2NDQKLS0tIGEvU291cmNl
L1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvY2hyb21pdW0vTGF5ZXJDaHJvbWl1bS5oCisrKyBi
L1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2Nocm9taXVtL0xheWVyQ2hyb21pdW0u
aApAQCAtNTcsNiArNTcsNyBAQAogCiBuYW1lc3BhY2UgV2ViQ29yZSB7CiAKK2NsYXNzIENDQWN0
aXZlQW5pbWF0aW9uOwogc3RydWN0IENDQW5pbWF0aW9uRXZlbnQ7CiBjbGFzcyBDQ0xheWVyQW5p
bWF0aW9uRGVsZWdhdGU7CiBjbGFzcyBDQ0xheWVySW1wbDsKQEAgLTc4LDcgKzc5LDYgQEAgcHVi
bGljOgogICAgIHZpcnR1YWwgZmxvYXQgb3BhY2l0eSgpIGNvbnN0IE9WRVJSSURFIHsgcmV0dXJu
IG1fb3BhY2l0eTsgfQogICAgIHZpcnR1YWwgdm9pZCBzZXRUcmFuc2Zvcm1Gcm9tQW5pbWF0aW9u
KGNvbnN0IFdlYktpdDo6V2ViVHJhbnNmb3JtYXRpb25NYXRyaXgmKSBPVkVSUklERTsKICAgICB2
aXJ0dWFsIGNvbnN0IFdlYktpdDo6V2ViVHJhbnNmb3JtYXRpb25NYXRyaXgmIHRyYW5zZm9ybSgp
IGNvbnN0IE9WRVJSSURFIHsgcmV0dXJuIG1fdHJhbnNmb3JtOyB9Ci0gICAgdmlydHVhbCBjb25z
dCBJbnRTaXplJiBib3VuZHMoKSBjb25zdCBPVkVSUklERSB7IHJldHVybiBtX2JvdW5kczsgfQog
CiAgICAgY29uc3QgTGF5ZXJDaHJvbWl1bSogcm9vdExheWVyKCkgY29uc3Q7CiAgICAgTGF5ZXJD
aHJvbWl1bSogcGFyZW50KCkgY29uc3Q7CkBAIC0xMDAsNiArMTAwLDcgQEAgcHVibGljOgogICAg
IENvbG9yIGJhY2tncm91bmRDb2xvcigpIGNvbnN0IHsgcmV0dXJuIG1fYmFja2dyb3VuZENvbG9y
OyB9CiAKICAgICB2b2lkIHNldEJvdW5kcyhjb25zdCBJbnRTaXplJik7CisgICAgY29uc3QgSW50
U2l6ZSYgYm91bmRzKCkgY29uc3QgeyByZXR1cm4gbV9ib3VuZHM7IH0KICAgICB2aXJ0dWFsIElu
dFNpemUgY29udGVudEJvdW5kcygpIGNvbnN0IHsgcmV0dXJuIGJvdW5kcygpOyB9CiAKICAgICB2
b2lkIHNldE1hc2tzVG9Cb3VuZHMoYm9vbCk7CkBAIC0yMzYsNyArMjM3LDcgQEAgcHVibGljOgog
ICAgIHZvaWQgc2V0QWx3YXlzUmVzZXJ2ZVRleHR1cmVzKGJvb2wgYWx3YXlzUmVzZXJ2ZVRleHR1
cmVzKSB7IG1fYWx3YXlzUmVzZXJ2ZVRleHR1cmVzID0gYWx3YXlzUmVzZXJ2ZVRleHR1cmVzOyB9
CiAgICAgYm9vbCBhbHdheXNSZXNlcnZlVGV4dHVyZXMoKSBjb25zdCB7IHJldHVybiBtX2Fsd2F5
c1Jlc2VydmVUZXh0dXJlczsgfQogCi0gICAgYm9vbCBhZGRBbmltYXRpb24oY29uc3QgS2V5ZnJh
bWVWYWx1ZUxpc3QmLCBjb25zdCBJbnRTaXplJiBib3hTaXplLCBjb25zdCBBbmltYXRpb24qLCBp
bnQgYW5pbWF0aW9uSWQsIGludCBncm91cElkLCBkb3VibGUgdGltZU9mZnNldCk7CisgICAgYm9v
bCBhZGRBbmltYXRpb24oUGFzc093blB0cjxDQ0FjdGl2ZUFuaW1hdGlvbj4pOwogICAgIHZvaWQg
cGF1c2VBbmltYXRpb24oaW50IGFuaW1hdGlvbklkLCBkb3VibGUgdGltZU9mZnNldCk7CiAgICAg
dm9pZCByZW1vdmVBbmltYXRpb24oaW50IGFuaW1hdGlvbklkKTsKIApkaWZmIC0tZ2l0IGEvU291
cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvY2hyb21pdW0vTGlua0hpZ2hsaWdodC5jcHAg
Yi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9jaHJvbWl1bS9MaW5rSGlnaGxpZ2h0
LmNwcAppbmRleCBiY2I3YjNjMzZjN2I4ZTE4NGNkMjA2N2RmYTVhMGE0NTBjNWI4Njc5Li5iZWEz
MmMwYTM1NzlhZjU3MWZjN2YwNTJhNzRkYmRjN2ZiOWRlNjc4IDEwMDY0NAotLS0gYS9Tb3VyY2Uv
V2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9jaHJvbWl1bS9MaW5rSGlnaGxpZ2h0LmNwcAorKysg
Yi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9jaHJvbWl1bS9MaW5rSGlnaGxpZ2h0
LmNwcApAQCAtNzYsNyArNzYsNyBAQCBMaW5rSGlnaGxpZ2h0OjpMaW5rSGlnaGxpZ2h0KEdyYXBo
aWNzTGF5ZXJDaHJvbWl1bSogcGFyZW50LCBjb25zdCBQYXRoJiBwYXRoLCBpbgogICAgIC8vIGFu
aW1hdGlvbklkID0gMSBpcyByZXNlcnZlZCBmb3IgdXMuCiAgICAgT3duUHRyPENDQWN0aXZlQW5p
bWF0aW9uPiBhbmltYXRpb24oQ0NBY3RpdmVBbmltYXRpb246OmNyZWF0ZShjdXJ2ZS5yZWxlYXNl
KCksIGFuaW1hdGlvbklkLCBncm91cElkLCBDQ0FjdGl2ZUFuaW1hdGlvbjo6T3BhY2l0eSkpOwog
ICAgIGFuaW1hdGlvbi0+c2V0TmVlZHNTeW5jaHJvbml6ZWRTdGFydFRpbWUodHJ1ZSk7Ci0gICAg
bV9jb250ZW50TGF5ZXItPmxheWVyQW5pbWF0aW9uQ29udHJvbGxlcigpLT5hZGQoYW5pbWF0aW9u
LnJlbGVhc2UoKSk7CisgICAgbV9jb250ZW50TGF5ZXItPmxheWVyQW5pbWF0aW9uQ29udHJvbGxl
cigpLT5hZGRBbmltYXRpb24oYW5pbWF0aW9uLnJlbGVhc2UoKSk7CiB9CiAKIExpbmtIaWdobGln
aHQ6On5MaW5rSGlnaGxpZ2h0KCkKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3Jt
L2dyYXBoaWNzL2Nocm9taXVtL2NjL0NDQW5pbWF0aW9uQ3VydmUuaCBiL1NvdXJjZS9XZWJDb3Jl
L3BsYXRmb3JtL2dyYXBoaWNzL2Nocm9taXVtL2NjL0NDQW5pbWF0aW9uQ3VydmUuaAppbmRleCBl
MjFkZTg5NjQ3NTc1YmZlNjliZWNlZTM5ODJiMjk1MmQ1ZTIyYzBjLi4wZTQ1OGViMmI3OTgzOTZh
ZWMwYzRjNTYzOTU5ZjdjZjkzYzFlOTJlIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9wbGF0
Zm9ybS9ncmFwaGljcy9jaHJvbWl1bS9jYy9DQ0FuaW1hdGlvbkN1cnZlLmgKKysrIGIvU291cmNl
L1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvY2hyb21pdW0vY2MvQ0NBbmltYXRpb25DdXJ2ZS5o
CkBAIC02NSw3ICs2NSw3IEBAIGNsYXNzIENDVHJhbnNmb3JtQW5pbWF0aW9uQ3VydmUgOiBwdWJs
aWMgQ0NBbmltYXRpb25DdXJ2ZSB7CiBwdWJsaWM6CiAgICAgdmlydHVhbCB+Q0NUcmFuc2Zvcm1B
bmltYXRpb25DdXJ2ZSgpIHsgfQogCi0gICAgdmlydHVhbCBXZWJLaXQ6OldlYlRyYW5zZm9ybWF0
aW9uTWF0cml4IGdldFZhbHVlKGRvdWJsZSB0LCBjb25zdCBJbnRTaXplJiBsYXllclNpemUpIGNv
bnN0ID0gMDsKKyAgICB2aXJ0dWFsIFdlYktpdDo6V2ViVHJhbnNmb3JtYXRpb25NYXRyaXggZ2V0
VmFsdWUoZG91YmxlIHQpIGNvbnN0ID0gMDsKIAogICAgIC8vIFBhcnRpYWwgQ0NBbmltYXRpb24g
aW1wbGVtZW50YXRpb24uCiAgICAgdmlydHVhbCBUeXBlIHR5cGUoKSBjb25zdCBPVkVSUklERSB7
IHJldHVybiBUcmFuc2Zvcm07IH0KZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3Jt
L2dyYXBoaWNzL2Nocm9taXVtL2NjL0NDS2V5ZnJhbWVkQW5pbWF0aW9uQ3VydmUuY3BwIGIvU291
cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvY2hyb21pdW0vY2MvQ0NLZXlmcmFtZWRBbmlt
YXRpb25DdXJ2ZS5jcHAKaW5kZXggNGRiMzliNjlhMDAxZmM4NzNmMjU0NTM0YmQ3NzJjYTA0NDQx
YWVmZi4uYmI0ZDQ3ODM0YWEyNjVmZjBiZmJjN2VmMTM4ODkwNDJkMTc5YTlmMiAxMDA2NDQKLS0t
IGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvY2hyb21pdW0vY2MvQ0NLZXlmcmFt
ZWRBbmltYXRpb25DdXJ2ZS5jcHAKKysrIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhp
Y3MvY2hyb21pdW0vY2MvQ0NLZXlmcmFtZWRBbmltYXRpb25DdXJ2ZS5jcHAKQEAgLTI2LDE1ICsy
Niw2IEBACiAKICNpbmNsdWRlICJjYy9DQ0tleWZyYW1lZEFuaW1hdGlvbkN1cnZlLmgiCiAKLSNp
bmNsdWRlICJJZGVudGl0eVRyYW5zZm9ybU9wZXJhdGlvbi5oIgotI2luY2x1ZGUgIk1hdHJpeDNE
VHJhbnNmb3JtT3BlcmF0aW9uLmgiCi0jaW5jbHVkZSAiTWF0cml4VHJhbnNmb3JtT3BlcmF0aW9u
LmgiCi0jaW5jbHVkZSAiUGVyc3BlY3RpdmVUcmFuc2Zvcm1PcGVyYXRpb24uaCIKLSNpbmNsdWRl
ICJSb3RhdGVUcmFuc2Zvcm1PcGVyYXRpb24uaCIKLSNpbmNsdWRlICJTY2FsZVRyYW5zZm9ybU9w
ZXJhdGlvbi5oIgotI2luY2x1ZGUgIlNrZXdUcmFuc2Zvcm1PcGVyYXRpb24uaCIKLSNpbmNsdWRl
ICJUcmFuc2xhdGVUcmFuc2Zvcm1PcGVyYXRpb24uaCIKLQogI2luY2x1ZGUgPHd0Zi9Pd25QdHIu
aD4KIAogdXNpbmcgV2ViS2l0OjpXZWJUcmFuc2Zvcm1hdGlvbk1hdHJpeDsKQEAgLTExNiwxMiAr
MTA3LDEyIEBAIFBhc3NPd25QdHI8Q0NGbG9hdEtleWZyYW1lPiBDQ0Zsb2F0S2V5ZnJhbWU6OmNs
b25lKCkgY29uc3QKICAgICByZXR1cm4gQ0NGbG9hdEtleWZyYW1lOjpjcmVhdGUodGltZSgpLCB2
YWx1ZSgpLCB0aW1pbmdGdW5jdGlvbigpID8gY2xvbmVUaW1pbmdGdW5jdGlvbih0aW1pbmdGdW5j
dGlvbigpKSA6IG51bGxwdHIpOwogfQogCi1QYXNzT3duUHRyPENDVHJhbnNmb3JtS2V5ZnJhbWU+
IENDVHJhbnNmb3JtS2V5ZnJhbWU6OmNyZWF0ZShkb3VibGUgdGltZSwgY29uc3QgVHJhbnNmb3Jt
T3BlcmF0aW9ucyYgdmFsdWUsIFBhc3NPd25QdHI8Q0NUaW1pbmdGdW5jdGlvbj4gdGltaW5nRnVu
Y3Rpb24pCitQYXNzT3duUHRyPENDVHJhbnNmb3JtS2V5ZnJhbWU+IENDVHJhbnNmb3JtS2V5ZnJh
bWU6OmNyZWF0ZShkb3VibGUgdGltZSwgY29uc3QgV2ViS2l0OjpXZWJUcmFuc2Zvcm1PcGVyYXRp
b25zJiB2YWx1ZSwgUGFzc093blB0cjxDQ1RpbWluZ0Z1bmN0aW9uPiB0aW1pbmdGdW5jdGlvbikK
IHsKICAgICByZXR1cm4gYWRvcHRQdHIobmV3IENDVHJhbnNmb3JtS2V5ZnJhbWUodGltZSwgdmFs
dWUsIHRpbWluZ0Z1bmN0aW9uKSk7CiB9CiAKLUNDVHJhbnNmb3JtS2V5ZnJhbWU6OkNDVHJhbnNm
b3JtS2V5ZnJhbWUoZG91YmxlIHRpbWUsIGNvbnN0IFRyYW5zZm9ybU9wZXJhdGlvbnMmIHZhbHVl
LCBQYXNzT3duUHRyPENDVGltaW5nRnVuY3Rpb24+IHRpbWluZ0Z1bmN0aW9uKQorQ0NUcmFuc2Zv
cm1LZXlmcmFtZTo6Q0NUcmFuc2Zvcm1LZXlmcmFtZShkb3VibGUgdGltZSwgY29uc3QgV2ViS2l0
OjpXZWJUcmFuc2Zvcm1PcGVyYXRpb25zJiB2YWx1ZSwgUGFzc093blB0cjxDQ1RpbWluZ0Z1bmN0
aW9uPiB0aW1pbmdGdW5jdGlvbikKICAgICA6IENDS2V5ZnJhbWUodGltZSwgdGltaW5nRnVuY3Rp
b24pCiAgICAgLCBtX3ZhbHVlKHZhbHVlKQogewpAQCAtMTMxLDc4ICsxMjIsMTQgQEAgQ0NUcmFu
c2Zvcm1LZXlmcmFtZTo6fkNDVHJhbnNmb3JtS2V5ZnJhbWUoKQogewogfQogCi1jb25zdCBUcmFu
c2Zvcm1PcGVyYXRpb25zJiBDQ1RyYW5zZm9ybUtleWZyYW1lOjp2YWx1ZSgpIGNvbnN0Citjb25z
dCBXZWJLaXQ6OldlYlRyYW5zZm9ybU9wZXJhdGlvbnMmIENDVHJhbnNmb3JtS2V5ZnJhbWU6OnZh
bHVlKCkgY29uc3QKIHsKICAgICByZXR1cm4gbV92YWx1ZTsKIH0KIAogUGFzc093blB0cjxDQ1Ry
YW5zZm9ybUtleWZyYW1lPiBDQ1RyYW5zZm9ybUtleWZyYW1lOjpjbG9uZSgpIGNvbnN0CiB7Ci0g
ICAgLy8gV2UgbmVlZCB0byBkbyBhIGRlZXAgY29weSB0aGUgbV92YWx1ZSBtYXkgY29udGFpbiBy
ZWYgcG9pbnRlcnMgdG8gVHJhbnNmb3JtT3BlcmF0aW9uIG9iamVjdHMuCi0gICAgVHJhbnNmb3Jt
T3BlcmF0aW9ucyBvcGVyYXRpb25zOwotICAgIGZvciAoc2l6ZV90IGogPSAwOyBqIDwgbV92YWx1
ZS5zaXplKCk7ICsraikgewotICAgICAgICBUcmFuc2Zvcm1PcGVyYXRpb246Ok9wZXJhdGlvblR5
cGUgb3BlcmF0aW9uVHlwZSA9IG1fdmFsdWUub3BlcmF0aW9ucygpW2pdLT5nZXRPcGVyYXRpb25U
eXBlKCk7Ci0gICAgICAgIHN3aXRjaCAob3BlcmF0aW9uVHlwZSkgewotICAgICAgICBjYXNlIFRy
YW5zZm9ybU9wZXJhdGlvbjo6U0NBTEVfWDoKLSAgICAgICAgY2FzZSBUcmFuc2Zvcm1PcGVyYXRp
b246OlNDQUxFX1k6Ci0gICAgICAgIGNhc2UgVHJhbnNmb3JtT3BlcmF0aW9uOjpTQ0FMRV9aOgot
ICAgICAgICBjYXNlIFRyYW5zZm9ybU9wZXJhdGlvbjo6U0NBTEVfM0Q6Ci0gICAgICAgIGNhc2Ug
VHJhbnNmb3JtT3BlcmF0aW9uOjpTQ0FMRTogewotICAgICAgICAgICAgU2NhbGVUcmFuc2Zvcm1P
cGVyYXRpb24qIHRyYW5zZm9ybSA9IHN0YXRpY19jYXN0PFNjYWxlVHJhbnNmb3JtT3BlcmF0aW9u
Kj4obV92YWx1ZS5vcGVyYXRpb25zKClbal0uZ2V0KCkpOwotICAgICAgICAgICAgb3BlcmF0aW9u
cy5vcGVyYXRpb25zKCkuYXBwZW5kKFNjYWxlVHJhbnNmb3JtT3BlcmF0aW9uOjpjcmVhdGUodHJh
bnNmb3JtLT54KCksIHRyYW5zZm9ybS0+eSgpLCB0cmFuc2Zvcm0tPnooKSwgb3BlcmF0aW9uVHlw
ZSkpOwotICAgICAgICAgICAgYnJlYWs7Ci0gICAgICAgIH0KLSAgICAgICAgY2FzZSBUcmFuc2Zv
cm1PcGVyYXRpb246OlRSQU5TTEFURV9YOgotICAgICAgICBjYXNlIFRyYW5zZm9ybU9wZXJhdGlv
bjo6VFJBTlNMQVRFX1k6Ci0gICAgICAgIGNhc2UgVHJhbnNmb3JtT3BlcmF0aW9uOjpUUkFOU0xB
VEVfWjoKLSAgICAgICAgY2FzZSBUcmFuc2Zvcm1PcGVyYXRpb246OlRSQU5TTEFURV8zRDoKLSAg
ICAgICAgY2FzZSBUcmFuc2Zvcm1PcGVyYXRpb246OlRSQU5TTEFURTogewotICAgICAgICAgICAg
VHJhbnNsYXRlVHJhbnNmb3JtT3BlcmF0aW9uKiB0cmFuc2Zvcm0gPSBzdGF0aWNfY2FzdDxUcmFu
c2xhdGVUcmFuc2Zvcm1PcGVyYXRpb24qPihtX3ZhbHVlLm9wZXJhdGlvbnMoKVtqXS5nZXQoKSk7
Ci0gICAgICAgICAgICBvcGVyYXRpb25zLm9wZXJhdGlvbnMoKS5hcHBlbmQoVHJhbnNsYXRlVHJh
bnNmb3JtT3BlcmF0aW9uOjpjcmVhdGUodHJhbnNmb3JtLT54KCksIHRyYW5zZm9ybS0+eSgpLCB0
cmFuc2Zvcm0tPnooKSwgb3BlcmF0aW9uVHlwZSkpOwotICAgICAgICAgICAgYnJlYWs7Ci0gICAg
ICAgIH0KLSAgICAgICAgY2FzZSBUcmFuc2Zvcm1PcGVyYXRpb246OlJPVEFURV9YOgotICAgICAg
ICBjYXNlIFRyYW5zZm9ybU9wZXJhdGlvbjo6Uk9UQVRFX1k6Ci0gICAgICAgIGNhc2UgVHJhbnNm
b3JtT3BlcmF0aW9uOjpST1RBVEVfM0Q6Ci0gICAgICAgIGNhc2UgVHJhbnNmb3JtT3BlcmF0aW9u
OjpST1RBVEU6IHsKLSAgICAgICAgICAgIFJvdGF0ZVRyYW5zZm9ybU9wZXJhdGlvbiogdHJhbnNm
b3JtID0gc3RhdGljX2Nhc3Q8Um90YXRlVHJhbnNmb3JtT3BlcmF0aW9uKj4obV92YWx1ZS5vcGVy
YXRpb25zKClbal0uZ2V0KCkpOwotICAgICAgICAgICAgb3BlcmF0aW9ucy5vcGVyYXRpb25zKCku
YXBwZW5kKFJvdGF0ZVRyYW5zZm9ybU9wZXJhdGlvbjo6Y3JlYXRlKHRyYW5zZm9ybS0+eCgpLCB0
cmFuc2Zvcm0tPnkoKSwgdHJhbnNmb3JtLT56KCksIHRyYW5zZm9ybS0+YW5nbGUoKSwgb3BlcmF0
aW9uVHlwZSkpOwotICAgICAgICAgICAgYnJlYWs7Ci0gICAgICAgIH0KLSAgICAgICAgY2FzZSBU
cmFuc2Zvcm1PcGVyYXRpb246OlNLRVdfWDoKLSAgICAgICAgY2FzZSBUcmFuc2Zvcm1PcGVyYXRp
b246OlNLRVdfWToKLSAgICAgICAgY2FzZSBUcmFuc2Zvcm1PcGVyYXRpb246OlNLRVc6IHsKLSAg
ICAgICAgICAgIFNrZXdUcmFuc2Zvcm1PcGVyYXRpb24qIHRyYW5zZm9ybSA9IHN0YXRpY19jYXN0
PFNrZXdUcmFuc2Zvcm1PcGVyYXRpb24qPihtX3ZhbHVlLm9wZXJhdGlvbnMoKVtqXS5nZXQoKSk7
Ci0gICAgICAgICAgICBvcGVyYXRpb25zLm9wZXJhdGlvbnMoKS5hcHBlbmQoU2tld1RyYW5zZm9y
bU9wZXJhdGlvbjo6Y3JlYXRlKHRyYW5zZm9ybS0+YW5nbGVYKCksIHRyYW5zZm9ybS0+YW5nbGVZ
KCksIG9wZXJhdGlvblR5cGUpKTsKLSAgICAgICAgICAgIGJyZWFrOwotICAgICAgICB9Ci0gICAg
ICAgIGNhc2UgVHJhbnNmb3JtT3BlcmF0aW9uOjpNQVRSSVg6IHsKLSAgICAgICAgICAgIE1hdHJp
eFRyYW5zZm9ybU9wZXJhdGlvbiogdHJhbnNmb3JtID0gc3RhdGljX2Nhc3Q8TWF0cml4VHJhbnNm
b3JtT3BlcmF0aW9uKj4obV92YWx1ZS5vcGVyYXRpb25zKClbal0uZ2V0KCkpOwotICAgICAgICAg
ICAgV2ViVHJhbnNmb3JtYXRpb25NYXRyaXggbSA9IFdlYlRyYW5zZm9ybWF0aW9uTWF0cml4KHRy
YW5zZm9ybS0+bWF0cml4KCkpOwotICAgICAgICAgICAgb3BlcmF0aW9ucy5vcGVyYXRpb25zKCku
YXBwZW5kKE1hdHJpeFRyYW5zZm9ybU9wZXJhdGlvbjo6Y3JlYXRlKG0uYSgpLCBtLmIoKSwgbS5j
KCksIG0uZCgpLCBtLmUoKSwgbS5mKCkpKTsKLSAgICAgICAgICAgIGJyZWFrOwotICAgICAgICB9
Ci0gICAgICAgIGNhc2UgVHJhbnNmb3JtT3BlcmF0aW9uOjpNQVRSSVhfM0Q6IHsKLSAgICAgICAg
ICAgIE1hdHJpeDNEVHJhbnNmb3JtT3BlcmF0aW9uKiB0cmFuc2Zvcm0gPSBzdGF0aWNfY2FzdDxN
YXRyaXgzRFRyYW5zZm9ybU9wZXJhdGlvbio+KG1fdmFsdWUub3BlcmF0aW9ucygpW2pdLmdldCgp
KTsKLSAgICAgICAgICAgIG9wZXJhdGlvbnMub3BlcmF0aW9ucygpLmFwcGVuZChNYXRyaXgzRFRy
YW5zZm9ybU9wZXJhdGlvbjo6Y3JlYXRlKHRyYW5zZm9ybS0+bWF0cml4KCkpKTsKLSAgICAgICAg
ICAgIGJyZWFrOwotICAgICAgICB9Ci0gICAgICAgIGNhc2UgVHJhbnNmb3JtT3BlcmF0aW9uOjpQ
RVJTUEVDVElWRTogewotICAgICAgICAgICAgUGVyc3BlY3RpdmVUcmFuc2Zvcm1PcGVyYXRpb24q
IHRyYW5zZm9ybSA9IHN0YXRpY19jYXN0PFBlcnNwZWN0aXZlVHJhbnNmb3JtT3BlcmF0aW9uKj4o
bV92YWx1ZS5vcGVyYXRpb25zKClbal0uZ2V0KCkpOwotICAgICAgICAgICAgb3BlcmF0aW9ucy5v
cGVyYXRpb25zKCkuYXBwZW5kKFBlcnNwZWN0aXZlVHJhbnNmb3JtT3BlcmF0aW9uOjpjcmVhdGUo
dHJhbnNmb3JtLT5wZXJzcGVjdGl2ZSgpKSk7Ci0gICAgICAgICAgICBicmVhazsKLSAgICAgICAg
fQotICAgICAgICBjYXNlIFRyYW5zZm9ybU9wZXJhdGlvbjo6SURFTlRJVFk6IHsKLSAgICAgICAg
ICAgIG9wZXJhdGlvbnMub3BlcmF0aW9ucygpLmFwcGVuZChJZGVudGl0eVRyYW5zZm9ybU9wZXJh
dGlvbjo6Y3JlYXRlKCkpOwotICAgICAgICAgICAgYnJlYWs7Ci0gICAgICAgIH0KLSAgICAgICAg
Y2FzZSBUcmFuc2Zvcm1PcGVyYXRpb246Ok5PTkU6Ci0gICAgICAgICAgICAvLyBEbyBub3RoaW5n
LgotICAgICAgICAgICAgYnJlYWs7Ci0gICAgICAgIH0gLy8gc3dpdGNoCi0gICAgfSAvLyBmb3Ig
ZWFjaCBvcGVyYXRpb24KLQotICAgIHJldHVybiBDQ1RyYW5zZm9ybUtleWZyYW1lOjpjcmVhdGUo
dGltZSgpLCBvcGVyYXRpb25zLCB0aW1pbmdGdW5jdGlvbigpID8gY2xvbmVUaW1pbmdGdW5jdGlv
bih0aW1pbmdGdW5jdGlvbigpKSA6IG51bGxwdHIpOworICAgIHJldHVybiBDQ1RyYW5zZm9ybUtl
eWZyYW1lOjpjcmVhdGUodGltZSgpLCB2YWx1ZSgpLCB0aW1pbmdGdW5jdGlvbigpID8gY2xvbmVU
aW1pbmdGdW5jdGlvbih0aW1pbmdGdW5jdGlvbigpKSA6IG51bGxwdHIpOwogfQogCiBQYXNzT3du
UHRyPENDS2V5ZnJhbWVkRmxvYXRBbmltYXRpb25DdXJ2ZT4gQ0NLZXlmcmFtZWRGbG9hdEFuaW1h
dGlvbkN1cnZlOjpjcmVhdGUoKQpAQCAtMjg5LDIwICsyMTYsMTMgQEAgUGFzc093blB0cjxDQ0Fu
aW1hdGlvbkN1cnZlPiBDQ0tleWZyYW1lZFRyYW5zZm9ybUFuaW1hdGlvbkN1cnZlOjpjbG9uZSgp
IGNvbnN0CiAgICAgcmV0dXJuIHRvUmV0dXJuLnJlbGVhc2UoKTsKIH0KIAotV2ViVHJhbnNmb3Jt
YXRpb25NYXRyaXggQ0NLZXlmcmFtZWRUcmFuc2Zvcm1BbmltYXRpb25DdXJ2ZTo6Z2V0VmFsdWUo
ZG91YmxlIHQsIGNvbnN0IEludFNpemUmIGxheWVyU2l6ZSkgY29uc3QKK1dlYlRyYW5zZm9ybWF0
aW9uTWF0cml4IENDS2V5ZnJhbWVkVHJhbnNmb3JtQW5pbWF0aW9uQ3VydmU6OmdldFZhbHVlKGRv
dWJsZSB0KSBjb25zdAogewotICAgIC8vIE5vdGU6IFdlYkNvcmUgZGF0YSB0eXBlIHVzZWQgaGVy
ZSwganVzdCBmb3Igbm93LgotICAgIFRyYW5zZm9ybWF0aW9uTWF0cml4IHRyYW5zZm9ybU1hdHJp
eDsKLQotICAgIGlmICh0IDw9IG1fa2V5ZnJhbWVzLmZpcnN0KCktPnRpbWUoKSkgewotICAgICAg
ICBtX2tleWZyYW1lcy5maXJzdCgpLT52YWx1ZSgpLmFwcGx5KGxheWVyU2l6ZSwgdHJhbnNmb3Jt
TWF0cml4KTsKLSAgICAgICAgcmV0dXJuIFdlYlRyYW5zZm9ybWF0aW9uTWF0cml4KHRyYW5zZm9y
bU1hdHJpeCk7Ci0gICAgfQorICAgIGlmICh0IDw9IG1fa2V5ZnJhbWVzLmZpcnN0KCktPnRpbWUo
KSkKKyAgICAgICAgcmV0dXJuIG1fa2V5ZnJhbWVzLmZpcnN0KCktPnZhbHVlKCkuYXBwbHkoKTsK
IAotICAgIGlmICh0ID49IG1fa2V5ZnJhbWVzLmxhc3QoKS0+dGltZSgpKSB7Ci0gICAgICAgIG1f
a2V5ZnJhbWVzLmxhc3QoKS0+dmFsdWUoKS5hcHBseShsYXllclNpemUsIHRyYW5zZm9ybU1hdHJp
eCk7Ci0gICAgICAgIHJldHVybiBXZWJUcmFuc2Zvcm1hdGlvbk1hdHJpeCh0cmFuc2Zvcm1NYXRy
aXgpOwotICAgIH0KKyAgICBpZiAodCA+PSBtX2tleWZyYW1lcy5sYXN0KCktPnRpbWUoKSkKKyAg
ICAgICAgcmV0dXJuIG1fa2V5ZnJhbWVzLmxhc3QoKS0+dmFsdWUoKS5hcHBseSgpOwogCiAgICAg
c2l6ZV90IGkgPSAwOwogICAgIGZvciAoOyBpIDwgbV9rZXlmcmFtZXMuc2l6ZSgpIC0gMTsgKytp
KSB7CkBAIC0zMTUsMjAgKzIzNSw3IEBAIFdlYlRyYW5zZm9ybWF0aW9uTWF0cml4IENDS2V5ZnJh
bWVkVHJhbnNmb3JtQW5pbWF0aW9uQ3VydmU6OmdldFZhbHVlKGRvdWJsZSB0LCBjCiAgICAgaWYg
KG1fa2V5ZnJhbWVzW2ldLT50aW1pbmdGdW5jdGlvbigpKQogICAgICAgICBwcm9ncmVzcyA9IG1f
a2V5ZnJhbWVzW2ldLT50aW1pbmdGdW5jdGlvbigpLT5nZXRWYWx1ZShwcm9ncmVzcyk7CiAKLSAg
ICBpZiAobV9rZXlmcmFtZXNbaV0tPnZhbHVlKCkub3BlcmF0aW9uc01hdGNoKG1fa2V5ZnJhbWVz
W2krMV0tPnZhbHVlKCkpKSB7Ci0gICAgICAgIGZvciAoc2l6ZV90IGogPSAwOyBqIDwgbV9rZXlm
cmFtZXNbaSsxXS0+dmFsdWUoKS5zaXplKCk7ICsraikKLSAgICAgICAgICAgIG1fa2V5ZnJhbWVz
W2krMV0tPnZhbHVlKCkub3BlcmF0aW9ucygpW2pdLT5ibGVuZChtX2tleWZyYW1lc1tpXS0+dmFs
dWUoKS5hdChqKSwgcHJvZ3Jlc3MpLT5hcHBseSh0cmFuc2Zvcm1NYXRyaXgsIGxheWVyU2l6ZSk7
Ci0gICAgfSBlbHNlIHsKLSAgICAgICAgLy8gTm90ZTogV2ViQ29yZSBkYXRhIHR5cGUgdXNlZCBo
ZXJlLCBqdXN0IGZvciBub3cuCi0gICAgICAgIFRyYW5zZm9ybWF0aW9uTWF0cml4IHNvdXJjZTsK
LQotICAgICAgICBtX2tleWZyYW1lc1tpXS0+dmFsdWUoKS5hcHBseShsYXllclNpemUsIHNvdXJj
ZSk7Ci0gICAgICAgIG1fa2V5ZnJhbWVzW2krMV0tPnZhbHVlKCkuYXBwbHkobGF5ZXJTaXplLCB0
cmFuc2Zvcm1NYXRyaXgpOwotCi0gICAgICAgIHRyYW5zZm9ybU1hdHJpeC5ibGVuZChzb3VyY2Us
IHByb2dyZXNzKTsKLSAgICB9Ci0KLSAgICByZXR1cm4gV2ViVHJhbnNmb3JtYXRpb25NYXRyaXgo
dHJhbnNmb3JtTWF0cml4KTsKKyAgICByZXR1cm4gbV9rZXlmcmFtZXNbaSsxXS0+dmFsdWUoKS5i
bGVuZChtX2tleWZyYW1lc1tpXS0+dmFsdWUoKSwgcHJvZ3Jlc3MpOwogfQogCiB9IC8vIG5hbWVz
cGFjZSBXZWJDb3JlCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGlj
cy9jaHJvbWl1bS9jYy9DQ0tleWZyYW1lZEFuaW1hdGlvbkN1cnZlLmggYi9Tb3VyY2UvV2ViQ29y
ZS9wbGF0Zm9ybS9ncmFwaGljcy9jaHJvbWl1bS9jYy9DQ0tleWZyYW1lZEFuaW1hdGlvbkN1cnZl
LmgKaW5kZXggZTcwY2RhZmI3NWIyOTgwOWIwZWRiZTM5MGM3YWJhYzk5MGE1Y2JkMC4uMTExY2E4
MWNlNzUxNjc5N2UwNDQyZmI3MjllYjMwYWJhZWE1MzdiYSAxMDA2NDQKLS0tIGEvU291cmNlL1dl
YkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvY2hyb21pdW0vY2MvQ0NLZXlmcmFtZWRBbmltYXRpb25D
dXJ2ZS5oCisrKyBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2Nocm9taXVtL2Nj
L0NDS2V5ZnJhbWVkQW5pbWF0aW9uQ3VydmUuaApAQCAtMjUsMTIgKzI1LDE0IEBACiAjaWZuZGVm
IENDS2V5ZnJhbWVkQW5pbWF0aW9uQ3VydmVfaAogI2RlZmluZSBDQ0tleWZyYW1lZEFuaW1hdGlv
bkN1cnZlX2gKIAotI2luY2x1ZGUgIlRyYW5zZm9ybU9wZXJhdGlvbnMuaCIKICNpbmNsdWRlICJj
Yy9DQ0FuaW1hdGlvbkN1cnZlLmgiCiAjaW5jbHVkZSAiY2MvQ0NUaW1pbmdGdW5jdGlvbi5oIgog
CisjaW5jbHVkZSA8cHVibGljL1dlYlRyYW5zZm9ybU9wZXJhdGlvbnMuaD4KKwogI2luY2x1ZGUg
PHd0Zi9Pd25QdHIuaD4KICNpbmNsdWRlIDx3dGYvUGFzc093blB0ci5oPgorI2luY2x1ZGUgPHd0
Zi9WZWN0b3IuaD4KIAogbmFtZXNwYWNlIFdlYkNvcmUgewogCkBAIC02NSwxNyArNjcsMTcgQEAg
cHJpdmF0ZToKIAogY2xhc3MgQ0NUcmFuc2Zvcm1LZXlmcmFtZSA6IHB1YmxpYyBDQ0tleWZyYW1l
IHsKIHB1YmxpYzoKLSAgICBzdGF0aWMgUGFzc093blB0cjxDQ1RyYW5zZm9ybUtleWZyYW1lPiBj
cmVhdGUoZG91YmxlIHRpbWUsIGNvbnN0IFRyYW5zZm9ybU9wZXJhdGlvbnMmIHZhbHVlLCBQYXNz
T3duUHRyPENDVGltaW5nRnVuY3Rpb24+KTsKKyAgICBzdGF0aWMgUGFzc093blB0cjxDQ1RyYW5z
Zm9ybUtleWZyYW1lPiBjcmVhdGUoZG91YmxlIHRpbWUsIGNvbnN0IFdlYktpdDo6V2ViVHJhbnNm
b3JtT3BlcmF0aW9ucyYgdmFsdWUsIFBhc3NPd25QdHI8Q0NUaW1pbmdGdW5jdGlvbj4pOwogICAg
IHZpcnR1YWwgfkNDVHJhbnNmb3JtS2V5ZnJhbWUoKTsKIAotICAgIGNvbnN0IFRyYW5zZm9ybU9w
ZXJhdGlvbnMmIHZhbHVlKCkgY29uc3Q7CisgICAgY29uc3QgV2ViS2l0OjpXZWJUcmFuc2Zvcm1P
cGVyYXRpb25zJiB2YWx1ZSgpIGNvbnN0OwogCiAgICAgUGFzc093blB0cjxDQ1RyYW5zZm9ybUtl
eWZyYW1lPiBjbG9uZSgpIGNvbnN0OwogCiBwcml2YXRlOgotICAgIENDVHJhbnNmb3JtS2V5ZnJh
bWUoZG91YmxlIHRpbWUsIGNvbnN0IFRyYW5zZm9ybU9wZXJhdGlvbnMmIHZhbHVlLCBQYXNzT3du
UHRyPENDVGltaW5nRnVuY3Rpb24+KTsKKyAgICBDQ1RyYW5zZm9ybUtleWZyYW1lKGRvdWJsZSB0
aW1lLCBjb25zdCBXZWJLaXQ6OldlYlRyYW5zZm9ybU9wZXJhdGlvbnMmIHZhbHVlLCBQYXNzT3du
UHRyPENDVGltaW5nRnVuY3Rpb24+KTsKIAotICAgIFRyYW5zZm9ybU9wZXJhdGlvbnMgbV92YWx1
ZTsKKyAgICBXZWJLaXQ6OldlYlRyYW5zZm9ybU9wZXJhdGlvbnMgbV92YWx1ZTsKIH07CiAKIGNs
YXNzIENDS2V5ZnJhbWVkRmxvYXRBbmltYXRpb25DdXJ2ZSA6IHB1YmxpYyBDQ0Zsb2F0QW5pbWF0
aW9uQ3VydmUgewpAQCAtMTE2LDcgKzExOCw3IEBAIHB1YmxpYzoKICAgICB2aXJ0dWFsIFBhc3NP
d25QdHI8Q0NBbmltYXRpb25DdXJ2ZT4gY2xvbmUoKSBjb25zdCBPVkVSUklERTsKIAogICAgIC8v
IENDVHJhbnNmb3JtQW5pbWF0aW9uQ3VydmUgaW1wbGVtZW50YXRpb24KLSAgICB2aXJ0dWFsIFdl
YktpdDo6V2ViVHJhbnNmb3JtYXRpb25NYXRyaXggZ2V0VmFsdWUoZG91YmxlIHQsIGNvbnN0IElu
dFNpemUmKSBjb25zdCBPVkVSUklERTsKKyAgICB2aXJ0dWFsIFdlYktpdDo6V2ViVHJhbnNmb3Jt
YXRpb25NYXRyaXggZ2V0VmFsdWUoZG91YmxlIHQpIGNvbnN0IE9WRVJSSURFOwogCiBwcml2YXRl
OgogICAgIENDS2V5ZnJhbWVkVHJhbnNmb3JtQW5pbWF0aW9uQ3VydmUoKTsKZGlmZiAtLWdpdCBh
L1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2Nocm9taXVtL2NjL0NDTGF5ZXJBbmlt
YXRpb25Db250cm9sbGVyLmNwcCBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2No
cm9taXVtL2NjL0NDTGF5ZXJBbmltYXRpb25Db250cm9sbGVyLmNwcAppbmRleCAwOTY5Nzk1NDQ4
M2E1NzkyZjJlNDI4ZDMwZjBhMmU0ZmNjY2RhZmY2Li42NjYxOWFmOTFhNjFjMDc3MWJlNjQ3YzFl
MGEzNmYzZDBiYjdkZWI1IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFw
aGljcy9jaHJvbWl1bS9jYy9DQ0xheWVyQW5pbWF0aW9uQ29udHJvbGxlci5jcHAKKysrIGIvU291
cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvY2hyb21pdW0vY2MvQ0NMYXllckFuaW1hdGlv
bkNvbnRyb2xsZXIuY3BwCkBAIC0zNyw5NCArMzcsNiBAQCB1c2luZyBXZWJLaXQ6OldlYlRyYW5z
Zm9ybWF0aW9uTWF0cml4OwogCiBuYW1lc3BhY2UgV2ViQ29yZSB7CiAKLW5hbWVzcGFjZSB7Ci0K
LXRlbXBsYXRlIDxjbGFzcyBWYWx1ZSwgY2xhc3MgS2V5ZnJhbWUsIGNsYXNzIEN1cnZlPgotdm9p
ZCBhcHBlbmRLZXlmcmFtZShDdXJ2ZSYgY3VydmUsIGRvdWJsZSBrZXlUaW1lLCBjb25zdCBWYWx1
ZSogdmFsdWUsIFBhc3NPd25QdHI8Q0NUaW1pbmdGdW5jdGlvbj4gdGltaW5nRnVuY3Rpb24pCi17
Ci0gICAgY3VydmUuYWRkS2V5ZnJhbWUoS2V5ZnJhbWU6OmNyZWF0ZShrZXlUaW1lLCB2YWx1ZS0+
dmFsdWUoKSwgdGltaW5nRnVuY3Rpb24pKTsKLX0KLQotdGVtcGxhdGUgPD4KLXZvaWQgYXBwZW5k
S2V5ZnJhbWU8VHJhbnNmb3JtQW5pbWF0aW9uVmFsdWUsIENDVHJhbnNmb3JtS2V5ZnJhbWUsIEND
S2V5ZnJhbWVkVHJhbnNmb3JtQW5pbWF0aW9uQ3VydmU+KENDS2V5ZnJhbWVkVHJhbnNmb3JtQW5p
bWF0aW9uQ3VydmUmIGN1cnZlLCBkb3VibGUga2V5VGltZSwgY29uc3QgVHJhbnNmb3JtQW5pbWF0
aW9uVmFsdWUqIHZhbHVlLCBQYXNzT3duUHRyPENDVGltaW5nRnVuY3Rpb24+IHRpbWluZ0Z1bmN0
aW9uKQotewotICAgIGN1cnZlLmFkZEtleWZyYW1lKENDVHJhbnNmb3JtS2V5ZnJhbWU6OmNyZWF0
ZShrZXlUaW1lLCAqdmFsdWUtPnZhbHVlKCksIHRpbWluZ0Z1bmN0aW9uKSk7Ci19Ci0KLXRlbXBs
YXRlIDxjbGFzcyBWYWx1ZSwgY2xhc3MgS2V5ZnJhbWUsIGNsYXNzIEN1cnZlPgotUGFzc093blB0
cjxDQ0FjdGl2ZUFuaW1hdGlvbj4gY3JlYXRlQWN0aXZlQW5pbWF0aW9uKGNvbnN0IEtleWZyYW1l
VmFsdWVMaXN0JiB2YWx1ZUxpc3QsIGNvbnN0IEFuaW1hdGlvbiogYW5pbWF0aW9uLCBzaXplX3Qg
YW5pbWF0aW9uSWQsIHNpemVfdCBncm91cElkLCBkb3VibGUgdGltZU9mZnNldCwgQ0NBY3RpdmVB
bmltYXRpb246OlRhcmdldFByb3BlcnR5IHRhcmdldFByb3BlcnR5KQotewotICAgIGJvb2wgYWx0
ZXJuYXRlID0gZmFsc2U7Ci0gICAgYm9vbCByZXZlcnNlID0gZmFsc2U7Ci0gICAgaWYgKGFuaW1h
dGlvbiAmJiBhbmltYXRpb24tPmlzRGlyZWN0aW9uU2V0KCkpIHsKLSAgICAgICAgQW5pbWF0aW9u
OjpBbmltYXRpb25EaXJlY3Rpb24gZGlyZWN0aW9uID0gYW5pbWF0aW9uLT5kaXJlY3Rpb24oKTsK
LSAgICAgICAgaWYgKGRpcmVjdGlvbiA9PSBBbmltYXRpb246OkFuaW1hdGlvbkRpcmVjdGlvbkFs
dGVybmF0ZSB8fCBkaXJlY3Rpb24gPT0gQW5pbWF0aW9uOjpBbmltYXRpb25EaXJlY3Rpb25BbHRl
cm5hdGVSZXZlcnNlKQotICAgICAgICAgICAgYWx0ZXJuYXRlID0gdHJ1ZTsKLSAgICAgICAgaWYg
KGRpcmVjdGlvbiA9PSBBbmltYXRpb246OkFuaW1hdGlvbkRpcmVjdGlvblJldmVyc2UgfHwgZGly
ZWN0aW9uID09IEFuaW1hdGlvbjo6QW5pbWF0aW9uRGlyZWN0aW9uQWx0ZXJuYXRlUmV2ZXJzZSkK
LSAgICAgICAgICAgIHJldmVyc2UgPSB0cnVlOwotICAgIH0KLQotICAgIE93blB0cjxDdXJ2ZT4g
Y3VydmUgPSBDdXJ2ZTo6Y3JlYXRlKCk7Ci0gICAgVmVjdG9yPEtleWZyYW1lPiBrZXlmcmFtZXM7
Ci0KLSAgICBmb3IgKHNpemVfdCBpID0gMDsgaSA8IHZhbHVlTGlzdC5zaXplKCk7IGkrKykgewot
ICAgICAgICBzaXplX3QgaW5kZXggPSByZXZlcnNlID8gdmFsdWVMaXN0LnNpemUoKSAtIGkgLSAx
IDogaTsKLQotICAgICAgICBjb25zdCBWYWx1ZSogb3JpZ2luYWxWYWx1ZSA9IHN0YXRpY19jYXN0
PGNvbnN0IFZhbHVlKj4odmFsdWVMaXN0LmF0KGluZGV4KSk7Ci0KLSAgICAgICAgT3duUHRyPEND
VGltaW5nRnVuY3Rpb24+IHRpbWluZ0Z1bmN0aW9uOwotICAgICAgICBjb25zdCBUaW1pbmdGdW5j
dGlvbiogb3JpZ2luYWxUaW1pbmdGdW5jdGlvbiA9IG9yaWdpbmFsVmFsdWUtPnRpbWluZ0Z1bmN0
aW9uKCk7Ci0KLSAgICAgICAgLy8gSWYgdGhlcmUgaGFzbid0IGJlZW4gYSB0aW1pbmcgZnVuY3Rp
b24gYXNzb2NpYXRlZCB3aXRoIHRoaXMga2V5ZnJhbWUsIHVzZSB0aGUKLSAgICAgICAgLy8gYW5p
bWF0aW9uJ3MgdGltaW5nIGZ1bmN0aW9uLCBpZiB3ZSBoYXZlIG9uZS4KLSAgICAgICAgaWYgKCFv
cmlnaW5hbFRpbWluZ0Z1bmN0aW9uICYmIGFuaW1hdGlvbi0+aXNUaW1pbmdGdW5jdGlvblNldCgp
KQotICAgICAgICAgICAgb3JpZ2luYWxUaW1pbmdGdW5jdGlvbiA9IGFuaW1hdGlvbi0+dGltaW5n
RnVuY3Rpb24oKS5nZXQoKTsKLQotICAgICAgICBpZiAob3JpZ2luYWxUaW1pbmdGdW5jdGlvbikg
ewotICAgICAgICAgICAgc3dpdGNoIChvcmlnaW5hbFRpbWluZ0Z1bmN0aW9uLT50eXBlKCkpIHsK
LSAgICAgICAgICAgIGNhc2UgVGltaW5nRnVuY3Rpb246OlN0ZXBzRnVuY3Rpb246Ci0gICAgICAg
ICAgICAgICAgLy8gRklYTUU6IGFkZCBzdXBwb3J0IGZvciBzdGVwcyB0aW1pbmcgZnVuY3Rpb24u
Ci0gICAgICAgICAgICAgICAgcmV0dXJuIG51bGxwdHI7Ci0gICAgICAgICAgICBjYXNlIFRpbWlu
Z0Z1bmN0aW9uOjpMaW5lYXJGdW5jdGlvbjoKLSAgICAgICAgICAgICAgICAvLyBEb24ndCBzZXQg
dGhlIHRpbWluZyBmdW5jdGlvbi4gS2V5ZnJhbWVzIGFyZSBpbnRlcnBvbGF0ZWQgbGluZWFybHkg
aWYgdGhlcmUgaXMgbm8gdGltaW5nIGZ1bmN0aW9uLgotICAgICAgICAgICAgICAgIGJyZWFrOwot
ICAgICAgICAgICAgY2FzZSBUaW1pbmdGdW5jdGlvbjo6Q3ViaWNCZXppZXJGdW5jdGlvbjoKLSAg
ICAgICAgICAgICAgICBjb25zdCBDdWJpY0JlemllclRpbWluZ0Z1bmN0aW9uKiBvcmlnaW5hbEJl
emllclRpbWluZ0Z1bmN0aW9uID0gc3RhdGljX2Nhc3Q8Y29uc3QgQ3ViaWNCZXppZXJUaW1pbmdG
dW5jdGlvbio+KG9yaWdpbmFsVGltaW5nRnVuY3Rpb24pOwotICAgICAgICAgICAgICAgIHRpbWlu
Z0Z1bmN0aW9uID0gQ0NDdWJpY0JlemllclRpbWluZ0Z1bmN0aW9uOjpjcmVhdGUob3JpZ2luYWxC
ZXppZXJUaW1pbmdGdW5jdGlvbi0+eDEoKSwgb3JpZ2luYWxCZXppZXJUaW1pbmdGdW5jdGlvbi0+
eTEoKSwgb3JpZ2luYWxCZXppZXJUaW1pbmdGdW5jdGlvbi0+eDIoKSwgb3JpZ2luYWxCZXppZXJU
aW1pbmdGdW5jdGlvbi0+eTIoKSk7Ci0gICAgICAgICAgICAgICAgYnJlYWs7Ci0gICAgICAgICAg
ICB9IC8vIHN3aXRjaAotICAgICAgICB9IGVsc2UKLSAgICAgICAgICAgIHRpbWluZ0Z1bmN0aW9u
ID0gQ0NFYXNlVGltaW5nRnVuY3Rpb246OmNyZWF0ZSgpOwotCi0gICAgICAgIGRvdWJsZSBkdXJh
dGlvbiA9IChhbmltYXRpb24gJiYgYW5pbWF0aW9uLT5pc0R1cmF0aW9uU2V0KCkpID8gYW5pbWF0
aW9uLT5kdXJhdGlvbigpIDogMTsKLSAgICAgICAgZG91YmxlIGtleVRpbWUgPSBvcmlnaW5hbFZh
bHVlLT5rZXlUaW1lKCkgKiBkdXJhdGlvbjsKLSAgICAgICAgaWYgKHJldmVyc2UpCi0gICAgICAg
ICAgICBrZXlUaW1lID0gZHVyYXRpb24gLSBrZXlUaW1lOwotICAgICAgICBhcHBlbmRLZXlmcmFt
ZTxWYWx1ZSwgS2V5ZnJhbWUsIEN1cnZlPigqY3VydmUsIGtleVRpbWUsIG9yaWdpbmFsVmFsdWUs
IHRpbWluZ0Z1bmN0aW9uLnJlbGVhc2UoKSk7Ci0gICAgfQotCi0gICAgT3duUHRyPENDQWN0aXZl
QW5pbWF0aW9uPiBhbmltID0gQ0NBY3RpdmVBbmltYXRpb246OmNyZWF0ZShjdXJ2ZS5yZWxlYXNl
KCksIGFuaW1hdGlvbklkLCBncm91cElkLCB0YXJnZXRQcm9wZXJ0eSk7Ci0KLSAgICBBU1NFUlQo
YW5pbS5nZXQoKSk7Ci0KLSAgICBpZiAoYW5pbS5nZXQoKSkgewotICAgICAgICBpbnQgaXRlcmF0
aW9ucyA9IChhbmltYXRpb24gJiYgYW5pbWF0aW9uLT5pc0l0ZXJhdGlvbkNvdW50U2V0KCkpID8g
YW5pbWF0aW9uLT5pdGVyYXRpb25Db3VudCgpIDogMTsKLSAgICAgICAgYW5pbS0+c2V0SXRlcmF0
aW9ucyhpdGVyYXRpb25zKTsKLSAgICAgICAgYW5pbS0+c2V0QWx0ZXJuYXRlc0RpcmVjdGlvbihh
bHRlcm5hdGUpOwotICAgIH0KLQotICAgIC8vIEluIG9yZGVyIHRvIGF2b2lkIHNrZXcsIHRoZSBt
YWluIHRocmVhZCBhbmltYXRpb24gY2Fubm90IHRpY2sgdW50aWwgaXQgaGFzIHJlY2VpdmVkIHRo
ZSBzdGFydCB0aW1lIG9mCi0gICAgLy8gdGhlIGNvcnJlc3BvbmRpbmcgaW1wbCB0aHJlYWQgYW5p
bWF0aW9uLgotICAgIGFuaW0tPnNldE5lZWRzU3luY2hyb25pemVkU3RhcnRUaW1lKHRydWUpOwot
Ci0gICAgLy8gSWYgdGltZU9mZnNldCA+IDAsIHRoZW4gdGhlIGFuaW1hdGlvbiBoYXMgc3RhcnRl
ZCBpbiB0aGUgcGFzdC4KLSAgICBhbmltLT5zZXRUaW1lT2Zmc2V0KHRpbWVPZmZzZXQpOwotCi0g
ICAgcmV0dXJuIGFuaW0ucmVsZWFzZSgpOwotfQotCi19IC8vIG5hbWVwYWNlCi0KIENDTGF5ZXJB
bmltYXRpb25Db250cm9sbGVyOjpDQ0xheWVyQW5pbWF0aW9uQ29udHJvbGxlcihDQ0xheWVyQW5p
bWF0aW9uQ29udHJvbGxlckNsaWVudCogY2xpZW50KQogICAgIDogbV9mb3JjZVN5bmMoZmFsc2Up
CiAgICAgLCBtX2NsaWVudChjbGllbnQpCkBAIC0xNDAsMzIgKzUyLDYgQEAgUGFzc093blB0cjxD
Q0xheWVyQW5pbWF0aW9uQ29udHJvbGxlcj4gQ0NMYXllckFuaW1hdGlvbkNvbnRyb2xsZXI6OmNy
ZWF0ZShDQ0xheWUKICAgICByZXR1cm4gYWRvcHRQdHIobmV3IENDTGF5ZXJBbmltYXRpb25Db250
cm9sbGVyKGNsaWVudCkpOwogfQogCi1ib29sIENDTGF5ZXJBbmltYXRpb25Db250cm9sbGVyOjph
ZGRBbmltYXRpb24oY29uc3QgS2V5ZnJhbWVWYWx1ZUxpc3QmIHZhbHVlTGlzdCwgY29uc3QgSW50
U2l6ZSYsIGNvbnN0IEFuaW1hdGlvbiogYW5pbWF0aW9uLCBpbnQgYW5pbWF0aW9uSWQsIGludCBn
cm91cElkLCBkb3VibGUgdGltZU9mZnNldCkKLXsKLSAgICBpZiAoIWFuaW1hdGlvbikKLSAgICAg
ICAgcmV0dXJuIGZhbHNlOwotCi0gICAgT3duUHRyPENDQWN0aXZlQW5pbWF0aW9uPiB0b0FkZDsK
LSAgICBpZiAodmFsdWVMaXN0LnByb3BlcnR5KCkgPT0gQW5pbWF0ZWRQcm9wZXJ0eVdlYmtpdFRy
YW5zZm9ybSkKLSAgICAgICAgdG9BZGQgPSBjcmVhdGVBY3RpdmVBbmltYXRpb248VHJhbnNmb3Jt
QW5pbWF0aW9uVmFsdWUsIENDVHJhbnNmb3JtS2V5ZnJhbWUsIENDS2V5ZnJhbWVkVHJhbnNmb3Jt
QW5pbWF0aW9uQ3VydmU+KHZhbHVlTGlzdCwgYW5pbWF0aW9uLCBhbmltYXRpb25JZCwgZ3JvdXBJ
ZCwgdGltZU9mZnNldCwgQ0NBY3RpdmVBbmltYXRpb246OlRyYW5zZm9ybSk7Ci0gICAgZWxzZSBp
ZiAodmFsdWVMaXN0LnByb3BlcnR5KCkgPT0gQW5pbWF0ZWRQcm9wZXJ0eU9wYWNpdHkpCi0gICAg
ICAgIHRvQWRkID0gY3JlYXRlQWN0aXZlQW5pbWF0aW9uPEZsb2F0QW5pbWF0aW9uVmFsdWUsIEND
RmxvYXRLZXlmcmFtZSwgQ0NLZXlmcmFtZWRGbG9hdEFuaW1hdGlvbkN1cnZlPih2YWx1ZUxpc3Qs
IGFuaW1hdGlvbiwgYW5pbWF0aW9uSWQsIGdyb3VwSWQsIHRpbWVPZmZzZXQsIENDQWN0aXZlQW5p
bWF0aW9uOjpPcGFjaXR5KTsKLQotICAgIGlmICh0b0FkZC5nZXQoKSkgewotICAgICAgICAvLyBS
ZW1vdmUgYW55IGV4aXN0aW5nIGFuaW1hdGlvbnMgd2l0aCB0aGUgc2FtZSBhbmltYXRpb24gaWQg
YW5kIHRhcmdldCBwcm9wZXJ0eS4KLSAgICAgICAgZm9yIChzaXplX3QgaSA9IDA7IGkgPCBtX2Fj
dGl2ZUFuaW1hdGlvbnMuc2l6ZSgpOykgewotICAgICAgICAgICAgaWYgKG1fYWN0aXZlQW5pbWF0
aW9uc1tpXS0+aWQoKSA9PSBhbmltYXRpb25JZCAmJiBtX2FjdGl2ZUFuaW1hdGlvbnNbaV0tPnRh
cmdldFByb3BlcnR5KCkgPT0gdG9BZGQtPnRhcmdldFByb3BlcnR5KCkpCi0gICAgICAgICAgICAg
ICAgbV9hY3RpdmVBbmltYXRpb25zLnJlbW92ZShpKTsKLSAgICAgICAgICAgIGVsc2UKLSAgICAg
ICAgICAgICAgICBpKys7Ci0gICAgICAgIH0KLSAgICAgICAgbV9hY3RpdmVBbmltYXRpb25zLmFw
cGVuZCh0b0FkZC5yZWxlYXNlKCkpOwotICAgICAgICByZXR1cm4gdHJ1ZTsKLSAgICB9Ci0KLSAg
ICByZXR1cm4gZmFsc2U7Ci19Ci0KIHZvaWQgQ0NMYXllckFuaW1hdGlvbkNvbnRyb2xsZXI6OnBh
dXNlQW5pbWF0aW9uKGludCBhbmltYXRpb25JZCwgZG91YmxlIHRpbWVPZmZzZXQpCiB7CiAgICAg
Zm9yIChzaXplX3QgaSA9IDA7IGkgPCBtX2FjdGl2ZUFuaW1hdGlvbnMuc2l6ZSgpOyArK2kpIHsK
QEAgLTE4NCw2ICs3MCwxNiBAQCB2b2lkIENDTGF5ZXJBbmltYXRpb25Db250cm9sbGVyOjpyZW1v
dmVBbmltYXRpb24oaW50IGFuaW1hdGlvbklkKQogICAgIH0KIH0KIAordm9pZCBDQ0xheWVyQW5p
bWF0aW9uQ29udHJvbGxlcjo6cmVtb3ZlQW5pbWF0aW9uKGludCBhbmltYXRpb25JZCwgQ0NBY3Rp
dmVBbmltYXRpb246OlRhcmdldFByb3BlcnR5IHRhcmdldFByb3BlcnR5KQoreworICAgIGZvciAo
c2l6ZV90IGkgPSAwOyBpIDwgbV9hY3RpdmVBbmltYXRpb25zLnNpemUoKTspIHsKKyAgICAgICAg
aWYgKG1fYWN0aXZlQW5pbWF0aW9uc1tpXS0+aWQoKSA9PSBhbmltYXRpb25JZCAmJiBtX2FjdGl2
ZUFuaW1hdGlvbnNbaV0tPnRhcmdldFByb3BlcnR5KCkgPT0gdGFyZ2V0UHJvcGVydHkpCisgICAg
ICAgICAgICBtX2FjdGl2ZUFuaW1hdGlvbnMucmVtb3ZlKGkpOworICAgICAgICBlbHNlCisgICAg
ICAgICAgICBpKys7CisgICAgfQorfQorCiAvLyBBY2NvcmRpbmcgdG8gcmVuZGVyIGxheWVyIGJh
Y2tpbmcsIHRoZXNlIGFyZSBmb3IgdGVzdGluZyBvbmx5Lgogdm9pZCBDQ0xheWVyQW5pbWF0aW9u
Q29udHJvbGxlcjo6c3VzcGVuZEFuaW1hdGlvbnMoZG91YmxlIG1vbm90b25pY1RpbWUpCiB7CkBA
IC0yMjcsNyArMTIzLDcgQEAgdm9pZCBDQ0xheWVyQW5pbWF0aW9uQ29udHJvbGxlcjo6YW5pbWF0
ZShkb3VibGUgbW9ub3RvbmljVGltZSwgQ0NBbmltYXRpb25FdmVudHMKICAgICBzdGFydEFuaW1h
dGlvbnNXYWl0aW5nRm9yVGFyZ2V0QXZhaWxhYmlsaXR5KG1vbm90b25pY1RpbWUsIGV2ZW50cyk7
CiB9CiAKLXZvaWQgQ0NMYXllckFuaW1hdGlvbkNvbnRyb2xsZXI6OmFkZChQYXNzT3duUHRyPEND
QWN0aXZlQW5pbWF0aW9uPiBhbmltYXRpb24pCit2b2lkIENDTGF5ZXJBbmltYXRpb25Db250cm9s
bGVyOjphZGRBbmltYXRpb24oUGFzc093blB0cjxDQ0FjdGl2ZUFuaW1hdGlvbj4gYW5pbWF0aW9u
KQogewogICAgIG1fYWN0aXZlQW5pbWF0aW9ucy5hcHBlbmQoYW5pbWF0aW9uKTsKIH0KQEAgLTI0
MCw2ICsxMzYsMTYgQEAgQ0NBY3RpdmVBbmltYXRpb24qIENDTGF5ZXJBbmltYXRpb25Db250cm9s
bGVyOjpnZXRBY3RpdmVBbmltYXRpb24oaW50IGdyb3VwSWQsIEMKICAgICByZXR1cm4gMDsKIH0K
IAorQ0NBY3RpdmVBbmltYXRpb24qIENDTGF5ZXJBbmltYXRpb25Db250cm9sbGVyOjpnZXRBY3Rp
dmVBbmltYXRpb24oQ0NBY3RpdmVBbmltYXRpb246OlRhcmdldFByb3BlcnR5IHRhcmdldFByb3Bl
cnR5KSBjb25zdAoreworICAgIGZvciAoc2l6ZV90IGkgPSAwOyBpIDwgbV9hY3RpdmVBbmltYXRp
b25zLnNpemUoKTsgKytpKSB7CisgICAgICAgIHNpemVfdCBpbmRleCA9IG1fYWN0aXZlQW5pbWF0
aW9ucy5zaXplKCkgLSBpIC0gMTsKKyAgICAgICAgaWYgKG1fYWN0aXZlQW5pbWF0aW9uc1tpbmRl
eF0tPnRhcmdldFByb3BlcnR5KCkgPT0gdGFyZ2V0UHJvcGVydHkpCisgICAgICAgICAgICByZXR1
cm4gbV9hY3RpdmVBbmltYXRpb25zW2luZGV4XS5nZXQoKTsKKyAgICB9CisgICAgcmV0dXJuIDA7
Cit9CisKIGJvb2wgQ0NMYXllckFuaW1hdGlvbkNvbnRyb2xsZXI6Omhhc0FjdGl2ZUFuaW1hdGlv
bigpIGNvbnN0CiB7CiAgICAgZm9yIChzaXplX3QgaSA9IDA7IGkgPCBtX2FjdGl2ZUFuaW1hdGlv
bnMuc2l6ZSgpOyArK2kpIHsKQEAgLTI5NCw3ICsyMDAsNyBAQCB2b2lkIENDTGF5ZXJBbmltYXRp
b25Db250cm9sbGVyOjpwdXNoTmV3QW5pbWF0aW9uc1RvSW1wbFRocmVhZChDQ0xheWVyQW5pbWF0
aW9uQwogICAgICAgICAvLyBUaGUgbmV3IGFuaW1hdGlvbiBzaG91bGQgYmUgc2V0IHRvIHJ1biBh
cyBzb29uIGFzIHBvc3NpYmxlLgogICAgICAgICB0b0FkZC0+c2V0UnVuU3RhdGUoQ0NBY3RpdmVB
bmltYXRpb246OldhaXRpbmdGb3JUYXJnZXRBdmFpbGFiaWxpdHksIDApOwogICAgICAgICB0b0Fk
ZC0+c2V0U3RhcnRUaW1lKDApOwotICAgICAgICBjb250cm9sbGVySW1wbC0+YWRkKHRvQWRkLnJl
bGVhc2UoKSk7CisgICAgICAgIGNvbnRyb2xsZXJJbXBsLT5hZGRBbmltYXRpb24odG9BZGQucmVs
ZWFzZSgpKTsKICAgICB9CiB9CiAKQEAgLTQ2MSw3ICszNjcsNyBAQCB2b2lkIENDTGF5ZXJBbmlt
YXRpb25Db250cm9sbGVyOjpyZXBsYWNlSW1wbFRocmVhZEFuaW1hdGlvbnMoQ0NMYXllckFuaW1h
dGlvbkNvbgogICAgICAgICAgICAgdG9BZGQtPnNldFJ1blN0YXRlKENDQWN0aXZlQW5pbWF0aW9u
OjpXYWl0aW5nRm9yVGFyZ2V0QXZhaWxhYmlsaXR5LCAwKTsKICAgICAgICAgICAgIHRvQWRkLT5z
ZXRTdGFydFRpbWUoMCk7CiAgICAgICAgIH0KLSAgICAgICAgY29udHJvbGxlckltcGwtPmFkZCh0
b0FkZC5yZWxlYXNlKCkpOworICAgICAgICBjb250cm9sbGVySW1wbC0+YWRkQW5pbWF0aW9uKHRv
QWRkLnJlbGVhc2UoKSk7CiAgICAgfQogfQogCkBAIC00ODAsNyArMzg2LDcgQEAgdm9pZCBDQ0xh
eWVyQW5pbWF0aW9uQ29udHJvbGxlcjo6dGlja0FuaW1hdGlvbnMoZG91YmxlIG1vbm90b25pY1Rp
bWUpCiAKICAgICAgICAgICAgIGNhc2UgQ0NBY3RpdmVBbmltYXRpb246OlRyYW5zZm9ybTogewog
ICAgICAgICAgICAgICAgIGNvbnN0IENDVHJhbnNmb3JtQW5pbWF0aW9uQ3VydmUqIHRyYW5zZm9y
bUFuaW1hdGlvbkN1cnZlID0gbV9hY3RpdmVBbmltYXRpb25zW2ldLT5jdXJ2ZSgpLT50b1RyYW5z
Zm9ybUFuaW1hdGlvbkN1cnZlKCk7Ci0gICAgICAgICAgICAgICAgY29uc3QgV2ViVHJhbnNmb3Jt
YXRpb25NYXRyaXggbWF0cml4ID0gdHJhbnNmb3JtQW5pbWF0aW9uQ3VydmUtPmdldFZhbHVlKHRy
aW1tZWQsIG1fY2xpZW50LT5ib3VuZHMoKSk7CisgICAgICAgICAgICAgICAgY29uc3QgV2ViVHJh
bnNmb3JtYXRpb25NYXRyaXggbWF0cml4ID0gdHJhbnNmb3JtQW5pbWF0aW9uQ3VydmUtPmdldFZh
bHVlKHRyaW1tZWQpOwogICAgICAgICAgICAgICAgIGlmIChtX2FjdGl2ZUFuaW1hdGlvbnNbaV0t
PmlzRmluaXNoZWRBdChtb25vdG9uaWNUaW1lKSkKICAgICAgICAgICAgICAgICAgICAgbV9hY3Rp
dmVBbmltYXRpb25zW2ldLT5zZXRSdW5TdGF0ZShDQ0FjdGl2ZUFuaW1hdGlvbjo6RmluaXNoZWQs
IG1vbm90b25pY1RpbWUpOwogCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9n
cmFwaGljcy9jaHJvbWl1bS9jYy9DQ0xheWVyQW5pbWF0aW9uQ29udHJvbGxlci5oIGIvU291cmNl
L1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvY2hyb21pdW0vY2MvQ0NMYXllckFuaW1hdGlvbkNv
bnRyb2xsZXIuaAppbmRleCBjNGM5MTU4YjJjODdjZmU0NmRmYzE2MmQwODdhMTFmZGZmYjg5MjQ4
Li4yZmMzOWQ4MTNlMThlNjAwOTk4MDQ3N2M0NWU3N2ZlODM0OTYzYTFjIDEwMDY0NAotLS0gYS9T
b3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9jaHJvbWl1bS9jYy9DQ0xheWVyQW5pbWF0
aW9uQ29udHJvbGxlci5oCisrKyBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2No
cm9taXVtL2NjL0NDTGF5ZXJBbmltYXRpb25Db250cm9sbGVyLmgKQEAgLTU0LDcgKzU0LDYgQEAg
cHVibGljOgogICAgIHZpcnR1YWwgZmxvYXQgb3BhY2l0eSgpIGNvbnN0ID0gMDsKICAgICB2aXJ0
dWFsIHZvaWQgc2V0VHJhbnNmb3JtRnJvbUFuaW1hdGlvbihjb25zdCBXZWJLaXQ6OldlYlRyYW5z
Zm9ybWF0aW9uTWF0cml4JikgPSAwOwogICAgIHZpcnR1YWwgY29uc3QgV2ViS2l0OjpXZWJUcmFu
c2Zvcm1hdGlvbk1hdHJpeCYgdHJhbnNmb3JtKCkgY29uc3QgPSAwOwotICAgIHZpcnR1YWwgY29u
c3QgSW50U2l6ZSYgYm91bmRzKCkgY29uc3QgPSAwOwogfTsKIAogY2xhc3MgQ0NMYXllckFuaW1h
dGlvbkNvbnRyb2xsZXIgewpAQCAtNjUsOSArNjQsMTAgQEAgcHVibGljOgogICAgIHZpcnR1YWwg
fkNDTGF5ZXJBbmltYXRpb25Db250cm9sbGVyKCk7CiAKICAgICAvLyBUaGVzZSBtZXRob2RzIGFy
ZSB2aXJ0dWFsIGZvciB0ZXN0aW5nLgotICAgIHZpcnR1YWwgYm9vbCBhZGRBbmltYXRpb24oY29u
c3QgS2V5ZnJhbWVWYWx1ZUxpc3QmLCBjb25zdCBJbnRTaXplJiBib3hTaXplLCBjb25zdCBBbmlt
YXRpb24qLCBpbnQgYW5pbWF0aW9uSWQsIGludCBncm91cElkLCBkb3VibGUgdGltZU9mZnNldCk7
CisgICAgdmlydHVhbCB2b2lkIGFkZEFuaW1hdGlvbihQYXNzT3duUHRyPENDQWN0aXZlQW5pbWF0
aW9uPik7CiAgICAgdmlydHVhbCB2b2lkIHBhdXNlQW5pbWF0aW9uKGludCBhbmltYXRpb25JZCwg
ZG91YmxlIHRpbWVPZmZzZXQpOwogICAgIHZpcnR1YWwgdm9pZCByZW1vdmVBbmltYXRpb24oaW50
IGFuaW1hdGlvbklkKTsKKyAgICB2aXJ0dWFsIHZvaWQgcmVtb3ZlQW5pbWF0aW9uKGludCBhbmlt
YXRpb25JZCwgQ0NBY3RpdmVBbmltYXRpb246OlRhcmdldFByb3BlcnR5KTsKICAgICB2aXJ0dWFs
IHZvaWQgc3VzcGVuZEFuaW1hdGlvbnMoZG91YmxlIG1vbm90b25pY1RpbWUpOwogICAgIHZpcnR1
YWwgdm9pZCByZXN1bWVBbmltYXRpb25zKGRvdWJsZSBtb25vdG9uaWNUaW1lKTsKIApAQCAtNzcs
MTIgKzc3LDE0IEBAIHB1YmxpYzoKIAogICAgIHZvaWQgYW5pbWF0ZShkb3VibGUgbW9ub3Rvbmlj
VGltZSwgQ0NBbmltYXRpb25FdmVudHNWZWN0b3IqKTsKIAotICAgIHZvaWQgYWRkKFBhc3NPd25Q
dHI8Q0NBY3RpdmVBbmltYXRpb24+KTsKLQotICAgIC8vIFJldHVybnMgdGhlIGFjdGl2ZSBhbmlt
YXRpb24gaW4gdGhlIGdpdmVuIGdyb3VwLCBhbmltYXRpbmcgdGhlIGdpdmVuIHByb3BlcnR5IGlm
IHN1Y2ggYW4KKyAgICAvLyBSZXR1cm5zIHRoZSBhY3RpdmUgYW5pbWF0aW9uIGluIHRoZSBnaXZl
biBncm91cCwgYW5pbWF0aW5nIHRoZSBnaXZlbiBwcm9wZXJ0eSwgaWYgc3VjaCBhbgogICAgIC8v
IGFuaW1hdGlvbiBleGlzdHMuCiAgICAgQ0NBY3RpdmVBbmltYXRpb24qIGdldEFjdGl2ZUFuaW1h
dGlvbihpbnQgZ3JvdXBJZCwgQ0NBY3RpdmVBbmltYXRpb246OlRhcmdldFByb3BlcnR5KSBjb25z
dDsKIAorICAgIC8vIFJldHVybnMgdGhlIGFjdGl2ZSBhbmltYXRpb24gYW5pbWF0aW5nIHRoZSBn
aXZlbiBwcm9wZXJ0eSB0aGF0IGlzIGVpdGhlciBydW5uaW5nLCBvciBpcworICAgIC8vIG5leHQg
dG8gcnVuLCBpZiBzdWNoIGFuIGFuaW1hdGlvbiBleGlzdHMuCisgICAgQ0NBY3RpdmVBbmltYXRp
b24qIGdldEFjdGl2ZUFuaW1hdGlvbihDQ0FjdGl2ZUFuaW1hdGlvbjo6VGFyZ2V0UHJvcGVydHkp
IGNvbnN0OworCiAgICAgLy8gUmV0dXJucyB0cnVlIGlmIHRoZXJlIGFyZSBhbnkgYW5pbWF0aW9u
cyB0aGF0IGhhdmUgbmVpdGhlciBmaW5pc2hlZCBub3IgYWJvcnRlZC4KICAgICBib29sIGhhc0Fj
dGl2ZUFuaW1hdGlvbigpIGNvbnN0OwogCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9wbGF0
Zm9ybS9ncmFwaGljcy9jaHJvbWl1bS9jYy9DQ0xheWVySW1wbC5oIGIvU291cmNlL1dlYkNvcmUv
cGxhdGZvcm0vZ3JhcGhpY3MvY2hyb21pdW0vY2MvQ0NMYXllckltcGwuaAppbmRleCBmZDRmYWNh
YTQwY2JhMTVkZjYyOWExYjI0ZGEzMmMyZmE1YjM3NDRkLi5mMDNjNWMzZWEzMWQ5YmI0NzI1MDE5
MTYzMzk5NWE0MGE5MGVlZGRkIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9n
cmFwaGljcy9jaHJvbWl1bS9jYy9DQ0xheWVySW1wbC5oCisrKyBiL1NvdXJjZS9XZWJDb3JlL3Bs
YXRmb3JtL2dyYXBoaWNzL2Nocm9taXVtL2NjL0NDTGF5ZXJJbXBsLmgKQEAgLTY1LDcgKzY1LDYg
QEAgcHVibGljOgogICAgIHZpcnR1YWwgZmxvYXQgb3BhY2l0eSgpIGNvbnN0IE9WRVJSSURFIHsg
cmV0dXJuIG1fb3BhY2l0eTsgfQogICAgIHZpcnR1YWwgdm9pZCBzZXRUcmFuc2Zvcm1Gcm9tQW5p
bWF0aW9uKGNvbnN0IFdlYktpdDo6V2ViVHJhbnNmb3JtYXRpb25NYXRyaXgmKSBPVkVSUklERTsK
ICAgICB2aXJ0dWFsIGNvbnN0IFdlYktpdDo6V2ViVHJhbnNmb3JtYXRpb25NYXRyaXgmIHRyYW5z
Zm9ybSgpIGNvbnN0IE9WRVJSSURFIHsgcmV0dXJuIG1fdHJhbnNmb3JtOyB9Ci0gICAgdmlydHVh
bCBjb25zdCBJbnRTaXplJiBib3VuZHMoKSBjb25zdCBPVkVSUklERSB7IHJldHVybiBtX2JvdW5k
czsgfQogCiAgICAgLy8gVHJlZSBzdHJ1Y3R1cmUuCiAgICAgQ0NMYXllckltcGwqIHBhcmVudCgp
IGNvbnN0IHsgcmV0dXJuIG1fcGFyZW50OyB9CkBAIC0xNzYsNiArMTc1LDcgQEAgcHVibGljOgog
ICAgIHZvaWQgc2V0VGFyZ2V0UmVuZGVyU3VyZmFjZShDQ1JlbmRlclN1cmZhY2UqIHN1cmZhY2Up
IHsgbV90YXJnZXRSZW5kZXJTdXJmYWNlID0gc3VyZmFjZTsgfQogCiAgICAgdm9pZCBzZXRCb3Vu
ZHMoY29uc3QgSW50U2l6ZSYpOworICAgIGNvbnN0IEludFNpemUmIGJvdW5kcygpIGNvbnN0IHsg
cmV0dXJuIG1fYm91bmRzOyB9CiAKICAgICBjb25zdCBJbnRTaXplJiBjb250ZW50Qm91bmRzKCkg
Y29uc3QgeyByZXR1cm4gbV9jb250ZW50Qm91bmRzOyB9CiAgICAgdm9pZCBzZXRDb250ZW50Qm91
bmRzKGNvbnN0IEludFNpemUmKTsKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJLaXQvY2hyb21pdW0v
dGVzdHMvQ0NBbmltYXRpb25UZXN0Q29tbW9uLmNwcCBiL1NvdXJjZS9XZWJLaXQvY2hyb21pdW0v
dGVzdHMvQ0NBbmltYXRpb25UZXN0Q29tbW9uLmNwcAppbmRleCAwZThjMWE0MDFmNmM4YmJkZTIy
MzIzMWQyYzkzZmQ5ODRiMzUyMTNhLi44NTQ1OTUzODA1M2M2YTk4NjBhZjBmNzk0ODBmY2U2ZjYz
ZDdjM2MzIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViS2l0L2Nocm9taXVtL3Rlc3RzL0NDQW5pbWF0
aW9uVGVzdENvbW1vbi5jcHAKKysrIGIvU291cmNlL1dlYktpdC9jaHJvbWl1bS90ZXN0cy9DQ0Fu
aW1hdGlvblRlc3RDb21tb24uY3BwCkBAIC0yOSw5ICsyOSwxMiBAQAogI2luY2x1ZGUgIkdyYXBo
aWNzTGF5ZXIuaCIKICNpbmNsdWRlICJMYXllckNocm9taXVtLmgiCiAjaW5jbHVkZSAiVHJhbnNs
YXRlVHJhbnNmb3JtT3BlcmF0aW9uLmgiCisjaW5jbHVkZSAiY2MvQ0NLZXlmcmFtZWRBbmltYXRp
b25DdXJ2ZS5oIgogI2luY2x1ZGUgImNjL0NDTGF5ZXJBbmltYXRpb25Db250cm9sbGVyLmgiCiAj
aW5jbHVkZSAiY2MvQ0NMYXllckltcGwuaCIKIAorI2luY2x1ZGUgPHB1YmxpYy9XZWJUcmFuc2Zv
cm1PcGVyYXRpb25zLmg+CisKIHVzaW5nIG5hbWVzcGFjZSBXZWJDb3JlOwogCiBuYW1lc3BhY2Ug
ewpAQCAtMzksMzggKzQyLDM4IEBAIG5hbWVzcGFjZSB7CiB0ZW1wbGF0ZSA8Y2xhc3MgVGFyZ2V0
Pgogdm9pZCBhZGRPcGFjaXR5VHJhbnNpdGlvbihUYXJnZXQmIHRhcmdldCwgZG91YmxlIGR1cmF0
aW9uLCBmbG9hdCBzdGFydE9wYWNpdHksIGZsb2F0IGVuZE9wYWNpdHksIGJvb2wgdXNlVGltaW5n
RnVuY3Rpb24pCiB7Ci0gICAgV2ViQ29yZTo6S2V5ZnJhbWVWYWx1ZUxpc3QgdmFsdWVzKEFuaW1h
dGVkUHJvcGVydHlPcGFjaXR5KTsKLSAgICBpZiAoZHVyYXRpb24gPiAwKQotICAgICAgICB2YWx1
ZXMuaW5zZXJ0KG5ldyBGbG9hdEFuaW1hdGlvblZhbHVlKDAsIHN0YXJ0T3BhY2l0eSkpOwotICAg
IHZhbHVlcy5pbnNlcnQobmV3IEZsb2F0QW5pbWF0aW9uVmFsdWUoZHVyYXRpb24sIGVuZE9wYWNp
dHkpKTsKKyAgICBPd25QdHI8Q0NLZXlmcmFtZWRGbG9hdEFuaW1hdGlvbkN1cnZlPiBjdXJ2ZShD
Q0tleWZyYW1lZEZsb2F0QW5pbWF0aW9uQ3VydmU6OmNyZWF0ZSgpKTsKIAotICAgIFJlZlB0cjxB
bmltYXRpb24+IGFuaW1hdGlvbiA9IEFuaW1hdGlvbjo6Y3JlYXRlKCk7Ci0gICAgYW5pbWF0aW9u
LT5zZXREdXJhdGlvbihkdXJhdGlvbik7Ci0KLSAgICBpZiAodXNlVGltaW5nRnVuY3Rpb24pCi0g
ICAgICAgIGFuaW1hdGlvbi0+c2V0VGltaW5nRnVuY3Rpb24oTGluZWFyVGltaW5nRnVuY3Rpb246
OmNyZWF0ZSgpKTsKKyAgICBpZiAoZHVyYXRpb24gPiAwKQorICAgICAgICBjdXJ2ZS0+YWRkS2V5
ZnJhbWUoQ0NGbG9hdEtleWZyYW1lOjpjcmVhdGUoMCwgc3RhcnRPcGFjaXR5LCB1c2VUaW1pbmdG
dW5jdGlvbiA/IG51bGxwdHIgOiBDQ0Vhc2VUaW1pbmdGdW5jdGlvbjo6Y3JlYXRlKCkpKTsKKyAg
ICBjdXJ2ZS0+YWRkS2V5ZnJhbWUoQ0NGbG9hdEtleWZyYW1lOjpjcmVhdGUoZHVyYXRpb24sIGVu
ZE9wYWNpdHksIG51bGxwdHIpKTsKIAotICAgIEludFNpemUgYm94U2l6ZTsKKyAgICBPd25QdHI8
Q0NBY3RpdmVBbmltYXRpb24+IGFuaW1hdGlvbihDQ0FjdGl2ZUFuaW1hdGlvbjo6Y3JlYXRlKGN1
cnZlLnJlbGVhc2UoKSwgMCwgMCwgQ0NBY3RpdmVBbmltYXRpb246Ok9wYWNpdHkpKTsKKyAgICBh
bmltYXRpb24tPnNldE5lZWRzU3luY2hyb25pemVkU3RhcnRUaW1lKHRydWUpOwogCi0gICAgdGFy
Z2V0LmFkZEFuaW1hdGlvbih2YWx1ZXMsIGJveFNpemUsIGFuaW1hdGlvbi5nZXQoKSwgMCwgMCwg
MCk7CisgICAgdGFyZ2V0LmFkZEFuaW1hdGlvbihhbmltYXRpb24ucmVsZWFzZSgpKTsKIH0KIAog
dGVtcGxhdGUgPGNsYXNzIFRhcmdldD4KIHZvaWQgYWRkQW5pbWF0ZWRUcmFuc2Zvcm0oVGFyZ2V0
JiB0YXJnZXQsIGRvdWJsZSBkdXJhdGlvbiwgaW50IGRlbHRhWCwgaW50IGRlbHRhWSkKIHsKICAg
ICBzdGF0aWMgaW50IGlkID0gMDsKLSAgICBXZWJDb3JlOjpLZXlmcmFtZVZhbHVlTGlzdCB2YWx1
ZXMoQW5pbWF0ZWRQcm9wZXJ0eVdlYmtpdFRyYW5zZm9ybSk7CisgICAgT3duUHRyPENDS2V5ZnJh
bWVkVHJhbnNmb3JtQW5pbWF0aW9uQ3VydmU+IGN1cnZlKENDS2V5ZnJhbWVkVHJhbnNmb3JtQW5p
bWF0aW9uQ3VydmU6OmNyZWF0ZSgpKTsKIAotICAgIFRyYW5zZm9ybU9wZXJhdGlvbnMgb3BlcmF0
aW9uczsKLSAgICBvcGVyYXRpb25zLm9wZXJhdGlvbnMoKS5hcHBlbmQoVHJhbnNsYXRlVHJhbnNm
b3JtT3BlcmF0aW9uOjpjcmVhdGUoTGVuZ3RoKGRlbHRhWCwgV2ViQ29yZTo6Rml4ZWQpLCBMZW5n
dGgoZGVsdGFZLCBXZWJDb3JlOjpGaXhlZCksIFRyYW5zZm9ybU9wZXJhdGlvbjo6VFJBTlNMQVRF
X1gpKTsKLSAgICB2YWx1ZXMuaW5zZXJ0KG5ldyBUcmFuc2Zvcm1BbmltYXRpb25WYWx1ZSgwLCAm
b3BlcmF0aW9ucykpOworICAgIGlmIChkdXJhdGlvbiA+IDApIHsKKyAgICAgICAgV2ViS2l0OjpX
ZWJUcmFuc2Zvcm1PcGVyYXRpb25zIHN0YXJ0T3BlcmF0aW9uczsKKyAgICAgICAgc3RhcnRPcGVy
YXRpb25zLmFwcGVuZFRyYW5zbGF0ZShkZWx0YVgsIGRlbHRhWSwgMCk7CisgICAgICAgIGN1cnZl
LT5hZGRLZXlmcmFtZShDQ1RyYW5zZm9ybUtleWZyYW1lOjpjcmVhdGUoMCwgc3RhcnRPcGVyYXRp
b25zLCBudWxscHRyKSk7CisgICAgfQogCi0gICAgUmVmUHRyPEFuaW1hdGlvbj4gYW5pbWF0aW9u
ID0gQW5pbWF0aW9uOjpjcmVhdGUoKTsKLSAgICBhbmltYXRpb24tPnNldER1cmF0aW9uKGR1cmF0
aW9uKTsKKyAgICBXZWJLaXQ6OldlYlRyYW5zZm9ybU9wZXJhdGlvbnMgb3BlcmF0aW9uczsKKyAg
ICBvcGVyYXRpb25zLmFwcGVuZFRyYW5zbGF0ZShkZWx0YVgsIGRlbHRhWSwgMCk7CisgICAgY3Vy
dmUtPmFkZEtleWZyYW1lKENDVHJhbnNmb3JtS2V5ZnJhbWU6OmNyZWF0ZShkdXJhdGlvbiwgb3Bl
cmF0aW9ucywgbnVsbHB0cikpOwogCi0gICAgSW50U2l6ZSBib3hTaXplOworICAgIE93blB0cjxD
Q0FjdGl2ZUFuaW1hdGlvbj4gYW5pbWF0aW9uKENDQWN0aXZlQW5pbWF0aW9uOjpjcmVhdGUoY3Vy
dmUucmVsZWFzZSgpLCBpZCsrLCAwLCBDQ0FjdGl2ZUFuaW1hdGlvbjo6VHJhbnNmb3JtKSk7Cisg
ICAgYW5pbWF0aW9uLT5zZXROZWVkc1N5bmNocm9uaXplZFN0YXJ0VGltZSh0cnVlKTsKIAotICAg
IHRhcmdldC5hZGRBbmltYXRpb24odmFsdWVzLCBib3hTaXplLCBhbmltYXRpb24uZ2V0KCksICsr
aWQsIDAsIDApOworICAgIHRhcmdldC5hZGRBbmltYXRpb24oYW5pbWF0aW9uLnJlbGVhc2UoKSk7
CiB9CiAKIH0gLy8gbmFtZXNwYWNlCkBAIC05OSw3ICsxMDIsNyBAQCBGYWtlVHJhbnNmb3JtVHJh
bnNpdGlvbjo6fkZha2VUcmFuc2Zvcm1UcmFuc2l0aW9uKCkKIHsKIH0KIAotV2ViS2l0OjpXZWJU
cmFuc2Zvcm1hdGlvbk1hdHJpeCBGYWtlVHJhbnNmb3JtVHJhbnNpdGlvbjo6Z2V0VmFsdWUoZG91
YmxlIHRpbWUsIGNvbnN0IFdlYkNvcmU6OkludFNpemUmIHNpemUpIGNvbnN0CitXZWJLaXQ6Oldl
YlRyYW5zZm9ybWF0aW9uTWF0cml4IEZha2VUcmFuc2Zvcm1UcmFuc2l0aW9uOjpnZXRWYWx1ZShk
b3VibGUgdGltZSkgY29uc3QKIHsKICAgICByZXR1cm4gV2ViS2l0OjpXZWJUcmFuc2Zvcm1hdGlv
bk1hdHJpeCgpOwogfQpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYktpdC9jaHJvbWl1bS90ZXN0cy9D
Q0FuaW1hdGlvblRlc3RDb21tb24uaCBiL1NvdXJjZS9XZWJLaXQvY2hyb21pdW0vdGVzdHMvQ0NB
bmltYXRpb25UZXN0Q29tbW9uLmgKaW5kZXggNDM4NDExN2QzOWNhYjcyMmY4NDU0ZWQ1Nzc2ZTUw
MjI5OTE2MGY3ZS4uNGJiZDYwMTEyMjJhMTMzOTk0NzIxOGM3YjNiN2Y3NDY0N2NmZWI1MSAxMDA2
NDQKLS0tIGEvU291cmNlL1dlYktpdC9jaHJvbWl1bS90ZXN0cy9DQ0FuaW1hdGlvblRlc3RDb21t
b24uaAorKysgYi9Tb3VyY2UvV2ViS2l0L2Nocm9taXVtL3Rlc3RzL0NDQW5pbWF0aW9uVGVzdENv
bW1vbi5oCkBAIC01NCw3ICs1NCw3IEBAIHB1YmxpYzoKICAgICB2aXJ0dWFsIH5GYWtlVHJhbnNm
b3JtVHJhbnNpdGlvbigpOwogCiAgICAgdmlydHVhbCBkb3VibGUgZHVyYXRpb24oKSBjb25zdCBP
VkVSUklERSB7IHJldHVybiBtX2R1cmF0aW9uOyB9Ci0gICAgdmlydHVhbCBXZWJLaXQ6OldlYlRy
YW5zZm9ybWF0aW9uTWF0cml4IGdldFZhbHVlKGRvdWJsZSB0aW1lLCBjb25zdCBXZWJDb3JlOjpJ
bnRTaXplJikgY29uc3QgT1ZFUlJJREU7CisgICAgdmlydHVhbCBXZWJLaXQ6OldlYlRyYW5zZm9y
bWF0aW9uTWF0cml4IGdldFZhbHVlKGRvdWJsZSB0aW1lKSBjb25zdCBPVkVSUklERTsKIAogICAg
IHZpcnR1YWwgUGFzc093blB0cjxXZWJDb3JlOjpDQ0FuaW1hdGlvbkN1cnZlPiBjbG9uZSgpIGNv
bnN0IE9WRVJSSURFOwogCkBAIC04OSwxMiArODksMTAgQEAgcHVibGljOgogICAgIHZpcnR1YWwg
ZmxvYXQgb3BhY2l0eSgpIGNvbnN0IE9WRVJSSURFIHsgcmV0dXJuIG1fb3BhY2l0eTsgfQogICAg
IHZpcnR1YWwgdm9pZCBzZXRUcmFuc2Zvcm1Gcm9tQW5pbWF0aW9uKGNvbnN0IFdlYktpdDo6V2Vi
VHJhbnNmb3JtYXRpb25NYXRyaXgmIHRyYW5zZm9ybSkgT1ZFUlJJREUgeyBtX3RyYW5zZm9ybSA9
IHRyYW5zZm9ybTsgfQogICAgIHZpcnR1YWwgY29uc3QgV2ViS2l0OjpXZWJUcmFuc2Zvcm1hdGlv
bk1hdHJpeCYgdHJhbnNmb3JtKCkgY29uc3QgT1ZFUlJJREUgeyByZXR1cm4gbV90cmFuc2Zvcm07
IH0KLSAgICB2aXJ0dWFsIGNvbnN0IFdlYkNvcmU6OkludFNpemUmIGJvdW5kcygpIGNvbnN0IE9W
RVJSSURFIHsgcmV0dXJuIG1fYm91bmRzOyB9CiAKIHByaXZhdGU6CiAgICAgZmxvYXQgbV9vcGFj
aXR5OwogICAgIFdlYktpdDo6V2ViVHJhbnNmb3JtYXRpb25NYXRyaXggbV90cmFuc2Zvcm07Ci0g
ICAgV2ViQ29yZTo6SW50U2l6ZSBtX2JvdW5kczsKIH07CiAKIHZvaWQgYWRkT3BhY2l0eVRyYW5z
aXRpb25Ub0NvbnRyb2xsZXIoV2ViQ29yZTo6Q0NMYXllckFuaW1hdGlvbkNvbnRyb2xsZXImLCBk
b3VibGUgZHVyYXRpb24sIGZsb2F0IHN0YXJ0T3BhY2l0eSwgZmxvYXQgZW5kT3BhY2l0eSwgYm9v
bCB1c2VUaW1pbmdGdW5jdGlvbik7CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViS2l0L2Nocm9taXVt
L3Rlc3RzL0NDS2V5ZnJhbWVkQW5pbWF0aW9uQ3VydmVUZXN0LmNwcCBiL1NvdXJjZS9XZWJLaXQv
Y2hyb21pdW0vdGVzdHMvQ0NLZXlmcmFtZWRBbmltYXRpb25DdXJ2ZVRlc3QuY3BwCmluZGV4IGFk
MWFlNzRjYTEyNTczNjRjOWMxNTMwZTQ3ZTIwYjY5NDdmNTBiYmQuLmViNmJiMDM2M2RhODU1ZWZj
NTczZTgwOTQ2OGJhNzI5ZTQ4YWNkNGYgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJLaXQvY2hyb21p
dW0vdGVzdHMvQ0NLZXlmcmFtZWRBbmltYXRpb25DdXJ2ZVRlc3QuY3BwCisrKyBiL1NvdXJjZS9X
ZWJLaXQvY2hyb21pdW0vdGVzdHMvQ0NLZXlmcmFtZWRBbmltYXRpb25DdXJ2ZVRlc3QuY3BwCkBA
IC0zMSw2ICszMSw3IEBACiAKICNpbmNsdWRlIDxnbW9jay9nbW9jay5oPgogI2luY2x1ZGUgPGd0
ZXN0L2d0ZXN0Lmg+CisjaW5jbHVkZSA8cHVibGljL1dlYlRyYW5zZm9ybU9wZXJhdGlvbnMuaD4K
ICNpbmNsdWRlIDxwdWJsaWMvV2ViVHJhbnNmb3JtYXRpb25NYXRyaXguaD4KICNpbmNsdWRlIDx3
dGYvT3duUHRyLmg+CiAjaW5jbHVkZSA8d3RmL1ZlY3Rvci5oPgpAQCAtMTEzLDU3ICsxMTQsNTUg
QEAgVEVTVChDQ0tleWZyYW1lZEFuaW1hdGlvbkN1cnZlVGVzdCwgUmVwZWF0ZWRGbG9hdEtleVRp
bWVzKQogVEVTVChDQ0tleWZyYW1lZEFuaW1hdGlvbkN1cnZlVGVzdCwgT25lVHJhbnNmb3JtS2V5
ZnJhbWUpCiB7CiAgICAgT3duUHRyPENDS2V5ZnJhbWVkVHJhbnNmb3JtQW5pbWF0aW9uQ3VydmU+
IGN1cnZlKENDS2V5ZnJhbWVkVHJhbnNmb3JtQW5pbWF0aW9uQ3VydmU6OmNyZWF0ZSgpKTsKLSAg
ICBUcmFuc2Zvcm1PcGVyYXRpb25zIG9wZXJhdGlvbnM7Ci0gICAgb3BlcmF0aW9ucy5vcGVyYXRp
b25zKCkuYXBwZW5kKFRyYW5zbGF0ZVRyYW5zZm9ybU9wZXJhdGlvbjo6Y3JlYXRlKExlbmd0aCgy
LCBGaXhlZCksIExlbmd0aCgwLCBGaXhlZCksIFRyYW5zZm9ybU9wZXJhdGlvbjo6VFJBTlNMQVRF
X1gpKTsKKyAgICBXZWJLaXQ6OldlYlRyYW5zZm9ybU9wZXJhdGlvbnMgb3BlcmF0aW9uczsKKyAg
ICBvcGVyYXRpb25zLmFwcGVuZFRyYW5zbGF0ZSgyLCAwLCAwKTsKICAgICBjdXJ2ZS0+YWRkS2V5
ZnJhbWUoQ0NUcmFuc2Zvcm1LZXlmcmFtZTo6Y3JlYXRlKDAsIG9wZXJhdGlvbnMsIG51bGxwdHIp
KTsKIAotICAgIEludFNpemUgbGF5ZXJTaXplOyAvLyBpZ25vcmVkCi0gICAgZXhwZWN0VHJhbnNs
YXRlWCgyLCBjdXJ2ZS0+Z2V0VmFsdWUoLTEsIGxheWVyU2l6ZSkpOwotICAgIGV4cGVjdFRyYW5z
bGF0ZVgoMiwgY3VydmUtPmdldFZhbHVlKDAsIGxheWVyU2l6ZSkpOwotICAgIGV4cGVjdFRyYW5z
bGF0ZVgoMiwgY3VydmUtPmdldFZhbHVlKDAuNSwgbGF5ZXJTaXplKSk7Ci0gICAgZXhwZWN0VHJh
bnNsYXRlWCgyLCBjdXJ2ZS0+Z2V0VmFsdWUoMSwgbGF5ZXJTaXplKSk7Ci0gICAgZXhwZWN0VHJh
bnNsYXRlWCgyLCBjdXJ2ZS0+Z2V0VmFsdWUoMiwgbGF5ZXJTaXplKSk7CisgICAgZXhwZWN0VHJh
bnNsYXRlWCgyLCBjdXJ2ZS0+Z2V0VmFsdWUoLTEpKTsKKyAgICBleHBlY3RUcmFuc2xhdGVYKDIs
IGN1cnZlLT5nZXRWYWx1ZSgwKSk7CisgICAgZXhwZWN0VHJhbnNsYXRlWCgyLCBjdXJ2ZS0+Z2V0
VmFsdWUoMC41KSk7CisgICAgZXhwZWN0VHJhbnNsYXRlWCgyLCBjdXJ2ZS0+Z2V0VmFsdWUoMSkp
OworICAgIGV4cGVjdFRyYW5zbGF0ZVgoMiwgY3VydmUtPmdldFZhbHVlKDIpKTsKIH0KIAogLy8g
VGVzdHMgdGhhdCBhIHRyYW5zZm9ybSBhbmltYXRpb24gd2l0aCB0d28ga2V5ZnJhbWVzIHdvcmtz
IGFzIGV4cGVjdGVkLgogVEVTVChDQ0tleWZyYW1lZEFuaW1hdGlvbkN1cnZlVGVzdCwgVHdvVHJh
bnNmb3JtS2V5ZnJhbWUpCiB7CiAgICAgT3duUHRyPENDS2V5ZnJhbWVkVHJhbnNmb3JtQW5pbWF0
aW9uQ3VydmU+IGN1cnZlKENDS2V5ZnJhbWVkVHJhbnNmb3JtQW5pbWF0aW9uQ3VydmU6OmNyZWF0
ZSgpKTsKLSAgICBUcmFuc2Zvcm1PcGVyYXRpb25zIG9wZXJhdGlvbnMxOwotICAgIG9wZXJhdGlv
bnMxLm9wZXJhdGlvbnMoKS5hcHBlbmQoVHJhbnNsYXRlVHJhbnNmb3JtT3BlcmF0aW9uOjpjcmVh
dGUoTGVuZ3RoKDIsIEZpeGVkKSwgTGVuZ3RoKDAsIEZpeGVkKSwgVHJhbnNmb3JtT3BlcmF0aW9u
OjpUUkFOU0xBVEVfWCkpOwotICAgIFRyYW5zZm9ybU9wZXJhdGlvbnMgb3BlcmF0aW9uczI7Ci0g
ICAgb3BlcmF0aW9uczIub3BlcmF0aW9ucygpLmFwcGVuZChUcmFuc2xhdGVUcmFuc2Zvcm1PcGVy
YXRpb246OmNyZWF0ZShMZW5ndGgoNCwgRml4ZWQpLCBMZW5ndGgoMCwgRml4ZWQpLCBUcmFuc2Zv
cm1PcGVyYXRpb246OlRSQU5TTEFURV9YKSk7CisgICAgV2ViS2l0OjpXZWJUcmFuc2Zvcm1PcGVy
YXRpb25zIG9wZXJhdGlvbnMxOworICAgIG9wZXJhdGlvbnMxLmFwcGVuZFRyYW5zbGF0ZSgyLCAw
LCAwKTsKKyAgICBXZWJLaXQ6OldlYlRyYW5zZm9ybU9wZXJhdGlvbnMgb3BlcmF0aW9uczI7Cisg
ICAgb3BlcmF0aW9uczIuYXBwZW5kVHJhbnNsYXRlKDQsIDAsIDApOworCiAgICAgY3VydmUtPmFk
ZEtleWZyYW1lKENDVHJhbnNmb3JtS2V5ZnJhbWU6OmNyZWF0ZSgwLCBvcGVyYXRpb25zMSwgbnVs
bHB0cikpOwogICAgIGN1cnZlLT5hZGRLZXlmcmFtZShDQ1RyYW5zZm9ybUtleWZyYW1lOjpjcmVh
dGUoMSwgb3BlcmF0aW9uczIsIG51bGxwdHIpKTsKLSAgICBJbnRTaXplIGxheWVyU2l6ZTsgLy8g
aWdub3JlZAotICAgIGV4cGVjdFRyYW5zbGF0ZVgoMiwgY3VydmUtPmdldFZhbHVlKC0xLCBsYXll
clNpemUpKTsKLSAgICBleHBlY3RUcmFuc2xhdGVYKDIsIGN1cnZlLT5nZXRWYWx1ZSgwLCBsYXll
clNpemUpKTsKLSAgICBleHBlY3RUcmFuc2xhdGVYKDMsIGN1cnZlLT5nZXRWYWx1ZSgwLjUsIGxh
eWVyU2l6ZSkpOwotICAgIGV4cGVjdFRyYW5zbGF0ZVgoNCwgY3VydmUtPmdldFZhbHVlKDEsIGxh
eWVyU2l6ZSkpOwotICAgIGV4cGVjdFRyYW5zbGF0ZVgoNCwgY3VydmUtPmdldFZhbHVlKDIsIGxh
eWVyU2l6ZSkpOworICAgIGV4cGVjdFRyYW5zbGF0ZVgoMiwgY3VydmUtPmdldFZhbHVlKC0xKSk7
CisgICAgZXhwZWN0VHJhbnNsYXRlWCgyLCBjdXJ2ZS0+Z2V0VmFsdWUoMCkpOworICAgIGV4cGVj
dFRyYW5zbGF0ZVgoMywgY3VydmUtPmdldFZhbHVlKDAuNSkpOworICAgIGV4cGVjdFRyYW5zbGF0
ZVgoNCwgY3VydmUtPmdldFZhbHVlKDEpKTsKKyAgICBleHBlY3RUcmFuc2xhdGVYKDQsIGN1cnZl
LT5nZXRWYWx1ZSgyKSk7CiB9CiAKIC8vIFRlc3RzIHRoYXQgYSB0cmFuc2Zvcm0gYW5pbWF0aW9u
IHdpdGggdGhyZWUga2V5ZnJhbWVzIHdvcmtzIGFzIGV4cGVjdGVkLgogVEVTVChDQ0tleWZyYW1l
ZEFuaW1hdGlvbkN1cnZlVGVzdCwgVGhyZWVUcmFuc2Zvcm1LZXlmcmFtZSkKIHsKICAgICBPd25Q
dHI8Q0NLZXlmcmFtZWRUcmFuc2Zvcm1BbmltYXRpb25DdXJ2ZT4gY3VydmUoQ0NLZXlmcmFtZWRU
cmFuc2Zvcm1BbmltYXRpb25DdXJ2ZTo6Y3JlYXRlKCkpOwotICAgIFRyYW5zZm9ybU9wZXJhdGlv
bnMgb3BlcmF0aW9uczE7Ci0gICAgb3BlcmF0aW9uczEub3BlcmF0aW9ucygpLmFwcGVuZChUcmFu
c2xhdGVUcmFuc2Zvcm1PcGVyYXRpb246OmNyZWF0ZShMZW5ndGgoMiwgRml4ZWQpLCBMZW5ndGgo
MCwgRml4ZWQpLCBUcmFuc2Zvcm1PcGVyYXRpb246OlRSQU5TTEFURV9YKSk7Ci0gICAgVHJhbnNm
b3JtT3BlcmF0aW9ucyBvcGVyYXRpb25zMjsKLSAgICBvcGVyYXRpb25zMi5vcGVyYXRpb25zKCku
YXBwZW5kKFRyYW5zbGF0ZVRyYW5zZm9ybU9wZXJhdGlvbjo6Y3JlYXRlKExlbmd0aCg0LCBGaXhl
ZCksIExlbmd0aCgwLCBGaXhlZCksIFRyYW5zZm9ybU9wZXJhdGlvbjo6VFJBTlNMQVRFX1gpKTsK
LSAgICBUcmFuc2Zvcm1PcGVyYXRpb25zIG9wZXJhdGlvbnMzOwotICAgIG9wZXJhdGlvbnMzLm9w
ZXJhdGlvbnMoKS5hcHBlbmQoVHJhbnNsYXRlVHJhbnNmb3JtT3BlcmF0aW9uOjpjcmVhdGUoTGVu
Z3RoKDgsIEZpeGVkKSwgTGVuZ3RoKDAsIEZpeGVkKSwgVHJhbnNmb3JtT3BlcmF0aW9uOjpUUkFO
U0xBVEVfWCkpOworICAgIFdlYktpdDo6V2ViVHJhbnNmb3JtT3BlcmF0aW9ucyBvcGVyYXRpb25z
MTsKKyAgICBvcGVyYXRpb25zMS5hcHBlbmRUcmFuc2xhdGUoMiwgMCwgMCk7CisgICAgV2ViS2l0
OjpXZWJUcmFuc2Zvcm1PcGVyYXRpb25zIG9wZXJhdGlvbnMyOworICAgIG9wZXJhdGlvbnMyLmFw
cGVuZFRyYW5zbGF0ZSg0LCAwLCAwKTsKKyAgICBXZWJLaXQ6OldlYlRyYW5zZm9ybU9wZXJhdGlv
bnMgb3BlcmF0aW9uczM7CisgICAgb3BlcmF0aW9uczMuYXBwZW5kVHJhbnNsYXRlKDgsIDAsIDAp
OwogICAgIGN1cnZlLT5hZGRLZXlmcmFtZShDQ1RyYW5zZm9ybUtleWZyYW1lOjpjcmVhdGUoMCwg
b3BlcmF0aW9uczEsIG51bGxwdHIpKTsKICAgICBjdXJ2ZS0+YWRkS2V5ZnJhbWUoQ0NUcmFuc2Zv
cm1LZXlmcmFtZTo6Y3JlYXRlKDEsIG9wZXJhdGlvbnMyLCBudWxscHRyKSk7CiAgICAgY3VydmUt
PmFkZEtleWZyYW1lKENDVHJhbnNmb3JtS2V5ZnJhbWU6OmNyZWF0ZSgyLCBvcGVyYXRpb25zMywg
bnVsbHB0cikpOwotICAgIEludFNpemUgbGF5ZXJTaXplOyAvLyBpZ25vcmVkCi0gICAgZXhwZWN0
VHJhbnNsYXRlWCgyLCBjdXJ2ZS0+Z2V0VmFsdWUoLTEsIGxheWVyU2l6ZSkpOwotICAgIGV4cGVj
dFRyYW5zbGF0ZVgoMiwgY3VydmUtPmdldFZhbHVlKDAsIGxheWVyU2l6ZSkpOwotICAgIGV4cGVj
dFRyYW5zbGF0ZVgoMywgY3VydmUtPmdldFZhbHVlKDAuNSwgbGF5ZXJTaXplKSk7Ci0gICAgZXhw
ZWN0VHJhbnNsYXRlWCg0LCBjdXJ2ZS0+Z2V0VmFsdWUoMSwgbGF5ZXJTaXplKSk7Ci0gICAgZXhw
ZWN0VHJhbnNsYXRlWCg2LCBjdXJ2ZS0+Z2V0VmFsdWUoMS41LCBsYXllclNpemUpKTsKLSAgICBl
eHBlY3RUcmFuc2xhdGVYKDgsIGN1cnZlLT5nZXRWYWx1ZSgyLCBsYXllclNpemUpKTsKLSAgICBl
eHBlY3RUcmFuc2xhdGVYKDgsIGN1cnZlLT5nZXRWYWx1ZSgzLCBsYXllclNpemUpKTsKKyAgICBl
eHBlY3RUcmFuc2xhdGVYKDIsIGN1cnZlLT5nZXRWYWx1ZSgtMSkpOworICAgIGV4cGVjdFRyYW5z
bGF0ZVgoMiwgY3VydmUtPmdldFZhbHVlKDApKTsKKyAgICBleHBlY3RUcmFuc2xhdGVYKDMsIGN1
cnZlLT5nZXRWYWx1ZSgwLjUpKTsKKyAgICBleHBlY3RUcmFuc2xhdGVYKDQsIGN1cnZlLT5nZXRW
YWx1ZSgxKSk7CisgICAgZXhwZWN0VHJhbnNsYXRlWCg2LCBjdXJ2ZS0+Z2V0VmFsdWUoMS41KSk7
CisgICAgZXhwZWN0VHJhbnNsYXRlWCg4LCBjdXJ2ZS0+Z2V0VmFsdWUoMikpOworICAgIGV4cGVj
dFRyYW5zbGF0ZVgoOCwgY3VydmUtPmdldFZhbHVlKDMpKTsKIH0KIAogLy8gVGVzdHMgdGhhdCBh
IHRyYW5zZm9ybSBhbmltYXRpb24gd2l0aCBtdWx0aXBsZSBrZXlzIGF0IGEgZ2l2ZW4gdGltZSB3
b3JrcyBzYW5lbHkuCkBAIC0xNzEsMzIgKzE3MCwzMCBAQCBURVNUKENDS2V5ZnJhbWVkQW5pbWF0
aW9uQ3VydmVUZXN0LCBSZXBlYXRlZFRyYW5zZm9ybUtleVRpbWVzKQogewogICAgIE93blB0cjxD
Q0tleWZyYW1lZFRyYW5zZm9ybUFuaW1hdGlvbkN1cnZlPiBjdXJ2ZShDQ0tleWZyYW1lZFRyYW5z
Zm9ybUFuaW1hdGlvbkN1cnZlOjpjcmVhdGUoKSk7CiAgICAgLy8gQSBzdGVwIGZ1bmN0aW9uLgot
ICAgIFRyYW5zZm9ybU9wZXJhdGlvbnMgb3BlcmF0aW9uczE7Ci0gICAgb3BlcmF0aW9uczEub3Bl
cmF0aW9ucygpLmFwcGVuZChUcmFuc2xhdGVUcmFuc2Zvcm1PcGVyYXRpb246OmNyZWF0ZShMZW5n
dGgoNCwgRml4ZWQpLCBMZW5ndGgoMCwgRml4ZWQpLCBUcmFuc2Zvcm1PcGVyYXRpb246OlRSQU5T
TEFURV9YKSk7Ci0gICAgVHJhbnNmb3JtT3BlcmF0aW9ucyBvcGVyYXRpb25zMjsKLSAgICBvcGVy
YXRpb25zMi5vcGVyYXRpb25zKCkuYXBwZW5kKFRyYW5zbGF0ZVRyYW5zZm9ybU9wZXJhdGlvbjo6
Y3JlYXRlKExlbmd0aCg0LCBGaXhlZCksIExlbmd0aCgwLCBGaXhlZCksIFRyYW5zZm9ybU9wZXJh
dGlvbjo6VFJBTlNMQVRFX1gpKTsKLSAgICBUcmFuc2Zvcm1PcGVyYXRpb25zIG9wZXJhdGlvbnMz
OwotICAgIG9wZXJhdGlvbnMzLm9wZXJhdGlvbnMoKS5hcHBlbmQoVHJhbnNsYXRlVHJhbnNmb3Jt
T3BlcmF0aW9uOjpjcmVhdGUoTGVuZ3RoKDYsIEZpeGVkKSwgTGVuZ3RoKDAsIEZpeGVkKSwgVHJh
bnNmb3JtT3BlcmF0aW9uOjpUUkFOU0xBVEVfWCkpOwotICAgIFRyYW5zZm9ybU9wZXJhdGlvbnMg
b3BlcmF0aW9uczQ7Ci0gICAgb3BlcmF0aW9uczQub3BlcmF0aW9ucygpLmFwcGVuZChUcmFuc2xh
dGVUcmFuc2Zvcm1PcGVyYXRpb246OmNyZWF0ZShMZW5ndGgoNiwgRml4ZWQpLCBMZW5ndGgoMCwg
Rml4ZWQpLCBUcmFuc2Zvcm1PcGVyYXRpb246OlRSQU5TTEFURV9YKSk7CisgICAgV2ViS2l0OjpX
ZWJUcmFuc2Zvcm1PcGVyYXRpb25zIG9wZXJhdGlvbnMxOworICAgIG9wZXJhdGlvbnMxLmFwcGVu
ZFRyYW5zbGF0ZSg0LCAwLCAwKTsKKyAgICBXZWJLaXQ6OldlYlRyYW5zZm9ybU9wZXJhdGlvbnMg
b3BlcmF0aW9uczI7CisgICAgb3BlcmF0aW9uczIuYXBwZW5kVHJhbnNsYXRlKDQsIDAsIDApOwor
ICAgIFdlYktpdDo6V2ViVHJhbnNmb3JtT3BlcmF0aW9ucyBvcGVyYXRpb25zMzsKKyAgICBvcGVy
YXRpb25zMy5hcHBlbmRUcmFuc2xhdGUoNiwgMCwgMCk7CisgICAgV2ViS2l0OjpXZWJUcmFuc2Zv
cm1PcGVyYXRpb25zIG9wZXJhdGlvbnM0OworICAgIG9wZXJhdGlvbnM0LmFwcGVuZFRyYW5zbGF0
ZSg2LCAwLCAwKTsKICAgICBjdXJ2ZS0+YWRkS2V5ZnJhbWUoQ0NUcmFuc2Zvcm1LZXlmcmFtZTo6
Y3JlYXRlKDAsIG9wZXJhdGlvbnMxLCBudWxscHRyKSk7CiAgICAgY3VydmUtPmFkZEtleWZyYW1l
KENDVHJhbnNmb3JtS2V5ZnJhbWU6OmNyZWF0ZSgxLCBvcGVyYXRpb25zMiwgbnVsbHB0cikpOwog
ICAgIGN1cnZlLT5hZGRLZXlmcmFtZShDQ1RyYW5zZm9ybUtleWZyYW1lOjpjcmVhdGUoMSwgb3Bl
cmF0aW9uczMsIG51bGxwdHIpKTsKICAgICBjdXJ2ZS0+YWRkS2V5ZnJhbWUoQ0NUcmFuc2Zvcm1L
ZXlmcmFtZTo6Y3JlYXRlKDIsIG9wZXJhdGlvbnM0LCBudWxscHRyKSk7CiAKLSAgICBJbnRTaXpl
IGxheWVyU2l6ZTsgLy8gaWdub3JlZAotCi0gICAgZXhwZWN0VHJhbnNsYXRlWCg0LCBjdXJ2ZS0+
Z2V0VmFsdWUoLTEsIGxheWVyU2l6ZSkpOwotICAgIGV4cGVjdFRyYW5zbGF0ZVgoNCwgY3VydmUt
PmdldFZhbHVlKDAsIGxheWVyU2l6ZSkpOwotICAgIGV4cGVjdFRyYW5zbGF0ZVgoNCwgY3VydmUt
PmdldFZhbHVlKDAuNSwgbGF5ZXJTaXplKSk7CisgICAgZXhwZWN0VHJhbnNsYXRlWCg0LCBjdXJ2
ZS0+Z2V0VmFsdWUoLTEpKTsKKyAgICBleHBlY3RUcmFuc2xhdGVYKDQsIGN1cnZlLT5nZXRWYWx1
ZSgwKSk7CisgICAgZXhwZWN0VHJhbnNsYXRlWCg0LCBjdXJ2ZS0+Z2V0VmFsdWUoMC41KSk7CiAK
ICAgICAvLyBUaGVyZSBpcyBhIGRpc2NvbnRpbnVpdHkgYXQgMS4gQW55IHZhbHVlIGJldHdlZW4g
NCBhbmQgNiBpcyB2YWxpZC4KLSAgICBXZWJUcmFuc2Zvcm1hdGlvbk1hdHJpeCB2YWx1ZSA9IGN1
cnZlLT5nZXRWYWx1ZSgxLCBsYXllclNpemUpOworICAgIFdlYlRyYW5zZm9ybWF0aW9uTWF0cml4
IHZhbHVlID0gY3VydmUtPmdldFZhbHVlKDEpOwogICAgIEVYUEVDVF9UUlVFKHZhbHVlLm00MSgp
ID49IDQgJiYgdmFsdWUubTQxKCkgPD0gNik7CiAKLSAgICBleHBlY3RUcmFuc2xhdGVYKDYsIGN1
cnZlLT5nZXRWYWx1ZSgxLjUsIGxheWVyU2l6ZSkpOwotICAgIGV4cGVjdFRyYW5zbGF0ZVgoNiwg
Y3VydmUtPmdldFZhbHVlKDIsIGxheWVyU2l6ZSkpOwotICAgIGV4cGVjdFRyYW5zbGF0ZVgoNiwg
Y3VydmUtPmdldFZhbHVlKDMsIGxheWVyU2l6ZSkpOworICAgIGV4cGVjdFRyYW5zbGF0ZVgoNiwg
Y3VydmUtPmdldFZhbHVlKDEuNSkpOworICAgIGV4cGVjdFRyYW5zbGF0ZVgoNiwgY3VydmUtPmdl
dFZhbHVlKDIpKTsKKyAgICBleHBlY3RUcmFuc2xhdGVYKDYsIGN1cnZlLT5nZXRWYWx1ZSgzKSk7
CiB9CiAKIC8vIFRlc3RzIHRoYXQgdGhlIGtleWZyYW1lcyBtYXkgYmUgYWRkZWQgb3V0IG9mIG9y
ZGVyLgpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYktpdC9jaHJvbWl1bS90ZXN0cy9DQ0xheWVyQW5p
bWF0aW9uQ29udHJvbGxlclRlc3QuY3BwIGIvU291cmNlL1dlYktpdC9jaHJvbWl1bS90ZXN0cy9D
Q0xheWVyQW5pbWF0aW9uQ29udHJvbGxlclRlc3QuY3BwCmluZGV4IGRiZWQwMmM3NDliOWU3YWRl
MzNhNjU1YWRhZTQ2Y2EyOGFlZmIwM2QuLjcyMzYxMDkyYWYyMjg3ZTdkZjdiMjU1NjY0Y2YwMjk0
MTNiODJhMDEgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJLaXQvY2hyb21pdW0vdGVzdHMvQ0NMYXll
ckFuaW1hdGlvbkNvbnRyb2xsZXJUZXN0LmNwcAorKysgYi9Tb3VyY2UvV2ViS2l0L2Nocm9taXVt
L3Rlc3RzL0NDTGF5ZXJBbmltYXRpb25Db250cm9sbGVyVGVzdC5jcHAKQEAgLTI5LDcgKzI5LDYg
QEAKICNpbmNsdWRlICJDQ0FuaW1hdGlvblRlc3RDb21tb24uaCIKICNpbmNsdWRlICJHcmFwaGlj
c0xheWVyLmgiCiAjaW5jbHVkZSAiTGVuZ3RoLmgiCi0jaW5jbHVkZSAiVHJhbnNsYXRlVHJhbnNm
b3JtT3BlcmF0aW9uLmgiCiAjaW5jbHVkZSAiY2MvQ0NBY3RpdmVBbmltYXRpb24uaCIKICNpbmNs
dWRlICJjYy9DQ0FuaW1hdGlvbkN1cnZlLmgiCiAKQEAgLTU0LDE5NyArNTMsNiBAQCBQYXNzT3du
UHRyPENDQWN0aXZlQW5pbWF0aW9uPiBjcmVhdGVBY3RpdmVBbmltYXRpb24oUGFzc093blB0cjxD
Q0FuaW1hdGlvbkN1cnZlPgogICAgIHJldHVybiBDQ0FjdGl2ZUFuaW1hdGlvbjo6Y3JlYXRlKGN1
cnZlLCAwLCBpZCwgcHJvcGVydHkpOwogfQogCi1URVNUKENDTGF5ZXJBbmltYXRpb25Db250cm9s
bGVyVGVzdCwgY3JlYXRlT3BhY2l0eUFuaW1hdGlvbikKLXsKLSAgICBGYWtlTGF5ZXJBbmltYXRp
b25Db250cm9sbGVyQ2xpZW50IGR1bW15OwotICAgIE93blB0cjxDQ0xheWVyQW5pbWF0aW9uQ29u
dHJvbGxlcj4gY29udHJvbGxlcihDQ0xheWVyQW5pbWF0aW9uQ29udHJvbGxlcjo6Y3JlYXRlKCZk
dW1teSkpOwotICAgIGNvbnN0IGRvdWJsZSBkdXJhdGlvbiA9IDE7Ci0gICAgV2ViQ29yZTo6S2V5
ZnJhbWVWYWx1ZUxpc3QgdmFsdWVzKEFuaW1hdGVkUHJvcGVydHlPcGFjaXR5KTsKLSAgICB2YWx1
ZXMuaW5zZXJ0KG5ldyBGbG9hdEFuaW1hdGlvblZhbHVlKDAsIDApKTsKLSAgICB2YWx1ZXMuaW5z
ZXJ0KG5ldyBGbG9hdEFuaW1hdGlvblZhbHVlKGR1cmF0aW9uLCAxKSk7Ci0KLSAgICBSZWZQdHI8
QW5pbWF0aW9uPiBhbmltYXRpb24gPSBBbmltYXRpb246OmNyZWF0ZSgpOwotICAgIGFuaW1hdGlv
bi0+c2V0RHVyYXRpb24oZHVyYXRpb24pOwotCi0gICAgSW50U2l6ZSBib3hTaXplOwotICAgIGNv
bnRyb2xsZXItPmFkZEFuaW1hdGlvbih2YWx1ZXMsIGJveFNpemUsIGFuaW1hdGlvbi5nZXQoKSwg
MCwgMCwgMCk7Ci0KLSAgICBFWFBFQ1RfVFJVRShjb250cm9sbGVyLT5oYXNBY3RpdmVBbmltYXRp
b24oKSk7Ci0KLSAgICBDQ0FjdGl2ZUFuaW1hdGlvbiogYWN0aXZlQW5pbWF0aW9uID0gY29udHJv
bGxlci0+Z2V0QWN0aXZlQW5pbWF0aW9uKDAsIENDQWN0aXZlQW5pbWF0aW9uOjpPcGFjaXR5KTsK
LSAgICBFWFBFQ1RfVFJVRShhY3RpdmVBbmltYXRpb24pOwotCi0gICAgRVhQRUNUX0VRKDEsIGFj
dGl2ZUFuaW1hdGlvbi0+aXRlcmF0aW9ucygpKTsKLSAgICBFWFBFQ1RfRVEoQ0NBY3RpdmVBbmlt
YXRpb246Ok9wYWNpdHksIGFjdGl2ZUFuaW1hdGlvbi0+dGFyZ2V0UHJvcGVydHkoKSk7Ci0KLSAg
ICBFWFBFQ1RfRVEoQ0NBbmltYXRpb25DdXJ2ZTo6RmxvYXQsIGFjdGl2ZUFuaW1hdGlvbi0+Y3Vy
dmUoKS0+dHlwZSgpKTsKLQotICAgIGNvbnN0IENDRmxvYXRBbmltYXRpb25DdXJ2ZSogY3VydmUg
PSBhY3RpdmVBbmltYXRpb24tPmN1cnZlKCktPnRvRmxvYXRBbmltYXRpb25DdXJ2ZSgpOwotICAg
IEVYUEVDVF9UUlVFKGN1cnZlKTsKLQotICAgIEVYUEVDVF9FUSgwLCBjdXJ2ZS0+Z2V0VmFsdWUo
MCkpOwotICAgIEVYUEVDVF9FUSgxLCBjdXJ2ZS0+Z2V0VmFsdWUoZHVyYXRpb24pKTsKLX0KLQot
VEVTVChDQ0xheWVyQW5pbWF0aW9uQ29udHJvbGxlclRlc3QsIGNyZWF0ZVRyYW5zZm9ybUFuaW1h
dGlvbikKLXsKLSAgICBGYWtlTGF5ZXJBbmltYXRpb25Db250cm9sbGVyQ2xpZW50IGR1bW15Owot
ICAgIE93blB0cjxDQ0xheWVyQW5pbWF0aW9uQ29udHJvbGxlcj4gY29udHJvbGxlcihDQ0xheWVy
QW5pbWF0aW9uQ29udHJvbGxlcjo6Y3JlYXRlKCZkdW1teSkpOwotICAgIGNvbnN0IGRvdWJsZSBk
dXJhdGlvbiA9IDE7Ci0gICAgV2ViQ29yZTo6S2V5ZnJhbWVWYWx1ZUxpc3QgdmFsdWVzKEFuaW1h
dGVkUHJvcGVydHlXZWJraXRUcmFuc2Zvcm0pOwotCi0gICAgVHJhbnNmb3JtT3BlcmF0aW9ucyBv
cGVyYXRpb25zMTsKLSAgICBvcGVyYXRpb25zMS5vcGVyYXRpb25zKCkuYXBwZW5kKFRyYW5zbGF0
ZVRyYW5zZm9ybU9wZXJhdGlvbjo6Y3JlYXRlKExlbmd0aCgyLCBGaXhlZCksIExlbmd0aCgwLCBG
aXhlZCksIFRyYW5zZm9ybU9wZXJhdGlvbjo6VFJBTlNMQVRFX1gpKTsKLSAgICB2YWx1ZXMuaW5z
ZXJ0KG5ldyBUcmFuc2Zvcm1BbmltYXRpb25WYWx1ZSgwLCAmb3BlcmF0aW9uczEpKTsKLQotICAg
IFRyYW5zZm9ybU9wZXJhdGlvbnMgb3BlcmF0aW9uczI7Ci0gICAgb3BlcmF0aW9uczIub3BlcmF0
aW9ucygpLmFwcGVuZChUcmFuc2xhdGVUcmFuc2Zvcm1PcGVyYXRpb246OmNyZWF0ZShMZW5ndGgo
NCwgRml4ZWQpLCBMZW5ndGgoMCwgRml4ZWQpLCBUcmFuc2Zvcm1PcGVyYXRpb246OlRSQU5TTEFU
RV9YKSk7Ci0gICAgdmFsdWVzLmluc2VydChuZXcgVHJhbnNmb3JtQW5pbWF0aW9uVmFsdWUoZHVy
YXRpb24sICZvcGVyYXRpb25zMikpOwotCi0gICAgUmVmUHRyPEFuaW1hdGlvbj4gYW5pbWF0aW9u
ID0gQW5pbWF0aW9uOjpjcmVhdGUoKTsKLSAgICBhbmltYXRpb24tPnNldER1cmF0aW9uKGR1cmF0
aW9uKTsKLQotICAgIEludFNpemUgYm94U2l6ZTsKLSAgICBjb250cm9sbGVyLT5hZGRBbmltYXRp
b24odmFsdWVzLCBib3hTaXplLCBhbmltYXRpb24uZ2V0KCksIDAsIDAsIDApOwotCi0gICAgRVhQ
RUNUX1RSVUUoY29udHJvbGxlci0+aGFzQWN0aXZlQW5pbWF0aW9uKCkpOwotCi0gICAgQ0NBY3Rp
dmVBbmltYXRpb24qIGFjdGl2ZUFuaW1hdGlvbiA9IGNvbnRyb2xsZXItPmdldEFjdGl2ZUFuaW1h
dGlvbigwLCBDQ0FjdGl2ZUFuaW1hdGlvbjo6VHJhbnNmb3JtKTsKLSAgICBFWFBFQ1RfVFJVRShh
Y3RpdmVBbmltYXRpb24pOwotCi0gICAgRVhQRUNUX0VRKDEsIGFjdGl2ZUFuaW1hdGlvbi0+aXRl
cmF0aW9ucygpKTsKLSAgICBFWFBFQ1RfRVEoQ0NBY3RpdmVBbmltYXRpb246OlRyYW5zZm9ybSwg
YWN0aXZlQW5pbWF0aW9uLT50YXJnZXRQcm9wZXJ0eSgpKTsKLQotICAgIEVYUEVDVF9FUShDQ0Fu
aW1hdGlvbkN1cnZlOjpUcmFuc2Zvcm0sIGFjdGl2ZUFuaW1hdGlvbi0+Y3VydmUoKS0+dHlwZSgp
KTsKLQotICAgIGNvbnN0IENDVHJhbnNmb3JtQW5pbWF0aW9uQ3VydmUqIGN1cnZlID0gYWN0aXZl
QW5pbWF0aW9uLT5jdXJ2ZSgpLT50b1RyYW5zZm9ybUFuaW1hdGlvbkN1cnZlKCk7Ci0gICAgRVhQ
RUNUX1RSVUUoY3VydmUpOwotCi0gICAgZXhwZWN0VHJhbnNsYXRlWCgyLCBjdXJ2ZS0+Z2V0VmFs
dWUoMCwgYm94U2l6ZSkpOwotICAgIGV4cGVjdFRyYW5zbGF0ZVgoNCwgY3VydmUtPmdldFZhbHVl
KGR1cmF0aW9uLCBib3hTaXplKSk7Ci19Ci0KLVRFU1QoQ0NMYXllckFuaW1hdGlvbkNvbnRyb2xs
ZXJUZXN0LCBjcmVhdGVSZXZlcnNlZEFuaW1hdGlvbikKLXsKLSAgICBGYWtlTGF5ZXJBbmltYXRp
b25Db250cm9sbGVyQ2xpZW50IGR1bW15OwotICAgIE93blB0cjxDQ0xheWVyQW5pbWF0aW9uQ29u
dHJvbGxlcj4gY29udHJvbGxlcihDQ0xheWVyQW5pbWF0aW9uQ29udHJvbGxlcjo6Y3JlYXRlKCZk
dW1teSkpOwotICAgIGNvbnN0IGRvdWJsZSBkdXJhdGlvbiA9IDE7Ci0gICAgV2ViQ29yZTo6S2V5
ZnJhbWVWYWx1ZUxpc3QgdmFsdWVzKEFuaW1hdGVkUHJvcGVydHlXZWJraXRUcmFuc2Zvcm0pOwot
Ci0gICAgVHJhbnNmb3JtT3BlcmF0aW9ucyBvcGVyYXRpb25zMTsKLSAgICBvcGVyYXRpb25zMS5v
cGVyYXRpb25zKCkuYXBwZW5kKFRyYW5zbGF0ZVRyYW5zZm9ybU9wZXJhdGlvbjo6Y3JlYXRlKExl
bmd0aCgyLCBGaXhlZCksIExlbmd0aCgwLCBGaXhlZCksIFRyYW5zZm9ybU9wZXJhdGlvbjo6VFJB
TlNMQVRFX1gpKTsKLSAgICB2YWx1ZXMuaW5zZXJ0KG5ldyBUcmFuc2Zvcm1BbmltYXRpb25WYWx1
ZSgwLCAmb3BlcmF0aW9uczEpKTsKLQotICAgIFRyYW5zZm9ybU9wZXJhdGlvbnMgb3BlcmF0aW9u
czI7Ci0gICAgb3BlcmF0aW9uczIub3BlcmF0aW9ucygpLmFwcGVuZChUcmFuc2xhdGVUcmFuc2Zv
cm1PcGVyYXRpb246OmNyZWF0ZShMZW5ndGgoNCwgRml4ZWQpLCBMZW5ndGgoMCwgRml4ZWQpLCBU
cmFuc2Zvcm1PcGVyYXRpb246OlRSQU5TTEFURV9YKSk7Ci0gICAgdmFsdWVzLmluc2VydChuZXcg
VHJhbnNmb3JtQW5pbWF0aW9uVmFsdWUoZHVyYXRpb24sICZvcGVyYXRpb25zMikpOwotCi0gICAg
UmVmUHRyPEFuaW1hdGlvbj4gYW5pbWF0aW9uID0gQW5pbWF0aW9uOjpjcmVhdGUoKTsKLSAgICBh
bmltYXRpb24tPnNldER1cmF0aW9uKGR1cmF0aW9uKTsKLSAgICBhbmltYXRpb24tPnNldERpcmVj
dGlvbihBbmltYXRpb246OkFuaW1hdGlvbkRpcmVjdGlvblJldmVyc2UpOwotCi0gICAgSW50U2l6
ZSBib3hTaXplOwotICAgIGNvbnRyb2xsZXItPmFkZEFuaW1hdGlvbih2YWx1ZXMsIGJveFNpemUs
IGFuaW1hdGlvbi5nZXQoKSwgMCwgMCwgMCk7Ci0KLSAgICBFWFBFQ1RfVFJVRShjb250cm9sbGVy
LT5oYXNBY3RpdmVBbmltYXRpb24oKSk7Ci0KLSAgICBDQ0FjdGl2ZUFuaW1hdGlvbiogYWN0aXZl
QW5pbWF0aW9uID0gY29udHJvbGxlci0+Z2V0QWN0aXZlQW5pbWF0aW9uKDAsIENDQWN0aXZlQW5p
bWF0aW9uOjpUcmFuc2Zvcm0pOwotICAgIEVYUEVDVF9UUlVFKGFjdGl2ZUFuaW1hdGlvbik7Ci0K
LSAgICBFWFBFQ1RfRVEoMSwgYWN0aXZlQW5pbWF0aW9uLT5pdGVyYXRpb25zKCkpOwotICAgIEVY
UEVDVF9FUShDQ0FjdGl2ZUFuaW1hdGlvbjo6VHJhbnNmb3JtLCBhY3RpdmVBbmltYXRpb24tPnRh
cmdldFByb3BlcnR5KCkpOwotCi0gICAgRVhQRUNUX0VRKENDQW5pbWF0aW9uQ3VydmU6OlRyYW5z
Zm9ybSwgYWN0aXZlQW5pbWF0aW9uLT5jdXJ2ZSgpLT50eXBlKCkpOwotCi0gICAgY29uc3QgQ0NU
cmFuc2Zvcm1BbmltYXRpb25DdXJ2ZSogY3VydmUgPSBhY3RpdmVBbmltYXRpb24tPmN1cnZlKCkt
PnRvVHJhbnNmb3JtQW5pbWF0aW9uQ3VydmUoKTsKLSAgICBFWFBFQ1RfVFJVRShjdXJ2ZSk7Ci0K
LSAgICBleHBlY3RUcmFuc2xhdGVYKDQsIGN1cnZlLT5nZXRWYWx1ZSgwLCBib3hTaXplKSk7Ci0g
ICAgZXhwZWN0VHJhbnNsYXRlWCgyLCBjdXJ2ZS0+Z2V0VmFsdWUoZHVyYXRpb24sIGJveFNpemUp
KTsKLX0KLQotVEVTVChDQ0xheWVyQW5pbWF0aW9uQ29udHJvbGxlclRlc3QsIGNyZWF0ZUFsdGVy
bmF0aW5nQW5pbWF0aW9uKQotewotICAgIEZha2VMYXllckFuaW1hdGlvbkNvbnRyb2xsZXJDbGll
bnQgZHVtbXk7Ci0gICAgT3duUHRyPENDTGF5ZXJBbmltYXRpb25Db250cm9sbGVyPiBjb250cm9s
bGVyKENDTGF5ZXJBbmltYXRpb25Db250cm9sbGVyOjpjcmVhdGUoJmR1bW15KSk7Ci0gICAgY29u
c3QgZG91YmxlIGR1cmF0aW9uID0gMTsKLSAgICBXZWJDb3JlOjpLZXlmcmFtZVZhbHVlTGlzdCB2
YWx1ZXMoQW5pbWF0ZWRQcm9wZXJ0eVdlYmtpdFRyYW5zZm9ybSk7Ci0KLSAgICBUcmFuc2Zvcm1P
cGVyYXRpb25zIG9wZXJhdGlvbnMxOwotICAgIG9wZXJhdGlvbnMxLm9wZXJhdGlvbnMoKS5hcHBl
bmQoVHJhbnNsYXRlVHJhbnNmb3JtT3BlcmF0aW9uOjpjcmVhdGUoTGVuZ3RoKDIsIEZpeGVkKSwg
TGVuZ3RoKDAsIEZpeGVkKSwgVHJhbnNmb3JtT3BlcmF0aW9uOjpUUkFOU0xBVEVfWCkpOwotICAg
IHZhbHVlcy5pbnNlcnQobmV3IFRyYW5zZm9ybUFuaW1hdGlvblZhbHVlKDAsICZvcGVyYXRpb25z
MSkpOwotCi0gICAgVHJhbnNmb3JtT3BlcmF0aW9ucyBvcGVyYXRpb25zMjsKLSAgICBvcGVyYXRp
b25zMi5vcGVyYXRpb25zKCkuYXBwZW5kKFRyYW5zbGF0ZVRyYW5zZm9ybU9wZXJhdGlvbjo6Y3Jl
YXRlKExlbmd0aCg0LCBGaXhlZCksIExlbmd0aCgwLCBGaXhlZCksIFRyYW5zZm9ybU9wZXJhdGlv
bjo6VFJBTlNMQVRFX1gpKTsKLSAgICB2YWx1ZXMuaW5zZXJ0KG5ldyBUcmFuc2Zvcm1BbmltYXRp
b25WYWx1ZShkdXJhdGlvbiwgJm9wZXJhdGlvbnMyKSk7Ci0KLSAgICBSZWZQdHI8QW5pbWF0aW9u
PiBhbmltYXRpb24gPSBBbmltYXRpb246OmNyZWF0ZSgpOwotICAgIGFuaW1hdGlvbi0+c2V0RHVy
YXRpb24oZHVyYXRpb24pOwotICAgIGFuaW1hdGlvbi0+c2V0RGlyZWN0aW9uKEFuaW1hdGlvbjo6
QW5pbWF0aW9uRGlyZWN0aW9uQWx0ZXJuYXRlKTsKLSAgICBhbmltYXRpb24tPnNldEl0ZXJhdGlv
bkNvdW50KDIpOwotCi0gICAgSW50U2l6ZSBib3hTaXplOwotICAgIGNvbnRyb2xsZXItPmFkZEFu
aW1hdGlvbih2YWx1ZXMsIGJveFNpemUsIGFuaW1hdGlvbi5nZXQoKSwgMCwgMCwgMCk7Ci0KLSAg
ICBFWFBFQ1RfVFJVRShjb250cm9sbGVyLT5oYXNBY3RpdmVBbmltYXRpb24oKSk7Ci0KLSAgICBD
Q0FjdGl2ZUFuaW1hdGlvbiogYWN0aXZlQW5pbWF0aW9uID0gY29udHJvbGxlci0+Z2V0QWN0aXZl
QW5pbWF0aW9uKDAsIENDQWN0aXZlQW5pbWF0aW9uOjpUcmFuc2Zvcm0pOwotICAgIEVYUEVDVF9U
UlVFKGFjdGl2ZUFuaW1hdGlvbik7Ci0gICAgRVhQRUNUX1RSVUUoYWN0aXZlQW5pbWF0aW9uLT5h
bHRlcm5hdGVzRGlyZWN0aW9uKCkpOwotCi0gICAgRVhQRUNUX0VRKDIsIGFjdGl2ZUFuaW1hdGlv
bi0+aXRlcmF0aW9ucygpKTsKLSAgICBFWFBFQ1RfRVEoQ0NBY3RpdmVBbmltYXRpb246OlRyYW5z
Zm9ybSwgYWN0aXZlQW5pbWF0aW9uLT50YXJnZXRQcm9wZXJ0eSgpKTsKLQotICAgIEVYUEVDVF9F
UShDQ0FuaW1hdGlvbkN1cnZlOjpUcmFuc2Zvcm0sIGFjdGl2ZUFuaW1hdGlvbi0+Y3VydmUoKS0+
dHlwZSgpKTsKLQotICAgIGNvbnN0IENDVHJhbnNmb3JtQW5pbWF0aW9uQ3VydmUqIGN1cnZlID0g
YWN0aXZlQW5pbWF0aW9uLT5jdXJ2ZSgpLT50b1RyYW5zZm9ybUFuaW1hdGlvbkN1cnZlKCk7Ci0g
ICAgRVhQRUNUX1RSVUUoY3VydmUpOwotCi0gICAgZXhwZWN0VHJhbnNsYXRlWCgyLCBjdXJ2ZS0+
Z2V0VmFsdWUoMCwgYm94U2l6ZSkpOwotICAgIGV4cGVjdFRyYW5zbGF0ZVgoNCwgY3VydmUtPmdl
dFZhbHVlKGR1cmF0aW9uLCBib3hTaXplKSk7Ci19Ci0KLVRFU1QoQ0NMYXllckFuaW1hdGlvbkNv
bnRyb2xsZXJUZXN0LCBjcmVhdGVSZXZlcnNlZEFsdGVybmF0aW5nQW5pbWF0aW9uKQotewotICAg
IEZha2VMYXllckFuaW1hdGlvbkNvbnRyb2xsZXJDbGllbnQgZHVtbXk7Ci0gICAgT3duUHRyPEND
TGF5ZXJBbmltYXRpb25Db250cm9sbGVyPiBjb250cm9sbGVyKENDTGF5ZXJBbmltYXRpb25Db250
cm9sbGVyOjpjcmVhdGUoJmR1bW15KSk7Ci0gICAgY29uc3QgZG91YmxlIGR1cmF0aW9uID0gMTsK
LSAgICBXZWJDb3JlOjpLZXlmcmFtZVZhbHVlTGlzdCB2YWx1ZXMoQW5pbWF0ZWRQcm9wZXJ0eVdl
YmtpdFRyYW5zZm9ybSk7Ci0KLSAgICBUcmFuc2Zvcm1PcGVyYXRpb25zIG9wZXJhdGlvbnMxOwot
ICAgIG9wZXJhdGlvbnMxLm9wZXJhdGlvbnMoKS5hcHBlbmQoVHJhbnNsYXRlVHJhbnNmb3JtT3Bl
cmF0aW9uOjpjcmVhdGUoTGVuZ3RoKDIsIEZpeGVkKSwgTGVuZ3RoKDAsIEZpeGVkKSwgVHJhbnNm
b3JtT3BlcmF0aW9uOjpUUkFOU0xBVEVfWCkpOwotICAgIHZhbHVlcy5pbnNlcnQobmV3IFRyYW5z
Zm9ybUFuaW1hdGlvblZhbHVlKDAsICZvcGVyYXRpb25zMSkpOwotCi0gICAgVHJhbnNmb3JtT3Bl
cmF0aW9ucyBvcGVyYXRpb25zMjsKLSAgICBvcGVyYXRpb25zMi5vcGVyYXRpb25zKCkuYXBwZW5k
KFRyYW5zbGF0ZVRyYW5zZm9ybU9wZXJhdGlvbjo6Y3JlYXRlKExlbmd0aCg0LCBGaXhlZCksIExl
bmd0aCgwLCBGaXhlZCksIFRyYW5zZm9ybU9wZXJhdGlvbjo6VFJBTlNMQVRFX1gpKTsKLSAgICB2
YWx1ZXMuaW5zZXJ0KG5ldyBUcmFuc2Zvcm1BbmltYXRpb25WYWx1ZShkdXJhdGlvbiwgJm9wZXJh
dGlvbnMyKSk7Ci0KLSAgICBSZWZQdHI8QW5pbWF0aW9uPiBhbmltYXRpb24gPSBBbmltYXRpb246
OmNyZWF0ZSgpOwotICAgIGFuaW1hdGlvbi0+c2V0RHVyYXRpb24oZHVyYXRpb24pOwotICAgIGFu
aW1hdGlvbi0+c2V0RGlyZWN0aW9uKEFuaW1hdGlvbjo6QW5pbWF0aW9uRGlyZWN0aW9uQWx0ZXJu
YXRlUmV2ZXJzZSk7Ci0gICAgYW5pbWF0aW9uLT5zZXRJdGVyYXRpb25Db3VudCgyKTsKLQotICAg
IEludFNpemUgYm94U2l6ZTsKLSAgICBjb250cm9sbGVyLT5hZGRBbmltYXRpb24odmFsdWVzLCBi
b3hTaXplLCBhbmltYXRpb24uZ2V0KCksIDAsIDAsIDApOwotCi0gICAgRVhQRUNUX1RSVUUoY29u
dHJvbGxlci0+aGFzQWN0aXZlQW5pbWF0aW9uKCkpOwotCi0gICAgQ0NBY3RpdmVBbmltYXRpb24q
IGFjdGl2ZUFuaW1hdGlvbiA9IGNvbnRyb2xsZXItPmdldEFjdGl2ZUFuaW1hdGlvbigwLCBDQ0Fj
dGl2ZUFuaW1hdGlvbjo6VHJhbnNmb3JtKTsKLSAgICBFWFBFQ1RfVFJVRShhY3RpdmVBbmltYXRp
b24pOwotICAgIEVYUEVDVF9UUlVFKGFjdGl2ZUFuaW1hdGlvbi0+YWx0ZXJuYXRlc0RpcmVjdGlv
bigpKTsKLQotICAgIEVYUEVDVF9FUSgyLCBhY3RpdmVBbmltYXRpb24tPml0ZXJhdGlvbnMoKSk7
Ci0gICAgRVhQRUNUX0VRKENDQWN0aXZlQW5pbWF0aW9uOjpUcmFuc2Zvcm0sIGFjdGl2ZUFuaW1h
dGlvbi0+dGFyZ2V0UHJvcGVydHkoKSk7Ci0KLSAgICBFWFBFQ1RfRVEoQ0NBbmltYXRpb25DdXJ2
ZTo6VHJhbnNmb3JtLCBhY3RpdmVBbmltYXRpb24tPmN1cnZlKCktPnR5cGUoKSk7Ci0KLSAgICBj
b25zdCBDQ1RyYW5zZm9ybUFuaW1hdGlvbkN1cnZlKiBjdXJ2ZSA9IGFjdGl2ZUFuaW1hdGlvbi0+
Y3VydmUoKS0+dG9UcmFuc2Zvcm1BbmltYXRpb25DdXJ2ZSgpOwotICAgIEVYUEVDVF9UUlVFKGN1
cnZlKTsKLQotICAgIGV4cGVjdFRyYW5zbGF0ZVgoNCwgY3VydmUtPmdldFZhbHVlKDAsIGJveFNp
emUpKTsKLSAgICBleHBlY3RUcmFuc2xhdGVYKDIsIGN1cnZlLT5nZXRWYWx1ZShkdXJhdGlvbiwg
Ym94U2l6ZSkpOwotfQotCiBURVNUKENDTGF5ZXJBbmltYXRpb25Db250cm9sbGVyVGVzdCwgc3lu
Y05ld0FuaW1hdGlvbikKIHsKICAgICBGYWtlTGF5ZXJBbmltYXRpb25Db250cm9sbGVyQ2xpZW50
IGR1bW15SW1wbDsKQEAgLTMzMyw3ICsxNDEsNiBAQCBURVNUKENDTGF5ZXJBbmltYXRpb25Db250
cm9sbGVyVGVzdCwgc3luY1BhdXNlQW5kUmVzdW1lKQogICAgIEVYUEVDVF9FUShDQ0FjdGl2ZUFu
aW1hdGlvbjo6UnVubmluZywgY29udHJvbGxlckltcGwtPmdldEFjdGl2ZUFuaW1hdGlvbigwLCBD
Q0FjdGl2ZUFuaW1hdGlvbjo6T3BhY2l0eSktPnJ1blN0YXRlKCkpOwogfQogCi0KIFRFU1QoQ0NM
YXllckFuaW1hdGlvbkNvbnRyb2xsZXJUZXN0LCBkb05vdFN5bmNGaW5pc2hlZEFuaW1hdGlvbikK
IHsKICAgICBGYWtlTGF5ZXJBbmltYXRpb25Db250cm9sbGVyQ2xpZW50IGR1bW15SW1wbDsKQEAg
LTM3NSw3ICsxODIsNyBAQCBURVNUKENDTGF5ZXJBbmltYXRpb25Db250cm9sbGVyVGVzdCwgVHJp
dmlhbFRyYW5zaXRpb24pCiAKICAgICBPd25QdHI8Q0NBY3RpdmVBbmltYXRpb24+IHRvQWRkKGNy
ZWF0ZUFjdGl2ZUFuaW1hdGlvbihhZG9wdFB0cihuZXcgRmFrZUZsb2F0VHJhbnNpdGlvbigxLCAw
LCAxKSksIDEsIENDQWN0aXZlQW5pbWF0aW9uOjpPcGFjaXR5KSk7CiAKLSAgICBjb250cm9sbGVy
LT5hZGQodG9BZGQucmVsZWFzZSgpKTsKKyAgICBjb250cm9sbGVyLT5hZGRBbmltYXRpb24odG9B
ZGQucmVsZWFzZSgpKTsKICAgICBjb250cm9sbGVyLT5hbmltYXRlKDAsIGV2ZW50cy5nZXQoKSk7
CiAgICAgRVhQRUNUX1RSVUUoY29udHJvbGxlci0+aGFzQWN0aXZlQW5pbWF0aW9uKCkpOwogICAg
IEVYUEVDVF9FUSgwLCBkdW1teS5vcGFjaXR5KCkpOwpAQCAtMzk2LDcgKzIwMyw3IEBAIFRFU1Qo
Q0NMYXllckFuaW1hdGlvbkNvbnRyb2xsZXJUZXN0LCBBbmltYXRpb25zV2FpdGluZ0ZvclN0YXJ0
VGltZURvTm90RmluaXNoSWZUCiAgICAgdG9BZGQtPnNldE5lZWRzU3luY2hyb25pemVkU3RhcnRU
aW1lKHRydWUpOwogCiAgICAgLy8gV2Ugc2hvdWxkIHBhdXNlIGF0IHRoZSBmaXJzdCBrZXlmcmFt
ZSBpbmRlZmluaXRlbHkgd2FpdGluZyBmb3IgdGhhdCBhbmltYXRpb24gdG8gc3RhcnQuCi0gICAg
Y29udHJvbGxlci0+YWRkKHRvQWRkLnJlbGVhc2UoKSk7CisgICAgY29udHJvbGxlci0+YWRkQW5p
bWF0aW9uKHRvQWRkLnJlbGVhc2UoKSk7CiAgICAgY29udHJvbGxlci0+YW5pbWF0ZSgwLCBldmVu
dHMuZ2V0KCkpOwogICAgIEVYUEVDVF9UUlVFKGNvbnRyb2xsZXItPmhhc0FjdGl2ZUFuaW1hdGlv
bigpKTsKICAgICBFWFBFQ1RfRVEoMCwgZHVtbXkub3BhY2l0eSgpKTsKQEAgLTQyMiw4ICsyMjks
OCBAQCBURVNUKENDTGF5ZXJBbmltYXRpb25Db250cm9sbGVyVGVzdCwgVHJpdmlhbFF1ZXVpbmcp
CiAgICAgT3duUHRyPENDTGF5ZXJBbmltYXRpb25Db250cm9sbGVyPiBjb250cm9sbGVyKAogICAg
ICAgICBDQ0xheWVyQW5pbWF0aW9uQ29udHJvbGxlcjo6Y3JlYXRlKCZkdW1teSkpOwogCi0gICAg
Y29udHJvbGxlci0+YWRkKGNyZWF0ZUFjdGl2ZUFuaW1hdGlvbihhZG9wdFB0cihuZXcgRmFrZUZs
b2F0VHJhbnNpdGlvbigxLCAwLCAxKSksIDEsIENDQWN0aXZlQW5pbWF0aW9uOjpPcGFjaXR5KSk7
Ci0gICAgY29udHJvbGxlci0+YWRkKGNyZWF0ZUFjdGl2ZUFuaW1hdGlvbihhZG9wdFB0cihuZXcg
RmFrZUZsb2F0VHJhbnNpdGlvbigxLCAxLCAwLjUpKSwgMiwgQ0NBY3RpdmVBbmltYXRpb246Ok9w
YWNpdHkpKTsKKyAgICBjb250cm9sbGVyLT5hZGRBbmltYXRpb24oY3JlYXRlQWN0aXZlQW5pbWF0
aW9uKGFkb3B0UHRyKG5ldyBGYWtlRmxvYXRUcmFuc2l0aW9uKDEsIDAsIDEpKSwgMSwgQ0NBY3Rp
dmVBbmltYXRpb246Ok9wYWNpdHkpKTsKKyAgICBjb250cm9sbGVyLT5hZGRBbmltYXRpb24oY3Jl
YXRlQWN0aXZlQW5pbWF0aW9uKGFkb3B0UHRyKG5ldyBGYWtlRmxvYXRUcmFuc2l0aW9uKDEsIDEs
IDAuNSkpLCAyLCBDQ0FjdGl2ZUFuaW1hdGlvbjo6T3BhY2l0eSkpOwogCiAgICAgY29udHJvbGxl
ci0+YW5pbWF0ZSgwLCBldmVudHMuZ2V0KCkpOwogICAgIEVYUEVDVF9UUlVFKGNvbnRyb2xsZXIt
Pmhhc0FjdGl2ZUFuaW1hdGlvbigpKTsKQEAgLTQ0MywxNCArMjUwLDE0IEBAIFRFU1QoQ0NMYXll
ckFuaW1hdGlvbkNvbnRyb2xsZXJUZXN0LCBJbnRlcnJ1cHQpCiAgICAgRmFrZUxheWVyQW5pbWF0
aW9uQ29udHJvbGxlckNsaWVudCBkdW1teTsKICAgICBPd25QdHI8Q0NMYXllckFuaW1hdGlvbkNv
bnRyb2xsZXI+IGNvbnRyb2xsZXIoCiAgICAgICAgIENDTGF5ZXJBbmltYXRpb25Db250cm9sbGVy
OjpjcmVhdGUoJmR1bW15KSk7Ci0gICAgY29udHJvbGxlci0+YWRkKGNyZWF0ZUFjdGl2ZUFuaW1h
dGlvbihhZG9wdFB0cihuZXcgRmFrZUZsb2F0VHJhbnNpdGlvbigxLCAwLCAxKSksIDEsIENDQWN0
aXZlQW5pbWF0aW9uOjpPcGFjaXR5KSk7CisgICAgY29udHJvbGxlci0+YWRkQW5pbWF0aW9uKGNy
ZWF0ZUFjdGl2ZUFuaW1hdGlvbihhZG9wdFB0cihuZXcgRmFrZUZsb2F0VHJhbnNpdGlvbigxLCAw
LCAxKSksIDEsIENDQWN0aXZlQW5pbWF0aW9uOjpPcGFjaXR5KSk7CiAgICAgY29udHJvbGxlci0+
YW5pbWF0ZSgwLCBldmVudHMuZ2V0KCkpOwogICAgIEVYUEVDVF9UUlVFKGNvbnRyb2xsZXItPmhh
c0FjdGl2ZUFuaW1hdGlvbigpKTsKICAgICBFWFBFQ1RfRVEoMCwgZHVtbXkub3BhY2l0eSgpKTsK
IAogICAgIE93blB0cjxDQ0FjdGl2ZUFuaW1hdGlvbj4gdG9BZGQoY3JlYXRlQWN0aXZlQW5pbWF0
aW9uKGFkb3B0UHRyKG5ldyBGYWtlRmxvYXRUcmFuc2l0aW9uKDEsIDEsIDAuNSkpLCAyLCBDQ0Fj
dGl2ZUFuaW1hdGlvbjo6T3BhY2l0eSkpOwogICAgIHRvQWRkLT5zZXRSdW5TdGF0ZShDQ0FjdGl2
ZUFuaW1hdGlvbjo6V2FpdGluZ0Zvck5leHRUaWNrLCAwKTsKLSAgICBjb250cm9sbGVyLT5hZGQo
dG9BZGQucmVsZWFzZSgpKTsKKyAgICBjb250cm9sbGVyLT5hZGRBbmltYXRpb24odG9BZGQucmVs
ZWFzZSgpKTsKIAogICAgIC8vIFNpbmNlIHRoZSBhbmltYXRpb24gd2FzIGluIHRoZSBXYWl0aW5n
Rm9yTmV4dFRpY2sgc3RhdGUsIGl0IHNob3VsZCBzdGFydCByaWdodCBpbgogICAgIC8vIHRoaXMg
Y2FsbCB0byBhbmltYXRlLgpAQCAtNDcwLDkgKzI3Nyw5IEBAIFRFU1QoQ0NMYXllckFuaW1hdGlv
bkNvbnRyb2xsZXJUZXN0LCBTY2hlZHVsZVRvZ2V0aGVyV2hlbkFQcm9wZXJ0eUlzQmxvY2tlZCkK
ICAgICBPd25QdHI8Q0NMYXllckFuaW1hdGlvbkNvbnRyb2xsZXI+IGNvbnRyb2xsZXIoCiAgICAg
ICAgIENDTGF5ZXJBbmltYXRpb25Db250cm9sbGVyOjpjcmVhdGUoJmR1bW15KSk7CiAKLSAgICBj
b250cm9sbGVyLT5hZGQoY3JlYXRlQWN0aXZlQW5pbWF0aW9uKGFkb3B0UHRyKG5ldyBGYWtlVHJh
bnNmb3JtVHJhbnNpdGlvbigxKSksIDEsIENDQWN0aXZlQW5pbWF0aW9uOjpUcmFuc2Zvcm0pKTsK
LSAgICBjb250cm9sbGVyLT5hZGQoY3JlYXRlQWN0aXZlQW5pbWF0aW9uKGFkb3B0UHRyKG5ldyBG
YWtlVHJhbnNmb3JtVHJhbnNpdGlvbigxKSksIDIsIENDQWN0aXZlQW5pbWF0aW9uOjpUcmFuc2Zv
cm0pKTsKLSAgICBjb250cm9sbGVyLT5hZGQoY3JlYXRlQWN0aXZlQW5pbWF0aW9uKGFkb3B0UHRy
KG5ldyBGYWtlRmxvYXRUcmFuc2l0aW9uKDEsIDAsIDEpKSwgMiwgQ0NBY3RpdmVBbmltYXRpb246
Ok9wYWNpdHkpKTsKKyAgICBjb250cm9sbGVyLT5hZGRBbmltYXRpb24oY3JlYXRlQWN0aXZlQW5p
bWF0aW9uKGFkb3B0UHRyKG5ldyBGYWtlVHJhbnNmb3JtVHJhbnNpdGlvbigxKSksIDEsIENDQWN0
aXZlQW5pbWF0aW9uOjpUcmFuc2Zvcm0pKTsKKyAgICBjb250cm9sbGVyLT5hZGRBbmltYXRpb24o
Y3JlYXRlQWN0aXZlQW5pbWF0aW9uKGFkb3B0UHRyKG5ldyBGYWtlVHJhbnNmb3JtVHJhbnNpdGlv
bigxKSksIDIsIENDQWN0aXZlQW5pbWF0aW9uOjpUcmFuc2Zvcm0pKTsKKyAgICBjb250cm9sbGVy
LT5hZGRBbmltYXRpb24oY3JlYXRlQWN0aXZlQW5pbWF0aW9uKGFkb3B0UHRyKG5ldyBGYWtlRmxv
YXRUcmFuc2l0aW9uKDEsIDAsIDEpKSwgMiwgQ0NBY3RpdmVBbmltYXRpb246Ok9wYWNpdHkpKTsK
IAogICAgIGNvbnRyb2xsZXItPmFuaW1hdGUoMCwgZXZlbnRzLmdldCgpKTsKICAgICBFWFBFQ1Rf
RVEoMCwgZHVtbXkub3BhY2l0eSgpKTsKQEAgLTQ5Nyw5ICszMDQsOSBAQCBURVNUKENDTGF5ZXJB
bmltYXRpb25Db250cm9sbGVyVGVzdCwgU2NoZWR1bGVUb2dldGhlcldpdGhBbkFuaW1XYWl0aW5n
KQogICAgIE93blB0cjxDQ0xheWVyQW5pbWF0aW9uQ29udHJvbGxlcj4gY29udHJvbGxlcigKICAg
ICAgICAgQ0NMYXllckFuaW1hdGlvbkNvbnRyb2xsZXI6OmNyZWF0ZSgmZHVtbXkpKTsKIAotICAg
IGNvbnRyb2xsZXItPmFkZChjcmVhdGVBY3RpdmVBbmltYXRpb24oYWRvcHRQdHIobmV3IEZha2VU
cmFuc2Zvcm1UcmFuc2l0aW9uKDIpKSwgMSwgQ0NBY3RpdmVBbmltYXRpb246OlRyYW5zZm9ybSkp
OwotICAgIGNvbnRyb2xsZXItPmFkZChjcmVhdGVBY3RpdmVBbmltYXRpb24oYWRvcHRQdHIobmV3
IEZha2VGbG9hdFRyYW5zaXRpb24oMSwgMCwgMSkpLCAxLCBDQ0FjdGl2ZUFuaW1hdGlvbjo6T3Bh
Y2l0eSkpOwotICAgIGNvbnRyb2xsZXItPmFkZChjcmVhdGVBY3RpdmVBbmltYXRpb24oYWRvcHRQ
dHIobmV3IEZha2VGbG9hdFRyYW5zaXRpb24oMSwgMSwgMC41KSksIDIsIENDQWN0aXZlQW5pbWF0
aW9uOjpPcGFjaXR5KSk7CisgICAgY29udHJvbGxlci0+YWRkQW5pbWF0aW9uKGNyZWF0ZUFjdGl2
ZUFuaW1hdGlvbihhZG9wdFB0cihuZXcgRmFrZVRyYW5zZm9ybVRyYW5zaXRpb24oMikpLCAxLCBD
Q0FjdGl2ZUFuaW1hdGlvbjo6VHJhbnNmb3JtKSk7CisgICAgY29udHJvbGxlci0+YWRkQW5pbWF0
aW9uKGNyZWF0ZUFjdGl2ZUFuaW1hdGlvbihhZG9wdFB0cihuZXcgRmFrZUZsb2F0VHJhbnNpdGlv
bigxLCAwLCAxKSksIDEsIENDQWN0aXZlQW5pbWF0aW9uOjpPcGFjaXR5KSk7CisgICAgY29udHJv
bGxlci0+YWRkQW5pbWF0aW9uKGNyZWF0ZUFjdGl2ZUFuaW1hdGlvbihhZG9wdFB0cihuZXcgRmFr
ZUZsb2F0VHJhbnNpdGlvbigxLCAxLCAwLjUpKSwgMiwgQ0NBY3RpdmVBbmltYXRpb246Ok9wYWNp
dHkpKTsKIAogICAgIC8vIEFuaW1hdGlvbnMgd2l0aCBpZCAxIHNob3VsZCBib3RoIHN0YXJ0IG5v
dy4KICAgICBjb250cm9sbGVyLT5hbmltYXRlKDAsIGV2ZW50cy5nZXQoKSk7CkBAIC01MzAsNyAr
MzM3LDcgQEAgVEVTVChDQ0xheWVyQW5pbWF0aW9uQ29udHJvbGxlclRlc3QsIFNjaGVkdWxlQW5p
bWF0aW9uKQogICAgIE93blB0cjxDQ0FjdGl2ZUFuaW1hdGlvbj4gdG9BZGQoY3JlYXRlQWN0aXZl
QW5pbWF0aW9uKGFkb3B0UHRyKG5ldyBGYWtlRmxvYXRUcmFuc2l0aW9uKDEsIDAsIDEpKSwgMSwg
Q0NBY3RpdmVBbmltYXRpb246Ok9wYWNpdHkpKTsKICAgICB0b0FkZC0+c2V0UnVuU3RhdGUoQ0NB
Y3RpdmVBbmltYXRpb246OldhaXRpbmdGb3JTdGFydFRpbWUsIDApOwogICAgIHRvQWRkLT5zZXRT
dGFydFRpbWUoMSk7Ci0gICAgY29udHJvbGxlci0+YWRkKHRvQWRkLnJlbGVhc2UoKSk7CisgICAg
Y29udHJvbGxlci0+YWRkQW5pbWF0aW9uKHRvQWRkLnJlbGVhc2UoKSk7CiAKICAgICBjb250cm9s
bGVyLT5hbmltYXRlKDAsIGV2ZW50cy5nZXQoKSk7CiAgICAgRVhQRUNUX1RSVUUoY29udHJvbGxl
ci0+aGFzQWN0aXZlQW5pbWF0aW9uKCkpOwpAQCAtNTUxLDEyICszNTgsMTIgQEAgVEVTVChDQ0xh
eWVyQW5pbWF0aW9uQ29udHJvbGxlclRlc3QsIFNjaGVkdWxlZEFuaW1hdGlvbkludGVycnVwdHNS
dW5uaW5nQW5pbWF0aW8KICAgICBPd25QdHI8Q0NMYXllckFuaW1hdGlvbkNvbnRyb2xsZXI+IGNv
bnRyb2xsZXIoCiAgICAgICAgIENDTGF5ZXJBbmltYXRpb25Db250cm9sbGVyOjpjcmVhdGUoJmR1
bW15KSk7CiAKLSAgICBjb250cm9sbGVyLT5hZGQoY3JlYXRlQWN0aXZlQW5pbWF0aW9uKGFkb3B0
UHRyKG5ldyBGYWtlRmxvYXRUcmFuc2l0aW9uKDIsIDAsIDEpKSwgMSwgQ0NBY3RpdmVBbmltYXRp
b246Ok9wYWNpdHkpKTsKKyAgICBjb250cm9sbGVyLT5hZGRBbmltYXRpb24oY3JlYXRlQWN0aXZl
QW5pbWF0aW9uKGFkb3B0UHRyKG5ldyBGYWtlRmxvYXRUcmFuc2l0aW9uKDIsIDAsIDEpKSwgMSwg
Q0NBY3RpdmVBbmltYXRpb246Ok9wYWNpdHkpKTsKIAogICAgIE93blB0cjxDQ0FjdGl2ZUFuaW1h
dGlvbj4gdG9BZGQoY3JlYXRlQWN0aXZlQW5pbWF0aW9uKGFkb3B0UHRyKG5ldyBGYWtlRmxvYXRU
cmFuc2l0aW9uKDEsIDAuNSwgMCkpLCAyLCBDQ0FjdGl2ZUFuaW1hdGlvbjo6T3BhY2l0eSkpOwog
ICAgIHRvQWRkLT5zZXRSdW5TdGF0ZShDQ0FjdGl2ZUFuaW1hdGlvbjo6V2FpdGluZ0ZvclN0YXJ0
VGltZSwgMCk7CiAgICAgdG9BZGQtPnNldFN0YXJ0VGltZSgxKTsKLSAgICBjb250cm9sbGVyLT5h
ZGQodG9BZGQucmVsZWFzZSgpKTsKKyAgICBjb250cm9sbGVyLT5hZGRBbmltYXRpb24odG9BZGQu
cmVsZWFzZSgpKTsKIAogICAgIC8vIEZpcnN0IDJzIG9wYWNpdHkgdHJhbnNpdGlvbiBzaG91bGQg
c3RhcnQgaW1tZWRpYXRlbHkuCiAgICAgY29udHJvbGxlci0+YW5pbWF0ZSgwLCBldmVudHMuZ2V0
KCkpOwpAQCAtNTgyLDE0ICszODksMTQgQEAgVEVTVChDQ0xheWVyQW5pbWF0aW9uQ29udHJvbGxl
clRlc3QsIFNjaGVkdWxlZEFuaW1hdGlvbkludGVycnVwdHNSdW5uaW5nQW5pbWF0aW8KICAgICBP
d25QdHI8Q0NMYXllckFuaW1hdGlvbkNvbnRyb2xsZXI+IGNvbnRyb2xsZXIoCiAgICAgICAgIEND
TGF5ZXJBbmltYXRpb25Db250cm9sbGVyOjpjcmVhdGUoJmR1bW15KSk7CiAKLSAgICBjb250cm9s
bGVyLT5hZGQoY3JlYXRlQWN0aXZlQW5pbWF0aW9uKGFkb3B0UHRyKG5ldyBGYWtlRmxvYXRUcmFu
c2l0aW9uKDIsIDAsIDEpKSwgMSwgQ0NBY3RpdmVBbmltYXRpb246Ok9wYWNpdHkpKTsKKyAgICBj
b250cm9sbGVyLT5hZGRBbmltYXRpb24oY3JlYXRlQWN0aXZlQW5pbWF0aW9uKGFkb3B0UHRyKG5l
dyBGYWtlRmxvYXRUcmFuc2l0aW9uKDIsIDAsIDEpKSwgMSwgQ0NBY3RpdmVBbmltYXRpb246Ok9w
YWNpdHkpKTsKIAogICAgIE93blB0cjxDQ0FjdGl2ZUFuaW1hdGlvbj4gdG9BZGQoY3JlYXRlQWN0
aXZlQW5pbWF0aW9uKGFkb3B0UHRyKG5ldyBGYWtlRmxvYXRUcmFuc2l0aW9uKDIsIDAuNSwgMCkp
LCAyLCBDQ0FjdGl2ZUFuaW1hdGlvbjo6T3BhY2l0eSkpOwogICAgIHRvQWRkLT5zZXRSdW5TdGF0
ZShDQ0FjdGl2ZUFuaW1hdGlvbjo6V2FpdGluZ0ZvclN0YXJ0VGltZSwgMCk7CiAgICAgdG9BZGQt
PnNldFN0YXJ0VGltZSgxKTsKLSAgICBjb250cm9sbGVyLT5hZGQodG9BZGQucmVsZWFzZSgpKTsK
KyAgICBjb250cm9sbGVyLT5hZGRBbmltYXRpb24odG9BZGQucmVsZWFzZSgpKTsKIAotICAgIGNv
bnRyb2xsZXItPmFkZChjcmVhdGVBY3RpdmVBbmltYXRpb24oYWRvcHRQdHIobmV3IEZha2VGbG9h
dFRyYW5zaXRpb24oMSwgMCwgMC43NSkpLCAzLCBDQ0FjdGl2ZUFuaW1hdGlvbjo6T3BhY2l0eSkp
OworICAgIGNvbnRyb2xsZXItPmFkZEFuaW1hdGlvbihjcmVhdGVBY3RpdmVBbmltYXRpb24oYWRv
cHRQdHIobmV3IEZha2VGbG9hdFRyYW5zaXRpb24oMSwgMCwgMC43NSkpLCAzLCBDQ0FjdGl2ZUFu
aW1hdGlvbjo6T3BhY2l0eSkpOwogCiAgICAgLy8gRmlyc3QgMnMgb3BhY2l0eSB0cmFuc2l0aW9u
IHNob3VsZCBzdGFydCBpbW1lZGlhdGVseS4KICAgICBjb250cm9sbGVyLT5hbmltYXRlKDAsIGV2
ZW50cy5nZXQoKSk7CkBAIC02MjAsNyArNDI3LDcgQEAgVEVTVChDQ0xheWVyQW5pbWF0aW9uQ29u
dHJvbGxlclRlc3QsIFRyaXZpYWxMb29waW5nKQogCiAgICAgT3duUHRyPENDQWN0aXZlQW5pbWF0
aW9uPiB0b0FkZChjcmVhdGVBY3RpdmVBbmltYXRpb24oYWRvcHRQdHIobmV3IEZha2VGbG9hdFRy
YW5zaXRpb24oMSwgMCwgMSkpLCAxLCBDQ0FjdGl2ZUFuaW1hdGlvbjo6T3BhY2l0eSkpOwogICAg
IHRvQWRkLT5zZXRJdGVyYXRpb25zKDMpOwotICAgIGNvbnRyb2xsZXItPmFkZCh0b0FkZC5yZWxl
YXNlKCkpOworICAgIGNvbnRyb2xsZXItPmFkZEFuaW1hdGlvbih0b0FkZC5yZWxlYXNlKCkpOwog
CiAgICAgY29udHJvbGxlci0+YW5pbWF0ZSgwLCBldmVudHMuZ2V0KCkpOwogICAgIEVYUEVDVF9U
UlVFKGNvbnRyb2xsZXItPmhhc0FjdGl2ZUFuaW1hdGlvbigpKTsKQEAgLTY1Nyw3ICs0NjQsNyBA
QCBURVNUKENDTGF5ZXJBbmltYXRpb25Db250cm9sbGVyVGVzdCwgSW5maW5pdGVMb29waW5nKQog
ICAgIGNvbnN0IGludCBpZCA9IDE7CiAgICAgT3duUHRyPENDQWN0aXZlQW5pbWF0aW9uPiB0b0Fk
ZChjcmVhdGVBY3RpdmVBbmltYXRpb24oYWRvcHRQdHIobmV3IEZha2VGbG9hdFRyYW5zaXRpb24o
MSwgMCwgMSkpLCBpZCwgQ0NBY3RpdmVBbmltYXRpb246Ok9wYWNpdHkpKTsKICAgICB0b0FkZC0+
c2V0SXRlcmF0aW9ucygtMSk7Ci0gICAgY29udHJvbGxlci0+YWRkKHRvQWRkLnJlbGVhc2UoKSk7
CisgICAgY29udHJvbGxlci0+YWRkQW5pbWF0aW9uKHRvQWRkLnJlbGVhc2UoKSk7CiAKICAgICBj
b250cm9sbGVyLT5hbmltYXRlKDAsIGV2ZW50cy5nZXQoKSk7CiAgICAgRVhQRUNUX1RSVUUoY29u
dHJvbGxlci0+aGFzQWN0aXZlQW5pbWF0aW9uKCkpOwpAQCAtNjkxLDcgKzQ5OCw3IEBAIFRFU1Qo
Q0NMYXllckFuaW1hdGlvbkNvbnRyb2xsZXJUZXN0LCBQYXVzZVJlc3VtZSkKICAgICAgICAgQ0NM
YXllckFuaW1hdGlvbkNvbnRyb2xsZXI6OmNyZWF0ZSgmZHVtbXkpKTsKIAogICAgIGNvbnN0IGlu
dCBpZCA9IDE7Ci0gICAgY29udHJvbGxlci0+YWRkKGNyZWF0ZUFjdGl2ZUFuaW1hdGlvbihhZG9w
dFB0cihuZXcgRmFrZUZsb2F0VHJhbnNpdGlvbigxLCAwLCAxKSksIGlkLCBDQ0FjdGl2ZUFuaW1h
dGlvbjo6T3BhY2l0eSkpOworICAgIGNvbnRyb2xsZXItPmFkZEFuaW1hdGlvbihjcmVhdGVBY3Rp
dmVBbmltYXRpb24oYWRvcHRQdHIobmV3IEZha2VGbG9hdFRyYW5zaXRpb24oMSwgMCwgMSkpLCBp
ZCwgQ0NBY3RpdmVBbmltYXRpb246Ok9wYWNpdHkpKTsKIAogICAgIGNvbnRyb2xsZXItPmFuaW1h
dGUoMCwgZXZlbnRzLmdldCgpKTsKICAgICBFWFBFQ1RfVFJVRShjb250cm9sbGVyLT5oYXNBY3Rp
dmVBbmltYXRpb24oKSk7CkBAIC03MjYsOSArNTMzLDkgQEAgVEVTVChDQ0xheWVyQW5pbWF0aW9u
Q29udHJvbGxlclRlc3QsIEFib3J0QUdyb3VwZWRBbmltYXRpb24pCiAgICAgICAgIENDTGF5ZXJB
bmltYXRpb25Db250cm9sbGVyOjpjcmVhdGUoJmR1bW15KSk7CiAKICAgICBjb25zdCBpbnQgaWQg
PSAxOwotICAgIGNvbnRyb2xsZXItPmFkZChjcmVhdGVBY3RpdmVBbmltYXRpb24oYWRvcHRQdHIo
bmV3IEZha2VUcmFuc2Zvcm1UcmFuc2l0aW9uKDEpKSwgaWQsIENDQWN0aXZlQW5pbWF0aW9uOjpU
cmFuc2Zvcm0pKTsKLSAgICBjb250cm9sbGVyLT5hZGQoY3JlYXRlQWN0aXZlQW5pbWF0aW9uKGFk
b3B0UHRyKG5ldyBGYWtlRmxvYXRUcmFuc2l0aW9uKDIsIDAsIDEpKSwgaWQsIENDQWN0aXZlQW5p
bWF0aW9uOjpPcGFjaXR5KSk7Ci0gICAgY29udHJvbGxlci0+YWRkKGNyZWF0ZUFjdGl2ZUFuaW1h
dGlvbihhZG9wdFB0cihuZXcgRmFrZUZsb2F0VHJhbnNpdGlvbigxLCAxLCAwLjc1KSksIDIsIEND
QWN0aXZlQW5pbWF0aW9uOjpPcGFjaXR5KSk7CisgICAgY29udHJvbGxlci0+YWRkQW5pbWF0aW9u
KGNyZWF0ZUFjdGl2ZUFuaW1hdGlvbihhZG9wdFB0cihuZXcgRmFrZVRyYW5zZm9ybVRyYW5zaXRp
b24oMSkpLCBpZCwgQ0NBY3RpdmVBbmltYXRpb246OlRyYW5zZm9ybSkpOworICAgIGNvbnRyb2xs
ZXItPmFkZEFuaW1hdGlvbihjcmVhdGVBY3RpdmVBbmltYXRpb24oYWRvcHRQdHIobmV3IEZha2VG
bG9hdFRyYW5zaXRpb24oMiwgMCwgMSkpLCBpZCwgQ0NBY3RpdmVBbmltYXRpb246Ok9wYWNpdHkp
KTsKKyAgICBjb250cm9sbGVyLT5hZGRBbmltYXRpb24oY3JlYXRlQWN0aXZlQW5pbWF0aW9uKGFk
b3B0UHRyKG5ldyBGYWtlRmxvYXRUcmFuc2l0aW9uKDEsIDEsIDAuNzUpKSwgMiwgQ0NBY3RpdmVB
bmltYXRpb246Ok9wYWNpdHkpKTsKIAogICAgIGNvbnRyb2xsZXItPmFuaW1hdGUoMCwgZXZlbnRz
LmdldCgpKTsKICAgICBFWFBFQ1RfVFJVRShjb250cm9sbGVyLT5oYXNBY3RpdmVBbmltYXRpb24o
KSk7CkBAIC03NTgsNyArNTY1LDcgQEAgVEVTVChDQ0xheWVyQW5pbWF0aW9uQ29udHJvbGxlclRl
c3QsIEZvcmNlU3luY1doZW5TeW5jaHJvbml6ZWRTdGFydFRpbWVOZWVkZWQpCiAKICAgICBPd25Q
dHI8Q0NBY3RpdmVBbmltYXRpb24+IHRvQWRkKGNyZWF0ZUFjdGl2ZUFuaW1hdGlvbihhZG9wdFB0
cihuZXcgRmFrZUZsb2F0VHJhbnNpdGlvbigyLCAwLCAxKSksIDAsIENDQWN0aXZlQW5pbWF0aW9u
OjpPcGFjaXR5KSk7CiAgICAgdG9BZGQtPnNldE5lZWRzU3luY2hyb25pemVkU3RhcnRUaW1lKHRy
dWUpOwotICAgIGNvbnRyb2xsZXItPmFkZCh0b0FkZC5yZWxlYXNlKCkpOworICAgIGNvbnRyb2xs
ZXItPmFkZEFuaW1hdGlvbih0b0FkZC5yZWxlYXNlKCkpOwogCiAgICAgY29udHJvbGxlci0+YW5p
bWF0ZSgwLCAwKTsKICAgICBFWFBFQ1RfVFJVRShjb250cm9sbGVyLT5oYXNBY3RpdmVBbmltYXRp
b24oKSk7CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViS2l0L2Nocm9taXVtL3Rlc3RzL0NDTGF5ZXJU
cmVlSG9zdFRlc3QuY3BwIGIvU291cmNlL1dlYktpdC9jaHJvbWl1bS90ZXN0cy9DQ0xheWVyVHJl
ZUhvc3RUZXN0LmNwcAppbmRleCBhYTI3ZTg4ZjdkYzNlZDgwODAyMTA2NDljY2QwYmUzMDAyN2Nm
MGJmLi5lMjc0MjI0NDk3MjkyZmIxMzcyN2QzOTA5ZmJlN2MzNTE3NjI0ODJhIDEwMDY0NAotLS0g
YS9Tb3VyY2UvV2ViS2l0L2Nocm9taXVtL3Rlc3RzL0NDTGF5ZXJUcmVlSG9zdFRlc3QuY3BwCisr
KyBiL1NvdXJjZS9XZWJLaXQvY2hyb21pdW0vdGVzdHMvQ0NMYXllclRyZWVIb3N0VGVzdC5jcHAK
QEAgLTI5NTIsNyArMjk1Miw3IEBAIHB1YmxpYzoKICAgICAgICAgLy8gQW55IHZhbGlkIENDQW5p
bWF0aW9uQ3VydmUgd2lsbCBkbyBoZXJlLgogICAgICAgICBPd25QdHI8Q0NBbmltYXRpb25DdXJ2
ZT4gY3VydmUoQ0NFYXNlVGltaW5nRnVuY3Rpb246OmNyZWF0ZSgpKTsKICAgICAgICAgT3duUHRy
PENDQWN0aXZlQW5pbWF0aW9uPiBhbmltYXRpb24oQ0NBY3RpdmVBbmltYXRpb246OmNyZWF0ZShj
dXJ2ZS5yZWxlYXNlKCksIEFuaW1hdGlvbklkVmVuZG9yOjpnZXROZXh0QW5pbWF0aW9uSWQoKSwg
QW5pbWF0aW9uSWRWZW5kb3I6OmdldE5leHRHcm91cElkKCksIENDQWN0aXZlQW5pbWF0aW9uOjpP
cGFjaXR5KSk7Ci0gICAgICAgIGxheWVyLT5sYXllckFuaW1hdGlvbkNvbnRyb2xsZXIoKS0+YWRk
KGFuaW1hdGlvbi5yZWxlYXNlKCkpOworICAgICAgICBsYXllci0+bGF5ZXJBbmltYXRpb25Db250
cm9sbGVyKCktPmFkZEFuaW1hdGlvbihhbmltYXRpb24ucmVsZWFzZSgpKTsKIAogICAgICAgICAv
LyBXZSBhZGQgdGhlIGFuaW1hdGlvbiAqYmVmb3JlKiBhdHRhY2hpbmcgdGhlIGxheWVyIHRvIHRo
ZSB0cmVlLgogICAgICAgICBtX2xheWVyVHJlZUhvc3QtPnJvb3RMYXllcigpLT5hZGRDaGlsZChs
YXllcik7CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViS2l0L2Nocm9taXVtL3Rlc3RzL0dyYXBoaWNz
TGF5ZXJDaHJvbWl1bVRlc3QuY3BwIGIvU291cmNlL1dlYktpdC9jaHJvbWl1bS90ZXN0cy9HcmFw
aGljc0xheWVyQ2hyb21pdW1UZXN0LmNwcAppbmRleCBiN2FhODU3NDY1Y2JhYzE4YzQ4MmFlZDVk
OTczMjMyNjUxNGRhNmE0Li5iODM4MDQ5NWFmOTAwMmU2YzY5ZjA0N2NlZGFhZjk3MjJkZjJiMzY0
IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViS2l0L2Nocm9taXVtL3Rlc3RzL0dyYXBoaWNzTGF5ZXJD
aHJvbWl1bVRlc3QuY3BwCisrKyBiL1NvdXJjZS9XZWJLaXQvY2hyb21pdW0vdGVzdHMvR3JhcGhp
Y3NMYXllckNocm9taXVtVGVzdC5jcHAKQEAgLTI3LDU2ICsyNywzNzUgQEAKICNpbmNsdWRlICJH
cmFwaGljc0xheWVyQ2hyb21pdW0uaCIKIAogI2luY2x1ZGUgIkNDQW5pbWF0aW9uVGVzdENvbW1v
bi5oIgorI2luY2x1ZGUgIkNvbXBvc2l0b3JGYWtlR3JhcGhpY3NDb250ZXh0M0QuaCIKKyNpbmNs
dWRlICJHcmFwaGljc0NvbnRleHQzRC5oIgorI2luY2x1ZGUgIkdyYXBoaWNzQ29udGV4dDNEUHJp
dmF0ZS5oIgogI2luY2x1ZGUgIkdyYXBoaWNzTGF5ZXIuaCIKICNpbmNsdWRlICJMYXllckNocm9t
aXVtLmgiCisjaW5jbHVkZSAiTWF0cml4M0RUcmFuc2Zvcm1PcGVyYXRpb24uaCIKKyNpbmNsdWRl
ICJSb3RhdGVUcmFuc2Zvcm1PcGVyYXRpb24uaCIKKyNpbmNsdWRlICJUcmFuc2xhdGVUcmFuc2Zv
cm1PcGVyYXRpb24uaCIKKyNpbmNsdWRlICJXZWJDb21wb3NpdG9yLmgiCisKKyNpbmNsdWRlICJj
Yy9DQ0xheWVyVHJlZUhvc3QuaCIKKyNpbmNsdWRlICJjYy9DQ0xheWVyVHJlZUhvc3RJbXBsLmgi
CisjaW5jbHVkZSAiY2MvQ0NTaW5nbGVUaHJlYWRQcm94eS5oIgorCiAjaW5jbHVkZSA8Z3Rlc3Qv
Z3Rlc3QuaD4KICNpbmNsdWRlIDx3dGYvUGFzc093blB0ci5oPgogCiB1c2luZyBuYW1lc3BhY2Ug
V2ViQ29yZTsKK3VzaW5nIG5hbWVzcGFjZSBXZWJLaXQ7CiB1c2luZyBuYW1lc3BhY2UgV2ViS2l0
VGVzdHM7CiAKIG5hbWVzcGFjZSB7CiAKIGNsYXNzIE1vY2tHcmFwaGljc0xheWVyQ2xpZW50IDog
cHVibGljIEdyYXBoaWNzTGF5ZXJDbGllbnQgewogICBwdWJsaWM6Ci0gICAgdmlydHVhbCB2b2lk
IG5vdGlmeUFuaW1hdGlvblN0YXJ0ZWQoY29uc3QgR3JhcGhpY3NMYXllciosIGRvdWJsZSB0aW1l
KSB7IH0KLSAgICB2aXJ0dWFsIHZvaWQgbm90aWZ5U3luY1JlcXVpcmVkKGNvbnN0IEdyYXBoaWNz
TGF5ZXIqKSB7IH0KLSAgICB2aXJ0dWFsIHZvaWQgcGFpbnRDb250ZW50cyhjb25zdCBHcmFwaGlj
c0xheWVyKiwgR3JhcGhpY3NDb250ZXh0JiwgR3JhcGhpY3NMYXllclBhaW50aW5nUGhhc2UsIGNv
bnN0IEludFJlY3QmIGluQ2xpcCkgeyB9Ci0gICAgdmlydHVhbCBib29sIHNob3dEZWJ1Z0JvcmRl
cnMoY29uc3QgR3JhcGhpY3NMYXllciopIGNvbnN0IHsgcmV0dXJuIGZhbHNlOyB9Ci0gICAgdmly
dHVhbCBib29sIHNob3dSZXBhaW50Q291bnRlcihjb25zdCBHcmFwaGljc0xheWVyKikgY29uc3Qg
eyByZXR1cm4gZmFsc2U7IH0KKyAgICB2aXJ0dWFsIHZvaWQgbm90aWZ5QW5pbWF0aW9uU3RhcnRl
ZChjb25zdCBHcmFwaGljc0xheWVyKiwgZG91YmxlIHRpbWUpIE9WRVJSSURFIHsgfQorICAgIHZp
cnR1YWwgdm9pZCBub3RpZnlTeW5jUmVxdWlyZWQoY29uc3QgR3JhcGhpY3NMYXllciopIE9WRVJS
SURFIHsgfQorICAgIHZpcnR1YWwgdm9pZCBwYWludENvbnRlbnRzKGNvbnN0IEdyYXBoaWNzTGF5
ZXIqLCBHcmFwaGljc0NvbnRleHQmLCBHcmFwaGljc0xheWVyUGFpbnRpbmdQaGFzZSwgY29uc3Qg
SW50UmVjdCYgaW5DbGlwKSBPVkVSUklERSB7IH0KKyAgICB2aXJ0dWFsIGJvb2wgc2hvd0RlYnVn
Qm9yZGVycyhjb25zdCBHcmFwaGljc0xheWVyKikgY29uc3QgT1ZFUlJJREUgeyByZXR1cm4gZmFs
c2U7IH0KKyAgICB2aXJ0dWFsIGJvb2wgc2hvd1JlcGFpbnRDb3VudGVyKGNvbnN0IEdyYXBoaWNz
TGF5ZXIqKSBjb25zdCBPVkVSUklERSB7IHJldHVybiBmYWxzZTsgfQogfTsKIAotVEVTVChHcmFw
aGljc0xheWVyQ2hyb21pdW1UZXN0LCB1cGRhdGVMYXllclByZXNlcnZlczNEV2l0aEFuaW1hdGlv
bnMpCi17Ci0gICAgTW9ja0dyYXBoaWNzTGF5ZXJDbGllbnQgY2xpZW50OwotICAgIE93blB0cjxH
cmFwaGljc0xheWVyQ2hyb21pdW0+IGdyYXBoaWNzTGF5ZXIgPSBzdGF0aWNfcG9pbnRlcl9jYXN0
PEdyYXBoaWNzTGF5ZXJDaHJvbWl1bT4oR3JhcGhpY3NMYXllcjo6Y3JlYXRlKCZjbGllbnQpKTsK
LSAgICBBU1NFUlRfVFJVRShncmFwaGljc0xheWVyLmdldCgpKTsKK2NsYXNzIE1vY2tMYXllclRy
ZWVIb3N0Q2xpZW50IDogcHVibGljIENDTGF5ZXJUcmVlSG9zdENsaWVudCB7CitwdWJsaWM6Cisg
ICAgdmlydHVhbCB2b2lkIHdpbGxCZWdpbkZyYW1lKCkgT1ZFUlJJREUgeyB9CisgICAgdmlydHVh
bCB2b2lkIGRpZEJlZ2luRnJhbWUoKSBPVkVSUklERSB7IH0KKyAgICB2aXJ0dWFsIHZvaWQgdXBk
YXRlQW5pbWF0aW9ucyhkb3VibGUgZnJhbWVCZWdpblRpbWUpIE9WRVJSSURFIHsgfQorICAgIHZp
cnR1YWwgdm9pZCBsYXlvdXQoKSBPVkVSUklERSB7IH0KKyAgICB2aXJ0dWFsIHZvaWQgYXBwbHlT
Y3JvbGxBbmRTY2FsZShjb25zdCBJbnRTaXplJiBzY3JvbGxEZWx0YSwgZmxvYXQgcGFnZVNjYWxl
KSBPVkVSUklERSB7IH0KKyAgICB2aXJ0dWFsIFBhc3NSZWZQdHI8R3JhcGhpY3NDb250ZXh0M0Q+
IGNyZWF0ZUNvbnRleHQzRCgpIE9WRVJSSURFCisgICAgeworICAgICAgICBHcmFwaGljc0NvbnRl
eHQzRDo6QXR0cmlidXRlcyBhdHRyczsKKyAgICAgICAgcmV0dXJuIGNyZWF0ZUNvbXBvc2l0b3JN
b2NrR3JhcGhpY3NDb250ZXh0M0QoYXR0cnMpOworICAgIH0KKyAgICB2aXJ0dWFsIHZvaWQgZGlk
UmVjcmVhdGVDb250ZXh0KGJvb2wgc3VjY2VzcykgT1ZFUlJJREUgeyB9CisgICAgdmlydHVhbCB2
b2lkIHdpbGxDb21taXQoKSBPVkVSUklERSB7IH0KKyAgICB2aXJ0dWFsIHZvaWQgZGlkQ29tbWl0
KCkgT1ZFUlJJREUgeyB9CisgICAgdmlydHVhbCB2b2lkIGRpZENvbW1pdEFuZERyYXdGcmFtZSgp
IE9WRVJSSURFIHsgfQorICAgIHZpcnR1YWwgdm9pZCBkaWRDb21wbGV0ZVN3YXBCdWZmZXJzKCkg
T1ZFUlJJREUgeyB9CisgICAgdmlydHVhbCB2b2lkIHNjaGVkdWxlQ29tcG9zaXRlKCkgT1ZFUlJJ
REUgeyB9Cit9OworCitjbGFzcyBNb2NrTGF5ZXJUcmVlSG9zdCA6IHB1YmxpYyBDQ0xheWVyVHJl
ZUhvc3QgeworcHVibGljOgorICAgIHN0YXRpYyBQYXNzT3duUHRyPE1vY2tMYXllclRyZWVIb3N0
PiBjcmVhdGUoKQorICAgIHsKKyAgICAgICAgLy8gRm9yIHRoZXNlIHRlc3RzLCB3ZSB3aWxsIGVu
YWJsZSB0aHJlYWRlZCBhbmltYXRpb25zLgorICAgICAgICBDQ1NldHRpbmdzIHNldHRpbmdzOwor
ICAgICAgICBzZXR0aW5ncy50aHJlYWRlZEFuaW1hdGlvbkVuYWJsZWQgPSB0cnVlOworICAgICAg
ICBPd25QdHI8TW9ja0xheWVyVHJlZUhvc3Q+IGxheWVyVHJlZUhvc3QoYWRvcHRQdHIobmV3IE1v
Y2tMYXllclRyZWVIb3N0KG5ldyBNb2NrTGF5ZXJUcmVlSG9zdENsaWVudCgpLCBzZXR0aW5ncykp
KTsKKyAgICAgICAgYm9vbCBzdWNjZXNzID0gbGF5ZXJUcmVlSG9zdC0+aW5pdGlhbGl6ZSgpOwor
ICAgICAgICBFWFBFQ1RfVFJVRShzdWNjZXNzKTsKKyAgICAgICAgbGF5ZXJUcmVlSG9zdC0+c2V0
Um9vdExheWVyKExheWVyQ2hyb21pdW06OmNyZWF0ZSgpKTsKKyAgICAgICAgbGF5ZXJUcmVlSG9z
dC0+c2V0Vmlld3BvcnRTaXplKEludFNpemUoMSwgMSkpOworICAgICAgICByZXR1cm4gbGF5ZXJU
cmVlSG9zdC5yZWxlYXNlKCk7CisgICAgfQorCisgICAgdmlydHVhbCBQYXNzT3duUHRyPENDTGF5
ZXJUcmVlSG9zdEltcGw+IGNyZWF0ZUxheWVyVHJlZUhvc3RJbXBsKENDTGF5ZXJUcmVlSG9zdElt
cGxDbGllbnQqIGNsaWVudCkKKyAgICB7CisgICAgICAgIC8vIEZvciB0aGVzZSB0ZXN0cywgd2Ug
d2lsbCBlbmFibGUgdGhyZWFkZWQgYW5pbWF0aW9ucy4KKyAgICAgICAgQ0NTZXR0aW5ncyBjb3B5
U2V0dGluZ3MgPSBzZXR0aW5ncygpOworICAgICAgICBjb3B5U2V0dGluZ3MudGhyZWFkZWRBbmlt
YXRpb25FbmFibGVkID0gdHJ1ZTsKKyAgICAgICAgcmV0dXJuIENDTGF5ZXJUcmVlSG9zdEltcGw6
OmNyZWF0ZShjb3B5U2V0dGluZ3MsIGNsaWVudCk7CisgICAgfQorCitwcml2YXRlOgorICAgIE1v
Y2tMYXllclRyZWVIb3N0KENDTGF5ZXJUcmVlSG9zdENsaWVudCogY2xpZW50LCBjb25zdCBDQ1Nl
dHRpbmdzJiBzZXR0aW5ncykKKyAgICAgICAgOiBDQ0xheWVyVHJlZUhvc3QoY2xpZW50LCBzZXR0
aW5ncykKKyAgICB7CisgICAgfQorfTsKKworY2xhc3MgR3JhcGhpY3NMYXllckNocm9taXVtVGVz
dCA6IHB1YmxpYyB0ZXN0aW5nOjpUZXN0IHsKK3B1YmxpYzoKKyAgICBHcmFwaGljc0xheWVyQ2hy
b21pdW1UZXN0KCkKKyAgICB7CisgICAgICAgIFdlYkNvbXBvc2l0b3I6OmluaXRpYWxpemUoMCk7
CisgICAgICAgIG1fZ3JhcGhpY3NMYXllciA9IHN0YXRpY19wb2ludGVyX2Nhc3Q8R3JhcGhpY3NM
YXllckNocm9taXVtPihHcmFwaGljc0xheWVyOjpjcmVhdGUoJm1fY2xpZW50KSk7CisgICAgICAg
IG1fcGxhdGZvcm1MYXllciA9IHN0YXRpY19jYXN0PExheWVyQ2hyb21pdW0qPihtX2dyYXBoaWNz
TGF5ZXItPnBsYXRmb3JtTGF5ZXIoKSk7CisgICAgICAgIG1fbGF5ZXJUcmVlSG9zdCA9IE1vY2tM
YXllclRyZWVIb3N0OjpjcmVhdGUoKTsKKyAgICAgICAgbV9wbGF0Zm9ybUxheWVyLT5zZXRMYXll
clRyZWVIb3N0KG1fbGF5ZXJUcmVlSG9zdC5nZXQoKSk7CisgICAgfQorCisgICAgdmlydHVhbCB+
R3JhcGhpY3NMYXllckNocm9taXVtVGVzdCgpCisgICAgeworICAgICAgICBtX2dyYXBoaWNzTGF5
ZXIuY2xlYXIoKTsKKyAgICAgICAgbV9sYXllclRyZWVIb3N0LmNsZWFyKCk7CisgICAgICAgIFdl
YkNvbXBvc2l0b3I6OnNodXRkb3duKCk7CisgICAgfQorCitwcm90ZWN0ZWQ6CisgICAgc3RhdGlj
IHZvaWQgZXhwZWN0VHJhbnNsYXRlWChkb3VibGUgdHJhbnNsYXRlWCwgY29uc3QgV2ViVHJhbnNm
b3JtYXRpb25NYXRyaXgmIG1hdHJpeCkKKyAgICB7CisgICAgICAgIEVYUEVDVF9GTE9BVF9FUSh0
cmFuc2xhdGVYLCBtYXRyaXgubTQxKCkpOworICAgIH0KKworICAgIExheWVyQ2hyb21pdW0qIG1f
cGxhdGZvcm1MYXllcjsKKyAgICBPd25QdHI8R3JhcGhpY3NMYXllckNocm9taXVtPiBtX2dyYXBo
aWNzTGF5ZXI7CisgICAgT3duUHRyPENDTGF5ZXJUcmVlSG9zdD4gbV9sYXllclRyZWVIb3N0Owog
Ci0gICAgTGF5ZXJDaHJvbWl1bSogcGxhdGZvcm1MYXllciA9IHN0YXRpY19jYXN0PExheWVyQ2hy
b21pdW0qPihncmFwaGljc0xheWVyLT5wbGF0Zm9ybUxheWVyKCkpOwotICAgIEFTU0VSVF9UUlVF
KHBsYXRmb3JtTGF5ZXIpOworcHJpdmF0ZToKKyAgICBNb2NrR3JhcGhpY3NMYXllckNsaWVudCBt
X2NsaWVudDsKKyAgICBEZWJ1Z1Njb3BlZFNldE1haW5UaHJlYWQgbV9tYWluOworfTsKIAotICAg
IEFTU0VSVF9GQUxTRShwbGF0Zm9ybUxheWVyLT5oYXNBY3RpdmVBbmltYXRpb24oKSk7CitURVNU
X0YoR3JhcGhpY3NMYXllckNocm9taXVtVGVzdCwgdXBkYXRlTGF5ZXJQcmVzZXJ2ZXMzRFdpdGhB
bmltYXRpb25zKQoreworICAgIEFTU0VSVF9GQUxTRShtX3BsYXRmb3JtTGF5ZXItPmhhc0FjdGl2
ZUFuaW1hdGlvbigpKTsKIAogICAgIE93blB0cjxDQ0FjdGl2ZUFuaW1hdGlvbj4gZmxvYXRBbmlt
YXRpb24oQ0NBY3RpdmVBbmltYXRpb246OmNyZWF0ZShhZG9wdFB0cihuZXcgRmFrZUZsb2F0QW5p
bWF0aW9uQ3VydmUpLCAwLCAxLCBDQ0FjdGl2ZUFuaW1hdGlvbjo6T3BhY2l0eSkpOwotICAgIHBs
YXRmb3JtTGF5ZXItPmxheWVyQW5pbWF0aW9uQ29udHJvbGxlcigpLT5hZGQoZmxvYXRBbmltYXRp
b24ucmVsZWFzZSgpKTsKKyAgICBtX3BsYXRmb3JtTGF5ZXItPmxheWVyQW5pbWF0aW9uQ29udHJv
bGxlcigpLT5hZGRBbmltYXRpb24oZmxvYXRBbmltYXRpb24ucmVsZWFzZSgpKTsKKworICAgIEFT
U0VSVF9UUlVFKG1fcGxhdGZvcm1MYXllci0+aGFzQWN0aXZlQW5pbWF0aW9uKCkpOworCisgICAg
bV9ncmFwaGljc0xheWVyLT5zZXRQcmVzZXJ2ZXMzRCh0cnVlKTsKKworICAgIG1fcGxhdGZvcm1M
YXllciA9IHN0YXRpY19jYXN0PExheWVyQ2hyb21pdW0qPihtX2dyYXBoaWNzTGF5ZXItPnBsYXRm
b3JtTGF5ZXIoKSk7CisgICAgQVNTRVJUX1RSVUUobV9wbGF0Zm9ybUxheWVyKTsKKworICAgIEFT
U0VSVF9UUlVFKG1fcGxhdGZvcm1MYXllci0+aGFzQWN0aXZlQW5pbWF0aW9uKCkpOworICAgIG1f
cGxhdGZvcm1MYXllci0+cmVtb3ZlQW5pbWF0aW9uKDApOworICAgIEFTU0VSVF9GQUxTRShtX3Bs
YXRmb3JtTGF5ZXItPmhhc0FjdGl2ZUFuaW1hdGlvbigpKTsKKworICAgIG1fZ3JhcGhpY3NMYXll
ci0+c2V0UHJlc2VydmVzM0QoZmFsc2UpOworCisgICAgbV9wbGF0Zm9ybUxheWVyID0gc3RhdGlj
X2Nhc3Q8TGF5ZXJDaHJvbWl1bSo+KG1fZ3JhcGhpY3NMYXllci0+cGxhdGZvcm1MYXllcigpKTsK
KyAgICBBU1NFUlRfVFJVRShtX3BsYXRmb3JtTGF5ZXIpOworCisgICAgQVNTRVJUX0ZBTFNFKG1f
cGxhdGZvcm1MYXllci0+aGFzQWN0aXZlQW5pbWF0aW9uKCkpOworfQorCitURVNUX0YoR3JhcGhp
Y3NMYXllckNocm9taXVtVGVzdCwgY3JlYXRlT3BhY2l0eUFuaW1hdGlvbikKK3sKKyAgICBjb25z
dCBkb3VibGUgZHVyYXRpb24gPSAxOworICAgIFdlYkNvcmU6OktleWZyYW1lVmFsdWVMaXN0IHZh
bHVlcyhBbmltYXRlZFByb3BlcnR5T3BhY2l0eSk7CisgICAgdmFsdWVzLmluc2VydChuZXcgRmxv
YXRBbmltYXRpb25WYWx1ZSgwLCAwKSk7CisgICAgdmFsdWVzLmluc2VydChuZXcgRmxvYXRBbmlt
YXRpb25WYWx1ZShkdXJhdGlvbiwgMSkpOworCisgICAgUmVmUHRyPEFuaW1hdGlvbj4gYW5pbWF0
aW9uID0gQW5pbWF0aW9uOjpjcmVhdGUoKTsKKyAgICBhbmltYXRpb24tPnNldER1cmF0aW9uKGR1
cmF0aW9uKTsKKworICAgIEludFNpemUgYm94U2l6ZTsKKyAgICBib29sIGFkZGVkQW5pbWF0aW9u
ID0gbV9ncmFwaGljc0xheWVyLT5hZGRBbmltYXRpb24odmFsdWVzLCBib3hTaXplLCBhbmltYXRp
b24uZ2V0KCksICIiLCAwKTsKKworICAgIEVYUEVDVF9UUlVFKGFkZGVkQW5pbWF0aW9uKTsKKwor
ICAgIEVYUEVDVF9UUlVFKG1fcGxhdGZvcm1MYXllci0+bGF5ZXJBbmltYXRpb25Db250cm9sbGVy
KCktPmhhc0FjdGl2ZUFuaW1hdGlvbigpKTsKKworICAgIENDQWN0aXZlQW5pbWF0aW9uKiBhY3Rp
dmVBbmltYXRpb24gPSBtX3BsYXRmb3JtTGF5ZXItPmxheWVyQW5pbWF0aW9uQ29udHJvbGxlcigp
LT5nZXRBY3RpdmVBbmltYXRpb24oQ0NBY3RpdmVBbmltYXRpb246Ok9wYWNpdHkpOworICAgIEVY
UEVDVF9UUlVFKGFjdGl2ZUFuaW1hdGlvbik7CisKKyAgICBFWFBFQ1RfRVEoMSwgYWN0aXZlQW5p
bWF0aW9uLT5pdGVyYXRpb25zKCkpOworICAgIEVYUEVDVF9FUShDQ0FjdGl2ZUFuaW1hdGlvbjo6
T3BhY2l0eSwgYWN0aXZlQW5pbWF0aW9uLT50YXJnZXRQcm9wZXJ0eSgpKTsKKworICAgIEVYUEVD
VF9FUShDQ0FuaW1hdGlvbkN1cnZlOjpGbG9hdCwgYWN0aXZlQW5pbWF0aW9uLT5jdXJ2ZSgpLT50
eXBlKCkpOworCisgICAgY29uc3QgQ0NGbG9hdEFuaW1hdGlvbkN1cnZlKiBjdXJ2ZSA9IGFjdGl2
ZUFuaW1hdGlvbi0+Y3VydmUoKS0+dG9GbG9hdEFuaW1hdGlvbkN1cnZlKCk7CisgICAgRVhQRUNU
X1RSVUUoY3VydmUpOworCisgICAgRVhQRUNUX0VRKDAsIGN1cnZlLT5nZXRWYWx1ZSgwKSk7Cisg
ICAgRVhQRUNUX0VRKDEsIGN1cnZlLT5nZXRWYWx1ZShkdXJhdGlvbikpOworfQorCitURVNUX0Yo
R3JhcGhpY3NMYXllckNocm9taXVtVGVzdCwgY3JlYXRlVHJhbnNmb3JtQW5pbWF0aW9uKQorewor
ICAgIGNvbnN0IGRvdWJsZSBkdXJhdGlvbiA9IDE7CisgICAgV2ViQ29yZTo6S2V5ZnJhbWVWYWx1
ZUxpc3QgdmFsdWVzKEFuaW1hdGVkUHJvcGVydHlXZWJraXRUcmFuc2Zvcm0pOworCisgICAgVHJh
bnNmb3JtT3BlcmF0aW9ucyBvcGVyYXRpb25zMTsKKyAgICBvcGVyYXRpb25zMS5vcGVyYXRpb25z
KCkuYXBwZW5kKFRyYW5zbGF0ZVRyYW5zZm9ybU9wZXJhdGlvbjo6Y3JlYXRlKExlbmd0aCgyLCBX
ZWJDb3JlOjpGaXhlZCksIExlbmd0aCgwLCBXZWJDb3JlOjpGaXhlZCksIFRyYW5zZm9ybU9wZXJh
dGlvbjo6VFJBTlNMQVRFX1gpKTsKKyAgICB2YWx1ZXMuaW5zZXJ0KG5ldyBUcmFuc2Zvcm1Bbmlt
YXRpb25WYWx1ZSgwLCAmb3BlcmF0aW9uczEpKTsKKworICAgIFRyYW5zZm9ybU9wZXJhdGlvbnMg
b3BlcmF0aW9uczI7CisgICAgb3BlcmF0aW9uczIub3BlcmF0aW9ucygpLmFwcGVuZChUcmFuc2xh
dGVUcmFuc2Zvcm1PcGVyYXRpb246OmNyZWF0ZShMZW5ndGgoNCwgV2ViQ29yZTo6Rml4ZWQpLCBM
ZW5ndGgoMCwgV2ViQ29yZTo6Rml4ZWQpLCBUcmFuc2Zvcm1PcGVyYXRpb246OlRSQU5TTEFURV9Y
KSk7CisgICAgdmFsdWVzLmluc2VydChuZXcgVHJhbnNmb3JtQW5pbWF0aW9uVmFsdWUoZHVyYXRp
b24sICZvcGVyYXRpb25zMikpOworCisgICAgUmVmUHRyPEFuaW1hdGlvbj4gYW5pbWF0aW9uID0g
QW5pbWF0aW9uOjpjcmVhdGUoKTsKKyAgICBhbmltYXRpb24tPnNldER1cmF0aW9uKGR1cmF0aW9u
KTsKKworICAgIEludFNpemUgYm94U2l6ZTsKKyAgICBtX2dyYXBoaWNzTGF5ZXItPmFkZEFuaW1h
dGlvbih2YWx1ZXMsIGJveFNpemUsIGFuaW1hdGlvbi5nZXQoKSwgIiIsIDApOworCisgICAgRVhQ
RUNUX1RSVUUobV9wbGF0Zm9ybUxheWVyLT5sYXllckFuaW1hdGlvbkNvbnRyb2xsZXIoKS0+aGFz
QWN0aXZlQW5pbWF0aW9uKCkpOworCisgICAgQ0NBY3RpdmVBbmltYXRpb24qIGFjdGl2ZUFuaW1h
dGlvbiA9IG1fcGxhdGZvcm1MYXllci0+bGF5ZXJBbmltYXRpb25Db250cm9sbGVyKCktPmdldEFj
dGl2ZUFuaW1hdGlvbihDQ0FjdGl2ZUFuaW1hdGlvbjo6VHJhbnNmb3JtKTsKKyAgICBFWFBFQ1Rf
VFJVRShhY3RpdmVBbmltYXRpb24pOworCisgICAgRVhQRUNUX0VRKDEsIGFjdGl2ZUFuaW1hdGlv
bi0+aXRlcmF0aW9ucygpKTsKKyAgICBFWFBFQ1RfRVEoQ0NBY3RpdmVBbmltYXRpb246OlRyYW5z
Zm9ybSwgYWN0aXZlQW5pbWF0aW9uLT50YXJnZXRQcm9wZXJ0eSgpKTsKKworICAgIEVYUEVDVF9F
UShDQ0FuaW1hdGlvbkN1cnZlOjpUcmFuc2Zvcm0sIGFjdGl2ZUFuaW1hdGlvbi0+Y3VydmUoKS0+
dHlwZSgpKTsKKworICAgIGNvbnN0IENDVHJhbnNmb3JtQW5pbWF0aW9uQ3VydmUqIGN1cnZlID0g
YWN0aXZlQW5pbWF0aW9uLT5jdXJ2ZSgpLT50b1RyYW5zZm9ybUFuaW1hdGlvbkN1cnZlKCk7Cisg
ICAgRVhQRUNUX1RSVUUoY3VydmUpOworCisgICAgZXhwZWN0VHJhbnNsYXRlWCgyLCBjdXJ2ZS0+
Z2V0VmFsdWUoMCkpOworICAgIGV4cGVjdFRyYW5zbGF0ZVgoNCwgY3VydmUtPmdldFZhbHVlKGR1
cmF0aW9uKSk7Cit9CisKK1RFU1RfRihHcmFwaGljc0xheWVyQ2hyb21pdW1UZXN0LCBjcmVhdGVU
cmFuc2Zvcm1BbmltYXRpb25XaXRoQmlnUm90YXRpb24pCit7CisgICAgY29uc3QgZG91YmxlIGR1
cmF0aW9uID0gMTsKKyAgICBXZWJDb3JlOjpLZXlmcmFtZVZhbHVlTGlzdCB2YWx1ZXMoQW5pbWF0
ZWRQcm9wZXJ0eVdlYmtpdFRyYW5zZm9ybSk7CisKKyAgICBUcmFuc2Zvcm1PcGVyYXRpb25zIG9w
ZXJhdGlvbnMxOworICAgIG9wZXJhdGlvbnMxLm9wZXJhdGlvbnMoKS5hcHBlbmQoUm90YXRlVHJh
bnNmb3JtT3BlcmF0aW9uOjpjcmVhdGUoMCwgVHJhbnNmb3JtT3BlcmF0aW9uOjpST1RBVEUpKTsK
KyAgICB2YWx1ZXMuaW5zZXJ0KG5ldyBUcmFuc2Zvcm1BbmltYXRpb25WYWx1ZSgwLCAmb3BlcmF0
aW9uczEpKTsKKworICAgIFRyYW5zZm9ybU9wZXJhdGlvbnMgb3BlcmF0aW9uczI7CisgICAgb3Bl
cmF0aW9uczIub3BlcmF0aW9ucygpLmFwcGVuZChSb3RhdGVUcmFuc2Zvcm1PcGVyYXRpb246OmNy
ZWF0ZSgyNzAsIFRyYW5zZm9ybU9wZXJhdGlvbjo6Uk9UQVRFKSk7CisgICAgdmFsdWVzLmluc2Vy
dChuZXcgVHJhbnNmb3JtQW5pbWF0aW9uVmFsdWUoZHVyYXRpb24sICZvcGVyYXRpb25zMikpOwor
CisgICAgUmVmUHRyPEFuaW1hdGlvbj4gYW5pbWF0aW9uID0gQW5pbWF0aW9uOjpjcmVhdGUoKTsK
KyAgICBhbmltYXRpb24tPnNldER1cmF0aW9uKGR1cmF0aW9uKTsKKworICAgIEludFNpemUgYm94
U2l6ZTsKKyAgICBtX2dyYXBoaWNzTGF5ZXItPmFkZEFuaW1hdGlvbih2YWx1ZXMsIGJveFNpemUs
IGFuaW1hdGlvbi5nZXQoKSwgIiIsIDApOworCisgICAgRVhQRUNUX0ZBTFNFKG1fcGxhdGZvcm1M
YXllci0+bGF5ZXJBbmltYXRpb25Db250cm9sbGVyKCktPmhhc0FjdGl2ZUFuaW1hdGlvbigpKTsK
K30KKworVEVTVF9GKEdyYXBoaWNzTGF5ZXJDaHJvbWl1bVRlc3QsIGNyZWF0ZVRyYW5zZm9ybUFu
aW1hdGlvbldpdGhTaW5ndWxhck1hdHJpeCkKK3sKKyAgICBjb25zdCBkb3VibGUgZHVyYXRpb24g
PSAxOworICAgIFdlYkNvcmU6OktleWZyYW1lVmFsdWVMaXN0IHZhbHVlcyhBbmltYXRlZFByb3Bl
cnR5V2Via2l0VHJhbnNmb3JtKTsKKworICAgIFRyYW5zZm9ybWF0aW9uTWF0cml4IG1hdHJpeDE7
CisgICAgVHJhbnNmb3JtT3BlcmF0aW9ucyBvcGVyYXRpb25zMTsKKyAgICBvcGVyYXRpb25zMS5v
cGVyYXRpb25zKCkuYXBwZW5kKE1hdHJpeDNEVHJhbnNmb3JtT3BlcmF0aW9uOjpjcmVhdGUobWF0
cml4MSkpOworICAgIHZhbHVlcy5pbnNlcnQobmV3IFRyYW5zZm9ybUFuaW1hdGlvblZhbHVlKDAs
ICZvcGVyYXRpb25zMSkpOworCisgICAgVHJhbnNmb3JtYXRpb25NYXRyaXggbWF0cml4MjsKKyAg
ICBtYXRyaXgyLnNldE0xMSgwKTsKKyAgICBUcmFuc2Zvcm1PcGVyYXRpb25zIG9wZXJhdGlvbnMy
OworICAgIG9wZXJhdGlvbnMyLm9wZXJhdGlvbnMoKS5hcHBlbmQoTWF0cml4M0RUcmFuc2Zvcm1P
cGVyYXRpb246OmNyZWF0ZShtYXRyaXgyKSk7CisgICAgdmFsdWVzLmluc2VydChuZXcgVHJhbnNm
b3JtQW5pbWF0aW9uVmFsdWUoZHVyYXRpb24sICZvcGVyYXRpb25zMikpOworCisgICAgUmVmUHRy
PEFuaW1hdGlvbj4gYW5pbWF0aW9uID0gQW5pbWF0aW9uOjpjcmVhdGUoKTsKKyAgICBhbmltYXRp
b24tPnNldER1cmF0aW9uKGR1cmF0aW9uKTsKKworICAgIEludFNpemUgYm94U2l6ZTsKKyAgICBt
X2dyYXBoaWNzTGF5ZXItPmFkZEFuaW1hdGlvbih2YWx1ZXMsIGJveFNpemUsIGFuaW1hdGlvbi5n
ZXQoKSwgIiIsIDApOworCisgICAgRVhQRUNUX0ZBTFNFKG1fcGxhdGZvcm1MYXllci0+bGF5ZXJB
bmltYXRpb25Db250cm9sbGVyKCktPmhhc0FjdGl2ZUFuaW1hdGlvbigpKTsKK30KKworVEVTVF9G
KEdyYXBoaWNzTGF5ZXJDaHJvbWl1bVRlc3QsIGNyZWF0ZVJldmVyc2VkQW5pbWF0aW9uKQorewor
ICAgIGNvbnN0IGRvdWJsZSBkdXJhdGlvbiA9IDE7CisgICAgV2ViQ29yZTo6S2V5ZnJhbWVWYWx1
ZUxpc3QgdmFsdWVzKEFuaW1hdGVkUHJvcGVydHlXZWJraXRUcmFuc2Zvcm0pOworCisgICAgVHJh
bnNmb3JtT3BlcmF0aW9ucyBvcGVyYXRpb25zMTsKKyAgICBvcGVyYXRpb25zMS5vcGVyYXRpb25z
KCkuYXBwZW5kKFRyYW5zbGF0ZVRyYW5zZm9ybU9wZXJhdGlvbjo6Y3JlYXRlKExlbmd0aCgyLCBX
ZWJDb3JlOjpGaXhlZCksIExlbmd0aCgwLCBXZWJDb3JlOjpGaXhlZCksIFRyYW5zZm9ybU9wZXJh
dGlvbjo6VFJBTlNMQVRFX1gpKTsKKyAgICB2YWx1ZXMuaW5zZXJ0KG5ldyBUcmFuc2Zvcm1Bbmlt
YXRpb25WYWx1ZSgwLCAmb3BlcmF0aW9uczEpKTsKKworICAgIFRyYW5zZm9ybU9wZXJhdGlvbnMg
b3BlcmF0aW9uczI7CisgICAgb3BlcmF0aW9uczIub3BlcmF0aW9ucygpLmFwcGVuZChUcmFuc2xh
dGVUcmFuc2Zvcm1PcGVyYXRpb246OmNyZWF0ZShMZW5ndGgoNCwgV2ViQ29yZTo6Rml4ZWQpLCBM
ZW5ndGgoMCwgV2ViQ29yZTo6Rml4ZWQpLCBUcmFuc2Zvcm1PcGVyYXRpb246OlRSQU5TTEFURV9Y
KSk7CisgICAgdmFsdWVzLmluc2VydChuZXcgVHJhbnNmb3JtQW5pbWF0aW9uVmFsdWUoZHVyYXRp
b24sICZvcGVyYXRpb25zMikpOworCisgICAgUmVmUHRyPEFuaW1hdGlvbj4gYW5pbWF0aW9uID0g
QW5pbWF0aW9uOjpjcmVhdGUoKTsKKyAgICBhbmltYXRpb24tPnNldER1cmF0aW9uKGR1cmF0aW9u
KTsKKyAgICBhbmltYXRpb24tPnNldERpcmVjdGlvbihBbmltYXRpb246OkFuaW1hdGlvbkRpcmVj
dGlvblJldmVyc2UpOworCisgICAgSW50U2l6ZSBib3hTaXplOworICAgIG1fZ3JhcGhpY3NMYXll
ci0+YWRkQW5pbWF0aW9uKHZhbHVlcywgYm94U2l6ZSwgYW5pbWF0aW9uLmdldCgpLCAiIiwgMCk7
CisKKyAgICBFWFBFQ1RfVFJVRShtX3BsYXRmb3JtTGF5ZXItPmxheWVyQW5pbWF0aW9uQ29udHJv
bGxlcigpLT5oYXNBY3RpdmVBbmltYXRpb24oKSk7CisKKyAgICBDQ0FjdGl2ZUFuaW1hdGlvbiog
YWN0aXZlQW5pbWF0aW9uID0gbV9wbGF0Zm9ybUxheWVyLT5sYXllckFuaW1hdGlvbkNvbnRyb2xs
ZXIoKS0+Z2V0QWN0aXZlQW5pbWF0aW9uKENDQWN0aXZlQW5pbWF0aW9uOjpUcmFuc2Zvcm0pOwor
ICAgIEVYUEVDVF9UUlVFKGFjdGl2ZUFuaW1hdGlvbik7CisKKyAgICBFWFBFQ1RfRVEoMSwgYWN0
aXZlQW5pbWF0aW9uLT5pdGVyYXRpb25zKCkpOworICAgIEVYUEVDVF9FUShDQ0FjdGl2ZUFuaW1h
dGlvbjo6VHJhbnNmb3JtLCBhY3RpdmVBbmltYXRpb24tPnRhcmdldFByb3BlcnR5KCkpOworCisg
ICAgRVhQRUNUX0VRKENDQW5pbWF0aW9uQ3VydmU6OlRyYW5zZm9ybSwgYWN0aXZlQW5pbWF0aW9u
LT5jdXJ2ZSgpLT50eXBlKCkpOworCisgICAgY29uc3QgQ0NUcmFuc2Zvcm1BbmltYXRpb25DdXJ2
ZSogY3VydmUgPSBhY3RpdmVBbmltYXRpb24tPmN1cnZlKCktPnRvVHJhbnNmb3JtQW5pbWF0aW9u
Q3VydmUoKTsKKyAgICBFWFBFQ1RfVFJVRShjdXJ2ZSk7CisKKyAgICBleHBlY3RUcmFuc2xhdGVY
KDQsIGN1cnZlLT5nZXRWYWx1ZSgwKSk7CisgICAgZXhwZWN0VHJhbnNsYXRlWCgyLCBjdXJ2ZS0+
Z2V0VmFsdWUoZHVyYXRpb24pKTsKK30KKworVEVTVF9GKEdyYXBoaWNzTGF5ZXJDaHJvbWl1bVRl
c3QsIGNyZWF0ZUFsdGVybmF0aW5nQW5pbWF0aW9uKQoreworICAgIGNvbnN0IGRvdWJsZSBkdXJh
dGlvbiA9IDE7CisgICAgV2ViQ29yZTo6S2V5ZnJhbWVWYWx1ZUxpc3QgdmFsdWVzKEFuaW1hdGVk
UHJvcGVydHlXZWJraXRUcmFuc2Zvcm0pOworCisgICAgVHJhbnNmb3JtT3BlcmF0aW9ucyBvcGVy
YXRpb25zMTsKKyAgICBvcGVyYXRpb25zMS5vcGVyYXRpb25zKCkuYXBwZW5kKFRyYW5zbGF0ZVRy
YW5zZm9ybU9wZXJhdGlvbjo6Y3JlYXRlKExlbmd0aCgyLCBXZWJDb3JlOjpGaXhlZCksIExlbmd0
aCgwLCBXZWJDb3JlOjpGaXhlZCksIFRyYW5zZm9ybU9wZXJhdGlvbjo6VFJBTlNMQVRFX1gpKTsK
KyAgICB2YWx1ZXMuaW5zZXJ0KG5ldyBUcmFuc2Zvcm1BbmltYXRpb25WYWx1ZSgwLCAmb3BlcmF0
aW9uczEpKTsKKworICAgIFRyYW5zZm9ybU9wZXJhdGlvbnMgb3BlcmF0aW9uczI7CisgICAgb3Bl
cmF0aW9uczIub3BlcmF0aW9ucygpLmFwcGVuZChUcmFuc2xhdGVUcmFuc2Zvcm1PcGVyYXRpb246
OmNyZWF0ZShMZW5ndGgoNCwgV2ViQ29yZTo6Rml4ZWQpLCBMZW5ndGgoMCwgV2ViQ29yZTo6Rml4
ZWQpLCBUcmFuc2Zvcm1PcGVyYXRpb246OlRSQU5TTEFURV9YKSk7CisgICAgdmFsdWVzLmluc2Vy
dChuZXcgVHJhbnNmb3JtQW5pbWF0aW9uVmFsdWUoZHVyYXRpb24sICZvcGVyYXRpb25zMikpOwor
CisgICAgUmVmUHRyPEFuaW1hdGlvbj4gYW5pbWF0aW9uID0gQW5pbWF0aW9uOjpjcmVhdGUoKTsK
KyAgICBhbmltYXRpb24tPnNldER1cmF0aW9uKGR1cmF0aW9uKTsKKyAgICBhbmltYXRpb24tPnNl
dERpcmVjdGlvbihBbmltYXRpb246OkFuaW1hdGlvbkRpcmVjdGlvbkFsdGVybmF0ZSk7CisgICAg
YW5pbWF0aW9uLT5zZXRJdGVyYXRpb25Db3VudCgyKTsKKworICAgIEludFNpemUgYm94U2l6ZTsK
KyAgICBtX2dyYXBoaWNzTGF5ZXItPmFkZEFuaW1hdGlvbih2YWx1ZXMsIGJveFNpemUsIGFuaW1h
dGlvbi5nZXQoKSwgIiIsIDApOworCisgICAgRVhQRUNUX1RSVUUobV9wbGF0Zm9ybUxheWVyLT5s
YXllckFuaW1hdGlvbkNvbnRyb2xsZXIoKS0+aGFzQWN0aXZlQW5pbWF0aW9uKCkpOworCisgICAg
Q0NBY3RpdmVBbmltYXRpb24qIGFjdGl2ZUFuaW1hdGlvbiA9IG1fcGxhdGZvcm1MYXllci0+bGF5
ZXJBbmltYXRpb25Db250cm9sbGVyKCktPmdldEFjdGl2ZUFuaW1hdGlvbihDQ0FjdGl2ZUFuaW1h
dGlvbjo6VHJhbnNmb3JtKTsKKyAgICBFWFBFQ1RfVFJVRShhY3RpdmVBbmltYXRpb24pOworICAg
IEVYUEVDVF9UUlVFKGFjdGl2ZUFuaW1hdGlvbi0+YWx0ZXJuYXRlc0RpcmVjdGlvbigpKTsKKwor
ICAgIEVYUEVDVF9FUSgyLCBhY3RpdmVBbmltYXRpb24tPml0ZXJhdGlvbnMoKSk7CisgICAgRVhQ
RUNUX0VRKENDQWN0aXZlQW5pbWF0aW9uOjpUcmFuc2Zvcm0sIGFjdGl2ZUFuaW1hdGlvbi0+dGFy
Z2V0UHJvcGVydHkoKSk7CisKKyAgICBFWFBFQ1RfRVEoQ0NBbmltYXRpb25DdXJ2ZTo6VHJhbnNm
b3JtLCBhY3RpdmVBbmltYXRpb24tPmN1cnZlKCktPnR5cGUoKSk7CisKKyAgICBjb25zdCBDQ1Ry
YW5zZm9ybUFuaW1hdGlvbkN1cnZlKiBjdXJ2ZSA9IGFjdGl2ZUFuaW1hdGlvbi0+Y3VydmUoKS0+
dG9UcmFuc2Zvcm1BbmltYXRpb25DdXJ2ZSgpOworICAgIEVYUEVDVF9UUlVFKGN1cnZlKTsKKwor
ICAgIGV4cGVjdFRyYW5zbGF0ZVgoMiwgY3VydmUtPmdldFZhbHVlKDApKTsKKyAgICBleHBlY3RU
cmFuc2xhdGVYKDQsIGN1cnZlLT5nZXRWYWx1ZShkdXJhdGlvbikpOworfQorCitURVNUX0YoR3Jh
cGhpY3NMYXllckNocm9taXVtVGVzdCwgY3JlYXRlUmV2ZXJzZWRBbHRlcm5hdGluZ0FuaW1hdGlv
bikKK3sKKyAgICBjb25zdCBkb3VibGUgZHVyYXRpb24gPSAxOworICAgIFdlYkNvcmU6OktleWZy
YW1lVmFsdWVMaXN0IHZhbHVlcyhBbmltYXRlZFByb3BlcnR5V2Via2l0VHJhbnNmb3JtKTsKKwor
ICAgIFRyYW5zZm9ybU9wZXJhdGlvbnMgb3BlcmF0aW9uczE7CisgICAgb3BlcmF0aW9uczEub3Bl
cmF0aW9ucygpLmFwcGVuZChUcmFuc2xhdGVUcmFuc2Zvcm1PcGVyYXRpb246OmNyZWF0ZShMZW5n
dGgoMiwgV2ViQ29yZTo6Rml4ZWQpLCBMZW5ndGgoMCwgV2ViQ29yZTo6Rml4ZWQpLCBUcmFuc2Zv
cm1PcGVyYXRpb246OlRSQU5TTEFURV9YKSk7CisgICAgdmFsdWVzLmluc2VydChuZXcgVHJhbnNm
b3JtQW5pbWF0aW9uVmFsdWUoMCwgJm9wZXJhdGlvbnMxKSk7CisKKyAgICBUcmFuc2Zvcm1PcGVy
YXRpb25zIG9wZXJhdGlvbnMyOworICAgIG9wZXJhdGlvbnMyLm9wZXJhdGlvbnMoKS5hcHBlbmQo
VHJhbnNsYXRlVHJhbnNmb3JtT3BlcmF0aW9uOjpjcmVhdGUoTGVuZ3RoKDQsIFdlYkNvcmU6OkZp
eGVkKSwgTGVuZ3RoKDAsIFdlYkNvcmU6OkZpeGVkKSwgVHJhbnNmb3JtT3BlcmF0aW9uOjpUUkFO
U0xBVEVfWCkpOworICAgIHZhbHVlcy5pbnNlcnQobmV3IFRyYW5zZm9ybUFuaW1hdGlvblZhbHVl
KGR1cmF0aW9uLCAmb3BlcmF0aW9uczIpKTsKKworICAgIFJlZlB0cjxBbmltYXRpb24+IGFuaW1h
dGlvbiA9IEFuaW1hdGlvbjo6Y3JlYXRlKCk7CisgICAgYW5pbWF0aW9uLT5zZXREdXJhdGlvbihk
dXJhdGlvbik7CisgICAgYW5pbWF0aW9uLT5zZXREaXJlY3Rpb24oQW5pbWF0aW9uOjpBbmltYXRp
b25EaXJlY3Rpb25BbHRlcm5hdGVSZXZlcnNlKTsKKyAgICBhbmltYXRpb24tPnNldEl0ZXJhdGlv
bkNvdW50KDIpOwogCi0gICAgQVNTRVJUX1RSVUUocGxhdGZvcm1MYXllci0+aGFzQWN0aXZlQW5p
bWF0aW9uKCkpOworICAgIEludFNpemUgYm94U2l6ZTsKKyAgICBtX2dyYXBoaWNzTGF5ZXItPmFk
ZEFuaW1hdGlvbih2YWx1ZXMsIGJveFNpemUsIGFuaW1hdGlvbi5nZXQoKSwgIiIsIDApOwogCi0g
ICAgZ3JhcGhpY3NMYXllci0+c2V0UHJlc2VydmVzM0QodHJ1ZSk7CisgICAgRVhQRUNUX1RSVUUo
bV9wbGF0Zm9ybUxheWVyLT5sYXllckFuaW1hdGlvbkNvbnRyb2xsZXIoKS0+aGFzQWN0aXZlQW5p
bWF0aW9uKCkpOwogCi0gICAgcGxhdGZvcm1MYXllciA9IHN0YXRpY19jYXN0PExheWVyQ2hyb21p
dW0qPihncmFwaGljc0xheWVyLT5wbGF0Zm9ybUxheWVyKCkpOwotICAgIEFTU0VSVF9UUlVFKHBs
YXRmb3JtTGF5ZXIpOworICAgIENDQWN0aXZlQW5pbWF0aW9uKiBhY3RpdmVBbmltYXRpb24gPSBt
X3BsYXRmb3JtTGF5ZXItPmxheWVyQW5pbWF0aW9uQ29udHJvbGxlcigpLT5nZXRBY3RpdmVBbmlt
YXRpb24oQ0NBY3RpdmVBbmltYXRpb246OlRyYW5zZm9ybSk7CisgICAgRVhQRUNUX1RSVUUoYWN0
aXZlQW5pbWF0aW9uKTsKKyAgICBFWFBFQ1RfVFJVRShhY3RpdmVBbmltYXRpb24tPmFsdGVybmF0
ZXNEaXJlY3Rpb24oKSk7CiAKLSAgICBBU1NFUlRfVFJVRShwbGF0Zm9ybUxheWVyLT5oYXNBY3Rp
dmVBbmltYXRpb24oKSk7Ci0gICAgcGxhdGZvcm1MYXllci0+cmVtb3ZlQW5pbWF0aW9uKDApOwot
ICAgIEFTU0VSVF9GQUxTRShwbGF0Zm9ybUxheWVyLT5oYXNBY3RpdmVBbmltYXRpb24oKSk7Cisg
ICAgRVhQRUNUX0VRKDIsIGFjdGl2ZUFuaW1hdGlvbi0+aXRlcmF0aW9ucygpKTsKKyAgICBFWFBF
Q1RfRVEoQ0NBY3RpdmVBbmltYXRpb246OlRyYW5zZm9ybSwgYWN0aXZlQW5pbWF0aW9uLT50YXJn
ZXRQcm9wZXJ0eSgpKTsKIAotICAgIGdyYXBoaWNzTGF5ZXItPnNldFByZXNlcnZlczNEKGZhbHNl
KTsKKyAgICBFWFBFQ1RfRVEoQ0NBbmltYXRpb25DdXJ2ZTo6VHJhbnNmb3JtLCBhY3RpdmVBbmlt
YXRpb24tPmN1cnZlKCktPnR5cGUoKSk7CiAKLSAgICBwbGF0Zm9ybUxheWVyID0gc3RhdGljX2Nh
c3Q8TGF5ZXJDaHJvbWl1bSo+KGdyYXBoaWNzTGF5ZXItPnBsYXRmb3JtTGF5ZXIoKSk7Ci0gICAg
QVNTRVJUX1RSVUUocGxhdGZvcm1MYXllcik7CisgICAgY29uc3QgQ0NUcmFuc2Zvcm1BbmltYXRp
b25DdXJ2ZSogY3VydmUgPSBhY3RpdmVBbmltYXRpb24tPmN1cnZlKCktPnRvVHJhbnNmb3JtQW5p
bWF0aW9uQ3VydmUoKTsKKyAgICBFWFBFQ1RfVFJVRShjdXJ2ZSk7CiAKLSAgICBBU1NFUlRfRkFM
U0UocGxhdGZvcm1MYXllci0+aGFzQWN0aXZlQW5pbWF0aW9uKCkpOworICAgIGV4cGVjdFRyYW5z
bGF0ZVgoNCwgY3VydmUtPmdldFZhbHVlKDApKTsKKyAgICBleHBlY3RUcmFuc2xhdGVYKDIsIGN1
cnZlLT5nZXRWYWx1ZShkdXJhdGlvbikpOwogfQogCiB9IC8vIG5hbWVzcGFjZQpkaWZmIC0tZ2l0
IGEvU291cmNlL1dlYktpdC9jaHJvbWl1bS90ZXN0cy9MYXllckNocm9taXVtVGVzdC5jcHAgYi9T
b3VyY2UvV2ViS2l0L2Nocm9taXVtL3Rlc3RzL0xheWVyQ2hyb21pdW1UZXN0LmNwcAppbmRleCA4
MjEzZGQ4MTIwNzFlNWEzNTBjMmQ1ZjE3NjBlMGJiZmE4ZDQ4ZjVlLi45NTQxNzRhYjc2MzU3YTcx
MzI0MDFhMWQwYTNjYzgzOGM4ZWQ5MWE5IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViS2l0L2Nocm9t
aXVtL3Rlc3RzL0xheWVyQ2hyb21pdW1UZXN0LmNwcAorKysgYi9Tb3VyY2UvV2ViS2l0L2Nocm9t
aXVtL3Rlc3RzL0xheWVyQ2hyb21pdW1UZXN0LmNwcApAQCAtODAsMTEgKzgwLDEzIEBAIHByb3Rl
Y3RlZDoKICAgICB7CiAgICAgICAgIC8vIEluaXRpYWxpemUgd2l0aG91dCB0aHJlYWRpbmcgc3Vw
cG9ydC4KICAgICAgICAgV2ViS2l0OjpXZWJDb21wb3NpdG9yOjppbml0aWFsaXplKDApOworICAg
ICAgICBEZWJ1Z1Njb3BlZFNldE1haW5UaHJlYWQgbWFpbjsKICAgICAgICAgbV9sYXllclRyZWVI
b3N0ID0gYWRvcHRQdHIobmV3IE1vY2tDQ0xheWVyVHJlZUhvc3QpOwogICAgIH0KIAogICAgIHZp
cnR1YWwgdm9pZCBUZWFyRG93bigpCiAgICAgeworICAgICAgICBEZWJ1Z1Njb3BlZFNldE1haW5U
aHJlYWQgbWFpbjsKICAgICAgICAgTW9jazo6VmVyaWZ5QW5kQ2xlYXJFeHBlY3RhdGlvbnMobV9s
YXllclRyZWVIb3N0LmdldCgpKTsKICAgICAgICAgRVhQRUNUX0NBTEwoKm1fbGF5ZXJUcmVlSG9z
dCwgc2V0TmVlZHNDb21taXQoKSkuVGltZXMoQW55TnVtYmVyKCkpOwogICAgICAgICBtX3BhcmVu
dC5jbGVhcigpOwpAQCAtNjM5LDYgKzY0MSw3IEBAIHZvaWQgYXNzZXJ0TGF5ZXJUcmVlSG9zdE1h
dGNoZXNGb3JTdWJ0cmVlKExheWVyQ2hyb21pdW0qIGxheWVyLCBDQ0xheWVyVHJlZUhvc3QqCiBU
RVNUKExheWVyQ2hyb21pdW1MYXllclRyZWVIb3N0VGVzdCwgZW50ZXJpbmdUcmVlKQogewogICAg
IFdlYktpdDo6V2ViQ29tcG9zaXRvcjo6aW5pdGlhbGl6ZSgwKTsKKyAgICBEZWJ1Z1Njb3BlZFNl
dE1haW5UaHJlYWQgbWFpbjsKICAgICBSZWZQdHI8TGF5ZXJDaHJvbWl1bT4gcGFyZW50ID0gTGF5
ZXJDaHJvbWl1bTo6Y3JlYXRlKCk7CiAgICAgUmVmUHRyPExheWVyQ2hyb21pdW0+IGNoaWxkID0g
TGF5ZXJDaHJvbWl1bTo6Y3JlYXRlKCk7CiAgICAgUmVmUHRyPExheWVyQ2hyb21pdW0+IG1hc2sg
PSBMYXllckNocm9taXVtOjpjcmVhdGUoKTsKQEAgLTY3MSw2ICs2NzQsNyBAQCBURVNUKExheWVy
Q2hyb21pdW1MYXllclRyZWVIb3N0VGVzdCwgZW50ZXJpbmdUcmVlKQogVEVTVChMYXllckNocm9t
aXVtTGF5ZXJUcmVlSG9zdFRlc3QsIGFkZGluZ0xheWVyU3VidHJlZSkKIHsKICAgICBXZWJLaXQ6
OldlYkNvbXBvc2l0b3I6OmluaXRpYWxpemUoMCk7CisgICAgRGVidWdTY29wZWRTZXRNYWluVGhy
ZWFkIG1haW47CiAgICAgUmVmUHRyPExheWVyQ2hyb21pdW0+IHBhcmVudCA9IExheWVyQ2hyb21p
dW06OmNyZWF0ZSgpOwogICAgIE93blB0cjxGYWtlQ0NMYXllclRyZWVIb3N0PiBsYXllclRyZWVI
b3N0KEZha2VDQ0xheWVyVHJlZUhvc3Q6OmNyZWF0ZSgpKTsKIApAQCAtNzAyLDYgKzcwNiw3IEBA
IFRFU1QoTGF5ZXJDaHJvbWl1bUxheWVyVHJlZUhvc3RUZXN0LCBhZGRpbmdMYXllclN1YnRyZWUp
CiBURVNUKExheWVyQ2hyb21pdW1MYXllclRyZWVIb3N0VGVzdCwgY2hhbmdlSG9zdCkKIHsKICAg
ICBXZWJLaXQ6OldlYkNvbXBvc2l0b3I6OmluaXRpYWxpemUoMCk7CisgICAgRGVidWdTY29wZWRT
ZXRNYWluVGhyZWFkIG1haW47CiAgICAgUmVmUHRyPExheWVyQ2hyb21pdW0+IHBhcmVudCA9IExh
eWVyQ2hyb21pdW06OmNyZWF0ZSgpOwogICAgIFJlZlB0cjxMYXllckNocm9taXVtPiBjaGlsZCA9
IExheWVyQ2hyb21pdW06OmNyZWF0ZSgpOwogICAgIFJlZlB0cjxMYXllckNocm9taXVtPiBtYXNr
ID0gTGF5ZXJDaHJvbWl1bTo6Y3JlYXRlKCk7CkBAIC03MzUsNiArNzQwLDcgQEAgVEVTVChMYXll
ckNocm9taXVtTGF5ZXJUcmVlSG9zdFRlc3QsIGNoYW5nZUhvc3QpCiBURVNUKExheWVyQ2hyb21p
dW1MYXllclRyZWVIb3N0VGVzdCwgY2hhbmdlSG9zdEluU3VidHJlZSkKIHsKICAgICBXZWJLaXQ6
OldlYkNvbXBvc2l0b3I6OmluaXRpYWxpemUoMCk7CisgICAgRGVidWdTY29wZWRTZXRNYWluVGhy
ZWFkIG1haW47CiAgICAgUmVmUHRyPExheWVyQ2hyb21pdW0+IGZpcnN0UGFyZW50ID0gTGF5ZXJD
aHJvbWl1bTo6Y3JlYXRlKCk7CiAgICAgUmVmUHRyPExheWVyQ2hyb21pdW0+IGZpcnN0Q2hpbGQg
PSBMYXllckNocm9taXVtOjpjcmVhdGUoKTsKICAgICBSZWZQdHI8TGF5ZXJDaHJvbWl1bT4gc2Vj
b25kUGFyZW50ID0gTGF5ZXJDaHJvbWl1bTo6Y3JlYXRlKCk7CkBAIC03NzIsNiArNzc4LDcgQEAg
VEVTVChMYXllckNocm9taXVtTGF5ZXJUcmVlSG9zdFRlc3QsIGNoYW5nZUhvc3RJblN1YnRyZWUp
CiBURVNUKExheWVyQ2hyb21pdW1MYXllclRyZWVIb3N0VGVzdCwgcmVwbGFjZU1hc2tBbmRSZXBs
aWNhTGF5ZXIpCiB7CiAgICAgV2ViS2l0OjpXZWJDb21wb3NpdG9yOjppbml0aWFsaXplKDApOwor
ICAgIERlYnVnU2NvcGVkU2V0TWFpblRocmVhZCBtYWluOwogICAgIFJlZlB0cjxMYXllckNocm9t
aXVtPiBwYXJlbnQgPSBMYXllckNocm9taXVtOjpjcmVhdGUoKTsKICAgICBSZWZQdHI8TGF5ZXJD
aHJvbWl1bT4gbWFzayA9IExheWVyQ2hyb21pdW06OmNyZWF0ZSgpOwogICAgIFJlZlB0cjxMYXll
ckNocm9taXVtPiByZXBsaWNhID0gTGF5ZXJDaHJvbWl1bTo6Y3JlYXRlKCk7Cg==
</data>

          </attachment>
          <attachment
              isobsolete="0"
              ispatch="1"
              isprivate="0"
          >
            <attachid>146609</attachid>
            <date>2012-06-08 11:03:45 -0700</date>
            <delta_ts>2012-06-08 11:42:02 -0700</delta_ts>
            <desc>patch for landing</desc>
            <filename>bug-87686-20120608140344.patch</filename>
            <type>text/plain</type>
            <size>105869</size>
            <attacher>vollick</attacher>
            
              <data encoding="base64">U3VidmVyc2lvbiBSZXZpc2lvbjogMTE5ODI2CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9D
aGFuZ2VMb2cgYi9Tb3VyY2UvV2ViQ29yZS9DaGFuZ2VMb2cKaW5kZXggYWFkYjQzMTNiZjBiYWZh
NTY3MjA2ZmRhYWM4Y2ZmZjQzN2U5YjY3Ny4uZDk5MmRlMTdjYWU2MDY0ZWU5OTAyOTNmYTRiMWQ4
NWYzYWZkOTM4YSAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvQ2hhbmdlTG9nCisrKyBiL1Nv
dXJjZS9XZWJDb3JlL0NoYW5nZUxvZwpAQCAtMSwzICsxLDcxIEBACisyMDEyLTA2LTA1ICBJYW4g
Vm9sbGljayAgPHZvbGxpY2tAY2hyb21pdW0ub3JnPgorCisgICAgICAgIFtjaHJvbWl1bV0gQWNj
ZWxlcmF0ZWQgYW5pbWF0aW9ucyBzaG91bGQgdXNlIFdlYlRyYW5zZm9ybU9wZXJhdGlvbnMKKyAg
ICAgICAgaHR0cHM6Ly9idWdzLndlYmtpdC5vcmcvc2hvd19idWcuY2dpP2lkPTg3Njg2CisKKyAg
ICAgICAgUmV2aWV3ZWQgYnkgSmFtZXMgUm9iaW5zb24uCisKKyAgICAgICAgQ0NUcmFuc2Zvcm1L
ZXlmcmFtZSBuZXcgb3ducyBhIFdlYlRyYW5zZm9ybU9wZXJhdGlvbnMgcmF0aGVyIHRoYW4gYQor
ICAgICAgICBUcmFuc2Zvcm1PcGVyYXRpb25zLiBMYXllckNocm9taXVtJ3MgQVBJIGhhcyBiZWVu
IGNoYW5nZWQgc28gdGhhdAorICAgICAgICBMYXllckNocm9taXVtOjphZGRBbmltYXRpb24gc2hv
dWxkIHRha2Ugb25seSBhIENDQWN0aXZlQW5pbWF0aW9uLgorICAgICAgICBHcmFwaGljc0xheWVy
Q2hyb21pdW0gaXMgbmV3IHJlc3BvbnNpYmxlIGZvciB0cmFuc2xhdGluZyB0bworICAgICAgICBX
ZWJUcmFuc2Zvcm1PcGVyYXRpb25zIGFuZCBjcmVhdGluZyBDQ0FjdGl2ZUFuaW1hdGlvbnMuIFRl
c3RzIHRoYXQgdXNlCisgICAgICAgIHRoZSBwdWJsaWMgQVBJICh0aGF0IGlzLCB0aGV5IGNhbGwg
YWRkQW5pbWF0aW9uIHdpdGggS2V5ZnJhbWVWYWx1ZUxpc3QKKyAgICAgICAgYW5kIEFuaW1hdGlv
biBhcmd1bWVudHMpIGhhdmUgYmVlbiBtb3ZlZCB0byBHcmFwaGljc0xheWVyQ2hyb21pdW1UZXN0
LgorCisgICAgICAgICBVbml0IHRlc3RzOgorICAgICAgICAgICAgR3JhcGhpY3NMYXllckNocm9t
aXVtVGVzdC5jcmVhdGVPcGFjaXR5QW5pbWF0aW9uCisgICAgICAgICAgICBHcmFwaGljc0xheWVy
Q2hyb21pdW1UZXN0LmNyZWF0ZVRyYW5zZm9ybUFuaW1hdGlvbgorICAgICAgICAgICAgR3JhcGhp
Y3NMYXllckNocm9taXVtVGVzdC5jcmVhdGVUcmFuc2Zvcm1BbmltYXRpb25XaXRoQmlnUm90YXRp
b24KKyAgICAgICAgICAgIEdyYXBoaWNzTGF5ZXJDaHJvbWl1bVRlc3QuY3JlYXRlVHJhbnNmb3Jt
QW5pbWF0aW9uV2l0aFNpbmd1bGFyTWF0cml4CisgICAgICAgICAgICBHcmFwaGljc0xheWVyQ2hy
b21pdW1UZXN0LmNyZWF0ZVJldmVyc2VkQW5pbWF0aW9uCisgICAgICAgICAgICBHcmFwaGljc0xh
eWVyQ2hyb21pdW1UZXN0LmNyZWF0ZUFsdGVybmF0aW5nQW5pbWF0aW9uCisgICAgICAgICAgICBH
cmFwaGljc0xheWVyQ2hyb21pdW1UZXN0LmNyZWF0ZVJldmVyc2VkQWx0ZXJuYXRpbmdBbmltYXRp
b24KKworICAgICAgICAqIFdlYkNvcmUuZ3lwaToKKyAgICAgICAgKiBwbGF0Zm9ybS9ncmFwaGlj
cy9jaHJvbWl1bS9BbmltYXRpb25UcmFuc2xhdGlvblV0aWwuY3BwOiBBZGRlZC4KKyAgICAgICAg
KFdlYkNvcmUpOgorICAgICAgICAoV2ViQ29yZTo6dG9XZWJUcmFuc2Zvcm1PcGVyYXRpb25zKToK
KyAgICAgICAgKFdlYkNvcmU6OmFwcGVuZEtleWZyYW1lKToKKyAgICAgICAgKFdlYkNvcmU6OkND
S2V5ZnJhbWVkVHJhbnNmb3JtQW5pbWF0aW9uQ3VydmUpOgorICAgICAgICAoV2ViQ29yZTo6Y3Jl
YXRlQWN0aXZlQW5pbWF0aW9uKToKKyAgICAgICAgKiBwbGF0Zm9ybS9ncmFwaGljcy9jaHJvbWl1
bS9BbmltYXRpb25UcmFuc2xhdGlvblV0aWwuaDogQWRkZWQuCisgICAgICAgIChXZWJDb3JlKToK
KyAgICAgICAgKiBwbGF0Zm9ybS9ncmFwaGljcy9jaHJvbWl1bS9HcmFwaGljc0xheWVyQ2hyb21p
dW0uY3BwOgorICAgICAgICAoV2ViQ29yZTo6R3JhcGhpY3NMYXllckNocm9taXVtOjphZGRBbmlt
YXRpb24pOgorICAgICAgICAqIHBsYXRmb3JtL2dyYXBoaWNzL2Nocm9taXVtL0xheWVyQ2hyb21p
dW0uY3BwOgorICAgICAgICAoV2ViQ29yZTo6TGF5ZXJDaHJvbWl1bTo6YWRkQW5pbWF0aW9uKToK
KyAgICAgICAgKiBwbGF0Zm9ybS9ncmFwaGljcy9jaHJvbWl1bS9MYXllckNocm9taXVtLmg6Cisg
ICAgICAgIChXZWJDb3JlKToKKyAgICAgICAgKFdlYkNvcmU6OkxheWVyQ2hyb21pdW06OmJvdW5k
cyk6CisgICAgICAgIChMYXllckNocm9taXVtKToKKyAgICAgICAgKiBwbGF0Zm9ybS9ncmFwaGlj
cy9jaHJvbWl1bS9MaW5rSGlnaGxpZ2h0LmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OkxpbmtIaWdo
bGlnaHQ6OkxpbmtIaWdobGlnaHQpOgorICAgICAgICAqIHBsYXRmb3JtL2dyYXBoaWNzL2Nocm9t
aXVtL2NjL0NDQW5pbWF0aW9uQ3VydmUuaDoKKyAgICAgICAgKENDVHJhbnNmb3JtQW5pbWF0aW9u
Q3VydmUpOgorICAgICAgICAqIHBsYXRmb3JtL2dyYXBoaWNzL2Nocm9taXVtL2NjL0NDS2V5ZnJh
bWVkQW5pbWF0aW9uQ3VydmUuY3BwOgorICAgICAgICAoV2ViQ29yZTo6Q0NUcmFuc2Zvcm1LZXlm
cmFtZTo6Y3JlYXRlKToKKyAgICAgICAgKFdlYkNvcmU6OkNDVHJhbnNmb3JtS2V5ZnJhbWU6OkND
VHJhbnNmb3JtS2V5ZnJhbWUpOgorICAgICAgICAoV2ViQ29yZTo6Q0NUcmFuc2Zvcm1LZXlmcmFt
ZTo6dmFsdWUpOgorICAgICAgICAoV2ViQ29yZTo6Q0NUcmFuc2Zvcm1LZXlmcmFtZTo6Y2xvbmUp
OgorICAgICAgICAoV2ViQ29yZTo6Q0NLZXlmcmFtZWRUcmFuc2Zvcm1BbmltYXRpb25DdXJ2ZTo6
Z2V0VmFsdWUpOgorICAgICAgICAqIHBsYXRmb3JtL2dyYXBoaWNzL2Nocm9taXVtL2NjL0NDS2V5
ZnJhbWVkQW5pbWF0aW9uQ3VydmUuaDoKKyAgICAgICAgKENDVHJhbnNmb3JtS2V5ZnJhbWUpOgor
ICAgICAgICAoQ0NLZXlmcmFtZWRUcmFuc2Zvcm1BbmltYXRpb25DdXJ2ZSk6CisgICAgICAgICog
cGxhdGZvcm0vZ3JhcGhpY3MvY2hyb21pdW0vY2MvQ0NMYXllckFuaW1hdGlvbkNvbnRyb2xsZXIu
Y3BwOgorICAgICAgICAoV2ViQ29yZTo6Q0NMYXllckFuaW1hdGlvbkNvbnRyb2xsZXI6OnJlbW92
ZUFuaW1hdGlvbik6CisgICAgICAgIChXZWJDb3JlKToKKyAgICAgICAgKFdlYkNvcmU6OkNDTGF5
ZXJBbmltYXRpb25Db250cm9sbGVyOjphZGRBbmltYXRpb24pOgorICAgICAgICAoV2ViQ29yZTo6
Q0NMYXllckFuaW1hdGlvbkNvbnRyb2xsZXI6OmdldEFjdGl2ZUFuaW1hdGlvbik6CisgICAgICAg
IChXZWJDb3JlOjpDQ0xheWVyQW5pbWF0aW9uQ29udHJvbGxlcjo6cHVzaE5ld0FuaW1hdGlvbnNU
b0ltcGxUaHJlYWQpOgorICAgICAgICAoV2ViQ29yZTo6Q0NMYXllckFuaW1hdGlvbkNvbnRyb2xs
ZXI6OnJlcGxhY2VJbXBsVGhyZWFkQW5pbWF0aW9ucyk6CisgICAgICAgIChXZWJDb3JlOjpDQ0xh
eWVyQW5pbWF0aW9uQ29udHJvbGxlcjo6dGlja0FuaW1hdGlvbnMpOgorICAgICAgICAqIHBsYXRm
b3JtL2dyYXBoaWNzL2Nocm9taXVtL2NjL0NDTGF5ZXJBbmltYXRpb25Db250cm9sbGVyLmg6Cisg
ICAgICAgIChDQ0xheWVyQW5pbWF0aW9uQ29udHJvbGxlckNsaWVudCk6CisgICAgICAgIChDQ0xh
eWVyQW5pbWF0aW9uQ29udHJvbGxlcik6CisgICAgICAgICogcGxhdGZvcm0vZ3JhcGhpY3MvY2hy
b21pdW0vY2MvQ0NMYXllckltcGwuaDoKKyAgICAgICAgKFdlYkNvcmU6OkNDTGF5ZXJJbXBsOjpi
b3VuZHMpOgorCiAyMDEyLTA2LTA4ICBCcnlhbiBNY1F1YWRlICA8Ym1jcXVhZGVAZ29vZ2xlLmNv
bT4KIAogICAgICAgICBXZWIgSW5zcGVjdG9yOiBBbm5vdGF0ZSB0aW1lbGluZSByZWNvcmRzIHdp
dGggYSBmcmFtZSBpZGVudGlmaWVyCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViS2l0L2Nocm9taXVt
L0NoYW5nZUxvZyBiL1NvdXJjZS9XZWJLaXQvY2hyb21pdW0vQ2hhbmdlTG9nCmluZGV4IDM0ZmI2
ZmUzYjViNTU4OGZkOWQ0ZDEzYTllODczOWFkN2MxNDRlMDIuLmUzYThjNDA4ZTVmYTdjMWE2NDlh
OTk3OWZjYWUwZGQ0MjQ5MTVjODYgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJLaXQvY2hyb21pdW0v
Q2hhbmdlTG9nCisrKyBiL1NvdXJjZS9XZWJLaXQvY2hyb21pdW0vQ2hhbmdlTG9nCkBAIC0xLDMg
KzEsNDEgQEAKKzIwMTItMDYtMDUgIElhbiBWb2xsaWNrICA8dm9sbGlja0BjaHJvbWl1bS5vcmc+
CisKKyAgICAgICAgW2Nocm9taXVtXSBBY2NlbGVyYXRlZCBhbmltYXRpb25zIHNob3VsZCB1c2Ug
V2ViVHJhbnNmb3JtT3BlcmF0aW9ucworICAgICAgICBodHRwczovL2J1Z3Mud2Via2l0Lm9yZy9z
aG93X2J1Zy5jZ2k/aWQ9ODc2ODYKKworICAgICAgICBSZXZpZXdlZCBieSBKYW1lcyBSb2JpbnNv
bi4KKworICAgICAgICBDQ1RyYW5zZm9ybUtleWZyYW1lIG5ldyBvd25zIGEgV2ViVHJhbnNmb3Jt
T3BlcmF0aW9ucyByYXRoZXIgdGhhbiBhCisgICAgICAgIFRyYW5zZm9ybU9wZXJhdGlvbnMuIExh
eWVyQ2hyb21pdW0ncyBBUEkgaGFzIGJlZW4gY2hhbmdlZCBzbyB0aGF0CisgICAgICAgIExheWVy
Q2hyb21pdW06OmFkZEFuaW1hdGlvbiBzaG91bGQgdGFrZSBvbmx5IGEgQ0NBY3RpdmVBbmltYXRp
b24uCisgICAgICAgIEdyYXBoaWNzTGF5ZXJDaHJvbWl1bSBpcyBuZXcgcmVzcG9uc2libGUgZm9y
IHRyYW5zbGF0aW5nIHRvCisgICAgICAgIFdlYlRyYW5zZm9ybU9wZXJhdGlvbnMgYW5kIGNyZWF0
aW5nIENDQWN0aXZlQW5pbWF0aW9ucy4gVGVzdHMgdGhhdCB1c2UKKyAgICAgICAgdGhlIHB1Ymxp
YyBBUEkgKHRoYXQgaXMsIHRoZXkgY2FsbCBhZGRBbmltYXRpb24gd2l0aCBLZXlmcmFtZVZhbHVl
TGlzdAorICAgICAgICBhbmQgQW5pbWF0aW9uIGFyZ3VtZW50cykgaGF2ZSBiZWVuIG1vdmVkIHRv
IEdyYXBoaWNzTGF5ZXJDaHJvbWl1bVRlc3QuCisKKyAgICAgICAgKiB0ZXN0cy9DQ0FuaW1hdGlv
blRlc3RDb21tb24uY3BwOgorICAgICAgICAoV2ViQ29yZTo6YWRkT3BhY2l0eVRyYW5zaXRpb24p
OgorICAgICAgICAoV2ViQ29yZTo6YWRkQW5pbWF0ZWRUcmFuc2Zvcm0pOgorICAgICAgICAoV2Vi
S2l0VGVzdHM6OkZha2VUcmFuc2Zvcm1UcmFuc2l0aW9uOjpnZXRWYWx1ZSk6CisgICAgICAgICog
dGVzdHMvQ0NBbmltYXRpb25UZXN0Q29tbW9uLmg6CisgICAgICAgICogdGVzdHMvQ0NLZXlmcmFt
ZWRBbmltYXRpb25DdXJ2ZVRlc3QuY3BwOgorICAgICAgICAqIHRlc3RzL0NDTGF5ZXJBbmltYXRp
b25Db250cm9sbGVyVGVzdC5jcHA6CisgICAgICAgICogdGVzdHMvQ0NMYXllclRyZWVIb3N0VGVz
dC5jcHA6CisgICAgICAgIChXVEY6OkNDTGF5ZXJUcmVlSG9zdFRlc3RMYXllckFkZGVkV2l0aEFu
aW1hdGlvbjo6YmVnaW5UZXN0KToKKyAgICAgICAgKiB0ZXN0cy9HcmFwaGljc0xheWVyQ2hyb21p
dW1UZXN0LmNwcDoKKyAgICAgICAgKE1vY2tMYXllclRyZWVIb3N0Q2xpZW50KToKKyAgICAgICAg
KFdlYktpdFRlc3RzKToKKyAgICAgICAgKE1vY2tMYXllclRyZWVIb3N0KToKKyAgICAgICAgKFdl
YktpdFRlc3RzOjpNb2NrTGF5ZXJUcmVlSG9zdDo6Y3JlYXRlKToKKyAgICAgICAgKFdlYktpdFRl
c3RzOjpNb2NrTGF5ZXJUcmVlSG9zdDo6Y3JlYXRlTGF5ZXJUcmVlSG9zdEltcGwpOgorICAgICAg
ICAoV2ViS2l0VGVzdHM6Ok1vY2tMYXllclRyZWVIb3N0OjpNb2NrTGF5ZXJUcmVlSG9zdCk6Cisg
ICAgICAgIChHcmFwaGljc0xheWVyQ2hyb21pdW1UZXN0KToKKyAgICAgICAgKFdlYktpdFRlc3Rz
OjpHcmFwaGljc0xheWVyQ2hyb21pdW1UZXN0OjpHcmFwaGljc0xheWVyQ2hyb21pdW1UZXN0KToK
KyAgICAgICAgKFdlYktpdFRlc3RzOjpHcmFwaGljc0xheWVyQ2hyb21pdW1UZXN0Ojp+R3JhcGhp
Y3NMYXllckNocm9taXVtVGVzdCk6CisgICAgICAgIChXZWJLaXRUZXN0czo6R3JhcGhpY3NMYXll
ckNocm9taXVtVGVzdDo6ZXhwZWN0VHJhbnNsYXRlWCk6CisgICAgICAgIChXZWJLaXRUZXN0czo6
VEVTVF9GKToKKyAgICAgICAgKiB0ZXN0cy9MYXllckNocm9taXVtVGVzdC5jcHA6CisKIDIwMTIt
MDYtMDggIFRhaWp1IFRzdWlraSAgPHR6aWtAY2hyb21pdW0ub3JnPgogCiAgICAgICAgIEFkZCBG
aWxlU3lzdGVtIGl0ZW0gdG8gc3RvcmFnZSB0cmVlLgpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNv
cmUvV2ViQ29yZS5neXBpIGIvU291cmNlL1dlYkNvcmUvV2ViQ29yZS5neXBpCmluZGV4IDBhODlk
MjVjYzhmYTI4NGNkYzQyMDdhOThmNzBmZTgzZGM0ODAwZjkuLjg3NjQzMmI1Y2IzYzVmZGFiNTk3
NjJhM2EzOGQ1YmQ3ZWM1ZjczYTggMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL1dlYkNvcmUu
Z3lwaQorKysgYi9Tb3VyY2UvV2ViQ29yZS9XZWJDb3JlLmd5cGkKQEAgLTM1NTgsNiArMzU1OCw4
IEBACiAgICAgICAgICAgICAncGxhdGZvcm0vZ3JhcGhpY3MvY2cvVHJhbnNmb3JtYXRpb25NYXRy
aXhDRy5jcHAnLAogICAgICAgICAgICAgJ3BsYXRmb3JtL2dyYXBoaWNzL2Nocm9taXVtL0FuaW1h
dGlvbklkVmVuZG9yLmNwcCcsCiAgICAgICAgICAgICAncGxhdGZvcm0vZ3JhcGhpY3MvY2hyb21p
dW0vQW5pbWF0aW9uSWRWZW5kb3IuaCcsCisgICAgICAgICAgICAncGxhdGZvcm0vZ3JhcGhpY3Mv
Y2hyb21pdW0vQW5pbWF0aW9uVHJhbnNsYXRpb25VdGlsLmNwcCcsCisgICAgICAgICAgICAncGxh
dGZvcm0vZ3JhcGhpY3MvY2hyb21pdW0vQW5pbWF0aW9uVHJhbnNsYXRpb25VdGlsLmgnLAogICAg
ICAgICAgICAgJ3BsYXRmb3JtL2dyYXBoaWNzL2Nocm9taXVtL0JpdG1hcENhbnZhc0xheWVyVGV4
dHVyZVVwZGF0ZXIuY3BwJywKICAgICAgICAgICAgICdwbGF0Zm9ybS9ncmFwaGljcy9jaHJvbWl1
bS9CaXRtYXBDYW52YXNMYXllclRleHR1cmVVcGRhdGVyLmgnLAogICAgICAgICAgICAgJ3BsYXRm
b3JtL2dyYXBoaWNzL2Nocm9taXVtL0JpdG1hcFNrUGljdHVyZUNhbnZhc0xheWVyVGV4dHVyZVVw
ZGF0ZXIuY3BwJywKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNz
L2Nocm9taXVtL0FuaW1hdGlvblRyYW5zbGF0aW9uVXRpbC5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9w
bGF0Zm9ybS9ncmFwaGljcy9jaHJvbWl1bS9BbmltYXRpb25UcmFuc2xhdGlvblV0aWwuY3BwCm5l
dyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAuLjQyYzk1MmYwNzIxY2NiNjMwMGNmOGI1MmEzYWQ1ZmQ4YmRjYmMwNjQKLS0tIC9k
ZXYvbnVsbAorKysgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9jaHJvbWl1bS9B
bmltYXRpb25UcmFuc2xhdGlvblV0aWwuY3BwCkBAIC0wLDAgKzEsMjI5IEBACisvKgorICogQ29w
eXJpZ2h0IChDKSAyMDEyIEdvb2dsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKgorICog
UmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBv
ciB3aXRob3V0CisgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0
aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKKyAqIGFyZSBtZXQ6CisgKiAxLiAgUmVkaXN0cmlidXRp
b25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAg
ICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2Ns
YWltZXIuCisgKiAyLiAgUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9k
dWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25k
aXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCisgKiAgICAgZG9jdW1l
bnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1
dGlvbi4KKyAqCisgKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExFIElOQy4gQU5E
IElUUyBDT05UUklCVVRPUlMgYGBBUyBJUycnIEFORCBBTlkKKyAqIEVYUFJFU1MgT1IgSU1QTElF
RCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgVEhFIElNUExJRUQK
KyAqIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJ
Q1VMQVIgUFVSUE9TRSBBUkUKKyAqIERJU0NMQUlNRUQuIElOIE5PIEVWRU5UIFNIQUxMIEFQUExF
IElOQy4gT1IgSVRTIENPTlRSSUJVVE9SUyBCRSBMSUFCTEUgRk9SIEFOWQorICogRElSRUNULCBJ
TkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwgRVhFTVBMQVJZLCBPUiBDT05TRVFVRU5USUFM
IERBTUFHRVMKKyAqIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgUFJPQ1VSRU1FTlQg
T0YgU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsKKyAqIExPU1MgT0YgVVNFLCBEQVRBLCBP
UiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBP
TgorICogQU5ZIFRIRU9SWSBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklD
VCBMSUFCSUxJVFksIE9SIFRPUlQKKyAqIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJ
U0UpIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRSBPRiBUSElTCisgKiBTT0ZUV0FS
RSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4KKyAq
LworCisjaW5jbHVkZSAiY29uZmlnLmgiCisKKyNpbmNsdWRlICJBbmltYXRpb25UcmFuc2xhdGlv
blV0aWwuaCIKKworI2luY2x1ZGUgIkZsb2F0U2l6ZS5oIgorI2luY2x1ZGUgIkdyYXBoaWNzTGF5
ZXIuaCIKKyNpbmNsdWRlICJJZGVudGl0eVRyYW5zZm9ybU9wZXJhdGlvbi5oIgorI2luY2x1ZGUg
Ikxlbmd0aC5oIgorI2luY2x1ZGUgIkxlbmd0aEZ1bmN0aW9ucy5oIgorI2luY2x1ZGUgIk1hdHJp
eDNEVHJhbnNmb3JtT3BlcmF0aW9uLmgiCisjaW5jbHVkZSAiTWF0cml4VHJhbnNmb3JtT3BlcmF0
aW9uLmgiCisjaW5jbHVkZSAiUGVyc3BlY3RpdmVUcmFuc2Zvcm1PcGVyYXRpb24uaCIKKyNpbmNs
dWRlICJSb3RhdGVUcmFuc2Zvcm1PcGVyYXRpb24uaCIKKyNpbmNsdWRlICJTY2FsZVRyYW5zZm9y
bU9wZXJhdGlvbi5oIgorI2luY2x1ZGUgIlNrZXdUcmFuc2Zvcm1PcGVyYXRpb24uaCIKKyNpbmNs
dWRlICJUcmFuc2Zvcm1PcGVyYXRpb25zLmgiCisjaW5jbHVkZSAiVHJhbnNsYXRlVHJhbnNmb3Jt
T3BlcmF0aW9uLmgiCisKKyNpbmNsdWRlICJjYy9DQ0FjdGl2ZUFuaW1hdGlvbi5oIgorI2luY2x1
ZGUgImNjL0NDS2V5ZnJhbWVkQW5pbWF0aW9uQ3VydmUuaCIKKworI2luY2x1ZGUgPHB1YmxpYy9X
ZWJUcmFuc2Zvcm1PcGVyYXRpb25zLmg+CisjaW5jbHVkZSA8cHVibGljL1dlYlRyYW5zZm9ybWF0
aW9uTWF0cml4Lmg+CisKKyNpbmNsdWRlIDx3dGYvT3duUHRyLmg+CisjaW5jbHVkZSA8d3RmL3Rl
eHQvQ1N0cmluZy5oPgorCit1c2luZyBuYW1lc3BhY2Ugc3RkOwordXNpbmcgbmFtZXNwYWNlIFdl
YktpdDsKKworbmFtZXNwYWNlIFdlYkNvcmUgeworCitXZWJUcmFuc2Zvcm1PcGVyYXRpb25zIHRv
V2ViVHJhbnNmb3JtT3BlcmF0aW9ucyhjb25zdCBUcmFuc2Zvcm1PcGVyYXRpb25zJiB0cmFuc2Zv
cm1PcGVyYXRpb25zLCBjb25zdCBGbG9hdFNpemUmIGJveFNpemUpCit7CisgICAgLy8gV2UgbmVl
ZCB0byBkbyBhIGRlZXAgY29weSB0aGUgdHJhbnNmb3JtT3BlcmF0aW9ucyBtYXkgY29udGFpbiBy
ZWYgcG9pbnRlcnMgdG8gVHJhbnNmb3JtT3BlcmF0aW9uIG9iamVjdHMuCisgICAgV2ViVHJhbnNm
b3JtT3BlcmF0aW9ucyB3ZWJUcmFuc2Zvcm1PcGVyYXRpb25zOworICAgIGZvciAoc2l6ZV90IGog
PSAwOyBqIDwgdHJhbnNmb3JtT3BlcmF0aW9ucy5zaXplKCk7ICsraikgeworICAgICAgICBUcmFu
c2Zvcm1PcGVyYXRpb246Ok9wZXJhdGlvblR5cGUgb3BlcmF0aW9uVHlwZSA9IHRyYW5zZm9ybU9w
ZXJhdGlvbnMub3BlcmF0aW9ucygpW2pdLT5nZXRPcGVyYXRpb25UeXBlKCk7CisgICAgICAgIHN3
aXRjaCAob3BlcmF0aW9uVHlwZSkgeworICAgICAgICBjYXNlIFRyYW5zZm9ybU9wZXJhdGlvbjo6
U0NBTEVfWDoKKyAgICAgICAgY2FzZSBUcmFuc2Zvcm1PcGVyYXRpb246OlNDQUxFX1k6CisgICAg
ICAgIGNhc2UgVHJhbnNmb3JtT3BlcmF0aW9uOjpTQ0FMRV9aOgorICAgICAgICBjYXNlIFRyYW5z
Zm9ybU9wZXJhdGlvbjo6U0NBTEVfM0Q6CisgICAgICAgIGNhc2UgVHJhbnNmb3JtT3BlcmF0aW9u
OjpTQ0FMRTogeworICAgICAgICAgICAgU2NhbGVUcmFuc2Zvcm1PcGVyYXRpb24qIHRyYW5zZm9y
bSA9IHN0YXRpY19jYXN0PFNjYWxlVHJhbnNmb3JtT3BlcmF0aW9uKj4odHJhbnNmb3JtT3BlcmF0
aW9ucy5vcGVyYXRpb25zKClbal0uZ2V0KCkpOworICAgICAgICAgICAgd2ViVHJhbnNmb3JtT3Bl
cmF0aW9ucy5hcHBlbmRTY2FsZSh0cmFuc2Zvcm0tPngoKSwgdHJhbnNmb3JtLT55KCksIHRyYW5z
Zm9ybS0+eigpKTsKKyAgICAgICAgICAgIGJyZWFrOworICAgICAgICB9CisgICAgICAgIGNhc2Ug
VHJhbnNmb3JtT3BlcmF0aW9uOjpUUkFOU0xBVEVfWDoKKyAgICAgICAgY2FzZSBUcmFuc2Zvcm1P
cGVyYXRpb246OlRSQU5TTEFURV9ZOgorICAgICAgICBjYXNlIFRyYW5zZm9ybU9wZXJhdGlvbjo6
VFJBTlNMQVRFX1o6CisgICAgICAgIGNhc2UgVHJhbnNmb3JtT3BlcmF0aW9uOjpUUkFOU0xBVEVf
M0Q6CisgICAgICAgIGNhc2UgVHJhbnNmb3JtT3BlcmF0aW9uOjpUUkFOU0xBVEU6IHsKKyAgICAg
ICAgICAgIFRyYW5zbGF0ZVRyYW5zZm9ybU9wZXJhdGlvbiogdHJhbnNmb3JtID0gc3RhdGljX2Nh
c3Q8VHJhbnNsYXRlVHJhbnNmb3JtT3BlcmF0aW9uKj4odHJhbnNmb3JtT3BlcmF0aW9ucy5vcGVy
YXRpb25zKClbal0uZ2V0KCkpOworICAgICAgICAgICAgd2ViVHJhbnNmb3JtT3BlcmF0aW9ucy5h
cHBlbmRUcmFuc2xhdGUoZmxvYXRWYWx1ZUZvckxlbmd0aCh0cmFuc2Zvcm0tPngoKSwgYm94U2l6
ZS53aWR0aCgpKSwgZmxvYXRWYWx1ZUZvckxlbmd0aCh0cmFuc2Zvcm0tPnkoKSwgYm94U2l6ZS5o
ZWlnaHQoKSksIGZsb2F0VmFsdWVGb3JMZW5ndGgodHJhbnNmb3JtLT56KCksIDEpKTsKKyAgICAg
ICAgICAgIGJyZWFrOworICAgICAgICB9CisgICAgICAgIGNhc2UgVHJhbnNmb3JtT3BlcmF0aW9u
OjpST1RBVEVfWDoKKyAgICAgICAgY2FzZSBUcmFuc2Zvcm1PcGVyYXRpb246OlJPVEFURV9ZOgor
ICAgICAgICBjYXNlIFRyYW5zZm9ybU9wZXJhdGlvbjo6Uk9UQVRFXzNEOgorICAgICAgICBjYXNl
IFRyYW5zZm9ybU9wZXJhdGlvbjo6Uk9UQVRFOiB7CisgICAgICAgICAgICBSb3RhdGVUcmFuc2Zv
cm1PcGVyYXRpb24qIHRyYW5zZm9ybSA9IHN0YXRpY19jYXN0PFJvdGF0ZVRyYW5zZm9ybU9wZXJh
dGlvbio+KHRyYW5zZm9ybU9wZXJhdGlvbnMub3BlcmF0aW9ucygpW2pdLmdldCgpKTsKKyAgICAg
ICAgICAgIHdlYlRyYW5zZm9ybU9wZXJhdGlvbnMuYXBwZW5kUm90YXRlKHRyYW5zZm9ybS0+eCgp
LCB0cmFuc2Zvcm0tPnkoKSwgdHJhbnNmb3JtLT56KCksIHRyYW5zZm9ybS0+YW5nbGUoKSk7Cisg
ICAgICAgICAgICBicmVhazsKKyAgICAgICAgfQorICAgICAgICBjYXNlIFRyYW5zZm9ybU9wZXJh
dGlvbjo6U0tFV19YOgorICAgICAgICBjYXNlIFRyYW5zZm9ybU9wZXJhdGlvbjo6U0tFV19ZOgor
ICAgICAgICBjYXNlIFRyYW5zZm9ybU9wZXJhdGlvbjo6U0tFVzogeworICAgICAgICAgICAgU2tl
d1RyYW5zZm9ybU9wZXJhdGlvbiogdHJhbnNmb3JtID0gc3RhdGljX2Nhc3Q8U2tld1RyYW5zZm9y
bU9wZXJhdGlvbio+KHRyYW5zZm9ybU9wZXJhdGlvbnMub3BlcmF0aW9ucygpW2pdLmdldCgpKTsK
KyAgICAgICAgICAgIHdlYlRyYW5zZm9ybU9wZXJhdGlvbnMuYXBwZW5kU2tldyh0cmFuc2Zvcm0t
PmFuZ2xlWCgpLCB0cmFuc2Zvcm0tPmFuZ2xlWSgpKTsKKyAgICAgICAgICAgIGJyZWFrOworICAg
ICAgICB9CisgICAgICAgIGNhc2UgVHJhbnNmb3JtT3BlcmF0aW9uOjpNQVRSSVg6IHsKKyAgICAg
ICAgICAgIE1hdHJpeFRyYW5zZm9ybU9wZXJhdGlvbiogdHJhbnNmb3JtID0gc3RhdGljX2Nhc3Q8
TWF0cml4VHJhbnNmb3JtT3BlcmF0aW9uKj4odHJhbnNmb3JtT3BlcmF0aW9ucy5vcGVyYXRpb25z
KClbal0uZ2V0KCkpOworICAgICAgICAgICAgVHJhbnNmb3JtYXRpb25NYXRyaXggbSA9IHRyYW5z
Zm9ybS0+bWF0cml4KCk7CisgICAgICAgICAgICB3ZWJUcmFuc2Zvcm1PcGVyYXRpb25zLmFwcGVu
ZE1hdHJpeChXZWJUcmFuc2Zvcm1hdGlvbk1hdHJpeChtKSk7CisgICAgICAgICAgICBicmVhazsK
KyAgICAgICAgfQorICAgICAgICBjYXNlIFRyYW5zZm9ybU9wZXJhdGlvbjo6TUFUUklYXzNEOiB7
CisgICAgICAgICAgICBNYXRyaXgzRFRyYW5zZm9ybU9wZXJhdGlvbiogdHJhbnNmb3JtID0gc3Rh
dGljX2Nhc3Q8TWF0cml4M0RUcmFuc2Zvcm1PcGVyYXRpb24qPih0cmFuc2Zvcm1PcGVyYXRpb25z
Lm9wZXJhdGlvbnMoKVtqXS5nZXQoKSk7CisgICAgICAgICAgICBUcmFuc2Zvcm1hdGlvbk1hdHJp
eCBtID0gdHJhbnNmb3JtLT5tYXRyaXgoKTsKKyAgICAgICAgICAgIHdlYlRyYW5zZm9ybU9wZXJh
dGlvbnMuYXBwZW5kTWF0cml4KFdlYlRyYW5zZm9ybWF0aW9uTWF0cml4KG0pKTsKKyAgICAgICAg
ICAgIGJyZWFrOworICAgICAgICB9CisgICAgICAgIGNhc2UgVHJhbnNmb3JtT3BlcmF0aW9uOjpQ
RVJTUEVDVElWRTogeworICAgICAgICAgICAgUGVyc3BlY3RpdmVUcmFuc2Zvcm1PcGVyYXRpb24q
IHRyYW5zZm9ybSA9IHN0YXRpY19jYXN0PFBlcnNwZWN0aXZlVHJhbnNmb3JtT3BlcmF0aW9uKj4o
dHJhbnNmb3JtT3BlcmF0aW9ucy5vcGVyYXRpb25zKClbal0uZ2V0KCkpOworICAgICAgICAgICAg
d2ViVHJhbnNmb3JtT3BlcmF0aW9ucy5hcHBlbmRQZXJzcGVjdGl2ZShmbG9hdFZhbHVlRm9yTGVu
Z3RoKHRyYW5zZm9ybS0+cGVyc3BlY3RpdmUoKSwgMCkpOworICAgICAgICAgICAgYnJlYWs7Cisg
ICAgICAgIH0KKyAgICAgICAgY2FzZSBUcmFuc2Zvcm1PcGVyYXRpb246OklERU5USVRZOgorICAg
ICAgICBjYXNlIFRyYW5zZm9ybU9wZXJhdGlvbjo6Tk9ORToKKyAgICAgICAgICAgIC8vIERvIG5v
dGhpbmcuCisgICAgICAgICAgICBicmVhazsKKyAgICAgICAgfSAvLyBzd2l0Y2gKKyAgICB9IC8v
IGZvciBlYWNoIG9wZXJhdGlvbgorCisgICAgcmV0dXJuIHdlYlRyYW5zZm9ybU9wZXJhdGlvbnM7
Cit9CisKK3RlbXBsYXRlIDxjbGFzcyBWYWx1ZSwgY2xhc3MgS2V5ZnJhbWUsIGNsYXNzIEN1cnZl
PgorYm9vbCBhcHBlbmRLZXlmcmFtZShDdXJ2ZSYgY3VydmUsIGRvdWJsZSBrZXlUaW1lLCBjb25z
dCBWYWx1ZSogdmFsdWUsIFBhc3NPd25QdHI8Q0NUaW1pbmdGdW5jdGlvbj4gdGltaW5nRnVuY3Rp
b24sIGNvbnN0IEZsb2F0U2l6ZSYpCit7CisgICAgY3VydmUuYWRkS2V5ZnJhbWUoS2V5ZnJhbWU6
OmNyZWF0ZShrZXlUaW1lLCB2YWx1ZS0+dmFsdWUoKSwgdGltaW5nRnVuY3Rpb24pKTsKKyAgICBy
ZXR1cm4gdHJ1ZTsKK30KKwordGVtcGxhdGUgPD4KK2Jvb2wgYXBwZW5kS2V5ZnJhbWU8VHJhbnNm
b3JtQW5pbWF0aW9uVmFsdWUsIENDVHJhbnNmb3JtS2V5ZnJhbWUsIENDS2V5ZnJhbWVkVHJhbnNm
b3JtQW5pbWF0aW9uQ3VydmU+KENDS2V5ZnJhbWVkVHJhbnNmb3JtQW5pbWF0aW9uQ3VydmUmIGN1
cnZlLCBkb3VibGUga2V5VGltZSwgY29uc3QgVHJhbnNmb3JtQW5pbWF0aW9uVmFsdWUqIHZhbHVl
LCBQYXNzT3duUHRyPENDVGltaW5nRnVuY3Rpb24+IHRpbWluZ0Z1bmN0aW9uLCBjb25zdCBGbG9h
dFNpemUmIGJveFNpemUpCit7CisgICAgV2ViVHJhbnNmb3JtT3BlcmF0aW9ucyBvcGVyYXRpb25z
ID0gdG9XZWJUcmFuc2Zvcm1PcGVyYXRpb25zKCp2YWx1ZS0+dmFsdWUoKSwgYm94U2l6ZSk7Cisg
ICAgaWYgKG9wZXJhdGlvbnMuYXBwbHkoKS5pc0ludmVydGlibGUoKSkgeworICAgICAgICBjdXJ2
ZS5hZGRLZXlmcmFtZShDQ1RyYW5zZm9ybUtleWZyYW1lOjpjcmVhdGUoa2V5VGltZSwgb3BlcmF0
aW9ucywgdGltaW5nRnVuY3Rpb24pKTsKKyAgICAgICAgcmV0dXJuIHRydWU7CisgICAgfQorICAg
IHJldHVybiBmYWxzZTsKK30KKwordGVtcGxhdGUgPGNsYXNzIFZhbHVlLCBjbGFzcyBLZXlmcmFt
ZSwgY2xhc3MgQ3VydmU+CitQYXNzT3duUHRyPENDQWN0aXZlQW5pbWF0aW9uPiBjcmVhdGVBY3Rp
dmVBbmltYXRpb24oY29uc3QgS2V5ZnJhbWVWYWx1ZUxpc3QmIHZhbHVlTGlzdCwgY29uc3QgQW5p
bWF0aW9uKiBhbmltYXRpb24sIHNpemVfdCBhbmltYXRpb25JZCwgc2l6ZV90IGdyb3VwSWQsIGRv
dWJsZSB0aW1lT2Zmc2V0LCBDQ0FjdGl2ZUFuaW1hdGlvbjo6VGFyZ2V0UHJvcGVydHkgdGFyZ2V0
UHJvcGVydHksIGNvbnN0IEZsb2F0U2l6ZSYgYm94U2l6ZSkKK3sKKyAgICBib29sIGFsdGVybmF0
ZSA9IGZhbHNlOworICAgIGJvb2wgcmV2ZXJzZSA9IGZhbHNlOworICAgIGlmIChhbmltYXRpb24g
JiYgYW5pbWF0aW9uLT5pc0RpcmVjdGlvblNldCgpKSB7CisgICAgICAgIEFuaW1hdGlvbjo6QW5p
bWF0aW9uRGlyZWN0aW9uIGRpcmVjdGlvbiA9IGFuaW1hdGlvbi0+ZGlyZWN0aW9uKCk7CisgICAg
ICAgIGlmIChkaXJlY3Rpb24gPT0gQW5pbWF0aW9uOjpBbmltYXRpb25EaXJlY3Rpb25BbHRlcm5h
dGUgfHwgZGlyZWN0aW9uID09IEFuaW1hdGlvbjo6QW5pbWF0aW9uRGlyZWN0aW9uQWx0ZXJuYXRl
UmV2ZXJzZSkKKyAgICAgICAgICAgIGFsdGVybmF0ZSA9IHRydWU7CisgICAgICAgIGlmIChkaXJl
Y3Rpb24gPT0gQW5pbWF0aW9uOjpBbmltYXRpb25EaXJlY3Rpb25SZXZlcnNlIHx8IGRpcmVjdGlv
biA9PSBBbmltYXRpb246OkFuaW1hdGlvbkRpcmVjdGlvbkFsdGVybmF0ZVJldmVyc2UpCisgICAg
ICAgICAgICByZXZlcnNlID0gdHJ1ZTsKKyAgICB9CisKKyAgICBPd25QdHI8Q3VydmU+IGN1cnZl
ID0gQ3VydmU6OmNyZWF0ZSgpOworICAgIFZlY3RvcjxLZXlmcmFtZT4ga2V5ZnJhbWVzOworCisg
ICAgZm9yIChzaXplX3QgaSA9IDA7IGkgPCB2YWx1ZUxpc3Quc2l6ZSgpOyBpKyspIHsKKyAgICAg
ICAgc2l6ZV90IGluZGV4ID0gcmV2ZXJzZSA/IHZhbHVlTGlzdC5zaXplKCkgLSBpIC0gMSA6IGk7
CisKKyAgICAgICAgY29uc3QgVmFsdWUqIG9yaWdpbmFsVmFsdWUgPSBzdGF0aWNfY2FzdDxjb25z
dCBWYWx1ZSo+KHZhbHVlTGlzdC5hdChpbmRleCkpOworCisgICAgICAgIE93blB0cjxDQ1RpbWlu
Z0Z1bmN0aW9uPiB0aW1pbmdGdW5jdGlvbjsKKyAgICAgICAgY29uc3QgVGltaW5nRnVuY3Rpb24q
IG9yaWdpbmFsVGltaW5nRnVuY3Rpb24gPSBvcmlnaW5hbFZhbHVlLT50aW1pbmdGdW5jdGlvbigp
OworCisgICAgICAgIC8vIElmIHRoZXJlIGhhc24ndCBiZWVuIGEgdGltaW5nIGZ1bmN0aW9uIGFz
c29jaWF0ZWQgd2l0aCB0aGlzIGtleWZyYW1lLCB1c2UgdGhlCisgICAgICAgIC8vIGFuaW1hdGlv
bidzIHRpbWluZyBmdW5jdGlvbiwgaWYgd2UgaGF2ZSBvbmUuCisgICAgICAgIGlmICghb3JpZ2lu
YWxUaW1pbmdGdW5jdGlvbiAmJiBhbmltYXRpb24tPmlzVGltaW5nRnVuY3Rpb25TZXQoKSkKKyAg
ICAgICAgICAgIG9yaWdpbmFsVGltaW5nRnVuY3Rpb24gPSBhbmltYXRpb24tPnRpbWluZ0Z1bmN0
aW9uKCkuZ2V0KCk7CisKKyAgICAgICAgaWYgKG9yaWdpbmFsVGltaW5nRnVuY3Rpb24pIHsKKyAg
ICAgICAgICAgIHN3aXRjaCAob3JpZ2luYWxUaW1pbmdGdW5jdGlvbi0+dHlwZSgpKSB7CisgICAg
ICAgICAgICBjYXNlIFRpbWluZ0Z1bmN0aW9uOjpTdGVwc0Z1bmN0aW9uOgorICAgICAgICAgICAg
ICAgIC8vIEZJWE1FOiBhZGQgc3VwcG9ydCBmb3Igc3RlcHMgdGltaW5nIGZ1bmN0aW9uLgorICAg
ICAgICAgICAgICAgIHJldHVybiBudWxscHRyOworICAgICAgICAgICAgY2FzZSBUaW1pbmdGdW5j
dGlvbjo6TGluZWFyRnVuY3Rpb246CisgICAgICAgICAgICAgICAgLy8gRG9uJ3Qgc2V0IHRoZSB0
aW1pbmcgZnVuY3Rpb24uIEtleWZyYW1lcyBhcmUgaW50ZXJwb2xhdGVkIGxpbmVhcmx5IGlmIHRo
ZXJlIGlzIG5vIHRpbWluZyBmdW5jdGlvbi4KKyAgICAgICAgICAgICAgICBicmVhazsKKyAgICAg
ICAgICAgIGNhc2UgVGltaW5nRnVuY3Rpb246OkN1YmljQmV6aWVyRnVuY3Rpb246CisgICAgICAg
ICAgICAgICAgY29uc3QgQ3ViaWNCZXppZXJUaW1pbmdGdW5jdGlvbiogb3JpZ2luYWxCZXppZXJU
aW1pbmdGdW5jdGlvbiA9IHN0YXRpY19jYXN0PGNvbnN0IEN1YmljQmV6aWVyVGltaW5nRnVuY3Rp
b24qPihvcmlnaW5hbFRpbWluZ0Z1bmN0aW9uKTsKKyAgICAgICAgICAgICAgICB0aW1pbmdGdW5j
dGlvbiA9IENDQ3ViaWNCZXppZXJUaW1pbmdGdW5jdGlvbjo6Y3JlYXRlKG9yaWdpbmFsQmV6aWVy
VGltaW5nRnVuY3Rpb24tPngxKCksIG9yaWdpbmFsQmV6aWVyVGltaW5nRnVuY3Rpb24tPnkxKCks
IG9yaWdpbmFsQmV6aWVyVGltaW5nRnVuY3Rpb24tPngyKCksIG9yaWdpbmFsQmV6aWVyVGltaW5n
RnVuY3Rpb24tPnkyKCkpOworICAgICAgICAgICAgICAgIGJyZWFrOworICAgICAgICAgICAgfSAv
LyBzd2l0Y2gKKyAgICAgICAgfSBlbHNlCisgICAgICAgICAgICB0aW1pbmdGdW5jdGlvbiA9IEND
RWFzZVRpbWluZ0Z1bmN0aW9uOjpjcmVhdGUoKTsKKworICAgICAgICBkb3VibGUgZHVyYXRpb24g
PSAoYW5pbWF0aW9uICYmIGFuaW1hdGlvbi0+aXNEdXJhdGlvblNldCgpKSA/IGFuaW1hdGlvbi0+
ZHVyYXRpb24oKSA6IDE7CisgICAgICAgIGRvdWJsZSBrZXlUaW1lID0gb3JpZ2luYWxWYWx1ZS0+
a2V5VGltZSgpICogZHVyYXRpb247CisKKyAgICAgICAgaWYgKHJldmVyc2UpCisgICAgICAgICAg
ICBrZXlUaW1lID0gZHVyYXRpb24gLSBrZXlUaW1lOworCisgICAgICAgIGJvb2wgYWRkZWRLZXlm
cmFtZSA9IGFwcGVuZEtleWZyYW1lPFZhbHVlLCBLZXlmcmFtZSwgQ3VydmU+KCpjdXJ2ZSwga2V5
VGltZSwgb3JpZ2luYWxWYWx1ZSwgdGltaW5nRnVuY3Rpb24ucmVsZWFzZSgpLCBib3hTaXplKTsK
KyAgICAgICAgaWYgKCFhZGRlZEtleWZyYW1lKQorICAgICAgICAgICAgcmV0dXJuIG51bGxwdHI7
CisgICAgfQorCisgICAgT3duUHRyPENDQWN0aXZlQW5pbWF0aW9uPiBhbmltID0gQ0NBY3RpdmVB
bmltYXRpb246OmNyZWF0ZShjdXJ2ZS5yZWxlYXNlKCksIGFuaW1hdGlvbklkLCBncm91cElkLCB0
YXJnZXRQcm9wZXJ0eSk7CisKKyAgICBBU1NFUlQoYW5pbS5nZXQoKSk7CisKKyAgICBpZiAoYW5p
bS5nZXQoKSkgeworICAgICAgICBpbnQgaXRlcmF0aW9ucyA9IChhbmltYXRpb24gJiYgYW5pbWF0
aW9uLT5pc0l0ZXJhdGlvbkNvdW50U2V0KCkpID8gYW5pbWF0aW9uLT5pdGVyYXRpb25Db3VudCgp
IDogMTsKKyAgICAgICAgYW5pbS0+c2V0SXRlcmF0aW9ucyhpdGVyYXRpb25zKTsKKyAgICAgICAg
YW5pbS0+c2V0QWx0ZXJuYXRlc0RpcmVjdGlvbihhbHRlcm5hdGUpOworICAgIH0KKworICAgIC8v
IEluIG9yZGVyIHRvIGF2b2lkIHNrZXcsIHRoZSBtYWluIHRocmVhZCBhbmltYXRpb24gY2Fubm90
IHRpY2sgdW50aWwgaXQgaGFzIHJlY2VpdmVkIHRoZSBzdGFydCB0aW1lIG9mCisgICAgLy8gdGhl
IGNvcnJlc3BvbmRpbmcgaW1wbCB0aHJlYWQgYW5pbWF0aW9uLgorICAgIGFuaW0tPnNldE5lZWRz
U3luY2hyb25pemVkU3RhcnRUaW1lKHRydWUpOworCisgICAgLy8gSWYgdGltZU9mZnNldCA+IDAs
IHRoZW4gdGhlIGFuaW1hdGlvbiBoYXMgc3RhcnRlZCBpbiB0aGUgcGFzdC4KKyAgICBhbmltLT5z
ZXRUaW1lT2Zmc2V0KHRpbWVPZmZzZXQpOworCisgICAgcmV0dXJuIGFuaW0ucmVsZWFzZSgpOwor
fQorCitQYXNzT3duUHRyPENDQWN0aXZlQW5pbWF0aW9uPiBjcmVhdGVBY3RpdmVBbmltYXRpb24o
Y29uc3QgS2V5ZnJhbWVWYWx1ZUxpc3QmIHZhbHVlcywgY29uc3QgQW5pbWF0aW9uKiBhbmltYXRp
b24sIHNpemVfdCBhbmltYXRpb25JZCwgc2l6ZV90IGdyb3VwSWQsIGRvdWJsZSB0aW1lT2Zmc2V0
LCBjb25zdCBGbG9hdFNpemUmIGJveFNpemUpCit7CisgICAgaWYgKHZhbHVlcy5wcm9wZXJ0eSgp
ID09IEFuaW1hdGVkUHJvcGVydHlXZWJraXRUcmFuc2Zvcm0pCisgICAgICAgIHJldHVybiBjcmVh
dGVBY3RpdmVBbmltYXRpb248VHJhbnNmb3JtQW5pbWF0aW9uVmFsdWUsIENDVHJhbnNmb3JtS2V5
ZnJhbWUsIENDS2V5ZnJhbWVkVHJhbnNmb3JtQW5pbWF0aW9uQ3VydmU+KHZhbHVlcywgYW5pbWF0
aW9uLCBhbmltYXRpb25JZCwgZ3JvdXBJZCwgdGltZU9mZnNldCwgQ0NBY3RpdmVBbmltYXRpb246
OlRyYW5zZm9ybSwgRmxvYXRTaXplKGJveFNpemUpKTsKKworICAgIGlmICh2YWx1ZXMucHJvcGVy
dHkoKSA9PSBBbmltYXRlZFByb3BlcnR5T3BhY2l0eSkKKyAgICAgICAgcmV0dXJuIGNyZWF0ZUFj
dGl2ZUFuaW1hdGlvbjxGbG9hdEFuaW1hdGlvblZhbHVlLCBDQ0Zsb2F0S2V5ZnJhbWUsIENDS2V5
ZnJhbWVkRmxvYXRBbmltYXRpb25DdXJ2ZT4odmFsdWVzLCBhbmltYXRpb24sIGFuaW1hdGlvbklk
LCBncm91cElkLCB0aW1lT2Zmc2V0LCBDQ0FjdGl2ZUFuaW1hdGlvbjo6T3BhY2l0eSwgRmxvYXRT
aXplKCkpOworCisgICAgcmV0dXJuIG51bGxwdHI7Cit9CisKK30gLy8gbmFtZXNwYWNlIFdlYkNv
cmUKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2Nocm9taXVt
L0FuaW1hdGlvblRyYW5zbGF0aW9uVXRpbC5oIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3Jh
cGhpY3MvY2hyb21pdW0vQW5pbWF0aW9uVHJhbnNsYXRpb25VdGlsLmgKbmV3IGZpbGUgbW9kZSAx
MDA2NDQKaW5kZXggMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMC4uYjIy
NDFiNWUwNzEyYjhkNjBmMDZjOTlkNmJhZjcwOWQ1ZWRlMGU3OAotLS0gL2Rldi9udWxsCisrKyBi
L1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2Nocm9taXVtL0FuaW1hdGlvblRyYW5z
bGF0aW9uVXRpbC5oCkBAIC0wLDAgKzEsNTIgQEAKKy8qCisgKiBDb3B5cmlnaHQgKEMpIDIwMTAg
R29vZ2xlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqCisgKiBSZWRpc3RyaWJ1dGlvbiBh
bmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKyAqIG1v
ZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29u
ZGl0aW9ucyBhcmUKKyAqIG1ldDoKKyAqCisgKiAgICAgKiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291
cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAorICogbm90aWNlLCB0aGlz
IGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgorICogICAg
ICogUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92
ZQorICogY29weXJpZ2h0IG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBm
b2xsb3dpbmcgZGlzY2xhaW1lcgorICogaW4gdGhlIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVy
IG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZQorICogZGlzdHJpYnV0aW9uLgorICogICAgICog
TmVpdGhlciB0aGUgbmFtZSBvZiBHb29nbGUgSW5jLiBub3IgdGhlIG5hbWVzIG9mIGl0cworICog
Y29udHJpYnV0b3JzIG1heSBiZSB1c2VkIHRvIGVuZG9yc2Ugb3IgcHJvbW90ZSBwcm9kdWN0cyBk
ZXJpdmVkIGZyb20KKyAqIHRoaXMgc29mdHdhcmUgd2l0aG91dCBzcGVjaWZpYyBwcmlvciB3cml0
dGVuIHBlcm1pc3Npb24uCisgKgorICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBUSEUg
Q09QWVJJR0hUIEhPTERFUlMgQU5EIENPTlRSSUJVVE9SUworICogIkFTIElTIiBBTkQgQU5ZIEVY
UFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QKKyAqIExJTUlU
RUQgVE8sIFRIRSBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRO
RVNTIEZPUgorICogQSBQQVJUSUNVTEFSIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuIElOIE5PIEVW
RU5UIFNIQUxMIFRIRSBDT1BZUklHSFQKKyAqIE9XTkVSIE9SIENPTlRSSUJVVE9SUyBCRSBMSUFC
TEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLAorICogU1BFQ0lBTCwgRVhF
TVBMQVJZLCBPUiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVAorICog
TElNSVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsg
TE9TUyBPRiBVU0UsCisgKiBEQVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJ
T04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkKKyAqIFRIRU9SWSBPRiBMSUFCSUxJVFksIFdI
RVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQKKyAqIChJTkNMVURJ
TkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhF
IFVTRQorICogT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJ
TElUWSBPRiBTVUNIIERBTUFHRS4KKyAqLworCisjaWZuZGVmIEFuaW1hdGlvblRyYW5zbGF0aW9u
VXRpbF9oCisjZGVmaW5lIEFuaW1hdGlvblRyYW5zbGF0aW9uVXRpbF9oCisKKyNpbmNsdWRlIDx3
dGYvUGFzc093blB0ci5oPgorCitjbGFzcyBLZXlmcmFtZVZhbHVlTGlzdDsKK2NsYXNzIEFuaW1h
dGlvbjsKK2NsYXNzIEZsb2F0U2l6ZTsKK2NsYXNzIENDQWN0aXZlQW5pbWF0aW9uOworCituYW1l
c3BhY2UgV2ViQ29yZSB7CisKKy8vIFRyYW5zbGF0ZXMgV2ViQ29yZSBhbmltYXRpb24gZGF0YSBp
bnRvIGEgQ0NBY3RpdmVBbmltYXRpb24uIElmIHdlIGFyZSB1bmFibGUKKy8vIHRvIHBlcmZvcm0g
dGhpcyB0cmFuc2xhdGlvbiwgd2UgcmV0dXJuIG51bGxwdHIuIFRoaXMgY2FuIGhhcHBlbiBpZgor
Ly8gICAtIGEgc3RlcHMgdGltaW5nIGZ1bmN0aW9uIGlzIHVzZWQsCisvLyAgIC0gYSBwcm9wZXJ0
eSBvdGhlciB0aGFuIEFuaW1hdGVkUHJvcGVydHlXZWJraXRUcmFuc2Zvcm0sIG9yIEFuaW1hdGVk
UHJvcGVydHlPcGFjaXR5IGlzIGFuaW1hdGVkLCBvcgorLy8gICAtIGEgdHJhbnNmb3JtIGFuaW1h
dGlvbiBpbnZvbHZlcyBhIG5vbi1pbnZlcnRhYmxlIHRyYW5zZm9ybS4KK1Bhc3NPd25QdHI8Q0NB
Y3RpdmVBbmltYXRpb24+IGNyZWF0ZUFjdGl2ZUFuaW1hdGlvbihjb25zdCBLZXlmcmFtZVZhbHVl
TGlzdCYsIGNvbnN0IEFuaW1hdGlvbiosIHNpemVfdCBhbmltYXRpb25JZCwgc2l6ZV90IGdyb3Vw
SWQsIGRvdWJsZSB0aW1lT2Zmc2V0LCBjb25zdCBGbG9hdFNpemUmIGJveFNpemUpOworCit9IC8v
IG5hbWVzcGFjZSBXZWJDb3JlCisKKyNlbmRpZiAvLyBBbmltYXRpb25UcmFuc2xhdGlvblV0aWxf
aApkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvY2hyb21pdW0v
R3JhcGhpY3NMYXllckNocm9taXVtLmNwcCBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBo
aWNzL2Nocm9taXVtL0dyYXBoaWNzTGF5ZXJDaHJvbWl1bS5jcHAKaW5kZXggMWUwZTEzNDZmZTY0
ODU5YmYzMzlmMzllY2M3NzI3YTMwNDlmNmE3NS4uYjM1Mzk4NGQ0ZGRhMWM4YjJjMjIyZDc0Zjgw
YzY4MzNjODgyZTYyMyAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhp
Y3MvY2hyb21pdW0vR3JhcGhpY3NMYXllckNocm9taXVtLmNwcAorKysgYi9Tb3VyY2UvV2ViQ29y
ZS9wbGF0Zm9ybS9ncmFwaGljcy9jaHJvbWl1bS9HcmFwaGljc0xheWVyQ2hyb21pdW0uY3BwCkBA
IC00Niw2ICs0Niw3IEBACiAjaW5jbHVkZSAiR3JhcGhpY3NMYXllckNocm9taXVtLmgiCiAKICNp
bmNsdWRlICJBbmltYXRpb25JZFZlbmRvci5oIgorI2luY2x1ZGUgIkFuaW1hdGlvblRyYW5zbGF0
aW9uVXRpbC5oIgogI2luY2x1ZGUgIkNvbnRlbnRMYXllckNocm9taXVtLmgiCiAjaW5jbHVkZSAi
RmxvYXRDb252ZXJzaW9uLmgiCiAjaW5jbHVkZSAiRmxvYXRSZWN0LmgiCkBAIC01Nyw2ICs1OCw4
IEBACiAjaW5jbHVkZSAiU2tNYXRyaXg0NC5oIgogI2luY2x1ZGUgIlN5c3RlbVRpbWUuaCIKIAor
I2luY2x1ZGUgImNjL0NDQWN0aXZlQW5pbWF0aW9uLmgiCisKICNpbmNsdWRlIDxwdWJsaWMvV2Vi
RmlsdGVyT3BlcmF0aW9uLmg+CiAjaW5jbHVkZSA8cHVibGljL1dlYkZpbHRlck9wZXJhdGlvbnMu
aD4KICNpbmNsdWRlIDxwdWJsaWMvV2ViRmxvYXRQb2ludC5oPgpAQCAtNDk5LDggKzUwMiwyOCBA
QCB2b2lkIEdyYXBoaWNzTGF5ZXJDaHJvbWl1bTo6c2V0Q29udGVudHNUb0NhbnZhcyhQbGF0Zm9y
bUxheWVyKiBwbGF0Zm9ybUxheWVyKQogCiBib29sIEdyYXBoaWNzTGF5ZXJDaHJvbWl1bTo6YWRk
QW5pbWF0aW9uKGNvbnN0IEtleWZyYW1lVmFsdWVMaXN0JiB2YWx1ZXMsIGNvbnN0IEludFNpemUm
IGJveFNpemUsIGNvbnN0IEFuaW1hdGlvbiogYW5pbWF0aW9uLCBjb25zdCBTdHJpbmcmIGFuaW1h
dGlvbk5hbWUsIGRvdWJsZSB0aW1lT2Zmc2V0KQogeworICAgIC8vIEJhaWwgZWFybHkgaWYgd2Ug
aGF2ZSBhIGxhcmdlIHJvdGF0aW9uLgorICAgIGlmICh2YWx1ZXMucHJvcGVydHkoKSA9PSBBbmlt
YXRlZFByb3BlcnR5V2Via2l0VHJhbnNmb3JtKSB7CisgICAgICAgIGJvb2wgaGFzUm90YXRpb25P
Zk1vcmVUaGFuMTgwRGVncmVlcyA9IGZhbHNlOworICAgICAgICB2YWxpZGF0ZVRyYW5zZm9ybU9w
ZXJhdGlvbnModmFsdWVzLCBoYXNSb3RhdGlvbk9mTW9yZVRoYW4xODBEZWdyZWVzKTsKKyAgICAg
ICAgaWYgKGhhc1JvdGF0aW9uT2ZNb3JlVGhhbjE4MERlZ3JlZXMpCisgICAgICAgICAgICByZXR1
cm4gZmFsc2U7CisgICAgfQorCiAgICAgcHJpbWFyeUxheWVyKCkudW53cmFwPExheWVyQ2hyb21p
dW0+KCktPnNldExheWVyQW5pbWF0aW9uRGVsZWdhdGUodGhpcyk7Ci0gICAgcmV0dXJuIHByaW1h
cnlMYXllcigpLnVud3JhcDxMYXllckNocm9taXVtPigpLT5hZGRBbmltYXRpb24odmFsdWVzLCBi
b3hTaXplLCBhbmltYXRpb24sIG1hcEFuaW1hdGlvbk5hbWVUb0lkKGFuaW1hdGlvbk5hbWUpLCBB
bmltYXRpb25JZFZlbmRvcjo6Z2V0TmV4dEdyb3VwSWQoKSwgdGltZU9mZnNldCk7CisKKyAgICBp
bnQgYW5pbWF0aW9uSWQgPSBtYXBBbmltYXRpb25OYW1lVG9JZChhbmltYXRpb25OYW1lKTsKKyAg
ICBpbnQgZ3JvdXBJZCA9IEFuaW1hdGlvbklkVmVuZG9yOjpnZXROZXh0R3JvdXBJZCgpOworCisg
ICAgT3duUHRyPENDQWN0aXZlQW5pbWF0aW9uPiB0b0FkZChjcmVhdGVBY3RpdmVBbmltYXRpb24o
dmFsdWVzLCBhbmltYXRpb24sIGFuaW1hdGlvbklkLCBncm91cElkLCB0aW1lT2Zmc2V0LCBib3hT
aXplKSk7CisKKyAgICBpZiAodG9BZGQuZ2V0KCkpIHsKKyAgICAgICAgLy8gUmVtb3ZlIGFueSBl
eGlzdGluZyBhbmltYXRpb25zIHdpdGggdGhlIHNhbWUgYW5pbWF0aW9uIGlkIGFuZCB0YXJnZXQg
cHJvcGVydHkuCisgICAgICAgIHByaW1hcnlMYXllcigpLnVud3JhcDxMYXllckNocm9taXVtPigp
LT5sYXllckFuaW1hdGlvbkNvbnRyb2xsZXIoKS0+cmVtb3ZlQW5pbWF0aW9uKHRvQWRkLT5pZCgp
LCB0b0FkZC0+dGFyZ2V0UHJvcGVydHkoKSk7CisgICAgICAgIHJldHVybiBwcmltYXJ5TGF5ZXIo
KS51bndyYXA8TGF5ZXJDaHJvbWl1bT4oKS0+YWRkQW5pbWF0aW9uKHRvQWRkLnJlbGVhc2UoKSk7
CisgICAgfQorCisgICAgcmV0dXJuIGZhbHNlOwogfQogCiB2b2lkIEdyYXBoaWNzTGF5ZXJDaHJv
bWl1bTo6cGF1c2VBbmltYXRpb24oY29uc3QgU3RyaW5nJiBhbmltYXRpb25OYW1lLCBkb3VibGUg
dGltZU9mZnNldCkKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNz
L2Nocm9taXVtL0xheWVyQ2hyb21pdW0uY3BwIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3Jh
cGhpY3MvY2hyb21pdW0vTGF5ZXJDaHJvbWl1bS5jcHAKaW5kZXggZjYxZmQzNWQ1MzAwMTQxZjJi
MmZmMjZiODc2NGI4ZjYyZTAzZTIzZC4uZDM1ZjU5MjE5ZmY3NDNjZmQ5ZGU2YmQ3OWViZTU5MWNh
YzkyMWFhOSAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvY2hy
b21pdW0vTGF5ZXJDaHJvbWl1bS5jcHAKKysrIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3Jh
cGhpY3MvY2hyb21pdW0vTGF5ZXJDaHJvbWl1bS5jcHAKQEAgLTM3LDYgKzM3LDcgQEAKICNpbmNs
dWRlICJQbGF0Zm9ybUNvbnRleHRTa2lhLmgiCiAjaW5jbHVkZSAiUmVuZGVyTGF5ZXJCYWNraW5n
LmgiCiAjaW5jbHVkZSAiVGV4dFN0cmVhbS5oIgorI2luY2x1ZGUgImNjL0NDQWN0aXZlQW5pbWF0
aW9uLmgiCiAjaW5jbHVkZSAiY2MvQ0NBbmltYXRpb25FdmVudHMuaCIKICNpbmNsdWRlICJjYy9D
Q0xheWVyQW5pbWF0aW9uQ29udHJvbGxlci5oIgogI2luY2x1ZGUgImNjL0NDTGF5ZXJBbmltYXRp
b25EZWxlZ2F0ZS5oIgpAQCAtNTk5LDE3ICs2MDAsMTUgQEAgdm9pZCBMYXllckNocm9taXVtOjpz
ZXRUcmFuc2Zvcm1Gcm9tQW5pbWF0aW9uKGNvbnN0IFdlYlRyYW5zZm9ybWF0aW9uTWF0cml4JiB0
cmEKICAgICBtX3RyYW5zZm9ybSA9IHRyYW5zZm9ybTsKIH0KIAotYm9vbCBMYXllckNocm9taXVt
OjphZGRBbmltYXRpb24oY29uc3QgS2V5ZnJhbWVWYWx1ZUxpc3QmIHZhbHVlcywgY29uc3QgSW50
U2l6ZSYgYm94U2l6ZSwgY29uc3QgQW5pbWF0aW9uKiBhbmltYXRpb24sIGludCBhbmltYXRpb25J
ZCwgaW50IGdyb3VwSWQsIGRvdWJsZSB0aW1lT2Zmc2V0KQorYm9vbCBMYXllckNocm9taXVtOjph
ZGRBbmltYXRpb24oUGFzc093blB0cjxDQ0FjdGl2ZUFuaW1hdGlvbj4gYW5pbWF0aW9uKQogewog
ICAgIGlmICghbV9sYXllclRyZWVIb3N0IHx8ICFtX2xheWVyVHJlZUhvc3QtPnNldHRpbmdzKCku
dGhyZWFkZWRBbmltYXRpb25FbmFibGVkKQogICAgICAgICByZXR1cm4gZmFsc2U7CiAKLSAgICBi
b29sIGFkZGVkQW5pbWF0aW9uID0gbV9sYXllckFuaW1hdGlvbkNvbnRyb2xsZXItPmFkZEFuaW1h
dGlvbih2YWx1ZXMsIGJveFNpemUsIGFuaW1hdGlvbiwgYW5pbWF0aW9uSWQsIGdyb3VwSWQsIHRp
bWVPZmZzZXQpOwotICAgIGlmIChhZGRlZEFuaW1hdGlvbikgewotICAgICAgICBtX2xheWVyVHJl
ZUhvc3QtPmRpZEFkZEFuaW1hdGlvbigpOwotICAgICAgICBzZXROZWVkc0NvbW1pdCgpOwotICAg
IH0KLSAgICByZXR1cm4gYWRkZWRBbmltYXRpb247CisgICAgbV9sYXllckFuaW1hdGlvbkNvbnRy
b2xsZXItPmFkZEFuaW1hdGlvbihhbmltYXRpb24pOworICAgIG1fbGF5ZXJUcmVlSG9zdC0+ZGlk
QWRkQW5pbWF0aW9uKCk7CisgICAgc2V0TmVlZHNDb21taXQoKTsKKyAgICByZXR1cm4gdHJ1ZTsK
IH0KIAogdm9pZCBMYXllckNocm9taXVtOjpwYXVzZUFuaW1hdGlvbihpbnQgYW5pbWF0aW9uSWQs
IGRvdWJsZSB0aW1lT2Zmc2V0KQpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0v
Z3JhcGhpY3MvY2hyb21pdW0vTGF5ZXJDaHJvbWl1bS5oIGIvU291cmNlL1dlYkNvcmUvcGxhdGZv
cm0vZ3JhcGhpY3MvY2hyb21pdW0vTGF5ZXJDaHJvbWl1bS5oCmluZGV4IDVkNTJmOGJjOWZlZWQx
MjQxMDY4ZDExMTJkY2M4ZDllNDM3NDYxZWYuLjExZWIyNzJlYThlZjRlYTIzZGNkMmEzNGJhYjc2
OTUxZDM3NTMwNDYgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNz
L2Nocm9taXVtL0xheWVyQ2hyb21pdW0uaAorKysgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9n
cmFwaGljcy9jaHJvbWl1bS9MYXllckNocm9taXVtLmgKQEAgLTU3LDYgKzU3LDcgQEAKIAogbmFt
ZXNwYWNlIFdlYkNvcmUgewogCitjbGFzcyBDQ0FjdGl2ZUFuaW1hdGlvbjsKIHN0cnVjdCBDQ0Fu
aW1hdGlvbkV2ZW50OwogY2xhc3MgQ0NMYXllckFuaW1hdGlvbkRlbGVnYXRlOwogY2xhc3MgQ0NM
YXllckltcGw7CkBAIC03OCw3ICs3OSw2IEBAIHB1YmxpYzoKICAgICB2aXJ0dWFsIGZsb2F0IG9w
YWNpdHkoKSBjb25zdCBPVkVSUklERSB7IHJldHVybiBtX29wYWNpdHk7IH0KICAgICB2aXJ0dWFs
IHZvaWQgc2V0VHJhbnNmb3JtRnJvbUFuaW1hdGlvbihjb25zdCBXZWJLaXQ6OldlYlRyYW5zZm9y
bWF0aW9uTWF0cml4JikgT1ZFUlJJREU7CiAgICAgdmlydHVhbCBjb25zdCBXZWJLaXQ6OldlYlRy
YW5zZm9ybWF0aW9uTWF0cml4JiB0cmFuc2Zvcm0oKSBjb25zdCBPVkVSUklERSB7IHJldHVybiBt
X3RyYW5zZm9ybTsgfQotICAgIHZpcnR1YWwgY29uc3QgSW50U2l6ZSYgYm91bmRzKCkgY29uc3Qg
T1ZFUlJJREUgeyByZXR1cm4gbV9ib3VuZHM7IH0KIAogICAgIGNvbnN0IExheWVyQ2hyb21pdW0q
IHJvb3RMYXllcigpIGNvbnN0OwogICAgIExheWVyQ2hyb21pdW0qIHBhcmVudCgpIGNvbnN0OwpA
QCAtMTAwLDYgKzEwMCw3IEBAIHB1YmxpYzoKICAgICBDb2xvciBiYWNrZ3JvdW5kQ29sb3IoKSBj
b25zdCB7IHJldHVybiBtX2JhY2tncm91bmRDb2xvcjsgfQogCiAgICAgdm9pZCBzZXRCb3VuZHMo
Y29uc3QgSW50U2l6ZSYpOworICAgIGNvbnN0IEludFNpemUmIGJvdW5kcygpIGNvbnN0IHsgcmV0
dXJuIG1fYm91bmRzOyB9CiAgICAgdmlydHVhbCBJbnRTaXplIGNvbnRlbnRCb3VuZHMoKSBjb25z
dCB7IHJldHVybiBib3VuZHMoKTsgfQogCiAgICAgdm9pZCBzZXRNYXNrc1RvQm91bmRzKGJvb2wp
OwpAQCAtMjM2LDcgKzIzNyw3IEBAIHB1YmxpYzoKICAgICB2b2lkIHNldEFsd2F5c1Jlc2VydmVU
ZXh0dXJlcyhib29sIGFsd2F5c1Jlc2VydmVUZXh0dXJlcykgeyBtX2Fsd2F5c1Jlc2VydmVUZXh0
dXJlcyA9IGFsd2F5c1Jlc2VydmVUZXh0dXJlczsgfQogICAgIGJvb2wgYWx3YXlzUmVzZXJ2ZVRl
eHR1cmVzKCkgY29uc3QgeyByZXR1cm4gbV9hbHdheXNSZXNlcnZlVGV4dHVyZXM7IH0KIAotICAg
IGJvb2wgYWRkQW5pbWF0aW9uKGNvbnN0IEtleWZyYW1lVmFsdWVMaXN0JiwgY29uc3QgSW50U2l6
ZSYgYm94U2l6ZSwgY29uc3QgQW5pbWF0aW9uKiwgaW50IGFuaW1hdGlvbklkLCBpbnQgZ3JvdXBJ
ZCwgZG91YmxlIHRpbWVPZmZzZXQpOworICAgIGJvb2wgYWRkQW5pbWF0aW9uKFBhc3NPd25QdHI8
Q0NBY3RpdmVBbmltYXRpb24+KTsKICAgICB2b2lkIHBhdXNlQW5pbWF0aW9uKGludCBhbmltYXRp
b25JZCwgZG91YmxlIHRpbWVPZmZzZXQpOwogICAgIHZvaWQgcmVtb3ZlQW5pbWF0aW9uKGludCBh
bmltYXRpb25JZCk7CiAKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBo
aWNzL2Nocm9taXVtL0xpbmtIaWdobGlnaHQuY3BwIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0v
Z3JhcGhpY3MvY2hyb21pdW0vTGlua0hpZ2hsaWdodC5jcHAKaW5kZXggYmNiN2IzYzM2YzdiOGUx
ODRjZDIwNjdkZmE1YTBhNDUwYzViODY3OS4uYmVhMzJjMGEzNTc5YWY1NzFmYzdmMDUyYTc0ZGJk
YzdmYjlkZTY3OCAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3Mv
Y2hyb21pdW0vTGlua0hpZ2hsaWdodC5jcHAKKysrIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0v
Z3JhcGhpY3MvY2hyb21pdW0vTGlua0hpZ2hsaWdodC5jcHAKQEAgLTc2LDcgKzc2LDcgQEAgTGlu
a0hpZ2hsaWdodDo6TGlua0hpZ2hsaWdodChHcmFwaGljc0xheWVyQ2hyb21pdW0qIHBhcmVudCwg
Y29uc3QgUGF0aCYgcGF0aCwgaW4KICAgICAvLyBhbmltYXRpb25JZCA9IDEgaXMgcmVzZXJ2ZWQg
Zm9yIHVzLgogICAgIE93blB0cjxDQ0FjdGl2ZUFuaW1hdGlvbj4gYW5pbWF0aW9uKENDQWN0aXZl
QW5pbWF0aW9uOjpjcmVhdGUoY3VydmUucmVsZWFzZSgpLCBhbmltYXRpb25JZCwgZ3JvdXBJZCwg
Q0NBY3RpdmVBbmltYXRpb246Ok9wYWNpdHkpKTsKICAgICBhbmltYXRpb24tPnNldE5lZWRzU3lu
Y2hyb25pemVkU3RhcnRUaW1lKHRydWUpOwotICAgIG1fY29udGVudExheWVyLT5sYXllckFuaW1h
dGlvbkNvbnRyb2xsZXIoKS0+YWRkKGFuaW1hdGlvbi5yZWxlYXNlKCkpOworICAgIG1fY29udGVu
dExheWVyLT5sYXllckFuaW1hdGlvbkNvbnRyb2xsZXIoKS0+YWRkQW5pbWF0aW9uKGFuaW1hdGlv
bi5yZWxlYXNlKCkpOwogfQogCiBMaW5rSGlnaGxpZ2h0Ojp+TGlua0hpZ2hsaWdodCgpCmRpZmYg
LS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9jaHJvbWl1bS9jYy9DQ0Fu
aW1hdGlvbkN1cnZlLmggYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9jaHJvbWl1
bS9jYy9DQ0FuaW1hdGlvbkN1cnZlLmgKaW5kZXggZTIxZGU4OTY0NzU3NWJmZTY5YmVjZWUzOTgy
YjI5NTJkNWUyMmMwYy4uMGU0NThlYjJiNzk4Mzk2YWVjMGM0YzU2Mzk1OWY3Y2Y5M2MxZTkyZSAx
MDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvY2hyb21pdW0vY2Mv
Q0NBbmltYXRpb25DdXJ2ZS5oCisrKyBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNz
L2Nocm9taXVtL2NjL0NDQW5pbWF0aW9uQ3VydmUuaApAQCAtNjUsNyArNjUsNyBAQCBjbGFzcyBD
Q1RyYW5zZm9ybUFuaW1hdGlvbkN1cnZlIDogcHVibGljIENDQW5pbWF0aW9uQ3VydmUgewogcHVi
bGljOgogICAgIHZpcnR1YWwgfkNDVHJhbnNmb3JtQW5pbWF0aW9uQ3VydmUoKSB7IH0KIAotICAg
IHZpcnR1YWwgV2ViS2l0OjpXZWJUcmFuc2Zvcm1hdGlvbk1hdHJpeCBnZXRWYWx1ZShkb3VibGUg
dCwgY29uc3QgSW50U2l6ZSYgbGF5ZXJTaXplKSBjb25zdCA9IDA7CisgICAgdmlydHVhbCBXZWJL
aXQ6OldlYlRyYW5zZm9ybWF0aW9uTWF0cml4IGdldFZhbHVlKGRvdWJsZSB0KSBjb25zdCA9IDA7
CiAKICAgICAvLyBQYXJ0aWFsIENDQW5pbWF0aW9uIGltcGxlbWVudGF0aW9uLgogICAgIHZpcnR1
YWwgVHlwZSB0eXBlKCkgY29uc3QgT1ZFUlJJREUgeyByZXR1cm4gVHJhbnNmb3JtOyB9CmRpZmYg
LS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9jaHJvbWl1bS9jYy9DQ0tl
eWZyYW1lZEFuaW1hdGlvbkN1cnZlLmNwcCBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBo
aWNzL2Nocm9taXVtL2NjL0NDS2V5ZnJhbWVkQW5pbWF0aW9uQ3VydmUuY3BwCmluZGV4IDRkYjM5
YjY5YTAwMWZjODczZjI1NDUzNGJkNzcyY2EwNDQ0MWFlZmYuLmJiNGQ0NzgzNGFhMjY1ZmYwYmZi
YzdlZjEzODg5MDQyZDE3OWE5ZjIgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3Jt
L2dyYXBoaWNzL2Nocm9taXVtL2NjL0NDS2V5ZnJhbWVkQW5pbWF0aW9uQ3VydmUuY3BwCisrKyBi
L1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2Nocm9taXVtL2NjL0NDS2V5ZnJhbWVk
QW5pbWF0aW9uQ3VydmUuY3BwCkBAIC0yNiwxNSArMjYsNiBAQAogCiAjaW5jbHVkZSAiY2MvQ0NL
ZXlmcmFtZWRBbmltYXRpb25DdXJ2ZS5oIgogCi0jaW5jbHVkZSAiSWRlbnRpdHlUcmFuc2Zvcm1P
cGVyYXRpb24uaCIKLSNpbmNsdWRlICJNYXRyaXgzRFRyYW5zZm9ybU9wZXJhdGlvbi5oIgotI2lu
Y2x1ZGUgIk1hdHJpeFRyYW5zZm9ybU9wZXJhdGlvbi5oIgotI2luY2x1ZGUgIlBlcnNwZWN0aXZl
VHJhbnNmb3JtT3BlcmF0aW9uLmgiCi0jaW5jbHVkZSAiUm90YXRlVHJhbnNmb3JtT3BlcmF0aW9u
LmgiCi0jaW5jbHVkZSAiU2NhbGVUcmFuc2Zvcm1PcGVyYXRpb24uaCIKLSNpbmNsdWRlICJTa2V3
VHJhbnNmb3JtT3BlcmF0aW9uLmgiCi0jaW5jbHVkZSAiVHJhbnNsYXRlVHJhbnNmb3JtT3BlcmF0
aW9uLmgiCi0KICNpbmNsdWRlIDx3dGYvT3duUHRyLmg+CiAKIHVzaW5nIFdlYktpdDo6V2ViVHJh
bnNmb3JtYXRpb25NYXRyaXg7CkBAIC0xMTYsMTIgKzEwNywxMiBAQCBQYXNzT3duUHRyPENDRmxv
YXRLZXlmcmFtZT4gQ0NGbG9hdEtleWZyYW1lOjpjbG9uZSgpIGNvbnN0CiAgICAgcmV0dXJuIEND
RmxvYXRLZXlmcmFtZTo6Y3JlYXRlKHRpbWUoKSwgdmFsdWUoKSwgdGltaW5nRnVuY3Rpb24oKSA/
IGNsb25lVGltaW5nRnVuY3Rpb24odGltaW5nRnVuY3Rpb24oKSkgOiBudWxscHRyKTsKIH0KIAot
UGFzc093blB0cjxDQ1RyYW5zZm9ybUtleWZyYW1lPiBDQ1RyYW5zZm9ybUtleWZyYW1lOjpjcmVh
dGUoZG91YmxlIHRpbWUsIGNvbnN0IFRyYW5zZm9ybU9wZXJhdGlvbnMmIHZhbHVlLCBQYXNzT3du
UHRyPENDVGltaW5nRnVuY3Rpb24+IHRpbWluZ0Z1bmN0aW9uKQorUGFzc093blB0cjxDQ1RyYW5z
Zm9ybUtleWZyYW1lPiBDQ1RyYW5zZm9ybUtleWZyYW1lOjpjcmVhdGUoZG91YmxlIHRpbWUsIGNv
bnN0IFdlYktpdDo6V2ViVHJhbnNmb3JtT3BlcmF0aW9ucyYgdmFsdWUsIFBhc3NPd25QdHI8Q0NU
aW1pbmdGdW5jdGlvbj4gdGltaW5nRnVuY3Rpb24pCiB7CiAgICAgcmV0dXJuIGFkb3B0UHRyKG5l
dyBDQ1RyYW5zZm9ybUtleWZyYW1lKHRpbWUsIHZhbHVlLCB0aW1pbmdGdW5jdGlvbikpOwogfQog
Ci1DQ1RyYW5zZm9ybUtleWZyYW1lOjpDQ1RyYW5zZm9ybUtleWZyYW1lKGRvdWJsZSB0aW1lLCBj
b25zdCBUcmFuc2Zvcm1PcGVyYXRpb25zJiB2YWx1ZSwgUGFzc093blB0cjxDQ1RpbWluZ0Z1bmN0
aW9uPiB0aW1pbmdGdW5jdGlvbikKK0NDVHJhbnNmb3JtS2V5ZnJhbWU6OkNDVHJhbnNmb3JtS2V5
ZnJhbWUoZG91YmxlIHRpbWUsIGNvbnN0IFdlYktpdDo6V2ViVHJhbnNmb3JtT3BlcmF0aW9ucyYg
dmFsdWUsIFBhc3NPd25QdHI8Q0NUaW1pbmdGdW5jdGlvbj4gdGltaW5nRnVuY3Rpb24pCiAgICAg
OiBDQ0tleWZyYW1lKHRpbWUsIHRpbWluZ0Z1bmN0aW9uKQogICAgICwgbV92YWx1ZSh2YWx1ZSkK
IHsKQEAgLTEzMSw3OCArMTIyLDE0IEBAIENDVHJhbnNmb3JtS2V5ZnJhbWU6On5DQ1RyYW5zZm9y
bUtleWZyYW1lKCkKIHsKIH0KIAotY29uc3QgVHJhbnNmb3JtT3BlcmF0aW9ucyYgQ0NUcmFuc2Zv
cm1LZXlmcmFtZTo6dmFsdWUoKSBjb25zdAorY29uc3QgV2ViS2l0OjpXZWJUcmFuc2Zvcm1PcGVy
YXRpb25zJiBDQ1RyYW5zZm9ybUtleWZyYW1lOjp2YWx1ZSgpIGNvbnN0CiB7CiAgICAgcmV0dXJu
IG1fdmFsdWU7CiB9CiAKIFBhc3NPd25QdHI8Q0NUcmFuc2Zvcm1LZXlmcmFtZT4gQ0NUcmFuc2Zv
cm1LZXlmcmFtZTo6Y2xvbmUoKSBjb25zdAogewotICAgIC8vIFdlIG5lZWQgdG8gZG8gYSBkZWVw
IGNvcHkgdGhlIG1fdmFsdWUgbWF5IGNvbnRhaW4gcmVmIHBvaW50ZXJzIHRvIFRyYW5zZm9ybU9w
ZXJhdGlvbiBvYmplY3RzLgotICAgIFRyYW5zZm9ybU9wZXJhdGlvbnMgb3BlcmF0aW9uczsKLSAg
ICBmb3IgKHNpemVfdCBqID0gMDsgaiA8IG1fdmFsdWUuc2l6ZSgpOyArK2opIHsKLSAgICAgICAg
VHJhbnNmb3JtT3BlcmF0aW9uOjpPcGVyYXRpb25UeXBlIG9wZXJhdGlvblR5cGUgPSBtX3ZhbHVl
Lm9wZXJhdGlvbnMoKVtqXS0+Z2V0T3BlcmF0aW9uVHlwZSgpOwotICAgICAgICBzd2l0Y2ggKG9w
ZXJhdGlvblR5cGUpIHsKLSAgICAgICAgY2FzZSBUcmFuc2Zvcm1PcGVyYXRpb246OlNDQUxFX1g6
Ci0gICAgICAgIGNhc2UgVHJhbnNmb3JtT3BlcmF0aW9uOjpTQ0FMRV9ZOgotICAgICAgICBjYXNl
IFRyYW5zZm9ybU9wZXJhdGlvbjo6U0NBTEVfWjoKLSAgICAgICAgY2FzZSBUcmFuc2Zvcm1PcGVy
YXRpb246OlNDQUxFXzNEOgotICAgICAgICBjYXNlIFRyYW5zZm9ybU9wZXJhdGlvbjo6U0NBTEU6
IHsKLSAgICAgICAgICAgIFNjYWxlVHJhbnNmb3JtT3BlcmF0aW9uKiB0cmFuc2Zvcm0gPSBzdGF0
aWNfY2FzdDxTY2FsZVRyYW5zZm9ybU9wZXJhdGlvbio+KG1fdmFsdWUub3BlcmF0aW9ucygpW2pd
LmdldCgpKTsKLSAgICAgICAgICAgIG9wZXJhdGlvbnMub3BlcmF0aW9ucygpLmFwcGVuZChTY2Fs
ZVRyYW5zZm9ybU9wZXJhdGlvbjo6Y3JlYXRlKHRyYW5zZm9ybS0+eCgpLCB0cmFuc2Zvcm0tPnko
KSwgdHJhbnNmb3JtLT56KCksIG9wZXJhdGlvblR5cGUpKTsKLSAgICAgICAgICAgIGJyZWFrOwot
ICAgICAgICB9Ci0gICAgICAgIGNhc2UgVHJhbnNmb3JtT3BlcmF0aW9uOjpUUkFOU0xBVEVfWDoK
LSAgICAgICAgY2FzZSBUcmFuc2Zvcm1PcGVyYXRpb246OlRSQU5TTEFURV9ZOgotICAgICAgICBj
YXNlIFRyYW5zZm9ybU9wZXJhdGlvbjo6VFJBTlNMQVRFX1o6Ci0gICAgICAgIGNhc2UgVHJhbnNm
b3JtT3BlcmF0aW9uOjpUUkFOU0xBVEVfM0Q6Ci0gICAgICAgIGNhc2UgVHJhbnNmb3JtT3BlcmF0
aW9uOjpUUkFOU0xBVEU6IHsKLSAgICAgICAgICAgIFRyYW5zbGF0ZVRyYW5zZm9ybU9wZXJhdGlv
biogdHJhbnNmb3JtID0gc3RhdGljX2Nhc3Q8VHJhbnNsYXRlVHJhbnNmb3JtT3BlcmF0aW9uKj4o
bV92YWx1ZS5vcGVyYXRpb25zKClbal0uZ2V0KCkpOwotICAgICAgICAgICAgb3BlcmF0aW9ucy5v
cGVyYXRpb25zKCkuYXBwZW5kKFRyYW5zbGF0ZVRyYW5zZm9ybU9wZXJhdGlvbjo6Y3JlYXRlKHRy
YW5zZm9ybS0+eCgpLCB0cmFuc2Zvcm0tPnkoKSwgdHJhbnNmb3JtLT56KCksIG9wZXJhdGlvblR5
cGUpKTsKLSAgICAgICAgICAgIGJyZWFrOwotICAgICAgICB9Ci0gICAgICAgIGNhc2UgVHJhbnNm
b3JtT3BlcmF0aW9uOjpST1RBVEVfWDoKLSAgICAgICAgY2FzZSBUcmFuc2Zvcm1PcGVyYXRpb246
OlJPVEFURV9ZOgotICAgICAgICBjYXNlIFRyYW5zZm9ybU9wZXJhdGlvbjo6Uk9UQVRFXzNEOgot
ICAgICAgICBjYXNlIFRyYW5zZm9ybU9wZXJhdGlvbjo6Uk9UQVRFOiB7Ci0gICAgICAgICAgICBS
b3RhdGVUcmFuc2Zvcm1PcGVyYXRpb24qIHRyYW5zZm9ybSA9IHN0YXRpY19jYXN0PFJvdGF0ZVRy
YW5zZm9ybU9wZXJhdGlvbio+KG1fdmFsdWUub3BlcmF0aW9ucygpW2pdLmdldCgpKTsKLSAgICAg
ICAgICAgIG9wZXJhdGlvbnMub3BlcmF0aW9ucygpLmFwcGVuZChSb3RhdGVUcmFuc2Zvcm1PcGVy
YXRpb246OmNyZWF0ZSh0cmFuc2Zvcm0tPngoKSwgdHJhbnNmb3JtLT55KCksIHRyYW5zZm9ybS0+
eigpLCB0cmFuc2Zvcm0tPmFuZ2xlKCksIG9wZXJhdGlvblR5cGUpKTsKLSAgICAgICAgICAgIGJy
ZWFrOwotICAgICAgICB9Ci0gICAgICAgIGNhc2UgVHJhbnNmb3JtT3BlcmF0aW9uOjpTS0VXX1g6
Ci0gICAgICAgIGNhc2UgVHJhbnNmb3JtT3BlcmF0aW9uOjpTS0VXX1k6Ci0gICAgICAgIGNhc2Ug
VHJhbnNmb3JtT3BlcmF0aW9uOjpTS0VXOiB7Ci0gICAgICAgICAgICBTa2V3VHJhbnNmb3JtT3Bl
cmF0aW9uKiB0cmFuc2Zvcm0gPSBzdGF0aWNfY2FzdDxTa2V3VHJhbnNmb3JtT3BlcmF0aW9uKj4o
bV92YWx1ZS5vcGVyYXRpb25zKClbal0uZ2V0KCkpOwotICAgICAgICAgICAgb3BlcmF0aW9ucy5v
cGVyYXRpb25zKCkuYXBwZW5kKFNrZXdUcmFuc2Zvcm1PcGVyYXRpb246OmNyZWF0ZSh0cmFuc2Zv
cm0tPmFuZ2xlWCgpLCB0cmFuc2Zvcm0tPmFuZ2xlWSgpLCBvcGVyYXRpb25UeXBlKSk7Ci0gICAg
ICAgICAgICBicmVhazsKLSAgICAgICAgfQotICAgICAgICBjYXNlIFRyYW5zZm9ybU9wZXJhdGlv
bjo6TUFUUklYOiB7Ci0gICAgICAgICAgICBNYXRyaXhUcmFuc2Zvcm1PcGVyYXRpb24qIHRyYW5z
Zm9ybSA9IHN0YXRpY19jYXN0PE1hdHJpeFRyYW5zZm9ybU9wZXJhdGlvbio+KG1fdmFsdWUub3Bl
cmF0aW9ucygpW2pdLmdldCgpKTsKLSAgICAgICAgICAgIFdlYlRyYW5zZm9ybWF0aW9uTWF0cml4
IG0gPSBXZWJUcmFuc2Zvcm1hdGlvbk1hdHJpeCh0cmFuc2Zvcm0tPm1hdHJpeCgpKTsKLSAgICAg
ICAgICAgIG9wZXJhdGlvbnMub3BlcmF0aW9ucygpLmFwcGVuZChNYXRyaXhUcmFuc2Zvcm1PcGVy
YXRpb246OmNyZWF0ZShtLmEoKSwgbS5iKCksIG0uYygpLCBtLmQoKSwgbS5lKCksIG0uZigpKSk7
Ci0gICAgICAgICAgICBicmVhazsKLSAgICAgICAgfQotICAgICAgICBjYXNlIFRyYW5zZm9ybU9w
ZXJhdGlvbjo6TUFUUklYXzNEOiB7Ci0gICAgICAgICAgICBNYXRyaXgzRFRyYW5zZm9ybU9wZXJh
dGlvbiogdHJhbnNmb3JtID0gc3RhdGljX2Nhc3Q8TWF0cml4M0RUcmFuc2Zvcm1PcGVyYXRpb24q
PihtX3ZhbHVlLm9wZXJhdGlvbnMoKVtqXS5nZXQoKSk7Ci0gICAgICAgICAgICBvcGVyYXRpb25z
Lm9wZXJhdGlvbnMoKS5hcHBlbmQoTWF0cml4M0RUcmFuc2Zvcm1PcGVyYXRpb246OmNyZWF0ZSh0
cmFuc2Zvcm0tPm1hdHJpeCgpKSk7Ci0gICAgICAgICAgICBicmVhazsKLSAgICAgICAgfQotICAg
ICAgICBjYXNlIFRyYW5zZm9ybU9wZXJhdGlvbjo6UEVSU1BFQ1RJVkU6IHsKLSAgICAgICAgICAg
IFBlcnNwZWN0aXZlVHJhbnNmb3JtT3BlcmF0aW9uKiB0cmFuc2Zvcm0gPSBzdGF0aWNfY2FzdDxQ
ZXJzcGVjdGl2ZVRyYW5zZm9ybU9wZXJhdGlvbio+KG1fdmFsdWUub3BlcmF0aW9ucygpW2pdLmdl
dCgpKTsKLSAgICAgICAgICAgIG9wZXJhdGlvbnMub3BlcmF0aW9ucygpLmFwcGVuZChQZXJzcGVj
dGl2ZVRyYW5zZm9ybU9wZXJhdGlvbjo6Y3JlYXRlKHRyYW5zZm9ybS0+cGVyc3BlY3RpdmUoKSkp
OwotICAgICAgICAgICAgYnJlYWs7Ci0gICAgICAgIH0KLSAgICAgICAgY2FzZSBUcmFuc2Zvcm1P
cGVyYXRpb246OklERU5USVRZOiB7Ci0gICAgICAgICAgICBvcGVyYXRpb25zLm9wZXJhdGlvbnMo
KS5hcHBlbmQoSWRlbnRpdHlUcmFuc2Zvcm1PcGVyYXRpb246OmNyZWF0ZSgpKTsKLSAgICAgICAg
ICAgIGJyZWFrOwotICAgICAgICB9Ci0gICAgICAgIGNhc2UgVHJhbnNmb3JtT3BlcmF0aW9uOjpO
T05FOgotICAgICAgICAgICAgLy8gRG8gbm90aGluZy4KLSAgICAgICAgICAgIGJyZWFrOwotICAg
ICAgICB9IC8vIHN3aXRjaAotICAgIH0gLy8gZm9yIGVhY2ggb3BlcmF0aW9uCi0KLSAgICByZXR1
cm4gQ0NUcmFuc2Zvcm1LZXlmcmFtZTo6Y3JlYXRlKHRpbWUoKSwgb3BlcmF0aW9ucywgdGltaW5n
RnVuY3Rpb24oKSA/IGNsb25lVGltaW5nRnVuY3Rpb24odGltaW5nRnVuY3Rpb24oKSkgOiBudWxs
cHRyKTsKKyAgICByZXR1cm4gQ0NUcmFuc2Zvcm1LZXlmcmFtZTo6Y3JlYXRlKHRpbWUoKSwgdmFs
dWUoKSwgdGltaW5nRnVuY3Rpb24oKSA/IGNsb25lVGltaW5nRnVuY3Rpb24odGltaW5nRnVuY3Rp
b24oKSkgOiBudWxscHRyKTsKIH0KIAogUGFzc093blB0cjxDQ0tleWZyYW1lZEZsb2F0QW5pbWF0
aW9uQ3VydmU+IENDS2V5ZnJhbWVkRmxvYXRBbmltYXRpb25DdXJ2ZTo6Y3JlYXRlKCkKQEAgLTI4
OSwyMCArMjE2LDEzIEBAIFBhc3NPd25QdHI8Q0NBbmltYXRpb25DdXJ2ZT4gQ0NLZXlmcmFtZWRU
cmFuc2Zvcm1BbmltYXRpb25DdXJ2ZTo6Y2xvbmUoKSBjb25zdAogICAgIHJldHVybiB0b1JldHVy
bi5yZWxlYXNlKCk7CiB9CiAKLVdlYlRyYW5zZm9ybWF0aW9uTWF0cml4IENDS2V5ZnJhbWVkVHJh
bnNmb3JtQW5pbWF0aW9uQ3VydmU6OmdldFZhbHVlKGRvdWJsZSB0LCBjb25zdCBJbnRTaXplJiBs
YXllclNpemUpIGNvbnN0CitXZWJUcmFuc2Zvcm1hdGlvbk1hdHJpeCBDQ0tleWZyYW1lZFRyYW5z
Zm9ybUFuaW1hdGlvbkN1cnZlOjpnZXRWYWx1ZShkb3VibGUgdCkgY29uc3QKIHsKLSAgICAvLyBO
b3RlOiBXZWJDb3JlIGRhdGEgdHlwZSB1c2VkIGhlcmUsIGp1c3QgZm9yIG5vdy4KLSAgICBUcmFu
c2Zvcm1hdGlvbk1hdHJpeCB0cmFuc2Zvcm1NYXRyaXg7Ci0KLSAgICBpZiAodCA8PSBtX2tleWZy
YW1lcy5maXJzdCgpLT50aW1lKCkpIHsKLSAgICAgICAgbV9rZXlmcmFtZXMuZmlyc3QoKS0+dmFs
dWUoKS5hcHBseShsYXllclNpemUsIHRyYW5zZm9ybU1hdHJpeCk7Ci0gICAgICAgIHJldHVybiBX
ZWJUcmFuc2Zvcm1hdGlvbk1hdHJpeCh0cmFuc2Zvcm1NYXRyaXgpOwotICAgIH0KKyAgICBpZiAo
dCA8PSBtX2tleWZyYW1lcy5maXJzdCgpLT50aW1lKCkpCisgICAgICAgIHJldHVybiBtX2tleWZy
YW1lcy5maXJzdCgpLT52YWx1ZSgpLmFwcGx5KCk7CiAKLSAgICBpZiAodCA+PSBtX2tleWZyYW1l
cy5sYXN0KCktPnRpbWUoKSkgewotICAgICAgICBtX2tleWZyYW1lcy5sYXN0KCktPnZhbHVlKCku
YXBwbHkobGF5ZXJTaXplLCB0cmFuc2Zvcm1NYXRyaXgpOwotICAgICAgICByZXR1cm4gV2ViVHJh
bnNmb3JtYXRpb25NYXRyaXgodHJhbnNmb3JtTWF0cml4KTsKLSAgICB9CisgICAgaWYgKHQgPj0g
bV9rZXlmcmFtZXMubGFzdCgpLT50aW1lKCkpCisgICAgICAgIHJldHVybiBtX2tleWZyYW1lcy5s
YXN0KCktPnZhbHVlKCkuYXBwbHkoKTsKIAogICAgIHNpemVfdCBpID0gMDsKICAgICBmb3IgKDsg
aSA8IG1fa2V5ZnJhbWVzLnNpemUoKSAtIDE7ICsraSkgewpAQCAtMzE1LDIwICsyMzUsNyBAQCBX
ZWJUcmFuc2Zvcm1hdGlvbk1hdHJpeCBDQ0tleWZyYW1lZFRyYW5zZm9ybUFuaW1hdGlvbkN1cnZl
OjpnZXRWYWx1ZShkb3VibGUgdCwgYwogICAgIGlmIChtX2tleWZyYW1lc1tpXS0+dGltaW5nRnVu
Y3Rpb24oKSkKICAgICAgICAgcHJvZ3Jlc3MgPSBtX2tleWZyYW1lc1tpXS0+dGltaW5nRnVuY3Rp
b24oKS0+Z2V0VmFsdWUocHJvZ3Jlc3MpOwogCi0gICAgaWYgKG1fa2V5ZnJhbWVzW2ldLT52YWx1
ZSgpLm9wZXJhdGlvbnNNYXRjaChtX2tleWZyYW1lc1tpKzFdLT52YWx1ZSgpKSkgewotICAgICAg
ICBmb3IgKHNpemVfdCBqID0gMDsgaiA8IG1fa2V5ZnJhbWVzW2krMV0tPnZhbHVlKCkuc2l6ZSgp
OyArK2opCi0gICAgICAgICAgICBtX2tleWZyYW1lc1tpKzFdLT52YWx1ZSgpLm9wZXJhdGlvbnMo
KVtqXS0+YmxlbmQobV9rZXlmcmFtZXNbaV0tPnZhbHVlKCkuYXQoaiksIHByb2dyZXNzKS0+YXBw
bHkodHJhbnNmb3JtTWF0cml4LCBsYXllclNpemUpOwotICAgIH0gZWxzZSB7Ci0gICAgICAgIC8v
IE5vdGU6IFdlYkNvcmUgZGF0YSB0eXBlIHVzZWQgaGVyZSwganVzdCBmb3Igbm93LgotICAgICAg
ICBUcmFuc2Zvcm1hdGlvbk1hdHJpeCBzb3VyY2U7Ci0KLSAgICAgICAgbV9rZXlmcmFtZXNbaV0t
PnZhbHVlKCkuYXBwbHkobGF5ZXJTaXplLCBzb3VyY2UpOwotICAgICAgICBtX2tleWZyYW1lc1tp
KzFdLT52YWx1ZSgpLmFwcGx5KGxheWVyU2l6ZSwgdHJhbnNmb3JtTWF0cml4KTsKLQotICAgICAg
ICB0cmFuc2Zvcm1NYXRyaXguYmxlbmQoc291cmNlLCBwcm9ncmVzcyk7Ci0gICAgfQotCi0gICAg
cmV0dXJuIFdlYlRyYW5zZm9ybWF0aW9uTWF0cml4KHRyYW5zZm9ybU1hdHJpeCk7CisgICAgcmV0
dXJuIG1fa2V5ZnJhbWVzW2krMV0tPnZhbHVlKCkuYmxlbmQobV9rZXlmcmFtZXNbaV0tPnZhbHVl
KCksIHByb2dyZXNzKTsKIH0KIAogfSAvLyBuYW1lc3BhY2UgV2ViQ29yZQpkaWZmIC0tZ2l0IGEv
U291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvY2hyb21pdW0vY2MvQ0NLZXlmcmFtZWRB
bmltYXRpb25DdXJ2ZS5oIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvY2hyb21p
dW0vY2MvQ0NLZXlmcmFtZWRBbmltYXRpb25DdXJ2ZS5oCmluZGV4IGU3MGNkYWZiNzViMjk4MDli
MGVkYmUzOTBjN2FiYWM5OTBhNWNiZDAuLjExMWNhODFjZTc1MTY3OTdlMDQ0MmZiNzI5ZWIzMGFi
YWVhNTM3YmEgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2No
cm9taXVtL2NjL0NDS2V5ZnJhbWVkQW5pbWF0aW9uQ3VydmUuaAorKysgYi9Tb3VyY2UvV2ViQ29y
ZS9wbGF0Zm9ybS9ncmFwaGljcy9jaHJvbWl1bS9jYy9DQ0tleWZyYW1lZEFuaW1hdGlvbkN1cnZl
LmgKQEAgLTI1LDEyICsyNSwxNCBAQAogI2lmbmRlZiBDQ0tleWZyYW1lZEFuaW1hdGlvbkN1cnZl
X2gKICNkZWZpbmUgQ0NLZXlmcmFtZWRBbmltYXRpb25DdXJ2ZV9oCiAKLSNpbmNsdWRlICJUcmFu
c2Zvcm1PcGVyYXRpb25zLmgiCiAjaW5jbHVkZSAiY2MvQ0NBbmltYXRpb25DdXJ2ZS5oIgogI2lu
Y2x1ZGUgImNjL0NDVGltaW5nRnVuY3Rpb24uaCIKIAorI2luY2x1ZGUgPHB1YmxpYy9XZWJUcmFu
c2Zvcm1PcGVyYXRpb25zLmg+CisKICNpbmNsdWRlIDx3dGYvT3duUHRyLmg+CiAjaW5jbHVkZSA8
d3RmL1Bhc3NPd25QdHIuaD4KKyNpbmNsdWRlIDx3dGYvVmVjdG9yLmg+CiAKIG5hbWVzcGFjZSBX
ZWJDb3JlIHsKIApAQCAtNjUsMTcgKzY3LDE3IEBAIHByaXZhdGU6CiAKIGNsYXNzIENDVHJhbnNm
b3JtS2V5ZnJhbWUgOiBwdWJsaWMgQ0NLZXlmcmFtZSB7CiBwdWJsaWM6Ci0gICAgc3RhdGljIFBh
c3NPd25QdHI8Q0NUcmFuc2Zvcm1LZXlmcmFtZT4gY3JlYXRlKGRvdWJsZSB0aW1lLCBjb25zdCBU
cmFuc2Zvcm1PcGVyYXRpb25zJiB2YWx1ZSwgUGFzc093blB0cjxDQ1RpbWluZ0Z1bmN0aW9uPik7
CisgICAgc3RhdGljIFBhc3NPd25QdHI8Q0NUcmFuc2Zvcm1LZXlmcmFtZT4gY3JlYXRlKGRvdWJs
ZSB0aW1lLCBjb25zdCBXZWJLaXQ6OldlYlRyYW5zZm9ybU9wZXJhdGlvbnMmIHZhbHVlLCBQYXNz
T3duUHRyPENDVGltaW5nRnVuY3Rpb24+KTsKICAgICB2aXJ0dWFsIH5DQ1RyYW5zZm9ybUtleWZy
YW1lKCk7CiAKLSAgICBjb25zdCBUcmFuc2Zvcm1PcGVyYXRpb25zJiB2YWx1ZSgpIGNvbnN0Owor
ICAgIGNvbnN0IFdlYktpdDo6V2ViVHJhbnNmb3JtT3BlcmF0aW9ucyYgdmFsdWUoKSBjb25zdDsK
IAogICAgIFBhc3NPd25QdHI8Q0NUcmFuc2Zvcm1LZXlmcmFtZT4gY2xvbmUoKSBjb25zdDsKIAog
cHJpdmF0ZToKLSAgICBDQ1RyYW5zZm9ybUtleWZyYW1lKGRvdWJsZSB0aW1lLCBjb25zdCBUcmFu
c2Zvcm1PcGVyYXRpb25zJiB2YWx1ZSwgUGFzc093blB0cjxDQ1RpbWluZ0Z1bmN0aW9uPik7Cisg
ICAgQ0NUcmFuc2Zvcm1LZXlmcmFtZShkb3VibGUgdGltZSwgY29uc3QgV2ViS2l0OjpXZWJUcmFu
c2Zvcm1PcGVyYXRpb25zJiB2YWx1ZSwgUGFzc093blB0cjxDQ1RpbWluZ0Z1bmN0aW9uPik7CiAK
LSAgICBUcmFuc2Zvcm1PcGVyYXRpb25zIG1fdmFsdWU7CisgICAgV2ViS2l0OjpXZWJUcmFuc2Zv
cm1PcGVyYXRpb25zIG1fdmFsdWU7CiB9OwogCiBjbGFzcyBDQ0tleWZyYW1lZEZsb2F0QW5pbWF0
aW9uQ3VydmUgOiBwdWJsaWMgQ0NGbG9hdEFuaW1hdGlvbkN1cnZlIHsKQEAgLTExNiw3ICsxMTgs
NyBAQCBwdWJsaWM6CiAgICAgdmlydHVhbCBQYXNzT3duUHRyPENDQW5pbWF0aW9uQ3VydmU+IGNs
b25lKCkgY29uc3QgT1ZFUlJJREU7CiAKICAgICAvLyBDQ1RyYW5zZm9ybUFuaW1hdGlvbkN1cnZl
IGltcGxlbWVudGF0aW9uCi0gICAgdmlydHVhbCBXZWJLaXQ6OldlYlRyYW5zZm9ybWF0aW9uTWF0
cml4IGdldFZhbHVlKGRvdWJsZSB0LCBjb25zdCBJbnRTaXplJikgY29uc3QgT1ZFUlJJREU7Cisg
ICAgdmlydHVhbCBXZWJLaXQ6OldlYlRyYW5zZm9ybWF0aW9uTWF0cml4IGdldFZhbHVlKGRvdWJs
ZSB0KSBjb25zdCBPVkVSUklERTsKIAogcHJpdmF0ZToKICAgICBDQ0tleWZyYW1lZFRyYW5zZm9y
bUFuaW1hdGlvbkN1cnZlKCk7CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9n
cmFwaGljcy9jaHJvbWl1bS9jYy9DQ0xheWVyQW5pbWF0aW9uQ29udHJvbGxlci5jcHAgYi9Tb3Vy
Y2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9jaHJvbWl1bS9jYy9DQ0xheWVyQW5pbWF0aW9u
Q29udHJvbGxlci5jcHAKaW5kZXggMDk2OTc5NTQ0ODNhNTc5MmYyZTQyOGQzMGYwYTJlNGZjY2Nk
YWZmNi4uNjY2MTlhZjkxYTYxYzA3NzFiZTY0N2MxZTBhMzZmM2QwYmI3ZGViNSAxMDA2NDQKLS0t
IGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvY2hyb21pdW0vY2MvQ0NMYXllckFu
aW1hdGlvbkNvbnRyb2xsZXIuY3BwCisrKyBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBo
aWNzL2Nocm9taXVtL2NjL0NDTGF5ZXJBbmltYXRpb25Db250cm9sbGVyLmNwcApAQCAtMzcsOTQg
KzM3LDYgQEAgdXNpbmcgV2ViS2l0OjpXZWJUcmFuc2Zvcm1hdGlvbk1hdHJpeDsKIAogbmFtZXNw
YWNlIFdlYkNvcmUgewogCi1uYW1lc3BhY2UgewotCi10ZW1wbGF0ZSA8Y2xhc3MgVmFsdWUsIGNs
YXNzIEtleWZyYW1lLCBjbGFzcyBDdXJ2ZT4KLXZvaWQgYXBwZW5kS2V5ZnJhbWUoQ3VydmUmIGN1
cnZlLCBkb3VibGUga2V5VGltZSwgY29uc3QgVmFsdWUqIHZhbHVlLCBQYXNzT3duUHRyPENDVGlt
aW5nRnVuY3Rpb24+IHRpbWluZ0Z1bmN0aW9uKQotewotICAgIGN1cnZlLmFkZEtleWZyYW1lKEtl
eWZyYW1lOjpjcmVhdGUoa2V5VGltZSwgdmFsdWUtPnZhbHVlKCksIHRpbWluZ0Z1bmN0aW9uKSk7
Ci19Ci0KLXRlbXBsYXRlIDw+Ci12b2lkIGFwcGVuZEtleWZyYW1lPFRyYW5zZm9ybUFuaW1hdGlv
blZhbHVlLCBDQ1RyYW5zZm9ybUtleWZyYW1lLCBDQ0tleWZyYW1lZFRyYW5zZm9ybUFuaW1hdGlv
bkN1cnZlPihDQ0tleWZyYW1lZFRyYW5zZm9ybUFuaW1hdGlvbkN1cnZlJiBjdXJ2ZSwgZG91Ymxl
IGtleVRpbWUsIGNvbnN0IFRyYW5zZm9ybUFuaW1hdGlvblZhbHVlKiB2YWx1ZSwgUGFzc093blB0
cjxDQ1RpbWluZ0Z1bmN0aW9uPiB0aW1pbmdGdW5jdGlvbikKLXsKLSAgICBjdXJ2ZS5hZGRLZXlm
cmFtZShDQ1RyYW5zZm9ybUtleWZyYW1lOjpjcmVhdGUoa2V5VGltZSwgKnZhbHVlLT52YWx1ZSgp
LCB0aW1pbmdGdW5jdGlvbikpOwotfQotCi10ZW1wbGF0ZSA8Y2xhc3MgVmFsdWUsIGNsYXNzIEtl
eWZyYW1lLCBjbGFzcyBDdXJ2ZT4KLVBhc3NPd25QdHI8Q0NBY3RpdmVBbmltYXRpb24+IGNyZWF0
ZUFjdGl2ZUFuaW1hdGlvbihjb25zdCBLZXlmcmFtZVZhbHVlTGlzdCYgdmFsdWVMaXN0LCBjb25z
dCBBbmltYXRpb24qIGFuaW1hdGlvbiwgc2l6ZV90IGFuaW1hdGlvbklkLCBzaXplX3QgZ3JvdXBJ
ZCwgZG91YmxlIHRpbWVPZmZzZXQsIENDQWN0aXZlQW5pbWF0aW9uOjpUYXJnZXRQcm9wZXJ0eSB0
YXJnZXRQcm9wZXJ0eSkKLXsKLSAgICBib29sIGFsdGVybmF0ZSA9IGZhbHNlOwotICAgIGJvb2wg
cmV2ZXJzZSA9IGZhbHNlOwotICAgIGlmIChhbmltYXRpb24gJiYgYW5pbWF0aW9uLT5pc0RpcmVj
dGlvblNldCgpKSB7Ci0gICAgICAgIEFuaW1hdGlvbjo6QW5pbWF0aW9uRGlyZWN0aW9uIGRpcmVj
dGlvbiA9IGFuaW1hdGlvbi0+ZGlyZWN0aW9uKCk7Ci0gICAgICAgIGlmIChkaXJlY3Rpb24gPT0g
QW5pbWF0aW9uOjpBbmltYXRpb25EaXJlY3Rpb25BbHRlcm5hdGUgfHwgZGlyZWN0aW9uID09IEFu
aW1hdGlvbjo6QW5pbWF0aW9uRGlyZWN0aW9uQWx0ZXJuYXRlUmV2ZXJzZSkKLSAgICAgICAgICAg
IGFsdGVybmF0ZSA9IHRydWU7Ci0gICAgICAgIGlmIChkaXJlY3Rpb24gPT0gQW5pbWF0aW9uOjpB
bmltYXRpb25EaXJlY3Rpb25SZXZlcnNlIHx8IGRpcmVjdGlvbiA9PSBBbmltYXRpb246OkFuaW1h
dGlvbkRpcmVjdGlvbkFsdGVybmF0ZVJldmVyc2UpCi0gICAgICAgICAgICByZXZlcnNlID0gdHJ1
ZTsKLSAgICB9Ci0KLSAgICBPd25QdHI8Q3VydmU+IGN1cnZlID0gQ3VydmU6OmNyZWF0ZSgpOwot
ICAgIFZlY3RvcjxLZXlmcmFtZT4ga2V5ZnJhbWVzOwotCi0gICAgZm9yIChzaXplX3QgaSA9IDA7
IGkgPCB2YWx1ZUxpc3Quc2l6ZSgpOyBpKyspIHsKLSAgICAgICAgc2l6ZV90IGluZGV4ID0gcmV2
ZXJzZSA/IHZhbHVlTGlzdC5zaXplKCkgLSBpIC0gMSA6IGk7Ci0KLSAgICAgICAgY29uc3QgVmFs
dWUqIG9yaWdpbmFsVmFsdWUgPSBzdGF0aWNfY2FzdDxjb25zdCBWYWx1ZSo+KHZhbHVlTGlzdC5h
dChpbmRleCkpOwotCi0gICAgICAgIE93blB0cjxDQ1RpbWluZ0Z1bmN0aW9uPiB0aW1pbmdGdW5j
dGlvbjsKLSAgICAgICAgY29uc3QgVGltaW5nRnVuY3Rpb24qIG9yaWdpbmFsVGltaW5nRnVuY3Rp
b24gPSBvcmlnaW5hbFZhbHVlLT50aW1pbmdGdW5jdGlvbigpOwotCi0gICAgICAgIC8vIElmIHRo
ZXJlIGhhc24ndCBiZWVuIGEgdGltaW5nIGZ1bmN0aW9uIGFzc29jaWF0ZWQgd2l0aCB0aGlzIGtl
eWZyYW1lLCB1c2UgdGhlCi0gICAgICAgIC8vIGFuaW1hdGlvbidzIHRpbWluZyBmdW5jdGlvbiwg
aWYgd2UgaGF2ZSBvbmUuCi0gICAgICAgIGlmICghb3JpZ2luYWxUaW1pbmdGdW5jdGlvbiAmJiBh
bmltYXRpb24tPmlzVGltaW5nRnVuY3Rpb25TZXQoKSkKLSAgICAgICAgICAgIG9yaWdpbmFsVGlt
aW5nRnVuY3Rpb24gPSBhbmltYXRpb24tPnRpbWluZ0Z1bmN0aW9uKCkuZ2V0KCk7Ci0KLSAgICAg
ICAgaWYgKG9yaWdpbmFsVGltaW5nRnVuY3Rpb24pIHsKLSAgICAgICAgICAgIHN3aXRjaCAob3Jp
Z2luYWxUaW1pbmdGdW5jdGlvbi0+dHlwZSgpKSB7Ci0gICAgICAgICAgICBjYXNlIFRpbWluZ0Z1
bmN0aW9uOjpTdGVwc0Z1bmN0aW9uOgotICAgICAgICAgICAgICAgIC8vIEZJWE1FOiBhZGQgc3Vw
cG9ydCBmb3Igc3RlcHMgdGltaW5nIGZ1bmN0aW9uLgotICAgICAgICAgICAgICAgIHJldHVybiBu
dWxscHRyOwotICAgICAgICAgICAgY2FzZSBUaW1pbmdGdW5jdGlvbjo6TGluZWFyRnVuY3Rpb246
Ci0gICAgICAgICAgICAgICAgLy8gRG9uJ3Qgc2V0IHRoZSB0aW1pbmcgZnVuY3Rpb24uIEtleWZy
YW1lcyBhcmUgaW50ZXJwb2xhdGVkIGxpbmVhcmx5IGlmIHRoZXJlIGlzIG5vIHRpbWluZyBmdW5j
dGlvbi4KLSAgICAgICAgICAgICAgICBicmVhazsKLSAgICAgICAgICAgIGNhc2UgVGltaW5nRnVu
Y3Rpb246OkN1YmljQmV6aWVyRnVuY3Rpb246Ci0gICAgICAgICAgICAgICAgY29uc3QgQ3ViaWNC
ZXppZXJUaW1pbmdGdW5jdGlvbiogb3JpZ2luYWxCZXppZXJUaW1pbmdGdW5jdGlvbiA9IHN0YXRp
Y19jYXN0PGNvbnN0IEN1YmljQmV6aWVyVGltaW5nRnVuY3Rpb24qPihvcmlnaW5hbFRpbWluZ0Z1
bmN0aW9uKTsKLSAgICAgICAgICAgICAgICB0aW1pbmdGdW5jdGlvbiA9IENDQ3ViaWNCZXppZXJU
aW1pbmdGdW5jdGlvbjo6Y3JlYXRlKG9yaWdpbmFsQmV6aWVyVGltaW5nRnVuY3Rpb24tPngxKCks
IG9yaWdpbmFsQmV6aWVyVGltaW5nRnVuY3Rpb24tPnkxKCksIG9yaWdpbmFsQmV6aWVyVGltaW5n
RnVuY3Rpb24tPngyKCksIG9yaWdpbmFsQmV6aWVyVGltaW5nRnVuY3Rpb24tPnkyKCkpOwotICAg
ICAgICAgICAgICAgIGJyZWFrOwotICAgICAgICAgICAgfSAvLyBzd2l0Y2gKLSAgICAgICAgfSBl
bHNlCi0gICAgICAgICAgICB0aW1pbmdGdW5jdGlvbiA9IENDRWFzZVRpbWluZ0Z1bmN0aW9uOjpj
cmVhdGUoKTsKLQotICAgICAgICBkb3VibGUgZHVyYXRpb24gPSAoYW5pbWF0aW9uICYmIGFuaW1h
dGlvbi0+aXNEdXJhdGlvblNldCgpKSA/IGFuaW1hdGlvbi0+ZHVyYXRpb24oKSA6IDE7Ci0gICAg
ICAgIGRvdWJsZSBrZXlUaW1lID0gb3JpZ2luYWxWYWx1ZS0+a2V5VGltZSgpICogZHVyYXRpb247
Ci0gICAgICAgIGlmIChyZXZlcnNlKQotICAgICAgICAgICAga2V5VGltZSA9IGR1cmF0aW9uIC0g
a2V5VGltZTsKLSAgICAgICAgYXBwZW5kS2V5ZnJhbWU8VmFsdWUsIEtleWZyYW1lLCBDdXJ2ZT4o
KmN1cnZlLCBrZXlUaW1lLCBvcmlnaW5hbFZhbHVlLCB0aW1pbmdGdW5jdGlvbi5yZWxlYXNlKCkp
OwotICAgIH0KLQotICAgIE93blB0cjxDQ0FjdGl2ZUFuaW1hdGlvbj4gYW5pbSA9IENDQWN0aXZl
QW5pbWF0aW9uOjpjcmVhdGUoY3VydmUucmVsZWFzZSgpLCBhbmltYXRpb25JZCwgZ3JvdXBJZCwg
dGFyZ2V0UHJvcGVydHkpOwotCi0gICAgQVNTRVJUKGFuaW0uZ2V0KCkpOwotCi0gICAgaWYgKGFu
aW0uZ2V0KCkpIHsKLSAgICAgICAgaW50IGl0ZXJhdGlvbnMgPSAoYW5pbWF0aW9uICYmIGFuaW1h
dGlvbi0+aXNJdGVyYXRpb25Db3VudFNldCgpKSA/IGFuaW1hdGlvbi0+aXRlcmF0aW9uQ291bnQo
KSA6IDE7Ci0gICAgICAgIGFuaW0tPnNldEl0ZXJhdGlvbnMoaXRlcmF0aW9ucyk7Ci0gICAgICAg
IGFuaW0tPnNldEFsdGVybmF0ZXNEaXJlY3Rpb24oYWx0ZXJuYXRlKTsKLSAgICB9Ci0KLSAgICAv
LyBJbiBvcmRlciB0byBhdm9pZCBza2V3LCB0aGUgbWFpbiB0aHJlYWQgYW5pbWF0aW9uIGNhbm5v
dCB0aWNrIHVudGlsIGl0IGhhcyByZWNlaXZlZCB0aGUgc3RhcnQgdGltZSBvZgotICAgIC8vIHRo
ZSBjb3JyZXNwb25kaW5nIGltcGwgdGhyZWFkIGFuaW1hdGlvbi4KLSAgICBhbmltLT5zZXROZWVk
c1N5bmNocm9uaXplZFN0YXJ0VGltZSh0cnVlKTsKLQotICAgIC8vIElmIHRpbWVPZmZzZXQgPiAw
LCB0aGVuIHRoZSBhbmltYXRpb24gaGFzIHN0YXJ0ZWQgaW4gdGhlIHBhc3QuCi0gICAgYW5pbS0+
c2V0VGltZU9mZnNldCh0aW1lT2Zmc2V0KTsKLQotICAgIHJldHVybiBhbmltLnJlbGVhc2UoKTsK
LX0KLQotfSAvLyBuYW1lcGFjZQotCiBDQ0xheWVyQW5pbWF0aW9uQ29udHJvbGxlcjo6Q0NMYXll
ckFuaW1hdGlvbkNvbnRyb2xsZXIoQ0NMYXllckFuaW1hdGlvbkNvbnRyb2xsZXJDbGllbnQqIGNs
aWVudCkKICAgICA6IG1fZm9yY2VTeW5jKGZhbHNlKQogICAgICwgbV9jbGllbnQoY2xpZW50KQpA
QCAtMTQwLDMyICs1Miw2IEBAIFBhc3NPd25QdHI8Q0NMYXllckFuaW1hdGlvbkNvbnRyb2xsZXI+
IENDTGF5ZXJBbmltYXRpb25Db250cm9sbGVyOjpjcmVhdGUoQ0NMYXllCiAgICAgcmV0dXJuIGFk
b3B0UHRyKG5ldyBDQ0xheWVyQW5pbWF0aW9uQ29udHJvbGxlcihjbGllbnQpKTsKIH0KIAotYm9v
bCBDQ0xheWVyQW5pbWF0aW9uQ29udHJvbGxlcjo6YWRkQW5pbWF0aW9uKGNvbnN0IEtleWZyYW1l
VmFsdWVMaXN0JiB2YWx1ZUxpc3QsIGNvbnN0IEludFNpemUmLCBjb25zdCBBbmltYXRpb24qIGFu
aW1hdGlvbiwgaW50IGFuaW1hdGlvbklkLCBpbnQgZ3JvdXBJZCwgZG91YmxlIHRpbWVPZmZzZXQp
Ci17Ci0gICAgaWYgKCFhbmltYXRpb24pCi0gICAgICAgIHJldHVybiBmYWxzZTsKLQotICAgIE93
blB0cjxDQ0FjdGl2ZUFuaW1hdGlvbj4gdG9BZGQ7Ci0gICAgaWYgKHZhbHVlTGlzdC5wcm9wZXJ0
eSgpID09IEFuaW1hdGVkUHJvcGVydHlXZWJraXRUcmFuc2Zvcm0pCi0gICAgICAgIHRvQWRkID0g
Y3JlYXRlQWN0aXZlQW5pbWF0aW9uPFRyYW5zZm9ybUFuaW1hdGlvblZhbHVlLCBDQ1RyYW5zZm9y
bUtleWZyYW1lLCBDQ0tleWZyYW1lZFRyYW5zZm9ybUFuaW1hdGlvbkN1cnZlPih2YWx1ZUxpc3Qs
IGFuaW1hdGlvbiwgYW5pbWF0aW9uSWQsIGdyb3VwSWQsIHRpbWVPZmZzZXQsIENDQWN0aXZlQW5p
bWF0aW9uOjpUcmFuc2Zvcm0pOwotICAgIGVsc2UgaWYgKHZhbHVlTGlzdC5wcm9wZXJ0eSgpID09
IEFuaW1hdGVkUHJvcGVydHlPcGFjaXR5KQotICAgICAgICB0b0FkZCA9IGNyZWF0ZUFjdGl2ZUFu
aW1hdGlvbjxGbG9hdEFuaW1hdGlvblZhbHVlLCBDQ0Zsb2F0S2V5ZnJhbWUsIENDS2V5ZnJhbWVk
RmxvYXRBbmltYXRpb25DdXJ2ZT4odmFsdWVMaXN0LCBhbmltYXRpb24sIGFuaW1hdGlvbklkLCBn
cm91cElkLCB0aW1lT2Zmc2V0LCBDQ0FjdGl2ZUFuaW1hdGlvbjo6T3BhY2l0eSk7Ci0KLSAgICBp
ZiAodG9BZGQuZ2V0KCkpIHsKLSAgICAgICAgLy8gUmVtb3ZlIGFueSBleGlzdGluZyBhbmltYXRp
b25zIHdpdGggdGhlIHNhbWUgYW5pbWF0aW9uIGlkIGFuZCB0YXJnZXQgcHJvcGVydHkuCi0gICAg
ICAgIGZvciAoc2l6ZV90IGkgPSAwOyBpIDwgbV9hY3RpdmVBbmltYXRpb25zLnNpemUoKTspIHsK
LSAgICAgICAgICAgIGlmIChtX2FjdGl2ZUFuaW1hdGlvbnNbaV0tPmlkKCkgPT0gYW5pbWF0aW9u
SWQgJiYgbV9hY3RpdmVBbmltYXRpb25zW2ldLT50YXJnZXRQcm9wZXJ0eSgpID09IHRvQWRkLT50
YXJnZXRQcm9wZXJ0eSgpKQotICAgICAgICAgICAgICAgIG1fYWN0aXZlQW5pbWF0aW9ucy5yZW1v
dmUoaSk7Ci0gICAgICAgICAgICBlbHNlCi0gICAgICAgICAgICAgICAgaSsrOwotICAgICAgICB9
Ci0gICAgICAgIG1fYWN0aXZlQW5pbWF0aW9ucy5hcHBlbmQodG9BZGQucmVsZWFzZSgpKTsKLSAg
ICAgICAgcmV0dXJuIHRydWU7Ci0gICAgfQotCi0gICAgcmV0dXJuIGZhbHNlOwotfQotCiB2b2lk
IENDTGF5ZXJBbmltYXRpb25Db250cm9sbGVyOjpwYXVzZUFuaW1hdGlvbihpbnQgYW5pbWF0aW9u
SWQsIGRvdWJsZSB0aW1lT2Zmc2V0KQogewogICAgIGZvciAoc2l6ZV90IGkgPSAwOyBpIDwgbV9h
Y3RpdmVBbmltYXRpb25zLnNpemUoKTsgKytpKSB7CkBAIC0xODQsNiArNzAsMTYgQEAgdm9pZCBD
Q0xheWVyQW5pbWF0aW9uQ29udHJvbGxlcjo6cmVtb3ZlQW5pbWF0aW9uKGludCBhbmltYXRpb25J
ZCkKICAgICB9CiB9CiAKK3ZvaWQgQ0NMYXllckFuaW1hdGlvbkNvbnRyb2xsZXI6OnJlbW92ZUFu
aW1hdGlvbihpbnQgYW5pbWF0aW9uSWQsIENDQWN0aXZlQW5pbWF0aW9uOjpUYXJnZXRQcm9wZXJ0
eSB0YXJnZXRQcm9wZXJ0eSkKK3sKKyAgICBmb3IgKHNpemVfdCBpID0gMDsgaSA8IG1fYWN0aXZl
QW5pbWF0aW9ucy5zaXplKCk7KSB7CisgICAgICAgIGlmIChtX2FjdGl2ZUFuaW1hdGlvbnNbaV0t
PmlkKCkgPT0gYW5pbWF0aW9uSWQgJiYgbV9hY3RpdmVBbmltYXRpb25zW2ldLT50YXJnZXRQcm9w
ZXJ0eSgpID09IHRhcmdldFByb3BlcnR5KQorICAgICAgICAgICAgbV9hY3RpdmVBbmltYXRpb25z
LnJlbW92ZShpKTsKKyAgICAgICAgZWxzZQorICAgICAgICAgICAgaSsrOworICAgIH0KK30KKwog
Ly8gQWNjb3JkaW5nIHRvIHJlbmRlciBsYXllciBiYWNraW5nLCB0aGVzZSBhcmUgZm9yIHRlc3Rp
bmcgb25seS4KIHZvaWQgQ0NMYXllckFuaW1hdGlvbkNvbnRyb2xsZXI6OnN1c3BlbmRBbmltYXRp
b25zKGRvdWJsZSBtb25vdG9uaWNUaW1lKQogewpAQCAtMjI3LDcgKzEyMyw3IEBAIHZvaWQgQ0NM
YXllckFuaW1hdGlvbkNvbnRyb2xsZXI6OmFuaW1hdGUoZG91YmxlIG1vbm90b25pY1RpbWUsIEND
QW5pbWF0aW9uRXZlbnRzCiAgICAgc3RhcnRBbmltYXRpb25zV2FpdGluZ0ZvclRhcmdldEF2YWls
YWJpbGl0eShtb25vdG9uaWNUaW1lLCBldmVudHMpOwogfQogCi12b2lkIENDTGF5ZXJBbmltYXRp
b25Db250cm9sbGVyOjphZGQoUGFzc093blB0cjxDQ0FjdGl2ZUFuaW1hdGlvbj4gYW5pbWF0aW9u
KQordm9pZCBDQ0xheWVyQW5pbWF0aW9uQ29udHJvbGxlcjo6YWRkQW5pbWF0aW9uKFBhc3NPd25Q
dHI8Q0NBY3RpdmVBbmltYXRpb24+IGFuaW1hdGlvbikKIHsKICAgICBtX2FjdGl2ZUFuaW1hdGlv
bnMuYXBwZW5kKGFuaW1hdGlvbik7CiB9CkBAIC0yNDAsNiArMTM2LDE2IEBAIENDQWN0aXZlQW5p
bWF0aW9uKiBDQ0xheWVyQW5pbWF0aW9uQ29udHJvbGxlcjo6Z2V0QWN0aXZlQW5pbWF0aW9uKGlu
dCBncm91cElkLCBDCiAgICAgcmV0dXJuIDA7CiB9CiAKK0NDQWN0aXZlQW5pbWF0aW9uKiBDQ0xh
eWVyQW5pbWF0aW9uQ29udHJvbGxlcjo6Z2V0QWN0aXZlQW5pbWF0aW9uKENDQWN0aXZlQW5pbWF0
aW9uOjpUYXJnZXRQcm9wZXJ0eSB0YXJnZXRQcm9wZXJ0eSkgY29uc3QKK3sKKyAgICBmb3IgKHNp
emVfdCBpID0gMDsgaSA8IG1fYWN0aXZlQW5pbWF0aW9ucy5zaXplKCk7ICsraSkgeworICAgICAg
ICBzaXplX3QgaW5kZXggPSBtX2FjdGl2ZUFuaW1hdGlvbnMuc2l6ZSgpIC0gaSAtIDE7CisgICAg
ICAgIGlmIChtX2FjdGl2ZUFuaW1hdGlvbnNbaW5kZXhdLT50YXJnZXRQcm9wZXJ0eSgpID09IHRh
cmdldFByb3BlcnR5KQorICAgICAgICAgICAgcmV0dXJuIG1fYWN0aXZlQW5pbWF0aW9uc1tpbmRl
eF0uZ2V0KCk7CisgICAgfQorICAgIHJldHVybiAwOworfQorCiBib29sIENDTGF5ZXJBbmltYXRp
b25Db250cm9sbGVyOjpoYXNBY3RpdmVBbmltYXRpb24oKSBjb25zdAogewogICAgIGZvciAoc2l6
ZV90IGkgPSAwOyBpIDwgbV9hY3RpdmVBbmltYXRpb25zLnNpemUoKTsgKytpKSB7CkBAIC0yOTQs
NyArMjAwLDcgQEAgdm9pZCBDQ0xheWVyQW5pbWF0aW9uQ29udHJvbGxlcjo6cHVzaE5ld0FuaW1h
dGlvbnNUb0ltcGxUaHJlYWQoQ0NMYXllckFuaW1hdGlvbkMKICAgICAgICAgLy8gVGhlIG5ldyBh
bmltYXRpb24gc2hvdWxkIGJlIHNldCB0byBydW4gYXMgc29vbiBhcyBwb3NzaWJsZS4KICAgICAg
ICAgdG9BZGQtPnNldFJ1blN0YXRlKENDQWN0aXZlQW5pbWF0aW9uOjpXYWl0aW5nRm9yVGFyZ2V0
QXZhaWxhYmlsaXR5LCAwKTsKICAgICAgICAgdG9BZGQtPnNldFN0YXJ0VGltZSgwKTsKLSAgICAg
ICAgY29udHJvbGxlckltcGwtPmFkZCh0b0FkZC5yZWxlYXNlKCkpOworICAgICAgICBjb250cm9s
bGVySW1wbC0+YWRkQW5pbWF0aW9uKHRvQWRkLnJlbGVhc2UoKSk7CiAgICAgfQogfQogCkBAIC00
NjEsNyArMzY3LDcgQEAgdm9pZCBDQ0xheWVyQW5pbWF0aW9uQ29udHJvbGxlcjo6cmVwbGFjZUlt
cGxUaHJlYWRBbmltYXRpb25zKENDTGF5ZXJBbmltYXRpb25Db24KICAgICAgICAgICAgIHRvQWRk
LT5zZXRSdW5TdGF0ZShDQ0FjdGl2ZUFuaW1hdGlvbjo6V2FpdGluZ0ZvclRhcmdldEF2YWlsYWJp
bGl0eSwgMCk7CiAgICAgICAgICAgICB0b0FkZC0+c2V0U3RhcnRUaW1lKDApOwogICAgICAgICB9
Ci0gICAgICAgIGNvbnRyb2xsZXJJbXBsLT5hZGQodG9BZGQucmVsZWFzZSgpKTsKKyAgICAgICAg
Y29udHJvbGxlckltcGwtPmFkZEFuaW1hdGlvbih0b0FkZC5yZWxlYXNlKCkpOwogICAgIH0KIH0K
IApAQCAtNDgwLDcgKzM4Niw3IEBAIHZvaWQgQ0NMYXllckFuaW1hdGlvbkNvbnRyb2xsZXI6OnRp
Y2tBbmltYXRpb25zKGRvdWJsZSBtb25vdG9uaWNUaW1lKQogCiAgICAgICAgICAgICBjYXNlIEND
QWN0aXZlQW5pbWF0aW9uOjpUcmFuc2Zvcm06IHsKICAgICAgICAgICAgICAgICBjb25zdCBDQ1Ry
YW5zZm9ybUFuaW1hdGlvbkN1cnZlKiB0cmFuc2Zvcm1BbmltYXRpb25DdXJ2ZSA9IG1fYWN0aXZl
QW5pbWF0aW9uc1tpXS0+Y3VydmUoKS0+dG9UcmFuc2Zvcm1BbmltYXRpb25DdXJ2ZSgpOwotICAg
ICAgICAgICAgICAgIGNvbnN0IFdlYlRyYW5zZm9ybWF0aW9uTWF0cml4IG1hdHJpeCA9IHRyYW5z
Zm9ybUFuaW1hdGlvbkN1cnZlLT5nZXRWYWx1ZSh0cmltbWVkLCBtX2NsaWVudC0+Ym91bmRzKCkp
OworICAgICAgICAgICAgICAgIGNvbnN0IFdlYlRyYW5zZm9ybWF0aW9uTWF0cml4IG1hdHJpeCA9
IHRyYW5zZm9ybUFuaW1hdGlvbkN1cnZlLT5nZXRWYWx1ZSh0cmltbWVkKTsKICAgICAgICAgICAg
ICAgICBpZiAobV9hY3RpdmVBbmltYXRpb25zW2ldLT5pc0ZpbmlzaGVkQXQobW9ub3RvbmljVGlt
ZSkpCiAgICAgICAgICAgICAgICAgICAgIG1fYWN0aXZlQW5pbWF0aW9uc1tpXS0+c2V0UnVuU3Rh
dGUoQ0NBY3RpdmVBbmltYXRpb246OkZpbmlzaGVkLCBtb25vdG9uaWNUaW1lKTsKIApkaWZmIC0t
Z2l0IGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvY2hyb21pdW0vY2MvQ0NMYXll
ckFuaW1hdGlvbkNvbnRyb2xsZXIuaCBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNz
L2Nocm9taXVtL2NjL0NDTGF5ZXJBbmltYXRpb25Db250cm9sbGVyLmgKaW5kZXggYzRjOTE1OGIy
Yzg3Y2ZlNDZkZmMxNjJkMDg3YTExZmRmZmI4OTI0OC4uMmZjMzlkODEzZTE4ZTYwMDk5ODA0Nzdj
NDVlNzdmZTgzNDk2M2ExYyAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3Jh
cGhpY3MvY2hyb21pdW0vY2MvQ0NMYXllckFuaW1hdGlvbkNvbnRyb2xsZXIuaAorKysgYi9Tb3Vy
Y2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9jaHJvbWl1bS9jYy9DQ0xheWVyQW5pbWF0aW9u
Q29udHJvbGxlci5oCkBAIC01NCw3ICs1NCw2IEBAIHB1YmxpYzoKICAgICB2aXJ0dWFsIGZsb2F0
IG9wYWNpdHkoKSBjb25zdCA9IDA7CiAgICAgdmlydHVhbCB2b2lkIHNldFRyYW5zZm9ybUZyb21B
bmltYXRpb24oY29uc3QgV2ViS2l0OjpXZWJUcmFuc2Zvcm1hdGlvbk1hdHJpeCYpID0gMDsKICAg
ICB2aXJ0dWFsIGNvbnN0IFdlYktpdDo6V2ViVHJhbnNmb3JtYXRpb25NYXRyaXgmIHRyYW5zZm9y
bSgpIGNvbnN0ID0gMDsKLSAgICB2aXJ0dWFsIGNvbnN0IEludFNpemUmIGJvdW5kcygpIGNvbnN0
ID0gMDsKIH07CiAKIGNsYXNzIENDTGF5ZXJBbmltYXRpb25Db250cm9sbGVyIHsKQEAgLTY1LDkg
KzY0LDEwIEBAIHB1YmxpYzoKICAgICB2aXJ0dWFsIH5DQ0xheWVyQW5pbWF0aW9uQ29udHJvbGxl
cigpOwogCiAgICAgLy8gVGhlc2UgbWV0aG9kcyBhcmUgdmlydHVhbCBmb3IgdGVzdGluZy4KLSAg
ICB2aXJ0dWFsIGJvb2wgYWRkQW5pbWF0aW9uKGNvbnN0IEtleWZyYW1lVmFsdWVMaXN0JiwgY29u
c3QgSW50U2l6ZSYgYm94U2l6ZSwgY29uc3QgQW5pbWF0aW9uKiwgaW50IGFuaW1hdGlvbklkLCBp
bnQgZ3JvdXBJZCwgZG91YmxlIHRpbWVPZmZzZXQpOworICAgIHZpcnR1YWwgdm9pZCBhZGRBbmlt
YXRpb24oUGFzc093blB0cjxDQ0FjdGl2ZUFuaW1hdGlvbj4pOwogICAgIHZpcnR1YWwgdm9pZCBw
YXVzZUFuaW1hdGlvbihpbnQgYW5pbWF0aW9uSWQsIGRvdWJsZSB0aW1lT2Zmc2V0KTsKICAgICB2
aXJ0dWFsIHZvaWQgcmVtb3ZlQW5pbWF0aW9uKGludCBhbmltYXRpb25JZCk7CisgICAgdmlydHVh
bCB2b2lkIHJlbW92ZUFuaW1hdGlvbihpbnQgYW5pbWF0aW9uSWQsIENDQWN0aXZlQW5pbWF0aW9u
OjpUYXJnZXRQcm9wZXJ0eSk7CiAgICAgdmlydHVhbCB2b2lkIHN1c3BlbmRBbmltYXRpb25zKGRv
dWJsZSBtb25vdG9uaWNUaW1lKTsKICAgICB2aXJ0dWFsIHZvaWQgcmVzdW1lQW5pbWF0aW9ucyhk
b3VibGUgbW9ub3RvbmljVGltZSk7CiAKQEAgLTc3LDEyICs3NywxNCBAQCBwdWJsaWM6CiAKICAg
ICB2b2lkIGFuaW1hdGUoZG91YmxlIG1vbm90b25pY1RpbWUsIENDQW5pbWF0aW9uRXZlbnRzVmVj
dG9yKik7CiAKLSAgICB2b2lkIGFkZChQYXNzT3duUHRyPENDQWN0aXZlQW5pbWF0aW9uPik7Ci0K
LSAgICAvLyBSZXR1cm5zIHRoZSBhY3RpdmUgYW5pbWF0aW9uIGluIHRoZSBnaXZlbiBncm91cCwg
YW5pbWF0aW5nIHRoZSBnaXZlbiBwcm9wZXJ0eSBpZiBzdWNoIGFuCisgICAgLy8gUmV0dXJucyB0
aGUgYWN0aXZlIGFuaW1hdGlvbiBpbiB0aGUgZ2l2ZW4gZ3JvdXAsIGFuaW1hdGluZyB0aGUgZ2l2
ZW4gcHJvcGVydHksIGlmIHN1Y2ggYW4KICAgICAvLyBhbmltYXRpb24gZXhpc3RzLgogICAgIEND
QWN0aXZlQW5pbWF0aW9uKiBnZXRBY3RpdmVBbmltYXRpb24oaW50IGdyb3VwSWQsIENDQWN0aXZl
QW5pbWF0aW9uOjpUYXJnZXRQcm9wZXJ0eSkgY29uc3Q7CiAKKyAgICAvLyBSZXR1cm5zIHRoZSBh
Y3RpdmUgYW5pbWF0aW9uIGFuaW1hdGluZyB0aGUgZ2l2ZW4gcHJvcGVydHkgdGhhdCBpcyBlaXRo
ZXIgcnVubmluZywgb3IgaXMKKyAgICAvLyBuZXh0IHRvIHJ1biwgaWYgc3VjaCBhbiBhbmltYXRp
b24gZXhpc3RzLgorICAgIENDQWN0aXZlQW5pbWF0aW9uKiBnZXRBY3RpdmVBbmltYXRpb24oQ0NB
Y3RpdmVBbmltYXRpb246OlRhcmdldFByb3BlcnR5KSBjb25zdDsKKwogICAgIC8vIFJldHVybnMg
dHJ1ZSBpZiB0aGVyZSBhcmUgYW55IGFuaW1hdGlvbnMgdGhhdCBoYXZlIG5laXRoZXIgZmluaXNo
ZWQgbm9yIGFib3J0ZWQuCiAgICAgYm9vbCBoYXNBY3RpdmVBbmltYXRpb24oKSBjb25zdDsKIApk
aWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvY2hyb21pdW0vY2Mv
Q0NMYXllckltcGwuaCBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2Nocm9taXVt
L2NjL0NDTGF5ZXJJbXBsLmgKaW5kZXggZmQ0ZmFjYWE0MGNiYTE1ZGY2MjlhMWIyNGRhMzJjMmZh
NWIzNzQ0ZC4uZjAzYzVjM2VhMzFkOWJiNDcyNTAxOTE2MzM5OTVhNDBhOTBlZWRkZCAxMDA2NDQK
LS0tIGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvY2hyb21pdW0vY2MvQ0NMYXll
ckltcGwuaAorKysgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9jaHJvbWl1bS9j
Yy9DQ0xheWVySW1wbC5oCkBAIC02NSw3ICs2NSw2IEBAIHB1YmxpYzoKICAgICB2aXJ0dWFsIGZs
b2F0IG9wYWNpdHkoKSBjb25zdCBPVkVSUklERSB7IHJldHVybiBtX29wYWNpdHk7IH0KICAgICB2
aXJ0dWFsIHZvaWQgc2V0VHJhbnNmb3JtRnJvbUFuaW1hdGlvbihjb25zdCBXZWJLaXQ6OldlYlRy
YW5zZm9ybWF0aW9uTWF0cml4JikgT1ZFUlJJREU7CiAgICAgdmlydHVhbCBjb25zdCBXZWJLaXQ6
OldlYlRyYW5zZm9ybWF0aW9uTWF0cml4JiB0cmFuc2Zvcm0oKSBjb25zdCBPVkVSUklERSB7IHJl
dHVybiBtX3RyYW5zZm9ybTsgfQotICAgIHZpcnR1YWwgY29uc3QgSW50U2l6ZSYgYm91bmRzKCkg
Y29uc3QgT1ZFUlJJREUgeyByZXR1cm4gbV9ib3VuZHM7IH0KIAogICAgIC8vIFRyZWUgc3RydWN0
dXJlLgogICAgIENDTGF5ZXJJbXBsKiBwYXJlbnQoKSBjb25zdCB7IHJldHVybiBtX3BhcmVudDsg
fQpAQCAtMTc2LDYgKzE3NSw3IEBAIHB1YmxpYzoKICAgICB2b2lkIHNldFRhcmdldFJlbmRlclN1
cmZhY2UoQ0NSZW5kZXJTdXJmYWNlKiBzdXJmYWNlKSB7IG1fdGFyZ2V0UmVuZGVyU3VyZmFjZSA9
IHN1cmZhY2U7IH0KIAogICAgIHZvaWQgc2V0Qm91bmRzKGNvbnN0IEludFNpemUmKTsKKyAgICBj
b25zdCBJbnRTaXplJiBib3VuZHMoKSBjb25zdCB7IHJldHVybiBtX2JvdW5kczsgfQogCiAgICAg
Y29uc3QgSW50U2l6ZSYgY29udGVudEJvdW5kcygpIGNvbnN0IHsgcmV0dXJuIG1fY29udGVudEJv
dW5kczsgfQogICAgIHZvaWQgc2V0Q29udGVudEJvdW5kcyhjb25zdCBJbnRTaXplJik7CmRpZmYg
LS1naXQgYS9Tb3VyY2UvV2ViS2l0L2Nocm9taXVtL3Rlc3RzL0NDQW5pbWF0aW9uVGVzdENvbW1v
bi5jcHAgYi9Tb3VyY2UvV2ViS2l0L2Nocm9taXVtL3Rlc3RzL0NDQW5pbWF0aW9uVGVzdENvbW1v
bi5jcHAKaW5kZXggMGU4YzFhNDAxZjZjOGJiZGUyMjMyMzFkMmM5M2ZkOTg0YjM1MjEzYS4uODU0
NTk1MzgwNTNjNmE5ODYwYWYwZjc5NDgwZmNlNmY2M2Q3YzNjMyAxMDA2NDQKLS0tIGEvU291cmNl
L1dlYktpdC9jaHJvbWl1bS90ZXN0cy9DQ0FuaW1hdGlvblRlc3RDb21tb24uY3BwCisrKyBiL1Nv
dXJjZS9XZWJLaXQvY2hyb21pdW0vdGVzdHMvQ0NBbmltYXRpb25UZXN0Q29tbW9uLmNwcApAQCAt
MjksOSArMjksMTIgQEAKICNpbmNsdWRlICJHcmFwaGljc0xheWVyLmgiCiAjaW5jbHVkZSAiTGF5
ZXJDaHJvbWl1bS5oIgogI2luY2x1ZGUgIlRyYW5zbGF0ZVRyYW5zZm9ybU9wZXJhdGlvbi5oIgor
I2luY2x1ZGUgImNjL0NDS2V5ZnJhbWVkQW5pbWF0aW9uQ3VydmUuaCIKICNpbmNsdWRlICJjYy9D
Q0xheWVyQW5pbWF0aW9uQ29udHJvbGxlci5oIgogI2luY2x1ZGUgImNjL0NDTGF5ZXJJbXBsLmgi
CiAKKyNpbmNsdWRlIDxwdWJsaWMvV2ViVHJhbnNmb3JtT3BlcmF0aW9ucy5oPgorCiB1c2luZyBu
YW1lc3BhY2UgV2ViQ29yZTsKIAogbmFtZXNwYWNlIHsKQEAgLTM5LDM4ICs0MiwzOCBAQCBuYW1l
c3BhY2UgewogdGVtcGxhdGUgPGNsYXNzIFRhcmdldD4KIHZvaWQgYWRkT3BhY2l0eVRyYW5zaXRp
b24oVGFyZ2V0JiB0YXJnZXQsIGRvdWJsZSBkdXJhdGlvbiwgZmxvYXQgc3RhcnRPcGFjaXR5LCBm
bG9hdCBlbmRPcGFjaXR5LCBib29sIHVzZVRpbWluZ0Z1bmN0aW9uKQogewotICAgIFdlYkNvcmU6
OktleWZyYW1lVmFsdWVMaXN0IHZhbHVlcyhBbmltYXRlZFByb3BlcnR5T3BhY2l0eSk7Ci0gICAg
aWYgKGR1cmF0aW9uID4gMCkKLSAgICAgICAgdmFsdWVzLmluc2VydChuZXcgRmxvYXRBbmltYXRp
b25WYWx1ZSgwLCBzdGFydE9wYWNpdHkpKTsKLSAgICB2YWx1ZXMuaW5zZXJ0KG5ldyBGbG9hdEFu
aW1hdGlvblZhbHVlKGR1cmF0aW9uLCBlbmRPcGFjaXR5KSk7CisgICAgT3duUHRyPENDS2V5ZnJh
bWVkRmxvYXRBbmltYXRpb25DdXJ2ZT4gY3VydmUoQ0NLZXlmcmFtZWRGbG9hdEFuaW1hdGlvbkN1
cnZlOjpjcmVhdGUoKSk7CiAKLSAgICBSZWZQdHI8QW5pbWF0aW9uPiBhbmltYXRpb24gPSBBbmlt
YXRpb246OmNyZWF0ZSgpOwotICAgIGFuaW1hdGlvbi0+c2V0RHVyYXRpb24oZHVyYXRpb24pOwot
Ci0gICAgaWYgKHVzZVRpbWluZ0Z1bmN0aW9uKQotICAgICAgICBhbmltYXRpb24tPnNldFRpbWlu
Z0Z1bmN0aW9uKExpbmVhclRpbWluZ0Z1bmN0aW9uOjpjcmVhdGUoKSk7CisgICAgaWYgKGR1cmF0
aW9uID4gMCkKKyAgICAgICAgY3VydmUtPmFkZEtleWZyYW1lKENDRmxvYXRLZXlmcmFtZTo6Y3Jl
YXRlKDAsIHN0YXJ0T3BhY2l0eSwgdXNlVGltaW5nRnVuY3Rpb24gPyBudWxscHRyIDogQ0NFYXNl
VGltaW5nRnVuY3Rpb246OmNyZWF0ZSgpKSk7CisgICAgY3VydmUtPmFkZEtleWZyYW1lKENDRmxv
YXRLZXlmcmFtZTo6Y3JlYXRlKGR1cmF0aW9uLCBlbmRPcGFjaXR5LCBudWxscHRyKSk7CiAKLSAg
ICBJbnRTaXplIGJveFNpemU7CisgICAgT3duUHRyPENDQWN0aXZlQW5pbWF0aW9uPiBhbmltYXRp
b24oQ0NBY3RpdmVBbmltYXRpb246OmNyZWF0ZShjdXJ2ZS5yZWxlYXNlKCksIDAsIDAsIENDQWN0
aXZlQW5pbWF0aW9uOjpPcGFjaXR5KSk7CisgICAgYW5pbWF0aW9uLT5zZXROZWVkc1N5bmNocm9u
aXplZFN0YXJ0VGltZSh0cnVlKTsKIAotICAgIHRhcmdldC5hZGRBbmltYXRpb24odmFsdWVzLCBi
b3hTaXplLCBhbmltYXRpb24uZ2V0KCksIDAsIDAsIDApOworICAgIHRhcmdldC5hZGRBbmltYXRp
b24oYW5pbWF0aW9uLnJlbGVhc2UoKSk7CiB9CiAKIHRlbXBsYXRlIDxjbGFzcyBUYXJnZXQ+CiB2
b2lkIGFkZEFuaW1hdGVkVHJhbnNmb3JtKFRhcmdldCYgdGFyZ2V0LCBkb3VibGUgZHVyYXRpb24s
IGludCBkZWx0YVgsIGludCBkZWx0YVkpCiB7CiAgICAgc3RhdGljIGludCBpZCA9IDA7Ci0gICAg
V2ViQ29yZTo6S2V5ZnJhbWVWYWx1ZUxpc3QgdmFsdWVzKEFuaW1hdGVkUHJvcGVydHlXZWJraXRU
cmFuc2Zvcm0pOworICAgIE93blB0cjxDQ0tleWZyYW1lZFRyYW5zZm9ybUFuaW1hdGlvbkN1cnZl
PiBjdXJ2ZShDQ0tleWZyYW1lZFRyYW5zZm9ybUFuaW1hdGlvbkN1cnZlOjpjcmVhdGUoKSk7CiAK
LSAgICBUcmFuc2Zvcm1PcGVyYXRpb25zIG9wZXJhdGlvbnM7Ci0gICAgb3BlcmF0aW9ucy5vcGVy
YXRpb25zKCkuYXBwZW5kKFRyYW5zbGF0ZVRyYW5zZm9ybU9wZXJhdGlvbjo6Y3JlYXRlKExlbmd0
aChkZWx0YVgsIFdlYkNvcmU6OkZpeGVkKSwgTGVuZ3RoKGRlbHRhWSwgV2ViQ29yZTo6Rml4ZWQp
LCBUcmFuc2Zvcm1PcGVyYXRpb246OlRSQU5TTEFURV9YKSk7Ci0gICAgdmFsdWVzLmluc2VydChu
ZXcgVHJhbnNmb3JtQW5pbWF0aW9uVmFsdWUoMCwgJm9wZXJhdGlvbnMpKTsKKyAgICBpZiAoZHVy
YXRpb24gPiAwKSB7CisgICAgICAgIFdlYktpdDo6V2ViVHJhbnNmb3JtT3BlcmF0aW9ucyBzdGFy
dE9wZXJhdGlvbnM7CisgICAgICAgIHN0YXJ0T3BlcmF0aW9ucy5hcHBlbmRUcmFuc2xhdGUoZGVs
dGFYLCBkZWx0YVksIDApOworICAgICAgICBjdXJ2ZS0+YWRkS2V5ZnJhbWUoQ0NUcmFuc2Zvcm1L
ZXlmcmFtZTo6Y3JlYXRlKDAsIHN0YXJ0T3BlcmF0aW9ucywgbnVsbHB0cikpOworICAgIH0KIAot
ICAgIFJlZlB0cjxBbmltYXRpb24+IGFuaW1hdGlvbiA9IEFuaW1hdGlvbjo6Y3JlYXRlKCk7Ci0g
ICAgYW5pbWF0aW9uLT5zZXREdXJhdGlvbihkdXJhdGlvbik7CisgICAgV2ViS2l0OjpXZWJUcmFu
c2Zvcm1PcGVyYXRpb25zIG9wZXJhdGlvbnM7CisgICAgb3BlcmF0aW9ucy5hcHBlbmRUcmFuc2xh
dGUoZGVsdGFYLCBkZWx0YVksIDApOworICAgIGN1cnZlLT5hZGRLZXlmcmFtZShDQ1RyYW5zZm9y
bUtleWZyYW1lOjpjcmVhdGUoZHVyYXRpb24sIG9wZXJhdGlvbnMsIG51bGxwdHIpKTsKIAotICAg
IEludFNpemUgYm94U2l6ZTsKKyAgICBPd25QdHI8Q0NBY3RpdmVBbmltYXRpb24+IGFuaW1hdGlv
bihDQ0FjdGl2ZUFuaW1hdGlvbjo6Y3JlYXRlKGN1cnZlLnJlbGVhc2UoKSwgaWQrKywgMCwgQ0NB
Y3RpdmVBbmltYXRpb246OlRyYW5zZm9ybSkpOworICAgIGFuaW1hdGlvbi0+c2V0TmVlZHNTeW5j
aHJvbml6ZWRTdGFydFRpbWUodHJ1ZSk7CiAKLSAgICB0YXJnZXQuYWRkQW5pbWF0aW9uKHZhbHVl
cywgYm94U2l6ZSwgYW5pbWF0aW9uLmdldCgpLCArK2lkLCAwLCAwKTsKKyAgICB0YXJnZXQuYWRk
QW5pbWF0aW9uKGFuaW1hdGlvbi5yZWxlYXNlKCkpOwogfQogCiB9IC8vIG5hbWVzcGFjZQpAQCAt
OTksNyArMTAyLDcgQEAgRmFrZVRyYW5zZm9ybVRyYW5zaXRpb246On5GYWtlVHJhbnNmb3JtVHJh
bnNpdGlvbigpCiB7CiB9CiAKLVdlYktpdDo6V2ViVHJhbnNmb3JtYXRpb25NYXRyaXggRmFrZVRy
YW5zZm9ybVRyYW5zaXRpb246OmdldFZhbHVlKGRvdWJsZSB0aW1lLCBjb25zdCBXZWJDb3JlOjpJ
bnRTaXplJiBzaXplKSBjb25zdAorV2ViS2l0OjpXZWJUcmFuc2Zvcm1hdGlvbk1hdHJpeCBGYWtl
VHJhbnNmb3JtVHJhbnNpdGlvbjo6Z2V0VmFsdWUoZG91YmxlIHRpbWUpIGNvbnN0CiB7CiAgICAg
cmV0dXJuIFdlYktpdDo6V2ViVHJhbnNmb3JtYXRpb25NYXRyaXgoKTsKIH0KZGlmZiAtLWdpdCBh
L1NvdXJjZS9XZWJLaXQvY2hyb21pdW0vdGVzdHMvQ0NBbmltYXRpb25UZXN0Q29tbW9uLmggYi9T
b3VyY2UvV2ViS2l0L2Nocm9taXVtL3Rlc3RzL0NDQW5pbWF0aW9uVGVzdENvbW1vbi5oCmluZGV4
IDQzODQxMTdkMzljYWI3MjJmODQ1NGVkNTc3NmU1MDIyOTkxNjBmN2UuLjRiYmQ2MDExMjIyYTEz
Mzk5NDcyMThjN2IzYjdmNzQ2NDdjZmViNTEgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJLaXQvY2hy
b21pdW0vdGVzdHMvQ0NBbmltYXRpb25UZXN0Q29tbW9uLmgKKysrIGIvU291cmNlL1dlYktpdC9j
aHJvbWl1bS90ZXN0cy9DQ0FuaW1hdGlvblRlc3RDb21tb24uaApAQCAtNTQsNyArNTQsNyBAQCBw
dWJsaWM6CiAgICAgdmlydHVhbCB+RmFrZVRyYW5zZm9ybVRyYW5zaXRpb24oKTsKIAogICAgIHZp
cnR1YWwgZG91YmxlIGR1cmF0aW9uKCkgY29uc3QgT1ZFUlJJREUgeyByZXR1cm4gbV9kdXJhdGlv
bjsgfQotICAgIHZpcnR1YWwgV2ViS2l0OjpXZWJUcmFuc2Zvcm1hdGlvbk1hdHJpeCBnZXRWYWx1
ZShkb3VibGUgdGltZSwgY29uc3QgV2ViQ29yZTo6SW50U2l6ZSYpIGNvbnN0IE9WRVJSSURFOwor
ICAgIHZpcnR1YWwgV2ViS2l0OjpXZWJUcmFuc2Zvcm1hdGlvbk1hdHJpeCBnZXRWYWx1ZShkb3Vi
bGUgdGltZSkgY29uc3QgT1ZFUlJJREU7CiAKICAgICB2aXJ0dWFsIFBhc3NPd25QdHI8V2ViQ29y
ZTo6Q0NBbmltYXRpb25DdXJ2ZT4gY2xvbmUoKSBjb25zdCBPVkVSUklERTsKIApAQCAtODksMTIg
Kzg5LDEwIEBAIHB1YmxpYzoKICAgICB2aXJ0dWFsIGZsb2F0IG9wYWNpdHkoKSBjb25zdCBPVkVS
UklERSB7IHJldHVybiBtX29wYWNpdHk7IH0KICAgICB2aXJ0dWFsIHZvaWQgc2V0VHJhbnNmb3Jt
RnJvbUFuaW1hdGlvbihjb25zdCBXZWJLaXQ6OldlYlRyYW5zZm9ybWF0aW9uTWF0cml4JiB0cmFu
c2Zvcm0pIE9WRVJSSURFIHsgbV90cmFuc2Zvcm0gPSB0cmFuc2Zvcm07IH0KICAgICB2aXJ0dWFs
IGNvbnN0IFdlYktpdDo6V2ViVHJhbnNmb3JtYXRpb25NYXRyaXgmIHRyYW5zZm9ybSgpIGNvbnN0
IE9WRVJSSURFIHsgcmV0dXJuIG1fdHJhbnNmb3JtOyB9Ci0gICAgdmlydHVhbCBjb25zdCBXZWJD
b3JlOjpJbnRTaXplJiBib3VuZHMoKSBjb25zdCBPVkVSUklERSB7IHJldHVybiBtX2JvdW5kczsg
fQogCiBwcml2YXRlOgogICAgIGZsb2F0IG1fb3BhY2l0eTsKICAgICBXZWJLaXQ6OldlYlRyYW5z
Zm9ybWF0aW9uTWF0cml4IG1fdHJhbnNmb3JtOwotICAgIFdlYkNvcmU6OkludFNpemUgbV9ib3Vu
ZHM7CiB9OwogCiB2b2lkIGFkZE9wYWNpdHlUcmFuc2l0aW9uVG9Db250cm9sbGVyKFdlYkNvcmU6
OkNDTGF5ZXJBbmltYXRpb25Db250cm9sbGVyJiwgZG91YmxlIGR1cmF0aW9uLCBmbG9hdCBzdGFy
dE9wYWNpdHksIGZsb2F0IGVuZE9wYWNpdHksIGJvb2wgdXNlVGltaW5nRnVuY3Rpb24pOwpkaWZm
IC0tZ2l0IGEvU291cmNlL1dlYktpdC9jaHJvbWl1bS90ZXN0cy9DQ0tleWZyYW1lZEFuaW1hdGlv
bkN1cnZlVGVzdC5jcHAgYi9Tb3VyY2UvV2ViS2l0L2Nocm9taXVtL3Rlc3RzL0NDS2V5ZnJhbWVk
QW5pbWF0aW9uQ3VydmVUZXN0LmNwcAppbmRleCBhZDFhZTc0Y2ExMjU3MzY0YzljMTUzMGU0N2Uy
MGI2OTQ3ZjUwYmJkLi5lYjZiYjAzNjNkYTg1NWVmYzU3M2U4MDk0NjhiYTcyOWU0OGFjZDRmIDEw
MDY0NAotLS0gYS9Tb3VyY2UvV2ViS2l0L2Nocm9taXVtL3Rlc3RzL0NDS2V5ZnJhbWVkQW5pbWF0
aW9uQ3VydmVUZXN0LmNwcAorKysgYi9Tb3VyY2UvV2ViS2l0L2Nocm9taXVtL3Rlc3RzL0NDS2V5
ZnJhbWVkQW5pbWF0aW9uQ3VydmVUZXN0LmNwcApAQCAtMzEsNiArMzEsNyBAQAogCiAjaW5jbHVk
ZSA8Z21vY2svZ21vY2suaD4KICNpbmNsdWRlIDxndGVzdC9ndGVzdC5oPgorI2luY2x1ZGUgPHB1
YmxpYy9XZWJUcmFuc2Zvcm1PcGVyYXRpb25zLmg+CiAjaW5jbHVkZSA8cHVibGljL1dlYlRyYW5z
Zm9ybWF0aW9uTWF0cml4Lmg+CiAjaW5jbHVkZSA8d3RmL093blB0ci5oPgogI2luY2x1ZGUgPHd0
Zi9WZWN0b3IuaD4KQEAgLTExMyw1NyArMTE0LDU1IEBAIFRFU1QoQ0NLZXlmcmFtZWRBbmltYXRp
b25DdXJ2ZVRlc3QsIFJlcGVhdGVkRmxvYXRLZXlUaW1lcykKIFRFU1QoQ0NLZXlmcmFtZWRBbmlt
YXRpb25DdXJ2ZVRlc3QsIE9uZVRyYW5zZm9ybUtleWZyYW1lKQogewogICAgIE93blB0cjxDQ0tl
eWZyYW1lZFRyYW5zZm9ybUFuaW1hdGlvbkN1cnZlPiBjdXJ2ZShDQ0tleWZyYW1lZFRyYW5zZm9y
bUFuaW1hdGlvbkN1cnZlOjpjcmVhdGUoKSk7Ci0gICAgVHJhbnNmb3JtT3BlcmF0aW9ucyBvcGVy
YXRpb25zOwotICAgIG9wZXJhdGlvbnMub3BlcmF0aW9ucygpLmFwcGVuZChUcmFuc2xhdGVUcmFu
c2Zvcm1PcGVyYXRpb246OmNyZWF0ZShMZW5ndGgoMiwgRml4ZWQpLCBMZW5ndGgoMCwgRml4ZWQp
LCBUcmFuc2Zvcm1PcGVyYXRpb246OlRSQU5TTEFURV9YKSk7CisgICAgV2ViS2l0OjpXZWJUcmFu
c2Zvcm1PcGVyYXRpb25zIG9wZXJhdGlvbnM7CisgICAgb3BlcmF0aW9ucy5hcHBlbmRUcmFuc2xh
dGUoMiwgMCwgMCk7CiAgICAgY3VydmUtPmFkZEtleWZyYW1lKENDVHJhbnNmb3JtS2V5ZnJhbWU6
OmNyZWF0ZSgwLCBvcGVyYXRpb25zLCBudWxscHRyKSk7CiAKLSAgICBJbnRTaXplIGxheWVyU2l6
ZTsgLy8gaWdub3JlZAotICAgIGV4cGVjdFRyYW5zbGF0ZVgoMiwgY3VydmUtPmdldFZhbHVlKC0x
LCBsYXllclNpemUpKTsKLSAgICBleHBlY3RUcmFuc2xhdGVYKDIsIGN1cnZlLT5nZXRWYWx1ZSgw
LCBsYXllclNpemUpKTsKLSAgICBleHBlY3RUcmFuc2xhdGVYKDIsIGN1cnZlLT5nZXRWYWx1ZSgw
LjUsIGxheWVyU2l6ZSkpOwotICAgIGV4cGVjdFRyYW5zbGF0ZVgoMiwgY3VydmUtPmdldFZhbHVl
KDEsIGxheWVyU2l6ZSkpOwotICAgIGV4cGVjdFRyYW5zbGF0ZVgoMiwgY3VydmUtPmdldFZhbHVl
KDIsIGxheWVyU2l6ZSkpOworICAgIGV4cGVjdFRyYW5zbGF0ZVgoMiwgY3VydmUtPmdldFZhbHVl
KC0xKSk7CisgICAgZXhwZWN0VHJhbnNsYXRlWCgyLCBjdXJ2ZS0+Z2V0VmFsdWUoMCkpOworICAg
IGV4cGVjdFRyYW5zbGF0ZVgoMiwgY3VydmUtPmdldFZhbHVlKDAuNSkpOworICAgIGV4cGVjdFRy
YW5zbGF0ZVgoMiwgY3VydmUtPmdldFZhbHVlKDEpKTsKKyAgICBleHBlY3RUcmFuc2xhdGVYKDIs
IGN1cnZlLT5nZXRWYWx1ZSgyKSk7CiB9CiAKIC8vIFRlc3RzIHRoYXQgYSB0cmFuc2Zvcm0gYW5p
bWF0aW9uIHdpdGggdHdvIGtleWZyYW1lcyB3b3JrcyBhcyBleHBlY3RlZC4KIFRFU1QoQ0NLZXlm
cmFtZWRBbmltYXRpb25DdXJ2ZVRlc3QsIFR3b1RyYW5zZm9ybUtleWZyYW1lKQogewogICAgIE93
blB0cjxDQ0tleWZyYW1lZFRyYW5zZm9ybUFuaW1hdGlvbkN1cnZlPiBjdXJ2ZShDQ0tleWZyYW1l
ZFRyYW5zZm9ybUFuaW1hdGlvbkN1cnZlOjpjcmVhdGUoKSk7Ci0gICAgVHJhbnNmb3JtT3BlcmF0
aW9ucyBvcGVyYXRpb25zMTsKLSAgICBvcGVyYXRpb25zMS5vcGVyYXRpb25zKCkuYXBwZW5kKFRy
YW5zbGF0ZVRyYW5zZm9ybU9wZXJhdGlvbjo6Y3JlYXRlKExlbmd0aCgyLCBGaXhlZCksIExlbmd0
aCgwLCBGaXhlZCksIFRyYW5zZm9ybU9wZXJhdGlvbjo6VFJBTlNMQVRFX1gpKTsKLSAgICBUcmFu
c2Zvcm1PcGVyYXRpb25zIG9wZXJhdGlvbnMyOwotICAgIG9wZXJhdGlvbnMyLm9wZXJhdGlvbnMo
KS5hcHBlbmQoVHJhbnNsYXRlVHJhbnNmb3JtT3BlcmF0aW9uOjpjcmVhdGUoTGVuZ3RoKDQsIEZp
eGVkKSwgTGVuZ3RoKDAsIEZpeGVkKSwgVHJhbnNmb3JtT3BlcmF0aW9uOjpUUkFOU0xBVEVfWCkp
OworICAgIFdlYktpdDo6V2ViVHJhbnNmb3JtT3BlcmF0aW9ucyBvcGVyYXRpb25zMTsKKyAgICBv
cGVyYXRpb25zMS5hcHBlbmRUcmFuc2xhdGUoMiwgMCwgMCk7CisgICAgV2ViS2l0OjpXZWJUcmFu
c2Zvcm1PcGVyYXRpb25zIG9wZXJhdGlvbnMyOworICAgIG9wZXJhdGlvbnMyLmFwcGVuZFRyYW5z
bGF0ZSg0LCAwLCAwKTsKKwogICAgIGN1cnZlLT5hZGRLZXlmcmFtZShDQ1RyYW5zZm9ybUtleWZy
YW1lOjpjcmVhdGUoMCwgb3BlcmF0aW9uczEsIG51bGxwdHIpKTsKICAgICBjdXJ2ZS0+YWRkS2V5
ZnJhbWUoQ0NUcmFuc2Zvcm1LZXlmcmFtZTo6Y3JlYXRlKDEsIG9wZXJhdGlvbnMyLCBudWxscHRy
KSk7Ci0gICAgSW50U2l6ZSBsYXllclNpemU7IC8vIGlnbm9yZWQKLSAgICBleHBlY3RUcmFuc2xh
dGVYKDIsIGN1cnZlLT5nZXRWYWx1ZSgtMSwgbGF5ZXJTaXplKSk7Ci0gICAgZXhwZWN0VHJhbnNs
YXRlWCgyLCBjdXJ2ZS0+Z2V0VmFsdWUoMCwgbGF5ZXJTaXplKSk7Ci0gICAgZXhwZWN0VHJhbnNs
YXRlWCgzLCBjdXJ2ZS0+Z2V0VmFsdWUoMC41LCBsYXllclNpemUpKTsKLSAgICBleHBlY3RUcmFu
c2xhdGVYKDQsIGN1cnZlLT5nZXRWYWx1ZSgxLCBsYXllclNpemUpKTsKLSAgICBleHBlY3RUcmFu
c2xhdGVYKDQsIGN1cnZlLT5nZXRWYWx1ZSgyLCBsYXllclNpemUpKTsKKyAgICBleHBlY3RUcmFu
c2xhdGVYKDIsIGN1cnZlLT5nZXRWYWx1ZSgtMSkpOworICAgIGV4cGVjdFRyYW5zbGF0ZVgoMiwg
Y3VydmUtPmdldFZhbHVlKDApKTsKKyAgICBleHBlY3RUcmFuc2xhdGVYKDMsIGN1cnZlLT5nZXRW
YWx1ZSgwLjUpKTsKKyAgICBleHBlY3RUcmFuc2xhdGVYKDQsIGN1cnZlLT5nZXRWYWx1ZSgxKSk7
CisgICAgZXhwZWN0VHJhbnNsYXRlWCg0LCBjdXJ2ZS0+Z2V0VmFsdWUoMikpOwogfQogCiAvLyBU
ZXN0cyB0aGF0IGEgdHJhbnNmb3JtIGFuaW1hdGlvbiB3aXRoIHRocmVlIGtleWZyYW1lcyB3b3Jr
cyBhcyBleHBlY3RlZC4KIFRFU1QoQ0NLZXlmcmFtZWRBbmltYXRpb25DdXJ2ZVRlc3QsIFRocmVl
VHJhbnNmb3JtS2V5ZnJhbWUpCiB7CiAgICAgT3duUHRyPENDS2V5ZnJhbWVkVHJhbnNmb3JtQW5p
bWF0aW9uQ3VydmU+IGN1cnZlKENDS2V5ZnJhbWVkVHJhbnNmb3JtQW5pbWF0aW9uQ3VydmU6OmNy
ZWF0ZSgpKTsKLSAgICBUcmFuc2Zvcm1PcGVyYXRpb25zIG9wZXJhdGlvbnMxOwotICAgIG9wZXJh
dGlvbnMxLm9wZXJhdGlvbnMoKS5hcHBlbmQoVHJhbnNsYXRlVHJhbnNmb3JtT3BlcmF0aW9uOjpj
cmVhdGUoTGVuZ3RoKDIsIEZpeGVkKSwgTGVuZ3RoKDAsIEZpeGVkKSwgVHJhbnNmb3JtT3BlcmF0
aW9uOjpUUkFOU0xBVEVfWCkpOwotICAgIFRyYW5zZm9ybU9wZXJhdGlvbnMgb3BlcmF0aW9uczI7
Ci0gICAgb3BlcmF0aW9uczIub3BlcmF0aW9ucygpLmFwcGVuZChUcmFuc2xhdGVUcmFuc2Zvcm1P
cGVyYXRpb246OmNyZWF0ZShMZW5ndGgoNCwgRml4ZWQpLCBMZW5ndGgoMCwgRml4ZWQpLCBUcmFu
c2Zvcm1PcGVyYXRpb246OlRSQU5TTEFURV9YKSk7Ci0gICAgVHJhbnNmb3JtT3BlcmF0aW9ucyBv
cGVyYXRpb25zMzsKLSAgICBvcGVyYXRpb25zMy5vcGVyYXRpb25zKCkuYXBwZW5kKFRyYW5zbGF0
ZVRyYW5zZm9ybU9wZXJhdGlvbjo6Y3JlYXRlKExlbmd0aCg4LCBGaXhlZCksIExlbmd0aCgwLCBG
aXhlZCksIFRyYW5zZm9ybU9wZXJhdGlvbjo6VFJBTlNMQVRFX1gpKTsKKyAgICBXZWJLaXQ6Oldl
YlRyYW5zZm9ybU9wZXJhdGlvbnMgb3BlcmF0aW9uczE7CisgICAgb3BlcmF0aW9uczEuYXBwZW5k
VHJhbnNsYXRlKDIsIDAsIDApOworICAgIFdlYktpdDo6V2ViVHJhbnNmb3JtT3BlcmF0aW9ucyBv
cGVyYXRpb25zMjsKKyAgICBvcGVyYXRpb25zMi5hcHBlbmRUcmFuc2xhdGUoNCwgMCwgMCk7Cisg
ICAgV2ViS2l0OjpXZWJUcmFuc2Zvcm1PcGVyYXRpb25zIG9wZXJhdGlvbnMzOworICAgIG9wZXJh
dGlvbnMzLmFwcGVuZFRyYW5zbGF0ZSg4LCAwLCAwKTsKICAgICBjdXJ2ZS0+YWRkS2V5ZnJhbWUo
Q0NUcmFuc2Zvcm1LZXlmcmFtZTo6Y3JlYXRlKDAsIG9wZXJhdGlvbnMxLCBudWxscHRyKSk7CiAg
ICAgY3VydmUtPmFkZEtleWZyYW1lKENDVHJhbnNmb3JtS2V5ZnJhbWU6OmNyZWF0ZSgxLCBvcGVy
YXRpb25zMiwgbnVsbHB0cikpOwogICAgIGN1cnZlLT5hZGRLZXlmcmFtZShDQ1RyYW5zZm9ybUtl
eWZyYW1lOjpjcmVhdGUoMiwgb3BlcmF0aW9uczMsIG51bGxwdHIpKTsKLSAgICBJbnRTaXplIGxh
eWVyU2l6ZTsgLy8gaWdub3JlZAotICAgIGV4cGVjdFRyYW5zbGF0ZVgoMiwgY3VydmUtPmdldFZh
bHVlKC0xLCBsYXllclNpemUpKTsKLSAgICBleHBlY3RUcmFuc2xhdGVYKDIsIGN1cnZlLT5nZXRW
YWx1ZSgwLCBsYXllclNpemUpKTsKLSAgICBleHBlY3RUcmFuc2xhdGVYKDMsIGN1cnZlLT5nZXRW
YWx1ZSgwLjUsIGxheWVyU2l6ZSkpOwotICAgIGV4cGVjdFRyYW5zbGF0ZVgoNCwgY3VydmUtPmdl
dFZhbHVlKDEsIGxheWVyU2l6ZSkpOwotICAgIGV4cGVjdFRyYW5zbGF0ZVgoNiwgY3VydmUtPmdl
dFZhbHVlKDEuNSwgbGF5ZXJTaXplKSk7Ci0gICAgZXhwZWN0VHJhbnNsYXRlWCg4LCBjdXJ2ZS0+
Z2V0VmFsdWUoMiwgbGF5ZXJTaXplKSk7Ci0gICAgZXhwZWN0VHJhbnNsYXRlWCg4LCBjdXJ2ZS0+
Z2V0VmFsdWUoMywgbGF5ZXJTaXplKSk7CisgICAgZXhwZWN0VHJhbnNsYXRlWCgyLCBjdXJ2ZS0+
Z2V0VmFsdWUoLTEpKTsKKyAgICBleHBlY3RUcmFuc2xhdGVYKDIsIGN1cnZlLT5nZXRWYWx1ZSgw
KSk7CisgICAgZXhwZWN0VHJhbnNsYXRlWCgzLCBjdXJ2ZS0+Z2V0VmFsdWUoMC41KSk7CisgICAg
ZXhwZWN0VHJhbnNsYXRlWCg0LCBjdXJ2ZS0+Z2V0VmFsdWUoMSkpOworICAgIGV4cGVjdFRyYW5z
bGF0ZVgoNiwgY3VydmUtPmdldFZhbHVlKDEuNSkpOworICAgIGV4cGVjdFRyYW5zbGF0ZVgoOCwg
Y3VydmUtPmdldFZhbHVlKDIpKTsKKyAgICBleHBlY3RUcmFuc2xhdGVYKDgsIGN1cnZlLT5nZXRW
YWx1ZSgzKSk7CiB9CiAKIC8vIFRlc3RzIHRoYXQgYSB0cmFuc2Zvcm0gYW5pbWF0aW9uIHdpdGgg
bXVsdGlwbGUga2V5cyBhdCBhIGdpdmVuIHRpbWUgd29ya3Mgc2FuZWx5LgpAQCAtMTcxLDMyICsx
NzAsMzAgQEAgVEVTVChDQ0tleWZyYW1lZEFuaW1hdGlvbkN1cnZlVGVzdCwgUmVwZWF0ZWRUcmFu
c2Zvcm1LZXlUaW1lcykKIHsKICAgICBPd25QdHI8Q0NLZXlmcmFtZWRUcmFuc2Zvcm1BbmltYXRp
b25DdXJ2ZT4gY3VydmUoQ0NLZXlmcmFtZWRUcmFuc2Zvcm1BbmltYXRpb25DdXJ2ZTo6Y3JlYXRl
KCkpOwogICAgIC8vIEEgc3RlcCBmdW5jdGlvbi4KLSAgICBUcmFuc2Zvcm1PcGVyYXRpb25zIG9w
ZXJhdGlvbnMxOwotICAgIG9wZXJhdGlvbnMxLm9wZXJhdGlvbnMoKS5hcHBlbmQoVHJhbnNsYXRl
VHJhbnNmb3JtT3BlcmF0aW9uOjpjcmVhdGUoTGVuZ3RoKDQsIEZpeGVkKSwgTGVuZ3RoKDAsIEZp
eGVkKSwgVHJhbnNmb3JtT3BlcmF0aW9uOjpUUkFOU0xBVEVfWCkpOwotICAgIFRyYW5zZm9ybU9w
ZXJhdGlvbnMgb3BlcmF0aW9uczI7Ci0gICAgb3BlcmF0aW9uczIub3BlcmF0aW9ucygpLmFwcGVu
ZChUcmFuc2xhdGVUcmFuc2Zvcm1PcGVyYXRpb246OmNyZWF0ZShMZW5ndGgoNCwgRml4ZWQpLCBM
ZW5ndGgoMCwgRml4ZWQpLCBUcmFuc2Zvcm1PcGVyYXRpb246OlRSQU5TTEFURV9YKSk7Ci0gICAg
VHJhbnNmb3JtT3BlcmF0aW9ucyBvcGVyYXRpb25zMzsKLSAgICBvcGVyYXRpb25zMy5vcGVyYXRp
b25zKCkuYXBwZW5kKFRyYW5zbGF0ZVRyYW5zZm9ybU9wZXJhdGlvbjo6Y3JlYXRlKExlbmd0aCg2
LCBGaXhlZCksIExlbmd0aCgwLCBGaXhlZCksIFRyYW5zZm9ybU9wZXJhdGlvbjo6VFJBTlNMQVRF
X1gpKTsKLSAgICBUcmFuc2Zvcm1PcGVyYXRpb25zIG9wZXJhdGlvbnM0OwotICAgIG9wZXJhdGlv
bnM0Lm9wZXJhdGlvbnMoKS5hcHBlbmQoVHJhbnNsYXRlVHJhbnNmb3JtT3BlcmF0aW9uOjpjcmVh
dGUoTGVuZ3RoKDYsIEZpeGVkKSwgTGVuZ3RoKDAsIEZpeGVkKSwgVHJhbnNmb3JtT3BlcmF0aW9u
OjpUUkFOU0xBVEVfWCkpOworICAgIFdlYktpdDo6V2ViVHJhbnNmb3JtT3BlcmF0aW9ucyBvcGVy
YXRpb25zMTsKKyAgICBvcGVyYXRpb25zMS5hcHBlbmRUcmFuc2xhdGUoNCwgMCwgMCk7CisgICAg
V2ViS2l0OjpXZWJUcmFuc2Zvcm1PcGVyYXRpb25zIG9wZXJhdGlvbnMyOworICAgIG9wZXJhdGlv
bnMyLmFwcGVuZFRyYW5zbGF0ZSg0LCAwLCAwKTsKKyAgICBXZWJLaXQ6OldlYlRyYW5zZm9ybU9w
ZXJhdGlvbnMgb3BlcmF0aW9uczM7CisgICAgb3BlcmF0aW9uczMuYXBwZW5kVHJhbnNsYXRlKDYs
IDAsIDApOworICAgIFdlYktpdDo6V2ViVHJhbnNmb3JtT3BlcmF0aW9ucyBvcGVyYXRpb25zNDsK
KyAgICBvcGVyYXRpb25zNC5hcHBlbmRUcmFuc2xhdGUoNiwgMCwgMCk7CiAgICAgY3VydmUtPmFk
ZEtleWZyYW1lKENDVHJhbnNmb3JtS2V5ZnJhbWU6OmNyZWF0ZSgwLCBvcGVyYXRpb25zMSwgbnVs
bHB0cikpOwogICAgIGN1cnZlLT5hZGRLZXlmcmFtZShDQ1RyYW5zZm9ybUtleWZyYW1lOjpjcmVh
dGUoMSwgb3BlcmF0aW9uczIsIG51bGxwdHIpKTsKICAgICBjdXJ2ZS0+YWRkS2V5ZnJhbWUoQ0NU
cmFuc2Zvcm1LZXlmcmFtZTo6Y3JlYXRlKDEsIG9wZXJhdGlvbnMzLCBudWxscHRyKSk7CiAgICAg
Y3VydmUtPmFkZEtleWZyYW1lKENDVHJhbnNmb3JtS2V5ZnJhbWU6OmNyZWF0ZSgyLCBvcGVyYXRp
b25zNCwgbnVsbHB0cikpOwogCi0gICAgSW50U2l6ZSBsYXllclNpemU7IC8vIGlnbm9yZWQKLQot
ICAgIGV4cGVjdFRyYW5zbGF0ZVgoNCwgY3VydmUtPmdldFZhbHVlKC0xLCBsYXllclNpemUpKTsK
LSAgICBleHBlY3RUcmFuc2xhdGVYKDQsIGN1cnZlLT5nZXRWYWx1ZSgwLCBsYXllclNpemUpKTsK
LSAgICBleHBlY3RUcmFuc2xhdGVYKDQsIGN1cnZlLT5nZXRWYWx1ZSgwLjUsIGxheWVyU2l6ZSkp
OworICAgIGV4cGVjdFRyYW5zbGF0ZVgoNCwgY3VydmUtPmdldFZhbHVlKC0xKSk7CisgICAgZXhw
ZWN0VHJhbnNsYXRlWCg0LCBjdXJ2ZS0+Z2V0VmFsdWUoMCkpOworICAgIGV4cGVjdFRyYW5zbGF0
ZVgoNCwgY3VydmUtPmdldFZhbHVlKDAuNSkpOwogCiAgICAgLy8gVGhlcmUgaXMgYSBkaXNjb250
aW51aXR5IGF0IDEuIEFueSB2YWx1ZSBiZXR3ZWVuIDQgYW5kIDYgaXMgdmFsaWQuCi0gICAgV2Vi
VHJhbnNmb3JtYXRpb25NYXRyaXggdmFsdWUgPSBjdXJ2ZS0+Z2V0VmFsdWUoMSwgbGF5ZXJTaXpl
KTsKKyAgICBXZWJUcmFuc2Zvcm1hdGlvbk1hdHJpeCB2YWx1ZSA9IGN1cnZlLT5nZXRWYWx1ZSgx
KTsKICAgICBFWFBFQ1RfVFJVRSh2YWx1ZS5tNDEoKSA+PSA0ICYmIHZhbHVlLm00MSgpIDw9IDYp
OwogCi0gICAgZXhwZWN0VHJhbnNsYXRlWCg2LCBjdXJ2ZS0+Z2V0VmFsdWUoMS41LCBsYXllclNp
emUpKTsKLSAgICBleHBlY3RUcmFuc2xhdGVYKDYsIGN1cnZlLT5nZXRWYWx1ZSgyLCBsYXllclNp
emUpKTsKLSAgICBleHBlY3RUcmFuc2xhdGVYKDYsIGN1cnZlLT5nZXRWYWx1ZSgzLCBsYXllclNp
emUpKTsKKyAgICBleHBlY3RUcmFuc2xhdGVYKDYsIGN1cnZlLT5nZXRWYWx1ZSgxLjUpKTsKKyAg
ICBleHBlY3RUcmFuc2xhdGVYKDYsIGN1cnZlLT5nZXRWYWx1ZSgyKSk7CisgICAgZXhwZWN0VHJh
bnNsYXRlWCg2LCBjdXJ2ZS0+Z2V0VmFsdWUoMykpOwogfQogCiAvLyBUZXN0cyB0aGF0IHRoZSBr
ZXlmcmFtZXMgbWF5IGJlIGFkZGVkIG91dCBvZiBvcmRlci4KZGlmZiAtLWdpdCBhL1NvdXJjZS9X
ZWJLaXQvY2hyb21pdW0vdGVzdHMvQ0NMYXllckFuaW1hdGlvbkNvbnRyb2xsZXJUZXN0LmNwcCBi
L1NvdXJjZS9XZWJLaXQvY2hyb21pdW0vdGVzdHMvQ0NMYXllckFuaW1hdGlvbkNvbnRyb2xsZXJU
ZXN0LmNwcAppbmRleCBkYmVkMDJjNzQ5YjllN2FkZTMzYTY1NWFkYWU0NmNhMjhhZWZiMDNkLi43
MjM2MTA5MmFmMjI4N2U3ZGY3YjI1NTY2NGNmMDI5NDEzYjgyYTAxIDEwMDY0NAotLS0gYS9Tb3Vy
Y2UvV2ViS2l0L2Nocm9taXVtL3Rlc3RzL0NDTGF5ZXJBbmltYXRpb25Db250cm9sbGVyVGVzdC5j
cHAKKysrIGIvU291cmNlL1dlYktpdC9jaHJvbWl1bS90ZXN0cy9DQ0xheWVyQW5pbWF0aW9uQ29u
dHJvbGxlclRlc3QuY3BwCkBAIC0yOSw3ICsyOSw2IEBACiAjaW5jbHVkZSAiQ0NBbmltYXRpb25U
ZXN0Q29tbW9uLmgiCiAjaW5jbHVkZSAiR3JhcGhpY3NMYXllci5oIgogI2luY2x1ZGUgIkxlbmd0
aC5oIgotI2luY2x1ZGUgIlRyYW5zbGF0ZVRyYW5zZm9ybU9wZXJhdGlvbi5oIgogI2luY2x1ZGUg
ImNjL0NDQWN0aXZlQW5pbWF0aW9uLmgiCiAjaW5jbHVkZSAiY2MvQ0NBbmltYXRpb25DdXJ2ZS5o
IgogCkBAIC01NCwxOTcgKzUzLDYgQEAgUGFzc093blB0cjxDQ0FjdGl2ZUFuaW1hdGlvbj4gY3Jl
YXRlQWN0aXZlQW5pbWF0aW9uKFBhc3NPd25QdHI8Q0NBbmltYXRpb25DdXJ2ZT4KICAgICByZXR1
cm4gQ0NBY3RpdmVBbmltYXRpb246OmNyZWF0ZShjdXJ2ZSwgMCwgaWQsIHByb3BlcnR5KTsKIH0K
IAotVEVTVChDQ0xheWVyQW5pbWF0aW9uQ29udHJvbGxlclRlc3QsIGNyZWF0ZU9wYWNpdHlBbmlt
YXRpb24pCi17Ci0gICAgRmFrZUxheWVyQW5pbWF0aW9uQ29udHJvbGxlckNsaWVudCBkdW1teTsK
LSAgICBPd25QdHI8Q0NMYXllckFuaW1hdGlvbkNvbnRyb2xsZXI+IGNvbnRyb2xsZXIoQ0NMYXll
ckFuaW1hdGlvbkNvbnRyb2xsZXI6OmNyZWF0ZSgmZHVtbXkpKTsKLSAgICBjb25zdCBkb3VibGUg
ZHVyYXRpb24gPSAxOwotICAgIFdlYkNvcmU6OktleWZyYW1lVmFsdWVMaXN0IHZhbHVlcyhBbmlt
YXRlZFByb3BlcnR5T3BhY2l0eSk7Ci0gICAgdmFsdWVzLmluc2VydChuZXcgRmxvYXRBbmltYXRp
b25WYWx1ZSgwLCAwKSk7Ci0gICAgdmFsdWVzLmluc2VydChuZXcgRmxvYXRBbmltYXRpb25WYWx1
ZShkdXJhdGlvbiwgMSkpOwotCi0gICAgUmVmUHRyPEFuaW1hdGlvbj4gYW5pbWF0aW9uID0gQW5p
bWF0aW9uOjpjcmVhdGUoKTsKLSAgICBhbmltYXRpb24tPnNldER1cmF0aW9uKGR1cmF0aW9uKTsK
LQotICAgIEludFNpemUgYm94U2l6ZTsKLSAgICBjb250cm9sbGVyLT5hZGRBbmltYXRpb24odmFs
dWVzLCBib3hTaXplLCBhbmltYXRpb24uZ2V0KCksIDAsIDAsIDApOwotCi0gICAgRVhQRUNUX1RS
VUUoY29udHJvbGxlci0+aGFzQWN0aXZlQW5pbWF0aW9uKCkpOwotCi0gICAgQ0NBY3RpdmVBbmlt
YXRpb24qIGFjdGl2ZUFuaW1hdGlvbiA9IGNvbnRyb2xsZXItPmdldEFjdGl2ZUFuaW1hdGlvbigw
LCBDQ0FjdGl2ZUFuaW1hdGlvbjo6T3BhY2l0eSk7Ci0gICAgRVhQRUNUX1RSVUUoYWN0aXZlQW5p
bWF0aW9uKTsKLQotICAgIEVYUEVDVF9FUSgxLCBhY3RpdmVBbmltYXRpb24tPml0ZXJhdGlvbnMo
KSk7Ci0gICAgRVhQRUNUX0VRKENDQWN0aXZlQW5pbWF0aW9uOjpPcGFjaXR5LCBhY3RpdmVBbmlt
YXRpb24tPnRhcmdldFByb3BlcnR5KCkpOwotCi0gICAgRVhQRUNUX0VRKENDQW5pbWF0aW9uQ3Vy
dmU6OkZsb2F0LCBhY3RpdmVBbmltYXRpb24tPmN1cnZlKCktPnR5cGUoKSk7Ci0KLSAgICBjb25z
dCBDQ0Zsb2F0QW5pbWF0aW9uQ3VydmUqIGN1cnZlID0gYWN0aXZlQW5pbWF0aW9uLT5jdXJ2ZSgp
LT50b0Zsb2F0QW5pbWF0aW9uQ3VydmUoKTsKLSAgICBFWFBFQ1RfVFJVRShjdXJ2ZSk7Ci0KLSAg
ICBFWFBFQ1RfRVEoMCwgY3VydmUtPmdldFZhbHVlKDApKTsKLSAgICBFWFBFQ1RfRVEoMSwgY3Vy
dmUtPmdldFZhbHVlKGR1cmF0aW9uKSk7Ci19Ci0KLVRFU1QoQ0NMYXllckFuaW1hdGlvbkNvbnRy
b2xsZXJUZXN0LCBjcmVhdGVUcmFuc2Zvcm1BbmltYXRpb24pCi17Ci0gICAgRmFrZUxheWVyQW5p
bWF0aW9uQ29udHJvbGxlckNsaWVudCBkdW1teTsKLSAgICBPd25QdHI8Q0NMYXllckFuaW1hdGlv
bkNvbnRyb2xsZXI+IGNvbnRyb2xsZXIoQ0NMYXllckFuaW1hdGlvbkNvbnRyb2xsZXI6OmNyZWF0
ZSgmZHVtbXkpKTsKLSAgICBjb25zdCBkb3VibGUgZHVyYXRpb24gPSAxOwotICAgIFdlYkNvcmU6
OktleWZyYW1lVmFsdWVMaXN0IHZhbHVlcyhBbmltYXRlZFByb3BlcnR5V2Via2l0VHJhbnNmb3Jt
KTsKLQotICAgIFRyYW5zZm9ybU9wZXJhdGlvbnMgb3BlcmF0aW9uczE7Ci0gICAgb3BlcmF0aW9u
czEub3BlcmF0aW9ucygpLmFwcGVuZChUcmFuc2xhdGVUcmFuc2Zvcm1PcGVyYXRpb246OmNyZWF0
ZShMZW5ndGgoMiwgRml4ZWQpLCBMZW5ndGgoMCwgRml4ZWQpLCBUcmFuc2Zvcm1PcGVyYXRpb246
OlRSQU5TTEFURV9YKSk7Ci0gICAgdmFsdWVzLmluc2VydChuZXcgVHJhbnNmb3JtQW5pbWF0aW9u
VmFsdWUoMCwgJm9wZXJhdGlvbnMxKSk7Ci0KLSAgICBUcmFuc2Zvcm1PcGVyYXRpb25zIG9wZXJh
dGlvbnMyOwotICAgIG9wZXJhdGlvbnMyLm9wZXJhdGlvbnMoKS5hcHBlbmQoVHJhbnNsYXRlVHJh
bnNmb3JtT3BlcmF0aW9uOjpjcmVhdGUoTGVuZ3RoKDQsIEZpeGVkKSwgTGVuZ3RoKDAsIEZpeGVk
KSwgVHJhbnNmb3JtT3BlcmF0aW9uOjpUUkFOU0xBVEVfWCkpOwotICAgIHZhbHVlcy5pbnNlcnQo
bmV3IFRyYW5zZm9ybUFuaW1hdGlvblZhbHVlKGR1cmF0aW9uLCAmb3BlcmF0aW9uczIpKTsKLQot
ICAgIFJlZlB0cjxBbmltYXRpb24+IGFuaW1hdGlvbiA9IEFuaW1hdGlvbjo6Y3JlYXRlKCk7Ci0g
ICAgYW5pbWF0aW9uLT5zZXREdXJhdGlvbihkdXJhdGlvbik7Ci0KLSAgICBJbnRTaXplIGJveFNp
emU7Ci0gICAgY29udHJvbGxlci0+YWRkQW5pbWF0aW9uKHZhbHVlcywgYm94U2l6ZSwgYW5pbWF0
aW9uLmdldCgpLCAwLCAwLCAwKTsKLQotICAgIEVYUEVDVF9UUlVFKGNvbnRyb2xsZXItPmhhc0Fj
dGl2ZUFuaW1hdGlvbigpKTsKLQotICAgIENDQWN0aXZlQW5pbWF0aW9uKiBhY3RpdmVBbmltYXRp
b24gPSBjb250cm9sbGVyLT5nZXRBY3RpdmVBbmltYXRpb24oMCwgQ0NBY3RpdmVBbmltYXRpb246
OlRyYW5zZm9ybSk7Ci0gICAgRVhQRUNUX1RSVUUoYWN0aXZlQW5pbWF0aW9uKTsKLQotICAgIEVY
UEVDVF9FUSgxLCBhY3RpdmVBbmltYXRpb24tPml0ZXJhdGlvbnMoKSk7Ci0gICAgRVhQRUNUX0VR
KENDQWN0aXZlQW5pbWF0aW9uOjpUcmFuc2Zvcm0sIGFjdGl2ZUFuaW1hdGlvbi0+dGFyZ2V0UHJv
cGVydHkoKSk7Ci0KLSAgICBFWFBFQ1RfRVEoQ0NBbmltYXRpb25DdXJ2ZTo6VHJhbnNmb3JtLCBh
Y3RpdmVBbmltYXRpb24tPmN1cnZlKCktPnR5cGUoKSk7Ci0KLSAgICBjb25zdCBDQ1RyYW5zZm9y
bUFuaW1hdGlvbkN1cnZlKiBjdXJ2ZSA9IGFjdGl2ZUFuaW1hdGlvbi0+Y3VydmUoKS0+dG9UcmFu
c2Zvcm1BbmltYXRpb25DdXJ2ZSgpOwotICAgIEVYUEVDVF9UUlVFKGN1cnZlKTsKLQotICAgIGV4
cGVjdFRyYW5zbGF0ZVgoMiwgY3VydmUtPmdldFZhbHVlKDAsIGJveFNpemUpKTsKLSAgICBleHBl
Y3RUcmFuc2xhdGVYKDQsIGN1cnZlLT5nZXRWYWx1ZShkdXJhdGlvbiwgYm94U2l6ZSkpOwotfQot
Ci1URVNUKENDTGF5ZXJBbmltYXRpb25Db250cm9sbGVyVGVzdCwgY3JlYXRlUmV2ZXJzZWRBbmlt
YXRpb24pCi17Ci0gICAgRmFrZUxheWVyQW5pbWF0aW9uQ29udHJvbGxlckNsaWVudCBkdW1teTsK
LSAgICBPd25QdHI8Q0NMYXllckFuaW1hdGlvbkNvbnRyb2xsZXI+IGNvbnRyb2xsZXIoQ0NMYXll
ckFuaW1hdGlvbkNvbnRyb2xsZXI6OmNyZWF0ZSgmZHVtbXkpKTsKLSAgICBjb25zdCBkb3VibGUg
ZHVyYXRpb24gPSAxOwotICAgIFdlYkNvcmU6OktleWZyYW1lVmFsdWVMaXN0IHZhbHVlcyhBbmlt
YXRlZFByb3BlcnR5V2Via2l0VHJhbnNmb3JtKTsKLQotICAgIFRyYW5zZm9ybU9wZXJhdGlvbnMg
b3BlcmF0aW9uczE7Ci0gICAgb3BlcmF0aW9uczEub3BlcmF0aW9ucygpLmFwcGVuZChUcmFuc2xh
dGVUcmFuc2Zvcm1PcGVyYXRpb246OmNyZWF0ZShMZW5ndGgoMiwgRml4ZWQpLCBMZW5ndGgoMCwg
Rml4ZWQpLCBUcmFuc2Zvcm1PcGVyYXRpb246OlRSQU5TTEFURV9YKSk7Ci0gICAgdmFsdWVzLmlu
c2VydChuZXcgVHJhbnNmb3JtQW5pbWF0aW9uVmFsdWUoMCwgJm9wZXJhdGlvbnMxKSk7Ci0KLSAg
ICBUcmFuc2Zvcm1PcGVyYXRpb25zIG9wZXJhdGlvbnMyOwotICAgIG9wZXJhdGlvbnMyLm9wZXJh
dGlvbnMoKS5hcHBlbmQoVHJhbnNsYXRlVHJhbnNmb3JtT3BlcmF0aW9uOjpjcmVhdGUoTGVuZ3Ro
KDQsIEZpeGVkKSwgTGVuZ3RoKDAsIEZpeGVkKSwgVHJhbnNmb3JtT3BlcmF0aW9uOjpUUkFOU0xB
VEVfWCkpOwotICAgIHZhbHVlcy5pbnNlcnQobmV3IFRyYW5zZm9ybUFuaW1hdGlvblZhbHVlKGR1
cmF0aW9uLCAmb3BlcmF0aW9uczIpKTsKLQotICAgIFJlZlB0cjxBbmltYXRpb24+IGFuaW1hdGlv
biA9IEFuaW1hdGlvbjo6Y3JlYXRlKCk7Ci0gICAgYW5pbWF0aW9uLT5zZXREdXJhdGlvbihkdXJh
dGlvbik7Ci0gICAgYW5pbWF0aW9uLT5zZXREaXJlY3Rpb24oQW5pbWF0aW9uOjpBbmltYXRpb25E
aXJlY3Rpb25SZXZlcnNlKTsKLQotICAgIEludFNpemUgYm94U2l6ZTsKLSAgICBjb250cm9sbGVy
LT5hZGRBbmltYXRpb24odmFsdWVzLCBib3hTaXplLCBhbmltYXRpb24uZ2V0KCksIDAsIDAsIDAp
OwotCi0gICAgRVhQRUNUX1RSVUUoY29udHJvbGxlci0+aGFzQWN0aXZlQW5pbWF0aW9uKCkpOwot
Ci0gICAgQ0NBY3RpdmVBbmltYXRpb24qIGFjdGl2ZUFuaW1hdGlvbiA9IGNvbnRyb2xsZXItPmdl
dEFjdGl2ZUFuaW1hdGlvbigwLCBDQ0FjdGl2ZUFuaW1hdGlvbjo6VHJhbnNmb3JtKTsKLSAgICBF
WFBFQ1RfVFJVRShhY3RpdmVBbmltYXRpb24pOwotCi0gICAgRVhQRUNUX0VRKDEsIGFjdGl2ZUFu
aW1hdGlvbi0+aXRlcmF0aW9ucygpKTsKLSAgICBFWFBFQ1RfRVEoQ0NBY3RpdmVBbmltYXRpb246
OlRyYW5zZm9ybSwgYWN0aXZlQW5pbWF0aW9uLT50YXJnZXRQcm9wZXJ0eSgpKTsKLQotICAgIEVY
UEVDVF9FUShDQ0FuaW1hdGlvbkN1cnZlOjpUcmFuc2Zvcm0sIGFjdGl2ZUFuaW1hdGlvbi0+Y3Vy
dmUoKS0+dHlwZSgpKTsKLQotICAgIGNvbnN0IENDVHJhbnNmb3JtQW5pbWF0aW9uQ3VydmUqIGN1
cnZlID0gYWN0aXZlQW5pbWF0aW9uLT5jdXJ2ZSgpLT50b1RyYW5zZm9ybUFuaW1hdGlvbkN1cnZl
KCk7Ci0gICAgRVhQRUNUX1RSVUUoY3VydmUpOwotCi0gICAgZXhwZWN0VHJhbnNsYXRlWCg0LCBj
dXJ2ZS0+Z2V0VmFsdWUoMCwgYm94U2l6ZSkpOwotICAgIGV4cGVjdFRyYW5zbGF0ZVgoMiwgY3Vy
dmUtPmdldFZhbHVlKGR1cmF0aW9uLCBib3hTaXplKSk7Ci19Ci0KLVRFU1QoQ0NMYXllckFuaW1h
dGlvbkNvbnRyb2xsZXJUZXN0LCBjcmVhdGVBbHRlcm5hdGluZ0FuaW1hdGlvbikKLXsKLSAgICBG
YWtlTGF5ZXJBbmltYXRpb25Db250cm9sbGVyQ2xpZW50IGR1bW15OwotICAgIE93blB0cjxDQ0xh
eWVyQW5pbWF0aW9uQ29udHJvbGxlcj4gY29udHJvbGxlcihDQ0xheWVyQW5pbWF0aW9uQ29udHJv
bGxlcjo6Y3JlYXRlKCZkdW1teSkpOwotICAgIGNvbnN0IGRvdWJsZSBkdXJhdGlvbiA9IDE7Ci0g
ICAgV2ViQ29yZTo6S2V5ZnJhbWVWYWx1ZUxpc3QgdmFsdWVzKEFuaW1hdGVkUHJvcGVydHlXZWJr
aXRUcmFuc2Zvcm0pOwotCi0gICAgVHJhbnNmb3JtT3BlcmF0aW9ucyBvcGVyYXRpb25zMTsKLSAg
ICBvcGVyYXRpb25zMS5vcGVyYXRpb25zKCkuYXBwZW5kKFRyYW5zbGF0ZVRyYW5zZm9ybU9wZXJh
dGlvbjo6Y3JlYXRlKExlbmd0aCgyLCBGaXhlZCksIExlbmd0aCgwLCBGaXhlZCksIFRyYW5zZm9y
bU9wZXJhdGlvbjo6VFJBTlNMQVRFX1gpKTsKLSAgICB2YWx1ZXMuaW5zZXJ0KG5ldyBUcmFuc2Zv
cm1BbmltYXRpb25WYWx1ZSgwLCAmb3BlcmF0aW9uczEpKTsKLQotICAgIFRyYW5zZm9ybU9wZXJh
dGlvbnMgb3BlcmF0aW9uczI7Ci0gICAgb3BlcmF0aW9uczIub3BlcmF0aW9ucygpLmFwcGVuZChU
cmFuc2xhdGVUcmFuc2Zvcm1PcGVyYXRpb246OmNyZWF0ZShMZW5ndGgoNCwgRml4ZWQpLCBMZW5n
dGgoMCwgRml4ZWQpLCBUcmFuc2Zvcm1PcGVyYXRpb246OlRSQU5TTEFURV9YKSk7Ci0gICAgdmFs
dWVzLmluc2VydChuZXcgVHJhbnNmb3JtQW5pbWF0aW9uVmFsdWUoZHVyYXRpb24sICZvcGVyYXRp
b25zMikpOwotCi0gICAgUmVmUHRyPEFuaW1hdGlvbj4gYW5pbWF0aW9uID0gQW5pbWF0aW9uOjpj
cmVhdGUoKTsKLSAgICBhbmltYXRpb24tPnNldER1cmF0aW9uKGR1cmF0aW9uKTsKLSAgICBhbmlt
YXRpb24tPnNldERpcmVjdGlvbihBbmltYXRpb246OkFuaW1hdGlvbkRpcmVjdGlvbkFsdGVybmF0
ZSk7Ci0gICAgYW5pbWF0aW9uLT5zZXRJdGVyYXRpb25Db3VudCgyKTsKLQotICAgIEludFNpemUg
Ym94U2l6ZTsKLSAgICBjb250cm9sbGVyLT5hZGRBbmltYXRpb24odmFsdWVzLCBib3hTaXplLCBh
bmltYXRpb24uZ2V0KCksIDAsIDAsIDApOwotCi0gICAgRVhQRUNUX1RSVUUoY29udHJvbGxlci0+
aGFzQWN0aXZlQW5pbWF0aW9uKCkpOwotCi0gICAgQ0NBY3RpdmVBbmltYXRpb24qIGFjdGl2ZUFu
aW1hdGlvbiA9IGNvbnRyb2xsZXItPmdldEFjdGl2ZUFuaW1hdGlvbigwLCBDQ0FjdGl2ZUFuaW1h
dGlvbjo6VHJhbnNmb3JtKTsKLSAgICBFWFBFQ1RfVFJVRShhY3RpdmVBbmltYXRpb24pOwotICAg
IEVYUEVDVF9UUlVFKGFjdGl2ZUFuaW1hdGlvbi0+YWx0ZXJuYXRlc0RpcmVjdGlvbigpKTsKLQot
ICAgIEVYUEVDVF9FUSgyLCBhY3RpdmVBbmltYXRpb24tPml0ZXJhdGlvbnMoKSk7Ci0gICAgRVhQ
RUNUX0VRKENDQWN0aXZlQW5pbWF0aW9uOjpUcmFuc2Zvcm0sIGFjdGl2ZUFuaW1hdGlvbi0+dGFy
Z2V0UHJvcGVydHkoKSk7Ci0KLSAgICBFWFBFQ1RfRVEoQ0NBbmltYXRpb25DdXJ2ZTo6VHJhbnNm
b3JtLCBhY3RpdmVBbmltYXRpb24tPmN1cnZlKCktPnR5cGUoKSk7Ci0KLSAgICBjb25zdCBDQ1Ry
YW5zZm9ybUFuaW1hdGlvbkN1cnZlKiBjdXJ2ZSA9IGFjdGl2ZUFuaW1hdGlvbi0+Y3VydmUoKS0+
dG9UcmFuc2Zvcm1BbmltYXRpb25DdXJ2ZSgpOwotICAgIEVYUEVDVF9UUlVFKGN1cnZlKTsKLQot
ICAgIGV4cGVjdFRyYW5zbGF0ZVgoMiwgY3VydmUtPmdldFZhbHVlKDAsIGJveFNpemUpKTsKLSAg
ICBleHBlY3RUcmFuc2xhdGVYKDQsIGN1cnZlLT5nZXRWYWx1ZShkdXJhdGlvbiwgYm94U2l6ZSkp
OwotfQotCi1URVNUKENDTGF5ZXJBbmltYXRpb25Db250cm9sbGVyVGVzdCwgY3JlYXRlUmV2ZXJz
ZWRBbHRlcm5hdGluZ0FuaW1hdGlvbikKLXsKLSAgICBGYWtlTGF5ZXJBbmltYXRpb25Db250cm9s
bGVyQ2xpZW50IGR1bW15OwotICAgIE93blB0cjxDQ0xheWVyQW5pbWF0aW9uQ29udHJvbGxlcj4g
Y29udHJvbGxlcihDQ0xheWVyQW5pbWF0aW9uQ29udHJvbGxlcjo6Y3JlYXRlKCZkdW1teSkpOwot
ICAgIGNvbnN0IGRvdWJsZSBkdXJhdGlvbiA9IDE7Ci0gICAgV2ViQ29yZTo6S2V5ZnJhbWVWYWx1
ZUxpc3QgdmFsdWVzKEFuaW1hdGVkUHJvcGVydHlXZWJraXRUcmFuc2Zvcm0pOwotCi0gICAgVHJh
bnNmb3JtT3BlcmF0aW9ucyBvcGVyYXRpb25zMTsKLSAgICBvcGVyYXRpb25zMS5vcGVyYXRpb25z
KCkuYXBwZW5kKFRyYW5zbGF0ZVRyYW5zZm9ybU9wZXJhdGlvbjo6Y3JlYXRlKExlbmd0aCgyLCBG
aXhlZCksIExlbmd0aCgwLCBGaXhlZCksIFRyYW5zZm9ybU9wZXJhdGlvbjo6VFJBTlNMQVRFX1gp
KTsKLSAgICB2YWx1ZXMuaW5zZXJ0KG5ldyBUcmFuc2Zvcm1BbmltYXRpb25WYWx1ZSgwLCAmb3Bl
cmF0aW9uczEpKTsKLQotICAgIFRyYW5zZm9ybU9wZXJhdGlvbnMgb3BlcmF0aW9uczI7Ci0gICAg
b3BlcmF0aW9uczIub3BlcmF0aW9ucygpLmFwcGVuZChUcmFuc2xhdGVUcmFuc2Zvcm1PcGVyYXRp
b246OmNyZWF0ZShMZW5ndGgoNCwgRml4ZWQpLCBMZW5ndGgoMCwgRml4ZWQpLCBUcmFuc2Zvcm1P
cGVyYXRpb246OlRSQU5TTEFURV9YKSk7Ci0gICAgdmFsdWVzLmluc2VydChuZXcgVHJhbnNmb3Jt
QW5pbWF0aW9uVmFsdWUoZHVyYXRpb24sICZvcGVyYXRpb25zMikpOwotCi0gICAgUmVmUHRyPEFu
aW1hdGlvbj4gYW5pbWF0aW9uID0gQW5pbWF0aW9uOjpjcmVhdGUoKTsKLSAgICBhbmltYXRpb24t
PnNldER1cmF0aW9uKGR1cmF0aW9uKTsKLSAgICBhbmltYXRpb24tPnNldERpcmVjdGlvbihBbmlt
YXRpb246OkFuaW1hdGlvbkRpcmVjdGlvbkFsdGVybmF0ZVJldmVyc2UpOwotICAgIGFuaW1hdGlv
bi0+c2V0SXRlcmF0aW9uQ291bnQoMik7Ci0KLSAgICBJbnRTaXplIGJveFNpemU7Ci0gICAgY29u
dHJvbGxlci0+YWRkQW5pbWF0aW9uKHZhbHVlcywgYm94U2l6ZSwgYW5pbWF0aW9uLmdldCgpLCAw
LCAwLCAwKTsKLQotICAgIEVYUEVDVF9UUlVFKGNvbnRyb2xsZXItPmhhc0FjdGl2ZUFuaW1hdGlv
bigpKTsKLQotICAgIENDQWN0aXZlQW5pbWF0aW9uKiBhY3RpdmVBbmltYXRpb24gPSBjb250cm9s
bGVyLT5nZXRBY3RpdmVBbmltYXRpb24oMCwgQ0NBY3RpdmVBbmltYXRpb246OlRyYW5zZm9ybSk7
Ci0gICAgRVhQRUNUX1RSVUUoYWN0aXZlQW5pbWF0aW9uKTsKLSAgICBFWFBFQ1RfVFJVRShhY3Rp
dmVBbmltYXRpb24tPmFsdGVybmF0ZXNEaXJlY3Rpb24oKSk7Ci0KLSAgICBFWFBFQ1RfRVEoMiwg
YWN0aXZlQW5pbWF0aW9uLT5pdGVyYXRpb25zKCkpOwotICAgIEVYUEVDVF9FUShDQ0FjdGl2ZUFu
aW1hdGlvbjo6VHJhbnNmb3JtLCBhY3RpdmVBbmltYXRpb24tPnRhcmdldFByb3BlcnR5KCkpOwot
Ci0gICAgRVhQRUNUX0VRKENDQW5pbWF0aW9uQ3VydmU6OlRyYW5zZm9ybSwgYWN0aXZlQW5pbWF0
aW9uLT5jdXJ2ZSgpLT50eXBlKCkpOwotCi0gICAgY29uc3QgQ0NUcmFuc2Zvcm1BbmltYXRpb25D
dXJ2ZSogY3VydmUgPSBhY3RpdmVBbmltYXRpb24tPmN1cnZlKCktPnRvVHJhbnNmb3JtQW5pbWF0
aW9uQ3VydmUoKTsKLSAgICBFWFBFQ1RfVFJVRShjdXJ2ZSk7Ci0KLSAgICBleHBlY3RUcmFuc2xh
dGVYKDQsIGN1cnZlLT5nZXRWYWx1ZSgwLCBib3hTaXplKSk7Ci0gICAgZXhwZWN0VHJhbnNsYXRl
WCgyLCBjdXJ2ZS0+Z2V0VmFsdWUoZHVyYXRpb24sIGJveFNpemUpKTsKLX0KLQogVEVTVChDQ0xh
eWVyQW5pbWF0aW9uQ29udHJvbGxlclRlc3QsIHN5bmNOZXdBbmltYXRpb24pCiB7CiAgICAgRmFr
ZUxheWVyQW5pbWF0aW9uQ29udHJvbGxlckNsaWVudCBkdW1teUltcGw7CkBAIC0zMzMsNyArMTQx
LDYgQEAgVEVTVChDQ0xheWVyQW5pbWF0aW9uQ29udHJvbGxlclRlc3QsIHN5bmNQYXVzZUFuZFJl
c3VtZSkKICAgICBFWFBFQ1RfRVEoQ0NBY3RpdmVBbmltYXRpb246OlJ1bm5pbmcsIGNvbnRyb2xs
ZXJJbXBsLT5nZXRBY3RpdmVBbmltYXRpb24oMCwgQ0NBY3RpdmVBbmltYXRpb246Ok9wYWNpdHkp
LT5ydW5TdGF0ZSgpKTsKIH0KIAotCiBURVNUKENDTGF5ZXJBbmltYXRpb25Db250cm9sbGVyVGVz
dCwgZG9Ob3RTeW5jRmluaXNoZWRBbmltYXRpb24pCiB7CiAgICAgRmFrZUxheWVyQW5pbWF0aW9u
Q29udHJvbGxlckNsaWVudCBkdW1teUltcGw7CkBAIC0zNzUsNyArMTgyLDcgQEAgVEVTVChDQ0xh
eWVyQW5pbWF0aW9uQ29udHJvbGxlclRlc3QsIFRyaXZpYWxUcmFuc2l0aW9uKQogCiAgICAgT3du
UHRyPENDQWN0aXZlQW5pbWF0aW9uPiB0b0FkZChjcmVhdGVBY3RpdmVBbmltYXRpb24oYWRvcHRQ
dHIobmV3IEZha2VGbG9hdFRyYW5zaXRpb24oMSwgMCwgMSkpLCAxLCBDQ0FjdGl2ZUFuaW1hdGlv
bjo6T3BhY2l0eSkpOwogCi0gICAgY29udHJvbGxlci0+YWRkKHRvQWRkLnJlbGVhc2UoKSk7Cisg
ICAgY29udHJvbGxlci0+YWRkQW5pbWF0aW9uKHRvQWRkLnJlbGVhc2UoKSk7CiAgICAgY29udHJv
bGxlci0+YW5pbWF0ZSgwLCBldmVudHMuZ2V0KCkpOwogICAgIEVYUEVDVF9UUlVFKGNvbnRyb2xs
ZXItPmhhc0FjdGl2ZUFuaW1hdGlvbigpKTsKICAgICBFWFBFQ1RfRVEoMCwgZHVtbXkub3BhY2l0
eSgpKTsKQEAgLTM5Niw3ICsyMDMsNyBAQCBURVNUKENDTGF5ZXJBbmltYXRpb25Db250cm9sbGVy
VGVzdCwgQW5pbWF0aW9uc1dhaXRpbmdGb3JTdGFydFRpbWVEb05vdEZpbmlzaElmVAogICAgIHRv
QWRkLT5zZXROZWVkc1N5bmNocm9uaXplZFN0YXJ0VGltZSh0cnVlKTsKIAogICAgIC8vIFdlIHNo
b3VsZCBwYXVzZSBhdCB0aGUgZmlyc3Qga2V5ZnJhbWUgaW5kZWZpbml0ZWx5IHdhaXRpbmcgZm9y
IHRoYXQgYW5pbWF0aW9uIHRvIHN0YXJ0LgotICAgIGNvbnRyb2xsZXItPmFkZCh0b0FkZC5yZWxl
YXNlKCkpOworICAgIGNvbnRyb2xsZXItPmFkZEFuaW1hdGlvbih0b0FkZC5yZWxlYXNlKCkpOwog
ICAgIGNvbnRyb2xsZXItPmFuaW1hdGUoMCwgZXZlbnRzLmdldCgpKTsKICAgICBFWFBFQ1RfVFJV
RShjb250cm9sbGVyLT5oYXNBY3RpdmVBbmltYXRpb24oKSk7CiAgICAgRVhQRUNUX0VRKDAsIGR1
bW15Lm9wYWNpdHkoKSk7CkBAIC00MjIsOCArMjI5LDggQEAgVEVTVChDQ0xheWVyQW5pbWF0aW9u
Q29udHJvbGxlclRlc3QsIFRyaXZpYWxRdWV1aW5nKQogICAgIE93blB0cjxDQ0xheWVyQW5pbWF0
aW9uQ29udHJvbGxlcj4gY29udHJvbGxlcigKICAgICAgICAgQ0NMYXllckFuaW1hdGlvbkNvbnRy
b2xsZXI6OmNyZWF0ZSgmZHVtbXkpKTsKIAotICAgIGNvbnRyb2xsZXItPmFkZChjcmVhdGVBY3Rp
dmVBbmltYXRpb24oYWRvcHRQdHIobmV3IEZha2VGbG9hdFRyYW5zaXRpb24oMSwgMCwgMSkpLCAx
LCBDQ0FjdGl2ZUFuaW1hdGlvbjo6T3BhY2l0eSkpOwotICAgIGNvbnRyb2xsZXItPmFkZChjcmVh
dGVBY3RpdmVBbmltYXRpb24oYWRvcHRQdHIobmV3IEZha2VGbG9hdFRyYW5zaXRpb24oMSwgMSwg
MC41KSksIDIsIENDQWN0aXZlQW5pbWF0aW9uOjpPcGFjaXR5KSk7CisgICAgY29udHJvbGxlci0+
YWRkQW5pbWF0aW9uKGNyZWF0ZUFjdGl2ZUFuaW1hdGlvbihhZG9wdFB0cihuZXcgRmFrZUZsb2F0
VHJhbnNpdGlvbigxLCAwLCAxKSksIDEsIENDQWN0aXZlQW5pbWF0aW9uOjpPcGFjaXR5KSk7Cisg
ICAgY29udHJvbGxlci0+YWRkQW5pbWF0aW9uKGNyZWF0ZUFjdGl2ZUFuaW1hdGlvbihhZG9wdFB0
cihuZXcgRmFrZUZsb2F0VHJhbnNpdGlvbigxLCAxLCAwLjUpKSwgMiwgQ0NBY3RpdmVBbmltYXRp
b246Ok9wYWNpdHkpKTsKIAogICAgIGNvbnRyb2xsZXItPmFuaW1hdGUoMCwgZXZlbnRzLmdldCgp
KTsKICAgICBFWFBFQ1RfVFJVRShjb250cm9sbGVyLT5oYXNBY3RpdmVBbmltYXRpb24oKSk7CkBA
IC00NDMsMTQgKzI1MCwxNCBAQCBURVNUKENDTGF5ZXJBbmltYXRpb25Db250cm9sbGVyVGVzdCwg
SW50ZXJydXB0KQogICAgIEZha2VMYXllckFuaW1hdGlvbkNvbnRyb2xsZXJDbGllbnQgZHVtbXk7
CiAgICAgT3duUHRyPENDTGF5ZXJBbmltYXRpb25Db250cm9sbGVyPiBjb250cm9sbGVyKAogICAg
ICAgICBDQ0xheWVyQW5pbWF0aW9uQ29udHJvbGxlcjo6Y3JlYXRlKCZkdW1teSkpOwotICAgIGNv
bnRyb2xsZXItPmFkZChjcmVhdGVBY3RpdmVBbmltYXRpb24oYWRvcHRQdHIobmV3IEZha2VGbG9h
dFRyYW5zaXRpb24oMSwgMCwgMSkpLCAxLCBDQ0FjdGl2ZUFuaW1hdGlvbjo6T3BhY2l0eSkpOwor
ICAgIGNvbnRyb2xsZXItPmFkZEFuaW1hdGlvbihjcmVhdGVBY3RpdmVBbmltYXRpb24oYWRvcHRQ
dHIobmV3IEZha2VGbG9hdFRyYW5zaXRpb24oMSwgMCwgMSkpLCAxLCBDQ0FjdGl2ZUFuaW1hdGlv
bjo6T3BhY2l0eSkpOwogICAgIGNvbnRyb2xsZXItPmFuaW1hdGUoMCwgZXZlbnRzLmdldCgpKTsK
ICAgICBFWFBFQ1RfVFJVRShjb250cm9sbGVyLT5oYXNBY3RpdmVBbmltYXRpb24oKSk7CiAgICAg
RVhQRUNUX0VRKDAsIGR1bW15Lm9wYWNpdHkoKSk7CiAKICAgICBPd25QdHI8Q0NBY3RpdmVBbmlt
YXRpb24+IHRvQWRkKGNyZWF0ZUFjdGl2ZUFuaW1hdGlvbihhZG9wdFB0cihuZXcgRmFrZUZsb2F0
VHJhbnNpdGlvbigxLCAxLCAwLjUpKSwgMiwgQ0NBY3RpdmVBbmltYXRpb246Ok9wYWNpdHkpKTsK
ICAgICB0b0FkZC0+c2V0UnVuU3RhdGUoQ0NBY3RpdmVBbmltYXRpb246OldhaXRpbmdGb3JOZXh0
VGljaywgMCk7Ci0gICAgY29udHJvbGxlci0+YWRkKHRvQWRkLnJlbGVhc2UoKSk7CisgICAgY29u
dHJvbGxlci0+YWRkQW5pbWF0aW9uKHRvQWRkLnJlbGVhc2UoKSk7CiAKICAgICAvLyBTaW5jZSB0
aGUgYW5pbWF0aW9uIHdhcyBpbiB0aGUgV2FpdGluZ0Zvck5leHRUaWNrIHN0YXRlLCBpdCBzaG91
bGQgc3RhcnQgcmlnaHQgaW4KICAgICAvLyB0aGlzIGNhbGwgdG8gYW5pbWF0ZS4KQEAgLTQ3MCw5
ICsyNzcsOSBAQCBURVNUKENDTGF5ZXJBbmltYXRpb25Db250cm9sbGVyVGVzdCwgU2NoZWR1bGVU
b2dldGhlcldoZW5BUHJvcGVydHlJc0Jsb2NrZWQpCiAgICAgT3duUHRyPENDTGF5ZXJBbmltYXRp
b25Db250cm9sbGVyPiBjb250cm9sbGVyKAogICAgICAgICBDQ0xheWVyQW5pbWF0aW9uQ29udHJv
bGxlcjo6Y3JlYXRlKCZkdW1teSkpOwogCi0gICAgY29udHJvbGxlci0+YWRkKGNyZWF0ZUFjdGl2
ZUFuaW1hdGlvbihhZG9wdFB0cihuZXcgRmFrZVRyYW5zZm9ybVRyYW5zaXRpb24oMSkpLCAxLCBD
Q0FjdGl2ZUFuaW1hdGlvbjo6VHJhbnNmb3JtKSk7Ci0gICAgY29udHJvbGxlci0+YWRkKGNyZWF0
ZUFjdGl2ZUFuaW1hdGlvbihhZG9wdFB0cihuZXcgRmFrZVRyYW5zZm9ybVRyYW5zaXRpb24oMSkp
LCAyLCBDQ0FjdGl2ZUFuaW1hdGlvbjo6VHJhbnNmb3JtKSk7Ci0gICAgY29udHJvbGxlci0+YWRk
KGNyZWF0ZUFjdGl2ZUFuaW1hdGlvbihhZG9wdFB0cihuZXcgRmFrZUZsb2F0VHJhbnNpdGlvbigx
LCAwLCAxKSksIDIsIENDQWN0aXZlQW5pbWF0aW9uOjpPcGFjaXR5KSk7CisgICAgY29udHJvbGxl
ci0+YWRkQW5pbWF0aW9uKGNyZWF0ZUFjdGl2ZUFuaW1hdGlvbihhZG9wdFB0cihuZXcgRmFrZVRy
YW5zZm9ybVRyYW5zaXRpb24oMSkpLCAxLCBDQ0FjdGl2ZUFuaW1hdGlvbjo6VHJhbnNmb3JtKSk7
CisgICAgY29udHJvbGxlci0+YWRkQW5pbWF0aW9uKGNyZWF0ZUFjdGl2ZUFuaW1hdGlvbihhZG9w
dFB0cihuZXcgRmFrZVRyYW5zZm9ybVRyYW5zaXRpb24oMSkpLCAyLCBDQ0FjdGl2ZUFuaW1hdGlv
bjo6VHJhbnNmb3JtKSk7CisgICAgY29udHJvbGxlci0+YWRkQW5pbWF0aW9uKGNyZWF0ZUFjdGl2
ZUFuaW1hdGlvbihhZG9wdFB0cihuZXcgRmFrZUZsb2F0VHJhbnNpdGlvbigxLCAwLCAxKSksIDIs
IENDQWN0aXZlQW5pbWF0aW9uOjpPcGFjaXR5KSk7CiAKICAgICBjb250cm9sbGVyLT5hbmltYXRl
KDAsIGV2ZW50cy5nZXQoKSk7CiAgICAgRVhQRUNUX0VRKDAsIGR1bW15Lm9wYWNpdHkoKSk7CkBA
IC00OTcsOSArMzA0LDkgQEAgVEVTVChDQ0xheWVyQW5pbWF0aW9uQ29udHJvbGxlclRlc3QsIFNj
aGVkdWxlVG9nZXRoZXJXaXRoQW5BbmltV2FpdGluZykKICAgICBPd25QdHI8Q0NMYXllckFuaW1h
dGlvbkNvbnRyb2xsZXI+IGNvbnRyb2xsZXIoCiAgICAgICAgIENDTGF5ZXJBbmltYXRpb25Db250
cm9sbGVyOjpjcmVhdGUoJmR1bW15KSk7CiAKLSAgICBjb250cm9sbGVyLT5hZGQoY3JlYXRlQWN0
aXZlQW5pbWF0aW9uKGFkb3B0UHRyKG5ldyBGYWtlVHJhbnNmb3JtVHJhbnNpdGlvbigyKSksIDEs
IENDQWN0aXZlQW5pbWF0aW9uOjpUcmFuc2Zvcm0pKTsKLSAgICBjb250cm9sbGVyLT5hZGQoY3Jl
YXRlQWN0aXZlQW5pbWF0aW9uKGFkb3B0UHRyKG5ldyBGYWtlRmxvYXRUcmFuc2l0aW9uKDEsIDAs
IDEpKSwgMSwgQ0NBY3RpdmVBbmltYXRpb246Ok9wYWNpdHkpKTsKLSAgICBjb250cm9sbGVyLT5h
ZGQoY3JlYXRlQWN0aXZlQW5pbWF0aW9uKGFkb3B0UHRyKG5ldyBGYWtlRmxvYXRUcmFuc2l0aW9u
KDEsIDEsIDAuNSkpLCAyLCBDQ0FjdGl2ZUFuaW1hdGlvbjo6T3BhY2l0eSkpOworICAgIGNvbnRy
b2xsZXItPmFkZEFuaW1hdGlvbihjcmVhdGVBY3RpdmVBbmltYXRpb24oYWRvcHRQdHIobmV3IEZh
a2VUcmFuc2Zvcm1UcmFuc2l0aW9uKDIpKSwgMSwgQ0NBY3RpdmVBbmltYXRpb246OlRyYW5zZm9y
bSkpOworICAgIGNvbnRyb2xsZXItPmFkZEFuaW1hdGlvbihjcmVhdGVBY3RpdmVBbmltYXRpb24o
YWRvcHRQdHIobmV3IEZha2VGbG9hdFRyYW5zaXRpb24oMSwgMCwgMSkpLCAxLCBDQ0FjdGl2ZUFu
aW1hdGlvbjo6T3BhY2l0eSkpOworICAgIGNvbnRyb2xsZXItPmFkZEFuaW1hdGlvbihjcmVhdGVB
Y3RpdmVBbmltYXRpb24oYWRvcHRQdHIobmV3IEZha2VGbG9hdFRyYW5zaXRpb24oMSwgMSwgMC41
KSksIDIsIENDQWN0aXZlQW5pbWF0aW9uOjpPcGFjaXR5KSk7CiAKICAgICAvLyBBbmltYXRpb25z
IHdpdGggaWQgMSBzaG91bGQgYm90aCBzdGFydCBub3cuCiAgICAgY29udHJvbGxlci0+YW5pbWF0
ZSgwLCBldmVudHMuZ2V0KCkpOwpAQCAtNTMwLDcgKzMzNyw3IEBAIFRFU1QoQ0NMYXllckFuaW1h
dGlvbkNvbnRyb2xsZXJUZXN0LCBTY2hlZHVsZUFuaW1hdGlvbikKICAgICBPd25QdHI8Q0NBY3Rp
dmVBbmltYXRpb24+IHRvQWRkKGNyZWF0ZUFjdGl2ZUFuaW1hdGlvbihhZG9wdFB0cihuZXcgRmFr
ZUZsb2F0VHJhbnNpdGlvbigxLCAwLCAxKSksIDEsIENDQWN0aXZlQW5pbWF0aW9uOjpPcGFjaXR5
KSk7CiAgICAgdG9BZGQtPnNldFJ1blN0YXRlKENDQWN0aXZlQW5pbWF0aW9uOjpXYWl0aW5nRm9y
U3RhcnRUaW1lLCAwKTsKICAgICB0b0FkZC0+c2V0U3RhcnRUaW1lKDEpOwotICAgIGNvbnRyb2xs
ZXItPmFkZCh0b0FkZC5yZWxlYXNlKCkpOworICAgIGNvbnRyb2xsZXItPmFkZEFuaW1hdGlvbih0
b0FkZC5yZWxlYXNlKCkpOwogCiAgICAgY29udHJvbGxlci0+YW5pbWF0ZSgwLCBldmVudHMuZ2V0
KCkpOwogICAgIEVYUEVDVF9UUlVFKGNvbnRyb2xsZXItPmhhc0FjdGl2ZUFuaW1hdGlvbigpKTsK
QEAgLTU1MSwxMiArMzU4LDEyIEBAIFRFU1QoQ0NMYXllckFuaW1hdGlvbkNvbnRyb2xsZXJUZXN0
LCBTY2hlZHVsZWRBbmltYXRpb25JbnRlcnJ1cHRzUnVubmluZ0FuaW1hdGlvCiAgICAgT3duUHRy
PENDTGF5ZXJBbmltYXRpb25Db250cm9sbGVyPiBjb250cm9sbGVyKAogICAgICAgICBDQ0xheWVy
QW5pbWF0aW9uQ29udHJvbGxlcjo6Y3JlYXRlKCZkdW1teSkpOwogCi0gICAgY29udHJvbGxlci0+
YWRkKGNyZWF0ZUFjdGl2ZUFuaW1hdGlvbihhZG9wdFB0cihuZXcgRmFrZUZsb2F0VHJhbnNpdGlv
bigyLCAwLCAxKSksIDEsIENDQWN0aXZlQW5pbWF0aW9uOjpPcGFjaXR5KSk7CisgICAgY29udHJv
bGxlci0+YWRkQW5pbWF0aW9uKGNyZWF0ZUFjdGl2ZUFuaW1hdGlvbihhZG9wdFB0cihuZXcgRmFr
ZUZsb2F0VHJhbnNpdGlvbigyLCAwLCAxKSksIDEsIENDQWN0aXZlQW5pbWF0aW9uOjpPcGFjaXR5
KSk7CiAKICAgICBPd25QdHI8Q0NBY3RpdmVBbmltYXRpb24+IHRvQWRkKGNyZWF0ZUFjdGl2ZUFu
aW1hdGlvbihhZG9wdFB0cihuZXcgRmFrZUZsb2F0VHJhbnNpdGlvbigxLCAwLjUsIDApKSwgMiwg
Q0NBY3RpdmVBbmltYXRpb246Ok9wYWNpdHkpKTsKICAgICB0b0FkZC0+c2V0UnVuU3RhdGUoQ0NB
Y3RpdmVBbmltYXRpb246OldhaXRpbmdGb3JTdGFydFRpbWUsIDApOwogICAgIHRvQWRkLT5zZXRT
dGFydFRpbWUoMSk7Ci0gICAgY29udHJvbGxlci0+YWRkKHRvQWRkLnJlbGVhc2UoKSk7CisgICAg
Y29udHJvbGxlci0+YWRkQW5pbWF0aW9uKHRvQWRkLnJlbGVhc2UoKSk7CiAKICAgICAvLyBGaXJz
dCAycyBvcGFjaXR5IHRyYW5zaXRpb24gc2hvdWxkIHN0YXJ0IGltbWVkaWF0ZWx5LgogICAgIGNv
bnRyb2xsZXItPmFuaW1hdGUoMCwgZXZlbnRzLmdldCgpKTsKQEAgLTU4MiwxNCArMzg5LDE0IEBA
IFRFU1QoQ0NMYXllckFuaW1hdGlvbkNvbnRyb2xsZXJUZXN0LCBTY2hlZHVsZWRBbmltYXRpb25J
bnRlcnJ1cHRzUnVubmluZ0FuaW1hdGlvCiAgICAgT3duUHRyPENDTGF5ZXJBbmltYXRpb25Db250
cm9sbGVyPiBjb250cm9sbGVyKAogICAgICAgICBDQ0xheWVyQW5pbWF0aW9uQ29udHJvbGxlcjo6
Y3JlYXRlKCZkdW1teSkpOwogCi0gICAgY29udHJvbGxlci0+YWRkKGNyZWF0ZUFjdGl2ZUFuaW1h
dGlvbihhZG9wdFB0cihuZXcgRmFrZUZsb2F0VHJhbnNpdGlvbigyLCAwLCAxKSksIDEsIENDQWN0
aXZlQW5pbWF0aW9uOjpPcGFjaXR5KSk7CisgICAgY29udHJvbGxlci0+YWRkQW5pbWF0aW9uKGNy
ZWF0ZUFjdGl2ZUFuaW1hdGlvbihhZG9wdFB0cihuZXcgRmFrZUZsb2F0VHJhbnNpdGlvbigyLCAw
LCAxKSksIDEsIENDQWN0aXZlQW5pbWF0aW9uOjpPcGFjaXR5KSk7CiAKICAgICBPd25QdHI8Q0NB
Y3RpdmVBbmltYXRpb24+IHRvQWRkKGNyZWF0ZUFjdGl2ZUFuaW1hdGlvbihhZG9wdFB0cihuZXcg
RmFrZUZsb2F0VHJhbnNpdGlvbigyLCAwLjUsIDApKSwgMiwgQ0NBY3RpdmVBbmltYXRpb246Ok9w
YWNpdHkpKTsKICAgICB0b0FkZC0+c2V0UnVuU3RhdGUoQ0NBY3RpdmVBbmltYXRpb246OldhaXRp
bmdGb3JTdGFydFRpbWUsIDApOwogICAgIHRvQWRkLT5zZXRTdGFydFRpbWUoMSk7Ci0gICAgY29u
dHJvbGxlci0+YWRkKHRvQWRkLnJlbGVhc2UoKSk7CisgICAgY29udHJvbGxlci0+YWRkQW5pbWF0
aW9uKHRvQWRkLnJlbGVhc2UoKSk7CiAKLSAgICBjb250cm9sbGVyLT5hZGQoY3JlYXRlQWN0aXZl
QW5pbWF0aW9uKGFkb3B0UHRyKG5ldyBGYWtlRmxvYXRUcmFuc2l0aW9uKDEsIDAsIDAuNzUpKSwg
MywgQ0NBY3RpdmVBbmltYXRpb246Ok9wYWNpdHkpKTsKKyAgICBjb250cm9sbGVyLT5hZGRBbmlt
YXRpb24oY3JlYXRlQWN0aXZlQW5pbWF0aW9uKGFkb3B0UHRyKG5ldyBGYWtlRmxvYXRUcmFuc2l0
aW9uKDEsIDAsIDAuNzUpKSwgMywgQ0NBY3RpdmVBbmltYXRpb246Ok9wYWNpdHkpKTsKIAogICAg
IC8vIEZpcnN0IDJzIG9wYWNpdHkgdHJhbnNpdGlvbiBzaG91bGQgc3RhcnQgaW1tZWRpYXRlbHku
CiAgICAgY29udHJvbGxlci0+YW5pbWF0ZSgwLCBldmVudHMuZ2V0KCkpOwpAQCAtNjIwLDcgKzQy
Nyw3IEBAIFRFU1QoQ0NMYXllckFuaW1hdGlvbkNvbnRyb2xsZXJUZXN0LCBUcml2aWFsTG9vcGlu
ZykKIAogICAgIE93blB0cjxDQ0FjdGl2ZUFuaW1hdGlvbj4gdG9BZGQoY3JlYXRlQWN0aXZlQW5p
bWF0aW9uKGFkb3B0UHRyKG5ldyBGYWtlRmxvYXRUcmFuc2l0aW9uKDEsIDAsIDEpKSwgMSwgQ0NB
Y3RpdmVBbmltYXRpb246Ok9wYWNpdHkpKTsKICAgICB0b0FkZC0+c2V0SXRlcmF0aW9ucygzKTsK
LSAgICBjb250cm9sbGVyLT5hZGQodG9BZGQucmVsZWFzZSgpKTsKKyAgICBjb250cm9sbGVyLT5h
ZGRBbmltYXRpb24odG9BZGQucmVsZWFzZSgpKTsKIAogICAgIGNvbnRyb2xsZXItPmFuaW1hdGUo
MCwgZXZlbnRzLmdldCgpKTsKICAgICBFWFBFQ1RfVFJVRShjb250cm9sbGVyLT5oYXNBY3RpdmVB
bmltYXRpb24oKSk7CkBAIC02NTcsNyArNDY0LDcgQEAgVEVTVChDQ0xheWVyQW5pbWF0aW9uQ29u
dHJvbGxlclRlc3QsIEluZmluaXRlTG9vcGluZykKICAgICBjb25zdCBpbnQgaWQgPSAxOwogICAg
IE93blB0cjxDQ0FjdGl2ZUFuaW1hdGlvbj4gdG9BZGQoY3JlYXRlQWN0aXZlQW5pbWF0aW9uKGFk
b3B0UHRyKG5ldyBGYWtlRmxvYXRUcmFuc2l0aW9uKDEsIDAsIDEpKSwgaWQsIENDQWN0aXZlQW5p
bWF0aW9uOjpPcGFjaXR5KSk7CiAgICAgdG9BZGQtPnNldEl0ZXJhdGlvbnMoLTEpOwotICAgIGNv
bnRyb2xsZXItPmFkZCh0b0FkZC5yZWxlYXNlKCkpOworICAgIGNvbnRyb2xsZXItPmFkZEFuaW1h
dGlvbih0b0FkZC5yZWxlYXNlKCkpOwogCiAgICAgY29udHJvbGxlci0+YW5pbWF0ZSgwLCBldmVu
dHMuZ2V0KCkpOwogICAgIEVYUEVDVF9UUlVFKGNvbnRyb2xsZXItPmhhc0FjdGl2ZUFuaW1hdGlv
bigpKTsKQEAgLTY5MSw3ICs0OTgsNyBAQCBURVNUKENDTGF5ZXJBbmltYXRpb25Db250cm9sbGVy
VGVzdCwgUGF1c2VSZXN1bWUpCiAgICAgICAgIENDTGF5ZXJBbmltYXRpb25Db250cm9sbGVyOjpj
cmVhdGUoJmR1bW15KSk7CiAKICAgICBjb25zdCBpbnQgaWQgPSAxOwotICAgIGNvbnRyb2xsZXIt
PmFkZChjcmVhdGVBY3RpdmVBbmltYXRpb24oYWRvcHRQdHIobmV3IEZha2VGbG9hdFRyYW5zaXRp
b24oMSwgMCwgMSkpLCBpZCwgQ0NBY3RpdmVBbmltYXRpb246Ok9wYWNpdHkpKTsKKyAgICBjb250
cm9sbGVyLT5hZGRBbmltYXRpb24oY3JlYXRlQWN0aXZlQW5pbWF0aW9uKGFkb3B0UHRyKG5ldyBG
YWtlRmxvYXRUcmFuc2l0aW9uKDEsIDAsIDEpKSwgaWQsIENDQWN0aXZlQW5pbWF0aW9uOjpPcGFj
aXR5KSk7CiAKICAgICBjb250cm9sbGVyLT5hbmltYXRlKDAsIGV2ZW50cy5nZXQoKSk7CiAgICAg
RVhQRUNUX1RSVUUoY29udHJvbGxlci0+aGFzQWN0aXZlQW5pbWF0aW9uKCkpOwpAQCAtNzI2LDkg
KzUzMyw5IEBAIFRFU1QoQ0NMYXllckFuaW1hdGlvbkNvbnRyb2xsZXJUZXN0LCBBYm9ydEFHcm91
cGVkQW5pbWF0aW9uKQogICAgICAgICBDQ0xheWVyQW5pbWF0aW9uQ29udHJvbGxlcjo6Y3JlYXRl
KCZkdW1teSkpOwogCiAgICAgY29uc3QgaW50IGlkID0gMTsKLSAgICBjb250cm9sbGVyLT5hZGQo
Y3JlYXRlQWN0aXZlQW5pbWF0aW9uKGFkb3B0UHRyKG5ldyBGYWtlVHJhbnNmb3JtVHJhbnNpdGlv
bigxKSksIGlkLCBDQ0FjdGl2ZUFuaW1hdGlvbjo6VHJhbnNmb3JtKSk7Ci0gICAgY29udHJvbGxl
ci0+YWRkKGNyZWF0ZUFjdGl2ZUFuaW1hdGlvbihhZG9wdFB0cihuZXcgRmFrZUZsb2F0VHJhbnNp
dGlvbigyLCAwLCAxKSksIGlkLCBDQ0FjdGl2ZUFuaW1hdGlvbjo6T3BhY2l0eSkpOwotICAgIGNv
bnRyb2xsZXItPmFkZChjcmVhdGVBY3RpdmVBbmltYXRpb24oYWRvcHRQdHIobmV3IEZha2VGbG9h
dFRyYW5zaXRpb24oMSwgMSwgMC43NSkpLCAyLCBDQ0FjdGl2ZUFuaW1hdGlvbjo6T3BhY2l0eSkp
OworICAgIGNvbnRyb2xsZXItPmFkZEFuaW1hdGlvbihjcmVhdGVBY3RpdmVBbmltYXRpb24oYWRv
cHRQdHIobmV3IEZha2VUcmFuc2Zvcm1UcmFuc2l0aW9uKDEpKSwgaWQsIENDQWN0aXZlQW5pbWF0
aW9uOjpUcmFuc2Zvcm0pKTsKKyAgICBjb250cm9sbGVyLT5hZGRBbmltYXRpb24oY3JlYXRlQWN0
aXZlQW5pbWF0aW9uKGFkb3B0UHRyKG5ldyBGYWtlRmxvYXRUcmFuc2l0aW9uKDIsIDAsIDEpKSwg
aWQsIENDQWN0aXZlQW5pbWF0aW9uOjpPcGFjaXR5KSk7CisgICAgY29udHJvbGxlci0+YWRkQW5p
bWF0aW9uKGNyZWF0ZUFjdGl2ZUFuaW1hdGlvbihhZG9wdFB0cihuZXcgRmFrZUZsb2F0VHJhbnNp
dGlvbigxLCAxLCAwLjc1KSksIDIsIENDQWN0aXZlQW5pbWF0aW9uOjpPcGFjaXR5KSk7CiAKICAg
ICBjb250cm9sbGVyLT5hbmltYXRlKDAsIGV2ZW50cy5nZXQoKSk7CiAgICAgRVhQRUNUX1RSVUUo
Y29udHJvbGxlci0+aGFzQWN0aXZlQW5pbWF0aW9uKCkpOwpAQCAtNzU4LDcgKzU2NSw3IEBAIFRF
U1QoQ0NMYXllckFuaW1hdGlvbkNvbnRyb2xsZXJUZXN0LCBGb3JjZVN5bmNXaGVuU3luY2hyb25p
emVkU3RhcnRUaW1lTmVlZGVkKQogCiAgICAgT3duUHRyPENDQWN0aXZlQW5pbWF0aW9uPiB0b0Fk
ZChjcmVhdGVBY3RpdmVBbmltYXRpb24oYWRvcHRQdHIobmV3IEZha2VGbG9hdFRyYW5zaXRpb24o
MiwgMCwgMSkpLCAwLCBDQ0FjdGl2ZUFuaW1hdGlvbjo6T3BhY2l0eSkpOwogICAgIHRvQWRkLT5z
ZXROZWVkc1N5bmNocm9uaXplZFN0YXJ0VGltZSh0cnVlKTsKLSAgICBjb250cm9sbGVyLT5hZGQo
dG9BZGQucmVsZWFzZSgpKTsKKyAgICBjb250cm9sbGVyLT5hZGRBbmltYXRpb24odG9BZGQucmVs
ZWFzZSgpKTsKIAogICAgIGNvbnRyb2xsZXItPmFuaW1hdGUoMCwgMCk7CiAgICAgRVhQRUNUX1RS
VUUoY29udHJvbGxlci0+aGFzQWN0aXZlQW5pbWF0aW9uKCkpOwpkaWZmIC0tZ2l0IGEvU291cmNl
L1dlYktpdC9jaHJvbWl1bS90ZXN0cy9DQ0xheWVyVHJlZUhvc3RUZXN0LmNwcCBiL1NvdXJjZS9X
ZWJLaXQvY2hyb21pdW0vdGVzdHMvQ0NMYXllclRyZWVIb3N0VGVzdC5jcHAKaW5kZXggYWEyN2U4
OGY3ZGMzZWQ4MDgwMjEwNjQ5Y2NkMGJlMzAwMjdjZjBiZi4uZTI3NDIyNDQ5NzI5MmZiMTM3Mjdk
MzkwOWZiZTdjMzUxNzYyNDgyYSAxMDA2NDQKLS0tIGEvU291cmNlL1dlYktpdC9jaHJvbWl1bS90
ZXN0cy9DQ0xheWVyVHJlZUhvc3RUZXN0LmNwcAorKysgYi9Tb3VyY2UvV2ViS2l0L2Nocm9taXVt
L3Rlc3RzL0NDTGF5ZXJUcmVlSG9zdFRlc3QuY3BwCkBAIC0yOTUyLDcgKzI5NTIsNyBAQCBwdWJs
aWM6CiAgICAgICAgIC8vIEFueSB2YWxpZCBDQ0FuaW1hdGlvbkN1cnZlIHdpbGwgZG8gaGVyZS4K
ICAgICAgICAgT3duUHRyPENDQW5pbWF0aW9uQ3VydmU+IGN1cnZlKENDRWFzZVRpbWluZ0Z1bmN0
aW9uOjpjcmVhdGUoKSk7CiAgICAgICAgIE93blB0cjxDQ0FjdGl2ZUFuaW1hdGlvbj4gYW5pbWF0
aW9uKENDQWN0aXZlQW5pbWF0aW9uOjpjcmVhdGUoY3VydmUucmVsZWFzZSgpLCBBbmltYXRpb25J
ZFZlbmRvcjo6Z2V0TmV4dEFuaW1hdGlvbklkKCksIEFuaW1hdGlvbklkVmVuZG9yOjpnZXROZXh0
R3JvdXBJZCgpLCBDQ0FjdGl2ZUFuaW1hdGlvbjo6T3BhY2l0eSkpOwotICAgICAgICBsYXllci0+
bGF5ZXJBbmltYXRpb25Db250cm9sbGVyKCktPmFkZChhbmltYXRpb24ucmVsZWFzZSgpKTsKKyAg
ICAgICAgbGF5ZXItPmxheWVyQW5pbWF0aW9uQ29udHJvbGxlcigpLT5hZGRBbmltYXRpb24oYW5p
bWF0aW9uLnJlbGVhc2UoKSk7CiAKICAgICAgICAgLy8gV2UgYWRkIHRoZSBhbmltYXRpb24gKmJl
Zm9yZSogYXR0YWNoaW5nIHRoZSBsYXllciB0byB0aGUgdHJlZS4KICAgICAgICAgbV9sYXllclRy
ZWVIb3N0LT5yb290TGF5ZXIoKS0+YWRkQ2hpbGQobGF5ZXIpOwpkaWZmIC0tZ2l0IGEvU291cmNl
L1dlYktpdC9jaHJvbWl1bS90ZXN0cy9HcmFwaGljc0xheWVyQ2hyb21pdW1UZXN0LmNwcCBiL1Nv
dXJjZS9XZWJLaXQvY2hyb21pdW0vdGVzdHMvR3JhcGhpY3NMYXllckNocm9taXVtVGVzdC5jcHAK
aW5kZXggYjdhYTg1NzQ2NWNiYWMxOGM0ODJhZWQ1ZDk3MzIzMjY1MTRkYTZhNC4uYjgzODA0OTVh
ZjkwMDJlNmM2OWYwNDdjZWRhYWY5NzIyZGYyYjM2NCAxMDA2NDQKLS0tIGEvU291cmNlL1dlYktp
dC9jaHJvbWl1bS90ZXN0cy9HcmFwaGljc0xheWVyQ2hyb21pdW1UZXN0LmNwcAorKysgYi9Tb3Vy
Y2UvV2ViS2l0L2Nocm9taXVtL3Rlc3RzL0dyYXBoaWNzTGF5ZXJDaHJvbWl1bVRlc3QuY3BwCkBA
IC0yNyw1NiArMjcsMzc1IEBACiAjaW5jbHVkZSAiR3JhcGhpY3NMYXllckNocm9taXVtLmgiCiAK
ICNpbmNsdWRlICJDQ0FuaW1hdGlvblRlc3RDb21tb24uaCIKKyNpbmNsdWRlICJDb21wb3NpdG9y
RmFrZUdyYXBoaWNzQ29udGV4dDNELmgiCisjaW5jbHVkZSAiR3JhcGhpY3NDb250ZXh0M0QuaCIK
KyNpbmNsdWRlICJHcmFwaGljc0NvbnRleHQzRFByaXZhdGUuaCIKICNpbmNsdWRlICJHcmFwaGlj
c0xheWVyLmgiCiAjaW5jbHVkZSAiTGF5ZXJDaHJvbWl1bS5oIgorI2luY2x1ZGUgIk1hdHJpeDNE
VHJhbnNmb3JtT3BlcmF0aW9uLmgiCisjaW5jbHVkZSAiUm90YXRlVHJhbnNmb3JtT3BlcmF0aW9u
LmgiCisjaW5jbHVkZSAiVHJhbnNsYXRlVHJhbnNmb3JtT3BlcmF0aW9uLmgiCisjaW5jbHVkZSAi
V2ViQ29tcG9zaXRvci5oIgorCisjaW5jbHVkZSAiY2MvQ0NMYXllclRyZWVIb3N0LmgiCisjaW5j
bHVkZSAiY2MvQ0NMYXllclRyZWVIb3N0SW1wbC5oIgorI2luY2x1ZGUgImNjL0NDU2luZ2xlVGhy
ZWFkUHJveHkuaCIKKwogI2luY2x1ZGUgPGd0ZXN0L2d0ZXN0Lmg+CiAjaW5jbHVkZSA8d3RmL1Bh
c3NPd25QdHIuaD4KIAogdXNpbmcgbmFtZXNwYWNlIFdlYkNvcmU7Cit1c2luZyBuYW1lc3BhY2Ug
V2ViS2l0OwogdXNpbmcgbmFtZXNwYWNlIFdlYktpdFRlc3RzOwogCiBuYW1lc3BhY2UgewogCiBj
bGFzcyBNb2NrR3JhcGhpY3NMYXllckNsaWVudCA6IHB1YmxpYyBHcmFwaGljc0xheWVyQ2xpZW50
IHsKICAgcHVibGljOgotICAgIHZpcnR1YWwgdm9pZCBub3RpZnlBbmltYXRpb25TdGFydGVkKGNv
bnN0IEdyYXBoaWNzTGF5ZXIqLCBkb3VibGUgdGltZSkgeyB9Ci0gICAgdmlydHVhbCB2b2lkIG5v
dGlmeVN5bmNSZXF1aXJlZChjb25zdCBHcmFwaGljc0xheWVyKikgeyB9Ci0gICAgdmlydHVhbCB2
b2lkIHBhaW50Q29udGVudHMoY29uc3QgR3JhcGhpY3NMYXllciosIEdyYXBoaWNzQ29udGV4dCYs
IEdyYXBoaWNzTGF5ZXJQYWludGluZ1BoYXNlLCBjb25zdCBJbnRSZWN0JiBpbkNsaXApIHsgfQot
ICAgIHZpcnR1YWwgYm9vbCBzaG93RGVidWdCb3JkZXJzKGNvbnN0IEdyYXBoaWNzTGF5ZXIqKSBj
b25zdCB7IHJldHVybiBmYWxzZTsgfQotICAgIHZpcnR1YWwgYm9vbCBzaG93UmVwYWludENvdW50
ZXIoY29uc3QgR3JhcGhpY3NMYXllciopIGNvbnN0IHsgcmV0dXJuIGZhbHNlOyB9CisgICAgdmly
dHVhbCB2b2lkIG5vdGlmeUFuaW1hdGlvblN0YXJ0ZWQoY29uc3QgR3JhcGhpY3NMYXllciosIGRv
dWJsZSB0aW1lKSBPVkVSUklERSB7IH0KKyAgICB2aXJ0dWFsIHZvaWQgbm90aWZ5U3luY1JlcXVp
cmVkKGNvbnN0IEdyYXBoaWNzTGF5ZXIqKSBPVkVSUklERSB7IH0KKyAgICB2aXJ0dWFsIHZvaWQg
cGFpbnRDb250ZW50cyhjb25zdCBHcmFwaGljc0xheWVyKiwgR3JhcGhpY3NDb250ZXh0JiwgR3Jh
cGhpY3NMYXllclBhaW50aW5nUGhhc2UsIGNvbnN0IEludFJlY3QmIGluQ2xpcCkgT1ZFUlJJREUg
eyB9CisgICAgdmlydHVhbCBib29sIHNob3dEZWJ1Z0JvcmRlcnMoY29uc3QgR3JhcGhpY3NMYXll
ciopIGNvbnN0IE9WRVJSSURFIHsgcmV0dXJuIGZhbHNlOyB9CisgICAgdmlydHVhbCBib29sIHNo
b3dSZXBhaW50Q291bnRlcihjb25zdCBHcmFwaGljc0xheWVyKikgY29uc3QgT1ZFUlJJREUgeyBy
ZXR1cm4gZmFsc2U7IH0KIH07CiAKLVRFU1QoR3JhcGhpY3NMYXllckNocm9taXVtVGVzdCwgdXBk
YXRlTGF5ZXJQcmVzZXJ2ZXMzRFdpdGhBbmltYXRpb25zKQotewotICAgIE1vY2tHcmFwaGljc0xh
eWVyQ2xpZW50IGNsaWVudDsKLSAgICBPd25QdHI8R3JhcGhpY3NMYXllckNocm9taXVtPiBncmFw
aGljc0xheWVyID0gc3RhdGljX3BvaW50ZXJfY2FzdDxHcmFwaGljc0xheWVyQ2hyb21pdW0+KEdy
YXBoaWNzTGF5ZXI6OmNyZWF0ZSgmY2xpZW50KSk7Ci0gICAgQVNTRVJUX1RSVUUoZ3JhcGhpY3NM
YXllci5nZXQoKSk7CitjbGFzcyBNb2NrTGF5ZXJUcmVlSG9zdENsaWVudCA6IHB1YmxpYyBDQ0xh
eWVyVHJlZUhvc3RDbGllbnQgeworcHVibGljOgorICAgIHZpcnR1YWwgdm9pZCB3aWxsQmVnaW5G
cmFtZSgpIE9WRVJSSURFIHsgfQorICAgIHZpcnR1YWwgdm9pZCBkaWRCZWdpbkZyYW1lKCkgT1ZF
UlJJREUgeyB9CisgICAgdmlydHVhbCB2b2lkIHVwZGF0ZUFuaW1hdGlvbnMoZG91YmxlIGZyYW1l
QmVnaW5UaW1lKSBPVkVSUklERSB7IH0KKyAgICB2aXJ0dWFsIHZvaWQgbGF5b3V0KCkgT1ZFUlJJ
REUgeyB9CisgICAgdmlydHVhbCB2b2lkIGFwcGx5U2Nyb2xsQW5kU2NhbGUoY29uc3QgSW50U2l6
ZSYgc2Nyb2xsRGVsdGEsIGZsb2F0IHBhZ2VTY2FsZSkgT1ZFUlJJREUgeyB9CisgICAgdmlydHVh
bCBQYXNzUmVmUHRyPEdyYXBoaWNzQ29udGV4dDNEPiBjcmVhdGVDb250ZXh0M0QoKSBPVkVSUklE
RQorICAgIHsKKyAgICAgICAgR3JhcGhpY3NDb250ZXh0M0Q6OkF0dHJpYnV0ZXMgYXR0cnM7Cisg
ICAgICAgIHJldHVybiBjcmVhdGVDb21wb3NpdG9yTW9ja0dyYXBoaWNzQ29udGV4dDNEKGF0dHJz
KTsKKyAgICB9CisgICAgdmlydHVhbCB2b2lkIGRpZFJlY3JlYXRlQ29udGV4dChib29sIHN1Y2Nl
c3MpIE9WRVJSSURFIHsgfQorICAgIHZpcnR1YWwgdm9pZCB3aWxsQ29tbWl0KCkgT1ZFUlJJREUg
eyB9CisgICAgdmlydHVhbCB2b2lkIGRpZENvbW1pdCgpIE9WRVJSSURFIHsgfQorICAgIHZpcnR1
YWwgdm9pZCBkaWRDb21taXRBbmREcmF3RnJhbWUoKSBPVkVSUklERSB7IH0KKyAgICB2aXJ0dWFs
IHZvaWQgZGlkQ29tcGxldGVTd2FwQnVmZmVycygpIE9WRVJSSURFIHsgfQorICAgIHZpcnR1YWwg
dm9pZCBzY2hlZHVsZUNvbXBvc2l0ZSgpIE9WRVJSSURFIHsgfQorfTsKKworY2xhc3MgTW9ja0xh
eWVyVHJlZUhvc3QgOiBwdWJsaWMgQ0NMYXllclRyZWVIb3N0IHsKK3B1YmxpYzoKKyAgICBzdGF0
aWMgUGFzc093blB0cjxNb2NrTGF5ZXJUcmVlSG9zdD4gY3JlYXRlKCkKKyAgICB7CisgICAgICAg
IC8vIEZvciB0aGVzZSB0ZXN0cywgd2Ugd2lsbCBlbmFibGUgdGhyZWFkZWQgYW5pbWF0aW9ucy4K
KyAgICAgICAgQ0NTZXR0aW5ncyBzZXR0aW5nczsKKyAgICAgICAgc2V0dGluZ3MudGhyZWFkZWRB
bmltYXRpb25FbmFibGVkID0gdHJ1ZTsKKyAgICAgICAgT3duUHRyPE1vY2tMYXllclRyZWVIb3N0
PiBsYXllclRyZWVIb3N0KGFkb3B0UHRyKG5ldyBNb2NrTGF5ZXJUcmVlSG9zdChuZXcgTW9ja0xh
eWVyVHJlZUhvc3RDbGllbnQoKSwgc2V0dGluZ3MpKSk7CisgICAgICAgIGJvb2wgc3VjY2VzcyA9
IGxheWVyVHJlZUhvc3QtPmluaXRpYWxpemUoKTsKKyAgICAgICAgRVhQRUNUX1RSVUUoc3VjY2Vz
cyk7CisgICAgICAgIGxheWVyVHJlZUhvc3QtPnNldFJvb3RMYXllcihMYXllckNocm9taXVtOjpj
cmVhdGUoKSk7CisgICAgICAgIGxheWVyVHJlZUhvc3QtPnNldFZpZXdwb3J0U2l6ZShJbnRTaXpl
KDEsIDEpKTsKKyAgICAgICAgcmV0dXJuIGxheWVyVHJlZUhvc3QucmVsZWFzZSgpOworICAgIH0K
KworICAgIHZpcnR1YWwgUGFzc093blB0cjxDQ0xheWVyVHJlZUhvc3RJbXBsPiBjcmVhdGVMYXll
clRyZWVIb3N0SW1wbChDQ0xheWVyVHJlZUhvc3RJbXBsQ2xpZW50KiBjbGllbnQpCisgICAgewor
ICAgICAgICAvLyBGb3IgdGhlc2UgdGVzdHMsIHdlIHdpbGwgZW5hYmxlIHRocmVhZGVkIGFuaW1h
dGlvbnMuCisgICAgICAgIENDU2V0dGluZ3MgY29weVNldHRpbmdzID0gc2V0dGluZ3MoKTsKKyAg
ICAgICAgY29weVNldHRpbmdzLnRocmVhZGVkQW5pbWF0aW9uRW5hYmxlZCA9IHRydWU7CisgICAg
ICAgIHJldHVybiBDQ0xheWVyVHJlZUhvc3RJbXBsOjpjcmVhdGUoY29weVNldHRpbmdzLCBjbGll
bnQpOworICAgIH0KKworcHJpdmF0ZToKKyAgICBNb2NrTGF5ZXJUcmVlSG9zdChDQ0xheWVyVHJl
ZUhvc3RDbGllbnQqIGNsaWVudCwgY29uc3QgQ0NTZXR0aW5ncyYgc2V0dGluZ3MpCisgICAgICAg
IDogQ0NMYXllclRyZWVIb3N0KGNsaWVudCwgc2V0dGluZ3MpCisgICAgeworICAgIH0KK307CisK
K2NsYXNzIEdyYXBoaWNzTGF5ZXJDaHJvbWl1bVRlc3QgOiBwdWJsaWMgdGVzdGluZzo6VGVzdCB7
CitwdWJsaWM6CisgICAgR3JhcGhpY3NMYXllckNocm9taXVtVGVzdCgpCisgICAgeworICAgICAg
ICBXZWJDb21wb3NpdG9yOjppbml0aWFsaXplKDApOworICAgICAgICBtX2dyYXBoaWNzTGF5ZXIg
PSBzdGF0aWNfcG9pbnRlcl9jYXN0PEdyYXBoaWNzTGF5ZXJDaHJvbWl1bT4oR3JhcGhpY3NMYXll
cjo6Y3JlYXRlKCZtX2NsaWVudCkpOworICAgICAgICBtX3BsYXRmb3JtTGF5ZXIgPSBzdGF0aWNf
Y2FzdDxMYXllckNocm9taXVtKj4obV9ncmFwaGljc0xheWVyLT5wbGF0Zm9ybUxheWVyKCkpOwor
ICAgICAgICBtX2xheWVyVHJlZUhvc3QgPSBNb2NrTGF5ZXJUcmVlSG9zdDo6Y3JlYXRlKCk7Cisg
ICAgICAgIG1fcGxhdGZvcm1MYXllci0+c2V0TGF5ZXJUcmVlSG9zdChtX2xheWVyVHJlZUhvc3Qu
Z2V0KCkpOworICAgIH0KKworICAgIHZpcnR1YWwgfkdyYXBoaWNzTGF5ZXJDaHJvbWl1bVRlc3Qo
KQorICAgIHsKKyAgICAgICAgbV9ncmFwaGljc0xheWVyLmNsZWFyKCk7CisgICAgICAgIG1fbGF5
ZXJUcmVlSG9zdC5jbGVhcigpOworICAgICAgICBXZWJDb21wb3NpdG9yOjpzaHV0ZG93bigpOwor
ICAgIH0KKworcHJvdGVjdGVkOgorICAgIHN0YXRpYyB2b2lkIGV4cGVjdFRyYW5zbGF0ZVgoZG91
YmxlIHRyYW5zbGF0ZVgsIGNvbnN0IFdlYlRyYW5zZm9ybWF0aW9uTWF0cml4JiBtYXRyaXgpCisg
ICAgeworICAgICAgICBFWFBFQ1RfRkxPQVRfRVEodHJhbnNsYXRlWCwgbWF0cml4Lm00MSgpKTsK
KyAgICB9CisKKyAgICBMYXllckNocm9taXVtKiBtX3BsYXRmb3JtTGF5ZXI7CisgICAgT3duUHRy
PEdyYXBoaWNzTGF5ZXJDaHJvbWl1bT4gbV9ncmFwaGljc0xheWVyOworICAgIE93blB0cjxDQ0xh
eWVyVHJlZUhvc3Q+IG1fbGF5ZXJUcmVlSG9zdDsKIAotICAgIExheWVyQ2hyb21pdW0qIHBsYXRm
b3JtTGF5ZXIgPSBzdGF0aWNfY2FzdDxMYXllckNocm9taXVtKj4oZ3JhcGhpY3NMYXllci0+cGxh
dGZvcm1MYXllcigpKTsKLSAgICBBU1NFUlRfVFJVRShwbGF0Zm9ybUxheWVyKTsKK3ByaXZhdGU6
CisgICAgTW9ja0dyYXBoaWNzTGF5ZXJDbGllbnQgbV9jbGllbnQ7CisgICAgRGVidWdTY29wZWRT
ZXRNYWluVGhyZWFkIG1fbWFpbjsKK307CiAKLSAgICBBU1NFUlRfRkFMU0UocGxhdGZvcm1MYXll
ci0+aGFzQWN0aXZlQW5pbWF0aW9uKCkpOworVEVTVF9GKEdyYXBoaWNzTGF5ZXJDaHJvbWl1bVRl
c3QsIHVwZGF0ZUxheWVyUHJlc2VydmVzM0RXaXRoQW5pbWF0aW9ucykKK3sKKyAgICBBU1NFUlRf
RkFMU0UobV9wbGF0Zm9ybUxheWVyLT5oYXNBY3RpdmVBbmltYXRpb24oKSk7CiAKICAgICBPd25Q
dHI8Q0NBY3RpdmVBbmltYXRpb24+IGZsb2F0QW5pbWF0aW9uKENDQWN0aXZlQW5pbWF0aW9uOjpj
cmVhdGUoYWRvcHRQdHIobmV3IEZha2VGbG9hdEFuaW1hdGlvbkN1cnZlKSwgMCwgMSwgQ0NBY3Rp
dmVBbmltYXRpb246Ok9wYWNpdHkpKTsKLSAgICBwbGF0Zm9ybUxheWVyLT5sYXllckFuaW1hdGlv
bkNvbnRyb2xsZXIoKS0+YWRkKGZsb2F0QW5pbWF0aW9uLnJlbGVhc2UoKSk7CisgICAgbV9wbGF0
Zm9ybUxheWVyLT5sYXllckFuaW1hdGlvbkNvbnRyb2xsZXIoKS0+YWRkQW5pbWF0aW9uKGZsb2F0
QW5pbWF0aW9uLnJlbGVhc2UoKSk7CisKKyAgICBBU1NFUlRfVFJVRShtX3BsYXRmb3JtTGF5ZXIt
Pmhhc0FjdGl2ZUFuaW1hdGlvbigpKTsKKworICAgIG1fZ3JhcGhpY3NMYXllci0+c2V0UHJlc2Vy
dmVzM0QodHJ1ZSk7CisKKyAgICBtX3BsYXRmb3JtTGF5ZXIgPSBzdGF0aWNfY2FzdDxMYXllckNo
cm9taXVtKj4obV9ncmFwaGljc0xheWVyLT5wbGF0Zm9ybUxheWVyKCkpOworICAgIEFTU0VSVF9U
UlVFKG1fcGxhdGZvcm1MYXllcik7CisKKyAgICBBU1NFUlRfVFJVRShtX3BsYXRmb3JtTGF5ZXIt
Pmhhc0FjdGl2ZUFuaW1hdGlvbigpKTsKKyAgICBtX3BsYXRmb3JtTGF5ZXItPnJlbW92ZUFuaW1h
dGlvbigwKTsKKyAgICBBU1NFUlRfRkFMU0UobV9wbGF0Zm9ybUxheWVyLT5oYXNBY3RpdmVBbmlt
YXRpb24oKSk7CisKKyAgICBtX2dyYXBoaWNzTGF5ZXItPnNldFByZXNlcnZlczNEKGZhbHNlKTsK
KworICAgIG1fcGxhdGZvcm1MYXllciA9IHN0YXRpY19jYXN0PExheWVyQ2hyb21pdW0qPihtX2dy
YXBoaWNzTGF5ZXItPnBsYXRmb3JtTGF5ZXIoKSk7CisgICAgQVNTRVJUX1RSVUUobV9wbGF0Zm9y
bUxheWVyKTsKKworICAgIEFTU0VSVF9GQUxTRShtX3BsYXRmb3JtTGF5ZXItPmhhc0FjdGl2ZUFu
aW1hdGlvbigpKTsKK30KKworVEVTVF9GKEdyYXBoaWNzTGF5ZXJDaHJvbWl1bVRlc3QsIGNyZWF0
ZU9wYWNpdHlBbmltYXRpb24pCit7CisgICAgY29uc3QgZG91YmxlIGR1cmF0aW9uID0gMTsKKyAg
ICBXZWJDb3JlOjpLZXlmcmFtZVZhbHVlTGlzdCB2YWx1ZXMoQW5pbWF0ZWRQcm9wZXJ0eU9wYWNp
dHkpOworICAgIHZhbHVlcy5pbnNlcnQobmV3IEZsb2F0QW5pbWF0aW9uVmFsdWUoMCwgMCkpOwor
ICAgIHZhbHVlcy5pbnNlcnQobmV3IEZsb2F0QW5pbWF0aW9uVmFsdWUoZHVyYXRpb24sIDEpKTsK
KworICAgIFJlZlB0cjxBbmltYXRpb24+IGFuaW1hdGlvbiA9IEFuaW1hdGlvbjo6Y3JlYXRlKCk7
CisgICAgYW5pbWF0aW9uLT5zZXREdXJhdGlvbihkdXJhdGlvbik7CisKKyAgICBJbnRTaXplIGJv
eFNpemU7CisgICAgYm9vbCBhZGRlZEFuaW1hdGlvbiA9IG1fZ3JhcGhpY3NMYXllci0+YWRkQW5p
bWF0aW9uKHZhbHVlcywgYm94U2l6ZSwgYW5pbWF0aW9uLmdldCgpLCAiIiwgMCk7CisKKyAgICBF
WFBFQ1RfVFJVRShhZGRlZEFuaW1hdGlvbik7CisKKyAgICBFWFBFQ1RfVFJVRShtX3BsYXRmb3Jt
TGF5ZXItPmxheWVyQW5pbWF0aW9uQ29udHJvbGxlcigpLT5oYXNBY3RpdmVBbmltYXRpb24oKSk7
CisKKyAgICBDQ0FjdGl2ZUFuaW1hdGlvbiogYWN0aXZlQW5pbWF0aW9uID0gbV9wbGF0Zm9ybUxh
eWVyLT5sYXllckFuaW1hdGlvbkNvbnRyb2xsZXIoKS0+Z2V0QWN0aXZlQW5pbWF0aW9uKENDQWN0
aXZlQW5pbWF0aW9uOjpPcGFjaXR5KTsKKyAgICBFWFBFQ1RfVFJVRShhY3RpdmVBbmltYXRpb24p
OworCisgICAgRVhQRUNUX0VRKDEsIGFjdGl2ZUFuaW1hdGlvbi0+aXRlcmF0aW9ucygpKTsKKyAg
ICBFWFBFQ1RfRVEoQ0NBY3RpdmVBbmltYXRpb246Ok9wYWNpdHksIGFjdGl2ZUFuaW1hdGlvbi0+
dGFyZ2V0UHJvcGVydHkoKSk7CisKKyAgICBFWFBFQ1RfRVEoQ0NBbmltYXRpb25DdXJ2ZTo6Rmxv
YXQsIGFjdGl2ZUFuaW1hdGlvbi0+Y3VydmUoKS0+dHlwZSgpKTsKKworICAgIGNvbnN0IENDRmxv
YXRBbmltYXRpb25DdXJ2ZSogY3VydmUgPSBhY3RpdmVBbmltYXRpb24tPmN1cnZlKCktPnRvRmxv
YXRBbmltYXRpb25DdXJ2ZSgpOworICAgIEVYUEVDVF9UUlVFKGN1cnZlKTsKKworICAgIEVYUEVD
VF9FUSgwLCBjdXJ2ZS0+Z2V0VmFsdWUoMCkpOworICAgIEVYUEVDVF9FUSgxLCBjdXJ2ZS0+Z2V0
VmFsdWUoZHVyYXRpb24pKTsKK30KKworVEVTVF9GKEdyYXBoaWNzTGF5ZXJDaHJvbWl1bVRlc3Qs
IGNyZWF0ZVRyYW5zZm9ybUFuaW1hdGlvbikKK3sKKyAgICBjb25zdCBkb3VibGUgZHVyYXRpb24g
PSAxOworICAgIFdlYkNvcmU6OktleWZyYW1lVmFsdWVMaXN0IHZhbHVlcyhBbmltYXRlZFByb3Bl
cnR5V2Via2l0VHJhbnNmb3JtKTsKKworICAgIFRyYW5zZm9ybU9wZXJhdGlvbnMgb3BlcmF0aW9u
czE7CisgICAgb3BlcmF0aW9uczEub3BlcmF0aW9ucygpLmFwcGVuZChUcmFuc2xhdGVUcmFuc2Zv
cm1PcGVyYXRpb246OmNyZWF0ZShMZW5ndGgoMiwgV2ViQ29yZTo6Rml4ZWQpLCBMZW5ndGgoMCwg
V2ViQ29yZTo6Rml4ZWQpLCBUcmFuc2Zvcm1PcGVyYXRpb246OlRSQU5TTEFURV9YKSk7CisgICAg
dmFsdWVzLmluc2VydChuZXcgVHJhbnNmb3JtQW5pbWF0aW9uVmFsdWUoMCwgJm9wZXJhdGlvbnMx
KSk7CisKKyAgICBUcmFuc2Zvcm1PcGVyYXRpb25zIG9wZXJhdGlvbnMyOworICAgIG9wZXJhdGlv
bnMyLm9wZXJhdGlvbnMoKS5hcHBlbmQoVHJhbnNsYXRlVHJhbnNmb3JtT3BlcmF0aW9uOjpjcmVh
dGUoTGVuZ3RoKDQsIFdlYkNvcmU6OkZpeGVkKSwgTGVuZ3RoKDAsIFdlYkNvcmU6OkZpeGVkKSwg
VHJhbnNmb3JtT3BlcmF0aW9uOjpUUkFOU0xBVEVfWCkpOworICAgIHZhbHVlcy5pbnNlcnQobmV3
IFRyYW5zZm9ybUFuaW1hdGlvblZhbHVlKGR1cmF0aW9uLCAmb3BlcmF0aW9uczIpKTsKKworICAg
IFJlZlB0cjxBbmltYXRpb24+IGFuaW1hdGlvbiA9IEFuaW1hdGlvbjo6Y3JlYXRlKCk7CisgICAg
YW5pbWF0aW9uLT5zZXREdXJhdGlvbihkdXJhdGlvbik7CisKKyAgICBJbnRTaXplIGJveFNpemU7
CisgICAgbV9ncmFwaGljc0xheWVyLT5hZGRBbmltYXRpb24odmFsdWVzLCBib3hTaXplLCBhbmlt
YXRpb24uZ2V0KCksICIiLCAwKTsKKworICAgIEVYUEVDVF9UUlVFKG1fcGxhdGZvcm1MYXllci0+
bGF5ZXJBbmltYXRpb25Db250cm9sbGVyKCktPmhhc0FjdGl2ZUFuaW1hdGlvbigpKTsKKworICAg
IENDQWN0aXZlQW5pbWF0aW9uKiBhY3RpdmVBbmltYXRpb24gPSBtX3BsYXRmb3JtTGF5ZXItPmxh
eWVyQW5pbWF0aW9uQ29udHJvbGxlcigpLT5nZXRBY3RpdmVBbmltYXRpb24oQ0NBY3RpdmVBbmlt
YXRpb246OlRyYW5zZm9ybSk7CisgICAgRVhQRUNUX1RSVUUoYWN0aXZlQW5pbWF0aW9uKTsKKwor
ICAgIEVYUEVDVF9FUSgxLCBhY3RpdmVBbmltYXRpb24tPml0ZXJhdGlvbnMoKSk7CisgICAgRVhQ
RUNUX0VRKENDQWN0aXZlQW5pbWF0aW9uOjpUcmFuc2Zvcm0sIGFjdGl2ZUFuaW1hdGlvbi0+dGFy
Z2V0UHJvcGVydHkoKSk7CisKKyAgICBFWFBFQ1RfRVEoQ0NBbmltYXRpb25DdXJ2ZTo6VHJhbnNm
b3JtLCBhY3RpdmVBbmltYXRpb24tPmN1cnZlKCktPnR5cGUoKSk7CisKKyAgICBjb25zdCBDQ1Ry
YW5zZm9ybUFuaW1hdGlvbkN1cnZlKiBjdXJ2ZSA9IGFjdGl2ZUFuaW1hdGlvbi0+Y3VydmUoKS0+
dG9UcmFuc2Zvcm1BbmltYXRpb25DdXJ2ZSgpOworICAgIEVYUEVDVF9UUlVFKGN1cnZlKTsKKwor
ICAgIGV4cGVjdFRyYW5zbGF0ZVgoMiwgY3VydmUtPmdldFZhbHVlKDApKTsKKyAgICBleHBlY3RU
cmFuc2xhdGVYKDQsIGN1cnZlLT5nZXRWYWx1ZShkdXJhdGlvbikpOworfQorCitURVNUX0YoR3Jh
cGhpY3NMYXllckNocm9taXVtVGVzdCwgY3JlYXRlVHJhbnNmb3JtQW5pbWF0aW9uV2l0aEJpZ1Jv
dGF0aW9uKQoreworICAgIGNvbnN0IGRvdWJsZSBkdXJhdGlvbiA9IDE7CisgICAgV2ViQ29yZTo6
S2V5ZnJhbWVWYWx1ZUxpc3QgdmFsdWVzKEFuaW1hdGVkUHJvcGVydHlXZWJraXRUcmFuc2Zvcm0p
OworCisgICAgVHJhbnNmb3JtT3BlcmF0aW9ucyBvcGVyYXRpb25zMTsKKyAgICBvcGVyYXRpb25z
MS5vcGVyYXRpb25zKCkuYXBwZW5kKFJvdGF0ZVRyYW5zZm9ybU9wZXJhdGlvbjo6Y3JlYXRlKDAs
IFRyYW5zZm9ybU9wZXJhdGlvbjo6Uk9UQVRFKSk7CisgICAgdmFsdWVzLmluc2VydChuZXcgVHJh
bnNmb3JtQW5pbWF0aW9uVmFsdWUoMCwgJm9wZXJhdGlvbnMxKSk7CisKKyAgICBUcmFuc2Zvcm1P
cGVyYXRpb25zIG9wZXJhdGlvbnMyOworICAgIG9wZXJhdGlvbnMyLm9wZXJhdGlvbnMoKS5hcHBl
bmQoUm90YXRlVHJhbnNmb3JtT3BlcmF0aW9uOjpjcmVhdGUoMjcwLCBUcmFuc2Zvcm1PcGVyYXRp
b246OlJPVEFURSkpOworICAgIHZhbHVlcy5pbnNlcnQobmV3IFRyYW5zZm9ybUFuaW1hdGlvblZh
bHVlKGR1cmF0aW9uLCAmb3BlcmF0aW9uczIpKTsKKworICAgIFJlZlB0cjxBbmltYXRpb24+IGFu
aW1hdGlvbiA9IEFuaW1hdGlvbjo6Y3JlYXRlKCk7CisgICAgYW5pbWF0aW9uLT5zZXREdXJhdGlv
bihkdXJhdGlvbik7CisKKyAgICBJbnRTaXplIGJveFNpemU7CisgICAgbV9ncmFwaGljc0xheWVy
LT5hZGRBbmltYXRpb24odmFsdWVzLCBib3hTaXplLCBhbmltYXRpb24uZ2V0KCksICIiLCAwKTsK
KworICAgIEVYUEVDVF9GQUxTRShtX3BsYXRmb3JtTGF5ZXItPmxheWVyQW5pbWF0aW9uQ29udHJv
bGxlcigpLT5oYXNBY3RpdmVBbmltYXRpb24oKSk7Cit9CisKK1RFU1RfRihHcmFwaGljc0xheWVy
Q2hyb21pdW1UZXN0LCBjcmVhdGVUcmFuc2Zvcm1BbmltYXRpb25XaXRoU2luZ3VsYXJNYXRyaXgp
Cit7CisgICAgY29uc3QgZG91YmxlIGR1cmF0aW9uID0gMTsKKyAgICBXZWJDb3JlOjpLZXlmcmFt
ZVZhbHVlTGlzdCB2YWx1ZXMoQW5pbWF0ZWRQcm9wZXJ0eVdlYmtpdFRyYW5zZm9ybSk7CisKKyAg
ICBUcmFuc2Zvcm1hdGlvbk1hdHJpeCBtYXRyaXgxOworICAgIFRyYW5zZm9ybU9wZXJhdGlvbnMg
b3BlcmF0aW9uczE7CisgICAgb3BlcmF0aW9uczEub3BlcmF0aW9ucygpLmFwcGVuZChNYXRyaXgz
RFRyYW5zZm9ybU9wZXJhdGlvbjo6Y3JlYXRlKG1hdHJpeDEpKTsKKyAgICB2YWx1ZXMuaW5zZXJ0
KG5ldyBUcmFuc2Zvcm1BbmltYXRpb25WYWx1ZSgwLCAmb3BlcmF0aW9uczEpKTsKKworICAgIFRy
YW5zZm9ybWF0aW9uTWF0cml4IG1hdHJpeDI7CisgICAgbWF0cml4Mi5zZXRNMTEoMCk7CisgICAg
VHJhbnNmb3JtT3BlcmF0aW9ucyBvcGVyYXRpb25zMjsKKyAgICBvcGVyYXRpb25zMi5vcGVyYXRp
b25zKCkuYXBwZW5kKE1hdHJpeDNEVHJhbnNmb3JtT3BlcmF0aW9uOjpjcmVhdGUobWF0cml4Mikp
OworICAgIHZhbHVlcy5pbnNlcnQobmV3IFRyYW5zZm9ybUFuaW1hdGlvblZhbHVlKGR1cmF0aW9u
LCAmb3BlcmF0aW9uczIpKTsKKworICAgIFJlZlB0cjxBbmltYXRpb24+IGFuaW1hdGlvbiA9IEFu
aW1hdGlvbjo6Y3JlYXRlKCk7CisgICAgYW5pbWF0aW9uLT5zZXREdXJhdGlvbihkdXJhdGlvbik7
CisKKyAgICBJbnRTaXplIGJveFNpemU7CisgICAgbV9ncmFwaGljc0xheWVyLT5hZGRBbmltYXRp
b24odmFsdWVzLCBib3hTaXplLCBhbmltYXRpb24uZ2V0KCksICIiLCAwKTsKKworICAgIEVYUEVD
VF9GQUxTRShtX3BsYXRmb3JtTGF5ZXItPmxheWVyQW5pbWF0aW9uQ29udHJvbGxlcigpLT5oYXNB
Y3RpdmVBbmltYXRpb24oKSk7Cit9CisKK1RFU1RfRihHcmFwaGljc0xheWVyQ2hyb21pdW1UZXN0
LCBjcmVhdGVSZXZlcnNlZEFuaW1hdGlvbikKK3sKKyAgICBjb25zdCBkb3VibGUgZHVyYXRpb24g
PSAxOworICAgIFdlYkNvcmU6OktleWZyYW1lVmFsdWVMaXN0IHZhbHVlcyhBbmltYXRlZFByb3Bl
cnR5V2Via2l0VHJhbnNmb3JtKTsKKworICAgIFRyYW5zZm9ybU9wZXJhdGlvbnMgb3BlcmF0aW9u
czE7CisgICAgb3BlcmF0aW9uczEub3BlcmF0aW9ucygpLmFwcGVuZChUcmFuc2xhdGVUcmFuc2Zv
cm1PcGVyYXRpb246OmNyZWF0ZShMZW5ndGgoMiwgV2ViQ29yZTo6Rml4ZWQpLCBMZW5ndGgoMCwg
V2ViQ29yZTo6Rml4ZWQpLCBUcmFuc2Zvcm1PcGVyYXRpb246OlRSQU5TTEFURV9YKSk7CisgICAg
dmFsdWVzLmluc2VydChuZXcgVHJhbnNmb3JtQW5pbWF0aW9uVmFsdWUoMCwgJm9wZXJhdGlvbnMx
KSk7CisKKyAgICBUcmFuc2Zvcm1PcGVyYXRpb25zIG9wZXJhdGlvbnMyOworICAgIG9wZXJhdGlv
bnMyLm9wZXJhdGlvbnMoKS5hcHBlbmQoVHJhbnNsYXRlVHJhbnNmb3JtT3BlcmF0aW9uOjpjcmVh
dGUoTGVuZ3RoKDQsIFdlYkNvcmU6OkZpeGVkKSwgTGVuZ3RoKDAsIFdlYkNvcmU6OkZpeGVkKSwg
VHJhbnNmb3JtT3BlcmF0aW9uOjpUUkFOU0xBVEVfWCkpOworICAgIHZhbHVlcy5pbnNlcnQobmV3
IFRyYW5zZm9ybUFuaW1hdGlvblZhbHVlKGR1cmF0aW9uLCAmb3BlcmF0aW9uczIpKTsKKworICAg
IFJlZlB0cjxBbmltYXRpb24+IGFuaW1hdGlvbiA9IEFuaW1hdGlvbjo6Y3JlYXRlKCk7CisgICAg
YW5pbWF0aW9uLT5zZXREdXJhdGlvbihkdXJhdGlvbik7CisgICAgYW5pbWF0aW9uLT5zZXREaXJl
Y3Rpb24oQW5pbWF0aW9uOjpBbmltYXRpb25EaXJlY3Rpb25SZXZlcnNlKTsKKworICAgIEludFNp
emUgYm94U2l6ZTsKKyAgICBtX2dyYXBoaWNzTGF5ZXItPmFkZEFuaW1hdGlvbih2YWx1ZXMsIGJv
eFNpemUsIGFuaW1hdGlvbi5nZXQoKSwgIiIsIDApOworCisgICAgRVhQRUNUX1RSVUUobV9wbGF0
Zm9ybUxheWVyLT5sYXllckFuaW1hdGlvbkNvbnRyb2xsZXIoKS0+aGFzQWN0aXZlQW5pbWF0aW9u
KCkpOworCisgICAgQ0NBY3RpdmVBbmltYXRpb24qIGFjdGl2ZUFuaW1hdGlvbiA9IG1fcGxhdGZv
cm1MYXllci0+bGF5ZXJBbmltYXRpb25Db250cm9sbGVyKCktPmdldEFjdGl2ZUFuaW1hdGlvbihD
Q0FjdGl2ZUFuaW1hdGlvbjo6VHJhbnNmb3JtKTsKKyAgICBFWFBFQ1RfVFJVRShhY3RpdmVBbmlt
YXRpb24pOworCisgICAgRVhQRUNUX0VRKDEsIGFjdGl2ZUFuaW1hdGlvbi0+aXRlcmF0aW9ucygp
KTsKKyAgICBFWFBFQ1RfRVEoQ0NBY3RpdmVBbmltYXRpb246OlRyYW5zZm9ybSwgYWN0aXZlQW5p
bWF0aW9uLT50YXJnZXRQcm9wZXJ0eSgpKTsKKworICAgIEVYUEVDVF9FUShDQ0FuaW1hdGlvbkN1
cnZlOjpUcmFuc2Zvcm0sIGFjdGl2ZUFuaW1hdGlvbi0+Y3VydmUoKS0+dHlwZSgpKTsKKworICAg
IGNvbnN0IENDVHJhbnNmb3JtQW5pbWF0aW9uQ3VydmUqIGN1cnZlID0gYWN0aXZlQW5pbWF0aW9u
LT5jdXJ2ZSgpLT50b1RyYW5zZm9ybUFuaW1hdGlvbkN1cnZlKCk7CisgICAgRVhQRUNUX1RSVUUo
Y3VydmUpOworCisgICAgZXhwZWN0VHJhbnNsYXRlWCg0LCBjdXJ2ZS0+Z2V0VmFsdWUoMCkpOwor
ICAgIGV4cGVjdFRyYW5zbGF0ZVgoMiwgY3VydmUtPmdldFZhbHVlKGR1cmF0aW9uKSk7Cit9CisK
K1RFU1RfRihHcmFwaGljc0xheWVyQ2hyb21pdW1UZXN0LCBjcmVhdGVBbHRlcm5hdGluZ0FuaW1h
dGlvbikKK3sKKyAgICBjb25zdCBkb3VibGUgZHVyYXRpb24gPSAxOworICAgIFdlYkNvcmU6Oktl
eWZyYW1lVmFsdWVMaXN0IHZhbHVlcyhBbmltYXRlZFByb3BlcnR5V2Via2l0VHJhbnNmb3JtKTsK
KworICAgIFRyYW5zZm9ybU9wZXJhdGlvbnMgb3BlcmF0aW9uczE7CisgICAgb3BlcmF0aW9uczEu
b3BlcmF0aW9ucygpLmFwcGVuZChUcmFuc2xhdGVUcmFuc2Zvcm1PcGVyYXRpb246OmNyZWF0ZShM
ZW5ndGgoMiwgV2ViQ29yZTo6Rml4ZWQpLCBMZW5ndGgoMCwgV2ViQ29yZTo6Rml4ZWQpLCBUcmFu
c2Zvcm1PcGVyYXRpb246OlRSQU5TTEFURV9YKSk7CisgICAgdmFsdWVzLmluc2VydChuZXcgVHJh
bnNmb3JtQW5pbWF0aW9uVmFsdWUoMCwgJm9wZXJhdGlvbnMxKSk7CisKKyAgICBUcmFuc2Zvcm1P
cGVyYXRpb25zIG9wZXJhdGlvbnMyOworICAgIG9wZXJhdGlvbnMyLm9wZXJhdGlvbnMoKS5hcHBl
bmQoVHJhbnNsYXRlVHJhbnNmb3JtT3BlcmF0aW9uOjpjcmVhdGUoTGVuZ3RoKDQsIFdlYkNvcmU6
OkZpeGVkKSwgTGVuZ3RoKDAsIFdlYkNvcmU6OkZpeGVkKSwgVHJhbnNmb3JtT3BlcmF0aW9uOjpU
UkFOU0xBVEVfWCkpOworICAgIHZhbHVlcy5pbnNlcnQobmV3IFRyYW5zZm9ybUFuaW1hdGlvblZh
bHVlKGR1cmF0aW9uLCAmb3BlcmF0aW9uczIpKTsKKworICAgIFJlZlB0cjxBbmltYXRpb24+IGFu
aW1hdGlvbiA9IEFuaW1hdGlvbjo6Y3JlYXRlKCk7CisgICAgYW5pbWF0aW9uLT5zZXREdXJhdGlv
bihkdXJhdGlvbik7CisgICAgYW5pbWF0aW9uLT5zZXREaXJlY3Rpb24oQW5pbWF0aW9uOjpBbmlt
YXRpb25EaXJlY3Rpb25BbHRlcm5hdGUpOworICAgIGFuaW1hdGlvbi0+c2V0SXRlcmF0aW9uQ291
bnQoMik7CisKKyAgICBJbnRTaXplIGJveFNpemU7CisgICAgbV9ncmFwaGljc0xheWVyLT5hZGRB
bmltYXRpb24odmFsdWVzLCBib3hTaXplLCBhbmltYXRpb24uZ2V0KCksICIiLCAwKTsKKworICAg
IEVYUEVDVF9UUlVFKG1fcGxhdGZvcm1MYXllci0+bGF5ZXJBbmltYXRpb25Db250cm9sbGVyKCkt
Pmhhc0FjdGl2ZUFuaW1hdGlvbigpKTsKKworICAgIENDQWN0aXZlQW5pbWF0aW9uKiBhY3RpdmVB
bmltYXRpb24gPSBtX3BsYXRmb3JtTGF5ZXItPmxheWVyQW5pbWF0aW9uQ29udHJvbGxlcigpLT5n
ZXRBY3RpdmVBbmltYXRpb24oQ0NBY3RpdmVBbmltYXRpb246OlRyYW5zZm9ybSk7CisgICAgRVhQ
RUNUX1RSVUUoYWN0aXZlQW5pbWF0aW9uKTsKKyAgICBFWFBFQ1RfVFJVRShhY3RpdmVBbmltYXRp
b24tPmFsdGVybmF0ZXNEaXJlY3Rpb24oKSk7CisKKyAgICBFWFBFQ1RfRVEoMiwgYWN0aXZlQW5p
bWF0aW9uLT5pdGVyYXRpb25zKCkpOworICAgIEVYUEVDVF9FUShDQ0FjdGl2ZUFuaW1hdGlvbjo6
VHJhbnNmb3JtLCBhY3RpdmVBbmltYXRpb24tPnRhcmdldFByb3BlcnR5KCkpOworCisgICAgRVhQ
RUNUX0VRKENDQW5pbWF0aW9uQ3VydmU6OlRyYW5zZm9ybSwgYWN0aXZlQW5pbWF0aW9uLT5jdXJ2
ZSgpLT50eXBlKCkpOworCisgICAgY29uc3QgQ0NUcmFuc2Zvcm1BbmltYXRpb25DdXJ2ZSogY3Vy
dmUgPSBhY3RpdmVBbmltYXRpb24tPmN1cnZlKCktPnRvVHJhbnNmb3JtQW5pbWF0aW9uQ3VydmUo
KTsKKyAgICBFWFBFQ1RfVFJVRShjdXJ2ZSk7CisKKyAgICBleHBlY3RUcmFuc2xhdGVYKDIsIGN1
cnZlLT5nZXRWYWx1ZSgwKSk7CisgICAgZXhwZWN0VHJhbnNsYXRlWCg0LCBjdXJ2ZS0+Z2V0VmFs
dWUoZHVyYXRpb24pKTsKK30KKworVEVTVF9GKEdyYXBoaWNzTGF5ZXJDaHJvbWl1bVRlc3QsIGNy
ZWF0ZVJldmVyc2VkQWx0ZXJuYXRpbmdBbmltYXRpb24pCit7CisgICAgY29uc3QgZG91YmxlIGR1
cmF0aW9uID0gMTsKKyAgICBXZWJDb3JlOjpLZXlmcmFtZVZhbHVlTGlzdCB2YWx1ZXMoQW5pbWF0
ZWRQcm9wZXJ0eVdlYmtpdFRyYW5zZm9ybSk7CisKKyAgICBUcmFuc2Zvcm1PcGVyYXRpb25zIG9w
ZXJhdGlvbnMxOworICAgIG9wZXJhdGlvbnMxLm9wZXJhdGlvbnMoKS5hcHBlbmQoVHJhbnNsYXRl
VHJhbnNmb3JtT3BlcmF0aW9uOjpjcmVhdGUoTGVuZ3RoKDIsIFdlYkNvcmU6OkZpeGVkKSwgTGVu
Z3RoKDAsIFdlYkNvcmU6OkZpeGVkKSwgVHJhbnNmb3JtT3BlcmF0aW9uOjpUUkFOU0xBVEVfWCkp
OworICAgIHZhbHVlcy5pbnNlcnQobmV3IFRyYW5zZm9ybUFuaW1hdGlvblZhbHVlKDAsICZvcGVy
YXRpb25zMSkpOworCisgICAgVHJhbnNmb3JtT3BlcmF0aW9ucyBvcGVyYXRpb25zMjsKKyAgICBv
cGVyYXRpb25zMi5vcGVyYXRpb25zKCkuYXBwZW5kKFRyYW5zbGF0ZVRyYW5zZm9ybU9wZXJhdGlv
bjo6Y3JlYXRlKExlbmd0aCg0LCBXZWJDb3JlOjpGaXhlZCksIExlbmd0aCgwLCBXZWJDb3JlOjpG
aXhlZCksIFRyYW5zZm9ybU9wZXJhdGlvbjo6VFJBTlNMQVRFX1gpKTsKKyAgICB2YWx1ZXMuaW5z
ZXJ0KG5ldyBUcmFuc2Zvcm1BbmltYXRpb25WYWx1ZShkdXJhdGlvbiwgJm9wZXJhdGlvbnMyKSk7
CisKKyAgICBSZWZQdHI8QW5pbWF0aW9uPiBhbmltYXRpb24gPSBBbmltYXRpb246OmNyZWF0ZSgp
OworICAgIGFuaW1hdGlvbi0+c2V0RHVyYXRpb24oZHVyYXRpb24pOworICAgIGFuaW1hdGlvbi0+
c2V0RGlyZWN0aW9uKEFuaW1hdGlvbjo6QW5pbWF0aW9uRGlyZWN0aW9uQWx0ZXJuYXRlUmV2ZXJz
ZSk7CisgICAgYW5pbWF0aW9uLT5zZXRJdGVyYXRpb25Db3VudCgyKTsKIAotICAgIEFTU0VSVF9U
UlVFKHBsYXRmb3JtTGF5ZXItPmhhc0FjdGl2ZUFuaW1hdGlvbigpKTsKKyAgICBJbnRTaXplIGJv
eFNpemU7CisgICAgbV9ncmFwaGljc0xheWVyLT5hZGRBbmltYXRpb24odmFsdWVzLCBib3hTaXpl
LCBhbmltYXRpb24uZ2V0KCksICIiLCAwKTsKIAotICAgIGdyYXBoaWNzTGF5ZXItPnNldFByZXNl
cnZlczNEKHRydWUpOworICAgIEVYUEVDVF9UUlVFKG1fcGxhdGZvcm1MYXllci0+bGF5ZXJBbmlt
YXRpb25Db250cm9sbGVyKCktPmhhc0FjdGl2ZUFuaW1hdGlvbigpKTsKIAotICAgIHBsYXRmb3Jt
TGF5ZXIgPSBzdGF0aWNfY2FzdDxMYXllckNocm9taXVtKj4oZ3JhcGhpY3NMYXllci0+cGxhdGZv
cm1MYXllcigpKTsKLSAgICBBU1NFUlRfVFJVRShwbGF0Zm9ybUxheWVyKTsKKyAgICBDQ0FjdGl2
ZUFuaW1hdGlvbiogYWN0aXZlQW5pbWF0aW9uID0gbV9wbGF0Zm9ybUxheWVyLT5sYXllckFuaW1h
dGlvbkNvbnRyb2xsZXIoKS0+Z2V0QWN0aXZlQW5pbWF0aW9uKENDQWN0aXZlQW5pbWF0aW9uOjpU
cmFuc2Zvcm0pOworICAgIEVYUEVDVF9UUlVFKGFjdGl2ZUFuaW1hdGlvbik7CisgICAgRVhQRUNU
X1RSVUUoYWN0aXZlQW5pbWF0aW9uLT5hbHRlcm5hdGVzRGlyZWN0aW9uKCkpOwogCi0gICAgQVNT
RVJUX1RSVUUocGxhdGZvcm1MYXllci0+aGFzQWN0aXZlQW5pbWF0aW9uKCkpOwotICAgIHBsYXRm
b3JtTGF5ZXItPnJlbW92ZUFuaW1hdGlvbigwKTsKLSAgICBBU1NFUlRfRkFMU0UocGxhdGZvcm1M
YXllci0+aGFzQWN0aXZlQW5pbWF0aW9uKCkpOworICAgIEVYUEVDVF9FUSgyLCBhY3RpdmVBbmlt
YXRpb24tPml0ZXJhdGlvbnMoKSk7CisgICAgRVhQRUNUX0VRKENDQWN0aXZlQW5pbWF0aW9uOjpU
cmFuc2Zvcm0sIGFjdGl2ZUFuaW1hdGlvbi0+dGFyZ2V0UHJvcGVydHkoKSk7CiAKLSAgICBncmFw
aGljc0xheWVyLT5zZXRQcmVzZXJ2ZXMzRChmYWxzZSk7CisgICAgRVhQRUNUX0VRKENDQW5pbWF0
aW9uQ3VydmU6OlRyYW5zZm9ybSwgYWN0aXZlQW5pbWF0aW9uLT5jdXJ2ZSgpLT50eXBlKCkpOwog
Ci0gICAgcGxhdGZvcm1MYXllciA9IHN0YXRpY19jYXN0PExheWVyQ2hyb21pdW0qPihncmFwaGlj
c0xheWVyLT5wbGF0Zm9ybUxheWVyKCkpOwotICAgIEFTU0VSVF9UUlVFKHBsYXRmb3JtTGF5ZXIp
OworICAgIGNvbnN0IENDVHJhbnNmb3JtQW5pbWF0aW9uQ3VydmUqIGN1cnZlID0gYWN0aXZlQW5p
bWF0aW9uLT5jdXJ2ZSgpLT50b1RyYW5zZm9ybUFuaW1hdGlvbkN1cnZlKCk7CisgICAgRVhQRUNU
X1RSVUUoY3VydmUpOwogCi0gICAgQVNTRVJUX0ZBTFNFKHBsYXRmb3JtTGF5ZXItPmhhc0FjdGl2
ZUFuaW1hdGlvbigpKTsKKyAgICBleHBlY3RUcmFuc2xhdGVYKDQsIGN1cnZlLT5nZXRWYWx1ZSgw
KSk7CisgICAgZXhwZWN0VHJhbnNsYXRlWCgyLCBjdXJ2ZS0+Z2V0VmFsdWUoZHVyYXRpb24pKTsK
IH0KIAogfSAvLyBuYW1lc3BhY2UKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJLaXQvY2hyb21pdW0v
dGVzdHMvTGF5ZXJDaHJvbWl1bVRlc3QuY3BwIGIvU291cmNlL1dlYktpdC9jaHJvbWl1bS90ZXN0
cy9MYXllckNocm9taXVtVGVzdC5jcHAKaW5kZXggODIxM2RkODEyMDcxZTVhMzUwYzJkNWYxNzYw
ZTBiYmZhOGQ0OGY1ZS4uOTU0MTc0YWI3NjM1N2E3MTMyNDAxYTFkMGEzY2M4MzhjOGVkOTFhOSAx
MDA2NDQKLS0tIGEvU291cmNlL1dlYktpdC9jaHJvbWl1bS90ZXN0cy9MYXllckNocm9taXVtVGVz
dC5jcHAKKysrIGIvU291cmNlL1dlYktpdC9jaHJvbWl1bS90ZXN0cy9MYXllckNocm9taXVtVGVz
dC5jcHAKQEAgLTgwLDExICs4MCwxMyBAQCBwcm90ZWN0ZWQ6CiAgICAgewogICAgICAgICAvLyBJ
bml0aWFsaXplIHdpdGhvdXQgdGhyZWFkaW5nIHN1cHBvcnQuCiAgICAgICAgIFdlYktpdDo6V2Vi
Q29tcG9zaXRvcjo6aW5pdGlhbGl6ZSgwKTsKKyAgICAgICAgRGVidWdTY29wZWRTZXRNYWluVGhy
ZWFkIG1haW47CiAgICAgICAgIG1fbGF5ZXJUcmVlSG9zdCA9IGFkb3B0UHRyKG5ldyBNb2NrQ0NM
YXllclRyZWVIb3N0KTsKICAgICB9CiAKICAgICB2aXJ0dWFsIHZvaWQgVGVhckRvd24oKQogICAg
IHsKKyAgICAgICAgRGVidWdTY29wZWRTZXRNYWluVGhyZWFkIG1haW47CiAgICAgICAgIE1vY2s6
OlZlcmlmeUFuZENsZWFyRXhwZWN0YXRpb25zKG1fbGF5ZXJUcmVlSG9zdC5nZXQoKSk7CiAgICAg
ICAgIEVYUEVDVF9DQUxMKCptX2xheWVyVHJlZUhvc3QsIHNldE5lZWRzQ29tbWl0KCkpLlRpbWVz
KEFueU51bWJlcigpKTsKICAgICAgICAgbV9wYXJlbnQuY2xlYXIoKTsKQEAgLTYzOSw2ICs2NDEs
NyBAQCB2b2lkIGFzc2VydExheWVyVHJlZUhvc3RNYXRjaGVzRm9yU3VidHJlZShMYXllckNocm9t
aXVtKiBsYXllciwgQ0NMYXllclRyZWVIb3N0KgogVEVTVChMYXllckNocm9taXVtTGF5ZXJUcmVl
SG9zdFRlc3QsIGVudGVyaW5nVHJlZSkKIHsKICAgICBXZWJLaXQ6OldlYkNvbXBvc2l0b3I6Omlu
aXRpYWxpemUoMCk7CisgICAgRGVidWdTY29wZWRTZXRNYWluVGhyZWFkIG1haW47CiAgICAgUmVm
UHRyPExheWVyQ2hyb21pdW0+IHBhcmVudCA9IExheWVyQ2hyb21pdW06OmNyZWF0ZSgpOwogICAg
IFJlZlB0cjxMYXllckNocm9taXVtPiBjaGlsZCA9IExheWVyQ2hyb21pdW06OmNyZWF0ZSgpOwog
ICAgIFJlZlB0cjxMYXllckNocm9taXVtPiBtYXNrID0gTGF5ZXJDaHJvbWl1bTo6Y3JlYXRlKCk7
CkBAIC02NzEsNiArNjc0LDcgQEAgVEVTVChMYXllckNocm9taXVtTGF5ZXJUcmVlSG9zdFRlc3Qs
IGVudGVyaW5nVHJlZSkKIFRFU1QoTGF5ZXJDaHJvbWl1bUxheWVyVHJlZUhvc3RUZXN0LCBhZGRp
bmdMYXllclN1YnRyZWUpCiB7CiAgICAgV2ViS2l0OjpXZWJDb21wb3NpdG9yOjppbml0aWFsaXpl
KDApOworICAgIERlYnVnU2NvcGVkU2V0TWFpblRocmVhZCBtYWluOwogICAgIFJlZlB0cjxMYXll
ckNocm9taXVtPiBwYXJlbnQgPSBMYXllckNocm9taXVtOjpjcmVhdGUoKTsKICAgICBPd25QdHI8
RmFrZUNDTGF5ZXJUcmVlSG9zdD4gbGF5ZXJUcmVlSG9zdChGYWtlQ0NMYXllclRyZWVIb3N0Ojpj
cmVhdGUoKSk7CiAKQEAgLTcwMiw2ICs3MDYsNyBAQCBURVNUKExheWVyQ2hyb21pdW1MYXllclRy
ZWVIb3N0VGVzdCwgYWRkaW5nTGF5ZXJTdWJ0cmVlKQogVEVTVChMYXllckNocm9taXVtTGF5ZXJU
cmVlSG9zdFRlc3QsIGNoYW5nZUhvc3QpCiB7CiAgICAgV2ViS2l0OjpXZWJDb21wb3NpdG9yOjpp
bml0aWFsaXplKDApOworICAgIERlYnVnU2NvcGVkU2V0TWFpblRocmVhZCBtYWluOwogICAgIFJl
ZlB0cjxMYXllckNocm9taXVtPiBwYXJlbnQgPSBMYXllckNocm9taXVtOjpjcmVhdGUoKTsKICAg
ICBSZWZQdHI8TGF5ZXJDaHJvbWl1bT4gY2hpbGQgPSBMYXllckNocm9taXVtOjpjcmVhdGUoKTsK
ICAgICBSZWZQdHI8TGF5ZXJDaHJvbWl1bT4gbWFzayA9IExheWVyQ2hyb21pdW06OmNyZWF0ZSgp
OwpAQCAtNzM1LDYgKzc0MCw3IEBAIFRFU1QoTGF5ZXJDaHJvbWl1bUxheWVyVHJlZUhvc3RUZXN0
LCBjaGFuZ2VIb3N0KQogVEVTVChMYXllckNocm9taXVtTGF5ZXJUcmVlSG9zdFRlc3QsIGNoYW5n
ZUhvc3RJblN1YnRyZWUpCiB7CiAgICAgV2ViS2l0OjpXZWJDb21wb3NpdG9yOjppbml0aWFsaXpl
KDApOworICAgIERlYnVnU2NvcGVkU2V0TWFpblRocmVhZCBtYWluOwogICAgIFJlZlB0cjxMYXll
ckNocm9taXVtPiBmaXJzdFBhcmVudCA9IExheWVyQ2hyb21pdW06OmNyZWF0ZSgpOwogICAgIFJl
ZlB0cjxMYXllckNocm9taXVtPiBmaXJzdENoaWxkID0gTGF5ZXJDaHJvbWl1bTo6Y3JlYXRlKCk7
CiAgICAgUmVmUHRyPExheWVyQ2hyb21pdW0+IHNlY29uZFBhcmVudCA9IExheWVyQ2hyb21pdW06
OmNyZWF0ZSgpOwpAQCAtNzcyLDYgKzc3OCw3IEBAIFRFU1QoTGF5ZXJDaHJvbWl1bUxheWVyVHJl
ZUhvc3RUZXN0LCBjaGFuZ2VIb3N0SW5TdWJ0cmVlKQogVEVTVChMYXllckNocm9taXVtTGF5ZXJU
cmVlSG9zdFRlc3QsIHJlcGxhY2VNYXNrQW5kUmVwbGljYUxheWVyKQogewogICAgIFdlYktpdDo6
V2ViQ29tcG9zaXRvcjo6aW5pdGlhbGl6ZSgwKTsKKyAgICBEZWJ1Z1Njb3BlZFNldE1haW5UaHJl
YWQgbWFpbjsKICAgICBSZWZQdHI8TGF5ZXJDaHJvbWl1bT4gcGFyZW50ID0gTGF5ZXJDaHJvbWl1
bTo6Y3JlYXRlKCk7CiAgICAgUmVmUHRyPExheWVyQ2hyb21pdW0+IG1hc2sgPSBMYXllckNocm9t
aXVtOjpjcmVhdGUoKTsKICAgICBSZWZQdHI8TGF5ZXJDaHJvbWl1bT4gcmVwbGljYSA9IExheWVy
Q2hyb21pdW06OmNyZWF0ZSgpOwo=
</data>

          </attachment>
      

    </bug>

</bugzilla>