<?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>34062</bug_id>
          
          <creation_ts>2010-01-24 18:18:55 -0800</creation_ts>
          <short_desc>[Qt] Tuning and optimizations to GraphicsLayerQt</short_desc>
          <delta_ts>2010-02-04 08:56:34 -0800</delta_ts>
          <reporter_accessible>1</reporter_accessible>
          <cclist_accessible>1</cclist_accessible>
          <classification_id>1</classification_id>
          <classification>Unclassified</classification>
          <product>WebKit</product>
          <component>WebKit Qt</component>
          <version>528+ (Nightly build)</version>
          <rep_platform>PC</rep_platform>
          <op_sys>Other</op_sys>
          <bug_status>RESOLVED</bug_status>
          <resolution>FIXED</resolution>
          
          
          <bug_file_loc></bug_file_loc>
          <status_whiteboard></status_whiteboard>
          <keywords></keywords>
          <priority>P2</priority>
          <bug_severity>Normal</bug_severity>
          <target_milestone>---</target_milestone>
          
          
          <everconfirmed>1</everconfirmed>
          <reporter name="Noam Rosenthal">noam</reporter>
          <assigned_to name="Noam Rosenthal">noam</assigned_to>
          <cc>abarth</cc>
    
    <cc>abecsi</cc>
    
    <cc>commit-queue</cc>
    
    <cc>eric</cc>
    
    <cc>laszlo.gombos</cc>
          

      

      

      

          <comment_sort_order>oldest_to_newest</comment_sort_order>  
          <long_desc isprivate="0" >
    <commentid>184128</commentid>
    <comment_count>0</comment_count>
    <who name="Noam Rosenthal">noam</who>
    <bug_when>2010-01-24 18:18:55 -0800</bug_when>
    <thetext>Tune the caching methodologies and flow of GraphicsLayerQt for better paint performance</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>184142</commentid>
    <comment_count>1</comment_count>
      <attachid>47307</attachid>
    <who name="Noam Rosenthal">noam</who>
    <bug_when>2010-01-24 19:54:41 -0800</bug_when>
    <thetext>Created attachment 47307
First round of performance tunings for QtWebkit accelerated compositing

Fixed a few issues like over-use of QTimer::singleShot, re-caching when it wasn&apos;t needed, and edge cases with transform animations that weren&apos;t supported.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>185146</commentid>
    <comment_count>2</comment_count>
      <attachid>47307</attachid>
    <who name="Ariya Hidayat">ariya.hidayat</who>
    <bug_when>2010-01-27 10:55:12 -0800</bug_when>
    <thetext>Comment on attachment 47307
First round of performance tunings for QtWebkit accelerated compositing

I like the optimization :) Good job, No&apos;am.

My minor concern: can we have a benchmark for this? I mean, there is a few manual tests out there (I&apos;m sure you use some of them) but I am referring to QBENCHMARK-type of tests.

A much more quantified speed-up mentioned in the ChangeLog will be very appreciated, IMO.

r- for this, otherwise looks good!</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>185475</commentid>
    <comment_count>3</comment_count>
    <who name="Noam Rosenthal">noam</who>
    <bug_when>2010-01-28 07:22:01 -0800</bug_when>
    <thetext>Ariya: To my understanding, QBENCHMARK is more about low-level stuff like measuring how much time it takes to render text 10,000 times, it&apos;s hard for me to envision how I would use it for something high level like CSS animations; maybe someone else has an idea?

The real benchmark for this is FPS and not msecs-per-low-level-operation.
What I can add to this is my css animation test suite (which currently lives somewhere on gitorious) into WebKit/qt/tests with some C++ code that measures the FPS with different QGV configurations.

However, for this specific patch, would a more general statement to the changelog be sufficient, keeping the benchmark for the next commit, or should I bundle them into one commit?</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>186498</commentid>
    <comment_count>4</comment_count>
      <attachid>47307</attachid>
    <who name="Ariya Hidayat">ariya.hidayat</who>
    <bug_when>2010-02-01 11:27:30 -0800</bug_when>
    <thetext>Comment on attachment 47307
First round of performance tunings for QtWebkit accelerated compositing

Hmm, in this case, mentioning the speed difference (before and after FPS) would be sufficient in the ChangeLog.

Moving your benchmark tests to WebKit/qt/tests can be in a separate commit (and no need to rush for that).</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>186504</commentid>
    <comment_count>5</comment_count>
      <attachid>47858</attachid>
    <who name="Noam Rosenthal">noam</who>
    <bug_when>2010-02-01 11:44:53 -0800</bug_when>
    <thetext>Created attachment 47858
tuning / optimiization to GraphicsLayerQt + added a comment about actual FPS improvement to the ChangeLog

I&apos;ve added a comment to the changelog mentioning that this change improves performance of a rotating table from 40FPS to 50FPS on Maemo5. Would that do?
My next commit would include a better FPS benchmark for CSS animations.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>186635</commentid>
    <comment_count>6</comment_count>
      <attachid>47858</attachid>
    <who name="Ariya Hidayat">ariya.hidayat</who>
    <bug_when>2010-02-01 16:07:14 -0800</bug_when>
    <thetext>Comment on attachment 47858
tuning / optimiization to GraphicsLayerQt + added a comment about actual FPS improvement to the ChangeLog

&gt; +        [Qt] Tuning and optimizations to GraphicsLayerQt. Reduce unnecessary
&gt; +        recaching, remove QTimer::singleShot and QPixmap::scaled, more
&gt; +        accurate strategy of handling transform operation blends. Rotating a bordered-table, for example, now runs at 50FPS instead of 40FPS on Maemo5.

You may want to wrap the last line properly.

Otherwise, LGTM.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>186994</commentid>
    <comment_count>7</comment_count>
    <who name="Noam Rosenthal">noam</who>
    <bug_when>2010-02-02 09:06:25 -0800</bug_when>
    <thetext>How does this get into the commit queue? Do I need to fix that line wraps and ask for a re-review? or do I just need to wait? :)</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>186997</commentid>
    <comment_count>8</comment_count>
    <who name="Noam Rosenthal">noam</who>
    <bug_when>2010-02-02 09:11:01 -0800</bug_when>
    <thetext>Thanks Kenneth!</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>187007</commentid>
    <comment_count>9</comment_count>
      <attachid>47858</attachid>
    <who name="WebKit Commit Bot">commit-queue</who>
    <bug_when>2010-02-02 09:43:35 -0800</bug_when>
    <thetext>Comment on attachment 47858
tuning / optimiization to GraphicsLayerQt + added a comment about actual FPS improvement to the ChangeLog

Rejecting patch 47858 from commit-queue.

Failed to run &quot;[&apos;git&apos;, &apos;svn&apos;, &apos;dcommit&apos;]&quot; exit_code: 1
Last 500 characters of output:
re/ChangeLog
	M	WebCore/platform/graphics/qt/GraphicsLayerQt.cpp
	M	WebKit/qt/Api/qgraphicswebview.cpp
	M	WebKit/qt/ChangeLog
A repository hook failed: MERGE request failed on &apos;/repository/webkit/trunk&apos;: Commit blocked by pre-commit hook (exit code 1) with output:
svnlook: Can&apos;t write to stream: Broken pipe

    The following ChangeLog files contain OOPS:

        trunk/WebCore/ChangeLog

    Please don&apos;t ever say &quot;OOPS&quot; in a ChangeLog file.
 at /usr/local/git/libexec/git-core/git-svn line 558


Full output: http://webkit-commit-queue.appspot.com/results/230652</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>187014</commentid>
    <comment_count>10</comment_count>
    <who name="Noam Rosenthal">noam</who>
    <bug_when>2010-02-02 09:51:01 -0800</bug_when>
    <thetext>Interesting... someone needs to change the Reviewed-by thingy in the changelogs?</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>187062</commentid>
    <comment_count>11</comment_count>
    <who name="Laszlo Gombos">laszlo.gombos</who>
    <bug_when>2010-02-02 11:06:15 -0800</bug_when>
    <thetext>Noam, I think the failure comes from &quot; No new tests. (OOPS!)&quot; in the ChangeLog. That is something you should be able to fix.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>187092</commentid>
    <comment_count>12</comment_count>
      <attachid>47963</attachid>
    <who name="Noam Rosenthal">noam</who>
    <bug_when>2010-02-02 12:19:28 -0800</bug_when>
    <thetext>Created attachment 47963
Performance tuning to GraphicsLayerQt

Fixed the line-wraps and put better description of testing in the commit log. No new code.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>187101</commentid>
    <comment_count>13</comment_count>
      <attachid>47963</attachid>
    <who name="Kenneth Rohde Christiansen">kenneth</who>
    <bug_when>2010-02-02 12:39:30 -0800</bug_when>
    <thetext>Comment on attachment 47963
Performance tuning to GraphicsLayerQt

Some minor comments

&gt;  
&gt;  class OpacityAnimationQt : public AnimationQt&lt;qreal&gt; {
&gt;  public:
&gt;      OpacityAnimationQt(GraphicsLayerQtImpl* layer, const KeyframeValueList&amp; values, const IntSize&amp; boxSize, const Animation* anim, const QString &amp; name)
&gt; -         : AnimationQt&lt;qreal&gt;(layer, values, boxSize, anim, name)
&gt; +                : AnimationQt&lt;qreal&gt;(layer, values, boxSize, anim, name)

Wrong indentation


&gt; -    } else {
&gt; +    } else
&gt;          for (QList&lt;QWeakPointer&lt;QAbstractAnimation&gt; &gt;::iterator it = m_impl-&gt;m_animations.begin(); it != m_impl-&gt;m_animations.end(); ++it) {

The for spends multiply lines, so the else would need {! Please look at the style guide, other examples include

correct:
if (true)
    doSomething

wrong:
if (true)
   // do something
   doSomething

correct:

if (true) {
   // do something
   doSomething
}


&gt; @@ -129,6 +131,9 @@ public:
&gt;      // compositor telling us to do so. We&apos;ll get that call from ChromeClientQt

// compositor notifies us throught ChromeClientQt when we need to synchronize 
??? 

&gt;      bool shouldSync;</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>187123</commentid>
    <comment_count>14</comment_count>
    <who name="Eric Seidel (no email)">eric</who>
    <bug_when>2010-02-02 13:55:51 -0800</bug_when>
    <thetext>(In reply to comment #11)
&gt; Noam, I think the failure comes from &quot; No new tests. (OOPS!)&quot; in the ChangeLog.
&gt; That is something you should be able to fix.

That&apos;s correct.  The commit-queue knows how to fix the Reviewed by line, but won&apos;t try to fix the lack of test explanation. :)

See http://webkit.org/coding/contributing.html#changelogs</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>187129</commentid>
    <comment_count>15</comment_count>
      <attachid>47973</attachid>
    <who name="Noam Rosenthal">noam</who>
    <bug_when>2010-02-02 14:05:13 -0800</bug_when>
    <thetext>Created attachment 47973
Performance tuning to GraphicsLayerQt: Some style fixes + correct changelog

Absolutely right - my bad.
Hopefully this patch should do it.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>187244</commentid>
    <comment_count>16</comment_count>
      <attachid>47973</attachid>
    <who name="WebKit Commit Bot">commit-queue</who>
    <bug_when>2010-02-02 20:15:03 -0800</bug_when>
    <thetext>Comment on attachment 47973
Performance tuning to GraphicsLayerQt: Some style fixes + correct changelog

Rejecting patch 47973 from commit-queue.

Failed to run &quot;[&apos;/Users/eseidel/Projects/CommitQueue/WebKitTools/Scripts/svn-apply&apos;, &apos;--reviewer&apos;, &apos;Kenneth Rohde Christiansen&apos;, &apos;--force&apos;]&quot; exit_code: 1
Last 500 characters of output:
z 3.
patching file WebCore/platform/graphics/qt/GraphicsLayerQt.cpp
Hunk #19 FAILED at 1022.
1 out of 21 hunks FAILED -- saving rejects to file WebCore/platform/graphics/qt/GraphicsLayerQt.cpp.rej
patching file WebKit/qt/Api/qgraphicswebview.cpp
Hunk #3 succeeded at 134 with fuzz 1 (offset 3 lines).
Hunk #4 succeeded at 183 (offset 2 lines).
Hunk #5 succeeded at 229 (offset 2 lines).
Hunk #6 succeeded at 448 (offset 7 lines).
patching file WebKit/qt/ChangeLog
Hunk #1 succeeded at 1 with fuzz 3.

Full output: http://webkit-commit-queue.appspot.com/results/232050</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>187250</commentid>
    <comment_count>17</comment_count>
      <attachid>47991</attachid>
    <who name="Noam Rosenthal">noam</who>
    <bug_when>2010-02-02 20:39:18 -0800</bug_when>
    <thetext>Created attachment 47991
Fixed a glitch in the actual diff file.... strange

Same code - just fixed a glitch in the diff file. 
It definitely works for me, hope it works for mr. review-bot :)</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>187256</commentid>
    <comment_count>18</comment_count>
    <who name="Laszlo Gombos">laszlo.gombos</who>
    <bug_when>2010-02-02 21:16:11 -0800</bug_when>
    <thetext>Noam, I think you would need to merge with WebKit trunk, resolve the conflicts in GraphicsLayerQt.cpp and upload the patch again.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>187261</commentid>
    <comment_count>19</comment_count>
    <who name="Noam Rosenthal">noam</who>
    <bug_when>2010-02-02 21:29:33 -0800</bug_when>
    <thetext>yes, that&apos;s what I just did with the new patch :)</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>187323</commentid>
    <comment_count>20</comment_count>
      <attachid>47991</attachid>
    <who name="WebKit Commit Bot">commit-queue</who>
    <bug_when>2010-02-03 05:29:18 -0800</bug_when>
    <thetext>Comment on attachment 47991
Fixed a glitch in the actual diff file.... strange

Rejecting patch 47991 from commit-queue.

Failed to run &quot;[&apos;/Users/eseidel/Projects/CommitQueue/WebKitTools/Scripts/svn-apply&apos;, &apos;--reviewer&apos;, &apos;Kenneth Rohde Christiansen&apos;, &apos;--force&apos;]&quot; exit_code: 1
Last 500 characters of output:
z 3.
patching file WebCore/platform/graphics/qt/GraphicsLayerQt.cpp
Hunk #19 FAILED at 1022.
1 out of 21 hunks FAILED -- saving rejects to file WebCore/platform/graphics/qt/GraphicsLayerQt.cpp.rej
patching file WebKit/qt/Api/qgraphicswebview.cpp
Hunk #3 succeeded at 134 with fuzz 1 (offset 3 lines).
Hunk #4 succeeded at 183 (offset 2 lines).
Hunk #5 succeeded at 229 (offset 2 lines).
Hunk #6 succeeded at 448 (offset 7 lines).
patching file WebKit/qt/ChangeLog
Hunk #1 succeeded at 1 with fuzz 3.

Full output: http://webkit-commit-queue.appspot.com/results/232358</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>187347</commentid>
    <comment_count>21</comment_count>
      <attachid>48024</attachid>
    <who name="Noam Rosenthal">noam</who>
    <bug_when>2010-02-03 07:18:12 -0800</bug_when>
    <thetext>Created attachment 48024
re-applying, uploaded wrong file

trying again - these are just patching mechanics problem... sorry for whoever this is taking time from :)</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>187358</commentid>
    <comment_count>22</comment_count>
      <attachid>48024</attachid>
    <who name="Laszlo Gombos">laszlo.gombos</who>
    <bug_when>2010-02-03 07:44:14 -0800</bug_when>
    <thetext>Comment on attachment 48024
re-applying, uploaded wrong file

This time it looks like the patch applies cleanly.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>187363</commentid>
    <comment_count>23</comment_count>
      <attachid>48024</attachid>
    <who name="WebKit Commit Bot">commit-queue</who>
    <bug_when>2010-02-03 08:01:18 -0800</bug_when>
    <thetext>Comment on attachment 48024
re-applying, uploaded wrong file

Clearing flags on attachment: 48024

Committed r54281: &lt;http://trac.webkit.org/changeset/54281&gt;</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>187364</commentid>
    <comment_count>24</comment_count>
    <who name="WebKit Commit Bot">commit-queue</who>
    <bug_when>2010-02-03 08:01:27 -0800</bug_when>
    <thetext>All reviewed patches have been landed.  Closing bug.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>187418</commentid>
    <comment_count>25</comment_count>
    <who name="Andras Becsi">abecsi</who>
    <bug_when>2010-02-03 10:11:38 -0800</bug_when>
    <thetext>Unfortunately we had to roll-out the patch in r54284 because it broke the build on the Qt buildbot.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>187423</commentid>
    <comment_count>26</comment_count>
    <who name="Noam Rosenthal">noam</who>
    <bug_when>2010-02-03 10:20:34 -0800</bug_when>
    <thetext>Any information? build failure log? I thought patches go through the build bot before they go into trunk.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>187427</commentid>
    <comment_count>27</comment_count>
    <who name="Andras Becsi">abecsi</who>
    <bug_when>2010-02-03 10:26:23 -0800</bug_when>
    <thetext>(In reply to comment #26)
&gt; Any information? build failure log? I thought patches go through the build bot
&gt; before they go into trunk.
The Early Warning System does not work for some reason (the box is white, not green).
You can find the buildbots here:
http://build.webkit.org/waterfall

And the error log here:
http://build.webkit.org/builders/Qt%20Linux%20Release/builds/6903/steps/compile-webkit/logs/stdio

Unfortunately this log is only kept for one or two days.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>187428</commentid>
    <comment_count>28</comment_count>
    <who name="Laszlo Gombos">laszlo.gombos</who>
    <bug_when>2010-02-03 10:27:58 -0800</bug_when>
    <thetext>Line m_sourceMatrix = m_layer.data()-&gt;transform(); in GraphicsLayerQt.cpp fails to compile with error:

../../../WebCore/platform/graphics/qt/GraphicsLayerQt.cpp: In member function â€˜virtual void WebCore::TransformAnimationQt::updateState(QAbstractAnimation::State, QAbstractAnimation::State)â€™:
../../../WebCore/platform/graphics/qt/GraphicsLayerQt.cpp:1025: error: no match for â€˜operator=â€™ in â€˜((WebCore::TransformAnimationQt*)this)-&gt;WebCore::TransformAnimationQt::m_sourceMatrix = QGraphicsItem::transform() const()â€™
../../../WebCore/platform/graphics/transforms/TransformationMatrix.h:97: note: candidates are: WebCore::TransformationMatrix&amp; WebCore::TransformationMatrix::operator=(const WebCore::TransformationMatrix&amp;)
make[1]: *** [obj/release/GraphicsLayerQt.o] Error 1</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>187473</commentid>
    <comment_count>29</comment_count>
    <who name="Eric Seidel (no email)">eric</who>
    <bug_when>2010-02-03 12:34:26 -0800</bug_when>
    <thetext>The patch was r+&apos;d before the EWS had a chance to look at it.  It only processes r? patches.

Previously the patch did not apply, thus the EWS bubbles were all purple.  Since Noam is not a committer, it was never tested on the Mac EWS bot.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>187476</commentid>
    <comment_count>30</comment_count>
    <who name="Eric Seidel (no email)">eric</who>
    <bug_when>2010-02-03 12:41:55 -0800</bug_when>
    <thetext>The commit-queue itself only tests on Mac Leopard.  The commit-queue also does not look at the results of the EWS bots before attempting commits.  EWS bots are meant to be tools for reviewers.  Laszlo r+&apos;d this while the qt EWS was still white (unprocessed).  Reviewers by *no means* should feel that they have to wait for the bots to review things.  But for patches you might be concerned about building, it it sometimes a good idea to wait for the EWS bots to run through a patch.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>187493</commentid>
    <comment_count>31</comment_count>
      <attachid>48064</attachid>
    <who name="Noam Rosenthal">noam</who>
    <bug_when>2010-02-03 13:23:51 -0800</bug_when>
    <thetext>Created attachment 48064
Fixed a build issue

Please let the build bots try it before we + the review, though it should hopefully be ok now</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>187499</commentid>
    <comment_count>32</comment_count>
    <who name="Eric Seidel (no email)">eric</who>
    <bug_when>2010-02-03 13:46:38 -0800</bug_when>
    <thetext>I think the Qt-EWS bot is just really really slow:
http://webkit-commit-queue.appspot.com/</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>187804</commentid>
    <comment_count>33</comment_count>
      <attachid>48064</attachid>
    <who name="Ariya Hidayat">ariya.hidayat</who>
    <bug_when>2010-02-04 08:15:31 -0800</bug_when>
    <thetext>Comment on attachment 48064
Fixed a build issue

LGTM.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>187821</commentid>
    <comment_count>34</comment_count>
      <attachid>48064</attachid>
    <who name="WebKit Commit Bot">commit-queue</who>
    <bug_when>2010-02-04 08:56:24 -0800</bug_when>
    <thetext>Comment on attachment 48064
Fixed a build issue

Clearing flags on attachment: 48064

Committed r54344: &lt;http://trac.webkit.org/changeset/54344&gt;</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>187822</commentid>
    <comment_count>35</comment_count>
    <who name="WebKit Commit Bot">commit-queue</who>
    <bug_when>2010-02-04 08:56:34 -0800</bug_when>
    <thetext>All reviewed patches have been landed.  Closing bug.</thetext>
  </long_desc>
      
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>47307</attachid>
            <date>2010-01-24 19:54:41 -0800</date>
            <delta_ts>2010-02-01 11:44:53 -0800</delta_ts>
            <desc>First round of performance tunings for QtWebkit accelerated compositing</desc>
            <filename>0001-GraphicsLayerQt-performance-tuning.patch</filename>
            <type>text/plain</type>
            <size>26345</size>
            <attacher name="Noam Rosenthal">noam</attacher>
            
              <data encoding="base64">RnJvbSAzNDI1MTdiMTMyMTMwMjZhODE4ZWJkOGYyZDMzNzQ1OTVkMjk0MTdhIE1vbiBTZXAgMTcg
MDA6MDA6MDAgMjAwMQpGcm9tOiBObydhbSBSb3NlbnRoYWwgPG5vYW0ucm9zZW50aGFsQG5va2lh
LmNvbT4KRGF0ZTogU3VuLCAyNCBKYW4gMjAxMCAxOTo1MTozNyAtMDgwMApTdWJqZWN0OiBbUEFU
Q0hdIEdyYXBoaWNzTGF5ZXJRdCBwZXJmb3JtYW5jZSB0dW5pbmcKCi0tLQogV2ViQ29yZS9DaGFu
Z2VMb2cgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHwgICAxNyArKwogV2ViQ29yZS9w
bGF0Zm9ybS9ncmFwaGljcy9xdC9HcmFwaGljc0xheWVyUXQuY3BwIHwgIDIzNyArKysrKysrKysr
KysrLS0tLS0tLS0tCiBXZWJLaXQvcXQvQXBpL3FncmFwaGljc3dlYnZpZXcuY3BwICAgICAgICAg
ICAgICAgfCAgIDExICstCiBXZWJLaXQvcXQvQ2hhbmdlTG9nICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgfCAgIDEyICsKIDQgZmlsZXMgY2hhbmdlZCwgMTc3IGluc2VydGlvbnMoKyksIDEw
MCBkZWxldGlvbnMoLSkKCmRpZmYgLS1naXQgYS9XZWJDb3JlL0NoYW5nZUxvZyBiL1dlYkNvcmUv
Q2hhbmdlTG9nCmluZGV4IGI5ZTA1ZmQuLjI3N2YwMTggMTAwNjQ0Ci0tLSBhL1dlYkNvcmUvQ2hh
bmdlTG9nCisrKyBiL1dlYkNvcmUvQ2hhbmdlTG9nCkBAIC0xLDMgKzEsMjAgQEAKKzIwMTAtMDEt
MjQgIE5vJ2FtIFJvc2VudGhhbCAgPG5vYW0ucm9zZW50aGFsQG5va2lhLmNvbT4KKworICAgICAg
ICBSZXZpZXdlZCBieSBOT0JPRFkgKE9PUFMhKS4KKworICAgICAgICBbUXRdIFR1bmluZyBhbmQg
b3B0aW1pemF0aW9ucyB0byBHcmFwaGljc0xheWVyUXQuIFJlZHVjZSB1bm5lY2Vzc2FyeQorICAg
ICAgICByZWNhY2hpbmcsIHJlbW92ZSBRVGltZXI6OnNpbmdsZVNob3QgYW5kIFFQaXhtYXA6OnNj
YWxlZCwgbW9yZQorICAgICAgICBhY2N1cmF0ZSBzdHJhdGVneSBvZiBoYW5kbGluZyB0cmFuc2Zv
cm0gb3BlcmF0aW9uIGJsZW5kcworCisgICAgICAgIGh0dHBzOi8vYnVncy53ZWJraXQub3JnL3No
b3dfYnVnLmNnaT9pZD0zNDA2MgorCisgICAgICAgIE5vIG5ldyB0ZXN0cy4gKE9PUFMhKQorCisg
ICAgICAgICogcGxhdGZvcm0vZ3JhcGhpY3MvcXQvR3JhcGhpY3NMYXllclF0LmNwcDoKKyAgICAg
ICAgKFdlYkNvcmU6OkdyYXBoaWNzTGF5ZXJRdEltcGw6OmZsdXNoQ2hhbmdlcyk6IEZpbmUtdHVu
ZSBjYWNoaW5nCisgICAgICAgIChXZWJDb3JlOjpUcmFuc2Zvcm1BbmltYXRpb25RdDo6VHJhbnNm
b3JtQW5pbWF0aW9uUXQpOiB0cmFuc2Zvcm0gYnVncworICAgICAgICAoV2ViQ29yZTo6T3BhY2l0
eUFuaW1hdGlvblF0Ojp1cGRhdGVTdGF0ZSk6IHN0eWxlIGNoYW5nZQorCiAyMDEwLTAxLTI0ICBP
bGl2ZXIgSHVudCAgPG9saXZlckBhcHBsZS5jb20+CiAKICAgICAgICAgUmV2aWV3ZWQgYnkgRGFy
aW4gQWRsZXIuCmRpZmYgLS1naXQgYS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL3F0L0dyYXBo
aWNzTGF5ZXJRdC5jcHAgYi9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL3F0L0dyYXBoaWNzTGF5
ZXJRdC5jcHAKaW5kZXggNTcxMmVlZS4uYmYzYWFkZSAxMDA2NDQKLS0tIGEvV2ViQ29yZS9wbGF0
Zm9ybS9ncmFwaGljcy9xdC9HcmFwaGljc0xheWVyUXQuY3BwCisrKyBiL1dlYkNvcmUvcGxhdGZv
cm0vZ3JhcGhpY3MvcXQvR3JhcGhpY3NMYXllclF0LmNwcApAQCAtOTksMTQgKzk5LDI2IEBAIHB1
YmxpYzoKICAgICAvLyBvciBDaHJvbWVDbGllbnRRdDo6c2NoZWR1bGVDb21wb3NpdGluZ0xheWVy
U3luYyAobWVhbmluZyB0aGUgc3luYyB3aWxsIGhhcHBlbiBBU0FQKQogICAgIHZvaWQgZmx1c2hD
aGFuZ2VzKGJvb2wgcmVjdXJzaXZlID0gdHJ1ZSk7CiAKKyAgICAvLyBvcHRpbWl6YXRpb246IHdo
ZW4gd2UgaGF2ZSBhbiBhbmltYXRpb24gcnVubmluZyBvbiBhbiBlbGVtZW50IHdpdGggbm8gY29u
dGVudHMsIHRoYXQgaGFzIGNoaWxkLWVsZW1lbnRzIHdpdGggY29udGVudHMsCisgICAgLy8gQUxM
IG9mIHRoZW0gaGF2ZSB0byBoYXZlIEl0ZW1Db29yZGluYXRlQ2FjaGUgYW5kIG5vdCBEZXZpY2VD
b29yZGluYXRlQ2FjaGUKKyAgICB2b2lkIGFkanVzdENhY2hpbmdSZWN1cnNpdmVseShib29sIGFu
aW1hdGlvbklzUnVubmluZyk7CisKKyAgICAvLyBvcHRpbWl6YXRpb246IHJldHVybnMgdHJ1ZSBp
ZiB0aGlzIG9yIGFuIGFuY2VzdG9yIGhhcyBhIHRyYW5zZm9ybSBhbmltYXRpb24gcnVubmluZy4K
KyAgICAvLyB0aGlzIGVuYWJsZXMgdXMgdG8gdXNlIEl0ZW1Db29yZGluYXRlc0NhY2hlIHdoaWxl
IHRoZSBhbmltYXRpb24gaXMgcnVubmluZywgb3RoZXJ3aXNlIHdlIGhhdmUgdG8gcmVjYWNoZSBm
b3IgZXZlcnkgZnJhbWUKKyAgICBib29sIGlzVHJhbnNmb3JtQW5pbWF0aW9uUnVubmluZygpIGNv
bnN0OworCiBwdWJsaWMgc2xvdHM6CiAgICAgLy8gd2UgbmVlZCB0byBub3RpZnkgdGhlIGNsaWVu
dCAoYWthIHRoZSBsYXllciBjb21wb3NpdG9yKSB3aGVuIHRoZSBhbmltYXRpb24gYWN0dWFsbHkg
c3RhcnRzCiAgICAgdm9pZCBub3RpZnlBbmltYXRpb25TdGFydGVkKCk7CiAKK3NpZ25hbHM6Cisg
ICAgLy8gb3B0aW1pemF0aW9uOiB3ZSBkb24ndCB3YW50IHRvIHVzZSBRVGltZXI6OnNpbmdsZVNo
b3QKKyAgICB2b2lkIG5vdGlmeUFuaW1hdGlvblN0YXJ0ZWRBc3luYygpOworCiBwdWJsaWM6CiAg
ICAgR3JhcGhpY3NMYXllclF0KiBtX2xheWVyOwogCi0gICAgUVRyYW5zZm9ybSBtX2Jhc2VUcmFu
c2ZvbTsKKyAgICBRVHJhbnNmb3JtIG1fYmFzZVRyYW5zZm9ybTsKICAgICBib29sIG1fdHJhbnNm
b3JtQW5pbWF0aW9uUnVubmluZzsKICAgICBib29sIG1fb3BhY2l0eUFuaW1hdGlvblJ1bm5pbmc7
CiAKQEAgLTE1NywxMiArMTY5LDE0IEBAIHB1YmxpYzoKICAgICAgICAgYm9vbCBiYWNrZmFjZVZp
c2liaWxpdHk6IDE7CiAgICAgICAgIGJvb2wgZGlzdHJpYnV0ZU9wYWNpdHk6IDE7CiAgICAgICAg
IGJvb2wgYWxpZ246IDI7Ci0gICAgICAgIFN0YXRlKCk6IG1hc2tMYXllcigwKSwgb3BhY2l0eSgx
KSwgcHJlc2VydmVzM0QoZmFsc2UpLCBtYXNrc1RvQm91bmRzKGZhbHNlKSwKKyAgICAgICAgU3Rh
dGUoKTogbWFza0xheWVyKDApLCBvcGFjaXR5KDEuZiksIHByZXNlcnZlczNEKGZhbHNlKSwgbWFz
a3NUb0JvdW5kcyhmYWxzZSksCiAgICAgICAgICAgICAgICAgICBkcmF3c0NvbnRlbnQoZmFsc2Up
LCBjb250ZW50c09wYXF1ZShmYWxzZSksIGJhY2tmYWNlVmlzaWJpbGl0eShmYWxzZSksCiAgICAg
ICAgICAgICAgICAgICBkaXN0cmlidXRlT3BhY2l0eShmYWxzZSkKICAgICAgICAgewogICAgICAg
ICB9CiAgICAgfSBtX3N0YXRlOworCisgICAgZnJpZW5kIGNsYXNzIEFuaW1hdGlvblF0QmFzZTsK
IH07CiAKIEdyYXBoaWNzTGF5ZXJRdEltcGw6OkdyYXBoaWNzTGF5ZXJRdEltcGwoR3JhcGhpY3NM
YXllclF0KiBuZXdMYXllcikKQEAgLTE3MSwxNiArMTg1LDE0IEBAIEdyYXBoaWNzTGF5ZXJRdElt
cGw6OkdyYXBoaWNzTGF5ZXJRdEltcGwoR3JhcGhpY3NMYXllclF0KiBuZXdMYXllcikKICAgICAs
IG1fdHJhbnNmb3JtQW5pbWF0aW9uUnVubmluZyhmYWxzZSkKICAgICAsIG1fY2hhbmdlTWFzayhO
b0NoYW5nZXMpCiB7Ci0gICAgLy8gYmV0dGVyIHRvIGNhbGN1bGF0ZSB0aGUgZXhwb3NlZCByZWN0
IGluIFFHcmFwaGljc1ZpZXcgdGhhbiBvdmVyLXJlbmRlciBpbiBXZWJDb3JlCi0gICAgLy8gRklY
TUU6IHRlc3QgZGlmZmVyZW50IGFwcHJvYWNoZXMKLSAgICBzZXRGbGFnKFFHcmFwaGljc0l0ZW06
Okl0ZW1Vc2VzRXh0ZW5kZWRTdHlsZU9wdGlvbiwgdHJ1ZSk7Ci0KICAgICAvLyB3ZSB1c2UgZ3Jh
cGhpY3MtdmlldyBmb3IgY29tcG9zaXRpbmcsIG5vdCBmb3IgaW50ZXJhY3Rpdml0eQogICAgIHNl
dEFjY2VwdGVkTW91c2VCdXR0b25zKFF0OjpOb0J1dHRvbik7CiAgICAgc2V0RW5hYmxlZChmYWxz
ZSk7CiAKICAgICAvLyB3ZSdsbCBzZXQgdGhlIGNhY2hlIHdoZW4gd2Uga25vdyB3aGF0J3MgZ29p
bmcgb24KICAgICBzZXRDYWNoZU1vZGUoTm9DYWNoZSk7CisKKyAgICBjb25uZWN0KHRoaXMsIFNJ
R05BTChub3RpZnlBbmltYXRpb25TdGFydGVkQXN5bmMoKSksIHRoaXMsIFNMT1Qobm90aWZ5QW5p
bWF0aW9uU3RhcnRlZCgpKSwgUXQ6OlF1ZXVlZENvbm5lY3Rpb24pOwogfQogCiBHcmFwaGljc0xh
eWVyUXRJbXBsOjp+R3JhcGhpY3NMYXllclF0SW1wbCgpCkBAIC0yMDMsMjIgKzIxNSw0MiBAQCBH
cmFwaGljc0xheWVyUXRJbXBsOjp+R3JhcGhpY3NMYXllclF0SW1wbCgpCiAgICAgICAgICAgICBk
ZWxldGUgYW5pbTsKIH0KIAordm9pZCBHcmFwaGljc0xheWVyUXRJbXBsOjphZGp1c3RDYWNoaW5n
UmVjdXJzaXZlbHkoYm9vbCBhbmltYXRpb25Jc1J1bm5pbmcpCit7CisgICAgLy8gb3B0aW1pemF0
aW9uOiB3ZSBtYWtlIHN1cmUgYWxsIG91ciBjaGlsZHJlbiBoYXZlIEl0ZW1Db29yZGluYXRlQ2Fj
aGUgLQorICAgIC8vIG90aGVyd2lzZSB3ZSBlbmQgdXAgcmUtcmVuZGVyaW5nIHRoZW0gZHVyaW5n
IHRoZSBhbmltYXRpb24KKyAgICBjb25zdCBRTGlzdDxRR3JhcGhpY3NJdGVtKj4gY2hpbGRyZW4g
PSBjaGlsZEl0ZW1zKCk7CisKKyAgICBmb3IgKFFMaXN0PFFHcmFwaGljc0l0ZW0qPjo6Y29uc3Rf
aXRlcmF0b3IgaXQgPSBjaGlsZHJlbi5iZWdpbigpOyBpdCAhPSBjaGlsZHJlbi5lbmQoKTsgKytp
dCkgeworICAgICAgICBpZiAoUUdyYXBoaWNzSXRlbSogaXRlbSA9ICppdCkKKyAgICAgICAgICAg
IGlmIChHcmFwaGljc0xheWVyUXRJbXBsKiBsYXllciA9IHFvYmplY3RfY2FzdDxHcmFwaGljc0xh
eWVyUXRJbXBsKj4oaXRlbS0+dG9HcmFwaGljc09iamVjdCgpKSkgeworICAgICAgICAgICAgICAg
IGlmIChsYXllci0+bV9sYXllci0+ZHJhd3NDb250ZW50KCkgJiYgbGF5ZXItPm1fY3VycmVudENv
bnRlbnQuY29udGVudFR5cGUgPT0gSFRNTENvbnRlbnRUeXBlKQorICAgICAgICAgICAgICAgICAg
ICBsYXllci0+c2V0Q2FjaGVNb2RlKGFuaW1hdGlvbklzUnVubmluZyA/IFFHcmFwaGljc0l0ZW06
Okl0ZW1Db29yZGluYXRlQ2FjaGUgOiBRR3JhcGhpY3NJdGVtOjpEZXZpY2VDb29yZGluYXRlQ2Fj
aGUpOworICAgICAgICAgICAgfQorICAgIH0gICAgCit9CisKIHZvaWQgR3JhcGhpY3NMYXllclF0
SW1wbDo6c2V0QmFzZVRyYW5zZm9ybShjb25zdCBRVHJhbnNmb3JtJiB0cmFuc2Zvcm0pCiB7CiAg
ICAgaWYgKCFtX2xheWVyKQogICAgICAgICByZXR1cm47Ci0gICAgLy8gd2Via2l0IGhhcyByZWxh
dGl2ZS10by1zaXplIG9yaWdpblBvaW50LCBncmFwaGljcy12aWV3IGhhcyBhIHBpeGVsIG9yaWdp
blBvaW50Ci0gICAgLy8gaGVyZSB3ZSBjb252ZXJ0Ci0gICAgUVBvaW50RiBvcmlnaW5UcmFuc2xh
dGUoCi0gICAgICAgICAgICBtX2xheWVyLT5hbmNob3JQb2ludCgpLngoKSAqIG1fbGF5ZXItPnNp
emUoKS53aWR0aCgpLCBtX2xheWVyLT5hbmNob3JQb2ludCgpLnkoKSAqIG1fbGF5ZXItPnNpemUo
KS5oZWlnaHQoKSk7Ci0KLSAgICByZXNldFRyYW5zZm9ybSgpOwotCi0gICAgLy8gd2UgaGF2ZSB0
byBtYW5hZ2UgdGhpcyBvdXJzZWx2ZXMgYmVjYXVzZSBRR3JhcGhpY3NWaWV3J3MgdHJhbnNmb3Jt
T3JpZ2luIGlzIGluY29tcGxldGUKLSAgICB0cmFuc2xhdGUob3JpZ2luVHJhbnNsYXRlLngoKSwg
b3JpZ2luVHJhbnNsYXRlLnkoKSk7CisgICAgLy8gd2Via2l0IGhhcyByZWxhdGl2ZS10by1zaXpl
IG9yaWdpblBvaW50LCBncmFwaGljcy12aWV3IGhhcyBhIHBpeGVsIG9yaWdpblBvaW50LCBoZXJl
IHdlIGNvbnZlcnQKKyAgICAvLyB3ZSBoYXZlIHRvIG1hbmFnZSB0aGlzIG91cnNlbHZlcyBiZWNh
dXNlIFFHcmFwaGljc1ZpZXcncyB0cmFuc2Zvcm1PcmlnaW4gaXMgaW5jb21wYXRpYmxlCisgICAg
Y29uc3QgcXJlYWwgeCA9IG1fbGF5ZXItPmFuY2hvclBvaW50KCkueCgpICogbV9sYXllci0+c2l6
ZSgpLndpZHRoKCk7CisgICAgY29uc3QgcXJlYWwgeSA9IG1fbGF5ZXItPmFuY2hvclBvaW50KCku
eSgpICogbV9sYXllci0+c2l6ZSgpLmhlaWdodCgpOworICAgIHNldFRyYW5zZm9ybShRVHJhbnNm
b3JtOjpmcm9tVHJhbnNsYXRlKHgsIHkpKTsKICAgICBzZXRUcmFuc2Zvcm0odHJhbnNmb3JtLCB0
cnVlKTsKLSAgICB0cmFuc2xhdGUoLW9yaWdpblRyYW5zbGF0ZS54KCksIC1vcmlnaW5UcmFuc2xh
dGUueSgpKTsKLSAgICBtX2Jhc2VUcmFuc2ZvbSA9IHRyYW5zZm9ybTsKKyAgICB0cmFuc2xhdGUo
LXgsIC15KTsKKyAgICBtX2Jhc2VUcmFuc2Zvcm0gPSB0cmFuc2Zvcm07Cit9CisKK2Jvb2wgR3Jh
cGhpY3NMYXllclF0SW1wbDo6aXNUcmFuc2Zvcm1BbmltYXRpb25SdW5uaW5nKCkgY29uc3QKK3sK
KyAgICBpZiAobV90cmFuc2Zvcm1BbmltYXRpb25SdW5uaW5nKQorICAgICAgICByZXR1cm4gdHJ1
ZTsKKyAgICBpZiAoR3JhcGhpY3NMYXllclF0SW1wbCogcGFyZW50ID0gcW9iamVjdF9jYXN0PEdy
YXBoaWNzTGF5ZXJRdEltcGwqPihwYXJlbnRPYmplY3QoKSkpCisgICAgICAgIHJldHVybiBwYXJl
bnQtPmlzVHJhbnNmb3JtQW5pbWF0aW9uUnVubmluZygpOworICAgIHJldHVybiBmYWxzZTsKIH0K
IAogUVBhaW50ZXJQYXRoIEdyYXBoaWNzTGF5ZXJRdEltcGw6Om9wYXF1ZUFyZWEoKSBjb25zdApA
QCAtMjcwLDQyICszMDIsMzEgQEAgdm9pZCBHcmFwaGljc0xheWVyUXRJbXBsOjpwYWludChRUGFp
bnRlciogcGFpbnRlciwgY29uc3QgUVN0eWxlT3B0aW9uR3JhcGhpY3NJdGUKICAgICBkcmF3Q29u
dGVudHMocGFpbnRlciwgb3B0aW9uLT5leHBvc2VkUmVjdCk7CiB9CiAKLXZvaWQgR3JhcGhpY3NM
YXllclF0SW1wbDo6ZHJhd0NvbnRlbnRzKFFQYWludGVyKiBwYWludGVyLCBjb25zdCBRUmVjdEYm
IHIsIGJvb2wgbWFzaykKK3ZvaWQgR3JhcGhpY3NMYXllclF0SW1wbDo6ZHJhd0NvbnRlbnRzKFFQ
YWludGVyKiBwYWludGVyLCBjb25zdCBRUmVjdEYmIGV4cG9zZWRSZWN0LCBib29sIG1hc2spCiB7
Ci0gICAgUVJlY3QgcmVjdCA9IHIudG9BbGlnbmVkUmVjdCgpOwotICAgIAotICAgIGlmIChtX2N1
cnJlbnRDb250ZW50LmNvbnRlbnRUeXBlICE9IEhUTUxDb250ZW50VHlwZSAmJiAhbV9zdGF0ZS5j
b250ZW50c1JlY3QuaXNFbXB0eSgpKQotICAgICAgICByZWN0ID0gcmVjdC5pbnRlcnNlY3RlZCht
X3N0YXRlLmNvbnRlbnRzUmVjdCk7Ci0KICAgICBpZiAobV9jdXJyZW50Q29udGVudC5iYWNrZ3Jv
dW5kQ29sb3IuaXNWYWxpZCgpKQotICAgICAgICBwYWludGVyLT5maWxsUmVjdChyLCBRQ29sb3Io
bV9jdXJyZW50Q29udGVudC5iYWNrZ3JvdW5kQ29sb3IpKTsKKyAgICAgICAgcGFpbnRlci0+Zmls
bFJlY3QoZXhwb3NlZFJlY3QsIFFDb2xvcihtX2N1cnJlbnRDb250ZW50LmJhY2tncm91bmRDb2xv
cikpOwogCi0gICAgaWYgKCFyZWN0LmlzRW1wdHkoKSkgewotICAgICAgICBzd2l0Y2ggKG1fY3Vy
cmVudENvbnRlbnQuY29udGVudFR5cGUpIHsKLSAgICAgICAgY2FzZSBQaXhtYXBDb250ZW50VHlw
ZToKLSAgICAgICAgICAgIC8vIHdlIGhhdmUgdG8gc2NhbGUgdGhlIGltYWdlIHRvIHRoZSBjb250
ZW50c1JlY3QKLSAgICAgICAgICAgIC8vIEZJWE1FOiBhIGJldHRlciB3YXkgd291bGQgcHJvYmFi
bHkgYmUgZHJhd1BpeG1hcCB3aXRoIGEgc3JjL3RhcmdldCByZWN0Ci0gICAgICAgICAgICBwYWlu
dGVyLT5kcmF3UGl4bWFwKHJlY3QudG9wTGVmdCgpLCBtX2N1cnJlbnRDb250ZW50LnBpeG1hcC5z
Y2FsZWQobV9zdGF0ZS5jb250ZW50c1JlY3Quc2l6ZSgpKSwgcik7Ci0gICAgICAgICAgICBicmVh
azsKLSAgICAgICAgY2FzZSBDb2xvckNvbnRlbnRUeXBlOgotICAgICAgICAgICAgcGFpbnRlci0+
ZmlsbFJlY3QocmVjdCwgbV9jdXJyZW50Q29udGVudC5jb250ZW50c0JhY2tncm91bmRDb2xvcik7
Ci0gICAgICAgICAgICBicmVhazsKLSAgICAgICAgZGVmYXVsdDoKLSAgICAgICAgICAgIGlmICht
X3N0YXRlLmRyYXdzQ29udGVudCkgewotICAgICAgICAgICAgICAgIC8vIHRoaXMgaXMgdGhlICJl
eHBlbnNpdmUiIGJpdC4gd2UgdHJ5IHRvIG1pbmltaXplIGNhbGxzIHRvIHRoaXMKLSAgICAgICAg
ICAgICAgICAvLyBuZWNrIG9mIHRoZSB3b29kcyBieSBwcm9wZXIgY2FjaGluZwotICAgICAgICAg
ICAgICAgIEdyYXBoaWNzQ29udGV4dCBnYyhwYWludGVyKTsKLSAgICAgICAgICAgICAgICBtX2xh
eWVyLT5wYWludEdyYXBoaWNzTGF5ZXJDb250ZW50cyhnYywgcmVjdCk7Ci0gICAgICAgICAgICB9
Ci0gICAgICAgICAgICBicmVhazsKKyAgICBzd2l0Y2ggKG1fY3VycmVudENvbnRlbnQuY29udGVu
dFR5cGUpIHsKKyAgICBjYXNlIFBpeG1hcENvbnRlbnRUeXBlOgorICAgICAgICBwYWludGVyLT5k
cmF3UGl4bWFwKG1fc3RhdGUuY29udGVudHNSZWN0LCBtX2N1cnJlbnRDb250ZW50LnBpeG1hcCk7
CisgICAgICAgIGJyZWFrOworICAgIGNhc2UgQ29sb3JDb250ZW50VHlwZToKKyAgICAgICAgcGFp
bnRlci0+ZmlsbFJlY3QobV9zdGF0ZS5jb250ZW50c1JlY3QsIG1fY3VycmVudENvbnRlbnQuY29u
dGVudHNCYWNrZ3JvdW5kQ29sb3IpOworICAgICAgICBicmVhazsKKyAgICBkZWZhdWx0OgorICAg
ICAgICBpZiAobV9zdGF0ZS5kcmF3c0NvbnRlbnQpIHsKKyAgICAgICAgICAgIC8vIHRoaXMgaXMg
dGhlICJleHBlbnNpdmUiIGJpdC4gd2UgdHJ5IHRvIG1pbmltaXplIGNhbGxzIHRvIHRoaXMgbmVj
ayBvZiB0aGUgd29vZHMgYnkgcHJvcGVyIGNhY2hpbmcKKyAgICAgICAgICAgIEdyYXBoaWNzQ29u
dGV4dCBnYyhwYWludGVyKTsKKyAgICAgICAgICAgIG1fbGF5ZXItPnBhaW50R3JhcGhpY3NMYXll
ckNvbnRlbnRzKGdjLCBleHBvc2VkUmVjdC50b0FsaWduZWRSZWN0KCkpOwogICAgICAgICB9Cisg
ICAgICAgIGJyZWFrOwogICAgIH0KIH0KIAogdm9pZCBHcmFwaGljc0xheWVyUXRJbXBsOjpub3Rp
ZnlDaGFuZ2UoQ2hhbmdlTWFzayBjaGFuZ2VNYXNrKQogewotICAgIGlmICghdGhpcykKLSAgICAg
ICAgcmV0dXJuOworICAgIFFfQVNTRVJUKHRoaXMpOwogCiAgICAgbV9jaGFuZ2VNYXNrIHw9IGNo
YW5nZU1hc2s7CiAKQEAgLTM0MiwxNCArMzYzLDE0IEBAIHZvaWQgR3JhcGhpY3NMYXllclF0SW1w
bDo6Zmx1c2hDaGFuZ2VzKGJvb2wgcmVjdXJzaXZlKQogICAgICAgICBjb25zdCBRU2V0PFFHcmFw
aGljc0l0ZW0qPiBjdXJyZW50Q2hpbGRyZW4gPSBjaGlsZEl0ZW1zKCkudG9TZXQoKTsKICAgICAg
ICAgY29uc3QgUVNldDxRR3JhcGhpY3NJdGVtKj4gY2hpbGRyZW5Ub0FkZCA9IG5ld0NoaWxkcmVu
IC0gY3VycmVudENoaWxkcmVuOwogICAgICAgICBjb25zdCBRU2V0PFFHcmFwaGljc0l0ZW0qPiBj
aGlsZHJlblRvUmVtb3ZlID0gY3VycmVudENoaWxkcmVuIC0gbmV3Q2hpbGRyZW47Ci0gICAgICAg
IGZvciAoUVNldDxRR3JhcGhpY3NJdGVtKj46OmNvbnN0X2l0ZXJhdG9yIGl0ID0gY2hpbGRyZW5U
b0FkZC5iZWdpbigpOyBpdCAhPSBjaGlsZHJlblRvQWRkLmVuZCgpOyArK2l0KSB7CisKKyAgICAg
ICAgZm9yIChRU2V0PFFHcmFwaGljc0l0ZW0qPjo6Y29uc3RfaXRlcmF0b3IgaXQgPSBjaGlsZHJl
blRvQWRkLmJlZ2luKCk7IGl0ICE9IGNoaWxkcmVuVG9BZGQuZW5kKCk7ICsraXQpCiAgICAgICAg
ICAgICAgaWYgKFFHcmFwaGljc0l0ZW0qIHcgPSAqaXQpCiAgICAgICAgICAgICAgICAgdy0+c2V0
UGFyZW50SXRlbSh0aGlzKTsKLSAgICAgICAgfQotICAgICAgICBmb3IgKFFTZXQ8UUdyYXBoaWNz
SXRlbSo+Ojpjb25zdF9pdGVyYXRvciBpdCA9IGNoaWxkcmVuVG9SZW1vdmUuYmVnaW4oKTsgaXQg
IT0gY2hpbGRyZW5Ub1JlbW92ZS5lbmQoKTsgKytpdCkgeworCisgICAgICAgIGZvciAoUVNldDxR
R3JhcGhpY3NJdGVtKj46OmNvbnN0X2l0ZXJhdG9yIGl0ID0gY2hpbGRyZW5Ub1JlbW92ZS5iZWdp
bigpOyBpdCAhPSBjaGlsZHJlblRvUmVtb3ZlLmVuZCgpOyArK2l0KQogICAgICAgICAgICAgIGlm
IChRR3JhcGhpY3NJdGVtKiB3ID0gKml0KQogICAgICAgICAgICAgICAgIHctPnNldFBhcmVudEl0
ZW0oMCk7Ci0gICAgICAgIH0KIAogICAgICAgICAvLyBjaGlsZHJlbiBhcmUgb3JkZXJlZCBieSB6
LXZhbHVlLCBsZXQgZ3JhcGhpY3MtdmlldyBrbm93LgogICAgICAgICBmb3IgKHNpemVfdCBpID0g
MDsgaSA8IG5ld0NoaWxkcmVuVmVjdG9yLnNpemUoKTsgKytpKQpAQCAtMzgzLDE3ICs0MDQsMTcg
QEAgdm9pZCBHcmFwaGljc0xheWVyUXRJbXBsOjpmbHVzaENoYW5nZXMoYm9vbCByZWN1cnNpdmUp
CiAgICAgICAgIC8vIHRoZSBhbmNob3ItcG9pbnQsIHRyYW5zZm9ybSBhbmQgc2l6ZSBmcm9tIFdl
YkNvcmUgYWxsIGFmZmVjdCB0aGUgb25lCiAgICAgICAgIC8vIHRoYXQgd2UgZ2l2ZSBRdAogICAg
ICAgICBpZiAobV9zdGF0ZS50cmFuc2Zvcm0gIT0gbV9sYXllci0+dHJhbnNmb3JtKCkgfHwgbV9z
dGF0ZS5hbmNob3JQb2ludCAhPSBtX2xheWVyLT5hbmNob3JQb2ludCgpIHx8IG1fc3RhdGUuc2l6
ZSAhPSBtX2xheWVyLT5zaXplKCkpCi0gICAgICAgICAgICBzZXRCYXNlVHJhbnNmb3JtKFFUcmFu
c2Zvcm0obV9sYXllci0+dHJhbnNmb3JtKCkpKTsKKyAgICAgICAgICAgIHNldEJhc2VUcmFuc2Zv
cm0obV9sYXllci0+dHJhbnNmb3JtKCkpOwogICAgIH0KIAogICAgIGlmIChtX2NoYW5nZU1hc2sg
JiAoQ29udGVudENoYW5nZSB8IERyYXdzQ29udGVudENoYW5nZSkpIHsKICAgICAgICAgc3dpdGNo
IChtX3BlbmRpbmdDb250ZW50LmNvbnRlbnRUeXBlKSB7CiAgICAgICAgIGNhc2UgUGl4bWFwQ29u
dGVudFR5cGU6Ci0gICAgICAgICAgICAvLyB3ZSBuZWVkIGNhY2hlIGV2ZW4gZm9yIGltYWdlcywg
YmVjYXVzZSB0aGV5IG5lZWQgdG8gYmUgcmVzaXplZAotICAgICAgICAgICAgLy8gdG8gdGhlIGNv
bnRlbnRzIHJlY3QuIG1heWJlIHRoaXMgY2FuIGJlIG9wdGltaXplZCB0aG91Z2gKLSAgICAgICAg
ICAgIHNldENhY2hlTW9kZShtX3RyYW5zZm9ybUFuaW1hdGlvblJ1bm5pbmcgPyBJdGVtQ29vcmRp
bmF0ZUNhY2hlIDogRGV2aWNlQ29vcmRpbmF0ZUNhY2hlKTsKICAgICAgICAgICAgIHVwZGF0ZSgp
OwogICAgICAgICAgICAgc2V0RmxhZyhJdGVtSGFzTm9Db250ZW50cywgZmFsc2UpOworCisgICAg
ICAgICAgICAvLyB3ZSBvbmx5IHVzZSBJdGVtVXNlc0V4dGVuZGVkU3R5bGVPcHRpb24gZm9yIEhU
TUwgY29udGVudCAtIHBpeG1hcCBjYW4gYmUgaGFuZGxlZCBiZXR0ZXIgd2l0aCByZWd1bGFyIGNs
aXBwaW5nCisgICAgICAgICAgICBzZXRGbGFnKFFHcmFwaGljc0l0ZW06Okl0ZW1Vc2VzRXh0ZW5k
ZWRTdHlsZU9wdGlvbiwgZmFsc2UpOwogICAgICAgICAgICAgYnJlYWs7CiAKICAgICAgICAgY2Fz
ZSBDb2xvckNvbnRlbnRUeXBlOgpAQCAtNDAzLDYgKzQyNCw5IEBAIHZvaWQgR3JhcGhpY3NMYXll
clF0SW1wbDo6Zmx1c2hDaGFuZ2VzKGJvb2wgcmVjdXJzaXZlKQogICAgICAgICAgICAgICAgIHVw
ZGF0ZSgpOwogICAgICAgICAgICAgbV9zdGF0ZS5kcmF3c0NvbnRlbnQgPSBmYWxzZTsKICAgICAg
ICAgICAgIHNldEZsYWcoSXRlbUhhc05vQ29udGVudHMsIGZhbHNlKTsKKworICAgICAgICAgICAg
Ly8gd2Ugb25seSB1c2UgSXRlbVVzZXNFeHRlbmRlZFN0eWxlT3B0aW9uIGZvciBIVE1MIGNvbnRl
bnQgLSBjb2xvcnMgZG9uJ3QgZ2FpbiBtdWNoIGZyb20gdGhhdCBhbnl3YXkKKyAgICAgICAgICAg
IHNldEZsYWcoUUdyYXBoaWNzSXRlbTo6SXRlbVVzZXNFeHRlbmRlZFN0eWxlT3B0aW9uLCBmYWxz
ZSk7CiAgICAgICAgICAgICBicmVhazsKIAogICAgICAgICBjYXNlIEhUTUxDb250ZW50VHlwZToK
QEAgLTQxMCw4ICs0MzQsMTYgQEAgdm9pZCBHcmFwaGljc0xheWVyUXRJbXBsOjpmbHVzaENoYW5n
ZXMoYm9vbCByZWN1cnNpdmUpCiAgICAgICAgICAgICAgICAgdXBkYXRlKCk7CiAgICAgICAgICAg
ICBpZiAoIW1fc3RhdGUuZHJhd3NDb250ZW50ICYmIG1fbGF5ZXItPmRyYXdzQ29udGVudCgpKQog
ICAgICAgICAgICAgICAgIHVwZGF0ZSgpOwotICAgICAgICAgICAgaWYgKG1fbGF5ZXItPmRyYXdz
Q29udGVudCgpKQotICAgICAgICAgICAgICAgIHNldENhY2hlTW9kZShtX3RyYW5zZm9ybUFuaW1h
dGlvblJ1bm5pbmcgPyBJdGVtQ29vcmRpbmF0ZUNhY2hlIDogRGV2aWNlQ29vcmRpbmF0ZUNhY2hl
KTsKKyAgICAgICAgICAgICAgICBpZiAobV9sYXllci0+ZHJhd3NDb250ZW50KCkpIHsKKyAgICAg
ICAgICAgICAgICAgICAgY29uc3QgUUdyYXBoaWNzSXRlbTo6Q2FjaGVNb2RlIG1ld0NhY2hlTW9k
ZSA9IGlzVHJhbnNmb3JtQW5pbWF0aW9uUnVubmluZygpID8gSXRlbUNvb3JkaW5hdGVDYWNoZSA6
IERldmljZUNvb3JkaW5hdGVDYWNoZTsKKworICAgICAgICAgICAgICAgICAgICAvLyBvcHRpbWl6
YXRpb246IFFHcmFwaGljc0l0ZW0gZG9lc24ndCBhbHdheXMgcGVyZm9ybSB0aGlzIHRlc3QKKyAg
ICAgICAgICAgICAgICAgICAgaWYgKG1ld0NhY2hlTW9kZSAhPSBjYWNoZU1vZGUoKSkKKyAgICAg
ICAgICAgICAgICAgICAgICAgIHNldENhY2hlTW9kZShtZXdDYWNoZU1vZGUpOworCisgICAgICAg
ICAgICAgICAgICAgIC8vIEhUTUwgY29udGVudDogd2Ugd2FudCB0byB1c2UgZXhwb3NlZFJlY3Qg
c28gd2UgZG9uJ3QgdXNlIFdlYkNvcmUgcmVuZGVyaW5nIGlmIHdlIGRvbid0IGhhdmUgdG8KKyAg
ICAgICAgICAgICAgICAgICAgc2V0RmxhZyhRR3JhcGhpY3NJdGVtOjpJdGVtVXNlc0V4dGVuZGVk
U3R5bGVPcHRpb24sIHRydWUpOworICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgIGVsc2UK
ICAgICAgICAgICAgICAgICBzZXRDYWNoZU1vZGUoTm9DYWNoZSk7CiAKQEAgLTQ0OCw3ICs0ODAs
NyBAQCB2b2lkIEdyYXBoaWNzTGF5ZXJRdEltcGw6OmZsdXNoQ2hhbmdlcyhib29sIHJlY3Vyc2l2
ZSkKICAgICAgICAgdXBkYXRlKCk7CiAKICAgICAvLyBGSVhNRTogdGhlIGZvbGxvd2luZyBmbGFn
cyBhcmUgY3VycmVudGx5IG5vdCBoYW5kbGVkLCBhcyB0aGV5IGRvbid0IGhhdmUgYSBjbGVhciB0
ZXN0IG9yIGFyZSBpbiBsb3cgcHJpb3JpdHkKLSAgICAvLyBHZW9tZXRyeU9yaWVudGF0aW9uQ2hh
bmdlLCBDb250ZW50c09yaWVudGF0aW9uQ2hhbmdlLCBCYWNrZmFjZVZpc2liaWxpdHlDaGFuZ2Us
IENoaWxkcmVuVHJhbnNmb3JtQ2hhbmdlCisgICAgLy8gR2VvbWV0cnlPcmllbnRhdGlvbkNoYW5n
ZSwgQ29udGVudHNPcmllbnRhdGlvbkNoYW5nZSwgQmFja2ZhY2VWaXNpYmlsaXR5Q2hhbmdlLCBD
aGlsZHJlblRyYW5zZm9ybUNoYW5nZSwgUHJlc2VydmVzM0RDaGFuZ2UKIAogICAgIG1fc3RhdGUu
bWFza0xheWVyID0gbV9sYXllci0+bWFza0xheWVyKCk7CiAgICAgbV9zdGF0ZS5wb3MgPSBtX2xh
eWVyLT5wb3NpdGlvbigpOwpAQCAtNTIzLDkgKzU1NSw5IEBAIHZvaWQgR3JhcGhpY3NMYXllclF0
OjpzZXROZWVkc0Rpc3BsYXkoKQogfQogCiAvLyByZWltcCBmcm9tIEdyYXBoaWNzTGF5ZXIuaAot
dm9pZCBHcmFwaGljc0xheWVyUXQ6OnNldE5lZWRzRGlzcGxheUluUmVjdChjb25zdCBGbG9hdFJl
Y3QmIHIpCit2b2lkIEdyYXBoaWNzTGF5ZXJRdDo6c2V0TmVlZHNEaXNwbGF5SW5SZWN0KGNvbnN0
IEZsb2F0UmVjdCYgcmVjdCkKIHsKLSAgICBtX2ltcGwtPm1fcGVuZGluZ0NvbnRlbnQucmVnaW9u
VG9VcGRhdGV8PSBRUmVjdEYocikudG9BbGlnbmVkUmVjdCgpOworICAgIG1faW1wbC0+bV9wZW5k
aW5nQ29udGVudC5yZWdpb25Ub1VwZGF0ZXw9IFFSZWN0RihyZWN0KS50b0FsaWduZWRSZWN0KCk7
CiAgICAgbV9pbXBsLT5ub3RpZnlDaGFuZ2UoR3JhcGhpY3NMYXllclF0SW1wbDo6RGlzcGxheUNo
YW5nZSk7CiB9CiAKQEAgLTgwNywxNiArODM5LDE2IEBAIHN0YXRpYyBpbmxpbmUgZG91YmxlIHNv
bHZlQ3ViaWNCZXppZXJGdW5jdGlvbihxcmVhbCBwMXgsIHFyZWFsIHAxeSwgcXJlYWwgcDJ4LCBx
CiAvLyBVc2luZyBlYXNpbmctY3VydmVzIHdvdWxkIHByb2JhYmx5IHdvcmsgZm9yIHNvbWUgb2Yg
dGhlIGNhc2VzLCBidXQgd291bGRuJ3QgcmVhbGx5IGJ1eSB1cyBhbnl0aGluZyBhcyB3ZSdkIGhh
dmUgdG8gY29udmVydCB0aGUgYmV6aWVyIGZ1bmN0aW9uIGJhY2sgdG8gYW4gZWFzaW5nIGN1cnZl
CiBzdGF0aWMgaW5saW5lIHFyZWFsIGFwcGx5VGltaW5nRnVuY3Rpb24oY29uc3QgVGltaW5nRnVu
Y3Rpb24mIHRpbWluZ0Z1bmN0aW9uLCBxcmVhbCBwcm9ncmVzcywgaW50IGR1cmF0aW9uKQogewot
ICAgIGlmICh0aW1pbmdGdW5jdGlvbi50eXBlKCkgPT0gTGluZWFyVGltaW5nRnVuY3Rpb24pCisg
ICAgICAgIGlmICh0aW1pbmdGdW5jdGlvbi50eXBlKCkgPT0gTGluZWFyVGltaW5nRnVuY3Rpb24p
CisgICAgICAgICAgICByZXR1cm4gcHJvZ3Jlc3M7CisgICAgICAgIGlmICh0aW1pbmdGdW5jdGlv
bi50eXBlKCkgPT0gQ3ViaWNCZXppZXJUaW1pbmdGdW5jdGlvbikgeworICAgICAgICAgICAgcmV0
dXJuIHNvbHZlQ3ViaWNCZXppZXJGdW5jdGlvbih0aW1pbmdGdW5jdGlvbi54MSgpLAorICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB0aW1pbmdGdW5jdGlvbi55MSgp
LAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB0aW1pbmdGdW5j
dGlvbi54MigpLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB0
aW1pbmdGdW5jdGlvbi55MigpLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICBkb3VibGUocHJvZ3Jlc3MpLCBkb3VibGUoZHVyYXRpb24pIC8gMTAwMCk7CisgICAg
ICAgIH0KICAgICAgICAgcmV0dXJuIHByb2dyZXNzOwotICAgIGlmICh0aW1pbmdGdW5jdGlvbi50
eXBlKCkgPT0gQ3ViaWNCZXppZXJUaW1pbmdGdW5jdGlvbikgewotICAgICAgICByZXR1cm4gc29s
dmVDdWJpY0JlemllckZ1bmN0aW9uKHRpbWluZ0Z1bmN0aW9uLngxKCksCi0gICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgdGltaW5nRnVuY3Rpb24ueTEoKSwKLSAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB0aW1pbmdGdW5jdGlvbi54MigpLAotICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHRpbWluZ0Z1bmN0aW9uLnkyKCks
Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZG91YmxlKHByb2dyZXNz
KSwgZG91YmxlKGR1cmF0aW9uKSAvIDEwMDApOwotICAgIH0KLSAgICByZXR1cm4gcHJvZ3Jlc3M7
CiB9CiAKIC8vIGhlbHBlciBmdW5jdGlvbnMgdG8gc2FmZWx5IGdldCBhIHZhbHVlIG91dCBvZiBX
ZWJDb3JlJ3MgQW5pbWF0aW9uVmFsdWUqCkBAIC04MjYsOSArODU4LDcgQEAgc3RhdGljIHZvaWQg
d2Via2l0QW5pbWF0aW9uVG9RdEFuaW1hdGlvblZhbHVlKGNvbnN0IEFuaW1hdGlvblZhbHVlKiBh
bmltYXRpb25WYWwKICAgICBpZiAoIWFuaW1hdGlvblZhbHVlKQogICAgICAgICByZXR1cm47CiAK
LSAgICBjb25zdCBUcmFuc2Zvcm1PcGVyYXRpb25zKiBvcHMgPSBzdGF0aWNfY2FzdDxjb25zdCBU
cmFuc2Zvcm1BbmltYXRpb25WYWx1ZSo+KGFuaW1hdGlvblZhbHVlKS0+dmFsdWUoKTsKLQotICAg
IGlmIChvcHMpCisgICAgaWYgKGNvbnN0IFRyYW5zZm9ybU9wZXJhdGlvbnMqIG9wcyA9IHN0YXRp
Y19jYXN0PGNvbnN0IFRyYW5zZm9ybUFuaW1hdGlvblZhbHVlKj4oYW5pbWF0aW9uVmFsdWUpLT52
YWx1ZSgpKQogICAgICAgICB0cmFuc2Zvcm1PcGVyYXRpb25zID0gKm9wczsKIH0KIApAQCAtODU2
LDggKzg4Niw4IEBAIHB1YmxpYzoKICAgICAgICAgUUFic3RyYWN0QW5pbWF0aW9uOjp1cGRhdGVT
dGF0ZShuZXdTdGF0ZSwgb2xkU3RhdGUpOwogCiAgICAgICAgIC8vIGZvciBzb21lIHJlYXNvbiBJ
IGhhdmUgZG8gdGhpcyBhc3luY2hyb25vdXNseSAtIG9yIHRoZSBhbmltYXRpb24gd29uJ3Qgd29y
awotICAgICAgICBpZiAobmV3U3RhdGUgPT0gUnVubmluZyAmJiBvbGRTdGF0ZSA9PSBTdG9wcGVk
KQotICAgICAgICAgICAgUVRpbWVyOjpzaW5nbGVTaG90KDAsIG1fbGF5ZXIuZGF0YSgpLCBTTE9U
KG5vdGlmeUFuaW1hdGlvblN0YXJ0ZWQoKSkpOworICAgICAgICBpZiAobmV3U3RhdGUgPT0gUnVu
bmluZyAmJiBvbGRTdGF0ZSA9PSBTdG9wcGVkICYmIG1fbGF5ZXIuZGF0YSgpKQorICAgICAgICAg
ICAgbV9sYXllci5kYXRhKCktPm5vdGlmeUFuaW1hdGlvblN0YXJ0ZWRBc3luYygpOwogICAgIH0K
IAogICAgIHZpcnR1YWwgaW50IGR1cmF0aW9uKCkgY29uc3QgeyByZXR1cm4gbV9kdXJhdGlvbjsg
fQpAQCAtOTMyLDkgKzk2MiwxMCBAQCBwcm90ZWN0ZWQ6CiAKICAgICAgICAgLy8gbm93IHdlIGhh
dmUgYSBzb3VyY2Uga2V5ZnJhbWUsIG9yaWdpbiBrZXlmcmFtZSBhbmQgYSB0aW1pbmcgZnVuY3Rp
b24KICAgICAgICAgLy8gd2UgY2FuIG5vdyBwcm9jZXNzIHRoZSBwcm9ncmVzcyBhbmQgYXBwbHkg
dGhlIGZyYW1lCi0gICAgICAgIHFyZWFsIG5vcm1hbGl6ZWRQcm9ncmVzcyA9IChpdC5rZXkoKSA9
PSBpdDIua2V5KCkpID8gMCA6IChwcm9ncmVzcyAtIGl0LmtleSgpKSAvIChpdDIua2V5KCkgLSBp
dC5rZXkoKSk7Ci0gICAgICAgIG5vcm1hbGl6ZWRQcm9ncmVzcyA9IGFwcGx5VGltaW5nRnVuY3Rp
b24odGltaW5nRnVuYywgbm9ybWFsaXplZFByb2dyZXNzLCBkdXJhdGlvbigpIC8gMTAwMCk7Ci0g
ICAgICAgIGFwcGx5RnJhbWUoZnJvbVZhbHVlLCB0b1ZhbHVlLCBub3JtYWxpemVkUHJvZ3Jlc3Mp
OworICAgICAgICBwcm9ncmVzcyA9ICghcHJvZ3Jlc3MgfHwgcHJvZ3Jlc3MgPT0gMSB8fCBpdC5r
ZXkoKSA9PSBpdDIua2V5KCkpCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgID8gcHJvZ3Jlc3MKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
OiBhcHBseVRpbWluZ0Z1bmN0aW9uKHRpbWluZ0Z1bmMsIChwcm9ncmVzcyAtIGl0LmtleSgpKSAv
IChpdDIua2V5KCkgLSBpdC5rZXkoKSksIGR1cmF0aW9uKCkgLyAxMDAwKTsKKyAgICAgICAgYXBw
bHlGcmFtZShmcm9tVmFsdWUsIHRvVmFsdWUsIHByb2dyZXNzKTsKICAgICB9CiAKICAgICBRTWFw
PHFyZWFsLCBLZXlmcmFtZVZhbHVlUXQ8VD4gPiBtX2tleWZyYW1lVmFsdWVzOwpAQCAtOTQzLDcg
Kzk3NCw3IEBAIHByb3RlY3RlZDoKIGNsYXNzIFRyYW5zZm9ybUFuaW1hdGlvblF0IDogcHVibGlj
IEFuaW1hdGlvblF0PFRyYW5zZm9ybU9wZXJhdGlvbnM+IHsKIHB1YmxpYzoKICAgICBUcmFuc2Zv
cm1BbmltYXRpb25RdChHcmFwaGljc0xheWVyUXRJbXBsKiBsYXllciwgY29uc3QgS2V5ZnJhbWVW
YWx1ZUxpc3QmIHZhbHVlcywgY29uc3QgSW50U2l6ZSYgYm94U2l6ZSwgY29uc3QgQW5pbWF0aW9u
KiBhbmltLCBjb25zdCBRU3RyaW5nICYgbmFtZSkKLSAgICAgICAgICAgICAgICA6IEFuaW1hdGlv
blF0PFRyYW5zZm9ybU9wZXJhdGlvbnM+KGxheWVyLCB2YWx1ZXMsIGJveFNpemUsIGFuaW0sIG5h
bWUpCisgICAgICAgIDogQW5pbWF0aW9uUXQ8VHJhbnNmb3JtT3BlcmF0aW9ucz4obGF5ZXIsIHZh
bHVlcywgYm94U2l6ZSwgYW5pbSwgbmFtZSkKICAgICB7CiAgICAgfQogCkBAIC05NTIsNyArOTgz
LDcgQEAgcHVibGljOgogICAgICAgICAvLyB0aGlzIGNhbWUgdXAgZHVyaW5nIHRoZSBjb21wb3Np
dGluZy9hbmltYXRpb24gTGF5b3V0VGVzdHMKICAgICAgICAgLy8gd2hlbiB0aGUgYW5pbWF0aW9u
IGRpZXMsIHRoZSB0cmFuc2Zvcm0gaGFzIHRvIGdvIGJhY2sgdG8gZGVmYXVsdAogICAgICAgICBp
ZiAobV9sYXllcikKLSAgICAgICAgICAgIG1fbGF5ZXIuZGF0YSgpLT5zZXRCYXNlVHJhbnNmb3Jt
KFFUcmFuc2Zvcm0obV9sYXllci5kYXRhKCktPm1fbGF5ZXItPnRyYW5zZm9ybSgpKSk7CisgICAg
ICAgICAgICBtX2xheWVyLmRhdGEoKS0+c2V0QmFzZVRyYW5zZm9ybShtX2xheWVyLmRhdGEoKS0+
bV9sYXllci0+dHJhbnNmb3JtKCkpOwogICAgIH0KIAogICAgIC8vIHRoZSBpZGVhIGlzIHRoYXQg
d2UgbGV0IFdlYkNvcmUgbWFuYWdlIHRoZSB0cmFuc2Zvcm0tb3BlcmF0aW9ucwpAQCAtOTYzLDEx
ICs5OTQsMjIgQEAgcHVibGljOgogICAgIHsKICAgICAgICAgVHJhbnNmb3JtYXRpb25NYXRyaXgg
dHJhbnNmb3JtTWF0cml4OwogCi0gICAgICAgIC8vIHRoaXMgbG9va3Mgc2ltcGxlIGJ1dCBpcyBy
ZWFsbHkgdHJpY2t5IHRvIGdldCByaWdodC4gVXNlIGNhdXRpb24uCi0gICAgICAgIGZvciAoc2l6
ZV90IGkgPSAwOyBpIDwgdGFyZ2V0T3BlcmF0aW9ucy5zaXplKCk7ICsraSkKLSAgICAgICAgICAg
IHRhcmdldE9wZXJhdGlvbnMub3BlcmF0aW9ucygpW2ldLT5ibGVuZChzb3VyY2VPcGVyYXRpb25z
LmF0KGkpLCBwcm9ncmVzcyktPmFwcGx5KHRyYW5zZm9ybU1hdHJpeCwgbV9ib3hTaXplKTsKLQot
ICAgICAgICBtX2xheWVyLmRhdGEoKS0+c2V0QmFzZVRyYW5zZm9ybShRVHJhbnNmb3JtKHRyYW5z
Zm9ybU1hdHJpeCkpOworICAgICAgICAvLyBzb21ldGltZXMgdGhlIGFuaW1hdGlvbiB2YWx1ZXMg
ZnJvbSBXZWJDb3JlIGFyZSBtaXNsZWFkaW5nIGFuZCB3ZSBoYXZlIHRvIHVzZSB0aGUgYWN0dWFs
IG1hdHJpeCBhcyBzb3VyY2UKKyAgICAgICAgLy8gVGhlIE1hYyBpbXBsZW1lbnRhdGlvbiBzaW1w
bHkgZG9lc24ndCB0cnkgdG8gYWNjZWxlcmF0ZSB0aG9zZSAoZS5nLiAzNjBkZWcgcm90YXRpb24p
LCBidXQgd2UgZG8uCisgICAgICAgIGlmIChwcm9ncmVzcyA9PSAxIHx8ICF0YXJnZXRPcGVyYXRp
b25zLnNpemUoKSB8fCBzb3VyY2VPcGVyYXRpb25zID09IHRhcmdldE9wZXJhdGlvbnMpIHsKKyAg
ICAgICAgICAgIFRyYW5zZm9ybWF0aW9uTWF0cml4IHNvdXJjZU1hdHJpeDsKKyAgICAgICAgICAg
IHNvdXJjZU9wZXJhdGlvbnMuYXBwbHkobV9ib3hTaXplLCBzb3VyY2VNYXRyaXgpOworICAgICAg
ICAgICAgdHJhbnNmb3JtTWF0cml4ID0gbV9zb3VyY2VNYXRyaXg7CisgICAgICAgICAgICB0cmFu
c2Zvcm1NYXRyaXguYmxlbmQoc291cmNlTWF0cml4LCAxIC0gcHJvZ3Jlc3MpOworICAgICAgICB9
IGVsc2UgaWYgKHRhcmdldE9wZXJhdGlvbnMuc2l6ZSgpICE9IHNvdXJjZU9wZXJhdGlvbnMuc2l6
ZSgpKSB7CisgICAgICAgICAgICB0cmFuc2Zvcm1NYXRyaXggPSBtX3NvdXJjZU1hdHJpeDsKKyAg
ICAgICAgICAgIHRhcmdldE9wZXJhdGlvbnMuYXBwbHkobV9ib3hTaXplLCB0cmFuc2Zvcm1NYXRy
aXgpOworICAgICAgICAgICAgdHJhbnNmb3JtTWF0cml4LmJsZW5kKG1fc291cmNlTWF0cml4LCBw
cm9ncmVzcyk7CisgICAgICAgIH0gZWxzZSB7CisgICAgICAgICAgICBmb3IgKHNpemVfdCBpID0g
MDsgaSA8IHRhcmdldE9wZXJhdGlvbnMuc2l6ZSgpOyArK2kpCisgICAgICAgICAgICAgICAgdGFy
Z2V0T3BlcmF0aW9ucy5vcGVyYXRpb25zKClbaV0tPmJsZW5kKHNvdXJjZU9wZXJhdGlvbnMuYXQo
aSksIHByb2dyZXNzKS0+YXBwbHkodHJhbnNmb3JtTWF0cml4LCBtX2JveFNpemUpOworICAgICAg
ICB9CisgICAgICAgIG1fbGF5ZXIuZGF0YSgpLT5zZXRCYXNlVHJhbnNmb3JtKHRyYW5zZm9ybU1h
dHJpeCk7CiAgICAgfQogCiAgICAgdmlydHVhbCB2b2lkIHVwZGF0ZVN0YXRlKFFBYnN0cmFjdEFu
aW1hdGlvbjo6U3RhdGUgbmV3U3RhdGUsIFFBYnN0cmFjdEFuaW1hdGlvbjo6U3RhdGUgb2xkU3Rh
dGUpCkBAIC05ODAsMjEgKzEwMjIsMjMgQEAgcHVibGljOgogICAgICAgICAvLyB0byBpbmNyZWFz
ZSBGUFMsIHdlIHVzZSBhIGxlc3MgYWNjdXJhdGUgY2FjaGluZyBtZWNoYW5pc20gd2hpbGUgYW5p
bWF0aW9uIGlzIGdvaW5nIG9uCiAgICAgICAgIC8vIHRoaXMgaXMgYSBVWCBjaG9pY2UgdGhhdCBz
aG91bGQgcHJvYmFibHkgYmUgY3VzdG9taXphYmxlCiAgICAgICAgIGlmIChuZXdTdGF0ZSA9PSBR
QWJzdHJhY3RBbmltYXRpb246OlJ1bm5pbmcpIHsKKyAgICAgICAgICAgIG1fc291cmNlTWF0cml4
ID0gbV9sYXllci5kYXRhKCktPm1fbGF5ZXItPnRyYW5zZm9ybSgpOwogICAgICAgICAgICAgbV9s
YXllci5kYXRhKCktPm1fdHJhbnNmb3JtQW5pbWF0aW9uUnVubmluZyA9IHRydWU7Ci0gICAgICAg
ICAgICBpZiAobV9sYXllci5kYXRhKCktPmNhY2hlTW9kZSgpID09IFFHcmFwaGljc0l0ZW06OkRl
dmljZUNvb3JkaW5hdGVDYWNoZSkKLSAgICAgICAgICAgICAgICBtX2xheWVyLmRhdGEoKS0+c2V0
Q2FjaGVNb2RlKFFHcmFwaGljc0l0ZW06Okl0ZW1Db29yZGluYXRlQ2FjaGUpOworICAgICAgICAg
ICAgbV9sYXllci5kYXRhKCktPmFkanVzdENhY2hpbmdSZWN1cnNpdmVseSh0cnVlKTsKICAgICAg
ICAgfSBlbHNlIHsKICAgICAgICAgICAgIG1fbGF5ZXIuZGF0YSgpLT5tX3RyYW5zZm9ybUFuaW1h
dGlvblJ1bm5pbmcgPSBmYWxzZTsKLSAgICAgICAgICAgIGlmIChtX2xheWVyLmRhdGEoKS0+Y2Fj
aGVNb2RlKCkgPT0gUUdyYXBoaWNzSXRlbTo6SXRlbUNvb3JkaW5hdGVDYWNoZSkKLSAgICAgICAg
ICAgICAgICBtX2xheWVyLmRhdGEoKS0+c2V0Q2FjaGVNb2RlKFFHcmFwaGljc0l0ZW06OkRldmlj
ZUNvb3JkaW5hdGVDYWNoZSk7CisgICAgICAgICAgICBtX2xheWVyLmRhdGEoKS0+YWRqdXN0Q2Fj
aGluZ1JlY3Vyc2l2ZWx5KGZhbHNlKTsKICAgICAgICAgfQorCiAgICAgfQorCisgICAgVHJhbnNm
b3JtYXRpb25NYXRyaXggbV9zb3VyY2VNYXRyaXg7CiB9OwogCiBjbGFzcyBPcGFjaXR5QW5pbWF0
aW9uUXQgOiBwdWJsaWMgQW5pbWF0aW9uUXQ8cXJlYWw+IHsKIHB1YmxpYzoKICAgICBPcGFjaXR5
QW5pbWF0aW9uUXQoR3JhcGhpY3NMYXllclF0SW1wbCogbGF5ZXIsIGNvbnN0IEtleWZyYW1lVmFs
dWVMaXN0JiB2YWx1ZXMsIGNvbnN0IEludFNpemUmIGJveFNpemUsIGNvbnN0IEFuaW1hdGlvbiog
YW5pbSwgY29uc3QgUVN0cmluZyAmIG5hbWUpCi0gICAgICAgICA6IEFuaW1hdGlvblF0PHFyZWFs
PihsYXllciwgdmFsdWVzLCBib3hTaXplLCBhbmltLCBuYW1lKQorICAgICAgICAgICAgICAgIDog
QW5pbWF0aW9uUXQ8cXJlYWw+KGxheWVyLCB2YWx1ZXMsIGJveFNpemUsIGFuaW0sIG5hbWUpCiAg
ICAgewogICAgIH0KIApAQCAtMTAwNiw2ICsxMDUwLDcgQEAgcHVibGljOgogICAgIHZpcnR1YWwg
dm9pZCB1cGRhdGVTdGF0ZShRQWJzdHJhY3RBbmltYXRpb246OlN0YXRlIG5ld1N0YXRlLCBRQWJz
dHJhY3RBbmltYXRpb246OlN0YXRlIG9sZFN0YXRlKQogICAgIHsKICAgICAgICAgUUFic3RyYWN0
QW5pbWF0aW9uOjp1cGRhdGVTdGF0ZShuZXdTdGF0ZSwgb2xkU3RhdGUpOworCiAgICAgICAgIGlm
IChtX2xheWVyKQogICAgICAgICAgICAgbV9sYXllci5kYXRhKCktPm1fb3BhY2l0eUFuaW1hdGlv
blJ1bm5pbmcgPSAobmV3U3RhdGUgPT0gUUFic3RyYWN0QW5pbWF0aW9uOjpSdW5uaW5nKTsKICAg
ICB9CkBAIC0xMDc5LDExICsxMTI0LDEyIEBAIHZvaWQgR3JhcGhpY3NMYXllclF0OjpyZW1vdmVB
bmltYXRpb25zRm9yS2V5ZnJhbWVzKGNvbnN0IFN0cmluZyYgbmFtZSkKIHZvaWQgR3JhcGhpY3NM
YXllclF0OjpwYXVzZUFuaW1hdGlvbihjb25zdCBTdHJpbmcmIG5hbWUsIGRvdWJsZSB0aW1lT2Zm
c2V0KQogewogICAgIGZvciAoUUxpc3Q8UVdlYWtQb2ludGVyPFFBYnN0cmFjdEFuaW1hdGlvbj4g
Pjo6aXRlcmF0b3IgaXQgPSBtX2ltcGwtPm1fYW5pbWF0aW9ucy5iZWdpbigpOyBpdCAhPSBtX2lt
cGwtPm1fYW5pbWF0aW9ucy5lbmQoKTsgKytpdCkgewotICAgICAgICBpZiAoKml0KSB7Ci0gICAg
ICAgICAgICBBbmltYXRpb25RdEJhc2UqIGFuaW0gPSBzdGF0aWNfY2FzdDxBbmltYXRpb25RdEJh
c2UqPigoKml0KS5kYXRhKCkpOwotICAgICAgICAgICAgaWYgKGFuaW0gJiYgYW5pbS0+bV9rZXlm
cmFtZXNOYW1lID09IFFTdHJpbmcobmFtZSkpCi0gICAgICAgICAgICAgICAgUVRpbWVyOjpzaW5n
bGVTaG90KHRpbWVPZmZzZXQgKiAxMDAwLCBhbmltLCBTTE9UKHBhdXNlKCkpKTsKLSAgICAgICAg
fQorICAgICAgICBpZiAoISgqaXQpKQorICAgICAgICAgICAgY29udGludWU7CisKKyAgICAgICAg
QW5pbWF0aW9uUXRCYXNlKiBhbmltID0gc3RhdGljX2Nhc3Q8QW5pbWF0aW9uUXRCYXNlKj4oKCpp
dCkuZGF0YSgpKTsKKyAgICAgICAgaWYgKGFuaW0gJiYgYW5pbS0+bV9rZXlmcmFtZXNOYW1lID09
IFFTdHJpbmcobmFtZSkpCisgICAgICAgICAgICBRVGltZXI6OnNpbmdsZVNob3QodGltZU9mZnNl
dCAqIDEwMDAsIGFuaW0sIFNMT1QocGF1c2UoKSkpOwogICAgIH0KIH0KIApAQCAtMTA5MiwxMyAr
MTEzOCwxMSBAQCB2b2lkIEdyYXBoaWNzTGF5ZXJRdDo6c3VzcGVuZEFuaW1hdGlvbnMoZG91Ymxl
IHRpbWUpCiAgICAgaWYgKG1faW1wbC0+bV9zdXNwZW5kVGltZXIuaXNBY3RpdmUoKSkgewogICAg
ICAgICBtX2ltcGwtPm1fc3VzcGVuZFRpbWVyLnN0b3AoKTsKICAgICAgICAgbV9pbXBsLT5tX3N1
c3BlbmRUaW1lci5zdGFydCh0aW1lICogMTAwMCk7Ci0gICAgfSBlbHNlIHsKKyAgICB9IGVsc2UK
ICAgICAgICAgZm9yIChRTGlzdDxRV2Vha1BvaW50ZXI8UUFic3RyYWN0QW5pbWF0aW9uPiA+Ojpp
dGVyYXRvciBpdCA9IG1faW1wbC0+bV9hbmltYXRpb25zLmJlZ2luKCk7IGl0ICE9IG1faW1wbC0+
bV9hbmltYXRpb25zLmVuZCgpOyArK2l0KSB7Ci0gICAgICAgICAgICBRQWJzdHJhY3RBbmltYXRp
b24qIGFuaW0gPSBpdC0+ZGF0YSgpOwotICAgICAgICAgICAgaWYgKGFuaW0pCisgICAgICAgICAg
ICBpZiAoUUFic3RyYWN0QW5pbWF0aW9uKiBhbmltID0gaXQtPmRhdGEoKSkKICAgICAgICAgICAg
ICAgICBhbmltLT5wYXVzZSgpOwogICAgICAgICB9Ci0gICAgfQogfQogCiB2b2lkIEdyYXBoaWNz
TGF5ZXJRdDo6cmVzdW1lQW5pbWF0aW9ucygpCkBAIC0xMTA2LDggKzExNTAsNyBAQCB2b2lkIEdy
YXBoaWNzTGF5ZXJRdDo6cmVzdW1lQW5pbWF0aW9ucygpCiAgICAgaWYgKG1faW1wbC0+bV9zdXNw
ZW5kVGltZXIuaXNBY3RpdmUoKSkgewogICAgICAgICBtX2ltcGwtPm1fc3VzcGVuZFRpbWVyLnN0
b3AoKTsKICAgICAgICAgZm9yIChRTGlzdDxRV2Vha1BvaW50ZXI8UUFic3RyYWN0QW5pbWF0aW9u
PiA+OjppdGVyYXRvciBpdCA9IG1faW1wbC0+bV9hbmltYXRpb25zLmJlZ2luKCk7IGl0ICE9IG1f
aW1wbC0+bV9hbmltYXRpb25zLmVuZCgpOyArK2l0KSB7Ci0gICAgICAgICAgICBRQWJzdHJhY3RB
bmltYXRpb24qIGFuaW0gPSAoKml0KS5kYXRhKCk7Ci0gICAgICAgICAgICBpZiAoYW5pbSkKKyAg
ICAgICAgICAgIGlmIChRQWJzdHJhY3RBbmltYXRpb24qIGFuaW0gPSAoKml0KS5kYXRhKCkpCiAg
ICAgICAgICAgICAgICAgYW5pbS0+cmVzdW1lKCk7CiAgICAgICAgIH0KICAgICB9CmRpZmYgLS1n
aXQgYS9XZWJLaXQvcXQvQXBpL3FncmFwaGljc3dlYnZpZXcuY3BwIGIvV2ViS2l0L3F0L0FwaS9x
Z3JhcGhpY3N3ZWJ2aWV3LmNwcAppbmRleCBkOWU4YTc0Li4xYTVlMDQzIDEwMDY0NAotLS0gYS9X
ZWJLaXQvcXQvQXBpL3FncmFwaGljc3dlYnZpZXcuY3BwCisrKyBiL1dlYktpdC9xdC9BcGkvcWdy
YXBoaWNzd2Vidmlldy5jcHAKQEAgLTI3LDYgKzI3LDcgQEAKICNpbmNsdWRlICJxd2VicGFnZV9w
LmgiCiAjaW5jbHVkZSAiUVdlYlBhZ2VDbGllbnQuaCIKICNpbmNsdWRlIDxGcmFtZVZpZXcuaD4K
KyNpbmNsdWRlIDxRdENvcmUvcW1ldGFvYmplY3QuaD4KICNpbmNsdWRlIDxRdENvcmUvcXNoYXJl
ZHBvaW50ZXIuaD4KICNpbmNsdWRlIDxRdENvcmUvcXRpbWVyLmg+CiAjaW5jbHVkZSA8UXRHdWkv
cWFwcGxpY2F0aW9uLmg+CkBAIC03OCwxMyArNzksMTQgQEAgcHVibGljOgogICAgICAgICAsIHBh
Z2UoMCkKICNpZiBVU0UoQUNDRUxFUkFURURfQ09NUE9TSVRJTkcpCiAgICAgICAgICwgcm9vdEdy
YXBoaWNzTGF5ZXIoMCkKLSAgICAgICAgLCBzaG91bGRTeW5jKHRydWUpCisgICAgICAgICwgc2hv
dWxkU3luYyhmYWxzZSkKICNlbmRpZgogICAgIHsKICNpZiBVU0UoQUNDRUxFUkFURURfQ09NUE9T
SVRJTkcpCiAgICAgICAgIC8vIHRoZSBvdmVybGF5IGFuZCBzdGF5cyBhbGl2ZSBmb3IgdGhlIGxp
ZmV0aW1lIG9mCiAgICAgICAgIC8vIHRoaXMgUUdyYXBoaWNzV2ViVmlldyBhcyB0aGUgc2Nyb2xs
YmFycyBhcmUgbmVlZGVkIHdoZW4gdGhlcmUncyBubyBjb21wb3NpdGluZwogICAgICAgICBxLT5z
ZXRGbGFnKFFHcmFwaGljc0l0ZW06Okl0ZW1Vc2VzRXh0ZW5kZWRTdHlsZU9wdGlvbik7CisgICAg
ICAgIHN5bmNNZXRhTWV0aG9kID0gcS0+bWV0YU9iamVjdCgpLT5tZXRob2QocS0+bWV0YU9iamVj
dCgpLT5pbmRleE9mTWV0aG9kKCJzeW5jTGF5ZXJzKCkiKSk7CiAjZW5kaWYKICAgICB9CiAKQEAg
LTEyOSw2ICsxMzEsOSBAQCBwdWJsaWM6CiAgICAgLy8gY29tcG9zaXRvciB0ZWxsaW5nIHVzIHRv
IGRvIHNvLiBXZSdsbCBnZXQgdGhhdCBjYWxsIGZyb20gQ2hyb21lQ2xpZW50UXQKICAgICBib29s
IHNob3VsZFN5bmM7CiAKKyAgICAvLyB3ZSBoYXZlIHRvIGZsdXNoIHF1aXRlIG9mdGVuLCBzbyB3
ZSB1c2UgYSBtZXRhLW1ldGhvZCBpbnN0ZWFkIG9mIFFUaW1lcjo6c2luZ2xlU2hvdCBmb3IgcHV0
dGluZyB0aGUgZXZlbnQgaW4gdGhlIHF1ZXVlCisgICAgUU1ldGFNZXRob2Qgc3luY01ldGFNZXRo
b2Q7CisKICAgICAvLyB3ZSBuZWVkIHRvIHB1dCB0aGUgcm9vdCBncmFwaGljcyBsYXllciBiZWhp
bmQgdGhlIG92ZXJsYXkgKHdoaWNoIGNvbnRhaW5zIHRoZSBzY3JvbGxiYXIpCiAgICAgZW51bSB7
IFJvb3RHcmFwaGljc0xheWVyWlZhbHVlLCBPdmVybGF5WlZhbHVlIH07CiAjZW5kaWYKQEAgLTE3
Niw3ICsxODEsNyBAQCB2b2lkIFFHcmFwaGljc1dlYlZpZXdQcml2YXRlOjptYXJrRm9yU3luYyhi
b29sIHNjaGVkdWxlU3luYykKIHsKICAgICBzaG91bGRTeW5jID0gdHJ1ZTsKICAgICBpZiAoc2No
ZWR1bGVTeW5jKQotICAgICAgICBRVGltZXI6OnNpbmdsZVNob3QoMCwgcSwgU0xPVChzeW5jTGF5
ZXJzKCkpKTsKKyAgICAgICAgc3luY01ldGFNZXRob2QuaW52b2tlKHEsIFF0OjpRdWV1ZWRDb25u
ZWN0aW9uKTsKIH0KIAogdm9pZCBRR3JhcGhpY3NXZWJWaWV3UHJpdmF0ZTo6dXBkYXRlQ29tcG9z
aXRpbmdTY3JvbGxQb3NpdGlvbigpCkBAIC0yMjIsNiArMjI3LDcgQEAgdm9pZCBRR3JhcGhpY3NX
ZWJWaWV3UHJpdmF0ZTo6dXBkYXRlKGNvbnN0IFFSZWN0ICYgZGlydHlSZWN0KQogI2lmIFVTRShB
Q0NFTEVSQVRFRF9DT01QT1NJVElORykKICAgICBpZiAob3ZlcmxheSkKICAgICAgICAgb3Zlcmxh
eS0+dXBkYXRlKFFSZWN0RihkaXJ0eVJlY3QpKTsKKyAgICBzeW5jTGF5ZXJzKCk7CiAjZW5kaWYK
IH0KIApAQCAtNDM1LDcgKzQ0MSw2IEBAIHZvaWQgUUdyYXBoaWNzV2ViVmlldzo6cGFpbnQoUVBh
aW50ZXIqIHBhaW50ZXIsIGNvbnN0IFFTdHlsZU9wdGlvbkdyYXBoaWNzSXRlbSoKIHsKICNpZiBV
U0UoQUNDRUxFUkFURURfQ09NUE9TSVRJTkcpCiAgICAgcGFnZSgpLT5tYWluRnJhbWUoKS0+cmVu
ZGVyKHBhaW50ZXIsIGQtPm92ZXJsYXkgPyBRV2ViRnJhbWU6OkNvbnRlbnRzTGF5ZXIgOiBRV2Vi
RnJhbWU6OkFsbExheWVycywgb3B0aW9uLT5leHBvc2VkUmVjdC50b0FsaWduZWRSZWN0KCkpOwot
ICAgIGQtPnN5bmNMYXllcnMoKTsKICNlbHNlCiAgICAgcGFnZSgpLT5tYWluRnJhbWUoKS0+cmVu
ZGVyKHBhaW50ZXIsIFFXZWJGcmFtZTo6QWxsTGF5ZXJzLCBvcHRpb24tPmV4cG9zZWRSZWN0LnRv
UmVjdCgpKTsKICNlbmRpZgpkaWZmIC0tZ2l0IGEvV2ViS2l0L3F0L0NoYW5nZUxvZyBiL1dlYktp
dC9xdC9DaGFuZ2VMb2cKaW5kZXggNmNjYTk3Yy4uNjMyOWZhYyAxMDA2NDQKLS0tIGEvV2ViS2l0
L3F0L0NoYW5nZUxvZworKysgYi9XZWJLaXQvcXQvQ2hhbmdlTG9nCkBAIC0xLDMgKzEsMTUgQEAK
KzIwMTAtMDEtMjQgIE5vJ2FtIFJvc2VudGhhbCAgPG5vYW0ucm9zZW50aGFsQG5va2lhLmNvbT4K
KworICAgICAgICBSZXZpZXdlZCBieSBOT0JPRFkgKE9PUFMhKS4KKworICAgICAgICBbUXRdIFR1
bmluZyBhbmQgb3B0aW1pemF0aW9ucyB0byBHcmFwaGljc0xheWVyUXQuIE1haW5seSByZWR1Y2Vk
IHVzYWdlCisgICAgICAgIG9mIFFUaW1lcjo6c2luZ2xlU2hvdCwgYW5kIG1vdmVkIHN5bmNMYXll
cnMoKSBmcm9tIHBhaW50KCkgdG8gdXBkYXRlKCkKKyAgICAgICAgaHR0cHM6Ly9idWdzLndlYmtp
dC5vcmcvc2hvd19idWcuY2dpP2lkPTM0MDYyCisKKyAgICAgICAgKiBBcGkvcWdyYXBoaWNzd2Vi
dmlldy5jcHA6CisgICAgICAgIChRR3JhcGhpY3NXZWJWaWV3UHJpdmF0ZTo6dXBkYXRlKTogTW92
ZWQgdGhlIHN5bmMgb3BlcmF0aW9uIHRvIHVwZGF0ZQorICAgICAgICAoUUdyYXBoaWNzV2ViVmll
dzo6cGFpbnQpOiBNb3ZlZCB0aGUgc3luYyBvcGVyYXRpb24gdG8gdXBkYXRlCisKIDIwMTAtMDEt
MjMgIEdpcmlzaCBSYW1ha3Jpc2huYW4gIDxnaXJpc2hAZm9yd2FyZGJpYXMuaW4+CiAKICAgICAg
ICAgUmV2aWV3ZWQgYnkgS2VubmV0aCBSb2hkZSBDaHJpc3RpYW5zZW4uCi0tIAoxLjYuNi5yYzAu
NjMuZzY2YWJjCgo=
</data>
<flag name="review"
          id="29720"
          type_id="1"
          status="-"
          setter="ariya.hidayat"
    />
          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>47858</attachid>
            <date>2010-02-01 11:44:53 -0800</date>
            <delta_ts>2010-02-02 12:19:28 -0800</delta_ts>
            <desc>tuning / optimiization to GraphicsLayerQt + added a comment about actual FPS improvement to the ChangeLog</desc>
            <filename>patch.diff</filename>
            <type>text/plain</type>
            <size>26432</size>
            <attacher name="Noam Rosenthal">noam</attacher>
            
              <data encoding="base64">RnJvbSAzNDI1MTdiMTMyMTMwMjZhODE4ZWJkOGYyZDMzNzQ1OTVkMjk0MTdhIE1vbiBTZXAgMTcg
MDA6MDA6MDAgMjAwMQpGcm9tOiBObydhbSBSb3NlbnRoYWwgPG5vYW0ucm9zZW50aGFsQG5va2lh
LmNvbT4KRGF0ZTogU3VuLCAyNCBKYW4gMjAxMCAxOTo1MTozNyAtMDgwMApTdWJqZWN0OiBbUEFU
Q0hdIEdyYXBoaWNzTGF5ZXJRdCBwZXJmb3JtYW5jZSB0dW5pbmcKCi0tLQogV2ViQ29yZS9DaGFu
Z2VMb2cgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHwgICAxNyArKwogV2ViQ29yZS9w
bGF0Zm9ybS9ncmFwaGljcy9xdC9HcmFwaGljc0xheWVyUXQuY3BwIHwgIDIzNyArKysrKysrKysr
KysrLS0tLS0tLS0tCiBXZWJLaXQvcXQvQXBpL3FncmFwaGljc3dlYnZpZXcuY3BwICAgICAgICAg
ICAgICAgfCAgIDExICstCiBXZWJLaXQvcXQvQ2hhbmdlTG9nICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgfCAgIDEyICsKIDQgZmlsZXMgY2hhbmdlZCwgMTc3IGluc2VydGlvbnMoKyksIDEw
MCBkZWxldGlvbnMoLSkKCmRpZmYgLS1naXQgYS9XZWJDb3JlL0NoYW5nZUxvZyBiL1dlYkNvcmUv
Q2hhbmdlTG9nCmluZGV4IGI5ZTA1ZmQuLjI3N2YwMTggMTAwNjQ0Ci0tLSBhL1dlYkNvcmUvQ2hh
bmdlTG9nCisrKyBiL1dlYkNvcmUvQ2hhbmdlTG9nCkBAIC0xLDMgKzEsMjAgQEAKKzIwMTAtMDEt
MjQgIE5vJ2FtIFJvc2VudGhhbCAgPG5vYW0ucm9zZW50aGFsQG5va2lhLmNvbT4KKworICAgICAg
ICBSZXZpZXdlZCBieSBOT0JPRFkgKE9PUFMhKS4KKworICAgICAgICBbUXRdIFR1bmluZyBhbmQg
b3B0aW1pemF0aW9ucyB0byBHcmFwaGljc0xheWVyUXQuIFJlZHVjZSB1bm5lY2Vzc2FyeQorICAg
ICAgICByZWNhY2hpbmcsIHJlbW92ZSBRVGltZXI6OnNpbmdsZVNob3QgYW5kIFFQaXhtYXA6OnNj
YWxlZCwgbW9yZQorICAgICAgICBhY2N1cmF0ZSBzdHJhdGVneSBvZiBoYW5kbGluZyB0cmFuc2Zv
cm0gb3BlcmF0aW9uIGJsZW5kcy4gUm90YXRpbmcgYSBib3JkZXJlZC10YWJsZSwgZm9yIGV4YW1w
bGUsIG5vdyBydW5zIGF0IDUwRlBTIGluc3RlYWQgb2YgNDBGUFMgb24gTWFlbW81LgorCisgICAg
ICAgIGh0dHBzOi8vYnVncy53ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9pZD0zNDA2MgorCisgICAg
ICAgIE5vIG5ldyB0ZXN0cy4gKE9PUFMhKQorCisgICAgICAgICogcGxhdGZvcm0vZ3JhcGhpY3Mv
cXQvR3JhcGhpY3NMYXllclF0LmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OkdyYXBoaWNzTGF5ZXJR
dEltcGw6OmZsdXNoQ2hhbmdlcyk6IEZpbmUtdHVuZSBjYWNoaW5nCisgICAgICAgIChXZWJDb3Jl
OjpUcmFuc2Zvcm1BbmltYXRpb25RdDo6VHJhbnNmb3JtQW5pbWF0aW9uUXQpOiB0cmFuc2Zvcm0g
YnVncworICAgICAgICAoV2ViQ29yZTo6T3BhY2l0eUFuaW1hdGlvblF0Ojp1cGRhdGVTdGF0ZSk6
IHN0eWxlIGNoYW5nZQorCiAyMDEwLTAxLTI0ICBPbGl2ZXIgSHVudCAgPG9saXZlckBhcHBsZS5j
b20+CiAKICAgICAgICAgUmV2aWV3ZWQgYnkgRGFyaW4gQWRsZXIuCmRpZmYgLS1naXQgYS9XZWJD
b3JlL3BsYXRmb3JtL2dyYXBoaWNzL3F0L0dyYXBoaWNzTGF5ZXJRdC5jcHAgYi9XZWJDb3JlL3Bs
YXRmb3JtL2dyYXBoaWNzL3F0L0dyYXBoaWNzTGF5ZXJRdC5jcHAKaW5kZXggNTcxMmVlZS4uYmYz
YWFkZSAxMDA2NDQKLS0tIGEvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9xdC9HcmFwaGljc0xh
eWVyUXQuY3BwCisrKyBiL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvcXQvR3JhcGhpY3NMYXll
clF0LmNwcApAQCAtOTksMTQgKzk5LDI2IEBAIHB1YmxpYzoKICAgICAvLyBvciBDaHJvbWVDbGll
bnRRdDo6c2NoZWR1bGVDb21wb3NpdGluZ0xheWVyU3luYyAobWVhbmluZyB0aGUgc3luYyB3aWxs
IGhhcHBlbiBBU0FQKQogICAgIHZvaWQgZmx1c2hDaGFuZ2VzKGJvb2wgcmVjdXJzaXZlID0gdHJ1
ZSk7CiAKKyAgICAvLyBvcHRpbWl6YXRpb246IHdoZW4gd2UgaGF2ZSBhbiBhbmltYXRpb24gcnVu
bmluZyBvbiBhbiBlbGVtZW50IHdpdGggbm8gY29udGVudHMsIHRoYXQgaGFzIGNoaWxkLWVsZW1l
bnRzIHdpdGggY29udGVudHMsCisgICAgLy8gQUxMIG9mIHRoZW0gaGF2ZSB0byBoYXZlIEl0ZW1D
b29yZGluYXRlQ2FjaGUgYW5kIG5vdCBEZXZpY2VDb29yZGluYXRlQ2FjaGUKKyAgICB2b2lkIGFk
anVzdENhY2hpbmdSZWN1cnNpdmVseShib29sIGFuaW1hdGlvbklzUnVubmluZyk7CisKKyAgICAv
LyBvcHRpbWl6YXRpb246IHJldHVybnMgdHJ1ZSBpZiB0aGlzIG9yIGFuIGFuY2VzdG9yIGhhcyBh
IHRyYW5zZm9ybSBhbmltYXRpb24gcnVubmluZy4KKyAgICAvLyB0aGlzIGVuYWJsZXMgdXMgdG8g
dXNlIEl0ZW1Db29yZGluYXRlc0NhY2hlIHdoaWxlIHRoZSBhbmltYXRpb24gaXMgcnVubmluZywg
b3RoZXJ3aXNlIHdlIGhhdmUgdG8gcmVjYWNoZSBmb3IgZXZlcnkgZnJhbWUKKyAgICBib29sIGlz
VHJhbnNmb3JtQW5pbWF0aW9uUnVubmluZygpIGNvbnN0OworCiBwdWJsaWMgc2xvdHM6CiAgICAg
Ly8gd2UgbmVlZCB0byBub3RpZnkgdGhlIGNsaWVudCAoYWthIHRoZSBsYXllciBjb21wb3NpdG9y
KSB3aGVuIHRoZSBhbmltYXRpb24gYWN0dWFsbHkgc3RhcnRzCiAgICAgdm9pZCBub3RpZnlBbmlt
YXRpb25TdGFydGVkKCk7CiAKK3NpZ25hbHM6CisgICAgLy8gb3B0aW1pemF0aW9uOiB3ZSBkb24n
dCB3YW50IHRvIHVzZSBRVGltZXI6OnNpbmdsZVNob3QKKyAgICB2b2lkIG5vdGlmeUFuaW1hdGlv
blN0YXJ0ZWRBc3luYygpOworCiBwdWJsaWM6CiAgICAgR3JhcGhpY3NMYXllclF0KiBtX2xheWVy
OwogCi0gICAgUVRyYW5zZm9ybSBtX2Jhc2VUcmFuc2ZvbTsKKyAgICBRVHJhbnNmb3JtIG1fYmFz
ZVRyYW5zZm9ybTsKICAgICBib29sIG1fdHJhbnNmb3JtQW5pbWF0aW9uUnVubmluZzsKICAgICBi
b29sIG1fb3BhY2l0eUFuaW1hdGlvblJ1bm5pbmc7CiAKQEAgLTE1NywxMiArMTY5LDE0IEBAIHB1
YmxpYzoKICAgICAgICAgYm9vbCBiYWNrZmFjZVZpc2liaWxpdHk6IDE7CiAgICAgICAgIGJvb2wg
ZGlzdHJpYnV0ZU9wYWNpdHk6IDE7CiAgICAgICAgIGJvb2wgYWxpZ246IDI7Ci0gICAgICAgIFN0
YXRlKCk6IG1hc2tMYXllcigwKSwgb3BhY2l0eSgxKSwgcHJlc2VydmVzM0QoZmFsc2UpLCBtYXNr
c1RvQm91bmRzKGZhbHNlKSwKKyAgICAgICAgU3RhdGUoKTogbWFza0xheWVyKDApLCBvcGFjaXR5
KDEuZiksIHByZXNlcnZlczNEKGZhbHNlKSwgbWFza3NUb0JvdW5kcyhmYWxzZSksCiAgICAgICAg
ICAgICAgICAgICBkcmF3c0NvbnRlbnQoZmFsc2UpLCBjb250ZW50c09wYXF1ZShmYWxzZSksIGJh
Y2tmYWNlVmlzaWJpbGl0eShmYWxzZSksCiAgICAgICAgICAgICAgICAgICBkaXN0cmlidXRlT3Bh
Y2l0eShmYWxzZSkKICAgICAgICAgewogICAgICAgICB9CiAgICAgfSBtX3N0YXRlOworCisgICAg
ZnJpZW5kIGNsYXNzIEFuaW1hdGlvblF0QmFzZTsKIH07CiAKIEdyYXBoaWNzTGF5ZXJRdEltcGw6
OkdyYXBoaWNzTGF5ZXJRdEltcGwoR3JhcGhpY3NMYXllclF0KiBuZXdMYXllcikKQEAgLTE3MSwx
NiArMTg1LDE0IEBAIEdyYXBoaWNzTGF5ZXJRdEltcGw6OkdyYXBoaWNzTGF5ZXJRdEltcGwoR3Jh
cGhpY3NMYXllclF0KiBuZXdMYXllcikKICAgICAsIG1fdHJhbnNmb3JtQW5pbWF0aW9uUnVubmlu
ZyhmYWxzZSkKICAgICAsIG1fY2hhbmdlTWFzayhOb0NoYW5nZXMpCiB7Ci0gICAgLy8gYmV0dGVy
IHRvIGNhbGN1bGF0ZSB0aGUgZXhwb3NlZCByZWN0IGluIFFHcmFwaGljc1ZpZXcgdGhhbiBvdmVy
LXJlbmRlciBpbiBXZWJDb3JlCi0gICAgLy8gRklYTUU6IHRlc3QgZGlmZmVyZW50IGFwcHJvYWNo
ZXMKLSAgICBzZXRGbGFnKFFHcmFwaGljc0l0ZW06Okl0ZW1Vc2VzRXh0ZW5kZWRTdHlsZU9wdGlv
biwgdHJ1ZSk7Ci0KICAgICAvLyB3ZSB1c2UgZ3JhcGhpY3MtdmlldyBmb3IgY29tcG9zaXRpbmcs
IG5vdCBmb3IgaW50ZXJhY3Rpdml0eQogICAgIHNldEFjY2VwdGVkTW91c2VCdXR0b25zKFF0OjpO
b0J1dHRvbik7CiAgICAgc2V0RW5hYmxlZChmYWxzZSk7CiAKICAgICAvLyB3ZSdsbCBzZXQgdGhl
IGNhY2hlIHdoZW4gd2Uga25vdyB3aGF0J3MgZ29pbmcgb24KICAgICBzZXRDYWNoZU1vZGUoTm9D
YWNoZSk7CisKKyAgICBjb25uZWN0KHRoaXMsIFNJR05BTChub3RpZnlBbmltYXRpb25TdGFydGVk
QXN5bmMoKSksIHRoaXMsIFNMT1Qobm90aWZ5QW5pbWF0aW9uU3RhcnRlZCgpKSwgUXQ6OlF1ZXVl
ZENvbm5lY3Rpb24pOwogfQogCiBHcmFwaGljc0xheWVyUXRJbXBsOjp+R3JhcGhpY3NMYXllclF0
SW1wbCgpCkBAIC0yMDMsMjIgKzIxNSw0MiBAQCBHcmFwaGljc0xheWVyUXRJbXBsOjp+R3JhcGhp
Y3NMYXllclF0SW1wbCgpCiAgICAgICAgICAgICBkZWxldGUgYW5pbTsKIH0KIAordm9pZCBHcmFw
aGljc0xheWVyUXRJbXBsOjphZGp1c3RDYWNoaW5nUmVjdXJzaXZlbHkoYm9vbCBhbmltYXRpb25J
c1J1bm5pbmcpCit7CisgICAgLy8gb3B0aW1pemF0aW9uOiB3ZSBtYWtlIHN1cmUgYWxsIG91ciBj
aGlsZHJlbiBoYXZlIEl0ZW1Db29yZGluYXRlQ2FjaGUgLQorICAgIC8vIG90aGVyd2lzZSB3ZSBl
bmQgdXAgcmUtcmVuZGVyaW5nIHRoZW0gZHVyaW5nIHRoZSBhbmltYXRpb24KKyAgICBjb25zdCBR
TGlzdDxRR3JhcGhpY3NJdGVtKj4gY2hpbGRyZW4gPSBjaGlsZEl0ZW1zKCk7CisKKyAgICBmb3Ig
KFFMaXN0PFFHcmFwaGljc0l0ZW0qPjo6Y29uc3RfaXRlcmF0b3IgaXQgPSBjaGlsZHJlbi5iZWdp
bigpOyBpdCAhPSBjaGlsZHJlbi5lbmQoKTsgKytpdCkgeworICAgICAgICBpZiAoUUdyYXBoaWNz
SXRlbSogaXRlbSA9ICppdCkKKyAgICAgICAgICAgIGlmIChHcmFwaGljc0xheWVyUXRJbXBsKiBs
YXllciA9IHFvYmplY3RfY2FzdDxHcmFwaGljc0xheWVyUXRJbXBsKj4oaXRlbS0+dG9HcmFwaGlj
c09iamVjdCgpKSkgeworICAgICAgICAgICAgICAgIGlmIChsYXllci0+bV9sYXllci0+ZHJhd3ND
b250ZW50KCkgJiYgbGF5ZXItPm1fY3VycmVudENvbnRlbnQuY29udGVudFR5cGUgPT0gSFRNTENv
bnRlbnRUeXBlKQorICAgICAgICAgICAgICAgICAgICBsYXllci0+c2V0Q2FjaGVNb2RlKGFuaW1h
dGlvbklzUnVubmluZyA/IFFHcmFwaGljc0l0ZW06Okl0ZW1Db29yZGluYXRlQ2FjaGUgOiBRR3Jh
cGhpY3NJdGVtOjpEZXZpY2VDb29yZGluYXRlQ2FjaGUpOworICAgICAgICAgICAgfQorICAgIH0g
ICAgCit9CisKIHZvaWQgR3JhcGhpY3NMYXllclF0SW1wbDo6c2V0QmFzZVRyYW5zZm9ybShjb25z
dCBRVHJhbnNmb3JtJiB0cmFuc2Zvcm0pCiB7CiAgICAgaWYgKCFtX2xheWVyKQogICAgICAgICBy
ZXR1cm47Ci0gICAgLy8gd2Via2l0IGhhcyByZWxhdGl2ZS10by1zaXplIG9yaWdpblBvaW50LCBn
cmFwaGljcy12aWV3IGhhcyBhIHBpeGVsIG9yaWdpblBvaW50Ci0gICAgLy8gaGVyZSB3ZSBjb252
ZXJ0Ci0gICAgUVBvaW50RiBvcmlnaW5UcmFuc2xhdGUoCi0gICAgICAgICAgICBtX2xheWVyLT5h
bmNob3JQb2ludCgpLngoKSAqIG1fbGF5ZXItPnNpemUoKS53aWR0aCgpLCBtX2xheWVyLT5hbmNo
b3JQb2ludCgpLnkoKSAqIG1fbGF5ZXItPnNpemUoKS5oZWlnaHQoKSk7Ci0KLSAgICByZXNldFRy
YW5zZm9ybSgpOwotCi0gICAgLy8gd2UgaGF2ZSB0byBtYW5hZ2UgdGhpcyBvdXJzZWx2ZXMgYmVj
YXVzZSBRR3JhcGhpY3NWaWV3J3MgdHJhbnNmb3JtT3JpZ2luIGlzIGluY29tcGxldGUKLSAgICB0
cmFuc2xhdGUob3JpZ2luVHJhbnNsYXRlLngoKSwgb3JpZ2luVHJhbnNsYXRlLnkoKSk7CisgICAg
Ly8gd2Via2l0IGhhcyByZWxhdGl2ZS10by1zaXplIG9yaWdpblBvaW50LCBncmFwaGljcy12aWV3
IGhhcyBhIHBpeGVsIG9yaWdpblBvaW50LCBoZXJlIHdlIGNvbnZlcnQKKyAgICAvLyB3ZSBoYXZl
IHRvIG1hbmFnZSB0aGlzIG91cnNlbHZlcyBiZWNhdXNlIFFHcmFwaGljc1ZpZXcncyB0cmFuc2Zv
cm1PcmlnaW4gaXMgaW5jb21wYXRpYmxlCisgICAgY29uc3QgcXJlYWwgeCA9IG1fbGF5ZXItPmFu
Y2hvclBvaW50KCkueCgpICogbV9sYXllci0+c2l6ZSgpLndpZHRoKCk7CisgICAgY29uc3QgcXJl
YWwgeSA9IG1fbGF5ZXItPmFuY2hvclBvaW50KCkueSgpICogbV9sYXllci0+c2l6ZSgpLmhlaWdo
dCgpOworICAgIHNldFRyYW5zZm9ybShRVHJhbnNmb3JtOjpmcm9tVHJhbnNsYXRlKHgsIHkpKTsK
ICAgICBzZXRUcmFuc2Zvcm0odHJhbnNmb3JtLCB0cnVlKTsKLSAgICB0cmFuc2xhdGUoLW9yaWdp
blRyYW5zbGF0ZS54KCksIC1vcmlnaW5UcmFuc2xhdGUueSgpKTsKLSAgICBtX2Jhc2VUcmFuc2Zv
bSA9IHRyYW5zZm9ybTsKKyAgICB0cmFuc2xhdGUoLXgsIC15KTsKKyAgICBtX2Jhc2VUcmFuc2Zv
cm0gPSB0cmFuc2Zvcm07Cit9CisKK2Jvb2wgR3JhcGhpY3NMYXllclF0SW1wbDo6aXNUcmFuc2Zv
cm1BbmltYXRpb25SdW5uaW5nKCkgY29uc3QKK3sKKyAgICBpZiAobV90cmFuc2Zvcm1BbmltYXRp
b25SdW5uaW5nKQorICAgICAgICByZXR1cm4gdHJ1ZTsKKyAgICBpZiAoR3JhcGhpY3NMYXllclF0
SW1wbCogcGFyZW50ID0gcW9iamVjdF9jYXN0PEdyYXBoaWNzTGF5ZXJRdEltcGwqPihwYXJlbnRP
YmplY3QoKSkpCisgICAgICAgIHJldHVybiBwYXJlbnQtPmlzVHJhbnNmb3JtQW5pbWF0aW9uUnVu
bmluZygpOworICAgIHJldHVybiBmYWxzZTsKIH0KIAogUVBhaW50ZXJQYXRoIEdyYXBoaWNzTGF5
ZXJRdEltcGw6Om9wYXF1ZUFyZWEoKSBjb25zdApAQCAtMjcwLDQyICszMDIsMzEgQEAgdm9pZCBH
cmFwaGljc0xheWVyUXRJbXBsOjpwYWludChRUGFpbnRlciogcGFpbnRlciwgY29uc3QgUVN0eWxl
T3B0aW9uR3JhcGhpY3NJdGUKICAgICBkcmF3Q29udGVudHMocGFpbnRlciwgb3B0aW9uLT5leHBv
c2VkUmVjdCk7CiB9CiAKLXZvaWQgR3JhcGhpY3NMYXllclF0SW1wbDo6ZHJhd0NvbnRlbnRzKFFQ
YWludGVyKiBwYWludGVyLCBjb25zdCBRUmVjdEYmIHIsIGJvb2wgbWFzaykKK3ZvaWQgR3JhcGhp
Y3NMYXllclF0SW1wbDo6ZHJhd0NvbnRlbnRzKFFQYWludGVyKiBwYWludGVyLCBjb25zdCBRUmVj
dEYmIGV4cG9zZWRSZWN0LCBib29sIG1hc2spCiB7Ci0gICAgUVJlY3QgcmVjdCA9IHIudG9BbGln
bmVkUmVjdCgpOwotICAgIAotICAgIGlmIChtX2N1cnJlbnRDb250ZW50LmNvbnRlbnRUeXBlICE9
IEhUTUxDb250ZW50VHlwZSAmJiAhbV9zdGF0ZS5jb250ZW50c1JlY3QuaXNFbXB0eSgpKQotICAg
ICAgICByZWN0ID0gcmVjdC5pbnRlcnNlY3RlZChtX3N0YXRlLmNvbnRlbnRzUmVjdCk7Ci0KICAg
ICBpZiAobV9jdXJyZW50Q29udGVudC5iYWNrZ3JvdW5kQ29sb3IuaXNWYWxpZCgpKQotICAgICAg
ICBwYWludGVyLT5maWxsUmVjdChyLCBRQ29sb3IobV9jdXJyZW50Q29udGVudC5iYWNrZ3JvdW5k
Q29sb3IpKTsKKyAgICAgICAgcGFpbnRlci0+ZmlsbFJlY3QoZXhwb3NlZFJlY3QsIFFDb2xvciht
X2N1cnJlbnRDb250ZW50LmJhY2tncm91bmRDb2xvcikpOwogCi0gICAgaWYgKCFyZWN0LmlzRW1w
dHkoKSkgewotICAgICAgICBzd2l0Y2ggKG1fY3VycmVudENvbnRlbnQuY29udGVudFR5cGUpIHsK
LSAgICAgICAgY2FzZSBQaXhtYXBDb250ZW50VHlwZToKLSAgICAgICAgICAgIC8vIHdlIGhhdmUg
dG8gc2NhbGUgdGhlIGltYWdlIHRvIHRoZSBjb250ZW50c1JlY3QKLSAgICAgICAgICAgIC8vIEZJ
WE1FOiBhIGJldHRlciB3YXkgd291bGQgcHJvYmFibHkgYmUgZHJhd1BpeG1hcCB3aXRoIGEgc3Jj
L3RhcmdldCByZWN0Ci0gICAgICAgICAgICBwYWludGVyLT5kcmF3UGl4bWFwKHJlY3QudG9wTGVm
dCgpLCBtX2N1cnJlbnRDb250ZW50LnBpeG1hcC5zY2FsZWQobV9zdGF0ZS5jb250ZW50c1JlY3Qu
c2l6ZSgpKSwgcik7Ci0gICAgICAgICAgICBicmVhazsKLSAgICAgICAgY2FzZSBDb2xvckNvbnRl
bnRUeXBlOgotICAgICAgICAgICAgcGFpbnRlci0+ZmlsbFJlY3QocmVjdCwgbV9jdXJyZW50Q29u
dGVudC5jb250ZW50c0JhY2tncm91bmRDb2xvcik7Ci0gICAgICAgICAgICBicmVhazsKLSAgICAg
ICAgZGVmYXVsdDoKLSAgICAgICAgICAgIGlmIChtX3N0YXRlLmRyYXdzQ29udGVudCkgewotICAg
ICAgICAgICAgICAgIC8vIHRoaXMgaXMgdGhlICJleHBlbnNpdmUiIGJpdC4gd2UgdHJ5IHRvIG1p
bmltaXplIGNhbGxzIHRvIHRoaXMKLSAgICAgICAgICAgICAgICAvLyBuZWNrIG9mIHRoZSB3b29k
cyBieSBwcm9wZXIgY2FjaGluZwotICAgICAgICAgICAgICAgIEdyYXBoaWNzQ29udGV4dCBnYyhw
YWludGVyKTsKLSAgICAgICAgICAgICAgICBtX2xheWVyLT5wYWludEdyYXBoaWNzTGF5ZXJDb250
ZW50cyhnYywgcmVjdCk7Ci0gICAgICAgICAgICB9Ci0gICAgICAgICAgICBicmVhazsKKyAgICBz
d2l0Y2ggKG1fY3VycmVudENvbnRlbnQuY29udGVudFR5cGUpIHsKKyAgICBjYXNlIFBpeG1hcENv
bnRlbnRUeXBlOgorICAgICAgICBwYWludGVyLT5kcmF3UGl4bWFwKG1fc3RhdGUuY29udGVudHNS
ZWN0LCBtX2N1cnJlbnRDb250ZW50LnBpeG1hcCk7CisgICAgICAgIGJyZWFrOworICAgIGNhc2Ug
Q29sb3JDb250ZW50VHlwZToKKyAgICAgICAgcGFpbnRlci0+ZmlsbFJlY3QobV9zdGF0ZS5jb250
ZW50c1JlY3QsIG1fY3VycmVudENvbnRlbnQuY29udGVudHNCYWNrZ3JvdW5kQ29sb3IpOworICAg
ICAgICBicmVhazsKKyAgICBkZWZhdWx0OgorICAgICAgICBpZiAobV9zdGF0ZS5kcmF3c0NvbnRl
bnQpIHsKKyAgICAgICAgICAgIC8vIHRoaXMgaXMgdGhlICJleHBlbnNpdmUiIGJpdC4gd2UgdHJ5
IHRvIG1pbmltaXplIGNhbGxzIHRvIHRoaXMgbmVjayBvZiB0aGUgd29vZHMgYnkgcHJvcGVyIGNh
Y2hpbmcKKyAgICAgICAgICAgIEdyYXBoaWNzQ29udGV4dCBnYyhwYWludGVyKTsKKyAgICAgICAg
ICAgIG1fbGF5ZXItPnBhaW50R3JhcGhpY3NMYXllckNvbnRlbnRzKGdjLCBleHBvc2VkUmVjdC50
b0FsaWduZWRSZWN0KCkpOwogICAgICAgICB9CisgICAgICAgIGJyZWFrOwogICAgIH0KIH0KIAog
dm9pZCBHcmFwaGljc0xheWVyUXRJbXBsOjpub3RpZnlDaGFuZ2UoQ2hhbmdlTWFzayBjaGFuZ2VN
YXNrKQogewotICAgIGlmICghdGhpcykKLSAgICAgICAgcmV0dXJuOworICAgIFFfQVNTRVJUKHRo
aXMpOwogCiAgICAgbV9jaGFuZ2VNYXNrIHw9IGNoYW5nZU1hc2s7CiAKQEAgLTM0MiwxNCArMzYz
LDE0IEBAIHZvaWQgR3JhcGhpY3NMYXllclF0SW1wbDo6Zmx1c2hDaGFuZ2VzKGJvb2wgcmVjdXJz
aXZlKQogICAgICAgICBjb25zdCBRU2V0PFFHcmFwaGljc0l0ZW0qPiBjdXJyZW50Q2hpbGRyZW4g
PSBjaGlsZEl0ZW1zKCkudG9TZXQoKTsKICAgICAgICAgY29uc3QgUVNldDxRR3JhcGhpY3NJdGVt
Kj4gY2hpbGRyZW5Ub0FkZCA9IG5ld0NoaWxkcmVuIC0gY3VycmVudENoaWxkcmVuOwogICAgICAg
ICBjb25zdCBRU2V0PFFHcmFwaGljc0l0ZW0qPiBjaGlsZHJlblRvUmVtb3ZlID0gY3VycmVudENo
aWxkcmVuIC0gbmV3Q2hpbGRyZW47Ci0gICAgICAgIGZvciAoUVNldDxRR3JhcGhpY3NJdGVtKj46
OmNvbnN0X2l0ZXJhdG9yIGl0ID0gY2hpbGRyZW5Ub0FkZC5iZWdpbigpOyBpdCAhPSBjaGlsZHJl
blRvQWRkLmVuZCgpOyArK2l0KSB7CisKKyAgICAgICAgZm9yIChRU2V0PFFHcmFwaGljc0l0ZW0q
Pjo6Y29uc3RfaXRlcmF0b3IgaXQgPSBjaGlsZHJlblRvQWRkLmJlZ2luKCk7IGl0ICE9IGNoaWxk
cmVuVG9BZGQuZW5kKCk7ICsraXQpCiAgICAgICAgICAgICAgaWYgKFFHcmFwaGljc0l0ZW0qIHcg
PSAqaXQpCiAgICAgICAgICAgICAgICAgdy0+c2V0UGFyZW50SXRlbSh0aGlzKTsKLSAgICAgICAg
fQotICAgICAgICBmb3IgKFFTZXQ8UUdyYXBoaWNzSXRlbSo+Ojpjb25zdF9pdGVyYXRvciBpdCA9
IGNoaWxkcmVuVG9SZW1vdmUuYmVnaW4oKTsgaXQgIT0gY2hpbGRyZW5Ub1JlbW92ZS5lbmQoKTsg
KytpdCkgeworCisgICAgICAgIGZvciAoUVNldDxRR3JhcGhpY3NJdGVtKj46OmNvbnN0X2l0ZXJh
dG9yIGl0ID0gY2hpbGRyZW5Ub1JlbW92ZS5iZWdpbigpOyBpdCAhPSBjaGlsZHJlblRvUmVtb3Zl
LmVuZCgpOyArK2l0KQogICAgICAgICAgICAgIGlmIChRR3JhcGhpY3NJdGVtKiB3ID0gKml0KQog
ICAgICAgICAgICAgICAgIHctPnNldFBhcmVudEl0ZW0oMCk7Ci0gICAgICAgIH0KIAogICAgICAg
ICAvLyBjaGlsZHJlbiBhcmUgb3JkZXJlZCBieSB6LXZhbHVlLCBsZXQgZ3JhcGhpY3MtdmlldyBr
bm93LgogICAgICAgICBmb3IgKHNpemVfdCBpID0gMDsgaSA8IG5ld0NoaWxkcmVuVmVjdG9yLnNp
emUoKTsgKytpKQpAQCAtMzgzLDE3ICs0MDQsMTcgQEAgdm9pZCBHcmFwaGljc0xheWVyUXRJbXBs
OjpmbHVzaENoYW5nZXMoYm9vbCByZWN1cnNpdmUpCiAgICAgICAgIC8vIHRoZSBhbmNob3ItcG9p
bnQsIHRyYW5zZm9ybSBhbmQgc2l6ZSBmcm9tIFdlYkNvcmUgYWxsIGFmZmVjdCB0aGUgb25lCiAg
ICAgICAgIC8vIHRoYXQgd2UgZ2l2ZSBRdAogICAgICAgICBpZiAobV9zdGF0ZS50cmFuc2Zvcm0g
IT0gbV9sYXllci0+dHJhbnNmb3JtKCkgfHwgbV9zdGF0ZS5hbmNob3JQb2ludCAhPSBtX2xheWVy
LT5hbmNob3JQb2ludCgpIHx8IG1fc3RhdGUuc2l6ZSAhPSBtX2xheWVyLT5zaXplKCkpCi0gICAg
ICAgICAgICBzZXRCYXNlVHJhbnNmb3JtKFFUcmFuc2Zvcm0obV9sYXllci0+dHJhbnNmb3JtKCkp
KTsKKyAgICAgICAgICAgIHNldEJhc2VUcmFuc2Zvcm0obV9sYXllci0+dHJhbnNmb3JtKCkpOwog
ICAgIH0KIAogICAgIGlmIChtX2NoYW5nZU1hc2sgJiAoQ29udGVudENoYW5nZSB8IERyYXdzQ29u
dGVudENoYW5nZSkpIHsKICAgICAgICAgc3dpdGNoIChtX3BlbmRpbmdDb250ZW50LmNvbnRlbnRU
eXBlKSB7CiAgICAgICAgIGNhc2UgUGl4bWFwQ29udGVudFR5cGU6Ci0gICAgICAgICAgICAvLyB3
ZSBuZWVkIGNhY2hlIGV2ZW4gZm9yIGltYWdlcywgYmVjYXVzZSB0aGV5IG5lZWQgdG8gYmUgcmVz
aXplZAotICAgICAgICAgICAgLy8gdG8gdGhlIGNvbnRlbnRzIHJlY3QuIG1heWJlIHRoaXMgY2Fu
IGJlIG9wdGltaXplZCB0aG91Z2gKLSAgICAgICAgICAgIHNldENhY2hlTW9kZShtX3RyYW5zZm9y
bUFuaW1hdGlvblJ1bm5pbmcgPyBJdGVtQ29vcmRpbmF0ZUNhY2hlIDogRGV2aWNlQ29vcmRpbmF0
ZUNhY2hlKTsKICAgICAgICAgICAgIHVwZGF0ZSgpOwogICAgICAgICAgICAgc2V0RmxhZyhJdGVt
SGFzTm9Db250ZW50cywgZmFsc2UpOworCisgICAgICAgICAgICAvLyB3ZSBvbmx5IHVzZSBJdGVt
VXNlc0V4dGVuZGVkU3R5bGVPcHRpb24gZm9yIEhUTUwgY29udGVudCAtIHBpeG1hcCBjYW4gYmUg
aGFuZGxlZCBiZXR0ZXIgd2l0aCByZWd1bGFyIGNsaXBwaW5nCisgICAgICAgICAgICBzZXRGbGFn
KFFHcmFwaGljc0l0ZW06Okl0ZW1Vc2VzRXh0ZW5kZWRTdHlsZU9wdGlvbiwgZmFsc2UpOwogICAg
ICAgICAgICAgYnJlYWs7CiAKICAgICAgICAgY2FzZSBDb2xvckNvbnRlbnRUeXBlOgpAQCAtNDAz
LDYgKzQyNCw5IEBAIHZvaWQgR3JhcGhpY3NMYXllclF0SW1wbDo6Zmx1c2hDaGFuZ2VzKGJvb2wg
cmVjdXJzaXZlKQogICAgICAgICAgICAgICAgIHVwZGF0ZSgpOwogICAgICAgICAgICAgbV9zdGF0
ZS5kcmF3c0NvbnRlbnQgPSBmYWxzZTsKICAgICAgICAgICAgIHNldEZsYWcoSXRlbUhhc05vQ29u
dGVudHMsIGZhbHNlKTsKKworICAgICAgICAgICAgLy8gd2Ugb25seSB1c2UgSXRlbVVzZXNFeHRl
bmRlZFN0eWxlT3B0aW9uIGZvciBIVE1MIGNvbnRlbnQgLSBjb2xvcnMgZG9uJ3QgZ2FpbiBtdWNo
IGZyb20gdGhhdCBhbnl3YXkKKyAgICAgICAgICAgIHNldEZsYWcoUUdyYXBoaWNzSXRlbTo6SXRl
bVVzZXNFeHRlbmRlZFN0eWxlT3B0aW9uLCBmYWxzZSk7CiAgICAgICAgICAgICBicmVhazsKIAog
ICAgICAgICBjYXNlIEhUTUxDb250ZW50VHlwZToKQEAgLTQxMCw4ICs0MzQsMTYgQEAgdm9pZCBH
cmFwaGljc0xheWVyUXRJbXBsOjpmbHVzaENoYW5nZXMoYm9vbCByZWN1cnNpdmUpCiAgICAgICAg
ICAgICAgICAgdXBkYXRlKCk7CiAgICAgICAgICAgICBpZiAoIW1fc3RhdGUuZHJhd3NDb250ZW50
ICYmIG1fbGF5ZXItPmRyYXdzQ29udGVudCgpKQogICAgICAgICAgICAgICAgIHVwZGF0ZSgpOwot
ICAgICAgICAgICAgaWYgKG1fbGF5ZXItPmRyYXdzQ29udGVudCgpKQotICAgICAgICAgICAgICAg
IHNldENhY2hlTW9kZShtX3RyYW5zZm9ybUFuaW1hdGlvblJ1bm5pbmcgPyBJdGVtQ29vcmRpbmF0
ZUNhY2hlIDogRGV2aWNlQ29vcmRpbmF0ZUNhY2hlKTsKKyAgICAgICAgICAgICAgICBpZiAobV9s
YXllci0+ZHJhd3NDb250ZW50KCkpIHsKKyAgICAgICAgICAgICAgICAgICAgY29uc3QgUUdyYXBo
aWNzSXRlbTo6Q2FjaGVNb2RlIG1ld0NhY2hlTW9kZSA9IGlzVHJhbnNmb3JtQW5pbWF0aW9uUnVu
bmluZygpID8gSXRlbUNvb3JkaW5hdGVDYWNoZSA6IERldmljZUNvb3JkaW5hdGVDYWNoZTsKKwor
ICAgICAgICAgICAgICAgICAgICAvLyBvcHRpbWl6YXRpb246IFFHcmFwaGljc0l0ZW0gZG9lc24n
dCBhbHdheXMgcGVyZm9ybSB0aGlzIHRlc3QKKyAgICAgICAgICAgICAgICAgICAgaWYgKG1ld0Nh
Y2hlTW9kZSAhPSBjYWNoZU1vZGUoKSkKKyAgICAgICAgICAgICAgICAgICAgICAgIHNldENhY2hl
TW9kZShtZXdDYWNoZU1vZGUpOworCisgICAgICAgICAgICAgICAgICAgIC8vIEhUTUwgY29udGVu
dDogd2Ugd2FudCB0byB1c2UgZXhwb3NlZFJlY3Qgc28gd2UgZG9uJ3QgdXNlIFdlYkNvcmUgcmVu
ZGVyaW5nIGlmIHdlIGRvbid0IGhhdmUgdG8KKyAgICAgICAgICAgICAgICAgICAgc2V0RmxhZyhR
R3JhcGhpY3NJdGVtOjpJdGVtVXNlc0V4dGVuZGVkU3R5bGVPcHRpb24sIHRydWUpOworICAgICAg
ICAgICAgICAgIH0KICAgICAgICAgICAgIGVsc2UKICAgICAgICAgICAgICAgICBzZXRDYWNoZU1v
ZGUoTm9DYWNoZSk7CiAKQEAgLTQ0OCw3ICs0ODAsNyBAQCB2b2lkIEdyYXBoaWNzTGF5ZXJRdElt
cGw6OmZsdXNoQ2hhbmdlcyhib29sIHJlY3Vyc2l2ZSkKICAgICAgICAgdXBkYXRlKCk7CiAKICAg
ICAvLyBGSVhNRTogdGhlIGZvbGxvd2luZyBmbGFncyBhcmUgY3VycmVudGx5IG5vdCBoYW5kbGVk
LCBhcyB0aGV5IGRvbid0IGhhdmUgYSBjbGVhciB0ZXN0IG9yIGFyZSBpbiBsb3cgcHJpb3JpdHkK
LSAgICAvLyBHZW9tZXRyeU9yaWVudGF0aW9uQ2hhbmdlLCBDb250ZW50c09yaWVudGF0aW9uQ2hh
bmdlLCBCYWNrZmFjZVZpc2liaWxpdHlDaGFuZ2UsIENoaWxkcmVuVHJhbnNmb3JtQ2hhbmdlCisg
ICAgLy8gR2VvbWV0cnlPcmllbnRhdGlvbkNoYW5nZSwgQ29udGVudHNPcmllbnRhdGlvbkNoYW5n
ZSwgQmFja2ZhY2VWaXNpYmlsaXR5Q2hhbmdlLCBDaGlsZHJlblRyYW5zZm9ybUNoYW5nZSwgUHJl
c2VydmVzM0RDaGFuZ2UKIAogICAgIG1fc3RhdGUubWFza0xheWVyID0gbV9sYXllci0+bWFza0xh
eWVyKCk7CiAgICAgbV9zdGF0ZS5wb3MgPSBtX2xheWVyLT5wb3NpdGlvbigpOwpAQCAtNTIzLDkg
KzU1NSw5IEBAIHZvaWQgR3JhcGhpY3NMYXllclF0OjpzZXROZWVkc0Rpc3BsYXkoKQogfQogCiAv
LyByZWltcCBmcm9tIEdyYXBoaWNzTGF5ZXIuaAotdm9pZCBHcmFwaGljc0xheWVyUXQ6OnNldE5l
ZWRzRGlzcGxheUluUmVjdChjb25zdCBGbG9hdFJlY3QmIHIpCit2b2lkIEdyYXBoaWNzTGF5ZXJR
dDo6c2V0TmVlZHNEaXNwbGF5SW5SZWN0KGNvbnN0IEZsb2F0UmVjdCYgcmVjdCkKIHsKLSAgICBt
X2ltcGwtPm1fcGVuZGluZ0NvbnRlbnQucmVnaW9uVG9VcGRhdGV8PSBRUmVjdEYocikudG9BbGln
bmVkUmVjdCgpOworICAgIG1faW1wbC0+bV9wZW5kaW5nQ29udGVudC5yZWdpb25Ub1VwZGF0ZXw9
IFFSZWN0RihyZWN0KS50b0FsaWduZWRSZWN0KCk7CiAgICAgbV9pbXBsLT5ub3RpZnlDaGFuZ2Uo
R3JhcGhpY3NMYXllclF0SW1wbDo6RGlzcGxheUNoYW5nZSk7CiB9CiAKQEAgLTgwNywxNiArODM5
LDE2IEBAIHN0YXRpYyBpbmxpbmUgZG91YmxlIHNvbHZlQ3ViaWNCZXppZXJGdW5jdGlvbihxcmVh
bCBwMXgsIHFyZWFsIHAxeSwgcXJlYWwgcDJ4LCBxCiAvLyBVc2luZyBlYXNpbmctY3VydmVzIHdv
dWxkIHByb2JhYmx5IHdvcmsgZm9yIHNvbWUgb2YgdGhlIGNhc2VzLCBidXQgd291bGRuJ3QgcmVh
bGx5IGJ1eSB1cyBhbnl0aGluZyBhcyB3ZSdkIGhhdmUgdG8gY29udmVydCB0aGUgYmV6aWVyIGZ1
bmN0aW9uIGJhY2sgdG8gYW4gZWFzaW5nIGN1cnZlCiBzdGF0aWMgaW5saW5lIHFyZWFsIGFwcGx5
VGltaW5nRnVuY3Rpb24oY29uc3QgVGltaW5nRnVuY3Rpb24mIHRpbWluZ0Z1bmN0aW9uLCBxcmVh
bCBwcm9ncmVzcywgaW50IGR1cmF0aW9uKQogewotICAgIGlmICh0aW1pbmdGdW5jdGlvbi50eXBl
KCkgPT0gTGluZWFyVGltaW5nRnVuY3Rpb24pCisgICAgICAgIGlmICh0aW1pbmdGdW5jdGlvbi50
eXBlKCkgPT0gTGluZWFyVGltaW5nRnVuY3Rpb24pCisgICAgICAgICAgICByZXR1cm4gcHJvZ3Jl
c3M7CisgICAgICAgIGlmICh0aW1pbmdGdW5jdGlvbi50eXBlKCkgPT0gQ3ViaWNCZXppZXJUaW1p
bmdGdW5jdGlvbikgeworICAgICAgICAgICAgcmV0dXJuIHNvbHZlQ3ViaWNCZXppZXJGdW5jdGlv
bih0aW1pbmdGdW5jdGlvbi54MSgpLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICB0aW1pbmdGdW5jdGlvbi55MSgpLAorICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICB0aW1pbmdGdW5jdGlvbi54MigpLAorICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICB0aW1pbmdGdW5jdGlvbi55MigpLAorICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBkb3VibGUocHJvZ3Jlc3MpLCBk
b3VibGUoZHVyYXRpb24pIC8gMTAwMCk7CisgICAgICAgIH0KICAgICAgICAgcmV0dXJuIHByb2dy
ZXNzOwotICAgIGlmICh0aW1pbmdGdW5jdGlvbi50eXBlKCkgPT0gQ3ViaWNCZXppZXJUaW1pbmdG
dW5jdGlvbikgewotICAgICAgICByZXR1cm4gc29sdmVDdWJpY0JlemllckZ1bmN0aW9uKHRpbWlu
Z0Z1bmN0aW9uLngxKCksCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
dGltaW5nRnVuY3Rpb24ueTEoKSwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICB0aW1pbmdGdW5jdGlvbi54MigpLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgIHRpbWluZ0Z1bmN0aW9uLnkyKCksCi0gICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgZG91YmxlKHByb2dyZXNzKSwgZG91YmxlKGR1cmF0aW9uKSAvIDEwMDAp
OwotICAgIH0KLSAgICByZXR1cm4gcHJvZ3Jlc3M7CiB9CiAKIC8vIGhlbHBlciBmdW5jdGlvbnMg
dG8gc2FmZWx5IGdldCBhIHZhbHVlIG91dCBvZiBXZWJDb3JlJ3MgQW5pbWF0aW9uVmFsdWUqCkBA
IC04MjYsOSArODU4LDcgQEAgc3RhdGljIHZvaWQgd2Via2l0QW5pbWF0aW9uVG9RdEFuaW1hdGlv
blZhbHVlKGNvbnN0IEFuaW1hdGlvblZhbHVlKiBhbmltYXRpb25WYWwKICAgICBpZiAoIWFuaW1h
dGlvblZhbHVlKQogICAgICAgICByZXR1cm47CiAKLSAgICBjb25zdCBUcmFuc2Zvcm1PcGVyYXRp
b25zKiBvcHMgPSBzdGF0aWNfY2FzdDxjb25zdCBUcmFuc2Zvcm1BbmltYXRpb25WYWx1ZSo+KGFu
aW1hdGlvblZhbHVlKS0+dmFsdWUoKTsKLQotICAgIGlmIChvcHMpCisgICAgaWYgKGNvbnN0IFRy
YW5zZm9ybU9wZXJhdGlvbnMqIG9wcyA9IHN0YXRpY19jYXN0PGNvbnN0IFRyYW5zZm9ybUFuaW1h
dGlvblZhbHVlKj4oYW5pbWF0aW9uVmFsdWUpLT52YWx1ZSgpKQogICAgICAgICB0cmFuc2Zvcm1P
cGVyYXRpb25zID0gKm9wczsKIH0KIApAQCAtODU2LDggKzg4Niw4IEBAIHB1YmxpYzoKICAgICAg
ICAgUUFic3RyYWN0QW5pbWF0aW9uOjp1cGRhdGVTdGF0ZShuZXdTdGF0ZSwgb2xkU3RhdGUpOwog
CiAgICAgICAgIC8vIGZvciBzb21lIHJlYXNvbiBJIGhhdmUgZG8gdGhpcyBhc3luY2hyb25vdXNs
eSAtIG9yIHRoZSBhbmltYXRpb24gd29uJ3Qgd29yawotICAgICAgICBpZiAobmV3U3RhdGUgPT0g
UnVubmluZyAmJiBvbGRTdGF0ZSA9PSBTdG9wcGVkKQotICAgICAgICAgICAgUVRpbWVyOjpzaW5n
bGVTaG90KDAsIG1fbGF5ZXIuZGF0YSgpLCBTTE9UKG5vdGlmeUFuaW1hdGlvblN0YXJ0ZWQoKSkp
OworICAgICAgICBpZiAobmV3U3RhdGUgPT0gUnVubmluZyAmJiBvbGRTdGF0ZSA9PSBTdG9wcGVk
ICYmIG1fbGF5ZXIuZGF0YSgpKQorICAgICAgICAgICAgbV9sYXllci5kYXRhKCktPm5vdGlmeUFu
aW1hdGlvblN0YXJ0ZWRBc3luYygpOwogICAgIH0KIAogICAgIHZpcnR1YWwgaW50IGR1cmF0aW9u
KCkgY29uc3QgeyByZXR1cm4gbV9kdXJhdGlvbjsgfQpAQCAtOTMyLDkgKzk2MiwxMCBAQCBwcm90
ZWN0ZWQ6CiAKICAgICAgICAgLy8gbm93IHdlIGhhdmUgYSBzb3VyY2Uga2V5ZnJhbWUsIG9yaWdp
biBrZXlmcmFtZSBhbmQgYSB0aW1pbmcgZnVuY3Rpb24KICAgICAgICAgLy8gd2UgY2FuIG5vdyBw
cm9jZXNzIHRoZSBwcm9ncmVzcyBhbmQgYXBwbHkgdGhlIGZyYW1lCi0gICAgICAgIHFyZWFsIG5v
cm1hbGl6ZWRQcm9ncmVzcyA9IChpdC5rZXkoKSA9PSBpdDIua2V5KCkpID8gMCA6IChwcm9ncmVz
cyAtIGl0LmtleSgpKSAvIChpdDIua2V5KCkgLSBpdC5rZXkoKSk7Ci0gICAgICAgIG5vcm1hbGl6
ZWRQcm9ncmVzcyA9IGFwcGx5VGltaW5nRnVuY3Rpb24odGltaW5nRnVuYywgbm9ybWFsaXplZFBy
b2dyZXNzLCBkdXJhdGlvbigpIC8gMTAwMCk7Ci0gICAgICAgIGFwcGx5RnJhbWUoZnJvbVZhbHVl
LCB0b1ZhbHVlLCBub3JtYWxpemVkUHJvZ3Jlc3MpOworICAgICAgICBwcm9ncmVzcyA9ICghcHJv
Z3Jlc3MgfHwgcHJvZ3Jlc3MgPT0gMSB8fCBpdC5rZXkoKSA9PSBpdDIua2V5KCkpCisgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgID8gcHJvZ3Jlc3MKKyAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgOiBhcHBseVRpbWluZ0Z1bmN0aW9uKHRpbWlu
Z0Z1bmMsIChwcm9ncmVzcyAtIGl0LmtleSgpKSAvIChpdDIua2V5KCkgLSBpdC5rZXkoKSksIGR1
cmF0aW9uKCkgLyAxMDAwKTsKKyAgICAgICAgYXBwbHlGcmFtZShmcm9tVmFsdWUsIHRvVmFsdWUs
IHByb2dyZXNzKTsKICAgICB9CiAKICAgICBRTWFwPHFyZWFsLCBLZXlmcmFtZVZhbHVlUXQ8VD4g
PiBtX2tleWZyYW1lVmFsdWVzOwpAQCAtOTQzLDcgKzk3NCw3IEBAIHByb3RlY3RlZDoKIGNsYXNz
IFRyYW5zZm9ybUFuaW1hdGlvblF0IDogcHVibGljIEFuaW1hdGlvblF0PFRyYW5zZm9ybU9wZXJh
dGlvbnM+IHsKIHB1YmxpYzoKICAgICBUcmFuc2Zvcm1BbmltYXRpb25RdChHcmFwaGljc0xheWVy
UXRJbXBsKiBsYXllciwgY29uc3QgS2V5ZnJhbWVWYWx1ZUxpc3QmIHZhbHVlcywgY29uc3QgSW50
U2l6ZSYgYm94U2l6ZSwgY29uc3QgQW5pbWF0aW9uKiBhbmltLCBjb25zdCBRU3RyaW5nICYgbmFt
ZSkKLSAgICAgICAgICAgICAgICA6IEFuaW1hdGlvblF0PFRyYW5zZm9ybU9wZXJhdGlvbnM+KGxh
eWVyLCB2YWx1ZXMsIGJveFNpemUsIGFuaW0sIG5hbWUpCisgICAgICAgIDogQW5pbWF0aW9uUXQ8
VHJhbnNmb3JtT3BlcmF0aW9ucz4obGF5ZXIsIHZhbHVlcywgYm94U2l6ZSwgYW5pbSwgbmFtZSkK
ICAgICB7CiAgICAgfQogCkBAIC05NTIsNyArOTgzLDcgQEAgcHVibGljOgogICAgICAgICAvLyB0
aGlzIGNhbWUgdXAgZHVyaW5nIHRoZSBjb21wb3NpdGluZy9hbmltYXRpb24gTGF5b3V0VGVzdHMK
ICAgICAgICAgLy8gd2hlbiB0aGUgYW5pbWF0aW9uIGRpZXMsIHRoZSB0cmFuc2Zvcm0gaGFzIHRv
IGdvIGJhY2sgdG8gZGVmYXVsdAogICAgICAgICBpZiAobV9sYXllcikKLSAgICAgICAgICAgIG1f
bGF5ZXIuZGF0YSgpLT5zZXRCYXNlVHJhbnNmb3JtKFFUcmFuc2Zvcm0obV9sYXllci5kYXRhKCkt
Pm1fbGF5ZXItPnRyYW5zZm9ybSgpKSk7CisgICAgICAgICAgICBtX2xheWVyLmRhdGEoKS0+c2V0
QmFzZVRyYW5zZm9ybShtX2xheWVyLmRhdGEoKS0+bV9sYXllci0+dHJhbnNmb3JtKCkpOwogICAg
IH0KIAogICAgIC8vIHRoZSBpZGVhIGlzIHRoYXQgd2UgbGV0IFdlYkNvcmUgbWFuYWdlIHRoZSB0
cmFuc2Zvcm0tb3BlcmF0aW9ucwpAQCAtOTYzLDExICs5OTQsMjIgQEAgcHVibGljOgogICAgIHsK
ICAgICAgICAgVHJhbnNmb3JtYXRpb25NYXRyaXggdHJhbnNmb3JtTWF0cml4OwogCi0gICAgICAg
IC8vIHRoaXMgbG9va3Mgc2ltcGxlIGJ1dCBpcyByZWFsbHkgdHJpY2t5IHRvIGdldCByaWdodC4g
VXNlIGNhdXRpb24uCi0gICAgICAgIGZvciAoc2l6ZV90IGkgPSAwOyBpIDwgdGFyZ2V0T3BlcmF0
aW9ucy5zaXplKCk7ICsraSkKLSAgICAgICAgICAgIHRhcmdldE9wZXJhdGlvbnMub3BlcmF0aW9u
cygpW2ldLT5ibGVuZChzb3VyY2VPcGVyYXRpb25zLmF0KGkpLCBwcm9ncmVzcyktPmFwcGx5KHRy
YW5zZm9ybU1hdHJpeCwgbV9ib3hTaXplKTsKLQotICAgICAgICBtX2xheWVyLmRhdGEoKS0+c2V0
QmFzZVRyYW5zZm9ybShRVHJhbnNmb3JtKHRyYW5zZm9ybU1hdHJpeCkpOworICAgICAgICAvLyBz
b21ldGltZXMgdGhlIGFuaW1hdGlvbiB2YWx1ZXMgZnJvbSBXZWJDb3JlIGFyZSBtaXNsZWFkaW5n
IGFuZCB3ZSBoYXZlIHRvIHVzZSB0aGUgYWN0dWFsIG1hdHJpeCBhcyBzb3VyY2UKKyAgICAgICAg
Ly8gVGhlIE1hYyBpbXBsZW1lbnRhdGlvbiBzaW1wbHkgZG9lc24ndCB0cnkgdG8gYWNjZWxlcmF0
ZSB0aG9zZSAoZS5nLiAzNjBkZWcgcm90YXRpb24pLCBidXQgd2UgZG8uCisgICAgICAgIGlmIChw
cm9ncmVzcyA9PSAxIHx8ICF0YXJnZXRPcGVyYXRpb25zLnNpemUoKSB8fCBzb3VyY2VPcGVyYXRp
b25zID09IHRhcmdldE9wZXJhdGlvbnMpIHsKKyAgICAgICAgICAgIFRyYW5zZm9ybWF0aW9uTWF0
cml4IHNvdXJjZU1hdHJpeDsKKyAgICAgICAgICAgIHNvdXJjZU9wZXJhdGlvbnMuYXBwbHkobV9i
b3hTaXplLCBzb3VyY2VNYXRyaXgpOworICAgICAgICAgICAgdHJhbnNmb3JtTWF0cml4ID0gbV9z
b3VyY2VNYXRyaXg7CisgICAgICAgICAgICB0cmFuc2Zvcm1NYXRyaXguYmxlbmQoc291cmNlTWF0
cml4LCAxIC0gcHJvZ3Jlc3MpOworICAgICAgICB9IGVsc2UgaWYgKHRhcmdldE9wZXJhdGlvbnMu
c2l6ZSgpICE9IHNvdXJjZU9wZXJhdGlvbnMuc2l6ZSgpKSB7CisgICAgICAgICAgICB0cmFuc2Zv
cm1NYXRyaXggPSBtX3NvdXJjZU1hdHJpeDsKKyAgICAgICAgICAgIHRhcmdldE9wZXJhdGlvbnMu
YXBwbHkobV9ib3hTaXplLCB0cmFuc2Zvcm1NYXRyaXgpOworICAgICAgICAgICAgdHJhbnNmb3Jt
TWF0cml4LmJsZW5kKG1fc291cmNlTWF0cml4LCBwcm9ncmVzcyk7CisgICAgICAgIH0gZWxzZSB7
CisgICAgICAgICAgICBmb3IgKHNpemVfdCBpID0gMDsgaSA8IHRhcmdldE9wZXJhdGlvbnMuc2l6
ZSgpOyArK2kpCisgICAgICAgICAgICAgICAgdGFyZ2V0T3BlcmF0aW9ucy5vcGVyYXRpb25zKClb
aV0tPmJsZW5kKHNvdXJjZU9wZXJhdGlvbnMuYXQoaSksIHByb2dyZXNzKS0+YXBwbHkodHJhbnNm
b3JtTWF0cml4LCBtX2JveFNpemUpOworICAgICAgICB9CisgICAgICAgIG1fbGF5ZXIuZGF0YSgp
LT5zZXRCYXNlVHJhbnNmb3JtKHRyYW5zZm9ybU1hdHJpeCk7CiAgICAgfQogCiAgICAgdmlydHVh
bCB2b2lkIHVwZGF0ZVN0YXRlKFFBYnN0cmFjdEFuaW1hdGlvbjo6U3RhdGUgbmV3U3RhdGUsIFFB
YnN0cmFjdEFuaW1hdGlvbjo6U3RhdGUgb2xkU3RhdGUpCkBAIC05ODAsMjEgKzEwMjIsMjMgQEAg
cHVibGljOgogICAgICAgICAvLyB0byBpbmNyZWFzZSBGUFMsIHdlIHVzZSBhIGxlc3MgYWNjdXJh
dGUgY2FjaGluZyBtZWNoYW5pc20gd2hpbGUgYW5pbWF0aW9uIGlzIGdvaW5nIG9uCiAgICAgICAg
IC8vIHRoaXMgaXMgYSBVWCBjaG9pY2UgdGhhdCBzaG91bGQgcHJvYmFibHkgYmUgY3VzdG9taXph
YmxlCiAgICAgICAgIGlmIChuZXdTdGF0ZSA9PSBRQWJzdHJhY3RBbmltYXRpb246OlJ1bm5pbmcp
IHsKKyAgICAgICAgICAgIG1fc291cmNlTWF0cml4ID0gbV9sYXllci5kYXRhKCktPm1fbGF5ZXIt
PnRyYW5zZm9ybSgpOwogICAgICAgICAgICAgbV9sYXllci5kYXRhKCktPm1fdHJhbnNmb3JtQW5p
bWF0aW9uUnVubmluZyA9IHRydWU7Ci0gICAgICAgICAgICBpZiAobV9sYXllci5kYXRhKCktPmNh
Y2hlTW9kZSgpID09IFFHcmFwaGljc0l0ZW06OkRldmljZUNvb3JkaW5hdGVDYWNoZSkKLSAgICAg
ICAgICAgICAgICBtX2xheWVyLmRhdGEoKS0+c2V0Q2FjaGVNb2RlKFFHcmFwaGljc0l0ZW06Okl0
ZW1Db29yZGluYXRlQ2FjaGUpOworICAgICAgICAgICAgbV9sYXllci5kYXRhKCktPmFkanVzdENh
Y2hpbmdSZWN1cnNpdmVseSh0cnVlKTsKICAgICAgICAgfSBlbHNlIHsKICAgICAgICAgICAgIG1f
bGF5ZXIuZGF0YSgpLT5tX3RyYW5zZm9ybUFuaW1hdGlvblJ1bm5pbmcgPSBmYWxzZTsKLSAgICAg
ICAgICAgIGlmIChtX2xheWVyLmRhdGEoKS0+Y2FjaGVNb2RlKCkgPT0gUUdyYXBoaWNzSXRlbTo6
SXRlbUNvb3JkaW5hdGVDYWNoZSkKLSAgICAgICAgICAgICAgICBtX2xheWVyLmRhdGEoKS0+c2V0
Q2FjaGVNb2RlKFFHcmFwaGljc0l0ZW06OkRldmljZUNvb3JkaW5hdGVDYWNoZSk7CisgICAgICAg
ICAgICBtX2xheWVyLmRhdGEoKS0+YWRqdXN0Q2FjaGluZ1JlY3Vyc2l2ZWx5KGZhbHNlKTsKICAg
ICAgICAgfQorCiAgICAgfQorCisgICAgVHJhbnNmb3JtYXRpb25NYXRyaXggbV9zb3VyY2VNYXRy
aXg7CiB9OwogCiBjbGFzcyBPcGFjaXR5QW5pbWF0aW9uUXQgOiBwdWJsaWMgQW5pbWF0aW9uUXQ8
cXJlYWw+IHsKIHB1YmxpYzoKICAgICBPcGFjaXR5QW5pbWF0aW9uUXQoR3JhcGhpY3NMYXllclF0
SW1wbCogbGF5ZXIsIGNvbnN0IEtleWZyYW1lVmFsdWVMaXN0JiB2YWx1ZXMsIGNvbnN0IEludFNp
emUmIGJveFNpemUsIGNvbnN0IEFuaW1hdGlvbiogYW5pbSwgY29uc3QgUVN0cmluZyAmIG5hbWUp
Ci0gICAgICAgICA6IEFuaW1hdGlvblF0PHFyZWFsPihsYXllciwgdmFsdWVzLCBib3hTaXplLCBh
bmltLCBuYW1lKQorICAgICAgICAgICAgICAgIDogQW5pbWF0aW9uUXQ8cXJlYWw+KGxheWVyLCB2
YWx1ZXMsIGJveFNpemUsIGFuaW0sIG5hbWUpCiAgICAgewogICAgIH0KIApAQCAtMTAwNiw2ICsx
MDUwLDcgQEAgcHVibGljOgogICAgIHZpcnR1YWwgdm9pZCB1cGRhdGVTdGF0ZShRQWJzdHJhY3RB
bmltYXRpb246OlN0YXRlIG5ld1N0YXRlLCBRQWJzdHJhY3RBbmltYXRpb246OlN0YXRlIG9sZFN0
YXRlKQogICAgIHsKICAgICAgICAgUUFic3RyYWN0QW5pbWF0aW9uOjp1cGRhdGVTdGF0ZShuZXdT
dGF0ZSwgb2xkU3RhdGUpOworCiAgICAgICAgIGlmIChtX2xheWVyKQogICAgICAgICAgICAgbV9s
YXllci5kYXRhKCktPm1fb3BhY2l0eUFuaW1hdGlvblJ1bm5pbmcgPSAobmV3U3RhdGUgPT0gUUFi
c3RyYWN0QW5pbWF0aW9uOjpSdW5uaW5nKTsKICAgICB9CkBAIC0xMDc5LDExICsxMTI0LDEyIEBA
IHZvaWQgR3JhcGhpY3NMYXllclF0OjpyZW1vdmVBbmltYXRpb25zRm9yS2V5ZnJhbWVzKGNvbnN0
IFN0cmluZyYgbmFtZSkKIHZvaWQgR3JhcGhpY3NMYXllclF0OjpwYXVzZUFuaW1hdGlvbihjb25z
dCBTdHJpbmcmIG5hbWUsIGRvdWJsZSB0aW1lT2Zmc2V0KQogewogICAgIGZvciAoUUxpc3Q8UVdl
YWtQb2ludGVyPFFBYnN0cmFjdEFuaW1hdGlvbj4gPjo6aXRlcmF0b3IgaXQgPSBtX2ltcGwtPm1f
YW5pbWF0aW9ucy5iZWdpbigpOyBpdCAhPSBtX2ltcGwtPm1fYW5pbWF0aW9ucy5lbmQoKTsgKytp
dCkgewotICAgICAgICBpZiAoKml0KSB7Ci0gICAgICAgICAgICBBbmltYXRpb25RdEJhc2UqIGFu
aW0gPSBzdGF0aWNfY2FzdDxBbmltYXRpb25RdEJhc2UqPigoKml0KS5kYXRhKCkpOwotICAgICAg
ICAgICAgaWYgKGFuaW0gJiYgYW5pbS0+bV9rZXlmcmFtZXNOYW1lID09IFFTdHJpbmcobmFtZSkp
Ci0gICAgICAgICAgICAgICAgUVRpbWVyOjpzaW5nbGVTaG90KHRpbWVPZmZzZXQgKiAxMDAwLCBh
bmltLCBTTE9UKHBhdXNlKCkpKTsKLSAgICAgICAgfQorICAgICAgICBpZiAoISgqaXQpKQorICAg
ICAgICAgICAgY29udGludWU7CisKKyAgICAgICAgQW5pbWF0aW9uUXRCYXNlKiBhbmltID0gc3Rh
dGljX2Nhc3Q8QW5pbWF0aW9uUXRCYXNlKj4oKCppdCkuZGF0YSgpKTsKKyAgICAgICAgaWYgKGFu
aW0gJiYgYW5pbS0+bV9rZXlmcmFtZXNOYW1lID09IFFTdHJpbmcobmFtZSkpCisgICAgICAgICAg
ICBRVGltZXI6OnNpbmdsZVNob3QodGltZU9mZnNldCAqIDEwMDAsIGFuaW0sIFNMT1QocGF1c2Uo
KSkpOwogICAgIH0KIH0KIApAQCAtMTA5MiwxMyArMTEzOCwxMSBAQCB2b2lkIEdyYXBoaWNzTGF5
ZXJRdDo6c3VzcGVuZEFuaW1hdGlvbnMoZG91YmxlIHRpbWUpCiAgICAgaWYgKG1faW1wbC0+bV9z
dXNwZW5kVGltZXIuaXNBY3RpdmUoKSkgewogICAgICAgICBtX2ltcGwtPm1fc3VzcGVuZFRpbWVy
LnN0b3AoKTsKICAgICAgICAgbV9pbXBsLT5tX3N1c3BlbmRUaW1lci5zdGFydCh0aW1lICogMTAw
MCk7Ci0gICAgfSBlbHNlIHsKKyAgICB9IGVsc2UKICAgICAgICAgZm9yIChRTGlzdDxRV2Vha1Bv
aW50ZXI8UUFic3RyYWN0QW5pbWF0aW9uPiA+OjppdGVyYXRvciBpdCA9IG1faW1wbC0+bV9hbmlt
YXRpb25zLmJlZ2luKCk7IGl0ICE9IG1faW1wbC0+bV9hbmltYXRpb25zLmVuZCgpOyArK2l0KSB7
Ci0gICAgICAgICAgICBRQWJzdHJhY3RBbmltYXRpb24qIGFuaW0gPSBpdC0+ZGF0YSgpOwotICAg
ICAgICAgICAgaWYgKGFuaW0pCisgICAgICAgICAgICBpZiAoUUFic3RyYWN0QW5pbWF0aW9uKiBh
bmltID0gaXQtPmRhdGEoKSkKICAgICAgICAgICAgICAgICBhbmltLT5wYXVzZSgpOwogICAgICAg
ICB9Ci0gICAgfQogfQogCiB2b2lkIEdyYXBoaWNzTGF5ZXJRdDo6cmVzdW1lQW5pbWF0aW9ucygp
CkBAIC0xMTA2LDggKzExNTAsNyBAQCB2b2lkIEdyYXBoaWNzTGF5ZXJRdDo6cmVzdW1lQW5pbWF0
aW9ucygpCiAgICAgaWYgKG1faW1wbC0+bV9zdXNwZW5kVGltZXIuaXNBY3RpdmUoKSkgewogICAg
ICAgICBtX2ltcGwtPm1fc3VzcGVuZFRpbWVyLnN0b3AoKTsKICAgICAgICAgZm9yIChRTGlzdDxR
V2Vha1BvaW50ZXI8UUFic3RyYWN0QW5pbWF0aW9uPiA+OjppdGVyYXRvciBpdCA9IG1faW1wbC0+
bV9hbmltYXRpb25zLmJlZ2luKCk7IGl0ICE9IG1faW1wbC0+bV9hbmltYXRpb25zLmVuZCgpOyAr
K2l0KSB7Ci0gICAgICAgICAgICBRQWJzdHJhY3RBbmltYXRpb24qIGFuaW0gPSAoKml0KS5kYXRh
KCk7Ci0gICAgICAgICAgICBpZiAoYW5pbSkKKyAgICAgICAgICAgIGlmIChRQWJzdHJhY3RBbmlt
YXRpb24qIGFuaW0gPSAoKml0KS5kYXRhKCkpCiAgICAgICAgICAgICAgICAgYW5pbS0+cmVzdW1l
KCk7CiAgICAgICAgIH0KICAgICB9CmRpZmYgLS1naXQgYS9XZWJLaXQvcXQvQXBpL3FncmFwaGlj
c3dlYnZpZXcuY3BwIGIvV2ViS2l0L3F0L0FwaS9xZ3JhcGhpY3N3ZWJ2aWV3LmNwcAppbmRleCBk
OWU4YTc0Li4xYTVlMDQzIDEwMDY0NAotLS0gYS9XZWJLaXQvcXQvQXBpL3FncmFwaGljc3dlYnZp
ZXcuY3BwCisrKyBiL1dlYktpdC9xdC9BcGkvcWdyYXBoaWNzd2Vidmlldy5jcHAKQEAgLTI3LDYg
KzI3LDcgQEAKICNpbmNsdWRlICJxd2VicGFnZV9wLmgiCiAjaW5jbHVkZSAiUVdlYlBhZ2VDbGll
bnQuaCIKICNpbmNsdWRlIDxGcmFtZVZpZXcuaD4KKyNpbmNsdWRlIDxRdENvcmUvcW1ldGFvYmpl
Y3QuaD4KICNpbmNsdWRlIDxRdENvcmUvcXNoYXJlZHBvaW50ZXIuaD4KICNpbmNsdWRlIDxRdENv
cmUvcXRpbWVyLmg+CiAjaW5jbHVkZSA8UXRHdWkvcWFwcGxpY2F0aW9uLmg+CkBAIC03OCwxMyAr
NzksMTQgQEAgcHVibGljOgogICAgICAgICAsIHBhZ2UoMCkKICNpZiBVU0UoQUNDRUxFUkFURURf
Q09NUE9TSVRJTkcpCiAgICAgICAgICwgcm9vdEdyYXBoaWNzTGF5ZXIoMCkKLSAgICAgICAgLCBz
aG91bGRTeW5jKHRydWUpCisgICAgICAgICwgc2hvdWxkU3luYyhmYWxzZSkKICNlbmRpZgogICAg
IHsKICNpZiBVU0UoQUNDRUxFUkFURURfQ09NUE9TSVRJTkcpCiAgICAgICAgIC8vIHRoZSBvdmVy
bGF5IGFuZCBzdGF5cyBhbGl2ZSBmb3IgdGhlIGxpZmV0aW1lIG9mCiAgICAgICAgIC8vIHRoaXMg
UUdyYXBoaWNzV2ViVmlldyBhcyB0aGUgc2Nyb2xsYmFycyBhcmUgbmVlZGVkIHdoZW4gdGhlcmUn
cyBubyBjb21wb3NpdGluZwogICAgICAgICBxLT5zZXRGbGFnKFFHcmFwaGljc0l0ZW06Okl0ZW1V
c2VzRXh0ZW5kZWRTdHlsZU9wdGlvbik7CisgICAgICAgIHN5bmNNZXRhTWV0aG9kID0gcS0+bWV0
YU9iamVjdCgpLT5tZXRob2QocS0+bWV0YU9iamVjdCgpLT5pbmRleE9mTWV0aG9kKCJzeW5jTGF5
ZXJzKCkiKSk7CiAjZW5kaWYKICAgICB9CiAKQEAgLTEyOSw2ICsxMzEsOSBAQCBwdWJsaWM6CiAg
ICAgLy8gY29tcG9zaXRvciB0ZWxsaW5nIHVzIHRvIGRvIHNvLiBXZSdsbCBnZXQgdGhhdCBjYWxs
IGZyb20gQ2hyb21lQ2xpZW50UXQKICAgICBib29sIHNob3VsZFN5bmM7CiAKKyAgICAvLyB3ZSBo
YXZlIHRvIGZsdXNoIHF1aXRlIG9mdGVuLCBzbyB3ZSB1c2UgYSBtZXRhLW1ldGhvZCBpbnN0ZWFk
IG9mIFFUaW1lcjo6c2luZ2xlU2hvdCBmb3IgcHV0dGluZyB0aGUgZXZlbnQgaW4gdGhlIHF1ZXVl
CisgICAgUU1ldGFNZXRob2Qgc3luY01ldGFNZXRob2Q7CisKICAgICAvLyB3ZSBuZWVkIHRvIHB1
dCB0aGUgcm9vdCBncmFwaGljcyBsYXllciBiZWhpbmQgdGhlIG92ZXJsYXkgKHdoaWNoIGNvbnRh
aW5zIHRoZSBzY3JvbGxiYXIpCiAgICAgZW51bSB7IFJvb3RHcmFwaGljc0xheWVyWlZhbHVlLCBP
dmVybGF5WlZhbHVlIH07CiAjZW5kaWYKQEAgLTE3Niw3ICsxODEsNyBAQCB2b2lkIFFHcmFwaGlj
c1dlYlZpZXdQcml2YXRlOjptYXJrRm9yU3luYyhib29sIHNjaGVkdWxlU3luYykKIHsKICAgICBz
aG91bGRTeW5jID0gdHJ1ZTsKICAgICBpZiAoc2NoZWR1bGVTeW5jKQotICAgICAgICBRVGltZXI6
OnNpbmdsZVNob3QoMCwgcSwgU0xPVChzeW5jTGF5ZXJzKCkpKTsKKyAgICAgICAgc3luY01ldGFN
ZXRob2QuaW52b2tlKHEsIFF0OjpRdWV1ZWRDb25uZWN0aW9uKTsKIH0KIAogdm9pZCBRR3JhcGhp
Y3NXZWJWaWV3UHJpdmF0ZTo6dXBkYXRlQ29tcG9zaXRpbmdTY3JvbGxQb3NpdGlvbigpCkBAIC0y
MjIsNiArMjI3LDcgQEAgdm9pZCBRR3JhcGhpY3NXZWJWaWV3UHJpdmF0ZTo6dXBkYXRlKGNvbnN0
IFFSZWN0ICYgZGlydHlSZWN0KQogI2lmIFVTRShBQ0NFTEVSQVRFRF9DT01QT1NJVElORykKICAg
ICBpZiAob3ZlcmxheSkKICAgICAgICAgb3ZlcmxheS0+dXBkYXRlKFFSZWN0RihkaXJ0eVJlY3Qp
KTsKKyAgICBzeW5jTGF5ZXJzKCk7CiAjZW5kaWYKIH0KIApAQCAtNDM1LDcgKzQ0MSw2IEBAIHZv
aWQgUUdyYXBoaWNzV2ViVmlldzo6cGFpbnQoUVBhaW50ZXIqIHBhaW50ZXIsIGNvbnN0IFFTdHls
ZU9wdGlvbkdyYXBoaWNzSXRlbSoKIHsKICNpZiBVU0UoQUNDRUxFUkFURURfQ09NUE9TSVRJTkcp
CiAgICAgcGFnZSgpLT5tYWluRnJhbWUoKS0+cmVuZGVyKHBhaW50ZXIsIGQtPm92ZXJsYXkgPyBR
V2ViRnJhbWU6OkNvbnRlbnRzTGF5ZXIgOiBRV2ViRnJhbWU6OkFsbExheWVycywgb3B0aW9uLT5l
eHBvc2VkUmVjdC50b0FsaWduZWRSZWN0KCkpOwotICAgIGQtPnN5bmNMYXllcnMoKTsKICNlbHNl
CiAgICAgcGFnZSgpLT5tYWluRnJhbWUoKS0+cmVuZGVyKHBhaW50ZXIsIFFXZWJGcmFtZTo6QWxs
TGF5ZXJzLCBvcHRpb24tPmV4cG9zZWRSZWN0LnRvUmVjdCgpKTsKICNlbmRpZgpkaWZmIC0tZ2l0
IGEvV2ViS2l0L3F0L0NoYW5nZUxvZyBiL1dlYktpdC9xdC9DaGFuZ2VMb2cKaW5kZXggNmNjYTk3
Yy4uNjMyOWZhYyAxMDA2NDQKLS0tIGEvV2ViS2l0L3F0L0NoYW5nZUxvZworKysgYi9XZWJLaXQv
cXQvQ2hhbmdlTG9nCkBAIC0xLDMgKzEsMTUgQEAKKzIwMTAtMDEtMjQgIE5vJ2FtIFJvc2VudGhh
bCAgPG5vYW0ucm9zZW50aGFsQG5va2lhLmNvbT4KKworICAgICAgICBSZXZpZXdlZCBieSBOT0JP
RFkgKE9PUFMhKS4KKworICAgICAgICBbUXRdIFR1bmluZyBhbmQgb3B0aW1pemF0aW9ucyB0byBH
cmFwaGljc0xheWVyUXQuIE1haW5seSByZWR1Y2VkIHVzYWdlCisgICAgICAgIG9mIFFUaW1lcjo6
c2luZ2xlU2hvdCwgYW5kIG1vdmVkIHN5bmNMYXllcnMoKSBmcm9tIHBhaW50KCkgdG8gdXBkYXRl
KCkKKyAgICAgICAgaHR0cHM6Ly9idWdzLndlYmtpdC5vcmcvc2hvd19idWcuY2dpP2lkPTM0MDYy
CisKKyAgICAgICAgKiBBcGkvcWdyYXBoaWNzd2Vidmlldy5jcHA6CisgICAgICAgIChRR3JhcGhp
Y3NXZWJWaWV3UHJpdmF0ZTo6dXBkYXRlKTogTW92ZWQgdGhlIHN5bmMgb3BlcmF0aW9uIHRvIHVw
ZGF0ZQorICAgICAgICAoUUdyYXBoaWNzV2ViVmlldzo6cGFpbnQpOiBNb3ZlZCB0aGUgc3luYyBv
cGVyYXRpb24gdG8gdXBkYXRlCisKIDIwMTAtMDEtMjMgIEdpcmlzaCBSYW1ha3Jpc2huYW4gIDxn
aXJpc2hAZm9yd2FyZGJpYXMuaW4+CiAKICAgICAgICAgUmV2aWV3ZWQgYnkgS2VubmV0aCBSb2hk
ZSBDaHJpc3RpYW5zZW4uCi0tIAoxLjYuNi5yYzAuNjMuZzY2YWJjCgo=
</data>
<flag name="review"
          id="30409"
          type_id="1"
          status="+"
          setter="ariya.hidayat"
    />
    <flag name="commit-queue"
          id="30442"
          type_id="3"
          status="-"
          setter="commit-queue"
    />
          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>47963</attachid>
            <date>2010-02-02 12:19:28 -0800</date>
            <delta_ts>2010-02-02 14:05:13 -0800</delta_ts>
            <desc>Performance tuning to GraphicsLayerQt</desc>
            <filename>patch-34062-2.diff</filename>
            <type>text/plain</type>
            <size>27084</size>
            <attacher name="Noam Rosenthal">noam</attacher>
            
              <data encoding="base64">RnJvbSAzNDI1MTdiMTMyMTMwMjZhODE4ZWJkOGYyZDMzNzQ1OTVkMjk0MTdhIE1vbiBTZXAgMTcg
MDA6MDA6MDAgMjAwMQ0KRnJvbTogTm8nYW0gUm9zZW50aGFsIDxub2FtLnJvc2VudGhhbEBub2tp
YS5jb20+DQpEYXRlOiBTdW4sIDI0IEphbiAyMDEwIDE5OjUxOjM3IC0wODAwDQpTdWJqZWN0OiBb
UEFUQ0hdIEdyYXBoaWNzTGF5ZXJRdCBwZXJmb3JtYW5jZSB0dW5pbmcNCg0KLS0tDQogV2ViQ29y
ZS9DaGFuZ2VMb2cgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHwgICAxNyArKw0KIFdl
YkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvcXQvR3JhcGhpY3NMYXllclF0LmNwcCB8ICAyMzcgKysr
KysrKysrKysrKy0tLS0tLS0tLQ0KIFdlYktpdC9xdC9BcGkvcWdyYXBoaWNzd2Vidmlldy5jcHAg
ICAgICAgICAgICAgICB8ICAgMTEgKy0NCiBXZWJLaXQvcXQvQ2hhbmdlTG9nICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgfCAgIDEyICsNCiA0IGZpbGVzIGNoYW5nZWQsIDE3NyBpbnNlcnRp
b25zKCspLCAxMDAgZGVsZXRpb25zKC0pDQoNCmRpZmYgLS1naXQgYS9XZWJDb3JlL0NoYW5nZUxv
ZyBiL1dlYkNvcmUvQ2hhbmdlTG9nDQppbmRleCBiOWUwNWZkLi4yNzdmMDE4IDEwMDY0NA0KLS0t
IGEvV2ViQ29yZS9DaGFuZ2VMb2cNCisrKyBiL1dlYkNvcmUvQ2hhbmdlTG9nDQpAQCAtMSwzICsx
LDIxIEBADQorMjAxMC0wMS0yNCAgTm8nYW0gUm9zZW50aGFsICA8bm9hbS5yb3NlbnRoYWxAbm9r
aWEuY29tPg0KKw0KKyAgICAgICAgUmV2aWV3ZWQgYnkgTk9CT0RZIChPT1BTISkuDQorDQorICAg
ICAgICBbUXRdIFR1bmluZyBhbmQgb3B0aW1pemF0aW9ucyB0byBHcmFwaGljc0xheWVyUXQuIFJl
ZHVjZSB1bm5lY2Vzc2FyeQ0KKyAgICAgICAgcmVjYWNoaW5nLCByZW1vdmUgUVRpbWVyOjpzaW5n
bGVTaG90IGFuZCBRUGl4bWFwOjpzY2FsZWQsIG1vcmUNCisgICAgICAgIGFjY3VyYXRlIHN0cmF0
ZWd5IG9mIGhhbmRsaW5nIHRyYW5zZm9ybSBvcGVyYXRpb24gYmxlbmRzLiBSb3RhdGluZyBhDQor
ICAgICAgICBib3JkZXJlZC10YWJsZSwgZm9yIGV4YW1wbGUsIG5vdyBydW5zIGF0IDUwRlBTIGlu
c3RlYWQgb2YgNDBGUFMgb24gTWFlbW81Lg0KKw0KKyAgICAgICAgaHR0cHM6Ly9idWdzLndlYmtp
dC5vcmcvc2hvd19idWcuY2dpP2lkPTM0MDYyDQorDQorICAgICAgICBUaGlzIGlzIHRlc3RlZCBi
eSBodHRwczovL2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9MzQ0NTAsIGZwcyBtZWFz
dXJlbWVudHMuDQorDQorICAgICAgICAqIHBsYXRmb3JtL2dyYXBoaWNzL3F0L0dyYXBoaWNzTGF5
ZXJRdC5jcHA6DQorICAgICAgICAoV2ViQ29yZTo6R3JhcGhpY3NMYXllclF0SW1wbDo6Zmx1c2hD
aGFuZ2VzKTogRmluZS10dW5lIGNhY2hpbmcNCisgICAgICAgIChXZWJDb3JlOjpUcmFuc2Zvcm1B
bmltYXRpb25RdDo6VHJhbnNmb3JtQW5pbWF0aW9uUXQpOiB0cmFuc2Zvcm0gYnVncw0KKyAgICAg
ICAgKFdlYkNvcmU6Ok9wYWNpdHlBbmltYXRpb25RdDo6dXBkYXRlU3RhdGUpOiBzdHlsZSBjaGFu
Z2UNCisNCiAyMDEwLTAxLTI0ICBPbGl2ZXIgSHVudCAgPG9saXZlckBhcHBsZS5jb20+DQogDQog
ICAgICAgICBSZXZpZXdlZCBieSBEYXJpbiBBZGxlci4NCmRpZmYgLS1naXQgYS9XZWJDb3JlL3Bs
YXRmb3JtL2dyYXBoaWNzL3F0L0dyYXBoaWNzTGF5ZXJRdC5jcHAgYi9XZWJDb3JlL3BsYXRmb3Jt
L2dyYXBoaWNzL3F0L0dyYXBoaWNzTGF5ZXJRdC5jcHANCmluZGV4IDU3MTJlZWUuLmJmM2FhZGUg
MTAwNjQ0DQotLS0gYS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL3F0L0dyYXBoaWNzTGF5ZXJR
dC5jcHANCisrKyBiL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvcXQvR3JhcGhpY3NMYXllclF0
LmNwcA0KQEAgLTk5LDE0ICs5OSwyNiBAQCBwdWJsaWM6DQogICAgIC8vIG9yIENocm9tZUNsaWVu
dFF0OjpzY2hlZHVsZUNvbXBvc2l0aW5nTGF5ZXJTeW5jIChtZWFuaW5nIHRoZSBzeW5jIHdpbGwg
aGFwcGVuIEFTQVApDQogICAgIHZvaWQgZmx1c2hDaGFuZ2VzKGJvb2wgcmVjdXJzaXZlID0gdHJ1
ZSk7DQogDQorICAgIC8vIG9wdGltaXphdGlvbjogd2hlbiB3ZSBoYXZlIGFuIGFuaW1hdGlvbiBy
dW5uaW5nIG9uIGFuIGVsZW1lbnQgd2l0aCBubyBjb250ZW50cywgdGhhdCBoYXMgY2hpbGQtZWxl
bWVudHMgd2l0aCBjb250ZW50cywNCisgICAgLy8gQUxMIG9mIHRoZW0gaGF2ZSB0byBoYXZlIEl0
ZW1Db29yZGluYXRlQ2FjaGUgYW5kIG5vdCBEZXZpY2VDb29yZGluYXRlQ2FjaGUNCisgICAgdm9p
ZCBhZGp1c3RDYWNoaW5nUmVjdXJzaXZlbHkoYm9vbCBhbmltYXRpb25Jc1J1bm5pbmcpOw0KKw0K
KyAgICAvLyBvcHRpbWl6YXRpb246IHJldHVybnMgdHJ1ZSBpZiB0aGlzIG9yIGFuIGFuY2VzdG9y
IGhhcyBhIHRyYW5zZm9ybSBhbmltYXRpb24gcnVubmluZy4NCisgICAgLy8gdGhpcyBlbmFibGVz
IHVzIHRvIHVzZSBJdGVtQ29vcmRpbmF0ZXNDYWNoZSB3aGlsZSB0aGUgYW5pbWF0aW9uIGlzIHJ1
bm5pbmcsIG90aGVyd2lzZSB3ZSBoYXZlIHRvIHJlY2FjaGUgZm9yIGV2ZXJ5IGZyYW1lDQorICAg
IGJvb2wgaXNUcmFuc2Zvcm1BbmltYXRpb25SdW5uaW5nKCkgY29uc3Q7DQorDQogcHVibGljIHNs
b3RzOg0KICAgICAvLyB3ZSBuZWVkIHRvIG5vdGlmeSB0aGUgY2xpZW50IChha2EgdGhlIGxheWVy
IGNvbXBvc2l0b3IpIHdoZW4gdGhlIGFuaW1hdGlvbiBhY3R1YWxseSBzdGFydHMNCiAgICAgdm9p
ZCBub3RpZnlBbmltYXRpb25TdGFydGVkKCk7DQogDQorc2lnbmFsczoNCisgICAgLy8gb3B0aW1p
emF0aW9uOiB3ZSBkb24ndCB3YW50IHRvIHVzZSBRVGltZXI6OnNpbmdsZVNob3QNCisgICAgdm9p
ZCBub3RpZnlBbmltYXRpb25TdGFydGVkQXN5bmMoKTsNCisNCiBwdWJsaWM6DQogICAgIEdyYXBo
aWNzTGF5ZXJRdCogbV9sYXllcjsNCiANCi0gICAgUVRyYW5zZm9ybSBtX2Jhc2VUcmFuc2ZvbTsN
CisgICAgUVRyYW5zZm9ybSBtX2Jhc2VUcmFuc2Zvcm07DQogICAgIGJvb2wgbV90cmFuc2Zvcm1B
bmltYXRpb25SdW5uaW5nOw0KICAgICBib29sIG1fb3BhY2l0eUFuaW1hdGlvblJ1bm5pbmc7DQog
DQpAQCAtMTU3LDEyICsxNjksMTQgQEAgcHVibGljOg0KICAgICAgICAgYm9vbCBiYWNrZmFjZVZp
c2liaWxpdHk6IDE7DQogICAgICAgICBib29sIGRpc3RyaWJ1dGVPcGFjaXR5OiAxOw0KICAgICAg
ICAgYm9vbCBhbGlnbjogMjsNCi0gICAgICAgIFN0YXRlKCk6IG1hc2tMYXllcigwKSwgb3BhY2l0
eSgxKSwgcHJlc2VydmVzM0QoZmFsc2UpLCBtYXNrc1RvQm91bmRzKGZhbHNlKSwNCisgICAgICAg
IFN0YXRlKCk6IG1hc2tMYXllcigwKSwgb3BhY2l0eSgxLmYpLCBwcmVzZXJ2ZXMzRChmYWxzZSks
IG1hc2tzVG9Cb3VuZHMoZmFsc2UpLA0KICAgICAgICAgICAgICAgICAgIGRyYXdzQ29udGVudChm
YWxzZSksIGNvbnRlbnRzT3BhcXVlKGZhbHNlKSwgYmFja2ZhY2VWaXNpYmlsaXR5KGZhbHNlKSwN
CiAgICAgICAgICAgICAgICAgICBkaXN0cmlidXRlT3BhY2l0eShmYWxzZSkNCiAgICAgICAgIHsN
CiAgICAgICAgIH0NCiAgICAgfSBtX3N0YXRlOw0KKw0KKyAgICBmcmllbmQgY2xhc3MgQW5pbWF0
aW9uUXRCYXNlOw0KIH07DQogDQogR3JhcGhpY3NMYXllclF0SW1wbDo6R3JhcGhpY3NMYXllclF0
SW1wbChHcmFwaGljc0xheWVyUXQqIG5ld0xheWVyKQ0KQEAgLTE3MSwxNiArMTg1LDE0IEBAIEdy
YXBoaWNzTGF5ZXJRdEltcGw6OkdyYXBoaWNzTGF5ZXJRdEltcGwoR3JhcGhpY3NMYXllclF0KiBu
ZXdMYXllcikNCiAgICAgLCBtX3RyYW5zZm9ybUFuaW1hdGlvblJ1bm5pbmcoZmFsc2UpDQogICAg
ICwgbV9jaGFuZ2VNYXNrKE5vQ2hhbmdlcykNCiB7DQotICAgIC8vIGJldHRlciB0byBjYWxjdWxh
dGUgdGhlIGV4cG9zZWQgcmVjdCBpbiBRR3JhcGhpY3NWaWV3IHRoYW4gb3Zlci1yZW5kZXIgaW4g
V2ViQ29yZQ0KLSAgICAvLyBGSVhNRTogdGVzdCBkaWZmZXJlbnQgYXBwcm9hY2hlcw0KLSAgICBz
ZXRGbGFnKFFHcmFwaGljc0l0ZW06Okl0ZW1Vc2VzRXh0ZW5kZWRTdHlsZU9wdGlvbiwgdHJ1ZSk7
DQotDQogICAgIC8vIHdlIHVzZSBncmFwaGljcy12aWV3IGZvciBjb21wb3NpdGluZywgbm90IGZv
ciBpbnRlcmFjdGl2aXR5DQogICAgIHNldEFjY2VwdGVkTW91c2VCdXR0b25zKFF0OjpOb0J1dHRv
bik7DQogICAgIHNldEVuYWJsZWQoZmFsc2UpOw0KIA0KICAgICAvLyB3ZSdsbCBzZXQgdGhlIGNh
Y2hlIHdoZW4gd2Uga25vdyB3aGF0J3MgZ29pbmcgb24NCiAgICAgc2V0Q2FjaGVNb2RlKE5vQ2Fj
aGUpOw0KKw0KKyAgICBjb25uZWN0KHRoaXMsIFNJR05BTChub3RpZnlBbmltYXRpb25TdGFydGVk
QXN5bmMoKSksIHRoaXMsIFNMT1Qobm90aWZ5QW5pbWF0aW9uU3RhcnRlZCgpKSwgUXQ6OlF1ZXVl
ZENvbm5lY3Rpb24pOw0KIH0NCiANCiBHcmFwaGljc0xheWVyUXRJbXBsOjp+R3JhcGhpY3NMYXll
clF0SW1wbCgpDQpAQCAtMjAzLDIyICsyMTUsNDIgQEAgR3JhcGhpY3NMYXllclF0SW1wbDo6fkdy
YXBoaWNzTGF5ZXJRdEltcGwoKQ0KICAgICAgICAgICAgIGRlbGV0ZSBhbmltOw0KIH0NCiANCit2
b2lkIEdyYXBoaWNzTGF5ZXJRdEltcGw6OmFkanVzdENhY2hpbmdSZWN1cnNpdmVseShib29sIGFu
aW1hdGlvbklzUnVubmluZykNCit7DQorICAgIC8vIG9wdGltaXphdGlvbjogd2UgbWFrZSBzdXJl
IGFsbCBvdXIgY2hpbGRyZW4gaGF2ZSBJdGVtQ29vcmRpbmF0ZUNhY2hlIC0NCisgICAgLy8gb3Ro
ZXJ3aXNlIHdlIGVuZCB1cCByZS1yZW5kZXJpbmcgdGhlbSBkdXJpbmcgdGhlIGFuaW1hdGlvbg0K
KyAgICBjb25zdCBRTGlzdDxRR3JhcGhpY3NJdGVtKj4gY2hpbGRyZW4gPSBjaGlsZEl0ZW1zKCk7
DQorDQorICAgIGZvciAoUUxpc3Q8UUdyYXBoaWNzSXRlbSo+Ojpjb25zdF9pdGVyYXRvciBpdCA9
IGNoaWxkcmVuLmJlZ2luKCk7IGl0ICE9IGNoaWxkcmVuLmVuZCgpOyArK2l0KSB7DQorICAgICAg
ICBpZiAoUUdyYXBoaWNzSXRlbSogaXRlbSA9ICppdCkNCisgICAgICAgICAgICBpZiAoR3JhcGhp
Y3NMYXllclF0SW1wbCogbGF5ZXIgPSBxb2JqZWN0X2Nhc3Q8R3JhcGhpY3NMYXllclF0SW1wbCo+
KGl0ZW0tPnRvR3JhcGhpY3NPYmplY3QoKSkpIHsNCisgICAgICAgICAgICAgICAgaWYgKGxheWVy
LT5tX2xheWVyLT5kcmF3c0NvbnRlbnQoKSAmJiBsYXllci0+bV9jdXJyZW50Q29udGVudC5jb250
ZW50VHlwZSA9PSBIVE1MQ29udGVudFR5cGUpDQorICAgICAgICAgICAgICAgICAgICBsYXllci0+
c2V0Q2FjaGVNb2RlKGFuaW1hdGlvbklzUnVubmluZyA/IFFHcmFwaGljc0l0ZW06Okl0ZW1Db29y
ZGluYXRlQ2FjaGUgOiBRR3JhcGhpY3NJdGVtOjpEZXZpY2VDb29yZGluYXRlQ2FjaGUpOw0KKyAg
ICAgICAgICAgIH0NCisgICAgfSAgICANCit9DQorDQogdm9pZCBHcmFwaGljc0xheWVyUXRJbXBs
OjpzZXRCYXNlVHJhbnNmb3JtKGNvbnN0IFFUcmFuc2Zvcm0mIHRyYW5zZm9ybSkNCiB7DQogICAg
IGlmICghbV9sYXllcikNCiAgICAgICAgIHJldHVybjsNCi0gICAgLy8gd2Via2l0IGhhcyByZWxh
dGl2ZS10by1zaXplIG9yaWdpblBvaW50LCBncmFwaGljcy12aWV3IGhhcyBhIHBpeGVsIG9yaWdp
blBvaW50DQotICAgIC8vIGhlcmUgd2UgY29udmVydA0KLSAgICBRUG9pbnRGIG9yaWdpblRyYW5z
bGF0ZSgNCi0gICAgICAgICAgICBtX2xheWVyLT5hbmNob3JQb2ludCgpLngoKSAqIG1fbGF5ZXIt
PnNpemUoKS53aWR0aCgpLCBtX2xheWVyLT5hbmNob3JQb2ludCgpLnkoKSAqIG1fbGF5ZXItPnNp
emUoKS5oZWlnaHQoKSk7DQotDQotICAgIHJlc2V0VHJhbnNmb3JtKCk7DQotDQotICAgIC8vIHdl
IGhhdmUgdG8gbWFuYWdlIHRoaXMgb3Vyc2VsdmVzIGJlY2F1c2UgUUdyYXBoaWNzVmlldydzIHRy
YW5zZm9ybU9yaWdpbiBpcyBpbmNvbXBsZXRlDQotICAgIHRyYW5zbGF0ZShvcmlnaW5UcmFuc2xh
dGUueCgpLCBvcmlnaW5UcmFuc2xhdGUueSgpKTsNCisgICAgLy8gd2Via2l0IGhhcyByZWxhdGl2
ZS10by1zaXplIG9yaWdpblBvaW50LCBncmFwaGljcy12aWV3IGhhcyBhIHBpeGVsIG9yaWdpblBv
aW50LCBoZXJlIHdlIGNvbnZlcnQNCisgICAgLy8gd2UgaGF2ZSB0byBtYW5hZ2UgdGhpcyBvdXJz
ZWx2ZXMgYmVjYXVzZSBRR3JhcGhpY3NWaWV3J3MgdHJhbnNmb3JtT3JpZ2luIGlzIGluY29tcGF0
aWJsZQ0KKyAgICBjb25zdCBxcmVhbCB4ID0gbV9sYXllci0+YW5jaG9yUG9pbnQoKS54KCkgKiBt
X2xheWVyLT5zaXplKCkud2lkdGgoKTsNCisgICAgY29uc3QgcXJlYWwgeSA9IG1fbGF5ZXItPmFu
Y2hvclBvaW50KCkueSgpICogbV9sYXllci0+c2l6ZSgpLmhlaWdodCgpOw0KKyAgICBzZXRUcmFu
c2Zvcm0oUVRyYW5zZm9ybTo6ZnJvbVRyYW5zbGF0ZSh4LCB5KSk7DQogICAgIHNldFRyYW5zZm9y
bSh0cmFuc2Zvcm0sIHRydWUpOw0KLSAgICB0cmFuc2xhdGUoLW9yaWdpblRyYW5zbGF0ZS54KCks
IC1vcmlnaW5UcmFuc2xhdGUueSgpKTsNCi0gICAgbV9iYXNlVHJhbnNmb20gPSB0cmFuc2Zvcm07
DQorICAgIHRyYW5zbGF0ZSgteCwgLXkpOw0KKyAgICBtX2Jhc2VUcmFuc2Zvcm0gPSB0cmFuc2Zv
cm07DQorfQ0KKw0KK2Jvb2wgR3JhcGhpY3NMYXllclF0SW1wbDo6aXNUcmFuc2Zvcm1BbmltYXRp
b25SdW5uaW5nKCkgY29uc3QNCit7DQorICAgIGlmIChtX3RyYW5zZm9ybUFuaW1hdGlvblJ1bm5p
bmcpDQorICAgICAgICByZXR1cm4gdHJ1ZTsNCisgICAgaWYgKEdyYXBoaWNzTGF5ZXJRdEltcGwq
IHBhcmVudCA9IHFvYmplY3RfY2FzdDxHcmFwaGljc0xheWVyUXRJbXBsKj4ocGFyZW50T2JqZWN0
KCkpKQ0KKyAgICAgICAgcmV0dXJuIHBhcmVudC0+aXNUcmFuc2Zvcm1BbmltYXRpb25SdW5uaW5n
KCk7DQorICAgIHJldHVybiBmYWxzZTsNCiB9DQogDQogUVBhaW50ZXJQYXRoIEdyYXBoaWNzTGF5
ZXJRdEltcGw6Om9wYXF1ZUFyZWEoKSBjb25zdA0KQEAgLTI3MCw0MiArMzAyLDMxIEBAIHZvaWQg
R3JhcGhpY3NMYXllclF0SW1wbDo6cGFpbnQoUVBhaW50ZXIqIHBhaW50ZXIsIGNvbnN0IFFTdHls
ZU9wdGlvbkdyYXBoaWNzSXRlDQogICAgIGRyYXdDb250ZW50cyhwYWludGVyLCBvcHRpb24tPmV4
cG9zZWRSZWN0KTsNCiB9DQogDQotdm9pZCBHcmFwaGljc0xheWVyUXRJbXBsOjpkcmF3Q29udGVu
dHMoUVBhaW50ZXIqIHBhaW50ZXIsIGNvbnN0IFFSZWN0RiYgciwgYm9vbCBtYXNrKQ0KK3ZvaWQg
R3JhcGhpY3NMYXllclF0SW1wbDo6ZHJhd0NvbnRlbnRzKFFQYWludGVyKiBwYWludGVyLCBjb25z
dCBRUmVjdEYmIGV4cG9zZWRSZWN0LCBib29sIG1hc2spDQogew0KLSAgICBRUmVjdCByZWN0ID0g
ci50b0FsaWduZWRSZWN0KCk7DQotICAgIA0KLSAgICBpZiAobV9jdXJyZW50Q29udGVudC5jb250
ZW50VHlwZSAhPSBIVE1MQ29udGVudFR5cGUgJiYgIW1fc3RhdGUuY29udGVudHNSZWN0LmlzRW1w
dHkoKSkNCi0gICAgICAgIHJlY3QgPSByZWN0LmludGVyc2VjdGVkKG1fc3RhdGUuY29udGVudHNS
ZWN0KTsNCi0NCiAgICAgaWYgKG1fY3VycmVudENvbnRlbnQuYmFja2dyb3VuZENvbG9yLmlzVmFs
aWQoKSkNCi0gICAgICAgIHBhaW50ZXItPmZpbGxSZWN0KHIsIFFDb2xvcihtX2N1cnJlbnRDb250
ZW50LmJhY2tncm91bmRDb2xvcikpOw0KKyAgICAgICAgcGFpbnRlci0+ZmlsbFJlY3QoZXhwb3Nl
ZFJlY3QsIFFDb2xvcihtX2N1cnJlbnRDb250ZW50LmJhY2tncm91bmRDb2xvcikpOw0KIA0KLSAg
ICBpZiAoIXJlY3QuaXNFbXB0eSgpKSB7DQotICAgICAgICBzd2l0Y2ggKG1fY3VycmVudENvbnRl
bnQuY29udGVudFR5cGUpIHsNCi0gICAgICAgIGNhc2UgUGl4bWFwQ29udGVudFR5cGU6DQotICAg
ICAgICAgICAgLy8gd2UgaGF2ZSB0byBzY2FsZSB0aGUgaW1hZ2UgdG8gdGhlIGNvbnRlbnRzUmVj
dA0KLSAgICAgICAgICAgIC8vIEZJWE1FOiBhIGJldHRlciB3YXkgd291bGQgcHJvYmFibHkgYmUg
ZHJhd1BpeG1hcCB3aXRoIGEgc3JjL3RhcmdldCByZWN0DQotICAgICAgICAgICAgcGFpbnRlci0+
ZHJhd1BpeG1hcChyZWN0LnRvcExlZnQoKSwgbV9jdXJyZW50Q29udGVudC5waXhtYXAuc2NhbGVk
KG1fc3RhdGUuY29udGVudHNSZWN0LnNpemUoKSksIHIpOw0KLSAgICAgICAgICAgIGJyZWFrOw0K
LSAgICAgICAgY2FzZSBDb2xvckNvbnRlbnRUeXBlOg0KLSAgICAgICAgICAgIHBhaW50ZXItPmZp
bGxSZWN0KHJlY3QsIG1fY3VycmVudENvbnRlbnQuY29udGVudHNCYWNrZ3JvdW5kQ29sb3IpOw0K
LSAgICAgICAgICAgIGJyZWFrOw0KLSAgICAgICAgZGVmYXVsdDoNCi0gICAgICAgICAgICBpZiAo
bV9zdGF0ZS5kcmF3c0NvbnRlbnQpIHsNCi0gICAgICAgICAgICAgICAgLy8gdGhpcyBpcyB0aGUg
ImV4cGVuc2l2ZSIgYml0LiB3ZSB0cnkgdG8gbWluaW1pemUgY2FsbHMgdG8gdGhpcw0KLSAgICAg
ICAgICAgICAgICAvLyBuZWNrIG9mIHRoZSB3b29kcyBieSBwcm9wZXIgY2FjaGluZw0KLSAgICAg
ICAgICAgICAgICBHcmFwaGljc0NvbnRleHQgZ2MocGFpbnRlcik7DQotICAgICAgICAgICAgICAg
IG1fbGF5ZXItPnBhaW50R3JhcGhpY3NMYXllckNvbnRlbnRzKGdjLCByZWN0KTsNCi0gICAgICAg
ICAgICB9DQotICAgICAgICAgICAgYnJlYWs7DQorICAgIHN3aXRjaCAobV9jdXJyZW50Q29udGVu
dC5jb250ZW50VHlwZSkgew0KKyAgICBjYXNlIFBpeG1hcENvbnRlbnRUeXBlOg0KKyAgICAgICAg
cGFpbnRlci0+ZHJhd1BpeG1hcChtX3N0YXRlLmNvbnRlbnRzUmVjdCwgbV9jdXJyZW50Q29udGVu
dC5waXhtYXApOw0KKyAgICAgICAgYnJlYWs7DQorICAgIGNhc2UgQ29sb3JDb250ZW50VHlwZToN
CisgICAgICAgIHBhaW50ZXItPmZpbGxSZWN0KG1fc3RhdGUuY29udGVudHNSZWN0LCBtX2N1cnJl
bnRDb250ZW50LmNvbnRlbnRzQmFja2dyb3VuZENvbG9yKTsNCisgICAgICAgIGJyZWFrOw0KKyAg
ICBkZWZhdWx0Og0KKyAgICAgICAgaWYgKG1fc3RhdGUuZHJhd3NDb250ZW50KSB7DQorICAgICAg
ICAgICAgLy8gdGhpcyBpcyB0aGUgImV4cGVuc2l2ZSIgYml0LiB3ZSB0cnkgdG8gbWluaW1pemUg
Y2FsbHMgdG8gdGhpcyBuZWNrIG9mIHRoZSB3b29kcyBieSBwcm9wZXIgY2FjaGluZw0KKyAgICAg
ICAgICAgIEdyYXBoaWNzQ29udGV4dCBnYyhwYWludGVyKTsNCisgICAgICAgICAgICBtX2xheWVy
LT5wYWludEdyYXBoaWNzTGF5ZXJDb250ZW50cyhnYywgZXhwb3NlZFJlY3QudG9BbGlnbmVkUmVj
dCgpKTsNCiAgICAgICAgIH0NCisgICAgICAgIGJyZWFrOw0KICAgICB9DQogfQ0KIA0KIHZvaWQg
R3JhcGhpY3NMYXllclF0SW1wbDo6bm90aWZ5Q2hhbmdlKENoYW5nZU1hc2sgY2hhbmdlTWFzaykN
CiB7DQotICAgIGlmICghdGhpcykNCi0gICAgICAgIHJldHVybjsNCisgICAgUV9BU1NFUlQodGhp
cyk7DQogDQogICAgIG1fY2hhbmdlTWFzayB8PSBjaGFuZ2VNYXNrOw0KIA0KQEAgLTM0MiwxNCAr
MzYzLDE0IEBAIHZvaWQgR3JhcGhpY3NMYXllclF0SW1wbDo6Zmx1c2hDaGFuZ2VzKGJvb2wgcmVj
dXJzaXZlKQ0KICAgICAgICAgY29uc3QgUVNldDxRR3JhcGhpY3NJdGVtKj4gY3VycmVudENoaWxk
cmVuID0gY2hpbGRJdGVtcygpLnRvU2V0KCk7DQogICAgICAgICBjb25zdCBRU2V0PFFHcmFwaGlj
c0l0ZW0qPiBjaGlsZHJlblRvQWRkID0gbmV3Q2hpbGRyZW4gLSBjdXJyZW50Q2hpbGRyZW47DQog
ICAgICAgICBjb25zdCBRU2V0PFFHcmFwaGljc0l0ZW0qPiBjaGlsZHJlblRvUmVtb3ZlID0gY3Vy
cmVudENoaWxkcmVuIC0gbmV3Q2hpbGRyZW47DQotICAgICAgICBmb3IgKFFTZXQ8UUdyYXBoaWNz
SXRlbSo+Ojpjb25zdF9pdGVyYXRvciBpdCA9IGNoaWxkcmVuVG9BZGQuYmVnaW4oKTsgaXQgIT0g
Y2hpbGRyZW5Ub0FkZC5lbmQoKTsgKytpdCkgew0KKw0KKyAgICAgICAgZm9yIChRU2V0PFFHcmFw
aGljc0l0ZW0qPjo6Y29uc3RfaXRlcmF0b3IgaXQgPSBjaGlsZHJlblRvQWRkLmJlZ2luKCk7IGl0
ICE9IGNoaWxkcmVuVG9BZGQuZW5kKCk7ICsraXQpDQogICAgICAgICAgICAgIGlmIChRR3JhcGhp
Y3NJdGVtKiB3ID0gKml0KQ0KICAgICAgICAgICAgICAgICB3LT5zZXRQYXJlbnRJdGVtKHRoaXMp
Ow0KLSAgICAgICAgfQ0KLSAgICAgICAgZm9yIChRU2V0PFFHcmFwaGljc0l0ZW0qPjo6Y29uc3Rf
aXRlcmF0b3IgaXQgPSBjaGlsZHJlblRvUmVtb3ZlLmJlZ2luKCk7IGl0ICE9IGNoaWxkcmVuVG9S
ZW1vdmUuZW5kKCk7ICsraXQpIHsNCisNCisgICAgICAgIGZvciAoUVNldDxRR3JhcGhpY3NJdGVt
Kj46OmNvbnN0X2l0ZXJhdG9yIGl0ID0gY2hpbGRyZW5Ub1JlbW92ZS5iZWdpbigpOyBpdCAhPSBj
aGlsZHJlblRvUmVtb3ZlLmVuZCgpOyArK2l0KQ0KICAgICAgICAgICAgICBpZiAoUUdyYXBoaWNz
SXRlbSogdyA9ICppdCkNCiAgICAgICAgICAgICAgICAgdy0+c2V0UGFyZW50SXRlbSgwKTsNCi0g
ICAgICAgIH0NCiANCiAgICAgICAgIC8vIGNoaWxkcmVuIGFyZSBvcmRlcmVkIGJ5IHotdmFsdWUs
IGxldCBncmFwaGljcy12aWV3IGtub3cuDQogICAgICAgICBmb3IgKHNpemVfdCBpID0gMDsgaSA8
IG5ld0NoaWxkcmVuVmVjdG9yLnNpemUoKTsgKytpKQ0KQEAgLTM4MywxNyArNDA0LDE3IEBAIHZv
aWQgR3JhcGhpY3NMYXllclF0SW1wbDo6Zmx1c2hDaGFuZ2VzKGJvb2wgcmVjdXJzaXZlKQ0KICAg
ICAgICAgLy8gdGhlIGFuY2hvci1wb2ludCwgdHJhbnNmb3JtIGFuZCBzaXplIGZyb20gV2ViQ29y
ZSBhbGwgYWZmZWN0IHRoZSBvbmUNCiAgICAgICAgIC8vIHRoYXQgd2UgZ2l2ZSBRdA0KICAgICAg
ICAgaWYgKG1fc3RhdGUudHJhbnNmb3JtICE9IG1fbGF5ZXItPnRyYW5zZm9ybSgpIHx8IG1fc3Rh
dGUuYW5jaG9yUG9pbnQgIT0gbV9sYXllci0+YW5jaG9yUG9pbnQoKSB8fCBtX3N0YXRlLnNpemUg
IT0gbV9sYXllci0+c2l6ZSgpKQ0KLSAgICAgICAgICAgIHNldEJhc2VUcmFuc2Zvcm0oUVRyYW5z
Zm9ybShtX2xheWVyLT50cmFuc2Zvcm0oKSkpOw0KKyAgICAgICAgICAgIHNldEJhc2VUcmFuc2Zv
cm0obV9sYXllci0+dHJhbnNmb3JtKCkpOw0KICAgICB9DQogDQogICAgIGlmIChtX2NoYW5nZU1h
c2sgJiAoQ29udGVudENoYW5nZSB8IERyYXdzQ29udGVudENoYW5nZSkpIHsNCiAgICAgICAgIHN3
aXRjaCAobV9wZW5kaW5nQ29udGVudC5jb250ZW50VHlwZSkgew0KICAgICAgICAgY2FzZSBQaXht
YXBDb250ZW50VHlwZToNCi0gICAgICAgICAgICAvLyB3ZSBuZWVkIGNhY2hlIGV2ZW4gZm9yIGlt
YWdlcywgYmVjYXVzZSB0aGV5IG5lZWQgdG8gYmUgcmVzaXplZA0KLSAgICAgICAgICAgIC8vIHRv
IHRoZSBjb250ZW50cyByZWN0LiBtYXliZSB0aGlzIGNhbiBiZSBvcHRpbWl6ZWQgdGhvdWdoDQot
ICAgICAgICAgICAgc2V0Q2FjaGVNb2RlKG1fdHJhbnNmb3JtQW5pbWF0aW9uUnVubmluZyA/IEl0
ZW1Db29yZGluYXRlQ2FjaGUgOiBEZXZpY2VDb29yZGluYXRlQ2FjaGUpOw0KICAgICAgICAgICAg
IHVwZGF0ZSgpOw0KICAgICAgICAgICAgIHNldEZsYWcoSXRlbUhhc05vQ29udGVudHMsIGZhbHNl
KTsNCisNCisgICAgICAgICAgICAvLyB3ZSBvbmx5IHVzZSBJdGVtVXNlc0V4dGVuZGVkU3R5bGVP
cHRpb24gZm9yIEhUTUwgY29udGVudCAtIHBpeG1hcCBjYW4gYmUgaGFuZGxlZCBiZXR0ZXIgd2l0
aCByZWd1bGFyIGNsaXBwaW5nDQorICAgICAgICAgICAgc2V0RmxhZyhRR3JhcGhpY3NJdGVtOjpJ
dGVtVXNlc0V4dGVuZGVkU3R5bGVPcHRpb24sIGZhbHNlKTsNCiAgICAgICAgICAgICBicmVhazsN
CiANCiAgICAgICAgIGNhc2UgQ29sb3JDb250ZW50VHlwZToNCkBAIC00MDMsNiArNDI0LDkgQEAg
dm9pZCBHcmFwaGljc0xheWVyUXRJbXBsOjpmbHVzaENoYW5nZXMoYm9vbCByZWN1cnNpdmUpDQog
ICAgICAgICAgICAgICAgIHVwZGF0ZSgpOw0KICAgICAgICAgICAgIG1fc3RhdGUuZHJhd3NDb250
ZW50ID0gZmFsc2U7DQogICAgICAgICAgICAgc2V0RmxhZyhJdGVtSGFzTm9Db250ZW50cywgZmFs
c2UpOw0KKw0KKyAgICAgICAgICAgIC8vIHdlIG9ubHkgdXNlIEl0ZW1Vc2VzRXh0ZW5kZWRTdHls
ZU9wdGlvbiBmb3IgSFRNTCBjb250ZW50IC0gY29sb3JzIGRvbid0IGdhaW4gbXVjaCBmcm9tIHRo
YXQgYW55d2F5DQorICAgICAgICAgICAgc2V0RmxhZyhRR3JhcGhpY3NJdGVtOjpJdGVtVXNlc0V4
dGVuZGVkU3R5bGVPcHRpb24sIGZhbHNlKTsNCiAgICAgICAgICAgICBicmVhazsNCiANCiAgICAg
ICAgIGNhc2UgSFRNTENvbnRlbnRUeXBlOg0KQEAgLTQxMCw4ICs0MzQsMTYgQEAgdm9pZCBHcmFw
aGljc0xheWVyUXRJbXBsOjpmbHVzaENoYW5nZXMoYm9vbCByZWN1cnNpdmUpDQogICAgICAgICAg
ICAgICAgIHVwZGF0ZSgpOw0KICAgICAgICAgICAgIGlmICghbV9zdGF0ZS5kcmF3c0NvbnRlbnQg
JiYgbV9sYXllci0+ZHJhd3NDb250ZW50KCkpDQogICAgICAgICAgICAgICAgIHVwZGF0ZSgpOw0K
LSAgICAgICAgICAgIGlmIChtX2xheWVyLT5kcmF3c0NvbnRlbnQoKSkNCi0gICAgICAgICAgICAg
ICAgc2V0Q2FjaGVNb2RlKG1fdHJhbnNmb3JtQW5pbWF0aW9uUnVubmluZyA/IEl0ZW1Db29yZGlu
YXRlQ2FjaGUgOiBEZXZpY2VDb29yZGluYXRlQ2FjaGUpOw0KKyAgICAgICAgICAgICAgICBpZiAo
bV9sYXllci0+ZHJhd3NDb250ZW50KCkpIHsNCisgICAgICAgICAgICAgICAgICAgIGNvbnN0IFFH
cmFwaGljc0l0ZW06OkNhY2hlTW9kZSBtZXdDYWNoZU1vZGUgPSBpc1RyYW5zZm9ybUFuaW1hdGlv
blJ1bm5pbmcoKSA/IEl0ZW1Db29yZGluYXRlQ2FjaGUgOiBEZXZpY2VDb29yZGluYXRlQ2FjaGU7
DQorDQorICAgICAgICAgICAgICAgICAgICAvLyBvcHRpbWl6YXRpb246IFFHcmFwaGljc0l0ZW0g
ZG9lc24ndCBhbHdheXMgcGVyZm9ybSB0aGlzIHRlc3QNCisgICAgICAgICAgICAgICAgICAgIGlm
IChtZXdDYWNoZU1vZGUgIT0gY2FjaGVNb2RlKCkpDQorICAgICAgICAgICAgICAgICAgICAgICAg
c2V0Q2FjaGVNb2RlKG1ld0NhY2hlTW9kZSk7DQorDQorICAgICAgICAgICAgICAgICAgICAvLyBI
VE1MIGNvbnRlbnQ6IHdlIHdhbnQgdG8gdXNlIGV4cG9zZWRSZWN0IHNvIHdlIGRvbid0IHVzZSBX
ZWJDb3JlIHJlbmRlcmluZyBpZiB3ZSBkb24ndCBoYXZlIHRvDQorICAgICAgICAgICAgICAgICAg
ICBzZXRGbGFnKFFHcmFwaGljc0l0ZW06Okl0ZW1Vc2VzRXh0ZW5kZWRTdHlsZU9wdGlvbiwgdHJ1
ZSk7DQorICAgICAgICAgICAgICAgIH0NCiAgICAgICAgICAgICBlbHNlDQogICAgICAgICAgICAg
ICAgIHNldENhY2hlTW9kZShOb0NhY2hlKTsNCiANCkBAIC00NDgsNyArNDgwLDcgQEAgdm9pZCBH
cmFwaGljc0xheWVyUXRJbXBsOjpmbHVzaENoYW5nZXMoYm9vbCByZWN1cnNpdmUpDQogICAgICAg
ICB1cGRhdGUoKTsNCiANCiAgICAgLy8gRklYTUU6IHRoZSBmb2xsb3dpbmcgZmxhZ3MgYXJlIGN1
cnJlbnRseSBub3QgaGFuZGxlZCwgYXMgdGhleSBkb24ndCBoYXZlIGEgY2xlYXIgdGVzdCBvciBh
cmUgaW4gbG93IHByaW9yaXR5DQotICAgIC8vIEdlb21ldHJ5T3JpZW50YXRpb25DaGFuZ2UsIENv
bnRlbnRzT3JpZW50YXRpb25DaGFuZ2UsIEJhY2tmYWNlVmlzaWJpbGl0eUNoYW5nZSwgQ2hpbGRy
ZW5UcmFuc2Zvcm1DaGFuZ2UNCisgICAgLy8gR2VvbWV0cnlPcmllbnRhdGlvbkNoYW5nZSwgQ29u
dGVudHNPcmllbnRhdGlvbkNoYW5nZSwgQmFja2ZhY2VWaXNpYmlsaXR5Q2hhbmdlLCBDaGlsZHJl
blRyYW5zZm9ybUNoYW5nZSwgUHJlc2VydmVzM0RDaGFuZ2UNCiANCiAgICAgbV9zdGF0ZS5tYXNr
TGF5ZXIgPSBtX2xheWVyLT5tYXNrTGF5ZXIoKTsNCiAgICAgbV9zdGF0ZS5wb3MgPSBtX2xheWVy
LT5wb3NpdGlvbigpOw0KQEAgLTUyMyw5ICs1NTUsOSBAQCB2b2lkIEdyYXBoaWNzTGF5ZXJRdDo6
c2V0TmVlZHNEaXNwbGF5KCkNCiB9DQogDQogLy8gcmVpbXAgZnJvbSBHcmFwaGljc0xheWVyLmgN
Ci12b2lkIEdyYXBoaWNzTGF5ZXJRdDo6c2V0TmVlZHNEaXNwbGF5SW5SZWN0KGNvbnN0IEZsb2F0
UmVjdCYgcikNCit2b2lkIEdyYXBoaWNzTGF5ZXJRdDo6c2V0TmVlZHNEaXNwbGF5SW5SZWN0KGNv
bnN0IEZsb2F0UmVjdCYgcmVjdCkNCiB7DQotICAgIG1faW1wbC0+bV9wZW5kaW5nQ29udGVudC5y
ZWdpb25Ub1VwZGF0ZXw9IFFSZWN0RihyKS50b0FsaWduZWRSZWN0KCk7DQorICAgIG1faW1wbC0+
bV9wZW5kaW5nQ29udGVudC5yZWdpb25Ub1VwZGF0ZXw9IFFSZWN0RihyZWN0KS50b0FsaWduZWRS
ZWN0KCk7DQogICAgIG1faW1wbC0+bm90aWZ5Q2hhbmdlKEdyYXBoaWNzTGF5ZXJRdEltcGw6OkRp
c3BsYXlDaGFuZ2UpOw0KIH0NCiANCkBAIC04MDcsMTYgKzgzOSwxNiBAQCBzdGF0aWMgaW5saW5l
IGRvdWJsZSBzb2x2ZUN1YmljQmV6aWVyRnVuY3Rpb24ocXJlYWwgcDF4LCBxcmVhbCBwMXksIHFy
ZWFsIHAyeCwgcQ0KIC8vIFVzaW5nIGVhc2luZy1jdXJ2ZXMgd291bGQgcHJvYmFibHkgd29yayBm
b3Igc29tZSBvZiB0aGUgY2FzZXMsIGJ1dCB3b3VsZG4ndCByZWFsbHkgYnV5IHVzIGFueXRoaW5n
IGFzIHdlJ2QgaGF2ZSB0byBjb252ZXJ0IHRoZSBiZXppZXIgZnVuY3Rpb24gYmFjayB0byBhbiBl
YXNpbmcgY3VydmUNCiBzdGF0aWMgaW5saW5lIHFyZWFsIGFwcGx5VGltaW5nRnVuY3Rpb24oY29u
c3QgVGltaW5nRnVuY3Rpb24mIHRpbWluZ0Z1bmN0aW9uLCBxcmVhbCBwcm9ncmVzcywgaW50IGR1
cmF0aW9uKQ0KIHsNCi0gICAgaWYgKHRpbWluZ0Z1bmN0aW9uLnR5cGUoKSA9PSBMaW5lYXJUaW1p
bmdGdW5jdGlvbikNCisgICAgICAgIGlmICh0aW1pbmdGdW5jdGlvbi50eXBlKCkgPT0gTGluZWFy
VGltaW5nRnVuY3Rpb24pDQorICAgICAgICAgICAgcmV0dXJuIHByb2dyZXNzOw0KKyAgICAgICAg
aWYgKHRpbWluZ0Z1bmN0aW9uLnR5cGUoKSA9PSBDdWJpY0JlemllclRpbWluZ0Z1bmN0aW9uKSB7
DQorICAgICAgICAgICAgcmV0dXJuIHNvbHZlQ3ViaWNCZXppZXJGdW5jdGlvbih0aW1pbmdGdW5j
dGlvbi54MSgpLA0KKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
dGltaW5nRnVuY3Rpb24ueTEoKSwNCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgIHRpbWluZ0Z1bmN0aW9uLngyKCksDQorICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICB0aW1pbmdGdW5jdGlvbi55MigpLA0KKyAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZG91YmxlKHByb2dyZXNzKSwgZG91YmxlKGR1
cmF0aW9uKSAvIDEwMDApOw0KKyAgICAgICAgfQ0KICAgICAgICAgcmV0dXJuIHByb2dyZXNzOw0K
LSAgICBpZiAodGltaW5nRnVuY3Rpb24udHlwZSgpID09IEN1YmljQmV6aWVyVGltaW5nRnVuY3Rp
b24pIHsNCi0gICAgICAgIHJldHVybiBzb2x2ZUN1YmljQmV6aWVyRnVuY3Rpb24odGltaW5nRnVu
Y3Rpb24ueDEoKSwNCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdGlt
aW5nRnVuY3Rpb24ueTEoKSwNCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgdGltaW5nRnVuY3Rpb24ueDIoKSwNCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgdGltaW5nRnVuY3Rpb24ueTIoKSwNCi0gICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgZG91YmxlKHByb2dyZXNzKSwgZG91YmxlKGR1cmF0aW9uKSAvIDEwMDAp
Ow0KLSAgICB9DQotICAgIHJldHVybiBwcm9ncmVzczsNCiB9DQogDQogLy8gaGVscGVyIGZ1bmN0
aW9ucyB0byBzYWZlbHkgZ2V0IGEgdmFsdWUgb3V0IG9mIFdlYkNvcmUncyBBbmltYXRpb25WYWx1
ZSoNCkBAIC04MjYsOSArODU4LDcgQEAgc3RhdGljIHZvaWQgd2Via2l0QW5pbWF0aW9uVG9RdEFu
aW1hdGlvblZhbHVlKGNvbnN0IEFuaW1hdGlvblZhbHVlKiBhbmltYXRpb25WYWwNCiAgICAgaWYg
KCFhbmltYXRpb25WYWx1ZSkNCiAgICAgICAgIHJldHVybjsNCiANCi0gICAgY29uc3QgVHJhbnNm
b3JtT3BlcmF0aW9ucyogb3BzID0gc3RhdGljX2Nhc3Q8Y29uc3QgVHJhbnNmb3JtQW5pbWF0aW9u
VmFsdWUqPihhbmltYXRpb25WYWx1ZSktPnZhbHVlKCk7DQotDQotICAgIGlmIChvcHMpDQorICAg
IGlmIChjb25zdCBUcmFuc2Zvcm1PcGVyYXRpb25zKiBvcHMgPSBzdGF0aWNfY2FzdDxjb25zdCBU
cmFuc2Zvcm1BbmltYXRpb25WYWx1ZSo+KGFuaW1hdGlvblZhbHVlKS0+dmFsdWUoKSkNCiAgICAg
ICAgIHRyYW5zZm9ybU9wZXJhdGlvbnMgPSAqb3BzOw0KIH0NCiANCkBAIC04NTYsOCArODg2LDgg
QEAgcHVibGljOg0KICAgICAgICAgUUFic3RyYWN0QW5pbWF0aW9uOjp1cGRhdGVTdGF0ZShuZXdT
dGF0ZSwgb2xkU3RhdGUpOw0KIA0KICAgICAgICAgLy8gZm9yIHNvbWUgcmVhc29uIEkgaGF2ZSBk
byB0aGlzIGFzeW5jaHJvbm91c2x5IC0gb3IgdGhlIGFuaW1hdGlvbiB3b24ndCB3b3JrDQotICAg
ICAgICBpZiAobmV3U3RhdGUgPT0gUnVubmluZyAmJiBvbGRTdGF0ZSA9PSBTdG9wcGVkKQ0KLSAg
ICAgICAgICAgIFFUaW1lcjo6c2luZ2xlU2hvdCgwLCBtX2xheWVyLmRhdGEoKSwgU0xPVChub3Rp
ZnlBbmltYXRpb25TdGFydGVkKCkpKTsNCisgICAgICAgIGlmIChuZXdTdGF0ZSA9PSBSdW5uaW5n
ICYmIG9sZFN0YXRlID09IFN0b3BwZWQgJiYgbV9sYXllci5kYXRhKCkpDQorICAgICAgICAgICAg
bV9sYXllci5kYXRhKCktPm5vdGlmeUFuaW1hdGlvblN0YXJ0ZWRBc3luYygpOw0KICAgICB9DQog
DQogICAgIHZpcnR1YWwgaW50IGR1cmF0aW9uKCkgY29uc3QgeyByZXR1cm4gbV9kdXJhdGlvbjsg
fQ0KQEAgLTkzMiw5ICs5NjIsMTAgQEAgcHJvdGVjdGVkOg0KIA0KICAgICAgICAgLy8gbm93IHdl
IGhhdmUgYSBzb3VyY2Uga2V5ZnJhbWUsIG9yaWdpbiBrZXlmcmFtZSBhbmQgYSB0aW1pbmcgZnVu
Y3Rpb24NCiAgICAgICAgIC8vIHdlIGNhbiBub3cgcHJvY2VzcyB0aGUgcHJvZ3Jlc3MgYW5kIGFw
cGx5IHRoZSBmcmFtZQ0KLSAgICAgICAgcXJlYWwgbm9ybWFsaXplZFByb2dyZXNzID0gKGl0Lmtl
eSgpID09IGl0Mi5rZXkoKSkgPyAwIDogKHByb2dyZXNzIC0gaXQua2V5KCkpIC8gKGl0Mi5rZXko
KSAtIGl0LmtleSgpKTsNCi0gICAgICAgIG5vcm1hbGl6ZWRQcm9ncmVzcyA9IGFwcGx5VGltaW5n
RnVuY3Rpb24odGltaW5nRnVuYywgbm9ybWFsaXplZFByb2dyZXNzLCBkdXJhdGlvbigpIC8gMTAw
MCk7DQotICAgICAgICBhcHBseUZyYW1lKGZyb21WYWx1ZSwgdG9WYWx1ZSwgbm9ybWFsaXplZFBy
b2dyZXNzKTsNCisgICAgICAgIHByb2dyZXNzID0gKCFwcm9ncmVzcyB8fCBwcm9ncmVzcyA9PSAx
IHx8IGl0LmtleSgpID09IGl0Mi5rZXkoKSkNCisgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgID8gcHJvZ3Jlc3MNCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgIDogYXBwbHlUaW1pbmdGdW5jdGlvbih0aW1pbmdGdW5jLCAocHJvZ3Jlc3MgLSBp
dC5rZXkoKSkgLyAoaXQyLmtleSgpIC0gaXQua2V5KCkpLCBkdXJhdGlvbigpIC8gMTAwMCk7DQor
ICAgICAgICBhcHBseUZyYW1lKGZyb21WYWx1ZSwgdG9WYWx1ZSwgcHJvZ3Jlc3MpOw0KICAgICB9
DQogDQogICAgIFFNYXA8cXJlYWwsIEtleWZyYW1lVmFsdWVRdDxUPiA+IG1fa2V5ZnJhbWVWYWx1
ZXM7DQpAQCAtOTQzLDcgKzk3NCw3IEBAIHByb3RlY3RlZDoNCiBjbGFzcyBUcmFuc2Zvcm1Bbmlt
YXRpb25RdCA6IHB1YmxpYyBBbmltYXRpb25RdDxUcmFuc2Zvcm1PcGVyYXRpb25zPiB7DQogcHVi
bGljOg0KICAgICBUcmFuc2Zvcm1BbmltYXRpb25RdChHcmFwaGljc0xheWVyUXRJbXBsKiBsYXll
ciwgY29uc3QgS2V5ZnJhbWVWYWx1ZUxpc3QmIHZhbHVlcywgY29uc3QgSW50U2l6ZSYgYm94U2l6
ZSwgY29uc3QgQW5pbWF0aW9uKiBhbmltLCBjb25zdCBRU3RyaW5nICYgbmFtZSkNCi0gICAgICAg
ICAgICAgICAgOiBBbmltYXRpb25RdDxUcmFuc2Zvcm1PcGVyYXRpb25zPihsYXllciwgdmFsdWVz
LCBib3hTaXplLCBhbmltLCBuYW1lKQ0KKyAgICAgICAgOiBBbmltYXRpb25RdDxUcmFuc2Zvcm1P
cGVyYXRpb25zPihsYXllciwgdmFsdWVzLCBib3hTaXplLCBhbmltLCBuYW1lKQ0KICAgICB7DQog
ICAgIH0NCiANCkBAIC05NTIsNyArOTgzLDcgQEAgcHVibGljOg0KICAgICAgICAgLy8gdGhpcyBj
YW1lIHVwIGR1cmluZyB0aGUgY29tcG9zaXRpbmcvYW5pbWF0aW9uIExheW91dFRlc3RzDQogICAg
ICAgICAvLyB3aGVuIHRoZSBhbmltYXRpb24gZGllcywgdGhlIHRyYW5zZm9ybSBoYXMgdG8gZ28g
YmFjayB0byBkZWZhdWx0DQogICAgICAgICBpZiAobV9sYXllcikNCi0gICAgICAgICAgICBtX2xh
eWVyLmRhdGEoKS0+c2V0QmFzZVRyYW5zZm9ybShRVHJhbnNmb3JtKG1fbGF5ZXIuZGF0YSgpLT5t
X2xheWVyLT50cmFuc2Zvcm0oKSkpOw0KKyAgICAgICAgICAgIG1fbGF5ZXIuZGF0YSgpLT5zZXRC
YXNlVHJhbnNmb3JtKG1fbGF5ZXIuZGF0YSgpLT5tX2xheWVyLT50cmFuc2Zvcm0oKSk7DQogICAg
IH0NCiANCiAgICAgLy8gdGhlIGlkZWEgaXMgdGhhdCB3ZSBsZXQgV2ViQ29yZSBtYW5hZ2UgdGhl
IHRyYW5zZm9ybS1vcGVyYXRpb25zDQpAQCAtOTYzLDExICs5OTQsMjIgQEAgcHVibGljOg0KICAg
ICB7DQogICAgICAgICBUcmFuc2Zvcm1hdGlvbk1hdHJpeCB0cmFuc2Zvcm1NYXRyaXg7DQogDQot
ICAgICAgICAvLyB0aGlzIGxvb2tzIHNpbXBsZSBidXQgaXMgcmVhbGx5IHRyaWNreSB0byBnZXQg
cmlnaHQuIFVzZSBjYXV0aW9uLg0KLSAgICAgICAgZm9yIChzaXplX3QgaSA9IDA7IGkgPCB0YXJn
ZXRPcGVyYXRpb25zLnNpemUoKTsgKytpKQ0KLSAgICAgICAgICAgIHRhcmdldE9wZXJhdGlvbnMu
b3BlcmF0aW9ucygpW2ldLT5ibGVuZChzb3VyY2VPcGVyYXRpb25zLmF0KGkpLCBwcm9ncmVzcykt
PmFwcGx5KHRyYW5zZm9ybU1hdHJpeCwgbV9ib3hTaXplKTsNCi0NCi0gICAgICAgIG1fbGF5ZXIu
ZGF0YSgpLT5zZXRCYXNlVHJhbnNmb3JtKFFUcmFuc2Zvcm0odHJhbnNmb3JtTWF0cml4KSk7DQor
ICAgICAgICAvLyBzb21ldGltZXMgdGhlIGFuaW1hdGlvbiB2YWx1ZXMgZnJvbSBXZWJDb3JlIGFy
ZSBtaXNsZWFkaW5nIGFuZCB3ZSBoYXZlIHRvIHVzZSB0aGUgYWN0dWFsIG1hdHJpeCBhcyBzb3Vy
Y2UNCisgICAgICAgIC8vIFRoZSBNYWMgaW1wbGVtZW50YXRpb24gc2ltcGx5IGRvZXNuJ3QgdHJ5
IHRvIGFjY2VsZXJhdGUgdGhvc2UgKGUuZy4gMzYwZGVnIHJvdGF0aW9uKSwgYnV0IHdlIGRvLg0K
KyAgICAgICAgaWYgKHByb2dyZXNzID09IDEgfHwgIXRhcmdldE9wZXJhdGlvbnMuc2l6ZSgpIHx8
IHNvdXJjZU9wZXJhdGlvbnMgPT0gdGFyZ2V0T3BlcmF0aW9ucykgew0KKyAgICAgICAgICAgIFRy
YW5zZm9ybWF0aW9uTWF0cml4IHNvdXJjZU1hdHJpeDsNCisgICAgICAgICAgICBzb3VyY2VPcGVy
YXRpb25zLmFwcGx5KG1fYm94U2l6ZSwgc291cmNlTWF0cml4KTsNCisgICAgICAgICAgICB0cmFu
c2Zvcm1NYXRyaXggPSBtX3NvdXJjZU1hdHJpeDsNCisgICAgICAgICAgICB0cmFuc2Zvcm1NYXRy
aXguYmxlbmQoc291cmNlTWF0cml4LCAxIC0gcHJvZ3Jlc3MpOw0KKyAgICAgICAgfSBlbHNlIGlm
ICh0YXJnZXRPcGVyYXRpb25zLnNpemUoKSAhPSBzb3VyY2VPcGVyYXRpb25zLnNpemUoKSkgew0K
KyAgICAgICAgICAgIHRyYW5zZm9ybU1hdHJpeCA9IG1fc291cmNlTWF0cml4Ow0KKyAgICAgICAg
ICAgIHRhcmdldE9wZXJhdGlvbnMuYXBwbHkobV9ib3hTaXplLCB0cmFuc2Zvcm1NYXRyaXgpOw0K
KyAgICAgICAgICAgIHRyYW5zZm9ybU1hdHJpeC5ibGVuZChtX3NvdXJjZU1hdHJpeCwgcHJvZ3Jl
c3MpOw0KKyAgICAgICAgfSBlbHNlIHsNCisgICAgICAgICAgICBmb3IgKHNpemVfdCBpID0gMDsg
aSA8IHRhcmdldE9wZXJhdGlvbnMuc2l6ZSgpOyArK2kpDQorICAgICAgICAgICAgICAgIHRhcmdl
dE9wZXJhdGlvbnMub3BlcmF0aW9ucygpW2ldLT5ibGVuZChzb3VyY2VPcGVyYXRpb25zLmF0KGkp
LCBwcm9ncmVzcyktPmFwcGx5KHRyYW5zZm9ybU1hdHJpeCwgbV9ib3hTaXplKTsNCisgICAgICAg
IH0NCisgICAgICAgIG1fbGF5ZXIuZGF0YSgpLT5zZXRCYXNlVHJhbnNmb3JtKHRyYW5zZm9ybU1h
dHJpeCk7DQogICAgIH0NCiANCiAgICAgdmlydHVhbCB2b2lkIHVwZGF0ZVN0YXRlKFFBYnN0cmFj
dEFuaW1hdGlvbjo6U3RhdGUgbmV3U3RhdGUsIFFBYnN0cmFjdEFuaW1hdGlvbjo6U3RhdGUgb2xk
U3RhdGUpDQpAQCAtOTgwLDIxICsxMDIyLDIzIEBAIHB1YmxpYzoNCiAgICAgICAgIC8vIHRvIGlu
Y3JlYXNlIEZQUywgd2UgdXNlIGEgbGVzcyBhY2N1cmF0ZSBjYWNoaW5nIG1lY2hhbmlzbSB3aGls
ZSBhbmltYXRpb24gaXMgZ29pbmcgb24NCiAgICAgICAgIC8vIHRoaXMgaXMgYSBVWCBjaG9pY2Ug
dGhhdCBzaG91bGQgcHJvYmFibHkgYmUgY3VzdG9taXphYmxlDQogICAgICAgICBpZiAobmV3U3Rh
dGUgPT0gUUFic3RyYWN0QW5pbWF0aW9uOjpSdW5uaW5nKSB7DQorICAgICAgICAgICAgbV9zb3Vy
Y2VNYXRyaXggPSBtX2xheWVyLmRhdGEoKS0+bV9sYXllci0+dHJhbnNmb3JtKCk7DQogICAgICAg
ICAgICAgbV9sYXllci5kYXRhKCktPm1fdHJhbnNmb3JtQW5pbWF0aW9uUnVubmluZyA9IHRydWU7
DQotICAgICAgICAgICAgaWYgKG1fbGF5ZXIuZGF0YSgpLT5jYWNoZU1vZGUoKSA9PSBRR3JhcGhp
Y3NJdGVtOjpEZXZpY2VDb29yZGluYXRlQ2FjaGUpDQotICAgICAgICAgICAgICAgIG1fbGF5ZXIu
ZGF0YSgpLT5zZXRDYWNoZU1vZGUoUUdyYXBoaWNzSXRlbTo6SXRlbUNvb3JkaW5hdGVDYWNoZSk7
DQorICAgICAgICAgICAgbV9sYXllci5kYXRhKCktPmFkanVzdENhY2hpbmdSZWN1cnNpdmVseSh0
cnVlKTsNCiAgICAgICAgIH0gZWxzZSB7DQogICAgICAgICAgICAgbV9sYXllci5kYXRhKCktPm1f
dHJhbnNmb3JtQW5pbWF0aW9uUnVubmluZyA9IGZhbHNlOw0KLSAgICAgICAgICAgIGlmIChtX2xh
eWVyLmRhdGEoKS0+Y2FjaGVNb2RlKCkgPT0gUUdyYXBoaWNzSXRlbTo6SXRlbUNvb3JkaW5hdGVD
YWNoZSkNCi0gICAgICAgICAgICAgICAgbV9sYXllci5kYXRhKCktPnNldENhY2hlTW9kZShRR3Jh
cGhpY3NJdGVtOjpEZXZpY2VDb29yZGluYXRlQ2FjaGUpOw0KKyAgICAgICAgICAgIG1fbGF5ZXIu
ZGF0YSgpLT5hZGp1c3RDYWNoaW5nUmVjdXJzaXZlbHkoZmFsc2UpOw0KICAgICAgICAgfQ0KKw0K
ICAgICB9DQorDQorICAgIFRyYW5zZm9ybWF0aW9uTWF0cml4IG1fc291cmNlTWF0cml4Ow0KIH07
DQogDQogY2xhc3MgT3BhY2l0eUFuaW1hdGlvblF0IDogcHVibGljIEFuaW1hdGlvblF0PHFyZWFs
PiB7DQogcHVibGljOg0KICAgICBPcGFjaXR5QW5pbWF0aW9uUXQoR3JhcGhpY3NMYXllclF0SW1w
bCogbGF5ZXIsIGNvbnN0IEtleWZyYW1lVmFsdWVMaXN0JiB2YWx1ZXMsIGNvbnN0IEludFNpemUm
IGJveFNpemUsIGNvbnN0IEFuaW1hdGlvbiogYW5pbSwgY29uc3QgUVN0cmluZyAmIG5hbWUpDQot
ICAgICAgICAgOiBBbmltYXRpb25RdDxxcmVhbD4obGF5ZXIsIHZhbHVlcywgYm94U2l6ZSwgYW5p
bSwgbmFtZSkNCisgICAgICAgICAgICAgICAgOiBBbmltYXRpb25RdDxxcmVhbD4obGF5ZXIsIHZh
bHVlcywgYm94U2l6ZSwgYW5pbSwgbmFtZSkNCiAgICAgew0KICAgICB9DQogDQpAQCAtMTAwNiw2
ICsxMDUwLDcgQEAgcHVibGljOg0KICAgICB2aXJ0dWFsIHZvaWQgdXBkYXRlU3RhdGUoUUFic3Ry
YWN0QW5pbWF0aW9uOjpTdGF0ZSBuZXdTdGF0ZSwgUUFic3RyYWN0QW5pbWF0aW9uOjpTdGF0ZSBv
bGRTdGF0ZSkNCiAgICAgew0KICAgICAgICAgUUFic3RyYWN0QW5pbWF0aW9uOjp1cGRhdGVTdGF0
ZShuZXdTdGF0ZSwgb2xkU3RhdGUpOw0KKw0KICAgICAgICAgaWYgKG1fbGF5ZXIpDQogICAgICAg
ICAgICAgbV9sYXllci5kYXRhKCktPm1fb3BhY2l0eUFuaW1hdGlvblJ1bm5pbmcgPSAobmV3U3Rh
dGUgPT0gUUFic3RyYWN0QW5pbWF0aW9uOjpSdW5uaW5nKTsNCiAgICAgfQ0KQEAgLTEwNzksMTEg
KzExMjQsMTIgQEAgdm9pZCBHcmFwaGljc0xheWVyUXQ6OnJlbW92ZUFuaW1hdGlvbnNGb3JLZXlm
cmFtZXMoY29uc3QgU3RyaW5nJiBuYW1lKQ0KIHZvaWQgR3JhcGhpY3NMYXllclF0OjpwYXVzZUFu
aW1hdGlvbihjb25zdCBTdHJpbmcmIG5hbWUsIGRvdWJsZSB0aW1lT2Zmc2V0KQ0KIHsNCiAgICAg
Zm9yIChRTGlzdDxRV2Vha1BvaW50ZXI8UUFic3RyYWN0QW5pbWF0aW9uPiA+OjppdGVyYXRvciBp
dCA9IG1faW1wbC0+bV9hbmltYXRpb25zLmJlZ2luKCk7IGl0ICE9IG1faW1wbC0+bV9hbmltYXRp
b25zLmVuZCgpOyArK2l0KSB7DQotICAgICAgICBpZiAoKml0KSB7DQotICAgICAgICAgICAgQW5p
bWF0aW9uUXRCYXNlKiBhbmltID0gc3RhdGljX2Nhc3Q8QW5pbWF0aW9uUXRCYXNlKj4oKCppdCku
ZGF0YSgpKTsNCi0gICAgICAgICAgICBpZiAoYW5pbSAmJiBhbmltLT5tX2tleWZyYW1lc05hbWUg
PT0gUVN0cmluZyhuYW1lKSkNCi0gICAgICAgICAgICAgICAgUVRpbWVyOjpzaW5nbGVTaG90KHRp
bWVPZmZzZXQgKiAxMDAwLCBhbmltLCBTTE9UKHBhdXNlKCkpKTsNCi0gICAgICAgIH0NCisgICAg
ICAgIGlmICghKCppdCkpDQorICAgICAgICAgICAgY29udGludWU7DQorDQorICAgICAgICBBbmlt
YXRpb25RdEJhc2UqIGFuaW0gPSBzdGF0aWNfY2FzdDxBbmltYXRpb25RdEJhc2UqPigoKml0KS5k
YXRhKCkpOw0KKyAgICAgICAgaWYgKGFuaW0gJiYgYW5pbS0+bV9rZXlmcmFtZXNOYW1lID09IFFT
dHJpbmcobmFtZSkpDQorICAgICAgICAgICAgUVRpbWVyOjpzaW5nbGVTaG90KHRpbWVPZmZzZXQg
KiAxMDAwLCBhbmltLCBTTE9UKHBhdXNlKCkpKTsNCiAgICAgfQ0KIH0NCiANCkBAIC0xMDkyLDEz
ICsxMTM4LDExIEBAIHZvaWQgR3JhcGhpY3NMYXllclF0OjpzdXNwZW5kQW5pbWF0aW9ucyhkb3Vi
bGUgdGltZSkNCiAgICAgaWYgKG1faW1wbC0+bV9zdXNwZW5kVGltZXIuaXNBY3RpdmUoKSkgew0K
ICAgICAgICAgbV9pbXBsLT5tX3N1c3BlbmRUaW1lci5zdG9wKCk7DQogICAgICAgICBtX2ltcGwt
Pm1fc3VzcGVuZFRpbWVyLnN0YXJ0KHRpbWUgKiAxMDAwKTsNCi0gICAgfSBlbHNlIHsNCisgICAg
fSBlbHNlDQogICAgICAgICBmb3IgKFFMaXN0PFFXZWFrUG9pbnRlcjxRQWJzdHJhY3RBbmltYXRp
b24+ID46Oml0ZXJhdG9yIGl0ID0gbV9pbXBsLT5tX2FuaW1hdGlvbnMuYmVnaW4oKTsgaXQgIT0g
bV9pbXBsLT5tX2FuaW1hdGlvbnMuZW5kKCk7ICsraXQpIHsNCi0gICAgICAgICAgICBRQWJzdHJh
Y3RBbmltYXRpb24qIGFuaW0gPSBpdC0+ZGF0YSgpOw0KLSAgICAgICAgICAgIGlmIChhbmltKQ0K
KyAgICAgICAgICAgIGlmIChRQWJzdHJhY3RBbmltYXRpb24qIGFuaW0gPSBpdC0+ZGF0YSgpKQ0K
ICAgICAgICAgICAgICAgICBhbmltLT5wYXVzZSgpOw0KICAgICAgICAgfQ0KLSAgICB9DQogfQ0K
IA0KIHZvaWQgR3JhcGhpY3NMYXllclF0OjpyZXN1bWVBbmltYXRpb25zKCkNCkBAIC0xMTA2LDgg
KzExNTAsNyBAQCB2b2lkIEdyYXBoaWNzTGF5ZXJRdDo6cmVzdW1lQW5pbWF0aW9ucygpDQogICAg
IGlmIChtX2ltcGwtPm1fc3VzcGVuZFRpbWVyLmlzQWN0aXZlKCkpIHsNCiAgICAgICAgIG1faW1w
bC0+bV9zdXNwZW5kVGltZXIuc3RvcCgpOw0KICAgICAgICAgZm9yIChRTGlzdDxRV2Vha1BvaW50
ZXI8UUFic3RyYWN0QW5pbWF0aW9uPiA+OjppdGVyYXRvciBpdCA9IG1faW1wbC0+bV9hbmltYXRp
b25zLmJlZ2luKCk7IGl0ICE9IG1faW1wbC0+bV9hbmltYXRpb25zLmVuZCgpOyArK2l0KSB7DQot
ICAgICAgICAgICAgUUFic3RyYWN0QW5pbWF0aW9uKiBhbmltID0gKCppdCkuZGF0YSgpOw0KLSAg
ICAgICAgICAgIGlmIChhbmltKQ0KKyAgICAgICAgICAgIGlmIChRQWJzdHJhY3RBbmltYXRpb24q
IGFuaW0gPSAoKml0KS5kYXRhKCkpDQogICAgICAgICAgICAgICAgIGFuaW0tPnJlc3VtZSgpOw0K
ICAgICAgICAgfQ0KICAgICB9DQpkaWZmIC0tZ2l0IGEvV2ViS2l0L3F0L0FwaS9xZ3JhcGhpY3N3
ZWJ2aWV3LmNwcCBiL1dlYktpdC9xdC9BcGkvcWdyYXBoaWNzd2Vidmlldy5jcHANCmluZGV4IGQ5
ZThhNzQuLjFhNWUwNDMgMTAwNjQ0DQotLS0gYS9XZWJLaXQvcXQvQXBpL3FncmFwaGljc3dlYnZp
ZXcuY3BwDQorKysgYi9XZWJLaXQvcXQvQXBpL3FncmFwaGljc3dlYnZpZXcuY3BwDQpAQCAtMjcs
NiArMjcsNyBAQA0KICNpbmNsdWRlICJxd2VicGFnZV9wLmgiDQogI2luY2x1ZGUgIlFXZWJQYWdl
Q2xpZW50LmgiDQogI2luY2x1ZGUgPEZyYW1lVmlldy5oPg0KKyNpbmNsdWRlIDxRdENvcmUvcW1l
dGFvYmplY3QuaD4NCiAjaW5jbHVkZSA8UXRDb3JlL3FzaGFyZWRwb2ludGVyLmg+DQogI2luY2x1
ZGUgPFF0Q29yZS9xdGltZXIuaD4NCiAjaW5jbHVkZSA8UXRHdWkvcWFwcGxpY2F0aW9uLmg+DQpA
QCAtNzgsMTMgKzc5LDE0IEBAIHB1YmxpYzoNCiAgICAgICAgICwgcGFnZSgwKQ0KICNpZiBVU0Uo
QUNDRUxFUkFURURfQ09NUE9TSVRJTkcpDQogICAgICAgICAsIHJvb3RHcmFwaGljc0xheWVyKDAp
DQotICAgICAgICAsIHNob3VsZFN5bmModHJ1ZSkNCisgICAgICAgICwgc2hvdWxkU3luYyhmYWxz
ZSkNCiAjZW5kaWYNCiAgICAgew0KICNpZiBVU0UoQUNDRUxFUkFURURfQ09NUE9TSVRJTkcpDQog
ICAgICAgICAvLyB0aGUgb3ZlcmxheSBhbmQgc3RheXMgYWxpdmUgZm9yIHRoZSBsaWZldGltZSBv
Zg0KICAgICAgICAgLy8gdGhpcyBRR3JhcGhpY3NXZWJWaWV3IGFzIHRoZSBzY3JvbGxiYXJzIGFy
ZSBuZWVkZWQgd2hlbiB0aGVyZSdzIG5vIGNvbXBvc2l0aW5nDQogICAgICAgICBxLT5zZXRGbGFn
KFFHcmFwaGljc0l0ZW06Okl0ZW1Vc2VzRXh0ZW5kZWRTdHlsZU9wdGlvbik7DQorICAgICAgICBz
eW5jTWV0YU1ldGhvZCA9IHEtPm1ldGFPYmplY3QoKS0+bWV0aG9kKHEtPm1ldGFPYmplY3QoKS0+
aW5kZXhPZk1ldGhvZCgic3luY0xheWVycygpIikpOw0KICNlbmRpZg0KICAgICB9DQogDQpAQCAt
MTI5LDYgKzEzMSw5IEBAIHB1YmxpYzoNCiAgICAgLy8gY29tcG9zaXRvciB0ZWxsaW5nIHVzIHRv
IGRvIHNvLiBXZSdsbCBnZXQgdGhhdCBjYWxsIGZyb20gQ2hyb21lQ2xpZW50UXQNCiAgICAgYm9v
bCBzaG91bGRTeW5jOw0KIA0KKyAgICAvLyB3ZSBoYXZlIHRvIGZsdXNoIHF1aXRlIG9mdGVuLCBz
byB3ZSB1c2UgYSBtZXRhLW1ldGhvZCBpbnN0ZWFkIG9mIFFUaW1lcjo6c2luZ2xlU2hvdCBmb3Ig
cHV0dGluZyB0aGUgZXZlbnQgaW4gdGhlIHF1ZXVlDQorICAgIFFNZXRhTWV0aG9kIHN5bmNNZXRh
TWV0aG9kOw0KKw0KICAgICAvLyB3ZSBuZWVkIHRvIHB1dCB0aGUgcm9vdCBncmFwaGljcyBsYXll
ciBiZWhpbmQgdGhlIG92ZXJsYXkgKHdoaWNoIGNvbnRhaW5zIHRoZSBzY3JvbGxiYXIpDQogICAg
IGVudW0geyBSb290R3JhcGhpY3NMYXllclpWYWx1ZSwgT3ZlcmxheVpWYWx1ZSB9Ow0KICNlbmRp
Zg0KQEAgLTE3Niw3ICsxODEsNyBAQCB2b2lkIFFHcmFwaGljc1dlYlZpZXdQcml2YXRlOjptYXJr
Rm9yU3luYyhib29sIHNjaGVkdWxlU3luYykNCiB7DQogICAgIHNob3VsZFN5bmMgPSB0cnVlOw0K
ICAgICBpZiAoc2NoZWR1bGVTeW5jKQ0KLSAgICAgICAgUVRpbWVyOjpzaW5nbGVTaG90KDAsIHEs
IFNMT1Qoc3luY0xheWVycygpKSk7DQorICAgICAgICBzeW5jTWV0YU1ldGhvZC5pbnZva2UocSwg
UXQ6OlF1ZXVlZENvbm5lY3Rpb24pOw0KIH0NCiANCiB2b2lkIFFHcmFwaGljc1dlYlZpZXdQcml2
YXRlOjp1cGRhdGVDb21wb3NpdGluZ1Njcm9sbFBvc2l0aW9uKCkNCkBAIC0yMjIsNiArMjI3LDcg
QEAgdm9pZCBRR3JhcGhpY3NXZWJWaWV3UHJpdmF0ZTo6dXBkYXRlKGNvbnN0IFFSZWN0ICYgZGly
dHlSZWN0KQ0KICNpZiBVU0UoQUNDRUxFUkFURURfQ09NUE9TSVRJTkcpDQogICAgIGlmIChvdmVy
bGF5KQ0KICAgICAgICAgb3ZlcmxheS0+dXBkYXRlKFFSZWN0RihkaXJ0eVJlY3QpKTsNCisgICAg
c3luY0xheWVycygpOw0KICNlbmRpZg0KIH0NCiANCkBAIC00MzUsNyArNDQxLDYgQEAgdm9pZCBR
R3JhcGhpY3NXZWJWaWV3OjpwYWludChRUGFpbnRlciogcGFpbnRlciwgY29uc3QgUVN0eWxlT3B0
aW9uR3JhcGhpY3NJdGVtKg0KIHsNCiAjaWYgVVNFKEFDQ0VMRVJBVEVEX0NPTVBPU0lUSU5HKQ0K
ICAgICBwYWdlKCktPm1haW5GcmFtZSgpLT5yZW5kZXIocGFpbnRlciwgZC0+b3ZlcmxheSA/IFFX
ZWJGcmFtZTo6Q29udGVudHNMYXllciA6IFFXZWJGcmFtZTo6QWxsTGF5ZXJzLCBvcHRpb24tPmV4
cG9zZWRSZWN0LnRvQWxpZ25lZFJlY3QoKSk7DQotICAgIGQtPnN5bmNMYXllcnMoKTsNCiAjZWxz
ZQ0KICAgICBwYWdlKCktPm1haW5GcmFtZSgpLT5yZW5kZXIocGFpbnRlciwgUVdlYkZyYW1lOjpB
bGxMYXllcnMsIG9wdGlvbi0+ZXhwb3NlZFJlY3QudG9SZWN0KCkpOw0KICNlbmRpZg0KZGlmZiAt
LWdpdCBhL1dlYktpdC9xdC9DaGFuZ2VMb2cgYi9XZWJLaXQvcXQvQ2hhbmdlTG9nDQppbmRleCA2
Y2NhOTdjLi42MzI5ZmFjIDEwMDY0NA0KLS0tIGEvV2ViS2l0L3F0L0NoYW5nZUxvZw0KKysrIGIv
V2ViS2l0L3F0L0NoYW5nZUxvZw0KQEAgLTEsMyArMSwxNSBAQA0KKzIwMTAtMDEtMjQgIE5vJ2Ft
IFJvc2VudGhhbCAgPG5vYW0ucm9zZW50aGFsQG5va2lhLmNvbT4NCisNCisgICAgICAgIFJldmll
d2VkIGJ5IE5PQk9EWSAoT09QUyEpLg0KKw0KKyAgICAgICAgW1F0XSBUdW5pbmcgYW5kIG9wdGlt
aXphdGlvbnMgdG8gR3JhcGhpY3NMYXllclF0LiBNYWlubHkgcmVkdWNlZCB1c2FnZQ0KKyAgICAg
ICAgb2YgUVRpbWVyOjpzaW5nbGVTaG90LCBhbmQgbW92ZWQgc3luY0xheWVycygpIGZyb20gcGFp
bnQoKSB0byB1cGRhdGUoKQ0KKyAgICAgICAgaHR0cHM6Ly9idWdzLndlYmtpdC5vcmcvc2hvd19i
dWcuY2dpP2lkPTM0MDYyDQorDQorICAgICAgICAqIEFwaS9xZ3JhcGhpY3N3ZWJ2aWV3LmNwcDoN
CisgICAgICAgIChRR3JhcGhpY3NXZWJWaWV3UHJpdmF0ZTo6dXBkYXRlKTogTW92ZWQgdGhlIHN5
bmMgb3BlcmF0aW9uIHRvIHVwZGF0ZQ0KKyAgICAgICAgKFFHcmFwaGljc1dlYlZpZXc6OnBhaW50
KTogTW92ZWQgdGhlIHN5bmMgb3BlcmF0aW9uIHRvIHVwZGF0ZQ0KKw0KIDIwMTAtMDEtMjMgIEdp
cmlzaCBSYW1ha3Jpc2huYW4gIDxnaXJpc2hAZm9yd2FyZGJpYXMuaW4+DQogDQogICAgICAgICBS
ZXZpZXdlZCBieSBLZW5uZXRoIFJvaGRlIENocmlzdGlhbnNlbi4NCi0tIA0KMS42LjYucmMwLjYz
Lmc2NmFiYw0K
</data>
<flag name="review"
          id="30550"
          type_id="1"
          status="-"
          setter="kenneth"
    />
          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>47973</attachid>
            <date>2010-02-02 14:05:13 -0800</date>
            <delta_ts>2010-02-02 20:39:18 -0800</delta_ts>
            <desc>Performance tuning to GraphicsLayerQt: Some style fixes + correct changelog</desc>
            <filename>patch-34062-3.diff</filename>
            <type>text/plain</type>
            <size>24664</size>
            <attacher name="Noam Rosenthal">noam</attacher>
            
              <data encoding="base64">ZGlmZiAtLWdpdCBhL1dlYkNvcmUvQ2hhbmdlTG9nIGIvV2ViQ29yZS9DaGFuZ2VMb2cKaW5kZXgg
YjllMDVmZC4uMjc3ZjAxOCAxMDA2NDQKLS0tIGEvV2ViQ29yZS9DaGFuZ2VMb2cKKysrIGIvV2Vi
Q29yZS9DaGFuZ2VMb2cKQEAgLTEsMyArMSwyMSBAQAorMjAxMC0wMS0yNCAgTm8nYW0gUm9zZW50
aGFsICA8bm9hbS5yb3NlbnRoYWxAbm9raWEuY29tPgorCisgICAgICAgIFJldmlld2VkIGJ5IE5P
Qk9EWSAoT09QUyEpLgorCisgICAgICAgIFtRdF0gVHVuaW5nIGFuZCBvcHRpbWl6YXRpb25zIHRv
IEdyYXBoaWNzTGF5ZXJRdC4gUmVkdWNlIHVubmVjZXNzYXJ5CisgICAgICAgIHJlY2FjaGluZywg
cmVtb3ZlIFFUaW1lcjo6c2luZ2xlU2hvdCBhbmQgUVBpeG1hcDo6c2NhbGVkLCBtb3JlCisgICAg
ICAgIGFjY3VyYXRlIHN0cmF0ZWd5IG9mIGhhbmRsaW5nIHRyYW5zZm9ybSBvcGVyYXRpb24gYmxl
bmRzLiBSb3RhdGluZyBhCisgICAgICAgIGJvcmRlcmVkLXRhYmxlLCBmb3IgZXhhbXBsZSwgbm93
IHJ1bnMgYXQgNTBGUFMgaW5zdGVhZCBvZiA0MEZQUyBvbiBNYWVtbzUuCisKKyAgICAgICAgaHR0
cHM6Ly9idWdzLndlYmtpdC5vcmcvc2hvd19idWcuY2dpP2lkPTM0MDYyCisKKyAgICAgICAgVGhp
cyBpcyB0ZXN0ZWQgYnkgaHR0cHM6Ly9idWdzLndlYmtpdC5vcmcvc2hvd19idWcuY2dpP2lkPTM0
NDUwLCBmcHMgbWVhc3VyZW1lbnRzLgorCisgICAgICAgICogcGxhdGZvcm0vZ3JhcGhpY3MvcXQv
R3JhcGhpY3NMYXllclF0LmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OkdyYXBoaWNzTGF5ZXJRdElt
cGw6OmZsdXNoQ2hhbmdlcyk6IEZpbmUtdHVuZSBjYWNoaW5nCisgICAgICAgIChXZWJDb3JlOjpU
cmFuc2Zvcm1BbmltYXRpb25RdDo6VHJhbnNmb3JtQW5pbWF0aW9uUXQpOiB0cmFuc2Zvcm0gYnVn
cworICAgICAgICAoV2ViQ29yZTo6T3BhY2l0eUFuaW1hdGlvblF0Ojp1cGRhdGVTdGF0ZSk6IHN0
eWxlIGNoYW5nZQorCiAyMDEwLTAxLTI0ICBPbGl2ZXIgSHVudCAgPG9saXZlckBhcHBsZS5jb20+
CiAKICAgICAgICAgUmV2aWV3ZWQgYnkgRGFyaW4gQWRsZXIuCmRpZmYgLS1naXQgYS9XZWJDb3Jl
L3BsYXRmb3JtL2dyYXBoaWNzL3F0L0dyYXBoaWNzTGF5ZXJRdC5jcHAgYi9XZWJDb3JlL3BsYXRm
b3JtL2dyYXBoaWNzL3F0L0dyYXBoaWNzTGF5ZXJRdC5jcHAKaW5kZXggNTcxMmVlZS4uYmYzYWFk
ZSAxMDA2NDQKLS0tIGEvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9xdC9HcmFwaGljc0xheWVy
UXQuY3BwCisrKyBiL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvcXQvR3JhcGhpY3NMYXllclF0
LmNwcApAQCAtOTksMTQgKzk5LDI2IEBAIHB1YmxpYzoKICAgICAvLyBvciBDaHJvbWVDbGllbnRR
dDo6c2NoZWR1bGVDb21wb3NpdGluZ0xheWVyU3luYyAobWVhbmluZyB0aGUgc3luYyB3aWxsIGhh
cHBlbiBBU0FQKQogICAgIHZvaWQgZmx1c2hDaGFuZ2VzKGJvb2wgcmVjdXJzaXZlID0gdHJ1ZSk7
CiAKKyAgICAvLyBvcHRpbWl6YXRpb246IHdoZW4gd2UgaGF2ZSBhbiBhbmltYXRpb24gcnVubmlu
ZyBvbiBhbiBlbGVtZW50IHdpdGggbm8gY29udGVudHMsIHRoYXQgaGFzIGNoaWxkLWVsZW1lbnRz
IHdpdGggY29udGVudHMsCisgICAgLy8gQUxMIG9mIHRoZW0gaGF2ZSB0byBoYXZlIEl0ZW1Db29y
ZGluYXRlQ2FjaGUgYW5kIG5vdCBEZXZpY2VDb29yZGluYXRlQ2FjaGUKKyAgICB2b2lkIGFkanVz
dENhY2hpbmdSZWN1cnNpdmVseShib29sIGFuaW1hdGlvbklzUnVubmluZyk7CisKKyAgICAvLyBv
cHRpbWl6YXRpb246IHJldHVybnMgdHJ1ZSBpZiB0aGlzIG9yIGFuIGFuY2VzdG9yIGhhcyBhIHRy
YW5zZm9ybSBhbmltYXRpb24gcnVubmluZy4KKyAgICAvLyB0aGlzIGVuYWJsZXMgdXMgdG8gdXNl
IEl0ZW1Db29yZGluYXRlc0NhY2hlIHdoaWxlIHRoZSBhbmltYXRpb24gaXMgcnVubmluZywgb3Ro
ZXJ3aXNlIHdlIGhhdmUgdG8gcmVjYWNoZSBmb3IgZXZlcnkgZnJhbWUKKyAgICBib29sIGlzVHJh
bnNmb3JtQW5pbWF0aW9uUnVubmluZygpIGNvbnN0OworCiBwdWJsaWMgc2xvdHM6CiAgICAgLy8g
d2UgbmVlZCB0byBub3RpZnkgdGhlIGNsaWVudCAoYWthIHRoZSBsYXllciBjb21wb3NpdG9yKSB3
aGVuIHRoZSBhbmltYXRpb24gYWN0dWFsbHkgc3RhcnRzCiAgICAgdm9pZCBub3RpZnlBbmltYXRp
b25TdGFydGVkKCk7CiAKK3NpZ25hbHM6CisgICAgLy8gb3B0aW1pemF0aW9uOiB3ZSBkb24ndCB3
YW50IHRvIHVzZSBRVGltZXI6OnNpbmdsZVNob3QKKyAgICB2b2lkIG5vdGlmeUFuaW1hdGlvblN0
YXJ0ZWRBc3luYygpOworCiBwdWJsaWM6CiAgICAgR3JhcGhpY3NMYXllclF0KiBtX2xheWVyOwog
Ci0gICAgUVRyYW5zZm9ybSBtX2Jhc2VUcmFuc2ZvbTsKKyAgICBRVHJhbnNmb3JtIG1fYmFzZVRy
YW5zZm9ybTsKICAgICBib29sIG1fdHJhbnNmb3JtQW5pbWF0aW9uUnVubmluZzsKICAgICBib29s
IG1fb3BhY2l0eUFuaW1hdGlvblJ1bm5pbmc7CiAKQEAgLTE1NywxMiArMTY5LDE0IEBAIHB1Ymxp
YzoKICAgICAgICAgYm9vbCBiYWNrZmFjZVZpc2liaWxpdHk6IDE7CiAgICAgICAgIGJvb2wgZGlz
dHJpYnV0ZU9wYWNpdHk6IDE7CiAgICAgICAgIGJvb2wgYWxpZ246IDI7Ci0gICAgICAgIFN0YXRl
KCk6IG1hc2tMYXllcigwKSwgb3BhY2l0eSgxKSwgcHJlc2VydmVzM0QoZmFsc2UpLCBtYXNrc1Rv
Qm91bmRzKGZhbHNlKSwKKyAgICAgICAgU3RhdGUoKTogbWFza0xheWVyKDApLCBvcGFjaXR5KDEu
ZiksIHByZXNlcnZlczNEKGZhbHNlKSwgbWFza3NUb0JvdW5kcyhmYWxzZSksCiAgICAgICAgICAg
ICAgICAgICBkcmF3c0NvbnRlbnQoZmFsc2UpLCBjb250ZW50c09wYXF1ZShmYWxzZSksIGJhY2tm
YWNlVmlzaWJpbGl0eShmYWxzZSksCiAgICAgICAgICAgICAgICAgICBkaXN0cmlidXRlT3BhY2l0
eShmYWxzZSkKICAgICAgICAgewogICAgICAgICB9CiAgICAgfSBtX3N0YXRlOworCisgICAgZnJp
ZW5kIGNsYXNzIEFuaW1hdGlvblF0QmFzZTsKIH07CiAKIEdyYXBoaWNzTGF5ZXJRdEltcGw6Okdy
YXBoaWNzTGF5ZXJRdEltcGwoR3JhcGhpY3NMYXllclF0KiBuZXdMYXllcikKQEAgLTE3MSwxNiAr
MTg1LDE0IEBAIEdyYXBoaWNzTGF5ZXJRdEltcGw6OkdyYXBoaWNzTGF5ZXJRdEltcGwoR3JhcGhp
Y3NMYXllclF0KiBuZXdMYXllcikKICAgICAsIG1fdHJhbnNmb3JtQW5pbWF0aW9uUnVubmluZyhm
YWxzZSkKICAgICAsIG1fY2hhbmdlTWFzayhOb0NoYW5nZXMpCiB7Ci0gICAgLy8gYmV0dGVyIHRv
IGNhbGN1bGF0ZSB0aGUgZXhwb3NlZCByZWN0IGluIFFHcmFwaGljc1ZpZXcgdGhhbiBvdmVyLXJl
bmRlciBpbiBXZWJDb3JlCi0gICAgLy8gRklYTUU6IHRlc3QgZGlmZmVyZW50IGFwcHJvYWNoZXMK
LSAgICBzZXRGbGFnKFFHcmFwaGljc0l0ZW06Okl0ZW1Vc2VzRXh0ZW5kZWRTdHlsZU9wdGlvbiwg
dHJ1ZSk7Ci0KICAgICAvLyB3ZSB1c2UgZ3JhcGhpY3MtdmlldyBmb3IgY29tcG9zaXRpbmcsIG5v
dCBmb3IgaW50ZXJhY3Rpdml0eQogICAgIHNldEFjY2VwdGVkTW91c2VCdXR0b25zKFF0OjpOb0J1
dHRvbik7CiAgICAgc2V0RW5hYmxlZChmYWxzZSk7CiAKICAgICAvLyB3ZSdsbCBzZXQgdGhlIGNh
Y2hlIHdoZW4gd2Uga25vdyB3aGF0J3MgZ29pbmcgb24KICAgICBzZXRDYWNoZU1vZGUoTm9DYWNo
ZSk7CisKKyAgICBjb25uZWN0KHRoaXMsIFNJR05BTChub3RpZnlBbmltYXRpb25TdGFydGVkQXN5
bmMoKSksIHRoaXMsIFNMT1Qobm90aWZ5QW5pbWF0aW9uU3RhcnRlZCgpKSwgUXQ6OlF1ZXVlZENv
bm5lY3Rpb24pOwogfQogCiBHcmFwaGljc0xheWVyUXRJbXBsOjp+R3JhcGhpY3NMYXllclF0SW1w
bCgpCkBAIC0yMDMsMjIgKzIxNSw0MiBAQCBHcmFwaGljc0xheWVyUXRJbXBsOjp+R3JhcGhpY3NM
YXllclF0SW1wbCgpCiAgICAgICAgICAgICBkZWxldGUgYW5pbTsKIH0KIAordm9pZCBHcmFwaGlj
c0xheWVyUXRJbXBsOjphZGp1c3RDYWNoaW5nUmVjdXJzaXZlbHkoYm9vbCBhbmltYXRpb25Jc1J1
bm5pbmcpCit7CisgICAgLy8gb3B0aW1pemF0aW9uOiB3ZSBtYWtlIHN1cmUgYWxsIG91ciBjaGls
ZHJlbiBoYXZlIEl0ZW1Db29yZGluYXRlQ2FjaGUgLQorICAgIC8vIG90aGVyd2lzZSB3ZSBlbmQg
dXAgcmUtcmVuZGVyaW5nIHRoZW0gZHVyaW5nIHRoZSBhbmltYXRpb24KKyAgICBjb25zdCBRTGlz
dDxRR3JhcGhpY3NJdGVtKj4gY2hpbGRyZW4gPSBjaGlsZEl0ZW1zKCk7CisKKyAgICBmb3IgKFFM
aXN0PFFHcmFwaGljc0l0ZW0qPjo6Y29uc3RfaXRlcmF0b3IgaXQgPSBjaGlsZHJlbi5iZWdpbigp
OyBpdCAhPSBjaGlsZHJlbi5lbmQoKTsgKytpdCkgeworICAgICAgICBpZiAoUUdyYXBoaWNzSXRl
bSogaXRlbSA9ICppdCkKKyAgICAgICAgICAgIGlmIChHcmFwaGljc0xheWVyUXRJbXBsKiBsYXll
ciA9IHFvYmplY3RfY2FzdDxHcmFwaGljc0xheWVyUXRJbXBsKj4oaXRlbS0+dG9HcmFwaGljc09i
amVjdCgpKSkgeworICAgICAgICAgICAgICAgIGlmIChsYXllci0+bV9sYXllci0+ZHJhd3NDb250
ZW50KCkgJiYgbGF5ZXItPm1fY3VycmVudENvbnRlbnQuY29udGVudFR5cGUgPT0gSFRNTENvbnRl
bnRUeXBlKQorICAgICAgICAgICAgICAgICAgICBsYXllci0+c2V0Q2FjaGVNb2RlKGFuaW1hdGlv
bklzUnVubmluZyA/IFFHcmFwaGljc0l0ZW06Okl0ZW1Db29yZGluYXRlQ2FjaGUgOiBRR3JhcGhp
Y3NJdGVtOjpEZXZpY2VDb29yZGluYXRlQ2FjaGUpOworICAgICAgICAgICAgfQorICAgIH0gICAg
Cit9CisKIHZvaWQgR3JhcGhpY3NMYXllclF0SW1wbDo6c2V0QmFzZVRyYW5zZm9ybShjb25zdCBR
VHJhbnNmb3JtJiB0cmFuc2Zvcm0pCiB7CiAgICAgaWYgKCFtX2xheWVyKQogICAgICAgICByZXR1
cm47Ci0gICAgLy8gd2Via2l0IGhhcyByZWxhdGl2ZS10by1zaXplIG9yaWdpblBvaW50LCBncmFw
aGljcy12aWV3IGhhcyBhIHBpeGVsIG9yaWdpblBvaW50Ci0gICAgLy8gaGVyZSB3ZSBjb252ZXJ0
Ci0gICAgUVBvaW50RiBvcmlnaW5UcmFuc2xhdGUoCi0gICAgICAgICAgICBtX2xheWVyLT5hbmNo
b3JQb2ludCgpLngoKSAqIG1fbGF5ZXItPnNpemUoKS53aWR0aCgpLCBtX2xheWVyLT5hbmNob3JQ
b2ludCgpLnkoKSAqIG1fbGF5ZXItPnNpemUoKS5oZWlnaHQoKSk7Ci0KLSAgICByZXNldFRyYW5z
Zm9ybSgpOwotCi0gICAgLy8gd2UgaGF2ZSB0byBtYW5hZ2UgdGhpcyBvdXJzZWx2ZXMgYmVjYXVz
ZSBRR3JhcGhpY3NWaWV3J3MgdHJhbnNmb3JtT3JpZ2luIGlzIGluY29tcGxldGUKLSAgICB0cmFu
c2xhdGUob3JpZ2luVHJhbnNsYXRlLngoKSwgb3JpZ2luVHJhbnNsYXRlLnkoKSk7CisgICAgLy8g
d2Via2l0IGhhcyByZWxhdGl2ZS10by1zaXplIG9yaWdpblBvaW50LCBncmFwaGljcy12aWV3IGhh
cyBhIHBpeGVsIG9yaWdpblBvaW50LCBoZXJlIHdlIGNvbnZlcnQKKyAgICAvLyB3ZSBoYXZlIHRv
IG1hbmFnZSB0aGlzIG91cnNlbHZlcyBiZWNhdXNlIFFHcmFwaGljc1ZpZXcncyB0cmFuc2Zvcm1P
cmlnaW4gaXMgaW5jb21wYXRpYmxlCisgICAgY29uc3QgcXJlYWwgeCA9IG1fbGF5ZXItPmFuY2hv
clBvaW50KCkueCgpICogbV9sYXllci0+c2l6ZSgpLndpZHRoKCk7CisgICAgY29uc3QgcXJlYWwg
eSA9IG1fbGF5ZXItPmFuY2hvclBvaW50KCkueSgpICogbV9sYXllci0+c2l6ZSgpLmhlaWdodCgp
OworICAgIHNldFRyYW5zZm9ybShRVHJhbnNmb3JtOjpmcm9tVHJhbnNsYXRlKHgsIHkpKTsKICAg
ICBzZXRUcmFuc2Zvcm0odHJhbnNmb3JtLCB0cnVlKTsKLSAgICB0cmFuc2xhdGUoLW9yaWdpblRy
YW5zbGF0ZS54KCksIC1vcmlnaW5UcmFuc2xhdGUueSgpKTsKLSAgICBtX2Jhc2VUcmFuc2ZvbSA9
IHRyYW5zZm9ybTsKKyAgICB0cmFuc2xhdGUoLXgsIC15KTsKKyAgICBtX2Jhc2VUcmFuc2Zvcm0g
PSB0cmFuc2Zvcm07Cit9CisKK2Jvb2wgR3JhcGhpY3NMYXllclF0SW1wbDo6aXNUcmFuc2Zvcm1B
bmltYXRpb25SdW5uaW5nKCkgY29uc3QKK3sKKyAgICBpZiAobV90cmFuc2Zvcm1BbmltYXRpb25S
dW5uaW5nKQorICAgICAgICByZXR1cm4gdHJ1ZTsKKyAgICBpZiAoR3JhcGhpY3NMYXllclF0SW1w
bCogcGFyZW50ID0gcW9iamVjdF9jYXN0PEdyYXBoaWNzTGF5ZXJRdEltcGwqPihwYXJlbnRPYmpl
Y3QoKSkpCisgICAgICAgIHJldHVybiBwYXJlbnQtPmlzVHJhbnNmb3JtQW5pbWF0aW9uUnVubmlu
ZygpOworICAgIHJldHVybiBmYWxzZTsKIH0KIAogUVBhaW50ZXJQYXRoIEdyYXBoaWNzTGF5ZXJR
dEltcGw6Om9wYXF1ZUFyZWEoKSBjb25zdApAQCAtMjcwLDQyICszMDIsMzEgQEAgdm9pZCBHcmFw
aGljc0xheWVyUXRJbXBsOjpwYWludChRUGFpbnRlciogcGFpbnRlciwgY29uc3QgUVN0eWxlT3B0
aW9uR3JhcGhpY3NJdGUKICAgICBkcmF3Q29udGVudHMocGFpbnRlciwgb3B0aW9uLT5leHBvc2Vk
UmVjdCk7CiB9CiAKLXZvaWQgR3JhcGhpY3NMYXllclF0SW1wbDo6ZHJhd0NvbnRlbnRzKFFQYWlu
dGVyKiBwYWludGVyLCBjb25zdCBRUmVjdEYmIHIsIGJvb2wgbWFzaykKK3ZvaWQgR3JhcGhpY3NM
YXllclF0SW1wbDo6ZHJhd0NvbnRlbnRzKFFQYWludGVyKiBwYWludGVyLCBjb25zdCBRUmVjdEYm
IGV4cG9zZWRSZWN0LCBib29sIG1hc2spCiB7Ci0gICAgUVJlY3QgcmVjdCA9IHIudG9BbGlnbmVk
UmVjdCgpOwotICAgIAotICAgIGlmIChtX2N1cnJlbnRDb250ZW50LmNvbnRlbnRUeXBlICE9IEhU
TUxDb250ZW50VHlwZSAmJiAhbV9zdGF0ZS5jb250ZW50c1JlY3QuaXNFbXB0eSgpKQotICAgICAg
ICByZWN0ID0gcmVjdC5pbnRlcnNlY3RlZChtX3N0YXRlLmNvbnRlbnRzUmVjdCk7Ci0KICAgICBp
ZiAobV9jdXJyZW50Q29udGVudC5iYWNrZ3JvdW5kQ29sb3IuaXNWYWxpZCgpKQotICAgICAgICBw
YWludGVyLT5maWxsUmVjdChyLCBRQ29sb3IobV9jdXJyZW50Q29udGVudC5iYWNrZ3JvdW5kQ29s
b3IpKTsKKyAgICAgICAgcGFpbnRlci0+ZmlsbFJlY3QoZXhwb3NlZFJlY3QsIFFDb2xvcihtX2N1
cnJlbnRDb250ZW50LmJhY2tncm91bmRDb2xvcikpOwogCi0gICAgaWYgKCFyZWN0LmlzRW1wdHko
KSkgewotICAgICAgICBzd2l0Y2ggKG1fY3VycmVudENvbnRlbnQuY29udGVudFR5cGUpIHsKLSAg
ICAgICAgY2FzZSBQaXhtYXBDb250ZW50VHlwZToKLSAgICAgICAgICAgIC8vIHdlIGhhdmUgdG8g
c2NhbGUgdGhlIGltYWdlIHRvIHRoZSBjb250ZW50c1JlY3QKLSAgICAgICAgICAgIC8vIEZJWE1F
OiBhIGJldHRlciB3YXkgd291bGQgcHJvYmFibHkgYmUgZHJhd1BpeG1hcCB3aXRoIGEgc3JjL3Rh
cmdldCByZWN0Ci0gICAgICAgICAgICBwYWludGVyLT5kcmF3UGl4bWFwKHJlY3QudG9wTGVmdCgp
LCBtX2N1cnJlbnRDb250ZW50LnBpeG1hcC5zY2FsZWQobV9zdGF0ZS5jb250ZW50c1JlY3Quc2l6
ZSgpKSwgcik7Ci0gICAgICAgICAgICBicmVhazsKLSAgICAgICAgY2FzZSBDb2xvckNvbnRlbnRU
eXBlOgotICAgICAgICAgICAgcGFpbnRlci0+ZmlsbFJlY3QocmVjdCwgbV9jdXJyZW50Q29udGVu
dC5jb250ZW50c0JhY2tncm91bmRDb2xvcik7Ci0gICAgICAgICAgICBicmVhazsKLSAgICAgICAg
ZGVmYXVsdDoKLSAgICAgICAgICAgIGlmIChtX3N0YXRlLmRyYXdzQ29udGVudCkgewotICAgICAg
ICAgICAgICAgIC8vIHRoaXMgaXMgdGhlICJleHBlbnNpdmUiIGJpdC4gd2UgdHJ5IHRvIG1pbmlt
aXplIGNhbGxzIHRvIHRoaXMKLSAgICAgICAgICAgICAgICAvLyBuZWNrIG9mIHRoZSB3b29kcyBi
eSBwcm9wZXIgY2FjaGluZwotICAgICAgICAgICAgICAgIEdyYXBoaWNzQ29udGV4dCBnYyhwYWlu
dGVyKTsKLSAgICAgICAgICAgICAgICBtX2xheWVyLT5wYWludEdyYXBoaWNzTGF5ZXJDb250ZW50
cyhnYywgcmVjdCk7Ci0gICAgICAgICAgICB9Ci0gICAgICAgICAgICBicmVhazsKKyAgICBzd2l0
Y2ggKG1fY3VycmVudENvbnRlbnQuY29udGVudFR5cGUpIHsKKyAgICBjYXNlIFBpeG1hcENvbnRl
bnRUeXBlOgorICAgICAgICBwYWludGVyLT5kcmF3UGl4bWFwKG1fc3RhdGUuY29udGVudHNSZWN0
LCBtX2N1cnJlbnRDb250ZW50LnBpeG1hcCk7CisgICAgICAgIGJyZWFrOworICAgIGNhc2UgQ29s
b3JDb250ZW50VHlwZToKKyAgICAgICAgcGFpbnRlci0+ZmlsbFJlY3QobV9zdGF0ZS5jb250ZW50
c1JlY3QsIG1fY3VycmVudENvbnRlbnQuY29udGVudHNCYWNrZ3JvdW5kQ29sb3IpOworICAgICAg
ICBicmVhazsKKyAgICBkZWZhdWx0OgorICAgICAgICBpZiAobV9zdGF0ZS5kcmF3c0NvbnRlbnQp
IHsKKyAgICAgICAgICAgIC8vIHRoaXMgaXMgdGhlICJleHBlbnNpdmUiIGJpdC4gd2UgdHJ5IHRv
IG1pbmltaXplIGNhbGxzIHRvIHRoaXMgbmVjayBvZiB0aGUgd29vZHMgYnkgcHJvcGVyIGNhY2hp
bmcKKyAgICAgICAgICAgIEdyYXBoaWNzQ29udGV4dCBnYyhwYWludGVyKTsKKyAgICAgICAgICAg
IG1fbGF5ZXItPnBhaW50R3JhcGhpY3NMYXllckNvbnRlbnRzKGdjLCBleHBvc2VkUmVjdC50b0Fs
aWduZWRSZWN0KCkpOwogICAgICAgICB9CisgICAgICAgIGJyZWFrOwogICAgIH0KIH0KIAogdm9p
ZCBHcmFwaGljc0xheWVyUXRJbXBsOjpub3RpZnlDaGFuZ2UoQ2hhbmdlTWFzayBjaGFuZ2VNYXNr
KQogewotICAgIGlmICghdGhpcykKLSAgICAgICAgcmV0dXJuOworICAgIFFfQVNTRVJUKHRoaXMp
OwogCiAgICAgbV9jaGFuZ2VNYXNrIHw9IGNoYW5nZU1hc2s7CiAKQEAgLTM0MiwxNCArMzYzLDE0
IEBAIHZvaWQgR3JhcGhpY3NMYXllclF0SW1wbDo6Zmx1c2hDaGFuZ2VzKGJvb2wgcmVjdXJzaXZl
KQogICAgICAgICBjb25zdCBRU2V0PFFHcmFwaGljc0l0ZW0qPiBjdXJyZW50Q2hpbGRyZW4gPSBj
aGlsZEl0ZW1zKCkudG9TZXQoKTsKICAgICAgICAgY29uc3QgUVNldDxRR3JhcGhpY3NJdGVtKj4g
Y2hpbGRyZW5Ub0FkZCA9IG5ld0NoaWxkcmVuIC0gY3VycmVudENoaWxkcmVuOwogICAgICAgICBj
b25zdCBRU2V0PFFHcmFwaGljc0l0ZW0qPiBjaGlsZHJlblRvUmVtb3ZlID0gY3VycmVudENoaWxk
cmVuIC0gbmV3Q2hpbGRyZW47Ci0gICAgICAgIGZvciAoUVNldDxRR3JhcGhpY3NJdGVtKj46OmNv
bnN0X2l0ZXJhdG9yIGl0ID0gY2hpbGRyZW5Ub0FkZC5iZWdpbigpOyBpdCAhPSBjaGlsZHJlblRv
QWRkLmVuZCgpOyArK2l0KSB7CisKKyAgICAgICAgZm9yIChRU2V0PFFHcmFwaGljc0l0ZW0qPjo6
Y29uc3RfaXRlcmF0b3IgaXQgPSBjaGlsZHJlblRvQWRkLmJlZ2luKCk7IGl0ICE9IGNoaWxkcmVu
VG9BZGQuZW5kKCk7ICsraXQpCiAgICAgICAgICAgICAgaWYgKFFHcmFwaGljc0l0ZW0qIHcgPSAq
aXQpCiAgICAgICAgICAgICAgICAgdy0+c2V0UGFyZW50SXRlbSh0aGlzKTsKLSAgICAgICAgfQot
ICAgICAgICBmb3IgKFFTZXQ8UUdyYXBoaWNzSXRlbSo+Ojpjb25zdF9pdGVyYXRvciBpdCA9IGNo
aWxkcmVuVG9SZW1vdmUuYmVnaW4oKTsgaXQgIT0gY2hpbGRyZW5Ub1JlbW92ZS5lbmQoKTsgKytp
dCkgeworCisgICAgICAgIGZvciAoUVNldDxRR3JhcGhpY3NJdGVtKj46OmNvbnN0X2l0ZXJhdG9y
IGl0ID0gY2hpbGRyZW5Ub1JlbW92ZS5iZWdpbigpOyBpdCAhPSBjaGlsZHJlblRvUmVtb3ZlLmVu
ZCgpOyArK2l0KQogICAgICAgICAgICAgIGlmIChRR3JhcGhpY3NJdGVtKiB3ID0gKml0KQogICAg
ICAgICAgICAgICAgIHctPnNldFBhcmVudEl0ZW0oMCk7Ci0gICAgICAgIH0KIAogICAgICAgICAv
LyBjaGlsZHJlbiBhcmUgb3JkZXJlZCBieSB6LXZhbHVlLCBsZXQgZ3JhcGhpY3MtdmlldyBrbm93
LgogICAgICAgICBmb3IgKHNpemVfdCBpID0gMDsgaSA8IG5ld0NoaWxkcmVuVmVjdG9yLnNpemUo
KTsgKytpKQpAQCAtMzgzLDE3ICs0MDQsMTcgQEAgdm9pZCBHcmFwaGljc0xheWVyUXRJbXBsOjpm
bHVzaENoYW5nZXMoYm9vbCByZWN1cnNpdmUpCiAgICAgICAgIC8vIHRoZSBhbmNob3ItcG9pbnQs
IHRyYW5zZm9ybSBhbmQgc2l6ZSBmcm9tIFdlYkNvcmUgYWxsIGFmZmVjdCB0aGUgb25lCiAgICAg
ICAgIC8vIHRoYXQgd2UgZ2l2ZSBRdAogICAgICAgICBpZiAobV9zdGF0ZS50cmFuc2Zvcm0gIT0g
bV9sYXllci0+dHJhbnNmb3JtKCkgfHwgbV9zdGF0ZS5hbmNob3JQb2ludCAhPSBtX2xheWVyLT5h
bmNob3JQb2ludCgpIHx8IG1fc3RhdGUuc2l6ZSAhPSBtX2xheWVyLT5zaXplKCkpCi0gICAgICAg
ICAgICBzZXRCYXNlVHJhbnNmb3JtKFFUcmFuc2Zvcm0obV9sYXllci0+dHJhbnNmb3JtKCkpKTsK
KyAgICAgICAgICAgIHNldEJhc2VUcmFuc2Zvcm0obV9sYXllci0+dHJhbnNmb3JtKCkpOwogICAg
IH0KIAogICAgIGlmIChtX2NoYW5nZU1hc2sgJiAoQ29udGVudENoYW5nZSB8IERyYXdzQ29udGVu
dENoYW5nZSkpIHsKICAgICAgICAgc3dpdGNoIChtX3BlbmRpbmdDb250ZW50LmNvbnRlbnRUeXBl
KSB7CiAgICAgICAgIGNhc2UgUGl4bWFwQ29udGVudFR5cGU6Ci0gICAgICAgICAgICAvLyB3ZSBu
ZWVkIGNhY2hlIGV2ZW4gZm9yIGltYWdlcywgYmVjYXVzZSB0aGV5IG5lZWQgdG8gYmUgcmVzaXpl
ZAotICAgICAgICAgICAgLy8gdG8gdGhlIGNvbnRlbnRzIHJlY3QuIG1heWJlIHRoaXMgY2FuIGJl
IG9wdGltaXplZCB0aG91Z2gKLSAgICAgICAgICAgIHNldENhY2hlTW9kZShtX3RyYW5zZm9ybUFu
aW1hdGlvblJ1bm5pbmcgPyBJdGVtQ29vcmRpbmF0ZUNhY2hlIDogRGV2aWNlQ29vcmRpbmF0ZUNh
Y2hlKTsKICAgICAgICAgICAgIHVwZGF0ZSgpOwogICAgICAgICAgICAgc2V0RmxhZyhJdGVtSGFz
Tm9Db250ZW50cywgZmFsc2UpOworCisgICAgICAgICAgICAvLyB3ZSBvbmx5IHVzZSBJdGVtVXNl
c0V4dGVuZGVkU3R5bGVPcHRpb24gZm9yIEhUTUwgY29udGVudCAtIHBpeG1hcCBjYW4gYmUgaGFu
ZGxlZCBiZXR0ZXIgd2l0aCByZWd1bGFyIGNsaXBwaW5nCisgICAgICAgICAgICBzZXRGbGFnKFFH
cmFwaGljc0l0ZW06Okl0ZW1Vc2VzRXh0ZW5kZWRTdHlsZU9wdGlvbiwgZmFsc2UpOwogICAgICAg
ICAgICAgYnJlYWs7CiAKICAgICAgICAgY2FzZSBDb2xvckNvbnRlbnRUeXBlOgpAQCAtNDAzLDYg
KzQyNCw5IEBAIHZvaWQgR3JhcGhpY3NMYXllclF0SW1wbDo6Zmx1c2hDaGFuZ2VzKGJvb2wgcmVj
dXJzaXZlKQogICAgICAgICAgICAgICAgIHVwZGF0ZSgpOwogICAgICAgICAgICAgbV9zdGF0ZS5k
cmF3c0NvbnRlbnQgPSBmYWxzZTsKICAgICAgICAgICAgIHNldEZsYWcoSXRlbUhhc05vQ29udGVu
dHMsIGZhbHNlKTsKKworICAgICAgICAgICAgLy8gd2Ugb25seSB1c2UgSXRlbVVzZXNFeHRlbmRl
ZFN0eWxlT3B0aW9uIGZvciBIVE1MIGNvbnRlbnQgLSBjb2xvcnMgZG9uJ3QgZ2FpbiBtdWNoIGZy
b20gdGhhdCBhbnl3YXkKKyAgICAgICAgICAgIHNldEZsYWcoUUdyYXBoaWNzSXRlbTo6SXRlbVVz
ZXNFeHRlbmRlZFN0eWxlT3B0aW9uLCBmYWxzZSk7CiAgICAgICAgICAgICBicmVhazsKIAogICAg
ICAgICBjYXNlIEhUTUxDb250ZW50VHlwZToKQEAgLTQxMCw4ICs0MzQsMTYgQEAgdm9pZCBHcmFw
aGljc0xheWVyUXRJbXBsOjpmbHVzaENoYW5nZXMoYm9vbCByZWN1cnNpdmUpCiAgICAgICAgICAg
ICAgICAgdXBkYXRlKCk7CiAgICAgICAgICAgICBpZiAoIW1fc3RhdGUuZHJhd3NDb250ZW50ICYm
IG1fbGF5ZXItPmRyYXdzQ29udGVudCgpKQogICAgICAgICAgICAgICAgIHVwZGF0ZSgpOwotICAg
ICAgICAgICAgaWYgKG1fbGF5ZXItPmRyYXdzQ29udGVudCgpKQotICAgICAgICAgICAgICAgIHNl
dENhY2hlTW9kZShtX3RyYW5zZm9ybUFuaW1hdGlvblJ1bm5pbmcgPyBJdGVtQ29vcmRpbmF0ZUNh
Y2hlIDogRGV2aWNlQ29vcmRpbmF0ZUNhY2hlKTsKKyAgICAgICAgICAgICAgICBpZiAobV9sYXll
ci0+ZHJhd3NDb250ZW50KCkpIHsKKyAgICAgICAgICAgICAgICAgICAgY29uc3QgUUdyYXBoaWNz
SXRlbTo6Q2FjaGVNb2RlIG1ld0NhY2hlTW9kZSA9IGlzVHJhbnNmb3JtQW5pbWF0aW9uUnVubmlu
ZygpID8gSXRlbUNvb3JkaW5hdGVDYWNoZSA6IERldmljZUNvb3JkaW5hdGVDYWNoZTsKKworICAg
ICAgICAgICAgICAgICAgICAvLyBvcHRpbWl6YXRpb246IFFHcmFwaGljc0l0ZW0gZG9lc24ndCBh
bHdheXMgcGVyZm9ybSB0aGlzIHRlc3QKKyAgICAgICAgICAgICAgICAgICAgaWYgKG1ld0NhY2hl
TW9kZSAhPSBjYWNoZU1vZGUoKSkKKyAgICAgICAgICAgICAgICAgICAgICAgIHNldENhY2hlTW9k
ZShtZXdDYWNoZU1vZGUpOworCisgICAgICAgICAgICAgICAgICAgIC8vIEhUTUwgY29udGVudDog
d2Ugd2FudCB0byB1c2UgZXhwb3NlZFJlY3Qgc28gd2UgZG9uJ3QgdXNlIFdlYkNvcmUgcmVuZGVy
aW5nIGlmIHdlIGRvbid0IGhhdmUgdG8KKyAgICAgICAgICAgICAgICAgICAgc2V0RmxhZyhRR3Jh
cGhpY3NJdGVtOjpJdGVtVXNlc0V4dGVuZGVkU3R5bGVPcHRpb24sIHRydWUpOworICAgICAgICAg
ICAgICAgIH0KICAgICAgICAgICAgIGVsc2UKICAgICAgICAgICAgICAgICBzZXRDYWNoZU1vZGUo
Tm9DYWNoZSk7CiAKQEAgLTQ0OCw3ICs0ODAsNyBAQCB2b2lkIEdyYXBoaWNzTGF5ZXJRdEltcGw6
OmZsdXNoQ2hhbmdlcyhib29sIHJlY3Vyc2l2ZSkKICAgICAgICAgdXBkYXRlKCk7CiAKICAgICAv
LyBGSVhNRTogdGhlIGZvbGxvd2luZyBmbGFncyBhcmUgY3VycmVudGx5IG5vdCBoYW5kbGVkLCBh
cyB0aGV5IGRvbid0IGhhdmUgYSBjbGVhciB0ZXN0IG9yIGFyZSBpbiBsb3cgcHJpb3JpdHkKLSAg
ICAvLyBHZW9tZXRyeU9yaWVudGF0aW9uQ2hhbmdlLCBDb250ZW50c09yaWVudGF0aW9uQ2hhbmdl
LCBCYWNrZmFjZVZpc2liaWxpdHlDaGFuZ2UsIENoaWxkcmVuVHJhbnNmb3JtQ2hhbmdlCisgICAg
Ly8gR2VvbWV0cnlPcmllbnRhdGlvbkNoYW5nZSwgQ29udGVudHNPcmllbnRhdGlvbkNoYW5nZSwg
QmFja2ZhY2VWaXNpYmlsaXR5Q2hhbmdlLCBDaGlsZHJlblRyYW5zZm9ybUNoYW5nZSwgUHJlc2Vy
dmVzM0RDaGFuZ2UKIAogICAgIG1fc3RhdGUubWFza0xheWVyID0gbV9sYXllci0+bWFza0xheWVy
KCk7CiAgICAgbV9zdGF0ZS5wb3MgPSBtX2xheWVyLT5wb3NpdGlvbigpOwpAQCAtNTIzLDkgKzU1
NSw5IEBAIHZvaWQgR3JhcGhpY3NMYXllclF0OjpzZXROZWVkc0Rpc3BsYXkoKQogfQogCiAvLyBy
ZWltcCBmcm9tIEdyYXBoaWNzTGF5ZXIuaAotdm9pZCBHcmFwaGljc0xheWVyUXQ6OnNldE5lZWRz
RGlzcGxheUluUmVjdChjb25zdCBGbG9hdFJlY3QmIHIpCit2b2lkIEdyYXBoaWNzTGF5ZXJRdDo6
c2V0TmVlZHNEaXNwbGF5SW5SZWN0KGNvbnN0IEZsb2F0UmVjdCYgcmVjdCkKIHsKLSAgICBtX2lt
cGwtPm1fcGVuZGluZ0NvbnRlbnQucmVnaW9uVG9VcGRhdGV8PSBRUmVjdEYocikudG9BbGlnbmVk
UmVjdCgpOworICAgIG1faW1wbC0+bV9wZW5kaW5nQ29udGVudC5yZWdpb25Ub1VwZGF0ZXw9IFFS
ZWN0RihyZWN0KS50b0FsaWduZWRSZWN0KCk7CiAgICAgbV9pbXBsLT5ub3RpZnlDaGFuZ2UoR3Jh
cGhpY3NMYXllclF0SW1wbDo6RGlzcGxheUNoYW5nZSk7CiB9CiAKQEAgLTgwNywxNiArODM5LDE2
IEBAIHN0YXRpYyBpbmxpbmUgZG91YmxlIHNvbHZlQ3ViaWNCZXppZXJGdW5jdGlvbihxcmVhbCBw
MXgsIHFyZWFsIHAxeSwgcXJlYWwgcDJ4LCBxCiAvLyBVc2luZyBlYXNpbmctY3VydmVzIHdvdWxk
IHByb2JhYmx5IHdvcmsgZm9yIHNvbWUgb2YgdGhlIGNhc2VzLCBidXQgd291bGRuJ3QgcmVhbGx5
IGJ1eSB1cyBhbnl0aGluZyBhcyB3ZSdkIGhhdmUgdG8gY29udmVydCB0aGUgYmV6aWVyIGZ1bmN0
aW9uIGJhY2sgdG8gYW4gZWFzaW5nIGN1cnZlCiBzdGF0aWMgaW5saW5lIHFyZWFsIGFwcGx5VGlt
aW5nRnVuY3Rpb24oY29uc3QgVGltaW5nRnVuY3Rpb24mIHRpbWluZ0Z1bmN0aW9uLCBxcmVhbCBw
cm9ncmVzcywgaW50IGR1cmF0aW9uKQogewotICAgIGlmICh0aW1pbmdGdW5jdGlvbi50eXBlKCkg
PT0gTGluZWFyVGltaW5nRnVuY3Rpb24pCisgICAgICAgIGlmICh0aW1pbmdGdW5jdGlvbi50eXBl
KCkgPT0gTGluZWFyVGltaW5nRnVuY3Rpb24pCisgICAgICAgICAgICByZXR1cm4gcHJvZ3Jlc3M7
CisgICAgICAgIGlmICh0aW1pbmdGdW5jdGlvbi50eXBlKCkgPT0gQ3ViaWNCZXppZXJUaW1pbmdG
dW5jdGlvbikgeworICAgICAgICAgICAgcmV0dXJuIHNvbHZlQ3ViaWNCZXppZXJGdW5jdGlvbih0
aW1pbmdGdW5jdGlvbi54MSgpLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICB0aW1pbmdGdW5jdGlvbi55MSgpLAorICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICB0aW1pbmdGdW5jdGlvbi54MigpLAorICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICB0aW1pbmdGdW5jdGlvbi55MigpLAorICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBkb3VibGUocHJvZ3Jlc3MpLCBkb3Vi
bGUoZHVyYXRpb24pIC8gMTAwMCk7CisgICAgICAgIH0KICAgICAgICAgcmV0dXJuIHByb2dyZXNz
OwotICAgIGlmICh0aW1pbmdGdW5jdGlvbi50eXBlKCkgPT0gQ3ViaWNCZXppZXJUaW1pbmdGdW5j
dGlvbikgewotICAgICAgICByZXR1cm4gc29sdmVDdWJpY0JlemllckZ1bmN0aW9uKHRpbWluZ0Z1
bmN0aW9uLngxKCksCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdGlt
aW5nRnVuY3Rpb24ueTEoKSwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICB0aW1pbmdGdW5jdGlvbi54MigpLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgIHRpbWluZ0Z1bmN0aW9uLnkyKCksCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgZG91YmxlKHByb2dyZXNzKSwgZG91YmxlKGR1cmF0aW9uKSAvIDEwMDApOwot
ICAgIH0KLSAgICByZXR1cm4gcHJvZ3Jlc3M7CiB9CiAKIC8vIGhlbHBlciBmdW5jdGlvbnMgdG8g
c2FmZWx5IGdldCBhIHZhbHVlIG91dCBvZiBXZWJDb3JlJ3MgQW5pbWF0aW9uVmFsdWUqCkBAIC04
MjYsOSArODU4LDcgQEAgc3RhdGljIHZvaWQgd2Via2l0QW5pbWF0aW9uVG9RdEFuaW1hdGlvblZh
bHVlKGNvbnN0IEFuaW1hdGlvblZhbHVlKiBhbmltYXRpb25WYWwKICAgICBpZiAoIWFuaW1hdGlv
blZhbHVlKQogICAgICAgICByZXR1cm47CiAKLSAgICBjb25zdCBUcmFuc2Zvcm1PcGVyYXRpb25z
KiBvcHMgPSBzdGF0aWNfY2FzdDxjb25zdCBUcmFuc2Zvcm1BbmltYXRpb25WYWx1ZSo+KGFuaW1h
dGlvblZhbHVlKS0+dmFsdWUoKTsKLQotICAgIGlmIChvcHMpCisgICAgaWYgKGNvbnN0IFRyYW5z
Zm9ybU9wZXJhdGlvbnMqIG9wcyA9IHN0YXRpY19jYXN0PGNvbnN0IFRyYW5zZm9ybUFuaW1hdGlv
blZhbHVlKj4oYW5pbWF0aW9uVmFsdWUpLT52YWx1ZSgpKQogICAgICAgICB0cmFuc2Zvcm1PcGVy
YXRpb25zID0gKm9wczsKIH0KIApAQCAtODU2LDggKzg4Niw4IEBAIHB1YmxpYzoKICAgICAgICAg
UUFic3RyYWN0QW5pbWF0aW9uOjp1cGRhdGVTdGF0ZShuZXdTdGF0ZSwgb2xkU3RhdGUpOwogCiAg
ICAgICAgIC8vIGZvciBzb21lIHJlYXNvbiBJIGhhdmUgZG8gdGhpcyBhc3luY2hyb25vdXNseSAt
IG9yIHRoZSBhbmltYXRpb24gd29uJ3Qgd29yawotICAgICAgICBpZiAobmV3U3RhdGUgPT0gUnVu
bmluZyAmJiBvbGRTdGF0ZSA9PSBTdG9wcGVkKQotICAgICAgICAgICAgUVRpbWVyOjpzaW5nbGVT
aG90KDAsIG1fbGF5ZXIuZGF0YSgpLCBTTE9UKG5vdGlmeUFuaW1hdGlvblN0YXJ0ZWQoKSkpOwor
ICAgICAgICBpZiAobmV3U3RhdGUgPT0gUnVubmluZyAmJiBvbGRTdGF0ZSA9PSBTdG9wcGVkICYm
IG1fbGF5ZXIuZGF0YSgpKQorICAgICAgICAgICAgbV9sYXllci5kYXRhKCktPm5vdGlmeUFuaW1h
dGlvblN0YXJ0ZWRBc3luYygpOwogICAgIH0KIAogICAgIHZpcnR1YWwgaW50IGR1cmF0aW9uKCkg
Y29uc3QgeyByZXR1cm4gbV9kdXJhdGlvbjsgfQpAQCAtOTMyLDkgKzk2MiwxMCBAQCBwcm90ZWN0
ZWQ6CiAKICAgICAgICAgLy8gbm93IHdlIGhhdmUgYSBzb3VyY2Uga2V5ZnJhbWUsIG9yaWdpbiBr
ZXlmcmFtZSBhbmQgYSB0aW1pbmcgZnVuY3Rpb24KICAgICAgICAgLy8gd2UgY2FuIG5vdyBwcm9j
ZXNzIHRoZSBwcm9ncmVzcyBhbmQgYXBwbHkgdGhlIGZyYW1lCi0gICAgICAgIHFyZWFsIG5vcm1h
bGl6ZWRQcm9ncmVzcyA9IChpdC5rZXkoKSA9PSBpdDIua2V5KCkpID8gMCA6IChwcm9ncmVzcyAt
IGl0LmtleSgpKSAvIChpdDIua2V5KCkgLSBpdC5rZXkoKSk7Ci0gICAgICAgIG5vcm1hbGl6ZWRQ
cm9ncmVzcyA9IGFwcGx5VGltaW5nRnVuY3Rpb24odGltaW5nRnVuYywgbm9ybWFsaXplZFByb2dy
ZXNzLCBkdXJhdGlvbigpIC8gMTAwMCk7Ci0gICAgICAgIGFwcGx5RnJhbWUoZnJvbVZhbHVlLCB0
b1ZhbHVlLCBub3JtYWxpemVkUHJvZ3Jlc3MpOworICAgICAgICBwcm9ncmVzcyA9ICghcHJvZ3Jl
c3MgfHwgcHJvZ3Jlc3MgPT0gMSB8fCBpdC5rZXkoKSA9PSBpdDIua2V5KCkpCisgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgID8gcHJvZ3Jlc3MKKyAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgOiBhcHBseVRpbWluZ0Z1bmN0aW9uKHRpbWluZ0Z1
bmMsIChwcm9ncmVzcyAtIGl0LmtleSgpKSAvIChpdDIua2V5KCkgLSBpdC5rZXkoKSksIGR1cmF0
aW9uKCkgLyAxMDAwKTsKKyAgICAgICAgYXBwbHlGcmFtZShmcm9tVmFsdWUsIHRvVmFsdWUsIHBy
b2dyZXNzKTsKICAgICB9CiAKICAgICBRTWFwPHFyZWFsLCBLZXlmcmFtZVZhbHVlUXQ8VD4gPiBt
X2tleWZyYW1lVmFsdWVzOwpAQCAtOTQzLDcgKzk3NCw3IEBAIHByb3RlY3RlZDoKIGNsYXNzIFRy
YW5zZm9ybUFuaW1hdGlvblF0IDogcHVibGljIEFuaW1hdGlvblF0PFRyYW5zZm9ybU9wZXJhdGlv
bnM+IHsKIHB1YmxpYzoKICAgICBUcmFuc2Zvcm1BbmltYXRpb25RdChHcmFwaGljc0xheWVyUXRJ
bXBsKiBsYXllciwgY29uc3QgS2V5ZnJhbWVWYWx1ZUxpc3QmIHZhbHVlcywgY29uc3QgSW50U2l6
ZSYgYm94U2l6ZSwgY29uc3QgQW5pbWF0aW9uKiBhbmltLCBjb25zdCBRU3RyaW5nICYgbmFtZSkK
LSAgICAgICAgICAgICAgICA6IEFuaW1hdGlvblF0PFRyYW5zZm9ybU9wZXJhdGlvbnM+KGxheWVy
LCB2YWx1ZXMsIGJveFNpemUsIGFuaW0sIG5hbWUpCisgICAgICAgIDogQW5pbWF0aW9uUXQ8VHJh
bnNmb3JtT3BlcmF0aW9ucz4obGF5ZXIsIHZhbHVlcywgYm94U2l6ZSwgYW5pbSwgbmFtZSkKICAg
ICB7CiAgICAgfQogCkBAIC05NTIsNyArOTgzLDcgQEAgcHVibGljOgogICAgICAgICAvLyB0aGlz
IGNhbWUgdXAgZHVyaW5nIHRoZSBjb21wb3NpdGluZy9hbmltYXRpb24gTGF5b3V0VGVzdHMKICAg
ICAgICAgLy8gd2hlbiB0aGUgYW5pbWF0aW9uIGRpZXMsIHRoZSB0cmFuc2Zvcm0gaGFzIHRvIGdv
IGJhY2sgdG8gZGVmYXVsdAogICAgICAgICBpZiAobV9sYXllcikKLSAgICAgICAgICAgIG1fbGF5
ZXIuZGF0YSgpLT5zZXRCYXNlVHJhbnNmb3JtKFFUcmFuc2Zvcm0obV9sYXllci5kYXRhKCktPm1f
bGF5ZXItPnRyYW5zZm9ybSgpKSk7CisgICAgICAgICAgICBtX2xheWVyLmRhdGEoKS0+c2V0QmFz
ZVRyYW5zZm9ybShtX2xheWVyLmRhdGEoKS0+bV9sYXllci0+dHJhbnNmb3JtKCkpOwogICAgIH0K
IAogICAgIC8vIHRoZSBpZGVhIGlzIHRoYXQgd2UgbGV0IFdlYkNvcmUgbWFuYWdlIHRoZSB0cmFu
c2Zvcm0tb3BlcmF0aW9ucwpAQCAtOTYzLDExICs5OTQsMjIgQEAgcHVibGljOgogICAgIHsKICAg
ICAgICAgVHJhbnNmb3JtYXRpb25NYXRyaXggdHJhbnNmb3JtTWF0cml4OwogCi0gICAgICAgIC8v
IHRoaXMgbG9va3Mgc2ltcGxlIGJ1dCBpcyByZWFsbHkgdHJpY2t5IHRvIGdldCByaWdodC4gVXNl
IGNhdXRpb24uCi0gICAgICAgIGZvciAoc2l6ZV90IGkgPSAwOyBpIDwgdGFyZ2V0T3BlcmF0aW9u
cy5zaXplKCk7ICsraSkKLSAgICAgICAgICAgIHRhcmdldE9wZXJhdGlvbnMub3BlcmF0aW9ucygp
W2ldLT5ibGVuZChzb3VyY2VPcGVyYXRpb25zLmF0KGkpLCBwcm9ncmVzcyktPmFwcGx5KHRyYW5z
Zm9ybU1hdHJpeCwgbV9ib3hTaXplKTsKLQotICAgICAgICBtX2xheWVyLmRhdGEoKS0+c2V0QmFz
ZVRyYW5zZm9ybShRVHJhbnNmb3JtKHRyYW5zZm9ybU1hdHJpeCkpOworICAgICAgICAvLyBzb21l
dGltZXMgdGhlIGFuaW1hdGlvbiB2YWx1ZXMgZnJvbSBXZWJDb3JlIGFyZSBtaXNsZWFkaW5nIGFu
ZCB3ZSBoYXZlIHRvIHVzZSB0aGUgYWN0dWFsIG1hdHJpeCBhcyBzb3VyY2UKKyAgICAgICAgLy8g
VGhlIE1hYyBpbXBsZW1lbnRhdGlvbiBzaW1wbHkgZG9lc24ndCB0cnkgdG8gYWNjZWxlcmF0ZSB0
aG9zZSAoZS5nLiAzNjBkZWcgcm90YXRpb24pLCBidXQgd2UgZG8uCisgICAgICAgIGlmIChwcm9n
cmVzcyA9PSAxIHx8ICF0YXJnZXRPcGVyYXRpb25zLnNpemUoKSB8fCBzb3VyY2VPcGVyYXRpb25z
ID09IHRhcmdldE9wZXJhdGlvbnMpIHsKKyAgICAgICAgICAgIFRyYW5zZm9ybWF0aW9uTWF0cml4
IHNvdXJjZU1hdHJpeDsKKyAgICAgICAgICAgIHNvdXJjZU9wZXJhdGlvbnMuYXBwbHkobV9ib3hT
aXplLCBzb3VyY2VNYXRyaXgpOworICAgICAgICAgICAgdHJhbnNmb3JtTWF0cml4ID0gbV9zb3Vy
Y2VNYXRyaXg7CisgICAgICAgICAgICB0cmFuc2Zvcm1NYXRyaXguYmxlbmQoc291cmNlTWF0cml4
LCAxIC0gcHJvZ3Jlc3MpOworICAgICAgICB9IGVsc2UgaWYgKHRhcmdldE9wZXJhdGlvbnMuc2l6
ZSgpICE9IHNvdXJjZU9wZXJhdGlvbnMuc2l6ZSgpKSB7CisgICAgICAgICAgICB0cmFuc2Zvcm1N
YXRyaXggPSBtX3NvdXJjZU1hdHJpeDsKKyAgICAgICAgICAgIHRhcmdldE9wZXJhdGlvbnMuYXBw
bHkobV9ib3hTaXplLCB0cmFuc2Zvcm1NYXRyaXgpOworICAgICAgICAgICAgdHJhbnNmb3JtTWF0
cml4LmJsZW5kKG1fc291cmNlTWF0cml4LCBwcm9ncmVzcyk7CisgICAgICAgIH0gZWxzZSB7Cisg
ICAgICAgICAgICBmb3IgKHNpemVfdCBpID0gMDsgaSA8IHRhcmdldE9wZXJhdGlvbnMuc2l6ZSgp
OyArK2kpCisgICAgICAgICAgICAgICAgdGFyZ2V0T3BlcmF0aW9ucy5vcGVyYXRpb25zKClbaV0t
PmJsZW5kKHNvdXJjZU9wZXJhdGlvbnMuYXQoaSksIHByb2dyZXNzKS0+YXBwbHkodHJhbnNmb3Jt
TWF0cml4LCBtX2JveFNpemUpOworICAgICAgICB9CisgICAgICAgIG1fbGF5ZXIuZGF0YSgpLT5z
ZXRCYXNlVHJhbnNmb3JtKHRyYW5zZm9ybU1hdHJpeCk7CiAgICAgfQogCiAgICAgdmlydHVhbCB2
b2lkIHVwZGF0ZVN0YXRlKFFBYnN0cmFjdEFuaW1hdGlvbjo6U3RhdGUgbmV3U3RhdGUsIFFBYnN0
cmFjdEFuaW1hdGlvbjo6U3RhdGUgb2xkU3RhdGUpCkBAIC05ODAsMjAgKzEwMjIsMjIgQEAgcHVi
bGljOgogICAgICAgICAvLyB0byBpbmNyZWFzZSBGUFMsIHdlIHVzZSBhIGxlc3MgYWNjdXJhdGUg
Y2FjaGluZyBtZWNoYW5pc20gd2hpbGUgYW5pbWF0aW9uIGlzIGdvaW5nIG9uCiAgICAgICAgIC8v
IHRoaXMgaXMgYSBVWCBjaG9pY2UgdGhhdCBzaG91bGQgcHJvYmFibHkgYmUgY3VzdG9taXphYmxl
CiAgICAgICAgIGlmIChuZXdTdGF0ZSA9PSBRQWJzdHJhY3RBbmltYXRpb246OlJ1bm5pbmcpIHsK
KyAgICAgICAgICAgIG1fc291cmNlTWF0cml4ID0gbV9sYXllci5kYXRhKCktPm1fbGF5ZXItPnRy
YW5zZm9ybSgpOwogICAgICAgICAgICAgbV9sYXllci5kYXRhKCktPm1fdHJhbnNmb3JtQW5pbWF0
aW9uUnVubmluZyA9IHRydWU7Ci0gICAgICAgICAgICBpZiAobV9sYXllci5kYXRhKCktPmNhY2hl
TW9kZSgpID09IFFHcmFwaGljc0l0ZW06OkRldmljZUNvb3JkaW5hdGVDYWNoZSkKLSAgICAgICAg
ICAgICAgICBtX2xheWVyLmRhdGEoKS0+c2V0Q2FjaGVNb2RlKFFHcmFwaGljc0l0ZW06Okl0ZW1D
b29yZGluYXRlQ2FjaGUpOworICAgICAgICAgICAgbV9sYXllci5kYXRhKCktPmFkanVzdENhY2hp
bmdSZWN1cnNpdmVseSh0cnVlKTsKICAgICAgICAgfSBlbHNlIHsKICAgICAgICAgICAgIG1fbGF5
ZXIuZGF0YSgpLT5tX3RyYW5zZm9ybUFuaW1hdGlvblJ1bm5pbmcgPSBmYWxzZTsKLSAgICAgICAg
ICAgIGlmIChtX2xheWVyLmRhdGEoKS0+Y2FjaGVNb2RlKCkgPT0gUUdyYXBoaWNzSXRlbTo6SXRl
bUNvb3JkaW5hdGVDYWNoZSkKLSAgICAgICAgICAgICAgICBtX2xheWVyLmRhdGEoKS0+c2V0Q2Fj
aGVNb2RlKFFHcmFwaGljc0l0ZW06OkRldmljZUNvb3JkaW5hdGVDYWNoZSk7CisgICAgICAgICAg
ICBtX2xheWVyLmRhdGEoKS0+YWRqdXN0Q2FjaGluZ1JlY3Vyc2l2ZWx5KGZhbHNlKTsKICAgICAg
ICAgfQorCiAgICAgfQorCisgICAgVHJhbnNmb3JtYXRpb25NYXRyaXggbV9zb3VyY2VNYXRyaXg7
CiB9OwogCiBjbGFzcyBPcGFjaXR5QW5pbWF0aW9uUXQgOiBwdWJsaWMgQW5pbWF0aW9uUXQ8cXJl
YWw+IHsKIHB1YmxpYzoKICAgICBPcGFjaXR5QW5pbWF0aW9uUXQoR3JhcGhpY3NMYXllclF0SW1w
bCogbGF5ZXIsIGNvbnN0IEtleWZyYW1lVmFsdWVMaXN0JiB2YWx1ZXMsIGNvbnN0IEludFNpemUm
IGJveFNpemUsIGNvbnN0IEFuaW1hdGlvbiogYW5pbSwgY29uc3QgUVN0cmluZyAmIG5hbWUpCiAg
ICAgewogICAgIH0KIApAQCAtMTAwNiw2ICsxMDUwLDcgQEAgcHVibGljOgogICAgIHZpcnR1YWwg
dm9pZCB1cGRhdGVTdGF0ZShRQWJzdHJhY3RBbmltYXRpb246OlN0YXRlIG5ld1N0YXRlLCBRQWJz
dHJhY3RBbmltYXRpb246OlN0YXRlIG9sZFN0YXRlKQogICAgIHsKICAgICAgICAgUUFic3RyYWN0
QW5pbWF0aW9uOjp1cGRhdGVTdGF0ZShuZXdTdGF0ZSwgb2xkU3RhdGUpOworCiAgICAgICAgIGlm
IChtX2xheWVyKQogICAgICAgICAgICAgbV9sYXllci5kYXRhKCktPm1fb3BhY2l0eUFuaW1hdGlv
blJ1bm5pbmcgPSAobmV3U3RhdGUgPT0gUUFic3RyYWN0QW5pbWF0aW9uOjpSdW5uaW5nKTsKICAg
ICB9CkBAIC0xMDc5LDExICsxMTI0LDEyIEBAIHZvaWQgR3JhcGhpY3NMYXllclF0OjpyZW1vdmVB
bmltYXRpb25zRm9yS2V5ZnJhbWVzKGNvbnN0IFN0cmluZyYgbmFtZSkKIHZvaWQgR3JhcGhpY3NM
YXllclF0OjpwYXVzZUFuaW1hdGlvbihjb25zdCBTdHJpbmcmIG5hbWUsIGRvdWJsZSB0aW1lT2Zm
c2V0KQogewogICAgIGZvciAoUUxpc3Q8UVdlYWtQb2ludGVyPFFBYnN0cmFjdEFuaW1hdGlvbj4g
Pjo6aXRlcmF0b3IgaXQgPSBtX2ltcGwtPm1fYW5pbWF0aW9ucy5iZWdpbigpOyBpdCAhPSBtX2lt
cGwtPm1fYW5pbWF0aW9ucy5lbmQoKTsgKytpdCkgewotICAgICAgICBpZiAoKml0KSB7Ci0gICAg
ICAgICAgICBBbmltYXRpb25RdEJhc2UqIGFuaW0gPSBzdGF0aWNfY2FzdDxBbmltYXRpb25RdEJh
c2UqPigoKml0KS5kYXRhKCkpOwotICAgICAgICAgICAgaWYgKGFuaW0gJiYgYW5pbS0+bV9rZXlm
cmFtZXNOYW1lID09IFFTdHJpbmcobmFtZSkpCi0gICAgICAgICAgICAgICAgUVRpbWVyOjpzaW5n
bGVTaG90KHRpbWVPZmZzZXQgKiAxMDAwLCBhbmltLCBTTE9UKHBhdXNlKCkpKTsKLSAgICAgICAg
fQorICAgICAgICBpZiAoISgqaXQpKQorICAgICAgICAgICAgY29udGludWU7CisKKyAgICAgICAg
QW5pbWF0aW9uUXRCYXNlKiBhbmltID0gc3RhdGljX2Nhc3Q8QW5pbWF0aW9uUXRCYXNlKj4oKCpp
dCkuZGF0YSgpKTsKKyAgICAgICAgaWYgKGFuaW0gJiYgYW5pbS0+bV9rZXlmcmFtZXNOYW1lID09
IFFTdHJpbmcobmFtZSkpCisgICAgICAgICAgICBRVGltZXI6OnNpbmdsZVNob3QodGltZU9mZnNl
dCAqIDEwMDAsIGFuaW0sIFNMT1QocGF1c2UoKSkpOwogICAgIH0KIH0KIApkaWZmIC0tZ2l0IGEv
V2ViS2l0L3F0L0FwaS9xZ3JhcGhpY3N3ZWJ2aWV3LmNwcCBiL1dlYktpdC9xdC9BcGkvcWdyYXBo
aWNzd2Vidmlldy5jcHAKaW5kZXggZDllOGE3NC4uMWE1ZTA0MyAxMDA2NDQKLS0tIGEvV2ViS2l0
L3F0L0FwaS9xZ3JhcGhpY3N3ZWJ2aWV3LmNwcAorKysgYi9XZWJLaXQvcXQvQXBpL3FncmFwaGlj
c3dlYnZpZXcuY3BwCkBAIC0yNyw2ICsyNyw3IEBACiAjaW5jbHVkZSAicXdlYnBhZ2VfcC5oIgog
I2luY2x1ZGUgIlFXZWJQYWdlQ2xpZW50LmgiCiAjaW5jbHVkZSA8RnJhbWVWaWV3Lmg+CisjaW5j
bHVkZSA8UXRDb3JlL3FtZXRhb2JqZWN0Lmg+CiAjaW5jbHVkZSA8UXRDb3JlL3FzaGFyZWRwb2lu
dGVyLmg+CiAjaW5jbHVkZSA8UXRDb3JlL3F0aW1lci5oPgogI2luY2x1ZGUgPFF0R3VpL3FhcHBs
aWNhdGlvbi5oPgpAQCAtNzgsMTMgKzc5LDE0IEBAIHB1YmxpYzoKICAgICAgICAgLCBwYWdlKDAp
CiAjaWYgVVNFKEFDQ0VMRVJBVEVEX0NPTVBPU0lUSU5HKQogICAgICAgICAsIHJvb3RHcmFwaGlj
c0xheWVyKDApCi0gICAgICAgICwgc2hvdWxkU3luYyh0cnVlKQorICAgICAgICAsIHNob3VsZFN5
bmMoZmFsc2UpCiAjZW5kaWYKICAgICB7CiAjaWYgVVNFKEFDQ0VMRVJBVEVEX0NPTVBPU0lUSU5H
KQogICAgICAgICAvLyB0aGUgb3ZlcmxheSBhbmQgc3RheXMgYWxpdmUgZm9yIHRoZSBsaWZldGlt
ZSBvZgogICAgICAgICAvLyB0aGlzIFFHcmFwaGljc1dlYlZpZXcgYXMgdGhlIHNjcm9sbGJhcnMg
YXJlIG5lZWRlZCB3aGVuIHRoZXJlJ3Mgbm8gY29tcG9zaXRpbmcKICAgICAgICAgcS0+c2V0Rmxh
ZyhRR3JhcGhpY3NJdGVtOjpJdGVtVXNlc0V4dGVuZGVkU3R5bGVPcHRpb24pOworICAgICAgICBz
eW5jTWV0YU1ldGhvZCA9IHEtPm1ldGFPYmplY3QoKS0+bWV0aG9kKHEtPm1ldGFPYmplY3QoKS0+
aW5kZXhPZk1ldGhvZCgic3luY0xheWVycygpIikpOwogI2VuZGlmCiAgICAgfQogCkBAIC0xMjks
NSArMTMxLDggQEAgcHVibGljOgogICAgIGJvb2wgc2hvdWxkU3luYzsKIAorICAgIC8vIHdlIGhh
dmUgdG8gZmx1c2ggcXVpdGUgb2Z0ZW4sIHNvIHdlIHVzZSBhIG1ldGEtbWV0aG9kIGluc3RlYWQg
b2YgUVRpbWVyOjpzaW5nbGVTaG90IGZvciBwdXR0aW5nIHRoZSBldmVudCBpbiB0aGUgcXVldWUK
KyAgICBRTWV0YU1ldGhvZCBzeW5jTWV0YU1ldGhvZDsKKwogICAgIC8vIHdlIG5lZWQgdG8gcHV0
IHRoZSByb290IGdyYXBoaWNzIGxheWVyIGJlaGluZCB0aGUgb3ZlcmxheSAod2hpY2ggY29udGFp
bnMgdGhlIHNjcm9sbGJhcikKICAgICBlbnVtIHsgUm9vdEdyYXBoaWNzTGF5ZXJaVmFsdWUsIE92
ZXJsYXlaVmFsdWUgfTsKICNlbmRpZgpAQCAtMTc2LDcgKzE4MSw3IEBAIHZvaWQgUUdyYXBoaWNz
V2ViVmlld1ByaXZhdGU6Om1hcmtGb3JTeW5jKGJvb2wgc2NoZWR1bGVTeW5jKQogewogICAgIHNo
b3VsZFN5bmMgPSB0cnVlOwogICAgIGlmIChzY2hlZHVsZVN5bmMpCi0gICAgICAgIFFUaW1lcjo6
c2luZ2xlU2hvdCgwLCBxLCBTTE9UKHN5bmNMYXllcnMoKSkpOworICAgICAgICBzeW5jTWV0YU1l
dGhvZC5pbnZva2UocSwgUXQ6OlF1ZXVlZENvbm5lY3Rpb24pOwogfQogCiB2b2lkIFFHcmFwaGlj
c1dlYlZpZXdQcml2YXRlOjp1cGRhdGVDb21wb3NpdGluZ1Njcm9sbFBvc2l0aW9uKCkKQEAgLTIy
Miw2ICsyMjcsNyBAQCB2b2lkIFFHcmFwaGljc1dlYlZpZXdQcml2YXRlOjp1cGRhdGUoY29uc3Qg
UVJlY3QgJiBkaXJ0eVJlY3QpCiAjaWYgVVNFKEFDQ0VMRVJBVEVEX0NPTVBPU0lUSU5HKQogICAg
IGlmIChvdmVybGF5KQogICAgICAgICBvdmVybGF5LT51cGRhdGUoUVJlY3RGKGRpcnR5UmVjdCkp
OworICAgIHN5bmNMYXllcnMoKTsKICNlbmRpZgogfQogCkBAIC00MzUsNyArNDQxLDYgQEAgdm9p
ZCBRR3JhcGhpY3NXZWJWaWV3OjpwYWludChRUGFpbnRlciogcGFpbnRlciwgY29uc3QgUVN0eWxl
T3B0aW9uR3JhcGhpY3NJdGVtKgogewogI2lmIFVTRShBQ0NFTEVSQVRFRF9DT01QT1NJVElORykK
ICAgICBwYWdlKCktPm1haW5GcmFtZSgpLT5yZW5kZXIocGFpbnRlciwgZC0+b3ZlcmxheSA/IFFX
ZWJGcmFtZTo6Q29udGVudHNMYXllciA6IFFXZWJGcmFtZTo6QWxsTGF5ZXJzLCBvcHRpb24tPmV4
cG9zZWRSZWN0LnRvQWxpZ25lZFJlY3QoKSk7Ci0gICAgZC0+c3luY0xheWVycygpOwogI2Vsc2UK
ICAgICBwYWdlKCktPm1haW5GcmFtZSgpLT5yZW5kZXIocGFpbnRlciwgUVdlYkZyYW1lOjpBbGxM
YXllcnMsIG9wdGlvbi0+ZXhwb3NlZFJlY3QudG9SZWN0KCkpOwogI2VuZGlmCmRpZmYgLS1naXQg
YS9XZWJLaXQvcXQvQ2hhbmdlTG9nIGIvV2ViS2l0L3F0L0NoYW5nZUxvZwppbmRleCA2Y2NhOTdj
Li42MzI5ZmFjIDEwMDY0NAotLS0gYS9XZWJLaXQvcXQvQ2hhbmdlTG9nCisrKyBiL1dlYktpdC9x
dC9DaGFuZ2VMb2cKQEAgLTEsMyArMSwxNSBAQAorMjAxMC0wMS0yNCAgTm8nYW0gUm9zZW50aGFs
ICA8bm9hbS5yb3NlbnRoYWxAbm9raWEuY29tPgorCisgICAgICAgIFJldmlld2VkIGJ5IE5PQk9E
WSAoT09QUyEpLgorCisgICAgICAgIFtRdF0gVHVuaW5nIGFuZCBvcHRpbWl6YXRpb25zIHRvIEdy
YXBoaWNzTGF5ZXJRdC4gTWFpbmx5IHJlZHVjZWQgdXNhZ2UKKyAgICAgICAgb2YgUVRpbWVyOjpz
aW5nbGVTaG90LCBhbmQgbW92ZWQgc3luY0xheWVycygpIGZyb20gcGFpbnQoKSB0byB1cGRhdGUo
KQorICAgICAgICBodHRwczovL2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9MzQwNjIK
KworICAgICAgICAqIEFwaS9xZ3JhcGhpY3N3ZWJ2aWV3LmNwcDoKKyAgICAgICAgKFFHcmFwaGlj
c1dlYlZpZXdQcml2YXRlOjp1cGRhdGUpOiBNb3ZlZCB0aGUgc3luYyBvcGVyYXRpb24gdG8gdXBk
YXRlCisgICAgICAgIChRR3JhcGhpY3NXZWJWaWV3OjpwYWludCk6IE1vdmVkIHRoZSBzeW5jIG9w
ZXJhdGlvbiB0byB1cGRhdGUKKwogMjAxMC0wMS0yMyAgR2lyaXNoIFJhbWFrcmlzaG5hbiAgPGdp
cmlzaEBmb3J3YXJkYmlhcy5pbj4KIAogICAgICAgICBSZXZpZXdlZCBieSBLZW5uZXRoIFJvaGRl
IENocmlzdGlhbnNlbi4KLS0gCjEuNi42LnJjMC42My5nNjZhYmMKCg==
</data>
<flag name="review"
          id="30562"
          type_id="1"
          status="+"
          setter="kenneth"
    />
    <flag name="commit-queue"
          id="30584"
          type_id="3"
          status="-"
          setter="commit-queue"
    />
          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>47991</attachid>
            <date>2010-02-02 20:39:18 -0800</date>
            <delta_ts>2010-02-03 07:18:12 -0800</delta_ts>
            <desc>Fixed a glitch in the actual diff file.... strange</desc>
            <filename>patch-34062-3.diff</filename>
            <type>text/plain</type>
            <size>24650</size>
            <attacher name="Noam Rosenthal">noam</attacher>
            
              <data encoding="base64">ZGlmZiAtLWdpdCBhL1dlYkNvcmUvQ2hhbmdlTG9nIGIvV2ViQ29yZS9DaGFuZ2VMb2cKaW5kZXgg
YjllMDVmZC4uMjc3ZjAxOCAxMDA2NDQKLS0tIGEvV2ViQ29yZS9DaGFuZ2VMb2cKKysrIGIvV2Vi
Q29yZS9DaGFuZ2VMb2cKQEAgLTEsMyArMSwyMSBAQAorMjAxMC0wMS0yNCAgTm8nYW0gUm9zZW50
aGFsICA8bm9hbS5yb3NlbnRoYWxAbm9raWEuY29tPgorCisgICAgICAgIFJldmlld2VkIGJ5IE5P
Qk9EWSAoT09QUyEpLgorCisgICAgICAgIFtRdF0gVHVuaW5nIGFuZCBvcHRpbWl6YXRpb25zIHRv
IEdyYXBoaWNzTGF5ZXJRdC4gUmVkdWNlIHVubmVjZXNzYXJ5CisgICAgICAgIHJlY2FjaGluZywg
cmVtb3ZlIFFUaW1lcjo6c2luZ2xlU2hvdCBhbmQgUVBpeG1hcDo6c2NhbGVkLCBtb3JlCisgICAg
ICAgIGFjY3VyYXRlIHN0cmF0ZWd5IG9mIGhhbmRsaW5nIHRyYW5zZm9ybSBvcGVyYXRpb24gYmxl
bmRzLiBSb3RhdGluZyBhCisgICAgICAgIGJvcmRlcmVkLXRhYmxlLCBmb3IgZXhhbXBsZSwgbm93
IHJ1bnMgYXQgNTBGUFMgaW5zdGVhZCBvZiA0MEZQUyBvbiBNYWVtbzUuCisKKyAgICAgICAgaHR0
cHM6Ly9idWdzLndlYmtpdC5vcmcvc2hvd19idWcuY2dpP2lkPTM0MDYyCisKKyAgICAgICAgVGhp
cyBpcyB0ZXN0ZWQgYnkgaHR0cHM6Ly9idWdzLndlYmtpdC5vcmcvc2hvd19idWcuY2dpP2lkPTM0
NDUwLCBmcHMgbWVhc3VyZW1lbnRzLgorCisgICAgICAgICogcGxhdGZvcm0vZ3JhcGhpY3MvcXQv
R3JhcGhpY3NMYXllclF0LmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OkdyYXBoaWNzTGF5ZXJRdElt
cGw6OmZsdXNoQ2hhbmdlcyk6IEZpbmUtdHVuZSBjYWNoaW5nCisgICAgICAgIChXZWJDb3JlOjpU
cmFuc2Zvcm1BbmltYXRpb25RdDo6VHJhbnNmb3JtQW5pbWF0aW9uUXQpOiB0cmFuc2Zvcm0gYnVn
cworICAgICAgICAoV2ViQ29yZTo6T3BhY2l0eUFuaW1hdGlvblF0Ojp1cGRhdGVTdGF0ZSk6IHN0
eWxlIGNoYW5nZQorCiAyMDEwLTAxLTI0ICBPbGl2ZXIgSHVudCAgPG9saXZlckBhcHBsZS5jb20+
CiAKICAgICAgICAgUmV2aWV3ZWQgYnkgRGFyaW4gQWRsZXIuCmRpZmYgLS1naXQgYS9XZWJDb3Jl
L3BsYXRmb3JtL2dyYXBoaWNzL3F0L0dyYXBoaWNzTGF5ZXJRdC5jcHAgYi9XZWJDb3JlL3BsYXRm
b3JtL2dyYXBoaWNzL3F0L0dyYXBoaWNzTGF5ZXJRdC5jcHAKaW5kZXggNTcxMmVlZS4uYmYzYWFk
ZSAxMDA2NDQKLS0tIGEvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9xdC9HcmFwaGljc0xheWVy
UXQuY3BwCisrKyBiL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvcXQvR3JhcGhpY3NMYXllclF0
LmNwcApAQCAtOTksMTQgKzk5LDI2IEBAIHB1YmxpYzoKICAgICAvLyBvciBDaHJvbWVDbGllbnRR
dDo6c2NoZWR1bGVDb21wb3NpdGluZ0xheWVyU3luYyAobWVhbmluZyB0aGUgc3luYyB3aWxsIGhh
cHBlbiBBU0FQKQogICAgIHZvaWQgZmx1c2hDaGFuZ2VzKGJvb2wgcmVjdXJzaXZlID0gdHJ1ZSk7
CiAKKyAgICAvLyBvcHRpbWl6YXRpb246IHdoZW4gd2UgaGF2ZSBhbiBhbmltYXRpb24gcnVubmlu
ZyBvbiBhbiBlbGVtZW50IHdpdGggbm8gY29udGVudHMsIHRoYXQgaGFzIGNoaWxkLWVsZW1lbnRz
IHdpdGggY29udGVudHMsCisgICAgLy8gQUxMIG9mIHRoZW0gaGF2ZSB0byBoYXZlIEl0ZW1Db29y
ZGluYXRlQ2FjaGUgYW5kIG5vdCBEZXZpY2VDb29yZGluYXRlQ2FjaGUKKyAgICB2b2lkIGFkanVz
dENhY2hpbmdSZWN1cnNpdmVseShib29sIGFuaW1hdGlvbklzUnVubmluZyk7CisKKyAgICAvLyBv
cHRpbWl6YXRpb246IHJldHVybnMgdHJ1ZSBpZiB0aGlzIG9yIGFuIGFuY2VzdG9yIGhhcyBhIHRy
YW5zZm9ybSBhbmltYXRpb24gcnVubmluZy4KKyAgICAvLyB0aGlzIGVuYWJsZXMgdXMgdG8gdXNl
IEl0ZW1Db29yZGluYXRlc0NhY2hlIHdoaWxlIHRoZSBhbmltYXRpb24gaXMgcnVubmluZywgb3Ro
ZXJ3aXNlIHdlIGhhdmUgdG8gcmVjYWNoZSBmb3IgZXZlcnkgZnJhbWUKKyAgICBib29sIGlzVHJh
bnNmb3JtQW5pbWF0aW9uUnVubmluZygpIGNvbnN0OworCiBwdWJsaWMgc2xvdHM6CiAgICAgLy8g
d2UgbmVlZCB0byBub3RpZnkgdGhlIGNsaWVudCAoYWthIHRoZSBsYXllciBjb21wb3NpdG9yKSB3
aGVuIHRoZSBhbmltYXRpb24gYWN0dWFsbHkgc3RhcnRzCiAgICAgdm9pZCBub3RpZnlBbmltYXRp
b25TdGFydGVkKCk7CiAKK3NpZ25hbHM6CisgICAgLy8gb3B0aW1pemF0aW9uOiB3ZSBkb24ndCB3
YW50IHRvIHVzZSBRVGltZXI6OnNpbmdsZVNob3QKKyAgICB2b2lkIG5vdGlmeUFuaW1hdGlvblN0
YXJ0ZWRBc3luYygpOworCiBwdWJsaWM6CiAgICAgR3JhcGhpY3NMYXllclF0KiBtX2xheWVyOwog
Ci0gICAgUVRyYW5zZm9ybSBtX2Jhc2VUcmFuc2ZvbTsKKyAgICBRVHJhbnNmb3JtIG1fYmFzZVRy
YW5zZm9ybTsKICAgICBib29sIG1fdHJhbnNmb3JtQW5pbWF0aW9uUnVubmluZzsKICAgICBib29s
IG1fb3BhY2l0eUFuaW1hdGlvblJ1bm5pbmc7CiAKQEAgLTE1NywxMiArMTY5LDE0IEBAIHB1Ymxp
YzoKICAgICAgICAgYm9vbCBiYWNrZmFjZVZpc2liaWxpdHk6IDE7CiAgICAgICAgIGJvb2wgZGlz
dHJpYnV0ZU9wYWNpdHk6IDE7CiAgICAgICAgIGJvb2wgYWxpZ246IDI7Ci0gICAgICAgIFN0YXRl
KCk6IG1hc2tMYXllcigwKSwgb3BhY2l0eSgxKSwgcHJlc2VydmVzM0QoZmFsc2UpLCBtYXNrc1Rv
Qm91bmRzKGZhbHNlKSwKKyAgICAgICAgU3RhdGUoKTogbWFza0xheWVyKDApLCBvcGFjaXR5KDEu
ZiksIHByZXNlcnZlczNEKGZhbHNlKSwgbWFza3NUb0JvdW5kcyhmYWxzZSksCiAgICAgICAgICAg
ICAgICAgICBkcmF3c0NvbnRlbnQoZmFsc2UpLCBjb250ZW50c09wYXF1ZShmYWxzZSksIGJhY2tm
YWNlVmlzaWJpbGl0eShmYWxzZSksCiAgICAgICAgICAgICAgICAgICBkaXN0cmlidXRlT3BhY2l0
eShmYWxzZSkKICAgICAgICAgewogICAgICAgICB9CiAgICAgfSBtX3N0YXRlOworCisgICAgZnJp
ZW5kIGNsYXNzIEFuaW1hdGlvblF0QmFzZTsKIH07CiAKIEdyYXBoaWNzTGF5ZXJRdEltcGw6Okdy
YXBoaWNzTGF5ZXJRdEltcGwoR3JhcGhpY3NMYXllclF0KiBuZXdMYXllcikKQEAgLTE3MSwxNiAr
MTg1LDE0IEBAIEdyYXBoaWNzTGF5ZXJRdEltcGw6OkdyYXBoaWNzTGF5ZXJRdEltcGwoR3JhcGhp
Y3NMYXllclF0KiBuZXdMYXllcikKICAgICAsIG1fdHJhbnNmb3JtQW5pbWF0aW9uUnVubmluZyhm
YWxzZSkKICAgICAsIG1fY2hhbmdlTWFzayhOb0NoYW5nZXMpCiB7Ci0gICAgLy8gYmV0dGVyIHRv
IGNhbGN1bGF0ZSB0aGUgZXhwb3NlZCByZWN0IGluIFFHcmFwaGljc1ZpZXcgdGhhbiBvdmVyLXJl
bmRlciBpbiBXZWJDb3JlCi0gICAgLy8gRklYTUU6IHRlc3QgZGlmZmVyZW50IGFwcHJvYWNoZXMK
LSAgICBzZXRGbGFnKFFHcmFwaGljc0l0ZW06Okl0ZW1Vc2VzRXh0ZW5kZWRTdHlsZU9wdGlvbiwg
dHJ1ZSk7Ci0KICAgICAvLyB3ZSB1c2UgZ3JhcGhpY3MtdmlldyBmb3IgY29tcG9zaXRpbmcsIG5v
dCBmb3IgaW50ZXJhY3Rpdml0eQogICAgIHNldEFjY2VwdGVkTW91c2VCdXR0b25zKFF0OjpOb0J1
dHRvbik7CiAgICAgc2V0RW5hYmxlZChmYWxzZSk7CiAKICAgICAvLyB3ZSdsbCBzZXQgdGhlIGNh
Y2hlIHdoZW4gd2Uga25vdyB3aGF0J3MgZ29pbmcgb24KICAgICBzZXRDYWNoZU1vZGUoTm9DYWNo
ZSk7CisKKyAgICBjb25uZWN0KHRoaXMsIFNJR05BTChub3RpZnlBbmltYXRpb25TdGFydGVkQXN5
bmMoKSksIHRoaXMsIFNMT1Qobm90aWZ5QW5pbWF0aW9uU3RhcnRlZCgpKSwgUXQ6OlF1ZXVlZENv
bm5lY3Rpb24pOwogfQogCiBHcmFwaGljc0xheWVyUXRJbXBsOjp+R3JhcGhpY3NMYXllclF0SW1w
bCgpCkBAIC0yMDMsMjIgKzIxNSw0MiBAQCBHcmFwaGljc0xheWVyUXRJbXBsOjp+R3JhcGhpY3NM
YXllclF0SW1wbCgpCiAgICAgICAgICAgICBkZWxldGUgYW5pbTsKIH0KIAordm9pZCBHcmFwaGlj
c0xheWVyUXRJbXBsOjphZGp1c3RDYWNoaW5nUmVjdXJzaXZlbHkoYm9vbCBhbmltYXRpb25Jc1J1
bm5pbmcpCit7CisgICAgLy8gb3B0aW1pemF0aW9uOiB3ZSBtYWtlIHN1cmUgYWxsIG91ciBjaGls
ZHJlbiBoYXZlIEl0ZW1Db29yZGluYXRlQ2FjaGUgLQorICAgIC8vIG90aGVyd2lzZSB3ZSBlbmQg
dXAgcmUtcmVuZGVyaW5nIHRoZW0gZHVyaW5nIHRoZSBhbmltYXRpb24KKyAgICBjb25zdCBRTGlz
dDxRR3JhcGhpY3NJdGVtKj4gY2hpbGRyZW4gPSBjaGlsZEl0ZW1zKCk7CisKKyAgICBmb3IgKFFM
aXN0PFFHcmFwaGljc0l0ZW0qPjo6Y29uc3RfaXRlcmF0b3IgaXQgPSBjaGlsZHJlbi5iZWdpbigp
OyBpdCAhPSBjaGlsZHJlbi5lbmQoKTsgKytpdCkgeworICAgICAgICBpZiAoUUdyYXBoaWNzSXRl
bSogaXRlbSA9ICppdCkKKyAgICAgICAgICAgIGlmIChHcmFwaGljc0xheWVyUXRJbXBsKiBsYXll
ciA9IHFvYmplY3RfY2FzdDxHcmFwaGljc0xheWVyUXRJbXBsKj4oaXRlbS0+dG9HcmFwaGljc09i
amVjdCgpKSkgeworICAgICAgICAgICAgICAgIGlmIChsYXllci0+bV9sYXllci0+ZHJhd3NDb250
ZW50KCkgJiYgbGF5ZXItPm1fY3VycmVudENvbnRlbnQuY29udGVudFR5cGUgPT0gSFRNTENvbnRl
bnRUeXBlKQorICAgICAgICAgICAgICAgICAgICBsYXllci0+c2V0Q2FjaGVNb2RlKGFuaW1hdGlv
bklzUnVubmluZyA/IFFHcmFwaGljc0l0ZW06Okl0ZW1Db29yZGluYXRlQ2FjaGUgOiBRR3JhcGhp
Y3NJdGVtOjpEZXZpY2VDb29yZGluYXRlQ2FjaGUpOworICAgICAgICAgICAgfQorICAgIH0gICAg
Cit9CisKIHZvaWQgR3JhcGhpY3NMYXllclF0SW1wbDo6c2V0QmFzZVRyYW5zZm9ybShjb25zdCBR
VHJhbnNmb3JtJiB0cmFuc2Zvcm0pCiB7CiAgICAgaWYgKCFtX2xheWVyKQogICAgICAgICByZXR1
cm47Ci0gICAgLy8gd2Via2l0IGhhcyByZWxhdGl2ZS10by1zaXplIG9yaWdpblBvaW50LCBncmFw
aGljcy12aWV3IGhhcyBhIHBpeGVsIG9yaWdpblBvaW50Ci0gICAgLy8gaGVyZSB3ZSBjb252ZXJ0
Ci0gICAgUVBvaW50RiBvcmlnaW5UcmFuc2xhdGUoCi0gICAgICAgICAgICBtX2xheWVyLT5hbmNo
b3JQb2ludCgpLngoKSAqIG1fbGF5ZXItPnNpemUoKS53aWR0aCgpLCBtX2xheWVyLT5hbmNob3JQ
b2ludCgpLnkoKSAqIG1fbGF5ZXItPnNpemUoKS5oZWlnaHQoKSk7Ci0KLSAgICByZXNldFRyYW5z
Zm9ybSgpOwotCi0gICAgLy8gd2UgaGF2ZSB0byBtYW5hZ2UgdGhpcyBvdXJzZWx2ZXMgYmVjYXVz
ZSBRR3JhcGhpY3NWaWV3J3MgdHJhbnNmb3JtT3JpZ2luIGlzIGluY29tcGxldGUKLSAgICB0cmFu
c2xhdGUob3JpZ2luVHJhbnNsYXRlLngoKSwgb3JpZ2luVHJhbnNsYXRlLnkoKSk7CisgICAgLy8g
d2Via2l0IGhhcyByZWxhdGl2ZS10by1zaXplIG9yaWdpblBvaW50LCBncmFwaGljcy12aWV3IGhh
cyBhIHBpeGVsIG9yaWdpblBvaW50LCBoZXJlIHdlIGNvbnZlcnQKKyAgICAvLyB3ZSBoYXZlIHRv
IG1hbmFnZSB0aGlzIG91cnNlbHZlcyBiZWNhdXNlIFFHcmFwaGljc1ZpZXcncyB0cmFuc2Zvcm1P
cmlnaW4gaXMgaW5jb21wYXRpYmxlCisgICAgY29uc3QgcXJlYWwgeCA9IG1fbGF5ZXItPmFuY2hv
clBvaW50KCkueCgpICogbV9sYXllci0+c2l6ZSgpLndpZHRoKCk7CisgICAgY29uc3QgcXJlYWwg
eSA9IG1fbGF5ZXItPmFuY2hvclBvaW50KCkueSgpICogbV9sYXllci0+c2l6ZSgpLmhlaWdodCgp
OworICAgIHNldFRyYW5zZm9ybShRVHJhbnNmb3JtOjpmcm9tVHJhbnNsYXRlKHgsIHkpKTsKICAg
ICBzZXRUcmFuc2Zvcm0odHJhbnNmb3JtLCB0cnVlKTsKLSAgICB0cmFuc2xhdGUoLW9yaWdpblRy
YW5zbGF0ZS54KCksIC1vcmlnaW5UcmFuc2xhdGUueSgpKTsKLSAgICBtX2Jhc2VUcmFuc2ZvbSA9
IHRyYW5zZm9ybTsKKyAgICB0cmFuc2xhdGUoLXgsIC15KTsKKyAgICBtX2Jhc2VUcmFuc2Zvcm0g
PSB0cmFuc2Zvcm07Cit9CisKK2Jvb2wgR3JhcGhpY3NMYXllclF0SW1wbDo6aXNUcmFuc2Zvcm1B
bmltYXRpb25SdW5uaW5nKCkgY29uc3QKK3sKKyAgICBpZiAobV90cmFuc2Zvcm1BbmltYXRpb25S
dW5uaW5nKQorICAgICAgICByZXR1cm4gdHJ1ZTsKKyAgICBpZiAoR3JhcGhpY3NMYXllclF0SW1w
bCogcGFyZW50ID0gcW9iamVjdF9jYXN0PEdyYXBoaWNzTGF5ZXJRdEltcGwqPihwYXJlbnRPYmpl
Y3QoKSkpCisgICAgICAgIHJldHVybiBwYXJlbnQtPmlzVHJhbnNmb3JtQW5pbWF0aW9uUnVubmlu
ZygpOworICAgIHJldHVybiBmYWxzZTsKIH0KIAogUVBhaW50ZXJQYXRoIEdyYXBoaWNzTGF5ZXJR
dEltcGw6Om9wYXF1ZUFyZWEoKSBjb25zdApAQCAtMjcwLDQyICszMDIsMzEgQEAgdm9pZCBHcmFw
aGljc0xheWVyUXRJbXBsOjpwYWludChRUGFpbnRlciogcGFpbnRlciwgY29uc3QgUVN0eWxlT3B0
aW9uR3JhcGhpY3NJdGUKICAgICBkcmF3Q29udGVudHMocGFpbnRlciwgb3B0aW9uLT5leHBvc2Vk
UmVjdCk7CiB9CiAKLXZvaWQgR3JhcGhpY3NMYXllclF0SW1wbDo6ZHJhd0NvbnRlbnRzKFFQYWlu
dGVyKiBwYWludGVyLCBjb25zdCBRUmVjdEYmIHIsIGJvb2wgbWFzaykKK3ZvaWQgR3JhcGhpY3NM
YXllclF0SW1wbDo6ZHJhd0NvbnRlbnRzKFFQYWludGVyKiBwYWludGVyLCBjb25zdCBRUmVjdEYm
IGV4cG9zZWRSZWN0LCBib29sIG1hc2spCiB7Ci0gICAgUVJlY3QgcmVjdCA9IHIudG9BbGlnbmVk
UmVjdCgpOwotICAgIAotICAgIGlmIChtX2N1cnJlbnRDb250ZW50LmNvbnRlbnRUeXBlICE9IEhU
TUxDb250ZW50VHlwZSAmJiAhbV9zdGF0ZS5jb250ZW50c1JlY3QuaXNFbXB0eSgpKQotICAgICAg
ICByZWN0ID0gcmVjdC5pbnRlcnNlY3RlZChtX3N0YXRlLmNvbnRlbnRzUmVjdCk7Ci0KICAgICBp
ZiAobV9jdXJyZW50Q29udGVudC5iYWNrZ3JvdW5kQ29sb3IuaXNWYWxpZCgpKQotICAgICAgICBw
YWludGVyLT5maWxsUmVjdChyLCBRQ29sb3IobV9jdXJyZW50Q29udGVudC5iYWNrZ3JvdW5kQ29s
b3IpKTsKKyAgICAgICAgcGFpbnRlci0+ZmlsbFJlY3QoZXhwb3NlZFJlY3QsIFFDb2xvcihtX2N1
cnJlbnRDb250ZW50LmJhY2tncm91bmRDb2xvcikpOwogCi0gICAgaWYgKCFyZWN0LmlzRW1wdHko
KSkgewotICAgICAgICBzd2l0Y2ggKG1fY3VycmVudENvbnRlbnQuY29udGVudFR5cGUpIHsKLSAg
ICAgICAgY2FzZSBQaXhtYXBDb250ZW50VHlwZToKLSAgICAgICAgICAgIC8vIHdlIGhhdmUgdG8g
c2NhbGUgdGhlIGltYWdlIHRvIHRoZSBjb250ZW50c1JlY3QKLSAgICAgICAgICAgIC8vIEZJWE1F
OiBhIGJldHRlciB3YXkgd291bGQgcHJvYmFibHkgYmUgZHJhd1BpeG1hcCB3aXRoIGEgc3JjL3Rh
cmdldCByZWN0Ci0gICAgICAgICAgICBwYWludGVyLT5kcmF3UGl4bWFwKHJlY3QudG9wTGVmdCgp
LCBtX2N1cnJlbnRDb250ZW50LnBpeG1hcC5zY2FsZWQobV9zdGF0ZS5jb250ZW50c1JlY3Quc2l6
ZSgpKSwgcik7Ci0gICAgICAgICAgICBicmVhazsKLSAgICAgICAgY2FzZSBDb2xvckNvbnRlbnRU
eXBlOgotICAgICAgICAgICAgcGFpbnRlci0+ZmlsbFJlY3QocmVjdCwgbV9jdXJyZW50Q29udGVu
dC5jb250ZW50c0JhY2tncm91bmRDb2xvcik7Ci0gICAgICAgICAgICBicmVhazsKLSAgICAgICAg
ZGVmYXVsdDoKLSAgICAgICAgICAgIGlmIChtX3N0YXRlLmRyYXdzQ29udGVudCkgewotICAgICAg
ICAgICAgICAgIC8vIHRoaXMgaXMgdGhlICJleHBlbnNpdmUiIGJpdC4gd2UgdHJ5IHRvIG1pbmlt
aXplIGNhbGxzIHRvIHRoaXMKLSAgICAgICAgICAgICAgICAvLyBuZWNrIG9mIHRoZSB3b29kcyBi
eSBwcm9wZXIgY2FjaGluZwotICAgICAgICAgICAgICAgIEdyYXBoaWNzQ29udGV4dCBnYyhwYWlu
dGVyKTsKLSAgICAgICAgICAgICAgICBtX2xheWVyLT5wYWludEdyYXBoaWNzTGF5ZXJDb250ZW50
cyhnYywgcmVjdCk7Ci0gICAgICAgICAgICB9Ci0gICAgICAgICAgICBicmVhazsKKyAgICBzd2l0
Y2ggKG1fY3VycmVudENvbnRlbnQuY29udGVudFR5cGUpIHsKKyAgICBjYXNlIFBpeG1hcENvbnRl
bnRUeXBlOgorICAgICAgICBwYWludGVyLT5kcmF3UGl4bWFwKG1fc3RhdGUuY29udGVudHNSZWN0
LCBtX2N1cnJlbnRDb250ZW50LnBpeG1hcCk7CisgICAgICAgIGJyZWFrOworICAgIGNhc2UgQ29s
b3JDb250ZW50VHlwZToKKyAgICAgICAgcGFpbnRlci0+ZmlsbFJlY3QobV9zdGF0ZS5jb250ZW50
c1JlY3QsIG1fY3VycmVudENvbnRlbnQuY29udGVudHNCYWNrZ3JvdW5kQ29sb3IpOworICAgICAg
ICBicmVhazsKKyAgICBkZWZhdWx0OgorICAgICAgICBpZiAobV9zdGF0ZS5kcmF3c0NvbnRlbnQp
IHsKKyAgICAgICAgICAgIC8vIHRoaXMgaXMgdGhlICJleHBlbnNpdmUiIGJpdC4gd2UgdHJ5IHRv
IG1pbmltaXplIGNhbGxzIHRvIHRoaXMgbmVjayBvZiB0aGUgd29vZHMgYnkgcHJvcGVyIGNhY2hp
bmcKKyAgICAgICAgICAgIEdyYXBoaWNzQ29udGV4dCBnYyhwYWludGVyKTsKKyAgICAgICAgICAg
IG1fbGF5ZXItPnBhaW50R3JhcGhpY3NMYXllckNvbnRlbnRzKGdjLCBleHBvc2VkUmVjdC50b0Fs
aWduZWRSZWN0KCkpOwogICAgICAgICB9CisgICAgICAgIGJyZWFrOwogICAgIH0KIH0KIAogdm9p
ZCBHcmFwaGljc0xheWVyUXRJbXBsOjpub3RpZnlDaGFuZ2UoQ2hhbmdlTWFzayBjaGFuZ2VNYXNr
KQogewotICAgIGlmICghdGhpcykKLSAgICAgICAgcmV0dXJuOworICAgIFFfQVNTRVJUKHRoaXMp
OwogCiAgICAgbV9jaGFuZ2VNYXNrIHw9IGNoYW5nZU1hc2s7CiAKQEAgLTM0MiwxNCArMzYzLDE0
IEBAIHZvaWQgR3JhcGhpY3NMYXllclF0SW1wbDo6Zmx1c2hDaGFuZ2VzKGJvb2wgcmVjdXJzaXZl
KQogICAgICAgICBjb25zdCBRU2V0PFFHcmFwaGljc0l0ZW0qPiBjdXJyZW50Q2hpbGRyZW4gPSBj
aGlsZEl0ZW1zKCkudG9TZXQoKTsKICAgICAgICAgY29uc3QgUVNldDxRR3JhcGhpY3NJdGVtKj4g
Y2hpbGRyZW5Ub0FkZCA9IG5ld0NoaWxkcmVuIC0gY3VycmVudENoaWxkcmVuOwogICAgICAgICBj
b25zdCBRU2V0PFFHcmFwaGljc0l0ZW0qPiBjaGlsZHJlblRvUmVtb3ZlID0gY3VycmVudENoaWxk
cmVuIC0gbmV3Q2hpbGRyZW47Ci0gICAgICAgIGZvciAoUVNldDxRR3JhcGhpY3NJdGVtKj46OmNv
bnN0X2l0ZXJhdG9yIGl0ID0gY2hpbGRyZW5Ub0FkZC5iZWdpbigpOyBpdCAhPSBjaGlsZHJlblRv
QWRkLmVuZCgpOyArK2l0KSB7CisKKyAgICAgICAgZm9yIChRU2V0PFFHcmFwaGljc0l0ZW0qPjo6
Y29uc3RfaXRlcmF0b3IgaXQgPSBjaGlsZHJlblRvQWRkLmJlZ2luKCk7IGl0ICE9IGNoaWxkcmVu
VG9BZGQuZW5kKCk7ICsraXQpCiAgICAgICAgICAgICAgaWYgKFFHcmFwaGljc0l0ZW0qIHcgPSAq
aXQpCiAgICAgICAgICAgICAgICAgdy0+c2V0UGFyZW50SXRlbSh0aGlzKTsKLSAgICAgICAgfQot
ICAgICAgICBmb3IgKFFTZXQ8UUdyYXBoaWNzSXRlbSo+Ojpjb25zdF9pdGVyYXRvciBpdCA9IGNo
aWxkcmVuVG9SZW1vdmUuYmVnaW4oKTsgaXQgIT0gY2hpbGRyZW5Ub1JlbW92ZS5lbmQoKTsgKytp
dCkgeworCisgICAgICAgIGZvciAoUVNldDxRR3JhcGhpY3NJdGVtKj46OmNvbnN0X2l0ZXJhdG9y
IGl0ID0gY2hpbGRyZW5Ub1JlbW92ZS5iZWdpbigpOyBpdCAhPSBjaGlsZHJlblRvUmVtb3ZlLmVu
ZCgpOyArK2l0KQogICAgICAgICAgICAgIGlmIChRR3JhcGhpY3NJdGVtKiB3ID0gKml0KQogICAg
ICAgICAgICAgICAgIHctPnNldFBhcmVudEl0ZW0oMCk7Ci0gICAgICAgIH0KIAogICAgICAgICAv
LyBjaGlsZHJlbiBhcmUgb3JkZXJlZCBieSB6LXZhbHVlLCBsZXQgZ3JhcGhpY3MtdmlldyBrbm93
LgogICAgICAgICBmb3IgKHNpemVfdCBpID0gMDsgaSA8IG5ld0NoaWxkcmVuVmVjdG9yLnNpemUo
KTsgKytpKQpAQCAtMzgzLDE3ICs0MDQsMTcgQEAgdm9pZCBHcmFwaGljc0xheWVyUXRJbXBsOjpm
bHVzaENoYW5nZXMoYm9vbCByZWN1cnNpdmUpCiAgICAgICAgIC8vIHRoZSBhbmNob3ItcG9pbnQs
IHRyYW5zZm9ybSBhbmQgc2l6ZSBmcm9tIFdlYkNvcmUgYWxsIGFmZmVjdCB0aGUgb25lCiAgICAg
ICAgIC8vIHRoYXQgd2UgZ2l2ZSBRdAogICAgICAgICBpZiAobV9zdGF0ZS50cmFuc2Zvcm0gIT0g
bV9sYXllci0+dHJhbnNmb3JtKCkgfHwgbV9zdGF0ZS5hbmNob3JQb2ludCAhPSBtX2xheWVyLT5h
bmNob3JQb2ludCgpIHx8IG1fc3RhdGUuc2l6ZSAhPSBtX2xheWVyLT5zaXplKCkpCi0gICAgICAg
ICAgICBzZXRCYXNlVHJhbnNmb3JtKFFUcmFuc2Zvcm0obV9sYXllci0+dHJhbnNmb3JtKCkpKTsK
KyAgICAgICAgICAgIHNldEJhc2VUcmFuc2Zvcm0obV9sYXllci0+dHJhbnNmb3JtKCkpOwogICAg
IH0KIAogICAgIGlmIChtX2NoYW5nZU1hc2sgJiAoQ29udGVudENoYW5nZSB8IERyYXdzQ29udGVu
dENoYW5nZSkpIHsKICAgICAgICAgc3dpdGNoIChtX3BlbmRpbmdDb250ZW50LmNvbnRlbnRUeXBl
KSB7CiAgICAgICAgIGNhc2UgUGl4bWFwQ29udGVudFR5cGU6Ci0gICAgICAgICAgICAvLyB3ZSBu
ZWVkIGNhY2hlIGV2ZW4gZm9yIGltYWdlcywgYmVjYXVzZSB0aGV5IG5lZWQgdG8gYmUgcmVzaXpl
ZAotICAgICAgICAgICAgLy8gdG8gdGhlIGNvbnRlbnRzIHJlY3QuIG1heWJlIHRoaXMgY2FuIGJl
IG9wdGltaXplZCB0aG91Z2gKLSAgICAgICAgICAgIHNldENhY2hlTW9kZShtX3RyYW5zZm9ybUFu
aW1hdGlvblJ1bm5pbmcgPyBJdGVtQ29vcmRpbmF0ZUNhY2hlIDogRGV2aWNlQ29vcmRpbmF0ZUNh
Y2hlKTsKICAgICAgICAgICAgIHVwZGF0ZSgpOwogICAgICAgICAgICAgc2V0RmxhZyhJdGVtSGFz
Tm9Db250ZW50cywgZmFsc2UpOworCisgICAgICAgICAgICAvLyB3ZSBvbmx5IHVzZSBJdGVtVXNl
c0V4dGVuZGVkU3R5bGVPcHRpb24gZm9yIEhUTUwgY29udGVudCAtIHBpeG1hcCBjYW4gYmUgaGFu
ZGxlZCBiZXR0ZXIgd2l0aCByZWd1bGFyIGNsaXBwaW5nCisgICAgICAgICAgICBzZXRGbGFnKFFH
cmFwaGljc0l0ZW06Okl0ZW1Vc2VzRXh0ZW5kZWRTdHlsZU9wdGlvbiwgZmFsc2UpOwogICAgICAg
ICAgICAgYnJlYWs7CiAKICAgICAgICAgY2FzZSBDb2xvckNvbnRlbnRUeXBlOgpAQCAtNDAzLDYg
KzQyNCw5IEBAIHZvaWQgR3JhcGhpY3NMYXllclF0SW1wbDo6Zmx1c2hDaGFuZ2VzKGJvb2wgcmVj
dXJzaXZlKQogICAgICAgICAgICAgICAgIHVwZGF0ZSgpOwogICAgICAgICAgICAgbV9zdGF0ZS5k
cmF3c0NvbnRlbnQgPSBmYWxzZTsKICAgICAgICAgICAgIHNldEZsYWcoSXRlbUhhc05vQ29udGVu
dHMsIGZhbHNlKTsKKworICAgICAgICAgICAgLy8gd2Ugb25seSB1c2UgSXRlbVVzZXNFeHRlbmRl
ZFN0eWxlT3B0aW9uIGZvciBIVE1MIGNvbnRlbnQgLSBjb2xvcnMgZG9uJ3QgZ2FpbiBtdWNoIGZy
b20gdGhhdCBhbnl3YXkKKyAgICAgICAgICAgIHNldEZsYWcoUUdyYXBoaWNzSXRlbTo6SXRlbVVz
ZXNFeHRlbmRlZFN0eWxlT3B0aW9uLCBmYWxzZSk7CiAgICAgICAgICAgICBicmVhazsKIAogICAg
ICAgICBjYXNlIEhUTUxDb250ZW50VHlwZToKQEAgLTQxMCw4ICs0MzQsMTYgQEAgdm9pZCBHcmFw
aGljc0xheWVyUXRJbXBsOjpmbHVzaENoYW5nZXMoYm9vbCByZWN1cnNpdmUpCiAgICAgICAgICAg
ICAgICAgdXBkYXRlKCk7CiAgICAgICAgICAgICBpZiAoIW1fc3RhdGUuZHJhd3NDb250ZW50ICYm
IG1fbGF5ZXItPmRyYXdzQ29udGVudCgpKQogICAgICAgICAgICAgICAgIHVwZGF0ZSgpOwotICAg
ICAgICAgICAgaWYgKG1fbGF5ZXItPmRyYXdzQ29udGVudCgpKQotICAgICAgICAgICAgICAgIHNl
dENhY2hlTW9kZShtX3RyYW5zZm9ybUFuaW1hdGlvblJ1bm5pbmcgPyBJdGVtQ29vcmRpbmF0ZUNh
Y2hlIDogRGV2aWNlQ29vcmRpbmF0ZUNhY2hlKTsKKyAgICAgICAgICAgICAgICBpZiAobV9sYXll
ci0+ZHJhd3NDb250ZW50KCkpIHsKKyAgICAgICAgICAgICAgICAgICAgY29uc3QgUUdyYXBoaWNz
SXRlbTo6Q2FjaGVNb2RlIG1ld0NhY2hlTW9kZSA9IGlzVHJhbnNmb3JtQW5pbWF0aW9uUnVubmlu
ZygpID8gSXRlbUNvb3JkaW5hdGVDYWNoZSA6IERldmljZUNvb3JkaW5hdGVDYWNoZTsKKworICAg
ICAgICAgICAgICAgICAgICAvLyBvcHRpbWl6YXRpb246IFFHcmFwaGljc0l0ZW0gZG9lc24ndCBh
bHdheXMgcGVyZm9ybSB0aGlzIHRlc3QKKyAgICAgICAgICAgICAgICAgICAgaWYgKG1ld0NhY2hl
TW9kZSAhPSBjYWNoZU1vZGUoKSkKKyAgICAgICAgICAgICAgICAgICAgICAgIHNldENhY2hlTW9k
ZShtZXdDYWNoZU1vZGUpOworCisgICAgICAgICAgICAgICAgICAgIC8vIEhUTUwgY29udGVudDog
d2Ugd2FudCB0byB1c2UgZXhwb3NlZFJlY3Qgc28gd2UgZG9uJ3QgdXNlIFdlYkNvcmUgcmVuZGVy
aW5nIGlmIHdlIGRvbid0IGhhdmUgdG8KKyAgICAgICAgICAgICAgICAgICAgc2V0RmxhZyhRR3Jh
cGhpY3NJdGVtOjpJdGVtVXNlc0V4dGVuZGVkU3R5bGVPcHRpb24sIHRydWUpOworICAgICAgICAg
ICAgICAgIH0KICAgICAgICAgICAgIGVsc2UKICAgICAgICAgICAgICAgICBzZXRDYWNoZU1vZGUo
Tm9DYWNoZSk7CiAKQEAgLTQ0OCw3ICs0ODAsNyBAQCB2b2lkIEdyYXBoaWNzTGF5ZXJRdEltcGw6
OmZsdXNoQ2hhbmdlcyhib29sIHJlY3Vyc2l2ZSkKICAgICAgICAgdXBkYXRlKCk7CiAKICAgICAv
LyBGSVhNRTogdGhlIGZvbGxvd2luZyBmbGFncyBhcmUgY3VycmVudGx5IG5vdCBoYW5kbGVkLCBh
cyB0aGV5IGRvbid0IGhhdmUgYSBjbGVhciB0ZXN0IG9yIGFyZSBpbiBsb3cgcHJpb3JpdHkKLSAg
ICAvLyBHZW9tZXRyeU9yaWVudGF0aW9uQ2hhbmdlLCBDb250ZW50c09yaWVudGF0aW9uQ2hhbmdl
LCBCYWNrZmFjZVZpc2liaWxpdHlDaGFuZ2UsIENoaWxkcmVuVHJhbnNmb3JtQ2hhbmdlCisgICAg
Ly8gR2VvbWV0cnlPcmllbnRhdGlvbkNoYW5nZSwgQ29udGVudHNPcmllbnRhdGlvbkNoYW5nZSwg
QmFja2ZhY2VWaXNpYmlsaXR5Q2hhbmdlLCBDaGlsZHJlblRyYW5zZm9ybUNoYW5nZSwgUHJlc2Vy
dmVzM0RDaGFuZ2UKIAogICAgIG1fc3RhdGUubWFza0xheWVyID0gbV9sYXllci0+bWFza0xheWVy
KCk7CiAgICAgbV9zdGF0ZS5wb3MgPSBtX2xheWVyLT5wb3NpdGlvbigpOwpAQCAtNTIzLDkgKzU1
NSw5IEBAIHZvaWQgR3JhcGhpY3NMYXllclF0OjpzZXROZWVkc0Rpc3BsYXkoKQogfQogCiAvLyBy
ZWltcCBmcm9tIEdyYXBoaWNzTGF5ZXIuaAotdm9pZCBHcmFwaGljc0xheWVyUXQ6OnNldE5lZWRz
RGlzcGxheUluUmVjdChjb25zdCBGbG9hdFJlY3QmIHIpCit2b2lkIEdyYXBoaWNzTGF5ZXJRdDo6
c2V0TmVlZHNEaXNwbGF5SW5SZWN0KGNvbnN0IEZsb2F0UmVjdCYgcmVjdCkKIHsKLSAgICBtX2lt
cGwtPm1fcGVuZGluZ0NvbnRlbnQucmVnaW9uVG9VcGRhdGV8PSBRUmVjdEYocikudG9BbGlnbmVk
UmVjdCgpOworICAgIG1faW1wbC0+bV9wZW5kaW5nQ29udGVudC5yZWdpb25Ub1VwZGF0ZXw9IFFS
ZWN0RihyZWN0KS50b0FsaWduZWRSZWN0KCk7CiAgICAgbV9pbXBsLT5ub3RpZnlDaGFuZ2UoR3Jh
cGhpY3NMYXllclF0SW1wbDo6RGlzcGxheUNoYW5nZSk7CiB9CiAKQEAgLTgwNywxNiArODM5LDE2
IEBAIHN0YXRpYyBpbmxpbmUgZG91YmxlIHNvbHZlQ3ViaWNCZXppZXJGdW5jdGlvbihxcmVhbCBw
MXgsIHFyZWFsIHAxeSwgcXJlYWwgcDJ4LCBxCiAvLyBVc2luZyBlYXNpbmctY3VydmVzIHdvdWxk
IHByb2JhYmx5IHdvcmsgZm9yIHNvbWUgb2YgdGhlIGNhc2VzLCBidXQgd291bGRuJ3QgcmVhbGx5
IGJ1eSB1cyBhbnl0aGluZyBhcyB3ZSdkIGhhdmUgdG8gY29udmVydCB0aGUgYmV6aWVyIGZ1bmN0
aW9uIGJhY2sgdG8gYW4gZWFzaW5nIGN1cnZlCiBzdGF0aWMgaW5saW5lIHFyZWFsIGFwcGx5VGlt
aW5nRnVuY3Rpb24oY29uc3QgVGltaW5nRnVuY3Rpb24mIHRpbWluZ0Z1bmN0aW9uLCBxcmVhbCBw
cm9ncmVzcywgaW50IGR1cmF0aW9uKQogewotICAgIGlmICh0aW1pbmdGdW5jdGlvbi50eXBlKCkg
PT0gTGluZWFyVGltaW5nRnVuY3Rpb24pCisgICAgICAgIGlmICh0aW1pbmdGdW5jdGlvbi50eXBl
KCkgPT0gTGluZWFyVGltaW5nRnVuY3Rpb24pCisgICAgICAgICAgICByZXR1cm4gcHJvZ3Jlc3M7
CisgICAgICAgIGlmICh0aW1pbmdGdW5jdGlvbi50eXBlKCkgPT0gQ3ViaWNCZXppZXJUaW1pbmdG
dW5jdGlvbikgeworICAgICAgICAgICAgcmV0dXJuIHNvbHZlQ3ViaWNCZXppZXJGdW5jdGlvbih0
aW1pbmdGdW5jdGlvbi54MSgpLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICB0aW1pbmdGdW5jdGlvbi55MSgpLAorICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICB0aW1pbmdGdW5jdGlvbi54MigpLAorICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICB0aW1pbmdGdW5jdGlvbi55MigpLAorICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBkb3VibGUocHJvZ3Jlc3MpLCBkb3Vi
bGUoZHVyYXRpb24pIC8gMTAwMCk7CisgICAgICAgIH0KICAgICAgICAgcmV0dXJuIHByb2dyZXNz
OwotICAgIGlmICh0aW1pbmdGdW5jdGlvbi50eXBlKCkgPT0gQ3ViaWNCZXppZXJUaW1pbmdGdW5j
dGlvbikgewotICAgICAgICByZXR1cm4gc29sdmVDdWJpY0JlemllckZ1bmN0aW9uKHRpbWluZ0Z1
bmN0aW9uLngxKCksCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdGlt
aW5nRnVuY3Rpb24ueTEoKSwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICB0aW1pbmdGdW5jdGlvbi54MigpLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgIHRpbWluZ0Z1bmN0aW9uLnkyKCksCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgZG91YmxlKHByb2dyZXNzKSwgZG91YmxlKGR1cmF0aW9uKSAvIDEwMDApOwot
ICAgIH0KLSAgICByZXR1cm4gcHJvZ3Jlc3M7CiB9CiAKIC8vIGhlbHBlciBmdW5jdGlvbnMgdG8g
c2FmZWx5IGdldCBhIHZhbHVlIG91dCBvZiBXZWJDb3JlJ3MgQW5pbWF0aW9uVmFsdWUqCkBAIC04
MjYsOSArODU4LDcgQEAgc3RhdGljIHZvaWQgd2Via2l0QW5pbWF0aW9uVG9RdEFuaW1hdGlvblZh
bHVlKGNvbnN0IEFuaW1hdGlvblZhbHVlKiBhbmltYXRpb25WYWwKICAgICBpZiAoIWFuaW1hdGlv
blZhbHVlKQogICAgICAgICByZXR1cm47CiAKLSAgICBjb25zdCBUcmFuc2Zvcm1PcGVyYXRpb25z
KiBvcHMgPSBzdGF0aWNfY2FzdDxjb25zdCBUcmFuc2Zvcm1BbmltYXRpb25WYWx1ZSo+KGFuaW1h
dGlvblZhbHVlKS0+dmFsdWUoKTsKLQotICAgIGlmIChvcHMpCisgICAgaWYgKGNvbnN0IFRyYW5z
Zm9ybU9wZXJhdGlvbnMqIG9wcyA9IHN0YXRpY19jYXN0PGNvbnN0IFRyYW5zZm9ybUFuaW1hdGlv
blZhbHVlKj4oYW5pbWF0aW9uVmFsdWUpLT52YWx1ZSgpKQogICAgICAgICB0cmFuc2Zvcm1PcGVy
YXRpb25zID0gKm9wczsKIH0KIApAQCAtODU2LDggKzg4Niw4IEBAIHB1YmxpYzoKICAgICAgICAg
UUFic3RyYWN0QW5pbWF0aW9uOjp1cGRhdGVTdGF0ZShuZXdTdGF0ZSwgb2xkU3RhdGUpOwogCiAg
ICAgICAgIC8vIGZvciBzb21lIHJlYXNvbiBJIGhhdmUgZG8gdGhpcyBhc3luY2hyb25vdXNseSAt
IG9yIHRoZSBhbmltYXRpb24gd29uJ3Qgd29yawotICAgICAgICBpZiAobmV3U3RhdGUgPT0gUnVu
bmluZyAmJiBvbGRTdGF0ZSA9PSBTdG9wcGVkKQotICAgICAgICAgICAgUVRpbWVyOjpzaW5nbGVT
aG90KDAsIG1fbGF5ZXIuZGF0YSgpLCBTTE9UKG5vdGlmeUFuaW1hdGlvblN0YXJ0ZWQoKSkpOwor
ICAgICAgICBpZiAobmV3U3RhdGUgPT0gUnVubmluZyAmJiBvbGRTdGF0ZSA9PSBTdG9wcGVkICYm
IG1fbGF5ZXIuZGF0YSgpKQorICAgICAgICAgICAgbV9sYXllci5kYXRhKCktPm5vdGlmeUFuaW1h
dGlvblN0YXJ0ZWRBc3luYygpOwogICAgIH0KIAogICAgIHZpcnR1YWwgaW50IGR1cmF0aW9uKCkg
Y29uc3QgeyByZXR1cm4gbV9kdXJhdGlvbjsgfQpAQCAtOTMyLDkgKzk2MiwxMCBAQCBwcm90ZWN0
ZWQ6CiAKICAgICAgICAgLy8gbm93IHdlIGhhdmUgYSBzb3VyY2Uga2V5ZnJhbWUsIG9yaWdpbiBr
ZXlmcmFtZSBhbmQgYSB0aW1pbmcgZnVuY3Rpb24KICAgICAgICAgLy8gd2UgY2FuIG5vdyBwcm9j
ZXNzIHRoZSBwcm9ncmVzcyBhbmQgYXBwbHkgdGhlIGZyYW1lCi0gICAgICAgIHFyZWFsIG5vcm1h
bGl6ZWRQcm9ncmVzcyA9IChpdC5rZXkoKSA9PSBpdDIua2V5KCkpID8gMCA6IChwcm9ncmVzcyAt
IGl0LmtleSgpKSAvIChpdDIua2V5KCkgLSBpdC5rZXkoKSk7Ci0gICAgICAgIG5vcm1hbGl6ZWRQ
cm9ncmVzcyA9IGFwcGx5VGltaW5nRnVuY3Rpb24odGltaW5nRnVuYywgbm9ybWFsaXplZFByb2dy
ZXNzLCBkdXJhdGlvbigpIC8gMTAwMCk7Ci0gICAgICAgIGFwcGx5RnJhbWUoZnJvbVZhbHVlLCB0
b1ZhbHVlLCBub3JtYWxpemVkUHJvZ3Jlc3MpOworICAgICAgICBwcm9ncmVzcyA9ICghcHJvZ3Jl
c3MgfHwgcHJvZ3Jlc3MgPT0gMSB8fCBpdC5rZXkoKSA9PSBpdDIua2V5KCkpCisgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgID8gcHJvZ3Jlc3MKKyAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgOiBhcHBseVRpbWluZ0Z1bmN0aW9uKHRpbWluZ0Z1
bmMsIChwcm9ncmVzcyAtIGl0LmtleSgpKSAvIChpdDIua2V5KCkgLSBpdC5rZXkoKSksIGR1cmF0
aW9uKCkgLyAxMDAwKTsKKyAgICAgICAgYXBwbHlGcmFtZShmcm9tVmFsdWUsIHRvVmFsdWUsIHBy
b2dyZXNzKTsKICAgICB9CiAKICAgICBRTWFwPHFyZWFsLCBLZXlmcmFtZVZhbHVlUXQ8VD4gPiBt
X2tleWZyYW1lVmFsdWVzOwpAQCAtOTQzLDcgKzk3NCw3IEBAIHByb3RlY3RlZDoKIGNsYXNzIFRy
YW5zZm9ybUFuaW1hdGlvblF0IDogcHVibGljIEFuaW1hdGlvblF0PFRyYW5zZm9ybU9wZXJhdGlv
bnM+IHsKIHB1YmxpYzoKICAgICBUcmFuc2Zvcm1BbmltYXRpb25RdChHcmFwaGljc0xheWVyUXRJ
bXBsKiBsYXllciwgY29uc3QgS2V5ZnJhbWVWYWx1ZUxpc3QmIHZhbHVlcywgY29uc3QgSW50U2l6
ZSYgYm94U2l6ZSwgY29uc3QgQW5pbWF0aW9uKiBhbmltLCBjb25zdCBRU3RyaW5nICYgbmFtZSkK
LSAgICAgICAgICAgICAgICA6IEFuaW1hdGlvblF0PFRyYW5zZm9ybU9wZXJhdGlvbnM+KGxheWVy
LCB2YWx1ZXMsIGJveFNpemUsIGFuaW0sIG5hbWUpCisgICAgICAgIDogQW5pbWF0aW9uUXQ8VHJh
bnNmb3JtT3BlcmF0aW9ucz4obGF5ZXIsIHZhbHVlcywgYm94U2l6ZSwgYW5pbSwgbmFtZSkKICAg
ICB7CiAgICAgfQogCkBAIC05NTIsNyArOTgzLDcgQEAgcHVibGljOgogICAgICAgICAvLyB0aGlz
IGNhbWUgdXAgZHVyaW5nIHRoZSBjb21wb3NpdGluZy9hbmltYXRpb24gTGF5b3V0VGVzdHMKICAg
ICAgICAgLy8gd2hlbiB0aGUgYW5pbWF0aW9uIGRpZXMsIHRoZSB0cmFuc2Zvcm0gaGFzIHRvIGdv
IGJhY2sgdG8gZGVmYXVsdAogICAgICAgICBpZiAobV9sYXllcikKLSAgICAgICAgICAgIG1fbGF5
ZXIuZGF0YSgpLT5zZXRCYXNlVHJhbnNmb3JtKFFUcmFuc2Zvcm0obV9sYXllci5kYXRhKCktPm1f
bGF5ZXItPnRyYW5zZm9ybSgpKSk7CisgICAgICAgICAgICBtX2xheWVyLmRhdGEoKS0+c2V0QmFz
ZVRyYW5zZm9ybShtX2xheWVyLmRhdGEoKS0+bV9sYXllci0+dHJhbnNmb3JtKCkpOwogICAgIH0K
IAogICAgIC8vIHRoZSBpZGVhIGlzIHRoYXQgd2UgbGV0IFdlYkNvcmUgbWFuYWdlIHRoZSB0cmFu
c2Zvcm0tb3BlcmF0aW9ucwpAQCAtOTYzLDExICs5OTQsMjIgQEAgcHVibGljOgogICAgIHsKICAg
ICAgICAgVHJhbnNmb3JtYXRpb25NYXRyaXggdHJhbnNmb3JtTWF0cml4OwogCi0gICAgICAgIC8v
IHRoaXMgbG9va3Mgc2ltcGxlIGJ1dCBpcyByZWFsbHkgdHJpY2t5IHRvIGdldCByaWdodC4gVXNl
IGNhdXRpb24uCi0gICAgICAgIGZvciAoc2l6ZV90IGkgPSAwOyBpIDwgdGFyZ2V0T3BlcmF0aW9u
cy5zaXplKCk7ICsraSkKLSAgICAgICAgICAgIHRhcmdldE9wZXJhdGlvbnMub3BlcmF0aW9ucygp
W2ldLT5ibGVuZChzb3VyY2VPcGVyYXRpb25zLmF0KGkpLCBwcm9ncmVzcyktPmFwcGx5KHRyYW5z
Zm9ybU1hdHJpeCwgbV9ib3hTaXplKTsKLQotICAgICAgICBtX2xheWVyLmRhdGEoKS0+c2V0QmFz
ZVRyYW5zZm9ybShRVHJhbnNmb3JtKHRyYW5zZm9ybU1hdHJpeCkpOworICAgICAgICAvLyBzb21l
dGltZXMgdGhlIGFuaW1hdGlvbiB2YWx1ZXMgZnJvbSBXZWJDb3JlIGFyZSBtaXNsZWFkaW5nIGFu
ZCB3ZSBoYXZlIHRvIHVzZSB0aGUgYWN0dWFsIG1hdHJpeCBhcyBzb3VyY2UKKyAgICAgICAgLy8g
VGhlIE1hYyBpbXBsZW1lbnRhdGlvbiBzaW1wbHkgZG9lc24ndCB0cnkgdG8gYWNjZWxlcmF0ZSB0
aG9zZSAoZS5nLiAzNjBkZWcgcm90YXRpb24pLCBidXQgd2UgZG8uCisgICAgICAgIGlmIChwcm9n
cmVzcyA9PSAxIHx8ICF0YXJnZXRPcGVyYXRpb25zLnNpemUoKSB8fCBzb3VyY2VPcGVyYXRpb25z
ID09IHRhcmdldE9wZXJhdGlvbnMpIHsKKyAgICAgICAgICAgIFRyYW5zZm9ybWF0aW9uTWF0cml4
IHNvdXJjZU1hdHJpeDsKKyAgICAgICAgICAgIHNvdXJjZU9wZXJhdGlvbnMuYXBwbHkobV9ib3hT
aXplLCBzb3VyY2VNYXRyaXgpOworICAgICAgICAgICAgdHJhbnNmb3JtTWF0cml4ID0gbV9zb3Vy
Y2VNYXRyaXg7CisgICAgICAgICAgICB0cmFuc2Zvcm1NYXRyaXguYmxlbmQoc291cmNlTWF0cml4
LCAxIC0gcHJvZ3Jlc3MpOworICAgICAgICB9IGVsc2UgaWYgKHRhcmdldE9wZXJhdGlvbnMuc2l6
ZSgpICE9IHNvdXJjZU9wZXJhdGlvbnMuc2l6ZSgpKSB7CisgICAgICAgICAgICB0cmFuc2Zvcm1N
YXRyaXggPSBtX3NvdXJjZU1hdHJpeDsKKyAgICAgICAgICAgIHRhcmdldE9wZXJhdGlvbnMuYXBw
bHkobV9ib3hTaXplLCB0cmFuc2Zvcm1NYXRyaXgpOworICAgICAgICAgICAgdHJhbnNmb3JtTWF0
cml4LmJsZW5kKG1fc291cmNlTWF0cml4LCBwcm9ncmVzcyk7CisgICAgICAgIH0gZWxzZSB7Cisg
ICAgICAgICAgICBmb3IgKHNpemVfdCBpID0gMDsgaSA8IHRhcmdldE9wZXJhdGlvbnMuc2l6ZSgp
OyArK2kpCisgICAgICAgICAgICAgICAgdGFyZ2V0T3BlcmF0aW9ucy5vcGVyYXRpb25zKClbaV0t
PmJsZW5kKHNvdXJjZU9wZXJhdGlvbnMuYXQoaSksIHByb2dyZXNzKS0+YXBwbHkodHJhbnNmb3Jt
TWF0cml4LCBtX2JveFNpemUpOworICAgICAgICB9CisgICAgICAgIG1fbGF5ZXIuZGF0YSgpLT5z
ZXRCYXNlVHJhbnNmb3JtKHRyYW5zZm9ybU1hdHJpeCk7CiAgICAgfQogCiAgICAgdmlydHVhbCB2
b2lkIHVwZGF0ZVN0YXRlKFFBYnN0cmFjdEFuaW1hdGlvbjo6U3RhdGUgbmV3U3RhdGUsIFFBYnN0
cmFjdEFuaW1hdGlvbjo6U3RhdGUgb2xkU3RhdGUpCkBAIC05ODAsMTggKzEwMjIsMjAgQEAgcHVi
bGljOgogICAgICAgICAvLyB0byBpbmNyZWFzZSBGUFMsIHdlIHVzZSBhIGxlc3MgYWNjdXJhdGUg
Y2FjaGluZyBtZWNoYW5pc20gd2hpbGUgYW5pbWF0aW9uIGlzIGdvaW5nIG9uCiAgICAgICAgIC8v
IHRoaXMgaXMgYSBVWCBjaG9pY2UgdGhhdCBzaG91bGQgcHJvYmFibHkgYmUgY3VzdG9taXphYmxl
CiAgICAgICAgIGlmIChuZXdTdGF0ZSA9PSBRQWJzdHJhY3RBbmltYXRpb246OlJ1bm5pbmcpIHsK
KyAgICAgICAgICAgIG1fc291cmNlTWF0cml4ID0gbV9sYXllci5kYXRhKCktPm1fbGF5ZXItPnRy
YW5zZm9ybSgpOwogICAgICAgICAgICAgbV9sYXllci5kYXRhKCktPm1fdHJhbnNmb3JtQW5pbWF0
aW9uUnVubmluZyA9IHRydWU7Ci0gICAgICAgICAgICBpZiAobV9sYXllci5kYXRhKCktPmNhY2hl
TW9kZSgpID09IFFHcmFwaGljc0l0ZW06OkRldmljZUNvb3JkaW5hdGVDYWNoZSkKLSAgICAgICAg
ICAgICAgICBtX2xheWVyLmRhdGEoKS0+c2V0Q2FjaGVNb2RlKFFHcmFwaGljc0l0ZW06Okl0ZW1D
b29yZGluYXRlQ2FjaGUpOworICAgICAgICAgICAgbV9sYXllci5kYXRhKCktPmFkanVzdENhY2hp
bmdSZWN1cnNpdmVseSh0cnVlKTsKICAgICAgICAgfSBlbHNlIHsKICAgICAgICAgICAgIG1fbGF5
ZXIuZGF0YSgpLT5tX3RyYW5zZm9ybUFuaW1hdGlvblJ1bm5pbmcgPSBmYWxzZTsKLSAgICAgICAg
ICAgIGlmIChtX2xheWVyLmRhdGEoKS0+Y2FjaGVNb2RlKCkgPT0gUUdyYXBoaWNzSXRlbTo6SXRl
bUNvb3JkaW5hdGVDYWNoZSkKLSAgICAgICAgICAgICAgICBtX2xheWVyLmRhdGEoKS0+c2V0Q2Fj
aGVNb2RlKFFHcmFwaGljc0l0ZW06OkRldmljZUNvb3JkaW5hdGVDYWNoZSk7CisgICAgICAgICAg
ICBtX2xheWVyLmRhdGEoKS0+YWRqdXN0Q2FjaGluZ1JlY3Vyc2l2ZWx5KGZhbHNlKTsKICAgICAg
ICAgfQorCiAgICAgfQorCisgICAgVHJhbnNmb3JtYXRpb25NYXRyaXggbV9zb3VyY2VNYXRyaXg7
CiB9OwogCiBjbGFzcyBPcGFjaXR5QW5pbWF0aW9uUXQgOiBwdWJsaWMgQW5pbWF0aW9uUXQ8cXJl
YWw+IHsKIHB1YmxpYzoKICAgICBPcGFjaXR5QW5pbWF0aW9uUXQoR3JhcGhpY3NMYXllclF0SW1w
bCogbGF5ZXIsIGNvbnN0IEtleWZyYW1lVmFsdWVMaXN0JiB2YWx1ZXMsIGNvbnN0IEludFNpemUm
IGJveFNpemUsIGNvbnN0IEFuaW1hdGlvbiogYW5pbSwgY29uc3QgUVN0cmluZyAmIG5hbWUpCiAK
QEAgLTEwMDYsNiArMTA1MCw3IEBAIHB1YmxpYzoKICAgICB2aXJ0dWFsIHZvaWQgdXBkYXRlU3Rh
dGUoUUFic3RyYWN0QW5pbWF0aW9uOjpTdGF0ZSBuZXdTdGF0ZSwgUUFic3RyYWN0QW5pbWF0aW9u
OjpTdGF0ZSBvbGRTdGF0ZSkKICAgICB7CiAgICAgICAgIFFBYnN0cmFjdEFuaW1hdGlvbjo6dXBk
YXRlU3RhdGUobmV3U3RhdGUsIG9sZFN0YXRlKTsKKwogICAgICAgICBpZiAobV9sYXllcikKICAg
ICAgICAgICAgIG1fbGF5ZXIuZGF0YSgpLT5tX29wYWNpdHlBbmltYXRpb25SdW5uaW5nID0gKG5l
d1N0YXRlID09IFFBYnN0cmFjdEFuaW1hdGlvbjo6UnVubmluZyk7CiAgICAgfQpAQCAtMTA3OSwx
MSArMTEyNCwxMiBAQCB2b2lkIEdyYXBoaWNzTGF5ZXJRdDo6cmVtb3ZlQW5pbWF0aW9uc0Zvcktl
eWZyYW1lcyhjb25zdCBTdHJpbmcmIG5hbWUpCiB2b2lkIEdyYXBoaWNzTGF5ZXJRdDo6cGF1c2VB
bmltYXRpb24oY29uc3QgU3RyaW5nJiBuYW1lLCBkb3VibGUgdGltZU9mZnNldCkKIHsKICAgICBm
b3IgKFFMaXN0PFFXZWFrUG9pbnRlcjxRQWJzdHJhY3RBbmltYXRpb24+ID46Oml0ZXJhdG9yIGl0
ID0gbV9pbXBsLT5tX2FuaW1hdGlvbnMuYmVnaW4oKTsgaXQgIT0gbV9pbXBsLT5tX2FuaW1hdGlv
bnMuZW5kKCk7ICsraXQpIHsKLSAgICAgICAgaWYgKCppdCkgewotICAgICAgICAgICAgQW5pbWF0
aW9uUXRCYXNlKiBhbmltID0gc3RhdGljX2Nhc3Q8QW5pbWF0aW9uUXRCYXNlKj4oKCppdCkuZGF0
YSgpKTsKLSAgICAgICAgICAgIGlmIChhbmltICYmIGFuaW0tPm1fa2V5ZnJhbWVzTmFtZSA9PSBR
U3RyaW5nKG5hbWUpKQotICAgICAgICAgICAgICAgIFFUaW1lcjo6c2luZ2xlU2hvdCh0aW1lT2Zm
c2V0ICogMTAwMCwgYW5pbSwgU0xPVChwYXVzZSgpKSk7Ci0gICAgICAgIH0KKyAgICAgICAgaWYg
KCEoKml0KSkKKyAgICAgICAgICAgIGNvbnRpbnVlOworCisgICAgICAgIEFuaW1hdGlvblF0QmFz
ZSogYW5pbSA9IHN0YXRpY19jYXN0PEFuaW1hdGlvblF0QmFzZSo+KCgqaXQpLmRhdGEoKSk7Cisg
ICAgICAgIGlmIChhbmltICYmIGFuaW0tPm1fa2V5ZnJhbWVzTmFtZSA9PSBRU3RyaW5nKG5hbWUp
KQorICAgICAgICAgICAgUVRpbWVyOjpzaW5nbGVTaG90KHRpbWVPZmZzZXQgKiAxMDAwLCBhbmlt
LCBTTE9UKHBhdXNlKCkpKTsKICAgICB9CiB9CiAKZGlmZiAtLWdpdCBhL1dlYktpdC9xdC9BcGkv
cWdyYXBoaWNzd2Vidmlldy5jcHAgYi9XZWJLaXQvcXQvQXBpL3FncmFwaGljc3dlYnZpZXcuY3Bw
CmluZGV4IGQ5ZThhNzQuLjFhNWUwNDMgMTAwNjQ0Ci0tLSBhL1dlYktpdC9xdC9BcGkvcWdyYXBo
aWNzd2Vidmlldy5jcHAKKysrIGIvV2ViS2l0L3F0L0FwaS9xZ3JhcGhpY3N3ZWJ2aWV3LmNwcApA
QCAtMjcsNiArMjcsNyBAQAogI2luY2x1ZGUgInF3ZWJwYWdlX3AuaCIKICNpbmNsdWRlICJRV2Vi
UGFnZUNsaWVudC5oIgogI2luY2x1ZGUgPEZyYW1lVmlldy5oPgorI2luY2x1ZGUgPFF0Q29yZS9x
bWV0YW9iamVjdC5oPgogI2luY2x1ZGUgPFF0Q29yZS9xc2hhcmVkcG9pbnRlci5oPgogI2luY2x1
ZGUgPFF0Q29yZS9xdGltZXIuaD4KICNpbmNsdWRlIDxRdEd1aS9xYXBwbGljYXRpb24uaD4KQEAg
LTc4LDEzICs3OSwxNCBAQCBwdWJsaWM6CiAgICAgICAgICwgcGFnZSgwKQogI2lmIFVTRShBQ0NF
TEVSQVRFRF9DT01QT1NJVElORykKICAgICAgICAgLCByb290R3JhcGhpY3NMYXllcigwKQotICAg
ICAgICAsIHNob3VsZFN5bmModHJ1ZSkKKyAgICAgICAgLCBzaG91bGRTeW5jKGZhbHNlKQogI2Vu
ZGlmCiAgICAgewogI2lmIFVTRShBQ0NFTEVSQVRFRF9DT01QT1NJVElORykKICAgICAgICAgLy8g
dGhlIG92ZXJsYXkgYW5kIHN0YXlzIGFsaXZlIGZvciB0aGUgbGlmZXRpbWUgb2YKICAgICAgICAg
Ly8gdGhpcyBRR3JhcGhpY3NXZWJWaWV3IGFzIHRoZSBzY3JvbGxiYXJzIGFyZSBuZWVkZWQgd2hl
biB0aGVyZSdzIG5vIGNvbXBvc2l0aW5nCiAgICAgICAgIHEtPnNldEZsYWcoUUdyYXBoaWNzSXRl
bTo6SXRlbVVzZXNFeHRlbmRlZFN0eWxlT3B0aW9uKTsKKyAgICAgICAgc3luY01ldGFNZXRob2Qg
PSBxLT5tZXRhT2JqZWN0KCktPm1ldGhvZChxLT5tZXRhT2JqZWN0KCktPmluZGV4T2ZNZXRob2Qo
InN5bmNMYXllcnMoKSIpKTsKICNlbmRpZgogICAgIH0KIApAQCAtMTI5LDUgKzEzMSw4IEBAIHB1
YmxpYzoKICAgICBib29sIHNob3VsZFN5bmM7CiAKKyAgICAvLyB3ZSBoYXZlIHRvIGZsdXNoIHF1
aXRlIG9mdGVuLCBzbyB3ZSB1c2UgYSBtZXRhLW1ldGhvZCBpbnN0ZWFkIG9mIFFUaW1lcjo6c2lu
Z2xlU2hvdCBmb3IgcHV0dGluZyB0aGUgZXZlbnQgaW4gdGhlIHF1ZXVlCisgICAgUU1ldGFNZXRo
b2Qgc3luY01ldGFNZXRob2Q7CisKICAgICAvLyB3ZSBuZWVkIHRvIHB1dCB0aGUgcm9vdCBncmFw
aGljcyBsYXllciBiZWhpbmQgdGhlIG92ZXJsYXkgKHdoaWNoIGNvbnRhaW5zIHRoZSBzY3JvbGxi
YXIpCiAgICAgZW51bSB7IFJvb3RHcmFwaGljc0xheWVyWlZhbHVlLCBPdmVybGF5WlZhbHVlIH07
CiAjZW5kaWYKQEAgLTE3Niw3ICsxODEsNyBAQCB2b2lkIFFHcmFwaGljc1dlYlZpZXdQcml2YXRl
OjptYXJrRm9yU3luYyhib29sIHNjaGVkdWxlU3luYykKIHsKICAgICBzaG91bGRTeW5jID0gdHJ1
ZTsKICAgICBpZiAoc2NoZWR1bGVTeW5jKQotICAgICAgICBRVGltZXI6OnNpbmdsZVNob3QoMCwg
cSwgU0xPVChzeW5jTGF5ZXJzKCkpKTsKKyAgICAgICAgc3luY01ldGFNZXRob2QuaW52b2tlKHEs
IFF0OjpRdWV1ZWRDb25uZWN0aW9uKTsKIH0KIAogdm9pZCBRR3JhcGhpY3NXZWJWaWV3UHJpdmF0
ZTo6dXBkYXRlQ29tcG9zaXRpbmdTY3JvbGxQb3NpdGlvbigpCkBAIC0yMjIsNiArMjI3LDcgQEAg
dm9pZCBRR3JhcGhpY3NXZWJWaWV3UHJpdmF0ZTo6dXBkYXRlKGNvbnN0IFFSZWN0ICYgZGlydHlS
ZWN0KQogI2lmIFVTRShBQ0NFTEVSQVRFRF9DT01QT1NJVElORykKICAgICBpZiAob3ZlcmxheSkK
ICAgICAgICAgb3ZlcmxheS0+dXBkYXRlKFFSZWN0RihkaXJ0eVJlY3QpKTsKKyAgICBzeW5jTGF5
ZXJzKCk7CiAjZW5kaWYKIH0KIApAQCAtNDM1LDcgKzQ0MSw2IEBAIHZvaWQgUUdyYXBoaWNzV2Vi
Vmlldzo6cGFpbnQoUVBhaW50ZXIqIHBhaW50ZXIsIGNvbnN0IFFTdHlsZU9wdGlvbkdyYXBoaWNz
SXRlbSoKIHsKICNpZiBVU0UoQUNDRUxFUkFURURfQ09NUE9TSVRJTkcpCiAgICAgcGFnZSgpLT5t
YWluRnJhbWUoKS0+cmVuZGVyKHBhaW50ZXIsIGQtPm92ZXJsYXkgPyBRV2ViRnJhbWU6OkNvbnRl
bnRzTGF5ZXIgOiBRV2ViRnJhbWU6OkFsbExheWVycywgb3B0aW9uLT5leHBvc2VkUmVjdC50b0Fs
aWduZWRSZWN0KCkpOwotICAgIGQtPnN5bmNMYXllcnMoKTsKICNlbHNlCiAgICAgcGFnZSgpLT5t
YWluRnJhbWUoKS0+cmVuZGVyKHBhaW50ZXIsIFFXZWJGcmFtZTo6QWxsTGF5ZXJzLCBvcHRpb24t
PmV4cG9zZWRSZWN0LnRvUmVjdCgpKTsKICNlbmRpZgpkaWZmIC0tZ2l0IGEvV2ViS2l0L3F0L0No
YW5nZUxvZyBiL1dlYktpdC9xdC9DaGFuZ2VMb2cKaW5kZXggNmNjYTk3Yy4uNjMyOWZhYyAxMDA2
NDQKLS0tIGEvV2ViS2l0L3F0L0NoYW5nZUxvZworKysgYi9XZWJLaXQvcXQvQ2hhbmdlTG9nCkBA
IC0xLDMgKzEsMTUgQEAKKzIwMTAtMDEtMjQgIE5vJ2FtIFJvc2VudGhhbCAgPG5vYW0ucm9zZW50
aGFsQG5va2lhLmNvbT4KKworICAgICAgICBSZXZpZXdlZCBieSBOT0JPRFkgKE9PUFMhKS4KKwor
ICAgICAgICBbUXRdIFR1bmluZyBhbmQgb3B0aW1pemF0aW9ucyB0byBHcmFwaGljc0xheWVyUXQu
IE1haW5seSByZWR1Y2VkIHVzYWdlCisgICAgICAgIG9mIFFUaW1lcjo6c2luZ2xlU2hvdCwgYW5k
IG1vdmVkIHN5bmNMYXllcnMoKSBmcm9tIHBhaW50KCkgdG8gdXBkYXRlKCkKKyAgICAgICAgaHR0
cHM6Ly9idWdzLndlYmtpdC5vcmcvc2hvd19idWcuY2dpP2lkPTM0MDYyCisKKyAgICAgICAgKiBB
cGkvcWdyYXBoaWNzd2Vidmlldy5jcHA6CisgICAgICAgIChRR3JhcGhpY3NXZWJWaWV3UHJpdmF0
ZTo6dXBkYXRlKTogTW92ZWQgdGhlIHN5bmMgb3BlcmF0aW9uIHRvIHVwZGF0ZQorICAgICAgICAo
UUdyYXBoaWNzV2ViVmlldzo6cGFpbnQpOiBNb3ZlZCB0aGUgc3luYyBvcGVyYXRpb24gdG8gdXBk
YXRlCisKIDIwMTAtMDEtMjMgIEdpcmlzaCBSYW1ha3Jpc2huYW4gIDxnaXJpc2hAZm9yd2FyZGJp
YXMuaW4+CiAKICAgICAgICAgUmV2aWV3ZWQgYnkgS2VubmV0aCBSb2hkZSBDaHJpc3RpYW5zZW4u
Ci0tIAoxLjYuNi5yYzAuNjMuZzY2YWJjCgo=
</data>
<flag name="review"
          id="30589"
          type_id="1"
          status="+"
          setter="kenneth"
    />
    <flag name="commit-queue"
          id="30620"
          type_id="3"
          status="-"
          setter="commit-queue"
    />
          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>48024</attachid>
            <date>2010-02-03 07:18:12 -0800</date>
            <delta_ts>2010-02-03 13:23:51 -0800</delta_ts>
            <desc>re-applying, uploaded wrong file</desc>
            <filename>patch-34062-4.diff</filename>
            <type>text/plain</type>
            <size>24312</size>
            <attacher name="Noam Rosenthal">noam</attacher>
            
              <data encoding="base64">SW5kZXg6IFdlYkNvcmUvQ2hhbmdlTG9nCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFdlYkNvcmUvQ2hhbmdlTG9n
CShyZXZpc2lvbiA1NDI2NykKKysrIFdlYkNvcmUvQ2hhbmdlTG9nCSh3b3JraW5nIGNvcHkpCkBA
IC0xLDMgKzEsMjEgQEAKKzIwMTAtMDItMDIgIE5vJ2FtIFJvc2VudGhhbCAgPG5vYW0ucm9zZW50
aGFsQG5va2lhLmNvbT4KKworICAgICAgICBSZXZpZXdlZCBieSBOT0JPRFkgKE9PUFMhKS4KKwor
ICAgICAgICBbUXRdIFR1bmluZyBhbmQgb3B0aW1pemF0aW9ucyB0byBHcmFwaGljc0xheWVyUXQu
IFJlZHVjZSB1bm5lY2Vzc2FyeQorICAgICAgICByZWNhY2hpbmcsIHJlbW92ZSBRVGltZXI6OnNp
bmdsZVNob3QgYW5kIFFQaXhtYXA6OnNjYWxlZCwgbW9yZQorICAgICAgICBhY2N1cmF0ZSBzdHJh
dGVneSBvZiBoYW5kbGluZyB0cmFuc2Zvcm0gb3BlcmF0aW9uIGJsZW5kcy4gUm90YXRpbmcgYQor
ICAgICAgICBib3JkZXJlZC10YWJsZSwgZm9yIGV4YW1wbGUsIG5vdyBydW5zIGF0IDUwRlBTIGlu
c3RlYWQgb2YgNDBGUFMgb24gTWFlbW81LgorCisgICAgICAgIGh0dHBzOi8vYnVncy53ZWJraXQu
b3JnL3Nob3dfYnVnLmNnaT9pZD0zNDA2MgorCisgICAgICAgIFRoaXMgaXMgdGVzdGVkIGJ5IGh0
dHBzOi8vYnVncy53ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9pZD0zNDQ1MCwgZnBzIG1lYXN1cmVt
ZW50cy4KKworICAgICAgICAqIHBsYXRmb3JtL2dyYXBoaWNzL3F0L0dyYXBoaWNzTGF5ZXJRdC5j
cHA6CisgICAgICAgIChXZWJDb3JlOjpHcmFwaGljc0xheWVyUXRJbXBsOjpmbHVzaENoYW5nZXMp
OiBGaW5lLXR1bmUgY2FjaGluZworICAgICAgICAoV2ViQ29yZTo6VHJhbnNmb3JtQW5pbWF0aW9u
UXQ6OlRyYW5zZm9ybUFuaW1hdGlvblF0KTogdHJhbnNmb3JtIGJ1Z3MKKyAgICAgICAgKFdlYkNv
cmU6Ok9wYWNpdHlBbmltYXRpb25RdDo6dXBkYXRlU3RhdGUpOiBzdHlsZSBjaGFuZ2UKKwogMjAx
MC0wMi0wMiAgRnVtaXRvc2hpIFVrYWkgIDx1a2FpQGNocm9taXVtLm9yZz4KIAogICAgICAgICBS
ZXZpZXdlZCBieSBBbGV4ZXkgUHJvc2t1cnlha292LgpJbmRleDogV2ViQ29yZS9wbGF0Zm9ybS9n
cmFwaGljcy9xdC9HcmFwaGljc0xheWVyUXQuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFdlYkNvcmUvcGxh
dGZvcm0vZ3JhcGhpY3MvcXQvR3JhcGhpY3NMYXllclF0LmNwcAkocmV2aXNpb24gNTQyNTApCisr
KyBXZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL3F0L0dyYXBoaWNzTGF5ZXJRdC5jcHAJKHdvcmtp
bmcgY29weSkKQEAgLTk5LDE0ICs5OSwyNiBAQCBwdWJsaWM6CiAgICAgLy8gb3IgQ2hyb21lQ2xp
ZW50UXQ6OnNjaGVkdWxlQ29tcG9zaXRpbmdMYXllclN5bmMgKG1lYW5pbmcgdGhlIHN5bmMgd2ls
bCBoYXBwZW4gQVNBUCkKICAgICB2b2lkIGZsdXNoQ2hhbmdlcyhib29sIHJlY3Vyc2l2ZSA9IHRy
dWUpOwogCisgICAgLy8gb3B0aW1pemF0aW9uOiB3aGVuIHdlIGhhdmUgYW4gYW5pbWF0aW9uIHJ1
bm5pbmcgb24gYW4gZWxlbWVudCB3aXRoIG5vIGNvbnRlbnRzLCB0aGF0IGhhcyBjaGlsZC1lbGVt
ZW50cyB3aXRoIGNvbnRlbnRzLAorICAgIC8vIEFMTCBvZiB0aGVtIGhhdmUgdG8gaGF2ZSBJdGVt
Q29vcmRpbmF0ZUNhY2hlIGFuZCBub3QgRGV2aWNlQ29vcmRpbmF0ZUNhY2hlCisgICAgdm9pZCBh
ZGp1c3RDYWNoaW5nUmVjdXJzaXZlbHkoYm9vbCBhbmltYXRpb25Jc1J1bm5pbmcpOworCisgICAg
Ly8gb3B0aW1pemF0aW9uOiByZXR1cm5zIHRydWUgaWYgdGhpcyBvciBhbiBhbmNlc3RvciBoYXMg
YSB0cmFuc2Zvcm0gYW5pbWF0aW9uIHJ1bm5pbmcuCisgICAgLy8gdGhpcyBlbmFibGVzIHVzIHRv
IHVzZSBJdGVtQ29vcmRpbmF0ZXNDYWNoZSB3aGlsZSB0aGUgYW5pbWF0aW9uIGlzIHJ1bm5pbmcs
IG90aGVyd2lzZSB3ZSBoYXZlIHRvIHJlY2FjaGUgZm9yIGV2ZXJ5IGZyYW1lCisgICAgYm9vbCBp
c1RyYW5zZm9ybUFuaW1hdGlvblJ1bm5pbmcoKSBjb25zdDsKKwogcHVibGljIHNsb3RzOgogICAg
IC8vIHdlIG5lZWQgdG8gbm90aWZ5IHRoZSBjbGllbnQgKGFrYSB0aGUgbGF5ZXIgY29tcG9zaXRv
cikgd2hlbiB0aGUgYW5pbWF0aW9uIGFjdHVhbGx5IHN0YXJ0cwogICAgIHZvaWQgbm90aWZ5QW5p
bWF0aW9uU3RhcnRlZCgpOwogCitzaWduYWxzOgorICAgIC8vIG9wdGltaXphdGlvbjogd2UgZG9u
J3Qgd2FudCB0byB1c2UgUVRpbWVyOjpzaW5nbGVTaG90CisgICAgdm9pZCBub3RpZnlBbmltYXRp
b25TdGFydGVkQXN5bmMoKTsKKwogcHVibGljOgogICAgIEdyYXBoaWNzTGF5ZXJRdCogbV9sYXll
cjsKIAotICAgIFFUcmFuc2Zvcm0gbV9iYXNlVHJhbnNmb207CisgICAgUVRyYW5zZm9ybSBtX2Jh
c2VUcmFuc2Zvcm07CiAgICAgYm9vbCBtX3RyYW5zZm9ybUFuaW1hdGlvblJ1bm5pbmc7CiAgICAg
Ym9vbCBtX29wYWNpdHlBbmltYXRpb25SdW5uaW5nOwogCkBAIC0xNTcsMTIgKzE2OSwxNCBAQCBw
dWJsaWM6CiAgICAgICAgIGJvb2wgYmFja2ZhY2VWaXNpYmlsaXR5OiAxOwogICAgICAgICBib29s
IGRpc3RyaWJ1dGVPcGFjaXR5OiAxOwogICAgICAgICBib29sIGFsaWduOiAyOwotICAgICAgICBT
dGF0ZSgpOiBtYXNrTGF5ZXIoMCksIG9wYWNpdHkoMSksIHByZXNlcnZlczNEKGZhbHNlKSwgbWFz
a3NUb0JvdW5kcyhmYWxzZSksCisgICAgICAgIFN0YXRlKCk6IG1hc2tMYXllcigwKSwgb3BhY2l0
eSgxLmYpLCBwcmVzZXJ2ZXMzRChmYWxzZSksIG1hc2tzVG9Cb3VuZHMoZmFsc2UpLAogICAgICAg
ICAgICAgICAgICAgZHJhd3NDb250ZW50KGZhbHNlKSwgY29udGVudHNPcGFxdWUoZmFsc2UpLCBi
YWNrZmFjZVZpc2liaWxpdHkoZmFsc2UpLAogICAgICAgICAgICAgICAgICAgZGlzdHJpYnV0ZU9w
YWNpdHkoZmFsc2UpCiAgICAgICAgIHsKICAgICAgICAgfQogICAgIH0gbV9zdGF0ZTsKKworICAg
IGZyaWVuZCBjbGFzcyBBbmltYXRpb25RdEJhc2U7CiB9OwogCiBHcmFwaGljc0xheWVyUXRJbXBs
OjpHcmFwaGljc0xheWVyUXRJbXBsKEdyYXBoaWNzTGF5ZXJRdCogbmV3TGF5ZXIpCkBAIC0xNzEs
MTYgKzE4NSwxNCBAQCBHcmFwaGljc0xheWVyUXRJbXBsOjpHcmFwaGljc0xheWVyUXRJbXBsCiAg
ICAgLCBtX3RyYW5zZm9ybUFuaW1hdGlvblJ1bm5pbmcoZmFsc2UpCiAgICAgLCBtX2NoYW5nZU1h
c2soTm9DaGFuZ2VzKQogewotICAgIC8vIGJldHRlciB0byBjYWxjdWxhdGUgdGhlIGV4cG9zZWQg
cmVjdCBpbiBRR3JhcGhpY3NWaWV3IHRoYW4gb3Zlci1yZW5kZXIgaW4gV2ViQ29yZQotICAgIC8v
IEZJWE1FOiB0ZXN0IGRpZmZlcmVudCBhcHByb2FjaGVzCi0gICAgc2V0RmxhZyhRR3JhcGhpY3NJ
dGVtOjpJdGVtVXNlc0V4dGVuZGVkU3R5bGVPcHRpb24sIHRydWUpOwotCiAgICAgLy8gd2UgdXNl
IGdyYXBoaWNzLXZpZXcgZm9yIGNvbXBvc2l0aW5nLCBub3QgZm9yIGludGVyYWN0aXZpdHkKICAg
ICBzZXRBY2NlcHRlZE1vdXNlQnV0dG9ucyhRdDo6Tm9CdXR0b24pOwogICAgIHNldEVuYWJsZWQo
ZmFsc2UpOwogCiAgICAgLy8gd2UnbGwgc2V0IHRoZSBjYWNoZSB3aGVuIHdlIGtub3cgd2hhdCdz
IGdvaW5nIG9uCiAgICAgc2V0Q2FjaGVNb2RlKE5vQ2FjaGUpOworCisgICAgY29ubmVjdCh0aGlz
LCBTSUdOQUwobm90aWZ5QW5pbWF0aW9uU3RhcnRlZEFzeW5jKCkpLCB0aGlzLCBTTE9UKG5vdGlm
eUFuaW1hdGlvblN0YXJ0ZWQoKSksIFF0OjpRdWV1ZWRDb25uZWN0aW9uKTsKIH0KIAogR3JhcGhp
Y3NMYXllclF0SW1wbDo6fkdyYXBoaWNzTGF5ZXJRdEltcGwoKQpAQCAtMjAzLDIyICsyMTUsNDIg
QEAgR3JhcGhpY3NMYXllclF0SW1wbDo6fkdyYXBoaWNzTGF5ZXJRdEltcAogICAgICAgICAgICAg
ZGVsZXRlIGFuaW07CiB9CiAKK3ZvaWQgR3JhcGhpY3NMYXllclF0SW1wbDo6YWRqdXN0Q2FjaGlu
Z1JlY3Vyc2l2ZWx5KGJvb2wgYW5pbWF0aW9uSXNSdW5uaW5nKQoreworICAgIC8vIG9wdGltaXph
dGlvbjogd2UgbWFrZSBzdXJlIGFsbCBvdXIgY2hpbGRyZW4gaGF2ZSBJdGVtQ29vcmRpbmF0ZUNh
Y2hlIC0KKyAgICAvLyBvdGhlcndpc2Ugd2UgZW5kIHVwIHJlLXJlbmRlcmluZyB0aGVtIGR1cmlu
ZyB0aGUgYW5pbWF0aW9uCisgICAgY29uc3QgUUxpc3Q8UUdyYXBoaWNzSXRlbSo+IGNoaWxkcmVu
ID0gY2hpbGRJdGVtcygpOworCisgICAgZm9yIChRTGlzdDxRR3JhcGhpY3NJdGVtKj46OmNvbnN0
X2l0ZXJhdG9yIGl0ID0gY2hpbGRyZW4uYmVnaW4oKTsgaXQgIT0gY2hpbGRyZW4uZW5kKCk7ICsr
aXQpIHsKKyAgICAgICAgaWYgKFFHcmFwaGljc0l0ZW0qIGl0ZW0gPSAqaXQpCisgICAgICAgICAg
ICBpZiAoR3JhcGhpY3NMYXllclF0SW1wbCogbGF5ZXIgPSBxb2JqZWN0X2Nhc3Q8R3JhcGhpY3NM
YXllclF0SW1wbCo+KGl0ZW0tPnRvR3JhcGhpY3NPYmplY3QoKSkpIHsKKyAgICAgICAgICAgICAg
ICBpZiAobGF5ZXItPm1fbGF5ZXItPmRyYXdzQ29udGVudCgpICYmIGxheWVyLT5tX2N1cnJlbnRD
b250ZW50LmNvbnRlbnRUeXBlID09IEhUTUxDb250ZW50VHlwZSkKKyAgICAgICAgICAgICAgICAg
ICAgbGF5ZXItPnNldENhY2hlTW9kZShhbmltYXRpb25Jc1J1bm5pbmcgPyBRR3JhcGhpY3NJdGVt
OjpJdGVtQ29vcmRpbmF0ZUNhY2hlIDogUUdyYXBoaWNzSXRlbTo6RGV2aWNlQ29vcmRpbmF0ZUNh
Y2hlKTsKKyAgICAgICAgICAgIH0KKyAgICB9ICAgIAorfQorCiB2b2lkIEdyYXBoaWNzTGF5ZXJR
dEltcGw6OnNldEJhc2VUcmFuc2Zvcm0oY29uc3QgUVRyYW5zZm9ybSYgdHJhbnNmb3JtKQogewog
ICAgIGlmICghbV9sYXllcikKICAgICAgICAgcmV0dXJuOwotICAgIC8vIHdlYmtpdCBoYXMgcmVs
YXRpdmUtdG8tc2l6ZSBvcmlnaW5Qb2ludCwgZ3JhcGhpY3MtdmlldyBoYXMgYSBwaXhlbCBvcmln
aW5Qb2ludAotICAgIC8vIGhlcmUgd2UgY29udmVydAotICAgIFFQb2ludEYgb3JpZ2luVHJhbnNs
YXRlKAotICAgICAgICAgICAgbV9sYXllci0+YW5jaG9yUG9pbnQoKS54KCkgKiBtX2xheWVyLT5z
aXplKCkud2lkdGgoKSwgbV9sYXllci0+YW5jaG9yUG9pbnQoKS55KCkgKiBtX2xheWVyLT5zaXpl
KCkuaGVpZ2h0KCkpOwotCi0gICAgcmVzZXRUcmFuc2Zvcm0oKTsKLQotICAgIC8vIHdlIGhhdmUg
dG8gbWFuYWdlIHRoaXMgb3Vyc2VsdmVzIGJlY2F1c2UgUUdyYXBoaWNzVmlldydzIHRyYW5zZm9y
bU9yaWdpbiBpcyBpbmNvbXBsZXRlCi0gICAgdHJhbnNsYXRlKG9yaWdpblRyYW5zbGF0ZS54KCks
IG9yaWdpblRyYW5zbGF0ZS55KCkpOworICAgIC8vIHdlYmtpdCBoYXMgcmVsYXRpdmUtdG8tc2l6
ZSBvcmlnaW5Qb2ludCwgZ3JhcGhpY3MtdmlldyBoYXMgYSBwaXhlbCBvcmlnaW5Qb2ludCwgaGVy
ZSB3ZSBjb252ZXJ0CisgICAgLy8gd2UgaGF2ZSB0byBtYW5hZ2UgdGhpcyBvdXJzZWx2ZXMgYmVj
YXVzZSBRR3JhcGhpY3NWaWV3J3MgdHJhbnNmb3JtT3JpZ2luIGlzIGluY29tcGF0aWJsZQorICAg
IGNvbnN0IHFyZWFsIHggPSBtX2xheWVyLT5hbmNob3JQb2ludCgpLngoKSAqIG1fbGF5ZXItPnNp
emUoKS53aWR0aCgpOworICAgIGNvbnN0IHFyZWFsIHkgPSBtX2xheWVyLT5hbmNob3JQb2ludCgp
LnkoKSAqIG1fbGF5ZXItPnNpemUoKS5oZWlnaHQoKTsKKyAgICBzZXRUcmFuc2Zvcm0oUVRyYW5z
Zm9ybTo6ZnJvbVRyYW5zbGF0ZSh4LCB5KSk7CiAgICAgc2V0VHJhbnNmb3JtKHRyYW5zZm9ybSwg
dHJ1ZSk7Ci0gICAgdHJhbnNsYXRlKC1vcmlnaW5UcmFuc2xhdGUueCgpLCAtb3JpZ2luVHJhbnNs
YXRlLnkoKSk7Ci0gICAgbV9iYXNlVHJhbnNmb20gPSB0cmFuc2Zvcm07CisgICAgdHJhbnNsYXRl
KC14LCAteSk7CisgICAgbV9iYXNlVHJhbnNmb3JtID0gdHJhbnNmb3JtOworfQorCitib29sIEdy
YXBoaWNzTGF5ZXJRdEltcGw6OmlzVHJhbnNmb3JtQW5pbWF0aW9uUnVubmluZygpIGNvbnN0Cit7
CisgICAgaWYgKG1fdHJhbnNmb3JtQW5pbWF0aW9uUnVubmluZykKKyAgICAgICAgcmV0dXJuIHRy
dWU7CisgICAgaWYgKEdyYXBoaWNzTGF5ZXJRdEltcGwqIHBhcmVudCA9IHFvYmplY3RfY2FzdDxH
cmFwaGljc0xheWVyUXRJbXBsKj4ocGFyZW50T2JqZWN0KCkpKQorICAgICAgICByZXR1cm4gcGFy
ZW50LT5pc1RyYW5zZm9ybUFuaW1hdGlvblJ1bm5pbmcoKTsKKyAgICByZXR1cm4gZmFsc2U7CiB9
CiAKIFFQYWludGVyUGF0aCBHcmFwaGljc0xheWVyUXRJbXBsOjpvcGFxdWVBcmVhKCkgY29uc3QK
QEAgLTI3MCw0MiArMzAyLDMxIEBAIHZvaWQgR3JhcGhpY3NMYXllclF0SW1wbDo6cGFpbnQoUVBh
aW50ZXIKICAgICBkcmF3Q29udGVudHMocGFpbnRlciwgb3B0aW9uLT5leHBvc2VkUmVjdCk7CiB9
CiAKLXZvaWQgR3JhcGhpY3NMYXllclF0SW1wbDo6ZHJhd0NvbnRlbnRzKFFQYWludGVyKiBwYWlu
dGVyLCBjb25zdCBRUmVjdEYmIHIsIGJvb2wgbWFzaykKK3ZvaWQgR3JhcGhpY3NMYXllclF0SW1w
bDo6ZHJhd0NvbnRlbnRzKFFQYWludGVyKiBwYWludGVyLCBjb25zdCBRUmVjdEYmIGV4cG9zZWRS
ZWN0LCBib29sIG1hc2spCiB7Ci0gICAgUVJlY3QgcmVjdCA9IHIudG9BbGlnbmVkUmVjdCgpOwot
ICAgIAotICAgIGlmIChtX2N1cnJlbnRDb250ZW50LmNvbnRlbnRUeXBlICE9IEhUTUxDb250ZW50
VHlwZSAmJiAhbV9zdGF0ZS5jb250ZW50c1JlY3QuaXNFbXB0eSgpKQotICAgICAgICByZWN0ID0g
cmVjdC5pbnRlcnNlY3RlZChtX3N0YXRlLmNvbnRlbnRzUmVjdCk7Ci0KICAgICBpZiAobV9jdXJy
ZW50Q29udGVudC5iYWNrZ3JvdW5kQ29sb3IuaXNWYWxpZCgpKQotICAgICAgICBwYWludGVyLT5m
aWxsUmVjdChyLCBRQ29sb3IobV9jdXJyZW50Q29udGVudC5iYWNrZ3JvdW5kQ29sb3IpKTsKKyAg
ICAgICAgcGFpbnRlci0+ZmlsbFJlY3QoZXhwb3NlZFJlY3QsIFFDb2xvcihtX2N1cnJlbnRDb250
ZW50LmJhY2tncm91bmRDb2xvcikpOwogCi0gICAgaWYgKCFyZWN0LmlzRW1wdHkoKSkgewotICAg
ICAgICBzd2l0Y2ggKG1fY3VycmVudENvbnRlbnQuY29udGVudFR5cGUpIHsKLSAgICAgICAgY2Fz
ZSBQaXhtYXBDb250ZW50VHlwZToKLSAgICAgICAgICAgIC8vIHdlIGhhdmUgdG8gc2NhbGUgdGhl
IGltYWdlIHRvIHRoZSBjb250ZW50c1JlY3QKLSAgICAgICAgICAgIC8vIEZJWE1FOiBhIGJldHRl
ciB3YXkgd291bGQgcHJvYmFibHkgYmUgZHJhd1BpeG1hcCB3aXRoIGEgc3JjL3RhcmdldCByZWN0
Ci0gICAgICAgICAgICBwYWludGVyLT5kcmF3UGl4bWFwKHJlY3QudG9wTGVmdCgpLCBtX2N1cnJl
bnRDb250ZW50LnBpeG1hcC5zY2FsZWQobV9zdGF0ZS5jb250ZW50c1JlY3Quc2l6ZSgpKSwgcik7
Ci0gICAgICAgICAgICBicmVhazsKLSAgICAgICAgY2FzZSBDb2xvckNvbnRlbnRUeXBlOgotICAg
ICAgICAgICAgcGFpbnRlci0+ZmlsbFJlY3QocmVjdCwgbV9jdXJyZW50Q29udGVudC5jb250ZW50
c0JhY2tncm91bmRDb2xvcik7Ci0gICAgICAgICAgICBicmVhazsKLSAgICAgICAgZGVmYXVsdDoK
LSAgICAgICAgICAgIGlmIChtX3N0YXRlLmRyYXdzQ29udGVudCkgewotICAgICAgICAgICAgICAg
IC8vIHRoaXMgaXMgdGhlICJleHBlbnNpdmUiIGJpdC4gd2UgdHJ5IHRvIG1pbmltaXplIGNhbGxz
IHRvIHRoaXMKLSAgICAgICAgICAgICAgICAvLyBuZWNrIG9mIHRoZSB3b29kcyBieSBwcm9wZXIg
Y2FjaGluZwotICAgICAgICAgICAgICAgIEdyYXBoaWNzQ29udGV4dCBnYyhwYWludGVyKTsKLSAg
ICAgICAgICAgICAgICBtX2xheWVyLT5wYWludEdyYXBoaWNzTGF5ZXJDb250ZW50cyhnYywgcmVj
dCk7Ci0gICAgICAgICAgICB9Ci0gICAgICAgICAgICBicmVhazsKKyAgICBzd2l0Y2ggKG1fY3Vy
cmVudENvbnRlbnQuY29udGVudFR5cGUpIHsKKyAgICBjYXNlIFBpeG1hcENvbnRlbnRUeXBlOgor
ICAgICAgICBwYWludGVyLT5kcmF3UGl4bWFwKG1fc3RhdGUuY29udGVudHNSZWN0LCBtX2N1cnJl
bnRDb250ZW50LnBpeG1hcCk7CisgICAgICAgIGJyZWFrOworICAgIGNhc2UgQ29sb3JDb250ZW50
VHlwZToKKyAgICAgICAgcGFpbnRlci0+ZmlsbFJlY3QobV9zdGF0ZS5jb250ZW50c1JlY3QsIG1f
Y3VycmVudENvbnRlbnQuY29udGVudHNCYWNrZ3JvdW5kQ29sb3IpOworICAgICAgICBicmVhazsK
KyAgICBkZWZhdWx0OgorICAgICAgICBpZiAobV9zdGF0ZS5kcmF3c0NvbnRlbnQpIHsKKyAgICAg
ICAgICAgIC8vIHRoaXMgaXMgdGhlICJleHBlbnNpdmUiIGJpdC4gd2UgdHJ5IHRvIG1pbmltaXpl
IGNhbGxzIHRvIHRoaXMgbmVjayBvZiB0aGUgd29vZHMgYnkgcHJvcGVyIGNhY2hpbmcKKyAgICAg
ICAgICAgIEdyYXBoaWNzQ29udGV4dCBnYyhwYWludGVyKTsKKyAgICAgICAgICAgIG1fbGF5ZXIt
PnBhaW50R3JhcGhpY3NMYXllckNvbnRlbnRzKGdjLCBleHBvc2VkUmVjdC50b0FsaWduZWRSZWN0
KCkpOwogICAgICAgICB9CisgICAgICAgIGJyZWFrOwogICAgIH0KIH0KIAogdm9pZCBHcmFwaGlj
c0xheWVyUXRJbXBsOjpub3RpZnlDaGFuZ2UoQ2hhbmdlTWFzayBjaGFuZ2VNYXNrKQogewotICAg
IGlmICghdGhpcykKLSAgICAgICAgcmV0dXJuOworICAgIFFfQVNTRVJUKHRoaXMpOwogCiAgICAg
bV9jaGFuZ2VNYXNrIHw9IGNoYW5nZU1hc2s7CiAKQEAgLTM0MiwxNCArMzYzLDE0IEBAIHZvaWQg
R3JhcGhpY3NMYXllclF0SW1wbDo6Zmx1c2hDaGFuZ2VzKGIKICAgICAgICAgY29uc3QgUVNldDxR
R3JhcGhpY3NJdGVtKj4gY3VycmVudENoaWxkcmVuID0gY2hpbGRJdGVtcygpLnRvU2V0KCk7CiAg
ICAgICAgIGNvbnN0IFFTZXQ8UUdyYXBoaWNzSXRlbSo+IGNoaWxkcmVuVG9BZGQgPSBuZXdDaGls
ZHJlbiAtIGN1cnJlbnRDaGlsZHJlbjsKICAgICAgICAgY29uc3QgUVNldDxRR3JhcGhpY3NJdGVt
Kj4gY2hpbGRyZW5Ub1JlbW92ZSA9IGN1cnJlbnRDaGlsZHJlbiAtIG5ld0NoaWxkcmVuOwotICAg
ICAgICBmb3IgKFFTZXQ8UUdyYXBoaWNzSXRlbSo+Ojpjb25zdF9pdGVyYXRvciBpdCA9IGNoaWxk
cmVuVG9BZGQuYmVnaW4oKTsgaXQgIT0gY2hpbGRyZW5Ub0FkZC5lbmQoKTsgKytpdCkgeworCisg
ICAgICAgIGZvciAoUVNldDxRR3JhcGhpY3NJdGVtKj46OmNvbnN0X2l0ZXJhdG9yIGl0ID0gY2hp
bGRyZW5Ub0FkZC5iZWdpbigpOyBpdCAhPSBjaGlsZHJlblRvQWRkLmVuZCgpOyArK2l0KQogICAg
ICAgICAgICAgIGlmIChRR3JhcGhpY3NJdGVtKiB3ID0gKml0KQogICAgICAgICAgICAgICAgIHct
PnNldFBhcmVudEl0ZW0odGhpcyk7Ci0gICAgICAgIH0KLSAgICAgICAgZm9yIChRU2V0PFFHcmFw
aGljc0l0ZW0qPjo6Y29uc3RfaXRlcmF0b3IgaXQgPSBjaGlsZHJlblRvUmVtb3ZlLmJlZ2luKCk7
IGl0ICE9IGNoaWxkcmVuVG9SZW1vdmUuZW5kKCk7ICsraXQpIHsKKworICAgICAgICBmb3IgKFFT
ZXQ8UUdyYXBoaWNzSXRlbSo+Ojpjb25zdF9pdGVyYXRvciBpdCA9IGNoaWxkcmVuVG9SZW1vdmUu
YmVnaW4oKTsgaXQgIT0gY2hpbGRyZW5Ub1JlbW92ZS5lbmQoKTsgKytpdCkKICAgICAgICAgICAg
ICBpZiAoUUdyYXBoaWNzSXRlbSogdyA9ICppdCkKICAgICAgICAgICAgICAgICB3LT5zZXRQYXJl
bnRJdGVtKDApOwotICAgICAgICB9CiAKICAgICAgICAgLy8gY2hpbGRyZW4gYXJlIG9yZGVyZWQg
Ynkgei12YWx1ZSwgbGV0IGdyYXBoaWNzLXZpZXcga25vdy4KICAgICAgICAgZm9yIChzaXplX3Qg
aSA9IDA7IGkgPCBuZXdDaGlsZHJlblZlY3Rvci5zaXplKCk7ICsraSkKQEAgLTM4MywxNyArNDA0
LDE3IEBAIHZvaWQgR3JhcGhpY3NMYXllclF0SW1wbDo6Zmx1c2hDaGFuZ2VzKGIKICAgICAgICAg
Ly8gdGhlIGFuY2hvci1wb2ludCwgdHJhbnNmb3JtIGFuZCBzaXplIGZyb20gV2ViQ29yZSBhbGwg
YWZmZWN0IHRoZSBvbmUKICAgICAgICAgLy8gdGhhdCB3ZSBnaXZlIFF0CiAgICAgICAgIGlmICht
X3N0YXRlLnRyYW5zZm9ybSAhPSBtX2xheWVyLT50cmFuc2Zvcm0oKSB8fCBtX3N0YXRlLmFuY2hv
clBvaW50ICE9IG1fbGF5ZXItPmFuY2hvclBvaW50KCkgfHwgbV9zdGF0ZS5zaXplICE9IG1fbGF5
ZXItPnNpemUoKSkKLSAgICAgICAgICAgIHNldEJhc2VUcmFuc2Zvcm0oUVRyYW5zZm9ybShtX2xh
eWVyLT50cmFuc2Zvcm0oKSkpOworICAgICAgICAgICAgc2V0QmFzZVRyYW5zZm9ybShtX2xheWVy
LT50cmFuc2Zvcm0oKSk7CiAgICAgfQogCiAgICAgaWYgKG1fY2hhbmdlTWFzayAmIChDb250ZW50
Q2hhbmdlIHwgRHJhd3NDb250ZW50Q2hhbmdlKSkgewogICAgICAgICBzd2l0Y2ggKG1fcGVuZGlu
Z0NvbnRlbnQuY29udGVudFR5cGUpIHsKICAgICAgICAgY2FzZSBQaXhtYXBDb250ZW50VHlwZToK
LSAgICAgICAgICAgIC8vIHdlIG5lZWQgY2FjaGUgZXZlbiBmb3IgaW1hZ2VzLCBiZWNhdXNlIHRo
ZXkgbmVlZCB0byBiZSByZXNpemVkCi0gICAgICAgICAgICAvLyB0byB0aGUgY29udGVudHMgcmVj
dC4gbWF5YmUgdGhpcyBjYW4gYmUgb3B0aW1pemVkIHRob3VnaAotICAgICAgICAgICAgc2V0Q2Fj
aGVNb2RlKG1fdHJhbnNmb3JtQW5pbWF0aW9uUnVubmluZyA/IEl0ZW1Db29yZGluYXRlQ2FjaGUg
OiBEZXZpY2VDb29yZGluYXRlQ2FjaGUpOwogICAgICAgICAgICAgdXBkYXRlKCk7CiAgICAgICAg
ICAgICBzZXRGbGFnKEl0ZW1IYXNOb0NvbnRlbnRzLCBmYWxzZSk7CisKKyAgICAgICAgICAgIC8v
IHdlIG9ubHkgdXNlIEl0ZW1Vc2VzRXh0ZW5kZWRTdHlsZU9wdGlvbiBmb3IgSFRNTCBjb250ZW50
IC0gcGl4bWFwIGNhbiBiZSBoYW5kbGVkIGJldHRlciB3aXRoIHJlZ3VsYXIgY2xpcHBpbmcKKyAg
ICAgICAgICAgIHNldEZsYWcoUUdyYXBoaWNzSXRlbTo6SXRlbVVzZXNFeHRlbmRlZFN0eWxlT3B0
aW9uLCBmYWxzZSk7CiAgICAgICAgICAgICBicmVhazsKIAogICAgICAgICBjYXNlIENvbG9yQ29u
dGVudFR5cGU6CkBAIC00MDMsNiArNDI0LDkgQEAgdm9pZCBHcmFwaGljc0xheWVyUXRJbXBsOjpm
bHVzaENoYW5nZXMoYgogICAgICAgICAgICAgICAgIHVwZGF0ZSgpOwogICAgICAgICAgICAgbV9z
dGF0ZS5kcmF3c0NvbnRlbnQgPSBmYWxzZTsKICAgICAgICAgICAgIHNldEZsYWcoSXRlbUhhc05v
Q29udGVudHMsIGZhbHNlKTsKKworICAgICAgICAgICAgLy8gd2Ugb25seSB1c2UgSXRlbVVzZXNF
eHRlbmRlZFN0eWxlT3B0aW9uIGZvciBIVE1MIGNvbnRlbnQgLSBjb2xvcnMgZG9uJ3QgZ2FpbiBt
dWNoIGZyb20gdGhhdCBhbnl3YXkKKyAgICAgICAgICAgIHNldEZsYWcoUUdyYXBoaWNzSXRlbTo6
SXRlbVVzZXNFeHRlbmRlZFN0eWxlT3B0aW9uLCBmYWxzZSk7CiAgICAgICAgICAgICBicmVhazsK
IAogICAgICAgICBjYXNlIEhUTUxDb250ZW50VHlwZToKQEAgLTQxMCw4ICs0MzQsMTYgQEAgdm9p
ZCBHcmFwaGljc0xheWVyUXRJbXBsOjpmbHVzaENoYW5nZXMoYgogICAgICAgICAgICAgICAgIHVw
ZGF0ZSgpOwogICAgICAgICAgICAgaWYgKCFtX3N0YXRlLmRyYXdzQ29udGVudCAmJiBtX2xheWVy
LT5kcmF3c0NvbnRlbnQoKSkKICAgICAgICAgICAgICAgICB1cGRhdGUoKTsKLSAgICAgICAgICAg
IGlmIChtX2xheWVyLT5kcmF3c0NvbnRlbnQoKSkKLSAgICAgICAgICAgICAgICBzZXRDYWNoZU1v
ZGUobV90cmFuc2Zvcm1BbmltYXRpb25SdW5uaW5nID8gSXRlbUNvb3JkaW5hdGVDYWNoZSA6IERl
dmljZUNvb3JkaW5hdGVDYWNoZSk7CisgICAgICAgICAgICAgICAgaWYgKG1fbGF5ZXItPmRyYXdz
Q29udGVudCgpKSB7CisgICAgICAgICAgICAgICAgICAgIGNvbnN0IFFHcmFwaGljc0l0ZW06OkNh
Y2hlTW9kZSBtZXdDYWNoZU1vZGUgPSBpc1RyYW5zZm9ybUFuaW1hdGlvblJ1bm5pbmcoKSA/IEl0
ZW1Db29yZGluYXRlQ2FjaGUgOiBEZXZpY2VDb29yZGluYXRlQ2FjaGU7CisKKyAgICAgICAgICAg
ICAgICAgICAgLy8gb3B0aW1pemF0aW9uOiBRR3JhcGhpY3NJdGVtIGRvZXNuJ3QgYWx3YXlzIHBl
cmZvcm0gdGhpcyB0ZXN0CisgICAgICAgICAgICAgICAgICAgIGlmIChtZXdDYWNoZU1vZGUgIT0g
Y2FjaGVNb2RlKCkpCisgICAgICAgICAgICAgICAgICAgICAgICBzZXRDYWNoZU1vZGUobWV3Q2Fj
aGVNb2RlKTsKKworICAgICAgICAgICAgICAgICAgICAvLyBIVE1MIGNvbnRlbnQ6IHdlIHdhbnQg
dG8gdXNlIGV4cG9zZWRSZWN0IHNvIHdlIGRvbid0IHVzZSBXZWJDb3JlIHJlbmRlcmluZyBpZiB3
ZSBkb24ndCBoYXZlIHRvCisgICAgICAgICAgICAgICAgICAgIHNldEZsYWcoUUdyYXBoaWNzSXRl
bTo6SXRlbVVzZXNFeHRlbmRlZFN0eWxlT3B0aW9uLCB0cnVlKTsKKyAgICAgICAgICAgICAgICB9
CiAgICAgICAgICAgICBlbHNlCiAgICAgICAgICAgICAgICAgc2V0Q2FjaGVNb2RlKE5vQ2FjaGUp
OwogCkBAIC00NDgsNyArNDgwLDcgQEAgdm9pZCBHcmFwaGljc0xheWVyUXRJbXBsOjpmbHVzaENo
YW5nZXMoYgogICAgICAgICB1cGRhdGUoKTsKIAogICAgIC8vIEZJWE1FOiB0aGUgZm9sbG93aW5n
IGZsYWdzIGFyZSBjdXJyZW50bHkgbm90IGhhbmRsZWQsIGFzIHRoZXkgZG9uJ3QgaGF2ZSBhIGNs
ZWFyIHRlc3Qgb3IgYXJlIGluIGxvdyBwcmlvcml0eQotICAgIC8vIEdlb21ldHJ5T3JpZW50YXRp
b25DaGFuZ2UsIENvbnRlbnRzT3JpZW50YXRpb25DaGFuZ2UsIEJhY2tmYWNlVmlzaWJpbGl0eUNo
YW5nZSwgQ2hpbGRyZW5UcmFuc2Zvcm1DaGFuZ2UKKyAgICAvLyBHZW9tZXRyeU9yaWVudGF0aW9u
Q2hhbmdlLCBDb250ZW50c09yaWVudGF0aW9uQ2hhbmdlLCBCYWNrZmFjZVZpc2liaWxpdHlDaGFu
Z2UsIENoaWxkcmVuVHJhbnNmb3JtQ2hhbmdlLCBQcmVzZXJ2ZXMzRENoYW5nZQogCiAgICAgbV9z
dGF0ZS5tYXNrTGF5ZXIgPSBtX2xheWVyLT5tYXNrTGF5ZXIoKTsKICAgICBtX3N0YXRlLnBvcyA9
IG1fbGF5ZXItPnBvc2l0aW9uKCk7CkBAIC01MjMsOSArNTU1LDkgQEAgdm9pZCBHcmFwaGljc0xh
eWVyUXQ6OnNldE5lZWRzRGlzcGxheSgpCiB9CiAKIC8vIHJlaW1wIGZyb20gR3JhcGhpY3NMYXll
ci5oCi12b2lkIEdyYXBoaWNzTGF5ZXJRdDo6c2V0TmVlZHNEaXNwbGF5SW5SZWN0KGNvbnN0IEZs
b2F0UmVjdCYgcikKK3ZvaWQgR3JhcGhpY3NMYXllclF0OjpzZXROZWVkc0Rpc3BsYXlJblJlY3Qo
Y29uc3QgRmxvYXRSZWN0JiByZWN0KQogewotICAgIG1faW1wbC0+bV9wZW5kaW5nQ29udGVudC5y
ZWdpb25Ub1VwZGF0ZXw9IFFSZWN0RihyKS50b0FsaWduZWRSZWN0KCk7CisgICAgbV9pbXBsLT5t
X3BlbmRpbmdDb250ZW50LnJlZ2lvblRvVXBkYXRlfD0gUVJlY3RGKHJlY3QpLnRvQWxpZ25lZFJl
Y3QoKTsKICAgICBtX2ltcGwtPm5vdGlmeUNoYW5nZShHcmFwaGljc0xheWVyUXRJbXBsOjpEaXNw
bGF5Q2hhbmdlKTsKIH0KIApAQCAtODA3LDE2ICs4MzksMTYgQEAgc3RhdGljIGlubGluZSBkb3Vi
bGUgc29sdmVDdWJpY0JlemllckZ1bgogLy8gVXNpbmcgZWFzaW5nLWN1cnZlcyB3b3VsZCBwcm9i
YWJseSB3b3JrIGZvciBzb21lIG9mIHRoZSBjYXNlcywgYnV0IHdvdWxkbid0IHJlYWxseSBidXkg
dXMgYW55dGhpbmcgYXMgd2UnZCBoYXZlIHRvIGNvbnZlcnQgdGhlIGJlemllciBmdW5jdGlvbiBi
YWNrIHRvIGFuIGVhc2luZyBjdXJ2ZQogc3RhdGljIGlubGluZSBxcmVhbCBhcHBseVRpbWluZ0Z1
bmN0aW9uKGNvbnN0IFRpbWluZ0Z1bmN0aW9uJiB0aW1pbmdGdW5jdGlvbiwgcXJlYWwgcHJvZ3Jl
c3MsIGludCBkdXJhdGlvbikKIHsKLSAgICBpZiAodGltaW5nRnVuY3Rpb24udHlwZSgpID09IExp
bmVhclRpbWluZ0Z1bmN0aW9uKQorICAgICAgICBpZiAodGltaW5nRnVuY3Rpb24udHlwZSgpID09
IExpbmVhclRpbWluZ0Z1bmN0aW9uKQorICAgICAgICAgICAgcmV0dXJuIHByb2dyZXNzOworICAg
ICAgICBpZiAodGltaW5nRnVuY3Rpb24udHlwZSgpID09IEN1YmljQmV6aWVyVGltaW5nRnVuY3Rp
b24pIHsKKyAgICAgICAgICAgIHJldHVybiBzb2x2ZUN1YmljQmV6aWVyRnVuY3Rpb24odGltaW5n
RnVuY3Rpb24ueDEoKSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgdGltaW5nRnVuY3Rpb24ueTEoKSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgdGltaW5nRnVuY3Rpb24ueDIoKSwKKyAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgdGltaW5nRnVuY3Rpb24ueTIoKSwKKyAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZG91YmxlKHByb2dyZXNzKSwgZG91YmxlKGR1
cmF0aW9uKSAvIDEwMDApOworICAgICAgICB9CiAgICAgICAgIHJldHVybiBwcm9ncmVzczsKLSAg
ICBpZiAodGltaW5nRnVuY3Rpb24udHlwZSgpID09IEN1YmljQmV6aWVyVGltaW5nRnVuY3Rpb24p
IHsKLSAgICAgICAgcmV0dXJuIHNvbHZlQ3ViaWNCZXppZXJGdW5jdGlvbih0aW1pbmdGdW5jdGlv
bi54MSgpLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHRpbWluZ0Z1
bmN0aW9uLnkxKCksCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdGlt
aW5nRnVuY3Rpb24ueDIoKSwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICB0aW1pbmdGdW5jdGlvbi55MigpLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgIGRvdWJsZShwcm9ncmVzcyksIGRvdWJsZShkdXJhdGlvbikgLyAxMDAwKTsKLSAgICB9
Ci0gICAgcmV0dXJuIHByb2dyZXNzOwogfQogCiAvLyBoZWxwZXIgZnVuY3Rpb25zIHRvIHNhZmVs
eSBnZXQgYSB2YWx1ZSBvdXQgb2YgV2ViQ29yZSdzIEFuaW1hdGlvblZhbHVlKgpAQCAtODI2LDkg
Kzg1OCw3IEBAIHN0YXRpYyB2b2lkIHdlYmtpdEFuaW1hdGlvblRvUXRBbmltYXRpb24KICAgICBp
ZiAoIWFuaW1hdGlvblZhbHVlKQogICAgICAgICByZXR1cm47CiAKLSAgICBjb25zdCBUcmFuc2Zv
cm1PcGVyYXRpb25zKiBvcHMgPSBzdGF0aWNfY2FzdDxjb25zdCBUcmFuc2Zvcm1BbmltYXRpb25W
YWx1ZSo+KGFuaW1hdGlvblZhbHVlKS0+dmFsdWUoKTsKLQotICAgIGlmIChvcHMpCisgICAgaWYg
KGNvbnN0IFRyYW5zZm9ybU9wZXJhdGlvbnMqIG9wcyA9IHN0YXRpY19jYXN0PGNvbnN0IFRyYW5z
Zm9ybUFuaW1hdGlvblZhbHVlKj4oYW5pbWF0aW9uVmFsdWUpLT52YWx1ZSgpKQogICAgICAgICB0
cmFuc2Zvcm1PcGVyYXRpb25zID0gKm9wczsKIH0KIApAQCAtODU2LDggKzg4Niw4IEBAIHB1Ymxp
YzoKICAgICAgICAgUUFic3RyYWN0QW5pbWF0aW9uOjp1cGRhdGVTdGF0ZShuZXdTdGF0ZSwgb2xk
U3RhdGUpOwogCiAgICAgICAgIC8vIGZvciBzb21lIHJlYXNvbiBJIGhhdmUgZG8gdGhpcyBhc3lu
Y2hyb25vdXNseSAtIG9yIHRoZSBhbmltYXRpb24gd29uJ3Qgd29yawotICAgICAgICBpZiAobmV3
U3RhdGUgPT0gUnVubmluZyAmJiBvbGRTdGF0ZSA9PSBTdG9wcGVkKQotICAgICAgICAgICAgUVRp
bWVyOjpzaW5nbGVTaG90KDAsIG1fbGF5ZXIuZGF0YSgpLCBTTE9UKG5vdGlmeUFuaW1hdGlvblN0
YXJ0ZWQoKSkpOworICAgICAgICBpZiAobmV3U3RhdGUgPT0gUnVubmluZyAmJiBvbGRTdGF0ZSA9
PSBTdG9wcGVkICYmIG1fbGF5ZXIuZGF0YSgpKQorICAgICAgICAgICAgbV9sYXllci5kYXRhKCkt
Pm5vdGlmeUFuaW1hdGlvblN0YXJ0ZWRBc3luYygpOwogICAgIH0KIAogICAgIHZpcnR1YWwgaW50
IGR1cmF0aW9uKCkgY29uc3QgeyByZXR1cm4gbV9kdXJhdGlvbjsgfQpAQCAtOTMyLDkgKzk2Miwx
MCBAQCBwcm90ZWN0ZWQ6CiAKICAgICAgICAgLy8gbm93IHdlIGhhdmUgYSBzb3VyY2Uga2V5ZnJh
bWUsIG9yaWdpbiBrZXlmcmFtZSBhbmQgYSB0aW1pbmcgZnVuY3Rpb24KICAgICAgICAgLy8gd2Ug
Y2FuIG5vdyBwcm9jZXNzIHRoZSBwcm9ncmVzcyBhbmQgYXBwbHkgdGhlIGZyYW1lCi0gICAgICAg
IHFyZWFsIG5vcm1hbGl6ZWRQcm9ncmVzcyA9IChpdC5rZXkoKSA9PSBpdDIua2V5KCkpID8gMCA6
IChwcm9ncmVzcyAtIGl0LmtleSgpKSAvIChpdDIua2V5KCkgLSBpdC5rZXkoKSk7Ci0gICAgICAg
IG5vcm1hbGl6ZWRQcm9ncmVzcyA9IGFwcGx5VGltaW5nRnVuY3Rpb24odGltaW5nRnVuYywgbm9y
bWFsaXplZFByb2dyZXNzLCBkdXJhdGlvbigpIC8gMTAwMCk7Ci0gICAgICAgIGFwcGx5RnJhbWUo
ZnJvbVZhbHVlLCB0b1ZhbHVlLCBub3JtYWxpemVkUHJvZ3Jlc3MpOworICAgICAgICBwcm9ncmVz
cyA9ICghcHJvZ3Jlc3MgfHwgcHJvZ3Jlc3MgPT0gMSB8fCBpdC5rZXkoKSA9PSBpdDIua2V5KCkp
CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgID8gcHJvZ3Jlc3MKKyAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgOiBhcHBseVRpbWluZ0Z1bmN0
aW9uKHRpbWluZ0Z1bmMsIChwcm9ncmVzcyAtIGl0LmtleSgpKSAvIChpdDIua2V5KCkgLSBpdC5r
ZXkoKSksIGR1cmF0aW9uKCkgLyAxMDAwKTsKKyAgICAgICAgYXBwbHlGcmFtZShmcm9tVmFsdWUs
IHRvVmFsdWUsIHByb2dyZXNzKTsKICAgICB9CiAKICAgICBRTWFwPHFyZWFsLCBLZXlmcmFtZVZh
bHVlUXQ8VD4gPiBtX2tleWZyYW1lVmFsdWVzOwpAQCAtOTQzLDcgKzk3NCw3IEBAIHByb3RlY3Rl
ZDoKIGNsYXNzIFRyYW5zZm9ybUFuaW1hdGlvblF0IDogcHVibGljIEFuaW1hdGlvblF0PFRyYW5z
Zm9ybU9wZXJhdGlvbnM+IHsKIHB1YmxpYzoKICAgICBUcmFuc2Zvcm1BbmltYXRpb25RdChHcmFw
aGljc0xheWVyUXRJbXBsKiBsYXllciwgY29uc3QgS2V5ZnJhbWVWYWx1ZUxpc3QmIHZhbHVlcywg
Y29uc3QgSW50U2l6ZSYgYm94U2l6ZSwgY29uc3QgQW5pbWF0aW9uKiBhbmltLCBjb25zdCBRU3Ry
aW5nICYgbmFtZSkKLSAgICAgICAgICAgICAgICA6IEFuaW1hdGlvblF0PFRyYW5zZm9ybU9wZXJh
dGlvbnM+KGxheWVyLCB2YWx1ZXMsIGJveFNpemUsIGFuaW0sIG5hbWUpCisgICAgICAgIDogQW5p
bWF0aW9uUXQ8VHJhbnNmb3JtT3BlcmF0aW9ucz4obGF5ZXIsIHZhbHVlcywgYm94U2l6ZSwgYW5p
bSwgbmFtZSkKICAgICB7CiAgICAgfQogCkBAIC05NTIsNyArOTgzLDcgQEAgcHVibGljOgogICAg
ICAgICAvLyB0aGlzIGNhbWUgdXAgZHVyaW5nIHRoZSBjb21wb3NpdGluZy9hbmltYXRpb24gTGF5
b3V0VGVzdHMKICAgICAgICAgLy8gd2hlbiB0aGUgYW5pbWF0aW9uIGRpZXMsIHRoZSB0cmFuc2Zv
cm0gaGFzIHRvIGdvIGJhY2sgdG8gZGVmYXVsdAogICAgICAgICBpZiAobV9sYXllcikKLSAgICAg
ICAgICAgIG1fbGF5ZXIuZGF0YSgpLT5zZXRCYXNlVHJhbnNmb3JtKFFUcmFuc2Zvcm0obV9sYXll
ci5kYXRhKCktPm1fbGF5ZXItPnRyYW5zZm9ybSgpKSk7CisgICAgICAgICAgICBtX2xheWVyLmRh
dGEoKS0+c2V0QmFzZVRyYW5zZm9ybShtX2xheWVyLmRhdGEoKS0+bV9sYXllci0+dHJhbnNmb3Jt
KCkpOwogICAgIH0KIAogICAgIC8vIHRoZSBpZGVhIGlzIHRoYXQgd2UgbGV0IFdlYkNvcmUgbWFu
YWdlIHRoZSB0cmFuc2Zvcm0tb3BlcmF0aW9ucwpAQCAtOTYzLDExICs5OTQsMjIgQEAgcHVibGlj
OgogICAgIHsKICAgICAgICAgVHJhbnNmb3JtYXRpb25NYXRyaXggdHJhbnNmb3JtTWF0cml4Owog
Ci0gICAgICAgIC8vIHRoaXMgbG9va3Mgc2ltcGxlIGJ1dCBpcyByZWFsbHkgdHJpY2t5IHRvIGdl
dCByaWdodC4gVXNlIGNhdXRpb24uCi0gICAgICAgIGZvciAoc2l6ZV90IGkgPSAwOyBpIDwgdGFy
Z2V0T3BlcmF0aW9ucy5zaXplKCk7ICsraSkKLSAgICAgICAgICAgIHRhcmdldE9wZXJhdGlvbnMu
b3BlcmF0aW9ucygpW2ldLT5ibGVuZChzb3VyY2VPcGVyYXRpb25zLmF0KGkpLCBwcm9ncmVzcykt
PmFwcGx5KHRyYW5zZm9ybU1hdHJpeCwgbV9ib3hTaXplKTsKLQotICAgICAgICBtX2xheWVyLmRh
dGEoKS0+c2V0QmFzZVRyYW5zZm9ybShRVHJhbnNmb3JtKHRyYW5zZm9ybU1hdHJpeCkpOworICAg
ICAgICAvLyBzb21ldGltZXMgdGhlIGFuaW1hdGlvbiB2YWx1ZXMgZnJvbSBXZWJDb3JlIGFyZSBt
aXNsZWFkaW5nIGFuZCB3ZSBoYXZlIHRvIHVzZSB0aGUgYWN0dWFsIG1hdHJpeCBhcyBzb3VyY2UK
KyAgICAgICAgLy8gVGhlIE1hYyBpbXBsZW1lbnRhdGlvbiBzaW1wbHkgZG9lc24ndCB0cnkgdG8g
YWNjZWxlcmF0ZSB0aG9zZSAoZS5nLiAzNjBkZWcgcm90YXRpb24pLCBidXQgd2UgZG8uCisgICAg
ICAgIGlmIChwcm9ncmVzcyA9PSAxIHx8ICF0YXJnZXRPcGVyYXRpb25zLnNpemUoKSB8fCBzb3Vy
Y2VPcGVyYXRpb25zID09IHRhcmdldE9wZXJhdGlvbnMpIHsKKyAgICAgICAgICAgIFRyYW5zZm9y
bWF0aW9uTWF0cml4IHNvdXJjZU1hdHJpeDsKKyAgICAgICAgICAgIHNvdXJjZU9wZXJhdGlvbnMu
YXBwbHkobV9ib3hTaXplLCBzb3VyY2VNYXRyaXgpOworICAgICAgICAgICAgdHJhbnNmb3JtTWF0
cml4ID0gbV9zb3VyY2VNYXRyaXg7CisgICAgICAgICAgICB0cmFuc2Zvcm1NYXRyaXguYmxlbmQo
c291cmNlTWF0cml4LCAxIC0gcHJvZ3Jlc3MpOworICAgICAgICB9IGVsc2UgaWYgKHRhcmdldE9w
ZXJhdGlvbnMuc2l6ZSgpICE9IHNvdXJjZU9wZXJhdGlvbnMuc2l6ZSgpKSB7CisgICAgICAgICAg
ICB0cmFuc2Zvcm1NYXRyaXggPSBtX3NvdXJjZU1hdHJpeDsKKyAgICAgICAgICAgIHRhcmdldE9w
ZXJhdGlvbnMuYXBwbHkobV9ib3hTaXplLCB0cmFuc2Zvcm1NYXRyaXgpOworICAgICAgICAgICAg
dHJhbnNmb3JtTWF0cml4LmJsZW5kKG1fc291cmNlTWF0cml4LCBwcm9ncmVzcyk7CisgICAgICAg
IH0gZWxzZSB7CisgICAgICAgICAgICBmb3IgKHNpemVfdCBpID0gMDsgaSA8IHRhcmdldE9wZXJh
dGlvbnMuc2l6ZSgpOyArK2kpCisgICAgICAgICAgICAgICAgdGFyZ2V0T3BlcmF0aW9ucy5vcGVy
YXRpb25zKClbaV0tPmJsZW5kKHNvdXJjZU9wZXJhdGlvbnMuYXQoaSksIHByb2dyZXNzKS0+YXBw
bHkodHJhbnNmb3JtTWF0cml4LCBtX2JveFNpemUpOworICAgICAgICB9CisgICAgICAgIG1fbGF5
ZXIuZGF0YSgpLT5zZXRCYXNlVHJhbnNmb3JtKHRyYW5zZm9ybU1hdHJpeCk7CiAgICAgfQogCiAg
ICAgdmlydHVhbCB2b2lkIHVwZGF0ZVN0YXRlKFFBYnN0cmFjdEFuaW1hdGlvbjo6U3RhdGUgbmV3
U3RhdGUsIFFBYnN0cmFjdEFuaW1hdGlvbjo6U3RhdGUgb2xkU3RhdGUpCkBAIC05ODAsMTUgKzEw
MjIsMTYgQEAgcHVibGljOgogICAgICAgICAvLyB0byBpbmNyZWFzZSBGUFMsIHdlIHVzZSBhIGxl
c3MgYWNjdXJhdGUgY2FjaGluZyBtZWNoYW5pc20gd2hpbGUgYW5pbWF0aW9uIGlzIGdvaW5nIG9u
CiAgICAgICAgIC8vIHRoaXMgaXMgYSBVWCBjaG9pY2UgdGhhdCBzaG91bGQgcHJvYmFibHkgYmUg
Y3VzdG9taXphYmxlCiAgICAgICAgIGlmIChuZXdTdGF0ZSA9PSBRQWJzdHJhY3RBbmltYXRpb246
OlJ1bm5pbmcpIHsKKyAgICAgICAgICAgIG1fc291cmNlTWF0cml4ID0gbV9sYXllci5kYXRhKCkt
PnRyYW5zZm9ybSgpOwogICAgICAgICAgICAgbV9sYXllci5kYXRhKCktPm1fdHJhbnNmb3JtQW5p
bWF0aW9uUnVubmluZyA9IHRydWU7Ci0gICAgICAgICAgICBpZiAobV9sYXllci5kYXRhKCktPmNh
Y2hlTW9kZSgpID09IFFHcmFwaGljc0l0ZW06OkRldmljZUNvb3JkaW5hdGVDYWNoZSkKLSAgICAg
ICAgICAgICAgICBtX2xheWVyLmRhdGEoKS0+c2V0Q2FjaGVNb2RlKFFHcmFwaGljc0l0ZW06Okl0
ZW1Db29yZGluYXRlQ2FjaGUpOworICAgICAgICAgICAgbV9sYXllci5kYXRhKCktPmFkanVzdENh
Y2hpbmdSZWN1cnNpdmVseSh0cnVlKTsKICAgICAgICAgfSBlbHNlIHsKICAgICAgICAgICAgIG1f
bGF5ZXIuZGF0YSgpLT5tX3RyYW5zZm9ybUFuaW1hdGlvblJ1bm5pbmcgPSBmYWxzZTsKLSAgICAg
ICAgICAgIGlmIChtX2xheWVyLmRhdGEoKS0+Y2FjaGVNb2RlKCkgPT0gUUdyYXBoaWNzSXRlbTo6
SXRlbUNvb3JkaW5hdGVDYWNoZSkKLSAgICAgICAgICAgICAgICBtX2xheWVyLmRhdGEoKS0+c2V0
Q2FjaGVNb2RlKFFHcmFwaGljc0l0ZW06OkRldmljZUNvb3JkaW5hdGVDYWNoZSk7CisgICAgICAg
ICAgICBtX2xheWVyLmRhdGEoKS0+YWRqdXN0Q2FjaGluZ1JlY3Vyc2l2ZWx5KGZhbHNlKTsKICAg
ICAgICAgfQogICAgIH0KKworICAgIFRyYW5zZm9ybWF0aW9uTWF0cml4IG1fc291cmNlTWF0cml4
OwogfTsKIAogY2xhc3MgT3BhY2l0eUFuaW1hdGlvblF0IDogcHVibGljIEFuaW1hdGlvblF0PHFy
ZWFsPiB7CkBAIC0xMDA2LDYgKzEwNDksNyBAQCBwdWJsaWM6CiAgICAgdmlydHVhbCB2b2lkIHVw
ZGF0ZVN0YXRlKFFBYnN0cmFjdEFuaW1hdGlvbjo6U3RhdGUgbmV3U3RhdGUsIFFBYnN0cmFjdEFu
aW1hdGlvbjo6U3RhdGUgb2xkU3RhdGUpCiAgICAgewogICAgICAgICBRQWJzdHJhY3RBbmltYXRp
b246OnVwZGF0ZVN0YXRlKG5ld1N0YXRlLCBvbGRTdGF0ZSk7CisKICAgICAgICAgaWYgKG1fbGF5
ZXIpCiAgICAgICAgICAgICBtX2xheWVyLmRhdGEoKS0+bV9vcGFjaXR5QW5pbWF0aW9uUnVubmlu
ZyA9IChuZXdTdGF0ZSA9PSBRQWJzdHJhY3RBbmltYXRpb246OlJ1bm5pbmcpOwogICAgIH0KQEAg
LTEwNzksMTEgKzExMjMsMTIgQEAgdm9pZCBHcmFwaGljc0xheWVyUXQ6OnJlbW92ZUFuaW1hdGlv
bnNGbwogdm9pZCBHcmFwaGljc0xheWVyUXQ6OnBhdXNlQW5pbWF0aW9uKGNvbnN0IFN0cmluZyYg
bmFtZSwgZG91YmxlIHRpbWVPZmZzZXQpCiB7CiAgICAgZm9yIChRTGlzdDxRV2Vha1BvaW50ZXI8
UUFic3RyYWN0QW5pbWF0aW9uPiA+OjppdGVyYXRvciBpdCA9IG1faW1wbC0+bV9hbmltYXRpb25z
LmJlZ2luKCk7IGl0ICE9IG1faW1wbC0+bV9hbmltYXRpb25zLmVuZCgpOyArK2l0KSB7Ci0gICAg
ICAgIGlmICgqaXQpIHsKLSAgICAgICAgICAgIEFuaW1hdGlvblF0QmFzZSogYW5pbSA9IHN0YXRp
Y19jYXN0PEFuaW1hdGlvblF0QmFzZSo+KCgqaXQpLmRhdGEoKSk7Ci0gICAgICAgICAgICBpZiAo
YW5pbSAmJiBhbmltLT5tX2tleWZyYW1lc05hbWUgPT0gUVN0cmluZyhuYW1lKSkKLSAgICAgICAg
ICAgICAgICBRVGltZXI6OnNpbmdsZVNob3QodGltZU9mZnNldCAqIDEwMDAsIGFuaW0sIFNMT1Qo
cGF1c2UoKSkpOwotICAgICAgICB9CisgICAgICAgIGlmICghKCppdCkpCisgICAgICAgICAgICBj
b250aW51ZTsKKworICAgICAgICBBbmltYXRpb25RdEJhc2UqIGFuaW0gPSBzdGF0aWNfY2FzdDxB
bmltYXRpb25RdEJhc2UqPigoKml0KS5kYXRhKCkpOworICAgICAgICBpZiAoYW5pbSAmJiBhbmlt
LT5tX2tleWZyYW1lc05hbWUgPT0gUVN0cmluZyhuYW1lKSkKKyAgICAgICAgICAgIFFUaW1lcjo6
c2luZ2xlU2hvdCh0aW1lT2Zmc2V0ICogMTAwMCwgYW5pbSwgU0xPVChwYXVzZSgpKSk7CiAgICAg
fQogfQogCkluZGV4OiBXZWJLaXQvcXQvQ2hhbmdlTG9nCj09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFdlYktpdC9x
dC9DaGFuZ2VMb2cJKHJldmlzaW9uIDU0MjY3KQorKysgV2ViS2l0L3F0L0NoYW5nZUxvZwkod29y
a2luZyBjb3B5KQpAQCAtMSwzICsxLDE1IEBACisyMDEwLTAyLTAyICBObydhbSBSb3NlbnRoYWwg
IDxub2FtLnJvc2VudGhhbEBub2tpYS5jb20+CisKKyAgICAgICAgUmV2aWV3ZWQgYnkgTk9CT0RZ
IChPT1BTISkuCisKKyAgICAgICAgW1F0XSBUdW5pbmcgYW5kIG9wdGltaXphdGlvbnMgdG8gR3Jh
cGhpY3NMYXllclF0LiBNYWlubHkgcmVkdWNlZCB1c2FnZQorICAgICAgICBvZiBRVGltZXI6OnNp
bmdsZVNob3QsIGFuZCBtb3ZlZCBzeW5jTGF5ZXJzKCkgZnJvbSBwYWludCgpIHRvIHVwZGF0ZSgp
CisgICAgICAgIGh0dHBzOi8vYnVncy53ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9pZD0zNDA2Mgor
CisgICAgICAgICogQXBpL3FncmFwaGljc3dlYnZpZXcuY3BwOgorICAgICAgICAoUUdyYXBoaWNz
V2ViVmlld1ByaXZhdGU6OnVwZGF0ZSk6IE1vdmVkIHRoZSBzeW5jIG9wZXJhdGlvbiB0byB1cGRh
dGUKKyAgICAgICAgKFFHcmFwaGljc1dlYlZpZXc6OnBhaW50KTogTW92ZWQgdGhlIHN5bmMgb3Bl
cmF0aW9uIHRvIHVwZGF0ZQorCiAyMDEwLTAyLTAyICBLZW5uZXRoIFJvaGRlIENocmlzdGlhbnNl
biAgPGtlbm5ldGhAd2Via2l0Lm9yZz4KIAogICAgICAgICBSZXZpZXdlZCBieSBBcml5YSBIaWRh
eWF0LgpJbmRleDogV2ViS2l0L3F0L0FwaS9xZ3JhcGhpY3N3ZWJ2aWV3LmNwcAo9PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
Ci0tLSBXZWJLaXQvcXQvQXBpL3FncmFwaGljc3dlYnZpZXcuY3BwCShyZXZpc2lvbiA1NDI1MCkK
KysrIFdlYktpdC9xdC9BcGkvcWdyYXBoaWNzd2Vidmlldy5jcHAJKHdvcmtpbmcgY29weSkKQEAg
LTI3LDYgKzI3LDcgQEAKICNpbmNsdWRlICJxd2VicGFnZV9wLmgiCiAjaW5jbHVkZSAiUVdlYlBh
Z2VDbGllbnQuaCIKICNpbmNsdWRlIDxGcmFtZVZpZXcuaD4KKyNpbmNsdWRlIDxRdENvcmUvcW1l
dGFvYmplY3QuaD4KICNpbmNsdWRlIDxRdENvcmUvcXNoYXJlZHBvaW50ZXIuaD4KICNpbmNsdWRl
IDxRdENvcmUvcXRpbWVyLmg+CiAjaW5jbHVkZSA8UXRHdWkvcWFwcGxpY2F0aW9uLmg+CkBAIC03
OCwxMyArNzksMTQgQEAgcHVibGljOgogICAgICAgICAsIHBhZ2UoMCkKICNpZiBVU0UoQUNDRUxF
UkFURURfQ09NUE9TSVRJTkcpCiAgICAgICAgICwgcm9vdEdyYXBoaWNzTGF5ZXIoMCkKLSAgICAg
ICAgLCBzaG91bGRTeW5jKHRydWUpCisgICAgICAgICwgc2hvdWxkU3luYyhmYWxzZSkKICNlbmRp
ZgogICAgIHsKICNpZiBVU0UoQUNDRUxFUkFURURfQ09NUE9TSVRJTkcpCiAgICAgICAgIC8vIHRo
ZSBvdmVybGF5IGFuZCBzdGF5cyBhbGl2ZSBmb3IgdGhlIGxpZmV0aW1lIG9mCiAgICAgICAgIC8v
IHRoaXMgUUdyYXBoaWNzV2ViVmlldyBhcyB0aGUgc2Nyb2xsYmFycyBhcmUgbmVlZGVkIHdoZW4g
dGhlcmUncyBubyBjb21wb3NpdGluZwogICAgICAgICBxLT5zZXRGbGFnKFFHcmFwaGljc0l0ZW06
Okl0ZW1Vc2VzRXh0ZW5kZWRTdHlsZU9wdGlvbik7CisgICAgICAgIHN5bmNNZXRhTWV0aG9kID0g
cS0+bWV0YU9iamVjdCgpLT5tZXRob2QocS0+bWV0YU9iamVjdCgpLT5pbmRleE9mTWV0aG9kKCJz
eW5jTGF5ZXJzKCkiKSk7CiAjZW5kaWYKICAgICB9CiAKQEAgLTEzMSw2ICsxMzMsOSBAQCBwdWJs
aWM6CiAgICAgLy8gY29tcG9zaXRvciB0ZWxsaW5nIHVzIHRvIGRvIHNvLiBXZSdsbCBnZXQgdGhh
dCBjYWxsIGZyb20gQ2hyb21lQ2xpZW50UXQKICAgICBib29sIHNob3VsZFN5bmM7CiAKKyAgICAv
LyB3ZSBoYXZlIHRvIGZsdXNoIHF1aXRlIG9mdGVuLCBzbyB3ZSB1c2UgYSBtZXRhLW1ldGhvZCBp
bnN0ZWFkIG9mIFFUaW1lcjo6c2luZ2xlU2hvdCBmb3IgcHV0dGluZyB0aGUgZXZlbnQgaW4gdGhl
IHF1ZXVlCisgICAgUU1ldGFNZXRob2Qgc3luY01ldGFNZXRob2Q7CisKICAgICAvLyB3ZSBuZWVk
IHRvIHB1dCB0aGUgcm9vdCBncmFwaGljcyBsYXllciBiZWhpbmQgdGhlIG92ZXJsYXkgKHdoaWNo
IGNvbnRhaW5zIHRoZSBzY3JvbGxiYXIpCiAgICAgZW51bSB7IFJvb3RHcmFwaGljc0xheWVyWlZh
bHVlLCBPdmVybGF5WlZhbHVlIH07CiAjZW5kaWYKQEAgLTE3OCw3ICsxODMsNyBAQCB2b2lkIFFH
cmFwaGljc1dlYlZpZXdQcml2YXRlOjptYXJrRm9yU3luCiB7CiAgICAgc2hvdWxkU3luYyA9IHRy
dWU7CiAgICAgaWYgKHNjaGVkdWxlU3luYykKLSAgICAgICAgUVRpbWVyOjpzaW5nbGVTaG90KDAs
IHEsIFNMT1Qoc3luY0xheWVycygpKSk7CisgICAgICAgIHN5bmNNZXRhTWV0aG9kLmludm9rZShx
LCBRdDo6UXVldWVkQ29ubmVjdGlvbik7CiB9CiAKIHZvaWQgUUdyYXBoaWNzV2ViVmlld1ByaXZh
dGU6OnVwZGF0ZUNvbXBvc2l0aW5nU2Nyb2xsUG9zaXRpb24oKQpAQCAtMjI0LDYgKzIyOSw3IEBA
IHZvaWQgUUdyYXBoaWNzV2ViVmlld1ByaXZhdGU6OnVwZGF0ZShjb24KICNpZiBVU0UoQUNDRUxF
UkFURURfQ09NUE9TSVRJTkcpCiAgICAgaWYgKG92ZXJsYXkpCiAgICAgICAgIG92ZXJsYXktPnVw
ZGF0ZShRUmVjdEYoZGlydHlSZWN0KSk7CisgICAgc3luY0xheWVycygpOwogI2VuZGlmCiB9CiAK
QEAgLTQ0Miw3ICs0NDgsNiBAQCB2b2lkIFFHcmFwaGljc1dlYlZpZXc6OnBhaW50KFFQYWludGVy
KiBwCiB7CiAjaWYgVVNFKEFDQ0VMRVJBVEVEX0NPTVBPU0lUSU5HKQogICAgIHBhZ2UoKS0+bWFp
bkZyYW1lKCktPnJlbmRlcihwYWludGVyLCBkLT5vdmVybGF5ID8gUVdlYkZyYW1lOjpDb250ZW50
c0xheWVyIDogUVdlYkZyYW1lOjpBbGxMYXllcnMsIG9wdGlvbi0+ZXhwb3NlZFJlY3QudG9BbGln
bmVkUmVjdCgpKTsKLSAgICBkLT5zeW5jTGF5ZXJzKCk7CiAjZWxzZQogICAgIHBhZ2UoKS0+bWFp
bkZyYW1lKCktPnJlbmRlcihwYWludGVyLCBRV2ViRnJhbWU6OkFsbExheWVycywgb3B0aW9uLT5l
eHBvc2VkUmVjdC50b1JlY3QoKSk7CiAjZW5kaWYK
</data>

          </attachment>
          <attachment
              isobsolete="0"
              ispatch="1"
              isprivate="0"
          >
            <attachid>48064</attachid>
            <date>2010-02-03 13:23:51 -0800</date>
            <delta_ts>2010-02-04 08:56:23 -0800</delta_ts>
            <desc>Fixed a build issue</desc>
            <filename>patch-34062-5.diff</filename>
            <type>text/plain</type>
            <size>24854</size>
            <attacher name="Noam Rosenthal">noam</attacher>
            
              <data encoding="base64">SW5kZXg6IFdlYkNvcmUvQ2hhbmdlTG9nDQo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09DQotLS0gV2ViQ29yZS9DaGFuZ2VM
b2cJKHJldmlzaW9uIDU0MjY3KQ0KKysrIFdlYkNvcmUvQ2hhbmdlTG9nCSh3b3JraW5nIGNvcHkp
DQpAQCAtMSwzICsxLDIxIEBADQorMjAxMC0wMi0wMiAgTm8nYW0gUm9zZW50aGFsICA8bm9hbS5y
b3NlbnRoYWxAbm9raWEuY29tPg0KKw0KKyAgICAgICAgUmV2aWV3ZWQgYnkgTk9CT0RZIChPT1BT
ISkuDQorDQorICAgICAgICBbUXRdIFR1bmluZyBhbmQgb3B0aW1pemF0aW9ucyB0byBHcmFwaGlj
c0xheWVyUXQuIFJlZHVjZSB1bm5lY2Vzc2FyeQ0KKyAgICAgICAgcmVjYWNoaW5nLCByZW1vdmUg
UVRpbWVyOjpzaW5nbGVTaG90IGFuZCBRUGl4bWFwOjpzY2FsZWQsIG1vcmUNCisgICAgICAgIGFj
Y3VyYXRlIHN0cmF0ZWd5IG9mIGhhbmRsaW5nIHRyYW5zZm9ybSBvcGVyYXRpb24gYmxlbmRzLiBS
b3RhdGluZyBhDQorICAgICAgICBib3JkZXJlZC10YWJsZSwgZm9yIGV4YW1wbGUsIG5vdyBydW5z
IGF0IDUwRlBTIGluc3RlYWQgb2YgNDBGUFMgb24gTWFlbW81Lg0KKw0KKyAgICAgICAgaHR0cHM6
Ly9idWdzLndlYmtpdC5vcmcvc2hvd19idWcuY2dpP2lkPTM0MDYyDQorDQorICAgICAgICBUaGlz
IGlzIHRlc3RlZCBieSBodHRwczovL2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9MzQ0
NTAsIGZwcyBtZWFzdXJlbWVudHMuDQorDQorICAgICAgICAqIHBsYXRmb3JtL2dyYXBoaWNzL3F0
L0dyYXBoaWNzTGF5ZXJRdC5jcHA6DQorICAgICAgICAoV2ViQ29yZTo6R3JhcGhpY3NMYXllclF0
SW1wbDo6Zmx1c2hDaGFuZ2VzKTogRmluZS10dW5lIGNhY2hpbmcNCisgICAgICAgIChXZWJDb3Jl
OjpUcmFuc2Zvcm1BbmltYXRpb25RdDo6VHJhbnNmb3JtQW5pbWF0aW9uUXQpOiB0cmFuc2Zvcm0g
YnVncw0KKyAgICAgICAgKFdlYkNvcmU6Ok9wYWNpdHlBbmltYXRpb25RdDo6dXBkYXRlU3RhdGUp
OiBzdHlsZSBjaGFuZ2UNCisNCiAyMDEwLTAyLTAyICBGdW1pdG9zaGkgVWthaSAgPHVrYWlAY2hy
b21pdW0ub3JnPg0KIA0KICAgICAgICAgUmV2aWV3ZWQgYnkgQWxleGV5IFByb3NrdXJ5YWtvdi4N
CkluZGV4OiBXZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL3F0L0dyYXBoaWNzTGF5ZXJRdC5jcHAN
Cj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT0NCi0tLSBXZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL3F0L0dyYXBoaWNzTGF5
ZXJRdC5jcHAJKHJldmlzaW9uIDU0MjUwKQ0KKysrIFdlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3Mv
cXQvR3JhcGhpY3NMYXllclF0LmNwcAkod29ya2luZyBjb3B5KQ0KQEAgLTk5LDE0ICs5OSwyNiBA
QCBwdWJsaWM6DQogICAgIC8vIG9yIENocm9tZUNsaWVudFF0OjpzY2hlZHVsZUNvbXBvc2l0aW5n
TGF5ZXJTeW5jIChtZWFuaW5nIHRoZSBzeW5jIHdpbGwgaGFwcGVuIEFTQVApDQogICAgIHZvaWQg
Zmx1c2hDaGFuZ2VzKGJvb2wgcmVjdXJzaXZlID0gdHJ1ZSk7DQogDQorICAgIC8vIG9wdGltaXph
dGlvbjogd2hlbiB3ZSBoYXZlIGFuIGFuaW1hdGlvbiBydW5uaW5nIG9uIGFuIGVsZW1lbnQgd2l0
aCBubyBjb250ZW50cywgdGhhdCBoYXMgY2hpbGQtZWxlbWVudHMgd2l0aCBjb250ZW50cywNCisg
ICAgLy8gQUxMIG9mIHRoZW0gaGF2ZSB0byBoYXZlIEl0ZW1Db29yZGluYXRlQ2FjaGUgYW5kIG5v
dCBEZXZpY2VDb29yZGluYXRlQ2FjaGUNCisgICAgdm9pZCBhZGp1c3RDYWNoaW5nUmVjdXJzaXZl
bHkoYm9vbCBhbmltYXRpb25Jc1J1bm5pbmcpOw0KKw0KKyAgICAvLyBvcHRpbWl6YXRpb246IHJl
dHVybnMgdHJ1ZSBpZiB0aGlzIG9yIGFuIGFuY2VzdG9yIGhhcyBhIHRyYW5zZm9ybSBhbmltYXRp
b24gcnVubmluZy4NCisgICAgLy8gdGhpcyBlbmFibGVzIHVzIHRvIHVzZSBJdGVtQ29vcmRpbmF0
ZXNDYWNoZSB3aGlsZSB0aGUgYW5pbWF0aW9uIGlzIHJ1bm5pbmcsIG90aGVyd2lzZSB3ZSBoYXZl
IHRvIHJlY2FjaGUgZm9yIGV2ZXJ5IGZyYW1lDQorICAgIGJvb2wgaXNUcmFuc2Zvcm1BbmltYXRp
b25SdW5uaW5nKCkgY29uc3Q7DQorDQogcHVibGljIHNsb3RzOg0KICAgICAvLyB3ZSBuZWVkIHRv
IG5vdGlmeSB0aGUgY2xpZW50IChha2EgdGhlIGxheWVyIGNvbXBvc2l0b3IpIHdoZW4gdGhlIGFu
aW1hdGlvbiBhY3R1YWxseSBzdGFydHMNCiAgICAgdm9pZCBub3RpZnlBbmltYXRpb25TdGFydGVk
KCk7DQogDQorc2lnbmFsczoNCisgICAgLy8gb3B0aW1pemF0aW9uOiB3ZSBkb24ndCB3YW50IHRv
IHVzZSBRVGltZXI6OnNpbmdsZVNob3QNCisgICAgdm9pZCBub3RpZnlBbmltYXRpb25TdGFydGVk
QXN5bmMoKTsNCisNCiBwdWJsaWM6DQogICAgIEdyYXBoaWNzTGF5ZXJRdCogbV9sYXllcjsNCiAN
Ci0gICAgUVRyYW5zZm9ybSBtX2Jhc2VUcmFuc2ZvbTsNCisgICAgUVRyYW5zZm9ybSBtX2Jhc2VU
cmFuc2Zvcm07DQogICAgIGJvb2wgbV90cmFuc2Zvcm1BbmltYXRpb25SdW5uaW5nOw0KICAgICBi
b29sIG1fb3BhY2l0eUFuaW1hdGlvblJ1bm5pbmc7DQogDQpAQCAtMTU3LDEyICsxNjksMTQgQEAg
cHVibGljOg0KICAgICAgICAgYm9vbCBiYWNrZmFjZVZpc2liaWxpdHk6IDE7DQogICAgICAgICBi
b29sIGRpc3RyaWJ1dGVPcGFjaXR5OiAxOw0KICAgICAgICAgYm9vbCBhbGlnbjogMjsNCi0gICAg
ICAgIFN0YXRlKCk6IG1hc2tMYXllcigwKSwgb3BhY2l0eSgxKSwgcHJlc2VydmVzM0QoZmFsc2Up
LCBtYXNrc1RvQm91bmRzKGZhbHNlKSwNCisgICAgICAgIFN0YXRlKCk6IG1hc2tMYXllcigwKSwg
b3BhY2l0eSgxLmYpLCBwcmVzZXJ2ZXMzRChmYWxzZSksIG1hc2tzVG9Cb3VuZHMoZmFsc2UpLA0K
ICAgICAgICAgICAgICAgICAgIGRyYXdzQ29udGVudChmYWxzZSksIGNvbnRlbnRzT3BhcXVlKGZh
bHNlKSwgYmFja2ZhY2VWaXNpYmlsaXR5KGZhbHNlKSwNCiAgICAgICAgICAgICAgICAgICBkaXN0
cmlidXRlT3BhY2l0eShmYWxzZSkNCiAgICAgICAgIHsNCiAgICAgICAgIH0NCiAgICAgfSBtX3N0
YXRlOw0KKw0KKyAgICBmcmllbmQgY2xhc3MgQW5pbWF0aW9uUXRCYXNlOw0KIH07DQogDQogR3Jh
cGhpY3NMYXllclF0SW1wbDo6R3JhcGhpY3NMYXllclF0SW1wbChHcmFwaGljc0xheWVyUXQqIG5l
d0xheWVyKQ0KQEAgLTE3MSwxNiArMTg1LDE0IEBAIEdyYXBoaWNzTGF5ZXJRdEltcGw6OkdyYXBo
aWNzTGF5ZXJRdEltcGwNCiAgICAgLCBtX3RyYW5zZm9ybUFuaW1hdGlvblJ1bm5pbmcoZmFsc2Up
DQogICAgICwgbV9jaGFuZ2VNYXNrKE5vQ2hhbmdlcykNCiB7DQotICAgIC8vIGJldHRlciB0byBj
YWxjdWxhdGUgdGhlIGV4cG9zZWQgcmVjdCBpbiBRR3JhcGhpY3NWaWV3IHRoYW4gb3Zlci1yZW5k
ZXIgaW4gV2ViQ29yZQ0KLSAgICAvLyBGSVhNRTogdGVzdCBkaWZmZXJlbnQgYXBwcm9hY2hlcw0K
LSAgICBzZXRGbGFnKFFHcmFwaGljc0l0ZW06Okl0ZW1Vc2VzRXh0ZW5kZWRTdHlsZU9wdGlvbiwg
dHJ1ZSk7DQotDQogICAgIC8vIHdlIHVzZSBncmFwaGljcy12aWV3IGZvciBjb21wb3NpdGluZywg
bm90IGZvciBpbnRlcmFjdGl2aXR5DQogICAgIHNldEFjY2VwdGVkTW91c2VCdXR0b25zKFF0OjpO
b0J1dHRvbik7DQogICAgIHNldEVuYWJsZWQoZmFsc2UpOw0KIA0KICAgICAvLyB3ZSdsbCBzZXQg
dGhlIGNhY2hlIHdoZW4gd2Uga25vdyB3aGF0J3MgZ29pbmcgb24NCiAgICAgc2V0Q2FjaGVNb2Rl
KE5vQ2FjaGUpOw0KKw0KKyAgICBjb25uZWN0KHRoaXMsIFNJR05BTChub3RpZnlBbmltYXRpb25T
dGFydGVkQXN5bmMoKSksIHRoaXMsIFNMT1Qobm90aWZ5QW5pbWF0aW9uU3RhcnRlZCgpKSwgUXQ6
OlF1ZXVlZENvbm5lY3Rpb24pOw0KIH0NCiANCiBHcmFwaGljc0xheWVyUXRJbXBsOjp+R3JhcGhp
Y3NMYXllclF0SW1wbCgpDQpAQCAtMjAzLDIyICsyMTUsNDIgQEAgR3JhcGhpY3NMYXllclF0SW1w
bDo6fkdyYXBoaWNzTGF5ZXJRdEltcA0KICAgICAgICAgICAgIGRlbGV0ZSBhbmltOw0KIH0NCiAN
Cit2b2lkIEdyYXBoaWNzTGF5ZXJRdEltcGw6OmFkanVzdENhY2hpbmdSZWN1cnNpdmVseShib29s
IGFuaW1hdGlvbklzUnVubmluZykNCit7DQorICAgIC8vIG9wdGltaXphdGlvbjogd2UgbWFrZSBz
dXJlIGFsbCBvdXIgY2hpbGRyZW4gaGF2ZSBJdGVtQ29vcmRpbmF0ZUNhY2hlIC0NCisgICAgLy8g
b3RoZXJ3aXNlIHdlIGVuZCB1cCByZS1yZW5kZXJpbmcgdGhlbSBkdXJpbmcgdGhlIGFuaW1hdGlv
bg0KKyAgICBjb25zdCBRTGlzdDxRR3JhcGhpY3NJdGVtKj4gY2hpbGRyZW4gPSBjaGlsZEl0ZW1z
KCk7DQorDQorICAgIGZvciAoUUxpc3Q8UUdyYXBoaWNzSXRlbSo+Ojpjb25zdF9pdGVyYXRvciBp
dCA9IGNoaWxkcmVuLmJlZ2luKCk7IGl0ICE9IGNoaWxkcmVuLmVuZCgpOyArK2l0KSB7DQorICAg
ICAgICBpZiAoUUdyYXBoaWNzSXRlbSogaXRlbSA9ICppdCkNCisgICAgICAgICAgICBpZiAoR3Jh
cGhpY3NMYXllclF0SW1wbCogbGF5ZXIgPSBxb2JqZWN0X2Nhc3Q8R3JhcGhpY3NMYXllclF0SW1w
bCo+KGl0ZW0tPnRvR3JhcGhpY3NPYmplY3QoKSkpIHsNCisgICAgICAgICAgICAgICAgaWYgKGxh
eWVyLT5tX2xheWVyLT5kcmF3c0NvbnRlbnQoKSAmJiBsYXllci0+bV9jdXJyZW50Q29udGVudC5j
b250ZW50VHlwZSA9PSBIVE1MQ29udGVudFR5cGUpDQorICAgICAgICAgICAgICAgICAgICBsYXll
ci0+c2V0Q2FjaGVNb2RlKGFuaW1hdGlvbklzUnVubmluZyA/IFFHcmFwaGljc0l0ZW06Okl0ZW1D
b29yZGluYXRlQ2FjaGUgOiBRR3JhcGhpY3NJdGVtOjpEZXZpY2VDb29yZGluYXRlQ2FjaGUpOw0K
KyAgICAgICAgICAgIH0NCisgICAgfSAgICANCit9DQorDQogdm9pZCBHcmFwaGljc0xheWVyUXRJ
bXBsOjpzZXRCYXNlVHJhbnNmb3JtKGNvbnN0IFFUcmFuc2Zvcm0mIHRyYW5zZm9ybSkNCiB7DQog
ICAgIGlmICghbV9sYXllcikNCiAgICAgICAgIHJldHVybjsNCi0gICAgLy8gd2Via2l0IGhhcyBy
ZWxhdGl2ZS10by1zaXplIG9yaWdpblBvaW50LCBncmFwaGljcy12aWV3IGhhcyBhIHBpeGVsIG9y
aWdpblBvaW50DQotICAgIC8vIGhlcmUgd2UgY29udmVydA0KLSAgICBRUG9pbnRGIG9yaWdpblRy
YW5zbGF0ZSgNCi0gICAgICAgICAgICBtX2xheWVyLT5hbmNob3JQb2ludCgpLngoKSAqIG1fbGF5
ZXItPnNpemUoKS53aWR0aCgpLCBtX2xheWVyLT5hbmNob3JQb2ludCgpLnkoKSAqIG1fbGF5ZXIt
PnNpemUoKS5oZWlnaHQoKSk7DQotDQotICAgIHJlc2V0VHJhbnNmb3JtKCk7DQotDQotICAgIC8v
IHdlIGhhdmUgdG8gbWFuYWdlIHRoaXMgb3Vyc2VsdmVzIGJlY2F1c2UgUUdyYXBoaWNzVmlldydz
IHRyYW5zZm9ybU9yaWdpbiBpcyBpbmNvbXBsZXRlDQotICAgIHRyYW5zbGF0ZShvcmlnaW5UcmFu
c2xhdGUueCgpLCBvcmlnaW5UcmFuc2xhdGUueSgpKTsNCisgICAgLy8gd2Via2l0IGhhcyByZWxh
dGl2ZS10by1zaXplIG9yaWdpblBvaW50LCBncmFwaGljcy12aWV3IGhhcyBhIHBpeGVsIG9yaWdp
blBvaW50LCBoZXJlIHdlIGNvbnZlcnQNCisgICAgLy8gd2UgaGF2ZSB0byBtYW5hZ2UgdGhpcyBv
dXJzZWx2ZXMgYmVjYXVzZSBRR3JhcGhpY3NWaWV3J3MgdHJhbnNmb3JtT3JpZ2luIGlzIGluY29t
cGF0aWJsZQ0KKyAgICBjb25zdCBxcmVhbCB4ID0gbV9sYXllci0+YW5jaG9yUG9pbnQoKS54KCkg
KiBtX2xheWVyLT5zaXplKCkud2lkdGgoKTsNCisgICAgY29uc3QgcXJlYWwgeSA9IG1fbGF5ZXIt
PmFuY2hvclBvaW50KCkueSgpICogbV9sYXllci0+c2l6ZSgpLmhlaWdodCgpOw0KKyAgICBzZXRU
cmFuc2Zvcm0oUVRyYW5zZm9ybTo6ZnJvbVRyYW5zbGF0ZSh4LCB5KSk7DQogICAgIHNldFRyYW5z
Zm9ybSh0cmFuc2Zvcm0sIHRydWUpOw0KLSAgICB0cmFuc2xhdGUoLW9yaWdpblRyYW5zbGF0ZS54
KCksIC1vcmlnaW5UcmFuc2xhdGUueSgpKTsNCi0gICAgbV9iYXNlVHJhbnNmb20gPSB0cmFuc2Zv
cm07DQorICAgIHRyYW5zbGF0ZSgteCwgLXkpOw0KKyAgICBtX2Jhc2VUcmFuc2Zvcm0gPSB0cmFu
c2Zvcm07DQorfQ0KKw0KK2Jvb2wgR3JhcGhpY3NMYXllclF0SW1wbDo6aXNUcmFuc2Zvcm1Bbmlt
YXRpb25SdW5uaW5nKCkgY29uc3QNCit7DQorICAgIGlmIChtX3RyYW5zZm9ybUFuaW1hdGlvblJ1
bm5pbmcpDQorICAgICAgICByZXR1cm4gdHJ1ZTsNCisgICAgaWYgKEdyYXBoaWNzTGF5ZXJRdElt
cGwqIHBhcmVudCA9IHFvYmplY3RfY2FzdDxHcmFwaGljc0xheWVyUXRJbXBsKj4ocGFyZW50T2Jq
ZWN0KCkpKQ0KKyAgICAgICAgcmV0dXJuIHBhcmVudC0+aXNUcmFuc2Zvcm1BbmltYXRpb25SdW5u
aW5nKCk7DQorICAgIHJldHVybiBmYWxzZTsNCiB9DQogDQogUVBhaW50ZXJQYXRoIEdyYXBoaWNz
TGF5ZXJRdEltcGw6Om9wYXF1ZUFyZWEoKSBjb25zdA0KQEAgLTI3MCw0MiArMzAyLDMxIEBAIHZv
aWQgR3JhcGhpY3NMYXllclF0SW1wbDo6cGFpbnQoUVBhaW50ZXINCiAgICAgZHJhd0NvbnRlbnRz
KHBhaW50ZXIsIG9wdGlvbi0+ZXhwb3NlZFJlY3QpOw0KIH0NCiANCi12b2lkIEdyYXBoaWNzTGF5
ZXJRdEltcGw6OmRyYXdDb250ZW50cyhRUGFpbnRlciogcGFpbnRlciwgY29uc3QgUVJlY3RGJiBy
LCBib29sIG1hc2spDQordm9pZCBHcmFwaGljc0xheWVyUXRJbXBsOjpkcmF3Q29udGVudHMoUVBh
aW50ZXIqIHBhaW50ZXIsIGNvbnN0IFFSZWN0RiYgZXhwb3NlZFJlY3QsIGJvb2wgbWFzaykNCiB7
DQotICAgIFFSZWN0IHJlY3QgPSByLnRvQWxpZ25lZFJlY3QoKTsNCi0gICAgDQotICAgIGlmICht
X2N1cnJlbnRDb250ZW50LmNvbnRlbnRUeXBlICE9IEhUTUxDb250ZW50VHlwZSAmJiAhbV9zdGF0
ZS5jb250ZW50c1JlY3QuaXNFbXB0eSgpKQ0KLSAgICAgICAgcmVjdCA9IHJlY3QuaW50ZXJzZWN0
ZWQobV9zdGF0ZS5jb250ZW50c1JlY3QpOw0KLQ0KICAgICBpZiAobV9jdXJyZW50Q29udGVudC5i
YWNrZ3JvdW5kQ29sb3IuaXNWYWxpZCgpKQ0KLSAgICAgICAgcGFpbnRlci0+ZmlsbFJlY3Qociwg
UUNvbG9yKG1fY3VycmVudENvbnRlbnQuYmFja2dyb3VuZENvbG9yKSk7DQorICAgICAgICBwYWlu
dGVyLT5maWxsUmVjdChleHBvc2VkUmVjdCwgUUNvbG9yKG1fY3VycmVudENvbnRlbnQuYmFja2dy
b3VuZENvbG9yKSk7DQogDQotICAgIGlmICghcmVjdC5pc0VtcHR5KCkpIHsNCi0gICAgICAgIHN3
aXRjaCAobV9jdXJyZW50Q29udGVudC5jb250ZW50VHlwZSkgew0KLSAgICAgICAgY2FzZSBQaXht
YXBDb250ZW50VHlwZToNCi0gICAgICAgICAgICAvLyB3ZSBoYXZlIHRvIHNjYWxlIHRoZSBpbWFn
ZSB0byB0aGUgY29udGVudHNSZWN0DQotICAgICAgICAgICAgLy8gRklYTUU6IGEgYmV0dGVyIHdh
eSB3b3VsZCBwcm9iYWJseSBiZSBkcmF3UGl4bWFwIHdpdGggYSBzcmMvdGFyZ2V0IHJlY3QNCi0g
ICAgICAgICAgICBwYWludGVyLT5kcmF3UGl4bWFwKHJlY3QudG9wTGVmdCgpLCBtX2N1cnJlbnRD
b250ZW50LnBpeG1hcC5zY2FsZWQobV9zdGF0ZS5jb250ZW50c1JlY3Quc2l6ZSgpKSwgcik7DQot
ICAgICAgICAgICAgYnJlYWs7DQotICAgICAgICBjYXNlIENvbG9yQ29udGVudFR5cGU6DQotICAg
ICAgICAgICAgcGFpbnRlci0+ZmlsbFJlY3QocmVjdCwgbV9jdXJyZW50Q29udGVudC5jb250ZW50
c0JhY2tncm91bmRDb2xvcik7DQotICAgICAgICAgICAgYnJlYWs7DQotICAgICAgICBkZWZhdWx0
Og0KLSAgICAgICAgICAgIGlmIChtX3N0YXRlLmRyYXdzQ29udGVudCkgew0KLSAgICAgICAgICAg
ICAgICAvLyB0aGlzIGlzIHRoZSAiZXhwZW5zaXZlIiBiaXQuIHdlIHRyeSB0byBtaW5pbWl6ZSBj
YWxscyB0byB0aGlzDQotICAgICAgICAgICAgICAgIC8vIG5lY2sgb2YgdGhlIHdvb2RzIGJ5IHBy
b3BlciBjYWNoaW5nDQotICAgICAgICAgICAgICAgIEdyYXBoaWNzQ29udGV4dCBnYyhwYWludGVy
KTsNCi0gICAgICAgICAgICAgICAgbV9sYXllci0+cGFpbnRHcmFwaGljc0xheWVyQ29udGVudHMo
Z2MsIHJlY3QpOw0KLSAgICAgICAgICAgIH0NCi0gICAgICAgICAgICBicmVhazsNCisgICAgc3dp
dGNoIChtX2N1cnJlbnRDb250ZW50LmNvbnRlbnRUeXBlKSB7DQorICAgIGNhc2UgUGl4bWFwQ29u
dGVudFR5cGU6DQorICAgICAgICBwYWludGVyLT5kcmF3UGl4bWFwKG1fc3RhdGUuY29udGVudHNS
ZWN0LCBtX2N1cnJlbnRDb250ZW50LnBpeG1hcCk7DQorICAgICAgICBicmVhazsNCisgICAgY2Fz
ZSBDb2xvckNvbnRlbnRUeXBlOg0KKyAgICAgICAgcGFpbnRlci0+ZmlsbFJlY3QobV9zdGF0ZS5j
b250ZW50c1JlY3QsIG1fY3VycmVudENvbnRlbnQuY29udGVudHNCYWNrZ3JvdW5kQ29sb3IpOw0K
KyAgICAgICAgYnJlYWs7DQorICAgIGRlZmF1bHQ6DQorICAgICAgICBpZiAobV9zdGF0ZS5kcmF3
c0NvbnRlbnQpIHsNCisgICAgICAgICAgICAvLyB0aGlzIGlzIHRoZSAiZXhwZW5zaXZlIiBiaXQu
IHdlIHRyeSB0byBtaW5pbWl6ZSBjYWxscyB0byB0aGlzIG5lY2sgb2YgdGhlIHdvb2RzIGJ5IHBy
b3BlciBjYWNoaW5nDQorICAgICAgICAgICAgR3JhcGhpY3NDb250ZXh0IGdjKHBhaW50ZXIpOw0K
KyAgICAgICAgICAgIG1fbGF5ZXItPnBhaW50R3JhcGhpY3NMYXllckNvbnRlbnRzKGdjLCBleHBv
c2VkUmVjdC50b0FsaWduZWRSZWN0KCkpOw0KICAgICAgICAgfQ0KKyAgICAgICAgYnJlYWs7DQog
ICAgIH0NCiB9DQogDQogdm9pZCBHcmFwaGljc0xheWVyUXRJbXBsOjpub3RpZnlDaGFuZ2UoQ2hh
bmdlTWFzayBjaGFuZ2VNYXNrKQ0KIHsNCi0gICAgaWYgKCF0aGlzKQ0KLSAgICAgICAgcmV0dXJu
Ow0KKyAgICBRX0FTU0VSVCh0aGlzKTsNCiANCiAgICAgbV9jaGFuZ2VNYXNrIHw9IGNoYW5nZU1h
c2s7DQogDQpAQCAtMzQyLDE0ICszNjMsMTQgQEAgdm9pZCBHcmFwaGljc0xheWVyUXRJbXBsOjpm
bHVzaENoYW5nZXMoYg0KICAgICAgICAgY29uc3QgUVNldDxRR3JhcGhpY3NJdGVtKj4gY3VycmVu
dENoaWxkcmVuID0gY2hpbGRJdGVtcygpLnRvU2V0KCk7DQogICAgICAgICBjb25zdCBRU2V0PFFH
cmFwaGljc0l0ZW0qPiBjaGlsZHJlblRvQWRkID0gbmV3Q2hpbGRyZW4gLSBjdXJyZW50Q2hpbGRy
ZW47DQogICAgICAgICBjb25zdCBRU2V0PFFHcmFwaGljc0l0ZW0qPiBjaGlsZHJlblRvUmVtb3Zl
ID0gY3VycmVudENoaWxkcmVuIC0gbmV3Q2hpbGRyZW47DQotICAgICAgICBmb3IgKFFTZXQ8UUdy
YXBoaWNzSXRlbSo+Ojpjb25zdF9pdGVyYXRvciBpdCA9IGNoaWxkcmVuVG9BZGQuYmVnaW4oKTsg
aXQgIT0gY2hpbGRyZW5Ub0FkZC5lbmQoKTsgKytpdCkgew0KKw0KKyAgICAgICAgZm9yIChRU2V0
PFFHcmFwaGljc0l0ZW0qPjo6Y29uc3RfaXRlcmF0b3IgaXQgPSBjaGlsZHJlblRvQWRkLmJlZ2lu
KCk7IGl0ICE9IGNoaWxkcmVuVG9BZGQuZW5kKCk7ICsraXQpDQogICAgICAgICAgICAgIGlmIChR
R3JhcGhpY3NJdGVtKiB3ID0gKml0KQ0KICAgICAgICAgICAgICAgICB3LT5zZXRQYXJlbnRJdGVt
KHRoaXMpOw0KLSAgICAgICAgfQ0KLSAgICAgICAgZm9yIChRU2V0PFFHcmFwaGljc0l0ZW0qPjo6
Y29uc3RfaXRlcmF0b3IgaXQgPSBjaGlsZHJlblRvUmVtb3ZlLmJlZ2luKCk7IGl0ICE9IGNoaWxk
cmVuVG9SZW1vdmUuZW5kKCk7ICsraXQpIHsNCisNCisgICAgICAgIGZvciAoUVNldDxRR3JhcGhp
Y3NJdGVtKj46OmNvbnN0X2l0ZXJhdG9yIGl0ID0gY2hpbGRyZW5Ub1JlbW92ZS5iZWdpbigpOyBp
dCAhPSBjaGlsZHJlblRvUmVtb3ZlLmVuZCgpOyArK2l0KQ0KICAgICAgICAgICAgICBpZiAoUUdy
YXBoaWNzSXRlbSogdyA9ICppdCkNCiAgICAgICAgICAgICAgICAgdy0+c2V0UGFyZW50SXRlbSgw
KTsNCi0gICAgICAgIH0NCiANCiAgICAgICAgIC8vIGNoaWxkcmVuIGFyZSBvcmRlcmVkIGJ5IHot
dmFsdWUsIGxldCBncmFwaGljcy12aWV3IGtub3cuDQogICAgICAgICBmb3IgKHNpemVfdCBpID0g
MDsgaSA8IG5ld0NoaWxkcmVuVmVjdG9yLnNpemUoKTsgKytpKQ0KQEAgLTM4MywxNyArNDA0LDE3
IEBAIHZvaWQgR3JhcGhpY3NMYXllclF0SW1wbDo6Zmx1c2hDaGFuZ2VzKGINCiAgICAgICAgIC8v
IHRoZSBhbmNob3ItcG9pbnQsIHRyYW5zZm9ybSBhbmQgc2l6ZSBmcm9tIFdlYkNvcmUgYWxsIGFm
ZmVjdCB0aGUgb25lDQogICAgICAgICAvLyB0aGF0IHdlIGdpdmUgUXQNCiAgICAgICAgIGlmICht
X3N0YXRlLnRyYW5zZm9ybSAhPSBtX2xheWVyLT50cmFuc2Zvcm0oKSB8fCBtX3N0YXRlLmFuY2hv
clBvaW50ICE9IG1fbGF5ZXItPmFuY2hvclBvaW50KCkgfHwgbV9zdGF0ZS5zaXplICE9IG1fbGF5
ZXItPnNpemUoKSkNCi0gICAgICAgICAgICBzZXRCYXNlVHJhbnNmb3JtKFFUcmFuc2Zvcm0obV9s
YXllci0+dHJhbnNmb3JtKCkpKTsNCisgICAgICAgICAgICBzZXRCYXNlVHJhbnNmb3JtKG1fbGF5
ZXItPnRyYW5zZm9ybSgpKTsNCiAgICAgfQ0KIA0KICAgICBpZiAobV9jaGFuZ2VNYXNrICYgKENv
bnRlbnRDaGFuZ2UgfCBEcmF3c0NvbnRlbnRDaGFuZ2UpKSB7DQogICAgICAgICBzd2l0Y2ggKG1f
cGVuZGluZ0NvbnRlbnQuY29udGVudFR5cGUpIHsNCiAgICAgICAgIGNhc2UgUGl4bWFwQ29udGVu
dFR5cGU6DQotICAgICAgICAgICAgLy8gd2UgbmVlZCBjYWNoZSBldmVuIGZvciBpbWFnZXMsIGJl
Y2F1c2UgdGhleSBuZWVkIHRvIGJlIHJlc2l6ZWQNCi0gICAgICAgICAgICAvLyB0byB0aGUgY29u
dGVudHMgcmVjdC4gbWF5YmUgdGhpcyBjYW4gYmUgb3B0aW1pemVkIHRob3VnaA0KLSAgICAgICAg
ICAgIHNldENhY2hlTW9kZShtX3RyYW5zZm9ybUFuaW1hdGlvblJ1bm5pbmcgPyBJdGVtQ29vcmRp
bmF0ZUNhY2hlIDogRGV2aWNlQ29vcmRpbmF0ZUNhY2hlKTsNCiAgICAgICAgICAgICB1cGRhdGUo
KTsNCiAgICAgICAgICAgICBzZXRGbGFnKEl0ZW1IYXNOb0NvbnRlbnRzLCBmYWxzZSk7DQorDQor
ICAgICAgICAgICAgLy8gd2Ugb25seSB1c2UgSXRlbVVzZXNFeHRlbmRlZFN0eWxlT3B0aW9uIGZv
ciBIVE1MIGNvbnRlbnQgLSBwaXhtYXAgY2FuIGJlIGhhbmRsZWQgYmV0dGVyIHdpdGggcmVndWxh
ciBjbGlwcGluZw0KKyAgICAgICAgICAgIHNldEZsYWcoUUdyYXBoaWNzSXRlbTo6SXRlbVVzZXNF
eHRlbmRlZFN0eWxlT3B0aW9uLCBmYWxzZSk7DQogICAgICAgICAgICAgYnJlYWs7DQogDQogICAg
ICAgICBjYXNlIENvbG9yQ29udGVudFR5cGU6DQpAQCAtNDAzLDYgKzQyNCw5IEBAIHZvaWQgR3Jh
cGhpY3NMYXllclF0SW1wbDo6Zmx1c2hDaGFuZ2VzKGINCiAgICAgICAgICAgICAgICAgdXBkYXRl
KCk7DQogICAgICAgICAgICAgbV9zdGF0ZS5kcmF3c0NvbnRlbnQgPSBmYWxzZTsNCiAgICAgICAg
ICAgICBzZXRGbGFnKEl0ZW1IYXNOb0NvbnRlbnRzLCBmYWxzZSk7DQorDQorICAgICAgICAgICAg
Ly8gd2Ugb25seSB1c2UgSXRlbVVzZXNFeHRlbmRlZFN0eWxlT3B0aW9uIGZvciBIVE1MIGNvbnRl
bnQgLSBjb2xvcnMgZG9uJ3QgZ2FpbiBtdWNoIGZyb20gdGhhdCBhbnl3YXkNCisgICAgICAgICAg
ICBzZXRGbGFnKFFHcmFwaGljc0l0ZW06Okl0ZW1Vc2VzRXh0ZW5kZWRTdHlsZU9wdGlvbiwgZmFs
c2UpOw0KICAgICAgICAgICAgIGJyZWFrOw0KIA0KICAgICAgICAgY2FzZSBIVE1MQ29udGVudFR5
cGU6DQpAQCAtNDEwLDggKzQzNCwxNiBAQCB2b2lkIEdyYXBoaWNzTGF5ZXJRdEltcGw6OmZsdXNo
Q2hhbmdlcyhiDQogICAgICAgICAgICAgICAgIHVwZGF0ZSgpOw0KICAgICAgICAgICAgIGlmICgh
bV9zdGF0ZS5kcmF3c0NvbnRlbnQgJiYgbV9sYXllci0+ZHJhd3NDb250ZW50KCkpDQogICAgICAg
ICAgICAgICAgIHVwZGF0ZSgpOw0KLSAgICAgICAgICAgIGlmIChtX2xheWVyLT5kcmF3c0NvbnRl
bnQoKSkNCi0gICAgICAgICAgICAgICAgc2V0Q2FjaGVNb2RlKG1fdHJhbnNmb3JtQW5pbWF0aW9u
UnVubmluZyA/IEl0ZW1Db29yZGluYXRlQ2FjaGUgOiBEZXZpY2VDb29yZGluYXRlQ2FjaGUpOw0K
KyAgICAgICAgICAgICAgICBpZiAobV9sYXllci0+ZHJhd3NDb250ZW50KCkpIHsNCisgICAgICAg
ICAgICAgICAgICAgIGNvbnN0IFFHcmFwaGljc0l0ZW06OkNhY2hlTW9kZSBtZXdDYWNoZU1vZGUg
PSBpc1RyYW5zZm9ybUFuaW1hdGlvblJ1bm5pbmcoKSA/IEl0ZW1Db29yZGluYXRlQ2FjaGUgOiBE
ZXZpY2VDb29yZGluYXRlQ2FjaGU7DQorDQorICAgICAgICAgICAgICAgICAgICAvLyBvcHRpbWl6
YXRpb246IFFHcmFwaGljc0l0ZW0gZG9lc24ndCBhbHdheXMgcGVyZm9ybSB0aGlzIHRlc3QNCisg
ICAgICAgICAgICAgICAgICAgIGlmIChtZXdDYWNoZU1vZGUgIT0gY2FjaGVNb2RlKCkpDQorICAg
ICAgICAgICAgICAgICAgICAgICAgc2V0Q2FjaGVNb2RlKG1ld0NhY2hlTW9kZSk7DQorDQorICAg
ICAgICAgICAgICAgICAgICAvLyBIVE1MIGNvbnRlbnQ6IHdlIHdhbnQgdG8gdXNlIGV4cG9zZWRS
ZWN0IHNvIHdlIGRvbid0IHVzZSBXZWJDb3JlIHJlbmRlcmluZyBpZiB3ZSBkb24ndCBoYXZlIHRv
DQorICAgICAgICAgICAgICAgICAgICBzZXRGbGFnKFFHcmFwaGljc0l0ZW06Okl0ZW1Vc2VzRXh0
ZW5kZWRTdHlsZU9wdGlvbiwgdHJ1ZSk7DQorICAgICAgICAgICAgICAgIH0NCiAgICAgICAgICAg
ICBlbHNlDQogICAgICAgICAgICAgICAgIHNldENhY2hlTW9kZShOb0NhY2hlKTsNCiANCkBAIC00
NDgsNyArNDgwLDcgQEAgdm9pZCBHcmFwaGljc0xheWVyUXRJbXBsOjpmbHVzaENoYW5nZXMoYg0K
ICAgICAgICAgdXBkYXRlKCk7DQogDQogICAgIC8vIEZJWE1FOiB0aGUgZm9sbG93aW5nIGZsYWdz
IGFyZSBjdXJyZW50bHkgbm90IGhhbmRsZWQsIGFzIHRoZXkgZG9uJ3QgaGF2ZSBhIGNsZWFyIHRl
c3Qgb3IgYXJlIGluIGxvdyBwcmlvcml0eQ0KLSAgICAvLyBHZW9tZXRyeU9yaWVudGF0aW9uQ2hh
bmdlLCBDb250ZW50c09yaWVudGF0aW9uQ2hhbmdlLCBCYWNrZmFjZVZpc2liaWxpdHlDaGFuZ2Us
IENoaWxkcmVuVHJhbnNmb3JtQ2hhbmdlDQorICAgIC8vIEdlb21ldHJ5T3JpZW50YXRpb25DaGFu
Z2UsIENvbnRlbnRzT3JpZW50YXRpb25DaGFuZ2UsIEJhY2tmYWNlVmlzaWJpbGl0eUNoYW5nZSwg
Q2hpbGRyZW5UcmFuc2Zvcm1DaGFuZ2UsIFByZXNlcnZlczNEQ2hhbmdlDQogDQogICAgIG1fc3Rh
dGUubWFza0xheWVyID0gbV9sYXllci0+bWFza0xheWVyKCk7DQogICAgIG1fc3RhdGUucG9zID0g
bV9sYXllci0+cG9zaXRpb24oKTsNCkBAIC01MjMsOSArNTU1LDkgQEAgdm9pZCBHcmFwaGljc0xh
eWVyUXQ6OnNldE5lZWRzRGlzcGxheSgpDQogfQ0KIA0KIC8vIHJlaW1wIGZyb20gR3JhcGhpY3NM
YXllci5oDQotdm9pZCBHcmFwaGljc0xheWVyUXQ6OnNldE5lZWRzRGlzcGxheUluUmVjdChjb25z
dCBGbG9hdFJlY3QmIHIpDQordm9pZCBHcmFwaGljc0xheWVyUXQ6OnNldE5lZWRzRGlzcGxheUlu
UmVjdChjb25zdCBGbG9hdFJlY3QmIHJlY3QpDQogew0KLSAgICBtX2ltcGwtPm1fcGVuZGluZ0Nv
bnRlbnQucmVnaW9uVG9VcGRhdGV8PSBRUmVjdEYocikudG9BbGlnbmVkUmVjdCgpOw0KKyAgICBt
X2ltcGwtPm1fcGVuZGluZ0NvbnRlbnQucmVnaW9uVG9VcGRhdGV8PSBRUmVjdEYocmVjdCkudG9B
bGlnbmVkUmVjdCgpOw0KICAgICBtX2ltcGwtPm5vdGlmeUNoYW5nZShHcmFwaGljc0xheWVyUXRJ
bXBsOjpEaXNwbGF5Q2hhbmdlKTsNCiB9DQogDQpAQCAtODA3LDE2ICs4MzksMTYgQEAgc3RhdGlj
IGlubGluZSBkb3VibGUgc29sdmVDdWJpY0JlemllckZ1bg0KIC8vIFVzaW5nIGVhc2luZy1jdXJ2
ZXMgd291bGQgcHJvYmFibHkgd29yayBmb3Igc29tZSBvZiB0aGUgY2FzZXMsIGJ1dCB3b3VsZG4n
dCByZWFsbHkgYnV5IHVzIGFueXRoaW5nIGFzIHdlJ2QgaGF2ZSB0byBjb252ZXJ0IHRoZSBiZXpp
ZXIgZnVuY3Rpb24gYmFjayB0byBhbiBlYXNpbmcgY3VydmUNCiBzdGF0aWMgaW5saW5lIHFyZWFs
IGFwcGx5VGltaW5nRnVuY3Rpb24oY29uc3QgVGltaW5nRnVuY3Rpb24mIHRpbWluZ0Z1bmN0aW9u
LCBxcmVhbCBwcm9ncmVzcywgaW50IGR1cmF0aW9uKQ0KIHsNCi0gICAgaWYgKHRpbWluZ0Z1bmN0
aW9uLnR5cGUoKSA9PSBMaW5lYXJUaW1pbmdGdW5jdGlvbikNCisgICAgICAgIGlmICh0aW1pbmdG
dW5jdGlvbi50eXBlKCkgPT0gTGluZWFyVGltaW5nRnVuY3Rpb24pDQorICAgICAgICAgICAgcmV0
dXJuIHByb2dyZXNzOw0KKyAgICAgICAgaWYgKHRpbWluZ0Z1bmN0aW9uLnR5cGUoKSA9PSBDdWJp
Y0JlemllclRpbWluZ0Z1bmN0aW9uKSB7DQorICAgICAgICAgICAgcmV0dXJuIHNvbHZlQ3ViaWNC
ZXppZXJGdW5jdGlvbih0aW1pbmdGdW5jdGlvbi54MSgpLA0KKyAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgdGltaW5nRnVuY3Rpb24ueTEoKSwNCisgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHRpbWluZ0Z1bmN0aW9uLngyKCksDQor
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB0aW1pbmdGdW5jdGlv
bi55MigpLA0KKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZG91
YmxlKHByb2dyZXNzKSwgZG91YmxlKGR1cmF0aW9uKSAvIDEwMDApOw0KKyAgICAgICAgfQ0KICAg
ICAgICAgcmV0dXJuIHByb2dyZXNzOw0KLSAgICBpZiAodGltaW5nRnVuY3Rpb24udHlwZSgpID09
IEN1YmljQmV6aWVyVGltaW5nRnVuY3Rpb24pIHsNCi0gICAgICAgIHJldHVybiBzb2x2ZUN1Ymlj
QmV6aWVyRnVuY3Rpb24odGltaW5nRnVuY3Rpb24ueDEoKSwNCi0gICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgdGltaW5nRnVuY3Rpb24ueTEoKSwNCi0gICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgdGltaW5nRnVuY3Rpb24ueDIoKSwNCi0gICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdGltaW5nRnVuY3Rpb24ueTIoKSwNCi0g
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZG91YmxlKHByb2dyZXNzKSwg
ZG91YmxlKGR1cmF0aW9uKSAvIDEwMDApOw0KLSAgICB9DQotICAgIHJldHVybiBwcm9ncmVzczsN
CiB9DQogDQogLy8gaGVscGVyIGZ1bmN0aW9ucyB0byBzYWZlbHkgZ2V0IGEgdmFsdWUgb3V0IG9m
IFdlYkNvcmUncyBBbmltYXRpb25WYWx1ZSoNCkBAIC04MjYsOSArODU4LDcgQEAgc3RhdGljIHZv
aWQgd2Via2l0QW5pbWF0aW9uVG9RdEFuaW1hdGlvbg0KICAgICBpZiAoIWFuaW1hdGlvblZhbHVl
KQ0KICAgICAgICAgcmV0dXJuOw0KIA0KLSAgICBjb25zdCBUcmFuc2Zvcm1PcGVyYXRpb25zKiBv
cHMgPSBzdGF0aWNfY2FzdDxjb25zdCBUcmFuc2Zvcm1BbmltYXRpb25WYWx1ZSo+KGFuaW1hdGlv
blZhbHVlKS0+dmFsdWUoKTsNCi0NCi0gICAgaWYgKG9wcykNCisgICAgaWYgKGNvbnN0IFRyYW5z
Zm9ybU9wZXJhdGlvbnMqIG9wcyA9IHN0YXRpY19jYXN0PGNvbnN0IFRyYW5zZm9ybUFuaW1hdGlv
blZhbHVlKj4oYW5pbWF0aW9uVmFsdWUpLT52YWx1ZSgpKQ0KICAgICAgICAgdHJhbnNmb3JtT3Bl
cmF0aW9ucyA9ICpvcHM7DQogfQ0KIA0KQEAgLTg1Niw4ICs4ODYsOCBAQCBwdWJsaWM6DQogICAg
ICAgICBRQWJzdHJhY3RBbmltYXRpb246OnVwZGF0ZVN0YXRlKG5ld1N0YXRlLCBvbGRTdGF0ZSk7
DQogDQogICAgICAgICAvLyBmb3Igc29tZSByZWFzb24gSSBoYXZlIGRvIHRoaXMgYXN5bmNocm9u
b3VzbHkgLSBvciB0aGUgYW5pbWF0aW9uIHdvbid0IHdvcmsNCi0gICAgICAgIGlmIChuZXdTdGF0
ZSA9PSBSdW5uaW5nICYmIG9sZFN0YXRlID09IFN0b3BwZWQpDQotICAgICAgICAgICAgUVRpbWVy
OjpzaW5nbGVTaG90KDAsIG1fbGF5ZXIuZGF0YSgpLCBTTE9UKG5vdGlmeUFuaW1hdGlvblN0YXJ0
ZWQoKSkpOw0KKyAgICAgICAgaWYgKG5ld1N0YXRlID09IFJ1bm5pbmcgJiYgb2xkU3RhdGUgPT0g
U3RvcHBlZCAmJiBtX2xheWVyLmRhdGEoKSkNCisgICAgICAgICAgICBtX2xheWVyLmRhdGEoKS0+
bm90aWZ5QW5pbWF0aW9uU3RhcnRlZEFzeW5jKCk7DQogICAgIH0NCiANCiAgICAgdmlydHVhbCBp
bnQgZHVyYXRpb24oKSBjb25zdCB7IHJldHVybiBtX2R1cmF0aW9uOyB9DQpAQCAtOTMyLDkgKzk2
MiwxMCBAQCBwcm90ZWN0ZWQ6DQogDQogICAgICAgICAvLyBub3cgd2UgaGF2ZSBhIHNvdXJjZSBr
ZXlmcmFtZSwgb3JpZ2luIGtleWZyYW1lIGFuZCBhIHRpbWluZyBmdW5jdGlvbg0KICAgICAgICAg
Ly8gd2UgY2FuIG5vdyBwcm9jZXNzIHRoZSBwcm9ncmVzcyBhbmQgYXBwbHkgdGhlIGZyYW1lDQot
ICAgICAgICBxcmVhbCBub3JtYWxpemVkUHJvZ3Jlc3MgPSAoaXQua2V5KCkgPT0gaXQyLmtleSgp
KSA/IDAgOiAocHJvZ3Jlc3MgLSBpdC5rZXkoKSkgLyAoaXQyLmtleSgpIC0gaXQua2V5KCkpOw0K
LSAgICAgICAgbm9ybWFsaXplZFByb2dyZXNzID0gYXBwbHlUaW1pbmdGdW5jdGlvbih0aW1pbmdG
dW5jLCBub3JtYWxpemVkUHJvZ3Jlc3MsIGR1cmF0aW9uKCkgLyAxMDAwKTsNCi0gICAgICAgIGFw
cGx5RnJhbWUoZnJvbVZhbHVlLCB0b1ZhbHVlLCBub3JtYWxpemVkUHJvZ3Jlc3MpOw0KKyAgICAg
ICAgcHJvZ3Jlc3MgPSAoIXByb2dyZXNzIHx8IHByb2dyZXNzID09IDEgfHwgaXQua2V5KCkgPT0g
aXQyLmtleSgpKQ0KKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPyBw
cm9ncmVzcw0KKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgOiBhcHBs
eVRpbWluZ0Z1bmN0aW9uKHRpbWluZ0Z1bmMsIChwcm9ncmVzcyAtIGl0LmtleSgpKSAvIChpdDIu
a2V5KCkgLSBpdC5rZXkoKSksIGR1cmF0aW9uKCkgLyAxMDAwKTsNCisgICAgICAgIGFwcGx5RnJh
bWUoZnJvbVZhbHVlLCB0b1ZhbHVlLCBwcm9ncmVzcyk7DQogICAgIH0NCiANCiAgICAgUU1hcDxx
cmVhbCwgS2V5ZnJhbWVWYWx1ZVF0PFQ+ID4gbV9rZXlmcmFtZVZhbHVlczsNCkBAIC05NDMsNyAr
OTc0LDcgQEAgcHJvdGVjdGVkOg0KIGNsYXNzIFRyYW5zZm9ybUFuaW1hdGlvblF0IDogcHVibGlj
IEFuaW1hdGlvblF0PFRyYW5zZm9ybU9wZXJhdGlvbnM+IHsNCiBwdWJsaWM6DQogICAgIFRyYW5z
Zm9ybUFuaW1hdGlvblF0KEdyYXBoaWNzTGF5ZXJRdEltcGwqIGxheWVyLCBjb25zdCBLZXlmcmFt
ZVZhbHVlTGlzdCYgdmFsdWVzLCBjb25zdCBJbnRTaXplJiBib3hTaXplLCBjb25zdCBBbmltYXRp
b24qIGFuaW0sIGNvbnN0IFFTdHJpbmcgJiBuYW1lKQ0KLSAgICAgICAgICAgICAgICA6IEFuaW1h
dGlvblF0PFRyYW5zZm9ybU9wZXJhdGlvbnM+KGxheWVyLCB2YWx1ZXMsIGJveFNpemUsIGFuaW0s
IG5hbWUpDQorICAgICAgICA6IEFuaW1hdGlvblF0PFRyYW5zZm9ybU9wZXJhdGlvbnM+KGxheWVy
LCB2YWx1ZXMsIGJveFNpemUsIGFuaW0sIG5hbWUpDQogICAgIHsNCiAgICAgfQ0KIA0KQEAgLTk1
Miw3ICs5ODMsNyBAQCBwdWJsaWM6DQogICAgICAgICAvLyB0aGlzIGNhbWUgdXAgZHVyaW5nIHRo
ZSBjb21wb3NpdGluZy9hbmltYXRpb24gTGF5b3V0VGVzdHMNCiAgICAgICAgIC8vIHdoZW4gdGhl
IGFuaW1hdGlvbiBkaWVzLCB0aGUgdHJhbnNmb3JtIGhhcyB0byBnbyBiYWNrIHRvIGRlZmF1bHQN
CiAgICAgICAgIGlmIChtX2xheWVyKQ0KLSAgICAgICAgICAgIG1fbGF5ZXIuZGF0YSgpLT5zZXRC
YXNlVHJhbnNmb3JtKFFUcmFuc2Zvcm0obV9sYXllci5kYXRhKCktPm1fbGF5ZXItPnRyYW5zZm9y
bSgpKSk7DQorICAgICAgICAgICAgbV9sYXllci5kYXRhKCktPnNldEJhc2VUcmFuc2Zvcm0obV9s
YXllci5kYXRhKCktPm1fbGF5ZXItPnRyYW5zZm9ybSgpKTsNCiAgICAgfQ0KIA0KICAgICAvLyB0
aGUgaWRlYSBpcyB0aGF0IHdlIGxldCBXZWJDb3JlIG1hbmFnZSB0aGUgdHJhbnNmb3JtLW9wZXJh
dGlvbnMNCkBAIC05NjMsMTEgKzk5NCwyMiBAQCBwdWJsaWM6DQogICAgIHsNCiAgICAgICAgIFRy
YW5zZm9ybWF0aW9uTWF0cml4IHRyYW5zZm9ybU1hdHJpeDsNCiANCi0gICAgICAgIC8vIHRoaXMg
bG9va3Mgc2ltcGxlIGJ1dCBpcyByZWFsbHkgdHJpY2t5IHRvIGdldCByaWdodC4gVXNlIGNhdXRp
b24uDQotICAgICAgICBmb3IgKHNpemVfdCBpID0gMDsgaSA8IHRhcmdldE9wZXJhdGlvbnMuc2l6
ZSgpOyArK2kpDQotICAgICAgICAgICAgdGFyZ2V0T3BlcmF0aW9ucy5vcGVyYXRpb25zKClbaV0t
PmJsZW5kKHNvdXJjZU9wZXJhdGlvbnMuYXQoaSksIHByb2dyZXNzKS0+YXBwbHkodHJhbnNmb3Jt
TWF0cml4LCBtX2JveFNpemUpOw0KLQ0KLSAgICAgICAgbV9sYXllci5kYXRhKCktPnNldEJhc2VU
cmFuc2Zvcm0oUVRyYW5zZm9ybSh0cmFuc2Zvcm1NYXRyaXgpKTsNCisgICAgICAgIC8vIHNvbWV0
aW1lcyB0aGUgYW5pbWF0aW9uIHZhbHVlcyBmcm9tIFdlYkNvcmUgYXJlIG1pc2xlYWRpbmcgYW5k
IHdlIGhhdmUgdG8gdXNlIHRoZSBhY3R1YWwgbWF0cml4IGFzIHNvdXJjZQ0KKyAgICAgICAgLy8g
VGhlIE1hYyBpbXBsZW1lbnRhdGlvbiBzaW1wbHkgZG9lc24ndCB0cnkgdG8gYWNjZWxlcmF0ZSB0
aG9zZSAoZS5nLiAzNjBkZWcgcm90YXRpb24pLCBidXQgd2UgZG8uDQorICAgICAgICBpZiAocHJv
Z3Jlc3MgPT0gMSB8fCAhdGFyZ2V0T3BlcmF0aW9ucy5zaXplKCkgfHwgc291cmNlT3BlcmF0aW9u
cyA9PSB0YXJnZXRPcGVyYXRpb25zKSB7DQorICAgICAgICAgICAgVHJhbnNmb3JtYXRpb25NYXRy
aXggc291cmNlTWF0cml4Ow0KKyAgICAgICAgICAgIHNvdXJjZU9wZXJhdGlvbnMuYXBwbHkobV9i
b3hTaXplLCBzb3VyY2VNYXRyaXgpOw0KKyAgICAgICAgICAgIHRyYW5zZm9ybU1hdHJpeCA9IG1f
c291cmNlTWF0cml4Ow0KKyAgICAgICAgICAgIHRyYW5zZm9ybU1hdHJpeC5ibGVuZChzb3VyY2VN
YXRyaXgsIDEgLSBwcm9ncmVzcyk7DQorICAgICAgICB9IGVsc2UgaWYgKHRhcmdldE9wZXJhdGlv
bnMuc2l6ZSgpICE9IHNvdXJjZU9wZXJhdGlvbnMuc2l6ZSgpKSB7DQorICAgICAgICAgICAgdHJh
bnNmb3JtTWF0cml4ID0gbV9zb3VyY2VNYXRyaXg7DQorICAgICAgICAgICAgdGFyZ2V0T3BlcmF0
aW9ucy5hcHBseShtX2JveFNpemUsIHRyYW5zZm9ybU1hdHJpeCk7DQorICAgICAgICAgICAgdHJh
bnNmb3JtTWF0cml4LmJsZW5kKG1fc291cmNlTWF0cml4LCBwcm9ncmVzcyk7DQorICAgICAgICB9
IGVsc2Ugew0KKyAgICAgICAgICAgIGZvciAoc2l6ZV90IGkgPSAwOyBpIDwgdGFyZ2V0T3BlcmF0
aW9ucy5zaXplKCk7ICsraSkNCisgICAgICAgICAgICAgICAgdGFyZ2V0T3BlcmF0aW9ucy5vcGVy
YXRpb25zKClbaV0tPmJsZW5kKHNvdXJjZU9wZXJhdGlvbnMuYXQoaSksIHByb2dyZXNzKS0+YXBw
bHkodHJhbnNmb3JtTWF0cml4LCBtX2JveFNpemUpOw0KKyAgICAgICAgfQ0KKyAgICAgICAgbV9s
YXllci5kYXRhKCktPnNldEJhc2VUcmFuc2Zvcm0odHJhbnNmb3JtTWF0cml4KTsNCiAgICAgfQ0K
IA0KICAgICB2aXJ0dWFsIHZvaWQgdXBkYXRlU3RhdGUoUUFic3RyYWN0QW5pbWF0aW9uOjpTdGF0
ZSBuZXdTdGF0ZSwgUUFic3RyYWN0QW5pbWF0aW9uOjpTdGF0ZSBvbGRTdGF0ZSkNCkBAIC05ODAs
MTUgKzEwMjIsMTYgQEAgcHVibGljOg0KICAgICAgICAgLy8gdG8gaW5jcmVhc2UgRlBTLCB3ZSB1
c2UgYSBsZXNzIGFjY3VyYXRlIGNhY2hpbmcgbWVjaGFuaXNtIHdoaWxlIGFuaW1hdGlvbiBpcyBn
b2luZyBvbg0KICAgICAgICAgLy8gdGhpcyBpcyBhIFVYIGNob2ljZSB0aGF0IHNob3VsZCBwcm9i
YWJseSBiZSBjdXN0b21pemFibGUNCiAgICAgICAgIGlmIChuZXdTdGF0ZSA9PSBRQWJzdHJhY3RB
bmltYXRpb246OlJ1bm5pbmcpIHsNCisgICAgICAgICAgICBtX3NvdXJjZU1hdHJpeCA9IG1fbGF5
ZXIuZGF0YSgpLT5tX2xheWVyLT50cmFuc2Zvcm0oKTsNCiAgICAgICAgICAgICBtX2xheWVyLmRh
dGEoKS0+bV90cmFuc2Zvcm1BbmltYXRpb25SdW5uaW5nID0gdHJ1ZTsNCi0gICAgICAgICAgICBp
ZiAobV9sYXllci5kYXRhKCktPmNhY2hlTW9kZSgpID09IFFHcmFwaGljc0l0ZW06OkRldmljZUNv
b3JkaW5hdGVDYWNoZSkNCi0gICAgICAgICAgICAgICAgbV9sYXllci5kYXRhKCktPnNldENhY2hl
TW9kZShRR3JhcGhpY3NJdGVtOjpJdGVtQ29vcmRpbmF0ZUNhY2hlKTsNCisgICAgICAgICAgICBt
X2xheWVyLmRhdGEoKS0+YWRqdXN0Q2FjaGluZ1JlY3Vyc2l2ZWx5KHRydWUpOw0KICAgICAgICAg
fSBlbHNlIHsNCiAgICAgICAgICAgICBtX2xheWVyLmRhdGEoKS0+bV90cmFuc2Zvcm1BbmltYXRp
b25SdW5uaW5nID0gZmFsc2U7DQotICAgICAgICAgICAgaWYgKG1fbGF5ZXIuZGF0YSgpLT5jYWNo
ZU1vZGUoKSA9PSBRR3JhcGhpY3NJdGVtOjpJdGVtQ29vcmRpbmF0ZUNhY2hlKQ0KLSAgICAgICAg
ICAgICAgICBtX2xheWVyLmRhdGEoKS0+c2V0Q2FjaGVNb2RlKFFHcmFwaGljc0l0ZW06OkRldmlj
ZUNvb3JkaW5hdGVDYWNoZSk7DQorICAgICAgICAgICAgbV9sYXllci5kYXRhKCktPmFkanVzdENh
Y2hpbmdSZWN1cnNpdmVseShmYWxzZSk7DQogICAgICAgICB9DQogICAgIH0NCisNCisgICAgVHJh
bnNmb3JtYXRpb25NYXRyaXggbV9zb3VyY2VNYXRyaXg7DQogfTsNCiANCiBjbGFzcyBPcGFjaXR5
QW5pbWF0aW9uUXQgOiBwdWJsaWMgQW5pbWF0aW9uUXQ8cXJlYWw+IHsNCkBAIC0xMDA2LDYgKzEw
NDksNyBAQCBwdWJsaWM6DQogICAgIHZpcnR1YWwgdm9pZCB1cGRhdGVTdGF0ZShRQWJzdHJhY3RB
bmltYXRpb246OlN0YXRlIG5ld1N0YXRlLCBRQWJzdHJhY3RBbmltYXRpb246OlN0YXRlIG9sZFN0
YXRlKQ0KICAgICB7DQogICAgICAgICBRQWJzdHJhY3RBbmltYXRpb246OnVwZGF0ZVN0YXRlKG5l
d1N0YXRlLCBvbGRTdGF0ZSk7DQorDQogICAgICAgICBpZiAobV9sYXllcikNCiAgICAgICAgICAg
ICBtX2xheWVyLmRhdGEoKS0+bV9vcGFjaXR5QW5pbWF0aW9uUnVubmluZyA9IChuZXdTdGF0ZSA9
PSBRQWJzdHJhY3RBbmltYXRpb246OlJ1bm5pbmcpOw0KICAgICB9DQpAQCAtMTA3OSwxMSArMTEy
MywxMiBAQCB2b2lkIEdyYXBoaWNzTGF5ZXJRdDo6cmVtb3ZlQW5pbWF0aW9uc0ZvDQogdm9pZCBH
cmFwaGljc0xheWVyUXQ6OnBhdXNlQW5pbWF0aW9uKGNvbnN0IFN0cmluZyYgbmFtZSwgZG91Ymxl
IHRpbWVPZmZzZXQpDQogew0KICAgICBmb3IgKFFMaXN0PFFXZWFrUG9pbnRlcjxRQWJzdHJhY3RB
bmltYXRpb24+ID46Oml0ZXJhdG9yIGl0ID0gbV9pbXBsLT5tX2FuaW1hdGlvbnMuYmVnaW4oKTsg
aXQgIT0gbV9pbXBsLT5tX2FuaW1hdGlvbnMuZW5kKCk7ICsraXQpIHsNCi0gICAgICAgIGlmICgq
aXQpIHsNCi0gICAgICAgICAgICBBbmltYXRpb25RdEJhc2UqIGFuaW0gPSBzdGF0aWNfY2FzdDxB
bmltYXRpb25RdEJhc2UqPigoKml0KS5kYXRhKCkpOw0KLSAgICAgICAgICAgIGlmIChhbmltICYm
IGFuaW0tPm1fa2V5ZnJhbWVzTmFtZSA9PSBRU3RyaW5nKG5hbWUpKQ0KLSAgICAgICAgICAgICAg
ICBRVGltZXI6OnNpbmdsZVNob3QodGltZU9mZnNldCAqIDEwMDAsIGFuaW0sIFNMT1QocGF1c2Uo
KSkpOw0KLSAgICAgICAgfQ0KKyAgICAgICAgaWYgKCEoKml0KSkNCisgICAgICAgICAgICBjb250
aW51ZTsNCisNCisgICAgICAgIEFuaW1hdGlvblF0QmFzZSogYW5pbSA9IHN0YXRpY19jYXN0PEFu
aW1hdGlvblF0QmFzZSo+KCgqaXQpLmRhdGEoKSk7DQorICAgICAgICBpZiAoYW5pbSAmJiBhbmlt
LT5tX2tleWZyYW1lc05hbWUgPT0gUVN0cmluZyhuYW1lKSkNCisgICAgICAgICAgICBRVGltZXI6
OnNpbmdsZVNob3QodGltZU9mZnNldCAqIDEwMDAsIGFuaW0sIFNMT1QocGF1c2UoKSkpOw0KICAg
ICB9DQogfQ0KIA0KSW5kZXg6IFdlYktpdC9xdC9DaGFuZ2VMb2cNCj09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0NCi0tLSBX
ZWJLaXQvcXQvQ2hhbmdlTG9nCShyZXZpc2lvbiA1NDI2NykNCisrKyBXZWJLaXQvcXQvQ2hhbmdl
TG9nCSh3b3JraW5nIGNvcHkpDQpAQCAtMSwzICsxLDE1IEBADQorMjAxMC0wMi0wMiAgTm8nYW0g
Um9zZW50aGFsICA8bm9hbS5yb3NlbnRoYWxAbm9raWEuY29tPg0KKw0KKyAgICAgICAgUmV2aWV3
ZWQgYnkgTk9CT0RZIChPT1BTISkuDQorDQorICAgICAgICBbUXRdIFR1bmluZyBhbmQgb3B0aW1p
emF0aW9ucyB0byBHcmFwaGljc0xheWVyUXQuIE1haW5seSByZWR1Y2VkIHVzYWdlDQorICAgICAg
ICBvZiBRVGltZXI6OnNpbmdsZVNob3QsIGFuZCBtb3ZlZCBzeW5jTGF5ZXJzKCkgZnJvbSBwYWlu
dCgpIHRvIHVwZGF0ZSgpDQorICAgICAgICBodHRwczovL2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1
Zy5jZ2k/aWQ9MzQwNjINCisNCisgICAgICAgICogQXBpL3FncmFwaGljc3dlYnZpZXcuY3BwOg0K
KyAgICAgICAgKFFHcmFwaGljc1dlYlZpZXdQcml2YXRlOjp1cGRhdGUpOiBNb3ZlZCB0aGUgc3lu
YyBvcGVyYXRpb24gdG8gdXBkYXRlDQorICAgICAgICAoUUdyYXBoaWNzV2ViVmlldzo6cGFpbnQp
OiBNb3ZlZCB0aGUgc3luYyBvcGVyYXRpb24gdG8gdXBkYXRlDQorDQogMjAxMC0wMi0wMiAgS2Vu
bmV0aCBSb2hkZSBDaHJpc3RpYW5zZW4gIDxrZW5uZXRoQHdlYmtpdC5vcmc+DQogDQogICAgICAg
ICBSZXZpZXdlZCBieSBBcml5YSBIaWRheWF0Lg0KSW5kZXg6IFdlYktpdC9xdC9BcGkvcWdyYXBo
aWNzd2Vidmlldy5jcHANCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT0NCi0tLSBXZWJLaXQvcXQvQXBpL3FncmFwaGljc3dl
YnZpZXcuY3BwCShyZXZpc2lvbiA1NDI1MCkNCisrKyBXZWJLaXQvcXQvQXBpL3FncmFwaGljc3dl
YnZpZXcuY3BwCSh3b3JraW5nIGNvcHkpDQpAQCAtMjcsNiArMjcsNyBAQA0KICNpbmNsdWRlICJx
d2VicGFnZV9wLmgiDQogI2luY2x1ZGUgIlFXZWJQYWdlQ2xpZW50LmgiDQogI2luY2x1ZGUgPEZy
YW1lVmlldy5oPg0KKyNpbmNsdWRlIDxRdENvcmUvcW1ldGFvYmplY3QuaD4NCiAjaW5jbHVkZSA8
UXRDb3JlL3FzaGFyZWRwb2ludGVyLmg+DQogI2luY2x1ZGUgPFF0Q29yZS9xdGltZXIuaD4NCiAj
aW5jbHVkZSA8UXRHdWkvcWFwcGxpY2F0aW9uLmg+DQpAQCAtNzgsMTMgKzc5LDE0IEBAIHB1Ymxp
YzoNCiAgICAgICAgICwgcGFnZSgwKQ0KICNpZiBVU0UoQUNDRUxFUkFURURfQ09NUE9TSVRJTkcp
DQogICAgICAgICAsIHJvb3RHcmFwaGljc0xheWVyKDApDQotICAgICAgICAsIHNob3VsZFN5bmMo
dHJ1ZSkNCisgICAgICAgICwgc2hvdWxkU3luYyhmYWxzZSkNCiAjZW5kaWYNCiAgICAgew0KICNp
ZiBVU0UoQUNDRUxFUkFURURfQ09NUE9TSVRJTkcpDQogICAgICAgICAvLyB0aGUgb3ZlcmxheSBh
bmQgc3RheXMgYWxpdmUgZm9yIHRoZSBsaWZldGltZSBvZg0KICAgICAgICAgLy8gdGhpcyBRR3Jh
cGhpY3NXZWJWaWV3IGFzIHRoZSBzY3JvbGxiYXJzIGFyZSBuZWVkZWQgd2hlbiB0aGVyZSdzIG5v
IGNvbXBvc2l0aW5nDQogICAgICAgICBxLT5zZXRGbGFnKFFHcmFwaGljc0l0ZW06Okl0ZW1Vc2Vz
RXh0ZW5kZWRTdHlsZU9wdGlvbik7DQorICAgICAgICBzeW5jTWV0YU1ldGhvZCA9IHEtPm1ldGFP
YmplY3QoKS0+bWV0aG9kKHEtPm1ldGFPYmplY3QoKS0+aW5kZXhPZk1ldGhvZCgic3luY0xheWVy
cygpIikpOw0KICNlbmRpZg0KICAgICB9DQogDQpAQCAtMTMxLDYgKzEzMyw5IEBAIHB1YmxpYzoN
CiAgICAgLy8gY29tcG9zaXRvciB0ZWxsaW5nIHVzIHRvIGRvIHNvLiBXZSdsbCBnZXQgdGhhdCBj
YWxsIGZyb20gQ2hyb21lQ2xpZW50UXQNCiAgICAgYm9vbCBzaG91bGRTeW5jOw0KIA0KKyAgICAv
LyB3ZSBoYXZlIHRvIGZsdXNoIHF1aXRlIG9mdGVuLCBzbyB3ZSB1c2UgYSBtZXRhLW1ldGhvZCBp
bnN0ZWFkIG9mIFFUaW1lcjo6c2luZ2xlU2hvdCBmb3IgcHV0dGluZyB0aGUgZXZlbnQgaW4gdGhl
IHF1ZXVlDQorICAgIFFNZXRhTWV0aG9kIHN5bmNNZXRhTWV0aG9kOw0KKw0KICAgICAvLyB3ZSBu
ZWVkIHRvIHB1dCB0aGUgcm9vdCBncmFwaGljcyBsYXllciBiZWhpbmQgdGhlIG92ZXJsYXkgKHdo
aWNoIGNvbnRhaW5zIHRoZSBzY3JvbGxiYXIpDQogICAgIGVudW0geyBSb290R3JhcGhpY3NMYXll
clpWYWx1ZSwgT3ZlcmxheVpWYWx1ZSB9Ow0KICNlbmRpZg0KQEAgLTE3OCw3ICsxODMsNyBAQCB2
b2lkIFFHcmFwaGljc1dlYlZpZXdQcml2YXRlOjptYXJrRm9yU3luDQogew0KICAgICBzaG91bGRT
eW5jID0gdHJ1ZTsNCiAgICAgaWYgKHNjaGVkdWxlU3luYykNCi0gICAgICAgIFFUaW1lcjo6c2lu
Z2xlU2hvdCgwLCBxLCBTTE9UKHN5bmNMYXllcnMoKSkpOw0KKyAgICAgICAgc3luY01ldGFNZXRo
b2QuaW52b2tlKHEsIFF0OjpRdWV1ZWRDb25uZWN0aW9uKTsNCiB9DQogDQogdm9pZCBRR3JhcGhp
Y3NXZWJWaWV3UHJpdmF0ZTo6dXBkYXRlQ29tcG9zaXRpbmdTY3JvbGxQb3NpdGlvbigpDQpAQCAt
MjI0LDYgKzIyOSw3IEBAIHZvaWQgUUdyYXBoaWNzV2ViVmlld1ByaXZhdGU6OnVwZGF0ZShjb24N
CiAjaWYgVVNFKEFDQ0VMRVJBVEVEX0NPTVBPU0lUSU5HKQ0KICAgICBpZiAob3ZlcmxheSkNCiAg
ICAgICAgIG92ZXJsYXktPnVwZGF0ZShRUmVjdEYoZGlydHlSZWN0KSk7DQorICAgIHN5bmNMYXll
cnMoKTsNCiAjZW5kaWYNCiB9DQogDQpAQCAtNDQyLDcgKzQ0OCw2IEBAIHZvaWQgUUdyYXBoaWNz
V2ViVmlldzo6cGFpbnQoUVBhaW50ZXIqIHANCiB7DQogI2lmIFVTRShBQ0NFTEVSQVRFRF9DT01Q
T1NJVElORykNCiAgICAgcGFnZSgpLT5tYWluRnJhbWUoKS0+cmVuZGVyKHBhaW50ZXIsIGQtPm92
ZXJsYXkgPyBRV2ViRnJhbWU6OkNvbnRlbnRzTGF5ZXIgOiBRV2ViRnJhbWU6OkFsbExheWVycywg
b3B0aW9uLT5leHBvc2VkUmVjdC50b0FsaWduZWRSZWN0KCkpOw0KLSAgICBkLT5zeW5jTGF5ZXJz
KCk7DQogI2Vsc2UNCiAgICAgcGFnZSgpLT5tYWluRnJhbWUoKS0+cmVuZGVyKHBhaW50ZXIsIFFX
ZWJGcmFtZTo6QWxsTGF5ZXJzLCBvcHRpb24tPmV4cG9zZWRSZWN0LnRvUmVjdCgpKTsNCiAjZW5k
aWY=
</data>

          </attachment>
      

    </bug>

</bugzilla>