<?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>22108</bug_id>
          
          <creation_ts>2008-11-06 11:13:19 -0800</creation_ts>
          <short_desc>REGRESSION: Animated gifs sometimes don&apos;t animate (wunderground.com weather radar)</short_desc>
          <delta_ts>2009-01-07 17:53:53 -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>Images</component>
          <version>528+ (Nightly build)</version>
          <rep_platform>Mac</rep_platform>
          <op_sys>OS X 10.5</op_sys>
          <bug_status>RESOLVED</bug_status>
          <resolution>FIXED</resolution>
          
          
          <bug_file_loc>http://www.wunderground.com/radar/mixedcomposite.asp?region=a5&amp;size=2x&amp;type=loop</bug_file_loc>
          <status_whiteboard></status_whiteboard>
          <keywords>InRadar</keywords>
          <priority>P1</priority>
          <bug_severity>Minor</bug_severity>
          <target_milestone>---</target_milestone>
          
          
          <everconfirmed>1</everconfirmed>
          <reporter name="Jubal Kessler">jubal-webkit-20111123</reporter>
          <assigned_to name="Peter Kasting">pkasting</assigned_to>
          <cc>ap</cc>
    
    <cc>duanewilliams</cc>
    
    <cc>hyatt</cc>
    
    <cc>jimoase</cc>
    
    <cc>jkf</cc>
    
    <cc>netstuff</cc>
    
    <cc>pilotgi</cc>
    
    <cc>pkasting</cc>
    
    <cc>simon.fraser</cc>
    
    <cc>webkit</cc>
    
    <cc>zimmermann</cc>
          

      

      

      

          <comment_sort_order>oldest_to_newest</comment_sort_order>  
          <long_desc isprivate="0" >
    <commentid>97844</commentid>
    <comment_count>0</comment_count>
    <who name="Jubal Kessler">jubal-webkit-20111123</who>
    <bug_when>2008-11-06 11:13:19 -0800</bug_when>
    <thetext>For some reason, this page&apos;s animated GIF doesn&apos;t loop on the page. If I context-menu click the image and open it in a new tab, it will animate. I don&apos;t notice this problem with regular Safari 3.1.2.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>97845</commentid>
    <comment_count>1</comment_count>
    <who name="Jubal Kessler">jubal-webkit-20111123</who>
    <bug_when>2008-11-06 11:18:07 -0800</bug_when>
    <thetext>Additionally, if I reload the image while it is already standalone in its own tab (and is actually animating), the animation fails to happen. I have to repeat the context-menu-click-and-move-to-new-tab action to get it to animate again.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>98178</commentid>
    <comment_count>2</comment_count>
    <who name="Peter Kasting">pkasting</who>
    <bug_when>2008-11-10 11:04:17 -0800</bug_when>
    <thetext>Can you find a regression window for this?</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>98195</commentid>
    <comment_count>3</comment_count>
    <who name="Alexey Proskuryakov">ap</who>
    <bug_when>2008-11-10 13:16:01 -0800</bug_when>
    <thetext>See also: bug 22029, bug 22154.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>98198</commentid>
    <comment_count>4</comment_count>
    <who name="Peter Kasting">pkasting</who>
    <bug_when>2008-11-10 13:31:12 -0800</bug_when>
    <thetext>*** Bug 22154 has been marked as a duplicate of this bug. ***</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>98200</commentid>
    <comment_count>5</comment_count>
    <who name="Peter Kasting">pkasting</who>
    <bug_when>2008-11-10 13:32:04 -0800</bug_when>
    <thetext>*** Bug 22029 has been marked as a duplicate of this bug. ***</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>98201</commentid>
    <comment_count>6</comment_count>
    <who name="Peter Kasting">pkasting</who>
    <bug_when>2008-11-10 13:33:15 -0800</bug_when>
    <thetext>From the duped bugs, here are other pages that exhibit problems:

http://radar.weather.gov/ridge/radar_lite.php?rid=ICT&amp;product=NCR&amp;loop=yes
http://hurricane.accuweather.com/hurricane/satellite.asp?region=hpac&amp;anim=1&amp;type=ei&amp;basin=epacific

Verified all three pages&apos; looping images are GIFs.  It is not clear from reading these comments if the problem is that the images fail to loop (i.e. they animate exactly once) or if they fail to animate at all (only the initial frame shows).</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>98286</commentid>
    <comment_count>7</comment_count>
    <who name="Duane Williams">duanewilliams</who>
    <bug_when>2008-11-11 07:32:03 -0800</bug_when>
    <thetext>After clicking Animate there is no visible animation, but you do get an additional frame in the &quot;Show the previous page&quot; sequence.  It looks like it might be the first frame in the animation sequence.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>98346</commentid>
    <comment_count>8</comment_count>
    <who name="Scott Perry">webkit</who>
    <bug_when>2008-11-11 14:19:00 -0800</bug_when>
    <thetext>(In reply to comment #6)
&gt; It is not clear from
&gt; reading these comments if the problem is that the images fail to loop (i.e.
&gt; they animate exactly once) or if they fail to animate at all (only the initial
&gt; frame shows).

in my experience, only the first frame shows.  very rarely the image will animate (no obvious cause of success), and when it does it loops correctly.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>98347</commentid>
    <comment_count>9</comment_count>
    <who name="Simon Fraser (smfr)">simon.fraser</who>
    <bug_when>2008-11-11 14:26:34 -0800</bug_when>
    <thetext>This bug seems sporadic, and doesn&apos;t happen in simple test cases. When a complex page with an animated GIF loads, the GIF doesn&apos;t always start animating. However, if you cause a redraw, or load the image in its own tab, then it animates fine.

Can someone try to whip up a testcase that is simpler than the URLs listed above?</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>98350</commentid>
    <comment_count>10</comment_count>
    <who name="Scott Perry">webkit</who>
    <bug_when>2008-11-11 14:37:48 -0800</bug_when>
    <thetext>(In reply to comment #2)
&gt; Can you find a regression window for this?

testing the nightlies, it looks like this problem surfaced between (r37605,r37469].

pretty big window, but narrows it down a bit.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>98351</commentid>
    <comment_count>11</comment_count>
    <who name="Peter Kasting">pkasting</who>
    <bug_when>2008-11-11 14:39:58 -0800</bug_when>
    <thetext>Did you type those numbers correctly?  The first is larger than the second.

I&apos;m especially curious as to whether r37612 affected this.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>98352</commentid>
    <comment_count>12</comment_count>
    <who name="Scott Perry">webkit</who>
    <bug_when>2008-11-11 14:49:39 -0800</bug_when>
    <thetext>(In reply to comment #11)
&gt; Did you type those numbers correctly?  The first is larger than the second.

unfortunately yes.

from http://nightly.webkit.org/builds/trunk/mac/1 , the builds for r37605 and r37469 are adjacent.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>98353</commentid>
    <comment_count>13</comment_count>
    <who name="Peter Kasting">pkasting</who>
    <bug_when>2008-11-11 14:51:54 -0800</bug_when>
    <thetext>Adjacent, in descending order.  So the range is (r37469,r37605], assuming you&apos;re saying the problem reproduces in the later build and not the earlier.  I was trying to figure out if there was a typo.

That sounds like r37612 is not at fault, which surprises me slightly.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>98378</commentid>
    <comment_count>14</comment_count>
    <who name="Scott Perry">webkit</who>
    <bug_when>2008-11-11 15:23:22 -0800</bug_when>
    <thetext>(In reply to comment #13)
&gt; Adjacent, in descending order.  So the range is (r37469,r37605], assuming
&gt; you&apos;re saying the problem reproduces in the later build and not the earlier.  I
&gt; was trying to figure out if there was a typo.

sorry, you are correct.

&gt; That sounds like r37612 is not at fault, which surprises me slightly.

well, I can&apos;t claim 100% accuracy, either.

r37605 works more often than not.  I only flagged it because of one animation failure (out of about 48 different tests).
that may have been a false positive as it works with all of the other cases that r37698 fails on.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>98933</commentid>
    <comment_count>15</comment_count>
    <who name="Jason Fritcher">jkf</who>
    <bug_when>2008-11-16 09:09:02 -0800</bug_when>
    <thetext>I use wunderground.com as well  and I can confirm that of the nightlies r37605 and previous work normally, but r37698 and newer do not animate and only show the first frame.

I am currently checking the code out of svn to do intermediate builds to narrow down which revision breaks the animation.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>98947</commentid>
    <comment_count>16</comment_count>
    <who name="Jason Fritcher">jkf</who>
    <bug_when>2008-11-16 11:12:31 -0800</bug_when>
    <thetext>To update my previous post, I&apos;ve done a few intermediate builds and it appears that r37612 is the responsible party for breaking these animations. The animated weather radar on wunderground.com works normally in r37611 but does not animate and only shows the first frame in r37612.

I&apos;m not familiar enough with the WebKit code base to dig into the code itself, but please let me know if there is any more detail I can provide.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>98951</commentid>
    <comment_count>17</comment_count>
    <who name="Jubal Kessler">jubal-webkit-20111123</who>
    <bug_when>2008-11-16 11:33:56 -0800</bug_when>
    <thetext>The patch from bug #19663 may have caused this regression. We still need a reduced sample case; I&apos;ll take a stab at it.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>99040</commentid>
    <comment_count>18</comment_count>
    <who name="Alexey Proskuryakov">ap</who>
    <bug_when>2008-11-17 08:44:44 -0800</bug_when>
    <thetext>*** Bug 21894 has been marked as a duplicate of this bug. ***</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>99465</commentid>
    <comment_count>19</comment_count>
    <who name="Alexey Proskuryakov">ap</who>
    <bug_when>2008-11-20 05:50:11 -0800</bug_when>
    <thetext>&lt;rdar://problem/6388383&gt;</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>99469</commentid>
    <comment_count>20</comment_count>
    <who name="Jim Oase">jimoase</who>
    <bug_when>2008-11-20 06:31:02 -0800</bug_when>
    <thetext>Could it be that the same routines are used and causing similar problems?

http://radar.weather.gov/Conus/full_loop.php

This site does not animate when load is complete.

Using nightly build r38592</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>99605</commentid>
    <comment_count>21</comment_count>
    <who name="Jim Oase">jimoase</who>
    <bug_when>2008-11-20 21:35:27 -0800</bug_when>
    <thetext>Still no animation with build r28645
http://www.wunderground.com/radar/mixedcomposite.asp?region=a5&amp;size=2x&amp;type=loop

http://radar.weather.gov/Conus/full_loop.php</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>99698</commentid>
    <comment_count>22</comment_count>
    <who name="Peter Kasting">pkasting</who>
    <bug_when>2008-11-21 14:01:28 -0800</bug_when>
    <thetext>I&apos;m looking at something like this on the Chromium side at the moment, though it manifests a bit differently (looping images fail to loop).  I think the underlying problem may be the same, but it&apos;s tricky to tell because the two have different ImageSource implementations/interactions with the underlying decoders.

The basic problem is that for large images, we destroy the decoder as we go, and keep re-setting the data on it.  My concern is that important state like the repetition count, or perhaps the frame count (?) is then basically uninitialized, and BitmapImage can ask the source for it and get garbage, leading to problems.

In Chromium&apos;s case, the underlying GIF decoder (available in the WebKit tree as GIFImage[Decoder,Reader].cpp) has a repetitionCount() function that simply returns the value of a member variable, which itself is not set unless we happen to run across the repetition count extension block while decoding.  So if we destroy the decoder, the value returned from this function can be wrong for an arbitrary time.  I&apos;m seeing cases where it is, in fact, wrong, and BitmapImage erroneously believes the image loops once instead of looping forever.

This doesn&apos;t explain the CG bug described here; I&apos;m wondering if perhaps in that case the frame count is wrong for the same reason, or something.  hyatt isn&apos;t around to chime in and I can&apos;t see into the CG decoder&apos;s source.

There are possible fixes on the Chromium side, but all involve modifying the decoder.  I can&apos;t add new functions to the CG decoder (and don&apos;t have a reference to the existing set to see if I&apos;d need to), so I&apos;m not sure how best to address this.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>101122</commentid>
    <comment_count>23</comment_count>
      <attachid>25693</attachid>
    <who name="Peter Kasting">pkasting</who>
    <bug_when>2008-12-02 17:05:23 -0800</bug_when>
    <thetext>Created attachment 25693
patch v1

hyatt and I have already chatted some on IRC about this patch.

This fixes animations by not deleting the decoder, meaning the loop count can stay valid across frames.  I didn&apos;t actually determine for sure that this was the problem in CG WebKit, but it was the problem in Chromium, and patching the fix in here made the testcases seem to work in my Safari Win build.

It turns out the CG decoder was already doing a pretty good job of dropping frames when their external references were released, and of deleting frames internally during re-decoding, so it didn&apos;t suffer from the peak memory issues Cairo/Chromium did, and the old &quot;delete ImageDecoder&quot; code wasn&apos;t really necessary for it at all.  Unfortunately it also decodes from the beginning of the stream more than it needs to, so it still uses far more CPU than it should (i.e. this patch does not fix the underlying problem in bug 22280).  Perhaps hyatt can use the framework in this patch to help address things.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>102575</commentid>
    <comment_count>24</comment_count>
      <attachid>25693</attachid>
    <who name="Dave Hyatt">hyatt</who>
    <bug_when>2008-12-15 12:01:53 -0800</bug_when>
    <thetext>Comment on attachment 25693
patch v1

r=me</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>102581</commentid>
    <comment_count>25</comment_count>
    <who name="Peter Kasting">pkasting</who>
    <bug_when>2008-12-15 12:46:05 -0800</bug_when>
    <thetext>Fixed in r39309.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>103416</commentid>
    <comment_count>26</comment_count>
    <who name="">pilotgi</who>
    <bug_when>2008-12-25 10:22:56 -0800</bug_when>
    <thetext>Why has this been marked as resolved? I&apos;m using r39469 and weather radar loops from weather.gov still don&apos;t animate. They didn&apos;t work with for me with r39309 or any subsequent builds either. </thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>103420</commentid>
    <comment_count>27</comment_count>
    <who name="Alexey Proskuryakov">ap</who>
    <bug_when>2008-12-25 13:04:21 -0800</bug_when>
    <thetext>This is marked as resolved because a patch that fixed some or all problems was committed. Please file a new bug if you are still seeing problems, and describe them in detail.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>103432</commentid>
    <comment_count>28</comment_count>
    <who name="Jim Oase">jimoase</who>
    <bug_when>2008-12-25 22:50:32 -0800</bug_when>
    <thetext>(In reply to comment #27)
&gt; This is marked as resolved because a patch that fixed some or all problems was
&gt; committed. Please file a new bug if you are still seeing problems, and describe
&gt; them in detail.
&gt; 

This site still exhibits the no animation problem
http://radar.weather.gov/Conus/full_loop.php

Using WebKit-SVN-r39469

</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>103434</commentid>
    <comment_count>29</comment_count>
    <who name="Alexey Proskuryakov">ap</who>
    <bug_when>2008-12-25 23:31:05 -0800</bug_when>
    <thetext>As I said, please file a new bug. Also, this weather.gov page is different from the one discussed here (http://radar.weather.gov/ridge/radar_lite.php?rid=ICT&amp;product=NCR&amp;loop=yes), and it doesn&apos;t work well even in shipping Safari/WebKit for me.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>104184</commentid>
    <comment_count>30</comment_count>
    <who name="Simon Fraser (smfr)">simon.fraser</who>
    <bug_when>2009-01-02 15:33:28 -0800</bug_when>
    <thetext>See also bug 23082.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>104193</commentid>
    <comment_count>31</comment_count>
    <who name="Simon Fraser (smfr)">simon.fraser</who>
    <bug_when>2009-01-02 16:43:13 -0800</bug_when>
    <thetext>And bug 22647.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>104197</commentid>
    <comment_count>32</comment_count>
    <who name="Simon Fraser (smfr)">simon.fraser</who>
    <bug_when>2009-01-02 16:47:26 -0800</bug_when>
    <thetext>*** Bug 22647 has been marked as a duplicate of this bug. ***</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>104827</commentid>
    <comment_count>33</comment_count>
    <who name="Simon Fraser (smfr)">simon.fraser</who>
    <bug_when>2009-01-07 17:53:53 -0800</bug_when>
    <thetext>Bug 22995 tracks remaining issues.</thetext>
  </long_desc>
      
          <attachment
              isobsolete="0"
              ispatch="1"
              isprivate="0"
          >
            <attachid>25693</attachid>
            <date>2008-12-02 17:05:23 -0800</date>
            <delta_ts>2008-12-15 12:01:53 -0800</delta_ts>
            <desc>patch v1</desc>
            <filename>patch</filename>
            <type>text/plain</type>
            <size>29422</size>
            <attacher name="Peter Kasting">pkasting</attacher>
            
              <data encoding="base64">SW5kZXg6IFdlYkNvcmUvQ2hhbmdlTG9nCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFdlYkNvcmUvQ2hhbmdlTG9n
CShyZXZpc2lvbiAzODkyNSkKKysrIFdlYkNvcmUvQ2hhbmdlTG9nCSh3b3JraW5nIGNvcHkpCkBA
IC0xLDMgKzEsNjcgQEAKKzIwMDgtMTItMDIgIFBldGVyIEthc3RpbmcgIDxwa2FzdGluZ0Bnb29n
bGUuY29tPgorCisgICAgICAgIFJldmlld2VkIGJ5IE5PQk9EWSAoT09QUyEpLgorCisgICAgICAg
IGh0dHBzOi8vYnVncy53ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9pZD0yMjEwOAorICAgICAgICBM
YXJnZSBhbmltYXRlZCBHSUZzIHdlcmVuJ3QgYWx3YXlzIGFuaW1hdGluZy4gIFRoZSBjb2RlIHRo
YXQgZGVsZXRlZAorICAgICAgICB0aGUgZW50aXJlIGRlY29kZXIgYWZ0ZXIgZWFjaCBmcmFtZSBv
ZiBhIGxhcmdlIGltYWdlIHdhcyByZXN1bHRpbmcgaW4KKyAgICAgICAgdXMgZm9yZ2V0dGluZyB0
aGUgbG9vcCBjb3VudCwgYnJlYWtpbmcgYW5pbWF0aW9ucyBpbnRlcm1pdHRlbnRseS4KKworICAg
ICAgICBJbnN0ZWFkIG9mIHRocm93aW5nIHRoZSB3aG9sZSBkZWNvZGVyIGF3YXksIHdlJ3JlIG1v
cmUgY2FyZWZ1bCB0byBqdXN0CisgICAgICAgIGRlbGV0ZSBmcmFtZXMgd2UgZG9uJ3QgY2FyZSBh
Ym91dC4gIFRoaXMgYWRkaXRpb25hbGx5IGFkZHJlc3NlcworICAgICAgICBwcm9ibGVtcyBpbiB0
aGUgQ2Fpcm8gYW5kIENocm9taXVtIHBvcnRzIHdpdGggZXhjZXNzaXZlIHBlYWsgbWVtb3J5Cisg
ICAgICAgIHVzZSBhbmQgQ1BVIHVzZSB3aGVuIGRlY29kaW5nIGxhcmdlIGFuaW1hdGVkIEdJRnMg
YmVjYXVzZSBpdCBsZWFkcyB0bworICAgICAgICBtdWNoIGxlc3MgcmVkZWNvZGluZyAoTyhuKSBp
bnN0ZWFkIG9mIE8obl4yKSBDUFUsIGFuZCBPKDEpIGluc3RlYWQgb2YKKyAgICAgICAgTyhuKSBt
ZW1vcnkpLgorCisgICAgICAgIFRoaXMgY2hhbmdlIGhhcyBsZXNzIGltcGFjdCBvbiB0aGUgQ0cg
ZGVjb2Rlciwgd2hpY2ggc2VlbXMgdG8gdGhyb3cKKyAgICAgICAgYXdheSBmcmFtZXMgYXV0b21h
dGljYWxseSB3aGVuIHRoZWlyIGV4dGVybmFsIHJlZmVyZW5jZXMgYXJlIGRyb3BwZWQ7CisgICAg
ICAgIHRoaXMgbWVhbnMgdGhlIENHIGRlY29kZXIgZGlkbid0IHN1ZmZlciBmcm9tIHRoZSBwZWFr
IG1lbW9yeSB1c2FnZQorICAgICAgICBpc3N1ZSBiZWZvcmUgKGFuZCBzdGlsbCBkb2Vzbid0KSwg
YnV0IGl0IGFsc28gc3RpbGwgYnVybnMgZXhjZXNzaXZlCisgICAgICAgIENQVSByZWRlY29kaW5n
IGVhcmxpZXIgZnJhbWVzLCB0aGF0IGluIHRoZW9yeSBpdCB3b3VsZG4ndCBuZWVkIHRvCisgICAg
ICAgIHJlZGVjb2RlIGlmIGl0IHdvdWxkIGp1ZGljaW91c2x5IHNhdmUgdGhlIG1vc3QgcmVjZW50
IGZyYW1lcy4gIEF0CisgICAgICAgIGxlYXN0IHRoaXMgcGF0Y2ggcGx1bWJzIHNvbWUgdXNlZnVs
IGluZm8gdG8gdGhlIEltYWdlU291cmNlIHNvIGl0IGNhbgorICAgICAgICBoZWxwIGd1aWRlIHRo
ZSBDRyBkZWNvZGVyIGhldXJpc3RpY3MgaW4gdGhlIGZ1dHVyZS4KKworICAgICAgICAqIHBsYXRm
b3JtL2dyYXBoaWNzL0JpdG1hcEltYWdlLmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OmZyYW1lQnl0
ZXMpOgorICAgICAgICAoV2ViQ29yZTo6Qml0bWFwSW1hZ2U6OmRlc3Ryb3lEZWNvZGVkRGF0YSk6
CisgICAgICAgIChXZWJDb3JlOjpCaXRtYXBJbWFnZTo6ZGVzdHJveURlY29kZWREYXRhSWZOZWNl
c3NhcnkpOgorICAgICAgICAoV2ViQ29yZTo6Qml0bWFwSW1hZ2U6OmRlc3Ryb3lNZXRhZGF0YUFu
ZE5vdGlmeSk6CisgICAgICAgIChXZWJDb3JlOjpCaXRtYXBJbWFnZTo6Y2xlYXJGcmFtZSk6Cisg
ICAgICAgIChXZWJDb3JlOjpCaXRtYXBJbWFnZTo6Y2FjaGVGcmFtZSk6CisgICAgICAgIChXZWJD
b3JlOjpCaXRtYXBJbWFnZTo6ZGF0YUNoYW5nZWQpOgorICAgICAgICAoV2ViQ29yZTo6Qml0bWFw
SW1hZ2U6OnN0YXJ0QW5pbWF0aW9uKToKKyAgICAgICAgKFdlYkNvcmU6OkJpdG1hcEltYWdlOjpy
ZXNldEFuaW1hdGlvbik6CisgICAgICAgIChXZWJDb3JlOjpCaXRtYXBJbWFnZTo6aW50ZXJuYWxB
ZHZhbmNlQW5pbWF0aW9uKToKKyAgICAgICAgKiBwbGF0Zm9ybS9ncmFwaGljcy9CaXRtYXBJbWFn
ZS5oOgorICAgICAgICAqIHBsYXRmb3JtL2dyYXBoaWNzL0dlbmVyYXRlZEltYWdlLmg6CisgICAg
ICAgIChXZWJDb3JlOjpHZW5lcmF0ZWRJbWFnZTo6ZGVzdHJveURlY29kZWREYXRhKToKKyAgICAg
ICAgKiBwbGF0Zm9ybS9ncmFwaGljcy9JbWFnZS5oOgorICAgICAgICAqIHBsYXRmb3JtL2dyYXBo
aWNzL0ltYWdlU291cmNlLmg6CisgICAgICAgICogcGxhdGZvcm0vZ3JhcGhpY3MvY2Fpcm8vSW1h
Z2VTb3VyY2VDYWlyby5jcHA6CisgICAgICAgIChXZWJDb3JlOjpJbWFnZVNvdXJjZTo6fkltYWdl
U291cmNlKToKKyAgICAgICAgKFdlYkNvcmU6OkltYWdlU291cmNlOjpjbGVhcik6CisgICAgICAg
ICogcGxhdGZvcm0vZ3JhcGhpY3MvY2cvSW1hZ2VTb3VyY2VDRy5jcHA6CisgICAgICAgIChXZWJD
b3JlOjpJbWFnZVNvdXJjZTo6fkltYWdlU291cmNlKToKKyAgICAgICAgKFdlYkNvcmU6OkltYWdl
U291cmNlOjpjbGVhcik6CisgICAgICAgICogcGxhdGZvcm0vZ3JhcGhpY3MvY2cvUERGRG9jdW1l
bnRJbWFnZS5oOgorICAgICAgICAoV2ViQ29yZTo6UERGRG9jdW1lbnRJbWFnZTo6ZGVzdHJveURl
Y29kZWREYXRhKToKKyAgICAgICAgKiBwbGF0Zm9ybS9ncmFwaGljcy9xdC9TdGlsbEltYWdlUXQu
aDoKKyAgICAgICAgKFdlYkNvcmU6OlN0aWxsSW1hZ2U6OmRlc3Ryb3lEZWNvZGVkRGF0YSk6Cisg
ICAgICAgICogcGxhdGZvcm0vaW1hZ2UtZGVjb2RlcnMvSW1hZ2VEZWNvZGVyLmg6CisgICAgICAg
IChXZWJDb3JlOjpSR0JBMzJCdWZmZXI6OmNsZWFyKToKKyAgICAgICAgKFdlYkNvcmU6OkltYWdl
RGVjb2Rlcjo6Y2xlYXJGcmFtZUJ1ZmZlckNhY2hlKToKKyAgICAgICAgKiBwbGF0Zm9ybS9pbWFn
ZS1kZWNvZGVycy9naWYvR0lGSW1hZ2VEZWNvZGVyLmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OkdJ
RkltYWdlRGVjb2Rlcjo6cmVwZXRpdGlvbkNvdW50KToKKyAgICAgICAgKFdlYkNvcmU6OkdJRklt
YWdlRGVjb2Rlcjo6Y2xlYXJGcmFtZUJ1ZmZlckNhY2hlKToKKyAgICAgICAgKFdlYkNvcmU6OkdJ
RkltYWdlRGVjb2Rlcjo6aW5pdEZyYW1lQnVmZmVyKToKKyAgICAgICAgKiBwbGF0Zm9ybS9pbWFn
ZS1kZWNvZGVycy9naWYvR0lGSW1hZ2VEZWNvZGVyLmg6CisgICAgICAgICogcGxhdGZvcm0vaW1h
Z2UtZGVjb2RlcnMvZ2lmL0dJRkltYWdlUmVhZGVyLmg6CisgICAgICAgIChHSUZJbWFnZVJlYWRl
cjo6R0lGSW1hZ2VSZWFkZXIpOgorICAgICAgICAqIHN2Zy9ncmFwaGljcy9TVkdJbWFnZS5oOgor
ICAgICAgICAoV2ViQ29yZTo6U1ZHSW1hZ2U6OmRlc3Ryb3lEZWNvZGVkRGF0YSk6CisKIDIwMDgt
MTItMDIgIFNpbW9uIEZyYXNlciAgPHNpbW9uLmZyYXNlckBhcHBsZS5jb20+CiAKICAgICAgICAg
UmV2aWV3ZWQgYnkgRGF2ZSBIeWF0dApJbmRleDogV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9C
aXRtYXBJbWFnZS5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9C
aXRtYXBJbWFnZS5jcHAJKHJldmlzaW9uIDM4Nzg1KQorKysgV2ViQ29yZS9wbGF0Zm9ybS9ncmFw
aGljcy9CaXRtYXBJbWFnZS5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTM4LDE0ICszOCwxMCBAQAog
CiBuYW1lc3BhY2UgV2ViQ29yZSB7CiAKLS8vIEFuaW1hdGVkIGltYWdlcyA+NU1CIGFyZSBjb25z
aWRlcmVkIGxhcmdlIGVub3VnaCB0aGF0IHdlJ2xsIG9ubHkgaGFuZyBvbiB0bwotLy8gb25lIGZy
YW1lIGF0IGEgdGltZS4KLWNvbnN0IHVuc2lnbmVkIGNMYXJnZUFuaW1hdGlvbkN1dG9mZiA9IDUy
NDI4ODA7Ci0KLS8vIFdoZW4gYW4gYW5pbWF0ZWQgaW1hZ2UgaXMgbW9yZSB0aGFuIGZpdmUgbWlu
dXRlcyBvdXQgb2YgZGF0ZSwgZG9uJ3QgdHJ5IHRvCi0vLyByZXN5bmMgb24gcmVwYWludCwgc28g
d2UgZG9uJ3Qgd2FzdGUgQ1BVIGN5Y2xlcyBvbiBhbiBlZGdlIGNhc2UgdGhlIHVzZXIKLS8vIGRv
ZXNuJ3QgY2FyZSBhYm91dC4KLWNvbnN0IGRvdWJsZSBjQW5pbWF0aW9uUmVzeW5jQ3V0b2ZmID0g
NSAqIDYwOworc3RhdGljIGludCBmcmFtZUJ5dGVzKGNvbnN0IEludFNpemUmIGZyYW1lU2l6ZSkK
K3sKKyAgICByZXR1cm4gZnJhbWVTaXplLndpZHRoKCkgKiBmcmFtZVNpemUuaGVpZ2h0KCkgKiA0
OworfQogCiBCaXRtYXBJbWFnZTo6Qml0bWFwSW1hZ2UoSW1hZ2VPYnNlcnZlciogb2JzZXJ2ZXIp
CiAgICAgOiBJbWFnZShvYnNlcnZlcikKQEAgLTc1LDM4ICs3MSw0OCBAQCBCaXRtYXBJbWFnZTo6
fkJpdG1hcEltYWdlKCkKICAgICBzdG9wQW5pbWF0aW9uKCk7CiB9CiAKLXZvaWQgQml0bWFwSW1h
Z2U6OmRlc3Ryb3lEZWNvZGVkRGF0YShib29sIGluY3JlbWVudGFsLCBib29sIHByZXNlcnZlTmVh
cmJ5RnJhbWVzKQordm9pZCBCaXRtYXBJbWFnZTo6ZGVzdHJveURlY29kZWREYXRhKGJvb2wgZGVz
dHJveUFsbCkKIHsKLSAgICAvLyBEZXN0cm95IHRoZSBjYWNoZWQgaW1hZ2VzIGFuZCByZWxlYXNl
IHRoZW0uCi0gICAgaWYgKG1fZnJhbWVzLnNpemUoKSkgewotICAgICAgICBpbnQgc2l6ZUNoYW5n
ZSA9IDA7Ci0gICAgICAgIGludCBmcmFtZVNpemUgPSBtX3NpemUud2lkdGgoKSAqIG1fc2l6ZS5o
ZWlnaHQoKSAqIDQ7Ci0gICAgICAgIGNvbnN0IHNpemVfdCBuZXh0RnJhbWUgPSAocHJlc2VydmVO
ZWFyYnlGcmFtZXMgJiYgZnJhbWVDb3VudCgpKSA/ICgobV9jdXJyZW50RnJhbWUgKyAxKSAlIGZy
YW1lQ291bnQoKSkgOiAwOwotICAgICAgICBmb3IgKHVuc2lnbmVkIGkgPSBpbmNyZW1lbnRhbCA/
IG1fZnJhbWVzLnNpemUoKSAtIDEgOiAwOyBpIDwgbV9mcmFtZXMuc2l6ZSgpOyBpKyspIHsKLSAg
ICAgICAgICAgIGlmIChtX2ZyYW1lc1tpXS5tX2ZyYW1lICYmICghcHJlc2VydmVOZWFyYnlGcmFt
ZXMgfHwgKGkgIT0gbV9jdXJyZW50RnJhbWUgJiYgaSAhPSBuZXh0RnJhbWUpKSkgewotICAgICAg
ICAgICAgICAgIHNpemVDaGFuZ2UgLT0gZnJhbWVTaXplOwotICAgICAgICAgICAgICAgIG1fZnJh
bWVzW2ldLmNsZWFyKCk7Ci0gICAgICAgICAgICB9Ci0gICAgICAgIH0KKyAgICBpbnQgZnJhbWVz
Q2xlYXJlZCA9IDA7CisgICAgY29uc3Qgc2l6ZV90IGNsZWFyQmVmb3JlRnJhbWUgPSBkZXN0cm95
QWxsID8gbV9mcmFtZXMuc2l6ZSgpIDogbV9jdXJyZW50RnJhbWU7CisgICAgZm9yIChzaXplX3Qg
aSA9IDA7IGkgPCBjbGVhckJlZm9yZUZyYW1lOyArK2kpCisgICAgICAgIGZyYW1lc0NsZWFyZWQg
Kz0gY2xlYXJGcmFtZShpKTsKIAotICAgICAgICAvLyBXZSBqdXN0IGFsd2F5cyBpbnZhbGlkYXRl
IG91ciBwbGF0Zm9ybSBkYXRhLCBldmVuIGluIHRoZSBpbmNyZW1lbnRhbCBjYXNlLgotICAgICAg
ICAvLyBUaGlzIGNvdWxkIGJlIGJldHRlciwgYnV0IGl0J3Mgbm90IGEgYmlnIGRlYWwuCi0gICAg
ICAgIG1faXNTb2xpZENvbG9yID0gZmFsc2U7Ci0gICAgICAgIGludmFsaWRhdGVQbGF0Zm9ybURh
dGEoKTsKLSAgICAgICAgCi0gICAgICAgIGlmIChzaXplQ2hhbmdlKSB7Ci0gICAgICAgICAgICBt
X2RlY29kZWRTaXplICs9IHNpemVDaGFuZ2U7Ci0gICAgICAgICAgICBpZiAoaW1hZ2VPYnNlcnZl
cigpKQotICAgICAgICAgICAgICAgIGltYWdlT2JzZXJ2ZXIoKS0+ZGVjb2RlZFNpemVDaGFuZ2Vk
KHRoaXMsIHNpemVDaGFuZ2UpOwotICAgICAgICB9Ci0gICAgfQotICAgIGlmICghaW5jcmVtZW50
YWwpIHsKLSAgICAgICAgLy8gUmVzZXQgdGhlIGltYWdlIHNvdXJjZSwgc2luY2UgSW1hZ2UgSS9P
IGhhcyBhbiB1bmRlcmx5aW5nIGNhY2hlIHRoYXQgaXQgdXNlcwotICAgICAgICAvLyB3aGlsZSBh
bmltYXRpbmcgdGhhdCBpdCBzZWVtcyB0byBuZXZlciBjbGVhci4KLSAgICAgICAgbV9zb3VyY2Uu
Y2xlYXIoKTsKLSAgICAgICAgaWYgKG1fZGF0YSkgCi0gICAgICAgICAgICBtX3NvdXJjZS5zZXRE
YXRhKG1fZGF0YS5nZXQoKSwgbV9hbGxEYXRhUmVjZWl2ZWQpOwotICAgIH0gICAgCisgICAgZGVz
dHJveU1ldGFkYXRhQW5kTm90aWZ5KGZyYW1lc0NsZWFyZWQpOworCisgICAgbV9zb3VyY2UuY2xl
YXIoZGVzdHJveUFsbCwgY2xlYXJCZWZvcmVGcmFtZSk7CisgICAgaWYgKG1fZGF0YSkKKyAgICAg
ICAgbV9zb3VyY2Uuc2V0RGF0YShtX2RhdGEuZ2V0KCksIG1fYWxsRGF0YVJlY2VpdmVkKTsKKyAg
ICByZXR1cm47Cit9CisKK3ZvaWQgQml0bWFwSW1hZ2U6OmRlc3Ryb3lEZWNvZGVkRGF0YUlmTmVj
ZXNzYXJ5KGJvb2wgZGVzdHJveUFsbCkKK3sKKyAgICAvLyBBbmltYXRlZCBpbWFnZXMgPjVNQiBh
cmUgY29uc2lkZXJlZCBsYXJnZSBlbm91Z2ggdGhhdCB3ZSdsbCBvbmx5IGhhbmcgb24KKyAgICAv
LyB0byBvbmUgZnJhbWUgYXQgYSB0aW1lLgorICAgIHN0YXRpYyBjb25zdCB1bnNpZ25lZCBjTGFy
Z2VBbmltYXRpb25DdXRvZmYgPSA1MjQyODgwOworICAgIGlmIChmcmFtZUNvdW50KCkgKiBmcmFt
ZUJ5dGVzKG1fc2l6ZSkgPiBjTGFyZ2VBbmltYXRpb25DdXRvZmYpCisgICAgICAgIGRlc3Ryb3lE
ZWNvZGVkRGF0YShkZXN0cm95QWxsKTsKK30KKwordm9pZCBCaXRtYXBJbWFnZTo6ZGVzdHJveU1l
dGFkYXRhQW5kTm90aWZ5KGludCBmcmFtZXNDbGVhcmVkKQoreworICAgIG1faXNTb2xpZENvbG9y
ID0gZmFsc2U7CisgICAgaW52YWxpZGF0ZVBsYXRmb3JtRGF0YSgpOworCisgICAgY29uc3QgaW50
IGRlbHRhQnl0ZXMgPSBmcmFtZXNDbGVhcmVkICogLWZyYW1lQnl0ZXMobV9zaXplKTsKKyAgICBt
X2RlY29kZWRTaXplICs9IGRlbHRhQnl0ZXM7CisgICAgaWYgKGRlbHRhQnl0ZXMgJiYgaW1hZ2VP
YnNlcnZlcigpKQorICAgICAgICBpbWFnZU9ic2VydmVyKCktPmRlY29kZWRTaXplQ2hhbmdlZCh0
aGlzLCBkZWx0YUJ5dGVzKTsKK30KKworaW50IEJpdG1hcEltYWdlOjpjbGVhckZyYW1lKHNpemVf
dCBmcmFtZSkKK3sKKyAgICBpZiAoIW1fZnJhbWVzW2ZyYW1lXS5tX2ZyYW1lKQorICAgICAgICBy
ZXR1cm4gMDsKKworICAgIG1fZnJhbWVzW2ZyYW1lXS5jbGVhcigpOworICAgIHJldHVybiAxOwog
fQogCiB2b2lkIEJpdG1hcEltYWdlOjpjYWNoZUZyYW1lKHNpemVfdCBpbmRleCkKQEAgLTEyNywx
OSArMTMzLDE0IEBAIHZvaWQgQml0bWFwSW1hZ2U6OmNhY2hlRnJhbWUoc2l6ZV90IGluZGUKICAg
ICAgICAgbV9mcmFtZXNbaW5kZXhdLm1fZHVyYXRpb24gPSBtX3NvdXJjZS5mcmFtZUR1cmF0aW9u
QXRJbmRleChpbmRleCk7CiAgICAgbV9mcmFtZXNbaW5kZXhdLm1faGFzQWxwaGEgPSBtX3NvdXJj
ZS5mcmFtZUhhc0FscGhhQXRJbmRleChpbmRleCk7CiAKLSAgICBpbnQgc2l6ZUNoYW5nZTsKLSAg
ICBpZiAoaW5kZXgpIHsKLSAgICAgICAgSW50U2l6ZSBmcmFtZVNpemUgPSBtX3NvdXJjZS5mcmFt
ZVNpemVBdEluZGV4KGluZGV4KTsKLSAgICAgICAgaWYgKGZyYW1lU2l6ZSAhPSBtX3NpemUpCi0g
ICAgICAgICAgICBtX2hhc1VuaWZvcm1GcmFtZVNpemUgPSBmYWxzZTsKLSAgICAgICAgc2l6ZUNo
YW5nZSA9IG1fZnJhbWVzW2luZGV4XS5tX2ZyYW1lID8gZnJhbWVTaXplLndpZHRoKCkgKiBmcmFt
ZVNpemUuaGVpZ2h0KCkgKiA0IDogMDsKLSAgICB9IGVsc2UKLSAgICAgICAgc2l6ZUNoYW5nZSA9
IG1fZnJhbWVzW2luZGV4XS5tX2ZyYW1lID8gbV9zaXplLndpZHRoKCkgKiBtX3NpemUuaGVpZ2h0
KCkgKiA0IDogMDsKLQotICAgIGlmIChzaXplQ2hhbmdlKSB7Ci0gICAgICAgIG1fZGVjb2RlZFNp
emUgKz0gc2l6ZUNoYW5nZTsKKyAgICBjb25zdCBJbnRTaXplIGZyYW1lU2l6ZShpbmRleCA/IG1f
c291cmNlLmZyYW1lU2l6ZUF0SW5kZXgoaW5kZXgpIDogbV9zaXplKTsKKyAgICBpZiAoZnJhbWVT
aXplICE9IG1fc2l6ZSkKKyAgICAgICAgbV9oYXNVbmlmb3JtRnJhbWVTaXplID0gZmFsc2U7Cisg
ICAgaWYgKG1fZnJhbWVzW2luZGV4XS5tX2ZyYW1lKSB7CisgICAgICAgIGNvbnN0IGludCBkZWx0
YUJ5dGVzID0gZnJhbWVCeXRlcyhmcmFtZVNpemUpOworICAgICAgICBtX2RlY29kZWRTaXplICs9
IGRlbHRhQnl0ZXM7CiAgICAgICAgIGlmIChpbWFnZU9ic2VydmVyKCkpCi0gICAgICAgICAgICBp
bWFnZU9ic2VydmVyKCktPmRlY29kZWRTaXplQ2hhbmdlZCh0aGlzLCBzaXplQ2hhbmdlKTsKKyAg
ICAgICAgICAgIGltYWdlT2JzZXJ2ZXIoKS0+ZGVjb2RlZFNpemVDaGFuZ2VkKHRoaXMsIGRlbHRh
Qnl0ZXMpOwogICAgIH0KIH0KIApAQCAtMTYxLDcgKzE2Miw3IEBAIEludFNpemUgQml0bWFwSW1h
Z2U6OmN1cnJlbnRGcmFtZVNpemUoKSAKIAogYm9vbCBCaXRtYXBJbWFnZTo6ZGF0YUNoYW5nZWQo
Ym9vbCBhbGxEYXRhUmVjZWl2ZWQpCiB7Ci0gICAgZGVzdHJveURlY29kZWREYXRhKHRydWUpOwor
ICAgIGRlc3Ryb3lNZXRhZGF0YUFuZE5vdGlmeShtX2ZyYW1lcy5pc0VtcHR5KCkgPyAwIDogY2xl
YXJGcmFtZShtX2ZyYW1lcy5zaXplKCkgLSAxKSk7CiAgICAgCiAgICAgLy8gRmVlZCBhbGwgdGhl
IGRhdGEgd2UndmUgc2VlbiBzbyBmYXIgdG8gdGhlIGltYWdlIGRlY29kZXIuCiAgICAgbV9hbGxE
YXRhUmVjZWl2ZWQgPSBhbGxEYXRhUmVjZWl2ZWQ7CkBAIC0yNzIsOSArMjczLDExIEBAIHZvaWQg
Qml0bWFwSW1hZ2U6OnN0YXJ0QW5pbWF0aW9uKGJvb2wgY2EKICAgICAgICAgbV9kZXNpcmVkRnJh
bWVTdGFydFRpbWUgPSB0aW1lICsgY3VycmVudER1cmF0aW9uOwogICAgIH0gZWxzZSB7CiAgICAg
ICAgIG1fZGVzaXJlZEZyYW1lU3RhcnRUaW1lICs9IGN1cnJlbnREdXJhdGlvbjsKLSAgICAgICAg
Ly8gSWYgd2UncmUgdG9vIGZhciBiZWhpbmQsIHRoZSB1c2VyIHByb2JhYmx5IGRvZXNuJ3QgY2Fy
ZSBhYm91dAotICAgICAgICAvLyByZXN5bmNpbmcgYW5kIHdlIGNvdWxkIGJ1cm4gYSBsb3Qgb2Yg
dGltZSBsb29waW5nIHRocm91Z2ggZnJhbWVzCi0gICAgICAgIC8vIGJlbG93LiAgSnVzdCByZXNl
dCB0aGUgdGltaW5ncy4KKworICAgICAgICAvLyBXaGVuIGFuIGFuaW1hdGVkIGltYWdlIGlzIG1v
cmUgdGhhbiBmaXZlIG1pbnV0ZXMgb3V0IG9mIGRhdGUsIHRoZQorICAgICAgICAvLyB1c2VyIHBy
b2JhYmx5IGRvZXNuJ3QgY2FyZSBhYm91dCByZXN5bmNpbmcgYW5kIHdlIGNvdWxkIGJ1cm4gYSBs
b3Qgb2YKKyAgICAgICAgLy8gdGltZSBsb29waW5nIHRocm91Z2ggZnJhbWVzIGJlbG93LiAgSnVz
dCByZXNldCB0aGUgdGltaW5ncy4KKyAgICAgICAgY29uc3QgZG91YmxlIGNBbmltYXRpb25SZXN5
bmNDdXRvZmYgPSA1ICogNjA7CiAgICAgICAgIGlmICgodGltZSAtIG1fZGVzaXJlZEZyYW1lU3Rh
cnRUaW1lKSA+IGNBbmltYXRpb25SZXN5bmNDdXRvZmYpCiAgICAgICAgICAgICBtX2Rlc2lyZWRG
cmFtZVN0YXJ0VGltZSA9IHRpbWUgKyBjdXJyZW50RHVyYXRpb247CiAgICAgfQpAQCAtMzY3LDEx
ICszNzAsOSBAQCB2b2lkIEJpdG1hcEltYWdlOjpyZXNldEFuaW1hdGlvbigpCiAgICAgbV9yZXBl
dGl0aW9uc0NvbXBsZXRlID0gMDsKICAgICBtX2Rlc2lyZWRGcmFtZVN0YXJ0VGltZSA9IDA7CiAg
ICAgbV9hbmltYXRpb25GaW5pc2hlZCA9IGZhbHNlOwotICAgIGludCBmcmFtZVNpemUgPSBtX3Np
emUud2lkdGgoKSAqIG1fc2l6ZS5oZWlnaHQoKSAqIDQ7CiAgICAgCiAgICAgLy8gRm9yIGV4dHJl
bWVseSBsYXJnZSBhbmltYXRpb25zLCB3aGVuIHRoZSBhbmltYXRpb24gaXMgcmVzZXQsIHdlIGp1
c3QgdGhyb3cgZXZlcnl0aGluZyBhd2F5LgotICAgIGlmIChmcmFtZUNvdW50KCkgKiBmcmFtZVNp
emUgPiBjTGFyZ2VBbmltYXRpb25DdXRvZmYpCi0gICAgICAgIGRlc3Ryb3lEZWNvZGVkRGF0YSgp
OworICAgIGRlc3Ryb3lEZWNvZGVkRGF0YUlmTmVjZXNzYXJ5KHRydWUpOwogfQogCiB2b2lkIEJp
dG1hcEltYWdlOjphZHZhbmNlQW5pbWF0aW9uKFRpbWVyPEJpdG1hcEltYWdlPiogdGltZXIpCkBA
IC0zOTIsNDUgKzM5MywzMiBAQCBib29sIEJpdG1hcEltYWdlOjppbnRlcm5hbEFkdmFuY2VBbmlt
YXRpCiAgICAgaWYgKCFza2lwcGluZ0ZyYW1lcyAmJiBpbWFnZU9ic2VydmVyKCktPnNob3VsZFBh
dXNlQW5pbWF0aW9uKHRoaXMpKQogICAgICAgICByZXR1cm4gZmFsc2U7CiAKLSAgICBtX2N1cnJl
bnRGcmFtZSsrOworICAgICsrbV9jdXJyZW50RnJhbWU7CisgICAgYm9vbCBhZHZhbmNlZEFuaW1h
dGlvbiA9IHRydWU7CisgICAgYm9vbCBkZXN0cm95QWxsID0gZmFsc2U7CiAgICAgaWYgKG1fY3Vy
cmVudEZyYW1lID49IGZyYW1lQ291bnQoKSkgewogICAgICAgICArK21fcmVwZXRpdGlvbnNDb21w
bGV0ZTsKKwogICAgICAgICAvLyBHZXQgdGhlIHJlcGV0aXRpb24gY291bnQgYWdhaW4uICBJZiB3
ZSB3ZXJlbid0IGFibGUgdG8gZ2V0IGEKICAgICAgICAgLy8gcmVwZXRpdGlvbiBjb3VudCBiZWZv
cmUsIHdlIHNob3VsZCBoYXZlIGRlY29kZWQgdGhlIHdob2xlIGltYWdlIGJ5CiAgICAgICAgIC8v
IG5vdywgc28gaXQgc2hvdWxkIG5vdyBiZSBhdmFpbGFibGUuCiAgICAgICAgIGlmIChyZXBldGl0
aW9uQ291bnQodHJ1ZSkgJiYgbV9yZXBldGl0aW9uc0NvbXBsZXRlID49IG1fcmVwZXRpdGlvbkNv
dW50KSB7CiAgICAgICAgICAgICBtX2FuaW1hdGlvbkZpbmlzaGVkID0gdHJ1ZTsKICAgICAgICAg
ICAgIG1fZGVzaXJlZEZyYW1lU3RhcnRUaW1lID0gMDsKLSAgICAgICAgICAgIG1fY3VycmVudEZy
YW1lLS07Ci0gICAgICAgICAgICBpZiAoc2tpcHBpbmdGcmFtZXMpIHsKLSAgICAgICAgICAgICAg
ICAvLyBVaCBvaC4gIFdlIHRyaWVkIHRvIHNraXAgcGFzdCB0aGUgZW5kIG9mIHRoZSBhbmltYXRp
b24uICBXZSdkCi0gICAgICAgICAgICAgICAgLy8gYmV0dGVyIGRyYXcgdGhpcyBsYXN0IGZyYW1l
LgotICAgICAgICAgICAgICAgIG5vdGlmeU9ic2VydmVyQW5kVHJpbURlY29kZWREYXRhKCk7Ci0g
ICAgICAgICAgICB9Ci0gICAgICAgICAgICByZXR1cm4gZmFsc2U7CisgICAgICAgICAgICAtLW1f
Y3VycmVudEZyYW1lOworICAgICAgICAgICAgYWR2YW5jZWRBbmltYXRpb24gPSBmYWxzZTsKKyAg
ICAgICAgfSBlbHNlIHsKKyAgICAgICAgICAgIG1fY3VycmVudEZyYW1lID0gMDsKKyAgICAgICAg
ICAgIGRlc3Ryb3lBbGwgPSB0cnVlOwogICAgICAgICB9Ci0gICAgICAgIG1fY3VycmVudEZyYW1l
ID0gMDsKICAgICB9CisgICAgZGVzdHJveURlY29kZWREYXRhSWZOZWNlc3NhcnkoZGVzdHJveUFs
bCk7CiAKLSAgICBpZiAoIXNraXBwaW5nRnJhbWVzKQotICAgICAgICBub3RpZnlPYnNlcnZlckFu
ZFRyaW1EZWNvZGVkRGF0YSgpOwotCi0gICAgcmV0dXJuIHRydWU7Ci19Ci0KLXZvaWQgQml0bWFw
SW1hZ2U6Om5vdGlmeU9ic2VydmVyQW5kVHJpbURlY29kZWREYXRhKCkKLXsKLSAgICAvLyBOb3Rp
Znkgb3VyIG9ic2VydmVyIHRoYXQgdGhlIGFuaW1hdGlvbiBoYXMgYWR2YW5jZWQuCi0gICAgaW1h
Z2VPYnNlcnZlcigpLT5hbmltYXRpb25BZHZhbmNlZCh0aGlzKTsKLQotICAgIC8vIEZvciBsYXJn
ZSBhbmltYXRlZCBpbWFnZXMsIGdvIGFoZWFkIGFuZCB0aHJvdyBhd2F5IGZyYW1lcyBhcyB3ZSBn
byB0bwotICAgIC8vIHNhdmUgZm9vdHByaW50LgotICAgIGludCBmcmFtZVNpemUgPSBtX3NpemUu
d2lkdGgoKSAqIG1fc2l6ZS5oZWlnaHQoKSAqIDQ7Ci0gICAgaWYgKGZyYW1lQ291bnQoKSAqIGZy
YW1lU2l6ZSA+IGNMYXJnZUFuaW1hdGlvbkN1dG9mZikgewotICAgICAgICAvLyBEZXN0cm95IGFs
bCBvZiBvdXIgZnJhbWVzIGFuZCBqdXN0IHJlZGVjb2RlIGV2ZXJ5IHRpbWUuICBXZSBzYXZlIHRo
ZQotICAgICAgICAvLyBjdXJyZW50IGZyYW1lIHNpbmNlIHdlJ2xsIG5lZWQgaXQgaW4gZHJhdygp
IGFueXdheS4KLSAgICAgICAgZGVzdHJveURlY29kZWREYXRhKGZhbHNlLCB0cnVlKTsKLSAgICB9
CisgICAgLy8gV2UgbmVlZCB0byBkcmF3IHRoaXMgZnJhbWUgaWYgd2UgYWR2YW5jZWQgdG8gaXQg
d2hpbGUgbm90IHNraXBwaW5nLCBvciBpZgorICAgIC8vIHdoaWxlIHRyeWluZyB0byBza2lwIGZy
YW1lcyB3ZSBoaXQgdGhlIGxhc3QgZnJhbWUgYW5kIHRodXMgaGFkIHRvIHN0b3AuCisgICAgaWYg
KHNraXBwaW5nRnJhbWVzICE9IGFkdmFuY2VkQW5pbWF0aW9uKQorICAgICAgICBpbWFnZU9ic2Vy
dmVyKCktPmFuaW1hdGlvbkFkdmFuY2VkKHRoaXMpOworICAgIHJldHVybiBhZHZhbmNlZEFuaW1h
dGlvbjsKIH0KIAogfQpJbmRleDogV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9CaXRtYXBJbWFn
ZS5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT0KLS0tIFdlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvQml0bWFwSW1hZ2Uu
aAkocmV2aXNpb24gMzg3ODUpCisrKyBXZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL0JpdG1hcElt
YWdlLmgJKHdvcmtpbmcgY29weSkKQEAgLTE2NywxOCArMTY3LDI2IEBAIHByb3RlY3RlZDoKICAg
ICAvLyBEZWNvZGVzIGFuZCBjYWNoZXMgYSBmcmFtZS4gTmV2ZXIgYWNjZXNzZWQgZXhjZXB0IGlu
dGVybmFsbHkuCiAgICAgdm9pZCBjYWNoZUZyYW1lKHNpemVfdCBpbmRleCk7CiAKLSAgICAvLyBD
YWxsZWQgdG8gaW52YWxpZGF0ZSBhbGwgb3VyIGNhY2hlZCBkYXRhLiAgSWYgYW4gaW1hZ2UgaXMg
bG9hZGluZwotICAgIC8vIGluY3JlbWVudGFsbHksIHdlIG9ubHkgaW52YWxpZGF0ZSB0aGUgbGFz
dCBjYWNoZWQgZnJhbWUuICBGb3IgbGFyZ2UKLSAgICAvLyBhbmltYXRlZCBpbWFnZXMsIHdoZXJl
IHdlIHRocm93IGF3YXkgdGhlIGRlY29kZWQgZGF0YSBhZnRlciBldmVyeSBmcmFtZSwKLSAgICAv
LyB8cHJlc2VydmVOZWFyYnlGcmFtZXN8IGNhbiBiZSBzZXQgdG8gcHJlc2VydmUgdGhlIGN1cnJl
bnQgZnJhbWUncyBkYXRhCi0gICAgLy8gYW5kIGVsaW1pbmF0ZSBzb21lIHVubmVjZXNzYXJ5IGR1
cGxpY2F0ZWQgZGVjb2Rpbmcgd29yay4gIFRoaXMgYWxzbwotICAgIC8vIHByZXNlcnZlcyB0aGUg
bmV4dCBmcmFtZSdzIGRhdGEsIGlmIGF2YWlsYWJsZS4gIEluIG1vc3QgY2FzZXMgdGhpcyBoYXMg
bm8KLSAgICAvLyBlZmZlY3Q7IGVpdGhlciB0aGF0IGZyYW1lIGlzbid0IGRlY29kZWQgeWV0LCBv
ciBpdCdzIGFscmVhZHkgYmVlbgotICAgIC8vIGRlc3Ryb3llZCBieSBhIHByZXZpb3VzIGNhbGwu
ICBCdXQgd2hlbiB3ZSBmYWxsIGJlaGluZCBvbiB0aGUgdmVyeSBmaXJzdAotICAgIC8vIGFuaW1h
dGlvbiBsb29wIGFuZCBzdGFydEFuaW1hdGlvbigpIG5lZWRzIHRvICJjYXRjaCB1cCIgb25lIG9y
IG1vcmUKLSAgICAvLyBmcmFtZXMsIHRoaXMgYnJpZWZseSBwcmVzZXJ2ZXMgc29tZSBvZiB0aGF0
IGRlY29kaW5nIHdvcmssIHRvIGVhc2UgQ1BVCi0gICAgLy8gbG9hZCBhbmQgbWFrZSBpdCBsZXNz
IGxpa2VseSB0aGF0IHdlJ2xsIGtlZXAgZmFsbGluZyBiZWhpbmQuCi0gICAgdmlydHVhbCB2b2lk
IGRlc3Ryb3lEZWNvZGVkRGF0YShib29sIGluY3JlbWVudGFsID0gZmFsc2UsIGJvb2wgcHJlc2Vy
dmVOZWFyYnlGcmFtZXMgPSBmYWxzZSk7CisgICAgLy8gQ2FsbGVkIHRvIGludmFsaWRhdGUgY2Fj
aGVkIGRhdGEuICBXaGVuIHxkZXN0cm95QWxsfCBpcyB0cnVlLCB3ZSB3aXBlIG91dAorICAgIC8v
IHRoZSBlbnRpcmUgZnJhbWUgYnVmZmVyIGNhY2hlIGFuZCB0ZWxsIHRoZSBpbWFnZSBzb3VyY2Ug
dG8gZGVzdHJveQorICAgIC8vIGV2ZXJ5dGhpbmc7IHRoaXMgaXMgdXNlZCB3aGVuIGUuZy4gd2Ug
d2FudCB0byBmcmVlIHNvbWUgcm9vbSBpbiB0aGUgaW1hZ2UKKyAgICAvLyBjYWNoZS4gIElmIHxk
ZXN0cm95QWxsfCBpcyBmYWxzZSwgd2Ugb25seSBkZWxldGUgZnJhbWVzIHVwIHRvIHRoZSBjdXJy
ZW50CisgICAgLy8gb25lOyB0aGlzIGlzIHVzZWQgd2hpbGUgYW5pbWF0aW5nIGxhcmdlIGltYWdl
cyB0byBrZWVwIG1lbW9yeSBmb290cHJpbnQKKyAgICAvLyBsb3cgd2l0aG91dCByZWRlY29kaW5n
IHRoZSB3aG9sZSBpbWFnZSBvbiBldmVyeSBmcmFtZS4KKyAgICB2aXJ0dWFsIHZvaWQgZGVzdHJv
eURlY29kZWREYXRhKGJvb2wgZGVzdHJveUFsbCA9IHRydWUpOworCisgICAgLy8gSWYgdGhlIGlt
YWdlIGlzIGxhcmdlIGVub3VnaCwgY2FsbHMgZGVzdHJveURlY29kZWREYXRhKCkgYW5kIHBhc3Nl
cworICAgIC8vIHxkZXN0cm95QWxsfCBhbG9uZy4KKyAgICB2b2lkIGRlc3Ryb3lEZWNvZGVkRGF0
YUlmTmVjZXNzYXJ5KGJvb2wgZGVzdHJveUFsbCk7CisKKyAgICAvLyBHZW5lcmFsbHkgY2FsbGVk
IGJ5IGRlc3Ryb3lEZWNvZGVkRGF0YSgpLCBkZXN0cm95cyB3aG9sZS1pbWFnZSBtZXRhZGF0YQor
ICAgIC8vIGFuZCBub3RpZmllcyBvYnNlcnZlcnMgdGhhdCB0aGUgbWVtb3J5IGZvb3RwcmludCBo
YXMgKGhvcGVmdWxseSkKKyAgICAvLyBkZWNyZWFzZWQgYnkgfGZyYW1lc0NsZWFyZWR8IHRpbWVz
IHRoZSBzaXplIChpbiBieXRlcykgb2YgYSBmcmFtZS4KKyAgICB2b2lkIGRlc3Ryb3lNZXRhZGF0
YUFuZE5vdGlmeShpbnQgZnJhbWVzQ2xlYXJlZCk7CisKKyAgICAvLyBJZiBmcmFtZSB8ZnJhbWV8
IGlzIGNhY2hlZCwgY2xlYXJzIHRoZSBjYWNoZSBoYW5kbGUuICBSZXR1cm5zIHRoZSBudW1iZXIK
KyAgICAvLyBvZiBmcmFtZXMgYWN0dWFsbHkgY2xlYXJlZC4KKyAgICBpbnQgY2xlYXJGcmFtZShz
aXplX3QgZnJhbWUpOwogCiAgICAgLy8gV2hldGhlciBvciBub3Qgc2l6ZSBpcyBhdmFpbGFibGUg
eWV0LiAgICAKICAgICBib29sIGlzU2l6ZUF2YWlsYWJsZSgpOwpAQCAtMTk2LDkgKzIwNCw2IEBA
IHByb3RlY3RlZDoKICAgICAvLyBSZXR1cm5zIHdoZXRoZXIgdGhlIGFuaW1hdGlvbiB3YXMgYWR2
YW5jZWQuCiAgICAgYm9vbCBpbnRlcm5hbEFkdmFuY2VBbmltYXRpb24oYm9vbCBza2lwcGluZ0Zy
YW1lcyk7CiAKLSAgICAvLyBIZWxwZXIgZm9yIGludGVybmFsQWR2YW5jZUFuaW1hdGlvbigpLgot
ICAgIHZvaWQgbm90aWZ5T2JzZXJ2ZXJBbmRUcmltRGVjb2RlZERhdGEoKTsKLQogICAgIC8vIEhh
bmRsZSBwbGF0Zm9ybS1zcGVjaWZpYyBkYXRhCiAgICAgdm9pZCBpbml0UGxhdGZvcm1EYXRhKCk7
CiAgICAgdm9pZCBpbnZhbGlkYXRlUGxhdGZvcm1EYXRhKCk7CkluZGV4OiBXZWJDb3JlL3BsYXRm
b3JtL2dyYXBoaWNzL0dlbmVyYXRlZEltYWdlLmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gV2ViQ29yZS9wbGF0
Zm9ybS9ncmFwaGljcy9HZW5lcmF0ZWRJbWFnZS5oCShyZXZpc2lvbiAzODc4NSkKKysrIFdlYkNv
cmUvcGxhdGZvcm0vZ3JhcGhpY3MvR2VuZXJhdGVkSW1hZ2UuaAkod29ya2luZyBjb3B5KQpAQCAt
NTMsNyArNTMsNyBAQCBwdWJsaWM6CiAgICAgdmlydHVhbCBJbnRTaXplIHNpemUoKSBjb25zdCB7
IHJldHVybiBtX3NpemU7IH0KIAogICAgIC8vIEFzc3VtZSB0aGF0IGdlbmVyYXRlZCBjb250ZW50
IGhhcyBubyBkZWNvZGVkIGRhdGEgd2UgbmVlZCB0byB3b3JyeSBhYm91dAotICAgIHZpcnR1YWwg
dm9pZCBkZXN0cm95RGVjb2RlZERhdGEoYm9vbCBpbmNyZW1lbnRhbCA9IGZhbHNlLCBib29sIHBy
ZXNlcnZlTmVhcmJ5RnJhbWVzID0gZmFsc2UpIHsgfQorICAgIHZpcnR1YWwgdm9pZCBkZXN0cm95
RGVjb2RlZERhdGEoYm9vbCBkZXN0cm95QWxsID0gdHJ1ZSkgeyB9CiAgICAgdmlydHVhbCB1bnNp
Z25lZCBkZWNvZGVkU2l6ZSgpIGNvbnN0IHsgcmV0dXJuIDA7IH0KIAogcHJvdGVjdGVkOgpJbmRl
eDogV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9JbWFnZS5oCj09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFdlYkNv
cmUvcGxhdGZvcm0vZ3JhcGhpY3MvSW1hZ2UuaAkocmV2aXNpb24gMzg3ODUpCisrKyBXZWJDb3Jl
L3BsYXRmb3JtL2dyYXBoaWNzL0ltYWdlLmgJKHdvcmtpbmcgY29weSkKQEAgLTEwOCw3ICsxMDgs
NyBAQCBwdWJsaWM6CiAgICAgYm9vbCBzZXREYXRhKFBhc3NSZWZQdHI8U2hhcmVkQnVmZmVyPiBk
YXRhLCBib29sIGFsbERhdGFSZWNlaXZlZCk7CiAgICAgdmlydHVhbCBib29sIGRhdGFDaGFuZ2Vk
KGJvb2wgYWxsRGF0YVJlY2VpdmVkKSB7IHJldHVybiBmYWxzZTsgfQogCi0gICAgdmlydHVhbCB2
b2lkIGRlc3Ryb3lEZWNvZGVkRGF0YShib29sIGluY3JlbWVudGFsID0gZmFsc2UsIGJvb2wgcHJl
c2VydmVOZWFyYnlGcmFtZXMgPSBmYWxzZSkgPSAwOworICAgIHZpcnR1YWwgdm9pZCBkZXN0cm95
RGVjb2RlZERhdGEoYm9vbCBkZXN0cm95QWxsID0gdHJ1ZSkgPSAwOwogICAgIHZpcnR1YWwgdW5z
aWduZWQgZGVjb2RlZFNpemUoKSBjb25zdCA9IDA7CiAKICAgICBTaGFyZWRCdWZmZXIqIGRhdGEo
KSB7IHJldHVybiBtX2RhdGEuZ2V0KCk7IH0KSW5kZXg6IFdlYkNvcmUvcGxhdGZvcm0vZ3JhcGhp
Y3MvSW1hZ2VTb3VyY2UuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBXZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNz
L0ltYWdlU291cmNlLmgJKHJldmlzaW9uIDM4Nzg1KQorKysgV2ViQ29yZS9wbGF0Zm9ybS9ncmFw
aGljcy9JbWFnZVNvdXJjZS5oCSh3b3JraW5nIGNvcHkpCkBAIC04MiwxMCArODIsMjYgQEAgcHVi
bGljOgogICAgIEltYWdlU291cmNlKCk7CiAgICAgfkltYWdlU291cmNlKCk7CiAKLSAgICB2b2lk
IGNsZWFyKCk7CisgICAgLy8gVGVsbHMgdGhlIEltYWdlU291cmNlIHRoYXQgdGhlIEltYWdlIG5v
IGxvbmdlciBjYXJlcyBhYm91dCBkZWNvZGVkIGZyYW1lCisgICAgLy8gZGF0YSAtLSBhdCBhbGwg
KGlmIHxkZXN0cm95QWxsfCBpcyB0cnVlKSwgb3IgYmVmb3JlIGZyYW1lCisgICAgLy8gfGNsZWFy
QmVmb3JlRnJhbWV8IChpZiB8ZGVzdHJveUFsbHwgaXMgZmFsc2UpLiAgVGhlIEltYWdlU291cmNl
IHNob3VsZAorICAgIC8vIGRlbGV0ZSBjYWNoZWQgZGVjb2RlZCBkYXRhIGZvciB0aGVzZSBmcmFt
ZXMgd2hlcmUgcG9zc2libGUgdG8ga2VlcCBtZW1vcnkKKyAgICAvLyB1c2FnZSBsb3cuICBXaGVu
IHxkZXN0cm95QWxsfCBpcyB0cnVlLCB0aGUgSW1hZ2VTb3VyY2Ugc2hvdWxkIGFsc28gcmVzZXQK
KyAgICAvLyBhbnkgbG9jYWwgc3RhdGUgc28gdGhhdCBkZWNvZGluZyBjYW4gYmVnaW4gYWdhaW4u
CisgICAgLy8KKyAgICAvLyBJbXBsZW1lbnRhdGlvbnMgdGhhdCBkZWxldGUgbGVzcyB0aGFuIHdo
YXQncyBzcGVjaWZpZWQgYWJvdmUgd2FzdGUKKyAgICAvLyBtZW1vcnkuICBJbXBsZW1lbnRhdGlv
bnMgdGhhdCBkZWxldGUgbW9yZSBtYXkgYnVybiBDUFUgcmUtZGVjb2RpbmcgZnJhbWVzCisgICAg
Ly8gdGhhdCBjb3VsZCBvdGhlcndpc2UgaGF2ZSBiZWVuIGNhY2hlZCwgb3IgZW5jb3VudGVyIGVy
cm9ycyBpZiB0aGV5J3JlCisgICAgLy8gYXNrZWQgdG8gZGVjb2RlIGZyYW1lcyB0aGV5IGNhbid0
IGRlY29kZSBkdWUgdG8gdGhlIGxvc3Mgb2YgcHJldmlvdXMKKyAgICAvLyBkZWNvZGVkIGZyYW1l
cy4KKyAgICAvLworICAgIC8vIENhbGxlcnMgc2hvdWxkIG5vdCBjYWxsIGNsZWFyKGZhbHNlLCBu
KSBhbmQgc3Vic2VxdWVudGx5IGNhbGwKKyAgICAvLyBjcmVhdGVGcmFtZUF0SW5kZXgobSkgd2l0
aCBtIDwgbiwgdW5sZXNzIHRoZXkgZmlyc3QgY2FsbCBjbGVhcih0cnVlKS4KKyAgICAvLyBUaGlz
IGVuc3VyZXMgdGhhdCBzdGF0ZWZ1bCBJbWFnZVNvdXJjZXMvZGVjb2RlcnMgd2lsbCB3b3JrIHBy
b3Blcmx5LgorICAgIHZvaWQgY2xlYXIoYm9vbCBkZXN0cm95QWxsLCBzaXplX3QgY2xlYXJCZWZv
cmVGcmFtZSA9IDApOwogCiAgICAgYm9vbCBpbml0aWFsaXplZCgpIGNvbnN0OwotICAgIAorCiAg
ICAgdm9pZCBzZXREYXRhKFNoYXJlZEJ1ZmZlciogZGF0YSwgYm9vbCBhbGxEYXRhUmVjZWl2ZWQp
OwogCiAgICAgYm9vbCBpc1NpemVBdmFpbGFibGUoKTsKQEAgLTkzLDExICsxMDksMTMgQEAgcHVi
bGljOgogICAgIEludFNpemUgZnJhbWVTaXplQXRJbmRleChzaXplX3QpIGNvbnN0OwogCiAgICAg
aW50IHJlcGV0aXRpb25Db3VudCgpOwotICAgIAorCiAgICAgc2l6ZV90IGZyYW1lQ291bnQoKSBj
b25zdDsKLSAgICAKKworICAgIC8vIENhbGxlcnMgc2hvdWxkIG5vdCBjYWxsIHRoaXMgYWZ0ZXIg
Y2FsbGluZyBjbGVhcigpIHdpdGggYSBoaWdoZXIgaW5kZXg7CisgICAgLy8gc2VlIGNvbW1lbnRz
IG9uIGNsZWFyKCkgYWJvdmUuCiAgICAgTmF0aXZlSW1hZ2VQdHIgY3JlYXRlRnJhbWVBdEluZGV4
KHNpemVfdCk7Ci0gICAgCisKICAgICBmbG9hdCBmcmFtZUR1cmF0aW9uQXRJbmRleChzaXplX3Qp
OwogICAgIGJvb2wgZnJhbWVIYXNBbHBoYUF0SW5kZXgoc2l6ZV90KTsgLy8gV2hldGhlciBvciBu
b3QgdGhlIGZyYW1lIGFjdHVhbGx5IHVzZWQgYW55IGFscGhhLgogICAgIGJvb2wgZnJhbWVJc0Nv
bXBsZXRlQXRJbmRleChzaXplX3QpOyAvLyBXaGV0aGVyIG9yIG5vdCB0aGUgZnJhbWUgaXMgY29t
cGxldGVseSBkZWNvZGVkLgpJbmRleDogV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9jYWlyby9J
bWFnZVNvdXJjZUNhaXJvLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBXZWJDb3JlL3BsYXRmb3JtL2dyYXBo
aWNzL2NhaXJvL0ltYWdlU291cmNlQ2Fpcm8uY3BwCShyZXZpc2lvbiAzODc4NSkKKysrIFdlYkNv
cmUvcGxhdGZvcm0vZ3JhcGhpY3MvY2Fpcm8vSW1hZ2VTb3VyY2VDYWlyby5jcHAJKHdvcmtpbmcg
Y29weSkKQEAgLTk3LDEzICs5NywxOSBAQCBJbWFnZVNvdXJjZTo6SW1hZ2VTb3VyY2UoKQogCiBJ
bWFnZVNvdXJjZTo6fkltYWdlU291cmNlKCkKIHsKLSAgICBjbGVhcigpOworICAgIGNsZWFyKHRy
dWUpOwogfQogCi12b2lkIEltYWdlU291cmNlOjpjbGVhcigpCit2b2lkIEltYWdlU291cmNlOjpj
bGVhcihib29sIGRlc3Ryb3lBbGwsIHNpemVfdCBjbGVhckJlZm9yZUZyYW1lKQogewotICAgIGRl
bGV0ZSBtX2RlY29kZXI7Ci0gICAgbV9kZWNvZGVyID0gMDsKKyAgICBpZiAoZGVzdHJveUFsbCkg
eworICAgICAgICBkZWxldGUgbV9kZWNvZGVyOworICAgICAgICBtX2RlY29kZXIgPSAwOworICAg
ICAgICByZXR1cm47CisgICAgfQorCisgICAgaWYgKG1fZGVjb2RlcikKKyAgICAgICAgbV9kZWNv
ZGVyLT5jbGVhckZyYW1lQnVmZmVyQ2FjaGUoY2xlYXJCZWZvcmVGcmFtZSk7CiB9CiAKIGJvb2wg
SW1hZ2VTb3VyY2U6OmluaXRpYWxpemVkKCkgY29uc3QKSW5kZXg6IFdlYkNvcmUvcGxhdGZvcm0v
Z3JhcGhpY3MvY2cvSW1hZ2VTb3VyY2VDRy5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gV2ViQ29yZS9wbGF0
Zm9ybS9ncmFwaGljcy9jZy9JbWFnZVNvdXJjZUNHLmNwcAkocmV2aXNpb24gMzg3ODUpCisrKyBX
ZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2NnL0ltYWdlU291cmNlQ0cuY3BwCSh3b3JraW5nIGNv
cHkpCkBAIC00MywxNSArNDMsMjYgQEAgSW1hZ2VTb3VyY2U6OkltYWdlU291cmNlKCkKIAogSW1h
Z2VTb3VyY2U6On5JbWFnZVNvdXJjZSgpCiB7Ci0gICAgY2xlYXIoKTsKKyAgICBjbGVhcih0cnVl
KTsKIH0KIAotdm9pZCBJbWFnZVNvdXJjZTo6Y2xlYXIoKQordm9pZCBJbWFnZVNvdXJjZTo6Y2xl
YXIoYm9vbCBkZXN0cm95QWxsLCBzaXplX3QgY2xlYXJCZWZvcmVGcmFtZSkKIHsKLSAgICBpZiAo
bV9kZWNvZGVyKSB7Ci0gICAgICAgIENGUmVsZWFzZShtX2RlY29kZXIpOwotICAgICAgICBtX2Rl
Y29kZXIgPSAwOworICAgIGlmIChkZXN0cm95QWxsKSB7CisgICAgICAgIGlmIChtX2RlY29kZXIp
IHsKKyAgICAgICAgICAgIENGUmVsZWFzZShtX2RlY29kZXIpOworICAgICAgICAgICAgbV9kZWNv
ZGVyID0gMDsKKyAgICAgICAgfQorICAgICAgICByZXR1cm47CiAgICAgfQorCisgICAgLy8gVE9E
Tyhwa2FzdGluZyk6IElmIHRoZXJlIHdhcyBhbiBhcHByb3ByaWF0ZSBBUEkgdG8gZG8gc28sIHdl
IGNvdWxkCisgICAgLy8gZXhwbGljaXRseSB0ZWxsIHRoZSBDRyBkZWNvZGVyIGl0IGNhbiBkaXNj
YXJkIGZyYW1lcyBiZWZvcmUKKyAgICAvLyB8Y2xlYXJCZWZvcmVGcmFtZXwgKG5vdCBpbmNsdWRp
bmcgYW55dGhpbmcgaXQgbmVlZHMgdG8ga2VlcCBhcm91bmQKKyAgICAvLyBsb2NhbGx5IHRvIGNv
bnRpbnVlIGRlY29kaW5nIGNvcnJlY3RseSkuICBUaGlzIG1pZ2h0IGhlbHAgdGhlIGRlY29kZXIK
KyAgICAvLyBvcHRpbWl6ZSBtZW1vcnkvQ1BVIHVzYWdlLiAgUmlnaHQgbm93IHRoZSBkZWNvZGVy
IHNlZW1zIHRvIHRocm93IGF3YXkKKyAgICAvLyBmcmFtZXMgYWdncmVzc2l2ZWx5IGFuZCB0aGVu
IHJlLWRlY29kZSBmcm9tIHRoZSBiZWdpbm5pbmcgZWFjaCB0aW1lLCB0aHVzCisgICAgLy8gdXNp
bmcgbW9yZSBDUFUgdGhhbiBpdCBuZWVkcyB0by4KIH0KIAogQ0ZEaWN0aW9uYXJ5UmVmIGltYWdl
U291cmNlT3B0aW9ucygpCkluZGV4OiBXZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2NnL1BERkRv
Y3VtZW50SW1hZ2UuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBXZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2Nn
L1BERkRvY3VtZW50SW1hZ2UuaAkocmV2aXNpb24gMzg3ODUpCisrKyBXZWJDb3JlL3BsYXRmb3Jt
L2dyYXBoaWNzL2NnL1BERkRvY3VtZW50SW1hZ2UuaAkod29ya2luZyBjb3B5KQpAQCAtNTAsNyAr
NTAsNyBAQCBuYW1lc3BhY2UgV2ViQ29yZSB7CiAKICAgICAgICAgLy8gRklYTUU6IFBERiBJbWFn
ZXMgYXJlIHVuZGVycmVwb3J0aW5nIGRlY29kZWQgc2l6ZXMgYW5kIHdpbGwgYmUgdW5hYmxlCiAg
ICAgICAgIC8vIHRvIHBydW5lIGJlY2F1c2UgdGhlc2UgZnVuY3Rpb25zIGFyZSBub3QgaW1wbGVt
ZW50ZWQgeWV0LgotICAgICAgICB2aXJ0dWFsIHZvaWQgZGVzdHJveURlY29kZWREYXRhKGJvb2wg
aW5jcmVtZW50YWwgPSBmYWxzZSwgYm9vbCBwcmVzZXJ2ZU5lYXJieUZyYW1lcyA9IGZhbHNlKSB7
IH0KKyAgICAgICAgdmlydHVhbCB2b2lkIGRlc3Ryb3lEZWNvZGVkRGF0YShib29sIGRlc3Ryb3lB
bGwgPSB0cnVlKSB7IH0KICAgICAgICAgdmlydHVhbCB1bnNpZ25lZCBkZWNvZGVkU2l6ZSgpIGNv
bnN0IHsgcmV0dXJuIDA7IH0KIAogICAgICAgICB2aXJ0dWFsIEludFNpemUgc2l6ZSgpIGNvbnN0
OwpJbmRleDogV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9xdC9TdGlsbEltYWdlUXQuaAo9PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09Ci0tLSBXZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL3F0L1N0aWxsSW1hZ2VRdC5oCShy
ZXZpc2lvbiAzODc4NSkKKysrIFdlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvcXQvU3RpbGxJbWFn
ZVF0LmgJKHdvcmtpbmcgY29weSkKQEAgLTQxLDcgKzQxLDcgQEAgbmFtZXNwYWNlIFdlYkNvcmUg
ewogCiAgICAgICAgIC8vIEZJWE1FOiBTdGlsbEltYWdlcyBhcmUgdW5kZXJyZXBvcnRpbmcgZGVj
b2RlZCBzaXplcyBhbmQgd2lsbCBiZSB1bmFibGUKICAgICAgICAgLy8gdG8gcHJ1bmUgYmVjYXVz
ZSB0aGVzZSBmdW5jdGlvbnMgYXJlIG5vdCBpbXBsZW1lbnRlZCB5ZXQuCi0gICAgICAgIHZpcnR1
YWwgdm9pZCBkZXN0cm95RGVjb2RlZERhdGEoYm9vbCBpbmNyZW1lbnRhbCA9IGZhbHNlLCBib29s
IHByZXNlcnZlTmVhcmJ5RnJhbWVzID0gZmFsc2UpIHsgfQorICAgICAgICB2aXJ0dWFsIHZvaWQg
ZGVzdHJveURlY29kZWREYXRhKGJvb2wgZGVzdHJveUFsbCA9IHRydWUpIHsgfQogICAgICAgICB2
aXJ0dWFsIHVuc2lnbmVkIGRlY29kZWRTaXplKCkgY29uc3QgeyByZXR1cm4gMDsgfQogCiAgICAg
ICAgIHZpcnR1YWwgSW50U2l6ZSBzaXplKCkgY29uc3Q7CkluZGV4OiBXZWJDb3JlL3BsYXRmb3Jt
L2ltYWdlLWRlY29kZXJzL0ltYWdlRGVjb2Rlci5oCj09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFdlYkNvcmUvcGxh
dGZvcm0vaW1hZ2UtZGVjb2RlcnMvSW1hZ2VEZWNvZGVyLmgJKHJldmlzaW9uIDM4Nzg1KQorKysg
V2ViQ29yZS9wbGF0Zm9ybS9pbWFnZS1kZWNvZGVycy9JbWFnZURlY29kZXIuaAkod29ya2luZyBj
b3B5KQpAQCAtNTQsNiArNTQsMTYgQEAgcHVibGljOgogICAgICAgICAgICAgICAgICAgICAgbV9k
aXNwb3NhbE1ldGhvZChEaXNwb3NlTm90U3BlY2lmaWVkKSwgbV9oYXNBbHBoYShmYWxzZSkKICAg
ICB7fSAKIAorICAgIHZvaWQgY2xlYXIoKSB7CisgICAgICBtX2J5dGVzLmNsZWFyKCk7CisgICAg
ICBtX3JlY3QgPSBJbnRSZWN0KCk7CisgICAgICBtX2hlaWdodCA9IDA7CisgICAgICBtX3N0YXR1
cyA9IEZyYW1lRW1wdHk7CisgICAgICBtX2R1cmF0aW9uID0gMDsKKyAgICAgIG1fZGlzcG9zYWxN
ZXRob2QgPSBEaXNwb3NlTm90U3BlY2lmaWVkOworICAgICAgbV9oYXNBbHBoYSA9IGZhbHNlOwor
ICAgIH0KKwogICAgIGNvbnN0IFJHQkEzMkFycmF5JiBieXRlcygpIGNvbnN0IHsgcmV0dXJuIG1f
Ynl0ZXM7IH0KICAgICBSR0JBMzJBcnJheSYgYnl0ZXMoKSB7IHJldHVybiBtX2J5dGVzOyB9CiAg
ICAgY29uc3QgSW50UmVjdCYgcmVjdCgpIGNvbnN0IHsgcmV0dXJuIG1fcmVjdDsgfQpAQCAtMTM1
LDYgKzE0NSwxNCBAQCBwdWJsaWM6CiAgICAgYm9vbCBmYWlsZWQoKSBjb25zdCB7IHJldHVybiBt
X2ZhaWxlZDsgfQogICAgIHZvaWQgc2V0RmFpbGVkKCkgeyBtX2ZhaWxlZCA9IHRydWU7IH0KIAor
ICAgIC8vIFdpcGUgb3V0IGZyYW1lcyBpbiB0aGUgZnJhbWUgYnVmZmVyIGNhY2hlIGJlZm9yZSB8
Y2xlYXJCZWZvcmVGcmFtZXwsCisgICAgLy8gYXNzdW1pbmcgdGhpcyBjYW4gYmUgZG9uZSB3aXRo
b3V0IGJyZWFraW5nIGRlY29kaW5nLiAgRGlmZmVyZW50IGRlY29kZXJzCisgICAgLy8gcGxhY2Ug
ZGlmZmVyZW50IHJlc3RyaWN0aW9ucyBvbiB3aGF0IGZyYW1lcyBhcmUgc2FmZSB0byBkZXN0cm95
LCBzbyB0aGlzCisgICAgLy8gaXMgbGVmdCB0byB0aGVtIHRvIGltcGxlbWVudC4KKyAgICAvLyBG
b3IgY29udmVuaWVuY2UncyBzYWtlLCB3ZSBwcm92aWRlIGEgZGVmYXVsdCAoZW1wdHkpIGltcGxl
bWVudGF0aW9uLAorICAgIC8vIHNpbmNlIGluIHByYWN0aWNlIG9ubHkgR0lGcyB3aWxsIGV2ZXIg
dXNlIHRoaXMuCisgICAgdmlydHVhbCB2b2lkIGNsZWFyRnJhbWVCdWZmZXJDYWNoZShzaXplX3Qg
Y2xlYXJCZWZvcmVGcmFtZSkgeyB9CisKIHByb3RlY3RlZDoKICAgICBSZWZQdHI8U2hhcmVkQnVm
ZmVyPiBtX2RhdGE7IC8vIFRoZSBlbmNvZGVkIGRhdGEuCiAgICAgVmVjdG9yPFJHQkEzMkJ1ZmZl
cj4gbV9mcmFtZUJ1ZmZlckNhY2hlOwpJbmRleDogV2ViQ29yZS9wbGF0Zm9ybS9pbWFnZS1kZWNv
ZGVycy9naWYvR0lGSW1hZ2VEZWNvZGVyLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBXZWJDb3JlL3BsYXRm
b3JtL2ltYWdlLWRlY29kZXJzL2dpZi9HSUZJbWFnZURlY29kZXIuY3BwCShyZXZpc2lvbiAzODc4
NSkKKysrIFdlYkNvcmUvcGxhdGZvcm0vaW1hZ2UtZGVjb2RlcnMvZ2lmL0dJRkltYWdlRGVjb2Rl
ci5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTE1Niw5ICsxNTYsMTggQEAgaW50IEdJRkltYWdlRGVj
b2Rlcjo6cmVwZXRpdGlvbkNvdW50KCkgYwogICAgIC8vIHBhY2tldHMgc2VudCBiYWNrIGJ5IHRo
ZSB3ZWJzZXJ2ZXIpIG5vdCBhbHdheXMuICBPdXIgY2FsbGVyIGlzCiAgICAgLy8gcmVzcG9uc2li
bGUgZm9yIHdhaXRpbmcgdW50aWwgaW1hZ2UgZGVjb2RpbmcgaGFzIGZpbmlzaGVkIHRvIGFzayB0
aGlzIGlmCiAgICAgLy8gaXQgbmVlZHMgYW4gYXV0aG9yaXRhdGl2ZSBhbnN3ZXIuICBJbiB0aGUg
bWVhbnRpbWUsIHdlIHNob3VsZCBkZWZhdWx0IHRvCi0gICAgLy8gImxvb3Agb25jZSIsIGJvdGgg
aW4gdGhlIHJlYWRlciBhbmQgaGVyZS4KLSAgICBpZiAobV9yZWFkZXIpCi0gICAgICAgIG1fcmVw
ZXRpdGlvbkNvdW50ID0gbV9yZWFkZXItPnJlcGV0aXRpb25Db3VudCgpOworICAgIC8vICJsb29w
IG9uY2UiLgorICAgIGlmIChtX3JlYWRlcikgeworICAgICAgICAvLyBBZGRlZCB3cmlua2xlOiBJ
bWFnZVNvdXJjZTo6Y2xlYXIoKSBtYXkgZGVzdHJveSB0aGUgcmVhZGVyLCBtYWtpbmcKKyAgICAg
ICAgLy8gdGhlIHJlc3VsdCBmcm9tIHRoZSByZWFkZXIgX2xlc3NfIGF1dGhvcml0YXRpdmUgb24g
ZnV0dXJlIGNhbGxzLiAgVG8KKyAgICAgICAgLy8gZGV0ZWN0IHRoaXMsIHRoZSByZWFkZXIgcmV0
dXJucyBjTG9vcENvdW50Tm90U2VlbiAoLTIpIGluc3RlYWQgb2YKKyAgICAgICAgLy8gY0FuaW1h
dGlvbkxvb3BPbmNlICgtMSkgd2hlbiBpdHMgY3VycmVudCBpbmNhcm5hdGlvbiBoYXNuJ3QgYWN0
dWFsbHkKKyAgICAgICAgLy8gc2VlbiBhIGxvb3AgY291bnQgeWV0OyBpbiB0aGlzIGNhc2Ugd2Ug
cmV0dXJuIG91ciBwcmV2aW91c2x5LWNhY2hlZAorICAgICAgICAvLyB2YWx1ZS4KKyAgICAgICAg
Y29uc3QgaW50IHJlcGV0aXRpb25Db3VudCA9IG1fcmVhZGVyLT5yZXBldGl0aW9uQ291bnQoKTsK
KyAgICAgICAgaWYgKHJlcGV0aXRpb25Db3VudCAhPSBjTG9vcENvdW50Tm90U2VlbikKKyAgICAg
ICAgICAgIG1fcmVwZXRpdGlvbkNvdW50ID0gcmVwZXRpdGlvbkNvdW50OworICAgIH0KICAgICBy
ZXR1cm4gbV9yZXBldGl0aW9uQ291bnQ7CiB9CiAKQEAgLTE3NCw2ICsxODMsNDAgQEAgUkdCQTMy
QnVmZmVyKiBHSUZJbWFnZURlY29kZXI6OmZyYW1lQnVmZgogICAgIHJldHVybiAmZnJhbWU7CiB9
CiAKK3ZvaWQgR0lGSW1hZ2VEZWNvZGVyOjpjbGVhckZyYW1lQnVmZmVyQ2FjaGUoc2l6ZV90IGNs
ZWFyQmVmb3JlRnJhbWUpCit7CisgICAgLy8gSW4gc29tZSBjYXNlcywgbGlrZSBpZiB0aGUgZGVj
b2RlciB3YXMgZGVzdHJveWVkIHdoaWxlIGFuaW1hdGluZywgd2UKKyAgICAvLyBjYW4gYmUgYXNr
ZWQgdG8gY2xlYXIgbW9yZSBmcmFtZXMgdGhhbiB3ZSBjdXJyZW50bHkgaGF2ZS4KKyAgICBpZiAo
bV9mcmFtZUJ1ZmZlckNhY2hlLmlzRW1wdHkoKSkKKyAgICAgICAgcmV0dXJuOyAgLy8gTm90aGlu
ZyB0byBkby4KKyAgICAvLyBUaGUgIi0xIiBoZXJlIGlzIHRyaWNreS4gIEl0IGRvZXMgbm90IG1l
YW4gdGhhdCB8Y2xlYXJCZWZvcmVGcmFtZXwgaXMgdGhlCisgICAgLy8gbGFzdCBmcmFtZSB3ZSB3
aXNoIHRvIHByZXNlcnZlLCBidXQgcmF0aGVyIHRoYXQgd2UgbmV2ZXIgd2FudCB0byBjbGVhcgor
ICAgIC8vIHRoZSB2ZXJ5IGxhc3QgZnJhbWUgaW4gdGhlIGNhY2hlOiBpdCdzIGVtcHR5IChzbyBj
bGVhcmluZyBpdCBpcworICAgIC8vIHBvaW50bGVzcyksIGl0J3MgcGFydGlhbCAoc28gd2UgZG9u
J3Qgd2FudCB0byBjbGVhciBpdCBhbnl3YXkpLCBvciB0aGUKKyAgICAvLyBjYWNoZSBjb3VsZCBi
ZSBlbmxhcmdlZCB3aXRoIGEgZnV0dXJlIHNldERhdGEoKSBjYWxsIGFuZCBpdCBjb3VsZCBiZQor
ICAgIC8vIG5lZWRlZCB0byBjb25zdHJ1Y3QgdGhlIG5leHQgZnJhbWUgKHNlZSBjb21tZW50cyBi
ZWxvdykuICBDYWxsZXJzIGNhbgorICAgIC8vIGFsd2F5cyB1c2UgSW1hZ2VTb3VyY2U6OmNsZWFy
KHRydWUsIC4uLikgdG8gY29tcGxldGVseSBmcmVlIHRoZSBtZW1vcnkgaW4KKyAgICAvLyB0aGlz
IGNhc2UuCisgICAgY2xlYXJCZWZvcmVGcmFtZSA9IHN0ZDo6bWluKGNsZWFyQmVmb3JlRnJhbWUs
IG1fZnJhbWVCdWZmZXJDYWNoZS5zaXplKCkgLSAxKTsKKyAgICBjb25zdCBWZWN0b3I8UkdCQTMy
QnVmZmVyPjo6aXRlcmF0b3IgZW5kKG1fZnJhbWVCdWZmZXJDYWNoZS5iZWdpbigpICsgY2xlYXJC
ZWZvcmVGcmFtZSk7CisgICAgZm9yIChWZWN0b3I8UkdCQTMyQnVmZmVyPjo6aXRlcmF0b3IgaSht
X2ZyYW1lQnVmZmVyQ2FjaGUuYmVnaW4oKSk7IGkgIT0gZW5kOyArK2kpIHsKKyAgICAgICAgaWYg
KGktPnN0YXR1cygpID09IFJHQkEzMkJ1ZmZlcjo6RnJhbWVFbXB0eSkKKyAgICAgICAgICAgIGNv
bnRpbnVlOyAgLy8gTm90aGluZyB0byBkby4KKworICAgICAgICAvLyBUaGUgbGF5b3V0IG9mIGZy
YW1lcyBpczoKKyAgICAgICAgLy8gW2VtcHR5IGZyYW1lc11bY29tcGxldGUgZnJhbWVzXVtwYXJ0
aWFsIGZyYW1lXVtlbXB0eSBmcmFtZXNdCisgICAgICAgIC8vIC4uLndoZXJlIGVhY2ggb2YgdGhl
c2UgZ3JvdXBzIG1heSBiZSBlbXB0eS4gIFdlIHNob3VsZCBub3QgY2xlYXIgYQorICAgICAgICAv
LyBwYXJ0aWFsIGZyYW1lIHNpbmNlIHRoYXQncyB3aGF0J3MgYmVpbmcgZGVjb2RlZCByaWdodCBu
b3csIGFuZCB3ZQorICAgICAgICAvLyBhbHNvIHNob3VsZCBub3QgY2xlYXIgdGhlIGxhc3QgY29t
cGxldGUgZnJhbWUsIHNpbmNlIGl0IG1heSBiZSBuZWVkZWQKKyAgICAgICAgLy8gd2hlbiBjb25z
dHJ1Y3RpbmcgdGhlIG5leHQgZnJhbWUuICBOb3RlIHRoYXQgImkgKyAxIiBpcyBzYWZlIHNpbmNl
CisgICAgICAgIC8vIGkgPCBlbmQgPCBtX2ZyYW1lQnVmZmVyQ2FjaGUuZW5kKCkuCisgICAgICAg
IGlmICgoaS0+c3RhdHVzKCkgPT0gUkdCQTMyQnVmZmVyOjpGcmFtZVBhcnRpYWwpIHx8ICgoaSAr
IDEpLT5zdGF0dXMoKSAhPSBSR0JBMzJCdWZmZXI6OkZyYW1lQ29tcGxldGUpKQorICAgICAgICAg
ICAgYnJlYWs7CisKKyAgICAgICAgaS0+Y2xlYXIoKTsKKyAgICB9Cit9CisKIC8vIEZlZWQgZGF0
YSB0byB0aGUgR0lGIHJlYWRlci4KIHZvaWQgR0lGSW1hZ2VEZWNvZGVyOjpkZWNvZGUoR0lGUXVl
cnkgcXVlcnksIHVuc2lnbmVkIGhhbHRBdEZyYW1lKSBjb25zdAogewpAQCAtMjI4LDYgKzI3MSw3
IEBAIHZvaWQgR0lGSW1hZ2VEZWNvZGVyOjppbml0RnJhbWVCdWZmZXIodW4KICAgICAgICAgLy8g
Zmlyc3QgZnJhbWUgc3BlY2lmaWVzIHRoaXMgbWV0aG9kLCBpdCB3aWxsIGdldCB0cmVhdGVkIGxp
a2UKICAgICAgICAgLy8gRGlzcG9zZU92ZXJ3cml0ZUJnY29sb3IgYmVsb3cgYW5kIHJlc2V0IHRv
IGEgY29tcGxldGVseSBlbXB0eSBpbWFnZS4pCiAgICAgICAgIGNvbnN0IFJHQkEzMkJ1ZmZlciog
cHJldkJ1ZmZlciA9ICZtX2ZyYW1lQnVmZmVyQ2FjaGVbLS1mcmFtZUluZGV4XTsKKyAgICAgICAg
QVNTRVJUKHByZXZCdWZmZXItPnN0YXR1cygpID09IFJHQkEzMkJ1ZmZlcjo6RnJhbWVDb21wbGV0
ZSk7CiAgICAgICAgIFJHQkEzMkJ1ZmZlcjo6RnJhbWVEaXNwb3NhbE1ldGhvZCBwcmV2TWV0aG9k
ID0KICAgICAgICAgICAgIHByZXZCdWZmZXItPmRpc3Bvc2FsTWV0aG9kKCk7CiAgICAgICAgIHdo
aWxlICgoZnJhbWVJbmRleCA+IDApICYmCkluZGV4OiBXZWJDb3JlL3BsYXRmb3JtL2ltYWdlLWRl
Y29kZXJzL2dpZi9HSUZJbWFnZURlY29kZXIuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBXZWJDb3JlL3BsYXRm
b3JtL2ltYWdlLWRlY29kZXJzL2dpZi9HSUZJbWFnZURlY29kZXIuaAkocmV2aXNpb24gMzg3ODUp
CisrKyBXZWJDb3JlL3BsYXRmb3JtL2ltYWdlLWRlY29kZXJzL2dpZi9HSUZJbWFnZURlY29kZXIu
aAkod29ya2luZyBjb3B5KQpAQCAtNTQsNiArNTQsOCBAQCBwdWJsaWM6CiAKICAgICB2aXJ0dWFs
IFJHQkEzMkJ1ZmZlciogZnJhbWVCdWZmZXJBdEluZGV4KHNpemVfdCBpbmRleCk7CiAKKyAgICB2
aXJ0dWFsIHZvaWQgY2xlYXJGcmFtZUJ1ZmZlckNhY2hlKHNpemVfdCBjbGVhckJlZm9yZUZyYW1l
KTsKKwogICAgIHZpcnR1YWwgdW5zaWduZWQgZnJhbWVEdXJhdGlvbkF0SW5kZXgoc2l6ZV90IGlu
ZGV4KSB7IHJldHVybiAwOyB9CiAKICAgICBlbnVtIEdJRlF1ZXJ5IHsgR0lGRnVsbFF1ZXJ5LCBH
SUZTaXplUXVlcnksIEdJRkZyYW1lQ291bnRRdWVyeSB9OwpJbmRleDogV2ViQ29yZS9wbGF0Zm9y
bS9pbWFnZS1kZWNvZGVycy9naWYvR0lGSW1hZ2VSZWFkZXIuaAo9PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBXZWJD
b3JlL3BsYXRmb3JtL2ltYWdlLWRlY29kZXJzL2dpZi9HSUZJbWFnZVJlYWRlci5oCShyZXZpc2lv
biAzODc4NSkKKysrIFdlYkNvcmUvcGxhdGZvcm0vaW1hZ2UtZGVjb2RlcnMvZ2lmL0dJRkltYWdl
UmVhZGVyLmgJKHdvcmtpbmcgY29weSkKQEAgLTQ3LDYgKzQ3LDggQEAKICNkZWZpbmUgTUFYX0NP
TE9SUyAgICAgICAgICAgMjU2CiAjZGVmaW5lIE1BWF9IT0xEX1NJWkUgICAgICAgIDI1NgogCitj
b25zdCBpbnQgY0xvb3BDb3VudE5vdFNlZW4gPSAtMjsKKwogLyogZ2lmMi5oICAKICAgIFRoZSBp
bnRlcmZhY2UgZm9yIHRoZSBHSUY4Ny84OWEgZGVjb2Rlci4gCiAqLwpAQCAtMTg3LDcgKzE4OSw3
IEBAIHN0cnVjdCBHSUZJbWFnZVJlYWRlciB7CiAgICAgICAgIHNjcmVlbl9iZ2NvbG9yID0gdmVy
c2lvbiA9IDA7CiAgICAgICAgIHNjcmVlbl93aWR0aCA9IHNjcmVlbl9oZWlnaHQgPSAwOwogICAg
ICAgICBnbG9iYWxfY29sb3JtYXBfc2l6ZSA9IGltYWdlc19kZWNvZGVkID0gaW1hZ2VzX2NvdW50
ID0gMDsKLSAgICAgICAgbG9vcF9jb3VudCA9IC0xOworICAgICAgICBsb29wX2NvdW50ID0gY0xv
b3BDb3VudE5vdFNlZW47CiAgICAgICAgIGNvdW50ID0gMDsKICAgICB9CiAKSW5kZXg6IFdlYkNv
cmUvc3ZnL2dyYXBoaWNzL1NWR0ltYWdlLmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gV2ViQ29yZS9zdmcvZ3Jh
cGhpY3MvU1ZHSW1hZ2UuaAkocmV2aXNpb24gMzg3ODUpCisrKyBXZWJDb3JlL3N2Zy9ncmFwaGlj
cy9TVkdJbWFnZS5oCSh3b3JraW5nIGNvcHkpCkBAIC01OSw3ICs1OSw3IEBAIG5hbWVzcGFjZSBX
ZWJDb3JlIHsKIAogICAgICAgICAvLyBGSVhNRTogU1ZHSW1hZ2VzIGFyZSB1bmRlcnJlcG9ydGlu
ZyBkZWNvZGVkIHNpemVzIGFuZCB3aWxsIGJlIHVuYWJsZQogICAgICAgICAvLyB0byBwcnVuZSBi
ZWNhdXNlIHRoZXNlIGZ1bmN0aW9ucyBhcmUgbm90IGltcGxlbWVudGVkIHlldC4KLSAgICAgICAg
dmlydHVhbCB2b2lkIGRlc3Ryb3lEZWNvZGVkRGF0YShib29sIGluY3JlbWVudGFsID0gZmFsc2Us
IGJvb2wgcHJlc2VydmVOZWFyYnlGcmFtZXMgPSBmYWxzZSkgeyB9CisgICAgICAgIHZpcnR1YWwg
dm9pZCBkZXN0cm95RGVjb2RlZERhdGEoYm9vbCBkZXN0cm95QWxsID0gdHJ1ZSkgeyB9CiAgICAg
ICAgIHZpcnR1YWwgdW5zaWduZWQgZGVjb2RlZFNpemUoKSBjb25zdCB7IHJldHVybiAwOyB9CiAK
ICAgICAgICAgdmlydHVhbCBOYXRpdmVJbWFnZVB0ciBmcmFtZUF0SW5kZXgoc2l6ZV90KSB7IHJl
dHVybiAwOyB9Cg==
</data>
<flag name="review"
          id="11997"
          type_id="1"
          status="+"
          setter="hyatt"
    />
          </attachment>
      

    </bug>

</bugzilla>