<?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>15256</bug_id>
          
          <creation_ts>2007-09-22 02:58:50 -0700</creation_ts>
          <short_desc>Impossible to place an editable selection inside empty elements</short_desc>
          <delta_ts>2026-01-05 10:51:15 -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>HTML Editing</component>
          <version>523.x (Safari 3)</version>
          <rep_platform>All</rep_platform>
          <op_sys>All</op_sys>
          <bug_status>REOPENED</bug_status>
          <resolution></resolution>
          
          <see_also>https://bugs.webkit.org/show_bug.cgi?id=198603</see_also>
    
    <see_also>https://bugs.webkit.org/show_bug.cgi?id=23189</see_also>
          <bug_file_loc>http://www.fredck.com/bugs/safari/collapsed_select_test.html</bug_file_loc>
          <status_whiteboard></status_whiteboard>
          <keywords>BrowserCompat, CanvaBug, GoogleBug, InRadar</keywords>
          <priority>P2</priority>
          <bug_severity>Normal</bug_severity>
          <target_milestone>---</target_milestone>
          <dependson>252598</dependson>
    
    <dependson>252599</dependson>
    
    <dependson>252600</dependson>
    
    <dependson>252606</dependson>
    
    <dependson>252607</dependson>
    
    <dependson>252608</dependson>
    
    <dependson>252610</dependson>
    
    <dependson>252611</dependson>
    
    <dependson>252615</dependson>
    
    <dependson>252619</dependson>
    
    <dependson>252620</dependson>
    
    <dependson>252622</dependson>
          <blocked>9915</blocked>
    
    <blocked>23600</blocked>
          <everconfirmed>1</everconfirmed>
          <reporter>webkit</reporter>
          <assigned_to name="Ryosuke Niwa">rniwa</assigned_to>
          <cc>adele</cc>
    
    <cc>ahmad.saleem792</cc>
    
    <cc>ap</cc>
    
    <cc>bruno.windels</cc>
    
    <cc>ddkilzer</cc>
    
    <cc>dgatwood</cc>
    
    <cc>enrica</cc>
    
    <cc>Enygma2002_ro</cc>
    
    <cc>erdal.karaca.de</cc>
    
    <cc>eric</cc>
    
    <cc>evan</cc>
    
    <cc>feng</cc>
    
    <cc>frances_c</cc>
    
    <cc>jdpsaratoga</cc>
    
    <cc>jon</cc>
    
    <cc>jparent</cc>
    
    <cc>karlcow</cc>
    
    <cc>liska.jakub</cc>
    
    <cc>martin</cc>
    
    <cc>matthewlefflercomputer</cc>
    
    <cc>megan_gardner</cc>
    
    <cc>michael.vm</cc>
    
    <cc>pkoszulinski</cc>
    
    <cc>qqqwwweeerrrtttt12123</cc>
    
    <cc>rniwa</cc>
    
    <cc>robburns1</cc>
    
    <cc>sleekism</cc>
    
    <cc>timdown</cc>
    
    <cc>tonikitoo</cc>
    
    <cc>tpopela</cc>
    
    <cc>vepomoc</cc>
    
    <cc>wenson_hsieh</cc>
    
    <cc>xidorn-webkit</cc>
          

      

      

      

          <comment_sort_order>oldest_to_newest</comment_sort_order>  
          <long_desc isprivate="0" >
    <commentid>164</commentid>
    <comment_count>0</comment_count>
    <who name="">webkit</who>
    <bug_when>2007-09-22 02:58:50 -0700</bug_when>
    <thetext>There is now way to place the caret inside an empty element for editing. For example, suppose we have the following HTML:

    Some &lt;b&gt;&lt;/b&gt;text.


When using the DOM range and selection to move the caret inside the &lt;b&gt;&lt;/b&gt;, the editing point will be after it instead:

    Some&lt;b&gt;&lt;/b&gt;|text.

The expected result:

    Some&lt;b&gt;|&lt;/b&gt;text.

The specified URL is a simple test case for it, which makes it easy to understand the problem. It works well with Firefox 2 and Opera 9.5 (minor issues with this one).</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>165</commentid>
    <comment_count>1</comment_count>
      <attachid>16346</attachid>
    <who name="">webkit</who>
    <bug_when>2007-09-22 03:19:03 -0700</bug_when>
    <thetext>Created attachment 16346
TC</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>170</commentid>
    <comment_count>2</comment_count>
    <who name="">webkit</who>
    <bug_when>2007-09-22 05:04:38 -0700</bug_when>
    <thetext>Sorry... small correction... for correctness.

Today, the caret is actually placed &quot;before&quot; the &lt;b&gt;&lt;/b&gt; in the above example, not after it. So we are having the following result:

    Some |&lt;b&gt;&lt;/b&gt;text.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>61991</commentid>
    <comment_count>3</comment_count>
    <who name="Mark Rowe (bdash)">mrowe</who>
    <bug_when>2007-11-22 09:22:22 -0800</bug_when>
    <thetext>&lt;rdar://problem/5610785&gt;</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>61998</commentid>
    <comment_count>4</comment_count>
    <who name="Alexey Proskuryakov">ap</who>
    <bug_when>2007-11-22 10:55:03 -0800</bug_when>
    <thetext>This problem doesn&apos;t only occur for empty text nodes - even if the node is not empty, selection position is adjusted to start before its container.

I think I have a workaround that might work. It involves zero-width space:
		[&lt;b&gt;&amp;#x200b;&lt;/b&gt;]
...
	range.setStart( el.firstChild, 1 ) ;
	range.setEnd( el.firstChild, 1 ) ;

This positions the insertion point after the invisible space, and inside the text child node.

Obviously, the space needs to be removed when the user starts typing, or clicks somewhere else - otherwise, arrow navigation will not work incorrectly, stopping at this position twice.

Please let us know if this works for you.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>62005</commentid>
    <comment_count>5</comment_count>
    <who name="">webkit</who>
    <bug_when>2007-11-22 11:48:58 -0800</bug_when>
    <thetext>(In reply to comment #4)
&gt; Obviously, the space needs to be removed when the user starts typing, or clicks
&gt; somewhere else - otherwise, arrow navigation will not work incorrectly,
&gt; stopping at this position twice.

I&apos;ve tried something similar before, but the above thing is the big problem. It is quite difficult to provide a stable cleanup mechanism in JavaScript, to remove the  zero-width space text node. There are too many combinations to consider, like keyboard navigation, mouse click, API calls, clipboard pasting, etc... it would be easy to have zero-width space chars laying around, causing an undesired behavior. At the end, the cleanup code would be so huge that it would be overkill for a JS app. This is why we need the browser to handle it properly.
</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>62372</commentid>
    <comment_count>6</comment_count>
    <who name="Alexey Proskuryakov">ap</who>
    <bug_when>2007-11-26 06:35:33 -0800</bug_when>
    <thetext>I tried to quickly fix this today, but the problem is much deeper than just the addRange() function - it&apos;s the underlying selection object that enforces &quot;valid&quot; positions. It&apos;s clear to me that it should be redesigned, but that may take a while.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>62373</commentid>
    <comment_count>7</comment_count>
      <attachid>17529</attachid>
    <who name="Alexey Proskuryakov">ap</who>
    <bug_when>2007-11-26 06:46:29 -0800</bug_when>
    <thetext>Created attachment 17529
automated test case (incomplete)

This tests that ranges round-trip properly, but it is not enough to fix this bug - editing commands should avoid validating selections in some situations, too.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>62411</commentid>
    <comment_count>8</comment_count>
    <who name="Alice Liu">alice.barraclough</who>
    <bug_when>2007-11-26 16:42:22 -0800</bug_when>
    <thetext>Is this a regression from Safari 2.0.4 or any released (non-beta) version since then?</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>62430</commentid>
    <comment_count>9</comment_count>
    <who name="Alexey Proskuryakov">ap</who>
    <bug_when>2007-11-26 21:33:15 -0800</bug_when>
    <thetext>This is not a regression - but it looks like a major limitation without a viable workaround.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>62560</commentid>
    <comment_count>10</comment_count>
    <who name="">webkit</who>
    <bug_when>2007-11-28 04:18:46 -0800</bug_when>
    <thetext>Marking this bug as critical for FCKeditor.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>65616</commentid>
    <comment_count>11</comment_count>
    <who name="Alexey Proskuryakov">ap</who>
    <bug_when>2007-12-29 11:17:56 -0800</bug_when>
    <thetext>See also: bug 6350.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>108102</commentid>
    <comment_count>12</comment_count>
    <who name="Alexey Proskuryakov">ap</who>
    <bug_when>2009-02-03 01:54:57 -0800</bug_when>
    <thetext>See also: bug 21785, bug 20242, bug 20129.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>114012</commentid>
    <comment_count>13</comment_count>
    <who name="Tim Down">timdown</who>
    <bug_when>2009-03-17 05:02:49 -0700</bug_when>
    <thetext>See also bug #23189</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>157444</commentid>
    <comment_count>14</comment_count>
    <who name="Sertan">sleekism</who>
    <bug_when>2009-10-24 04:30:59 -0700</bug_when>
    <thetext>What is happening with this bug?</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>190988</commentid>
    <comment_count>15</comment_count>
    <who name="">matthewlefflercomputer</who>
    <bug_when>2010-02-17 04:28:44 -0800</bug_when>
    <thetext>Is there a reason this bug is now 2+ years old without action?  Please target this for patching.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>196963</commentid>
    <comment_count>16</comment_count>
    <who name="Steven Wittens">steven</who>
    <bug_when>2010-03-06 18:27:51 -0800</bug_when>
    <thetext>I would also like to request a redesign of the selection/caret behaviour, or e.g. to extend the default behaviour with CSS hints to allow you to control possible caret placements yourself.

There are many cases where you would want to use inline elements, but still allow the caret to distinguish between being inside and outside the element in question.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>273436</commentid>
    <comment_count>17</comment_count>
    <who name="">webkit</who>
    <bug_when>2010-09-02 10:13:43 -0700</bug_when>
    <thetext>Also calling for a fix. I&apos;ve hit this bug many times, and have tried all sorts of hacks to get around it (e.g. appending text nodes on keypress, zero-width spaces etc).</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>273860</commentid>
    <comment_count>18</comment_count>
    <who name="">webkit</who>
    <bug_when>2010-09-03 04:11:31 -0700</bug_when>
    <thetext>Just FYI... three years passed, and this issue is still highly critical for CKEditor.

Unfortunately we&apos;re not able to code a fix for it. Is there anything else we could do to have someone involved on fixing it?</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>273994</commentid>
    <comment_count>19</comment_count>
    <who name="">webkit</who>
    <bug_when>2010-09-03 10:02:53 -0700</bug_when>
    <thetext>We&apos;re opening a bounty for a definitive fix to this issue:
https://lists.webkit.org/pipermail/webkit-dev/2010-September/014251.html

I really hope we&apos;ll have success with it.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>274523</commentid>
    <comment_count>20</comment_count>
    <who name="Ryosuke Niwa">rniwa</who>
    <bug_when>2010-09-06 02:44:33 -0700</bug_when>
    <thetext>(In reply to comment #19)
&gt; We&apos;re opening a bounty for a definitive fix to this issue:
&gt; https://lists.webkit.org/pipermail/webkit-dev/2010-September/014251.html
&gt; 
&gt; I really hope we&apos;ll have success with it.

The problem with this bug is that resolving this bug requires our rewriting much of the existing editing code.  And that isn&apos;t easy by no means.

Could you explain how this bug is impacting CKEditor?  It seems like you&apos;re trying to apply styles to a selection?  I&apos;d like to know more context of the problem you&apos;re encountering so that we might be able to come up with an alternative solution to your problem.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>274928</commentid>
    <comment_count>21</comment_count>
    <who name="David Kilzer (:ddkilzer)">ddkilzer</who>
    <bug_when>2010-09-07 02:54:56 -0700</bug_when>
    <thetext>There is now a bounty on this bug:

&lt;https://lists.webkit.org/pipermail/webkit-dev/2010-September/014251.html&gt;</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>275030</commentid>
    <comment_count>22</comment_count>
    <who name="">webkit</who>
    <bug_when>2010-09-07 07:46:10 -0700</bug_when>
    <thetext>(In reply to comment #20)
&gt; Could you explain how this bug is impacting CKEditor?  It seems like you&apos;re trying to apply styles to a selection?

That&apos;s exactly the problem. The detail is that we&apos;re talking about a &quot;collapsed&quot; selection. I mean, just have the caret blinking inside the editor, hit CTRL+B for Bold (bug: nothing is happening at this point) and type some text. There will be no style applied.

Just to give you more details, here you have the code being executed:

1st part, this small if block. Note that even if we&apos;re using an internal range manipulation class, it works much like the DOM range implementation of WebKit:
http://dev.ckeditor.com/browser/CKEditor/trunk/_source/plugins/styles/plugin.js?rev=5847#L360

2nd part - it&apos;s a bit more complicated, but basically we&apos;re transforming our internal range representation in a native WebKit range and selecting it:
http://dev.ckeditor.com/browser/CKEditor/trunk/_source/plugins/selection/plugin.js?rev=5812#L1040

The attached TC reflects the above exactly.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>275096</commentid>
    <comment_count>23</comment_count>
    <who name="Ryosuke Niwa">rniwa</who>
    <bug_when>2010-09-07 09:49:27 -0700</bug_when>
    <thetext>(In reply to comment #22)
&gt; (In reply to comment #20)
&gt; &gt; Could you explain how this bug is impacting CKEditor?  It seems like you&apos;re trying to apply styles to a selection?
&gt; 
&gt; That&apos;s exactly the problem. The detail is that we&apos;re talking about a &quot;collapsed&quot; selection. I mean, just have the caret blinking inside the editor, hit CTRL+B for Bold (bug: nothing is happening at this point) and type some text. There will be no style applied.

Could you call document.execCommand(&apos;bold&apos;, false, null) instead of manually adding bold?  We have typing style internally, and bold should be preserved when user starts typing.  I bet other browsers would support this as well.

We also have applyStyle command internally, which allows you to apply arbitrary CSS style on the selected region.  It&apos;s used by bold, italic, etc... as well as for style preservation.  We could expose either if that&apos;ll benefit you and other web developers.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>275098</commentid>
    <comment_count>24</comment_count>
    <who name="Ryosuke Niwa">rniwa</who>
    <bug_when>2010-09-07 09:50:40 -0700</bug_when>
    <thetext>By either I meant typing style and applyStyle command.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>275840</commentid>
    <comment_count>25</comment_count>
    <who name="">webkit</who>
    <bug_when>2010-09-08 08:02:10 -0700</bug_when>
    <thetext>(In reply to comment #23)
&gt; Could you call document.execCommand(&apos;bold&apos;, false, null)

Well, that&apos;s the way we have it in FCKeditor 1.0... we were just using the standard execCommand stuff. But, later we&apos;ve found limitations in this approach. Let me give you more info.

The very first issue is being able to produce the same output with all browsers. For the bold command, you have some browsers producing &lt;b&gt;, while others use &lt;strong&gt;. Depending on the setting, you can even have &lt;span style=&quot;font-weight: bold;&quot;&gt;, or the even worst &lt;span class=&quot;Apple-style-span&quot; style=&quot;font-weight: bold;&quot;&gt;.

Consider that we&apos;re talking just about the bold command, but almost all commands have different implementation among browsers.

The other important factor is that CKEditor is extremely flexible, when considering styles. One can decide how to exactly apply styles. For bold, for example, you can easily choose to output &lt;b&gt;, &lt;strong&gt;, &lt;span style=&quot;font-weight: bold;&quot;&gt;, &lt;span class=&quot;myBold&quot;&gt;, or any other tag you want.

So far, we were just talking about bold... but you must also consider custom styles, which doesn&apos;t have their execCommand equivalent.

It has been always my opinion: execCommand is one of the worst things one could have for styling. It&apos;s badly designed and limited. It&apos;s a pity to see it&apos;s making its space in the HTML5 standards. The future doesn&apos;t look better because of it.

---

&gt; We also have applyStyle command internally, which allows you to apply arbitrary CSS style on the selected region.  It&apos;s used by bold, italic, etc... as well as for style preservation.  We could expose either if that&apos;ll benefit you and other web developers.

Is this command that flexible, so you can apply a style that outputs not only &lt;span style=&quot;...&quot;&gt; tags, but also things like &lt;span class=&quot;xyz&quot;&gt;, &lt;b dir=&quot;rtl&quot;&gt;, &lt;font face=&quot;ABC&quot;&gt;, etc.? In that case, it would be just perfect to workaround the problem, even if still not a real solution for the root of the problem.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>317652</commentid>
    <comment_count>26</comment_count>
    <who name="Bruno Windels">bruno.windels</who>
    <bug_when>2010-12-06 09:01:56 -0800</bug_when>
    <thetext>I found a workaround, don&apos;t know if anybody found this before but instead of programmatically appending a zero-width space, you can do the same thing with the css3 content property in the after psuedo-selector of the elements you want to put the caret in. This has the advantage that the extra characters don&apos;t show up in the DOM and the user can&apos;t navigate the caret between it. So basically it doesn&apos;t need cleaning up.

For this to work for any child element of your content editable element it would be something like this:

	#mycontenteditableelement *:after {
		content: &apos;\200B&apos;;
	}

I didn&apos;t check completely, but I suspect this is a full workaround.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>317671</commentid>
    <comment_count>27</comment_count>
    <who name="Ryosuke Niwa">rniwa</who>
    <bug_when>2010-12-06 09:35:00 -0800</bug_when>
    <thetext>(In reply to comment #26)
&gt;     #mycontenteditableelement *:after {
&gt;         content: &apos;\200B&apos;;
&gt;     }
&gt; 
&gt; I didn&apos;t check completely, but I suspect this is a full workaround.

I&apos;ll just comment that the support for after, before, first-letter, and other pseudo-selectors are poorly supported in the content editable area.  In the worst case, WebKit crashes or reaches an inconsistent state.  So I wouldn&apos;t recommend this.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>317685</commentid>
    <comment_count>28</comment_count>
    <who name="Bruno Windels">bruno.windels</who>
    <bug_when>2010-12-06 10:02:38 -0800</bug_when>
    <thetext>(In reply to comment #27)
&gt; I&apos;ll just comment that the support for after, before, first-letter, and other pseudo-selectors are poorly supported in the content editable area.  In the worst case, WebKit crashes or reaches an inconsistent state.  So I wouldn&apos;t recommend this.

Good to know. Do you or anybody else have any advice as to what to avoid specifically? In my limited use case (adding new &lt;p&gt;&apos;s in response to keypress events and moving the caret inside the newly created &lt;p&gt;) I am seeing no unwanted side effects whatsoever with Safari 5.0.3.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>318409</commentid>
    <comment_count>29</comment_count>
    <who name="">webkit</who>
    <bug_when>2010-12-07 13:32:59 -0800</bug_when>
    <thetext>While the (In reply to comment #28)
&gt; Good to know. Do you or anybody else have any advice as to what to avoid specifically? In my limited use case (adding new &lt;p&gt;&apos;s in response to keypress events and moving the caret inside the newly created &lt;p&gt;) I am seeing no unwanted side effects whatsoever with Safari 5.0.3.

Thanks for sharing your findings.

While the provided hack didn&apos;t fix the issue in CKEditor (after a quick test, still to be investigated), I&apos;ve noticed that it has broken the arrow navigation inside the editor. Basically, the RIGHT-ARROW key remained stuck when reaching the right boundary of any inline element (like a &lt;strong&gt;).</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>424109</commentid>
    <comment_count>30</comment_count>
    <who name="">webkit</who>
    <bug_when>2011-06-20 17:20:58 -0700</bug_when>
    <thetext>Any news on this. I keep running into this bug and variations of it. For example, it&apos;s impossible to put the caret at the beginning of ANY text node. This is quite a silly bug to have in WebKit for so long.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>424111</commentid>
    <comment_count>31</comment_count>
    <who name="Ryosuke Niwa">rniwa</who>
    <bug_when>2011-06-20 17:22:47 -0700</bug_when>
    <thetext>(In reply to comment #30)
&gt; Any news on this. I keep running into this bug and variations of it. For example, it&apos;s impossible to put the caret at the beginning of ANY text node. This is quite a silly bug to have in WebKit for so long.

There&apos;s an active discussion on whatwg about VisiblePosition&apos;s canonicalization.  Please respond on the thread if you&apos;re interested in this being fixed in the long term.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>424112</commentid>
    <comment_count>32</comment_count>
    <who name="">webkit</who>
    <bug_when>2011-06-20 17:27:30 -0700</bug_when>
    <thetext>@Ryosuke Niwa - Do you have a link?</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>424113</commentid>
    <comment_count>33</comment_count>
    <who name="Ryosuke Niwa">rniwa</who>
    <bug_when>2011-06-20 17:32:20 -0700</bug_when>
    <thetext>(In reply to comment #32)
&gt; @Ryosuke Niwa - Do you have a link?

http://www.mail-archive.com/whatwg@lists.whatwg.org/msg27063.html</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>454710</commentid>
    <comment_count>34</comment_count>
    <who name="Alexey Proskuryakov">ap</who>
    <bug_when>2011-08-22 11:09:30 -0700</bug_when>
    <thetext>See also: bug 66630.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>547170</commentid>
    <comment_count>35</comment_count>
    <who name="">webkit</who>
    <bug_when>2012-02-01 10:22:36 -0800</bug_when>
    <thetext>Any update on this?</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>613950</commentid>
    <comment_count>36</comment_count>
    <who name="Ryosuke Niwa">rniwa</who>
    <bug_when>2012-05-01 21:24:41 -0700</bug_when>
    <thetext>*** Bug 10884 has been marked as a duplicate of this bug. ***</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>693163</commentid>
    <comment_count>37</comment_count>
    <who name="David Gatwood">dgatwood</who>
    <bug_when>2012-08-11 19:00:25 -0700</bug_when>
    <thetext>It is also, as far as I can tell, impossible to place the insertion point *between* elements.  This makes a number of interesting programmatic uses of insertHTML impossible (unwrapping nodes, for example).

For example, given an HTML block like this:


    &lt;div contentEditable=&quot;true&quot;&gt;&lt;div id=&quot;scratchpad&quot;&gt;&lt;/div&gt;&lt;/div&gt;


and code like this:


    document.getElementById(&quot;scratchpad&quot;).innerHTML = &quot;&lt;div id=\&quot;foo\&quot;&gt;blah&lt;/div&gt;&lt;div id=\&quot;bar\&quot;&gt;blah&lt;/div&gt;&quot;;

    var sel = window.getSelection();
    sel.removeAllRanges();
    var range = document.createRange();

    range.setStartAfter(document.getElementById(&quot;foo&quot;));
    range.setEndAfter(document.getElementById(&quot;foo&quot;));
    sel.addRange(range);

    document.execCommand(&quot;insertHTML&quot;, false, &quot;&lt;div id=\&quot;baz\&quot;&gt;-&lt;/div&gt;&quot;);



One would expect this snippet to result in:

    &lt;div id=&quot;foo&quot;&gt;blah&lt;/div&gt;&lt;div id=&quot;baz&quot;&gt;-&lt;/div&gt;&lt;div id=&quot;bar&quot;&gt;blah&lt;/div&gt;

but instead, you get:

    &lt;div id=&quot;foo&quot;&gt;blah&lt;/div&gt;&lt;div id=&quot;bar&quot;&gt;-blah&lt;/div&gt;

I&apos;ve tried every combination of set{Start|End}{After|Before|} that I can think of, and even things like setBaseAndExtent, modifying the selection object directly by extending it in either direction, etc.  Nothing works.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>976689</commentid>
    <comment_count>38</comment_count>
    <who name="Erdal Karaca">erdal.karaca.de</who>
    <bug_when>2014-02-05 01:42:28 -0800</bug_when>
    <thetext>Any progress on this bug? It is still reproducible in the JavaFX implementation of WebKit.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1011189</commentid>
    <comment_count>39</comment_count>
    <who name="Piotrek Koszuliński (Reinmar)">pkoszulinski</who>
    <bug_when>2014-05-23 00:19:28 -0700</bug_when>
    <thetext>It seems that the same issue has been fixed in Blink - https://code.google.com/p/chromium/issues/detail?id=346613

Would it be possible to port it to Webkit? This issue requires from editor developers one of the most tricky hacks I&apos;ve ever seen, so that would be a big relief if we could finally remove it.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1037082</commentid>
    <comment_count>40</comment_count>
      <attachid>238624</attachid>
    <who name="David Gatwood">dgatwood</who>
    <bug_when>2014-09-24 16:35:05 -0700</bug_when>
    <thetext>Created attachment 238624
Partial patch

I tried my hand at merging in the diffs from Chrome/Blink.  With these changes, WebKit seems to behave more like I&apos;d expect when programmatically monkeying with the selection, but I haven&apos;t done extensive testing of it yet.

Caveats:

1.  The user interface behavior is still problematic.  It&apos;s still impossible to click between element boundaries or at the beginning of elements.  I hope to try to figure out what&apos;s going on there &quot;real soon now&quot;.
2.  I don&apos;t know your test system well enough to merge the changes to the test cases correctly.  They might be close, or they might not be—I didn&apos;t bother running tests.
3.  I&apos;m not sure if you need to add or modify any copyright notices as a result of these changes.  I&apos;ll leave that up to your discretion.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1037306</commentid>
    <comment_count>41</comment_count>
    <who name="David Gatwood">dgatwood</who>
    <bug_when>2014-09-25 14:55:01 -0700</bug_when>
    <thetext>Note that I&apos;ll clean this patch up and resubmit in a day or two.  The previous patch fixes only the programmatic behavior; the arrow key and mouse click caret behavior is still not quite right, and I&apos;m trying to fix that while I&apos;m at it.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1037716</commentid>
    <comment_count>42</comment_count>
      <attachid>238794</attachid>
    <who name="David Gatwood">dgatwood</who>
    <bug_when>2014-09-27 16:34:58 -0700</bug_when>
    <thetext>Created attachment 238794
A more complete patch

Here&apos;s a more complete patch.  This patch incorporates the Blink changes, plus additional tweaks to the visible position code and cursor rendering code so that cursors within empty elements show up in the right place, provided that the empty element has a ::before pseudoelement.  (Note that if an element doesn&apos;t have both a ::before and ::after pseudoelement, it isn&apos;t visually distinct anyway, so although the selection gets stored and retrieved without modification, in practice, the cursor isn&apos;t really inside the element in any useful sense of the word.)</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1037722</commentid>
    <comment_count>43</comment_count>
    <who name="David Gatwood">dgatwood</who>
    <bug_when>2014-09-27 19:59:04 -0700</bug_when>
    <thetext>Unfortunately, I still can&apos;t place the caret between adjacent elements, so there&apos;s still at least one more subpart to this bug.  I&apos;ll keep pounding on it.

Also, there&apos;s a new block of code in RenderBox.cpp that needs to be nested under the enclosing if (box) to avoid a crash in the inspector.  I&apos;ll update the patch with that fix after I get the caret-between-elements issue fixed.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1037723</commentid>
    <comment_count>44</comment_count>
    <who name="David Gatwood">dgatwood</who>
    <bug_when>2014-09-27 20:16:01 -0700</bug_when>
    <thetext>
Make that three more bugs left to fix in this patch:

* Still can&apos;t put cursor between adjacent elements.
* Crash if the user goes off the left edge of any line box.
* Wraps around to the left if the user walks off the right end of the last line box in the editing range.

*sigh*</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1038120</commentid>
    <comment_count>45</comment_count>
      <attachid>238899</attachid>
    <who name="David Gatwood">dgatwood</who>
    <bug_when>2014-09-29 18:10:05 -0700</bug_when>
    <thetext>Created attachment 238899
Almost complete patch

This patch fixes the aforementioned crasher bugs and adds the ability to place the editing cursor between adjacent inline elements.

Still missing: placing editing cursor between adjacent block elements.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1039969</commentid>
    <comment_count>46</comment_count>
      <attachid>239395</attachid>
    <who name="David Gatwood">dgatwood</who>
    <bug_when>2014-10-06 23:21:30 -0700</bug_when>
    <thetext>Created attachment 239395
Final HTML editing caret patch

Whew.  I think I&apos;ve fixed the last crasher bugs and caret positioning bugs (or at least the last layout bugs that I introduced).  I also rewrote a bunch of the caret positioning code for block elements in a different way that&apos;s a lot cleaner.  I&apos;ve also updated it to be based on TOT as of a couple of days ago, which required inlining a bunch of recently removed macros.  Hope this helps.

If and when you take these fixes, you&apos;ll probably need to do two additional things:

* Finish fixing up the text cases as needed.  Although I attempted to merge the test case changes from Blink, I know nothing about how your test suite is designed (or theirs), so I had basically no idea what I was doing during that marge.  As a result, the test case parts of this patch may be completely and utterly wrong.  You have been warned.  :-)
* Check the original Blink patches to see if you need to introduce any new copyright lines into the modified files.  I didn&apos;t notice any such additions in the failed patches as I applied them, but a second set of eyes couldn&apos;t hurt.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1039971</commentid>
    <comment_count>47</comment_count>
      <attachid>239396</attachid>
    <who name="David Gatwood">dgatwood</who>
    <bug_when>2014-10-06 23:25:37 -0700</bug_when>
    <thetext>Created attachment 239396
Slight cleanup to previous patch.

Oops.  I forgot to scan the previous patch for &quot;#if 0&quot; blocks and remove some junk code.  Fixed.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1041031</commentid>
    <comment_count>48</comment_count>
      <attachid>239652</attachid>
    <who name="David Gatwood">dgatwood</who>
    <bug_when>2014-10-10 14:47:39 -0700</bug_when>
    <thetext>Created attachment 239652
Patch for one more bug

This additional patch fixes an edge case that can cause crashes.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1041059</commentid>
    <comment_count>49</comment_count>
      <attachid>239657</attachid>
    <who name="David Gatwood">dgatwood</who>
    <bug_when>2014-10-10 16:00:25 -0700</bug_when>
    <thetext>Created attachment 239657
Patch to prevent deletion of empty element

This patch prevents deletion of an empty element with visible boundaries after you delete its contents.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1041088</commentid>
    <comment_count>50</comment_count>
      <attachid>239665</attachid>
    <who name="David Gatwood">dgatwood</who>
    <bug_when>2014-10-10 19:19:33 -0700</bug_when>
    <thetext>Created attachment 239665
Rework of patch to prevent deletion of empty element

Turns out that previous patch caused failures later, for two reasons:

1.  In some cases, the editing code was inserting a placeholder &lt;br&gt; tag to avoid the element becoming empty, but that isn&apos;t needed or desirable if the editing boundaries are already distinct.
2.  Deleting that &lt;br&gt; tag caused a crash because the merge code wasn&apos;t expecting to ever encounter a situation where such a node still existed, and tried to merge it with its parent.

This fix corrects those additional bugs.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1041167</commentid>
    <comment_count>51</comment_count>
      <attachid>239689</attachid>
    <who name="David Gatwood">dgatwood</who>
    <bug_when>2014-10-11 16:21:20 -0700</bug_when>
    <thetext>Created attachment 239689
Fix for an additional case where cursor can&apos;t be placed after the last child element


In VisiblePosition::canonicalPosition(), the code first checks to see if the upstream or downstream candidate is a match.  However, in some circumstances, the upstream/downstream methods return a Position that is set to &quot;after all children&quot; rather than a Position whose numerical offset is actually after the last child.  This patch to isCandidate() makes it correctly detect and handle those Position objects.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1041359</commentid>
    <comment_count>52</comment_count>
      <attachid>239746</attachid>
    <who name="David Gatwood">dgatwood</who>
    <bug_when>2014-10-13 14:21:57 -0700</bug_when>
    <thetext>Created attachment 239746
Fix for an occasional hang when walking off the left edge of certain block elements


Walking off the left edge of a block element that contains *only* a single text node caused a hang, because obtaining the inline box and offset for the paragraph returned the node that we already visited, thus making it impossible to reach the position to the left of such an element.  Worse, it resulted in an infinite loop.  This patch shortcuts that infinite loop by checking to see if the position to the left of the element is a candidate right after checking to see if the position to the left of the text node is a candidate.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1041363</commentid>
    <comment_count>53</comment_count>
      <attachid>239747</attachid>
    <who name="David Gatwood">dgatwood</who>
    <bug_when>2014-10-13 14:30:25 -0700</bug_when>
    <thetext>Created attachment 239747
Update to occasional hang patch.

The previous patch, &quot;239746: Fix for an occasional hang when walking off the left edge of certain block elements&quot;, fixed a hang in leftVisuallyDistinctCandidate() when moving left from the left bound of an element containing only text.  A similar problem (without the hang) occurs on the right end; specifically the cursor jumped from the right end of the text node to the left end.  This updated version of that patch adds a similar fix to rightVisuallyDistinctCandidate().</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1044366</commentid>
    <comment_count>54</comment_count>
    <who name="Jakub Liska">liska.jakub</who>
    <bug_when>2014-10-27 17:30:36 -0700</bug_when>
    <thetext>@Piotrek Koszuliński: I lost 3 days working this bug around in my editor. It&apos;s incredibly hard to implement selection if you can&apos;t place cursor to an empty element or at its beginning : https://bugs.webkit.org/show_bug.cgi?id=23189

I had to explicitly place it to the prev EOL in zillion variations which showed up to be a super hard thing to do...</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1044442</commentid>
    <comment_count>55</comment_count>
    <who name="Piotrek Koszuliński (Reinmar)">pkoszulinski</who>
    <bug_when>2014-10-28 01:26:07 -0700</bug_when>
    <thetext>@Jakub Liska: I know. Workaround for this bug is a real killer. That&apos;s why I&apos;m keeping fingers crossed for David. Hopefully, soon we&apos;ll be able to remove this hack and automatically fix many issues which it creates.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1044668</commentid>
    <comment_count>56</comment_count>
    <who name="David Gatwood">dgatwood</who>
    <bug_when>2014-10-28 17:59:57 -0700</bug_when>
    <thetext>
I haven&apos;t personally seen any new crashers or other misbehavior since the last set of patches I submitted, but I&apos;m spending most of my time on unrelated projects, so that&apos;s no guarantee.  :-)

I&apos;d encourage you to try out the attached patches and see how things behave for you.  Shout in this bug if you find additional edge cases, crasher bugs, etc., and I&apos;ll take a look at them (if I can reproduce them).

Two areas where I would not be too surprised to hear about bugs include right-to-left content and ::before/::after pseudoelements that contain images.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1055781</commentid>
    <comment_count>57</comment_count>
      <attachid>243323</attachid>
    <who name="David Gatwood">dgatwood</who>
    <bug_when>2014-12-15 15:44:55 -0800</bug_when>
    <thetext>Created attachment 243323
Adds proper highlighting for ::before and ::after pseudo-elements.


This patch enables highlighting of ::before and ::after pseudo-elements when they appear within a selection.  This patch includes (and thus supersedes) the previous patches.  (The pile of patches was getting way too big.)

This patch also reverts part of bug #32123 that caused massive over-selection or under-selection when a pseudo-element contained no text nodes.

Note that these selection changes are still quite preliminary.  They work for me when using limited test content, but have not been tested against large swaths of web content.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1057292</commentid>
    <comment_count>58</comment_count>
      <attachid>243610</attachid>
    <who name="David Gatwood">dgatwood</who>
    <bug_when>2014-12-20 17:53:48 -0800</bug_when>
    <thetext>Created attachment 243610
Patch for an edge case where command-right or command-left could cause a crash</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1057350</commentid>
    <comment_count>59</comment_count>
      <attachid>243617</attachid>
    <who name="David Gatwood">dgatwood</who>
    <bug_when>2014-12-21 19:54:00 -0800</bug_when>
    <thetext>Created attachment 243617
Fix for another crashing edge case

Note that for some bizarre reason, this latest patch breaks the WebKitLegacy build for me with an inability to find the &quot;PseudoElement.h&quot; header.  I&apos;m not exactly sure why such a critical WebCore header would be missing in that framework&apos;s build environment, and the problem is probably specific to my machine&apos;s rather broken build configuration.  Either way, I have no need to build that framework for my purposes, so I&apos;m going to ignore it for the time being.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1873644</commentid>
    <comment_count>60</comment_count>
    <who name="Ahmad Saleem">ahmad.saleem792</who>
    <bug_when>2022-06-02 11:48:45 -0700</bug_when>
    <thetext>I am able to reproduce partially this bug where in Safari 15.5 and Chrome Canary 104, the caret is inside [] but if I type something, it is not bold. In Firefox Nightly 103, it is doing as specified of expected result of test case (inside [] and typing bold).

If it is not intended expected results or require spec change, please do accordingly. If my testing is flawed, please retest accordingly. Thanks!</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1873645</commentid>
    <comment_count>61</comment_count>
    <who name="Ahmad Saleem">ahmad.saleem792</who>
    <bug_when>2022-06-02 11:49:09 -0700</bug_when>
    <thetext>I am able to reproduce partially this bug where in Safari 15.5 and Chrome Canary 104, the caret is inside [] but if I type something, it is not bold. In Firefox Nightly 103, it is doing as specified of expected result of test case (inside [] and typing bold).

If it is not intended expected results or require spec change, please do accordingly. If my testing is flawed, please retest accordingly. Thanks!</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1886832</commentid>
    <comment_count>62</comment_count>
    <who name="">qqqwwweeerrrtttt12123</who>
    <bug_when>2022-07-26 11:18:10 -0700</bug_when>
    <thetext>It seems like this *still* isn&apos;t fixed. I&apos;m making a wysiwyg editor, and not having to hack around this would be useful.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1935768</commentid>
    <comment_count>63</comment_count>
    <who name="Ryosuke Niwa">rniwa</who>
    <bug_when>2023-02-22 00:41:50 -0800</bug_when>
    <thetext>Pull request: https://github.com/WebKit/WebKit/pull/10503</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>2051462</commentid>
    <comment_count>64</comment_count>
    <who name="John Page">jdpsaratoga</who>
    <bug_when>2024-08-08 11:40:14 -0700</bug_when>
    <thetext>I know the underlying issues has not been fixed, but I see posters trying to create an editor.   I have found a way to get around this issue in this use case.
  
The trick is to reverse the sequence of operations.  It is tempting, when a user clicks the &quot;bold&quot; button, to create a &lt;b&gt; element then allow the user to type into it.  Instead, just a set a flag to indicate &quot;bold&quot; mode.  Then intercept the keydown event.  If the bold flag is set, insert the &lt;b&gt; tag along with the first keystroke into the document and place the cursor on it.   Then kill the bold flag.  You will succeed in setting the cursor because the &lt;b&gt; element is not empty.    Hook the onselectionchange event to knock down the flag.  

Note this is not a hack - it is actually a better way to do it IMHO.   If the user  clicks &quot;bold&quot; and then moves the selection, there will be no orphan &lt;b&gt; element in the document to try and remove.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>2051589</commentid>
    <comment_count>65</comment_count>
    <who name="David Gatwood">dgatwood</who>
    <bug_when>2024-08-08 20:27:18 -0700</bug_when>
    <thetext>Unfortunately, my use case is for an XML editor, and that would result in a document that doesn&apos;t conform to the DTD because of missing element nesting if you save prior to hitting a key, not to mention that it would would be really confusing for a button to do nothing, and then for the entire layout of parts of the page to change when you hit the next key because the newly created element is, for example, centered left to right.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>2168834</commentid>
    <comment_count>66</comment_count>
    <who name="Frances Cornwall">frances_c</who>
    <bug_when>2026-01-01 15:25:20 -0800</bug_when>
    <thetext>I tested this bug in Safari 26.2 with the following code with document.designMode = &quot;on&quot;; in the console and it behaves correctly with Some&lt;b&gt;|&lt;/b&gt;text as a result of clicking the button.

&lt;!doctype html&gt;
&lt;html&gt;
&lt;body&gt;
  &lt;p id=&quot;p&quot;&gt;Some &lt;b id=&quot;b&quot;&gt;&lt;/b&gt;text.&lt;/p&gt;

  &lt;button onclick=&quot;placeCaret()&quot;&gt;Place caret inside &amp;lt;b&amp;gt;&lt;/button&gt;

  &lt;script&gt;
    function placeCaret() {
      const b = document.getElementById(&quot;b&quot;);
      const range = document.createRange();
      const sel = window.getSelection();

      range.setStart(b, 0);
      range.setEnd(b, 0);

      sel.removeAllRanges();
      sel.addRange(range);
    }
  &lt;/script&gt;
&lt;/body&gt;
&lt;/html&gt;</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>2168839</commentid>
    <comment_count>67</comment_count>
    <who name="Frances Cornwall">frances_c</who>
    <bug_when>2026-01-01 17:30:26 -0800</bug_when>
    <thetext>The text is not bold and should be.</thetext>
  </long_desc>
      
          <attachment
              isobsolete="0"
              ispatch="0"
              isprivate="0"
          >
            <attachid>16346</attachid>
            <date>2007-09-22 03:19:03 -0700</date>
            <delta_ts>2007-09-22 03:19:03 -0700</delta_ts>
            <desc>TC</desc>
            <filename>Bug 15256 TC.html</filename>
            <type>text/html</type>
            <size>2187</size>
            <attacher>webkit</attacher>
            
              <data encoding="base64">PCFET0NUWVBFIGh0bWwgUFVCTElDICItLy9XM0MvL0RURCBYSFRNTCAxLjAgVHJhbnNpdGlvbmFs
Ly9FTiIgImh0dHA6Ly93d3cudzMub3JnL1RSL3hodG1sMS9EVEQveGh0bWwxLXRyYW5zaXRpb25h
bC5kdGQiPg0KPGh0bWwgeG1sbnM9Imh0dHA6Ly93d3cudzMub3JnLzE5OTkveGh0bWwiPg0KPGhl
YWQ+DQoJPHRpdGxlPkNvbGxhcHNlZCBFbGVtZW50IFNlbGVjdGlvbjwvdGl0bGU+DQoJPHNjcmlw
dCB0eXBlPSJ0ZXh0L2phdmFzY3JpcHQiPg0KDQovLyBUaGUgY29kZSBpbnNpZGUgd2luZG93Lm9u
bG9hZCBoYXMgbm90aGluZyB0byBkbyB3aXRoIHRoZSBpc3N1ZSwgDQovLyBzbyBpdCBjYW4gYmUg
aWdub3JlZC4NCndpbmRvdy5vbmxvYWQgPSBmdW5jdGlvbigpDQp7DQoJZG9jdW1lbnQuZGVzaWdu
TW9kZSA9ICdvbicgOw0KCQ0KCS8vIEZvciBTYWZhcmkgYW5kIE9wZXJhLCB3ZSBtdXN0IGVuc3Vy
ZSB0aGUgZm9jdXMuDQoJaWYgKCAoL3NhZmFyaS9pKS50ZXN0KCBuYXZpZ2F0b3IudXNlckFnZW50
ICkgKQ0KCQlkb2N1bWVudC5kb2N1bWVudEVsZW1lbnQuZm9jdXMoKSA7CQkvLyBTYWZhcmkNCgll
bHNlDQoJCXdpbmRvdy5mb2N1cygpIDsJCQkJCQkvLyBPcGVyYS4JCQ0KDQoJTW92ZVNlbGVjdGlv
bigpIDsNCn0NCg0KLy8gSGVyZSBpcyB0aGUgZnVuY3Rpb24gdG8gYmUgYW5hbHl6ZWQuDQpmdW5j
dGlvbiBNb3ZlU2VsZWN0aW9uKCkNCnsNCgkvLyBHZXQgb3VyIHRhcmdldCBlbXB0eSBlbGVtZW50
Lg0KCXZhciBlbCA9IGRvY3VtZW50LmdldEVsZW1lbnRzQnlUYWdOYW1lKCAnYicgKVswXSA7DQoJ
DQoJLy8gVGhpcyBpcyB0aGUgaGFjayBmb3IgRmlyZWZveCBhbmQgT3BlcmEgdG8gbWFrZSB0aGUg
Y3Vyc29yIGJsaW5raW5nDQoJLy8gcHJvcGVybHkgaW5zaWRlIHRoZSBlbXB0eSBlbGVtZW50LiBJ
dCB3b3VsZCBiZSBvayBpZiBpdCB3b3VsZCB3b3JrIGZvcg0KCS8vIFNhZmFyaSB0b28sIGJ1dCBp
ZGVhbGx5IGl0IHNob3VsZCBub3QgYmUgbmVlZGVkLg0KCWVsLmFwcGVuZENoaWxkKCBkb2N1bWVu
dC5jcmVhdGVUZXh0Tm9kZSgnJykgKSA7DQoNCgkvLyBDcmVhdGUgYSByYW5nZSBpbnNpZGUgdGhl
IGVsZW1lbnQuDQoJdmFyIHJhbmdlID0gZG9jdW1lbnQuY3JlYXRlUmFuZ2UoKSA7DQoJcmFuZ2Uu
c2V0U3RhcnQoIGVsLCAwICkgOw0KCXJhbmdlLnNldEVuZCggZWwsIDAgKSA7DQoNCgkvLyBNb3Zl
IHRoZSBzZWxlY3Rpb24gdG8gdGhlIHJhbmdlLg0KCXZhciBzZWxlY3Rpb24gPSB3aW5kb3cuZ2V0
U2VsZWN0aW9uKCkgOw0KCXNlbGVjdGlvbi5yZW1vdmVBbGxSYW5nZXMoKSA7DQoJc2VsZWN0aW9u
LmFkZFJhbmdlKCByYW5nZSApIDsNCn0NCg0KCTwvc2NyaXB0Pg0KPC9oZWFkPg0KPGJvZHk+DQoJ
PGgxPg0KCQlTZWxlY3Rpb24gaW5zaWRlIGVtcHR5IGVsZW1lbnQNCgk8L2gxPg0KCTxwPg0KCQlU
aGlzIGlzIGFuIGVkaXRhYmxlIGRvY3VtZW50LiBXaGVuIGxvYWRpbmcgdGhpcyBwYWdlLCB0aGUg
Y2FyZXQgc2hvdWxkIGJlIGJsaW5raW5nDQoJCWluc2lkZSB0aGUgZm9sbG93aW5nIGJyYWNrZXRz
LiBTdGFydCB0eXBpbmcuIFRoZSB0ZXh0IG11c3QgYmUgPHN0cm9uZz5ib2xkPC9zdHJvbmc+Lg0K
CTwvcD4NCgk8cD4NCgkJWzxiPjwvYj5dDQoJPC9wPg0KCTxociAvPg0KCTxwPg0KCQlBbiBpbXBv
cnRhbnQgYXNwZWN0IHRvIGNvbnNpZGVyIGlzIHRoYXQsIGlmIHlvdSBkb24ndCB0eXBlIGFueXRo
aW5nIHdoZW4gbG9hZGluZw0KCQl0aGUgcGFnZSwgYnV0IGluc3RlYWQgdXNlIHRoZSBrZXlib2Fy
ZCB0byBjaGFuZ2UgdGhlIGNhcmV0IHBvc2l0aW9uLCB0aGVyZSBzaG91bGQNCgkJYmUgbm8gd2F5
IHRvIG1vdmUgaW5zaWRlIHRoZSBlbXB0eSBlbGVtZW50IGFnYWluIHdpdGggdGhlIG1vdXNlIG9y
IHRoZSBrZXlib2FyZCwNCgkJd2hpY2ggbWVhbnMgdGhhdCBpdCB3aWxsIHJlbWFpbiBlbXB0eSBm
b3JldmVyLiBUaGlzIGlzIHRoZSBkZXNpcmVkIGJlaGF2aW9yLg0KCTwvcD4NCgk8cD4NCgkJVGhp
cyBwYWdlIGlzIG5vdCBpbnRlbmRlZCB0byBiZSBjb21wYXRpYmxlIHdpdGggSUUsIGFzIHRoZXJl
IGFyZSBzZXZlcmFsIGhhY2tzIHRvDQoJCW1ha2UgaXQgd29yayB0aGVyZS4gSXQgc2hvdWxkIGlu
c3RlYWQgd29yayBwcm9wZXJseSB3aXRoIEZpcmVmb3gsIE9wZXJhIGFuZCBTYWZhcmkuDQoJPC9w
Pg0KPC9ib2R5Pg0KPC9odG1sPg0K
</data>

          </attachment>
          <attachment
              isobsolete="0"
              ispatch="0"
              isprivate="0"
          >
            <attachid>17529</attachid>
            <date>2007-11-26 06:46:29 -0800</date>
            <delta_ts>2007-11-26 06:46:29 -0800</delta_ts>
            <desc>automated test case (incomplete)</desc>
            <filename>addRange-invalid-selection.html</filename>
            <type>text/html</type>
            <size>2436</size>
            <attacher name="Alexey Proskuryakov">ap</attacher>
            
              <data encoding="base64">PGh0bWw+DQo8Ym9keT4NCjxkaXYgaWQ9dGVzdERpdiBjb250ZW50ZWRpdGFibGU+WzxiPjwvYj48
aSBzdHlsZT0iZGlzcGxheTpub25lIj5pbnZpc2libGU8L2k+XTwvZGl2Pg0KPGRpdiBpZD1sb2c+
PC9kaXY+DQoNCjxzY3JpcHQ+DQogICAgaWYgKHdpbmRvdy5sYXlvdXRUZXN0Q29udHJvbGxlcikN
CiAgICAgICAgbGF5b3V0VGVzdENvbnRyb2xsZXIuZHVtcEFzVGV4dCgpOw0KDQogICAgZnVuY3Rp
b24gbG9nKG1lc3NhZ2UpIHsNCiAgICAgICAgdmFyIG5ld0NoaWxkID0gZG9jdW1lbnQuY3JlYXRl
RWxlbWVudCgiZGl2Iik7DQogICAgICAgIG5ld0NoaWxkLmFwcGVuZENoaWxkKGRvY3VtZW50LmNy
ZWF0ZVRleHROb2RlKG1lc3NhZ2UpKTsNCiAgICAgICAgZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQo
ImxvZyIpLmFwcGVuZENoaWxkKG5ld0NoaWxkKTsNCiAgICB9DQoNCiAgICBmdW5jdGlvbiBzaG91
bGRCZShleHByLCBleHBlY3RlZCkgew0KICAgICAgICBhY3R1YWwgPSBldmFsKGV4cHIpOw0KICAg
ICAgICBpZiAoZXhwZWN0ZWQgIT09IGFjdHVhbCkNCiAgICAgICAgICAgIGxvZygnRkFJTDogRXhw
ZWN0ZWQgIicgKyBleHBlY3RlZCArICciIHdhczogIicgKyBhY3R1YWwgKyAnIicpOw0KICAgICAg
ICBlbHNlDQogICAgICAgICAgICBsb2coJ1BBU1M6ICcgKyBleHByKTsNCiAgICB9DQoNCiAgICB2
YXIgdGVzdERpdiA9IGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKCJ0ZXN0RGl2Iik7DQogICAgdmFy
IGIgPSBkb2N1bWVudC5nZXRFbGVtZW50c0J5VGFnTmFtZSgnYicpWzBdOw0KICAgIHZhciBpID0g
ZG9jdW1lbnQuZ2V0RWxlbWVudHNCeVRhZ05hbWUoJ2knKVswXTsNCiAgICB2YXIgc2VsZWN0aW9u
ID0gd2luZG93LmdldFNlbGVjdGlvbigpOw0KICAgIA0KICAgIGlmICghYi5maXJzdENoaWxkKQ0K
ICAgICAgICBiLmFwcGVuZENoaWxkKGRvY3VtZW50LmNyZWF0ZVRleHROb2RlKCcnKSk7DQoNCiAg
ICBsb2coIlNldHRpbmcgc2VsZWN0aW9uIHRvIChiLCAwKSAtIChiLCAwKSIpOw0KICAgIHZhciBy
YW5nZSA9IGRvY3VtZW50LmNyZWF0ZVJhbmdlKCk7DQogICAgcmFuZ2Uuc2V0U3RhcnQoYiwgMCk7
DQogICAgcmFuZ2Uuc2V0RW5kKGIsIDApOw0KICAgIHNlbGVjdGlvbi5hZGRSYW5nZShyYW5nZSk7
DQogICAgc2hvdWxkQmUoJ3NlbGVjdGlvbi5hbmNob3JOb2RlJywgYik7DQogICAgc2hvdWxkQmUo
J3NlbGVjdGlvbi5hbmNob3JPZmZzZXQnLCAwKTsNCiAgICBzZWxlY3Rpb24ucmVtb3ZlQWxsUmFu
Z2VzKCk7DQoNCiAgICBsb2coIlNldHRpbmcgc2VsZWN0aW9uIHRvICh0ZXN0RGl2LCAwKSAtICh0
ZXN0RGl2LCAwKSIpOw0KICAgIHJhbmdlID0gZG9jdW1lbnQuY3JlYXRlUmFuZ2UoKTsNCiAgICBy
YW5nZS5zZXRTdGFydCh0ZXN0RGl2LCAwKTsNCiAgICByYW5nZS5zZXRFbmQodGVzdERpdiwgMCk7
DQogICAgc2VsZWN0aW9uLmFkZFJhbmdlKHJhbmdlKTsNCiAgICBzaG91bGRCZSgnc2VsZWN0aW9u
LmFuY2hvck5vZGUnLCB0ZXN0RGl2KTsNCiAgICBzaG91bGRCZSgnc2VsZWN0aW9uLmFuY2hvck9m
ZnNldCcsIDApOw0KICAgIHNlbGVjdGlvbi5yZW1vdmVBbGxSYW5nZXMoKTsNCg0KICAgIGxvZygi
U2V0dGluZyBzZWxlY3Rpb24gdG8gKGksIDApIC0gKGksIDEpIik7DQogICAgcmFuZ2UgPSBkb2N1
bWVudC5jcmVhdGVSYW5nZSgpOw0KICAgIHJhbmdlLnNldFN0YXJ0KGksIDApOw0KICAgIHJhbmdl
LnNldEVuZChpLCAxKTsNCiAgICBzZWxlY3Rpb24uYWRkUmFuZ2UocmFuZ2UpOw0KICAgIHNob3Vs
ZEJlKCdzZWxlY3Rpb24uYW5jaG9yTm9kZScsIGkpOw0KICAgIHNob3VsZEJlKCdzZWxlY3Rpb24u
YW5jaG9yT2Zmc2V0JywgMCk7DQogICAgc2hvdWxkQmUoJ3NlbGVjdGlvbi5mb2N1c05vZGUnLCBp
KTsNCiAgICBzaG91bGRCZSgnc2VsZWN0aW9uLmZvY3VzT2Zmc2V0JywgMSk7DQogICAgc2VsZWN0
aW9uLnJlbW92ZUFsbFJhbmdlcygpOw0KDQogICAgbG9nKCJTZXR0aW5nIHNlbGVjdGlvbiB0byAo
aS5maXJzdENoaWxkLCAxKSAtIChpLmZpcnN0Q2hpbGQsIDIpIik7DQogICAgcmFuZ2UgPSBkb2N1
bWVudC5jcmVhdGVSYW5nZSgpOw0KICAgIHJhbmdlLnNldFN0YXJ0KGkuZmlyc3RDaGlsZCwgMSk7
DQogICAgcmFuZ2Uuc2V0RW5kKGkuZmlyc3RDaGlsZCwgMik7DQogICAgc2VsZWN0aW9uLmFkZFJh
bmdlKHJhbmdlKTsNCiAgICBzaG91bGRCZSgnc2VsZWN0aW9uLmFuY2hvck5vZGUnLCBpLmZpcnN0
Q2hpbGQpOw0KICAgIHNob3VsZEJlKCdzZWxlY3Rpb24uYW5jaG9yT2Zmc2V0JywgMSk7DQogICAg
c2hvdWxkQmUoJ3NlbGVjdGlvbi5mb2N1c05vZGUnLCBpLmZpcnN0Q2hpbGQpOw0KICAgIHNob3Vs
ZEJlKCdzZWxlY3Rpb24uZm9jdXNPZmZzZXQnLCAyKTsNCiAgICBzZWxlY3Rpb24ucmVtb3ZlQWxs
UmFuZ2VzKCk7DQo8L3NjcmlwdD4NCg0KPC9ib2R5Pg0KPC9odG1sPg0K
</data>

          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>238624</attachid>
            <date>2014-09-24 16:35:05 -0700</date>
            <delta_ts>2014-09-27 16:34:58 -0700</delta_ts>
            <desc>Partial patch</desc>
            <filename>15256.patch</filename>
            <type>text/plain</type>
            <size>43497</size>
            <attacher name="David Gatwood">dgatwood</attacher>
            
              <data encoding="base64">SW5kZXg6IExheW91dFRlc3RzL2VkaXRpbmcvZGVsZXRpbmcvc21hcnQtZGVsZXRlLTAwMS5odG1s
Cj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT0KLS0tIExheW91dFRlc3RzL2VkaXRpbmcvZGVsZXRpbmcvc21hcnQtZGVsZXRl
LTAwMS5odG1sCShyZXZpc2lvbiAxNzM5MDUpCisrKyBMYXlvdXRUZXN0cy9lZGl0aW5nL2RlbGV0
aW5nL3NtYXJ0LWRlbGV0ZS0wMDEuaHRtbAkod29ya2luZyBjb3B5KQpAQCAtMjEsNiArMjEsNyBA
QAogPHNjcmlwdD4KIAogZnVuY3Rpb24gZWRpdGluZ1Rlc3QoKSB7CisgICAgd2luZG93LmdldFNl
bGVjdGlvbigpLmNvbGxhcHNlKHRlc3QuZmlyc3RDaGlsZCwgMSk7CiAgICAgZG91YmxlQ2xpY2tB
dFNlbGVjdGlvblN0YXJ0KCk7CiAgICAgZGVsZXRlQ29tbWFuZCgpOwogfQpJbmRleDogTGF5b3V0
VGVzdHMvZWRpdGluZy9lZGl0aW5nLmpzCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIExheW91dFRlc3RzL2VkaXRp
bmcvZWRpdGluZy5qcwkocmV2aXNpb24gMTczOTA1KQorKysgTGF5b3V0VGVzdHMvZWRpdGluZy9l
ZGl0aW5nLmpzCSh3b3JraW5nIGNvcHkpCkBAIC04OTcsMTIgKzg5Nyw1NSBAQAogICAgIGlmICh3
aW5kb3cudGVzdFJ1bm5lcikKICAgICAgICAgdGVzdFJ1bm5lci5kdW1wRWRpdGluZ0NhbGxiYWNr
cygpOwogCisgICAgZm9jdXNPbkZpcnN0VGV4dEluVGVzdEVsZW1lbnRJZkV4aXN0cygpOworCisg
ICAgZWRpdGluZ1Rlc3QoKTsKK30KKworZnVuY3Rpb24gZm9jdXNPbkZpcnN0VGV4dEluVGVzdEVs
ZW1lbnRJZkV4aXN0cygpIHsKICAgICB2YXIgZWxlbSA9IGRvY3VtZW50LmdldEVsZW1lbnRCeUlk
KCJ0ZXN0Iik7CiAgICAgdmFyIHNlbGVjdGlvbiA9IHdpbmRvdy5nZXRTZWxlY3Rpb24oKTsKLSAg
ICBzZWxlY3Rpb24uc2V0UG9zaXRpb24oZWxlbSwgMCk7Ci0gICAgZWRpdGluZ1Rlc3QoKTsKKyAg
ICBpZiAoZWxlbSkgeworICAgICAgICB2YXIgdHJhdmVyc2UgPSBmdW5jdGlvbiAobm9kZSwgb2Zm
c2V0LCBjb25kaXRpb24pIHsKKyAgICAgICAgICAgIHZhciBvYmogPSBjb25kaXRpb24obm9kZSwg
b2Zmc2V0KTsKKyAgICAgICAgICAgIGlmIChvYmopCisgICAgICAgICAgICAgICAgcmV0dXJuIG9i
ajsKKworICAgICAgICAgICAgdmFyIGNoaWxkcmVuID0gbm9kZS5jaGlsZE5vZGVzOworICAgICAg
ICAgICAgdmFyIGxlbiA9IGNoaWxkcmVuLmxlbmd0aDsKKyAgICAgICAgICAgIGZvciAodmFyIGkg
PSAwOyBpIDwgbGVuOyBpKyspIHsKKyAgICAgICAgICAgICAgICB2YXIgY2hpbGQgPSBjaGlsZHJl
bltpXTsKKyAgICAgICAgICAgICAgICBvYmogPSB0cmF2ZXJzZShjaGlsZCwgaSwgY29uZGl0aW9u
KTsKKyAgICAgICAgICAgICAgICBpZiAob2JqKQorICAgICAgICAgICAgICAgICAgICByZXR1cm4g
b2JqOworICAgICAgICAgICAgfQorICAgICAgICAgICAgcmV0dXJuIG51bGw7CisgICAgICAgIH0K
KworICAgICAgICB2YXIgZmlyc3RWaXNpYmxlUG9zaXRpb24gPSB0cmF2ZXJzZShlbGVtLCAwLCBm
dW5jdGlvbiAobm9kZSwgb2Zmc2V0KSB7CisgICAgICAgICAgICBpZiAobm9kZS5ub2RlTmFtZSA9
PSAnI3RleHQnKSB7CisgICAgICAgICAgICAgICAgb2Zmc2V0ID0gMDsKKyAgICAgICAgICAgICAg
ICB3aGlsZSAob2Zmc2V0IDwgbm9kZS50ZXh0Q29udGVudC5sZW5ndGggJiYgbm9kZS50ZXh0Q29u
dGVudFtvZmZzZXRdID09ICdcbicpCisgICAgICAgICAgICAgICAgICAgIG9mZnNldCsrOworICAg
ICAgICAgICAgICAgIHJldHVybiB7ICdub2RlJzogbm9kZSwgJ29mZnNldCc6IG9mZnNldCB9Owor
ICAgICAgICAgICAgfQorCisgICAgICAgICAgICBpZiAobm9kZS5ub2RlTmFtZSA9PSAnQlInIHx8
IG5vZGUubm9kZU5hbWUgPT0gJ0lNRycpCisgICAgICAgICAgICAgICAgcmV0dXJuIHsgJ25vZGUn
OiBub2RlLnBhcmVudE5vZGUsICdvZmZzZXQnOiBvZmZzZXQgfTsKKworICAgICAgICAgICAgcmV0
dXJuIG51bGw7CisgICAgICAgIH0pOworCisgICAgICAgIGlmIChmaXJzdFZpc2libGVQb3NpdGlv
bikKKyAgICAgICAgICAgIHNlbGVjdGlvbi5jb2xsYXBzZShmaXJzdFZpc2libGVQb3NpdGlvbi5u
b2RlLCBmaXJzdFZpc2libGVQb3NpdGlvbi5vZmZzZXQpOworICAgICAgICBlbHNlCisgICAgICAg
ICAgICBzZWxlY3Rpb24uY29sbGFwc2UoZWxlbSwgMCk7CisgICAgfSBlbHNlIHsKKyAgICAgICAg
c2VsZWN0aW9uLnJlbW92ZUFsbFJhbmdlcygpOworICAgIH0KIH0KIAorCiB2YXIgZHVtcEFzVGV4
dCA9IGZhbHNlOwogdmFyIGVsZW1lbnRzRm9yRHVtcGluZ01hcmt1cExpc3QgPSBbZG9jdW1lbnQu
Y3JlYXRlRWxlbWVudCgnb2wnKV07CiAKQEAgLTkxNSw5ICs5NTgsOCBAQAogCiAgICAgZHVtcEFz
VGV4dCA9IHRydWU7CiAKLSAgICB2YXIgZWxlbSA9IGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKCJ0
ZXN0Iik7Ci0gICAgdmFyIHNlbGVjdGlvbiA9IHdpbmRvdy5nZXRTZWxlY3Rpb24oKTsKLSAgICBz
ZWxlY3Rpb24uc2V0UG9zaXRpb24oZWxlbSwgMCk7CisgICAgZm9jdXNPbkZpcnN0VGV4dEluVGVz
dEVsZW1lbnRJZkV4aXN0cygpOworCiAgICAgZWRpdGluZ1Rlc3QoKTsKIAogICAgIGZvciAodmFy
IGkgPSAwOyBpIDwgZWxlbWVudHNGb3JEdW1waW5nTWFya3VwTGlzdC5sZW5ndGg7IGkrKykKSW5k
ZXg6IExheW91dFRlc3RzL2VkaXRpbmcvcGFzdGVib2FyZC9zbWFydC1kcmFnLWRyb3AuaHRtbAo9
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09Ci0tLSBMYXlvdXRUZXN0cy9lZGl0aW5nL3Bhc3RlYm9hcmQvc21hcnQtZHJhZy1k
cm9wLmh0bWwJKHJldmlzaW9uIDE3MzkwNSkKKysrIExheW91dFRlc3RzL2VkaXRpbmcvcGFzdGVi
b2FyZC9zbWFydC1kcmFnLWRyb3AuaHRtbAkod29ya2luZyBjb3B5KQpAQCAtNiw2ICs2LDcgQEAK
ICAgCiAgICAgaWYgKCF3aW5kb3cuZXZlbnRTZW5kZXIpCiAgICAgICAgIHJldHVybjsKKyAgICB3
aW5kb3cuZ2V0U2VsZWN0aW9uKCkuY29sbGFwc2UoZHJhZ21lLmZpcnN0Q2hpbGQsIDApOwogICAg
IGRvdWJsZUNsaWNrQXRTZWxlY3Rpb25TdGFydCgpOwogCiAgICAgLy8gRHJhZyAnaGVsbG8nCklu
ZGV4OiBMYXlvdXRUZXN0cy9lZGl0aW5nL3Bhc3RlYm9hcmQvc21hcnQtcGFzdGUtMDAxLmh0bWwK
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PQotLS0gTGF5b3V0VGVzdHMvZWRpdGluZy9wYXN0ZWJvYXJkL3NtYXJ0LXBhc3Rl
LTAwMS5odG1sCShyZXZpc2lvbiAxNzM5MDUpCisrKyBMYXlvdXRUZXN0cy9lZGl0aW5nL3Bhc3Rl
Ym9hcmQvc21hcnQtcGFzdGUtMDAxLmh0bWwJKHdvcmtpbmcgY29weSkKQEAgLTQyLDYgKzQyLDcg
QEAKIDxzY3JpcHQ+CiAKIGZ1bmN0aW9uIGVkaXRpbmdUZXN0KCkgeworICAgIHdpbmRvdy5nZXRT
ZWxlY3Rpb24oKS5jb2xsYXBzZSh0ZXN0LmZpcnN0Q2hpbGQsIDEpOwogICAgIGRvdWJsZUNsaWNr
QXRTZWxlY3Rpb25TdGFydCgpOwogICAgIGNvcHlDb21tYW5kKCk7CiAgICAgbW92ZVNlbGVjdGlv
bkZvcndhcmRCeUNoYXJhY3RlckNvbW1hbmQoKTsKSW5kZXg6IExheW91dFRlc3RzL2VkaXRpbmcv
cGFzdGVib2FyZC9zbWFydC1wYXN0ZS0wMDMuaHRtbAo9PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBMYXlvdXRUZXN0
cy9lZGl0aW5nL3Bhc3RlYm9hcmQvc21hcnQtcGFzdGUtMDAzLmh0bWwJKHJldmlzaW9uIDE3Mzkw
NSkKKysrIExheW91dFRlc3RzL2VkaXRpbmcvcGFzdGVib2FyZC9zbWFydC1wYXN0ZS0wMDMuaHRt
bAkod29ya2luZyBjb3B5KQpAQCAtNDMsNiArNDMsNyBAQAogPHNjcmlwdD4KIAogZnVuY3Rpb24g
ZWRpdGluZ1Rlc3QoKSB7CisgICAgd2luZG93LmdldFNlbGVjdGlvbigpLmNvbGxhcHNlKHRlc3Qu
Zmlyc3RDaGlsZCwgMSk7CiAgICAgZG91YmxlQ2xpY2tBdFNlbGVjdGlvblN0YXJ0KCk7CiAgICAg
Y29weUNvbW1hbmQoKTsKICAgICBtb3ZlU2VsZWN0aW9uRm9yd2FyZEJ5Q2hhcmFjdGVyQ29tbWFu
ZCgpOwpJbmRleDogTGF5b3V0VGVzdHMvZWRpdGluZy9wYXN0ZWJvYXJkL3NtYXJ0LXBhc3RlLTAw
NC5odG1sCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT0KLS0tIExheW91dFRlc3RzL2VkaXRpbmcvcGFzdGVib2FyZC9zbWFy
dC1wYXN0ZS0wMDQuaHRtbAkocmV2aXNpb24gMTczOTA1KQorKysgTGF5b3V0VGVzdHMvZWRpdGlu
Zy9wYXN0ZWJvYXJkL3NtYXJ0LXBhc3RlLTAwNC5odG1sCSh3b3JraW5nIGNvcHkpCkBAIC00Miw2
ICs0Miw3IEBACiA8c2NyaXB0PgogCiBmdW5jdGlvbiBlZGl0aW5nVGVzdCgpIHsKKyAgICB3aW5k
b3cuZ2V0U2VsZWN0aW9uKCkuY29sbGFwc2UodGVzdC5maXJzdENoaWxkLCAxKTsKICAgICBkb3Vi
bGVDbGlja0F0U2VsZWN0aW9uU3RhcnQoKTsKICAgICBjb3B5Q29tbWFuZCgpOwogICAgIG1vdmVT
ZWxlY3Rpb25Gb3J3YXJkQnlDaGFyYWN0ZXJDb21tYW5kKCk7CkluZGV4OiBMYXlvdXRUZXN0cy9l
ZGl0aW5nL3NlbGVjdGlvbi9ET01TZWxlY3Rpb24tRG9jdW1lbnRUeXBlLWV4cGVjdGVkLnR4dAo9
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09Ci0tLSBMYXlvdXRUZXN0cy9lZGl0aW5nL3NlbGVjdGlvbi9ET01TZWxlY3Rpb24t
RG9jdW1lbnRUeXBlLWV4cGVjdGVkLnR4dAkocmV2aXNpb24gMTczOTA1KQorKysgTGF5b3V0VGVz
dHMvZWRpdGluZy9zZWxlY3Rpb24vRE9NU2VsZWN0aW9uLURvY3VtZW50VHlwZS1leHBlY3RlZC50
eHQJKHdvcmtpbmcgY29weSkKQEAgLTUsMTAgKzUsMTAgQEAKIAogUEFTUyBzZWwuYW5jaG9yTm9k
ZSBpcyBudWxsCiBQQVNTIHNlbC5hbmNob3JOb2RlIGlzIG51bGwKK1BBU1Mgc2VsLmNvbGxhcHNl
KGRvY1R5cGUpIHRocmV3IGV4Y2VwdGlvbiBJbnZhbGlkTm9kZVR5cGVFcnJvcjogRmFpbGVkIHRv
IGV4ZWN1dGUgJ2NvbGxhcHNlJyBvbiAnU2VsZWN0aW9uJzogVGhlIG5vZGUgcHJvdmlkZWQgaXMg
b2YgdHlwZSAnYycuLgogUEFTUyBzZWwuYW5jaG9yTm9kZSBpcyBudWxsCitQQVNTIHNlbC5jb2xs
YXBzZShkb2NUeXBlKSB0aHJldyBleGNlcHRpb24gSW52YWxpZE5vZGVUeXBlRXJyb3I6IEZhaWxl
ZCB0byBleGVjdXRlICdjb2xsYXBzZScgb24gJ1NlbGVjdGlvbic6IFRoZSBub2RlIHByb3ZpZGVk
IGlzIG9mIHR5cGUgJ2MnLi4KIFBBU1Mgc2VsLmFuY2hvck5vZGUgaXMgbnVsbAotUEFTUyBzZWwu
YW5jaG9yTm9kZSBpcyBudWxsCi1QQVNTIHNlbC5hbmNob3JOb2RlIGlzIG51bGwKIFBBU1Mgc2Vs
LmNvbnRhaW5zTm9kZShkb2NUeXBlKSBpcyBmYWxzZQogUEFTUyBzdWNjZXNzZnVsbHlQYXJzZWQg
aXMgdHJ1ZQogCkluZGV4OiBMYXlvdXRUZXN0cy9lZGl0aW5nL3NlbGVjdGlvbi9zY3JpcHQtdGVz
dHMvRE9NU2VsZWN0aW9uLURvY3VtZW50VHlwZS5qcwo9PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBMYXlvdXRUZXN0
cy9lZGl0aW5nL3NlbGVjdGlvbi9zY3JpcHQtdGVzdHMvRE9NU2VsZWN0aW9uLURvY3VtZW50VHlw
ZS5qcwkocmV2aXNpb24gMTczOTA1KQorKysgTGF5b3V0VGVzdHMvZWRpdGluZy9zZWxlY3Rpb24v
c2NyaXB0LXRlc3RzL0RPTVNlbGVjdGlvbi1Eb2N1bWVudFR5cGUuanMJKHdvcmtpbmcgY29weSkK
QEAgLTksOCArOSw3IEBACiBzZWwuc2V0QmFzZUFuZEV4dGVudChudWxsLCAwLCBkb2NUeXBlLCAw
KTsKIHNob3VsZEJlTnVsbCgic2VsLmFuY2hvck5vZGUiKTsKIAotc2VsLmNvbGxhcHNlKGRvY1R5
cGUpOwotc2hvdWxkQmVOdWxsKCJzZWwuYW5jaG9yTm9kZSIpOworc2hvdWxkVGhyb3coInNlbC5j
b2xsYXBzZShkb2NUeXBlKSIsICciSW52YWxpZE5vZGVUeXBlRXJyb3I6IEZhaWxlZCB0byBleGVj
dXRlIFwnY29sbGFwc2VcJyBvbiBcJ1NlbGVjdGlvblwnOiBUaGUgbm9kZSBwcm92aWRlZCBpcyBv
ZiB0eXBlIFwnY1wnLiInKTsKIAogc2VsLnNlbGVjdEFsbENoaWxkcmVuKGRvY1R5cGUpOwogc2hv
dWxkQmVOdWxsKCJzZWwuYW5jaG9yTm9kZSIpOwpJbmRleDogTGF5b3V0VGVzdHMvZWRpdGluZy9z
ZWxlY3Rpb24vc2VsZWN0aW9uLWludmFsaWQtb2Zmc2V0LWV4cGVjdGVkLnR4dAo9PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
Ci0tLSBMYXlvdXRUZXN0cy9lZGl0aW5nL3NlbGVjdGlvbi9zZWxlY3Rpb24taW52YWxpZC1vZmZz
ZXQtZXhwZWN0ZWQudHh0CShyZXZpc2lvbiAxNzM5MDUpCisrKyBMYXlvdXRUZXN0cy9lZGl0aW5n
L3NlbGVjdGlvbi9zZWxlY3Rpb24taW52YWxpZC1vZmZzZXQtZXhwZWN0ZWQudHh0CSh3b3JraW5n
IGNvcHkpCkBAIC0xLDggKzEsOSBAQAotWW91IHNob3VsZCBzZWUgc2l4IE9LcyBiZWxvdyAoYW5k
IG5vdCBoYW5nKTogCitZb3Ugc2hvdWxkIHNlZSA3IE9LcyBiZWxvdyAoYW5kIG5vdCBoYW5nKTog
CiBPSwogT0sKIE9LCiBPSwogT0sKIE9LCitPSwogCkluZGV4OiBMYXlvdXRUZXN0cy9lZGl0aW5n
L3NlbGVjdGlvbi9zZWxlY3Rpb24taW52YWxpZC1vZmZzZXQuaHRtbAo9PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBM
YXlvdXRUZXN0cy9lZGl0aW5nL3NlbGVjdGlvbi9zZWxlY3Rpb24taW52YWxpZC1vZmZzZXQuaHRt
bAkocmV2aXNpb24gMTczOTA1KQorKysgTGF5b3V0VGVzdHMvZWRpdGluZy9zZWxlY3Rpb24vc2Vs
ZWN0aW9uLWludmFsaWQtb2Zmc2V0Lmh0bWwJKHdvcmtpbmcgY29weSkKQEAgLTEsNSArMSw1IEBA
CiA8Ym9keT4KLVlvdSBzaG91bGQgc2VlIHNpeCBPS3MgYmVsb3cgKGFuZCBub3QgaGFuZyk6IDxi
cj4KK1lvdSBzaG91bGQgc2VlIDcgT0tzIGJlbG93IChhbmQgbm90IGhhbmcpOiA8YnI+CiA8c2Ny
aXB0PgogaWYgKHdpbmRvdy50ZXN0UnVubmVyKQogICAgIHRlc3RSdW5uZXIuZHVtcEFzVGV4dCgp
OwpAQCAtMzAsNyArMzAsOSBAQAogfSBjYXRjaCAoZSkge2RvY3VtZW50LndyaXRlKCgoZS5jb2Rl
PT1ET01FeGNlcHRpb24uSU5ERVhfU0laRV9FUlIpID8gIk9LIiA6ICJGQUlMIikrIjxicj4iKTsg
fQogCiAvLyB0aGVzZSBzaG91bGQgdGhyb3cgYXMgd2VsbCBidXQgZG9uJ3QgYXQgdGhlIG1vbWVu
dC4gSnVzdCBjaGVja2luZyB0aGV5IGRvbid0IGNyYXNoLiAKLXNlbGVjdGlvbi5jb2xsYXBzZShi
b2R5LCAxMDAwMCk7Cit0cnkgeworICBzZWxlY3Rpb24uY29sbGFwc2UoYm9keSwgMTAwMDApOwor
fSBjYXRjaCAoZSkge2RvY3VtZW50LndyaXRlKCgoZS5jb2RlPT1ET01FeGNlcHRpb24uSU5ERVhf
U0laRV9FUlIpID8gIk9LIiA6ICJGQUlMIikrIjxicj4iKTsgfQogc2VsZWN0aW9uLnNldEJhc2VB
bmRFeHRlbnQoYm9keSwgMTAwMCwgYm9keSwgMCk7CiBzZWxlY3Rpb24uc2V0QmFzZUFuZEV4dGVu
dChib2R5LCAwLCBib2R5LCAxMDAwMCk7CiBzZWxlY3Rpb24uc2V0UG9zaXRpb24oYm9keSwgMTAw
MDApOwpJbmRleDogTGF5b3V0VGVzdHMvZmFzdC9jc3MvY291bnRlcnMvY291bnRlci1iZWZvcmUt
Y29udGVudC1ub3QtaW5jcmVtZW50ZWQuaHRtbAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBMYXlvdXRUZXN0cy9m
YXN0L2Nzcy9jb3VudGVycy9jb3VudGVyLWJlZm9yZS1jb250ZW50LW5vdC1pbmNyZW1lbnRlZC5o
dG1sCShyZXZpc2lvbiAxNzM5MDUpCisrKyBMYXlvdXRUZXN0cy9mYXN0L2Nzcy9jb3VudGVycy9j
b3VudGVyLWJlZm9yZS1jb250ZW50LW5vdC1pbmNyZW1lbnRlZC5odG1sCSh3b3JraW5nIGNvcHkp
CkBAIC0yNiw3ICsyNiw4IEBACiAgICAgICAgICAgICAvLyBXZSBuZWVkIHRvIHVzZSB0aGUgc2Vs
ZWN0aW9uIG9yIHdlIGNhbm5vdCByZXByb2R1Y2UgdGhpcyBidWchCiAgICAgICAgICAgICB2YXIg
c2VsZWN0aW9uID0gd2luZG93LmdldFNlbGVjdGlvbigpOwogICAgICAgICAgICAgdmFyIGNvbnRh
aW5lciA9IGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKCJjb250YWluZXIiKTsKLSAgICAgICAgICAg
IHNlbGVjdGlvbi5zZXRQb3NpdGlvbihjb250YWluZXIsIDApOworICAgICAgICAgICAgLy8gc2Vs
ZWN0aW9uLnNldFBvc2l0aW9uKGNvbnRhaW5lciwgMCk7CisgICAgICAgICAgICBzZWxlY3Rpb24u
Y29sbGFwc2UoY29udGFpbmVyLmZpcnN0Q2hpbGQsIDApOwogICAgICAgICAgICAgaWYgKHNlbGVj
dGlvbi5yYW5nZUNvdW50ID4gMCkgewogICAgICAgICAgICAgICAgIHZhciBuZXdFbGVtZW50ID0g
ZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgnZGl2Jyk7CiAgICAgICAgICAgICAgICAgbmV3RWxlbWVu
dC5pZCA9ICdkaXYnICsgaTsKSW5kZXg6IExheW91dFRlc3RzL2Zhc3QvZG9tL1JhbmdlL3Jhbmdl
LXNlbGVjdGlvbi1hY3Jvc3MtZG9jdW1lbnRzLWNyYXNoLWV4cGVjdGVkLnR4dAo9PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
Ci0tLSBMYXlvdXRUZXN0cy9mYXN0L2RvbS9SYW5nZS9yYW5nZS1zZWxlY3Rpb24tYWNyb3NzLWRv
Y3VtZW50cy1jcmFzaC1leHBlY3RlZC50eHQJKHJldmlzaW9uIDE3MzkwNSkKKysrIExheW91dFRl
c3RzL2Zhc3QvZG9tL1JhbmdlL3JhbmdlLXNlbGVjdGlvbi1hY3Jvc3MtZG9jdW1lbnRzLWNyYXNo
LWV4cGVjdGVkLnR4dAkod29ya2luZyBjb3B5KQpAQCAtMSArMSwyIEBACitDT05TT0xFIEVSUk9S
OiBsaW5lIDI1OiBUaGUgZ2l2ZW4gcmFuZ2UgZG9lcyBub3QgYmVsb25nIHRvIHRoZSBjdXJyZW50
IHNlbGVjdGlvbidzIGRvY3VtZW50LgogVGVzdCBwYXNzZXMgaWYgaXQgZG9lcyBub3QgY3Jhc2gu
IApJbmRleDogU291cmNlL1dlYkNvcmUvV2ViQ29yZS5leHAuaW4KPT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291
cmNlL1dlYkNvcmUvV2ViQ29yZS5leHAuaW4JKHJldmlzaW9uIDE3MzkwNSkKKysrIFNvdXJjZS9X
ZWJDb3JlL1dlYkNvcmUuZXhwLmluCSh3b3JraW5nIGNvcHkpCkBAIC0zNTksMTAgKzM1OSwxMSBA
QAogX19aTjdXZWJDb3JlMTREb2N1bWVudFdyaXRlcjExc2V0RW5jb2RpbmdFUktOM1dURjZTdHJp
bmdFYgogX19aTjdXZWJDb3JlMTRGaWxlSWNvbkxvYWRlcjE0bm90aWZ5RmluaXNoZWRFTjNXVEYx
MFBhc3NSZWZQdHJJTlNfNEljb25FRUUKIF9fWk43V2ViQ29yZTE0Rm9ybUNvbnRyb2xsZXIyMmdl
dFJlZmVyZW5jZWRGaWxlUGF0aHNFUktOM1dURjZWZWN0b3JJTlMxXzZTdHJpbmdFTG0wRU5TMV8x
NUNyYXNoT25PdmVyZmxvd0VFRQorX19aTjdXZWJDb3JlMTRGcmFtZVNlbGVjdGlvbkQxRXYKIF9f
Wk43V2ViQ29yZTE0RnJhbWVTZWxlY3Rpb24xMHNldEZvY3VzZWRFYgogX19aTjdXZWJDb3JlMTRG
cmFtZVNlbGVjdGlvbjEyc2V0U2VsZWN0aW9uRVJLTlNfMTZWaXNpYmxlU2VsZWN0aW9uRWpOUzBf
MTlDdXJzb3JBbGlnbk9uU2Nyb2xsRU5TXzE1VGV4dEdyYW51bGFyaXR5RQogX19aTjdXZWJDb3Jl
MTRGcmFtZVNlbGVjdGlvbjE1cmV2ZWFsU2VsZWN0aW9uRVJLTlNfMTVTY3JvbGxBbGlnbm1lbnRF
TlNfMThSZXZlYWxFeHRlbnRPcHRpb25FCi1fX1pON1dlYkNvcmUxNEZyYW1lU2VsZWN0aW9uMTZz
ZXRTZWxlY3RlZFJhbmdlRVBOU181UmFuZ2VFTlNfOUVBZmZpbml0eUViCitfX1pON1dlYkNvcmUx
NEZyYW1lU2VsZWN0aW9uMTZzZXRTZWxlY3RlZFJhbmdlRVBOU181UmFuZ2VFTlNfOUVBZmZpbml0
eUViagogX19aTjdXZWJDb3JlMTRGcmFtZVNlbGVjdGlvbjE5YWJzb2x1dGVDYXJldEJvdW5kc0V2
CiBfX1pON1dlYkNvcmUxNEZyYW1lU2VsZWN0aW9uMjBzZXRTZWxlY3Rpb25Gcm9tTm9uZUV2CiBf
X1pON1dlYkNvcmUxNEZyYW1lU2VsZWN0aW9uNWNsZWFyRXYKQEAgLTcyNCw2ICs3MjUsOCBAQAog
X19aTjdXZWJDb3JlMTZUaHJlYWRHbG9iYWxEYXRhMTBzdGF0aWNEYXRhRQogX19aTjdXZWJDb3Jl
MTZUaHJlYWRHbG9iYWxEYXRhQzFFdgogX19aTjdXZWJDb3JlMTZUaHJlYWRHbG9iYWxEYXRhRDFF
dgorX19aTjdXZWJDb3JlMTZWaXNpYmxlU2VsZWN0aW9uQzFFUktTMF8KK19fWk43V2ViQ29yZTE2
VmlzaWJsZVNlbGVjdGlvbkQxRXYKIF9fWk43V2ViQ29yZTE2VmlzaWJsZVNlbGVjdGlvbjIyZXhw
YW5kVXNpbmdHcmFudWxhcml0eUVOU18xNVRleHRHcmFudWxhcml0eUUKIF9fWk43V2ViQ29yZTE2
VmlzaWJsZVNlbGVjdGlvbkMxRVBLTlNfNVJhbmdlRU5TXzlFQWZmaW5pdHlFYgogX19aTjdXZWJD
b3JlMTZWaXNpYmxlU2VsZWN0aW9uQzFFUktOU18xNVZpc2libGVQb3NpdGlvbkVTM19iCkluZGV4
OiBTb3VyY2UvV2ViQ29yZS9hY2Nlc3NpYmlsaXR5L0FjY2Vzc2liaWxpdHlPYmplY3QuY3BwCj09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL2FjY2Vzc2liaWxpdHkvQWNjZXNzaWJpbGl0eU9i
amVjdC5jcHAJKHJldmlzaW9uIDE3MzkwNSkKKysrIFNvdXJjZS9XZWJDb3JlL2FjY2Vzc2liaWxp
dHkvQWNjZXNzaWJpbGl0eU9iamVjdC5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTY0Niw3ICs2NDYs
NyBAQAogICAgIGlmIChSZWZQdHI8UmFuZ2U+IGNsb3Nlc3RTdHJpbmdSYW5nZSA9IHJhbmdlQ2xv
c2VzdFRvUmFuZ2Uoc2VsZWN0ZWRTdHJpbmdSYW5nZS5nZXQoKSwgY2xvc2VzdEFmdGVyU3RyaW5n
UmFuZ2UsIGNsb3Nlc3RCZWZvcmVTdHJpbmdSYW5nZSkpIHsKICAgICAgICAgU3RyaW5nIGNsb3Nl
c3RTdHJpbmcgPSBjbG9zZXN0U3RyaW5nUmFuZ2UtPnRleHQoKTsKICAgICAgICAgYm9vbCByZXBs
YWNlU2VsZWN0aW9uID0gZmFsc2U7Ci0gICAgICAgIGlmIChmcmFtZS0+c2VsZWN0aW9uKCkuc2V0
U2VsZWN0ZWRSYW5nZShjbG9zZXN0U3RyaW5nUmFuZ2UuZ2V0KCksIERPV05TVFJFQU0sIHRydWUp
KSB7CisgICAgICAgIGlmIChmcmFtZS0+c2VsZWN0aW9uKCkuc2V0U2VsZWN0ZWRSYW5nZShjbG9z
ZXN0U3RyaW5nUmFuZ2UuZ2V0KCksIERPV05TVFJFQU0sIGZhbHNlLCB0cnVlKSkgewogICAgICAg
ICAgICAgc3dpdGNoIChhY3Rpdml0eSkgewogICAgICAgICAgICAgY2FzZSBGaW5kQW5kQ2FwaXRh
bGl6ZTogewogICAgICAgICAgICAgICAgIHJlcGxhY2VtZW50U3RyaW5nID0gY2xvc2VzdFN0cmlu
ZzsKSW5kZXg6IFNvdXJjZS9XZWJDb3JlL2VkaXRpbmcvRWRpdG9yLmNwcAo9PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0t
LSBTb3VyY2UvV2ViQ29yZS9lZGl0aW5nL0VkaXRvci5jcHAJKHJldmlzaW9uIDE3MzkwNSkKKysr
IFNvdXJjZS9XZWJDb3JlL2VkaXRpbmcvRWRpdG9yLmNwcAkod29ya2luZyBjb3B5KQpAQCAtMTg4
MSw3ICsxODgxLDcgQEAKICAgICAgICAgICAgIHVuc2lnbmVkIHN0YXJ0ID0gc3RkOjptaW4oYmFz
ZU9mZnNldCArIHNlbGVjdGlvblN0YXJ0LCBleHRlbnRPZmZzZXQpOwogICAgICAgICAgICAgdW5z
aWduZWQgZW5kID0gc3RkOjptaW4oc3RkOjptYXgoc3RhcnQsIGJhc2VPZmZzZXQgKyBzZWxlY3Rp
b25FbmQpLCBleHRlbnRPZmZzZXQpOwogICAgICAgICAgICAgUmVmUHRyPFJhbmdlPiBzZWxlY3Rl
ZFJhbmdlID0gUmFuZ2U6OmNyZWF0ZShiYXNlTm9kZS0+ZG9jdW1lbnQoKSwgYmFzZU5vZGUsIHN0
YXJ0LCBiYXNlTm9kZSwgZW5kKTsKLSAgICAgICAgICAgIG1fZnJhbWUuc2VsZWN0aW9uKCkuc2V0
U2VsZWN0ZWRSYW5nZShzZWxlY3RlZFJhbmdlLmdldCgpLCBET1dOU1RSRUFNLCBmYWxzZSk7Cisg
ICAgICAgICAgICBtX2ZyYW1lLnNlbGVjdGlvbigpLnNldFNlbGVjdGVkUmFuZ2Uoc2VsZWN0ZWRS
YW5nZS5nZXQoKSwgRE9XTlNUUkVBTSwgZmFsc2UsIGZhbHNlKTsKICAgICAgICAgfQogICAgIH0K
IApJbmRleDogU291cmNlL1dlYkNvcmUvZWRpdGluZy9FZGl0b3JDb21tYW5kLmNwcAo9PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9lZGl0aW5nL0VkaXRvckNvbW1hbmQuY3BwCShyZXZpc2lv
biAxNzM5MDUpCisrKyBTb3VyY2UvV2ViQ29yZS9lZGl0aW5nL0VkaXRvckNvbW1hbmQuY3BwCSh3
b3JraW5nIGNvcHkpCkBAIC0yMTksNyArMjE5LDcgQEAKICAgICBFQWZmaW5pdHkgYWZmaW5pdHkg
PSBzZWxlY3Rpb24uYWZmaW5pdHkoKTsKICAgICBpZiAoIWZyYW1lLmVkaXRvcigpLmNsaWVudCgp
LT5zaG91bGRDaGFuZ2VTZWxlY3RlZFJhbmdlKG9sZFJhbmdlLmdldCgpLCBuZXdSYW5nZS5nZXQo
KSwgYWZmaW5pdHksIGZhbHNlKSkKICAgICAgICAgcmV0dXJuIGZhbHNlOwotICAgIGZyYW1lLnNl
bGVjdGlvbigpLnNldFNlbGVjdGVkUmFuZ2UobmV3UmFuZ2UuZ2V0KCksIGFmZmluaXR5LCB0cnVl
KTsKKyAgICBmcmFtZS5zZWxlY3Rpb24oKS5zZXRTZWxlY3RlZFJhbmdlKG5ld1JhbmdlLmdldCgp
LCBhZmZpbml0eSwgZmFsc2UsIEZyYW1lU2VsZWN0aW9uOjpDbG9zZVR5cGluZyk7CiAgICAgcmV0
dXJuIHRydWU7CiB9CiAKQEAgLTM5MCw3ICszOTAsNyBAQAogICAgIFJlZlB0cjxSYW5nZT4gbWFy
ayA9IGZyYW1lLmVkaXRvcigpLm1hcmsoKS50b05vcm1hbGl6ZWRSYW5nZSgpOwogICAgIEZyYW1l
U2VsZWN0aW9uJiBzZWxlY3Rpb24gPSBmcmFtZS5zZWxlY3Rpb24oKTsKICAgICBpZiAobWFyaykg
ewotICAgICAgICBib29sIHNlbGVjdGVkID0gc2VsZWN0aW9uLnNldFNlbGVjdGVkUmFuZ2UodW5p
b25ET01SYW5nZXMobWFyay5nZXQoKSwgZnJhbWUuZWRpdG9yKCkuc2VsZWN0ZWRSYW5nZSgpLmdl
dCgpKS5nZXQoKSwgRE9XTlNUUkVBTSwgdHJ1ZSk7CisJYm9vbCBzZWxlY3RlZCA9IGZyYW1lLnNl
bGVjdGlvbigpLnNldFNlbGVjdGVkUmFuZ2UodW5pb25ET01SYW5nZXMobWFyay5nZXQoKSwgZnJh
bWUuZWRpdG9yKCkuc2VsZWN0ZWRSYW5nZSgpLmdldCgpKS5nZXQoKSwgRE9XTlNUUkVBTSwgZmFs
c2UsIEZyYW1lU2VsZWN0aW9uOjpDbG9zZVR5cGluZyk7CiAgICAgICAgIEFTU0VSVChzZWxlY3Rl
ZCk7CiAgICAgICAgIGlmICghc2VsZWN0ZWQpCiAgICAgICAgICAgICByZXR1cm4gZmFsc2U7CkBA
IC0xMDQzLDcgKzEwNDMsOCBAQAogICAgICAgICBzeXN0ZW1CZWVwKCk7CiAgICAgICAgIHJldHVy
biBmYWxzZTsKICAgICB9Ci0gICAgZnJhbWUuc2VsZWN0aW9uKCkuc2V0U2VsZWN0ZWRSYW5nZSh1
bmlvbkRPTVJhbmdlcyhtYXJrLmdldCgpLCBzZWxlY3Rpb24uZ2V0KCkpLmdldCgpLCBET1dOU1RS
RUFNLCB0cnVlKTsKKyAgICBmcmFtZS5zZWxlY3Rpb24oKS5zZXRTZWxlY3RlZFJhbmdlKHVuaW9u
RE9NUmFuZ2VzKG1hcmsuZ2V0KCksIHNlbGVjdGlvbi5nZXQoKSkuZ2V0KCksIERPV05TVFJFQU0s
IGZhbHNlLCBGcmFtZVNlbGVjdGlvbjo6Q2xvc2VUeXBpbmcpOworCiAgICAgcmV0dXJuIHRydWU7
CiB9CiAKSW5kZXg6IFNvdXJjZS9XZWJDb3JlL2VkaXRpbmcvRnJhbWVTZWxlY3Rpb24uY3BwCj09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL2VkaXRpbmcvRnJhbWVTZWxlY3Rpb24uY3BwCShy
ZXZpc2lvbiAxNzM5MDUpCisrKyBTb3VyY2UvV2ViQ29yZS9lZGl0aW5nL0ZyYW1lU2VsZWN0aW9u
LmNwcAkod29ya2luZyBjb3B5KQpAQCAtMTEwLDYgKzExMCw3IEBACiBGcmFtZVNlbGVjdGlvbjo6
RnJhbWVTZWxlY3Rpb24oRnJhbWUqIGZyYW1lKQogICAgIDogbV9mcmFtZShmcmFtZSkKICAgICAs
IG1feFBvc0ZvclZlcnRpY2FsQXJyb3dOYXZpZ2F0aW9uKE5vWFBvc0ZvclZlcnRpY2FsQXJyb3dO
YXZpZ2F0aW9uKCkpCisgICAgLCBtX29ic2VydmluZ1Zpc2libGVTZWxlY3Rpb24oZmFsc2UpCiAg
ICAgLCBtX2dyYW51bGFyaXR5KENoYXJhY3RlckdyYW51bGFyaXR5KQogICAgICwgbV9jYXJldEJs
aW5rVGltZXIodGhpcywgJkZyYW1lU2VsZWN0aW9uOjpjYXJldEJsaW5rVGltZXJGaXJlZCkKICAg
ICAsIG1fYWJzQ2FyZXRCb3VuZHNEaXJ0eSh0cnVlKQpAQCAtMTMwLDYgKzEzMSwxMSBAQAogICAg
ICAgICBtX3NlbGVjdGlvbi5zZXRJc0RpcmVjdGlvbmFsKHRydWUpOwogfQogCitGcmFtZVNlbGVj
dGlvbjo6fkZyYW1lU2VsZWN0aW9uKCkKK3sKKyAgICBzdG9wT2JzZXJ2aW5nVmlzaWJsZVNlbGVj
dGlvbkNoYW5nZUlmTmVjZXNzYXJ5KCk7Cit9CisKIEVsZW1lbnQqIEZyYW1lU2VsZWN0aW9uOjpy
b290RWRpdGFibGVFbGVtZW50T3JEb2N1bWVudEVsZW1lbnQoKSBjb25zdAogewogICAgIEVsZW1l
bnQqIHNlbGVjdGlvblJvb3QgPSBtX3NlbGVjdGlvbi5yb290RWRpdGFibGVFbGVtZW50KCk7CkBA
IC0xNzE1LDI0ICsxNzIxLDQ1IEBACiAgICAgICAgIHNldFNlbGVjdGlvbihuZXdTZWxlY3Rpb24s
IGRlZmF1bHRTZXRTZWxlY3Rpb25PcHRpb25zKCkgfCBGaXJlU2VsZWN0RXZlbnQpOwogfQogCi1i
b29sIEZyYW1lU2VsZWN0aW9uOjpzZXRTZWxlY3RlZFJhbmdlKFJhbmdlKiByYW5nZSwgRUFmZmlu
aXR5IGFmZmluaXR5LCBib29sIGNsb3NlVHlwaW5nKQorYm9vbCBGcmFtZVNlbGVjdGlvbjo6c2V0
U2VsZWN0ZWRSYW5nZShSYW5nZSogcmFuZ2UsIEVBZmZpbml0eSBhZmZpbml0eSwgYm9vbCBpc0Rp
cmVjdGlvbmFsLCBTZXRTZWxlY3Rpb25PcHRpb25zIG9wdGlvbnMpCiB7CiAgICAgaWYgKCFyYW5n
ZSB8fCAhcmFuZ2UtPnN0YXJ0Q29udGFpbmVyKCkgfHwgIXJhbmdlLT5lbmRDb250YWluZXIoKSkK
ICAgICAgICAgcmV0dXJuIGZhbHNlOwogICAgIEFTU0VSVCgmcmFuZ2UtPnN0YXJ0Q29udGFpbmVy
KCktPmRvY3VtZW50KCkgPT0gJnJhbmdlLT5lbmRDb250YWluZXIoKS0+ZG9jdW1lbnQoKSk7CiAK
LSAgICBWaXNpYmxlU2VsZWN0aW9uIG5ld1NlbGVjdGlvbihyYW5nZSwgYWZmaW5pdHkpOworICAg
IEV4Y2VwdGlvbkNvZGUgZWMgPSAwOworICAgIGJvb2wgY29sbGFwc2VkID0gcmFuZ2UtPmNvbGxh
cHNlZChlYyk7CisgICAgaWYgKGVjKQorICAgICAgICByZXR1cm4gZmFsc2U7CiAKKyAgICBWaXNp
YmxlU2VsZWN0aW9uIG5ld1NlbGVjdGlvbihyYW5nZSwgY29sbGFwc2VkID8gYWZmaW5pdHkgOiBE
T1dOU1RSRUFNLCBpc0RpcmVjdGlvbmFsKTsKKwogI2lmIFBMQVRGT1JNKElPUykKICAgICAvLyBG
SVhNRTogV2h5IGRvIHdlIG5lZWQgdGhpcyBjaGVjayBvbmx5IGluIGlPUz8KICAgICBpZiAocmFu
Z2UtPnN0YXJ0Q29udGFpbmVyKCkgJiYgcmFuZ2UtPmVuZENvbnRhaW5lcigpICYmIG5ld1NlbGVj
dGlvbi5pc05vbmUoKSkKICAgICAgICAgcmV0dXJuIGZhbHNlOwogI2VuZGlmCiAKLSAgICBzZXRT
ZWxlY3Rpb24obmV3U2VsZWN0aW9uLCBDbGVhclR5cGluZ1N0eWxlIHwgKGNsb3NlVHlwaW5nID8g
Q2xvc2VUeXBpbmcgOiAwKSk7CisgICAgbV9sb2dpY2FsUmFuZ2UgPSBudWxscHRyOworICAgIHN0
b3BPYnNlcnZpbmdWaXNpYmxlU2VsZWN0aW9uQ2hhbmdlSWZOZWNlc3NhcnkoKTsKKworICAgIC8v
IHNldFNlbGVjdGlvbihuZXdTZWxlY3Rpb24sIENsZWFyVHlwaW5nU3R5bGUgfCAoY2xvc2VUeXBp
bmcgPyBDbG9zZVR5cGluZyA6IDApKTsKKworICAgIHNldFNlbGVjdGlvbihuZXdTZWxlY3Rpb24s
IG9wdGlvbnMpOworCisgICAgbV9sb2dpY2FsUmFuZ2UgPSByYW5nZS0+Y2xvbmVSYW5nZShBU1NF
UlRfTk9fRVhDRVBUSU9OKTsKKyAgICBzdGFydE9ic2VydmluZ1Zpc2libGVTZWxlY3Rpb25DaGFu
Z2UoKTsKKwogICAgIHJldHVybiB0cnVlOwogfQogCitQYXNzUmVmUHRyPFJhbmdlPiBGcmFtZVNl
bGVjdGlvbjo6Zmlyc3RSYW5nZSgpIGNvbnN0Cit7CisgICAgaWYgKG1fbG9naWNhbFJhbmdlKQor
ICAgICAgICByZXR1cm4gbV9sb2dpY2FsUmFuZ2UtPmNsb25lUmFuZ2UoQVNTRVJUX05PX0VYQ0VQ
VElPTik7CisgICAgcmV0dXJuIG1fc2VsZWN0aW9uLmZpcnN0UmFuZ2UoKTsKK30KKwogdm9pZCBG
cmFtZVNlbGVjdGlvbjo6Zm9jdXNlZE9yQWN0aXZlU3RhdGVDaGFuZ2VkKCkKIHsKICAgICBib29s
IGFjdGl2ZUFuZEZvY3VzZWQgPSBpc0ZvY3VzZWRBbmRBY3RpdmUoKTsKQEAgLTIxNTIsNiArMjE3
OSwzMCBAQAogICAgIHVwZGF0ZURhdGFEZXRlY3RvcnNGb3JTZWxlY3Rpb24oKTsKIH0KIAordm9p
ZCBGcmFtZVNlbGVjdGlvbjo6ZGlkQ2hhbmdlVmlzaWJsZVNlbGVjdGlvbigpCit7CisgICAgQVNT
RVJUKG1fb2JzZXJ2aW5nVmlzaWJsZVNlbGVjdGlvbik7CisgICAgLy8gSW52YWxpZGF0ZSB0aGUg
bG9naWNhbCByYW5nZSB3aGVuIHRoZSB1bmRlcmx5aW5nIFZpc2libGVTZWxlY3Rpb24gaGFzIGNo
YW5nZWQuCisgICAgbV9sb2dpY2FsUmFuZ2UgPSBudWxscHRyOworICAgIG1fc2VsZWN0aW9uLmNs
ZWFyQ2hhbmdlT2JzZXJ2ZXIoKTsKKyAgICBtX29ic2VydmluZ1Zpc2libGVTZWxlY3Rpb24gPSBm
YWxzZTsKK30KKwordm9pZCBGcmFtZVNlbGVjdGlvbjo6c3RhcnRPYnNlcnZpbmdWaXNpYmxlU2Vs
ZWN0aW9uQ2hhbmdlKCkKK3sKKyAgICBBU1NFUlQoIW1fb2JzZXJ2aW5nVmlzaWJsZVNlbGVjdGlv
bik7CisgICAgbV9zZWxlY3Rpb24uc2V0Q2hhbmdlT2JzZXJ2ZXIoKnRoaXMpOworICAgIG1fb2Jz
ZXJ2aW5nVmlzaWJsZVNlbGVjdGlvbiA9IHRydWU7Cit9CisKK3ZvaWQgRnJhbWVTZWxlY3Rpb246
OnN0b3BPYnNlcnZpbmdWaXNpYmxlU2VsZWN0aW9uQ2hhbmdlSWZOZWNlc3NhcnkoKQoreworICAg
IGlmIChtX29ic2VydmluZ1Zpc2libGVTZWxlY3Rpb24pIHsKKyAgICAgICAgbV9zZWxlY3Rpb24u
Y2xlYXJDaGFuZ2VPYnNlcnZlcigpOworICAgICAgICBtX29ic2VydmluZ1Zpc2libGVTZWxlY3Rp
b24gPSBmYWxzZTsKKyAgICB9Cit9CisKICNpZm5kZWYgTkRFQlVHCiAKIHZvaWQgRnJhbWVTZWxl
Y3Rpb246OmZvcm1hdEZvckRlYnVnZ2VyKGNoYXIqIGJ1ZmZlciwgdW5zaWduZWQgbGVuZ3RoKSBj
b25zdApJbmRleDogU291cmNlL1dlYkNvcmUvZWRpdGluZy9GcmFtZVNlbGVjdGlvbi5oCj09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL2VkaXRpbmcvRnJhbWVTZWxlY3Rpb24uaAkocmV2aXNp
b24gMTczOTA1KQorKysgU291cmNlL1dlYkNvcmUvZWRpdGluZy9GcmFtZVNlbGVjdGlvbi5oCSh3
b3JraW5nIGNvcHkpCkBAIC0xMDksNyArMTA5LDcgQEAKICAgICBWaXNpYmxlUG9zaXRpb24gbV9w
b3NpdGlvbjsKIH07CiAKLWNsYXNzIEZyYW1lU2VsZWN0aW9uIDogcHJpdmF0ZSBDYXJldEJhc2Ug
eworY2xhc3MgRnJhbWVTZWxlY3Rpb24gLyogRklOQUwgKi8gOiBwdWJsaWMgVmlzaWJsZVNlbGVj
dGlvbjo6Q2hhbmdlT2JzZXJ2ZXIsIHByaXZhdGUgQ2FyZXRCYXNlIHsKICAgICBXVEZfTUFLRV9O
T05DT1BZQUJMRShGcmFtZVNlbGVjdGlvbik7CiAgICAgV1RGX01BS0VfRkFTVF9BTExPQ0FURUQ7
CiBwdWJsaWM6CkBAIC0xMzIsNiArMTMyLDcgQEAKICAgICB9CiAKICAgICBXRUJDT1JFX0VYUE9S
VCBleHBsaWNpdCBGcmFtZVNlbGVjdGlvbihGcmFtZSogPSBudWxscHRyKTsKKyAgICBXRUJDT1JF
X0VYUE9SVCB2aXJ0dWFsIH5GcmFtZVNlbGVjdGlvbigpOwogCiAgICAgV0VCQ09SRV9FWFBPUlQg
RWxlbWVudCogcm9vdEVkaXRhYmxlRWxlbWVudE9yRG9jdW1lbnRFbGVtZW50KCkgY29uc3Q7CiAg
ICAgIApAQCAtMTQ0LDcgKzE0NSwxMCBAQAogCiAgICAgY29uc3QgVmlzaWJsZVNlbGVjdGlvbiYg
c2VsZWN0aW9uKCkgY29uc3QgeyByZXR1cm4gbV9zZWxlY3Rpb247IH0KICAgICBXRUJDT1JFX0VY
UE9SVCB2b2lkIHNldFNlbGVjdGlvbihjb25zdCBWaXNpYmxlU2VsZWN0aW9uJiwgU2V0U2VsZWN0
aW9uT3B0aW9ucyA9IGRlZmF1bHRTZXRTZWxlY3Rpb25PcHRpb25zKCksIEN1cnNvckFsaWduT25T
Y3JvbGwgPSBBbGlnbkN1cnNvck9uU2Nyb2xsSWZOZWVkZWQsIFRleHRHcmFudWxhcml0eSA9IENo
YXJhY3RlckdyYW51bGFyaXR5KTsKLSAgICBXRUJDT1JFX0VYUE9SVCBib29sIHNldFNlbGVjdGVk
UmFuZ2UoUmFuZ2UqLCBFQWZmaW5pdHksIGJvb2wgY2xvc2VUeXBpbmcpOworICAgIAorICAgIC8v
IFdFQkNPUkVfRVhQT1JUIGJvb2wgc2V0U2VsZWN0ZWRSYW5nZShSYW5nZSosIEVBZmZpbml0eSwg
Ym9vbCBpc0RpcmVjdGlvbmFsLCBib29sIGNsb3NlVHlwaW5nKTsKKyAgICBXRUJDT1JFX0VYUE9S
VCBib29sIHNldFNlbGVjdGVkUmFuZ2UoUmFuZ2UqLCBFQWZmaW5pdHksIGJvb2wgaXNEaXJlY3Rp
b25hbCwgU2V0U2VsZWN0aW9uT3B0aW9ucyA9IENsb3NlVHlwaW5nIHwgQ2xlYXJUeXBpbmdTdHls
ZSk7CisgICAgCiAgICAgV0VCQ09SRV9FWFBPUlQgdm9pZCBzZWxlY3RBbGwoKTsKICAgICBXRUJD
T1JFX0VYUE9SVCB2b2lkIGNsZWFyKCk7CiAgICAgdm9pZCBwcmVwYXJlRm9yRGVzdHJ1Y3Rpb24o
KTsKQEAgLTE4Miw3ICsxODYsMTIgQEAKICAgICBib29sIGlzUmFuZ2UoKSBjb25zdCB7IHJldHVy
biBtX3NlbGVjdGlvbi5pc1JhbmdlKCk7IH0KICAgICBib29sIGlzQ2FyZXRPclJhbmdlKCkgY29u
c3QgeyByZXR1cm4gbV9zZWxlY3Rpb24uaXNDYXJldE9yUmFuZ2UoKTsgfQogICAgIGJvb2wgaXNB
bGwoRWRpdGluZ0JvdW5kYXJ5Q3Jvc3NpbmdSdWxlIHJ1bGUgPSBDYW5ub3RDcm9zc0VkaXRpbmdC
b3VuZGFyeSkgY29uc3QgeyByZXR1cm4gbV9zZWxlY3Rpb24uaXNBbGwocnVsZSk7IH0KKyAgICBi
b29sIGlzRGlyZWN0aW9uYWwoKSBjb25zdCB7IHJldHVybiBtX3NlbGVjdGlvbi5pc0RpcmVjdGlv
bmFsKCk7IH0KICAgICAKKyAgICAvLyBJZiB0aGlzIEZyYW1lU2VsZWN0aW9uIGhhcyBhIGxvZ2lj
YWwgcmFuZ2Ugd2hpY2ggaXMgc3RpbGwgdmFsaWQsIHRoaXMgZnVuY3Rpb24gcmV0dXJuIGl0cyBj
bG9uZS4gT3RoZXJ3aXNlLAorICAgIC8vIHRoZSByZXR1cm4gdmFsdWUgZnJvbSB1bmRlcmx5aW5n
IFZpc2libGVTZWxlY3Rpb24ncyBmaXJzdFJhbmdlKCkgaXMgcmV0dXJuZWQuCisgICAgUGFzc1Jl
ZlB0cjxSYW5nZT4gZmlyc3RSYW5nZSgpIGNvbnN0OworCiAgICAgUGFzc1JlZlB0cjxSYW5nZT4g
dG9Ob3JtYWxpemVkUmFuZ2UoKSBjb25zdCB7IHJldHVybiBtX3NlbGVjdGlvbi50b05vcm1hbGl6
ZWRSYW5nZSgpOyB9CiAKICAgICB2b2lkIGRlYnVnUmVuZGVyZXIoUmVuZGVyT2JqZWN0KiwgYm9v
bCBzZWxlY3RlZCkgY29uc3Q7CkBAIC0yNjgsNiArMjc3LDkgQEAKICAgICBib29sIHNob3VsZFNo
b3dCbG9ja0N1cnNvcigpIGNvbnN0IHsgcmV0dXJuIG1fc2hvdWxkU2hvd0Jsb2NrQ3Vyc29yOyB9
CiAgICAgdm9pZCBzZXRTaG91bGRTaG93QmxvY2tDdXJzb3IoYm9vbCk7CiAKKyAgICAvLyBWaXNp
YmxlU2VsZWN0aW9uOjpDaGFuZ2VPYnNlcnZlciBpbnRlcmZhY2UuCisgICAgdmlydHVhbCB2b2lk
IGRpZENoYW5nZVZpc2libGVTZWxlY3Rpb24oKSAvKiBPVkVSUklERSAqLyA7CisKIHByaXZhdGU6
CiAgICAgZW51bSBFUG9zaXRpb25UeXBlIHsgU1RBUlQsIEVORCwgQkFTRSwgRVhURU5UIH07CiAK
QEAgLTMxNywxNCArMzI5LDIzIEBACiAKICAgICBib29sIGRpc3BhdGNoU2VsZWN0U3RhcnQoKTsK
IAorICAgIHZvaWQgc3RhcnRPYnNlcnZpbmdWaXNpYmxlU2VsZWN0aW9uQ2hhbmdlKCk7CisgICAg
dm9pZCBzdG9wT2JzZXJ2aW5nVmlzaWJsZVNlbGVjdGlvbkNoYW5nZUlmTmVjZXNzYXJ5KCk7CisK
ICAgICBGcmFtZSogbV9mcmFtZTsKIAogICAgIExheW91dFVuaXQgbV94UG9zRm9yVmVydGljYWxB
cnJvd05hdmlnYXRpb247CiAKICAgICBWaXNpYmxlU2VsZWN0aW9uIG1fc2VsZWN0aW9uOworICAg
IGJvb2wgbV9vYnNlcnZpbmdWaXNpYmxlU2VsZWN0aW9uOwogICAgIFZpc2libGVQb3NpdGlvbiBt
X29yaWdpbmFsQmFzZTsgLy8gVXNlZCB0byBzdG9yZSBiYXNlIGJlZm9yZSB0aGUgYWRqdXN0bWVu
dCBhdCBiaWRpIGJvdW5kYXJ5CiAgICAgVGV4dEdyYW51bGFyaXR5IG1fZ3JhbnVsYXJpdHk7CiAK
KyAgICAvLyBUaGUgcmFuZ2Ugc3BlY2lmaWVkIGJ5IHRoZSB1c2VyLCB3aGljaCBtYXkgbm90IGJl
IHZpc3VhbGx5IGNhbm9uaWNhbGl6ZWQgKGhlbmNlICJsb2dpY2FsIikuCisgICAgLy8gVGhpcyB3
aWxsIGJlIGludmFsaWRhdGVkIGlmIHRoZSB1bmRlcmx5aW5nIFZpc2libGVTZWxlY3Rpb24gY2hh
bmdlcy4gSWYgdGhhdCBoYXBwZW5zLCB0aGlzIHZhcmlhYmxlIHdpbGwKKyAgICAvLyBiZWNvbWUg
bnVsbCwgaW4gd2hpY2ggY2FzZSBsb2dpY2FsIHBvc2l0aW9ucyA9PSB2aXNpYmxlIHBvc2l0aW9u
cy4KKyAgICBSZWZQdHI8UmFuZ2U+IG1fbG9naWNhbFJhbmdlOworCiAgICAgUmVmUHRyPE5vZGU+
IG1fcHJldmlvdXNDYXJldE5vZGU7IC8vIFRoZSBsYXN0IG5vZGUgd2hpY2ggcGFpbnRlZCB0aGUg
Y2FyZXQuIFJldGFpbmVkIGZvciBjbGVhcmluZyB0aGUgb2xkIGNhcmV0IHdoZW4gaXQgbW92ZXMu
CiAKICAgICBSZWZQdHI8RWRpdGluZ1N0eWxlPiBtX3R5cGluZ1N0eWxlOwpJbmRleDogU291cmNl
L1dlYkNvcmUvZWRpdGluZy9WaXNpYmxlU2VsZWN0aW9uLmNwcAo9PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3Vy
Y2UvV2ViQ29yZS9lZGl0aW5nL1Zpc2libGVTZWxlY3Rpb24uY3BwCShyZXZpc2lvbiAxNzM5MDUp
CisrKyBTb3VyY2UvV2ViQ29yZS9lZGl0aW5nL1Zpc2libGVTZWxlY3Rpb24uY3BwCSh3b3JraW5n
IGNvcHkpCkBAIC00Miw2ICs0Miw3IEBACiAKIFZpc2libGVTZWxlY3Rpb246OlZpc2libGVTZWxl
Y3Rpb24oKQogICAgIDogbV9hZmZpbml0eShET1dOU1RSRUFNKQorICAgICwgbV9jaGFuZ2VPYnNl
cnZlcigwKQogICAgICwgbV9zZWxlY3Rpb25UeXBlKE5vU2VsZWN0aW9uKQogICAgICwgbV9iYXNl
SXNGaXJzdCh0cnVlKQogICAgICwgbV9pc0RpcmVjdGlvbmFsKGZhbHNlKQpAQCAtNTIsNiArNTMs
NyBAQAogICAgIDogbV9iYXNlKHBvcykKICAgICAsIG1fZXh0ZW50KHBvcykKICAgICAsIG1fYWZm
aW5pdHkoYWZmaW5pdHkpCisgICAgLCBtX2NoYW5nZU9ic2VydmVyKDApCiAgICAgLCBtX2lzRGly
ZWN0aW9uYWwoaXNEaXJlY3Rpb25hbCkKIHsKICAgICB2YWxpZGF0ZSgpOwpAQCAtNjEsNiArNjMs
NyBAQAogICAgIDogbV9iYXNlKGJhc2UpCiAgICAgLCBtX2V4dGVudChleHRlbnQpCiAgICAgLCBt
X2FmZmluaXR5KGFmZmluaXR5KQorICAgICwgbV9jaGFuZ2VPYnNlcnZlcigwKQogICAgICwgbV9p
c0RpcmVjdGlvbmFsKGlzRGlyZWN0aW9uYWwpCiB7CiAgICAgdmFsaWRhdGUoKTsKQEAgLTcwLDYg
KzczLDcgQEAKICAgICA6IG1fYmFzZShwb3MuZGVlcEVxdWl2YWxlbnQoKSkKICAgICAsIG1fZXh0
ZW50KHBvcy5kZWVwRXF1aXZhbGVudCgpKQogICAgICwgbV9hZmZpbml0eShwb3MuYWZmaW5pdHko
KSkKKyAgICAsIG1fY2hhbmdlT2JzZXJ2ZXIoMCkKICAgICAsIG1faXNEaXJlY3Rpb25hbChpc0Rp
cmVjdGlvbmFsKQogewogICAgIHZhbGlkYXRlKCk7CkBAIC03OSw2ICs4Myw3IEBACiAgICAgOiBt
X2Jhc2UoYmFzZS5kZWVwRXF1aXZhbGVudCgpKQogICAgICwgbV9leHRlbnQoZXh0ZW50LmRlZXBF
cXVpdmFsZW50KCkpCiAgICAgLCBtX2FmZmluaXR5KGJhc2UuYWZmaW5pdHkoKSkKKyAgICAsIG1f
Y2hhbmdlT2JzZXJ2ZXIoMCkKICAgICAsIG1faXNEaXJlY3Rpb25hbChpc0RpcmVjdGlvbmFsKQog
ewogICAgIHZhbGlkYXRlKCk7CkBAIC04OCwxMSArOTMsNDYgQEAKICAgICA6IG1fYmFzZShyYW5n
ZS0+c3RhcnRQb3NpdGlvbigpKQogICAgICwgbV9leHRlbnQocmFuZ2UtPmVuZFBvc2l0aW9uKCkp
CiAgICAgLCBtX2FmZmluaXR5KGFmZmluaXR5KQorICAgICwgbV9jaGFuZ2VPYnNlcnZlcigwKQog
ICAgICwgbV9pc0RpcmVjdGlvbmFsKGlzRGlyZWN0aW9uYWwpCiB7CiAgICAgdmFsaWRhdGUoKTsK
IH0KIAorVmlzaWJsZVNlbGVjdGlvbjo6VmlzaWJsZVNlbGVjdGlvbihjb25zdCBWaXNpYmxlU2Vs
ZWN0aW9uJiBvdGhlcikKKyAgICA6IG1fYmFzZShvdGhlci5tX2Jhc2UpCisgICAgLCBtX2V4dGVu
dChvdGhlci5tX2V4dGVudCkKKyAgICAsIG1fc3RhcnQob3RoZXIubV9zdGFydCkKKyAgICAsIG1f
ZW5kKG90aGVyLm1fZW5kKQorICAgICwgbV9hZmZpbml0eShvdGhlci5tX2FmZmluaXR5KQorICAg
ICwgbV9jaGFuZ2VPYnNlcnZlcigwKSAvLyBPYnNlcnZlciBpcyBhc3NvY2lhdGVkIHdpdGggb25s
eSBvbmUgVmlzaWJsZVNlbGVjdGlvbiwgc28gdGhpcyBzaG91bGQgbm90IGJlIGNvcGllZC4KKyAg
ICAsIG1fc2VsZWN0aW9uVHlwZShvdGhlci5tX3NlbGVjdGlvblR5cGUpCisgICAgLCBtX2Jhc2VJ
c0ZpcnN0KG90aGVyLm1fYmFzZUlzRmlyc3QpCisgICAgLCBtX2lzRGlyZWN0aW9uYWwob3RoZXIu
bV9pc0RpcmVjdGlvbmFsKQoreworfQorCitWaXNpYmxlU2VsZWN0aW9uJiBWaXNpYmxlU2VsZWN0
aW9uOjpvcGVyYXRvcj0oY29uc3QgVmlzaWJsZVNlbGVjdGlvbiYgb3RoZXIpCit7CisgICAgZGlk
Q2hhbmdlKCk7CisKKyAgICBtX2Jhc2UgPSBvdGhlci5tX2Jhc2U7CisgICAgbV9leHRlbnQgPSBv
dGhlci5tX2V4dGVudDsKKyAgICBtX3N0YXJ0ID0gb3RoZXIubV9zdGFydDsKKyAgICBtX2VuZCA9
IG90aGVyLm1fZW5kOworICAgIG1fYWZmaW5pdHkgPSBvdGhlci5tX2FmZmluaXR5OworICAgIG1f
Y2hhbmdlT2JzZXJ2ZXIgPSAwOworICAgIG1fc2VsZWN0aW9uVHlwZSA9IG90aGVyLm1fc2VsZWN0
aW9uVHlwZTsKKyAgICBtX2Jhc2VJc0ZpcnN0ID0gb3RoZXIubV9iYXNlSXNGaXJzdDsKKyAgICBt
X2lzRGlyZWN0aW9uYWwgPSBvdGhlci5tX2lzRGlyZWN0aW9uYWw7CisgICAgcmV0dXJuICp0aGlz
OworfQorCitWaXNpYmxlU2VsZWN0aW9uOjp+VmlzaWJsZVNlbGVjdGlvbigpCit7CisgICAgZGlk
Q2hhbmdlKCk7Cit9CisKIFZpc2libGVTZWxlY3Rpb24gVmlzaWJsZVNlbGVjdGlvbjo6c2VsZWN0
aW9uRnJvbUNvbnRlbnRzT2ZOb2RlKE5vZGUqIG5vZGUpCiB7CiAgICAgQVNTRVJUKCFlZGl0aW5n
SWdub3Jlc0NvbnRlbnQobm9kZSkpOwpAQCAtMTAxLDI2ICsxNDEsMzggQEAKIAogdm9pZCBWaXNp
YmxlU2VsZWN0aW9uOjpzZXRCYXNlKGNvbnN0IFBvc2l0aW9uJiBwb3NpdGlvbikKIHsKKyAgICBQ
b3NpdGlvbiBvbGRCYXNlID0gbV9iYXNlOwogICAgIG1fYmFzZSA9IHBvc2l0aW9uOwogICAgIHZh
bGlkYXRlKCk7CisgICAgaWYgKG1fYmFzZSAhPSBvbGRCYXNlKQorICAgICAgICBkaWRDaGFuZ2Uo
KTsKIH0KIAogdm9pZCBWaXNpYmxlU2VsZWN0aW9uOjpzZXRCYXNlKGNvbnN0IFZpc2libGVQb3Np
dGlvbiYgdmlzaWJsZVBvc2l0aW9uKQogeworICAgIFBvc2l0aW9uIG9sZEJhc2UgPSBtX2Jhc2U7
CiAgICAgbV9iYXNlID0gdmlzaWJsZVBvc2l0aW9uLmRlZXBFcXVpdmFsZW50KCk7CiAgICAgdmFs
aWRhdGUoKTsKKyAgICBpZiAobV9iYXNlICE9IG9sZEJhc2UpCisgICAgICAgIGRpZENoYW5nZSgp
OwogfQogCiB2b2lkIFZpc2libGVTZWxlY3Rpb246OnNldEV4dGVudChjb25zdCBQb3NpdGlvbiYg
cG9zaXRpb24pCiB7CisgICAgUG9zaXRpb24gb2xkRXh0ZW50ID0gbV9leHRlbnQ7CiAgICAgbV9l
eHRlbnQgPSBwb3NpdGlvbjsKICAgICB2YWxpZGF0ZSgpOworICAgIGlmIChtX2V4dGVudCAhPSBv
bGRFeHRlbnQpCisgICAgICAgIGRpZENoYW5nZSgpOwogfQogCiB2b2lkIFZpc2libGVTZWxlY3Rp
b246OnNldEV4dGVudChjb25zdCBWaXNpYmxlUG9zaXRpb24mIHZpc2libGVQb3NpdGlvbikKIHsK
KyAgICBQb3NpdGlvbiBvbGRFeHRlbnQgPSBtX2V4dGVudDsKICAgICBtX2V4dGVudCA9IHZpc2li
bGVQb3NpdGlvbi5kZWVwRXF1aXZhbGVudCgpOwogICAgIHZhbGlkYXRlKCk7CisgICAgaWYgKG1f
ZXh0ZW50ICE9IG9sZEV4dGVudCkKKyAgICAgICAgZGlkQ2hhbmdlKCk7CiB9CiAKIFBhc3NSZWZQ
dHI8UmFuZ2U+IFZpc2libGVTZWxlY3Rpb246OmZpcnN0UmFuZ2UoKSBjb25zdApAQCAtMTkzLDcg
KzI0NSwxNCBAQAogICAgIGlmIChpc05vbmUoKSkKICAgICAgICAgcmV0dXJuIGZhbHNlOwogCisg
ICAgLy8gRklYTUU6IERvIHdlIG5lZWQgdG8gY2hlY2sgYWxsIG9mIHRoZW0/CisgICAgUG9zaXRp
b24gb2xkQmFzZSA9IG1fYmFzZTsKKyAgICBQb3NpdGlvbiBvbGRFeHRlbnQgPSBtX2V4dGVudDsK
KyAgICBQb3NpdGlvbiBvbGRTdGFydCA9IG1fc3RhcnQ7CisgICAgUG9zaXRpb24gb2xkRW5kID0g
bV9lbmQ7CiAgICAgdmFsaWRhdGUoZ3JhbnVsYXJpdHkpOworICAgIGlmIChtX2Jhc2UgIT0gb2xk
QmFzZSB8fCBtX2V4dGVudCAhPSBvbGRFeHRlbnQgfHwgbV9zdGFydCAhPSBvbGRTdGFydCB8fCBt
X2VuZCAhPSBvbGRFbmQpCisgICAgICAgIGRpZENoYW5nZSgpOwogICAgIHJldHVybiB0cnVlOwog
fQogCkBAIC0yMzUsMTMgKzI5NCwxNyBAQAogICAgICAgICByZXR1cm47CiAKICAgICBDaGFyYWN0
ZXJJdGVyYXRvciBjaGFySXQoKnNlYXJjaFJhbmdlLCBUZXh0SXRlcmF0b3JFbWl0c0NoYXJhY3Rl
cnNCZXR3ZWVuQWxsVmlzaWJsZVBvc2l0aW9ucyk7CisgICAgYm9vbCBjaGFuZ2VkID0gZmFsc2U7
CiAKICAgICBmb3IgKDsgIWNoYXJJdC5hdEVuZCgpICYmIGNoYXJJdC50ZXh0KCkubGVuZ3RoKCk7
IGNoYXJJdC5hZHZhbmNlKDEpKSB7CiAgICAgICAgIFVDaGFyIGMgPSBjaGFySXQudGV4dCgpWzBd
OwogICAgICAgICBpZiAoKCFpc1NwYWNlT3JOZXdsaW5lKGMpICYmIGMgIT0gbm9CcmVha1NwYWNl
KSB8fCBjID09ICdcbicpCiAgICAgICAgICAgICBicmVhazsKICAgICAgICAgbV9lbmQgPSBjaGFy
SXQucmFuZ2UoKS0+ZW5kUG9zaXRpb24oKTsKKyAgICAgICAgY2hhbmdlZCA9IHRydWU7CiAgICAg
fQorICAgIGlmIChjaGFuZ2VkKQorICAgICAgICBkaWRDaGFuZ2UoKTsKIH0KIAogdm9pZCBWaXNp
YmxlU2VsZWN0aW9uOjpzZXRCYXNlQW5kRXh0ZW50VG9EZWVwRXF1aXZhbGVudHMoKQpAQCAtNDY3
LDYgKzUzMCw3IEBACiAgICAgICAgIG1fZW5kID0gYmFzZTsKICAgICB9CiAgICAgbV9zZWxlY3Rp
b25UeXBlID0gYmFzZSA9PSBleHRlbnQgPyBDYXJldFNlbGVjdGlvbiA6IFJhbmdlU2VsZWN0aW9u
OworICAgIGRpZENoYW5nZSgpOwogfQogCiBzdGF0aWMgUG9zaXRpb24gYWRqdXN0UG9zaXRpb25G
b3JFbmQoY29uc3QgUG9zaXRpb24mIGN1cnJlbnRQb3NpdGlvbiwgTm9kZSogc3RhcnRDb250YWlu
ZXJOb2RlKQpAQCAtNjY3LDYgKzczMSwzMiBAQAogICAgIHJldHVybiB0ZXh0Q29udHJvbCAmJiBp
c0hUTUxJbnB1dEVsZW1lbnQodGV4dENvbnRyb2wpICYmIGRvd25jYXN0PEhUTUxJbnB1dEVsZW1l
bnQ+KCp0ZXh0Q29udHJvbCkuaXNQYXNzd29yZEZpZWxkKCk7CiB9CiAKK1Zpc2libGVTZWxlY3Rp
b246OkNoYW5nZU9ic2VydmVyOjpDaGFuZ2VPYnNlcnZlcigpCit7Cit9CisKK1Zpc2libGVTZWxl
Y3Rpb246OkNoYW5nZU9ic2VydmVyOjp+Q2hhbmdlT2JzZXJ2ZXIoKQoreworfQorCit2b2lkIFZp
c2libGVTZWxlY3Rpb246OnNldENoYW5nZU9ic2VydmVyKENoYW5nZU9ic2VydmVyJiBvYnNlcnZl
cikKK3sKKyAgICBBU1NFUlQoIW1fY2hhbmdlT2JzZXJ2ZXIpOworICAgIG1fY2hhbmdlT2JzZXJ2
ZXIgPSAmb2JzZXJ2ZXI7Cit9CisKK3ZvaWQgVmlzaWJsZVNlbGVjdGlvbjo6Y2xlYXJDaGFuZ2VP
YnNlcnZlcigpCit7CisgICAgQVNTRVJUKG1fY2hhbmdlT2JzZXJ2ZXIpOworICAgIG1fY2hhbmdl
T2JzZXJ2ZXIgPSAwOworfQorCit2b2lkIFZpc2libGVTZWxlY3Rpb246OmRpZENoYW5nZSgpCit7
CisgICAgaWYgKG1fY2hhbmdlT2JzZXJ2ZXIpCisgICAgICAgIG1fY2hhbmdlT2JzZXJ2ZXItPmRp
ZENoYW5nZVZpc2libGVTZWxlY3Rpb24oKTsKK30KKwogI2lmbmRlZiBOREVCVUcKIAogdm9pZCBW
aXNpYmxlU2VsZWN0aW9uOjpkZWJ1Z1Bvc2l0aW9uKCkgY29uc3QKSW5kZXg6IFNvdXJjZS9XZWJD
b3JlL2VkaXRpbmcvVmlzaWJsZVNlbGVjdGlvbi5oCj09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJD
b3JlL2VkaXRpbmcvVmlzaWJsZVNlbGVjdGlvbi5oCShyZXZpc2lvbiAxNzM5MDUpCisrKyBTb3Vy
Y2UvV2ViQ29yZS9lZGl0aW5nL1Zpc2libGVTZWxlY3Rpb24uaAkod29ya2luZyBjb3B5KQpAQCAt
NTAsNiArNTAsMTEgQEAKICAgICBXRUJDT1JFX0VYUE9SVCBWaXNpYmxlU2VsZWN0aW9uKGNvbnN0
IFZpc2libGVQb3NpdGlvbiYsIGJvb2wgaXNEaXJlY3Rpb25hbCA9IGZhbHNlKTsKICAgICBXRUJD
T1JFX0VYUE9SVCBWaXNpYmxlU2VsZWN0aW9uKGNvbnN0IFZpc2libGVQb3NpdGlvbiYsIGNvbnN0
IFZpc2libGVQb3NpdGlvbiYsIGJvb2wgaXNEaXJlY3Rpb25hbCA9IGZhbHNlKTsKIAorICAgIFZp
c2libGVTZWxlY3Rpb24oY29uc3QgVmlzaWJsZVNlbGVjdGlvbiYpOworICAgIFZpc2libGVTZWxl
Y3Rpb24mIG9wZXJhdG9yPShjb25zdCBWaXNpYmxlU2VsZWN0aW9uJik7CisKKyAgICBXRUJDT1JF
X0VYUE9SVCB+VmlzaWJsZVNlbGVjdGlvbigpOworCiAgICAgV0VCQ09SRV9FWFBPUlQgc3RhdGlj
IFZpc2libGVTZWxlY3Rpb24gc2VsZWN0aW9uRnJvbUNvbnRlbnRzT2ZOb2RlKE5vZGUqKTsKIAog
ICAgIFNlbGVjdGlvblR5cGUgc2VsZWN0aW9uVHlwZSgpIGNvbnN0IHsgcmV0dXJuIG1fc2VsZWN0
aW9uVHlwZTsgfQpAQCAtMTA3LDE0ICsxMTIsMzAgQEAKIAogICAgIFdFQkNPUkVfRVhQT1JUIGJv
b2wgaXNJblBhc3N3b3JkRmllbGQoKSBjb25zdDsKIAorICAgIHZvaWQgc2V0V2l0aG91dFZhbGlk
YXRpb24oY29uc3QgUG9zaXRpb24mLCBjb25zdCBQb3NpdGlvbiYpOworCisgICAgLy8gTGlzdGVu
ZXIgb2YgVmlzaWJsZVNlbGVjdGlvbiBtb2RpZmljYXRpb24uIGRpZENoYW5nZVZpc2libGVTZWxl
Y3Rpb24oKSB3aWxsIGJlIGludm9rZWQgd2hlbiBiYXNlLCBleHRlbnQsIHN0YXJ0CisgICAgLy8g
b3IgZW5kIGlzIG1vdmVkIHRvIGEgZGlmZmVyZW50IHBvc2l0aW9uLgorICAgIC8vCisgICAgLy8g
T2JqZWN0cyBpbXBsZW1lbnRpbmcgfENoYW5nZU9ic2VydmVyfCBpbnRlcmZhY2UgbXVzdCBvdXRs
aXZlIHRoZSBWaXNpYmxlU2VsZWN0aW9uIG9iamVjdC4KKyAgICBjbGFzcyBDaGFuZ2VPYnNlcnZl
ciB7CisgICAgICAgIFdURl9NQUtFX05PTkNPUFlBQkxFKENoYW5nZU9ic2VydmVyKTsKKyAgICBw
dWJsaWM6CisgICAgICAgIENoYW5nZU9ic2VydmVyKCk7CisgICAgICAgIHZpcnR1YWwgfkNoYW5n
ZU9ic2VydmVyKCk7CisgICAgICAgIHZpcnR1YWwgdm9pZCBkaWRDaGFuZ2VWaXNpYmxlU2VsZWN0
aW9uKCkgPSAwOworICAgIH07CisKKyAgICB2b2lkIHNldENoYW5nZU9ic2VydmVyKENoYW5nZU9i
c2VydmVyJik7CisgICAgdm9pZCBjbGVhckNoYW5nZU9ic2VydmVyKCk7CisgICAgdm9pZCBkaWRD
aGFuZ2UoKTsgLy8gRmlyZSB0aGUgY2hhbmdlIG9ic2VydmVyLCBpZiBhbnkuCisKICNpZm5kZWYg
TkRFQlVHCiAgICAgdm9pZCBkZWJ1Z1Bvc2l0aW9uKCkgY29uc3Q7CiAgICAgdm9pZCBmb3JtYXRG
b3JEZWJ1Z2dlcihjaGFyKiBidWZmZXIsIHVuc2lnbmVkIGxlbmd0aCkgY29uc3Q7CiAgICAgdm9p
ZCBzaG93VHJlZUZvclRoaXMoKSBjb25zdDsKICNlbmRpZgogCi0gICAgdm9pZCBzZXRXaXRob3V0
VmFsaWRhdGlvbihjb25zdCBQb3NpdGlvbiYsIGNvbnN0IFBvc2l0aW9uJik7Ci0KIHByaXZhdGU6
CiAgICAgdm9pZCB2YWxpZGF0ZShUZXh0R3JhbnVsYXJpdHkgPSBDaGFyYWN0ZXJHcmFudWxhcml0
eSk7CiAKQEAgLTEzNywxMCArMTU4LDEzIEBACiAKICAgICBFQWZmaW5pdHkgbV9hZmZpbml0eTsg
ICAgICAgICAgIC8vIHRoZSB1cHN0cmVhbS9kb3duc3RyZWFtIGFmZmluaXR5IG9mIHRoZSBjYXJl
dAogCisgICAgQ2hhbmdlT2JzZXJ2ZXIqIG1fY2hhbmdlT2JzZXJ2ZXI7CisKICAgICAvLyB0aGVz
ZSBhcmUgY2FjaGVkLCBjYW4gYmUgcmVjYWxjdWxhdGVkIGJ5IHZhbGlkYXRlKCkKICAgICBTZWxl
Y3Rpb25UeXBlIG1fc2VsZWN0aW9uVHlwZTsgLy8gTm9uZSwgQ2FyZXQsIFJhbmdlCiAgICAgYm9v
bCBtX2Jhc2VJc0ZpcnN0IDogMTsgLy8gVHJ1ZSBpZiBiYXNlIGlzIGJlZm9yZSB0aGUgZXh0ZW50
CiAgICAgYm9vbCBtX2lzRGlyZWN0aW9uYWwgOiAxOyAvLyBOb24tZGlyZWN0aW9uYWwgaWdub3Jl
cyBtX2Jhc2VJc0ZpcnN0IGFuZCBzZWxlY3Rpb24gYWx3YXlzIGV4dGVuZHMgb24gc2hpZnQgKyBh
cnJvdyBrZXkuCisKIH07CiAKIGlubGluZSBib29sIG9wZXJhdG9yPT0oY29uc3QgVmlzaWJsZVNl
bGVjdGlvbiYgYSwgY29uc3QgVmlzaWJsZVNlbGVjdGlvbiYgYikKSW5kZXg6IFNvdXJjZS9XZWJD
b3JlL3BhZ2UvRE9NU2VsZWN0aW9uLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9w
YWdlL0RPTVNlbGVjdGlvbi5jcHAJKHJldmlzaW9uIDE3MzkwNSkKKysrIFNvdXJjZS9XZWJDb3Jl
L3BhZ2UvRE9NU2VsZWN0aW9uLmNwcAkod29ya2luZyBjb3B5KQpAQCAtMTkyLDYgKzE5Miw3IEBA
CiAKIHZvaWQgRE9NU2VsZWN0aW9uOjpjb2xsYXBzZShOb2RlKiBub2RlLCBpbnQgb2Zmc2V0LCBF
eGNlcHRpb25Db2RlJiBlYykKIHsKKyAgICBBU1NFUlQobm9kZSk7CiAgICAgaWYgKCFtX2ZyYW1l
KQogICAgICAgICByZXR1cm47CiAKQEAgLTIwNCw5ICsyMDUsNDEgQEAKICAgICAgICAgcmV0dXJu
OwogCiAgICAgLy8gRklYTUU6IEVsaW1pbmF0ZSBsZWdhY3kgZWRpdGluZyBwb3NpdGlvbnMKLSAg
ICBtX2ZyYW1lLT5zZWxlY3Rpb24oKS5tb3ZlVG8oY3JlYXRlTGVnYWN5RWRpdGluZ1Bvc2l0aW9u
KG5vZGUsIG9mZnNldCksIERPV05TVFJFQU0pOworICAgIC8vIG1fZnJhbWUtPnNlbGVjdGlvbigp
Lm1vdmVUbyhjcmVhdGVMZWdhY3lFZGl0aW5nUG9zaXRpb24obm9kZSwgb2Zmc2V0KSwgRE9XTlNU
UkVBTSk7CisKKyAgICBpZiAoIW5vZGUpCisgICAgICAgIHJldHVybjsKKyNpZiAwCisgICAgUmVm
UHRyPFJhbmdlPiByYW5nZSA9IFJhbmdlOjpjcmVhdGUobm9kZS0+ZG9jdW1lbnQoKSk7CisgICAg
CisgICAgLy8gdHJ5IHsKKyAgICAgICAgcmFuZ2UtPnNldFN0YXJ0KG5vZGUsIG9mZnNldCk7IC8v
ICwgZXhjZXB0aW9uU3RhdGUpOworICAgIC8vIGlmIChleGNlcHRpb25TdGF0ZS5oYWRFeGNlcHRp
b24oKSkKKyAgICAgICAgLy8gcmV0dXJuOworICAgICAgICByYW5nZS0+c2V0RW5kKG5vZGUsIG9m
ZnNldCk7CisgICAgLy8gaWYgKGV4Y2VwdGlvblN0YXRlLmhhZEV4Y2VwdGlvbigpKQorICAgIC8v
IH0gY2F0Y2goZSkgeworICAgICAgICAvLyByZXR1cm47CisgICAgLy8gfQorCisgICAgbV9mcmFt
ZS0+c2VsZWN0aW9uKCkuc2V0U2VsZWN0ZWRSYW5nZShyYW5nZS5nZXQoKSwgRE9XTlNUUkVBTSwg
ZmFsc2UsIHRydWUpOworI2VuZGlmCisKKyAgICAvKiBSZWZQdHJXaWxsQmVSYXdQdHIgKi8gUmVm
UHRyPFJhbmdlPiByYW5nZSA9IFJhbmdlOjpjcmVhdGUobm9kZS0+ZG9jdW1lbnQoKSk7CisgICAg
cmFuZ2UtPnNldFN0YXJ0KG5vZGUsIG9mZnNldCk7IC8vICwgZXhjZXB0aW9uU3RhdGUpOworICAg
IC8vIGlmIChleGNlcHRpb25TdGF0ZS5oYWRFeGNlcHRpb24oKSkKKyAgICAgICAgLy8gcmV0dXJu
OworICAgIHJhbmdlLT5zZXRFbmQobm9kZSwgb2Zmc2V0KTsgLy8gLCBleGNlcHRpb25TdGF0ZSk7
CisgICAgLy8gaWYgKGV4Y2VwdGlvblN0YXRlLmhhZEV4Y2VwdGlvbigpKQorICAgICAgICAvLyBy
ZXR1cm47CisgICAgbV9mcmFtZS0+c2VsZWN0aW9uKCkuc2V0U2VsZWN0ZWRSYW5nZShyYW5nZS5n
ZXQoKSwgRE9XTlNUUkVBTSwgZmFsc2UsIG1fZnJhbWUtPnNlbGVjdGlvbigpLmlzRGlyZWN0aW9u
YWwoKSk7CiB9CiAKK3ZvaWQgRE9NU2VsZWN0aW9uOjpjb2xsYXBzZShOb2RlKiBub2RlLCBFeGNl
cHRpb25Db2RlJiBleGNlcHRpb25TdGF0ZSkKK3sKKyAgICBjb2xsYXBzZShub2RlLCAwLCBleGNl
cHRpb25TdGF0ZSk7Cit9CisKIHZvaWQgRE9NU2VsZWN0aW9uOjpjb2xsYXBzZVRvRW5kKEV4Y2Vw
dGlvbkNvZGUmIGVjKQogewogICAgIGlmICghbV9mcmFtZSkKQEAgLTM2OCw3ICs0MDEsOCBAQAog
ICAgICAgICByZXR1cm4gUmFuZ2U6OmNyZWF0ZShzaGFkb3dBbmNlc3Rvci0+ZG9jdW1lbnQoKSwg
Y29udGFpbmVyLCBvZmZzZXQsIGNvbnRhaW5lciwgb2Zmc2V0KTsKICAgICB9CiAKLSAgICByZXR1
cm4gbV9mcmFtZS0+c2VsZWN0aW9uKCkuc2VsZWN0aW9uKCkuZmlyc3RSYW5nZSgpOworICAgIC8v
IHJldHVybiBtX2ZyYW1lLT5zZWxlY3Rpb24oKS5zZWxlY3Rpb24oKS5maXJzdFJhbmdlKCk7Cisg
ICAgcmV0dXJuIG1fZnJhbWUtPnNlbGVjdGlvbigpLmZpcnN0UmFuZ2UoKTsKIH0KIAogdm9pZCBE
T01TZWxlY3Rpb246OnJlbW92ZUFsbFJhbmdlcygpCkBAIC0zNzgsNDUgKzQxMiw2NSBAQAogICAg
IG1fZnJhbWUtPnNlbGVjdGlvbigpLmNsZWFyKCk7CiB9CiAKLXZvaWQgRE9NU2VsZWN0aW9uOjph
ZGRSYW5nZShSYW5nZSogcikKK3ZvaWQgRE9NU2VsZWN0aW9uOjphZGRSYW5nZShSYW5nZSogbmV3
UmFuZ2UpCiB7CiAgICAgaWYgKCFtX2ZyYW1lKQogICAgICAgICByZXR1cm47Ci0gICAgaWYgKCFy
KQorICAgIC8vIGlmICghcikKKyAgICAgICAgLy8gcmV0dXJuOworICAgIC8vIEZJWE1FOiBTaG91
bGQgd2UgdGhyb3cgRE9NRXhjZXB0aW9uIGZvciBlcnJvciBjYXNlcyBiZWxvdz8KKyAgICBpZiAo
IW5ld1JhbmdlKSB7CisgICAgICAgIGFkZENvbnNvbGVFcnJvcigiVGhlIGdpdmVuIHJhbmdlIGlz
IG51bGwuIik7CiAgICAgICAgIHJldHVybjsKKyAgICB9CisgICAgaWYgKCFuZXdSYW5nZS0+c3Rh
cnRDb250YWluZXIoKSkgeworICAgICAgICBhZGRDb25zb2xlRXJyb3IoIlRoZSBnaXZlbiByYW5n
ZSBoYXMgbm8gY29udGFpbmVyLiBQZXJoYXBzICdkZXRhY2goKScgaGFzIGJlZW4gaW52b2tlZCBv
biBpdD8iKTsKKyAgICAgICAgcmV0dXJuOworICAgIH0KIAorCiAgICAgRnJhbWVTZWxlY3Rpb24m
IHNlbGVjdGlvbiA9IG1fZnJhbWUtPnNlbGVjdGlvbigpOwogCiAgICAgaWYgKHNlbGVjdGlvbi5p
c05vbmUoKSkgewotICAgICAgICBzZWxlY3Rpb24ubW92ZVRvKHIpOworICAgICAgICAvLyBzZWxl
Y3Rpb24ubW92ZVRvKHIpOworICAgICAgICBzZWxlY3Rpb24uc2V0U2VsZWN0ZWRSYW5nZShuZXdS
YW5nZSwgVlBfREVGQVVMVF9BRkZJTklUWSwgZmFsc2UsIHNlbGVjdGlvbi5pc0RpcmVjdGlvbmFs
KCkpOwogICAgICAgICByZXR1cm47CiAgICAgfQogCi0gICAgUmVmUHRyPFJhbmdlPiByYW5nZSA9
IHNlbGVjdGlvbi5zZWxlY3Rpb24oKS50b05vcm1hbGl6ZWRSYW5nZSgpOwotICAgIGlmIChyLT5j
b21wYXJlQm91bmRhcnlQb2ludHMoUmFuZ2U6OlNUQVJUX1RPX1NUQVJULCByYW5nZS5nZXQoKSwg
SUdOT1JFX0VYQ0VQVElPTikgPT0gLTEpIHsKLSAgICAgICAgLy8gV2UgZG9uJ3Qgc3VwcG9ydCBk
aXNjb250aWd1b3VzIHNlbGVjdGlvbi4gV2UgZG9uJ3QgZG8gYW55dGhpbmcgaWYgciBhbmQgcmFu
Z2UgZG9uJ3QgaW50ZXJzZWN0LgotICAgICAgICBpZiAoci0+Y29tcGFyZUJvdW5kYXJ5UG9pbnRz
KFJhbmdlOjpTVEFSVF9UT19FTkQsIHJhbmdlLmdldCgpLCBJR05PUkVfRVhDRVBUSU9OKSA+IC0x
KSB7Ci0gICAgICAgICAgICBpZiAoci0+Y29tcGFyZUJvdW5kYXJ5UG9pbnRzKFJhbmdlOjpFTkRf
VE9fRU5ELCByYW5nZS5nZXQoKSwgSUdOT1JFX0VYQ0VQVElPTikgPT0gLTEpIHsKLSAgICAgICAg
ICAgICAgICAvLyBUaGUgb3JpZ2luYWwgcmFuZ2UgYW5kIHIgaW50ZXJzZWN0LgotICAgICAgICAg
ICAgICAgIHNlbGVjdGlvbi5tb3ZlVG8oci0+c3RhcnRQb3NpdGlvbigpLCByYW5nZS0+ZW5kUG9z
aXRpb24oKSwgRE9XTlNUUkVBTSk7Ci0gICAgICAgICAgICB9IGVsc2UgewotICAgICAgICAgICAg
ICAgIC8vIHIgY29udGFpbnMgdGhlIG9yaWdpbmFsIHJhbmdlLgotICAgICAgICAgICAgICAgIHNl
bGVjdGlvbi5tb3ZlVG8ocik7Ci0gICAgICAgICAgICB9Ci0gICAgICAgIH0KLSAgICB9IGVsc2Ug
ewotICAgICAgICAvLyBXZSBkb24ndCBzdXBwb3J0IGRpc2NvbnRpZ3VvdXMgc2VsZWN0aW9uLiBX
ZSBkb24ndCBkbyBhbnl0aGluZyBpZiByIGFuZCByYW5nZSBkb24ndCBpbnRlcnNlY3QuCi0gICAg
ICAgIEV4Y2VwdGlvbkNvZGUgZWMgPSAwOwotICAgICAgICBpZiAoci0+Y29tcGFyZUJvdW5kYXJ5
UG9pbnRzKFJhbmdlOjpFTkRfVE9fU1RBUlQsIHJhbmdlLmdldCgpLCBlYykgPCAxICYmICFlYykg
ewotICAgICAgICAgICAgaWYgKHItPmNvbXBhcmVCb3VuZGFyeVBvaW50cyhSYW5nZTo6RU5EX1RP
X0VORCwgcmFuZ2UuZ2V0KCksIElHTk9SRV9FWENFUFRJT04pID09IC0xKSB7Ci0gICAgICAgICAg
ICAgICAgLy8gVGhlIG9yaWdpbmFsIHJhbmdlIGNvbnRhaW5zIHIuCi0gICAgICAgICAgICAgICAg
c2VsZWN0aW9uLm1vdmVUbyhyYW5nZS5nZXQoKSk7Ci0gICAgICAgICAgICB9IGVsc2UgewotICAg
ICAgICAgICAgICAgIC8vIFRoZSBvcmlnaW5hbCByYW5nZSBhbmQgciBpbnRlcnNlY3QuCi0gICAg
ICAgICAgICAgICAgc2VsZWN0aW9uLm1vdmVUbyhyYW5nZS0+c3RhcnRQb3NpdGlvbigpLCByLT5l
bmRQb3NpdGlvbigpLCBET1dOU1RSRUFNKTsKLSAgICAgICAgICAgIH0KLSAgICAgICAgfQorICAg
IFJlZlB0cjxSYW5nZT4gb3JpZ2luYWxSYW5nZSA9IHNlbGVjdGlvbi5maXJzdFJhbmdlKCk7CisK
KyAgICBpZiAoJm9yaWdpbmFsUmFuZ2UtPnN0YXJ0Q29udGFpbmVyKCktPmRvY3VtZW50KCkgIT0g
Jm5ld1JhbmdlLT5zdGFydENvbnRhaW5lcigpLT5kb2N1bWVudCgpKSB7CisgICAgICAgIGFkZENv
bnNvbGVFcnJvcigiVGhlIGdpdmVuIHJhbmdlIGRvZXMgbm90IGJlbG9uZyB0byB0aGUgY3VycmVu
dCBzZWxlY3Rpb24ncyBkb2N1bWVudC4iKTsKKyAgICAgICAgcmV0dXJuOwogICAgIH0KKyAgICBp
ZiAoJm9yaWdpbmFsUmFuZ2UtPnN0YXJ0Q29udGFpbmVyKCktPnRyZWVTY29wZSgpICE9ICZuZXdS
YW5nZS0+c3RhcnRDb250YWluZXIoKS0+dHJlZVNjb3BlKCkpIHsKKyAgICAgICAgYWRkQ29uc29s
ZUVycm9yKCJUaGUgZ2l2ZW4gcmFuZ2UgYW5kIHRoZSBjdXJyZW50IHNlbGVjdGlvbiBiZWxvbmcg
dG8gdHdvIGRpZmZlcmVudCBkb2N1bWVudCBmcmFnbWVudHMuIik7CisgICAgICAgIHJldHVybjsK
KyAgICB9CisKKyAgICBpZiAob3JpZ2luYWxSYW5nZS0+Y29tcGFyZUJvdW5kYXJ5UG9pbnRzKFJh
bmdlOjpTVEFSVF9UT19FTkQsIG5ld1JhbmdlLCBBU1NFUlRfTk9fRVhDRVBUSU9OKSA8IDAKKyAg
ICAgICAgfHwgbmV3UmFuZ2UtPmNvbXBhcmVCb3VuZGFyeVBvaW50cyhSYW5nZTo6U1RBUlRfVE9f
RU5ELCBvcmlnaW5hbFJhbmdlLmdldCgpLCBBU1NFUlRfTk9fRVhDRVBUSU9OKSA8IDApIHsKKyAg
ICAgICAgYWRkQ29uc29sZUVycm9yKCJEaXNjb250aWd1b3VzIHNlbGVjdGlvbiBpcyBub3Qgc3Vw
cG9ydGVkLiIpOworICAgICAgICByZXR1cm47CisgICAgfQorCisgICAgaWYgKG9yaWdpbmFsUmFu
Z2UtPmNvbXBhcmVCb3VuZGFyeVBvaW50cyhSYW5nZTo6U1RBUlRfVE9fRU5ELCBuZXdSYW5nZSwg
QVNTRVJUX05PX0VYQ0VQVElPTikgPCAwCisgICAgICAgIHx8IG5ld1JhbmdlLT5jb21wYXJlQm91
bmRhcnlQb2ludHMoUmFuZ2U6OlNUQVJUX1RPX0VORCwgb3JpZ2luYWxSYW5nZS5nZXQoKSwgQVNT
RVJUX05PX0VYQ0VQVElPTikgPCAwKSB7CisgICAgICAgIGFkZENvbnNvbGVFcnJvcigiRGlzY29u
dGlndW91cyBzZWxlY3Rpb24gaXMgbm90IHN1cHBvcnRlZC4iKTsKKyAgICAgICAgcmV0dXJuOwor
ICAgIH0KKworICAgIC8vIEZJWE1FOiAiTWVyZ2UgdGhlIHJhbmdlcyBpZiB0aGV5IGludGVyc2Vj
dCIgaXMgQmxpbmstc3BlY2lmaWMgYmVoYXZpb3I7IG90aGVyIGJyb3dzZXJzIHN1cHBvcnRpbmcg
ZGlzY29udGlndW91cworICAgIC8vIHNlbGVjdGlvbiAob2J2aW91c2x5KSBrZWVwIGVhY2ggUmFu
Z2UgYWRkZWQgYW5kIHJldHVybiBpdCBpbiBnZXRSYW5nZUF0KCkuIEJ1dCBpdCdzIHVuY2xlYXIg
aWYgd2UgY2FuIHJlYWxseQorICAgIC8vIGRvIHRoZSBzYW1lLCBzaW5jZSB3ZSBkb24ndCBzdXBw
b3J0IGRpc2NvbnRpZ3VvdXMgc2VsZWN0aW9uLiBGdXJ0aGVyIGRpc2N1c3Npb25zIGF0CisgICAg
Ly8gPGh0dHBzOi8vY29kZS5nb29nbGUuY29tL3AvY2hyb21pdW0vaXNzdWVzL2RldGFpbD9pZD0z
NTMwNjk+LgorCisgICAgUmFuZ2UqIHN0YXJ0ID0gb3JpZ2luYWxSYW5nZS0+Y29tcGFyZUJvdW5k
YXJ5UG9pbnRzKFJhbmdlOjpTVEFSVF9UT19TVEFSVCwgbmV3UmFuZ2UsIEFTU0VSVF9OT19FWENF
UFRJT04pIDwgMCA/IG9yaWdpbmFsUmFuZ2UuZ2V0KCkgOiBuZXdSYW5nZTsKKyAgICBSYW5nZSog
ZW5kID0gb3JpZ2luYWxSYW5nZS0+Y29tcGFyZUJvdW5kYXJ5UG9pbnRzKFJhbmdlOjpFTkRfVE9f
RU5ELCBuZXdSYW5nZSwgQVNTRVJUX05PX0VYQ0VQVElPTikgPCAwID8gbmV3UmFuZ2UgOiBvcmln
aW5hbFJhbmdlLmdldCgpOworICAgIFJlZlB0cjxSYW5nZT4gbWVyZ2VkID0gUmFuZ2U6OmNyZWF0
ZShvcmlnaW5hbFJhbmdlLT5zdGFydENvbnRhaW5lcigpLT5kb2N1bWVudCgpLCBzdGFydC0+c3Rh
cnRDb250YWluZXIoKSwgc3RhcnQtPnN0YXJ0T2Zmc2V0KCksIGVuZC0+ZW5kQ29udGFpbmVyKCks
IGVuZC0+ZW5kT2Zmc2V0KCkpOworICAgIEVBZmZpbml0eSBhZmZpbml0eSA9IHNlbGVjdGlvbi5z
ZWxlY3Rpb24oKS5hZmZpbml0eSgpOworICAgIHNlbGVjdGlvbi5zZXRTZWxlY3RlZFJhbmdlKG1l
cmdlZC5nZXQoKSwgYWZmaW5pdHksIGZhbHNlLCBzZWxlY3Rpb24uaXNEaXJlY3Rpb25hbCgpKTsK
KwogfQogCiB2b2lkIERPTVNlbGVjdGlvbjo6ZGVsZXRlRnJvbURvY3VtZW50KCkKQEAgLTUzNCw0
ICs1ODgsMTIgQEAKICAgICByZXR1cm4gJm5vZGUtPmRvY3VtZW50KCkgPT0gbV9mcmFtZS0+ZG9j
dW1lbnQoKTsKIH0KIAordm9pZCBET01TZWxlY3Rpb246OmFkZENvbnNvbGVFcnJvcihjb25zdCBT
dHJpbmcmIG1lc3NhZ2UpCit7CisgICAgLy8gaWYgKG1fdHJlZVNjb3BlKQorICAgICAgICAvLyBt
X3RyZWVTY29wZS0+ZG9jdW1lbnQoKS5hZGRDb25zb2xlTWVzc2FnZShKU01lc3NhZ2VTb3VyY2Us
IEVycm9yTWVzc2FnZUxldmVsLCBtZXNzYWdlKTsKKyAgICBBU1NFUlQobV9mcmFtZSk7CisgICAg
bV9mcmFtZS0+ZG9jdW1lbnQoKS0+YWRkQ29uc29sZU1lc3NhZ2UoTWVzc2FnZVNvdXJjZTo6SlMs
IE1lc3NhZ2VMZXZlbDo6RXJyb3IsIG1lc3NhZ2UpOworfQorCiB9IC8vIG5hbWVzcGFjZSBXZWJD
b3JlCkluZGV4OiBTb3VyY2UvV2ViQ29yZS9wYWdlL0RPTVNlbGVjdGlvbi5oCj09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0K
LS0tIFNvdXJjZS9XZWJDb3JlL3BhZ2UvRE9NU2VsZWN0aW9uLmgJKHJldmlzaW9uIDE3MzkwNSkK
KysrIFNvdXJjZS9XZWJDb3JlL3BhZ2UvRE9NU2VsZWN0aW9uLmgJKHdvcmtpbmcgY29weSkKQEAg
LTc3LDYgKzc3LDcgQEAKICAgICAgICAgYm9vbCBpc0NvbGxhcHNlZCgpIGNvbnN0OwogICAgICAg
ICBpbnQgcmFuZ2VDb3VudCgpIGNvbnN0OwogICAgICAgICB2b2lkIGNvbGxhcHNlKE5vZGUqLCBp
bnQgb2Zmc2V0LCBFeGNlcHRpb25Db2RlJik7CisgICAgICAgIHZvaWQgY29sbGFwc2UoTm9kZSos
IEV4Y2VwdGlvbkNvZGUmKTsKICAgICAgICAgdm9pZCBjb2xsYXBzZVRvRW5kKEV4Y2VwdGlvbkNv
ZGUmKTsKICAgICAgICAgdm9pZCBjb2xsYXBzZVRvU3RhcnQoRXhjZXB0aW9uQ29kZSYpOwogICAg
ICAgICB2b2lkIGV4dGVuZChOb2RlKiwgaW50IG9mZnNldCwgRXhjZXB0aW9uQ29kZSYpOwpAQCAt
OTMsOCArOTQsNiBAQAogICAgICAgICB2b2lkIGVtcHR5KCk7CiAKICAgICBwcml2YXRlOgotICAg
ICAgICBjb25zdCBUcmVlU2NvcGUqIG1fdHJlZVNjb3BlOwotCiAgICAgICAgIGV4cGxpY2l0IERP
TVNlbGVjdGlvbihjb25zdCBUcmVlU2NvcGUqKTsKIAogICAgICAgICAvLyBDb252ZW5pZW5jZSBt
ZXRob2QgZm9yIGFjY2Vzc29ycywgZG9lcyBub3QgTlVMTCBjaGVjayBtX2ZyYW1lLgpAQCAtMTA0
LDYgKzEwMywxMCBAQAogICAgICAgICBpbnQgc2hhZG93QWRqdXN0ZWRPZmZzZXQoY29uc3QgUG9z
aXRpb24mKSBjb25zdDsKIAogICAgICAgICBib29sIGlzVmFsaWRGb3JQb3NpdGlvbihOb2RlKikg
Y29uc3Q7CisKKyAgICAgICAgdm9pZCBhZGRDb25zb2xlRXJyb3IoY29uc3QgU3RyaW5nJiBtZXNz
YWdlKTsKKworICAgICAgICBjb25zdCBUcmVlU2NvcGUqIG1fdHJlZVNjb3BlOwogICAgIH07CiAK
IH0gLy8gbmFtZXNwYWNlIFdlYkNvcmUKSW5kZXg6IFNvdXJjZS9XZWJDb3JlL3BhZ2UvRE9NU2Vs
ZWN0aW9uLmlkbAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9wYWdlL0RPTVNlbGVjdGlv
bi5pZGwJKHJldmlzaW9uIDE3MzkwNSkKKysrIFNvdXJjZS9XZWJDb3JlL3BhZ2UvRE9NU2VsZWN0
aW9uLmlkbAkod29ya2luZyBjb3B5KQpAQCAtNDEsOCArNDEsMTAgQEAKICAgICByZWFkb25seSBh
dHRyaWJ1dGUgYm9vbGVhbiBpc0NvbGxhcHNlZDsKICAgICByZWFkb25seSBhdHRyaWJ1dGUgbG9u
ZyByYW5nZUNvdW50OwogCi0gICAgW1JhaXNlc0V4Y2VwdGlvbl0gdm9pZCBjb2xsYXBzZShbRGVm
YXVsdD1VbmRlZmluZWRdIG9wdGlvbmFsIE5vZGUgbm9kZSwgCi0gICAgICAgICAgICAgICAgICBb
RGVmYXVsdD1VbmRlZmluZWRdIG9wdGlvbmFsIGxvbmcgaW5kZXgpOworICAgIC8vIFtSYWlzZXNF
eGNlcHRpb25dIHZvaWQgY29sbGFwc2UoW0RlZmF1bHQ9VW5kZWZpbmVkXSBvcHRpb25hbCBOb2Rl
IG5vZGUsIAorICAgICAgICAgICAgICAgICAgLy8gW0RlZmF1bHQ9VW5kZWZpbmVkXSBvcHRpb25h
bCBsb25nIGluZGV4KTsKKyAgICBbUmFpc2VzRXhjZXB0aW9uLCBTdHJpY3RUeXBlQ2hlY2tpbmdd
IHZvaWQgY29sbGFwc2UoTm9kZSBub2RlLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICBvcHRpb25hbCBsb25nIG9mZnNldCk7CiAgICAgW1Jh
aXNlc0V4Y2VwdGlvbl0gdm9pZCBjb2xsYXBzZVRvRW5kKCk7CiAgICAgW1JhaXNlc0V4Y2VwdGlv
bl0gdm9pZCBjb2xsYXBzZVRvU3RhcnQoKTsKIApAQCAtNzksNiArODEsOSBAQAogICAgICAgICAg
ICAgICAgICAgICAgICAgICBbRGVmYXVsdD1VbmRlZmluZWRdIG9wdGlvbmFsIGxvbmcgYmFzZU9m
ZnNldCwgCiAgICAgICAgICAgICAgICAgICAgICAgICAgIFtEZWZhdWx0PVVuZGVmaW5lZF0gb3B0
aW9uYWwgTm9kZSBleHRlbnROb2RlLCAKICAgICAgICAgICAgICAgICAgICAgICAgICAgW0RlZmF1
bHQ9VW5kZWZpbmVkXSBvcHRpb25hbCBsb25nIGV4dGVudE9mZnNldCk7CisgICAgW0ltcGxlbWVu
dGVkQXM9Y29sbGFwc2UsIC8qIE1lYXN1cmVBcz1TZWxlY3Rpb25TZXRQb3NpdGlvbiwgKi8gUmFp
c2VzRXhjZXB0aW9uLCBTdHJpY3RUeXBlQ2hlY2tpbmddIHZvaWQgc2V0UG9zaXRpb24oTm9kZSBu
b2RlLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgIG9wdGlvbmFsIGxvbmcgb2Zmc2V0KTsKKwogICAgIFtSYWlzZXNFeGNlcHRpb25dIHZv
aWQgc2V0UG9zaXRpb24oW0RlZmF1bHQ9VW5kZWZpbmVkXSBvcHRpb25hbCBOb2RlIG5vZGUsIAog
ICAgICAgICAgICAgICAgICAgICAgW0RlZmF1bHQ9VW5kZWZpbmVkXSBvcHRpb25hbCBsb25nIG9m
ZnNldCk7CiAKSW5kZXg6IFNvdXJjZS9XZWJLaXQvbWFjL1dlYlZpZXcvV2ViRnJhbWUubW0KPT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PQotLS0gU291cmNlL1dlYktpdC9tYWMvV2ViVmlldy9XZWJGcmFtZS5tbQkocmV2aXNp
b24gMTczOTA1KQorKysgU291cmNlL1dlYktpdC9tYWMvV2ViVmlldy9XZWJGcmFtZS5tbQkod29y
a2luZyBjb3B5KQpAQCAtMTUwNiw3ICsxNTA2LDcgQEAKICAgICAgICAgfQogICAgIH0KIAotICAg
IGZyYW1lLT5zZWxlY3Rpb24oKS5zZXRTZWxlY3RlZFJhbmdlKGNvcmUocmFuZ2UpLCAoRUFmZmlu
aXR5KWFmZmluaXR5LCBjbG9zZVR5cGluZyk7CisgICAgZnJhbWUtPnNlbGVjdGlvbigpLnNldFNl
bGVjdGVkUmFuZ2UoY29yZShyYW5nZSksIChFQWZmaW5pdHkpYWZmaW5pdHksIGZhbHNlLCBjbG9z
ZVR5cGluZyk7CiAgICAgaWYgKCFjbG9zZVR5cGluZykKICAgICAgICAgZnJhbWUtPmVkaXRvcigp
LmVuc3VyZUxhc3RFZGl0Q29tbWFuZEhhc0N1cnJlbnRTZWxlY3Rpb25JZk9wZW5Gb3JNb3JlVHlw
aW5nKCk7CiB9CkluZGV4OiBTb3VyY2UvV2ViS2l0L21hYy9XZWJWaWV3L1dlYlZpZXcubW0KPT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PQotLS0gU291cmNlL1dlYktpdC9tYWMvV2ViVmlldy9XZWJWaWV3Lm1tCShyZXZpc2lv
biAxNzM5MDUpCisrKyBTb3VyY2UvV2ViS2l0L21hYy9XZWJWaWV3L1dlYlZpZXcubW0JKHdvcmtp
bmcgY29weSkKQEAgLTcxNjAsNyArNzE2MCw3IEBACiAgICAgICAgIGlmICghY29yZUZyYW1lKQog
ICAgICAgICAgICAgcmV0dXJuOwogCi0gICAgICAgIGNvcmVGcmFtZS0+c2VsZWN0aW9uKCkuc2V0
U2VsZWN0ZWRSYW5nZShjb3JlKHJhbmdlKSwgY29yZShzZWxlY3Rpb25BZmZpbml0eSksIHRydWUp
OworICAgICAgICBjb3JlRnJhbWUtPnNlbGVjdGlvbigpLnNldFNlbGVjdGVkUmFuZ2UoY29yZShy
YW5nZSksIGNvcmUoc2VsZWN0aW9uQWZmaW5pdHkpLCBmYWxzZSwgdHJ1ZSk7CiAgICAgfQogfQog
CkluZGV4OiBTb3VyY2UvV2ViS2l0Mi9XZWJQcm9jZXNzL1dlYlBhZ2UvaW9zL1dlYlBhZ2VJT1Mu
bW0KPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYktpdDIvV2ViUHJvY2Vzcy9XZWJQYWdlL2lvcy9X
ZWJQYWdlSU9TLm1tCShyZXZpc2lvbiAxNzM5MDUpCisrKyBTb3VyY2UvV2ViS2l0Mi9XZWJQcm9j
ZXNzL1dlYlBhZ2UvaW9zL1dlYlBhZ2VJT1MubW0JKHdvcmtpbmcgY29weSkKQEAgLTk1NSw3ICs5
NTUsNyBAQAogICAgICAgICBicmVhazsKICAgICB9CiAgICAgaWYgKHJhbmdlKQotICAgICAgICBm
cmFtZS5zZWxlY3Rpb24oKS5zZXRTZWxlY3RlZFJhbmdlKHJhbmdlLmdldCgpLCBwb3NpdGlvbi5h
ZmZpbml0eSgpLCB0cnVlKTsKKyAgICAgICAgZnJhbWUuc2VsZWN0aW9uKCkuc2V0U2VsZWN0ZWRS
YW5nZShyYW5nZS5nZXQoKSwgcG9zaXRpb24uYWZmaW5pdHkoKSwgZmFsc2UsIHRydWUpOwogCiAg
ICAgc2VuZChNZXNzYWdlczo6V2ViUGFnZVByb3h5OjpHZXN0dXJlQ2FsbGJhY2socG9pbnQsIGdl
c3R1cmVUeXBlLCBnZXN0dXJlU3RhdGUsIHN0YXRpY19jYXN0PHVpbnQzMl90PihmbGFncyksIGNh
bGxiYWNrSUQpKTsKIH0KQEAgLTE0MTgsNyArMTQxOCw3IEBACiAKICAgICBpZiAobmV3UmFuZ2Up
IHsKICAgICAgICAgbV9jdXJyZW50QmxvY2tTZWxlY3Rpb24gPSBuZXdSYW5nZTsKLSAgICAgICAg
ZnJhbWUuc2VsZWN0aW9uKCkuc2V0U2VsZWN0ZWRSYW5nZShuZXdSYW5nZS5nZXQoKSwgVlBfREVG
QVVMVF9BRkZJTklUWSwgdHJ1ZSk7CisgICAgICAgIGZyYW1lLnNlbGVjdGlvbigpLnNldFNlbGVj
dGVkUmFuZ2UobmV3UmFuZ2UuZ2V0KCksIFZQX0RFRkFVTFRfQUZGSU5JVFksIGZhbHNlLCB0cnVl
KTsKICAgICB9CiAKICAgICBjb21wdXRlRXhwYW5kQW5kU2hyaW5rVGhyZXNob2xkc0ZvckhhbmRs
ZShwb2ludCwgaGFuZGxlUG9zaXRpb24sIGdyb3dUaHJlc2hvbGQsIHNocmlua1RocmVzaG9sZCk7
CkBAIC0xNDk1LDcgKzE0OTUsNyBAQAogICAgICAgICBicmVhazsKICAgICB9CiAgICAgaWYgKHJh
bmdlKQotICAgICAgICBmcmFtZS5zZWxlY3Rpb24oKS5zZXRTZWxlY3RlZFJhbmdlKHJhbmdlLmdl
dCgpLCBwb3NpdGlvbi5hZmZpbml0eSgpLCB0cnVlKTsKKyAgICAgICAgZnJhbWUuc2VsZWN0aW9u
KCkuc2V0U2VsZWN0ZWRSYW5nZShyYW5nZS5nZXQoKSwgcG9zaXRpb24uYWZmaW5pdHkoKSwgZmFs
c2UsIHRydWUpOwogCiAgICAgc2VuZChNZXNzYWdlczo6V2ViUGFnZVByb3h5OjpUb3VjaGVzQ2Fs
bGJhY2socG9pbnQsIHRvdWNoZXMsIGNhbGxiYWNrSUQpKTsKIH0KQEAgLTE1MTEsNyArMTUxMSw3
IEBACiAgICAgICAgICAgICByYW5nZSA9IFJhbmdlOjpjcmVhdGUoKmZyYW1lLmRvY3VtZW50KCks
IGZyb21Qb3NpdGlvbiwgdG9Qb3NpdGlvbik7CiAgICAgICAgIGVsc2UKICAgICAgICAgICAgIHJh
bmdlID0gUmFuZ2U6OmNyZWF0ZSgqZnJhbWUuZG9jdW1lbnQoKSwgdG9Qb3NpdGlvbiwgZnJvbVBv
c2l0aW9uKTsKLSAgICAgICAgZnJhbWUuc2VsZWN0aW9uKCkuc2V0U2VsZWN0ZWRSYW5nZShyYW5n
ZS5nZXQoKSwgZnJvbVBvc2l0aW9uLmFmZmluaXR5KCksIHRydWUpOworICAgICAgICBmcmFtZS5z
ZWxlY3Rpb24oKS5zZXRTZWxlY3RlZFJhbmdlKHJhbmdlLmdldCgpLCBmcm9tUG9zaXRpb24uYWZm
aW5pdHkoKSwgZmFsc2UsIHRydWUpOwogICAgIH0KIAogICAgIC8vIFdlIGNhbiB1c2UgdGhlIHNh
bWUgY2FsbGJhY2sgZm9yIHRoZSBnZXN0dXJlcyB3aXRoIG9uZSBwb2ludC4KQEAgLTE1MjYsNyAr
MTUyNiw3IEBACiAgICAgICAgIHJldHVybjsKIAogICAgIFZpc2libGVQb3NpdGlvbiBwb3NpdGlv
biA9IGZyYW1lLnNlbGVjdGlvbigpLnNlbGVjdGlvbigpLnN0YXJ0KCk7Ci0gICAgZnJhbWUuc2Vs
ZWN0aW9uKCkuc2V0U2VsZWN0ZWRSYW5nZSh3b3JkUmFuZ2VGcm9tUG9zaXRpb24ocG9zaXRpb24p
LmdldCgpLCBwb3NpdGlvbi5hZmZpbml0eSgpLCB0cnVlKTsKKyAgICBmcmFtZS5zZWxlY3Rpb24o
KS5zZXRTZWxlY3RlZFJhbmdlKHdvcmRSYW5nZUZyb21Qb3NpdGlvbihwb3NpdGlvbikuZ2V0KCks
IHBvc2l0aW9uLmFmZmluaXR5KCksIGZhbHNlLCB0cnVlKTsKIH0KIAogdm9pZCBXZWJQYWdlOjpz
ZWxlY3RXb3JkQmFja3dhcmQoKQpAQCAtMTUzOCw3ICsxNTM4LDcgQEAKICAgICBWaXNpYmxlUG9z
aXRpb24gcG9zaXRpb24gPSBmcmFtZS5zZWxlY3Rpb24oKS5zZWxlY3Rpb24oKS5zdGFydCgpOwog
ICAgIFZpc2libGVQb3NpdGlvbiBzdGFydFBvc2l0aW9uID0gcG9zaXRpb25PZk5leHRCb3VuZGFy
eU9mR3JhbnVsYXJpdHkocG9zaXRpb24sIFdvcmRHcmFudWxhcml0eSwgRGlyZWN0aW9uQmFja3dh
cmQpOwogICAgIGlmIChzdGFydFBvc2l0aW9uLmlzTm90TnVsbCgpICYmIHN0YXJ0UG9zaXRpb24g
IT0gcG9zaXRpb24pCi0gICAgICAgIGZyYW1lLnNlbGVjdGlvbigpLnNldFNlbGVjdGVkUmFuZ2Uo
UmFuZ2U6OmNyZWF0ZSgqZnJhbWUuZG9jdW1lbnQoKSwgc3RhcnRQb3NpdGlvbiwgcG9zaXRpb24p
LmdldCgpLCBwb3NpdGlvbi5hZmZpbml0eSgpLCB0cnVlKTsKKyAgICAgICAgZnJhbWUuc2VsZWN0
aW9uKCkuc2V0U2VsZWN0ZWRSYW5nZShSYW5nZTo6Y3JlYXRlKCpmcmFtZS5kb2N1bWVudCgpLCBz
dGFydFBvc2l0aW9uLCBwb3NpdGlvbikuZ2V0KCksIHBvc2l0aW9uLmFmZmluaXR5KCksIGZhbHNl
LCB0cnVlKTsKIH0KIAogdm9pZCBXZWJQYWdlOjptb3ZlU2VsZWN0aW9uQnlPZmZzZXQoaW50MzJf
dCBvZmZzZXQsIHVpbnQ2NF90IGNhbGxiYWNrSUQpCkBAIC0xNTU2LDcgKzE1NTYsNyBAQAogICAg
ICAgICAgICAgYnJlYWs7CiAgICAgfQogICAgIGlmIChwb3NpdGlvbi5pc05vdE51bGwoKSAmJiBz
dGFydFBvc2l0aW9uICE9IHBvc2l0aW9uKQotICAgICAgICBmcmFtZS5zZWxlY3Rpb24oKS5zZXRT
ZWxlY3RlZFJhbmdlKFJhbmdlOjpjcmVhdGUoKmZyYW1lLmRvY3VtZW50KCksIHBvc2l0aW9uLCBw
b3NpdGlvbikuZ2V0KCksIHBvc2l0aW9uLmFmZmluaXR5KCksIHRydWUpOworICAgICAgICBmcmFt
ZS5zZWxlY3Rpb24oKS5zZXRTZWxlY3RlZFJhbmdlKFJhbmdlOjpjcmVhdGUoKmZyYW1lLmRvY3Vt
ZW50KCksIHBvc2l0aW9uLCBwb3NpdGlvbikuZ2V0KCksIHBvc2l0aW9uLmFmZmluaXR5KCksIGZh
bHNlLCB0cnVlKTsKICAgICBzZW5kKE1lc3NhZ2VzOjpXZWJQYWdlUHJveHk6OlZvaWRDYWxsYmFj
ayhjYWxsYmFja0lEKSk7CiB9CiAKQEAgLTE2MTgsNyArMTYxOCw3IEBACiAgICAgICAgIHJldHVy
bjsKICAgICAKICAgICBmcmFtZS5lZGl0b3IoKS5zZXRJZ25vcmVDb21wb3NpdGlvblNlbGVjdGlv
bkNoYW5nZSh0cnVlKTsKLSAgICBmcmFtZS5zZWxlY3Rpb24oKS5zZXRTZWxlY3RlZFJhbmdlKHdv
cmRSYW5nZS5nZXQoKSwgVVBTVFJFQU0sIHRydWUpOworICAgIGZyYW1lLnNlbGVjdGlvbigpLnNl
dFNlbGVjdGVkUmFuZ2Uod29yZFJhbmdlLmdldCgpLCBVUFNUUkVBTSwgZmFsc2UsIHRydWUpOwog
ICAgIGZyYW1lLmVkaXRvcigpLmluc2VydFRleHQobmV3VGV4dCwgMCk7CiAgICAgZnJhbWUuZWRp
dG9yKCkuc2V0SWdub3JlQ29tcG9zaXRpb25TZWxlY3Rpb25DaGFuZ2UoZmFsc2UpOwogfQpAQCAt
MTY0NSw3ICsxNjQ1LDcgQEAKIAogICAgIC8vIFdlIGRvbid0IHdhbnQgdG8gbm90aWZ5IHRoZSBj
bGllbnQgdGhhdCB0aGUgc2VsZWN0aW9uIGhhcyBjaGFuZ2VkIHVudGlsIHdlIGFyZSBkb25lIGlu
c2VydGluZyB0aGUgbmV3IHRleHQuCiAgICAgZnJhbWUuZWRpdG9yKCkuc2V0SWdub3JlQ29tcG9z
aXRpb25TZWxlY3Rpb25DaGFuZ2UodHJ1ZSk7Ci0gICAgZnJhbWUuc2VsZWN0aW9uKCkuc2V0U2Vs
ZWN0ZWRSYW5nZShyYW5nZS5nZXQoKSwgVVBTVFJFQU0sIHRydWUpOworICAgIGZyYW1lLnNlbGVj
dGlvbigpLnNldFNlbGVjdGVkUmFuZ2UocmFuZ2UuZ2V0KCksIFVQU1RSRUFNLCBmYWxzZSwgdHJ1
ZSk7CiAgICAgZnJhbWUuZWRpdG9yKCkuaW5zZXJ0VGV4dChuZXdUZXh0LCAwKTsKICAgICBmcmFt
ZS5lZGl0b3IoKS5zZXRJZ25vcmVDb21wb3NpdGlvblNlbGVjdGlvbkNoYW5nZShmYWxzZSk7CiB9
CkBAIC0xNzU3LDcgKzE3NTcsNyBAQAogICAgICAgICByZXR1cm47CiAgICAgfQogICAgIAotICAg
IGZyYW1lLnNlbGVjdGlvbigpLnNldFNlbGVjdGVkUmFuZ2UocmFuZ2UuZ2V0KCksIFVQU1RSRUFN
LCB0cnVlKTsKKyAgICBmcmFtZS5zZWxlY3Rpb24oKS5zZXRTZWxlY3RlZFJhbmdlKHJhbmdlLmdl
dCgpLCBVUFNUUkVBTSwgZmFsc2UsIHRydWUpOwogICAgIGlmIChjb3JyZWN0aW9uLmxlbmd0aCgp
KQogICAgICAgICBmcmFtZS5lZGl0b3IoKS5pbnNlcnRUZXh0KGNvcnJlY3Rpb24sIDApOwogICAg
IGVsc2UK
</data>

          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>238794</attachid>
            <date>2014-09-27 16:34:58 -0700</date>
            <delta_ts>2014-09-29 18:10:05 -0700</delta_ts>
            <desc>A more complete patch</desc>
            <filename>15256.patch</filename>
            <type>text/plain</type>
            <size>59906</size>
            <attacher name="David Gatwood">dgatwood</attacher>
            
              <data encoding="base64">SW5kZXg6IEphdmFTY3JpcHRDb3JlL0phdmFTY3JpcHRDb3JlLnhjb2RlcHJvai9wcm9qZWN0LnBi
eHByb2oKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PQotLS0gSmF2YVNjcmlwdENvcmUvSmF2YVNjcmlwdENvcmUueGNvZGVw
cm9qL3Byb2plY3QucGJ4cHJvagkocmV2aXNpb24gMTczOTA1KQorKysgSmF2YVNjcmlwdENvcmUv
SmF2YVNjcmlwdENvcmUueGNvZGVwcm9qL3Byb2plY3QucGJ4cHJvagkod29ya2luZyBjb3B5KQpA
QCAtNzM2MSw2ICs3MzYxLDggQEAKIAkJMTQ5QzI3NkUwODkwMkFGRTAwOEE5RUZDIC8qIFJlbGVh
c2UgKi8gPSB7CiAJCQlpc2EgPSBYQ0J1aWxkQ29uZmlndXJhdGlvbjsKIAkJCWJ1aWxkU2V0dGlu
Z3MgPSB7CisJCQkJT1RIRVJfQ0ZMQUdTID0gIiQoQVNBTl9PVEhFUl9DRkxBR1MpIjsKKwkJCQlP
VEhFUl9MREZMQUdTID0gIiQoQVNBTl9PVEhFUl9MREZMQUdTKSI7CiAJCQkJUFJPRFVDVF9OQU1F
ID0gQWxsOwogCQkJfTsKIAkJCW5hbWUgPSBSZWxlYXNlOwpJbmRleDogV2ViQ29yZS9XZWJDb3Jl
LmV4cC5pbgo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09Ci0tLSBXZWJDb3JlL1dlYkNvcmUuZXhwLmluCShyZXZpc2lvbiAx
NzM5MDUpCisrKyBXZWJDb3JlL1dlYkNvcmUuZXhwLmluCSh3b3JraW5nIGNvcHkpCkBAIC0zNTks
MTAgKzM1OSwxMSBAQAogX19aTjdXZWJDb3JlMTREb2N1bWVudFdyaXRlcjExc2V0RW5jb2RpbmdF
UktOM1dURjZTdHJpbmdFYgogX19aTjdXZWJDb3JlMTRGaWxlSWNvbkxvYWRlcjE0bm90aWZ5Rmlu
aXNoZWRFTjNXVEYxMFBhc3NSZWZQdHJJTlNfNEljb25FRUUKIF9fWk43V2ViQ29yZTE0Rm9ybUNv
bnRyb2xsZXIyMmdldFJlZmVyZW5jZWRGaWxlUGF0aHNFUktOM1dURjZWZWN0b3JJTlMxXzZTdHJp
bmdFTG0wRU5TMV8xNUNyYXNoT25PdmVyZmxvd0VFRQorX19aTjdXZWJDb3JlMTRGcmFtZVNlbGVj
dGlvbkQxRXYKIF9fWk43V2ViQ29yZTE0RnJhbWVTZWxlY3Rpb24xMHNldEZvY3VzZWRFYgogX19a
TjdXZWJDb3JlMTRGcmFtZVNlbGVjdGlvbjEyc2V0U2VsZWN0aW9uRVJLTlNfMTZWaXNpYmxlU2Vs
ZWN0aW9uRWpOUzBfMTlDdXJzb3JBbGlnbk9uU2Nyb2xsRU5TXzE1VGV4dEdyYW51bGFyaXR5RQog
X19aTjdXZWJDb3JlMTRGcmFtZVNlbGVjdGlvbjE1cmV2ZWFsU2VsZWN0aW9uRVJLTlNfMTVTY3Jv
bGxBbGlnbm1lbnRFTlNfMThSZXZlYWxFeHRlbnRPcHRpb25FCi1fX1pON1dlYkNvcmUxNEZyYW1l
U2VsZWN0aW9uMTZzZXRTZWxlY3RlZFJhbmdlRVBOU181UmFuZ2VFTlNfOUVBZmZpbml0eUViCitf
X1pON1dlYkNvcmUxNEZyYW1lU2VsZWN0aW9uMTZzZXRTZWxlY3RlZFJhbmdlRVBOU181UmFuZ2VF
TlNfOUVBZmZpbml0eUViagogX19aTjdXZWJDb3JlMTRGcmFtZVNlbGVjdGlvbjE5YWJzb2x1dGVD
YXJldEJvdW5kc0V2CiBfX1pON1dlYkNvcmUxNEZyYW1lU2VsZWN0aW9uMjBzZXRTZWxlY3Rpb25G
cm9tTm9uZUV2CiBfX1pON1dlYkNvcmUxNEZyYW1lU2VsZWN0aW9uNWNsZWFyRXYKQEAgLTcyNCw2
ICs3MjUsOCBAQAogX19aTjdXZWJDb3JlMTZUaHJlYWRHbG9iYWxEYXRhMTBzdGF0aWNEYXRhRQog
X19aTjdXZWJDb3JlMTZUaHJlYWRHbG9iYWxEYXRhQzFFdgogX19aTjdXZWJDb3JlMTZUaHJlYWRH
bG9iYWxEYXRhRDFFdgorX19aTjdXZWJDb3JlMTZWaXNpYmxlU2VsZWN0aW9uQzFFUktTMF8KK19f
Wk43V2ViQ29yZTE2VmlzaWJsZVNlbGVjdGlvbkQxRXYKIF9fWk43V2ViQ29yZTE2VmlzaWJsZVNl
bGVjdGlvbjIyZXhwYW5kVXNpbmdHcmFudWxhcml0eUVOU18xNVRleHRHcmFudWxhcml0eUUKIF9f
Wk43V2ViQ29yZTE2VmlzaWJsZVNlbGVjdGlvbkMxRVBLTlNfNVJhbmdlRU5TXzlFQWZmaW5pdHlF
YgogX19aTjdXZWJDb3JlMTZWaXNpYmxlU2VsZWN0aW9uQzFFUktOU18xNVZpc2libGVQb3NpdGlv
bkVTM19iCkBAIC0zMzUxLDYgKzMzNTQsNyBAQAogX19aTks3V2ViQ29yZTExSW1hZ2VCdWZmZXI5
Y29weUltYWdlRU5TXzE2QmFja2luZ1N0b3JlQ29weUVOU18xM1NjYWxlQmVoYXZpb3JFCiBfX1pO
SzdXZWJDb3JlMTZWaXNpYmxlU2VsZWN0aW9uMTBmaXJzdFJhbmdlRXYKICNlbmRpZgorX19aTks3
V2ViQ29yZTE0RnJhbWVTZWxlY3Rpb24xMGZpcnN0UmFuZ2VFdgogCiAjaWYgRU5BQkxFKFNQRUVD
SF9TWU5USEVTSVMpCiBfX1pON1dlYkNvcmUxNVNwZWVjaFN5bnRoZXNpczIyc2V0UGxhdGZvcm1T
eW50aGVzaXplckVOU3QzX18xMTB1bmlxdWVfcHRySU5TXzI1UGxhdGZvcm1TcGVlY2hTeW50aGVz
aXplckVOUzFfMTRkZWZhdWx0X2RlbGV0ZUlTM19FRUVFCkluZGV4OiBXZWJDb3JlL2FjY2Vzc2li
aWxpdHkvQWNjZXNzaWJpbGl0eU9iamVjdC5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gV2ViQ29yZS9hY2Nl
c3NpYmlsaXR5L0FjY2Vzc2liaWxpdHlPYmplY3QuY3BwCShyZXZpc2lvbiAxNzM5MDUpCisrKyBX
ZWJDb3JlL2FjY2Vzc2liaWxpdHkvQWNjZXNzaWJpbGl0eU9iamVjdC5jcHAJKHdvcmtpbmcgY29w
eSkKQEAgLTY0Niw3ICs2NDYsNyBAQAogICAgIGlmIChSZWZQdHI8UmFuZ2U+IGNsb3Nlc3RTdHJp
bmdSYW5nZSA9IHJhbmdlQ2xvc2VzdFRvUmFuZ2Uoc2VsZWN0ZWRTdHJpbmdSYW5nZS5nZXQoKSwg
Y2xvc2VzdEFmdGVyU3RyaW5nUmFuZ2UsIGNsb3Nlc3RCZWZvcmVTdHJpbmdSYW5nZSkpIHsKICAg
ICAgICAgU3RyaW5nIGNsb3Nlc3RTdHJpbmcgPSBjbG9zZXN0U3RyaW5nUmFuZ2UtPnRleHQoKTsK
ICAgICAgICAgYm9vbCByZXBsYWNlU2VsZWN0aW9uID0gZmFsc2U7Ci0gICAgICAgIGlmIChmcmFt
ZS0+c2VsZWN0aW9uKCkuc2V0U2VsZWN0ZWRSYW5nZShjbG9zZXN0U3RyaW5nUmFuZ2UuZ2V0KCks
IERPV05TVFJFQU0sIHRydWUpKSB7CisgICAgICAgIGlmIChmcmFtZS0+c2VsZWN0aW9uKCkuc2V0
U2VsZWN0ZWRSYW5nZShjbG9zZXN0U3RyaW5nUmFuZ2UuZ2V0KCksIERPV05TVFJFQU0sIGZhbHNl
LCB0cnVlKSkgewogICAgICAgICAgICAgc3dpdGNoIChhY3Rpdml0eSkgewogICAgICAgICAgICAg
Y2FzZSBGaW5kQW5kQ2FwaXRhbGl6ZTogewogICAgICAgICAgICAgICAgIHJlcGxhY2VtZW50U3Ry
aW5nID0gY2xvc2VzdFN0cmluZzsKSW5kZXg6IFdlYkNvcmUvZG9tL1Bvc2l0aW9uLmNwcAo9PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09Ci0tLSBXZWJDb3JlL2RvbS9Qb3NpdGlvbi5jcHAJKHJldmlzaW9uIDE3MzkwNSkKKysr
IFdlYkNvcmUvZG9tL1Bvc2l0aW9uLmNwcAkod29ya2luZyBjb3B5KQpAQCAtMSw1ICsxLDYgQEAK
IC8qCiAgKiBDb3B5cmlnaHQgKEMpIDIwMDQsIDIwMDUsIDIwMDYsIDIwMDksIDIwMTMgQXBwbGUg
SW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICogUG9ydGlvbnMgQ29weXJpZ2h0IChjKSAyMDE0
IERhdmlkIEEuIEdhdHdvb2QuICBBbGwgcmlnaHRzIHJlc2VydmVkLgogICoKICAqIFJlZGlzdHJp
YnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91
dAogICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxv
d2luZyBjb25kaXRpb25zCkBAIC00OCw3ICs0OSw3IEBACiAjaW5jbHVkZSA8c3RkaW8uaD4KICNp
bmNsdWRlIDx3dGYvdGV4dC9DU3RyaW5nLmg+CiAjaW5jbHVkZSA8d3RmL3VuaWNvZGUvQ2hhcmFj
dGVyTmFtZXMuaD4KLSAgCisKIG5hbWVzcGFjZSBXZWJDb3JlIHsKIAogdXNpbmcgbmFtZXNwYWNl
IEhUTUxOYW1lczsKQEAgLTMwNyw4ICszMDgsOSBAQAogICAgIEFTU0VSVChvZmZzZXQgPj0gMCk7
CiAKICAgICBpZiAob2Zmc2V0ID4gMCkgewotICAgICAgICBpZiAoTm9kZSogY2hpbGQgPSBub2Rl
LT50cmF2ZXJzZVRvQ2hpbGRBdChvZmZzZXQgLSAxKSkKKyAgICAgICAgaWYgKE5vZGUqIGNoaWxk
ID0gbm9kZS0+dHJhdmVyc2VUb0NoaWxkQXQob2Zmc2V0IC0gMSkpIHsKICAgICAgICAgICAgIHJl
dHVybiBsYXN0UG9zaXRpb25Jbk9yQWZ0ZXJOb2RlKGNoaWxkKTsKKyAgICAgICAgfQogCiAgICAg
ICAgIC8vIFRoZXJlIGFyZSB0d28gcmVhc29ucyBjaGlsZCBtaWdodCBiZSAwOgogICAgICAgICAv
LyAgIDEpIFRoZSBub2RlIGlzIG5vZGUgbGlrZSBhIHRleHQgbm9kZSB0aGF0IGlzIG5vdCBhbiBl
bGVtZW50LCBhbmQgdGhlcmVmb3JlIGhhcyBubyBjaGlsZHJlbi4KQEAgLTUzMiw2ICs1MzQsMTMg
QEAKICAgICBpZiAoaXNIVE1MVGFibGVFbGVtZW50KG5vZGUpKQogICAgICAgICByZXR1cm4gZmFs
c2U7CiAgICAgCisgICAgaWYgKG5vZGUtPmlzRWxlbWVudE5vZGUoKSkgeworICAgICAgICBFbGVt
ZW50ICplbHQgPSB0b0VsZW1lbnQobm9kZSk7CisgICAgICAgIGlmIChlbHQtPmJlZm9yZVBzZXVk
b0VsZW1lbnQoKSB8fCBlbHQtPmFmdGVyUHNldWRvRWxlbWVudCgpKSB7CisgICAgICAgICAgICBy
ZXR1cm4gdHJ1ZTsKKyAgICAgICAgfQorICAgIH0KKyAgICAKICAgICAvLyBUaGVyZSBpcyBhIFZp
c2libGVQb3NpdGlvbiBpbnNpZGUgYW4gZW1wdHkgaW5saW5lLWJsb2NrIGNvbnRhaW5lci4KICAg
ICByZXR1cm4gbm9kZS0+cmVuZGVyZXIoKS0+aXNSZXBsYWNlZCgpICYmIGNhbkhhdmVDaGlsZHJl
bkZvckVkaXRpbmcobm9kZSkgJiYgdG9SZW5kZXJCb3gobm9kZS0+cmVuZGVyZXIoKSktPmhlaWdo
dCgpICE9IDAgJiYgIW5vZGUtPmZpcnN0Q2hpbGQoKTsKIH0KQEAgLTU3MSw4ICs1ODAsMTAgQEAK
ICAgICAKICAgICAvLyBpdGVyYXRlIGJhY2t3YXJkIGZyb20gdGhlcmUsIGxvb2tpbmcgZm9yIGEg
cXVhbGlmaWVkIHBvc2l0aW9uCiAgICAgTm9kZSogYm91bmRhcnkgPSBlbmNsb3NpbmdWaXN1YWxC
b3VuZGFyeShzdGFydE5vZGUpOworICAgIAogICAgIC8vIEZJWE1FOiBQb3NpdGlvbkl0ZXJhdG9y
IHNob3VsZCByZXNwZWN0IEJlZm9yZSBhbmQgQWZ0ZXIgcG9zaXRpb25zLgogICAgIFBvc2l0aW9u
SXRlcmF0b3IgbGFzdFZpc2libGUgPSBtX2FuY2hvclR5cGUgPT0gUG9zaXRpb25Jc0FmdGVyQW5j
aG9yID8gY3JlYXRlTGVnYWN5RWRpdGluZ1Bvc2l0aW9uKG1fYW5jaG9yTm9kZS5nZXQoKSwgY2Fy
ZXRNYXhPZmZzZXQobV9hbmNob3JOb2RlLmdldCgpKSkgOiAqdGhpczsKKyAgICAKICAgICBQb3Np
dGlvbkl0ZXJhdG9yIGN1cnJlbnRQb3MgPSBsYXN0VmlzaWJsZTsKICAgICBib29sIHN0YXJ0RWRp
dGFibGUgPSBzdGFydE5vZGUtPmhhc0VkaXRhYmxlU3R5bGUoKTsKICAgICBOb2RlKiBsYXN0Tm9k
ZSA9IHN0YXJ0Tm9kZTsKQEAgLTk0NCw2ICs5NTUsMjEgQEAKICAgICAgICAgfQogICAgICAgICBy
ZXR1cm4gZmFsc2U7CiAgICAgfQorICAgIAorICAgIC8qIElmIHRoZSBwb3NpdGlvbiBpcyBpbiB0
aGUgbWlkZGxlIG9mIGFuIGVsZW1lbnQgdGhhdCBjb250YWlucyBib3RoIGJlZm9yZSBhbmQgYWZ0
ZXIKKyAgICAgcHNldWRvZWxlbWVudHMsIHRoZW4gdGhlIHBvc2l0aW9uIGlzLCBieSBkZWZpbml0
aW9uLCB2aXN1YWxseSBkaXN0aW5jdCBmcm9tIHRoZQorICAgICBwb3NpdGlvbiBvbiBlaXRoZXIg
c2lkZSwgc28gaWYgdGhlcmUgYXJlIG5vIGNoaWxkIG5vZGVzIHRoYXQgd291bGQgb3RoZXJ3aXNl
CisgICAgIGNvbnN0aXR1dGUgYSBjYW5kaWRhdGUgcG9zaXRpb24sIHRyZWF0IHRoZSBpbnRlcmlv
ciBvZiB0aGUgbm9kZSBhcyBhIGNhbmRpZGF0ZS4KKyAgICAgKi8KKyAgICBOb2RlICpub2RlID0g
ZGVwcmVjYXRlZE5vZGUoKTsKKyAgICBpZiAobm9kZS0+aXNFbGVtZW50Tm9kZSgpKSB7CisgICAg
ICAgIEVsZW1lbnQgKmVsdCA9IHRvRWxlbWVudChub2RlKTsKKyAgICAgICAgaWYgKCFlbHQtPmZp
cnN0Q2hpbGQoKSkgeworICAgICAgICAgICAgaWYgKGVsdC0+YmVmb3JlUHNldWRvRWxlbWVudCgp
ICYmIGVsdC0+YWZ0ZXJQc2V1ZG9FbGVtZW50KCkpIHsKKyAgICAgICAgICAgICAgICByZXR1cm4g
dHJ1ZTsKKyAgICAgICAgICAgIH0KKyAgICAgICAgfQorICAgIH0KIAogICAgIHJldHVybiBtX2Fu
Y2hvck5vZGUtPmhhc0VkaXRhYmxlU3R5bGUoKSAmJiAhUG9zaXRpb246Om5vZGVJc1VzZXJTZWxl
Y3ROb25lKGRlcHJlY2F0ZWROb2RlKCkpICYmIGF0RWRpdGluZ0JvdW5kYXJ5KCk7CiB9CkluZGV4
OiBXZWJDb3JlL2VkaXRpbmcvRWRpdG9yLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBXZWJDb3JlL2VkaXRp
bmcvRWRpdG9yLmNwcAkocmV2aXNpb24gMTczOTA1KQorKysgV2ViQ29yZS9lZGl0aW5nL0VkaXRv
ci5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTE4ODEsNyArMTg4MSw3IEBACiAgICAgICAgICAgICB1
bnNpZ25lZCBzdGFydCA9IHN0ZDo6bWluKGJhc2VPZmZzZXQgKyBzZWxlY3Rpb25TdGFydCwgZXh0
ZW50T2Zmc2V0KTsKICAgICAgICAgICAgIHVuc2lnbmVkIGVuZCA9IHN0ZDo6bWluKHN0ZDo6bWF4
KHN0YXJ0LCBiYXNlT2Zmc2V0ICsgc2VsZWN0aW9uRW5kKSwgZXh0ZW50T2Zmc2V0KTsKICAgICAg
ICAgICAgIFJlZlB0cjxSYW5nZT4gc2VsZWN0ZWRSYW5nZSA9IFJhbmdlOjpjcmVhdGUoYmFzZU5v
ZGUtPmRvY3VtZW50KCksIGJhc2VOb2RlLCBzdGFydCwgYmFzZU5vZGUsIGVuZCk7Ci0gICAgICAg
ICAgICBtX2ZyYW1lLnNlbGVjdGlvbigpLnNldFNlbGVjdGVkUmFuZ2Uoc2VsZWN0ZWRSYW5nZS5n
ZXQoKSwgRE9XTlNUUkVBTSwgZmFsc2UpOworICAgICAgICAgICAgbV9mcmFtZS5zZWxlY3Rpb24o
KS5zZXRTZWxlY3RlZFJhbmdlKHNlbGVjdGVkUmFuZ2UuZ2V0KCksIERPV05TVFJFQU0sIGZhbHNl
LCBmYWxzZSk7CiAgICAgICAgIH0KICAgICB9CiAKSW5kZXg6IFdlYkNvcmUvZWRpdGluZy9FZGl0
b3JDb21tYW5kLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBXZWJDb3JlL2VkaXRpbmcvRWRpdG9yQ29tbWFu
ZC5jcHAJKHJldmlzaW9uIDE3MzkwNSkKKysrIFdlYkNvcmUvZWRpdGluZy9FZGl0b3JDb21tYW5k
LmNwcAkod29ya2luZyBjb3B5KQpAQCAtMjE5LDcgKzIxOSw3IEBACiAgICAgRUFmZmluaXR5IGFm
ZmluaXR5ID0gc2VsZWN0aW9uLmFmZmluaXR5KCk7CiAgICAgaWYgKCFmcmFtZS5lZGl0b3IoKS5j
bGllbnQoKS0+c2hvdWxkQ2hhbmdlU2VsZWN0ZWRSYW5nZShvbGRSYW5nZS5nZXQoKSwgbmV3UmFu
Z2UuZ2V0KCksIGFmZmluaXR5LCBmYWxzZSkpCiAgICAgICAgIHJldHVybiBmYWxzZTsKLSAgICBm
cmFtZS5zZWxlY3Rpb24oKS5zZXRTZWxlY3RlZFJhbmdlKG5ld1JhbmdlLmdldCgpLCBhZmZpbml0
eSwgdHJ1ZSk7CisgICAgZnJhbWUuc2VsZWN0aW9uKCkuc2V0U2VsZWN0ZWRSYW5nZShuZXdSYW5n
ZS5nZXQoKSwgYWZmaW5pdHksIGZhbHNlLCBGcmFtZVNlbGVjdGlvbjo6Q2xvc2VUeXBpbmcpOwog
ICAgIHJldHVybiB0cnVlOwogfQogCkBAIC0zOTAsNyArMzkwLDcgQEAKICAgICBSZWZQdHI8UmFu
Z2U+IG1hcmsgPSBmcmFtZS5lZGl0b3IoKS5tYXJrKCkudG9Ob3JtYWxpemVkUmFuZ2UoKTsKICAg
ICBGcmFtZVNlbGVjdGlvbiYgc2VsZWN0aW9uID0gZnJhbWUuc2VsZWN0aW9uKCk7CiAgICAgaWYg
KG1hcmspIHsKLSAgICAgICAgYm9vbCBzZWxlY3RlZCA9IHNlbGVjdGlvbi5zZXRTZWxlY3RlZFJh
bmdlKHVuaW9uRE9NUmFuZ2VzKG1hcmsuZ2V0KCksIGZyYW1lLmVkaXRvcigpLnNlbGVjdGVkUmFu
Z2UoKS5nZXQoKSkuZ2V0KCksIERPV05TVFJFQU0sIHRydWUpOworCWJvb2wgc2VsZWN0ZWQgPSBm
cmFtZS5zZWxlY3Rpb24oKS5zZXRTZWxlY3RlZFJhbmdlKHVuaW9uRE9NUmFuZ2VzKG1hcmsuZ2V0
KCksIGZyYW1lLmVkaXRvcigpLnNlbGVjdGVkUmFuZ2UoKS5nZXQoKSkuZ2V0KCksIERPV05TVFJF
QU0sIGZhbHNlLCBGcmFtZVNlbGVjdGlvbjo6Q2xvc2VUeXBpbmcpOwogICAgICAgICBBU1NFUlQo
c2VsZWN0ZWQpOwogICAgICAgICBpZiAoIXNlbGVjdGVkKQogICAgICAgICAgICAgcmV0dXJuIGZh
bHNlOwpAQCAtMTA0Myw3ICsxMDQzLDggQEAKICAgICAgICAgc3lzdGVtQmVlcCgpOwogICAgICAg
ICByZXR1cm4gZmFsc2U7CiAgICAgfQotICAgIGZyYW1lLnNlbGVjdGlvbigpLnNldFNlbGVjdGVk
UmFuZ2UodW5pb25ET01SYW5nZXMobWFyay5nZXQoKSwgc2VsZWN0aW9uLmdldCgpKS5nZXQoKSwg
RE9XTlNUUkVBTSwgdHJ1ZSk7CisgICAgZnJhbWUuc2VsZWN0aW9uKCkuc2V0U2VsZWN0ZWRSYW5n
ZSh1bmlvbkRPTVJhbmdlcyhtYXJrLmdldCgpLCBzZWxlY3Rpb24uZ2V0KCkpLmdldCgpLCBET1dO
U1RSRUFNLCBmYWxzZSwgRnJhbWVTZWxlY3Rpb246OkNsb3NlVHlwaW5nKTsKKwogICAgIHJldHVy
biB0cnVlOwogfQogCkluZGV4OiBXZWJDb3JlL2VkaXRpbmcvRnJhbWVTZWxlY3Rpb24uY3BwCj09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT0KLS0tIFdlYkNvcmUvZWRpdGluZy9GcmFtZVNlbGVjdGlvbi5jcHAJKHJldmlzaW9u
IDE3MzkwNSkKKysrIFdlYkNvcmUvZWRpdGluZy9GcmFtZVNlbGVjdGlvbi5jcHAJKHdvcmtpbmcg
Y29weSkKQEAgLTExMCw2ICsxMTAsNyBAQAogRnJhbWVTZWxlY3Rpb246OkZyYW1lU2VsZWN0aW9u
KEZyYW1lKiBmcmFtZSkKICAgICA6IG1fZnJhbWUoZnJhbWUpCiAgICAgLCBtX3hQb3NGb3JWZXJ0
aWNhbEFycm93TmF2aWdhdGlvbihOb1hQb3NGb3JWZXJ0aWNhbEFycm93TmF2aWdhdGlvbigpKQor
ICAgICwgbV9vYnNlcnZpbmdWaXNpYmxlU2VsZWN0aW9uKGZhbHNlKQogICAgICwgbV9ncmFudWxh
cml0eShDaGFyYWN0ZXJHcmFudWxhcml0eSkKICAgICAsIG1fY2FyZXRCbGlua1RpbWVyKHRoaXMs
ICZGcmFtZVNlbGVjdGlvbjo6Y2FyZXRCbGlua1RpbWVyRmlyZWQpCiAgICAgLCBtX2Fic0NhcmV0
Qm91bmRzRGlydHkodHJ1ZSkKQEAgLTEzMCw2ICsxMzEsMTEgQEAKICAgICAgICAgbV9zZWxlY3Rp
b24uc2V0SXNEaXJlY3Rpb25hbCh0cnVlKTsKIH0KIAorRnJhbWVTZWxlY3Rpb246On5GcmFtZVNl
bGVjdGlvbigpCit7CisgICAgc3RvcE9ic2VydmluZ1Zpc2libGVTZWxlY3Rpb25DaGFuZ2VJZk5l
Y2Vzc2FyeSgpOworfQorCiBFbGVtZW50KiBGcmFtZVNlbGVjdGlvbjo6cm9vdEVkaXRhYmxlRWxl
bWVudE9yRG9jdW1lbnRFbGVtZW50KCkgY29uc3QKIHsKICAgICBFbGVtZW50KiBzZWxlY3Rpb25S
b290ID0gbV9zZWxlY3Rpb24ucm9vdEVkaXRhYmxlRWxlbWVudCgpOwpAQCAtMTcxNSwyNCArMTcy
MSw0MyBAQAogICAgICAgICBzZXRTZWxlY3Rpb24obmV3U2VsZWN0aW9uLCBkZWZhdWx0U2V0U2Vs
ZWN0aW9uT3B0aW9ucygpIHwgRmlyZVNlbGVjdEV2ZW50KTsKIH0KIAotYm9vbCBGcmFtZVNlbGVj
dGlvbjo6c2V0U2VsZWN0ZWRSYW5nZShSYW5nZSogcmFuZ2UsIEVBZmZpbml0eSBhZmZpbml0eSwg
Ym9vbCBjbG9zZVR5cGluZykKK2Jvb2wgRnJhbWVTZWxlY3Rpb246OnNldFNlbGVjdGVkUmFuZ2Uo
UmFuZ2UqIHJhbmdlLCBFQWZmaW5pdHkgYWZmaW5pdHksIGJvb2wgaXNEaXJlY3Rpb25hbCwgU2V0
U2VsZWN0aW9uT3B0aW9ucyBvcHRpb25zKQogewogICAgIGlmICghcmFuZ2UgfHwgIXJhbmdlLT5z
dGFydENvbnRhaW5lcigpIHx8ICFyYW5nZS0+ZW5kQ29udGFpbmVyKCkpCiAgICAgICAgIHJldHVy
biBmYWxzZTsKICAgICBBU1NFUlQoJnJhbmdlLT5zdGFydENvbnRhaW5lcigpLT5kb2N1bWVudCgp
ID09ICZyYW5nZS0+ZW5kQ29udGFpbmVyKCktPmRvY3VtZW50KCkpOwogCi0gICAgVmlzaWJsZVNl
bGVjdGlvbiBuZXdTZWxlY3Rpb24ocmFuZ2UsIGFmZmluaXR5KTsKKyAgICBFeGNlcHRpb25Db2Rl
IGVjID0gMDsKKyAgICBib29sIGNvbGxhcHNlZCA9IHJhbmdlLT5jb2xsYXBzZWQoZWMpOworICAg
IGlmIChlYykKKyAgICAgICAgcmV0dXJuIGZhbHNlOwogCisgICAgVmlzaWJsZVNlbGVjdGlvbiBu
ZXdTZWxlY3Rpb24ocmFuZ2UsIGNvbGxhcHNlZCA/IGFmZmluaXR5IDogRE9XTlNUUkVBTSwgaXNE
aXJlY3Rpb25hbCk7CisKICNpZiBQTEFURk9STShJT1MpCiAgICAgLy8gRklYTUU6IFdoeSBkbyB3
ZSBuZWVkIHRoaXMgY2hlY2sgb25seSBpbiBpT1M/CiAgICAgaWYgKHJhbmdlLT5zdGFydENvbnRh
aW5lcigpICYmIHJhbmdlLT5lbmRDb250YWluZXIoKSAmJiBuZXdTZWxlY3Rpb24uaXNOb25lKCkp
CiAgICAgICAgIHJldHVybiBmYWxzZTsKICNlbmRpZgogCi0gICAgc2V0U2VsZWN0aW9uKG5ld1Nl
bGVjdGlvbiwgQ2xlYXJUeXBpbmdTdHlsZSB8IChjbG9zZVR5cGluZyA/IENsb3NlVHlwaW5nIDog
MCkpOworICAgIG1fbG9naWNhbFJhbmdlID0gbnVsbHB0cjsKKyAgICBzdG9wT2JzZXJ2aW5nVmlz
aWJsZVNlbGVjdGlvbkNoYW5nZUlmTmVjZXNzYXJ5KCk7CisKKyAgICBzZXRTZWxlY3Rpb24obmV3
U2VsZWN0aW9uLCBvcHRpb25zKTsKKworICAgIG1fbG9naWNhbFJhbmdlID0gcmFuZ2UtPmNsb25l
UmFuZ2UoQVNTRVJUX05PX0VYQ0VQVElPTik7CisgICAgc3RhcnRPYnNlcnZpbmdWaXNpYmxlU2Vs
ZWN0aW9uQ2hhbmdlKCk7CisKICAgICByZXR1cm4gdHJ1ZTsKIH0KIAorUGFzc1JlZlB0cjxSYW5n
ZT4gRnJhbWVTZWxlY3Rpb246OmZpcnN0UmFuZ2UoKSBjb25zdAoreworICAgIGlmIChtX2xvZ2lj
YWxSYW5nZSkKKyAgICAgICAgcmV0dXJuIG1fbG9naWNhbFJhbmdlLT5jbG9uZVJhbmdlKEFTU0VS
VF9OT19FWENFUFRJT04pOworICAgIHJldHVybiBtX3NlbGVjdGlvbi5maXJzdFJhbmdlKCk7Cit9
CisKIHZvaWQgRnJhbWVTZWxlY3Rpb246OmZvY3VzZWRPckFjdGl2ZVN0YXRlQ2hhbmdlZCgpCiB7
CiAgICAgYm9vbCBhY3RpdmVBbmRGb2N1c2VkID0gaXNGb2N1c2VkQW5kQWN0aXZlKCk7CkBAIC0y
MTUyLDYgKzIxNzcsMzAgQEAKICAgICB1cGRhdGVEYXRhRGV0ZWN0b3JzRm9yU2VsZWN0aW9uKCk7
CiB9CiAKK3ZvaWQgRnJhbWVTZWxlY3Rpb246OmRpZENoYW5nZVZpc2libGVTZWxlY3Rpb24oKQor
eworICAgIEFTU0VSVChtX29ic2VydmluZ1Zpc2libGVTZWxlY3Rpb24pOworICAgIC8vIEludmFs
aWRhdGUgdGhlIGxvZ2ljYWwgcmFuZ2Ugd2hlbiB0aGUgdW5kZXJseWluZyBWaXNpYmxlU2VsZWN0
aW9uIGhhcyBjaGFuZ2VkLgorICAgIG1fbG9naWNhbFJhbmdlID0gbnVsbHB0cjsKKyAgICBtX3Nl
bGVjdGlvbi5jbGVhckNoYW5nZU9ic2VydmVyKCk7CisgICAgbV9vYnNlcnZpbmdWaXNpYmxlU2Vs
ZWN0aW9uID0gZmFsc2U7Cit9CisKK3ZvaWQgRnJhbWVTZWxlY3Rpb246OnN0YXJ0T2JzZXJ2aW5n
VmlzaWJsZVNlbGVjdGlvbkNoYW5nZSgpCit7CisgICAgQVNTRVJUKCFtX29ic2VydmluZ1Zpc2li
bGVTZWxlY3Rpb24pOworICAgIG1fc2VsZWN0aW9uLnNldENoYW5nZU9ic2VydmVyKCp0aGlzKTsK
KyAgICBtX29ic2VydmluZ1Zpc2libGVTZWxlY3Rpb24gPSB0cnVlOworfQorCit2b2lkIEZyYW1l
U2VsZWN0aW9uOjpzdG9wT2JzZXJ2aW5nVmlzaWJsZVNlbGVjdGlvbkNoYW5nZUlmTmVjZXNzYXJ5
KCkKK3sKKyAgICBpZiAobV9vYnNlcnZpbmdWaXNpYmxlU2VsZWN0aW9uKSB7CisgICAgICAgIG1f
c2VsZWN0aW9uLmNsZWFyQ2hhbmdlT2JzZXJ2ZXIoKTsKKyAgICAgICAgbV9vYnNlcnZpbmdWaXNp
YmxlU2VsZWN0aW9uID0gZmFsc2U7CisgICAgfQorfQorCiAjaWZuZGVmIE5ERUJVRwogCiB2b2lk
IEZyYW1lU2VsZWN0aW9uOjpmb3JtYXRGb3JEZWJ1Z2dlcihjaGFyKiBidWZmZXIsIHVuc2lnbmVk
IGxlbmd0aCkgY29uc3QKSW5kZXg6IFdlYkNvcmUvZWRpdGluZy9GcmFtZVNlbGVjdGlvbi5oCj09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT0KLS0tIFdlYkNvcmUvZWRpdGluZy9GcmFtZVNlbGVjdGlvbi5oCShyZXZpc2lvbiAx
NzM5MDUpCisrKyBXZWJDb3JlL2VkaXRpbmcvRnJhbWVTZWxlY3Rpb24uaAkod29ya2luZyBjb3B5
KQpAQCAtMTA5LDcgKzEwOSw3IEBACiAgICAgVmlzaWJsZVBvc2l0aW9uIG1fcG9zaXRpb247CiB9
OwogCi1jbGFzcyBGcmFtZVNlbGVjdGlvbiA6IHByaXZhdGUgQ2FyZXRCYXNlIHsKK2NsYXNzIEZy
YW1lU2VsZWN0aW9uIC8qIEZJTkFMICovIDogcHVibGljIFZpc2libGVTZWxlY3Rpb246OkNoYW5n
ZU9ic2VydmVyLCBwcml2YXRlIENhcmV0QmFzZSB7CiAgICAgV1RGX01BS0VfTk9OQ09QWUFCTEUo
RnJhbWVTZWxlY3Rpb24pOwogICAgIFdURl9NQUtFX0ZBU1RfQUxMT0NBVEVEOwogcHVibGljOgpA
QCAtMTMyLDYgKzEzMiw3IEBACiAgICAgfQogCiAgICAgV0VCQ09SRV9FWFBPUlQgZXhwbGljaXQg
RnJhbWVTZWxlY3Rpb24oRnJhbWUqID0gbnVsbHB0cik7CisgICAgV0VCQ09SRV9FWFBPUlQgdmly
dHVhbCB+RnJhbWVTZWxlY3Rpb24oKTsKIAogICAgIFdFQkNPUkVfRVhQT1JUIEVsZW1lbnQqIHJv
b3RFZGl0YWJsZUVsZW1lbnRPckRvY3VtZW50RWxlbWVudCgpIGNvbnN0OwogICAgICAKQEAgLTE0
NCw3ICsxNDUsOSBAQAogCiAgICAgY29uc3QgVmlzaWJsZVNlbGVjdGlvbiYgc2VsZWN0aW9uKCkg
Y29uc3QgeyByZXR1cm4gbV9zZWxlY3Rpb247IH0KICAgICBXRUJDT1JFX0VYUE9SVCB2b2lkIHNl
dFNlbGVjdGlvbihjb25zdCBWaXNpYmxlU2VsZWN0aW9uJiwgU2V0U2VsZWN0aW9uT3B0aW9ucyA9
IGRlZmF1bHRTZXRTZWxlY3Rpb25PcHRpb25zKCksIEN1cnNvckFsaWduT25TY3JvbGwgPSBBbGln
bkN1cnNvck9uU2Nyb2xsSWZOZWVkZWQsIFRleHRHcmFudWxhcml0eSA9IENoYXJhY3RlckdyYW51
bGFyaXR5KTsKLSAgICBXRUJDT1JFX0VYUE9SVCBib29sIHNldFNlbGVjdGVkUmFuZ2UoUmFuZ2Uq
LCBFQWZmaW5pdHksIGJvb2wgY2xvc2VUeXBpbmcpOworICAgIAorICAgIFdFQkNPUkVfRVhQT1JU
IGJvb2wgc2V0U2VsZWN0ZWRSYW5nZShSYW5nZSosIEVBZmZpbml0eSwgYm9vbCBpc0RpcmVjdGlv
bmFsLCBTZXRTZWxlY3Rpb25PcHRpb25zID0gQ2xvc2VUeXBpbmcgfCBDbGVhclR5cGluZ1N0eWxl
KTsKKyAgICAKICAgICBXRUJDT1JFX0VYUE9SVCB2b2lkIHNlbGVjdEFsbCgpOwogICAgIFdFQkNP
UkVfRVhQT1JUIHZvaWQgY2xlYXIoKTsKICAgICB2b2lkIHByZXBhcmVGb3JEZXN0cnVjdGlvbigp
OwpAQCAtMTgyLDcgKzE4NSwxMiBAQAogICAgIGJvb2wgaXNSYW5nZSgpIGNvbnN0IHsgcmV0dXJu
IG1fc2VsZWN0aW9uLmlzUmFuZ2UoKTsgfQogICAgIGJvb2wgaXNDYXJldE9yUmFuZ2UoKSBjb25z
dCB7IHJldHVybiBtX3NlbGVjdGlvbi5pc0NhcmV0T3JSYW5nZSgpOyB9CiAgICAgYm9vbCBpc0Fs
bChFZGl0aW5nQm91bmRhcnlDcm9zc2luZ1J1bGUgcnVsZSA9IENhbm5vdENyb3NzRWRpdGluZ0Jv
dW5kYXJ5KSBjb25zdCB7IHJldHVybiBtX3NlbGVjdGlvbi5pc0FsbChydWxlKTsgfQorICAgIGJv
b2wgaXNEaXJlY3Rpb25hbCgpIGNvbnN0IHsgcmV0dXJuIG1fc2VsZWN0aW9uLmlzRGlyZWN0aW9u
YWwoKTsgfQogICAgIAorICAgIC8vIElmIHRoaXMgRnJhbWVTZWxlY3Rpb24gaGFzIGEgbG9naWNh
bCByYW5nZSB3aGljaCBpcyBzdGlsbCB2YWxpZCwgdGhpcyBmdW5jdGlvbiByZXR1cm4gaXRzIGNs
b25lLiBPdGhlcndpc2UsCisgICAgLy8gdGhlIHJldHVybiB2YWx1ZSBmcm9tIHVuZGVybHlpbmcg
VmlzaWJsZVNlbGVjdGlvbidzIGZpcnN0UmFuZ2UoKSBpcyByZXR1cm5lZC4KKyAgICBQYXNzUmVm
UHRyPFJhbmdlPiBmaXJzdFJhbmdlKCkgY29uc3Q7CisKICAgICBQYXNzUmVmUHRyPFJhbmdlPiB0
b05vcm1hbGl6ZWRSYW5nZSgpIGNvbnN0IHsgcmV0dXJuIG1fc2VsZWN0aW9uLnRvTm9ybWFsaXpl
ZFJhbmdlKCk7IH0KIAogICAgIHZvaWQgZGVidWdSZW5kZXJlcihSZW5kZXJPYmplY3QqLCBib29s
IHNlbGVjdGVkKSBjb25zdDsKQEAgLTI2OCw2ICsyNzYsOSBAQAogICAgIGJvb2wgc2hvdWxkU2hv
d0Jsb2NrQ3Vyc29yKCkgY29uc3QgeyByZXR1cm4gbV9zaG91bGRTaG93QmxvY2tDdXJzb3I7IH0K
ICAgICB2b2lkIHNldFNob3VsZFNob3dCbG9ja0N1cnNvcihib29sKTsKIAorICAgIC8vIFZpc2li
bGVTZWxlY3Rpb246OkNoYW5nZU9ic2VydmVyIGludGVyZmFjZS4KKyAgICB2aXJ0dWFsIHZvaWQg
ZGlkQ2hhbmdlVmlzaWJsZVNlbGVjdGlvbigpIC8qIE9WRVJSSURFICovIDsKKwogcHJpdmF0ZToK
ICAgICBlbnVtIEVQb3NpdGlvblR5cGUgeyBTVEFSVCwgRU5ELCBCQVNFLCBFWFRFTlQgfTsKIApA
QCAtMzE3LDE0ICszMjgsMjMgQEAKIAogICAgIGJvb2wgZGlzcGF0Y2hTZWxlY3RTdGFydCgpOwog
CisgICAgdm9pZCBzdGFydE9ic2VydmluZ1Zpc2libGVTZWxlY3Rpb25DaGFuZ2UoKTsKKyAgICB2
b2lkIHN0b3BPYnNlcnZpbmdWaXNpYmxlU2VsZWN0aW9uQ2hhbmdlSWZOZWNlc3NhcnkoKTsKKwog
ICAgIEZyYW1lKiBtX2ZyYW1lOwogCiAgICAgTGF5b3V0VW5pdCBtX3hQb3NGb3JWZXJ0aWNhbEFy
cm93TmF2aWdhdGlvbjsKIAogICAgIFZpc2libGVTZWxlY3Rpb24gbV9zZWxlY3Rpb247CisgICAg
Ym9vbCBtX29ic2VydmluZ1Zpc2libGVTZWxlY3Rpb247CiAgICAgVmlzaWJsZVBvc2l0aW9uIG1f
b3JpZ2luYWxCYXNlOyAvLyBVc2VkIHRvIHN0b3JlIGJhc2UgYmVmb3JlIHRoZSBhZGp1c3RtZW50
IGF0IGJpZGkgYm91bmRhcnkKICAgICBUZXh0R3JhbnVsYXJpdHkgbV9ncmFudWxhcml0eTsKIAor
ICAgIC8vIFRoZSByYW5nZSBzcGVjaWZpZWQgYnkgdGhlIHVzZXIsIHdoaWNoIG1heSBub3QgYmUg
dmlzdWFsbHkgY2Fub25pY2FsaXplZCAoaGVuY2UgImxvZ2ljYWwiKS4KKyAgICAvLyBUaGlzIHdp
bGwgYmUgaW52YWxpZGF0ZWQgaWYgdGhlIHVuZGVybHlpbmcgVmlzaWJsZVNlbGVjdGlvbiBjaGFu
Z2VzLiBJZiB0aGF0IGhhcHBlbnMsIHRoaXMgdmFyaWFibGUgd2lsbAorICAgIC8vIGJlY29tZSBu
dWxsLCBpbiB3aGljaCBjYXNlIGxvZ2ljYWwgcG9zaXRpb25zID09IHZpc2libGUgcG9zaXRpb25z
LgorICAgIFJlZlB0cjxSYW5nZT4gbV9sb2dpY2FsUmFuZ2U7CisKICAgICBSZWZQdHI8Tm9kZT4g
bV9wcmV2aW91c0NhcmV0Tm9kZTsgLy8gVGhlIGxhc3Qgbm9kZSB3aGljaCBwYWludGVkIHRoZSBj
YXJldC4gUmV0YWluZWQgZm9yIGNsZWFyaW5nIHRoZSBvbGQgY2FyZXQgd2hlbiBpdCBtb3Zlcy4K
IAogICAgIFJlZlB0cjxFZGl0aW5nU3R5bGU+IG1fdHlwaW5nU3R5bGU7CkluZGV4OiBXZWJDb3Jl
L2VkaXRpbmcvVmlzaWJsZVBvc2l0aW9uLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBXZWJDb3JlL2VkaXRp
bmcvVmlzaWJsZVBvc2l0aW9uLmNwcAkocmV2aXNpb24gMTczOTA1KQorKysgV2ViQ29yZS9lZGl0
aW5nL1Zpc2libGVQb3NpdGlvbi5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTEsNiArMSw3IEBACiAv
KgogICogQ29weXJpZ2h0IChDKSAyMDA0LCAyMDA1LCAyMDA2LCAyMDA3LCAyMDA4LCAyMDA5IEFw
cGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KICAqIFBvcnRpb25zIENvcHlyaWdodCAoYykg
MjAxMSBNb3Rvcm9sYSBNb2JpbGl0eSwgSW5jLiAgQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqIFBv
cnRpb25zIENvcHlyaWdodCAoYykgMjAxNCBEYXZpZCBBLiBHYXR3b29kLiAgQWxsIHJpZ2h0cyBy
ZXNlcnZlZC4KICAqCiAgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmlu
YXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKICAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRl
ZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucwpAQCAtMzksNiArNDAsNyBA
QAogI2luY2x1ZGUgIlRleHQuaCIKICNpbmNsdWRlICJWaXNpYmxlVW5pdHMuaCIKICNpbmNsdWRl
ICJodG1sZWRpdGluZy5oIgorI2luY2x1ZGUgIlBzZXVkb0VsZW1lbnQuaCIKICNpbmNsdWRlIDxz
dGRpby5oPgogI2luY2x1ZGUgPHd0Zi90ZXh0L0NTdHJpbmcuaD4KIApAQCAtMTIyLDIxICsxMjQs
NDcgQEAKIAogICAgICAgICBSZW5kZXJPYmplY3QqIHJlbmRlcmVyID0gJmJveC0+cmVuZGVyZXIo
KTsKIAorICAgICAgICBib29sIHNraXBDdXJyZW50ID0gdHJ1ZTsKKyAgICAgICAgCiAgICAgICAg
IHdoaWxlICh0cnVlKSB7CisgICAgICAgICAgICBFbGVtZW50ICplbHQgPSBOVUxMOworICAgICAg
ICAgICAgCisgICAgICAgICAgICBpZiAocmVuZGVyZXItPm5vZGUoKSkgeworICAgICAgICAgICAg
ICAgIGlmIChyZW5kZXJlci0+bm9kZSgpLT5pc0VsZW1lbnROb2RlKCkpIHsKKyAgICAgICAgICAg
ICAgICAgICAgZWx0ID0gdG9FbGVtZW50KHJlbmRlcmVyLT5ub2RlKCkpOworICAgICAgICAgICAg
ICAgIH0KKyAgICAgICAgICAgIH0KKyAgICAgICAgICAgIAogICAgICAgICAgICAgaWYgKChyZW5k
ZXJlci0+aXNSZXBsYWNlZCgpIHx8IHJlbmRlcmVyLT5pc0JSKCkpICYmIG9mZnNldCA9PSBib3gt
PmNhcmV0UmlnaHRtb3N0T2Zmc2V0KCkpCiAgICAgICAgICAgICAgICAgcmV0dXJuIGJveC0+aXNM
ZWZ0VG9SaWdodERpcmVjdGlvbigpID8gcHJldmlvdXNWaXN1YWxseURpc3RpbmN0Q2FuZGlkYXRl
KG1fZGVlcFBvc2l0aW9uKSA6IG5leHRWaXN1YWxseURpc3RpbmN0Q2FuZGlkYXRlKG1fZGVlcFBv
c2l0aW9uKTsKIAogICAgICAgICAgICAgaWYgKCFyZW5kZXJlci0+bm9kZSgpKSB7Ci0gICAgICAg
ICAgICAgICAgYm94ID0gYm94LT5wcmV2TGVhZkNoaWxkKCk7Ci0gICAgICAgICAgICAgICAgaWYg
KCFib3gpCi0gICAgICAgICAgICAgICAgICAgIHJldHVybiBwcmltYXJ5RGlyZWN0aW9uID09IExU
UiA/IHByZXZpb3VzVmlzdWFsbHlEaXN0aW5jdENhbmRpZGF0ZShtX2RlZXBQb3NpdGlvbikgOiBu
ZXh0VmlzdWFsbHlEaXN0aW5jdENhbmRpZGF0ZShtX2RlZXBQb3NpdGlvbik7Ci0gICAgICAgICAg
ICAgICAgcmVuZGVyZXIgPSAmYm94LT5yZW5kZXJlcigpOwotICAgICAgICAgICAgICAgIG9mZnNl
dCA9IGJveC0+Y2FyZXRSaWdodG1vc3RPZmZzZXQoKTsKLSAgICAgICAgICAgICAgICBjb250aW51
ZTsKKyAgICAgICAgICAgICAgICBpZiAocmVuZGVyZXItPnBhcmVudCgpLT5pc1BzZXVkb0VsZW1l
bnQoKSkgeworICAgICAgICAgICAgICAgICAgICAvKiBUaGlzIG1hZ2ljIGxldHMgdXMgd2FsayBp
bnRvIGVtcHR5IGVsZW1lbnRzIGlmIHRoZXkgaGF2ZQorICAgICAgICAgICAgICAgICAgICAgICBw
c2V1ZG8tZWxlbWVudHMgdG8gbWFrZSB0aGVtIHZpc3VhbGx5IGRpc3RpbmN0LiAgV2l0aG91dAor
ICAgICAgICAgICAgICAgICAgICAgICBpdCwgeW91J2Qgb25seSByZWFjaCB0aG9zZSBlbGVtZW50
cyBpZiB0aGUgZWxlbWVudCBoYWQKKyAgICAgICAgICAgICAgICAgICAgICAgYSBiYWNrZ3JvdW5k
IG9yIG90aGVyIGNvbnRlbnQgdGhhdCByZXF1aXJlZCByZW5kZXJpbmcuCisgICAgICAgICAgICAg
ICAgICAgICAqLworCisgICAgICAgICAgICAgICAgICAgIHJlbmRlcmVyID0gcmVuZGVyZXItPnBh
cmVudCgpOworICAgICAgICAgICAgICAgICAgICBza2lwQ3VycmVudCA9IGZhbHNlOworCisgICAg
ICAgICAgICAgICAgICAgIGNvbnRpbnVlOworICAgICAgICAgICAgICAgIH0gZWxzZSB7CisgICAg
ICAgICAgICAgICAgICAgIGJveCA9IGJveC0+cHJldkxlYWZDaGlsZCgpOworICAgICAgICAgICAg
ICAgICAgICBpZiAoIWJveCkKKyAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiBwcmltYXJ5
RGlyZWN0aW9uID09IExUUiA/IHByZXZpb3VzVmlzdWFsbHlEaXN0aW5jdENhbmRpZGF0ZShtX2Rl
ZXBQb3NpdGlvbikgOiBuZXh0VmlzdWFsbHlEaXN0aW5jdENhbmRpZGF0ZShtX2RlZXBQb3NpdGlv
bik7CisgICAgICAgICAgICAgICAgICAgIHJlbmRlcmVyID0gJmJveC0+cmVuZGVyZXIoKTsKKyAg
ICAgICAgICAgICAgICAgICAgb2Zmc2V0ID0gYm94LT5jYXJldFJpZ2h0bW9zdE9mZnNldCgpOwor
ICAgICAgICAgICAgICAgICAgICBjb250aW51ZTsKKyAgICAgICAgICAgICAgICB9CiAgICAgICAg
ICAgICB9CiAKLSAgICAgICAgICAgIG9mZnNldCA9IGJveC0+aXNMZWZ0VG9SaWdodERpcmVjdGlv
bigpID8gcmVuZGVyZXItPnByZXZpb3VzT2Zmc2V0KG9mZnNldCkgOiByZW5kZXJlci0+bmV4dE9m
ZnNldChvZmZzZXQpOwotCisgICAgICAgICAgICBpZiAoc2tpcEN1cnJlbnQpIHsKKyAgICAgICAg
ICAgICAgICBvZmZzZXQgPSBib3gtPmlzTGVmdFRvUmlnaHREaXJlY3Rpb24oKSA/IHJlbmRlcmVy
LT5wcmV2aW91c09mZnNldChvZmZzZXQpIDogcmVuZGVyZXItPm5leHRPZmZzZXQob2Zmc2V0KTsK
KyAgICAgICAgICAgIH0KKyAgICAgICAgICAgIHNraXBDdXJyZW50ID0gdHJ1ZTsKKyAgICAgICAg
ICAgIAogICAgICAgICAgICAgaW50IGNhcmV0TWluT2Zmc2V0ID0gYm94LT5jYXJldE1pbk9mZnNl
dCgpOwogICAgICAgICAgICAgaW50IGNhcmV0TWF4T2Zmc2V0ID0gYm94LT5jYXJldE1heE9mZnNl
dCgpOwogCkBAIC0xNjMsMTAgKzE5MSwxMyBAQAogICAgICAgICAgICAgICAgIGJveCA9IHByZXZC
b3g7CiAgICAgICAgICAgICAgICAgcmVuZGVyZXIgPSAmYm94LT5yZW5kZXJlcigpOwogICAgICAg
ICAgICAgICAgIG9mZnNldCA9IHByZXZCb3gtPmNhcmV0UmlnaHRtb3N0T2Zmc2V0KCk7CisgICAg
ICAgICAgICAgICAgc2tpcEN1cnJlbnQgPSBmYWxzZTsKKwogICAgICAgICAgICAgICAgIGNvbnRp
bnVlOwogICAgICAgICAgICAgfQogCi0gICAgICAgICAgICBBU1NFUlQob2Zmc2V0ID09IGJveC0+
Y2FyZXRMZWZ0bW9zdE9mZnNldCgpKTsKKyAgICAgICAgICAgIC8vIEBAQCBUaGlzIGFzc2VydGlv
biBpcyBubyBsb25nZXIgdmFsaWQuCisgICAgICAgICAgICAvLyBBU1NFUlQob2Zmc2V0ID09IGJv
eC0+Y2FyZXRMZWZ0bW9zdE9mZnNldCgpKTsKIAogICAgICAgICAgICAgdW5zaWduZWQgY2hhciBs
ZXZlbCA9IGJveC0+YmlkaUxldmVsKCk7CiAgICAgICAgICAgICBJbmxpbmVCb3gqIHByZXZCb3gg
PSBib3gtPnByZXZMZWFmQ2hpbGQoKTsKQEAgLTI0Miw4ICsyNzMsMTQgQEAKICAgICAgICAgICAg
IH0KICAgICAgICAgICAgIGJyZWFrOwogICAgICAgICB9CisgICAgICAgIAorICAgICAgICBOb2Rl
ICpub2RlID0gcmVuZGVyZXItPm5vZGUoKTsKKyAgICAgICAgaWYgKG5vZGUtPmlzUHNldWRvRWxl
bWVudCgpKSB7CisgICAgICAgICAgICBQc2V1ZG9FbGVtZW50ICplbHQgPSB0b1BzZXVkb0VsZW1l
bnQobm9kZSk7CisgICAgICAgICAgICBub2RlID0gZWx0LT5ob3N0RWxlbWVudCgpOworICAgICAg
ICB9CiAKLSAgICAgICAgcCA9IGNyZWF0ZUxlZ2FjeUVkaXRpbmdQb3NpdGlvbihyZW5kZXJlci0+
bm9kZSgpLCBvZmZzZXQpOworICAgICAgICBwID0gY3JlYXRlTGVnYWN5RWRpdGluZ1Bvc2l0aW9u
KG5vZGUsIG9mZnNldCk7CiAKICAgICAgICAgaWYgKChwLmlzQ2FuZGlkYXRlKCkgJiYgcC5kb3du
c3RyZWFtKCkgIT0gZG93bnN0cmVhbVN0YXJ0KSB8fCBwLmF0U3RhcnRPZlRyZWUoKSB8fCBwLmF0
RW5kT2ZUcmVlKCkpCiAgICAgICAgICAgICByZXR1cm4gcDsKQEAgLTI4NywyMSArMzI0LDQyIEBA
CiAKICAgICAgICAgUmVuZGVyT2JqZWN0KiByZW5kZXJlciA9ICZib3gtPnJlbmRlcmVyKCk7CiAK
KyAgICAgICAgYm9vbCBza2lwQ3VycmVudCA9IHRydWU7CisKICAgICAgICAgd2hpbGUgKHRydWUp
IHsKICAgICAgICAgICAgIGlmICgocmVuZGVyZXItPmlzUmVwbGFjZWQoKSB8fCByZW5kZXJlci0+
aXNCUigpKSAmJiBvZmZzZXQgPT0gYm94LT5jYXJldExlZnRtb3N0T2Zmc2V0KCkpCiAgICAgICAg
ICAgICAgICAgcmV0dXJuIGJveC0+aXNMZWZ0VG9SaWdodERpcmVjdGlvbigpID8gbmV4dFZpc3Vh
bGx5RGlzdGluY3RDYW5kaWRhdGUobV9kZWVwUG9zaXRpb24pIDogcHJldmlvdXNWaXN1YWxseURp
c3RpbmN0Q2FuZGlkYXRlKG1fZGVlcFBvc2l0aW9uKTsKIAogICAgICAgICAgICAgaWYgKCFyZW5k
ZXJlci0+bm9kZSgpKSB7Ci0gICAgICAgICAgICAgICAgYm94ID0gYm94LT5uZXh0TGVhZkNoaWxk
KCk7Ci0gICAgICAgICAgICAgICAgaWYgKCFib3gpCi0gICAgICAgICAgICAgICAgICAgIHJldHVy
biBwcmltYXJ5RGlyZWN0aW9uID09IExUUiA/IG5leHRWaXN1YWxseURpc3RpbmN0Q2FuZGlkYXRl
KG1fZGVlcFBvc2l0aW9uKSA6IHByZXZpb3VzVmlzdWFsbHlEaXN0aW5jdENhbmRpZGF0ZShtX2Rl
ZXBQb3NpdGlvbik7Ci0gICAgICAgICAgICAgICAgcmVuZGVyZXIgPSAmYm94LT5yZW5kZXJlcigp
OwotICAgICAgICAgICAgICAgIG9mZnNldCA9IGJveC0+Y2FyZXRMZWZ0bW9zdE9mZnNldCgpOwot
ICAgICAgICAgICAgICAgIGNvbnRpbnVlOworICAgICAgICAgICAgICAgIGlmIChyZW5kZXJlci0+
cGFyZW50KCktPmlzUHNldWRvRWxlbWVudCgpKSB7CisgICAgICAgICAgICAgICAgICAgIC8qIFRo
aXMgbWFnaWMgbGV0cyB1cyB3YWxrIGludG8gZW1wdHkgZWxlbWVudHMgaWYgdGhleSBoYXZlCisg
ICAgICAgICAgICAgICAgICAgICBwc2V1ZG8tZWxlbWVudHMgdG8gbWFrZSB0aGVtIHZpc3VhbGx5
IGRpc3RpbmN0LiAgV2l0aG91dAorICAgICAgICAgICAgICAgICAgICAgaXQsIHlvdSdkIG9ubHkg
cmVhY2ggdGhvc2UgZWxlbWVudHMgaWYgdGhlIGVsZW1lbnQgaGFkCisgICAgICAgICAgICAgICAg
ICAgICBhIGJhY2tncm91bmQgb3Igb3RoZXIgY29udGVudCB0aGF0IHJlcXVpcmVkIHJlbmRlcmlu
Zy4KKyAgICAgICAgICAgICAgICAgICAgICovCisgICAgICAgICAgICAgICAgICAgIAorICAgICAg
ICAgICAgICAgICAgICByZW5kZXJlciA9IHJlbmRlcmVyLT5wYXJlbnQoKTsKKyAgICAgICAgICAg
ICAgICAgICAgc2tpcEN1cnJlbnQgPSBmYWxzZTsKKyAgICAgICAgICAgICAgICAgICAgCisgICAg
ICAgICAgICAgICAgICAgIGNvbnRpbnVlOworICAgICAgICAgICAgICAgIH0gZWxzZSB7CisgICAg
ICAgICAgICAgICAgICAgIGJveCA9IGJveC0+bmV4dExlYWZDaGlsZCgpOworICAgICAgICAgICAg
ICAgICAgICBpZiAoIWJveCkKKyAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiBwcmltYXJ5
RGlyZWN0aW9uID09IExUUiA/IG5leHRWaXN1YWxseURpc3RpbmN0Q2FuZGlkYXRlKG1fZGVlcFBv
c2l0aW9uKSA6IHByZXZpb3VzVmlzdWFsbHlEaXN0aW5jdENhbmRpZGF0ZShtX2RlZXBQb3NpdGlv
bik7CisgICAgICAgICAgICAgICAgICAgIHJlbmRlcmVyID0gJmJveC0+cmVuZGVyZXIoKTsKKyAg
ICAgICAgICAgICAgICAgICAgb2Zmc2V0ID0gYm94LT5jYXJldExlZnRtb3N0T2Zmc2V0KCk7Cisg
ICAgICAgICAgICAgICAgICAgIAorICAgICAgICAgICAgICAgICAgICBza2lwQ3VycmVudCA9IGZh
bHNlOworCisgICAgICAgICAgICAgICAgICAgIGNvbnRpbnVlOworICAgICAgICAgICAgICAgIH0K
ICAgICAgICAgICAgIH0KKyAgICAgICAgICAgIAorICAgICAgICAgICAgaWYgKHNraXBDdXJyZW50
KSB7CisgICAgICAgICAgICAgICAgb2Zmc2V0ID0gYm94LT5pc0xlZnRUb1JpZ2h0RGlyZWN0aW9u
KCkgPyByZW5kZXJlci0+bmV4dE9mZnNldChvZmZzZXQpIDogcmVuZGVyZXItPnByZXZpb3VzT2Zm
c2V0KG9mZnNldCk7CisgICAgICAgICAgICB9CisgICAgICAgICAgICBza2lwQ3VycmVudCA9IHRy
dWU7CiAKLSAgICAgICAgICAgIG9mZnNldCA9IGJveC0+aXNMZWZ0VG9SaWdodERpcmVjdGlvbigp
ID8gcmVuZGVyZXItPm5leHRPZmZzZXQob2Zmc2V0KSA6IHJlbmRlcmVyLT5wcmV2aW91c09mZnNl
dChvZmZzZXQpOwotCiAgICAgICAgICAgICBpbnQgY2FyZXRNaW5PZmZzZXQgPSBib3gtPmNhcmV0
TWluT2Zmc2V0KCk7CiAgICAgICAgICAgICBpbnQgY2FyZXRNYXhPZmZzZXQgPSBib3gtPmNhcmV0
TWF4T2Zmc2V0KCk7CiAKQEAgLTMzMSw3ICszODksOCBAQAogICAgICAgICAgICAgICAgIGNvbnRp
bnVlOwogICAgICAgICAgICAgfQogCi0gICAgICAgICAgICBBU1NFUlQob2Zmc2V0ID09IGJveC0+
Y2FyZXRSaWdodG1vc3RPZmZzZXQoKSk7CisgICAgICAgICAgICAvLyBAQEAgVGhpcyBhc3NlcnRp
b24gaXMgbm8gbG9uZ2VyIHZhbGlkLgorICAgICAgICAgICAgLy8gQVNTRVJUKG9mZnNldCA9PSBi
b3gtPmNhcmV0UmlnaHRtb3N0T2Zmc2V0KCkpOwogCiAgICAgICAgICAgICB1bnNpZ25lZCBjaGFy
IGxldmVsID0gYm94LT5iaWRpTGV2ZWwoKTsKICAgICAgICAgICAgIElubGluZUJveCogbmV4dEJv
eCA9IGJveC0+bmV4dExlYWZDaGlsZCgpOwpAQCAtNDEwLDggKzQ2OSwxNCBAQAogICAgICAgICAg
ICAgfQogICAgICAgICAgICAgYnJlYWs7CiAgICAgICAgIH0KKyAgICAgICAgCisgICAgICAgIE5v
ZGUgKm5vZGUgPSByZW5kZXJlci0+bm9kZSgpOworICAgICAgICBpZiAobm9kZS0+aXNQc2V1ZG9F
bGVtZW50KCkpIHsKKyAgICAgICAgICAgIFBzZXVkb0VsZW1lbnQgKmVsdCA9IHRvUHNldWRvRWxl
bWVudChub2RlKTsKKyAgICAgICAgICAgIG5vZGUgPSBlbHQtPmhvc3RFbGVtZW50KCk7CisgICAg
ICAgIH0KIAotICAgICAgICBwID0gY3JlYXRlTGVnYWN5RWRpdGluZ1Bvc2l0aW9uKHJlbmRlcmVy
LT5ub2RlKCksIG9mZnNldCk7CisgICAgICAgIHAgPSBjcmVhdGVMZWdhY3lFZGl0aW5nUG9zaXRp
b24obm9kZSwgb2Zmc2V0KTsKIAogICAgICAgICBpZiAoKHAuaXNDYW5kaWRhdGUoKSAmJiBwLmRv
d25zdHJlYW0oKSAhPSBkb3duc3RyZWFtU3RhcnQpIHx8IHAuYXRTdGFydE9mVHJlZSgpIHx8IHAu
YXRFbmRPZlRyZWUoKSkKICAgICAgICAgICAgIHJldHVybiBwOwpAQCAtNDIzLDcgKzQ4OCw3IEBA
CiBWaXNpYmxlUG9zaXRpb24gVmlzaWJsZVBvc2l0aW9uOjpyaWdodChib29sIHN0YXlJbkVkaXRh
YmxlQ29udGVudCkgY29uc3QKIHsKICAgICBQb3NpdGlvbiBwb3MgPSByaWdodFZpc3VhbGx5RGlz
dGluY3RDYW5kaWRhdGUoKTsKLSAgICAvLyBGSVhNRTogV2h5IGNhbid0IHdlIG1vdmUgbGVmdCBm
cm9tIHRoZSBsYXN0IHBvc2l0aW9uIGluIGEgdHJlZT8KKyAgICAvLyBGSVhNRTogV2h5IGNhbid0
IHdlIG1vdmUgcmlnaHQgZnJvbSB0aGUgZmlyc3QgcG9zaXRpb24gaW4gYSB0cmVlPwogICAgIGlm
IChwb3MuYXRTdGFydE9mVHJlZSgpIHx8IHBvcy5hdEVuZE9mVHJlZSgpKQogICAgICAgICByZXR1
cm4gVmlzaWJsZVBvc2l0aW9uKCk7CiAKQEAgLTUyNiw4ICs1OTEsOSBAQAogICAgIGNhbmRpZGF0
ZSA9IHBvc2l0aW9uLmRvd25zdHJlYW0oKTsKICAgICBpZiAoY2FuZGlkYXRlLmlzQ2FuZGlkYXRl
KCkpCiAgICAgICAgIHJldHVybiBjYW5kaWRhdGU7CisgICAgCiAKLSAgICAvLyBXaGVuIG5laXRo
ZXIgdXBzdHJlYW0gb3IgZG93bnN0cmVhbSBnZXRzIHVzIHRvIGEgY2FuZGlkYXRlICh1cHN0cmVh
bS9kb3duc3RyZWFtIHdvbid0IGxlYXZlIAorICAgIC8vIFdoZW4gbmVpdGhlciB1cHN0cmVhbSBv
ciBkb3duc3RyZWFtIGdldHMgdXMgdG8gYSBjYW5kaWRhdGUgKHVwc3RyZWFtL2Rvd25zdHJlYW0g
d29uJ3QgbGVhdmUKICAgICAvLyBibG9ja3Mgb3IgZW50ZXIgbmV3IG9uZXMpLCB3ZSBzZWFyY2gg
Zm9yd2FyZCBhbmQgYmFja3dhcmQgdW50aWwgd2UgZmluZCBvbmUuCiAgICAgUG9zaXRpb24gbmV4
dCA9IGNhbm9uaWNhbGl6ZUNhbmRpZGF0ZShuZXh0Q2FuZGlkYXRlKHBvc2l0aW9uKSk7CiAgICAg
UG9zaXRpb24gcHJldiA9IGNhbm9uaWNhbGl6ZUNhbmRpZGF0ZShwcmV2aW91c0NhbmRpZGF0ZShw
b3NpdGlvbikpOwpJbmRleDogV2ViQ29yZS9lZGl0aW5nL1Zpc2libGVTZWxlY3Rpb24uY3BwCj09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT0KLS0tIFdlYkNvcmUvZWRpdGluZy9WaXNpYmxlU2VsZWN0aW9uLmNwcAkocmV2aXNp
b24gMTczOTA1KQorKysgV2ViQ29yZS9lZGl0aW5nL1Zpc2libGVTZWxlY3Rpb24uY3BwCSh3b3Jr
aW5nIGNvcHkpCkBAIC00Miw2ICs0Miw3IEBACiAKIFZpc2libGVTZWxlY3Rpb246OlZpc2libGVT
ZWxlY3Rpb24oKQogICAgIDogbV9hZmZpbml0eShET1dOU1RSRUFNKQorICAgICwgbV9jaGFuZ2VP
YnNlcnZlcigwKQogICAgICwgbV9zZWxlY3Rpb25UeXBlKE5vU2VsZWN0aW9uKQogICAgICwgbV9i
YXNlSXNGaXJzdCh0cnVlKQogICAgICwgbV9pc0RpcmVjdGlvbmFsKGZhbHNlKQpAQCAtNTIsNiAr
NTMsNyBAQAogICAgIDogbV9iYXNlKHBvcykKICAgICAsIG1fZXh0ZW50KHBvcykKICAgICAsIG1f
YWZmaW5pdHkoYWZmaW5pdHkpCisgICAgLCBtX2NoYW5nZU9ic2VydmVyKDApCiAgICAgLCBtX2lz
RGlyZWN0aW9uYWwoaXNEaXJlY3Rpb25hbCkKIHsKICAgICB2YWxpZGF0ZSgpOwpAQCAtNjEsNiAr
NjMsNyBAQAogICAgIDogbV9iYXNlKGJhc2UpCiAgICAgLCBtX2V4dGVudChleHRlbnQpCiAgICAg
LCBtX2FmZmluaXR5KGFmZmluaXR5KQorICAgICwgbV9jaGFuZ2VPYnNlcnZlcigwKQogICAgICwg
bV9pc0RpcmVjdGlvbmFsKGlzRGlyZWN0aW9uYWwpCiB7CiAgICAgdmFsaWRhdGUoKTsKQEAgLTcw
LDYgKzczLDcgQEAKICAgICA6IG1fYmFzZShwb3MuZGVlcEVxdWl2YWxlbnQoKSkKICAgICAsIG1f
ZXh0ZW50KHBvcy5kZWVwRXF1aXZhbGVudCgpKQogICAgICwgbV9hZmZpbml0eShwb3MuYWZmaW5p
dHkoKSkKKyAgICAsIG1fY2hhbmdlT2JzZXJ2ZXIoMCkKICAgICAsIG1faXNEaXJlY3Rpb25hbChp
c0RpcmVjdGlvbmFsKQogewogICAgIHZhbGlkYXRlKCk7CkBAIC03OSw2ICs4Myw3IEBACiAgICAg
OiBtX2Jhc2UoYmFzZS5kZWVwRXF1aXZhbGVudCgpKQogICAgICwgbV9leHRlbnQoZXh0ZW50LmRl
ZXBFcXVpdmFsZW50KCkpCiAgICAgLCBtX2FmZmluaXR5KGJhc2UuYWZmaW5pdHkoKSkKKyAgICAs
IG1fY2hhbmdlT2JzZXJ2ZXIoMCkKICAgICAsIG1faXNEaXJlY3Rpb25hbChpc0RpcmVjdGlvbmFs
KQogewogICAgIHZhbGlkYXRlKCk7CkBAIC04OCwxMSArOTMsNDYgQEAKICAgICA6IG1fYmFzZShy
YW5nZS0+c3RhcnRQb3NpdGlvbigpKQogICAgICwgbV9leHRlbnQocmFuZ2UtPmVuZFBvc2l0aW9u
KCkpCiAgICAgLCBtX2FmZmluaXR5KGFmZmluaXR5KQorICAgICwgbV9jaGFuZ2VPYnNlcnZlcigw
KQogICAgICwgbV9pc0RpcmVjdGlvbmFsKGlzRGlyZWN0aW9uYWwpCiB7CiAgICAgdmFsaWRhdGUo
KTsKIH0KIAorVmlzaWJsZVNlbGVjdGlvbjo6VmlzaWJsZVNlbGVjdGlvbihjb25zdCBWaXNpYmxl
U2VsZWN0aW9uJiBvdGhlcikKKyAgICA6IG1fYmFzZShvdGhlci5tX2Jhc2UpCisgICAgLCBtX2V4
dGVudChvdGhlci5tX2V4dGVudCkKKyAgICAsIG1fc3RhcnQob3RoZXIubV9zdGFydCkKKyAgICAs
IG1fZW5kKG90aGVyLm1fZW5kKQorICAgICwgbV9hZmZpbml0eShvdGhlci5tX2FmZmluaXR5KQor
ICAgICwgbV9jaGFuZ2VPYnNlcnZlcigwKSAvLyBPYnNlcnZlciBpcyBhc3NvY2lhdGVkIHdpdGgg
b25seSBvbmUgVmlzaWJsZVNlbGVjdGlvbiwgc28gdGhpcyBzaG91bGQgbm90IGJlIGNvcGllZC4K
KyAgICAsIG1fc2VsZWN0aW9uVHlwZShvdGhlci5tX3NlbGVjdGlvblR5cGUpCisgICAgLCBtX2Jh
c2VJc0ZpcnN0KG90aGVyLm1fYmFzZUlzRmlyc3QpCisgICAgLCBtX2lzRGlyZWN0aW9uYWwob3Ro
ZXIubV9pc0RpcmVjdGlvbmFsKQoreworfQorCitWaXNpYmxlU2VsZWN0aW9uJiBWaXNpYmxlU2Vs
ZWN0aW9uOjpvcGVyYXRvcj0oY29uc3QgVmlzaWJsZVNlbGVjdGlvbiYgb3RoZXIpCit7CisgICAg
ZGlkQ2hhbmdlKCk7CisKKyAgICBtX2Jhc2UgPSBvdGhlci5tX2Jhc2U7CisgICAgbV9leHRlbnQg
PSBvdGhlci5tX2V4dGVudDsKKyAgICBtX3N0YXJ0ID0gb3RoZXIubV9zdGFydDsKKyAgICBtX2Vu
ZCA9IG90aGVyLm1fZW5kOworICAgIG1fYWZmaW5pdHkgPSBvdGhlci5tX2FmZmluaXR5OworICAg
IG1fY2hhbmdlT2JzZXJ2ZXIgPSAwOworICAgIG1fc2VsZWN0aW9uVHlwZSA9IG90aGVyLm1fc2Vs
ZWN0aW9uVHlwZTsKKyAgICBtX2Jhc2VJc0ZpcnN0ID0gb3RoZXIubV9iYXNlSXNGaXJzdDsKKyAg
ICBtX2lzRGlyZWN0aW9uYWwgPSBvdGhlci5tX2lzRGlyZWN0aW9uYWw7CisgICAgcmV0dXJuICp0
aGlzOworfQorCitWaXNpYmxlU2VsZWN0aW9uOjp+VmlzaWJsZVNlbGVjdGlvbigpCit7CisgICAg
ZGlkQ2hhbmdlKCk7Cit9CisKIFZpc2libGVTZWxlY3Rpb24gVmlzaWJsZVNlbGVjdGlvbjo6c2Vs
ZWN0aW9uRnJvbUNvbnRlbnRzT2ZOb2RlKE5vZGUqIG5vZGUpCiB7CiAgICAgQVNTRVJUKCFlZGl0
aW5nSWdub3Jlc0NvbnRlbnQobm9kZSkpOwpAQCAtMTAxLDI2ICsxNDEsMzggQEAKIAogdm9pZCBW
aXNpYmxlU2VsZWN0aW9uOjpzZXRCYXNlKGNvbnN0IFBvc2l0aW9uJiBwb3NpdGlvbikKIHsKKyAg
ICBQb3NpdGlvbiBvbGRCYXNlID0gbV9iYXNlOwogICAgIG1fYmFzZSA9IHBvc2l0aW9uOwogICAg
IHZhbGlkYXRlKCk7CisgICAgaWYgKG1fYmFzZSAhPSBvbGRCYXNlKQorICAgICAgICBkaWRDaGFu
Z2UoKTsKIH0KIAogdm9pZCBWaXNpYmxlU2VsZWN0aW9uOjpzZXRCYXNlKGNvbnN0IFZpc2libGVQ
b3NpdGlvbiYgdmlzaWJsZVBvc2l0aW9uKQogeworICAgIFBvc2l0aW9uIG9sZEJhc2UgPSBtX2Jh
c2U7CiAgICAgbV9iYXNlID0gdmlzaWJsZVBvc2l0aW9uLmRlZXBFcXVpdmFsZW50KCk7CiAgICAg
dmFsaWRhdGUoKTsKKyAgICBpZiAobV9iYXNlICE9IG9sZEJhc2UpCisgICAgICAgIGRpZENoYW5n
ZSgpOwogfQogCiB2b2lkIFZpc2libGVTZWxlY3Rpb246OnNldEV4dGVudChjb25zdCBQb3NpdGlv
biYgcG9zaXRpb24pCiB7CisgICAgUG9zaXRpb24gb2xkRXh0ZW50ID0gbV9leHRlbnQ7CiAgICAg
bV9leHRlbnQgPSBwb3NpdGlvbjsKICAgICB2YWxpZGF0ZSgpOworICAgIGlmIChtX2V4dGVudCAh
PSBvbGRFeHRlbnQpCisgICAgICAgIGRpZENoYW5nZSgpOwogfQogCiB2b2lkIFZpc2libGVTZWxl
Y3Rpb246OnNldEV4dGVudChjb25zdCBWaXNpYmxlUG9zaXRpb24mIHZpc2libGVQb3NpdGlvbikK
IHsKKyAgICBQb3NpdGlvbiBvbGRFeHRlbnQgPSBtX2V4dGVudDsKICAgICBtX2V4dGVudCA9IHZp
c2libGVQb3NpdGlvbi5kZWVwRXF1aXZhbGVudCgpOwogICAgIHZhbGlkYXRlKCk7CisgICAgaWYg
KG1fZXh0ZW50ICE9IG9sZEV4dGVudCkKKyAgICAgICAgZGlkQ2hhbmdlKCk7CiB9CiAKIFBhc3NS
ZWZQdHI8UmFuZ2U+IFZpc2libGVTZWxlY3Rpb246OmZpcnN0UmFuZ2UoKSBjb25zdApAQCAtMTkz
LDcgKzI0NSwxNCBAQAogICAgIGlmIChpc05vbmUoKSkKICAgICAgICAgcmV0dXJuIGZhbHNlOwog
CisgICAgLy8gRklYTUU6IERvIHdlIG5lZWQgdG8gY2hlY2sgYWxsIG9mIHRoZW0/CisgICAgUG9z
aXRpb24gb2xkQmFzZSA9IG1fYmFzZTsKKyAgICBQb3NpdGlvbiBvbGRFeHRlbnQgPSBtX2V4dGVu
dDsKKyAgICBQb3NpdGlvbiBvbGRTdGFydCA9IG1fc3RhcnQ7CisgICAgUG9zaXRpb24gb2xkRW5k
ID0gbV9lbmQ7CiAgICAgdmFsaWRhdGUoZ3JhbnVsYXJpdHkpOworICAgIGlmIChtX2Jhc2UgIT0g
b2xkQmFzZSB8fCBtX2V4dGVudCAhPSBvbGRFeHRlbnQgfHwgbV9zdGFydCAhPSBvbGRTdGFydCB8
fCBtX2VuZCAhPSBvbGRFbmQpCisgICAgICAgIGRpZENoYW5nZSgpOwogICAgIHJldHVybiB0cnVl
OwogfQogCkBAIC0yMzUsMTMgKzI5NCwxNyBAQAogICAgICAgICByZXR1cm47CiAKICAgICBDaGFy
YWN0ZXJJdGVyYXRvciBjaGFySXQoKnNlYXJjaFJhbmdlLCBUZXh0SXRlcmF0b3JFbWl0c0NoYXJh
Y3RlcnNCZXR3ZWVuQWxsVmlzaWJsZVBvc2l0aW9ucyk7CisgICAgYm9vbCBjaGFuZ2VkID0gZmFs
c2U7CiAKICAgICBmb3IgKDsgIWNoYXJJdC5hdEVuZCgpICYmIGNoYXJJdC50ZXh0KCkubGVuZ3Ro
KCk7IGNoYXJJdC5hZHZhbmNlKDEpKSB7CiAgICAgICAgIFVDaGFyIGMgPSBjaGFySXQudGV4dCgp
WzBdOwogICAgICAgICBpZiAoKCFpc1NwYWNlT3JOZXdsaW5lKGMpICYmIGMgIT0gbm9CcmVha1Nw
YWNlKSB8fCBjID09ICdcbicpCiAgICAgICAgICAgICBicmVhazsKICAgICAgICAgbV9lbmQgPSBj
aGFySXQucmFuZ2UoKS0+ZW5kUG9zaXRpb24oKTsKKyAgICAgICAgY2hhbmdlZCA9IHRydWU7CiAg
ICAgfQorICAgIGlmIChjaGFuZ2VkKQorICAgICAgICBkaWRDaGFuZ2UoKTsKIH0KIAogdm9pZCBW
aXNpYmxlU2VsZWN0aW9uOjpzZXRCYXNlQW5kRXh0ZW50VG9EZWVwRXF1aXZhbGVudHMoKQpAQCAt
NDY3LDYgKzUzMCw3IEBACiAgICAgICAgIG1fZW5kID0gYmFzZTsKICAgICB9CiAgICAgbV9zZWxl
Y3Rpb25UeXBlID0gYmFzZSA9PSBleHRlbnQgPyBDYXJldFNlbGVjdGlvbiA6IFJhbmdlU2VsZWN0
aW9uOworICAgIGRpZENoYW5nZSgpOwogfQogCiBzdGF0aWMgUG9zaXRpb24gYWRqdXN0UG9zaXRp
b25Gb3JFbmQoY29uc3QgUG9zaXRpb24mIGN1cnJlbnRQb3NpdGlvbiwgTm9kZSogc3RhcnRDb250
YWluZXJOb2RlKQpAQCAtNjY3LDYgKzczMSwzMiBAQAogICAgIHJldHVybiB0ZXh0Q29udHJvbCAm
JiBpc0hUTUxJbnB1dEVsZW1lbnQodGV4dENvbnRyb2wpICYmIGRvd25jYXN0PEhUTUxJbnB1dEVs
ZW1lbnQ+KCp0ZXh0Q29udHJvbCkuaXNQYXNzd29yZEZpZWxkKCk7CiB9CiAKK1Zpc2libGVTZWxl
Y3Rpb246OkNoYW5nZU9ic2VydmVyOjpDaGFuZ2VPYnNlcnZlcigpCit7Cit9CisKK1Zpc2libGVT
ZWxlY3Rpb246OkNoYW5nZU9ic2VydmVyOjp+Q2hhbmdlT2JzZXJ2ZXIoKQoreworfQorCit2b2lk
IFZpc2libGVTZWxlY3Rpb246OnNldENoYW5nZU9ic2VydmVyKENoYW5nZU9ic2VydmVyJiBvYnNl
cnZlcikKK3sKKyAgICBBU1NFUlQoIW1fY2hhbmdlT2JzZXJ2ZXIpOworICAgIG1fY2hhbmdlT2Jz
ZXJ2ZXIgPSAmb2JzZXJ2ZXI7Cit9CisKK3ZvaWQgVmlzaWJsZVNlbGVjdGlvbjo6Y2xlYXJDaGFu
Z2VPYnNlcnZlcigpCit7CisgICAgQVNTRVJUKG1fY2hhbmdlT2JzZXJ2ZXIpOworICAgIG1fY2hh
bmdlT2JzZXJ2ZXIgPSAwOworfQorCit2b2lkIFZpc2libGVTZWxlY3Rpb246OmRpZENoYW5nZSgp
Cit7CisgICAgaWYgKG1fY2hhbmdlT2JzZXJ2ZXIpCisgICAgICAgIG1fY2hhbmdlT2JzZXJ2ZXIt
PmRpZENoYW5nZVZpc2libGVTZWxlY3Rpb24oKTsKK30KKwogI2lmbmRlZiBOREVCVUcKIAogdm9p
ZCBWaXNpYmxlU2VsZWN0aW9uOjpkZWJ1Z1Bvc2l0aW9uKCkgY29uc3QKSW5kZXg6IFdlYkNvcmUv
ZWRpdGluZy9WaXNpYmxlU2VsZWN0aW9uLmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gV2ViQ29yZS9lZGl0aW5n
L1Zpc2libGVTZWxlY3Rpb24uaAkocmV2aXNpb24gMTczOTA1KQorKysgV2ViQ29yZS9lZGl0aW5n
L1Zpc2libGVTZWxlY3Rpb24uaAkod29ya2luZyBjb3B5KQpAQCAtNTAsNiArNTAsMTEgQEAKICAg
ICBXRUJDT1JFX0VYUE9SVCBWaXNpYmxlU2VsZWN0aW9uKGNvbnN0IFZpc2libGVQb3NpdGlvbiYs
IGJvb2wgaXNEaXJlY3Rpb25hbCA9IGZhbHNlKTsKICAgICBXRUJDT1JFX0VYUE9SVCBWaXNpYmxl
U2VsZWN0aW9uKGNvbnN0IFZpc2libGVQb3NpdGlvbiYsIGNvbnN0IFZpc2libGVQb3NpdGlvbiYs
IGJvb2wgaXNEaXJlY3Rpb25hbCA9IGZhbHNlKTsKIAorICAgIFZpc2libGVTZWxlY3Rpb24oY29u
c3QgVmlzaWJsZVNlbGVjdGlvbiYpOworICAgIFZpc2libGVTZWxlY3Rpb24mIG9wZXJhdG9yPShj
b25zdCBWaXNpYmxlU2VsZWN0aW9uJik7CisKKyAgICBXRUJDT1JFX0VYUE9SVCB+VmlzaWJsZVNl
bGVjdGlvbigpOworCiAgICAgV0VCQ09SRV9FWFBPUlQgc3RhdGljIFZpc2libGVTZWxlY3Rpb24g
c2VsZWN0aW9uRnJvbUNvbnRlbnRzT2ZOb2RlKE5vZGUqKTsKIAogICAgIFNlbGVjdGlvblR5cGUg
c2VsZWN0aW9uVHlwZSgpIGNvbnN0IHsgcmV0dXJuIG1fc2VsZWN0aW9uVHlwZTsgfQpAQCAtMTA3
LDE0ICsxMTIsMzAgQEAKIAogICAgIFdFQkNPUkVfRVhQT1JUIGJvb2wgaXNJblBhc3N3b3JkRmll
bGQoKSBjb25zdDsKIAorICAgIHZvaWQgc2V0V2l0aG91dFZhbGlkYXRpb24oY29uc3QgUG9zaXRp
b24mLCBjb25zdCBQb3NpdGlvbiYpOworCisgICAgLy8gTGlzdGVuZXIgb2YgVmlzaWJsZVNlbGVj
dGlvbiBtb2RpZmljYXRpb24uIGRpZENoYW5nZVZpc2libGVTZWxlY3Rpb24oKSB3aWxsIGJlIGlu
dm9rZWQgd2hlbiBiYXNlLCBleHRlbnQsIHN0YXJ0CisgICAgLy8gb3IgZW5kIGlzIG1vdmVkIHRv
IGEgZGlmZmVyZW50IHBvc2l0aW9uLgorICAgIC8vCisgICAgLy8gT2JqZWN0cyBpbXBsZW1lbnRp
bmcgfENoYW5nZU9ic2VydmVyfCBpbnRlcmZhY2UgbXVzdCBvdXRsaXZlIHRoZSBWaXNpYmxlU2Vs
ZWN0aW9uIG9iamVjdC4KKyAgICBjbGFzcyBDaGFuZ2VPYnNlcnZlciB7CisgICAgICAgIFdURl9N
QUtFX05PTkNPUFlBQkxFKENoYW5nZU9ic2VydmVyKTsKKyAgICBwdWJsaWM6CisgICAgICAgIENo
YW5nZU9ic2VydmVyKCk7CisgICAgICAgIHZpcnR1YWwgfkNoYW5nZU9ic2VydmVyKCk7CisgICAg
ICAgIHZpcnR1YWwgdm9pZCBkaWRDaGFuZ2VWaXNpYmxlU2VsZWN0aW9uKCkgPSAwOworICAgIH07
CisKKyAgICB2b2lkIHNldENoYW5nZU9ic2VydmVyKENoYW5nZU9ic2VydmVyJik7CisgICAgdm9p
ZCBjbGVhckNoYW5nZU9ic2VydmVyKCk7CisgICAgdm9pZCBkaWRDaGFuZ2UoKTsgLy8gRmlyZSB0
aGUgY2hhbmdlIG9ic2VydmVyLCBpZiBhbnkuCisKICNpZm5kZWYgTkRFQlVHCiAgICAgdm9pZCBk
ZWJ1Z1Bvc2l0aW9uKCkgY29uc3Q7CiAgICAgdm9pZCBmb3JtYXRGb3JEZWJ1Z2dlcihjaGFyKiBi
dWZmZXIsIHVuc2lnbmVkIGxlbmd0aCkgY29uc3Q7CiAgICAgdm9pZCBzaG93VHJlZUZvclRoaXMo
KSBjb25zdDsKICNlbmRpZgogCi0gICAgdm9pZCBzZXRXaXRob3V0VmFsaWRhdGlvbihjb25zdCBQ
b3NpdGlvbiYsIGNvbnN0IFBvc2l0aW9uJik7Ci0KIHByaXZhdGU6CiAgICAgdm9pZCB2YWxpZGF0
ZShUZXh0R3JhbnVsYXJpdHkgPSBDaGFyYWN0ZXJHcmFudWxhcml0eSk7CiAKQEAgLTEzNywxMCAr
MTU4LDEzIEBACiAKICAgICBFQWZmaW5pdHkgbV9hZmZpbml0eTsgICAgICAgICAgIC8vIHRoZSB1
cHN0cmVhbS9kb3duc3RyZWFtIGFmZmluaXR5IG9mIHRoZSBjYXJldAogCisgICAgQ2hhbmdlT2Jz
ZXJ2ZXIqIG1fY2hhbmdlT2JzZXJ2ZXI7CisKICAgICAvLyB0aGVzZSBhcmUgY2FjaGVkLCBjYW4g
YmUgcmVjYWxjdWxhdGVkIGJ5IHZhbGlkYXRlKCkKICAgICBTZWxlY3Rpb25UeXBlIG1fc2VsZWN0
aW9uVHlwZTsgLy8gTm9uZSwgQ2FyZXQsIFJhbmdlCiAgICAgYm9vbCBtX2Jhc2VJc0ZpcnN0IDog
MTsgLy8gVHJ1ZSBpZiBiYXNlIGlzIGJlZm9yZSB0aGUgZXh0ZW50CiAgICAgYm9vbCBtX2lzRGly
ZWN0aW9uYWwgOiAxOyAvLyBOb24tZGlyZWN0aW9uYWwgaWdub3JlcyBtX2Jhc2VJc0ZpcnN0IGFu
ZCBzZWxlY3Rpb24gYWx3YXlzIGV4dGVuZHMgb24gc2hpZnQgKyBhcnJvdyBrZXkuCisKIH07CiAK
IGlubGluZSBib29sIG9wZXJhdG9yPT0oY29uc3QgVmlzaWJsZVNlbGVjdGlvbiYgYSwgY29uc3Qg
VmlzaWJsZVNlbGVjdGlvbiYgYikKSW5kZXg6IFdlYkNvcmUvZWRpdGluZy9WaXNpYmxlVW5pdHMu
Y3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT0KLS0tIFdlYkNvcmUvZWRpdGluZy9WaXNpYmxlVW5pdHMuY3BwCShyZXZp
c2lvbiAxNzM5MDUpCisrKyBXZWJDb3JlL2VkaXRpbmcvVmlzaWJsZVVuaXRzLmNwcAkod29ya2lu
ZyBjb3B5KQpAQCAtNTUyLDYgKzU1Miw5IEBACiB7CiAgICAgUG9zaXRpb24gcG9zID0gYy5kZWVw
RXF1aXZhbGVudCgpOwogICAgIE5vZGUqIGJvdW5kYXJ5ID0gcG9zLnBhcmVudEVkaXRpbmdCb3Vu
ZGFyeSgpOworICAgIAorICAgIC8qIElmIHRoZXJlJ3Mgbm90IGFuIGVkaXRhYmxlIGVuY2xvc2lu
ZyBlbGVtZW50LCBvciBpZiB0aGUgZWxlbWVudCBpcyBpbiBhIGRldGFjdGhlZAorICAgICAgIGZy
YWdtZW50LCBiYWlsLiAqLwogICAgIGlmICghYm91bmRhcnkpCiAgICAgICAgIHJldHVybiBWaXNp
YmxlUG9zaXRpb24oKTsKIApJbmRleDogV2ViQ29yZS9lZGl0aW5nL2h0bWxlZGl0aW5nLmNwcAo9
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09Ci0tLSBXZWJDb3JlL2VkaXRpbmcvaHRtbGVkaXRpbmcuY3BwCShyZXZpc2lvbiAx
NzM5MDUpCisrKyBXZWJDb3JlL2VkaXRpbmcvaHRtbGVkaXRpbmcuY3BwCSh3b3JraW5nIGNvcHkp
CkBAIC0zNDQsNiArMzQ0LDEzIEBACiAKICAgICBpZiAobm9kZS0+aGFzQ2hpbGROb2RlcygpKQog
ICAgICAgICByZXR1cm4gbm9kZS0+Y291bnRDaGlsZE5vZGVzKCk7CisgICAgCisgICAgaWYgKG5v
ZGUtPmlzRWxlbWVudE5vZGUoKSkgeworICAgICAgICBjb25zdCBFbGVtZW50ICplbHQgPSB0b0Vs
ZW1lbnQobm9kZSk7CisgICAgICAgIGlmIChlbHQtPmJlZm9yZVBzZXVkb0VsZW1lbnQoKSB8fCBl
bHQtPmFmdGVyUHNldWRvRWxlbWVudCgpKSB7CisgICAgICAgICAgICByZXR1cm4gMTsKKyAgICAg
ICAgfQorICAgIH0KIAogICAgIC8vIE5PVEU6IFRoaXMgc2hvdWxkIHByZWVtcHQgdGhlIGNvdW50
Q2hpbGROb2RlcygpIGZvciwgZS5nLiwgc2VsZWN0IG5vZGVzICh3aGF0IGRvZXMgdGhpcyBtZWFu
KT8KICAgICBpZiAoZWRpdGluZ0lnbm9yZXNDb250ZW50KG5vZGUpKQpJbmRleDogV2ViQ29yZS9w
YWdlL0RPTVNlbGVjdGlvbi5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gV2ViQ29yZS9wYWdlL0RPTVNlbGVj
dGlvbi5jcHAJKHJldmlzaW9uIDE3MzkwNSkKKysrIFdlYkNvcmUvcGFnZS9ET01TZWxlY3Rpb24u
Y3BwCSh3b3JraW5nIGNvcHkpCkBAIC0xOTIsNiArMTkyLDcgQEAKIAogdm9pZCBET01TZWxlY3Rp
b246OmNvbGxhcHNlKE5vZGUqIG5vZGUsIGludCBvZmZzZXQsIEV4Y2VwdGlvbkNvZGUmIGVjKQog
eworICAgIEFTU0VSVChub2RlKTsKICAgICBpZiAoIW1fZnJhbWUpCiAgICAgICAgIHJldHVybjsK
IApAQCAtMjAzLDEwICsyMDQsMjAgQEAKICAgICBpZiAoIWlzVmFsaWRGb3JQb3NpdGlvbihub2Rl
KSkKICAgICAgICAgcmV0dXJuOwogCi0gICAgLy8gRklYTUU6IEVsaW1pbmF0ZSBsZWdhY3kgZWRp
dGluZyBwb3NpdGlvbnMKLSAgICBtX2ZyYW1lLT5zZWxlY3Rpb24oKS5tb3ZlVG8oY3JlYXRlTGVn
YWN5RWRpdGluZ1Bvc2l0aW9uKG5vZGUsIG9mZnNldCksIERPV05TVFJFQU0pOworICAgIGlmICgh
bm9kZSkKKyAgICAgICAgcmV0dXJuOworCisgICAgLyogUmVmUHRyV2lsbEJlUmF3UHRyICovIFJl
ZlB0cjxSYW5nZT4gcmFuZ2UgPSBSYW5nZTo6Y3JlYXRlKG5vZGUtPmRvY3VtZW50KCkpOworICAg
IHJhbmdlLT5zZXRTdGFydChub2RlLCBvZmZzZXQpOyAvLyAsIGV4Y2VwdGlvblN0YXRlKTsKKyAg
ICByYW5nZS0+c2V0RW5kKG5vZGUsIG9mZnNldCk7IC8vICwgZXhjZXB0aW9uU3RhdGUpOworICAg
IG1fZnJhbWUtPnNlbGVjdGlvbigpLnNldFNlbGVjdGVkUmFuZ2UocmFuZ2UuZ2V0KCksIERPV05T
VFJFQU0sIGZhbHNlLCBtX2ZyYW1lLT5zZWxlY3Rpb24oKS5pc0RpcmVjdGlvbmFsKCkpOwogfQog
Cit2b2lkIERPTVNlbGVjdGlvbjo6Y29sbGFwc2UoTm9kZSogbm9kZSwgRXhjZXB0aW9uQ29kZSYg
ZXhjZXB0aW9uU3RhdGUpCit7CisgICAgY29sbGFwc2Uobm9kZSwgMCwgZXhjZXB0aW9uU3RhdGUp
OworfQorCiB2b2lkIERPTVNlbGVjdGlvbjo6Y29sbGFwc2VUb0VuZChFeGNlcHRpb25Db2RlJiBl
YykKIHsKICAgICBpZiAoIW1fZnJhbWUpCkBAIC0zNjgsNyArMzc5LDcgQEAKICAgICAgICAgcmV0
dXJuIFJhbmdlOjpjcmVhdGUoc2hhZG93QW5jZXN0b3ItPmRvY3VtZW50KCksIGNvbnRhaW5lciwg
b2Zmc2V0LCBjb250YWluZXIsIG9mZnNldCk7CiAgICAgfQogCi0gICAgcmV0dXJuIG1fZnJhbWUt
PnNlbGVjdGlvbigpLnNlbGVjdGlvbigpLmZpcnN0UmFuZ2UoKTsKKyAgICByZXR1cm4gbV9mcmFt
ZS0+c2VsZWN0aW9uKCkuZmlyc3RSYW5nZSgpOwogfQogCiB2b2lkIERPTVNlbGVjdGlvbjo6cmVt
b3ZlQWxsUmFuZ2VzKCkKQEAgLTM3OCw0NSArMzg5LDYzIEBACiAgICAgbV9mcmFtZS0+c2VsZWN0
aW9uKCkuY2xlYXIoKTsKIH0KIAotdm9pZCBET01TZWxlY3Rpb246OmFkZFJhbmdlKFJhbmdlKiBy
KQordm9pZCBET01TZWxlY3Rpb246OmFkZFJhbmdlKFJhbmdlKiBuZXdSYW5nZSkKIHsKICAgICBp
ZiAoIW1fZnJhbWUpCiAgICAgICAgIHJldHVybjsKLSAgICBpZiAoIXIpCisgICAgLy8gRklYTUU6
IFNob3VsZCB3ZSB0aHJvdyBET01FeGNlcHRpb24gZm9yIGVycm9yIGNhc2VzIGJlbG93PworICAg
IGlmICghbmV3UmFuZ2UpIHsKKyAgICAgICAgYWRkQ29uc29sZUVycm9yKCJUaGUgZ2l2ZW4gcmFu
Z2UgaXMgbnVsbC4iKTsKICAgICAgICAgcmV0dXJuOworICAgIH0KKyAgICBpZiAoIW5ld1Jhbmdl
LT5zdGFydENvbnRhaW5lcigpKSB7CisgICAgICAgIGFkZENvbnNvbGVFcnJvcigiVGhlIGdpdmVu
IHJhbmdlIGhhcyBubyBjb250YWluZXIuIFBlcmhhcHMgJ2RldGFjaCgpJyBoYXMgYmVlbiBpbnZv
a2VkIG9uIGl0PyIpOworICAgICAgICByZXR1cm47CisgICAgfQogCisKICAgICBGcmFtZVNlbGVj
dGlvbiYgc2VsZWN0aW9uID0gbV9mcmFtZS0+c2VsZWN0aW9uKCk7CiAKICAgICBpZiAoc2VsZWN0
aW9uLmlzTm9uZSgpKSB7Ci0gICAgICAgIHNlbGVjdGlvbi5tb3ZlVG8ocik7CisgICAgICAgIC8v
IHNlbGVjdGlvbi5tb3ZlVG8ocik7CisgICAgICAgIHNlbGVjdGlvbi5zZXRTZWxlY3RlZFJhbmdl
KG5ld1JhbmdlLCBWUF9ERUZBVUxUX0FGRklOSVRZLCBmYWxzZSwgc2VsZWN0aW9uLmlzRGlyZWN0
aW9uYWwoKSk7CiAgICAgICAgIHJldHVybjsKICAgICB9CiAKLSAgICBSZWZQdHI8UmFuZ2U+IHJh
bmdlID0gc2VsZWN0aW9uLnNlbGVjdGlvbigpLnRvTm9ybWFsaXplZFJhbmdlKCk7Ci0gICAgaWYg
KHItPmNvbXBhcmVCb3VuZGFyeVBvaW50cyhSYW5nZTo6U1RBUlRfVE9fU1RBUlQsIHJhbmdlLmdl
dCgpLCBJR05PUkVfRVhDRVBUSU9OKSA9PSAtMSkgewotICAgICAgICAvLyBXZSBkb24ndCBzdXBw
b3J0IGRpc2NvbnRpZ3VvdXMgc2VsZWN0aW9uLiBXZSBkb24ndCBkbyBhbnl0aGluZyBpZiByIGFu
ZCByYW5nZSBkb24ndCBpbnRlcnNlY3QuCi0gICAgICAgIGlmIChyLT5jb21wYXJlQm91bmRhcnlQ
b2ludHMoUmFuZ2U6OlNUQVJUX1RPX0VORCwgcmFuZ2UuZ2V0KCksIElHTk9SRV9FWENFUFRJT04p
ID4gLTEpIHsKLSAgICAgICAgICAgIGlmIChyLT5jb21wYXJlQm91bmRhcnlQb2ludHMoUmFuZ2U6
OkVORF9UT19FTkQsIHJhbmdlLmdldCgpLCBJR05PUkVfRVhDRVBUSU9OKSA9PSAtMSkgewotICAg
ICAgICAgICAgICAgIC8vIFRoZSBvcmlnaW5hbCByYW5nZSBhbmQgciBpbnRlcnNlY3QuCi0gICAg
ICAgICAgICAgICAgc2VsZWN0aW9uLm1vdmVUbyhyLT5zdGFydFBvc2l0aW9uKCksIHJhbmdlLT5l
bmRQb3NpdGlvbigpLCBET1dOU1RSRUFNKTsKLSAgICAgICAgICAgIH0gZWxzZSB7Ci0gICAgICAg
ICAgICAgICAgLy8gciBjb250YWlucyB0aGUgb3JpZ2luYWwgcmFuZ2UuCi0gICAgICAgICAgICAg
ICAgc2VsZWN0aW9uLm1vdmVUbyhyKTsKLSAgICAgICAgICAgIH0KLSAgICAgICAgfQotICAgIH0g
ZWxzZSB7Ci0gICAgICAgIC8vIFdlIGRvbid0IHN1cHBvcnQgZGlzY29udGlndW91cyBzZWxlY3Rp
b24uIFdlIGRvbid0IGRvIGFueXRoaW5nIGlmIHIgYW5kIHJhbmdlIGRvbid0IGludGVyc2VjdC4K
LSAgICAgICAgRXhjZXB0aW9uQ29kZSBlYyA9IDA7Ci0gICAgICAgIGlmIChyLT5jb21wYXJlQm91
bmRhcnlQb2ludHMoUmFuZ2U6OkVORF9UT19TVEFSVCwgcmFuZ2UuZ2V0KCksIGVjKSA8IDEgJiYg
IWVjKSB7Ci0gICAgICAgICAgICBpZiAoci0+Y29tcGFyZUJvdW5kYXJ5UG9pbnRzKFJhbmdlOjpF
TkRfVE9fRU5ELCByYW5nZS5nZXQoKSwgSUdOT1JFX0VYQ0VQVElPTikgPT0gLTEpIHsKLSAgICAg
ICAgICAgICAgICAvLyBUaGUgb3JpZ2luYWwgcmFuZ2UgY29udGFpbnMgci4KLSAgICAgICAgICAg
ICAgICBzZWxlY3Rpb24ubW92ZVRvKHJhbmdlLmdldCgpKTsKLSAgICAgICAgICAgIH0gZWxzZSB7
Ci0gICAgICAgICAgICAgICAgLy8gVGhlIG9yaWdpbmFsIHJhbmdlIGFuZCByIGludGVyc2VjdC4K
LSAgICAgICAgICAgICAgICBzZWxlY3Rpb24ubW92ZVRvKHJhbmdlLT5zdGFydFBvc2l0aW9uKCks
IHItPmVuZFBvc2l0aW9uKCksIERPV05TVFJFQU0pOwotICAgICAgICAgICAgfQotICAgICAgICB9
CisgICAgUmVmUHRyPFJhbmdlPiBvcmlnaW5hbFJhbmdlID0gc2VsZWN0aW9uLmZpcnN0UmFuZ2Uo
KTsKKworICAgIGlmICgmb3JpZ2luYWxSYW5nZS0+c3RhcnRDb250YWluZXIoKS0+ZG9jdW1lbnQo
KSAhPSAmbmV3UmFuZ2UtPnN0YXJ0Q29udGFpbmVyKCktPmRvY3VtZW50KCkpIHsKKyAgICAgICAg
YWRkQ29uc29sZUVycm9yKCJUaGUgZ2l2ZW4gcmFuZ2UgZG9lcyBub3QgYmVsb25nIHRvIHRoZSBj
dXJyZW50IHNlbGVjdGlvbidzIGRvY3VtZW50LiIpOworICAgICAgICByZXR1cm47CiAgICAgfQor
ICAgIGlmICgmb3JpZ2luYWxSYW5nZS0+c3RhcnRDb250YWluZXIoKS0+dHJlZVNjb3BlKCkgIT0g
Jm5ld1JhbmdlLT5zdGFydENvbnRhaW5lcigpLT50cmVlU2NvcGUoKSkgeworICAgICAgICBhZGRD
b25zb2xlRXJyb3IoIlRoZSBnaXZlbiByYW5nZSBhbmQgdGhlIGN1cnJlbnQgc2VsZWN0aW9uIGJl
bG9uZyB0byB0d28gZGlmZmVyZW50IGRvY3VtZW50IGZyYWdtZW50cy4iKTsKKyAgICAgICAgcmV0
dXJuOworICAgIH0KKworICAgIGlmIChvcmlnaW5hbFJhbmdlLT5jb21wYXJlQm91bmRhcnlQb2lu
dHMoUmFuZ2U6OlNUQVJUX1RPX0VORCwgbmV3UmFuZ2UsIEFTU0VSVF9OT19FWENFUFRJT04pIDwg
MAorICAgICAgICB8fCBuZXdSYW5nZS0+Y29tcGFyZUJvdW5kYXJ5UG9pbnRzKFJhbmdlOjpTVEFS
VF9UT19FTkQsIG9yaWdpbmFsUmFuZ2UuZ2V0KCksIEFTU0VSVF9OT19FWENFUFRJT04pIDwgMCkg
eworICAgICAgICBhZGRDb25zb2xlRXJyb3IoIkRpc2NvbnRpZ3VvdXMgc2VsZWN0aW9uIGlzIG5v
dCBzdXBwb3J0ZWQuIik7CisgICAgICAgIHJldHVybjsKKyAgICB9CisKKyAgICBpZiAob3JpZ2lu
YWxSYW5nZS0+Y29tcGFyZUJvdW5kYXJ5UG9pbnRzKFJhbmdlOjpTVEFSVF9UT19FTkQsIG5ld1Jh
bmdlLCBBU1NFUlRfTk9fRVhDRVBUSU9OKSA8IDAKKyAgICAgICAgfHwgbmV3UmFuZ2UtPmNvbXBh
cmVCb3VuZGFyeVBvaW50cyhSYW5nZTo6U1RBUlRfVE9fRU5ELCBvcmlnaW5hbFJhbmdlLmdldCgp
LCBBU1NFUlRfTk9fRVhDRVBUSU9OKSA8IDApIHsKKyAgICAgICAgYWRkQ29uc29sZUVycm9yKCJE
aXNjb250aWd1b3VzIHNlbGVjdGlvbiBpcyBub3Qgc3VwcG9ydGVkLiIpOworICAgICAgICByZXR1
cm47CisgICAgfQorCisgICAgLy8gRklYTUU6ICJNZXJnZSB0aGUgcmFuZ2VzIGlmIHRoZXkgaW50
ZXJzZWN0IiBpcyBCbGluay1zcGVjaWZpYyBiZWhhdmlvcjsgb3RoZXIgYnJvd3NlcnMgc3VwcG9y
dGluZyBkaXNjb250aWd1b3VzCisgICAgLy8gc2VsZWN0aW9uIChvYnZpb3VzbHkpIGtlZXAgZWFj
aCBSYW5nZSBhZGRlZCBhbmQgcmV0dXJuIGl0IGluIGdldFJhbmdlQXQoKS4gQnV0IGl0J3MgdW5j
bGVhciBpZiB3ZSBjYW4gcmVhbGx5CisgICAgLy8gZG8gdGhlIHNhbWUsIHNpbmNlIHdlIGRvbid0
IHN1cHBvcnQgZGlzY29udGlndW91cyBzZWxlY3Rpb24uIEZ1cnRoZXIgZGlzY3Vzc2lvbnMgYXQK
KyAgICAvLyA8aHR0cHM6Ly9jb2RlLmdvb2dsZS5jb20vcC9jaHJvbWl1bS9pc3N1ZXMvZGV0YWls
P2lkPTM1MzA2OT4uCisKKyAgICBSYW5nZSogc3RhcnQgPSBvcmlnaW5hbFJhbmdlLT5jb21wYXJl
Qm91bmRhcnlQb2ludHMoUmFuZ2U6OlNUQVJUX1RPX1NUQVJULCBuZXdSYW5nZSwgQVNTRVJUX05P
X0VYQ0VQVElPTikgPCAwID8gb3JpZ2luYWxSYW5nZS5nZXQoKSA6IG5ld1JhbmdlOworICAgIFJh
bmdlKiBlbmQgPSBvcmlnaW5hbFJhbmdlLT5jb21wYXJlQm91bmRhcnlQb2ludHMoUmFuZ2U6OkVO
RF9UT19FTkQsIG5ld1JhbmdlLCBBU1NFUlRfTk9fRVhDRVBUSU9OKSA8IDAgPyBuZXdSYW5nZSA6
IG9yaWdpbmFsUmFuZ2UuZ2V0KCk7CisgICAgUmVmUHRyPFJhbmdlPiBtZXJnZWQgPSBSYW5nZTo6
Y3JlYXRlKG9yaWdpbmFsUmFuZ2UtPnN0YXJ0Q29udGFpbmVyKCktPmRvY3VtZW50KCksIHN0YXJ0
LT5zdGFydENvbnRhaW5lcigpLCBzdGFydC0+c3RhcnRPZmZzZXQoKSwgZW5kLT5lbmRDb250YWlu
ZXIoKSwgZW5kLT5lbmRPZmZzZXQoKSk7CisgICAgRUFmZmluaXR5IGFmZmluaXR5ID0gc2VsZWN0
aW9uLnNlbGVjdGlvbigpLmFmZmluaXR5KCk7CisgICAgc2VsZWN0aW9uLnNldFNlbGVjdGVkUmFu
Z2UobWVyZ2VkLmdldCgpLCBhZmZpbml0eSwgZmFsc2UsIHNlbGVjdGlvbi5pc0RpcmVjdGlvbmFs
KCkpOworCiB9CiAKIHZvaWQgRE9NU2VsZWN0aW9uOjpkZWxldGVGcm9tRG9jdW1lbnQoKQpAQCAt
NTM0LDQgKzU2MywxMCBAQAogICAgIHJldHVybiAmbm9kZS0+ZG9jdW1lbnQoKSA9PSBtX2ZyYW1l
LT5kb2N1bWVudCgpOwogfQogCit2b2lkIERPTVNlbGVjdGlvbjo6YWRkQ29uc29sZUVycm9yKGNv
bnN0IFN0cmluZyYgbWVzc2FnZSkKK3sKKyAgICBBU1NFUlQobV9mcmFtZSk7CisgICAgbV9mcmFt
ZS0+ZG9jdW1lbnQoKS0+YWRkQ29uc29sZU1lc3NhZ2UoTWVzc2FnZVNvdXJjZTo6SlMsIE1lc3Nh
Z2VMZXZlbDo6RXJyb3IsIG1lc3NhZ2UpOworfQorCiB9IC8vIG5hbWVzcGFjZSBXZWJDb3JlCklu
ZGV4OiBXZWJDb3JlL3BhZ2UvRE9NU2VsZWN0aW9uLmgKPT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gV2ViQ29yZS9w
YWdlL0RPTVNlbGVjdGlvbi5oCShyZXZpc2lvbiAxNzM5MDUpCisrKyBXZWJDb3JlL3BhZ2UvRE9N
U2VsZWN0aW9uLmgJKHdvcmtpbmcgY29weSkKQEAgLTc3LDYgKzc3LDcgQEAKICAgICAgICAgYm9v
bCBpc0NvbGxhcHNlZCgpIGNvbnN0OwogICAgICAgICBpbnQgcmFuZ2VDb3VudCgpIGNvbnN0Owog
ICAgICAgICB2b2lkIGNvbGxhcHNlKE5vZGUqLCBpbnQgb2Zmc2V0LCBFeGNlcHRpb25Db2RlJik7
CisgICAgICAgIHZvaWQgY29sbGFwc2UoTm9kZSosIEV4Y2VwdGlvbkNvZGUmKTsKICAgICAgICAg
dm9pZCBjb2xsYXBzZVRvRW5kKEV4Y2VwdGlvbkNvZGUmKTsKICAgICAgICAgdm9pZCBjb2xsYXBz
ZVRvU3RhcnQoRXhjZXB0aW9uQ29kZSYpOwogICAgICAgICB2b2lkIGV4dGVuZChOb2RlKiwgaW50
IG9mZnNldCwgRXhjZXB0aW9uQ29kZSYpOwpAQCAtOTMsOCArOTQsNiBAQAogICAgICAgICB2b2lk
IGVtcHR5KCk7CiAKICAgICBwcml2YXRlOgotICAgICAgICBjb25zdCBUcmVlU2NvcGUqIG1fdHJl
ZVNjb3BlOwotCiAgICAgICAgIGV4cGxpY2l0IERPTVNlbGVjdGlvbihjb25zdCBUcmVlU2NvcGUq
KTsKIAogICAgICAgICAvLyBDb252ZW5pZW5jZSBtZXRob2QgZm9yIGFjY2Vzc29ycywgZG9lcyBu
b3QgTlVMTCBjaGVjayBtX2ZyYW1lLgpAQCAtMTA0LDYgKzEwMywxMCBAQAogICAgICAgICBpbnQg
c2hhZG93QWRqdXN0ZWRPZmZzZXQoY29uc3QgUG9zaXRpb24mKSBjb25zdDsKIAogICAgICAgICBi
b29sIGlzVmFsaWRGb3JQb3NpdGlvbihOb2RlKikgY29uc3Q7CisKKyAgICAgICAgdm9pZCBhZGRD
b25zb2xlRXJyb3IoY29uc3QgU3RyaW5nJiBtZXNzYWdlKTsKKworICAgICAgICBjb25zdCBUcmVl
U2NvcGUqIG1fdHJlZVNjb3BlOwogICAgIH07CiAKIH0gLy8gbmFtZXNwYWNlIFdlYkNvcmUKSW5k
ZXg6IFdlYkNvcmUvcGFnZS9ET01TZWxlY3Rpb24uaWRsCj09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFdlYkNvcmUv
cGFnZS9ET01TZWxlY3Rpb24uaWRsCShyZXZpc2lvbiAxNzM5MDUpCisrKyBXZWJDb3JlL3BhZ2Uv
RE9NU2VsZWN0aW9uLmlkbAkod29ya2luZyBjb3B5KQpAQCAtNDEsOCArNDEsMTAgQEAKICAgICBy
ZWFkb25seSBhdHRyaWJ1dGUgYm9vbGVhbiBpc0NvbGxhcHNlZDsKICAgICByZWFkb25seSBhdHRy
aWJ1dGUgbG9uZyByYW5nZUNvdW50OwogCi0gICAgW1JhaXNlc0V4Y2VwdGlvbl0gdm9pZCBjb2xs
YXBzZShbRGVmYXVsdD1VbmRlZmluZWRdIG9wdGlvbmFsIE5vZGUgbm9kZSwgCi0gICAgICAgICAg
ICAgICAgICBbRGVmYXVsdD1VbmRlZmluZWRdIG9wdGlvbmFsIGxvbmcgaW5kZXgpOworICAgIC8v
IFtSYWlzZXNFeGNlcHRpb25dIHZvaWQgY29sbGFwc2UoW0RlZmF1bHQ9VW5kZWZpbmVkXSBvcHRp
b25hbCBOb2RlIG5vZGUsIAorICAgICAgICAgICAgICAgICAgLy8gW0RlZmF1bHQ9VW5kZWZpbmVk
XSBvcHRpb25hbCBsb25nIGluZGV4KTsKKyAgICBbUmFpc2VzRXhjZXB0aW9uLCBTdHJpY3RUeXBl
Q2hlY2tpbmddIHZvaWQgY29sbGFwc2UoTm9kZSBub2RlLAorICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBvcHRpb25hbCBsb25nIG9mZnNldCk7
CiAgICAgW1JhaXNlc0V4Y2VwdGlvbl0gdm9pZCBjb2xsYXBzZVRvRW5kKCk7CiAgICAgW1JhaXNl
c0V4Y2VwdGlvbl0gdm9pZCBjb2xsYXBzZVRvU3RhcnQoKTsKIApAQCAtNzksNiArODEsOSBAQAog
ICAgICAgICAgICAgICAgICAgICAgICAgICBbRGVmYXVsdD1VbmRlZmluZWRdIG9wdGlvbmFsIGxv
bmcgYmFzZU9mZnNldCwgCiAgICAgICAgICAgICAgICAgICAgICAgICAgIFtEZWZhdWx0PVVuZGVm
aW5lZF0gb3B0aW9uYWwgTm9kZSBleHRlbnROb2RlLCAKICAgICAgICAgICAgICAgICAgICAgICAg
ICAgW0RlZmF1bHQ9VW5kZWZpbmVkXSBvcHRpb25hbCBsb25nIGV4dGVudE9mZnNldCk7CisgICAg
W0ltcGxlbWVudGVkQXM9Y29sbGFwc2UsIC8qIE1lYXN1cmVBcz1TZWxlY3Rpb25TZXRQb3NpdGlv
biwgKi8gUmFpc2VzRXhjZXB0aW9uLCBTdHJpY3RUeXBlQ2hlY2tpbmddIHZvaWQgc2V0UG9zaXRp
b24oTm9kZSBub2RlLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgIG9wdGlvbmFsIGxvbmcgb2Zmc2V0KTsKKwogICAgIFtSYWlzZXNFeGNl
cHRpb25dIHZvaWQgc2V0UG9zaXRpb24oW0RlZmF1bHQ9VW5kZWZpbmVkXSBvcHRpb25hbCBOb2Rl
IG5vZGUsIAogICAgICAgICAgICAgICAgICAgICAgW0RlZmF1bHQ9VW5kZWZpbmVkXSBvcHRpb25h
bCBsb25nIG9mZnNldCk7CiAKSW5kZXg6IFdlYkNvcmUvcmVuZGVyaW5nL0lubGluZUZsb3dCb3gu
Y3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT0KLS0tIFdlYkNvcmUvcmVuZGVyaW5nL0lubGluZUZsb3dCb3guY3BwCShy
ZXZpc2lvbiAxNzM5MDUpCisrKyBXZWJDb3JlL3JlbmRlcmluZy9JbmxpbmVGbG93Qm94LmNwcAko
d29ya2luZyBjb3B5KQpAQCAtMSw1ICsxLDYgQEAKIC8qCiAgKiBDb3B5cmlnaHQgKEMpIDIwMDMs
IDIwMDQsIDIwMDUsIDIwMDYsIDIwMDcsIDIwMDgsIDIwMDkgQXBwbGUgSW5jLiBBbGwgcmlnaHRz
IHJlc2VydmVkLgorICogUG9ydGlvbnMgQ29weXJpZ2h0IChjKSAyMDE0IERhdmlkIEEuIEdhdHdv
b2QuICBBbGwgcmlnaHRzIHJlc2VydmVkLgogICoKICAqIFRoaXMgbGlicmFyeSBpcyBmcmVlIHNv
ZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IKICAqIG1vZGlmeSBpdCB1bmRl
ciB0aGUgdGVybXMgb2YgdGhlIEdOVSBMaWJyYXJ5IEdlbmVyYWwgUHVibGljCkBAIC0xNjM3LDcg
KzE2MzgsNTAgQEAKICAgICAgICAgKyttaW5MZXZlbDsKICAgICB9CiB9CisgICAgCitib29sIElu
bGluZUZsb3dCb3g6OmlzTGVhZigpIGNvbnN0Cit7CisgICAgSW5saW5lQm94ICpwb3MgPSBtX2Zp
cnN0Q2hpbGQ7CisgICAgCisgICAgaWYgKCFwb3MpIHsKKyAgICAgICAgLy8gSW4gcHJhY3RpY2Us
IHRoaXMgc2hvdWxkIG5ldmVyIGhhcHBlbi4KKyAgICAgICAgcmV0dXJuIHRydWU7CisgICAgfQor
ICAgIAorICAgIC8qIFRoZSBib3ggaXMgbm9ybWFsbHkgbm90IGEgbGVhZi4gIEhvd2V2ZXIsIHRy
ZWF0IGl0IGFzIGEgbGVhZiBpZiBpdHMgYm94CisgICAgICAgY29udGFpbnMgbm90aGluZyBidXQg
OjpiZWZvcmUgYW5kIDo6YWZ0ZXIgcHNldWRvZWxlbWVudHMuCisgICAgICovCisgICAgd2hpbGUg
KCghJnBvcy0+cmVuZGVyZXIoKSkgfHwgcG9zLT5yZW5kZXJlcigpLmlzQW5vbnltb3VzKCkgfHwg
IXBvcy0+cmVuZGVyZXIoKS5ub25Qc2V1ZG9Ob2RlKCkpIHsKKyAgICAgICAgCisgICAgICAgIC8q
IElmIGl0J3MgYSBib3ggdGhhdCBjb250YWlucyBvdGhlciBib3hlcywgYW5kIGlmIGl0IGlzbid0
IHRoZSBib3ggZm9yIGEKKyAgICAgICAgICAgcHNldWRvZWxlbWVudCwgZXhhbWluZSBpdHMgY2hp
bGRyZW4gbmV4dC4gIElmIGl0J3MgYSBwc2V1ZG9lbGVtZW50CisgICAgICAgICAgIGRvbid0IGxv
b2sgaW5zaWRlLgorICAgICAgICAgKi8KKyAgICAgICAgaWYgKHBvcy0+aXNJbmxpbmVGbG93Qm94
KCkgJiYgcG9zLT5yZW5kZXJlcigpLm5vblBzZXVkb05vZGUoKSkgeworICAgICAgICAgICAgSW5s
aW5lRmxvd0JveCAqdGVtcCA9IHN0YXRpY19jYXN0PElubGluZUZsb3dCb3ggKj4ocG9zKTsKKyAg
ICAgICAgICAgIGlmICh0ZW1wLT5maXJzdENoaWxkKCkpIHsKKyAgICAgICAgICAgICAgICBwb3Mg
PSB0ZW1wLT5maXJzdENoaWxkKCk7CisgICAgICAgICAgICAgICAgY29udGludWU7CisgICAgICAg
ICAgICB9CisgICAgICAgIH0KKyAgICAgICAgSW5saW5lQm94ICpuZXh0ID0gcG9zLT5uZXh0T25M
aW5lKCk7CisgICAgICAgIGlmIChuZXh0KSB7CisgICAgICAgICAgICBwb3MgPSBuZXh0OworICAg
ICAgICAgICAgY29udGludWU7CisgICAgICAgIH0KKyAgICAgICAgd2hpbGUgKHBvcy0+cGFyZW50
KCkgJiYgcG9zLT5wYXJlbnQoKSAhPSB0aGlzICYmICFwb3MtPnBhcmVudCgpLT5uZXh0T25MaW5l
KCkpIHsKKyAgICAgICAgICAgIHBvcyA9IHBvcy0+cGFyZW50KCk7CisgICAgICAgIH0KKyAgICAg
ICAgcG9zID0gcG9zLT5wYXJlbnQoKTsKKyAgICAgICAgaWYgKCFwb3MpIHJldHVybiB0cnVlOwor
ICAgICAgICBpZiAocG9zID09IHRoaXMpIHJldHVybiB0cnVlOworICAgICAgICBwb3MgPSBwb3Mt
Pm5leHRPbkxpbmUoKTsKKyAgICB9CisgICAgCisgICAgcmV0dXJuIGZhbHNlOworfQogCisKICNp
Zm5kZWYgTkRFQlVHCiAKIGNvbnN0IGNoYXIqIElubGluZUZsb3dCb3g6OmJveE5hbWUoKSBjb25z
dApJbmRleDogV2ViQ29yZS9yZW5kZXJpbmcvSW5saW5lRmxvd0JveC5oCj09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0t
IFdlYkNvcmUvcmVuZGVyaW5nL0lubGluZUZsb3dCb3guaAkocmV2aXNpb24gMTczOTA1KQorKysg
V2ViQ29yZS9yZW5kZXJpbmcvSW5saW5lRmxvd0JveC5oCSh3b3JraW5nIGNvcHkpCkBAIC04NSw5
ICs4NSw5IEBACiAKICAgICBJbmxpbmVCb3gqIGZpcnN0Q2hpbGQoKSBjb25zdCB7IGNoZWNrQ29u
c2lzdGVuY3koKTsgcmV0dXJuIG1fZmlyc3RDaGlsZDsgfQogICAgIElubGluZUJveCogbGFzdENo
aWxkKCkgY29uc3QgeyBjaGVja0NvbnNpc3RlbmN5KCk7IHJldHVybiBtX2xhc3RDaGlsZDsgfQot
Ci0gICAgdmlydHVhbCBib29sIGlzTGVhZigpIGNvbnN0IG92ZXJyaWRlIGZpbmFsIHsgcmV0dXJu
IGZhbHNlOyB9CiAgICAgCisgICAgYm9vbCBpc0xlYWYoKSBjb25zdCBvdmVycmlkZSBmaW5hbDsK
KyAgICAKICAgICBJbmxpbmVCb3gqIGZpcnN0TGVhZkNoaWxkKCkgY29uc3Q7CiAgICAgSW5saW5l
Qm94KiBsYXN0TGVhZkNoaWxkKCkgY29uc3Q7CiAKQEAgLTMwMCw2ICszMDAsNyBAQAogICAgIHZv
aWQgYWRkVGV4dEJveFZpc3VhbE92ZXJmbG93KElubGluZVRleHRCb3gmLCBHbHlwaE92ZXJmbG93
QW5kRmFsbGJhY2tGb250c01hcCYsIExheW91dFJlY3QmIGxvZ2ljYWxWaXN1YWxPdmVyZmxvdyk7
CiAgICAgdm9pZCBhZGRSZXBsYWNlZENoaWxkT3ZlcmZsb3coY29uc3QgSW5saW5lQm94KiwgTGF5
b3V0UmVjdCYgbG9naWNhbExheW91dE92ZXJmbG93LCBMYXlvdXRSZWN0JiBsb2dpY2FsVmlzdWFs
T3ZlcmZsb3cpOwogICAgIHZvaWQgY29uc3RyYWluVG9MaW5lVG9wQW5kQm90dG9tSWZOZWVkZWQo
TGF5b3V0UmVjdCYpIGNvbnN0OworICAgIAogCiBwcm90ZWN0ZWQ6CiAgICAgUmVmUHRyPFJlbmRl
ck92ZXJmbG93PiBtX292ZXJmbG93OwpJbmRleDogV2ViQ29yZS9yZW5kZXJpbmcvUmVuZGVyQm94
LmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09Ci0tLSBXZWJDb3JlL3JlbmRlcmluZy9SZW5kZXJCb3guY3BwCShyZXZp
c2lvbiAxNzM5MDUpCisrKyBXZWJDb3JlL3JlbmRlcmluZy9SZW5kZXJCb3guY3BwCSh3b3JraW5n
IGNvcHkpCkBAIC0zNSw2ICszNSw3IEBACiAjaW5jbHVkZSAiRnJhbWVWaWV3LmgiCiAjaW5jbHVk
ZSAiR3JhcGhpY3NDb250ZXh0LmgiCiAjaW5jbHVkZSAiSFRNTEVsZW1lbnQuaCIKKyNpbmNsdWRl
ICJQc2V1ZG9FbGVtZW50LmgiCiAjaW5jbHVkZSAiSFRNTEZyYW1lT3duZXJFbGVtZW50LmgiCiAj
aW5jbHVkZSAiSFRNTElucHV0RWxlbWVudC5oIgogI2luY2x1ZGUgIkhUTUxOYW1lcy5oIgpAQCAt
NDEyNSw3ICs0MTI2LDcgQEAKIAogICAgIExheW91dFJlY3QgcmVjdChsb2NhdGlvbigpLCBMYXlv
dXRTaXplKGNhcmV0V2lkdGgsIGhlaWdodCgpKSk7CiAgICAgYm9vbCBsdHIgPSBib3ggPyBib3gt
PmlzTGVmdFRvUmlnaHREaXJlY3Rpb24oKSA6IHN0eWxlKCkuaXNMZWZ0VG9SaWdodERpcmVjdGlv
bigpOwotCisgICAgCiAgICAgaWYgKCghY2FyZXRPZmZzZXQpIF4gbHRyKQogICAgICAgICByZWN0
Lm1vdmUoTGF5b3V0U2l6ZSh3aWR0aCgpIC0gY2FyZXRXaWR0aCwgMCkpOwogCkBAIC00MTM2LDYg
KzQxMzcsMzYgQEAKICAgICAgICAgcmVjdC5zZXRIZWlnaHQocm9vdEJveC5saW5lQm90dG9tKCkg
LSB0b3ApOwogICAgIH0KIAorICAgIE5vZGUgKm5vZGUgPSBib3gtPnJlbmRlcmVyKCkubm9kZSgp
OworICAgIGlmIChub2RlICYmICFub2RlLT5maXJzdENoaWxkKCkpCisgICAgeworICAgICAgICAv
KiBJZiBhbiBlbGVtZW50IGNvbnRhaW5zIGNoaWxkcmVuLCB0aGUgaW5zZXJ0aW9uIGNhcmV0IGlz
IHR5cGljYWxseQorICAgICAgICAgICBjb21wdXRlZCBiYXNlZCBvbiB0aGUgcG9zaXRpb24gb2Yg
dGhvc2UgY2hpbGRyZW4sIHdoaWNoIHRha2VzCisgICAgICAgICAgIGludG8gYWNjb3VudCBhbnkg
OjpiZWZvcmUgcHNldWRvLWVsZW1lbnRzIGluIHRoZSBwYXJlbnQgZWxlbWVudC4KKyAgICAgICAg
IAorICAgICAgICAgICBIb3dldmVyLCBpZiBhbiBlbGVtZW50IGNvbnRhaW5zIG5vIGNoaWxkcmVu
LCB0aGUgOjpiZWZvcmUKKyAgICAgICAgICAgcHNldWRvLWVsZW1lbnQncyB3aWR0aCBtdXN0IGJl
IGFkZGVkIHRvIHRoZSBsZWZ0IG1hcmdpbi4KKyAgICAgICAgICAgT3RoZXJ3aXNlLCB0aGUgaW5z
ZXJ0aW9uIGNhcmV0IHdvdWxkIGJlIHRvIHRoZSBsZWZ0IG9mIHRoZQorICAgICAgICAgICAqb3V0
c2lkZSogb2YgdGhlIGVsZW1lbnQgKGJlZm9yZSB0aGUgOjpiZWZvcmUgY29udGVudCksCisgICAg
ICAgICAgIHJhdGhlciB0aGFuIHRvIHRoZSBsZWZ0IG9mIHdoZXJlIGEgY29udGFpbmVkIHRleHQg
bm9kZSB3b3VsZAorICAgICAgICAgICBiZSBpZiBvbmUgZXhpc3RlZC4KKyAgICAgICAgICovCisg
ICAgICAgIEVsZW1lbnQgKmVsdCA9IHRvRWxlbWVudChub2RlKTsKKyAgICAgICAgUHNldWRvRWxl
bWVudCAqYmVmb3JlUHNldWRvRWxlbWVudCA9IGVsdC0+YmVmb3JlUHNldWRvRWxlbWVudCgpOwor
ICAgICAgICBSZW5kZXJPYmplY3QqIHJlbmRlck9iamVjdCA9IGJlZm9yZVBzZXVkb0VsZW1lbnQt
PnJlbmRlcmVyKCk7CisgICAgICAgIAorICAgICAgICBpZiAocmVuZGVyT2JqZWN0LT5pc0lubGlu
ZSgpKSB7CisgICAgICAgICAgICBSZW5kZXJJbmxpbmUgKnJlbmRlcklubGluZSA9IHRvUmVuZGVy
SW5saW5lKHJlbmRlck9iamVjdCk7CisgICAgICAgICAgICAKKyAgICAgICAgICAgIHJlY3QubW92
ZShyZW5kZXJJbmxpbmUtPm9mZnNldFdpZHRoKCksMCk7CisgICAgICAgICAgICAKKyAgICAgICAg
ICAgIHJlbmRlcklubGluZSA9IG5pbDsKKyAgICAgICAgfQorICAgICAgICAKKyAgICAgICAgcmVu
ZGVyT2JqZWN0ID0gbmlsOworICAgIH0KKworICAgIAogICAgIC8vIElmIGhlaWdodCBvZiBib3gg
aXMgc21hbGxlciB0aGFuIGZvbnQgaGVpZ2h0LCB1c2UgdGhlIGxhdHRlciBvbmUsCiAgICAgLy8g
b3RoZXJ3aXNlIHRoZSBjYXJldCBtaWdodCBiZWNvbWUgaW52aXNpYmxlLgogICAgIC8vCkBAIC00
MTU4LDYgKzQxODksNyBAQAogICAgIC8vIGlzIG5lZWRlZCBiZWNhdXNlIHdlIHVzZSBvZmZzZXRz
IGluc2lkZSBhbiAiYXRvbWljIiBlbGVtZW50IHRvIHJlcHJlc2VudAogICAgIC8vIHBvc2l0aW9u
cyBiZWZvcmUgYW5kIGFmdGVyIHRoZSBlbGVtZW50IGluIGRlcHJlY2F0ZWQgZWRpdGluZyBvZmZz
ZXRzLgogICAgIGlmIChlbGVtZW50KCkgJiYgIShlZGl0aW5nSWdub3Jlc0NvbnRlbnQoZWxlbWVu
dCgpKSB8fCBpc1JlbmRlcmVkVGFibGUoZWxlbWVudCgpKSkpIHsKKyAgICAgICAgCiAgICAgICAg
IHJlY3Quc2V0WChyZWN0LngoKSArIGJvcmRlckxlZnQoKSArIHBhZGRpbmdMZWZ0KCkpOwogICAg
ICAgICByZWN0LnNldFkocmVjdC55KCkgKyBwYWRkaW5nVG9wKCkgKyBib3JkZXJUb3AoKSk7CiAg
ICAgfQpJbmRleDogV2ViQ29yZS9yZW5kZXJpbmcvUmVuZGVyQm94TW9kZWxPYmplY3QuY3BwCj09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT0KLS0tIFdlYkNvcmUvcmVuZGVyaW5nL1JlbmRlckJveE1vZGVsT2JqZWN0LmNwcAko
cmV2aXNpb24gMTczOTA1KQorKysgV2ViQ29yZS9yZW5kZXJpbmcvUmVuZGVyQm94TW9kZWxPYmpl
Y3QuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0yNTY4LDEyICsyNTY4LDEzIEBACiAKIExheW91dFJl
Y3QgUmVuZGVyQm94TW9kZWxPYmplY3Q6OmxvY2FsQ2FyZXRSZWN0Rm9yRW1wdHlFbGVtZW50KExh
eW91dFVuaXQgd2lkdGgsIExheW91dFVuaXQgdGV4dEluZGVudE9mZnNldCkKIHsKLSAgICBBU1NF
UlQoIWZpcnN0Q2hpbGQoKSk7CisgICAgQVNTRVJUKCFmaXJzdE5vblBzZXVkb0VsZW1lbnRDaGls
ZCgpKTsKIAogICAgIC8vIEZJWE1FOiBUaGlzIGRvZXMgbm90IHRha2UgaW50byBhY2NvdW50IGVp
dGhlciA6Zmlyc3QtbGluZSBvciA6Zmlyc3QtbGV0dGVyCiAgICAgLy8gSG93ZXZlciwgYXMgc29v
biBhcyBzb21lIGNvbnRlbnQgaXMgZW50ZXJlZCwgdGhlIGxpbmUgYm94ZXMgd2lsbCBiZQogICAg
IC8vIGNvbnN0cnVjdGVkIGFuZCB0aGlzIGtsdWRnZSBpcyBub3QgY2FsbGVkIGFueSBtb3JlLiBT
byBvbmx5IHRoZSBjYXJldCBzaXplCiAgICAgLy8gb2YgYW4gZW1wdHkgOmZpcnN0LWxpbmUnZCBi
bG9jayBpcyB3cm9uZy4gSSB0aGluayB3ZSBjYW4gbGl2ZSB3aXRoIHRoYXQuCisgICAgCiAgICAg
Y29uc3QgUmVuZGVyU3R5bGUmIGN1cnJlbnRTdHlsZSA9IGZpcnN0TGluZVN0eWxlKCk7CiAgICAg
TGF5b3V0VW5pdCBoZWlnaHQgPSBsaW5lSGVpZ2h0KHRydWUsIGN1cnJlbnRTdHlsZS5pc0hvcml6
b250YWxXcml0aW5nTW9kZSgpID8gSG9yaXpvbnRhbExpbmUgOiBWZXJ0aWNhbExpbmUpOwogCklu
ZGV4OiBXZWJDb3JlL3JlbmRlcmluZy9SZW5kZXJFbGVtZW50LmgKPT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gV2Vi
Q29yZS9yZW5kZXJpbmcvUmVuZGVyRWxlbWVudC5oCShyZXZpc2lvbiAxNzM5MDUpCisrKyBXZWJD
b3JlL3JlbmRlcmluZy9SZW5kZXJFbGVtZW50LmgJKHdvcmtpbmcgY29weSkKQEAgLTU0LDYgKzU0
LDEyIEBACiAKICAgICBSZW5kZXJPYmplY3QqIGZpcnN0Q2hpbGQoKSBjb25zdCB7IHJldHVybiBt
X2ZpcnN0Q2hpbGQ7IH0KICAgICBSZW5kZXJPYmplY3QqIGxhc3RDaGlsZCgpIGNvbnN0IHsgcmV0
dXJuIG1fbGFzdENoaWxkOyB9CisgICAgUmVuZGVyT2JqZWN0ICpmaXJzdE5vblBzZXVkb0VsZW1l
bnRDaGlsZCgpIGNvbnN0CisgICAgeworICAgICAgICAgICAgUmVuZGVyT2JqZWN0ICpvYmogPSBm
aXJzdENoaWxkKCk7CisgICAgICAgICAgICB3aGlsZSAob2JqICYmIG9iai0+aXNQc2V1ZG9FbGVt
ZW50KCkpIHsgb2JqID0gb2JqLT5uZXh0U2libGluZygpOyB9CisgICAgICAgICAgICByZXR1cm4g
b2JqOworICAgIH0KIAogICAgIC8vIEZJWE1FOiBNYWtlIHRoZXNlIHN0YW5kYWxvbmUgYW5kIG1v
dmUgdG8gcmVsZXZhbnQgZmlsZXMuCiAgICAgYm9vbCBpc1JlbmRlckxheWVyTW9kZWxPYmplY3Qo
KSBjb25zdDsKSW5kZXg6IFdlYkNvcmUvcmVuZGVyaW5nL1JlbmRlcklubGluZS5jcHAKPT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PQotLS0gV2ViQ29yZS9yZW5kZXJpbmcvUmVuZGVySW5saW5lLmNwcAkocmV2aXNpb24gMTcz
OTA1KQorKysgV2ViQ29yZS9yZW5kZXJpbmcvUmVuZGVySW5saW5lLmNwcAkod29ya2luZyBjb3B5
KQpAQCAtMiw2ICsyLDcgQEAKICAqIENvcHlyaWdodCAoQykgMTk5OSBMYXJzIEtub2xsIChrbm9s
bEBrZGUub3JnKQogICogICAgICAgICAgIChDKSAxOTk5IEFudHRpIEtvaXZpc3RvIChrb2l2aXN0
b0BrZGUub3JnKQogICogQ29weXJpZ2h0IChDKSAyMDAzLCAyMDA0LCAyMDA1LCAyMDA2LCAyMDA3
LCAyMDA4LCAyMDA5IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqIFBvcnRpb25z
IENvcHlyaWdodCAoYykgMjAxNCBEYXZpZCBBLiBHYXR3b29kLiAgQWxsIHJpZ2h0cyByZXNlcnZl
ZC4KICAqCiAgKiBUaGlzIGxpYnJhcnkgaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3Ry
aWJ1dGUgaXQgYW5kL29yCiAgKiBtb2RpZnkgaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUg
TGlicmFyeSBHZW5lcmFsIFB1YmxpYwpAQCAtMjQ0LDkgKzI0NSw1MSBAQAogICAgIH0KIH0KIAot
TGF5b3V0UmVjdCBSZW5kZXJJbmxpbmU6OmxvY2FsQ2FyZXRSZWN0KElubGluZUJveCogaW5saW5l
Qm94LCBpbnQsIExheW91dFVuaXQqIGV4dHJhV2lkdGhUb0VuZE9mTGluZSkKK0xheW91dFJlY3Qg
UmVuZGVySW5saW5lOjpsb2NhbENhcmV0UmVjdChJbmxpbmVCb3gqIGlubGluZUJveCwgaW50IGNh
cmV0T2Zmc2V0LCBMYXlvdXRVbml0KiBleHRyYVdpZHRoVG9FbmRPZkxpbmUpCiB7Ci0gICAgaWYg
KGZpcnN0Q2hpbGQoKSkgeworICAgIGlmIChpc1BzZXVkb0VsZW1lbnQoKSkgeworICAgICAgICAv
KiBXZSBzaG91bGQgb25seSBnZXQgaGVyZSBpZiB0aGUgZW5jbG9zaW5nIGVsZW1lbnQgaGFzIG5v
IGNoaWxkIG5vZGVzLgorICAgICAgICAgICBDb21wdXRlIHRoZSBwb3NpdGlvbiBvZiB0aGUgY2Fy
ZXQgYmFzZWQgb24gdGhlIHBvc2l0aW9uIG9mIHRoZQorICAgICAgICAgICA6OmJlZm9yZSBwc2V1
ZG9lbGVtZW50IGlmIHRoZXJlIGlzIG9uZS4KKyAgICAgICAgCisgICAgICAgICAgIEZJWE1FOiBJ
biB0aGVvcnksIGl0IHNob3VsZCBiZSBwb3NzaWJsZSB0byBoYXZlIGEgY2FyZXQgaW5zaWRlIHRo
ZQorICAgICAgICAgICBlbGVtZW50IGV2ZW4gaWYgaXQgaGFzIG5vIDo6YmVmb3JlIHBzZXVkb2Vs
ZW1lbnQsIHdoaWNoIHJlcXVpcmVzCisgICAgICAgICAgIGNvbXB1dGluZyB0aGUgcG9zaXRpb24g
cmVsYXRpdmUgdG8gd2hhdGV2ZXIgY29tZXMgYmVmb3JlIGl0LgorICAgICAgICAgICBIb3dldmVy
LCBpbiBwcmFjdGljZSwgYmVjYXVzZSB0aGF0IHRoYXQgd291bGQgbWFrZSBpdCBubyBsb25nZXIg
YQorICAgICAgICAgICB2aXN1YWxseSBkaXN0aW5jdCBwb3NpdGlvbiwgaXQgaXNuJ3QgcG9zc2li
bGUgdG8gcHV0IHRoZSBpbnNlcnRpb24KKyAgICAgICAgICAgY2FyZXQgaW5zaWRlIHN1Y2ggYW4g
ZWxlbWVudCBhbnl3YXkuCisgICAgICAgICAqLworICAgICAgICBSZW5kZXJPYmplY3QgKmZjcmVu
ZGVyZXIgPSBmaXJzdENoaWxkKCk7CisgICAgICAgIAorICAgICAgICBpZiAoZmNyZW5kZXJlciAm
JiBmY3JlbmRlcmVyLT5pc1RleHQoKSkgeworICAgICAgICAgICAgYXV0byB0ZXh0UmVuZGVyZXIg
PSB0b1JlbmRlclRleHQoZmNyZW5kZXJlcik7CisgICAgICAgICAgICB0ZXh0UmVuZGVyZXItPmVu
c3VyZUxpbmVCb3hlcygpOworCisgICAgICAgICAgICBJbmxpbmVUZXh0Qm94KiBib3ggPSB0ZXh0
UmVuZGVyZXItPmxhc3RUZXh0Qm94KCk7CisgICAgICAgICAgICAKKyAgICAgICAgICAgIGlmIChi
b3gpIHsKKyAgICAgICAgICAgICAgICAvKiBDcmVhdGUgYSByZWN0IHdpdGggdGhlIHBvc2l0aW9u
IG9mIHRoZSBiZWdpbm5pbmcgb2YgdGhlIGxhc3QgaW5saW5lCisgICAgICAgICAgICAgICAgICAg
Ym94IGluIHRoZSA6OmJlZm9yZSBwc2V1ZG9lbGVtZW50LiAqLworICAgICAgICAgICAgICAgIGlu
dCBuZXdDYXJldE9mZnNldCA9IGJveC0+Y2FyZXRNaW5PZmZzZXQoKTsKKyAgICAgICAgICAgICAg
ICBMYXlvdXRSZWN0IGN1cnNvclBvc2l0aW9uID0gZmNyZW5kZXJlci0+bG9jYWxDYXJldFJlY3Qo
Ym94LCBuZXdDYXJldE9mZnNldCk7CisgICAgICAgICAgICAgICAgCisgICAgICAgICAgICAgICAg
LyogQWRkIHRoZSB3aWR0aCBvZiB0aGF0IHBzZXVkb2VsZW1lbnQuICovCisgICAgICAgICAgICAg
ICAgY3Vyc29yUG9zaXRpb24ubW92ZShib3gtPndpZHRoKCksIDApOworICAgICAgICAgICAgICAg
IAorICAgICAgICAgICAgICAgIHJldHVybiBjdXJzb3JQb3NpdGlvbjsKKyAgICAgICAgICAgIH0K
KyAgICAgICAgfSBlbHNlIGlmIChmY3JlbmRlcmVyLT5pc0JveCgpKSB7CisgICAgICAgICAgICBJ
bmxpbmVCb3ggKmJveCA9IHRvUmVuZGVyQm94KGZjcmVuZGVyZXIpLT5pbmxpbmVCb3hXcmFwcGVy
KCk7CisgICAgICAgICAgICAKKyAgICAgICAgICAgIExheW91dFJlY3QgY3Vyc29yUG9zaXRpb24g
PSBmY3JlbmRlcmVyLT5sb2NhbENhcmV0UmVjdChib3gsIGNhcmV0T2Zmc2V0KTsKKyAgICAgICAg
ICAgIAorICAgICAgICAgICAgLyogQWRkIHRoZSB3aWR0aCBvZiB0aGF0IHBzZXVkb2VsZW1lbnQu
ICovCisgICAgICAgICAgICBjdXJzb3JQb3NpdGlvbi5tb3ZlKGJveC0+d2lkdGgoKSwgMCk7Cisg
ICAgICAgICAgICAKKyAgICAgICAgICAgIHJldHVybiBjdXJzb3JQb3NpdGlvbjsKKyAgICAgICAg
fQorICAgIH0KKyAgICBpZiAoZmlyc3ROb25Qc2V1ZG9FbGVtZW50Q2hpbGQoKSkgewogICAgICAg
ICAvLyBUaGlzIGNvbmRpdGlvbiBpcyBwb3NzaWJsZSBpZiB0aGUgUmVuZGVySW5saW5lIGlzIGF0
IGFuIGVkaXRpbmcgYm91bmRhcnksCiAgICAgICAgIC8vIGkuZS4gdGhlIFZpc2libGVQb3NpdGlv
biBpczoKICAgICAgICAgLy8gICA8UmVuZGVySW5saW5lIGVkaXRpbmdCb3VuZGFyeT10cnVlPnw8
UmVuZGVyVGV4dD4gPC9SZW5kZXJUZXh0PjwvUmVuZGVySW5saW5lPgpAQCAtMjYyLDggKzMwNSwx
MiBAQAogCiAgICAgTGF5b3V0UmVjdCBjYXJldFJlY3QgPSBsb2NhbENhcmV0UmVjdEZvckVtcHR5
RWxlbWVudChob3Jpem9udGFsQm9yZGVyQW5kUGFkZGluZ0V4dGVudCgpLCAwKTsKIAotICAgIGlm
IChJbmxpbmVCb3gqIGZpcnN0Qm94ID0gZmlyc3RMaW5lQm94KCkpCisgICAgaWYgKElubGluZUJv
eCogZmlyc3RCb3ggPSBmaXJzdExpbmVCb3goKSkgewogICAgICAgICBjYXJldFJlY3QubW92ZUJ5
KExheW91dFBvaW50KGZpcnN0Qm94LT50b3BMZWZ0KCkpKTsKKyAgICB9IGVsc2UgeworICAgICAg
ICBSZW5kZXJPYmplY3QgKmZjID0gZmlyc3RDaGlsZCgpOworICAgICAgICBpZiAoZmMgJiYgZmMt
PmlzQmVmb3JlQ29udGVudCgpKSByZXR1cm4gZmMtPmxvY2FsQ2FyZXRSZWN0KGlubGluZUJveCwg
Y2FyZXRPZmZzZXQpOworICAgIH0KIAogICAgIHJldHVybiBjYXJldFJlY3Q7CiB9CkluZGV4OiBX
ZWJDb3JlL3JlbmRlcmluZy9SZW5kZXJJbmxpbmUuaAo9PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBXZWJDb3JlL3Jl
bmRlcmluZy9SZW5kZXJJbmxpbmUuaAkocmV2aXNpb24gMTczOTA1KQorKysgV2ViQ29yZS9yZW5k
ZXJpbmcvUmVuZGVySW5saW5lLmgJKHdvcmtpbmcgY29weSkKQEAgLTk0LDcgKzk0LDEwIEBACiAg
ICAgdmlydHVhbCBMYXlvdXRSZWN0IGxvY2FsQ2FyZXRSZWN0KElubGluZUJveCosIGludCwgTGF5
b3V0VW5pdCogZXh0cmFXaWR0aFRvRW5kT2ZMaW5lKSBvdmVycmlkZSBmaW5hbDsKIAogICAgIGJv
b2wgaGl0VGVzdEN1bGxlZElubGluZShjb25zdCBIaXRUZXN0UmVxdWVzdCYsIEhpdFRlc3RSZXN1
bHQmLCBjb25zdCBIaXRUZXN0TG9jYXRpb24mIGxvY2F0aW9uSW5Db250YWluZXIsIGNvbnN0IExh
eW91dFBvaW50JiBhY2N1bXVsYXRlZE9mZnNldCk7CisgICAgCisgICAgdmlydHVhbCBMYXlvdXRV
bml0IG9mZnNldFdpZHRoKCkgY29uc3Qgb3ZlcnJpZGUgZmluYWwgeyByZXR1cm4gbGluZXNCb3Vu
ZGluZ0JveCgpLndpZHRoKCk7IH0KIAorCiBwcm90ZWN0ZWQ6CiAgICAgdmlydHVhbCB2b2lkIHdp
bGxCZURlc3Ryb3llZCgpIG92ZXJyaWRlOwogCkBAIC0xMzQsNyArMTM3LDYgQEAKIAogICAgIHZp
cnR1YWwgTGF5b3V0VW5pdCBvZmZzZXRMZWZ0KCkgY29uc3Qgb3ZlcnJpZGUgZmluYWw7CiAgICAg
dmlydHVhbCBMYXlvdXRVbml0IG9mZnNldFRvcCgpIGNvbnN0IG92ZXJyaWRlIGZpbmFsOwotICAg
IHZpcnR1YWwgTGF5b3V0VW5pdCBvZmZzZXRXaWR0aCgpIGNvbnN0IG92ZXJyaWRlIGZpbmFsIHsg
cmV0dXJuIGxpbmVzQm91bmRpbmdCb3goKS53aWR0aCgpOyB9CiAgICAgdmlydHVhbCBMYXlvdXRV
bml0IG9mZnNldEhlaWdodCgpIGNvbnN0IG92ZXJyaWRlIGZpbmFsIHsgcmV0dXJuIGxpbmVzQm91
bmRpbmdCb3goKS5oZWlnaHQoKTsgfQogCiAgICAgdmlydHVhbCBMYXlvdXRSZWN0IGNsaXBwZWRP
dmVyZmxvd1JlY3RGb3JSZXBhaW50KGNvbnN0IFJlbmRlckxheWVyTW9kZWxPYmplY3QqIHJlcGFp
bnRDb250YWluZXIpIGNvbnN0IG92ZXJyaWRlOwpJbmRleDogV2ViQ29yZS9yZW5kZXJpbmcvUmVu
ZGVyT2JqZWN0LmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBXZWJDb3JlL3JlbmRlcmluZy9SZW5kZXJPYmpl
Y3QuY3BwCShyZXZpc2lvbiAxNzM5MDUpCisrKyBXZWJDb3JlL3JlbmRlcmluZy9SZW5kZXJPYmpl
Y3QuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0xMDQsNiArMTA0LDcgQEAKIAogREVGSU5FX0RFQlVH
X09OTFlfR0xPQkFMKFdURjo6UmVmQ291bnRlZExlYWtDb3VudGVyLCByZW5kZXJPYmplY3RDb3Vu
dGVyLCAoIlJlbmRlck9iamVjdCIpKTsKIAorCiBSZW5kZXJPYmplY3Q6OlJlbmRlck9iamVjdChO
b2RlJiBub2RlKQogICAgIDogQ2FjaGVkSW1hZ2VDbGllbnQoKQogICAgICwgbV9ub2RlKG5vZGUp
CkluZGV4OiBXZWJLaXQvV2ViS2l0Lnhjb2RlcHJvai9wcm9qZWN0LnBieHByb2oKPT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PQotLS0gV2ViS2l0L1dlYktpdC54Y29kZXByb2ovcHJvamVjdC5wYnhwcm9qCShyZXZpc2lvbiAx
NzM5MDUpCisrKyBXZWJLaXQvV2ViS2l0Lnhjb2RlcHJvai9wcm9qZWN0LnBieHByb2oJKHdvcmtp
bmcgY29weSkKQEAgLTIzMzIsNiArMjMzMiwxNCBAQAogCQkJYmFzZUNvbmZpZ3VyYXRpb25SZWZl
cmVuY2UgPSAxQzkwNEZEMjBCQTlERDBGMDA4MUU5RDAgLyogV2ViS2l0TGVnYWN5LnhjY29uZmln
ICovOwogCQkJYnVpbGRTZXR0aW5ncyA9IHsKIAkJCQlERUJVR19ERUZJTkVTID0gIiQoREVCVUdf
REVGSU5FU18kKENVUlJFTlRfVkFSSUFOVCkpIEVOQUJMRV9XRUJLSVRfVU5TRVRfRFlMRF9GUkFN
RVdPUktfUEFUSCI7CisJCQkJSEVBREVSX1NFQVJDSF9QQVRIUyA9ICgKKwkJCQkJIiQoV0VCS0lU
U1lTVEVNSU5URVJGQUNFX1NUQVRJQ19MSUJSQVJZX0hFQURFUlNfRk9MREVSX1BBVEgpIiwKKwkJ
CQkJIiQoV0VCQ09SRV9QUklWQVRFX0hFQURFUlNfRElSKS9Gb3J3YXJkaW5nSGVhZGVycyIsCisJ
CQkJCSIkKFdFQkNPUkVfUFJJVkFURV9IRUFERVJTX0RJUikvaWN1IiwKKwkJCQkJIlwiJChCVUlM
VF9QUk9EVUNUU19ESVIpL0Rlcml2ZWRTb3VyY2VzL1dlYktpdExlZ2FjeVwiIiwKKwkJCQkJIlwi
JChCVUlMVF9QUk9EVUNUU19ESVIpL3Vzci9sb2NhbC9pbmNsdWRlXCIiLAorCQkJCQkiJChIRUFE
RVJfU0VBUkNIX1BBVEhTKSIsCisJCQkJKTsKIAkJCQlPVEhFUl9MREZMQUdTID0gKAogCQkJCQki
JChPVEhFUl9MREZMQUdTKSIsCiAJCQkJCSItbCQoV0VCS0lUX1NZU1RFTV9JTlRFUkZBQ0VfTElC
UkFSWSkiLApJbmRleDogV2ViS2l0L21hYy9XZWJWaWV3L1dlYkZyYW1lLm1tCj09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0K
LS0tIFdlYktpdC9tYWMvV2ViVmlldy9XZWJGcmFtZS5tbQkocmV2aXNpb24gMTczOTA1KQorKysg
V2ViS2l0L21hYy9XZWJWaWV3L1dlYkZyYW1lLm1tCSh3b3JraW5nIGNvcHkpCkBAIC0xNTA2LDcg
KzE1MDYsNyBAQAogICAgICAgICB9CiAgICAgfQogCi0gICAgZnJhbWUtPnNlbGVjdGlvbigpLnNl
dFNlbGVjdGVkUmFuZ2UoY29yZShyYW5nZSksIChFQWZmaW5pdHkpYWZmaW5pdHksIGNsb3NlVHlw
aW5nKTsKKyAgICBmcmFtZS0+c2VsZWN0aW9uKCkuc2V0U2VsZWN0ZWRSYW5nZShjb3JlKHJhbmdl
KSwgKEVBZmZpbml0eSlhZmZpbml0eSwgZmFsc2UsIGNsb3NlVHlwaW5nKTsKICAgICBpZiAoIWNs
b3NlVHlwaW5nKQogICAgICAgICBmcmFtZS0+ZWRpdG9yKCkuZW5zdXJlTGFzdEVkaXRDb21tYW5k
SGFzQ3VycmVudFNlbGVjdGlvbklmT3BlbkZvck1vcmVUeXBpbmcoKTsKIH0KSW5kZXg6IFdlYktp
dC9tYWMvV2ViVmlldy9XZWJWaWV3Lm1tCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFdlYktpdC9tYWMvV2ViVmll
dy9XZWJWaWV3Lm1tCShyZXZpc2lvbiAxNzM5MDUpCisrKyBXZWJLaXQvbWFjL1dlYlZpZXcvV2Vi
Vmlldy5tbQkod29ya2luZyBjb3B5KQpAQCAtNzE2MCw3ICs3MTYwLDcgQEAKICAgICAgICAgaWYg
KCFjb3JlRnJhbWUpCiAgICAgICAgICAgICByZXR1cm47CiAKLSAgICAgICAgY29yZUZyYW1lLT5z
ZWxlY3Rpb24oKS5zZXRTZWxlY3RlZFJhbmdlKGNvcmUocmFuZ2UpLCBjb3JlKHNlbGVjdGlvbkFm
ZmluaXR5KSwgdHJ1ZSk7CisgICAgICAgIGNvcmVGcmFtZS0+c2VsZWN0aW9uKCkuc2V0U2VsZWN0
ZWRSYW5nZShjb3JlKHJhbmdlKSwgY29yZShzZWxlY3Rpb25BZmZpbml0eSksIGZhbHNlLCB0cnVl
KTsKICAgICB9CiB9CiAKSW5kZXg6IFdlYktpdDIvV2ViUHJvY2Vzcy9XZWJQYWdlL2lvcy9XZWJQ
YWdlSU9TLm1tCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT0KLS0tIFdlYktpdDIvV2ViUHJvY2Vzcy9XZWJQYWdlL2lvcy9X
ZWJQYWdlSU9TLm1tCShyZXZpc2lvbiAxNzM5MDUpCisrKyBXZWJLaXQyL1dlYlByb2Nlc3MvV2Vi
UGFnZS9pb3MvV2ViUGFnZUlPUy5tbQkod29ya2luZyBjb3B5KQpAQCAtOTU1LDcgKzk1NSw3IEBA
CiAgICAgICAgIGJyZWFrOwogICAgIH0KICAgICBpZiAocmFuZ2UpCi0gICAgICAgIGZyYW1lLnNl
bGVjdGlvbigpLnNldFNlbGVjdGVkUmFuZ2UocmFuZ2UuZ2V0KCksIHBvc2l0aW9uLmFmZmluaXR5
KCksIHRydWUpOworICAgICAgICBmcmFtZS5zZWxlY3Rpb24oKS5zZXRTZWxlY3RlZFJhbmdlKHJh
bmdlLmdldCgpLCBwb3NpdGlvbi5hZmZpbml0eSgpLCBmYWxzZSwgdHJ1ZSk7CiAKICAgICBzZW5k
KE1lc3NhZ2VzOjpXZWJQYWdlUHJveHk6Okdlc3R1cmVDYWxsYmFjayhwb2ludCwgZ2VzdHVyZVR5
cGUsIGdlc3R1cmVTdGF0ZSwgc3RhdGljX2Nhc3Q8dWludDMyX3Q+KGZsYWdzKSwgY2FsbGJhY2tJ
RCkpOwogfQpAQCAtMTQxOCw3ICsxNDE4LDcgQEAKIAogICAgIGlmIChuZXdSYW5nZSkgewogICAg
ICAgICBtX2N1cnJlbnRCbG9ja1NlbGVjdGlvbiA9IG5ld1JhbmdlOwotICAgICAgICBmcmFtZS5z
ZWxlY3Rpb24oKS5zZXRTZWxlY3RlZFJhbmdlKG5ld1JhbmdlLmdldCgpLCBWUF9ERUZBVUxUX0FG
RklOSVRZLCB0cnVlKTsKKyAgICAgICAgZnJhbWUuc2VsZWN0aW9uKCkuc2V0U2VsZWN0ZWRSYW5n
ZShuZXdSYW5nZS5nZXQoKSwgVlBfREVGQVVMVF9BRkZJTklUWSwgZmFsc2UsIHRydWUpOwogICAg
IH0KIAogICAgIGNvbXB1dGVFeHBhbmRBbmRTaHJpbmtUaHJlc2hvbGRzRm9ySGFuZGxlKHBvaW50
LCBoYW5kbGVQb3NpdGlvbiwgZ3Jvd1RocmVzaG9sZCwgc2hyaW5rVGhyZXNob2xkKTsKQEAgLTE0
OTUsNyArMTQ5NSw3IEBACiAgICAgICAgIGJyZWFrOwogICAgIH0KICAgICBpZiAocmFuZ2UpCi0g
ICAgICAgIGZyYW1lLnNlbGVjdGlvbigpLnNldFNlbGVjdGVkUmFuZ2UocmFuZ2UuZ2V0KCksIHBv
c2l0aW9uLmFmZmluaXR5KCksIHRydWUpOworICAgICAgICBmcmFtZS5zZWxlY3Rpb24oKS5zZXRT
ZWxlY3RlZFJhbmdlKHJhbmdlLmdldCgpLCBwb3NpdGlvbi5hZmZpbml0eSgpLCBmYWxzZSwgdHJ1
ZSk7CiAKICAgICBzZW5kKE1lc3NhZ2VzOjpXZWJQYWdlUHJveHk6OlRvdWNoZXNDYWxsYmFjayhw
b2ludCwgdG91Y2hlcywgY2FsbGJhY2tJRCkpOwogfQpAQCAtMTUxMSw3ICsxNTExLDcgQEAKICAg
ICAgICAgICAgIHJhbmdlID0gUmFuZ2U6OmNyZWF0ZSgqZnJhbWUuZG9jdW1lbnQoKSwgZnJvbVBv
c2l0aW9uLCB0b1Bvc2l0aW9uKTsKICAgICAgICAgZWxzZQogICAgICAgICAgICAgcmFuZ2UgPSBS
YW5nZTo6Y3JlYXRlKCpmcmFtZS5kb2N1bWVudCgpLCB0b1Bvc2l0aW9uLCBmcm9tUG9zaXRpb24p
OwotICAgICAgICBmcmFtZS5zZWxlY3Rpb24oKS5zZXRTZWxlY3RlZFJhbmdlKHJhbmdlLmdldCgp
LCBmcm9tUG9zaXRpb24uYWZmaW5pdHkoKSwgdHJ1ZSk7CisgICAgICAgIGZyYW1lLnNlbGVjdGlv
bigpLnNldFNlbGVjdGVkUmFuZ2UocmFuZ2UuZ2V0KCksIGZyb21Qb3NpdGlvbi5hZmZpbml0eSgp
LCBmYWxzZSwgdHJ1ZSk7CiAgICAgfQogCiAgICAgLy8gV2UgY2FuIHVzZSB0aGUgc2FtZSBjYWxs
YmFjayBmb3IgdGhlIGdlc3R1cmVzIHdpdGggb25lIHBvaW50LgpAQCAtMTUyNiw3ICsxNTI2LDcg
QEAKICAgICAgICAgcmV0dXJuOwogCiAgICAgVmlzaWJsZVBvc2l0aW9uIHBvc2l0aW9uID0gZnJh
bWUuc2VsZWN0aW9uKCkuc2VsZWN0aW9uKCkuc3RhcnQoKTsKLSAgICBmcmFtZS5zZWxlY3Rpb24o
KS5zZXRTZWxlY3RlZFJhbmdlKHdvcmRSYW5nZUZyb21Qb3NpdGlvbihwb3NpdGlvbikuZ2V0KCks
IHBvc2l0aW9uLmFmZmluaXR5KCksIHRydWUpOworICAgIGZyYW1lLnNlbGVjdGlvbigpLnNldFNl
bGVjdGVkUmFuZ2Uod29yZFJhbmdlRnJvbVBvc2l0aW9uKHBvc2l0aW9uKS5nZXQoKSwgcG9zaXRp
b24uYWZmaW5pdHkoKSwgZmFsc2UsIHRydWUpOwogfQogCiB2b2lkIFdlYlBhZ2U6OnNlbGVjdFdv
cmRCYWNrd2FyZCgpCkBAIC0xNTM4LDcgKzE1MzgsNyBAQAogICAgIFZpc2libGVQb3NpdGlvbiBw
b3NpdGlvbiA9IGZyYW1lLnNlbGVjdGlvbigpLnNlbGVjdGlvbigpLnN0YXJ0KCk7CiAgICAgVmlz
aWJsZVBvc2l0aW9uIHN0YXJ0UG9zaXRpb24gPSBwb3NpdGlvbk9mTmV4dEJvdW5kYXJ5T2ZHcmFu
dWxhcml0eShwb3NpdGlvbiwgV29yZEdyYW51bGFyaXR5LCBEaXJlY3Rpb25CYWNrd2FyZCk7CiAg
ICAgaWYgKHN0YXJ0UG9zaXRpb24uaXNOb3ROdWxsKCkgJiYgc3RhcnRQb3NpdGlvbiAhPSBwb3Np
dGlvbikKLSAgICAgICAgZnJhbWUuc2VsZWN0aW9uKCkuc2V0U2VsZWN0ZWRSYW5nZShSYW5nZTo6
Y3JlYXRlKCpmcmFtZS5kb2N1bWVudCgpLCBzdGFydFBvc2l0aW9uLCBwb3NpdGlvbikuZ2V0KCks
IHBvc2l0aW9uLmFmZmluaXR5KCksIHRydWUpOworICAgICAgICBmcmFtZS5zZWxlY3Rpb24oKS5z
ZXRTZWxlY3RlZFJhbmdlKFJhbmdlOjpjcmVhdGUoKmZyYW1lLmRvY3VtZW50KCksIHN0YXJ0UG9z
aXRpb24sIHBvc2l0aW9uKS5nZXQoKSwgcG9zaXRpb24uYWZmaW5pdHkoKSwgZmFsc2UsIHRydWUp
OwogfQogCiB2b2lkIFdlYlBhZ2U6Om1vdmVTZWxlY3Rpb25CeU9mZnNldChpbnQzMl90IG9mZnNl
dCwgdWludDY0X3QgY2FsbGJhY2tJRCkKQEAgLTE1NTYsNyArMTU1Niw3IEBACiAgICAgICAgICAg
ICBicmVhazsKICAgICB9CiAgICAgaWYgKHBvc2l0aW9uLmlzTm90TnVsbCgpICYmIHN0YXJ0UG9z
aXRpb24gIT0gcG9zaXRpb24pCi0gICAgICAgIGZyYW1lLnNlbGVjdGlvbigpLnNldFNlbGVjdGVk
UmFuZ2UoUmFuZ2U6OmNyZWF0ZSgqZnJhbWUuZG9jdW1lbnQoKSwgcG9zaXRpb24sIHBvc2l0aW9u
KS5nZXQoKSwgcG9zaXRpb24uYWZmaW5pdHkoKSwgdHJ1ZSk7CisgICAgICAgIGZyYW1lLnNlbGVj
dGlvbigpLnNldFNlbGVjdGVkUmFuZ2UoUmFuZ2U6OmNyZWF0ZSgqZnJhbWUuZG9jdW1lbnQoKSwg
cG9zaXRpb24sIHBvc2l0aW9uKS5nZXQoKSwgcG9zaXRpb24uYWZmaW5pdHkoKSwgZmFsc2UsIHRy
dWUpOwogICAgIHNlbmQoTWVzc2FnZXM6OldlYlBhZ2VQcm94eTo6Vm9pZENhbGxiYWNrKGNhbGxi
YWNrSUQpKTsKIH0KIApAQCAtMTYxOCw3ICsxNjE4LDcgQEAKICAgICAgICAgcmV0dXJuOwogICAg
IAogICAgIGZyYW1lLmVkaXRvcigpLnNldElnbm9yZUNvbXBvc2l0aW9uU2VsZWN0aW9uQ2hhbmdl
KHRydWUpOwotICAgIGZyYW1lLnNlbGVjdGlvbigpLnNldFNlbGVjdGVkUmFuZ2Uod29yZFJhbmdl
LmdldCgpLCBVUFNUUkVBTSwgdHJ1ZSk7CisgICAgZnJhbWUuc2VsZWN0aW9uKCkuc2V0U2VsZWN0
ZWRSYW5nZSh3b3JkUmFuZ2UuZ2V0KCksIFVQU1RSRUFNLCBmYWxzZSwgdHJ1ZSk7CiAgICAgZnJh
bWUuZWRpdG9yKCkuaW5zZXJ0VGV4dChuZXdUZXh0LCAwKTsKICAgICBmcmFtZS5lZGl0b3IoKS5z
ZXRJZ25vcmVDb21wb3NpdGlvblNlbGVjdGlvbkNoYW5nZShmYWxzZSk7CiB9CkBAIC0xNjQ1LDcg
KzE2NDUsNyBAQAogCiAgICAgLy8gV2UgZG9uJ3Qgd2FudCB0byBub3RpZnkgdGhlIGNsaWVudCB0
aGF0IHRoZSBzZWxlY3Rpb24gaGFzIGNoYW5nZWQgdW50aWwgd2UgYXJlIGRvbmUgaW5zZXJ0aW5n
IHRoZSBuZXcgdGV4dC4KICAgICBmcmFtZS5lZGl0b3IoKS5zZXRJZ25vcmVDb21wb3NpdGlvblNl
bGVjdGlvbkNoYW5nZSh0cnVlKTsKLSAgICBmcmFtZS5zZWxlY3Rpb24oKS5zZXRTZWxlY3RlZFJh
bmdlKHJhbmdlLmdldCgpLCBVUFNUUkVBTSwgdHJ1ZSk7CisgICAgZnJhbWUuc2VsZWN0aW9uKCku
c2V0U2VsZWN0ZWRSYW5nZShyYW5nZS5nZXQoKSwgVVBTVFJFQU0sIGZhbHNlLCB0cnVlKTsKICAg
ICBmcmFtZS5lZGl0b3IoKS5pbnNlcnRUZXh0KG5ld1RleHQsIDApOwogICAgIGZyYW1lLmVkaXRv
cigpLnNldElnbm9yZUNvbXBvc2l0aW9uU2VsZWN0aW9uQ2hhbmdlKGZhbHNlKTsKIH0KQEAgLTE3
NTcsNyArMTc1Nyw3IEBACiAgICAgICAgIHJldHVybjsKICAgICB9CiAgICAgCi0gICAgZnJhbWUu
c2VsZWN0aW9uKCkuc2V0U2VsZWN0ZWRSYW5nZShyYW5nZS5nZXQoKSwgVVBTVFJFQU0sIHRydWUp
OworICAgIGZyYW1lLnNlbGVjdGlvbigpLnNldFNlbGVjdGVkUmFuZ2UocmFuZ2UuZ2V0KCksIFVQ
U1RSRUFNLCBmYWxzZSwgdHJ1ZSk7CiAgICAgaWYgKGNvcnJlY3Rpb24ubGVuZ3RoKCkpCiAgICAg
ICAgIGZyYW1lLmVkaXRvcigpLmluc2VydFRleHQoY29ycmVjdGlvbiwgMCk7CiAgICAgZWxzZQo=
</data>

          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>238899</attachid>
            <date>2014-09-29 18:10:05 -0700</date>
            <delta_ts>2014-10-06 23:21:30 -0700</delta_ts>
            <desc>Almost complete patch</desc>
            <filename>15256-2014-09-29.patch</filename>
            <type>text/plain</type>
            <size>82088</size>
            <attacher name="David Gatwood">dgatwood</attacher>
            
              <data encoding="base64">SW5kZXg6IExheW91dFRlc3RzL2VkaXRpbmcvZGVsZXRpbmcvc21hcnQtZGVsZXRlLTAwMS5odG1s
Cj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT0KLS0tIExheW91dFRlc3RzL2VkaXRpbmcvZGVsZXRpbmcvc21hcnQtZGVsZXRl
LTAwMS5odG1sCShyZXZpc2lvbiAxNzM5MDUpCisrKyBMYXlvdXRUZXN0cy9lZGl0aW5nL2RlbGV0
aW5nL3NtYXJ0LWRlbGV0ZS0wMDEuaHRtbAkod29ya2luZyBjb3B5KQpAQCAtMjEsNiArMjEsNyBA
QAogPHNjcmlwdD4KIAogZnVuY3Rpb24gZWRpdGluZ1Rlc3QoKSB7CisgICAgd2luZG93LmdldFNl
bGVjdGlvbigpLmNvbGxhcHNlKHRlc3QuZmlyc3RDaGlsZCwgMSk7CiAgICAgZG91YmxlQ2xpY2tB
dFNlbGVjdGlvblN0YXJ0KCk7CiAgICAgZGVsZXRlQ29tbWFuZCgpOwogfQpJbmRleDogTGF5b3V0
VGVzdHMvZWRpdGluZy9lZGl0aW5nLmpzCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIExheW91dFRlc3RzL2VkaXRp
bmcvZWRpdGluZy5qcwkocmV2aXNpb24gMTczOTA1KQorKysgTGF5b3V0VGVzdHMvZWRpdGluZy9l
ZGl0aW5nLmpzCSh3b3JraW5nIGNvcHkpCkBAIC04OTcsMTIgKzg5Nyw1NSBAQAogICAgIGlmICh3
aW5kb3cudGVzdFJ1bm5lcikKICAgICAgICAgdGVzdFJ1bm5lci5kdW1wRWRpdGluZ0NhbGxiYWNr
cygpOwogCisgICAgZm9jdXNPbkZpcnN0VGV4dEluVGVzdEVsZW1lbnRJZkV4aXN0cygpOworCisg
ICAgZWRpdGluZ1Rlc3QoKTsKK30KKworZnVuY3Rpb24gZm9jdXNPbkZpcnN0VGV4dEluVGVzdEVs
ZW1lbnRJZkV4aXN0cygpIHsKICAgICB2YXIgZWxlbSA9IGRvY3VtZW50LmdldEVsZW1lbnRCeUlk
KCJ0ZXN0Iik7CiAgICAgdmFyIHNlbGVjdGlvbiA9IHdpbmRvdy5nZXRTZWxlY3Rpb24oKTsKLSAg
ICBzZWxlY3Rpb24uc2V0UG9zaXRpb24oZWxlbSwgMCk7Ci0gICAgZWRpdGluZ1Rlc3QoKTsKKyAg
ICBpZiAoZWxlbSkgeworICAgICAgICB2YXIgdHJhdmVyc2UgPSBmdW5jdGlvbiAobm9kZSwgb2Zm
c2V0LCBjb25kaXRpb24pIHsKKyAgICAgICAgICAgIHZhciBvYmogPSBjb25kaXRpb24obm9kZSwg
b2Zmc2V0KTsKKyAgICAgICAgICAgIGlmIChvYmopCisgICAgICAgICAgICAgICAgcmV0dXJuIG9i
ajsKKworICAgICAgICAgICAgdmFyIGNoaWxkcmVuID0gbm9kZS5jaGlsZE5vZGVzOworICAgICAg
ICAgICAgdmFyIGxlbiA9IGNoaWxkcmVuLmxlbmd0aDsKKyAgICAgICAgICAgIGZvciAodmFyIGkg
PSAwOyBpIDwgbGVuOyBpKyspIHsKKyAgICAgICAgICAgICAgICB2YXIgY2hpbGQgPSBjaGlsZHJl
bltpXTsKKyAgICAgICAgICAgICAgICBvYmogPSB0cmF2ZXJzZShjaGlsZCwgaSwgY29uZGl0aW9u
KTsKKyAgICAgICAgICAgICAgICBpZiAob2JqKQorICAgICAgICAgICAgICAgICAgICByZXR1cm4g
b2JqOworICAgICAgICAgICAgfQorICAgICAgICAgICAgcmV0dXJuIG51bGw7CisgICAgICAgIH0K
KworICAgICAgICB2YXIgZmlyc3RWaXNpYmxlUG9zaXRpb24gPSB0cmF2ZXJzZShlbGVtLCAwLCBm
dW5jdGlvbiAobm9kZSwgb2Zmc2V0KSB7CisgICAgICAgICAgICBpZiAobm9kZS5ub2RlTmFtZSA9
PSAnI3RleHQnKSB7CisgICAgICAgICAgICAgICAgb2Zmc2V0ID0gMDsKKyAgICAgICAgICAgICAg
ICB3aGlsZSAob2Zmc2V0IDwgbm9kZS50ZXh0Q29udGVudC5sZW5ndGggJiYgbm9kZS50ZXh0Q29u
dGVudFtvZmZzZXRdID09ICdcbicpCisgICAgICAgICAgICAgICAgICAgIG9mZnNldCsrOworICAg
ICAgICAgICAgICAgIHJldHVybiB7ICdub2RlJzogbm9kZSwgJ29mZnNldCc6IG9mZnNldCB9Owor
ICAgICAgICAgICAgfQorCisgICAgICAgICAgICBpZiAobm9kZS5ub2RlTmFtZSA9PSAnQlInIHx8
IG5vZGUubm9kZU5hbWUgPT0gJ0lNRycpCisgICAgICAgICAgICAgICAgcmV0dXJuIHsgJ25vZGUn
OiBub2RlLnBhcmVudE5vZGUsICdvZmZzZXQnOiBvZmZzZXQgfTsKKworICAgICAgICAgICAgcmV0
dXJuIG51bGw7CisgICAgICAgIH0pOworCisgICAgICAgIGlmIChmaXJzdFZpc2libGVQb3NpdGlv
bikKKyAgICAgICAgICAgIHNlbGVjdGlvbi5jb2xsYXBzZShmaXJzdFZpc2libGVQb3NpdGlvbi5u
b2RlLCBmaXJzdFZpc2libGVQb3NpdGlvbi5vZmZzZXQpOworICAgICAgICBlbHNlCisgICAgICAg
ICAgICBzZWxlY3Rpb24uY29sbGFwc2UoZWxlbSwgMCk7CisgICAgfSBlbHNlIHsKKyAgICAgICAg
c2VsZWN0aW9uLnJlbW92ZUFsbFJhbmdlcygpOworICAgIH0KIH0KIAorCiB2YXIgZHVtcEFzVGV4
dCA9IGZhbHNlOwogdmFyIGVsZW1lbnRzRm9yRHVtcGluZ01hcmt1cExpc3QgPSBbZG9jdW1lbnQu
Y3JlYXRlRWxlbWVudCgnb2wnKV07CiAKQEAgLTkxNSw5ICs5NTgsOCBAQAogCiAgICAgZHVtcEFz
VGV4dCA9IHRydWU7CiAKLSAgICB2YXIgZWxlbSA9IGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKCJ0
ZXN0Iik7Ci0gICAgdmFyIHNlbGVjdGlvbiA9IHdpbmRvdy5nZXRTZWxlY3Rpb24oKTsKLSAgICBz
ZWxlY3Rpb24uc2V0UG9zaXRpb24oZWxlbSwgMCk7CisgICAgZm9jdXNPbkZpcnN0VGV4dEluVGVz
dEVsZW1lbnRJZkV4aXN0cygpOworCiAgICAgZWRpdGluZ1Rlc3QoKTsKIAogICAgIGZvciAodmFy
IGkgPSAwOyBpIDwgZWxlbWVudHNGb3JEdW1waW5nTWFya3VwTGlzdC5sZW5ndGg7IGkrKykKSW5k
ZXg6IExheW91dFRlc3RzL2VkaXRpbmcvcGFzdGVib2FyZC9zbWFydC1kcmFnLWRyb3AuaHRtbAo9
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09Ci0tLSBMYXlvdXRUZXN0cy9lZGl0aW5nL3Bhc3RlYm9hcmQvc21hcnQtZHJhZy1k
cm9wLmh0bWwJKHJldmlzaW9uIDE3MzkwNSkKKysrIExheW91dFRlc3RzL2VkaXRpbmcvcGFzdGVi
b2FyZC9zbWFydC1kcmFnLWRyb3AuaHRtbAkod29ya2luZyBjb3B5KQpAQCAtNiw2ICs2LDcgQEAK
ICAgCiAgICAgaWYgKCF3aW5kb3cuZXZlbnRTZW5kZXIpCiAgICAgICAgIHJldHVybjsKKyAgICB3
aW5kb3cuZ2V0U2VsZWN0aW9uKCkuY29sbGFwc2UoZHJhZ21lLmZpcnN0Q2hpbGQsIDApOwogICAg
IGRvdWJsZUNsaWNrQXRTZWxlY3Rpb25TdGFydCgpOwogCiAgICAgLy8gRHJhZyAnaGVsbG8nCklu
ZGV4OiBMYXlvdXRUZXN0cy9lZGl0aW5nL3Bhc3RlYm9hcmQvc21hcnQtcGFzdGUtMDAxLmh0bWwK
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PQotLS0gTGF5b3V0VGVzdHMvZWRpdGluZy9wYXN0ZWJvYXJkL3NtYXJ0LXBhc3Rl
LTAwMS5odG1sCShyZXZpc2lvbiAxNzM5MDUpCisrKyBMYXlvdXRUZXN0cy9lZGl0aW5nL3Bhc3Rl
Ym9hcmQvc21hcnQtcGFzdGUtMDAxLmh0bWwJKHdvcmtpbmcgY29weSkKQEAgLTQyLDYgKzQyLDcg
QEAKIDxzY3JpcHQ+CiAKIGZ1bmN0aW9uIGVkaXRpbmdUZXN0KCkgeworICAgIHdpbmRvdy5nZXRT
ZWxlY3Rpb24oKS5jb2xsYXBzZSh0ZXN0LmZpcnN0Q2hpbGQsIDEpOwogICAgIGRvdWJsZUNsaWNr
QXRTZWxlY3Rpb25TdGFydCgpOwogICAgIGNvcHlDb21tYW5kKCk7CiAgICAgbW92ZVNlbGVjdGlv
bkZvcndhcmRCeUNoYXJhY3RlckNvbW1hbmQoKTsKSW5kZXg6IExheW91dFRlc3RzL2VkaXRpbmcv
cGFzdGVib2FyZC9zbWFydC1wYXN0ZS0wMDMuaHRtbAo9PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBMYXlvdXRUZXN0
cy9lZGl0aW5nL3Bhc3RlYm9hcmQvc21hcnQtcGFzdGUtMDAzLmh0bWwJKHJldmlzaW9uIDE3Mzkw
NSkKKysrIExheW91dFRlc3RzL2VkaXRpbmcvcGFzdGVib2FyZC9zbWFydC1wYXN0ZS0wMDMuaHRt
bAkod29ya2luZyBjb3B5KQpAQCAtNDMsNiArNDMsNyBAQAogPHNjcmlwdD4KIAogZnVuY3Rpb24g
ZWRpdGluZ1Rlc3QoKSB7CisgICAgd2luZG93LmdldFNlbGVjdGlvbigpLmNvbGxhcHNlKHRlc3Qu
Zmlyc3RDaGlsZCwgMSk7CiAgICAgZG91YmxlQ2xpY2tBdFNlbGVjdGlvblN0YXJ0KCk7CiAgICAg
Y29weUNvbW1hbmQoKTsKICAgICBtb3ZlU2VsZWN0aW9uRm9yd2FyZEJ5Q2hhcmFjdGVyQ29tbWFu
ZCgpOwpJbmRleDogTGF5b3V0VGVzdHMvZWRpdGluZy9wYXN0ZWJvYXJkL3NtYXJ0LXBhc3RlLTAw
NC5odG1sCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT0KLS0tIExheW91dFRlc3RzL2VkaXRpbmcvcGFzdGVib2FyZC9zbWFy
dC1wYXN0ZS0wMDQuaHRtbAkocmV2aXNpb24gMTczOTA1KQorKysgTGF5b3V0VGVzdHMvZWRpdGlu
Zy9wYXN0ZWJvYXJkL3NtYXJ0LXBhc3RlLTAwNC5odG1sCSh3b3JraW5nIGNvcHkpCkBAIC00Miw2
ICs0Miw3IEBACiA8c2NyaXB0PgogCiBmdW5jdGlvbiBlZGl0aW5nVGVzdCgpIHsKKyAgICB3aW5k
b3cuZ2V0U2VsZWN0aW9uKCkuY29sbGFwc2UodGVzdC5maXJzdENoaWxkLCAxKTsKICAgICBkb3Vi
bGVDbGlja0F0U2VsZWN0aW9uU3RhcnQoKTsKICAgICBjb3B5Q29tbWFuZCgpOwogICAgIG1vdmVT
ZWxlY3Rpb25Gb3J3YXJkQnlDaGFyYWN0ZXJDb21tYW5kKCk7CkluZGV4OiBMYXlvdXRUZXN0cy9l
ZGl0aW5nL3NlbGVjdGlvbi9ET01TZWxlY3Rpb24tRG9jdW1lbnRUeXBlLWV4cGVjdGVkLnR4dAo9
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09Ci0tLSBMYXlvdXRUZXN0cy9lZGl0aW5nL3NlbGVjdGlvbi9ET01TZWxlY3Rpb24t
RG9jdW1lbnRUeXBlLWV4cGVjdGVkLnR4dAkocmV2aXNpb24gMTczOTA1KQorKysgTGF5b3V0VGVz
dHMvZWRpdGluZy9zZWxlY3Rpb24vRE9NU2VsZWN0aW9uLURvY3VtZW50VHlwZS1leHBlY3RlZC50
eHQJKHdvcmtpbmcgY29weSkKQEAgLTUsMTAgKzUsMTAgQEAKIAogUEFTUyBzZWwuYW5jaG9yTm9k
ZSBpcyBudWxsCiBQQVNTIHNlbC5hbmNob3JOb2RlIGlzIG51bGwKK1BBU1Mgc2VsLmNvbGxhcHNl
KGRvY1R5cGUpIHRocmV3IGV4Y2VwdGlvbiBJbnZhbGlkTm9kZVR5cGVFcnJvcjogRmFpbGVkIHRv
IGV4ZWN1dGUgJ2NvbGxhcHNlJyBvbiAnU2VsZWN0aW9uJzogVGhlIG5vZGUgcHJvdmlkZWQgaXMg
b2YgdHlwZSAnYycuLgogUEFTUyBzZWwuYW5jaG9yTm9kZSBpcyBudWxsCitQQVNTIHNlbC5jb2xs
YXBzZShkb2NUeXBlKSB0aHJldyBleGNlcHRpb24gSW52YWxpZE5vZGVUeXBlRXJyb3I6IEZhaWxl
ZCB0byBleGVjdXRlICdjb2xsYXBzZScgb24gJ1NlbGVjdGlvbic6IFRoZSBub2RlIHByb3ZpZGVk
IGlzIG9mIHR5cGUgJ2MnLi4KIFBBU1Mgc2VsLmFuY2hvck5vZGUgaXMgbnVsbAotUEFTUyBzZWwu
YW5jaG9yTm9kZSBpcyBudWxsCi1QQVNTIHNlbC5hbmNob3JOb2RlIGlzIG51bGwKIFBBU1Mgc2Vs
LmNvbnRhaW5zTm9kZShkb2NUeXBlKSBpcyBmYWxzZQogUEFTUyBzdWNjZXNzZnVsbHlQYXJzZWQg
aXMgdHJ1ZQogCkluZGV4OiBMYXlvdXRUZXN0cy9lZGl0aW5nL3NlbGVjdGlvbi9zY3JpcHQtdGVz
dHMvRE9NU2VsZWN0aW9uLURvY3VtZW50VHlwZS5qcwo9PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBMYXlvdXRUZXN0
cy9lZGl0aW5nL3NlbGVjdGlvbi9zY3JpcHQtdGVzdHMvRE9NU2VsZWN0aW9uLURvY3VtZW50VHlw
ZS5qcwkocmV2aXNpb24gMTczOTA1KQorKysgTGF5b3V0VGVzdHMvZWRpdGluZy9zZWxlY3Rpb24v
c2NyaXB0LXRlc3RzL0RPTVNlbGVjdGlvbi1Eb2N1bWVudFR5cGUuanMJKHdvcmtpbmcgY29weSkK
QEAgLTksOCArOSw3IEBACiBzZWwuc2V0QmFzZUFuZEV4dGVudChudWxsLCAwLCBkb2NUeXBlLCAw
KTsKIHNob3VsZEJlTnVsbCgic2VsLmFuY2hvck5vZGUiKTsKIAotc2VsLmNvbGxhcHNlKGRvY1R5
cGUpOwotc2hvdWxkQmVOdWxsKCJzZWwuYW5jaG9yTm9kZSIpOworc2hvdWxkVGhyb3coInNlbC5j
b2xsYXBzZShkb2NUeXBlKSIsICciSW52YWxpZE5vZGVUeXBlRXJyb3I6IEZhaWxlZCB0byBleGVj
dXRlIFwnY29sbGFwc2VcJyBvbiBcJ1NlbGVjdGlvblwnOiBUaGUgbm9kZSBwcm92aWRlZCBpcyBv
ZiB0eXBlIFwnY1wnLiInKTsKIAogc2VsLnNlbGVjdEFsbENoaWxkcmVuKGRvY1R5cGUpOwogc2hv
dWxkQmVOdWxsKCJzZWwuYW5jaG9yTm9kZSIpOwpJbmRleDogTGF5b3V0VGVzdHMvZWRpdGluZy9z
ZWxlY3Rpb24vc2VsZWN0aW9uLWludmFsaWQtb2Zmc2V0LWV4cGVjdGVkLnR4dAo9PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
Ci0tLSBMYXlvdXRUZXN0cy9lZGl0aW5nL3NlbGVjdGlvbi9zZWxlY3Rpb24taW52YWxpZC1vZmZz
ZXQtZXhwZWN0ZWQudHh0CShyZXZpc2lvbiAxNzM5MDUpCisrKyBMYXlvdXRUZXN0cy9lZGl0aW5n
L3NlbGVjdGlvbi9zZWxlY3Rpb24taW52YWxpZC1vZmZzZXQtZXhwZWN0ZWQudHh0CSh3b3JraW5n
IGNvcHkpCkBAIC0xLDggKzEsOSBAQAotWW91IHNob3VsZCBzZWUgc2l4IE9LcyBiZWxvdyAoYW5k
IG5vdCBoYW5nKTogCitZb3Ugc2hvdWxkIHNlZSA3IE9LcyBiZWxvdyAoYW5kIG5vdCBoYW5nKTog
CiBPSwogT0sKIE9LCiBPSwogT0sKIE9LCitPSwogCkluZGV4OiBMYXlvdXRUZXN0cy9lZGl0aW5n
L3NlbGVjdGlvbi9zZWxlY3Rpb24taW52YWxpZC1vZmZzZXQuaHRtbAo9PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBM
YXlvdXRUZXN0cy9lZGl0aW5nL3NlbGVjdGlvbi9zZWxlY3Rpb24taW52YWxpZC1vZmZzZXQuaHRt
bAkocmV2aXNpb24gMTczOTA1KQorKysgTGF5b3V0VGVzdHMvZWRpdGluZy9zZWxlY3Rpb24vc2Vs
ZWN0aW9uLWludmFsaWQtb2Zmc2V0Lmh0bWwJKHdvcmtpbmcgY29weSkKQEAgLTEsNSArMSw1IEBA
CiA8Ym9keT4KLVlvdSBzaG91bGQgc2VlIHNpeCBPS3MgYmVsb3cgKGFuZCBub3QgaGFuZyk6IDxi
cj4KK1lvdSBzaG91bGQgc2VlIDcgT0tzIGJlbG93IChhbmQgbm90IGhhbmcpOiA8YnI+CiA8c2Ny
aXB0PgogaWYgKHdpbmRvdy50ZXN0UnVubmVyKQogICAgIHRlc3RSdW5uZXIuZHVtcEFzVGV4dCgp
OwpAQCAtMzAsNyArMzAsOSBAQAogfSBjYXRjaCAoZSkge2RvY3VtZW50LndyaXRlKCgoZS5jb2Rl
PT1ET01FeGNlcHRpb24uSU5ERVhfU0laRV9FUlIpID8gIk9LIiA6ICJGQUlMIikrIjxicj4iKTsg
fQogCiAvLyB0aGVzZSBzaG91bGQgdGhyb3cgYXMgd2VsbCBidXQgZG9uJ3QgYXQgdGhlIG1vbWVu
dC4gSnVzdCBjaGVja2luZyB0aGV5IGRvbid0IGNyYXNoLiAKLXNlbGVjdGlvbi5jb2xsYXBzZShi
b2R5LCAxMDAwMCk7Cit0cnkgeworICBzZWxlY3Rpb24uY29sbGFwc2UoYm9keSwgMTAwMDApOwor
fSBjYXRjaCAoZSkge2RvY3VtZW50LndyaXRlKCgoZS5jb2RlPT1ET01FeGNlcHRpb24uSU5ERVhf
U0laRV9FUlIpID8gIk9LIiA6ICJGQUlMIikrIjxicj4iKTsgfQogc2VsZWN0aW9uLnNldEJhc2VB
bmRFeHRlbnQoYm9keSwgMTAwMCwgYm9keSwgMCk7CiBzZWxlY3Rpb24uc2V0QmFzZUFuZEV4dGVu
dChib2R5LCAwLCBib2R5LCAxMDAwMCk7CiBzZWxlY3Rpb24uc2V0UG9zaXRpb24oYm9keSwgMTAw
MDApOwpJbmRleDogTGF5b3V0VGVzdHMvZmFzdC9jc3MvY291bnRlcnMvY291bnRlci1iZWZvcmUt
Y29udGVudC1ub3QtaW5jcmVtZW50ZWQuaHRtbAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBMYXlvdXRUZXN0cy9m
YXN0L2Nzcy9jb3VudGVycy9jb3VudGVyLWJlZm9yZS1jb250ZW50LW5vdC1pbmNyZW1lbnRlZC5o
dG1sCShyZXZpc2lvbiAxNzM5MDUpCisrKyBMYXlvdXRUZXN0cy9mYXN0L2Nzcy9jb3VudGVycy9j
b3VudGVyLWJlZm9yZS1jb250ZW50LW5vdC1pbmNyZW1lbnRlZC5odG1sCSh3b3JraW5nIGNvcHkp
CkBAIC0yNiw3ICsyNiw4IEBACiAgICAgICAgICAgICAvLyBXZSBuZWVkIHRvIHVzZSB0aGUgc2Vs
ZWN0aW9uIG9yIHdlIGNhbm5vdCByZXByb2R1Y2UgdGhpcyBidWchCiAgICAgICAgICAgICB2YXIg
c2VsZWN0aW9uID0gd2luZG93LmdldFNlbGVjdGlvbigpOwogICAgICAgICAgICAgdmFyIGNvbnRh
aW5lciA9IGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKCJjb250YWluZXIiKTsKLSAgICAgICAgICAg
IHNlbGVjdGlvbi5zZXRQb3NpdGlvbihjb250YWluZXIsIDApOworICAgICAgICAgICAgLy8gc2Vs
ZWN0aW9uLnNldFBvc2l0aW9uKGNvbnRhaW5lciwgMCk7CisgICAgICAgICAgICBzZWxlY3Rpb24u
Y29sbGFwc2UoY29udGFpbmVyLmZpcnN0Q2hpbGQsIDApOwogICAgICAgICAgICAgaWYgKHNlbGVj
dGlvbi5yYW5nZUNvdW50ID4gMCkgewogICAgICAgICAgICAgICAgIHZhciBuZXdFbGVtZW50ID0g
ZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgnZGl2Jyk7CiAgICAgICAgICAgICAgICAgbmV3RWxlbWVu
dC5pZCA9ICdkaXYnICsgaTsKSW5kZXg6IExheW91dFRlc3RzL2Zhc3QvZG9tL1JhbmdlL3Jhbmdl
LXNlbGVjdGlvbi1hY3Jvc3MtZG9jdW1lbnRzLWNyYXNoLWV4cGVjdGVkLnR4dAo9PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
Ci0tLSBMYXlvdXRUZXN0cy9mYXN0L2RvbS9SYW5nZS9yYW5nZS1zZWxlY3Rpb24tYWNyb3NzLWRv
Y3VtZW50cy1jcmFzaC1leHBlY3RlZC50eHQJKHJldmlzaW9uIDE3MzkwNSkKKysrIExheW91dFRl
c3RzL2Zhc3QvZG9tL1JhbmdlL3JhbmdlLXNlbGVjdGlvbi1hY3Jvc3MtZG9jdW1lbnRzLWNyYXNo
LWV4cGVjdGVkLnR4dAkod29ya2luZyBjb3B5KQpAQCAtMSArMSwyIEBACitDT05TT0xFIEVSUk9S
OiBsaW5lIDI1OiBUaGUgZ2l2ZW4gcmFuZ2UgZG9lcyBub3QgYmVsb25nIHRvIHRoZSBjdXJyZW50
IHNlbGVjdGlvbidzIGRvY3VtZW50LgogVGVzdCBwYXNzZXMgaWYgaXQgZG9lcyBub3QgY3Jhc2gu
IApJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL0phdmFTY3JpcHRDb3JlLnhjb2RlcHJvai9w
cm9qZWN0LnBieHByb2oKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL0phdmFT
Y3JpcHRDb3JlLnhjb2RlcHJvai9wcm9qZWN0LnBieHByb2oJKHJldmlzaW9uIDE3MzkwNSkKKysr
IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9KYXZhU2NyaXB0Q29yZS54Y29kZXByb2ovcHJvamVjdC5w
Ynhwcm9qCSh3b3JraW5nIGNvcHkpCkBAIC03MzYxLDYgKzczNjEsOCBAQAogCQkxNDlDMjc2RTA4
OTAyQUZFMDA4QTlFRkMgLyogUmVsZWFzZSAqLyA9IHsKIAkJCWlzYSA9IFhDQnVpbGRDb25maWd1
cmF0aW9uOwogCQkJYnVpbGRTZXR0aW5ncyA9IHsKKwkJCQlPVEhFUl9DRkxBR1MgPSAiJChBU0FO
X09USEVSX0NGTEFHUykiOworCQkJCU9USEVSX0xERkxBR1MgPSAiJChBU0FOX09USEVSX0xERkxB
R1MpIjsKIAkJCQlQUk9EVUNUX05BTUUgPSBBbGw7CiAJCQl9OwogCQkJbmFtZSA9IFJlbGVhc2U7
CkluZGV4OiBTb3VyY2UvV2ViQ29yZS9XZWJDb3JlLmV4cC5pbgo9PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3Vy
Y2UvV2ViQ29yZS9XZWJDb3JlLmV4cC5pbgkocmV2aXNpb24gMTczOTA1KQorKysgU291cmNlL1dl
YkNvcmUvV2ViQ29yZS5leHAuaW4JKHdvcmtpbmcgY29weSkKQEAgLTM1OSwxMCArMzU5LDExIEBA
CiBfX1pON1dlYkNvcmUxNERvY3VtZW50V3JpdGVyMTFzZXRFbmNvZGluZ0VSS04zV1RGNlN0cmlu
Z0ViCiBfX1pON1dlYkNvcmUxNEZpbGVJY29uTG9hZGVyMTRub3RpZnlGaW5pc2hlZEVOM1dURjEw
UGFzc1JlZlB0cklOU180SWNvbkVFRQogX19aTjdXZWJDb3JlMTRGb3JtQ29udHJvbGxlcjIyZ2V0
UmVmZXJlbmNlZEZpbGVQYXRoc0VSS04zV1RGNlZlY3RvcklOUzFfNlN0cmluZ0VMbTBFTlMxXzE1
Q3Jhc2hPbk92ZXJmbG93RUVFCitfX1pON1dlYkNvcmUxNEZyYW1lU2VsZWN0aW9uRDFFdgogX19a
TjdXZWJDb3JlMTRGcmFtZVNlbGVjdGlvbjEwc2V0Rm9jdXNlZEViCiBfX1pON1dlYkNvcmUxNEZy
YW1lU2VsZWN0aW9uMTJzZXRTZWxlY3Rpb25FUktOU18xNlZpc2libGVTZWxlY3Rpb25Fak5TMF8x
OUN1cnNvckFsaWduT25TY3JvbGxFTlNfMTVUZXh0R3JhbnVsYXJpdHlFCiBfX1pON1dlYkNvcmUx
NEZyYW1lU2VsZWN0aW9uMTVyZXZlYWxTZWxlY3Rpb25FUktOU18xNVNjcm9sbEFsaWdubWVudEVO
U18xOFJldmVhbEV4dGVudE9wdGlvbkUKLV9fWk43V2ViQ29yZTE0RnJhbWVTZWxlY3Rpb24xNnNl
dFNlbGVjdGVkUmFuZ2VFUE5TXzVSYW5nZUVOU185RUFmZmluaXR5RWIKK19fWk43V2ViQ29yZTE0
RnJhbWVTZWxlY3Rpb24xNnNldFNlbGVjdGVkUmFuZ2VFUE5TXzVSYW5nZUVOU185RUFmZmluaXR5
RWJqCiBfX1pON1dlYkNvcmUxNEZyYW1lU2VsZWN0aW9uMTlhYnNvbHV0ZUNhcmV0Qm91bmRzRXYK
IF9fWk43V2ViQ29yZTE0RnJhbWVTZWxlY3Rpb24yMHNldFNlbGVjdGlvbkZyb21Ob25lRXYKIF9f
Wk43V2ViQ29yZTE0RnJhbWVTZWxlY3Rpb241Y2xlYXJFdgpAQCAtNzI0LDYgKzcyNSw4IEBACiBf
X1pON1dlYkNvcmUxNlRocmVhZEdsb2JhbERhdGExMHN0YXRpY0RhdGFFCiBfX1pON1dlYkNvcmUx
NlRocmVhZEdsb2JhbERhdGFDMUV2CiBfX1pON1dlYkNvcmUxNlRocmVhZEdsb2JhbERhdGFEMUV2
CitfX1pON1dlYkNvcmUxNlZpc2libGVTZWxlY3Rpb25DMUVSS1MwXworX19aTjdXZWJDb3JlMTZW
aXNpYmxlU2VsZWN0aW9uRDFFdgogX19aTjdXZWJDb3JlMTZWaXNpYmxlU2VsZWN0aW9uMjJleHBh
bmRVc2luZ0dyYW51bGFyaXR5RU5TXzE1VGV4dEdyYW51bGFyaXR5RQogX19aTjdXZWJDb3JlMTZW
aXNpYmxlU2VsZWN0aW9uQzFFUEtOU181UmFuZ2VFTlNfOUVBZmZpbml0eUViCiBfX1pON1dlYkNv
cmUxNlZpc2libGVTZWxlY3Rpb25DMUVSS05TXzE1VmlzaWJsZVBvc2l0aW9uRVMzX2IKQEAgLTMz
NTEsNiArMzM1NCw3IEBACiBfX1pOSzdXZWJDb3JlMTFJbWFnZUJ1ZmZlcjljb3B5SW1hZ2VFTlNf
MTZCYWNraW5nU3RvcmVDb3B5RU5TXzEzU2NhbGVCZWhhdmlvckUKIF9fWk5LN1dlYkNvcmUxNlZp
c2libGVTZWxlY3Rpb24xMGZpcnN0UmFuZ2VFdgogI2VuZGlmCitfX1pOSzdXZWJDb3JlMTRGcmFt
ZVNlbGVjdGlvbjEwZmlyc3RSYW5nZUV2CiAKICNpZiBFTkFCTEUoU1BFRUNIX1NZTlRIRVNJUykK
IF9fWk43V2ViQ29yZTE1U3BlZWNoU3ludGhlc2lzMjJzZXRQbGF0Zm9ybVN5bnRoZXNpemVyRU5T
dDNfXzExMHVuaXF1ZV9wdHJJTlNfMjVQbGF0Zm9ybVNwZWVjaFN5bnRoZXNpemVyRU5TMV8xNGRl
ZmF1bHRfZGVsZXRlSVMzX0VFRUUKSW5kZXg6IFNvdXJjZS9XZWJDb3JlL2FjY2Vzc2liaWxpdHkv
QWNjZXNzaWJpbGl0eU9iamVjdC5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvYWNj
ZXNzaWJpbGl0eS9BY2Nlc3NpYmlsaXR5T2JqZWN0LmNwcAkocmV2aXNpb24gMTczOTA1KQorKysg
U291cmNlL1dlYkNvcmUvYWNjZXNzaWJpbGl0eS9BY2Nlc3NpYmlsaXR5T2JqZWN0LmNwcAkod29y
a2luZyBjb3B5KQpAQCAtNjQ2LDcgKzY0Niw3IEBACiAgICAgaWYgKFJlZlB0cjxSYW5nZT4gY2xv
c2VzdFN0cmluZ1JhbmdlID0gcmFuZ2VDbG9zZXN0VG9SYW5nZShzZWxlY3RlZFN0cmluZ1Jhbmdl
LmdldCgpLCBjbG9zZXN0QWZ0ZXJTdHJpbmdSYW5nZSwgY2xvc2VzdEJlZm9yZVN0cmluZ1Jhbmdl
KSkgewogICAgICAgICBTdHJpbmcgY2xvc2VzdFN0cmluZyA9IGNsb3Nlc3RTdHJpbmdSYW5nZS0+
dGV4dCgpOwogICAgICAgICBib29sIHJlcGxhY2VTZWxlY3Rpb24gPSBmYWxzZTsKLSAgICAgICAg
aWYgKGZyYW1lLT5zZWxlY3Rpb24oKS5zZXRTZWxlY3RlZFJhbmdlKGNsb3Nlc3RTdHJpbmdSYW5n
ZS5nZXQoKSwgRE9XTlNUUkVBTSwgdHJ1ZSkpIHsKKyAgICAgICAgaWYgKGZyYW1lLT5zZWxlY3Rp
b24oKS5zZXRTZWxlY3RlZFJhbmdlKGNsb3Nlc3RTdHJpbmdSYW5nZS5nZXQoKSwgRE9XTlNUUkVB
TSwgZmFsc2UsIHRydWUpKSB7CiAgICAgICAgICAgICBzd2l0Y2ggKGFjdGl2aXR5KSB7CiAgICAg
ICAgICAgICBjYXNlIEZpbmRBbmRDYXBpdGFsaXplOiB7CiAgICAgICAgICAgICAgICAgcmVwbGFj
ZW1lbnRTdHJpbmcgPSBjbG9zZXN0U3RyaW5nOwpJbmRleDogU291cmNlL1dlYkNvcmUvZG9tL1Bv
c2l0aW9uLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9kb20vUG9zaXRpb24uY3Bw
CShyZXZpc2lvbiAxNzM5MDUpCisrKyBTb3VyY2UvV2ViQ29yZS9kb20vUG9zaXRpb24uY3BwCSh3
b3JraW5nIGNvcHkpCkBAIC0xLDUgKzEsNiBAQAogLyoKICAqIENvcHlyaWdodCAoQykgMjAwNCwg
MjAwNSwgMjAwNiwgMjAwOSwgMjAxMyBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisg
KiBQb3J0aW9ucyBDb3B5cmlnaHQgKGMpIDIwMTQgRGF2aWQgQS4gR2F0d29vZC4gIEFsbCByaWdo
dHMgcmVzZXJ2ZWQuCiAgKgogICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5k
IGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CiAgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJt
aXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKQEAgLTQ4LDcgKzQ5
LDggQEAKICNpbmNsdWRlIDxzdGRpby5oPgogI2luY2x1ZGUgPHd0Zi90ZXh0L0NTdHJpbmcuaD4K
ICNpbmNsdWRlIDx3dGYvdW5pY29kZS9DaGFyYWN0ZXJOYW1lcy5oPgotICAKKyNpbmNsdWRlICJO
b2RlTGlzdC5oIgorCiBuYW1lc3BhY2UgV2ViQ29yZSB7CiAKIHVzaW5nIG5hbWVzcGFjZSBIVE1M
TmFtZXM7CkBAIC0zMDcsOCArMzA5LDkgQEAKICAgICBBU1NFUlQob2Zmc2V0ID49IDApOwogCiAg
ICAgaWYgKG9mZnNldCA+IDApIHsKLSAgICAgICAgaWYgKE5vZGUqIGNoaWxkID0gbm9kZS0+dHJh
dmVyc2VUb0NoaWxkQXQob2Zmc2V0IC0gMSkpCisgICAgICAgIGlmIChOb2RlKiBjaGlsZCA9IG5v
ZGUtPnRyYXZlcnNlVG9DaGlsZEF0KG9mZnNldCAtIDEpKSB7CiAgICAgICAgICAgICByZXR1cm4g
bGFzdFBvc2l0aW9uSW5PckFmdGVyTm9kZShjaGlsZCk7CisgICAgICAgIH0KIAogICAgICAgICAv
LyBUaGVyZSBhcmUgdHdvIHJlYXNvbnMgY2hpbGQgbWlnaHQgYmUgMDoKICAgICAgICAgLy8gICAx
KSBUaGUgbm9kZSBpcyBub2RlIGxpa2UgYSB0ZXh0IG5vZGUgdGhhdCBpcyBub3QgYW4gZWxlbWVu
dCwgYW5kIHRoZXJlZm9yZSBoYXMgbm8gY2hpbGRyZW4uCkBAIC01MzIsNiArNTM1LDEzIEBACiAg
ICAgaWYgKGlzSFRNTFRhYmxlRWxlbWVudChub2RlKSkKICAgICAgICAgcmV0dXJuIGZhbHNlOwog
ICAgIAorICAgIGlmIChub2RlLT5pc0VsZW1lbnROb2RlKCkpIHsKKyAgICAgICAgRWxlbWVudCAq
ZWx0ID0gdG9FbGVtZW50KG5vZGUpOworICAgICAgICBpZiAoZWx0LT5iZWZvcmVQc2V1ZG9FbGVt
ZW50KCkgfHwgZWx0LT5hZnRlclBzZXVkb0VsZW1lbnQoKSkgeworICAgICAgICAgICAgcmV0dXJu
IHRydWU7CisgICAgICAgIH0KKyAgICB9CisgICAgCiAgICAgLy8gVGhlcmUgaXMgYSBWaXNpYmxl
UG9zaXRpb24gaW5zaWRlIGFuIGVtcHR5IGlubGluZS1ibG9jayBjb250YWluZXIuCiAgICAgcmV0
dXJuIG5vZGUtPnJlbmRlcmVyKCktPmlzUmVwbGFjZWQoKSAmJiBjYW5IYXZlQ2hpbGRyZW5Gb3JF
ZGl0aW5nKG5vZGUpICYmIHRvUmVuZGVyQm94KG5vZGUtPnJlbmRlcmVyKCkpLT5oZWlnaHQoKSAh
PSAwICYmICFub2RlLT5maXJzdENoaWxkKCk7CiB9CkBAIC01NzEsOCArNTgxLDEwIEBACiAgICAg
CiAgICAgLy8gaXRlcmF0ZSBiYWNrd2FyZCBmcm9tIHRoZXJlLCBsb29raW5nIGZvciBhIHF1YWxp
ZmllZCBwb3NpdGlvbgogICAgIE5vZGUqIGJvdW5kYXJ5ID0gZW5jbG9zaW5nVmlzdWFsQm91bmRh
cnkoc3RhcnROb2RlKTsKKyAgICAKICAgICAvLyBGSVhNRTogUG9zaXRpb25JdGVyYXRvciBzaG91
bGQgcmVzcGVjdCBCZWZvcmUgYW5kIEFmdGVyIHBvc2l0aW9ucy4KICAgICBQb3NpdGlvbkl0ZXJh
dG9yIGxhc3RWaXNpYmxlID0gbV9hbmNob3JUeXBlID09IFBvc2l0aW9uSXNBZnRlckFuY2hvciA/
IGNyZWF0ZUxlZ2FjeUVkaXRpbmdQb3NpdGlvbihtX2FuY2hvck5vZGUuZ2V0KCksIGNhcmV0TWF4
T2Zmc2V0KG1fYW5jaG9yTm9kZS5nZXQoKSkpIDogKnRoaXM7CisgICAgCiAgICAgUG9zaXRpb25J
dGVyYXRvciBjdXJyZW50UG9zID0gbGFzdFZpc2libGU7CiAgICAgYm9vbCBzdGFydEVkaXRhYmxl
ID0gc3RhcnROb2RlLT5oYXNFZGl0YWJsZVN0eWxlKCk7CiAgICAgTm9kZSogbGFzdE5vZGUgPSBz
dGFydE5vZGU7CkBAIC05MzQsNyArOTQ2LDYzIEBACiAKICAgICBpZiAobV9hbmNob3JOb2RlLT5o
YXNUYWdOYW1lKGh0bWxUYWcpKQogICAgICAgICByZXR1cm4gZmFsc2U7Ci0gICAgICAgIAorICAg
IAorICAgIC8qIElmIHRoZSBwb3NpdGlvbiBpcyBpbiB0aGUgbWlkZGxlIG9mIGFuIGVsZW1lbnQg
dGhhdCBjb250YWlucyBib3RoIGJlZm9yZSBhbmQgYWZ0ZXIKKyAgICAgcHNldWRvZWxlbWVudHMs
IHRoZW4gdGhlIHBvc2l0aW9uIGlzLCBieSBkZWZpbml0aW9uLCB2aXN1YWxseSBkaXN0aW5jdCBm
cm9tIHRoZQorICAgICBwb3NpdGlvbiBvbiBlaXRoZXIgc2lkZSwgc28gaWYgdGhlcmUgYXJlIG5v
IGNoaWxkIG5vZGVzIHRoYXQgd291bGQgb3RoZXJ3aXNlCisgICAgIGNvbnN0aXR1dGUgYSBjYW5k
aWRhdGUgcG9zaXRpb24sIHRyZWF0IHRoZSBpbnRlcmlvciBvZiB0aGUgbm9kZSBhcyBhIGNhbmRp
ZGF0ZS4KKyAgICAgKi8KKyAgICBOb2RlICpub2RlID0gZGVwcmVjYXRlZE5vZGUoKTsKKyAgICBp
ZiAobm9kZS0+aXNFbGVtZW50Tm9kZSgpKSB7CisgICAgICAgIEVsZW1lbnQgKmVsdCA9IHRvRWxl
bWVudChub2RlKTsKKyAgICAgICAgaWYgKCFlbHQtPmZpcnN0Q2hpbGQoKSkgeworICAgICAgICAg
ICAgaWYgKGVsdC0+YmVmb3JlUHNldWRvRWxlbWVudCgpICYmIGVsdC0+YWZ0ZXJQc2V1ZG9FbGVt
ZW50KCkpIHsKKyAgICAgICAgICAgICAgICByZXR1cm4gdHJ1ZTsKKyAgICAgICAgICAgIH0KKyAg
ICAgICAgfSBlbHNlIHsKKyAgICAgICAgICAgIGlmIChtX29mZnNldCA+PSAwKSB7CisgICAgICAg
ICAgICAgICAgdW5zaWduZWQgb2Zmc2V0ID0gKHVuc2lnbmVkKW1fb2Zmc2V0OworICAgICAgICAg
ICAgICAgIAorICAgICAgICAgICAgICAgIFJlZlB0cjxOb2RlPiBjdXJyZW50ID0gZWx0OworICAg
ICAgICAgICAgICAgIE5vZGVWZWN0b3IgY2hpbGRyZW47CisgICAgICAgICAgICAgICAgZ2V0Q2hp
bGROb2RlcygqY3VycmVudCwgY2hpbGRyZW4pOworICAgICAgICAgICAgICAgIE5vZGUgKmxlZnQg
PSAob2Zmc2V0ID4gMCkgPyAmY2hpbGRyZW4uYXQob2Zmc2V0IC0gMSkuZ2V0KCkgOiBOVUxMOwor
ICAgICAgICAgICAgICAgIE5vZGUgKnJpZ2h0ID0gKG9mZnNldCA8IGNoaWxkcmVuLnNpemUoKSkg
PworICAgICAgICAgICAgICAgICAgICAmY2hpbGRyZW4uYXQob2Zmc2V0KS5nZXQoKSA6IE5VTEw7
CisgICAgICAgICAgICAgICAgCisgICAgICAgICAgICAgICAgLyogSWYgbGVmdCBleGlzdHMgYW5k
IGlzIGEgdGV4dCBub2RlLCBub3QgYSBjYW5kaWRhdGUuCisgICAgICAgICAgICAgICAgIElmIGxl
ZnQgZXhpc3RzIGFuZCBpcyBhbiBlbGVtZW50IG5vZGUsIGlzIGEgY2FuZGlkYXRlIG9ubHkKKyAg
ICAgICAgICAgICAgICAgaWYgbGVmdCBoYXMgYW4gOjphZnRlciBwc2V1ZG9lbGVtZW50LgorICAg
ICAgICAgICAgICAgICBJZiBsZWZ0IGRvZXMgbm90IGV4aXN0LCBpcyBhIGNhbmRpZGF0ZSBvbmx5
IGlmIHBhcmVudCBoYXMKKyAgICAgICAgICAgICAgICAgYSA6OmJlZm9yZSBwc2V1ZG9lbGVtZW50
LgorICAgICAgICAgICAgICAgICAqLworICAgICAgICAgICAgICAgIGJvb2wgbGVmdEhhc1BzZXVk
b0VsZW1lbnRBdEVuZCA9IGZhbHNlOworICAgICAgICAgICAgICAgIGlmIChsZWZ0ICYmIGxlZnQt
PmlzRWxlbWVudE5vZGUoKSkgeworICAgICAgICAgICAgICAgICAgICBFbGVtZW50ICpsZWZ0RWxl
bWVudCA9IHRvRWxlbWVudChsZWZ0KTsKKyAgICAgICAgICAgICAgICAgICAgbGVmdEhhc1BzZXVk
b0VsZW1lbnRBdEVuZCA9IGxlZnRFbGVtZW50LT5hZnRlclBzZXVkb0VsZW1lbnQoKTsKKyAgICAg
ICAgICAgICAgICB9IGVsc2UgaWYgKCFsZWZ0KSB7CisgICAgICAgICAgICAgICAgICAgIGxlZnRI
YXNQc2V1ZG9FbGVtZW50QXRFbmQgPSBlbHQtPmJlZm9yZVBzZXVkb0VsZW1lbnQoKTsKKyAgICAg
ICAgICAgICAgICB9CisgICAgICAgICAgICAgICAgCisgICAgICAgICAgICAgICAgLyogSWYgcmln
aHQgZXhpc3RzIGFuZCBpcyBhIHRleHQgbm9kZSwgbm90IGEgY2FuZGlkYXRlLgorICAgICAgICAg
ICAgICAgICBJZiByaWdodCBleGlzdHMgYW5kIGlzIGFuIGVsZW1lbnQgbm9kZSwgaXMgYSBjYW5k
aWRhdGUgb25seQorICAgICAgICAgICAgICAgICBpZiByaWdodCBoYXMgYSA6OmJlZm9yZSBwc2V1
ZG9lbGVtZW50LgorICAgICAgICAgICAgICAgICBJZiByaWdodCBkb2VzIG5vdCBleGlzdCwgaXMg
YSBjYW5kaWRhdGUgb25seSBpZiBwYXJlbnQgaGFzCisgICAgICAgICAgICAgICAgIGFuIDo6YWZ0
ZXIgcHNldWRvZWxlbWVudC4KKyAgICAgICAgICAgICAgICAgKi8KKyAgICAgICAgICAgICAgICBi
b29sIHJpZ2h0SGFzUHNldWRvRWxlbWVudEF0QmVnaW5uaW5nID0gZmFsc2U7CisgICAgICAgICAg
ICAgICAgaWYgKHJpZ2h0ICYmIHJpZ2h0LT5pc0VsZW1lbnROb2RlKCkpIHsKKyAgICAgICAgICAg
ICAgICAgICAgRWxlbWVudCAqcmlnaHRFbGVtZW50ID0gdG9FbGVtZW50KHJpZ2h0KTsKKyAgICAg
ICAgICAgICAgICAgICAgcmlnaHRIYXNQc2V1ZG9FbGVtZW50QXRCZWdpbm5pbmcgPSByaWdodEVs
ZW1lbnQtPmJlZm9yZVBzZXVkb0VsZW1lbnQoKTsKKyAgICAgICAgICAgICAgICB9IGVsc2UgaWYg
KCFyaWdodCkgeworICAgICAgICAgICAgICAgICAgICByaWdodEhhc1BzZXVkb0VsZW1lbnRBdEJl
Z2lubmluZyA9IGVsdC0+YWZ0ZXJQc2V1ZG9FbGVtZW50KCk7CisgICAgICAgICAgICAgICAgfQor
ICAgICAgICAgICAgICAgIAorICAgICAgICAgICAgICAgIGlmIChsZWZ0SGFzUHNldWRvRWxlbWVu
dEF0RW5kICYmIHJpZ2h0SGFzUHNldWRvRWxlbWVudEF0QmVnaW5uaW5nKSByZXR1cm4gdHJ1ZTsK
KyAgICAgICAgICAgIH0KKyAgICAgICAgfQorICAgIH0KKyAgICAKICAgICBpZiAocmVuZGVyZXIt
PmlzUmVuZGVyQmxvY2tGbG93KCkpIHsKICAgICAgICAgUmVuZGVyQmxvY2tGbG93JiBibG9jayA9
IHRvUmVuZGVyQmxvY2tGbG93KCpyZW5kZXJlcik7CiAgICAgICAgIGlmIChibG9jay5sb2dpY2Fs
SGVpZ2h0KCkgfHwgbV9hbmNob3JOb2RlLT5oYXNUYWdOYW1lKGJvZHlUYWcpKSB7CkBAIC0xMTE1
LDYgKzExODMsOCBAQAogICAgICAgICAgICAgcmV0dXJuIDA7CiAgICAgICAgIGlmIChpc05vblRl
eHRMZWFmQ2hpbGQobmV4dCkpCiAgICAgICAgICAgICByZXR1cm4gMDsKKyAgICAgICAgaWYgKG5l
eHQtPmlzUHNldWRvRWxlbWVudCgpKQorICAgICAgICAgICAgcmV0dXJuIDA7CiAgICAgICAgIGlm
IChuZXh0LT5pc1RleHQoKSkgewogICAgICAgICAgICAgSW5saW5lVGV4dEJveCogbWF0Y2ggPSAw
OwogICAgICAgICAgICAgaW50IG1pbk9mZnNldCA9IElOVF9NQVg7CkBAIC0xMTU3LDYgKzEyMjcs
MTIgQEAKICAgICBjYXJldE9mZnNldCA9IGRlcHJlY2F0ZWRFZGl0aW5nT2Zmc2V0KCk7CiAgICAg
UmVuZGVyT2JqZWN0KiByZW5kZXJlciA9IGRlcHJlY2F0ZWROb2RlKCktPnJlbmRlcmVyKCk7CiAK
KyAgICByZXR1cm4gZ2V0SW5saW5lQm94QW5kT2Zmc2V0KGFmZmluaXR5LCBwcmltYXJ5RGlyZWN0
aW9uLCBpbmxpbmVCb3gsIGNhcmV0T2Zmc2V0LCByZW5kZXJlcik7Cit9CisgICAgCit2b2lkIFBv
c2l0aW9uOjpnZXRJbmxpbmVCb3hBbmRPZmZzZXQoRUFmZmluaXR5IGFmZmluaXR5LCBUZXh0RGly
ZWN0aW9uIHByaW1hcnlEaXJlY3Rpb24sIElubGluZUJveComIGlubGluZUJveCwgaW50JiBjYXJl
dE9mZnNldCwgUmVuZGVyT2JqZWN0KiByZW5kZXJlcikgY29uc3QKK3sKKyAgICAKICAgICBpZiAo
cmVuZGVyZXItPmlzQlIoKSkKICAgICAgICAgaW5saW5lQm94ID0gIWNhcmV0T2Zmc2V0ID8gdG9S
ZW5kZXJMaW5lQnJlYWsocmVuZGVyZXIpLT5pbmxpbmVCb3hXcmFwcGVyKCkgOiBudWxscHRyOwog
ICAgIGVsc2UgaWYgKHJlbmRlcmVyLT5pc1RleHQoKSkgewpJbmRleDogU291cmNlL1dlYkNvcmUv
ZG9tL1Bvc2l0aW9uLmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvZG9tL1Bvc2l0aW9u
LmgJKHJldmlzaW9uIDE3MzkwNSkKKysrIFNvdXJjZS9XZWJDb3JlL2RvbS9Qb3NpdGlvbi5oCSh3
b3JraW5nIGNvcHkpCkBAIC0xODMsNiArMTgzLDcgQEAKIAogICAgIHZvaWQgZ2V0SW5saW5lQm94
QW5kT2Zmc2V0KEVBZmZpbml0eSwgSW5saW5lQm94KiYsIGludCYgY2FyZXRPZmZzZXQpIGNvbnN0
OwogICAgIHZvaWQgZ2V0SW5saW5lQm94QW5kT2Zmc2V0KEVBZmZpbml0eSwgVGV4dERpcmVjdGlv
biBwcmltYXJ5RGlyZWN0aW9uLCBJbmxpbmVCb3gqJiwgaW50JiBjYXJldE9mZnNldCkgY29uc3Q7
CisgICAgdm9pZCBnZXRJbmxpbmVCb3hBbmRPZmZzZXQoRUFmZmluaXR5IGFmZmluaXR5LCBUZXh0
RGlyZWN0aW9uIHByaW1hcnlEaXJlY3Rpb24sIElubGluZUJveComIGlubGluZUJveCwgaW50JiBj
YXJldE9mZnNldCwgUmVuZGVyT2JqZWN0KiByZW5kZXJlcikgY29uc3Q7CiAKICAgICBUZXh0RGly
ZWN0aW9uIHByaW1hcnlEaXJlY3Rpb24oKSBjb25zdDsKIApJbmRleDogU291cmNlL1dlYkNvcmUv
ZWRpdGluZy9FZGl0b3IuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL2VkaXRpbmcv
RWRpdG9yLmNwcAkocmV2aXNpb24gMTczOTA1KQorKysgU291cmNlL1dlYkNvcmUvZWRpdGluZy9F
ZGl0b3IuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0xODgxLDcgKzE4ODEsNyBAQAogICAgICAgICAg
ICAgdW5zaWduZWQgc3RhcnQgPSBzdGQ6Om1pbihiYXNlT2Zmc2V0ICsgc2VsZWN0aW9uU3RhcnQs
IGV4dGVudE9mZnNldCk7CiAgICAgICAgICAgICB1bnNpZ25lZCBlbmQgPSBzdGQ6Om1pbihzdGQ6
Om1heChzdGFydCwgYmFzZU9mZnNldCArIHNlbGVjdGlvbkVuZCksIGV4dGVudE9mZnNldCk7CiAg
ICAgICAgICAgICBSZWZQdHI8UmFuZ2U+IHNlbGVjdGVkUmFuZ2UgPSBSYW5nZTo6Y3JlYXRlKGJh
c2VOb2RlLT5kb2N1bWVudCgpLCBiYXNlTm9kZSwgc3RhcnQsIGJhc2VOb2RlLCBlbmQpOwotICAg
ICAgICAgICAgbV9mcmFtZS5zZWxlY3Rpb24oKS5zZXRTZWxlY3RlZFJhbmdlKHNlbGVjdGVkUmFu
Z2UuZ2V0KCksIERPV05TVFJFQU0sIGZhbHNlKTsKKyAgICAgICAgICAgIG1fZnJhbWUuc2VsZWN0
aW9uKCkuc2V0U2VsZWN0ZWRSYW5nZShzZWxlY3RlZFJhbmdlLmdldCgpLCBET1dOU1RSRUFNLCBm
YWxzZSwgZmFsc2UpOwogICAgICAgICB9CiAgICAgfQogCkluZGV4OiBTb3VyY2UvV2ViQ29yZS9l
ZGl0aW5nL0VkaXRvckNvbW1hbmQuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL2Vk
aXRpbmcvRWRpdG9yQ29tbWFuZC5jcHAJKHJldmlzaW9uIDE3MzkwNSkKKysrIFNvdXJjZS9XZWJD
b3JlL2VkaXRpbmcvRWRpdG9yQ29tbWFuZC5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTIxOSw3ICsy
MTksNyBAQAogICAgIEVBZmZpbml0eSBhZmZpbml0eSA9IHNlbGVjdGlvbi5hZmZpbml0eSgpOwog
ICAgIGlmICghZnJhbWUuZWRpdG9yKCkuY2xpZW50KCktPnNob3VsZENoYW5nZVNlbGVjdGVkUmFu
Z2Uob2xkUmFuZ2UuZ2V0KCksIG5ld1JhbmdlLmdldCgpLCBhZmZpbml0eSwgZmFsc2UpKQogICAg
ICAgICByZXR1cm4gZmFsc2U7Ci0gICAgZnJhbWUuc2VsZWN0aW9uKCkuc2V0U2VsZWN0ZWRSYW5n
ZShuZXdSYW5nZS5nZXQoKSwgYWZmaW5pdHksIHRydWUpOworICAgIGZyYW1lLnNlbGVjdGlvbigp
LnNldFNlbGVjdGVkUmFuZ2UobmV3UmFuZ2UuZ2V0KCksIGFmZmluaXR5LCBmYWxzZSwgRnJhbWVT
ZWxlY3Rpb246OkNsb3NlVHlwaW5nKTsKICAgICByZXR1cm4gdHJ1ZTsKIH0KIApAQCAtMzkwLDcg
KzM5MCw3IEBACiAgICAgUmVmUHRyPFJhbmdlPiBtYXJrID0gZnJhbWUuZWRpdG9yKCkubWFyaygp
LnRvTm9ybWFsaXplZFJhbmdlKCk7CiAgICAgRnJhbWVTZWxlY3Rpb24mIHNlbGVjdGlvbiA9IGZy
YW1lLnNlbGVjdGlvbigpOwogICAgIGlmIChtYXJrKSB7Ci0gICAgICAgIGJvb2wgc2VsZWN0ZWQg
PSBzZWxlY3Rpb24uc2V0U2VsZWN0ZWRSYW5nZSh1bmlvbkRPTVJhbmdlcyhtYXJrLmdldCgpLCBm
cmFtZS5lZGl0b3IoKS5zZWxlY3RlZFJhbmdlKCkuZ2V0KCkpLmdldCgpLCBET1dOU1RSRUFNLCB0
cnVlKTsKKwlib29sIHNlbGVjdGVkID0gZnJhbWUuc2VsZWN0aW9uKCkuc2V0U2VsZWN0ZWRSYW5n
ZSh1bmlvbkRPTVJhbmdlcyhtYXJrLmdldCgpLCBmcmFtZS5lZGl0b3IoKS5zZWxlY3RlZFJhbmdl
KCkuZ2V0KCkpLmdldCgpLCBET1dOU1RSRUFNLCBmYWxzZSwgRnJhbWVTZWxlY3Rpb246OkNsb3Nl
VHlwaW5nKTsKICAgICAgICAgQVNTRVJUKHNlbGVjdGVkKTsKICAgICAgICAgaWYgKCFzZWxlY3Rl
ZCkKICAgICAgICAgICAgIHJldHVybiBmYWxzZTsKQEAgLTEwNDMsNyArMTA0Myw4IEBACiAgICAg
ICAgIHN5c3RlbUJlZXAoKTsKICAgICAgICAgcmV0dXJuIGZhbHNlOwogICAgIH0KLSAgICBmcmFt
ZS5zZWxlY3Rpb24oKS5zZXRTZWxlY3RlZFJhbmdlKHVuaW9uRE9NUmFuZ2VzKG1hcmsuZ2V0KCks
IHNlbGVjdGlvbi5nZXQoKSkuZ2V0KCksIERPV05TVFJFQU0sIHRydWUpOworICAgIGZyYW1lLnNl
bGVjdGlvbigpLnNldFNlbGVjdGVkUmFuZ2UodW5pb25ET01SYW5nZXMobWFyay5nZXQoKSwgc2Vs
ZWN0aW9uLmdldCgpKS5nZXQoKSwgRE9XTlNUUkVBTSwgZmFsc2UsIEZyYW1lU2VsZWN0aW9uOjpD
bG9zZVR5cGluZyk7CisKICAgICByZXR1cm4gdHJ1ZTsKIH0KIApJbmRleDogU291cmNlL1dlYkNv
cmUvZWRpdGluZy9GcmFtZVNlbGVjdGlvbi5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNv
cmUvZWRpdGluZy9GcmFtZVNlbGVjdGlvbi5jcHAJKHJldmlzaW9uIDE3MzkwNSkKKysrIFNvdXJj
ZS9XZWJDb3JlL2VkaXRpbmcvRnJhbWVTZWxlY3Rpb24uY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0x
MTAsNiArMTEwLDcgQEAKIEZyYW1lU2VsZWN0aW9uOjpGcmFtZVNlbGVjdGlvbihGcmFtZSogZnJh
bWUpCiAgICAgOiBtX2ZyYW1lKGZyYW1lKQogICAgICwgbV94UG9zRm9yVmVydGljYWxBcnJvd05h
dmlnYXRpb24oTm9YUG9zRm9yVmVydGljYWxBcnJvd05hdmlnYXRpb24oKSkKKyAgICAsIG1fb2Jz
ZXJ2aW5nVmlzaWJsZVNlbGVjdGlvbihmYWxzZSkKICAgICAsIG1fZ3JhbnVsYXJpdHkoQ2hhcmFj
dGVyR3JhbnVsYXJpdHkpCiAgICAgLCBtX2NhcmV0QmxpbmtUaW1lcih0aGlzLCAmRnJhbWVTZWxl
Y3Rpb246OmNhcmV0QmxpbmtUaW1lckZpcmVkKQogICAgICwgbV9hYnNDYXJldEJvdW5kc0RpcnR5
KHRydWUpCkBAIC0xMzAsNiArMTMxLDExIEBACiAgICAgICAgIG1fc2VsZWN0aW9uLnNldElzRGly
ZWN0aW9uYWwodHJ1ZSk7CiB9CiAKK0ZyYW1lU2VsZWN0aW9uOjp+RnJhbWVTZWxlY3Rpb24oKQor
eworICAgIHN0b3BPYnNlcnZpbmdWaXNpYmxlU2VsZWN0aW9uQ2hhbmdlSWZOZWNlc3NhcnkoKTsK
K30KKwogRWxlbWVudCogRnJhbWVTZWxlY3Rpb246OnJvb3RFZGl0YWJsZUVsZW1lbnRPckRvY3Vt
ZW50RWxlbWVudCgpIGNvbnN0CiB7CiAgICAgRWxlbWVudCogc2VsZWN0aW9uUm9vdCA9IG1fc2Vs
ZWN0aW9uLnJvb3RFZGl0YWJsZUVsZW1lbnQoKTsKQEAgLTE3MTUsMjQgKzE3MjEsNDMgQEAKICAg
ICAgICAgc2V0U2VsZWN0aW9uKG5ld1NlbGVjdGlvbiwgZGVmYXVsdFNldFNlbGVjdGlvbk9wdGlv
bnMoKSB8IEZpcmVTZWxlY3RFdmVudCk7CiB9CiAKLWJvb2wgRnJhbWVTZWxlY3Rpb246OnNldFNl
bGVjdGVkUmFuZ2UoUmFuZ2UqIHJhbmdlLCBFQWZmaW5pdHkgYWZmaW5pdHksIGJvb2wgY2xvc2VU
eXBpbmcpCitib29sIEZyYW1lU2VsZWN0aW9uOjpzZXRTZWxlY3RlZFJhbmdlKFJhbmdlKiByYW5n
ZSwgRUFmZmluaXR5IGFmZmluaXR5LCBib29sIGlzRGlyZWN0aW9uYWwsIFNldFNlbGVjdGlvbk9w
dGlvbnMgb3B0aW9ucykKIHsKICAgICBpZiAoIXJhbmdlIHx8ICFyYW5nZS0+c3RhcnRDb250YWlu
ZXIoKSB8fCAhcmFuZ2UtPmVuZENvbnRhaW5lcigpKQogICAgICAgICByZXR1cm4gZmFsc2U7CiAg
ICAgQVNTRVJUKCZyYW5nZS0+c3RhcnRDb250YWluZXIoKS0+ZG9jdW1lbnQoKSA9PSAmcmFuZ2Ut
PmVuZENvbnRhaW5lcigpLT5kb2N1bWVudCgpKTsKIAotICAgIFZpc2libGVTZWxlY3Rpb24gbmV3
U2VsZWN0aW9uKHJhbmdlLCBhZmZpbml0eSk7CisgICAgRXhjZXB0aW9uQ29kZSBlYyA9IDA7Cisg
ICAgYm9vbCBjb2xsYXBzZWQgPSByYW5nZS0+Y29sbGFwc2VkKGVjKTsKKyAgICBpZiAoZWMpCisg
ICAgICAgIHJldHVybiBmYWxzZTsKIAorICAgIFZpc2libGVTZWxlY3Rpb24gbmV3U2VsZWN0aW9u
KHJhbmdlLCBjb2xsYXBzZWQgPyBhZmZpbml0eSA6IERPV05TVFJFQU0sIGlzRGlyZWN0aW9uYWwp
OworCiAjaWYgUExBVEZPUk0oSU9TKQogICAgIC8vIEZJWE1FOiBXaHkgZG8gd2UgbmVlZCB0aGlz
IGNoZWNrIG9ubHkgaW4gaU9TPwogICAgIGlmIChyYW5nZS0+c3RhcnRDb250YWluZXIoKSAmJiBy
YW5nZS0+ZW5kQ29udGFpbmVyKCkgJiYgbmV3U2VsZWN0aW9uLmlzTm9uZSgpKQogICAgICAgICBy
ZXR1cm4gZmFsc2U7CiAjZW5kaWYKIAotICAgIHNldFNlbGVjdGlvbihuZXdTZWxlY3Rpb24sIENs
ZWFyVHlwaW5nU3R5bGUgfCAoY2xvc2VUeXBpbmcgPyBDbG9zZVR5cGluZyA6IDApKTsKKyAgICBt
X2xvZ2ljYWxSYW5nZSA9IG51bGxwdHI7CisgICAgc3RvcE9ic2VydmluZ1Zpc2libGVTZWxlY3Rp
b25DaGFuZ2VJZk5lY2Vzc2FyeSgpOworCisgICAgc2V0U2VsZWN0aW9uKG5ld1NlbGVjdGlvbiwg
b3B0aW9ucyk7CisKKyAgICBtX2xvZ2ljYWxSYW5nZSA9IHJhbmdlLT5jbG9uZVJhbmdlKEFTU0VS
VF9OT19FWENFUFRJT04pOworICAgIHN0YXJ0T2JzZXJ2aW5nVmlzaWJsZVNlbGVjdGlvbkNoYW5n
ZSgpOworCiAgICAgcmV0dXJuIHRydWU7CiB9CiAKK1Bhc3NSZWZQdHI8UmFuZ2U+IEZyYW1lU2Vs
ZWN0aW9uOjpmaXJzdFJhbmdlKCkgY29uc3QKK3sKKyAgICBpZiAobV9sb2dpY2FsUmFuZ2UpCisg
ICAgICAgIHJldHVybiBtX2xvZ2ljYWxSYW5nZS0+Y2xvbmVSYW5nZShBU1NFUlRfTk9fRVhDRVBU
SU9OKTsKKyAgICByZXR1cm4gbV9zZWxlY3Rpb24uZmlyc3RSYW5nZSgpOworfQorCiB2b2lkIEZy
YW1lU2VsZWN0aW9uOjpmb2N1c2VkT3JBY3RpdmVTdGF0ZUNoYW5nZWQoKQogewogICAgIGJvb2wg
YWN0aXZlQW5kRm9jdXNlZCA9IGlzRm9jdXNlZEFuZEFjdGl2ZSgpOwpAQCAtMjE1Miw2ICsyMTc3
LDMwIEBACiAgICAgdXBkYXRlRGF0YURldGVjdG9yc0ZvclNlbGVjdGlvbigpOwogfQogCit2b2lk
IEZyYW1lU2VsZWN0aW9uOjpkaWRDaGFuZ2VWaXNpYmxlU2VsZWN0aW9uKCkKK3sKKyAgICBBU1NF
UlQobV9vYnNlcnZpbmdWaXNpYmxlU2VsZWN0aW9uKTsKKyAgICAvLyBJbnZhbGlkYXRlIHRoZSBs
b2dpY2FsIHJhbmdlIHdoZW4gdGhlIHVuZGVybHlpbmcgVmlzaWJsZVNlbGVjdGlvbiBoYXMgY2hh
bmdlZC4KKyAgICBtX2xvZ2ljYWxSYW5nZSA9IG51bGxwdHI7CisgICAgbV9zZWxlY3Rpb24uY2xl
YXJDaGFuZ2VPYnNlcnZlcigpOworICAgIG1fb2JzZXJ2aW5nVmlzaWJsZVNlbGVjdGlvbiA9IGZh
bHNlOworfQorCit2b2lkIEZyYW1lU2VsZWN0aW9uOjpzdGFydE9ic2VydmluZ1Zpc2libGVTZWxl
Y3Rpb25DaGFuZ2UoKQoreworICAgIEFTU0VSVCghbV9vYnNlcnZpbmdWaXNpYmxlU2VsZWN0aW9u
KTsKKyAgICBtX3NlbGVjdGlvbi5zZXRDaGFuZ2VPYnNlcnZlcigqdGhpcyk7CisgICAgbV9vYnNl
cnZpbmdWaXNpYmxlU2VsZWN0aW9uID0gdHJ1ZTsKK30KKwordm9pZCBGcmFtZVNlbGVjdGlvbjo6
c3RvcE9ic2VydmluZ1Zpc2libGVTZWxlY3Rpb25DaGFuZ2VJZk5lY2Vzc2FyeSgpCit7CisgICAg
aWYgKG1fb2JzZXJ2aW5nVmlzaWJsZVNlbGVjdGlvbikgeworICAgICAgICBtX3NlbGVjdGlvbi5j
bGVhckNoYW5nZU9ic2VydmVyKCk7CisgICAgICAgIG1fb2JzZXJ2aW5nVmlzaWJsZVNlbGVjdGlv
biA9IGZhbHNlOworICAgIH0KK30KKwogI2lmbmRlZiBOREVCVUcKIAogdm9pZCBGcmFtZVNlbGVj
dGlvbjo6Zm9ybWF0Rm9yRGVidWdnZXIoY2hhciogYnVmZmVyLCB1bnNpZ25lZCBsZW5ndGgpIGNv
bnN0CkluZGV4OiBTb3VyY2UvV2ViQ29yZS9lZGl0aW5nL0ZyYW1lU2VsZWN0aW9uLmgKPT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PQotLS0gU291cmNlL1dlYkNvcmUvZWRpdGluZy9GcmFtZVNlbGVjdGlvbi5oCShyZXZpc2lv
biAxNzM5MDUpCisrKyBTb3VyY2UvV2ViQ29yZS9lZGl0aW5nL0ZyYW1lU2VsZWN0aW9uLmgJKHdv
cmtpbmcgY29weSkKQEAgLTEwOSw3ICsxMDksNyBAQAogICAgIFZpc2libGVQb3NpdGlvbiBtX3Bv
c2l0aW9uOwogfTsKIAotY2xhc3MgRnJhbWVTZWxlY3Rpb24gOiBwcml2YXRlIENhcmV0QmFzZSB7
CitjbGFzcyBGcmFtZVNlbGVjdGlvbiAvKiBGSU5BTCAqLyA6IHB1YmxpYyBWaXNpYmxlU2VsZWN0
aW9uOjpDaGFuZ2VPYnNlcnZlciwgcHJpdmF0ZSBDYXJldEJhc2UgewogICAgIFdURl9NQUtFX05P
TkNPUFlBQkxFKEZyYW1lU2VsZWN0aW9uKTsKICAgICBXVEZfTUFLRV9GQVNUX0FMTE9DQVRFRDsK
IHB1YmxpYzoKQEAgLTEzMiw2ICsxMzIsNyBAQAogICAgIH0KIAogICAgIFdFQkNPUkVfRVhQT1JU
IGV4cGxpY2l0IEZyYW1lU2VsZWN0aW9uKEZyYW1lKiA9IG51bGxwdHIpOworICAgIFdFQkNPUkVf
RVhQT1JUIHZpcnR1YWwgfkZyYW1lU2VsZWN0aW9uKCk7CiAKICAgICBXRUJDT1JFX0VYUE9SVCBF
bGVtZW50KiByb290RWRpdGFibGVFbGVtZW50T3JEb2N1bWVudEVsZW1lbnQoKSBjb25zdDsKICAg
ICAgCkBAIC0xNDQsNyArMTQ1LDkgQEAKIAogICAgIGNvbnN0IFZpc2libGVTZWxlY3Rpb24mIHNl
bGVjdGlvbigpIGNvbnN0IHsgcmV0dXJuIG1fc2VsZWN0aW9uOyB9CiAgICAgV0VCQ09SRV9FWFBP
UlQgdm9pZCBzZXRTZWxlY3Rpb24oY29uc3QgVmlzaWJsZVNlbGVjdGlvbiYsIFNldFNlbGVjdGlv
bk9wdGlvbnMgPSBkZWZhdWx0U2V0U2VsZWN0aW9uT3B0aW9ucygpLCBDdXJzb3JBbGlnbk9uU2Ny
b2xsID0gQWxpZ25DdXJzb3JPblNjcm9sbElmTmVlZGVkLCBUZXh0R3JhbnVsYXJpdHkgPSBDaGFy
YWN0ZXJHcmFudWxhcml0eSk7Ci0gICAgV0VCQ09SRV9FWFBPUlQgYm9vbCBzZXRTZWxlY3RlZFJh
bmdlKFJhbmdlKiwgRUFmZmluaXR5LCBib29sIGNsb3NlVHlwaW5nKTsKKyAgICAKKyAgICBXRUJD
T1JFX0VYUE9SVCBib29sIHNldFNlbGVjdGVkUmFuZ2UoUmFuZ2UqLCBFQWZmaW5pdHksIGJvb2wg
aXNEaXJlY3Rpb25hbCwgU2V0U2VsZWN0aW9uT3B0aW9ucyA9IENsb3NlVHlwaW5nIHwgQ2xlYXJU
eXBpbmdTdHlsZSk7CisgICAgCiAgICAgV0VCQ09SRV9FWFBPUlQgdm9pZCBzZWxlY3RBbGwoKTsK
ICAgICBXRUJDT1JFX0VYUE9SVCB2b2lkIGNsZWFyKCk7CiAgICAgdm9pZCBwcmVwYXJlRm9yRGVz
dHJ1Y3Rpb24oKTsKQEAgLTE4Miw3ICsxODUsMTIgQEAKICAgICBib29sIGlzUmFuZ2UoKSBjb25z
dCB7IHJldHVybiBtX3NlbGVjdGlvbi5pc1JhbmdlKCk7IH0KICAgICBib29sIGlzQ2FyZXRPclJh
bmdlKCkgY29uc3QgeyByZXR1cm4gbV9zZWxlY3Rpb24uaXNDYXJldE9yUmFuZ2UoKTsgfQogICAg
IGJvb2wgaXNBbGwoRWRpdGluZ0JvdW5kYXJ5Q3Jvc3NpbmdSdWxlIHJ1bGUgPSBDYW5ub3RDcm9z
c0VkaXRpbmdCb3VuZGFyeSkgY29uc3QgeyByZXR1cm4gbV9zZWxlY3Rpb24uaXNBbGwocnVsZSk7
IH0KKyAgICBib29sIGlzRGlyZWN0aW9uYWwoKSBjb25zdCB7IHJldHVybiBtX3NlbGVjdGlvbi5p
c0RpcmVjdGlvbmFsKCk7IH0KICAgICAKKyAgICAvLyBJZiB0aGlzIEZyYW1lU2VsZWN0aW9uIGhh
cyBhIGxvZ2ljYWwgcmFuZ2Ugd2hpY2ggaXMgc3RpbGwgdmFsaWQsIHRoaXMgZnVuY3Rpb24gcmV0
dXJuIGl0cyBjbG9uZS4gT3RoZXJ3aXNlLAorICAgIC8vIHRoZSByZXR1cm4gdmFsdWUgZnJvbSB1
bmRlcmx5aW5nIFZpc2libGVTZWxlY3Rpb24ncyBmaXJzdFJhbmdlKCkgaXMgcmV0dXJuZWQuCisg
ICAgUGFzc1JlZlB0cjxSYW5nZT4gZmlyc3RSYW5nZSgpIGNvbnN0OworCiAgICAgUGFzc1JlZlB0
cjxSYW5nZT4gdG9Ob3JtYWxpemVkUmFuZ2UoKSBjb25zdCB7IHJldHVybiBtX3NlbGVjdGlvbi50
b05vcm1hbGl6ZWRSYW5nZSgpOyB9CiAKICAgICB2b2lkIGRlYnVnUmVuZGVyZXIoUmVuZGVyT2Jq
ZWN0KiwgYm9vbCBzZWxlY3RlZCkgY29uc3Q7CkBAIC0yNjgsNiArMjc2LDkgQEAKICAgICBib29s
IHNob3VsZFNob3dCbG9ja0N1cnNvcigpIGNvbnN0IHsgcmV0dXJuIG1fc2hvdWxkU2hvd0Jsb2Nr
Q3Vyc29yOyB9CiAgICAgdm9pZCBzZXRTaG91bGRTaG93QmxvY2tDdXJzb3IoYm9vbCk7CiAKKyAg
ICAvLyBWaXNpYmxlU2VsZWN0aW9uOjpDaGFuZ2VPYnNlcnZlciBpbnRlcmZhY2UuCisgICAgdmly
dHVhbCB2b2lkIGRpZENoYW5nZVZpc2libGVTZWxlY3Rpb24oKSAvKiBPVkVSUklERSAqLyA7CisK
IHByaXZhdGU6CiAgICAgZW51bSBFUG9zaXRpb25UeXBlIHsgU1RBUlQsIEVORCwgQkFTRSwgRVhU
RU5UIH07CiAKQEAgLTMxNywxNCArMzI4LDIzIEBACiAKICAgICBib29sIGRpc3BhdGNoU2VsZWN0
U3RhcnQoKTsKIAorICAgIHZvaWQgc3RhcnRPYnNlcnZpbmdWaXNpYmxlU2VsZWN0aW9uQ2hhbmdl
KCk7CisgICAgdm9pZCBzdG9wT2JzZXJ2aW5nVmlzaWJsZVNlbGVjdGlvbkNoYW5nZUlmTmVjZXNz
YXJ5KCk7CisKICAgICBGcmFtZSogbV9mcmFtZTsKIAogICAgIExheW91dFVuaXQgbV94UG9zRm9y
VmVydGljYWxBcnJvd05hdmlnYXRpb247CiAKICAgICBWaXNpYmxlU2VsZWN0aW9uIG1fc2VsZWN0
aW9uOworICAgIGJvb2wgbV9vYnNlcnZpbmdWaXNpYmxlU2VsZWN0aW9uOwogICAgIFZpc2libGVQ
b3NpdGlvbiBtX29yaWdpbmFsQmFzZTsgLy8gVXNlZCB0byBzdG9yZSBiYXNlIGJlZm9yZSB0aGUg
YWRqdXN0bWVudCBhdCBiaWRpIGJvdW5kYXJ5CiAgICAgVGV4dEdyYW51bGFyaXR5IG1fZ3JhbnVs
YXJpdHk7CiAKKyAgICAvLyBUaGUgcmFuZ2Ugc3BlY2lmaWVkIGJ5IHRoZSB1c2VyLCB3aGljaCBt
YXkgbm90IGJlIHZpc3VhbGx5IGNhbm9uaWNhbGl6ZWQgKGhlbmNlICJsb2dpY2FsIikuCisgICAg
Ly8gVGhpcyB3aWxsIGJlIGludmFsaWRhdGVkIGlmIHRoZSB1bmRlcmx5aW5nIFZpc2libGVTZWxl
Y3Rpb24gY2hhbmdlcy4gSWYgdGhhdCBoYXBwZW5zLCB0aGlzIHZhcmlhYmxlIHdpbGwKKyAgICAv
LyBiZWNvbWUgbnVsbCwgaW4gd2hpY2ggY2FzZSBsb2dpY2FsIHBvc2l0aW9ucyA9PSB2aXNpYmxl
IHBvc2l0aW9ucy4KKyAgICBSZWZQdHI8UmFuZ2U+IG1fbG9naWNhbFJhbmdlOworCiAgICAgUmVm
UHRyPE5vZGU+IG1fcHJldmlvdXNDYXJldE5vZGU7IC8vIFRoZSBsYXN0IG5vZGUgd2hpY2ggcGFp
bnRlZCB0aGUgY2FyZXQuIFJldGFpbmVkIGZvciBjbGVhcmluZyB0aGUgb2xkIGNhcmV0IHdoZW4g
aXQgbW92ZXMuCiAKICAgICBSZWZQdHI8RWRpdGluZ1N0eWxlPiBtX3R5cGluZ1N0eWxlOwpJbmRl
eDogU291cmNlL1dlYkNvcmUvZWRpdGluZy9WaXNpYmxlUG9zaXRpb24uY3BwCj09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0K
LS0tIFNvdXJjZS9XZWJDb3JlL2VkaXRpbmcvVmlzaWJsZVBvc2l0aW9uLmNwcAkocmV2aXNpb24g
MTczOTA1KQorKysgU291cmNlL1dlYkNvcmUvZWRpdGluZy9WaXNpYmxlUG9zaXRpb24uY3BwCSh3
b3JraW5nIGNvcHkpCkBAIC0xLDYgKzEsNyBAQAogLyoKICAqIENvcHlyaWdodCAoQykgMjAwNCwg
MjAwNSwgMjAwNiwgMjAwNywgMjAwOCwgMjAwOSBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2
ZWQuCiAgKiBQb3J0aW9ucyBDb3B5cmlnaHQgKGMpIDIwMTEgTW90b3JvbGEgTW9iaWxpdHksIElu
Yy4gIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKiBQb3J0aW9ucyBDb3B5cmlnaHQgKGMpIDIwMTQg
RGF2aWQgQS4gR2F0d29vZC4gIEFsbCByaWdodHMgcmVzZXJ2ZWQuCiAgKgogICogUmVkaXN0cmli
dXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0
CiAgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93
aW5nIGNvbmRpdGlvbnMKQEAgLTM5LDYgKzQwLDcgQEAKICNpbmNsdWRlICJUZXh0LmgiCiAjaW5j
bHVkZSAiVmlzaWJsZVVuaXRzLmgiCiAjaW5jbHVkZSAiaHRtbGVkaXRpbmcuaCIKKyNpbmNsdWRl
ICJQc2V1ZG9FbGVtZW50LmgiCiAjaW5jbHVkZSA8c3RkaW8uaD4KICNpbmNsdWRlIDx3dGYvdGV4
dC9DU3RyaW5nLmg+CiAKQEAgLTEyMiwxMSArMTI0LDU1IEBACiAKICAgICAgICAgUmVuZGVyT2Jq
ZWN0KiByZW5kZXJlciA9ICZib3gtPnJlbmRlcmVyKCk7CiAKKyAgICAgICAgYm9vbCBza2lwQ3Vy
cmVudCA9IHRydWU7CisgICAgICAgIAorICAgICAgICBOb2RlICpsYXN0Tm9kZSA9IE5VTEw7Cisg
ICAgICAgIAogICAgICAgICB3aGlsZSAodHJ1ZSkgeworICAgICAgICAgICAgYm9vbCBlbGVtZW50
Q2hhbmdlZCA9IGZhbHNlOworICAgICAgICAgICAgaWYgKHJlbmRlcmVyLT5ub2RlKCkgJiYgIXJl
bmRlcmVyLT5ub2RlKCktPmlzRG9jdW1lbnROb2RlKCkpIHsKKyAgICAgICAgICAgICAgICBpZiAo
bGFzdE5vZGUgJiYgbGFzdE5vZGUgIT0gcmVuZGVyZXItPm5vZGUoKSkgeworICAgICAgICAgICAg
ICAgICAgICBza2lwQ3VycmVudCA9IGZhbHNlOworICAgICAgICAgICAgICAgICAgICBlbGVtZW50
Q2hhbmdlZCA9IHRydWU7CisgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgICAgIGxhc3RO
b2RlID0gcmVuZGVyZXItPm5vZGUoKTsKKyAgICAgICAgICAgICAgICAgICAgCisgICAgICAgICAg
ICB9CisgICAgICAgICAgICAgICAgCisgICAgICAgICAgICBFbGVtZW50ICplbHQgPSBOVUxMOwor
ICAgICAgICAgICAgCisgICAgICAgICAgICBpZiAocmVuZGVyZXItPm5vZGUoKSkgeworICAgICAg
ICAgICAgICAgIGlmIChyZW5kZXJlci0+bm9kZSgpLT5pc0VsZW1lbnROb2RlKCkpIHsKKyAgICAg
ICAgICAgICAgICAgICAgZWx0ID0gdG9FbGVtZW50KHJlbmRlcmVyLT5ub2RlKCkpOworICAgICAg
ICAgICAgICAgIH0KKyAgICAgICAgICAgIH0KKyAgICAgICAgICAgIAogICAgICAgICAgICAgaWYg
KChyZW5kZXJlci0+aXNSZXBsYWNlZCgpIHx8IHJlbmRlcmVyLT5pc0JSKCkpICYmIG9mZnNldCA9
PSBib3gtPmNhcmV0UmlnaHRtb3N0T2Zmc2V0KCkpCiAgICAgICAgICAgICAgICAgcmV0dXJuIGJv
eC0+aXNMZWZ0VG9SaWdodERpcmVjdGlvbigpID8gcHJldmlvdXNWaXN1YWxseURpc3RpbmN0Q2Fu
ZGlkYXRlKG1fZGVlcFBvc2l0aW9uKSA6IG5leHRWaXN1YWxseURpc3RpbmN0Q2FuZGlkYXRlKG1f
ZGVlcFBvc2l0aW9uKTsKIAogICAgICAgICAgICAgaWYgKCFyZW5kZXJlci0+bm9kZSgpKSB7Cisg
ICAgICAgICAgICAgICAgaWYgKHJlbmRlcmVyLT5wYXJlbnQoKS0+aXNCZWZvcmVDb250ZW50KCkp
IHsKKyAgICAgICAgICAgICAgICAgICAgLyogVGhpcyBtYWdpYyBsZXRzIHVzIHdhbGsgaW50byBl
bXB0eSBlbGVtZW50cyBpZiB0aGV5IGhhdmUKKyAgICAgICAgICAgICAgICAgICAgICAgcHNldWRv
LWVsZW1lbnRzIHRvIG1ha2UgdGhlbSB2aXN1YWxseSBkaXN0aW5jdC4gIFdpdGhvdXQKKyAgICAg
ICAgICAgICAgICAgICAgICAgaXQsIHlvdSdkIG9ubHkgcmVhY2ggdGhvc2UgZWxlbWVudHMgaWYg
dGhlIGVsZW1lbnQgaGFkCisgICAgICAgICAgICAgICAgICAgICAgIGEgYmFja2dyb3VuZCBvciBv
dGhlciBjb250ZW50IHRoYXQgcmVxdWlyZWQgcmVuZGVyaW5nLgorICAgICAgICAgICAgICAgICAg
ICAgKi8KKyAgICAgICAgICAgICAgICAgICAgUmVuZGVyT2JqZWN0ICpwYXJlbnQgPSByZW5kZXJl
ci0+cGFyZW50KCk7CisgICAgICAgICAgICAgICAgICAgIE5vZGUgKm5vZGUgPSBwYXJlbnQtPm5v
ZGUoKTsKKyAgICAgICAgICAgICAgICAgICAgCisgICAgICAgICAgICAgICAgICAgIGlmIChub2Rl
KSB7CisgICAgICAgICAgICAgICAgICAgICAgICBBU1NFUlQobm9kZS0+aXNQc2V1ZG9FbGVtZW50
KCkpOworICAgICAgICAgICAgICAgICAgICAgICAgUHNldWRvRWxlbWVudCAqcGUgPSB0b1BzZXVk
b0VsZW1lbnQobm9kZSk7CisgICAgICAgICAgICAgICAgICAgICAgICBFbGVtZW50ICplbHQgPSBw
ZS0+aG9zdEVsZW1lbnQoKTsKKyAgICAgICAgICAgICAgICAgICAgICAgIAorICAgICAgICAgICAg
ICAgICAgICAgICAgaWYgKCFlbHQtPmZpcnN0Q2hpbGQoKSkgeworICAgICAgICAgICAgICAgICAg
ICAgICAgICAgIHJlbmRlcmVyID0gcmVuZGVyZXItPnBhcmVudCgpOworICAgICAgICAgICAgICAg
ICAgICAgICAgICAgIHNraXBDdXJyZW50ID0gZmFsc2U7CisKKyAgICAgICAgICAgICAgICAgICAg
ICAgICAgICBjb250aW51ZTsKKyAgICAgICAgICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAg
ICAgICAgICAgfQorICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgICAgICBib3ggPSBib3gt
PnByZXZMZWFmQ2hpbGQoKTsKICAgICAgICAgICAgICAgICBpZiAoIWJveCkKICAgICAgICAgICAg
ICAgICAgICAgcmV0dXJuIHByaW1hcnlEaXJlY3Rpb24gPT0gTFRSID8gcHJldmlvdXNWaXN1YWxs
eURpc3RpbmN0Q2FuZGlkYXRlKG1fZGVlcFBvc2l0aW9uKSA6IG5leHRWaXN1YWxseURpc3RpbmN0
Q2FuZGlkYXRlKG1fZGVlcFBvc2l0aW9uKTsKQEAgLTEzNSwxMiArMTgxLDE1IEBACiAgICAgICAg
ICAgICAgICAgY29udGludWU7CiAgICAgICAgICAgICB9CiAKLSAgICAgICAgICAgIG9mZnNldCA9
IGJveC0+aXNMZWZ0VG9SaWdodERpcmVjdGlvbigpID8gcmVuZGVyZXItPnByZXZpb3VzT2Zmc2V0
KG9mZnNldCkgOiByZW5kZXJlci0+bmV4dE9mZnNldChvZmZzZXQpOwotCisgICAgICAgICAgICBp
ZiAoc2tpcEN1cnJlbnQpIHsKKyAgICAgICAgICAgICAgICBvZmZzZXQgPSBib3gtPmlzTGVmdFRv
UmlnaHREaXJlY3Rpb24oKSA/IHJlbmRlcmVyLT5wcmV2aW91c09mZnNldChvZmZzZXQpIDogcmVu
ZGVyZXItPm5leHRPZmZzZXQob2Zmc2V0KTsKKyAgICAgICAgICAgIH0KKyAgICAgICAgICAgIHNr
aXBDdXJyZW50ID0gdHJ1ZTsKKyAgICAgICAgICAgIAogICAgICAgICAgICAgaW50IGNhcmV0TWlu
T2Zmc2V0ID0gYm94LT5jYXJldE1pbk9mZnNldCgpOwogICAgICAgICAgICAgaW50IGNhcmV0TWF4
T2Zmc2V0ID0gYm94LT5jYXJldE1heE9mZnNldCgpOwogCi0gICAgICAgICAgICBpZiAob2Zmc2V0
ID4gY2FyZXRNaW5PZmZzZXQgJiYgb2Zmc2V0IDwgY2FyZXRNYXhPZmZzZXQpCisgICAgICAgICAg
ICBpZiAob2Zmc2V0ID4gY2FyZXRNaW5PZmZzZXQgJiYgKG9mZnNldCA8IGNhcmV0TWF4T2Zmc2V0
IHx8IChvZmZzZXQgPT0gY2FyZXRNYXhPZmZzZXQgJiYgZWxlbWVudENoYW5nZWQpKSkKICAgICAg
ICAgICAgICAgICBicmVhazsKIAogICAgICAgICAgICAgaWYgKGJveC0+aXNMZWZ0VG9SaWdodERp
cmVjdGlvbigpID8gb2Zmc2V0IDwgY2FyZXRNaW5PZmZzZXQgOiBvZmZzZXQgPiBjYXJldE1heE9m
ZnNldCkgewpAQCAtMTYzLDg3ICsyMTIsMTAxIEBACiAgICAgICAgICAgICAgICAgYm94ID0gcHJl
dkJveDsKICAgICAgICAgICAgICAgICByZW5kZXJlciA9ICZib3gtPnJlbmRlcmVyKCk7CiAgICAg
ICAgICAgICAgICAgb2Zmc2V0ID0gcHJldkJveC0+Y2FyZXRSaWdodG1vc3RPZmZzZXQoKTsKKyAg
ICAgICAgICAgICAgICAKKyAgICAgICAgICAgICAgICAvLyBza2lwQ3VycmVudCBzaG91bGQgYmUg
dHJ1ZSBpZiBhbmQgb25seSBpZiB3ZSBkb24ndCBlbmNvdW50ZXIgYW55CisgICAgICAgICAgICAg
ICAgLy8gcHNldWRvZWxlbWVudHMgb3IgZWxlbWVudCBib3VuZGFyaWVzLgorICAgICAgICAgICAg
ICAgIHNraXBDdXJyZW50ID0gdHJ1ZTsKKwogICAgICAgICAgICAgICAgIGNvbnRpbnVlOwogICAg
ICAgICAgICAgfQogCi0gICAgICAgICAgICBBU1NFUlQob2Zmc2V0ID09IGJveC0+Y2FyZXRMZWZ0
bW9zdE9mZnNldCgpKTsKKyAgICAgICAgICAgIC8vIENoYW5nZWQgYXNzZXJ0IHRvIGlmLCBiZWNh
dXNlIGl0IGNvdWxkIGFsc28gYmUgdGhlCisgICAgICAgICAgICAvLyByaWdodG1vc3Qgb2Zmc2V0
LgorICAgICAgICAgICAgaWYgKG9mZnNldCA9PSBib3gtPmNhcmV0TGVmdG1vc3RPZmZzZXQoKSkg
ewogCi0gICAgICAgICAgICB1bnNpZ25lZCBjaGFyIGxldmVsID0gYm94LT5iaWRpTGV2ZWwoKTsK
LSAgICAgICAgICAgIElubGluZUJveCogcHJldkJveCA9IGJveC0+cHJldkxlYWZDaGlsZCgpOwor
ICAgICAgICAgICAgICAgIHVuc2lnbmVkIGNoYXIgbGV2ZWwgPSBib3gtPmJpZGlMZXZlbCgpOwor
ICAgICAgICAgICAgICAgIElubGluZUJveCogcHJldkJveCA9IGJveC0+cHJldkxlYWZDaGlsZCgp
OwogCi0gICAgICAgICAgICBpZiAoYm94LT5kaXJlY3Rpb24oKSA9PSBwcmltYXJ5RGlyZWN0aW9u
KSB7Ci0gICAgICAgICAgICAgICAgaWYgKCFwcmV2Qm94KSB7Ci0gICAgICAgICAgICAgICAgICAg
IElubGluZUJveCogbG9naWNhbFN0YXJ0ID0gMDsKLSAgICAgICAgICAgICAgICAgICAgaWYgKHBy
aW1hcnlEaXJlY3Rpb24gPT0gTFRSID8gYm94LT5yb290KCkuZ2V0TG9naWNhbFN0YXJ0Qm94V2l0
aE5vZGUobG9naWNhbFN0YXJ0KSA6IGJveC0+cm9vdCgpLmdldExvZ2ljYWxFbmRCb3hXaXRoTm9k
ZShsb2dpY2FsU3RhcnQpKSB7Ci0gICAgICAgICAgICAgICAgICAgICAgICBib3ggPSBsb2dpY2Fs
U3RhcnQ7Ci0gICAgICAgICAgICAgICAgICAgICAgICByZW5kZXJlciA9ICZib3gtPnJlbmRlcmVy
KCk7Ci0gICAgICAgICAgICAgICAgICAgICAgICBvZmZzZXQgPSBwcmltYXJ5RGlyZWN0aW9uID09
IExUUiA/IGJveC0+Y2FyZXRNaW5PZmZzZXQoKSA6IGJveC0+Y2FyZXRNYXhPZmZzZXQoKTsKKyAg
ICAgICAgICAgICAgICBpZiAoYm94LT5kaXJlY3Rpb24oKSA9PSBwcmltYXJ5RGlyZWN0aW9uKSB7
CisgICAgICAgICAgICAgICAgICAgIGlmICghcHJldkJveCkgeworICAgICAgICAgICAgICAgICAg
ICAgICAgSW5saW5lQm94KiBsb2dpY2FsU3RhcnQgPSAwOworICAgICAgICAgICAgICAgICAgICAg
ICAgaWYgKHByaW1hcnlEaXJlY3Rpb24gPT0gTFRSID8gYm94LT5yb290KCkuZ2V0TG9naWNhbFN0
YXJ0Qm94V2l0aE5vZGUobG9naWNhbFN0YXJ0KSA6IGJveC0+cm9vdCgpLmdldExvZ2ljYWxFbmRC
b3hXaXRoTm9kZShsb2dpY2FsU3RhcnQpKSB7CisgICAgICAgICAgICAgICAgICAgICAgICAgICAg
Ym94ID0gbG9naWNhbFN0YXJ0OworICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJlbmRlcmVy
ID0gJmJveC0+cmVuZGVyZXIoKTsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICBvZmZzZXQg
PSBwcmltYXJ5RGlyZWN0aW9uID09IExUUiA/IGJveC0+Y2FyZXRNaW5PZmZzZXQoKSA6IGJveC0+
Y2FyZXRNYXhPZmZzZXQoKTsKKyAgICAgICAgICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAg
ICAgICAgICAgICAgIGJyZWFrOwogICAgICAgICAgICAgICAgICAgICB9Ci0gICAgICAgICAgICAg
ICAgICAgIGJyZWFrOwotICAgICAgICAgICAgICAgIH0KLSAgICAgICAgICAgICAgICBpZiAocHJl
dkJveC0+YmlkaUxldmVsKCkgPj0gbGV2ZWwpCi0gICAgICAgICAgICAgICAgICAgIGJyZWFrOwor
ICAgICAgICAgICAgICAgICAgICBpZiAocHJldkJveC0+YmlkaUxldmVsKCkgPj0gbGV2ZWwpCisg
ICAgICAgICAgICAgICAgICAgICAgICBicmVhazsKIAotICAgICAgICAgICAgICAgIGxldmVsID0g
cHJldkJveC0+YmlkaUxldmVsKCk7CisgICAgICAgICAgICAgICAgICAgIGxldmVsID0gcHJldkJv
eC0+YmlkaUxldmVsKCk7CiAKLSAgICAgICAgICAgICAgICBJbmxpbmVCb3gqIG5leHRCb3ggPSBi
b3g7Ci0gICAgICAgICAgICAgICAgZG8gewotICAgICAgICAgICAgICAgICAgICBuZXh0Qm94ID0g
bmV4dEJveC0+bmV4dExlYWZDaGlsZCgpOwotICAgICAgICAgICAgICAgIH0gd2hpbGUgKG5leHRC
b3ggJiYgbmV4dEJveC0+YmlkaUxldmVsKCkgPiBsZXZlbCk7CisgICAgICAgICAgICAgICAgICAg
IElubGluZUJveCogbmV4dEJveCA9IGJveDsKKyAgICAgICAgICAgICAgICAgICAgZG8geworICAg
ICAgICAgICAgICAgICAgICAgICAgbmV4dEJveCA9IG5leHRCb3gtPm5leHRMZWFmQ2hpbGQoKTsK
KyAgICAgICAgICAgICAgICAgICAgfSB3aGlsZSAobmV4dEJveCAmJiBuZXh0Qm94LT5iaWRpTGV2
ZWwoKSA+IGxldmVsKTsKIAotICAgICAgICAgICAgICAgIGlmIChuZXh0Qm94ICYmIG5leHRCb3gt
PmJpZGlMZXZlbCgpID09IGxldmVsKQotICAgICAgICAgICAgICAgICAgICBicmVhazsKKyAgICAg
ICAgICAgICAgICAgICAgaWYgKG5leHRCb3ggJiYgbmV4dEJveC0+YmlkaUxldmVsKCkgPT0gbGV2
ZWwpCisgICAgICAgICAgICAgICAgICAgICAgICBicmVhazsKIAotICAgICAgICAgICAgICAgIGJv
eCA9IHByZXZCb3g7Ci0gICAgICAgICAgICAgICAgcmVuZGVyZXIgPSAmYm94LT5yZW5kZXJlcigp
OwotICAgICAgICAgICAgICAgIG9mZnNldCA9IGJveC0+Y2FyZXRSaWdodG1vc3RPZmZzZXQoKTsK
LSAgICAgICAgICAgICAgICBpZiAoYm94LT5kaXJlY3Rpb24oKSA9PSBwcmltYXJ5RGlyZWN0aW9u
KQotICAgICAgICAgICAgICAgICAgICBicmVhazsKLSAgICAgICAgICAgICAgICBjb250aW51ZTsK
LSAgICAgICAgICAgIH0KKyAgICAgICAgICAgICAgICAgICAgYm94ID0gcHJldkJveDsKKyAgICAg
ICAgICAgICAgICAgICAgcmVuZGVyZXIgPSAmYm94LT5yZW5kZXJlcigpOworICAgICAgICAgICAg
ICAgICAgICBvZmZzZXQgPSBib3gtPmNhcmV0UmlnaHRtb3N0T2Zmc2V0KCk7CisgICAgICAgICAg
ICAgICAgICAgIGlmIChib3gtPmRpcmVjdGlvbigpID09IHByaW1hcnlEaXJlY3Rpb24pCisgICAg
ICAgICAgICAgICAgICAgICAgICBicmVhazsKKyAgICAgICAgICAgICAgICAgICAgY29udGludWU7
CisgICAgICAgICAgICAgICAgfQogCi0gICAgICAgICAgICB3aGlsZSAocHJldkJveCAmJiAhcHJl
dkJveC0+cmVuZGVyZXIoKS5ub2RlKCkpCi0gICAgICAgICAgICAgICAgcHJldkJveCA9IHByZXZC
b3gtPnByZXZMZWFmQ2hpbGQoKTsKKyAgICAgICAgICAgICAgICB3aGlsZSAocHJldkJveCAmJiAh
cHJldkJveC0+cmVuZGVyZXIoKS5ub2RlKCkpCisgICAgICAgICAgICAgICAgICAgIHByZXZCb3gg
PSBwcmV2Qm94LT5wcmV2TGVhZkNoaWxkKCk7CiAKLSAgICAgICAgICAgIGlmIChwcmV2Qm94KSB7
Ci0gICAgICAgICAgICAgICAgYm94ID0gcHJldkJveDsKLSAgICAgICAgICAgICAgICByZW5kZXJl
ciA9ICZib3gtPnJlbmRlcmVyKCk7Ci0gICAgICAgICAgICAgICAgb2Zmc2V0ID0gYm94LT5jYXJl
dFJpZ2h0bW9zdE9mZnNldCgpOwotICAgICAgICAgICAgICAgIGlmIChib3gtPmJpZGlMZXZlbCgp
ID4gbGV2ZWwpIHsKLSAgICAgICAgICAgICAgICAgICAgZG8gewotICAgICAgICAgICAgICAgICAg
ICAgICAgcHJldkJveCA9IHByZXZCb3gtPnByZXZMZWFmQ2hpbGQoKTsKLSAgICAgICAgICAgICAg
ICAgICAgfSB3aGlsZSAocHJldkJveCAmJiBwcmV2Qm94LT5iaWRpTGV2ZWwoKSA+IGxldmVsKTsK
KyAgICAgICAgICAgICAgICBpZiAocHJldkJveCkgeworICAgICAgICAgICAgICAgICAgICBib3gg
PSBwcmV2Qm94OworICAgICAgICAgICAgICAgICAgICByZW5kZXJlciA9ICZib3gtPnJlbmRlcmVy
KCk7CisgICAgICAgICAgICAgICAgICAgIG9mZnNldCA9IGJveC0+Y2FyZXRSaWdodG1vc3RPZmZz
ZXQoKTsKKyAgICAgICAgICAgICAgICAgICAgaWYgKGJveC0+YmlkaUxldmVsKCkgPiBsZXZlbCkg
eworICAgICAgICAgICAgICAgICAgICAgICAgZG8geworICAgICAgICAgICAgICAgICAgICAgICAg
ICAgIHByZXZCb3ggPSBwcmV2Qm94LT5wcmV2TGVhZkNoaWxkKCk7CisgICAgICAgICAgICAgICAg
ICAgICAgICB9IHdoaWxlIChwcmV2Qm94ICYmIHByZXZCb3gtPmJpZGlMZXZlbCgpID4gbGV2ZWwp
OwogCi0gICAgICAgICAgICAgICAgICAgIGlmICghcHJldkJveCB8fCBwcmV2Qm94LT5iaWRpTGV2
ZWwoKSA8IGxldmVsKQotICAgICAgICAgICAgICAgICAgICAgICAgY29udGludWU7Ci0gICAgICAg
ICAgICAgICAgfQotICAgICAgICAgICAgfSBlbHNlIHsKLSAgICAgICAgICAgICAgICAvLyBUcmFp
bGluZyBlZGdlIG9mIGEgc2Vjb25kYXJ5IHJ1bi4gU2V0IHRvIHRoZSBsZWFkaW5nIGVkZ2Ugb2Yg
dGhlIGVudGlyZSBydW4uCi0gICAgICAgICAgICAgICAgd2hpbGUgKHRydWUpIHsKLSAgICAgICAg
ICAgICAgICAgICAgd2hpbGUgKElubGluZUJveCogbmV4dEJveCA9IGJveC0+bmV4dExlYWZDaGls
ZCgpKSB7Ci0gICAgICAgICAgICAgICAgICAgICAgICBpZiAobmV4dEJveC0+YmlkaUxldmVsKCkg
PCBsZXZlbCkKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICBicmVhazsKLSAgICAgICAgICAg
ICAgICAgICAgICAgIGJveCA9IG5leHRCb3g7CisgICAgICAgICAgICAgICAgICAgICAgICBpZiAo
IXByZXZCb3ggfHwgcHJldkJveC0+YmlkaUxldmVsKCkgPCBsZXZlbCkKKyAgICAgICAgICAgICAg
ICAgICAgICAgICAgICBjb250aW51ZTsKICAgICAgICAgICAgICAgICAgICAgfQotICAgICAgICAg
ICAgICAgICAgICBpZiAoYm94LT5iaWRpTGV2ZWwoKSA9PSBsZXZlbCkKLSAgICAgICAgICAgICAg
ICAgICAgICAgIGJyZWFrOwotICAgICAgICAgICAgICAgICAgICBsZXZlbCA9IGJveC0+YmlkaUxl
dmVsKCk7Ci0gICAgICAgICAgICAgICAgICAgIHdoaWxlIChJbmxpbmVCb3gqIHByZXZCb3ggPSBi
b3gtPnByZXZMZWFmQ2hpbGQoKSkgewotICAgICAgICAgICAgICAgICAgICAgICAgaWYgKHByZXZC
b3gtPmJpZGlMZXZlbCgpIDwgbGV2ZWwpCisgICAgICAgICAgICAgICAgfSBlbHNlIHsKKyAgICAg
ICAgICAgICAgICAgICAgLy8gVHJhaWxpbmcgZWRnZSBvZiBhIHNlY29uZGFyeSBydW4uIFNldCB0
byB0aGUgbGVhZGluZyBlZGdlIG9mIHRoZSBlbnRpcmUgcnVuLgorICAgICAgICAgICAgICAgICAg
ICB3aGlsZSAodHJ1ZSkgeworICAgICAgICAgICAgICAgICAgICAgICAgd2hpbGUgKElubGluZUJv
eCogbmV4dEJveCA9IGJveC0+bmV4dExlYWZDaGlsZCgpKSB7CisgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgaWYgKG5leHRCb3gtPmJpZGlMZXZlbCgpIDwgbGV2ZWwpCisgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgIGJyZWFrOworICAgICAgICAgICAgICAgICAgICAgICAgICAgIGJv
eCA9IG5leHRCb3g7CisgICAgICAgICAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICAgICAg
ICAgICAgICBpZiAoYm94LT5iaWRpTGV2ZWwoKSA9PSBsZXZlbCkKICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICBicmVhazsKLSAgICAgICAgICAgICAgICAgICAgICAgIGJveCA9IHByZXZCb3g7
CisgICAgICAgICAgICAgICAgICAgICAgICBsZXZlbCA9IGJveC0+YmlkaUxldmVsKCk7CisgICAg
ICAgICAgICAgICAgICAgICAgICB3aGlsZSAoSW5saW5lQm94KiBwcmV2Qm94ID0gYm94LT5wcmV2
TGVhZkNoaWxkKCkpIHsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZiAocHJldkJveC0+
YmlkaUxldmVsKCkgPCBsZXZlbCkKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgYnJl
YWs7CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgYm94ID0gcHJldkJveDsKKyAgICAgICAg
ICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgICAgICAgICAgICAgIGlmIChib3gtPmJpZGlM
ZXZlbCgpID09IGxldmVsKQorICAgICAgICAgICAgICAgICAgICAgICAgICAgIGJyZWFrOworICAg
ICAgICAgICAgICAgICAgICAgICAgbGV2ZWwgPSBib3gtPmJpZGlMZXZlbCgpOwogICAgICAgICAg
ICAgICAgICAgICB9Ci0gICAgICAgICAgICAgICAgICAgIGlmIChib3gtPmJpZGlMZXZlbCgpID09
IGxldmVsKQotICAgICAgICAgICAgICAgICAgICAgICAgYnJlYWs7Ci0gICAgICAgICAgICAgICAg
ICAgIGxldmVsID0gYm94LT5iaWRpTGV2ZWwoKTsKKyAgICAgICAgICAgICAgICAgICAgcmVuZGVy
ZXIgPSAmYm94LT5yZW5kZXJlcigpOworICAgICAgICAgICAgICAgICAgICBvZmZzZXQgPSBwcmlt
YXJ5RGlyZWN0aW9uID09IExUUiA/IGJveC0+Y2FyZXRNaW5PZmZzZXQoKSA6IGJveC0+Y2FyZXRN
YXhPZmZzZXQoKTsKICAgICAgICAgICAgICAgICB9Ci0gICAgICAgICAgICAgICAgcmVuZGVyZXIg
PSAmYm94LT5yZW5kZXJlcigpOwotICAgICAgICAgICAgICAgIG9mZnNldCA9IHByaW1hcnlEaXJl
Y3Rpb24gPT0gTFRSID8gYm94LT5jYXJldE1pbk9mZnNldCgpIDogYm94LT5jYXJldE1heE9mZnNl
dCgpOworICAgICAgICAgICAgICAgIGJyZWFrOwogICAgICAgICAgICAgfQotICAgICAgICAgICAg
YnJlYWs7CiAgICAgICAgIH0KKyAgICAgICAgCisgICAgICAgIE5vZGUgKm5vZGUgPSByZW5kZXJl
ci0+bm9kZSgpOworICAgICAgICBpZiAobm9kZS0+aXNQc2V1ZG9FbGVtZW50KCkpIHsKKyAgICAg
ICAgICAgIFBzZXVkb0VsZW1lbnQgKmVsdCA9IHRvUHNldWRvRWxlbWVudChub2RlKTsKKyAgICAg
ICAgICAgIG5vZGUgPSBlbHQtPmhvc3RFbGVtZW50KCk7CisgICAgICAgIH0KIAotICAgICAgICBw
ID0gY3JlYXRlTGVnYWN5RWRpdGluZ1Bvc2l0aW9uKHJlbmRlcmVyLT5ub2RlKCksIG9mZnNldCk7
CisgICAgICAgIHAgPSBjcmVhdGVMZWdhY3lFZGl0aW5nUG9zaXRpb24obm9kZSwgb2Zmc2V0KTsK
IAogICAgICAgICBpZiAoKHAuaXNDYW5kaWRhdGUoKSAmJiBwLmRvd25zdHJlYW0oKSAhPSBkb3du
c3RyZWFtU3RhcnQpIHx8IHAuYXRTdGFydE9mVHJlZSgpIHx8IHAuYXRFbmRPZlRyZWUoKSkKICAg
ICAgICAgICAgIHJldHVybiBwOwpAQCAtMjg3LDIxICszNTAsNDEgQEAKIAogICAgICAgICBSZW5k
ZXJPYmplY3QqIHJlbmRlcmVyID0gJmJveC0+cmVuZGVyZXIoKTsKIAorICAgICAgICBib29sIHNr
aXBDdXJyZW50ID0gdHJ1ZTsKKwogICAgICAgICB3aGlsZSAodHJ1ZSkgewogICAgICAgICAgICAg
aWYgKChyZW5kZXJlci0+aXNSZXBsYWNlZCgpIHx8IHJlbmRlcmVyLT5pc0JSKCkpICYmIG9mZnNl
dCA9PSBib3gtPmNhcmV0TGVmdG1vc3RPZmZzZXQoKSkKICAgICAgICAgICAgICAgICByZXR1cm4g
Ym94LT5pc0xlZnRUb1JpZ2h0RGlyZWN0aW9uKCkgPyBuZXh0VmlzdWFsbHlEaXN0aW5jdENhbmRp
ZGF0ZShtX2RlZXBQb3NpdGlvbikgOiBwcmV2aW91c1Zpc3VhbGx5RGlzdGluY3RDYW5kaWRhdGUo
bV9kZWVwUG9zaXRpb24pOwogCiAgICAgICAgICAgICBpZiAoIXJlbmRlcmVyLT5ub2RlKCkpIHsK
KyAgICAgICAgICAgICAgICBpZiAocmVuZGVyZXItPnBhcmVudCgpLT5pc0JlZm9yZUNvbnRlbnQo
KSkgeworICAgICAgICAgICAgICAgICAgICAvKiBUaGlzIG1hZ2ljIGxldHMgdXMgd2FsayBpbnRv
IGVtcHR5IGVsZW1lbnRzIGlmIHRoZXkgaGF2ZQorICAgICAgICAgICAgICAgICAgICAgcHNldWRv
LWVsZW1lbnRzIHRvIG1ha2UgdGhlbSB2aXN1YWxseSBkaXN0aW5jdC4gIFdpdGhvdXQKKyAgICAg
ICAgICAgICAgICAgICAgIGl0LCB5b3UnZCBvbmx5IHJlYWNoIHRob3NlIGVsZW1lbnRzIGlmIHRo
ZSBlbGVtZW50IGhhZAorICAgICAgICAgICAgICAgICAgICAgYSBiYWNrZ3JvdW5kIG9yIG90aGVy
IGNvbnRlbnQgdGhhdCByZXF1aXJlZCByZW5kZXJpbmcuCisgICAgICAgICAgICAgICAgICAgICAq
LworICAgICAgICAgICAgICAgICAgICAKKyAgICAgICAgICAgICAgICAgICAgcmVuZGVyZXIgPSBy
ZW5kZXJlci0+cGFyZW50KCk7CisgICAgICAgICAgICAgICAgICAgIHNraXBDdXJyZW50ID0gZmFs
c2U7CisgICAgICAgICAgICAgICAgICAgIAorICAgICAgICAgICAgICAgICAgICBjb250aW51ZTsK
KyAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAgICAgYm94ID0gYm94LT5uZXh0TGVhZkNo
aWxkKCk7CiAgICAgICAgICAgICAgICAgaWYgKCFib3gpCiAgICAgICAgICAgICAgICAgICAgIHJl
dHVybiBwcmltYXJ5RGlyZWN0aW9uID09IExUUiA/IG5leHRWaXN1YWxseURpc3RpbmN0Q2FuZGlk
YXRlKG1fZGVlcFBvc2l0aW9uKSA6IHByZXZpb3VzVmlzdWFsbHlEaXN0aW5jdENhbmRpZGF0ZSht
X2RlZXBQb3NpdGlvbik7CiAgICAgICAgICAgICAgICAgcmVuZGVyZXIgPSAmYm94LT5yZW5kZXJl
cigpOwogICAgICAgICAgICAgICAgIG9mZnNldCA9IGJveC0+Y2FyZXRMZWZ0bW9zdE9mZnNldCgp
OworICAgICAgICAgICAgICAgIAorICAgICAgICAgICAgICAgIHNraXBDdXJyZW50ID0gZmFsc2U7
CisKICAgICAgICAgICAgICAgICBjb250aW51ZTsKICAgICAgICAgICAgIH0KKyAgICAgICAgICAg
IAorICAgICAgICAgICAgaWYgKHNraXBDdXJyZW50KSB7CisgICAgICAgICAgICAgICAgb2Zmc2V0
ID0gYm94LT5pc0xlZnRUb1JpZ2h0RGlyZWN0aW9uKCkgPyByZW5kZXJlci0+bmV4dE9mZnNldChv
ZmZzZXQpIDogcmVuZGVyZXItPnByZXZpb3VzT2Zmc2V0KG9mZnNldCk7CisgICAgICAgICAgICB9
CisgICAgICAgICAgICBza2lwQ3VycmVudCA9IHRydWU7CiAKLSAgICAgICAgICAgIG9mZnNldCA9
IGJveC0+aXNMZWZ0VG9SaWdodERpcmVjdGlvbigpID8gcmVuZGVyZXItPm5leHRPZmZzZXQob2Zm
c2V0KSA6IHJlbmRlcmVyLT5wcmV2aW91c09mZnNldChvZmZzZXQpOwotCiAgICAgICAgICAgICBp
bnQgY2FyZXRNaW5PZmZzZXQgPSBib3gtPmNhcmV0TWluT2Zmc2V0KCk7CiAgICAgICAgICAgICBp
bnQgY2FyZXRNYXhPZmZzZXQgPSBib3gtPmNhcmV0TWF4T2Zmc2V0KCk7CiAKQEAgLTMzMSw3ICs0
MTQsOCBAQAogICAgICAgICAgICAgICAgIGNvbnRpbnVlOwogICAgICAgICAgICAgfQogCi0gICAg
ICAgICAgICBBU1NFUlQob2Zmc2V0ID09IGJveC0+Y2FyZXRSaWdodG1vc3RPZmZzZXQoKSk7Cisg
ICAgICAgICAgICAvLyBUaGlzIGFzc2VydGlvbiBpcyBubyBsb25nZXIgdmFsaWQuCisgICAgICAg
ICAgICAvLyBBU1NFUlQob2Zmc2V0ID09IGJveC0+Y2FyZXRSaWdodG1vc3RPZmZzZXQoKSk7CiAK
ICAgICAgICAgICAgIHVuc2lnbmVkIGNoYXIgbGV2ZWwgPSBib3gtPmJpZGlMZXZlbCgpOwogICAg
ICAgICAgICAgSW5saW5lQm94KiBuZXh0Qm94ID0gYm94LT5uZXh0TGVhZkNoaWxkKCk7CkBAIC00
MTAsOCArNDk0LDE0IEBACiAgICAgICAgICAgICB9CiAgICAgICAgICAgICBicmVhazsKICAgICAg
ICAgfQorICAgICAgICAKKyAgICAgICAgTm9kZSAqbm9kZSA9IHJlbmRlcmVyLT5ub2RlKCk7Cisg
ICAgICAgIGlmIChub2RlLT5pc1BzZXVkb0VsZW1lbnQoKSkgeworICAgICAgICAgICAgUHNldWRv
RWxlbWVudCAqZWx0ID0gdG9Qc2V1ZG9FbGVtZW50KG5vZGUpOworICAgICAgICAgICAgbm9kZSA9
IGVsdC0+aG9zdEVsZW1lbnQoKTsKKyAgICAgICAgfQogCi0gICAgICAgIHAgPSBjcmVhdGVMZWdh
Y3lFZGl0aW5nUG9zaXRpb24ocmVuZGVyZXItPm5vZGUoKSwgb2Zmc2V0KTsKKyAgICAgICAgcCA9
IGNyZWF0ZUxlZ2FjeUVkaXRpbmdQb3NpdGlvbihub2RlLCBvZmZzZXQpOwogCiAgICAgICAgIGlm
ICgocC5pc0NhbmRpZGF0ZSgpICYmIHAuZG93bnN0cmVhbSgpICE9IGRvd25zdHJlYW1TdGFydCkg
fHwgcC5hdFN0YXJ0T2ZUcmVlKCkgfHwgcC5hdEVuZE9mVHJlZSgpKQogICAgICAgICAgICAgcmV0
dXJuIHA7CkBAIC00MjMsNyArNTEzLDcgQEAKIFZpc2libGVQb3NpdGlvbiBWaXNpYmxlUG9zaXRp
b246OnJpZ2h0KGJvb2wgc3RheUluRWRpdGFibGVDb250ZW50KSBjb25zdAogewogICAgIFBvc2l0
aW9uIHBvcyA9IHJpZ2h0VmlzdWFsbHlEaXN0aW5jdENhbmRpZGF0ZSgpOwotICAgIC8vIEZJWE1F
OiBXaHkgY2FuJ3Qgd2UgbW92ZSBsZWZ0IGZyb20gdGhlIGxhc3QgcG9zaXRpb24gaW4gYSB0cmVl
PworICAgIC8vIEZJWE1FOiBXaHkgY2FuJ3Qgd2UgbW92ZSByaWdodCBmcm9tIHRoZSBmaXJzdCBw
b3NpdGlvbiBpbiBhIHRyZWU/CiAgICAgaWYgKHBvcy5hdFN0YXJ0T2ZUcmVlKCkgfHwgcG9zLmF0
RW5kT2ZUcmVlKCkpCiAgICAgICAgIHJldHVybiBWaXNpYmxlUG9zaXRpb24oKTsKIApAQCAtNTI2
LDggKzYxNiw5IEBACiAgICAgY2FuZGlkYXRlID0gcG9zaXRpb24uZG93bnN0cmVhbSgpOwogICAg
IGlmIChjYW5kaWRhdGUuaXNDYW5kaWRhdGUoKSkKICAgICAgICAgcmV0dXJuIGNhbmRpZGF0ZTsK
KyAgICAKIAotICAgIC8vIFdoZW4gbmVpdGhlciB1cHN0cmVhbSBvciBkb3duc3RyZWFtIGdldHMg
dXMgdG8gYSBjYW5kaWRhdGUgKHVwc3RyZWFtL2Rvd25zdHJlYW0gd29uJ3QgbGVhdmUgCisgICAg
Ly8gV2hlbiBuZWl0aGVyIHVwc3RyZWFtIG9yIGRvd25zdHJlYW0gZ2V0cyB1cyB0byBhIGNhbmRp
ZGF0ZSAodXBzdHJlYW0vZG93bnN0cmVhbSB3b24ndCBsZWF2ZQogICAgIC8vIGJsb2NrcyBvciBl
bnRlciBuZXcgb25lcyksIHdlIHNlYXJjaCBmb3J3YXJkIGFuZCBiYWNrd2FyZCB1bnRpbCB3ZSBm
aW5kIG9uZS4KICAgICBQb3NpdGlvbiBuZXh0ID0gY2Fub25pY2FsaXplQ2FuZGlkYXRlKG5leHRD
YW5kaWRhdGUocG9zaXRpb24pKTsKICAgICBQb3NpdGlvbiBwcmV2ID0gY2Fub25pY2FsaXplQ2Fu
ZGlkYXRlKHByZXZpb3VzQ2FuZGlkYXRlKHBvc2l0aW9uKSk7CkluZGV4OiBTb3VyY2UvV2ViQ29y
ZS9lZGl0aW5nL1Zpc2libGVTZWxlY3Rpb24uY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJD
b3JlL2VkaXRpbmcvVmlzaWJsZVNlbGVjdGlvbi5jcHAJKHJldmlzaW9uIDE3MzkwNSkKKysrIFNv
dXJjZS9XZWJDb3JlL2VkaXRpbmcvVmlzaWJsZVNlbGVjdGlvbi5jcHAJKHdvcmtpbmcgY29weSkK
QEAgLTQyLDYgKzQyLDcgQEAKIAogVmlzaWJsZVNlbGVjdGlvbjo6VmlzaWJsZVNlbGVjdGlvbigp
CiAgICAgOiBtX2FmZmluaXR5KERPV05TVFJFQU0pCisgICAgLCBtX2NoYW5nZU9ic2VydmVyKDAp
CiAgICAgLCBtX3NlbGVjdGlvblR5cGUoTm9TZWxlY3Rpb24pCiAgICAgLCBtX2Jhc2VJc0ZpcnN0
KHRydWUpCiAgICAgLCBtX2lzRGlyZWN0aW9uYWwoZmFsc2UpCkBAIC01Miw2ICs1Myw3IEBACiAg
ICAgOiBtX2Jhc2UocG9zKQogICAgICwgbV9leHRlbnQocG9zKQogICAgICwgbV9hZmZpbml0eShh
ZmZpbml0eSkKKyAgICAsIG1fY2hhbmdlT2JzZXJ2ZXIoMCkKICAgICAsIG1faXNEaXJlY3Rpb25h
bChpc0RpcmVjdGlvbmFsKQogewogICAgIHZhbGlkYXRlKCk7CkBAIC02MSw2ICs2Myw3IEBACiAg
ICAgOiBtX2Jhc2UoYmFzZSkKICAgICAsIG1fZXh0ZW50KGV4dGVudCkKICAgICAsIG1fYWZmaW5p
dHkoYWZmaW5pdHkpCisgICAgLCBtX2NoYW5nZU9ic2VydmVyKDApCiAgICAgLCBtX2lzRGlyZWN0
aW9uYWwoaXNEaXJlY3Rpb25hbCkKIHsKICAgICB2YWxpZGF0ZSgpOwpAQCAtNzAsNiArNzMsNyBA
QAogICAgIDogbV9iYXNlKHBvcy5kZWVwRXF1aXZhbGVudCgpKQogICAgICwgbV9leHRlbnQocG9z
LmRlZXBFcXVpdmFsZW50KCkpCiAgICAgLCBtX2FmZmluaXR5KHBvcy5hZmZpbml0eSgpKQorICAg
ICwgbV9jaGFuZ2VPYnNlcnZlcigwKQogICAgICwgbV9pc0RpcmVjdGlvbmFsKGlzRGlyZWN0aW9u
YWwpCiB7CiAgICAgdmFsaWRhdGUoKTsKQEAgLTc5LDYgKzgzLDcgQEAKICAgICA6IG1fYmFzZShi
YXNlLmRlZXBFcXVpdmFsZW50KCkpCiAgICAgLCBtX2V4dGVudChleHRlbnQuZGVlcEVxdWl2YWxl
bnQoKSkKICAgICAsIG1fYWZmaW5pdHkoYmFzZS5hZmZpbml0eSgpKQorICAgICwgbV9jaGFuZ2VP
YnNlcnZlcigwKQogICAgICwgbV9pc0RpcmVjdGlvbmFsKGlzRGlyZWN0aW9uYWwpCiB7CiAgICAg
dmFsaWRhdGUoKTsKQEAgLTg4LDExICs5Myw0NiBAQAogICAgIDogbV9iYXNlKHJhbmdlLT5zdGFy
dFBvc2l0aW9uKCkpCiAgICAgLCBtX2V4dGVudChyYW5nZS0+ZW5kUG9zaXRpb24oKSkKICAgICAs
IG1fYWZmaW5pdHkoYWZmaW5pdHkpCisgICAgLCBtX2NoYW5nZU9ic2VydmVyKDApCiAgICAgLCBt
X2lzRGlyZWN0aW9uYWwoaXNEaXJlY3Rpb25hbCkKIHsKICAgICB2YWxpZGF0ZSgpOwogfQogCitW
aXNpYmxlU2VsZWN0aW9uOjpWaXNpYmxlU2VsZWN0aW9uKGNvbnN0IFZpc2libGVTZWxlY3Rpb24m
IG90aGVyKQorICAgIDogbV9iYXNlKG90aGVyLm1fYmFzZSkKKyAgICAsIG1fZXh0ZW50KG90aGVy
Lm1fZXh0ZW50KQorICAgICwgbV9zdGFydChvdGhlci5tX3N0YXJ0KQorICAgICwgbV9lbmQob3Ro
ZXIubV9lbmQpCisgICAgLCBtX2FmZmluaXR5KG90aGVyLm1fYWZmaW5pdHkpCisgICAgLCBtX2No
YW5nZU9ic2VydmVyKDApIC8vIE9ic2VydmVyIGlzIGFzc29jaWF0ZWQgd2l0aCBvbmx5IG9uZSBW
aXNpYmxlU2VsZWN0aW9uLCBzbyB0aGlzIHNob3VsZCBub3QgYmUgY29waWVkLgorICAgICwgbV9z
ZWxlY3Rpb25UeXBlKG90aGVyLm1fc2VsZWN0aW9uVHlwZSkKKyAgICAsIG1fYmFzZUlzRmlyc3Qo
b3RoZXIubV9iYXNlSXNGaXJzdCkKKyAgICAsIG1faXNEaXJlY3Rpb25hbChvdGhlci5tX2lzRGly
ZWN0aW9uYWwpCit7Cit9CisKK1Zpc2libGVTZWxlY3Rpb24mIFZpc2libGVTZWxlY3Rpb246Om9w
ZXJhdG9yPShjb25zdCBWaXNpYmxlU2VsZWN0aW9uJiBvdGhlcikKK3sKKyAgICBkaWRDaGFuZ2Uo
KTsKKworICAgIG1fYmFzZSA9IG90aGVyLm1fYmFzZTsKKyAgICBtX2V4dGVudCA9IG90aGVyLm1f
ZXh0ZW50OworICAgIG1fc3RhcnQgPSBvdGhlci5tX3N0YXJ0OworICAgIG1fZW5kID0gb3RoZXIu
bV9lbmQ7CisgICAgbV9hZmZpbml0eSA9IG90aGVyLm1fYWZmaW5pdHk7CisgICAgbV9jaGFuZ2VP
YnNlcnZlciA9IDA7CisgICAgbV9zZWxlY3Rpb25UeXBlID0gb3RoZXIubV9zZWxlY3Rpb25UeXBl
OworICAgIG1fYmFzZUlzRmlyc3QgPSBvdGhlci5tX2Jhc2VJc0ZpcnN0OworICAgIG1faXNEaXJl
Y3Rpb25hbCA9IG90aGVyLm1faXNEaXJlY3Rpb25hbDsKKyAgICByZXR1cm4gKnRoaXM7Cit9CisK
K1Zpc2libGVTZWxlY3Rpb246On5WaXNpYmxlU2VsZWN0aW9uKCkKK3sKKyAgICBkaWRDaGFuZ2Uo
KTsKK30KKwogVmlzaWJsZVNlbGVjdGlvbiBWaXNpYmxlU2VsZWN0aW9uOjpzZWxlY3Rpb25Gcm9t
Q29udGVudHNPZk5vZGUoTm9kZSogbm9kZSkKIHsKICAgICBBU1NFUlQoIWVkaXRpbmdJZ25vcmVz
Q29udGVudChub2RlKSk7CkBAIC0xMDEsMjYgKzE0MSwzOCBAQAogCiB2b2lkIFZpc2libGVTZWxl
Y3Rpb246OnNldEJhc2UoY29uc3QgUG9zaXRpb24mIHBvc2l0aW9uKQogeworICAgIFBvc2l0aW9u
IG9sZEJhc2UgPSBtX2Jhc2U7CiAgICAgbV9iYXNlID0gcG9zaXRpb247CiAgICAgdmFsaWRhdGUo
KTsKKyAgICBpZiAobV9iYXNlICE9IG9sZEJhc2UpCisgICAgICAgIGRpZENoYW5nZSgpOwogfQog
CiB2b2lkIFZpc2libGVTZWxlY3Rpb246OnNldEJhc2UoY29uc3QgVmlzaWJsZVBvc2l0aW9uJiB2
aXNpYmxlUG9zaXRpb24pCiB7CisgICAgUG9zaXRpb24gb2xkQmFzZSA9IG1fYmFzZTsKICAgICBt
X2Jhc2UgPSB2aXNpYmxlUG9zaXRpb24uZGVlcEVxdWl2YWxlbnQoKTsKICAgICB2YWxpZGF0ZSgp
OworICAgIGlmIChtX2Jhc2UgIT0gb2xkQmFzZSkKKyAgICAgICAgZGlkQ2hhbmdlKCk7CiB9CiAK
IHZvaWQgVmlzaWJsZVNlbGVjdGlvbjo6c2V0RXh0ZW50KGNvbnN0IFBvc2l0aW9uJiBwb3NpdGlv
bikKIHsKKyAgICBQb3NpdGlvbiBvbGRFeHRlbnQgPSBtX2V4dGVudDsKICAgICBtX2V4dGVudCA9
IHBvc2l0aW9uOwogICAgIHZhbGlkYXRlKCk7CisgICAgaWYgKG1fZXh0ZW50ICE9IG9sZEV4dGVu
dCkKKyAgICAgICAgZGlkQ2hhbmdlKCk7CiB9CiAKIHZvaWQgVmlzaWJsZVNlbGVjdGlvbjo6c2V0
RXh0ZW50KGNvbnN0IFZpc2libGVQb3NpdGlvbiYgdmlzaWJsZVBvc2l0aW9uKQogeworICAgIFBv
c2l0aW9uIG9sZEV4dGVudCA9IG1fZXh0ZW50OwogICAgIG1fZXh0ZW50ID0gdmlzaWJsZVBvc2l0
aW9uLmRlZXBFcXVpdmFsZW50KCk7CiAgICAgdmFsaWRhdGUoKTsKKyAgICBpZiAobV9leHRlbnQg
IT0gb2xkRXh0ZW50KQorICAgICAgICBkaWRDaGFuZ2UoKTsKIH0KIAogUGFzc1JlZlB0cjxSYW5n
ZT4gVmlzaWJsZVNlbGVjdGlvbjo6Zmlyc3RSYW5nZSgpIGNvbnN0CkBAIC0xOTMsNyArMjQ1LDE0
IEBACiAgICAgaWYgKGlzTm9uZSgpKQogICAgICAgICByZXR1cm4gZmFsc2U7CiAKKyAgICAvLyBG
SVhNRTogRG8gd2UgbmVlZCB0byBjaGVjayBhbGwgb2YgdGhlbT8KKyAgICBQb3NpdGlvbiBvbGRC
YXNlID0gbV9iYXNlOworICAgIFBvc2l0aW9uIG9sZEV4dGVudCA9IG1fZXh0ZW50OworICAgIFBv
c2l0aW9uIG9sZFN0YXJ0ID0gbV9zdGFydDsKKyAgICBQb3NpdGlvbiBvbGRFbmQgPSBtX2VuZDsK
ICAgICB2YWxpZGF0ZShncmFudWxhcml0eSk7CisgICAgaWYgKG1fYmFzZSAhPSBvbGRCYXNlIHx8
IG1fZXh0ZW50ICE9IG9sZEV4dGVudCB8fCBtX3N0YXJ0ICE9IG9sZFN0YXJ0IHx8IG1fZW5kICE9
IG9sZEVuZCkKKyAgICAgICAgZGlkQ2hhbmdlKCk7CiAgICAgcmV0dXJuIHRydWU7CiB9CiAKQEAg
LTIzNSwxMyArMjk0LDE3IEBACiAgICAgICAgIHJldHVybjsKIAogICAgIENoYXJhY3Rlckl0ZXJh
dG9yIGNoYXJJdCgqc2VhcmNoUmFuZ2UsIFRleHRJdGVyYXRvckVtaXRzQ2hhcmFjdGVyc0JldHdl
ZW5BbGxWaXNpYmxlUG9zaXRpb25zKTsKKyAgICBib29sIGNoYW5nZWQgPSBmYWxzZTsKIAogICAg
IGZvciAoOyAhY2hhckl0LmF0RW5kKCkgJiYgY2hhckl0LnRleHQoKS5sZW5ndGgoKTsgY2hhckl0
LmFkdmFuY2UoMSkpIHsKICAgICAgICAgVUNoYXIgYyA9IGNoYXJJdC50ZXh0KClbMF07CiAgICAg
ICAgIGlmICgoIWlzU3BhY2VPck5ld2xpbmUoYykgJiYgYyAhPSBub0JyZWFrU3BhY2UpIHx8IGMg
PT0gJ1xuJykKICAgICAgICAgICAgIGJyZWFrOwogICAgICAgICBtX2VuZCA9IGNoYXJJdC5yYW5n
ZSgpLT5lbmRQb3NpdGlvbigpOworICAgICAgICBjaGFuZ2VkID0gdHJ1ZTsKICAgICB9CisgICAg
aWYgKGNoYW5nZWQpCisgICAgICAgIGRpZENoYW5nZSgpOwogfQogCiB2b2lkIFZpc2libGVTZWxl
Y3Rpb246OnNldEJhc2VBbmRFeHRlbnRUb0RlZXBFcXVpdmFsZW50cygpCkBAIC00NjcsNiArNTMw
LDcgQEAKICAgICAgICAgbV9lbmQgPSBiYXNlOwogICAgIH0KICAgICBtX3NlbGVjdGlvblR5cGUg
PSBiYXNlID09IGV4dGVudCA/IENhcmV0U2VsZWN0aW9uIDogUmFuZ2VTZWxlY3Rpb247CisgICAg
ZGlkQ2hhbmdlKCk7CiB9CiAKIHN0YXRpYyBQb3NpdGlvbiBhZGp1c3RQb3NpdGlvbkZvckVuZChj
b25zdCBQb3NpdGlvbiYgY3VycmVudFBvc2l0aW9uLCBOb2RlKiBzdGFydENvbnRhaW5lck5vZGUp
CkBAIC02NjcsNiArNzMxLDMyIEBACiAgICAgcmV0dXJuIHRleHRDb250cm9sICYmIGlzSFRNTElu
cHV0RWxlbWVudCh0ZXh0Q29udHJvbCkgJiYgZG93bmNhc3Q8SFRNTElucHV0RWxlbWVudD4oKnRl
eHRDb250cm9sKS5pc1Bhc3N3b3JkRmllbGQoKTsKIH0KIAorVmlzaWJsZVNlbGVjdGlvbjo6Q2hh
bmdlT2JzZXJ2ZXI6OkNoYW5nZU9ic2VydmVyKCkKK3sKK30KKworVmlzaWJsZVNlbGVjdGlvbjo6
Q2hhbmdlT2JzZXJ2ZXI6On5DaGFuZ2VPYnNlcnZlcigpCit7Cit9CisKK3ZvaWQgVmlzaWJsZVNl
bGVjdGlvbjo6c2V0Q2hhbmdlT2JzZXJ2ZXIoQ2hhbmdlT2JzZXJ2ZXImIG9ic2VydmVyKQorewor
ICAgIEFTU0VSVCghbV9jaGFuZ2VPYnNlcnZlcik7CisgICAgbV9jaGFuZ2VPYnNlcnZlciA9ICZv
YnNlcnZlcjsKK30KKwordm9pZCBWaXNpYmxlU2VsZWN0aW9uOjpjbGVhckNoYW5nZU9ic2VydmVy
KCkKK3sKKyAgICBBU1NFUlQobV9jaGFuZ2VPYnNlcnZlcik7CisgICAgbV9jaGFuZ2VPYnNlcnZl
ciA9IDA7Cit9CisKK3ZvaWQgVmlzaWJsZVNlbGVjdGlvbjo6ZGlkQ2hhbmdlKCkKK3sKKyAgICBp
ZiAobV9jaGFuZ2VPYnNlcnZlcikKKyAgICAgICAgbV9jaGFuZ2VPYnNlcnZlci0+ZGlkQ2hhbmdl
VmlzaWJsZVNlbGVjdGlvbigpOworfQorCiAjaWZuZGVmIE5ERUJVRwogCiB2b2lkIFZpc2libGVT
ZWxlY3Rpb246OmRlYnVnUG9zaXRpb24oKSBjb25zdApJbmRleDogU291cmNlL1dlYkNvcmUvZWRp
dGluZy9WaXNpYmxlU2VsZWN0aW9uLmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvZWRp
dGluZy9WaXNpYmxlU2VsZWN0aW9uLmgJKHJldmlzaW9uIDE3MzkwNSkKKysrIFNvdXJjZS9XZWJD
b3JlL2VkaXRpbmcvVmlzaWJsZVNlbGVjdGlvbi5oCSh3b3JraW5nIGNvcHkpCkBAIC01MCw2ICs1
MCwxMSBAQAogICAgIFdFQkNPUkVfRVhQT1JUIFZpc2libGVTZWxlY3Rpb24oY29uc3QgVmlzaWJs
ZVBvc2l0aW9uJiwgYm9vbCBpc0RpcmVjdGlvbmFsID0gZmFsc2UpOwogICAgIFdFQkNPUkVfRVhQ
T1JUIFZpc2libGVTZWxlY3Rpb24oY29uc3QgVmlzaWJsZVBvc2l0aW9uJiwgY29uc3QgVmlzaWJs
ZVBvc2l0aW9uJiwgYm9vbCBpc0RpcmVjdGlvbmFsID0gZmFsc2UpOwogCisgICAgVmlzaWJsZVNl
bGVjdGlvbihjb25zdCBWaXNpYmxlU2VsZWN0aW9uJik7CisgICAgVmlzaWJsZVNlbGVjdGlvbiYg
b3BlcmF0b3I9KGNvbnN0IFZpc2libGVTZWxlY3Rpb24mKTsKKworICAgIFdFQkNPUkVfRVhQT1JU
IH5WaXNpYmxlU2VsZWN0aW9uKCk7CisKICAgICBXRUJDT1JFX0VYUE9SVCBzdGF0aWMgVmlzaWJs
ZVNlbGVjdGlvbiBzZWxlY3Rpb25Gcm9tQ29udGVudHNPZk5vZGUoTm9kZSopOwogCiAgICAgU2Vs
ZWN0aW9uVHlwZSBzZWxlY3Rpb25UeXBlKCkgY29uc3QgeyByZXR1cm4gbV9zZWxlY3Rpb25UeXBl
OyB9CkBAIC0xMDcsMTQgKzExMiwzMCBAQAogCiAgICAgV0VCQ09SRV9FWFBPUlQgYm9vbCBpc0lu
UGFzc3dvcmRGaWVsZCgpIGNvbnN0OwogCisgICAgdm9pZCBzZXRXaXRob3V0VmFsaWRhdGlvbihj
b25zdCBQb3NpdGlvbiYsIGNvbnN0IFBvc2l0aW9uJik7CisKKyAgICAvLyBMaXN0ZW5lciBvZiBW
aXNpYmxlU2VsZWN0aW9uIG1vZGlmaWNhdGlvbi4gZGlkQ2hhbmdlVmlzaWJsZVNlbGVjdGlvbigp
IHdpbGwgYmUgaW52b2tlZCB3aGVuIGJhc2UsIGV4dGVudCwgc3RhcnQKKyAgICAvLyBvciBlbmQg
aXMgbW92ZWQgdG8gYSBkaWZmZXJlbnQgcG9zaXRpb24uCisgICAgLy8KKyAgICAvLyBPYmplY3Rz
IGltcGxlbWVudGluZyB8Q2hhbmdlT2JzZXJ2ZXJ8IGludGVyZmFjZSBtdXN0IG91dGxpdmUgdGhl
IFZpc2libGVTZWxlY3Rpb24gb2JqZWN0LgorICAgIGNsYXNzIENoYW5nZU9ic2VydmVyIHsKKyAg
ICAgICAgV1RGX01BS0VfTk9OQ09QWUFCTEUoQ2hhbmdlT2JzZXJ2ZXIpOworICAgIHB1YmxpYzoK
KyAgICAgICAgQ2hhbmdlT2JzZXJ2ZXIoKTsKKyAgICAgICAgdmlydHVhbCB+Q2hhbmdlT2JzZXJ2
ZXIoKTsKKyAgICAgICAgdmlydHVhbCB2b2lkIGRpZENoYW5nZVZpc2libGVTZWxlY3Rpb24oKSA9
IDA7CisgICAgfTsKKworICAgIHZvaWQgc2V0Q2hhbmdlT2JzZXJ2ZXIoQ2hhbmdlT2JzZXJ2ZXIm
KTsKKyAgICB2b2lkIGNsZWFyQ2hhbmdlT2JzZXJ2ZXIoKTsKKyAgICB2b2lkIGRpZENoYW5nZSgp
OyAvLyBGaXJlIHRoZSBjaGFuZ2Ugb2JzZXJ2ZXIsIGlmIGFueS4KKwogI2lmbmRlZiBOREVCVUcK
ICAgICB2b2lkIGRlYnVnUG9zaXRpb24oKSBjb25zdDsKICAgICB2b2lkIGZvcm1hdEZvckRlYnVn
Z2VyKGNoYXIqIGJ1ZmZlciwgdW5zaWduZWQgbGVuZ3RoKSBjb25zdDsKICAgICB2b2lkIHNob3dU
cmVlRm9yVGhpcygpIGNvbnN0OwogI2VuZGlmCiAKLSAgICB2b2lkIHNldFdpdGhvdXRWYWxpZGF0
aW9uKGNvbnN0IFBvc2l0aW9uJiwgY29uc3QgUG9zaXRpb24mKTsKLQogcHJpdmF0ZToKICAgICB2
b2lkIHZhbGlkYXRlKFRleHRHcmFudWxhcml0eSA9IENoYXJhY3RlckdyYW51bGFyaXR5KTsKIApA
QCAtMTM3LDEwICsxNTgsMTMgQEAKIAogICAgIEVBZmZpbml0eSBtX2FmZmluaXR5OyAgICAgICAg
ICAgLy8gdGhlIHVwc3RyZWFtL2Rvd25zdHJlYW0gYWZmaW5pdHkgb2YgdGhlIGNhcmV0CiAKKyAg
ICBDaGFuZ2VPYnNlcnZlciogbV9jaGFuZ2VPYnNlcnZlcjsKKwogICAgIC8vIHRoZXNlIGFyZSBj
YWNoZWQsIGNhbiBiZSByZWNhbGN1bGF0ZWQgYnkgdmFsaWRhdGUoKQogICAgIFNlbGVjdGlvblR5
cGUgbV9zZWxlY3Rpb25UeXBlOyAvLyBOb25lLCBDYXJldCwgUmFuZ2UKICAgICBib29sIG1fYmFz
ZUlzRmlyc3QgOiAxOyAvLyBUcnVlIGlmIGJhc2UgaXMgYmVmb3JlIHRoZSBleHRlbnQKICAgICBi
b29sIG1faXNEaXJlY3Rpb25hbCA6IDE7IC8vIE5vbi1kaXJlY3Rpb25hbCBpZ25vcmVzIG1fYmFz
ZUlzRmlyc3QgYW5kIHNlbGVjdGlvbiBhbHdheXMgZXh0ZW5kcyBvbiBzaGlmdCArIGFycm93IGtl
eS4KKwogfTsKIAogaW5saW5lIGJvb2wgb3BlcmF0b3I9PShjb25zdCBWaXNpYmxlU2VsZWN0aW9u
JiBhLCBjb25zdCBWaXNpYmxlU2VsZWN0aW9uJiBiKQpJbmRleDogU291cmNlL1dlYkNvcmUvZWRp
dGluZy9WaXNpYmxlVW5pdHMuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL2VkaXRp
bmcvVmlzaWJsZVVuaXRzLmNwcAkocmV2aXNpb24gMTczOTA1KQorKysgU291cmNlL1dlYkNvcmUv
ZWRpdGluZy9WaXNpYmxlVW5pdHMuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC01NTIsNiArNTUyLDkg
QEAKIHsKICAgICBQb3NpdGlvbiBwb3MgPSBjLmRlZXBFcXVpdmFsZW50KCk7CiAgICAgTm9kZSog
Ym91bmRhcnkgPSBwb3MucGFyZW50RWRpdGluZ0JvdW5kYXJ5KCk7CisgICAgCisgICAgLyogSWYg
dGhlcmUncyBub3QgYW4gZWRpdGFibGUgZW5jbG9zaW5nIGVsZW1lbnQsIG9yIGlmIHRoZSBlbGVt
ZW50IGlzIGluIGEgZGV0YWN0aGVkCisgICAgICAgZnJhZ21lbnQsIGJhaWwuICovCiAgICAgaWYg
KCFib3VuZGFyeSkKICAgICAgICAgcmV0dXJuIFZpc2libGVQb3NpdGlvbigpOwogCkluZGV4OiBT
b3VyY2UvV2ViQ29yZS9lZGl0aW5nL2h0bWxlZGl0aW5nLmNwcAo9PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3Vy
Y2UvV2ViQ29yZS9lZGl0aW5nL2h0bWxlZGl0aW5nLmNwcAkocmV2aXNpb24gMTczOTA1KQorKysg
U291cmNlL1dlYkNvcmUvZWRpdGluZy9odG1sZWRpdGluZy5jcHAJKHdvcmtpbmcgY29weSkKQEAg
LTM0NCw2ICszNDQsMTMgQEAKIAogICAgIGlmIChub2RlLT5oYXNDaGlsZE5vZGVzKCkpCiAgICAg
ICAgIHJldHVybiBub2RlLT5jb3VudENoaWxkTm9kZXMoKTsKKyAgICAKKyAgICBpZiAobm9kZS0+
aXNFbGVtZW50Tm9kZSgpKSB7CisgICAgICAgIGNvbnN0IEVsZW1lbnQgKmVsdCA9IHRvRWxlbWVu
dChub2RlKTsKKyAgICAgICAgaWYgKGVsdC0+YmVmb3JlUHNldWRvRWxlbWVudCgpIHx8IGVsdC0+
YWZ0ZXJQc2V1ZG9FbGVtZW50KCkpIHsKKyAgICAgICAgICAgIHJldHVybiAxOworICAgICAgICB9
CisgICAgfQogCiAgICAgLy8gTk9URTogVGhpcyBzaG91bGQgcHJlZW1wdCB0aGUgY291bnRDaGls
ZE5vZGVzKCkgZm9yLCBlLmcuLCBzZWxlY3Qgbm9kZXMgKHdoYXQgZG9lcyB0aGlzIG1lYW4pPwog
ICAgIGlmIChlZGl0aW5nSWdub3Jlc0NvbnRlbnQobm9kZSkpCkluZGV4OiBTb3VyY2UvV2ViQ29y
ZS9wYWdlL0RPTVNlbGVjdGlvbi5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvcGFn
ZS9ET01TZWxlY3Rpb24uY3BwCShyZXZpc2lvbiAxNzM5MDUpCisrKyBTb3VyY2UvV2ViQ29yZS9w
YWdlL0RPTVNlbGVjdGlvbi5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTE5Miw2ICsxOTIsNyBAQAog
CiB2b2lkIERPTVNlbGVjdGlvbjo6Y29sbGFwc2UoTm9kZSogbm9kZSwgaW50IG9mZnNldCwgRXhj
ZXB0aW9uQ29kZSYgZWMpCiB7CisgICAgQVNTRVJUKG5vZGUpOwogICAgIGlmICghbV9mcmFtZSkK
ICAgICAgICAgcmV0dXJuOwogCkBAIC0yMDMsMTAgKzIwNCwyMCBAQAogICAgIGlmICghaXNWYWxp
ZEZvclBvc2l0aW9uKG5vZGUpKQogICAgICAgICByZXR1cm47CiAKLSAgICAvLyBGSVhNRTogRWxp
bWluYXRlIGxlZ2FjeSBlZGl0aW5nIHBvc2l0aW9ucwotICAgIG1fZnJhbWUtPnNlbGVjdGlvbigp
Lm1vdmVUbyhjcmVhdGVMZWdhY3lFZGl0aW5nUG9zaXRpb24obm9kZSwgb2Zmc2V0KSwgRE9XTlNU
UkVBTSk7CisgICAgaWYgKCFub2RlKQorICAgICAgICByZXR1cm47CisKKyAgICAvKiBSZWZQdHJX
aWxsQmVSYXdQdHIgKi8gUmVmUHRyPFJhbmdlPiByYW5nZSA9IFJhbmdlOjpjcmVhdGUobm9kZS0+
ZG9jdW1lbnQoKSk7CisgICAgcmFuZ2UtPnNldFN0YXJ0KG5vZGUsIG9mZnNldCk7IC8vICwgZXhj
ZXB0aW9uU3RhdGUpOworICAgIHJhbmdlLT5zZXRFbmQobm9kZSwgb2Zmc2V0KTsgLy8gLCBleGNl
cHRpb25TdGF0ZSk7CisgICAgbV9mcmFtZS0+c2VsZWN0aW9uKCkuc2V0U2VsZWN0ZWRSYW5nZShy
YW5nZS5nZXQoKSwgRE9XTlNUUkVBTSwgZmFsc2UsIG1fZnJhbWUtPnNlbGVjdGlvbigpLmlzRGly
ZWN0aW9uYWwoKSk7CiB9CiAKK3ZvaWQgRE9NU2VsZWN0aW9uOjpjb2xsYXBzZShOb2RlKiBub2Rl
LCBFeGNlcHRpb25Db2RlJiBleGNlcHRpb25TdGF0ZSkKK3sKKyAgICBjb2xsYXBzZShub2RlLCAw
LCBleGNlcHRpb25TdGF0ZSk7Cit9CisKIHZvaWQgRE9NU2VsZWN0aW9uOjpjb2xsYXBzZVRvRW5k
KEV4Y2VwdGlvbkNvZGUmIGVjKQogewogICAgIGlmICghbV9mcmFtZSkKQEAgLTM2OCw3ICszNzks
NyBAQAogICAgICAgICByZXR1cm4gUmFuZ2U6OmNyZWF0ZShzaGFkb3dBbmNlc3Rvci0+ZG9jdW1l
bnQoKSwgY29udGFpbmVyLCBvZmZzZXQsIGNvbnRhaW5lciwgb2Zmc2V0KTsKICAgICB9CiAKLSAg
ICByZXR1cm4gbV9mcmFtZS0+c2VsZWN0aW9uKCkuc2VsZWN0aW9uKCkuZmlyc3RSYW5nZSgpOwor
ICAgIHJldHVybiBtX2ZyYW1lLT5zZWxlY3Rpb24oKS5maXJzdFJhbmdlKCk7CiB9CiAKIHZvaWQg
RE9NU2VsZWN0aW9uOjpyZW1vdmVBbGxSYW5nZXMoKQpAQCAtMzc4LDQ1ICszODksNjMgQEAKICAg
ICBtX2ZyYW1lLT5zZWxlY3Rpb24oKS5jbGVhcigpOwogfQogCi12b2lkIERPTVNlbGVjdGlvbjo6
YWRkUmFuZ2UoUmFuZ2UqIHIpCit2b2lkIERPTVNlbGVjdGlvbjo6YWRkUmFuZ2UoUmFuZ2UqIG5l
d1JhbmdlKQogewogICAgIGlmICghbV9mcmFtZSkKICAgICAgICAgcmV0dXJuOwotICAgIGlmICgh
cikKKyAgICAvLyBGSVhNRTogU2hvdWxkIHdlIHRocm93IERPTUV4Y2VwdGlvbiBmb3IgZXJyb3Ig
Y2FzZXMgYmVsb3c/CisgICAgaWYgKCFuZXdSYW5nZSkgeworICAgICAgICBhZGRDb25zb2xlRXJy
b3IoIlRoZSBnaXZlbiByYW5nZSBpcyBudWxsLiIpOwogICAgICAgICByZXR1cm47CisgICAgfQor
ICAgIGlmICghbmV3UmFuZ2UtPnN0YXJ0Q29udGFpbmVyKCkpIHsKKyAgICAgICAgYWRkQ29uc29s
ZUVycm9yKCJUaGUgZ2l2ZW4gcmFuZ2UgaGFzIG5vIGNvbnRhaW5lci4gUGVyaGFwcyAnZGV0YWNo
KCknIGhhcyBiZWVuIGludm9rZWQgb24gaXQ/Iik7CisgICAgICAgIHJldHVybjsKKyAgICB9CiAK
KwogICAgIEZyYW1lU2VsZWN0aW9uJiBzZWxlY3Rpb24gPSBtX2ZyYW1lLT5zZWxlY3Rpb24oKTsK
IAogICAgIGlmIChzZWxlY3Rpb24uaXNOb25lKCkpIHsKLSAgICAgICAgc2VsZWN0aW9uLm1vdmVU
byhyKTsKKyAgICAgICAgLy8gc2VsZWN0aW9uLm1vdmVUbyhyKTsKKyAgICAgICAgc2VsZWN0aW9u
LnNldFNlbGVjdGVkUmFuZ2UobmV3UmFuZ2UsIFZQX0RFRkFVTFRfQUZGSU5JVFksIGZhbHNlLCBz
ZWxlY3Rpb24uaXNEaXJlY3Rpb25hbCgpKTsKICAgICAgICAgcmV0dXJuOwogICAgIH0KIAotICAg
IFJlZlB0cjxSYW5nZT4gcmFuZ2UgPSBzZWxlY3Rpb24uc2VsZWN0aW9uKCkudG9Ob3JtYWxpemVk
UmFuZ2UoKTsKLSAgICBpZiAoci0+Y29tcGFyZUJvdW5kYXJ5UG9pbnRzKFJhbmdlOjpTVEFSVF9U
T19TVEFSVCwgcmFuZ2UuZ2V0KCksIElHTk9SRV9FWENFUFRJT04pID09IC0xKSB7Ci0gICAgICAg
IC8vIFdlIGRvbid0IHN1cHBvcnQgZGlzY29udGlndW91cyBzZWxlY3Rpb24uIFdlIGRvbid0IGRv
IGFueXRoaW5nIGlmIHIgYW5kIHJhbmdlIGRvbid0IGludGVyc2VjdC4KLSAgICAgICAgaWYgKHIt
PmNvbXBhcmVCb3VuZGFyeVBvaW50cyhSYW5nZTo6U1RBUlRfVE9fRU5ELCByYW5nZS5nZXQoKSwg
SUdOT1JFX0VYQ0VQVElPTikgPiAtMSkgewotICAgICAgICAgICAgaWYgKHItPmNvbXBhcmVCb3Vu
ZGFyeVBvaW50cyhSYW5nZTo6RU5EX1RPX0VORCwgcmFuZ2UuZ2V0KCksIElHTk9SRV9FWENFUFRJ
T04pID09IC0xKSB7Ci0gICAgICAgICAgICAgICAgLy8gVGhlIG9yaWdpbmFsIHJhbmdlIGFuZCBy
IGludGVyc2VjdC4KLSAgICAgICAgICAgICAgICBzZWxlY3Rpb24ubW92ZVRvKHItPnN0YXJ0UG9z
aXRpb24oKSwgcmFuZ2UtPmVuZFBvc2l0aW9uKCksIERPV05TVFJFQU0pOwotICAgICAgICAgICAg
fSBlbHNlIHsKLSAgICAgICAgICAgICAgICAvLyByIGNvbnRhaW5zIHRoZSBvcmlnaW5hbCByYW5n
ZS4KLSAgICAgICAgICAgICAgICBzZWxlY3Rpb24ubW92ZVRvKHIpOwotICAgICAgICAgICAgfQot
ICAgICAgICB9Ci0gICAgfSBlbHNlIHsKLSAgICAgICAgLy8gV2UgZG9uJ3Qgc3VwcG9ydCBkaXNj
b250aWd1b3VzIHNlbGVjdGlvbi4gV2UgZG9uJ3QgZG8gYW55dGhpbmcgaWYgciBhbmQgcmFuZ2Ug
ZG9uJ3QgaW50ZXJzZWN0LgotICAgICAgICBFeGNlcHRpb25Db2RlIGVjID0gMDsKLSAgICAgICAg
aWYgKHItPmNvbXBhcmVCb3VuZGFyeVBvaW50cyhSYW5nZTo6RU5EX1RPX1NUQVJULCByYW5nZS5n
ZXQoKSwgZWMpIDwgMSAmJiAhZWMpIHsKLSAgICAgICAgICAgIGlmIChyLT5jb21wYXJlQm91bmRh
cnlQb2ludHMoUmFuZ2U6OkVORF9UT19FTkQsIHJhbmdlLmdldCgpLCBJR05PUkVfRVhDRVBUSU9O
KSA9PSAtMSkgewotICAgICAgICAgICAgICAgIC8vIFRoZSBvcmlnaW5hbCByYW5nZSBjb250YWlu
cyByLgotICAgICAgICAgICAgICAgIHNlbGVjdGlvbi5tb3ZlVG8ocmFuZ2UuZ2V0KCkpOwotICAg
ICAgICAgICAgfSBlbHNlIHsKLSAgICAgICAgICAgICAgICAvLyBUaGUgb3JpZ2luYWwgcmFuZ2Ug
YW5kIHIgaW50ZXJzZWN0LgotICAgICAgICAgICAgICAgIHNlbGVjdGlvbi5tb3ZlVG8ocmFuZ2Ut
PnN0YXJ0UG9zaXRpb24oKSwgci0+ZW5kUG9zaXRpb24oKSwgRE9XTlNUUkVBTSk7Ci0gICAgICAg
ICAgICB9Ci0gICAgICAgIH0KKyAgICBSZWZQdHI8UmFuZ2U+IG9yaWdpbmFsUmFuZ2UgPSBzZWxl
Y3Rpb24uZmlyc3RSYW5nZSgpOworCisgICAgaWYgKCZvcmlnaW5hbFJhbmdlLT5zdGFydENvbnRh
aW5lcigpLT5kb2N1bWVudCgpICE9ICZuZXdSYW5nZS0+c3RhcnRDb250YWluZXIoKS0+ZG9jdW1l
bnQoKSkgeworICAgICAgICBhZGRDb25zb2xlRXJyb3IoIlRoZSBnaXZlbiByYW5nZSBkb2VzIG5v
dCBiZWxvbmcgdG8gdGhlIGN1cnJlbnQgc2VsZWN0aW9uJ3MgZG9jdW1lbnQuIik7CisgICAgICAg
IHJldHVybjsKICAgICB9CisgICAgaWYgKCZvcmlnaW5hbFJhbmdlLT5zdGFydENvbnRhaW5lcigp
LT50cmVlU2NvcGUoKSAhPSAmbmV3UmFuZ2UtPnN0YXJ0Q29udGFpbmVyKCktPnRyZWVTY29wZSgp
KSB7CisgICAgICAgIGFkZENvbnNvbGVFcnJvcigiVGhlIGdpdmVuIHJhbmdlIGFuZCB0aGUgY3Vy
cmVudCBzZWxlY3Rpb24gYmVsb25nIHRvIHR3byBkaWZmZXJlbnQgZG9jdW1lbnQgZnJhZ21lbnRz
LiIpOworICAgICAgICByZXR1cm47CisgICAgfQorCisgICAgaWYgKG9yaWdpbmFsUmFuZ2UtPmNv
bXBhcmVCb3VuZGFyeVBvaW50cyhSYW5nZTo6U1RBUlRfVE9fRU5ELCBuZXdSYW5nZSwgQVNTRVJU
X05PX0VYQ0VQVElPTikgPCAwCisgICAgICAgIHx8IG5ld1JhbmdlLT5jb21wYXJlQm91bmRhcnlQ
b2ludHMoUmFuZ2U6OlNUQVJUX1RPX0VORCwgb3JpZ2luYWxSYW5nZS5nZXQoKSwgQVNTRVJUX05P
X0VYQ0VQVElPTikgPCAwKSB7CisgICAgICAgIGFkZENvbnNvbGVFcnJvcigiRGlzY29udGlndW91
cyBzZWxlY3Rpb24gaXMgbm90IHN1cHBvcnRlZC4iKTsKKyAgICAgICAgcmV0dXJuOworICAgIH0K
KworICAgIGlmIChvcmlnaW5hbFJhbmdlLT5jb21wYXJlQm91bmRhcnlQb2ludHMoUmFuZ2U6OlNU
QVJUX1RPX0VORCwgbmV3UmFuZ2UsIEFTU0VSVF9OT19FWENFUFRJT04pIDwgMAorICAgICAgICB8
fCBuZXdSYW5nZS0+Y29tcGFyZUJvdW5kYXJ5UG9pbnRzKFJhbmdlOjpTVEFSVF9UT19FTkQsIG9y
aWdpbmFsUmFuZ2UuZ2V0KCksIEFTU0VSVF9OT19FWENFUFRJT04pIDwgMCkgeworICAgICAgICBh
ZGRDb25zb2xlRXJyb3IoIkRpc2NvbnRpZ3VvdXMgc2VsZWN0aW9uIGlzIG5vdCBzdXBwb3J0ZWQu
Iik7CisgICAgICAgIHJldHVybjsKKyAgICB9CisKKyAgICAvLyBGSVhNRTogIk1lcmdlIHRoZSBy
YW5nZXMgaWYgdGhleSBpbnRlcnNlY3QiIGlzIEJsaW5rLXNwZWNpZmljIGJlaGF2aW9yOyBvdGhl
ciBicm93c2VycyBzdXBwb3J0aW5nIGRpc2NvbnRpZ3VvdXMKKyAgICAvLyBzZWxlY3Rpb24gKG9i
dmlvdXNseSkga2VlcCBlYWNoIFJhbmdlIGFkZGVkIGFuZCByZXR1cm4gaXQgaW4gZ2V0UmFuZ2VB
dCgpLiBCdXQgaXQncyB1bmNsZWFyIGlmIHdlIGNhbiByZWFsbHkKKyAgICAvLyBkbyB0aGUgc2Ft
ZSwgc2luY2Ugd2UgZG9uJ3Qgc3VwcG9ydCBkaXNjb250aWd1b3VzIHNlbGVjdGlvbi4gRnVydGhl
ciBkaXNjdXNzaW9ucyBhdAorICAgIC8vIDxodHRwczovL2NvZGUuZ29vZ2xlLmNvbS9wL2Nocm9t
aXVtL2lzc3Vlcy9kZXRhaWw/aWQ9MzUzMDY5Pi4KKworICAgIFJhbmdlKiBzdGFydCA9IG9yaWdp
bmFsUmFuZ2UtPmNvbXBhcmVCb3VuZGFyeVBvaW50cyhSYW5nZTo6U1RBUlRfVE9fU1RBUlQsIG5l
d1JhbmdlLCBBU1NFUlRfTk9fRVhDRVBUSU9OKSA8IDAgPyBvcmlnaW5hbFJhbmdlLmdldCgpIDog
bmV3UmFuZ2U7CisgICAgUmFuZ2UqIGVuZCA9IG9yaWdpbmFsUmFuZ2UtPmNvbXBhcmVCb3VuZGFy
eVBvaW50cyhSYW5nZTo6RU5EX1RPX0VORCwgbmV3UmFuZ2UsIEFTU0VSVF9OT19FWENFUFRJT04p
IDwgMCA/IG5ld1JhbmdlIDogb3JpZ2luYWxSYW5nZS5nZXQoKTsKKyAgICBSZWZQdHI8UmFuZ2U+
IG1lcmdlZCA9IFJhbmdlOjpjcmVhdGUob3JpZ2luYWxSYW5nZS0+c3RhcnRDb250YWluZXIoKS0+
ZG9jdW1lbnQoKSwgc3RhcnQtPnN0YXJ0Q29udGFpbmVyKCksIHN0YXJ0LT5zdGFydE9mZnNldCgp
LCBlbmQtPmVuZENvbnRhaW5lcigpLCBlbmQtPmVuZE9mZnNldCgpKTsKKyAgICBFQWZmaW5pdHkg
YWZmaW5pdHkgPSBzZWxlY3Rpb24uc2VsZWN0aW9uKCkuYWZmaW5pdHkoKTsKKyAgICBzZWxlY3Rp
b24uc2V0U2VsZWN0ZWRSYW5nZShtZXJnZWQuZ2V0KCksIGFmZmluaXR5LCBmYWxzZSwgc2VsZWN0
aW9uLmlzRGlyZWN0aW9uYWwoKSk7CisKIH0KIAogdm9pZCBET01TZWxlY3Rpb246OmRlbGV0ZUZy
b21Eb2N1bWVudCgpCkBAIC01MzQsNCArNTYzLDEwIEBACiAgICAgcmV0dXJuICZub2RlLT5kb2N1
bWVudCgpID09IG1fZnJhbWUtPmRvY3VtZW50KCk7CiB9CiAKK3ZvaWQgRE9NU2VsZWN0aW9uOjph
ZGRDb25zb2xlRXJyb3IoY29uc3QgU3RyaW5nJiBtZXNzYWdlKQoreworICAgIEFTU0VSVChtX2Zy
YW1lKTsKKyAgICBtX2ZyYW1lLT5kb2N1bWVudCgpLT5hZGRDb25zb2xlTWVzc2FnZShNZXNzYWdl
U291cmNlOjpKUywgTWVzc2FnZUxldmVsOjpFcnJvciwgbWVzc2FnZSk7Cit9CisKIH0gLy8gbmFt
ZXNwYWNlIFdlYkNvcmUKSW5kZXg6IFNvdXJjZS9XZWJDb3JlL3BhZ2UvRE9NU2VsZWN0aW9uLmgK
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvcGFnZS9ET01TZWxlY3Rpb24uaAkocmV2aXNp
b24gMTczOTA1KQorKysgU291cmNlL1dlYkNvcmUvcGFnZS9ET01TZWxlY3Rpb24uaAkod29ya2lu
ZyBjb3B5KQpAQCAtNzcsNiArNzcsNyBAQAogICAgICAgICBib29sIGlzQ29sbGFwc2VkKCkgY29u
c3Q7CiAgICAgICAgIGludCByYW5nZUNvdW50KCkgY29uc3Q7CiAgICAgICAgIHZvaWQgY29sbGFw
c2UoTm9kZSosIGludCBvZmZzZXQsIEV4Y2VwdGlvbkNvZGUmKTsKKyAgICAgICAgdm9pZCBjb2xs
YXBzZShOb2RlKiwgRXhjZXB0aW9uQ29kZSYpOwogICAgICAgICB2b2lkIGNvbGxhcHNlVG9FbmQo
RXhjZXB0aW9uQ29kZSYpOwogICAgICAgICB2b2lkIGNvbGxhcHNlVG9TdGFydChFeGNlcHRpb25D
b2RlJik7CiAgICAgICAgIHZvaWQgZXh0ZW5kKE5vZGUqLCBpbnQgb2Zmc2V0LCBFeGNlcHRpb25D
b2RlJik7CkBAIC05Myw4ICs5NCw2IEBACiAgICAgICAgIHZvaWQgZW1wdHkoKTsKIAogICAgIHBy
aXZhdGU6Ci0gICAgICAgIGNvbnN0IFRyZWVTY29wZSogbV90cmVlU2NvcGU7Ci0KICAgICAgICAg
ZXhwbGljaXQgRE9NU2VsZWN0aW9uKGNvbnN0IFRyZWVTY29wZSopOwogCiAgICAgICAgIC8vIENv
bnZlbmllbmNlIG1ldGhvZCBmb3IgYWNjZXNzb3JzLCBkb2VzIG5vdCBOVUxMIGNoZWNrIG1fZnJh
bWUuCkBAIC0xMDQsNiArMTAzLDEwIEBACiAgICAgICAgIGludCBzaGFkb3dBZGp1c3RlZE9mZnNl
dChjb25zdCBQb3NpdGlvbiYpIGNvbnN0OwogCiAgICAgICAgIGJvb2wgaXNWYWxpZEZvclBvc2l0
aW9uKE5vZGUqKSBjb25zdDsKKworICAgICAgICB2b2lkIGFkZENvbnNvbGVFcnJvcihjb25zdCBT
dHJpbmcmIG1lc3NhZ2UpOworCisgICAgICAgIGNvbnN0IFRyZWVTY29wZSogbV90cmVlU2NvcGU7
CiAgICAgfTsKIAogfSAvLyBuYW1lc3BhY2UgV2ViQ29yZQpJbmRleDogU291cmNlL1dlYkNvcmUv
cGFnZS9ET01TZWxlY3Rpb24uaWRsCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL3BhZ2Uv
RE9NU2VsZWN0aW9uLmlkbAkocmV2aXNpb24gMTczOTA1KQorKysgU291cmNlL1dlYkNvcmUvcGFn
ZS9ET01TZWxlY3Rpb24uaWRsCSh3b3JraW5nIGNvcHkpCkBAIC00MSw4ICs0MSwxMCBAQAogICAg
IHJlYWRvbmx5IGF0dHJpYnV0ZSBib29sZWFuIGlzQ29sbGFwc2VkOwogICAgIHJlYWRvbmx5IGF0
dHJpYnV0ZSBsb25nIHJhbmdlQ291bnQ7CiAKLSAgICBbUmFpc2VzRXhjZXB0aW9uXSB2b2lkIGNv
bGxhcHNlKFtEZWZhdWx0PVVuZGVmaW5lZF0gb3B0aW9uYWwgTm9kZSBub2RlLCAKLSAgICAgICAg
ICAgICAgICAgIFtEZWZhdWx0PVVuZGVmaW5lZF0gb3B0aW9uYWwgbG9uZyBpbmRleCk7CisgICAg
Ly8gW1JhaXNlc0V4Y2VwdGlvbl0gdm9pZCBjb2xsYXBzZShbRGVmYXVsdD1VbmRlZmluZWRdIG9w
dGlvbmFsIE5vZGUgbm9kZSwgCisgICAgICAgICAgICAgICAgICAvLyBbRGVmYXVsdD1VbmRlZmlu
ZWRdIG9wdGlvbmFsIGxvbmcgaW5kZXgpOworICAgIFtSYWlzZXNFeGNlcHRpb24sIFN0cmljdFR5
cGVDaGVja2luZ10gdm9pZCBjb2xsYXBzZShOb2RlIG5vZGUsCisgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG9wdGlvbmFsIGxvbmcgb2Zmc2V0
KTsKICAgICBbUmFpc2VzRXhjZXB0aW9uXSB2b2lkIGNvbGxhcHNlVG9FbmQoKTsKICAgICBbUmFp
c2VzRXhjZXB0aW9uXSB2b2lkIGNvbGxhcHNlVG9TdGFydCgpOwogCkBAIC03OSw2ICs4MSw5IEBA
CiAgICAgICAgICAgICAgICAgICAgICAgICAgIFtEZWZhdWx0PVVuZGVmaW5lZF0gb3B0aW9uYWwg
bG9uZyBiYXNlT2Zmc2V0LCAKICAgICAgICAgICAgICAgICAgICAgICAgICAgW0RlZmF1bHQ9VW5k
ZWZpbmVkXSBvcHRpb25hbCBOb2RlIGV4dGVudE5vZGUsIAogICAgICAgICAgICAgICAgICAgICAg
ICAgICBbRGVmYXVsdD1VbmRlZmluZWRdIG9wdGlvbmFsIGxvbmcgZXh0ZW50T2Zmc2V0KTsKKyAg
ICBbSW1wbGVtZW50ZWRBcz1jb2xsYXBzZSwgLyogTWVhc3VyZUFzPVNlbGVjdGlvblNldFBvc2l0
aW9uLCAqLyBSYWlzZXNFeGNlcHRpb24sIFN0cmljdFR5cGVDaGVja2luZ10gdm9pZCBzZXRQb3Np
dGlvbihOb2RlIG5vZGUsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgb3B0aW9uYWwgbG9uZyBvZmZzZXQpOworCiAgICAgW1JhaXNlc0V4
Y2VwdGlvbl0gdm9pZCBzZXRQb3NpdGlvbihbRGVmYXVsdD1VbmRlZmluZWRdIG9wdGlvbmFsIE5v
ZGUgbm9kZSwgCiAgICAgICAgICAgICAgICAgICAgICBbRGVmYXVsdD1VbmRlZmluZWRdIG9wdGlv
bmFsIGxvbmcgb2Zmc2V0KTsKIApJbmRleDogU291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL0lubGlu
ZUZsb3dCb3guY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9Jbmxp
bmVGbG93Qm94LmNwcAkocmV2aXNpb24gMTczOTA1KQorKysgU291cmNlL1dlYkNvcmUvcmVuZGVy
aW5nL0lubGluZUZsb3dCb3guY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0xLDUgKzEsNiBAQAogLyoK
ICAqIENvcHlyaWdodCAoQykgMjAwMywgMjAwNCwgMjAwNSwgMjAwNiwgMjAwNywgMjAwOCwgMjAw
OSBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKiBQb3J0aW9ucyBDb3B5cmlnaHQg
KGMpIDIwMTQgRGF2aWQgQS4gR2F0d29vZC4gIEFsbCByaWdodHMgcmVzZXJ2ZWQuCiAgKgogICog
VGhpcyBsaWJyYXJ5IGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFu
ZC9vcgogICogbW9kaWZ5IGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIExpYnJhcnkgR2Vu
ZXJhbCBQdWJsaWMKQEAgLTE2MzcsNyArMTYzOCw1MCBAQAogICAgICAgICArK21pbkxldmVsOwog
ICAgIH0KIH0KKyAgICAKK2Jvb2wgSW5saW5lRmxvd0JveDo6aXNMZWFmKCkgY29uc3QKK3sKKyAg
ICBJbmxpbmVCb3ggKnBvcyA9IG1fZmlyc3RDaGlsZDsKKyAgICAKKyAgICBpZiAoIXBvcykgewor
ICAgICAgICAvLyBJbiBwcmFjdGljZSwgdGhpcyBzaG91bGQgbmV2ZXIgaGFwcGVuLgorICAgICAg
ICByZXR1cm4gdHJ1ZTsKKyAgICB9CisgICAgCisgICAgLyogVGhlIGJveCBpcyBub3JtYWxseSBu
b3QgYSBsZWFmLiAgSG93ZXZlciwgdHJlYXQgaXQgYXMgYSBsZWFmIGlmIGl0cyBib3gKKyAgICAg
ICBjb250YWlucyBub3RoaW5nIGJ1dCA6OmJlZm9yZSBhbmQgOjphZnRlciBwc2V1ZG9lbGVtZW50
cy4KKyAgICAgKi8KKyAgICB3aGlsZSAoKCEmcG9zLT5yZW5kZXJlcigpKSB8fCBwb3MtPnJlbmRl
cmVyKCkuaXNBbm9ueW1vdXMoKSB8fCAhcG9zLT5yZW5kZXJlcigpLm5vblBzZXVkb05vZGUoKSkg
eworICAgICAgICAKKyAgICAgICAgLyogSWYgaXQncyBhIGJveCB0aGF0IGNvbnRhaW5zIG90aGVy
IGJveGVzLCBhbmQgaWYgaXQgaXNuJ3QgdGhlIGJveCBmb3IgYQorICAgICAgICAgICBwc2V1ZG9l
bGVtZW50LCBleGFtaW5lIGl0cyBjaGlsZHJlbiBuZXh0LiAgSWYgaXQncyBhIHBzZXVkb2VsZW1l
bnQKKyAgICAgICAgICAgZG9uJ3QgbG9vayBpbnNpZGUuCisgICAgICAgICAqLworICAgICAgICBp
ZiAocG9zLT5pc0lubGluZUZsb3dCb3goKSAmJiBwb3MtPnJlbmRlcmVyKCkubm9uUHNldWRvTm9k
ZSgpKSB7CisgICAgICAgICAgICBJbmxpbmVGbG93Qm94ICp0ZW1wID0gc3RhdGljX2Nhc3Q8SW5s
aW5lRmxvd0JveCAqPihwb3MpOworICAgICAgICAgICAgaWYgKHRlbXAtPmZpcnN0Q2hpbGQoKSkg
eworICAgICAgICAgICAgICAgIHBvcyA9IHRlbXAtPmZpcnN0Q2hpbGQoKTsKKyAgICAgICAgICAg
ICAgICBjb250aW51ZTsKKyAgICAgICAgICAgIH0KKyAgICAgICAgfQorICAgICAgICBJbmxpbmVC
b3ggKm5leHQgPSBwb3MtPm5leHRPbkxpbmUoKTsKKyAgICAgICAgaWYgKG5leHQpIHsKKyAgICAg
ICAgICAgIHBvcyA9IG5leHQ7CisgICAgICAgICAgICBjb250aW51ZTsKKyAgICAgICAgfQorICAg
ICAgICB3aGlsZSAocG9zLT5wYXJlbnQoKSAmJiBwb3MtPnBhcmVudCgpICE9IHRoaXMgJiYgIXBv
cy0+cGFyZW50KCktPm5leHRPbkxpbmUoKSkgeworICAgICAgICAgICAgcG9zID0gcG9zLT5wYXJl
bnQoKTsKKyAgICAgICAgfQorICAgICAgICBwb3MgPSBwb3MtPnBhcmVudCgpOworICAgICAgICBp
ZiAoIXBvcykgcmV0dXJuIHRydWU7CisgICAgICAgIGlmIChwb3MgPT0gdGhpcykgcmV0dXJuIHRy
dWU7CisgICAgICAgIHBvcyA9IHBvcy0+bmV4dE9uTGluZSgpOworICAgIH0KKyAgICAKKyAgICBy
ZXR1cm4gZmFsc2U7Cit9CiAKKwogI2lmbmRlZiBOREVCVUcKIAogY29uc3QgY2hhciogSW5saW5l
Rmxvd0JveDo6Ym94TmFtZSgpIGNvbnN0CkluZGV4OiBTb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcv
SW5saW5lRmxvd0JveC5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9J
bmxpbmVGbG93Qm94LmgJKHJldmlzaW9uIDE3MzkwNSkKKysrIFNvdXJjZS9XZWJDb3JlL3JlbmRl
cmluZy9JbmxpbmVGbG93Qm94LmgJKHdvcmtpbmcgY29weSkKQEAgLTg1LDkgKzg1LDkgQEAKIAog
ICAgIElubGluZUJveCogZmlyc3RDaGlsZCgpIGNvbnN0IHsgY2hlY2tDb25zaXN0ZW5jeSgpOyBy
ZXR1cm4gbV9maXJzdENoaWxkOyB9CiAgICAgSW5saW5lQm94KiBsYXN0Q2hpbGQoKSBjb25zdCB7
IGNoZWNrQ29uc2lzdGVuY3koKTsgcmV0dXJuIG1fbGFzdENoaWxkOyB9Ci0KLSAgICB2aXJ0dWFs
IGJvb2wgaXNMZWFmKCkgY29uc3Qgb3ZlcnJpZGUgZmluYWwgeyByZXR1cm4gZmFsc2U7IH0KICAg
ICAKKyAgICBib29sIGlzTGVhZigpIGNvbnN0IG92ZXJyaWRlIGZpbmFsOworICAgIAogICAgIElu
bGluZUJveCogZmlyc3RMZWFmQ2hpbGQoKSBjb25zdDsKICAgICBJbmxpbmVCb3gqIGxhc3RMZWFm
Q2hpbGQoKSBjb25zdDsKIApAQCAtMzAwLDYgKzMwMCw3IEBACiAgICAgdm9pZCBhZGRUZXh0Qm94
VmlzdWFsT3ZlcmZsb3coSW5saW5lVGV4dEJveCYsIEdseXBoT3ZlcmZsb3dBbmRGYWxsYmFja0Zv
bnRzTWFwJiwgTGF5b3V0UmVjdCYgbG9naWNhbFZpc3VhbE92ZXJmbG93KTsKICAgICB2b2lkIGFk
ZFJlcGxhY2VkQ2hpbGRPdmVyZmxvdyhjb25zdCBJbmxpbmVCb3gqLCBMYXlvdXRSZWN0JiBsb2dp
Y2FsTGF5b3V0T3ZlcmZsb3csIExheW91dFJlY3QmIGxvZ2ljYWxWaXN1YWxPdmVyZmxvdyk7CiAg
ICAgdm9pZCBjb25zdHJhaW5Ub0xpbmVUb3BBbmRCb3R0b21JZk5lZWRlZChMYXlvdXRSZWN0Jikg
Y29uc3Q7CisgICAgCiAKIHByb3RlY3RlZDoKICAgICBSZWZQdHI8UmVuZGVyT3ZlcmZsb3c+IG1f
b3ZlcmZsb3c7CkluZGV4OiBTb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvUmVuZGVyQm94LmNwcAo9
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvUmVuZGVyQm94LmNwcAkocmV2
aXNpb24gMTczOTA1KQorKysgU291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL1JlbmRlckJveC5jcHAJ
KHdvcmtpbmcgY29weSkKQEAgLTM1LDEyICszNSwxNCBAQAogI2luY2x1ZGUgIkZyYW1lVmlldy5o
IgogI2luY2x1ZGUgIkdyYXBoaWNzQ29udGV4dC5oIgogI2luY2x1ZGUgIkhUTUxFbGVtZW50Lmgi
CisjaW5jbHVkZSAiUHNldWRvRWxlbWVudC5oIgogI2luY2x1ZGUgIkhUTUxGcmFtZU93bmVyRWxl
bWVudC5oIgogI2luY2x1ZGUgIkhUTUxJbnB1dEVsZW1lbnQuaCIKICNpbmNsdWRlICJIVE1MTmFt
ZXMuaCIKICNpbmNsdWRlICJIVE1MVGV4dEFyZWFFbGVtZW50LmgiCiAjaW5jbHVkZSAiSGl0VGVz
dFJlc3VsdC5oIgogI2luY2x1ZGUgIklubGluZUVsZW1lbnRCb3guaCIKKyNpbmNsdWRlICJJbmxp
bmVUZXh0Qm94LmgiCiAjaW5jbHVkZSAiUGFnZS5oIgogI2luY2x1ZGUgIlBhaW50SW5mby5oIgog
I2luY2x1ZGUgIlJlbmRlckJveFJlZ2lvbkluZm8uaCIKQEAgLTU1LDggKzU3LDEwIEBACiAjaW5j
bHVkZSAiUmVuZGVyVGFibGVDZWxsLmgiCiAjaW5jbHVkZSAiUmVuZGVyVGhlbWUuaCIKICNpbmNs
dWRlICJSZW5kZXJWaWV3LmgiCisjaW5jbHVkZSAiUmVuZGVyVGV4dC5oIgogI2luY2x1ZGUgIlNj
cm9sbGJhclRoZW1lLmgiCiAjaW5jbHVkZSAiVHJhbnNmb3JtU3RhdGUuaCIKKyNpbmNsdWRlICJW
aXNpYmxlUG9zaXRpb24uaCIKICNpbmNsdWRlICJodG1sZWRpdGluZy5oIgogI2luY2x1ZGUgPGFs
Z29yaXRobT4KICNpbmNsdWRlIDxtYXRoLmg+CkBAIC00MTE5LDIzICs0MTIzLDczIEBACiBMYXlv
dXRSZWN0IFJlbmRlckJveDo6bG9jYWxDYXJldFJlY3QoSW5saW5lQm94KiBib3gsIGludCBjYXJl
dE9mZnNldCwgTGF5b3V0VW5pdCogZXh0cmFXaWR0aFRvRW5kT2ZMaW5lKQogewogICAgIC8vIFZp
c2libGVQb3NpdGlvbnMgYXQgb2Zmc2V0cyBpbnNpZGUgY29udGFpbmVycyBlaXRoZXIgYSkgcmVm
ZXIgdG8gdGhlIHBvc2l0aW9ucyBiZWZvcmUvYWZ0ZXIKLSAgICAvLyB0aG9zZSBjb250YWluZXJz
ICh0YWJsZXMgYW5kIHNlbGVjdCBlbGVtZW50cykgb3IgYikgcmVmZXIgdG8gdGhlIHBvc2l0aW9u
IGluc2lkZSBhbiBlbXB0eSBibG9jay4KLSAgICAvLyBUaGV5IG5ldmVyIHJlZmVyIHRvIGNoaWxk
cmVuLgorICAgIC8vIHRob3NlIGNvbnRhaW5lcnMgKHRhYmxlcyBhbmQgc2VsZWN0IGVsZW1lbnRz
KSwgYikgcmVmZXIgdG8gdGhlIHBvc2l0aW9uIGluc2lkZSBhbiBlbXB0eSBibG9jaywKKyAgICAv
LyBvciBjKSByZWZlciB0byB0aGUgcG9zaXRpb24gYmV0d2VlbiBhZGphY2VudCBjaGlsZCBlbGVt
ZW50cyB0aGF0IGhhdmUgOjphZnRlciBhbmQgOjpiZWZvcmUKKyAgICAvLyBwc2V1ZG9lbGVtZW50
cy4gIEluIHRoZSBjYXNlIG9mIGMpLCAiYm94IiBpcyB0aGUgY2hpbGQgZWxlbWVudCBhZnRlciB0
aGUgaW5zZXJ0aW9uIHBvaW50LgogICAgIC8vIEZJWE1FOiBQYWludCB0aGUgY2FyZXRzIGluc2lk
ZSBlbXB0eSBibG9ja3MgZGlmZmVyZW50bHkgdGhhbiB0aGUgY2FyZXRzIGJlZm9yZS9hZnRlciBl
bGVtZW50cy4KIAogICAgIExheW91dFJlY3QgcmVjdChsb2NhdGlvbigpLCBMYXlvdXRTaXplKGNh
cmV0V2lkdGgsIGhlaWdodCgpKSk7CiAgICAgYm9vbCBsdHIgPSBib3ggPyBib3gtPmlzTGVmdFRv
UmlnaHREaXJlY3Rpb24oKSA6IHN0eWxlKCkuaXNMZWZ0VG9SaWdodERpcmVjdGlvbigpOworICAg
IAorICAgIGJvb2wgcG9zaXRpb25TZXQgPSBmYWxzZTsKKyAgICAKKyAgICBpZiAoY2FyZXRPZmZz
ZXQgPj0gMCAmJiB0aGlzLT5lbGVtZW50KCkpIHsKKyAgICAgICAgRWxlbWVudCAqZWx0ID0gdGhp
cy0+ZWxlbWVudCgpOworICAgICAgICAKKyAgICAgICAgaWYgKCh1bnNpZ25lZCljYXJldE9mZnNl
dCA8IGVsdC0+Y291bnRDaGlsZE5vZGVzKCkpIHsKKyAgICAgICAgICAgIE5vZGUgKmNoaWxkbm9k
ZSA9IGVsdC0+dHJhdmVyc2VUb0NoaWxkQXQoY2FyZXRPZmZzZXQpOworICAgICAgICAgICAgICAg
IAorICAgICAgICAgICAgaWYgKGNoaWxkbm9kZSAmJiBjaGlsZG5vZGUtPmlzRWxlbWVudE5vZGUo
KSkgeworICAgICAgICAgICAgICAgIEVsZW1lbnQgKmNoaWxkRWx0ID0gdG9FbGVtZW50KGNoaWxk
bm9kZSk7CisgICAgICAgICAgICAgICAgcmVjdC5zZXRYKGNoaWxkRWx0LT5vZmZzZXRMZWZ0KCkg
LSBlbHQtPm9mZnNldExlZnQoKSk7CisgICAgICAgICAgICAgICAgcmVjdC5zZXRZKGNoaWxkRWx0
LT5vZmZzZXRUb3AoKSAtIGVsdC0+b2Zmc2V0VG9wKCkpOwogCi0gICAgaWYgKCghY2FyZXRPZmZz
ZXQpIF4gbHRyKQotICAgICAgICByZWN0Lm1vdmUoTGF5b3V0U2l6ZSh3aWR0aCgpIC0gY2FyZXRX
aWR0aCwgMCkpOworICAgICAgICAgICAgICAgIHBvc2l0aW9uU2V0ID0gdHJ1ZTsKKyAgICAgICAg
ICAgIH0KKyAgICAgICAgfQorICAgIH0KKyAgICAKKyAgICBpZiAoIXBvc2l0aW9uU2V0KQorICAg
ICAgICBpZiAoKCFjYXJldE9mZnNldCkgXiBsdHIpCisgICAgICAgICAgICByZWN0Lm1vdmUoTGF5
b3V0U2l6ZSh3aWR0aCgpIC0gY2FyZXRXaWR0aCwgMCkpOwogCiAgICAgaWYgKGJveCkgewogICAg
ICAgICBjb25zdCBSb290SW5saW5lQm94JiByb290Qm94ID0gYm94LT5yb290KCk7CiAgICAgICAg
IExheW91dFVuaXQgdG9wID0gcm9vdEJveC5saW5lVG9wKCk7CiAgICAgICAgIHJlY3Quc2V0WSh0
b3ApOwogICAgICAgICByZWN0LnNldEhlaWdodChyb290Qm94LmxpbmVCb3R0b20oKSAtIHRvcCk7
CisKKyAgICAgICAgTm9kZSAqbm9kZSA9IGJveC0+cmVuZGVyZXIoKS5ub2RlKCk7CisgICAgICAg
IGlmIChub2RlICYmICFub2RlLT5maXJzdENoaWxkKCkpCisgICAgICAgIHsKKyAgICAgICAgICAg
IC8qIElmIGFuIGVsZW1lbnQgY29udGFpbnMgY2hpbGRyZW4sIHRoZSBpbnNlcnRpb24gY2FyZXQg
aXMgdHlwaWNhbGx5CisgICAgICAgICAgICAgICBjb21wdXRlZCBiYXNlZCBvbiB0aGUgcG9zaXRp
b24gb2YgdGhvc2UgY2hpbGRyZW4sIHdoaWNoIHRha2VzCisgICAgICAgICAgICAgICBpbnRvIGFj
Y291bnQgYW55IDo6YmVmb3JlIHBzZXVkby1lbGVtZW50cyBpbiB0aGUgcGFyZW50IGVsZW1lbnQu
CisgICAgICAgICAgICAgCisgICAgICAgICAgICAgICBIb3dldmVyLCBpZiBhbiBlbGVtZW50IGNv
bnRhaW5zIG5vIGNoaWxkcmVuLCB0aGUgOjpiZWZvcmUKKyAgICAgICAgICAgICAgIHBzZXVkby1l
bGVtZW50J3Mgd2lkdGggbXVzdCBiZSBhZGRlZCB0byB0aGUgbGVmdCBtYXJnaW4uCisgICAgICAg
ICAgICAgICBPdGhlcndpc2UsIHRoZSBpbnNlcnRpb24gY2FyZXQgd291bGQgYmUgdG8gdGhlIGxl
ZnQgb2YgdGhlCisgICAgICAgICAgICAgICAqb3V0c2lkZSogb2YgdGhlIGVsZW1lbnQgKGJlZm9y
ZSB0aGUgOjpiZWZvcmUgY29udGVudCksCisgICAgICAgICAgICAgICByYXRoZXIgdGhhbiB0byB0
aGUgbGVmdCBvZiB3aGVyZSBhIGNvbnRhaW5lZCB0ZXh0IG5vZGUgd291bGQKKyAgICAgICAgICAg
ICAgIGJlIGlmIG9uZSBleGlzdGVkLgorICAgICAgICAgICAgICovCisgICAgICAgICAgICBFbGVt
ZW50ICplbHQgPSB0b0VsZW1lbnQobm9kZSk7CisgICAgICAgICAgICBQc2V1ZG9FbGVtZW50ICpi
ZWZvcmVQc2V1ZG9FbGVtZW50ID0gZWx0LT5iZWZvcmVQc2V1ZG9FbGVtZW50KCk7CisgICAgICAg
ICAgICBSZW5kZXJPYmplY3QqIHJlbmRlck9iamVjdCA9IGJlZm9yZVBzZXVkb0VsZW1lbnQtPnJl
bmRlcmVyKCk7CisgICAgICAgICAgICAKKyAgICAgICAgICAgIGlmIChyZW5kZXJPYmplY3QtPmlz
SW5saW5lKCkpIHsKKyAgICAgICAgICAgICAgICBSZW5kZXJJbmxpbmUgKnJlbmRlcklubGluZSA9
IHRvUmVuZGVySW5saW5lKHJlbmRlck9iamVjdCk7CisgICAgICAgICAgICAgICAgCisgICAgICAg
ICAgICAgICAgcmVjdC5tb3ZlKHJlbmRlcklubGluZS0+b2Zmc2V0V2lkdGgoKSwwKTsKKyAgICAg
ICAgICAgICAgICAKKyAgICAgICAgICAgICAgICByZW5kZXJJbmxpbmUgPSBuaWw7CisgICAgICAg
ICAgICB9CisgICAgICAgICAgICAKKyAgICAgICAgICAgIHJlbmRlck9iamVjdCA9IG5pbDsKKyAg
ICAgICAgfQogICAgIH0KIAorICAgIAogICAgIC8vIElmIGhlaWdodCBvZiBib3ggaXMgc21hbGxl
ciB0aGFuIGZvbnQgaGVpZ2h0LCB1c2UgdGhlIGxhdHRlciBvbmUsCiAgICAgLy8gb3RoZXJ3aXNl
IHRoZSBjYXJldCBtaWdodCBiZWNvbWUgaW52aXNpYmxlLgogICAgIC8vCkBAIC00MTU4LDYgKzQy
MTIsNyBAQAogICAgIC8vIGlzIG5lZWRlZCBiZWNhdXNlIHdlIHVzZSBvZmZzZXRzIGluc2lkZSBh
biAiYXRvbWljIiBlbGVtZW50IHRvIHJlcHJlc2VudAogICAgIC8vIHBvc2l0aW9ucyBiZWZvcmUg
YW5kIGFmdGVyIHRoZSBlbGVtZW50IGluIGRlcHJlY2F0ZWQgZWRpdGluZyBvZmZzZXRzLgogICAg
IGlmIChlbGVtZW50KCkgJiYgIShlZGl0aW5nSWdub3Jlc0NvbnRlbnQoZWxlbWVudCgpKSB8fCBp
c1JlbmRlcmVkVGFibGUoZWxlbWVudCgpKSkpIHsKKyAgICAgICAgCiAgICAgICAgIHJlY3Quc2V0
WChyZWN0LngoKSArIGJvcmRlckxlZnQoKSArIHBhZGRpbmdMZWZ0KCkpOwogICAgICAgICByZWN0
LnNldFkocmVjdC55KCkgKyBwYWRkaW5nVG9wKCkgKyBib3JkZXJUb3AoKSk7CiAgICAgfQpJbmRl
eDogU291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL1JlbmRlckJveE1vZGVsT2JqZWN0LmNwcAo9PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvUmVuZGVyQm94TW9kZWxPYmplY3Qu
Y3BwCShyZXZpc2lvbiAxNzM5MDUpCisrKyBTb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvUmVuZGVy
Qm94TW9kZWxPYmplY3QuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0yNTY4LDEyICsyNTY4LDEzIEBA
CiAKIExheW91dFJlY3QgUmVuZGVyQm94TW9kZWxPYmplY3Q6OmxvY2FsQ2FyZXRSZWN0Rm9yRW1w
dHlFbGVtZW50KExheW91dFVuaXQgd2lkdGgsIExheW91dFVuaXQgdGV4dEluZGVudE9mZnNldCkK
IHsKLSAgICBBU1NFUlQoIWZpcnN0Q2hpbGQoKSk7CisgICAgQVNTRVJUKCFmaXJzdE5vblBzZXVk
b0VsZW1lbnRDaGlsZCgpKTsKIAogICAgIC8vIEZJWE1FOiBUaGlzIGRvZXMgbm90IHRha2UgaW50
byBhY2NvdW50IGVpdGhlciA6Zmlyc3QtbGluZSBvciA6Zmlyc3QtbGV0dGVyCiAgICAgLy8gSG93
ZXZlciwgYXMgc29vbiBhcyBzb21lIGNvbnRlbnQgaXMgZW50ZXJlZCwgdGhlIGxpbmUgYm94ZXMg
d2lsbCBiZQogICAgIC8vIGNvbnN0cnVjdGVkIGFuZCB0aGlzIGtsdWRnZSBpcyBub3QgY2FsbGVk
IGFueSBtb3JlLiBTbyBvbmx5IHRoZSBjYXJldCBzaXplCiAgICAgLy8gb2YgYW4gZW1wdHkgOmZp
cnN0LWxpbmUnZCBibG9jayBpcyB3cm9uZy4gSSB0aGluayB3ZSBjYW4gbGl2ZSB3aXRoIHRoYXQu
CisgICAgCiAgICAgY29uc3QgUmVuZGVyU3R5bGUmIGN1cnJlbnRTdHlsZSA9IGZpcnN0TGluZVN0
eWxlKCk7CiAgICAgTGF5b3V0VW5pdCBoZWlnaHQgPSBsaW5lSGVpZ2h0KHRydWUsIGN1cnJlbnRT
dHlsZS5pc0hvcml6b250YWxXcml0aW5nTW9kZSgpID8gSG9yaXpvbnRhbExpbmUgOiBWZXJ0aWNh
bExpbmUpOwogCkluZGV4OiBTb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvUmVuZGVyRWxlbWVudC5o
Cj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9SZW5kZXJFbGVtZW50LmgJ
KHJldmlzaW9uIDE3MzkwNSkKKysrIFNvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9SZW5kZXJFbGVt
ZW50LmgJKHdvcmtpbmcgY29weSkKQEAgLTU0LDYgKzU0LDEyIEBACiAKICAgICBSZW5kZXJPYmpl
Y3QqIGZpcnN0Q2hpbGQoKSBjb25zdCB7IHJldHVybiBtX2ZpcnN0Q2hpbGQ7IH0KICAgICBSZW5k
ZXJPYmplY3QqIGxhc3RDaGlsZCgpIGNvbnN0IHsgcmV0dXJuIG1fbGFzdENoaWxkOyB9CisgICAg
UmVuZGVyT2JqZWN0ICpmaXJzdE5vblBzZXVkb0VsZW1lbnRDaGlsZCgpIGNvbnN0CisgICAgewor
ICAgICAgICAgICAgUmVuZGVyT2JqZWN0ICpvYmogPSBmaXJzdENoaWxkKCk7CisgICAgICAgICAg
ICB3aGlsZSAob2JqICYmIG9iai0+aXNQc2V1ZG9FbGVtZW50KCkpIHsgb2JqID0gb2JqLT5uZXh0
U2libGluZygpOyB9CisgICAgICAgICAgICByZXR1cm4gb2JqOworICAgIH0KIAogICAgIC8vIEZJ
WE1FOiBNYWtlIHRoZXNlIHN0YW5kYWxvbmUgYW5kIG1vdmUgdG8gcmVsZXZhbnQgZmlsZXMuCiAg
ICAgYm9vbCBpc1JlbmRlckxheWVyTW9kZWxPYmplY3QoKSBjb25zdDsKSW5kZXg6IFNvdXJjZS9X
ZWJDb3JlL3JlbmRlcmluZy9SZW5kZXJJbmxpbmUuY3BwCj09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9X
ZWJDb3JlL3JlbmRlcmluZy9SZW5kZXJJbmxpbmUuY3BwCShyZXZpc2lvbiAxNzM5MDUpCisrKyBT
b3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvUmVuZGVySW5saW5lLmNwcAkod29ya2luZyBjb3B5KQpA
QCAtMiw2ICsyLDcgQEAKICAqIENvcHlyaWdodCAoQykgMTk5OSBMYXJzIEtub2xsIChrbm9sbEBr
ZGUub3JnKQogICogICAgICAgICAgIChDKSAxOTk5IEFudHRpIEtvaXZpc3RvIChrb2l2aXN0b0Br
ZGUub3JnKQogICogQ29weXJpZ2h0IChDKSAyMDAzLCAyMDA0LCAyMDA1LCAyMDA2LCAyMDA3LCAy
MDA4LCAyMDA5IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqIFBvcnRpb25zIENv
cHlyaWdodCAoYykgMjAxNCBEYXZpZCBBLiBHYXR3b29kLiAgQWxsIHJpZ2h0cyByZXNlcnZlZC4K
ICAqCiAgKiBUaGlzIGxpYnJhcnkgaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1
dGUgaXQgYW5kL29yCiAgKiBtb2RpZnkgaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgTGli
cmFyeSBHZW5lcmFsIFB1YmxpYwpAQCAtMjQ0LDkgKzI0NSw1MSBAQAogICAgIH0KIH0KIAotTGF5
b3V0UmVjdCBSZW5kZXJJbmxpbmU6OmxvY2FsQ2FyZXRSZWN0KElubGluZUJveCogaW5saW5lQm94
LCBpbnQsIExheW91dFVuaXQqIGV4dHJhV2lkdGhUb0VuZE9mTGluZSkKK0xheW91dFJlY3QgUmVu
ZGVySW5saW5lOjpsb2NhbENhcmV0UmVjdChJbmxpbmVCb3gqIGlubGluZUJveCwgaW50IGNhcmV0
T2Zmc2V0LCBMYXlvdXRVbml0KiBleHRyYVdpZHRoVG9FbmRPZkxpbmUpCiB7Ci0gICAgaWYgKGZp
cnN0Q2hpbGQoKSkgeworICAgIGlmIChpc1BzZXVkb0VsZW1lbnQoKSkgeworICAgICAgICAvKiBX
ZSBzaG91bGQgb25seSBnZXQgaGVyZSBpZiB0aGUgZW5jbG9zaW5nIGVsZW1lbnQgaGFzIG5vIGNo
aWxkIG5vZGVzLgorICAgICAgICAgICBDb21wdXRlIHRoZSBwb3NpdGlvbiBvZiB0aGUgY2FyZXQg
YmFzZWQgb24gdGhlIHBvc2l0aW9uIG9mIHRoZQorICAgICAgICAgICA6OmJlZm9yZSBwc2V1ZG9l
bGVtZW50IGlmIHRoZXJlIGlzIG9uZS4KKyAgICAgICAgCisgICAgICAgICAgIEZJWE1FOiBJbiB0
aGVvcnksIGl0IHNob3VsZCBiZSBwb3NzaWJsZSB0byBoYXZlIGEgY2FyZXQgaW5zaWRlIHRoZQor
ICAgICAgICAgICBlbGVtZW50IGV2ZW4gaWYgaXQgaGFzIG5vIDo6YmVmb3JlIHBzZXVkb2VsZW1l
bnQsIHdoaWNoIHJlcXVpcmVzCisgICAgICAgICAgIGNvbXB1dGluZyB0aGUgcG9zaXRpb24gcmVs
YXRpdmUgdG8gd2hhdGV2ZXIgY29tZXMgYmVmb3JlIGl0LgorICAgICAgICAgICBIb3dldmVyLCBp
biBwcmFjdGljZSwgYmVjYXVzZSB0aGF0IHRoYXQgd291bGQgbWFrZSBpdCBubyBsb25nZXIgYQor
ICAgICAgICAgICB2aXN1YWxseSBkaXN0aW5jdCBwb3NpdGlvbiwgaXQgaXNuJ3QgcG9zc2libGUg
dG8gcHV0IHRoZSBpbnNlcnRpb24KKyAgICAgICAgICAgY2FyZXQgaW5zaWRlIHN1Y2ggYW4gZWxl
bWVudCBhbnl3YXkuCisgICAgICAgICAqLworICAgICAgICBSZW5kZXJPYmplY3QgKmZjcmVuZGVy
ZXIgPSBmaXJzdENoaWxkKCk7CisgICAgICAgIAorICAgICAgICBpZiAoZmNyZW5kZXJlciAmJiBm
Y3JlbmRlcmVyLT5pc1RleHQoKSkgeworICAgICAgICAgICAgYXV0byB0ZXh0UmVuZGVyZXIgPSB0
b1JlbmRlclRleHQoZmNyZW5kZXJlcik7CisgICAgICAgICAgICB0ZXh0UmVuZGVyZXItPmVuc3Vy
ZUxpbmVCb3hlcygpOworCisgICAgICAgICAgICBJbmxpbmVUZXh0Qm94KiBib3ggPSB0ZXh0UmVu
ZGVyZXItPmxhc3RUZXh0Qm94KCk7CisgICAgICAgICAgICAKKyAgICAgICAgICAgIGlmIChib3gp
IHsKKyAgICAgICAgICAgICAgICAvKiBDcmVhdGUgYSByZWN0IHdpdGggdGhlIHBvc2l0aW9uIG9m
IHRoZSBiZWdpbm5pbmcgb2YgdGhlIGxhc3QgaW5saW5lCisgICAgICAgICAgICAgICAgICAgYm94
IGluIHRoZSA6OmJlZm9yZSBwc2V1ZG9lbGVtZW50LiAqLworICAgICAgICAgICAgICAgIGludCBu
ZXdDYXJldE9mZnNldCA9IGJveC0+Y2FyZXRNaW5PZmZzZXQoKTsKKyAgICAgICAgICAgICAgICBM
YXlvdXRSZWN0IGN1cnNvclBvc2l0aW9uID0gZmNyZW5kZXJlci0+bG9jYWxDYXJldFJlY3QoYm94
LCBuZXdDYXJldE9mZnNldCk7CisgICAgICAgICAgICAgICAgCisgICAgICAgICAgICAgICAgLyog
QWRkIHRoZSB3aWR0aCBvZiB0aGF0IHBzZXVkb2VsZW1lbnQuICovCisgICAgICAgICAgICAgICAg
Y3Vyc29yUG9zaXRpb24ubW92ZShib3gtPndpZHRoKCksIDApOworICAgICAgICAgICAgICAgIAor
ICAgICAgICAgICAgICAgIHJldHVybiBjdXJzb3JQb3NpdGlvbjsKKyAgICAgICAgICAgIH0KKyAg
ICAgICAgfSBlbHNlIGlmIChmY3JlbmRlcmVyLT5pc0JveCgpKSB7CisgICAgICAgICAgICBJbmxp
bmVCb3ggKmJveCA9IHRvUmVuZGVyQm94KGZjcmVuZGVyZXIpLT5pbmxpbmVCb3hXcmFwcGVyKCk7
CisgICAgICAgICAgICAKKyAgICAgICAgICAgIExheW91dFJlY3QgY3Vyc29yUG9zaXRpb24gPSBm
Y3JlbmRlcmVyLT5sb2NhbENhcmV0UmVjdChib3gsIGNhcmV0T2Zmc2V0KTsKKyAgICAgICAgICAg
IAorICAgICAgICAgICAgLyogQWRkIHRoZSB3aWR0aCBvZiB0aGF0IHBzZXVkb2VsZW1lbnQuICov
CisgICAgICAgICAgICBjdXJzb3JQb3NpdGlvbi5tb3ZlKGJveC0+d2lkdGgoKSwgMCk7CisgICAg
ICAgICAgICAKKyAgICAgICAgICAgIHJldHVybiBjdXJzb3JQb3NpdGlvbjsKKyAgICAgICAgfQor
ICAgIH0KKyAgICBpZiAoZmlyc3ROb25Qc2V1ZG9FbGVtZW50Q2hpbGQoKSkgewogICAgICAgICAv
LyBUaGlzIGNvbmRpdGlvbiBpcyBwb3NzaWJsZSBpZiB0aGUgUmVuZGVySW5saW5lIGlzIGF0IGFu
IGVkaXRpbmcgYm91bmRhcnksCiAgICAgICAgIC8vIGkuZS4gdGhlIFZpc2libGVQb3NpdGlvbiBp
czoKICAgICAgICAgLy8gICA8UmVuZGVySW5saW5lIGVkaXRpbmdCb3VuZGFyeT10cnVlPnw8UmVu
ZGVyVGV4dD4gPC9SZW5kZXJUZXh0PjwvUmVuZGVySW5saW5lPgpAQCAtMjYyLDggKzMwNSwxMiBA
QAogCiAgICAgTGF5b3V0UmVjdCBjYXJldFJlY3QgPSBsb2NhbENhcmV0UmVjdEZvckVtcHR5RWxl
bWVudChob3Jpem9udGFsQm9yZGVyQW5kUGFkZGluZ0V4dGVudCgpLCAwKTsKIAotICAgIGlmIChJ
bmxpbmVCb3gqIGZpcnN0Qm94ID0gZmlyc3RMaW5lQm94KCkpCisgICAgaWYgKElubGluZUJveCog
Zmlyc3RCb3ggPSBmaXJzdExpbmVCb3goKSkgewogICAgICAgICBjYXJldFJlY3QubW92ZUJ5KExh
eW91dFBvaW50KGZpcnN0Qm94LT50b3BMZWZ0KCkpKTsKKyAgICB9IGVsc2UgeworICAgICAgICBS
ZW5kZXJPYmplY3QgKmZjID0gZmlyc3RDaGlsZCgpOworICAgICAgICBpZiAoZmMgJiYgZmMtPmlz
QmVmb3JlQ29udGVudCgpKSByZXR1cm4gZmMtPmxvY2FsQ2FyZXRSZWN0KGlubGluZUJveCwgY2Fy
ZXRPZmZzZXQpOworICAgIH0KIAogICAgIHJldHVybiBjYXJldFJlY3Q7CiB9CkluZGV4OiBTb3Vy
Y2UvV2ViQ29yZS9yZW5kZXJpbmcvUmVuZGVySW5saW5lLmgKPT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNl
L1dlYkNvcmUvcmVuZGVyaW5nL1JlbmRlcklubGluZS5oCShyZXZpc2lvbiAxNzM5MDUpCisrKyBT
b3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvUmVuZGVySW5saW5lLmgJKHdvcmtpbmcgY29weSkKQEAg
LTk0LDcgKzk0LDEwIEBACiAgICAgdmlydHVhbCBMYXlvdXRSZWN0IGxvY2FsQ2FyZXRSZWN0KElu
bGluZUJveCosIGludCwgTGF5b3V0VW5pdCogZXh0cmFXaWR0aFRvRW5kT2ZMaW5lKSBvdmVycmlk
ZSBmaW5hbDsKIAogICAgIGJvb2wgaGl0VGVzdEN1bGxlZElubGluZShjb25zdCBIaXRUZXN0UmVx
dWVzdCYsIEhpdFRlc3RSZXN1bHQmLCBjb25zdCBIaXRUZXN0TG9jYXRpb24mIGxvY2F0aW9uSW5D
b250YWluZXIsIGNvbnN0IExheW91dFBvaW50JiBhY2N1bXVsYXRlZE9mZnNldCk7CisgICAgCisg
ICAgdmlydHVhbCBMYXlvdXRVbml0IG9mZnNldFdpZHRoKCkgY29uc3Qgb3ZlcnJpZGUgZmluYWwg
eyByZXR1cm4gbGluZXNCb3VuZGluZ0JveCgpLndpZHRoKCk7IH0KIAorCiBwcm90ZWN0ZWQ6CiAg
ICAgdmlydHVhbCB2b2lkIHdpbGxCZURlc3Ryb3llZCgpIG92ZXJyaWRlOwogCkBAIC0xMzQsNyAr
MTM3LDYgQEAKIAogICAgIHZpcnR1YWwgTGF5b3V0VW5pdCBvZmZzZXRMZWZ0KCkgY29uc3Qgb3Zl
cnJpZGUgZmluYWw7CiAgICAgdmlydHVhbCBMYXlvdXRVbml0IG9mZnNldFRvcCgpIGNvbnN0IG92
ZXJyaWRlIGZpbmFsOwotICAgIHZpcnR1YWwgTGF5b3V0VW5pdCBvZmZzZXRXaWR0aCgpIGNvbnN0
IG92ZXJyaWRlIGZpbmFsIHsgcmV0dXJuIGxpbmVzQm91bmRpbmdCb3goKS53aWR0aCgpOyB9CiAg
ICAgdmlydHVhbCBMYXlvdXRVbml0IG9mZnNldEhlaWdodCgpIGNvbnN0IG92ZXJyaWRlIGZpbmFs
IHsgcmV0dXJuIGxpbmVzQm91bmRpbmdCb3goKS5oZWlnaHQoKTsgfQogCiAgICAgdmlydHVhbCBM
YXlvdXRSZWN0IGNsaXBwZWRPdmVyZmxvd1JlY3RGb3JSZXBhaW50KGNvbnN0IFJlbmRlckxheWVy
TW9kZWxPYmplY3QqIHJlcGFpbnRDb250YWluZXIpIGNvbnN0IG92ZXJyaWRlOwpJbmRleDogU291
cmNlL1dlYkNvcmUvcmVuZGVyaW5nL1JlbmRlck9iamVjdC5jcHAKPT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291
cmNlL1dlYkNvcmUvcmVuZGVyaW5nL1JlbmRlck9iamVjdC5jcHAJKHJldmlzaW9uIDE3MzkwNSkK
KysrIFNvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9SZW5kZXJPYmplY3QuY3BwCSh3b3JraW5nIGNv
cHkpCkBAIC0xMDQsNiArMTA0LDcgQEAKIAogREVGSU5FX0RFQlVHX09OTFlfR0xPQkFMKFdURjo6
UmVmQ291bnRlZExlYWtDb3VudGVyLCByZW5kZXJPYmplY3RDb3VudGVyLCAoIlJlbmRlck9iamVj
dCIpKTsKIAorCiBSZW5kZXJPYmplY3Q6OlJlbmRlck9iamVjdChOb2RlJiBub2RlKQogICAgIDog
Q2FjaGVkSW1hZ2VDbGllbnQoKQogICAgICwgbV9ub2RlKG5vZGUpCkluZGV4OiBTb3VyY2UvV2Vi
S2l0L1dlYktpdC54Y29kZXByb2ovcHJvamVjdC5wYnhwcm9qCj09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJj
ZS9XZWJLaXQvV2ViS2l0Lnhjb2RlcHJvai9wcm9qZWN0LnBieHByb2oJKHJldmlzaW9uIDE3Mzkw
NSkKKysrIFNvdXJjZS9XZWJLaXQvV2ViS2l0Lnhjb2RlcHJvai9wcm9qZWN0LnBieHByb2oJKHdv
cmtpbmcgY29weSkKQEAgLTIzMzIsNiArMjMzMiwxNCBAQAogCQkJYmFzZUNvbmZpZ3VyYXRpb25S
ZWZlcmVuY2UgPSAxQzkwNEZEMjBCQTlERDBGMDA4MUU5RDAgLyogV2ViS2l0TGVnYWN5LnhjY29u
ZmlnICovOwogCQkJYnVpbGRTZXR0aW5ncyA9IHsKIAkJCQlERUJVR19ERUZJTkVTID0gIiQoREVC
VUdfREVGSU5FU18kKENVUlJFTlRfVkFSSUFOVCkpIEVOQUJMRV9XRUJLSVRfVU5TRVRfRFlMRF9G
UkFNRVdPUktfUEFUSCI7CisJCQkJSEVBREVSX1NFQVJDSF9QQVRIUyA9ICgKKwkJCQkJIiQoV0VC
S0lUU1lTVEVNSU5URVJGQUNFX1NUQVRJQ19MSUJSQVJZX0hFQURFUlNfRk9MREVSX1BBVEgpIiwK
KwkJCQkJIiQoV0VCQ09SRV9QUklWQVRFX0hFQURFUlNfRElSKS9Gb3J3YXJkaW5nSGVhZGVycyIs
CisJCQkJCSIkKFdFQkNPUkVfUFJJVkFURV9IRUFERVJTX0RJUikvaWN1IiwKKwkJCQkJIlwiJChC
VUlMVF9QUk9EVUNUU19ESVIpL0Rlcml2ZWRTb3VyY2VzL1dlYktpdExlZ2FjeVwiIiwKKwkJCQkJ
IlwiJChCVUlMVF9QUk9EVUNUU19ESVIpL3Vzci9sb2NhbC9pbmNsdWRlXCIiLAorCQkJCQkiJChI
RUFERVJfU0VBUkNIX1BBVEhTKSIsCisJCQkJKTsKIAkJCQlPVEhFUl9MREZMQUdTID0gKAogCQkJ
CQkiJChPVEhFUl9MREZMQUdTKSIsCiAJCQkJCSItbCQoV0VCS0lUX1NZU1RFTV9JTlRFUkZBQ0Vf
TElCUkFSWSkiLApJbmRleDogU291cmNlL1dlYktpdC9tYWMvV2ViVmlldy9XZWJGcmFtZS5tbQo9
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViS2l0L21hYy9XZWJWaWV3L1dlYkZyYW1lLm1tCShyZXZp
c2lvbiAxNzM5MDUpCisrKyBTb3VyY2UvV2ViS2l0L21hYy9XZWJWaWV3L1dlYkZyYW1lLm1tCSh3
b3JraW5nIGNvcHkpCkBAIC0xNTA2LDcgKzE1MDYsNyBAQAogICAgICAgICB9CiAgICAgfQogCi0g
ICAgZnJhbWUtPnNlbGVjdGlvbigpLnNldFNlbGVjdGVkUmFuZ2UoY29yZShyYW5nZSksIChFQWZm
aW5pdHkpYWZmaW5pdHksIGNsb3NlVHlwaW5nKTsKKyAgICBmcmFtZS0+c2VsZWN0aW9uKCkuc2V0
U2VsZWN0ZWRSYW5nZShjb3JlKHJhbmdlKSwgKEVBZmZpbml0eSlhZmZpbml0eSwgZmFsc2UsIGNs
b3NlVHlwaW5nKTsKICAgICBpZiAoIWNsb3NlVHlwaW5nKQogICAgICAgICBmcmFtZS0+ZWRpdG9y
KCkuZW5zdXJlTGFzdEVkaXRDb21tYW5kSGFzQ3VycmVudFNlbGVjdGlvbklmT3BlbkZvck1vcmVU
eXBpbmcoKTsKIH0KSW5kZXg6IFNvdXJjZS9XZWJLaXQvbWFjL1dlYlZpZXcvV2ViVmlldy5tbQo9
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViS2l0L21hYy9XZWJWaWV3L1dlYlZpZXcubW0JKHJldmlz
aW9uIDE3MzkwNSkKKysrIFNvdXJjZS9XZWJLaXQvbWFjL1dlYlZpZXcvV2ViVmlldy5tbQkod29y
a2luZyBjb3B5KQpAQCAtNzE2MCw3ICs3MTYwLDcgQEAKICAgICAgICAgaWYgKCFjb3JlRnJhbWUp
CiAgICAgICAgICAgICByZXR1cm47CiAKLSAgICAgICAgY29yZUZyYW1lLT5zZWxlY3Rpb24oKS5z
ZXRTZWxlY3RlZFJhbmdlKGNvcmUocmFuZ2UpLCBjb3JlKHNlbGVjdGlvbkFmZmluaXR5KSwgdHJ1
ZSk7CisgICAgICAgIGNvcmVGcmFtZS0+c2VsZWN0aW9uKCkuc2V0U2VsZWN0ZWRSYW5nZShjb3Jl
KHJhbmdlKSwgY29yZShzZWxlY3Rpb25BZmZpbml0eSksIGZhbHNlLCB0cnVlKTsKICAgICB9CiB9
CiAKSW5kZXg6IFNvdXJjZS9XZWJLaXQyL1dlYlByb2Nlc3MvV2ViUGFnZS9pb3MvV2ViUGFnZUlP
Uy5tbQo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViS2l0Mi9XZWJQcm9jZXNzL1dlYlBhZ2UvaW9z
L1dlYlBhZ2VJT1MubW0JKHJldmlzaW9uIDE3MzkwNSkKKysrIFNvdXJjZS9XZWJLaXQyL1dlYlBy
b2Nlc3MvV2ViUGFnZS9pb3MvV2ViUGFnZUlPUy5tbQkod29ya2luZyBjb3B5KQpAQCAtOTU1LDcg
Kzk1NSw3IEBACiAgICAgICAgIGJyZWFrOwogICAgIH0KICAgICBpZiAocmFuZ2UpCi0gICAgICAg
IGZyYW1lLnNlbGVjdGlvbigpLnNldFNlbGVjdGVkUmFuZ2UocmFuZ2UuZ2V0KCksIHBvc2l0aW9u
LmFmZmluaXR5KCksIHRydWUpOworICAgICAgICBmcmFtZS5zZWxlY3Rpb24oKS5zZXRTZWxlY3Rl
ZFJhbmdlKHJhbmdlLmdldCgpLCBwb3NpdGlvbi5hZmZpbml0eSgpLCBmYWxzZSwgdHJ1ZSk7CiAK
ICAgICBzZW5kKE1lc3NhZ2VzOjpXZWJQYWdlUHJveHk6Okdlc3R1cmVDYWxsYmFjayhwb2ludCwg
Z2VzdHVyZVR5cGUsIGdlc3R1cmVTdGF0ZSwgc3RhdGljX2Nhc3Q8dWludDMyX3Q+KGZsYWdzKSwg
Y2FsbGJhY2tJRCkpOwogfQpAQCAtMTQxOCw3ICsxNDE4LDcgQEAKIAogICAgIGlmIChuZXdSYW5n
ZSkgewogICAgICAgICBtX2N1cnJlbnRCbG9ja1NlbGVjdGlvbiA9IG5ld1JhbmdlOwotICAgICAg
ICBmcmFtZS5zZWxlY3Rpb24oKS5zZXRTZWxlY3RlZFJhbmdlKG5ld1JhbmdlLmdldCgpLCBWUF9E
RUZBVUxUX0FGRklOSVRZLCB0cnVlKTsKKyAgICAgICAgZnJhbWUuc2VsZWN0aW9uKCkuc2V0U2Vs
ZWN0ZWRSYW5nZShuZXdSYW5nZS5nZXQoKSwgVlBfREVGQVVMVF9BRkZJTklUWSwgZmFsc2UsIHRy
dWUpOwogICAgIH0KIAogICAgIGNvbXB1dGVFeHBhbmRBbmRTaHJpbmtUaHJlc2hvbGRzRm9ySGFu
ZGxlKHBvaW50LCBoYW5kbGVQb3NpdGlvbiwgZ3Jvd1RocmVzaG9sZCwgc2hyaW5rVGhyZXNob2xk
KTsKQEAgLTE0OTUsNyArMTQ5NSw3IEBACiAgICAgICAgIGJyZWFrOwogICAgIH0KICAgICBpZiAo
cmFuZ2UpCi0gICAgICAgIGZyYW1lLnNlbGVjdGlvbigpLnNldFNlbGVjdGVkUmFuZ2UocmFuZ2Uu
Z2V0KCksIHBvc2l0aW9uLmFmZmluaXR5KCksIHRydWUpOworICAgICAgICBmcmFtZS5zZWxlY3Rp
b24oKS5zZXRTZWxlY3RlZFJhbmdlKHJhbmdlLmdldCgpLCBwb3NpdGlvbi5hZmZpbml0eSgpLCBm
YWxzZSwgdHJ1ZSk7CiAKICAgICBzZW5kKE1lc3NhZ2VzOjpXZWJQYWdlUHJveHk6OlRvdWNoZXND
YWxsYmFjayhwb2ludCwgdG91Y2hlcywgY2FsbGJhY2tJRCkpOwogfQpAQCAtMTUxMSw3ICsxNTEx
LDcgQEAKICAgICAgICAgICAgIHJhbmdlID0gUmFuZ2U6OmNyZWF0ZSgqZnJhbWUuZG9jdW1lbnQo
KSwgZnJvbVBvc2l0aW9uLCB0b1Bvc2l0aW9uKTsKICAgICAgICAgZWxzZQogICAgICAgICAgICAg
cmFuZ2UgPSBSYW5nZTo6Y3JlYXRlKCpmcmFtZS5kb2N1bWVudCgpLCB0b1Bvc2l0aW9uLCBmcm9t
UG9zaXRpb24pOwotICAgICAgICBmcmFtZS5zZWxlY3Rpb24oKS5zZXRTZWxlY3RlZFJhbmdlKHJh
bmdlLmdldCgpLCBmcm9tUG9zaXRpb24uYWZmaW5pdHkoKSwgdHJ1ZSk7CisgICAgICAgIGZyYW1l
LnNlbGVjdGlvbigpLnNldFNlbGVjdGVkUmFuZ2UocmFuZ2UuZ2V0KCksIGZyb21Qb3NpdGlvbi5h
ZmZpbml0eSgpLCBmYWxzZSwgdHJ1ZSk7CiAgICAgfQogCiAgICAgLy8gV2UgY2FuIHVzZSB0aGUg
c2FtZSBjYWxsYmFjayBmb3IgdGhlIGdlc3R1cmVzIHdpdGggb25lIHBvaW50LgpAQCAtMTUyNiw3
ICsxNTI2LDcgQEAKICAgICAgICAgcmV0dXJuOwogCiAgICAgVmlzaWJsZVBvc2l0aW9uIHBvc2l0
aW9uID0gZnJhbWUuc2VsZWN0aW9uKCkuc2VsZWN0aW9uKCkuc3RhcnQoKTsKLSAgICBmcmFtZS5z
ZWxlY3Rpb24oKS5zZXRTZWxlY3RlZFJhbmdlKHdvcmRSYW5nZUZyb21Qb3NpdGlvbihwb3NpdGlv
bikuZ2V0KCksIHBvc2l0aW9uLmFmZmluaXR5KCksIHRydWUpOworICAgIGZyYW1lLnNlbGVjdGlv
bigpLnNldFNlbGVjdGVkUmFuZ2Uod29yZFJhbmdlRnJvbVBvc2l0aW9uKHBvc2l0aW9uKS5nZXQo
KSwgcG9zaXRpb24uYWZmaW5pdHkoKSwgZmFsc2UsIHRydWUpOwogfQogCiB2b2lkIFdlYlBhZ2U6
OnNlbGVjdFdvcmRCYWNrd2FyZCgpCkBAIC0xNTM4LDcgKzE1MzgsNyBAQAogICAgIFZpc2libGVQ
b3NpdGlvbiBwb3NpdGlvbiA9IGZyYW1lLnNlbGVjdGlvbigpLnNlbGVjdGlvbigpLnN0YXJ0KCk7
CiAgICAgVmlzaWJsZVBvc2l0aW9uIHN0YXJ0UG9zaXRpb24gPSBwb3NpdGlvbk9mTmV4dEJvdW5k
YXJ5T2ZHcmFudWxhcml0eShwb3NpdGlvbiwgV29yZEdyYW51bGFyaXR5LCBEaXJlY3Rpb25CYWNr
d2FyZCk7CiAgICAgaWYgKHN0YXJ0UG9zaXRpb24uaXNOb3ROdWxsKCkgJiYgc3RhcnRQb3NpdGlv
biAhPSBwb3NpdGlvbikKLSAgICAgICAgZnJhbWUuc2VsZWN0aW9uKCkuc2V0U2VsZWN0ZWRSYW5n
ZShSYW5nZTo6Y3JlYXRlKCpmcmFtZS5kb2N1bWVudCgpLCBzdGFydFBvc2l0aW9uLCBwb3NpdGlv
bikuZ2V0KCksIHBvc2l0aW9uLmFmZmluaXR5KCksIHRydWUpOworICAgICAgICBmcmFtZS5zZWxl
Y3Rpb24oKS5zZXRTZWxlY3RlZFJhbmdlKFJhbmdlOjpjcmVhdGUoKmZyYW1lLmRvY3VtZW50KCks
IHN0YXJ0UG9zaXRpb24sIHBvc2l0aW9uKS5nZXQoKSwgcG9zaXRpb24uYWZmaW5pdHkoKSwgZmFs
c2UsIHRydWUpOwogfQogCiB2b2lkIFdlYlBhZ2U6Om1vdmVTZWxlY3Rpb25CeU9mZnNldChpbnQz
Ml90IG9mZnNldCwgdWludDY0X3QgY2FsbGJhY2tJRCkKQEAgLTE1NTYsNyArMTU1Niw3IEBACiAg
ICAgICAgICAgICBicmVhazsKICAgICB9CiAgICAgaWYgKHBvc2l0aW9uLmlzTm90TnVsbCgpICYm
IHN0YXJ0UG9zaXRpb24gIT0gcG9zaXRpb24pCi0gICAgICAgIGZyYW1lLnNlbGVjdGlvbigpLnNl
dFNlbGVjdGVkUmFuZ2UoUmFuZ2U6OmNyZWF0ZSgqZnJhbWUuZG9jdW1lbnQoKSwgcG9zaXRpb24s
IHBvc2l0aW9uKS5nZXQoKSwgcG9zaXRpb24uYWZmaW5pdHkoKSwgdHJ1ZSk7CisgICAgICAgIGZy
YW1lLnNlbGVjdGlvbigpLnNldFNlbGVjdGVkUmFuZ2UoUmFuZ2U6OmNyZWF0ZSgqZnJhbWUuZG9j
dW1lbnQoKSwgcG9zaXRpb24sIHBvc2l0aW9uKS5nZXQoKSwgcG9zaXRpb24uYWZmaW5pdHkoKSwg
ZmFsc2UsIHRydWUpOwogICAgIHNlbmQoTWVzc2FnZXM6OldlYlBhZ2VQcm94eTo6Vm9pZENhbGxi
YWNrKGNhbGxiYWNrSUQpKTsKIH0KIApAQCAtMTYxOCw3ICsxNjE4LDcgQEAKICAgICAgICAgcmV0
dXJuOwogICAgIAogICAgIGZyYW1lLmVkaXRvcigpLnNldElnbm9yZUNvbXBvc2l0aW9uU2VsZWN0
aW9uQ2hhbmdlKHRydWUpOwotICAgIGZyYW1lLnNlbGVjdGlvbigpLnNldFNlbGVjdGVkUmFuZ2Uo
d29yZFJhbmdlLmdldCgpLCBVUFNUUkVBTSwgdHJ1ZSk7CisgICAgZnJhbWUuc2VsZWN0aW9uKCku
c2V0U2VsZWN0ZWRSYW5nZSh3b3JkUmFuZ2UuZ2V0KCksIFVQU1RSRUFNLCBmYWxzZSwgdHJ1ZSk7
CiAgICAgZnJhbWUuZWRpdG9yKCkuaW5zZXJ0VGV4dChuZXdUZXh0LCAwKTsKICAgICBmcmFtZS5l
ZGl0b3IoKS5zZXRJZ25vcmVDb21wb3NpdGlvblNlbGVjdGlvbkNoYW5nZShmYWxzZSk7CiB9CkBA
IC0xNjQ1LDcgKzE2NDUsNyBAQAogCiAgICAgLy8gV2UgZG9uJ3Qgd2FudCB0byBub3RpZnkgdGhl
IGNsaWVudCB0aGF0IHRoZSBzZWxlY3Rpb24gaGFzIGNoYW5nZWQgdW50aWwgd2UgYXJlIGRvbmUg
aW5zZXJ0aW5nIHRoZSBuZXcgdGV4dC4KICAgICBmcmFtZS5lZGl0b3IoKS5zZXRJZ25vcmVDb21w
b3NpdGlvblNlbGVjdGlvbkNoYW5nZSh0cnVlKTsKLSAgICBmcmFtZS5zZWxlY3Rpb24oKS5zZXRT
ZWxlY3RlZFJhbmdlKHJhbmdlLmdldCgpLCBVUFNUUkVBTSwgdHJ1ZSk7CisgICAgZnJhbWUuc2Vs
ZWN0aW9uKCkuc2V0U2VsZWN0ZWRSYW5nZShyYW5nZS5nZXQoKSwgVVBTVFJFQU0sIGZhbHNlLCB0
cnVlKTsKICAgICBmcmFtZS5lZGl0b3IoKS5pbnNlcnRUZXh0KG5ld1RleHQsIDApOwogICAgIGZy
YW1lLmVkaXRvcigpLnNldElnbm9yZUNvbXBvc2l0aW9uU2VsZWN0aW9uQ2hhbmdlKGZhbHNlKTsK
IH0KQEAgLTE3NTcsNyArMTc1Nyw3IEBACiAgICAgICAgIHJldHVybjsKICAgICB9CiAgICAgCi0g
ICAgZnJhbWUuc2VsZWN0aW9uKCkuc2V0U2VsZWN0ZWRSYW5nZShyYW5nZS5nZXQoKSwgVVBTVFJF
QU0sIHRydWUpOworICAgIGZyYW1lLnNlbGVjdGlvbigpLnNldFNlbGVjdGVkUmFuZ2UocmFuZ2Uu
Z2V0KCksIFVQU1RSRUFNLCBmYWxzZSwgdHJ1ZSk7CiAgICAgaWYgKGNvcnJlY3Rpb24ubGVuZ3Ro
KCkpCiAgICAgICAgIGZyYW1lLmVkaXRvcigpLmluc2VydFRleHQoY29ycmVjdGlvbiwgMCk7CiAg
ICAgZWxzZQo=
</data>

          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>239395</attachid>
            <date>2014-10-06 23:21:30 -0700</date>
            <delta_ts>2014-10-06 23:25:37 -0700</delta_ts>
            <desc>Final HTML editing caret patch</desc>
            <filename>15256-2014-10-06.patch</filename>
            <type>text/plain</type>
            <size>110126</size>
            <attacher name="David Gatwood">dgatwood</attacher>
            
              <data encoding="base64">SW5kZXg6IExheW91dFRlc3RzL2VkaXRpbmcvZGVsZXRpbmcvc21hcnQtZGVsZXRlLTAwMS5odG1s
Cj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT0KLS0tIExheW91dFRlc3RzL2VkaXRpbmcvZGVsZXRpbmcvc21hcnQtZGVsZXRl
LTAwMS5odG1sCShyZXZpc2lvbiAxNzQzMjQpCisrKyBMYXlvdXRUZXN0cy9lZGl0aW5nL2RlbGV0
aW5nL3NtYXJ0LWRlbGV0ZS0wMDEuaHRtbAkod29ya2luZyBjb3B5KQpAQCAtMjEsNiArMjEsNyBA
QAogPHNjcmlwdD4KIAogZnVuY3Rpb24gZWRpdGluZ1Rlc3QoKSB7CisgICAgd2luZG93LmdldFNl
bGVjdGlvbigpLmNvbGxhcHNlKHRlc3QuZmlyc3RDaGlsZCwgMSk7CiAgICAgZG91YmxlQ2xpY2tB
dFNlbGVjdGlvblN0YXJ0KCk7CiAgICAgZGVsZXRlQ29tbWFuZCgpOwogfQpJbmRleDogTGF5b3V0
VGVzdHMvZWRpdGluZy9lZGl0aW5nLmpzCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIExheW91dFRlc3RzL2VkaXRp
bmcvZWRpdGluZy5qcwkocmV2aXNpb24gMTc0MzI0KQorKysgTGF5b3V0VGVzdHMvZWRpdGluZy9l
ZGl0aW5nLmpzCSh3b3JraW5nIGNvcHkpCkBAIC04OTcsMTIgKzg5Nyw1NSBAQAogICAgIGlmICh3
aW5kb3cudGVzdFJ1bm5lcikKICAgICAgICAgdGVzdFJ1bm5lci5kdW1wRWRpdGluZ0NhbGxiYWNr
cygpOwogCisgICAgZm9jdXNPbkZpcnN0VGV4dEluVGVzdEVsZW1lbnRJZkV4aXN0cygpOworCisg
ICAgZWRpdGluZ1Rlc3QoKTsKK30KKworZnVuY3Rpb24gZm9jdXNPbkZpcnN0VGV4dEluVGVzdEVs
ZW1lbnRJZkV4aXN0cygpIHsKICAgICB2YXIgZWxlbSA9IGRvY3VtZW50LmdldEVsZW1lbnRCeUlk
KCJ0ZXN0Iik7CiAgICAgdmFyIHNlbGVjdGlvbiA9IHdpbmRvdy5nZXRTZWxlY3Rpb24oKTsKLSAg
ICBzZWxlY3Rpb24uc2V0UG9zaXRpb24oZWxlbSwgMCk7Ci0gICAgZWRpdGluZ1Rlc3QoKTsKKyAg
ICBpZiAoZWxlbSkgeworICAgICAgICB2YXIgdHJhdmVyc2UgPSBmdW5jdGlvbiAobm9kZSwgb2Zm
c2V0LCBjb25kaXRpb24pIHsKKyAgICAgICAgICAgIHZhciBvYmogPSBjb25kaXRpb24obm9kZSwg
b2Zmc2V0KTsKKyAgICAgICAgICAgIGlmIChvYmopCisgICAgICAgICAgICAgICAgcmV0dXJuIG9i
ajsKKworICAgICAgICAgICAgdmFyIGNoaWxkcmVuID0gbm9kZS5jaGlsZE5vZGVzOworICAgICAg
ICAgICAgdmFyIGxlbiA9IGNoaWxkcmVuLmxlbmd0aDsKKyAgICAgICAgICAgIGZvciAodmFyIGkg
PSAwOyBpIDwgbGVuOyBpKyspIHsKKyAgICAgICAgICAgICAgICB2YXIgY2hpbGQgPSBjaGlsZHJl
bltpXTsKKyAgICAgICAgICAgICAgICBvYmogPSB0cmF2ZXJzZShjaGlsZCwgaSwgY29uZGl0aW9u
KTsKKyAgICAgICAgICAgICAgICBpZiAob2JqKQorICAgICAgICAgICAgICAgICAgICByZXR1cm4g
b2JqOworICAgICAgICAgICAgfQorICAgICAgICAgICAgcmV0dXJuIG51bGw7CisgICAgICAgIH0K
KworICAgICAgICB2YXIgZmlyc3RWaXNpYmxlUG9zaXRpb24gPSB0cmF2ZXJzZShlbGVtLCAwLCBm
dW5jdGlvbiAobm9kZSwgb2Zmc2V0KSB7CisgICAgICAgICAgICBpZiAobm9kZS5ub2RlTmFtZSA9
PSAnI3RleHQnKSB7CisgICAgICAgICAgICAgICAgb2Zmc2V0ID0gMDsKKyAgICAgICAgICAgICAg
ICB3aGlsZSAob2Zmc2V0IDwgbm9kZS50ZXh0Q29udGVudC5sZW5ndGggJiYgbm9kZS50ZXh0Q29u
dGVudFtvZmZzZXRdID09ICdcbicpCisgICAgICAgICAgICAgICAgICAgIG9mZnNldCsrOworICAg
ICAgICAgICAgICAgIHJldHVybiB7ICdub2RlJzogbm9kZSwgJ29mZnNldCc6IG9mZnNldCB9Owor
ICAgICAgICAgICAgfQorCisgICAgICAgICAgICBpZiAobm9kZS5ub2RlTmFtZSA9PSAnQlInIHx8
IG5vZGUubm9kZU5hbWUgPT0gJ0lNRycpCisgICAgICAgICAgICAgICAgcmV0dXJuIHsgJ25vZGUn
OiBub2RlLnBhcmVudE5vZGUsICdvZmZzZXQnOiBvZmZzZXQgfTsKKworICAgICAgICAgICAgcmV0
dXJuIG51bGw7CisgICAgICAgIH0pOworCisgICAgICAgIGlmIChmaXJzdFZpc2libGVQb3NpdGlv
bikKKyAgICAgICAgICAgIHNlbGVjdGlvbi5jb2xsYXBzZShmaXJzdFZpc2libGVQb3NpdGlvbi5u
b2RlLCBmaXJzdFZpc2libGVQb3NpdGlvbi5vZmZzZXQpOworICAgICAgICBlbHNlCisgICAgICAg
ICAgICBzZWxlY3Rpb24uY29sbGFwc2UoZWxlbSwgMCk7CisgICAgfSBlbHNlIHsKKyAgICAgICAg
c2VsZWN0aW9uLnJlbW92ZUFsbFJhbmdlcygpOworICAgIH0KIH0KIAorCiB2YXIgZHVtcEFzVGV4
dCA9IGZhbHNlOwogdmFyIGVsZW1lbnRzRm9yRHVtcGluZ01hcmt1cExpc3QgPSBbZG9jdW1lbnQu
Y3JlYXRlRWxlbWVudCgnb2wnKV07CiAKQEAgLTkxNSw5ICs5NTgsOCBAQAogCiAgICAgZHVtcEFz
VGV4dCA9IHRydWU7CiAKLSAgICB2YXIgZWxlbSA9IGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKCJ0
ZXN0Iik7Ci0gICAgdmFyIHNlbGVjdGlvbiA9IHdpbmRvdy5nZXRTZWxlY3Rpb24oKTsKLSAgICBz
ZWxlY3Rpb24uc2V0UG9zaXRpb24oZWxlbSwgMCk7CisgICAgZm9jdXNPbkZpcnN0VGV4dEluVGVz
dEVsZW1lbnRJZkV4aXN0cygpOworCiAgICAgZWRpdGluZ1Rlc3QoKTsKIAogICAgIGZvciAodmFy
IGkgPSAwOyBpIDwgZWxlbWVudHNGb3JEdW1waW5nTWFya3VwTGlzdC5sZW5ndGg7IGkrKykKSW5k
ZXg6IExheW91dFRlc3RzL2VkaXRpbmcvcGFzdGVib2FyZC9zbWFydC1kcmFnLWRyb3AuaHRtbAo9
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09Ci0tLSBMYXlvdXRUZXN0cy9lZGl0aW5nL3Bhc3RlYm9hcmQvc21hcnQtZHJhZy1k
cm9wLmh0bWwJKHJldmlzaW9uIDE3NDMyNCkKKysrIExheW91dFRlc3RzL2VkaXRpbmcvcGFzdGVi
b2FyZC9zbWFydC1kcmFnLWRyb3AuaHRtbAkod29ya2luZyBjb3B5KQpAQCAtNiw2ICs2LDcgQEAK
ICAgCiAgICAgaWYgKCF3aW5kb3cuZXZlbnRTZW5kZXIpCiAgICAgICAgIHJldHVybjsKKyAgICB3
aW5kb3cuZ2V0U2VsZWN0aW9uKCkuY29sbGFwc2UoZHJhZ21lLmZpcnN0Q2hpbGQsIDApOwogICAg
IGRvdWJsZUNsaWNrQXRTZWxlY3Rpb25TdGFydCgpOwogCiAgICAgLy8gRHJhZyAnaGVsbG8nCklu
ZGV4OiBMYXlvdXRUZXN0cy9lZGl0aW5nL3Bhc3RlYm9hcmQvc21hcnQtcGFzdGUtMDAxLmh0bWwK
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PQotLS0gTGF5b3V0VGVzdHMvZWRpdGluZy9wYXN0ZWJvYXJkL3NtYXJ0LXBhc3Rl
LTAwMS5odG1sCShyZXZpc2lvbiAxNzQzMjQpCisrKyBMYXlvdXRUZXN0cy9lZGl0aW5nL3Bhc3Rl
Ym9hcmQvc21hcnQtcGFzdGUtMDAxLmh0bWwJKHdvcmtpbmcgY29weSkKQEAgLTQyLDYgKzQyLDcg
QEAKIDxzY3JpcHQ+CiAKIGZ1bmN0aW9uIGVkaXRpbmdUZXN0KCkgeworICAgIHdpbmRvdy5nZXRT
ZWxlY3Rpb24oKS5jb2xsYXBzZSh0ZXN0LmZpcnN0Q2hpbGQsIDEpOwogICAgIGRvdWJsZUNsaWNr
QXRTZWxlY3Rpb25TdGFydCgpOwogICAgIGNvcHlDb21tYW5kKCk7CiAgICAgbW92ZVNlbGVjdGlv
bkZvcndhcmRCeUNoYXJhY3RlckNvbW1hbmQoKTsKSW5kZXg6IExheW91dFRlc3RzL2VkaXRpbmcv
cGFzdGVib2FyZC9zbWFydC1wYXN0ZS0wMDMuaHRtbAo9PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBMYXlvdXRUZXN0
cy9lZGl0aW5nL3Bhc3RlYm9hcmQvc21hcnQtcGFzdGUtMDAzLmh0bWwJKHJldmlzaW9uIDE3NDMy
NCkKKysrIExheW91dFRlc3RzL2VkaXRpbmcvcGFzdGVib2FyZC9zbWFydC1wYXN0ZS0wMDMuaHRt
bAkod29ya2luZyBjb3B5KQpAQCAtNDMsNiArNDMsNyBAQAogPHNjcmlwdD4KIAogZnVuY3Rpb24g
ZWRpdGluZ1Rlc3QoKSB7CisgICAgd2luZG93LmdldFNlbGVjdGlvbigpLmNvbGxhcHNlKHRlc3Qu
Zmlyc3RDaGlsZCwgMSk7CiAgICAgZG91YmxlQ2xpY2tBdFNlbGVjdGlvblN0YXJ0KCk7CiAgICAg
Y29weUNvbW1hbmQoKTsKICAgICBtb3ZlU2VsZWN0aW9uRm9yd2FyZEJ5Q2hhcmFjdGVyQ29tbWFu
ZCgpOwpJbmRleDogTGF5b3V0VGVzdHMvZWRpdGluZy9wYXN0ZWJvYXJkL3NtYXJ0LXBhc3RlLTAw
NC5odG1sCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT0KLS0tIExheW91dFRlc3RzL2VkaXRpbmcvcGFzdGVib2FyZC9zbWFy
dC1wYXN0ZS0wMDQuaHRtbAkocmV2aXNpb24gMTc0MzI0KQorKysgTGF5b3V0VGVzdHMvZWRpdGlu
Zy9wYXN0ZWJvYXJkL3NtYXJ0LXBhc3RlLTAwNC5odG1sCSh3b3JraW5nIGNvcHkpCkBAIC00Miw2
ICs0Miw3IEBACiA8c2NyaXB0PgogCiBmdW5jdGlvbiBlZGl0aW5nVGVzdCgpIHsKKyAgICB3aW5k
b3cuZ2V0U2VsZWN0aW9uKCkuY29sbGFwc2UodGVzdC5maXJzdENoaWxkLCAxKTsKICAgICBkb3Vi
bGVDbGlja0F0U2VsZWN0aW9uU3RhcnQoKTsKICAgICBjb3B5Q29tbWFuZCgpOwogICAgIG1vdmVT
ZWxlY3Rpb25Gb3J3YXJkQnlDaGFyYWN0ZXJDb21tYW5kKCk7CkluZGV4OiBMYXlvdXRUZXN0cy9l
ZGl0aW5nL3NlbGVjdGlvbi9ET01TZWxlY3Rpb24tRG9jdW1lbnRUeXBlLWV4cGVjdGVkLnR4dAo9
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09Ci0tLSBMYXlvdXRUZXN0cy9lZGl0aW5nL3NlbGVjdGlvbi9ET01TZWxlY3Rpb24t
RG9jdW1lbnRUeXBlLWV4cGVjdGVkLnR4dAkocmV2aXNpb24gMTc0MzI0KQorKysgTGF5b3V0VGVz
dHMvZWRpdGluZy9zZWxlY3Rpb24vRE9NU2VsZWN0aW9uLURvY3VtZW50VHlwZS1leHBlY3RlZC50
eHQJKHdvcmtpbmcgY29weSkKQEAgLTUsMTAgKzUsMTAgQEAKIAogUEFTUyBzZWwuYW5jaG9yTm9k
ZSBpcyBudWxsCiBQQVNTIHNlbC5hbmNob3JOb2RlIGlzIG51bGwKK1BBU1Mgc2VsLmNvbGxhcHNl
KGRvY1R5cGUpIHRocmV3IGV4Y2VwdGlvbiBJbnZhbGlkTm9kZVR5cGVFcnJvcjogRmFpbGVkIHRv
IGV4ZWN1dGUgJ2NvbGxhcHNlJyBvbiAnU2VsZWN0aW9uJzogVGhlIG5vZGUgcHJvdmlkZWQgaXMg
b2YgdHlwZSAnYycuLgogUEFTUyBzZWwuYW5jaG9yTm9kZSBpcyBudWxsCitQQVNTIHNlbC5jb2xs
YXBzZShkb2NUeXBlKSB0aHJldyBleGNlcHRpb24gSW52YWxpZE5vZGVUeXBlRXJyb3I6IEZhaWxl
ZCB0byBleGVjdXRlICdjb2xsYXBzZScgb24gJ1NlbGVjdGlvbic6IFRoZSBub2RlIHByb3ZpZGVk
IGlzIG9mIHR5cGUgJ2MnLi4KIFBBU1Mgc2VsLmFuY2hvck5vZGUgaXMgbnVsbAotUEFTUyBzZWwu
YW5jaG9yTm9kZSBpcyBudWxsCi1QQVNTIHNlbC5hbmNob3JOb2RlIGlzIG51bGwKIFBBU1Mgc2Vs
LmNvbnRhaW5zTm9kZShkb2NUeXBlKSBpcyBmYWxzZQogUEFTUyBzdWNjZXNzZnVsbHlQYXJzZWQg
aXMgdHJ1ZQogCkluZGV4OiBMYXlvdXRUZXN0cy9lZGl0aW5nL3NlbGVjdGlvbi9zY3JpcHQtdGVz
dHMvRE9NU2VsZWN0aW9uLURvY3VtZW50VHlwZS5qcwo9PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBMYXlvdXRUZXN0
cy9lZGl0aW5nL3NlbGVjdGlvbi9zY3JpcHQtdGVzdHMvRE9NU2VsZWN0aW9uLURvY3VtZW50VHlw
ZS5qcwkocmV2aXNpb24gMTc0MzI0KQorKysgTGF5b3V0VGVzdHMvZWRpdGluZy9zZWxlY3Rpb24v
c2NyaXB0LXRlc3RzL0RPTVNlbGVjdGlvbi1Eb2N1bWVudFR5cGUuanMJKHdvcmtpbmcgY29weSkK
QEAgLTksOCArOSw3IEBACiBzZWwuc2V0QmFzZUFuZEV4dGVudChudWxsLCAwLCBkb2NUeXBlLCAw
KTsKIHNob3VsZEJlTnVsbCgic2VsLmFuY2hvck5vZGUiKTsKIAotc2VsLmNvbGxhcHNlKGRvY1R5
cGUpOwotc2hvdWxkQmVOdWxsKCJzZWwuYW5jaG9yTm9kZSIpOworc2hvdWxkVGhyb3coInNlbC5j
b2xsYXBzZShkb2NUeXBlKSIsICciSW52YWxpZE5vZGVUeXBlRXJyb3I6IEZhaWxlZCB0byBleGVj
dXRlIFwnY29sbGFwc2VcJyBvbiBcJ1NlbGVjdGlvblwnOiBUaGUgbm9kZSBwcm92aWRlZCBpcyBv
ZiB0eXBlIFwnY1wnLiInKTsKIAogc2VsLnNlbGVjdEFsbENoaWxkcmVuKGRvY1R5cGUpOwogc2hv
dWxkQmVOdWxsKCJzZWwuYW5jaG9yTm9kZSIpOwpJbmRleDogTGF5b3V0VGVzdHMvZWRpdGluZy9z
ZWxlY3Rpb24vc2VsZWN0aW9uLWludmFsaWQtb2Zmc2V0LWV4cGVjdGVkLnR4dAo9PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
Ci0tLSBMYXlvdXRUZXN0cy9lZGl0aW5nL3NlbGVjdGlvbi9zZWxlY3Rpb24taW52YWxpZC1vZmZz
ZXQtZXhwZWN0ZWQudHh0CShyZXZpc2lvbiAxNzQzMjQpCisrKyBMYXlvdXRUZXN0cy9lZGl0aW5n
L3NlbGVjdGlvbi9zZWxlY3Rpb24taW52YWxpZC1vZmZzZXQtZXhwZWN0ZWQudHh0CSh3b3JraW5n
IGNvcHkpCkBAIC0xLDggKzEsOSBAQAotWW91IHNob3VsZCBzZWUgc2l4IE9LcyBiZWxvdyAoYW5k
IG5vdCBoYW5nKTogCitZb3Ugc2hvdWxkIHNlZSA3IE9LcyBiZWxvdyAoYW5kIG5vdCBoYW5nKTog
CiBPSwogT0sKIE9LCiBPSwogT0sKIE9LCitPSwogCkluZGV4OiBMYXlvdXRUZXN0cy9lZGl0aW5n
L3NlbGVjdGlvbi9zZWxlY3Rpb24taW52YWxpZC1vZmZzZXQuaHRtbAo9PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBM
YXlvdXRUZXN0cy9lZGl0aW5nL3NlbGVjdGlvbi9zZWxlY3Rpb24taW52YWxpZC1vZmZzZXQuaHRt
bAkocmV2aXNpb24gMTc0MzI0KQorKysgTGF5b3V0VGVzdHMvZWRpdGluZy9zZWxlY3Rpb24vc2Vs
ZWN0aW9uLWludmFsaWQtb2Zmc2V0Lmh0bWwJKHdvcmtpbmcgY29weSkKQEAgLTEsNSArMSw1IEBA
CiA8Ym9keT4KLVlvdSBzaG91bGQgc2VlIHNpeCBPS3MgYmVsb3cgKGFuZCBub3QgaGFuZyk6IDxi
cj4KK1lvdSBzaG91bGQgc2VlIDcgT0tzIGJlbG93IChhbmQgbm90IGhhbmcpOiA8YnI+CiA8c2Ny
aXB0PgogaWYgKHdpbmRvdy50ZXN0UnVubmVyKQogICAgIHRlc3RSdW5uZXIuZHVtcEFzVGV4dCgp
OwpAQCAtMzAsNyArMzAsOSBAQAogfSBjYXRjaCAoZSkge2RvY3VtZW50LndyaXRlKCgoZS5jb2Rl
PT1ET01FeGNlcHRpb24uSU5ERVhfU0laRV9FUlIpID8gIk9LIiA6ICJGQUlMIikrIjxicj4iKTsg
fQogCiAvLyB0aGVzZSBzaG91bGQgdGhyb3cgYXMgd2VsbCBidXQgZG9uJ3QgYXQgdGhlIG1vbWVu
dC4gSnVzdCBjaGVja2luZyB0aGV5IGRvbid0IGNyYXNoLiAKLXNlbGVjdGlvbi5jb2xsYXBzZShi
b2R5LCAxMDAwMCk7Cit0cnkgeworICBzZWxlY3Rpb24uY29sbGFwc2UoYm9keSwgMTAwMDApOwor
fSBjYXRjaCAoZSkge2RvY3VtZW50LndyaXRlKCgoZS5jb2RlPT1ET01FeGNlcHRpb24uSU5ERVhf
U0laRV9FUlIpID8gIk9LIiA6ICJGQUlMIikrIjxicj4iKTsgfQogc2VsZWN0aW9uLnNldEJhc2VB
bmRFeHRlbnQoYm9keSwgMTAwMCwgYm9keSwgMCk7CiBzZWxlY3Rpb24uc2V0QmFzZUFuZEV4dGVu
dChib2R5LCAwLCBib2R5LCAxMDAwMCk7CiBzZWxlY3Rpb24uc2V0UG9zaXRpb24oYm9keSwgMTAw
MDApOwpJbmRleDogTGF5b3V0VGVzdHMvZmFzdC9jc3MvY291bnRlcnMvY291bnRlci1iZWZvcmUt
Y29udGVudC1ub3QtaW5jcmVtZW50ZWQuaHRtbAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBMYXlvdXRUZXN0cy9m
YXN0L2Nzcy9jb3VudGVycy9jb3VudGVyLWJlZm9yZS1jb250ZW50LW5vdC1pbmNyZW1lbnRlZC5o
dG1sCShyZXZpc2lvbiAxNzQzMjQpCisrKyBMYXlvdXRUZXN0cy9mYXN0L2Nzcy9jb3VudGVycy9j
b3VudGVyLWJlZm9yZS1jb250ZW50LW5vdC1pbmNyZW1lbnRlZC5odG1sCSh3b3JraW5nIGNvcHkp
CkBAIC0yNiw3ICsyNiw4IEBACiAgICAgICAgICAgICAvLyBXZSBuZWVkIHRvIHVzZSB0aGUgc2Vs
ZWN0aW9uIG9yIHdlIGNhbm5vdCByZXByb2R1Y2UgdGhpcyBidWchCiAgICAgICAgICAgICB2YXIg
c2VsZWN0aW9uID0gd2luZG93LmdldFNlbGVjdGlvbigpOwogICAgICAgICAgICAgdmFyIGNvbnRh
aW5lciA9IGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKCJjb250YWluZXIiKTsKLSAgICAgICAgICAg
IHNlbGVjdGlvbi5zZXRQb3NpdGlvbihjb250YWluZXIsIDApOworICAgICAgICAgICAgLy8gc2Vs
ZWN0aW9uLnNldFBvc2l0aW9uKGNvbnRhaW5lciwgMCk7CisgICAgICAgICAgICBzZWxlY3Rpb24u
Y29sbGFwc2UoY29udGFpbmVyLmZpcnN0Q2hpbGQsIDApOwogICAgICAgICAgICAgaWYgKHNlbGVj
dGlvbi5yYW5nZUNvdW50ID4gMCkgewogICAgICAgICAgICAgICAgIHZhciBuZXdFbGVtZW50ID0g
ZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgnZGl2Jyk7CiAgICAgICAgICAgICAgICAgbmV3RWxlbWVu
dC5pZCA9ICdkaXYnICsgaTsKSW5kZXg6IExheW91dFRlc3RzL2Zhc3QvZG9tL1JhbmdlL3Jhbmdl
LXNlbGVjdGlvbi1hY3Jvc3MtZG9jdW1lbnRzLWNyYXNoLWV4cGVjdGVkLnR4dAo9PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
Ci0tLSBMYXlvdXRUZXN0cy9mYXN0L2RvbS9SYW5nZS9yYW5nZS1zZWxlY3Rpb24tYWNyb3NzLWRv
Y3VtZW50cy1jcmFzaC1leHBlY3RlZC50eHQJKHJldmlzaW9uIDE3NDMyNCkKKysrIExheW91dFRl
c3RzL2Zhc3QvZG9tL1JhbmdlL3JhbmdlLXNlbGVjdGlvbi1hY3Jvc3MtZG9jdW1lbnRzLWNyYXNo
LWV4cGVjdGVkLnR4dAkod29ya2luZyBjb3B5KQpAQCAtMSArMSwyIEBACitDT05TT0xFIEVSUk9S
OiBsaW5lIDI1OiBUaGUgZ2l2ZW4gcmFuZ2UgZG9lcyBub3QgYmVsb25nIHRvIHRoZSBjdXJyZW50
IHNlbGVjdGlvbidzIGRvY3VtZW50LgogVGVzdCBwYXNzZXMgaWYgaXQgZG9lcyBub3QgY3Jhc2gu
IApJbmRleDogU291cmNlL1dlYkNvcmUvV2ViQ29yZS5leHAuaW4KPT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291
cmNlL1dlYkNvcmUvV2ViQ29yZS5leHAuaW4JKHJldmlzaW9uIDE3NDMyNCkKKysrIFNvdXJjZS9X
ZWJDb3JlL1dlYkNvcmUuZXhwLmluCSh3b3JraW5nIGNvcHkpCkBAIC0zNjYsMTAgKzM2NiwxMSBA
QAogX19aTjdXZWJDb3JlMTREb2N1bWVudFdyaXRlcjExc2V0RW5jb2RpbmdFUktOM1dURjZTdHJp
bmdFYgogX19aTjdXZWJDb3JlMTRGaWxlSWNvbkxvYWRlcjE0bm90aWZ5RmluaXNoZWRFTjNXVEYx
MFBhc3NSZWZQdHJJTlNfNEljb25FRUUKIF9fWk43V2ViQ29yZTE0Rm9ybUNvbnRyb2xsZXIyMmdl
dFJlZmVyZW5jZWRGaWxlUGF0aHNFUktOM1dURjZWZWN0b3JJTlMxXzZTdHJpbmdFTG0wRU5TMV8x
NUNyYXNoT25PdmVyZmxvd0VFRQorX19aTjdXZWJDb3JlMTRGcmFtZVNlbGVjdGlvbkQxRXYKIF9f
Wk43V2ViQ29yZTE0RnJhbWVTZWxlY3Rpb24xMHNldEZvY3VzZWRFYgogX19aTjdXZWJDb3JlMTRG
cmFtZVNlbGVjdGlvbjEyc2V0U2VsZWN0aW9uRVJLTlNfMTZWaXNpYmxlU2VsZWN0aW9uRWpOUzBf
MTlDdXJzb3JBbGlnbk9uU2Nyb2xsRU5TXzE1VGV4dEdyYW51bGFyaXR5RQogX19aTjdXZWJDb3Jl
MTRGcmFtZVNlbGVjdGlvbjE1cmV2ZWFsU2VsZWN0aW9uRVJLTlNfMTVTY3JvbGxBbGlnbm1lbnRF
TlNfMThSZXZlYWxFeHRlbnRPcHRpb25FCi1fX1pON1dlYkNvcmUxNEZyYW1lU2VsZWN0aW9uMTZz
ZXRTZWxlY3RlZFJhbmdlRVBOU181UmFuZ2VFTlNfOUVBZmZpbml0eUViCitfX1pON1dlYkNvcmUx
NEZyYW1lU2VsZWN0aW9uMTZzZXRTZWxlY3RlZFJhbmdlRVBOU181UmFuZ2VFTlNfOUVBZmZpbml0
eUViagogX19aTjdXZWJDb3JlMTRGcmFtZVNlbGVjdGlvbjE5YWJzb2x1dGVDYXJldEJvdW5kc0V2
CiBfX1pON1dlYkNvcmUxNEZyYW1lU2VsZWN0aW9uMjBzZXRTZWxlY3Rpb25Gcm9tTm9uZUV2CiBf
X1pON1dlYkNvcmUxNEZyYW1lU2VsZWN0aW9uNWNsZWFyRXYKQEAgLTczMSw2ICs3MzIsOCBAQAog
X19aTjdXZWJDb3JlMTZUaHJlYWRHbG9iYWxEYXRhMTBzdGF0aWNEYXRhRQogX19aTjdXZWJDb3Jl
MTZUaHJlYWRHbG9iYWxEYXRhQzFFdgogX19aTjdXZWJDb3JlMTZUaHJlYWRHbG9iYWxEYXRhRDFF
dgorX19aTjdXZWJDb3JlMTZWaXNpYmxlU2VsZWN0aW9uQzFFUktTMF8KK19fWk43V2ViQ29yZTE2
VmlzaWJsZVNlbGVjdGlvbkQxRXYKIF9fWk43V2ViQ29yZTE2VmlzaWJsZVNlbGVjdGlvbjIyZXhw
YW5kVXNpbmdHcmFudWxhcml0eUVOU18xNVRleHRHcmFudWxhcml0eUUKIF9fWk43V2ViQ29yZTE2
VmlzaWJsZVNlbGVjdGlvbkMxRVBLTlNfNVJhbmdlRU5TXzlFQWZmaW5pdHlFYgogX19aTjdXZWJD
b3JlMTZWaXNpYmxlU2VsZWN0aW9uQzFFUktOU18xNVZpc2libGVQb3NpdGlvbkVTM19iCkBAIC0z
Mzc4LDYgKzMzODEsNyBAQAogX19aTks3V2ViQ29yZTExSW1hZ2VCdWZmZXI5Y29weUltYWdlRU5T
XzE2QmFja2luZ1N0b3JlQ29weUVOU18xM1NjYWxlQmVoYXZpb3JFCiBfX1pOSzdXZWJDb3JlMTZW
aXNpYmxlU2VsZWN0aW9uMTBmaXJzdFJhbmdlRXYKICNlbmRpZgorX19aTks3V2ViQ29yZTE0RnJh
bWVTZWxlY3Rpb24xMGZpcnN0UmFuZ2VFdgogCiAjaWYgRU5BQkxFKFNQRUVDSF9TWU5USEVTSVMp
CiBfX1pON1dlYkNvcmUxNVNwZWVjaFN5bnRoZXNpczIyc2V0UGxhdGZvcm1TeW50aGVzaXplckVO
U3QzX18xMTB1bmlxdWVfcHRySU5TXzI1UGxhdGZvcm1TcGVlY2hTeW50aGVzaXplckVOUzFfMTRk
ZWZhdWx0X2RlbGV0ZUlTM19FRUVFCkluZGV4OiBTb3VyY2UvV2ViQ29yZS9hY2Nlc3NpYmlsaXR5
L0FjY2Vzc2liaWxpdHlPYmplY3QuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL2Fj
Y2Vzc2liaWxpdHkvQWNjZXNzaWJpbGl0eU9iamVjdC5jcHAJKHJldmlzaW9uIDE3NDMyNCkKKysr
IFNvdXJjZS9XZWJDb3JlL2FjY2Vzc2liaWxpdHkvQWNjZXNzaWJpbGl0eU9iamVjdC5jcHAJKHdv
cmtpbmcgY29weSkKQEAgLTcxMCw3ICs3MTAsNyBAQAogICAgIGlmIChSZWZQdHI8UmFuZ2U+IGNs
b3Nlc3RTdHJpbmdSYW5nZSA9IHJhbmdlQ2xvc2VzdFRvUmFuZ2Uoc2VsZWN0ZWRTdHJpbmdSYW5n
ZS5nZXQoKSwgY2xvc2VzdEFmdGVyU3RyaW5nUmFuZ2UsIGNsb3Nlc3RCZWZvcmVTdHJpbmdSYW5n
ZSkpIHsKICAgICAgICAgU3RyaW5nIGNsb3Nlc3RTdHJpbmcgPSBjbG9zZXN0U3RyaW5nUmFuZ2Ut
PnRleHQoKTsKICAgICAgICAgYm9vbCByZXBsYWNlU2VsZWN0aW9uID0gZmFsc2U7Ci0gICAgICAg
IGlmIChmcmFtZS0+c2VsZWN0aW9uKCkuc2V0U2VsZWN0ZWRSYW5nZShjbG9zZXN0U3RyaW5nUmFu
Z2UuZ2V0KCksIERPV05TVFJFQU0sIHRydWUpKSB7CisgICAgICAgIGlmIChmcmFtZS0+c2VsZWN0
aW9uKCkuc2V0U2VsZWN0ZWRSYW5nZShjbG9zZXN0U3RyaW5nUmFuZ2UuZ2V0KCksIERPV05TVFJF
QU0sIGZhbHNlLCB0cnVlKSkgewogICAgICAgICAgICAgc3dpdGNoIChhY3Rpdml0eSkgewogICAg
ICAgICAgICAgY2FzZSBGaW5kQW5kQ2FwaXRhbGl6ZTogewogICAgICAgICAgICAgICAgIHJlcGxh
Y2VtZW50U3RyaW5nID0gY2xvc2VzdFN0cmluZzsKSW5kZXg6IFNvdXJjZS9XZWJDb3JlL2RvbS9Q
b3NpdGlvbi5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvZG9tL1Bvc2l0aW9uLmNw
cAkocmV2aXNpb24gMTc0MzI0KQorKysgU291cmNlL1dlYkNvcmUvZG9tL1Bvc2l0aW9uLmNwcAko
d29ya2luZyBjb3B5KQpAQCAtMSw1ICsxLDYgQEAKIC8qCiAgKiBDb3B5cmlnaHQgKEMpIDIwMDQs
IDIwMDUsIDIwMDYsIDIwMDksIDIwMTMgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgor
ICogUG9ydGlvbnMgQ29weXJpZ2h0IChjKSAyMDE0IERhdmlkIEEuIEdhdHdvb2QuICBBbGwgcmln
aHRzIHJlc2VydmVkLgogICoKICAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFu
ZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAogICogbW9kaWZpY2F0aW9uLCBhcmUgcGVy
bWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCkBAIC00OCw3ICs0
OSw4IEBACiAjaW5jbHVkZSA8c3RkaW8uaD4KICNpbmNsdWRlIDx3dGYvdGV4dC9DU3RyaW5nLmg+
CiAjaW5jbHVkZSA8d3RmL3VuaWNvZGUvQ2hhcmFjdGVyTmFtZXMuaD4KLSAgCisjaW5jbHVkZSAi
Tm9kZUxpc3QuaCIKKwogbmFtZXNwYWNlIFdlYkNvcmUgewogCiB1c2luZyBuYW1lc3BhY2UgSFRN
TE5hbWVzOwpAQCAtMzA3LDggKzMwOSw5IEBACiAgICAgQVNTRVJUKG9mZnNldCA+PSAwKTsKIAog
ICAgIGlmIChvZmZzZXQgPiAwKSB7Ci0gICAgICAgIGlmIChOb2RlKiBjaGlsZCA9IG5vZGUtPnRy
YXZlcnNlVG9DaGlsZEF0KG9mZnNldCAtIDEpKQorICAgICAgICBpZiAoTm9kZSogY2hpbGQgPSBu
b2RlLT50cmF2ZXJzZVRvQ2hpbGRBdChvZmZzZXQgLSAxKSkgewogICAgICAgICAgICAgcmV0dXJu
IGxhc3RQb3NpdGlvbkluT3JBZnRlck5vZGUoY2hpbGQpOworICAgICAgICB9CiAKICAgICAgICAg
Ly8gVGhlcmUgYXJlIHR3byByZWFzb25zIGNoaWxkIG1pZ2h0IGJlIDA6CiAgICAgICAgIC8vICAg
MSkgVGhlIG5vZGUgaXMgbm9kZSBsaWtlIGEgdGV4dCBub2RlIHRoYXQgaXMgbm90IGFuIGVsZW1l
bnQsIGFuZCB0aGVyZWZvcmUgaGFzIG5vIGNoaWxkcmVuLgpAQCAtNTMyLDYgKzUzNSwxMyBAQAog
ICAgIGlmIChpczxIVE1MVGFibGVFbGVtZW50Pigqbm9kZSkpCiAgICAgICAgIHJldHVybiBmYWxz
ZTsKICAgICAKKyAgICBpZiAobm9kZS0+aXNFbGVtZW50Tm9kZSgpKSB7CisgICAgICAgIEVsZW1l
bnQgKmVsdCA9IGRvd25jYXN0PEVsZW1lbnQ+KG5vZGUpOworICAgICAgICBpZiAoZWx0LT5iZWZv
cmVQc2V1ZG9FbGVtZW50KCkgfHwgZWx0LT5hZnRlclBzZXVkb0VsZW1lbnQoKSkgeworICAgICAg
ICAgICAgcmV0dXJuIHRydWU7CisgICAgICAgIH0KKyAgICB9CisgICAgCiAgICAgLy8gVGhlcmUg
aXMgYSBWaXNpYmxlUG9zaXRpb24gaW5zaWRlIGFuIGVtcHR5IGlubGluZS1ibG9jayBjb250YWlu
ZXIuCiAgICAgcmV0dXJuIG5vZGUtPnJlbmRlcmVyKCktPmlzUmVwbGFjZWQoKSAmJiBjYW5IYXZl
Q2hpbGRyZW5Gb3JFZGl0aW5nKG5vZGUpICYmIHRvUmVuZGVyQm94KG5vZGUtPnJlbmRlcmVyKCkp
LT5oZWlnaHQoKSAhPSAwICYmICFub2RlLT5maXJzdENoaWxkKCk7CiB9CkBAIC01NTYsNyArNTY2
LDcgQEAKICAgICAgICAgCiAgICAgcmV0dXJuIHBvcy5hdFN0YXJ0T2ZOb2RlKCk7CiB9Ci0KKyAg
ICAKIC8vIFRoaXMgZnVuY3Rpb24gYW5kIGRvd25zdHJlYW0oKSBhcmUgdXNlZCBmb3IgbW92aW5n
IGJhY2sgYW5kIGZvcnRoIGJldHdlZW4gdmlzdWFsbHkgZXF1aXZhbGVudCBjYW5kaWRhdGVzLgog
Ly8gRm9yIGV4YW1wbGUsIGZvciB0aGUgdGV4dCBub2RlICJmb28gICAgIGJhciIgd2hlcmUgd2hp
dGVzcGFjZSBpcyBjb2xsYXBzaWJsZSwgdGhlcmUgYXJlIHR3byBjYW5kaWRhdGVzIAogLy8gdGhh
dCBtYXAgdG8gdGhlIFZpc2libGVQb3NpdGlvbiBiZXR3ZWVuICdiJyBhbmQgdGhlIHNwYWNlLiAg
VGhpcyBmdW5jdGlvbiB3aWxsIHJldHVybiB0aGUgbGVmdCBjYW5kaWRhdGUgCkBAIC01NzEsOCAr
NTgxLDI3IEBACiAgICAgCiAgICAgLy8gaXRlcmF0ZSBiYWNrd2FyZCBmcm9tIHRoZXJlLCBsb29r
aW5nIGZvciBhIHF1YWxpZmllZCBwb3NpdGlvbgogICAgIE5vZGUqIGJvdW5kYXJ5ID0gZW5jbG9z
aW5nVmlzdWFsQm91bmRhcnkoc3RhcnROb2RlKTsKKyAgICAKKyAgICAvLyBJZiB0aGlzIGZ1bmN0
aW9uIGNyb3NzZXMgYW4gdW5yZW5kZXJlZCBub2RlIChlLmcuIHdoaXRlc3BhY2UgYmV0d2Vlbgor
ICAgIC8vIGJsb2NrLWxldmVsIGVsZW1lbnRzIHdoZXJlIHNwYWNlIGlzIGNvbGxhcHNlZCkgYW5k
IGVuZHMgdXAgYXQgdGhlCisgICAgLy8gYmVnaW5uaW5nIG9mIHRoZSB1bnJlbmRlcmVkIHdoaXRl
c3BhY2UgaW1tZWRpYXRlbHkgYWZ0ZXIgYQorICAgIC8vIHZhbGlkIGNhbmRpZGF0ZSBwb3NpdGlv
biwgdHJlYXQgdGhlIHZhbGlkIGNhbmRpZGF0ZSBwb3NpdGlvbiBhcworICAgIC8vIHRoZSBuZXcg
bGFzdCB2aXNpYmxlIHBvc2l0aW9uLiAgVGhpcyBlbnN1cmVzIHRoYXQgdGhlc2UgYm91bmRhcmll
cworICAgIC8vIGFyZSB0cmVhdGVkIGFzIHZpc3VhbGx5IGVxdWl2YWxlbnQgZm9yIHRoZSBwdXJw
b3NlcyBvZiBhcnJvdworICAgIC8vIG5hdmlnYXRpb24uCisgICAgUG9zaXRpb24gZmlyc3RDYXJl
dEluc2lkZU5vZGVCZWZvcmVPcmlnaW5hbFBvc2l0aW9uID0gUG9zaXRpb24oKTsKKyAgICBQb3Np
dGlvbiBwcmV2aW91c1RvUmV0dXJuID0gUG9zaXRpb24oKTsKKyAgICAKKyAgICBpZiAobV9hbmNo
b3JUeXBlID09IFBvc2l0aW9uSXNPZmZzZXRJbkFuY2hvciAmJiB0aGlzLT5vZmZzZXRJbkNvbnRh
aW5lck5vZGUoKSA+IDAgJiYgKHVuc2lnbmVkKXRoaXMtPm9mZnNldEluQ29udGFpbmVyTm9kZSgp
IDwgc3RhcnROb2RlLT5jaGlsZE5vZGVzKCktPmxlbmd0aCgpKSB7CisgICAgICAgIAorICAgICAg
ICBOb2RlICpjaGlsZCA9IHN0YXJ0Tm9kZS0+dHJhdmVyc2VUb0NoaWxkQXQodGhpcy0+b2Zmc2V0
SW5Db250YWluZXJOb2RlKCkgLSAxKTsKKyAgICAgICAgcHJldmlvdXNUb1JldHVybiA9IFBvc2l0
aW9uKHRoaXMtPmFuY2hvck5vZGUoKSwgdGhpcy0+b2Zmc2V0SW5Db250YWluZXJOb2RlKCkgLSAx
LCBQb3NpdGlvbklzT2Zmc2V0SW5BbmNob3IpOworICAgICAgICBmaXJzdENhcmV0SW5zaWRlTm9k
ZUJlZm9yZU9yaWdpbmFsUG9zaXRpb24gPSBjcmVhdGVMZWdhY3lFZGl0aW5nUG9zaXRpb24oY2hp
bGQsIDApOworICAgIH0KKwogICAgIC8vIEZJWE1FOiBQb3NpdGlvbkl0ZXJhdG9yIHNob3VsZCBy
ZXNwZWN0IEJlZm9yZSBhbmQgQWZ0ZXIgcG9zaXRpb25zLgogICAgIFBvc2l0aW9uSXRlcmF0b3Ig
bGFzdFZpc2libGUgPSBtX2FuY2hvclR5cGUgPT0gUG9zaXRpb25Jc0FmdGVyQW5jaG9yID8gY3Jl
YXRlTGVnYWN5RWRpdGluZ1Bvc2l0aW9uKG1fYW5jaG9yTm9kZS5nZXQoKSwgY2FyZXRNYXhPZmZz
ZXQobV9hbmNob3JOb2RlLmdldCgpKSkgOiAqdGhpczsKKyAgICAKICAgICBQb3NpdGlvbkl0ZXJh
dG9yIGN1cnJlbnRQb3MgPSBsYXN0VmlzaWJsZTsKICAgICBib29sIHN0YXJ0RWRpdGFibGUgPSBz
dGFydE5vZGUtPmhhc0VkaXRhYmxlU3R5bGUoKTsKICAgICBOb2RlKiBsYXN0Tm9kZSA9IHN0YXJ0
Tm9kZTsKQEAgLTYwMCw5ICs2MjksMTggQEAKIAogICAgICAgICAvLyBza2lwIHBvc2l0aW9uIGlu
IHVucmVuZGVyZWQgb3IgaW52aXNpYmxlIG5vZGUKICAgICAgICAgUmVuZGVyT2JqZWN0KiByZW5k
ZXJlciA9IGN1cnJlbnROb2RlLT5yZW5kZXJlcigpOwotICAgICAgICBpZiAoIXJlbmRlcmVyIHx8
IHJlbmRlcmVyLT5zdHlsZSgpLnZpc2liaWxpdHkoKSAhPSBWSVNJQkxFKQorICAgICAgICBpZiAo
IXJlbmRlcmVyIHx8IHJlbmRlcmVyLT5zdHlsZSgpLnZpc2liaWxpdHkoKSAhPSBWSVNJQkxFIHx8
CisgICAgICAgICAgICAgICAgKHJlbmRlcmVyLT5pc1RleHQoKSAmJgorICAgICAgICAgICAgICAg
ICAgICghdG9SZW5kZXJUZXh0KHJlbmRlcmVyKS0+dGV4dExlbmd0aCgpIHx8CisgICAgICAgICAg
ICAgICAgICAgICF0b1JlbmRlclRleHQocmVuZGVyZXIpLT5saW5lc0JvdW5kaW5nQm94KCkud2lk
dGgoKSkKKyAgICAgICAgICAgICAgICAgKSkgeworCisgICAgICAgICAgICBpZiAoY3VycmVudFBv
cyA9PSBmaXJzdENhcmV0SW5zaWRlTm9kZUJlZm9yZU9yaWdpbmFsUG9zaXRpb24pIHsKKyAgICAg
ICAgICAgICAgICBsYXN0VmlzaWJsZSA9IHByZXZpb3VzVG9SZXR1cm47CisgICAgICAgICAgICB9
CiAgICAgICAgICAgICBjb250aW51ZTsKLSAgICAgICAgICAgICAgICAgCisgICAgICAgIH0KKyAg
ICAgICAgCiAgICAgICAgIGlmIChydWxlID09IENhbkNyb3NzRWRpdGluZ0JvdW5kYXJ5ICYmIGJv
dW5kYXJ5Q3Jvc3NlZCkgewogICAgICAgICAgICAgbGFzdFZpc2libGUgPSBjdXJyZW50UG9zOwog
ICAgICAgICAgICAgYnJlYWs7CkBAIC02OTUsNiArNzMzLDIzIEBACiAgICAgTm9kZSogc3RhcnRO
b2RlID0gZGVwcmVjYXRlZE5vZGUoKTsKICAgICBpZiAoIXN0YXJ0Tm9kZSkKICAgICAgICAgcmV0
dXJuIFBvc2l0aW9uKCk7CisgICAgCisgICAgLy8gSWYgdGhpcyBmdW5jdGlvbiBjcm9zc2VzIGFu
IHVucmVuZGVyZWQgbm9kZSAoZS5nLiB3aGl0ZXNwYWNlIGJldHdlZW4KKyAgICAvLyBibG9jay1s
ZXZlbCBlbGVtZW50cyB3aGVyZSBzcGFjZSBpcyBjb2xsYXBzZWQpIGFuZCBlbmRzIHVwIGF0IHRo
ZQorICAgIC8vIGJlZ2lubmluZyBvZiB0aGUgdW5yZW5kZXJlZCB3aGl0ZXNwYWNlIGltbWVkaWF0
ZWx5IGFmdGVyIGEKKyAgICAvLyB2YWxpZCBjYW5kaWRhdGUgcG9zaXRpb24sIHRyZWF0IHRoZSB2
YWxpZCBjYW5kaWRhdGUgcG9zaXRpb24gYXMKKyAgICAvLyB0aGUgbmV3IGxhc3QgdmlzaWJsZSBw
b3NpdGlvbi4gIFRoaXMgZW5zdXJlcyB0aGF0IHRoZXNlIGJvdW5kYXJpZXMKKyAgICAvLyBhcmUg
dHJlYXRlZCBhcyB2aXN1YWxseSBlcXVpdmFsZW50IGZvciB0aGUgcHVycG9zZXMgb2YgYXJyb3cK
KyAgICAvLyBuYXZpZ2F0aW9uLgorICAgIFBvc2l0aW9uIGxhc3RDYXJldEluc2lkZU5vZGVBdE9y
aWdpbmFsUG9zaXRpb24gPSBQb3NpdGlvbigpOworICAgIFBvc2l0aW9uIG5leHRUb1JldHVybiA9
IFBvc2l0aW9uKCk7CisgICAgCisgICAgaWYgKG1fYW5jaG9yVHlwZSA9PSBQb3NpdGlvbklzT2Zm
c2V0SW5BbmNob3IgJiYgdGhpcy0+b2Zmc2V0SW5Db250YWluZXJOb2RlKCkgPj0gMCAmJiAodW5z
aWduZWQpdGhpcy0+b2Zmc2V0SW5Db250YWluZXJOb2RlKCkgPCBzdGFydE5vZGUtPmNoaWxkTm9k
ZXMoKS0+bGVuZ3RoKCkpIHsKKyAgICAgICAgCisgICAgICAgIE5vZGUgKmNoaWxkID0gc3RhcnRO
b2RlLT50cmF2ZXJzZVRvQ2hpbGRBdCh0aGlzLT5vZmZzZXRJbkNvbnRhaW5lck5vZGUoKSk7Cisg
ICAgICAgIG5leHRUb1JldHVybiA9IFBvc2l0aW9uKHRoaXMtPmFuY2hvck5vZGUoKSwgdGhpcy0+
b2Zmc2V0SW5Db250YWluZXJOb2RlKCkgKyAxLCBQb3NpdGlvbklzT2Zmc2V0SW5BbmNob3IpOwor
ICAgICAgICBsYXN0Q2FyZXRJbnNpZGVOb2RlQXRPcmlnaW5hbFBvc2l0aW9uID0gY3JlYXRlTGVn
YWN5RWRpdGluZ1Bvc2l0aW9uKGNoaWxkLCBjYXJldE1heE9mZnNldChjaGlsZCkpOworICAgIH0K
IAogICAgIC8vIGl0ZXJhdGUgZm9yd2FyZCBmcm9tIHRoZXJlLCBsb29raW5nIGZvciBhIHF1YWxp
ZmllZCBwb3NpdGlvbgogICAgIE5vZGUqIGJvdW5kYXJ5ID0gZW5jbG9zaW5nVmlzdWFsQm91bmRh
cnkoc3RhcnROb2RlKTsKQEAgLTczNyw5ICs3OTIsMTggQEAKIAogICAgICAgICAvLyBza2lwIHBv
c2l0aW9uIGluIHVucmVuZGVyZWQgb3IgaW52aXNpYmxlIG5vZGUKICAgICAgICAgUmVuZGVyT2Jq
ZWN0KiByZW5kZXJlciA9IGN1cnJlbnROb2RlLT5yZW5kZXJlcigpOwotICAgICAgICBpZiAoIXJl
bmRlcmVyIHx8IHJlbmRlcmVyLT5zdHlsZSgpLnZpc2liaWxpdHkoKSAhPSBWSVNJQkxFKQorICAg
ICAgICBpZiAoIXJlbmRlcmVyIHx8IHJlbmRlcmVyLT5zdHlsZSgpLnZpc2liaWxpdHkoKSAhPSBW
SVNJQkxFIHx8CisgICAgICAgICAgICAgICAgKHJlbmRlcmVyLT5pc1RleHQoKSAmJgorICAgICAg
ICAgICAgICAgICAgICghdG9SZW5kZXJUZXh0KHJlbmRlcmVyKS0+dGV4dExlbmd0aCgpIHx8Cisg
ICAgICAgICAgICAgICAgICAgICF0b1JlbmRlclRleHQocmVuZGVyZXIpLT5saW5lc0JvdW5kaW5n
Qm94KCkud2lkdGgoKSkKKyAgICAgICAgICAgICAgICAgKSkgeworICAgICAgICAgICAgCisgICAg
ICAgICAgICBpZiAoY3VycmVudFBvcyA9PSBsYXN0Q2FyZXRJbnNpZGVOb2RlQXRPcmlnaW5hbFBv
c2l0aW9uKSB7CisgICAgICAgICAgICAgICAgbGFzdFZpc2libGUgPSBuZXh0VG9SZXR1cm47Cisg
ICAgICAgICAgICB9CiAgICAgICAgICAgICBjb250aW51ZTsKLSAgICAgICAgICAgIAorICAgICAg
ICB9CisgICAgICAgIAogICAgICAgICBpZiAocnVsZSA9PSBDYW5Dcm9zc0VkaXRpbmdCb3VuZGFy
eSAmJiBib3VuZGFyeUNyb3NzZWQpIHsKICAgICAgICAgICAgIGxhc3RWaXNpYmxlID0gY3VycmVu
dFBvczsKICAgICAgICAgICAgIGJyZWFrOwpAQCAtOTM0LDcgKzk5OCw4NyBAQAogCiAgICAgaWYg
KG1fYW5jaG9yTm9kZS0+aGFzVGFnTmFtZShodG1sVGFnKSkKICAgICAgICAgcmV0dXJuIGZhbHNl
OwotICAgICAgICAKKyAgICAKKyAgICAvKiBJZiB0aGUgcG9zaXRpb24gaXMgaW4gdGhlIG1pZGRs
ZSBvZiBhbiBlbGVtZW50IHRoYXQgY29udGFpbnMgYm90aCBiZWZvcmUgYW5kIGFmdGVyCisgICAg
ICAgcHNldWRvZWxlbWVudHMsIHRoZW4gdGhlIHBvc2l0aW9uIGlzLCBieSBkZWZpbml0aW9uLCB2
aXN1YWxseSBkaXN0aW5jdCBmcm9tIHRoZQorICAgICAgIHBvc2l0aW9uIG9uIGVpdGhlciBzaWRl
LCBzbyBpZiB0aGVyZSBhcmUgbm8gY2hpbGQgbm9kZXMgdGhhdCB3b3VsZCBvdGhlcndpc2UKKyAg
ICAgICBjb25zdGl0dXRlIGEgY2FuZGlkYXRlIHBvc2l0aW9uLCB0cmVhdCB0aGUgaW50ZXJpb3Ig
b2YgdGhlIG5vZGUgYXMgYSBjYW5kaWRhdGUuCisgICAgICovCisgICAgTm9kZSAqbm9kZSA9IGRl
cHJlY2F0ZWROb2RlKCk7CisgICAgaWYgKG5vZGUtPmlzRWxlbWVudE5vZGUoKSkgeworICAgICAg
ICBFbGVtZW50ICplbHQgPSBkb3duY2FzdDxFbGVtZW50Pihub2RlKTsKKyAgICAgICAgaWYgKCFl
bHQtPmZpcnN0Q2hpbGQoKSkgeworICAgICAgICAgICAgaWYgKGVsdC0+YmVmb3JlUHNldWRvRWxl
bWVudCgpICYmIGVsdC0+YWZ0ZXJQc2V1ZG9FbGVtZW50KCkpIHsKKyAgICAgICAgICAgICAgICBy
ZXR1cm4gdHJ1ZTsKKyAgICAgICAgICAgIH0KKyAgICAgICAgfSBlbHNlIHsKKyAgICAgICAgICAg
IGlmIChtX29mZnNldCA+PSAwKSB7CisgICAgICAgICAgICAgICAgdW5zaWduZWQgb2Zmc2V0ID0g
KHVuc2lnbmVkKW1fb2Zmc2V0OworICAgICAgICAgICAgICAgIAorICAgICAgICAgICAgICAgIFJl
ZlB0cjxOb2RlPiBjdXJyZW50ID0gZWx0OworICAgICAgICAgICAgICAgIE5vZGVWZWN0b3IgY2hp
bGRyZW47CisgICAgICAgICAgICAgICAgZ2V0Q2hpbGROb2RlcygqY3VycmVudCwgY2hpbGRyZW4p
OworICAgICAgICAgICAgICAgIE5vZGUgKmxlZnQgPSAob2Zmc2V0ID4gMCkgPyAmY2hpbGRyZW4u
YXQob2Zmc2V0IC0gMSkuZ2V0KCkgOiBOVUxMOworICAgICAgICAgICAgICAgIE5vZGUgKnJpZ2h0
ID0gKG9mZnNldCA8IGNoaWxkcmVuLnNpemUoKSkgPworICAgICAgICAgICAgICAgICAgICAmY2hp
bGRyZW4uYXQob2Zmc2V0KS5nZXQoKSA6IE5VTEw7CisgICAgICAgICAgICAgICAgCisgICAgICAg
ICAgICAgICAgaWYgKGxlZnQgJiYgbGVmdC0+cmVuZGVyZXIoKSAmJiBsZWZ0LT5yZW5kZXJlcigp
LT5pc1RleHQoKSkgeworICAgICAgICAgICAgICAgICAgICBSZW5kZXJUZXh0ICpydCA9IHRvUmVu
ZGVyVGV4dChsZWZ0LT5yZW5kZXJlcigpKTsKKyAgICAgICAgICAgICAgICAgICAgCisgICAgICAg
ICAgICAgICAgICAgIHJ0ID0gTlVMTDsKKyAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICAg
ICAgCisgICAgICAgICAgICAgICAgLyogRG9uJ3QgbGV0IG5vbi1yZW5kZXJlZCBvciBjb2xsYXBz
ZWQgd2hpdGVzcGFjZSBwcmV2ZW50IGFuIGluc2VydGlvbiBwb2ludC4gKi8KKyAgICAgICAgICAg
ICAgICB3aGlsZSAobGVmdCAmJiAoIWxlZnQtPnJlbmRlcmVyKCkgfHwKKyAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgbGVmdC0+cmVuZGVyZXIoKS0+c3R5bGUoKS52aXNpYmlsaXR5KCkg
IT0gVklTSUJMRSB8fAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAobGVmdC0+cmVu
ZGVyZXIoKS0+aXNUZXh0KCkgJiYKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
KCF0b1JlbmRlclRleHQobGVmdC0+cmVuZGVyZXIoKSktPnRleHRMZW5ndGgoKSB8fAorICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIXRvUmVuZGVyVGV4dChsZWZ0LT5yZW5kZXJl
cigpKS0+bGluZXNCb3VuZGluZ0JveCgpLndpZHRoKCkpCisgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICApKSkgeworICAgICAgICAgICAgICAgICAgICBsZWZ0ID0gbGVmdC0+cHJldmlv
dXNTaWJsaW5nKCk7CisgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgICAgIHdoaWxlIChy
aWdodCAmJiAoIXJpZ2h0LT5yZW5kZXJlcigpIHx8CisgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICByaWdodC0+cmVuZGVyZXIoKS0+c3R5bGUoKS52aXNpYmlsaXR5KCkgIT0gVklTSUJM
RSB8fAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKHJpZ2h0LT5yZW5kZXJlcigp
LT5pc1RleHQoKSAmJgorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKCF0b1Jl
bmRlclRleHQocmlnaHQtPnJlbmRlcmVyKCkpLT50ZXh0TGVuZ3RoKCkgfHwKKyAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAhdG9SZW5kZXJUZXh0KHJpZ2h0LT5yZW5kZXJlcigp
KS0+bGluZXNCb3VuZGluZ0JveCgpLndpZHRoKCkpCisgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgKSkpIHsKKyAgICAgICAgICAgICAgICAgICAgcmlnaHQgPSByaWdodC0+bmV4dFNp
YmxpbmcoKTsKKyAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICAgICAgCisgICAgICAgICAg
ICAgICAgLyogSWYgbGVmdCBleGlzdHMgYW5kIGlzIGEgdGV4dCBub2RlLCBub3QgYSBjYW5kaWRh
dGUuCisgICAgICAgICAgICAgICAgICAgSWYgbGVmdCBleGlzdHMgYW5kIGlzIGFuIGVsZW1lbnQg
bm9kZSwgaXMgYSBjYW5kaWRhdGUgb25seQorICAgICAgICAgICAgICAgICAgICAgICBpZiBsZWZ0
IGhhcyBhbiA6OmFmdGVyIHBzZXVkb2VsZW1lbnQuCisgICAgICAgICAgICAgICAgICAgSWYgbGVm
dCBkb2VzIG5vdCBleGlzdCwgaXMgYSBjYW5kaWRhdGUgb25seSBpZiBwYXJlbnQgaGFzCisgICAg
ICAgICAgICAgICAgICAgICAgIGEgOjpiZWZvcmUgcHNldWRvZWxlbWVudC4KKyAgICAgICAgICAg
ICAgICAgKi8KKyAgICAgICAgICAgICAgICBib29sIGxlZnRIYXNQc2V1ZG9FbGVtZW50QXRFbmQg
PSBmYWxzZTsKKyAgICAgICAgICAgICAgICBpZiAobGVmdCAmJiBsZWZ0LT5pc0VsZW1lbnROb2Rl
KCkpIHsKKyAgICAgICAgICAgICAgICAgICAgRWxlbWVudCAqbGVmdEVsZW1lbnQgPSBkb3duY2Fz
dDxFbGVtZW50PihsZWZ0KTsKKyAgICAgICAgICAgICAgICAgICAgbGVmdEhhc1BzZXVkb0VsZW1l
bnRBdEVuZCA9IGxlZnRFbGVtZW50LT5hZnRlclBzZXVkb0VsZW1lbnQoKTsKKyAgICAgICAgICAg
ICAgICB9IGVsc2UgaWYgKCFsZWZ0KSB7CisgICAgICAgICAgICAgICAgICAgIGxlZnRIYXNQc2V1
ZG9FbGVtZW50QXRFbmQgPSBlbHQtPmJlZm9yZVBzZXVkb0VsZW1lbnQoKTsKKyAgICAgICAgICAg
ICAgICB9CisgICAgICAgICAgICAgICAgCisgICAgICAgICAgICAgICAgLyogSWYgcmlnaHQgZXhp
c3RzIGFuZCBpcyBhIHRleHQgbm9kZSwgbm90IGEgY2FuZGlkYXRlLgorICAgICAgICAgICAgICAg
ICAgIElmIHJpZ2h0IGV4aXN0cyBhbmQgaXMgYW4gZWxlbWVudCBub2RlLCBpcyBhIGNhbmRpZGF0
ZSBvbmx5CisgICAgICAgICAgICAgICAgICAgICAgIGlmIHJpZ2h0IGhhcyBhIDo6YmVmb3JlIHBz
ZXVkb2VsZW1lbnQuCisgICAgICAgICAgICAgICAgICAgSWYgcmlnaHQgZG9lcyBub3QgZXhpc3Qs
IGlzIGEgY2FuZGlkYXRlIG9ubHkgaWYgcGFyZW50IGhhcworICAgICAgICAgICAgICAgICAgICAg
ICBhbiA6OmFmdGVyIHBzZXVkb2VsZW1lbnQuCisgICAgICAgICAgICAgICAgICovCisgICAgICAg
ICAgICAgICAgYm9vbCByaWdodEhhc1BzZXVkb0VsZW1lbnRBdEJlZ2lubmluZyA9IGZhbHNlOwor
ICAgICAgICAgICAgICAgIGlmIChyaWdodCAmJiByaWdodC0+aXNFbGVtZW50Tm9kZSgpKSB7Cisg
ICAgICAgICAgICAgICAgICAgIEVsZW1lbnQgKnJpZ2h0RWxlbWVudCA9IGRvd25jYXN0PEVsZW1l
bnQ+KHJpZ2h0KTsKKyAgICAgICAgICAgICAgICAgICAgcmlnaHRIYXNQc2V1ZG9FbGVtZW50QXRC
ZWdpbm5pbmcgPSByaWdodEVsZW1lbnQtPmJlZm9yZVBzZXVkb0VsZW1lbnQoKTsKKyAgICAgICAg
ICAgICAgICB9IGVsc2UgaWYgKCFyaWdodCkgeworICAgICAgICAgICAgICAgICAgICByaWdodEhh
c1BzZXVkb0VsZW1lbnRBdEJlZ2lubmluZyA9IGVsdC0+YWZ0ZXJQc2V1ZG9FbGVtZW50KCk7Cisg
ICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgICAgIAorICAgICAgICAgICAgICAgIGlmIChs
ZWZ0SGFzUHNldWRvRWxlbWVudEF0RW5kICYmIHJpZ2h0SGFzUHNldWRvRWxlbWVudEF0QmVnaW5u
aW5nKSByZXR1cm4gdHJ1ZTsKKyAgICAgICAgICAgIH0KKyAgICAgICAgfQorICAgIH0KKyAgICAK
ICAgICBpZiAocmVuZGVyZXItPmlzUmVuZGVyQmxvY2tGbG93KCkpIHsKICAgICAgICAgUmVuZGVy
QmxvY2tGbG93JiBibG9jayA9IHRvUmVuZGVyQmxvY2tGbG93KCpyZW5kZXJlcik7CiAgICAgICAg
IGlmIChibG9jay5sb2dpY2FsSGVpZ2h0KCkgfHwgbV9hbmNob3JOb2RlLT5oYXNUYWdOYW1lKGJv
ZHlUYWcpKSB7CkBAIC0xMTE1LDYgKzEyNTksOCBAQAogICAgICAgICAgICAgcmV0dXJuIDA7CiAg
ICAgICAgIGlmIChpc05vblRleHRMZWFmQ2hpbGQobmV4dCkpCiAgICAgICAgICAgICByZXR1cm4g
MDsKKyAgICAgICAgaWYgKG5leHQtPmlzUHNldWRvRWxlbWVudCgpKQorICAgICAgICAgICAgcmV0
dXJuIDA7CiAgICAgICAgIGlmIChuZXh0LT5pc1RleHQoKSkgewogICAgICAgICAgICAgSW5saW5l
VGV4dEJveCogbWF0Y2ggPSAwOwogICAgICAgICAgICAgaW50IG1pbk9mZnNldCA9IElOVF9NQVg7
CkBAIC0xMTU3LDYgKzEzMDMsMTIgQEAKICAgICBjYXJldE9mZnNldCA9IGRlcHJlY2F0ZWRFZGl0
aW5nT2Zmc2V0KCk7CiAgICAgUmVuZGVyT2JqZWN0KiByZW5kZXJlciA9IGRlcHJlY2F0ZWROb2Rl
KCktPnJlbmRlcmVyKCk7CiAKKyAgICByZXR1cm4gZ2V0SW5saW5lQm94QW5kT2Zmc2V0KGFmZmlu
aXR5LCBwcmltYXJ5RGlyZWN0aW9uLCBpbmxpbmVCb3gsIGNhcmV0T2Zmc2V0LCByZW5kZXJlcik7
Cit9CisgICAgCit2b2lkIFBvc2l0aW9uOjpnZXRJbmxpbmVCb3hBbmRPZmZzZXQoRUFmZmluaXR5
IGFmZmluaXR5LCBUZXh0RGlyZWN0aW9uIHByaW1hcnlEaXJlY3Rpb24sIElubGluZUJveComIGlu
bGluZUJveCwgaW50JiBjYXJldE9mZnNldCwgUmVuZGVyT2JqZWN0KiByZW5kZXJlcikgY29uc3QK
K3sKKyAgICAKICAgICBpZiAocmVuZGVyZXItPmlzQlIoKSkKICAgICAgICAgaW5saW5lQm94ID0g
IWNhcmV0T2Zmc2V0ID8gdG9SZW5kZXJMaW5lQnJlYWsocmVuZGVyZXIpLT5pbmxpbmVCb3hXcmFw
cGVyKCkgOiBudWxscHRyOwogICAgIGVsc2UgaWYgKHJlbmRlcmVyLT5pc1RleHQoKSkgewpJbmRl
eDogU291cmNlL1dlYkNvcmUvZG9tL1Bvc2l0aW9uLmgKPT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dl
YkNvcmUvZG9tL1Bvc2l0aW9uLmgJKHJldmlzaW9uIDE3NDMyNCkKKysrIFNvdXJjZS9XZWJDb3Jl
L2RvbS9Qb3NpdGlvbi5oCSh3b3JraW5nIGNvcHkpCkBAIC0xODMsNiArMTgzLDcgQEAKIAogICAg
IHZvaWQgZ2V0SW5saW5lQm94QW5kT2Zmc2V0KEVBZmZpbml0eSwgSW5saW5lQm94KiYsIGludCYg
Y2FyZXRPZmZzZXQpIGNvbnN0OwogICAgIHZvaWQgZ2V0SW5saW5lQm94QW5kT2Zmc2V0KEVBZmZp
bml0eSwgVGV4dERpcmVjdGlvbiBwcmltYXJ5RGlyZWN0aW9uLCBJbmxpbmVCb3gqJiwgaW50JiBj
YXJldE9mZnNldCkgY29uc3Q7CisgICAgdm9pZCBnZXRJbmxpbmVCb3hBbmRPZmZzZXQoRUFmZmlu
aXR5IGFmZmluaXR5LCBUZXh0RGlyZWN0aW9uIHByaW1hcnlEaXJlY3Rpb24sIElubGluZUJveCom
IGlubGluZUJveCwgaW50JiBjYXJldE9mZnNldCwgUmVuZGVyT2JqZWN0KiByZW5kZXJlcikgY29u
c3Q7CiAKICAgICBUZXh0RGlyZWN0aW9uIHByaW1hcnlEaXJlY3Rpb24oKSBjb25zdDsKIApJbmRl
eDogU291cmNlL1dlYkNvcmUvZWRpdGluZy9FZGl0b3IuY3BwCj09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJj
ZS9XZWJDb3JlL2VkaXRpbmcvRWRpdG9yLmNwcAkocmV2aXNpb24gMTc0MzI0KQorKysgU291cmNl
L1dlYkNvcmUvZWRpdGluZy9FZGl0b3IuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0xODY1LDcgKzE4
NjUsNyBAQAogICAgICAgICAgICAgdW5zaWduZWQgc3RhcnQgPSBzdGQ6Om1pbihiYXNlT2Zmc2V0
ICsgc2VsZWN0aW9uU3RhcnQsIGV4dGVudE9mZnNldCk7CiAgICAgICAgICAgICB1bnNpZ25lZCBl
bmQgPSBzdGQ6Om1pbihzdGQ6Om1heChzdGFydCwgYmFzZU9mZnNldCArIHNlbGVjdGlvbkVuZCks
IGV4dGVudE9mZnNldCk7CiAgICAgICAgICAgICBSZWZQdHI8UmFuZ2U+IHNlbGVjdGVkUmFuZ2Ug
PSBSYW5nZTo6Y3JlYXRlKGJhc2VOb2RlLT5kb2N1bWVudCgpLCBiYXNlTm9kZSwgc3RhcnQsIGJh
c2VOb2RlLCBlbmQpOwotICAgICAgICAgICAgbV9mcmFtZS5zZWxlY3Rpb24oKS5zZXRTZWxlY3Rl
ZFJhbmdlKHNlbGVjdGVkUmFuZ2UuZ2V0KCksIERPV05TVFJFQU0sIGZhbHNlKTsKKyAgICAgICAg
ICAgIG1fZnJhbWUuc2VsZWN0aW9uKCkuc2V0U2VsZWN0ZWRSYW5nZShzZWxlY3RlZFJhbmdlLmdl
dCgpLCBET1dOU1RSRUFNLCBmYWxzZSwgZmFsc2UpOwogICAgICAgICB9CiAgICAgfQogCkluZGV4
OiBTb3VyY2UvV2ViQ29yZS9lZGl0aW5nL0VkaXRvckNvbW1hbmQuY3BwCj09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0t
IFNvdXJjZS9XZWJDb3JlL2VkaXRpbmcvRWRpdG9yQ29tbWFuZC5jcHAJKHJldmlzaW9uIDE3NDMy
NCkKKysrIFNvdXJjZS9XZWJDb3JlL2VkaXRpbmcvRWRpdG9yQ29tbWFuZC5jcHAJKHdvcmtpbmcg
Y29weSkKQEAgLTIxOSw3ICsyMTksNyBAQAogICAgIEVBZmZpbml0eSBhZmZpbml0eSA9IHNlbGVj
dGlvbi5hZmZpbml0eSgpOwogICAgIGlmICghZnJhbWUuZWRpdG9yKCkuY2xpZW50KCktPnNob3Vs
ZENoYW5nZVNlbGVjdGVkUmFuZ2Uob2xkUmFuZ2UuZ2V0KCksIG5ld1JhbmdlLmdldCgpLCBhZmZp
bml0eSwgZmFsc2UpKQogICAgICAgICByZXR1cm4gZmFsc2U7Ci0gICAgZnJhbWUuc2VsZWN0aW9u
KCkuc2V0U2VsZWN0ZWRSYW5nZShuZXdSYW5nZS5nZXQoKSwgYWZmaW5pdHksIHRydWUpOworICAg
IGZyYW1lLnNlbGVjdGlvbigpLnNldFNlbGVjdGVkUmFuZ2UobmV3UmFuZ2UuZ2V0KCksIGFmZmlu
aXR5LCBmYWxzZSwgRnJhbWVTZWxlY3Rpb246OkNsb3NlVHlwaW5nKTsKICAgICByZXR1cm4gdHJ1
ZTsKIH0KIApAQCAtMzkwLDcgKzM5MCw3IEBACiAgICAgUmVmUHRyPFJhbmdlPiBtYXJrID0gZnJh
bWUuZWRpdG9yKCkubWFyaygpLnRvTm9ybWFsaXplZFJhbmdlKCk7CiAgICAgRnJhbWVTZWxlY3Rp
b24mIHNlbGVjdGlvbiA9IGZyYW1lLnNlbGVjdGlvbigpOwogICAgIGlmIChtYXJrKSB7Ci0gICAg
ICAgIGJvb2wgc2VsZWN0ZWQgPSBzZWxlY3Rpb24uc2V0U2VsZWN0ZWRSYW5nZSh1bmlvbkRPTVJh
bmdlcyhtYXJrLmdldCgpLCBmcmFtZS5lZGl0b3IoKS5zZWxlY3RlZFJhbmdlKCkuZ2V0KCkpLmdl
dCgpLCBET1dOU1RSRUFNLCB0cnVlKTsKKwlib29sIHNlbGVjdGVkID0gZnJhbWUuc2VsZWN0aW9u
KCkuc2V0U2VsZWN0ZWRSYW5nZSh1bmlvbkRPTVJhbmdlcyhtYXJrLmdldCgpLCBmcmFtZS5lZGl0
b3IoKS5zZWxlY3RlZFJhbmdlKCkuZ2V0KCkpLmdldCgpLCBET1dOU1RSRUFNLCBmYWxzZSwgRnJh
bWVTZWxlY3Rpb246OkNsb3NlVHlwaW5nKTsKICAgICAgICAgQVNTRVJUKHNlbGVjdGVkKTsKICAg
ICAgICAgaWYgKCFzZWxlY3RlZCkKICAgICAgICAgICAgIHJldHVybiBmYWxzZTsKQEAgLTEwNDMs
NyArMTA0Myw4IEBACiAgICAgICAgIHN5c3RlbUJlZXAoKTsKICAgICAgICAgcmV0dXJuIGZhbHNl
OwogICAgIH0KLSAgICBmcmFtZS5zZWxlY3Rpb24oKS5zZXRTZWxlY3RlZFJhbmdlKHVuaW9uRE9N
UmFuZ2VzKG1hcmsuZ2V0KCksIHNlbGVjdGlvbi5nZXQoKSkuZ2V0KCksIERPV05TVFJFQU0sIHRy
dWUpOworICAgIGZyYW1lLnNlbGVjdGlvbigpLnNldFNlbGVjdGVkUmFuZ2UodW5pb25ET01SYW5n
ZXMobWFyay5nZXQoKSwgc2VsZWN0aW9uLmdldCgpKS5nZXQoKSwgRE9XTlNUUkVBTSwgZmFsc2Us
IEZyYW1lU2VsZWN0aW9uOjpDbG9zZVR5cGluZyk7CisKICAgICByZXR1cm4gdHJ1ZTsKIH0KIApJ
bmRleDogU291cmNlL1dlYkNvcmUvZWRpdGluZy9GcmFtZVNlbGVjdGlvbi5jcHAKPT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PQotLS0gU291cmNlL1dlYkNvcmUvZWRpdGluZy9GcmFtZVNlbGVjdGlvbi5jcHAJKHJldmlzaW9u
IDE3NDMyNCkKKysrIFNvdXJjZS9XZWJDb3JlL2VkaXRpbmcvRnJhbWVTZWxlY3Rpb24uY3BwCSh3
b3JraW5nIGNvcHkpCkBAIC0xMTAsNiArMTEwLDcgQEAKIEZyYW1lU2VsZWN0aW9uOjpGcmFtZVNl
bGVjdGlvbihGcmFtZSogZnJhbWUpCiAgICAgOiBtX2ZyYW1lKGZyYW1lKQogICAgICwgbV94UG9z
Rm9yVmVydGljYWxBcnJvd05hdmlnYXRpb24oTm9YUG9zRm9yVmVydGljYWxBcnJvd05hdmlnYXRp
b24oKSkKKyAgICAsIG1fb2JzZXJ2aW5nVmlzaWJsZVNlbGVjdGlvbihmYWxzZSkKICAgICAsIG1f
Z3JhbnVsYXJpdHkoQ2hhcmFjdGVyR3JhbnVsYXJpdHkpCiAgICAgLCBtX2NhcmV0QmxpbmtUaW1l
cih0aGlzLCAmRnJhbWVTZWxlY3Rpb246OmNhcmV0QmxpbmtUaW1lckZpcmVkKQogICAgICwgbV9h
YnNDYXJldEJvdW5kc0RpcnR5KHRydWUpCkBAIC0xMzAsNiArMTMxLDExIEBACiAgICAgICAgIG1f
c2VsZWN0aW9uLnNldElzRGlyZWN0aW9uYWwodHJ1ZSk7CiB9CiAKK0ZyYW1lU2VsZWN0aW9uOjp+
RnJhbWVTZWxlY3Rpb24oKQoreworICAgIHN0b3BPYnNlcnZpbmdWaXNpYmxlU2VsZWN0aW9uQ2hh
bmdlSWZOZWNlc3NhcnkoKTsKK30KKwogRWxlbWVudCogRnJhbWVTZWxlY3Rpb246OnJvb3RFZGl0
YWJsZUVsZW1lbnRPckRvY3VtZW50RWxlbWVudCgpIGNvbnN0CiB7CiAgICAgRWxlbWVudCogc2Vs
ZWN0aW9uUm9vdCA9IG1fc2VsZWN0aW9uLnJvb3RFZGl0YWJsZUVsZW1lbnQoKTsKQEAgLTE3MTMs
MjQgKzE3MTksNDMgQEAKICAgICAgICAgc2V0U2VsZWN0aW9uKG5ld1NlbGVjdGlvbiwgZGVmYXVs
dFNldFNlbGVjdGlvbk9wdGlvbnMoKSB8IEZpcmVTZWxlY3RFdmVudCk7CiB9CiAKLWJvb2wgRnJh
bWVTZWxlY3Rpb246OnNldFNlbGVjdGVkUmFuZ2UoUmFuZ2UqIHJhbmdlLCBFQWZmaW5pdHkgYWZm
aW5pdHksIGJvb2wgY2xvc2VUeXBpbmcpCitib29sIEZyYW1lU2VsZWN0aW9uOjpzZXRTZWxlY3Rl
ZFJhbmdlKFJhbmdlKiByYW5nZSwgRUFmZmluaXR5IGFmZmluaXR5LCBib29sIGlzRGlyZWN0aW9u
YWwsIFNldFNlbGVjdGlvbk9wdGlvbnMgb3B0aW9ucykKIHsKICAgICBpZiAoIXJhbmdlIHx8ICFy
YW5nZS0+c3RhcnRDb250YWluZXIoKSB8fCAhcmFuZ2UtPmVuZENvbnRhaW5lcigpKQogICAgICAg
ICByZXR1cm4gZmFsc2U7CiAgICAgQVNTRVJUKCZyYW5nZS0+c3RhcnRDb250YWluZXIoKS0+ZG9j
dW1lbnQoKSA9PSAmcmFuZ2UtPmVuZENvbnRhaW5lcigpLT5kb2N1bWVudCgpKTsKIAotICAgIFZp
c2libGVTZWxlY3Rpb24gbmV3U2VsZWN0aW9uKHJhbmdlLCBhZmZpbml0eSk7CisgICAgRXhjZXB0
aW9uQ29kZSBlYyA9IDA7CisgICAgYm9vbCBjb2xsYXBzZWQgPSByYW5nZS0+Y29sbGFwc2VkKGVj
KTsKKyAgICBpZiAoZWMpCisgICAgICAgIHJldHVybiBmYWxzZTsKIAorICAgIFZpc2libGVTZWxl
Y3Rpb24gbmV3U2VsZWN0aW9uKHJhbmdlLCBjb2xsYXBzZWQgPyBhZmZpbml0eSA6IERPV05TVFJF
QU0sIGlzRGlyZWN0aW9uYWwpOworCiAjaWYgUExBVEZPUk0oSU9TKQogICAgIC8vIEZJWE1FOiBX
aHkgZG8gd2UgbmVlZCB0aGlzIGNoZWNrIG9ubHkgaW4gaU9TPwogICAgIGlmIChyYW5nZS0+c3Rh
cnRDb250YWluZXIoKSAmJiByYW5nZS0+ZW5kQ29udGFpbmVyKCkgJiYgbmV3U2VsZWN0aW9uLmlz
Tm9uZSgpKQogICAgICAgICByZXR1cm4gZmFsc2U7CiAjZW5kaWYKIAotICAgIHNldFNlbGVjdGlv
bihuZXdTZWxlY3Rpb24sIENsZWFyVHlwaW5nU3R5bGUgfCAoY2xvc2VUeXBpbmcgPyBDbG9zZVR5
cGluZyA6IDApKTsKKyAgICBtX2xvZ2ljYWxSYW5nZSA9IG51bGxwdHI7CisgICAgc3RvcE9ic2Vy
dmluZ1Zpc2libGVTZWxlY3Rpb25DaGFuZ2VJZk5lY2Vzc2FyeSgpOworCisgICAgc2V0U2VsZWN0
aW9uKG5ld1NlbGVjdGlvbiwgb3B0aW9ucyk7CisKKyAgICBtX2xvZ2ljYWxSYW5nZSA9IHJhbmdl
LT5jbG9uZVJhbmdlKEFTU0VSVF9OT19FWENFUFRJT04pOworICAgIHN0YXJ0T2JzZXJ2aW5nVmlz
aWJsZVNlbGVjdGlvbkNoYW5nZSgpOworCiAgICAgcmV0dXJuIHRydWU7CiB9CiAKK1Bhc3NSZWZQ
dHI8UmFuZ2U+IEZyYW1lU2VsZWN0aW9uOjpmaXJzdFJhbmdlKCkgY29uc3QKK3sKKyAgICBpZiAo
bV9sb2dpY2FsUmFuZ2UpCisgICAgICAgIHJldHVybiBtX2xvZ2ljYWxSYW5nZS0+Y2xvbmVSYW5n
ZShBU1NFUlRfTk9fRVhDRVBUSU9OKTsKKyAgICByZXR1cm4gbV9zZWxlY3Rpb24uZmlyc3RSYW5n
ZSgpOworfQorCiB2b2lkIEZyYW1lU2VsZWN0aW9uOjpmb2N1c2VkT3JBY3RpdmVTdGF0ZUNoYW5n
ZWQoKQogewogICAgIGJvb2wgYWN0aXZlQW5kRm9jdXNlZCA9IGlzRm9jdXNlZEFuZEFjdGl2ZSgp
OwpAQCAtMjE1MSw2ICsyMTc2LDMwIEBACiAgICAgdXBkYXRlRGF0YURldGVjdG9yc0ZvclNlbGVj
dGlvbigpOwogfQogCit2b2lkIEZyYW1lU2VsZWN0aW9uOjpkaWRDaGFuZ2VWaXNpYmxlU2VsZWN0
aW9uKCkKK3sKKyAgICBBU1NFUlQobV9vYnNlcnZpbmdWaXNpYmxlU2VsZWN0aW9uKTsKKyAgICAv
LyBJbnZhbGlkYXRlIHRoZSBsb2dpY2FsIHJhbmdlIHdoZW4gdGhlIHVuZGVybHlpbmcgVmlzaWJs
ZVNlbGVjdGlvbiBoYXMgY2hhbmdlZC4KKyAgICBtX2xvZ2ljYWxSYW5nZSA9IG51bGxwdHI7Cisg
ICAgbV9zZWxlY3Rpb24uY2xlYXJDaGFuZ2VPYnNlcnZlcigpOworICAgIG1fb2JzZXJ2aW5nVmlz
aWJsZVNlbGVjdGlvbiA9IGZhbHNlOworfQorCit2b2lkIEZyYW1lU2VsZWN0aW9uOjpzdGFydE9i
c2VydmluZ1Zpc2libGVTZWxlY3Rpb25DaGFuZ2UoKQoreworICAgIEFTU0VSVCghbV9vYnNlcnZp
bmdWaXNpYmxlU2VsZWN0aW9uKTsKKyAgICBtX3NlbGVjdGlvbi5zZXRDaGFuZ2VPYnNlcnZlcigq
dGhpcyk7CisgICAgbV9vYnNlcnZpbmdWaXNpYmxlU2VsZWN0aW9uID0gdHJ1ZTsKK30KKwordm9p
ZCBGcmFtZVNlbGVjdGlvbjo6c3RvcE9ic2VydmluZ1Zpc2libGVTZWxlY3Rpb25DaGFuZ2VJZk5l
Y2Vzc2FyeSgpCit7CisgICAgaWYgKG1fb2JzZXJ2aW5nVmlzaWJsZVNlbGVjdGlvbikgeworICAg
ICAgICBtX3NlbGVjdGlvbi5jbGVhckNoYW5nZU9ic2VydmVyKCk7CisgICAgICAgIG1fb2JzZXJ2
aW5nVmlzaWJsZVNlbGVjdGlvbiA9IGZhbHNlOworICAgIH0KK30KKwogI2lmbmRlZiBOREVCVUcK
IAogdm9pZCBGcmFtZVNlbGVjdGlvbjo6Zm9ybWF0Rm9yRGVidWdnZXIoY2hhciogYnVmZmVyLCB1
bnNpZ25lZCBsZW5ndGgpIGNvbnN0CkluZGV4OiBTb3VyY2UvV2ViQ29yZS9lZGl0aW5nL0ZyYW1l
U2VsZWN0aW9uLmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvZWRpdGluZy9GcmFtZVNl
bGVjdGlvbi5oCShyZXZpc2lvbiAxNzQzMjQpCisrKyBTb3VyY2UvV2ViQ29yZS9lZGl0aW5nL0Zy
YW1lU2VsZWN0aW9uLmgJKHdvcmtpbmcgY29weSkKQEAgLTEwOSw3ICsxMDksNyBAQAogICAgIFZp
c2libGVQb3NpdGlvbiBtX3Bvc2l0aW9uOwogfTsKIAotY2xhc3MgRnJhbWVTZWxlY3Rpb24gOiBw
cml2YXRlIENhcmV0QmFzZSB7CitjbGFzcyBGcmFtZVNlbGVjdGlvbiAvKiBGSU5BTCAqLyA6IHB1
YmxpYyBWaXNpYmxlU2VsZWN0aW9uOjpDaGFuZ2VPYnNlcnZlciwgcHJpdmF0ZSBDYXJldEJhc2Ug
ewogICAgIFdURl9NQUtFX05PTkNPUFlBQkxFKEZyYW1lU2VsZWN0aW9uKTsKICAgICBXVEZfTUFL
RV9GQVNUX0FMTE9DQVRFRDsKIHB1YmxpYzoKQEAgLTEzMiw2ICsxMzIsNyBAQAogICAgIH0KIAog
ICAgIFdFQkNPUkVfRVhQT1JUIGV4cGxpY2l0IEZyYW1lU2VsZWN0aW9uKEZyYW1lKiA9IG51bGxw
dHIpOworICAgIFdFQkNPUkVfRVhQT1JUIHZpcnR1YWwgfkZyYW1lU2VsZWN0aW9uKCk7CiAKICAg
ICBXRUJDT1JFX0VYUE9SVCBFbGVtZW50KiByb290RWRpdGFibGVFbGVtZW50T3JEb2N1bWVudEVs
ZW1lbnQoKSBjb25zdDsKICAgICAgCkBAIC0xNDQsNyArMTQ1LDkgQEAKIAogICAgIGNvbnN0IFZp
c2libGVTZWxlY3Rpb24mIHNlbGVjdGlvbigpIGNvbnN0IHsgcmV0dXJuIG1fc2VsZWN0aW9uOyB9
CiAgICAgV0VCQ09SRV9FWFBPUlQgdm9pZCBzZXRTZWxlY3Rpb24oY29uc3QgVmlzaWJsZVNlbGVj
dGlvbiYsIFNldFNlbGVjdGlvbk9wdGlvbnMgPSBkZWZhdWx0U2V0U2VsZWN0aW9uT3B0aW9ucygp
LCBDdXJzb3JBbGlnbk9uU2Nyb2xsID0gQWxpZ25DdXJzb3JPblNjcm9sbElmTmVlZGVkLCBUZXh0
R3JhbnVsYXJpdHkgPSBDaGFyYWN0ZXJHcmFudWxhcml0eSk7Ci0gICAgV0VCQ09SRV9FWFBPUlQg
Ym9vbCBzZXRTZWxlY3RlZFJhbmdlKFJhbmdlKiwgRUFmZmluaXR5LCBib29sIGNsb3NlVHlwaW5n
KTsKKyAgICAKKyAgICBXRUJDT1JFX0VYUE9SVCBib29sIHNldFNlbGVjdGVkUmFuZ2UoUmFuZ2Uq
LCBFQWZmaW5pdHksIGJvb2wgaXNEaXJlY3Rpb25hbCwgU2V0U2VsZWN0aW9uT3B0aW9ucyA9IENs
b3NlVHlwaW5nIHwgQ2xlYXJUeXBpbmdTdHlsZSk7CisgICAgCiAgICAgV0VCQ09SRV9FWFBPUlQg
dm9pZCBzZWxlY3RBbGwoKTsKICAgICBXRUJDT1JFX0VYUE9SVCB2b2lkIGNsZWFyKCk7CiAgICAg
dm9pZCBwcmVwYXJlRm9yRGVzdHJ1Y3Rpb24oKTsKQEAgLTE4Miw3ICsxODUsMTIgQEAKICAgICBi
b29sIGlzUmFuZ2UoKSBjb25zdCB7IHJldHVybiBtX3NlbGVjdGlvbi5pc1JhbmdlKCk7IH0KICAg
ICBib29sIGlzQ2FyZXRPclJhbmdlKCkgY29uc3QgeyByZXR1cm4gbV9zZWxlY3Rpb24uaXNDYXJl
dE9yUmFuZ2UoKTsgfQogICAgIGJvb2wgaXNBbGwoRWRpdGluZ0JvdW5kYXJ5Q3Jvc3NpbmdSdWxl
IHJ1bGUgPSBDYW5ub3RDcm9zc0VkaXRpbmdCb3VuZGFyeSkgY29uc3QgeyByZXR1cm4gbV9zZWxl
Y3Rpb24uaXNBbGwocnVsZSk7IH0KKyAgICBib29sIGlzRGlyZWN0aW9uYWwoKSBjb25zdCB7IHJl
dHVybiBtX3NlbGVjdGlvbi5pc0RpcmVjdGlvbmFsKCk7IH0KICAgICAKKyAgICAvLyBJZiB0aGlz
IEZyYW1lU2VsZWN0aW9uIGhhcyBhIGxvZ2ljYWwgcmFuZ2Ugd2hpY2ggaXMgc3RpbGwgdmFsaWQs
IHRoaXMgZnVuY3Rpb24gcmV0dXJuIGl0cyBjbG9uZS4gT3RoZXJ3aXNlLAorICAgIC8vIHRoZSBy
ZXR1cm4gdmFsdWUgZnJvbSB1bmRlcmx5aW5nIFZpc2libGVTZWxlY3Rpb24ncyBmaXJzdFJhbmdl
KCkgaXMgcmV0dXJuZWQuCisgICAgUGFzc1JlZlB0cjxSYW5nZT4gZmlyc3RSYW5nZSgpIGNvbnN0
OworCiAgICAgUGFzc1JlZlB0cjxSYW5nZT4gdG9Ob3JtYWxpemVkUmFuZ2UoKSBjb25zdCB7IHJl
dHVybiBtX3NlbGVjdGlvbi50b05vcm1hbGl6ZWRSYW5nZSgpOyB9CiAKICAgICB2b2lkIGRlYnVn
UmVuZGVyZXIoUmVuZGVyT2JqZWN0KiwgYm9vbCBzZWxlY3RlZCkgY29uc3Q7CkBAIC0yNjgsNiAr
Mjc2LDkgQEAKICAgICBib29sIHNob3VsZFNob3dCbG9ja0N1cnNvcigpIGNvbnN0IHsgcmV0dXJu
IG1fc2hvdWxkU2hvd0Jsb2NrQ3Vyc29yOyB9CiAgICAgdm9pZCBzZXRTaG91bGRTaG93QmxvY2tD
dXJzb3IoYm9vbCk7CiAKKyAgICAvLyBWaXNpYmxlU2VsZWN0aW9uOjpDaGFuZ2VPYnNlcnZlciBp
bnRlcmZhY2UuCisgICAgdmlydHVhbCB2b2lkIGRpZENoYW5nZVZpc2libGVTZWxlY3Rpb24oKSAv
KiBPVkVSUklERSAqLyA7CisKIHByaXZhdGU6CiAgICAgZW51bSBFUG9zaXRpb25UeXBlIHsgU1RB
UlQsIEVORCwgQkFTRSwgRVhURU5UIH07CiAKQEAgLTMxNywxNCArMzI4LDIzIEBACiAKICAgICBi
b29sIGRpc3BhdGNoU2VsZWN0U3RhcnQoKTsKIAorICAgIHZvaWQgc3RhcnRPYnNlcnZpbmdWaXNp
YmxlU2VsZWN0aW9uQ2hhbmdlKCk7CisgICAgdm9pZCBzdG9wT2JzZXJ2aW5nVmlzaWJsZVNlbGVj
dGlvbkNoYW5nZUlmTmVjZXNzYXJ5KCk7CisKICAgICBGcmFtZSogbV9mcmFtZTsKIAogICAgIExh
eW91dFVuaXQgbV94UG9zRm9yVmVydGljYWxBcnJvd05hdmlnYXRpb247CiAKICAgICBWaXNpYmxl
U2VsZWN0aW9uIG1fc2VsZWN0aW9uOworICAgIGJvb2wgbV9vYnNlcnZpbmdWaXNpYmxlU2VsZWN0
aW9uOwogICAgIFZpc2libGVQb3NpdGlvbiBtX29yaWdpbmFsQmFzZTsgLy8gVXNlZCB0byBzdG9y
ZSBiYXNlIGJlZm9yZSB0aGUgYWRqdXN0bWVudCBhdCBiaWRpIGJvdW5kYXJ5CiAgICAgVGV4dEdy
YW51bGFyaXR5IG1fZ3JhbnVsYXJpdHk7CiAKKyAgICAvLyBUaGUgcmFuZ2Ugc3BlY2lmaWVkIGJ5
IHRoZSB1c2VyLCB3aGljaCBtYXkgbm90IGJlIHZpc3VhbGx5IGNhbm9uaWNhbGl6ZWQgKGhlbmNl
ICJsb2dpY2FsIikuCisgICAgLy8gVGhpcyB3aWxsIGJlIGludmFsaWRhdGVkIGlmIHRoZSB1bmRl
cmx5aW5nIFZpc2libGVTZWxlY3Rpb24gY2hhbmdlcy4gSWYgdGhhdCBoYXBwZW5zLCB0aGlzIHZh
cmlhYmxlIHdpbGwKKyAgICAvLyBiZWNvbWUgbnVsbCwgaW4gd2hpY2ggY2FzZSBsb2dpY2FsIHBv
c2l0aW9ucyA9PSB2aXNpYmxlIHBvc2l0aW9ucy4KKyAgICBSZWZQdHI8UmFuZ2U+IG1fbG9naWNh
bFJhbmdlOworCiAgICAgUmVmUHRyPE5vZGU+IG1fcHJldmlvdXNDYXJldE5vZGU7IC8vIFRoZSBs
YXN0IG5vZGUgd2hpY2ggcGFpbnRlZCB0aGUgY2FyZXQuIFJldGFpbmVkIGZvciBjbGVhcmluZyB0
aGUgb2xkIGNhcmV0IHdoZW4gaXQgbW92ZXMuCiAKICAgICBSZWZQdHI8RWRpdGluZ1N0eWxlPiBt
X3R5cGluZ1N0eWxlOwpJbmRleDogU291cmNlL1dlYkNvcmUvZWRpdGluZy9WaXNpYmxlUG9zaXRp
b24uY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL2VkaXRpbmcvVmlzaWJsZVBvc2l0
aW9uLmNwcAkocmV2aXNpb24gMTc0MzI0KQorKysgU291cmNlL1dlYkNvcmUvZWRpdGluZy9WaXNp
YmxlUG9zaXRpb24uY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0xLDYgKzEsNyBAQAogLyoKICAqIENv
cHlyaWdodCAoQykgMjAwNCwgMjAwNSwgMjAwNiwgMjAwNywgMjAwOCwgMjAwOSBBcHBsZSBJbmMu
IEFsbCByaWdodHMgcmVzZXJ2ZWQuCiAgKiBQb3J0aW9ucyBDb3B5cmlnaHQgKGMpIDIwMTEgTW90
b3JvbGEgTW9iaWxpdHksIEluYy4gIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKiBQb3J0aW9ucyBD
b3B5cmlnaHQgKGMpIDIwMTQgRGF2aWQgQS4gR2F0d29vZC4gIEFsbCByaWdodHMgcmVzZXJ2ZWQu
CiAgKgogICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jt
cywgd2l0aCBvciB3aXRob3V0CiAgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlk
ZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKQEAgLTM5LDYgKzQwLDcgQEAKICNpbmNs
dWRlICJUZXh0LmgiCiAjaW5jbHVkZSAiVmlzaWJsZVVuaXRzLmgiCiAjaW5jbHVkZSAiaHRtbGVk
aXRpbmcuaCIKKyNpbmNsdWRlICJQc2V1ZG9FbGVtZW50LmgiCiAjaW5jbHVkZSA8c3RkaW8uaD4K
ICNpbmNsdWRlIDx3dGYvdGV4dC9DU3RyaW5nLmg+CiAKQEAgLTExMiw2ICsxMTQsOCBAQAogCiAg
ICAgUG9zaXRpb24gZG93bnN0cmVhbVN0YXJ0ID0gcC5kb3duc3RyZWFtKCk7CiAgICAgVGV4dERp
cmVjdGlvbiBwcmltYXJ5RGlyZWN0aW9uID0gcC5wcmltYXJ5RGlyZWN0aW9uKCk7CisgICAgCisg
ICAgUmVuZGVyT2JqZWN0ICpyZW5kZXJlcklmTGFzdFJlbmRlcmVyV2FzUHNldWRvRWxlbWVudCA9
IE5VTEw7CiAKICAgICB3aGlsZSAodHJ1ZSkgewogICAgICAgICBJbmxpbmVCb3gqIGJveDsKQEAg
LTEyMiwyNSArMTI2LDg0IEBACiAKICAgICAgICAgUmVuZGVyT2JqZWN0KiByZW5kZXJlciA9ICZi
b3gtPnJlbmRlcmVyKCk7CiAKKyAgICAgICAgYm9vbCBza2lwQ3VycmVudCA9IHRydWU7CisgICAg
ICAgIAorICAgICAgICBOb2RlICpsYXN0Tm9kZSA9IE5VTEw7CisgICAgICAgIAogICAgICAgICB3
aGlsZSAodHJ1ZSkgeworICAgICAgICAgICAgYm9vbCBlbGVtZW50Q2hhbmdlZCA9IGZhbHNlOwor
ICAgICAgICAgICAgaWYgKHJlbmRlcmVyLT5ub2RlKCkgJiYgIXJlbmRlcmVyLT5ub2RlKCktPmlz
RG9jdW1lbnROb2RlKCkpIHsKKyAgICAgICAgICAgICAgICBpZiAobGFzdE5vZGUgJiYgbGFzdE5v
ZGUgIT0gcmVuZGVyZXItPm5vZGUoKSkgeworICAgICAgICAgICAgICAgICAgICBza2lwQ3VycmVu
dCA9IGZhbHNlOworICAgICAgICAgICAgICAgICAgICBlbGVtZW50Q2hhbmdlZCA9IHRydWU7Cisg
ICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgICAgIGxhc3ROb2RlID0gcmVuZGVyZXItPm5v
ZGUoKTsKKyAgICAgICAgICAgICAgICAgICAgCisgICAgICAgICAgICB9CisgICAgICAgICAgICAK
ICAgICAgICAgICAgIGlmICgocmVuZGVyZXItPmlzUmVwbGFjZWQoKSB8fCByZW5kZXJlci0+aXNC
UigpKSAmJiBvZmZzZXQgPT0gYm94LT5jYXJldFJpZ2h0bW9zdE9mZnNldCgpKQogICAgICAgICAg
ICAgICAgIHJldHVybiBib3gtPmlzTGVmdFRvUmlnaHREaXJlY3Rpb24oKSA/IHByZXZpb3VzVmlz
dWFsbHlEaXN0aW5jdENhbmRpZGF0ZShtX2RlZXBQb3NpdGlvbikgOiBuZXh0VmlzdWFsbHlEaXN0
aW5jdENhbmRpZGF0ZShtX2RlZXBQb3NpdGlvbik7CiAKICAgICAgICAgICAgIGlmICghcmVuZGVy
ZXItPm5vZGUoKSkgeworICAgICAgICAgICAgICAgIGlmIChyZW5kZXJlci0+cGFyZW50KCktPmlz
QmVmb3JlQ29udGVudCgpKSB7CisgICAgICAgICAgICAgICAgICAgIC8qIFRoaXMgbWFnaWMgbGV0
cyB1cyB3YWxrIGludG8gZW1wdHkgZWxlbWVudHMgaWYgdGhleSBoYXZlCisgICAgICAgICAgICAg
ICAgICAgICAgIHBzZXVkby1lbGVtZW50cyB0byBtYWtlIHRoZW0gdmlzdWFsbHkgZGlzdGluY3Qu
ICBXaXRob3V0CisgICAgICAgICAgICAgICAgICAgICAgIGl0LCB5b3UnZCBvbmx5IHJlYWNoIHRo
b3NlIGVsZW1lbnRzIGlmIHRoZSBlbGVtZW50IGhhZAorICAgICAgICAgICAgICAgICAgICAgICBh
IGJhY2tncm91bmQgb3Igb3RoZXIgY29udGVudCB0aGF0IHJlcXVpcmVkIHJlbmRlcmluZy4KKyAg
ICAgICAgICAgICAgICAgICAgICovCisgICAgICAgICAgICAgICAgICAgIFJlbmRlck9iamVjdCAq
cGFyZW50UmVuZGVyZXIgPSByZW5kZXJlci0+cGFyZW50KCk7CisgICAgICAgICAgICAgICAgICAg
IE5vZGUgKnBzZXVkb0VsZW1lbnROb2RlID0gcGFyZW50UmVuZGVyZXItPm5vZGUoKTsKKyAgICAg
ICAgICAgICAgICAgICAgCisgICAgICAgICAgICAgICAgICAgIGlmIChwc2V1ZG9FbGVtZW50Tm9k
ZSkgeworICAgICAgICAgICAgICAgICAgICAgICAgQVNTRVJUKHBzZXVkb0VsZW1lbnROb2RlLT5p
c1BzZXVkb0VsZW1lbnQoKSk7CisgICAgICAgICAgICAgICAgICAgICAgICBQc2V1ZG9FbGVtZW50
ICpwZSA9IGRvd25jYXN0PFBzZXVkb0VsZW1lbnQ+KHBzZXVkb0VsZW1lbnROb2RlKTsKKyAgICAg
ICAgICAgICAgICAgICAgICAgIEVsZW1lbnQgKmVsdCA9IHBlLT5ob3N0RWxlbWVudCgpOworICAg
ICAgICAgICAgICAgICAgICAgICAgCisgICAgICAgICAgICAgICAgICAgICAgICByZW5kZXJlcklm
TGFzdFJlbmRlcmVyV2FzUHNldWRvRWxlbWVudCA9IHBhcmVudFJlbmRlcmVyOworICAgICAgICAg
ICAgICAgICAgICAgICAgCisgICAgICAgICAgICAgICAgICAgICAgICBpZiAoIWVsdC0+Zmlyc3RD
aGlsZCgpKSB7CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgcmVuZGVyZXIgPSByZW5kZXJl
ci0+cGFyZW50KCk7CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgc2tpcEN1cnJlbnQgPSBm
YWxzZTsKKworICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbnRpbnVlOworICAgICAgICAg
ICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICAgICAg
fSBlbHNlIHsKKyAgICAgICAgICAgICAgICAgICAgcmVuZGVyZXJJZkxhc3RSZW5kZXJlcldhc1Bz
ZXVkb0VsZW1lbnQgPSBOVUxMOworICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgICAgICBi
b3ggPSBib3gtPnByZXZMZWFmQ2hpbGQoKTsKLSAgICAgICAgICAgICAgICBpZiAoIWJveCkKKyAg
ICAgICAgICAgICAgICBpZiAoIWJveCkgeworICAgICAgICAgICAgICAgICAgICAvKiBJZiB0aGUg
cmVuZGVyZXIgdHJlZSB3YWxrIGVuY291bnRlcnMgYSA6OmJlZm9yZQorICAgICAgICAgICAgICAg
ICAgICAgICBwc2V1ZG8tZWxlbWVudCByaWdodCBiZWZvcmUgaXQgaGl0cyB0aGUgbGFzdAorICAg
ICAgICAgICAgICAgICAgICAgICBsZWFmIGNoaWxkLCBjb25zaWRlciB0aGUgcG9pbnQgYmVmb3Jl
IHRoYXQKKyAgICAgICAgICAgICAgICAgICAgICAgcHNldWRvLWVsZW1lbnQgdG8gYmUgYSB2YWxp
ZCBpbnNlcnRpb24gcG9pbnQuICBUaGlzCisgICAgICAgICAgICAgICAgICAgICAgIHRha2VzIGNh
cmUgb2YgdGhlIHNwZWNpYWwgY2FzZSB3aGVyZSB0aGUgdXNlcgorICAgICAgICAgICAgICAgICAg
ICAgICBtb3ZlcyB0byB0aGUgbGVmdCBmcm9tIHRoZSBmaXJzdCB0ZXh0IG5vZGUgaW4gdGhlCisg
ICAgICAgICAgICAgICAgICAgICAgIGVkaXRhYmxlIGNvbnRlbnQgcmVnaW9uLCBhbGxvd2luZyBu
YXZpZ2F0aW9uCisgICAgICAgICAgICAgICAgICAgICAgIHRvIGluc2VydGlvbiBwb2ludHMgYmVm
b3JlIHRoYXQgdGV4dCBub2RlJ3MKKyAgICAgICAgICAgICAgICAgICAgICAgZW5jbG9zaW5nIGVs
ZW1lbnRzLgorICAgICAgICAgICAgICAgICAgICAgKi8KKyAgICAgICAgICAgICAgICAgICAgaWYg
KHJlbmRlcmVySWZMYXN0UmVuZGVyZXJXYXNQc2V1ZG9FbGVtZW50KSB7CisgICAgICAgICAgICAg
ICAgICAgICAgICByZW5kZXJlciA9IHJlbmRlcmVySWZMYXN0UmVuZGVyZXJXYXNQc2V1ZG9FbGVt
ZW50OworICAgICAgICAgICAgICAgICAgICAgICAgb2Zmc2V0ID0gLTE7CisgICAgICAgICAgICAg
ICAgICAgICAgICBicmVhazsKKyAgICAgICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgICAg
ICAgICByZXR1cm4gcHJpbWFyeURpcmVjdGlvbiA9PSBMVFIgPyBwcmV2aW91c1Zpc3VhbGx5RGlz
dGluY3RDYW5kaWRhdGUobV9kZWVwUG9zaXRpb24pIDogbmV4dFZpc3VhbGx5RGlzdGluY3RDYW5k
aWRhdGUobV9kZWVwUG9zaXRpb24pOworICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgICAg
ICByZW5kZXJlciA9ICZib3gtPnJlbmRlcmVyKCk7CiAgICAgICAgICAgICAgICAgb2Zmc2V0ID0g
Ym94LT5jYXJldFJpZ2h0bW9zdE9mZnNldCgpOwogICAgICAgICAgICAgICAgIGNvbnRpbnVlOwog
ICAgICAgICAgICAgfQogCi0gICAgICAgICAgICBvZmZzZXQgPSBib3gtPmlzTGVmdFRvUmlnaHRE
aXJlY3Rpb24oKSA/IHJlbmRlcmVyLT5wcmV2aW91c09mZnNldChvZmZzZXQpIDogcmVuZGVyZXIt
Pm5leHRPZmZzZXQob2Zmc2V0KTsKLQorICAgICAgICAgICAgaWYgKHNraXBDdXJyZW50KSB7Cisg
ICAgICAgICAgICAgICAgb2Zmc2V0ID0gYm94LT5pc0xlZnRUb1JpZ2h0RGlyZWN0aW9uKCkgPyBy
ZW5kZXJlci0+cHJldmlvdXNPZmZzZXQob2Zmc2V0KSA6IHJlbmRlcmVyLT5uZXh0T2Zmc2V0KG9m
ZnNldCk7CisgICAgICAgICAgICB9CisgICAgICAgICAgICBza2lwQ3VycmVudCA9IHRydWU7Cisg
ICAgICAgICAgICAKICAgICAgICAgICAgIGludCBjYXJldE1pbk9mZnNldCA9IGJveC0+Y2FyZXRN
aW5PZmZzZXQoKTsKICAgICAgICAgICAgIGludCBjYXJldE1heE9mZnNldCA9IGJveC0+Y2FyZXRN
YXhPZmZzZXQoKTsKIAotICAgICAgICAgICAgaWYgKG9mZnNldCA+IGNhcmV0TWluT2Zmc2V0ICYm
IG9mZnNldCA8IGNhcmV0TWF4T2Zmc2V0KQorICAgICAgICAgICAgaWYgKG9mZnNldCA+IGNhcmV0
TWluT2Zmc2V0ICYmIChvZmZzZXQgPCBjYXJldE1heE9mZnNldCB8fCAob2Zmc2V0ID09IGNhcmV0
TWF4T2Zmc2V0ICYmIGVsZW1lbnRDaGFuZ2VkKSkpCiAgICAgICAgICAgICAgICAgYnJlYWs7CiAK
ICAgICAgICAgICAgIGlmIChib3gtPmlzTGVmdFRvUmlnaHREaXJlY3Rpb24oKSA/IG9mZnNldCA8
IGNhcmV0TWluT2Zmc2V0IDogb2Zmc2V0ID4gY2FyZXRNYXhPZmZzZXQpIHsKQEAgLTE2Myw4NyAr
MjI2LDEwNiBAQAogICAgICAgICAgICAgICAgIGJveCA9IHByZXZCb3g7CiAgICAgICAgICAgICAg
ICAgcmVuZGVyZXIgPSAmYm94LT5yZW5kZXJlcigpOwogICAgICAgICAgICAgICAgIG9mZnNldCA9
IHByZXZCb3gtPmNhcmV0UmlnaHRtb3N0T2Zmc2V0KCk7CisgICAgICAgICAgICAgICAgCisgICAg
ICAgICAgICAgICAgLy8gc2tpcEN1cnJlbnQgc2hvdWxkIGJlIHRydWUgaWYgYW5kIG9ubHkgaWYg
d2UgZG9uJ3QgZW5jb3VudGVyIGFueQorICAgICAgICAgICAgICAgIC8vIHBzZXVkb2VsZW1lbnRz
IG9yIGVsZW1lbnQgYm91bmRhcmllcy4KKyAgICAgICAgICAgICAgICBza2lwQ3VycmVudCA9IHRy
dWU7CisKICAgICAgICAgICAgICAgICBjb250aW51ZTsKICAgICAgICAgICAgIH0KIAotICAgICAg
ICAgICAgQVNTRVJUKG9mZnNldCA9PSBib3gtPmNhcmV0TGVmdG1vc3RPZmZzZXQoKSk7CisgICAg
ICAgICAgICAvLyBDaGFuZ2VkIGFzc2VydCB0byBpZiwgYmVjYXVzZSBpdCBjb3VsZCBhbHNvIGJl
IHRoZQorICAgICAgICAgICAgLy8gcmlnaHRtb3N0IG9mZnNldC4KKyAgICAgICAgICAgIGlmIChv
ZmZzZXQgPT0gYm94LT5jYXJldExlZnRtb3N0T2Zmc2V0KCkpIHsKIAotICAgICAgICAgICAgdW5z
aWduZWQgY2hhciBsZXZlbCA9IGJveC0+YmlkaUxldmVsKCk7Ci0gICAgICAgICAgICBJbmxpbmVC
b3gqIHByZXZCb3ggPSBib3gtPnByZXZMZWFmQ2hpbGQoKTsKKyAgICAgICAgICAgICAgICB1bnNp
Z25lZCBjaGFyIGxldmVsID0gYm94LT5iaWRpTGV2ZWwoKTsKKyAgICAgICAgICAgICAgICBJbmxp
bmVCb3gqIHByZXZCb3ggPSBib3gtPnByZXZMZWFmQ2hpbGQoKTsKIAotICAgICAgICAgICAgaWYg
KGJveC0+ZGlyZWN0aW9uKCkgPT0gcHJpbWFyeURpcmVjdGlvbikgewotICAgICAgICAgICAgICAg
IGlmICghcHJldkJveCkgewotICAgICAgICAgICAgICAgICAgICBJbmxpbmVCb3gqIGxvZ2ljYWxT
dGFydCA9IDA7Ci0gICAgICAgICAgICAgICAgICAgIGlmIChwcmltYXJ5RGlyZWN0aW9uID09IExU
UiA/IGJveC0+cm9vdCgpLmdldExvZ2ljYWxTdGFydEJveFdpdGhOb2RlKGxvZ2ljYWxTdGFydCkg
OiBib3gtPnJvb3QoKS5nZXRMb2dpY2FsRW5kQm94V2l0aE5vZGUobG9naWNhbFN0YXJ0KSkgewot
ICAgICAgICAgICAgICAgICAgICAgICAgYm94ID0gbG9naWNhbFN0YXJ0OwotICAgICAgICAgICAg
ICAgICAgICAgICAgcmVuZGVyZXIgPSAmYm94LT5yZW5kZXJlcigpOwotICAgICAgICAgICAgICAg
ICAgICAgICAgb2Zmc2V0ID0gcHJpbWFyeURpcmVjdGlvbiA9PSBMVFIgPyBib3gtPmNhcmV0TWlu
T2Zmc2V0KCkgOiBib3gtPmNhcmV0TWF4T2Zmc2V0KCk7CisgICAgICAgICAgICAgICAgaWYgKGJv
eC0+ZGlyZWN0aW9uKCkgPT0gcHJpbWFyeURpcmVjdGlvbikgeworICAgICAgICAgICAgICAgICAg
ICBpZiAoIXByZXZCb3gpIHsKKyAgICAgICAgICAgICAgICAgICAgICAgIElubGluZUJveCogbG9n
aWNhbFN0YXJ0ID0gMDsKKyAgICAgICAgICAgICAgICAgICAgICAgIGlmIChwcmltYXJ5RGlyZWN0
aW9uID09IExUUiA/IGJveC0+cm9vdCgpLmdldExvZ2ljYWxTdGFydEJveFdpdGhOb2RlKGxvZ2lj
YWxTdGFydCkgOiBib3gtPnJvb3QoKS5nZXRMb2dpY2FsRW5kQm94V2l0aE5vZGUobG9naWNhbFN0
YXJ0KSkgeworICAgICAgICAgICAgICAgICAgICAgICAgICAgIGJveCA9IGxvZ2ljYWxTdGFydDsK
KyAgICAgICAgICAgICAgICAgICAgICAgICAgICByZW5kZXJlciA9ICZib3gtPnJlbmRlcmVyKCk7
CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgb2Zmc2V0ID0gcHJpbWFyeURpcmVjdGlvbiA9
PSBMVFIgPyBib3gtPmNhcmV0TWluT2Zmc2V0KCkgOiBib3gtPmNhcmV0TWF4T2Zmc2V0KCk7Cisg
ICAgICAgICAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICAgICAgICAgICAgICBicmVhazsK
ICAgICAgICAgICAgICAgICAgICAgfQotICAgICAgICAgICAgICAgICAgICBicmVhazsKLSAgICAg
ICAgICAgICAgICB9Ci0gICAgICAgICAgICAgICAgaWYgKHByZXZCb3gtPmJpZGlMZXZlbCgpID49
IGxldmVsKQotICAgICAgICAgICAgICAgICAgICBicmVhazsKKyAgICAgICAgICAgICAgICAgICAg
aWYgKHByZXZCb3gtPmJpZGlMZXZlbCgpID49IGxldmVsKQorICAgICAgICAgICAgICAgICAgICAg
ICAgYnJlYWs7CiAKLSAgICAgICAgICAgICAgICBsZXZlbCA9IHByZXZCb3gtPmJpZGlMZXZlbCgp
OworICAgICAgICAgICAgICAgICAgICBsZXZlbCA9IHByZXZCb3gtPmJpZGlMZXZlbCgpOwogCi0g
ICAgICAgICAgICAgICAgSW5saW5lQm94KiBuZXh0Qm94ID0gYm94OwotICAgICAgICAgICAgICAg
IGRvIHsKLSAgICAgICAgICAgICAgICAgICAgbmV4dEJveCA9IG5leHRCb3gtPm5leHRMZWFmQ2hp
bGQoKTsKLSAgICAgICAgICAgICAgICB9IHdoaWxlIChuZXh0Qm94ICYmIG5leHRCb3gtPmJpZGlM
ZXZlbCgpID4gbGV2ZWwpOworICAgICAgICAgICAgICAgICAgICBJbmxpbmVCb3gqIG5leHRCb3gg
PSBib3g7CisgICAgICAgICAgICAgICAgICAgIGRvIHsKKyAgICAgICAgICAgICAgICAgICAgICAg
IG5leHRCb3ggPSBuZXh0Qm94LT5uZXh0TGVhZkNoaWxkKCk7CisgICAgICAgICAgICAgICAgICAg
IH0gd2hpbGUgKG5leHRCb3ggJiYgbmV4dEJveC0+YmlkaUxldmVsKCkgPiBsZXZlbCk7CiAKLSAg
ICAgICAgICAgICAgICBpZiAobmV4dEJveCAmJiBuZXh0Qm94LT5iaWRpTGV2ZWwoKSA9PSBsZXZl
bCkKLSAgICAgICAgICAgICAgICAgICAgYnJlYWs7CisgICAgICAgICAgICAgICAgICAgIGlmIChu
ZXh0Qm94ICYmIG5leHRCb3gtPmJpZGlMZXZlbCgpID09IGxldmVsKQorICAgICAgICAgICAgICAg
ICAgICAgICAgYnJlYWs7CiAKLSAgICAgICAgICAgICAgICBib3ggPSBwcmV2Qm94OwotICAgICAg
ICAgICAgICAgIHJlbmRlcmVyID0gJmJveC0+cmVuZGVyZXIoKTsKLSAgICAgICAgICAgICAgICBv
ZmZzZXQgPSBib3gtPmNhcmV0UmlnaHRtb3N0T2Zmc2V0KCk7Ci0gICAgICAgICAgICAgICAgaWYg
KGJveC0+ZGlyZWN0aW9uKCkgPT0gcHJpbWFyeURpcmVjdGlvbikKLSAgICAgICAgICAgICAgICAg
ICAgYnJlYWs7Ci0gICAgICAgICAgICAgICAgY29udGludWU7Ci0gICAgICAgICAgICB9CisgICAg
ICAgICAgICAgICAgICAgIGJveCA9IHByZXZCb3g7CisgICAgICAgICAgICAgICAgICAgIHJlbmRl
cmVyID0gJmJveC0+cmVuZGVyZXIoKTsKKyAgICAgICAgICAgICAgICAgICAgb2Zmc2V0ID0gYm94
LT5jYXJldFJpZ2h0bW9zdE9mZnNldCgpOworICAgICAgICAgICAgICAgICAgICBpZiAoYm94LT5k
aXJlY3Rpb24oKSA9PSBwcmltYXJ5RGlyZWN0aW9uKQorICAgICAgICAgICAgICAgICAgICAgICAg
YnJlYWs7CisgICAgICAgICAgICAgICAgICAgIGNvbnRpbnVlOworICAgICAgICAgICAgICAgIH0K
IAotICAgICAgICAgICAgd2hpbGUgKHByZXZCb3ggJiYgIXByZXZCb3gtPnJlbmRlcmVyKCkubm9k
ZSgpKQotICAgICAgICAgICAgICAgIHByZXZCb3ggPSBwcmV2Qm94LT5wcmV2TGVhZkNoaWxkKCk7
CisgICAgICAgICAgICAgICAgd2hpbGUgKHByZXZCb3ggJiYgIXByZXZCb3gtPnJlbmRlcmVyKCku
bm9kZSgpKQorICAgICAgICAgICAgICAgICAgICBwcmV2Qm94ID0gcHJldkJveC0+cHJldkxlYWZD
aGlsZCgpOwogCi0gICAgICAgICAgICBpZiAocHJldkJveCkgewotICAgICAgICAgICAgICAgIGJv
eCA9IHByZXZCb3g7Ci0gICAgICAgICAgICAgICAgcmVuZGVyZXIgPSAmYm94LT5yZW5kZXJlcigp
OwotICAgICAgICAgICAgICAgIG9mZnNldCA9IGJveC0+Y2FyZXRSaWdodG1vc3RPZmZzZXQoKTsK
LSAgICAgICAgICAgICAgICBpZiAoYm94LT5iaWRpTGV2ZWwoKSA+IGxldmVsKSB7Ci0gICAgICAg
ICAgICAgICAgICAgIGRvIHsKLSAgICAgICAgICAgICAgICAgICAgICAgIHByZXZCb3ggPSBwcmV2
Qm94LT5wcmV2TGVhZkNoaWxkKCk7Ci0gICAgICAgICAgICAgICAgICAgIH0gd2hpbGUgKHByZXZC
b3ggJiYgcHJldkJveC0+YmlkaUxldmVsKCkgPiBsZXZlbCk7CisgICAgICAgICAgICAgICAgaWYg
KHByZXZCb3gpIHsKKyAgICAgICAgICAgICAgICAgICAgYm94ID0gcHJldkJveDsKKyAgICAgICAg
ICAgICAgICAgICAgcmVuZGVyZXIgPSAmYm94LT5yZW5kZXJlcigpOworICAgICAgICAgICAgICAg
ICAgICBvZmZzZXQgPSBib3gtPmNhcmV0UmlnaHRtb3N0T2Zmc2V0KCk7CisgICAgICAgICAgICAg
ICAgICAgIGlmIChib3gtPmJpZGlMZXZlbCgpID4gbGV2ZWwpIHsKKyAgICAgICAgICAgICAgICAg
ICAgICAgIGRvIHsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICBwcmV2Qm94ID0gcHJldkJv
eC0+cHJldkxlYWZDaGlsZCgpOworICAgICAgICAgICAgICAgICAgICAgICAgfSB3aGlsZSAocHJl
dkJveCAmJiBwcmV2Qm94LT5iaWRpTGV2ZWwoKSA+IGxldmVsKTsKIAotICAgICAgICAgICAgICAg
ICAgICBpZiAoIXByZXZCb3ggfHwgcHJldkJveC0+YmlkaUxldmVsKCkgPCBsZXZlbCkKLSAgICAg
ICAgICAgICAgICAgICAgICAgIGNvbnRpbnVlOwotICAgICAgICAgICAgICAgIH0KLSAgICAgICAg
ICAgIH0gZWxzZSB7Ci0gICAgICAgICAgICAgICAgLy8gVHJhaWxpbmcgZWRnZSBvZiBhIHNlY29u
ZGFyeSBydW4uIFNldCB0byB0aGUgbGVhZGluZyBlZGdlIG9mIHRoZSBlbnRpcmUgcnVuLgotICAg
ICAgICAgICAgICAgIHdoaWxlICh0cnVlKSB7Ci0gICAgICAgICAgICAgICAgICAgIHdoaWxlIChJ
bmxpbmVCb3gqIG5leHRCb3ggPSBib3gtPm5leHRMZWFmQ2hpbGQoKSkgewotICAgICAgICAgICAg
ICAgICAgICAgICAgaWYgKG5leHRCb3gtPmJpZGlMZXZlbCgpIDwgbGV2ZWwpCi0gICAgICAgICAg
ICAgICAgICAgICAgICAgICAgYnJlYWs7Ci0gICAgICAgICAgICAgICAgICAgICAgICBib3ggPSBu
ZXh0Qm94OworICAgICAgICAgICAgICAgICAgICAgICAgaWYgKCFwcmV2Qm94IHx8IHByZXZCb3gt
PmJpZGlMZXZlbCgpIDwgbGV2ZWwpCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgY29udGlu
dWU7CiAgICAgICAgICAgICAgICAgICAgIH0KLSAgICAgICAgICAgICAgICAgICAgaWYgKGJveC0+
YmlkaUxldmVsKCkgPT0gbGV2ZWwpCi0gICAgICAgICAgICAgICAgICAgICAgICBicmVhazsKLSAg
ICAgICAgICAgICAgICAgICAgbGV2ZWwgPSBib3gtPmJpZGlMZXZlbCgpOwotICAgICAgICAgICAg
ICAgICAgICB3aGlsZSAoSW5saW5lQm94KiBwcmV2Qm94ID0gYm94LT5wcmV2TGVhZkNoaWxkKCkp
IHsKLSAgICAgICAgICAgICAgICAgICAgICAgIGlmIChwcmV2Qm94LT5iaWRpTGV2ZWwoKSA8IGxl
dmVsKQorICAgICAgICAgICAgICAgIH0gZWxzZSB7CisgICAgICAgICAgICAgICAgICAgIC8vIFRy
YWlsaW5nIGVkZ2Ugb2YgYSBzZWNvbmRhcnkgcnVuLiBTZXQgdG8gdGhlIGxlYWRpbmcgZWRnZSBv
ZiB0aGUgZW50aXJlIHJ1bi4KKyAgICAgICAgICAgICAgICAgICAgd2hpbGUgKHRydWUpIHsKKyAg
ICAgICAgICAgICAgICAgICAgICAgIHdoaWxlIChJbmxpbmVCb3gqIG5leHRCb3ggPSBib3gtPm5l
eHRMZWFmQ2hpbGQoKSkgeworICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlmIChuZXh0Qm94
LT5iaWRpTGV2ZWwoKSA8IGxldmVsKQorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBi
cmVhazsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICBib3ggPSBuZXh0Qm94OworICAgICAg
ICAgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgICAgICAgICAgICAgaWYgKGJveC0+Ymlk
aUxldmVsKCkgPT0gbGV2ZWwpCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgYnJlYWs7Ci0g
ICAgICAgICAgICAgICAgICAgICAgICBib3ggPSBwcmV2Qm94OworICAgICAgICAgICAgICAgICAg
ICAgICAgbGV2ZWwgPSBib3gtPmJpZGlMZXZlbCgpOworICAgICAgICAgICAgICAgICAgICAgICAg
d2hpbGUgKElubGluZUJveCogcHJldkJveCA9IGJveC0+cHJldkxlYWZDaGlsZCgpKSB7CisgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgaWYgKHByZXZCb3gtPmJpZGlMZXZlbCgpIDwgbGV2ZWwp
CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGJyZWFrOworICAgICAgICAgICAgICAg
ICAgICAgICAgICAgIGJveCA9IHByZXZCb3g7CisgICAgICAgICAgICAgICAgICAgICAgICB9Cisg
ICAgICAgICAgICAgICAgICAgICAgICBpZiAoYm94LT5iaWRpTGV2ZWwoKSA9PSBsZXZlbCkKKyAg
ICAgICAgICAgICAgICAgICAgICAgICAgICBicmVhazsKKyAgICAgICAgICAgICAgICAgICAgICAg
IGxldmVsID0gYm94LT5iaWRpTGV2ZWwoKTsKICAgICAgICAgICAgICAgICAgICAgfQotICAgICAg
ICAgICAgICAgICAgICBpZiAoYm94LT5iaWRpTGV2ZWwoKSA9PSBsZXZlbCkKLSAgICAgICAgICAg
ICAgICAgICAgICAgIGJyZWFrOwotICAgICAgICAgICAgICAgICAgICBsZXZlbCA9IGJveC0+Ymlk
aUxldmVsKCk7CisgICAgICAgICAgICAgICAgICAgIHJlbmRlcmVyID0gJmJveC0+cmVuZGVyZXIo
KTsKKyAgICAgICAgICAgICAgICAgICAgb2Zmc2V0ID0gcHJpbWFyeURpcmVjdGlvbiA9PSBMVFIg
PyBib3gtPmNhcmV0TWluT2Zmc2V0KCkgOiBib3gtPmNhcmV0TWF4T2Zmc2V0KCk7CiAgICAgICAg
ICAgICAgICAgfQotICAgICAgICAgICAgICAgIHJlbmRlcmVyID0gJmJveC0+cmVuZGVyZXIoKTsK
LSAgICAgICAgICAgICAgICBvZmZzZXQgPSBwcmltYXJ5RGlyZWN0aW9uID09IExUUiA/IGJveC0+
Y2FyZXRNaW5PZmZzZXQoKSA6IGJveC0+Y2FyZXRNYXhPZmZzZXQoKTsKKyAgICAgICAgICAgICAg
ICBicmVhazsKICAgICAgICAgICAgIH0KLSAgICAgICAgICAgIGJyZWFrOwogICAgICAgICB9Cisg
ICAgICAgIAorICAgICAgICBOb2RlICpub2RlID0gcmVuZGVyZXItPm5vZGUoKTsKKyAgICAgICAg
aWYgKG5vZGUtPmlzUHNldWRvRWxlbWVudCgpKSB7CisgICAgICAgICAgICBQc2V1ZG9FbGVtZW50
ICpwc2V1ZG9FbHQgPSBkb3duY2FzdDxQc2V1ZG9FbGVtZW50Pihub2RlKTsKKyAgICAgICAgICAg
IG5vZGUgPSBwc2V1ZG9FbHQtPmhvc3RFbGVtZW50KCk7CisgICAgICAgICAgICAKKyAgICAgICAg
ICAgIGlmIChvZmZzZXQgPT0gLTEgJiYgcmVuZGVyZXJJZkxhc3RSZW5kZXJlcldhc1BzZXVkb0Vs
ZW1lbnQpIHsKKyAgICAgICAgICAgICAgICBvZmZzZXQgPSBub2RlLT5jb21wdXRlTm9kZUluZGV4
KCk7CisgICAgICAgICAgICAgICAgbm9kZSA9IG5vZGUtPnBhcmVudEVsZW1lbnQoKTsKKyAgICAg
ICAgICAgIH0KKyAgICAgICAgfQogCi0gICAgICAgIHAgPSBjcmVhdGVMZWdhY3lFZGl0aW5nUG9z
aXRpb24ocmVuZGVyZXItPm5vZGUoKSwgb2Zmc2V0KTsKKyAgICAgICAgcCA9IGNyZWF0ZUxlZ2Fj
eUVkaXRpbmdQb3NpdGlvbihub2RlLCBvZmZzZXQpOwogCiAgICAgICAgIGlmICgocC5pc0NhbmRp
ZGF0ZSgpICYmIHAuZG93bnN0cmVhbSgpICE9IGRvd25zdHJlYW1TdGFydCkgfHwgcC5hdFN0YXJ0
T2ZUcmVlKCkgfHwgcC5hdEVuZE9mVHJlZSgpKQogICAgICAgICAgICAgcmV0dXJuIHA7CkBAIC0y
NzcsNiArMzU5LDggQEAKIAogICAgIFBvc2l0aW9uIGRvd25zdHJlYW1TdGFydCA9IHAuZG93bnN0
cmVhbSgpOwogICAgIFRleHREaXJlY3Rpb24gcHJpbWFyeURpcmVjdGlvbiA9IHAucHJpbWFyeURp
cmVjdGlvbigpOworICAgIAorICAgIFJlbmRlck9iamVjdCAqcmVuZGVyZXJJZkxhc3RSZW5kZXJl
cldhc1BzZXVkb0VsZW1lbnQgPSBOVUxMOwogCiAgICAgd2hpbGUgKHRydWUpIHsKICAgICAgICAg
SW5saW5lQm94KiBib3g7CkBAIC0yODcsMjUgKzM3MSw3MCBAQAogCiAgICAgICAgIFJlbmRlck9i
amVjdCogcmVuZGVyZXIgPSAmYm94LT5yZW5kZXJlcigpOwogCisgICAgICAgIGJvb2wgc2tpcEN1
cnJlbnQgPSB0cnVlOworICAgICAgICBOb2RlICpsYXN0Tm9kZSA9IE5VTEw7CisKICAgICAgICAg
d2hpbGUgKHRydWUpIHsKKyAgICAgICAgICAgIGJvb2wgZWxlbWVudENoYW5nZWQgPSBmYWxzZTsK
KyAgICAgICAgICAgIGlmIChyZW5kZXJlci0+bm9kZSgpICYmICFyZW5kZXJlci0+bm9kZSgpLT5p
c0RvY3VtZW50Tm9kZSgpKSB7CisgICAgICAgICAgICAgICAgaWYgKGxhc3ROb2RlICYmIGxhc3RO
b2RlICE9IHJlbmRlcmVyLT5ub2RlKCkpIHsKKyAgICAgICAgICAgICAgICAgICAgc2tpcEN1cnJl
bnQgPSBmYWxzZTsKKyAgICAgICAgICAgICAgICAgICAgZWxlbWVudENoYW5nZWQgPSB0cnVlOwor
ICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgICAgICBsYXN0Tm9kZSA9IHJlbmRlcmVyLT5u
b2RlKCk7CisgICAgICAgICAgICB9CisKICAgICAgICAgICAgIGlmICgocmVuZGVyZXItPmlzUmVw
bGFjZWQoKSB8fCByZW5kZXJlci0+aXNCUigpKSAmJiBvZmZzZXQgPT0gYm94LT5jYXJldExlZnRt
b3N0T2Zmc2V0KCkpCiAgICAgICAgICAgICAgICAgcmV0dXJuIGJveC0+aXNMZWZ0VG9SaWdodERp
cmVjdGlvbigpID8gbmV4dFZpc3VhbGx5RGlzdGluY3RDYW5kaWRhdGUobV9kZWVwUG9zaXRpb24p
IDogcHJldmlvdXNWaXN1YWxseURpc3RpbmN0Q2FuZGlkYXRlKG1fZGVlcFBvc2l0aW9uKTsKIAog
ICAgICAgICAgICAgaWYgKCFyZW5kZXJlci0+bm9kZSgpKSB7CisgICAgICAgICAgICAgICAgaWYg
KHJlbmRlcmVyLT5wYXJlbnQoKS0+aXNCZWZvcmVDb250ZW50KCkpIHsKKyAgICAgICAgICAgICAg
ICAgICAgLyogVGhpcyBtYWdpYyBsZXRzIHVzIHdhbGsgaW50byBlbXB0eSBlbGVtZW50cyBpZiB0
aGV5IGhhdmUKKyAgICAgICAgICAgICAgICAgICAgIHBzZXVkby1lbGVtZW50cyB0byBtYWtlIHRo
ZW0gdmlzdWFsbHkgZGlzdGluY3QuICBXaXRob3V0CisgICAgICAgICAgICAgICAgICAgICBpdCwg
eW91J2Qgb25seSByZWFjaCB0aG9zZSBlbGVtZW50cyBpZiB0aGUgZWxlbWVudCBoYWQKKyAgICAg
ICAgICAgICAgICAgICAgIGEgYmFja2dyb3VuZCBvciBvdGhlciBjb250ZW50IHRoYXQgcmVxdWly
ZWQgcmVuZGVyaW5nLgorICAgICAgICAgICAgICAgICAgICAgKi8KKyAgICAgICAgICAgICAgICAg
ICAgUmVuZGVyT2JqZWN0ICpwYXJlbnRSZW5kZXJlciA9IHJlbmRlcmVyLT5wYXJlbnQoKTsKKyAg
ICAgICAgICAgICAgICAgICAgTm9kZSAqcHNldWRvRWxlbWVudE5vZGUgPSBwYXJlbnRSZW5kZXJl
ci0+bm9kZSgpOworICAgICAgICAgICAgICAgICAgICAKKyAgICAgICAgICAgICAgICAgICAgaWYg
KHBzZXVkb0VsZW1lbnROb2RlKSB7CisgICAgICAgICAgICAgICAgICAgICAgICBBU1NFUlQocHNl
dWRvRWxlbWVudE5vZGUtPmlzUHNldWRvRWxlbWVudCgpKTsKKyAgICAgICAgICAgICAgICAgICAg
ICAgIFBzZXVkb0VsZW1lbnQgKnBlID0gZG93bmNhc3Q8UHNldWRvRWxlbWVudD4ocHNldWRvRWxl
bWVudE5vZGUpOworICAgICAgICAgICAgICAgICAgICAgICAgRWxlbWVudCAqZWx0ID0gcGUtPmhv
c3RFbGVtZW50KCk7CisKKyAgICAgICAgICAgICAgICAgICAgICAgIHJlbmRlcmVySWZMYXN0UmVu
ZGVyZXJXYXNQc2V1ZG9FbGVtZW50ID0gcGFyZW50UmVuZGVyZXI7CisgICAgICAgICAgICAgICAg
ICAgICAgICAKKyAgICAgICAgICAgICAgICAgICAgICAgIGlmICghZWx0LT5maXJzdENoaWxkKCkp
IHsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICByZW5kZXJlciA9IHJlbmRlcmVyLT5wYXJl
bnQoKTsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICBza2lwQ3VycmVudCA9IGZhbHNlOwor
ICAgICAgICAgICAgICAgICAgICAgICAgICAgIAorICAgICAgICAgICAgICAgICAgICAgICAgICAg
IGNvbnRpbnVlOworICAgICAgICAgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgICAgICAg
ICB9CisgICAgICAgICAgICAgICAgfSBlbHNlIHsKKyAgICAgICAgICAgICAgICAgICAgcmVuZGVy
ZXJJZkxhc3RSZW5kZXJlcldhc1BzZXVkb0VsZW1lbnQgPSBOVUxMOworICAgICAgICAgICAgICAg
IH0KICAgICAgICAgICAgICAgICBib3ggPSBib3gtPm5leHRMZWFmQ2hpbGQoKTsKLSAgICAgICAg
ICAgICAgICBpZiAoIWJveCkKKyAgICAgICAgICAgICAgICBpZiAoIWJveCkgewogICAgICAgICAg
ICAgICAgICAgICByZXR1cm4gcHJpbWFyeURpcmVjdGlvbiA9PSBMVFIgPyBuZXh0VmlzdWFsbHlE
aXN0aW5jdENhbmRpZGF0ZShtX2RlZXBQb3NpdGlvbikgOiBwcmV2aW91c1Zpc3VhbGx5RGlzdGlu
Y3RDYW5kaWRhdGUobV9kZWVwUG9zaXRpb24pOworICAgICAgICAgICAgICAgIH0KICAgICAgICAg
ICAgICAgICByZW5kZXJlciA9ICZib3gtPnJlbmRlcmVyKCk7CiAgICAgICAgICAgICAgICAgb2Zm
c2V0ID0gYm94LT5jYXJldExlZnRtb3N0T2Zmc2V0KCk7CisgICAgICAgICAgICAgICAgCisgICAg
ICAgICAgICAgICAgc2tpcEN1cnJlbnQgPSBmYWxzZTsKKwogICAgICAgICAgICAgICAgIGNvbnRp
bnVlOwogICAgICAgICAgICAgfQorICAgICAgICAgICAgCisgICAgICAgICAgICBpZiAoc2tpcEN1
cnJlbnQpIHsKKyAgICAgICAgICAgICAgICBvZmZzZXQgPSBib3gtPmlzTGVmdFRvUmlnaHREaXJl
Y3Rpb24oKSA/IHJlbmRlcmVyLT5uZXh0T2Zmc2V0KG9mZnNldCkgOiByZW5kZXJlci0+cHJldmlv
dXNPZmZzZXQob2Zmc2V0KTsKKyAgICAgICAgICAgIH0KKyAgICAgICAgICAgIHNraXBDdXJyZW50
ID0gdHJ1ZTsKIAotICAgICAgICAgICAgb2Zmc2V0ID0gYm94LT5pc0xlZnRUb1JpZ2h0RGlyZWN0
aW9uKCkgPyByZW5kZXJlci0+bmV4dE9mZnNldChvZmZzZXQpIDogcmVuZGVyZXItPnByZXZpb3Vz
T2Zmc2V0KG9mZnNldCk7Ci0KICAgICAgICAgICAgIGludCBjYXJldE1pbk9mZnNldCA9IGJveC0+
Y2FyZXRNaW5PZmZzZXQoKTsKICAgICAgICAgICAgIGludCBjYXJldE1heE9mZnNldCA9IGJveC0+
Y2FyZXRNYXhPZmZzZXQoKTsKIAotICAgICAgICAgICAgaWYgKG9mZnNldCA+IGNhcmV0TWluT2Zm
c2V0ICYmIG9mZnNldCA8IGNhcmV0TWF4T2Zmc2V0KQorICAgICAgICAgICAgaWYgKChvZmZzZXQg
PiBjYXJldE1pbk9mZnNldCB8fCAgKG9mZnNldCA9PSBjYXJldE1pbk9mZnNldCAmJiBlbGVtZW50
Q2hhbmdlZCkpICYmIG9mZnNldCA8IGNhcmV0TWF4T2Zmc2V0KQogICAgICAgICAgICAgICAgIGJy
ZWFrOwogCiAgICAgICAgICAgICBpZiAoYm94LT5pc0xlZnRUb1JpZ2h0RGlyZWN0aW9uKCkgPyBv
ZmZzZXQgPiBjYXJldE1heE9mZnNldCA6IG9mZnNldCA8IGNhcmV0TWluT2Zmc2V0KSB7CkBAIC0z
MjgsOTAgKzQ1NywxMDkgQEAKICAgICAgICAgICAgICAgICBib3ggPSBuZXh0Qm94OwogICAgICAg
ICAgICAgICAgIHJlbmRlcmVyID0gJmJveC0+cmVuZGVyZXIoKTsKICAgICAgICAgICAgICAgICBv
ZmZzZXQgPSBuZXh0Qm94LT5jYXJldExlZnRtb3N0T2Zmc2V0KCk7CisgICAgICAgICAgICAgICAg
CisgICAgICAgICAgICAgICAgLy8gc2tpcEN1cnJlbnQgc2hvdWxkIGJlIHRydWUgaWYgYW5kIG9u
bHkgaWYgd2UgZG9uJ3QgZW5jb3VudGVyIGFueQorICAgICAgICAgICAgICAgIC8vIHBzZXVkb2Vs
ZW1lbnRzIG9yIGVsZW1lbnQgYm91bmRhcmllcy4KKyAgICAgICAgICAgICAgICBza2lwQ3VycmVu
dCA9IHRydWU7CisKICAgICAgICAgICAgICAgICBjb250aW51ZTsKICAgICAgICAgICAgIH0KIAot
ICAgICAgICAgICAgQVNTRVJUKG9mZnNldCA9PSBib3gtPmNhcmV0UmlnaHRtb3N0T2Zmc2V0KCkp
OworICAgICAgICAgICAgLy8gQ2hhbmdlZCBhc3NlcnQgdG8gaWYsIGJlY2F1c2UgaXQgY291bGQg
YWxzbyBiZSB0aGUKKyAgICAgICAgICAgIC8vIGxlZnQgb2Zmc2V0LgorICAgICAgICAgICAgaWYg
KG9mZnNldCA9PSBib3gtPmNhcmV0UmlnaHRtb3N0T2Zmc2V0KCkpIHsKIAotICAgICAgICAgICAg
dW5zaWduZWQgY2hhciBsZXZlbCA9IGJveC0+YmlkaUxldmVsKCk7Ci0gICAgICAgICAgICBJbmxp
bmVCb3gqIG5leHRCb3ggPSBib3gtPm5leHRMZWFmQ2hpbGQoKTsKKyAgICAgICAgICAgICAgICB1
bnNpZ25lZCBjaGFyIGxldmVsID0gYm94LT5iaWRpTGV2ZWwoKTsKKyAgICAgICAgICAgICAgICBJ
bmxpbmVCb3gqIG5leHRCb3ggPSBib3gtPm5leHRMZWFmQ2hpbGQoKTsKIAotICAgICAgICAgICAg
aWYgKGJveC0+ZGlyZWN0aW9uKCkgPT0gcHJpbWFyeURpcmVjdGlvbikgewotICAgICAgICAgICAg
ICAgIGlmICghbmV4dEJveCkgewotICAgICAgICAgICAgICAgICAgICBJbmxpbmVCb3gqIGxvZ2lj
YWxFbmQgPSAwOwotICAgICAgICAgICAgICAgICAgICBpZiAocHJpbWFyeURpcmVjdGlvbiA9PSBM
VFIgPyBib3gtPnJvb3QoKS5nZXRMb2dpY2FsRW5kQm94V2l0aE5vZGUobG9naWNhbEVuZCkgOiBi
b3gtPnJvb3QoKS5nZXRMb2dpY2FsU3RhcnRCb3hXaXRoTm9kZShsb2dpY2FsRW5kKSkgewotICAg
ICAgICAgICAgICAgICAgICAgICAgYm94ID0gbG9naWNhbEVuZDsKLSAgICAgICAgICAgICAgICAg
ICAgICAgIHJlbmRlcmVyID0gJmJveC0+cmVuZGVyZXIoKTsKLSAgICAgICAgICAgICAgICAgICAg
ICAgIG9mZnNldCA9IHByaW1hcnlEaXJlY3Rpb24gPT0gTFRSID8gYm94LT5jYXJldE1heE9mZnNl
dCgpIDogYm94LT5jYXJldE1pbk9mZnNldCgpOworICAgICAgICAgICAgICAgIGlmIChib3gtPmRp
cmVjdGlvbigpID09IHByaW1hcnlEaXJlY3Rpb24pIHsKKyAgICAgICAgICAgICAgICAgICAgaWYg
KCFuZXh0Qm94KSB7CisgICAgICAgICAgICAgICAgICAgICAgICBJbmxpbmVCb3gqIGxvZ2ljYWxF
bmQgPSAwOworICAgICAgICAgICAgICAgICAgICAgICAgaWYgKHByaW1hcnlEaXJlY3Rpb24gPT0g
TFRSID8gYm94LT5yb290KCkuZ2V0TG9naWNhbEVuZEJveFdpdGhOb2RlKGxvZ2ljYWxFbmQpIDog
Ym94LT5yb290KCkuZ2V0TG9naWNhbFN0YXJ0Qm94V2l0aE5vZGUobG9naWNhbEVuZCkpIHsKKyAg
ICAgICAgICAgICAgICAgICAgICAgICAgICBib3ggPSBsb2dpY2FsRW5kOworICAgICAgICAgICAg
ICAgICAgICAgICAgICAgIHJlbmRlcmVyID0gJmJveC0+cmVuZGVyZXIoKTsKKyAgICAgICAgICAg
ICAgICAgICAgICAgICAgICBvZmZzZXQgPSBwcmltYXJ5RGlyZWN0aW9uID09IExUUiA/IGJveC0+
Y2FyZXRNYXhPZmZzZXQoKSA6IGJveC0+Y2FyZXRNaW5PZmZzZXQoKTsKKyAgICAgICAgICAgICAg
ICAgICAgICAgIH0KKyAgICAgICAgICAgICAgICAgICAgICAgIGJyZWFrOwogICAgICAgICAgICAg
ICAgICAgICB9Ci0gICAgICAgICAgICAgICAgICAgIGJyZWFrOwotICAgICAgICAgICAgICAgIH0K
IAotICAgICAgICAgICAgICAgIGlmIChuZXh0Qm94LT5iaWRpTGV2ZWwoKSA+PSBsZXZlbCkKLSAg
ICAgICAgICAgICAgICAgICAgYnJlYWs7CisgICAgICAgICAgICAgICAgICAgIGlmIChuZXh0Qm94
LT5iaWRpTGV2ZWwoKSA+PSBsZXZlbCkKKyAgICAgICAgICAgICAgICAgICAgICAgIGJyZWFrOwog
Ci0gICAgICAgICAgICAgICAgbGV2ZWwgPSBuZXh0Qm94LT5iaWRpTGV2ZWwoKTsKKyAgICAgICAg
ICAgICAgICAgICAgbGV2ZWwgPSBuZXh0Qm94LT5iaWRpTGV2ZWwoKTsKIAotICAgICAgICAgICAg
ICAgIElubGluZUJveCogcHJldkJveCA9IGJveDsKLSAgICAgICAgICAgICAgICBkbyB7Ci0gICAg
ICAgICAgICAgICAgICAgIHByZXZCb3ggPSBwcmV2Qm94LT5wcmV2TGVhZkNoaWxkKCk7Ci0gICAg
ICAgICAgICAgICAgfSB3aGlsZSAocHJldkJveCAmJiBwcmV2Qm94LT5iaWRpTGV2ZWwoKSA+IGxl
dmVsKTsKKyAgICAgICAgICAgICAgICAgICAgSW5saW5lQm94KiBwcmV2Qm94ID0gYm94OworICAg
ICAgICAgICAgICAgICAgICBkbyB7CisgICAgICAgICAgICAgICAgICAgICAgICBwcmV2Qm94ID0g
cHJldkJveC0+cHJldkxlYWZDaGlsZCgpOworICAgICAgICAgICAgICAgICAgICB9IHdoaWxlIChw
cmV2Qm94ICYmIHByZXZCb3gtPmJpZGlMZXZlbCgpID4gbGV2ZWwpOwogCi0gICAgICAgICAgICAg
ICAgaWYgKHByZXZCb3ggJiYgcHJldkJveC0+YmlkaUxldmVsKCkgPT0gbGV2ZWwpICAgLy8gRm9y
IGV4YW1wbGUsIGFiYyBGRUQgMTIzIF4gQ0JBCi0gICAgICAgICAgICAgICAgICAgIGJyZWFrOwor
ICAgICAgICAgICAgICAgICAgICBpZiAocHJldkJveCAmJiBwcmV2Qm94LT5iaWRpTGV2ZWwoKSA9
PSBsZXZlbCkgICAvLyBGb3IgZXhhbXBsZSwgYWJjIEZFRCAxMjMgXiBDQkEKKyAgICAgICAgICAg
ICAgICAgICAgICAgIGJyZWFrOwogCi0gICAgICAgICAgICAgICAgLy8gRm9yIGV4YW1wbGUsIGFi
YyAxMjMgXiBDQkEgb3IgMTIzIF4gQ0JBIGFiYwotICAgICAgICAgICAgICAgIGJveCA9IG5leHRC
b3g7Ci0gICAgICAgICAgICAgICAgcmVuZGVyZXIgPSAmYm94LT5yZW5kZXJlcigpOwotICAgICAg
ICAgICAgICAgIG9mZnNldCA9IGJveC0+Y2FyZXRMZWZ0bW9zdE9mZnNldCgpOwotICAgICAgICAg
ICAgICAgIGlmIChib3gtPmRpcmVjdGlvbigpID09IHByaW1hcnlEaXJlY3Rpb24pCi0gICAgICAg
ICAgICAgICAgICAgIGJyZWFrOwotICAgICAgICAgICAgICAgIGNvbnRpbnVlOwotICAgICAgICAg
ICAgfQorICAgICAgICAgICAgICAgICAgICAvLyBGb3IgZXhhbXBsZSwgYWJjIDEyMyBeIENCQSBv
ciAxMjMgXiBDQkEgYWJjCisgICAgICAgICAgICAgICAgICAgIGJveCA9IG5leHRCb3g7CisgICAg
ICAgICAgICAgICAgICAgIHJlbmRlcmVyID0gJmJveC0+cmVuZGVyZXIoKTsKKyAgICAgICAgICAg
ICAgICAgICAgb2Zmc2V0ID0gYm94LT5jYXJldExlZnRtb3N0T2Zmc2V0KCk7CisgICAgICAgICAg
ICAgICAgICAgIGlmIChib3gtPmRpcmVjdGlvbigpID09IHByaW1hcnlEaXJlY3Rpb24pCisgICAg
ICAgICAgICAgICAgICAgICAgICBicmVhazsKKyAgICAgICAgICAgICAgICAgICAgY29udGludWU7
CisgICAgICAgICAgICAgICAgfQogCi0gICAgICAgICAgICB3aGlsZSAobmV4dEJveCAmJiAhbmV4
dEJveC0+cmVuZGVyZXIoKS5ub2RlKCkpCi0gICAgICAgICAgICAgICAgbmV4dEJveCA9IG5leHRC
b3gtPm5leHRMZWFmQ2hpbGQoKTsKKyAgICAgICAgICAgICAgICB3aGlsZSAobmV4dEJveCAmJiAh
bmV4dEJveC0+cmVuZGVyZXIoKS5ub2RlKCkpCisgICAgICAgICAgICAgICAgICAgIG5leHRCb3gg
PSBuZXh0Qm94LT5uZXh0TGVhZkNoaWxkKCk7CiAKLSAgICAgICAgICAgIGlmIChuZXh0Qm94KSB7
Ci0gICAgICAgICAgICAgICAgYm94ID0gbmV4dEJveDsKLSAgICAgICAgICAgICAgICByZW5kZXJl
ciA9ICZib3gtPnJlbmRlcmVyKCk7Ci0gICAgICAgICAgICAgICAgb2Zmc2V0ID0gYm94LT5jYXJl
dExlZnRtb3N0T2Zmc2V0KCk7CisgICAgICAgICAgICAgICAgaWYgKG5leHRCb3gpIHsKKyAgICAg
ICAgICAgICAgICAgICAgYm94ID0gbmV4dEJveDsKKyAgICAgICAgICAgICAgICAgICAgcmVuZGVy
ZXIgPSAmYm94LT5yZW5kZXJlcigpOworICAgICAgICAgICAgICAgICAgICBvZmZzZXQgPSBib3gt
PmNhcmV0TGVmdG1vc3RPZmZzZXQoKTsKIAotICAgICAgICAgICAgICAgIGlmIChib3gtPmJpZGlM
ZXZlbCgpID4gbGV2ZWwpIHsKLSAgICAgICAgICAgICAgICAgICAgZG8gewotICAgICAgICAgICAg
ICAgICAgICAgICAgbmV4dEJveCA9IG5leHRCb3gtPm5leHRMZWFmQ2hpbGQoKTsKLSAgICAgICAg
ICAgICAgICAgICAgfSB3aGlsZSAobmV4dEJveCAmJiBuZXh0Qm94LT5iaWRpTGV2ZWwoKSA+IGxl
dmVsKTsKKyAgICAgICAgICAgICAgICAgICAgaWYgKGJveC0+YmlkaUxldmVsKCkgPiBsZXZlbCkg
eworICAgICAgICAgICAgICAgICAgICAgICAgZG8geworICAgICAgICAgICAgICAgICAgICAgICAg
ICAgIG5leHRCb3ggPSBuZXh0Qm94LT5uZXh0TGVhZkNoaWxkKCk7CisgICAgICAgICAgICAgICAg
ICAgICAgICB9IHdoaWxlIChuZXh0Qm94ICYmIG5leHRCb3gtPmJpZGlMZXZlbCgpID4gbGV2ZWwp
OwogCi0gICAgICAgICAgICAgICAgICAgIGlmICghbmV4dEJveCB8fCBuZXh0Qm94LT5iaWRpTGV2
ZWwoKSA8IGxldmVsKQotICAgICAgICAgICAgICAgICAgICAgICAgY29udGludWU7Ci0gICAgICAg
ICAgICAgICAgfQotICAgICAgICAgICAgfSBlbHNlIHsKLSAgICAgICAgICAgICAgICAvLyBUcmFp
bGluZyBlZGdlIG9mIGEgc2Vjb25kYXJ5IHJ1bi4gU2V0IHRvIHRoZSBsZWFkaW5nIGVkZ2Ugb2Yg
dGhlIGVudGlyZSBydW4uCi0gICAgICAgICAgICAgICAgd2hpbGUgKHRydWUpIHsKLSAgICAgICAg
ICAgICAgICAgICAgd2hpbGUgKElubGluZUJveCogcHJldkJveCA9IGJveC0+cHJldkxlYWZDaGls
ZCgpKSB7Ci0gICAgICAgICAgICAgICAgICAgICAgICBpZiAocHJldkJveC0+YmlkaUxldmVsKCkg
PCBsZXZlbCkKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICBicmVhazsKLSAgICAgICAgICAg
ICAgICAgICAgICAgIGJveCA9IHByZXZCb3g7CisgICAgICAgICAgICAgICAgICAgICAgICBpZiAo
IW5leHRCb3ggfHwgbmV4dEJveC0+YmlkaUxldmVsKCkgPCBsZXZlbCkKKyAgICAgICAgICAgICAg
ICAgICAgICAgICAgICBjb250aW51ZTsKICAgICAgICAgICAgICAgICAgICAgfQotICAgICAgICAg
ICAgICAgICAgICBpZiAoYm94LT5iaWRpTGV2ZWwoKSA9PSBsZXZlbCkKLSAgICAgICAgICAgICAg
ICAgICAgICAgIGJyZWFrOwotICAgICAgICAgICAgICAgICAgICBsZXZlbCA9IGJveC0+YmlkaUxl
dmVsKCk7Ci0gICAgICAgICAgICAgICAgICAgIHdoaWxlIChJbmxpbmVCb3gqIG5leHRCb3ggPSBi
b3gtPm5leHRMZWFmQ2hpbGQoKSkgewotICAgICAgICAgICAgICAgICAgICAgICAgaWYgKG5leHRC
b3gtPmJpZGlMZXZlbCgpIDwgbGV2ZWwpCisgICAgICAgICAgICAgICAgfSBlbHNlIHsKKyAgICAg
ICAgICAgICAgICAgICAgLy8gVHJhaWxpbmcgZWRnZSBvZiBhIHNlY29uZGFyeSBydW4uIFNldCB0
byB0aGUgbGVhZGluZyBlZGdlIG9mIHRoZSBlbnRpcmUgcnVuLgorICAgICAgICAgICAgICAgICAg
ICB3aGlsZSAodHJ1ZSkgeworICAgICAgICAgICAgICAgICAgICAgICAgd2hpbGUgKElubGluZUJv
eCogcHJldkJveCA9IGJveC0+cHJldkxlYWZDaGlsZCgpKSB7CisgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgaWYgKHByZXZCb3gtPmJpZGlMZXZlbCgpIDwgbGV2ZWwpCisgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgIGJyZWFrOworICAgICAgICAgICAgICAgICAgICAgICAgICAgIGJv
eCA9IHByZXZCb3g7CisgICAgICAgICAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICAgICAg
ICAgICAgICBpZiAoYm94LT5iaWRpTGV2ZWwoKSA9PSBsZXZlbCkKICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICBicmVhazsKLSAgICAgICAgICAgICAgICAgICAgICAgIGJveCA9IG5leHRCb3g7
CisgICAgICAgICAgICAgICAgICAgICAgICBsZXZlbCA9IGJveC0+YmlkaUxldmVsKCk7CisgICAg
ICAgICAgICAgICAgICAgICAgICB3aGlsZSAoSW5saW5lQm94KiBuZXh0Qm94ID0gYm94LT5uZXh0
TGVhZkNoaWxkKCkpIHsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZiAobmV4dEJveC0+
YmlkaUxldmVsKCkgPCBsZXZlbCkKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgYnJl
YWs7CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgYm94ID0gbmV4dEJveDsKKyAgICAgICAg
ICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgICAgICAgICAgICAgIGlmIChib3gtPmJpZGlM
ZXZlbCgpID09IGxldmVsKQorICAgICAgICAgICAgICAgICAgICAgICAgICAgIGJyZWFrOworICAg
ICAgICAgICAgICAgICAgICAgICAgbGV2ZWwgPSBib3gtPmJpZGlMZXZlbCgpOwogICAgICAgICAg
ICAgICAgICAgICB9Ci0gICAgICAgICAgICAgICAgICAgIGlmIChib3gtPmJpZGlMZXZlbCgpID09
IGxldmVsKQotICAgICAgICAgICAgICAgICAgICAgICAgYnJlYWs7Ci0gICAgICAgICAgICAgICAg
ICAgIGxldmVsID0gYm94LT5iaWRpTGV2ZWwoKTsKKyAgICAgICAgICAgICAgICAgICAgcmVuZGVy
ZXIgPSAmYm94LT5yZW5kZXJlcigpOworICAgICAgICAgICAgICAgICAgICBvZmZzZXQgPSBwcmlt
YXJ5RGlyZWN0aW9uID09IExUUiA/IGJveC0+Y2FyZXRNYXhPZmZzZXQoKSA6IGJveC0+Y2FyZXRN
aW5PZmZzZXQoKTsKICAgICAgICAgICAgICAgICB9Ci0gICAgICAgICAgICAgICAgcmVuZGVyZXIg
PSAmYm94LT5yZW5kZXJlcigpOwotICAgICAgICAgICAgICAgIG9mZnNldCA9IHByaW1hcnlEaXJl
Y3Rpb24gPT0gTFRSID8gYm94LT5jYXJldE1heE9mZnNldCgpIDogYm94LT5jYXJldE1pbk9mZnNl
dCgpOworICAgICAgICAgICAgICAgIGJyZWFrOwogICAgICAgICAgICAgfQotICAgICAgICAgICAg
YnJlYWs7CiAgICAgICAgIH0KKyAgICAgICAgCisgICAgICAgIE5vZGUgKm5vZGUgPSByZW5kZXJl
ci0+bm9kZSgpOworICAgICAgICBpZiAobm9kZS0+aXNQc2V1ZG9FbGVtZW50KCkpIHsKKyAgICAg
ICAgICAgIFBzZXVkb0VsZW1lbnQgKmVsdCA9IGRvd25jYXN0PFBzZXVkb0VsZW1lbnQ+KG5vZGUp
OworICAgICAgICAgICAgbm9kZSA9IGVsdC0+aG9zdEVsZW1lbnQoKTsKKyAgICAgICAgICAgIAor
ICAgICAgICAgICAgaWYgKG9mZnNldCA9PSAtMSAmJiByZW5kZXJlcklmTGFzdFJlbmRlcmVyV2Fz
UHNldWRvRWxlbWVudCkgeworICAgICAgICAgICAgICAgIG9mZnNldCA9IG5vZGUtPmNvbXB1dGVO
b2RlSW5kZXgoKTsKKyAgICAgICAgICAgICAgICBub2RlID0gbm9kZS0+cGFyZW50RWxlbWVudCgp
OworICAgICAgICAgICAgfQorICAgICAgICB9CiAKLSAgICAgICAgcCA9IGNyZWF0ZUxlZ2FjeUVk
aXRpbmdQb3NpdGlvbihyZW5kZXJlci0+bm9kZSgpLCBvZmZzZXQpOworICAgICAgICBwID0gY3Jl
YXRlTGVnYWN5RWRpdGluZ1Bvc2l0aW9uKG5vZGUsIG9mZnNldCk7CiAKICAgICAgICAgaWYgKChw
LmlzQ2FuZGlkYXRlKCkgJiYgcC5kb3duc3RyZWFtKCkgIT0gZG93bnN0cmVhbVN0YXJ0KSB8fCBw
LmF0U3RhcnRPZlRyZWUoKSB8fCBwLmF0RW5kT2ZUcmVlKCkpCiAgICAgICAgICAgICByZXR1cm4g
cDsKQEAgLTQyMywxOCArNTcxLDE5IEBACiBWaXNpYmxlUG9zaXRpb24gVmlzaWJsZVBvc2l0aW9u
OjpyaWdodChib29sIHN0YXlJbkVkaXRhYmxlQ29udGVudCkgY29uc3QKIHsKICAgICBQb3NpdGlv
biBwb3MgPSByaWdodFZpc3VhbGx5RGlzdGluY3RDYW5kaWRhdGUoKTsKLSAgICAvLyBGSVhNRTog
V2h5IGNhbid0IHdlIG1vdmUgbGVmdCBmcm9tIHRoZSBsYXN0IHBvc2l0aW9uIGluIGEgdHJlZT8K
KyAgICAvLyBGSVhNRTogV2h5IGNhbid0IHdlIG1vdmUgcmlnaHQgZnJvbSB0aGUgZmlyc3QgcG9z
aXRpb24gaW4gYSB0cmVlPwogICAgIGlmIChwb3MuYXRTdGFydE9mVHJlZSgpIHx8IHBvcy5hdEVu
ZE9mVHJlZSgpKQogICAgICAgICByZXR1cm4gVmlzaWJsZVBvc2l0aW9uKCk7CiAKLSAgICBWaXNp
YmxlUG9zaXRpb24gcmlnaHQgPSBWaXNpYmxlUG9zaXRpb24ocG9zLCBET1dOU1RSRUFNKTsKLSAg
ICBBU1NFUlQocmlnaHQgIT0gKnRoaXMpOworICAgIFZpc2libGVQb3NpdGlvbiByaWdodFBvc2l0
aW9uID0gVmlzaWJsZVBvc2l0aW9uKHBvcywgRE9XTlNUUkVBTSk7CisgICAgICAgIAorICAgIEFT
U0VSVChyaWdodFBvc2l0aW9uICE9ICp0aGlzKTsKIAogICAgIGlmICghc3RheUluRWRpdGFibGVD
b250ZW50KQotICAgICAgICByZXR1cm4gcmlnaHQ7CisgICAgICAgIHJldHVybiByaWdodFBvc2l0
aW9uOwogCiAgICAgLy8gRklYTUU6IFRoaXMgbWF5IG5lZWQgdG8gZG8gc29tZXRoaW5nIGRpZmZl
cmVudCBmcm9tICJhZnRlciIuCi0gICAgcmV0dXJuIGhvbm9yRWRpdGluZ0JvdW5kYXJ5QXRPckFm
dGVyKHJpZ2h0KTsKKyAgICByZXR1cm4gaG9ub3JFZGl0aW5nQm91bmRhcnlBdE9yQWZ0ZXIocmln
aHRQb3NpdGlvbik7CiB9CiAKIFZpc2libGVQb3NpdGlvbiBWaXNpYmxlUG9zaXRpb246Omhvbm9y
RWRpdGluZ0JvdW5kYXJ5QXRPckJlZm9yZShjb25zdCBWaXNpYmxlUG9zaXRpb24gJnBvcykgY29u
c3QKQEAgLTQ0NSw5ICs1OTQsMTUgQEAKICAgICBOb2RlKiBoaWdoZXN0Um9vdCA9IGhpZ2hlc3RF
ZGl0YWJsZVJvb3QoZGVlcEVxdWl2YWxlbnQoKSk7CiAgICAgCiAgICAgLy8gUmV0dXJuIGVtcHR5
IHBvc2l0aW9uIGlmIHBvcyBpcyBub3Qgc29tZXdoZXJlIGluc2lkZSB0aGUgZWRpdGFibGUgcmVn
aW9uIGNvbnRhaW5pbmcgdGhpcyBwb3NpdGlvbgotICAgIGlmIChoaWdoZXN0Um9vdCAmJiAhcG9z
LmRlZXBFcXVpdmFsZW50KCkuZGVwcmVjYXRlZE5vZGUoKS0+aXNEZXNjZW5kYW50T2YoaGlnaGVz
dFJvb3QpKQotICAgICAgICByZXR1cm4gVmlzaWJsZVBvc2l0aW9uKCk7Ci0gICAgICAgIAorICAg
IGlmIChoaWdoZXN0Um9vdCkgeworICAgICAgICBpZiAoaGlnaGVzdFJvb3QgIT0gcG9zLmRlZXBF
cXVpdmFsZW50KCkuZGVwcmVjYXRlZE5vZGUoKSB8fAorICAgICAgICAgICAgcG9zLmRlZXBFcXVp
dmFsZW50KCkuYW5jaG9yVHlwZSgpICE9IFBvc2l0aW9uOjpQb3NpdGlvbklzT2Zmc2V0SW5BbmNo
b3IpIHsKKyAgICAgICAgICAgICAgICBpZiAoIXBvcy5kZWVwRXF1aXZhbGVudCgpLmRlcHJlY2F0
ZWROb2RlKCktPmlzRGVzY2VuZGFudE9mKGhpZ2hlc3RSb290KSkgeworICAgICAgICAgICAgICAg
ICAgICByZXR1cm4gVmlzaWJsZVBvc2l0aW9uKCk7CisgICAgICAgICAgICAgICAgfQorICAgICAg
ICB9CisgICAgfQorICAgIAogICAgIC8vIFJldHVybiBwb3MgaXRzZWxmIGlmIHRoZSB0d28gYXJl
IGZyb20gdGhlIHZlcnkgc2FtZSBlZGl0YWJsZSByZWdpb24sIG9yIGJvdGggYXJlIG5vbi1lZGl0
YWJsZQogICAgIC8vIEZJWE1FOiBJbiB0aGUgbm9uLWVkaXRhYmxlIGNhc2UsIGp1c3QgYmVjYXVz
ZSB0aGUgbmV3IHBvc2l0aW9uIGlzIG5vbi1lZGl0YWJsZSBkb2Vzbid0IG1lYW4gbW92ZW1lbnQK
ICAgICAvLyB0byBpdCBpcyBhbGxvd2VkLiAgVmlzaWJsZVNlbGVjdGlvbjo6YWRqdXN0Rm9yRWRp
dGFibGVDb250ZW50IGhhcyB0aGlzIHByb2JsZW0gdG9vLgpAQCAtNDcxLDggKzYyNiwxNSBAQAog
ICAgIE5vZGUqIGhpZ2hlc3RSb290ID0gaGlnaGVzdEVkaXRhYmxlUm9vdChkZWVwRXF1aXZhbGVu
dCgpKTsKICAgICAKICAgICAvLyBSZXR1cm4gZW1wdHkgcG9zaXRpb24gaWYgcG9zIGlzIG5vdCBz
b21ld2hlcmUgaW5zaWRlIHRoZSBlZGl0YWJsZSByZWdpb24gY29udGFpbmluZyB0aGlzIHBvc2l0
aW9uCi0gICAgaWYgKGhpZ2hlc3RSb290ICYmICFwb3MuZGVlcEVxdWl2YWxlbnQoKS5kZXByZWNh
dGVkTm9kZSgpLT5pc0Rlc2NlbmRhbnRPZihoaWdoZXN0Um9vdCkpCi0gICAgICAgIHJldHVybiBW
aXNpYmxlUG9zaXRpb24oKTsKKyAgICBpZiAoaGlnaGVzdFJvb3QpIHsKKyAgICAgICAgaWYgKGhp
Z2hlc3RSb290ICE9IHBvcy5kZWVwRXF1aXZhbGVudCgpLmRlcHJlY2F0ZWROb2RlKCkgfHwKKyAg
ICAgICAgICAgIHBvcy5kZWVwRXF1aXZhbGVudCgpLmFuY2hvclR5cGUoKSAhPSBQb3NpdGlvbjo6
UG9zaXRpb25Jc09mZnNldEluQW5jaG9yKSB7CisgICAgICAgICAgICBpZiAoIXBvcy5kZWVwRXF1
aXZhbGVudCgpLmRlcHJlY2F0ZWROb2RlKCktPmlzRGVzY2VuZGFudE9mKGhpZ2hlc3RSb290KSkg
eworICAgICAgICAgICAgICAgIHJldHVybiBWaXNpYmxlUG9zaXRpb24oKTsKKyAgICAgICAgICAg
IH0KKyAgICAgICAgfQorICAgIH0KKwogICAgIAogICAgIC8vIFJldHVybiBwb3MgaXRzZWxmIGlm
IHRoZSB0d28gYXJlIGZyb20gdGhlIHZlcnkgc2FtZSBlZGl0YWJsZSByZWdpb24sIG9yIGJvdGgg
YXJlIG5vbi1lZGl0YWJsZQogICAgIC8vIEZJWE1FOiBJbiB0aGUgbm9uLWVkaXRhYmxlIGNhc2Us
IGp1c3QgYmVjYXVzZSB0aGUgbmV3IHBvc2l0aW9uIGlzIG5vbi1lZGl0YWJsZSBkb2Vzbid0IG1l
YW4gbW92ZW1lbnQKQEAgLTUyNiw4ICs2ODgsOSBAQAogICAgIGNhbmRpZGF0ZSA9IHBvc2l0aW9u
LmRvd25zdHJlYW0oKTsKICAgICBpZiAoY2FuZGlkYXRlLmlzQ2FuZGlkYXRlKCkpCiAgICAgICAg
IHJldHVybiBjYW5kaWRhdGU7CisgICAgCiAKLSAgICAvLyBXaGVuIG5laXRoZXIgdXBzdHJlYW0g
b3IgZG93bnN0cmVhbSBnZXRzIHVzIHRvIGEgY2FuZGlkYXRlICh1cHN0cmVhbS9kb3duc3RyZWFt
IHdvbid0IGxlYXZlIAorICAgIC8vIFdoZW4gbmVpdGhlciB1cHN0cmVhbSBvciBkb3duc3RyZWFt
IGdldHMgdXMgdG8gYSBjYW5kaWRhdGUgKHVwc3RyZWFtL2Rvd25zdHJlYW0gd29uJ3QgbGVhdmUK
ICAgICAvLyBibG9ja3Mgb3IgZW50ZXIgbmV3IG9uZXMpLCB3ZSBzZWFyY2ggZm9yd2FyZCBhbmQg
YmFja3dhcmQgdW50aWwgd2UgZmluZCBvbmUuCiAgICAgUG9zaXRpb24gbmV4dCA9IGNhbm9uaWNh
bGl6ZUNhbmRpZGF0ZShuZXh0Q2FuZGlkYXRlKHBvc2l0aW9uKSk7CiAgICAgUG9zaXRpb24gcHJl
diA9IGNhbm9uaWNhbGl6ZUNhbmRpZGF0ZShwcmV2aW91c0NhbmRpZGF0ZShwb3NpdGlvbikpOwpJ
bmRleDogU291cmNlL1dlYkNvcmUvZWRpdGluZy9WaXNpYmxlU2VsZWN0aW9uLmNwcAo9PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9lZGl0aW5nL1Zpc2libGVTZWxlY3Rpb24uY3BwCShyZXZp
c2lvbiAxNzQzMjQpCisrKyBTb3VyY2UvV2ViQ29yZS9lZGl0aW5nL1Zpc2libGVTZWxlY3Rpb24u
Y3BwCSh3b3JraW5nIGNvcHkpCkBAIC00Miw2ICs0Miw3IEBACiAKIFZpc2libGVTZWxlY3Rpb246
OlZpc2libGVTZWxlY3Rpb24oKQogICAgIDogbV9hZmZpbml0eShET1dOU1RSRUFNKQorICAgICwg
bV9jaGFuZ2VPYnNlcnZlcigwKQogICAgICwgbV9zZWxlY3Rpb25UeXBlKE5vU2VsZWN0aW9uKQog
ICAgICwgbV9iYXNlSXNGaXJzdCh0cnVlKQogICAgICwgbV9pc0RpcmVjdGlvbmFsKGZhbHNlKQpA
QCAtNTIsNiArNTMsNyBAQAogICAgIDogbV9iYXNlKHBvcykKICAgICAsIG1fZXh0ZW50KHBvcykK
ICAgICAsIG1fYWZmaW5pdHkoYWZmaW5pdHkpCisgICAgLCBtX2NoYW5nZU9ic2VydmVyKDApCiAg
ICAgLCBtX2lzRGlyZWN0aW9uYWwoaXNEaXJlY3Rpb25hbCkKIHsKICAgICB2YWxpZGF0ZSgpOwpA
QCAtNjEsNiArNjMsNyBAQAogICAgIDogbV9iYXNlKGJhc2UpCiAgICAgLCBtX2V4dGVudChleHRl
bnQpCiAgICAgLCBtX2FmZmluaXR5KGFmZmluaXR5KQorICAgICwgbV9jaGFuZ2VPYnNlcnZlcigw
KQogICAgICwgbV9pc0RpcmVjdGlvbmFsKGlzRGlyZWN0aW9uYWwpCiB7CiAgICAgdmFsaWRhdGUo
KTsKQEAgLTcwLDYgKzczLDcgQEAKICAgICA6IG1fYmFzZShwb3MuZGVlcEVxdWl2YWxlbnQoKSkK
ICAgICAsIG1fZXh0ZW50KHBvcy5kZWVwRXF1aXZhbGVudCgpKQogICAgICwgbV9hZmZpbml0eShw
b3MuYWZmaW5pdHkoKSkKKyAgICAsIG1fY2hhbmdlT2JzZXJ2ZXIoMCkKICAgICAsIG1faXNEaXJl
Y3Rpb25hbChpc0RpcmVjdGlvbmFsKQogewogICAgIHZhbGlkYXRlKCk7CkBAIC03OSw2ICs4Myw3
IEBACiAgICAgOiBtX2Jhc2UoYmFzZS5kZWVwRXF1aXZhbGVudCgpKQogICAgICwgbV9leHRlbnQo
ZXh0ZW50LmRlZXBFcXVpdmFsZW50KCkpCiAgICAgLCBtX2FmZmluaXR5KGJhc2UuYWZmaW5pdHko
KSkKKyAgICAsIG1fY2hhbmdlT2JzZXJ2ZXIoMCkKICAgICAsIG1faXNEaXJlY3Rpb25hbChpc0Rp
cmVjdGlvbmFsKQogewogICAgIHZhbGlkYXRlKCk7CkBAIC04OCwxMSArOTMsNDYgQEAKICAgICA6
IG1fYmFzZShyYW5nZS0+c3RhcnRQb3NpdGlvbigpKQogICAgICwgbV9leHRlbnQocmFuZ2UtPmVu
ZFBvc2l0aW9uKCkpCiAgICAgLCBtX2FmZmluaXR5KGFmZmluaXR5KQorICAgICwgbV9jaGFuZ2VP
YnNlcnZlcigwKQogICAgICwgbV9pc0RpcmVjdGlvbmFsKGlzRGlyZWN0aW9uYWwpCiB7CiAgICAg
dmFsaWRhdGUoKTsKIH0KIAorVmlzaWJsZVNlbGVjdGlvbjo6VmlzaWJsZVNlbGVjdGlvbihjb25z
dCBWaXNpYmxlU2VsZWN0aW9uJiBvdGhlcikKKyAgICA6IG1fYmFzZShvdGhlci5tX2Jhc2UpCisg
ICAgLCBtX2V4dGVudChvdGhlci5tX2V4dGVudCkKKyAgICAsIG1fc3RhcnQob3RoZXIubV9zdGFy
dCkKKyAgICAsIG1fZW5kKG90aGVyLm1fZW5kKQorICAgICwgbV9hZmZpbml0eShvdGhlci5tX2Fm
ZmluaXR5KQorICAgICwgbV9jaGFuZ2VPYnNlcnZlcigwKSAvLyBPYnNlcnZlciBpcyBhc3NvY2lh
dGVkIHdpdGggb25seSBvbmUgVmlzaWJsZVNlbGVjdGlvbiwgc28gdGhpcyBzaG91bGQgbm90IGJl
IGNvcGllZC4KKyAgICAsIG1fc2VsZWN0aW9uVHlwZShvdGhlci5tX3NlbGVjdGlvblR5cGUpCisg
ICAgLCBtX2Jhc2VJc0ZpcnN0KG90aGVyLm1fYmFzZUlzRmlyc3QpCisgICAgLCBtX2lzRGlyZWN0
aW9uYWwob3RoZXIubV9pc0RpcmVjdGlvbmFsKQoreworfQorCitWaXNpYmxlU2VsZWN0aW9uJiBW
aXNpYmxlU2VsZWN0aW9uOjpvcGVyYXRvcj0oY29uc3QgVmlzaWJsZVNlbGVjdGlvbiYgb3RoZXIp
Cit7CisgICAgZGlkQ2hhbmdlKCk7CisKKyAgICBtX2Jhc2UgPSBvdGhlci5tX2Jhc2U7CisgICAg
bV9leHRlbnQgPSBvdGhlci5tX2V4dGVudDsKKyAgICBtX3N0YXJ0ID0gb3RoZXIubV9zdGFydDsK
KyAgICBtX2VuZCA9IG90aGVyLm1fZW5kOworICAgIG1fYWZmaW5pdHkgPSBvdGhlci5tX2FmZmlu
aXR5OworICAgIG1fY2hhbmdlT2JzZXJ2ZXIgPSAwOworICAgIG1fc2VsZWN0aW9uVHlwZSA9IG90
aGVyLm1fc2VsZWN0aW9uVHlwZTsKKyAgICBtX2Jhc2VJc0ZpcnN0ID0gb3RoZXIubV9iYXNlSXNG
aXJzdDsKKyAgICBtX2lzRGlyZWN0aW9uYWwgPSBvdGhlci5tX2lzRGlyZWN0aW9uYWw7CisgICAg
cmV0dXJuICp0aGlzOworfQorCitWaXNpYmxlU2VsZWN0aW9uOjp+VmlzaWJsZVNlbGVjdGlvbigp
Cit7CisgICAgZGlkQ2hhbmdlKCk7Cit9CisKIFZpc2libGVTZWxlY3Rpb24gVmlzaWJsZVNlbGVj
dGlvbjo6c2VsZWN0aW9uRnJvbUNvbnRlbnRzT2ZOb2RlKE5vZGUqIG5vZGUpCiB7CiAgICAgQVNT
RVJUKCFlZGl0aW5nSWdub3Jlc0NvbnRlbnQobm9kZSkpOwpAQCAtMTAxLDI2ICsxNDEsMzggQEAK
IAogdm9pZCBWaXNpYmxlU2VsZWN0aW9uOjpzZXRCYXNlKGNvbnN0IFBvc2l0aW9uJiBwb3NpdGlv
bikKIHsKKyAgICBQb3NpdGlvbiBvbGRCYXNlID0gbV9iYXNlOwogICAgIG1fYmFzZSA9IHBvc2l0
aW9uOwogICAgIHZhbGlkYXRlKCk7CisgICAgaWYgKG1fYmFzZSAhPSBvbGRCYXNlKQorICAgICAg
ICBkaWRDaGFuZ2UoKTsKIH0KIAogdm9pZCBWaXNpYmxlU2VsZWN0aW9uOjpzZXRCYXNlKGNvbnN0
IFZpc2libGVQb3NpdGlvbiYgdmlzaWJsZVBvc2l0aW9uKQogeworICAgIFBvc2l0aW9uIG9sZEJh
c2UgPSBtX2Jhc2U7CiAgICAgbV9iYXNlID0gdmlzaWJsZVBvc2l0aW9uLmRlZXBFcXVpdmFsZW50
KCk7CiAgICAgdmFsaWRhdGUoKTsKKyAgICBpZiAobV9iYXNlICE9IG9sZEJhc2UpCisgICAgICAg
IGRpZENoYW5nZSgpOwogfQogCiB2b2lkIFZpc2libGVTZWxlY3Rpb246OnNldEV4dGVudChjb25z
dCBQb3NpdGlvbiYgcG9zaXRpb24pCiB7CisgICAgUG9zaXRpb24gb2xkRXh0ZW50ID0gbV9leHRl
bnQ7CiAgICAgbV9leHRlbnQgPSBwb3NpdGlvbjsKICAgICB2YWxpZGF0ZSgpOworICAgIGlmICht
X2V4dGVudCAhPSBvbGRFeHRlbnQpCisgICAgICAgIGRpZENoYW5nZSgpOwogfQogCiB2b2lkIFZp
c2libGVTZWxlY3Rpb246OnNldEV4dGVudChjb25zdCBWaXNpYmxlUG9zaXRpb24mIHZpc2libGVQ
b3NpdGlvbikKIHsKKyAgICBQb3NpdGlvbiBvbGRFeHRlbnQgPSBtX2V4dGVudDsKICAgICBtX2V4
dGVudCA9IHZpc2libGVQb3NpdGlvbi5kZWVwRXF1aXZhbGVudCgpOwogICAgIHZhbGlkYXRlKCk7
CisgICAgaWYgKG1fZXh0ZW50ICE9IG9sZEV4dGVudCkKKyAgICAgICAgZGlkQ2hhbmdlKCk7CiB9
CiAKIFBhc3NSZWZQdHI8UmFuZ2U+IFZpc2libGVTZWxlY3Rpb246OmZpcnN0UmFuZ2UoKSBjb25z
dApAQCAtMTkzLDcgKzI0NSwxNCBAQAogICAgIGlmIChpc05vbmUoKSkKICAgICAgICAgcmV0dXJu
IGZhbHNlOwogCisgICAgLy8gRklYTUU6IERvIHdlIG5lZWQgdG8gY2hlY2sgYWxsIG9mIHRoZW0/
CisgICAgUG9zaXRpb24gb2xkQmFzZSA9IG1fYmFzZTsKKyAgICBQb3NpdGlvbiBvbGRFeHRlbnQg
PSBtX2V4dGVudDsKKyAgICBQb3NpdGlvbiBvbGRTdGFydCA9IG1fc3RhcnQ7CisgICAgUG9zaXRp
b24gb2xkRW5kID0gbV9lbmQ7CiAgICAgdmFsaWRhdGUoZ3JhbnVsYXJpdHkpOworICAgIGlmICht
X2Jhc2UgIT0gb2xkQmFzZSB8fCBtX2V4dGVudCAhPSBvbGRFeHRlbnQgfHwgbV9zdGFydCAhPSBv
bGRTdGFydCB8fCBtX2VuZCAhPSBvbGRFbmQpCisgICAgICAgIGRpZENoYW5nZSgpOwogICAgIHJl
dHVybiB0cnVlOwogfQogCkBAIC0yMzUsMTMgKzI5NCwxNyBAQAogICAgICAgICByZXR1cm47CiAK
ICAgICBDaGFyYWN0ZXJJdGVyYXRvciBjaGFySXQoKnNlYXJjaFJhbmdlLCBUZXh0SXRlcmF0b3JF
bWl0c0NoYXJhY3RlcnNCZXR3ZWVuQWxsVmlzaWJsZVBvc2l0aW9ucyk7CisgICAgYm9vbCBjaGFu
Z2VkID0gZmFsc2U7CiAKICAgICBmb3IgKDsgIWNoYXJJdC5hdEVuZCgpICYmIGNoYXJJdC50ZXh0
KCkubGVuZ3RoKCk7IGNoYXJJdC5hZHZhbmNlKDEpKSB7CiAgICAgICAgIFVDaGFyIGMgPSBjaGFy
SXQudGV4dCgpWzBdOwogICAgICAgICBpZiAoKCFpc1NwYWNlT3JOZXdsaW5lKGMpICYmIGMgIT0g
bm9CcmVha1NwYWNlKSB8fCBjID09ICdcbicpCiAgICAgICAgICAgICBicmVhazsKICAgICAgICAg
bV9lbmQgPSBjaGFySXQucmFuZ2UoKS0+ZW5kUG9zaXRpb24oKTsKKyAgICAgICAgY2hhbmdlZCA9
IHRydWU7CiAgICAgfQorICAgIGlmIChjaGFuZ2VkKQorICAgICAgICBkaWRDaGFuZ2UoKTsKIH0K
IAogdm9pZCBWaXNpYmxlU2VsZWN0aW9uOjpzZXRCYXNlQW5kRXh0ZW50VG9EZWVwRXF1aXZhbGVu
dHMoKQpAQCAtNDY3LDYgKzUzMCw3IEBACiAgICAgICAgIG1fZW5kID0gYmFzZTsKICAgICB9CiAg
ICAgbV9zZWxlY3Rpb25UeXBlID0gYmFzZSA9PSBleHRlbnQgPyBDYXJldFNlbGVjdGlvbiA6IFJh
bmdlU2VsZWN0aW9uOworICAgIGRpZENoYW5nZSgpOwogfQogCiBzdGF0aWMgUG9zaXRpb24gYWRq
dXN0UG9zaXRpb25Gb3JFbmQoY29uc3QgUG9zaXRpb24mIGN1cnJlbnRQb3NpdGlvbiwgTm9kZSog
c3RhcnRDb250YWluZXJOb2RlKQpAQCAtNjY3LDYgKzczMSwzMiBAQAogICAgIHJldHVybiBpczxI
VE1MSW5wdXRFbGVtZW50Pih0ZXh0Q29udHJvbCkgJiYgZG93bmNhc3Q8SFRNTElucHV0RWxlbWVu
dD4oKnRleHRDb250cm9sKS5pc1Bhc3N3b3JkRmllbGQoKTsKIH0KIAorVmlzaWJsZVNlbGVjdGlv
bjo6Q2hhbmdlT2JzZXJ2ZXI6OkNoYW5nZU9ic2VydmVyKCkKK3sKK30KKworVmlzaWJsZVNlbGVj
dGlvbjo6Q2hhbmdlT2JzZXJ2ZXI6On5DaGFuZ2VPYnNlcnZlcigpCit7Cit9CisKK3ZvaWQgVmlz
aWJsZVNlbGVjdGlvbjo6c2V0Q2hhbmdlT2JzZXJ2ZXIoQ2hhbmdlT2JzZXJ2ZXImIG9ic2VydmVy
KQoreworICAgIEFTU0VSVCghbV9jaGFuZ2VPYnNlcnZlcik7CisgICAgbV9jaGFuZ2VPYnNlcnZl
ciA9ICZvYnNlcnZlcjsKK30KKwordm9pZCBWaXNpYmxlU2VsZWN0aW9uOjpjbGVhckNoYW5nZU9i
c2VydmVyKCkKK3sKKyAgICBBU1NFUlQobV9jaGFuZ2VPYnNlcnZlcik7CisgICAgbV9jaGFuZ2VP
YnNlcnZlciA9IDA7Cit9CisKK3ZvaWQgVmlzaWJsZVNlbGVjdGlvbjo6ZGlkQ2hhbmdlKCkKK3sK
KyAgICBpZiAobV9jaGFuZ2VPYnNlcnZlcikKKyAgICAgICAgbV9jaGFuZ2VPYnNlcnZlci0+ZGlk
Q2hhbmdlVmlzaWJsZVNlbGVjdGlvbigpOworfQorCiAjaWZuZGVmIE5ERUJVRwogCiB2b2lkIFZp
c2libGVTZWxlY3Rpb246OmRlYnVnUG9zaXRpb24oKSBjb25zdApJbmRleDogU291cmNlL1dlYkNv
cmUvZWRpdGluZy9WaXNpYmxlU2VsZWN0aW9uLmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNv
cmUvZWRpdGluZy9WaXNpYmxlU2VsZWN0aW9uLmgJKHJldmlzaW9uIDE3NDMyNCkKKysrIFNvdXJj
ZS9XZWJDb3JlL2VkaXRpbmcvVmlzaWJsZVNlbGVjdGlvbi5oCSh3b3JraW5nIGNvcHkpCkBAIC01
MCw2ICs1MCwxMSBAQAogICAgIFdFQkNPUkVfRVhQT1JUIFZpc2libGVTZWxlY3Rpb24oY29uc3Qg
VmlzaWJsZVBvc2l0aW9uJiwgYm9vbCBpc0RpcmVjdGlvbmFsID0gZmFsc2UpOwogICAgIFdFQkNP
UkVfRVhQT1JUIFZpc2libGVTZWxlY3Rpb24oY29uc3QgVmlzaWJsZVBvc2l0aW9uJiwgY29uc3Qg
VmlzaWJsZVBvc2l0aW9uJiwgYm9vbCBpc0RpcmVjdGlvbmFsID0gZmFsc2UpOwogCisgICAgVmlz
aWJsZVNlbGVjdGlvbihjb25zdCBWaXNpYmxlU2VsZWN0aW9uJik7CisgICAgVmlzaWJsZVNlbGVj
dGlvbiYgb3BlcmF0b3I9KGNvbnN0IFZpc2libGVTZWxlY3Rpb24mKTsKKworICAgIFdFQkNPUkVf
RVhQT1JUIH5WaXNpYmxlU2VsZWN0aW9uKCk7CisKICAgICBXRUJDT1JFX0VYUE9SVCBzdGF0aWMg
VmlzaWJsZVNlbGVjdGlvbiBzZWxlY3Rpb25Gcm9tQ29udGVudHNPZk5vZGUoTm9kZSopOwogCiAg
ICAgU2VsZWN0aW9uVHlwZSBzZWxlY3Rpb25UeXBlKCkgY29uc3QgeyByZXR1cm4gbV9zZWxlY3Rp
b25UeXBlOyB9CkBAIC0xMDcsMTQgKzExMiwzMCBAQAogCiAgICAgV0VCQ09SRV9FWFBPUlQgYm9v
bCBpc0luUGFzc3dvcmRGaWVsZCgpIGNvbnN0OwogCisgICAgdm9pZCBzZXRXaXRob3V0VmFsaWRh
dGlvbihjb25zdCBQb3NpdGlvbiYsIGNvbnN0IFBvc2l0aW9uJik7CisKKyAgICAvLyBMaXN0ZW5l
ciBvZiBWaXNpYmxlU2VsZWN0aW9uIG1vZGlmaWNhdGlvbi4gZGlkQ2hhbmdlVmlzaWJsZVNlbGVj
dGlvbigpIHdpbGwgYmUgaW52b2tlZCB3aGVuIGJhc2UsIGV4dGVudCwgc3RhcnQKKyAgICAvLyBv
ciBlbmQgaXMgbW92ZWQgdG8gYSBkaWZmZXJlbnQgcG9zaXRpb24uCisgICAgLy8KKyAgICAvLyBP
YmplY3RzIGltcGxlbWVudGluZyB8Q2hhbmdlT2JzZXJ2ZXJ8IGludGVyZmFjZSBtdXN0IG91dGxp
dmUgdGhlIFZpc2libGVTZWxlY3Rpb24gb2JqZWN0LgorICAgIGNsYXNzIENoYW5nZU9ic2VydmVy
IHsKKyAgICAgICAgV1RGX01BS0VfTk9OQ09QWUFCTEUoQ2hhbmdlT2JzZXJ2ZXIpOworICAgIHB1
YmxpYzoKKyAgICAgICAgQ2hhbmdlT2JzZXJ2ZXIoKTsKKyAgICAgICAgdmlydHVhbCB+Q2hhbmdl
T2JzZXJ2ZXIoKTsKKyAgICAgICAgdmlydHVhbCB2b2lkIGRpZENoYW5nZVZpc2libGVTZWxlY3Rp
b24oKSA9IDA7CisgICAgfTsKKworICAgIHZvaWQgc2V0Q2hhbmdlT2JzZXJ2ZXIoQ2hhbmdlT2Jz
ZXJ2ZXImKTsKKyAgICB2b2lkIGNsZWFyQ2hhbmdlT2JzZXJ2ZXIoKTsKKyAgICB2b2lkIGRpZENo
YW5nZSgpOyAvLyBGaXJlIHRoZSBjaGFuZ2Ugb2JzZXJ2ZXIsIGlmIGFueS4KKwogI2lmbmRlZiBO
REVCVUcKICAgICB2b2lkIGRlYnVnUG9zaXRpb24oKSBjb25zdDsKICAgICB2b2lkIGZvcm1hdEZv
ckRlYnVnZ2VyKGNoYXIqIGJ1ZmZlciwgdW5zaWduZWQgbGVuZ3RoKSBjb25zdDsKICAgICB2b2lk
IHNob3dUcmVlRm9yVGhpcygpIGNvbnN0OwogI2VuZGlmCiAKLSAgICB2b2lkIHNldFdpdGhvdXRW
YWxpZGF0aW9uKGNvbnN0IFBvc2l0aW9uJiwgY29uc3QgUG9zaXRpb24mKTsKLQogcHJpdmF0ZToK
ICAgICB2b2lkIHZhbGlkYXRlKFRleHRHcmFudWxhcml0eSA9IENoYXJhY3RlckdyYW51bGFyaXR5
KTsKIApAQCAtMTM3LDEwICsxNTgsMTMgQEAKIAogICAgIEVBZmZpbml0eSBtX2FmZmluaXR5OyAg
ICAgICAgICAgLy8gdGhlIHVwc3RyZWFtL2Rvd25zdHJlYW0gYWZmaW5pdHkgb2YgdGhlIGNhcmV0
CiAKKyAgICBDaGFuZ2VPYnNlcnZlciogbV9jaGFuZ2VPYnNlcnZlcjsKKwogICAgIC8vIHRoZXNl
IGFyZSBjYWNoZWQsIGNhbiBiZSByZWNhbGN1bGF0ZWQgYnkgdmFsaWRhdGUoKQogICAgIFNlbGVj
dGlvblR5cGUgbV9zZWxlY3Rpb25UeXBlOyAvLyBOb25lLCBDYXJldCwgUmFuZ2UKICAgICBib29s
IG1fYmFzZUlzRmlyc3QgOiAxOyAvLyBUcnVlIGlmIGJhc2UgaXMgYmVmb3JlIHRoZSBleHRlbnQK
ICAgICBib29sIG1faXNEaXJlY3Rpb25hbCA6IDE7IC8vIE5vbi1kaXJlY3Rpb25hbCBpZ25vcmVz
IG1fYmFzZUlzRmlyc3QgYW5kIHNlbGVjdGlvbiBhbHdheXMgZXh0ZW5kcyBvbiBzaGlmdCArIGFy
cm93IGtleS4KKwogfTsKIAogaW5saW5lIGJvb2wgb3BlcmF0b3I9PShjb25zdCBWaXNpYmxlU2Vs
ZWN0aW9uJiBhLCBjb25zdCBWaXNpYmxlU2VsZWN0aW9uJiBiKQpJbmRleDogU291cmNlL1dlYkNv
cmUvZWRpdGluZy9WaXNpYmxlVW5pdHMuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3Jl
L2VkaXRpbmcvVmlzaWJsZVVuaXRzLmNwcAkocmV2aXNpb24gMTc0MzI0KQorKysgU291cmNlL1dl
YkNvcmUvZWRpdGluZy9WaXNpYmxlVW5pdHMuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC01NTIsNiAr
NTUyLDkgQEAKIHsKICAgICBQb3NpdGlvbiBwb3MgPSBjLmRlZXBFcXVpdmFsZW50KCk7CiAgICAg
Tm9kZSogYm91bmRhcnkgPSBwb3MucGFyZW50RWRpdGluZ0JvdW5kYXJ5KCk7CisgICAgCisgICAg
LyogSWYgdGhlcmUncyBub3QgYW4gZWRpdGFibGUgZW5jbG9zaW5nIGVsZW1lbnQsIG9yIGlmIHRo
ZSBlbGVtZW50IGlzIGluIGEgZGV0YWN0aGVkCisgICAgICAgZnJhZ21lbnQsIGJhaWwuICovCiAg
ICAgaWYgKCFib3VuZGFyeSkKICAgICAgICAgcmV0dXJuIFZpc2libGVQb3NpdGlvbigpOwogCklu
ZGV4OiBTb3VyY2UvV2ViQ29yZS9lZGl0aW5nL2h0bWxlZGl0aW5nLmNwcAo9PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0t
LSBTb3VyY2UvV2ViQ29yZS9lZGl0aW5nL2h0bWxlZGl0aW5nLmNwcAkocmV2aXNpb24gMTc0MzI0
KQorKysgU291cmNlL1dlYkNvcmUvZWRpdGluZy9odG1sZWRpdGluZy5jcHAJKHdvcmtpbmcgY29w
eSkKQEAgLTM0NCw2ICszNDQsMTMgQEAKIAogICAgIGlmIChub2RlLT5oYXNDaGlsZE5vZGVzKCkp
CiAgICAgICAgIHJldHVybiBub2RlLT5jb3VudENoaWxkTm9kZXMoKTsKKyAgICAKKyAgICBpZiAo
bm9kZS0+aXNFbGVtZW50Tm9kZSgpKSB7CisgICAgICAgIGNvbnN0IEVsZW1lbnQgKmVsdCA9IGRv
d25jYXN0PEVsZW1lbnQ+KG5vZGUpOworICAgICAgICBpZiAoZWx0LT5iZWZvcmVQc2V1ZG9FbGVt
ZW50KCkgfHwgZWx0LT5hZnRlclBzZXVkb0VsZW1lbnQoKSkgeworICAgICAgICAgICAgcmV0dXJu
IDE7CisgICAgICAgIH0KKyAgICB9CiAKICAgICAvLyBOT1RFOiBUaGlzIHNob3VsZCBwcmVlbXB0
IHRoZSBjb3VudENoaWxkTm9kZXMoKSBmb3IsIGUuZy4sIHNlbGVjdCBub2RlcyAod2hhdCBkb2Vz
IHRoaXMgbWVhbik/CiAgICAgaWYgKGVkaXRpbmdJZ25vcmVzQ29udGVudChub2RlKSkKSW5kZXg6
IFNvdXJjZS9XZWJDb3JlL3BhZ2UvRE9NU2VsZWN0aW9uLmNwcAo9PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3Vy
Y2UvV2ViQ29yZS9wYWdlL0RPTVNlbGVjdGlvbi5jcHAJKHJldmlzaW9uIDE3NDMyNCkKKysrIFNv
dXJjZS9XZWJDb3JlL3BhZ2UvRE9NU2VsZWN0aW9uLmNwcAkod29ya2luZyBjb3B5KQpAQCAtMTky
LDYgKzE5Miw3IEBACiAKIHZvaWQgRE9NU2VsZWN0aW9uOjpjb2xsYXBzZShOb2RlKiBub2RlLCBp
bnQgb2Zmc2V0LCBFeGNlcHRpb25Db2RlJiBlYykKIHsKKyAgICBBU1NFUlQobm9kZSk7CiAgICAg
aWYgKCFtX2ZyYW1lKQogICAgICAgICByZXR1cm47CiAKQEAgLTIwMywxMCArMjA0LDIwIEBACiAg
ICAgaWYgKCFpc1ZhbGlkRm9yUG9zaXRpb24obm9kZSkpCiAgICAgICAgIHJldHVybjsKIAotICAg
IC8vIEZJWE1FOiBFbGltaW5hdGUgbGVnYWN5IGVkaXRpbmcgcG9zaXRpb25zCi0gICAgbV9mcmFt
ZS0+c2VsZWN0aW9uKCkubW92ZVRvKGNyZWF0ZUxlZ2FjeUVkaXRpbmdQb3NpdGlvbihub2RlLCBv
ZmZzZXQpLCBET1dOU1RSRUFNKTsKKyAgICBpZiAoIW5vZGUpCisgICAgICAgIHJldHVybjsKKwor
ICAgIC8qIFJlZlB0cldpbGxCZVJhd1B0ciAqLyBSZWZQdHI8UmFuZ2U+IHJhbmdlID0gUmFuZ2U6
OmNyZWF0ZShub2RlLT5kb2N1bWVudCgpKTsKKyAgICByYW5nZS0+c2V0U3RhcnQobm9kZSwgb2Zm
c2V0KTsgLy8gLCBleGNlcHRpb25TdGF0ZSk7CisgICAgcmFuZ2UtPnNldEVuZChub2RlLCBvZmZz
ZXQpOyAvLyAsIGV4Y2VwdGlvblN0YXRlKTsKKyAgICBtX2ZyYW1lLT5zZWxlY3Rpb24oKS5zZXRT
ZWxlY3RlZFJhbmdlKHJhbmdlLmdldCgpLCBET1dOU1RSRUFNLCBmYWxzZSwgbV9mcmFtZS0+c2Vs
ZWN0aW9uKCkuaXNEaXJlY3Rpb25hbCgpKTsKIH0KIAordm9pZCBET01TZWxlY3Rpb246OmNvbGxh
cHNlKE5vZGUqIG5vZGUsIEV4Y2VwdGlvbkNvZGUmIGV4Y2VwdGlvblN0YXRlKQoreworICAgIGNv
bGxhcHNlKG5vZGUsIDAsIGV4Y2VwdGlvblN0YXRlKTsKK30KKwogdm9pZCBET01TZWxlY3Rpb246
OmNvbGxhcHNlVG9FbmQoRXhjZXB0aW9uQ29kZSYgZWMpCiB7CiAgICAgaWYgKCFtX2ZyYW1lKQpA
QCAtMzY4LDcgKzM3OSw3IEBACiAgICAgICAgIHJldHVybiBSYW5nZTo6Y3JlYXRlKHNoYWRvd0Fu
Y2VzdG9yLT5kb2N1bWVudCgpLCBjb250YWluZXIsIG9mZnNldCwgY29udGFpbmVyLCBvZmZzZXQp
OwogICAgIH0KIAotICAgIHJldHVybiBtX2ZyYW1lLT5zZWxlY3Rpb24oKS5zZWxlY3Rpb24oKS5m
aXJzdFJhbmdlKCk7CisgICAgcmV0dXJuIG1fZnJhbWUtPnNlbGVjdGlvbigpLmZpcnN0UmFuZ2Uo
KTsKIH0KIAogdm9pZCBET01TZWxlY3Rpb246OnJlbW92ZUFsbFJhbmdlcygpCkBAIC0zNzgsNDUg
KzM4OSw2MyBAQAogICAgIG1fZnJhbWUtPnNlbGVjdGlvbigpLmNsZWFyKCk7CiB9CiAKLXZvaWQg
RE9NU2VsZWN0aW9uOjphZGRSYW5nZShSYW5nZSogcikKK3ZvaWQgRE9NU2VsZWN0aW9uOjphZGRS
YW5nZShSYW5nZSogbmV3UmFuZ2UpCiB7CiAgICAgaWYgKCFtX2ZyYW1lKQogICAgICAgICByZXR1
cm47Ci0gICAgaWYgKCFyKQorICAgIC8vIEZJWE1FOiBTaG91bGQgd2UgdGhyb3cgRE9NRXhjZXB0
aW9uIGZvciBlcnJvciBjYXNlcyBiZWxvdz8KKyAgICBpZiAoIW5ld1JhbmdlKSB7CisgICAgICAg
IGFkZENvbnNvbGVFcnJvcigiVGhlIGdpdmVuIHJhbmdlIGlzIG51bGwuIik7CiAgICAgICAgIHJl
dHVybjsKKyAgICB9CisgICAgaWYgKCFuZXdSYW5nZS0+c3RhcnRDb250YWluZXIoKSkgeworICAg
ICAgICBhZGRDb25zb2xlRXJyb3IoIlRoZSBnaXZlbiByYW5nZSBoYXMgbm8gY29udGFpbmVyLiBQ
ZXJoYXBzICdkZXRhY2goKScgaGFzIGJlZW4gaW52b2tlZCBvbiBpdD8iKTsKKyAgICAgICAgcmV0
dXJuOworICAgIH0KIAorCiAgICAgRnJhbWVTZWxlY3Rpb24mIHNlbGVjdGlvbiA9IG1fZnJhbWUt
PnNlbGVjdGlvbigpOwogCiAgICAgaWYgKHNlbGVjdGlvbi5pc05vbmUoKSkgewotICAgICAgICBz
ZWxlY3Rpb24ubW92ZVRvKHIpOworICAgICAgICAvLyBzZWxlY3Rpb24ubW92ZVRvKHIpOworICAg
ICAgICBzZWxlY3Rpb24uc2V0U2VsZWN0ZWRSYW5nZShuZXdSYW5nZSwgVlBfREVGQVVMVF9BRkZJ
TklUWSwgZmFsc2UsIHNlbGVjdGlvbi5pc0RpcmVjdGlvbmFsKCkpOwogICAgICAgICByZXR1cm47
CiAgICAgfQogCi0gICAgUmVmUHRyPFJhbmdlPiByYW5nZSA9IHNlbGVjdGlvbi5zZWxlY3Rpb24o
KS50b05vcm1hbGl6ZWRSYW5nZSgpOwotICAgIGlmIChyLT5jb21wYXJlQm91bmRhcnlQb2ludHMo
UmFuZ2U6OlNUQVJUX1RPX1NUQVJULCByYW5nZS5nZXQoKSwgSUdOT1JFX0VYQ0VQVElPTikgPT0g
LTEpIHsKLSAgICAgICAgLy8gV2UgZG9uJ3Qgc3VwcG9ydCBkaXNjb250aWd1b3VzIHNlbGVjdGlv
bi4gV2UgZG9uJ3QgZG8gYW55dGhpbmcgaWYgciBhbmQgcmFuZ2UgZG9uJ3QgaW50ZXJzZWN0Lgot
ICAgICAgICBpZiAoci0+Y29tcGFyZUJvdW5kYXJ5UG9pbnRzKFJhbmdlOjpTVEFSVF9UT19FTkQs
IHJhbmdlLmdldCgpLCBJR05PUkVfRVhDRVBUSU9OKSA+IC0xKSB7Ci0gICAgICAgICAgICBpZiAo
ci0+Y29tcGFyZUJvdW5kYXJ5UG9pbnRzKFJhbmdlOjpFTkRfVE9fRU5ELCByYW5nZS5nZXQoKSwg
SUdOT1JFX0VYQ0VQVElPTikgPT0gLTEpIHsKLSAgICAgICAgICAgICAgICAvLyBUaGUgb3JpZ2lu
YWwgcmFuZ2UgYW5kIHIgaW50ZXJzZWN0LgotICAgICAgICAgICAgICAgIHNlbGVjdGlvbi5tb3Zl
VG8oci0+c3RhcnRQb3NpdGlvbigpLCByYW5nZS0+ZW5kUG9zaXRpb24oKSwgRE9XTlNUUkVBTSk7
Ci0gICAgICAgICAgICB9IGVsc2UgewotICAgICAgICAgICAgICAgIC8vIHIgY29udGFpbnMgdGhl
IG9yaWdpbmFsIHJhbmdlLgotICAgICAgICAgICAgICAgIHNlbGVjdGlvbi5tb3ZlVG8ocik7Ci0g
ICAgICAgICAgICB9Ci0gICAgICAgIH0KLSAgICB9IGVsc2UgewotICAgICAgICAvLyBXZSBkb24n
dCBzdXBwb3J0IGRpc2NvbnRpZ3VvdXMgc2VsZWN0aW9uLiBXZSBkb24ndCBkbyBhbnl0aGluZyBp
ZiByIGFuZCByYW5nZSBkb24ndCBpbnRlcnNlY3QuCi0gICAgICAgIEV4Y2VwdGlvbkNvZGUgZWMg
PSAwOwotICAgICAgICBpZiAoci0+Y29tcGFyZUJvdW5kYXJ5UG9pbnRzKFJhbmdlOjpFTkRfVE9f
U1RBUlQsIHJhbmdlLmdldCgpLCBlYykgPCAxICYmICFlYykgewotICAgICAgICAgICAgaWYgKHIt
PmNvbXBhcmVCb3VuZGFyeVBvaW50cyhSYW5nZTo6RU5EX1RPX0VORCwgcmFuZ2UuZ2V0KCksIElH
Tk9SRV9FWENFUFRJT04pID09IC0xKSB7Ci0gICAgICAgICAgICAgICAgLy8gVGhlIG9yaWdpbmFs
IHJhbmdlIGNvbnRhaW5zIHIuCi0gICAgICAgICAgICAgICAgc2VsZWN0aW9uLm1vdmVUbyhyYW5n
ZS5nZXQoKSk7Ci0gICAgICAgICAgICB9IGVsc2UgewotICAgICAgICAgICAgICAgIC8vIFRoZSBv
cmlnaW5hbCByYW5nZSBhbmQgciBpbnRlcnNlY3QuCi0gICAgICAgICAgICAgICAgc2VsZWN0aW9u
Lm1vdmVUbyhyYW5nZS0+c3RhcnRQb3NpdGlvbigpLCByLT5lbmRQb3NpdGlvbigpLCBET1dOU1RS
RUFNKTsKLSAgICAgICAgICAgIH0KLSAgICAgICAgfQorICAgIFJlZlB0cjxSYW5nZT4gb3JpZ2lu
YWxSYW5nZSA9IHNlbGVjdGlvbi5maXJzdFJhbmdlKCk7CisKKyAgICBpZiAoJm9yaWdpbmFsUmFu
Z2UtPnN0YXJ0Q29udGFpbmVyKCktPmRvY3VtZW50KCkgIT0gJm5ld1JhbmdlLT5zdGFydENvbnRh
aW5lcigpLT5kb2N1bWVudCgpKSB7CisgICAgICAgIGFkZENvbnNvbGVFcnJvcigiVGhlIGdpdmVu
IHJhbmdlIGRvZXMgbm90IGJlbG9uZyB0byB0aGUgY3VycmVudCBzZWxlY3Rpb24ncyBkb2N1bWVu
dC4iKTsKKyAgICAgICAgcmV0dXJuOwogICAgIH0KKyAgICBpZiAoJm9yaWdpbmFsUmFuZ2UtPnN0
YXJ0Q29udGFpbmVyKCktPnRyZWVTY29wZSgpICE9ICZuZXdSYW5nZS0+c3RhcnRDb250YWluZXIo
KS0+dHJlZVNjb3BlKCkpIHsKKyAgICAgICAgYWRkQ29uc29sZUVycm9yKCJUaGUgZ2l2ZW4gcmFu
Z2UgYW5kIHRoZSBjdXJyZW50IHNlbGVjdGlvbiBiZWxvbmcgdG8gdHdvIGRpZmZlcmVudCBkb2N1
bWVudCBmcmFnbWVudHMuIik7CisgICAgICAgIHJldHVybjsKKyAgICB9CisKKyAgICBpZiAob3Jp
Z2luYWxSYW5nZS0+Y29tcGFyZUJvdW5kYXJ5UG9pbnRzKFJhbmdlOjpTVEFSVF9UT19FTkQsIG5l
d1JhbmdlLCBBU1NFUlRfTk9fRVhDRVBUSU9OKSA8IDAKKyAgICAgICAgfHwgbmV3UmFuZ2UtPmNv
bXBhcmVCb3VuZGFyeVBvaW50cyhSYW5nZTo6U1RBUlRfVE9fRU5ELCBvcmlnaW5hbFJhbmdlLmdl
dCgpLCBBU1NFUlRfTk9fRVhDRVBUSU9OKSA8IDApIHsKKyAgICAgICAgYWRkQ29uc29sZUVycm9y
KCJEaXNjb250aWd1b3VzIHNlbGVjdGlvbiBpcyBub3Qgc3VwcG9ydGVkLiIpOworICAgICAgICBy
ZXR1cm47CisgICAgfQorCisgICAgaWYgKG9yaWdpbmFsUmFuZ2UtPmNvbXBhcmVCb3VuZGFyeVBv
aW50cyhSYW5nZTo6U1RBUlRfVE9fRU5ELCBuZXdSYW5nZSwgQVNTRVJUX05PX0VYQ0VQVElPTikg
PCAwCisgICAgICAgIHx8IG5ld1JhbmdlLT5jb21wYXJlQm91bmRhcnlQb2ludHMoUmFuZ2U6OlNU
QVJUX1RPX0VORCwgb3JpZ2luYWxSYW5nZS5nZXQoKSwgQVNTRVJUX05PX0VYQ0VQVElPTikgPCAw
KSB7CisgICAgICAgIGFkZENvbnNvbGVFcnJvcigiRGlzY29udGlndW91cyBzZWxlY3Rpb24gaXMg
bm90IHN1cHBvcnRlZC4iKTsKKyAgICAgICAgcmV0dXJuOworICAgIH0KKworICAgIC8vIEZJWE1F
OiAiTWVyZ2UgdGhlIHJhbmdlcyBpZiB0aGV5IGludGVyc2VjdCIgaXMgQmxpbmstc3BlY2lmaWMg
YmVoYXZpb3I7IG90aGVyIGJyb3dzZXJzIHN1cHBvcnRpbmcgZGlzY29udGlndW91cworICAgIC8v
IHNlbGVjdGlvbiAob2J2aW91c2x5KSBrZWVwIGVhY2ggUmFuZ2UgYWRkZWQgYW5kIHJldHVybiBp
dCBpbiBnZXRSYW5nZUF0KCkuIEJ1dCBpdCdzIHVuY2xlYXIgaWYgd2UgY2FuIHJlYWxseQorICAg
IC8vIGRvIHRoZSBzYW1lLCBzaW5jZSB3ZSBkb24ndCBzdXBwb3J0IGRpc2NvbnRpZ3VvdXMgc2Vs
ZWN0aW9uLiBGdXJ0aGVyIGRpc2N1c3Npb25zIGF0CisgICAgLy8gPGh0dHBzOi8vY29kZS5nb29n
bGUuY29tL3AvY2hyb21pdW0vaXNzdWVzL2RldGFpbD9pZD0zNTMwNjk+LgorCisgICAgUmFuZ2Uq
IHN0YXJ0ID0gb3JpZ2luYWxSYW5nZS0+Y29tcGFyZUJvdW5kYXJ5UG9pbnRzKFJhbmdlOjpTVEFS
VF9UT19TVEFSVCwgbmV3UmFuZ2UsIEFTU0VSVF9OT19FWENFUFRJT04pIDwgMCA/IG9yaWdpbmFs
UmFuZ2UuZ2V0KCkgOiBuZXdSYW5nZTsKKyAgICBSYW5nZSogZW5kID0gb3JpZ2luYWxSYW5nZS0+
Y29tcGFyZUJvdW5kYXJ5UG9pbnRzKFJhbmdlOjpFTkRfVE9fRU5ELCBuZXdSYW5nZSwgQVNTRVJU
X05PX0VYQ0VQVElPTikgPCAwID8gbmV3UmFuZ2UgOiBvcmlnaW5hbFJhbmdlLmdldCgpOworICAg
IFJlZlB0cjxSYW5nZT4gbWVyZ2VkID0gUmFuZ2U6OmNyZWF0ZShvcmlnaW5hbFJhbmdlLT5zdGFy
dENvbnRhaW5lcigpLT5kb2N1bWVudCgpLCBzdGFydC0+c3RhcnRDb250YWluZXIoKSwgc3RhcnQt
PnN0YXJ0T2Zmc2V0KCksIGVuZC0+ZW5kQ29udGFpbmVyKCksIGVuZC0+ZW5kT2Zmc2V0KCkpOwor
ICAgIEVBZmZpbml0eSBhZmZpbml0eSA9IHNlbGVjdGlvbi5zZWxlY3Rpb24oKS5hZmZpbml0eSgp
OworICAgIHNlbGVjdGlvbi5zZXRTZWxlY3RlZFJhbmdlKG1lcmdlZC5nZXQoKSwgYWZmaW5pdHks
IGZhbHNlLCBzZWxlY3Rpb24uaXNEaXJlY3Rpb25hbCgpKTsKKwogfQogCiB2b2lkIERPTVNlbGVj
dGlvbjo6ZGVsZXRlRnJvbURvY3VtZW50KCkKQEAgLTUzNCw0ICs1NjMsMTAgQEAKICAgICByZXR1
cm4gJm5vZGUtPmRvY3VtZW50KCkgPT0gbV9mcmFtZS0+ZG9jdW1lbnQoKTsKIH0KIAordm9pZCBE
T01TZWxlY3Rpb246OmFkZENvbnNvbGVFcnJvcihjb25zdCBTdHJpbmcmIG1lc3NhZ2UpCit7Cisg
ICAgQVNTRVJUKG1fZnJhbWUpOworICAgIG1fZnJhbWUtPmRvY3VtZW50KCktPmFkZENvbnNvbGVN
ZXNzYWdlKE1lc3NhZ2VTb3VyY2U6OkpTLCBNZXNzYWdlTGV2ZWw6OkVycm9yLCBtZXNzYWdlKTsK
K30KKwogfSAvLyBuYW1lc3BhY2UgV2ViQ29yZQpJbmRleDogU291cmNlL1dlYkNvcmUvcGFnZS9E
T01TZWxlY3Rpb24uaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9wYWdlL0RPTVNlbGVj
dGlvbi5oCShyZXZpc2lvbiAxNzQzMjQpCisrKyBTb3VyY2UvV2ViQ29yZS9wYWdlL0RPTVNlbGVj
dGlvbi5oCSh3b3JraW5nIGNvcHkpCkBAIC03Nyw2ICs3Nyw3IEBACiAgICAgICAgIGJvb2wgaXND
b2xsYXBzZWQoKSBjb25zdDsKICAgICAgICAgaW50IHJhbmdlQ291bnQoKSBjb25zdDsKICAgICAg
ICAgdm9pZCBjb2xsYXBzZShOb2RlKiwgaW50IG9mZnNldCwgRXhjZXB0aW9uQ29kZSYpOworICAg
ICAgICB2b2lkIGNvbGxhcHNlKE5vZGUqLCBFeGNlcHRpb25Db2RlJik7CiAgICAgICAgIHZvaWQg
Y29sbGFwc2VUb0VuZChFeGNlcHRpb25Db2RlJik7CiAgICAgICAgIHZvaWQgY29sbGFwc2VUb1N0
YXJ0KEV4Y2VwdGlvbkNvZGUmKTsKICAgICAgICAgdm9pZCBleHRlbmQoTm9kZSosIGludCBvZmZz
ZXQsIEV4Y2VwdGlvbkNvZGUmKTsKQEAgLTkzLDggKzk0LDYgQEAKICAgICAgICAgdm9pZCBlbXB0
eSgpOwogCiAgICAgcHJpdmF0ZToKLSAgICAgICAgY29uc3QgVHJlZVNjb3BlKiBtX3RyZWVTY29w
ZTsKLQogICAgICAgICBleHBsaWNpdCBET01TZWxlY3Rpb24oY29uc3QgVHJlZVNjb3BlKik7CiAK
ICAgICAgICAgLy8gQ29udmVuaWVuY2UgbWV0aG9kIGZvciBhY2Nlc3NvcnMsIGRvZXMgbm90IE5V
TEwgY2hlY2sgbV9mcmFtZS4KQEAgLTEwNCw2ICsxMDMsMTAgQEAKICAgICAgICAgaW50IHNoYWRv
d0FkanVzdGVkT2Zmc2V0KGNvbnN0IFBvc2l0aW9uJikgY29uc3Q7CiAKICAgICAgICAgYm9vbCBp
c1ZhbGlkRm9yUG9zaXRpb24oTm9kZSopIGNvbnN0OworCisgICAgICAgIHZvaWQgYWRkQ29uc29s
ZUVycm9yKGNvbnN0IFN0cmluZyYgbWVzc2FnZSk7CisKKyAgICAgICAgY29uc3QgVHJlZVNjb3Bl
KiBtX3RyZWVTY29wZTsKICAgICB9OwogCiB9IC8vIG5hbWVzcGFjZSBXZWJDb3JlCkluZGV4OiBT
b3VyY2UvV2ViQ29yZS9wYWdlL0RPTVNlbGVjdGlvbi5pZGwKPT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNl
L1dlYkNvcmUvcGFnZS9ET01TZWxlY3Rpb24uaWRsCShyZXZpc2lvbiAxNzQzMjQpCisrKyBTb3Vy
Y2UvV2ViQ29yZS9wYWdlL0RPTVNlbGVjdGlvbi5pZGwJKHdvcmtpbmcgY29weSkKQEAgLTQxLDgg
KzQxLDEwIEBACiAgICAgcmVhZG9ubHkgYXR0cmlidXRlIGJvb2xlYW4gaXNDb2xsYXBzZWQ7CiAg
ICAgcmVhZG9ubHkgYXR0cmlidXRlIGxvbmcgcmFuZ2VDb3VudDsKIAotICAgIFtSYWlzZXNFeGNl
cHRpb25dIHZvaWQgY29sbGFwc2UoW0RlZmF1bHQ9VW5kZWZpbmVkXSBvcHRpb25hbCBOb2RlIG5v
ZGUsIAotICAgICAgICAgICAgICAgICAgW0RlZmF1bHQ9VW5kZWZpbmVkXSBvcHRpb25hbCBsb25n
IGluZGV4KTsKKyAgICAvLyBbUmFpc2VzRXhjZXB0aW9uXSB2b2lkIGNvbGxhcHNlKFtEZWZhdWx0
PVVuZGVmaW5lZF0gb3B0aW9uYWwgTm9kZSBub2RlLCAKKyAgICAgICAgICAgICAgICAgIC8vIFtE
ZWZhdWx0PVVuZGVmaW5lZF0gb3B0aW9uYWwgbG9uZyBpbmRleCk7CisgICAgW1JhaXNlc0V4Y2Vw
dGlvbiwgU3RyaWN0VHlwZUNoZWNraW5nXSB2b2lkIGNvbGxhcHNlKE5vZGUgbm9kZSwKKyAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgb3B0aW9u
YWwgbG9uZyBvZmZzZXQpOwogICAgIFtSYWlzZXNFeGNlcHRpb25dIHZvaWQgY29sbGFwc2VUb0Vu
ZCgpOwogICAgIFtSYWlzZXNFeGNlcHRpb25dIHZvaWQgY29sbGFwc2VUb1N0YXJ0KCk7CiAKQEAg
LTc5LDYgKzgxLDkgQEAKICAgICAgICAgICAgICAgICAgICAgICAgICAgW0RlZmF1bHQ9VW5kZWZp
bmVkXSBvcHRpb25hbCBsb25nIGJhc2VPZmZzZXQsIAogICAgICAgICAgICAgICAgICAgICAgICAg
ICBbRGVmYXVsdD1VbmRlZmluZWRdIG9wdGlvbmFsIE5vZGUgZXh0ZW50Tm9kZSwgCiAgICAgICAg
ICAgICAgICAgICAgICAgICAgIFtEZWZhdWx0PVVuZGVmaW5lZF0gb3B0aW9uYWwgbG9uZyBleHRl
bnRPZmZzZXQpOworICAgIFtJbXBsZW1lbnRlZEFzPWNvbGxhcHNlLCAvKiBNZWFzdXJlQXM9U2Vs
ZWN0aW9uU2V0UG9zaXRpb24sICovIFJhaXNlc0V4Y2VwdGlvbiwgU3RyaWN0VHlwZUNoZWNraW5n
XSB2b2lkIHNldFBvc2l0aW9uKE5vZGUgbm9kZSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBvcHRpb25hbCBsb25nIG9mZnNldCk7CisK
ICAgICBbUmFpc2VzRXhjZXB0aW9uXSB2b2lkIHNldFBvc2l0aW9uKFtEZWZhdWx0PVVuZGVmaW5l
ZF0gb3B0aW9uYWwgTm9kZSBub2RlLCAKICAgICAgICAgICAgICAgICAgICAgIFtEZWZhdWx0PVVu
ZGVmaW5lZF0gb3B0aW9uYWwgbG9uZyBvZmZzZXQpOwogCkluZGV4OiBTb3VyY2UvV2ViQ29yZS9y
ZW5kZXJpbmcvSW5saW5lQm94LmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9yZW5k
ZXJpbmcvSW5saW5lQm94LmNwcAkocmV2aXNpb24gMTc0MzI0KQorKysgU291cmNlL1dlYkNvcmUv
cmVuZGVyaW5nL0lubGluZUJveC5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTIzNSw4ICsyMzUsOSBA
QAogICAgIElubGluZUJveCogbGVhZiA9IDA7CiAgICAgZm9yIChJbmxpbmVCb3gqIGJveCA9IHBy
ZXZPbkxpbmUoKTsgYm94ICYmICFsZWFmOyBib3ggPSBib3gtPnByZXZPbkxpbmUoKSkKICAgICAg
ICAgbGVhZiA9IGJveC0+aXNMZWFmKCkgPyBib3ggOiB0b0lubGluZUZsb3dCb3goYm94KS0+bGFz
dExlYWZDaGlsZCgpOwotICAgIGlmICghbGVhZiAmJiBwYXJlbnQoKSkKKyAgICBpZiAoIWxlYWYg
JiYgcGFyZW50KCkpIHsKICAgICAgICAgbGVhZiA9IHBhcmVudCgpLT5wcmV2TGVhZkNoaWxkKCk7
CisgICAgfQogICAgIHJldHVybiBsZWFmOwogfQogCkluZGV4OiBTb3VyY2UvV2ViQ29yZS9yZW5k
ZXJpbmcvSW5saW5lRmxvd0JveC5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvcmVu
ZGVyaW5nL0lubGluZUZsb3dCb3guY3BwCShyZXZpc2lvbiAxNzQzMjQpCisrKyBTb3VyY2UvV2Vi
Q29yZS9yZW5kZXJpbmcvSW5saW5lRmxvd0JveC5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTEsNSAr
MSw2IEBACiAvKgogICogQ29weXJpZ2h0IChDKSAyMDAzLCAyMDA0LCAyMDA1LCAyMDA2LCAyMDA3
LCAyMDA4LCAyMDA5IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqIFBvcnRpb25z
IENvcHlyaWdodCAoYykgMjAxNCBEYXZpZCBBLiBHYXR3b29kLiAgQWxsIHJpZ2h0cyByZXNlcnZl
ZC4KICAqCiAgKiBUaGlzIGxpYnJhcnkgaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3Ry
aWJ1dGUgaXQgYW5kL29yCiAgKiBtb2RpZnkgaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUg
TGlicmFyeSBHZW5lcmFsIFB1YmxpYwpAQCAtMTYzNyw3ICsxNjM4LDUwIEBACiAgICAgICAgICsr
bWluTGV2ZWw7CiAgICAgfQogfQorICAgIAorYm9vbCBJbmxpbmVGbG93Qm94Ojppc0xlYWYoKSBj
b25zdAoreworICAgIElubGluZUJveCAqcG9zID0gbV9maXJzdENoaWxkOworICAgIAorICAgIGlm
ICghcG9zKSB7CisgICAgICAgIC8vIEluIHByYWN0aWNlLCB0aGlzIHNob3VsZCBuZXZlciBoYXBw
ZW4uCisgICAgICAgIHJldHVybiB0cnVlOworICAgIH0KKyAgICAKKyAgICAvKiBUaGUgYm94IGlz
IG5vcm1hbGx5IG5vdCBhIGxlYWYuICBIb3dldmVyLCB0cmVhdCBpdCBhcyBhIGxlYWYgaWYgaXRz
IGJveAorICAgICAgIGNvbnRhaW5zIG5vdGhpbmcgYnV0IDo6YmVmb3JlIGFuZCA6OmFmdGVyIHBz
ZXVkb2VsZW1lbnRzLgorICAgICAqLworICAgIHdoaWxlICgoISZwb3MtPnJlbmRlcmVyKCkpIHx8
IHBvcy0+cmVuZGVyZXIoKS5pc0Fub255bW91cygpIHx8ICFwb3MtPnJlbmRlcmVyKCkubm9uUHNl
dWRvTm9kZSgpKSB7CisgICAgICAgIAorICAgICAgICAvKiBJZiBpdCdzIGEgYm94IHRoYXQgY29u
dGFpbnMgb3RoZXIgYm94ZXMsIGFuZCBpZiBpdCBpc24ndCB0aGUgYm94IGZvciBhCisgICAgICAg
ICAgIHBzZXVkb2VsZW1lbnQsIGV4YW1pbmUgaXRzIGNoaWxkcmVuIG5leHQuICBJZiBpdCdzIGEg
cHNldWRvZWxlbWVudAorICAgICAgICAgICBkb24ndCBsb29rIGluc2lkZS4KKyAgICAgICAgICov
CisgICAgICAgIGlmIChwb3MtPmlzSW5saW5lRmxvd0JveCgpICYmIHBvcy0+cmVuZGVyZXIoKS5u
b25Qc2V1ZG9Ob2RlKCkpIHsKKyAgICAgICAgICAgIElubGluZUZsb3dCb3ggKnRlbXAgPSBzdGF0
aWNfY2FzdDxJbmxpbmVGbG93Qm94ICo+KHBvcyk7CisgICAgICAgICAgICBpZiAodGVtcC0+Zmly
c3RDaGlsZCgpKSB7CisgICAgICAgICAgICAgICAgcG9zID0gdGVtcC0+Zmlyc3RDaGlsZCgpOwor
ICAgICAgICAgICAgICAgIGNvbnRpbnVlOworICAgICAgICAgICAgfQorICAgICAgICB9CisgICAg
ICAgIElubGluZUJveCAqbmV4dCA9IHBvcy0+bmV4dE9uTGluZSgpOworICAgICAgICBpZiAobmV4
dCkgeworICAgICAgICAgICAgcG9zID0gbmV4dDsKKyAgICAgICAgICAgIGNvbnRpbnVlOworICAg
ICAgICB9CisgICAgICAgIHdoaWxlIChwb3MtPnBhcmVudCgpICYmIHBvcy0+cGFyZW50KCkgIT0g
dGhpcyAmJiAhcG9zLT5wYXJlbnQoKS0+bmV4dE9uTGluZSgpKSB7CisgICAgICAgICAgICBwb3Mg
PSBwb3MtPnBhcmVudCgpOworICAgICAgICB9CisgICAgICAgIHBvcyA9IHBvcy0+cGFyZW50KCk7
CisgICAgICAgIGlmICghcG9zKSByZXR1cm4gdHJ1ZTsKKyAgICAgICAgaWYgKHBvcyA9PSB0aGlz
KSByZXR1cm4gdHJ1ZTsKKyAgICAgICAgcG9zID0gcG9zLT5uZXh0T25MaW5lKCk7CisgICAgfQor
ICAgIAorICAgIHJldHVybiBmYWxzZTsKK30KIAorCiAjaWZuZGVmIE5ERUJVRwogCiBjb25zdCBj
aGFyKiBJbmxpbmVGbG93Qm94Ojpib3hOYW1lKCkgY29uc3QKSW5kZXg6IFNvdXJjZS9XZWJDb3Jl
L3JlbmRlcmluZy9JbmxpbmVGbG93Qm94LmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUv
cmVuZGVyaW5nL0lubGluZUZsb3dCb3guaAkocmV2aXNpb24gMTc0MzI0KQorKysgU291cmNlL1dl
YkNvcmUvcmVuZGVyaW5nL0lubGluZUZsb3dCb3guaAkod29ya2luZyBjb3B5KQpAQCAtODUsOSAr
ODUsOSBAQAogCiAgICAgSW5saW5lQm94KiBmaXJzdENoaWxkKCkgY29uc3QgeyBjaGVja0NvbnNp
c3RlbmN5KCk7IHJldHVybiBtX2ZpcnN0Q2hpbGQ7IH0KICAgICBJbmxpbmVCb3gqIGxhc3RDaGls
ZCgpIGNvbnN0IHsgY2hlY2tDb25zaXN0ZW5jeSgpOyByZXR1cm4gbV9sYXN0Q2hpbGQ7IH0KLQot
ICAgIHZpcnR1YWwgYm9vbCBpc0xlYWYoKSBjb25zdCBvdmVycmlkZSBmaW5hbCB7IHJldHVybiBm
YWxzZTsgfQogICAgIAorICAgIGJvb2wgaXNMZWFmKCkgY29uc3Qgb3ZlcnJpZGUgZmluYWw7Cisg
ICAgCiAgICAgSW5saW5lQm94KiBmaXJzdExlYWZDaGlsZCgpIGNvbnN0OwogICAgIElubGluZUJv
eCogbGFzdExlYWZDaGlsZCgpIGNvbnN0OwogCkBAIC0zMDAsNiArMzAwLDcgQEAKICAgICB2b2lk
IGFkZFRleHRCb3hWaXN1YWxPdmVyZmxvdyhJbmxpbmVUZXh0Qm94JiwgR2x5cGhPdmVyZmxvd0Fu
ZEZhbGxiYWNrRm9udHNNYXAmLCBMYXlvdXRSZWN0JiBsb2dpY2FsVmlzdWFsT3ZlcmZsb3cpOwog
ICAgIHZvaWQgYWRkUmVwbGFjZWRDaGlsZE92ZXJmbG93KGNvbnN0IElubGluZUJveCosIExheW91
dFJlY3QmIGxvZ2ljYWxMYXlvdXRPdmVyZmxvdywgTGF5b3V0UmVjdCYgbG9naWNhbFZpc3VhbE92
ZXJmbG93KTsKICAgICB2b2lkIGNvbnN0cmFpblRvTGluZVRvcEFuZEJvdHRvbUlmTmVlZGVkKExh
eW91dFJlY3QmKSBjb25zdDsKKyAgICAKIAogcHJvdGVjdGVkOgogICAgIFJlZlB0cjxSZW5kZXJP
dmVyZmxvdz4gbV9vdmVyZmxvdzsKSW5kZXg6IFNvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9SZW5k
ZXJCbG9ja0Zsb3cuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9S
ZW5kZXJCbG9ja0Zsb3cuY3BwCShyZXZpc2lvbiAxNzQzMjQpCisrKyBTb3VyY2UvV2ViQ29yZS9y
ZW5kZXJpbmcvUmVuZGVyQmxvY2tGbG93LmNwcAkod29ya2luZyBjb3B5KQpAQCAtMzM1Myw3ICsz
MzUzLDExIEBACiAgICAgICAgICAgICBwb2ludCA9IHBvaW50LnRyYW5zcG9zZWRQb2ludCgpOwog
ICAgICAgICBpZiAoY2xvc2VzdEJveC0+cmVuZGVyZXIoKS5pc1JlcGxhY2VkKCkpCiAgICAgICAg
ICAgICByZXR1cm4gcG9zaXRpb25Gb3JQb2ludFJlc3BlY3RpbmdFZGl0aW5nQm91bmRhcmllcygq
dGhpcywgdG9SZW5kZXJCb3goY2xvc2VzdEJveC0+cmVuZGVyZXIoKSksIHBvaW50KTsKLSAgICAg
ICAgcmV0dXJuIGNsb3Nlc3RCb3gtPnJlbmRlcmVyKCkucG9zaXRpb25Gb3JQb2ludChwb2ludCwg
bnVsbHB0cik7CisgICAgICAgIGlmICghY2xvc2VzdEJveC0+cmVuZGVyZXIoKS5pc1JlbmRlcklu
bGluZSgpIHx8ICF0b1JlbmRlcklubGluZShjbG9zZXN0Qm94LT5yZW5kZXJlcigpKS5maXJzdExp
bmVCb3goKSkgeworICAgICAgICAgICAgLyogRG8gdGhpcyBvbmx5IGlmIGl0J3Mgbm90IGEgUmVu
ZGVySW5saW5lIG9iamVjdCB3aXRoIGEgZmlyc3QgbGluZSBib3gsIG9yIGVsc2UgaXQgd2lsbAor
ICAgICAgICAgICAgICAgY2FsbCBiYWNrIHRvIGl0cyBlbmNsb3NpbmcgbGluZSBib3gsIGFuZCB3
ZSdsbCBlbmQgdXAgd2l0aCBpbmZpbml0ZSByZWN1cnNpb24uICovCisgICAgICAgICAgICByZXR1
cm4gY2xvc2VzdEJveC0+cmVuZGVyZXIoKS5wb3NpdGlvbkZvclBvaW50KHBvaW50LCBudWxscHRy
KTsKKyAgICAgICAgfQogICAgIH0KIAogICAgIGlmIChsYXN0Um9vdEJveFdpdGhDaGlsZHJlbikg
ewpJbmRleDogU291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL1JlbmRlckJveC5jcHAKPT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PQotLS0gU291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL1JlbmRlckJveC5jcHAJKHJldmlzaW9uIDE3
NDMyNCkKKysrIFNvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9SZW5kZXJCb3guY3BwCSh3b3JraW5n
IGNvcHkpCkBAIC0zNiwxMiArMzYsMTYgQEAKICNpbmNsdWRlICJHcmFwaGljc0NvbnRleHQuaCIK
ICNpbmNsdWRlICJIVE1MQnV0dG9uRWxlbWVudC5oIgogI2luY2x1ZGUgIkhUTUxFbGVtZW50Lmgi
CisjaW5jbHVkZSAiUHNldWRvRWxlbWVudC5oIgogI2luY2x1ZGUgIkhUTUxGcmFtZU93bmVyRWxl
bWVudC5oIgogI2luY2x1ZGUgIkhUTUxJbnB1dEVsZW1lbnQuaCIKICNpbmNsdWRlICJIVE1MTmFt
ZXMuaCIKICNpbmNsdWRlICJIVE1MVGV4dEFyZWFFbGVtZW50LmgiCiAjaW5jbHVkZSAiSGl0VGVz
dFJlc3VsdC5oIgogI2luY2x1ZGUgIklubGluZUVsZW1lbnRCb3guaCIKKyNpbmNsdWRlICJJbmxp
bmVUZXh0Qm94LmgiCisjaW5jbHVkZSAiTm9kZS5oIgorI2luY2x1ZGUgIk5vZGVMaXN0LmgiCiAj
aW5jbHVkZSAiUGFnZS5oIgogI2luY2x1ZGUgIlBhaW50SW5mby5oIgogI2luY2x1ZGUgIlJlbmRl
ckJveFJlZ2lvbkluZm8uaCIKQEAgLTU2LDggKzYwLDEwIEBACiAjaW5jbHVkZSAiUmVuZGVyVGFi
bGVDZWxsLmgiCiAjaW5jbHVkZSAiUmVuZGVyVGhlbWUuaCIKICNpbmNsdWRlICJSZW5kZXJWaWV3
LmgiCisjaW5jbHVkZSAiUmVuZGVyVGV4dC5oIgogI2luY2x1ZGUgIlNjcm9sbGJhclRoZW1lLmgi
CiAjaW5jbHVkZSAiVHJhbnNmb3JtU3RhdGUuaCIKKyNpbmNsdWRlICJWaXNpYmxlUG9zaXRpb24u
aCIKICNpbmNsdWRlICJodG1sZWRpdGluZy5oIgogI2luY2x1ZGUgPGFsZ29yaXRobT4KICNpbmNs
dWRlIDxtYXRoLmg+CkBAIC00MTE3LDI2ICs0MTIzLDI1OSBAQAogICAgIGNvbXB1dGVkVmFsdWVz
Lm1fcG9zaXRpb24gPSBsb2dpY2FsVG9wUG9zOwogfQogCitib29sIFJlbmRlckJveDo6Y29tcHV0
ZVJlY3RGb3JQc2V1ZG9FbGVtZW50KFJlbmRlck9iamVjdCAqZWxlbWVudFJlbmRlcmVyLCBSZW5k
ZXJFbGVtZW50ICpwc2V1ZG9FbGVtZW50UmVuZGVyZXIsIGJvb2wgZmlyc3QsIExheW91dFJlY3Qg
JmxvY2FsUmVjdCkKK3sKKyAgICBpZiAocHNldWRvRWxlbWVudFJlbmRlcmVyLT5lbGVtZW50KCkp
IHsKKyAgICAgICAgUHNldWRvRWxlbWVudCAqcGUgPSBmaXJzdCA/IHBzZXVkb0VsZW1lbnRSZW5k
ZXJlci0+ZWxlbWVudCgpLT5iZWZvcmVQc2V1ZG9FbGVtZW50KCkgOiBwc2V1ZG9FbGVtZW50UmVu
ZGVyZXItPmVsZW1lbnQoKS0+YWZ0ZXJQc2V1ZG9FbGVtZW50KCk7CisgICAgICAgIAorICAgICAg
ICBpZiAocGUpIHsKKyAgICAgICAgICAgIGxvY2FsUmVjdCA9IHBlLT5yZW5kZXJlcigpLT5sb2Nh
bENhcmV0UmVjdChOVUxMLCAwKTsKKyAgICAgICAgICAgIExheW91dFNpemUgb2Zmc2V0ID0gcHNl
dWRvRWxlbWVudFJlbmRlcmVyLT5vZmZzZXRGcm9tQW5jZXN0b3JDb250YWluZXIodGhpcyk7Cisg
ICAgICAgICAgICAKKyAgICAgICAgICAgIGxvY2FsUmVjdC5tb3ZlKG9mZnNldC53aWR0aCgpLCBv
ZmZzZXQuaGVpZ2h0KCkpOworICAgICAgICAgICAgCisgICAgICAgICAgICBSZW5kZXJCb3ggKnJi
ID0gdG9SZW5kZXJCb3goZWxlbWVudFJlbmRlcmVyKTsKKyAgICAgICAgICAgIAorICAgICAgICAg
ICAgaWYgKGZpcnN0KSB7CisgICAgICAgICAgICAgICAgLyogTW92ZSB0aGUgY2FyZXQgdG8gdGhl
IGxlZnQgb2YgdGhlIHBzZXVkb2VsZW1lbnQuICovCisgICAgICAgICAgICAgICAgbG9jYWxSZWN0
LnNldFgocmItPnRvcExlZnRMb2NhdGlvbigpLngoKSArIHJiLT5wYWRkaW5nTGVmdCgpKTsKKyAg
ICAgICAgICAgIH0KKyAgICAgICAgICAgIAorICAgICAgICAgICAgLy8gbG9jYWxSZWN0Lm1vdmUo
cHNldWRvRWxlbWVudFJlbmRlcmVyLT5mcmFtZVJlY3QoKS54KCksIHBzZXVkb0VsZW1lbnRSZW5k
ZXJlci0+ZnJhbWVSZWN0KCkueSgpKTsKKyAgICAgICAgICAgIC8vIGxvY2FsUmVjdC5tb3ZlKC10
aGlzLT5mcmFtZVJlY3QoKS54KCksIC10aGlzLT5mcmFtZVJlY3QoKS55KCkpOworICAgICAgICAg
ICAgCisgICAgICAgICAgICByZXR1cm4gdHJ1ZTsKKyAgICAgICAgfQorICAgICAgICAKKyAgICB9
CisgICAgcmV0dXJuIGZhbHNlOworfQorICAgIAorCisvKiBHaXZlbiBhbiBlbGVtZW50IHRoYXQg
aXMgY29udGFpbmVkIHdpdGhpbiB0aGlzIHJlbmRlcmVyJ3Mgbm9kZToKKyAKKyAgIElmIGZpcnN0
IGlzIHRydWUsIHJldHVybnMgdGhlIHVwcGVyIGxlZnQgY29ybmVyIG9mIHRoZSBmaXJzdCBpbmxp
bmUgYm94IGFzc29jaWF0ZWQgd2l0aCB0aGUgZWxlbWVudC4KKyAgIElmIGZpcnN0IGlzIGZhbHNl
LCByZXR1cm5zIHRoZSB1cHBlciAqcmlnaHQqIGNvcm5lciBvZiB0aGUgKmxhc3QqIGlubGluZSBi
b3guCisgKi8KK0xheW91dFJlY3QgUmVuZGVyQm94OjpmaXJzdE9yTGFzdEJveEluRWxlbWVudChF
bGVtZW50ICplbmNsb3NlZEVsZW1lbnQsIGJvb2wgZmlyc3QsIGludCAqbnVtTGluZUJveGVzLCBi
b29sICpyZWNvbXB1dGVDdXJzb3JTaXplKQoreworICAgIFJlbmRlck9iamVjdCAqcmVuZGVyZXIg
PSBlbmNsb3NlZEVsZW1lbnQtPnJlbmRlcmVyKCk7CisgICAgCisgICAgaWYgKG51bUxpbmVCb3hl
cykKKyAgICAgICAgKm51bUxpbmVCb3hlcyA9IDA7CisgICAgCisgICAgaWYgKHJlY29tcHV0ZUN1
cnNvclNpemUpCisgICAgICAgICpyZWNvbXB1dGVDdXJzb3JTaXplID0gZmFsc2U7CisgICAgCisg
ICAgaWYgKHJlbmRlcmVyLT5pc1JlbmRlckJsb2NrRmxvdygpICYmICFmaXJzdCkgeworICAgICAg
ICAvKiBGaW5kIHRoZSBsYXN0IGl0ZW0gaW4gdGhlIGZsb3csIG5vdCB0aGUgcmlnaHQgZWRnZSBv
ZiB0aGUgdG9wIGxpbmUuICovCisgICAgICAgIFJlbmRlckJsb2NrRmxvdyAqYmxvY2tGbG93UmVu
ZGVyZXIgPSB0b1JlbmRlckJsb2NrRmxvdyhyZW5kZXJlcik7CisgICAgICAgIAorICAgICAgICBJ
bmxpbmVGbG93Qm94ICpmaXJzdExpbmVCb3ggPSBibG9ja0Zsb3dSZW5kZXJlci0+Zmlyc3RSb290
Qm94KCk7CisgICAgICAgIElubGluZUZsb3dCb3ggKmxhc3RMaW5lQm94ID0gZmlyc3QgPyBibG9j
a0Zsb3dSZW5kZXJlci0+Zmlyc3RSb290Qm94KCkgOiBibG9ja0Zsb3dSZW5kZXJlci0+bGFzdFJv
b3RCb3goKTsKKyAgICAgICAgCisgICAgICAgIGlmICghZmlyc3RMaW5lQm94IHx8ICFsYXN0TGlu
ZUJveCkgeworICAgICAgICAgICAgLyogQ2FuJ3QgZmluZCB0aGUgbGFzdCBib3guICBGYWtlIGl0
LiAqLworICAgICAgICAgICAgTGF5b3V0UmVjdCBwZVJlY3Q7CisgICAgICAgICAgICBpZiAoY29t
cHV0ZVJlY3RGb3JQc2V1ZG9FbGVtZW50KHJlbmRlcmVyLCBibG9ja0Zsb3dSZW5kZXJlciwgZmly
c3QsIHBlUmVjdCkpCisgICAgICAgICAgICAgICAgcmV0dXJuIHBlUmVjdDsKKyAgICAgICAgICAg
IAorICAgICAgICAgICAgcmV0dXJuIExheW91dFJlY3QoKTsKKyAgICAgICAgfQorICAgICAgICAK
KyAgICAgICAgSW5saW5lQm94ICpsYXN0SW5saW5lQm94ID0gZmlyc3QgPyBmaXJzdExpbmVCb3gt
PmZpcnN0Q2hpbGQoKSA6IGxhc3RMaW5lQm94LT5sYXN0Q2hpbGQoKTsKKyAgICAgICAgCisgICAg
ICAgIExheW91dFBvaW50IHByZXZpb3VzQm94T2Zmc2V0ID0gTGF5b3V0UG9pbnQoMCwwKTsKKyAg
ICAgICAgZm9yIChJbmxpbmVGbG93Qm94ICpib3ggPSBmaXJzdExpbmVCb3g7IGJveCAhPSBsYXN0
TGluZUJveDsgYm94ID0gYm94LT5uZXh0TGluZUJveCgpKSB7CisgICAgICAgICAgICBwcmV2aW91
c0JveE9mZnNldC5tb3ZlKDAsIGJveC0+ZnJhbWVSZWN0KCkuaGVpZ2h0KCkpOworICAgICAgICB9
CisKKyAgICAgICAgTGF5b3V0UmVjdCBsYXN0TGluZUJveEZyYW1lUmVjdChsYXN0TGluZUJveC0+
ZnJhbWVSZWN0KCkpOworICAgICAgICBMYXlvdXRSZWN0IGxhc3RJbmxpbmVCb3hGcmFtZVJlY3Qo
bGFzdElubGluZUJveC0+ZnJhbWVSZWN0KCkpOworCisgICAgICAgIExheW91dFBvaW50IHBvaW50
ID0gTGF5b3V0UG9pbnQocHJldmlvdXNCb3hPZmZzZXQueCgpICsgbGFzdExpbmVCb3hGcmFtZVJl
Y3QueCgpICsgbGFzdElubGluZUJveEZyYW1lUmVjdC54KCksCisgICAgICAgICAgICAgICAgICAg
ICAgICAgICBwcmV2aW91c0JveE9mZnNldC55KCkgKyBsYXN0TGluZUJveEZyYW1lUmVjdC55KCkg
KyBsYXN0SW5saW5lQm94RnJhbWVSZWN0LnkoKSk7IC8vIERvbid0IGFkZCBoZWlnaHQ7IHdlIHdh
bnQgdGhlIHVwcGVyIHJpZ2h0LCBub3QgbG93ZXIuCisgICAgICAgIAorICAgICAgICBpZiAoZmly
c3RMaW5lQm94ID09IGxhc3RMaW5lQm94KSB7CisgICAgICAgICAgICAvKiBGb3Igc29tZSByZWFz
b24sIHNpbmdsZS1saW5lIGJveGVzIHJlcG9ydCB0aGVpciBmcmFtZSBkaWZmZXJlbnRseS4gKi8K
KyAgICAgICAgICAgIFJlbmRlckJveCAqcmIgPSB0b1JlbmRlckJveChyZW5kZXJlcik7CisgICAg
ICAgICAgICAKKyAgICAgICAgICAgIExheW91dFBvaW50IGJsb2NrUG9zaXRpb24gPSByYi0+dG9w
TGVmdExvY2F0aW9uKCk7CisgICAgICAgICAgICBwb2ludC5zZXRZKGJsb2NrUG9zaXRpb24ueSgp
KTsKKyAgICAgICAgfQorICAgICAgICByZXR1cm4gTGF5b3V0UmVjdChwb2ludC54KCksIHBvaW50
LnkoKSwgbGFzdElubGluZUJveEZyYW1lUmVjdC53aWR0aCgpLCBsYXN0SW5saW5lQm94RnJhbWVS
ZWN0LmhlaWdodCgpKTsKKyAgICB9IGVsc2UgaWYgKHJlbmRlcmVyLT5pc0JveCgpKSB7CisgICAg
ICAgIFJlbmRlckJveCAqcmIgPSB0b1JlbmRlckJveChyZW5kZXJlcik7CisKKyAgICAgICAgaWYg
KHJlY29tcHV0ZUN1cnNvclNpemUpCisgICAgICAgICAgICAqcmVjb21wdXRlQ3Vyc29yU2l6ZSA9
IHRydWU7CisgICAgICAgICAgICAKKyAgICAgICAgcmV0dXJuIExheW91dFJlY3QocmItPnRvcExl
ZnRMb2NhdGlvbigpLngoKSArIHJiLT5wYWRkaW5nTGVmdCgpLAorICAgICAgICAgICAgICAgICAg
ICAgICAgICByYi0+dG9wTGVmdExvY2F0aW9uKCkueSgpICsgcmItPnBhZGRpbmdUb3AoKSwKKyAg
ICAgICAgICAgICAgICAgICAgICAgICAgcmItPndpZHRoKCkgLSByYi0+cGFkZGluZ0xlZnQoKSAt
IHJiLT5wYWRkaW5nUmlnaHQoKSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgcmItPmhlaWdo
dCgpIC0gcmItPnBhZGRpbmdUb3AoKSAtIHJiLT5wYWRkaW5nQm90dG9tKCkpOworICAgIH0KKwor
ICAgIGFzc2VydChyZW5kZXJlci0+aXNJbmxpbmUoKSk7CisgICAgCisgICAgUmVuZGVySW5saW5l
ICpyaSA9IHRvUmVuZGVySW5saW5lKHJlbmRlcmVyKTsKKyAgICAKKyAgICBJbmxpbmVCb3ggKmli
ID0gZmlyc3QgPyByaS0+Zmlyc3RMaW5lQm94SW5jbHVkaW5nQ3VsbGluZygpIDogcmktPmxhc3RM
aW5lQm94SW5jbHVkaW5nQ3VsbGluZygpOworICAgIAorICAgIExheW91dFJlY3QgZnJhbWVSZWN0
KGliLT5mcmFtZVJlY3QoKSk7CisgICAgCisgICAgTGF5b3V0UG9pbnQgcmV0UG9zaXRpb24gPSBm
cmFtZVJlY3QubG9jYXRpb24oKTsKKyAgICAKKyAgICAvKiBCaXphcnJlbHksIGV2ZW4gdGhvdWdo
IHRoZXNlIGFyZSBsaW5lIGJveGVzLi4uICovCisgICAgZm9yIChJbmxpbmVCb3ggKmxpbmVCb3gg
PSByaS0+Zmlyc3RMaW5lQm94SW5jbHVkaW5nQ3VsbGluZygpOworICAgICAgICAgbGluZUJveCAm
JiBsaW5lQm94ICE9IGliOyBsaW5lQm94ID0gbGluZUJveC0+bmV4dE9uTGluZSgpKSB7CisgICAg
ICAgICAgICAgICAgcmV0UG9zaXRpb24ubW92ZSgwLCBsaW5lQm94LT5mcmFtZVJlY3QoKS5oZWln
aHQoKSk7CisgICAgICAgICAgICAgICAgaWYgKG51bUxpbmVCb3hlcykKKyAgICAgICAgICAgICAg
ICAgICAgKCpudW1MaW5lQm94ZXMpKys7CisgICAgfQorICAgIAorICAgIGlmIChudW1MaW5lQm94
ZXMpCisgICAgICAgICgqbnVtTGluZUJveGVzKSsrOworICAgIAorICAgIGlmICghZmlyc3QpIHsK
KyAgICAgICAgUmVuZGVyU3R5bGUgKmVsZW1lbnRTdHlsZSA9IHRoaXMtPmVsZW1lbnQoKS0+Y29t
cHV0ZWRTdHlsZSgpOworICAgICAgICByZXRQb3NpdGlvbi5tb3ZlKDAsIC1lbGVtZW50U3R5bGUt
PnBhZGRpbmdCb3R0b20oKS52YWx1ZSgpKTsKKyAgICB9CisgICAgCisgICAgcmV0dXJuIExheW91
dFJlY3QocmV0UG9zaXRpb24ueCgpLCByZXRQb3NpdGlvbi55KCksIGliLT53aWR0aCgpLCBpYi0+
aGVpZ2h0KCkpOworfQorICAgIAorCiBMYXlvdXRSZWN0IFJlbmRlckJveDo6bG9jYWxDYXJldFJl
Y3QoSW5saW5lQm94KiBib3gsIGludCBjYXJldE9mZnNldCwgTGF5b3V0VW5pdCogZXh0cmFXaWR0
aFRvRW5kT2ZMaW5lKQogewogICAgIC8vIFZpc2libGVQb3NpdGlvbnMgYXQgb2Zmc2V0cyBpbnNp
ZGUgY29udGFpbmVycyBlaXRoZXIgYSkgcmVmZXIgdG8gdGhlIHBvc2l0aW9ucyBiZWZvcmUvYWZ0
ZXIKLSAgICAvLyB0aG9zZSBjb250YWluZXJzICh0YWJsZXMgYW5kIHNlbGVjdCBlbGVtZW50cykg
b3IgYikgcmVmZXIgdG8gdGhlIHBvc2l0aW9uIGluc2lkZSBhbiBlbXB0eSBibG9jay4KLSAgICAv
LyBUaGV5IG5ldmVyIHJlZmVyIHRvIGNoaWxkcmVuLgorICAgIC8vIHRob3NlIGNvbnRhaW5lcnMg
KHRhYmxlcyBhbmQgc2VsZWN0IGVsZW1lbnRzKSwgYikgcmVmZXIgdG8gdGhlIHBvc2l0aW9uIGlu
c2lkZSBhbiBlbXB0eSBibG9jaywKKyAgICAvLyBvciBjKSByZWZlciB0byB0aGUgcG9zaXRpb24g
YmV0d2VlbiBhZGphY2VudCBjaGlsZCBlbGVtZW50cyB0aGF0IGhhdmUgOjphZnRlciBhbmQgOjpi
ZWZvcmUKKyAgICAvLyBwc2V1ZG9lbGVtZW50cy4gIEluIHRoZSBjYXNlIG9mIGMpLCAiYm94IiBp
cyB0aGUgY2hpbGQgZWxlbWVudCBhZnRlciB0aGUgaW5zZXJ0aW9uIHBvaW50LgogICAgIC8vIEZJ
WE1FOiBQYWludCB0aGUgY2FyZXRzIGluc2lkZSBlbXB0eSBibG9ja3MgZGlmZmVyZW50bHkgdGhh
biB0aGUgY2FyZXRzIGJlZm9yZS9hZnRlciBlbGVtZW50cy4KIAogICAgIExheW91dFJlY3QgcmVj
dChsb2NhdGlvbigpLCBMYXlvdXRTaXplKGNhcmV0V2lkdGgsIGhlaWdodCgpKSk7CiAgICAgYm9v
bCBsdHIgPSBib3ggPyBib3gtPmlzTGVmdFRvUmlnaHREaXJlY3Rpb24oKSA6IHN0eWxlKCkuaXNM
ZWZ0VG9SaWdodERpcmVjdGlvbigpOwotCisgICAgCiAgICAgaWYgKCghY2FyZXRPZmZzZXQpIF4g
bHRyKQotICAgICAgICByZWN0Lm1vdmUoTGF5b3V0U2l6ZSh3aWR0aCgpIC0gY2FyZXRXaWR0aCwg
MCkpOworICAgICAgICAgICAgcmVjdC5tb3ZlKExheW91dFNpemUod2lkdGgoKSAtIGNhcmV0V2lk
dGgsIDApKTsKKyAgICAKKyAgICBpZiAoZWxlbWVudCgpKSB7CisgICAgICAgIE5vZGUgKmNoaWxk
bm9kZTsKKyAgICAgICAgUmVuZGVyT2JqZWN0ICpjaGlsZE5vZGVSZW5kZXJlciA9IE5VTEw7Cisg
ICAgICAgIAorICAgICAgICBib29sIGF0RW5kID0gZmFsc2U7CisgICAgICAgIHVuc2lnbmVkIG9m
ZnNldCA9IDA7CisgICAgICAgIAorICAgICAgICBpZiAoY2FyZXRPZmZzZXQgPCAwKSB7CisgICAg
ICAgICAgICBjaGlsZG5vZGUgPSBlbGVtZW50KCktPmJlZm9yZVBzZXVkb0VsZW1lbnQoKTsKKyAg
ICAgICAgICAgIGNoaWxkTm9kZVJlbmRlcmVyID0gY2hpbGRub2RlID8gY2hpbGRub2RlLT5yZW5k
ZXJlcigpIDogTlVMTDsKKyAgICAgICAgICAgIGF0RW5kID0gdHJ1ZTsKKyAgICAgICAgICAgIG9m
ZnNldCA9IDE7CisgICAgICAgIH0gZWxzZSBpZiAoKHVuc2lnbmVkKWNhcmV0T2Zmc2V0IDwgZWxl
bWVudCgpLT5jb3VudENoaWxkTm9kZXMoKSkgeworICAgICAgICAgICAgY2hpbGRub2RlID0gZWxl
bWVudCgpLT50cmF2ZXJzZVRvQ2hpbGRBdChjYXJldE9mZnNldCk7CiAKKyAgICAgICAgICAgIC8q
IEZvciBhIG5vbi1yZW5kZXJlZCB0ZXh0IG5vZGUsIGlmIHRoZSBpbnNlcnRpb24gcG9pbnQKKyAg
ICAgICAgICAgICBpcyBhdCB0aGUgYmVnaW5uaW5nLCBkcmF3IHRoZSBjdXJzb3IgYWZ0ZXIgdGhl
IHByZXZpb3VzCisgICAgICAgICAgICAgZWxlbWVudC4KKyAgICAgICAgICAgICAqLworICAgICAg
ICAgICAgYm9vbCBhdEVuZCA9IGZhbHNlOworICAgICAgICAgICAgCisgICAgICAgICAgICB3aGls
ZSAoY2hpbGRub2RlICYmICFjaGlsZG5vZGUtPnJlbmRlcmVyKCkpIHsKKyAgICAgICAgICAgICAg
ICBjaGlsZG5vZGUgPSBjaGlsZG5vZGUtPnByZXZpb3VzU2libGluZygpOworICAgICAgICAgICAg
ICAgIGF0RW5kID0gdHJ1ZTsKKyAgICAgICAgICAgIH0KKyAgICAgICAgICAgIGlmIChjaGlsZG5v
ZGUtPmlzRWxlbWVudE5vZGUoKSkgeworICAgICAgICAgICAgICAgIEVsZW1lbnQgKmNoaWxkRWx0
ID0gZG93bmNhc3Q8RWxlbWVudD4oY2hpbGRub2RlKTsKKyAgICAgICAgICAgICAgICBjaGlsZE5v
ZGVSZW5kZXJlciA9IGNoaWxkRWx0LT5yZW5kZXJlcigpOworICAgICAgICAgICAgICAgIAorICAg
ICAgICAgICAgICAgIGlmIChhdEVuZCAmJiBjaGlsZEVsdC0+YWZ0ZXJQc2V1ZG9FbGVtZW50KCkp
IHsKKyAgICAgICAgICAgICAgICAgICAgY2hpbGRub2RlID0gY2hpbGRFbHQtPmFmdGVyUHNldWRv
RWxlbWVudCgpOworICAgICAgICAgICAgICAgICAgICBvZmZzZXQgPSAxOworICAgICAgICAgICAg
ICAgIH0gZWxzZSBpZiAoIWF0RW5kICYmIGNoaWxkRWx0LT5iZWZvcmVQc2V1ZG9FbGVtZW50KCkp
IHsKKyAgICAgICAgICAgICAgICAgICAgY2hpbGRub2RlID0gY2hpbGRFbHQtPmJlZm9yZVBzZXVk
b0VsZW1lbnQoKTsKKyAgICAgICAgICAgICAgICAgICAgb2Zmc2V0ID0gLTE7CisgICAgICAgICAg
ICAgICAgfSBlbHNlIHsKKyAgICAgICAgICAgICAgICAgICAgb2Zmc2V0ID0gYXRFbmQgPyBjaGls
ZEVsdC0+Y291bnRDaGlsZE5vZGVzKCkgOiAtMTsKKyAgICAgICAgICAgICAgICB9CisgICAgICAg
ICAgICB9IGVsc2UgeworICAgICAgICAgICAgICAgICAgICBvZmZzZXQgPSBhdEVuZCA/IGNoaWxk
bm9kZS0+bWF4Q2hhcmFjdGVyT2Zmc2V0KCkgOiAwOworICAgICAgICAgICAgfQorICAgICAgICB9
IGVsc2UgeworICAgICAgICAgICAgY2hpbGRub2RlID0gZWxlbWVudCgpLT5hZnRlclBzZXVkb0Vs
ZW1lbnQoKTsKKyAgICAgICAgICAgIGNoaWxkTm9kZVJlbmRlcmVyID0gY2hpbGRub2RlID8gY2hp
bGRub2RlLT5yZW5kZXJlcigpIDogTlVMTDsKKyAgICAgICAgICAgIG9mZnNldCA9IC0xOworICAg
ICAgICB9CisKKyAgICAgICAgaWYgKGNoaWxkbm9kZSAmJiBjaGlsZG5vZGUtPnJlbmRlcmVyKCkp
IHsKKyAgICAgICAgICAgIExheW91dFJlY3QgcHNldWRvRWxlbWVudFJlY3QgPSBjaGlsZG5vZGUt
PnJlbmRlcmVyKCktPmxvY2FsQ2FyZXRSZWN0KGJveCwgb2Zmc2V0KTsKKyAgICAgICAgICAgIAor
ICAgICAgICAgICAgTGF5b3V0U2l6ZSBvZmZzZXQgPSBjaGlsZG5vZGUtPnJlbmRlcmVyKCktPm9m
ZnNldEZyb21BbmNlc3RvckNvbnRhaW5lcih0aGlzKTsKKyAgICAgICAgICAgIAorICAgICAgICAg
ICAgcHNldWRvRWxlbWVudFJlY3QubW92ZShvZmZzZXQud2lkdGgoKSwgb2Zmc2V0LmhlaWdodCgp
KTsKKyAgICAgICAgICAgIAorI2lmIDAKKyAgICAgICAgICAgIGlmICghYXRFbmQpIHsKKyAgICAg
ICAgICAgICAgICAvKiBVbmZvcnR1bmF0ZWx5LCB3aXRob3V0IHRoaXMgY29kZSwgdGhlIGNhcmV0
IHdvdWxkIHNvbWV0aW1lcyBiZSBvbiB0aGUgd3Jvbmcgc2lkZSBvZgorICAgICAgICAgICAgICAg
ICAgIHRoZSBwc2V1ZG9lbGVtZW50LiAgTW92ZSBpdCBiYWNrIHRvIHRoZSBsZWZ0LiAqLworCisg
ICAgICAgICAgICAgICAgaWYgKGNoaWxkTm9kZVJlbmRlcmVyLT5pc1JlbmRlckVsZW1lbnQoKSkg
eworICAgICAgICAgICAgICAgICAgICBSZW5kZXJFbGVtZW50ICplbGVtZW50UmVuZGVyZXIgPSB0
b1JlbmRlckVsZW1lbnQoY2hpbGROb2RlUmVuZGVyZXIpOworICAgICAgICAgICAgICAgICAgICAK
KyAgICAgICAgICAgICAgICAgICAgcHNldWRvRWxlbWVudFJlY3QubW92ZSgtZWxlbWVudFJlbmRl
cmVyLT5lbGVtZW50KCktPmNvbXB1dGVkU3R5bGUoKS0+cGFkZGluZ0xlZnQoKS52YWx1ZSgpLCAw
KTsKKyAgICAgICAgICAgICAgICAgICAgCisjaWYgMAorICAgICAgICAgICAgICAgICAgICAvLyBw
c2V1ZG9FbGVtZW50UmVjdC5zZXRYKGVsZW1lbnRSZW5kZXJlci0+b2Zmc2V0RnJvbUFuY2VzdG9y
Q29udGFpbmVyKHRoaXMpLndpZHRoKCkudG9GbG9hdCgpICsKKyAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAvLyBlbGVtZW50UmVuZGVyZXItPmVsZW1lbnQoKS0+Y29t
cHV0ZWRTdHlsZSgpLT5wYWRkaW5nTGVmdCgpLnZhbHVlKCkpOworICAgICAgICAgICAgICAgICAg
ICBwc2V1ZG9FbGVtZW50UmVjdC5zZXRYKGVsZW1lbnRSZW5kZXJlci0+b2Zmc2V0RnJvbUFuY2Vz
dG9yQ29udGFpbmVyKHRoaXMpLndpZHRoKCkudG9GbG9hdCgpICsKKyAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICBlbGVtZW50UmVuZGVyZXItPmVsZW1lbnQoKS0+Y29t
cHV0ZWRTdHlsZSgpLT5wYWRkaW5nTGVmdCgpLnZhbHVlKCkgKworICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgIGVsZW1lbnQoKS0+Y29tcHV0ZWRTdHlsZSgpLT5wYWRk
aW5nTGVmdCgpLnZhbHVlKCkpOworI2VuZGlmCisgICAgICAgICAgICAgICAgfQorICAgICAgICAg
ICAgfQorI2VuZGlmCisgICAgICAgICAgICAKKyAgICAgICAgICAgIHJldHVybiBwc2V1ZG9FbGVt
ZW50UmVjdDsKKyAgICAgICAgfQorICAgIH0KKwogICAgIGlmIChib3gpIHsKICAgICAgICAgY29u
c3QgUm9vdElubGluZUJveCYgcm9vdEJveCA9IGJveC0+cm9vdCgpOwogICAgICAgICBMYXlvdXRV
bml0IHRvcCA9IHJvb3RCb3gubGluZVRvcCgpOwogICAgICAgICByZWN0LnNldFkodG9wKTsKICAg
ICAgICAgcmVjdC5zZXRIZWlnaHQocm9vdEJveC5saW5lQm90dG9tKCkgLSB0b3ApOworCisgICAg
ICAgIE5vZGUgKm5vZGUgPSBib3gtPnJlbmRlcmVyKCkubm9kZSgpOworICAgICAgICBpZiAobm9k
ZSAmJiAhbm9kZS0+Zmlyc3RDaGlsZCgpKQorICAgICAgICB7CisgICAgICAgICAgICAvKiBJZiBh
biBlbGVtZW50IGNvbnRhaW5zIGNoaWxkcmVuLCB0aGUgaW5zZXJ0aW9uIGNhcmV0IGlzIHR5cGlj
YWxseQorICAgICAgICAgICAgICAgY29tcHV0ZWQgYmFzZWQgb24gdGhlIHBvc2l0aW9uIG9mIHRo
b3NlIGNoaWxkcmVuLCB3aGljaCB0YWtlcworICAgICAgICAgICAgICAgaW50byBhY2NvdW50IGFu
eSA6OmJlZm9yZSBwc2V1ZG8tZWxlbWVudHMgaW4gdGhlIHBhcmVudCBlbGVtZW50LgorICAgICAg
ICAgICAgIAorICAgICAgICAgICAgICAgSG93ZXZlciwgaWYgYW4gZWxlbWVudCBjb250YWlucyBu
byBjaGlsZHJlbiwgdGhlIDo6YmVmb3JlCisgICAgICAgICAgICAgICBwc2V1ZG8tZWxlbWVudCdz
IHdpZHRoIG11c3QgYmUgYWRkZWQgdG8gdGhlIGxlZnQgbWFyZ2luLgorICAgICAgICAgICAgICAg
T3RoZXJ3aXNlLCB0aGUgaW5zZXJ0aW9uIGNhcmV0IHdvdWxkIGJlIHRvIHRoZSBsZWZ0IG9mIHRo
ZQorICAgICAgICAgICAgICAgKm91dHNpZGUqIG9mIHRoZSBlbGVtZW50IChiZWZvcmUgdGhlIDo6
YmVmb3JlIGNvbnRlbnQpLAorICAgICAgICAgICAgICAgcmF0aGVyIHRoYW4gdG8gdGhlIGxlZnQg
b2Ygd2hlcmUgYSBjb250YWluZWQgdGV4dCBub2RlIHdvdWxkCisgICAgICAgICAgICAgICBiZSBp
ZiBvbmUgZXhpc3RlZC4KKyAgICAgICAgICAgICAqLworICAgICAgICAgICAgRWxlbWVudCAqZWx0
ID0gZG93bmNhc3Q8RWxlbWVudD4obm9kZSk7CisgICAgICAgICAgICBQc2V1ZG9FbGVtZW50ICpi
ZWZvcmVQc2V1ZG9FbGVtZW50ID0gZWx0LT5iZWZvcmVQc2V1ZG9FbGVtZW50KCk7CisgICAgICAg
ICAgICBSZW5kZXJPYmplY3QqIHJlbmRlck9iamVjdCA9IGJlZm9yZVBzZXVkb0VsZW1lbnQtPnJl
bmRlcmVyKCk7CisgICAgICAgICAgICAKKyAgICAgICAgICAgIGlmIChyZW5kZXJPYmplY3QtPmlz
SW5saW5lKCkpIHsKKyAgICAgICAgICAgICAgICBSZW5kZXJJbmxpbmUgKnJlbmRlcklubGluZSA9
IHRvUmVuZGVySW5saW5lKHJlbmRlck9iamVjdCk7CisgICAgICAgICAgICAgICAgCisgICAgICAg
ICAgICAgICAgcmVjdC5tb3ZlKHJlbmRlcklubGluZS0+b2Zmc2V0V2lkdGgoKSwwKTsKKyAgICAg
ICAgICAgICAgICAKKyAgICAgICAgICAgICAgICByZW5kZXJJbmxpbmUgPSBuaWw7CisgICAgICAg
ICAgICB9CisgICAgICAgICAgICAKKyAgICAgICAgICAgIHJlbmRlck9iamVjdCA9IG5pbDsKKyAg
ICAgICAgfQogICAgIH0KIAorICAgIAogICAgIC8vIElmIGhlaWdodCBvZiBib3ggaXMgc21hbGxl
ciB0aGFuIGZvbnQgaGVpZ2h0LCB1c2UgdGhlIGxhdHRlciBvbmUsCiAgICAgLy8gb3RoZXJ3aXNl
IHRoZSBjYXJldCBtaWdodCBiZWNvbWUgaW52aXNpYmxlLgogICAgIC8vCkBAIC00MTUxLDcgKzQz
OTAsNyBAQAogCiAgICAgaWYgKGV4dHJhV2lkdGhUb0VuZE9mTGluZSkKICAgICAgICAgKmV4dHJh
V2lkdGhUb0VuZE9mTGluZSA9IHgoKSArIHdpZHRoKCkgLSByZWN0Lm1heFgoKTsKLQorICAgIAog
ICAgIC8vIE1vdmUgdG8gbG9jYWwgY29vcmRzCiAgICAgcmVjdC5tb3ZlQnkoLWxvY2F0aW9uKCkp
OwogCkBAIC00MTYyLDcgKzQ0MDEsNyBAQAogICAgICAgICByZWN0LnNldFgocmVjdC54KCkgKyBi
b3JkZXJMZWZ0KCkgKyBwYWRkaW5nTGVmdCgpKTsKICAgICAgICAgcmVjdC5zZXRZKHJlY3QueSgp
ICsgcGFkZGluZ1RvcCgpICsgYm9yZGVyVG9wKCkpOwogICAgIH0KLQorICAgIAogICAgIGlmICgh
aXNIb3Jpem9udGFsV3JpdGluZ01vZGUoKSkKICAgICAgICAgcmV0dXJuIHJlY3QudHJhbnNwb3Nl
ZFJlY3QoKTsKIApJbmRleDogU291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL1JlbmRlckJveC5oCj09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9SZW5kZXJCb3guaAkocmV2aXNp
b24gMTc0MzI0KQorKysgU291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL1JlbmRlckJveC5oCSh3b3Jr
aW5nIGNvcHkpCkBAIC02NTUsNiArNjU1LDEwIEBACiAgICAgdm9pZCB1cGRhdGVTaGFwZU91dHNp
ZGVJbmZvQWZ0ZXJTdHlsZUNoYW5nZShjb25zdCBSZW5kZXJTdHlsZSYsIGNvbnN0IFJlbmRlclN0
eWxlKiBvbGRTdHlsZSk7CiAjZW5kaWYKIAorICAgIExheW91dFJlY3QgZmlyc3RPckxhc3RCb3hJ
bkVsZW1lbnQoRWxlbWVudCAqZW5jbG9zZWRFbGVtZW50LCBib29sIGZpcnN0LCBpbnQgKm51bUxp
bmVCb3hlcywgYm9vbCAqcmVjb21wdXRlQ3Vyc29yKSBfX2F0dHJpYnV0ZV9fKCh1bnVzZWQpKTsK
KyAgICBib29sIGNvbXB1dGVSZWN0Rm9yUHNldWRvRWxlbWVudChSZW5kZXJPYmplY3QgKmVsZW1l
bnRSZW5kZXJlciwgUmVuZGVyRWxlbWVudCAqcHNldWRvRWxlbWVudFJlbmRlcmVyLCBib29sIGZp
cnN0LCBMYXlvdXRSZWN0ICZsb2NhbFJlY3QpOworICAgIExheW91dFBvaW50IHRvcExlZnRPZkZp
cnN0Qm94SW5FbGVtZW50T3JUb3BSaWdodG9mTGFzdEJveEluRWxlbWVudChFbGVtZW50ICplbmNs
b3NlZEVsZW1lbnQsIGJvb2wgZmlyc3QpIF9fYXR0cmlidXRlX18oKHVudXNlZCkpOworICAgIAog
ICAgIGJvb2wgc2Nyb2xsTGF5ZXIoU2Nyb2xsRGlyZWN0aW9uLCBTY3JvbGxHcmFudWxhcml0eSwg
ZmxvYXQgbXVsdGlwbGllciwgRWxlbWVudCoqIHN0b3BFbGVtZW50KTsKIAogICAgIGJvb2wgZml4
ZWRFbGVtZW50TGF5c091dFJlbGF0aXZlVG9GcmFtZShjb25zdCBGcmFtZVZpZXcmKSBjb25zdDsK
SW5kZXg6IFNvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9SZW5kZXJCb3hNb2RlbE9iamVjdC5jcHAK
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL1JlbmRlckJveE1vZGVsT2Jq
ZWN0LmNwcAkocmV2aXNpb24gMTc0MzI0KQorKysgU291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL1Jl
bmRlckJveE1vZGVsT2JqZWN0LmNwcAkod29ya2luZyBjb3B5KQpAQCAtMjU2OCwxMiArMjU2OCwx
MyBAQAogCiBMYXlvdXRSZWN0IFJlbmRlckJveE1vZGVsT2JqZWN0Ojpsb2NhbENhcmV0UmVjdEZv
ckVtcHR5RWxlbWVudChMYXlvdXRVbml0IHdpZHRoLCBMYXlvdXRVbml0IHRleHRJbmRlbnRPZmZz
ZXQpCiB7Ci0gICAgQVNTRVJUKCFmaXJzdENoaWxkKCkpOworICAgIEFTU0VSVCghZmlyc3ROb25Q
c2V1ZG9FbGVtZW50Q2hpbGQoKSk7CiAKICAgICAvLyBGSVhNRTogVGhpcyBkb2VzIG5vdCB0YWtl
IGludG8gYWNjb3VudCBlaXRoZXIgOmZpcnN0LWxpbmUgb3IgOmZpcnN0LWxldHRlcgogICAgIC8v
IEhvd2V2ZXIsIGFzIHNvb24gYXMgc29tZSBjb250ZW50IGlzIGVudGVyZWQsIHRoZSBsaW5lIGJv
eGVzIHdpbGwgYmUKICAgICAvLyBjb25zdHJ1Y3RlZCBhbmQgdGhpcyBrbHVkZ2UgaXMgbm90IGNh
bGxlZCBhbnkgbW9yZS4gU28gb25seSB0aGUgY2FyZXQgc2l6ZQogICAgIC8vIG9mIGFuIGVtcHR5
IDpmaXJzdC1saW5lJ2QgYmxvY2sgaXMgd3JvbmcuIEkgdGhpbmsgd2UgY2FuIGxpdmUgd2l0aCB0
aGF0LgorICAgIAogICAgIGNvbnN0IFJlbmRlclN0eWxlJiBjdXJyZW50U3R5bGUgPSBmaXJzdExp
bmVTdHlsZSgpOwogICAgIExheW91dFVuaXQgaGVpZ2h0ID0gbGluZUhlaWdodCh0cnVlLCBjdXJy
ZW50U3R5bGUuaXNIb3Jpem9udGFsV3JpdGluZ01vZGUoKSA/IEhvcml6b250YWxMaW5lIDogVmVy
dGljYWxMaW5lKTsKIApJbmRleDogU291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL1JlbmRlckVsZW1l
bnQuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvUmVuZGVyRWxlbWVu
dC5oCShyZXZpc2lvbiAxNzQzMjQpCisrKyBTb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvUmVuZGVy
RWxlbWVudC5oCSh3b3JraW5nIGNvcHkpCkBAIC01NCw2ICs1NCwxMiBAQAogCiAgICAgUmVuZGVy
T2JqZWN0KiBmaXJzdENoaWxkKCkgY29uc3QgeyByZXR1cm4gbV9maXJzdENoaWxkOyB9CiAgICAg
UmVuZGVyT2JqZWN0KiBsYXN0Q2hpbGQoKSBjb25zdCB7IHJldHVybiBtX2xhc3RDaGlsZDsgfQor
ICAgIFJlbmRlck9iamVjdCAqZmlyc3ROb25Qc2V1ZG9FbGVtZW50Q2hpbGQoKSBjb25zdAorICAg
IHsKKyAgICAgICAgICAgIFJlbmRlck9iamVjdCAqb2JqID0gZmlyc3RDaGlsZCgpOworICAgICAg
ICAgICAgd2hpbGUgKG9iaiAmJiBvYmotPmlzUHNldWRvRWxlbWVudCgpKSB7IG9iaiA9IG9iai0+
bmV4dFNpYmxpbmcoKTsgfQorICAgICAgICAgICAgcmV0dXJuIG9iajsKKyAgICB9CiAKICAgICAv
LyBGSVhNRTogTWFrZSB0aGVzZSBzdGFuZGFsb25lIGFuZCBtb3ZlIHRvIHJlbGV2YW50IGZpbGVz
LgogICAgIGJvb2wgaXNSZW5kZXJMYXllck1vZGVsT2JqZWN0KCkgY29uc3Q7CkluZGV4OiBTb3Vy
Y2UvV2ViQ29yZS9yZW5kZXJpbmcvUmVuZGVySW5saW5lLmNwcAo9PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3Vy
Y2UvV2ViQ29yZS9yZW5kZXJpbmcvUmVuZGVySW5saW5lLmNwcAkocmV2aXNpb24gMTc0MzI0KQor
KysgU291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL1JlbmRlcklubGluZS5jcHAJKHdvcmtpbmcgY29w
eSkKQEAgLTIsNiArMiw3IEBACiAgKiBDb3B5cmlnaHQgKEMpIDE5OTkgTGFycyBLbm9sbCAoa25v
bGxAa2RlLm9yZykKICAqICAgICAgICAgICAoQykgMTk5OSBBbnR0aSBLb2l2aXN0byAoa29pdmlz
dG9Aa2RlLm9yZykKICAqIENvcHlyaWdodCAoQykgMjAwMywgMjAwNCwgMjAwNSwgMjAwNiwgMjAw
NywgMjAwOCwgMjAwOSBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKiBQb3J0aW9u
cyBDb3B5cmlnaHQgKGMpIDIwMTQgRGF2aWQgQS4gR2F0d29vZC4gIEFsbCByaWdodHMgcmVzZXJ2
ZWQuCiAgKgogICogVGhpcyBsaWJyYXJ5IGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0
cmlidXRlIGl0IGFuZC9vcgogICogbW9kaWZ5IGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05V
IExpYnJhcnkgR2VuZXJhbCBQdWJsaWMKQEAgLTI0NCw5ICsyNDUsNDYgQEAKICAgICB9CiB9CiAK
LUxheW91dFJlY3QgUmVuZGVySW5saW5lOjpsb2NhbENhcmV0UmVjdChJbmxpbmVCb3gqIGlubGlu
ZUJveCwgaW50LCBMYXlvdXRVbml0KiBleHRyYVdpZHRoVG9FbmRPZkxpbmUpCitMYXlvdXRSZWN0
IFJlbmRlcklubGluZTo6bG9jYWxDYXJldFJlY3QoSW5saW5lQm94KiBpbmxpbmVCb3gsIGludCBj
YXJldE9mZnNldCwgTGF5b3V0VW5pdCogZXh0cmFXaWR0aFRvRW5kT2ZMaW5lKQogewotICAgIGlm
IChmaXJzdENoaWxkKCkpIHsKKyAgICBpZiAoaXNQc2V1ZG9FbGVtZW50KCkpIHsKKyAgICAgICAg
LyogV2Ugc2hvdWxkIG9ubHkgZ2V0IGhlcmUgaWYgdGhlIHBzZXVkb2VsZW1lbnQncyBob3N0IGVs
ZW1lbnQKKyAgICAgICAgICAgaGFzIG5vIGNoaWxkIG5vZGVzIG9yIGlmIHRoZSBlbmNsb3Npbmcg
ZWxlbWVudCdzIHJlbmRlcmVyIHdhbnRzCisgICAgICAgICAgIHRvIHB1dCB0aGUgaW5zZXJ0aW9u
IGNhcmV0ICpiZWZvcmUqIHRoZSBob3N0IGVsZW1lbnQgKGFuZCB0aHVzLAorICAgICAgICAgICBi
ZWZvcmUgdGhlIDo6YmVmb3JlIHBzZXVkb2VsZW1lbnQpLgorICAgICAgICAgKi8KKyAgICAgICAg
UmVuZGVyT2JqZWN0ICpmY3JlbmRlcmVyID0gZmlyc3RDaGlsZCgpOworICAgICAgICAKKyAgICAg
ICAgaWYgKGZjcmVuZGVyZXIgJiYgZmNyZW5kZXJlci0+aXNUZXh0KCkpIHsKKyAgICAgICAgICAg
IGF1dG8gdGV4dFJlbmRlcmVyID0gdG9SZW5kZXJUZXh0KGZjcmVuZGVyZXIpOworICAgICAgICAg
ICAgdGV4dFJlbmRlcmVyLT5lbnN1cmVMaW5lQm94ZXMoKTsKKworICAgICAgICAgICAgSW5saW5l
VGV4dEJveCogYm94ID0gY2FyZXRPZmZzZXQgPCAwID8gdGV4dFJlbmRlcmVyLT5maXJzdFRleHRC
b3goKSA6IHRleHRSZW5kZXJlci0+bGFzdFRleHRCb3goKTsKKyAgICAgICAgICAgIAorICAgICAg
ICAgICAgaWYgKGJveCkgeworICAgICAgICAgICAgICAgIC8qIENyZWF0ZSBhIHJlY3Qgd2l0aCB0
aGUgcG9zaXRpb24gb2YgdGhlIGJlZ2lubmluZyBvZiB0aGUgbGFzdCBpbmxpbmUKKyAgICAgICAg
ICAgICAgICAgICBib3ggaW4gdGhlIDo6YmVmb3JlIHBzZXVkb2VsZW1lbnQuICovCisgICAgICAg
ICAgICAgICAgaW50IG5ld0NhcmV0T2Zmc2V0ID0gYm94LT5jYXJldE1pbk9mZnNldCgpOworICAg
ICAgICAgICAgICAgIExheW91dFJlY3QgY3Vyc29yUG9zaXRpb24gPSBmY3JlbmRlcmVyLT5sb2Nh
bENhcmV0UmVjdChib3gsIG5ld0NhcmV0T2Zmc2V0KTsKKyAgICAgICAgICAgICAgICAKKyAgICAg
ICAgICAgICAgICAvKiBBZGQgdGhlIHdpZHRoIG9mIHRoYXQgcHNldWRvZWxlbWVudC4gKi8KKyAg
ICAgICAgICAgICAgICBpZiAoY2FyZXRPZmZzZXQgIT0gLTEpCisgICAgICAgICAgICAgICAgICAg
IGN1cnNvclBvc2l0aW9uLm1vdmUoYm94LT53aWR0aCgpLCAwKTsKKyAgICAgICAgICAgICAgICAK
KyAgICAgICAgICAgICAgICByZXR1cm4gY3Vyc29yUG9zaXRpb247CisgICAgICAgICAgICB9Cisg
ICAgICAgIH0gZWxzZSBpZiAoZmNyZW5kZXJlci0+aXNCb3goKSkgeworICAgICAgICAgICAgSW5s
aW5lQm94ICpib3ggPSB0b1JlbmRlckJveChmY3JlbmRlcmVyKS0+aW5saW5lQm94V3JhcHBlcigp
OworICAgICAgICAgICAgCisgICAgICAgICAgICBMYXlvdXRSZWN0IGN1cnNvclBvc2l0aW9uID0g
ZmNyZW5kZXJlci0+bG9jYWxDYXJldFJlY3QoYm94LCBjYXJldE9mZnNldCk7CisgICAgICAgICAg
ICAKKyAgICAgICAgICAgIC8qIEFkZCB0aGUgd2lkdGggb2YgdGhhdCBwc2V1ZG9lbGVtZW50LiAq
LworICAgICAgICAgICAgY3Vyc29yUG9zaXRpb24ubW92ZShib3gtPndpZHRoKCksIDApOworICAg
ICAgICAgICAgCisgICAgICAgICAgICByZXR1cm4gY3Vyc29yUG9zaXRpb247CisgICAgICAgIH0K
KyAgICB9CisgICAgaWYgKGZpcnN0Tm9uUHNldWRvRWxlbWVudENoaWxkKCkpIHsKICAgICAgICAg
Ly8gVGhpcyBjb25kaXRpb24gaXMgcG9zc2libGUgaWYgdGhlIFJlbmRlcklubGluZSBpcyBhdCBh
biBlZGl0aW5nIGJvdW5kYXJ5LAogICAgICAgICAvLyBpLmUuIHRoZSBWaXNpYmxlUG9zaXRpb24g
aXM6CiAgICAgICAgIC8vICAgPFJlbmRlcklubGluZSBlZGl0aW5nQm91bmRhcnk9dHJ1ZT58PFJl
bmRlclRleHQ+IDwvUmVuZGVyVGV4dD48L1JlbmRlcklubGluZT4KQEAgLTI2Miw4ICszMDAsMTkg
QEAKIAogICAgIExheW91dFJlY3QgY2FyZXRSZWN0ID0gbG9jYWxDYXJldFJlY3RGb3JFbXB0eUVs
ZW1lbnQoaG9yaXpvbnRhbEJvcmRlckFuZFBhZGRpbmdFeHRlbnQoKSwgMCk7CiAKLSAgICBpZiAo
SW5saW5lQm94KiBmaXJzdEJveCA9IGZpcnN0TGluZUJveCgpKQorICAgIC8vIENvbXB1dGUgdGhl
IGxvY2F0aW9uIGJhc2VkIG9uIHRoZSBmaXJzdCBwc2V1ZG8KKyAgICBJbmxpbmVCb3ggKmZpcnN0
Qm94ID0gZmlyc3RMaW5lQm94KCk7CisgICAgaWYgKGZpcnN0Qm94ICYmICFmaXJzdENoaWxkKCkt
PmlzQmVmb3JlQ29udGVudCgpKSB7CiAgICAgICAgIGNhcmV0UmVjdC5tb3ZlQnkoTGF5b3V0UG9p
bnQoZmlyc3RCb3gtPnRvcExlZnQoKSkpOworICAgICAgICBjYXJldFJlY3QubW92ZSh0aGlzLT5t
YXJnaW5MZWZ0KCksIDApOworICAgICAgICBpZiAodGhpcy0+ZWxlbWVudCgpKSB7CisgICAgICAg
ICAgICAvLyBMYXlvdXRVbml0IHggPSBMYXlvdXRVbml0KHRoaXMtPmVsZW1lbnQoKS0+Y29tcHV0
ZWRTdHlsZSgpLT5wYWRkaW5nTGVmdCgpKTsKKyAgICAgICAgICAgIC8vIGNhcmV0UmVjdC5tb3Zl
QnkoLCAwKTsKKyAgICAgICAgfQorICAgIH0gZWxzZSB7CisgICAgICAgIFJlbmRlck9iamVjdCAq
ZmMgPSBmaXJzdENoaWxkKCk7CisgICAgICAgIGlmIChmYyAmJiBmYy0+aXNCZWZvcmVDb250ZW50
KCkpIHJldHVybiBmYy0+bG9jYWxDYXJldFJlY3QoaW5saW5lQm94LCBjYXJldE9mZnNldCk7Cisg
ICAgfQogCiAgICAgcmV0dXJuIGNhcmV0UmVjdDsKIH0KSW5kZXg6IFNvdXJjZS9XZWJDb3JlL3Jl
bmRlcmluZy9SZW5kZXJJbmxpbmUuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9yZW5k
ZXJpbmcvUmVuZGVySW5saW5lLmgJKHJldmlzaW9uIDE3NDMyNCkKKysrIFNvdXJjZS9XZWJDb3Jl
L3JlbmRlcmluZy9SZW5kZXJJbmxpbmUuaAkod29ya2luZyBjb3B5KQpAQCAtOTQsNyArOTQsMTAg
QEAKICAgICB2aXJ0dWFsIExheW91dFJlY3QgbG9jYWxDYXJldFJlY3QoSW5saW5lQm94KiwgaW50
LCBMYXlvdXRVbml0KiBleHRyYVdpZHRoVG9FbmRPZkxpbmUpIG92ZXJyaWRlIGZpbmFsOwogCiAg
ICAgYm9vbCBoaXRUZXN0Q3VsbGVkSW5saW5lKGNvbnN0IEhpdFRlc3RSZXF1ZXN0JiwgSGl0VGVz
dFJlc3VsdCYsIGNvbnN0IEhpdFRlc3RMb2NhdGlvbiYgbG9jYXRpb25JbkNvbnRhaW5lciwgY29u
c3QgTGF5b3V0UG9pbnQmIGFjY3VtdWxhdGVkT2Zmc2V0KTsKKyAgICAKKyAgICB2aXJ0dWFsIExh
eW91dFVuaXQgb2Zmc2V0V2lkdGgoKSBjb25zdCBvdmVycmlkZSBmaW5hbCB7IHJldHVybiBsaW5l
c0JvdW5kaW5nQm94KCkud2lkdGgoKTsgfQogCisKIHByb3RlY3RlZDoKICAgICB2aXJ0dWFsIHZv
aWQgd2lsbEJlRGVzdHJveWVkKCkgb3ZlcnJpZGU7CiAKQEAgLTEzNCw3ICsxMzcsNiBAQAogCiAg
ICAgdmlydHVhbCBMYXlvdXRVbml0IG9mZnNldExlZnQoKSBjb25zdCBvdmVycmlkZSBmaW5hbDsK
ICAgICB2aXJ0dWFsIExheW91dFVuaXQgb2Zmc2V0VG9wKCkgY29uc3Qgb3ZlcnJpZGUgZmluYWw7
Ci0gICAgdmlydHVhbCBMYXlvdXRVbml0IG9mZnNldFdpZHRoKCkgY29uc3Qgb3ZlcnJpZGUgZmlu
YWwgeyByZXR1cm4gbGluZXNCb3VuZGluZ0JveCgpLndpZHRoKCk7IH0KICAgICB2aXJ0dWFsIExh
eW91dFVuaXQgb2Zmc2V0SGVpZ2h0KCkgY29uc3Qgb3ZlcnJpZGUgZmluYWwgeyByZXR1cm4gbGlu
ZXNCb3VuZGluZ0JveCgpLmhlaWdodCgpOyB9CiAKICAgICB2aXJ0dWFsIExheW91dFJlY3QgY2xp
cHBlZE92ZXJmbG93UmVjdEZvclJlcGFpbnQoY29uc3QgUmVuZGVyTGF5ZXJNb2RlbE9iamVjdCog
cmVwYWludENvbnRhaW5lcikgY29uc3Qgb3ZlcnJpZGU7CkluZGV4OiBTb3VyY2UvV2ViS2l0L1dl
YktpdC54Y29kZXByb2ovcHJvamVjdC5wYnhwcm9qCj09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJL
aXQvV2ViS2l0Lnhjb2RlcHJvai9wcm9qZWN0LnBieHByb2oJKHJldmlzaW9uIDE3NDMyNCkKKysr
IFNvdXJjZS9XZWJLaXQvV2ViS2l0Lnhjb2RlcHJvai9wcm9qZWN0LnBieHByb2oJKHdvcmtpbmcg
Y29weSkKQEAgLTIzMzIsNiArMjMzMiwxNCBAQAogCQkJYmFzZUNvbmZpZ3VyYXRpb25SZWZlcmVu
Y2UgPSAxQzkwNEZEMjBCQTlERDBGMDA4MUU5RDAgLyogV2ViS2l0TGVnYWN5LnhjY29uZmlnICov
OwogCQkJYnVpbGRTZXR0aW5ncyA9IHsKIAkJCQlERUJVR19ERUZJTkVTID0gIiQoREVCVUdfREVG
SU5FU18kKENVUlJFTlRfVkFSSUFOVCkpIEVOQUJMRV9XRUJLSVRfVU5TRVRfRFlMRF9GUkFNRVdP
UktfUEFUSCI7CisJCQkJSEVBREVSX1NFQVJDSF9QQVRIUyA9ICgKKwkJCQkJIiQoV0VCS0lUU1lT
VEVNSU5URVJGQUNFX1NUQVRJQ19MSUJSQVJZX0hFQURFUlNfRk9MREVSX1BBVEgpIiwKKwkJCQkJ
IiQoV0VCQ09SRV9QUklWQVRFX0hFQURFUlNfRElSKS9Gb3J3YXJkaW5nSGVhZGVycyIsCisJCQkJ
CSIkKFdFQkNPUkVfUFJJVkFURV9IRUFERVJTX0RJUikvaWN1IiwKKwkJCQkJIlwiJChCVUlMVF9Q
Uk9EVUNUU19ESVIpL0Rlcml2ZWRTb3VyY2VzL1dlYktpdExlZ2FjeVwiIiwKKwkJCQkJIlwiJChC
VUlMVF9QUk9EVUNUU19ESVIpL3Vzci9sb2NhbC9pbmNsdWRlXCIiLAorCQkJCQkiJChIRUFERVJf
U0VBUkNIX1BBVEhTKSIsCisJCQkJKTsKIAkJCQlPVEhFUl9MREZMQUdTID0gKAogCQkJCQkiJChP
VEhFUl9MREZMQUdTKSIsCiAJCQkJCSItbCQoV0VCS0lUX1NZU1RFTV9JTlRFUkZBQ0VfTElCUkFS
WSkiLApJbmRleDogU291cmNlL1dlYktpdC9tYWMvV2ViVmlldy9XZWJGcmFtZS5tbQo9PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09Ci0tLSBTb3VyY2UvV2ViS2l0L21hYy9XZWJWaWV3L1dlYkZyYW1lLm1tCShyZXZpc2lvbiAx
NzQzMjQpCisrKyBTb3VyY2UvV2ViS2l0L21hYy9XZWJWaWV3L1dlYkZyYW1lLm1tCSh3b3JraW5n
IGNvcHkpCkBAIC0xNTA2LDcgKzE1MDYsNyBAQAogICAgICAgICB9CiAgICAgfQogCi0gICAgZnJh
bWUtPnNlbGVjdGlvbigpLnNldFNlbGVjdGVkUmFuZ2UoY29yZShyYW5nZSksIChFQWZmaW5pdHkp
YWZmaW5pdHksIGNsb3NlVHlwaW5nKTsKKyAgICBmcmFtZS0+c2VsZWN0aW9uKCkuc2V0U2VsZWN0
ZWRSYW5nZShjb3JlKHJhbmdlKSwgKEVBZmZpbml0eSlhZmZpbml0eSwgZmFsc2UsIGNsb3NlVHlw
aW5nKTsKICAgICBpZiAoIWNsb3NlVHlwaW5nKQogICAgICAgICBmcmFtZS0+ZWRpdG9yKCkuZW5z
dXJlTGFzdEVkaXRDb21tYW5kSGFzQ3VycmVudFNlbGVjdGlvbklmT3BlbkZvck1vcmVUeXBpbmco
KTsKIH0KSW5kZXg6IFNvdXJjZS9XZWJLaXQvbWFjL1dlYlZpZXcvV2ViVmlldy5tbQo9PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09Ci0tLSBTb3VyY2UvV2ViS2l0L21hYy9XZWJWaWV3L1dlYlZpZXcubW0JKHJldmlzaW9uIDE3
NDMyNCkKKysrIFNvdXJjZS9XZWJLaXQvbWFjL1dlYlZpZXcvV2ViVmlldy5tbQkod29ya2luZyBj
b3B5KQpAQCAtNzE2MCw3ICs3MTYwLDcgQEAKICAgICAgICAgaWYgKCFjb3JlRnJhbWUpCiAgICAg
ICAgICAgICByZXR1cm47CiAKLSAgICAgICAgY29yZUZyYW1lLT5zZWxlY3Rpb24oKS5zZXRTZWxl
Y3RlZFJhbmdlKGNvcmUocmFuZ2UpLCBjb3JlKHNlbGVjdGlvbkFmZmluaXR5KSwgdHJ1ZSk7Cisg
ICAgICAgIGNvcmVGcmFtZS0+c2VsZWN0aW9uKCkuc2V0U2VsZWN0ZWRSYW5nZShjb3JlKHJhbmdl
KSwgY29yZShzZWxlY3Rpb25BZmZpbml0eSksIGZhbHNlLCB0cnVlKTsKICAgICB9CiB9CiAKSW5k
ZXg6IFNvdXJjZS9XZWJLaXQyL1dlYlByb2Nlc3MvV2ViUGFnZS9pb3MvV2ViUGFnZUlPUy5tbQo9
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViS2l0Mi9XZWJQcm9jZXNzL1dlYlBhZ2UvaW9zL1dlYlBh
Z2VJT1MubW0JKHJldmlzaW9uIDE3NDMyNCkKKysrIFNvdXJjZS9XZWJLaXQyL1dlYlByb2Nlc3Mv
V2ViUGFnZS9pb3MvV2ViUGFnZUlPUy5tbQkod29ya2luZyBjb3B5KQpAQCAtOTUxLDcgKzk1MSw3
IEBACiAgICAgICAgIGJyZWFrOwogICAgIH0KICAgICBpZiAocmFuZ2UpCi0gICAgICAgIGZyYW1l
LnNlbGVjdGlvbigpLnNldFNlbGVjdGVkUmFuZ2UocmFuZ2UuZ2V0KCksIHBvc2l0aW9uLmFmZmlu
aXR5KCksIHRydWUpOworICAgICAgICBmcmFtZS5zZWxlY3Rpb24oKS5zZXRTZWxlY3RlZFJhbmdl
KHJhbmdlLmdldCgpLCBwb3NpdGlvbi5hZmZpbml0eSgpLCBmYWxzZSwgdHJ1ZSk7CiAKICAgICBz
ZW5kKE1lc3NhZ2VzOjpXZWJQYWdlUHJveHk6Okdlc3R1cmVDYWxsYmFjayhwb2ludCwgZ2VzdHVy
ZVR5cGUsIGdlc3R1cmVTdGF0ZSwgc3RhdGljX2Nhc3Q8dWludDMyX3Q+KGZsYWdzKSwgY2FsbGJh
Y2tJRCkpOwogfQpAQCAtMTQxNCw3ICsxNDE0LDcgQEAKIAogICAgIGlmIChuZXdSYW5nZSkgewog
ICAgICAgICBtX2N1cnJlbnRCbG9ja1NlbGVjdGlvbiA9IG5ld1JhbmdlOwotICAgICAgICBmcmFt
ZS5zZWxlY3Rpb24oKS5zZXRTZWxlY3RlZFJhbmdlKG5ld1JhbmdlLmdldCgpLCBWUF9ERUZBVUxU
X0FGRklOSVRZLCB0cnVlKTsKKyAgICAgICAgZnJhbWUuc2VsZWN0aW9uKCkuc2V0U2VsZWN0ZWRS
YW5nZShuZXdSYW5nZS5nZXQoKSwgVlBfREVGQVVMVF9BRkZJTklUWSwgZmFsc2UsIHRydWUpOwog
ICAgIH0KIAogICAgIGNvbXB1dGVFeHBhbmRBbmRTaHJpbmtUaHJlc2hvbGRzRm9ySGFuZGxlKHBv
aW50LCBoYW5kbGVQb3NpdGlvbiwgZ3Jvd1RocmVzaG9sZCwgc2hyaW5rVGhyZXNob2xkKTsKQEAg
LTE0OTEsNyArMTQ5MSw3IEBACiAgICAgICAgIGJyZWFrOwogICAgIH0KICAgICBpZiAocmFuZ2Up
Ci0gICAgICAgIGZyYW1lLnNlbGVjdGlvbigpLnNldFNlbGVjdGVkUmFuZ2UocmFuZ2UuZ2V0KCks
IHBvc2l0aW9uLmFmZmluaXR5KCksIHRydWUpOworICAgICAgICBmcmFtZS5zZWxlY3Rpb24oKS5z
ZXRTZWxlY3RlZFJhbmdlKHJhbmdlLmdldCgpLCBwb3NpdGlvbi5hZmZpbml0eSgpLCBmYWxzZSwg
dHJ1ZSk7CiAKICAgICBzZW5kKE1lc3NhZ2VzOjpXZWJQYWdlUHJveHk6OlRvdWNoZXNDYWxsYmFj
ayhwb2ludCwgdG91Y2hlcywgY2FsbGJhY2tJRCkpOwogfQpAQCAtMTUwNyw3ICsxNTA3LDcgQEAK
ICAgICAgICAgICAgIHJhbmdlID0gUmFuZ2U6OmNyZWF0ZSgqZnJhbWUuZG9jdW1lbnQoKSwgZnJv
bVBvc2l0aW9uLCB0b1Bvc2l0aW9uKTsKICAgICAgICAgZWxzZQogICAgICAgICAgICAgcmFuZ2Ug
PSBSYW5nZTo6Y3JlYXRlKCpmcmFtZS5kb2N1bWVudCgpLCB0b1Bvc2l0aW9uLCBmcm9tUG9zaXRp
b24pOwotICAgICAgICBmcmFtZS5zZWxlY3Rpb24oKS5zZXRTZWxlY3RlZFJhbmdlKHJhbmdlLmdl
dCgpLCBmcm9tUG9zaXRpb24uYWZmaW5pdHkoKSwgdHJ1ZSk7CisgICAgICAgIGZyYW1lLnNlbGVj
dGlvbigpLnNldFNlbGVjdGVkUmFuZ2UocmFuZ2UuZ2V0KCksIGZyb21Qb3NpdGlvbi5hZmZpbml0
eSgpLCBmYWxzZSwgdHJ1ZSk7CiAgICAgfQogCiAgICAgLy8gV2UgY2FuIHVzZSB0aGUgc2FtZSBj
YWxsYmFjayBmb3IgdGhlIGdlc3R1cmVzIHdpdGggb25lIHBvaW50LgpAQCAtMTUyMiw3ICsxNTIy
LDcgQEAKICAgICAgICAgcmV0dXJuOwogCiAgICAgVmlzaWJsZVBvc2l0aW9uIHBvc2l0aW9uID0g
ZnJhbWUuc2VsZWN0aW9uKCkuc2VsZWN0aW9uKCkuc3RhcnQoKTsKLSAgICBmcmFtZS5zZWxlY3Rp
b24oKS5zZXRTZWxlY3RlZFJhbmdlKHdvcmRSYW5nZUZyb21Qb3NpdGlvbihwb3NpdGlvbikuZ2V0
KCksIHBvc2l0aW9uLmFmZmluaXR5KCksIHRydWUpOworICAgIGZyYW1lLnNlbGVjdGlvbigpLnNl
dFNlbGVjdGVkUmFuZ2Uod29yZFJhbmdlRnJvbVBvc2l0aW9uKHBvc2l0aW9uKS5nZXQoKSwgcG9z
aXRpb24uYWZmaW5pdHkoKSwgZmFsc2UsIHRydWUpOwogfQogCiB2b2lkIFdlYlBhZ2U6OnNlbGVj
dFdvcmRCYWNrd2FyZCgpCkBAIC0xNTM0LDcgKzE1MzQsNyBAQAogICAgIFZpc2libGVQb3NpdGlv
biBwb3NpdGlvbiA9IGZyYW1lLnNlbGVjdGlvbigpLnNlbGVjdGlvbigpLnN0YXJ0KCk7CiAgICAg
VmlzaWJsZVBvc2l0aW9uIHN0YXJ0UG9zaXRpb24gPSBwb3NpdGlvbk9mTmV4dEJvdW5kYXJ5T2ZH
cmFudWxhcml0eShwb3NpdGlvbiwgV29yZEdyYW51bGFyaXR5LCBEaXJlY3Rpb25CYWNrd2FyZCk7
CiAgICAgaWYgKHN0YXJ0UG9zaXRpb24uaXNOb3ROdWxsKCkgJiYgc3RhcnRQb3NpdGlvbiAhPSBw
b3NpdGlvbikKLSAgICAgICAgZnJhbWUuc2VsZWN0aW9uKCkuc2V0U2VsZWN0ZWRSYW5nZShSYW5n
ZTo6Y3JlYXRlKCpmcmFtZS5kb2N1bWVudCgpLCBzdGFydFBvc2l0aW9uLCBwb3NpdGlvbikuZ2V0
KCksIHBvc2l0aW9uLmFmZmluaXR5KCksIHRydWUpOworICAgICAgICBmcmFtZS5zZWxlY3Rpb24o
KS5zZXRTZWxlY3RlZFJhbmdlKFJhbmdlOjpjcmVhdGUoKmZyYW1lLmRvY3VtZW50KCksIHN0YXJ0
UG9zaXRpb24sIHBvc2l0aW9uKS5nZXQoKSwgcG9zaXRpb24uYWZmaW5pdHkoKSwgZmFsc2UsIHRy
dWUpOwogfQogCiB2b2lkIFdlYlBhZ2U6Om1vdmVTZWxlY3Rpb25CeU9mZnNldChpbnQzMl90IG9m
ZnNldCwgdWludDY0X3QgY2FsbGJhY2tJRCkKQEAgLTE1NTIsNyArMTU1Miw3IEBACiAgICAgICAg
ICAgICBicmVhazsKICAgICB9CiAgICAgaWYgKHBvc2l0aW9uLmlzTm90TnVsbCgpICYmIHN0YXJ0
UG9zaXRpb24gIT0gcG9zaXRpb24pCi0gICAgICAgIGZyYW1lLnNlbGVjdGlvbigpLnNldFNlbGVj
dGVkUmFuZ2UoUmFuZ2U6OmNyZWF0ZSgqZnJhbWUuZG9jdW1lbnQoKSwgcG9zaXRpb24sIHBvc2l0
aW9uKS5nZXQoKSwgcG9zaXRpb24uYWZmaW5pdHkoKSwgdHJ1ZSk7CisgICAgICAgIGZyYW1lLnNl
bGVjdGlvbigpLnNldFNlbGVjdGVkUmFuZ2UoUmFuZ2U6OmNyZWF0ZSgqZnJhbWUuZG9jdW1lbnQo
KSwgcG9zaXRpb24sIHBvc2l0aW9uKS5nZXQoKSwgcG9zaXRpb24uYWZmaW5pdHkoKSwgZmFsc2Us
IHRydWUpOwogICAgIHNlbmQoTWVzc2FnZXM6OldlYlBhZ2VQcm94eTo6Vm9pZENhbGxiYWNrKGNh
bGxiYWNrSUQpKTsKIH0KIApAQCAtMTYxNCw3ICsxNjE0LDcgQEAKICAgICAgICAgcmV0dXJuOwog
ICAgIAogICAgIGZyYW1lLmVkaXRvcigpLnNldElnbm9yZUNvbXBvc2l0aW9uU2VsZWN0aW9uQ2hh
bmdlKHRydWUpOwotICAgIGZyYW1lLnNlbGVjdGlvbigpLnNldFNlbGVjdGVkUmFuZ2Uod29yZFJh
bmdlLmdldCgpLCBVUFNUUkVBTSwgdHJ1ZSk7CisgICAgZnJhbWUuc2VsZWN0aW9uKCkuc2V0U2Vs
ZWN0ZWRSYW5nZSh3b3JkUmFuZ2UuZ2V0KCksIFVQU1RSRUFNLCBmYWxzZSwgdHJ1ZSk7CiAgICAg
ZnJhbWUuZWRpdG9yKCkuaW5zZXJ0VGV4dChuZXdUZXh0LCAwKTsKICAgICBmcmFtZS5lZGl0b3Io
KS5zZXRJZ25vcmVDb21wb3NpdGlvblNlbGVjdGlvbkNoYW5nZShmYWxzZSk7CiB9CkBAIC0xNjQx
LDcgKzE2NDEsNyBAQAogCiAgICAgLy8gV2UgZG9uJ3Qgd2FudCB0byBub3RpZnkgdGhlIGNsaWVu
dCB0aGF0IHRoZSBzZWxlY3Rpb24gaGFzIGNoYW5nZWQgdW50aWwgd2UgYXJlIGRvbmUgaW5zZXJ0
aW5nIHRoZSBuZXcgdGV4dC4KICAgICBmcmFtZS5lZGl0b3IoKS5zZXRJZ25vcmVDb21wb3NpdGlv
blNlbGVjdGlvbkNoYW5nZSh0cnVlKTsKLSAgICBmcmFtZS5zZWxlY3Rpb24oKS5zZXRTZWxlY3Rl
ZFJhbmdlKHJhbmdlLmdldCgpLCBVUFNUUkVBTSwgdHJ1ZSk7CisgICAgZnJhbWUuc2VsZWN0aW9u
KCkuc2V0U2VsZWN0ZWRSYW5nZShyYW5nZS5nZXQoKSwgVVBTVFJFQU0sIGZhbHNlLCB0cnVlKTsK
ICAgICBmcmFtZS5lZGl0b3IoKS5pbnNlcnRUZXh0KG5ld1RleHQsIDApOwogICAgIGZyYW1lLmVk
aXRvcigpLnNldElnbm9yZUNvbXBvc2l0aW9uU2VsZWN0aW9uQ2hhbmdlKGZhbHNlKTsKIH0KQEAg
LTE3NTMsNyArMTc1Myw3IEBACiAgICAgICAgIHJldHVybjsKICAgICB9CiAgICAgCi0gICAgZnJh
bWUuc2VsZWN0aW9uKCkuc2V0U2VsZWN0ZWRSYW5nZShyYW5nZS5nZXQoKSwgVVBTVFJFQU0sIHRy
dWUpOworICAgIGZyYW1lLnNlbGVjdGlvbigpLnNldFNlbGVjdGVkUmFuZ2UocmFuZ2UuZ2V0KCks
IFVQU1RSRUFNLCBmYWxzZSwgdHJ1ZSk7CiAgICAgaWYgKGNvcnJlY3Rpb24ubGVuZ3RoKCkpCiAg
ICAgICAgIGZyYW1lLmVkaXRvcigpLmluc2VydFRleHQoY29ycmVjdGlvbiwgMCk7CiAgICAgZWxz
ZQo=
</data>

          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>239396</attachid>
            <date>2014-10-06 23:25:37 -0700</date>
            <delta_ts>2014-12-15 15:44:55 -0800</delta_ts>
            <desc>Slight cleanup to previous patch.</desc>
            <filename>15256-2014-10-06a.patch</filename>
            <type>text/plain</type>
            <size>109557</size>
            <attacher name="David Gatwood">dgatwood</attacher>
            
              <data encoding="base64">SW5kZXg6IExheW91dFRlc3RzL2VkaXRpbmcvZGVsZXRpbmcvc21hcnQtZGVsZXRlLTAwMS5odG1s
Cj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT0KLS0tIExheW91dFRlc3RzL2VkaXRpbmcvZGVsZXRpbmcvc21hcnQtZGVsZXRl
LTAwMS5odG1sCShyZXZpc2lvbiAxNzQzMjQpCisrKyBMYXlvdXRUZXN0cy9lZGl0aW5nL2RlbGV0
aW5nL3NtYXJ0LWRlbGV0ZS0wMDEuaHRtbAkod29ya2luZyBjb3B5KQpAQCAtMjEsNiArMjEsNyBA
QAogPHNjcmlwdD4KIAogZnVuY3Rpb24gZWRpdGluZ1Rlc3QoKSB7CisgICAgd2luZG93LmdldFNl
bGVjdGlvbigpLmNvbGxhcHNlKHRlc3QuZmlyc3RDaGlsZCwgMSk7CiAgICAgZG91YmxlQ2xpY2tB
dFNlbGVjdGlvblN0YXJ0KCk7CiAgICAgZGVsZXRlQ29tbWFuZCgpOwogfQpJbmRleDogTGF5b3V0
VGVzdHMvZWRpdGluZy9lZGl0aW5nLmpzCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIExheW91dFRlc3RzL2VkaXRp
bmcvZWRpdGluZy5qcwkocmV2aXNpb24gMTc0MzI0KQorKysgTGF5b3V0VGVzdHMvZWRpdGluZy9l
ZGl0aW5nLmpzCSh3b3JraW5nIGNvcHkpCkBAIC04OTcsMTIgKzg5Nyw1NSBAQAogICAgIGlmICh3
aW5kb3cudGVzdFJ1bm5lcikKICAgICAgICAgdGVzdFJ1bm5lci5kdW1wRWRpdGluZ0NhbGxiYWNr
cygpOwogCisgICAgZm9jdXNPbkZpcnN0VGV4dEluVGVzdEVsZW1lbnRJZkV4aXN0cygpOworCisg
ICAgZWRpdGluZ1Rlc3QoKTsKK30KKworZnVuY3Rpb24gZm9jdXNPbkZpcnN0VGV4dEluVGVzdEVs
ZW1lbnRJZkV4aXN0cygpIHsKICAgICB2YXIgZWxlbSA9IGRvY3VtZW50LmdldEVsZW1lbnRCeUlk
KCJ0ZXN0Iik7CiAgICAgdmFyIHNlbGVjdGlvbiA9IHdpbmRvdy5nZXRTZWxlY3Rpb24oKTsKLSAg
ICBzZWxlY3Rpb24uc2V0UG9zaXRpb24oZWxlbSwgMCk7Ci0gICAgZWRpdGluZ1Rlc3QoKTsKKyAg
ICBpZiAoZWxlbSkgeworICAgICAgICB2YXIgdHJhdmVyc2UgPSBmdW5jdGlvbiAobm9kZSwgb2Zm
c2V0LCBjb25kaXRpb24pIHsKKyAgICAgICAgICAgIHZhciBvYmogPSBjb25kaXRpb24obm9kZSwg
b2Zmc2V0KTsKKyAgICAgICAgICAgIGlmIChvYmopCisgICAgICAgICAgICAgICAgcmV0dXJuIG9i
ajsKKworICAgICAgICAgICAgdmFyIGNoaWxkcmVuID0gbm9kZS5jaGlsZE5vZGVzOworICAgICAg
ICAgICAgdmFyIGxlbiA9IGNoaWxkcmVuLmxlbmd0aDsKKyAgICAgICAgICAgIGZvciAodmFyIGkg
PSAwOyBpIDwgbGVuOyBpKyspIHsKKyAgICAgICAgICAgICAgICB2YXIgY2hpbGQgPSBjaGlsZHJl
bltpXTsKKyAgICAgICAgICAgICAgICBvYmogPSB0cmF2ZXJzZShjaGlsZCwgaSwgY29uZGl0aW9u
KTsKKyAgICAgICAgICAgICAgICBpZiAob2JqKQorICAgICAgICAgICAgICAgICAgICByZXR1cm4g
b2JqOworICAgICAgICAgICAgfQorICAgICAgICAgICAgcmV0dXJuIG51bGw7CisgICAgICAgIH0K
KworICAgICAgICB2YXIgZmlyc3RWaXNpYmxlUG9zaXRpb24gPSB0cmF2ZXJzZShlbGVtLCAwLCBm
dW5jdGlvbiAobm9kZSwgb2Zmc2V0KSB7CisgICAgICAgICAgICBpZiAobm9kZS5ub2RlTmFtZSA9
PSAnI3RleHQnKSB7CisgICAgICAgICAgICAgICAgb2Zmc2V0ID0gMDsKKyAgICAgICAgICAgICAg
ICB3aGlsZSAob2Zmc2V0IDwgbm9kZS50ZXh0Q29udGVudC5sZW5ndGggJiYgbm9kZS50ZXh0Q29u
dGVudFtvZmZzZXRdID09ICdcbicpCisgICAgICAgICAgICAgICAgICAgIG9mZnNldCsrOworICAg
ICAgICAgICAgICAgIHJldHVybiB7ICdub2RlJzogbm9kZSwgJ29mZnNldCc6IG9mZnNldCB9Owor
ICAgICAgICAgICAgfQorCisgICAgICAgICAgICBpZiAobm9kZS5ub2RlTmFtZSA9PSAnQlInIHx8
IG5vZGUubm9kZU5hbWUgPT0gJ0lNRycpCisgICAgICAgICAgICAgICAgcmV0dXJuIHsgJ25vZGUn
OiBub2RlLnBhcmVudE5vZGUsICdvZmZzZXQnOiBvZmZzZXQgfTsKKworICAgICAgICAgICAgcmV0
dXJuIG51bGw7CisgICAgICAgIH0pOworCisgICAgICAgIGlmIChmaXJzdFZpc2libGVQb3NpdGlv
bikKKyAgICAgICAgICAgIHNlbGVjdGlvbi5jb2xsYXBzZShmaXJzdFZpc2libGVQb3NpdGlvbi5u
b2RlLCBmaXJzdFZpc2libGVQb3NpdGlvbi5vZmZzZXQpOworICAgICAgICBlbHNlCisgICAgICAg
ICAgICBzZWxlY3Rpb24uY29sbGFwc2UoZWxlbSwgMCk7CisgICAgfSBlbHNlIHsKKyAgICAgICAg
c2VsZWN0aW9uLnJlbW92ZUFsbFJhbmdlcygpOworICAgIH0KIH0KIAorCiB2YXIgZHVtcEFzVGV4
dCA9IGZhbHNlOwogdmFyIGVsZW1lbnRzRm9yRHVtcGluZ01hcmt1cExpc3QgPSBbZG9jdW1lbnQu
Y3JlYXRlRWxlbWVudCgnb2wnKV07CiAKQEAgLTkxNSw5ICs5NTgsOCBAQAogCiAgICAgZHVtcEFz
VGV4dCA9IHRydWU7CiAKLSAgICB2YXIgZWxlbSA9IGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKCJ0
ZXN0Iik7Ci0gICAgdmFyIHNlbGVjdGlvbiA9IHdpbmRvdy5nZXRTZWxlY3Rpb24oKTsKLSAgICBz
ZWxlY3Rpb24uc2V0UG9zaXRpb24oZWxlbSwgMCk7CisgICAgZm9jdXNPbkZpcnN0VGV4dEluVGVz
dEVsZW1lbnRJZkV4aXN0cygpOworCiAgICAgZWRpdGluZ1Rlc3QoKTsKIAogICAgIGZvciAodmFy
IGkgPSAwOyBpIDwgZWxlbWVudHNGb3JEdW1waW5nTWFya3VwTGlzdC5sZW5ndGg7IGkrKykKSW5k
ZXg6IExheW91dFRlc3RzL2VkaXRpbmcvcGFzdGVib2FyZC9zbWFydC1kcmFnLWRyb3AuaHRtbAo9
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09Ci0tLSBMYXlvdXRUZXN0cy9lZGl0aW5nL3Bhc3RlYm9hcmQvc21hcnQtZHJhZy1k
cm9wLmh0bWwJKHJldmlzaW9uIDE3NDMyNCkKKysrIExheW91dFRlc3RzL2VkaXRpbmcvcGFzdGVi
b2FyZC9zbWFydC1kcmFnLWRyb3AuaHRtbAkod29ya2luZyBjb3B5KQpAQCAtNiw2ICs2LDcgQEAK
ICAgCiAgICAgaWYgKCF3aW5kb3cuZXZlbnRTZW5kZXIpCiAgICAgICAgIHJldHVybjsKKyAgICB3
aW5kb3cuZ2V0U2VsZWN0aW9uKCkuY29sbGFwc2UoZHJhZ21lLmZpcnN0Q2hpbGQsIDApOwogICAg
IGRvdWJsZUNsaWNrQXRTZWxlY3Rpb25TdGFydCgpOwogCiAgICAgLy8gRHJhZyAnaGVsbG8nCklu
ZGV4OiBMYXlvdXRUZXN0cy9lZGl0aW5nL3Bhc3RlYm9hcmQvc21hcnQtcGFzdGUtMDAxLmh0bWwK
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PQotLS0gTGF5b3V0VGVzdHMvZWRpdGluZy9wYXN0ZWJvYXJkL3NtYXJ0LXBhc3Rl
LTAwMS5odG1sCShyZXZpc2lvbiAxNzQzMjQpCisrKyBMYXlvdXRUZXN0cy9lZGl0aW5nL3Bhc3Rl
Ym9hcmQvc21hcnQtcGFzdGUtMDAxLmh0bWwJKHdvcmtpbmcgY29weSkKQEAgLTQyLDYgKzQyLDcg
QEAKIDxzY3JpcHQ+CiAKIGZ1bmN0aW9uIGVkaXRpbmdUZXN0KCkgeworICAgIHdpbmRvdy5nZXRT
ZWxlY3Rpb24oKS5jb2xsYXBzZSh0ZXN0LmZpcnN0Q2hpbGQsIDEpOwogICAgIGRvdWJsZUNsaWNr
QXRTZWxlY3Rpb25TdGFydCgpOwogICAgIGNvcHlDb21tYW5kKCk7CiAgICAgbW92ZVNlbGVjdGlv
bkZvcndhcmRCeUNoYXJhY3RlckNvbW1hbmQoKTsKSW5kZXg6IExheW91dFRlc3RzL2VkaXRpbmcv
cGFzdGVib2FyZC9zbWFydC1wYXN0ZS0wMDMuaHRtbAo9PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBMYXlvdXRUZXN0
cy9lZGl0aW5nL3Bhc3RlYm9hcmQvc21hcnQtcGFzdGUtMDAzLmh0bWwJKHJldmlzaW9uIDE3NDMy
NCkKKysrIExheW91dFRlc3RzL2VkaXRpbmcvcGFzdGVib2FyZC9zbWFydC1wYXN0ZS0wMDMuaHRt
bAkod29ya2luZyBjb3B5KQpAQCAtNDMsNiArNDMsNyBAQAogPHNjcmlwdD4KIAogZnVuY3Rpb24g
ZWRpdGluZ1Rlc3QoKSB7CisgICAgd2luZG93LmdldFNlbGVjdGlvbigpLmNvbGxhcHNlKHRlc3Qu
Zmlyc3RDaGlsZCwgMSk7CiAgICAgZG91YmxlQ2xpY2tBdFNlbGVjdGlvblN0YXJ0KCk7CiAgICAg
Y29weUNvbW1hbmQoKTsKICAgICBtb3ZlU2VsZWN0aW9uRm9yd2FyZEJ5Q2hhcmFjdGVyQ29tbWFu
ZCgpOwpJbmRleDogTGF5b3V0VGVzdHMvZWRpdGluZy9wYXN0ZWJvYXJkL3NtYXJ0LXBhc3RlLTAw
NC5odG1sCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT0KLS0tIExheW91dFRlc3RzL2VkaXRpbmcvcGFzdGVib2FyZC9zbWFy
dC1wYXN0ZS0wMDQuaHRtbAkocmV2aXNpb24gMTc0MzI0KQorKysgTGF5b3V0VGVzdHMvZWRpdGlu
Zy9wYXN0ZWJvYXJkL3NtYXJ0LXBhc3RlLTAwNC5odG1sCSh3b3JraW5nIGNvcHkpCkBAIC00Miw2
ICs0Miw3IEBACiA8c2NyaXB0PgogCiBmdW5jdGlvbiBlZGl0aW5nVGVzdCgpIHsKKyAgICB3aW5k
b3cuZ2V0U2VsZWN0aW9uKCkuY29sbGFwc2UodGVzdC5maXJzdENoaWxkLCAxKTsKICAgICBkb3Vi
bGVDbGlja0F0U2VsZWN0aW9uU3RhcnQoKTsKICAgICBjb3B5Q29tbWFuZCgpOwogICAgIG1vdmVT
ZWxlY3Rpb25Gb3J3YXJkQnlDaGFyYWN0ZXJDb21tYW5kKCk7CkluZGV4OiBMYXlvdXRUZXN0cy9l
ZGl0aW5nL3NlbGVjdGlvbi9ET01TZWxlY3Rpb24tRG9jdW1lbnRUeXBlLWV4cGVjdGVkLnR4dAo9
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09Ci0tLSBMYXlvdXRUZXN0cy9lZGl0aW5nL3NlbGVjdGlvbi9ET01TZWxlY3Rpb24t
RG9jdW1lbnRUeXBlLWV4cGVjdGVkLnR4dAkocmV2aXNpb24gMTc0MzI0KQorKysgTGF5b3V0VGVz
dHMvZWRpdGluZy9zZWxlY3Rpb24vRE9NU2VsZWN0aW9uLURvY3VtZW50VHlwZS1leHBlY3RlZC50
eHQJKHdvcmtpbmcgY29weSkKQEAgLTUsMTAgKzUsMTAgQEAKIAogUEFTUyBzZWwuYW5jaG9yTm9k
ZSBpcyBudWxsCiBQQVNTIHNlbC5hbmNob3JOb2RlIGlzIG51bGwKK1BBU1Mgc2VsLmNvbGxhcHNl
KGRvY1R5cGUpIHRocmV3IGV4Y2VwdGlvbiBJbnZhbGlkTm9kZVR5cGVFcnJvcjogRmFpbGVkIHRv
IGV4ZWN1dGUgJ2NvbGxhcHNlJyBvbiAnU2VsZWN0aW9uJzogVGhlIG5vZGUgcHJvdmlkZWQgaXMg
b2YgdHlwZSAnYycuLgogUEFTUyBzZWwuYW5jaG9yTm9kZSBpcyBudWxsCitQQVNTIHNlbC5jb2xs
YXBzZShkb2NUeXBlKSB0aHJldyBleGNlcHRpb24gSW52YWxpZE5vZGVUeXBlRXJyb3I6IEZhaWxl
ZCB0byBleGVjdXRlICdjb2xsYXBzZScgb24gJ1NlbGVjdGlvbic6IFRoZSBub2RlIHByb3ZpZGVk
IGlzIG9mIHR5cGUgJ2MnLi4KIFBBU1Mgc2VsLmFuY2hvck5vZGUgaXMgbnVsbAotUEFTUyBzZWwu
YW5jaG9yTm9kZSBpcyBudWxsCi1QQVNTIHNlbC5hbmNob3JOb2RlIGlzIG51bGwKIFBBU1Mgc2Vs
LmNvbnRhaW5zTm9kZShkb2NUeXBlKSBpcyBmYWxzZQogUEFTUyBzdWNjZXNzZnVsbHlQYXJzZWQg
aXMgdHJ1ZQogCkluZGV4OiBMYXlvdXRUZXN0cy9lZGl0aW5nL3NlbGVjdGlvbi9zY3JpcHQtdGVz
dHMvRE9NU2VsZWN0aW9uLURvY3VtZW50VHlwZS5qcwo9PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBMYXlvdXRUZXN0
cy9lZGl0aW5nL3NlbGVjdGlvbi9zY3JpcHQtdGVzdHMvRE9NU2VsZWN0aW9uLURvY3VtZW50VHlw
ZS5qcwkocmV2aXNpb24gMTc0MzI0KQorKysgTGF5b3V0VGVzdHMvZWRpdGluZy9zZWxlY3Rpb24v
c2NyaXB0LXRlc3RzL0RPTVNlbGVjdGlvbi1Eb2N1bWVudFR5cGUuanMJKHdvcmtpbmcgY29weSkK
QEAgLTksOCArOSw3IEBACiBzZWwuc2V0QmFzZUFuZEV4dGVudChudWxsLCAwLCBkb2NUeXBlLCAw
KTsKIHNob3VsZEJlTnVsbCgic2VsLmFuY2hvck5vZGUiKTsKIAotc2VsLmNvbGxhcHNlKGRvY1R5
cGUpOwotc2hvdWxkQmVOdWxsKCJzZWwuYW5jaG9yTm9kZSIpOworc2hvdWxkVGhyb3coInNlbC5j
b2xsYXBzZShkb2NUeXBlKSIsICciSW52YWxpZE5vZGVUeXBlRXJyb3I6IEZhaWxlZCB0byBleGVj
dXRlIFwnY29sbGFwc2VcJyBvbiBcJ1NlbGVjdGlvblwnOiBUaGUgbm9kZSBwcm92aWRlZCBpcyBv
ZiB0eXBlIFwnY1wnLiInKTsKIAogc2VsLnNlbGVjdEFsbENoaWxkcmVuKGRvY1R5cGUpOwogc2hv
dWxkQmVOdWxsKCJzZWwuYW5jaG9yTm9kZSIpOwpJbmRleDogTGF5b3V0VGVzdHMvZWRpdGluZy9z
ZWxlY3Rpb24vc2VsZWN0aW9uLWludmFsaWQtb2Zmc2V0LWV4cGVjdGVkLnR4dAo9PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
Ci0tLSBMYXlvdXRUZXN0cy9lZGl0aW5nL3NlbGVjdGlvbi9zZWxlY3Rpb24taW52YWxpZC1vZmZz
ZXQtZXhwZWN0ZWQudHh0CShyZXZpc2lvbiAxNzQzMjQpCisrKyBMYXlvdXRUZXN0cy9lZGl0aW5n
L3NlbGVjdGlvbi9zZWxlY3Rpb24taW52YWxpZC1vZmZzZXQtZXhwZWN0ZWQudHh0CSh3b3JraW5n
IGNvcHkpCkBAIC0xLDggKzEsOSBAQAotWW91IHNob3VsZCBzZWUgc2l4IE9LcyBiZWxvdyAoYW5k
IG5vdCBoYW5nKTogCitZb3Ugc2hvdWxkIHNlZSA3IE9LcyBiZWxvdyAoYW5kIG5vdCBoYW5nKTog
CiBPSwogT0sKIE9LCiBPSwogT0sKIE9LCitPSwogCkluZGV4OiBMYXlvdXRUZXN0cy9lZGl0aW5n
L3NlbGVjdGlvbi9zZWxlY3Rpb24taW52YWxpZC1vZmZzZXQuaHRtbAo9PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBM
YXlvdXRUZXN0cy9lZGl0aW5nL3NlbGVjdGlvbi9zZWxlY3Rpb24taW52YWxpZC1vZmZzZXQuaHRt
bAkocmV2aXNpb24gMTc0MzI0KQorKysgTGF5b3V0VGVzdHMvZWRpdGluZy9zZWxlY3Rpb24vc2Vs
ZWN0aW9uLWludmFsaWQtb2Zmc2V0Lmh0bWwJKHdvcmtpbmcgY29weSkKQEAgLTEsNSArMSw1IEBA
CiA8Ym9keT4KLVlvdSBzaG91bGQgc2VlIHNpeCBPS3MgYmVsb3cgKGFuZCBub3QgaGFuZyk6IDxi
cj4KK1lvdSBzaG91bGQgc2VlIDcgT0tzIGJlbG93IChhbmQgbm90IGhhbmcpOiA8YnI+CiA8c2Ny
aXB0PgogaWYgKHdpbmRvdy50ZXN0UnVubmVyKQogICAgIHRlc3RSdW5uZXIuZHVtcEFzVGV4dCgp
OwpAQCAtMzAsNyArMzAsOSBAQAogfSBjYXRjaCAoZSkge2RvY3VtZW50LndyaXRlKCgoZS5jb2Rl
PT1ET01FeGNlcHRpb24uSU5ERVhfU0laRV9FUlIpID8gIk9LIiA6ICJGQUlMIikrIjxicj4iKTsg
fQogCiAvLyB0aGVzZSBzaG91bGQgdGhyb3cgYXMgd2VsbCBidXQgZG9uJ3QgYXQgdGhlIG1vbWVu
dC4gSnVzdCBjaGVja2luZyB0aGV5IGRvbid0IGNyYXNoLiAKLXNlbGVjdGlvbi5jb2xsYXBzZShi
b2R5LCAxMDAwMCk7Cit0cnkgeworICBzZWxlY3Rpb24uY29sbGFwc2UoYm9keSwgMTAwMDApOwor
fSBjYXRjaCAoZSkge2RvY3VtZW50LndyaXRlKCgoZS5jb2RlPT1ET01FeGNlcHRpb24uSU5ERVhf
U0laRV9FUlIpID8gIk9LIiA6ICJGQUlMIikrIjxicj4iKTsgfQogc2VsZWN0aW9uLnNldEJhc2VB
bmRFeHRlbnQoYm9keSwgMTAwMCwgYm9keSwgMCk7CiBzZWxlY3Rpb24uc2V0QmFzZUFuZEV4dGVu
dChib2R5LCAwLCBib2R5LCAxMDAwMCk7CiBzZWxlY3Rpb24uc2V0UG9zaXRpb24oYm9keSwgMTAw
MDApOwpJbmRleDogTGF5b3V0VGVzdHMvZmFzdC9jc3MvY291bnRlcnMvY291bnRlci1iZWZvcmUt
Y29udGVudC1ub3QtaW5jcmVtZW50ZWQuaHRtbAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBMYXlvdXRUZXN0cy9m
YXN0L2Nzcy9jb3VudGVycy9jb3VudGVyLWJlZm9yZS1jb250ZW50LW5vdC1pbmNyZW1lbnRlZC5o
dG1sCShyZXZpc2lvbiAxNzQzMjQpCisrKyBMYXlvdXRUZXN0cy9mYXN0L2Nzcy9jb3VudGVycy9j
b3VudGVyLWJlZm9yZS1jb250ZW50LW5vdC1pbmNyZW1lbnRlZC5odG1sCSh3b3JraW5nIGNvcHkp
CkBAIC0yNiw3ICsyNiw4IEBACiAgICAgICAgICAgICAvLyBXZSBuZWVkIHRvIHVzZSB0aGUgc2Vs
ZWN0aW9uIG9yIHdlIGNhbm5vdCByZXByb2R1Y2UgdGhpcyBidWchCiAgICAgICAgICAgICB2YXIg
c2VsZWN0aW9uID0gd2luZG93LmdldFNlbGVjdGlvbigpOwogICAgICAgICAgICAgdmFyIGNvbnRh
aW5lciA9IGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKCJjb250YWluZXIiKTsKLSAgICAgICAgICAg
IHNlbGVjdGlvbi5zZXRQb3NpdGlvbihjb250YWluZXIsIDApOworICAgICAgICAgICAgLy8gc2Vs
ZWN0aW9uLnNldFBvc2l0aW9uKGNvbnRhaW5lciwgMCk7CisgICAgICAgICAgICBzZWxlY3Rpb24u
Y29sbGFwc2UoY29udGFpbmVyLmZpcnN0Q2hpbGQsIDApOwogICAgICAgICAgICAgaWYgKHNlbGVj
dGlvbi5yYW5nZUNvdW50ID4gMCkgewogICAgICAgICAgICAgICAgIHZhciBuZXdFbGVtZW50ID0g
ZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgnZGl2Jyk7CiAgICAgICAgICAgICAgICAgbmV3RWxlbWVu
dC5pZCA9ICdkaXYnICsgaTsKSW5kZXg6IExheW91dFRlc3RzL2Zhc3QvZG9tL1JhbmdlL3Jhbmdl
LXNlbGVjdGlvbi1hY3Jvc3MtZG9jdW1lbnRzLWNyYXNoLWV4cGVjdGVkLnR4dAo9PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
Ci0tLSBMYXlvdXRUZXN0cy9mYXN0L2RvbS9SYW5nZS9yYW5nZS1zZWxlY3Rpb24tYWNyb3NzLWRv
Y3VtZW50cy1jcmFzaC1leHBlY3RlZC50eHQJKHJldmlzaW9uIDE3NDMyNCkKKysrIExheW91dFRl
c3RzL2Zhc3QvZG9tL1JhbmdlL3JhbmdlLXNlbGVjdGlvbi1hY3Jvc3MtZG9jdW1lbnRzLWNyYXNo
LWV4cGVjdGVkLnR4dAkod29ya2luZyBjb3B5KQpAQCAtMSArMSwyIEBACitDT05TT0xFIEVSUk9S
OiBsaW5lIDI1OiBUaGUgZ2l2ZW4gcmFuZ2UgZG9lcyBub3QgYmVsb25nIHRvIHRoZSBjdXJyZW50
IHNlbGVjdGlvbidzIGRvY3VtZW50LgogVGVzdCBwYXNzZXMgaWYgaXQgZG9lcyBub3QgY3Jhc2gu
IApJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL0phdmFTY3JpcHRDb3JlLnhjb2RlcHJvai9w
cm9qZWN0LnBieHByb2oKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL0phdmFT
Y3JpcHRDb3JlLnhjb2RlcHJvai9wcm9qZWN0LnBieHByb2oJKHJldmlzaW9uIDE3NDMyNCkKKysr
IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9KYXZhU2NyaXB0Q29yZS54Y29kZXByb2ovcHJvamVjdC5w
Ynhwcm9qCSh3b3JraW5nIGNvcHkpCkBAIC03NDU3LDYgKzc0NTcsOCBAQAogCQkxNDlDMjc2RTA4
OTAyQUZFMDA4QTlFRkMgLyogUmVsZWFzZSAqLyA9IHsKIAkJCWlzYSA9IFhDQnVpbGRDb25maWd1
cmF0aW9uOwogCQkJYnVpbGRTZXR0aW5ncyA9IHsKKwkJCQlPVEhFUl9DRkxBR1MgPSAiJChBU0FO
X09USEVSX0NGTEFHUykiOworCQkJCU9USEVSX0xERkxBR1MgPSAiJChBU0FOX09USEVSX0xERkxB
R1MpIjsKIAkJCQlQUk9EVUNUX05BTUUgPSBBbGw7CiAJCQl9OwogCQkJbmFtZSA9IFJlbGVhc2U7
CkluZGV4OiBTb3VyY2UvV2ViQ29yZS9XZWJDb3JlLmV4cC5pbgo9PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3Vy
Y2UvV2ViQ29yZS9XZWJDb3JlLmV4cC5pbgkocmV2aXNpb24gMTc0MzI0KQorKysgU291cmNlL1dl
YkNvcmUvV2ViQ29yZS5leHAuaW4JKHdvcmtpbmcgY29weSkKQEAgLTM2NiwxMCArMzY2LDExIEBA
CiBfX1pON1dlYkNvcmUxNERvY3VtZW50V3JpdGVyMTFzZXRFbmNvZGluZ0VSS04zV1RGNlN0cmlu
Z0ViCiBfX1pON1dlYkNvcmUxNEZpbGVJY29uTG9hZGVyMTRub3RpZnlGaW5pc2hlZEVOM1dURjEw
UGFzc1JlZlB0cklOU180SWNvbkVFRQogX19aTjdXZWJDb3JlMTRGb3JtQ29udHJvbGxlcjIyZ2V0
UmVmZXJlbmNlZEZpbGVQYXRoc0VSS04zV1RGNlZlY3RvcklOUzFfNlN0cmluZ0VMbTBFTlMxXzE1
Q3Jhc2hPbk92ZXJmbG93RUVFCitfX1pON1dlYkNvcmUxNEZyYW1lU2VsZWN0aW9uRDFFdgogX19a
TjdXZWJDb3JlMTRGcmFtZVNlbGVjdGlvbjEwc2V0Rm9jdXNlZEViCiBfX1pON1dlYkNvcmUxNEZy
YW1lU2VsZWN0aW9uMTJzZXRTZWxlY3Rpb25FUktOU18xNlZpc2libGVTZWxlY3Rpb25Fak5TMF8x
OUN1cnNvckFsaWduT25TY3JvbGxFTlNfMTVUZXh0R3JhbnVsYXJpdHlFCiBfX1pON1dlYkNvcmUx
NEZyYW1lU2VsZWN0aW9uMTVyZXZlYWxTZWxlY3Rpb25FUktOU18xNVNjcm9sbEFsaWdubWVudEVO
U18xOFJldmVhbEV4dGVudE9wdGlvbkUKLV9fWk43V2ViQ29yZTE0RnJhbWVTZWxlY3Rpb24xNnNl
dFNlbGVjdGVkUmFuZ2VFUE5TXzVSYW5nZUVOU185RUFmZmluaXR5RWIKK19fWk43V2ViQ29yZTE0
RnJhbWVTZWxlY3Rpb24xNnNldFNlbGVjdGVkUmFuZ2VFUE5TXzVSYW5nZUVOU185RUFmZmluaXR5
RWJqCiBfX1pON1dlYkNvcmUxNEZyYW1lU2VsZWN0aW9uMTlhYnNvbHV0ZUNhcmV0Qm91bmRzRXYK
IF9fWk43V2ViQ29yZTE0RnJhbWVTZWxlY3Rpb24yMHNldFNlbGVjdGlvbkZyb21Ob25lRXYKIF9f
Wk43V2ViQ29yZTE0RnJhbWVTZWxlY3Rpb241Y2xlYXJFdgpAQCAtNzMxLDYgKzczMiw4IEBACiBf
X1pON1dlYkNvcmUxNlRocmVhZEdsb2JhbERhdGExMHN0YXRpY0RhdGFFCiBfX1pON1dlYkNvcmUx
NlRocmVhZEdsb2JhbERhdGFDMUV2CiBfX1pON1dlYkNvcmUxNlRocmVhZEdsb2JhbERhdGFEMUV2
CitfX1pON1dlYkNvcmUxNlZpc2libGVTZWxlY3Rpb25DMUVSS1MwXworX19aTjdXZWJDb3JlMTZW
aXNpYmxlU2VsZWN0aW9uRDFFdgogX19aTjdXZWJDb3JlMTZWaXNpYmxlU2VsZWN0aW9uMjJleHBh
bmRVc2luZ0dyYW51bGFyaXR5RU5TXzE1VGV4dEdyYW51bGFyaXR5RQogX19aTjdXZWJDb3JlMTZW
aXNpYmxlU2VsZWN0aW9uQzFFUEtOU181UmFuZ2VFTlNfOUVBZmZpbml0eUViCiBfX1pON1dlYkNv
cmUxNlZpc2libGVTZWxlY3Rpb25DMUVSS05TXzE1VmlzaWJsZVBvc2l0aW9uRVMzX2IKQEAgLTMz
NzgsNiArMzM4MSw3IEBACiBfX1pOSzdXZWJDb3JlMTFJbWFnZUJ1ZmZlcjljb3B5SW1hZ2VFTlNf
MTZCYWNraW5nU3RvcmVDb3B5RU5TXzEzU2NhbGVCZWhhdmlvckUKIF9fWk5LN1dlYkNvcmUxNlZp
c2libGVTZWxlY3Rpb24xMGZpcnN0UmFuZ2VFdgogI2VuZGlmCitfX1pOSzdXZWJDb3JlMTRGcmFt
ZVNlbGVjdGlvbjEwZmlyc3RSYW5nZUV2CiAKICNpZiBFTkFCTEUoU1BFRUNIX1NZTlRIRVNJUykK
IF9fWk43V2ViQ29yZTE1U3BlZWNoU3ludGhlc2lzMjJzZXRQbGF0Zm9ybVN5bnRoZXNpemVyRU5T
dDNfXzExMHVuaXF1ZV9wdHJJTlNfMjVQbGF0Zm9ybVNwZWVjaFN5bnRoZXNpemVyRU5TMV8xNGRl
ZmF1bHRfZGVsZXRlSVMzX0VFRUUKSW5kZXg6IFNvdXJjZS9XZWJDb3JlL2FjY2Vzc2liaWxpdHkv
QWNjZXNzaWJpbGl0eU9iamVjdC5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvYWNj
ZXNzaWJpbGl0eS9BY2Nlc3NpYmlsaXR5T2JqZWN0LmNwcAkocmV2aXNpb24gMTc0MzI0KQorKysg
U291cmNlL1dlYkNvcmUvYWNjZXNzaWJpbGl0eS9BY2Nlc3NpYmlsaXR5T2JqZWN0LmNwcAkod29y
a2luZyBjb3B5KQpAQCAtNzEwLDcgKzcxMCw3IEBACiAgICAgaWYgKFJlZlB0cjxSYW5nZT4gY2xv
c2VzdFN0cmluZ1JhbmdlID0gcmFuZ2VDbG9zZXN0VG9SYW5nZShzZWxlY3RlZFN0cmluZ1Jhbmdl
LmdldCgpLCBjbG9zZXN0QWZ0ZXJTdHJpbmdSYW5nZSwgY2xvc2VzdEJlZm9yZVN0cmluZ1Jhbmdl
KSkgewogICAgICAgICBTdHJpbmcgY2xvc2VzdFN0cmluZyA9IGNsb3Nlc3RTdHJpbmdSYW5nZS0+
dGV4dCgpOwogICAgICAgICBib29sIHJlcGxhY2VTZWxlY3Rpb24gPSBmYWxzZTsKLSAgICAgICAg
aWYgKGZyYW1lLT5zZWxlY3Rpb24oKS5zZXRTZWxlY3RlZFJhbmdlKGNsb3Nlc3RTdHJpbmdSYW5n
ZS5nZXQoKSwgRE9XTlNUUkVBTSwgdHJ1ZSkpIHsKKyAgICAgICAgaWYgKGZyYW1lLT5zZWxlY3Rp
b24oKS5zZXRTZWxlY3RlZFJhbmdlKGNsb3Nlc3RTdHJpbmdSYW5nZS5nZXQoKSwgRE9XTlNUUkVB
TSwgZmFsc2UsIHRydWUpKSB7CiAgICAgICAgICAgICBzd2l0Y2ggKGFjdGl2aXR5KSB7CiAgICAg
ICAgICAgICBjYXNlIEZpbmRBbmRDYXBpdGFsaXplOiB7CiAgICAgICAgICAgICAgICAgcmVwbGFj
ZW1lbnRTdHJpbmcgPSBjbG9zZXN0U3RyaW5nOwpJbmRleDogU291cmNlL1dlYkNvcmUvZG9tL1Bv
c2l0aW9uLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9kb20vUG9zaXRpb24uY3Bw
CShyZXZpc2lvbiAxNzQzMjQpCisrKyBTb3VyY2UvV2ViQ29yZS9kb20vUG9zaXRpb24uY3BwCSh3
b3JraW5nIGNvcHkpCkBAIC0xLDUgKzEsNiBAQAogLyoKICAqIENvcHlyaWdodCAoQykgMjAwNCwg
MjAwNSwgMjAwNiwgMjAwOSwgMjAxMyBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisg
KiBQb3J0aW9ucyBDb3B5cmlnaHQgKGMpIDIwMTQgRGF2aWQgQS4gR2F0d29vZC4gIEFsbCByaWdo
dHMgcmVzZXJ2ZWQuCiAgKgogICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5k
IGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CiAgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJt
aXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKQEAgLTQ4LDcgKzQ5
LDggQEAKICNpbmNsdWRlIDxzdGRpby5oPgogI2luY2x1ZGUgPHd0Zi90ZXh0L0NTdHJpbmcuaD4K
ICNpbmNsdWRlIDx3dGYvdW5pY29kZS9DaGFyYWN0ZXJOYW1lcy5oPgotICAKKyNpbmNsdWRlICJO
b2RlTGlzdC5oIgorCiBuYW1lc3BhY2UgV2ViQ29yZSB7CiAKIHVzaW5nIG5hbWVzcGFjZSBIVE1M
TmFtZXM7CkBAIC0zMDcsOCArMzA5LDkgQEAKICAgICBBU1NFUlQob2Zmc2V0ID49IDApOwogCiAg
ICAgaWYgKG9mZnNldCA+IDApIHsKLSAgICAgICAgaWYgKE5vZGUqIGNoaWxkID0gbm9kZS0+dHJh
dmVyc2VUb0NoaWxkQXQob2Zmc2V0IC0gMSkpCisgICAgICAgIGlmIChOb2RlKiBjaGlsZCA9IG5v
ZGUtPnRyYXZlcnNlVG9DaGlsZEF0KG9mZnNldCAtIDEpKSB7CiAgICAgICAgICAgICByZXR1cm4g
bGFzdFBvc2l0aW9uSW5PckFmdGVyTm9kZShjaGlsZCk7CisgICAgICAgIH0KIAogICAgICAgICAv
LyBUaGVyZSBhcmUgdHdvIHJlYXNvbnMgY2hpbGQgbWlnaHQgYmUgMDoKICAgICAgICAgLy8gICAx
KSBUaGUgbm9kZSBpcyBub2RlIGxpa2UgYSB0ZXh0IG5vZGUgdGhhdCBpcyBub3QgYW4gZWxlbWVu
dCwgYW5kIHRoZXJlZm9yZSBoYXMgbm8gY2hpbGRyZW4uCkBAIC01MzIsNiArNTM1LDEzIEBACiAg
ICAgaWYgKGlzPEhUTUxUYWJsZUVsZW1lbnQ+KCpub2RlKSkKICAgICAgICAgcmV0dXJuIGZhbHNl
OwogICAgIAorICAgIGlmIChub2RlLT5pc0VsZW1lbnROb2RlKCkpIHsKKyAgICAgICAgRWxlbWVu
dCAqZWx0ID0gZG93bmNhc3Q8RWxlbWVudD4obm9kZSk7CisgICAgICAgIGlmIChlbHQtPmJlZm9y
ZVBzZXVkb0VsZW1lbnQoKSB8fCBlbHQtPmFmdGVyUHNldWRvRWxlbWVudCgpKSB7CisgICAgICAg
ICAgICByZXR1cm4gdHJ1ZTsKKyAgICAgICAgfQorICAgIH0KKyAgICAKICAgICAvLyBUaGVyZSBp
cyBhIFZpc2libGVQb3NpdGlvbiBpbnNpZGUgYW4gZW1wdHkgaW5saW5lLWJsb2NrIGNvbnRhaW5l
ci4KICAgICByZXR1cm4gbm9kZS0+cmVuZGVyZXIoKS0+aXNSZXBsYWNlZCgpICYmIGNhbkhhdmVD
aGlsZHJlbkZvckVkaXRpbmcobm9kZSkgJiYgdG9SZW5kZXJCb3gobm9kZS0+cmVuZGVyZXIoKSkt
PmhlaWdodCgpICE9IDAgJiYgIW5vZGUtPmZpcnN0Q2hpbGQoKTsKIH0KQEAgLTU1Niw3ICs1NjYs
NyBAQAogICAgICAgICAKICAgICByZXR1cm4gcG9zLmF0U3RhcnRPZk5vZGUoKTsKIH0KLQorICAg
IAogLy8gVGhpcyBmdW5jdGlvbiBhbmQgZG93bnN0cmVhbSgpIGFyZSB1c2VkIGZvciBtb3Zpbmcg
YmFjayBhbmQgZm9ydGggYmV0d2VlbiB2aXN1YWxseSBlcXVpdmFsZW50IGNhbmRpZGF0ZXMuCiAv
LyBGb3IgZXhhbXBsZSwgZm9yIHRoZSB0ZXh0IG5vZGUgImZvbyAgICAgYmFyIiB3aGVyZSB3aGl0
ZXNwYWNlIGlzIGNvbGxhcHNpYmxlLCB0aGVyZSBhcmUgdHdvIGNhbmRpZGF0ZXMgCiAvLyB0aGF0
IG1hcCB0byB0aGUgVmlzaWJsZVBvc2l0aW9uIGJldHdlZW4gJ2InIGFuZCB0aGUgc3BhY2UuICBU
aGlzIGZ1bmN0aW9uIHdpbGwgcmV0dXJuIHRoZSBsZWZ0IGNhbmRpZGF0ZSAKQEAgLTU3MSw4ICs1
ODEsMjcgQEAKICAgICAKICAgICAvLyBpdGVyYXRlIGJhY2t3YXJkIGZyb20gdGhlcmUsIGxvb2tp
bmcgZm9yIGEgcXVhbGlmaWVkIHBvc2l0aW9uCiAgICAgTm9kZSogYm91bmRhcnkgPSBlbmNsb3Np
bmdWaXN1YWxCb3VuZGFyeShzdGFydE5vZGUpOworICAgIAorICAgIC8vIElmIHRoaXMgZnVuY3Rp
b24gY3Jvc3NlcyBhbiB1bnJlbmRlcmVkIG5vZGUgKGUuZy4gd2hpdGVzcGFjZSBiZXR3ZWVuCisg
ICAgLy8gYmxvY2stbGV2ZWwgZWxlbWVudHMgd2hlcmUgc3BhY2UgaXMgY29sbGFwc2VkKSBhbmQg
ZW5kcyB1cCBhdCB0aGUKKyAgICAvLyBiZWdpbm5pbmcgb2YgdGhlIHVucmVuZGVyZWQgd2hpdGVz
cGFjZSBpbW1lZGlhdGVseSBhZnRlciBhCisgICAgLy8gdmFsaWQgY2FuZGlkYXRlIHBvc2l0aW9u
LCB0cmVhdCB0aGUgdmFsaWQgY2FuZGlkYXRlIHBvc2l0aW9uIGFzCisgICAgLy8gdGhlIG5ldyBs
YXN0IHZpc2libGUgcG9zaXRpb24uICBUaGlzIGVuc3VyZXMgdGhhdCB0aGVzZSBib3VuZGFyaWVz
CisgICAgLy8gYXJlIHRyZWF0ZWQgYXMgdmlzdWFsbHkgZXF1aXZhbGVudCBmb3IgdGhlIHB1cnBv
c2VzIG9mIGFycm93CisgICAgLy8gbmF2aWdhdGlvbi4KKyAgICBQb3NpdGlvbiBmaXJzdENhcmV0
SW5zaWRlTm9kZUJlZm9yZU9yaWdpbmFsUG9zaXRpb24gPSBQb3NpdGlvbigpOworICAgIFBvc2l0
aW9uIHByZXZpb3VzVG9SZXR1cm4gPSBQb3NpdGlvbigpOworICAgIAorICAgIGlmIChtX2FuY2hv
clR5cGUgPT0gUG9zaXRpb25Jc09mZnNldEluQW5jaG9yICYmIHRoaXMtPm9mZnNldEluQ29udGFp
bmVyTm9kZSgpID4gMCAmJiAodW5zaWduZWQpdGhpcy0+b2Zmc2V0SW5Db250YWluZXJOb2RlKCkg
PCBzdGFydE5vZGUtPmNoaWxkTm9kZXMoKS0+bGVuZ3RoKCkpIHsKKyAgICAgICAgCisgICAgICAg
IE5vZGUgKmNoaWxkID0gc3RhcnROb2RlLT50cmF2ZXJzZVRvQ2hpbGRBdCh0aGlzLT5vZmZzZXRJ
bkNvbnRhaW5lck5vZGUoKSAtIDEpOworICAgICAgICBwcmV2aW91c1RvUmV0dXJuID0gUG9zaXRp
b24odGhpcy0+YW5jaG9yTm9kZSgpLCB0aGlzLT5vZmZzZXRJbkNvbnRhaW5lck5vZGUoKSAtIDEs
IFBvc2l0aW9uSXNPZmZzZXRJbkFuY2hvcik7CisgICAgICAgIGZpcnN0Q2FyZXRJbnNpZGVOb2Rl
QmVmb3JlT3JpZ2luYWxQb3NpdGlvbiA9IGNyZWF0ZUxlZ2FjeUVkaXRpbmdQb3NpdGlvbihjaGls
ZCwgMCk7CisgICAgfQorCiAgICAgLy8gRklYTUU6IFBvc2l0aW9uSXRlcmF0b3Igc2hvdWxkIHJl
c3BlY3QgQmVmb3JlIGFuZCBBZnRlciBwb3NpdGlvbnMuCiAgICAgUG9zaXRpb25JdGVyYXRvciBs
YXN0VmlzaWJsZSA9IG1fYW5jaG9yVHlwZSA9PSBQb3NpdGlvbklzQWZ0ZXJBbmNob3IgPyBjcmVh
dGVMZWdhY3lFZGl0aW5nUG9zaXRpb24obV9hbmNob3JOb2RlLmdldCgpLCBjYXJldE1heE9mZnNl
dChtX2FuY2hvck5vZGUuZ2V0KCkpKSA6ICp0aGlzOworICAgIAogICAgIFBvc2l0aW9uSXRlcmF0
b3IgY3VycmVudFBvcyA9IGxhc3RWaXNpYmxlOwogICAgIGJvb2wgc3RhcnRFZGl0YWJsZSA9IHN0
YXJ0Tm9kZS0+aGFzRWRpdGFibGVTdHlsZSgpOwogICAgIE5vZGUqIGxhc3ROb2RlID0gc3RhcnRO
b2RlOwpAQCAtNjAwLDkgKzYyOSwxOCBAQAogCiAgICAgICAgIC8vIHNraXAgcG9zaXRpb24gaW4g
dW5yZW5kZXJlZCBvciBpbnZpc2libGUgbm9kZQogICAgICAgICBSZW5kZXJPYmplY3QqIHJlbmRl
cmVyID0gY3VycmVudE5vZGUtPnJlbmRlcmVyKCk7Ci0gICAgICAgIGlmICghcmVuZGVyZXIgfHwg
cmVuZGVyZXItPnN0eWxlKCkudmlzaWJpbGl0eSgpICE9IFZJU0lCTEUpCisgICAgICAgIGlmICgh
cmVuZGVyZXIgfHwgcmVuZGVyZXItPnN0eWxlKCkudmlzaWJpbGl0eSgpICE9IFZJU0lCTEUgfHwK
KyAgICAgICAgICAgICAgICAocmVuZGVyZXItPmlzVGV4dCgpICYmCisgICAgICAgICAgICAgICAg
ICAgKCF0b1JlbmRlclRleHQocmVuZGVyZXIpLT50ZXh0TGVuZ3RoKCkgfHwKKyAgICAgICAgICAg
ICAgICAgICAgIXRvUmVuZGVyVGV4dChyZW5kZXJlciktPmxpbmVzQm91bmRpbmdCb3goKS53aWR0
aCgpKQorICAgICAgICAgICAgICAgICApKSB7CisKKyAgICAgICAgICAgIGlmIChjdXJyZW50UG9z
ID09IGZpcnN0Q2FyZXRJbnNpZGVOb2RlQmVmb3JlT3JpZ2luYWxQb3NpdGlvbikgeworICAgICAg
ICAgICAgICAgIGxhc3RWaXNpYmxlID0gcHJldmlvdXNUb1JldHVybjsKKyAgICAgICAgICAgIH0K
ICAgICAgICAgICAgIGNvbnRpbnVlOwotICAgICAgICAgICAgICAgICAKKyAgICAgICAgfQorICAg
ICAgICAKICAgICAgICAgaWYgKHJ1bGUgPT0gQ2FuQ3Jvc3NFZGl0aW5nQm91bmRhcnkgJiYgYm91
bmRhcnlDcm9zc2VkKSB7CiAgICAgICAgICAgICBsYXN0VmlzaWJsZSA9IGN1cnJlbnRQb3M7CiAg
ICAgICAgICAgICBicmVhazsKQEAgLTY5NSw2ICs3MzMsMjMgQEAKICAgICBOb2RlKiBzdGFydE5v
ZGUgPSBkZXByZWNhdGVkTm9kZSgpOwogICAgIGlmICghc3RhcnROb2RlKQogICAgICAgICByZXR1
cm4gUG9zaXRpb24oKTsKKyAgICAKKyAgICAvLyBJZiB0aGlzIGZ1bmN0aW9uIGNyb3NzZXMgYW4g
dW5yZW5kZXJlZCBub2RlIChlLmcuIHdoaXRlc3BhY2UgYmV0d2VlbgorICAgIC8vIGJsb2NrLWxl
dmVsIGVsZW1lbnRzIHdoZXJlIHNwYWNlIGlzIGNvbGxhcHNlZCkgYW5kIGVuZHMgdXAgYXQgdGhl
CisgICAgLy8gYmVnaW5uaW5nIG9mIHRoZSB1bnJlbmRlcmVkIHdoaXRlc3BhY2UgaW1tZWRpYXRl
bHkgYWZ0ZXIgYQorICAgIC8vIHZhbGlkIGNhbmRpZGF0ZSBwb3NpdGlvbiwgdHJlYXQgdGhlIHZh
bGlkIGNhbmRpZGF0ZSBwb3NpdGlvbiBhcworICAgIC8vIHRoZSBuZXcgbGFzdCB2aXNpYmxlIHBv
c2l0aW9uLiAgVGhpcyBlbnN1cmVzIHRoYXQgdGhlc2UgYm91bmRhcmllcworICAgIC8vIGFyZSB0
cmVhdGVkIGFzIHZpc3VhbGx5IGVxdWl2YWxlbnQgZm9yIHRoZSBwdXJwb3NlcyBvZiBhcnJvdwor
ICAgIC8vIG5hdmlnYXRpb24uCisgICAgUG9zaXRpb24gbGFzdENhcmV0SW5zaWRlTm9kZUF0T3Jp
Z2luYWxQb3NpdGlvbiA9IFBvc2l0aW9uKCk7CisgICAgUG9zaXRpb24gbmV4dFRvUmV0dXJuID0g
UG9zaXRpb24oKTsKKyAgICAKKyAgICBpZiAobV9hbmNob3JUeXBlID09IFBvc2l0aW9uSXNPZmZz
ZXRJbkFuY2hvciAmJiB0aGlzLT5vZmZzZXRJbkNvbnRhaW5lck5vZGUoKSA+PSAwICYmICh1bnNp
Z25lZCl0aGlzLT5vZmZzZXRJbkNvbnRhaW5lck5vZGUoKSA8IHN0YXJ0Tm9kZS0+Y2hpbGROb2Rl
cygpLT5sZW5ndGgoKSkgeworICAgICAgICAKKyAgICAgICAgTm9kZSAqY2hpbGQgPSBzdGFydE5v
ZGUtPnRyYXZlcnNlVG9DaGlsZEF0KHRoaXMtPm9mZnNldEluQ29udGFpbmVyTm9kZSgpKTsKKyAg
ICAgICAgbmV4dFRvUmV0dXJuID0gUG9zaXRpb24odGhpcy0+YW5jaG9yTm9kZSgpLCB0aGlzLT5v
ZmZzZXRJbkNvbnRhaW5lck5vZGUoKSArIDEsIFBvc2l0aW9uSXNPZmZzZXRJbkFuY2hvcik7Cisg
ICAgICAgIGxhc3RDYXJldEluc2lkZU5vZGVBdE9yaWdpbmFsUG9zaXRpb24gPSBjcmVhdGVMZWdh
Y3lFZGl0aW5nUG9zaXRpb24oY2hpbGQsIGNhcmV0TWF4T2Zmc2V0KGNoaWxkKSk7CisgICAgfQog
CiAgICAgLy8gaXRlcmF0ZSBmb3J3YXJkIGZyb20gdGhlcmUsIGxvb2tpbmcgZm9yIGEgcXVhbGlm
aWVkIHBvc2l0aW9uCiAgICAgTm9kZSogYm91bmRhcnkgPSBlbmNsb3NpbmdWaXN1YWxCb3VuZGFy
eShzdGFydE5vZGUpOwpAQCAtNzM3LDkgKzc5MiwxOCBAQAogCiAgICAgICAgIC8vIHNraXAgcG9z
aXRpb24gaW4gdW5yZW5kZXJlZCBvciBpbnZpc2libGUgbm9kZQogICAgICAgICBSZW5kZXJPYmpl
Y3QqIHJlbmRlcmVyID0gY3VycmVudE5vZGUtPnJlbmRlcmVyKCk7Ci0gICAgICAgIGlmICghcmVu
ZGVyZXIgfHwgcmVuZGVyZXItPnN0eWxlKCkudmlzaWJpbGl0eSgpICE9IFZJU0lCTEUpCisgICAg
ICAgIGlmICghcmVuZGVyZXIgfHwgcmVuZGVyZXItPnN0eWxlKCkudmlzaWJpbGl0eSgpICE9IFZJ
U0lCTEUgfHwKKyAgICAgICAgICAgICAgICAocmVuZGVyZXItPmlzVGV4dCgpICYmCisgICAgICAg
ICAgICAgICAgICAgKCF0b1JlbmRlclRleHQocmVuZGVyZXIpLT50ZXh0TGVuZ3RoKCkgfHwKKyAg
ICAgICAgICAgICAgICAgICAgIXRvUmVuZGVyVGV4dChyZW5kZXJlciktPmxpbmVzQm91bmRpbmdC
b3goKS53aWR0aCgpKQorICAgICAgICAgICAgICAgICApKSB7CisgICAgICAgICAgICAKKyAgICAg
ICAgICAgIGlmIChjdXJyZW50UG9zID09IGxhc3RDYXJldEluc2lkZU5vZGVBdE9yaWdpbmFsUG9z
aXRpb24pIHsKKyAgICAgICAgICAgICAgICBsYXN0VmlzaWJsZSA9IG5leHRUb1JldHVybjsKKyAg
ICAgICAgICAgIH0KICAgICAgICAgICAgIGNvbnRpbnVlOwotICAgICAgICAgICAgCisgICAgICAg
IH0KKyAgICAgICAgCiAgICAgICAgIGlmIChydWxlID09IENhbkNyb3NzRWRpdGluZ0JvdW5kYXJ5
ICYmIGJvdW5kYXJ5Q3Jvc3NlZCkgewogICAgICAgICAgICAgbGFzdFZpc2libGUgPSBjdXJyZW50
UG9zOwogICAgICAgICAgICAgYnJlYWs7CkBAIC05MzQsNyArOTk4LDg3IEBACiAKICAgICBpZiAo
bV9hbmNob3JOb2RlLT5oYXNUYWdOYW1lKGh0bWxUYWcpKQogICAgICAgICByZXR1cm4gZmFsc2U7
Ci0gICAgICAgIAorICAgIAorICAgIC8qIElmIHRoZSBwb3NpdGlvbiBpcyBpbiB0aGUgbWlkZGxl
IG9mIGFuIGVsZW1lbnQgdGhhdCBjb250YWlucyBib3RoIGJlZm9yZSBhbmQgYWZ0ZXIKKyAgICAg
ICBwc2V1ZG9lbGVtZW50cywgdGhlbiB0aGUgcG9zaXRpb24gaXMsIGJ5IGRlZmluaXRpb24sIHZp
c3VhbGx5IGRpc3RpbmN0IGZyb20gdGhlCisgICAgICAgcG9zaXRpb24gb24gZWl0aGVyIHNpZGUs
IHNvIGlmIHRoZXJlIGFyZSBubyBjaGlsZCBub2RlcyB0aGF0IHdvdWxkIG90aGVyd2lzZQorICAg
ICAgIGNvbnN0aXR1dGUgYSBjYW5kaWRhdGUgcG9zaXRpb24sIHRyZWF0IHRoZSBpbnRlcmlvciBv
ZiB0aGUgbm9kZSBhcyBhIGNhbmRpZGF0ZS4KKyAgICAgKi8KKyAgICBOb2RlICpub2RlID0gZGVw
cmVjYXRlZE5vZGUoKTsKKyAgICBpZiAobm9kZS0+aXNFbGVtZW50Tm9kZSgpKSB7CisgICAgICAg
IEVsZW1lbnQgKmVsdCA9IGRvd25jYXN0PEVsZW1lbnQ+KG5vZGUpOworICAgICAgICBpZiAoIWVs
dC0+Zmlyc3RDaGlsZCgpKSB7CisgICAgICAgICAgICBpZiAoZWx0LT5iZWZvcmVQc2V1ZG9FbGVt
ZW50KCkgJiYgZWx0LT5hZnRlclBzZXVkb0VsZW1lbnQoKSkgeworICAgICAgICAgICAgICAgIHJl
dHVybiB0cnVlOworICAgICAgICAgICAgfQorICAgICAgICB9IGVsc2UgeworICAgICAgICAgICAg
aWYgKG1fb2Zmc2V0ID49IDApIHsKKyAgICAgICAgICAgICAgICB1bnNpZ25lZCBvZmZzZXQgPSAo
dW5zaWduZWQpbV9vZmZzZXQ7CisgICAgICAgICAgICAgICAgCisgICAgICAgICAgICAgICAgUmVm
UHRyPE5vZGU+IGN1cnJlbnQgPSBlbHQ7CisgICAgICAgICAgICAgICAgTm9kZVZlY3RvciBjaGls
ZHJlbjsKKyAgICAgICAgICAgICAgICBnZXRDaGlsZE5vZGVzKCpjdXJyZW50LCBjaGlsZHJlbik7
CisgICAgICAgICAgICAgICAgTm9kZSAqbGVmdCA9IChvZmZzZXQgPiAwKSA/ICZjaGlsZHJlbi5h
dChvZmZzZXQgLSAxKS5nZXQoKSA6IE5VTEw7CisgICAgICAgICAgICAgICAgTm9kZSAqcmlnaHQg
PSAob2Zmc2V0IDwgY2hpbGRyZW4uc2l6ZSgpKSA/CisgICAgICAgICAgICAgICAgICAgICZjaGls
ZHJlbi5hdChvZmZzZXQpLmdldCgpIDogTlVMTDsKKyAgICAgICAgICAgICAgICAKKyAgICAgICAg
ICAgICAgICBpZiAobGVmdCAmJiBsZWZ0LT5yZW5kZXJlcigpICYmIGxlZnQtPnJlbmRlcmVyKCkt
PmlzVGV4dCgpKSB7CisgICAgICAgICAgICAgICAgICAgIFJlbmRlclRleHQgKnJ0ID0gdG9SZW5k
ZXJUZXh0KGxlZnQtPnJlbmRlcmVyKCkpOworICAgICAgICAgICAgICAgICAgICAKKyAgICAgICAg
ICAgICAgICAgICAgcnQgPSBOVUxMOworICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgICAg
ICAKKyAgICAgICAgICAgICAgICAvKiBEb24ndCBsZXQgbm9uLXJlbmRlcmVkIG9yIGNvbGxhcHNl
ZCB3aGl0ZXNwYWNlIHByZXZlbnQgYW4gaW5zZXJ0aW9uIHBvaW50LiAqLworICAgICAgICAgICAg
ICAgIHdoaWxlIChsZWZ0ICYmICghbGVmdC0+cmVuZGVyZXIoKSB8fAorICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICBsZWZ0LT5yZW5kZXJlcigpLT5zdHlsZSgpLnZpc2liaWxpdHkoKSAh
PSBWSVNJQkxFIHx8CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIChsZWZ0LT5yZW5k
ZXJlcigpLT5pc1RleHQoKSAmJgorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAo
IXRvUmVuZGVyVGV4dChsZWZ0LT5yZW5kZXJlcigpKS0+dGV4dExlbmd0aCgpIHx8CisgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAhdG9SZW5kZXJUZXh0KGxlZnQtPnJlbmRlcmVy
KCkpLT5saW5lc0JvdW5kaW5nQm94KCkud2lkdGgoKSkKKyAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICkpKSB7CisgICAgICAgICAgICAgICAgICAgIGxlZnQgPSBsZWZ0LT5wcmV2aW91
c1NpYmxpbmcoKTsKKyAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICAgICAgd2hpbGUgKHJp
Z2h0ICYmICghcmlnaHQtPnJlbmRlcmVyKCkgfHwKKyAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgIHJpZ2h0LT5yZW5kZXJlcigpLT5zdHlsZSgpLnZpc2liaWxpdHkoKSAhPSBWSVNJQkxF
IHx8CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAocmlnaHQtPnJlbmRlcmVyKCkt
PmlzVGV4dCgpICYmCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoIXRvUmVu
ZGVyVGV4dChyaWdodC0+cmVuZGVyZXIoKSktPnRleHRMZW5ndGgoKSB8fAorICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICF0b1JlbmRlclRleHQocmlnaHQtPnJlbmRlcmVyKCkp
LT5saW5lc0JvdW5kaW5nQm94KCkud2lkdGgoKSkKKyAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICApKSkgeworICAgICAgICAgICAgICAgICAgICByaWdodCA9IHJpZ2h0LT5uZXh0U2li
bGluZygpOworICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgICAgICAKKyAgICAgICAgICAg
ICAgICAvKiBJZiBsZWZ0IGV4aXN0cyBhbmQgaXMgYSB0ZXh0IG5vZGUsIG5vdCBhIGNhbmRpZGF0
ZS4KKyAgICAgICAgICAgICAgICAgICBJZiBsZWZ0IGV4aXN0cyBhbmQgaXMgYW4gZWxlbWVudCBu
b2RlLCBpcyBhIGNhbmRpZGF0ZSBvbmx5CisgICAgICAgICAgICAgICAgICAgICAgIGlmIGxlZnQg
aGFzIGFuIDo6YWZ0ZXIgcHNldWRvZWxlbWVudC4KKyAgICAgICAgICAgICAgICAgICBJZiBsZWZ0
IGRvZXMgbm90IGV4aXN0LCBpcyBhIGNhbmRpZGF0ZSBvbmx5IGlmIHBhcmVudCBoYXMKKyAgICAg
ICAgICAgICAgICAgICAgICAgYSA6OmJlZm9yZSBwc2V1ZG9lbGVtZW50LgorICAgICAgICAgICAg
ICAgICAqLworICAgICAgICAgICAgICAgIGJvb2wgbGVmdEhhc1BzZXVkb0VsZW1lbnRBdEVuZCA9
IGZhbHNlOworICAgICAgICAgICAgICAgIGlmIChsZWZ0ICYmIGxlZnQtPmlzRWxlbWVudE5vZGUo
KSkgeworICAgICAgICAgICAgICAgICAgICBFbGVtZW50ICpsZWZ0RWxlbWVudCA9IGRvd25jYXN0
PEVsZW1lbnQ+KGxlZnQpOworICAgICAgICAgICAgICAgICAgICBsZWZ0SGFzUHNldWRvRWxlbWVu
dEF0RW5kID0gbGVmdEVsZW1lbnQtPmFmdGVyUHNldWRvRWxlbWVudCgpOworICAgICAgICAgICAg
ICAgIH0gZWxzZSBpZiAoIWxlZnQpIHsKKyAgICAgICAgICAgICAgICAgICAgbGVmdEhhc1BzZXVk
b0VsZW1lbnRBdEVuZCA9IGVsdC0+YmVmb3JlUHNldWRvRWxlbWVudCgpOworICAgICAgICAgICAg
ICAgIH0KKyAgICAgICAgICAgICAgICAKKyAgICAgICAgICAgICAgICAvKiBJZiByaWdodCBleGlz
dHMgYW5kIGlzIGEgdGV4dCBub2RlLCBub3QgYSBjYW5kaWRhdGUuCisgICAgICAgICAgICAgICAg
ICAgSWYgcmlnaHQgZXhpc3RzIGFuZCBpcyBhbiBlbGVtZW50IG5vZGUsIGlzIGEgY2FuZGlkYXRl
IG9ubHkKKyAgICAgICAgICAgICAgICAgICAgICAgaWYgcmlnaHQgaGFzIGEgOjpiZWZvcmUgcHNl
dWRvZWxlbWVudC4KKyAgICAgICAgICAgICAgICAgICBJZiByaWdodCBkb2VzIG5vdCBleGlzdCwg
aXMgYSBjYW5kaWRhdGUgb25seSBpZiBwYXJlbnQgaGFzCisgICAgICAgICAgICAgICAgICAgICAg
IGFuIDo6YWZ0ZXIgcHNldWRvZWxlbWVudC4KKyAgICAgICAgICAgICAgICAgKi8KKyAgICAgICAg
ICAgICAgICBib29sIHJpZ2h0SGFzUHNldWRvRWxlbWVudEF0QmVnaW5uaW5nID0gZmFsc2U7Cisg
ICAgICAgICAgICAgICAgaWYgKHJpZ2h0ICYmIHJpZ2h0LT5pc0VsZW1lbnROb2RlKCkpIHsKKyAg
ICAgICAgICAgICAgICAgICAgRWxlbWVudCAqcmlnaHRFbGVtZW50ID0gZG93bmNhc3Q8RWxlbWVu
dD4ocmlnaHQpOworICAgICAgICAgICAgICAgICAgICByaWdodEhhc1BzZXVkb0VsZW1lbnRBdEJl
Z2lubmluZyA9IHJpZ2h0RWxlbWVudC0+YmVmb3JlUHNldWRvRWxlbWVudCgpOworICAgICAgICAg
ICAgICAgIH0gZWxzZSBpZiAoIXJpZ2h0KSB7CisgICAgICAgICAgICAgICAgICAgIHJpZ2h0SGFz
UHNldWRvRWxlbWVudEF0QmVnaW5uaW5nID0gZWx0LT5hZnRlclBzZXVkb0VsZW1lbnQoKTsKKyAg
ICAgICAgICAgICAgICB9CisgICAgICAgICAgICAgICAgCisgICAgICAgICAgICAgICAgaWYgKGxl
ZnRIYXNQc2V1ZG9FbGVtZW50QXRFbmQgJiYgcmlnaHRIYXNQc2V1ZG9FbGVtZW50QXRCZWdpbm5p
bmcpIHJldHVybiB0cnVlOworICAgICAgICAgICAgfQorICAgICAgICB9CisgICAgfQorICAgIAog
ICAgIGlmIChyZW5kZXJlci0+aXNSZW5kZXJCbG9ja0Zsb3coKSkgewogICAgICAgICBSZW5kZXJC
bG9ja0Zsb3cmIGJsb2NrID0gdG9SZW5kZXJCbG9ja0Zsb3coKnJlbmRlcmVyKTsKICAgICAgICAg
aWYgKGJsb2NrLmxvZ2ljYWxIZWlnaHQoKSB8fCBtX2FuY2hvck5vZGUtPmhhc1RhZ05hbWUoYm9k
eVRhZykpIHsKQEAgLTExMTUsNiArMTI1OSw4IEBACiAgICAgICAgICAgICByZXR1cm4gMDsKICAg
ICAgICAgaWYgKGlzTm9uVGV4dExlYWZDaGlsZChuZXh0KSkKICAgICAgICAgICAgIHJldHVybiAw
OworICAgICAgICBpZiAobmV4dC0+aXNQc2V1ZG9FbGVtZW50KCkpCisgICAgICAgICAgICByZXR1
cm4gMDsKICAgICAgICAgaWYgKG5leHQtPmlzVGV4dCgpKSB7CiAgICAgICAgICAgICBJbmxpbmVU
ZXh0Qm94KiBtYXRjaCA9IDA7CiAgICAgICAgICAgICBpbnQgbWluT2Zmc2V0ID0gSU5UX01BWDsK
QEAgLTExNTcsNiArMTMwMywxMiBAQAogICAgIGNhcmV0T2Zmc2V0ID0gZGVwcmVjYXRlZEVkaXRp
bmdPZmZzZXQoKTsKICAgICBSZW5kZXJPYmplY3QqIHJlbmRlcmVyID0gZGVwcmVjYXRlZE5vZGUo
KS0+cmVuZGVyZXIoKTsKIAorICAgIHJldHVybiBnZXRJbmxpbmVCb3hBbmRPZmZzZXQoYWZmaW5p
dHksIHByaW1hcnlEaXJlY3Rpb24sIGlubGluZUJveCwgY2FyZXRPZmZzZXQsIHJlbmRlcmVyKTsK
K30KKyAgICAKK3ZvaWQgUG9zaXRpb246OmdldElubGluZUJveEFuZE9mZnNldChFQWZmaW5pdHkg
YWZmaW5pdHksIFRleHREaXJlY3Rpb24gcHJpbWFyeURpcmVjdGlvbiwgSW5saW5lQm94KiYgaW5s
aW5lQm94LCBpbnQmIGNhcmV0T2Zmc2V0LCBSZW5kZXJPYmplY3QqIHJlbmRlcmVyKSBjb25zdAor
eworICAgIAogICAgIGlmIChyZW5kZXJlci0+aXNCUigpKQogICAgICAgICBpbmxpbmVCb3ggPSAh
Y2FyZXRPZmZzZXQgPyB0b1JlbmRlckxpbmVCcmVhayhyZW5kZXJlciktPmlubGluZUJveFdyYXBw
ZXIoKSA6IG51bGxwdHI7CiAgICAgZWxzZSBpZiAocmVuZGVyZXItPmlzVGV4dCgpKSB7CkluZGV4
OiBTb3VyY2UvV2ViQ29yZS9kb20vUG9zaXRpb24uaAo9PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2Vi
Q29yZS9kb20vUG9zaXRpb24uaAkocmV2aXNpb24gMTc0MzI0KQorKysgU291cmNlL1dlYkNvcmUv
ZG9tL1Bvc2l0aW9uLmgJKHdvcmtpbmcgY29weSkKQEAgLTE4Myw2ICsxODMsNyBAQAogCiAgICAg
dm9pZCBnZXRJbmxpbmVCb3hBbmRPZmZzZXQoRUFmZmluaXR5LCBJbmxpbmVCb3gqJiwgaW50JiBj
YXJldE9mZnNldCkgY29uc3Q7CiAgICAgdm9pZCBnZXRJbmxpbmVCb3hBbmRPZmZzZXQoRUFmZmlu
aXR5LCBUZXh0RGlyZWN0aW9uIHByaW1hcnlEaXJlY3Rpb24sIElubGluZUJveComLCBpbnQmIGNh
cmV0T2Zmc2V0KSBjb25zdDsKKyAgICB2b2lkIGdldElubGluZUJveEFuZE9mZnNldChFQWZmaW5p
dHkgYWZmaW5pdHksIFRleHREaXJlY3Rpb24gcHJpbWFyeURpcmVjdGlvbiwgSW5saW5lQm94KiYg
aW5saW5lQm94LCBpbnQmIGNhcmV0T2Zmc2V0LCBSZW5kZXJPYmplY3QqIHJlbmRlcmVyKSBjb25z
dDsKIAogICAgIFRleHREaXJlY3Rpb24gcHJpbWFyeURpcmVjdGlvbigpIGNvbnN0OwogCkluZGV4
OiBTb3VyY2UvV2ViQ29yZS9lZGl0aW5nL0VkaXRvci5jcHAKPT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNl
L1dlYkNvcmUvZWRpdGluZy9FZGl0b3IuY3BwCShyZXZpc2lvbiAxNzQzMjQpCisrKyBTb3VyY2Uv
V2ViQ29yZS9lZGl0aW5nL0VkaXRvci5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTE4NjUsNyArMTg2
NSw3IEBACiAgICAgICAgICAgICB1bnNpZ25lZCBzdGFydCA9IHN0ZDo6bWluKGJhc2VPZmZzZXQg
KyBzZWxlY3Rpb25TdGFydCwgZXh0ZW50T2Zmc2V0KTsKICAgICAgICAgICAgIHVuc2lnbmVkIGVu
ZCA9IHN0ZDo6bWluKHN0ZDo6bWF4KHN0YXJ0LCBiYXNlT2Zmc2V0ICsgc2VsZWN0aW9uRW5kKSwg
ZXh0ZW50T2Zmc2V0KTsKICAgICAgICAgICAgIFJlZlB0cjxSYW5nZT4gc2VsZWN0ZWRSYW5nZSA9
IFJhbmdlOjpjcmVhdGUoYmFzZU5vZGUtPmRvY3VtZW50KCksIGJhc2VOb2RlLCBzdGFydCwgYmFz
ZU5vZGUsIGVuZCk7Ci0gICAgICAgICAgICBtX2ZyYW1lLnNlbGVjdGlvbigpLnNldFNlbGVjdGVk
UmFuZ2Uoc2VsZWN0ZWRSYW5nZS5nZXQoKSwgRE9XTlNUUkVBTSwgZmFsc2UpOworICAgICAgICAg
ICAgbV9mcmFtZS5zZWxlY3Rpb24oKS5zZXRTZWxlY3RlZFJhbmdlKHNlbGVjdGVkUmFuZ2UuZ2V0
KCksIERPV05TVFJFQU0sIGZhbHNlLCBmYWxzZSk7CiAgICAgICAgIH0KICAgICB9CiAKSW5kZXg6
IFNvdXJjZS9XZWJDb3JlL2VkaXRpbmcvRWRpdG9yQ29tbWFuZC5jcHAKPT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0g
U291cmNlL1dlYkNvcmUvZWRpdGluZy9FZGl0b3JDb21tYW5kLmNwcAkocmV2aXNpb24gMTc0MzI0
KQorKysgU291cmNlL1dlYkNvcmUvZWRpdGluZy9FZGl0b3JDb21tYW5kLmNwcAkod29ya2luZyBj
b3B5KQpAQCAtMjE5LDcgKzIxOSw3IEBACiAgICAgRUFmZmluaXR5IGFmZmluaXR5ID0gc2VsZWN0
aW9uLmFmZmluaXR5KCk7CiAgICAgaWYgKCFmcmFtZS5lZGl0b3IoKS5jbGllbnQoKS0+c2hvdWxk
Q2hhbmdlU2VsZWN0ZWRSYW5nZShvbGRSYW5nZS5nZXQoKSwgbmV3UmFuZ2UuZ2V0KCksIGFmZmlu
aXR5LCBmYWxzZSkpCiAgICAgICAgIHJldHVybiBmYWxzZTsKLSAgICBmcmFtZS5zZWxlY3Rpb24o
KS5zZXRTZWxlY3RlZFJhbmdlKG5ld1JhbmdlLmdldCgpLCBhZmZpbml0eSwgdHJ1ZSk7CisgICAg
ZnJhbWUuc2VsZWN0aW9uKCkuc2V0U2VsZWN0ZWRSYW5nZShuZXdSYW5nZS5nZXQoKSwgYWZmaW5p
dHksIGZhbHNlLCBGcmFtZVNlbGVjdGlvbjo6Q2xvc2VUeXBpbmcpOwogICAgIHJldHVybiB0cnVl
OwogfQogCkBAIC0zOTAsNyArMzkwLDcgQEAKICAgICBSZWZQdHI8UmFuZ2U+IG1hcmsgPSBmcmFt
ZS5lZGl0b3IoKS5tYXJrKCkudG9Ob3JtYWxpemVkUmFuZ2UoKTsKICAgICBGcmFtZVNlbGVjdGlv
biYgc2VsZWN0aW9uID0gZnJhbWUuc2VsZWN0aW9uKCk7CiAgICAgaWYgKG1hcmspIHsKLSAgICAg
ICAgYm9vbCBzZWxlY3RlZCA9IHNlbGVjdGlvbi5zZXRTZWxlY3RlZFJhbmdlKHVuaW9uRE9NUmFu
Z2VzKG1hcmsuZ2V0KCksIGZyYW1lLmVkaXRvcigpLnNlbGVjdGVkUmFuZ2UoKS5nZXQoKSkuZ2V0
KCksIERPV05TVFJFQU0sIHRydWUpOworCWJvb2wgc2VsZWN0ZWQgPSBmcmFtZS5zZWxlY3Rpb24o
KS5zZXRTZWxlY3RlZFJhbmdlKHVuaW9uRE9NUmFuZ2VzKG1hcmsuZ2V0KCksIGZyYW1lLmVkaXRv
cigpLnNlbGVjdGVkUmFuZ2UoKS5nZXQoKSkuZ2V0KCksIERPV05TVFJFQU0sIGZhbHNlLCBGcmFt
ZVNlbGVjdGlvbjo6Q2xvc2VUeXBpbmcpOwogICAgICAgICBBU1NFUlQoc2VsZWN0ZWQpOwogICAg
ICAgICBpZiAoIXNlbGVjdGVkKQogICAgICAgICAgICAgcmV0dXJuIGZhbHNlOwpAQCAtMTA0Myw3
ICsxMDQzLDggQEAKICAgICAgICAgc3lzdGVtQmVlcCgpOwogICAgICAgICByZXR1cm4gZmFsc2U7
CiAgICAgfQotICAgIGZyYW1lLnNlbGVjdGlvbigpLnNldFNlbGVjdGVkUmFuZ2UodW5pb25ET01S
YW5nZXMobWFyay5nZXQoKSwgc2VsZWN0aW9uLmdldCgpKS5nZXQoKSwgRE9XTlNUUkVBTSwgdHJ1
ZSk7CisgICAgZnJhbWUuc2VsZWN0aW9uKCkuc2V0U2VsZWN0ZWRSYW5nZSh1bmlvbkRPTVJhbmdl
cyhtYXJrLmdldCgpLCBzZWxlY3Rpb24uZ2V0KCkpLmdldCgpLCBET1dOU1RSRUFNLCBmYWxzZSwg
RnJhbWVTZWxlY3Rpb246OkNsb3NlVHlwaW5nKTsKKwogICAgIHJldHVybiB0cnVlOwogfQogCklu
ZGV4OiBTb3VyY2UvV2ViQ29yZS9lZGl0aW5nL0ZyYW1lU2VsZWN0aW9uLmNwcAo9PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
Ci0tLSBTb3VyY2UvV2ViQ29yZS9lZGl0aW5nL0ZyYW1lU2VsZWN0aW9uLmNwcAkocmV2aXNpb24g
MTc0MzI0KQorKysgU291cmNlL1dlYkNvcmUvZWRpdGluZy9GcmFtZVNlbGVjdGlvbi5jcHAJKHdv
cmtpbmcgY29weSkKQEAgLTExMCw2ICsxMTAsNyBAQAogRnJhbWVTZWxlY3Rpb246OkZyYW1lU2Vs
ZWN0aW9uKEZyYW1lKiBmcmFtZSkKICAgICA6IG1fZnJhbWUoZnJhbWUpCiAgICAgLCBtX3hQb3NG
b3JWZXJ0aWNhbEFycm93TmF2aWdhdGlvbihOb1hQb3NGb3JWZXJ0aWNhbEFycm93TmF2aWdhdGlv
bigpKQorICAgICwgbV9vYnNlcnZpbmdWaXNpYmxlU2VsZWN0aW9uKGZhbHNlKQogICAgICwgbV9n
cmFudWxhcml0eShDaGFyYWN0ZXJHcmFudWxhcml0eSkKICAgICAsIG1fY2FyZXRCbGlua1RpbWVy
KHRoaXMsICZGcmFtZVNlbGVjdGlvbjo6Y2FyZXRCbGlua1RpbWVyRmlyZWQpCiAgICAgLCBtX2Fi
c0NhcmV0Qm91bmRzRGlydHkodHJ1ZSkKQEAgLTEzMCw2ICsxMzEsMTEgQEAKICAgICAgICAgbV9z
ZWxlY3Rpb24uc2V0SXNEaXJlY3Rpb25hbCh0cnVlKTsKIH0KIAorRnJhbWVTZWxlY3Rpb246On5G
cmFtZVNlbGVjdGlvbigpCit7CisgICAgc3RvcE9ic2VydmluZ1Zpc2libGVTZWxlY3Rpb25DaGFu
Z2VJZk5lY2Vzc2FyeSgpOworfQorCiBFbGVtZW50KiBGcmFtZVNlbGVjdGlvbjo6cm9vdEVkaXRh
YmxlRWxlbWVudE9yRG9jdW1lbnRFbGVtZW50KCkgY29uc3QKIHsKICAgICBFbGVtZW50KiBzZWxl
Y3Rpb25Sb290ID0gbV9zZWxlY3Rpb24ucm9vdEVkaXRhYmxlRWxlbWVudCgpOwpAQCAtMTcxMywy
NCArMTcxOSw0MyBAQAogICAgICAgICBzZXRTZWxlY3Rpb24obmV3U2VsZWN0aW9uLCBkZWZhdWx0
U2V0U2VsZWN0aW9uT3B0aW9ucygpIHwgRmlyZVNlbGVjdEV2ZW50KTsKIH0KIAotYm9vbCBGcmFt
ZVNlbGVjdGlvbjo6c2V0U2VsZWN0ZWRSYW5nZShSYW5nZSogcmFuZ2UsIEVBZmZpbml0eSBhZmZp
bml0eSwgYm9vbCBjbG9zZVR5cGluZykKK2Jvb2wgRnJhbWVTZWxlY3Rpb246OnNldFNlbGVjdGVk
UmFuZ2UoUmFuZ2UqIHJhbmdlLCBFQWZmaW5pdHkgYWZmaW5pdHksIGJvb2wgaXNEaXJlY3Rpb25h
bCwgU2V0U2VsZWN0aW9uT3B0aW9ucyBvcHRpb25zKQogewogICAgIGlmICghcmFuZ2UgfHwgIXJh
bmdlLT5zdGFydENvbnRhaW5lcigpIHx8ICFyYW5nZS0+ZW5kQ29udGFpbmVyKCkpCiAgICAgICAg
IHJldHVybiBmYWxzZTsKICAgICBBU1NFUlQoJnJhbmdlLT5zdGFydENvbnRhaW5lcigpLT5kb2N1
bWVudCgpID09ICZyYW5nZS0+ZW5kQ29udGFpbmVyKCktPmRvY3VtZW50KCkpOwogCi0gICAgVmlz
aWJsZVNlbGVjdGlvbiBuZXdTZWxlY3Rpb24ocmFuZ2UsIGFmZmluaXR5KTsKKyAgICBFeGNlcHRp
b25Db2RlIGVjID0gMDsKKyAgICBib29sIGNvbGxhcHNlZCA9IHJhbmdlLT5jb2xsYXBzZWQoZWMp
OworICAgIGlmIChlYykKKyAgICAgICAgcmV0dXJuIGZhbHNlOwogCisgICAgVmlzaWJsZVNlbGVj
dGlvbiBuZXdTZWxlY3Rpb24ocmFuZ2UsIGNvbGxhcHNlZCA/IGFmZmluaXR5IDogRE9XTlNUUkVB
TSwgaXNEaXJlY3Rpb25hbCk7CisKICNpZiBQTEFURk9STShJT1MpCiAgICAgLy8gRklYTUU6IFdo
eSBkbyB3ZSBuZWVkIHRoaXMgY2hlY2sgb25seSBpbiBpT1M/CiAgICAgaWYgKHJhbmdlLT5zdGFy
dENvbnRhaW5lcigpICYmIHJhbmdlLT5lbmRDb250YWluZXIoKSAmJiBuZXdTZWxlY3Rpb24uaXNO
b25lKCkpCiAgICAgICAgIHJldHVybiBmYWxzZTsKICNlbmRpZgogCi0gICAgc2V0U2VsZWN0aW9u
KG5ld1NlbGVjdGlvbiwgQ2xlYXJUeXBpbmdTdHlsZSB8IChjbG9zZVR5cGluZyA/IENsb3NlVHlw
aW5nIDogMCkpOworICAgIG1fbG9naWNhbFJhbmdlID0gbnVsbHB0cjsKKyAgICBzdG9wT2JzZXJ2
aW5nVmlzaWJsZVNlbGVjdGlvbkNoYW5nZUlmTmVjZXNzYXJ5KCk7CisKKyAgICBzZXRTZWxlY3Rp
b24obmV3U2VsZWN0aW9uLCBvcHRpb25zKTsKKworICAgIG1fbG9naWNhbFJhbmdlID0gcmFuZ2Ut
PmNsb25lUmFuZ2UoQVNTRVJUX05PX0VYQ0VQVElPTik7CisgICAgc3RhcnRPYnNlcnZpbmdWaXNp
YmxlU2VsZWN0aW9uQ2hhbmdlKCk7CisKICAgICByZXR1cm4gdHJ1ZTsKIH0KIAorUGFzc1JlZlB0
cjxSYW5nZT4gRnJhbWVTZWxlY3Rpb246OmZpcnN0UmFuZ2UoKSBjb25zdAoreworICAgIGlmICht
X2xvZ2ljYWxSYW5nZSkKKyAgICAgICAgcmV0dXJuIG1fbG9naWNhbFJhbmdlLT5jbG9uZVJhbmdl
KEFTU0VSVF9OT19FWENFUFRJT04pOworICAgIHJldHVybiBtX3NlbGVjdGlvbi5maXJzdFJhbmdl
KCk7Cit9CisKIHZvaWQgRnJhbWVTZWxlY3Rpb246OmZvY3VzZWRPckFjdGl2ZVN0YXRlQ2hhbmdl
ZCgpCiB7CiAgICAgYm9vbCBhY3RpdmVBbmRGb2N1c2VkID0gaXNGb2N1c2VkQW5kQWN0aXZlKCk7
CkBAIC0yMTUxLDYgKzIxNzYsMzAgQEAKICAgICB1cGRhdGVEYXRhRGV0ZWN0b3JzRm9yU2VsZWN0
aW9uKCk7CiB9CiAKK3ZvaWQgRnJhbWVTZWxlY3Rpb246OmRpZENoYW5nZVZpc2libGVTZWxlY3Rp
b24oKQoreworICAgIEFTU0VSVChtX29ic2VydmluZ1Zpc2libGVTZWxlY3Rpb24pOworICAgIC8v
IEludmFsaWRhdGUgdGhlIGxvZ2ljYWwgcmFuZ2Ugd2hlbiB0aGUgdW5kZXJseWluZyBWaXNpYmxl
U2VsZWN0aW9uIGhhcyBjaGFuZ2VkLgorICAgIG1fbG9naWNhbFJhbmdlID0gbnVsbHB0cjsKKyAg
ICBtX3NlbGVjdGlvbi5jbGVhckNoYW5nZU9ic2VydmVyKCk7CisgICAgbV9vYnNlcnZpbmdWaXNp
YmxlU2VsZWN0aW9uID0gZmFsc2U7Cit9CisKK3ZvaWQgRnJhbWVTZWxlY3Rpb246OnN0YXJ0T2Jz
ZXJ2aW5nVmlzaWJsZVNlbGVjdGlvbkNoYW5nZSgpCit7CisgICAgQVNTRVJUKCFtX29ic2Vydmlu
Z1Zpc2libGVTZWxlY3Rpb24pOworICAgIG1fc2VsZWN0aW9uLnNldENoYW5nZU9ic2VydmVyKCp0
aGlzKTsKKyAgICBtX29ic2VydmluZ1Zpc2libGVTZWxlY3Rpb24gPSB0cnVlOworfQorCit2b2lk
IEZyYW1lU2VsZWN0aW9uOjpzdG9wT2JzZXJ2aW5nVmlzaWJsZVNlbGVjdGlvbkNoYW5nZUlmTmVj
ZXNzYXJ5KCkKK3sKKyAgICBpZiAobV9vYnNlcnZpbmdWaXNpYmxlU2VsZWN0aW9uKSB7CisgICAg
ICAgIG1fc2VsZWN0aW9uLmNsZWFyQ2hhbmdlT2JzZXJ2ZXIoKTsKKyAgICAgICAgbV9vYnNlcnZp
bmdWaXNpYmxlU2VsZWN0aW9uID0gZmFsc2U7CisgICAgfQorfQorCiAjaWZuZGVmIE5ERUJVRwog
CiB2b2lkIEZyYW1lU2VsZWN0aW9uOjpmb3JtYXRGb3JEZWJ1Z2dlcihjaGFyKiBidWZmZXIsIHVu
c2lnbmVkIGxlbmd0aCkgY29uc3QKSW5kZXg6IFNvdXJjZS9XZWJDb3JlL2VkaXRpbmcvRnJhbWVT
ZWxlY3Rpb24uaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9lZGl0aW5nL0ZyYW1lU2Vs
ZWN0aW9uLmgJKHJldmlzaW9uIDE3NDMyNCkKKysrIFNvdXJjZS9XZWJDb3JlL2VkaXRpbmcvRnJh
bWVTZWxlY3Rpb24uaAkod29ya2luZyBjb3B5KQpAQCAtMTA5LDcgKzEwOSw3IEBACiAgICAgVmlz
aWJsZVBvc2l0aW9uIG1fcG9zaXRpb247CiB9OwogCi1jbGFzcyBGcmFtZVNlbGVjdGlvbiA6IHBy
aXZhdGUgQ2FyZXRCYXNlIHsKK2NsYXNzIEZyYW1lU2VsZWN0aW9uIC8qIEZJTkFMICovIDogcHVi
bGljIFZpc2libGVTZWxlY3Rpb246OkNoYW5nZU9ic2VydmVyLCBwcml2YXRlIENhcmV0QmFzZSB7
CiAgICAgV1RGX01BS0VfTk9OQ09QWUFCTEUoRnJhbWVTZWxlY3Rpb24pOwogICAgIFdURl9NQUtF
X0ZBU1RfQUxMT0NBVEVEOwogcHVibGljOgpAQCAtMTMyLDYgKzEzMiw3IEBACiAgICAgfQogCiAg
ICAgV0VCQ09SRV9FWFBPUlQgZXhwbGljaXQgRnJhbWVTZWxlY3Rpb24oRnJhbWUqID0gbnVsbHB0
cik7CisgICAgV0VCQ09SRV9FWFBPUlQgdmlydHVhbCB+RnJhbWVTZWxlY3Rpb24oKTsKIAogICAg
IFdFQkNPUkVfRVhQT1JUIEVsZW1lbnQqIHJvb3RFZGl0YWJsZUVsZW1lbnRPckRvY3VtZW50RWxl
bWVudCgpIGNvbnN0OwogICAgICAKQEAgLTE0NCw3ICsxNDUsOSBAQAogCiAgICAgY29uc3QgVmlz
aWJsZVNlbGVjdGlvbiYgc2VsZWN0aW9uKCkgY29uc3QgeyByZXR1cm4gbV9zZWxlY3Rpb247IH0K
ICAgICBXRUJDT1JFX0VYUE9SVCB2b2lkIHNldFNlbGVjdGlvbihjb25zdCBWaXNpYmxlU2VsZWN0
aW9uJiwgU2V0U2VsZWN0aW9uT3B0aW9ucyA9IGRlZmF1bHRTZXRTZWxlY3Rpb25PcHRpb25zKCks
IEN1cnNvckFsaWduT25TY3JvbGwgPSBBbGlnbkN1cnNvck9uU2Nyb2xsSWZOZWVkZWQsIFRleHRH
cmFudWxhcml0eSA9IENoYXJhY3RlckdyYW51bGFyaXR5KTsKLSAgICBXRUJDT1JFX0VYUE9SVCBi
b29sIHNldFNlbGVjdGVkUmFuZ2UoUmFuZ2UqLCBFQWZmaW5pdHksIGJvb2wgY2xvc2VUeXBpbmcp
OworICAgIAorICAgIFdFQkNPUkVfRVhQT1JUIGJvb2wgc2V0U2VsZWN0ZWRSYW5nZShSYW5nZSos
IEVBZmZpbml0eSwgYm9vbCBpc0RpcmVjdGlvbmFsLCBTZXRTZWxlY3Rpb25PcHRpb25zID0gQ2xv
c2VUeXBpbmcgfCBDbGVhclR5cGluZ1N0eWxlKTsKKyAgICAKICAgICBXRUJDT1JFX0VYUE9SVCB2
b2lkIHNlbGVjdEFsbCgpOwogICAgIFdFQkNPUkVfRVhQT1JUIHZvaWQgY2xlYXIoKTsKICAgICB2
b2lkIHByZXBhcmVGb3JEZXN0cnVjdGlvbigpOwpAQCAtMTgyLDcgKzE4NSwxMiBAQAogICAgIGJv
b2wgaXNSYW5nZSgpIGNvbnN0IHsgcmV0dXJuIG1fc2VsZWN0aW9uLmlzUmFuZ2UoKTsgfQogICAg
IGJvb2wgaXNDYXJldE9yUmFuZ2UoKSBjb25zdCB7IHJldHVybiBtX3NlbGVjdGlvbi5pc0NhcmV0
T3JSYW5nZSgpOyB9CiAgICAgYm9vbCBpc0FsbChFZGl0aW5nQm91bmRhcnlDcm9zc2luZ1J1bGUg
cnVsZSA9IENhbm5vdENyb3NzRWRpdGluZ0JvdW5kYXJ5KSBjb25zdCB7IHJldHVybiBtX3NlbGVj
dGlvbi5pc0FsbChydWxlKTsgfQorICAgIGJvb2wgaXNEaXJlY3Rpb25hbCgpIGNvbnN0IHsgcmV0
dXJuIG1fc2VsZWN0aW9uLmlzRGlyZWN0aW9uYWwoKTsgfQogICAgIAorICAgIC8vIElmIHRoaXMg
RnJhbWVTZWxlY3Rpb24gaGFzIGEgbG9naWNhbCByYW5nZSB3aGljaCBpcyBzdGlsbCB2YWxpZCwg
dGhpcyBmdW5jdGlvbiByZXR1cm4gaXRzIGNsb25lLiBPdGhlcndpc2UsCisgICAgLy8gdGhlIHJl
dHVybiB2YWx1ZSBmcm9tIHVuZGVybHlpbmcgVmlzaWJsZVNlbGVjdGlvbidzIGZpcnN0UmFuZ2Uo
KSBpcyByZXR1cm5lZC4KKyAgICBQYXNzUmVmUHRyPFJhbmdlPiBmaXJzdFJhbmdlKCkgY29uc3Q7
CisKICAgICBQYXNzUmVmUHRyPFJhbmdlPiB0b05vcm1hbGl6ZWRSYW5nZSgpIGNvbnN0IHsgcmV0
dXJuIG1fc2VsZWN0aW9uLnRvTm9ybWFsaXplZFJhbmdlKCk7IH0KIAogICAgIHZvaWQgZGVidWdS
ZW5kZXJlcihSZW5kZXJPYmplY3QqLCBib29sIHNlbGVjdGVkKSBjb25zdDsKQEAgLTI2OCw2ICsy
NzYsOSBAQAogICAgIGJvb2wgc2hvdWxkU2hvd0Jsb2NrQ3Vyc29yKCkgY29uc3QgeyByZXR1cm4g
bV9zaG91bGRTaG93QmxvY2tDdXJzb3I7IH0KICAgICB2b2lkIHNldFNob3VsZFNob3dCbG9ja0N1
cnNvcihib29sKTsKIAorICAgIC8vIFZpc2libGVTZWxlY3Rpb246OkNoYW5nZU9ic2VydmVyIGlu
dGVyZmFjZS4KKyAgICB2aXJ0dWFsIHZvaWQgZGlkQ2hhbmdlVmlzaWJsZVNlbGVjdGlvbigpIC8q
IE9WRVJSSURFICovIDsKKwogcHJpdmF0ZToKICAgICBlbnVtIEVQb3NpdGlvblR5cGUgeyBTVEFS
VCwgRU5ELCBCQVNFLCBFWFRFTlQgfTsKIApAQCAtMzE3LDE0ICszMjgsMjMgQEAKIAogICAgIGJv
b2wgZGlzcGF0Y2hTZWxlY3RTdGFydCgpOwogCisgICAgdm9pZCBzdGFydE9ic2VydmluZ1Zpc2li
bGVTZWxlY3Rpb25DaGFuZ2UoKTsKKyAgICB2b2lkIHN0b3BPYnNlcnZpbmdWaXNpYmxlU2VsZWN0
aW9uQ2hhbmdlSWZOZWNlc3NhcnkoKTsKKwogICAgIEZyYW1lKiBtX2ZyYW1lOwogCiAgICAgTGF5
b3V0VW5pdCBtX3hQb3NGb3JWZXJ0aWNhbEFycm93TmF2aWdhdGlvbjsKIAogICAgIFZpc2libGVT
ZWxlY3Rpb24gbV9zZWxlY3Rpb247CisgICAgYm9vbCBtX29ic2VydmluZ1Zpc2libGVTZWxlY3Rp
b247CiAgICAgVmlzaWJsZVBvc2l0aW9uIG1fb3JpZ2luYWxCYXNlOyAvLyBVc2VkIHRvIHN0b3Jl
IGJhc2UgYmVmb3JlIHRoZSBhZGp1c3RtZW50IGF0IGJpZGkgYm91bmRhcnkKICAgICBUZXh0R3Jh
bnVsYXJpdHkgbV9ncmFudWxhcml0eTsKIAorICAgIC8vIFRoZSByYW5nZSBzcGVjaWZpZWQgYnkg
dGhlIHVzZXIsIHdoaWNoIG1heSBub3QgYmUgdmlzdWFsbHkgY2Fub25pY2FsaXplZCAoaGVuY2Ug
ImxvZ2ljYWwiKS4KKyAgICAvLyBUaGlzIHdpbGwgYmUgaW52YWxpZGF0ZWQgaWYgdGhlIHVuZGVy
bHlpbmcgVmlzaWJsZVNlbGVjdGlvbiBjaGFuZ2VzLiBJZiB0aGF0IGhhcHBlbnMsIHRoaXMgdmFy
aWFibGUgd2lsbAorICAgIC8vIGJlY29tZSBudWxsLCBpbiB3aGljaCBjYXNlIGxvZ2ljYWwgcG9z
aXRpb25zID09IHZpc2libGUgcG9zaXRpb25zLgorICAgIFJlZlB0cjxSYW5nZT4gbV9sb2dpY2Fs
UmFuZ2U7CisKICAgICBSZWZQdHI8Tm9kZT4gbV9wcmV2aW91c0NhcmV0Tm9kZTsgLy8gVGhlIGxh
c3Qgbm9kZSB3aGljaCBwYWludGVkIHRoZSBjYXJldC4gUmV0YWluZWQgZm9yIGNsZWFyaW5nIHRo
ZSBvbGQgY2FyZXQgd2hlbiBpdCBtb3Zlcy4KIAogICAgIFJlZlB0cjxFZGl0aW5nU3R5bGU+IG1f
dHlwaW5nU3R5bGU7CkluZGV4OiBTb3VyY2UvV2ViQ29yZS9lZGl0aW5nL1Zpc2libGVQb3NpdGlv
bi5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvZWRpdGluZy9WaXNpYmxlUG9zaXRp
b24uY3BwCShyZXZpc2lvbiAxNzQzMjQpCisrKyBTb3VyY2UvV2ViQ29yZS9lZGl0aW5nL1Zpc2li
bGVQb3NpdGlvbi5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTEsNiArMSw3IEBACiAvKgogICogQ29w
eXJpZ2h0IChDKSAyMDA0LCAyMDA1LCAyMDA2LCAyMDA3LCAyMDA4LCAyMDA5IEFwcGxlIEluYy4g
QWxsIHJpZ2h0cyByZXNlcnZlZC4KICAqIFBvcnRpb25zIENvcHlyaWdodCAoYykgMjAxMSBNb3Rv
cm9sYSBNb2JpbGl0eSwgSW5jLiAgQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqIFBvcnRpb25zIENv
cHlyaWdodCAoYykgMjAxNCBEYXZpZCBBLiBHYXR3b29kLiAgQWxsIHJpZ2h0cyByZXNlcnZlZC4K
ICAqCiAgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1z
LCB3aXRoIG9yIHdpdGhvdXQKICAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRl
ZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucwpAQCAtMzksNiArNDAsNyBAQAogI2luY2x1
ZGUgIlRleHQuaCIKICNpbmNsdWRlICJWaXNpYmxlVW5pdHMuaCIKICNpbmNsdWRlICJodG1sZWRp
dGluZy5oIgorI2luY2x1ZGUgIlBzZXVkb0VsZW1lbnQuaCIKICNpbmNsdWRlIDxzdGRpby5oPgog
I2luY2x1ZGUgPHd0Zi90ZXh0L0NTdHJpbmcuaD4KIApAQCAtMTEyLDYgKzExNCw4IEBACiAKICAg
ICBQb3NpdGlvbiBkb3duc3RyZWFtU3RhcnQgPSBwLmRvd25zdHJlYW0oKTsKICAgICBUZXh0RGly
ZWN0aW9uIHByaW1hcnlEaXJlY3Rpb24gPSBwLnByaW1hcnlEaXJlY3Rpb24oKTsKKyAgICAKKyAg
ICBSZW5kZXJPYmplY3QgKnJlbmRlcmVySWZMYXN0UmVuZGVyZXJXYXNQc2V1ZG9FbGVtZW50ID0g
TlVMTDsKIAogICAgIHdoaWxlICh0cnVlKSB7CiAgICAgICAgIElubGluZUJveCogYm94OwpAQCAt
MTIyLDI1ICsxMjYsODQgQEAKIAogICAgICAgICBSZW5kZXJPYmplY3QqIHJlbmRlcmVyID0gJmJv
eC0+cmVuZGVyZXIoKTsKIAorICAgICAgICBib29sIHNraXBDdXJyZW50ID0gdHJ1ZTsKKyAgICAg
ICAgCisgICAgICAgIE5vZGUgKmxhc3ROb2RlID0gTlVMTDsKKyAgICAgICAgCiAgICAgICAgIHdo
aWxlICh0cnVlKSB7CisgICAgICAgICAgICBib29sIGVsZW1lbnRDaGFuZ2VkID0gZmFsc2U7Cisg
ICAgICAgICAgICBpZiAocmVuZGVyZXItPm5vZGUoKSAmJiAhcmVuZGVyZXItPm5vZGUoKS0+aXNE
b2N1bWVudE5vZGUoKSkgeworICAgICAgICAgICAgICAgIGlmIChsYXN0Tm9kZSAmJiBsYXN0Tm9k
ZSAhPSByZW5kZXJlci0+bm9kZSgpKSB7CisgICAgICAgICAgICAgICAgICAgIHNraXBDdXJyZW50
ID0gZmFsc2U7CisgICAgICAgICAgICAgICAgICAgIGVsZW1lbnRDaGFuZ2VkID0gdHJ1ZTsKKyAg
ICAgICAgICAgICAgICB9CisgICAgICAgICAgICAgICAgbGFzdE5vZGUgPSByZW5kZXJlci0+bm9k
ZSgpOworICAgICAgICAgICAgICAgICAgICAKKyAgICAgICAgICAgIH0KKyAgICAgICAgICAgIAog
ICAgICAgICAgICAgaWYgKChyZW5kZXJlci0+aXNSZXBsYWNlZCgpIHx8IHJlbmRlcmVyLT5pc0JS
KCkpICYmIG9mZnNldCA9PSBib3gtPmNhcmV0UmlnaHRtb3N0T2Zmc2V0KCkpCiAgICAgICAgICAg
ICAgICAgcmV0dXJuIGJveC0+aXNMZWZ0VG9SaWdodERpcmVjdGlvbigpID8gcHJldmlvdXNWaXN1
YWxseURpc3RpbmN0Q2FuZGlkYXRlKG1fZGVlcFBvc2l0aW9uKSA6IG5leHRWaXN1YWxseURpc3Rp
bmN0Q2FuZGlkYXRlKG1fZGVlcFBvc2l0aW9uKTsKIAogICAgICAgICAgICAgaWYgKCFyZW5kZXJl
ci0+bm9kZSgpKSB7CisgICAgICAgICAgICAgICAgaWYgKHJlbmRlcmVyLT5wYXJlbnQoKS0+aXNC
ZWZvcmVDb250ZW50KCkpIHsKKyAgICAgICAgICAgICAgICAgICAgLyogVGhpcyBtYWdpYyBsZXRz
IHVzIHdhbGsgaW50byBlbXB0eSBlbGVtZW50cyBpZiB0aGV5IGhhdmUKKyAgICAgICAgICAgICAg
ICAgICAgICAgcHNldWRvLWVsZW1lbnRzIHRvIG1ha2UgdGhlbSB2aXN1YWxseSBkaXN0aW5jdC4g
IFdpdGhvdXQKKyAgICAgICAgICAgICAgICAgICAgICAgaXQsIHlvdSdkIG9ubHkgcmVhY2ggdGhv
c2UgZWxlbWVudHMgaWYgdGhlIGVsZW1lbnQgaGFkCisgICAgICAgICAgICAgICAgICAgICAgIGEg
YmFja2dyb3VuZCBvciBvdGhlciBjb250ZW50IHRoYXQgcmVxdWlyZWQgcmVuZGVyaW5nLgorICAg
ICAgICAgICAgICAgICAgICAgKi8KKyAgICAgICAgICAgICAgICAgICAgUmVuZGVyT2JqZWN0ICpw
YXJlbnRSZW5kZXJlciA9IHJlbmRlcmVyLT5wYXJlbnQoKTsKKyAgICAgICAgICAgICAgICAgICAg
Tm9kZSAqcHNldWRvRWxlbWVudE5vZGUgPSBwYXJlbnRSZW5kZXJlci0+bm9kZSgpOworICAgICAg
ICAgICAgICAgICAgICAKKyAgICAgICAgICAgICAgICAgICAgaWYgKHBzZXVkb0VsZW1lbnROb2Rl
KSB7CisgICAgICAgICAgICAgICAgICAgICAgICBBU1NFUlQocHNldWRvRWxlbWVudE5vZGUtPmlz
UHNldWRvRWxlbWVudCgpKTsKKyAgICAgICAgICAgICAgICAgICAgICAgIFBzZXVkb0VsZW1lbnQg
KnBlID0gZG93bmNhc3Q8UHNldWRvRWxlbWVudD4ocHNldWRvRWxlbWVudE5vZGUpOworICAgICAg
ICAgICAgICAgICAgICAgICAgRWxlbWVudCAqZWx0ID0gcGUtPmhvc3RFbGVtZW50KCk7CisgICAg
ICAgICAgICAgICAgICAgICAgICAKKyAgICAgICAgICAgICAgICAgICAgICAgIHJlbmRlcmVySWZM
YXN0UmVuZGVyZXJXYXNQc2V1ZG9FbGVtZW50ID0gcGFyZW50UmVuZGVyZXI7CisgICAgICAgICAg
ICAgICAgICAgICAgICAKKyAgICAgICAgICAgICAgICAgICAgICAgIGlmICghZWx0LT5maXJzdENo
aWxkKCkpIHsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICByZW5kZXJlciA9IHJlbmRlcmVy
LT5wYXJlbnQoKTsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICBza2lwQ3VycmVudCA9IGZh
bHNlOworCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgY29udGludWU7CisgICAgICAgICAg
ICAgICAgICAgICAgICB9CisgICAgICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgICAgICB9
IGVsc2UgeworICAgICAgICAgICAgICAgICAgICByZW5kZXJlcklmTGFzdFJlbmRlcmVyV2FzUHNl
dWRvRWxlbWVudCA9IE5VTEw7CisgICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgICAgIGJv
eCA9IGJveC0+cHJldkxlYWZDaGlsZCgpOwotICAgICAgICAgICAgICAgIGlmICghYm94KQorICAg
ICAgICAgICAgICAgIGlmICghYm94KSB7CisgICAgICAgICAgICAgICAgICAgIC8qIElmIHRoZSBy
ZW5kZXJlciB0cmVlIHdhbGsgZW5jb3VudGVycyBhIDo6YmVmb3JlCisgICAgICAgICAgICAgICAg
ICAgICAgIHBzZXVkby1lbGVtZW50IHJpZ2h0IGJlZm9yZSBpdCBoaXRzIHRoZSBsYXN0CisgICAg
ICAgICAgICAgICAgICAgICAgIGxlYWYgY2hpbGQsIGNvbnNpZGVyIHRoZSBwb2ludCBiZWZvcmUg
dGhhdAorICAgICAgICAgICAgICAgICAgICAgICBwc2V1ZG8tZWxlbWVudCB0byBiZSBhIHZhbGlk
IGluc2VydGlvbiBwb2ludC4gIFRoaXMKKyAgICAgICAgICAgICAgICAgICAgICAgdGFrZXMgY2Fy
ZSBvZiB0aGUgc3BlY2lhbCBjYXNlIHdoZXJlIHRoZSB1c2VyCisgICAgICAgICAgICAgICAgICAg
ICAgIG1vdmVzIHRvIHRoZSBsZWZ0IGZyb20gdGhlIGZpcnN0IHRleHQgbm9kZSBpbiB0aGUKKyAg
ICAgICAgICAgICAgICAgICAgICAgZWRpdGFibGUgY29udGVudCByZWdpb24sIGFsbG93aW5nIG5h
dmlnYXRpb24KKyAgICAgICAgICAgICAgICAgICAgICAgdG8gaW5zZXJ0aW9uIHBvaW50cyBiZWZv
cmUgdGhhdCB0ZXh0IG5vZGUncworICAgICAgICAgICAgICAgICAgICAgICBlbmNsb3NpbmcgZWxl
bWVudHMuCisgICAgICAgICAgICAgICAgICAgICAqLworICAgICAgICAgICAgICAgICAgICBpZiAo
cmVuZGVyZXJJZkxhc3RSZW5kZXJlcldhc1BzZXVkb0VsZW1lbnQpIHsKKyAgICAgICAgICAgICAg
ICAgICAgICAgIHJlbmRlcmVyID0gcmVuZGVyZXJJZkxhc3RSZW5kZXJlcldhc1BzZXVkb0VsZW1l
bnQ7CisgICAgICAgICAgICAgICAgICAgICAgICBvZmZzZXQgPSAtMTsKKyAgICAgICAgICAgICAg
ICAgICAgICAgIGJyZWFrOworICAgICAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAgICAg
ICAgIHJldHVybiBwcmltYXJ5RGlyZWN0aW9uID09IExUUiA/IHByZXZpb3VzVmlzdWFsbHlEaXN0
aW5jdENhbmRpZGF0ZShtX2RlZXBQb3NpdGlvbikgOiBuZXh0VmlzdWFsbHlEaXN0aW5jdENhbmRp
ZGF0ZShtX2RlZXBQb3NpdGlvbik7CisgICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgICAg
IHJlbmRlcmVyID0gJmJveC0+cmVuZGVyZXIoKTsKICAgICAgICAgICAgICAgICBvZmZzZXQgPSBi
b3gtPmNhcmV0UmlnaHRtb3N0T2Zmc2V0KCk7CiAgICAgICAgICAgICAgICAgY29udGludWU7CiAg
ICAgICAgICAgICB9CiAKLSAgICAgICAgICAgIG9mZnNldCA9IGJveC0+aXNMZWZ0VG9SaWdodERp
cmVjdGlvbigpID8gcmVuZGVyZXItPnByZXZpb3VzT2Zmc2V0KG9mZnNldCkgOiByZW5kZXJlci0+
bmV4dE9mZnNldChvZmZzZXQpOwotCisgICAgICAgICAgICBpZiAoc2tpcEN1cnJlbnQpIHsKKyAg
ICAgICAgICAgICAgICBvZmZzZXQgPSBib3gtPmlzTGVmdFRvUmlnaHREaXJlY3Rpb24oKSA/IHJl
bmRlcmVyLT5wcmV2aW91c09mZnNldChvZmZzZXQpIDogcmVuZGVyZXItPm5leHRPZmZzZXQob2Zm
c2V0KTsKKyAgICAgICAgICAgIH0KKyAgICAgICAgICAgIHNraXBDdXJyZW50ID0gdHJ1ZTsKKyAg
ICAgICAgICAgIAogICAgICAgICAgICAgaW50IGNhcmV0TWluT2Zmc2V0ID0gYm94LT5jYXJldE1p
bk9mZnNldCgpOwogICAgICAgICAgICAgaW50IGNhcmV0TWF4T2Zmc2V0ID0gYm94LT5jYXJldE1h
eE9mZnNldCgpOwogCi0gICAgICAgICAgICBpZiAob2Zmc2V0ID4gY2FyZXRNaW5PZmZzZXQgJiYg
b2Zmc2V0IDwgY2FyZXRNYXhPZmZzZXQpCisgICAgICAgICAgICBpZiAob2Zmc2V0ID4gY2FyZXRN
aW5PZmZzZXQgJiYgKG9mZnNldCA8IGNhcmV0TWF4T2Zmc2V0IHx8IChvZmZzZXQgPT0gY2FyZXRN
YXhPZmZzZXQgJiYgZWxlbWVudENoYW5nZWQpKSkKICAgICAgICAgICAgICAgICBicmVhazsKIAog
ICAgICAgICAgICAgaWYgKGJveC0+aXNMZWZ0VG9SaWdodERpcmVjdGlvbigpID8gb2Zmc2V0IDwg
Y2FyZXRNaW5PZmZzZXQgOiBvZmZzZXQgPiBjYXJldE1heE9mZnNldCkgewpAQCAtMTYzLDg3ICsy
MjYsMTA2IEBACiAgICAgICAgICAgICAgICAgYm94ID0gcHJldkJveDsKICAgICAgICAgICAgICAg
ICByZW5kZXJlciA9ICZib3gtPnJlbmRlcmVyKCk7CiAgICAgICAgICAgICAgICAgb2Zmc2V0ID0g
cHJldkJveC0+Y2FyZXRSaWdodG1vc3RPZmZzZXQoKTsKKyAgICAgICAgICAgICAgICAKKyAgICAg
ICAgICAgICAgICAvLyBza2lwQ3VycmVudCBzaG91bGQgYmUgdHJ1ZSBpZiBhbmQgb25seSBpZiB3
ZSBkb24ndCBlbmNvdW50ZXIgYW55CisgICAgICAgICAgICAgICAgLy8gcHNldWRvZWxlbWVudHMg
b3IgZWxlbWVudCBib3VuZGFyaWVzLgorICAgICAgICAgICAgICAgIHNraXBDdXJyZW50ID0gdHJ1
ZTsKKwogICAgICAgICAgICAgICAgIGNvbnRpbnVlOwogICAgICAgICAgICAgfQogCi0gICAgICAg
ICAgICBBU1NFUlQob2Zmc2V0ID09IGJveC0+Y2FyZXRMZWZ0bW9zdE9mZnNldCgpKTsKKyAgICAg
ICAgICAgIC8vIENoYW5nZWQgYXNzZXJ0IHRvIGlmLCBiZWNhdXNlIGl0IGNvdWxkIGFsc28gYmUg
dGhlCisgICAgICAgICAgICAvLyByaWdodG1vc3Qgb2Zmc2V0LgorICAgICAgICAgICAgaWYgKG9m
ZnNldCA9PSBib3gtPmNhcmV0TGVmdG1vc3RPZmZzZXQoKSkgewogCi0gICAgICAgICAgICB1bnNp
Z25lZCBjaGFyIGxldmVsID0gYm94LT5iaWRpTGV2ZWwoKTsKLSAgICAgICAgICAgIElubGluZUJv
eCogcHJldkJveCA9IGJveC0+cHJldkxlYWZDaGlsZCgpOworICAgICAgICAgICAgICAgIHVuc2ln
bmVkIGNoYXIgbGV2ZWwgPSBib3gtPmJpZGlMZXZlbCgpOworICAgICAgICAgICAgICAgIElubGlu
ZUJveCogcHJldkJveCA9IGJveC0+cHJldkxlYWZDaGlsZCgpOwogCi0gICAgICAgICAgICBpZiAo
Ym94LT5kaXJlY3Rpb24oKSA9PSBwcmltYXJ5RGlyZWN0aW9uKSB7Ci0gICAgICAgICAgICAgICAg
aWYgKCFwcmV2Qm94KSB7Ci0gICAgICAgICAgICAgICAgICAgIElubGluZUJveCogbG9naWNhbFN0
YXJ0ID0gMDsKLSAgICAgICAgICAgICAgICAgICAgaWYgKHByaW1hcnlEaXJlY3Rpb24gPT0gTFRS
ID8gYm94LT5yb290KCkuZ2V0TG9naWNhbFN0YXJ0Qm94V2l0aE5vZGUobG9naWNhbFN0YXJ0KSA6
IGJveC0+cm9vdCgpLmdldExvZ2ljYWxFbmRCb3hXaXRoTm9kZShsb2dpY2FsU3RhcnQpKSB7Ci0g
ICAgICAgICAgICAgICAgICAgICAgICBib3ggPSBsb2dpY2FsU3RhcnQ7Ci0gICAgICAgICAgICAg
ICAgICAgICAgICByZW5kZXJlciA9ICZib3gtPnJlbmRlcmVyKCk7Ci0gICAgICAgICAgICAgICAg
ICAgICAgICBvZmZzZXQgPSBwcmltYXJ5RGlyZWN0aW9uID09IExUUiA/IGJveC0+Y2FyZXRNaW5P
ZmZzZXQoKSA6IGJveC0+Y2FyZXRNYXhPZmZzZXQoKTsKKyAgICAgICAgICAgICAgICBpZiAoYm94
LT5kaXJlY3Rpb24oKSA9PSBwcmltYXJ5RGlyZWN0aW9uKSB7CisgICAgICAgICAgICAgICAgICAg
IGlmICghcHJldkJveCkgeworICAgICAgICAgICAgICAgICAgICAgICAgSW5saW5lQm94KiBsb2dp
Y2FsU3RhcnQgPSAwOworICAgICAgICAgICAgICAgICAgICAgICAgaWYgKHByaW1hcnlEaXJlY3Rp
b24gPT0gTFRSID8gYm94LT5yb290KCkuZ2V0TG9naWNhbFN0YXJ0Qm94V2l0aE5vZGUobG9naWNh
bFN0YXJ0KSA6IGJveC0+cm9vdCgpLmdldExvZ2ljYWxFbmRCb3hXaXRoTm9kZShsb2dpY2FsU3Rh
cnQpKSB7CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgYm94ID0gbG9naWNhbFN0YXJ0Owor
ICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJlbmRlcmVyID0gJmJveC0+cmVuZGVyZXIoKTsK
KyAgICAgICAgICAgICAgICAgICAgICAgICAgICBvZmZzZXQgPSBwcmltYXJ5RGlyZWN0aW9uID09
IExUUiA/IGJveC0+Y2FyZXRNaW5PZmZzZXQoKSA6IGJveC0+Y2FyZXRNYXhPZmZzZXQoKTsKKyAg
ICAgICAgICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgICAgICAgICAgICAgIGJyZWFrOwog
ICAgICAgICAgICAgICAgICAgICB9Ci0gICAgICAgICAgICAgICAgICAgIGJyZWFrOwotICAgICAg
ICAgICAgICAgIH0KLSAgICAgICAgICAgICAgICBpZiAocHJldkJveC0+YmlkaUxldmVsKCkgPj0g
bGV2ZWwpCi0gICAgICAgICAgICAgICAgICAgIGJyZWFrOworICAgICAgICAgICAgICAgICAgICBp
ZiAocHJldkJveC0+YmlkaUxldmVsKCkgPj0gbGV2ZWwpCisgICAgICAgICAgICAgICAgICAgICAg
ICBicmVhazsKIAotICAgICAgICAgICAgICAgIGxldmVsID0gcHJldkJveC0+YmlkaUxldmVsKCk7
CisgICAgICAgICAgICAgICAgICAgIGxldmVsID0gcHJldkJveC0+YmlkaUxldmVsKCk7CiAKLSAg
ICAgICAgICAgICAgICBJbmxpbmVCb3gqIG5leHRCb3ggPSBib3g7Ci0gICAgICAgICAgICAgICAg
ZG8gewotICAgICAgICAgICAgICAgICAgICBuZXh0Qm94ID0gbmV4dEJveC0+bmV4dExlYWZDaGls
ZCgpOwotICAgICAgICAgICAgICAgIH0gd2hpbGUgKG5leHRCb3ggJiYgbmV4dEJveC0+YmlkaUxl
dmVsKCkgPiBsZXZlbCk7CisgICAgICAgICAgICAgICAgICAgIElubGluZUJveCogbmV4dEJveCA9
IGJveDsKKyAgICAgICAgICAgICAgICAgICAgZG8geworICAgICAgICAgICAgICAgICAgICAgICAg
bmV4dEJveCA9IG5leHRCb3gtPm5leHRMZWFmQ2hpbGQoKTsKKyAgICAgICAgICAgICAgICAgICAg
fSB3aGlsZSAobmV4dEJveCAmJiBuZXh0Qm94LT5iaWRpTGV2ZWwoKSA+IGxldmVsKTsKIAotICAg
ICAgICAgICAgICAgIGlmIChuZXh0Qm94ICYmIG5leHRCb3gtPmJpZGlMZXZlbCgpID09IGxldmVs
KQotICAgICAgICAgICAgICAgICAgICBicmVhazsKKyAgICAgICAgICAgICAgICAgICAgaWYgKG5l
eHRCb3ggJiYgbmV4dEJveC0+YmlkaUxldmVsKCkgPT0gbGV2ZWwpCisgICAgICAgICAgICAgICAg
ICAgICAgICBicmVhazsKIAotICAgICAgICAgICAgICAgIGJveCA9IHByZXZCb3g7Ci0gICAgICAg
ICAgICAgICAgcmVuZGVyZXIgPSAmYm94LT5yZW5kZXJlcigpOwotICAgICAgICAgICAgICAgIG9m
ZnNldCA9IGJveC0+Y2FyZXRSaWdodG1vc3RPZmZzZXQoKTsKLSAgICAgICAgICAgICAgICBpZiAo
Ym94LT5kaXJlY3Rpb24oKSA9PSBwcmltYXJ5RGlyZWN0aW9uKQotICAgICAgICAgICAgICAgICAg
ICBicmVhazsKLSAgICAgICAgICAgICAgICBjb250aW51ZTsKLSAgICAgICAgICAgIH0KKyAgICAg
ICAgICAgICAgICAgICAgYm94ID0gcHJldkJveDsKKyAgICAgICAgICAgICAgICAgICAgcmVuZGVy
ZXIgPSAmYm94LT5yZW5kZXJlcigpOworICAgICAgICAgICAgICAgICAgICBvZmZzZXQgPSBib3gt
PmNhcmV0UmlnaHRtb3N0T2Zmc2V0KCk7CisgICAgICAgICAgICAgICAgICAgIGlmIChib3gtPmRp
cmVjdGlvbigpID09IHByaW1hcnlEaXJlY3Rpb24pCisgICAgICAgICAgICAgICAgICAgICAgICBi
cmVhazsKKyAgICAgICAgICAgICAgICAgICAgY29udGludWU7CisgICAgICAgICAgICAgICAgfQog
Ci0gICAgICAgICAgICB3aGlsZSAocHJldkJveCAmJiAhcHJldkJveC0+cmVuZGVyZXIoKS5ub2Rl
KCkpCi0gICAgICAgICAgICAgICAgcHJldkJveCA9IHByZXZCb3gtPnByZXZMZWFmQ2hpbGQoKTsK
KyAgICAgICAgICAgICAgICB3aGlsZSAocHJldkJveCAmJiAhcHJldkJveC0+cmVuZGVyZXIoKS5u
b2RlKCkpCisgICAgICAgICAgICAgICAgICAgIHByZXZCb3ggPSBwcmV2Qm94LT5wcmV2TGVhZkNo
aWxkKCk7CiAKLSAgICAgICAgICAgIGlmIChwcmV2Qm94KSB7Ci0gICAgICAgICAgICAgICAgYm94
ID0gcHJldkJveDsKLSAgICAgICAgICAgICAgICByZW5kZXJlciA9ICZib3gtPnJlbmRlcmVyKCk7
Ci0gICAgICAgICAgICAgICAgb2Zmc2V0ID0gYm94LT5jYXJldFJpZ2h0bW9zdE9mZnNldCgpOwot
ICAgICAgICAgICAgICAgIGlmIChib3gtPmJpZGlMZXZlbCgpID4gbGV2ZWwpIHsKLSAgICAgICAg
ICAgICAgICAgICAgZG8gewotICAgICAgICAgICAgICAgICAgICAgICAgcHJldkJveCA9IHByZXZC
b3gtPnByZXZMZWFmQ2hpbGQoKTsKLSAgICAgICAgICAgICAgICAgICAgfSB3aGlsZSAocHJldkJv
eCAmJiBwcmV2Qm94LT5iaWRpTGV2ZWwoKSA+IGxldmVsKTsKKyAgICAgICAgICAgICAgICBpZiAo
cHJldkJveCkgeworICAgICAgICAgICAgICAgICAgICBib3ggPSBwcmV2Qm94OworICAgICAgICAg
ICAgICAgICAgICByZW5kZXJlciA9ICZib3gtPnJlbmRlcmVyKCk7CisgICAgICAgICAgICAgICAg
ICAgIG9mZnNldCA9IGJveC0+Y2FyZXRSaWdodG1vc3RPZmZzZXQoKTsKKyAgICAgICAgICAgICAg
ICAgICAgaWYgKGJveC0+YmlkaUxldmVsKCkgPiBsZXZlbCkgeworICAgICAgICAgICAgICAgICAg
ICAgICAgZG8geworICAgICAgICAgICAgICAgICAgICAgICAgICAgIHByZXZCb3ggPSBwcmV2Qm94
LT5wcmV2TGVhZkNoaWxkKCk7CisgICAgICAgICAgICAgICAgICAgICAgICB9IHdoaWxlIChwcmV2
Qm94ICYmIHByZXZCb3gtPmJpZGlMZXZlbCgpID4gbGV2ZWwpOwogCi0gICAgICAgICAgICAgICAg
ICAgIGlmICghcHJldkJveCB8fCBwcmV2Qm94LT5iaWRpTGV2ZWwoKSA8IGxldmVsKQotICAgICAg
ICAgICAgICAgICAgICAgICAgY29udGludWU7Ci0gICAgICAgICAgICAgICAgfQotICAgICAgICAg
ICAgfSBlbHNlIHsKLSAgICAgICAgICAgICAgICAvLyBUcmFpbGluZyBlZGdlIG9mIGEgc2Vjb25k
YXJ5IHJ1bi4gU2V0IHRvIHRoZSBsZWFkaW5nIGVkZ2Ugb2YgdGhlIGVudGlyZSBydW4uCi0gICAg
ICAgICAgICAgICAgd2hpbGUgKHRydWUpIHsKLSAgICAgICAgICAgICAgICAgICAgd2hpbGUgKElu
bGluZUJveCogbmV4dEJveCA9IGJveC0+bmV4dExlYWZDaGlsZCgpKSB7Ci0gICAgICAgICAgICAg
ICAgICAgICAgICBpZiAobmV4dEJveC0+YmlkaUxldmVsKCkgPCBsZXZlbCkKLSAgICAgICAgICAg
ICAgICAgICAgICAgICAgICBicmVhazsKLSAgICAgICAgICAgICAgICAgICAgICAgIGJveCA9IG5l
eHRCb3g7CisgICAgICAgICAgICAgICAgICAgICAgICBpZiAoIXByZXZCb3ggfHwgcHJldkJveC0+
YmlkaUxldmVsKCkgPCBsZXZlbCkKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb250aW51
ZTsKICAgICAgICAgICAgICAgICAgICAgfQotICAgICAgICAgICAgICAgICAgICBpZiAoYm94LT5i
aWRpTGV2ZWwoKSA9PSBsZXZlbCkKLSAgICAgICAgICAgICAgICAgICAgICAgIGJyZWFrOwotICAg
ICAgICAgICAgICAgICAgICBsZXZlbCA9IGJveC0+YmlkaUxldmVsKCk7Ci0gICAgICAgICAgICAg
ICAgICAgIHdoaWxlIChJbmxpbmVCb3gqIHByZXZCb3ggPSBib3gtPnByZXZMZWFmQ2hpbGQoKSkg
ewotICAgICAgICAgICAgICAgICAgICAgICAgaWYgKHByZXZCb3gtPmJpZGlMZXZlbCgpIDwgbGV2
ZWwpCisgICAgICAgICAgICAgICAgfSBlbHNlIHsKKyAgICAgICAgICAgICAgICAgICAgLy8gVHJh
aWxpbmcgZWRnZSBvZiBhIHNlY29uZGFyeSBydW4uIFNldCB0byB0aGUgbGVhZGluZyBlZGdlIG9m
IHRoZSBlbnRpcmUgcnVuLgorICAgICAgICAgICAgICAgICAgICB3aGlsZSAodHJ1ZSkgeworICAg
ICAgICAgICAgICAgICAgICAgICAgd2hpbGUgKElubGluZUJveCogbmV4dEJveCA9IGJveC0+bmV4
dExlYWZDaGlsZCgpKSB7CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgaWYgKG5leHRCb3gt
PmJpZGlMZXZlbCgpIDwgbGV2ZWwpCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGJy
ZWFrOworICAgICAgICAgICAgICAgICAgICAgICAgICAgIGJveCA9IG5leHRCb3g7CisgICAgICAg
ICAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICAgICAgICAgICAgICBpZiAoYm94LT5iaWRp
TGV2ZWwoKSA9PSBsZXZlbCkKICAgICAgICAgICAgICAgICAgICAgICAgICAgICBicmVhazsKLSAg
ICAgICAgICAgICAgICAgICAgICAgIGJveCA9IHByZXZCb3g7CisgICAgICAgICAgICAgICAgICAg
ICAgICBsZXZlbCA9IGJveC0+YmlkaUxldmVsKCk7CisgICAgICAgICAgICAgICAgICAgICAgICB3
aGlsZSAoSW5saW5lQm94KiBwcmV2Qm94ID0gYm94LT5wcmV2TGVhZkNoaWxkKCkpIHsKKyAgICAg
ICAgICAgICAgICAgICAgICAgICAgICBpZiAocHJldkJveC0+YmlkaUxldmVsKCkgPCBsZXZlbCkK
KyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgYnJlYWs7CisgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgYm94ID0gcHJldkJveDsKKyAgICAgICAgICAgICAgICAgICAgICAgIH0KKyAg
ICAgICAgICAgICAgICAgICAgICAgIGlmIChib3gtPmJpZGlMZXZlbCgpID09IGxldmVsKQorICAg
ICAgICAgICAgICAgICAgICAgICAgICAgIGJyZWFrOworICAgICAgICAgICAgICAgICAgICAgICAg
bGV2ZWwgPSBib3gtPmJpZGlMZXZlbCgpOwogICAgICAgICAgICAgICAgICAgICB9Ci0gICAgICAg
ICAgICAgICAgICAgIGlmIChib3gtPmJpZGlMZXZlbCgpID09IGxldmVsKQotICAgICAgICAgICAg
ICAgICAgICAgICAgYnJlYWs7Ci0gICAgICAgICAgICAgICAgICAgIGxldmVsID0gYm94LT5iaWRp
TGV2ZWwoKTsKKyAgICAgICAgICAgICAgICAgICAgcmVuZGVyZXIgPSAmYm94LT5yZW5kZXJlcigp
OworICAgICAgICAgICAgICAgICAgICBvZmZzZXQgPSBwcmltYXJ5RGlyZWN0aW9uID09IExUUiA/
IGJveC0+Y2FyZXRNaW5PZmZzZXQoKSA6IGJveC0+Y2FyZXRNYXhPZmZzZXQoKTsKICAgICAgICAg
ICAgICAgICB9Ci0gICAgICAgICAgICAgICAgcmVuZGVyZXIgPSAmYm94LT5yZW5kZXJlcigpOwot
ICAgICAgICAgICAgICAgIG9mZnNldCA9IHByaW1hcnlEaXJlY3Rpb24gPT0gTFRSID8gYm94LT5j
YXJldE1pbk9mZnNldCgpIDogYm94LT5jYXJldE1heE9mZnNldCgpOworICAgICAgICAgICAgICAg
IGJyZWFrOwogICAgICAgICAgICAgfQotICAgICAgICAgICAgYnJlYWs7CiAgICAgICAgIH0KKyAg
ICAgICAgCisgICAgICAgIE5vZGUgKm5vZGUgPSByZW5kZXJlci0+bm9kZSgpOworICAgICAgICBp
ZiAobm9kZS0+aXNQc2V1ZG9FbGVtZW50KCkpIHsKKyAgICAgICAgICAgIFBzZXVkb0VsZW1lbnQg
KnBzZXVkb0VsdCA9IGRvd25jYXN0PFBzZXVkb0VsZW1lbnQ+KG5vZGUpOworICAgICAgICAgICAg
bm9kZSA9IHBzZXVkb0VsdC0+aG9zdEVsZW1lbnQoKTsKKyAgICAgICAgICAgIAorICAgICAgICAg
ICAgaWYgKG9mZnNldCA9PSAtMSAmJiByZW5kZXJlcklmTGFzdFJlbmRlcmVyV2FzUHNldWRvRWxl
bWVudCkgeworICAgICAgICAgICAgICAgIG9mZnNldCA9IG5vZGUtPmNvbXB1dGVOb2RlSW5kZXgo
KTsKKyAgICAgICAgICAgICAgICBub2RlID0gbm9kZS0+cGFyZW50RWxlbWVudCgpOworICAgICAg
ICAgICAgfQorICAgICAgICB9CiAKLSAgICAgICAgcCA9IGNyZWF0ZUxlZ2FjeUVkaXRpbmdQb3Np
dGlvbihyZW5kZXJlci0+bm9kZSgpLCBvZmZzZXQpOworICAgICAgICBwID0gY3JlYXRlTGVnYWN5
RWRpdGluZ1Bvc2l0aW9uKG5vZGUsIG9mZnNldCk7CiAKICAgICAgICAgaWYgKChwLmlzQ2FuZGlk
YXRlKCkgJiYgcC5kb3duc3RyZWFtKCkgIT0gZG93bnN0cmVhbVN0YXJ0KSB8fCBwLmF0U3RhcnRP
ZlRyZWUoKSB8fCBwLmF0RW5kT2ZUcmVlKCkpCiAgICAgICAgICAgICByZXR1cm4gcDsKQEAgLTI3
Nyw2ICszNTksOCBAQAogCiAgICAgUG9zaXRpb24gZG93bnN0cmVhbVN0YXJ0ID0gcC5kb3duc3Ry
ZWFtKCk7CiAgICAgVGV4dERpcmVjdGlvbiBwcmltYXJ5RGlyZWN0aW9uID0gcC5wcmltYXJ5RGly
ZWN0aW9uKCk7CisgICAgCisgICAgUmVuZGVyT2JqZWN0ICpyZW5kZXJlcklmTGFzdFJlbmRlcmVy
V2FzUHNldWRvRWxlbWVudCA9IE5VTEw7CiAKICAgICB3aGlsZSAodHJ1ZSkgewogICAgICAgICBJ
bmxpbmVCb3gqIGJveDsKQEAgLTI4NywyNSArMzcxLDcwIEBACiAKICAgICAgICAgUmVuZGVyT2Jq
ZWN0KiByZW5kZXJlciA9ICZib3gtPnJlbmRlcmVyKCk7CiAKKyAgICAgICAgYm9vbCBza2lwQ3Vy
cmVudCA9IHRydWU7CisgICAgICAgIE5vZGUgKmxhc3ROb2RlID0gTlVMTDsKKwogICAgICAgICB3
aGlsZSAodHJ1ZSkgeworICAgICAgICAgICAgYm9vbCBlbGVtZW50Q2hhbmdlZCA9IGZhbHNlOwor
ICAgICAgICAgICAgaWYgKHJlbmRlcmVyLT5ub2RlKCkgJiYgIXJlbmRlcmVyLT5ub2RlKCktPmlz
RG9jdW1lbnROb2RlKCkpIHsKKyAgICAgICAgICAgICAgICBpZiAobGFzdE5vZGUgJiYgbGFzdE5v
ZGUgIT0gcmVuZGVyZXItPm5vZGUoKSkgeworICAgICAgICAgICAgICAgICAgICBza2lwQ3VycmVu
dCA9IGZhbHNlOworICAgICAgICAgICAgICAgICAgICBlbGVtZW50Q2hhbmdlZCA9IHRydWU7Cisg
ICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgICAgIGxhc3ROb2RlID0gcmVuZGVyZXItPm5v
ZGUoKTsKKyAgICAgICAgICAgIH0KKwogICAgICAgICAgICAgaWYgKChyZW5kZXJlci0+aXNSZXBs
YWNlZCgpIHx8IHJlbmRlcmVyLT5pc0JSKCkpICYmIG9mZnNldCA9PSBib3gtPmNhcmV0TGVmdG1v
c3RPZmZzZXQoKSkKICAgICAgICAgICAgICAgICByZXR1cm4gYm94LT5pc0xlZnRUb1JpZ2h0RGly
ZWN0aW9uKCkgPyBuZXh0VmlzdWFsbHlEaXN0aW5jdENhbmRpZGF0ZShtX2RlZXBQb3NpdGlvbikg
OiBwcmV2aW91c1Zpc3VhbGx5RGlzdGluY3RDYW5kaWRhdGUobV9kZWVwUG9zaXRpb24pOwogCiAg
ICAgICAgICAgICBpZiAoIXJlbmRlcmVyLT5ub2RlKCkpIHsKKyAgICAgICAgICAgICAgICBpZiAo
cmVuZGVyZXItPnBhcmVudCgpLT5pc0JlZm9yZUNvbnRlbnQoKSkgeworICAgICAgICAgICAgICAg
ICAgICAvKiBUaGlzIG1hZ2ljIGxldHMgdXMgd2FsayBpbnRvIGVtcHR5IGVsZW1lbnRzIGlmIHRo
ZXkgaGF2ZQorICAgICAgICAgICAgICAgICAgICAgcHNldWRvLWVsZW1lbnRzIHRvIG1ha2UgdGhl
bSB2aXN1YWxseSBkaXN0aW5jdC4gIFdpdGhvdXQKKyAgICAgICAgICAgICAgICAgICAgIGl0LCB5
b3UnZCBvbmx5IHJlYWNoIHRob3NlIGVsZW1lbnRzIGlmIHRoZSBlbGVtZW50IGhhZAorICAgICAg
ICAgICAgICAgICAgICAgYSBiYWNrZ3JvdW5kIG9yIG90aGVyIGNvbnRlbnQgdGhhdCByZXF1aXJl
ZCByZW5kZXJpbmcuCisgICAgICAgICAgICAgICAgICAgICAqLworICAgICAgICAgICAgICAgICAg
ICBSZW5kZXJPYmplY3QgKnBhcmVudFJlbmRlcmVyID0gcmVuZGVyZXItPnBhcmVudCgpOworICAg
ICAgICAgICAgICAgICAgICBOb2RlICpwc2V1ZG9FbGVtZW50Tm9kZSA9IHBhcmVudFJlbmRlcmVy
LT5ub2RlKCk7CisgICAgICAgICAgICAgICAgICAgIAorICAgICAgICAgICAgICAgICAgICBpZiAo
cHNldWRvRWxlbWVudE5vZGUpIHsKKyAgICAgICAgICAgICAgICAgICAgICAgIEFTU0VSVChwc2V1
ZG9FbGVtZW50Tm9kZS0+aXNQc2V1ZG9FbGVtZW50KCkpOworICAgICAgICAgICAgICAgICAgICAg
ICAgUHNldWRvRWxlbWVudCAqcGUgPSBkb3duY2FzdDxQc2V1ZG9FbGVtZW50Pihwc2V1ZG9FbGVt
ZW50Tm9kZSk7CisgICAgICAgICAgICAgICAgICAgICAgICBFbGVtZW50ICplbHQgPSBwZS0+aG9z
dEVsZW1lbnQoKTsKKworICAgICAgICAgICAgICAgICAgICAgICAgcmVuZGVyZXJJZkxhc3RSZW5k
ZXJlcldhc1BzZXVkb0VsZW1lbnQgPSBwYXJlbnRSZW5kZXJlcjsKKyAgICAgICAgICAgICAgICAg
ICAgICAgIAorICAgICAgICAgICAgICAgICAgICAgICAgaWYgKCFlbHQtPmZpcnN0Q2hpbGQoKSkg
eworICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJlbmRlcmVyID0gcmVuZGVyZXItPnBhcmVu
dCgpOworICAgICAgICAgICAgICAgICAgICAgICAgICAgIHNraXBDdXJyZW50ID0gZmFsc2U7Cisg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgCisgICAgICAgICAgICAgICAgICAgICAgICAgICAg
Y29udGludWU7CisgICAgICAgICAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICAgICAgICAg
IH0KKyAgICAgICAgICAgICAgICB9IGVsc2UgeworICAgICAgICAgICAgICAgICAgICByZW5kZXJl
cklmTGFzdFJlbmRlcmVyV2FzUHNldWRvRWxlbWVudCA9IE5VTEw7CisgICAgICAgICAgICAgICAg
fQogICAgICAgICAgICAgICAgIGJveCA9IGJveC0+bmV4dExlYWZDaGlsZCgpOwotICAgICAgICAg
ICAgICAgIGlmICghYm94KQorICAgICAgICAgICAgICAgIGlmICghYm94KSB7CiAgICAgICAgICAg
ICAgICAgICAgIHJldHVybiBwcmltYXJ5RGlyZWN0aW9uID09IExUUiA/IG5leHRWaXN1YWxseURp
c3RpbmN0Q2FuZGlkYXRlKG1fZGVlcFBvc2l0aW9uKSA6IHByZXZpb3VzVmlzdWFsbHlEaXN0aW5j
dENhbmRpZGF0ZShtX2RlZXBQb3NpdGlvbik7CisgICAgICAgICAgICAgICAgfQogICAgICAgICAg
ICAgICAgIHJlbmRlcmVyID0gJmJveC0+cmVuZGVyZXIoKTsKICAgICAgICAgICAgICAgICBvZmZz
ZXQgPSBib3gtPmNhcmV0TGVmdG1vc3RPZmZzZXQoKTsKKyAgICAgICAgICAgICAgICAKKyAgICAg
ICAgICAgICAgICBza2lwQ3VycmVudCA9IGZhbHNlOworCiAgICAgICAgICAgICAgICAgY29udGlu
dWU7CiAgICAgICAgICAgICB9CisgICAgICAgICAgICAKKyAgICAgICAgICAgIGlmIChza2lwQ3Vy
cmVudCkgeworICAgICAgICAgICAgICAgIG9mZnNldCA9IGJveC0+aXNMZWZ0VG9SaWdodERpcmVj
dGlvbigpID8gcmVuZGVyZXItPm5leHRPZmZzZXQob2Zmc2V0KSA6IHJlbmRlcmVyLT5wcmV2aW91
c09mZnNldChvZmZzZXQpOworICAgICAgICAgICAgfQorICAgICAgICAgICAgc2tpcEN1cnJlbnQg
PSB0cnVlOwogCi0gICAgICAgICAgICBvZmZzZXQgPSBib3gtPmlzTGVmdFRvUmlnaHREaXJlY3Rp
b24oKSA/IHJlbmRlcmVyLT5uZXh0T2Zmc2V0KG9mZnNldCkgOiByZW5kZXJlci0+cHJldmlvdXNP
ZmZzZXQob2Zmc2V0KTsKLQogICAgICAgICAgICAgaW50IGNhcmV0TWluT2Zmc2V0ID0gYm94LT5j
YXJldE1pbk9mZnNldCgpOwogICAgICAgICAgICAgaW50IGNhcmV0TWF4T2Zmc2V0ID0gYm94LT5j
YXJldE1heE9mZnNldCgpOwogCi0gICAgICAgICAgICBpZiAob2Zmc2V0ID4gY2FyZXRNaW5PZmZz
ZXQgJiYgb2Zmc2V0IDwgY2FyZXRNYXhPZmZzZXQpCisgICAgICAgICAgICBpZiAoKG9mZnNldCA+
IGNhcmV0TWluT2Zmc2V0IHx8ICAob2Zmc2V0ID09IGNhcmV0TWluT2Zmc2V0ICYmIGVsZW1lbnRD
aGFuZ2VkKSkgJiYgb2Zmc2V0IDwgY2FyZXRNYXhPZmZzZXQpCiAgICAgICAgICAgICAgICAgYnJl
YWs7CiAKICAgICAgICAgICAgIGlmIChib3gtPmlzTGVmdFRvUmlnaHREaXJlY3Rpb24oKSA/IG9m
ZnNldCA+IGNhcmV0TWF4T2Zmc2V0IDogb2Zmc2V0IDwgY2FyZXRNaW5PZmZzZXQpIHsKQEAgLTMy
OCw5MCArNDU3LDEwOSBAQAogICAgICAgICAgICAgICAgIGJveCA9IG5leHRCb3g7CiAgICAgICAg
ICAgICAgICAgcmVuZGVyZXIgPSAmYm94LT5yZW5kZXJlcigpOwogICAgICAgICAgICAgICAgIG9m
ZnNldCA9IG5leHRCb3gtPmNhcmV0TGVmdG1vc3RPZmZzZXQoKTsKKyAgICAgICAgICAgICAgICAK
KyAgICAgICAgICAgICAgICAvLyBza2lwQ3VycmVudCBzaG91bGQgYmUgdHJ1ZSBpZiBhbmQgb25s
eSBpZiB3ZSBkb24ndCBlbmNvdW50ZXIgYW55CisgICAgICAgICAgICAgICAgLy8gcHNldWRvZWxl
bWVudHMgb3IgZWxlbWVudCBib3VuZGFyaWVzLgorICAgICAgICAgICAgICAgIHNraXBDdXJyZW50
ID0gdHJ1ZTsKKwogICAgICAgICAgICAgICAgIGNvbnRpbnVlOwogICAgICAgICAgICAgfQogCi0g
ICAgICAgICAgICBBU1NFUlQob2Zmc2V0ID09IGJveC0+Y2FyZXRSaWdodG1vc3RPZmZzZXQoKSk7
CisgICAgICAgICAgICAvLyBDaGFuZ2VkIGFzc2VydCB0byBpZiwgYmVjYXVzZSBpdCBjb3VsZCBh
bHNvIGJlIHRoZQorICAgICAgICAgICAgLy8gbGVmdCBvZmZzZXQuCisgICAgICAgICAgICBpZiAo
b2Zmc2V0ID09IGJveC0+Y2FyZXRSaWdodG1vc3RPZmZzZXQoKSkgewogCi0gICAgICAgICAgICB1
bnNpZ25lZCBjaGFyIGxldmVsID0gYm94LT5iaWRpTGV2ZWwoKTsKLSAgICAgICAgICAgIElubGlu
ZUJveCogbmV4dEJveCA9IGJveC0+bmV4dExlYWZDaGlsZCgpOworICAgICAgICAgICAgICAgIHVu
c2lnbmVkIGNoYXIgbGV2ZWwgPSBib3gtPmJpZGlMZXZlbCgpOworICAgICAgICAgICAgICAgIElu
bGluZUJveCogbmV4dEJveCA9IGJveC0+bmV4dExlYWZDaGlsZCgpOwogCi0gICAgICAgICAgICBp
ZiAoYm94LT5kaXJlY3Rpb24oKSA9PSBwcmltYXJ5RGlyZWN0aW9uKSB7Ci0gICAgICAgICAgICAg
ICAgaWYgKCFuZXh0Qm94KSB7Ci0gICAgICAgICAgICAgICAgICAgIElubGluZUJveCogbG9naWNh
bEVuZCA9IDA7Ci0gICAgICAgICAgICAgICAgICAgIGlmIChwcmltYXJ5RGlyZWN0aW9uID09IExU
UiA/IGJveC0+cm9vdCgpLmdldExvZ2ljYWxFbmRCb3hXaXRoTm9kZShsb2dpY2FsRW5kKSA6IGJv
eC0+cm9vdCgpLmdldExvZ2ljYWxTdGFydEJveFdpdGhOb2RlKGxvZ2ljYWxFbmQpKSB7Ci0gICAg
ICAgICAgICAgICAgICAgICAgICBib3ggPSBsb2dpY2FsRW5kOwotICAgICAgICAgICAgICAgICAg
ICAgICAgcmVuZGVyZXIgPSAmYm94LT5yZW5kZXJlcigpOwotICAgICAgICAgICAgICAgICAgICAg
ICAgb2Zmc2V0ID0gcHJpbWFyeURpcmVjdGlvbiA9PSBMVFIgPyBib3gtPmNhcmV0TWF4T2Zmc2V0
KCkgOiBib3gtPmNhcmV0TWluT2Zmc2V0KCk7CisgICAgICAgICAgICAgICAgaWYgKGJveC0+ZGly
ZWN0aW9uKCkgPT0gcHJpbWFyeURpcmVjdGlvbikgeworICAgICAgICAgICAgICAgICAgICBpZiAo
IW5leHRCb3gpIHsKKyAgICAgICAgICAgICAgICAgICAgICAgIElubGluZUJveCogbG9naWNhbEVu
ZCA9IDA7CisgICAgICAgICAgICAgICAgICAgICAgICBpZiAocHJpbWFyeURpcmVjdGlvbiA9PSBM
VFIgPyBib3gtPnJvb3QoKS5nZXRMb2dpY2FsRW5kQm94V2l0aE5vZGUobG9naWNhbEVuZCkgOiBi
b3gtPnJvb3QoKS5nZXRMb2dpY2FsU3RhcnRCb3hXaXRoTm9kZShsb2dpY2FsRW5kKSkgeworICAg
ICAgICAgICAgICAgICAgICAgICAgICAgIGJveCA9IGxvZ2ljYWxFbmQ7CisgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgcmVuZGVyZXIgPSAmYm94LT5yZW5kZXJlcigpOworICAgICAgICAgICAg
ICAgICAgICAgICAgICAgIG9mZnNldCA9IHByaW1hcnlEaXJlY3Rpb24gPT0gTFRSID8gYm94LT5j
YXJldE1heE9mZnNldCgpIDogYm94LT5jYXJldE1pbk9mZnNldCgpOworICAgICAgICAgICAgICAg
ICAgICAgICAgfQorICAgICAgICAgICAgICAgICAgICAgICAgYnJlYWs7CiAgICAgICAgICAgICAg
ICAgICAgIH0KLSAgICAgICAgICAgICAgICAgICAgYnJlYWs7Ci0gICAgICAgICAgICAgICAgfQog
Ci0gICAgICAgICAgICAgICAgaWYgKG5leHRCb3gtPmJpZGlMZXZlbCgpID49IGxldmVsKQotICAg
ICAgICAgICAgICAgICAgICBicmVhazsKKyAgICAgICAgICAgICAgICAgICAgaWYgKG5leHRCb3gt
PmJpZGlMZXZlbCgpID49IGxldmVsKQorICAgICAgICAgICAgICAgICAgICAgICAgYnJlYWs7CiAK
LSAgICAgICAgICAgICAgICBsZXZlbCA9IG5leHRCb3gtPmJpZGlMZXZlbCgpOworICAgICAgICAg
ICAgICAgICAgICBsZXZlbCA9IG5leHRCb3gtPmJpZGlMZXZlbCgpOwogCi0gICAgICAgICAgICAg
ICAgSW5saW5lQm94KiBwcmV2Qm94ID0gYm94OwotICAgICAgICAgICAgICAgIGRvIHsKLSAgICAg
ICAgICAgICAgICAgICAgcHJldkJveCA9IHByZXZCb3gtPnByZXZMZWFmQ2hpbGQoKTsKLSAgICAg
ICAgICAgICAgICB9IHdoaWxlIChwcmV2Qm94ICYmIHByZXZCb3gtPmJpZGlMZXZlbCgpID4gbGV2
ZWwpOworICAgICAgICAgICAgICAgICAgICBJbmxpbmVCb3gqIHByZXZCb3ggPSBib3g7CisgICAg
ICAgICAgICAgICAgICAgIGRvIHsKKyAgICAgICAgICAgICAgICAgICAgICAgIHByZXZCb3ggPSBw
cmV2Qm94LT5wcmV2TGVhZkNoaWxkKCk7CisgICAgICAgICAgICAgICAgICAgIH0gd2hpbGUgKHBy
ZXZCb3ggJiYgcHJldkJveC0+YmlkaUxldmVsKCkgPiBsZXZlbCk7CiAKLSAgICAgICAgICAgICAg
ICBpZiAocHJldkJveCAmJiBwcmV2Qm94LT5iaWRpTGV2ZWwoKSA9PSBsZXZlbCkgICAvLyBGb3Ig
ZXhhbXBsZSwgYWJjIEZFRCAxMjMgXiBDQkEKLSAgICAgICAgICAgICAgICAgICAgYnJlYWs7Cisg
ICAgICAgICAgICAgICAgICAgIGlmIChwcmV2Qm94ICYmIHByZXZCb3gtPmJpZGlMZXZlbCgpID09
IGxldmVsKSAgIC8vIEZvciBleGFtcGxlLCBhYmMgRkVEIDEyMyBeIENCQQorICAgICAgICAgICAg
ICAgICAgICAgICAgYnJlYWs7CiAKLSAgICAgICAgICAgICAgICAvLyBGb3IgZXhhbXBsZSwgYWJj
IDEyMyBeIENCQSBvciAxMjMgXiBDQkEgYWJjCi0gICAgICAgICAgICAgICAgYm94ID0gbmV4dEJv
eDsKLSAgICAgICAgICAgICAgICByZW5kZXJlciA9ICZib3gtPnJlbmRlcmVyKCk7Ci0gICAgICAg
ICAgICAgICAgb2Zmc2V0ID0gYm94LT5jYXJldExlZnRtb3N0T2Zmc2V0KCk7Ci0gICAgICAgICAg
ICAgICAgaWYgKGJveC0+ZGlyZWN0aW9uKCkgPT0gcHJpbWFyeURpcmVjdGlvbikKLSAgICAgICAg
ICAgICAgICAgICAgYnJlYWs7Ci0gICAgICAgICAgICAgICAgY29udGludWU7Ci0gICAgICAgICAg
ICB9CisgICAgICAgICAgICAgICAgICAgIC8vIEZvciBleGFtcGxlLCBhYmMgMTIzIF4gQ0JBIG9y
IDEyMyBeIENCQSBhYmMKKyAgICAgICAgICAgICAgICAgICAgYm94ID0gbmV4dEJveDsKKyAgICAg
ICAgICAgICAgICAgICAgcmVuZGVyZXIgPSAmYm94LT5yZW5kZXJlcigpOworICAgICAgICAgICAg
ICAgICAgICBvZmZzZXQgPSBib3gtPmNhcmV0TGVmdG1vc3RPZmZzZXQoKTsKKyAgICAgICAgICAg
ICAgICAgICAgaWYgKGJveC0+ZGlyZWN0aW9uKCkgPT0gcHJpbWFyeURpcmVjdGlvbikKKyAgICAg
ICAgICAgICAgICAgICAgICAgIGJyZWFrOworICAgICAgICAgICAgICAgICAgICBjb250aW51ZTsK
KyAgICAgICAgICAgICAgICB9CiAKLSAgICAgICAgICAgIHdoaWxlIChuZXh0Qm94ICYmICFuZXh0
Qm94LT5yZW5kZXJlcigpLm5vZGUoKSkKLSAgICAgICAgICAgICAgICBuZXh0Qm94ID0gbmV4dEJv
eC0+bmV4dExlYWZDaGlsZCgpOworICAgICAgICAgICAgICAgIHdoaWxlIChuZXh0Qm94ICYmICFu
ZXh0Qm94LT5yZW5kZXJlcigpLm5vZGUoKSkKKyAgICAgICAgICAgICAgICAgICAgbmV4dEJveCA9
IG5leHRCb3gtPm5leHRMZWFmQ2hpbGQoKTsKIAotICAgICAgICAgICAgaWYgKG5leHRCb3gpIHsK
LSAgICAgICAgICAgICAgICBib3ggPSBuZXh0Qm94OwotICAgICAgICAgICAgICAgIHJlbmRlcmVy
ID0gJmJveC0+cmVuZGVyZXIoKTsKLSAgICAgICAgICAgICAgICBvZmZzZXQgPSBib3gtPmNhcmV0
TGVmdG1vc3RPZmZzZXQoKTsKKyAgICAgICAgICAgICAgICBpZiAobmV4dEJveCkgeworICAgICAg
ICAgICAgICAgICAgICBib3ggPSBuZXh0Qm94OworICAgICAgICAgICAgICAgICAgICByZW5kZXJl
ciA9ICZib3gtPnJlbmRlcmVyKCk7CisgICAgICAgICAgICAgICAgICAgIG9mZnNldCA9IGJveC0+
Y2FyZXRMZWZ0bW9zdE9mZnNldCgpOwogCi0gICAgICAgICAgICAgICAgaWYgKGJveC0+YmlkaUxl
dmVsKCkgPiBsZXZlbCkgewotICAgICAgICAgICAgICAgICAgICBkbyB7Ci0gICAgICAgICAgICAg
ICAgICAgICAgICBuZXh0Qm94ID0gbmV4dEJveC0+bmV4dExlYWZDaGlsZCgpOwotICAgICAgICAg
ICAgICAgICAgICB9IHdoaWxlIChuZXh0Qm94ICYmIG5leHRCb3gtPmJpZGlMZXZlbCgpID4gbGV2
ZWwpOworICAgICAgICAgICAgICAgICAgICBpZiAoYm94LT5iaWRpTGV2ZWwoKSA+IGxldmVsKSB7
CisgICAgICAgICAgICAgICAgICAgICAgICBkbyB7CisgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgbmV4dEJveCA9IG5leHRCb3gtPm5leHRMZWFmQ2hpbGQoKTsKKyAgICAgICAgICAgICAgICAg
ICAgICAgIH0gd2hpbGUgKG5leHRCb3ggJiYgbmV4dEJveC0+YmlkaUxldmVsKCkgPiBsZXZlbCk7
CiAKLSAgICAgICAgICAgICAgICAgICAgaWYgKCFuZXh0Qm94IHx8IG5leHRCb3gtPmJpZGlMZXZl
bCgpIDwgbGV2ZWwpCi0gICAgICAgICAgICAgICAgICAgICAgICBjb250aW51ZTsKLSAgICAgICAg
ICAgICAgICB9Ci0gICAgICAgICAgICB9IGVsc2UgewotICAgICAgICAgICAgICAgIC8vIFRyYWls
aW5nIGVkZ2Ugb2YgYSBzZWNvbmRhcnkgcnVuLiBTZXQgdG8gdGhlIGxlYWRpbmcgZWRnZSBvZiB0
aGUgZW50aXJlIHJ1bi4KLSAgICAgICAgICAgICAgICB3aGlsZSAodHJ1ZSkgewotICAgICAgICAg
ICAgICAgICAgICB3aGlsZSAoSW5saW5lQm94KiBwcmV2Qm94ID0gYm94LT5wcmV2TGVhZkNoaWxk
KCkpIHsKLSAgICAgICAgICAgICAgICAgICAgICAgIGlmIChwcmV2Qm94LT5iaWRpTGV2ZWwoKSA8
IGxldmVsKQotICAgICAgICAgICAgICAgICAgICAgICAgICAgIGJyZWFrOwotICAgICAgICAgICAg
ICAgICAgICAgICAgYm94ID0gcHJldkJveDsKKyAgICAgICAgICAgICAgICAgICAgICAgIGlmICgh
bmV4dEJveCB8fCBuZXh0Qm94LT5iaWRpTGV2ZWwoKSA8IGxldmVsKQorICAgICAgICAgICAgICAg
ICAgICAgICAgICAgIGNvbnRpbnVlOwogICAgICAgICAgICAgICAgICAgICB9Ci0gICAgICAgICAg
ICAgICAgICAgIGlmIChib3gtPmJpZGlMZXZlbCgpID09IGxldmVsKQotICAgICAgICAgICAgICAg
ICAgICAgICAgYnJlYWs7Ci0gICAgICAgICAgICAgICAgICAgIGxldmVsID0gYm94LT5iaWRpTGV2
ZWwoKTsKLSAgICAgICAgICAgICAgICAgICAgd2hpbGUgKElubGluZUJveCogbmV4dEJveCA9IGJv
eC0+bmV4dExlYWZDaGlsZCgpKSB7Ci0gICAgICAgICAgICAgICAgICAgICAgICBpZiAobmV4dEJv
eC0+YmlkaUxldmVsKCkgPCBsZXZlbCkKKyAgICAgICAgICAgICAgICB9IGVsc2UgeworICAgICAg
ICAgICAgICAgICAgICAvLyBUcmFpbGluZyBlZGdlIG9mIGEgc2Vjb25kYXJ5IHJ1bi4gU2V0IHRv
IHRoZSBsZWFkaW5nIGVkZ2Ugb2YgdGhlIGVudGlyZSBydW4uCisgICAgICAgICAgICAgICAgICAg
IHdoaWxlICh0cnVlKSB7CisgICAgICAgICAgICAgICAgICAgICAgICB3aGlsZSAoSW5saW5lQm94
KiBwcmV2Qm94ID0gYm94LT5wcmV2TGVhZkNoaWxkKCkpIHsKKyAgICAgICAgICAgICAgICAgICAg
ICAgICAgICBpZiAocHJldkJveC0+YmlkaUxldmVsKCkgPCBsZXZlbCkKKyAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgYnJlYWs7CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgYm94
ID0gcHJldkJveDsKKyAgICAgICAgICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgICAgICAg
ICAgICAgIGlmIChib3gtPmJpZGlMZXZlbCgpID09IGxldmVsKQogICAgICAgICAgICAgICAgICAg
ICAgICAgICAgIGJyZWFrOwotICAgICAgICAgICAgICAgICAgICAgICAgYm94ID0gbmV4dEJveDsK
KyAgICAgICAgICAgICAgICAgICAgICAgIGxldmVsID0gYm94LT5iaWRpTGV2ZWwoKTsKKyAgICAg
ICAgICAgICAgICAgICAgICAgIHdoaWxlIChJbmxpbmVCb3gqIG5leHRCb3ggPSBib3gtPm5leHRM
ZWFmQ2hpbGQoKSkgeworICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlmIChuZXh0Qm94LT5i
aWRpTGV2ZWwoKSA8IGxldmVsKQorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBicmVh
azsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICBib3ggPSBuZXh0Qm94OworICAgICAgICAg
ICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgICAgICAgICAgICAgaWYgKGJveC0+YmlkaUxl
dmVsKCkgPT0gbGV2ZWwpCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgYnJlYWs7CisgICAg
ICAgICAgICAgICAgICAgICAgICBsZXZlbCA9IGJveC0+YmlkaUxldmVsKCk7CiAgICAgICAgICAg
ICAgICAgICAgIH0KLSAgICAgICAgICAgICAgICAgICAgaWYgKGJveC0+YmlkaUxldmVsKCkgPT0g
bGV2ZWwpCi0gICAgICAgICAgICAgICAgICAgICAgICBicmVhazsKLSAgICAgICAgICAgICAgICAg
ICAgbGV2ZWwgPSBib3gtPmJpZGlMZXZlbCgpOworICAgICAgICAgICAgICAgICAgICByZW5kZXJl
ciA9ICZib3gtPnJlbmRlcmVyKCk7CisgICAgICAgICAgICAgICAgICAgIG9mZnNldCA9IHByaW1h
cnlEaXJlY3Rpb24gPT0gTFRSID8gYm94LT5jYXJldE1heE9mZnNldCgpIDogYm94LT5jYXJldE1p
bk9mZnNldCgpOwogICAgICAgICAgICAgICAgIH0KLSAgICAgICAgICAgICAgICByZW5kZXJlciA9
ICZib3gtPnJlbmRlcmVyKCk7Ci0gICAgICAgICAgICAgICAgb2Zmc2V0ID0gcHJpbWFyeURpcmVj
dGlvbiA9PSBMVFIgPyBib3gtPmNhcmV0TWF4T2Zmc2V0KCkgOiBib3gtPmNhcmV0TWluT2Zmc2V0
KCk7CisgICAgICAgICAgICAgICAgYnJlYWs7CiAgICAgICAgICAgICB9Ci0gICAgICAgICAgICBi
cmVhazsKICAgICAgICAgfQorICAgICAgICAKKyAgICAgICAgTm9kZSAqbm9kZSA9IHJlbmRlcmVy
LT5ub2RlKCk7CisgICAgICAgIGlmIChub2RlLT5pc1BzZXVkb0VsZW1lbnQoKSkgeworICAgICAg
ICAgICAgUHNldWRvRWxlbWVudCAqZWx0ID0gZG93bmNhc3Q8UHNldWRvRWxlbWVudD4obm9kZSk7
CisgICAgICAgICAgICBub2RlID0gZWx0LT5ob3N0RWxlbWVudCgpOworICAgICAgICAgICAgCisg
ICAgICAgICAgICBpZiAob2Zmc2V0ID09IC0xICYmIHJlbmRlcmVySWZMYXN0UmVuZGVyZXJXYXNQ
c2V1ZG9FbGVtZW50KSB7CisgICAgICAgICAgICAgICAgb2Zmc2V0ID0gbm9kZS0+Y29tcHV0ZU5v
ZGVJbmRleCgpOworICAgICAgICAgICAgICAgIG5vZGUgPSBub2RlLT5wYXJlbnRFbGVtZW50KCk7
CisgICAgICAgICAgICB9CisgICAgICAgIH0KIAotICAgICAgICBwID0gY3JlYXRlTGVnYWN5RWRp
dGluZ1Bvc2l0aW9uKHJlbmRlcmVyLT5ub2RlKCksIG9mZnNldCk7CisgICAgICAgIHAgPSBjcmVh
dGVMZWdhY3lFZGl0aW5nUG9zaXRpb24obm9kZSwgb2Zmc2V0KTsKIAogICAgICAgICBpZiAoKHAu
aXNDYW5kaWRhdGUoKSAmJiBwLmRvd25zdHJlYW0oKSAhPSBkb3duc3RyZWFtU3RhcnQpIHx8IHAu
YXRTdGFydE9mVHJlZSgpIHx8IHAuYXRFbmRPZlRyZWUoKSkKICAgICAgICAgICAgIHJldHVybiBw
OwpAQCAtNDIzLDE4ICs1NzEsMTkgQEAKIFZpc2libGVQb3NpdGlvbiBWaXNpYmxlUG9zaXRpb246
OnJpZ2h0KGJvb2wgc3RheUluRWRpdGFibGVDb250ZW50KSBjb25zdAogewogICAgIFBvc2l0aW9u
IHBvcyA9IHJpZ2h0VmlzdWFsbHlEaXN0aW5jdENhbmRpZGF0ZSgpOwotICAgIC8vIEZJWE1FOiBX
aHkgY2FuJ3Qgd2UgbW92ZSBsZWZ0IGZyb20gdGhlIGxhc3QgcG9zaXRpb24gaW4gYSB0cmVlPwor
ICAgIC8vIEZJWE1FOiBXaHkgY2FuJ3Qgd2UgbW92ZSByaWdodCBmcm9tIHRoZSBmaXJzdCBwb3Np
dGlvbiBpbiBhIHRyZWU/CiAgICAgaWYgKHBvcy5hdFN0YXJ0T2ZUcmVlKCkgfHwgcG9zLmF0RW5k
T2ZUcmVlKCkpCiAgICAgICAgIHJldHVybiBWaXNpYmxlUG9zaXRpb24oKTsKIAotICAgIFZpc2li
bGVQb3NpdGlvbiByaWdodCA9IFZpc2libGVQb3NpdGlvbihwb3MsIERPV05TVFJFQU0pOwotICAg
IEFTU0VSVChyaWdodCAhPSAqdGhpcyk7CisgICAgVmlzaWJsZVBvc2l0aW9uIHJpZ2h0UG9zaXRp
b24gPSBWaXNpYmxlUG9zaXRpb24ocG9zLCBET1dOU1RSRUFNKTsKKyAgICAgICAgCisgICAgQVNT
RVJUKHJpZ2h0UG9zaXRpb24gIT0gKnRoaXMpOwogCiAgICAgaWYgKCFzdGF5SW5FZGl0YWJsZUNv
bnRlbnQpCi0gICAgICAgIHJldHVybiByaWdodDsKKyAgICAgICAgcmV0dXJuIHJpZ2h0UG9zaXRp
b247CiAKICAgICAvLyBGSVhNRTogVGhpcyBtYXkgbmVlZCB0byBkbyBzb21ldGhpbmcgZGlmZmVy
ZW50IGZyb20gImFmdGVyIi4KLSAgICByZXR1cm4gaG9ub3JFZGl0aW5nQm91bmRhcnlBdE9yQWZ0
ZXIocmlnaHQpOworICAgIHJldHVybiBob25vckVkaXRpbmdCb3VuZGFyeUF0T3JBZnRlcihyaWdo
dFBvc2l0aW9uKTsKIH0KIAogVmlzaWJsZVBvc2l0aW9uIFZpc2libGVQb3NpdGlvbjo6aG9ub3JF
ZGl0aW5nQm91bmRhcnlBdE9yQmVmb3JlKGNvbnN0IFZpc2libGVQb3NpdGlvbiAmcG9zKSBjb25z
dApAQCAtNDQ1LDkgKzU5NCwxNSBAQAogICAgIE5vZGUqIGhpZ2hlc3RSb290ID0gaGlnaGVzdEVk
aXRhYmxlUm9vdChkZWVwRXF1aXZhbGVudCgpKTsKICAgICAKICAgICAvLyBSZXR1cm4gZW1wdHkg
cG9zaXRpb24gaWYgcG9zIGlzIG5vdCBzb21ld2hlcmUgaW5zaWRlIHRoZSBlZGl0YWJsZSByZWdp
b24gY29udGFpbmluZyB0aGlzIHBvc2l0aW9uCi0gICAgaWYgKGhpZ2hlc3RSb290ICYmICFwb3Mu
ZGVlcEVxdWl2YWxlbnQoKS5kZXByZWNhdGVkTm9kZSgpLT5pc0Rlc2NlbmRhbnRPZihoaWdoZXN0
Um9vdCkpCi0gICAgICAgIHJldHVybiBWaXNpYmxlUG9zaXRpb24oKTsKLSAgICAgICAgCisgICAg
aWYgKGhpZ2hlc3RSb290KSB7CisgICAgICAgIGlmIChoaWdoZXN0Um9vdCAhPSBwb3MuZGVlcEVx
dWl2YWxlbnQoKS5kZXByZWNhdGVkTm9kZSgpIHx8CisgICAgICAgICAgICBwb3MuZGVlcEVxdWl2
YWxlbnQoKS5hbmNob3JUeXBlKCkgIT0gUG9zaXRpb246OlBvc2l0aW9uSXNPZmZzZXRJbkFuY2hv
cikgeworICAgICAgICAgICAgICAgIGlmICghcG9zLmRlZXBFcXVpdmFsZW50KCkuZGVwcmVjYXRl
ZE5vZGUoKS0+aXNEZXNjZW5kYW50T2YoaGlnaGVzdFJvb3QpKSB7CisgICAgICAgICAgICAgICAg
ICAgIHJldHVybiBWaXNpYmxlUG9zaXRpb24oKTsKKyAgICAgICAgICAgICAgICB9CisgICAgICAg
IH0KKyAgICB9CisgICAgCiAgICAgLy8gUmV0dXJuIHBvcyBpdHNlbGYgaWYgdGhlIHR3byBhcmUg
ZnJvbSB0aGUgdmVyeSBzYW1lIGVkaXRhYmxlIHJlZ2lvbiwgb3IgYm90aCBhcmUgbm9uLWVkaXRh
YmxlCiAgICAgLy8gRklYTUU6IEluIHRoZSBub24tZWRpdGFibGUgY2FzZSwganVzdCBiZWNhdXNl
IHRoZSBuZXcgcG9zaXRpb24gaXMgbm9uLWVkaXRhYmxlIGRvZXNuJ3QgbWVhbiBtb3ZlbWVudAog
ICAgIC8vIHRvIGl0IGlzIGFsbG93ZWQuICBWaXNpYmxlU2VsZWN0aW9uOjphZGp1c3RGb3JFZGl0
YWJsZUNvbnRlbnQgaGFzIHRoaXMgcHJvYmxlbSB0b28uCkBAIC00NzEsOCArNjI2LDE1IEBACiAg
ICAgTm9kZSogaGlnaGVzdFJvb3QgPSBoaWdoZXN0RWRpdGFibGVSb290KGRlZXBFcXVpdmFsZW50
KCkpOwogICAgIAogICAgIC8vIFJldHVybiBlbXB0eSBwb3NpdGlvbiBpZiBwb3MgaXMgbm90IHNv
bWV3aGVyZSBpbnNpZGUgdGhlIGVkaXRhYmxlIHJlZ2lvbiBjb250YWluaW5nIHRoaXMgcG9zaXRp
b24KLSAgICBpZiAoaGlnaGVzdFJvb3QgJiYgIXBvcy5kZWVwRXF1aXZhbGVudCgpLmRlcHJlY2F0
ZWROb2RlKCktPmlzRGVzY2VuZGFudE9mKGhpZ2hlc3RSb290KSkKLSAgICAgICAgcmV0dXJuIFZp
c2libGVQb3NpdGlvbigpOworICAgIGlmIChoaWdoZXN0Um9vdCkgeworICAgICAgICBpZiAoaGln
aGVzdFJvb3QgIT0gcG9zLmRlZXBFcXVpdmFsZW50KCkuZGVwcmVjYXRlZE5vZGUoKSB8fAorICAg
ICAgICAgICAgcG9zLmRlZXBFcXVpdmFsZW50KCkuYW5jaG9yVHlwZSgpICE9IFBvc2l0aW9uOjpQ
b3NpdGlvbklzT2Zmc2V0SW5BbmNob3IpIHsKKyAgICAgICAgICAgIGlmICghcG9zLmRlZXBFcXVp
dmFsZW50KCkuZGVwcmVjYXRlZE5vZGUoKS0+aXNEZXNjZW5kYW50T2YoaGlnaGVzdFJvb3QpKSB7
CisgICAgICAgICAgICAgICAgcmV0dXJuIFZpc2libGVQb3NpdGlvbigpOworICAgICAgICAgICAg
fQorICAgICAgICB9CisgICAgfQorCiAgICAgCiAgICAgLy8gUmV0dXJuIHBvcyBpdHNlbGYgaWYg
dGhlIHR3byBhcmUgZnJvbSB0aGUgdmVyeSBzYW1lIGVkaXRhYmxlIHJlZ2lvbiwgb3IgYm90aCBh
cmUgbm9uLWVkaXRhYmxlCiAgICAgLy8gRklYTUU6IEluIHRoZSBub24tZWRpdGFibGUgY2FzZSwg
anVzdCBiZWNhdXNlIHRoZSBuZXcgcG9zaXRpb24gaXMgbm9uLWVkaXRhYmxlIGRvZXNuJ3QgbWVh
biBtb3ZlbWVudApAQCAtNTI2LDggKzY4OCw5IEBACiAgICAgY2FuZGlkYXRlID0gcG9zaXRpb24u
ZG93bnN0cmVhbSgpOwogICAgIGlmIChjYW5kaWRhdGUuaXNDYW5kaWRhdGUoKSkKICAgICAgICAg
cmV0dXJuIGNhbmRpZGF0ZTsKKyAgICAKIAotICAgIC8vIFdoZW4gbmVpdGhlciB1cHN0cmVhbSBv
ciBkb3duc3RyZWFtIGdldHMgdXMgdG8gYSBjYW5kaWRhdGUgKHVwc3RyZWFtL2Rvd25zdHJlYW0g
d29uJ3QgbGVhdmUgCisgICAgLy8gV2hlbiBuZWl0aGVyIHVwc3RyZWFtIG9yIGRvd25zdHJlYW0g
Z2V0cyB1cyB0byBhIGNhbmRpZGF0ZSAodXBzdHJlYW0vZG93bnN0cmVhbSB3b24ndCBsZWF2ZQog
ICAgIC8vIGJsb2NrcyBvciBlbnRlciBuZXcgb25lcyksIHdlIHNlYXJjaCBmb3J3YXJkIGFuZCBi
YWNrd2FyZCB1bnRpbCB3ZSBmaW5kIG9uZS4KICAgICBQb3NpdGlvbiBuZXh0ID0gY2Fub25pY2Fs
aXplQ2FuZGlkYXRlKG5leHRDYW5kaWRhdGUocG9zaXRpb24pKTsKICAgICBQb3NpdGlvbiBwcmV2
ID0gY2Fub25pY2FsaXplQ2FuZGlkYXRlKHByZXZpb3VzQ2FuZGlkYXRlKHBvc2l0aW9uKSk7Cklu
ZGV4OiBTb3VyY2UvV2ViQ29yZS9lZGl0aW5nL1Zpc2libGVTZWxlY3Rpb24uY3BwCj09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT0KLS0tIFNvdXJjZS9XZWJDb3JlL2VkaXRpbmcvVmlzaWJsZVNlbGVjdGlvbi5jcHAJKHJldmlz
aW9uIDE3NDMyNCkKKysrIFNvdXJjZS9XZWJDb3JlL2VkaXRpbmcvVmlzaWJsZVNlbGVjdGlvbi5j
cHAJKHdvcmtpbmcgY29weSkKQEAgLTQyLDYgKzQyLDcgQEAKIAogVmlzaWJsZVNlbGVjdGlvbjo6
VmlzaWJsZVNlbGVjdGlvbigpCiAgICAgOiBtX2FmZmluaXR5KERPV05TVFJFQU0pCisgICAgLCBt
X2NoYW5nZU9ic2VydmVyKDApCiAgICAgLCBtX3NlbGVjdGlvblR5cGUoTm9TZWxlY3Rpb24pCiAg
ICAgLCBtX2Jhc2VJc0ZpcnN0KHRydWUpCiAgICAgLCBtX2lzRGlyZWN0aW9uYWwoZmFsc2UpCkBA
IC01Miw2ICs1Myw3IEBACiAgICAgOiBtX2Jhc2UocG9zKQogICAgICwgbV9leHRlbnQocG9zKQog
ICAgICwgbV9hZmZpbml0eShhZmZpbml0eSkKKyAgICAsIG1fY2hhbmdlT2JzZXJ2ZXIoMCkKICAg
ICAsIG1faXNEaXJlY3Rpb25hbChpc0RpcmVjdGlvbmFsKQogewogICAgIHZhbGlkYXRlKCk7CkBA
IC02MSw2ICs2Myw3IEBACiAgICAgOiBtX2Jhc2UoYmFzZSkKICAgICAsIG1fZXh0ZW50KGV4dGVu
dCkKICAgICAsIG1fYWZmaW5pdHkoYWZmaW5pdHkpCisgICAgLCBtX2NoYW5nZU9ic2VydmVyKDAp
CiAgICAgLCBtX2lzRGlyZWN0aW9uYWwoaXNEaXJlY3Rpb25hbCkKIHsKICAgICB2YWxpZGF0ZSgp
OwpAQCAtNzAsNiArNzMsNyBAQAogICAgIDogbV9iYXNlKHBvcy5kZWVwRXF1aXZhbGVudCgpKQog
ICAgICwgbV9leHRlbnQocG9zLmRlZXBFcXVpdmFsZW50KCkpCiAgICAgLCBtX2FmZmluaXR5KHBv
cy5hZmZpbml0eSgpKQorICAgICwgbV9jaGFuZ2VPYnNlcnZlcigwKQogICAgICwgbV9pc0RpcmVj
dGlvbmFsKGlzRGlyZWN0aW9uYWwpCiB7CiAgICAgdmFsaWRhdGUoKTsKQEAgLTc5LDYgKzgzLDcg
QEAKICAgICA6IG1fYmFzZShiYXNlLmRlZXBFcXVpdmFsZW50KCkpCiAgICAgLCBtX2V4dGVudChl
eHRlbnQuZGVlcEVxdWl2YWxlbnQoKSkKICAgICAsIG1fYWZmaW5pdHkoYmFzZS5hZmZpbml0eSgp
KQorICAgICwgbV9jaGFuZ2VPYnNlcnZlcigwKQogICAgICwgbV9pc0RpcmVjdGlvbmFsKGlzRGly
ZWN0aW9uYWwpCiB7CiAgICAgdmFsaWRhdGUoKTsKQEAgLTg4LDExICs5Myw0NiBAQAogICAgIDog
bV9iYXNlKHJhbmdlLT5zdGFydFBvc2l0aW9uKCkpCiAgICAgLCBtX2V4dGVudChyYW5nZS0+ZW5k
UG9zaXRpb24oKSkKICAgICAsIG1fYWZmaW5pdHkoYWZmaW5pdHkpCisgICAgLCBtX2NoYW5nZU9i
c2VydmVyKDApCiAgICAgLCBtX2lzRGlyZWN0aW9uYWwoaXNEaXJlY3Rpb25hbCkKIHsKICAgICB2
YWxpZGF0ZSgpOwogfQogCitWaXNpYmxlU2VsZWN0aW9uOjpWaXNpYmxlU2VsZWN0aW9uKGNvbnN0
IFZpc2libGVTZWxlY3Rpb24mIG90aGVyKQorICAgIDogbV9iYXNlKG90aGVyLm1fYmFzZSkKKyAg
ICAsIG1fZXh0ZW50KG90aGVyLm1fZXh0ZW50KQorICAgICwgbV9zdGFydChvdGhlci5tX3N0YXJ0
KQorICAgICwgbV9lbmQob3RoZXIubV9lbmQpCisgICAgLCBtX2FmZmluaXR5KG90aGVyLm1fYWZm
aW5pdHkpCisgICAgLCBtX2NoYW5nZU9ic2VydmVyKDApIC8vIE9ic2VydmVyIGlzIGFzc29jaWF0
ZWQgd2l0aCBvbmx5IG9uZSBWaXNpYmxlU2VsZWN0aW9uLCBzbyB0aGlzIHNob3VsZCBub3QgYmUg
Y29waWVkLgorICAgICwgbV9zZWxlY3Rpb25UeXBlKG90aGVyLm1fc2VsZWN0aW9uVHlwZSkKKyAg
ICAsIG1fYmFzZUlzRmlyc3Qob3RoZXIubV9iYXNlSXNGaXJzdCkKKyAgICAsIG1faXNEaXJlY3Rp
b25hbChvdGhlci5tX2lzRGlyZWN0aW9uYWwpCit7Cit9CisKK1Zpc2libGVTZWxlY3Rpb24mIFZp
c2libGVTZWxlY3Rpb246Om9wZXJhdG9yPShjb25zdCBWaXNpYmxlU2VsZWN0aW9uJiBvdGhlcikK
K3sKKyAgICBkaWRDaGFuZ2UoKTsKKworICAgIG1fYmFzZSA9IG90aGVyLm1fYmFzZTsKKyAgICBt
X2V4dGVudCA9IG90aGVyLm1fZXh0ZW50OworICAgIG1fc3RhcnQgPSBvdGhlci5tX3N0YXJ0Owor
ICAgIG1fZW5kID0gb3RoZXIubV9lbmQ7CisgICAgbV9hZmZpbml0eSA9IG90aGVyLm1fYWZmaW5p
dHk7CisgICAgbV9jaGFuZ2VPYnNlcnZlciA9IDA7CisgICAgbV9zZWxlY3Rpb25UeXBlID0gb3Ro
ZXIubV9zZWxlY3Rpb25UeXBlOworICAgIG1fYmFzZUlzRmlyc3QgPSBvdGhlci5tX2Jhc2VJc0Zp
cnN0OworICAgIG1faXNEaXJlY3Rpb25hbCA9IG90aGVyLm1faXNEaXJlY3Rpb25hbDsKKyAgICBy
ZXR1cm4gKnRoaXM7Cit9CisKK1Zpc2libGVTZWxlY3Rpb246On5WaXNpYmxlU2VsZWN0aW9uKCkK
K3sKKyAgICBkaWRDaGFuZ2UoKTsKK30KKwogVmlzaWJsZVNlbGVjdGlvbiBWaXNpYmxlU2VsZWN0
aW9uOjpzZWxlY3Rpb25Gcm9tQ29udGVudHNPZk5vZGUoTm9kZSogbm9kZSkKIHsKICAgICBBU1NF
UlQoIWVkaXRpbmdJZ25vcmVzQ29udGVudChub2RlKSk7CkBAIC0xMDEsMjYgKzE0MSwzOCBAQAog
CiB2b2lkIFZpc2libGVTZWxlY3Rpb246OnNldEJhc2UoY29uc3QgUG9zaXRpb24mIHBvc2l0aW9u
KQogeworICAgIFBvc2l0aW9uIG9sZEJhc2UgPSBtX2Jhc2U7CiAgICAgbV9iYXNlID0gcG9zaXRp
b247CiAgICAgdmFsaWRhdGUoKTsKKyAgICBpZiAobV9iYXNlICE9IG9sZEJhc2UpCisgICAgICAg
IGRpZENoYW5nZSgpOwogfQogCiB2b2lkIFZpc2libGVTZWxlY3Rpb246OnNldEJhc2UoY29uc3Qg
VmlzaWJsZVBvc2l0aW9uJiB2aXNpYmxlUG9zaXRpb24pCiB7CisgICAgUG9zaXRpb24gb2xkQmFz
ZSA9IG1fYmFzZTsKICAgICBtX2Jhc2UgPSB2aXNpYmxlUG9zaXRpb24uZGVlcEVxdWl2YWxlbnQo
KTsKICAgICB2YWxpZGF0ZSgpOworICAgIGlmIChtX2Jhc2UgIT0gb2xkQmFzZSkKKyAgICAgICAg
ZGlkQ2hhbmdlKCk7CiB9CiAKIHZvaWQgVmlzaWJsZVNlbGVjdGlvbjo6c2V0RXh0ZW50KGNvbnN0
IFBvc2l0aW9uJiBwb3NpdGlvbikKIHsKKyAgICBQb3NpdGlvbiBvbGRFeHRlbnQgPSBtX2V4dGVu
dDsKICAgICBtX2V4dGVudCA9IHBvc2l0aW9uOwogICAgIHZhbGlkYXRlKCk7CisgICAgaWYgKG1f
ZXh0ZW50ICE9IG9sZEV4dGVudCkKKyAgICAgICAgZGlkQ2hhbmdlKCk7CiB9CiAKIHZvaWQgVmlz
aWJsZVNlbGVjdGlvbjo6c2V0RXh0ZW50KGNvbnN0IFZpc2libGVQb3NpdGlvbiYgdmlzaWJsZVBv
c2l0aW9uKQogeworICAgIFBvc2l0aW9uIG9sZEV4dGVudCA9IG1fZXh0ZW50OwogICAgIG1fZXh0
ZW50ID0gdmlzaWJsZVBvc2l0aW9uLmRlZXBFcXVpdmFsZW50KCk7CiAgICAgdmFsaWRhdGUoKTsK
KyAgICBpZiAobV9leHRlbnQgIT0gb2xkRXh0ZW50KQorICAgICAgICBkaWRDaGFuZ2UoKTsKIH0K
IAogUGFzc1JlZlB0cjxSYW5nZT4gVmlzaWJsZVNlbGVjdGlvbjo6Zmlyc3RSYW5nZSgpIGNvbnN0
CkBAIC0xOTMsNyArMjQ1LDE0IEBACiAgICAgaWYgKGlzTm9uZSgpKQogICAgICAgICByZXR1cm4g
ZmFsc2U7CiAKKyAgICAvLyBGSVhNRTogRG8gd2UgbmVlZCB0byBjaGVjayBhbGwgb2YgdGhlbT8K
KyAgICBQb3NpdGlvbiBvbGRCYXNlID0gbV9iYXNlOworICAgIFBvc2l0aW9uIG9sZEV4dGVudCA9
IG1fZXh0ZW50OworICAgIFBvc2l0aW9uIG9sZFN0YXJ0ID0gbV9zdGFydDsKKyAgICBQb3NpdGlv
biBvbGRFbmQgPSBtX2VuZDsKICAgICB2YWxpZGF0ZShncmFudWxhcml0eSk7CisgICAgaWYgKG1f
YmFzZSAhPSBvbGRCYXNlIHx8IG1fZXh0ZW50ICE9IG9sZEV4dGVudCB8fCBtX3N0YXJ0ICE9IG9s
ZFN0YXJ0IHx8IG1fZW5kICE9IG9sZEVuZCkKKyAgICAgICAgZGlkQ2hhbmdlKCk7CiAgICAgcmV0
dXJuIHRydWU7CiB9CiAKQEAgLTIzNSwxMyArMjk0LDE3IEBACiAgICAgICAgIHJldHVybjsKIAog
ICAgIENoYXJhY3Rlckl0ZXJhdG9yIGNoYXJJdCgqc2VhcmNoUmFuZ2UsIFRleHRJdGVyYXRvckVt
aXRzQ2hhcmFjdGVyc0JldHdlZW5BbGxWaXNpYmxlUG9zaXRpb25zKTsKKyAgICBib29sIGNoYW5n
ZWQgPSBmYWxzZTsKIAogICAgIGZvciAoOyAhY2hhckl0LmF0RW5kKCkgJiYgY2hhckl0LnRleHQo
KS5sZW5ndGgoKTsgY2hhckl0LmFkdmFuY2UoMSkpIHsKICAgICAgICAgVUNoYXIgYyA9IGNoYXJJ
dC50ZXh0KClbMF07CiAgICAgICAgIGlmICgoIWlzU3BhY2VPck5ld2xpbmUoYykgJiYgYyAhPSBu
b0JyZWFrU3BhY2UpIHx8IGMgPT0gJ1xuJykKICAgICAgICAgICAgIGJyZWFrOwogICAgICAgICBt
X2VuZCA9IGNoYXJJdC5yYW5nZSgpLT5lbmRQb3NpdGlvbigpOworICAgICAgICBjaGFuZ2VkID0g
dHJ1ZTsKICAgICB9CisgICAgaWYgKGNoYW5nZWQpCisgICAgICAgIGRpZENoYW5nZSgpOwogfQog
CiB2b2lkIFZpc2libGVTZWxlY3Rpb246OnNldEJhc2VBbmRFeHRlbnRUb0RlZXBFcXVpdmFsZW50
cygpCkBAIC00NjcsNiArNTMwLDcgQEAKICAgICAgICAgbV9lbmQgPSBiYXNlOwogICAgIH0KICAg
ICBtX3NlbGVjdGlvblR5cGUgPSBiYXNlID09IGV4dGVudCA/IENhcmV0U2VsZWN0aW9uIDogUmFu
Z2VTZWxlY3Rpb247CisgICAgZGlkQ2hhbmdlKCk7CiB9CiAKIHN0YXRpYyBQb3NpdGlvbiBhZGp1
c3RQb3NpdGlvbkZvckVuZChjb25zdCBQb3NpdGlvbiYgY3VycmVudFBvc2l0aW9uLCBOb2RlKiBz
dGFydENvbnRhaW5lck5vZGUpCkBAIC02NjcsNiArNzMxLDMyIEBACiAgICAgcmV0dXJuIGlzPEhU
TUxJbnB1dEVsZW1lbnQ+KHRleHRDb250cm9sKSAmJiBkb3duY2FzdDxIVE1MSW5wdXRFbGVtZW50
PigqdGV4dENvbnRyb2wpLmlzUGFzc3dvcmRGaWVsZCgpOwogfQogCitWaXNpYmxlU2VsZWN0aW9u
OjpDaGFuZ2VPYnNlcnZlcjo6Q2hhbmdlT2JzZXJ2ZXIoKQoreworfQorCitWaXNpYmxlU2VsZWN0
aW9uOjpDaGFuZ2VPYnNlcnZlcjo6fkNoYW5nZU9ic2VydmVyKCkKK3sKK30KKwordm9pZCBWaXNp
YmxlU2VsZWN0aW9uOjpzZXRDaGFuZ2VPYnNlcnZlcihDaGFuZ2VPYnNlcnZlciYgb2JzZXJ2ZXIp
Cit7CisgICAgQVNTRVJUKCFtX2NoYW5nZU9ic2VydmVyKTsKKyAgICBtX2NoYW5nZU9ic2VydmVy
ID0gJm9ic2VydmVyOworfQorCit2b2lkIFZpc2libGVTZWxlY3Rpb246OmNsZWFyQ2hhbmdlT2Jz
ZXJ2ZXIoKQoreworICAgIEFTU0VSVChtX2NoYW5nZU9ic2VydmVyKTsKKyAgICBtX2NoYW5nZU9i
c2VydmVyID0gMDsKK30KKwordm9pZCBWaXNpYmxlU2VsZWN0aW9uOjpkaWRDaGFuZ2UoKQorewor
ICAgIGlmIChtX2NoYW5nZU9ic2VydmVyKQorICAgICAgICBtX2NoYW5nZU9ic2VydmVyLT5kaWRD
aGFuZ2VWaXNpYmxlU2VsZWN0aW9uKCk7Cit9CisKICNpZm5kZWYgTkRFQlVHCiAKIHZvaWQgVmlz
aWJsZVNlbGVjdGlvbjo6ZGVidWdQb3NpdGlvbigpIGNvbnN0CkluZGV4OiBTb3VyY2UvV2ViQ29y
ZS9lZGl0aW5nL1Zpc2libGVTZWxlY3Rpb24uaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29y
ZS9lZGl0aW5nL1Zpc2libGVTZWxlY3Rpb24uaAkocmV2aXNpb24gMTc0MzI0KQorKysgU291cmNl
L1dlYkNvcmUvZWRpdGluZy9WaXNpYmxlU2VsZWN0aW9uLmgJKHdvcmtpbmcgY29weSkKQEAgLTUw
LDYgKzUwLDExIEBACiAgICAgV0VCQ09SRV9FWFBPUlQgVmlzaWJsZVNlbGVjdGlvbihjb25zdCBW
aXNpYmxlUG9zaXRpb24mLCBib29sIGlzRGlyZWN0aW9uYWwgPSBmYWxzZSk7CiAgICAgV0VCQ09S
RV9FWFBPUlQgVmlzaWJsZVNlbGVjdGlvbihjb25zdCBWaXNpYmxlUG9zaXRpb24mLCBjb25zdCBW
aXNpYmxlUG9zaXRpb24mLCBib29sIGlzRGlyZWN0aW9uYWwgPSBmYWxzZSk7CiAKKyAgICBWaXNp
YmxlU2VsZWN0aW9uKGNvbnN0IFZpc2libGVTZWxlY3Rpb24mKTsKKyAgICBWaXNpYmxlU2VsZWN0
aW9uJiBvcGVyYXRvcj0oY29uc3QgVmlzaWJsZVNlbGVjdGlvbiYpOworCisgICAgV0VCQ09SRV9F
WFBPUlQgflZpc2libGVTZWxlY3Rpb24oKTsKKwogICAgIFdFQkNPUkVfRVhQT1JUIHN0YXRpYyBW
aXNpYmxlU2VsZWN0aW9uIHNlbGVjdGlvbkZyb21Db250ZW50c09mTm9kZShOb2RlKik7CiAKICAg
ICBTZWxlY3Rpb25UeXBlIHNlbGVjdGlvblR5cGUoKSBjb25zdCB7IHJldHVybiBtX3NlbGVjdGlv
blR5cGU7IH0KQEAgLTEwNywxNCArMTEyLDMwIEBACiAKICAgICBXRUJDT1JFX0VYUE9SVCBib29s
IGlzSW5QYXNzd29yZEZpZWxkKCkgY29uc3Q7CiAKKyAgICB2b2lkIHNldFdpdGhvdXRWYWxpZGF0
aW9uKGNvbnN0IFBvc2l0aW9uJiwgY29uc3QgUG9zaXRpb24mKTsKKworICAgIC8vIExpc3RlbmVy
IG9mIFZpc2libGVTZWxlY3Rpb24gbW9kaWZpY2F0aW9uLiBkaWRDaGFuZ2VWaXNpYmxlU2VsZWN0
aW9uKCkgd2lsbCBiZSBpbnZva2VkIHdoZW4gYmFzZSwgZXh0ZW50LCBzdGFydAorICAgIC8vIG9y
IGVuZCBpcyBtb3ZlZCB0byBhIGRpZmZlcmVudCBwb3NpdGlvbi4KKyAgICAvLworICAgIC8vIE9i
amVjdHMgaW1wbGVtZW50aW5nIHxDaGFuZ2VPYnNlcnZlcnwgaW50ZXJmYWNlIG11c3Qgb3V0bGl2
ZSB0aGUgVmlzaWJsZVNlbGVjdGlvbiBvYmplY3QuCisgICAgY2xhc3MgQ2hhbmdlT2JzZXJ2ZXIg
eworICAgICAgICBXVEZfTUFLRV9OT05DT1BZQUJMRShDaGFuZ2VPYnNlcnZlcik7CisgICAgcHVi
bGljOgorICAgICAgICBDaGFuZ2VPYnNlcnZlcigpOworICAgICAgICB2aXJ0dWFsIH5DaGFuZ2VP
YnNlcnZlcigpOworICAgICAgICB2aXJ0dWFsIHZvaWQgZGlkQ2hhbmdlVmlzaWJsZVNlbGVjdGlv
bigpID0gMDsKKyAgICB9OworCisgICAgdm9pZCBzZXRDaGFuZ2VPYnNlcnZlcihDaGFuZ2VPYnNl
cnZlciYpOworICAgIHZvaWQgY2xlYXJDaGFuZ2VPYnNlcnZlcigpOworICAgIHZvaWQgZGlkQ2hh
bmdlKCk7IC8vIEZpcmUgdGhlIGNoYW5nZSBvYnNlcnZlciwgaWYgYW55LgorCiAjaWZuZGVmIE5E
RUJVRwogICAgIHZvaWQgZGVidWdQb3NpdGlvbigpIGNvbnN0OwogICAgIHZvaWQgZm9ybWF0Rm9y
RGVidWdnZXIoY2hhciogYnVmZmVyLCB1bnNpZ25lZCBsZW5ndGgpIGNvbnN0OwogICAgIHZvaWQg
c2hvd1RyZWVGb3JUaGlzKCkgY29uc3Q7CiAjZW5kaWYKIAotICAgIHZvaWQgc2V0V2l0aG91dFZh
bGlkYXRpb24oY29uc3QgUG9zaXRpb24mLCBjb25zdCBQb3NpdGlvbiYpOwotCiBwcml2YXRlOgog
ICAgIHZvaWQgdmFsaWRhdGUoVGV4dEdyYW51bGFyaXR5ID0gQ2hhcmFjdGVyR3JhbnVsYXJpdHkp
OwogCkBAIC0xMzcsMTAgKzE1OCwxMyBAQAogCiAgICAgRUFmZmluaXR5IG1fYWZmaW5pdHk7ICAg
ICAgICAgICAvLyB0aGUgdXBzdHJlYW0vZG93bnN0cmVhbSBhZmZpbml0eSBvZiB0aGUgY2FyZXQK
IAorICAgIENoYW5nZU9ic2VydmVyKiBtX2NoYW5nZU9ic2VydmVyOworCiAgICAgLy8gdGhlc2Ug
YXJlIGNhY2hlZCwgY2FuIGJlIHJlY2FsY3VsYXRlZCBieSB2YWxpZGF0ZSgpCiAgICAgU2VsZWN0
aW9uVHlwZSBtX3NlbGVjdGlvblR5cGU7IC8vIE5vbmUsIENhcmV0LCBSYW5nZQogICAgIGJvb2wg
bV9iYXNlSXNGaXJzdCA6IDE7IC8vIFRydWUgaWYgYmFzZSBpcyBiZWZvcmUgdGhlIGV4dGVudAog
ICAgIGJvb2wgbV9pc0RpcmVjdGlvbmFsIDogMTsgLy8gTm9uLWRpcmVjdGlvbmFsIGlnbm9yZXMg
bV9iYXNlSXNGaXJzdCBhbmQgc2VsZWN0aW9uIGFsd2F5cyBleHRlbmRzIG9uIHNoaWZ0ICsgYXJy
b3cga2V5LgorCiB9OwogCiBpbmxpbmUgYm9vbCBvcGVyYXRvcj09KGNvbnN0IFZpc2libGVTZWxl
Y3Rpb24mIGEsIGNvbnN0IFZpc2libGVTZWxlY3Rpb24mIGIpCkluZGV4OiBTb3VyY2UvV2ViQ29y
ZS9lZGl0aW5nL1Zpc2libGVVbml0cy5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUv
ZWRpdGluZy9WaXNpYmxlVW5pdHMuY3BwCShyZXZpc2lvbiAxNzQzMjQpCisrKyBTb3VyY2UvV2Vi
Q29yZS9lZGl0aW5nL1Zpc2libGVVbml0cy5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTU1Miw2ICs1
NTIsOSBAQAogewogICAgIFBvc2l0aW9uIHBvcyA9IGMuZGVlcEVxdWl2YWxlbnQoKTsKICAgICBO
b2RlKiBib3VuZGFyeSA9IHBvcy5wYXJlbnRFZGl0aW5nQm91bmRhcnkoKTsKKyAgICAKKyAgICAv
KiBJZiB0aGVyZSdzIG5vdCBhbiBlZGl0YWJsZSBlbmNsb3NpbmcgZWxlbWVudCwgb3IgaWYgdGhl
IGVsZW1lbnQgaXMgaW4gYSBkZXRhY3RoZWQKKyAgICAgICBmcmFnbWVudCwgYmFpbC4gKi8KICAg
ICBpZiAoIWJvdW5kYXJ5KQogICAgICAgICByZXR1cm4gVmlzaWJsZVBvc2l0aW9uKCk7CiAKSW5k
ZXg6IFNvdXJjZS9XZWJDb3JlL2VkaXRpbmcvaHRtbGVkaXRpbmcuY3BwCj09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0t
IFNvdXJjZS9XZWJDb3JlL2VkaXRpbmcvaHRtbGVkaXRpbmcuY3BwCShyZXZpc2lvbiAxNzQzMjQp
CisrKyBTb3VyY2UvV2ViQ29yZS9lZGl0aW5nL2h0bWxlZGl0aW5nLmNwcAkod29ya2luZyBjb3B5
KQpAQCAtMzQ0LDYgKzM0NCwxMyBAQAogCiAgICAgaWYgKG5vZGUtPmhhc0NoaWxkTm9kZXMoKSkK
ICAgICAgICAgcmV0dXJuIG5vZGUtPmNvdW50Q2hpbGROb2RlcygpOworICAgIAorICAgIGlmIChu
b2RlLT5pc0VsZW1lbnROb2RlKCkpIHsKKyAgICAgICAgY29uc3QgRWxlbWVudCAqZWx0ID0gZG93
bmNhc3Q8RWxlbWVudD4obm9kZSk7CisgICAgICAgIGlmIChlbHQtPmJlZm9yZVBzZXVkb0VsZW1l
bnQoKSB8fCBlbHQtPmFmdGVyUHNldWRvRWxlbWVudCgpKSB7CisgICAgICAgICAgICByZXR1cm4g
MTsKKyAgICAgICAgfQorICAgIH0KIAogICAgIC8vIE5PVEU6IFRoaXMgc2hvdWxkIHByZWVtcHQg
dGhlIGNvdW50Q2hpbGROb2RlcygpIGZvciwgZS5nLiwgc2VsZWN0IG5vZGVzICh3aGF0IGRvZXMg
dGhpcyBtZWFuKT8KICAgICBpZiAoZWRpdGluZ0lnbm9yZXNDb250ZW50KG5vZGUpKQpJbmRleDog
U291cmNlL1dlYkNvcmUvcGFnZS9ET01TZWxlY3Rpb24uY3BwCj09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJj
ZS9XZWJDb3JlL3BhZ2UvRE9NU2VsZWN0aW9uLmNwcAkocmV2aXNpb24gMTc0MzI0KQorKysgU291
cmNlL1dlYkNvcmUvcGFnZS9ET01TZWxlY3Rpb24uY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0xOTIs
NiArMTkyLDcgQEAKIAogdm9pZCBET01TZWxlY3Rpb246OmNvbGxhcHNlKE5vZGUqIG5vZGUsIGlu
dCBvZmZzZXQsIEV4Y2VwdGlvbkNvZGUmIGVjKQogeworICAgIEFTU0VSVChub2RlKTsKICAgICBp
ZiAoIW1fZnJhbWUpCiAgICAgICAgIHJldHVybjsKIApAQCAtMjAzLDEwICsyMDQsMjAgQEAKICAg
ICBpZiAoIWlzVmFsaWRGb3JQb3NpdGlvbihub2RlKSkKICAgICAgICAgcmV0dXJuOwogCi0gICAg
Ly8gRklYTUU6IEVsaW1pbmF0ZSBsZWdhY3kgZWRpdGluZyBwb3NpdGlvbnMKLSAgICBtX2ZyYW1l
LT5zZWxlY3Rpb24oKS5tb3ZlVG8oY3JlYXRlTGVnYWN5RWRpdGluZ1Bvc2l0aW9uKG5vZGUsIG9m
ZnNldCksIERPV05TVFJFQU0pOworICAgIGlmICghbm9kZSkKKyAgICAgICAgcmV0dXJuOworCisg
ICAgLyogUmVmUHRyV2lsbEJlUmF3UHRyICovIFJlZlB0cjxSYW5nZT4gcmFuZ2UgPSBSYW5nZTo6
Y3JlYXRlKG5vZGUtPmRvY3VtZW50KCkpOworICAgIHJhbmdlLT5zZXRTdGFydChub2RlLCBvZmZz
ZXQpOyAvLyAsIGV4Y2VwdGlvblN0YXRlKTsKKyAgICByYW5nZS0+c2V0RW5kKG5vZGUsIG9mZnNl
dCk7IC8vICwgZXhjZXB0aW9uU3RhdGUpOworICAgIG1fZnJhbWUtPnNlbGVjdGlvbigpLnNldFNl
bGVjdGVkUmFuZ2UocmFuZ2UuZ2V0KCksIERPV05TVFJFQU0sIGZhbHNlLCBtX2ZyYW1lLT5zZWxl
Y3Rpb24oKS5pc0RpcmVjdGlvbmFsKCkpOwogfQogCit2b2lkIERPTVNlbGVjdGlvbjo6Y29sbGFw
c2UoTm9kZSogbm9kZSwgRXhjZXB0aW9uQ29kZSYgZXhjZXB0aW9uU3RhdGUpCit7CisgICAgY29s
bGFwc2Uobm9kZSwgMCwgZXhjZXB0aW9uU3RhdGUpOworfQorCiB2b2lkIERPTVNlbGVjdGlvbjo6
Y29sbGFwc2VUb0VuZChFeGNlcHRpb25Db2RlJiBlYykKIHsKICAgICBpZiAoIW1fZnJhbWUpCkBA
IC0zNjgsNyArMzc5LDcgQEAKICAgICAgICAgcmV0dXJuIFJhbmdlOjpjcmVhdGUoc2hhZG93QW5j
ZXN0b3ItPmRvY3VtZW50KCksIGNvbnRhaW5lciwgb2Zmc2V0LCBjb250YWluZXIsIG9mZnNldCk7
CiAgICAgfQogCi0gICAgcmV0dXJuIG1fZnJhbWUtPnNlbGVjdGlvbigpLnNlbGVjdGlvbigpLmZp
cnN0UmFuZ2UoKTsKKyAgICByZXR1cm4gbV9mcmFtZS0+c2VsZWN0aW9uKCkuZmlyc3RSYW5nZSgp
OwogfQogCiB2b2lkIERPTVNlbGVjdGlvbjo6cmVtb3ZlQWxsUmFuZ2VzKCkKQEAgLTM3OCw0NSAr
Mzg5LDYzIEBACiAgICAgbV9mcmFtZS0+c2VsZWN0aW9uKCkuY2xlYXIoKTsKIH0KIAotdm9pZCBE
T01TZWxlY3Rpb246OmFkZFJhbmdlKFJhbmdlKiByKQordm9pZCBET01TZWxlY3Rpb246OmFkZFJh
bmdlKFJhbmdlKiBuZXdSYW5nZSkKIHsKICAgICBpZiAoIW1fZnJhbWUpCiAgICAgICAgIHJldHVy
bjsKLSAgICBpZiAoIXIpCisgICAgLy8gRklYTUU6IFNob3VsZCB3ZSB0aHJvdyBET01FeGNlcHRp
b24gZm9yIGVycm9yIGNhc2VzIGJlbG93PworICAgIGlmICghbmV3UmFuZ2UpIHsKKyAgICAgICAg
YWRkQ29uc29sZUVycm9yKCJUaGUgZ2l2ZW4gcmFuZ2UgaXMgbnVsbC4iKTsKICAgICAgICAgcmV0
dXJuOworICAgIH0KKyAgICBpZiAoIW5ld1JhbmdlLT5zdGFydENvbnRhaW5lcigpKSB7CisgICAg
ICAgIGFkZENvbnNvbGVFcnJvcigiVGhlIGdpdmVuIHJhbmdlIGhhcyBubyBjb250YWluZXIuIFBl
cmhhcHMgJ2RldGFjaCgpJyBoYXMgYmVlbiBpbnZva2VkIG9uIGl0PyIpOworICAgICAgICByZXR1
cm47CisgICAgfQogCisKICAgICBGcmFtZVNlbGVjdGlvbiYgc2VsZWN0aW9uID0gbV9mcmFtZS0+
c2VsZWN0aW9uKCk7CiAKICAgICBpZiAoc2VsZWN0aW9uLmlzTm9uZSgpKSB7Ci0gICAgICAgIHNl
bGVjdGlvbi5tb3ZlVG8ocik7CisgICAgICAgIC8vIHNlbGVjdGlvbi5tb3ZlVG8ocik7CisgICAg
ICAgIHNlbGVjdGlvbi5zZXRTZWxlY3RlZFJhbmdlKG5ld1JhbmdlLCBWUF9ERUZBVUxUX0FGRklO
SVRZLCBmYWxzZSwgc2VsZWN0aW9uLmlzRGlyZWN0aW9uYWwoKSk7CiAgICAgICAgIHJldHVybjsK
ICAgICB9CiAKLSAgICBSZWZQdHI8UmFuZ2U+IHJhbmdlID0gc2VsZWN0aW9uLnNlbGVjdGlvbigp
LnRvTm9ybWFsaXplZFJhbmdlKCk7Ci0gICAgaWYgKHItPmNvbXBhcmVCb3VuZGFyeVBvaW50cyhS
YW5nZTo6U1RBUlRfVE9fU1RBUlQsIHJhbmdlLmdldCgpLCBJR05PUkVfRVhDRVBUSU9OKSA9PSAt
MSkgewotICAgICAgICAvLyBXZSBkb24ndCBzdXBwb3J0IGRpc2NvbnRpZ3VvdXMgc2VsZWN0aW9u
LiBXZSBkb24ndCBkbyBhbnl0aGluZyBpZiByIGFuZCByYW5nZSBkb24ndCBpbnRlcnNlY3QuCi0g
ICAgICAgIGlmIChyLT5jb21wYXJlQm91bmRhcnlQb2ludHMoUmFuZ2U6OlNUQVJUX1RPX0VORCwg
cmFuZ2UuZ2V0KCksIElHTk9SRV9FWENFUFRJT04pID4gLTEpIHsKLSAgICAgICAgICAgIGlmIChy
LT5jb21wYXJlQm91bmRhcnlQb2ludHMoUmFuZ2U6OkVORF9UT19FTkQsIHJhbmdlLmdldCgpLCBJ
R05PUkVfRVhDRVBUSU9OKSA9PSAtMSkgewotICAgICAgICAgICAgICAgIC8vIFRoZSBvcmlnaW5h
bCByYW5nZSBhbmQgciBpbnRlcnNlY3QuCi0gICAgICAgICAgICAgICAgc2VsZWN0aW9uLm1vdmVU
byhyLT5zdGFydFBvc2l0aW9uKCksIHJhbmdlLT5lbmRQb3NpdGlvbigpLCBET1dOU1RSRUFNKTsK
LSAgICAgICAgICAgIH0gZWxzZSB7Ci0gICAgICAgICAgICAgICAgLy8gciBjb250YWlucyB0aGUg
b3JpZ2luYWwgcmFuZ2UuCi0gICAgICAgICAgICAgICAgc2VsZWN0aW9uLm1vdmVUbyhyKTsKLSAg
ICAgICAgICAgIH0KLSAgICAgICAgfQotICAgIH0gZWxzZSB7Ci0gICAgICAgIC8vIFdlIGRvbid0
IHN1cHBvcnQgZGlzY29udGlndW91cyBzZWxlY3Rpb24uIFdlIGRvbid0IGRvIGFueXRoaW5nIGlm
IHIgYW5kIHJhbmdlIGRvbid0IGludGVyc2VjdC4KLSAgICAgICAgRXhjZXB0aW9uQ29kZSBlYyA9
IDA7Ci0gICAgICAgIGlmIChyLT5jb21wYXJlQm91bmRhcnlQb2ludHMoUmFuZ2U6OkVORF9UT19T
VEFSVCwgcmFuZ2UuZ2V0KCksIGVjKSA8IDEgJiYgIWVjKSB7Ci0gICAgICAgICAgICBpZiAoci0+
Y29tcGFyZUJvdW5kYXJ5UG9pbnRzKFJhbmdlOjpFTkRfVE9fRU5ELCByYW5nZS5nZXQoKSwgSUdO
T1JFX0VYQ0VQVElPTikgPT0gLTEpIHsKLSAgICAgICAgICAgICAgICAvLyBUaGUgb3JpZ2luYWwg
cmFuZ2UgY29udGFpbnMgci4KLSAgICAgICAgICAgICAgICBzZWxlY3Rpb24ubW92ZVRvKHJhbmdl
LmdldCgpKTsKLSAgICAgICAgICAgIH0gZWxzZSB7Ci0gICAgICAgICAgICAgICAgLy8gVGhlIG9y
aWdpbmFsIHJhbmdlIGFuZCByIGludGVyc2VjdC4KLSAgICAgICAgICAgICAgICBzZWxlY3Rpb24u
bW92ZVRvKHJhbmdlLT5zdGFydFBvc2l0aW9uKCksIHItPmVuZFBvc2l0aW9uKCksIERPV05TVFJF
QU0pOwotICAgICAgICAgICAgfQotICAgICAgICB9CisgICAgUmVmUHRyPFJhbmdlPiBvcmlnaW5h
bFJhbmdlID0gc2VsZWN0aW9uLmZpcnN0UmFuZ2UoKTsKKworICAgIGlmICgmb3JpZ2luYWxSYW5n
ZS0+c3RhcnRDb250YWluZXIoKS0+ZG9jdW1lbnQoKSAhPSAmbmV3UmFuZ2UtPnN0YXJ0Q29udGFp
bmVyKCktPmRvY3VtZW50KCkpIHsKKyAgICAgICAgYWRkQ29uc29sZUVycm9yKCJUaGUgZ2l2ZW4g
cmFuZ2UgZG9lcyBub3QgYmVsb25nIHRvIHRoZSBjdXJyZW50IHNlbGVjdGlvbidzIGRvY3VtZW50
LiIpOworICAgICAgICByZXR1cm47CiAgICAgfQorICAgIGlmICgmb3JpZ2luYWxSYW5nZS0+c3Rh
cnRDb250YWluZXIoKS0+dHJlZVNjb3BlKCkgIT0gJm5ld1JhbmdlLT5zdGFydENvbnRhaW5lcigp
LT50cmVlU2NvcGUoKSkgeworICAgICAgICBhZGRDb25zb2xlRXJyb3IoIlRoZSBnaXZlbiByYW5n
ZSBhbmQgdGhlIGN1cnJlbnQgc2VsZWN0aW9uIGJlbG9uZyB0byB0d28gZGlmZmVyZW50IGRvY3Vt
ZW50IGZyYWdtZW50cy4iKTsKKyAgICAgICAgcmV0dXJuOworICAgIH0KKworICAgIGlmIChvcmln
aW5hbFJhbmdlLT5jb21wYXJlQm91bmRhcnlQb2ludHMoUmFuZ2U6OlNUQVJUX1RPX0VORCwgbmV3
UmFuZ2UsIEFTU0VSVF9OT19FWENFUFRJT04pIDwgMAorICAgICAgICB8fCBuZXdSYW5nZS0+Y29t
cGFyZUJvdW5kYXJ5UG9pbnRzKFJhbmdlOjpTVEFSVF9UT19FTkQsIG9yaWdpbmFsUmFuZ2UuZ2V0
KCksIEFTU0VSVF9OT19FWENFUFRJT04pIDwgMCkgeworICAgICAgICBhZGRDb25zb2xlRXJyb3Io
IkRpc2NvbnRpZ3VvdXMgc2VsZWN0aW9uIGlzIG5vdCBzdXBwb3J0ZWQuIik7CisgICAgICAgIHJl
dHVybjsKKyAgICB9CisKKyAgICBpZiAob3JpZ2luYWxSYW5nZS0+Y29tcGFyZUJvdW5kYXJ5UG9p
bnRzKFJhbmdlOjpTVEFSVF9UT19FTkQsIG5ld1JhbmdlLCBBU1NFUlRfTk9fRVhDRVBUSU9OKSA8
IDAKKyAgICAgICAgfHwgbmV3UmFuZ2UtPmNvbXBhcmVCb3VuZGFyeVBvaW50cyhSYW5nZTo6U1RB
UlRfVE9fRU5ELCBvcmlnaW5hbFJhbmdlLmdldCgpLCBBU1NFUlRfTk9fRVhDRVBUSU9OKSA8IDAp
IHsKKyAgICAgICAgYWRkQ29uc29sZUVycm9yKCJEaXNjb250aWd1b3VzIHNlbGVjdGlvbiBpcyBu
b3Qgc3VwcG9ydGVkLiIpOworICAgICAgICByZXR1cm47CisgICAgfQorCisgICAgLy8gRklYTUU6
ICJNZXJnZSB0aGUgcmFuZ2VzIGlmIHRoZXkgaW50ZXJzZWN0IiBpcyBCbGluay1zcGVjaWZpYyBi
ZWhhdmlvcjsgb3RoZXIgYnJvd3NlcnMgc3VwcG9ydGluZyBkaXNjb250aWd1b3VzCisgICAgLy8g
c2VsZWN0aW9uIChvYnZpb3VzbHkpIGtlZXAgZWFjaCBSYW5nZSBhZGRlZCBhbmQgcmV0dXJuIGl0
IGluIGdldFJhbmdlQXQoKS4gQnV0IGl0J3MgdW5jbGVhciBpZiB3ZSBjYW4gcmVhbGx5CisgICAg
Ly8gZG8gdGhlIHNhbWUsIHNpbmNlIHdlIGRvbid0IHN1cHBvcnQgZGlzY29udGlndW91cyBzZWxl
Y3Rpb24uIEZ1cnRoZXIgZGlzY3Vzc2lvbnMgYXQKKyAgICAvLyA8aHR0cHM6Ly9jb2RlLmdvb2ds
ZS5jb20vcC9jaHJvbWl1bS9pc3N1ZXMvZGV0YWlsP2lkPTM1MzA2OT4uCisKKyAgICBSYW5nZSog
c3RhcnQgPSBvcmlnaW5hbFJhbmdlLT5jb21wYXJlQm91bmRhcnlQb2ludHMoUmFuZ2U6OlNUQVJU
X1RPX1NUQVJULCBuZXdSYW5nZSwgQVNTRVJUX05PX0VYQ0VQVElPTikgPCAwID8gb3JpZ2luYWxS
YW5nZS5nZXQoKSA6IG5ld1JhbmdlOworICAgIFJhbmdlKiBlbmQgPSBvcmlnaW5hbFJhbmdlLT5j
b21wYXJlQm91bmRhcnlQb2ludHMoUmFuZ2U6OkVORF9UT19FTkQsIG5ld1JhbmdlLCBBU1NFUlRf
Tk9fRVhDRVBUSU9OKSA8IDAgPyBuZXdSYW5nZSA6IG9yaWdpbmFsUmFuZ2UuZ2V0KCk7CisgICAg
UmVmUHRyPFJhbmdlPiBtZXJnZWQgPSBSYW5nZTo6Y3JlYXRlKG9yaWdpbmFsUmFuZ2UtPnN0YXJ0
Q29udGFpbmVyKCktPmRvY3VtZW50KCksIHN0YXJ0LT5zdGFydENvbnRhaW5lcigpLCBzdGFydC0+
c3RhcnRPZmZzZXQoKSwgZW5kLT5lbmRDb250YWluZXIoKSwgZW5kLT5lbmRPZmZzZXQoKSk7Cisg
ICAgRUFmZmluaXR5IGFmZmluaXR5ID0gc2VsZWN0aW9uLnNlbGVjdGlvbigpLmFmZmluaXR5KCk7
CisgICAgc2VsZWN0aW9uLnNldFNlbGVjdGVkUmFuZ2UobWVyZ2VkLmdldCgpLCBhZmZpbml0eSwg
ZmFsc2UsIHNlbGVjdGlvbi5pc0RpcmVjdGlvbmFsKCkpOworCiB9CiAKIHZvaWQgRE9NU2VsZWN0
aW9uOjpkZWxldGVGcm9tRG9jdW1lbnQoKQpAQCAtNTM0LDQgKzU2MywxMCBAQAogICAgIHJldHVy
biAmbm9kZS0+ZG9jdW1lbnQoKSA9PSBtX2ZyYW1lLT5kb2N1bWVudCgpOwogfQogCit2b2lkIERP
TVNlbGVjdGlvbjo6YWRkQ29uc29sZUVycm9yKGNvbnN0IFN0cmluZyYgbWVzc2FnZSkKK3sKKyAg
ICBBU1NFUlQobV9mcmFtZSk7CisgICAgbV9mcmFtZS0+ZG9jdW1lbnQoKS0+YWRkQ29uc29sZU1l
c3NhZ2UoTWVzc2FnZVNvdXJjZTo6SlMsIE1lc3NhZ2VMZXZlbDo6RXJyb3IsIG1lc3NhZ2UpOwor
fQorCiB9IC8vIG5hbWVzcGFjZSBXZWJDb3JlCkluZGV4OiBTb3VyY2UvV2ViQ29yZS9wYWdlL0RP
TVNlbGVjdGlvbi5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL3BhZ2UvRE9NU2VsZWN0
aW9uLmgJKHJldmlzaW9uIDE3NDMyNCkKKysrIFNvdXJjZS9XZWJDb3JlL3BhZ2UvRE9NU2VsZWN0
aW9uLmgJKHdvcmtpbmcgY29weSkKQEAgLTc3LDYgKzc3LDcgQEAKICAgICAgICAgYm9vbCBpc0Nv
bGxhcHNlZCgpIGNvbnN0OwogICAgICAgICBpbnQgcmFuZ2VDb3VudCgpIGNvbnN0OwogICAgICAg
ICB2b2lkIGNvbGxhcHNlKE5vZGUqLCBpbnQgb2Zmc2V0LCBFeGNlcHRpb25Db2RlJik7CisgICAg
ICAgIHZvaWQgY29sbGFwc2UoTm9kZSosIEV4Y2VwdGlvbkNvZGUmKTsKICAgICAgICAgdm9pZCBj
b2xsYXBzZVRvRW5kKEV4Y2VwdGlvbkNvZGUmKTsKICAgICAgICAgdm9pZCBjb2xsYXBzZVRvU3Rh
cnQoRXhjZXB0aW9uQ29kZSYpOwogICAgICAgICB2b2lkIGV4dGVuZChOb2RlKiwgaW50IG9mZnNl
dCwgRXhjZXB0aW9uQ29kZSYpOwpAQCAtOTMsOCArOTQsNiBAQAogICAgICAgICB2b2lkIGVtcHR5
KCk7CiAKICAgICBwcml2YXRlOgotICAgICAgICBjb25zdCBUcmVlU2NvcGUqIG1fdHJlZVNjb3Bl
OwotCiAgICAgICAgIGV4cGxpY2l0IERPTVNlbGVjdGlvbihjb25zdCBUcmVlU2NvcGUqKTsKIAog
ICAgICAgICAvLyBDb252ZW5pZW5jZSBtZXRob2QgZm9yIGFjY2Vzc29ycywgZG9lcyBub3QgTlVM
TCBjaGVjayBtX2ZyYW1lLgpAQCAtMTA0LDYgKzEwMywxMCBAQAogICAgICAgICBpbnQgc2hhZG93
QWRqdXN0ZWRPZmZzZXQoY29uc3QgUG9zaXRpb24mKSBjb25zdDsKIAogICAgICAgICBib29sIGlz
VmFsaWRGb3JQb3NpdGlvbihOb2RlKikgY29uc3Q7CisKKyAgICAgICAgdm9pZCBhZGRDb25zb2xl
RXJyb3IoY29uc3QgU3RyaW5nJiBtZXNzYWdlKTsKKworICAgICAgICBjb25zdCBUcmVlU2NvcGUq
IG1fdHJlZVNjb3BlOwogICAgIH07CiAKIH0gLy8gbmFtZXNwYWNlIFdlYkNvcmUKSW5kZXg6IFNv
dXJjZS9XZWJDb3JlL3BhZ2UvRE9NU2VsZWN0aW9uLmlkbAo9PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2Uv
V2ViQ29yZS9wYWdlL0RPTVNlbGVjdGlvbi5pZGwJKHJldmlzaW9uIDE3NDMyNCkKKysrIFNvdXJj
ZS9XZWJDb3JlL3BhZ2UvRE9NU2VsZWN0aW9uLmlkbAkod29ya2luZyBjb3B5KQpAQCAtNDEsOCAr
NDEsMTAgQEAKICAgICByZWFkb25seSBhdHRyaWJ1dGUgYm9vbGVhbiBpc0NvbGxhcHNlZDsKICAg
ICByZWFkb25seSBhdHRyaWJ1dGUgbG9uZyByYW5nZUNvdW50OwogCi0gICAgW1JhaXNlc0V4Y2Vw
dGlvbl0gdm9pZCBjb2xsYXBzZShbRGVmYXVsdD1VbmRlZmluZWRdIG9wdGlvbmFsIE5vZGUgbm9k
ZSwgCi0gICAgICAgICAgICAgICAgICBbRGVmYXVsdD1VbmRlZmluZWRdIG9wdGlvbmFsIGxvbmcg
aW5kZXgpOworICAgIC8vIFtSYWlzZXNFeGNlcHRpb25dIHZvaWQgY29sbGFwc2UoW0RlZmF1bHQ9
VW5kZWZpbmVkXSBvcHRpb25hbCBOb2RlIG5vZGUsIAorICAgICAgICAgICAgICAgICAgLy8gW0Rl
ZmF1bHQ9VW5kZWZpbmVkXSBvcHRpb25hbCBsb25nIGluZGV4KTsKKyAgICBbUmFpc2VzRXhjZXB0
aW9uLCBTdHJpY3RUeXBlQ2hlY2tpbmddIHZvaWQgY29sbGFwc2UoTm9kZSBub2RlLAorICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBvcHRpb25h
bCBsb25nIG9mZnNldCk7CiAgICAgW1JhaXNlc0V4Y2VwdGlvbl0gdm9pZCBjb2xsYXBzZVRvRW5k
KCk7CiAgICAgW1JhaXNlc0V4Y2VwdGlvbl0gdm9pZCBjb2xsYXBzZVRvU3RhcnQoKTsKIApAQCAt
NzksNiArODEsOSBAQAogICAgICAgICAgICAgICAgICAgICAgICAgICBbRGVmYXVsdD1VbmRlZmlu
ZWRdIG9wdGlvbmFsIGxvbmcgYmFzZU9mZnNldCwgCiAgICAgICAgICAgICAgICAgICAgICAgICAg
IFtEZWZhdWx0PVVuZGVmaW5lZF0gb3B0aW9uYWwgTm9kZSBleHRlbnROb2RlLCAKICAgICAgICAg
ICAgICAgICAgICAgICAgICAgW0RlZmF1bHQ9VW5kZWZpbmVkXSBvcHRpb25hbCBsb25nIGV4dGVu
dE9mZnNldCk7CisgICAgW0ltcGxlbWVudGVkQXM9Y29sbGFwc2UsIC8qIE1lYXN1cmVBcz1TZWxl
Y3Rpb25TZXRQb3NpdGlvbiwgKi8gUmFpc2VzRXhjZXB0aW9uLCBTdHJpY3RUeXBlQ2hlY2tpbmdd
IHZvaWQgc2V0UG9zaXRpb24oTm9kZSBub2RlLAorICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG9wdGlvbmFsIGxvbmcgb2Zmc2V0KTsKKwog
ICAgIFtSYWlzZXNFeGNlcHRpb25dIHZvaWQgc2V0UG9zaXRpb24oW0RlZmF1bHQ9VW5kZWZpbmVk
XSBvcHRpb25hbCBOb2RlIG5vZGUsIAogICAgICAgICAgICAgICAgICAgICAgW0RlZmF1bHQ9VW5k
ZWZpbmVkXSBvcHRpb25hbCBsb25nIG9mZnNldCk7CiAKSW5kZXg6IFNvdXJjZS9XZWJDb3JlL3Jl
bmRlcmluZy9JbmxpbmVCb3guY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL3JlbmRl
cmluZy9JbmxpbmVCb3guY3BwCShyZXZpc2lvbiAxNzQzMjQpCisrKyBTb3VyY2UvV2ViQ29yZS9y
ZW5kZXJpbmcvSW5saW5lQm94LmNwcAkod29ya2luZyBjb3B5KQpAQCAtMjM1LDggKzIzNSw5IEBA
CiAgICAgSW5saW5lQm94KiBsZWFmID0gMDsKICAgICBmb3IgKElubGluZUJveCogYm94ID0gcHJl
dk9uTGluZSgpOyBib3ggJiYgIWxlYWY7IGJveCA9IGJveC0+cHJldk9uTGluZSgpKQogICAgICAg
ICBsZWFmID0gYm94LT5pc0xlYWYoKSA/IGJveCA6IHRvSW5saW5lRmxvd0JveChib3gpLT5sYXN0
TGVhZkNoaWxkKCk7Ci0gICAgaWYgKCFsZWFmICYmIHBhcmVudCgpKQorICAgIGlmICghbGVhZiAm
JiBwYXJlbnQoKSkgewogICAgICAgICBsZWFmID0gcGFyZW50KCktPnByZXZMZWFmQ2hpbGQoKTsK
KyAgICB9CiAgICAgcmV0dXJuIGxlYWY7CiB9CiAKSW5kZXg6IFNvdXJjZS9XZWJDb3JlL3JlbmRl
cmluZy9JbmxpbmVGbG93Qm94LmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9yZW5k
ZXJpbmcvSW5saW5lRmxvd0JveC5jcHAJKHJldmlzaW9uIDE3NDMyNCkKKysrIFNvdXJjZS9XZWJD
b3JlL3JlbmRlcmluZy9JbmxpbmVGbG93Qm94LmNwcAkod29ya2luZyBjb3B5KQpAQCAtMSw1ICsx
LDYgQEAKIC8qCiAgKiBDb3B5cmlnaHQgKEMpIDIwMDMsIDIwMDQsIDIwMDUsIDIwMDYsIDIwMDcs
IDIwMDgsIDIwMDkgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICogUG9ydGlvbnMg
Q29weXJpZ2h0IChjKSAyMDE0IERhdmlkIEEuIEdhdHdvb2QuICBBbGwgcmlnaHRzIHJlc2VydmVk
LgogICoKICAqIFRoaXMgbGlicmFyeSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJp
YnV0ZSBpdCBhbmQvb3IKICAqIG1vZGlmeSBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBM
aWJyYXJ5IEdlbmVyYWwgUHVibGljCkBAIC0xNjM3LDcgKzE2MzgsNTAgQEAKICAgICAgICAgKytt
aW5MZXZlbDsKICAgICB9CiB9CisgICAgCitib29sIElubGluZUZsb3dCb3g6OmlzTGVhZigpIGNv
bnN0Cit7CisgICAgSW5saW5lQm94ICpwb3MgPSBtX2ZpcnN0Q2hpbGQ7CisgICAgCisgICAgaWYg
KCFwb3MpIHsKKyAgICAgICAgLy8gSW4gcHJhY3RpY2UsIHRoaXMgc2hvdWxkIG5ldmVyIGhhcHBl
bi4KKyAgICAgICAgcmV0dXJuIHRydWU7CisgICAgfQorICAgIAorICAgIC8qIFRoZSBib3ggaXMg
bm9ybWFsbHkgbm90IGEgbGVhZi4gIEhvd2V2ZXIsIHRyZWF0IGl0IGFzIGEgbGVhZiBpZiBpdHMg
Ym94CisgICAgICAgY29udGFpbnMgbm90aGluZyBidXQgOjpiZWZvcmUgYW5kIDo6YWZ0ZXIgcHNl
dWRvZWxlbWVudHMuCisgICAgICovCisgICAgd2hpbGUgKCghJnBvcy0+cmVuZGVyZXIoKSkgfHwg
cG9zLT5yZW5kZXJlcigpLmlzQW5vbnltb3VzKCkgfHwgIXBvcy0+cmVuZGVyZXIoKS5ub25Qc2V1
ZG9Ob2RlKCkpIHsKKyAgICAgICAgCisgICAgICAgIC8qIElmIGl0J3MgYSBib3ggdGhhdCBjb250
YWlucyBvdGhlciBib3hlcywgYW5kIGlmIGl0IGlzbid0IHRoZSBib3ggZm9yIGEKKyAgICAgICAg
ICAgcHNldWRvZWxlbWVudCwgZXhhbWluZSBpdHMgY2hpbGRyZW4gbmV4dC4gIElmIGl0J3MgYSBw
c2V1ZG9lbGVtZW50CisgICAgICAgICAgIGRvbid0IGxvb2sgaW5zaWRlLgorICAgICAgICAgKi8K
KyAgICAgICAgaWYgKHBvcy0+aXNJbmxpbmVGbG93Qm94KCkgJiYgcG9zLT5yZW5kZXJlcigpLm5v
blBzZXVkb05vZGUoKSkgeworICAgICAgICAgICAgSW5saW5lRmxvd0JveCAqdGVtcCA9IHN0YXRp
Y19jYXN0PElubGluZUZsb3dCb3ggKj4ocG9zKTsKKyAgICAgICAgICAgIGlmICh0ZW1wLT5maXJz
dENoaWxkKCkpIHsKKyAgICAgICAgICAgICAgICBwb3MgPSB0ZW1wLT5maXJzdENoaWxkKCk7Cisg
ICAgICAgICAgICAgICAgY29udGludWU7CisgICAgICAgICAgICB9CisgICAgICAgIH0KKyAgICAg
ICAgSW5saW5lQm94ICpuZXh0ID0gcG9zLT5uZXh0T25MaW5lKCk7CisgICAgICAgIGlmIChuZXh0
KSB7CisgICAgICAgICAgICBwb3MgPSBuZXh0OworICAgICAgICAgICAgY29udGludWU7CisgICAg
ICAgIH0KKyAgICAgICAgd2hpbGUgKHBvcy0+cGFyZW50KCkgJiYgcG9zLT5wYXJlbnQoKSAhPSB0
aGlzICYmICFwb3MtPnBhcmVudCgpLT5uZXh0T25MaW5lKCkpIHsKKyAgICAgICAgICAgIHBvcyA9
IHBvcy0+cGFyZW50KCk7CisgICAgICAgIH0KKyAgICAgICAgcG9zID0gcG9zLT5wYXJlbnQoKTsK
KyAgICAgICAgaWYgKCFwb3MpIHJldHVybiB0cnVlOworICAgICAgICBpZiAocG9zID09IHRoaXMp
IHJldHVybiB0cnVlOworICAgICAgICBwb3MgPSBwb3MtPm5leHRPbkxpbmUoKTsKKyAgICB9Cisg
ICAgCisgICAgcmV0dXJuIGZhbHNlOworfQogCisKICNpZm5kZWYgTkRFQlVHCiAKIGNvbnN0IGNo
YXIqIElubGluZUZsb3dCb3g6OmJveE5hbWUoKSBjb25zdApJbmRleDogU291cmNlL1dlYkNvcmUv
cmVuZGVyaW5nL0lubGluZUZsb3dCb3guaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9y
ZW5kZXJpbmcvSW5saW5lRmxvd0JveC5oCShyZXZpc2lvbiAxNzQzMjQpCisrKyBTb3VyY2UvV2Vi
Q29yZS9yZW5kZXJpbmcvSW5saW5lRmxvd0JveC5oCSh3b3JraW5nIGNvcHkpCkBAIC04NSw5ICs4
NSw5IEBACiAKICAgICBJbmxpbmVCb3gqIGZpcnN0Q2hpbGQoKSBjb25zdCB7IGNoZWNrQ29uc2lz
dGVuY3koKTsgcmV0dXJuIG1fZmlyc3RDaGlsZDsgfQogICAgIElubGluZUJveCogbGFzdENoaWxk
KCkgY29uc3QgeyBjaGVja0NvbnNpc3RlbmN5KCk7IHJldHVybiBtX2xhc3RDaGlsZDsgfQotCi0g
ICAgdmlydHVhbCBib29sIGlzTGVhZigpIGNvbnN0IG92ZXJyaWRlIGZpbmFsIHsgcmV0dXJuIGZh
bHNlOyB9CiAgICAgCisgICAgYm9vbCBpc0xlYWYoKSBjb25zdCBvdmVycmlkZSBmaW5hbDsKKyAg
ICAKICAgICBJbmxpbmVCb3gqIGZpcnN0TGVhZkNoaWxkKCkgY29uc3Q7CiAgICAgSW5saW5lQm94
KiBsYXN0TGVhZkNoaWxkKCkgY29uc3Q7CiAKQEAgLTMwMCw2ICszMDAsNyBAQAogICAgIHZvaWQg
YWRkVGV4dEJveFZpc3VhbE92ZXJmbG93KElubGluZVRleHRCb3gmLCBHbHlwaE92ZXJmbG93QW5k
RmFsbGJhY2tGb250c01hcCYsIExheW91dFJlY3QmIGxvZ2ljYWxWaXN1YWxPdmVyZmxvdyk7CiAg
ICAgdm9pZCBhZGRSZXBsYWNlZENoaWxkT3ZlcmZsb3coY29uc3QgSW5saW5lQm94KiwgTGF5b3V0
UmVjdCYgbG9naWNhbExheW91dE92ZXJmbG93LCBMYXlvdXRSZWN0JiBsb2dpY2FsVmlzdWFsT3Zl
cmZsb3cpOwogICAgIHZvaWQgY29uc3RyYWluVG9MaW5lVG9wQW5kQm90dG9tSWZOZWVkZWQoTGF5
b3V0UmVjdCYpIGNvbnN0OworICAgIAogCiBwcm90ZWN0ZWQ6CiAgICAgUmVmUHRyPFJlbmRlck92
ZXJmbG93PiBtX292ZXJmbG93OwpJbmRleDogU291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL1JlbmRl
ckJsb2NrRmxvdy5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL1Jl
bmRlckJsb2NrRmxvdy5jcHAJKHJldmlzaW9uIDE3NDMyNCkKKysrIFNvdXJjZS9XZWJDb3JlL3Jl
bmRlcmluZy9SZW5kZXJCbG9ja0Zsb3cuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0zMzUzLDcgKzMz
NTMsMTEgQEAKICAgICAgICAgICAgIHBvaW50ID0gcG9pbnQudHJhbnNwb3NlZFBvaW50KCk7CiAg
ICAgICAgIGlmIChjbG9zZXN0Qm94LT5yZW5kZXJlcigpLmlzUmVwbGFjZWQoKSkKICAgICAgICAg
ICAgIHJldHVybiBwb3NpdGlvbkZvclBvaW50UmVzcGVjdGluZ0VkaXRpbmdCb3VuZGFyaWVzKCp0
aGlzLCB0b1JlbmRlckJveChjbG9zZXN0Qm94LT5yZW5kZXJlcigpKSwgcG9pbnQpOwotICAgICAg
ICByZXR1cm4gY2xvc2VzdEJveC0+cmVuZGVyZXIoKS5wb3NpdGlvbkZvclBvaW50KHBvaW50LCBu
dWxscHRyKTsKKyAgICAgICAgaWYgKCFjbG9zZXN0Qm94LT5yZW5kZXJlcigpLmlzUmVuZGVySW5s
aW5lKCkgfHwgIXRvUmVuZGVySW5saW5lKGNsb3Nlc3RCb3gtPnJlbmRlcmVyKCkpLmZpcnN0TGlu
ZUJveCgpKSB7CisgICAgICAgICAgICAvKiBEbyB0aGlzIG9ubHkgaWYgaXQncyBub3QgYSBSZW5k
ZXJJbmxpbmUgb2JqZWN0IHdpdGggYSBmaXJzdCBsaW5lIGJveCwgb3IgZWxzZSBpdCB3aWxsCisg
ICAgICAgICAgICAgICBjYWxsIGJhY2sgdG8gaXRzIGVuY2xvc2luZyBsaW5lIGJveCwgYW5kIHdl
J2xsIGVuZCB1cCB3aXRoIGluZmluaXRlIHJlY3Vyc2lvbi4gKi8KKyAgICAgICAgICAgIHJldHVy
biBjbG9zZXN0Qm94LT5yZW5kZXJlcigpLnBvc2l0aW9uRm9yUG9pbnQocG9pbnQsIG51bGxwdHIp
OworICAgICAgICB9CiAgICAgfQogCiAgICAgaWYgKGxhc3RSb290Qm94V2l0aENoaWxkcmVuKSB7
CkluZGV4OiBTb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvUmVuZGVyQm94LmNwcAo9PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
Ci0tLSBTb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvUmVuZGVyQm94LmNwcAkocmV2aXNpb24gMTc0
MzI0KQorKysgU291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL1JlbmRlckJveC5jcHAJKHdvcmtpbmcg
Y29weSkKQEAgLTM2LDEyICszNiwxNiBAQAogI2luY2x1ZGUgIkdyYXBoaWNzQ29udGV4dC5oIgog
I2luY2x1ZGUgIkhUTUxCdXR0b25FbGVtZW50LmgiCiAjaW5jbHVkZSAiSFRNTEVsZW1lbnQuaCIK
KyNpbmNsdWRlICJQc2V1ZG9FbGVtZW50LmgiCiAjaW5jbHVkZSAiSFRNTEZyYW1lT3duZXJFbGVt
ZW50LmgiCiAjaW5jbHVkZSAiSFRNTElucHV0RWxlbWVudC5oIgogI2luY2x1ZGUgIkhUTUxOYW1l
cy5oIgogI2luY2x1ZGUgIkhUTUxUZXh0QXJlYUVsZW1lbnQuaCIKICNpbmNsdWRlICJIaXRUZXN0
UmVzdWx0LmgiCiAjaW5jbHVkZSAiSW5saW5lRWxlbWVudEJveC5oIgorI2luY2x1ZGUgIklubGlu
ZVRleHRCb3guaCIKKyNpbmNsdWRlICJOb2RlLmgiCisjaW5jbHVkZSAiTm9kZUxpc3QuaCIKICNp
bmNsdWRlICJQYWdlLmgiCiAjaW5jbHVkZSAiUGFpbnRJbmZvLmgiCiAjaW5jbHVkZSAiUmVuZGVy
Qm94UmVnaW9uSW5mby5oIgpAQCAtNTYsOCArNjAsMTAgQEAKICNpbmNsdWRlICJSZW5kZXJUYWJs
ZUNlbGwuaCIKICNpbmNsdWRlICJSZW5kZXJUaGVtZS5oIgogI2luY2x1ZGUgIlJlbmRlclZpZXcu
aCIKKyNpbmNsdWRlICJSZW5kZXJUZXh0LmgiCiAjaW5jbHVkZSAiU2Nyb2xsYmFyVGhlbWUuaCIK
ICNpbmNsdWRlICJUcmFuc2Zvcm1TdGF0ZS5oIgorI2luY2x1ZGUgIlZpc2libGVQb3NpdGlvbi5o
IgogI2luY2x1ZGUgImh0bWxlZGl0aW5nLmgiCiAjaW5jbHVkZSA8YWxnb3JpdGhtPgogI2luY2x1
ZGUgPG1hdGguaD4KQEAgLTQxMTcsMjYgKzQxMjMsMjM4IEBACiAgICAgY29tcHV0ZWRWYWx1ZXMu
bV9wb3NpdGlvbiA9IGxvZ2ljYWxUb3BQb3M7CiB9CiAKK2Jvb2wgUmVuZGVyQm94Ojpjb21wdXRl
UmVjdEZvclBzZXVkb0VsZW1lbnQoUmVuZGVyT2JqZWN0ICplbGVtZW50UmVuZGVyZXIsIFJlbmRl
ckVsZW1lbnQgKnBzZXVkb0VsZW1lbnRSZW5kZXJlciwgYm9vbCBmaXJzdCwgTGF5b3V0UmVjdCAm
bG9jYWxSZWN0KQoreworICAgIGlmIChwc2V1ZG9FbGVtZW50UmVuZGVyZXItPmVsZW1lbnQoKSkg
eworICAgICAgICBQc2V1ZG9FbGVtZW50ICpwZSA9IGZpcnN0ID8gcHNldWRvRWxlbWVudFJlbmRl
cmVyLT5lbGVtZW50KCktPmJlZm9yZVBzZXVkb0VsZW1lbnQoKSA6IHBzZXVkb0VsZW1lbnRSZW5k
ZXJlci0+ZWxlbWVudCgpLT5hZnRlclBzZXVkb0VsZW1lbnQoKTsKKyAgICAgICAgCisgICAgICAg
IGlmIChwZSkgeworICAgICAgICAgICAgbG9jYWxSZWN0ID0gcGUtPnJlbmRlcmVyKCktPmxvY2Fs
Q2FyZXRSZWN0KE5VTEwsIDApOworICAgICAgICAgICAgTGF5b3V0U2l6ZSBvZmZzZXQgPSBwc2V1
ZG9FbGVtZW50UmVuZGVyZXItPm9mZnNldEZyb21BbmNlc3RvckNvbnRhaW5lcih0aGlzKTsKKyAg
ICAgICAgICAgIAorICAgICAgICAgICAgbG9jYWxSZWN0Lm1vdmUob2Zmc2V0LndpZHRoKCksIG9m
ZnNldC5oZWlnaHQoKSk7CisgICAgICAgICAgICAKKyAgICAgICAgICAgIFJlbmRlckJveCAqcmIg
PSB0b1JlbmRlckJveChlbGVtZW50UmVuZGVyZXIpOworICAgICAgICAgICAgCisgICAgICAgICAg
ICBpZiAoZmlyc3QpIHsKKyAgICAgICAgICAgICAgICAvKiBNb3ZlIHRoZSBjYXJldCB0byB0aGUg
bGVmdCBvZiB0aGUgcHNldWRvZWxlbWVudC4gKi8KKyAgICAgICAgICAgICAgICBsb2NhbFJlY3Qu
c2V0WChyYi0+dG9wTGVmdExvY2F0aW9uKCkueCgpICsgcmItPnBhZGRpbmdMZWZ0KCkpOworICAg
ICAgICAgICAgfQorICAgICAgICAgICAgCisgICAgICAgICAgICAvLyBsb2NhbFJlY3QubW92ZShw
c2V1ZG9FbGVtZW50UmVuZGVyZXItPmZyYW1lUmVjdCgpLngoKSwgcHNldWRvRWxlbWVudFJlbmRl
cmVyLT5mcmFtZVJlY3QoKS55KCkpOworICAgICAgICAgICAgLy8gbG9jYWxSZWN0Lm1vdmUoLXRo
aXMtPmZyYW1lUmVjdCgpLngoKSwgLXRoaXMtPmZyYW1lUmVjdCgpLnkoKSk7CisgICAgICAgICAg
ICAKKyAgICAgICAgICAgIHJldHVybiB0cnVlOworICAgICAgICB9CisgICAgICAgIAorICAgIH0K
KyAgICByZXR1cm4gZmFsc2U7Cit9CisgICAgCisKKy8qIEdpdmVuIGFuIGVsZW1lbnQgdGhhdCBp
cyBjb250YWluZWQgd2l0aGluIHRoaXMgcmVuZGVyZXIncyBub2RlOgorIAorICAgSWYgZmlyc3Qg
aXMgdHJ1ZSwgcmV0dXJucyB0aGUgdXBwZXIgbGVmdCBjb3JuZXIgb2YgdGhlIGZpcnN0IGlubGlu
ZSBib3ggYXNzb2NpYXRlZCB3aXRoIHRoZSBlbGVtZW50LgorICAgSWYgZmlyc3QgaXMgZmFsc2Us
IHJldHVybnMgdGhlIHVwcGVyICpyaWdodCogY29ybmVyIG9mIHRoZSAqbGFzdCogaW5saW5lIGJv
eC4KKyAqLworTGF5b3V0UmVjdCBSZW5kZXJCb3g6OmZpcnN0T3JMYXN0Qm94SW5FbGVtZW50KEVs
ZW1lbnQgKmVuY2xvc2VkRWxlbWVudCwgYm9vbCBmaXJzdCwgaW50ICpudW1MaW5lQm94ZXMsIGJv
b2wgKnJlY29tcHV0ZUN1cnNvclNpemUpCit7CisgICAgUmVuZGVyT2JqZWN0ICpyZW5kZXJlciA9
IGVuY2xvc2VkRWxlbWVudC0+cmVuZGVyZXIoKTsKKyAgICAKKyAgICBpZiAobnVtTGluZUJveGVz
KQorICAgICAgICAqbnVtTGluZUJveGVzID0gMDsKKyAgICAKKyAgICBpZiAocmVjb21wdXRlQ3Vy
c29yU2l6ZSkKKyAgICAgICAgKnJlY29tcHV0ZUN1cnNvclNpemUgPSBmYWxzZTsKKyAgICAKKyAg
ICBpZiAocmVuZGVyZXItPmlzUmVuZGVyQmxvY2tGbG93KCkgJiYgIWZpcnN0KSB7CisgICAgICAg
IC8qIEZpbmQgdGhlIGxhc3QgaXRlbSBpbiB0aGUgZmxvdywgbm90IHRoZSByaWdodCBlZGdlIG9m
IHRoZSB0b3AgbGluZS4gKi8KKyAgICAgICAgUmVuZGVyQmxvY2tGbG93ICpibG9ja0Zsb3dSZW5k
ZXJlciA9IHRvUmVuZGVyQmxvY2tGbG93KHJlbmRlcmVyKTsKKyAgICAgICAgCisgICAgICAgIElu
bGluZUZsb3dCb3ggKmZpcnN0TGluZUJveCA9IGJsb2NrRmxvd1JlbmRlcmVyLT5maXJzdFJvb3RC
b3goKTsKKyAgICAgICAgSW5saW5lRmxvd0JveCAqbGFzdExpbmVCb3ggPSBmaXJzdCA/IGJsb2Nr
Rmxvd1JlbmRlcmVyLT5maXJzdFJvb3RCb3goKSA6IGJsb2NrRmxvd1JlbmRlcmVyLT5sYXN0Um9v
dEJveCgpOworICAgICAgICAKKyAgICAgICAgaWYgKCFmaXJzdExpbmVCb3ggfHwgIWxhc3RMaW5l
Qm94KSB7CisgICAgICAgICAgICAvKiBDYW4ndCBmaW5kIHRoZSBsYXN0IGJveC4gIEZha2UgaXQu
ICovCisgICAgICAgICAgICBMYXlvdXRSZWN0IHBlUmVjdDsKKyAgICAgICAgICAgIGlmIChjb21w
dXRlUmVjdEZvclBzZXVkb0VsZW1lbnQocmVuZGVyZXIsIGJsb2NrRmxvd1JlbmRlcmVyLCBmaXJz
dCwgcGVSZWN0KSkKKyAgICAgICAgICAgICAgICByZXR1cm4gcGVSZWN0OworICAgICAgICAgICAg
CisgICAgICAgICAgICByZXR1cm4gTGF5b3V0UmVjdCgpOworICAgICAgICB9CisgICAgICAgIAor
ICAgICAgICBJbmxpbmVCb3ggKmxhc3RJbmxpbmVCb3ggPSBmaXJzdCA/IGZpcnN0TGluZUJveC0+
Zmlyc3RDaGlsZCgpIDogbGFzdExpbmVCb3gtPmxhc3RDaGlsZCgpOworICAgICAgICAKKyAgICAg
ICAgTGF5b3V0UG9pbnQgcHJldmlvdXNCb3hPZmZzZXQgPSBMYXlvdXRQb2ludCgwLDApOworICAg
ICAgICBmb3IgKElubGluZUZsb3dCb3ggKmJveCA9IGZpcnN0TGluZUJveDsgYm94ICE9IGxhc3RM
aW5lQm94OyBib3ggPSBib3gtPm5leHRMaW5lQm94KCkpIHsKKyAgICAgICAgICAgIHByZXZpb3Vz
Qm94T2Zmc2V0Lm1vdmUoMCwgYm94LT5mcmFtZVJlY3QoKS5oZWlnaHQoKSk7CisgICAgICAgIH0K
KworICAgICAgICBMYXlvdXRSZWN0IGxhc3RMaW5lQm94RnJhbWVSZWN0KGxhc3RMaW5lQm94LT5m
cmFtZVJlY3QoKSk7CisgICAgICAgIExheW91dFJlY3QgbGFzdElubGluZUJveEZyYW1lUmVjdChs
YXN0SW5saW5lQm94LT5mcmFtZVJlY3QoKSk7CisKKyAgICAgICAgTGF5b3V0UG9pbnQgcG9pbnQg
PSBMYXlvdXRQb2ludChwcmV2aW91c0JveE9mZnNldC54KCkgKyBsYXN0TGluZUJveEZyYW1lUmVj
dC54KCkgKyBsYXN0SW5saW5lQm94RnJhbWVSZWN0LngoKSwKKyAgICAgICAgICAgICAgICAgICAg
ICAgICAgIHByZXZpb3VzQm94T2Zmc2V0LnkoKSArIGxhc3RMaW5lQm94RnJhbWVSZWN0LnkoKSAr
IGxhc3RJbmxpbmVCb3hGcmFtZVJlY3QueSgpKTsgLy8gRG9uJ3QgYWRkIGhlaWdodDsgd2Ugd2Fu
dCB0aGUgdXBwZXIgcmlnaHQsIG5vdCBsb3dlci4KKyAgICAgICAgCisgICAgICAgIGlmIChmaXJz
dExpbmVCb3ggPT0gbGFzdExpbmVCb3gpIHsKKyAgICAgICAgICAgIC8qIEZvciBzb21lIHJlYXNv
biwgc2luZ2xlLWxpbmUgYm94ZXMgcmVwb3J0IHRoZWlyIGZyYW1lIGRpZmZlcmVudGx5LiAqLwor
ICAgICAgICAgICAgUmVuZGVyQm94ICpyYiA9IHRvUmVuZGVyQm94KHJlbmRlcmVyKTsKKyAgICAg
ICAgICAgIAorICAgICAgICAgICAgTGF5b3V0UG9pbnQgYmxvY2tQb3NpdGlvbiA9IHJiLT50b3BM
ZWZ0TG9jYXRpb24oKTsKKyAgICAgICAgICAgIHBvaW50LnNldFkoYmxvY2tQb3NpdGlvbi55KCkp
OworICAgICAgICB9CisgICAgICAgIHJldHVybiBMYXlvdXRSZWN0KHBvaW50LngoKSwgcG9pbnQu
eSgpLCBsYXN0SW5saW5lQm94RnJhbWVSZWN0LndpZHRoKCksIGxhc3RJbmxpbmVCb3hGcmFtZVJl
Y3QuaGVpZ2h0KCkpOworICAgIH0gZWxzZSBpZiAocmVuZGVyZXItPmlzQm94KCkpIHsKKyAgICAg
ICAgUmVuZGVyQm94ICpyYiA9IHRvUmVuZGVyQm94KHJlbmRlcmVyKTsKKworICAgICAgICBpZiAo
cmVjb21wdXRlQ3Vyc29yU2l6ZSkKKyAgICAgICAgICAgICpyZWNvbXB1dGVDdXJzb3JTaXplID0g
dHJ1ZTsKKyAgICAgICAgICAgIAorICAgICAgICByZXR1cm4gTGF5b3V0UmVjdChyYi0+dG9wTGVm
dExvY2F0aW9uKCkueCgpICsgcmItPnBhZGRpbmdMZWZ0KCksCisgICAgICAgICAgICAgICAgICAg
ICAgICAgIHJiLT50b3BMZWZ0TG9jYXRpb24oKS55KCkgKyByYi0+cGFkZGluZ1RvcCgpLAorICAg
ICAgICAgICAgICAgICAgICAgICAgICByYi0+d2lkdGgoKSAtIHJiLT5wYWRkaW5nTGVmdCgpIC0g
cmItPnBhZGRpbmdSaWdodCgpLAorICAgICAgICAgICAgICAgICAgICAgICAgICByYi0+aGVpZ2h0
KCkgLSByYi0+cGFkZGluZ1RvcCgpIC0gcmItPnBhZGRpbmdCb3R0b20oKSk7CisgICAgfQorCisg
ICAgYXNzZXJ0KHJlbmRlcmVyLT5pc0lubGluZSgpKTsKKyAgICAKKyAgICBSZW5kZXJJbmxpbmUg
KnJpID0gdG9SZW5kZXJJbmxpbmUocmVuZGVyZXIpOworICAgIAorICAgIElubGluZUJveCAqaWIg
PSBmaXJzdCA/IHJpLT5maXJzdExpbmVCb3hJbmNsdWRpbmdDdWxsaW5nKCkgOiByaS0+bGFzdExp
bmVCb3hJbmNsdWRpbmdDdWxsaW5nKCk7CisgICAgCisgICAgTGF5b3V0UmVjdCBmcmFtZVJlY3Qo
aWItPmZyYW1lUmVjdCgpKTsKKyAgICAKKyAgICBMYXlvdXRQb2ludCByZXRQb3NpdGlvbiA9IGZy
YW1lUmVjdC5sb2NhdGlvbigpOworICAgIAorICAgIC8qIEJpemFycmVseSwgZXZlbiB0aG91Z2gg
dGhlc2UgYXJlIGxpbmUgYm94ZXMuLi4gKi8KKyAgICBmb3IgKElubGluZUJveCAqbGluZUJveCA9
IHJpLT5maXJzdExpbmVCb3hJbmNsdWRpbmdDdWxsaW5nKCk7CisgICAgICAgICBsaW5lQm94ICYm
IGxpbmVCb3ggIT0gaWI7IGxpbmVCb3ggPSBsaW5lQm94LT5uZXh0T25MaW5lKCkpIHsKKyAgICAg
ICAgICAgICAgICByZXRQb3NpdGlvbi5tb3ZlKDAsIGxpbmVCb3gtPmZyYW1lUmVjdCgpLmhlaWdo
dCgpKTsKKyAgICAgICAgICAgICAgICBpZiAobnVtTGluZUJveGVzKQorICAgICAgICAgICAgICAg
ICAgICAoKm51bUxpbmVCb3hlcykrKzsKKyAgICB9CisgICAgCisgICAgaWYgKG51bUxpbmVCb3hl
cykKKyAgICAgICAgKCpudW1MaW5lQm94ZXMpKys7CisgICAgCisgICAgaWYgKCFmaXJzdCkgewor
ICAgICAgICBSZW5kZXJTdHlsZSAqZWxlbWVudFN0eWxlID0gdGhpcy0+ZWxlbWVudCgpLT5jb21w
dXRlZFN0eWxlKCk7CisgICAgICAgIHJldFBvc2l0aW9uLm1vdmUoMCwgLWVsZW1lbnRTdHlsZS0+
cGFkZGluZ0JvdHRvbSgpLnZhbHVlKCkpOworICAgIH0KKyAgICAKKyAgICByZXR1cm4gTGF5b3V0
UmVjdChyZXRQb3NpdGlvbi54KCksIHJldFBvc2l0aW9uLnkoKSwgaWItPndpZHRoKCksIGliLT5o
ZWlnaHQoKSk7Cit9CisgICAgCisKIExheW91dFJlY3QgUmVuZGVyQm94Ojpsb2NhbENhcmV0UmVj
dChJbmxpbmVCb3gqIGJveCwgaW50IGNhcmV0T2Zmc2V0LCBMYXlvdXRVbml0KiBleHRyYVdpZHRo
VG9FbmRPZkxpbmUpCiB7CiAgICAgLy8gVmlzaWJsZVBvc2l0aW9ucyBhdCBvZmZzZXRzIGluc2lk
ZSBjb250YWluZXJzIGVpdGhlciBhKSByZWZlciB0byB0aGUgcG9zaXRpb25zIGJlZm9yZS9hZnRl
cgotICAgIC8vIHRob3NlIGNvbnRhaW5lcnMgKHRhYmxlcyBhbmQgc2VsZWN0IGVsZW1lbnRzKSBv
ciBiKSByZWZlciB0byB0aGUgcG9zaXRpb24gaW5zaWRlIGFuIGVtcHR5IGJsb2NrLgotICAgIC8v
IFRoZXkgbmV2ZXIgcmVmZXIgdG8gY2hpbGRyZW4uCisgICAgLy8gdGhvc2UgY29udGFpbmVycyAo
dGFibGVzIGFuZCBzZWxlY3QgZWxlbWVudHMpLCBiKSByZWZlciB0byB0aGUgcG9zaXRpb24gaW5z
aWRlIGFuIGVtcHR5IGJsb2NrLAorICAgIC8vIG9yIGMpIHJlZmVyIHRvIHRoZSBwb3NpdGlvbiBi
ZXR3ZWVuIGFkamFjZW50IGNoaWxkIGVsZW1lbnRzIHRoYXQgaGF2ZSA6OmFmdGVyIGFuZCA6OmJl
Zm9yZQorICAgIC8vIHBzZXVkb2VsZW1lbnRzLiAgSW4gdGhlIGNhc2Ugb2YgYyksICJib3giIGlz
IHRoZSBjaGlsZCBlbGVtZW50IGFmdGVyIHRoZSBpbnNlcnRpb24gcG9pbnQuCiAgICAgLy8gRklY
TUU6IFBhaW50IHRoZSBjYXJldHMgaW5zaWRlIGVtcHR5IGJsb2NrcyBkaWZmZXJlbnRseSB0aGFu
IHRoZSBjYXJldHMgYmVmb3JlL2FmdGVyIGVsZW1lbnRzLgogCiAgICAgTGF5b3V0UmVjdCByZWN0
KGxvY2F0aW9uKCksIExheW91dFNpemUoY2FyZXRXaWR0aCwgaGVpZ2h0KCkpKTsKICAgICBib29s
IGx0ciA9IGJveCA/IGJveC0+aXNMZWZ0VG9SaWdodERpcmVjdGlvbigpIDogc3R5bGUoKS5pc0xl
ZnRUb1JpZ2h0RGlyZWN0aW9uKCk7Ci0KKyAgICAKICAgICBpZiAoKCFjYXJldE9mZnNldCkgXiBs
dHIpCi0gICAgICAgIHJlY3QubW92ZShMYXlvdXRTaXplKHdpZHRoKCkgLSBjYXJldFdpZHRoLCAw
KSk7CisgICAgICAgICAgICByZWN0Lm1vdmUoTGF5b3V0U2l6ZSh3aWR0aCgpIC0gY2FyZXRXaWR0
aCwgMCkpOworICAgIAorICAgIGlmIChlbGVtZW50KCkpIHsKKyAgICAgICAgTm9kZSAqY2hpbGRu
b2RlOworICAgICAgICBSZW5kZXJPYmplY3QgKmNoaWxkTm9kZVJlbmRlcmVyID0gTlVMTDsKKyAg
ICAgICAgCisgICAgICAgIGJvb2wgYXRFbmQgPSBmYWxzZTsKKyAgICAgICAgdW5zaWduZWQgb2Zm
c2V0ID0gMDsKKyAgICAgICAgCisgICAgICAgIGlmIChjYXJldE9mZnNldCA8IDApIHsKKyAgICAg
ICAgICAgIGNoaWxkbm9kZSA9IGVsZW1lbnQoKS0+YmVmb3JlUHNldWRvRWxlbWVudCgpOworICAg
ICAgICAgICAgY2hpbGROb2RlUmVuZGVyZXIgPSBjaGlsZG5vZGUgPyBjaGlsZG5vZGUtPnJlbmRl
cmVyKCkgOiBOVUxMOworICAgICAgICAgICAgYXRFbmQgPSB0cnVlOworICAgICAgICAgICAgb2Zm
c2V0ID0gMTsKKyAgICAgICAgfSBlbHNlIGlmICgodW5zaWduZWQpY2FyZXRPZmZzZXQgPCBlbGVt
ZW50KCktPmNvdW50Q2hpbGROb2RlcygpKSB7CisgICAgICAgICAgICBjaGlsZG5vZGUgPSBlbGVt
ZW50KCktPnRyYXZlcnNlVG9DaGlsZEF0KGNhcmV0T2Zmc2V0KTsKIAorICAgICAgICAgICAgLyog
Rm9yIGEgbm9uLXJlbmRlcmVkIHRleHQgbm9kZSwgaWYgdGhlIGluc2VydGlvbiBwb2ludAorICAg
ICAgICAgICAgIGlzIGF0IHRoZSBiZWdpbm5pbmcsIGRyYXcgdGhlIGN1cnNvciBhZnRlciB0aGUg
cHJldmlvdXMKKyAgICAgICAgICAgICBlbGVtZW50LgorICAgICAgICAgICAgICovCisgICAgICAg
ICAgICBib29sIGF0RW5kID0gZmFsc2U7CisgICAgICAgICAgICAKKyAgICAgICAgICAgIHdoaWxl
IChjaGlsZG5vZGUgJiYgIWNoaWxkbm9kZS0+cmVuZGVyZXIoKSkgeworICAgICAgICAgICAgICAg
IGNoaWxkbm9kZSA9IGNoaWxkbm9kZS0+cHJldmlvdXNTaWJsaW5nKCk7CisgICAgICAgICAgICAg
ICAgYXRFbmQgPSB0cnVlOworICAgICAgICAgICAgfQorICAgICAgICAgICAgaWYgKGNoaWxkbm9k
ZS0+aXNFbGVtZW50Tm9kZSgpKSB7CisgICAgICAgICAgICAgICAgRWxlbWVudCAqY2hpbGRFbHQg
PSBkb3duY2FzdDxFbGVtZW50PihjaGlsZG5vZGUpOworICAgICAgICAgICAgICAgIGNoaWxkTm9k
ZVJlbmRlcmVyID0gY2hpbGRFbHQtPnJlbmRlcmVyKCk7CisgICAgICAgICAgICAgICAgCisgICAg
ICAgICAgICAgICAgaWYgKGF0RW5kICYmIGNoaWxkRWx0LT5hZnRlclBzZXVkb0VsZW1lbnQoKSkg
eworICAgICAgICAgICAgICAgICAgICBjaGlsZG5vZGUgPSBjaGlsZEVsdC0+YWZ0ZXJQc2V1ZG9F
bGVtZW50KCk7CisgICAgICAgICAgICAgICAgICAgIG9mZnNldCA9IDE7CisgICAgICAgICAgICAg
ICAgfSBlbHNlIGlmICghYXRFbmQgJiYgY2hpbGRFbHQtPmJlZm9yZVBzZXVkb0VsZW1lbnQoKSkg
eworICAgICAgICAgICAgICAgICAgICBjaGlsZG5vZGUgPSBjaGlsZEVsdC0+YmVmb3JlUHNldWRv
RWxlbWVudCgpOworICAgICAgICAgICAgICAgICAgICBvZmZzZXQgPSAtMTsKKyAgICAgICAgICAg
ICAgICB9IGVsc2UgeworICAgICAgICAgICAgICAgICAgICBvZmZzZXQgPSBhdEVuZCA/IGNoaWxk
RWx0LT5jb3VudENoaWxkTm9kZXMoKSA6IC0xOworICAgICAgICAgICAgICAgIH0KKyAgICAgICAg
ICAgIH0gZWxzZSB7CisgICAgICAgICAgICAgICAgICAgIG9mZnNldCA9IGF0RW5kID8gY2hpbGRu
b2RlLT5tYXhDaGFyYWN0ZXJPZmZzZXQoKSA6IDA7CisgICAgICAgICAgICB9CisgICAgICAgIH0g
ZWxzZSB7CisgICAgICAgICAgICBjaGlsZG5vZGUgPSBlbGVtZW50KCktPmFmdGVyUHNldWRvRWxl
bWVudCgpOworICAgICAgICAgICAgY2hpbGROb2RlUmVuZGVyZXIgPSBjaGlsZG5vZGUgPyBjaGls
ZG5vZGUtPnJlbmRlcmVyKCkgOiBOVUxMOworICAgICAgICAgICAgb2Zmc2V0ID0gLTE7CisgICAg
ICAgIH0KKworICAgICAgICBpZiAoY2hpbGRub2RlICYmIGNoaWxkbm9kZS0+cmVuZGVyZXIoKSkg
eworICAgICAgICAgICAgTGF5b3V0UmVjdCBwc2V1ZG9FbGVtZW50UmVjdCA9IGNoaWxkbm9kZS0+
cmVuZGVyZXIoKS0+bG9jYWxDYXJldFJlY3QoYm94LCBvZmZzZXQpOworICAgICAgICAgICAgCisg
ICAgICAgICAgICBMYXlvdXRTaXplIG9mZnNldCA9IGNoaWxkbm9kZS0+cmVuZGVyZXIoKS0+b2Zm
c2V0RnJvbUFuY2VzdG9yQ29udGFpbmVyKHRoaXMpOworICAgICAgICAgICAgCisgICAgICAgICAg
ICBwc2V1ZG9FbGVtZW50UmVjdC5tb3ZlKG9mZnNldC53aWR0aCgpLCBvZmZzZXQuaGVpZ2h0KCkp
OworICAgICAgICAgICAgICAgICAgICAgICAgCisgICAgICAgICAgICByZXR1cm4gcHNldWRvRWxl
bWVudFJlY3Q7CisgICAgICAgIH0KKyAgICB9CisKICAgICBpZiAoYm94KSB7CiAgICAgICAgIGNv
bnN0IFJvb3RJbmxpbmVCb3gmIHJvb3RCb3ggPSBib3gtPnJvb3QoKTsKICAgICAgICAgTGF5b3V0
VW5pdCB0b3AgPSByb290Qm94LmxpbmVUb3AoKTsKICAgICAgICAgcmVjdC5zZXRZKHRvcCk7CiAg
ICAgICAgIHJlY3Quc2V0SGVpZ2h0KHJvb3RCb3gubGluZUJvdHRvbSgpIC0gdG9wKTsKKworICAg
ICAgICBOb2RlICpub2RlID0gYm94LT5yZW5kZXJlcigpLm5vZGUoKTsKKyAgICAgICAgaWYgKG5v
ZGUgJiYgIW5vZGUtPmZpcnN0Q2hpbGQoKSkKKyAgICAgICAgeworICAgICAgICAgICAgLyogSWYg
YW4gZWxlbWVudCBjb250YWlucyBjaGlsZHJlbiwgdGhlIGluc2VydGlvbiBjYXJldCBpcyB0eXBp
Y2FsbHkKKyAgICAgICAgICAgICAgIGNvbXB1dGVkIGJhc2VkIG9uIHRoZSBwb3NpdGlvbiBvZiB0
aG9zZSBjaGlsZHJlbiwgd2hpY2ggdGFrZXMKKyAgICAgICAgICAgICAgIGludG8gYWNjb3VudCBh
bnkgOjpiZWZvcmUgcHNldWRvLWVsZW1lbnRzIGluIHRoZSBwYXJlbnQgZWxlbWVudC4KKyAgICAg
ICAgICAgICAKKyAgICAgICAgICAgICAgIEhvd2V2ZXIsIGlmIGFuIGVsZW1lbnQgY29udGFpbnMg
bm8gY2hpbGRyZW4sIHRoZSA6OmJlZm9yZQorICAgICAgICAgICAgICAgcHNldWRvLWVsZW1lbnQn
cyB3aWR0aCBtdXN0IGJlIGFkZGVkIHRvIHRoZSBsZWZ0IG1hcmdpbi4KKyAgICAgICAgICAgICAg
IE90aGVyd2lzZSwgdGhlIGluc2VydGlvbiBjYXJldCB3b3VsZCBiZSB0byB0aGUgbGVmdCBvZiB0
aGUKKyAgICAgICAgICAgICAgICpvdXRzaWRlKiBvZiB0aGUgZWxlbWVudCAoYmVmb3JlIHRoZSA6
OmJlZm9yZSBjb250ZW50KSwKKyAgICAgICAgICAgICAgIHJhdGhlciB0aGFuIHRvIHRoZSBsZWZ0
IG9mIHdoZXJlIGEgY29udGFpbmVkIHRleHQgbm9kZSB3b3VsZAorICAgICAgICAgICAgICAgYmUg
aWYgb25lIGV4aXN0ZWQuCisgICAgICAgICAgICAgKi8KKyAgICAgICAgICAgIEVsZW1lbnQgKmVs
dCA9IGRvd25jYXN0PEVsZW1lbnQ+KG5vZGUpOworICAgICAgICAgICAgUHNldWRvRWxlbWVudCAq
YmVmb3JlUHNldWRvRWxlbWVudCA9IGVsdC0+YmVmb3JlUHNldWRvRWxlbWVudCgpOworICAgICAg
ICAgICAgUmVuZGVyT2JqZWN0KiByZW5kZXJPYmplY3QgPSBiZWZvcmVQc2V1ZG9FbGVtZW50LT5y
ZW5kZXJlcigpOworICAgICAgICAgICAgCisgICAgICAgICAgICBpZiAocmVuZGVyT2JqZWN0LT5p
c0lubGluZSgpKSB7CisgICAgICAgICAgICAgICAgUmVuZGVySW5saW5lICpyZW5kZXJJbmxpbmUg
PSB0b1JlbmRlcklubGluZShyZW5kZXJPYmplY3QpOworICAgICAgICAgICAgICAgIAorICAgICAg
ICAgICAgICAgIHJlY3QubW92ZShyZW5kZXJJbmxpbmUtPm9mZnNldFdpZHRoKCksMCk7CisgICAg
ICAgICAgICAgICAgCisgICAgICAgICAgICAgICAgcmVuZGVySW5saW5lID0gbmlsOworICAgICAg
ICAgICAgfQorICAgICAgICAgICAgCisgICAgICAgICAgICByZW5kZXJPYmplY3QgPSBuaWw7Cisg
ICAgICAgIH0KICAgICB9CiAKKyAgICAKICAgICAvLyBJZiBoZWlnaHQgb2YgYm94IGlzIHNtYWxs
ZXIgdGhhbiBmb250IGhlaWdodCwgdXNlIHRoZSBsYXR0ZXIgb25lLAogICAgIC8vIG90aGVyd2lz
ZSB0aGUgY2FyZXQgbWlnaHQgYmVjb21lIGludmlzaWJsZS4KICAgICAvLwpAQCAtNDE1MSw3ICs0
MzY5LDcgQEAKIAogICAgIGlmIChleHRyYVdpZHRoVG9FbmRPZkxpbmUpCiAgICAgICAgICpleHRy
YVdpZHRoVG9FbmRPZkxpbmUgPSB4KCkgKyB3aWR0aCgpIC0gcmVjdC5tYXhYKCk7Ci0KKyAgICAK
ICAgICAvLyBNb3ZlIHRvIGxvY2FsIGNvb3JkcwogICAgIHJlY3QubW92ZUJ5KC1sb2NhdGlvbigp
KTsKIApAQCAtNDE2Miw3ICs0MzgwLDcgQEAKICAgICAgICAgcmVjdC5zZXRYKHJlY3QueCgpICsg
Ym9yZGVyTGVmdCgpICsgcGFkZGluZ0xlZnQoKSk7CiAgICAgICAgIHJlY3Quc2V0WShyZWN0Lnko
KSArIHBhZGRpbmdUb3AoKSArIGJvcmRlclRvcCgpKTsKICAgICB9Ci0KKyAgICAKICAgICBpZiAo
IWlzSG9yaXpvbnRhbFdyaXRpbmdNb2RlKCkpCiAgICAgICAgIHJldHVybiByZWN0LnRyYW5zcG9z
ZWRSZWN0KCk7CiAKSW5kZXg6IFNvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9SZW5kZXJCb3guaAo9
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvUmVuZGVyQm94LmgJKHJldmlz
aW9uIDE3NDMyNCkKKysrIFNvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9SZW5kZXJCb3guaAkod29y
a2luZyBjb3B5KQpAQCAtNjU1LDYgKzY1NSwxMCBAQAogICAgIHZvaWQgdXBkYXRlU2hhcGVPdXRz
aWRlSW5mb0FmdGVyU3R5bGVDaGFuZ2UoY29uc3QgUmVuZGVyU3R5bGUmLCBjb25zdCBSZW5kZXJT
dHlsZSogb2xkU3R5bGUpOwogI2VuZGlmCiAKKyAgICBMYXlvdXRSZWN0IGZpcnN0T3JMYXN0Qm94
SW5FbGVtZW50KEVsZW1lbnQgKmVuY2xvc2VkRWxlbWVudCwgYm9vbCBmaXJzdCwgaW50ICpudW1M
aW5lQm94ZXMsIGJvb2wgKnJlY29tcHV0ZUN1cnNvcikgX19hdHRyaWJ1dGVfXygodW51c2VkKSk7
CisgICAgYm9vbCBjb21wdXRlUmVjdEZvclBzZXVkb0VsZW1lbnQoUmVuZGVyT2JqZWN0ICplbGVt
ZW50UmVuZGVyZXIsIFJlbmRlckVsZW1lbnQgKnBzZXVkb0VsZW1lbnRSZW5kZXJlciwgYm9vbCBm
aXJzdCwgTGF5b3V0UmVjdCAmbG9jYWxSZWN0KTsKKyAgICBMYXlvdXRQb2ludCB0b3BMZWZ0T2ZG
aXJzdEJveEluRWxlbWVudE9yVG9wUmlnaHRvZkxhc3RCb3hJbkVsZW1lbnQoRWxlbWVudCAqZW5j
bG9zZWRFbGVtZW50LCBib29sIGZpcnN0KSBfX2F0dHJpYnV0ZV9fKCh1bnVzZWQpKTsKKyAgICAK
ICAgICBib29sIHNjcm9sbExheWVyKFNjcm9sbERpcmVjdGlvbiwgU2Nyb2xsR3JhbnVsYXJpdHks
IGZsb2F0IG11bHRpcGxpZXIsIEVsZW1lbnQqKiBzdG9wRWxlbWVudCk7CiAKICAgICBib29sIGZp
eGVkRWxlbWVudExheXNPdXRSZWxhdGl2ZVRvRnJhbWUoY29uc3QgRnJhbWVWaWV3JikgY29uc3Q7
CkluZGV4OiBTb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvUmVuZGVyQm94TW9kZWxPYmplY3QuY3Bw
Cj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9SZW5kZXJCb3hNb2RlbE9i
amVjdC5jcHAJKHJldmlzaW9uIDE3NDMyNCkKKysrIFNvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9S
ZW5kZXJCb3hNb2RlbE9iamVjdC5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTI1NjgsMTIgKzI1Njgs
MTMgQEAKIAogTGF5b3V0UmVjdCBSZW5kZXJCb3hNb2RlbE9iamVjdDo6bG9jYWxDYXJldFJlY3RG
b3JFbXB0eUVsZW1lbnQoTGF5b3V0VW5pdCB3aWR0aCwgTGF5b3V0VW5pdCB0ZXh0SW5kZW50T2Zm
c2V0KQogewotICAgIEFTU0VSVCghZmlyc3RDaGlsZCgpKTsKKyAgICBBU1NFUlQoIWZpcnN0Tm9u
UHNldWRvRWxlbWVudENoaWxkKCkpOwogCiAgICAgLy8gRklYTUU6IFRoaXMgZG9lcyBub3QgdGFr
ZSBpbnRvIGFjY291bnQgZWl0aGVyIDpmaXJzdC1saW5lIG9yIDpmaXJzdC1sZXR0ZXIKICAgICAv
LyBIb3dldmVyLCBhcyBzb29uIGFzIHNvbWUgY29udGVudCBpcyBlbnRlcmVkLCB0aGUgbGluZSBi
b3hlcyB3aWxsIGJlCiAgICAgLy8gY29uc3RydWN0ZWQgYW5kIHRoaXMga2x1ZGdlIGlzIG5vdCBj
YWxsZWQgYW55IG1vcmUuIFNvIG9ubHkgdGhlIGNhcmV0IHNpemUKICAgICAvLyBvZiBhbiBlbXB0
eSA6Zmlyc3QtbGluZSdkIGJsb2NrIGlzIHdyb25nLiBJIHRoaW5rIHdlIGNhbiBsaXZlIHdpdGgg
dGhhdC4KKyAgICAKICAgICBjb25zdCBSZW5kZXJTdHlsZSYgY3VycmVudFN0eWxlID0gZmlyc3RM
aW5lU3R5bGUoKTsKICAgICBMYXlvdXRVbml0IGhlaWdodCA9IGxpbmVIZWlnaHQodHJ1ZSwgY3Vy
cmVudFN0eWxlLmlzSG9yaXpvbnRhbFdyaXRpbmdNb2RlKCkgPyBIb3Jpem9udGFsTGluZSA6IFZl
cnRpY2FsTGluZSk7CiAKSW5kZXg6IFNvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9SZW5kZXJFbGVt
ZW50LmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL1JlbmRlckVsZW1l
bnQuaAkocmV2aXNpb24gMTc0MzI0KQorKysgU291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL1JlbmRl
ckVsZW1lbnQuaAkod29ya2luZyBjb3B5KQpAQCAtNTQsNiArNTQsMTIgQEAKIAogICAgIFJlbmRl
ck9iamVjdCogZmlyc3RDaGlsZCgpIGNvbnN0IHsgcmV0dXJuIG1fZmlyc3RDaGlsZDsgfQogICAg
IFJlbmRlck9iamVjdCogbGFzdENoaWxkKCkgY29uc3QgeyByZXR1cm4gbV9sYXN0Q2hpbGQ7IH0K
KyAgICBSZW5kZXJPYmplY3QgKmZpcnN0Tm9uUHNldWRvRWxlbWVudENoaWxkKCkgY29uc3QKKyAg
ICB7CisgICAgICAgICAgICBSZW5kZXJPYmplY3QgKm9iaiA9IGZpcnN0Q2hpbGQoKTsKKyAgICAg
ICAgICAgIHdoaWxlIChvYmogJiYgb2JqLT5pc1BzZXVkb0VsZW1lbnQoKSkgeyBvYmogPSBvYmot
Pm5leHRTaWJsaW5nKCk7IH0KKyAgICAgICAgICAgIHJldHVybiBvYmo7CisgICAgfQogCiAgICAg
Ly8gRklYTUU6IE1ha2UgdGhlc2Ugc3RhbmRhbG9uZSBhbmQgbW92ZSB0byByZWxldmFudCBmaWxl
cy4KICAgICBib29sIGlzUmVuZGVyTGF5ZXJNb2RlbE9iamVjdCgpIGNvbnN0OwpJbmRleDogU291
cmNlL1dlYkNvcmUvcmVuZGVyaW5nL1JlbmRlcklubGluZS5jcHAKPT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291
cmNlL1dlYkNvcmUvcmVuZGVyaW5nL1JlbmRlcklubGluZS5jcHAJKHJldmlzaW9uIDE3NDMyNCkK
KysrIFNvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9SZW5kZXJJbmxpbmUuY3BwCSh3b3JraW5nIGNv
cHkpCkBAIC0yLDYgKzIsNyBAQAogICogQ29weXJpZ2h0IChDKSAxOTk5IExhcnMgS25vbGwgKGtu
b2xsQGtkZS5vcmcpCiAgKiAgICAgICAgICAgKEMpIDE5OTkgQW50dGkgS29pdmlzdG8gKGtvaXZp
c3RvQGtkZS5vcmcpCiAgKiBDb3B5cmlnaHQgKEMpIDIwMDMsIDIwMDQsIDIwMDUsIDIwMDYsIDIw
MDcsIDIwMDgsIDIwMDkgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICogUG9ydGlv
bnMgQ29weXJpZ2h0IChjKSAyMDE0IERhdmlkIEEuIEdhdHdvb2QuICBBbGwgcmlnaHRzIHJlc2Vy
dmVkLgogICoKICAqIFRoaXMgbGlicmFyeSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlz
dHJpYnV0ZSBpdCBhbmQvb3IKICAqIG1vZGlmeSBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdO
VSBMaWJyYXJ5IEdlbmVyYWwgUHVibGljCkBAIC0yNDQsOSArMjQ1LDQ2IEBACiAgICAgfQogfQog
Ci1MYXlvdXRSZWN0IFJlbmRlcklubGluZTo6bG9jYWxDYXJldFJlY3QoSW5saW5lQm94KiBpbmxp
bmVCb3gsIGludCwgTGF5b3V0VW5pdCogZXh0cmFXaWR0aFRvRW5kT2ZMaW5lKQorTGF5b3V0UmVj
dCBSZW5kZXJJbmxpbmU6OmxvY2FsQ2FyZXRSZWN0KElubGluZUJveCogaW5saW5lQm94LCBpbnQg
Y2FyZXRPZmZzZXQsIExheW91dFVuaXQqIGV4dHJhV2lkdGhUb0VuZE9mTGluZSkKIHsKLSAgICBp
ZiAoZmlyc3RDaGlsZCgpKSB7CisgICAgaWYgKGlzUHNldWRvRWxlbWVudCgpKSB7CisgICAgICAg
IC8qIFdlIHNob3VsZCBvbmx5IGdldCBoZXJlIGlmIHRoZSBwc2V1ZG9lbGVtZW50J3MgaG9zdCBl
bGVtZW50CisgICAgICAgICAgIGhhcyBubyBjaGlsZCBub2RlcyBvciBpZiB0aGUgZW5jbG9zaW5n
IGVsZW1lbnQncyByZW5kZXJlciB3YW50cworICAgICAgICAgICB0byBwdXQgdGhlIGluc2VydGlv
biBjYXJldCAqYmVmb3JlKiB0aGUgaG9zdCBlbGVtZW50IChhbmQgdGh1cywKKyAgICAgICAgICAg
YmVmb3JlIHRoZSA6OmJlZm9yZSBwc2V1ZG9lbGVtZW50KS4KKyAgICAgICAgICovCisgICAgICAg
IFJlbmRlck9iamVjdCAqZmNyZW5kZXJlciA9IGZpcnN0Q2hpbGQoKTsKKyAgICAgICAgCisgICAg
ICAgIGlmIChmY3JlbmRlcmVyICYmIGZjcmVuZGVyZXItPmlzVGV4dCgpKSB7CisgICAgICAgICAg
ICBhdXRvIHRleHRSZW5kZXJlciA9IHRvUmVuZGVyVGV4dChmY3JlbmRlcmVyKTsKKyAgICAgICAg
ICAgIHRleHRSZW5kZXJlci0+ZW5zdXJlTGluZUJveGVzKCk7CisKKyAgICAgICAgICAgIElubGlu
ZVRleHRCb3gqIGJveCA9IGNhcmV0T2Zmc2V0IDwgMCA/IHRleHRSZW5kZXJlci0+Zmlyc3RUZXh0
Qm94KCkgOiB0ZXh0UmVuZGVyZXItPmxhc3RUZXh0Qm94KCk7CisgICAgICAgICAgICAKKyAgICAg
ICAgICAgIGlmIChib3gpIHsKKyAgICAgICAgICAgICAgICAvKiBDcmVhdGUgYSByZWN0IHdpdGgg
dGhlIHBvc2l0aW9uIG9mIHRoZSBiZWdpbm5pbmcgb2YgdGhlIGxhc3QgaW5saW5lCisgICAgICAg
ICAgICAgICAgICAgYm94IGluIHRoZSA6OmJlZm9yZSBwc2V1ZG9lbGVtZW50LiAqLworICAgICAg
ICAgICAgICAgIGludCBuZXdDYXJldE9mZnNldCA9IGJveC0+Y2FyZXRNaW5PZmZzZXQoKTsKKyAg
ICAgICAgICAgICAgICBMYXlvdXRSZWN0IGN1cnNvclBvc2l0aW9uID0gZmNyZW5kZXJlci0+bG9j
YWxDYXJldFJlY3QoYm94LCBuZXdDYXJldE9mZnNldCk7CisgICAgICAgICAgICAgICAgCisgICAg
ICAgICAgICAgICAgLyogQWRkIHRoZSB3aWR0aCBvZiB0aGF0IHBzZXVkb2VsZW1lbnQuICovCisg
ICAgICAgICAgICAgICAgaWYgKGNhcmV0T2Zmc2V0ICE9IC0xKQorICAgICAgICAgICAgICAgICAg
ICBjdXJzb3JQb3NpdGlvbi5tb3ZlKGJveC0+d2lkdGgoKSwgMCk7CisgICAgICAgICAgICAgICAg
CisgICAgICAgICAgICAgICAgcmV0dXJuIGN1cnNvclBvc2l0aW9uOworICAgICAgICAgICAgfQor
ICAgICAgICB9IGVsc2UgaWYgKGZjcmVuZGVyZXItPmlzQm94KCkpIHsKKyAgICAgICAgICAgIElu
bGluZUJveCAqYm94ID0gdG9SZW5kZXJCb3goZmNyZW5kZXJlciktPmlubGluZUJveFdyYXBwZXIo
KTsKKyAgICAgICAgICAgIAorICAgICAgICAgICAgTGF5b3V0UmVjdCBjdXJzb3JQb3NpdGlvbiA9
IGZjcmVuZGVyZXItPmxvY2FsQ2FyZXRSZWN0KGJveCwgY2FyZXRPZmZzZXQpOworICAgICAgICAg
ICAgCisgICAgICAgICAgICAvKiBBZGQgdGhlIHdpZHRoIG9mIHRoYXQgcHNldWRvZWxlbWVudC4g
Ki8KKyAgICAgICAgICAgIGN1cnNvclBvc2l0aW9uLm1vdmUoYm94LT53aWR0aCgpLCAwKTsKKyAg
ICAgICAgICAgIAorICAgICAgICAgICAgcmV0dXJuIGN1cnNvclBvc2l0aW9uOworICAgICAgICB9
CisgICAgfQorICAgIGlmIChmaXJzdE5vblBzZXVkb0VsZW1lbnRDaGlsZCgpKSB7CiAgICAgICAg
IC8vIFRoaXMgY29uZGl0aW9uIGlzIHBvc3NpYmxlIGlmIHRoZSBSZW5kZXJJbmxpbmUgaXMgYXQg
YW4gZWRpdGluZyBib3VuZGFyeSwKICAgICAgICAgLy8gaS5lLiB0aGUgVmlzaWJsZVBvc2l0aW9u
IGlzOgogICAgICAgICAvLyAgIDxSZW5kZXJJbmxpbmUgZWRpdGluZ0JvdW5kYXJ5PXRydWU+fDxS
ZW5kZXJUZXh0PiA8L1JlbmRlclRleHQ+PC9SZW5kZXJJbmxpbmU+CkBAIC0yNjIsOCArMzAwLDE5
IEBACiAKICAgICBMYXlvdXRSZWN0IGNhcmV0UmVjdCA9IGxvY2FsQ2FyZXRSZWN0Rm9yRW1wdHlF
bGVtZW50KGhvcml6b250YWxCb3JkZXJBbmRQYWRkaW5nRXh0ZW50KCksIDApOwogCi0gICAgaWYg
KElubGluZUJveCogZmlyc3RCb3ggPSBmaXJzdExpbmVCb3goKSkKKyAgICAvLyBDb21wdXRlIHRo
ZSBsb2NhdGlvbiBiYXNlZCBvbiB0aGUgZmlyc3QgcHNldWRvCisgICAgSW5saW5lQm94ICpmaXJz
dEJveCA9IGZpcnN0TGluZUJveCgpOworICAgIGlmIChmaXJzdEJveCAmJiAhZmlyc3RDaGlsZCgp
LT5pc0JlZm9yZUNvbnRlbnQoKSkgewogICAgICAgICBjYXJldFJlY3QubW92ZUJ5KExheW91dFBv
aW50KGZpcnN0Qm94LT50b3BMZWZ0KCkpKTsKKyAgICAgICAgY2FyZXRSZWN0Lm1vdmUodGhpcy0+
bWFyZ2luTGVmdCgpLCAwKTsKKyAgICAgICAgaWYgKHRoaXMtPmVsZW1lbnQoKSkgeworICAgICAg
ICAgICAgLy8gTGF5b3V0VW5pdCB4ID0gTGF5b3V0VW5pdCh0aGlzLT5lbGVtZW50KCktPmNvbXB1
dGVkU3R5bGUoKS0+cGFkZGluZ0xlZnQoKSk7CisgICAgICAgICAgICAvLyBjYXJldFJlY3QubW92
ZUJ5KCwgMCk7CisgICAgICAgIH0KKyAgICB9IGVsc2UgeworICAgICAgICBSZW5kZXJPYmplY3Qg
KmZjID0gZmlyc3RDaGlsZCgpOworICAgICAgICBpZiAoZmMgJiYgZmMtPmlzQmVmb3JlQ29udGVu
dCgpKSByZXR1cm4gZmMtPmxvY2FsQ2FyZXRSZWN0KGlubGluZUJveCwgY2FyZXRPZmZzZXQpOwor
ICAgIH0KIAogICAgIHJldHVybiBjYXJldFJlY3Q7CiB9CkluZGV4OiBTb3VyY2UvV2ViQ29yZS9y
ZW5kZXJpbmcvUmVuZGVySW5saW5lLmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvcmVu
ZGVyaW5nL1JlbmRlcklubGluZS5oCShyZXZpc2lvbiAxNzQzMjQpCisrKyBTb3VyY2UvV2ViQ29y
ZS9yZW5kZXJpbmcvUmVuZGVySW5saW5lLmgJKHdvcmtpbmcgY29weSkKQEAgLTk0LDcgKzk0LDEw
IEBACiAgICAgdmlydHVhbCBMYXlvdXRSZWN0IGxvY2FsQ2FyZXRSZWN0KElubGluZUJveCosIGlu
dCwgTGF5b3V0VW5pdCogZXh0cmFXaWR0aFRvRW5kT2ZMaW5lKSBvdmVycmlkZSBmaW5hbDsKIAog
ICAgIGJvb2wgaGl0VGVzdEN1bGxlZElubGluZShjb25zdCBIaXRUZXN0UmVxdWVzdCYsIEhpdFRl
c3RSZXN1bHQmLCBjb25zdCBIaXRUZXN0TG9jYXRpb24mIGxvY2F0aW9uSW5Db250YWluZXIsIGNv
bnN0IExheW91dFBvaW50JiBhY2N1bXVsYXRlZE9mZnNldCk7CisgICAgCisgICAgdmlydHVhbCBM
YXlvdXRVbml0IG9mZnNldFdpZHRoKCkgY29uc3Qgb3ZlcnJpZGUgZmluYWwgeyByZXR1cm4gbGlu
ZXNCb3VuZGluZ0JveCgpLndpZHRoKCk7IH0KIAorCiBwcm90ZWN0ZWQ6CiAgICAgdmlydHVhbCB2
b2lkIHdpbGxCZURlc3Ryb3llZCgpIG92ZXJyaWRlOwogCkBAIC0xMzQsNyArMTM3LDYgQEAKIAog
ICAgIHZpcnR1YWwgTGF5b3V0VW5pdCBvZmZzZXRMZWZ0KCkgY29uc3Qgb3ZlcnJpZGUgZmluYWw7
CiAgICAgdmlydHVhbCBMYXlvdXRVbml0IG9mZnNldFRvcCgpIGNvbnN0IG92ZXJyaWRlIGZpbmFs
OwotICAgIHZpcnR1YWwgTGF5b3V0VW5pdCBvZmZzZXRXaWR0aCgpIGNvbnN0IG92ZXJyaWRlIGZp
bmFsIHsgcmV0dXJuIGxpbmVzQm91bmRpbmdCb3goKS53aWR0aCgpOyB9CiAgICAgdmlydHVhbCBM
YXlvdXRVbml0IG9mZnNldEhlaWdodCgpIGNvbnN0IG92ZXJyaWRlIGZpbmFsIHsgcmV0dXJuIGxp
bmVzQm91bmRpbmdCb3goKS5oZWlnaHQoKTsgfQogCiAgICAgdmlydHVhbCBMYXlvdXRSZWN0IGNs
aXBwZWRPdmVyZmxvd1JlY3RGb3JSZXBhaW50KGNvbnN0IFJlbmRlckxheWVyTW9kZWxPYmplY3Qq
IHJlcGFpbnRDb250YWluZXIpIGNvbnN0IG92ZXJyaWRlOwpJbmRleDogU291cmNlL1dlYktpdC9X
ZWJLaXQueGNvZGVwcm9qL3Byb2plY3QucGJ4cHJvago9PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2Vi
S2l0L1dlYktpdC54Y29kZXByb2ovcHJvamVjdC5wYnhwcm9qCShyZXZpc2lvbiAxNzQzMjQpCisr
KyBTb3VyY2UvV2ViS2l0L1dlYktpdC54Y29kZXByb2ovcHJvamVjdC5wYnhwcm9qCSh3b3JraW5n
IGNvcHkpCkBAIC0yMzMyLDYgKzIzMzIsMTQgQEAKIAkJCWJhc2VDb25maWd1cmF0aW9uUmVmZXJl
bmNlID0gMUM5MDRGRDIwQkE5REQwRjAwODFFOUQwIC8qIFdlYktpdExlZ2FjeS54Y2NvbmZpZyAq
LzsKIAkJCWJ1aWxkU2V0dGluZ3MgPSB7CiAJCQkJREVCVUdfREVGSU5FUyA9ICIkKERFQlVHX0RF
RklORVNfJChDVVJSRU5UX1ZBUklBTlQpKSBFTkFCTEVfV0VCS0lUX1VOU0VUX0RZTERfRlJBTUVX
T1JLX1BBVEgiOworCQkJCUhFQURFUl9TRUFSQ0hfUEFUSFMgPSAoCisJCQkJCSIkKFdFQktJVFNZ
U1RFTUlOVEVSRkFDRV9TVEFUSUNfTElCUkFSWV9IRUFERVJTX0ZPTERFUl9QQVRIKSIsCisJCQkJ
CSIkKFdFQkNPUkVfUFJJVkFURV9IRUFERVJTX0RJUikvRm9yd2FyZGluZ0hlYWRlcnMiLAorCQkJ
CQkiJChXRUJDT1JFX1BSSVZBVEVfSEVBREVSU19ESVIpL2ljdSIsCisJCQkJCSJcIiQoQlVJTFRf
UFJPRFVDVFNfRElSKS9EZXJpdmVkU291cmNlcy9XZWJLaXRMZWdhY3lcIiIsCisJCQkJCSJcIiQo
QlVJTFRfUFJPRFVDVFNfRElSKS91c3IvbG9jYWwvaW5jbHVkZVwiIiwKKwkJCQkJIiQoSEVBREVS
X1NFQVJDSF9QQVRIUykiLAorCQkJCSk7CiAJCQkJT1RIRVJfTERGTEFHUyA9ICgKIAkJCQkJIiQo
T1RIRVJfTERGTEFHUykiLAogCQkJCQkiLWwkKFdFQktJVF9TWVNURU1fSU5URVJGQUNFX0xJQlJB
UlkpIiwKSW5kZXg6IFNvdXJjZS9XZWJLaXQvbWFjL1dlYlZpZXcvV2ViRnJhbWUubW0KPT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PQotLS0gU291cmNlL1dlYktpdC9tYWMvV2ViVmlldy9XZWJGcmFtZS5tbQkocmV2aXNpb24g
MTc0MzI0KQorKysgU291cmNlL1dlYktpdC9tYWMvV2ViVmlldy9XZWJGcmFtZS5tbQkod29ya2lu
ZyBjb3B5KQpAQCAtMTUwNiw3ICsxNTA2LDcgQEAKICAgICAgICAgfQogICAgIH0KIAotICAgIGZy
YW1lLT5zZWxlY3Rpb24oKS5zZXRTZWxlY3RlZFJhbmdlKGNvcmUocmFuZ2UpLCAoRUFmZmluaXR5
KWFmZmluaXR5LCBjbG9zZVR5cGluZyk7CisgICAgZnJhbWUtPnNlbGVjdGlvbigpLnNldFNlbGVj
dGVkUmFuZ2UoY29yZShyYW5nZSksIChFQWZmaW5pdHkpYWZmaW5pdHksIGZhbHNlLCBjbG9zZVR5
cGluZyk7CiAgICAgaWYgKCFjbG9zZVR5cGluZykKICAgICAgICAgZnJhbWUtPmVkaXRvcigpLmVu
c3VyZUxhc3RFZGl0Q29tbWFuZEhhc0N1cnJlbnRTZWxlY3Rpb25JZk9wZW5Gb3JNb3JlVHlwaW5n
KCk7CiB9CkluZGV4OiBTb3VyY2UvV2ViS2l0L21hYy9XZWJWaWV3L1dlYlZpZXcubW0KPT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PQotLS0gU291cmNlL1dlYktpdC9tYWMvV2ViVmlldy9XZWJWaWV3Lm1tCShyZXZpc2lvbiAx
NzQzMjQpCisrKyBTb3VyY2UvV2ViS2l0L21hYy9XZWJWaWV3L1dlYlZpZXcubW0JKHdvcmtpbmcg
Y29weSkKQEAgLTcxNjAsNyArNzE2MCw3IEBACiAgICAgICAgIGlmICghY29yZUZyYW1lKQogICAg
ICAgICAgICAgcmV0dXJuOwogCi0gICAgICAgIGNvcmVGcmFtZS0+c2VsZWN0aW9uKCkuc2V0U2Vs
ZWN0ZWRSYW5nZShjb3JlKHJhbmdlKSwgY29yZShzZWxlY3Rpb25BZmZpbml0eSksIHRydWUpOwor
ICAgICAgICBjb3JlRnJhbWUtPnNlbGVjdGlvbigpLnNldFNlbGVjdGVkUmFuZ2UoY29yZShyYW5n
ZSksIGNvcmUoc2VsZWN0aW9uQWZmaW5pdHkpLCBmYWxzZSwgdHJ1ZSk7CiAgICAgfQogfQogCklu
ZGV4OiBTb3VyY2UvV2ViS2l0Mi9XZWJQcm9jZXNzL1dlYlBhZ2UvaW9zL1dlYlBhZ2VJT1MubW0K
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PQotLS0gU291cmNlL1dlYktpdDIvV2ViUHJvY2Vzcy9XZWJQYWdlL2lvcy9XZWJQ
YWdlSU9TLm1tCShyZXZpc2lvbiAxNzQzMjQpCisrKyBTb3VyY2UvV2ViS2l0Mi9XZWJQcm9jZXNz
L1dlYlBhZ2UvaW9zL1dlYlBhZ2VJT1MubW0JKHdvcmtpbmcgY29weSkKQEAgLTk1MSw3ICs5NTEs
NyBAQAogICAgICAgICBicmVhazsKICAgICB9CiAgICAgaWYgKHJhbmdlKQotICAgICAgICBmcmFt
ZS5zZWxlY3Rpb24oKS5zZXRTZWxlY3RlZFJhbmdlKHJhbmdlLmdldCgpLCBwb3NpdGlvbi5hZmZp
bml0eSgpLCB0cnVlKTsKKyAgICAgICAgZnJhbWUuc2VsZWN0aW9uKCkuc2V0U2VsZWN0ZWRSYW5n
ZShyYW5nZS5nZXQoKSwgcG9zaXRpb24uYWZmaW5pdHkoKSwgZmFsc2UsIHRydWUpOwogCiAgICAg
c2VuZChNZXNzYWdlczo6V2ViUGFnZVByb3h5OjpHZXN0dXJlQ2FsbGJhY2socG9pbnQsIGdlc3R1
cmVUeXBlLCBnZXN0dXJlU3RhdGUsIHN0YXRpY19jYXN0PHVpbnQzMl90PihmbGFncyksIGNhbGxi
YWNrSUQpKTsKIH0KQEAgLTE0MTQsNyArMTQxNCw3IEBACiAKICAgICBpZiAobmV3UmFuZ2UpIHsK
ICAgICAgICAgbV9jdXJyZW50QmxvY2tTZWxlY3Rpb24gPSBuZXdSYW5nZTsKLSAgICAgICAgZnJh
bWUuc2VsZWN0aW9uKCkuc2V0U2VsZWN0ZWRSYW5nZShuZXdSYW5nZS5nZXQoKSwgVlBfREVGQVVM
VF9BRkZJTklUWSwgdHJ1ZSk7CisgICAgICAgIGZyYW1lLnNlbGVjdGlvbigpLnNldFNlbGVjdGVk
UmFuZ2UobmV3UmFuZ2UuZ2V0KCksIFZQX0RFRkFVTFRfQUZGSU5JVFksIGZhbHNlLCB0cnVlKTsK
ICAgICB9CiAKICAgICBjb21wdXRlRXhwYW5kQW5kU2hyaW5rVGhyZXNob2xkc0ZvckhhbmRsZShw
b2ludCwgaGFuZGxlUG9zaXRpb24sIGdyb3dUaHJlc2hvbGQsIHNocmlua1RocmVzaG9sZCk7CkBA
IC0xNDkxLDcgKzE0OTEsNyBAQAogICAgICAgICBicmVhazsKICAgICB9CiAgICAgaWYgKHJhbmdl
KQotICAgICAgICBmcmFtZS5zZWxlY3Rpb24oKS5zZXRTZWxlY3RlZFJhbmdlKHJhbmdlLmdldCgp
LCBwb3NpdGlvbi5hZmZpbml0eSgpLCB0cnVlKTsKKyAgICAgICAgZnJhbWUuc2VsZWN0aW9uKCku
c2V0U2VsZWN0ZWRSYW5nZShyYW5nZS5nZXQoKSwgcG9zaXRpb24uYWZmaW5pdHkoKSwgZmFsc2Us
IHRydWUpOwogCiAgICAgc2VuZChNZXNzYWdlczo6V2ViUGFnZVByb3h5OjpUb3VjaGVzQ2FsbGJh
Y2socG9pbnQsIHRvdWNoZXMsIGNhbGxiYWNrSUQpKTsKIH0KQEAgLTE1MDcsNyArMTUwNyw3IEBA
CiAgICAgICAgICAgICByYW5nZSA9IFJhbmdlOjpjcmVhdGUoKmZyYW1lLmRvY3VtZW50KCksIGZy
b21Qb3NpdGlvbiwgdG9Qb3NpdGlvbik7CiAgICAgICAgIGVsc2UKICAgICAgICAgICAgIHJhbmdl
ID0gUmFuZ2U6OmNyZWF0ZSgqZnJhbWUuZG9jdW1lbnQoKSwgdG9Qb3NpdGlvbiwgZnJvbVBvc2l0
aW9uKTsKLSAgICAgICAgZnJhbWUuc2VsZWN0aW9uKCkuc2V0U2VsZWN0ZWRSYW5nZShyYW5nZS5n
ZXQoKSwgZnJvbVBvc2l0aW9uLmFmZmluaXR5KCksIHRydWUpOworICAgICAgICBmcmFtZS5zZWxl
Y3Rpb24oKS5zZXRTZWxlY3RlZFJhbmdlKHJhbmdlLmdldCgpLCBmcm9tUG9zaXRpb24uYWZmaW5p
dHkoKSwgZmFsc2UsIHRydWUpOwogICAgIH0KIAogICAgIC8vIFdlIGNhbiB1c2UgdGhlIHNhbWUg
Y2FsbGJhY2sgZm9yIHRoZSBnZXN0dXJlcyB3aXRoIG9uZSBwb2ludC4KQEAgLTE1MjIsNyArMTUy
Miw3IEBACiAgICAgICAgIHJldHVybjsKIAogICAgIFZpc2libGVQb3NpdGlvbiBwb3NpdGlvbiA9
IGZyYW1lLnNlbGVjdGlvbigpLnNlbGVjdGlvbigpLnN0YXJ0KCk7Ci0gICAgZnJhbWUuc2VsZWN0
aW9uKCkuc2V0U2VsZWN0ZWRSYW5nZSh3b3JkUmFuZ2VGcm9tUG9zaXRpb24ocG9zaXRpb24pLmdl
dCgpLCBwb3NpdGlvbi5hZmZpbml0eSgpLCB0cnVlKTsKKyAgICBmcmFtZS5zZWxlY3Rpb24oKS5z
ZXRTZWxlY3RlZFJhbmdlKHdvcmRSYW5nZUZyb21Qb3NpdGlvbihwb3NpdGlvbikuZ2V0KCksIHBv
c2l0aW9uLmFmZmluaXR5KCksIGZhbHNlLCB0cnVlKTsKIH0KIAogdm9pZCBXZWJQYWdlOjpzZWxl
Y3RXb3JkQmFja3dhcmQoKQpAQCAtMTUzNCw3ICsxNTM0LDcgQEAKICAgICBWaXNpYmxlUG9zaXRp
b24gcG9zaXRpb24gPSBmcmFtZS5zZWxlY3Rpb24oKS5zZWxlY3Rpb24oKS5zdGFydCgpOwogICAg
IFZpc2libGVQb3NpdGlvbiBzdGFydFBvc2l0aW9uID0gcG9zaXRpb25PZk5leHRCb3VuZGFyeU9m
R3JhbnVsYXJpdHkocG9zaXRpb24sIFdvcmRHcmFudWxhcml0eSwgRGlyZWN0aW9uQmFja3dhcmQp
OwogICAgIGlmIChzdGFydFBvc2l0aW9uLmlzTm90TnVsbCgpICYmIHN0YXJ0UG9zaXRpb24gIT0g
cG9zaXRpb24pCi0gICAgICAgIGZyYW1lLnNlbGVjdGlvbigpLnNldFNlbGVjdGVkUmFuZ2UoUmFu
Z2U6OmNyZWF0ZSgqZnJhbWUuZG9jdW1lbnQoKSwgc3RhcnRQb3NpdGlvbiwgcG9zaXRpb24pLmdl
dCgpLCBwb3NpdGlvbi5hZmZpbml0eSgpLCB0cnVlKTsKKyAgICAgICAgZnJhbWUuc2VsZWN0aW9u
KCkuc2V0U2VsZWN0ZWRSYW5nZShSYW5nZTo6Y3JlYXRlKCpmcmFtZS5kb2N1bWVudCgpLCBzdGFy
dFBvc2l0aW9uLCBwb3NpdGlvbikuZ2V0KCksIHBvc2l0aW9uLmFmZmluaXR5KCksIGZhbHNlLCB0
cnVlKTsKIH0KIAogdm9pZCBXZWJQYWdlOjptb3ZlU2VsZWN0aW9uQnlPZmZzZXQoaW50MzJfdCBv
ZmZzZXQsIHVpbnQ2NF90IGNhbGxiYWNrSUQpCkBAIC0xNTUyLDcgKzE1NTIsNyBAQAogICAgICAg
ICAgICAgYnJlYWs7CiAgICAgfQogICAgIGlmIChwb3NpdGlvbi5pc05vdE51bGwoKSAmJiBzdGFy
dFBvc2l0aW9uICE9IHBvc2l0aW9uKQotICAgICAgICBmcmFtZS5zZWxlY3Rpb24oKS5zZXRTZWxl
Y3RlZFJhbmdlKFJhbmdlOjpjcmVhdGUoKmZyYW1lLmRvY3VtZW50KCksIHBvc2l0aW9uLCBwb3Np
dGlvbikuZ2V0KCksIHBvc2l0aW9uLmFmZmluaXR5KCksIHRydWUpOworICAgICAgICBmcmFtZS5z
ZWxlY3Rpb24oKS5zZXRTZWxlY3RlZFJhbmdlKFJhbmdlOjpjcmVhdGUoKmZyYW1lLmRvY3VtZW50
KCksIHBvc2l0aW9uLCBwb3NpdGlvbikuZ2V0KCksIHBvc2l0aW9uLmFmZmluaXR5KCksIGZhbHNl
LCB0cnVlKTsKICAgICBzZW5kKE1lc3NhZ2VzOjpXZWJQYWdlUHJveHk6OlZvaWRDYWxsYmFjayhj
YWxsYmFja0lEKSk7CiB9CiAKQEAgLTE2MTQsNyArMTYxNCw3IEBACiAgICAgICAgIHJldHVybjsK
ICAgICAKICAgICBmcmFtZS5lZGl0b3IoKS5zZXRJZ25vcmVDb21wb3NpdGlvblNlbGVjdGlvbkNo
YW5nZSh0cnVlKTsKLSAgICBmcmFtZS5zZWxlY3Rpb24oKS5zZXRTZWxlY3RlZFJhbmdlKHdvcmRS
YW5nZS5nZXQoKSwgVVBTVFJFQU0sIHRydWUpOworICAgIGZyYW1lLnNlbGVjdGlvbigpLnNldFNl
bGVjdGVkUmFuZ2Uod29yZFJhbmdlLmdldCgpLCBVUFNUUkVBTSwgZmFsc2UsIHRydWUpOwogICAg
IGZyYW1lLmVkaXRvcigpLmluc2VydFRleHQobmV3VGV4dCwgMCk7CiAgICAgZnJhbWUuZWRpdG9y
KCkuc2V0SWdub3JlQ29tcG9zaXRpb25TZWxlY3Rpb25DaGFuZ2UoZmFsc2UpOwogfQpAQCAtMTY0
MSw3ICsxNjQxLDcgQEAKIAogICAgIC8vIFdlIGRvbid0IHdhbnQgdG8gbm90aWZ5IHRoZSBjbGll
bnQgdGhhdCB0aGUgc2VsZWN0aW9uIGhhcyBjaGFuZ2VkIHVudGlsIHdlIGFyZSBkb25lIGluc2Vy
dGluZyB0aGUgbmV3IHRleHQuCiAgICAgZnJhbWUuZWRpdG9yKCkuc2V0SWdub3JlQ29tcG9zaXRp
b25TZWxlY3Rpb25DaGFuZ2UodHJ1ZSk7Ci0gICAgZnJhbWUuc2VsZWN0aW9uKCkuc2V0U2VsZWN0
ZWRSYW5nZShyYW5nZS5nZXQoKSwgVVBTVFJFQU0sIHRydWUpOworICAgIGZyYW1lLnNlbGVjdGlv
bigpLnNldFNlbGVjdGVkUmFuZ2UocmFuZ2UuZ2V0KCksIFVQU1RSRUFNLCBmYWxzZSwgdHJ1ZSk7
CiAgICAgZnJhbWUuZWRpdG9yKCkuaW5zZXJ0VGV4dChuZXdUZXh0LCAwKTsKICAgICBmcmFtZS5l
ZGl0b3IoKS5zZXRJZ25vcmVDb21wb3NpdGlvblNlbGVjdGlvbkNoYW5nZShmYWxzZSk7CiB9CkBA
IC0xNzUzLDcgKzE3NTMsNyBAQAogICAgICAgICByZXR1cm47CiAgICAgfQogICAgIAotICAgIGZy
YW1lLnNlbGVjdGlvbigpLnNldFNlbGVjdGVkUmFuZ2UocmFuZ2UuZ2V0KCksIFVQU1RSRUFNLCB0
cnVlKTsKKyAgICBmcmFtZS5zZWxlY3Rpb24oKS5zZXRTZWxlY3RlZFJhbmdlKHJhbmdlLmdldCgp
LCBVUFNUUkVBTSwgZmFsc2UsIHRydWUpOwogICAgIGlmIChjb3JyZWN0aW9uLmxlbmd0aCgpKQog
ICAgICAgICBmcmFtZS5lZGl0b3IoKS5pbnNlcnRUZXh0KGNvcnJlY3Rpb24sIDApOwogICAgIGVs
c2UK
</data>

          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>239652</attachid>
            <date>2014-10-10 14:47:39 -0700</date>
            <delta_ts>2014-12-15 15:44:55 -0800</delta_ts>
            <desc>Patch for one more bug</desc>
            <filename>crash.patch</filename>
            <type>text/plain</type>
            <size>1006</size>
            <attacher name="David Gatwood">dgatwood</attacher>
            
              <data encoding="base64">LS0tIFNvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9SZW5kZXJCb3guY3BwLm9yaWcJMjAxNC0xMC0x
MCAxNDo0MzoxNi4wMDAwMDAwMDAgLTA3MDAKKysrIFNvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9S
ZW5kZXJCb3guY3BwCTIwMTQtMTAtMTAgMTQ6NDM6NDIuMDAwMDAwMDAwIC0wNzAwCkBAIC00Mjg1
LDcgKzQyODUsNyBAQAogICAgICAgICAgICAgICAgIGNoaWxkbm9kZSA9IGNoaWxkbm9kZS0+cHJl
dmlvdXNTaWJsaW5nKCk7CiAgICAgICAgICAgICAgICAgYXRFbmQgPSB0cnVlOwogICAgICAgICAg
ICAgfQotICAgICAgICAgICAgaWYgKGNoaWxkbm9kZS0+aXNFbGVtZW50Tm9kZSgpKSB7CisgICAg
ICAgICAgICBpZiAoY2hpbGRub2RlICYmIGNoaWxkbm9kZS0+aXNFbGVtZW50Tm9kZSgpKSB7CiAg
ICAgICAgICAgICAgICAgRWxlbWVudCAqY2hpbGRFbHQgPSBkb3duY2FzdDxFbGVtZW50PihjaGls
ZG5vZGUpOwogICAgICAgICAgICAgICAgIGNoaWxkTm9kZVJlbmRlcmVyID0gY2hpbGRFbHQtPnJl
bmRlcmVyKCk7CiAgICAgICAgICAgICAgICAgCkBAIC00Mjk4LDggKzQyOTgsMTAgQEAKICAgICAg
ICAgICAgICAgICB9IGVsc2UgewogICAgICAgICAgICAgICAgICAgICBvZmZzZXQgPSBhdEVuZCA/
IGNoaWxkRWx0LT5jb3VudENoaWxkTm9kZXMoKSA6IC0xOwogICAgICAgICAgICAgICAgIH0KKyAg
ICAgICAgICAgIH0gZWxzZSBpZiAoY2hpbGRub2RlKSB7CisgICAgICAgICAgICAgICAgb2Zmc2V0
ID0gYXRFbmQgPyBjaGlsZG5vZGUtPm1heENoYXJhY3Rlck9mZnNldCgpIDogMDsKICAgICAgICAg
ICAgIH0gZWxzZSB7Ci0gICAgICAgICAgICAgICAgICAgIG9mZnNldCA9IGF0RW5kID8gY2hpbGRu
b2RlLT5tYXhDaGFyYWN0ZXJPZmZzZXQoKSA6IDA7CisgICAgICAgICAgICAgICAgb2Zmc2V0ID0g
MDsKICAgICAgICAgICAgIH0KICAgICAgICAgfSBlbHNlIHsKICAgICAgICAgICAgIGNoaWxkbm9k
ZSA9IGVsZW1lbnQoKS0+YWZ0ZXJQc2V1ZG9FbGVtZW50KCk7Cg==
</data>

          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>239657</attachid>
            <date>2014-10-10 16:00:25 -0700</date>
            <delta_ts>2014-10-10 19:19:33 -0700</delta_ts>
            <desc>Patch to prevent deletion of empty element</desc>
            <filename>emptydelete.patch</filename>
            <type>text/plain</type>
            <size>1963</size>
            <attacher name="David Gatwood">dgatwood</attacher>
            
              <data encoding="base64">SW5kZXg6IFNvdXJjZS9XZWJDb3JlL2VkaXRpbmcvRGVsZXRlU2VsZWN0aW9uQ29tbWFuZC5jcHAK
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvZWRpdGluZy9EZWxldGVTZWxlY3Rpb25Db21t
YW5kLmNwcAkocmV2aXNpb24gMTc0MzI0KQorKysgU291cmNlL1dlYkNvcmUvZWRpdGluZy9EZWxl
dGVTZWxlY3Rpb25Db21tYW5kLmNwcAkod29ya2luZyBjb3B5KQpAQCAtMzksNiArMzksNyBAQAog
I2luY2x1ZGUgIkhUTUxTdHlsZUVsZW1lbnQuaCIKICNpbmNsdWRlICJIVE1MVGFibGVFbGVtZW50
LmgiCiAjaW5jbHVkZSAiTm9kZVRyYXZlcnNhbC5oIgorI2luY2x1ZGUgIlBvc2l0aW9uLmgiCiAj
aW5jbHVkZSAiUmVuZGVyVGFibGVDZWxsLmgiCiAjaW5jbHVkZSAiUmVuZGVyVGV4dC5oIgogI2lu
Y2x1ZGUgIlRleHQuaCIKQEAgLTUzMCw3ICs1MzEsNyBAQAogICAgICAgICAgICAgICAgIG5vZGUg
PSBuZXh0Tm9kZS5nZXQoKTsKICAgICAgICAgICAgIH0gZWxzZSB7CiAgICAgICAgICAgICAgICAg
Tm9kZSogbiA9IG5vZGUtPmxhc3REZXNjZW5kYW50KCk7Ci0gICAgICAgICAgICAgICAgaWYgKG1f
ZG93bnN0cmVhbUVuZC5kZXByZWNhdGVkTm9kZSgpID09IG4gJiYgbV9kb3duc3RyZWFtRW5kLmRl
cHJlY2F0ZWRFZGl0aW5nT2Zmc2V0KCkgPj0gY2FyZXRNYXhPZmZzZXQobikpIHsKKyAgICAgICAg
ICAgICAgICBpZiAobV9kb3duc3RyZWFtRW5kLmRlcHJlY2F0ZWROb2RlKCkgPT0gbiAmJiBtX2Rv
d25zdHJlYW1FbmQuZGVwcmVjYXRlZEVkaXRpbmdPZmZzZXQoKSA+PSBjYXJldE1heE9mZnNldChu
KSAmJiAhZW5kc09mTm9kZUFyZVZpc3VhbGx5RGlzdGluY3RQb3NpdGlvbnMobm9kZS5nZXQoKSkp
IHsKICAgICAgICAgICAgICAgICAgICAgcmVtb3ZlTm9kZShub2RlLmdldCgpKTsKICAgICAgICAg
ICAgICAgICAgICAgbm9kZSA9IDA7CiAgICAgICAgICAgICAgICAgfSBlbHNlCkluZGV4OiBTb3Vy
Y2UvV2ViQ29yZS9kb20vUG9zaXRpb24uaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9k
b20vUG9zaXRpb24uaAkocmV2aXNpb24gMTc0MzI0KQorKysgU291cmNlL1dlYkNvcmUvZG9tL1Bv
c2l0aW9uLmgJKHdvcmtpbmcgY29weSkKQEAgLTUxLDYgKzUxLDggQEAKICAgICBCYWNrd2FyZERl
bGV0aW9uIC8vIFN1YmplY3QgdG8gcGxhdGZvcm0gY29udmVudGlvbnMuCiB9OwogCitib29sIGVu
ZHNPZk5vZGVBcmVWaXN1YWxseURpc3RpbmN0UG9zaXRpb25zKE5vZGUqIG5vZGUpOworCiBjbGFz
cyBQb3NpdGlvbiB7CiBwdWJsaWM6CiAgICAgZW51bSBBbmNob3JUeXBlIHsKLS0tIFNvdXJjZS9X
ZWJDb3JlL2RvbS9Qb3NpdGlvbi5jcHAub3JpZwkyMDE0LTEwLTEwIDE1OjU3OjQ2LjAwMDAwMDAw
MCAtMDcwMAorKysgU291cmNlL1dlYkNvcmUvZG9tL1Bvc2l0aW9uLmNwcAkyMDE0LTEwLTEwIDE1
OjM1OjQ5LjAwMDAwMDAwMCAtMDcwMApAQCAtNTIzLDcgKzUyMyw3IEBACiAvLyBJZiB0cnVlLCBh
ZGphY2VudCBjYW5kaWRhdGVzIGFyZSB2aXN1YWxseSBkaXN0aW5jdC4KIC8vIEZJWE1FOiBEaXNy
ZWdhcmQgbm9kZXMgd2l0aCByZW5kZXJlcnMgdGhhdCBoYXZlIG5vIGhlaWdodCwgYXMgd2UgZG8g
aW4gaXNDYW5kaWRhdGUuCiAvLyBGSVhNRTogU2hhcmUgY29kZSB3aXRoIGlzQ2FuZGlkYXRlLCBp
ZiBwb3NzaWJsZS4KLXN0YXRpYyBib29sIGVuZHNPZk5vZGVBcmVWaXN1YWxseURpc3RpbmN0UG9z
aXRpb25zKE5vZGUqIG5vZGUpCitib29sIGVuZHNPZk5vZGVBcmVWaXN1YWxseURpc3RpbmN0UG9z
aXRpb25zKE5vZGUqIG5vZGUpCiB7CiAgICAgaWYgKCFub2RlIHx8ICFub2RlLT5yZW5kZXJlcigp
KQogICAgICAgICByZXR1cm4gZmFsc2U7Cg==
</data>

          </attachment>
          <attachment
              isobsolete="1"
              ispatch="0"
              isprivate="0"
          >
            <attachid>239665</attachid>
            <date>2014-10-10 19:19:33 -0700</date>
            <delta_ts>2014-12-15 15:44:55 -0800</delta_ts>
            <desc>Rework of patch to prevent deletion of empty element</desc>
            <filename>emptydelete-01.patch</filename>
            <type>application/octet-stream</type>
            <size>3932</size>
            <attacher name="David Gatwood">dgatwood</attacher>
            
              <data encoding="base64">SW5kZXg6IFNvdXJjZS9XZWJDb3JlL2VkaXRpbmcvRGVsZXRlU2VsZWN0aW9uQ29tbWFuZC5jcHAK
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvZWRpdGluZy9EZWxldGVTZWxlY3Rpb25Db21t
YW5kLmNwcAkocmV2aXNpb24gMTc0MzI0KQorKysgU291cmNlL1dlYkNvcmUvZWRpdGluZy9EZWxl
dGVTZWxlY3Rpb25Db21tYW5kLmNwcAkod29ya2luZyBjb3B5KQpAQCAtMzksNiArMzksOCBAQAog
I2luY2x1ZGUgIkhUTUxTdHlsZUVsZW1lbnQuaCIKICNpbmNsdWRlICJIVE1MVGFibGVFbGVtZW50
LmgiCiAjaW5jbHVkZSAiTm9kZVRyYXZlcnNhbC5oIgorI2luY2x1ZGUgIk5vZGVMaXN0LmgiCisj
aW5jbHVkZSAiUG9zaXRpb24uaCIKICNpbmNsdWRlICJSZW5kZXJUYWJsZUNlbGwuaCIKICNpbmNs
dWRlICJSZW5kZXJUZXh0LmgiCiAjaW5jbHVkZSAiVGV4dC5oIgpAQCAtNTMxLDcgKzUzMyw5IEBA
CiAgICAgICAgICAgICB9IGVsc2UgewogICAgICAgICAgICAgICAgIE5vZGUqIG4gPSBub2RlLT5s
YXN0RGVzY2VuZGFudCgpOwogICAgICAgICAgICAgICAgIGlmIChtX2Rvd25zdHJlYW1FbmQuZGVw
cmVjYXRlZE5vZGUoKSA9PSBuICYmIG1fZG93bnN0cmVhbUVuZC5kZXByZWNhdGVkRWRpdGluZ09m
ZnNldCgpID49IGNhcmV0TWF4T2Zmc2V0KG4pKSB7Ci0gICAgICAgICAgICAgICAgICAgIHJlbW92
ZU5vZGUobm9kZS5nZXQoKSk7CisgICAgICAgICAgICAgICAgICAgIGlmICghZW5kc09mTm9kZUFy
ZVZpc3VhbGx5RGlzdGluY3RQb3NpdGlvbnMobm9kZS5nZXQoKSkpIHsKKyAgICAgICAgICAgICAg
ICAgICAgICAgIHJlbW92ZU5vZGUobm9kZS5nZXQoKSk7CisgICAgICAgICAgICAgICAgICAgIH0K
ICAgICAgICAgICAgICAgICAgICAgbm9kZSA9IDA7CiAgICAgICAgICAgICAgICAgfSBlbHNlCiAg
ICAgICAgICAgICAgICAgICAgIG5vZGUgPSBOb2RlVHJhdmVyc2FsOjpuZXh0KG5vZGUuZ2V0KCkp
OwpAQCAtNjE1LDkgKzYxOSwxOSBAQAogICAgICAgICByZXR1cm47CiAgICAgICAgIAogICAgIC8v
IFRoZXJlJ3Mgbm90aGluZyB0byBtZXJnZS4KLSAgICBpZiAobV91cHN0cmVhbVN0YXJ0ID09IG1f
ZG93bnN0cmVhbUVuZCkKKyAgICBpZiAobV91cHN0cmVhbVN0YXJ0ID09IG1fZG93bnN0cmVhbUVu
ZCkgewogICAgICAgICByZXR1cm47Ci0gICAgICAgIAorICAgIH0KKyAgICAKKyAgICAvLyBDYW4n
dCBtZXJnZSBpbnRvIGEgcGFyZW50IGVsZW1lbnQuICBUaGlzIG9jY3VycyBpZiB5b3UgZGVsZXRl
IHRoZSBsYXN0IGNoaWxkIG9mIGFuCisgICAgLy8gZWxlbWVudCB0aGF0IGhhcyA6OmJlZm9yZSBh
bmQgOjphZnRlciBwc2V1ZG9lbGVtZW50cyAoYmVjYXVzZSBzdWNoIGFuIGVsZW1lbnQKKyAgICAv
LyBjYW4gaGF2ZSBhbiBlZGl0aW5nIGN1cnNvciBpbnNpZGUgaXQgZXZlbiB3aGVuIGVtcHR5KQor
ICAgIGlmIChtX3Vwc3RyZWFtU3RhcnQuZGVwcmVjYXRlZE5vZGUoKS0+aXNEZXNjZW5kYW50T2Yo
bV9kb3duc3RyZWFtRW5kLmRlcHJlY2F0ZWROb2RlKCkpKSB7CisgICAgICAgIC8vIFNldCB0aGUg
ZW5kIHBvc2l0aW9uIHRvIGJlIGluc2lkZSB0aGUgZWxlbWVudCBpbnN0ZWFkIG9mIGFmdGVyIGl0
LgorICAgICAgICBtX2VuZGluZ1Bvc2l0aW9uID0gUG9zaXRpb24obV91cHN0cmVhbVN0YXJ0LmRl
cHJlY2F0ZWROb2RlKCksIDAsIFBvc2l0aW9uOjpQb3NpdGlvbklzT2Zmc2V0SW5BbmNob3IpOwor
ICAgICAgICByZXR1cm47CisgICAgfQorICAgIAogICAgIFZpc2libGVQb3NpdGlvbiBzdGFydE9m
UGFyYWdyYXBoVG9Nb3ZlKG1fZG93bnN0cmVhbUVuZCk7CiAgICAgVmlzaWJsZVBvc2l0aW9uIG1l
cmdlRGVzdGluYXRpb24obV91cHN0cmVhbVN0YXJ0KTsKICAgICAKQEAgLTY3NSw2ICs2ODksMjMg
QEAKICAgICAvLyBUaGUgZW5kaW5nUG9zaXRpb24gd2FzIGxpa2VseSBjbG9iYmVyZWQgYnkgdGhl
IG1vdmUsIHNvIHJlY29tcHV0ZSBpdCAobW92ZVBhcmFncmFwaCBzZWxlY3RzIHRoZSBtb3ZlZCBw
YXJhZ3JhcGgpLgogICAgIG1fZW5kaW5nUG9zaXRpb24gPSBlbmRpbmdTZWxlY3Rpb24oKS5zdGFy
dCgpOwogfQorICAgIAorY2hhciAqcHJpbnRFbGVtZW50TmFtZSAoTm9kZSAqbXlub2RlKSBfX2F0
dHJpYnV0ZV9fKCh1bnVzZWQpKTsKK2NoYXIgKnByaW50RWxlbWVudE5hbWUgKE5vZGUgKm15bm9k
ZSkKK3sKKyAgICBFbGVtZW50ICplbHQgPSBkb3duY2FzdDxFbGVtZW50PihteW5vZGUpOworICAg
IAorICAgIHN0YXRpYyBjaGFyICp0ZW1wID0gTlVMTDsKKyAgICAKKyAgICBpZiAodGVtcCkgZnJl
ZSh0ZW1wKTsKKyAgICAKKyAgICB0ZW1wID0gKGNoYXIgKiltYWxsb2MoZWx0LT50YWdOYW1lKCku
bGVuZ3RoKCkgKyAxKTsKKyAgICAKKyAgICBzdHJsY3B5KHRlbXAsIGVsdC0+dGFnTmFtZSgpLmFz
Y2lpKCkuZGF0YSgpLCBlbHQtPnRhZ05hbWUoKS5sZW5ndGgoKSArIDEpOworICAgIHRlbXBbZWx0
LT50YWdOYW1lKCkubGVuZ3RoKCldID0gJ1wwJzsKKyAgICAKKyAgICByZXR1cm4gdGVtcDsKK30K
IAogdm9pZCBEZWxldGVTZWxlY3Rpb25Db21tYW5kOjpyZW1vdmVQcmV2aW91c2x5U2VsZWN0ZWRF
bXB0eVRhYmxlUm93cygpCiB7CkBAIC04NTUsNiArODg2LDkgQEAKICAgICAKICAgICByZW1vdmVQ
cmV2aW91c2x5U2VsZWN0ZWRFbXB0eVRhYmxlUm93cygpOwogICAgIAorICAgIGlmIChtX25lZWRQ
bGFjZWhvbGRlciAmJiBlbmRzT2ZOb2RlQXJlVmlzdWFsbHlEaXN0aW5jdFBvc2l0aW9ucyhtX2Vu
ZGluZ1Bvc2l0aW9uLmVsZW1lbnQoKSkpCisgICAgICAgIG1fbmVlZFBsYWNlaG9sZGVyID0gZmFs
c2U7CisgICAgCiAgICAgUmVmUHRyPE5vZGU+IHBsYWNlaG9sZGVyID0gbV9uZWVkUGxhY2Vob2xk
ZXIgPyBjcmVhdGVCcmVha0VsZW1lbnQoZG9jdW1lbnQoKSkuZ2V0KCkgOiAwOwogICAgIAogICAg
IGlmIChwbGFjZWhvbGRlcikgewpJbmRleDogU291cmNlL1dlYkNvcmUvZG9tL1Bvc2l0aW9uLmgK
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvZG9tL1Bvc2l0aW9uLmgJKHJldmlzaW9uIDE3
NDMyNCkKKysrIFNvdXJjZS9XZWJDb3JlL2RvbS9Qb3NpdGlvbi5oCSh3b3JraW5nIGNvcHkpCkBA
IC01MSw2ICs1MSw4IEBACiAgICAgQmFja3dhcmREZWxldGlvbiAvLyBTdWJqZWN0IHRvIHBsYXRm
b3JtIGNvbnZlbnRpb25zLgogfTsKIAorYm9vbCBlbmRzT2ZOb2RlQXJlVmlzdWFsbHlEaXN0aW5j
dFBvc2l0aW9ucyhOb2RlKiBub2RlKTsKKwogY2xhc3MgUG9zaXRpb24gewogcHVibGljOgogICAg
IGVudW0gQW5jaG9yVHlwZSB7Ci0tLSBTb3VyY2UvV2ViQ29yZS9kb20vUG9zaXRpb24uY3BwLm9y
aWcJMjAxNC0xMC0xMCAxNTo1Nzo0Ni4wMDAwMDAwMDAgLTA3MDAKKysrIFNvdXJjZS9XZWJDb3Jl
L2RvbS9Qb3NpdGlvbi5jcHAJMjAxNC0xMC0xMCAxNTozNTo0OS4wMDAwMDAwMDAgLTA3MDAKQEAg
LTUyMyw3ICs1MjMsNyBAQAogLy8gSWYgdHJ1ZSwgYWRqYWNlbnQgY2FuZGlkYXRlcyBhcmUgdmlz
dWFsbHkgZGlzdGluY3QuCiAvLyBGSVhNRTogRGlzcmVnYXJkIG5vZGVzIHdpdGggcmVuZGVyZXJz
IHRoYXQgaGF2ZSBubyBoZWlnaHQsIGFzIHdlIGRvIGluIGlzQ2FuZGlkYXRlLgogLy8gRklYTUU6
IFNoYXJlIGNvZGUgd2l0aCBpc0NhbmRpZGF0ZSwgaWYgcG9zc2libGUuCi1zdGF0aWMgYm9vbCBl
bmRzT2ZOb2RlQXJlVmlzdWFsbHlEaXN0aW5jdFBvc2l0aW9ucyhOb2RlKiBub2RlKQorYm9vbCBl
bmRzT2ZOb2RlQXJlVmlzdWFsbHlEaXN0aW5jdFBvc2l0aW9ucyhOb2RlKiBub2RlKQogewogICAg
IGlmICghbm9kZSB8fCAhbm9kZS0+cmVuZGVyZXIoKSkKICAgICAgICAgcmV0dXJuIGZhbHNlOwo=
</data>

          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>239689</attachid>
            <date>2014-10-11 16:21:20 -0700</date>
            <delta_ts>2014-12-15 15:44:55 -0800</delta_ts>
            <desc>Fix for an additional case where cursor can&apos;t be placed after the last child element</desc>
            <filename>endOfNode.patch</filename>
            <type>text/plain</type>
            <size>1642</size>
            <attacher name="David Gatwood">dgatwood</attacher>
            
              <data encoding="base64">LS0tIFNvdXJjZS9XZWJDb3JlL2RvbS9Qb3NpdGlvbi5jcHAub3JpZwkyMDE0LTEwLTExIDE0OjU4
OjU2LjAwMDAwMDAwMCAtMDcwMAorKysgU291cmNlL1dlYkNvcmUvZG9tL1Bvc2l0aW9uLmNwcAky
MDE0LTEwLTExIDE2OjEyOjMxLjAwMDAwMDAwMCAtMDcwMApAQCAtMTAwNSw2ICsxMDA1LDkgQEAK
ICAgICAgICBjb25zdGl0dXRlIGEgY2FuZGlkYXRlIHBvc2l0aW9uLCB0cmVhdCB0aGUgaW50ZXJp
b3Igb2YgdGhlIG5vZGUgYXMgYSBjYW5kaWRhdGUuCiAgICAgICovCiAgICAgTm9kZSAqbm9kZSA9
IGRlcHJlY2F0ZWROb2RlKCk7CisgICAgdW5zaWduZWQgbWF4T2Zmc2V0ID0gbm9kZS0+aXNFbGVt
ZW50Tm9kZSgpID8gbm9kZS0+Y2hpbGROb2RlcygpLT5sZW5ndGgoKSA6IDA7CisgICAgaW50IGFj
dHVhbE9mZnNldCA9IChtX2FuY2hvclR5cGUgPT0gUG9zaXRpb25Jc0JlZm9yZUNoaWxkcmVuKSA/
IDAgOgorICAgICAgICAgICAgICAgICAgICAgICAgICAgIChtX2FuY2hvclR5cGUgPT0gUG9zaXRp
b25Jc0FmdGVyQ2hpbGRyZW4pID8gbWF4T2Zmc2V0IDogbV9vZmZzZXQ7CiAgICAgaWYgKG5vZGUt
PmlzRWxlbWVudE5vZGUoKSkgewogICAgICAgICBFbGVtZW50ICplbHQgPSBkb3duY2FzdDxFbGVt
ZW50Pihub2RlKTsKICAgICAgICAgaWYgKCFlbHQtPmZpcnN0Q2hpbGQoKSkgewpAQCAtMTAxMiwx
NSArMTAxNSwxMyBAQAogICAgICAgICAgICAgICAgIHJldHVybiB0cnVlOwogICAgICAgICAgICAg
fQogICAgICAgICB9IGVsc2UgewotICAgICAgICAgICAgaWYgKG1fb2Zmc2V0ID49IDApIHsKLSAg
ICAgICAgICAgICAgICB1bnNpZ25lZCBvZmZzZXQgPSAodW5zaWduZWQpbV9vZmZzZXQ7Ci0gICAg
ICAgICAgICAgICAgCisgICAgICAgICAgICBpZiAoYWN0dWFsT2Zmc2V0ID49IDApIHsKICAgICAg
ICAgICAgICAgICBSZWZQdHI8Tm9kZT4gY3VycmVudCA9IGVsdDsKICAgICAgICAgICAgICAgICBO
b2RlVmVjdG9yIGNoaWxkcmVuOwogICAgICAgICAgICAgICAgIGdldENoaWxkTm9kZXMoKmN1cnJl
bnQsIGNoaWxkcmVuKTsKLSAgICAgICAgICAgICAgICBOb2RlICpsZWZ0ID0gKG9mZnNldCA+IDAp
ID8gJmNoaWxkcmVuLmF0KG9mZnNldCAtIDEpLmdldCgpIDogTlVMTDsKLSAgICAgICAgICAgICAg
ICBOb2RlICpyaWdodCA9IChvZmZzZXQgPCBjaGlsZHJlbi5zaXplKCkpID8KLSAgICAgICAgICAg
ICAgICAgICAgJmNoaWxkcmVuLmF0KG9mZnNldCkuZ2V0KCkgOiBOVUxMOworICAgICAgICAgICAg
ICAgIE5vZGUgKmxlZnQgPSAoYWN0dWFsT2Zmc2V0ID4gMCkgPyAmY2hpbGRyZW4uYXQoYWN0dWFs
T2Zmc2V0IC0gMSkuZ2V0KCkgOiBOVUxMOworICAgICAgICAgICAgICAgIE5vZGUgKnJpZ2h0ID0g
KCh1bnNpZ25lZClhY3R1YWxPZmZzZXQgPCBjaGlsZHJlbi5zaXplKCkpID8KKyAgICAgICAgICAg
ICAgICAgICAgJmNoaWxkcmVuLmF0KGFjdHVhbE9mZnNldCkuZ2V0KCkgOiBOVUxMOwogICAgICAg
ICAgICAgICAgIAogICAgICAgICAgICAgICAgIGlmIChsZWZ0ICYmIGxlZnQtPnJlbmRlcmVyKCkg
JiYgbGVmdC0+cmVuZGVyZXIoKS0+aXNUZXh0KCkpIHsKICAgICAgICAgICAgICAgICAgICAgUmVu
ZGVyVGV4dCAqcnQgPSB0b1JlbmRlclRleHQobGVmdC0+cmVuZGVyZXIoKSk7Cg==
</data>

          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>239746</attachid>
            <date>2014-10-13 14:21:57 -0700</date>
            <delta_ts>2014-10-13 14:30:25 -0700</delta_ts>
            <desc>Fix for an occasional hang when walking off the left edge of certain block elements</desc>
            <filename>hangfix.patch</filename>
            <type>text/plain</type>
            <size>882</size>
            <attacher name="David Gatwood">dgatwood</attacher>
            
              <data encoding="base64">LS0tIFNvdXJjZS9XZWJDb3JlL2VkaXRpbmcvVmlzaWJsZVBvc2l0aW9uLmNwcC5vcmlnCTIwMTQt
MTAtMTMgMTQ6MTU6NTQuMDAwMDAwMDAwIC0wNzAwCisrKyBTb3VyY2UvV2ViQ29yZS9lZGl0aW5n
L1Zpc2libGVQb3NpdGlvbi5jcHAJMjAxNC0xMC0xMyAxNDoxNjo0OS4wMDAwMDAwMDAgLTA3MDAK
QEAgLTMyOSw2ICszMjksMTQgQEAKIAogICAgICAgICBpZiAoKHAuaXNDYW5kaWRhdGUoKSAmJiBw
LmRvd25zdHJlYW0oKSAhPSBkb3duc3RyZWFtU3RhcnQpIHx8IHAuYXRTdGFydE9mVHJlZSgpIHx8
IHAuYXRFbmRPZlRyZWUoKSkKICAgICAgICAgICAgIHJldHVybiBwOworICAgICAgICAKKyAgICAg
ICAgLy8gUHJldmVudCBhbiBlbmRsZXNzIGxvb3Agd2hlbiBzdGVwcGluZyBvZmYgdGhlIGxlZnQg
ZWRnZSBvZiBibG9jayBlbGVtZW50cyB0aGF0IGNvbnRhaW4KKyAgICAgICAgLy8gb25seSB0ZXh0
IChiZWNhdXNlIG9idGFpbmluZyB0aGUgaW5saW5lIGJveCBmb3Igc3VjaCBhIGJsb2NrIHdvdWxk
IHJldHVybiB0aGUgZmlyc3QgdGV4dAorICAgICAgICAvLyBib3gsIHdoaWNoIGlzIHdoZXJlIHdl
IGp1c3QgY2FtZSBmcm9tKS4KKyAgICAgICAgaWYgKCFwLmlzQ2FuZGlkYXRlKCkgJiYgb2Zmc2V0
ID09IGJveC0+Y2FyZXRMZWZ0bW9zdE9mZnNldCgpKSB7CisgICAgICAgICAgICBQb3NpdGlvbiBi
ZWZvcmUgPSBjcmVhdGVMZWdhY3lFZGl0aW5nUG9zaXRpb24obm9kZS0+cGFyZW50RWxlbWVudCgp
LCBub2RlLT5jb21wdXRlTm9kZUluZGV4KCkpOworICAgICAgICAgICAgaWYgKGJlZm9yZS5pc0Nh
bmRpZGF0ZSgpKSByZXR1cm4gYmVmb3JlOworICAgICAgICB9CiAKICAgICAgICAgQVNTRVJUKHAg
IT0gbV9kZWVwUG9zaXRpb24pOwogICAgIH0K
</data>

          </attachment>
          <attachment
              isobsolete="1"
              ispatch="0"
              isprivate="0"
          >
            <attachid>239747</attachid>
            <date>2014-10-13 14:30:25 -0700</date>
            <delta_ts>2014-12-15 15:44:55 -0800</delta_ts>
            <desc>Update to occasional hang patch.</desc>
            <filename>hangfix-1.patch</filename>
            <type>application/octet-stream</type>
            <size>1585</size>
            <attacher name="David Gatwood">dgatwood</attacher>
            
              <data encoding="base64">LS0tIFNvdXJjZS9XZWJDb3JlL2VkaXRpbmcvVmlzaWJsZVBvc2l0aW9uLmNwcC5vcmlnCTIwMTQt
MTAtMTMgMTQ6MTU6NTQuMDAwMDAwMDAwIC0wNzAwCisrKyBTb3VyY2UvV2ViQ29yZS9lZGl0aW5n
L1Zpc2libGVQb3NpdGlvbi5jcHAJMjAxNC0xMC0xMyAxNDoyOTowOC4wMDAwMDAwMDAgLTA3MDAK
QEAgLTMyOSw2ICszMjksMTQgQEAKIAogICAgICAgICBpZiAoKHAuaXNDYW5kaWRhdGUoKSAmJiBw
LmRvd25zdHJlYW0oKSAhPSBkb3duc3RyZWFtU3RhcnQpIHx8IHAuYXRTdGFydE9mVHJlZSgpIHx8
IHAuYXRFbmRPZlRyZWUoKSkKICAgICAgICAgICAgIHJldHVybiBwOworICAgICAgICAKKyAgICAg
ICAgLy8gUHJldmVudCBhbiBpbmZpbml0ZSBsb29wIHdoZW4gc3RlcHBpbmcgb2ZmIHRoZSBsZWZ0
IGVkZ2Ugb2YgYmxvY2sgZWxlbWVudHMgdGhhdCBjb250YWluCisgICAgICAgIC8vIG9ubHkgdGV4
dCAoYmVjYXVzZSBvYnRhaW5pbmcgdGhlIGlubGluZSBib3ggZm9yIHN1Y2ggYSBibG9jayB3b3Vs
ZCByZXR1cm4gdGhlIGZpcnN0IHRleHQKKyAgICAgICAgLy8gYm94LCB3aGljaCBpcyB3aGVyZSB3
ZSBqdXN0IGNhbWUgZnJvbSkuCisgICAgICAgIGlmICghcC5pc0NhbmRpZGF0ZSgpICYmIG9mZnNl
dCA9PSBib3gtPmNhcmV0TGVmdG1vc3RPZmZzZXQoKSkgeworICAgICAgICAgICAgUG9zaXRpb24g
YmVmb3JlID0gY3JlYXRlTGVnYWN5RWRpdGluZ1Bvc2l0aW9uKG5vZGUtPnBhcmVudEVsZW1lbnQo
KSwgbm9kZS0+Y29tcHV0ZU5vZGVJbmRleCgpKTsKKyAgICAgICAgICAgIGlmIChiZWZvcmUuaXND
YW5kaWRhdGUoKSkgcmV0dXJuIGJlZm9yZTsKKyAgICAgICAgfQogCiAgICAgICAgIEFTU0VSVChw
ICE9IG1fZGVlcFBvc2l0aW9uKTsKICAgICB9CkBAIC01NjMsNiArNTcxLDE0IEBACiAKICAgICAg
ICAgaWYgKChwLmlzQ2FuZGlkYXRlKCkgJiYgcC5kb3duc3RyZWFtKCkgIT0gZG93bnN0cmVhbVN0
YXJ0KSB8fCBwLmF0U3RhcnRPZlRyZWUoKSB8fCBwLmF0RW5kT2ZUcmVlKCkpCiAgICAgICAgICAg
ICByZXR1cm4gcDsKKyAgICAgICAgCisgICAgICAgIC8vIFdoZW4gc3RlcHBpbmcgb2ZmIHRoZSBy
aWdodCBlZGdlIG9mIGJsb2NrIGVsZW1lbnRzIHRoYXQgY29udGFpbiBvbmx5IHRleHQsIG9idGFp
bmluZyB0aGUKKyAgICAgICAgLy8gaW5saW5lIGJveCB3b3VsZCByZXR1cm4gdGhlIGZpcnN0IHRl
eHQgYm94LCB3aGljaCBpcyBiZWZvcmUgdGhlIHNwb3QgKG9yIGVxdWFsIHRvIHRoZSBzcG90KQor
ICAgICAgICAvLyB0aGF0IHdlIGp1c3QgY2FtZSBmcm9tKS4KKyAgICAgICAgaWYgKCFwLmlzQ2Fu
ZGlkYXRlKCkgJiYgb2Zmc2V0ID09IGJveC0+Y2FyZXRMZWZ0bW9zdE9mZnNldCgpKSB7CisgICAg
ICAgICAgICBQb3NpdGlvbiBhZnRlciA9IGNyZWF0ZUxlZ2FjeUVkaXRpbmdQb3NpdGlvbihub2Rl
LT5wYXJlbnRFbGVtZW50KCksIG5vZGUtPmNvbXB1dGVOb2RlSW5kZXgoKSArIDEpOworICAgICAg
ICAgICAgaWYgKGFmdGVyLmlzQ2FuZGlkYXRlKCkpIHJldHVybiBhZnRlcjsKKyAgICAgICAgfQog
CiAgICAgICAgIEFTU0VSVChwICE9IG1fZGVlcFBvc2l0aW9uKTsKICAgICB9Cg==
</data>

          </attachment>
          <attachment
              isobsolete="0"
              ispatch="1"
              isprivate="0"
          >
            <attachid>243323</attachid>
            <date>2014-12-15 15:44:55 -0800</date>
            <delta_ts>2014-12-15 15:44:55 -0800</delta_ts>
            <desc>Adds proper highlighting for ::before and ::after pseudo-elements.</desc>
            <filename>2014-12-15.patch</filename>
            <type>text/plain</type>
            <size>127675</size>
            <attacher name="David Gatwood">dgatwood</attacher>
            
              <data encoding="base64">SW5kZXg6IExheW91dFRlc3RzL2VkaXRpbmcvZGVsZXRpbmcvc21hcnQtZGVsZXRlLTAwMS5odG1s
Cj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT0KLS0tIExheW91dFRlc3RzL2VkaXRpbmcvZGVsZXRpbmcvc21hcnQtZGVsZXRl
LTAwMS5odG1sCShyZXZpc2lvbiAxNzQzMjQpCisrKyBMYXlvdXRUZXN0cy9lZGl0aW5nL2RlbGV0
aW5nL3NtYXJ0LWRlbGV0ZS0wMDEuaHRtbAkod29ya2luZyBjb3B5KQpAQCAtMjEsNiArMjEsNyBA
QAogPHNjcmlwdD4KIAogZnVuY3Rpb24gZWRpdGluZ1Rlc3QoKSB7CisgICAgd2luZG93LmdldFNl
bGVjdGlvbigpLmNvbGxhcHNlKHRlc3QuZmlyc3RDaGlsZCwgMSk7CiAgICAgZG91YmxlQ2xpY2tB
dFNlbGVjdGlvblN0YXJ0KCk7CiAgICAgZGVsZXRlQ29tbWFuZCgpOwogfQpJbmRleDogTGF5b3V0
VGVzdHMvZWRpdGluZy9lZGl0aW5nLmpzCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIExheW91dFRlc3RzL2VkaXRp
bmcvZWRpdGluZy5qcwkocmV2aXNpb24gMTc0MzI0KQorKysgTGF5b3V0VGVzdHMvZWRpdGluZy9l
ZGl0aW5nLmpzCSh3b3JraW5nIGNvcHkpCkBAIC04OTcsMTIgKzg5Nyw1NSBAQAogICAgIGlmICh3
aW5kb3cudGVzdFJ1bm5lcikKICAgICAgICAgdGVzdFJ1bm5lci5kdW1wRWRpdGluZ0NhbGxiYWNr
cygpOwogCisgICAgZm9jdXNPbkZpcnN0VGV4dEluVGVzdEVsZW1lbnRJZkV4aXN0cygpOworCisg
ICAgZWRpdGluZ1Rlc3QoKTsKK30KKworZnVuY3Rpb24gZm9jdXNPbkZpcnN0VGV4dEluVGVzdEVs
ZW1lbnRJZkV4aXN0cygpIHsKICAgICB2YXIgZWxlbSA9IGRvY3VtZW50LmdldEVsZW1lbnRCeUlk
KCJ0ZXN0Iik7CiAgICAgdmFyIHNlbGVjdGlvbiA9IHdpbmRvdy5nZXRTZWxlY3Rpb24oKTsKLSAg
ICBzZWxlY3Rpb24uc2V0UG9zaXRpb24oZWxlbSwgMCk7Ci0gICAgZWRpdGluZ1Rlc3QoKTsKKyAg
ICBpZiAoZWxlbSkgeworICAgICAgICB2YXIgdHJhdmVyc2UgPSBmdW5jdGlvbiAobm9kZSwgb2Zm
c2V0LCBjb25kaXRpb24pIHsKKyAgICAgICAgICAgIHZhciBvYmogPSBjb25kaXRpb24obm9kZSwg
b2Zmc2V0KTsKKyAgICAgICAgICAgIGlmIChvYmopCisgICAgICAgICAgICAgICAgcmV0dXJuIG9i
ajsKKworICAgICAgICAgICAgdmFyIGNoaWxkcmVuID0gbm9kZS5jaGlsZE5vZGVzOworICAgICAg
ICAgICAgdmFyIGxlbiA9IGNoaWxkcmVuLmxlbmd0aDsKKyAgICAgICAgICAgIGZvciAodmFyIGkg
PSAwOyBpIDwgbGVuOyBpKyspIHsKKyAgICAgICAgICAgICAgICB2YXIgY2hpbGQgPSBjaGlsZHJl
bltpXTsKKyAgICAgICAgICAgICAgICBvYmogPSB0cmF2ZXJzZShjaGlsZCwgaSwgY29uZGl0aW9u
KTsKKyAgICAgICAgICAgICAgICBpZiAob2JqKQorICAgICAgICAgICAgICAgICAgICByZXR1cm4g
b2JqOworICAgICAgICAgICAgfQorICAgICAgICAgICAgcmV0dXJuIG51bGw7CisgICAgICAgIH0K
KworICAgICAgICB2YXIgZmlyc3RWaXNpYmxlUG9zaXRpb24gPSB0cmF2ZXJzZShlbGVtLCAwLCBm
dW5jdGlvbiAobm9kZSwgb2Zmc2V0KSB7CisgICAgICAgICAgICBpZiAobm9kZS5ub2RlTmFtZSA9
PSAnI3RleHQnKSB7CisgICAgICAgICAgICAgICAgb2Zmc2V0ID0gMDsKKyAgICAgICAgICAgICAg
ICB3aGlsZSAob2Zmc2V0IDwgbm9kZS50ZXh0Q29udGVudC5sZW5ndGggJiYgbm9kZS50ZXh0Q29u
dGVudFtvZmZzZXRdID09ICdcbicpCisgICAgICAgICAgICAgICAgICAgIG9mZnNldCsrOworICAg
ICAgICAgICAgICAgIHJldHVybiB7ICdub2RlJzogbm9kZSwgJ29mZnNldCc6IG9mZnNldCB9Owor
ICAgICAgICAgICAgfQorCisgICAgICAgICAgICBpZiAobm9kZS5ub2RlTmFtZSA9PSAnQlInIHx8
IG5vZGUubm9kZU5hbWUgPT0gJ0lNRycpCisgICAgICAgICAgICAgICAgcmV0dXJuIHsgJ25vZGUn
OiBub2RlLnBhcmVudE5vZGUsICdvZmZzZXQnOiBvZmZzZXQgfTsKKworICAgICAgICAgICAgcmV0
dXJuIG51bGw7CisgICAgICAgIH0pOworCisgICAgICAgIGlmIChmaXJzdFZpc2libGVQb3NpdGlv
bikKKyAgICAgICAgICAgIHNlbGVjdGlvbi5jb2xsYXBzZShmaXJzdFZpc2libGVQb3NpdGlvbi5u
b2RlLCBmaXJzdFZpc2libGVQb3NpdGlvbi5vZmZzZXQpOworICAgICAgICBlbHNlCisgICAgICAg
ICAgICBzZWxlY3Rpb24uY29sbGFwc2UoZWxlbSwgMCk7CisgICAgfSBlbHNlIHsKKyAgICAgICAg
c2VsZWN0aW9uLnJlbW92ZUFsbFJhbmdlcygpOworICAgIH0KIH0KIAorCiB2YXIgZHVtcEFzVGV4
dCA9IGZhbHNlOwogdmFyIGVsZW1lbnRzRm9yRHVtcGluZ01hcmt1cExpc3QgPSBbZG9jdW1lbnQu
Y3JlYXRlRWxlbWVudCgnb2wnKV07CiAKQEAgLTkxNSw5ICs5NTgsOCBAQAogCiAgICAgZHVtcEFz
VGV4dCA9IHRydWU7CiAKLSAgICB2YXIgZWxlbSA9IGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKCJ0
ZXN0Iik7Ci0gICAgdmFyIHNlbGVjdGlvbiA9IHdpbmRvdy5nZXRTZWxlY3Rpb24oKTsKLSAgICBz
ZWxlY3Rpb24uc2V0UG9zaXRpb24oZWxlbSwgMCk7CisgICAgZm9jdXNPbkZpcnN0VGV4dEluVGVz
dEVsZW1lbnRJZkV4aXN0cygpOworCiAgICAgZWRpdGluZ1Rlc3QoKTsKIAogICAgIGZvciAodmFy
IGkgPSAwOyBpIDwgZWxlbWVudHNGb3JEdW1waW5nTWFya3VwTGlzdC5sZW5ndGg7IGkrKykKSW5k
ZXg6IExheW91dFRlc3RzL2VkaXRpbmcvcGFzdGVib2FyZC9zbWFydC1kcmFnLWRyb3AuaHRtbAo9
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09Ci0tLSBMYXlvdXRUZXN0cy9lZGl0aW5nL3Bhc3RlYm9hcmQvc21hcnQtZHJhZy1k
cm9wLmh0bWwJKHJldmlzaW9uIDE3NDMyNCkKKysrIExheW91dFRlc3RzL2VkaXRpbmcvcGFzdGVi
b2FyZC9zbWFydC1kcmFnLWRyb3AuaHRtbAkod29ya2luZyBjb3B5KQpAQCAtNiw2ICs2LDcgQEAK
ICAgCiAgICAgaWYgKCF3aW5kb3cuZXZlbnRTZW5kZXIpCiAgICAgICAgIHJldHVybjsKKyAgICB3
aW5kb3cuZ2V0U2VsZWN0aW9uKCkuY29sbGFwc2UoZHJhZ21lLmZpcnN0Q2hpbGQsIDApOwogICAg
IGRvdWJsZUNsaWNrQXRTZWxlY3Rpb25TdGFydCgpOwogCiAgICAgLy8gRHJhZyAnaGVsbG8nCklu
ZGV4OiBMYXlvdXRUZXN0cy9lZGl0aW5nL3Bhc3RlYm9hcmQvc21hcnQtcGFzdGUtMDAxLmh0bWwK
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PQotLS0gTGF5b3V0VGVzdHMvZWRpdGluZy9wYXN0ZWJvYXJkL3NtYXJ0LXBhc3Rl
LTAwMS5odG1sCShyZXZpc2lvbiAxNzQzMjQpCisrKyBMYXlvdXRUZXN0cy9lZGl0aW5nL3Bhc3Rl
Ym9hcmQvc21hcnQtcGFzdGUtMDAxLmh0bWwJKHdvcmtpbmcgY29weSkKQEAgLTQyLDYgKzQyLDcg
QEAKIDxzY3JpcHQ+CiAKIGZ1bmN0aW9uIGVkaXRpbmdUZXN0KCkgeworICAgIHdpbmRvdy5nZXRT
ZWxlY3Rpb24oKS5jb2xsYXBzZSh0ZXN0LmZpcnN0Q2hpbGQsIDEpOwogICAgIGRvdWJsZUNsaWNr
QXRTZWxlY3Rpb25TdGFydCgpOwogICAgIGNvcHlDb21tYW5kKCk7CiAgICAgbW92ZVNlbGVjdGlv
bkZvcndhcmRCeUNoYXJhY3RlckNvbW1hbmQoKTsKSW5kZXg6IExheW91dFRlc3RzL2VkaXRpbmcv
cGFzdGVib2FyZC9zbWFydC1wYXN0ZS0wMDMuaHRtbAo9PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBMYXlvdXRUZXN0
cy9lZGl0aW5nL3Bhc3RlYm9hcmQvc21hcnQtcGFzdGUtMDAzLmh0bWwJKHJldmlzaW9uIDE3NDMy
NCkKKysrIExheW91dFRlc3RzL2VkaXRpbmcvcGFzdGVib2FyZC9zbWFydC1wYXN0ZS0wMDMuaHRt
bAkod29ya2luZyBjb3B5KQpAQCAtNDMsNiArNDMsNyBAQAogPHNjcmlwdD4KIAogZnVuY3Rpb24g
ZWRpdGluZ1Rlc3QoKSB7CisgICAgd2luZG93LmdldFNlbGVjdGlvbigpLmNvbGxhcHNlKHRlc3Qu
Zmlyc3RDaGlsZCwgMSk7CiAgICAgZG91YmxlQ2xpY2tBdFNlbGVjdGlvblN0YXJ0KCk7CiAgICAg
Y29weUNvbW1hbmQoKTsKICAgICBtb3ZlU2VsZWN0aW9uRm9yd2FyZEJ5Q2hhcmFjdGVyQ29tbWFu
ZCgpOwpJbmRleDogTGF5b3V0VGVzdHMvZWRpdGluZy9wYXN0ZWJvYXJkL3NtYXJ0LXBhc3RlLTAw
NC5odG1sCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT0KLS0tIExheW91dFRlc3RzL2VkaXRpbmcvcGFzdGVib2FyZC9zbWFy
dC1wYXN0ZS0wMDQuaHRtbAkocmV2aXNpb24gMTc0MzI0KQorKysgTGF5b3V0VGVzdHMvZWRpdGlu
Zy9wYXN0ZWJvYXJkL3NtYXJ0LXBhc3RlLTAwNC5odG1sCSh3b3JraW5nIGNvcHkpCkBAIC00Miw2
ICs0Miw3IEBACiA8c2NyaXB0PgogCiBmdW5jdGlvbiBlZGl0aW5nVGVzdCgpIHsKKyAgICB3aW5k
b3cuZ2V0U2VsZWN0aW9uKCkuY29sbGFwc2UodGVzdC5maXJzdENoaWxkLCAxKTsKICAgICBkb3Vi
bGVDbGlja0F0U2VsZWN0aW9uU3RhcnQoKTsKICAgICBjb3B5Q29tbWFuZCgpOwogICAgIG1vdmVT
ZWxlY3Rpb25Gb3J3YXJkQnlDaGFyYWN0ZXJDb21tYW5kKCk7CkluZGV4OiBMYXlvdXRUZXN0cy9l
ZGl0aW5nL3NlbGVjdGlvbi9ET01TZWxlY3Rpb24tRG9jdW1lbnRUeXBlLWV4cGVjdGVkLnR4dAo9
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09Ci0tLSBMYXlvdXRUZXN0cy9lZGl0aW5nL3NlbGVjdGlvbi9ET01TZWxlY3Rpb24t
RG9jdW1lbnRUeXBlLWV4cGVjdGVkLnR4dAkocmV2aXNpb24gMTc0MzI0KQorKysgTGF5b3V0VGVz
dHMvZWRpdGluZy9zZWxlY3Rpb24vRE9NU2VsZWN0aW9uLURvY3VtZW50VHlwZS1leHBlY3RlZC50
eHQJKHdvcmtpbmcgY29weSkKQEAgLTUsMTAgKzUsMTAgQEAKIAogUEFTUyBzZWwuYW5jaG9yTm9k
ZSBpcyBudWxsCiBQQVNTIHNlbC5hbmNob3JOb2RlIGlzIG51bGwKK1BBU1Mgc2VsLmNvbGxhcHNl
KGRvY1R5cGUpIHRocmV3IGV4Y2VwdGlvbiBJbnZhbGlkTm9kZVR5cGVFcnJvcjogRmFpbGVkIHRv
IGV4ZWN1dGUgJ2NvbGxhcHNlJyBvbiAnU2VsZWN0aW9uJzogVGhlIG5vZGUgcHJvdmlkZWQgaXMg
b2YgdHlwZSAnYycuLgogUEFTUyBzZWwuYW5jaG9yTm9kZSBpcyBudWxsCitQQVNTIHNlbC5jb2xs
YXBzZShkb2NUeXBlKSB0aHJldyBleGNlcHRpb24gSW52YWxpZE5vZGVUeXBlRXJyb3I6IEZhaWxl
ZCB0byBleGVjdXRlICdjb2xsYXBzZScgb24gJ1NlbGVjdGlvbic6IFRoZSBub2RlIHByb3ZpZGVk
IGlzIG9mIHR5cGUgJ2MnLi4KIFBBU1Mgc2VsLmFuY2hvck5vZGUgaXMgbnVsbAotUEFTUyBzZWwu
YW5jaG9yTm9kZSBpcyBudWxsCi1QQVNTIHNlbC5hbmNob3JOb2RlIGlzIG51bGwKIFBBU1Mgc2Vs
LmNvbnRhaW5zTm9kZShkb2NUeXBlKSBpcyBmYWxzZQogUEFTUyBzdWNjZXNzZnVsbHlQYXJzZWQg
aXMgdHJ1ZQogCkluZGV4OiBMYXlvdXRUZXN0cy9lZGl0aW5nL3NlbGVjdGlvbi9zY3JpcHQtdGVz
dHMvRE9NU2VsZWN0aW9uLURvY3VtZW50VHlwZS5qcwo9PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBMYXlvdXRUZXN0
cy9lZGl0aW5nL3NlbGVjdGlvbi9zY3JpcHQtdGVzdHMvRE9NU2VsZWN0aW9uLURvY3VtZW50VHlw
ZS5qcwkocmV2aXNpb24gMTc0MzI0KQorKysgTGF5b3V0VGVzdHMvZWRpdGluZy9zZWxlY3Rpb24v
c2NyaXB0LXRlc3RzL0RPTVNlbGVjdGlvbi1Eb2N1bWVudFR5cGUuanMJKHdvcmtpbmcgY29weSkK
QEAgLTksOCArOSw3IEBACiBzZWwuc2V0QmFzZUFuZEV4dGVudChudWxsLCAwLCBkb2NUeXBlLCAw
KTsKIHNob3VsZEJlTnVsbCgic2VsLmFuY2hvck5vZGUiKTsKIAotc2VsLmNvbGxhcHNlKGRvY1R5
cGUpOwotc2hvdWxkQmVOdWxsKCJzZWwuYW5jaG9yTm9kZSIpOworc2hvdWxkVGhyb3coInNlbC5j
b2xsYXBzZShkb2NUeXBlKSIsICciSW52YWxpZE5vZGVUeXBlRXJyb3I6IEZhaWxlZCB0byBleGVj
dXRlIFwnY29sbGFwc2VcJyBvbiBcJ1NlbGVjdGlvblwnOiBUaGUgbm9kZSBwcm92aWRlZCBpcyBv
ZiB0eXBlIFwnY1wnLiInKTsKIAogc2VsLnNlbGVjdEFsbENoaWxkcmVuKGRvY1R5cGUpOwogc2hv
dWxkQmVOdWxsKCJzZWwuYW5jaG9yTm9kZSIpOwpJbmRleDogTGF5b3V0VGVzdHMvZWRpdGluZy9z
ZWxlY3Rpb24vc2VsZWN0aW9uLWludmFsaWQtb2Zmc2V0LWV4cGVjdGVkLnR4dAo9PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
Ci0tLSBMYXlvdXRUZXN0cy9lZGl0aW5nL3NlbGVjdGlvbi9zZWxlY3Rpb24taW52YWxpZC1vZmZz
ZXQtZXhwZWN0ZWQudHh0CShyZXZpc2lvbiAxNzQzMjQpCisrKyBMYXlvdXRUZXN0cy9lZGl0aW5n
L3NlbGVjdGlvbi9zZWxlY3Rpb24taW52YWxpZC1vZmZzZXQtZXhwZWN0ZWQudHh0CSh3b3JraW5n
IGNvcHkpCkBAIC0xLDggKzEsOSBAQAotWW91IHNob3VsZCBzZWUgc2l4IE9LcyBiZWxvdyAoYW5k
IG5vdCBoYW5nKTogCitZb3Ugc2hvdWxkIHNlZSA3IE9LcyBiZWxvdyAoYW5kIG5vdCBoYW5nKTog
CiBPSwogT0sKIE9LCiBPSwogT0sKIE9LCitPSwogCkluZGV4OiBMYXlvdXRUZXN0cy9lZGl0aW5n
L3NlbGVjdGlvbi9zZWxlY3Rpb24taW52YWxpZC1vZmZzZXQuaHRtbAo9PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBM
YXlvdXRUZXN0cy9lZGl0aW5nL3NlbGVjdGlvbi9zZWxlY3Rpb24taW52YWxpZC1vZmZzZXQuaHRt
bAkocmV2aXNpb24gMTc0MzI0KQorKysgTGF5b3V0VGVzdHMvZWRpdGluZy9zZWxlY3Rpb24vc2Vs
ZWN0aW9uLWludmFsaWQtb2Zmc2V0Lmh0bWwJKHdvcmtpbmcgY29weSkKQEAgLTEsNSArMSw1IEBA
CiA8Ym9keT4KLVlvdSBzaG91bGQgc2VlIHNpeCBPS3MgYmVsb3cgKGFuZCBub3QgaGFuZyk6IDxi
cj4KK1lvdSBzaG91bGQgc2VlIDcgT0tzIGJlbG93IChhbmQgbm90IGhhbmcpOiA8YnI+CiA8c2Ny
aXB0PgogaWYgKHdpbmRvdy50ZXN0UnVubmVyKQogICAgIHRlc3RSdW5uZXIuZHVtcEFzVGV4dCgp
OwpAQCAtMzAsNyArMzAsOSBAQAogfSBjYXRjaCAoZSkge2RvY3VtZW50LndyaXRlKCgoZS5jb2Rl
PT1ET01FeGNlcHRpb24uSU5ERVhfU0laRV9FUlIpID8gIk9LIiA6ICJGQUlMIikrIjxicj4iKTsg
fQogCiAvLyB0aGVzZSBzaG91bGQgdGhyb3cgYXMgd2VsbCBidXQgZG9uJ3QgYXQgdGhlIG1vbWVu
dC4gSnVzdCBjaGVja2luZyB0aGV5IGRvbid0IGNyYXNoLiAKLXNlbGVjdGlvbi5jb2xsYXBzZShi
b2R5LCAxMDAwMCk7Cit0cnkgeworICBzZWxlY3Rpb24uY29sbGFwc2UoYm9keSwgMTAwMDApOwor
fSBjYXRjaCAoZSkge2RvY3VtZW50LndyaXRlKCgoZS5jb2RlPT1ET01FeGNlcHRpb24uSU5ERVhf
U0laRV9FUlIpID8gIk9LIiA6ICJGQUlMIikrIjxicj4iKTsgfQogc2VsZWN0aW9uLnNldEJhc2VB
bmRFeHRlbnQoYm9keSwgMTAwMCwgYm9keSwgMCk7CiBzZWxlY3Rpb24uc2V0QmFzZUFuZEV4dGVu
dChib2R5LCAwLCBib2R5LCAxMDAwMCk7CiBzZWxlY3Rpb24uc2V0UG9zaXRpb24oYm9keSwgMTAw
MDApOwpJbmRleDogTGF5b3V0VGVzdHMvZmFzdC9jc3MvY291bnRlcnMvY291bnRlci1iZWZvcmUt
Y29udGVudC1ub3QtaW5jcmVtZW50ZWQuaHRtbAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBMYXlvdXRUZXN0cy9m
YXN0L2Nzcy9jb3VudGVycy9jb3VudGVyLWJlZm9yZS1jb250ZW50LW5vdC1pbmNyZW1lbnRlZC5o
dG1sCShyZXZpc2lvbiAxNzQzMjQpCisrKyBMYXlvdXRUZXN0cy9mYXN0L2Nzcy9jb3VudGVycy9j
b3VudGVyLWJlZm9yZS1jb250ZW50LW5vdC1pbmNyZW1lbnRlZC5odG1sCSh3b3JraW5nIGNvcHkp
CkBAIC0yNiw3ICsyNiw4IEBACiAgICAgICAgICAgICAvLyBXZSBuZWVkIHRvIHVzZSB0aGUgc2Vs
ZWN0aW9uIG9yIHdlIGNhbm5vdCByZXByb2R1Y2UgdGhpcyBidWchCiAgICAgICAgICAgICB2YXIg
c2VsZWN0aW9uID0gd2luZG93LmdldFNlbGVjdGlvbigpOwogICAgICAgICAgICAgdmFyIGNvbnRh
aW5lciA9IGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKCJjb250YWluZXIiKTsKLSAgICAgICAgICAg
IHNlbGVjdGlvbi5zZXRQb3NpdGlvbihjb250YWluZXIsIDApOworICAgICAgICAgICAgLy8gc2Vs
ZWN0aW9uLnNldFBvc2l0aW9uKGNvbnRhaW5lciwgMCk7CisgICAgICAgICAgICBzZWxlY3Rpb24u
Y29sbGFwc2UoY29udGFpbmVyLmZpcnN0Q2hpbGQsIDApOwogICAgICAgICAgICAgaWYgKHNlbGVj
dGlvbi5yYW5nZUNvdW50ID4gMCkgewogICAgICAgICAgICAgICAgIHZhciBuZXdFbGVtZW50ID0g
ZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgnZGl2Jyk7CiAgICAgICAgICAgICAgICAgbmV3RWxlbWVu
dC5pZCA9ICdkaXYnICsgaTsKSW5kZXg6IExheW91dFRlc3RzL2Zhc3QvZG9tL1JhbmdlL3Jhbmdl
LXNlbGVjdGlvbi1hY3Jvc3MtZG9jdW1lbnRzLWNyYXNoLWV4cGVjdGVkLnR4dAo9PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
Ci0tLSBMYXlvdXRUZXN0cy9mYXN0L2RvbS9SYW5nZS9yYW5nZS1zZWxlY3Rpb24tYWNyb3NzLWRv
Y3VtZW50cy1jcmFzaC1leHBlY3RlZC50eHQJKHJldmlzaW9uIDE3NDMyNCkKKysrIExheW91dFRl
c3RzL2Zhc3QvZG9tL1JhbmdlL3JhbmdlLXNlbGVjdGlvbi1hY3Jvc3MtZG9jdW1lbnRzLWNyYXNo
LWV4cGVjdGVkLnR4dAkod29ya2luZyBjb3B5KQpAQCAtMSArMSwyIEBACitDT05TT0xFIEVSUk9S
OiBsaW5lIDI1OiBUaGUgZ2l2ZW4gcmFuZ2UgZG9lcyBub3QgYmVsb25nIHRvIHRoZSBjdXJyZW50
IHNlbGVjdGlvbidzIGRvY3VtZW50LgogVGVzdCBwYXNzZXMgaWYgaXQgZG9lcyBub3QgY3Jhc2gu
IApJbmRleDogU291cmNlL1dlYkNvcmUvV2ViQ29yZS5leHAuaW4KPT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291
cmNlL1dlYkNvcmUvV2ViQ29yZS5leHAuaW4JKHJldmlzaW9uIDE3NDMyNCkKKysrIFNvdXJjZS9X
ZWJDb3JlL1dlYkNvcmUuZXhwLmluCSh3b3JraW5nIGNvcHkpCkBAIC0zNjYsMTAgKzM2NiwxMSBA
QAogX19aTjdXZWJDb3JlMTREb2N1bWVudFdyaXRlcjExc2V0RW5jb2RpbmdFUktOM1dURjZTdHJp
bmdFYgogX19aTjdXZWJDb3JlMTRGaWxlSWNvbkxvYWRlcjE0bm90aWZ5RmluaXNoZWRFTjNXVEYx
MFBhc3NSZWZQdHJJTlNfNEljb25FRUUKIF9fWk43V2ViQ29yZTE0Rm9ybUNvbnRyb2xsZXIyMmdl
dFJlZmVyZW5jZWRGaWxlUGF0aHNFUktOM1dURjZWZWN0b3JJTlMxXzZTdHJpbmdFTG0wRU5TMV8x
NUNyYXNoT25PdmVyZmxvd0VFRQorX19aTjdXZWJDb3JlMTRGcmFtZVNlbGVjdGlvbkQxRXYKIF9f
Wk43V2ViQ29yZTE0RnJhbWVTZWxlY3Rpb24xMHNldEZvY3VzZWRFYgogX19aTjdXZWJDb3JlMTRG
cmFtZVNlbGVjdGlvbjEyc2V0U2VsZWN0aW9uRVJLTlNfMTZWaXNpYmxlU2VsZWN0aW9uRWpOUzBf
MTlDdXJzb3JBbGlnbk9uU2Nyb2xsRU5TXzE1VGV4dEdyYW51bGFyaXR5RQogX19aTjdXZWJDb3Jl
MTRGcmFtZVNlbGVjdGlvbjE1cmV2ZWFsU2VsZWN0aW9uRVJLTlNfMTVTY3JvbGxBbGlnbm1lbnRF
TlNfMThSZXZlYWxFeHRlbnRPcHRpb25FCi1fX1pON1dlYkNvcmUxNEZyYW1lU2VsZWN0aW9uMTZz
ZXRTZWxlY3RlZFJhbmdlRVBOU181UmFuZ2VFTlNfOUVBZmZpbml0eUViCitfX1pON1dlYkNvcmUx
NEZyYW1lU2VsZWN0aW9uMTZzZXRTZWxlY3RlZFJhbmdlRVBOU181UmFuZ2VFTlNfOUVBZmZpbml0
eUViagogX19aTjdXZWJDb3JlMTRGcmFtZVNlbGVjdGlvbjE5YWJzb2x1dGVDYXJldEJvdW5kc0V2
CiBfX1pON1dlYkNvcmUxNEZyYW1lU2VsZWN0aW9uMjBzZXRTZWxlY3Rpb25Gcm9tTm9uZUV2CiBf
X1pON1dlYkNvcmUxNEZyYW1lU2VsZWN0aW9uNWNsZWFyRXYKQEAgLTczMSw2ICs3MzIsOCBAQAog
X19aTjdXZWJDb3JlMTZUaHJlYWRHbG9iYWxEYXRhMTBzdGF0aWNEYXRhRQogX19aTjdXZWJDb3Jl
MTZUaHJlYWRHbG9iYWxEYXRhQzFFdgogX19aTjdXZWJDb3JlMTZUaHJlYWRHbG9iYWxEYXRhRDFF
dgorX19aTjdXZWJDb3JlMTZWaXNpYmxlU2VsZWN0aW9uQzFFUktTMF8KK19fWk43V2ViQ29yZTE2
VmlzaWJsZVNlbGVjdGlvbkQxRXYKIF9fWk43V2ViQ29yZTE2VmlzaWJsZVNlbGVjdGlvbjIyZXhw
YW5kVXNpbmdHcmFudWxhcml0eUVOU18xNVRleHRHcmFudWxhcml0eUUKIF9fWk43V2ViQ29yZTE2
VmlzaWJsZVNlbGVjdGlvbkMxRVBLTlNfNVJhbmdlRU5TXzlFQWZmaW5pdHlFYgogX19aTjdXZWJD
b3JlMTZWaXNpYmxlU2VsZWN0aW9uQzFFUktOU18xNVZpc2libGVQb3NpdGlvbkVTM19iCkBAIC0z
Mzc4LDYgKzMzODEsNyBAQAogX19aTks3V2ViQ29yZTExSW1hZ2VCdWZmZXI5Y29weUltYWdlRU5T
XzE2QmFja2luZ1N0b3JlQ29weUVOU18xM1NjYWxlQmVoYXZpb3JFCiBfX1pOSzdXZWJDb3JlMTZW
aXNpYmxlU2VsZWN0aW9uMTBmaXJzdFJhbmdlRXYKICNlbmRpZgorX19aTks3V2ViQ29yZTE0RnJh
bWVTZWxlY3Rpb24xMGZpcnN0UmFuZ2VFdgogCiAjaWYgRU5BQkxFKFNQRUVDSF9TWU5USEVTSVMp
CiBfX1pON1dlYkNvcmUxNVNwZWVjaFN5bnRoZXNpczIyc2V0UGxhdGZvcm1TeW50aGVzaXplckVO
U3QzX18xMTB1bmlxdWVfcHRySU5TXzI1UGxhdGZvcm1TcGVlY2hTeW50aGVzaXplckVOUzFfMTRk
ZWZhdWx0X2RlbGV0ZUlTM19FRUVFCkluZGV4OiBTb3VyY2UvV2ViQ29yZS9hY2Nlc3NpYmlsaXR5
L0FjY2Vzc2liaWxpdHlPYmplY3QuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL2Fj
Y2Vzc2liaWxpdHkvQWNjZXNzaWJpbGl0eU9iamVjdC5jcHAJKHJldmlzaW9uIDE3NDMyNCkKKysr
IFNvdXJjZS9XZWJDb3JlL2FjY2Vzc2liaWxpdHkvQWNjZXNzaWJpbGl0eU9iamVjdC5jcHAJKHdv
cmtpbmcgY29weSkKQEAgLTcxMCw3ICs3MTAsNyBAQAogICAgIGlmIChSZWZQdHI8UmFuZ2U+IGNs
b3Nlc3RTdHJpbmdSYW5nZSA9IHJhbmdlQ2xvc2VzdFRvUmFuZ2Uoc2VsZWN0ZWRTdHJpbmdSYW5n
ZS5nZXQoKSwgY2xvc2VzdEFmdGVyU3RyaW5nUmFuZ2UsIGNsb3Nlc3RCZWZvcmVTdHJpbmdSYW5n
ZSkpIHsKICAgICAgICAgU3RyaW5nIGNsb3Nlc3RTdHJpbmcgPSBjbG9zZXN0U3RyaW5nUmFuZ2Ut
PnRleHQoKTsKICAgICAgICAgYm9vbCByZXBsYWNlU2VsZWN0aW9uID0gZmFsc2U7Ci0gICAgICAg
IGlmIChmcmFtZS0+c2VsZWN0aW9uKCkuc2V0U2VsZWN0ZWRSYW5nZShjbG9zZXN0U3RyaW5nUmFu
Z2UuZ2V0KCksIERPV05TVFJFQU0sIHRydWUpKSB7CisgICAgICAgIGlmIChmcmFtZS0+c2VsZWN0
aW9uKCkuc2V0U2VsZWN0ZWRSYW5nZShjbG9zZXN0U3RyaW5nUmFuZ2UuZ2V0KCksIERPV05TVFJF
QU0sIGZhbHNlLCB0cnVlKSkgewogICAgICAgICAgICAgc3dpdGNoIChhY3Rpdml0eSkgewogICAg
ICAgICAgICAgY2FzZSBGaW5kQW5kQ2FwaXRhbGl6ZTogewogICAgICAgICAgICAgICAgIHJlcGxh
Y2VtZW50U3RyaW5nID0gY2xvc2VzdFN0cmluZzsKSW5kZXg6IFNvdXJjZS9XZWJDb3JlL2RvbS9Q
b3NpdGlvbi5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvZG9tL1Bvc2l0aW9uLmNw
cAkocmV2aXNpb24gMTc0MzI0KQorKysgU291cmNlL1dlYkNvcmUvZG9tL1Bvc2l0aW9uLmNwcAko
d29ya2luZyBjb3B5KQpAQCAtMSw1ICsxLDYgQEAKIC8qCiAgKiBDb3B5cmlnaHQgKEMpIDIwMDQs
IDIwMDUsIDIwMDYsIDIwMDksIDIwMTMgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgor
ICogUG9ydGlvbnMgQ29weXJpZ2h0IChjKSAyMDE0IERhdmlkIEEuIEdhdHdvb2QuICBBbGwgcmln
aHRzIHJlc2VydmVkLgogICoKICAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFu
ZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAogICogbW9kaWZpY2F0aW9uLCBhcmUgcGVy
bWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCkBAIC00OCw3ICs0
OSw4IEBACiAjaW5jbHVkZSA8c3RkaW8uaD4KICNpbmNsdWRlIDx3dGYvdGV4dC9DU3RyaW5nLmg+
CiAjaW5jbHVkZSA8d3RmL3VuaWNvZGUvQ2hhcmFjdGVyTmFtZXMuaD4KLSAgCisjaW5jbHVkZSAi
Tm9kZUxpc3QuaCIKKwogbmFtZXNwYWNlIFdlYkNvcmUgewogCiB1c2luZyBuYW1lc3BhY2UgSFRN
TE5hbWVzOwpAQCAtMzA3LDggKzMwOSw5IEBACiAgICAgQVNTRVJUKG9mZnNldCA+PSAwKTsKIAog
ICAgIGlmIChvZmZzZXQgPiAwKSB7Ci0gICAgICAgIGlmIChOb2RlKiBjaGlsZCA9IG5vZGUtPnRy
YXZlcnNlVG9DaGlsZEF0KG9mZnNldCAtIDEpKQorICAgICAgICBpZiAoTm9kZSogY2hpbGQgPSBu
b2RlLT50cmF2ZXJzZVRvQ2hpbGRBdChvZmZzZXQgLSAxKSkgewogICAgICAgICAgICAgcmV0dXJu
IGxhc3RQb3NpdGlvbkluT3JBZnRlck5vZGUoY2hpbGQpOworICAgICAgICB9CiAKICAgICAgICAg
Ly8gVGhlcmUgYXJlIHR3byByZWFzb25zIGNoaWxkIG1pZ2h0IGJlIDA6CiAgICAgICAgIC8vICAg
MSkgVGhlIG5vZGUgaXMgbm9kZSBsaWtlIGEgdGV4dCBub2RlIHRoYXQgaXMgbm90IGFuIGVsZW1l
bnQsIGFuZCB0aGVyZWZvcmUgaGFzIG5vIGNoaWxkcmVuLgpAQCAtNTIwLDcgKzUyMyw3IEBACiAv
LyBJZiB0cnVlLCBhZGphY2VudCBjYW5kaWRhdGVzIGFyZSB2aXN1YWxseSBkaXN0aW5jdC4KIC8v
IEZJWE1FOiBEaXNyZWdhcmQgbm9kZXMgd2l0aCByZW5kZXJlcnMgdGhhdCBoYXZlIG5vIGhlaWdo
dCwgYXMgd2UgZG8gaW4gaXNDYW5kaWRhdGUuCiAvLyBGSVhNRTogU2hhcmUgY29kZSB3aXRoIGlz
Q2FuZGlkYXRlLCBpZiBwb3NzaWJsZS4KLXN0YXRpYyBib29sIGVuZHNPZk5vZGVBcmVWaXN1YWxs
eURpc3RpbmN0UG9zaXRpb25zKE5vZGUqIG5vZGUpCitib29sIGVuZHNPZk5vZGVBcmVWaXN1YWxs
eURpc3RpbmN0UG9zaXRpb25zKE5vZGUqIG5vZGUpCiB7CiAgICAgaWYgKCFub2RlIHx8ICFub2Rl
LT5yZW5kZXJlcigpKQogICAgICAgICByZXR1cm4gZmFsc2U7CkBAIC01MzIsNiArNTM1LDEzIEBA
CiAgICAgaWYgKGlzPEhUTUxUYWJsZUVsZW1lbnQ+KCpub2RlKSkKICAgICAgICAgcmV0dXJuIGZh
bHNlOwogICAgIAorICAgIGlmIChub2RlLT5pc0VsZW1lbnROb2RlKCkpIHsKKyAgICAgICAgRWxl
bWVudCAqZWx0ID0gZG93bmNhc3Q8RWxlbWVudD4obm9kZSk7CisgICAgICAgIGlmIChlbHQtPmJl
Zm9yZVBzZXVkb0VsZW1lbnQoKSB8fCBlbHQtPmFmdGVyUHNldWRvRWxlbWVudCgpKSB7CisgICAg
ICAgICAgICByZXR1cm4gdHJ1ZTsKKyAgICAgICAgfQorICAgIH0KKyAgICAKICAgICAvLyBUaGVy
ZSBpcyBhIFZpc2libGVQb3NpdGlvbiBpbnNpZGUgYW4gZW1wdHkgaW5saW5lLWJsb2NrIGNvbnRh
aW5lci4KICAgICByZXR1cm4gbm9kZS0+cmVuZGVyZXIoKS0+aXNSZXBsYWNlZCgpICYmIGNhbkhh
dmVDaGlsZHJlbkZvckVkaXRpbmcobm9kZSkgJiYgdG9SZW5kZXJCb3gobm9kZS0+cmVuZGVyZXIo
KSktPmhlaWdodCgpICE9IDAgJiYgIW5vZGUtPmZpcnN0Q2hpbGQoKTsKIH0KQEAgLTU1Niw3ICs1
NjYsNyBAQAogICAgICAgICAKICAgICByZXR1cm4gcG9zLmF0U3RhcnRPZk5vZGUoKTsKIH0KLQor
ICAgIAogLy8gVGhpcyBmdW5jdGlvbiBhbmQgZG93bnN0cmVhbSgpIGFyZSB1c2VkIGZvciBtb3Zp
bmcgYmFjayBhbmQgZm9ydGggYmV0d2VlbiB2aXN1YWxseSBlcXVpdmFsZW50IGNhbmRpZGF0ZXMu
CiAvLyBGb3IgZXhhbXBsZSwgZm9yIHRoZSB0ZXh0IG5vZGUgImZvbyAgICAgYmFyIiB3aGVyZSB3
aGl0ZXNwYWNlIGlzIGNvbGxhcHNpYmxlLCB0aGVyZSBhcmUgdHdvIGNhbmRpZGF0ZXMgCiAvLyB0
aGF0IG1hcCB0byB0aGUgVmlzaWJsZVBvc2l0aW9uIGJldHdlZW4gJ2InIGFuZCB0aGUgc3BhY2Uu
ICBUaGlzIGZ1bmN0aW9uIHdpbGwgcmV0dXJuIHRoZSBsZWZ0IGNhbmRpZGF0ZSAKQEAgLTU3MSw4
ICs1ODEsMjcgQEAKICAgICAKICAgICAvLyBpdGVyYXRlIGJhY2t3YXJkIGZyb20gdGhlcmUsIGxv
b2tpbmcgZm9yIGEgcXVhbGlmaWVkIHBvc2l0aW9uCiAgICAgTm9kZSogYm91bmRhcnkgPSBlbmNs
b3NpbmdWaXN1YWxCb3VuZGFyeShzdGFydE5vZGUpOworICAgIAorICAgIC8vIElmIHRoaXMgZnVu
Y3Rpb24gY3Jvc3NlcyBhbiB1bnJlbmRlcmVkIG5vZGUgKGUuZy4gd2hpdGVzcGFjZSBiZXR3ZWVu
CisgICAgLy8gYmxvY2stbGV2ZWwgZWxlbWVudHMgd2hlcmUgc3BhY2UgaXMgY29sbGFwc2VkKSBh
bmQgZW5kcyB1cCBhdCB0aGUKKyAgICAvLyBiZWdpbm5pbmcgb2YgdGhlIHVucmVuZGVyZWQgd2hp
dGVzcGFjZSBpbW1lZGlhdGVseSBhZnRlciBhCisgICAgLy8gdmFsaWQgY2FuZGlkYXRlIHBvc2l0
aW9uLCB0cmVhdCB0aGUgdmFsaWQgY2FuZGlkYXRlIHBvc2l0aW9uIGFzCisgICAgLy8gdGhlIG5l
dyBsYXN0IHZpc2libGUgcG9zaXRpb24uICBUaGlzIGVuc3VyZXMgdGhhdCB0aGVzZSBib3VuZGFy
aWVzCisgICAgLy8gYXJlIHRyZWF0ZWQgYXMgdmlzdWFsbHkgZXF1aXZhbGVudCBmb3IgdGhlIHB1
cnBvc2VzIG9mIGFycm93CisgICAgLy8gbmF2aWdhdGlvbi4KKyAgICBQb3NpdGlvbiBmaXJzdENh
cmV0SW5zaWRlTm9kZUJlZm9yZU9yaWdpbmFsUG9zaXRpb24gPSBQb3NpdGlvbigpOworICAgIFBv
c2l0aW9uIHByZXZpb3VzVG9SZXR1cm4gPSBQb3NpdGlvbigpOworICAgIAorICAgIGlmIChtX2Fu
Y2hvclR5cGUgPT0gUG9zaXRpb25Jc09mZnNldEluQW5jaG9yICYmIHRoaXMtPm9mZnNldEluQ29u
dGFpbmVyTm9kZSgpID4gMCAmJiAodW5zaWduZWQpdGhpcy0+b2Zmc2V0SW5Db250YWluZXJOb2Rl
KCkgPCBzdGFydE5vZGUtPmNoaWxkTm9kZXMoKS0+bGVuZ3RoKCkpIHsKKyAgICAgICAgCisgICAg
ICAgIE5vZGUgKmNoaWxkID0gc3RhcnROb2RlLT50cmF2ZXJzZVRvQ2hpbGRBdCh0aGlzLT5vZmZz
ZXRJbkNvbnRhaW5lck5vZGUoKSAtIDEpOworICAgICAgICBwcmV2aW91c1RvUmV0dXJuID0gUG9z
aXRpb24odGhpcy0+YW5jaG9yTm9kZSgpLCB0aGlzLT5vZmZzZXRJbkNvbnRhaW5lck5vZGUoKSAt
IDEsIFBvc2l0aW9uSXNPZmZzZXRJbkFuY2hvcik7CisgICAgICAgIGZpcnN0Q2FyZXRJbnNpZGVO
b2RlQmVmb3JlT3JpZ2luYWxQb3NpdGlvbiA9IGNyZWF0ZUxlZ2FjeUVkaXRpbmdQb3NpdGlvbihj
aGlsZCwgMCk7CisgICAgfQorCiAgICAgLy8gRklYTUU6IFBvc2l0aW9uSXRlcmF0b3Igc2hvdWxk
IHJlc3BlY3QgQmVmb3JlIGFuZCBBZnRlciBwb3NpdGlvbnMuCiAgICAgUG9zaXRpb25JdGVyYXRv
ciBsYXN0VmlzaWJsZSA9IG1fYW5jaG9yVHlwZSA9PSBQb3NpdGlvbklzQWZ0ZXJBbmNob3IgPyBj
cmVhdGVMZWdhY3lFZGl0aW5nUG9zaXRpb24obV9hbmNob3JOb2RlLmdldCgpLCBjYXJldE1heE9m
ZnNldChtX2FuY2hvck5vZGUuZ2V0KCkpKSA6ICp0aGlzOworICAgIAogICAgIFBvc2l0aW9uSXRl
cmF0b3IgY3VycmVudFBvcyA9IGxhc3RWaXNpYmxlOwogICAgIGJvb2wgc3RhcnRFZGl0YWJsZSA9
IHN0YXJ0Tm9kZS0+aGFzRWRpdGFibGVTdHlsZSgpOwogICAgIE5vZGUqIGxhc3ROb2RlID0gc3Rh
cnROb2RlOwpAQCAtNjAwLDkgKzYyOSwxOCBAQAogCiAgICAgICAgIC8vIHNraXAgcG9zaXRpb24g
aW4gdW5yZW5kZXJlZCBvciBpbnZpc2libGUgbm9kZQogICAgICAgICBSZW5kZXJPYmplY3QqIHJl
bmRlcmVyID0gY3VycmVudE5vZGUtPnJlbmRlcmVyKCk7Ci0gICAgICAgIGlmICghcmVuZGVyZXIg
fHwgcmVuZGVyZXItPnN0eWxlKCkudmlzaWJpbGl0eSgpICE9IFZJU0lCTEUpCisgICAgICAgIGlm
ICghcmVuZGVyZXIgfHwgcmVuZGVyZXItPnN0eWxlKCkudmlzaWJpbGl0eSgpICE9IFZJU0lCTEUg
fHwKKyAgICAgICAgICAgICAgICAocmVuZGVyZXItPmlzVGV4dCgpICYmCisgICAgICAgICAgICAg
ICAgICAgKCF0b1JlbmRlclRleHQocmVuZGVyZXIpLT50ZXh0TGVuZ3RoKCkgfHwKKyAgICAgICAg
ICAgICAgICAgICAgIXRvUmVuZGVyVGV4dChyZW5kZXJlciktPmxpbmVzQm91bmRpbmdCb3goKS53
aWR0aCgpKQorICAgICAgICAgICAgICAgICApKSB7CisKKyAgICAgICAgICAgIGlmIChjdXJyZW50
UG9zID09IGZpcnN0Q2FyZXRJbnNpZGVOb2RlQmVmb3JlT3JpZ2luYWxQb3NpdGlvbikgeworICAg
ICAgICAgICAgICAgIGxhc3RWaXNpYmxlID0gcHJldmlvdXNUb1JldHVybjsKKyAgICAgICAgICAg
IH0KICAgICAgICAgICAgIGNvbnRpbnVlOwotICAgICAgICAgICAgICAgICAKKyAgICAgICAgfQor
ICAgICAgICAKICAgICAgICAgaWYgKHJ1bGUgPT0gQ2FuQ3Jvc3NFZGl0aW5nQm91bmRhcnkgJiYg
Ym91bmRhcnlDcm9zc2VkKSB7CiAgICAgICAgICAgICBsYXN0VmlzaWJsZSA9IGN1cnJlbnRQb3M7
CiAgICAgICAgICAgICBicmVhazsKQEAgLTY5NSw2ICs3MzMsMjMgQEAKICAgICBOb2RlKiBzdGFy
dE5vZGUgPSBkZXByZWNhdGVkTm9kZSgpOwogICAgIGlmICghc3RhcnROb2RlKQogICAgICAgICBy
ZXR1cm4gUG9zaXRpb24oKTsKKyAgICAKKyAgICAvLyBJZiB0aGlzIGZ1bmN0aW9uIGNyb3NzZXMg
YW4gdW5yZW5kZXJlZCBub2RlIChlLmcuIHdoaXRlc3BhY2UgYmV0d2VlbgorICAgIC8vIGJsb2Nr
LWxldmVsIGVsZW1lbnRzIHdoZXJlIHNwYWNlIGlzIGNvbGxhcHNlZCkgYW5kIGVuZHMgdXAgYXQg
dGhlCisgICAgLy8gYmVnaW5uaW5nIG9mIHRoZSB1bnJlbmRlcmVkIHdoaXRlc3BhY2UgaW1tZWRp
YXRlbHkgYWZ0ZXIgYQorICAgIC8vIHZhbGlkIGNhbmRpZGF0ZSBwb3NpdGlvbiwgdHJlYXQgdGhl
IHZhbGlkIGNhbmRpZGF0ZSBwb3NpdGlvbiBhcworICAgIC8vIHRoZSBuZXcgbGFzdCB2aXNpYmxl
IHBvc2l0aW9uLiAgVGhpcyBlbnN1cmVzIHRoYXQgdGhlc2UgYm91bmRhcmllcworICAgIC8vIGFy
ZSB0cmVhdGVkIGFzIHZpc3VhbGx5IGVxdWl2YWxlbnQgZm9yIHRoZSBwdXJwb3NlcyBvZiBhcnJv
dworICAgIC8vIG5hdmlnYXRpb24uCisgICAgUG9zaXRpb24gbGFzdENhcmV0SW5zaWRlTm9kZUF0
T3JpZ2luYWxQb3NpdGlvbiA9IFBvc2l0aW9uKCk7CisgICAgUG9zaXRpb24gbmV4dFRvUmV0dXJu
ID0gUG9zaXRpb24oKTsKKyAgICAKKyAgICBpZiAobV9hbmNob3JUeXBlID09IFBvc2l0aW9uSXNP
ZmZzZXRJbkFuY2hvciAmJiB0aGlzLT5vZmZzZXRJbkNvbnRhaW5lck5vZGUoKSA+PSAwICYmICh1
bnNpZ25lZCl0aGlzLT5vZmZzZXRJbkNvbnRhaW5lck5vZGUoKSA8IHN0YXJ0Tm9kZS0+Y2hpbGRO
b2RlcygpLT5sZW5ndGgoKSkgeworICAgICAgICAKKyAgICAgICAgTm9kZSAqY2hpbGQgPSBzdGFy
dE5vZGUtPnRyYXZlcnNlVG9DaGlsZEF0KHRoaXMtPm9mZnNldEluQ29udGFpbmVyTm9kZSgpKTsK
KyAgICAgICAgbmV4dFRvUmV0dXJuID0gUG9zaXRpb24odGhpcy0+YW5jaG9yTm9kZSgpLCB0aGlz
LT5vZmZzZXRJbkNvbnRhaW5lck5vZGUoKSArIDEsIFBvc2l0aW9uSXNPZmZzZXRJbkFuY2hvcik7
CisgICAgICAgIGxhc3RDYXJldEluc2lkZU5vZGVBdE9yaWdpbmFsUG9zaXRpb24gPSBjcmVhdGVM
ZWdhY3lFZGl0aW5nUG9zaXRpb24oY2hpbGQsIGNhcmV0TWF4T2Zmc2V0KGNoaWxkKSk7CisgICAg
fQogCiAgICAgLy8gaXRlcmF0ZSBmb3J3YXJkIGZyb20gdGhlcmUsIGxvb2tpbmcgZm9yIGEgcXVh
bGlmaWVkIHBvc2l0aW9uCiAgICAgTm9kZSogYm91bmRhcnkgPSBlbmNsb3NpbmdWaXN1YWxCb3Vu
ZGFyeShzdGFydE5vZGUpOwpAQCAtNzM3LDkgKzc5MiwxOCBAQAogCiAgICAgICAgIC8vIHNraXAg
cG9zaXRpb24gaW4gdW5yZW5kZXJlZCBvciBpbnZpc2libGUgbm9kZQogICAgICAgICBSZW5kZXJP
YmplY3QqIHJlbmRlcmVyID0gY3VycmVudE5vZGUtPnJlbmRlcmVyKCk7Ci0gICAgICAgIGlmICgh
cmVuZGVyZXIgfHwgcmVuZGVyZXItPnN0eWxlKCkudmlzaWJpbGl0eSgpICE9IFZJU0lCTEUpCisg
ICAgICAgIGlmICghcmVuZGVyZXIgfHwgcmVuZGVyZXItPnN0eWxlKCkudmlzaWJpbGl0eSgpICE9
IFZJU0lCTEUgfHwKKyAgICAgICAgICAgICAgICAocmVuZGVyZXItPmlzVGV4dCgpICYmCisgICAg
ICAgICAgICAgICAgICAgKCF0b1JlbmRlclRleHQocmVuZGVyZXIpLT50ZXh0TGVuZ3RoKCkgfHwK
KyAgICAgICAgICAgICAgICAgICAgIXRvUmVuZGVyVGV4dChyZW5kZXJlciktPmxpbmVzQm91bmRp
bmdCb3goKS53aWR0aCgpKQorICAgICAgICAgICAgICAgICApKSB7CisgICAgICAgICAgICAKKyAg
ICAgICAgICAgIGlmIChjdXJyZW50UG9zID09IGxhc3RDYXJldEluc2lkZU5vZGVBdE9yaWdpbmFs
UG9zaXRpb24pIHsKKyAgICAgICAgICAgICAgICBsYXN0VmlzaWJsZSA9IG5leHRUb1JldHVybjsK
KyAgICAgICAgICAgIH0KICAgICAgICAgICAgIGNvbnRpbnVlOwotICAgICAgICAgICAgCisgICAg
ICAgIH0KKyAgICAgICAgCiAgICAgICAgIGlmIChydWxlID09IENhbkNyb3NzRWRpdGluZ0JvdW5k
YXJ5ICYmIGJvdW5kYXJ5Q3Jvc3NlZCkgewogICAgICAgICAgICAgbGFzdFZpc2libGUgPSBjdXJy
ZW50UG9zOwogICAgICAgICAgICAgYnJlYWs7CkBAIC05MzQsNyArOTk4LDg4IEBACiAKICAgICBp
ZiAobV9hbmNob3JOb2RlLT5oYXNUYWdOYW1lKGh0bWxUYWcpKQogICAgICAgICByZXR1cm4gZmFs
c2U7Ci0gICAgICAgIAorICAgIAorICAgIC8qIElmIHRoZSBwb3NpdGlvbiBpcyBpbiB0aGUgbWlk
ZGxlIG9mIGFuIGVsZW1lbnQgdGhhdCBjb250YWlucyBib3RoIGJlZm9yZSBhbmQgYWZ0ZXIKKyAg
ICAgICBwc2V1ZG9lbGVtZW50cywgdGhlbiB0aGUgcG9zaXRpb24gaXMsIGJ5IGRlZmluaXRpb24s
IHZpc3VhbGx5IGRpc3RpbmN0IGZyb20gdGhlCisgICAgICAgcG9zaXRpb24gb24gZWl0aGVyIHNp
ZGUsIHNvIGlmIHRoZXJlIGFyZSBubyBjaGlsZCBub2RlcyB0aGF0IHdvdWxkIG90aGVyd2lzZQor
ICAgICAgIGNvbnN0aXR1dGUgYSBjYW5kaWRhdGUgcG9zaXRpb24sIHRyZWF0IHRoZSBpbnRlcmlv
ciBvZiB0aGUgbm9kZSBhcyBhIGNhbmRpZGF0ZS4KKyAgICAgKi8KKyAgICBOb2RlICpub2RlID0g
ZGVwcmVjYXRlZE5vZGUoKTsKKyAgICB1bnNpZ25lZCBtYXhPZmZzZXQgPSBub2RlLT5pc0VsZW1l
bnROb2RlKCkgPyBub2RlLT5jaGlsZE5vZGVzKCktPmxlbmd0aCgpIDogMDsKKyAgICBpbnQgYWN0
dWFsT2Zmc2V0ID0gKG1fYW5jaG9yVHlwZSA9PSBQb3NpdGlvbklzQmVmb3JlQ2hpbGRyZW4pID8g
MCA6CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgKG1fYW5jaG9yVHlwZSA9PSBQb3NpdGlv
bklzQWZ0ZXJDaGlsZHJlbikgPyBtYXhPZmZzZXQgOiBtX29mZnNldDsKKyAgICBpZiAobm9kZS0+
aXNFbGVtZW50Tm9kZSgpKSB7CisgICAgICAgIEVsZW1lbnQgKmVsdCA9IGRvd25jYXN0PEVsZW1l
bnQ+KG5vZGUpOworICAgICAgICBpZiAoIWVsdC0+Zmlyc3RDaGlsZCgpKSB7CisgICAgICAgICAg
ICBpZiAoZWx0LT5iZWZvcmVQc2V1ZG9FbGVtZW50KCkgJiYgZWx0LT5hZnRlclBzZXVkb0VsZW1l
bnQoKSkgeworICAgICAgICAgICAgICAgIHJldHVybiB0cnVlOworICAgICAgICAgICAgfQorICAg
ICAgICB9IGVsc2UgeworICAgICAgICAgICAgaWYgKGFjdHVhbE9mZnNldCA+PSAwKSB7CisgICAg
ICAgICAgICAgICAgUmVmUHRyPE5vZGU+IGN1cnJlbnQgPSBlbHQ7CisgICAgICAgICAgICAgICAg
Tm9kZVZlY3RvciBjaGlsZHJlbjsKKyAgICAgICAgICAgICAgICBnZXRDaGlsZE5vZGVzKCpjdXJy
ZW50LCBjaGlsZHJlbik7CisgICAgICAgICAgICAgICAgTm9kZSAqbGVmdCA9IChhY3R1YWxPZmZz
ZXQgPiAwKSA/ICZjaGlsZHJlbi5hdChhY3R1YWxPZmZzZXQgLSAxKS5nZXQoKSA6IE5VTEw7Cisg
ICAgICAgICAgICAgICAgTm9kZSAqcmlnaHQgPSAoKHVuc2lnbmVkKWFjdHVhbE9mZnNldCA8IGNo
aWxkcmVuLnNpemUoKSkgPworICAgICAgICAgICAgICAgICAgICAmY2hpbGRyZW4uYXQoYWN0dWFs
T2Zmc2V0KS5nZXQoKSA6IE5VTEw7CisgICAgICAgICAgICAgICAgCisgICAgICAgICAgICAgICAg
aWYgKGxlZnQgJiYgbGVmdC0+cmVuZGVyZXIoKSAmJiBsZWZ0LT5yZW5kZXJlcigpLT5pc1RleHQo
KSkgeworICAgICAgICAgICAgICAgICAgICBSZW5kZXJUZXh0ICpydCA9IHRvUmVuZGVyVGV4dChs
ZWZ0LT5yZW5kZXJlcigpKTsKKyAgICAgICAgICAgICAgICAgICAgCisgICAgICAgICAgICAgICAg
ICAgIHJ0ID0gTlVMTDsKKyAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICAgICAgCisgICAg
ICAgICAgICAgICAgLyogRG9uJ3QgbGV0IG5vbi1yZW5kZXJlZCBvciBjb2xsYXBzZWQgd2hpdGVz
cGFjZSBwcmV2ZW50IGFuIGluc2VydGlvbiBwb2ludC4gKi8KKyAgICAgICAgICAgICAgICB3aGls
ZSAobGVmdCAmJiAoIWxlZnQtPnJlbmRlcmVyKCkgfHwKKyAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgbGVmdC0+cmVuZGVyZXIoKS0+c3R5bGUoKS52aXNpYmlsaXR5KCkgIT0gVklTSUJM
RSB8fAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAobGVmdC0+cmVuZGVyZXIoKS0+
aXNUZXh0KCkgJiYKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKCF0b1JlbmRl
clRleHQobGVmdC0+cmVuZGVyZXIoKSktPnRleHRMZW5ndGgoKSB8fAorICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgIXRvUmVuZGVyVGV4dChsZWZ0LT5yZW5kZXJlcigpKS0+bGlu
ZXNCb3VuZGluZ0JveCgpLndpZHRoKCkpCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICApKSkgeworICAgICAgICAgICAgICAgICAgICBsZWZ0ID0gbGVmdC0+cHJldmlvdXNTaWJsaW5n
KCk7CisgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgICAgIHdoaWxlIChyaWdodCAmJiAo
IXJpZ2h0LT5yZW5kZXJlcigpIHx8CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBy
aWdodC0+cmVuZGVyZXIoKS0+c3R5bGUoKS52aXNpYmlsaXR5KCkgIT0gVklTSUJMRSB8fAorICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKHJpZ2h0LT5yZW5kZXJlcigpLT5pc1RleHQo
KSAmJgorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKCF0b1JlbmRlclRleHQo
cmlnaHQtPnJlbmRlcmVyKCkpLT50ZXh0TGVuZ3RoKCkgfHwKKyAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAhdG9SZW5kZXJUZXh0KHJpZ2h0LT5yZW5kZXJlcigpKS0+bGluZXNC
b3VuZGluZ0JveCgpLndpZHRoKCkpCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
KSkpIHsKKyAgICAgICAgICAgICAgICAgICAgcmlnaHQgPSByaWdodC0+bmV4dFNpYmxpbmcoKTsK
KyAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICAgICAgCisgICAgICAgICAgICAgICAgLyog
SWYgbGVmdCBleGlzdHMgYW5kIGlzIGEgdGV4dCBub2RlLCBub3QgYSBjYW5kaWRhdGUuCisgICAg
ICAgICAgICAgICAgICAgSWYgbGVmdCBleGlzdHMgYW5kIGlzIGFuIGVsZW1lbnQgbm9kZSwgaXMg
YSBjYW5kaWRhdGUgb25seQorICAgICAgICAgICAgICAgICAgICAgICBpZiBsZWZ0IGhhcyBhbiA6
OmFmdGVyIHBzZXVkb2VsZW1lbnQuCisgICAgICAgICAgICAgICAgICAgSWYgbGVmdCBkb2VzIG5v
dCBleGlzdCwgaXMgYSBjYW5kaWRhdGUgb25seSBpZiBwYXJlbnQgaGFzCisgICAgICAgICAgICAg
ICAgICAgICAgIGEgOjpiZWZvcmUgcHNldWRvZWxlbWVudC4KKyAgICAgICAgICAgICAgICAgKi8K
KyAgICAgICAgICAgICAgICBib29sIGxlZnRIYXNQc2V1ZG9FbGVtZW50QXRFbmQgPSBmYWxzZTsK
KyAgICAgICAgICAgICAgICBpZiAobGVmdCAmJiBsZWZ0LT5pc0VsZW1lbnROb2RlKCkpIHsKKyAg
ICAgICAgICAgICAgICAgICAgRWxlbWVudCAqbGVmdEVsZW1lbnQgPSBkb3duY2FzdDxFbGVtZW50
PihsZWZ0KTsKKyAgICAgICAgICAgICAgICAgICAgbGVmdEhhc1BzZXVkb0VsZW1lbnRBdEVuZCA9
IGxlZnRFbGVtZW50LT5hZnRlclBzZXVkb0VsZW1lbnQoKTsKKyAgICAgICAgICAgICAgICB9IGVs
c2UgaWYgKCFsZWZ0KSB7CisgICAgICAgICAgICAgICAgICAgIGxlZnRIYXNQc2V1ZG9FbGVtZW50
QXRFbmQgPSBlbHQtPmJlZm9yZVBzZXVkb0VsZW1lbnQoKTsKKyAgICAgICAgICAgICAgICB9Cisg
ICAgICAgICAgICAgICAgCisgICAgICAgICAgICAgICAgLyogSWYgcmlnaHQgZXhpc3RzIGFuZCBp
cyBhIHRleHQgbm9kZSwgbm90IGEgY2FuZGlkYXRlLgorICAgICAgICAgICAgICAgICAgIElmIHJp
Z2h0IGV4aXN0cyBhbmQgaXMgYW4gZWxlbWVudCBub2RlLCBpcyBhIGNhbmRpZGF0ZSBvbmx5Cisg
ICAgICAgICAgICAgICAgICAgICAgIGlmIHJpZ2h0IGhhcyBhIDo6YmVmb3JlIHBzZXVkb2VsZW1l
bnQuCisgICAgICAgICAgICAgICAgICAgSWYgcmlnaHQgZG9lcyBub3QgZXhpc3QsIGlzIGEgY2Fu
ZGlkYXRlIG9ubHkgaWYgcGFyZW50IGhhcworICAgICAgICAgICAgICAgICAgICAgICBhbiA6OmFm
dGVyIHBzZXVkb2VsZW1lbnQuCisgICAgICAgICAgICAgICAgICovCisgICAgICAgICAgICAgICAg
Ym9vbCByaWdodEhhc1BzZXVkb0VsZW1lbnRBdEJlZ2lubmluZyA9IGZhbHNlOworICAgICAgICAg
ICAgICAgIGlmIChyaWdodCAmJiByaWdodC0+aXNFbGVtZW50Tm9kZSgpKSB7CisgICAgICAgICAg
ICAgICAgICAgIEVsZW1lbnQgKnJpZ2h0RWxlbWVudCA9IGRvd25jYXN0PEVsZW1lbnQ+KHJpZ2h0
KTsKKyAgICAgICAgICAgICAgICAgICAgcmlnaHRIYXNQc2V1ZG9FbGVtZW50QXRCZWdpbm5pbmcg
PSByaWdodEVsZW1lbnQtPmJlZm9yZVBzZXVkb0VsZW1lbnQoKTsKKyAgICAgICAgICAgICAgICB9
IGVsc2UgaWYgKCFyaWdodCkgeworICAgICAgICAgICAgICAgICAgICByaWdodEhhc1BzZXVkb0Vs
ZW1lbnRBdEJlZ2lubmluZyA9IGVsdC0+YWZ0ZXJQc2V1ZG9FbGVtZW50KCk7CisgICAgICAgICAg
ICAgICAgfQorICAgICAgICAgICAgICAgIAorICAgICAgICAgICAgICAgIGlmIChsZWZ0SGFzUHNl
dWRvRWxlbWVudEF0RW5kICYmIHJpZ2h0SGFzUHNldWRvRWxlbWVudEF0QmVnaW5uaW5nKSByZXR1
cm4gdHJ1ZTsKKyAgICAgICAgICAgIH0KKyAgICAgICAgfQorICAgIH0KKyAgICAKICAgICBpZiAo
cmVuZGVyZXItPmlzUmVuZGVyQmxvY2tGbG93KCkpIHsKICAgICAgICAgUmVuZGVyQmxvY2tGbG93
JiBibG9jayA9IHRvUmVuZGVyQmxvY2tGbG93KCpyZW5kZXJlcik7CiAgICAgICAgIGlmIChibG9j
ay5sb2dpY2FsSGVpZ2h0KCkgfHwgbV9hbmNob3JOb2RlLT5oYXNUYWdOYW1lKGJvZHlUYWcpKSB7
CkBAIC0xMTE1LDYgKzEyNjAsOCBAQAogICAgICAgICAgICAgcmV0dXJuIDA7CiAgICAgICAgIGlm
IChpc05vblRleHRMZWFmQ2hpbGQobmV4dCkpCiAgICAgICAgICAgICByZXR1cm4gMDsKKyAgICAg
ICAgaWYgKG5leHQtPmlzUHNldWRvRWxlbWVudCgpKQorICAgICAgICAgICAgcmV0dXJuIDA7CiAg
ICAgICAgIGlmIChuZXh0LT5pc1RleHQoKSkgewogICAgICAgICAgICAgSW5saW5lVGV4dEJveCog
bWF0Y2ggPSAwOwogICAgICAgICAgICAgaW50IG1pbk9mZnNldCA9IElOVF9NQVg7CkBAIC0xMTU3
LDYgKzEzMDQsMTIgQEAKICAgICBjYXJldE9mZnNldCA9IGRlcHJlY2F0ZWRFZGl0aW5nT2Zmc2V0
KCk7CiAgICAgUmVuZGVyT2JqZWN0KiByZW5kZXJlciA9IGRlcHJlY2F0ZWROb2RlKCktPnJlbmRl
cmVyKCk7CiAKKyAgICByZXR1cm4gZ2V0SW5saW5lQm94QW5kT2Zmc2V0KGFmZmluaXR5LCBwcmlt
YXJ5RGlyZWN0aW9uLCBpbmxpbmVCb3gsIGNhcmV0T2Zmc2V0LCByZW5kZXJlcik7Cit9CisgICAg
Cit2b2lkIFBvc2l0aW9uOjpnZXRJbmxpbmVCb3hBbmRPZmZzZXQoRUFmZmluaXR5IGFmZmluaXR5
LCBUZXh0RGlyZWN0aW9uIHByaW1hcnlEaXJlY3Rpb24sIElubGluZUJveComIGlubGluZUJveCwg
aW50JiBjYXJldE9mZnNldCwgUmVuZGVyT2JqZWN0KiByZW5kZXJlcikgY29uc3QKK3sKKyAgICAK
ICAgICBpZiAocmVuZGVyZXItPmlzQlIoKSkKICAgICAgICAgaW5saW5lQm94ID0gIWNhcmV0T2Zm
c2V0ID8gdG9SZW5kZXJMaW5lQnJlYWsocmVuZGVyZXIpLT5pbmxpbmVCb3hXcmFwcGVyKCkgOiBu
dWxscHRyOwogICAgIGVsc2UgaWYgKHJlbmRlcmVyLT5pc1RleHQoKSkgewpJbmRleDogU291cmNl
L1dlYkNvcmUvZG9tL1Bvc2l0aW9uLmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvZG9t
L1Bvc2l0aW9uLmgJKHJldmlzaW9uIDE3NDMyNCkKKysrIFNvdXJjZS9XZWJDb3JlL2RvbS9Qb3Np
dGlvbi5oCSh3b3JraW5nIGNvcHkpCkBAIC01MSw2ICs1MSw4IEBACiAgICAgQmFja3dhcmREZWxl
dGlvbiAvLyBTdWJqZWN0IHRvIHBsYXRmb3JtIGNvbnZlbnRpb25zLgogfTsKIAorYm9vbCBlbmRz
T2ZOb2RlQXJlVmlzdWFsbHlEaXN0aW5jdFBvc2l0aW9ucyhOb2RlKiBub2RlKTsKKwogY2xhc3Mg
UG9zaXRpb24gewogcHVibGljOgogICAgIGVudW0gQW5jaG9yVHlwZSB7CkBAIC0xODMsNiArMTg1
LDcgQEAKIAogICAgIHZvaWQgZ2V0SW5saW5lQm94QW5kT2Zmc2V0KEVBZmZpbml0eSwgSW5saW5l
Qm94KiYsIGludCYgY2FyZXRPZmZzZXQpIGNvbnN0OwogICAgIHZvaWQgZ2V0SW5saW5lQm94QW5k
T2Zmc2V0KEVBZmZpbml0eSwgVGV4dERpcmVjdGlvbiBwcmltYXJ5RGlyZWN0aW9uLCBJbmxpbmVC
b3gqJiwgaW50JiBjYXJldE9mZnNldCkgY29uc3Q7CisgICAgdm9pZCBnZXRJbmxpbmVCb3hBbmRP
ZmZzZXQoRUFmZmluaXR5IGFmZmluaXR5LCBUZXh0RGlyZWN0aW9uIHByaW1hcnlEaXJlY3Rpb24s
IElubGluZUJveComIGlubGluZUJveCwgaW50JiBjYXJldE9mZnNldCwgUmVuZGVyT2JqZWN0KiBy
ZW5kZXJlcikgY29uc3Q7CiAKICAgICBUZXh0RGlyZWN0aW9uIHByaW1hcnlEaXJlY3Rpb24oKSBj
b25zdDsKIApAQCAtMzQyLDYgKzM0NSw3IEBACiAKIH0gLy8gbmFtZXNwYWNlIFdlYkNvcmUKIAor
CiAjaWZuZGVmIE5ERUJVRwogLy8gT3V0c2lkZSB0aGUgV2ViQ29yZSBuYW1lc3BhY2UgZm9yIGVh
c2Ugb2YgaW52b2NhdGlvbiBmcm9tIGdkYi4KIHZvaWQgc2hvd1RyZWUoY29uc3QgV2ViQ29yZTo6
UG9zaXRpb24mKTsKSW5kZXg6IFNvdXJjZS9XZWJDb3JlL2VkaXRpbmcvRGVsZXRlU2VsZWN0aW9u
Q29tbWFuZC5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvZWRpdGluZy9EZWxldGVT
ZWxlY3Rpb25Db21tYW5kLmNwcAkocmV2aXNpb24gMTc0MzI0KQorKysgU291cmNlL1dlYkNvcmUv
ZWRpdGluZy9EZWxldGVTZWxlY3Rpb25Db21tYW5kLmNwcAkod29ya2luZyBjb3B5KQpAQCAtMzks
NiArMzksOCBAQAogI2luY2x1ZGUgIkhUTUxTdHlsZUVsZW1lbnQuaCIKICNpbmNsdWRlICJIVE1M
VGFibGVFbGVtZW50LmgiCiAjaW5jbHVkZSAiTm9kZVRyYXZlcnNhbC5oIgorI2luY2x1ZGUgIk5v
ZGVMaXN0LmgiCisjaW5jbHVkZSAiUG9zaXRpb24uaCIKICNpbmNsdWRlICJSZW5kZXJUYWJsZUNl
bGwuaCIKICNpbmNsdWRlICJSZW5kZXJUZXh0LmgiCiAjaW5jbHVkZSAiVGV4dC5oIgpAQCAtNTMx
LDcgKzUzMyw5IEBACiAgICAgICAgICAgICB9IGVsc2UgewogICAgICAgICAgICAgICAgIE5vZGUq
IG4gPSBub2RlLT5sYXN0RGVzY2VuZGFudCgpOwogICAgICAgICAgICAgICAgIGlmIChtX2Rvd25z
dHJlYW1FbmQuZGVwcmVjYXRlZE5vZGUoKSA9PSBuICYmIG1fZG93bnN0cmVhbUVuZC5kZXByZWNh
dGVkRWRpdGluZ09mZnNldCgpID49IGNhcmV0TWF4T2Zmc2V0KG4pKSB7Ci0gICAgICAgICAgICAg
ICAgICAgIHJlbW92ZU5vZGUobm9kZS5nZXQoKSk7CisgICAgICAgICAgICAgICAgICAgIGlmICgh
ZW5kc09mTm9kZUFyZVZpc3VhbGx5RGlzdGluY3RQb3NpdGlvbnMobm9kZS5nZXQoKSkpIHsKKyAg
ICAgICAgICAgICAgICAgICAgICAgIHJlbW92ZU5vZGUobm9kZS5nZXQoKSk7CisgICAgICAgICAg
ICAgICAgICAgIH0KICAgICAgICAgICAgICAgICAgICAgbm9kZSA9IDA7CiAgICAgICAgICAgICAg
ICAgfSBlbHNlCiAgICAgICAgICAgICAgICAgICAgIG5vZGUgPSBOb2RlVHJhdmVyc2FsOjpuZXh0
KG5vZGUuZ2V0KCkpOwpAQCAtNjE1LDkgKzYxOSwxOSBAQAogICAgICAgICByZXR1cm47CiAgICAg
ICAgIAogICAgIC8vIFRoZXJlJ3Mgbm90aGluZyB0byBtZXJnZS4KLSAgICBpZiAobV91cHN0cmVh
bVN0YXJ0ID09IG1fZG93bnN0cmVhbUVuZCkKKyAgICBpZiAobV91cHN0cmVhbVN0YXJ0ID09IG1f
ZG93bnN0cmVhbUVuZCkgewogICAgICAgICByZXR1cm47Ci0gICAgICAgIAorICAgIH0KKyAgICAK
KyAgICAvLyBDYW4ndCBtZXJnZSBpbnRvIGEgcGFyZW50IGVsZW1lbnQuICBUaGlzIG9jY3VycyBp
ZiB5b3UgZGVsZXRlIHRoZSBsYXN0IGNoaWxkIG9mIGFuCisgICAgLy8gZWxlbWVudCB0aGF0IGhh
cyA6OmJlZm9yZSBhbmQgOjphZnRlciBwc2V1ZG9lbGVtZW50cyAoYmVjYXVzZSBzdWNoIGFuIGVs
ZW1lbnQKKyAgICAvLyBjYW4gaGF2ZSBhbiBlZGl0aW5nIGN1cnNvciBpbnNpZGUgaXQgZXZlbiB3
aGVuIGVtcHR5KQorICAgIGlmIChtX3Vwc3RyZWFtU3RhcnQuZGVwcmVjYXRlZE5vZGUoKS0+aXNE
ZXNjZW5kYW50T2YobV9kb3duc3RyZWFtRW5kLmRlcHJlY2F0ZWROb2RlKCkpKSB7CisgICAgICAg
IC8vIFNldCB0aGUgZW5kIHBvc2l0aW9uIHRvIGJlIGluc2lkZSB0aGUgZWxlbWVudCBpbnN0ZWFk
IG9mIGFmdGVyIGl0LgorICAgICAgICBtX2VuZGluZ1Bvc2l0aW9uID0gUG9zaXRpb24obV91cHN0
cmVhbVN0YXJ0LmRlcHJlY2F0ZWROb2RlKCksIDAsIFBvc2l0aW9uOjpQb3NpdGlvbklzT2Zmc2V0
SW5BbmNob3IpOworICAgICAgICByZXR1cm47CisgICAgfQorICAgIAogICAgIFZpc2libGVQb3Np
dGlvbiBzdGFydE9mUGFyYWdyYXBoVG9Nb3ZlKG1fZG93bnN0cmVhbUVuZCk7CiAgICAgVmlzaWJs
ZVBvc2l0aW9uIG1lcmdlRGVzdGluYXRpb24obV91cHN0cmVhbVN0YXJ0KTsKICAgICAKQEAgLTY3
NSw2ICs2ODksMjMgQEAKICAgICAvLyBUaGUgZW5kaW5nUG9zaXRpb24gd2FzIGxpa2VseSBjbG9i
YmVyZWQgYnkgdGhlIG1vdmUsIHNvIHJlY29tcHV0ZSBpdCAobW92ZVBhcmFncmFwaCBzZWxlY3Rz
IHRoZSBtb3ZlZCBwYXJhZ3JhcGgpLgogICAgIG1fZW5kaW5nUG9zaXRpb24gPSBlbmRpbmdTZWxl
Y3Rpb24oKS5zdGFydCgpOwogfQorICAgIAorY2hhciAqcHJpbnRFbGVtZW50TmFtZSAoTm9kZSAq
bXlub2RlKSBfX2F0dHJpYnV0ZV9fKCh1bnVzZWQpKTsKK2NoYXIgKnByaW50RWxlbWVudE5hbWUg
KE5vZGUgKm15bm9kZSkKK3sKKyAgICBFbGVtZW50ICplbHQgPSBkb3duY2FzdDxFbGVtZW50Piht
eW5vZGUpOworICAgIAorICAgIHN0YXRpYyBjaGFyICp0ZW1wID0gTlVMTDsKKyAgICAKKyAgICAv
LyBpZiAodGVtcCkgZnJlZSh0ZW1wKTsKKyAgICAKKyAgICB0ZW1wID0gKGNoYXIgKiltYWxsb2Mo
ZWx0LT50YWdOYW1lKCkubGVuZ3RoKCkgKyAxKTsKKyAgICAKKyAgICBzdHJsY3B5KHRlbXAsIGVs
dC0+dGFnTmFtZSgpLmFzY2lpKCkuZGF0YSgpLCBlbHQtPnRhZ05hbWUoKS5sZW5ndGgoKSArIDEp
OworICAgIHRlbXBbZWx0LT50YWdOYW1lKCkubGVuZ3RoKCldID0gJ1wwJzsKKyAgICAKKyAgICBy
ZXR1cm4gdGVtcDsKK30KIAogdm9pZCBEZWxldGVTZWxlY3Rpb25Db21tYW5kOjpyZW1vdmVQcmV2
aW91c2x5U2VsZWN0ZWRFbXB0eVRhYmxlUm93cygpCiB7CkBAIC04NTUsNiArODg2LDkgQEAKICAg
ICAKICAgICByZW1vdmVQcmV2aW91c2x5U2VsZWN0ZWRFbXB0eVRhYmxlUm93cygpOwogICAgIAor
ICAgIGlmIChtX25lZWRQbGFjZWhvbGRlciAmJiBlbmRzT2ZOb2RlQXJlVmlzdWFsbHlEaXN0aW5j
dFBvc2l0aW9ucyhtX2VuZGluZ1Bvc2l0aW9uLmVsZW1lbnQoKSkpCisgICAgICAgIG1fbmVlZFBs
YWNlaG9sZGVyID0gZmFsc2U7CisgICAgCiAgICAgUmVmUHRyPE5vZGU+IHBsYWNlaG9sZGVyID0g
bV9uZWVkUGxhY2Vob2xkZXIgPyBjcmVhdGVCcmVha0VsZW1lbnQoZG9jdW1lbnQoKSkuZ2V0KCkg
OiAwOwogICAgIAogICAgIGlmIChwbGFjZWhvbGRlcikgewpJbmRleDogU291cmNlL1dlYkNvcmUv
ZWRpdGluZy9FZGl0b3IuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL2VkaXRpbmcv
RWRpdG9yLmNwcAkocmV2aXNpb24gMTc0MzI0KQorKysgU291cmNlL1dlYkNvcmUvZWRpdGluZy9F
ZGl0b3IuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0xODY1LDcgKzE4NjUsNyBAQAogICAgICAgICAg
ICAgdW5zaWduZWQgc3RhcnQgPSBzdGQ6Om1pbihiYXNlT2Zmc2V0ICsgc2VsZWN0aW9uU3RhcnQs
IGV4dGVudE9mZnNldCk7CiAgICAgICAgICAgICB1bnNpZ25lZCBlbmQgPSBzdGQ6Om1pbihzdGQ6
Om1heChzdGFydCwgYmFzZU9mZnNldCArIHNlbGVjdGlvbkVuZCksIGV4dGVudE9mZnNldCk7CiAg
ICAgICAgICAgICBSZWZQdHI8UmFuZ2U+IHNlbGVjdGVkUmFuZ2UgPSBSYW5nZTo6Y3JlYXRlKGJh
c2VOb2RlLT5kb2N1bWVudCgpLCBiYXNlTm9kZSwgc3RhcnQsIGJhc2VOb2RlLCBlbmQpOwotICAg
ICAgICAgICAgbV9mcmFtZS5zZWxlY3Rpb24oKS5zZXRTZWxlY3RlZFJhbmdlKHNlbGVjdGVkUmFu
Z2UuZ2V0KCksIERPV05TVFJFQU0sIGZhbHNlKTsKKyAgICAgICAgICAgIG1fZnJhbWUuc2VsZWN0
aW9uKCkuc2V0U2VsZWN0ZWRSYW5nZShzZWxlY3RlZFJhbmdlLmdldCgpLCBET1dOU1RSRUFNLCBm
YWxzZSwgZmFsc2UpOwogICAgICAgICB9CiAgICAgfQogCkluZGV4OiBTb3VyY2UvV2ViQ29yZS9l
ZGl0aW5nL0VkaXRvckNvbW1hbmQuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL2Vk
aXRpbmcvRWRpdG9yQ29tbWFuZC5jcHAJKHJldmlzaW9uIDE3NDMyNCkKKysrIFNvdXJjZS9XZWJD
b3JlL2VkaXRpbmcvRWRpdG9yQ29tbWFuZC5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTIxOSw3ICsy
MTksNyBAQAogICAgIEVBZmZpbml0eSBhZmZpbml0eSA9IHNlbGVjdGlvbi5hZmZpbml0eSgpOwog
ICAgIGlmICghZnJhbWUuZWRpdG9yKCkuY2xpZW50KCktPnNob3VsZENoYW5nZVNlbGVjdGVkUmFu
Z2Uob2xkUmFuZ2UuZ2V0KCksIG5ld1JhbmdlLmdldCgpLCBhZmZpbml0eSwgZmFsc2UpKQogICAg
ICAgICByZXR1cm4gZmFsc2U7Ci0gICAgZnJhbWUuc2VsZWN0aW9uKCkuc2V0U2VsZWN0ZWRSYW5n
ZShuZXdSYW5nZS5nZXQoKSwgYWZmaW5pdHksIHRydWUpOworICAgIGZyYW1lLnNlbGVjdGlvbigp
LnNldFNlbGVjdGVkUmFuZ2UobmV3UmFuZ2UuZ2V0KCksIGFmZmluaXR5LCBmYWxzZSwgRnJhbWVT
ZWxlY3Rpb246OkNsb3NlVHlwaW5nKTsKICAgICByZXR1cm4gdHJ1ZTsKIH0KIApAQCAtMzkwLDcg
KzM5MCw3IEBACiAgICAgUmVmUHRyPFJhbmdlPiBtYXJrID0gZnJhbWUuZWRpdG9yKCkubWFyaygp
LnRvTm9ybWFsaXplZFJhbmdlKCk7CiAgICAgRnJhbWVTZWxlY3Rpb24mIHNlbGVjdGlvbiA9IGZy
YW1lLnNlbGVjdGlvbigpOwogICAgIGlmIChtYXJrKSB7Ci0gICAgICAgIGJvb2wgc2VsZWN0ZWQg
PSBzZWxlY3Rpb24uc2V0U2VsZWN0ZWRSYW5nZSh1bmlvbkRPTVJhbmdlcyhtYXJrLmdldCgpLCBm
cmFtZS5lZGl0b3IoKS5zZWxlY3RlZFJhbmdlKCkuZ2V0KCkpLmdldCgpLCBET1dOU1RSRUFNLCB0
cnVlKTsKKwlib29sIHNlbGVjdGVkID0gZnJhbWUuc2VsZWN0aW9uKCkuc2V0U2VsZWN0ZWRSYW5n
ZSh1bmlvbkRPTVJhbmdlcyhtYXJrLmdldCgpLCBmcmFtZS5lZGl0b3IoKS5zZWxlY3RlZFJhbmdl
KCkuZ2V0KCkpLmdldCgpLCBET1dOU1RSRUFNLCBmYWxzZSwgRnJhbWVTZWxlY3Rpb246OkNsb3Nl
VHlwaW5nKTsKICAgICAgICAgQVNTRVJUKHNlbGVjdGVkKTsKICAgICAgICAgaWYgKCFzZWxlY3Rl
ZCkKICAgICAgICAgICAgIHJldHVybiBmYWxzZTsKQEAgLTEwNDMsNyArMTA0Myw4IEBACiAgICAg
ICAgIHN5c3RlbUJlZXAoKTsKICAgICAgICAgcmV0dXJuIGZhbHNlOwogICAgIH0KLSAgICBmcmFt
ZS5zZWxlY3Rpb24oKS5zZXRTZWxlY3RlZFJhbmdlKHVuaW9uRE9NUmFuZ2VzKG1hcmsuZ2V0KCks
IHNlbGVjdGlvbi5nZXQoKSkuZ2V0KCksIERPV05TVFJFQU0sIHRydWUpOworICAgIGZyYW1lLnNl
bGVjdGlvbigpLnNldFNlbGVjdGVkUmFuZ2UodW5pb25ET01SYW5nZXMobWFyay5nZXQoKSwgc2Vs
ZWN0aW9uLmdldCgpKS5nZXQoKSwgRE9XTlNUUkVBTSwgZmFsc2UsIEZyYW1lU2VsZWN0aW9uOjpD
bG9zZVR5cGluZyk7CisKICAgICByZXR1cm4gdHJ1ZTsKIH0KIApJbmRleDogU291cmNlL1dlYkNv
cmUvZWRpdGluZy9GcmFtZVNlbGVjdGlvbi5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNv
cmUvZWRpdGluZy9GcmFtZVNlbGVjdGlvbi5jcHAJKHJldmlzaW9uIDE3NDMyNCkKKysrIFNvdXJj
ZS9XZWJDb3JlL2VkaXRpbmcvRnJhbWVTZWxlY3Rpb24uY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0x
MTAsNiArMTEwLDcgQEAKIEZyYW1lU2VsZWN0aW9uOjpGcmFtZVNlbGVjdGlvbihGcmFtZSogZnJh
bWUpCiAgICAgOiBtX2ZyYW1lKGZyYW1lKQogICAgICwgbV94UG9zRm9yVmVydGljYWxBcnJvd05h
dmlnYXRpb24oTm9YUG9zRm9yVmVydGljYWxBcnJvd05hdmlnYXRpb24oKSkKKyAgICAsIG1fb2Jz
ZXJ2aW5nVmlzaWJsZVNlbGVjdGlvbihmYWxzZSkKICAgICAsIG1fZ3JhbnVsYXJpdHkoQ2hhcmFj
dGVyR3JhbnVsYXJpdHkpCiAgICAgLCBtX2NhcmV0QmxpbmtUaW1lcih0aGlzLCAmRnJhbWVTZWxl
Y3Rpb246OmNhcmV0QmxpbmtUaW1lckZpcmVkKQogICAgICwgbV9hYnNDYXJldEJvdW5kc0RpcnR5
KHRydWUpCkBAIC0xMzAsNiArMTMxLDExIEBACiAgICAgICAgIG1fc2VsZWN0aW9uLnNldElzRGly
ZWN0aW9uYWwodHJ1ZSk7CiB9CiAKK0ZyYW1lU2VsZWN0aW9uOjp+RnJhbWVTZWxlY3Rpb24oKQor
eworICAgIHN0b3BPYnNlcnZpbmdWaXNpYmxlU2VsZWN0aW9uQ2hhbmdlSWZOZWNlc3NhcnkoKTsK
K30KKwogRWxlbWVudCogRnJhbWVTZWxlY3Rpb246OnJvb3RFZGl0YWJsZUVsZW1lbnRPckRvY3Vt
ZW50RWxlbWVudCgpIGNvbnN0CiB7CiAgICAgRWxlbWVudCogc2VsZWN0aW9uUm9vdCA9IG1fc2Vs
ZWN0aW9uLnJvb3RFZGl0YWJsZUVsZW1lbnQoKTsKQEAgLTE3MTMsMjQgKzE3MTksNDMgQEAKICAg
ICAgICAgc2V0U2VsZWN0aW9uKG5ld1NlbGVjdGlvbiwgZGVmYXVsdFNldFNlbGVjdGlvbk9wdGlv
bnMoKSB8IEZpcmVTZWxlY3RFdmVudCk7CiB9CiAKLWJvb2wgRnJhbWVTZWxlY3Rpb246OnNldFNl
bGVjdGVkUmFuZ2UoUmFuZ2UqIHJhbmdlLCBFQWZmaW5pdHkgYWZmaW5pdHksIGJvb2wgY2xvc2VU
eXBpbmcpCitib29sIEZyYW1lU2VsZWN0aW9uOjpzZXRTZWxlY3RlZFJhbmdlKFJhbmdlKiByYW5n
ZSwgRUFmZmluaXR5IGFmZmluaXR5LCBib29sIGlzRGlyZWN0aW9uYWwsIFNldFNlbGVjdGlvbk9w
dGlvbnMgb3B0aW9ucykKIHsKICAgICBpZiAoIXJhbmdlIHx8ICFyYW5nZS0+c3RhcnRDb250YWlu
ZXIoKSB8fCAhcmFuZ2UtPmVuZENvbnRhaW5lcigpKQogICAgICAgICByZXR1cm4gZmFsc2U7CiAg
ICAgQVNTRVJUKCZyYW5nZS0+c3RhcnRDb250YWluZXIoKS0+ZG9jdW1lbnQoKSA9PSAmcmFuZ2Ut
PmVuZENvbnRhaW5lcigpLT5kb2N1bWVudCgpKTsKIAotICAgIFZpc2libGVTZWxlY3Rpb24gbmV3
U2VsZWN0aW9uKHJhbmdlLCBhZmZpbml0eSk7CisgICAgRXhjZXB0aW9uQ29kZSBlYyA9IDA7Cisg
ICAgYm9vbCBjb2xsYXBzZWQgPSByYW5nZS0+Y29sbGFwc2VkKGVjKTsKKyAgICBpZiAoZWMpCisg
ICAgICAgIHJldHVybiBmYWxzZTsKIAorICAgIFZpc2libGVTZWxlY3Rpb24gbmV3U2VsZWN0aW9u
KHJhbmdlLCBjb2xsYXBzZWQgPyBhZmZpbml0eSA6IERPV05TVFJFQU0sIGlzRGlyZWN0aW9uYWwp
OworCiAjaWYgUExBVEZPUk0oSU9TKQogICAgIC8vIEZJWE1FOiBXaHkgZG8gd2UgbmVlZCB0aGlz
IGNoZWNrIG9ubHkgaW4gaU9TPwogICAgIGlmIChyYW5nZS0+c3RhcnRDb250YWluZXIoKSAmJiBy
YW5nZS0+ZW5kQ29udGFpbmVyKCkgJiYgbmV3U2VsZWN0aW9uLmlzTm9uZSgpKQogICAgICAgICBy
ZXR1cm4gZmFsc2U7CiAjZW5kaWYKIAotICAgIHNldFNlbGVjdGlvbihuZXdTZWxlY3Rpb24sIENs
ZWFyVHlwaW5nU3R5bGUgfCAoY2xvc2VUeXBpbmcgPyBDbG9zZVR5cGluZyA6IDApKTsKKyAgICBt
X2xvZ2ljYWxSYW5nZSA9IG51bGxwdHI7CisgICAgc3RvcE9ic2VydmluZ1Zpc2libGVTZWxlY3Rp
b25DaGFuZ2VJZk5lY2Vzc2FyeSgpOworCisgICAgc2V0U2VsZWN0aW9uKG5ld1NlbGVjdGlvbiwg
b3B0aW9ucyk7CisKKyAgICBtX2xvZ2ljYWxSYW5nZSA9IHJhbmdlLT5jbG9uZVJhbmdlKEFTU0VS
VF9OT19FWENFUFRJT04pOworICAgIHN0YXJ0T2JzZXJ2aW5nVmlzaWJsZVNlbGVjdGlvbkNoYW5n
ZSgpOworCiAgICAgcmV0dXJuIHRydWU7CiB9CiAKK1Bhc3NSZWZQdHI8UmFuZ2U+IEZyYW1lU2Vs
ZWN0aW9uOjpmaXJzdFJhbmdlKCkgY29uc3QKK3sKKyAgICBpZiAobV9sb2dpY2FsUmFuZ2UpCisg
ICAgICAgIHJldHVybiBtX2xvZ2ljYWxSYW5nZS0+Y2xvbmVSYW5nZShBU1NFUlRfTk9fRVhDRVBU
SU9OKTsKKyAgICByZXR1cm4gbV9zZWxlY3Rpb24uZmlyc3RSYW5nZSgpOworfQorCiB2b2lkIEZy
YW1lU2VsZWN0aW9uOjpmb2N1c2VkT3JBY3RpdmVTdGF0ZUNoYW5nZWQoKQogewogICAgIGJvb2wg
YWN0aXZlQW5kRm9jdXNlZCA9IGlzRm9jdXNlZEFuZEFjdGl2ZSgpOwpAQCAtMjE1MSw2ICsyMTc2
LDMwIEBACiAgICAgdXBkYXRlRGF0YURldGVjdG9yc0ZvclNlbGVjdGlvbigpOwogfQogCit2b2lk
IEZyYW1lU2VsZWN0aW9uOjpkaWRDaGFuZ2VWaXNpYmxlU2VsZWN0aW9uKCkKK3sKKyAgICBBU1NF
UlQobV9vYnNlcnZpbmdWaXNpYmxlU2VsZWN0aW9uKTsKKyAgICAvLyBJbnZhbGlkYXRlIHRoZSBs
b2dpY2FsIHJhbmdlIHdoZW4gdGhlIHVuZGVybHlpbmcgVmlzaWJsZVNlbGVjdGlvbiBoYXMgY2hh
bmdlZC4KKyAgICBtX2xvZ2ljYWxSYW5nZSA9IG51bGxwdHI7CisgICAgbV9zZWxlY3Rpb24uY2xl
YXJDaGFuZ2VPYnNlcnZlcigpOworICAgIG1fb2JzZXJ2aW5nVmlzaWJsZVNlbGVjdGlvbiA9IGZh
bHNlOworfQorCit2b2lkIEZyYW1lU2VsZWN0aW9uOjpzdGFydE9ic2VydmluZ1Zpc2libGVTZWxl
Y3Rpb25DaGFuZ2UoKQoreworICAgIEFTU0VSVCghbV9vYnNlcnZpbmdWaXNpYmxlU2VsZWN0aW9u
KTsKKyAgICBtX3NlbGVjdGlvbi5zZXRDaGFuZ2VPYnNlcnZlcigqdGhpcyk7CisgICAgbV9vYnNl
cnZpbmdWaXNpYmxlU2VsZWN0aW9uID0gdHJ1ZTsKK30KKwordm9pZCBGcmFtZVNlbGVjdGlvbjo6
c3RvcE9ic2VydmluZ1Zpc2libGVTZWxlY3Rpb25DaGFuZ2VJZk5lY2Vzc2FyeSgpCit7CisgICAg
aWYgKG1fb2JzZXJ2aW5nVmlzaWJsZVNlbGVjdGlvbikgeworICAgICAgICBtX3NlbGVjdGlvbi5j
bGVhckNoYW5nZU9ic2VydmVyKCk7CisgICAgICAgIG1fb2JzZXJ2aW5nVmlzaWJsZVNlbGVjdGlv
biA9IGZhbHNlOworICAgIH0KK30KKwogI2lmbmRlZiBOREVCVUcKIAogdm9pZCBGcmFtZVNlbGVj
dGlvbjo6Zm9ybWF0Rm9yRGVidWdnZXIoY2hhciogYnVmZmVyLCB1bnNpZ25lZCBsZW5ndGgpIGNv
bnN0CkluZGV4OiBTb3VyY2UvV2ViQ29yZS9lZGl0aW5nL0ZyYW1lU2VsZWN0aW9uLmgKPT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PQotLS0gU291cmNlL1dlYkNvcmUvZWRpdGluZy9GcmFtZVNlbGVjdGlvbi5oCShyZXZpc2lv
biAxNzQzMjQpCisrKyBTb3VyY2UvV2ViQ29yZS9lZGl0aW5nL0ZyYW1lU2VsZWN0aW9uLmgJKHdv
cmtpbmcgY29weSkKQEAgLTEwOSw3ICsxMDksNyBAQAogICAgIFZpc2libGVQb3NpdGlvbiBtX3Bv
c2l0aW9uOwogfTsKIAotY2xhc3MgRnJhbWVTZWxlY3Rpb24gOiBwcml2YXRlIENhcmV0QmFzZSB7
CitjbGFzcyBGcmFtZVNlbGVjdGlvbiAvKiBGSU5BTCAqLyA6IHB1YmxpYyBWaXNpYmxlU2VsZWN0
aW9uOjpDaGFuZ2VPYnNlcnZlciwgcHJpdmF0ZSBDYXJldEJhc2UgewogICAgIFdURl9NQUtFX05P
TkNPUFlBQkxFKEZyYW1lU2VsZWN0aW9uKTsKICAgICBXVEZfTUFLRV9GQVNUX0FMTE9DQVRFRDsK
IHB1YmxpYzoKQEAgLTEzMiw2ICsxMzIsNyBAQAogICAgIH0KIAogICAgIFdFQkNPUkVfRVhQT1JU
IGV4cGxpY2l0IEZyYW1lU2VsZWN0aW9uKEZyYW1lKiA9IG51bGxwdHIpOworICAgIFdFQkNPUkVf
RVhQT1JUIHZpcnR1YWwgfkZyYW1lU2VsZWN0aW9uKCk7CiAKICAgICBXRUJDT1JFX0VYUE9SVCBF
bGVtZW50KiByb290RWRpdGFibGVFbGVtZW50T3JEb2N1bWVudEVsZW1lbnQoKSBjb25zdDsKICAg
ICAgCkBAIC0xNDQsNyArMTQ1LDkgQEAKIAogICAgIGNvbnN0IFZpc2libGVTZWxlY3Rpb24mIHNl
bGVjdGlvbigpIGNvbnN0IHsgcmV0dXJuIG1fc2VsZWN0aW9uOyB9CiAgICAgV0VCQ09SRV9FWFBP
UlQgdm9pZCBzZXRTZWxlY3Rpb24oY29uc3QgVmlzaWJsZVNlbGVjdGlvbiYsIFNldFNlbGVjdGlv
bk9wdGlvbnMgPSBkZWZhdWx0U2V0U2VsZWN0aW9uT3B0aW9ucygpLCBDdXJzb3JBbGlnbk9uU2Ny
b2xsID0gQWxpZ25DdXJzb3JPblNjcm9sbElmTmVlZGVkLCBUZXh0R3JhbnVsYXJpdHkgPSBDaGFy
YWN0ZXJHcmFudWxhcml0eSk7Ci0gICAgV0VCQ09SRV9FWFBPUlQgYm9vbCBzZXRTZWxlY3RlZFJh
bmdlKFJhbmdlKiwgRUFmZmluaXR5LCBib29sIGNsb3NlVHlwaW5nKTsKKyAgICAKKyAgICBXRUJD
T1JFX0VYUE9SVCBib29sIHNldFNlbGVjdGVkUmFuZ2UoUmFuZ2UqLCBFQWZmaW5pdHksIGJvb2wg
aXNEaXJlY3Rpb25hbCwgU2V0U2VsZWN0aW9uT3B0aW9ucyA9IENsb3NlVHlwaW5nIHwgQ2xlYXJU
eXBpbmdTdHlsZSk7CisgICAgCiAgICAgV0VCQ09SRV9FWFBPUlQgdm9pZCBzZWxlY3RBbGwoKTsK
ICAgICBXRUJDT1JFX0VYUE9SVCB2b2lkIGNsZWFyKCk7CiAgICAgdm9pZCBwcmVwYXJlRm9yRGVz
dHJ1Y3Rpb24oKTsKQEAgLTE4Miw3ICsxODUsMTIgQEAKICAgICBib29sIGlzUmFuZ2UoKSBjb25z
dCB7IHJldHVybiBtX3NlbGVjdGlvbi5pc1JhbmdlKCk7IH0KICAgICBib29sIGlzQ2FyZXRPclJh
bmdlKCkgY29uc3QgeyByZXR1cm4gbV9zZWxlY3Rpb24uaXNDYXJldE9yUmFuZ2UoKTsgfQogICAg
IGJvb2wgaXNBbGwoRWRpdGluZ0JvdW5kYXJ5Q3Jvc3NpbmdSdWxlIHJ1bGUgPSBDYW5ub3RDcm9z
c0VkaXRpbmdCb3VuZGFyeSkgY29uc3QgeyByZXR1cm4gbV9zZWxlY3Rpb24uaXNBbGwocnVsZSk7
IH0KKyAgICBib29sIGlzRGlyZWN0aW9uYWwoKSBjb25zdCB7IHJldHVybiBtX3NlbGVjdGlvbi5p
c0RpcmVjdGlvbmFsKCk7IH0KICAgICAKKyAgICAvLyBJZiB0aGlzIEZyYW1lU2VsZWN0aW9uIGhh
cyBhIGxvZ2ljYWwgcmFuZ2Ugd2hpY2ggaXMgc3RpbGwgdmFsaWQsIHRoaXMgZnVuY3Rpb24gcmV0
dXJuIGl0cyBjbG9uZS4gT3RoZXJ3aXNlLAorICAgIC8vIHRoZSByZXR1cm4gdmFsdWUgZnJvbSB1
bmRlcmx5aW5nIFZpc2libGVTZWxlY3Rpb24ncyBmaXJzdFJhbmdlKCkgaXMgcmV0dXJuZWQuCisg
ICAgUGFzc1JlZlB0cjxSYW5nZT4gZmlyc3RSYW5nZSgpIGNvbnN0OworCiAgICAgUGFzc1JlZlB0
cjxSYW5nZT4gdG9Ob3JtYWxpemVkUmFuZ2UoKSBjb25zdCB7IHJldHVybiBtX3NlbGVjdGlvbi50
b05vcm1hbGl6ZWRSYW5nZSgpOyB9CiAKICAgICB2b2lkIGRlYnVnUmVuZGVyZXIoUmVuZGVyT2Jq
ZWN0KiwgYm9vbCBzZWxlY3RlZCkgY29uc3Q7CkBAIC0yNjgsNiArMjc2LDkgQEAKICAgICBib29s
IHNob3VsZFNob3dCbG9ja0N1cnNvcigpIGNvbnN0IHsgcmV0dXJuIG1fc2hvdWxkU2hvd0Jsb2Nr
Q3Vyc29yOyB9CiAgICAgdm9pZCBzZXRTaG91bGRTaG93QmxvY2tDdXJzb3IoYm9vbCk7CiAKKyAg
ICAvLyBWaXNpYmxlU2VsZWN0aW9uOjpDaGFuZ2VPYnNlcnZlciBpbnRlcmZhY2UuCisgICAgdmly
dHVhbCB2b2lkIGRpZENoYW5nZVZpc2libGVTZWxlY3Rpb24oKSAvKiBPVkVSUklERSAqLyA7CisK
IHByaXZhdGU6CiAgICAgZW51bSBFUG9zaXRpb25UeXBlIHsgU1RBUlQsIEVORCwgQkFTRSwgRVhU
RU5UIH07CiAKQEAgLTMxNywxNCArMzI4LDIzIEBACiAKICAgICBib29sIGRpc3BhdGNoU2VsZWN0
U3RhcnQoKTsKIAorICAgIHZvaWQgc3RhcnRPYnNlcnZpbmdWaXNpYmxlU2VsZWN0aW9uQ2hhbmdl
KCk7CisgICAgdm9pZCBzdG9wT2JzZXJ2aW5nVmlzaWJsZVNlbGVjdGlvbkNoYW5nZUlmTmVjZXNz
YXJ5KCk7CisKICAgICBGcmFtZSogbV9mcmFtZTsKIAogICAgIExheW91dFVuaXQgbV94UG9zRm9y
VmVydGljYWxBcnJvd05hdmlnYXRpb247CiAKICAgICBWaXNpYmxlU2VsZWN0aW9uIG1fc2VsZWN0
aW9uOworICAgIGJvb2wgbV9vYnNlcnZpbmdWaXNpYmxlU2VsZWN0aW9uOwogICAgIFZpc2libGVQ
b3NpdGlvbiBtX29yaWdpbmFsQmFzZTsgLy8gVXNlZCB0byBzdG9yZSBiYXNlIGJlZm9yZSB0aGUg
YWRqdXN0bWVudCBhdCBiaWRpIGJvdW5kYXJ5CiAgICAgVGV4dEdyYW51bGFyaXR5IG1fZ3JhbnVs
YXJpdHk7CiAKKyAgICAvLyBUaGUgcmFuZ2Ugc3BlY2lmaWVkIGJ5IHRoZSB1c2VyLCB3aGljaCBt
YXkgbm90IGJlIHZpc3VhbGx5IGNhbm9uaWNhbGl6ZWQgKGhlbmNlICJsb2dpY2FsIikuCisgICAg
Ly8gVGhpcyB3aWxsIGJlIGludmFsaWRhdGVkIGlmIHRoZSB1bmRlcmx5aW5nIFZpc2libGVTZWxl
Y3Rpb24gY2hhbmdlcy4gSWYgdGhhdCBoYXBwZW5zLCB0aGlzIHZhcmlhYmxlIHdpbGwKKyAgICAv
LyBiZWNvbWUgbnVsbCwgaW4gd2hpY2ggY2FzZSBsb2dpY2FsIHBvc2l0aW9ucyA9PSB2aXNpYmxl
IHBvc2l0aW9ucy4KKyAgICBSZWZQdHI8UmFuZ2U+IG1fbG9naWNhbFJhbmdlOworCiAgICAgUmVm
UHRyPE5vZGU+IG1fcHJldmlvdXNDYXJldE5vZGU7IC8vIFRoZSBsYXN0IG5vZGUgd2hpY2ggcGFp
bnRlZCB0aGUgY2FyZXQuIFJldGFpbmVkIGZvciBjbGVhcmluZyB0aGUgb2xkIGNhcmV0IHdoZW4g
aXQgbW92ZXMuCiAKICAgICBSZWZQdHI8RWRpdGluZ1N0eWxlPiBtX3R5cGluZ1N0eWxlOwpJbmRl
eDogU291cmNlL1dlYkNvcmUvZWRpdGluZy9UeXBpbmdDb21tYW5kLmNwcAo9PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0t
LSBTb3VyY2UvV2ViQ29yZS9lZGl0aW5nL1R5cGluZ0NvbW1hbmQuY3BwCShyZXZpc2lvbiAxNzQz
MjQpCisrKyBTb3VyY2UvV2ViQ29yZS9lZGl0aW5nL1R5cGluZ0NvbW1hbmQuY3BwCSh3b3JraW5n
IGNvcHkpCkBAIC0xLDMgKzEsNCBAQAorCiAvKgogICogQ29weXJpZ2h0IChDKSAyMDA1LCAyMDA2
LCAyMDA3LCAyMDA4IEFwcGxlIEluYy4gIEFsbCByaWdodHMgcmVzZXJ2ZWQuCiAgKgpJbmRleDog
U291cmNlL1dlYkNvcmUvZWRpdGluZy9WaXNpYmxlUG9zaXRpb24uY3BwCj09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0t
IFNvdXJjZS9XZWJDb3JlL2VkaXRpbmcvVmlzaWJsZVBvc2l0aW9uLmNwcAkocmV2aXNpb24gMTc0
MzI0KQorKysgU291cmNlL1dlYkNvcmUvZWRpdGluZy9WaXNpYmxlUG9zaXRpb24uY3BwCSh3b3Jr
aW5nIGNvcHkpCkBAIC0xLDYgKzEsNyBAQAogLyoKICAqIENvcHlyaWdodCAoQykgMjAwNCwgMjAw
NSwgMjAwNiwgMjAwNywgMjAwOCwgMjAwOSBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQu
CiAgKiBQb3J0aW9ucyBDb3B5cmlnaHQgKGMpIDIwMTEgTW90b3JvbGEgTW9iaWxpdHksIEluYy4g
IEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKiBQb3J0aW9ucyBDb3B5cmlnaHQgKGMpIDIwMTQgRGF2
aWQgQS4gR2F0d29vZC4gIEFsbCByaWdodHMgcmVzZXJ2ZWQuCiAgKgogICogUmVkaXN0cmlidXRp
b24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CiAg
KiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5n
IGNvbmRpdGlvbnMKQEAgLTM5LDYgKzQwLDcgQEAKICNpbmNsdWRlICJUZXh0LmgiCiAjaW5jbHVk
ZSAiVmlzaWJsZVVuaXRzLmgiCiAjaW5jbHVkZSAiaHRtbGVkaXRpbmcuaCIKKyNpbmNsdWRlICJQ
c2V1ZG9FbGVtZW50LmgiCiAjaW5jbHVkZSA8c3RkaW8uaD4KICNpbmNsdWRlIDx3dGYvdGV4dC9D
U3RyaW5nLmg+CiAKQEAgLTExMiw2ICsxMTQsOCBAQAogCiAgICAgUG9zaXRpb24gZG93bnN0cmVh
bVN0YXJ0ID0gcC5kb3duc3RyZWFtKCk7CiAgICAgVGV4dERpcmVjdGlvbiBwcmltYXJ5RGlyZWN0
aW9uID0gcC5wcmltYXJ5RGlyZWN0aW9uKCk7CisgICAgCisgICAgUmVuZGVyT2JqZWN0ICpyZW5k
ZXJlcklmTGFzdFJlbmRlcmVyV2FzUHNldWRvRWxlbWVudCA9IE5VTEw7CiAKICAgICB3aGlsZSAo
dHJ1ZSkgewogICAgICAgICBJbmxpbmVCb3gqIGJveDsKQEAgLTEyMiwyNSArMTI2LDg0IEBACiAK
ICAgICAgICAgUmVuZGVyT2JqZWN0KiByZW5kZXJlciA9ICZib3gtPnJlbmRlcmVyKCk7CiAKKyAg
ICAgICAgYm9vbCBza2lwQ3VycmVudCA9IHRydWU7CisgICAgICAgIAorICAgICAgICBOb2RlICps
YXN0Tm9kZSA9IE5VTEw7CisgICAgICAgIAogICAgICAgICB3aGlsZSAodHJ1ZSkgeworICAgICAg
ICAgICAgYm9vbCBlbGVtZW50Q2hhbmdlZCA9IGZhbHNlOworICAgICAgICAgICAgaWYgKHJlbmRl
cmVyLT5ub2RlKCkgJiYgIXJlbmRlcmVyLT5ub2RlKCktPmlzRG9jdW1lbnROb2RlKCkpIHsKKyAg
ICAgICAgICAgICAgICBpZiAobGFzdE5vZGUgJiYgbGFzdE5vZGUgIT0gcmVuZGVyZXItPm5vZGUo
KSkgeworICAgICAgICAgICAgICAgICAgICBza2lwQ3VycmVudCA9IGZhbHNlOworICAgICAgICAg
ICAgICAgICAgICBlbGVtZW50Q2hhbmdlZCA9IHRydWU7CisgICAgICAgICAgICAgICAgfQorICAg
ICAgICAgICAgICAgIGxhc3ROb2RlID0gcmVuZGVyZXItPm5vZGUoKTsKKyAgICAgICAgICAgICAg
ICAgICAgCisgICAgICAgICAgICB9CisgICAgICAgICAgICAKICAgICAgICAgICAgIGlmICgocmVu
ZGVyZXItPmlzUmVwbGFjZWQoKSB8fCByZW5kZXJlci0+aXNCUigpKSAmJiBvZmZzZXQgPT0gYm94
LT5jYXJldFJpZ2h0bW9zdE9mZnNldCgpKQogICAgICAgICAgICAgICAgIHJldHVybiBib3gtPmlz
TGVmdFRvUmlnaHREaXJlY3Rpb24oKSA/IHByZXZpb3VzVmlzdWFsbHlEaXN0aW5jdENhbmRpZGF0
ZShtX2RlZXBQb3NpdGlvbikgOiBuZXh0VmlzdWFsbHlEaXN0aW5jdENhbmRpZGF0ZShtX2RlZXBQ
b3NpdGlvbik7CiAKICAgICAgICAgICAgIGlmICghcmVuZGVyZXItPm5vZGUoKSkgeworICAgICAg
ICAgICAgICAgIGlmIChyZW5kZXJlci0+cGFyZW50KCktPmlzQmVmb3JlQ29udGVudCgpKSB7Cisg
ICAgICAgICAgICAgICAgICAgIC8qIFRoaXMgbWFnaWMgbGV0cyB1cyB3YWxrIGludG8gZW1wdHkg
ZWxlbWVudHMgaWYgdGhleSBoYXZlCisgICAgICAgICAgICAgICAgICAgICAgIHBzZXVkby1lbGVt
ZW50cyB0byBtYWtlIHRoZW0gdmlzdWFsbHkgZGlzdGluY3QuICBXaXRob3V0CisgICAgICAgICAg
ICAgICAgICAgICAgIGl0LCB5b3UnZCBvbmx5IHJlYWNoIHRob3NlIGVsZW1lbnRzIGlmIHRoZSBl
bGVtZW50IGhhZAorICAgICAgICAgICAgICAgICAgICAgICBhIGJhY2tncm91bmQgb3Igb3RoZXIg
Y29udGVudCB0aGF0IHJlcXVpcmVkIHJlbmRlcmluZy4KKyAgICAgICAgICAgICAgICAgICAgICov
CisgICAgICAgICAgICAgICAgICAgIFJlbmRlck9iamVjdCAqcGFyZW50UmVuZGVyZXIgPSByZW5k
ZXJlci0+cGFyZW50KCk7CisgICAgICAgICAgICAgICAgICAgIE5vZGUgKnBzZXVkb0VsZW1lbnRO
b2RlID0gcGFyZW50UmVuZGVyZXItPm5vZGUoKTsKKyAgICAgICAgICAgICAgICAgICAgCisgICAg
ICAgICAgICAgICAgICAgIGlmIChwc2V1ZG9FbGVtZW50Tm9kZSkgeworICAgICAgICAgICAgICAg
ICAgICAgICAgQVNTRVJUKHBzZXVkb0VsZW1lbnROb2RlLT5pc1BzZXVkb0VsZW1lbnQoKSk7Cisg
ICAgICAgICAgICAgICAgICAgICAgICBQc2V1ZG9FbGVtZW50ICpwZSA9IGRvd25jYXN0PFBzZXVk
b0VsZW1lbnQ+KHBzZXVkb0VsZW1lbnROb2RlKTsKKyAgICAgICAgICAgICAgICAgICAgICAgIEVs
ZW1lbnQgKmVsdCA9IHBlLT5ob3N0RWxlbWVudCgpOworICAgICAgICAgICAgICAgICAgICAgICAg
CisgICAgICAgICAgICAgICAgICAgICAgICByZW5kZXJlcklmTGFzdFJlbmRlcmVyV2FzUHNldWRv
RWxlbWVudCA9IHBhcmVudFJlbmRlcmVyOworICAgICAgICAgICAgICAgICAgICAgICAgCisgICAg
ICAgICAgICAgICAgICAgICAgICBpZiAoIWVsdC0+Zmlyc3RDaGlsZCgpKSB7CisgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgcmVuZGVyZXIgPSByZW5kZXJlci0+cGFyZW50KCk7CisgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgc2tpcEN1cnJlbnQgPSBmYWxzZTsKKworICAgICAgICAgICAg
ICAgICAgICAgICAgICAgIGNvbnRpbnVlOworICAgICAgICAgICAgICAgICAgICAgICAgfQorICAg
ICAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICAgICAgfSBlbHNlIHsKKyAgICAgICAgICAg
ICAgICAgICAgcmVuZGVyZXJJZkxhc3RSZW5kZXJlcldhc1BzZXVkb0VsZW1lbnQgPSBOVUxMOwor
ICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgICAgICBib3ggPSBib3gtPnByZXZMZWFmQ2hp
bGQoKTsKLSAgICAgICAgICAgICAgICBpZiAoIWJveCkKKyAgICAgICAgICAgICAgICBpZiAoIWJv
eCkgeworICAgICAgICAgICAgICAgICAgICAvKiBJZiB0aGUgcmVuZGVyZXIgdHJlZSB3YWxrIGVu
Y291bnRlcnMgYSA6OmJlZm9yZQorICAgICAgICAgICAgICAgICAgICAgICBwc2V1ZG8tZWxlbWVu
dCByaWdodCBiZWZvcmUgaXQgaGl0cyB0aGUgbGFzdAorICAgICAgICAgICAgICAgICAgICAgICBs
ZWFmIGNoaWxkLCBjb25zaWRlciB0aGUgcG9pbnQgYmVmb3JlIHRoYXQKKyAgICAgICAgICAgICAg
ICAgICAgICAgcHNldWRvLWVsZW1lbnQgdG8gYmUgYSB2YWxpZCBpbnNlcnRpb24gcG9pbnQuICBU
aGlzCisgICAgICAgICAgICAgICAgICAgICAgIHRha2VzIGNhcmUgb2YgdGhlIHNwZWNpYWwgY2Fz
ZSB3aGVyZSB0aGUgdXNlcgorICAgICAgICAgICAgICAgICAgICAgICBtb3ZlcyB0byB0aGUgbGVm
dCBmcm9tIHRoZSBmaXJzdCB0ZXh0IG5vZGUgaW4gdGhlCisgICAgICAgICAgICAgICAgICAgICAg
IGVkaXRhYmxlIGNvbnRlbnQgcmVnaW9uLCBhbGxvd2luZyBuYXZpZ2F0aW9uCisgICAgICAgICAg
ICAgICAgICAgICAgIHRvIGluc2VydGlvbiBwb2ludHMgYmVmb3JlIHRoYXQgdGV4dCBub2RlJ3MK
KyAgICAgICAgICAgICAgICAgICAgICAgZW5jbG9zaW5nIGVsZW1lbnRzLgorICAgICAgICAgICAg
ICAgICAgICAgKi8KKyAgICAgICAgICAgICAgICAgICAgaWYgKHJlbmRlcmVySWZMYXN0UmVuZGVy
ZXJXYXNQc2V1ZG9FbGVtZW50KSB7CisgICAgICAgICAgICAgICAgICAgICAgICByZW5kZXJlciA9
IHJlbmRlcmVySWZMYXN0UmVuZGVyZXJXYXNQc2V1ZG9FbGVtZW50OworICAgICAgICAgICAgICAg
ICAgICAgICAgb2Zmc2V0ID0gLTE7CisgICAgICAgICAgICAgICAgICAgICAgICBicmVhazsKKyAg
ICAgICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgICAgICAgICByZXR1cm4gcHJpbWFyeURp
cmVjdGlvbiA9PSBMVFIgPyBwcmV2aW91c1Zpc3VhbGx5RGlzdGluY3RDYW5kaWRhdGUobV9kZWVw
UG9zaXRpb24pIDogbmV4dFZpc3VhbGx5RGlzdGluY3RDYW5kaWRhdGUobV9kZWVwUG9zaXRpb24p
OworICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgICAgICByZW5kZXJlciA9ICZib3gtPnJl
bmRlcmVyKCk7CiAgICAgICAgICAgICAgICAgb2Zmc2V0ID0gYm94LT5jYXJldFJpZ2h0bW9zdE9m
ZnNldCgpOwogICAgICAgICAgICAgICAgIGNvbnRpbnVlOwogICAgICAgICAgICAgfQogCi0gICAg
ICAgICAgICBvZmZzZXQgPSBib3gtPmlzTGVmdFRvUmlnaHREaXJlY3Rpb24oKSA/IHJlbmRlcmVy
LT5wcmV2aW91c09mZnNldChvZmZzZXQpIDogcmVuZGVyZXItPm5leHRPZmZzZXQob2Zmc2V0KTsK
LQorICAgICAgICAgICAgaWYgKHNraXBDdXJyZW50KSB7CisgICAgICAgICAgICAgICAgb2Zmc2V0
ID0gYm94LT5pc0xlZnRUb1JpZ2h0RGlyZWN0aW9uKCkgPyByZW5kZXJlci0+cHJldmlvdXNPZmZz
ZXQob2Zmc2V0KSA6IHJlbmRlcmVyLT5uZXh0T2Zmc2V0KG9mZnNldCk7CisgICAgICAgICAgICB9
CisgICAgICAgICAgICBza2lwQ3VycmVudCA9IHRydWU7CisgICAgICAgICAgICAKICAgICAgICAg
ICAgIGludCBjYXJldE1pbk9mZnNldCA9IGJveC0+Y2FyZXRNaW5PZmZzZXQoKTsKICAgICAgICAg
ICAgIGludCBjYXJldE1heE9mZnNldCA9IGJveC0+Y2FyZXRNYXhPZmZzZXQoKTsKIAotICAgICAg
ICAgICAgaWYgKG9mZnNldCA+IGNhcmV0TWluT2Zmc2V0ICYmIG9mZnNldCA8IGNhcmV0TWF4T2Zm
c2V0KQorICAgICAgICAgICAgaWYgKG9mZnNldCA+IGNhcmV0TWluT2Zmc2V0ICYmIChvZmZzZXQg
PCBjYXJldE1heE9mZnNldCB8fCAob2Zmc2V0ID09IGNhcmV0TWF4T2Zmc2V0ICYmIGVsZW1lbnRD
aGFuZ2VkKSkpCiAgICAgICAgICAgICAgICAgYnJlYWs7CiAKICAgICAgICAgICAgIGlmIChib3gt
PmlzTGVmdFRvUmlnaHREaXJlY3Rpb24oKSA/IG9mZnNldCA8IGNhcmV0TWluT2Zmc2V0IDogb2Zm
c2V0ID4gY2FyZXRNYXhPZmZzZXQpIHsKQEAgLTE2Myw5MCArMjI2LDExNyBAQAogICAgICAgICAg
ICAgICAgIGJveCA9IHByZXZCb3g7CiAgICAgICAgICAgICAgICAgcmVuZGVyZXIgPSAmYm94LT5y
ZW5kZXJlcigpOwogICAgICAgICAgICAgICAgIG9mZnNldCA9IHByZXZCb3gtPmNhcmV0UmlnaHRt
b3N0T2Zmc2V0KCk7CisgICAgICAgICAgICAgICAgCisgICAgICAgICAgICAgICAgLy8gc2tpcEN1
cnJlbnQgc2hvdWxkIGJlIHRydWUgaWYgYW5kIG9ubHkgaWYgd2UgZG9uJ3QgZW5jb3VudGVyIGFu
eQorICAgICAgICAgICAgICAgIC8vIHBzZXVkb2VsZW1lbnRzIG9yIGVsZW1lbnQgYm91bmRhcmll
cy4KKyAgICAgICAgICAgICAgICBza2lwQ3VycmVudCA9IHRydWU7CisKICAgICAgICAgICAgICAg
ICBjb250aW51ZTsKICAgICAgICAgICAgIH0KIAotICAgICAgICAgICAgQVNTRVJUKG9mZnNldCA9
PSBib3gtPmNhcmV0TGVmdG1vc3RPZmZzZXQoKSk7CisgICAgICAgICAgICAvLyBDaGFuZ2VkIGFz
c2VydCB0byBpZiwgYmVjYXVzZSBpdCBjb3VsZCBhbHNvIGJlIHRoZQorICAgICAgICAgICAgLy8g
cmlnaHRtb3N0IG9mZnNldC4KKyAgICAgICAgICAgIGlmIChvZmZzZXQgPT0gYm94LT5jYXJldExl
ZnRtb3N0T2Zmc2V0KCkpIHsKIAotICAgICAgICAgICAgdW5zaWduZWQgY2hhciBsZXZlbCA9IGJv
eC0+YmlkaUxldmVsKCk7Ci0gICAgICAgICAgICBJbmxpbmVCb3gqIHByZXZCb3ggPSBib3gtPnBy
ZXZMZWFmQ2hpbGQoKTsKKyAgICAgICAgICAgICAgICB1bnNpZ25lZCBjaGFyIGxldmVsID0gYm94
LT5iaWRpTGV2ZWwoKTsKKyAgICAgICAgICAgICAgICBJbmxpbmVCb3gqIHByZXZCb3ggPSBib3gt
PnByZXZMZWFmQ2hpbGQoKTsKIAotICAgICAgICAgICAgaWYgKGJveC0+ZGlyZWN0aW9uKCkgPT0g
cHJpbWFyeURpcmVjdGlvbikgewotICAgICAgICAgICAgICAgIGlmICghcHJldkJveCkgewotICAg
ICAgICAgICAgICAgICAgICBJbmxpbmVCb3gqIGxvZ2ljYWxTdGFydCA9IDA7Ci0gICAgICAgICAg
ICAgICAgICAgIGlmIChwcmltYXJ5RGlyZWN0aW9uID09IExUUiA/IGJveC0+cm9vdCgpLmdldExv
Z2ljYWxTdGFydEJveFdpdGhOb2RlKGxvZ2ljYWxTdGFydCkgOiBib3gtPnJvb3QoKS5nZXRMb2dp
Y2FsRW5kQm94V2l0aE5vZGUobG9naWNhbFN0YXJ0KSkgewotICAgICAgICAgICAgICAgICAgICAg
ICAgYm94ID0gbG9naWNhbFN0YXJ0OwotICAgICAgICAgICAgICAgICAgICAgICAgcmVuZGVyZXIg
PSAmYm94LT5yZW5kZXJlcigpOwotICAgICAgICAgICAgICAgICAgICAgICAgb2Zmc2V0ID0gcHJp
bWFyeURpcmVjdGlvbiA9PSBMVFIgPyBib3gtPmNhcmV0TWluT2Zmc2V0KCkgOiBib3gtPmNhcmV0
TWF4T2Zmc2V0KCk7CisgICAgICAgICAgICAgICAgaWYgKGJveC0+ZGlyZWN0aW9uKCkgPT0gcHJp
bWFyeURpcmVjdGlvbikgeworICAgICAgICAgICAgICAgICAgICBpZiAoIXByZXZCb3gpIHsKKyAg
ICAgICAgICAgICAgICAgICAgICAgIElubGluZUJveCogbG9naWNhbFN0YXJ0ID0gMDsKKyAgICAg
ICAgICAgICAgICAgICAgICAgIGlmIChwcmltYXJ5RGlyZWN0aW9uID09IExUUiA/IGJveC0+cm9v
dCgpLmdldExvZ2ljYWxTdGFydEJveFdpdGhOb2RlKGxvZ2ljYWxTdGFydCkgOiBib3gtPnJvb3Qo
KS5nZXRMb2dpY2FsRW5kQm94V2l0aE5vZGUobG9naWNhbFN0YXJ0KSkgeworICAgICAgICAgICAg
ICAgICAgICAgICAgICAgIGJveCA9IGxvZ2ljYWxTdGFydDsKKyAgICAgICAgICAgICAgICAgICAg
ICAgICAgICByZW5kZXJlciA9ICZib3gtPnJlbmRlcmVyKCk7CisgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgb2Zmc2V0ID0gcHJpbWFyeURpcmVjdGlvbiA9PSBMVFIgPyBib3gtPmNhcmV0TWlu
T2Zmc2V0KCkgOiBib3gtPmNhcmV0TWF4T2Zmc2V0KCk7CisgICAgICAgICAgICAgICAgICAgICAg
ICB9CisgICAgICAgICAgICAgICAgICAgICAgICBicmVhazsKICAgICAgICAgICAgICAgICAgICAg
fQotICAgICAgICAgICAgICAgICAgICBicmVhazsKLSAgICAgICAgICAgICAgICB9Ci0gICAgICAg
ICAgICAgICAgaWYgKHByZXZCb3gtPmJpZGlMZXZlbCgpID49IGxldmVsKQotICAgICAgICAgICAg
ICAgICAgICBicmVhazsKKyAgICAgICAgICAgICAgICAgICAgaWYgKHByZXZCb3gtPmJpZGlMZXZl
bCgpID49IGxldmVsKQorICAgICAgICAgICAgICAgICAgICAgICAgYnJlYWs7CiAKLSAgICAgICAg
ICAgICAgICBsZXZlbCA9IHByZXZCb3gtPmJpZGlMZXZlbCgpOworICAgICAgICAgICAgICAgICAg
ICBsZXZlbCA9IHByZXZCb3gtPmJpZGlMZXZlbCgpOwogCi0gICAgICAgICAgICAgICAgSW5saW5l
Qm94KiBuZXh0Qm94ID0gYm94OwotICAgICAgICAgICAgICAgIGRvIHsKLSAgICAgICAgICAgICAg
ICAgICAgbmV4dEJveCA9IG5leHRCb3gtPm5leHRMZWFmQ2hpbGQoKTsKLSAgICAgICAgICAgICAg
ICB9IHdoaWxlIChuZXh0Qm94ICYmIG5leHRCb3gtPmJpZGlMZXZlbCgpID4gbGV2ZWwpOworICAg
ICAgICAgICAgICAgICAgICBJbmxpbmVCb3gqIG5leHRCb3ggPSBib3g7CisgICAgICAgICAgICAg
ICAgICAgIGRvIHsKKyAgICAgICAgICAgICAgICAgICAgICAgIG5leHRCb3ggPSBuZXh0Qm94LT5u
ZXh0TGVhZkNoaWxkKCk7CisgICAgICAgICAgICAgICAgICAgIH0gd2hpbGUgKG5leHRCb3ggJiYg
bmV4dEJveC0+YmlkaUxldmVsKCkgPiBsZXZlbCk7CiAKLSAgICAgICAgICAgICAgICBpZiAobmV4
dEJveCAmJiBuZXh0Qm94LT5iaWRpTGV2ZWwoKSA9PSBsZXZlbCkKLSAgICAgICAgICAgICAgICAg
ICAgYnJlYWs7CisgICAgICAgICAgICAgICAgICAgIGlmIChuZXh0Qm94ICYmIG5leHRCb3gtPmJp
ZGlMZXZlbCgpID09IGxldmVsKQorICAgICAgICAgICAgICAgICAgICAgICAgYnJlYWs7CiAKLSAg
ICAgICAgICAgICAgICBib3ggPSBwcmV2Qm94OwotICAgICAgICAgICAgICAgIHJlbmRlcmVyID0g
JmJveC0+cmVuZGVyZXIoKTsKLSAgICAgICAgICAgICAgICBvZmZzZXQgPSBib3gtPmNhcmV0Umln
aHRtb3N0T2Zmc2V0KCk7Ci0gICAgICAgICAgICAgICAgaWYgKGJveC0+ZGlyZWN0aW9uKCkgPT0g
cHJpbWFyeURpcmVjdGlvbikKLSAgICAgICAgICAgICAgICAgICAgYnJlYWs7Ci0gICAgICAgICAg
ICAgICAgY29udGludWU7Ci0gICAgICAgICAgICB9CisgICAgICAgICAgICAgICAgICAgIGJveCA9
IHByZXZCb3g7CisgICAgICAgICAgICAgICAgICAgIHJlbmRlcmVyID0gJmJveC0+cmVuZGVyZXIo
KTsKKyAgICAgICAgICAgICAgICAgICAgb2Zmc2V0ID0gYm94LT5jYXJldFJpZ2h0bW9zdE9mZnNl
dCgpOworICAgICAgICAgICAgICAgICAgICBpZiAoYm94LT5kaXJlY3Rpb24oKSA9PSBwcmltYXJ5
RGlyZWN0aW9uKQorICAgICAgICAgICAgICAgICAgICAgICAgYnJlYWs7CisgICAgICAgICAgICAg
ICAgICAgIGNvbnRpbnVlOworICAgICAgICAgICAgICAgIH0KIAotICAgICAgICAgICAgd2hpbGUg
KHByZXZCb3ggJiYgIXByZXZCb3gtPnJlbmRlcmVyKCkubm9kZSgpKQotICAgICAgICAgICAgICAg
IHByZXZCb3ggPSBwcmV2Qm94LT5wcmV2TGVhZkNoaWxkKCk7CisgICAgICAgICAgICAgICAgd2hp
bGUgKHByZXZCb3ggJiYgIXByZXZCb3gtPnJlbmRlcmVyKCkubm9kZSgpKQorICAgICAgICAgICAg
ICAgICAgICBwcmV2Qm94ID0gcHJldkJveC0+cHJldkxlYWZDaGlsZCgpOwogCi0gICAgICAgICAg
ICBpZiAocHJldkJveCkgewotICAgICAgICAgICAgICAgIGJveCA9IHByZXZCb3g7Ci0gICAgICAg
ICAgICAgICAgcmVuZGVyZXIgPSAmYm94LT5yZW5kZXJlcigpOwotICAgICAgICAgICAgICAgIG9m
ZnNldCA9IGJveC0+Y2FyZXRSaWdodG1vc3RPZmZzZXQoKTsKLSAgICAgICAgICAgICAgICBpZiAo
Ym94LT5iaWRpTGV2ZWwoKSA+IGxldmVsKSB7Ci0gICAgICAgICAgICAgICAgICAgIGRvIHsKLSAg
ICAgICAgICAgICAgICAgICAgICAgIHByZXZCb3ggPSBwcmV2Qm94LT5wcmV2TGVhZkNoaWxkKCk7
Ci0gICAgICAgICAgICAgICAgICAgIH0gd2hpbGUgKHByZXZCb3ggJiYgcHJldkJveC0+YmlkaUxl
dmVsKCkgPiBsZXZlbCk7CisgICAgICAgICAgICAgICAgaWYgKHByZXZCb3gpIHsKKyAgICAgICAg
ICAgICAgICAgICAgYm94ID0gcHJldkJveDsKKyAgICAgICAgICAgICAgICAgICAgcmVuZGVyZXIg
PSAmYm94LT5yZW5kZXJlcigpOworICAgICAgICAgICAgICAgICAgICBvZmZzZXQgPSBib3gtPmNh
cmV0UmlnaHRtb3N0T2Zmc2V0KCk7CisgICAgICAgICAgICAgICAgICAgIGlmIChib3gtPmJpZGlM
ZXZlbCgpID4gbGV2ZWwpIHsKKyAgICAgICAgICAgICAgICAgICAgICAgIGRvIHsKKyAgICAgICAg
ICAgICAgICAgICAgICAgICAgICBwcmV2Qm94ID0gcHJldkJveC0+cHJldkxlYWZDaGlsZCgpOwor
ICAgICAgICAgICAgICAgICAgICAgICAgfSB3aGlsZSAocHJldkJveCAmJiBwcmV2Qm94LT5iaWRp
TGV2ZWwoKSA+IGxldmVsKTsKIAotICAgICAgICAgICAgICAgICAgICBpZiAoIXByZXZCb3ggfHwg
cHJldkJveC0+YmlkaUxldmVsKCkgPCBsZXZlbCkKLSAgICAgICAgICAgICAgICAgICAgICAgIGNv
bnRpbnVlOwotICAgICAgICAgICAgICAgIH0KLSAgICAgICAgICAgIH0gZWxzZSB7Ci0gICAgICAg
ICAgICAgICAgLy8gVHJhaWxpbmcgZWRnZSBvZiBhIHNlY29uZGFyeSBydW4uIFNldCB0byB0aGUg
bGVhZGluZyBlZGdlIG9mIHRoZSBlbnRpcmUgcnVuLgotICAgICAgICAgICAgICAgIHdoaWxlICh0
cnVlKSB7Ci0gICAgICAgICAgICAgICAgICAgIHdoaWxlIChJbmxpbmVCb3gqIG5leHRCb3ggPSBi
b3gtPm5leHRMZWFmQ2hpbGQoKSkgewotICAgICAgICAgICAgICAgICAgICAgICAgaWYgKG5leHRC
b3gtPmJpZGlMZXZlbCgpIDwgbGV2ZWwpCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgYnJl
YWs7Ci0gICAgICAgICAgICAgICAgICAgICAgICBib3ggPSBuZXh0Qm94OworICAgICAgICAgICAg
ICAgICAgICAgICAgaWYgKCFwcmV2Qm94IHx8IHByZXZCb3gtPmJpZGlMZXZlbCgpIDwgbGV2ZWwp
CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgY29udGludWU7CiAgICAgICAgICAgICAgICAg
ICAgIH0KLSAgICAgICAgICAgICAgICAgICAgaWYgKGJveC0+YmlkaUxldmVsKCkgPT0gbGV2ZWwp
Ci0gICAgICAgICAgICAgICAgICAgICAgICBicmVhazsKLSAgICAgICAgICAgICAgICAgICAgbGV2
ZWwgPSBib3gtPmJpZGlMZXZlbCgpOwotICAgICAgICAgICAgICAgICAgICB3aGlsZSAoSW5saW5l
Qm94KiBwcmV2Qm94ID0gYm94LT5wcmV2TGVhZkNoaWxkKCkpIHsKLSAgICAgICAgICAgICAgICAg
ICAgICAgIGlmIChwcmV2Qm94LT5iaWRpTGV2ZWwoKSA8IGxldmVsKQorICAgICAgICAgICAgICAg
IH0gZWxzZSB7CisgICAgICAgICAgICAgICAgICAgIC8vIFRyYWlsaW5nIGVkZ2Ugb2YgYSBzZWNv
bmRhcnkgcnVuLiBTZXQgdG8gdGhlIGxlYWRpbmcgZWRnZSBvZiB0aGUgZW50aXJlIHJ1bi4KKyAg
ICAgICAgICAgICAgICAgICAgd2hpbGUgKHRydWUpIHsKKyAgICAgICAgICAgICAgICAgICAgICAg
IHdoaWxlIChJbmxpbmVCb3gqIG5leHRCb3ggPSBib3gtPm5leHRMZWFmQ2hpbGQoKSkgeworICAg
ICAgICAgICAgICAgICAgICAgICAgICAgIGlmIChuZXh0Qm94LT5iaWRpTGV2ZWwoKSA8IGxldmVs
KQorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBicmVhazsKKyAgICAgICAgICAgICAg
ICAgICAgICAgICAgICBib3ggPSBuZXh0Qm94OworICAgICAgICAgICAgICAgICAgICAgICAgfQor
ICAgICAgICAgICAgICAgICAgICAgICAgaWYgKGJveC0+YmlkaUxldmVsKCkgPT0gbGV2ZWwpCiAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgYnJlYWs7Ci0gICAgICAgICAgICAgICAgICAgICAg
ICBib3ggPSBwcmV2Qm94OworICAgICAgICAgICAgICAgICAgICAgICAgbGV2ZWwgPSBib3gtPmJp
ZGlMZXZlbCgpOworICAgICAgICAgICAgICAgICAgICAgICAgd2hpbGUgKElubGluZUJveCogcHJl
dkJveCA9IGJveC0+cHJldkxlYWZDaGlsZCgpKSB7CisgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgaWYgKHByZXZCb3gtPmJpZGlMZXZlbCgpIDwgbGV2ZWwpCisgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgIGJyZWFrOworICAgICAgICAgICAgICAgICAgICAgICAgICAgIGJveCA9IHBy
ZXZCb3g7CisgICAgICAgICAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICAgICAgICAgICAg
ICBpZiAoYm94LT5iaWRpTGV2ZWwoKSA9PSBsZXZlbCkKKyAgICAgICAgICAgICAgICAgICAgICAg
ICAgICBicmVhazsKKyAgICAgICAgICAgICAgICAgICAgICAgIGxldmVsID0gYm94LT5iaWRpTGV2
ZWwoKTsKICAgICAgICAgICAgICAgICAgICAgfQotICAgICAgICAgICAgICAgICAgICBpZiAoYm94
LT5iaWRpTGV2ZWwoKSA9PSBsZXZlbCkKLSAgICAgICAgICAgICAgICAgICAgICAgIGJyZWFrOwot
ICAgICAgICAgICAgICAgICAgICBsZXZlbCA9IGJveC0+YmlkaUxldmVsKCk7CisgICAgICAgICAg
ICAgICAgICAgIHJlbmRlcmVyID0gJmJveC0+cmVuZGVyZXIoKTsKKyAgICAgICAgICAgICAgICAg
ICAgb2Zmc2V0ID0gcHJpbWFyeURpcmVjdGlvbiA9PSBMVFIgPyBib3gtPmNhcmV0TWluT2Zmc2V0
KCkgOiBib3gtPmNhcmV0TWF4T2Zmc2V0KCk7CiAgICAgICAgICAgICAgICAgfQotICAgICAgICAg
ICAgICAgIHJlbmRlcmVyID0gJmJveC0+cmVuZGVyZXIoKTsKLSAgICAgICAgICAgICAgICBvZmZz
ZXQgPSBwcmltYXJ5RGlyZWN0aW9uID09IExUUiA/IGJveC0+Y2FyZXRNaW5PZmZzZXQoKSA6IGJv
eC0+Y2FyZXRNYXhPZmZzZXQoKTsKKyAgICAgICAgICAgICAgICBicmVhazsKICAgICAgICAgICAg
IH0KLSAgICAgICAgICAgIGJyZWFrOwogICAgICAgICB9CisgICAgICAgIAorICAgICAgICBOb2Rl
ICpub2RlID0gcmVuZGVyZXItPm5vZGUoKTsKKyAgICAgICAgaWYgKG5vZGUtPmlzUHNldWRvRWxl
bWVudCgpKSB7CisgICAgICAgICAgICBQc2V1ZG9FbGVtZW50ICpwc2V1ZG9FbHQgPSBkb3duY2Fz
dDxQc2V1ZG9FbGVtZW50Pihub2RlKTsKKyAgICAgICAgICAgIG5vZGUgPSBwc2V1ZG9FbHQtPmhv
c3RFbGVtZW50KCk7CisgICAgICAgICAgICAKKyAgICAgICAgICAgIGlmIChvZmZzZXQgPT0gLTEg
JiYgcmVuZGVyZXJJZkxhc3RSZW5kZXJlcldhc1BzZXVkb0VsZW1lbnQpIHsKKyAgICAgICAgICAg
ICAgICBvZmZzZXQgPSBub2RlLT5jb21wdXRlTm9kZUluZGV4KCk7CisgICAgICAgICAgICAgICAg
bm9kZSA9IG5vZGUtPnBhcmVudEVsZW1lbnQoKTsKKyAgICAgICAgICAgIH0KKyAgICAgICAgfQog
Ci0gICAgICAgIHAgPSBjcmVhdGVMZWdhY3lFZGl0aW5nUG9zaXRpb24ocmVuZGVyZXItPm5vZGUo
KSwgb2Zmc2V0KTsKKyAgICAgICAgcCA9IGNyZWF0ZUxlZ2FjeUVkaXRpbmdQb3NpdGlvbihub2Rl
LCBvZmZzZXQpOwogCiAgICAgICAgIGlmICgocC5pc0NhbmRpZGF0ZSgpICYmIHAuZG93bnN0cmVh
bSgpICE9IGRvd25zdHJlYW1TdGFydCkgfHwgcC5hdFN0YXJ0T2ZUcmVlKCkgfHwgcC5hdEVuZE9m
VHJlZSgpKQogICAgICAgICAgICAgcmV0dXJuIHA7CisgICAgICAgIAorICAgICAgICAvLyBQcmV2
ZW50IGFuIGluZmluaXRlIGxvb3Agd2hlbiBzdGVwcGluZyBvZmYgdGhlIGxlZnQgZWRnZSBvZiBi
bG9jayBlbGVtZW50cyB0aGF0IGNvbnRhaW4KKyAgICAgICAgLy8gb25seSB0ZXh0IChiZWNhdXNl
IG9idGFpbmluZyB0aGUgaW5saW5lIGJveCBmb3Igc3VjaCBhIGJsb2NrIHdvdWxkIHJldHVybiB0
aGUgZmlyc3QgdGV4dAorICAgICAgICAvLyBib3gsIHdoaWNoIGlzIHdoZXJlIHdlIGp1c3QgY2Ft
ZSBmcm9tKS4KKyAgICAgICAgaWYgKCFwLmlzQ2FuZGlkYXRlKCkgJiYgb2Zmc2V0ID09IGJveC0+
Y2FyZXRMZWZ0bW9zdE9mZnNldCgpKSB7CisgICAgICAgICAgICBQb3NpdGlvbiBiZWZvcmUgPSBj
cmVhdGVMZWdhY3lFZGl0aW5nUG9zaXRpb24obm9kZS0+cGFyZW50RWxlbWVudCgpLCBub2RlLT5j
b21wdXRlTm9kZUluZGV4KCkpOworICAgICAgICAgICAgaWYgKGJlZm9yZS5pc0NhbmRpZGF0ZSgp
KSByZXR1cm4gYmVmb3JlOworICAgICAgICB9CiAKICAgICAgICAgQVNTRVJUKHAgIT0gbV9kZWVw
UG9zaXRpb24pOwogICAgIH0KQEAgLTI3Nyw2ICszNjcsOCBAQAogCiAgICAgUG9zaXRpb24gZG93
bnN0cmVhbVN0YXJ0ID0gcC5kb3duc3RyZWFtKCk7CiAgICAgVGV4dERpcmVjdGlvbiBwcmltYXJ5
RGlyZWN0aW9uID0gcC5wcmltYXJ5RGlyZWN0aW9uKCk7CisgICAgCisgICAgUmVuZGVyT2JqZWN0
ICpyZW5kZXJlcklmTGFzdFJlbmRlcmVyV2FzUHNldWRvRWxlbWVudCA9IE5VTEw7CiAKICAgICB3
aGlsZSAodHJ1ZSkgewogICAgICAgICBJbmxpbmVCb3gqIGJveDsKQEAgLTI4NywyNSArMzc5LDcw
IEBACiAKICAgICAgICAgUmVuZGVyT2JqZWN0KiByZW5kZXJlciA9ICZib3gtPnJlbmRlcmVyKCk7
CiAKKyAgICAgICAgYm9vbCBza2lwQ3VycmVudCA9IHRydWU7CisgICAgICAgIE5vZGUgKmxhc3RO
b2RlID0gTlVMTDsKKwogICAgICAgICB3aGlsZSAodHJ1ZSkgeworICAgICAgICAgICAgYm9vbCBl
bGVtZW50Q2hhbmdlZCA9IGZhbHNlOworICAgICAgICAgICAgaWYgKHJlbmRlcmVyLT5ub2RlKCkg
JiYgIXJlbmRlcmVyLT5ub2RlKCktPmlzRG9jdW1lbnROb2RlKCkpIHsKKyAgICAgICAgICAgICAg
ICBpZiAobGFzdE5vZGUgJiYgbGFzdE5vZGUgIT0gcmVuZGVyZXItPm5vZGUoKSkgeworICAgICAg
ICAgICAgICAgICAgICBza2lwQ3VycmVudCA9IGZhbHNlOworICAgICAgICAgICAgICAgICAgICBl
bGVtZW50Q2hhbmdlZCA9IHRydWU7CisgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgICAg
IGxhc3ROb2RlID0gcmVuZGVyZXItPm5vZGUoKTsKKyAgICAgICAgICAgIH0KKwogICAgICAgICAg
ICAgaWYgKChyZW5kZXJlci0+aXNSZXBsYWNlZCgpIHx8IHJlbmRlcmVyLT5pc0JSKCkpICYmIG9m
ZnNldCA9PSBib3gtPmNhcmV0TGVmdG1vc3RPZmZzZXQoKSkKICAgICAgICAgICAgICAgICByZXR1
cm4gYm94LT5pc0xlZnRUb1JpZ2h0RGlyZWN0aW9uKCkgPyBuZXh0VmlzdWFsbHlEaXN0aW5jdENh
bmRpZGF0ZShtX2RlZXBQb3NpdGlvbikgOiBwcmV2aW91c1Zpc3VhbGx5RGlzdGluY3RDYW5kaWRh
dGUobV9kZWVwUG9zaXRpb24pOwogCiAgICAgICAgICAgICBpZiAoIXJlbmRlcmVyLT5ub2RlKCkp
IHsKKyAgICAgICAgICAgICAgICBpZiAocmVuZGVyZXItPnBhcmVudCgpLT5pc0JlZm9yZUNvbnRl
bnQoKSkgeworICAgICAgICAgICAgICAgICAgICAvKiBUaGlzIG1hZ2ljIGxldHMgdXMgd2FsayBp
bnRvIGVtcHR5IGVsZW1lbnRzIGlmIHRoZXkgaGF2ZQorICAgICAgICAgICAgICAgICAgICAgcHNl
dWRvLWVsZW1lbnRzIHRvIG1ha2UgdGhlbSB2aXN1YWxseSBkaXN0aW5jdC4gIFdpdGhvdXQKKyAg
ICAgICAgICAgICAgICAgICAgIGl0LCB5b3UnZCBvbmx5IHJlYWNoIHRob3NlIGVsZW1lbnRzIGlm
IHRoZSBlbGVtZW50IGhhZAorICAgICAgICAgICAgICAgICAgICAgYSBiYWNrZ3JvdW5kIG9yIG90
aGVyIGNvbnRlbnQgdGhhdCByZXF1aXJlZCByZW5kZXJpbmcuCisgICAgICAgICAgICAgICAgICAg
ICAqLworICAgICAgICAgICAgICAgICAgICBSZW5kZXJPYmplY3QgKnBhcmVudFJlbmRlcmVyID0g
cmVuZGVyZXItPnBhcmVudCgpOworICAgICAgICAgICAgICAgICAgICBOb2RlICpwc2V1ZG9FbGVt
ZW50Tm9kZSA9IHBhcmVudFJlbmRlcmVyLT5ub2RlKCk7CisgICAgICAgICAgICAgICAgICAgIAor
ICAgICAgICAgICAgICAgICAgICBpZiAocHNldWRvRWxlbWVudE5vZGUpIHsKKyAgICAgICAgICAg
ICAgICAgICAgICAgIEFTU0VSVChwc2V1ZG9FbGVtZW50Tm9kZS0+aXNQc2V1ZG9FbGVtZW50KCkp
OworICAgICAgICAgICAgICAgICAgICAgICAgUHNldWRvRWxlbWVudCAqcGUgPSBkb3duY2FzdDxQ
c2V1ZG9FbGVtZW50Pihwc2V1ZG9FbGVtZW50Tm9kZSk7CisgICAgICAgICAgICAgICAgICAgICAg
ICBFbGVtZW50ICplbHQgPSBwZS0+aG9zdEVsZW1lbnQoKTsKKworICAgICAgICAgICAgICAgICAg
ICAgICAgcmVuZGVyZXJJZkxhc3RSZW5kZXJlcldhc1BzZXVkb0VsZW1lbnQgPSBwYXJlbnRSZW5k
ZXJlcjsKKyAgICAgICAgICAgICAgICAgICAgICAgIAorICAgICAgICAgICAgICAgICAgICAgICAg
aWYgKCFlbHQtPmZpcnN0Q2hpbGQoKSkgeworICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJl
bmRlcmVyID0gcmVuZGVyZXItPnBhcmVudCgpOworICAgICAgICAgICAgICAgICAgICAgICAgICAg
IHNraXBDdXJyZW50ID0gZmFsc2U7CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgCisgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgY29udGludWU7CisgICAgICAgICAgICAgICAgICAgICAg
ICB9CisgICAgICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgICAgICB9IGVsc2UgeworICAg
ICAgICAgICAgICAgICAgICByZW5kZXJlcklmTGFzdFJlbmRlcmVyV2FzUHNldWRvRWxlbWVudCA9
IE5VTEw7CisgICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgICAgIGJveCA9IGJveC0+bmV4
dExlYWZDaGlsZCgpOwotICAgICAgICAgICAgICAgIGlmICghYm94KQorICAgICAgICAgICAgICAg
IGlmICghYm94KSB7CiAgICAgICAgICAgICAgICAgICAgIHJldHVybiBwcmltYXJ5RGlyZWN0aW9u
ID09IExUUiA/IG5leHRWaXN1YWxseURpc3RpbmN0Q2FuZGlkYXRlKG1fZGVlcFBvc2l0aW9uKSA6
IHByZXZpb3VzVmlzdWFsbHlEaXN0aW5jdENhbmRpZGF0ZShtX2RlZXBQb3NpdGlvbik7CisgICAg
ICAgICAgICAgICAgfQogICAgICAgICAgICAgICAgIHJlbmRlcmVyID0gJmJveC0+cmVuZGVyZXIo
KTsKICAgICAgICAgICAgICAgICBvZmZzZXQgPSBib3gtPmNhcmV0TGVmdG1vc3RPZmZzZXQoKTsK
KyAgICAgICAgICAgICAgICAKKyAgICAgICAgICAgICAgICBza2lwQ3VycmVudCA9IGZhbHNlOwor
CiAgICAgICAgICAgICAgICAgY29udGludWU7CiAgICAgICAgICAgICB9CisgICAgICAgICAgICAK
KyAgICAgICAgICAgIGlmIChza2lwQ3VycmVudCkgeworICAgICAgICAgICAgICAgIG9mZnNldCA9
IGJveC0+aXNMZWZ0VG9SaWdodERpcmVjdGlvbigpID8gcmVuZGVyZXItPm5leHRPZmZzZXQob2Zm
c2V0KSA6IHJlbmRlcmVyLT5wcmV2aW91c09mZnNldChvZmZzZXQpOworICAgICAgICAgICAgfQor
ICAgICAgICAgICAgc2tpcEN1cnJlbnQgPSB0cnVlOwogCi0gICAgICAgICAgICBvZmZzZXQgPSBi
b3gtPmlzTGVmdFRvUmlnaHREaXJlY3Rpb24oKSA/IHJlbmRlcmVyLT5uZXh0T2Zmc2V0KG9mZnNl
dCkgOiByZW5kZXJlci0+cHJldmlvdXNPZmZzZXQob2Zmc2V0KTsKLQogICAgICAgICAgICAgaW50
IGNhcmV0TWluT2Zmc2V0ID0gYm94LT5jYXJldE1pbk9mZnNldCgpOwogICAgICAgICAgICAgaW50
IGNhcmV0TWF4T2Zmc2V0ID0gYm94LT5jYXJldE1heE9mZnNldCgpOwogCi0gICAgICAgICAgICBp
ZiAob2Zmc2V0ID4gY2FyZXRNaW5PZmZzZXQgJiYgb2Zmc2V0IDwgY2FyZXRNYXhPZmZzZXQpCisg
ICAgICAgICAgICBpZiAoKG9mZnNldCA+IGNhcmV0TWluT2Zmc2V0IHx8ICAob2Zmc2V0ID09IGNh
cmV0TWluT2Zmc2V0ICYmIGVsZW1lbnRDaGFuZ2VkKSkgJiYgb2Zmc2V0IDwgY2FyZXRNYXhPZmZz
ZXQpCiAgICAgICAgICAgICAgICAgYnJlYWs7CiAKICAgICAgICAgICAgIGlmIChib3gtPmlzTGVm
dFRvUmlnaHREaXJlY3Rpb24oKSA/IG9mZnNldCA+IGNhcmV0TWF4T2Zmc2V0IDogb2Zmc2V0IDwg
Y2FyZXRNaW5PZmZzZXQpIHsKQEAgLTMyOCw5MyArNDY1LDEyMCBAQAogICAgICAgICAgICAgICAg
IGJveCA9IG5leHRCb3g7CiAgICAgICAgICAgICAgICAgcmVuZGVyZXIgPSAmYm94LT5yZW5kZXJl
cigpOwogICAgICAgICAgICAgICAgIG9mZnNldCA9IG5leHRCb3gtPmNhcmV0TGVmdG1vc3RPZmZz
ZXQoKTsKKyAgICAgICAgICAgICAgICAKKyAgICAgICAgICAgICAgICAvLyBza2lwQ3VycmVudCBz
aG91bGQgYmUgdHJ1ZSBpZiBhbmQgb25seSBpZiB3ZSBkb24ndCBlbmNvdW50ZXIgYW55CisgICAg
ICAgICAgICAgICAgLy8gcHNldWRvZWxlbWVudHMgb3IgZWxlbWVudCBib3VuZGFyaWVzLgorICAg
ICAgICAgICAgICAgIHNraXBDdXJyZW50ID0gdHJ1ZTsKKwogICAgICAgICAgICAgICAgIGNvbnRp
bnVlOwogICAgICAgICAgICAgfQogCi0gICAgICAgICAgICBBU1NFUlQob2Zmc2V0ID09IGJveC0+
Y2FyZXRSaWdodG1vc3RPZmZzZXQoKSk7CisgICAgICAgICAgICAvLyBDaGFuZ2VkIGFzc2VydCB0
byBpZiwgYmVjYXVzZSBpdCBjb3VsZCBhbHNvIGJlIHRoZQorICAgICAgICAgICAgLy8gbGVmdCBv
ZmZzZXQuCisgICAgICAgICAgICBpZiAob2Zmc2V0ID09IGJveC0+Y2FyZXRSaWdodG1vc3RPZmZz
ZXQoKSkgewogCi0gICAgICAgICAgICB1bnNpZ25lZCBjaGFyIGxldmVsID0gYm94LT5iaWRpTGV2
ZWwoKTsKLSAgICAgICAgICAgIElubGluZUJveCogbmV4dEJveCA9IGJveC0+bmV4dExlYWZDaGls
ZCgpOworICAgICAgICAgICAgICAgIHVuc2lnbmVkIGNoYXIgbGV2ZWwgPSBib3gtPmJpZGlMZXZl
bCgpOworICAgICAgICAgICAgICAgIElubGluZUJveCogbmV4dEJveCA9IGJveC0+bmV4dExlYWZD
aGlsZCgpOwogCi0gICAgICAgICAgICBpZiAoYm94LT5kaXJlY3Rpb24oKSA9PSBwcmltYXJ5RGly
ZWN0aW9uKSB7Ci0gICAgICAgICAgICAgICAgaWYgKCFuZXh0Qm94KSB7Ci0gICAgICAgICAgICAg
ICAgICAgIElubGluZUJveCogbG9naWNhbEVuZCA9IDA7Ci0gICAgICAgICAgICAgICAgICAgIGlm
IChwcmltYXJ5RGlyZWN0aW9uID09IExUUiA/IGJveC0+cm9vdCgpLmdldExvZ2ljYWxFbmRCb3hX
aXRoTm9kZShsb2dpY2FsRW5kKSA6IGJveC0+cm9vdCgpLmdldExvZ2ljYWxTdGFydEJveFdpdGhO
b2RlKGxvZ2ljYWxFbmQpKSB7Ci0gICAgICAgICAgICAgICAgICAgICAgICBib3ggPSBsb2dpY2Fs
RW5kOwotICAgICAgICAgICAgICAgICAgICAgICAgcmVuZGVyZXIgPSAmYm94LT5yZW5kZXJlcigp
OwotICAgICAgICAgICAgICAgICAgICAgICAgb2Zmc2V0ID0gcHJpbWFyeURpcmVjdGlvbiA9PSBM
VFIgPyBib3gtPmNhcmV0TWF4T2Zmc2V0KCkgOiBib3gtPmNhcmV0TWluT2Zmc2V0KCk7CisgICAg
ICAgICAgICAgICAgaWYgKGJveC0+ZGlyZWN0aW9uKCkgPT0gcHJpbWFyeURpcmVjdGlvbikgewor
ICAgICAgICAgICAgICAgICAgICBpZiAoIW5leHRCb3gpIHsKKyAgICAgICAgICAgICAgICAgICAg
ICAgIElubGluZUJveCogbG9naWNhbEVuZCA9IDA7CisgICAgICAgICAgICAgICAgICAgICAgICBp
ZiAocHJpbWFyeURpcmVjdGlvbiA9PSBMVFIgPyBib3gtPnJvb3QoKS5nZXRMb2dpY2FsRW5kQm94
V2l0aE5vZGUobG9naWNhbEVuZCkgOiBib3gtPnJvb3QoKS5nZXRMb2dpY2FsU3RhcnRCb3hXaXRo
Tm9kZShsb2dpY2FsRW5kKSkgeworICAgICAgICAgICAgICAgICAgICAgICAgICAgIGJveCA9IGxv
Z2ljYWxFbmQ7CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgcmVuZGVyZXIgPSAmYm94LT5y
ZW5kZXJlcigpOworICAgICAgICAgICAgICAgICAgICAgICAgICAgIG9mZnNldCA9IHByaW1hcnlE
aXJlY3Rpb24gPT0gTFRSID8gYm94LT5jYXJldE1heE9mZnNldCgpIDogYm94LT5jYXJldE1pbk9m
ZnNldCgpOworICAgICAgICAgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgICAgICAgICAg
ICAgYnJlYWs7CiAgICAgICAgICAgICAgICAgICAgIH0KLSAgICAgICAgICAgICAgICAgICAgYnJl
YWs7Ci0gICAgICAgICAgICAgICAgfQogCi0gICAgICAgICAgICAgICAgaWYgKG5leHRCb3gtPmJp
ZGlMZXZlbCgpID49IGxldmVsKQotICAgICAgICAgICAgICAgICAgICBicmVhazsKKyAgICAgICAg
ICAgICAgICAgICAgaWYgKG5leHRCb3gtPmJpZGlMZXZlbCgpID49IGxldmVsKQorICAgICAgICAg
ICAgICAgICAgICAgICAgYnJlYWs7CiAKLSAgICAgICAgICAgICAgICBsZXZlbCA9IG5leHRCb3gt
PmJpZGlMZXZlbCgpOworICAgICAgICAgICAgICAgICAgICBsZXZlbCA9IG5leHRCb3gtPmJpZGlM
ZXZlbCgpOwogCi0gICAgICAgICAgICAgICAgSW5saW5lQm94KiBwcmV2Qm94ID0gYm94OwotICAg
ICAgICAgICAgICAgIGRvIHsKLSAgICAgICAgICAgICAgICAgICAgcHJldkJveCA9IHByZXZCb3gt
PnByZXZMZWFmQ2hpbGQoKTsKLSAgICAgICAgICAgICAgICB9IHdoaWxlIChwcmV2Qm94ICYmIHBy
ZXZCb3gtPmJpZGlMZXZlbCgpID4gbGV2ZWwpOworICAgICAgICAgICAgICAgICAgICBJbmxpbmVC
b3gqIHByZXZCb3ggPSBib3g7CisgICAgICAgICAgICAgICAgICAgIGRvIHsKKyAgICAgICAgICAg
ICAgICAgICAgICAgIHByZXZCb3ggPSBwcmV2Qm94LT5wcmV2TGVhZkNoaWxkKCk7CisgICAgICAg
ICAgICAgICAgICAgIH0gd2hpbGUgKHByZXZCb3ggJiYgcHJldkJveC0+YmlkaUxldmVsKCkgPiBs
ZXZlbCk7CiAKLSAgICAgICAgICAgICAgICBpZiAocHJldkJveCAmJiBwcmV2Qm94LT5iaWRpTGV2
ZWwoKSA9PSBsZXZlbCkgICAvLyBGb3IgZXhhbXBsZSwgYWJjIEZFRCAxMjMgXiBDQkEKLSAgICAg
ICAgICAgICAgICAgICAgYnJlYWs7CisgICAgICAgICAgICAgICAgICAgIGlmIChwcmV2Qm94ICYm
IHByZXZCb3gtPmJpZGlMZXZlbCgpID09IGxldmVsKSAgIC8vIEZvciBleGFtcGxlLCBhYmMgRkVE
IDEyMyBeIENCQQorICAgICAgICAgICAgICAgICAgICAgICAgYnJlYWs7CiAKLSAgICAgICAgICAg
ICAgICAvLyBGb3IgZXhhbXBsZSwgYWJjIDEyMyBeIENCQSBvciAxMjMgXiBDQkEgYWJjCi0gICAg
ICAgICAgICAgICAgYm94ID0gbmV4dEJveDsKLSAgICAgICAgICAgICAgICByZW5kZXJlciA9ICZi
b3gtPnJlbmRlcmVyKCk7Ci0gICAgICAgICAgICAgICAgb2Zmc2V0ID0gYm94LT5jYXJldExlZnRt
b3N0T2Zmc2V0KCk7Ci0gICAgICAgICAgICAgICAgaWYgKGJveC0+ZGlyZWN0aW9uKCkgPT0gcHJp
bWFyeURpcmVjdGlvbikKLSAgICAgICAgICAgICAgICAgICAgYnJlYWs7Ci0gICAgICAgICAgICAg
ICAgY29udGludWU7Ci0gICAgICAgICAgICB9CisgICAgICAgICAgICAgICAgICAgIC8vIEZvciBl
eGFtcGxlLCBhYmMgMTIzIF4gQ0JBIG9yIDEyMyBeIENCQSBhYmMKKyAgICAgICAgICAgICAgICAg
ICAgYm94ID0gbmV4dEJveDsKKyAgICAgICAgICAgICAgICAgICAgcmVuZGVyZXIgPSAmYm94LT5y
ZW5kZXJlcigpOworICAgICAgICAgICAgICAgICAgICBvZmZzZXQgPSBib3gtPmNhcmV0TGVmdG1v
c3RPZmZzZXQoKTsKKyAgICAgICAgICAgICAgICAgICAgaWYgKGJveC0+ZGlyZWN0aW9uKCkgPT0g
cHJpbWFyeURpcmVjdGlvbikKKyAgICAgICAgICAgICAgICAgICAgICAgIGJyZWFrOworICAgICAg
ICAgICAgICAgICAgICBjb250aW51ZTsKKyAgICAgICAgICAgICAgICB9CiAKLSAgICAgICAgICAg
IHdoaWxlIChuZXh0Qm94ICYmICFuZXh0Qm94LT5yZW5kZXJlcigpLm5vZGUoKSkKLSAgICAgICAg
ICAgICAgICBuZXh0Qm94ID0gbmV4dEJveC0+bmV4dExlYWZDaGlsZCgpOworICAgICAgICAgICAg
ICAgIHdoaWxlIChuZXh0Qm94ICYmICFuZXh0Qm94LT5yZW5kZXJlcigpLm5vZGUoKSkKKyAgICAg
ICAgICAgICAgICAgICAgbmV4dEJveCA9IG5leHRCb3gtPm5leHRMZWFmQ2hpbGQoKTsKIAotICAg
ICAgICAgICAgaWYgKG5leHRCb3gpIHsKLSAgICAgICAgICAgICAgICBib3ggPSBuZXh0Qm94Owot
ICAgICAgICAgICAgICAgIHJlbmRlcmVyID0gJmJveC0+cmVuZGVyZXIoKTsKLSAgICAgICAgICAg
ICAgICBvZmZzZXQgPSBib3gtPmNhcmV0TGVmdG1vc3RPZmZzZXQoKTsKKyAgICAgICAgICAgICAg
ICBpZiAobmV4dEJveCkgeworICAgICAgICAgICAgICAgICAgICBib3ggPSBuZXh0Qm94OworICAg
ICAgICAgICAgICAgICAgICByZW5kZXJlciA9ICZib3gtPnJlbmRlcmVyKCk7CisgICAgICAgICAg
ICAgICAgICAgIG9mZnNldCA9IGJveC0+Y2FyZXRMZWZ0bW9zdE9mZnNldCgpOwogCi0gICAgICAg
ICAgICAgICAgaWYgKGJveC0+YmlkaUxldmVsKCkgPiBsZXZlbCkgewotICAgICAgICAgICAgICAg
ICAgICBkbyB7Ci0gICAgICAgICAgICAgICAgICAgICAgICBuZXh0Qm94ID0gbmV4dEJveC0+bmV4
dExlYWZDaGlsZCgpOwotICAgICAgICAgICAgICAgICAgICB9IHdoaWxlIChuZXh0Qm94ICYmIG5l
eHRCb3gtPmJpZGlMZXZlbCgpID4gbGV2ZWwpOworICAgICAgICAgICAgICAgICAgICBpZiAoYm94
LT5iaWRpTGV2ZWwoKSA+IGxldmVsKSB7CisgICAgICAgICAgICAgICAgICAgICAgICBkbyB7Cisg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgbmV4dEJveCA9IG5leHRCb3gtPm5leHRMZWFmQ2hp
bGQoKTsKKyAgICAgICAgICAgICAgICAgICAgICAgIH0gd2hpbGUgKG5leHRCb3ggJiYgbmV4dEJv
eC0+YmlkaUxldmVsKCkgPiBsZXZlbCk7CiAKLSAgICAgICAgICAgICAgICAgICAgaWYgKCFuZXh0
Qm94IHx8IG5leHRCb3gtPmJpZGlMZXZlbCgpIDwgbGV2ZWwpCi0gICAgICAgICAgICAgICAgICAg
ICAgICBjb250aW51ZTsKLSAgICAgICAgICAgICAgICB9Ci0gICAgICAgICAgICB9IGVsc2Ugewot
ICAgICAgICAgICAgICAgIC8vIFRyYWlsaW5nIGVkZ2Ugb2YgYSBzZWNvbmRhcnkgcnVuLiBTZXQg
dG8gdGhlIGxlYWRpbmcgZWRnZSBvZiB0aGUgZW50aXJlIHJ1bi4KLSAgICAgICAgICAgICAgICB3
aGlsZSAodHJ1ZSkgewotICAgICAgICAgICAgICAgICAgICB3aGlsZSAoSW5saW5lQm94KiBwcmV2
Qm94ID0gYm94LT5wcmV2TGVhZkNoaWxkKCkpIHsKLSAgICAgICAgICAgICAgICAgICAgICAgIGlm
IChwcmV2Qm94LT5iaWRpTGV2ZWwoKSA8IGxldmVsKQotICAgICAgICAgICAgICAgICAgICAgICAg
ICAgIGJyZWFrOwotICAgICAgICAgICAgICAgICAgICAgICAgYm94ID0gcHJldkJveDsKKyAgICAg
ICAgICAgICAgICAgICAgICAgIGlmICghbmV4dEJveCB8fCBuZXh0Qm94LT5iaWRpTGV2ZWwoKSA8
IGxldmVsKQorICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbnRpbnVlOwogICAgICAgICAg
ICAgICAgICAgICB9Ci0gICAgICAgICAgICAgICAgICAgIGlmIChib3gtPmJpZGlMZXZlbCgpID09
IGxldmVsKQotICAgICAgICAgICAgICAgICAgICAgICAgYnJlYWs7Ci0gICAgICAgICAgICAgICAg
ICAgIGxldmVsID0gYm94LT5iaWRpTGV2ZWwoKTsKLSAgICAgICAgICAgICAgICAgICAgd2hpbGUg
KElubGluZUJveCogbmV4dEJveCA9IGJveC0+bmV4dExlYWZDaGlsZCgpKSB7Ci0gICAgICAgICAg
ICAgICAgICAgICAgICBpZiAobmV4dEJveC0+YmlkaUxldmVsKCkgPCBsZXZlbCkKKyAgICAgICAg
ICAgICAgICB9IGVsc2UgeworICAgICAgICAgICAgICAgICAgICAvLyBUcmFpbGluZyBlZGdlIG9m
IGEgc2Vjb25kYXJ5IHJ1bi4gU2V0IHRvIHRoZSBsZWFkaW5nIGVkZ2Ugb2YgdGhlIGVudGlyZSBy
dW4uCisgICAgICAgICAgICAgICAgICAgIHdoaWxlICh0cnVlKSB7CisgICAgICAgICAgICAgICAg
ICAgICAgICB3aGlsZSAoSW5saW5lQm94KiBwcmV2Qm94ID0gYm94LT5wcmV2TGVhZkNoaWxkKCkp
IHsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZiAocHJldkJveC0+YmlkaUxldmVsKCkg
PCBsZXZlbCkKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgYnJlYWs7CisgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgYm94ID0gcHJldkJveDsKKyAgICAgICAgICAgICAgICAgICAg
ICAgIH0KKyAgICAgICAgICAgICAgICAgICAgICAgIGlmIChib3gtPmJpZGlMZXZlbCgpID09IGxl
dmVsKQogICAgICAgICAgICAgICAgICAgICAgICAgICAgIGJyZWFrOwotICAgICAgICAgICAgICAg
ICAgICAgICAgYm94ID0gbmV4dEJveDsKKyAgICAgICAgICAgICAgICAgICAgICAgIGxldmVsID0g
Ym94LT5iaWRpTGV2ZWwoKTsKKyAgICAgICAgICAgICAgICAgICAgICAgIHdoaWxlIChJbmxpbmVC
b3gqIG5leHRCb3ggPSBib3gtPm5leHRMZWFmQ2hpbGQoKSkgeworICAgICAgICAgICAgICAgICAg
ICAgICAgICAgIGlmIChuZXh0Qm94LT5iaWRpTGV2ZWwoKSA8IGxldmVsKQorICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICBicmVhazsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICBi
b3ggPSBuZXh0Qm94OworICAgICAgICAgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgICAg
ICAgICAgICAgaWYgKGJveC0+YmlkaUxldmVsKCkgPT0gbGV2ZWwpCisgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgYnJlYWs7CisgICAgICAgICAgICAgICAgICAgICAgICBsZXZlbCA9IGJveC0+
YmlkaUxldmVsKCk7CiAgICAgICAgICAgICAgICAgICAgIH0KLSAgICAgICAgICAgICAgICAgICAg
aWYgKGJveC0+YmlkaUxldmVsKCkgPT0gbGV2ZWwpCi0gICAgICAgICAgICAgICAgICAgICAgICBi
cmVhazsKLSAgICAgICAgICAgICAgICAgICAgbGV2ZWwgPSBib3gtPmJpZGlMZXZlbCgpOworICAg
ICAgICAgICAgICAgICAgICByZW5kZXJlciA9ICZib3gtPnJlbmRlcmVyKCk7CisgICAgICAgICAg
ICAgICAgICAgIG9mZnNldCA9IHByaW1hcnlEaXJlY3Rpb24gPT0gTFRSID8gYm94LT5jYXJldE1h
eE9mZnNldCgpIDogYm94LT5jYXJldE1pbk9mZnNldCgpOwogICAgICAgICAgICAgICAgIH0KLSAg
ICAgICAgICAgICAgICByZW5kZXJlciA9ICZib3gtPnJlbmRlcmVyKCk7Ci0gICAgICAgICAgICAg
ICAgb2Zmc2V0ID0gcHJpbWFyeURpcmVjdGlvbiA9PSBMVFIgPyBib3gtPmNhcmV0TWF4T2Zmc2V0
KCkgOiBib3gtPmNhcmV0TWluT2Zmc2V0KCk7CisgICAgICAgICAgICAgICAgYnJlYWs7CiAgICAg
ICAgICAgICB9Ci0gICAgICAgICAgICBicmVhazsKICAgICAgICAgfQorICAgICAgICAKKyAgICAg
ICAgTm9kZSAqbm9kZSA9IHJlbmRlcmVyLT5ub2RlKCk7CisgICAgICAgIGlmIChub2RlLT5pc1Bz
ZXVkb0VsZW1lbnQoKSkgeworICAgICAgICAgICAgUHNldWRvRWxlbWVudCAqZWx0ID0gZG93bmNh
c3Q8UHNldWRvRWxlbWVudD4obm9kZSk7CisgICAgICAgICAgICBub2RlID0gZWx0LT5ob3N0RWxl
bWVudCgpOworICAgICAgICAgICAgCisgICAgICAgICAgICBpZiAob2Zmc2V0ID09IC0xICYmIHJl
bmRlcmVySWZMYXN0UmVuZGVyZXJXYXNQc2V1ZG9FbGVtZW50KSB7CisgICAgICAgICAgICAgICAg
b2Zmc2V0ID0gbm9kZS0+Y29tcHV0ZU5vZGVJbmRleCgpOworICAgICAgICAgICAgICAgIG5vZGUg
PSBub2RlLT5wYXJlbnRFbGVtZW50KCk7CisgICAgICAgICAgICB9CisgICAgICAgIH0KIAotICAg
ICAgICBwID0gY3JlYXRlTGVnYWN5RWRpdGluZ1Bvc2l0aW9uKHJlbmRlcmVyLT5ub2RlKCksIG9m
ZnNldCk7CisgICAgICAgIHAgPSBjcmVhdGVMZWdhY3lFZGl0aW5nUG9zaXRpb24obm9kZSwgb2Zm
c2V0KTsKIAogICAgICAgICBpZiAoKHAuaXNDYW5kaWRhdGUoKSAmJiBwLmRvd25zdHJlYW0oKSAh
PSBkb3duc3RyZWFtU3RhcnQpIHx8IHAuYXRTdGFydE9mVHJlZSgpIHx8IHAuYXRFbmRPZlRyZWUo
KSkKICAgICAgICAgICAgIHJldHVybiBwOworICAgICAgICAKKyAgICAgICAgLy8gV2hlbiBzdGVw
cGluZyBvZmYgdGhlIHJpZ2h0IGVkZ2Ugb2YgYmxvY2sgZWxlbWVudHMgdGhhdCBjb250YWluIG9u
bHkgdGV4dCwgb2J0YWluaW5nIHRoZQorICAgICAgICAvLyBpbmxpbmUgYm94IHdvdWxkIHJldHVy
biB0aGUgZmlyc3QgdGV4dCBib3gsIHdoaWNoIGlzIGJlZm9yZSB0aGUgc3BvdCAob3IgZXF1YWwg
dG8gdGhlIHNwb3QpCisgICAgICAgIC8vIHRoYXQgd2UganVzdCBjYW1lIGZyb20pLgorICAgICAg
ICBpZiAoIXAuaXNDYW5kaWRhdGUoKSAmJiBvZmZzZXQgPT0gYm94LT5jYXJldExlZnRtb3N0T2Zm
c2V0KCkpIHsKKyAgICAgICAgICAgIFBvc2l0aW9uIGFmdGVyID0gY3JlYXRlTGVnYWN5RWRpdGlu
Z1Bvc2l0aW9uKG5vZGUtPnBhcmVudEVsZW1lbnQoKSwgbm9kZS0+Y29tcHV0ZU5vZGVJbmRleCgp
ICsgMSk7CisgICAgICAgICAgICBpZiAoYWZ0ZXIuaXNDYW5kaWRhdGUoKSkgcmV0dXJuIGFmdGVy
OworICAgICAgICB9CiAKICAgICAgICAgQVNTRVJUKHAgIT0gbV9kZWVwUG9zaXRpb24pOwogICAg
IH0KQEAgLTQyMywxOCArNTg3LDE5IEBACiBWaXNpYmxlUG9zaXRpb24gVmlzaWJsZVBvc2l0aW9u
OjpyaWdodChib29sIHN0YXlJbkVkaXRhYmxlQ29udGVudCkgY29uc3QKIHsKICAgICBQb3NpdGlv
biBwb3MgPSByaWdodFZpc3VhbGx5RGlzdGluY3RDYW5kaWRhdGUoKTsKLSAgICAvLyBGSVhNRTog
V2h5IGNhbid0IHdlIG1vdmUgbGVmdCBmcm9tIHRoZSBsYXN0IHBvc2l0aW9uIGluIGEgdHJlZT8K
KyAgICAvLyBGSVhNRTogV2h5IGNhbid0IHdlIG1vdmUgcmlnaHQgZnJvbSB0aGUgZmlyc3QgcG9z
aXRpb24gaW4gYSB0cmVlPwogICAgIGlmIChwb3MuYXRTdGFydE9mVHJlZSgpIHx8IHBvcy5hdEVu
ZE9mVHJlZSgpKQogICAgICAgICByZXR1cm4gVmlzaWJsZVBvc2l0aW9uKCk7CiAKLSAgICBWaXNp
YmxlUG9zaXRpb24gcmlnaHQgPSBWaXNpYmxlUG9zaXRpb24ocG9zLCBET1dOU1RSRUFNKTsKLSAg
ICBBU1NFUlQocmlnaHQgIT0gKnRoaXMpOworICAgIFZpc2libGVQb3NpdGlvbiByaWdodFBvc2l0
aW9uID0gVmlzaWJsZVBvc2l0aW9uKHBvcywgRE9XTlNUUkVBTSk7CisgICAgICAgIAorICAgIEFT
U0VSVChyaWdodFBvc2l0aW9uICE9ICp0aGlzKTsKIAogICAgIGlmICghc3RheUluRWRpdGFibGVD
b250ZW50KQotICAgICAgICByZXR1cm4gcmlnaHQ7CisgICAgICAgIHJldHVybiByaWdodFBvc2l0
aW9uOwogCiAgICAgLy8gRklYTUU6IFRoaXMgbWF5IG5lZWQgdG8gZG8gc29tZXRoaW5nIGRpZmZl
cmVudCBmcm9tICJhZnRlciIuCi0gICAgcmV0dXJuIGhvbm9yRWRpdGluZ0JvdW5kYXJ5QXRPckFm
dGVyKHJpZ2h0KTsKKyAgICByZXR1cm4gaG9ub3JFZGl0aW5nQm91bmRhcnlBdE9yQWZ0ZXIocmln
aHRQb3NpdGlvbik7CiB9CiAKIFZpc2libGVQb3NpdGlvbiBWaXNpYmxlUG9zaXRpb246Omhvbm9y
RWRpdGluZ0JvdW5kYXJ5QXRPckJlZm9yZShjb25zdCBWaXNpYmxlUG9zaXRpb24gJnBvcykgY29u
c3QKQEAgLTQ0NSw5ICs2MTAsMTUgQEAKICAgICBOb2RlKiBoaWdoZXN0Um9vdCA9IGhpZ2hlc3RF
ZGl0YWJsZVJvb3QoZGVlcEVxdWl2YWxlbnQoKSk7CiAgICAgCiAgICAgLy8gUmV0dXJuIGVtcHR5
IHBvc2l0aW9uIGlmIHBvcyBpcyBub3Qgc29tZXdoZXJlIGluc2lkZSB0aGUgZWRpdGFibGUgcmVn
aW9uIGNvbnRhaW5pbmcgdGhpcyBwb3NpdGlvbgotICAgIGlmIChoaWdoZXN0Um9vdCAmJiAhcG9z
LmRlZXBFcXVpdmFsZW50KCkuZGVwcmVjYXRlZE5vZGUoKS0+aXNEZXNjZW5kYW50T2YoaGlnaGVz
dFJvb3QpKQotICAgICAgICByZXR1cm4gVmlzaWJsZVBvc2l0aW9uKCk7Ci0gICAgICAgIAorICAg
IGlmIChoaWdoZXN0Um9vdCkgeworICAgICAgICBpZiAoaGlnaGVzdFJvb3QgIT0gcG9zLmRlZXBF
cXVpdmFsZW50KCkuZGVwcmVjYXRlZE5vZGUoKSB8fAorICAgICAgICAgICAgcG9zLmRlZXBFcXVp
dmFsZW50KCkuYW5jaG9yVHlwZSgpICE9IFBvc2l0aW9uOjpQb3NpdGlvbklzT2Zmc2V0SW5BbmNo
b3IpIHsKKyAgICAgICAgICAgICAgICBpZiAoIXBvcy5kZWVwRXF1aXZhbGVudCgpLmRlcHJlY2F0
ZWROb2RlKCktPmlzRGVzY2VuZGFudE9mKGhpZ2hlc3RSb290KSkgeworICAgICAgICAgICAgICAg
ICAgICByZXR1cm4gVmlzaWJsZVBvc2l0aW9uKCk7CisgICAgICAgICAgICAgICAgfQorICAgICAg
ICB9CisgICAgfQorICAgIAogICAgIC8vIFJldHVybiBwb3MgaXRzZWxmIGlmIHRoZSB0d28gYXJl
IGZyb20gdGhlIHZlcnkgc2FtZSBlZGl0YWJsZSByZWdpb24sIG9yIGJvdGggYXJlIG5vbi1lZGl0
YWJsZQogICAgIC8vIEZJWE1FOiBJbiB0aGUgbm9uLWVkaXRhYmxlIGNhc2UsIGp1c3QgYmVjYXVz
ZSB0aGUgbmV3IHBvc2l0aW9uIGlzIG5vbi1lZGl0YWJsZSBkb2Vzbid0IG1lYW4gbW92ZW1lbnQK
ICAgICAvLyB0byBpdCBpcyBhbGxvd2VkLiAgVmlzaWJsZVNlbGVjdGlvbjo6YWRqdXN0Rm9yRWRp
dGFibGVDb250ZW50IGhhcyB0aGlzIHByb2JsZW0gdG9vLgpAQCAtNDcxLDggKzY0MiwxNSBAQAog
ICAgIE5vZGUqIGhpZ2hlc3RSb290ID0gaGlnaGVzdEVkaXRhYmxlUm9vdChkZWVwRXF1aXZhbGVu
dCgpKTsKICAgICAKICAgICAvLyBSZXR1cm4gZW1wdHkgcG9zaXRpb24gaWYgcG9zIGlzIG5vdCBz
b21ld2hlcmUgaW5zaWRlIHRoZSBlZGl0YWJsZSByZWdpb24gY29udGFpbmluZyB0aGlzIHBvc2l0
aW9uCi0gICAgaWYgKGhpZ2hlc3RSb290ICYmICFwb3MuZGVlcEVxdWl2YWxlbnQoKS5kZXByZWNh
dGVkTm9kZSgpLT5pc0Rlc2NlbmRhbnRPZihoaWdoZXN0Um9vdCkpCi0gICAgICAgIHJldHVybiBW
aXNpYmxlUG9zaXRpb24oKTsKKyAgICBpZiAoaGlnaGVzdFJvb3QpIHsKKyAgICAgICAgaWYgKGhp
Z2hlc3RSb290ICE9IHBvcy5kZWVwRXF1aXZhbGVudCgpLmRlcHJlY2F0ZWROb2RlKCkgfHwKKyAg
ICAgICAgICAgIHBvcy5kZWVwRXF1aXZhbGVudCgpLmFuY2hvclR5cGUoKSAhPSBQb3NpdGlvbjo6
UG9zaXRpb25Jc09mZnNldEluQW5jaG9yKSB7CisgICAgICAgICAgICBpZiAoIXBvcy5kZWVwRXF1
aXZhbGVudCgpLmRlcHJlY2F0ZWROb2RlKCktPmlzRGVzY2VuZGFudE9mKGhpZ2hlc3RSb290KSkg
eworICAgICAgICAgICAgICAgIHJldHVybiBWaXNpYmxlUG9zaXRpb24oKTsKKyAgICAgICAgICAg
IH0KKyAgICAgICAgfQorICAgIH0KKwogICAgIAogICAgIC8vIFJldHVybiBwb3MgaXRzZWxmIGlm
IHRoZSB0d28gYXJlIGZyb20gdGhlIHZlcnkgc2FtZSBlZGl0YWJsZSByZWdpb24sIG9yIGJvdGgg
YXJlIG5vbi1lZGl0YWJsZQogICAgIC8vIEZJWE1FOiBJbiB0aGUgbm9uLWVkaXRhYmxlIGNhc2Us
IGp1c3QgYmVjYXVzZSB0aGUgbmV3IHBvc2l0aW9uIGlzIG5vbi1lZGl0YWJsZSBkb2Vzbid0IG1l
YW4gbW92ZW1lbnQKQEAgLTUyNiw4ICs3MDQsOSBAQAogICAgIGNhbmRpZGF0ZSA9IHBvc2l0aW9u
LmRvd25zdHJlYW0oKTsKICAgICBpZiAoY2FuZGlkYXRlLmlzQ2FuZGlkYXRlKCkpCiAgICAgICAg
IHJldHVybiBjYW5kaWRhdGU7CisgICAgCiAKLSAgICAvLyBXaGVuIG5laXRoZXIgdXBzdHJlYW0g
b3IgZG93bnN0cmVhbSBnZXRzIHVzIHRvIGEgY2FuZGlkYXRlICh1cHN0cmVhbS9kb3duc3RyZWFt
IHdvbid0IGxlYXZlIAorICAgIC8vIFdoZW4gbmVpdGhlciB1cHN0cmVhbSBvciBkb3duc3RyZWFt
IGdldHMgdXMgdG8gYSBjYW5kaWRhdGUgKHVwc3RyZWFtL2Rvd25zdHJlYW0gd29uJ3QgbGVhdmUK
ICAgICAvLyBibG9ja3Mgb3IgZW50ZXIgbmV3IG9uZXMpLCB3ZSBzZWFyY2ggZm9yd2FyZCBhbmQg
YmFja3dhcmQgdW50aWwgd2UgZmluZCBvbmUuCiAgICAgUG9zaXRpb24gbmV4dCA9IGNhbm9uaWNh
bGl6ZUNhbmRpZGF0ZShuZXh0Q2FuZGlkYXRlKHBvc2l0aW9uKSk7CiAgICAgUG9zaXRpb24gcHJl
diA9IGNhbm9uaWNhbGl6ZUNhbmRpZGF0ZShwcmV2aW91c0NhbmRpZGF0ZShwb3NpdGlvbikpOwpJ
bmRleDogU291cmNlL1dlYkNvcmUvZWRpdGluZy9WaXNpYmxlU2VsZWN0aW9uLmNwcAo9PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9lZGl0aW5nL1Zpc2libGVTZWxlY3Rpb24uY3BwCShyZXZp
c2lvbiAxNzQzMjQpCisrKyBTb3VyY2UvV2ViQ29yZS9lZGl0aW5nL1Zpc2libGVTZWxlY3Rpb24u
Y3BwCSh3b3JraW5nIGNvcHkpCkBAIC00Miw2ICs0Miw3IEBACiAKIFZpc2libGVTZWxlY3Rpb246
OlZpc2libGVTZWxlY3Rpb24oKQogICAgIDogbV9hZmZpbml0eShET1dOU1RSRUFNKQorICAgICwg
bV9jaGFuZ2VPYnNlcnZlcigwKQogICAgICwgbV9zZWxlY3Rpb25UeXBlKE5vU2VsZWN0aW9uKQog
ICAgICwgbV9iYXNlSXNGaXJzdCh0cnVlKQogICAgICwgbV9pc0RpcmVjdGlvbmFsKGZhbHNlKQpA
QCAtNTIsNiArNTMsNyBAQAogICAgIDogbV9iYXNlKHBvcykKICAgICAsIG1fZXh0ZW50KHBvcykK
ICAgICAsIG1fYWZmaW5pdHkoYWZmaW5pdHkpCisgICAgLCBtX2NoYW5nZU9ic2VydmVyKDApCiAg
ICAgLCBtX2lzRGlyZWN0aW9uYWwoaXNEaXJlY3Rpb25hbCkKIHsKICAgICB2YWxpZGF0ZSgpOwpA
QCAtNjEsNiArNjMsNyBAQAogICAgIDogbV9iYXNlKGJhc2UpCiAgICAgLCBtX2V4dGVudChleHRl
bnQpCiAgICAgLCBtX2FmZmluaXR5KGFmZmluaXR5KQorICAgICwgbV9jaGFuZ2VPYnNlcnZlcigw
KQogICAgICwgbV9pc0RpcmVjdGlvbmFsKGlzRGlyZWN0aW9uYWwpCiB7CiAgICAgdmFsaWRhdGUo
KTsKQEAgLTcwLDYgKzczLDcgQEAKICAgICA6IG1fYmFzZShwb3MuZGVlcEVxdWl2YWxlbnQoKSkK
ICAgICAsIG1fZXh0ZW50KHBvcy5kZWVwRXF1aXZhbGVudCgpKQogICAgICwgbV9hZmZpbml0eShw
b3MuYWZmaW5pdHkoKSkKKyAgICAsIG1fY2hhbmdlT2JzZXJ2ZXIoMCkKICAgICAsIG1faXNEaXJl
Y3Rpb25hbChpc0RpcmVjdGlvbmFsKQogewogICAgIHZhbGlkYXRlKCk7CkBAIC03OSw2ICs4Myw3
IEBACiAgICAgOiBtX2Jhc2UoYmFzZS5kZWVwRXF1aXZhbGVudCgpKQogICAgICwgbV9leHRlbnQo
ZXh0ZW50LmRlZXBFcXVpdmFsZW50KCkpCiAgICAgLCBtX2FmZmluaXR5KGJhc2UuYWZmaW5pdHko
KSkKKyAgICAsIG1fY2hhbmdlT2JzZXJ2ZXIoMCkKICAgICAsIG1faXNEaXJlY3Rpb25hbChpc0Rp
cmVjdGlvbmFsKQogewogICAgIHZhbGlkYXRlKCk7CkBAIC04OCwxMSArOTMsNDYgQEAKICAgICA6
IG1fYmFzZShyYW5nZS0+c3RhcnRQb3NpdGlvbigpKQogICAgICwgbV9leHRlbnQocmFuZ2UtPmVu
ZFBvc2l0aW9uKCkpCiAgICAgLCBtX2FmZmluaXR5KGFmZmluaXR5KQorICAgICwgbV9jaGFuZ2VP
YnNlcnZlcigwKQogICAgICwgbV9pc0RpcmVjdGlvbmFsKGlzRGlyZWN0aW9uYWwpCiB7CiAgICAg
dmFsaWRhdGUoKTsKIH0KIAorVmlzaWJsZVNlbGVjdGlvbjo6VmlzaWJsZVNlbGVjdGlvbihjb25z
dCBWaXNpYmxlU2VsZWN0aW9uJiBvdGhlcikKKyAgICA6IG1fYmFzZShvdGhlci5tX2Jhc2UpCisg
ICAgLCBtX2V4dGVudChvdGhlci5tX2V4dGVudCkKKyAgICAsIG1fc3RhcnQob3RoZXIubV9zdGFy
dCkKKyAgICAsIG1fZW5kKG90aGVyLm1fZW5kKQorICAgICwgbV9hZmZpbml0eShvdGhlci5tX2Fm
ZmluaXR5KQorICAgICwgbV9jaGFuZ2VPYnNlcnZlcigwKSAvLyBPYnNlcnZlciBpcyBhc3NvY2lh
dGVkIHdpdGggb25seSBvbmUgVmlzaWJsZVNlbGVjdGlvbiwgc28gdGhpcyBzaG91bGQgbm90IGJl
IGNvcGllZC4KKyAgICAsIG1fc2VsZWN0aW9uVHlwZShvdGhlci5tX3NlbGVjdGlvblR5cGUpCisg
ICAgLCBtX2Jhc2VJc0ZpcnN0KG90aGVyLm1fYmFzZUlzRmlyc3QpCisgICAgLCBtX2lzRGlyZWN0
aW9uYWwob3RoZXIubV9pc0RpcmVjdGlvbmFsKQoreworfQorCitWaXNpYmxlU2VsZWN0aW9uJiBW
aXNpYmxlU2VsZWN0aW9uOjpvcGVyYXRvcj0oY29uc3QgVmlzaWJsZVNlbGVjdGlvbiYgb3RoZXIp
Cit7CisgICAgZGlkQ2hhbmdlKCk7CisKKyAgICBtX2Jhc2UgPSBvdGhlci5tX2Jhc2U7CisgICAg
bV9leHRlbnQgPSBvdGhlci5tX2V4dGVudDsKKyAgICBtX3N0YXJ0ID0gb3RoZXIubV9zdGFydDsK
KyAgICBtX2VuZCA9IG90aGVyLm1fZW5kOworICAgIG1fYWZmaW5pdHkgPSBvdGhlci5tX2FmZmlu
aXR5OworICAgIG1fY2hhbmdlT2JzZXJ2ZXIgPSAwOworICAgIG1fc2VsZWN0aW9uVHlwZSA9IG90
aGVyLm1fc2VsZWN0aW9uVHlwZTsKKyAgICBtX2Jhc2VJc0ZpcnN0ID0gb3RoZXIubV9iYXNlSXNG
aXJzdDsKKyAgICBtX2lzRGlyZWN0aW9uYWwgPSBvdGhlci5tX2lzRGlyZWN0aW9uYWw7CisgICAg
cmV0dXJuICp0aGlzOworfQorCitWaXNpYmxlU2VsZWN0aW9uOjp+VmlzaWJsZVNlbGVjdGlvbigp
Cit7CisgICAgZGlkQ2hhbmdlKCk7Cit9CisKIFZpc2libGVTZWxlY3Rpb24gVmlzaWJsZVNlbGVj
dGlvbjo6c2VsZWN0aW9uRnJvbUNvbnRlbnRzT2ZOb2RlKE5vZGUqIG5vZGUpCiB7CiAgICAgQVNT
RVJUKCFlZGl0aW5nSWdub3Jlc0NvbnRlbnQobm9kZSkpOwpAQCAtMTAxLDI2ICsxNDEsMzggQEAK
IAogdm9pZCBWaXNpYmxlU2VsZWN0aW9uOjpzZXRCYXNlKGNvbnN0IFBvc2l0aW9uJiBwb3NpdGlv
bikKIHsKKyAgICBQb3NpdGlvbiBvbGRCYXNlID0gbV9iYXNlOwogICAgIG1fYmFzZSA9IHBvc2l0
aW9uOwogICAgIHZhbGlkYXRlKCk7CisgICAgaWYgKG1fYmFzZSAhPSBvbGRCYXNlKQorICAgICAg
ICBkaWRDaGFuZ2UoKTsKIH0KIAogdm9pZCBWaXNpYmxlU2VsZWN0aW9uOjpzZXRCYXNlKGNvbnN0
IFZpc2libGVQb3NpdGlvbiYgdmlzaWJsZVBvc2l0aW9uKQogeworICAgIFBvc2l0aW9uIG9sZEJh
c2UgPSBtX2Jhc2U7CiAgICAgbV9iYXNlID0gdmlzaWJsZVBvc2l0aW9uLmRlZXBFcXVpdmFsZW50
KCk7CiAgICAgdmFsaWRhdGUoKTsKKyAgICBpZiAobV9iYXNlICE9IG9sZEJhc2UpCisgICAgICAg
IGRpZENoYW5nZSgpOwogfQogCiB2b2lkIFZpc2libGVTZWxlY3Rpb246OnNldEV4dGVudChjb25z
dCBQb3NpdGlvbiYgcG9zaXRpb24pCiB7CisgICAgUG9zaXRpb24gb2xkRXh0ZW50ID0gbV9leHRl
bnQ7CiAgICAgbV9leHRlbnQgPSBwb3NpdGlvbjsKICAgICB2YWxpZGF0ZSgpOworICAgIGlmICht
X2V4dGVudCAhPSBvbGRFeHRlbnQpCisgICAgICAgIGRpZENoYW5nZSgpOwogfQogCiB2b2lkIFZp
c2libGVTZWxlY3Rpb246OnNldEV4dGVudChjb25zdCBWaXNpYmxlUG9zaXRpb24mIHZpc2libGVQ
b3NpdGlvbikKIHsKKyAgICBQb3NpdGlvbiBvbGRFeHRlbnQgPSBtX2V4dGVudDsKICAgICBtX2V4
dGVudCA9IHZpc2libGVQb3NpdGlvbi5kZWVwRXF1aXZhbGVudCgpOwogICAgIHZhbGlkYXRlKCk7
CisgICAgaWYgKG1fZXh0ZW50ICE9IG9sZEV4dGVudCkKKyAgICAgICAgZGlkQ2hhbmdlKCk7CiB9
CiAKIFBhc3NSZWZQdHI8UmFuZ2U+IFZpc2libGVTZWxlY3Rpb246OmZpcnN0UmFuZ2UoKSBjb25z
dApAQCAtMTkzLDcgKzI0NSwxNCBAQAogICAgIGlmIChpc05vbmUoKSkKICAgICAgICAgcmV0dXJu
IGZhbHNlOwogCisgICAgLy8gRklYTUU6IERvIHdlIG5lZWQgdG8gY2hlY2sgYWxsIG9mIHRoZW0/
CisgICAgUG9zaXRpb24gb2xkQmFzZSA9IG1fYmFzZTsKKyAgICBQb3NpdGlvbiBvbGRFeHRlbnQg
PSBtX2V4dGVudDsKKyAgICBQb3NpdGlvbiBvbGRTdGFydCA9IG1fc3RhcnQ7CisgICAgUG9zaXRp
b24gb2xkRW5kID0gbV9lbmQ7CiAgICAgdmFsaWRhdGUoZ3JhbnVsYXJpdHkpOworICAgIGlmICht
X2Jhc2UgIT0gb2xkQmFzZSB8fCBtX2V4dGVudCAhPSBvbGRFeHRlbnQgfHwgbV9zdGFydCAhPSBv
bGRTdGFydCB8fCBtX2VuZCAhPSBvbGRFbmQpCisgICAgICAgIGRpZENoYW5nZSgpOwogICAgIHJl
dHVybiB0cnVlOwogfQogCkBAIC0yMzUsMTMgKzI5NCwxNyBAQAogICAgICAgICByZXR1cm47CiAK
ICAgICBDaGFyYWN0ZXJJdGVyYXRvciBjaGFySXQoKnNlYXJjaFJhbmdlLCBUZXh0SXRlcmF0b3JF
bWl0c0NoYXJhY3RlcnNCZXR3ZWVuQWxsVmlzaWJsZVBvc2l0aW9ucyk7CisgICAgYm9vbCBjaGFu
Z2VkID0gZmFsc2U7CiAKICAgICBmb3IgKDsgIWNoYXJJdC5hdEVuZCgpICYmIGNoYXJJdC50ZXh0
KCkubGVuZ3RoKCk7IGNoYXJJdC5hZHZhbmNlKDEpKSB7CiAgICAgICAgIFVDaGFyIGMgPSBjaGFy
SXQudGV4dCgpWzBdOwogICAgICAgICBpZiAoKCFpc1NwYWNlT3JOZXdsaW5lKGMpICYmIGMgIT0g
bm9CcmVha1NwYWNlKSB8fCBjID09ICdcbicpCiAgICAgICAgICAgICBicmVhazsKICAgICAgICAg
bV9lbmQgPSBjaGFySXQucmFuZ2UoKS0+ZW5kUG9zaXRpb24oKTsKKyAgICAgICAgY2hhbmdlZCA9
IHRydWU7CiAgICAgfQorICAgIGlmIChjaGFuZ2VkKQorICAgICAgICBkaWRDaGFuZ2UoKTsKIH0K
IAogdm9pZCBWaXNpYmxlU2VsZWN0aW9uOjpzZXRCYXNlQW5kRXh0ZW50VG9EZWVwRXF1aXZhbGVu
dHMoKQpAQCAtNDY3LDYgKzUzMCw3IEBACiAgICAgICAgIG1fZW5kID0gYmFzZTsKICAgICB9CiAg
ICAgbV9zZWxlY3Rpb25UeXBlID0gYmFzZSA9PSBleHRlbnQgPyBDYXJldFNlbGVjdGlvbiA6IFJh
bmdlU2VsZWN0aW9uOworICAgIGRpZENoYW5nZSgpOwogfQogCiBzdGF0aWMgUG9zaXRpb24gYWRq
dXN0UG9zaXRpb25Gb3JFbmQoY29uc3QgUG9zaXRpb24mIGN1cnJlbnRQb3NpdGlvbiwgTm9kZSog
c3RhcnRDb250YWluZXJOb2RlKQpAQCAtNjY3LDYgKzczMSwzMiBAQAogICAgIHJldHVybiBpczxI
VE1MSW5wdXRFbGVtZW50Pih0ZXh0Q29udHJvbCkgJiYgZG93bmNhc3Q8SFRNTElucHV0RWxlbWVu
dD4oKnRleHRDb250cm9sKS5pc1Bhc3N3b3JkRmllbGQoKTsKIH0KIAorVmlzaWJsZVNlbGVjdGlv
bjo6Q2hhbmdlT2JzZXJ2ZXI6OkNoYW5nZU9ic2VydmVyKCkKK3sKK30KKworVmlzaWJsZVNlbGVj
dGlvbjo6Q2hhbmdlT2JzZXJ2ZXI6On5DaGFuZ2VPYnNlcnZlcigpCit7Cit9CisKK3ZvaWQgVmlz
aWJsZVNlbGVjdGlvbjo6c2V0Q2hhbmdlT2JzZXJ2ZXIoQ2hhbmdlT2JzZXJ2ZXImIG9ic2VydmVy
KQoreworICAgIEFTU0VSVCghbV9jaGFuZ2VPYnNlcnZlcik7CisgICAgbV9jaGFuZ2VPYnNlcnZl
ciA9ICZvYnNlcnZlcjsKK30KKwordm9pZCBWaXNpYmxlU2VsZWN0aW9uOjpjbGVhckNoYW5nZU9i
c2VydmVyKCkKK3sKKyAgICBBU1NFUlQobV9jaGFuZ2VPYnNlcnZlcik7CisgICAgbV9jaGFuZ2VP
YnNlcnZlciA9IDA7Cit9CisKK3ZvaWQgVmlzaWJsZVNlbGVjdGlvbjo6ZGlkQ2hhbmdlKCkKK3sK
KyAgICBpZiAobV9jaGFuZ2VPYnNlcnZlcikKKyAgICAgICAgbV9jaGFuZ2VPYnNlcnZlci0+ZGlk
Q2hhbmdlVmlzaWJsZVNlbGVjdGlvbigpOworfQorCiAjaWZuZGVmIE5ERUJVRwogCiB2b2lkIFZp
c2libGVTZWxlY3Rpb246OmRlYnVnUG9zaXRpb24oKSBjb25zdApJbmRleDogU291cmNlL1dlYkNv
cmUvZWRpdGluZy9WaXNpYmxlU2VsZWN0aW9uLmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNv
cmUvZWRpdGluZy9WaXNpYmxlU2VsZWN0aW9uLmgJKHJldmlzaW9uIDE3NDMyNCkKKysrIFNvdXJj
ZS9XZWJDb3JlL2VkaXRpbmcvVmlzaWJsZVNlbGVjdGlvbi5oCSh3b3JraW5nIGNvcHkpCkBAIC01
MCw2ICs1MCwxMSBAQAogICAgIFdFQkNPUkVfRVhQT1JUIFZpc2libGVTZWxlY3Rpb24oY29uc3Qg
VmlzaWJsZVBvc2l0aW9uJiwgYm9vbCBpc0RpcmVjdGlvbmFsID0gZmFsc2UpOwogICAgIFdFQkNP
UkVfRVhQT1JUIFZpc2libGVTZWxlY3Rpb24oY29uc3QgVmlzaWJsZVBvc2l0aW9uJiwgY29uc3Qg
VmlzaWJsZVBvc2l0aW9uJiwgYm9vbCBpc0RpcmVjdGlvbmFsID0gZmFsc2UpOwogCisgICAgVmlz
aWJsZVNlbGVjdGlvbihjb25zdCBWaXNpYmxlU2VsZWN0aW9uJik7CisgICAgVmlzaWJsZVNlbGVj
dGlvbiYgb3BlcmF0b3I9KGNvbnN0IFZpc2libGVTZWxlY3Rpb24mKTsKKworICAgIFdFQkNPUkVf
RVhQT1JUIH5WaXNpYmxlU2VsZWN0aW9uKCk7CisKICAgICBXRUJDT1JFX0VYUE9SVCBzdGF0aWMg
VmlzaWJsZVNlbGVjdGlvbiBzZWxlY3Rpb25Gcm9tQ29udGVudHNPZk5vZGUoTm9kZSopOwogCiAg
ICAgU2VsZWN0aW9uVHlwZSBzZWxlY3Rpb25UeXBlKCkgY29uc3QgeyByZXR1cm4gbV9zZWxlY3Rp
b25UeXBlOyB9CkBAIC0xMDcsMTQgKzExMiwzMCBAQAogCiAgICAgV0VCQ09SRV9FWFBPUlQgYm9v
bCBpc0luUGFzc3dvcmRGaWVsZCgpIGNvbnN0OwogCisgICAgdm9pZCBzZXRXaXRob3V0VmFsaWRh
dGlvbihjb25zdCBQb3NpdGlvbiYsIGNvbnN0IFBvc2l0aW9uJik7CisKKyAgICAvLyBMaXN0ZW5l
ciBvZiBWaXNpYmxlU2VsZWN0aW9uIG1vZGlmaWNhdGlvbi4gZGlkQ2hhbmdlVmlzaWJsZVNlbGVj
dGlvbigpIHdpbGwgYmUgaW52b2tlZCB3aGVuIGJhc2UsIGV4dGVudCwgc3RhcnQKKyAgICAvLyBv
ciBlbmQgaXMgbW92ZWQgdG8gYSBkaWZmZXJlbnQgcG9zaXRpb24uCisgICAgLy8KKyAgICAvLyBP
YmplY3RzIGltcGxlbWVudGluZyB8Q2hhbmdlT2JzZXJ2ZXJ8IGludGVyZmFjZSBtdXN0IG91dGxp
dmUgdGhlIFZpc2libGVTZWxlY3Rpb24gb2JqZWN0LgorICAgIGNsYXNzIENoYW5nZU9ic2VydmVy
IHsKKyAgICAgICAgV1RGX01BS0VfTk9OQ09QWUFCTEUoQ2hhbmdlT2JzZXJ2ZXIpOworICAgIHB1
YmxpYzoKKyAgICAgICAgQ2hhbmdlT2JzZXJ2ZXIoKTsKKyAgICAgICAgdmlydHVhbCB+Q2hhbmdl
T2JzZXJ2ZXIoKTsKKyAgICAgICAgdmlydHVhbCB2b2lkIGRpZENoYW5nZVZpc2libGVTZWxlY3Rp
b24oKSA9IDA7CisgICAgfTsKKworICAgIHZvaWQgc2V0Q2hhbmdlT2JzZXJ2ZXIoQ2hhbmdlT2Jz
ZXJ2ZXImKTsKKyAgICB2b2lkIGNsZWFyQ2hhbmdlT2JzZXJ2ZXIoKTsKKyAgICB2b2lkIGRpZENo
YW5nZSgpOyAvLyBGaXJlIHRoZSBjaGFuZ2Ugb2JzZXJ2ZXIsIGlmIGFueS4KKwogI2lmbmRlZiBO
REVCVUcKICAgICB2b2lkIGRlYnVnUG9zaXRpb24oKSBjb25zdDsKICAgICB2b2lkIGZvcm1hdEZv
ckRlYnVnZ2VyKGNoYXIqIGJ1ZmZlciwgdW5zaWduZWQgbGVuZ3RoKSBjb25zdDsKICAgICB2b2lk
IHNob3dUcmVlRm9yVGhpcygpIGNvbnN0OwogI2VuZGlmCiAKLSAgICB2b2lkIHNldFdpdGhvdXRW
YWxpZGF0aW9uKGNvbnN0IFBvc2l0aW9uJiwgY29uc3QgUG9zaXRpb24mKTsKLQogcHJpdmF0ZToK
ICAgICB2b2lkIHZhbGlkYXRlKFRleHRHcmFudWxhcml0eSA9IENoYXJhY3RlckdyYW51bGFyaXR5
KTsKIApAQCAtMTM3LDEwICsxNTgsMTMgQEAKIAogICAgIEVBZmZpbml0eSBtX2FmZmluaXR5OyAg
ICAgICAgICAgLy8gdGhlIHVwc3RyZWFtL2Rvd25zdHJlYW0gYWZmaW5pdHkgb2YgdGhlIGNhcmV0
CiAKKyAgICBDaGFuZ2VPYnNlcnZlciogbV9jaGFuZ2VPYnNlcnZlcjsKKwogICAgIC8vIHRoZXNl
IGFyZSBjYWNoZWQsIGNhbiBiZSByZWNhbGN1bGF0ZWQgYnkgdmFsaWRhdGUoKQogICAgIFNlbGVj
dGlvblR5cGUgbV9zZWxlY3Rpb25UeXBlOyAvLyBOb25lLCBDYXJldCwgUmFuZ2UKICAgICBib29s
IG1fYmFzZUlzRmlyc3QgOiAxOyAvLyBUcnVlIGlmIGJhc2UgaXMgYmVmb3JlIHRoZSBleHRlbnQK
ICAgICBib29sIG1faXNEaXJlY3Rpb25hbCA6IDE7IC8vIE5vbi1kaXJlY3Rpb25hbCBpZ25vcmVz
IG1fYmFzZUlzRmlyc3QgYW5kIHNlbGVjdGlvbiBhbHdheXMgZXh0ZW5kcyBvbiBzaGlmdCArIGFy
cm93IGtleS4KKwogfTsKIAogaW5saW5lIGJvb2wgb3BlcmF0b3I9PShjb25zdCBWaXNpYmxlU2Vs
ZWN0aW9uJiBhLCBjb25zdCBWaXNpYmxlU2VsZWN0aW9uJiBiKQpJbmRleDogU291cmNlL1dlYkNv
cmUvZWRpdGluZy9WaXNpYmxlVW5pdHMuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3Jl
L2VkaXRpbmcvVmlzaWJsZVVuaXRzLmNwcAkocmV2aXNpb24gMTc0MzI0KQorKysgU291cmNlL1dl
YkNvcmUvZWRpdGluZy9WaXNpYmxlVW5pdHMuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC01NTIsNiAr
NTUyLDkgQEAKIHsKICAgICBQb3NpdGlvbiBwb3MgPSBjLmRlZXBFcXVpdmFsZW50KCk7CiAgICAg
Tm9kZSogYm91bmRhcnkgPSBwb3MucGFyZW50RWRpdGluZ0JvdW5kYXJ5KCk7CisgICAgCisgICAg
LyogSWYgdGhlcmUncyBub3QgYW4gZWRpdGFibGUgZW5jbG9zaW5nIGVsZW1lbnQsIG9yIGlmIHRo
ZSBlbGVtZW50IGlzIGluIGEgZGV0YWN0aGVkCisgICAgICAgZnJhZ21lbnQsIGJhaWwuICovCiAg
ICAgaWYgKCFib3VuZGFyeSkKICAgICAgICAgcmV0dXJuIFZpc2libGVQb3NpdGlvbigpOwogCklu
ZGV4OiBTb3VyY2UvV2ViQ29yZS9lZGl0aW5nL2h0bWxlZGl0aW5nLmNwcAo9PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0t
LSBTb3VyY2UvV2ViQ29yZS9lZGl0aW5nL2h0bWxlZGl0aW5nLmNwcAkocmV2aXNpb24gMTc0MzI0
KQorKysgU291cmNlL1dlYkNvcmUvZWRpdGluZy9odG1sZWRpdGluZy5jcHAJKHdvcmtpbmcgY29w
eSkKQEAgLTM0NCw2ICszNDQsMTMgQEAKIAogICAgIGlmIChub2RlLT5oYXNDaGlsZE5vZGVzKCkp
CiAgICAgICAgIHJldHVybiBub2RlLT5jb3VudENoaWxkTm9kZXMoKTsKKyAgICAKKyAgICBpZiAo
bm9kZS0+aXNFbGVtZW50Tm9kZSgpKSB7CisgICAgICAgIGNvbnN0IEVsZW1lbnQgKmVsdCA9IGRv
d25jYXN0PEVsZW1lbnQ+KG5vZGUpOworICAgICAgICBpZiAoZWx0LT5iZWZvcmVQc2V1ZG9FbGVt
ZW50KCkgfHwgZWx0LT5hZnRlclBzZXVkb0VsZW1lbnQoKSkgeworICAgICAgICAgICAgcmV0dXJu
IDE7CisgICAgICAgIH0KKyAgICB9CiAKICAgICAvLyBOT1RFOiBUaGlzIHNob3VsZCBwcmVlbXB0
IHRoZSBjb3VudENoaWxkTm9kZXMoKSBmb3IsIGUuZy4sIHNlbGVjdCBub2RlcyAod2hhdCBkb2Vz
IHRoaXMgbWVhbik/CiAgICAgaWYgKGVkaXRpbmdJZ25vcmVzQ29udGVudChub2RlKSkKSW5kZXg6
IFNvdXJjZS9XZWJDb3JlL3BhZ2UvRE9NU2VsZWN0aW9uLmNwcAo9PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3Vy
Y2UvV2ViQ29yZS9wYWdlL0RPTVNlbGVjdGlvbi5jcHAJKHJldmlzaW9uIDE3NDMyNCkKKysrIFNv
dXJjZS9XZWJDb3JlL3BhZ2UvRE9NU2VsZWN0aW9uLmNwcAkod29ya2luZyBjb3B5KQpAQCAtMTky
LDYgKzE5Miw3IEBACiAKIHZvaWQgRE9NU2VsZWN0aW9uOjpjb2xsYXBzZShOb2RlKiBub2RlLCBp
bnQgb2Zmc2V0LCBFeGNlcHRpb25Db2RlJiBlYykKIHsKKyAgICBBU1NFUlQobm9kZSk7CiAgICAg
aWYgKCFtX2ZyYW1lKQogICAgICAgICByZXR1cm47CiAKQEAgLTIwMywxMCArMjA0LDIwIEBACiAg
ICAgaWYgKCFpc1ZhbGlkRm9yUG9zaXRpb24obm9kZSkpCiAgICAgICAgIHJldHVybjsKIAotICAg
IC8vIEZJWE1FOiBFbGltaW5hdGUgbGVnYWN5IGVkaXRpbmcgcG9zaXRpb25zCi0gICAgbV9mcmFt
ZS0+c2VsZWN0aW9uKCkubW92ZVRvKGNyZWF0ZUxlZ2FjeUVkaXRpbmdQb3NpdGlvbihub2RlLCBv
ZmZzZXQpLCBET1dOU1RSRUFNKTsKKyAgICBpZiAoIW5vZGUpCisgICAgICAgIHJldHVybjsKKwor
ICAgIC8qIFJlZlB0cldpbGxCZVJhd1B0ciAqLyBSZWZQdHI8UmFuZ2U+IHJhbmdlID0gUmFuZ2U6
OmNyZWF0ZShub2RlLT5kb2N1bWVudCgpKTsKKyAgICByYW5nZS0+c2V0U3RhcnQobm9kZSwgb2Zm
c2V0KTsgLy8gLCBleGNlcHRpb25TdGF0ZSk7CisgICAgcmFuZ2UtPnNldEVuZChub2RlLCBvZmZz
ZXQpOyAvLyAsIGV4Y2VwdGlvblN0YXRlKTsKKyAgICBtX2ZyYW1lLT5zZWxlY3Rpb24oKS5zZXRT
ZWxlY3RlZFJhbmdlKHJhbmdlLmdldCgpLCBET1dOU1RSRUFNLCBmYWxzZSwgbV9mcmFtZS0+c2Vs
ZWN0aW9uKCkuaXNEaXJlY3Rpb25hbCgpKTsKIH0KIAordm9pZCBET01TZWxlY3Rpb246OmNvbGxh
cHNlKE5vZGUqIG5vZGUsIEV4Y2VwdGlvbkNvZGUmIGV4Y2VwdGlvblN0YXRlKQoreworICAgIGNv
bGxhcHNlKG5vZGUsIDAsIGV4Y2VwdGlvblN0YXRlKTsKK30KKwogdm9pZCBET01TZWxlY3Rpb246
OmNvbGxhcHNlVG9FbmQoRXhjZXB0aW9uQ29kZSYgZWMpCiB7CiAgICAgaWYgKCFtX2ZyYW1lKQpA
QCAtMzY4LDcgKzM3OSw3IEBACiAgICAgICAgIHJldHVybiBSYW5nZTo6Y3JlYXRlKHNoYWRvd0Fu
Y2VzdG9yLT5kb2N1bWVudCgpLCBjb250YWluZXIsIG9mZnNldCwgY29udGFpbmVyLCBvZmZzZXQp
OwogICAgIH0KIAotICAgIHJldHVybiBtX2ZyYW1lLT5zZWxlY3Rpb24oKS5zZWxlY3Rpb24oKS5m
aXJzdFJhbmdlKCk7CisgICAgcmV0dXJuIG1fZnJhbWUtPnNlbGVjdGlvbigpLmZpcnN0UmFuZ2Uo
KTsKIH0KIAogdm9pZCBET01TZWxlY3Rpb246OnJlbW92ZUFsbFJhbmdlcygpCkBAIC0zNzgsNDUg
KzM4OSw2MyBAQAogICAgIG1fZnJhbWUtPnNlbGVjdGlvbigpLmNsZWFyKCk7CiB9CiAKLXZvaWQg
RE9NU2VsZWN0aW9uOjphZGRSYW5nZShSYW5nZSogcikKK3ZvaWQgRE9NU2VsZWN0aW9uOjphZGRS
YW5nZShSYW5nZSogbmV3UmFuZ2UpCiB7CiAgICAgaWYgKCFtX2ZyYW1lKQogICAgICAgICByZXR1
cm47Ci0gICAgaWYgKCFyKQorICAgIC8vIEZJWE1FOiBTaG91bGQgd2UgdGhyb3cgRE9NRXhjZXB0
aW9uIGZvciBlcnJvciBjYXNlcyBiZWxvdz8KKyAgICBpZiAoIW5ld1JhbmdlKSB7CisgICAgICAg
IGFkZENvbnNvbGVFcnJvcigiVGhlIGdpdmVuIHJhbmdlIGlzIG51bGwuIik7CiAgICAgICAgIHJl
dHVybjsKKyAgICB9CisgICAgaWYgKCFuZXdSYW5nZS0+c3RhcnRDb250YWluZXIoKSkgeworICAg
ICAgICBhZGRDb25zb2xlRXJyb3IoIlRoZSBnaXZlbiByYW5nZSBoYXMgbm8gY29udGFpbmVyLiBQ
ZXJoYXBzICdkZXRhY2goKScgaGFzIGJlZW4gaW52b2tlZCBvbiBpdD8iKTsKKyAgICAgICAgcmV0
dXJuOworICAgIH0KIAorCiAgICAgRnJhbWVTZWxlY3Rpb24mIHNlbGVjdGlvbiA9IG1fZnJhbWUt
PnNlbGVjdGlvbigpOwogCiAgICAgaWYgKHNlbGVjdGlvbi5pc05vbmUoKSkgewotICAgICAgICBz
ZWxlY3Rpb24ubW92ZVRvKHIpOworICAgICAgICAvLyBzZWxlY3Rpb24ubW92ZVRvKHIpOworICAg
ICAgICBzZWxlY3Rpb24uc2V0U2VsZWN0ZWRSYW5nZShuZXdSYW5nZSwgVlBfREVGQVVMVF9BRkZJ
TklUWSwgZmFsc2UsIHNlbGVjdGlvbi5pc0RpcmVjdGlvbmFsKCkpOwogICAgICAgICByZXR1cm47
CiAgICAgfQogCi0gICAgUmVmUHRyPFJhbmdlPiByYW5nZSA9IHNlbGVjdGlvbi5zZWxlY3Rpb24o
KS50b05vcm1hbGl6ZWRSYW5nZSgpOwotICAgIGlmIChyLT5jb21wYXJlQm91bmRhcnlQb2ludHMo
UmFuZ2U6OlNUQVJUX1RPX1NUQVJULCByYW5nZS5nZXQoKSwgSUdOT1JFX0VYQ0VQVElPTikgPT0g
LTEpIHsKLSAgICAgICAgLy8gV2UgZG9uJ3Qgc3VwcG9ydCBkaXNjb250aWd1b3VzIHNlbGVjdGlv
bi4gV2UgZG9uJ3QgZG8gYW55dGhpbmcgaWYgciBhbmQgcmFuZ2UgZG9uJ3QgaW50ZXJzZWN0Lgot
ICAgICAgICBpZiAoci0+Y29tcGFyZUJvdW5kYXJ5UG9pbnRzKFJhbmdlOjpTVEFSVF9UT19FTkQs
IHJhbmdlLmdldCgpLCBJR05PUkVfRVhDRVBUSU9OKSA+IC0xKSB7Ci0gICAgICAgICAgICBpZiAo
ci0+Y29tcGFyZUJvdW5kYXJ5UG9pbnRzKFJhbmdlOjpFTkRfVE9fRU5ELCByYW5nZS5nZXQoKSwg
SUdOT1JFX0VYQ0VQVElPTikgPT0gLTEpIHsKLSAgICAgICAgICAgICAgICAvLyBUaGUgb3JpZ2lu
YWwgcmFuZ2UgYW5kIHIgaW50ZXJzZWN0LgotICAgICAgICAgICAgICAgIHNlbGVjdGlvbi5tb3Zl
VG8oci0+c3RhcnRQb3NpdGlvbigpLCByYW5nZS0+ZW5kUG9zaXRpb24oKSwgRE9XTlNUUkVBTSk7
Ci0gICAgICAgICAgICB9IGVsc2UgewotICAgICAgICAgICAgICAgIC8vIHIgY29udGFpbnMgdGhl
IG9yaWdpbmFsIHJhbmdlLgotICAgICAgICAgICAgICAgIHNlbGVjdGlvbi5tb3ZlVG8ocik7Ci0g
ICAgICAgICAgICB9Ci0gICAgICAgIH0KLSAgICB9IGVsc2UgewotICAgICAgICAvLyBXZSBkb24n
dCBzdXBwb3J0IGRpc2NvbnRpZ3VvdXMgc2VsZWN0aW9uLiBXZSBkb24ndCBkbyBhbnl0aGluZyBp
ZiByIGFuZCByYW5nZSBkb24ndCBpbnRlcnNlY3QuCi0gICAgICAgIEV4Y2VwdGlvbkNvZGUgZWMg
PSAwOwotICAgICAgICBpZiAoci0+Y29tcGFyZUJvdW5kYXJ5UG9pbnRzKFJhbmdlOjpFTkRfVE9f
U1RBUlQsIHJhbmdlLmdldCgpLCBlYykgPCAxICYmICFlYykgewotICAgICAgICAgICAgaWYgKHIt
PmNvbXBhcmVCb3VuZGFyeVBvaW50cyhSYW5nZTo6RU5EX1RPX0VORCwgcmFuZ2UuZ2V0KCksIElH
Tk9SRV9FWENFUFRJT04pID09IC0xKSB7Ci0gICAgICAgICAgICAgICAgLy8gVGhlIG9yaWdpbmFs
IHJhbmdlIGNvbnRhaW5zIHIuCi0gICAgICAgICAgICAgICAgc2VsZWN0aW9uLm1vdmVUbyhyYW5n
ZS5nZXQoKSk7Ci0gICAgICAgICAgICB9IGVsc2UgewotICAgICAgICAgICAgICAgIC8vIFRoZSBv
cmlnaW5hbCByYW5nZSBhbmQgciBpbnRlcnNlY3QuCi0gICAgICAgICAgICAgICAgc2VsZWN0aW9u
Lm1vdmVUbyhyYW5nZS0+c3RhcnRQb3NpdGlvbigpLCByLT5lbmRQb3NpdGlvbigpLCBET1dOU1RS
RUFNKTsKLSAgICAgICAgICAgIH0KLSAgICAgICAgfQorICAgIFJlZlB0cjxSYW5nZT4gb3JpZ2lu
YWxSYW5nZSA9IHNlbGVjdGlvbi5maXJzdFJhbmdlKCk7CisKKyAgICBpZiAoJm9yaWdpbmFsUmFu
Z2UtPnN0YXJ0Q29udGFpbmVyKCktPmRvY3VtZW50KCkgIT0gJm5ld1JhbmdlLT5zdGFydENvbnRh
aW5lcigpLT5kb2N1bWVudCgpKSB7CisgICAgICAgIGFkZENvbnNvbGVFcnJvcigiVGhlIGdpdmVu
IHJhbmdlIGRvZXMgbm90IGJlbG9uZyB0byB0aGUgY3VycmVudCBzZWxlY3Rpb24ncyBkb2N1bWVu
dC4iKTsKKyAgICAgICAgcmV0dXJuOwogICAgIH0KKyAgICBpZiAoJm9yaWdpbmFsUmFuZ2UtPnN0
YXJ0Q29udGFpbmVyKCktPnRyZWVTY29wZSgpICE9ICZuZXdSYW5nZS0+c3RhcnRDb250YWluZXIo
KS0+dHJlZVNjb3BlKCkpIHsKKyAgICAgICAgYWRkQ29uc29sZUVycm9yKCJUaGUgZ2l2ZW4gcmFu
Z2UgYW5kIHRoZSBjdXJyZW50IHNlbGVjdGlvbiBiZWxvbmcgdG8gdHdvIGRpZmZlcmVudCBkb2N1
bWVudCBmcmFnbWVudHMuIik7CisgICAgICAgIHJldHVybjsKKyAgICB9CisKKyAgICBpZiAob3Jp
Z2luYWxSYW5nZS0+Y29tcGFyZUJvdW5kYXJ5UG9pbnRzKFJhbmdlOjpTVEFSVF9UT19FTkQsIG5l
d1JhbmdlLCBBU1NFUlRfTk9fRVhDRVBUSU9OKSA8IDAKKyAgICAgICAgfHwgbmV3UmFuZ2UtPmNv
bXBhcmVCb3VuZGFyeVBvaW50cyhSYW5nZTo6U1RBUlRfVE9fRU5ELCBvcmlnaW5hbFJhbmdlLmdl
dCgpLCBBU1NFUlRfTk9fRVhDRVBUSU9OKSA8IDApIHsKKyAgICAgICAgYWRkQ29uc29sZUVycm9y
KCJEaXNjb250aWd1b3VzIHNlbGVjdGlvbiBpcyBub3Qgc3VwcG9ydGVkLiIpOworICAgICAgICBy
ZXR1cm47CisgICAgfQorCisgICAgaWYgKG9yaWdpbmFsUmFuZ2UtPmNvbXBhcmVCb3VuZGFyeVBv
aW50cyhSYW5nZTo6U1RBUlRfVE9fRU5ELCBuZXdSYW5nZSwgQVNTRVJUX05PX0VYQ0VQVElPTikg
PCAwCisgICAgICAgIHx8IG5ld1JhbmdlLT5jb21wYXJlQm91bmRhcnlQb2ludHMoUmFuZ2U6OlNU
QVJUX1RPX0VORCwgb3JpZ2luYWxSYW5nZS5nZXQoKSwgQVNTRVJUX05PX0VYQ0VQVElPTikgPCAw
KSB7CisgICAgICAgIGFkZENvbnNvbGVFcnJvcigiRGlzY29udGlndW91cyBzZWxlY3Rpb24gaXMg
bm90IHN1cHBvcnRlZC4iKTsKKyAgICAgICAgcmV0dXJuOworICAgIH0KKworICAgIC8vIEZJWE1F
OiAiTWVyZ2UgdGhlIHJhbmdlcyBpZiB0aGV5IGludGVyc2VjdCIgaXMgQmxpbmstc3BlY2lmaWMg
YmVoYXZpb3I7IG90aGVyIGJyb3dzZXJzIHN1cHBvcnRpbmcgZGlzY29udGlndW91cworICAgIC8v
IHNlbGVjdGlvbiAob2J2aW91c2x5KSBrZWVwIGVhY2ggUmFuZ2UgYWRkZWQgYW5kIHJldHVybiBp
dCBpbiBnZXRSYW5nZUF0KCkuIEJ1dCBpdCdzIHVuY2xlYXIgaWYgd2UgY2FuIHJlYWxseQorICAg
IC8vIGRvIHRoZSBzYW1lLCBzaW5jZSB3ZSBkb24ndCBzdXBwb3J0IGRpc2NvbnRpZ3VvdXMgc2Vs
ZWN0aW9uLiBGdXJ0aGVyIGRpc2N1c3Npb25zIGF0CisgICAgLy8gPGh0dHBzOi8vY29kZS5nb29n
bGUuY29tL3AvY2hyb21pdW0vaXNzdWVzL2RldGFpbD9pZD0zNTMwNjk+LgorCisgICAgUmFuZ2Uq
IHN0YXJ0ID0gb3JpZ2luYWxSYW5nZS0+Y29tcGFyZUJvdW5kYXJ5UG9pbnRzKFJhbmdlOjpTVEFS
VF9UT19TVEFSVCwgbmV3UmFuZ2UsIEFTU0VSVF9OT19FWENFUFRJT04pIDwgMCA/IG9yaWdpbmFs
UmFuZ2UuZ2V0KCkgOiBuZXdSYW5nZTsKKyAgICBSYW5nZSogZW5kID0gb3JpZ2luYWxSYW5nZS0+
Y29tcGFyZUJvdW5kYXJ5UG9pbnRzKFJhbmdlOjpFTkRfVE9fRU5ELCBuZXdSYW5nZSwgQVNTRVJU
X05PX0VYQ0VQVElPTikgPCAwID8gbmV3UmFuZ2UgOiBvcmlnaW5hbFJhbmdlLmdldCgpOworICAg
IFJlZlB0cjxSYW5nZT4gbWVyZ2VkID0gUmFuZ2U6OmNyZWF0ZShvcmlnaW5hbFJhbmdlLT5zdGFy
dENvbnRhaW5lcigpLT5kb2N1bWVudCgpLCBzdGFydC0+c3RhcnRDb250YWluZXIoKSwgc3RhcnQt
PnN0YXJ0T2Zmc2V0KCksIGVuZC0+ZW5kQ29udGFpbmVyKCksIGVuZC0+ZW5kT2Zmc2V0KCkpOwor
ICAgIEVBZmZpbml0eSBhZmZpbml0eSA9IHNlbGVjdGlvbi5zZWxlY3Rpb24oKS5hZmZpbml0eSgp
OworICAgIHNlbGVjdGlvbi5zZXRTZWxlY3RlZFJhbmdlKG1lcmdlZC5nZXQoKSwgYWZmaW5pdHks
IGZhbHNlLCBzZWxlY3Rpb24uaXNEaXJlY3Rpb25hbCgpKTsKKwogfQogCiB2b2lkIERPTVNlbGVj
dGlvbjo6ZGVsZXRlRnJvbURvY3VtZW50KCkKQEAgLTUzNCw0ICs1NjMsMTAgQEAKICAgICByZXR1
cm4gJm5vZGUtPmRvY3VtZW50KCkgPT0gbV9mcmFtZS0+ZG9jdW1lbnQoKTsKIH0KIAordm9pZCBE
T01TZWxlY3Rpb246OmFkZENvbnNvbGVFcnJvcihjb25zdCBTdHJpbmcmIG1lc3NhZ2UpCit7Cisg
ICAgQVNTRVJUKG1fZnJhbWUpOworICAgIG1fZnJhbWUtPmRvY3VtZW50KCktPmFkZENvbnNvbGVN
ZXNzYWdlKE1lc3NhZ2VTb3VyY2U6OkpTLCBNZXNzYWdlTGV2ZWw6OkVycm9yLCBtZXNzYWdlKTsK
K30KKwogfSAvLyBuYW1lc3BhY2UgV2ViQ29yZQpJbmRleDogU291cmNlL1dlYkNvcmUvcGFnZS9E
T01TZWxlY3Rpb24uaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9wYWdlL0RPTVNlbGVj
dGlvbi5oCShyZXZpc2lvbiAxNzQzMjQpCisrKyBTb3VyY2UvV2ViQ29yZS9wYWdlL0RPTVNlbGVj
dGlvbi5oCSh3b3JraW5nIGNvcHkpCkBAIC03Nyw2ICs3Nyw3IEBACiAgICAgICAgIGJvb2wgaXND
b2xsYXBzZWQoKSBjb25zdDsKICAgICAgICAgaW50IHJhbmdlQ291bnQoKSBjb25zdDsKICAgICAg
ICAgdm9pZCBjb2xsYXBzZShOb2RlKiwgaW50IG9mZnNldCwgRXhjZXB0aW9uQ29kZSYpOworICAg
ICAgICB2b2lkIGNvbGxhcHNlKE5vZGUqLCBFeGNlcHRpb25Db2RlJik7CiAgICAgICAgIHZvaWQg
Y29sbGFwc2VUb0VuZChFeGNlcHRpb25Db2RlJik7CiAgICAgICAgIHZvaWQgY29sbGFwc2VUb1N0
YXJ0KEV4Y2VwdGlvbkNvZGUmKTsKICAgICAgICAgdm9pZCBleHRlbmQoTm9kZSosIGludCBvZmZz
ZXQsIEV4Y2VwdGlvbkNvZGUmKTsKQEAgLTkzLDggKzk0LDYgQEAKICAgICAgICAgdm9pZCBlbXB0
eSgpOwogCiAgICAgcHJpdmF0ZToKLSAgICAgICAgY29uc3QgVHJlZVNjb3BlKiBtX3RyZWVTY29w
ZTsKLQogICAgICAgICBleHBsaWNpdCBET01TZWxlY3Rpb24oY29uc3QgVHJlZVNjb3BlKik7CiAK
ICAgICAgICAgLy8gQ29udmVuaWVuY2UgbWV0aG9kIGZvciBhY2Nlc3NvcnMsIGRvZXMgbm90IE5V
TEwgY2hlY2sgbV9mcmFtZS4KQEAgLTEwNCw2ICsxMDMsMTAgQEAKICAgICAgICAgaW50IHNoYWRv
d0FkanVzdGVkT2Zmc2V0KGNvbnN0IFBvc2l0aW9uJikgY29uc3Q7CiAKICAgICAgICAgYm9vbCBp
c1ZhbGlkRm9yUG9zaXRpb24oTm9kZSopIGNvbnN0OworCisgICAgICAgIHZvaWQgYWRkQ29uc29s
ZUVycm9yKGNvbnN0IFN0cmluZyYgbWVzc2FnZSk7CisKKyAgICAgICAgY29uc3QgVHJlZVNjb3Bl
KiBtX3RyZWVTY29wZTsKICAgICB9OwogCiB9IC8vIG5hbWVzcGFjZSBXZWJDb3JlCkluZGV4OiBT
b3VyY2UvV2ViQ29yZS9wYWdlL0RPTVNlbGVjdGlvbi5pZGwKPT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNl
L1dlYkNvcmUvcGFnZS9ET01TZWxlY3Rpb24uaWRsCShyZXZpc2lvbiAxNzQzMjQpCisrKyBTb3Vy
Y2UvV2ViQ29yZS9wYWdlL0RPTVNlbGVjdGlvbi5pZGwJKHdvcmtpbmcgY29weSkKQEAgLTQxLDgg
KzQxLDEwIEBACiAgICAgcmVhZG9ubHkgYXR0cmlidXRlIGJvb2xlYW4gaXNDb2xsYXBzZWQ7CiAg
ICAgcmVhZG9ubHkgYXR0cmlidXRlIGxvbmcgcmFuZ2VDb3VudDsKIAotICAgIFtSYWlzZXNFeGNl
cHRpb25dIHZvaWQgY29sbGFwc2UoW0RlZmF1bHQ9VW5kZWZpbmVkXSBvcHRpb25hbCBOb2RlIG5v
ZGUsIAotICAgICAgICAgICAgICAgICAgW0RlZmF1bHQ9VW5kZWZpbmVkXSBvcHRpb25hbCBsb25n
IGluZGV4KTsKKyAgICAvLyBbUmFpc2VzRXhjZXB0aW9uXSB2b2lkIGNvbGxhcHNlKFtEZWZhdWx0
PVVuZGVmaW5lZF0gb3B0aW9uYWwgTm9kZSBub2RlLCAKKyAgICAgICAgICAgICAgICAgIC8vIFtE
ZWZhdWx0PVVuZGVmaW5lZF0gb3B0aW9uYWwgbG9uZyBpbmRleCk7CisgICAgW1JhaXNlc0V4Y2Vw
dGlvbiwgU3RyaWN0VHlwZUNoZWNraW5nXSB2b2lkIGNvbGxhcHNlKE5vZGUgbm9kZSwKKyAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgb3B0aW9u
YWwgbG9uZyBvZmZzZXQpOwogICAgIFtSYWlzZXNFeGNlcHRpb25dIHZvaWQgY29sbGFwc2VUb0Vu
ZCgpOwogICAgIFtSYWlzZXNFeGNlcHRpb25dIHZvaWQgY29sbGFwc2VUb1N0YXJ0KCk7CiAKQEAg
LTc5LDYgKzgxLDkgQEAKICAgICAgICAgICAgICAgICAgICAgICAgICAgW0RlZmF1bHQ9VW5kZWZp
bmVkXSBvcHRpb25hbCBsb25nIGJhc2VPZmZzZXQsIAogICAgICAgICAgICAgICAgICAgICAgICAg
ICBbRGVmYXVsdD1VbmRlZmluZWRdIG9wdGlvbmFsIE5vZGUgZXh0ZW50Tm9kZSwgCiAgICAgICAg
ICAgICAgICAgICAgICAgICAgIFtEZWZhdWx0PVVuZGVmaW5lZF0gb3B0aW9uYWwgbG9uZyBleHRl
bnRPZmZzZXQpOworICAgIFtJbXBsZW1lbnRlZEFzPWNvbGxhcHNlLCAvKiBNZWFzdXJlQXM9U2Vs
ZWN0aW9uU2V0UG9zaXRpb24sICovIFJhaXNlc0V4Y2VwdGlvbiwgU3RyaWN0VHlwZUNoZWNraW5n
XSB2b2lkIHNldFBvc2l0aW9uKE5vZGUgbm9kZSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBvcHRpb25hbCBsb25nIG9mZnNldCk7CisK
ICAgICBbUmFpc2VzRXhjZXB0aW9uXSB2b2lkIHNldFBvc2l0aW9uKFtEZWZhdWx0PVVuZGVmaW5l
ZF0gb3B0aW9uYWwgTm9kZSBub2RlLCAKICAgICAgICAgICAgICAgICAgICAgIFtEZWZhdWx0PVVu
ZGVmaW5lZF0gb3B0aW9uYWwgbG9uZyBvZmZzZXQpOwogCkluZGV4OiBTb3VyY2UvV2ViQ29yZS9y
ZW5kZXJpbmcvSW5saW5lQm94LmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9yZW5k
ZXJpbmcvSW5saW5lQm94LmNwcAkocmV2aXNpb24gMTc0MzI0KQorKysgU291cmNlL1dlYkNvcmUv
cmVuZGVyaW5nL0lubGluZUJveC5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTIzNSw4ICsyMzUsOSBA
QAogICAgIElubGluZUJveCogbGVhZiA9IDA7CiAgICAgZm9yIChJbmxpbmVCb3gqIGJveCA9IHBy
ZXZPbkxpbmUoKTsgYm94ICYmICFsZWFmOyBib3ggPSBib3gtPnByZXZPbkxpbmUoKSkKICAgICAg
ICAgbGVhZiA9IGJveC0+aXNMZWFmKCkgPyBib3ggOiB0b0lubGluZUZsb3dCb3goYm94KS0+bGFz
dExlYWZDaGlsZCgpOwotICAgIGlmICghbGVhZiAmJiBwYXJlbnQoKSkKKyAgICBpZiAoIWxlYWYg
JiYgcGFyZW50KCkpIHsKICAgICAgICAgbGVhZiA9IHBhcmVudCgpLT5wcmV2TGVhZkNoaWxkKCk7
CisgICAgfQogICAgIHJldHVybiBsZWFmOwogfQogCkluZGV4OiBTb3VyY2UvV2ViQ29yZS9yZW5k
ZXJpbmcvSW5saW5lRmxvd0JveC5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvcmVu
ZGVyaW5nL0lubGluZUZsb3dCb3guY3BwCShyZXZpc2lvbiAxNzQzMjQpCisrKyBTb3VyY2UvV2Vi
Q29yZS9yZW5kZXJpbmcvSW5saW5lRmxvd0JveC5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTEsNSAr
MSw2IEBACiAvKgogICogQ29weXJpZ2h0IChDKSAyMDAzLCAyMDA0LCAyMDA1LCAyMDA2LCAyMDA3
LCAyMDA4LCAyMDA5IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqIFBvcnRpb25z
IENvcHlyaWdodCAoYykgMjAxNCBEYXZpZCBBLiBHYXR3b29kLiAgQWxsIHJpZ2h0cyByZXNlcnZl
ZC4KICAqCiAgKiBUaGlzIGxpYnJhcnkgaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3Ry
aWJ1dGUgaXQgYW5kL29yCiAgKiBtb2RpZnkgaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUg
TGlicmFyeSBHZW5lcmFsIFB1YmxpYwpAQCAtMTE1Miw3ICsxMTUzLDcgQEAKICAgICAvLyBQYWlu
dCBvdXIgY2hpbGRyZW4uCiAgICAgaWYgKHBhaW50UGhhc2UgIT0gUGFpbnRQaGFzZVNlbGZPdXRs
aW5lKSB7CiAgICAgICAgIGZvciAoSW5saW5lQm94KiBjdXJyID0gZmlyc3RDaGlsZCgpOyBjdXJy
OyBjdXJyID0gY3Vyci0+bmV4dE9uTGluZSgpKSB7Ci0gICAgICAgICAgICBpZiAoY3Vyci0+cmVu
ZGVyZXIoKS5pc1RleHQoKSB8fCAhY3Vyci0+Ym94TW9kZWxPYmplY3QoKS0+aGFzU2VsZlBhaW50
aW5nTGF5ZXIoKSkKKyAgICAgICAgICAgIGlmIChjdXJyLT5yZW5kZXJlcigpLmlzVGV4dCgpIHx8
IC8qY3Vyci0+cmVuZGVyZXIoKS5pc1BzZXVkb0VsZW1lbnQoKSB8fCovICFjdXJyLT5ib3hNb2Rl
bE9iamVjdCgpLT5oYXNTZWxmUGFpbnRpbmdMYXllcigpKQogICAgICAgICAgICAgICAgIGN1cnIt
PnBhaW50KGNoaWxkSW5mbywgcGFpbnRPZmZzZXQsIGxpbmVUb3AsIGxpbmVCb3R0b20pOwogICAg
ICAgICB9CiAgICAgfQpAQCAtMTYzNyw3ICsxNjM4LDUwIEBACiAgICAgICAgICsrbWluTGV2ZWw7
CiAgICAgfQogfQorICAgIAorYm9vbCBJbmxpbmVGbG93Qm94Ojppc0xlYWYoKSBjb25zdAorewor
ICAgIElubGluZUJveCAqcG9zID0gbV9maXJzdENoaWxkOworICAgIAorICAgIGlmICghcG9zKSB7
CisgICAgICAgIC8vIEluIHByYWN0aWNlLCB0aGlzIHNob3VsZCBuZXZlciBoYXBwZW4uCisgICAg
ICAgIHJldHVybiB0cnVlOworICAgIH0KKyAgICAKKyAgICAvKiBUaGUgYm94IGlzIG5vcm1hbGx5
IG5vdCBhIGxlYWYuICBIb3dldmVyLCB0cmVhdCBpdCBhcyBhIGxlYWYgaWYgaXRzIGJveAorICAg
ICAgIGNvbnRhaW5zIG5vdGhpbmcgYnV0IDo6YmVmb3JlIGFuZCA6OmFmdGVyIHBzZXVkb2VsZW1l
bnRzLgorICAgICAqLworICAgIHdoaWxlICgoISZwb3MtPnJlbmRlcmVyKCkpIHx8IHBvcy0+cmVu
ZGVyZXIoKS5pc0Fub255bW91cygpIHx8ICFwb3MtPnJlbmRlcmVyKCkubm9uUHNldWRvTm9kZSgp
KSB7CisgICAgICAgIAorICAgICAgICAvKiBJZiBpdCdzIGEgYm94IHRoYXQgY29udGFpbnMgb3Ro
ZXIgYm94ZXMsIGFuZCBpZiBpdCBpc24ndCB0aGUgYm94IGZvciBhCisgICAgICAgICAgIHBzZXVk
b2VsZW1lbnQsIGV4YW1pbmUgaXRzIGNoaWxkcmVuIG5leHQuICBJZiBpdCdzIGEgcHNldWRvZWxl
bWVudAorICAgICAgICAgICBkb24ndCBsb29rIGluc2lkZS4KKyAgICAgICAgICovCisgICAgICAg
IGlmIChwb3MtPmlzSW5saW5lRmxvd0JveCgpICYmIHBvcy0+cmVuZGVyZXIoKS5ub25Qc2V1ZG9O
b2RlKCkpIHsKKyAgICAgICAgICAgIElubGluZUZsb3dCb3ggKnRlbXAgPSBzdGF0aWNfY2FzdDxJ
bmxpbmVGbG93Qm94ICo+KHBvcyk7CisgICAgICAgICAgICBpZiAodGVtcC0+Zmlyc3RDaGlsZCgp
KSB7CisgICAgICAgICAgICAgICAgcG9zID0gdGVtcC0+Zmlyc3RDaGlsZCgpOworICAgICAgICAg
ICAgICAgIGNvbnRpbnVlOworICAgICAgICAgICAgfQorICAgICAgICB9CisgICAgICAgIElubGlu
ZUJveCAqbmV4dCA9IHBvcy0+bmV4dE9uTGluZSgpOworICAgICAgICBpZiAobmV4dCkgeworICAg
ICAgICAgICAgcG9zID0gbmV4dDsKKyAgICAgICAgICAgIGNvbnRpbnVlOworICAgICAgICB9Cisg
ICAgICAgIHdoaWxlIChwb3MtPnBhcmVudCgpICYmIHBvcy0+cGFyZW50KCkgIT0gdGhpcyAmJiAh
cG9zLT5wYXJlbnQoKS0+bmV4dE9uTGluZSgpKSB7CisgICAgICAgICAgICBwb3MgPSBwb3MtPnBh
cmVudCgpOworICAgICAgICB9CisgICAgICAgIHBvcyA9IHBvcy0+cGFyZW50KCk7CisgICAgICAg
IGlmICghcG9zKSByZXR1cm4gdHJ1ZTsKKyAgICAgICAgaWYgKHBvcyA9PSB0aGlzKSByZXR1cm4g
dHJ1ZTsKKyAgICAgICAgcG9zID0gcG9zLT5uZXh0T25MaW5lKCk7CisgICAgfQorICAgIAorICAg
IHJldHVybiBmYWxzZTsKK30KIAorCiAjaWZuZGVmIE5ERUJVRwogCiBjb25zdCBjaGFyKiBJbmxp
bmVGbG93Qm94Ojpib3hOYW1lKCkgY29uc3QKSW5kZXg6IFNvdXJjZS9XZWJDb3JlL3JlbmRlcmlu
Zy9JbmxpbmVGbG93Qm94LmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvcmVuZGVyaW5n
L0lubGluZUZsb3dCb3guaAkocmV2aXNpb24gMTc0MzI0KQorKysgU291cmNlL1dlYkNvcmUvcmVu
ZGVyaW5nL0lubGluZUZsb3dCb3guaAkod29ya2luZyBjb3B5KQpAQCAtODUsOSArODUsOSBAQAog
CiAgICAgSW5saW5lQm94KiBmaXJzdENoaWxkKCkgY29uc3QgeyBjaGVja0NvbnNpc3RlbmN5KCk7
IHJldHVybiBtX2ZpcnN0Q2hpbGQ7IH0KICAgICBJbmxpbmVCb3gqIGxhc3RDaGlsZCgpIGNvbnN0
IHsgY2hlY2tDb25zaXN0ZW5jeSgpOyByZXR1cm4gbV9sYXN0Q2hpbGQ7IH0KLQotICAgIHZpcnR1
YWwgYm9vbCBpc0xlYWYoKSBjb25zdCBvdmVycmlkZSBmaW5hbCB7IHJldHVybiBmYWxzZTsgfQog
ICAgIAorICAgIGJvb2wgaXNMZWFmKCkgY29uc3Qgb3ZlcnJpZGUgZmluYWw7CisgICAgCiAgICAg
SW5saW5lQm94KiBmaXJzdExlYWZDaGlsZCgpIGNvbnN0OwogICAgIElubGluZUJveCogbGFzdExl
YWZDaGlsZCgpIGNvbnN0OwogCkBAIC0zMDAsNiArMzAwLDcgQEAKICAgICB2b2lkIGFkZFRleHRC
b3hWaXN1YWxPdmVyZmxvdyhJbmxpbmVUZXh0Qm94JiwgR2x5cGhPdmVyZmxvd0FuZEZhbGxiYWNr
Rm9udHNNYXAmLCBMYXlvdXRSZWN0JiBsb2dpY2FsVmlzdWFsT3ZlcmZsb3cpOwogICAgIHZvaWQg
YWRkUmVwbGFjZWRDaGlsZE92ZXJmbG93KGNvbnN0IElubGluZUJveCosIExheW91dFJlY3QmIGxv
Z2ljYWxMYXlvdXRPdmVyZmxvdywgTGF5b3V0UmVjdCYgbG9naWNhbFZpc3VhbE92ZXJmbG93KTsK
ICAgICB2b2lkIGNvbnN0cmFpblRvTGluZVRvcEFuZEJvdHRvbUlmTmVlZGVkKExheW91dFJlY3Qm
KSBjb25zdDsKKyAgICAKIAogcHJvdGVjdGVkOgogICAgIFJlZlB0cjxSZW5kZXJPdmVyZmxvdz4g
bV9vdmVyZmxvdzsKSW5kZXg6IFNvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9SZW5kZXJCbG9ja0Zs
b3cuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9SZW5kZXJCbG9j
a0Zsb3cuY3BwCShyZXZpc2lvbiAxNzQzMjQpCisrKyBTb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcv
UmVuZGVyQmxvY2tGbG93LmNwcAkod29ya2luZyBjb3B5KQpAQCAtMzM1Myw3ICszMzUzLDExIEBA
CiAgICAgICAgICAgICBwb2ludCA9IHBvaW50LnRyYW5zcG9zZWRQb2ludCgpOwogICAgICAgICBp
ZiAoY2xvc2VzdEJveC0+cmVuZGVyZXIoKS5pc1JlcGxhY2VkKCkpCiAgICAgICAgICAgICByZXR1
cm4gcG9zaXRpb25Gb3JQb2ludFJlc3BlY3RpbmdFZGl0aW5nQm91bmRhcmllcygqdGhpcywgdG9S
ZW5kZXJCb3goY2xvc2VzdEJveC0+cmVuZGVyZXIoKSksIHBvaW50KTsKLSAgICAgICAgcmV0dXJu
IGNsb3Nlc3RCb3gtPnJlbmRlcmVyKCkucG9zaXRpb25Gb3JQb2ludChwb2ludCwgbnVsbHB0cik7
CisgICAgICAgIGlmICghY2xvc2VzdEJveC0+cmVuZGVyZXIoKS5pc1JlbmRlcklubGluZSgpIHx8
ICF0b1JlbmRlcklubGluZShjbG9zZXN0Qm94LT5yZW5kZXJlcigpKS5maXJzdExpbmVCb3goKSkg
eworICAgICAgICAgICAgLyogRG8gdGhpcyBvbmx5IGlmIGl0J3Mgbm90IGEgUmVuZGVySW5saW5l
IG9iamVjdCB3aXRoIGEgZmlyc3QgbGluZSBib3gsIG9yIGVsc2UgaXQgd2lsbAorICAgICAgICAg
ICAgICAgY2FsbCBiYWNrIHRvIGl0cyBlbmNsb3NpbmcgbGluZSBib3gsIGFuZCB3ZSdsbCBlbmQg
dXAgd2l0aCBpbmZpbml0ZSByZWN1cnNpb24uICovCisgICAgICAgICAgICByZXR1cm4gY2xvc2Vz
dEJveC0+cmVuZGVyZXIoKS5wb3NpdGlvbkZvclBvaW50KHBvaW50LCBudWxscHRyKTsKKyAgICAg
ICAgfQogICAgIH0KIAogICAgIGlmIChsYXN0Um9vdEJveFdpdGhDaGlsZHJlbikgewpJbmRleDog
U291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL1JlbmRlckJveC5jcHAKPT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291
cmNlL1dlYkNvcmUvcmVuZGVyaW5nL1JlbmRlckJveC5jcHAJKHJldmlzaW9uIDE3NDMyNCkKKysr
IFNvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9SZW5kZXJCb3guY3BwCSh3b3JraW5nIGNvcHkpCkBA
IC0zNiwxMiArMzYsMTYgQEAKICNpbmNsdWRlICJHcmFwaGljc0NvbnRleHQuaCIKICNpbmNsdWRl
ICJIVE1MQnV0dG9uRWxlbWVudC5oIgogI2luY2x1ZGUgIkhUTUxFbGVtZW50LmgiCisjaW5jbHVk
ZSAiUHNldWRvRWxlbWVudC5oIgogI2luY2x1ZGUgIkhUTUxGcmFtZU93bmVyRWxlbWVudC5oIgog
I2luY2x1ZGUgIkhUTUxJbnB1dEVsZW1lbnQuaCIKICNpbmNsdWRlICJIVE1MTmFtZXMuaCIKICNp
bmNsdWRlICJIVE1MVGV4dEFyZWFFbGVtZW50LmgiCiAjaW5jbHVkZSAiSGl0VGVzdFJlc3VsdC5o
IgogI2luY2x1ZGUgIklubGluZUVsZW1lbnRCb3guaCIKKyNpbmNsdWRlICJJbmxpbmVUZXh0Qm94
LmgiCisjaW5jbHVkZSAiTm9kZS5oIgorI2luY2x1ZGUgIk5vZGVMaXN0LmgiCiAjaW5jbHVkZSAi
UGFnZS5oIgogI2luY2x1ZGUgIlBhaW50SW5mby5oIgogI2luY2x1ZGUgIlJlbmRlckJveFJlZ2lv
bkluZm8uaCIKQEAgLTU2LDggKzYwLDEwIEBACiAjaW5jbHVkZSAiUmVuZGVyVGFibGVDZWxsLmgi
CiAjaW5jbHVkZSAiUmVuZGVyVGhlbWUuaCIKICNpbmNsdWRlICJSZW5kZXJWaWV3LmgiCisjaW5j
bHVkZSAiUmVuZGVyVGV4dC5oIgogI2luY2x1ZGUgIlNjcm9sbGJhclRoZW1lLmgiCiAjaW5jbHVk
ZSAiVHJhbnNmb3JtU3RhdGUuaCIKKyNpbmNsdWRlICJWaXNpYmxlUG9zaXRpb24uaCIKICNpbmNs
dWRlICJodG1sZWRpdGluZy5oIgogI2luY2x1ZGUgPGFsZ29yaXRobT4KICNpbmNsdWRlIDxtYXRo
Lmg+CkBAIC00MTE3LDI2ICs0MTIzLDI0MCBAQAogICAgIGNvbXB1dGVkVmFsdWVzLm1fcG9zaXRp
b24gPSBsb2dpY2FsVG9wUG9zOwogfQogCitib29sIFJlbmRlckJveDo6Y29tcHV0ZVJlY3RGb3JQ
c2V1ZG9FbGVtZW50KFJlbmRlck9iamVjdCAqZWxlbWVudFJlbmRlcmVyLCBSZW5kZXJFbGVtZW50
ICpwc2V1ZG9FbGVtZW50UmVuZGVyZXIsIGJvb2wgZmlyc3QsIExheW91dFJlY3QgJmxvY2FsUmVj
dCkKK3sKKyAgICBpZiAocHNldWRvRWxlbWVudFJlbmRlcmVyLT5lbGVtZW50KCkpIHsKKyAgICAg
ICAgUHNldWRvRWxlbWVudCAqcGUgPSBmaXJzdCA/IHBzZXVkb0VsZW1lbnRSZW5kZXJlci0+ZWxl
bWVudCgpLT5iZWZvcmVQc2V1ZG9FbGVtZW50KCkgOiBwc2V1ZG9FbGVtZW50UmVuZGVyZXItPmVs
ZW1lbnQoKS0+YWZ0ZXJQc2V1ZG9FbGVtZW50KCk7CisgICAgICAgIAorICAgICAgICBpZiAocGUp
IHsKKyAgICAgICAgICAgIGxvY2FsUmVjdCA9IHBlLT5yZW5kZXJlcigpLT5sb2NhbENhcmV0UmVj
dChOVUxMLCAwKTsKKyAgICAgICAgICAgIExheW91dFNpemUgb2Zmc2V0ID0gcHNldWRvRWxlbWVu
dFJlbmRlcmVyLT5vZmZzZXRGcm9tQW5jZXN0b3JDb250YWluZXIodGhpcyk7CisgICAgICAgICAg
ICAKKyAgICAgICAgICAgIGxvY2FsUmVjdC5tb3ZlKG9mZnNldC53aWR0aCgpLCBvZmZzZXQuaGVp
Z2h0KCkpOworICAgICAgICAgICAgCisgICAgICAgICAgICBSZW5kZXJCb3ggKnJiID0gdG9SZW5k
ZXJCb3goZWxlbWVudFJlbmRlcmVyKTsKKyAgICAgICAgICAgIAorICAgICAgICAgICAgaWYgKGZp
cnN0KSB7CisgICAgICAgICAgICAgICAgLyogTW92ZSB0aGUgY2FyZXQgdG8gdGhlIGxlZnQgb2Yg
dGhlIHBzZXVkb2VsZW1lbnQuICovCisgICAgICAgICAgICAgICAgbG9jYWxSZWN0LnNldFgocmIt
PnRvcExlZnRMb2NhdGlvbigpLngoKSArIHJiLT5wYWRkaW5nTGVmdCgpKTsKKyAgICAgICAgICAg
IH0KKyAgICAgICAgICAgIAorICAgICAgICAgICAgLy8gbG9jYWxSZWN0Lm1vdmUocHNldWRvRWxl
bWVudFJlbmRlcmVyLT5mcmFtZVJlY3QoKS54KCksIHBzZXVkb0VsZW1lbnRSZW5kZXJlci0+ZnJh
bWVSZWN0KCkueSgpKTsKKyAgICAgICAgICAgIC8vIGxvY2FsUmVjdC5tb3ZlKC10aGlzLT5mcmFt
ZVJlY3QoKS54KCksIC10aGlzLT5mcmFtZVJlY3QoKS55KCkpOworICAgICAgICAgICAgCisgICAg
ICAgICAgICByZXR1cm4gdHJ1ZTsKKyAgICAgICAgfQorICAgICAgICAKKyAgICB9CisgICAgcmV0
dXJuIGZhbHNlOworfQorICAgIAorCisvKiBHaXZlbiBhbiBlbGVtZW50IHRoYXQgaXMgY29udGFp
bmVkIHdpdGhpbiB0aGlzIHJlbmRlcmVyJ3Mgbm9kZToKKyAKKyAgIElmIGZpcnN0IGlzIHRydWUs
IHJldHVybnMgdGhlIHVwcGVyIGxlZnQgY29ybmVyIG9mIHRoZSBmaXJzdCBpbmxpbmUgYm94IGFz
c29jaWF0ZWQgd2l0aCB0aGUgZWxlbWVudC4KKyAgIElmIGZpcnN0IGlzIGZhbHNlLCByZXR1cm5z
IHRoZSB1cHBlciAqcmlnaHQqIGNvcm5lciBvZiB0aGUgKmxhc3QqIGlubGluZSBib3guCisgKi8K
K0xheW91dFJlY3QgUmVuZGVyQm94OjpmaXJzdE9yTGFzdEJveEluRWxlbWVudChFbGVtZW50ICpl
bmNsb3NlZEVsZW1lbnQsIGJvb2wgZmlyc3QsIGludCAqbnVtTGluZUJveGVzLCBib29sICpyZWNv
bXB1dGVDdXJzb3JTaXplKQoreworICAgIFJlbmRlck9iamVjdCAqcmVuZGVyZXIgPSBlbmNsb3Nl
ZEVsZW1lbnQtPnJlbmRlcmVyKCk7CisgICAgCisgICAgaWYgKG51bUxpbmVCb3hlcykKKyAgICAg
ICAgKm51bUxpbmVCb3hlcyA9IDA7CisgICAgCisgICAgaWYgKHJlY29tcHV0ZUN1cnNvclNpemUp
CisgICAgICAgICpyZWNvbXB1dGVDdXJzb3JTaXplID0gZmFsc2U7CisgICAgCisgICAgaWYgKHJl
bmRlcmVyLT5pc1JlbmRlckJsb2NrRmxvdygpICYmICFmaXJzdCkgeworICAgICAgICAvKiBGaW5k
IHRoZSBsYXN0IGl0ZW0gaW4gdGhlIGZsb3csIG5vdCB0aGUgcmlnaHQgZWRnZSBvZiB0aGUgdG9w
IGxpbmUuICovCisgICAgICAgIFJlbmRlckJsb2NrRmxvdyAqYmxvY2tGbG93UmVuZGVyZXIgPSB0
b1JlbmRlckJsb2NrRmxvdyhyZW5kZXJlcik7CisgICAgICAgIAorICAgICAgICBJbmxpbmVGbG93
Qm94ICpmaXJzdExpbmVCb3ggPSBibG9ja0Zsb3dSZW5kZXJlci0+Zmlyc3RSb290Qm94KCk7Cisg
ICAgICAgIElubGluZUZsb3dCb3ggKmxhc3RMaW5lQm94ID0gZmlyc3QgPyBibG9ja0Zsb3dSZW5k
ZXJlci0+Zmlyc3RSb290Qm94KCkgOiBibG9ja0Zsb3dSZW5kZXJlci0+bGFzdFJvb3RCb3goKTsK
KyAgICAgICAgCisgICAgICAgIGlmICghZmlyc3RMaW5lQm94IHx8ICFsYXN0TGluZUJveCkgewor
ICAgICAgICAgICAgLyogQ2FuJ3QgZmluZCB0aGUgbGFzdCBib3guICBGYWtlIGl0LiAqLworICAg
ICAgICAgICAgTGF5b3V0UmVjdCBwZVJlY3Q7CisgICAgICAgICAgICBpZiAoY29tcHV0ZVJlY3RG
b3JQc2V1ZG9FbGVtZW50KHJlbmRlcmVyLCBibG9ja0Zsb3dSZW5kZXJlciwgZmlyc3QsIHBlUmVj
dCkpCisgICAgICAgICAgICAgICAgcmV0dXJuIHBlUmVjdDsKKyAgICAgICAgICAgIAorICAgICAg
ICAgICAgcmV0dXJuIExheW91dFJlY3QoKTsKKyAgICAgICAgfQorICAgICAgICAKKyAgICAgICAg
SW5saW5lQm94ICpsYXN0SW5saW5lQm94ID0gZmlyc3QgPyBmaXJzdExpbmVCb3gtPmZpcnN0Q2hp
bGQoKSA6IGxhc3RMaW5lQm94LT5sYXN0Q2hpbGQoKTsKKyAgICAgICAgCisgICAgICAgIExheW91
dFBvaW50IHByZXZpb3VzQm94T2Zmc2V0ID0gTGF5b3V0UG9pbnQoMCwwKTsKKyAgICAgICAgZm9y
IChJbmxpbmVGbG93Qm94ICpib3ggPSBmaXJzdExpbmVCb3g7IGJveCAhPSBsYXN0TGluZUJveDsg
Ym94ID0gYm94LT5uZXh0TGluZUJveCgpKSB7CisgICAgICAgICAgICBwcmV2aW91c0JveE9mZnNl
dC5tb3ZlKDAsIGJveC0+ZnJhbWVSZWN0KCkuaGVpZ2h0KCkpOworICAgICAgICB9CisKKyAgICAg
ICAgTGF5b3V0UmVjdCBsYXN0TGluZUJveEZyYW1lUmVjdChsYXN0TGluZUJveC0+ZnJhbWVSZWN0
KCkpOworICAgICAgICBMYXlvdXRSZWN0IGxhc3RJbmxpbmVCb3hGcmFtZVJlY3QobGFzdElubGlu
ZUJveC0+ZnJhbWVSZWN0KCkpOworCisgICAgICAgIExheW91dFBvaW50IHBvaW50ID0gTGF5b3V0
UG9pbnQocHJldmlvdXNCb3hPZmZzZXQueCgpICsgbGFzdExpbmVCb3hGcmFtZVJlY3QueCgpICsg
bGFzdElubGluZUJveEZyYW1lUmVjdC54KCksCisgICAgICAgICAgICAgICAgICAgICAgICAgICBw
cmV2aW91c0JveE9mZnNldC55KCkgKyBsYXN0TGluZUJveEZyYW1lUmVjdC55KCkgKyBsYXN0SW5s
aW5lQm94RnJhbWVSZWN0LnkoKSk7IC8vIERvbid0IGFkZCBoZWlnaHQ7IHdlIHdhbnQgdGhlIHVw
cGVyIHJpZ2h0LCBub3QgbG93ZXIuCisgICAgICAgIAorICAgICAgICBpZiAoZmlyc3RMaW5lQm94
ID09IGxhc3RMaW5lQm94KSB7CisgICAgICAgICAgICAvKiBGb3Igc29tZSByZWFzb24sIHNpbmds
ZS1saW5lIGJveGVzIHJlcG9ydCB0aGVpciBmcmFtZSBkaWZmZXJlbnRseS4gKi8KKyAgICAgICAg
ICAgIFJlbmRlckJveCAqcmIgPSB0b1JlbmRlckJveChyZW5kZXJlcik7CisgICAgICAgICAgICAK
KyAgICAgICAgICAgIExheW91dFBvaW50IGJsb2NrUG9zaXRpb24gPSByYi0+dG9wTGVmdExvY2F0
aW9uKCk7CisgICAgICAgICAgICBwb2ludC5zZXRZKGJsb2NrUG9zaXRpb24ueSgpKTsKKyAgICAg
ICAgfQorICAgICAgICByZXR1cm4gTGF5b3V0UmVjdChwb2ludC54KCksIHBvaW50LnkoKSwgbGFz
dElubGluZUJveEZyYW1lUmVjdC53aWR0aCgpLCBsYXN0SW5saW5lQm94RnJhbWVSZWN0LmhlaWdo
dCgpKTsKKyAgICB9IGVsc2UgaWYgKHJlbmRlcmVyLT5pc0JveCgpKSB7CisgICAgICAgIFJlbmRl
ckJveCAqcmIgPSB0b1JlbmRlckJveChyZW5kZXJlcik7CisKKyAgICAgICAgaWYgKHJlY29tcHV0
ZUN1cnNvclNpemUpCisgICAgICAgICAgICAqcmVjb21wdXRlQ3Vyc29yU2l6ZSA9IHRydWU7Cisg
ICAgICAgICAgICAKKyAgICAgICAgcmV0dXJuIExheW91dFJlY3QocmItPnRvcExlZnRMb2NhdGlv
bigpLngoKSArIHJiLT5wYWRkaW5nTGVmdCgpLAorICAgICAgICAgICAgICAgICAgICAgICAgICBy
Yi0+dG9wTGVmdExvY2F0aW9uKCkueSgpICsgcmItPnBhZGRpbmdUb3AoKSwKKyAgICAgICAgICAg
ICAgICAgICAgICAgICAgcmItPndpZHRoKCkgLSByYi0+cGFkZGluZ0xlZnQoKSAtIHJiLT5wYWRk
aW5nUmlnaHQoKSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgcmItPmhlaWdodCgpIC0gcmIt
PnBhZGRpbmdUb3AoKSAtIHJiLT5wYWRkaW5nQm90dG9tKCkpOworICAgIH0KKworICAgIGFzc2Vy
dChyZW5kZXJlci0+aXNJbmxpbmUoKSk7CisgICAgCisgICAgUmVuZGVySW5saW5lICpyaSA9IHRv
UmVuZGVySW5saW5lKHJlbmRlcmVyKTsKKyAgICAKKyAgICBJbmxpbmVCb3ggKmliID0gZmlyc3Qg
PyByaS0+Zmlyc3RMaW5lQm94SW5jbHVkaW5nQ3VsbGluZygpIDogcmktPmxhc3RMaW5lQm94SW5j
bHVkaW5nQ3VsbGluZygpOworICAgIAorICAgIExheW91dFJlY3QgZnJhbWVSZWN0KGliLT5mcmFt
ZVJlY3QoKSk7CisgICAgCisgICAgTGF5b3V0UG9pbnQgcmV0UG9zaXRpb24gPSBmcmFtZVJlY3Qu
bG9jYXRpb24oKTsKKyAgICAKKyAgICAvKiBCaXphcnJlbHksIGV2ZW4gdGhvdWdoIHRoZXNlIGFy
ZSBsaW5lIGJveGVzLi4uICovCisgICAgZm9yIChJbmxpbmVCb3ggKmxpbmVCb3ggPSByaS0+Zmly
c3RMaW5lQm94SW5jbHVkaW5nQ3VsbGluZygpOworICAgICAgICAgbGluZUJveCAmJiBsaW5lQm94
ICE9IGliOyBsaW5lQm94ID0gbGluZUJveC0+bmV4dE9uTGluZSgpKSB7CisgICAgICAgICAgICAg
ICAgcmV0UG9zaXRpb24ubW92ZSgwLCBsaW5lQm94LT5mcmFtZVJlY3QoKS5oZWlnaHQoKSk7Cisg
ICAgICAgICAgICAgICAgaWYgKG51bUxpbmVCb3hlcykKKyAgICAgICAgICAgICAgICAgICAgKCpu
dW1MaW5lQm94ZXMpKys7CisgICAgfQorICAgIAorICAgIGlmIChudW1MaW5lQm94ZXMpCisgICAg
ICAgICgqbnVtTGluZUJveGVzKSsrOworICAgIAorICAgIGlmICghZmlyc3QpIHsKKyAgICAgICAg
UmVuZGVyU3R5bGUgKmVsZW1lbnRTdHlsZSA9IHRoaXMtPmVsZW1lbnQoKS0+Y29tcHV0ZWRTdHls
ZSgpOworICAgICAgICByZXRQb3NpdGlvbi5tb3ZlKDAsIC1lbGVtZW50U3R5bGUtPnBhZGRpbmdC
b3R0b20oKS52YWx1ZSgpKTsKKyAgICB9CisgICAgCisgICAgcmV0dXJuIExheW91dFJlY3QocmV0
UG9zaXRpb24ueCgpLCByZXRQb3NpdGlvbi55KCksIGliLT53aWR0aCgpLCBpYi0+aGVpZ2h0KCkp
OworfQorICAgIAorCiBMYXlvdXRSZWN0IFJlbmRlckJveDo6bG9jYWxDYXJldFJlY3QoSW5saW5l
Qm94KiBib3gsIGludCBjYXJldE9mZnNldCwgTGF5b3V0VW5pdCogZXh0cmFXaWR0aFRvRW5kT2ZM
aW5lKQogewogICAgIC8vIFZpc2libGVQb3NpdGlvbnMgYXQgb2Zmc2V0cyBpbnNpZGUgY29udGFp
bmVycyBlaXRoZXIgYSkgcmVmZXIgdG8gdGhlIHBvc2l0aW9ucyBiZWZvcmUvYWZ0ZXIKLSAgICAv
LyB0aG9zZSBjb250YWluZXJzICh0YWJsZXMgYW5kIHNlbGVjdCBlbGVtZW50cykgb3IgYikgcmVm
ZXIgdG8gdGhlIHBvc2l0aW9uIGluc2lkZSBhbiBlbXB0eSBibG9jay4KLSAgICAvLyBUaGV5IG5l
dmVyIHJlZmVyIHRvIGNoaWxkcmVuLgorICAgIC8vIHRob3NlIGNvbnRhaW5lcnMgKHRhYmxlcyBh
bmQgc2VsZWN0IGVsZW1lbnRzKSwgYikgcmVmZXIgdG8gdGhlIHBvc2l0aW9uIGluc2lkZSBhbiBl
bXB0eSBibG9jaywKKyAgICAvLyBvciBjKSByZWZlciB0byB0aGUgcG9zaXRpb24gYmV0d2VlbiBh
ZGphY2VudCBjaGlsZCBlbGVtZW50cyB0aGF0IGhhdmUgOjphZnRlciBhbmQgOjpiZWZvcmUKKyAg
ICAvLyBwc2V1ZG9lbGVtZW50cy4gIEluIHRoZSBjYXNlIG9mIGMpLCAiYm94IiBpcyB0aGUgY2hp
bGQgZWxlbWVudCBhZnRlciB0aGUgaW5zZXJ0aW9uIHBvaW50LgogICAgIC8vIEZJWE1FOiBQYWlu
dCB0aGUgY2FyZXRzIGluc2lkZSBlbXB0eSBibG9ja3MgZGlmZmVyZW50bHkgdGhhbiB0aGUgY2Fy
ZXRzIGJlZm9yZS9hZnRlciBlbGVtZW50cy4KIAogICAgIExheW91dFJlY3QgcmVjdChsb2NhdGlv
bigpLCBMYXlvdXRTaXplKGNhcmV0V2lkdGgsIGhlaWdodCgpKSk7CiAgICAgYm9vbCBsdHIgPSBi
b3ggPyBib3gtPmlzTGVmdFRvUmlnaHREaXJlY3Rpb24oKSA6IHN0eWxlKCkuaXNMZWZ0VG9SaWdo
dERpcmVjdGlvbigpOwotCisgICAgCiAgICAgaWYgKCghY2FyZXRPZmZzZXQpIF4gbHRyKQotICAg
ICAgICByZWN0Lm1vdmUoTGF5b3V0U2l6ZSh3aWR0aCgpIC0gY2FyZXRXaWR0aCwgMCkpOworICAg
ICAgICAgICAgcmVjdC5tb3ZlKExheW91dFNpemUod2lkdGgoKSAtIGNhcmV0V2lkdGgsIDApKTsK
KyAgICAKKyAgICBpZiAoZWxlbWVudCgpKSB7CisgICAgICAgIE5vZGUgKmNoaWxkbm9kZTsKKyAg
ICAgICAgUmVuZGVyT2JqZWN0ICpjaGlsZE5vZGVSZW5kZXJlciA9IE5VTEw7CisgICAgICAgIAor
ICAgICAgICBib29sIGF0RW5kID0gZmFsc2U7CisgICAgICAgIHVuc2lnbmVkIG9mZnNldCA9IDA7
CisgICAgICAgIAorICAgICAgICBpZiAoY2FyZXRPZmZzZXQgPCAwKSB7CisgICAgICAgICAgICBj
aGlsZG5vZGUgPSBlbGVtZW50KCktPmJlZm9yZVBzZXVkb0VsZW1lbnQoKTsKKyAgICAgICAgICAg
IGNoaWxkTm9kZVJlbmRlcmVyID0gY2hpbGRub2RlID8gY2hpbGRub2RlLT5yZW5kZXJlcigpIDog
TlVMTDsKKyAgICAgICAgICAgIGF0RW5kID0gdHJ1ZTsKKyAgICAgICAgICAgIG9mZnNldCA9IDE7
CisgICAgICAgIH0gZWxzZSBpZiAoKHVuc2lnbmVkKWNhcmV0T2Zmc2V0IDwgZWxlbWVudCgpLT5j
b3VudENoaWxkTm9kZXMoKSkgeworICAgICAgICAgICAgY2hpbGRub2RlID0gZWxlbWVudCgpLT50
cmF2ZXJzZVRvQ2hpbGRBdChjYXJldE9mZnNldCk7CiAKKyAgICAgICAgICAgIC8qIEZvciBhIG5v
bi1yZW5kZXJlZCB0ZXh0IG5vZGUsIGlmIHRoZSBpbnNlcnRpb24gcG9pbnQKKyAgICAgICAgICAg
ICBpcyBhdCB0aGUgYmVnaW5uaW5nLCBkcmF3IHRoZSBjdXJzb3IgYWZ0ZXIgdGhlIHByZXZpb3Vz
CisgICAgICAgICAgICAgZWxlbWVudC4KKyAgICAgICAgICAgICAqLworICAgICAgICAgICAgYm9v
bCBhdEVuZCA9IGZhbHNlOworICAgICAgICAgICAgCisgICAgICAgICAgICB3aGlsZSAoY2hpbGRu
b2RlICYmICFjaGlsZG5vZGUtPnJlbmRlcmVyKCkpIHsKKyAgICAgICAgICAgICAgICBjaGlsZG5v
ZGUgPSBjaGlsZG5vZGUtPnByZXZpb3VzU2libGluZygpOworICAgICAgICAgICAgICAgIGF0RW5k
ID0gdHJ1ZTsKKyAgICAgICAgICAgIH0KKyAgICAgICAgICAgIGlmIChjaGlsZG5vZGUgJiYgY2hp
bGRub2RlLT5pc0VsZW1lbnROb2RlKCkpIHsKKyAgICAgICAgICAgICAgICBFbGVtZW50ICpjaGls
ZEVsdCA9IGRvd25jYXN0PEVsZW1lbnQ+KGNoaWxkbm9kZSk7CisgICAgICAgICAgICAgICAgY2hp
bGROb2RlUmVuZGVyZXIgPSBjaGlsZEVsdC0+cmVuZGVyZXIoKTsKKyAgICAgICAgICAgICAgICAK
KyAgICAgICAgICAgICAgICBpZiAoYXRFbmQgJiYgY2hpbGRFbHQtPmFmdGVyUHNldWRvRWxlbWVu
dCgpKSB7CisgICAgICAgICAgICAgICAgICAgIGNoaWxkbm9kZSA9IGNoaWxkRWx0LT5hZnRlclBz
ZXVkb0VsZW1lbnQoKTsKKyAgICAgICAgICAgICAgICAgICAgb2Zmc2V0ID0gMTsKKyAgICAgICAg
ICAgICAgICB9IGVsc2UgaWYgKCFhdEVuZCAmJiBjaGlsZEVsdC0+YmVmb3JlUHNldWRvRWxlbWVu
dCgpKSB7CisgICAgICAgICAgICAgICAgICAgIGNoaWxkbm9kZSA9IGNoaWxkRWx0LT5iZWZvcmVQ
c2V1ZG9FbGVtZW50KCk7CisgICAgICAgICAgICAgICAgICAgIG9mZnNldCA9IC0xOworICAgICAg
ICAgICAgICAgIH0gZWxzZSB7CisgICAgICAgICAgICAgICAgICAgIG9mZnNldCA9IGF0RW5kID8g
Y2hpbGRFbHQtPmNvdW50Q2hpbGROb2RlcygpIDogLTE7CisgICAgICAgICAgICAgICAgfQorICAg
ICAgICAgICAgfSBlbHNlIGlmIChjaGlsZG5vZGUpIHsKKyAgICAgICAgICAgICAgICBvZmZzZXQg
PSBhdEVuZCA/IGNoaWxkbm9kZS0+bWF4Q2hhcmFjdGVyT2Zmc2V0KCkgOiAwOworICAgICAgICAg
ICAgfSBlbHNlIHsKKyAgICAgICAgICAgICAgICBvZmZzZXQgPSAwOworICAgICAgICAgICAgfQor
ICAgICAgICB9IGVsc2UgeworICAgICAgICAgICAgY2hpbGRub2RlID0gZWxlbWVudCgpLT5hZnRl
clBzZXVkb0VsZW1lbnQoKTsKKyAgICAgICAgICAgIGNoaWxkTm9kZVJlbmRlcmVyID0gY2hpbGRu
b2RlID8gY2hpbGRub2RlLT5yZW5kZXJlcigpIDogTlVMTDsKKyAgICAgICAgICAgIG9mZnNldCA9
IC0xOworICAgICAgICB9CisKKyAgICAgICAgaWYgKGNoaWxkbm9kZSAmJiBjaGlsZG5vZGUtPnJl
bmRlcmVyKCkpIHsKKyAgICAgICAgICAgIExheW91dFJlY3QgcHNldWRvRWxlbWVudFJlY3QgPSBj
aGlsZG5vZGUtPnJlbmRlcmVyKCktPmxvY2FsQ2FyZXRSZWN0KGJveCwgb2Zmc2V0KTsKKyAgICAg
ICAgICAgIAorICAgICAgICAgICAgTGF5b3V0U2l6ZSBvZmZzZXQgPSBjaGlsZG5vZGUtPnJlbmRl
cmVyKCktPm9mZnNldEZyb21BbmNlc3RvckNvbnRhaW5lcih0aGlzKTsKKyAgICAgICAgICAgIAor
ICAgICAgICAgICAgcHNldWRvRWxlbWVudFJlY3QubW92ZShvZmZzZXQud2lkdGgoKSwgb2Zmc2V0
LmhlaWdodCgpKTsKKyAgICAgICAgICAgICAgICAgICAgICAgIAorICAgICAgICAgICAgcmV0dXJu
IHBzZXVkb0VsZW1lbnRSZWN0OworICAgICAgICB9CisgICAgfQorCiAgICAgaWYgKGJveCkgewog
ICAgICAgICBjb25zdCBSb290SW5saW5lQm94JiByb290Qm94ID0gYm94LT5yb290KCk7CiAgICAg
ICAgIExheW91dFVuaXQgdG9wID0gcm9vdEJveC5saW5lVG9wKCk7CiAgICAgICAgIHJlY3Quc2V0
WSh0b3ApOwogICAgICAgICByZWN0LnNldEhlaWdodChyb290Qm94LmxpbmVCb3R0b20oKSAtIHRv
cCk7CisKKyAgICAgICAgTm9kZSAqbm9kZSA9IGJveC0+cmVuZGVyZXIoKS5ub2RlKCk7CisgICAg
ICAgIGlmIChub2RlICYmICFub2RlLT5maXJzdENoaWxkKCkpCisgICAgICAgIHsKKyAgICAgICAg
ICAgIC8qIElmIGFuIGVsZW1lbnQgY29udGFpbnMgY2hpbGRyZW4sIHRoZSBpbnNlcnRpb24gY2Fy
ZXQgaXMgdHlwaWNhbGx5CisgICAgICAgICAgICAgICBjb21wdXRlZCBiYXNlZCBvbiB0aGUgcG9z
aXRpb24gb2YgdGhvc2UgY2hpbGRyZW4sIHdoaWNoIHRha2VzCisgICAgICAgICAgICAgICBpbnRv
IGFjY291bnQgYW55IDo6YmVmb3JlIHBzZXVkby1lbGVtZW50cyBpbiB0aGUgcGFyZW50IGVsZW1l
bnQuCisgICAgICAgICAgICAgCisgICAgICAgICAgICAgICBIb3dldmVyLCBpZiBhbiBlbGVtZW50
IGNvbnRhaW5zIG5vIGNoaWxkcmVuLCB0aGUgOjpiZWZvcmUKKyAgICAgICAgICAgICAgIHBzZXVk
by1lbGVtZW50J3Mgd2lkdGggbXVzdCBiZSBhZGRlZCB0byB0aGUgbGVmdCBtYXJnaW4uCisgICAg
ICAgICAgICAgICBPdGhlcndpc2UsIHRoZSBpbnNlcnRpb24gY2FyZXQgd291bGQgYmUgdG8gdGhl
IGxlZnQgb2YgdGhlCisgICAgICAgICAgICAgICAqb3V0c2lkZSogb2YgdGhlIGVsZW1lbnQgKGJl
Zm9yZSB0aGUgOjpiZWZvcmUgY29udGVudCksCisgICAgICAgICAgICAgICByYXRoZXIgdGhhbiB0
byB0aGUgbGVmdCBvZiB3aGVyZSBhIGNvbnRhaW5lZCB0ZXh0IG5vZGUgd291bGQKKyAgICAgICAg
ICAgICAgIGJlIGlmIG9uZSBleGlzdGVkLgorICAgICAgICAgICAgICovCisgICAgICAgICAgICBF
bGVtZW50ICplbHQgPSBkb3duY2FzdDxFbGVtZW50Pihub2RlKTsKKyAgICAgICAgICAgIFBzZXVk
b0VsZW1lbnQgKmJlZm9yZVBzZXVkb0VsZW1lbnQgPSBlbHQtPmJlZm9yZVBzZXVkb0VsZW1lbnQo
KTsKKyAgICAgICAgICAgIFJlbmRlck9iamVjdCogcmVuZGVyT2JqZWN0ID0gYmVmb3JlUHNldWRv
RWxlbWVudC0+cmVuZGVyZXIoKTsKKyAgICAgICAgICAgIAorICAgICAgICAgICAgaWYgKHJlbmRl
ck9iamVjdC0+aXNJbmxpbmUoKSkgeworICAgICAgICAgICAgICAgIFJlbmRlcklubGluZSAqcmVu
ZGVySW5saW5lID0gdG9SZW5kZXJJbmxpbmUocmVuZGVyT2JqZWN0KTsKKyAgICAgICAgICAgICAg
ICAKKyAgICAgICAgICAgICAgICByZWN0Lm1vdmUocmVuZGVySW5saW5lLT5vZmZzZXRXaWR0aCgp
LDApOworICAgICAgICAgICAgICAgIAorICAgICAgICAgICAgICAgIHJlbmRlcklubGluZSA9IG5p
bDsKKyAgICAgICAgICAgIH0KKyAgICAgICAgICAgIAorICAgICAgICAgICAgcmVuZGVyT2JqZWN0
ID0gbmlsOworICAgICAgICB9CiAgICAgfQogCisgICAgCiAgICAgLy8gSWYgaGVpZ2h0IG9mIGJv
eCBpcyBzbWFsbGVyIHRoYW4gZm9udCBoZWlnaHQsIHVzZSB0aGUgbGF0dGVyIG9uZSwKICAgICAv
LyBvdGhlcndpc2UgdGhlIGNhcmV0IG1pZ2h0IGJlY29tZSBpbnZpc2libGUuCiAgICAgLy8KQEAg
LTQxNTEsNyArNDM3MSw3IEBACiAKICAgICBpZiAoZXh0cmFXaWR0aFRvRW5kT2ZMaW5lKQogICAg
ICAgICAqZXh0cmFXaWR0aFRvRW5kT2ZMaW5lID0geCgpICsgd2lkdGgoKSAtIHJlY3QubWF4WCgp
OwotCisgICAgCiAgICAgLy8gTW92ZSB0byBsb2NhbCBjb29yZHMKICAgICByZWN0Lm1vdmVCeSgt
bG9jYXRpb24oKSk7CiAKQEAgLTQxNjIsNyArNDM4Miw3IEBACiAgICAgICAgIHJlY3Quc2V0WChy
ZWN0LngoKSArIGJvcmRlckxlZnQoKSArIHBhZGRpbmdMZWZ0KCkpOwogICAgICAgICByZWN0LnNl
dFkocmVjdC55KCkgKyBwYWRkaW5nVG9wKCkgKyBib3JkZXJUb3AoKSk7CiAgICAgfQotCisgICAg
CiAgICAgaWYgKCFpc0hvcml6b250YWxXcml0aW5nTW9kZSgpKQogICAgICAgICByZXR1cm4gcmVj
dC50cmFuc3Bvc2VkUmVjdCgpOwogCkluZGV4OiBTb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvUmVu
ZGVyQm94LmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL1JlbmRlckJv
eC5oCShyZXZpc2lvbiAxNzQzMjQpCisrKyBTb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvUmVuZGVy
Qm94LmgJKHdvcmtpbmcgY29weSkKQEAgLTY1NSw2ICs2NTUsMTAgQEAKICAgICB2b2lkIHVwZGF0
ZVNoYXBlT3V0c2lkZUluZm9BZnRlclN0eWxlQ2hhbmdlKGNvbnN0IFJlbmRlclN0eWxlJiwgY29u
c3QgUmVuZGVyU3R5bGUqIG9sZFN0eWxlKTsKICNlbmRpZgogCisgICAgTGF5b3V0UmVjdCBmaXJz
dE9yTGFzdEJveEluRWxlbWVudChFbGVtZW50ICplbmNsb3NlZEVsZW1lbnQsIGJvb2wgZmlyc3Qs
IGludCAqbnVtTGluZUJveGVzLCBib29sICpyZWNvbXB1dGVDdXJzb3IpIF9fYXR0cmlidXRlX18o
KHVudXNlZCkpOworICAgIGJvb2wgY29tcHV0ZVJlY3RGb3JQc2V1ZG9FbGVtZW50KFJlbmRlck9i
amVjdCAqZWxlbWVudFJlbmRlcmVyLCBSZW5kZXJFbGVtZW50ICpwc2V1ZG9FbGVtZW50UmVuZGVy
ZXIsIGJvb2wgZmlyc3QsIExheW91dFJlY3QgJmxvY2FsUmVjdCk7CisgICAgTGF5b3V0UG9pbnQg
dG9wTGVmdE9mRmlyc3RCb3hJbkVsZW1lbnRPclRvcFJpZ2h0b2ZMYXN0Qm94SW5FbGVtZW50KEVs
ZW1lbnQgKmVuY2xvc2VkRWxlbWVudCwgYm9vbCBmaXJzdCkgX19hdHRyaWJ1dGVfXygodW51c2Vk
KSk7CisgICAgCiAgICAgYm9vbCBzY3JvbGxMYXllcihTY3JvbGxEaXJlY3Rpb24sIFNjcm9sbEdy
YW51bGFyaXR5LCBmbG9hdCBtdWx0aXBsaWVyLCBFbGVtZW50Kiogc3RvcEVsZW1lbnQpOwogCiAg
ICAgYm9vbCBmaXhlZEVsZW1lbnRMYXlzT3V0UmVsYXRpdmVUb0ZyYW1lKGNvbnN0IEZyYW1lVmll
dyYpIGNvbnN0OwpJbmRleDogU291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL1JlbmRlckJveE1vZGVs
T2JqZWN0LmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvUmVuZGVy
Qm94TW9kZWxPYmplY3QuY3BwCShyZXZpc2lvbiAxNzQzMjQpCisrKyBTb3VyY2UvV2ViQ29yZS9y
ZW5kZXJpbmcvUmVuZGVyQm94TW9kZWxPYmplY3QuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0zOCw2
ICszOCw3IEBACiAjaW5jbHVkZSAiSW1hZ2VRdWFsaXR5Q29udHJvbGxlci5oIgogI2luY2x1ZGUg
IlBhZ2UuaCIKICNpbmNsdWRlICJQYXRoLmgiCisjaW5jbHVkZSAiUHNldWRvRWxlbWVudC5oIgog
I2luY2x1ZGUgIlJlbmRlckJsb2NrLmgiCiAjaW5jbHVkZSAiUmVuZGVySW5saW5lLmgiCiAjaW5j
bHVkZSAiUmVuZGVyTGF5ZXIuaCIKQEAgLTg1LDEyICs4NiwxNyBAQAogICAgIGVsc2UKICAgICAg
ICAgUmVuZGVyTGF5ZXJNb2RlbE9iamVjdDo6c2V0U2VsZWN0aW9uU3RhdGUoc3RhdGUpOwogCisj
aWYgMAogICAgIC8vIEZJWE1FOiBXZSBzaG91bGQgY29uc2lkZXIgd2hldGhlciBpdCBpcyBPSyBw
cm9wYWdhdGluZyB0byBhbmNlc3RvciBSZW5kZXJJbmxpbmVzLgogICAgIC8vIFRoaXMgaXMgYSB3
b3JrYXJvdW5kIGZvciBodHRwOi8vd2Via2l0Lm9yZy9iLzMyMTIzCiAgICAgLy8gVGhlIGNvbnRh
aW5pbmcgYmxvY2sgY2FuIGJlIG51bGwgaW4gY2FzZSBvZiBhbiBvcnBoYW5lZCB0cmVlLgorICAg
IAorICAgIC8vIE5PLCBpdCBpcyBOT1QgT0suICBUaGlzIGNvZGUgYnJlYWtzIGhpZ2hsaWdodGlu
ZyBvZiBwc2V1ZG8tZWxlbWVudAorICAgIC8vIGNvbnRlbnQuICAtLURBRwogICAgIFJlbmRlckJs
b2NrKiBjb250YWluaW5nQmxvY2sgPSB0aGlzLT5jb250YWluaW5nQmxvY2soKTsKICAgICBpZiAo
Y29udGFpbmluZ0Jsb2NrICYmICFjb250YWluaW5nQmxvY2stPmlzUmVuZGVyVmlldygpKQogICAg
ICAgICBjb250YWluaW5nQmxvY2stPnNldFNlbGVjdGlvblN0YXRlKHN0YXRlKTsKKyNlbmRpZgog
fQogCiB2b2lkIFJlbmRlckJveE1vZGVsT2JqZWN0Ojpjb250ZW50Q2hhbmdlZChDb250ZW50Q2hh
bmdlVHlwZSBjaGFuZ2VUeXBlKQpAQCAtMjU2OCwxMiArMjU3NCwxMyBAQAogCiBMYXlvdXRSZWN0
IFJlbmRlckJveE1vZGVsT2JqZWN0Ojpsb2NhbENhcmV0UmVjdEZvckVtcHR5RWxlbWVudChMYXlv
dXRVbml0IHdpZHRoLCBMYXlvdXRVbml0IHRleHRJbmRlbnRPZmZzZXQpCiB7Ci0gICAgQVNTRVJU
KCFmaXJzdENoaWxkKCkpOworICAgIEFTU0VSVCghZmlyc3ROb25Qc2V1ZG9FbGVtZW50Q2hpbGQo
KSk7CiAKICAgICAvLyBGSVhNRTogVGhpcyBkb2VzIG5vdCB0YWtlIGludG8gYWNjb3VudCBlaXRo
ZXIgOmZpcnN0LWxpbmUgb3IgOmZpcnN0LWxldHRlcgogICAgIC8vIEhvd2V2ZXIsIGFzIHNvb24g
YXMgc29tZSBjb250ZW50IGlzIGVudGVyZWQsIHRoZSBsaW5lIGJveGVzIHdpbGwgYmUKICAgICAv
LyBjb25zdHJ1Y3RlZCBhbmQgdGhpcyBrbHVkZ2UgaXMgbm90IGNhbGxlZCBhbnkgbW9yZS4gU28g
b25seSB0aGUgY2FyZXQgc2l6ZQogICAgIC8vIG9mIGFuIGVtcHR5IDpmaXJzdC1saW5lJ2QgYmxv
Y2sgaXMgd3JvbmcuIEkgdGhpbmsgd2UgY2FuIGxpdmUgd2l0aCB0aGF0LgorICAgIAogICAgIGNv
bnN0IFJlbmRlclN0eWxlJiBjdXJyZW50U3R5bGUgPSBmaXJzdExpbmVTdHlsZSgpOwogICAgIExh
eW91dFVuaXQgaGVpZ2h0ID0gbGluZUhlaWdodCh0cnVlLCBjdXJyZW50U3R5bGUuaXNIb3Jpem9u
dGFsV3JpdGluZ01vZGUoKSA/IEhvcml6b250YWxMaW5lIDogVmVydGljYWxMaW5lKTsKIApJbmRl
eDogU291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL1JlbmRlckVsZW1lbnQuaAo9PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0t
LSBTb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvUmVuZGVyRWxlbWVudC5oCShyZXZpc2lvbiAxNzQz
MjQpCisrKyBTb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvUmVuZGVyRWxlbWVudC5oCSh3b3JraW5n
IGNvcHkpCkBAIC01NCw2ICs1NCwxMiBAQAogCiAgICAgUmVuZGVyT2JqZWN0KiBmaXJzdENoaWxk
KCkgY29uc3QgeyByZXR1cm4gbV9maXJzdENoaWxkOyB9CiAgICAgUmVuZGVyT2JqZWN0KiBsYXN0
Q2hpbGQoKSBjb25zdCB7IHJldHVybiBtX2xhc3RDaGlsZDsgfQorICAgIFJlbmRlck9iamVjdCAq
Zmlyc3ROb25Qc2V1ZG9FbGVtZW50Q2hpbGQoKSBjb25zdAorICAgIHsKKyAgICAgICAgICAgIFJl
bmRlck9iamVjdCAqb2JqID0gZmlyc3RDaGlsZCgpOworICAgICAgICAgICAgd2hpbGUgKG9iaiAm
JiBvYmotPmlzUHNldWRvRWxlbWVudCgpKSB7IG9iaiA9IG9iai0+bmV4dFNpYmxpbmcoKTsgfQor
ICAgICAgICAgICAgcmV0dXJuIG9iajsKKyAgICB9CiAKICAgICAvLyBGSVhNRTogTWFrZSB0aGVz
ZSBzdGFuZGFsb25lIGFuZCBtb3ZlIHRvIHJlbGV2YW50IGZpbGVzLgogICAgIGJvb2wgaXNSZW5k
ZXJMYXllck1vZGVsT2JqZWN0KCkgY29uc3Q7CkluZGV4OiBTb3VyY2UvV2ViQ29yZS9yZW5kZXJp
bmcvUmVuZGVySW5saW5lLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9yZW5kZXJp
bmcvUmVuZGVySW5saW5lLmNwcAkocmV2aXNpb24gMTc0MzI0KQorKysgU291cmNlL1dlYkNvcmUv
cmVuZGVyaW5nL1JlbmRlcklubGluZS5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTIsNiArMiw3IEBA
CiAgKiBDb3B5cmlnaHQgKEMpIDE5OTkgTGFycyBLbm9sbCAoa25vbGxAa2RlLm9yZykKICAqICAg
ICAgICAgICAoQykgMTk5OSBBbnR0aSBLb2l2aXN0byAoa29pdmlzdG9Aa2RlLm9yZykKICAqIENv
cHlyaWdodCAoQykgMjAwMywgMjAwNCwgMjAwNSwgMjAwNiwgMjAwNywgMjAwOCwgMjAwOSBBcHBs
ZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKiBQb3J0aW9ucyBDb3B5cmlnaHQgKGMpIDIw
MTQgRGF2aWQgQS4gR2F0d29vZC4gIEFsbCByaWdodHMgcmVzZXJ2ZWQuCiAgKgogICogVGhpcyBs
aWJyYXJ5IGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vcgog
ICogbW9kaWZ5IGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIExpYnJhcnkgR2VuZXJhbCBQ
dWJsaWMKQEAgLTI0NCw5ICsyNDUsNDYgQEAKICAgICB9CiB9CiAKLUxheW91dFJlY3QgUmVuZGVy
SW5saW5lOjpsb2NhbENhcmV0UmVjdChJbmxpbmVCb3gqIGlubGluZUJveCwgaW50LCBMYXlvdXRV
bml0KiBleHRyYVdpZHRoVG9FbmRPZkxpbmUpCitMYXlvdXRSZWN0IFJlbmRlcklubGluZTo6bG9j
YWxDYXJldFJlY3QoSW5saW5lQm94KiBpbmxpbmVCb3gsIGludCBjYXJldE9mZnNldCwgTGF5b3V0
VW5pdCogZXh0cmFXaWR0aFRvRW5kT2ZMaW5lKQogewotICAgIGlmIChmaXJzdENoaWxkKCkpIHsK
KyAgICBpZiAoaXNQc2V1ZG9FbGVtZW50KCkpIHsKKyAgICAgICAgLyogV2Ugc2hvdWxkIG9ubHkg
Z2V0IGhlcmUgaWYgdGhlIHBzZXVkb2VsZW1lbnQncyBob3N0IGVsZW1lbnQKKyAgICAgICAgICAg
aGFzIG5vIGNoaWxkIG5vZGVzIG9yIGlmIHRoZSBlbmNsb3NpbmcgZWxlbWVudCdzIHJlbmRlcmVy
IHdhbnRzCisgICAgICAgICAgIHRvIHB1dCB0aGUgaW5zZXJ0aW9uIGNhcmV0ICpiZWZvcmUqIHRo
ZSBob3N0IGVsZW1lbnQgKGFuZCB0aHVzLAorICAgICAgICAgICBiZWZvcmUgdGhlIDo6YmVmb3Jl
IHBzZXVkb2VsZW1lbnQpLgorICAgICAgICAgKi8KKyAgICAgICAgUmVuZGVyT2JqZWN0ICpmY3Jl
bmRlcmVyID0gZmlyc3RDaGlsZCgpOworICAgICAgICAKKyAgICAgICAgaWYgKGZjcmVuZGVyZXIg
JiYgZmNyZW5kZXJlci0+aXNUZXh0KCkpIHsKKyAgICAgICAgICAgIGF1dG8gdGV4dFJlbmRlcmVy
ID0gdG9SZW5kZXJUZXh0KGZjcmVuZGVyZXIpOworICAgICAgICAgICAgdGV4dFJlbmRlcmVyLT5l
bnN1cmVMaW5lQm94ZXMoKTsKKworICAgICAgICAgICAgSW5saW5lVGV4dEJveCogYm94ID0gY2Fy
ZXRPZmZzZXQgPCAwID8gdGV4dFJlbmRlcmVyLT5maXJzdFRleHRCb3goKSA6IHRleHRSZW5kZXJl
ci0+bGFzdFRleHRCb3goKTsKKyAgICAgICAgICAgIAorICAgICAgICAgICAgaWYgKGJveCkgewor
ICAgICAgICAgICAgICAgIC8qIENyZWF0ZSBhIHJlY3Qgd2l0aCB0aGUgcG9zaXRpb24gb2YgdGhl
IGJlZ2lubmluZyBvZiB0aGUgbGFzdCBpbmxpbmUKKyAgICAgICAgICAgICAgICAgICBib3ggaW4g
dGhlIDo6YmVmb3JlIHBzZXVkb2VsZW1lbnQuICovCisgICAgICAgICAgICAgICAgaW50IG5ld0Nh
cmV0T2Zmc2V0ID0gYm94LT5jYXJldE1pbk9mZnNldCgpOworICAgICAgICAgICAgICAgIExheW91
dFJlY3QgY3Vyc29yUG9zaXRpb24gPSBmY3JlbmRlcmVyLT5sb2NhbENhcmV0UmVjdChib3gsIG5l
d0NhcmV0T2Zmc2V0KTsKKyAgICAgICAgICAgICAgICAKKyAgICAgICAgICAgICAgICAvKiBBZGQg
dGhlIHdpZHRoIG9mIHRoYXQgcHNldWRvZWxlbWVudC4gKi8KKyAgICAgICAgICAgICAgICBpZiAo
Y2FyZXRPZmZzZXQgIT0gLTEpCisgICAgICAgICAgICAgICAgICAgIGN1cnNvclBvc2l0aW9uLm1v
dmUoYm94LT53aWR0aCgpLCAwKTsKKyAgICAgICAgICAgICAgICAKKyAgICAgICAgICAgICAgICBy
ZXR1cm4gY3Vyc29yUG9zaXRpb247CisgICAgICAgICAgICB9CisgICAgICAgIH0gZWxzZSBpZiAo
ZmNyZW5kZXJlci0+aXNCb3goKSkgeworICAgICAgICAgICAgSW5saW5lQm94ICpib3ggPSB0b1Jl
bmRlckJveChmY3JlbmRlcmVyKS0+aW5saW5lQm94V3JhcHBlcigpOworICAgICAgICAgICAgCisg
ICAgICAgICAgICBMYXlvdXRSZWN0IGN1cnNvclBvc2l0aW9uID0gZmNyZW5kZXJlci0+bG9jYWxD
YXJldFJlY3QoYm94LCBjYXJldE9mZnNldCk7CisgICAgICAgICAgICAKKyAgICAgICAgICAgIC8q
IEFkZCB0aGUgd2lkdGggb2YgdGhhdCBwc2V1ZG9lbGVtZW50LiAqLworICAgICAgICAgICAgY3Vy
c29yUG9zaXRpb24ubW92ZShib3gtPndpZHRoKCksIDApOworICAgICAgICAgICAgCisgICAgICAg
ICAgICByZXR1cm4gY3Vyc29yUG9zaXRpb247CisgICAgICAgIH0KKyAgICB9CisgICAgaWYgKGZp
cnN0Tm9uUHNldWRvRWxlbWVudENoaWxkKCkpIHsKICAgICAgICAgLy8gVGhpcyBjb25kaXRpb24g
aXMgcG9zc2libGUgaWYgdGhlIFJlbmRlcklubGluZSBpcyBhdCBhbiBlZGl0aW5nIGJvdW5kYXJ5
LAogICAgICAgICAvLyBpLmUuIHRoZSBWaXNpYmxlUG9zaXRpb24gaXM6CiAgICAgICAgIC8vICAg
PFJlbmRlcklubGluZSBlZGl0aW5nQm91bmRhcnk9dHJ1ZT58PFJlbmRlclRleHQ+IDwvUmVuZGVy
VGV4dD48L1JlbmRlcklubGluZT4KQEAgLTI2Miw4ICszMDAsMTkgQEAKIAogICAgIExheW91dFJl
Y3QgY2FyZXRSZWN0ID0gbG9jYWxDYXJldFJlY3RGb3JFbXB0eUVsZW1lbnQoaG9yaXpvbnRhbEJv
cmRlckFuZFBhZGRpbmdFeHRlbnQoKSwgMCk7CiAKLSAgICBpZiAoSW5saW5lQm94KiBmaXJzdEJv
eCA9IGZpcnN0TGluZUJveCgpKQorICAgIC8vIENvbXB1dGUgdGhlIGxvY2F0aW9uIGJhc2VkIG9u
IHRoZSBmaXJzdCBwc2V1ZG8KKyAgICBJbmxpbmVCb3ggKmZpcnN0Qm94ID0gZmlyc3RMaW5lQm94
KCk7CisgICAgaWYgKGZpcnN0Qm94ICYmICFmaXJzdENoaWxkKCktPmlzQmVmb3JlQ29udGVudCgp
KSB7CiAgICAgICAgIGNhcmV0UmVjdC5tb3ZlQnkoTGF5b3V0UG9pbnQoZmlyc3RCb3gtPnRvcExl
ZnQoKSkpOworICAgICAgICBjYXJldFJlY3QubW92ZSh0aGlzLT5tYXJnaW5MZWZ0KCksIDApOwor
ICAgICAgICBpZiAodGhpcy0+ZWxlbWVudCgpKSB7CisgICAgICAgICAgICAvLyBMYXlvdXRVbml0
IHggPSBMYXlvdXRVbml0KHRoaXMtPmVsZW1lbnQoKS0+Y29tcHV0ZWRTdHlsZSgpLT5wYWRkaW5n
TGVmdCgpKTsKKyAgICAgICAgICAgIC8vIGNhcmV0UmVjdC5tb3ZlQnkoLCAwKTsKKyAgICAgICAg
fQorICAgIH0gZWxzZSB7CisgICAgICAgIFJlbmRlck9iamVjdCAqZmMgPSBmaXJzdENoaWxkKCk7
CisgICAgICAgIGlmIChmYyAmJiBmYy0+aXNCZWZvcmVDb250ZW50KCkpIHJldHVybiBmYy0+bG9j
YWxDYXJldFJlY3QoaW5saW5lQm94LCBjYXJldE9mZnNldCk7CisgICAgfQogCiAgICAgcmV0dXJu
IGNhcmV0UmVjdDsKIH0KSW5kZXg6IFNvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9SZW5kZXJJbmxp
bmUuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvUmVuZGVySW5saW5l
LmgJKHJldmlzaW9uIDE3NDMyNCkKKysrIFNvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9SZW5kZXJJ
bmxpbmUuaAkod29ya2luZyBjb3B5KQpAQCAtOTQsNyArOTQsMTAgQEAKICAgICB2aXJ0dWFsIExh
eW91dFJlY3QgbG9jYWxDYXJldFJlY3QoSW5saW5lQm94KiwgaW50LCBMYXlvdXRVbml0KiBleHRy
YVdpZHRoVG9FbmRPZkxpbmUpIG92ZXJyaWRlIGZpbmFsOwogCiAgICAgYm9vbCBoaXRUZXN0Q3Vs
bGVkSW5saW5lKGNvbnN0IEhpdFRlc3RSZXF1ZXN0JiwgSGl0VGVzdFJlc3VsdCYsIGNvbnN0IEhp
dFRlc3RMb2NhdGlvbiYgbG9jYXRpb25JbkNvbnRhaW5lciwgY29uc3QgTGF5b3V0UG9pbnQmIGFj
Y3VtdWxhdGVkT2Zmc2V0KTsKKyAgICAKKyAgICB2aXJ0dWFsIExheW91dFVuaXQgb2Zmc2V0V2lk
dGgoKSBjb25zdCBvdmVycmlkZSBmaW5hbCB7IHJldHVybiBsaW5lc0JvdW5kaW5nQm94KCkud2lk
dGgoKTsgfQogCisKIHByb3RlY3RlZDoKICAgICB2aXJ0dWFsIHZvaWQgd2lsbEJlRGVzdHJveWVk
KCkgb3ZlcnJpZGU7CiAKQEAgLTEzNCw3ICsxMzcsNiBAQAogCiAgICAgdmlydHVhbCBMYXlvdXRV
bml0IG9mZnNldExlZnQoKSBjb25zdCBvdmVycmlkZSBmaW5hbDsKICAgICB2aXJ0dWFsIExheW91
dFVuaXQgb2Zmc2V0VG9wKCkgY29uc3Qgb3ZlcnJpZGUgZmluYWw7Ci0gICAgdmlydHVhbCBMYXlv
dXRVbml0IG9mZnNldFdpZHRoKCkgY29uc3Qgb3ZlcnJpZGUgZmluYWwgeyByZXR1cm4gbGluZXNC
b3VuZGluZ0JveCgpLndpZHRoKCk7IH0KICAgICB2aXJ0dWFsIExheW91dFVuaXQgb2Zmc2V0SGVp
Z2h0KCkgY29uc3Qgb3ZlcnJpZGUgZmluYWwgeyByZXR1cm4gbGluZXNCb3VuZGluZ0JveCgpLmhl
aWdodCgpOyB9CiAKICAgICB2aXJ0dWFsIExheW91dFJlY3QgY2xpcHBlZE92ZXJmbG93UmVjdEZv
clJlcGFpbnQoY29uc3QgUmVuZGVyTGF5ZXJNb2RlbE9iamVjdCogcmVwYWludENvbnRhaW5lcikg
Y29uc3Qgb3ZlcnJpZGU7CkluZGV4OiBTb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvUmVuZGVyT2Jq
ZWN0LmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvUmVuZGVyT2Jq
ZWN0LmNwcAkocmV2aXNpb24gMTc0MzI0KQorKysgU291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL1Jl
bmRlck9iamVjdC5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTI1NTEsNyArMjU1MSwyNSBAQAogewog
ICAgIHJldHVybiBkb3duY2FzdDxQc2V1ZG9FbGVtZW50Pigqbm9kZSgpKS5ob3N0RWxlbWVudCgp
OwogfQorICAgIAorYm9vbCBSZW5kZXJPYmplY3Q6OmNhbkJlU2VsZWN0aW9uTGVhZigpIGNvbnN0
Cit7CisgICAgcmV0dXJuIGZhbHNlOworfQogCitib29sIFJlbmRlck9iamVjdDo6c2hvdWxkUGFp
bnRQc2V1ZG9FbGVtZW50cyhTZWxlY3Rpb25TdGF0ZSBzdGF0ZSkgY29uc3QKK3sKKyAgICBpZiAo
bm9kZSgpICYmIG5vZGUoKS0+aXNFbGVtZW50Tm9kZSgpKSB7CisgICAgICAgIEVsZW1lbnQgKmVs
dCA9IHN0YXRpY19jYXN0PEVsZW1lbnQgKj4obm9kZSgpKTsKKworICAgICAgICBpZiAoc3RhdGUg
PT0gU2VsZWN0aW9uTm9uZSB8fCBzdGF0ZSA9PSBTZWxlY3Rpb25Cb3RoKSB7CisgICAgICAgICAg
ICByZXR1cm4gZmFsc2U7CisgICAgICAgIH0KKyAgICAgICAgcmV0dXJuIChlbHQtPmJlZm9yZVBz
ZXVkb0VsZW1lbnQoKSB8fCBlbHQtPmFmdGVyUHNldWRvRWxlbWVudCgpKTsKKyAgICB9CisgICAg
cmV0dXJuIGZhbHNlOworfQorICAgIAogdm9pZCBSZW5kZXJPYmplY3Q6OnNldE5lZWRzQm91bmRh
cmllc1VwZGF0ZSgpCiB7CiAgICAgaWYgKGF1dG8gcmVuZGVyZXIgPSBwYXJlbnQoKSkKSW5kZXg6
IFNvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9SZW5kZXJPYmplY3QuaAo9PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBT
b3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvUmVuZGVyT2JqZWN0LmgJKHJldmlzaW9uIDE3NDMyNCkK
KysrIFNvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9SZW5kZXJPYmplY3QuaAkod29ya2luZyBjb3B5
KQpAQCAtNzgwLDYgKzc4MCw4IEBACiAgICAgICAgIFNlbGVjdGlvbkVuZCwgLy8gVGhlIG9iamVj
dCBlaXRoZXIgY29udGFpbnMgdGhlIGVuZCBvZiBhIHNlbGVjdGlvbiBydW4gb3IgaXMgdGhlIGVu
ZCBvZiBhIHJ1bgogICAgICAgICBTZWxlY3Rpb25Cb3RoIC8vIFRoZSBvYmplY3QgY29udGFpbnMg
YW4gZW50aXJlIHJ1biBvciBpcyB0aGUgc29sZSBzZWxlY3RlZCBvYmplY3QgaW4gdGhhdCBydW4K
ICAgICB9OworICAgIAorICAgIGJvb2wgc2hvdWxkUGFpbnRQc2V1ZG9FbGVtZW50cyhTZWxlY3Rp
b25TdGF0ZSBzdGF0ZSkgY29uc3Q7CiAKICAgICAvLyBUaGUgY3VycmVudCBzZWxlY3Rpb24gc3Rh
dGUgZm9yIGFuIG9iamVjdC4gIEZvciBibG9ja3MsIHRoZSBzdGF0ZSByZWZlcnMgdG8gdGhlIHN0
YXRlIG9mIHRoZSBsZWFmCiAgICAgLy8gZGVzY2VuZGFudHMgKGFzIGRlc2NyaWJlZCBhYm92ZSBp
biB0aGUgU2VsZWN0aW9uU3RhdGUgZW51bSBkZWNsYXJhdGlvbikuCkBAIC03OTMsNyArNzk1LDcg
QEAKICAgICBMYXlvdXRSZWN0IHNlbGVjdGlvblJlY3QoYm9vbCBjbGlwVG9WaXNpYmxlQ29udGVu
dCA9IHRydWUpIHsgcmV0dXJuIHNlbGVjdGlvblJlY3RGb3JSZXBhaW50KDAsIGNsaXBUb1Zpc2li
bGVDb250ZW50KTsgfQogICAgIHZpcnR1YWwgTGF5b3V0UmVjdCBzZWxlY3Rpb25SZWN0Rm9yUmVw
YWludChjb25zdCBSZW5kZXJMYXllck1vZGVsT2JqZWN0KiAvKnJlcGFpbnRDb250YWluZXIqLywg
Ym9vbCAvKmNsaXBUb1Zpc2libGVDb250ZW50Ki8gPSB0cnVlKSB7IHJldHVybiBMYXlvdXRSZWN0
KCk7IH0KIAotICAgIHZpcnR1YWwgYm9vbCBjYW5CZVNlbGVjdGlvbkxlYWYoKSBjb25zdCB7IHJl
dHVybiBmYWxzZTsgfQorICAgIHZpcnR1YWwgYm9vbCBjYW5CZVNlbGVjdGlvbkxlYWYoKSBjb25z
dDsKICAgICBib29sIGhhc1NlbGVjdGVkQ2hpbGRyZW4oKSBjb25zdCB7IHJldHVybiBzZWxlY3Rp
b25TdGF0ZSgpICE9IFNlbGVjdGlvbk5vbmU7IH0KIAogICAgIC8vIE9idGFpbnMgdGhlIHNlbGVj
dGlvbiBjb2xvcnMgdGhhdCBzaG91bGQgYmUgdXNlZCB3aGVuIHBhaW50aW5nIGEgc2VsZWN0aW9u
LgpJbmRleDogU291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL1JlbmRlclRleHRGcmFnbWVudC5jcHAK
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL1JlbmRlclRleHRGcmFnbWVu
dC5jcHAJKHJldmlzaW9uIDE3NDMyNCkKKysrIFNvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9SZW5k
ZXJUZXh0RnJhZ21lbnQuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0yMyw2ICsyMyw3IEBACiAjaW5j
bHVkZSAiY29uZmlnLmgiCiAjaW5jbHVkZSAiUmVuZGVyVGV4dEZyYWdtZW50LmgiCiAKKyNpbmNs
dWRlICJQc2V1ZG9FbGVtZW50LmgiCiAjaW5jbHVkZSAiUmVuZGVyQmxvY2suaCIKICNpbmNsdWRl
ICJSZW5kZXJJdGVyYXRvci5oIgogI2luY2x1ZGUgIlRleHQuaCIKQEAgLTYwLDYgKzYxLDkgQEAK
IAogYm9vbCBSZW5kZXJUZXh0RnJhZ21lbnQ6OmNhbkJlU2VsZWN0aW9uTGVhZigpIGNvbnN0CiB7
CisgICAgaWYgKHBhcmVudCgpICYmIHBhcmVudCgpLT5pc1BzZXVkb0VsZW1lbnQoKSkgeworICAg
ICAgICByZXR1cm4gc3RhdGljX2Nhc3Q8UHNldWRvRWxlbWVudCAqPihwYXJlbnQoKS0+ZWxlbWVu
dCgpKS0+aG9zdEVsZW1lbnQoKS0+aGFzRWRpdGFibGVTdHlsZSgpOworICAgIH0KICAgICByZXR1
cm4gdGV4dE5vZGUoKSAmJiB0ZXh0Tm9kZSgpLT5oYXNFZGl0YWJsZVN0eWxlKCk7CiB9CiAKSW5k
ZXg6IFNvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9SZW5kZXJWaWV3LmNwcAo9PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0t
LSBTb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvUmVuZGVyVmlldy5jcHAJKHJldmlzaW9uIDE3NDMy
NCkKKysrIFNvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9SZW5kZXJWaWV3LmNwcAkod29ya2luZyBj
b3B5KQpAQCAtMzQsOCArMzQsMTAgQEAKICNpbmNsdWRlICJIVE1MSUZyYW1lRWxlbWVudC5oIgog
I2luY2x1ZGUgIkhpdFRlc3RSZXN1bHQuaCIKICNpbmNsdWRlICJJbWFnZVF1YWxpdHlDb250cm9s
bGVyLmgiCisjaW5jbHVkZSAiTm9kZS5oIgogI2luY2x1ZGUgIk5vZGVUcmF2ZXJzYWwuaCIKICNp
bmNsdWRlICJQYWdlLmgiCisjaW5jbHVkZSAiUHNldWRvRWxlbWVudC5oIgogI2luY2x1ZGUgIlJl
bmRlckdlb21ldHJ5TWFwLmgiCiAjaW5jbHVkZSAiUmVuZGVySXRlcmF0b3IuaCIKICNpbmNsdWRl
ICJSZW5kZXJMYXllci5oIgpAQCAtNDcsMTMgKzQ5LDIwIEBACiAjaW5jbHVkZSAiUmVuZGVyTmFt
ZWRGbG93VGhyZWFkLmgiCiAjaW5jbHVkZSAiUmVuZGVyU2VsZWN0aW9uSW5mby5oIgogI2luY2x1
ZGUgIlJlbmRlcldpZGdldC5oIgorI2luY2x1ZGUgIlJlbmRlclRleHRGcmFnbWVudC5oIgogI2lu
Y2x1ZGUgIlNldHRpbmdzLmgiCiAjaW5jbHVkZSAiU3R5bGVJbmhlcml0ZWREYXRhLmgiCiAjaW5j
bHVkZSAiVHJhbnNmb3JtU3RhdGUuaCIKICNpbmNsdWRlIDx3dGYvU3RhY2tTdGF0cy5oPgogCisj
ZGVmaW5lIEVOQUJMRV9TRUxFQ1RJT05fREVCVUdHSU5HIDAKKwogbmFtZXNwYWNlIFdlYkNvcmUg
ewogCisjaWYgRU5BQkxFX1NFTEVDVElPTl9ERUJVR0dJTkcKK3ZvaWQgZGVidWdQcmludFJlbmRl
ck9iamVjdChSZW5kZXJPYmplY3QgKm8sIGNvbnN0IGNoYXIgKnByZSk7CisjZW5kaWYgLy8gRU5B
QkxFX1NFTEVDVElPTl9ERUJVR0dJTkcKKwogc3RydWN0IFNlbGVjdGlvbkl0ZXJhdG9yIHsKICAg
ICBSZW5kZXJPYmplY3QqIG1fY3VycmVudDsKICAgICBWZWN0b3I8UmVuZGVyTXVsdGlDb2x1bW5T
cGFubmVyUGxhY2Vob2xkZXIqPiBtX3NwYW5uZXJTdGFjazsKQEAgLTczNSwxMSArNzQ0LDI3IEBA
CiB7CiAgICAgaWYgKCFvYmplY3QpCiAgICAgICAgIHJldHVybiAwOworICAgIAorICAgIFJlbmRl
ck9iamVjdCAqZmMgPSBvYmplY3QtPmNoaWxkQXQoMCk7CisgICAgaWYgKGZjICYmIGZjLT5pc1Bz
ZXVkb0VsZW1lbnQoKSkgeworICAgICAgICBvZmZzZXQgKz0gMTsKKyAgICB9CiAKICAgICBSZW5k
ZXJPYmplY3QqIGNoaWxkID0gb2JqZWN0LT5jaGlsZEF0KG9mZnNldCk7CiAgICAgcmV0dXJuIGNo
aWxkID8gY2hpbGQgOiBvYmplY3QtPm5leHRJblByZU9yZGVyQWZ0ZXJDaGlsZHJlbigpOwogfQor
ICAgIAorc3RhdGljIFJlbmRlck9iamVjdCogcmVuZGVyZXJBdFBvc2l0aW9uKFJlbmRlck9iamVj
dCogb2JqZWN0LCB1bnNpZ25lZCBvZmZzZXQpCit7CisgICAgaWYgKCFvYmplY3QpCisgICAgICAg
IHJldHVybiAwOworICAgIAorICAgIFJlbmRlck9iamVjdCogY2hpbGQgPSBvYmplY3QtPmNoaWxk
QXQob2Zmc2V0KTsKKyAgICAKKyAgICByZXR1cm4gY2hpbGQgPyBjaGlsZCA6IG9iamVjdC0+bmV4
dEluUHJlT3JkZXJBZnRlckNoaWxkcmVuKCk7Cit9CiAKKwogSW50UmVjdCBSZW5kZXJWaWV3Ojpz
ZWxlY3Rpb25Cb3VuZHMoYm9vbCBjbGlwVG9WaXNpYmxlQ29udGVudCkgY29uc3QKIHsKICAgICBM
YXlvdXRSZWN0IHNlbFJlY3QgPSBzdWJ0cmVlU2VsZWN0aW9uQm91bmRzKCp0aGlzLCBjbGlwVG9W
aXNpYmxlQ29udGVudCk7CkBAIC03NjEsNiArNzg2LDcgQEAKIAogICAgIFJlbmRlck9iamVjdCog
b3MgPSByb290LnNlbGVjdGlvblN0YXJ0KCk7CiAgICAgUmVuZGVyT2JqZWN0KiBzdG9wID0gcmVu
ZGVyZXJBZnRlclBvc2l0aW9uKHJvb3Quc2VsZWN0aW9uRW5kKCksIHJvb3Quc2VsZWN0aW9uRW5k
UG9zKCkpOworICAgIAogICAgIFNlbGVjdGlvbkl0ZXJhdG9yIHNlbGVjdGlvbkl0ZXJhdG9yKG9z
KTsKICAgICB3aGlsZSAob3MgJiYgb3MgIT0gc3RvcCkgewogICAgICAgICBpZiAoKG9zLT5jYW5C
ZVNlbGVjdGlvbkxlYWYoKSB8fCBvcyA9PSByb290LnNlbGVjdGlvblN0YXJ0KCkgfHwgb3MgPT0g
cm9vdC5zZWxlY3Rpb25FbmQoKSkgJiYgb3MtPnNlbGVjdGlvblN0YXRlKCkgIT0gU2VsZWN0aW9u
Tm9uZSkgewpAQCAtODA1LDYgKzgzMSwyNSBAQAogICAgIH0KIH0KIAordm9pZCBSZW5kZXJWaWV3
OjpSZW5kZXJTZWxlY3Rpb25Gb3JQc2V1ZG9FbGVtZW50cyhSZW5kZXJPYmplY3QgKm8pIGNvbnN0
Cit7CisgICAgaWYgKG8gJiYgby0+aXNSZW5kZXJFbGVtZW50KCkpIHsKKyAgICAgICAgUmVuZGVy
RWxlbWVudCAqcmUgPSBzdGF0aWNfY2FzdDxSZW5kZXJFbGVtZW50ICo+KG8pOworICAgICAgICBF
bGVtZW50ICplbHQgPSByZS0+ZWxlbWVudCgpOworICAgICAgICAKKyAgICAgICAgaWYgKGVsdCkg
eworICAgICAgICAgICAgUHNldWRvRWxlbWVudCAqYmVmb3JlUEUgPSBlbHQtPmJlZm9yZVBzZXVk
b0VsZW1lbnQoKTsKKyAgICAgICAgICAgIFBzZXVkb0VsZW1lbnQgKmFmdGVyUEUgPSBlbHQtPmFm
dGVyUHNldWRvRWxlbWVudCgpOworICAgICAgICAgICAgCisgICAgICAgICAgICBSZW5kZXJFbGVt
ZW50ICpiZWZvcmVQRVJlbmRlcmVyID0gYmVmb3JlUEUtPnJlbmRlcmVyKCk7CisgICAgICAgICAg
ICBSZW5kZXJFbGVtZW50ICphZnRlclBFUmVuZGVyZXIgPSBhZnRlclBFLT5yZW5kZXJlcigpOwor
ICAgICAgICAgICAgCisgICAgICAgICAgICBSZW5kZXJTZWxlY3Rpb25JbmZvKCpiZWZvcmVQRVJl
bmRlcmVyLCB0cnVlKS5yZXBhaW50KCk7CisgICAgICAgICAgICBSZW5kZXJTZWxlY3Rpb25JbmZv
KCphZnRlclBFUmVuZGVyZXIsIHRydWUpLnJlcGFpbnQoKTsKKyAgICAgICAgfQorICAgIH0KK30K
Kwogdm9pZCBSZW5kZXJWaWV3OjpyZXBhaW50U3VidHJlZVNlbGVjdGlvbihjb25zdCBTZWxlY3Rp
b25TdWJ0cmVlUm9vdCYgcm9vdCkgY29uc3QKIHsKICAgICBIYXNoU2V0PFJlbmRlckJsb2NrKj4g
cHJvY2Vzc2VkQmxvY2tzOwpAQCAtODE2LDYgKzg2MSw4IEBACiAgICAgICAgICAgICBjb250aW51
ZTsKICAgICAgICAgaWYgKG8tPnNlbGVjdGlvblN0YXRlKCkgPT0gU2VsZWN0aW9uTm9uZSkKICAg
ICAgICAgICAgIGNvbnRpbnVlOworICAgICAgICAKKyAgICAgICAgLy8gUmVuZGVyU2VsZWN0aW9u
Rm9yUHNldWRvRWxlbWVudHMobyk7CiAKICAgICAgICAgUmVuZGVyU2VsZWN0aW9uSW5mbygqbywg
dHJ1ZSkucmVwYWludCgpOwogCkBAIC04NjYsNyArOTEzLDE1IEBACiAgICAgbV9zZWxlY3Rpb25V
bnNwbGl0U3RhcnRQb3MgPSBzdGFydFBvczsKICAgICBtX3NlbGVjdGlvblVuc3BsaXRFbmQgPSBl
bmQ7CiAgICAgbV9zZWxlY3Rpb25VbnNwbGl0RW5kUG9zID0gZW5kUG9zOworICAgIAorICAgIGlm
IChzdGFydCAmJiBzdGFydFBvcyAmJiAhc3RhcnQtPmlzVGV4dCgpKSB7CisgICAgICAgIFJlbmRl
ck9iamVjdCAqcG9zc1N0YXJ0ID0gc3RhcnQtPmlzUmVuZGVyQmxvY2tGbG93KCkgPworICAgICAg
ICAgICAgcmVuZGVyZXJBZnRlclBvc2l0aW9uKHN0YXJ0LCBzdGFydFBvcyk6CisgICAgICAgICAg
ICByZW5kZXJlckF0UG9zaXRpb24oc3RhcnQsIHN0YXJ0UG9zKTsKKyAgICAgICAgc3RhcnQgPSBw
b3NzU3RhcnQgPyBwb3NzU3RhcnQgOiBzdGFydDsKKyAgICB9CiAKKwogICAgIC8vIElmIHRoZXJl
IGlzIG5vIFJlbmRlck5hbWVkRmxvd1RocmVhZHMgd2UgZm9sbG93IHRoZSByZWd1bGFyIHNlbGVj
dGlvbi4KICAgICBpZiAoIWhhc1JlbmRlck5hbWVkRmxvd1RocmVhZHMoKSkgewogICAgICAgICBS
ZW5kZXJTdWJ0cmVlc01hcCBzaW5nbGVTdWJ0cmVlTWFwOwpAQCAtOTYxLDYgKzEwMTYsMTUgQEAK
IAogICAgIFJlbmRlck9iamVjdCogb3MgPSByb290LnNlbGVjdGlvblN0YXJ0KCk7CiAgICAgUmVu
ZGVyT2JqZWN0KiBzdG9wID0gcmVuZGVyZXJBZnRlclBvc2l0aW9uKHJvb3Quc2VsZWN0aW9uRW5k
KCksIHJvb3Quc2VsZWN0aW9uRW5kUG9zKCkpOworICAgIAorICAgIC8qIElmIHRoZSBsYXN0IHBv
aW50IGlzIGFuIGVsZW1lbnQgd2l0aCBhIDo6YmVmb3JlIHBzZXVkby1lbGVtZW50LAorICAgICBh
bGxvdyB0aGUgdHJlZSB3YWxrIHRvIHdhbGsgaW50byB0aGF0IHBzZXVkby1lbGVtZW50IHNvIHRo
YXQgaXQKKyAgICAgY2FuIGJlIHByb3Blcmx5IGhpZ2hsaWdodGVkLgorICAgICAqLworICAgIGlm
ICgwICYmIHN0b3AgJiYgc3RvcC0+aXNCZWZvcmVDb250ZW50KCkpIHsKKyAgICAgICAgc3RvcCA9
IHN0b3AtPm5leHRTaWJsaW5nKCk7IC8vIHN0b3AtPnNldFNlbGVjdGlvblN0YXRlSWZOZWVkZWQo
U2VsZWN0aW9uSW5zaWRlKTsKKyAgICB9CisgICAgCiAgICAgU2VsZWN0aW9uSXRlcmF0b3Igc2Vs
ZWN0aW9uSXRlcmF0b3Iob3MpOwogICAgIHdoaWxlIChvcyAmJiBvcyAhPSBzdG9wKSB7CiAgICAg
ICAgIGlmICgob3MtPmNhbkJlU2VsZWN0aW9uTGVhZigpIHx8IG9zID09IHJvb3Quc2VsZWN0aW9u
U3RhcnQoKSB8fCBvcyA9PSByb290LnNlbGVjdGlvbkVuZCgpKQpAQCAtMTAwMiwxMyArMTA2Niwz
MSBAQAogICAgIFJlbmRlck9iamVjdCogbyA9IHN0YXJ0OwogICAgIFJlbmRlck9iamVjdCogc3Rv
cCA9IHJlbmRlcmVyQWZ0ZXJQb3NpdGlvbihlbmQsIGVuZFBvcyk7CiAgICAgU2VsZWN0aW9uSXRl
cmF0b3Igc2VsZWN0aW9uSXRlcmF0b3Iobyk7CisKKyNpZiBFTkFCTEVfU0VMRUNUSU9OX0RFQlVH
R0lORworICAgIGZwcmludGYoc3RkZXJyLCAiU1RBUlQ6XG4iKTsKKyAgICBkZWJ1Z1ByaW50UmVu
ZGVyT2JqZWN0KHN0YXJ0LCAiICAgICIpOworCisgICAgZnByaW50ZihzdGRlcnIsICJFTkQ6XG4i
KTsKKyAgICBkZWJ1Z1ByaW50UmVuZGVyT2JqZWN0KGVuZCwgIiAgICAiKTsKKyAgICBmcHJpbnRm
KHN0ZGVyciwgIkVORCBPRkZTRVQ6ICVkXG4iLCBlbmRQb3MpOwogICAgIAorICAgIGZwcmludGYo
c3RkZXJyLCAiU1RPUDpcbiIpOworICAgIGRlYnVnUHJpbnRSZW5kZXJPYmplY3Qoc3RvcCwgIiAg
ICAiKTsKKyNlbmRpZiAvLyBFTkFCTEVfU0VMRUNUSU9OX0RFQlVHR0lORworCiAgICAgd2hpbGUg
KG8gJiYgbyAhPSBzdG9wKSB7CisKKyNpZiBFTkFCTEVfU0VMRUNUSU9OX0RFQlVHR0lORworICAg
ICAgICBkZWJ1Z1ByaW50UmVuZGVyT2JqZWN0KG8sICIiKTsKKyNlbmRpZiAvLyBFTkFCTEVfU0VM
RUNUSU9OX0RFQlVHR0lORworCiAgICAgICAgIGlmIChvICE9IHN0YXJ0ICYmIG8gIT0gZW5kICYm
IG8tPmNhbkJlU2VsZWN0aW9uTGVhZigpKQogICAgICAgICAgICAgby0+c2V0U2VsZWN0aW9uU3Rh
dGVJZk5lZWRlZChTZWxlY3Rpb25JbnNpZGUpOwogICAgICAgICBvID0gc2VsZWN0aW9uSXRlcmF0
b3IubmV4dCgpOwogICAgIH0KLQorICAgIAorICAgIAogICAgIGlmIChibG9ja1JlcGFpbnRNb2Rl
ICE9IFJlcGFpbnROb3RoaW5nKQogICAgICAgICBsYXllcigpLT5jbGVhckJsb2NrU2VsZWN0aW9u
R2Fwc0JvdW5kcygpOwogCkBAIC0xNDM3LDQgKzE1MTksNTQgQEAKICAgICByZXR1cm4gMDsKIH0K
IAorI2lmIEVOQUJMRV9TRUxFQ1RJT05fREVCVUdHSU5HCitjaGFyICpXZWJLaXRTdHJpbmdUb0FT
Q0lJKFN0cmluZyBzdHIpOworY2hhciAqV2ViS2l0U3RyaW5nVG9BU0NJSShTdHJpbmcgc3RyKQor
eworICAgIGNoYXIgKnRlbXAgPSAoY2hhciAqKW1hbGxvYyhzdHIubGVuZ3RoKCkgKyAxKTsKKyAg
ICAKKyAgICBzdHJsY3B5KHRlbXAsIHN0ci5hc2NpaSgpLmRhdGEoKSwgc3RyLmxlbmd0aCgpICsg
MSk7CisgICAgdGVtcFtzdHIubGVuZ3RoKCldID0gJ1wwJzsKKyAgICAKKyAgICByZXR1cm4gdGVt
cDsKK30KKwordm9pZCBkZWJ1Z1ByaW50UmVuZGVyT2JqZWN0KFJlbmRlck9iamVjdCAqbywgY29u
c3QgY2hhciAqcHJlKQoreworICAgIGJvb2wgaXRmID0gZmFsc2U7CisgICAgCisgICAgaWYgKCFv
KSB7CisgICAgICAgIGZwcmludGYoc3RkZXJyLCAiJXNOVUxMXG4iLCBwcmUpOworICAgICAgICBy
ZXR1cm47CisgICAgfQorCisgICAgZnByaW50ZihzdGRlcnIsICIlc1JlbmRlciVzXG4iLCBwcmUs
IG8tPmlzUmVuZGVySW5saW5lKCkgPyAiSW5saW5lIiA6IG8tPmlzUmVuZGVyQmxvY2tGbG93KCkg
PyAiQmxvY2tGbG93IiA6IG8tPmlzUmVuZGVyQmxvY2soKSA/ICJCbG9jayIgOiBvLT5pc1JlbmRl
ckVsZW1lbnQoKSA/ICJFbGVtZW50IiA6IGl0ZiA/ICJUZXh0RnJhZ21lbnQiIDoKKyAgICAgICAg
ICAgIG8tPmlzVGV4dCgpID8gIlRleHQiIDogIk90aGVyIik7CisgICAgaWYgKG8tPm5vZGUoKSkg
eworICAgICAgICBmcHJpbnRmKHN0ZGVyciwgIiAgICBOT0RFOiAlcCIsIG8tPm5vZGUoKSk7Cisg
ICAgICAgIGlmIChvLT5ub2RlKCktPmlzUHNldWRvRWxlbWVudCgpKSB7CisgICAgICAgICAgICBm
cHJpbnRmKHN0ZGVyciwgIiA6IFBTRVVETyAoJXMpXG4iLCBvLT5pc0JlZm9yZUNvbnRlbnQoKSA/
ICJCRUZPUkUiIDogIkFGVEVSIik7CisgICAgICAgICAgICBjaGFyICppdCA9IFdlYktpdFN0cmlu
Z1RvQVNDSUkoc3RhdGljX2Nhc3Q8RWxlbWVudCAqPihvLT5ub2RlKCkpLT5pbm5lclRleHQoKSk7
CisgICAgICAgICAgICBmcHJpbnRmKHN0ZGVyciwgIiVzICAgIElubmVyIHRleHQ6ICVzXG4iLCBw
cmUsIGl0KTsKKyAgICAgICAgICAgIGZyZWUoaXQpOworICAgICAgICAgICAgY2hhciAqaGUgPSBX
ZWJLaXRTdHJpbmdUb0FTQ0lJKHN0YXRpY19jYXN0PFBzZXVkb0VsZW1lbnQgKj4oby0+bm9kZSgp
KS0+aG9zdEVsZW1lbnQoKS0+dGFnTmFtZSgpKTsKKyAgICAgICAgICAgIGZwcmludGYoc3RkZXJy
LCAiJXMgICAgSG9zdCBlbGVtZW50OiAlc1xuIiwgcHJlLCBoZSk7CisgICAgICAgICAgICBmcmVl
KGhlKTsKKworICAgICAgICB9IGVsc2UgaWYgKG8tPm5vZGUoKS0+aXNFbGVtZW50Tm9kZSgpKSB7
CisgICAgICAgICAgICBjaGFyICp0biA9IFdlYktpdFN0cmluZ1RvQVNDSUkoc3RhdGljX2Nhc3Q8
RWxlbWVudCAqPihvLT5ub2RlKCkpLT50YWdOYW1lKCkpOworICAgICAgICAgICAgZnByaW50Zihz
dGRlcnIsICIgOiAlc1xuIiwgdG4pOworICAgICAgICAgICAgZnJlZSh0bik7CisgICAgICAgICAg
ICBjaGFyICppdCA9IFdlYktpdFN0cmluZ1RvQVNDSUkoc3RhdGljX2Nhc3Q8RWxlbWVudCAqPihv
LT5ub2RlKCkpLT5pbm5lclRleHQoKSk7CisgICAgICAgICAgICBmcHJpbnRmKHN0ZGVyciwgIiVz
ICAgIElubmVyIHRleHQ6ICVzXG4iLCBwcmUsIGl0KTsKKyAgICAgICAgICAgIGZyZWUoaXQpOwor
ICAgICAgICB9CisgICAgfSBlbHNlIGlmIChvLT5pc1RleHQoKSkgeworICAgICAgICBjaGFyICpj
cyA9IFdlYktpdFN0cmluZ1RvQVNDSUkoc3RhdGljX2Nhc3Q8UmVuZGVyVGV4dCAqPihvKS0+b3Jp
Z2luYWxUZXh0KCkpOworICAgICAgICBmcHJpbnRmKHN0ZGVyciwgIiVzICAgIENvbnRlbnQgc3Ry
aW5nOiAlc1xuIiwgcHJlLCBjcyk7CisgICAgICAgIGZyZWUoY3MpOworICAgIH0KK30KKyNlbmRp
ZiAvLyBFTkFCTEVfU0VMRUNUSU9OX0RFQlVHR0lORworCiB9IC8vIG5hbWVzcGFjZSBXZWJDb3Jl
CkluZGV4OiBTb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvUmVuZGVyVmlldy5oCj09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0K
LS0tIFNvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9SZW5kZXJWaWV3LmgJKHJldmlzaW9uIDE3NDMy
NCkKKysrIFNvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9SZW5kZXJWaWV3LmgJKHdvcmtpbmcgY29w
eSkKQEAgLTgyLDYgKzgyLDggQEAKICAgICB2b2lkIHJlcGFpbnRWaWV3UmVjdGFuZ2xlKGNvbnN0
IExheW91dFJlY3QmKSBjb25zdDsKICAgICB2b2lkIHJlcGFpbnRWaWV3QW5kQ29tcG9zaXRlZExh
eWVycygpOwogCisgICAgdm9pZCBSZW5kZXJTZWxlY3Rpb25Gb3JQc2V1ZG9FbGVtZW50cyhSZW5k
ZXJPYmplY3QgKm8pIGNvbnN0OworCiAgICAgdmlydHVhbCB2b2lkIHBhaW50KFBhaW50SW5mbyYs
IGNvbnN0IExheW91dFBvaW50Jikgb3ZlcnJpZGU7CiAgICAgdmlydHVhbCB2b2lkIHBhaW50Qm94
RGVjb3JhdGlvbnMoUGFpbnRJbmZvJiwgY29uc3QgTGF5b3V0UG9pbnQmKSBvdmVycmlkZTsKIApJ
bmRleDogU291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL1NlbGVjdGlvblN1YnRyZWVSb290LmNwcAo9
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvU2VsZWN0aW9uU3VidHJlZVJv
b3QuY3BwCShyZXZpc2lvbiAxNzQzMjQpCisrKyBTb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvU2Vs
ZWN0aW9uU3VidHJlZVJvb3QuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0zMyw2ICszMyw5IEBACiAj
aW5jbHVkZSAiRG9jdW1lbnQuaCIKICNpbmNsdWRlICJQb3NpdGlvbi5oIgogI2luY2x1ZGUgIlJh
bmdlLmgiCisjaW5jbHVkZSAiRWxlbWVudC5oIgorI2luY2x1ZGUgIk5vZGUuaCIKKyNpbmNsdWRl
ICJodG1sZWRpdGluZy5oIgogI2luY2x1ZGUgIlZpc2libGVTZWxlY3Rpb24uaCIKIAogbmFtZXNw
YWNlIFdlYkNvcmUgewpAQCAtODksNSArOTIsNSBAQAogICAgICAgICBtX3NlbGVjdGlvbkVuZFBv
cyA9IGVuZFBvcy5kZXByZWNhdGVkRWRpdGluZ09mZnNldCgpOwogICAgIH0KIH0KLQorICAgIAog
fSAvLyBuYW1lc3BhY2UgV2ViQ29yZQpJbmRleDogU291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL1Nl
bGVjdGlvblN1YnRyZWVSb290LmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvcmVuZGVy
aW5nL1NlbGVjdGlvblN1YnRyZWVSb290LmgJKHJldmlzaW9uIDE3NDMyNCkKKysrIFNvdXJjZS9X
ZWJDb3JlL3JlbmRlcmluZy9TZWxlY3Rpb25TdWJ0cmVlUm9vdC5oCSh3b3JraW5nIGNvcHkpCkBA
IC03MSw3ICs3MSw3IEBACiAgICAgICAgIHN0YXJ0UG9zID0gbV9zZWxlY3Rpb25TdGFydFBvczsK
ICAgICAgICAgZW5kUG9zID0gbV9zZWxlY3Rpb25FbmRQb3M7CiAgICAgfQotCisgICAgCiAgICAg
Ym9vbCBzZWxlY3Rpb25DbGVhcigpIGNvbnN0CiAgICAgewogICAgICAgICByZXR1cm4gIW1fc2Vs
ZWN0aW9uU3RhcnQKSW5kZXg6IFNvdXJjZS9XZWJLaXQvbWFjL1dlYlZpZXcvV2ViRnJhbWUubW0K
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PQotLS0gU291cmNlL1dlYktpdC9tYWMvV2ViVmlldy9XZWJGcmFtZS5tbQkocmV2
aXNpb24gMTc0MzI0KQorKysgU291cmNlL1dlYktpdC9tYWMvV2ViVmlldy9XZWJGcmFtZS5tbQko
d29ya2luZyBjb3B5KQpAQCAtMTUwNiw3ICsxNTA2LDcgQEAKICAgICAgICAgfQogICAgIH0KIAot
ICAgIGZyYW1lLT5zZWxlY3Rpb24oKS5zZXRTZWxlY3RlZFJhbmdlKGNvcmUocmFuZ2UpLCAoRUFm
ZmluaXR5KWFmZmluaXR5LCBjbG9zZVR5cGluZyk7CisgICAgZnJhbWUtPnNlbGVjdGlvbigpLnNl
dFNlbGVjdGVkUmFuZ2UoY29yZShyYW5nZSksIChFQWZmaW5pdHkpYWZmaW5pdHksIGZhbHNlLCBj
bG9zZVR5cGluZyk7CiAgICAgaWYgKCFjbG9zZVR5cGluZykKICAgICAgICAgZnJhbWUtPmVkaXRv
cigpLmVuc3VyZUxhc3RFZGl0Q29tbWFuZEhhc0N1cnJlbnRTZWxlY3Rpb25JZk9wZW5Gb3JNb3Jl
VHlwaW5nKCk7CiB9CkluZGV4OiBTb3VyY2UvV2ViS2l0L21hYy9XZWJWaWV3L1dlYlZpZXcubW0K
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PQotLS0gU291cmNlL1dlYktpdC9tYWMvV2ViVmlldy9XZWJWaWV3Lm1tCShyZXZp
c2lvbiAxNzQzMjQpCisrKyBTb3VyY2UvV2ViS2l0L21hYy9XZWJWaWV3L1dlYlZpZXcubW0JKHdv
cmtpbmcgY29weSkKQEAgLTcxNjAsNyArNzE2MCw3IEBACiAgICAgICAgIGlmICghY29yZUZyYW1l
KQogICAgICAgICAgICAgcmV0dXJuOwogCi0gICAgICAgIGNvcmVGcmFtZS0+c2VsZWN0aW9uKCku
c2V0U2VsZWN0ZWRSYW5nZShjb3JlKHJhbmdlKSwgY29yZShzZWxlY3Rpb25BZmZpbml0eSksIHRy
dWUpOworICAgICAgICBjb3JlRnJhbWUtPnNlbGVjdGlvbigpLnNldFNlbGVjdGVkUmFuZ2UoY29y
ZShyYW5nZSksIGNvcmUoc2VsZWN0aW9uQWZmaW5pdHkpLCBmYWxzZSwgdHJ1ZSk7CiAgICAgfQog
fQogCkluZGV4OiBTb3VyY2UvV2ViS2l0Mi9XZWJQcm9jZXNzL1dlYlBhZ2UvaW9zL1dlYlBhZ2VJ
T1MubW0KPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYktpdDIvV2ViUHJvY2Vzcy9XZWJQYWdlL2lv
cy9XZWJQYWdlSU9TLm1tCShyZXZpc2lvbiAxNzQzMjQpCisrKyBTb3VyY2UvV2ViS2l0Mi9XZWJQ
cm9jZXNzL1dlYlBhZ2UvaW9zL1dlYlBhZ2VJT1MubW0JKHdvcmtpbmcgY29weSkKQEAgLTk1MSw3
ICs5NTEsNyBAQAogICAgICAgICBicmVhazsKICAgICB9CiAgICAgaWYgKHJhbmdlKQotICAgICAg
ICBmcmFtZS5zZWxlY3Rpb24oKS5zZXRTZWxlY3RlZFJhbmdlKHJhbmdlLmdldCgpLCBwb3NpdGlv
bi5hZmZpbml0eSgpLCB0cnVlKTsKKyAgICAgICAgZnJhbWUuc2VsZWN0aW9uKCkuc2V0U2VsZWN0
ZWRSYW5nZShyYW5nZS5nZXQoKSwgcG9zaXRpb24uYWZmaW5pdHkoKSwgZmFsc2UsIHRydWUpOwog
CiAgICAgc2VuZChNZXNzYWdlczo6V2ViUGFnZVByb3h5OjpHZXN0dXJlQ2FsbGJhY2socG9pbnQs
IGdlc3R1cmVUeXBlLCBnZXN0dXJlU3RhdGUsIHN0YXRpY19jYXN0PHVpbnQzMl90PihmbGFncyks
IGNhbGxiYWNrSUQpKTsKIH0KQEAgLTE0MTQsNyArMTQxNCw3IEBACiAKICAgICBpZiAobmV3UmFu
Z2UpIHsKICAgICAgICAgbV9jdXJyZW50QmxvY2tTZWxlY3Rpb24gPSBuZXdSYW5nZTsKLSAgICAg
ICAgZnJhbWUuc2VsZWN0aW9uKCkuc2V0U2VsZWN0ZWRSYW5nZShuZXdSYW5nZS5nZXQoKSwgVlBf
REVGQVVMVF9BRkZJTklUWSwgdHJ1ZSk7CisgICAgICAgIGZyYW1lLnNlbGVjdGlvbigpLnNldFNl
bGVjdGVkUmFuZ2UobmV3UmFuZ2UuZ2V0KCksIFZQX0RFRkFVTFRfQUZGSU5JVFksIGZhbHNlLCB0
cnVlKTsKICAgICB9CiAKICAgICBjb21wdXRlRXhwYW5kQW5kU2hyaW5rVGhyZXNob2xkc0Zvckhh
bmRsZShwb2ludCwgaGFuZGxlUG9zaXRpb24sIGdyb3dUaHJlc2hvbGQsIHNocmlua1RocmVzaG9s
ZCk7CkBAIC0xNDkxLDcgKzE0OTEsNyBAQAogICAgICAgICBicmVhazsKICAgICB9CiAgICAgaWYg
KHJhbmdlKQotICAgICAgICBmcmFtZS5zZWxlY3Rpb24oKS5zZXRTZWxlY3RlZFJhbmdlKHJhbmdl
LmdldCgpLCBwb3NpdGlvbi5hZmZpbml0eSgpLCB0cnVlKTsKKyAgICAgICAgZnJhbWUuc2VsZWN0
aW9uKCkuc2V0U2VsZWN0ZWRSYW5nZShyYW5nZS5nZXQoKSwgcG9zaXRpb24uYWZmaW5pdHkoKSwg
ZmFsc2UsIHRydWUpOwogCiAgICAgc2VuZChNZXNzYWdlczo6V2ViUGFnZVByb3h5OjpUb3VjaGVz
Q2FsbGJhY2socG9pbnQsIHRvdWNoZXMsIGNhbGxiYWNrSUQpKTsKIH0KQEAgLTE1MDcsNyArMTUw
Nyw3IEBACiAgICAgICAgICAgICByYW5nZSA9IFJhbmdlOjpjcmVhdGUoKmZyYW1lLmRvY3VtZW50
KCksIGZyb21Qb3NpdGlvbiwgdG9Qb3NpdGlvbik7CiAgICAgICAgIGVsc2UKICAgICAgICAgICAg
IHJhbmdlID0gUmFuZ2U6OmNyZWF0ZSgqZnJhbWUuZG9jdW1lbnQoKSwgdG9Qb3NpdGlvbiwgZnJv
bVBvc2l0aW9uKTsKLSAgICAgICAgZnJhbWUuc2VsZWN0aW9uKCkuc2V0U2VsZWN0ZWRSYW5nZShy
YW5nZS5nZXQoKSwgZnJvbVBvc2l0aW9uLmFmZmluaXR5KCksIHRydWUpOworICAgICAgICBmcmFt
ZS5zZWxlY3Rpb24oKS5zZXRTZWxlY3RlZFJhbmdlKHJhbmdlLmdldCgpLCBmcm9tUG9zaXRpb24u
YWZmaW5pdHkoKSwgZmFsc2UsIHRydWUpOwogICAgIH0KIAogICAgIC8vIFdlIGNhbiB1c2UgdGhl
IHNhbWUgY2FsbGJhY2sgZm9yIHRoZSBnZXN0dXJlcyB3aXRoIG9uZSBwb2ludC4KQEAgLTE1MjIs
NyArMTUyMiw3IEBACiAgICAgICAgIHJldHVybjsKIAogICAgIFZpc2libGVQb3NpdGlvbiBwb3Np
dGlvbiA9IGZyYW1lLnNlbGVjdGlvbigpLnNlbGVjdGlvbigpLnN0YXJ0KCk7Ci0gICAgZnJhbWUu
c2VsZWN0aW9uKCkuc2V0U2VsZWN0ZWRSYW5nZSh3b3JkUmFuZ2VGcm9tUG9zaXRpb24ocG9zaXRp
b24pLmdldCgpLCBwb3NpdGlvbi5hZmZpbml0eSgpLCB0cnVlKTsKKyAgICBmcmFtZS5zZWxlY3Rp
b24oKS5zZXRTZWxlY3RlZFJhbmdlKHdvcmRSYW5nZUZyb21Qb3NpdGlvbihwb3NpdGlvbikuZ2V0
KCksIHBvc2l0aW9uLmFmZmluaXR5KCksIGZhbHNlLCB0cnVlKTsKIH0KIAogdm9pZCBXZWJQYWdl
OjpzZWxlY3RXb3JkQmFja3dhcmQoKQpAQCAtMTUzNCw3ICsxNTM0LDcgQEAKICAgICBWaXNpYmxl
UG9zaXRpb24gcG9zaXRpb24gPSBmcmFtZS5zZWxlY3Rpb24oKS5zZWxlY3Rpb24oKS5zdGFydCgp
OwogICAgIFZpc2libGVQb3NpdGlvbiBzdGFydFBvc2l0aW9uID0gcG9zaXRpb25PZk5leHRCb3Vu
ZGFyeU9mR3JhbnVsYXJpdHkocG9zaXRpb24sIFdvcmRHcmFudWxhcml0eSwgRGlyZWN0aW9uQmFj
a3dhcmQpOwogICAgIGlmIChzdGFydFBvc2l0aW9uLmlzTm90TnVsbCgpICYmIHN0YXJ0UG9zaXRp
b24gIT0gcG9zaXRpb24pCi0gICAgICAgIGZyYW1lLnNlbGVjdGlvbigpLnNldFNlbGVjdGVkUmFu
Z2UoUmFuZ2U6OmNyZWF0ZSgqZnJhbWUuZG9jdW1lbnQoKSwgc3RhcnRQb3NpdGlvbiwgcG9zaXRp
b24pLmdldCgpLCBwb3NpdGlvbi5hZmZpbml0eSgpLCB0cnVlKTsKKyAgICAgICAgZnJhbWUuc2Vs
ZWN0aW9uKCkuc2V0U2VsZWN0ZWRSYW5nZShSYW5nZTo6Y3JlYXRlKCpmcmFtZS5kb2N1bWVudCgp
LCBzdGFydFBvc2l0aW9uLCBwb3NpdGlvbikuZ2V0KCksIHBvc2l0aW9uLmFmZmluaXR5KCksIGZh
bHNlLCB0cnVlKTsKIH0KIAogdm9pZCBXZWJQYWdlOjptb3ZlU2VsZWN0aW9uQnlPZmZzZXQoaW50
MzJfdCBvZmZzZXQsIHVpbnQ2NF90IGNhbGxiYWNrSUQpCkBAIC0xNTUyLDcgKzE1NTIsNyBAQAog
ICAgICAgICAgICAgYnJlYWs7CiAgICAgfQogICAgIGlmIChwb3NpdGlvbi5pc05vdE51bGwoKSAm
JiBzdGFydFBvc2l0aW9uICE9IHBvc2l0aW9uKQotICAgICAgICBmcmFtZS5zZWxlY3Rpb24oKS5z
ZXRTZWxlY3RlZFJhbmdlKFJhbmdlOjpjcmVhdGUoKmZyYW1lLmRvY3VtZW50KCksIHBvc2l0aW9u
LCBwb3NpdGlvbikuZ2V0KCksIHBvc2l0aW9uLmFmZmluaXR5KCksIHRydWUpOworICAgICAgICBm
cmFtZS5zZWxlY3Rpb24oKS5zZXRTZWxlY3RlZFJhbmdlKFJhbmdlOjpjcmVhdGUoKmZyYW1lLmRv
Y3VtZW50KCksIHBvc2l0aW9uLCBwb3NpdGlvbikuZ2V0KCksIHBvc2l0aW9uLmFmZmluaXR5KCks
IGZhbHNlLCB0cnVlKTsKICAgICBzZW5kKE1lc3NhZ2VzOjpXZWJQYWdlUHJveHk6OlZvaWRDYWxs
YmFjayhjYWxsYmFja0lEKSk7CiB9CiAKQEAgLTE2MTQsNyArMTYxNCw3IEBACiAgICAgICAgIHJl
dHVybjsKICAgICAKICAgICBmcmFtZS5lZGl0b3IoKS5zZXRJZ25vcmVDb21wb3NpdGlvblNlbGVj
dGlvbkNoYW5nZSh0cnVlKTsKLSAgICBmcmFtZS5zZWxlY3Rpb24oKS5zZXRTZWxlY3RlZFJhbmdl
KHdvcmRSYW5nZS5nZXQoKSwgVVBTVFJFQU0sIHRydWUpOworICAgIGZyYW1lLnNlbGVjdGlvbigp
LnNldFNlbGVjdGVkUmFuZ2Uod29yZFJhbmdlLmdldCgpLCBVUFNUUkVBTSwgZmFsc2UsIHRydWUp
OwogICAgIGZyYW1lLmVkaXRvcigpLmluc2VydFRleHQobmV3VGV4dCwgMCk7CiAgICAgZnJhbWUu
ZWRpdG9yKCkuc2V0SWdub3JlQ29tcG9zaXRpb25TZWxlY3Rpb25DaGFuZ2UoZmFsc2UpOwogfQpA
QCAtMTY0MSw3ICsxNjQxLDcgQEAKIAogICAgIC8vIFdlIGRvbid0IHdhbnQgdG8gbm90aWZ5IHRo
ZSBjbGllbnQgdGhhdCB0aGUgc2VsZWN0aW9uIGhhcyBjaGFuZ2VkIHVudGlsIHdlIGFyZSBkb25l
IGluc2VydGluZyB0aGUgbmV3IHRleHQuCiAgICAgZnJhbWUuZWRpdG9yKCkuc2V0SWdub3JlQ29t
cG9zaXRpb25TZWxlY3Rpb25DaGFuZ2UodHJ1ZSk7Ci0gICAgZnJhbWUuc2VsZWN0aW9uKCkuc2V0
U2VsZWN0ZWRSYW5nZShyYW5nZS5nZXQoKSwgVVBTVFJFQU0sIHRydWUpOworICAgIGZyYW1lLnNl
bGVjdGlvbigpLnNldFNlbGVjdGVkUmFuZ2UocmFuZ2UuZ2V0KCksIFVQU1RSRUFNLCBmYWxzZSwg
dHJ1ZSk7CiAgICAgZnJhbWUuZWRpdG9yKCkuaW5zZXJ0VGV4dChuZXdUZXh0LCAwKTsKICAgICBm
cmFtZS5lZGl0b3IoKS5zZXRJZ25vcmVDb21wb3NpdGlvblNlbGVjdGlvbkNoYW5nZShmYWxzZSk7
CiB9CkBAIC0xNzUzLDcgKzE3NTMsNyBAQAogICAgICAgICByZXR1cm47CiAgICAgfQogICAgIAot
ICAgIGZyYW1lLnNlbGVjdGlvbigpLnNldFNlbGVjdGVkUmFuZ2UocmFuZ2UuZ2V0KCksIFVQU1RS
RUFNLCB0cnVlKTsKKyAgICBmcmFtZS5zZWxlY3Rpb24oKS5zZXRTZWxlY3RlZFJhbmdlKHJhbmdl
LmdldCgpLCBVUFNUUkVBTSwgZmFsc2UsIHRydWUpOwogICAgIGlmIChjb3JyZWN0aW9uLmxlbmd0
aCgpKQogICAgICAgICBmcmFtZS5lZGl0b3IoKS5pbnNlcnRUZXh0KGNvcnJlY3Rpb24sIDApOwog
ICAgIGVsc2UKSW5kZXg6IFRvb2xzL01pbmlCcm93c2VyL21hYy9TZXR0aW5nc0NvbnRyb2xsZXIu
bQo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09Ci0tLSBUb29scy9NaW5pQnJvd3Nlci9tYWMvU2V0dGluZ3NDb250cm9sbGVy
Lm0JKHJldmlzaW9uIDE3NDMyNCkKKysrIFRvb2xzL01pbmlCcm93c2VyL21hYy9TZXR0aW5nc0Nv
bnRyb2xsZXIubQkod29ya2luZyBjb3B5KQpAQCAtMjgsNyArMjgsNyBAQAogI2ltcG9ydCAiQXBw
RGVsZWdhdGUuaCIKICNpbXBvcnQgIkJyb3dzZXJXaW5kb3dDb250cm9sbGVyLmgiCiAKLXN0YXRp
YyBOU1N0cmluZyAqIGNvbnN0IGRlZmF1bHRVUkwgPSBAImh0dHA6Ly93d3cud2Via2l0Lm9yZy8i
Oworc3RhdGljIE5TU3RyaW5nICogY29uc3QgZGVmYXVsdFVSTCA9IEAiZmlsZTovLy9Vc2Vycy9k
Zy90ZXN0Lmh0bWwiOwogc3RhdGljIE5TU3RyaW5nICogY29uc3QgRGVmYXVsdFVSTFByZWZlcmVu
Y2VLZXkgPSBAIkRlZmF1bHRVUkwiOwogCiBzdGF0aWMgTlNTdHJpbmcgKiBjb25zdCBVc2VXZWJL
aXQyQnlEZWZhdWx0UHJlZmVyZW5jZUtleSA9IEAiVXNlV2ViS2l0MkJ5RGVmYXVsdCI7Cg==
</data>

          </attachment>
          <attachment
              isobsolete="0"
              ispatch="1"
              isprivate="0"
          >
            <attachid>243610</attachid>
            <date>2014-12-20 17:53:48 -0800</date>
            <delta_ts>2014-12-20 17:53:48 -0800</delta_ts>
            <desc>Patch for an edge case where command-right or command-left could cause a crash</desc>
            <filename>2014-12-20-crash.patch</filename>
            <type>text/plain</type>
            <size>1483</size>
            <attacher name="David Gatwood">dgatwood</attacher>
            
              <data encoding="base64">SW5kZXg6IFNvdXJjZS9XZWJDb3JlL2VkaXRpbmcvVmlzaWJsZVVuaXRzLmNwcAo9PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
Ci0tLSBTb3VyY2UvV2ViQ29yZS9lZGl0aW5nL1Zpc2libGVVbml0cy5jcHAJKHJldmlzaW9uIDE3
NDMyNCkKKysrIFNvdXJjZS9XZWJDb3JlL2VkaXRpbmcvVmlzaWJsZVVuaXRzLmNwcAkod29ya2lu
ZyBjb3B5KQpAQCAtMzEsNiArMzEsNyBAQAogI2luY2x1ZGUgIkhUTUxOYW1lcy5oIgogI2luY2x1
ZGUgIklubGluZVRleHRCb3guaCIKICNpbmNsdWRlICJOb2RlVHJhdmVyc2FsLmgiCisjaW5jbHVk
ZSAiUHNldWRvRWxlbWVudC5oIgogI2luY2x1ZGUgIlJlbmRlckJsb2NrRmxvdy5oIgogI2luY2x1
ZGUgIlJlbmRlck9iamVjdC5oIgogI2luY2x1ZGUgIlJlbmRlcmVkUG9zaXRpb24uaCIKQEAgLTc1
MSw2ICs3NTUsOSBAQAogICAgICAgICBzdGFydE5vZGUgPSByb290Qm94LT5nZXRMb2dpY2FsU3Rh
cnRCb3hXaXRoTm9kZShzdGFydEJveCk7CiAgICAgICAgIGlmICghc3RhcnROb2RlKQogICAgICAg
ICAgICAgcmV0dXJuIFZpc2libGVQb3NpdGlvbigpOworICAgICAgICBpZiAoc3RhcnROb2RlLT5p
c1BzZXVkb0VsZW1lbnQoKSkgeworICAgICAgICAgICAgc3RhcnROb2RlID0gc3RhdGljX2Nhc3Q8
UHNldWRvRWxlbWVudCAqPihzdGFydE5vZGUpLT5ob3N0RWxlbWVudCgpOworICAgICAgICB9CiAg
ICAgfSBlbHNlIHsKICAgICAgICAgLy8gR2VuZXJhdGVkIGNvbnRlbnQgKGUuZy4gbGlzdCBtYXJr
ZXJzIGFuZCBDU1MgOmJlZm9yZSBhbmQgOmFmdGVyIHBzZXVkb2VsZW1lbnRzKSBoYXZlIG5vIGNv
cnJlc3BvbmRpbmcgRE9NIGVsZW1lbnQsCiAgICAgICAgIC8vIGFuZCBzbyBjYW5ub3QgYmUgcmVw
cmVzZW50ZWQgYnkgYSBWaXNpYmxlUG9zaXRpb24uIFVzZSB3aGF0ZXZlciBmb2xsb3dzIGluc3Rl
YWQuCkBAIC04MTksNiArODI2LDkgQEAKICAgICAgICAgZW5kTm9kZSA9IHJvb3RCb3gtPmdldExv
Z2ljYWxFbmRCb3hXaXRoTm9kZShlbmRCb3gpOwogICAgICAgICBpZiAoIWVuZE5vZGUpCiAgICAg
ICAgICAgICByZXR1cm4gVmlzaWJsZVBvc2l0aW9uKCk7CisgICAgICAgIGlmIChlbmROb2RlLT5p
c1BzZXVkb0VsZW1lbnQoKSkgeworICAgICAgICAgICAgZW5kTm9kZSA9IHN0YXRpY19jYXN0PFBz
ZXVkb0VsZW1lbnQgKj4oZW5kTm9kZSktPmhvc3RFbGVtZW50KCk7CisgICAgICAgIH0KICAgICB9
IGVsc2UgewogICAgICAgICAvLyBHZW5lcmF0ZWQgY29udGVudCAoZS5nLiBsaXN0IG1hcmtlcnMg
YW5kIENTUyA6YmVmb3JlIGFuZCA6YWZ0ZXIgcHNldWRvZWxlbWVudHMpIGhhdmUgbm8gY29ycmVz
cG9uZGluZyBET00gZWxlbWVudCwKICAgICAgICAgLy8gYW5kIHNvIGNhbm5vdCBiZSByZXByZXNl
bnRlZCBieSBhIFZpc2libGVQb3NpdGlvbi4gVXNlIHdoYXRldmVyIHByZWNlZGVzIGluc3RlYWQu
Cg==
</data>

          </attachment>
          <attachment
              isobsolete="0"
              ispatch="1"
              isprivate="0"
          >
            <attachid>243617</attachid>
            <date>2014-12-21 19:54:00 -0800</date>
            <delta_ts>2014-12-21 19:54:00 -0800</delta_ts>
            <desc>Fix for another crashing edge case</desc>
            <filename>2014-12-21.patch</filename>
            <type>text/plain</type>
            <size>0</size>
            <attacher name="David Gatwood">dgatwood</attacher>
            
              <data encoding="base64"></data>

          </attachment>
      

    </bug>

</bugzilla>